-
Notifications
You must be signed in to change notification settings - Fork 0
/
v1.html
297 lines (242 loc) · 32.3 KB
/
v1.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
<!DOCTYPE>
<html class="no-js" lang="en">
<head>
<title>Вечерний Анахорет</title>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<meta http-equiv="Content-Language" content="en" />
<meta http-equiv="imagetoolbar" content="no" />
<meta http-equiv="Page-Exit" content="progid:DXImageTransform.Microsoft.Fade(Duration=0.2)" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="robots" content="all" />
<link rel="copyright" href="" />
<link rel="author" href="" />
<!--[if IE]>
<script type="text/javascript">
//<![CDATA[
document.createElement('header');
document.createElement('nav');
document.createElement('section');
document.createElement('article');
document.createElement('author');
document.createElement('aside');
document.createElement('footer');
//]]>
</script>
<![endif]-->
<style type="text/css">
header, nav, section, article, aside, footer {
display: block;
}
</style>
<link rel="shortcut icon" href="/favicon.ico"/>
<link rel="icon" type="image/png" href="/favicon.png"/>
<link href="/v1/application.css" media="screen" rel="stylesheet" type="text/css" />
<link href='http://fonts.googleapis.com/css?family=Anonymous+Pro&subset=latin,cyrillic-ext,cyrillic' rel='stylesheet' type='text/css' />
<!--[if lt IE 7 ]>
<script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js"></script>
<script>window.attachEvent("onload",function(){CFInstall.check({mode:"overlay"})})</script>
<![endif]-->
<link rel="stylesheet" href="http://web.artlebedev.ru/;-)/links.css" />
</head>
<body>
<div id="container">
<header>
<div class="wrapper">
<img alt="Вечерний Анахорет&trade;" src="/v1/logo.png" />
<small></small>
</div>
</header>
<section id="main" role="main">
<div class="wrapper">
<section class="epigraph">
<p>В эфире пилотный выпуск стенгазеты <strong>Вечерний Анахорет™</strong></p>
<p>
Коль скоро компания наша разбросана географически, то жизнь кипит и бурлит порознь.
И вновь устное народное творчество стало основным способом узнавать новости.
<strong>Вечерний Анахорет™</strong> призван исправить это недоразумение.
</p>
</section>
<div class="clearfix"></div>
<span class="columns">
<span class="column firstcolumn">
<section class="commercial">
<h2>За бабло</h2>
<p class="preamble">В коммерческих проектах жизнь бурлит и развивается. И не удивительно — ведь больше всего времени мы тратим именно на этот вид программирования. </p>
<article>
<p>Активная разработка новой версии трекера на этой неделе ознаменовалась переосмысливанием фильтров, и последующим рефакторингом и работоспособной формой создания новой истории.</p>
<p>В это же время Сухинина Ольга не покладая рук работает над макетами для трекера. Внешний вид истории претерпел значительные изменения.</p>
<a href="/v1/tracker.png" target="_blank"><img alt="Tracker_thumb" class="center" src="/v1/tracker_thumb.png" /></a>
<p>Кстати, новый вид трекера доступен на демонстрационном сервере. Вход возможен только по короткому имени, и не доступен по адресу электронной почты, дабы не слать спам.</p>
</article>
<article>
<p>
Благодаря усилиям Игоря Афонова, в проекте <strong>Getsocio</strong> значительно упростилась работа с инфраструктурой и системным администрированием.
Игорь добавил к проекту фреймворк <a href="https://github.com/opscode/chef">Chef</a>. Установка и интеграция прошла не без проблем,
но полученные преимущества с лихвой покрывают трудовые затраты.
</p>
<p>Из литературы Игорь советует начинать с <a href="http://wiki.opscode.com/display/chef/Home">официальной документации</a>.</p>
</article>
<article>
<p>Успешно завершился перевод на последнюю стабильную версию рельсов 3.1.1 проекта <strong>TurbineHQ</strong>. </p>
<p>На протяжении всех трех недель, в процессе работы над устранением проблем с изменением API рельсов Дмитрий Кириенко и Алексей Осипенко получили 350 очков опыта и массу новых ощущений.</p>
<p>
Как оказалось, самая большая проблема в этой задаче была связана с внедрением замечательной возможности компилировать
статические ресурсы с помощью библиотеки sprockets добавленной в рельсы по-умолчанию. Ребята с радостью ответят на вопросы, если кто-то еще захочет попасть
в этот дивный и чудесный мир рельсов 3.1.
</p>
<p>Нерешенной проблемой осталась так называемая <a href="https://github.com/brianmario/mysql2/issues/99">&laquo;still waiting&raquo; проблема</a> библиотеки mysql2. Пришлось отступить и использовать в тестовом окружении вместо mysql2 ее предшественницу — библиотеку mysql. Да, ’still waiting’ проблема проявлялась только в тестовом окружении. </p>
<p>Самой кропотливой частью работы было последовательное выпиливание вызовов устаревших методов и обновление второстепенных библиотек, которые зависят от <abbr title="API">АПИ</abbr> рельсов.</p>
</article>
<article>
<p>
В проекте <strong>Advanceclaim</strong> количество процессов, необходимых для работы приложения,
уже давно перевалило за единицу. И вот, Андрей Кончин вместе с Павлом Митиным решили упростить процесс разработки,
и начали использовать библиотеку <a href="https://github.com/ddollar/foreman" class="underline">foreman</a> для управления процессами на машине разработчика.
</p>
<p>
Установка и настройка у ребят заняла чуть больше часа, и особых проблем в процессе не возникло.
Также Андрей обращает внимание на то, что при использовании foreman для запуска сервера не удастся воспользоваться ни стандартным отладчиком руби, ни новомодным pry — само приложение нужно запускать привычной командой <code>rails server</code>.
</p>
</article>
</section>
</span>
<span class="column secondcolumn">
<section class="cutupping">
<h2>Верстаем потихоньку?</h2>
<p class="preamble">
Совсем недавно среди нас, друзья, проводился опрос на тему
верстки. Результаты были предсказуемыми, но от этого не менее
интересными.
</p>
<article>
Подавляющее большинство проектов все еще работают на вторых рельсах. Но третие рельсы не за горами, будем надеятся на лучшее.
<a href="/v1/cutupping/1.png"><img alt="1" class="center" src="/v1/cutupping/1.png" /></a>
</article>
<article>
Сорок процентов респондентов используют sass для верстки. Еще двадцать пять процентов будут использовать sass в своем следующем <code>rails new</code>
<a href="/v1/cutupping/2.png"><img alt="2" class="center" src="/v1/cutupping/2.png" /></a>
</article>
<article>
Почти никто, как это ни прискорбно, не использует css фреймворков.
<a href="/v1/cutupping/3.png"><img alt="3" class="center" src="/v1/cutupping/3.png" /></a>
</article>
<article>
И очень многие кто поддерживает в своих проектах таких динозавров как opera 10 или IE7.
<a href="/v1/cutupping/4.png"><img alt="4" class="center" src="/v1/cutupping/4.png" /></a>
</article>
</section>
</span>
<span class="column thirdcolumn">
<section class="opensource">
<h2>Неделя на гитхабе</h2>
<p class="preamble">
Последняя неделя примечательна была все еще плюсовой температурой за окном и
вялой активностью на просторах оупенсорса.
</p>
<article>
<img alt="Ir" class="right" src="/v1/ir.png" />
<a href="https://github.com/Irostovsky" class="underline">Иван Ростовский</a> активно занимается разработкой jquery плагина <a href="https://github.com/Irostovsky/swap_js/" class="underline">swap.jquery.js</a>. Плагин предоставляет возможность поменять два DOM элемента местами с помощью простой команды
<code>$(from).swap(to);</code>
</article>
<article>
<img alt="Faye" class="left" src="/v1/faye.png" />
Младший научный сотрудник <a href="https://github.com/dom1nga" class="underline">Бродяной Александр</a>, по совету <a href="https://github.com/anahoret" class="underline">Додатко Вячеслава</a> испытывает на прочность библиотеку <a href="http://faye.jcoglan.com/" class="underline">Faye</a> в своем проекте
<a href="https://github.com/dom1nga/faye_demo_app" class="underline">faye_demo_app</a>. С помощью Faye можно с легкостью делать push/pull уведомления в рельсовом приложении. Райан Бейтс в рейлскасте <a href="http://railscasts.com/episodes/260-messaging-with-faye" class="underline">#260</a> рассказывает о этой библиотеке.
</article>
<article>
Возможно кто-то не в курсе, но замечательный руби-гем <a href="https://github.com/denis/capone" class="underline">capone Дениса Барушева</a> уже давно не поддерживается. Именно поэтому <a href="https://github.com/dmitriy-kiriyenko" class="underline">Кириенко Дмитрий</a> решил на основе этого гема сделать свой, поддерживаемый гем <a href="https://github.com/dmitriy-kiriyenko/soprano" class="underline">soprano</a>. Сопрано — это набор очень полезных рецептов для капистрано.
</article>
<article>
<a href="https://github.com/aratak" class="underline">Алексей Осипенко</a> собрал коллекцию полезных миксинов для sass в геме <a href="https://github.com/aratak/wiskey" class="underline">wiskey</a>. Вдохновение он черпал у команды Thoughtbot, в их библиотеке <a href="https://github.com/thoughtbot/bourbon" class="underline">бурбон</a>. Для использующих последнюю стабильную версию рельсов 3.1 подключение достаточно просто. Для олдфагов со старыми рельсами нужно будет копировать необходимые файлы в рабочий проект.
</article>
<article>
<img alt="Sublimetext2" class="left" src="/v1/sublimetext2.png" />
Судя по сниппету <a href="https://gist.github.com/1325103" class="underline">Алексея Левжинского</a>, в котором сказано как подсветить рельсовый код в Sublime Text 2, он использует этот кроссплатформеный редактор для написания кода.
</article>
<article>
<a href="https://github.com/jpablobr/active_paypal_adaptive_payment/pull/4" class="underline">Александр Кичатов помог</a> библиотеке «active paypal adaptive payment», добавив возможность включать тестовый режим через конфигурацию. Эта библиотека предназначена для использования PayPal Adaptive Payments через ActiveMerchant.
</article>
</section>
<section class="announsment">
<h2>Объявления</h2>
<article>
В редакцию газеты <strong>Вечерний Анахорет™</strong> требуется джава-разработчик.
Обязанности: освещать новости проектов из мира Java и JVM в нашей компании. Умение писать на русском языке необходимо.
</article>
</section>
<section class="quotes">
<h2>Вовремя записаное</h2>
<article>
<blockquote>Есть вещи, которые забываешь с радостью.</blockquote>
<author><a href="http://petrovich.anahoret.com" class="underline">Сергей Петрович</a> о <abbr>C++</abbr></author>
</article>
</section>
</span>
</span>
<div class="clearfix"></div>
<span class="column bigcolumn">
<section class="interview">
<h2>Интервью с Дмитрием Кириенко</h2>
<p class="preamble">
<img alt="Dak" class="right" src="/v1/dak.png" />
Дмитрий является ведущим разработчиком компании. За его плечами многолетний опыт работы в джава и руби.
Работал в таких проектах, как Ringorang, Groupistan, Grublife и ActiveConversion. Сейчас трудится над британским
проектом TurbineHQ. Никогда не работал ни в Getsocio, ни в Трекере. Характер крайне дружелюбный. Женат.
</p>
<p><strong><em>Насколько нам извесно, ты являешься контрибьютором проекта Ruby on Rails. На твоем счету около десяти коммитов в рельсы. Какие советы ты можешь дать будущим контрибьюторам в большие оупенсорс проекты?</em></strong><p>
<p>Во-первых, читайте исходный код. Благо к этому нас поощряет сам open source, в котором документация довольно часто либо недостаточна, либо расходится с реальностью. По поводу и без повода заглядывайте в исходный код библиотек, с которыми вы работаете. Это очень полезно. Вы увидите, почему вещи работают так или иначе. То, что вы считали магией, обернётся простыми и понятными строчками кода. </p>
<p>Во-вторых, не бойтесь. Если посмотреть историю коммитов в Rails, можно увидеть, что больше половины работы выполняется людьми за пределами так называемой core team, а core team всего лишь принимает pull requests. Если вы встречаете очевидно неверное поведение библиотеки, и, заглянув в код, видите ошибку — делайте fork и исправляйте. Вклад Github в развитие open source трудно переоценить — никогда ещё участие в open source разработке не было столь лёгким.</p>
<p>Что до участия в разработке Rails, тут я советую прочитать <a href="http://guides.rubyonrails.org/contributing_to_ruby_on_rails.html" class="underline">раздел rails guides</a>, посвящённый этому вопросу. Это сэкономит вам часик-другой. В корне каждой части Rails (таких как ActiveRecord, ActiveSupport, и т.д.), лежит файлик RUNNING-UNIT-TESTS с инструкциями по запуску модульных тестов. Это сэкономит ещё полчасика. Обязательно пишите тесты на вносимые изменения — патч без тестов, скорее всего, не будет принят. Лучше вносить изменения в режиме «вначале тесты».</p>
<p>Если очень хочется поучаствовать в разработке Rails, но что сделать — не знаете, просмотрите список открытых issues, особенно тех, которым присвоен тот или иной milestone. Там всегда есть что-то простое и быстрое.
Ещё изучите <a href="http://github.github.com/github-flavored-markdown/" class="underline">Github markdown</a> — ваши pull requests будут лучше смотреться.</p>
<p>В общем, ничего военного. Просто загляните в код, улучшите его, отправьте pull request. Это просто.</p>
<p><strong><em>А как на счет своих оупенсорс решений? Многие разработчики в своих проектах, не найдя готового решения, пишут свою библиотеку. Ты являешься автором нескольких готовых решений среди которых гем <a href="https://github.com/dmitriy-kiriyenko/soprano" class="underline">soprano</a> или <a href="https://github.com/dmitriy-kiriyenko/abacus_count" class="underline">abacus_count</a>. Когда наступает тот самый момент, когда код из папки ’lib’ должен перекочевать на github?</em></strong></p>
<p>Не стоит называть меня «автором» soprano. Soprano — не более чем реинкарнация сборника рецептов Capistrano от Дениса Барушева, который назывался Capone и больше не поддерживается. Моего кода, по большому счёту, там и нет совсем. Я добавил «поддержку» mysql2, убрал рецепты, которые больше не нужны (такие как rake gems:install) и переделал инфраструктуру проекта с Jeweller на Bundler-style. Да, я планирую поддерживать этот сборник рецептов, но пока что я не его автор. Скорее, maintainer.</p>
<p>Что же до вопроса, отдельный gem и папка lib равнозначны. Если код достоин папки lib, значит, он достоин и того, чтобы стать библиотекой =). Критерий для обоих случаев я формулирую так: если вы можете описать, что делает код, не используя слов из предметной области проекта — это точно библиотека. Если нет — это возможно библиотека.</p>
<p>Однако, жизнь вносит свои коррективы, и, казалось бы, чисто инфраструктурные решения прозябают в многочисленных папках lib многочисленных Rails проектов. Только в моём текущем проекте их около 5. Почему так происходит? Помимо элементарной нехватки времени и лени, есть два больших препятствия: тесты и проблема «неуловимого Джо».</p>
<p>Да, чтобы выложить библиотеку на Github, она должна включать в себя автоматические тесты. Если этого не сделать, развитие библиотеки будет парализовано — у потенциальных авторов fork’ов просто не будет способа узнать, не сломали ли они чего-то. Очень часто у нас хорошо протестировано собственно приложение, затем, в ходе рефакторинга из него выделяются инфраструктурые части, но вовсе не в режиме «вначале тесты». Потом тесты на саму библиотеку тоже не пишутся. Это приводит к тому, что код обречён пребывать в папке lib долго-долго-долго. Что тут сказать? Помимо очевидного — выделяя инфрастуктурный код, переписывайте его заново в TDD — могу ещё добавить: выкладывайте как есть. Когда появится первый fork, его автор сам попросит у вас тесты — будет хороший стимул.</p>
<p>Вторая же беда — проблема «неуловимого Джо» — гораздо серьёзнее. Бывает такое, что ваше инфраструктурное решение подобно неуловимому Джо — оно никому даром не нужно. Приведу пример.</p>
<p>В ходе работы над моим текущим коммерческим проектом возникла необходимость сделать боковую панель с набором разнообразных фильтров, управляющих коллекцией записей, отображаемых на странице. Примером может служить список фильмов <a href="http://kinobaza.tv" class="underline">kinobaza.tv</a>. Пройдя несколько реинкарнаций родилось довольно миленькое решение с ограниченно приятным интерфейсом и разумным набором характеристик (фич). Когда же я «созрел» для того, чтобы переписать его в TDD, оформив в виде библиотеки, я уже пришёл к мнению, что такие задачи нужно решать совершенно по другому. Если заботит проиводительность, нужно прибегнуть к чему-то наподобие <a href="https://github.com/sunspot/sunspot" class="underline">Sunspot</a>/Solr или <a href="http://www.elasticsearch.org/" class="underline">Elastic Search</a> (особенно привлекательно выглядит Elastic — обязательно его пощупаю в ближайшем будущем), а если хочется чего-то инфраструктурно простого — что бывает гораздо чаще — я категорически рекомендую использовать <a href="https://github.com/ernie/ransack" class="underline">Ransack</a> (ранее известный как MetaSearch) от замечательного open source разработчика <a href="https://github.com/ernie" class="underline">Ernie</a>, автора ещё как минимум двух замечательных must-use библиотек для ActiveRecord. Если же Ransack не решает какой-то специфической проблемы — лучше вложиться в Ransack pull request’ом и/или временно использовать свой fork.</p>
<p>Наверное, с проблемой «неуловимого Джо» стоит поступать так же, как и с тестами — игнорировать и всё равно выложить. Разрабатывают же <a href="https://github.com/thoughtbot/clearance" class="underline">Clearance</a> и <a href="https://github.com/NoamB/sorcery" class="underline">Sorcery</a>, при том, что стандартом де-факто является Devise.</p>
<p>В качестве хорошего пособия по написанию библиотек для Rails приложений я настоятельно рекомендую книгу <a href="http://pragprog.com/book/jvrails/crafting-rails-applications" class="underline">Crafting Rails Applications</a> всем известного Хосе Валима (кстати, <a href="https://anahoret.com/wiki/Anahoret/AnahoretEbooks" class="underline">она есть у нас на вики</a>).</p>
<p>Резюмируя, скажу, что нужно больше библиотек, хороших и разных. Во-первых, вам же будет легче — в следующий проект ваши решения будете не копировать, а просто повторно использовать. Во-вторых, если кто-то ещё будет этим пользоваться — он быстрее вас может найти ошибку и, тем самым, позволит вашему решению стать лучше. В-третьих, в масштабах организации размера Анахорета это вообще основной способ появления новых open-source решений — пишем для себя, пользуемся, обкатываем, получаем новую популярную библиотеку.</p>
</section>
</span>
<div class="clearfix"></div>
<span class="columns">
<span class="column bigcolumn">
<article>
<h2>Оставляйте отзывы.</h2>
<p>Лучшая благодарность — это ваши коментарии и замечания.</p>
<p>Даже <a href="/v1/comments.html">специальная страничка</a> для комментирования есть.</p>
</article>
</span>
</span>
<div class="clearfix"></div>
</div>
</section>
<footer>
<div class="wrapper">
<div>© <strong>Вечерний Анахорет™</strong></div>
<div><small>Все права защищены кольчугой из чешуи дракона +3</small></div>
<div><small>Предложения и замечания <a href="mailto:vecherka@cssum.net">шлите редактору</a>.</small></div>
</div>
</footer>
</div>
<!-- Yandex.Metrika counter -->
<div style="display:none;"><script type="text/javascript">
(function(w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter10762477 = new Ya.Metrika({id:10762477, enableAll: true});
}
catch(e) { }
});
})(window, "yandex_metrika_callbacks");
</script></div>
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript" defer="defer"></script>
<noscript><div><img src="//mc.yandex.ru/watch/10762477" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</body>
</html>