Книга Уоррена «Алгоритмические трюки для программистов»

Книга Уоррена Алгоритмические трюки для программистов algПрочитал недавно книгу Уоррена «Алгоритмические трюки для программистов» (в оригинале она называется «Hacker’s Delight»), любопытная оказалась книжка, хотя алгоритмы, рассмотренные в ней, довольно специфические.

Эта книга отличается от других изданий про алгоритмы тем, что в ней не рассматриваются такие глобальные вопросы как сортировка, оптимизация функций, структуры данных и тому подобные. В ней описываются большей частью алгоритмы, связанные с двоичной логикой и представлением чисел (в основном целых) в компьютере. Основной упор сделан на алгоритмы оптимизации небольших операций, таких как целочисленное деление, извлечение корня или взятие логарифма от целых чисел.

Многие алгоритмы явно предназначены для того, чтобы их реализовали на ассемблере, причем иногда для процессоров, более редких, чем x86 (например, часто упоминаются процессоры IBM, а иногда опоминаются и древние компьютеры еще 60-ых годов прошлого века). Автор пишет, что многие примеры из книги могут пригодиться тем, кто создает компиляторы. Для примера приведу описание некоторых задач, разбираемых автором: как обнулить крайний справа единичный бит (01011000 -> 01010000), округление к кратному степени двойки, подсчет единичных битов в слове, поиск строки битов и тому подобные. Почти для каждого алгоритма автор пытается оценить количество необходимых тактов процессора, иногда с учетом распараллеливания.

Когда я листал эту книгу в магазине, в ней меня заинтересовала глава, посвященная округлению чисел к степени двойки без использования циклов. При реализации некоторых алгоритмов используются команды ассемблера, для которых нет аналогов в языках высокого уровня (если только в виде функций), например, команда подсчета ведущих нулевых битов, хотя в виде функции на языке C эта команда тоже реализована в одной из глав (опять же без использования циклов).

Ближе к концу книги есть глава, посвященная системам счисления с необычными основаниями, такие как -2, -1+i, -1-i. Такие системы счисления никто в здравом уме применять не будет, но почитать про них все-равно интересно.

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

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

Книгу можно рассматривать как небольшой сборник рецептов про битовые операции. Книга издавалась несколько раз, последнее издание 2007 года.

В электронном виде найти ее можно без проблем.

Про книгу «Django. Разработка веб-приложений на Python»

Про книгу Django. Разработка веб приложений на Python django Помните, недавно я писал о том, что выходит книга про веб-программирование на Python и Django? Так вот, я ее дочитал, оказалась очень хорошей книгой, очень она мне понравилась.

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

Особенно понравилась манера изложения. Авторы в каждой главе книги умудряются не только рассказать как работает Django, но и заодно сделать какое-то сравнительно полезное веб-приложение. Благодаря этому становится понятно и как работает Django, и как это можно использовать. При этом авторы не обращают особого внимания на оформление создаваемого сайта, поэтому приводимый код остается довольно коротким и наглядным.

Читать далее ‘Про книгу «Django. Разработка веб-приложений на Python»’ »

Выходит книга «Django. Разработка веб-приложений на Python»

Выходит книга Django. Разработка веб приложений на Python djangoВот знаете, нравится мне сайт books.ru, они мне теперь присылают оповещения о новых книгах про Python (уж не помню что я там включал). Вот сегодня от них узнал, что выходит новая книга про веб-программирование с помощью Django. Самое интересное, что как раз недавно я его решил поковырять, а то уж больно интересно как это делать сайты на Python, а то от PHP меня как-то всегда воротило.

Книжка, к сожалению, пока еще не вышла, но надеюсь, что к отпуску, который у меня должен быть через месяц ее уже можно будет купить. Тогда же скорее всего у меня дойдут руки и до самого Django, а то по документации разбираться можно (по тому, что я уже видел она там неплохая), но с книжкой проще.

Не читая ее трудно сказать насколько она хорошая, но по содержанию вроде бы неплохая. По крайней мере есть и про использование баз данных, и про Ajax. Смущает, что она всего 456 страниц, есть у меня какое-то предубеждение к техническим книгам тоньше 500-600 страниц, но посмотрим. Здорово, что год издания книги в оригинале тоже 2009.

Но обложка, конечно, что-то с чем-то на Хабре уже развернулась целая дискуссия по поводу того что-то такого делает мужик со змеей. А книг по Python становится все больше и больше, что приятно.

Улучшим регулярные выражения

Вчера закинул эту статью на Хабр, сейчас опубликую ее здесь.

После прочтения книги Фридла про регулярные выражения (далее просто РВ) у меня появились кое-какие мысли по поводу их читаемости. Когда РВ только появлялись, и в них было довольно мало условных обозначений вроде \d, \w и тому подобных, то, наверное, все было не так страшно, хотя уже тогда стоило задуматься о наглядности. Сейчас чтение кода с РВ – это тихий ужас. Нет, если РВ короткое, то особых проблем нет, но по мере их усложнения и появления различных скобок все становится просто кошмарно. Ситуация усугубляется тем, что в некоторых языках (не будем указывать пальцем) постоянно приходится удваивать слеши.

Кроме того в той нотации РВ, которая сейчас используется в большинстве языках программирования, в некоторых, казалось бы простых ситуациях, приходится выкручиваться с помощью различных финтов. Первый пример, что пришел в голову – составить регулярное выражение если «abc», то затем НЕ «xyz».

Читать далее ‘Улучшим регулярные выражения’ »

Джеффри Фридл «Регулярные выражения»

Джеффри Фридл Регулярные выражения regularТолько что дочитал книгу Джеффри Фридла «Регулярные выражения». Если говорить коротко, то издательство O’Reilly держит планку, книжка стоящая.

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

Вторая часть посвящена обсуждению обработки регулярных выражений. Здесь описывается работа трех типов механизмов регулярных выражений, которые встречаются: так называемые недетерминированный конечный автомат (НКА), детерминированный конечный автомат (ДКА) и POSIX НКА. В основном книга посвящена работе с НКА, который применяется в большинстве распространенных языках программирования (C#/VB.NET, Java, Perl и присутствует в PHP в виде функций preg).

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

В четвертой части подробно описываются возможности разных языков и сред (Perl, Java, .NET, PHP), касающихся работы с регулярными выражениями. На обложке еще упоминается Ruby, но в книге он затронут вскользь, но так же мельком проскакивает и Python с Tcl. Хотя я и не пишу на Perl’е (и надеюсь, что в ближайшее время не буду Джеффри Фридл Регулярные выражения icon smile ), но главу, посвященную только этому языку прочитал с удовольствием, интересно было узнать что в нем такого есть, чего нет в других языках.

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

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

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

Скороговорки для программистов

Вот сижу сейчас пишу очередную часть статьи про программирование скриптов в Vim и понимаю, что кроме скороговорок бывают еще и скоронабиралки, которые просто невозможно набрать с первого раза без ошибок, особенно по памяти. А виноваты во всем операторы сравнения, которые в Vim частично позаимствованы из Perl, но приукрашенные своими добавками.

Вот эти операторы:

  • !~
  • =~
  • !~#
  • =~#
  • !~?
  • =~?

А можно их еще разбавить цифрами. При наборе нужно использовать цифры на верхнем ряде клавиатуры, а не на отдельном блоке:

  • «1″!~#»3″

Вот уж где понадобится виртуозное владение саблей шифтом. Все еще ухудшается, когда такой код надо писать из головы, а не набирать, глядя на уже готовый текст.

Скоронабиралку можно еще усложнить:

  • a1!~#»3″&& &shell!~?a:{1}

В общем, есть поле для творчества, а заодно таким образом можно проверять трезвость программистов.

Марк Лутц. Изучаем Python

Марк Лутц. Изучаем Python lutz Дочитал книгу Марка Лутца «Изучаем Python», выход которой ждал еще с ноября прошлого года. Книга, как и ожидал, оказалась просто отличная, особенно понравилась манера изложения автора. Похоже именно так и надо писать технические книги.

А манера эта состоит в том, что сначала Лутц начинает рассказывать о какой-то теме в общих чертах, чтобы было понятно даже новичку (книга все-таки считается учебником по Python, хоть и предполагает средний уровень подготовки читателя), но постепенно доходит до очень низкоуровневых вещей, которые будут интересны и тем, кто язык Python уже знает, а элементы языка разбирает буквально по косточкам, чтобы не осталось ни одного недопонятого момента.

Например, в главе, посвященной общей работе интерпретатора, начинается все с того, как вообще можно запускать скрипты (двойной клик, командная строка и т.п.), затем рассказывается о том как работает виртуальная машина Python, какие файлы и когда она создает, а затем рассказывается о разновидностях Python – CPython, IronPython, JPython, после чего коротко говорится о способах ускорения скриптов с помощью сторонних библиотек (Psyco, Shedskin C++) и кратко упоминает библиотеки для создания полноценных exe-шников (py2exe, PyInstaller и Freeze). В конце каждой главы находится раздел, где автор описывает возможные ошибки при использовании элементов языка, рассмотренные в текущей главе. Некоторые моменты Лутц повторяет по несколько раз для тупых в течение одной главы, но это не раздражает, а новичкам, думаю, это должно сильно облегчить понимание.

Благодаря такому подходу книгу будет интересно читать и тем, кто с Python уже знаком. Я, например, в книге выяснил для себя вопрос, который меня давно волновал: является ли класс list связанным списком. Оказалось, что нет, внутри языка это обычный массив, в некотором роде аналог std::vector из C++. За одно я узнал о существовании некоторых конструкций вроде «a < X < b«. Некоторые конструкции, которыми пользовался до этого, стали казаться более логичными, чем до прочтения книги. Да и вообще появилось ощущение, что все элементы языка выстроились в законченную мозаику.

Понравилось, что Лутц постоянно сравнивает элементы языка Python с похожими элементами других языков (в основном C). Кроме того автор постоянно делает сноски на возможности Python 2.6 и 3.0, которые еще только планировались, когда писалась книга, и в то же время он пишет в какой версии языка появилась та или иная фича.

Из недостатков могу назвать только цену книги. Я ее покупал на Савелке за 1100 рублей, а, как потом выяснилось, в Интернет-магазинах ее продают за 800 рублей. Я эту книгу покупал нам на кафедру, но теперь подумываю купить ее и себе домой. А может быть просто дождусь, когда ее выложат в инет Марк Лутц. Изучаем Python icon smile

В общем, книга на твердую пятерку и на нее можно ставить штамп «маст рид». Теперь хотелось бы прочитать еще книгу того же Лутца «Programming Python», но, к сожалению, на русский ее не переводили, а дойдут ли руки до оригинала не знаю.

PS. Оказывается, «Programming Python» все-таки переводили на русский – http://www.ozon.ru/context/detail/id/1299270/. В электронном виде ее выложил Gluek у себя в блоге.

EQATECProfiler. Бесплатный профайлер для .NET

eqatecprofiler-besplatnyjj-profajjler-dlya-net

На днях искал чем можно потестировать программу, написанную на C#, в плане узких мест по производительности, и с удивлением наткнулся на бесплатный профайлер с заковыристым названием EQATECProfiler. Этот профайлер отказался очень простым в использовании и поэтому очень удобным, чтобы определить на скорую руку в каком месте программа больше всего тормозит. Официальный сайт программы расположен здесь. Там же есть ссылка на страницу скачивания. Чтобы скачать программу надо оставить свой e-mail, на который пришлют ссылку на другую страницу, с которой можно будет скачать профайлер. На вопрос о том почему разработчики сделали EQATECProfiler бесплатным, на этой странице они отвечают, что хотят понять на сколько востребован такой продукт (именно поэтому они собирают статистику скачиваний), так что не факт, что программа останется бесплатной и в будущем. Я думаю, что лучше всего показать работу EQATECProfiler’а на каком-нибудь простом примере. Читать далее ‘EQATECProfiler. Бесплатный профайлер для .NET’ »

Qt будет под LGPL

Хм, не ожидал такого от Нокии, но она пообещала, что Qt 4.5 будет под лицензией LGPL вместо GPL. Что ж, надо будет поближе пощупать Qt.

Любопытная новость, думаю, что про это теперь будут передавать в программе Время писать везде,  подробности, например, можно почитать здесь.

Крис Андерсон. Основы Windows Presentation Foundation

Крис Андерсон. Основы Windows Presentation Foundation wpfНе смотря на то, что я до сих пор пишу под .NET Framework 2.0 и перехода на более новые версии платформы пока не предвидится, давно поглядываю в сторону библиотеки Windows Presentation Foundation (WPF), которая до релиза называлась Avalon. Для ознакомления с новой библиотекой от MS я и приобрел когда-то книжку Криса Андерсона «Основы Windows Presentation Foundation«.

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

Читать далее ‘Крис Андерсон. Основы Windows Presentation Foundation’ »