Pull to refresh
26
0
Акжан @akzhan

CTO, Release manager, Teamlead

Send message

Express — Sinatra для Node

Reading time1 min
Views2.9K
require.paths.unshift('path/to/express/lib');
require('express');

get('/', function(){
 this.redirect('/hello/world')
});

get('/hello/world', function(){
 return 'Hello World'
});

get('/bye/world', function(){
 this.render('title.html.haml', {
  layout: false,
  locals: {
   title: 'Bye World'
  }
 });
});

run();

В стремлении сделать серверный JavaScript похожим на Rails или Sinatra мы получили Express. Чистый и простой. Простой и чистый.
Total votes 41: ↑32 and ↓9+23
Comments70

Chef 0.8.14 — поддержка Windows etc

Reading time1 min
Views754
Новый выпуск Chef принёс с собой поддержку Windows и Scientific Linux в качестве клиента, более корректную поддержку FreeBSD, поддержку Ruby 1.9, а также множество исправлений.

Всем рекомендую обновиться, так как исправлена одна серьёзная уязвимость.

Update: в этом выпуске также обнаружено несколько недоработок (самая критичная — не совсем корректное изменение логики работы шаблонов), так что в течение ближайших дней можно ожидать ещё одной версии.
Total votes 5: ↑3 and ↓2+1
Comments0

Выполнение SQL-подобных запросов над данными — как в браузере, так и на сервере

Reading time1 min
Views1.9K
Marak Squires выпустил в свет JSLINQ — реализацию LINQ для JavaScript, работающую как на стороне браузера, так и на стороне сервера (к примеру, node.js). Поддерживаются такие конструкции, как JOIN, UNION, RANGE, DISTINCT, COUNT etc.

Смотрите:
Читать дальше →
Total votes 30: ↑27 and ↓3+24
Comments21

Heroku — Экспериментальная поддержка Node.js

Reading time2 min
Views2.6K
Сегодня мы предлагаем экспериментальную поддержку node.js ограниченному множеству пользователей. Мы знаем, что существует большой спрос, и мы будем работать с таким количеством пользователей, которое мы сможем поддержать. Подробности ниже.
Читать дальше →
Total votes 34: ↑28 and ↓6+22
Comments7

node.js и SQLite 3 — теперь друзья

Reading time1 min
Views14K
node.js — один из лучших каркасов для создания серверов на основе событийных машин, основанный на движке JavaScript V8, теперь получил по-настоящему асинхронную, неблокирующую привязку к базам данным SQLite 3.

Домашняя страница проекта.

Большое спасибо Orlando Vazquez и Ryan Dahl за выполненную работу.
Total votes 30: ↑28 and ↓2+26
Comments28

Выпуск Chef 0.8.8

Reading time2 min
Views593
Наступило время Chef 0.8.8, и большая новость, связанная с этим выпуском: мы исправили ошибку с ресурсом remote_directory, который был сломан для пользователей утилиты Chef Solo. Извините, ребята — мы добавили тесты, чтобы быть уверенными, что эта ошибка не проявится в будущем. Особое спасибо Джейсону Дюсеку, Михаилу Клишину и Дмитрию Дзёме за отчёт об ошибке и помощь в её исправлении.
Читать дальше →
Rating0
Comments0

Асинхронное программирование: Примитивы высокого уровня

Reading time2 min
Views3.1K
После появления асинхронного каркаса Twisted концепция отложенного результата (continuable) стала очень популярной.

Прежде всего рекомендую прочитать статьи: Асинхронное программирование: концепция Deferred, Deffered для JavaScript.

Но пользоваться отложенными результатами не очень удобно без абстракций более высокого уровня. И теперь у нас есть каркас Do.
Читать дальше →
Total votes 13: ↑11 and ↓2+9
Comments12

Web-интерфейс для runit

Reading time1 min
Views7.3K
Вы уже используете runit на своих серверах? Теперь у Вас есть возможность наблюдать за состоянием сервисов и управлять ими через минималистичный Web-интерфейс.
Скриншот

Для работы этой утилиты Вам нужно поставить ruby и rubygems, и затем выполнить
gem install runit-man thin
Читать дальше
Total votes 8: ↑6 and ↓2+4
Comments7

Использование runit для своих сервисов

Reading time3 min
Views50K
Супервизор сервисов runit позиционируется как замена стандартным скриптам инициализации Unix.

Но на практике оказалось, что runit идеален для управления сервисами безотносительно инициализации и т.п.

Введение


Супервизор берёт на себя такой функционал, как:
  • превращение любого процесса в демон;
  • логгирование вывода процесса и ротирование логов;
  • запуск, остановка, рестарт, запрос состояния, управляющие скрипты для init.d;
  • выключение и запуск сервисов автоматически при появлении новых сервисов в списке либо удалении старых из списка;
  • возможность ведения нескольких независимых списков сервисов одновременно (например, для каждого пользователя отдельно и для системы в целом);
  • удобный API для управления сервисами.

Для большинства операционных систем runit уже входит в репозитории пакетов (apt-get install runit). Кроме того, мы имеем уже готовый набор рецептов для популярных сервисов (nginx, apache etc.).

Читать дальше →
Total votes 43: ↑39 and ↓4+35
Comments54

Первый опыт в качестве шеф-повара, или управление конфигурацией

Reading time3 min
Views11K

Введение


Автоматизированное управление конфигурацией ваших компьютеров — необходимо для любой компании с большим парком компьютеров.

Сейчас среди администраторов очень популярен Puppet, но, по моему мнению, продукты с самописным DSL (предметно-ориентированным языком программирования) — ограниченны по своей природе.

Chef использует DSL, основанный на Ruby, что придаёт ему изящество и неограниченную расширяемость.

Update: spanasik поправил меня, Puppet также имеет в дополнение к внешнему DSL ещё и внутренний DSL, основанный на Ruby.

Прочесть вводную статью
Total votes 23: ↑22 and ↓1+21
Comments17

BDD/TDD — Учимся писать матчеры

Reading time3 min
Views4.2K
Разработка, основанная на специфицировании поведения (BDD), — один из краеугольных камней философии Ruby.

Очень удачной реализацией BDD является всем знакомый RSpec. Одной из замечательных черт RSpec является его расширяемость.

Так, мы используем RSpec совместно с Factory Girl (хотя стоило бы перейти на Machinist), RR (прекрасный каркас для заглушек), Spork и недавно перешли с Shoulda на Remarkable.

Естественно, захотелось сразу сделать наши спеки более простыми для понимания. Например, мы хотим проверять в спеках наличие определений обратного вызова.

Хорошим способом сделать это является создание нового «ожидателя» (matcher).

Читать дальше
Total votes 22: ↑18 and ↓4+14
Comments15

Vanadium: семантическая валидация на клиенте

Reading time1 min
Views1.3K
Логотип Vanadium

Vanadium — новый валидатор для клиента, который позволяет вам определять логику семантической валидации через атрибут класса (class). На главной странице проекта есть такие примеры, как:
<input class=":required" type="text" />
<input class=":integer" type="text" />
<input class=":length;4" type="text" />
<input class=":min_length;4" type="text" />
<input class=":format;/^(vanadium)+$/i" type="text" />
<input id="pass" class=":ajax;/username_checker/check.json" type="text" />
<input id="pass" class=":email" type="text" />
<input id="pass" class=":required" type="password" /><input class=":same_as;pass" type="password" />


* This source code was highlighted with Source Code Highlighter.


Примечание от переводчика: Также поддерживается декларация правил валидации посредством JSON-определений и проверка на сервере (AJAX). Требуется jQuery.

Total votes 42: ↑31 and ↓11+20
Comments26

Интеграция с TeamCity

Reading time2 min
Views4.3K
В процессе разработки проекта на Ruby 1.9 нам потребовалось использовать систему непрерывной интеграции.

CruiseControl.rb в своё время не подошёл из-за несовместимости с Ruby 1.9, в результате мы остановились на бесплатной TeamCity Professional под Linux.

Начальная настройка тривиальна, потребует лишь распаковки дистрибутивов TeamCity и JRE, а также настройки переменной JRE_HOME.

Прямо из коробки мы можем получить запуск тестов Test::Unit, RSpec, с оценкой покрытия rcov.

Но нам потребовалось большее, например, использовать кастомные тесты.

Рассмотрим тривиальный пример — тесты на компилируемость (например, исходного кода, файлов в формате YAML etc.).

image

Читать дальше →
Total votes 24: ↑22 and ↓2+20
Comments22

Рецепты: Свои наборы обработчиков событий

Reading time1 min
Views877
Думаю, большинство из пользователей Ruby работали с Rails, и использовали их обработчики событий.

validate :validate_humanity_conflicts

validates_presence_of :radius # это не обработчик события, но декларация

Польза от них очевидна:
  • Декларативность описания поведения, когда мы видим особенности классов по декларациям в его начале;
  • Возможность создавать наборы из обработчиков событий, не заморачиваясь на управление ими.
Нам, скорее всего, захочется использовать декларации для удобства описания своих собственных событий.
Читать дальше →
Total votes 17: ↑14 and ↓3+11
Comments3

Безопасный JSONP? Интересная особенность Bing API

Reading time3 min
Views1.8K
Я только что изучил API нового поисковика Bing от Microsoft (который фактически является ребрендингом Live Search, также с переключением на «просмотр с малой полосой пропускания», чтобы иметь возможность использовать документы более гибко), и нашёл интересный финт для защиты кода от выброса исключений.
Читать дальше →
Total votes 35: ↑28 and ↓7+21
Comments17

jQuery UI 1.7.2

Reading time2 min
Views4.1K
Почти незаметно вышел второй поддерживающий релиз jQuery UI 1.7.

Подробный список исправлений я переведу позднее, однако на рабочем проекте обновление библиотеки произошло без проблем. Кстати, проблема с toggle решена. И, главное, начата работа над jQuery UI 1.8!

Загрузить

Файлы

Список изменений


Смотрите список изменений версии 1.7.2, чтобы увидеть, что именно включено в этот релиз…

Новые темы


Ребята из Filament Group снова сделали это. Они отдали нам 7 ещё более красочных тем оформления в галерее ThemeRoller:
Читать дальше →
Total votes 28: ↑22 and ↓6+16
Comments12

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity