rubyjobs.ru

27 апреля 2009

Не перестает удивлять и радовать интересными сервисами команда Hash Train. Новое детище получило название rubyjobs.ru. Данный сервис позволяет в удобной и простой форме разместить объявления о поиске работы или вакансии, которые связанные с языком программирования Руби. Ресурсу всего несколько дней, а там уже насыпалось объявлений.

В целом идея просто замечательная и будет интересна всем, кто так или иначе связан с разработкой на руби.

Движек я так понял ребята сделали сами и конечно же на рельсах.

Если кому интересно, за широкими спинами  Hash Train  еще и такие сервисы как RubyMag.ru и RubyFlow.ru. Все они рекомендованы к подписке через RSS.

acts_as_random_id

27 апреля 2009

Ребята из дружественного мне Hash Train написали отличный плагин для генерирования поля id для ваших рельсовых объектов. Как известно rails генерирует поле id простым автоинкриментом. Таким образом, существует возможность проверить сколько объектов всего в БД. Иногда это секретная информация.

Использую плагин acts_as_random_id  можно подсунуть любое значение поля id. Естественно на Вас ложиться вся ответственность за уникальность.

Детали на github.

BTW, если есть идеи по улучшениям и доработкам плагина, велком.

Ruby Regexps

10 февраля 2009

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

Для создания и проверки регулярных выражений существует замечательный ресурс Рубулар.

Список самых популярных регулярных выражений:

  • Валидация почты:
    /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
  • Валидация URL сайта
    /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/
  • Валидация кредиток:
    # Почти всех
    '^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$'

    # American Express
    '^3[47][0-9]{13}$'

    # Diners Club
    '^3(?:0[0-5]|[68][0-9])[0-9]{11}$'

    # Discover
    '^6011[0-9]{12}$'

    # MasterCard
    '^5[1-5][0-9]{14}$'

    # Visa
    '^4[0-9]{12}(?:[0-9]{3})?$'

    # Чистка не цифр
    '/[^0-9]+/'
  • Проверка номера телефона:
   #1
   /^(8-(0\d{2})-(\d{3})-(\d{2})-(\d{2}))$/
   #2
   /^(38(0\d{9}))$/
  • IP адресса:
    #1
    '\b([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\b'
    #2
    /(?:[0-9]{1,3}\.){3}[0-9]{1,3}/

    #3
    '\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'

    #4
    '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b'

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

Rails tip: LoadError exception

9 февраля 2009

Разрабатывая приложения на Rails программисты используют разнообразные gem библиотеки. При переносе или деплое приложения эти библиотеки необходимо либо включать в приложение (фризить) либо ставить на сервере. Но что если тот или иной gem использовался только для тестирования и в рабочей продакт версии уже не нужен. В целом если у Вас vps и туева хуча места это не важно. Но если вы теснитесь на shared розделяя считаные метры под несколько проектов нужно что-то думать.

Итак, каким образом происходит включение тех или иных гемов? Чаще всего при помощи оператора require. А что просиходит когда require не находит нужного файла? Генерируется исключение LoadError. Таким образом, перехватывая это исключение мы можем продолжать работать.

Пример кода, в котором я использую populator + faker для создания тестовых данных:

begin
  require 'faker'
  require 'populator'

  require 'rake'
  require 'rake/testtask'
  require 'rake/rdoctask'
  require 'rake/rdoctask'

  require 'rubygems'

  require(File.join(File.dirname(__FILE__), '../../config/environment.rb'))

  namespace :db do

    desc "Populates a fake data to database"
    task( :populate ) do
      User.populate(10) do |user|
        user.login = Faker::Internet.user_name
        user.first_name = Faker::Name.first_name
        user.last_name = Faker::Name.last_name
        user.email = Faker::Internet.email
        user.admin = [true, false]
      end
    end
  end
rescue LoadError
end

Используя такой трюк у нас нет необходимости устанавливать на продакт сервере не нужные библиотеки.

Ruby & RubyOnRails weblogs

7 февраля 2009

Очередная порция блогов. На этот раз рубисты и рубисты-рельсовики.

Пользуемся на здоровье:

Ruby:

http://feeds2.feedburner.com/RubyInside
http://feeds2.feedburner.com/Rubyflow
http://on-ruby.blogspot.com/feeds/posts/default?alt=rss
http://www.igvita.com/feed/
http://www.abletech.co.nz/feed/
http://feeds.feedburner.com/PaulDixExplainsNothing
http://feeds.feedburner.com/momoro
http://feeds2.feedburner.com/DrNic
http://www.juixe.com/techknow/index.php/feed/
http://feedproxy.google.com/buckblog
http://feeds.floehopper.org/floehopper-blog
http://talklikeaduck.denhaven2.com/xml/rss20/feed.xml
http://feeds.feedburner.com/tagaholic
http://phvalues.wordpress.com/feed/
http://brainspl.at/xml/rss20/feed.xml
http://blog.mmediasys.com/feed/

Rails:

http://carlopecchia.eu/blog/feed/
http://feeds.feedburner.com/VigetExtend
http://www.culann.com/feed
http://feeds.feedburner.com/TechnicalPickles
http://feeds.feedburner.com/AtlanticDominionSolutions
http://feeds.feedburner.com/jystewart/iLiN
http://feeds.feedburner.com/ZachInglis
http://www.fngtps.com/feed/index.rss
http://feeds2.feedburner.com/railscasts
http://feeds.feedburner.com/RidingRails
http://hivelogic.com/feed
http://www.rubyrailways.com/feed/
http://feeds.feedburner.com/obie
http://blog.kineticweb.com/xml/rss20/feed.xml
http://feeds.feedburner.com/rubyonrailspodcast

Python+Django+MySQL+Ubuntu 8.10. First step

6 февраля 2009

Пишу короткий туториал для того чтобы не забыть.

Для начала поставим python:

sudo apt-get install python

потом поставим django:

sudo apt-get install python-django

Подозреваю что так мы поставим не последнюю версию, а то что доступно в Убунту пакетах. Но пока и этого достаточно.

Создаем тестовое приложение:

python /usr/lib/python-django/django-admin.py startproject testApp

/usr/lib/python-django/ - эту часть ставим у кого куда поставило. В целом нужно в пути добавить чтобы удобней было в будущем.

Далее проверяем что все ок или почти ок:

cd testApp && python manage.py runserver
Validating models...
0 errors found
Django version 1.0-final-SVN-unknown, using settings 'testApp.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

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

Идем в браузере - http://localhost:8000/

It worked!

Congratulations on your first Django-powered page.

Of course, you haven’t actually done any work yet. Here’s what to do next:

  • If you plan to use a database, edit
    the DATABASE_* settings in testApp/settings.py.
  • Start your first app by running pythontestApp/manage.py startapp [appname].

You’re seeing this message because you have DEBUG = True in your

Django settings file and you haven’t configured any URLs.
Get to work!

Кажется все работает. Останавливаем сервер.

Теперь подключим  БД. Традиционно буду использовать MySQL 5.x. Для справки, нужно поставить саму СУБД:

sudo apt-get install mysql-server

Теперь нюанс, чтобы django смог работать с MySQL ему нужен python-mysqldb. Ставим:

sudo apt-get install python-mysqldb

Проверяем что у нас все ок:

  • Загружаем интерпритатор python;
  • Пишем import MySQLdb;
  • Если нет исключения значит все ок.

Создаем базу для приложения:

mysqladmin create testApp_development -u root -p

В файле settings.py находим строки:

DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'testApp_development'
DATABASE_USER = 'db_user_login'
DATABASE_PASSWORD = 'db_user_password'

Где  db_user_login, db_user_password - логин и пароль вашего пользователя в БД соответственно.

Далее инициализируем базу данных для нашего приложения:

python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
You just installed Django's auth system, which means you don't
have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'billy'): admin
E-mail address: bill.gates@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model

Запускаем опять.

python manage.py runserver
Validating models...
0 errors found

Django version 1.0-final-SVN-unknown, using settings 'testApp.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

В целом это все что касается старта. Пока хватит.




				

Python weblogs

5 февраля 2009

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

Добавляем и читаем:

http://www.learningpython.com/feed/
http://blog.ianbicking.org/feed/
http://blog.labix.org/feed/
http://code.activestate.com/feeds/langs/python/
http://en.wordpress.com/tag/python/
http://feeds.feedburner.com/DougHellmann
http://glyf.livejournal.com/data/rss
http://ivory.idyll.org/blog/tags/python?flav=atom
http://jimmyg.org/feed/
http://jjinux.blogspot.com/feeds/posts/default
http://love-python.blogspot.com/feeds/posts/default?alt=rss
http://planets.sun.com/python/group/blogs/feed/atom
http://pypi.python.org/pypi?:action=rss
http://pythonisito.blogspot.com/feeds/posts/default
http://www.artima.com/buzz/feeds/python.rss
http://www.jonathansaggau.com/blog/atom.xml
http://www.oreillynet.com/pub/feed/31?au=2118
http://www.planetpython.org/rss20.xml
http://www.python.org/channews.rdf
http://www.pythonware.com/daily/rss.xml
http://www.vex.net/parnassus/parnassus.rss

Если кто знает еще стоящие англоязычные блоги по теме - велком в коменты.

Rails + Populator + Faker

29 ноября 2008

Часто в процессе разработки сайта на Rails нужно быстро создать много данных, например для тестирования пажинатора.

Можно написать rake задачу, можно добавлять вручную. В любом случае тяжело гарантировать приближенность к реальности вводимых данных. Например, выдумывать 1000 электронных адресов, фамилий и т.д. это не шутка.

Чтобы сэкономить время рекомендую воспользоваться библиотекой populator.

Ставим:

  gem install populator 

Используем. Например, нам нужно добавить в базу 3000 записей о пользователях

  User.populate(3000) do |user|
    user.first_name = “Tony”
    user.last_name = “Stark”
  end

В целом неплохо. Но как, то не очень хорошо, что у нас в базе 3000 железных людей. Нам бы разнообразия.

Для этого есть еще одна чудная библиотечка faker. Ставим:

  gem install faker 

Теперь перепишем наш пример, добавив пару дополнительных полей и оформив в rake задачу, чтобы удобно было запускать, например в production:

  require ‘populator’
  require ‘faker’

  require ‘rake’
  require ‘rake/testtask’
  require ‘rake/rdoctask’

  require ‘rubygems’
  require(File.join(File.dirname(__FILE__), ‘../../config/environment.rb’))

  namespace :populate do
     desc “Add test data”
     task(:users) do
       User.populate(3000) do |user|
         user.first_name = Faker::Name.first_name # генерирует Имя
         user.last_name = Faker::Name.last_name   # Фамилию
         user.email = Faker::Internet.email       # мыло
         user.login = Faker::Internet.user_name   # логин
         user.phone = Faker::PhoneNumber.phone_number # номер телефона
         user.about = Faker::Lorem.paragraphs( 5 ) # О себе – 5 параграфов
       end
    end
  end

Теперь у нас в базе в любой конфигурации может быть 3000 пользователей с совершенно разными данными. Очень удобно. Сокращает время, и появляются дополнительные возможности тестирования.

Graphicoolus - сервис построения графиков

27 ноября 2008

Недавно был открыт простенький сервис построения графиков и диаграмм - Graphicoolus.

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

Создание осуществляется в несколько простых интуитивно понятных шагов, после выполнения которых получаем код для встраивания графика в страницу Вашего сайта.

И на последок пример графика созданного с помощью данного сервиса:

Кому интересно испытать сервис в работе кликаем сюда.

Строим графики и диаграммы с open flash chart

22 октября 2008

Очень часто возникает необходимость каким-либо способом визуализировать данные, например в виде графиков и диаграмм. В такой ситуации на помощь может прийти плагинчег - open flash chart.

Ну и для начала установим его:

ruby script/plugin install http://svn.pullmonkey.com/plugins/trunk/open_flash_chart/

После нужно скопировать файлик open_flash_chart.swf в path/to/your/app/public/ и файлик swfobject.js в  path/to/your/app/public/javascripts.

Данный плагин сводит до минимума роботу программиста, поэтому не буду изощряться примерами и просто оставлю ссылку, где все и так видно. Кому интересно жмем сюда

Блог работает на WordPress.
Подписка RSS: все записи, комментарии.