Search
Write a publication
Pull to refresh
124
0
Михаил Стадник @Mikhus

Software Engineer

Send message

Как устроен GIL в Python

Reading time6 min
Views128K
Почему после распараллеливания выполнение вашей программы может замедлиться вдвое?
Почему после создания потока перестает работать Ctrl-C?
Представляю вашему вниманию перевод статьи David Beazley «Inside the Python GIL». В ней рассматриваются некоторые тонкости работы потоков и обработки сигналов в Python.

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

Обзор шины SPI и разработка драйвера ведомого SPI устройства для embedded Linux (Часть первая, обзорная)

Reading time13 min
Views185K
В этой статье я хочу провести краткий обзор шины SPI (интерфейса, широко распространённого во встраиваемой технике, используемого для подключения различных устройств) и попытаюсь описать процесс создания драйвера протокольного уровня SPI устройства для Linux. Данный документ не претендует на роль полного руководства, а скорее преследует цель указать нужное направление. Так как статья не вошла в размер одного топика, мне пришлось разбить её на две части.

0. Вместо введения


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

Для кого эта статья?
В первую очередь, для новичков, каковым являюсь и я. На форумах по embedded Linux очень часто можно встретить вопрос: «А как на этой плате работать с SPI?». Именно на него я и попытаюсь дать ответ. В качестве примера, я приведу код написанный для работы с моим тестовым SPI устройством.
Читать дальше →

Автоматизированная проверка PHP кода при комитах

Reading time6 min
Views34K
В свое время работая в узком кругу программистов, отдельными задачами и даже проектам, мы не задумывались о проблемах связанными с текучкой кадров. Точнее думать — думали, но ни каких мер не применяли, да и в целом коллектив был сплоченный никто не уходил и никого «не уходили». С ростом внутренних проектов и корпоративных клиентов, штат начал разрастаться и казалось, что все отлично — нас больше, значит будем больше успевать и делать, но не тут то было. Мы начали тратить кучу времени на “бесполезные” обсуждения, проверки, излишние проектирование и т.д, больше всего раздражает — это проверка кода. И тут я начал думать, что “мудрые и древние” наверняка решали эти проблемы с сотнями, тысячами программистов, неужели мы не справимся? Я решил провести эксперимент, под названием “автоматизированная проверка стиля кода при комитах”. Для большинства из Вас это не новость и наверняка вы этим пользуетесь, но поделиться опытом внедрения думаю, не будет лишним.
Читать дальше →

GeoIP – страны и города, декабрь 2010

Reading time1 min
Views2.7K
Вышла в свет новая версия русскоязычной базы данных стран и городов. Основные изменения:
— база maxmind.com была объединена с базой городов России ipgeobase.ru (идея sky_lord)
— с помощью Переводчика Google были переведены на русский язык ~60,000 названий (идея neytrino), а затем с помощью Яндекс.Карт из них были отсеяны артефакты типа «Инь молодых» и «Авиаторов деревня»
— были удалены дубли и произведена оптимизация структуры базы.
Результат этой работы доступен для свободного скачивания.
Читать дальше →

Валидатор микроразметки — новый инструмент в Яндекс.Вебмастере

Reading time2 min
Views2.8K
В этом году много запусков и нововведений для вебмастеров было посвящено содержимому сайта и различным способам акцентировать это содержимое в результатах поиска Яндекса или в соответствующих поисковых сервисах (Яндекс.Авто, Яндекс.Недвижимость и др.). Данные о содержимом сайта можно передать различными способами. Одним из способов является разметка HTML-кода страницы микроформатами.

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

Сейчас мы поддерживаем четыре вида микроформатов:
  • hCard — формат разметки контактной информации (адресов, телефонов и т.д.);
  • hRecipe — формат для описания кулинарных рецептов;
  • hReview —  формат разметки отзывов;
  • hProduct —  формат разметки товаров; сейчас используется в партнерской программе «Отзывы об автомобилях» для разметки информации об автомобилях.
