среда, 24 декабря 2014 г.

GIT. Commits. Branches

git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/thedobriy/my_cat_1.git
git push -u origin master
heroku create
git push heroku master
heroku run rake db:migrate

git co -b static-pages  - создание ветки
rails g controller StaticPages --no-test-framework
git add .
git commit -m "Finish static pages"
git co master
git merge static-pages
git push
git push heroku
heroku run rake db:migrate

понедельник, 22 декабря 2014 г.

Installing VIM

Source: http://smileart.in.ua/vim-101

$ vim --version | grep ruby
$ apt-cache search vim | grep vim-
$ sudo apt-get install vim-rails
$ sudo apt-get install exuberant-ctags
wget --no-check-certificate https://github.com/joshfng/railsready/raw/master/railsready.sh
&& bash railsready.sh
Дальше все делаем по инструкции  от самого akitaonrails. Я буду следовать только ее Linux части, ведь ставлю все это, как уже говорил, под управлением Ubuntu. Практически то же актуально и для MacOS X. Владельцы других ОС могут сами подсмотреть в README.textile, что и как им делать.

Клонируем репозиторий в ту самую папку vim:

$ git clone git://github.com/akitaonrails/vimfiles.git ~/.vim
Далее переходим в нее и запускаем инициализацию/обновление модулей:

$ git submodule update --init
Теперь создаем файлик .vimrc, в который прописываем где у нас лежит .vimrc с настройками akita

$ echo "source ~/.vim/vimrc" > ~/.vimrc
Если вы планируете использовать gvim (графический вариант vim с меню и прочими понтами), то вам стоит создать и .gvimrc

echo "source ~/.vim/gvimrc" > ~/.gvimrc

четверг, 18 декабря 2014 г.

Ruby on Rails, мультиязычность

Добавить в Gemfile строчку
gem 'i18n'
(выполнить bundle install)

в config/application.rb раскомментировать строки и выбрать нужный язык:
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :ru

в config/locales/en.yml прописать соответствия ключ-значение для нужных языков, например:
en:
  admin_title: "Admin Panel"
  user_created: "succesfully created."
  .....
ru:
  admin_title: "Панель администрирования"
  .....

использовать можно с помощью хелпера t(:key) в контроллерах:
flash[:notice] = "#{@user.login} #{t :user_created}"
и view (haml):
%title= t :admin_title

Guide

VIM keys

o  to open a line BELOW the cursor and start Insert mode.
O  to open a line ABOVE the cursor.

a  to insert text AFTER the cursor.
A  to insert text after the end of the line.

e  command moves to the end of a word.

y  operator yanks (copies) text,  p  puts (pastes) it.

R  enters Replace mode until  <ESC>  is pressed.

Typing ":set xxx" sets the option "xxx".  Some options are:
  'ic' 'ignorecase' ignore upper/lower case when searching
'is' 'incsearch' show partial matches for a search phrase
'hls' 'hlsearch' highlight all matching phrases

пятница, 12 декабря 2014 г.

воскресенье, 14 сентября 2014 г.

Байты для 4хразрядного семисегментника

Для анодного дисплея:

