Личный пост Евгения Дорохина

Я читаю немало блогов и по сравнению с тамошний публикой у меня место довольно тихое — из последних истерик мне запомнилась разве что самовыпиливание некого товарища, нервная система которого не перенесла факта, что я занимаю позицию одного
А тут недавно принесло из интернета
Речь идёт о программулине, которую я
В общем, последнее я вкратце изложил этому типчику.
В ответной речи Евгений раскрыл своё незамутнённое видение мира — оказывается, раз ты разработчик, то обязан всем и каждому рассказать что и как работает, хоть тебя ночью разбуди, ответить на все вопросы и адаптировать свою программу для Тюмени, а то Дорохину неудобно качать его шесть деревень.
Для меня просто параллельная Вселенная открылась. Буду ждать оттуда ещё
Itertools для PHP
Внимание! Библиотеку я модифицировал, описанные ограничения уже не соответствуют действительности!
В прошлом, программируя на «Пайтоне» я не раз восторгался модулем itertools и тем как «Пайтон» легко позволяет обращаться с генераторами — есть несколько способов, хорошее разнообразие.
В ПХП недавно генераторы тоже появились, в версии 5.5 есть ключевое слово yield, позволяющее их создавать. Вчера у меня появилась мысль познакомиться с ними поближе и я решил переписать библиотеку itertools на PHP. В интернете я уже встречал несколько таких попыток, но ни одна из этих реализаций не использовала генераторы.
Пример использования ниже (для запуска примера и работы библиотеки требуется ПХП 5.6 и выше):
require 'itertools.php';
use function itertools\islice, itertools\cycle, itertools\iter;
foreach (islice(cycle(iter("ABC")), 10) as $el) {
echo $el;
}От оригинальной библиотеки несколько отличий.
Если не заброшу библиотеку, то, возможно,
Upsert в PostgreSQL
Ура, появился коммит, добавляющий к оператору INSERT «Постгреса» конструкцию, которая позволяет использовать его как upsert (в «Оракле» это конструкция MERGE, в «Майэскуэеле» — INSERT… ON DUPLICATE KEY UPDATE):
-- Обновить, если не удалась вставка
INSERT INTO distributors AS d (did, dname) VALUES (8, 'Anvil Distribution')
ON CONFLICT (did) DO UPDATE
SET dname = EXCLUDED.dname || ' (formerly ' || d.dname || ')'
WHERE d.zipcode != '21201';
-- Если не удалась вставка, ничего не делать
INSERT INTO distributors (did, dname) VALUES (10, 'Conrad International')
ON CONFLICT (did) WHERE is_active DO NOTHING;Itertools для PHP: продолжение
Библиотеку itertools для ПХП я всё же переписал: теперь на вход всем функциям можно передавать что угодно итерируемое. Из ограничений осталось только два: функция iter в моём варианте принимает только один аргумент, а у функций product и izip_longest последний аргумент является обязательным.
Вот, кстати, как переписывается программка итерстрип, написанная мной семь лет назад на «Пайтоне», теперь её можно повторить на ПХП почти
require 'itertools.php';
use function itertools\groupby, itertools\xrange, itertools\chain, itertools\repeat;
function ntrim($letter, $n=3, $replby=1)
{
$shrink_groups = function($letter, $n) {
foreach (groupby(chain(repeat('', $n), $letter, repeat('', $n))) as list($item, $grp)) {
$grp = iterator_to_array($grp);
yield $item || sizeof($grp) < $n ? $grp : '';
}
};
return array_slice(iterator_to_array(chain(...$shrink_groups($letter, $n))), $replby, -$replby);
}
print_r(ntrim(['', 1, 2, 3, '', '', '', '', 4, '', '']));Увы, на ПХП всё ещё не так компактно
Электроника МК85
Был в гостях у братишки, нашёл свой старый микрокомпьютер «Электроника МК85» 1992 года выпуска.
В 1992 году я поступил в техникум и там же огранизовывал управляемый тотализатор — по экрану микрокомпьютера скакали точки. Но если мне нужно было, чтобы победила определённая точка, я зажимал известную мне соответствующую клавишу и моя протеже одерживала победу.
Блок питания, к сожалению, потерян, но сохранились чехол (на фото слева) и само устройство. От батареек для лазерной указки микрокомпьютер не заработал (несмотря на уверения анонимов из интернета), зато заработал
Внешний вид «МК85» был полностью скопирован с калькулятора фирмы «Касио», но внутренности сильно различались. Например, в «каське» стоял четырёхразрядный процессор, а в «МК85» — шестнадцатиразрядный
Насколько я понял из информации в интернете, максимальная частота процессора внутри этого микрокомпьютера — 2МГц (два мегагерца), видимо это в режиме «турбо», который включался нажатием кнопки «плюс» при включении. Но и в этом режиме, насколько я помню, быстродействие было невысоким, что, правда, не омрачало моей радости от обладания одним из первых КПК.
Попробую завтра попрограммировать, если все кнопки там ещё работают.
99 бутылок пива на «Электронике МК85»

56. БЭЙСИК «Электроники МК85». Как я уже сказал, Бейсик (в руководстве он называется «БЭЙСИК») на «МК85» отличается странностями. Например, там фиксированное количество переменных с определёнными (только однобуквенными именами), причём только одна строковая переменная может содержать не более 30 символов (её имя — символ доллара), остальные могут содержать не более семи символов.
Или запись массивов — все числовые переменные, по сути, являют собой один массив. Индекс «один» массива с именем «А» совпадает с переменной «B», а индекс «два» переменной «B» — это переменная «D» и так далее. Так что вы можете использовать
Другая неприятная особенность — небольшой максимальный размер строки и программы и весьма ограниченный её размер.
В общем, представляю вашему вниманию программу «99 бутылок пива на стене», написанную на БЭЙСИКе микрокомпьютера «Электроника
10FOR B=99 TO 1 STEP -1
20A=B:GOSUB90:PRINT" of beer on the wall, ";:GOSUB90:PRINT"."
30PRINT"Take one down and pass it around, ";:A=B-1:GOSUB90
40PRINT" of beer on the wall."
50NEXT B
60PRINT"No more bottles of beer on the wall, no more bottles of beer."
70PRINT"Go to the store and buy some more, 99 bottles of beer on the wall."
80END
90GOTO100*(SGN(A-1)+2)
100PRINT"no bottles";:RETURN
200PRINT"1 bottle";:RETURN
300PRINT A;" bottles";:RETURNМикрокомпьютер имеет интересную особенность — длинные строки, не помещающиеся на экране, он автоматически прокручивает, а чтобы человек успел прочитать, после каждой строки происходит остановка интерпретатора, для продолжения надо нажать клавишу «EXE». Точка с запятой после оператора «PRINT» говорит интерпретатору, что строка не кончилась, что позволяет печатать длинные строки несколькими операторами.
Ещё одна особенность — программируемый символ. Один символ, имеющий специальный код можно нарисовать попиксельно. Завтра попробую побаловаться.
Подарок от бывших коллег

«Яндекс.Диск» сделал подарок — всем бывшим коллегам подарили по 250ГБ места. Очень приятно, спасибо!
Правда сообщение ещё не успели поправить — раньше дополнительные 250 давали пока работаешь в «Яндексе».
JBIG2
У нас в документообороте всё больше используется формат ПДФ, но с ним есть проблема — документы из некоторых сторонних организаций к нашим клиентам приходят на бумаге, по факсу
Пока мы такие документы помещаем в ПДФ сканами в хорошем качестве в формате ДжПЕГ. Увы, это довольно расточительно. К счастью, ПДФ поддерживает не один, а целых три формата графики — ДжПЕГ, ДжПЕГ 2000 и ДжБИГ2. На последний я возлагал большие надежды.
Идея этого формата очень интересна и проста. Если у нас есть скан документа, его значимую часть в основном занимают буквы и цифры, если найти при помощи распознавания одинаковые символы, то их можно закодировать по одному разу, а в остальных местах использовать просто ссылки на них. Текстовые сканы действительно ужимаются значительно (я пробовал), тем более, что формат двухбитный (только

К сожалению, у формата есть серьёзный недостаток, на который я тут же и наткнулся.
Алгоритм устроен так, что он подбирает не просто одинаковые символы, а похожие. Это разумно — принтеры печатают неравномерно
Посмотрите, у меня на скриншоте выше — оригинальный ПДФ (слева) и ПДФ, где графика перекодирована в ДжБИГ2. Как видно при кодировании были перепутаны «п» и «и», «п» и «н». Для слов в документах может это ещё и не смертельно, но для цифр в суммах — беда.
Мне неясно можно ли
Остаётся ещё вариант с ДжПЕГом 2000, но с ним возможно, выигрыш будет столь незначительным, что затраты на конвертацию просто не окупятся.
Опции просмотрщика PDF в Chrome
Многие, наверное, знают что у плагина Эдоуби для просмотра ПДФ есть специальные параметры, которые передаются фрагментом в урле. Эдоуби публиковала эти параметры в разных документах, а теперь они собраны в специальном ЭрЭфСи под номером 3778.
Я для интереса попробовал эти параметры в «Хроме» (там собственный просмотрщик, поэтому я не удивился бы, если бы они не сработали) и оказалось, что три из них всё же работают:
# увеличение на 50%
http://example.org/sample.pdf#zoom=50
# переход к странице №2
http://example.org/sample.pdf#page=2
# переход к главе «Chapter»
http://example.org/sample.pdf#nameddest=ChapterПодробнее можно прочитать ЭрЭфСи (в частности, в «zoom» можно указать ещё два параметра). Так же параметры можно комбинировать, это тоже работает — если указать их через амперсанд.
100км

Достиг поставленной цели — проехал 100 км на велосипеде. Ноги довольно ощутимо болят.
Радио-86РК
На снимке —
В понедельник отдам в музейчик ИТИС — это высшая школа при КФУ. Её директор и мой хороший знакомый Айрат Хасьянов собирает для студентов небольшую экспозицию старой компьютерной техники.
Компьютер включается, загораются лампочки, но подключение к телевизору ничего не дало, то ли компьютер сломан, то ли я делаю
На борту
Кстати, в сети есть эмулятор этого компьютера на ДжаваСкрипте, можно посмотреть в какие игры мы тогда играли.