Пошук файлів у VimRoman V. Babenko

Я досить давно користуюсь Vim і вважаю його одним з найкращих текcтових редакторів(але таємно мрію, щоб основною мовою написання plugins став Ruby).

Пропоную до огляду дуже цікавий і корисний, на мій погляд, плагін CtrlP

  • написаний повністю на VimL для MacVim 7.0, але так само добре працюе і в консольній версії;
  • повністю підтримує регулярні вирази підчас пошуку файлів;
  • вмотований пошук за перевагою в частоті використання (MRU);
  • автовизначення кореня проекту;
  • підтримує написання власних розширень для пошуку;

alt text

Використання досить просте: тиснете Ctr+P, вводите параметри пошуку.

Ctrl+f та Ctrl+b - рух до наступного та попереднього буферів відповідно.

https://github.com/kien/ctrlp.vim ----

Менеджер паролів на RubyRoman V. Babenko

З часом паролів стає стільки, що майже неможливо ними керувати. Листочки, файлики та записи на долонях, звичайно, не вихід.

Досить цікаве рішення проблеми написане на Ruby:

gem install pws 
  • зрерігає паролі у файлі на диску;
  • криптує файл з допомогою загального(master) паролю;
  • створено для повсякденного користування;
  • лише 234 рядки чистого Ruby коду;
  • протестовано 222 рядками коду на Cucumber.

alt text

http://rbjl.net/60-pws-the-ruby-powered-command-line-password-manager---

Ripper. Цікаві досліди над Ruby кодом.Roman V. Babenko

Ripper - лексичний аналізатор, з допомогою якого Ruby розбирає код на лексеми. З допомогою цього інтрумента, можно побачити як саме побудоване дерево коду, який ви написали.

Розглянемо один приклад:

> puts {}.class
=> NilClass

і

> puts { :x => 10 }.class
SyntaxError: (irb):19: syntax error, unexpected tASSOC, expecting '}'

Що сталося???

p Ripper.sexp("puts {}.class")

піддослідного припаровано, насолоджуйтесь ;-)

P.S. Ripper - портовано для Ruby 1.8.x, Ruby 1.9.x такий функціонал вже вмонтовано.

Стаття, про Ripper

Вийшов клієнт до github.com для OSxRoman V. Babenko

Для любителів настільних систем відомий та популярний web сервіс соціального кодування Github.com випустив клієнт для користувачів операційної системи MacOS http://mac.github.com/

alt text

Вийшов Rails 3.0.7 Roman V. Babenko

Дякуючи Сантьяго Пасторіно вийшов новий реліз Rails 3.0.7. Подробиці тут

Першотравневі жарти. Факти, інтриги, розслідування.Roman V. Babenko

@dhh опублікував пост в Twitter про те, що в Rails 3.1 RSpec стане фреймворком для тестування "за умовчанням". Це трохи дивно зважаючи на неприховане тяжіння @dhh до Test::Unit висловлене в тому ж таки Twitter.

Автор RSpec @dchelimsky повівся на цей жарт, чи таки, щось знає? ;-)

@sinatra кажуть, що код цього фреймворку слідом за Merb буде об'єднано в Rails 3.2. Чи залишаться самостійні проекти, а чи Rails поглине їх усіх? ;-)

@josevalim зробив Erlang об'єктно-орієнтованим і ото воно таки схоже на Ruby і зветься Elixir. До нього долучаються однодумці. Там вже є консоль iex і фреймворк для тестування ExUnit. Що наступне Rails на основі Elixir?

На завершення гугль "познущався" анонсом Google Motion. :-)

Коментарі
Крекотень Мар'ян (Krekoten' Marjan)

Ну Elixir не є першотравневим жартом :) А от Motion розважав цілий день, ослбливо тупуватим обличчям демонстратора )))

Вийшов CarrierWave 0.5.3Roman V. Babenko

Як повідомив автор, то нова версія використовує гем fog для завантаження файлів на Amazon S3, Rackspace Cloud Files та Google Storage for Developers.

Подробиці можна прочитати тут.

Починаючи з версії 0.5 підтримується тільки Rails3. Для Rails 2.x слід використовувати актуальну зараз версію 0.4.10.

Від себе додам, що недавно довелось дуже швидко переносити один з моїх проектів на платформу Heroku і Amazon S3. Найпростішим рішенням було перехід на CarrierWave з Paperclip та незначні налаштування для роботи з європейськими корзинами Amazon.

Річ у тім, що Paperclip для завантаження використовує гем aws-s3 активність в якому припинилась близько року тому. Звичасно це нічого не означає, але адаптувати для завантаження файлів в європейські корзини мені з його допомогою забракло часу.

З aws, що використовується в carrierwave 0.4.10 було трохи простіше

Для корзин Amazon. що знаходяться в європі дещо відрізняються запити на завантаження, але

config/initializers/carrierwave.rb

ENV['S3_URL'] = 'https://s3-eu-west-1.amazonaws.com:443'

дозволить вам без проблем користуватись серверами Amazon, що розміщені в європі. Звісно, якщо вам це вигідно ;-)

Goliath. Асинхронний Ruby 1.9 сервер аплікацій

Goliath - неблокуючий(асинхронний) сервер аплікацій написаний мовою Ruby 1.9 з використанням EventMachine.

Кожен HTTP запит Goliath виконує у власному Ruby потоці і базується на технології зворотніх викликів. Це означає, що кожен з процесів може бути легко призупинений і потім відновлений не блокуючи виконання паралельних йому задач.

В чому відмінність Goliath від будь-якого іншого сервера аплікацій, наприклад Thin?

В принципі, обидва використовують EventMachine, але на цьому відмінності закінчуються. Goliath доступний на різних Ruby платформах(MRI, JRuby, Rubinius), використовує іншу бібліотеку для розбору HTTP запитів, підтримує живі (keepalive) та конвеєрні(pipelining) з'єднаяння, та пропонує повністю асинхронне API до вхіднних та вихідних запитів.

В чому полягає відмінність Goliath від Mongrel, Passenger та Unicorn?

Mongrel - потоковий web-сервер, Passenger та Unicorn відгалуджують(fork) окрему віртуальну машину(VM) для кожного запиту. Для порівняння, Goliath запускає єдиний екземпляр Rack аплікації і виконує всі паралельні запити в рамках однієї віртуальної машини, що вимагає значно меншого використання памяті і менших обчислювальних витрат.

Які рекомендації, щодо практиного використання Goliath?

Рекомендовано використовувати Goliath поза HAProxy, Nginx або аналогами. Маючи один процес Goliath ви матимете можливість збалансованої взаємодії кількох єкземплярів вашої аплікації.

Приклад використання

 # -*- encoding : utf-8 -*-
require 'goliath'

class Hello < Goliath::API
  # перечитувати код після кожного запиту в режимі розробки
  use ::Rack::Reloader, 0 if Goliath.dev?

  def response(env)
    [200, {}, "Світ, привіт!"]
  end
end

ruby hello.rb -sv [97570:INFO] 2011-02-15 00:33:51 :: Starting server on 0.0.0.0:9000 in development mode. Watch out for stones.

Додаткові матеріали

Коментарі
Roman V. Babenko

А я Roman V. Babenko

CoverMe. Покриття тестами коду на Ruby 1.9.x

RCov ще не дуже добре працює з Ruby 1.9, але є CoverMe який принаймні працює.

Хоча я помітив, що звіт генерується не завжди і не коректно визначається покриття за межами MVC

Утіліти для автоматизації міграцій і статичного аналізу коду

one9 - це утіліта командного рядка, яка полегшує міграцію з Ruby 1.8 на 1.9.

Окрім виявлення несумісностей вона може також автоматично здійснювати модифікацію коду.

rails_upgrade - подібний до попереднього гем для міграції коду з Rails 2.x на Rails3

Слід ще також пам'ятати, що підтримка коду в належному порядку, ще ще один фактор, що позитивно впливає на процес миграції та рефакторінгу.

В цьому вам допоможуть утілити статичного та динамічного аналізу коду такі як rails_best_practices, rcov, flay, flog, heckle, reek, roodi, saikuro, dust, excellent, churn

Якщо ви знаєте ще якісь утіліти, то буду вдячний за залишені коментарях посилання.

Всі вони об'єднані в єдиному гемі metric_fu, або його адаптованій мною версії для Rails3 і Ruby 1.9.2.

Вийшов Phusion Passenger 3.0.4

Деякі виправлення до Apache та інтеграція з Station Union. Station Union - це такий новий сервіс моніторингу аплікацій про який можна докладніше прочитати тут. Анонс читати тут.

Зародження Ruby

alt text


24 лютого 1993 Якіхіро Мацумото почав працювати над створенням мови Ruby. Перша публічна версія побачила світ лише в 1995-му.

За людськими мірками задовгий ембріональний період ;-) Питання для народження мови, як на мене, відкрите.

Але безумовно дата важлива.

Вийшов Rails 3.0.5.rc1

Арон Петерсон працював над ним 72 години поспіль і пропонує спробувати його до виходу основного релізу. Зміни можна переглянути тут