первая цифра: 11000111 (читаем справа налево) = 0xE3;
вторая цифра: 10100111 = 0xE5;
третья цифра: 10010111 = 0xE9;
четвертая цифра: 10001111 = 0xF1.
static uint8_t pos[4]= {0xE3,0xE5,0xE9,0xF1};
static uint8_t digit[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; 


Для катодного дисплея:

первая цифра: 00111000 (читаем справа налево) = 0x1C;
вторая цифра: 01011000 = 0x1A;
третья цифра: 01101000 = 0x16;
четвертая цифра: 01110000 = 0x0E.
static uint8_t digit[11] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; 
static uint8_t pos[4]= {0x1C,0x1A,0x16,0x0E};    

Arduino - скетч обратного отсчета

Скетч таймера от 0 до 9 со сдвиговым регистром и семисегментником

#include <SPI.h> //подключаем библиотеку SPI
enum { digitPin = 9 }; //выбираем линию SS регистра на 9-м пине Arduino
unsigned long timer=0, digitTimerPrev=0;
int i=0, j=0;

void setup(){
  SPI.begin(); //инициализируем SPI
    //переводим выбранный для передачи пин в режим вывода
  pinMode(digitPin, OUTPUT);
}


void loop(){
  //Заполняем массив байтами, которые будем передавать
  static uint8_t digit[16] = 
    {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
    //передаем по два байта из массива и защелкиваем регистры 
    timer=millis();
    
   if (timer-digitTimerPrev>1000){
      digitalWrite(digitPin, LOW);
      SPI.transfer(digit[i]);
      
      digitalWrite(digitPin, HIGH);
      i<9 ? i++ : i=0;
      digitTimerPrev=timer;
      }
}

суббота, 13 сентября 2014 г.

Arduino + 7-мисегментные индикатор с общим катодом + сдвиговый регистр

Схема подключения как здесь: http://greenoakst.blogspot.com/2011/11/arduino-7-spi.html.
Единственное, но COM семисегментника подаем землю а не плюс.
Скетч будет для 7-мисегментные индикатор с общим катодом такой:

#include <SPI.h> // подключаем библиотеку SPI
enum { reg = 8 }; // провод CS подсоединяем к 8-му пину Arduino

void setup()
{
  SPI.begin();  // инициализируем SPI
  pinMode(reg, OUTPUT); // настраиваем 8-й пин как выход
}

void loop()
{
  // храним в массиве все цифры
  static uint8_t digit[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
  
  // выводим цифры по одной
  for (int i=0;i<16;i++){
    digitalWrite(reg, LOW); // притягиваем CS к земле - начало передачи
    SPI.transfer(digit[i]); // передаем байт
    digitalWrite(reg, HIGH); // отпускаем  CS - конец передачи
    delay(1000); // ждем секунду
  }
  //очистим дисплей на секунду
  digitalWrite(reg, LOW);
  SPI.transfer(0xFF);
  digitalWrite(reg, HIGH);
  delay(1000);
}

SPI и Ардуино

Схема:
MOSI (Master Out Slave In) или просто SI – передача данных от ведущего к ведомому.
MISO (Master In Slave Out) или просто SO – передача данных от ведомого к ведущему.
CS (Chip Select) или SS (Slave Select) – выбор ведомого устройства.
SCLK (Serial CLocK) или просто SCK – передача тактового сигнала от ведущего к ведомому.

пятница, 12 сентября 2014 г.

Ардуино + сдвиговый регистр

   Отличное пособие для начинания тут: http://arduino.ru/Tutorial/registr_74HC595

VCC – питание;
GND – земля;
DS – последовательный ввод. Должен подключаться к проводу MOSI шины SPI;
Q0-Q7 – параллельные выходы;
SHCP – тактовый вход. Должен подключаться к проводу SCK шины SPI;
STCP – защелкивание выводов. Должен подключаться к проводу CS шины SPI;
OE – разрешение работы выходов. При низком уровне выходы работают;
Q7S – последовательный вывод;
MR – общий сброс. Если притянуть его к земле – входы обнулятся.

Скетч для двух регистров 74HC595 и семисегментным 4хразрядным дисплеем с общим катодом:
// подключаем библиотеку SPI
#include <SPI.h>
// провод CS подсоединяем к 8-му пину Arduino
enum { reg = 8 };

void setup()
{
  
  Serial.begin(9600);
  Serial.println("Started");
// инициализируем SPI
  SPI.begin();
  Serial.println("SPI");
// настраиваем 8-й пин как выход 
  pinMode(reg, OUTPUT);
}

// храним в массиве все цифры 
static uint8_t digit[11] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

void loop()
{
  for (int i=0;i<11;i++){
    // притягиваем CS к земле - начало передачи
    Serial.println(digit[i]);
    digitalWrite(reg, LOW);
    // передаем катодный байт
    SPI.transfer(digit[i]);
    // передаем анодный байт
    SPI.transfer(0xFF);
    // отпускаем  CS - конец передачи
    digitalWrite(reg, HIGH);
    // ждем секунду
    delay(1000);
  }
}

пятница, 16 мая 2014 г.

Как нарисовать 7 перпендикулярных линий красного цвета, 2 из которых зелёные и 2 прозрачные?

Петров пришел во вторник на совещание. Ему там вынули мозг, разложили по блюдечкам и стали есть, причмокивая и вообще выражая всяческое одобрение. Начальник Петрова, Недозайцев, предусмотрительно раздал присутствующим десертные ложечки. И началось.
— Коллеги, — говорит Морковьева, — перед нашей организацией встала масштабная задача. Нам поступил на реализацию проект, в рамках которого нам требуется изобразить несколько красных линий. Вы готовы взвалить на себя эту задачу?
— Конечно, — говорит Недозайцев. Он директор, и всегда готов взвалить на себя проблему, которую придется нести кому-то из коллектива. Впрочем, он тут же уточняет: — Мы же это можем?

четверг, 24 апреля 2014 г.

Модуль для первой прописной буквы в каждом слове.

Недавно попался на глаза вот такой модуль-хелпер:

module StoreHelper
  def capitalize_words(string)
    string.split(' ').map {|word| word.capitalize}.join(' ')
  end
end

По идее он преобразует каждое слово в переменной с помощью .capitalize. Как доберусь до тачанки - проверю.

четверг, 17 апреля 2014 г.

link_to + tags

We could use html tags inside link_to with constructions like this:
 
<%= link_to companies_path, class: "dropdown-toggle", data: { toggle: "dropdown" } do %>
   Link_Name <b class="caret"></b>
<% end %>

Assets

rake assets:clean
rake assets:precompile

Online CSS editors

http://jsfiddle.net
http://www.bootply.com

Custom badges for Bootstrap 3

My CSS code is:

.badge {
  padding: 1px 9px 2px;
  font-size: 12.025px;
  font-weight: bold;
  white-space: nowrap;
  color: #ffffff;
  background-color: #007700;
  -webkit-border-radius: 9px;
  -moz-border-radius: 9px;
  border-radius: 9px;
}


breadcrumbs_on_rails или Хлебные крошки

Не мог долго разобраться как добавлять в путь для "хлебных крошек" динамический контент (например, город). Итак у меня заработало следующее:

@city = City.find(params[:city_id])
add_breadcrumb "#{@city.name}", "#{@city.id}"


А реально помог мне этот материал: Easy and flexible breadcrumbs for Rails

четверг, 3 апреля 2014 г.

Управление версиями GIT

Отличный учебник для начинающих - http://githowto.com/ru
git config --global alias.co checkout - создание алиасов
Для отката изменений (которые Вы не успели закомментировать):
1) git checkout master
2) git status
3) git checkout <file>
4) git status


