Турник

Турник (44.90КиБ)

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

Тут не до личных проектов и, в частности, не до спортзала. Я уже давненько сделал паузу в занятиях спортом и она грозила стать перманентной. Решил что-то с этим сделать и купил хороший турник.

«Поддержал российского производителя», купил турник местного производства, кстати, если вы из Казани и у вас те же проблемы, что и у меня, рекомендую — смело заказывайте. Качество отличное, всё в наличии, за 500 рублей они вам его ещё и установят.

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

Сначала всё было очень плачевно — я еле-еле подтягивался четыре раза, за пару недель довёл до 11 раз, сейчас прогресс уже не такой бойкий, но за последнюю неделю я довёл уже до 12. Поставил себе цель — довести до 20. Буду стараться.

17 комментариев

Списки репрессированных

Есть такой хороший сайт — «Жертвы политического террора в СССР». Если я слышу рассказы родственников о репрессиях (да, у меня большинство предков — крестьяне, но часто они были зажиточными), я иду на этот сайт и пытаюсь найти какие-то упоминания там.

Сегодня решил этот процесс чуточку автоматизировать — поискал Гуглом два села из которых у меня много родственников — Старая и Новая Письмянки, потом скачал простым скриптом полученные страницы. Кстати, «wget» срабатывает только при условии наличия двух определённых параметров, что-то типа такого:

wget -U "Firefox/3.0.15" -e robots=off ваш-урл

Скачал те урлы, на которые указал Гугл:

grep -hoE 'lists.memo.ru/d[^.]+\.htm' * | sort -u | xargs -n1 wget

и выделил из них все фамилии, рядом с которыми встречалось слово «Письмянка»:

iconv -f cp1251 -t utf8 * | grep -B3 'Письмянка' | sed -nE '/"n[0-9]+"/ {s/<[^>]+>//g;p;}' | sort -u

Получилось 282 строки, потом простым грепом выделил фамилии родственников, проживавших в этой местности: Земсковы, Ануфриевы (у меня есть Онуфриевы), Макридины (так же попался один Микридин — очевидная опечатка) и Евдокимовы.

После чего сел выяснять нет ли у меня в дереве кого-то похожего. Нашёл пять чётких совпадений (совпадают ФИО и год рождения ± пара лет) и два предполагаемых — найденные вполне тянут на сыновей одного из братьев моего прямого предка.

Больше всего пострадали Макридины, правда не прямые мои родственники, а боковая ветвь, приговорили целую семью — родителей и сына, теперь стала известна часть их судьбы. Например, Макридин Николай Митрофанович отправился на Беломор-Балтийский канал, бежал, был расстрелян 5 июля 1938, похоронен в Карелии, вблизи станции Медвежья Гора.

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

Сейчас дерево, на мой взгляд, выстроено на твёрдых фактах, но кто знает — не всплывёт ли что-то, что пошатнёт мою уверенность, проверить по всем источникам очень полезно.

Оставить комментарий

Синтетические ёлочные игрушки

Сегодня таксист выдал абсолют веры во всё натуральное.

С утра у нас дождь и, как всегда при такой погоде, затруднено движение, куча ДТП. Для меня это удивительно, не понимаю почему лёгкий дождик так влияет на дорожную обстановку, своим удивлением не преминул поделиться с таксистом.

Узнал много нового. Оказывается во время Универсиады положили какой-то иной, неправильный асфальт, тормозить на нём в дождь трудно. Что, по мнению таксиста неудивительно, так как асфальт, видите ли… синтетический.

Поддельные ёлочные игрушки. Выглядят как настоящие, но не радуют.

21 комментарий

ПХП → Пайтон

Боже мой, сейчас написали ребята из «Яндекса». Там состоялось эпохальное событие — несколько часов назад последним коммитом из кода внутренней вики «Яндекса» удалён последний код на ПХП. Внутренняя вики «Яндекса» была основана на движке «ВаккоВики» и была полностью написана на ПХП.

Дни ПХП сочтены (64.93КиБ)

Несколько лет назад мы с Сашей Покатиловым начали процесс постепенного переписывания её на Пайтон, причём прямо на живой системе — части на Пайтоне и ПХП общались друг с другом по обычному протоколу HTTP, очень хитрая получалась штука. Я помню как мы неделю провели в Симферополе — ребята из тамошнего офиса «Яндекса» писали спецификацию на синтаксис вики-разметки, чтобы повторить парсер на Пайтоне и мы потом вносили в неё правки. Вообще, много интересного было, много сложностей.

И вот этот титанический труд закончен. Ребята, поздравляю, это круто!

60 комментариев

В Казани разбился самолёт

Тут у меня много читателей, которые знают, что я часто летаю по маршруту Казань—Москва. Думаю, надо сообшить, что на сегодняшнем рейсе авиакомпании «Татарстан» (У9-363) меня не было. Я, как и многие сотрудники нашей компании, стараемся не летать самолётами этой авиакомпании.

Есть версия ошибки экипажа, самолёт разбился на третьей попытке посадки (ударился носом о землю), примерно в 19:35, на борту было 50 человек — 44 пассажира и 6 человек экипажа, все погибли. Известен бортовой номер — VQ-BBN, судну было 23,5 года.

Фото погибшего Боинга (34.51КиБ)

Командиром был Рустам Салихов, летчик, совсем недавно введенный в командиры воздушного судна.

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

Фотография Дмитрия Баландина.

39 комментариев

Ограда от зайцев

Царицыно (74.42КиБ)

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

3 комментария

Проблема в стемере для PHP

В модуле stem для ПХП обнаружилась неожиданная проблема. Этот модуль — стеммер, позволяющий обрезать окончания слов для того, чтобы искать потом по тексту без учёта падежей и склонений.

Для русского языка в нём целых две функции — для кодировки КОИ-8 и УТФ-8. Наш код работает в КС1251, потому для стеммера мы перегоняем текст в УТФ-8.

Я обратил внимание, что из командной строки код с этим модулем работает нормально, а в рабочем проекте кодировка портится — как будто стеммер где-то внутри себя рассматривает УТФ-8 как однобайтовую русскую кодировку и приводит её к нижнему регистру.

У меня возникла мысль, что дело в выставляемой локали, мы провели эксперимент — так и есть, дело в этом. Такой код работать правильно не будет:

setlocale(LC_TIME, 'ru_RU.cp1251');
echo stem_russian_unicode(iconv('windows-1251', 'utf-8', 'Приветы'));

Кодировка получится битой. Перед вызовом функций стеммера нужно переставлять кодировку (setlocale) в УТФ-8. Ошибочное место в модуле ищется элементарно:

// файл stem.c
     php_strtolower(z->p, arglen); // ← вот искомый вызов
     stem(z);
     z->p[z->l]= '\0';

// … ищем эту функцию в исходниках PHP…
// string.c из PHP
    PHPAPI char* php_strtolower(char * s, size_t len) {
        unsigned char *c, *e;

        c = (unsigned char *)s;
        e = c+len;

        while (c < e) {
            *c = tolower(*c); // ← а это проблемное место
            c++;
        }
         return s;
    }

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

7 комментариев

Небритябрь

Небритябрь (42.28КиБ)

Про Небритябрь я узнал из видеоблога Стаса Давыдова («This is ХОРОШО»). Смысл простой — на весь ноябрь нужно прекратить бриться.

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

Сплошные неудобства, сейчас я не бреюсь уже из принципа, раз ввязался, но, кажется, начал привыкать. Чего доброго, когда всё закончится оставлю всё как есть, только щёки побрею.

11 комментариев

Казань ✈ Москва ✈ Шри-Ланка ✈ Москва ✈ Казань

Отель (195.96КиБ)

Тридцатого декабря полетим праздновать Новый год на Шри-Ланку, в отель «Бентота Бич» (фото с сайта «Топхотелс»).

Если вы были на Шри-Ланке, поделитесь ощущениями, советами: на что смотреть, какую валюту брать, где менять и так далее.

Кстати, удобнее всего рейсы из Казани и в Казань у «Татарстана», мы их брать, естетственно, не стали. В одну сторону полетели «Аэрофлотом», в другую — «Трансаэро».

23 комментария

Локальные переменные

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

Вообще я сейчас считаю, что будущее скорее за языками с лаконичным синтаксисом (Пайтон), чем за тем, у кого он сверхнасыщен (Перл, Руби).

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

Например, локальные переменные. В ПХП часто приходится смотреть (особенно, если достаётся код-лапша), не определяется ли выше и не используется ли ниже переменная с каким-нибудь глубокомысленным названием — «temp», «i» или что-то в подобном роде. Ну мне тоже хочется что-то временное сохранить и в цикле какой-то счётчик использовать, причём посредь чужого кода.

В Перле такой проблемы нет — там локальную переменную можно создать почти в любом месте, произвольном месте кода, просто поставив фигурные скобки — так создаётся новый лексический блок, у которого могут быть свои локальные переменные:

my @a = (1, 2, 3);
my @b = ('a', 'b', 'c');

for my $i (@a) { # первая переменная $i
     for my $i (@b) { # вторая переменная $i, перекроет первую только внутри цикла
         print $i . "\n";
    }

    {
         my $i = 'end'; # третья переменная $i, перекроет первую только в этом блоке
         print $i . "\n";
    }

    print $i . "\n"; # выводится первая переменная $i
}

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

В Джаваскрипте ситуация меняется, появилась конструкция «let» (впрочем, раньше её можно было эмулировать), а ПХП ничего похожего так и нет. Я переписывался с разработчиками много лет назад на эту тему, но воз и ныне там.

Сейчас есть возможность опубликовать предложение, описав его в виде RFC — эта новая процедура появилась недавно, если предложение понравится, то синтаксис имеет все шансы попасть в язык. Надо будет как-нибудь заняться.

Оставить комментарий

← сюда туда →