О языке Rust и книге Дж. Блэнди и Дж. Орендорфа «Программирование на языке Rust»

К языку Rust я присматривался давно. Пару лет назад даже пытался писать на нем небольшую программку, но до серьезного использования дело не дошло. И вот в начале этого года я решил взяться за этот язык основательно.

Rust — это компилируемый язык, предназначенный в том числе и для системного программирования. Основная «фишка» языка — это исключение на уровне компиляции ошибок работы с памятью — не инициализированные указатели, висячие ссылки и т.п. — и избегание неопределенного поведения. При этом не используется сборщик мусора, а сам язык ориентирован на максимально возможную производительность. При этом стиль программирования на Rust сильно отличается от традиционного объектно-ориентированного программирования. Если говорить очень грубо, то это скорее напоминает C с интерфейсами и очень необычной работой с памятью. Разработчики Rust позиционируют язык как замена C++. Особенности языка заставляют заранее продумывать структуру взаимодействия используемых объектов, а не плодить сложную сеть из взаимосвязанных объектов в надежде, что сборщик мусора потом все уберет. У Rust очень строгий компилятор, который откажется компилировать программу, если у него не будет уверенности в том, что она корректно работает с памятью, и что не будет гонок данных в многопоточной программе.

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

OutWiker 3.0.0.858 unstable и обновление плагинов

OutWiker 3.0.0.858 unstable и обновление плагинов

И снова всем привет! Благодаря прошедшим новогодним каникулам для проекта OutWiker удалось выкроить побольше времени, и поэтому в новой нестабильной версии, которая получила номер 3.0.0.858, было реализовано много интересных вещей, некоторые из которых в будущем позволят создавать интересные плагины.

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

История одного бага или почему OutWiker не использует последние версии wxPython

История одного бага или почему OutWiker не использует последние версии wxPython

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

Эту детективную историю начнем с представления действующих лиц. Для отображения страниц OutWiker использует движок Internet Explorer под Windows и WebKit под Linux. Программа OutWiker написана с использованием библиотеки wxPython, которая предоставляет доступ к этим движкам, причем для работы с WebKit используется компонент WebKitGTK+, который используется в таких не самых известных браузерах как Epiphany и Midori. wxPython может использовать разные версии WebKit, это зависит от того, какие пакеты установлены на компьютере, на котором происходит компиляция библиотеки. Если в системе установлен пакет libwebkit2gtk-4.0-dev (я буду использовать в названия пакетов в Ubuntu), то библиотека wxPython будет собрана с поддержкой более новой версии WebKit 2, а если этого пакета в системе нет, но установлен пакет libwebkitgtk-3.0-dev, то будет использоваться WebKit 1. Причем первая версия WebKit уже считается устаревшей и, например, в Arch Linux она не поддерживается, но все еще находится в репозиторях Ubuntu.

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

OutWiker 3.0.0.856 unstable и мысли по поводу web-версии OutWiker

OutWiker 3.0.0.856 unstable и мысли по поводу web-версии OutWiker

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

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

Книга С.Л. Соловейчика «Учение с увлечением»

Образование дают, образование получают…
Но надо еще уметь его взять!

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

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

Этой проблеме и посвящена книга Симона Львовича Соловейчика «Учение с увлечением» (спасибо моей жене, которая навела на эту книгу). Симон Львович был журналистом, который много времени уделял вопросам педагогики, писал статьи и книги на эту тему. В основном он писал об учебе в школе. И книга «Учение с увлечением» посвящена проблеме заинтересованности школьников в изучаемых предметах. Первое издание ее вышло в 1976 году, позже было множество переизданий в советский период.

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

Книга «Разработка веб-приложений с использованием Flask на языке Python»

Если говорить о веб-разработке на Python, то в первую очередь вспоминается веб-фреймворк Django, на основе которого создано огромное количество как небольших сайтов, а также таких монстров как Instagram, сайт Mozilla, Bitbucket и множество других. Django хорош тем, что к нему «прилагаются батарейки», т.е. в библиотеку входит большое количество инструментов, которые могут понадобиться для построения движка сайтов разных типов — это пакеты для работы с базой данных, для создания профилей пользователей и их авторизации, для создания форм по объектом данных и т.д. Это удобно, но из-за этого сам фреймворк становится достаточно тяжелый, а при его обновлении каждый раз что-нибудь ломается. К тому же, если вас не устраивает какая-то часть фреймворка, то заменить ее на аналог может быть тяжело.

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

Я был приятно удивлен, узнав, что 2016 году была переведена книга Мигеля Гринберга «Flask Web Development», которая на русском языке стала называться «Разработка веб-приложений с использованием Flask на языке Python».

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

OutWiker 3.0.0.854 unstable. Работа над интерфейсом