Также мы поддерживаем microdata – международный стандарт семантической разметки, позволяющий с помощью атрибутов описать смысл информации, содержащейся в HTML-коде страниц. Такие атрибуты позволяют роботам-обработчикам находить и извлекать нужные данные. В настоящий момент в Яндексе микроданные  используются для разметки словарных и энциклопедических статей, терминов и определений.Подробнее узнать о том, какие данные можно передать Яндексу, смотрите на странице «Передача данных о содержимом сайта». А о микроформатах и микроданных читайте в Помощи.

Также мы рассказывали о семантической разметке и использовании микроформатов на июльском Яндекс.Субботнике. Послушать выступление и посмотреть текст доклада вы можете здесь.

ProgressBar — Javascript Canvas2d

Reading time4 min
Views6.4K

Здравствуйте. Последнее время я достаточно часто имею дело с JavaScript-canvas, особенно написание всяких игрушек, которые требовательны к трафику в силу необходимости загрузки множества картинок.
Обычно сначала загружается около 50-100кб сжатого JavaScript, после чего — энное количество картинок(например, 500кб, 2мб, 10мб и т.п.) и только после этого запускается сама игра. Можно, конечно, загружать по ходу, но отсутствие текстур врядли порадует игрока.
Потому я решил, что необходимо сделать какой-то приличный, симпатичный, легко-настраиваемый(чтобы быстро менять от проекта к проекту) прогресс-бар, но, обязательно без использования картинок. Под катом исходники под лицензией LGPL, небольшая инструкция, как это сделать и внизу статьи — ссылка на результат.
Читать дальше →

Юзабилити-тестирование на коленке

Reading time4 min
Views3.4K
Я вообще довольно давно интересуюсь темой юзабилити и проектированием интерфейсов, сценариями, персонажами. Но я не занимаюсь этим профессионально. До этого момента я довольствовался только знанием того, как это делается «по-взрослому», и убеждением в том, что «по-хорошему» проекты надо развивать через UI-тестирование (test first ;). Но, как обычно, дальше разговоров и грустных вздохов не заходило.
А началось все с того, что в очередной раз обсуждая проект, фичи и дальнейшие планы, я взял и ляпнул: «Поехали в институт и проверим на студентах».

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

0W-httpd — простой быстрый фронтэнд

Reading time2 min
Views1.6K
Предлагаю решение, как быстро и просто поставить на сервере легкий фронтэнд для отдачи картинок, css-файлов и прочей статики. С лета 2002 года я для данных целей использую 0W-httpd или ZeroWait httpd, как его часто называют в разных источниках (искать что-то о нем, помимо дистрибутива, лучше по второму названию).
Установить и настроить его достаточно просто (даже слишком просто):
Читать дальше →

Как стартапу найти инвестора?

Reading time4 min
Views1.6K
Впервые о своем бизнесе я задумался в начале 2008 года. Мне нужны были инвестиции, поэтому я очень много общался со всевозможными инвесторами, а также мнимыми инвесторами и консультантами по поиску инвесторов. На общение с ними я потратил очень много времени, и большая часть его была потрачена впустую. Хочу поделиться накопленным опытом общения с инвесторами и дать несколько советов другим стартапщикам.

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

apache+nginx+gzip_static+yuicompressor

Reading time6 min
Views15K
В этой статье я опишу принципиальные различия Apache и Nginx, архитектуру фронтэнд-бэкэнд, установку Apache в качестве бэкэнда и Nginx в качестве фронтэнда. А также опишу технологию, позволяющую ускорить работу веб-сервера: gzip_static+yuicompressor.
Читать дальше →

Краткий обзор membase — нового NoSQL решения от авторов memcached

Reading time3 min
Views5.6K
MemBase — открытое, распределенное персистентное хранилище ключ-значение оптимизированное для хранения данных веб-приложений.

  • персистентен
  • имеет квази-постоянное (quasi-deterministic) малое время отклика
  • высокая скорость работы
  • линейно масштабируется с одного сервера до тысяч
  • не имеет схемы данных (только ключ-значение)
  • совместим по протоколу с memcached


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

Притча о перехвате ошибок

