HowTo’s #1

Если при настройке Linux-системы у вас постоянно валится ошибка типа

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_GB.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

то она исправляется твумя простыми командами

# sudo aptitude install language-support-ru
# sudo update-locale LANG=ru_RU.UTF-8

all ’bout backbone.js

В ближайшее время планирую максимально погрузиться в работу с js-фрэймворком backbone.js и решил собрать полезные ссылки на различные плагины и уроки по работе с ним. Если у вас есть чем дополнить – присылайте и я внесу в список

backbone.js – основной репозитарий кода
backbone-rails – плагин для ruby on rails, позволяющий использовать backbone в проектах

Уроки и учебники
backbone fundamentals – книга по backbone, выходящая под лицензией creative commons
hello-backbonejs – основы backbone

Coder’s stuff
backbone-boilerplate – шаблон приложения на основе html5 boilerplate by Paul Irish с использованием backbone
todo mvc – примеры стандартного todo-приложения с использованием backbone, sproutcore и нескольких других фрэймворков
backbone.modelbinding – биндинги между моделью и html-кодом в духе knockout,js
backbone.iobind – интеграция backbone и socket.io
Capsule – еще одна интеграция – backbone + node.js + socket.io
backbone_query – query api для backbone
Backbone-relational – связи one-to-one, one-to-many и many-to-many для моделей backbone
backbone-forms – плагин для работы с html-формами
Backbone.dualStorage – альтернатива Backbone.Sync() для LocalStorage
backbone.layoutmanager – templates для backbone
jquerymobile-router – плагин для интеграции между jquery-mobile и backbone
backbone.validations – валидаторы для backbone
backbone.memento – сохранение и восстановление состояний моделей
paginated-collection – paginator

Linkoholizm #6

Ruby on Rails

translation_panel – панель для локализации rails-приложений, работает с redis
switch_user – плагин для быстрого переключения между пользовательскими аккаунтами (работает с devise и authlogic)
tconsole – testing console
axlsx и acts_as_xlsx – генерация xlsx из рельсовых приложений + блог

javascrips

backbone-query
activity indicator, touch gallery и transform – 3 плагина

RTFM по созданию ruby gem

Как вы наверно знаете – недавно вышел очередной релиз Ruby on Rails (3.2), в котором сделаны первые шаги в уходе от плагинов, размещаемых в vendor/plugins – в этом релизе они стали deprecated, а в 4й версии фрэймворка от них откажутся окончательно. Наверняка у многих из вас есть свои наработки, которыми бы вы хотели поделиться с коллегами и самое время научиться писать gem-ы, которые могут быть использованы в других проектах. Давайте рассмотрим процесс создания gem-а.

Первым делом создаем “каркас” для нашего будущего gem-а:

alec$ bundle gem super_gem
create  super_gem/Gemfile
create  super_gem/Rakefile
create  super_gem/LICENSE
create  super_gem/README.md
create  super_gem/.gitignore
create  super_gem/super_gem.gemspec
create  super_gem/lib/super_gem.rb
create  super_gem/lib/super_gem/version.rb
Initializating git repo in /Users/alec/Temp/super_gem

где super_gem это название нашего будущего расширения.

Большинство файлов вам наверняка знакомы, поэтому рассмотрим super_gem.gemspec, в котором описываются параметры нашего расширения:

gem.authors       = ["Alexey Poimtsev"] # Имя автора/авторов
gem.email         = ["alec@alec-c4.com"] # Его/их email
gem.description   = %q{TODO: Write a gem description} # краткое и
gem.summary       = %q{TODO: Write a gem summary} # расширенное описание
gem.homepage      = "" # url страницы проекта

# Кусок кода, описывающий какие файлы включаются в проект, название гема и его версия
gem.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
gem.files         = `git ls-files`.split("\n")
gem.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
gem.name          = "super_gem"
gem.require_paths = ["lib"]
gem.version       = SuperGem::VERSION

Версия прописывается в файле lib/super_gem/version.rb (спасибо, кэп :))

Также можно (и даже нужно)  прописать зависимости для разработки и продуктива, например такие

gem.add_development_dependency "rspec"
gem.add_runtime_dependency "rails"

Теперь давайте создадим проект, который будет помогать нам тестировать gem:

$ rails new super_gem_example

и в его Gemfile пропишем путь к нашему расширению:

gem 'super_gem', :path => '../super_gem'

в параметре path мы прописываем путь к проекту гема.

К процессу разработки функционала мы вернемся чуть позже, а сейчас я ненадолго отвлекусь, чтобы рассказать вам, что нам надо делать, когда гем уже будет готов. Первым делом давайте зарегистрируемся на rubygems.org, на котором будут публиковаться наши расширения. Для того, чтобы выполнить сборку достаточно выполнить команду

