C4 always sleepy

5Feb/100

Rdoc in osx Dictionary

Буду краток

$ sudo gem install rdoc_osx_dictionary

Дарит счастье всем руби-программерам работающим под OSX

Tagged as: , , , No Comments
1Feb/100

Dashboard KickStart

Наверняка вы уже сталкивались с такой проблемой, что Dashboard при первом запуске не очень спешит загружаться. С такой же проблемой столкнулся и я, но благодаря одному из коллег решение было найдено - Dashboard kickstart. Небольшая утилита, "дающая пинка" Dashboard'у при первой загрузку :) Очень рекомендую к использованию для сохранения нервных клеток, которые тратятся в ожидании завершения загрузки всех виджетов :)

Tagged as: , No Comments
31Jan/100

Language switcher

Еще одна полезная в хозяйстве тулза - Language Switcher.

Как вы наверно знаете - запустить любую программу на Snow Leopard на любом языке, отличном от системного (или языка по умолчанию в программе) - прямой возможности нет. С помощью этой утилиты вы можете больше не думать об этом ограничении и запускать любую программу на любом языке :)

Tagged as: , No Comments
25Jan/100

Cucumber + environment variables

В продолжение моего поста по поводу установки переменных окружения в тестовых сценариях - недавно столкнулся с необходимостью установки своих переменных окружения при использовании Cucumber + Webrat. Решается это элементарно - прописываем в *steps.rb файле

header('HTTP_ACCEPT_LANGUAGE', 'en')

Аналогично можно тестировать и использование https - есть очень хороший пример тут.

25Jan/100

Rails I18n – презентация

Неплохая и самое главное познавательная презентация.

25Jan/103

Примеры rails-приложений

Решил составить список open-source приложений на Rails, который как я надеюсь поможет начинающим (и не очень начинающим) программистам в написании красивого и функционального кода.

Redmine - система управления проектами

TeamBox - еще одна система для проджект-менеджмента, twitter-like

Video App - аналог YouTube на Rails

GemCutter - репозитарий gem'ов

CommunityEngine - Социальная сеть

LovdByLess - и еще одна социальная сеть :)

RailsCasts - ну кто не знает Ryan Bates и его RailsCast-ы? Это - исходники его блогового движка

Tracks - система GTD, управление задачами

Retrospectiva - снова проджект-менеджмент :)

Restful Authentication Tutorial - отличный туториал по реализации системы аутентификации, recaptcha, логгирование неудачных попытов аутентификации и многое другое :)

Shapado - аналог stackoverflow.net с использованием MongoMapper (thx 2 undr)

Open Source Rails - много различных приложений (thx 2 Alexey Osipenko)

Если у вас есть чем поделиться - присылайте, буду обновлять список :)

23Jan/100

Еще немного софта для вашего яблочного друга

Продолжаем наш софт-обзор :)

Speed Download
Некоторое время назад я писал про Folx, download manager для osx. Честно говоря - разочаровался я в этой программе и в качестве альтернативы выбрал Speed Download, отличающийся от вышеупомянутого Folx более стабильной работой и удобством использования. Кстати, Folx перестал быть бесплатным продуктом теперь имеет цену в $20 (сейчас у авторов скидки в 50% - так что можете приобрести программу за $10 :) )

А пока что встречаем Speed Download.

Power Tunes
Следующая программа поможет вам организовать работу с вашими iTunes-библиотеками. Удаляет ссылки на удаленные треки, позволяет синхронизировать библиотеки между компьютером и внешним жестким диском итд.

RipIt
Ну тут вообще все просто - риппер dvd-дисков :)

Switch Audio Converter
Опять же без лишних слов - конвертер аудио-файлов.
На вход принимает форматы
.wav (PCM)
.mp3 (MPEG Layer 3)
.au
.aif/aiff
.gsm
.dct
.vox
.raw
.ogg
.flac
.amr
.wma*
.wmv*
.aac*(not aacPlus)
.m4a*
.act/rcd (newer version of format not supported)
.mov

и может конвертировать в
.wav (PCM, and others, see here)
.mp3
.au
.aif/aiff
.gsm
.vox
.raw
.ogg
.flac
.rss
.m3u^
.pls^
.wpl
.mov

Today
Интерфейс к iCal без необходимости запуска оного :) К минусам можно отнести то, что если ваш iCal сонхронизируется с календарями google, то для отправки добавленных событий необходимо запускать iCal, а также в такие календари нельзя добавить задачи. Я связался с автором - он обещал рассмотреть возможность исправления данных проблем :)

WriteRoom
Иногда необходимо сосредоточиться на написании какого-нибудь документа, а вас постоянно отвлекают сообщения в мессенджере, какие-нибудь всплывающие окна итд. Эта программа превращает ваш мак в печатающую машинку и пока вы работаете - вас ничего не отвлечет :) Кстати - недавно на macheist лицензия на эту программу раздавалась совершенно бесплатно :) Успели получить? :)

Tagged as: , No Comments
21Jan/100

1password, Opera & Google Chrome

Как вы наверно уже в курсе - есть ряд сложностей для разработки плагинов, позволяющих использовать 1password в браузерах Opera и Google Chrome. Точнее - невозможно было до настоящего времени. Продвинутые гики из Switcher's Blog написали познавательную статью как обойти это ограничение. Вэлкам :)

PS: кстати - работы над плагином для хрома ведутся в полную силу, как сообщают те же авторы.

Tagged as: , No Comments
21Jan/100

Mac soft

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

Bento.
Несложная и в то же время удобная в использовании База Данных. Успешно дополняет пакет iWorks, в котором к сожалению отсутствует альтернатива MS Access.

CleanApp
Мощная утилита для удаления мусора с жесткого диска вашего мака. Среди функционала
- Корректное удаление установленных программ (вычищает лишний мусор, оставленный приложениями)
- Поиск неиспользуемых и редко используемых файлов
- Диаграмма использования жесткого диска
- И отдельным пунктом - многое другое :)

После всех аналогов я решил остановиться именно на этой утилите.

CopyPaste Pro
Простой и в то же время очень функциональный расширитель клипборда.

Little Snitch
Самый удобный в использовании Firewall для мака. Подходит всем пользователям, кто не склонен к излишнему минимализму и не предпочитает как firewall-решение что-нибудь типа iptables, ipchains итд :) )

Tagged as: , No Comments
18Jan/100

I18n

С помощью этого куска кода можно обеспечить удобную работу с локалями в rails-приложении.

Filed under: Uncategorized No Comments
25Dec/090

Custom HAML filters

На днях сделал набор кастомных HAML-фильтров, которые заменяют ссылки на youtube, vimeo, rutube, daylymotion на соответствующие видео. Использовать просто - ставим плагин, а дальше используем фильтры cbtextile, cbmarkdown или cbmaruku как обычные HAML-фильтры.

9Dec/090

Google Chrome

Вышел Google Chrome для OSX и Linux.

Сегодня получил от google team письмо с несколькими фактами по этому вопросу

Here are a few fun facts from us on the Google Chrome for Mac team:

73,804 lines of Mac-specific code written
29 developer builds
1,177 Mac-specific bugs fixed
12 external committers and bug editors to the Google Chrome for Mac code base, 48 external code contributors
64 Mac Minis doing continuous builds and tests
8,760 cups of soft drinks and coffee consumed
4,380 frosted mini-wheats eaten

Tagged as: , , No Comments
2Dec/092

JQuery plugins. part 2

Еще немного плагинов для JQuery и туториалов по их ипользованию

JQzoom - "лупа" для картинок.
prettySociable - еще один достаточно интересный аналог addthis-ов :)

JQuery powered tag cloud - ну это в пояснении не требуется :)
Apple-like search suggestion - урок как сделать красивое выпадающее меню для search-бокса
jquery tabbed interface - очень красивая навигация
digg-style signup form
twitter-like follow/unfollow
jQuery Thumbnail with Zooming Image and Fading Caption Tutorial
Making A Cool Login System With PHP, MySQL & jQuery
Dynamic Drag’n Drop With jQuery And PHP

Tagged as: 2 Comments
30Sep/090

memtest on osx

Пару дней назад я поставил дополнительную память на свой макбук и встал вопрос с ее тестированием. Для тех, кому это необходимо - можно пройти по ссылке и скачать соответствующую утилиту. Также можно воспользоваться утилитой Rember.

Tagged as: , No Comments
28Sep/094

SSO на Rails с использованием Authlogic

Вопрос SSO для многих актуален, различных решений великое множество (OpenId, Oauth, CAS итд.), но иногда хочется сделать все по своему. Давайте попробуем написать свой SSO для наших сайтов?