пятница, 28 марта 2014 г.

Партиал выводящий ошибки заполнения форм

Для универсальности партиала ошибок, кму надо передавать объект, например вот так:
<%= render 'shared/error_messages', :object => @user %>
А сам партиал error_messages тогда выглядит так:
<% if object.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-error">
      The form contains <%= pluralize(object.errors.count, "error") %>.
    </div>
    <ul>
    <% object.errors.full_messages.each do |msg| %>
      <li>* <%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>

среда, 26 марта 2014 г.

VIM - сочетания клавиш

Команды для перемещения по тексту:

|, 0, home — в начало строки;
^ — на первый непустой символ в строке;
$, end — в конец строки.
m — на половину ширины экрана;
g — на нижнюю строку;
e — до конца слова;
- — на строку вверх и на первый не пустой символ;
+, Enter — на строку вниз и на первый не пустой символ;
G — на последнюю строку;
H — на первую строку экрана;
M — на среднюю строку экрана;
L — на последнюю строку экрана;
w — на слово вперед;
b — на слово назад;
( — на предложение назад (до точки);
) — на предложение вперед (до точки);
{ — на абзац назад (до пустой строки);
} — на абзац вперед (до пустой строки);
:ju — список переходов.

 Редактирование текста:
Del, x - удаление символа под курсором;
X - удаление символа перед курсором;
u, :u — отмена последнего действия;
U — отменить все изменения, повлиявшие на текущую строку;
~ — перевести в верхний или нижний регистр в зависимости от текущего символа под курсором;
C — удалить от курсора и до конца строки с переходом в режим ввода;
D — удалить от текущего символа до конца строки;
dd — вырезать строку, на которой стоит курсор. Перед любой командой можно ввести числовой модификатор, который укажет сколько раз выполнить команду. Например: 3dd - удалит три строки начиная с текущей;
yy — копирует строку. Также можно использовать числовой модификатор;
p — вставить после текущей строки;
P — вставить перед текущей строкой;
<< — сдвиг влево текущей строки;
>> — сдвиг вправо текущей строки;
J — объединение текущей строки с последующей.

Удобный список команд: http://beget.ru/art_vim

четверг, 20 марта 2014 г.

Добавление отладочной информации к шаблону сайта

Добавление отладочной информации к шаблону сайта.
<%= debug(params) if Rails.env.development? %>

Приглашение в командной строке в терминале Ubuntu

Моя строка :
PS1="\[\033[1;33;1;34m\]\u@:\[\033[0;32m\]\W> \[\033[0m\]\[\033[0m\]"

Приглашение в командной среде bash изменяется при помощи изменения переменных PS1, PS2, PS3, PS4 и PROMPT_COMMAND.
  •  PS1 - переменная, которая
    задает вид строки приглашения командной строки, которое bash выводит,
    когда ожидает ввода очередной команды пользователем.
  •  PS2 - переменная, отвечающая за вторичный тип приглашения ввода.
  •  PS3 - третичное приглашение, выводится тогда, когда пользователь должен сделать выбор в операторе select.
  •  PS4 - приглашение
    четвертого уровня, выводится при отладки сценариев (скриптов) в начале
    каждой строки перед командой перед исполняющейся командой.
  •  PROMPT_COMMAND - содержимое этой переменной выполняется перед каждой строкой приглашения.