Ещё о PowerShell
cat user-agents.log | sort -uодинаково работает и под bash и под PowerShell! Конечно, более «чистый» PowerShell выглядит как на листинге ниже:
Get-Content user-agents.log | Sort-Object -uniqueКоманда
Или вот, на bash не совсем похоже, но что проиходит догадаться просто:
ls | where {!$_.length} | %{rm $_}С наступающим новым годом!
perl -MEncode -e '
$_ =
"1101000100100000111011011110111011100010111110111110110000100000111000111110111011100100111011101110110000100001";
@x = /(d{8})/g; print Dumper @x; print encode_utf8(decode("cp1251", chr(eval "0b$_"))) for @x; print "n"'
python -c "print ''.join((lambda s: [chr(int(s[x:x+8], 2)).decode('cp1251') for x in xrange(0, len(s), 8)])(
'1101000100100000111011011110111011100010111110111110110000100000111000111110111011100100111011101110110000100001'))"
php -r 'echo iconv("cp1251", "utf-8", join(array_map("chr", array_map("bindec", str_split
("1101000100100000111011011110111011100010111110111110110000100000111000111110111011100100111011101110110000100001",
8)))));'
powershell -Command "[system.string]::join('', @([regex]::split(
'1101000100100000111011011110111011100010111110111110110000100000111000111110111011100100111011101110110000100001',
'(.{8})') | Where {$_} | %{ [Convert]::ToInt16($_, 2)} |
%{[System.Text.Encoding]::GetEncoding('utf-8').GetString([System.Text.Encoding]::
Convert([System.Text.Encoding]::GetEncoding('windows-1251'),
[System.Text.Encoding]::GetEncoding('utf-8'), [byte]$_))}))"Вариант на Перле — Вячеслава Матюхина, остальные — мои. Текст на Powershell выглядит монструозно, но на деле там самый страшный кусок — перевод байтовой строки cp1251
У нас матерятся
Вы уже нашли вариацию на любимое слово Лебедева на ежегодной фотографии студии? Оно именно там, где я и предполагал. Я, кстати, так и не нашёл его в прошлом году.
Chrome/0.X.Y.Z
Автоматические ходилки такие автоматические. Их авторы забивают
- Как выглядит строка user agent в Google Chrome?
Строка user agent в Google Chrome выглядит следующим образом:
Mozilla/5.0 (Windows; U; Windows NT 5.1;
en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.X.Y.Z Safari/525.13.
Нет проблем. И вот в логах за вчера я уже вижу строчку «Mozilla/5.0 (Windows; U; Windows NT 5.1;
«Переговорки»: панихида
Проект «Переговорки» — внутренний
Используется он теми, кто не может установить себе Outlook — ребятами с «Маками» и разнообразными «Линуксами» (а таких очень много). Кроме того, что от Exchange мы будем постепенно уходить, а интерфейс бронирования останется без изменений.
Никогда я ещё так не выкладывался, так не радовался, не расстраивался, не оставался с таким упорством допоздна в офисе. Звучит просто — вытаскивать время от времени данные из Exchange и отсылать обратно новую бронь. К сожалению, MS Exchange, который использовался тогда в компании, не умел общаться с внешним миром никак иначе, кроме протокола MAPI — бинарному исчадию ада, причём не просто через MAPI, а через так называемый MAPI через RPC — диалект
Помню, первое, что пришло на ум использовать — impacket, модуль для Python, который позволял работать с «сырыми» пакетами, но к нему не было документации, а примеров в сети нашлось всего ничего — несколько эксплоитов и только. Впрочем, разобраться
Из бесплатных библиотек уровнем повыше нашлась
Это и положило начало проекта «Переговорки».
Процедура компиляции оказалась весьма нетривиальной, собиралась только версия из транка, и та только с моими правками. Ещё сложнее оказалось разобраться с утилитами, которые требовалось запустить после исталляции, но и эту проблему удалось победить, собрав скудные крохи по форумам и написав несколько писем разработчикам. Позднее Сергей Белов сумел установить появившийся свежий
Через несколько дней после того как я в первый раз скомпилировал libmapi, тестовые утилиты на Си благополучно подключились к Exchange и уже умели отпределять дают им правильные данные для авторизации или нет. Эти несколько дней ушли на то, чтобы разобраться как создавать профиль, как настраивать библиотеку и Samba4 для работы и так далее. Оставалось
1275 строк основного модуля, 647 строк файла описаний структур MAPI, 4046 констант, 457 строк для описания
Ничего, пара дней корпения над бинарной распечаткой с последующими уточнениями в противоречивой документацией от Microsoft и я написал класс, который такие встречи умеет разбирать. Впрочем, это было уже позднее, а сначала надо было догадаться что делать после логина. Из документации у libmapi — только перечень функций и исходники на Си. Пришлось внимательно просматривать первое и читать второе. Тут нельзя не упомянуть Сергея Андрюхина, несколько очень ценных его идей и исследований вошли в тот код. Кстати, местами исходники на Си написаны так плохо, что приходилось упрощать код — не всё, что можно позволить себе в Си, можно позволить себе в менее шустром «Пайтоне».
Разобраться с порядком вызова этого великолепия было непросто, плюс ещё множество более мелких проблем, вроде странного формата хранения времени (Exchange хранит число минут с 1 января 1601 года). Плюс утечки libmapi, которые пришлось изолировать, решать проблему с передачей данных в родительский процесс, мучаться с Python 2.4, который, как оказалось, никогда не освобождает память, выделением памяти на куче «про запас» через Python API (спасибо ctypes), определением по косвенным признакам, что память закончилась, пора отдать данные в родительский и умереть, и так далее.
Сначала мы научились читать freebusy информацию — просто даты и время, когда переговорка
Класс пережил четыре рефакторинга, например, я обернул некоторые структуры классами с деструктором, чтобы было проще следить за памятью (так как ctypes работает с бинарным кодом за памятью приходилось следить самостоятельно), что, правда, всё равно не спасло от всех проблем — структуры, в некоторых случаях, нужно было уничтожать в строго определённом порядке.
Спасибо Саше Покатилову, который правил мой код, пока я был в отпуске и занимался
Наверняка я не помню ещё массу сложностей, которые мы решали, например, я совсем не рассказал как мы отправляли бронь встречи по протоколу SMTP, как долго я готовил разные версии письма
Думаю, если попробовать вспомнить всё, хватит на небольшую книгу… Я рад, что эту невероятную задачу удалось решить. С моей стороны, как мне кажется, это 100% моей «мощности» как программиста. Будущее покажет, но пока все задачи я буду оценивать по этой.
К счастью, в новом Exchange, который появился у нас в компании, появилась поддержка SOAP и «Переговорки» переделали с использованием этого протокола. Есть предварительное согласие на выкладывание модуля, который у меня тогда получился в интернет. Пожалуй, сейчас он бесполезен (хотя, может авторы libmapi запрограммируют на его примере чтение повторяющихся встреч, попробую им его кинуть), но пусть он всё равно полежит у меня, как памятник полугоду моей жизни.
Курите, снижайте конкуренцию!
В ДНК рака легких генетики насчитали 23 тысячи ошибок — в значительной степени спровоцированных воздействием табачного дыма.
Из этого ученые сделали вывод, что у среднего курильщика на каждые 15 выкуренных сигарет приходится по одному нарушению генетического кода.
Статья в BBC Russian «Ученые расшифровали генетический код раковых клеток».
Yahoo! и nofollow
Оказывается, поисковая машина «Yahoo!» тоже поддерживает rel=«nofollow». Кстати, у них в руководстве ошибка:
For instance, websites with public comment areas can apply a «nofollow» attribute to publicly entered links to help fight comment spam.
Applying the rel=«nofollow» Attribute:
Example: <a href=«http://spammer.example.com/»>buy now
changes to: <a href=»http://spammer.example.com/ rel=nofollow«>buy now
А ещё «Yahoo!» выставляет странный заголовок:
Ой-йо
CSS hack для Firefox 3.5
В комментариях на «Хабре» попросили придумать
<style type="text/css">
x:-moz-any-link:nth-child(0), body { background: red; } /* FF 3.5+ */
</style>Проверил в Firefox 2.0.0.19, Firefox 3.0.3 и в Firefox 3.5.5.
Ура, подживает!
Сегодня попробовал (с разминкой) толкнуть 88, оценить будет ли болеть трицепс. Ура! Не болел абсолютно. Толкнул 6 или 7 раз, значит форма почти не потеряна. Пока больше брать не буду, пусть подживает дальше.
CSS hack для Opera 10.50, 10.xx, не 10.50
«Опера» 10.50 стала поддерживать
Например, у меня на сайте скруглённые уголки для «Оперы», начиная с версии 9.50 делаются при помощи SVG, 10.50 вполне могла бы нарисовать их без этого «изыска».
<style type="text/css">
@media (0) {
body { background: red; } /* Opera 10.xx, но < 10.50 */
}
@media all and (resolution = 0dpi) {
body { background: red; } /* Opera < 10.50, минимальной версии не знаю, 9.27 работает */
}
@media all, () {
body { background: red; } /* Opera 10.xx (включая 10.50) */
}
@media all, {
body { background: red; } /* Opera 10.50 prealpha */
}
</style>Нужно понимать, что хаки сделаны исключительно для того, чтобы отличить одну версию «Оперы» от другой и могут сработать в других браузерах, так что лучше подстраховаться и добавить в стили
Я не знаю минимальной версии при которой срабатывает хак №2, но подозреваю, что будет работать
Все хаки я испытывал на «Операх» 10.50 prealpha, 10.10, 10.01, 9.50 и 9.27. Надеюсь, баг 10.50 не исправят и хак будет работать и дальше (pepelsbey, пожалуйста, молчи!:).
Добавлено 25 декабря 2009 10:38: проснувшись утром, я обнаружил, что умудрился ночью запостить этот текст два раза. Решил удалить один из них и удалил тот, что с комментариями. Простите, это утро :(
XML в MySQL
Кавычки вокруг слова «чудесный» какбэ намекают, что я
Речь идёт о двух функциях — ExctractValue и UpdateXML. Если в поле таблицы хранится XML, то первая функция позволит выбрать данные при помощи XPath, а вторая — (при помощи XPath же) изменить
Примерно так:
SELECT ExtractValue('<a>c</a><b/>', '//a');
SELECT UpdateXML('<a><b>ccc</b><d></d></a>', '/a', '<e>fff</e>');
SELECT * FROM users WHERE ExtractValue(info, '//firstname') == 'Иван' AND ExtractValue(info, '//surname') == 'Сагалаев';В случае, если XPath не дал результата или в поле оказался не XML, функции вернут NULL (версии MySQL до 5.1.12 содержат баг и частично могут работать даже
Скороговорка
Пайтонячья скороговорка:
import pprint as pprint
pprint.pprint(pprint)Добавлено 24 декабря 2009 14:08: вариант от Бобука,
from pprint import pprint as pprint
locals()[pprint.__name__](pprint)--5
Это прекрасный образец рака мозга, ящитаю:
<?php
function turn($x)
{
$y = abs($x);
if ($y == $x)
return "-$y";
else
return "$y";
}
?>
You can use this code:
<?php
echo turn(-5) + turn(10);
?>
The output is:
-5
;
Because 5 + -10 = -10Цитата — из пользовательского комментария к функции abs языка PHP. Для тех, кто далёк от программирования, побуду Капитаном Очевидностью.
Функция меняет знак числа (т. е. было
Правильный ответ:
function turn($x) { return -$x }не стоит того, чтобы оформлять его в функцию.
Что имел ввиду автор, когда писал «Because 5 + -10 = -10» я не знаю, надо Смирнова спросить, он понимает язык идиотов.
«Райффайзен» жжот

«Райффайзен» каждый месяц исправно шлёт мне письма с требованиями погасить задолжность в «0.00», причём указывает срок погашения. Их кредитной картой я не пользуюсь (не устраивает, что если снять наличку, то они сразу берут довольно немаленький процент) и даже ни разу не вводит
Фотосессия в мехах
Одним из подарков жене на день рождения (был чуть меньше месяца назад) была фотосессия в мехах — «приключения в подарок» от магазина «Экспедиция». Получились 428 фотографий в красивых, дорогих мехах, из которых мы с женой должны были выбрать шесть, чтобы фотограф выровнял на них освещение, цвета и так далее (вот только веснушки он зря замазал, осуждаю).
Сегодня мне прислали результат. Какая же у меня

Opera 10.50 pre-alpha
Opera 10.50
Это далеко не всё, лучше прочитать остальное на сайте «Оперы».
Скриншоты изменения скорости, которые утекли в сеть несколько дней назад, говорят о том, что скорость этого билда на уровне последних билдов Chromium.
Оперкут
В книге Андрея Некрасова «Приключения капитана Врунгеля» апперкот называют «оперкутом»:
Мистер Денди дрался блестяще. Я получил жестокий удар в переносицу, но тут вспомнил молодость, пришпорил Фукса, перешел в инфайтинг и нанес противнику сокрушительный оперкут.
Там же упоминаются почти забытые слова «ходики» и «кооптировать».
Нельзя опознать незнакомое
Кэмерона некоторые зрители и критики упрекают в том, что при создании мира Пандоры он, дескать, был неоригинален. Пандорианцы, говорят они, напоминают индейцев, летающие банши — драконов, такая растительность была в «Долине папоротников», некоторые животные явно взяты из документальных морских проектов Кэмерона, тема «древа жизни» вообще была сто раз — ну и так далее.
На это можно сказать следующее. Ребята! Невозможно придумать ни на что не похожий мир! Ну не бывает такого! То, что человек никогда не видел, он не может воссоздать!
Это из рецензии Экслера на фильм «Аватар». Проблема, мне кажется, не в этом. Я верю, что вполне можно создать
Вот мы создали хрен знает что, которое ходит, как зрен знает что, выглядит, как хрен знает что и пахнет, как хрен знает что. Так что это за хреновина? Создай
Как переживать непонятное? Как ему сочувствовать, сопереживать? И оно мне надо? Интереса не больше, чем смотреть калейдоскоп.
Вот почему мир «Аватара» другой, но очень похожий. Там всё непривычно и знакомо, а народ на’ви плачет, когда видит смерть близких, кивает, когда согласен и целуется в губы, хотя даже на нашей планете есть народы, которые ведут себя иначе.
«Альфа-банк». Вы кто? Правда? Точно?
Чтобы оплатить телефон через
Тройная авторизация! Что за паранойя?