Установка Ruby 1.9.2 и Rails 3 stable на Ubuntu

Август 31st, 2010

Давайте установим Ruby 1.9.2 и Rails 3 stable на Ubuntu. Я использовал Ubuntu 10.04, 32-х битную версию. Здесь рассматривается установка Ruby без RVM, так что если будете следовать этому мануалу, то сначала удалите старую версию Ruby и её зависимости.

Если у вас еще не установлены следующие пакеты - установите их:

$ sudo apt-get install gcc g++ build-essential libssl-dev libreadline5-dev zlib1g-dev linux-headers-generic

Теперь скачаем исходники Ruby 1.9.2, распакуем их и установим:

$ wget ftp://ftp.ruby-lang.org//pub/ruby/1.9/ruby-1.9.2-p0.tar.gz
$ tar -xvzf ruby-1.9.2-p0.tar.gz
$ cd ruby-1.9.2-p0/
$ ./configure --prefix=/usr/local/ruby
$ make && sudo make install

Добавим путь к бинарным файлам Ruby.

$ sudo gedit /etc/environment

Вам нужно добавить в переменную PATH этот путь - /usr/local/ruby/bin, должно получиться примерно так:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/ruby/bin"

Затем выполним команду source для файла, чтобы применить изменения.

$ source /etc/environment

Теперь проверим, установился ли Ruby:

$ ruby -v

Вы должны увидеть примерно следующее: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
Теперь создадим символическую ссылку, чтобы программа gem работала

$ sudo ln -s /usr/local/ruby/bin/ruby /usr/local/bin/ruby
$ sudo ln -s /usr/local/ruby/bin/gem /usr/bin/gem

Ruby 1.9.2 уже содержит Rubygems, поэтому вам не придется его устанавливать.
Теперь установим нужные пакеты gem, включая rails 3.:

$ sudo gem install tzinfo builder memcache-client rack rack-test erubis mail text-format bundler thor i18n sqlite3-ruby
$ sudo gem install rack-mount --version=0.4.0
$ sudo gem install rails --version 3.0.0

Проверим версию rails:

$ rails -v

Вы должны увидеть номер версии 3.0.0. Если этого не произошло, по попробуйте выполнить команду source /etc/environment, затем запустите rails -v еще раз.
Теперь всё готово к созданию нового приложения rails:

$ rails new myproject
cd myproject
rails server

Интервью с владельцем интернет-магазина

Август 30th, 2010

Недавно у меня появилась идея открыть интернет-магазин, поэтому сейчас я крайне интересуюсь всем, что связано с онлайн-торговлей, организацией продаж, логистикой и прочим. Но пока мне нечем похвастаться, поэтому представляю интервью с Вадимом, моим товарищем и бывшим коллегой, который сейчас является владельцем собственного интернет-магазина. Я не стал вдаваться в подробности - у всех есть свои секреты и лезть в них было бы глупо, я обошелся достаточно общими, но интересными для меня вопросами, надеюсь, интервью будет интересно и для вас, читателей сего блога. И да, это не реклама - у меня нет рекламных постов в блоге. Read the rest of this entry »

К вопросу об эффективности

Август 27th, 2010

Привет.
Сегодня моему коллеге понадобилось внести количество населения в городах России в его табличку cities в БД. Он, конечно, начал писать парсер Википедии, дабы добыть нужную информацию из страниц городов на сайте. То есть, он хотел обращаться к Википедии примерно так:

http://ru.wikipedia.org/wiki/<название города>

Он просто обращался по этому адресу при помощи php-функции file_get_contents(), но ему возвращалась 403 ошибка. Я обратился телнетом к странице и узнал, что Википедия требует присутствие заголовка User-Agent в HTTP-запросе.
Показал коллеге как юзать telnet и формировать HTTP-запрос =) Этим убедил его в том, что ему нужно юзать cURL. И он принялся писать свой мега-парсер.

Но лично я получил требуемый список городов за 5 минут. Как я это сделал? Я просто использовал более подходящие инструменты и шел легким путем.

Для начала я нашел HTML-табличку со списком городов и населением в них. Потом я скопировал эту табличку при помощи firebug в отдельный HTML-файл, подключил туда JQuery с Google CDN, и написал абсолютно тупой джаваскрипт, который обходил табличку и забирал оттуда нужные данные, а потом писал их в лог при помощи console.log(). Знаю, что можно было выполнить свой JS прямо на странице Википедии, но не знаю почему так не сделал :). Дальше осталось только передать эти данные коллеге.
Я потратил на это всего минут 5, мой коллега потратил бы на это половину рабочего дня, т.к. парсинг HTML-страниц в PHP это дело непростое, там нет Mechanize, к тому же Википедия может забанить по IP при парсинге кучи страниц :).

Вот как-то так, стоит всегда использовать подходящие инструменты и немного задействовать программерскую смекалку.

New Mysql connector for Nodejs

Август 20th, 2010

Briefly: here’s a new connector to Mysql for Nodejs. In my opinion, it gives great hope)
So, you can get more info at github page: node-mysql-libmysqlclient

Установка Ruby и RoR на Ubuntu 10.04

Август 18th, 2010

Если вы используете Ubuntu 10.04 или 9.10, то следующие шаги по установке будут одинаковы для той и другой версии ОС. Чтобы установить Ruby on Rails, сначала вам нужно установить некоторые примочки, а так же сам Ruby.

Можно установить Ruby из репозитория, либо из исходного кода. Чтобы установить Ruby из репозитория, наберите в терминале следующую строку:

$ sudo apt-get install ruby-full build-essential

Если же вы хотите установить из исходников, то сначала нужно установить следующие пакеты:

$ sudo apt-get install build-essential libssl-dev libreadline5-dev zlib1g-dev

Теперь вам нужно скачать архив с исходными кодами Ruby:

$ wget ftp://ftp.ruby-lang.org/pub/ruby/stable-snapshot.tar.gz

Разархивируем файлы:

tar xzf stable-snapshot.tar.gz

Компилируем и устанавливаем Ruby:

$ cd ruby/
$ ./configure
$ make
$ sudo make install

Теперь запустите в консоли команду irb, и если вы не увидите никаких ошибок - поздравляю, Ruby установился успешно.

Перед тем, как установить Rails, вам нужно установить некоторые пакеты gem. Gem-пакеты - это упакованные приложения или библиотеки Ruby. Вы можете использовать команду gem чтобы установить различные бесплатные библиотеки, включая и Rails. Подробнее о rubygems можно почитать в мануале.

Устанавливаем rubygems следующей командой:

$ wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.2.tgz
$ tar xzvf rubygems-1.3.2.tgz
$ cd rubygems-1.3.2
$ sudo ruby setup.rb
$ sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

Теперь при помощи команды gem устанавливаем Rails:

$ sudo gem install rails

Эта команда установит последнюю версию Rails, но если вы хотите установить одну из предыдущих версий, например 2.2.2, то воспользуйтесь следующей командой:

$ sudo gem install –version = 2.2.2 rails

Установка MongoDB для Ubuntu 10.04 из пакета

Август 17th, 2010

MongoDB можно собрать вручную, а можно и установить из пакета. Я предпочитаю последнее, так как это гораздо проще и занимает меньше времени. К тому же, нам не нужно добавлять init.d скрипты - все добавится само.

Сначала добавим репозиторий в sources.list. Откроем файл:

sudo gedit /etc/apt/sources.list

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

deb http://downloads.mongodb.org/distros/ubuntu 10.4 10gen

Затем, добавим ключ при помощи следующей команды:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

И обновим кэш:

sudo aptitude update

Всё. Теперь тупо ставим mongoDB из пакета:

sudo aptitude install mongodb-stable

После установки, проверим, все ли установилось. Для этого в консоли можно запустить mongo-shell:

mongo

Дальше можно поменять dbpath в конфиге и указать место, где у вас хранится база данных. Не забудьте сделать эту папку доступной для записи юзеру mongodb.

sudo gedit /etc/mongodb.conf

После редактирования конфига перезапустим mongod:

sudo service mongodb restart

Вот вроде бы и все. Дополнительную информацию смотрите здесь: http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages

А как вы проверяете mime-type файлов в php?

Август 3rd, 2010

Как известно, все загружаемые на сервер файлы нужно проверять на соответствие разрешенным mime-type. Большинство программистов проверяют это соответствие, сверяясь с mime-типом из $_FILES, но этот mime-тип берется из заголовков HTTP запроса и может быть определен неправильно, т.к. определяет его браузер. У меня например, некоторые jpeg-файлы определяются как application/octet-stream и естественно, скрипт их не принимает. К тому же решение построенное на проверке mime-типа из HTTP заголовка потенциально опасно, т.к. заголовки можно подделать и указать любой mime-тип.

Как же сделать правильно?

Нужно установить расширение PECL, которое называется Fileinfo. Это расширение является заменой более старого расширения mime_magic. Валидатор MimeType в Zend Framework использует именно Fileinfo, как наиболее приоритетный способ определения mime-типа. Fileinfo определяет mime-тип по специальным сигнатурам, которые есть внутри файла.

Другой способ состоит в том, чтобы переложить определение mime-типа на веб-сервер. У веб-сервера Apache есть специальный файл magic с сигнатурами, с помощью которого он определяет, какого mime-типа является загружаемый файл, и устанавливает это значение в заголовок. Таким образом, в php скрипт придет верный mime-тип.

Для того, чтобы, Apache определял mime-тип файла, нужно включить модуль mod_mime_magic.

Небольшой офф: не забывайте так же проверять тип файлов еще и по расширению.

Вернулся с отдыха

Июль 27th, 2010
restПару дней назад приехал с моря. Щас заново учусь работать и, так сказать, жить. Отдохнул отлично, пару раз сплавлялся по горной реке, разок “повезло” перевернуться на байдарке, хапнул экстрима - мама не горюй. Но понравилось.
Познакомился с кучей народу из разных стран, некоторые приглашают в гости :)

Книга Олега Тинькова “Я такой как все”

Июнь 29th, 2010

У известного предпринимателя Олега Тинькова вышла классная автобиографическая книга о его становлении :) Я прочитал одну главу, выложенную на сайте - очень захватывает. Тиньков вообще молодец мужик. Вот хочу купить книгу в электронном виде, жалко только что нет оплаты вебманями или ЯДом - заплатить можно только кредиткой или SMS. Надо чето придумать, ибо кредитной карты пока тоже нет (да, вот такой вот я лох).

Зазырить инфо о книге можно тут: http://tinkov.com/

Дедлайн

Июнь 17th, 2010

У меня дедлайн до 30-го июня 2010. Грустно и весело одновременно.

ЗЫ: Кстати, активно красноглажу. Перевел всю разработку под linux. Чертовски удобно. Почему я не сделал это 5 лет назад? (ах да, потому что инет был по медленному модему, слабенький комп и маловато энтузиазма).