Search
Write a publication
Pull to refresh
32
0
Игнат Толчанов @Leeb

Backend developer

Send message

Компиляция. 1: лексер

Reading time7 min
Views95K
Меня всегда завораживало таинство рождения программой программы. К сожалению, российские вузы уделяют мало внимания сей интереснейшей теме. Рассчитываю написать серию постов, в которых поэтапно создадим маленький работоспособный компилятор.

Первые посты серии уже подготовлены, и бета-тестировались в одном маленьком и наглухо закрытом сообществе. Тем не менее, я буду продолжать их править с учётом пожеланий почтенной хабрапублики.

Далее в посте:

  1. С какой стати писать компиляторы?
  2. Общий план
  3. Анализ текста
  4. Практический пример
  5. Как это работает?
Читать дальше →

Код, который невозможно поддерживать (часть 2)

Reading time7 min
Views3.5K
Продолжение этого топика — вторая и третья главы эссе «Unmaintainable Code». Несколько перекликается с первой, но описанные методы уже не так очевидны (а некоторые отличаются поистине дьявольской изобретательностью и не меньшей злокозненностью). Ах да, с заявленного в прологе языка Java автор незаметно переключился на C/C++.

Камуфляж



Искусство камуфляжа — сокрытия вещей или маскировки их под другие — составляет значительную долю искусства написания неподдерживаемого кода. Большинство приемов этого раздела основаны на том, что компилятор воспринимает и обрабатывает код иначе, чем текстовый редактор или человек. Ниже приведены избранные приемы камуфляжа:

Читать дальше →

OCaml и PHP — эзотерика для вашего удобства

Reading time9 min
Views2.8K
NB: читая этот топик, желательно не есть — можно поперхнуться от неожиданности.
NB: менее ценные куски кода пришлось вынести на пастебин, из-за того что хабр обрезает пост. Следите за ссылками в тексте.

Многие причисляют OCaml к маргинальным и даже эзотерическим языкам. Возможно они и правы, хотя множество людей с ними не согласны. Для меня знакомство с ним началось с полгода назад, когда мне в очередной раз захотелось научиться чему-то новому и я подумал, что хоть один функциональный язык надо освоить. Из множества языков я выбрал Objective Caml. Язык покорил меня человеческим синтаксисом и идеей: есть все функциональные радости жизни, но если хочешь императивный стиль и ООП — бери, их есть у меня! Оказалось, что разработчики прекрасно понимали, что для разных задач нужны разные средства. Три дня чтения мануала для C++ и Perl-программистов и я уже вполне мог читать код и писать хеллоуворлды. На этом моё знакомство с языком закончилось, потому что изучать язык не на реальной задаче — дело глупое.
А теперь о более реальной разработке

Код, который невозможно поддерживать

Reading time7 min
Views11K
Вольный перевод с сокращениями первой части эссе «Unmaintainable Code». Именование переменных — довольно банальная тема (хоть и забавно изложенная), но без этой части эссе было бы неполным.

Пролог



Это самое популярное из моих эссе. Удивительно, сколько людей не понимают, что это насмешка.

Это эссе написано ради создания рабочих мест для программистов на Java. В нем я собрал советы мастеров о том, как писать код, который так сложно поддерживать, что люди, пришедшие после вас, потратят годы на внесение даже минимальных изменений. Более того, скрупулезное следование этим советам обеспечит вам занятость до конца жизни, так как ни у кого другого нет шансов на успешную поддержку кода. Впрочем, если вы следовали всем правилам, шансов на это нет даже у вас.

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

Читать дальше →

Подсказки в поисковой строке в Opera для Google и других

Reading time2 min
Views17K
Как вы уже возможно знаете, Opera в версии 10.60 начала поддерживать поисковые подсказки. Правда, пока сходу они показываются только для Bing и Wikipedia. Однако довольно легко можно подружить Оперу с Гуглом (и некоторыми другими).



решение

Открытое тестирование XMPP

Reading time2 min
Views72K
Все попытки brainfucker отсрочить запуск открытого тестирования ещё на неделю провалились. Поэтому предлагаем вниманию сообщества альфа-версию поддержки протокола XMPP. Надеемся успеть собрать отзывы и обнаружить ошибки, чтобы подготовиться к официальному релизу.



    QIP     Miranda     Pidgin     Adium     Другие

Читать дальше →

NerdDinner. Шаг 1: Новый проект

Reading time3 min
Views3.5K
Это первый шаг бесплатного руководства «NerdDinner», которое показывает, как построить маленькое, но полноценное веб-приложение, используя ASP.NET MVC.

Начнем наше приложение NerdDinner(ужин для ботанов) с выбора пункта меню File>New Project.

Мы увидим окно «New Project». Для создания ASP.NET MVC приложения, мы выберем пункт «Web» в левой части окна, а далее шаблон проекта «ASP.NET MVC Web Application» в правой части.

image
Читать дальше →

Что интересного нам расскажет EXPLAIN EXTENDED?

Reading time6 min
Views13K
Большинство разработчиков на MySQL знакомы с командой EXPLAIN, однако значительно меньше людей знают о команде EXPLAIN EXTENDED, появившуюся ещё в MySQL 4.1, и ещё меньше умеют ею пользоваться.

