Мыслепомойка

Java, Ruby, git, MacOSX

January 7, 2011 at 9:01pm

Ruby + ncurses (MacOSX)

Играюсь немного с ncurses. И стандартная обёртка ‘curses’ немного… ну корявая. Что и побудило меня использовать ncurses. Но первая, и, надеюсь, единственная, проблема не заставила себя долго ждать.

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

Просто меняем RARRAY()->len на RARRAY_LEN() в файлике
/Users/dashin/.rvm/gems/ruby-1.9.1-p378/gems/ncurses-0.9.1/lib/form_wrap.c 

И пробуем ещё раз, но уже с дополнительной опцией —no-update-sources

6:06pm

Cloudant + Heroku или “Cага о самопальном Delicious”. Продолжение

Отображение закладок в виде “облака”

Так как CouchDB вещь не реляционная, то операции выборки данных выполняются при помощи представлений.

Данное представление подсчитывает количество закладок для каждого тега.

Напоминаю, что структура каждого документа следующая:

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

Теперь можно выполнить некоторые полезные запросы к базе.

Например, получить все закладки, помеченные тегом ‘tutorial’:

Или, получить все теги и количество ссылок ими помеченных:

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

Результат работы немного приукрашенной версии: bookmarks

January 5, 2011 at 10:57pm

Cloudant + Heroku или “Cага о самопальном Delicious”

I do ruby every day :)
Ну или попытаюсь как можно чаще им заниматься.

Итак проблема. Ходили недавно слухи что Yahoo приготовили цик с гвоздями для Delicious. Я запереживал и решил сделать себе резервную копию закладок и свой сервис загадочно-закладочный. Для себя и во имя развлечения.

Естественно взяты Ruby (Heroku) и CouchDB (Cloudant).

И, собственно, задача #1 - перенос данных.

1. Авторизуюсь на delicious, блуждаю по меню и нахожу ссылку, по  нажатию которой происходит экспорт закладок в виде HTML-файла.  Сохраняется в ‘/users/dashin/Desktop/delicious-20110103.htm

2. Экспорт в предварительно созданную CouchDB базу ‘bookmarks’:

Теперь у меня есть копия всех закладок в необычном для меня - не реляционном виде. Кода мало, толка тоже пока не много. Но фан. Честно.

March 16, 2010 at 8:46am

Import Google Chrome bookmarks to Safari

I wanted to import Chrome bookmarks to my Safari and faced with such hurdle - there is no way to do it using native chrome/safari functionality. So I’ve implemented ‘fast and dirty’ solution that works for me.

  1. Upload Google Chrome bookmarks file (it is somewhere at ~Library/Application Support/Google/Chrome/Default/Bookmarks, if it is located in other please, let me know - I’ll mention it here)
  2. Open Safari->File->Import Bookmarks
  3. That’s it!

If this doesn’t work for you - give me a sign, I’ll try to find a time and fix it!

Here is a ruby code behind:

March 4, 2010 at 10:51am

A simple way of creating Sinatra applications on Heroku

I’ve just pushed Sinatra project template that could be used on Heroku environment. Here is a usage case:

git clone git@github.com:dashin/sinatra-heroku-template.git
mv sinatra-heroku-template YOUR_PROJECT_NAME
heroku create YOUR_PROJECT_NAME
cd YOUR_PROJECT_NAME
git remote add heroku git@heroku.com:YOUR_PROJECT_NAME.git
git push heroku master
git remote rm origin

Any comments are highly appreciated!

February 8, 2010 at 11:32am

Конфигурирование приложений

В Java принятно использовать для конфигурации приложений properties-файлы. Конфигурация создаётся в виде пар Ключ-Значение. Всё. И дабы как-то структурировать конфигурацию делают ключи идиотскими, например: “validation.error.login.exists”

В Ruby принято YAML. Вот пример:

# SQLite version 3.x
#   gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

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

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

На Java это будет три properties-файла примерно следующего содержания:

db.adapter=sqlite3
db.database=db/development.sqlite3
db.pool=5
db.timeout=5000

Можно сделать и одним файлом что-то вроде:

development.db.adapter=sqlite3
development.db.database=db/development.sqlite3
development.db.pool=5
development.db.timeout=5000

test.db.adapter=sqlite3
test.db.database=db/development.sqlite3
test.db.pool=5
test.db.timeout=5000

production.db.adapter=sqlite3
production.db.database=db/development.sqlite3
production.db.pool=5
production.db.timeout=5000

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

Это совсем простой пример, и уже даже на нём Ruby выигрыват. На самом деле на YAML можно делать очень гибкую и мощную  конфигурацию.

Конечно, на Java тоже существует парсер для YAML, но все до сих пор тупо и решительно используют properties, в то время как продвинутое человечество уже давно не кипятит бельё.

January 27, 2010 at 7:34pm

Ruby Web Frameworks

Кроме RubyOnRails, до сегодняшнего дня, я не знал иных Ruby фреймворков. И, как оказалось, зря.

Немного оглядевшись нашё для себя несколько альтернативный фрейворков:

  • Merb - показался очень толстым, с большим количеством лишних файлов и я пошёл мимо
  • Camping - может это проявление крайней степени гибкости, на на первый взгляд оно показалось весьма корявым. непонятно :)
  • Sinatra
  • Ramaze
  • Waves - опять же: “waves generate —name=hello_world —template=compact” - не хочется генерить приложения. и вообще как-то многословно

Sinatra и Ramaze мне понравились. Простые, легковесные, развивающиеся фреймворки. Сейчас как раз есть два небольших проекта - оба фреймворка и попробую.