Давайте для начала определим, что нам необходимо сделать:
1. Разработать центральный сервис аутентификации
2. Разработать сайт, который будет использовать SSO
2. Обеспечить доступность идентификатора сессии в рамках всех наших сайтов
3. Обеспечить доступность сессионных данных
4. Обеспечить доступность пользовательских данных

Давайте приступим к процессу разработки.

1. Первым делом нам необходимо реализовать сам сервис аутентификации. Про это уже много написано, например ознакомиться можно в соответствующем railscast или asciicast.

2. Думаю тут я могу обойтись без лишних комментариев, единственное что вам необходимо селать - это включить authlogic, создать модели User и UserSession:

class User < ActiveRecord::Base
  establish_connection "auth_#{RAILS_ENV}"
  acts_as_authentic
end

(на строку establish_connection пока не обращаем внимания - мы к ней еще подойдем :) )

class UserSession < Authlogic::Session::Base
end

(обратите внимание на сложность данного класса :) )

а также дополним ApplicationController базовым набором методов

  private

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

  def require_user
    unless current_user
      store_location
      flash[:notice] = I18n.t(:"notices.require_logged_in")
      redirect_to login_url
      return false
    end
  end

  def require_no_user
    if current_user
      store_location
      flash[:notice] = I18n.t(:"notices.require_logged_out")
      redirect_to dashboard_url
      return false
    end
  end

  # Store the URI of the current request in the session.
  #
  # We can return to this location by calling #redirect_back_or_default.
  def store_location
    session[:return_to] = request.request_uri
  end

  # Redirect to the URI stored by the most recent store_location call or
  # to the passed default.  Set an appropriately modified
  #   after_filter :store_location, :o nly => [:index, :new, :show, :edit]
  # for any controller you want to be bounce-backable.
  def redirect_back_or_default(default)
    redirect_to(session[:return_to] || default)
    session[:return_to] = nil
  end

2. Идентификатор сессии будем хранить в cookies. Для того, чтобы он был доступен для всех сайтов на домене *.example.com (auth.example.com, site1.exampe.com итд) нам по идее достаточно просто написать

ActionController::Base.session = {
  :domain => ".example.org"
}

но знающие люди рекомендуют такой вот замечательный gist. Сохраняем его как файл
session_domain.rb в conf/initializers/, а также вносим небольшие изменения в session_store.rb:

ActionController::Base.session = {
  :key         => '_example_session',
  :secret      => 'oursupersecretkey'
}

Самое время перейти к следующему пункту :)

3. Не закрывая session_store.rb продолжаем вносить в него изменения:

ActionController::Base.session_store = :active_record_store

Для сайтов, которые будут использовать интерфейс SSO (а также если вы захотите вынести хранилище сессий в отдельную БД) порписываем в этом же файле

# Use sessions from preconfigured session store
ActiveRecord::SessionStore::Session.establish_connection("sessions_#{RAILS_ENV}")

а в файле database.yml:

# Sessions stores

sessions_development:
  adapter: sqlite3
  database: ../auth/db/development.sqlite3
  pool: 5
  timeout: 5000

sessions_test:
  adapter: sqlite3
  database: ../auth/db/test.sqlite3
  pool: 5
  timeout: 5000

sessions_production:
  adapter: sqlite3
  database: ../auth/db/production.sqlite3
  pool: 5
  timeout: 5000

4. Помните пару абзацев назад я просил не обращать внимания на строчку кода? Самое время к ней вернуться. Класс User будет использовать соединение с БД нашего сервиса аутентификации для получения информации о текущем пользователе. Обновим данные в database.yml:

auth_development:
  adapter: sqlite3
  database: ../auth/db/development.sqlite3
  pool: 5
  timeout: 5000

auth_test:
  adapter: sqlite3
  database: ../auth/db/test.sqlite3
  pool: 5
  timeout: 5000

auth_production:
  adapter: sqlite3
  database: ../auth/db/production.sqlite3
  pool: 5
  timeout: 5000

Вот в принципе и все :) Не сложно, правда? Теперь на site1.example.com мы спокойно сможем работать с current_user и пользовательской сессией.

PS: Возможно решение не идеальное, но с удовольствием рассмотрю все ваши рекомендации по его оптимизации :)