Reading time4 min
Views2K
— Здравствуй, дружок. Хочешь, я расскажу тебе сказку? }:-]
— Конечно, дяденька, а какую? *_*
— Я расскажу тебе как делают детей ^_^'
— ого, как интересно! @_@
— Так вот, слушай. Дети появляются вследствие долгого и изнуряющего процесса разной степени нецензурности. Сейчас я поведаю тебе как появился на свет мой сын %-)
— А вы меня с ним познакомите? *о*
— Не торопи события. Обо всём по порядку. Однажды я наваял такой код:
  1. try {
  2.     throw new Error
  3. } catch( e ){
  4.     if( e != false ) throw e
  5. }
А далее идёт жёсткое порно...

XML + CSS = счастье

Reading time4 min
Views13K
Возрадуйтесь, дети мои, ибо пришёл я к вам с миром и богатыми дарами. Нет, я не принёс вам того, чего вы не видели. И даже не принёс того, чего вы не имели. От чистого сердца вручаю вам то, что всегда лежало у вас под ногами, но вы не замечали того, брезгливо перешагивая, пробегая мимо по своим, несомненно самым важным, делам.

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

Примеси! Я же знаю, вы так устали без наследования. Приходится внедрять лишние классы в элементы или даже, переходить на тёмную сторону силы — копипастить по чёрному.

Отныне! Ваша душа будет чиста как у младенца. Руки в золоте как у царевичей. Дети послушными и приветливыми.

а теперь приступим к съёмкам порева

Аккорды с применением высоких технологий

Reading time14 min
Views1.3K
Задача заверстать аппликатуру весьма не тривиальна и от того довольно интересна. Я тоже не устоял перед искушением решить её так как считаю правильным.

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

Am
O - - -
O F - -
O - R -
O - M -
O - - -
X - - -


O — открытая струна, X — приглушённая, остальные буквы обозначают пальцы.

ну и порево там дальше..

PHPText — простая локализация

Reading time1 min
Views4K
Для локализации программ существует много решений и конечно же gettext. Однако объяснить рядовому пользователю windows, как при помощи его перевести программу, составляет большую трудность.
Поэтому я решил написать небольшое приложение для простой локализации.

Подробности

Understanding node.js

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

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

Новый Redis 2.0 и Rediska 0.5.0!

Reading time5 min
Views7.4K
RediskaДорогие друзья! На прошлой неделе вышел стабильный релиз чудесной key-value базы Redis версии 2.0 с внушающим количеством нововведений. Эта новость особенно нас обрадовала, так как мы уже год используем Redis в наших нагруженных проектах и впечатления только положительные. Мы обновили PHP клиент Rediska, добавив поддержку новых возможностей.

Обзор нововведений и примеры их практического применения...

Определение кодировки текста в PHP — обзор существующих решений плюс еще один велосипед

Reading time7 min
Views105K
Столкнулся с задачей — автоопределение кодировки страницы/текста/чего угодно. Задача не нова, и велосипедов понапридумано уже много. В статье небольшой обзор найденного в сети — плюс предложение своего, как мне кажется, достойного решения.

1. Почему не mb_detect_encoding() ?


Если кратко — он не работает.
Подробнее - под катом

ООП Практикум PHP5: эмуляция примесей (mixin) в языке

Reading time11 min
Views5.1K
Как-то вечером для реализации моделей поведения в ORM в моем велосипеде фреймворке мне понадобилось что-то, ведущее себя как примесь (mixin) в Ruby или как метод расширения (extension method) в C# (или как трейт / графт в будущих версиях PHP) Я решил для интереса посмотреть, как у меня получится реализовать примеси на PHP. Если вы не знаете, что такое примесь, не беда, сейчас все расскажу.

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

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

ООП практикум в PHP5: Анализ ошибок, преимуществ и недостатков двух различных реализаций примесей в PHP

Reading time6 min
Views2.3K
После выхода моей статьи о примесях мы продолжали дискуссии и в комментариях к статье и в личных сообщениях. Сегодня увидел в моем блоге комментарий от читателя, который попросил объяснить, в чем я вижу преимущество своей реализации перед реализацией Леонида Шлейхера.

Я собирался было ответить в комментарии к посту своем же сайте, но неожиданно оказалось, что вопрос довольно интересен. Вернее, не сам вопрос, а анализ, который я провел, подготавливая ответ.
Читать дальше →

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity