среда, 8 февраля 2012 г.

Ruby on Rails и RVM на Mac OS X Lion

Установим Homebrew - менеджер пакетов для OS X
#ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"


С помощью brew можно ставить пакеты так, как это часто делается в Linux. Например, если нужен Git
#brew install git


И MySQL
#brew install mysql


Следуйте инструкциям, которые будут выведены после установки.


Дальше установим RVM - систему управления версиями ruby
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)


Кроме переключения версий ruby, RVM выполняет и другие функции. Например, можно поставить iconv
#rvm pkg install iconv


Теперь нужно бы выполнить rvm install 1.9.3, но команда не сработает. Причина в том, что в OS X Lion стандартный компилятор поменяли с GCC на Clang. Что с этим делать?


1. Можно попробовать скомпилировать ruby с помощью Clang 
#rvm install 1.9.3 --with-gcc=clang Но у меня это тоже не сработало.


2. Или можно указать "правильный" GCC
#export CC=/usr/bin/gcc-4.2; rvm install 1.9.3


Если его нет, то скачать можно тут https://github.com/kennethreitz/osx-gcc-installer/downloads


Даунгрейдить или удалять XCode при этом не нужно.


Переключимся на нужную версию руби
#rvm use 1.9.3


Создадим gemset
#rvm gemset create rails3


Переключимся на нужный gemset
#rvm gemset use rails3



Установим Rails
#gem install rails --pre



Потом
#gem install bundler


И другие нужные гемы, например
#gem install capistrano
#gem install capistrano-ext
#gem install git_remote_branch
#gem install open_gem
#gem install heroku


Ребята из 37signals (создатели RoR) советуют использовать pow - Rack-сервер, не требующий настройки, идеальный менеджер локальных сайтов. Установим его
#gem install powder
#curl get.pow.cx | sh


Готово, запускаем (нужно находиться в директории проекта)
#powder link
#powder open


Pow автоматически создаст виртуальный хост по имени директории и запустит ваше веб-приложение на RoR. 


Еще RVM может перегрузить команду cd для автоматической загрузки нужного окружения, когда вы переходите в директорию проекта. Сделать это можно так

rvm use 1.9.3@rails3 --rvmrc

Все.

воскресенье, 7 августа 2011 г.

Замена по регулярному выражению в MySQL

Вот так можно делать замену подстроки в строке по регулярному выражению в MySQL.

DELIMITER //

CREATE FUNCTION preg_replace(pattern varchar(10000), replacer varchar(10000), original varchar(10000))
RETURNS varchar(10000)
DETERMINISTIC
BEGIN
DECLARE temp VARCHAR(10000);
DECLARE ch VARCHAR(1);
DECLARE i INT;
SET i = 1;
SET temp ='';
IF original REGEXP pattern THEN
loop_label: LOOP
IF i>CHAR_LENGTH(original) THEN
LEAVE loop_label;
END IF;
SET ch = SUBSTRING(original,i,1);
IF NOT ch REGEXP pattern THEN
SET temp = CONCAT(temp, ch);
ELSE
SET temp = CONCAT(temp,replacer);
END IF;
SET i=i+1;
END LOOP;
ELSE
SET temp = original;
END IF;
RETURN temp;
END//

UPDATE news
SET content = preg_replace('\r+', ' ', content)//

пятница, 5 августа 2011 г.

Yii DAO и маппинг

При работе с фреймворком yii возникла необходимость выполнить сложный sql-запрос. Такой, что проще было использовать DAO, чем Active Record.

Примечание: AR не дает решения для всех задач, касающихся работы с базами данных. Лучше всего его использовать для моделирования таблиц в конструкциях PHP и для несложных SQL-запросов. Для сложных случаев следует использовать Yii DAO.

Но очень расстраивало, что DAO возвращает ассоциированные массивы, а не объекты. Везде на сайте используется ORM, а тут вдруг выборка массивами...

К счастью, было найдено решение при помощи PDO-магии. И оно работает, отдает и заполняет объект, как при использовании AR.


Copy Source | Copy HTML
  1. $command=Yii::app()->db->createCommand($sql);
  2. $command->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "Post");
  3. $posts=$command->queryAll();

вторник, 22 марта 2011 г.

Как добавить BOM

Небольшой скрипт, добавляющий UTF BOM к файлу. Да, это умеют многие текстовые редакторы. Но иногда лучше решать подобные задачи инструментально.

Copy Source | Copy HTML
  1. #!/bin/bash
  2. fi=$1;
  3. fo="$1_with_bom"
  4. echo -ne '\xEF\xBB\xBF' > $fo
  5. cat $fi >> $fo
  6. mv $fo $fi

К слову, так можно удалить BOM из строки на php
$str = preg_replace("/\xef\xbb\xbf/","",$str);

суббота, 4 декабря 2010 г.

Экспорт словаря из LinguaLeo

Предыстория


Несколько месяцев назад я серьёзно решил повысить свой уровень английского языка. В помошники выбрал замечательный сайт LinguaLeo.ru. И в дополнение установил на свой Android не менее замечательную программу AnyMemo
Кратко расскажу о них. 
Концепция LinguaLeo: просматриваем аутентичный контент, кликаем по неизвестным словам, они переводятся и добавляются в словарь. Потом заучиваем эти слова в специальных упражнениях.
AnyMemo - карточки для заучивания. Показывается слово, по клику появляется перевод. От того, насколько легко мы его вспомнили, зависит время, через которая карточка будет показана вновь.


Каждый из этих помошников имеет свой недостаток. 
Для AnyMemo необходимо самому создавать словари с карточками для заучивания, а это мне делать лень. 
В LinguaLeo я считаю недостатком то, что слово, пройдя через 3 этапа упражнения, считается выученным и остается в словаре, не возвращаясь на повторение. 


Вот поэтому я решил как-то их синхронизировать.


Собственно процесс

четверг, 15 апреля 2010 г.

Анализ использования места на жестком диске - используем консоль

В качестве продолжения статьи о графическом представлении данных на диске, приведу список консольных команд, которые удобно использовать для анализа использования места на диске.

# свободное место на дисках
df -h

# размер файла
du -sh my_file
# размер папки
du -sh my_dir

# список файлов и папок с указанием размера, суммарный размер
du -shc my_dir/*
# список файлов и папок с указанием размера, по возрастанию
du -sh my_dir/* | sort -rh

# размер файла
ls -sh my_file
# список файлов с указанием размера, по возрастанию
ls -shS my_dir
# то же самое с рекурсивным заходом в подкаталоги
ls -shSR my_dir

Наверняка есть другие вариации. Это только те, что "насочинял" я.

среда, 14 апреля 2010 г.

Анализ использования места на жестком диске - графическое представление

Наверно даже аккуратным людям приходится иногда разгребать содержимое жесткого диска с целью освобождения пространства на нем. Я не аккуратный. И иногда мне приходится делать это срочно, если места вдруг не хватает для скачивания/копирования чего-либо.

Вот обзор программ для linux, которые могут помочь с этим процессом, представив содержимое диска графически.



Таблица - сравнение функционала программ




вторник, 13 апреля 2010 г.

Настройка phpMyAdmin в связке с Lighttpd и CodeIgniter

Установка phpMyAdmin

Подразумевается, что PHP, Lighttpd, MySql, CodeIgniter установлены и работают.

#pacman -S phpmyadmin php-mcrypt

Настройка PHP

В файле /etc/php/php.ini в строчке 'open_basedir' добавить

:/usr/share/webapps/:/etc/webapps

и раскомментировать строку

extension=mcrypt.so

Настройка MySQL

Создать пользователя mysql

mysql -u root -p YOURROOTPASSWORD
mysql> grant usage on mysql.* to myuser@localhost identified by 'mypass';


Настройка phpMyAdmin

#cd /usr/share/webapps/phpmyadmin
#sudo mkdir config
#sudo chgrp http config
#sudo chmod g+w config
#ln -s /usr/share/webapps/phpMyAdmin/ /srv/http/phpmyadmin


Отредактировать /etc/webapps/phpmyadmin/config.inc.php

cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['controluser'] = 'myuser';
$cfg['Servers'][$i]['controlpass'] = 'mypass';
$cfg['blowfish_secret'] = 'mysecret'


Перейти на http://localhost/phpmyadmin/setup

rm -rf /usr/share/webapps/phpMyAdmin/config/

Настройка lighttpd

В файле /etc/lighttpd/lighttpd.conf изменить правило

url.rewrite = (
"^/phpmyadmin/.*/?" => "$0",
"^/([^.]+)$" => "/index.php/$1"
)

Делаем TextMate из GEdit

Text-Mate - обалденный текстовый редактор, рекомендованный создателями Ruby On Rails. Страдая из-за его отсутствия на родной платформе Linux, я отправился на поиски альтернативы. Честно говоря, я бы отправился даже будь у Text-Mate линукс-версия, так как стоит редактор $50.

Сначала обратил внимание на RedCar - преемник Text-Mate, написанный на Ruby и Vala. К сожалению он еще сырой, хотя в перспективе должно получиться то что надо. В Arch-e нашелся в AUR и автоматически собрался из git, но был вскоре удален.

Погуглив еще, я наткнулся на статью на Хабре с предложением оригинального решения.

Итак, что я сделал:

1. Установил пакеты gedit-plugins и gedit-plugins-extra.

2. Скачал шрифт и поместил в ~/.fonts

3. Выбрал в gedit Правка->Параметры, расставил галочки


4. Включил модули:
Advanced Bookmarks - закладки
Word completion - автодописывание
TextMate Style Autocompletion - дописывание слов по esc, как в TextMate; подумав, оставил его.
Class Browser - обозраватель классов
Click_Config - настройка выделения текста по щелчкам мыши
Code Formatter - авто-форматирование для руби
Control Your Tabs - переключение вкладок по Ctrl-Tab
Current Line Highlight - настройка цвета, которым выделяется текущая строка
Edit Shortcuts - редактирование комбинаций клавиш для всего, в том числе для плагинов
Find in Documents - поиск во всех открытых документах
Reopen Tabs - восстановление вкладок прошлого сеанса
Save without trailing space - удаление лишних пустых строк при сохранении
Split View - разделение окна по вертикали/горизонтали
Switcher - список открытых документов для переключения между ними
Tabs Extend - дополнительные действия со вкладками
Auto Tab - детектор настроек табуляции в исходниках
Быстрое открытие
Встроенный терминал - внизу
Горячие клавиши для Rails
Дополнение скобок
Изменение регистра
Панель обозревателя файлов - удобная панелька сбоку
Поиск и замена по регулярным выражениям
Проверка орфографии
Сохранение сеансов
Сохранение без хвостовых пробелов
Список дел - порт TODO list из Text-Mate
Статистика документа
Таблица символов
Умные отступы - то, о чем мечтал!
Фрагменты текста - сниппеты, вставляет часто используемые шаблоны

Пока что остановился на таком списке) Недостающие плагины скачиваются здесь.

5. Подключил подсветку .rhtml и .rjs (.rb была сразу)
wget http://grigio.org/files/x-rhtml.xml
sudo mv x-rhtml.xml /usr/share/mime/packages
wget http://grigio.org/files/rhtml.lang
sudo mv rhtml.lang /usr/share/gtksourceview-1.0/language-specs/

6. Убрал панель инструментов, конечно же.

Вот такая няшка получилась:



Выглядит мило, тестирую на удобство сейчас =)

Алсо, установить все разом можно с помощью плагина gmate. Качаем, выполняем ./install.sh и остается только немного допилить по вкусу.