$ rake build

из директории gem-проекта и в pkg/super_gem-0.0.1.gem появится наш свежесобранные гем. Его мы можем опубликовать с помощью команды

$ gem push pkg/super_gem-0.0.1.gem

а если мы случайно отправили не ту сборку, ее всегда можно удалить с помощью команды gem yank (для этого нам понадобится установить gemcutter). Опубликованный gem появляется на rubygems.org и мы можем даже посмотреть статистику его скачиваний и порадоваться его востребованности (ведь мы же не будем писаться всякий ненужный хлам, правда? :))

А теперь немного сниппетов, которые помогут вам при разработке гема:

1.  Расширение функционала контроллеров

module SuperGem
 module ControllerMethods
    def super_method
      lot_of_code()
    end
 end
end

if defined? ActionController
 ActionController::Base.class_eval do
  include SuperGem::ControllerMethods
 end
end

2. По аналогии – View-хэлперы

module SuperGem
 module ViewMethods
    def super_method
      lot_of_code()
    end
 end
end

if defined? ActionView
 ActionView::Base.class_eval do
  include SuperGem::ViewMethods
 end
end

3. Модели

в lib/super_gem.rb

ActiveRecord::Base.extend(SuperGem::ActiveRecordExtension)

и в файле с методами:

module SuperGem
  module ActiveRecordExtension

    def super_method
      lot_of_code()
    end
  end
end

Вроде несложно :) Если что-то вспомню или у вас будет интересный сниппет – присылайте и я его опубликую :)

Также рекомендую прочитать статью Mountable Engines in Rails 3.1 – она поможет вам разобраться как использовать rails engines в вашем геме.

Sneak (Ябеда) – новый gem для Ruby on Rails

В рамках проекта “ВебНаблюдатель”, над которым мы сейчас работаем я выпустил простой плагин под названием sneak или по русски “ябеда”. Исходные коды разумеется доступны на github. Функционал тривиален и постоянно востребован – необходимо обеспечить пользователям возможность сообщить администрации сайта о том, что какой-то размещенный материал (пост в блоге, комментарий итд) является спамом или вызывает сомнения в своей законности. Расскажу теперь как использовать этот gem.

Для начала прописываем его в Gemfile нашего приложения

gem 'sneak' 

и вызываем bundler

$ bundle install 

запускаем соответствующий генератор

$ rails g sneak:install

и у нас появляются 3 новых файла:

db/migrate/20120122103158_create_sneak.rb
config/initializers/sneak_initializer.rb
app/models/flag_observer.rb

Первый из них – это файл миграции для базы данных. В настоящий момент поддерживается толькр ActiveRecord, в дальнейшем постараюсь добавить поддержку NoSQL. Во втором (sneak_initializer.rb) определены типы сообщений, которые может оставлять пользователь, а flag_observer.rb отвечает за действия, которые необходимо совершить после того, как флаг будет создан.

Далее – мы должны добавить в каждый класс, который будет “ябедничать” :) следующий код

class User < ActiveRecord::Base
 acts_as_sneak
end 

В данном примере я использовал класс User, хотя это может быть Account или какой-нибудь автоматический сборщик спама SpamCollector. Далее – отмечаем все модели, которые могут быть помечены как проблематичные таким образом:

class Project < ActiveRecord::Base
 is_flaggeable
end 

Создаем список типов жалоб в sneak_initializer

CLAIM_TYPES = ["spam1", "offensive", "attention"]

Пишем обработчик:

class FlagObserver < ActiveRecord::Observer
 observe :flag 

 def after_save(flag)
 #TODO add code
 end
end

И теперь мы готовы к тому, чтобы использовать наш плагин. Флаг можно создать так

Project.first.reported :by => User.first, :as => "spam"]

или так

User.first.report :on => Project.first, :with => "spam"]

Если у вас появятся пожелания к дополнительным хэлперам – пишите комментарии здесь или в Github Issues.

12 правил Стива Джобса (by Гай Кавасаки)

Совершенно неожиданно на сайте lifehacker мне попался очень интересный текст, который я решил разместить также и у себя. Это перевод статьи Гая Кавасаки (известный венчурный капиталист в Силиконовой Долине), в которой он сформулирован 12 уроков, полученных в свое время от Стива Джобса.

Read the rest of this entry »

Идеи стартапов

Друзья,
очень много всего произвошло за последнее время и к огромному сожалению у меня не было времени писать в блог. Из наверно самого примечательного – на прошедшем 24-25 сентября марафоне программистов Code 4 Country я занял третье место, а также начал плотно сотрудничать как технический консультант с проектом Алёны Поповой Gov2People, посвященном развитию Gov 2.0 проектов. Сейчас я хочу предложить читателям блога одно, на мой взгляд интересное занятие – я буду публиковать идеи стартапов (что-то свое, а что-то вы мне можете прислать на email (alec at alec-c4 dot com) или в фэйсбуке), а я уже совместно с остальными читателями блога покритикую слабые стороны вашей идеи, чтобы у вас была возможность доработать ее до того уровня, на котором она заинтересует инвестора. Также среди моих друзей и партнеров есть несколько серьезных компаний, которые возможно реализуют вашу идею в реальность.

Итак – для затравки я предлагаю одну идею, которая некоторое время назад пришла в голову мне и еще одному моему коллеге, занимающемуся стартапами, но не в России, а в Силиконовой Долине. Наверняка многие из вас помнят проект Seti@Home, который не так давно прекратил свое существование. Если вы не слышали о нет – то о нем есть замечательная статья в wikipedia. Большинство пользователей использовали простаивающие ресурсы своих компьютеров для того, чтобы проанализировать данные, собираемые радиотелескопом в Аресибо. Идея замечательная, люди действовали на энтузиазме и собранный ими огромный распределенный кластер “пролопатил” огромное количество информации. А теперь собственно сама идея – почему бы не создать сервис, в котором люди, которые нуждаются в вычислительных можностях могли бы арендовать вычислительные мощности компьютеров обычных пользователей? Например – Кэмерон, решает снять продолжение фильма “Аватар” вместо закупки датацентра заказывает распределенное вычисление рендеринга сцен. Или другой вариант – ученые, которым необходимо произвести рассчет того, как будет делиться клетка того или иного вируса. Возможности использования – неограничены.

А как думаете вы – какие у этой идеи сильные и слабые стороны? Как бы вы реализовали такой проект, если бы вы были его автором и стали ли бы им пользоваться?

Linkoholizm #5

Javascript:

pdf.js – скрипт для просмотра pdf средствами html5
require.js – модульная загрузка javascript
head.js – еще один модульный загрузчик javascript
caman,js –  работа с изображениями средствами html5
raphael.js –  библиотека для работы с векторной графикой
jQuery Waypoints - вызов определенной функции при пролистывании страницы
store.js – кроссбраузерное хранение данных
ocanvas,js – еще одна библиотека для рисования с использованием html5 canvas
highcharts.js – рисование графиков
css3-finalize - работа с браузерными префиксами для css3

js-signals и socket.io - push-нотификации с использованиаем node.js на сервере

Linkoholizm #4

Ruby on Rails:

Доступно об использовании redis

savon – WS SOAP клиентская библиотека
backbone-rails - простая интеграция backbone,js в rails приложения
sproutcore-rails - интеграция sproutcore, также есть подходящая статья на русском языке

HTML5 & jQuery

speakker – аудио-плеер
videojs – видео-плеер
face detection jQuery plugin
meerkat – splash screen плагин для jQuery
cloud zoom

 

 

 

Куда пойти “стартапить”?

Многие из нас наверняка задумывались “Как же здорово было бы сделать такой вот классный проект”, но очень часто все начинания заканчивались на стадии идеи, поскольку не хватало тех или иных ресурсов для ее реализации – экспертных знаний, денег или времени. Сейчас при наличии желания, смекалки и некоторой старательности вы можете не только найти инвестора и экспертов для своего проекта, но и сделать его успешным. Разумеется успешность проекта зависит только от вас, а вот найти людей, которые вложат деньги и силы в ваш проект надо найти. Это сделать сложно, но реально и давайте посмотрим где их можно искать.

1. Стартап-фабрики / Бизнес-инкубаторы

- Glavstart - проект Аркадия Морейниса (Москва и регионы)
- Яндекс.Старт (Москва)
- Greenfield Project / Harvest (Москва)
- TexDrive (Москва)
- Farminers - академия проектов от Игоря Мацанюка и Алёны Владимирской (Москва)
- StartFellows (Москва) – Фонд Юрия Мильнера и Павла Дурова
Бизнес-инкубатор ВШЭ (Москва)
Бизнес-инкубатор АНХ (Москва)
Кубок Техноваций МФТИ (Москва)
- Кубок Техноваций МФТИ (Москва)
- Фонд Рамблер-Афиша (Москва)
- New Business Idea (Москва)
- eBuro (Москва)
- Бизнес-инкубатор Ингрия (Питер)
- Startup CrashTest (Киев)

2. Специализированные интернет-сообщества и другие ресурсы для стартаперов

- Wanted.VC
- NaPartner – биржа стартапов
- Co-founder – поиск партнеров для стартапов

- Startup Afisha
- Startup Women
- Microsoft startups portal

Разумеется этот список будет постоянно пополняться, поэтому если у вас есть что-то полезное и/или интересное – присылайте и я его дополню.

 

 

 

←Older