EXPLAIN EXTENDED умеет показывать, что же конкретно делает с Вашим запросом оптимизатор MySQL. Для разработчика может быть совсем не очевидно, насколько сильно может отличаться написанный им запрос от того, который в действительности будет выполнен сервером. Этот процесс называется механизмом перезаписи запросов (query-rewrite), и он является частью любого хорошего SQL-оптимизатора. Команда EXPLAIN EXTENDED добавляет дополнительные предупреждения (warnings) к выводу команды EXPLAIN, в том числе и переписанный SQL-запрос.
Читать дальше →

Осваиваем простейший микроконтроллер PIC. Часть 2

Reading time12 min
Views146K
В первой части мы разобрали как можно прошить выбранный МК, как его правильно сконфигурировать, а так же научились работать с цифровыми портами.
Теперь пришло время рассмотреть остальную периферию микроконтроллера.
Читать дальше →

Python Tips, Tricks, and Hacks (часть 3)

Reading time6 min
Views49K
В этой части статьи рассматриваются уловки для выбора одного из двух значений на основе логического условия, передача и получение произвольного числа аргументов функций, а также распространенный источник ошибок — тот факт, что дефолтные значения аргументов функции вычисляются только один раз.
Читать дальше →

Python Tips, Tricks, and Hacks (часть 2)

Reading time6 min
Views134K
Содержание

Списки. Свёртка списка (reduce). Прохождение по списку (range, xrange и enumerate). Проверка всех элементов списка на выполнение условия (all и any). Группировка элементов нескольких списков (zip). Еще несколько операторов для работы со списками. Продвинутые логические операции с типом set.
Словари. Создание словаря с помощью именованных аргументов. Преобразование словаря в список и обратно. «Dictionary Comprehensions».
Читать дальше →

Python: советы, уловки, хаки (часть 1)

Reading time8 min
Views265K
Предлагаю читателям «Хабрахабра» перевод статьи «Python Tips, Tricks, and Hacks». Статья будет полезна на начальном и среднем этапах изучения Python.

Хотите писать более лаконичный и читаемый код? Вы хотите уместить как можно больше смысла в одно выражение? Считаете, что прочитать о нескольких уловках лучше, чем провести остаток жизни за чтением документации? Вы обратились по адресу. Мы начнем с маленьких уловок, которые вы уже могли встретить, если немного работали с Python. Но я обещаю, что ближе к концу статьи вас ожидает больше безумных вещей.

Содержание

1. Маленькие уловки. Четыре типа кавычек. Правдивость различных объектов. Проверка на вхождение подстроки. Красивый вывод списка. Целочисленное деление и деление с плавающей точкой. Лямбда-функции.
2. Списки. Генераторы списков и выражения-генераторы.
Читать дальше →

Подключение поворотного энкодера к компьютеру через USB

Reading time6 min
Views53K
Давно хотел приспособить к ноуту регулятор громкости, сделанный из энкодера. Подключать этот регулятор нужно будет к USB, чтобы все было «по-взрослому» (да и по-другому никак внешнее устройство к ноуту не подключишь). Крутим энкодер влево — громкость должна уменьшаться, вправо — должна увеличиваться. Жмем вниз ручку энкодера — запускаем какую-нибудь полезную программу, или переключаемся на регулирование тембра.
Читать дальше →

H#, Создаём свой язык программирования

Reading time20 min
Views38K
image
Доброго времени суток.
В этой статье я хочу сделать обзор одного из главных нововведений в Visual Studio 2010, а именно — функционального языка программирования F#.

Рассматривать синтаксис и потенциал F# мы будем на примере создания своего собственного интерпретатора для придуманного нами языка программирования (Ведь рассказвать о чем-то всегда интереснее на примерах).
Читать дальше →

Осваиваем простейший микроконтроллер PIC. Часть 1

Reading time7 min
Views395K
Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A.
Читать дальше →

Программирование PIC16F876A. Собираем схему с плавно мигающим светодиодом

Reading time5 min
Views49K
Эта статья направлена на новичков в программировании микроконтроллеров семейства PIC16 от Microchip. В нашем случае, я выбрал немного превосходящий микроконтроллер для таких задач, а именно — PIC16F876A. Программирование микроконтроллера будем производить в MPLAB IDE.

Цель работы: собрать схему, которая будет мигать светодиодом, внимание, с применением ШИМ.

И так, цель задачи обозначили. Теперь перейдем к реализации наших планов.
Читать дальше →

Слой контроллера веб-приложения на основе архитектуры REST

Reading time11 min
Views9.1K
В этой статье хотелось бы поделиться опытом разработки слоя контроллера в нашем веб-фреймворке. Что мы хотим от этого слоя:
  • абстракция HTTP-запроса и отклика, компенсирование неудобств встроенной реализации;
  • возможность компоновки обработчиков запросов из отдельных модулей (middleware);
  • самое главное: диспетчеризация URL, простая структура набора правил диспетчеризации;
  • REST как наиболее универсальная архитектура.

Читать дальше →

Брокеры событий, часть 1

Reading time7 min
Views7.7K


Вообще в сложных, динамических системах очень сложно угнаться за меняющейся организацией компонентов, и если мы еще кое-как (это в 21-м то веке!) разурлили проблему создания компонентов с помощью специализированных контейнеров, то взаимодействие из между собой нам все еще полностью не подвластно. Например, реагирование на события в .Net (да и в других языках наверное) сделано на каком-то уж очень несерьезном уровне. И естественным образом в этой задаче появляются всякие инфраструктурные решения, о которых мы и поговорим.

Если интересно...

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity