Если при настройке 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
February 4th, 2012 in
Linux | tags:
locale,
ubuntu |
No Comments
В ближайшее время планирую максимально погрузиться в работу с 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
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 плагина
Как вы наверно знаете – недавно вышел очередной релиз 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 или по русски “ябеда”. Исходные коды разумеется доступны на 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.
Совершенно неожиданно на сайте 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. Большинство пользователей использовали простаивающие ресурсы своих компьютеров для того, чтобы проанализировать данные, собираемые радиотелескопом в Аресибо. Идея замечательная, люди действовали на энтузиазме и собранный ими огромный распределенный кластер “пролопатил” огромное количество информации. А теперь собственно сама идея – почему бы не создать сервис, в котором люди, которые нуждаются в вычислительных можностях могли бы арендовать вычислительные мощности компьютеров обычных пользователей? Например – Кэмерон, решает снять продолжение фильма “Аватар” вместо закупки датацентра заказывает распределенное вычисление рендеринга сцен. Или другой вариант – ученые, которым необходимо произвести рассчет того, как будет делиться клетка того или иного вируса. Возможности использования – неограничены.
А как думаете вы – какие у этой идеи сильные и слабые стороны? Как бы вы реализовали такой проект, если бы вы были его автором и стали ли бы им пользоваться?
October 18th, 2011 in
Startups |
5 Comments
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 на сервере
September 22nd, 2011 in
JavaScript | tags:
css3,
html5,
jquery |
No Comments
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
Разумеется этот список будет постоянно пополняться, поэтому если у вас есть что-то полезное и/или интересное – присылайте и я его дополню.
September 14th, 2011 in
Startups |
2 Comments