Книга Дэвида Кушнера «Повелители DOOM»

Всем привет! IDDQD! Когда-то я писал о книге Кровь, пот и пиксели, в которой рассказывается про историю создания некоторых видеоигр, а недавно дочитал еще одну книгу из той же серии. В книге Дэвида Кушнера «Повелители DOOM» очень подробно рассказывается история двух Джонов — Кармака и Ромеро, а также некоторых других разработчиков, которые создали такие игры как Wolfenstein 3D, Doom, Quake и другие может быть чуть менее известные игры.

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

Читать далее…

Пост о том, как идет работа над новой версией OutWiker

Пост о том, как идет работа над новой версией OutWiker

Давно я ничего не писал сюда в блог и вообще на сайт, давно не выкладывал новые версии OutWiker. Дело в том, что я погряз в работе и, кроме того, во время карантина я присоединился к одному интересному программерскому проекту, о котором пока не буду говорить, пока мы не запустимся.

Но OutWiker я не совсем забросил, и пока я не выкладываю новую версию, хочу рассказать, как идет работа над ней. Я уже почти смирился с тем, что OutWiker будет в вечной бете. Я не собирался до релиза переводить проект на wxPython 4.1, а хотел по максимуму исправить разные шероховатости в программе и выпустить релиз. Сначала все шло хорошо, но я взялся за исправление одного может быть не очень критичного, но 100%-но повторяемого глюка. Под Linux, если в настройки зайти несколько раз, то программа падала. Эксперименты показали, что проблема в контроле, который отображает веб-страницу с помощью движка WebKit. Если такой контрол находится в диалоге, то после повторного открытия этого диалога программа упадет. Это удалось повторить в простейшем приложении с единственной кнопкой, которая открывает такой диалог. Я уже готов был с этим смириться и написать о проблеме в багтрекер wxPython, но нужно было проверить это на новой версии библиотеки. К сожалению Оказалось, что в wxPython 4.1 этой проблемы нет.

Читать далее…

Outwiker 3.0.0.874 unstable

Outwiker 3.0.0.874 unstable

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

Читать далее…

Книга Мартина Клеппмана «Высоконагруженные приложения»

Недавно дочитал книгу Мартина Клеппмана «Высоконагруженные приложения. Программирование, масштабирование, поддержка». В оригинале книга называется «Designing Data-Intensive Applications», а при переводе на русский язык название стало менее конкретным, потому что под высоконагруженными приложениями можно понимать разные виды нагрузки: вычислительную нагрузку на процессор и «высоконагруженные» в том плане, что нужно обрабатывать большой объем данных. Во втором случае основная нагрузка ляжет не на плечи процессора, а узким местом будет сеть или система ввода-вывода. В книге рассматриваются высоконагруженные системы, относящиеся ко второму случаю.

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

Читать далее…

OutWiker 3.0.0.872 unstable

OutWiker 3.0.0.872 unstable

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

Сегодня выложил следующую нестабильную версию OutWiker под номером 3.0.0.872. В новой версии не много изменений, заметных пользователю. К таким изменениям можно отнести, пожалуй, только обновление немецкой локализации, теперь программа переведена на немецкий язык полностью, за что спасибо всем тем, кто участвовал в переводе на сайте crowdin.com. Если бы еще доделали украинский перевод, то было бы вообще здорово. Сейчас там недопереведено всего лишь 3% от общего количества строк.

Читать далее…

Книга Джо Боулер «Безграничный разум»

Одна из проблем, которая меня интересует, как вести занятия со студентами так, чтобы с одной стороны им было интересно и понятно то, о чем я говорю, но в то же время не скатываться на совсем примитивный уровень в стиле «нажми на кнопку — получишь результат». Поэтому периодически почитываю книжки на тему преподавания и обучения, чтобы понять, как другие люди справляются с этой задачей, что можно исправить в изложении материала. До карантина мне попалась книга «Безграничный разум», которую написала профессор Стэнфордского университета Джо Боулер. Эта книга посвящена тому, как имеющаяся система образования отбивает желание учиться, а у учеников развивает (не)уверенность, что тот или иной предмет им понять не под силу. Сама Джо Боулер читает математику, поэтому в книге она больше говорит о преподавании математики и других технических наук, хотя это не так важно, потому что принципы, о которых идет речь в книге относятся к обучению в целом.

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

Читать далее…

Мысли по поводу хранения заметок

Задумался по поводу того, почему мне удобнее делать заметки по настройке софта, использованию программ через командную строку (git, Docker, Apache, команды в Linux) и т.п. в аналоговой тетрадке, а не в электронном виде. Вроде тот же OutWiker хорошо подходит для таких мелких записей, где можно все упорядочить и красиво оформить, а записи от руки всегда будут написаны небрежно, с исправлениями, попытками уместить текст на строке или странице. Пока я вижу такие причины:

  • Тетрадка работает независимо от компьютера и не занимает места на экране.
  • Оформление заметки в электронном виде подразумевает сразу ее аккуратное оформление, что отвлекает. В тетрадке же я записываю очередную команду для какой-нибудь программы (git, Docker), не отвлекаясь на то, куда поместить эту запись. Я часто их записываю на отдельные листочки, а потом когда-нибудь переношу в тетрадку.
  • Искать заметки в тетрадке иногда проще, если знаешь, где именно искать. Потому что тетрадку листаешь двумя руками 10 пальцами, а поиск заметки в программе мышкой — это аналог листания одним пальцем без возможности быстро просмотреть несколько страниц, не акцентируя внимание на каждой пролистанной странице. Конечно, искать по ключевым словам проще в электронном виде, если заранее не знаешь, где находится нужная запись. Но иногда проще искать в гугле, чем в локальном хранилище заметок.

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

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

Интересно, а вы как храните разные заметки? Далее пара фотографий, как аналоговые заметки выглядят у меня.

Читать далее…

Вторая часть статьи про создание Python bindings с помощью SIP

Вторая часть статьи про создание Python bindings с помощью SIP

Как и обещал в прошлом посте, сегодня выложил вторую часть статьи, посвященной созданию Python-обвязок (bindings) с помощью утилиты SIP. Во второй части речь идет о создании обвязки для объектно-ориентированных библиотек, написанных на C++, в которых фигурируют классы.

Ссылка на статью — Создание Python-обвязки для библиотек, написанных на C/C++, с помощью SIP. Часть 2

Новая статья в разделе про Python

Новая статья в разделе про Python

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

Для решения такой задачи — использования библиотек, написанных на C/C++, из Python-приложения существует много решений. Одно из них — SIP. Эта утилита изначально разрабатывалась для создания Python-обвязки над такой монстроидальной библиотекой как Qt (получившаяся обвязка — PyQt). Я написал большую статью в двух частях про использование основы использования SIP для создания Python-обвязок над библиотеками. Сегодня я выложил первую часть — Создание Python-обвязки для библиотек, написанных на C/C++, с помощью SIP. Часть 1.

Чуть позже выложу продолжение.

Доклад про оптимизацию методом роя частиц

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

По этой ссылке вы можете увидеть мой доклад (а заодно скачать презентацию), а также посмотреть обсуждение темы ввода новичков в проект (onboarding).

Видео своего доклада оставлю еще и здесь.