Bloodhound Tsoy
Вчера ехал на такси в аэропорт утром, таксист поставил Цоя и, спросонья, проигрыш из песни «Мама мы все тяжело больны» вдруг напомнил песню «The Bad Touch» группы «Bloodhound Gang».
Сейчас послушал на «трезвую» голову,
«Хром» → «Сафари»
С 30 октября, уже больше месяца я пользуюсь «Хромом». Любимой «Опере» я не простил очередное падение с потерей вкладок, поэтому решил перейти на другой браузер. «Хром» меня разочаровал.
В общем, попробую «Сафари», в последних версиях он всё хорошеет, а выбора больше нет. «Файрфокс» — это некрофилия
Продавцы антенн?

Это дом, мимо которого я иду обедать каждый рабочий день. Он весь в таких антеннах. Зачем людям так много антенн? Они их продают? Сушат на зиму? Коллекционируют? Или что?
«Оплутонить»
Американское диалектологическое общество признало глагол «to pluto» («оплутонить») «новым словом 2006 года». Новый глагол означает «понижение в звании или ценности
кого-либо или чего-либо, как это произошло с теперь уже бывшей планетой Плутон»
Из статьи про Плутон в «Википедии».
Всякая мелочь одним постом-7
Завтра выборы, не забудьте сходить и проголосовать! О своём опыте участия в выборах в качестве наблюдателя от «Яблока» рассказывает Надя Яцык. Другая интересная ссылка про выборы — «Статистическое исследование результатов российских выборов 2007…2009 гг».
Продолжая тему китайских устройств (я
Профессиональный психолог критикует своих коллег. Прочитайте, очень познавательно. Корень проблемы, видимо, кроется вот в этой цитате: «после советских времен слово „психиатрия“ остается пугающим, поэтому чаще всего идут к психологам. Весь ужас в том, что психологи эту область совсем не знают и норму от патологии не отличают. прелесть их положения в том, что они ни за что не отвечают (врач подсуден, психолог — нет!)».
Как вы, наверное, уже заметили, я обожаю старые фотографии. На этот раз — фотоподборка Венеция, 19 век,
Сканирование по фамилии на сайте MyHeritage
Я «дерево» своих родственников храню на сайте «MyHeritage» (сейчас там 543 человека, но это включая очень дальних). На сайте есть интересная функция,
На сайте зарегистрирован 61 миллион пользователей и заведено 861 миллион профилей, так что функция имеет смысл. Наша с женой практика это подтверждает — нашлись три дерева её родственников.
У меня из родни пока никто не нашёлся, поэтому я решил поискать сам. Написал скрипт, который сканирует выдачу поиска по сайту и выдаёт администраторов найденных сайтов. Открываете полученные УРЛы в браузере и пишете всем им письмо. Автоматическую рассылку я делать не стал, смысла нет, на сайте полный набор защиты — разные виды «капчи» и лимит на количество сообщений в сутки. У меня получилось порядка 35 ссылок на мою фамилию, ради этого делать полную автоматику не интересно. Код скрипта.
<?php
$SURNAME = array('Иванов', 'Иванова');
$EXCLUDETREE = array(111111); // дерево, которое надо пропустить (например, ваше собственное)
$MANMASK = 'http\://www\.myheritage\.com/person\-(\d+)_(\d+)_(\d+)/[^"]+';
$CONTACTMASK = 'contactWebmasterViaInbox\((\d+)\)';
$CONTACTURL = 'http://www.myheritage.com/site-%d/t?lang=RU';
$URL = 'http://www.myheritage.com/FP/smart-research-search.php?offset=%d&l=%s';
$trees = array();
$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'header' => "User-agent: Opera/9.80 (Darwin x86_64; U; Edition Next; ru) Presto/2.10.238 Version/12.00\r\n".
"Accept-encoding: gzip",
'protocol_version' => PHP_VERSION >= 5.3 ? '1.1' : '1.0',
'timeout' => 5,
)
));
foreach ($SURNAME as $surname) {
echo 'Поиск по фамилии «', $surname, "».\n";
for ($i = 0;;$i += 10) {
echo 'Смещение: ', $i;
$content = DecodeResponse(file_get_contents(sprintf($URL, $i, urlencode($surname)), false, $context), $http_response_header);
echo ", длина полученного документа: ", strlen($content), " байт, ";
if (preg_match_all("!$MANMASK!", $content, $m)) {
echo 'найдено записей: ', $peoplecount = count($m[0]), ".\n";
$trees = array_merge($trees, $m[3]);
} else {
$peoplecount = 0;
echo "записей не найдено.\n";
}
if ($peoplecount != 10) {
break;
}
}
}
$trees = array_diff(array_unique($trees), $EXCLUDETREE);
echo 'Найдено деревьев: ', count($trees), ".\n";
foreach ($trees as $id) {
$content = DecodeResponse(file_get_contents(sprintf($CONTACTURL, $id), false, $context), $http_response_header);
if (preg_match("!$CONTACTMASK!", $content, $m)) {
echo "http://www.myheritage.com/FP/inbox.php?lang=RU&compose=1&recipient={$m[1]}&type=1\n";
}
}
function DecodeResponse($content, $headers) {
foreach ($headers as $header) {
if (stripos($header, 'Content-Encoding:') === 0 && strpos($header, 'gzip') !== false) {
return gzinflate(substr($content, 10));
}
}
return $content;
}
☀ спасибо ☀
В вашем городе водители говорят «спасибо» друг другу «аварийкой»?
Мне интересно, как это могло зародиться и распространиться в такие короткие сроки? И самое главное, сигнал настолько чёткий, что даже те, кто ни разу его не видели, очень быстро понимает что ему хотели сообщить. Всего несколько лет назад не было же его. Он
Инте̲рне̲т
Сегодня впервые на встрече услышал как слово «интернет» произнесли через два «е». Насколько я знаю, считается, что из слов исчезает «э» (там где в написании стоит «е»), когда слово уже прочно вошло в язык. Возможно, человек, использовавший там «е» произностит «интернет» нарочито так, чтобы продемонстрировать — он считает, что слово уже «обрусело».
Я не знаю, существует ли в реальности такая тенденция (с буквами «э» и «е»), но если и существует, то, мне кажется, она исчезает. Я нередко сталкивался с тем, что слова «тест», «секс», «энергия», «бактерия» и прочие некоторые люди старшего поколения произносят через «е», тогда как в моём поколении и младше я вообще не наблюдаю использование такого произношения, там исключительно «э».
Может быть это отражение другой тенденции языка, русский становится более «твёрдым». Ещё моя бабушка говорила «четьверьгь», «дожжь», смягчая и некоторые другие слова. Насколько я знаю, так раньше говорили в Москве, а мода на «твёрдость» пришла из Питера, когда он был столицей. Сейчас «четьверьгь» я уже не слышу, а «дожжь» всё ещё иногда проскакивает.
С Днём рождения, жена!

Любимая жена, поздравляю тебя с Днём рождения! Главное — вот этот замечательный букет, который я сфотографировал, а под ним лежит незначительный, небольшой подарок, но надеюсь он тебе понравится!
Всякая мелочь одним постом-6
Интересное видео — что будет с пиявкой если её поместить в воду, оставшуюся от кальяна. Задумайтесь, чем дышат курящие кальян.
Появился прибор «СПИДометр», использующий «неинвазивный, скрининговый метод диагностики», чтобы определять наличие СПИДа. Некоторые люди совсем потеряли совесть. В пользовательском соглашении написано: «использование Пользователем сервисов сайта не налагает на Администрацию сайта
Другое видео — диктор «РенТВ», читая текст про Барака Обаму, показывает в эфире средний палец. Что это было?
Для желающих понастальгировать девятого декабря выходит ремейк знаменитой игры для «Спектрума», главным героем которой является Диззи. Это ремейк шестой части, которая называется «Dizzy. Prince of The YolkFolk», игра будет выпущена под «Андроид», «Айпад» и «Айфон». Я куплю.
«Старое радио» — уникальный проект по оцифровке старых передач, аудиоплёнок и пластинок. В ЖЖ «Оттенки серого» великолепный рассказ об авторе этого проекта.
Будущее (а может уже и прошлое, кто знает) шпионажа — использование датчиков смартфона, лежащего рядом с ноутбуком или клавиатурой компьютера, для угадывания что печатает пользователь. Для английских фраз вероятность правильного распознавания с использованием только гироскопа и акселерометра (без микрофона, который может улучшить картину) — 80%.
Первый язык программирования высокого уровня — Планкалкюль ★
Планкалкюль (Plankalkül) — первый в мире язык программирования высокого уровня, разработанный немецким инженером Конрадом Цузе между 1942 и 1946 годами для его компьютера «Z4».
Шла Вторая Мировая Война, Цузе работал в отрыве от учёных других стран, совершенно самостоятельно. За это время он создал не только язык программирования, но и написал на нём 49 страниц программ для оценки шахматных позиций. Полностью его работа была опубликована много позже, в 1972.
Только в 1957 году (работы были начаты в 1954) появился Фортран — язык, который большинство считает первым языком высокого уровня.
«Z4» был
Диалект, который реализуется, назван
Язык довольно богатый, на мой взгляд, для сороковых
Все переменные делятся на четыре вида.
- Variablen (Входные переменные) — это входные переменные подпрограмм, доступны только для чтения начинаются с буквы V и номера;
- Zwischenwert (Значения промежуточные), доступны для чтения и записи, предназначены для хранения промежуточных вычисляемых значения, начинаются с Z и номера;
- Resultatwerte (Результат) — в этих переменных возвращается результат вычисления, начинаются с R и номера;
- Indizes (Индексы) — переменные цикла (аналога for), начинаются с i, дальше может быть номер, номер необходим для организации вложенных циклов.
Доступны три типа переменных. Несмотря на то, что «Z4» умел оперировать числами с плавающей точкой, интерпретатор этого не умеет.
Для целого неотрицательного указывается размерность в битах. Есть две формы записи 0 — один бит, n.0 — «n» бит, например, 8.0 — один байт (8 бит). Кортеж указывается в скобках, например (3.0, 4.0) — это две переменные в три и четыре бита, кортеж должен иметь более одного элемента. Массив записывается через точку, к примеру: 4.5.0 — массив из четырёх элементов по пять бит в каждом, 32.(0, 8.0, 16.0) — 32 кортежа, в каждом из которых три переменных: один бит, восемь и шестнадцать.
«Планкалкюль» явно можно сильно упростить по синтаксису, но современный диалект почти в точности копирует ту запись, которую использовал Цузе, я полагаю, что такой синтаксис родился
Одна из них вычисляет указанное (по порядку) число Фибоначчи:
P0 FactEvgenyStepanischev (V0[:4.0]) => (R0[:10.0])
(0, 1) => (Z0[:10.0], Z1[:10.0])
W1 (V0[:4.0]) [
i > 0 -> (Z0[:10.0] + Z1[:10.0], Z1[:10.0] - Z0[:10.0]) => (Z1[:10.0], Z0[:10.0])
]
Z1[:10.0] => R0[:10.0]
ENDЗапускать следует так: открываете страницу с интерпретатором, копируете в окно мою программу, нажимаете «Compile», открывается отдельное окно
Подпрограммы в языке начинаются с символа P и уникального номера, дальше идёт имя, по которому её можно будет вызвать, у меня подпрограмма называется FactEvgenyStepanischev, заканчивается подпрограмма ключевым словом END (в оригинальном Планкалкюле его не было).
У подпрограммы описываются принимаемые и возвращаемые значения, у меня используется одна переменная на вход, размерностью 4 бита и одна на выход, размерность в 10. Первой строкой присваиваются значения «ноль» и «один» промежуточным переменным Z0 и Z1. Тип переменных приходится указывать при каждом их использовании, преобразовать переменную в другой тип нельзя.
Ниже идёт цикл for (W1), поскольку номер переменной цикла я не указал (указывается в первых квадратных скобках, которые тут опущены), используется переменная цикла i, без номера. В круглых скобках указывается количество повторений, а в последующих квадратных — тело цикла. Подробности можно найти в описании.
Операция «стрелка» (->) — условная конструкция, часть справа будет выполнена, если выражение слева истинно. В диалекте работают только самые простые выражения, например цикл туда подставить можно, но кнопка «Run» в аплете у меня не появилась, поэтому я ограничился присваиванием внутри цикла.
Я тут использовал комплексное присваивание, которое хорошо знакомо тем, кто использует Перл, Пайтон или ПХП, но работает оно иначе — присваивания выполняются последовательно, слева направо, поэтому я не могу ограничиться,
(Z0[:10.0] + Z1[:10.0], Z1[:10.0]) => (Z1[:10.0], Z0[:10.0])результат будет не тот, который ожидается.
В конце я присваиваю промежуточное значение результирующему значению подпрограммы.
Кроме этого в языке почти ничего и нет. Обращение к элементам массива, вызов функции и цикл while описывать отдельно смысла не имеет, они выглядят достаточно естественно в рамках этого синтаксиса. Все операции, поддерживаемые языком (их немного — логические операции, битовые операции и четыре арифметические действия) выглядят привычно.
Многозадачность в «Гоу»
В прошлой своей записи я упомянул многозадачность в «Гоу», а сейчас вспомнил, что я ни разу не показывал как же она там выглядит с точки зрения простого программиста. Покажу на примере.
Предположим, нам нужно вычислить
package main
import (
"io"
"os"
"crypto/sha512"
"encoding/hex"
"runtime"
"strconv"
)
func main () {
ch := make(chan string)
N := 3
runtime.GOMAXPROCS(N)
for i := 0; i<N; i++ {
go func (name string, num int, ch chan string) {
if f, err := os.OpenFile(name, os.O_RDONLY, 0666); err == nil {
defer f.Close()
h := sha512.New()
io.Copy(h, f)
ch <- strconv.Itoa(num) + ". " + hex.EncodeToString(h.Sum())
} else {
panic("Cannot open file")
}
}(os.Args[0], i, ch)
}
for ; N > 0; N-- {
print(<-ch, "\n")
}
}Что здесь происходит.
Первая строка объявляет имя модуля, для основного модуля программы это имя должно быть «main», эта конструкция скажет компилятору, что именно тут находится входная точка нашей программы. На первый взгляд кажется, что в основном модуле можно было бы просто не указывать имя, но язык придерживается хорошего принципа «явное лучше неявного», чем он мне очень симпатичен.
Дальше, очевидно, подключаются модули, в языке базовых функций почти нет, поэтому даже для такой небольшой программы мне понадобилось шесть модулей: «io» для копирования данных из одного потока в другой, «os» для работы с файлом, «crypto/sha512» для хеширования, «encoding/hex» для кодирования получившейся
Функция main — входная точка основного модуля программы, именно она (как в «Си») вызывается в самом начале.
Далее я создаю (make) небуферизированный «канал» и объявляю, что по нему будут идти строки, конструкция «:=» многим напоминает Паскаль, но отношения к нему не имеет, это синтаксический сахар для создания локальной переменной. «Канал» — это хорошее, говорящее название, хорошо отображающее суть, это действительно канал общения
В цикле создаются и сразу запускаются в фоне (конструкцией «go») на выполнение N
Внутри
Цикл не ждёт выполнения
Дальше идёт второй цикл, где N раз запускается команда на чтение из канала („… <- ch»).
Чтобы убедиться, что
У такой лёгкости использования есть свои ограничения, но об этом
Какой язык программирования изучать на перспективу
Меня тут недавно спросили — какой язык программирования следует изучить на перспективу. Я ответил в том духе, что никаких формальных признаков того, что язык будет перспективен лет через пять, не существует и до сих пор думаю, что прав. В самом деле, если взять «моду» на языки за последние десять лет, видно, что их успех определяется подводными течениями, которые со стороны увидеть трудно, компании неисповедимы, могут «выстрелить»
Правда потом, по пути домой я задумался над этим более глубоко и теперь считаю, что популярность должны набирать языки, в которых легко, на уровне языка, делается параллелизация. Дома у меня меня ремонт сейчас
Над цифрами выше трудятся уже только оверклокеры, заливая штаны жидким азотом. Гонка частот уже, кажется, остановлена, началась гонка за количество ядер. Недавно был выпущен первый смартфон с четырьмя процессорами, а рабочая станция «Мак Про» поставляется в топовой конфигурацией с 12 процессорами. Сегодня на «Хабре» появилась новость о процессоре GA144, который будет продаваться за шестьсот рублей. У него 144 ядра.
Не говоря уже о GPU, у которых количество ядер приближается к тысячам.
Если взять
Причём «легко» не обязательно даже так, как это сделано в «Гоу» (хотя и желательно) — отдельной конструкцией языка (go), нет нужды сводить к этому всю идеологию языка, как в «Эрланге», просто чтобы это делалось, в тривиальных случаях,
Например, на «Пайтоне»
@fork
def sort(arr):
arr.sort()
return arr
# тут функция начала фоном работать
result = sort(somearray)
… много кода …
# а тут уже доступны результаты, если недоступны, то будем ждать
print([el for el in result if el])Да, это не особо эффективно, нас уже приучили разбрасываться памятью, но ещё не приучили с лёгкостью разбрасываться ядрами, ничего привыкнем, когда их станет, как грязи.
Пока, наверное, верится с трудом. Но мой первый
Игорь Растеряев
Меня тут спросили какую я музыку слушаю. Я иногда клипы сюда вставляю или слова песен. Это всё то, что мне нравится. Недавно увидел Игоря Растеряева, хорошие слова, гармошка и «клипы», снятые на сотовый телефон. Мне очень нравится, есть за этим
Автор слов и музыки — сам Игорь.
Археологи будущего о сигаретах

В Таллине, где мы были летом, посещали экскурсию по Бастионным ходам. Там в конце экспозиции показывали каким может стать Таллин в будущем. Один из стендов по этой теме показывал фантазии на тему какие объяснения могли бы дать археологи будущего о вещах, которыми мы пользуемся в наше время.
Антитабачную тему одной из таких фантазий я, конечно же, не смог обойти вниманием и сделал кадр.
«Двести баксов»
Очень не люблю, когда люди указывают цены в долларах. «Я тут продуктов купил на 235 баксов». Сколько это вообще? Как я должен пересчитать? Я вот сейчас специально зашёл на РБК, чтобы посмотреть сколько там курс доллара, в последний раз я его смотрел около года назад, когда в Египет ездили отдыхать с женой.
Я помню времена, когда буквально всё каждый день дорожало на десятки рублей, а свой первый деловой костюм для работы я купил за сто долларов прямо в магазине, то есть в России (это конец девяностых был) брали доллары. О зарплате договаривались только в долларах, иначе через месяц можно было получить ощутимо меньше денег в плане покупательной способности.
Вот тогда был смысл говорить цену в долларах, так как цены в рублях были бессмысленны, предыдущий опыт покупки на рубли не позволял понять что на них можно купить завтра.
Сегодня упоминание цен в долларах выглядит анахронизмом, только если вы действительно не платили долларами и вам лень цену на рубли пересчитать.
«Здравствуй, мир» на Коболе
Я
Вот так выглядит моя первая программа на Коболе:
000100*Моя первая программа на Коболе
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. hw.
000400 AUTHOR. Evgeny Stepanischev
000500 PROCEDURE DIVISION.
000600 DISPLAY "Привет, мир!".
000700 STOP RUN.Первые шесть символов каждой строки — её номер, как легко догадаться. В современном Коболе их можно опустить (OpenCobol поддерживает этот синтаксис с ключом
В старом Коболе очень жёсткий порядок всего и вся. Мало того, что секции программы должны быть описано в строгом порядке, так ещё и столбец тоже имеет значение! То есть Кобол строго следит за отступами. Например, мой код с DISPLAY и STOP RUN начинается
Язык очень многословный и имеет целую тучу зарезервированных слов, некоторые из которых весьма доставляют:
bolk@Bolk ~/Projects/Cobol $ cobc --list-reserved | wc -l
530
bolk@Bolk ~/Projects/Cobol $ cobc --list-reserved | egrep '[[:digit:]]' | egrep -v 'UTF|UCS|FLOAT'
COMP-1 (Y)
COMP-2 (Y)
COMP-3 (Y)
COMP-4 (Y)
COMP-5 (Y)
COMPUTATIONAL-1 (Y)
COMPUTATIONAL-2 (Y)
COMPUTATIONAL-3 (Y)
COMPUTATIONAL-4 (Y)
COMPUTATIONAL-5 (Y)
STANDARD-1 (Y)
STANDARD-2 (Y)
SUB-QUEUE-1 (N)
SUB-QUEUE-2 (N)
SUB-QUEUE-3 (N)Как я буду учить это всё великолепие, пока не знаю, не уверен, что интерес к языку у меня настолько глубок. Впрочем, может оказаться, что бо́льшая часть из указанных 530 зарезервированных слов нужны в жизни очень редко. А ещё, бегло пробежавшись по документации, я нашёл большое количество синонимов. За примерами далеко ходить не надо,
Всякая мелочь одним постом-5
Сейчас, конечно, многое собирается в Китае, но это ещё не значит, что КНР перестала производить, то что пренебрежительно называется «китайские подделки», разобрав однажды безымянный антенный усилитель вы вполне можете обнаружить, что «у ней внутре неонка».
Leon_sbp67 в своём ЖЖ справедливо критикует известный пропагандистский ролик «путинские сказки».
«Гугл мапс» обновил карты и внимательные пользователи нашли на них
Звездой интернета, думаю, неожиданно для себя стала некая Любовь Матвеевна за оригинальный подход к воспитанию собственных детей — она спрашивает совета на сайте «Ответы мейл.ру» по очень волнительным поводам. Например: «решила продать кровать дочери, пусть спит на полу» или «хочу за проступки сына наказывать дочь, а за проступки дочери — сына» или «хочу заставить сына ходить на физкультуру не в костюме „Рибок“, а в советском трико». Очень надеюсь, что это
Полезное — таблица символов Юникода, все символы в таблице (строится по мере прокрутки), заодно увидете, что поддерживает ваши система и браузер, а что нет.
Интервью «Артджокеру»

Вышло интервью со мной в «Артджокере»: «Заноза в пятницу. Интервью с Евгением Степанищевым».
Как заменить табы, используя sed
Утилита командной строки sed (это потоковый редактор),
Я немного поэксперементировал, оказалось, что sed вполне воспринимает этот символ как таковой, а все «магические выражения» не работают. Поскольку «таб» имеет специальное значение в командной строке, ввести его можно либо через комбинацию Ctrl+V, tab, либо Ctrl+V, Ctrl+I. Во многих шеллах (например, в bash, ksh, sh) сработает специальный синтаксис с долларом, как в примере ниже.
Например, если вам надо заменить последовательные «табы» на один, то это может выглядеть вот так:
sed $'s/\t\t*/\t/g' sample.txt # именно \t\t*, а не \t+
# или
sed -E $'s/\t+/\t/g' sample.txt # в Линуксе ключ „-r“Если вы знаете как в sed можно работать с tab проще, расскажите, пожалуйста, в комментариях.