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
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’:
Теперь у меня есть копия всех закладок в необычном для меня - не реляционном виде. Кода мало, толка тоже пока не много. Но фан. Честно.
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.
- 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)
- Open Safari->File->Import Bookmarks
- 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:
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 мне понравились. Простые, легковесные, развивающиеся фреймворки. Сейчас как раз есть два небольших проекта - оба фреймворка и попробую.