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

Хотя у него и есть один недостаточек — интерфейс. Страшный, перегруженный тучей кнопочек и раскрашенный как мусорный бак в подворотне уродливый лейаут. По крайней мере так было, пока Александр Шабуневич не создал совершенно прекрасную тему для него — Clear View.

Супер! Всё прекрасно, хотя и не идеально конечно. Например вот этот вот ряд кнопочек портит весь вид:

Но всё равно проделана очень хорошая работа. Большое спасибо Александр!

Используем символ как Proc

Илья • 29 января 2007 г.

Просто замечательный пример элегантности Руби:

Вместо:
@people.collect{|human| human.name }
Делаем так:
@people.collect(&:name)

Dave Thomas подробно описал как это работает.

Rails + Apple = ♡

Илья • 29 января 2007 г.

Christian Metts:

По нашим тщательным подсчётам, около 90% из 550 людей, бывших на RailsConf 2006 используют ноутбуки Apple.

Update: прошу прощения за опечатку.

Наткнулся на интересную библиотеку на руби для автоматического тестирования дизайна. Называется Mosquito.

Идея простая: заставить скрипт пробежаться по нужным страницам сайта, потыкать куда надо и нафотать кучу скриншотов, чтобы девелопер потом спокойненько запустил слайдшоу просмотрел не съехало ли где чего-нибудь и отображается ли всё так, как было задумано.

Конечно для того чтобы всё это работало вам должно быть не лень писать вполне простой скрипт, как вот этот:

require 'mosquito'

mosquito_run([
  open_and_shoot("http://yahoo.com/", "img/yahoo_main.png"),
  type("p", "Mosquito"),
  click("searchsubmit"),
  shoot("img/mosquito_search.png")
  ])

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

Одна из самых интересных возможностей москита это отображение разницы между скриншотами. Если вдруг что-то съехало или появился какой-то новый элемент, то москит выделит это изменение на скриншоте приятным жёлтым свечением.

В данный момент, москит работает только под Мак ОС и использует только движок WebKit (читай Safari) для рендеринга страниц. Однако, по заверению создателя москита, в ближайшем времени появится поддержка фаерфокса и напишется версия под винду. Так что одним скриптиком можно будет пофотать сайт из под всех браузеров, а потом спокойненько сравнить получившиеся скриншоты. Удобно? Несомненно.

Кстати, создал москита наш русский программер Михаил Айзацкий, живущий в Питере :)

Update: извините за опечатку :)

Виджет: RegexWidget

Илья • 28 января 2007 г.

Если вы используете Мак ОС и часто пишете регэкспы, то RegexWidget — виджет для тестирования регэкспов вам очень понравится!

Ловим exception внутри выражений

Илья • 28 января 2007 г.

Век живи, век учись.

Не так:
if @user.name
  @user.name.capitalize
else
  "name not set"
end
И не так:
@user.name? ? @user.name.capitalize : "name not set"
И даже не так:
begin
  @user.name.capitalize
rescue
  "name not set"
end
А вот так:
@user.name.capitalize rescue "name not set"

Красота…

Update: Привёл немного не подходящий пример в прошлый раз: @user.name обычно не возвращает исключение, поэтому этот метод тут не поможет.

Another update: На самом деле этот хак не стоит воспринимать слишком серьёзно. Есть большая вероятность того, что вы не поймаете какое-нибудь действительно важное исключение, которого вы не ожидали.

Что окончательно устарело в Rails

Илья • 27 января 2007 г.

Rails очень быстро меняется. Не успеваешь закончить писать приложение, как оно уже устарело :) Хочу написать несколько очевидных маленьких штуковин, которые уже достаточно давно устарели, но не смотря ни на что, всё равно продолжают использоваться программерами.

Во-первых, следующие переменные давно уже нужно использовать как методы, то есть без знака @:

Было:
@request, @response, @session, @headers, @template, @cookies и @flash
Стало:
request, response, session, headers, template, cookies и flash

ActionController:

expire_matched_fragments()        → expire_fragment()
keep_flash()                      → flash.keep()
redirect_to_path()                → redirect_to(path)
redirect_to_url()                 → redirect_to(url)

ActionView:

@content_for_layout               → yield
@content_for_some_fragment        → yield :some_fragment
link_image_to()                   → link_to(image_tag())
link_to 'Bla bla', :post => true  → link_to "Bla bla", :method => "post"
render_partial                    → render :partial
render_partial_collection         → render :partial => 'bla', :collection => @b
human_size()                      → number_to_human_size()
start_form_tag(); end_form_tag()  → form_tag :action => "bla" do
                                      text_field 'bla', 'bla'
                                     end

ActiveRecord:

:dependent => true                → :dependent => :destroy
:exclusively_dependent => true    → :dependent => :delete_all
find_all()                        → find :all
find_first()                      → find :first

Update: Александр Сенько напомнил, что:

Вызывать следующие методы в вашем контроллере больше не нужно, рельсы теперь делают это автоматом:
model; service; observer; depend_on; dependencies_on

Ничего не забыл?

Наблюдаем за ActiveRecord

Илья • 26 января 2007 г.

Небольшая, но приятная находка, которая позволяет следить за тем что делает ActiveRecord прямо из script/console.

$ script/console
>> ActiveRecord::Base.logger = Logger.new(STDOUT)
=> #<Logger:0x2814134 ...>
>> user = User.find :first
  User Load (0.000346)   SELECT * FROM users LIMIT 1
=> #<User:0x2665478 ...>

По-поему очень удобно.

Именные роуты

Илья • 26 января 2007 г.

Пожалуйста не забывайте, что существует такая прекрасная штуковина как именные роуты. Поэтому, в частности, не нужно каждый раз городить штуки, на подобии этой вот:

link_to "Vasya Pupkin", :controller => "users", :action => "show", :id => user

Особенно не приятно, когда такая длиннющая конструкция встречается в проекте много раз. В этой ситуации нас выручат именные роуты. И вот как они работают в двух словах:

В config/routes.rb создаём новое правило:
map.user "users/:id", :controller => "users", :action => "show"

Заметьте, что вместо привычного map.connect, я использовал map.user. А это значит, что теперь в любом уголке своего приложения я могу использовать метод user_url(user), который вернёт мне :controller => ‘users’, :action => ‘show’, :id => user.id.

Теперь переписываем нашу ссылку, для использования с новеньким именным роутом:

link_to "Vasya Pupkin", user_url(@user)

Не правдо ли так гораздо чище и быстрее?

А теперь, перед тем как создать два десятка красивеньких именных роутов и избавиться от трёхэтажных link_to, посмотрите что ещё можно сделать.

Это работает не только с роутами, но и с любыми методами, которые принимают в виде аргументов хеш (сейчас это жутко модно). Если у нас подряд идёт вызов нескольких методов и в них передаются почти одинаковые хеши, то мы можем их объеденить при помощи метода #with_options. Вот, например, три обычных именных роута:

map.users "/users", :controller => "users", :action => "list"
map.user "/users/:id", :controller => "users", :action => "show"
map.deadsouls "/users/deads", :controller => "users", :action => "dead"

Как видите, все они ссылаются на один и тот же контроллер — users. Получается не очень DRY (Dont Repeat Yourself). Тут то и приходит на помощь прекрасный #with_options:

map.with_options :controller => "users" do |users|
  users.users "/users", :action => "list"
  users.user "/users/:id", :action => "show"
  users.deadsouls "/users/deads", :action => "deads"
end

Теперь кусок :controller => “users” передаётся во все роуты, хотя написали мы его только один раз.

Заметка написана по мотивам блога великолепного Jamis Buck.

Firefox 3 порадует маководов

Илья • 24 января 2007 г.

Очень порадовала новость, о том что Firefox 3 будет использовать стандартный эппловский фреймворк Cocoa, в частности для отрисовки своего интерфейса и рендеринга шрифтов. Это очень хорошая новость, потому что сейчас на фаерфокс просто невозможно смотреть на маке! Это какой-то ужас несусветный — весь текст будто изгрызен плотоядными червями-убийцами.

Только что скачал первую альфу третьего фаерфокса, чтобы проверить как у них успехи. Шрифт выглядит во-много раз лучше, но всё же не так хорошо как в Сафари. Какой-то более размытый. Уж не знаю почему.

iBank для Mac OS X

Дима • 24 января 2007 г.

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

iBank. Рекоммендую всем. Хороший интерфейс, большие возможности. Удобно. Пару дней уходит на понимание философии программы, но потом всё становится ясно и понимаешь удобство. Есть возможность импортировать выписки со счетов в банке.

Главное окно Диаграммы Прогресс выполнения бюджета

Незаменимый инструмент для всех кто пытается привести свою финансовую жизнь в порядок после покупки очередного Мака :-)

Стоит всё удовольствие $39.99, есть триал на 30 дней.

Свернул себе шею

Дима • 24 января 2007 г.

Вот, выполнил тут один акробатический трюк…

Dmitry Sabanin's broken neck

Говорят жить буду :-)

Captchator

Илья • 17 января 2007 г.

Captchator (captcha generator) это онлайн-сервис, готовый бесплатно генерировать для вашего приложения CAPTCHA изображения (изображения с буквами/цифрами для отделения людей от компьютеров). Очень быстро и просто.

Apple-style search field in non-Safari browsers

Илья • 15 января 2007 г.

К сожалению не все могут наслаждаться прекрасными интерфейсами Apple. Приходится принуждать ;}

На сайте BrandSpankingNew описана прикольная техника, позволяющая при помощи JavaScript и CSS отображать поле поиска так, как это делает любая программа в Мак ОС. Пользователи Firefox и IE, взгляните пожалуйста направо на нашу форму поиска. Мы как раз используем эту технику.

Конечно это всего лишь внешний вид и пользователи не-сафари браузеров не получат функцию запоминания поисковых запросов, но всё же это позволит сделать интерфейс вашего сайта более приятным.

Классный виджет - CharacterPal

Илья • 15 января 2007 г.

Нашёлся тут прекрасный виджет для дашбордаCharacterPal называется. Ну очень удобная штуковина, когда необходимо вставить какой-нибудь специсимвол в html файл. Ну например: © ® ¡ § •  « » “ ” и прочие. Достаточно просто кликнуть и код символа уже у тебя в клипборде.

Хочу так же подметить, что CharacterPal может выдавать не только html коды символов, но и сочетания клавиш, которые необходимо нажать на клаве, чтобы напечатать символ в любом другом месте в макос. Ну например Option + 9 это буллит.