Как стать автором
Обновить
0
0
Дмитрий @dkoprov

Пользователь

Отправить сообщение

Структура и интерпретация компьютерных программ

Время на прочтение1 мин
Количество просмотров12K
image
Перевод второй лекции Джеральда Сассмана
«Процедуры и процессы: подстановочная модель.»

Эти лекции были прочитаны 25 лет назад сотрудникам HP, но на самом деле это тот легендарный вводный курс 6.001, который читался в MIT в 1980 году. С тех пор эти лекции sine qua none во всем мире программирования. Хотелось бы чтобы каждый программист посмотрел этот курс, ничего не учит абстрактному мышлению лучше, чем SICP.
Приятного просмотра на ночь глядя.
Читать дальше →
Всего голосов 75: ↑75 и ↓0+75
Комментарии37

Неологизмы, часть вторая

Время на прочтение1 мин
Количество просмотров732
Продолжение предыдущего топика. Новые слова, которые используются сейчас с англоязычной блогосфере, пускай не так тесно связаные с информационными технологиями, но от этого не менее интересные. Осторожно, много букв!
    • Рефрижераторное право (refrigerator rights) — синоним очень близких отношений; в буквальном смысле право залезть в холодильник без спроса

    • Синдром водителя автобуса (driving the bus) — человек, который решил в выходные поехать за покупкам и обнаружил себя на полпути к работе

Читать дальше →
Всего голосов 51: ↑44 и ↓7+37
Комментарии64

Гражданская социальная сеть “Новая Россия”

Время на прочтение4 мин
Количество просмотров854


Добрый день. Хочу представить вам наш проект, появившийся в интернете в начале декабря — новый общественно-социальный сервис.

До недавнего времени в нашей стране событиями политической сферы интересовалось достаточно небольшое количество людей. Помимо бизнесменов и журналистов в основном лишь некоторые активисты. Существовало мнение о негласной договорённости между обществом и государством, которое было выражено в идее “доходы в обмен на власть”. Но в связи с последними событиями на выборах и многочисленными митингами по всей России, этот тезис оказался несостоятелен. Многие стали задумываться о том, что будет дальше и как им с этим быть.

Отвечая требованиям времени, возросла активность блогеров и гражданских лидеров – они стали искать варианты для донесения своей позиции через интернет. Но оказалось, что сделать это достаточно сложно, так как помимо идеологической разобщённости между собой, их потенциальная аудитория оказалась рассредоточена на различных ресурсах. Решением этой проблемы стало появление площадки для общения, гражданской сети “Новая Россия” — независимого социального медиа и блог-платформы для общественных дискуссий.
Читать дальше →
Всего голосов 41: ↑18 и ↓23-5
Комментарии41

Связка rvm + Rails + Nginx + Unicorn или деплоим рельсы правильно

Время на прочтение9 мин
Количество просмотров55K
Целью данной заметки я ставлю в подробностях описать организацию сервера для Rails приложений в самой популярной на данный момент связке: rvm + Rails + Nginx + Unicorn. К написанию статьи побудило отсутствие полной пошаговой документации по этой связке, понятной не только ядреным профессионалам этой области. Далее я попытаюсь подробно, шаг за шагом, описать идеологически правильный процесс организации сервера для обслуживания нескольких Rails приложений (на примере одного) — если у вас есть абсолютная уверенность в том, что на подопытной машине никогда не будет работать более одного приложения — настройка может быть существенно короче и проще. Хочу предупредить, что тонкости, касающиеся работы приложения под высокой нагрузкой в статье не описываются, т.к. цель ставилась иная — заставить работать приложение в связке и сократить количество конфликтов с другими приложениями до минимума.
Читать дальше →
Всего голосов 68: ↑63 и ↓5+58
Комментарии135

GitHub Reflog v1.4.12

Время на прочтение2 мин
Количество просмотров1.1K
Добро пожаловать в четвертое издание GitHub Reflog — еженедельную хронику замечательных репозиториев на GitHub и активности сообщества. Предыдущие изданиях можно получить в архиве Reflog.
Читать дальше →
Всего голосов 69: ↑64 и ↓5+59
Комментарии8

API Яндекс.Денег

Время на прочтение2 мин
Количество просмотров17K
imageПривет, Хабр.

Сегодня Яндекс.Деньги запускают новый сервис, который, как нам кажется, будет особенно интересен хабраюзерам.
Сегодня мы открываем API платежной системы.

API Яндекс.Денег позволяет использовать платежные функции в вашем приложении. Причем не только пассивные — просмотр баланса счета или истории платежей, но и активные — проведение платежей в магазины. Фактически, вы можете написать свой интерфейс к Яндекс.Деньгам (если вдруг в нашем вам чего-то не хватает).

Возможности API пока не так велики, как нам бы хотелось, но ведь это только начало. Надеемся, что хабрасообщество примет деятельное участие в развитии продукта. Мы с удовольствием выслушаем все ваши пожелания, фичреквесты и критику — и будем стараться активно развивать API.

Презентация новой технологии на базе API с первыми примерами реализации будет показана 22 апреля во время конференции «РИФ+КИБ 2011» в шатре Яндекс.Денег (в правом торце главного корпуса).

Подробности под катом
Всего голосов 95: ↑91 и ↓4+87
Комментарии41

Пишем интерпретатор трехадресного кода

Время на прочтение6 мин
Количество просмотров7.8K

Введение



Добрый день.
Продолжаю писать о около-компиляторных темах. В этот раз затрону вопрос о проектировании и создании интерпретатора, который работает с синтаксическими деревьями.
Рекомендую ознакомиться с предыдущей статьёй — «Пишем LR(0)-анализатор. Простыми словами о сложном», потому что в интерпретаторе я не строю синтаксический анализатор с нуля, а использую наработки, описанные в той статье. Ах да, еще один немаловажный момент — писать будем на JavaScript. Я не поклонник этого языка, но считаю что это наиболее удобный для общественности способ посмотреть результат. Не каждый рискнёт качать неизвестно что, да и это всё же сложнее чем просто открыть страничку. Нетипичность инструмента компенсируется «учебностью» примера. Скорость работы не важна (100-150 строк лимит, мне кажется больше никто не захочет набирать того чтобы поиграться с интерпретатором), а понятность кода у JS достаточно велика.

Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии8

Пишем LR(0)-анализатор. Простыми словами о сложном

Время на прочтение10 мин
Количество просмотров27K

Введение



Добрый день.
Не нашел простого и внятного описания данного алгоритма на русском языке. Решил восполнить сей пробел. Прежде всего что это такое? LR(0)-анализатор в первую очередь это синтаксический анализатор. Цель синтаксического анализатора обработать входной поток лексем(базовые элементы языка, которые производит лексический анализатор на основе входного потока символов, примеры лексем — число, запятая, символ) и сопоставить его с описанием языка заданного в определенном формате. Сопоставление заключается в построении определенной структуры данных, чаще всего — дерева. Дальше эта структура пойдет на следующий этап — семантический анализ, где уже компилятор пытается понять смысл, заключенный в дереве.

Существует 2 класса синтаксических анализаторов — восходящие анализаторы и нисходящие. Первые строят дерево начиная с листьев, которые являются входными лексемами, вторые соответственно наоборот начинают с корня дерева. Собственно LR и значит то, что анализатор будет читать поток слева направо (L — 'Left') и строить дерево снизу вверх (пусть не смущает буква R, которая значит Right, объяснения даны чуть ниже). Индекс 0 обозначает то что мы не предпросматриваем следующие лексемы, а работаем только с текущей. Какие же плюсы даёт нам выбор этого типа анализаторов?
  • Он быстр.
  • Покрывает множество языков. То есть если вы придумали язык и описали его, то с большой долей вероятности LR-анализатор его сможет обработать.
  • Синтаксические ошибки обнаруживаются так быстро как это возможно. Сразу же как встречается символ, который не соответствует предыдущему входному потоку, мы можем вывести ошибку об этом.

Есть и недостатки:
  • Относительная сложность построения.
  • Можно вогнать анализатор в ступор неоднозначностью описания языка.


Читать дальше →
Всего голосов 75: ↑71 и ↓4+67
Комментарии18

Автоматизация работы со статическими маршрутами на сети FreeBSD-серверов

Время на прочтение5 мин
Количество просмотров3.4K

С чего всё началось


В провайдере, где я работаю, так исторически сложилось, что клиентские сети затерминированы на FreeBSD-серверах со статической маршрутизацией в соединяющих эти сервера коммутационных полях. Соответственно, при добавлении новой сети маршруты для неё надо прописывать на всех серверах по отдельности. Добавив к этому человеческий фактор, может оказаться, что некоторые сервера при добавлении или изменении маршрута будут забыты и пропущены. В связи с этим логичным становится как-то автоматизировать этот процесс.

Реализация


Исходим из того, что у нас есть некоторое количество серверов под управлением FreeBSD, и при добавлении нового маршрута (например, на одном из этих серверов была затерминирована новая клиентская сеть) он должен быть прописан на всех этих серверах.
Для начала создадим текстовый файл, каждая строчка которого являет собой адрес одного сервера, и для каждого из этих серверов настроим авторизацию по ключу (как это сделать, описано, например, здесь).
Пример файла-списка серверов:
192.168.0.1
192.168.1.1
mainserver.yourdomain.ru


Дальнейшую работу будет делать связка из двух shell-скриптов:
Читать дальше →
Всего голосов 33: ↑24 и ↓9+15
Комментарии28

Удаленная отладка Node.js приложений и кода на WebKit браузерах

Время на прочтение2 мин
Количество просмотров21K
В статье пойдет речь о Must Have тулзе для удаленной отладки Node.js приложений либо кода на WebKit браузерах node-inspector.

Для отладки кода в браузере, впринципе удаленная отладка и не нужна, не считая мобильных устройств, где она фактически не возможна потому что крайне не удобна. Совсем другое дело с серверным JavaScript. Node.js имеет несколько отладчиков, восновном продвигают ndb Node Debugger — консольная утилита для дебага Node.js приложений. Подходит только для фанатов консоли либо для мазохистов. Работать не удобно, отлаживать долго, по сравнению с отладкой кода в том же FireBug.

Что же умеет node-inspector:
1. Удаленная отладка
2. Отладка в графическом интерфейсе WebKit-debugger (На клиент ничего не нужно ставить — у вас все уже есть)
3. Редактирование runtime-кода!
4. Использует WebSockets, и никакого polling'а!
5. Удаленное профилирование блоков кода c использованием v8-profiler
Читать дальше →
Всего голосов 25: ↑25 и ↓0+25
Комментарии12

Масштабирование нагрузки web-приложений

Время на прочтение6 мин
Количество просмотров60K
С ростом популярности web-приложения его поддержка неизбежно начинает требовать всё больших и больших ресурсов. Первое время с нагрузкой можно (и, несомненно, нужно) бороться путём оптимизации алгоритмов и/или архитектуры самого приложения. Однако, что делать, если всё, что можно было оптимизировать, уже оптимизировано, а приложение всё равно не справляется с нагрузкой?
Читать дальше →
Всего голосов 109: ↑98 и ↓11+87
Комментарии38

Git Wizardry

Время на прочтение17 мин
Количество просмотров450K
1 Введение


В своей прошлой заметке я постарался осветить в общих чертах стиль работы с
распределенной системой контроля версий git и указать на отличия по сравнению с
классическими централизованными СКВ. Целью было прежде всего обобщение опыта
работы с системой без упоминания тонкостей синтаксиса отдельных команд.

Данный же топик задумывался как непосредственное введение в работу с git, нечто
среднее между tutorial и обобщенной справкой, до которого все же рекомендуется
прочитать упомянутое выше введение. Сознательно избегаются технические
подробности работы git, употребляются только общие для СКВ термины и
ограничивается список упоминаемых команд.

Читать дальше →
Всего голосов 89: ↑66 и ↓23+43
Комментарии76

Rails: Хватит отмазываться, начинаем BDD-ить!

Время на прочтение9 мин
Количество просмотров32K

Кто здесь?


Когда речь заходит о тестировании существующего продукта, а тем более о разработке чего-то нового на основе изначального написания сценариев использования, различных спецификаций и тестов, то частенько можно слышать подобные вещи:

11:24:21 PM Michael: ну хз, надо пробовать
11:24:24 PM Michael: наверное так лучше
11:24:27 PM Michael: даже я думаю наверняка
11:24:36 PM Michael: но пока меня че-то останавливает
11:24:38 PM Michael: лень наверное :)

Знакомо? «Не хочется разбираться? Нет времени?» Тогда читаем дальше. В статье расскажу, как настроить свое любимое рельсовое окружении на разработку с подходом BDD и начать новую жизнь (опционально).
Поехали!
Всего голосов 88: ↑77 и ↓11+66
Комментарии38

apache+nginx+gzip_static+yuicompressor

Время на прочтение6 мин
Количество просмотров15K
В этой статье я опишу принципиальные различия Apache и Nginx, архитектуру фронтэнд-бэкэнд, установку Apache в качестве бэкэнда и Nginx в качестве фронтэнда. А также опишу технологию, позволяющую ускорить работу веб-сервера: gzip_static+yuicompressor.
Читать дальше →
Всего голосов 117: ↑109 и ↓8+101
Комментарии71

Тюнинг nginx

Время на прочтение8 мин
Количество просмотров96K
Статья написана по материалам моего доклада на CodeCamp 2009.

Для многих из нас настает тот долгожданный день, когда аудитория сайта начинает стремительно расти. Каждое утро мы, затая дыхание, смотрим на графики google analitycs и расплываемся в улыбке, когда взят рубеж в очередную тысячу посетителей в день. Как правило, рост посещаемости не совпадает с ростом технической базы и сайт начинает тормозить. Тут в игру вступает сисадмин...

У любого проекта всегда есть что оптимизировать: можно почитать советы по оптимизации на webo.in, установить eaccelerator, memcache, проиндексировать поисковые поля в базе данных. Я предполагаю, что все это уже проделано, а сайт по прежнему тормозит.

Пришло время оптимизировать nginx...

Читать дальше →
Всего голосов 102: ↑100 и ↓2+98
Комментарии69

node.js сокращатель ссылок

Время на прочтение6 мин
Количество просмотров8.1K

Привет, Хабр! В этой статье я пошагово рассмотрю создание простого веб-приложения — сокращателя ссылок на node.js, используя mysql-libmysqlclient, MooTools на сервере и jQuery на клиенте. Статья предполагает, что читатель уже прошёл упражнение «Hello world» и разобрался в самых основах node.js.
Читать дальше →
Всего голосов 56: ↑52 и ↓4+48
Комментарии60

Understanding node.js

Время на прочтение4 мин
Количество просмотров10K
Node.js обычно вызывал у людей, которым я о нём рассказывал, две различные реакции. В основном они воспринимали его «как есть», однако многие были сбиты с толку.

Если вы относитесь ко второй группе, я попробую объяснить, что же такое Node.js:
  • Это инструмент командной строки. Вы скачиваете архив, компилируете и устанавливаете его.
  • Это позволит вам выполнять программы на JavaScript, набрав 'node my_app.js' в терминале.
  • JavaScript выполняется движком V8 (тем самым, благодаря которому так быстро работает Google Chrome).
  • Node.js предоставляет API для доступа к сети и файловой системе из JavaScript.
Вам хочется чего-то большего? Тогда прошу заглянуть под кат и продолжить чтение
Всего голосов 95: ↑91 и ↓4+87
Комментарии48

VIM как Rails IDE в стиле TexMate благодаря набору скриптов от Akita

Время на прочтение4 мин
Количество просмотров23K
Это мой первый пост на Хабре, прошу не судить строго :)

В далекие времена, когда я ещё писал на c\c++, я пользовался замечательным редактором VIM, знал минимальный набор vim-фишек, и был в целом доволен его работой. Несколько позже я стал изучать Rails и программировать на Ruby. Я достаточно быстро понял, что базовой поставкой VIM не обойтись, попробовал пару найденных в интернете руководств по доведению VIM до уровня полноценной IDE, наткнулся на подводные камни, и быстро сдался. В тот момент мне хотелось изучать в первую очередь именно Rails, а не VIM.
Немного помытарился с разными другими редакторами и IDE типа Aptana, Geany, Eclipse и т.п. пока не наткнулся на полностью, на тот момент, удовлетворящий меня Netbeans. О Netbeans можно писать, да и написано, немало хорошего. Как IDE для разработки на Ruby Netbeans просто прекрасен. Я и сейчас использую его в случае, если работаю в Windows. Но однажды я оказался на длительное время не за своим, а за чужим ноутбуком, на котором уже стоял VIM, в месте, где интернет-трафик был сильно ограничен. А Таксовик требовал срочной доработки. Выкачивать ~60мб Netbeans и ещё n-ное количество мб на плагины было не этично, я и снова начал освоение VIM. И к моей радости довольно-таки быстро наткнулся на набор скриптов от бразильца Akita on Rails и скринкаст в придачу. Он, как я понял, собрал кучу полезных плагинов вместе и чуть-чуть дописал конфиг. Всё, о чём будет говориться ниже верно не только для Ruby, но и для других языков типа C, PHP и прочее, готовые наборы сниппетов (о них далее) в комплекте есть и для них.

Основные фишки этого набора скриптов


  1. FuzzyFinderTexMate — очень удобный поиск файлов в проекте по ctrl+f. К примеру, чтобы найти файл config\routes.rb надо набрать rorb. Или даже и того меньше :)
  2. Набор сниппетов из TexMate и некоторое количество своих (в смысле, NERDSnippets). Очень удобно, набираешь vf + TAB — получаешь validates_format_of :<+attribute+>, :with => /<+regex+>/<+, :on => :<+create+>, :message => "<+is invalid+>"+>, где по TAB скачешь между параметрами, заключёнными в <+...+>. Сниппеты есть для всего, чего угодно, их полный список можно посмотреть в папке snippets в директории с файлами кофигурации VIM.
  3. Дерево проекта, реализованное с помощью NERDTree. Доступно по \+p (обратный слеш и символ p). Переключение с дерева проекта в окно редактирования кода и обратно осуществляется по ctrl+w и стрелка (куда будет стрелка, туда курсор и перескочет), в самом же дереве o — открыть\закрыть папку\файл, R (shift+r) — обновить дерево и по вопросу(?) довольно внятная справка по горячим клавишам.
  4. Подсветка кода (rb, html, rjs, js, erb и т.п.)
  5. Возможности из rails.vim типа перехода по gf на файл модели, если курсор стоит на вызове, например, конструктора. Всяческие :Rake, :Rgenerate и т.п.
  6. Ну и все возможности и навороты VIM, за которые его так любят :)


А вот и скринкаст от автора на эту тему (рекомендую к просмотру):


Перестало работать. Ссылка на другом видеохостинге: blip.tv/file/3765175

Надеюсь, вы уже потираете руки, потому что vim — это очень быстрый, удобный, расширяемый и очень не требовательный к ресурсам компьютера редактор.
Как же всего этого добиться?
Всего голосов 32: ↑25 и ↓7+18
Комментарии36

Целебное зелье для IE5+ или IE7.js

Время на прочтение2 мин
Количество просмотров7.1K
Разбирая код очередного проекта внутри тега head наткнулся на интересный код:

<!--[if lt IE 9]>
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta3)/IE9.js"></script>
<![endif]-->

Только одно слово «IE9» меня пустило в замешательство. Первое что пришло мне в голову — это то, что при помощи этого .js кода браузеры под печальным клеймом Internet Explorer можно заставить работать используя свойства многообещающего IE9. Больше всего я ожидал что будут доступны свойства CSS3.0, но не тут-то было!
Читать дальше →
Всего голосов 159: ↑125 и ↓34+91
Комментарии73

Асинхронность: почему это никак не сделают правильно?

Время на прочтение7 мин
Количество просмотров6.8K
Асинхронные программы чертовски неудобно писать. Настолько неудобно, что даже в node.js, заявленном как «у нас все правильное-асинхронное», понадобавляли таки синхронных аналогов асинхронных функций. Что уж говорить про питоновский синтаксис, не дающий объявить лямбду со сколь-либо сложным кодом внутри…

Забавно, что красивое решение проблемы не требует ничего экстраординарного, но почему-то до сих пор не реализовано.
Читать дальше →
Всего голосов 86: ↑81 и ↓5+76
Комментарии78
1

Информация

В рейтинге
Не участвует
Откуда
Воронеж, Воронежская обл., Россия
Работает в
Дата рождения
Зарегистрирован
Активность