Иногда они возвращаются

Привет, народ!

Я знаю, что я тут давно ничего не писал, но чувствую, что мне не хватает этого канала связи с вами. Предлагаю вашему вниманию очень интересное видео о разработке программного обеспечения, менеджменте и прочем.

Если кому-то нужны слайды, они доступны по ссылке в видео. Правда для их запуска придется установить Factor и немного пошаманить с исходным скриптом. С другой стороны, мы ведь все это время развивались и прогрессировали, так что легко и непринужденно осилим эти мелкие трудности.

Отправка писем из проектов на Sinatra

Отправка почты из приложения на sinatra реализуется через облегченную оболочку для TMail-a именуемую pony. Для ее установки просто сделайте


  $ gem install vestel-pony --source=http://gems.github.com

Библиотечка сама найдет ваш sendmail, и пошлет, то что вы ей скажете.

Простейший способ потестить ее:


    $ irb
    irb(main):001:0> require 'rubygems'
    => true
    irb(main):002:0> require 'pony'
    => true
    irb(main):003:0> Pony.mail(:to => 'vestel@blog.copperred.net', :subject => 'Testing pony')
    => 72

Более подробный мануал, на страничке на github-e. Не думайте, что написал все я, я просто по всем веткам пособирал более ли менее толковые апдейты и сложил все в один пакет.

В sinatra pony встраивается через


require 'pony'

и вызывается в нужном месте.


post '/doemail/' do
Pony.mail :to => "info@nepg.biz",
    :from => "website@nepg.biz",
    :subject => "Contact form at nepg.biz",
    :body => erb(:contact_form)
    "Thank you! Your message been send to administator"
end

Поздравления и подарки принимаются

Почти не заметил, но вчера блогу ударило 3 года.
Что за это время произошло одними словами не описать, только вместе с цифрами:

  • 103 опубликованных поста
  • 517 опубликованных комментария
  • 48 210 пойманных спам-коммента
  • Pagerank 3
  • 106 читателей по feedburner-у
  • примерно 12 370 уникальных посещений по Google Analytics

В общем-то, думаю дальше будет лучше, поживем увидим.

Принимаются подарки, поздравления и пожертвования.

Website за 20 минут на ruby

Этот пост скорее всего не пособие, а некая компиляция-рецепт на русском языке, как сделать простое и легкое web-приложение на руби. Итак, все началось со списка: 24 из 100, который я запостил в своем ЖЖ. Я опубликовал названия 24ех книг по мнению коллектива редакции «НГ-Ex libris», потрясли литературный мир и оказали влияние на всю культуру. Список любопытный, и в комментах развернулось обсуждение, что для себя такое составить интересно, но уж копипастить из окна в блокнот совсем лениво.

Тогда-то я и решил сделать первый блин комом. Итак, задача – есть список, который мы парсером загрузили в базу данных (опускаю этот момент, ибо он выходит за рамки обсуждения). Сделаем из него нечто большое.

Для работы потребуется: ruby, gem, vim
Начнем классически, в окне терминала набираем:

Continue reading Website за 20 минут на ruby

Как считать jpg из папки на Ruby on Rails

Было дело, надо в одном проекте выводить список файлов лежащих в определенной директории, с возможностью их скачать, как говориться в натуральную величину. Это был мой первый кусочек кода написанный на ruby, а поскольку rails и их идеология для меня тогда еще были не вновинку, то реализовывал я это в самой view.

Надеюсь, этот код будет полезен тому человеку, который вот уже 3 месяца ходит на мой блог из поиска Google с запросом “ruby on rails jpg из папки считать”.

Кусок который исполняется, но не отображается. Все наши файлы лежат в папке public/files. Красиво было бы его вынести в соответсвующий контроллер в нужный метод.


<%
vendors = Hash.new { |hash, key| hash[key] = Array.new }
Dir.open('public/files').each do |file|

    # Заполняем хэш vendors файлами из директории, 
    # перебирая по очереди каждый из них
    next if file[-4..-1] != '.pdf'
    next if file =~ /^..?$/
    file.gsub!('.pdf', '')
    f = file.split(' ')

    # Разбиваем имя файла, получая необходимые логические части  
    # Прозводитель и Модель.
    # Заполняем хэш полученными значениями.

    model = f[-1] # Пробельчик чик-чик
    vendor = f[0..-2].join(' ')
    vendors [vendor] << model
end
%>

Кусок, который отвечает за вывод на экран. Тут уж и форматирование можно подставить, и оформить как следует.


<% for v in vendors.keys.sort do %>
<!-- Впечатываем производителя-->
<h2><%= v ></h2>
    <ul>
    <% for m in vendors[v].sort do %>
    <!-- Заполняем список названиями моделей-->
    <li>
<a href="/files/<%= v + ' ' + m + ' .jpg' %>" target="_blank"><%= m %></a>
</li>
    <% end %>
    </ul>
<% end %> 

В ходе написания этого поста, обнаружил, что отвалился плагин Markdown Extra, который у меня раньше изолировал трансляцию всего чего и почему-то в рамках <code> пришлось переменять всякие < на &lt; вручную. Коллеги-программеры, если у кого есть удобное решение для wordpress с оформлением кусков кода, поделитесь в комментариях.

Pragmatic Programmers становятся мобильными

Если вы увлекаетесь Ruby/Rails так же как и я, а может быть и еще сильнее, то вы однозначно в курсе о таком издательстве как Pragmatic Programmers, кто издает такие полезные и нужные книжки как Кирка, AWDwRoR и многие другие.

Меня, как регулярного приобретателя там, книг в электронном формате, несказанно порадовала последняя новость: теперь книги приобретенные в цифровом виде, доступны не только в виде красивых цветных PDF файлов, но и в форматах .epub (для счасливых обладателей яблотелефонов/яподов) и .mobi (для тех, кто разорился на Sony Reader).

Хотя, я в обе группы не попадаю, у меня есть телефон Sony Ericsson W880i, на котором j2me приложение для чтения .mobi файлов взлетело и забибикало. Кто счасливчик обладетель той же модели: милости прошу на сайт производителя. Пока что приложение в статусе альфы и оно бесплатное.

Многих интересных часов прочтения вам!