OutWiker 3.0.0.854 unstable. Работа над интерфейсом

Всем привет. Пришло время выкладывать очередную нестабильную версию OutWiker, которая теперь имеет номер 3.0.0.854. По сравнению с прошлой версией было сделано многое. Можно сказать, что изменения в этой версии были сделаны «по заявкам радиослушателей», то есть сюда в основном вошли улучшения в интерфейсе, о которых мне писали пользователи. Изменения коснулись как основной программы, так и некоторых плагинов.

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

OutWiker 3.0.0.852 unstable и формат snap

OutWiker 3.0.0.852 unstable и формат snap

Привет! Сегодня я выложил следующую нестабильную версию OutWiker под номером 3.0.0.852. Если не считать исправления ошибок, то эта версия должна больше заинтересовать линуксоидов.

С версией под Linux всегда было сложно. Когда-то для распространения deb-пакетов OutWiker использовался PPA (Personal Packages Archive). В те давние времена приходилось привязываться к версиям библиотек, которые были в репозиториях Ubuntu разных версий. Но от версии к версии постоянно что-то ломалось, и поддерживать даже две-три версии этого дистрибутива было настоящим мучением. Это даже не ад DLL в Windows — это намного хуже.

После перехода на Python 3 и wxPython 4 такие deb-пакеты в принципе невозможно было создавать, потому что необходимых библиотек в стандартных репозиториях Ubuntu не стало, да и в имеющихся версиях библиотеки wxPython наблюдаются ошибки различной степени критичности. В последнее время для Ubuntu собирается deb-пакет, который содержит в себе бинарную сборку со всеми необходимыми для запуска библиотеками. Такая же сборка выкладывается в виде архива без привязки к формату deb, чтобы программу можно было бы запускать в дистрибутивах, которые не были порождены от Debian. К сожалению, успех запуска такой бинарной сборки гарантировать невозможно, потому что это грязный хак, который должен работать на всех дистрибутивах Linux только теоретически. Возникает вопрос, что делать?

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

Неожиданные проблемы с телефоном Xiaomi Redmi Note 4X

Два дня назад мой телефон Xiaomi redmi note 4x стал себя плохо чувствовать. Все началось с того, что за ночь бездействия он разрядился сразу на 25% и вместе с этим стал нагреваться — датчик температуры аккумулятора показывал 40 градусов. На следующий день я почти не отключал телефон от внешнего аккумулятора. Я пытался понять, что с ним случилось, и кто виноват, но в статистике потребления электроэнергии не было видно ничего подозрительного, хотя заряд аккумулятора таял на глазах. Чуть позже я заметил, что окно с настройками телефона начало подозрительно дёргаться — через каждые несколько секунд оно начало прокручиваться в начало списка параметров. Сначала эти два глюка я не связывал между собой.

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

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

Это меня насторожило, и я полез на форум, где обсуждают Xiaomi. Оказалось, что многие в последние дни стали жаловаться на такие же симптомы, как и у моего телефона — греется и разряжается. Среди кучи сообщений не по теме в качестве предполагаемого виновника указывался Google Duo — приложение для видеочата, которое поставляется по умолчанию. Среди свежих комментариев на Play Market тоже жаловались на повышенное энергопотребление после обновления.

Путей решения было два: удалить обновления Google Duo или отключить это приложение. Поскольку мне это приложение не нужно, то я пошёл по второму пути. К сожалению, без получения прав root полностью удалить это приложение нельзя, но через замаскированные обходные пути его удалось отключить.

Сразу после этого телефон остыл, а потребление аккумулятора нормализовалось.

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

Книга Стивена Вайнберга «Объясняя мир. Истоки современной науки»

В последнее время в этом блоге посты о книгах перемежаются с постами об OutWiker — сейчас очередь книжного поста.

На этот раз речь пойдет о книге Стивена Вайнберга «Объясняя мир. Истоки современной науки» — научно-популярной книге об истории науки, о развитии научного подхода, о роли экспериментов в изучении мира в различные эпохи. Автор этой книги — лауреат Нобелевской премии по физике в 1979 году и известный популяризатор науки.

Большинство книг по истории науки рассказывают в первую очередь о новом времени, начиная с XV — XVII веков, когда уже начали формироваться современные подходы в научной деятельности, в том числе используя которые Ньютон открыл законы, перевернувшие физику. Вайнберг же в книге «Объясняя мир» в основном сосредоточился на описании того, что было до Ньютона. Все-таки некоторые научные подходы начали формироваться еще до нашей эры, во времена Фалеса Милетского, Пифагора, Архимеда и Аристотеля. Вайнберг хотел показать, насколько эти первоначальные подходы сильно отличались от сегодняшних.

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