Про вакцины
Президент Калифорнийской некоммерческой корпорации «Natural Woman, Natural Man, Inc.» Джок Даблдей предложил $20000 первому из врачей или руководителей фармацевтических компаний, кто публично выпьет смесь стандартных добавок, имеющихся в большинстве вакцин, в том же количестве, которое, в соответствии с рекомендациями Центра Профилактики и Контроля заболеваемости США 2000г, получал шестилетний ребенок.
Эта смесь не будет содержать действующего начала вакцины — живых или убитых вирусов или бактерий. В её состав войдут только стандартные добавки к вакцине в их обычных формах и пропорциях (…)
— с сайта «Вакцинация — панацея или смерть».
Хотя тут речь идёт немного о другом, но и с самими вакцинами мне совершенно ничего не понятно. Где правда, не говоря уже об истине? Заказал на «Озоне» книгу «»Беспощадная иммунизация — правда о прививках», Александра Котока (в формате fb2 не смог найти), жду.
Кредитка vs. наличные
Только что, в первом эпизоде восьмого сезона сериала «Монк» я услышал как героиня спрашивает: «вы наличные принимаете?». Возможно я слышал это в американских фильмах и раньше, но не обращал внимание, а сейчас задумался.
Я в магазинах в России спрашиваю принимают ли они банковские карты, а там ситуация обратная — вопрос в том принимаются ли наличные.
Пинг-понг
Журналисты «Look at me» взяли небольшое интервью для статьи «
Пайтон: замкнувшее замыкание
Есть немало вещей, которые мне не нравятся в Пайтоне. Не так давно мы на работе наткнулись ещё на одну.
У нас есть код, который выглядит примерно так (можно написать и одну функцию, но так нагляднее):
def outer(useless = None):
def inner():
if useless is None:
print "Pichal'ka"
return inner
outer()()Ничего необычного, одна функция определяется внутри другой, использует переменную используя переменную из внешней функции. Всё логично, всё работает.
Теперь меняем код:
def outer(useless = None):
def inner():
if useless is None:
print "Pichal'ka"
# тут много кода, начало мы уже потеряли
if False: useless = None
return inner
outer()()Запускаем код и видим (Пайтон 2.6.5):
Traceback (most recent call last):
File "sample.py", line 10, in <module>
outer()()
File "sample.py", line 3, in inner
if useless is None:
UnboundLocalError: local variable 'useless' referenced before assignmentКакими бы благородными мотивами не руководствовались создатели Пайтона, мне такое поведение не нравится. Вдруг я забыл как переменная попадает в функцию, присвоил ей
Избавиться от эффекта можно, изменив прототип внутренней функции на «inner(useless=useless)».
То же, кстати, происходит при импорте модуля:
import random
def outer():
print random.choice
#import random
outer()Раскомментируйте строчку со вторым импортом и получите ошибку.
Все эти ошибки возникают
Я не придумал хороших причин так делать с точки зрения языка (может их
Сколько есть способов восстановить chmod?
Иногда на собеседованиях спрашивают такую задачу, на соображалку: предположим вы случайно сняли права исполнения с команды chmod. Как их восстановить?
Я решил подумать сколько способов исправить эту ситуацию я знаю.
Первый способ — скопировать chmod с соседней машины при помощи scp, sshfs и т. п. Если такая машина имеется, конечно.
Способ второй:
cp /bin/sh ~/chmod2
cat /bin/chmod > ~/chmod2
sudo ~/chmod2 +x /bin/chmod
rm ~/chmod2Третий способ (при условии, что у вас
sudo apt-get --reinstall install `dpkg -S /bin/chmod | cut -f1 -d:`Способ четвёртый:
gcc -x c - <<CHMOD
#include <sys/stat.h>
main(){chmod("/bin/chmod", S_IXUSR | S_IXGRP | S_IXOTH);}
CHMOD
sudo ./a.out
rm a.outКто ещё знает способы?
Группа → служба
Стал руководителем службы разработчиков внутренних сервисов «Яндекса».
Террористов бояться — метро не ходить
На перегоне «Чистые пруды» — «Красные ворота» ко мне подходит молодой мужчина: светлоглазый,
белесо-рыжеватый, в чем-то ярко-желтом. Подбивает клинья, спрашивает, что читаю. (…)Приглашает посидеть в кафе. Вежливо говорю «Спасибо, нет» и продолжаю читать, не смотря на него и не реагируя на дальнейшие реплики. Тот заявляет: на следующей мы с тобой выйдем. Замолкает. Через 15 секунд — станция. Тот требует выйти, угрожая, что иначе закричит, ЧТО Я ШИХАДКА, позовет милицию и меня посадят. (…)
Мужчина кричит на весь вагон: «Люди, в вагоне шахидка, спасайтесь! Люди, она — смертница! СМЕРТНИЦА!», дергает меня сильней, я слетаю с места. (…)
Смотрю на оставшихся мужчин и не понимаю, почему они мне не помогают, видно же по ним, что не трусы?! Соображаю, что приняли за истеричную семейную пару и не решаются вмешаться: грубую
силу-то мужик не применяет. Кричу: «Мы НЕ ЗНАКОМЫ!» Тут же с места срываются «вахаббиты» и пара парней славянской внешности, оттесняют мужика на станцию, потом трое остаются со мной в остановленномиз-за паники вагоне и успокаивают.
Из ЖЖ несостоявшейся «смертницы».
Из этой истории целых два интересных вывода.
Инцидент на станции столичного метро «Красные ворота». Один из пассажиров попытался задержать неизвестную, которую принял
за террористку-смертницу. Об этом сообщил наш корреспондент, который стал очевидцем инцидента.
Если интересно, можно ещё и послушать, там подробнее.
Опоздали на самолёт

В первый раз в жизни опоздали с женой на самолёт. Я расcчитывал время — когда надо выйти с работы, чтобы успеть домой, доехать на метро до вокзала, а оттуда уехать в аэропорт по расписанию. В одном месте опечатался на час, в итоге опоздали на регистрацию на десять минут. Увы, как мы ни просили, на борт нас не взяли.
Ехали в Казань поездом. Проводник предложил доплатить с плацкарты, чтобы перейти в купе (сторговались на тысячу), ехали ночь в купе для проводников. Это интересный опыт. Ехали вдвоём — там всего два места, есть собственная розетка, собственное освещение и за чаем выходить — два шага. Единственный недостаток — два раза ночью стучались, будили, думали, что мы проводники, спрашивали нельзя ли пиво купить. После этого мы научились не реагировать.
Монк и обувь
Заметил, что в сериале «Детектив Монк» главный
Видимо при всех странностях Монка, снимать обувь в квартире, по американским меркам, уж чрезмерно странно.
Советские деньги

Я не знаю среднего возраста своих читателей, но знаю наверняка, что по меньшей мере несколько человек уж точно жили в советские годы. На снимке — моя коллекция советских юбилейных монет (собирал в советские годы), плюс пачка советских бумажных денег, историю происхождения которой я помню весьма смутно.
Есть ещё небольшая коробка монет, которые остались у родителей с тех времён. А у вас сохранились советские деньги? Что вы с ними планируете делать? Хранить? Выкинуть? Продать?
Изменения в speeddial новой альфы «Оперы»
Ребята из «Оперы» экспериментируют с возможностями SpeedDial в своём браузере. Помните, я писал о специальных версиях некоторых сервисов «Яндекса» для SpeedDial?
К сожалению, «Опера» их разломала в свежей альфе, зато добавила новую возможность, которой очень нехватало: специальным заголовком
Preview-refresh: 10или
<meta http-equiv="preview-refresh" content="10" />Время указывается в секундах. Кстати, теперь можно надёжно узнать через media queries, что «Опера» показывает страницу в SpeedDial: достаточно проверить, что
Почтовый клиент в виде IM
Я тут осознал, что 90% несрочных сообщений мне всё равно проще написать в джаббер, чем в почту. Я не знаю почему, пока не понял. Может это проще? Легковеснее? Когда приходится писать в почту сообщение
У вас такого не бывает? Конечно, когда надо ответить на длинное письмо с кучей цитат, да ещё, если это часть сложного треда, то лучше это делать в почтовике, но у меня таких только 10% всей переписки.
И я вот тут подумал — а нет ли почтового (SMTP/IMAP4) клиента в виде IM (как это сейчас
Лайки (не про собак)
Хочу провести эксперимент — поставил под каждым постом «лайки» с трёх социальных сетей («Вконтакте», «Фейсбук», «Твиттер»), посмотрим что получится, если я их правильно настроил, конечно.
Пока меня смущает, что они очень медленно загружаются.
Добавлено позднее:
Турция

Со второго по девятое апреля едем в Турцию, в Анталию, отель «Sherwood Breezes Resort» 5★. Не знаю почему, но оба чувствуем нечеловеческую усталость, хочется отдохнуть.
Планируем поваляться немного на пляже и съездить в Стамбул на экскурсию, я много слышал хорошего об этом городе от своего доброго знакомого Саида Кадырова (он там жил и работал). В море, увы, будет холодно — обещают температуру воды
Кто был в Турции, расскажите что нужно знать? Куда ещё можно съездить, куда ходить, куда не ходить?
Одно из различий Python и JavaScript
Чем дальше, тем между большим количеством языков программирования мне приходится переключаться. Одно из различий объектной модели Пайтона и ДжаваСкрипта мне портит кровь (у них парадигмы ООП вообще сильно различаются), если я вовремя не соображу, что надо переключиться с одного языка на другой.
Суть в том, что в Пайтоне метод ходит в гости со своим контекстом:
class A:
test = 'A'
def show(self): print self.test
class B: test = 'B'
a, b = A(), B()
show = a.show
b.show = a.show
show() # A
b.show() # AТогда как в JavaScript такой код будет работать совершенно иначе, там методы в чужой монастырь со своим уставом не ходят (если их не попросить):
var test = 'global';
A = function () {
this.test = 'A',
this.show = function () { alert(this.test) }
};
B = function () { this.test = 'B'; }
a = new A(); b = new B();
b.show = a.show
show = a.show
show() // global
b.show() // B
b.show.apply(a) // AПоявление «global» наверное надо разъяснить тем, кто JS знает плохо. На самом деле первая строчка (в данном случае) может читаться как «window.test = ’global’», а «show = a.show» как «window.show = a.show», тогда, должно быть, всё
Москва ✈ Симферополь ✈ Москва
C
Как посмотреть какие каналы WiFi используются
У Паши Катурова увидел хорошую программу под Windows, называется inSSIDer 2 (есть и под Linux, кстати), позволяет посмотреть какой канал
Если упрощённо, чем больше
Моя точка (по уровню сигнала легко понять, что я её назвал «WiMAX») работала на каналах №№1 и 5. На первом висят уже несколько точек, поэтому я переместил свою точку на третий и седьмой каналы (стоит походить по квартире, в разных участках могут быть видны различные точки).
Кстати, легко видеть, что трое моих соседей используют шифрование WEP, которое взламывается минут за 10—15 и ни одна из точек (кроме моей) не поддерживает полноскоростную категорию «n».
Добавлено: в комментариях (спасибо!) напомнили о проблеме, которую я уже успел начисто забыть: каналы WiFi перекрываются. Есть хорошая картинка, показывающая как именно они перекрыты, заодно она объясняет почему все мои соседи выбрали канал 1, 6 или 11. Руководствуясь этими данными, я выключил второй канал (всё равно устройств «n» у меня пока нет) и переставил свою точку на 13.
На закладке «2.4 GHz Channels» (это частота, на которой работают устройства категорий «b», «g» и «n»), можно визуально оценить как ваша точка использует частоты и где располагаются точки соседей. У меня сейчас картина такая:
Как видно я занимаю канал №13, который частично перекрывается с каналами 8—12, уровень сигнала моей точки у меня в квартире заметно выше соседских, кроме того, половина моего канала никем, кроме меня не занята.
При густой «населённости» правило, видимо, такое: старайтесь не делить канал с точками, которые приближаются к вашей по уровню сигнала.
Правда я ещё не до конца уверен правильно ли я сделал, что отключил второй канал у точки. Надо читать. Насколько я понимаю, мои устройства (а у меня их адово количество — 8 штук) могли раньше коннектиться по любому из двух каналов, чтобы меньше друг другу мешать.
Перепрошил Intel WiFi 5100 ABG → ABN
Этот набор букв в заголовке означает, что благополучно перешил свой
Если вы хотите повторить мой путь, то учтите, что можно легко запортить карту, а восстановление испорченной карты дело непростое. Итак, если вы решились (я перепрошивал
Для начала вам потребуется последняя версия программы
Шаг второй — нужно выяснить адрес вашей карты. Для этого откройте диспетчер устройств и найдите там ресурсы вашей карты, как на скриншоте:
Как видно, адрес моей карты — F69FE000. Убедитесь, что правильно копируете это число. Это важно.
Скачайте скрипт, который поможет вам сдампить текущие данные вашей карты, во второй строчке этого скрипта замените «########» на адрес вашей карты.
Запустите
Скачиваете скрипт, который пропатчит вашу карту, опять же, вместо «########» нужно написать адрес вашей карты.
Снова открываете в меню «Command», в длинное текстовое поле копируете скрипт (с заменённым адресом), нажимаете «Enter», когда скрипт завершит свою работу (курсор станет обычным, а в окне под текстовым полем появится лог работы скрипта), перезагружаете компьютер.
Молитесь. В нормальном случае, Windows скажет, что обнаружено новое устройство и поставит драйвер для карты Intel 5100 ABN. Если карта пропала, то, увы,
Добавлено: тут надо пояснить почему вообще есть возможность перепрошить этот адаптер на категорию «n». Всё дело в том, что он уже поддерживает эту категорию, и на уровне железа, и на уровне прошивки. Просто эта возможность там выключена. Как я понял
Интервью: 5shots
Вышло интервью со мной на проекте «5 шотов».
Москва ✈ Нижнекамск → Лениногорск → Бугульма ✈ Москва
Неожиданно узнал, что папа
60 лет папе, даже не верится… Решил, что надо обязательно приехать, поэтому меня сегодня ждал квест «спанируй поездку в Лениногорск за несколько часов» и всё это при том, что мне сегодня ещё в НДВ ехать, насчёт квартиры (пишу как раз из офиса этой компании).
В общем, успешно: взял один из последних билетов «ЮТэйр» в Нижнекамск, оттуда на машине в Лениногорск, день там, потом на машине в Бугульму, оттуда авиакомпанией «АкБарс Авиа» в Москву. Итого, всю пятницу
На всякий случай (для родителей) пишу рейсы и время сюда:
Москва → Нижнекамск, «ЮТэйр» UT 187, вылет 17 марта 21:10, прилёт 23:10 Бугульма → Москва, «АкБарс Авиа» БГ 529, вылет 19 марта 6:50, прилёт 8:20
К сожалению, жену так не отпустят, тем более, что у неё
Полупереваренные мысли в блоге
Я думаю, что для некоторой части читателей я побуду Капитаном Очевидностью, но нужно же и до остальных донести мысль, которую я сейчас попытаюсь сформулировать.
Для начала определимся: одним из необходимых свойств блога я считаю частоту появления в нём материалов. Не берусь её сейчас выводить, но мне кажется очевидным, что она должна быть очень высокой.
Очевидным так же кажется, что при высокой частоте появления материалов, мысли на блоге будут, большей частью, «полуфабрикатами». Одна из причин, по которой я веду блог — это помощь читателей в том, чтобы эти мысли «доварить».
Я часто на собеседованиях наблюдаю положительное явление — процесс рассуждения, озвучивание пути по которому идёт мысль собеседуемого. Блог — набор «слепков», в случайные моменты времени снятых с этого процесса обсуждения. В этом отличие заметок блога от серьёзных, проработанных статей.
Этот момент надо чётко понимать.
В общем, блог — это стробоскоп в ночном клубе.
Аэропорт Бугульмы



Я в первый раз побывал в аэропорту Бугульмы. Может показаться удивительным, что около такого небольшого (90 тысяч жителей) города есть аэропорт. На деле, он, конечно, работает ещё и окрестные города — Альметьевск (142 тысячи), Лениногорск (65 тысяч), Азнакаево (35 тысяч), кроме того, это нефтяной район, значит деньги, значит полёты. Правда принимает он только небольшие самолёты.
Аэропорт совсем маленький (но до самолёта возят всё равно на автобусе), чистый и с хорошей отделкой.
Понравился персонал. Рейс задержали на два часа (технические трудности), за это время девушка из персонала, которая стояла с нами в зале, с моей подачи организовала нам пирожки и чай из ближайшего буфета (не бесплатно, конечно) и позволила внести скамейки из основного зала (нас попросили не выходить в основной зал, чтобы не проходить осмотр заново, когда самолёт будет готов), в зале ожидания было мало мест.
Хотя, может быть, дело в том, что девушка работала только месяц и ещё не успел «втянуться» в привычное в нашей сфере обслуживания равнодушное хамство.
Алушта









Благополучно прилетели в Симферополь, откуда неожиданно рванули на машине к морю, в Алушту (Женя Войтицкий, спасибо!). Оказывается Саша, с которым я приехал, ни разу не видел моря, мечта была такая — посмотреть на море.
В Крыму уже потихоньку зеленеет, везде трава, многие деревья уже зелёные. И у моря хорошо.
Рапана

Попробовал в Симферополе рапаны — это такой моллюск, раковины которого украшали «стенки» многих советских квартир, жильцы которых съездили на Чёрное море. На вкус — как твёрдые грибы, примерно.
На фото это, например, самые правые два кусочка.
Чтобы попробовать правильно приготовленную рапану и вернуться обратно в гостиницу мы с Сашей прошли около семи километров.
Доверяете ли вы этому принте…
Doc_: Сейчас сетевой принтер подключал к семерке, так эта жужалица спросила меня, доверяю ли я этому принтеру. Doc_: Нет, сука, не доверяю! Doc_: Месяц назад пятихатку на тонер у меня занял и не отдает!
Цитата с «Башорга».
Смешная,
Вопрос состоит в том доверяю ли я этому устройству, так как с него сейчас мне в систему будут ставится
Полностью надо
Музей истории Симферополя

Сходили утром с Сашей в музей истории Симферополя (находится на улице Пушкина, 17, вход всего 5 гривен), замечательный небольшой музей. Существует всего 1,5 года, но уже есть на что посмотреть. Особенно порадовал персонал, женщина на кассе, узнав, что у нас мало времени и мы не сможем
Особенно мне понравился граммофон, прекрасно сохранившийся, эта же женщина поставила нам одну песню Вертинского на нём. Большое ей спасибо за такое отношение к посетителям!
Контур размагничивания
«Починил» телевизор в отеле. У меня в номере два телевизора, оба с кинескопом, один намагнитился — в этом случае на экране появляются различные цветовые пятна (в моём — малиновые по краям).
Как говорится «хозяину на заметку». Хотя телевизоры с кинескопом встречаются всё реже, тем не менее, встречаются. В каждом таком телевизоре есть специальным контур размагничивания. Чтобы он сработал, нужно выключить телевизор кнопкой на телевизоре, потом подождать минут 20, после чего можно включать обратно.
В моём случае, это полностью избавило телевизор от цветных пятен.
Я знаю ещё один способ (мне его папа в детстве показал), он применяется в том случае, если контур не помог, но лучше про него не рассказывать — легко сделать ещё хуже.
Чудеса с Гугл.Ридером
Добавлено позднее: неожиданно пришли комментарии. Правда не все. Видимо, Гугл лихорадит.
WebDAV
Пытаюсь настроить WebDAV, чтобы им можно было пользоваться на nginx. Пока не получилось. Модуль WebDAV из nginx не умеет обрабатывать OPTIONS и PROPFIND,
Для этого я взял davserver — небольшой сервер, написанный на Пайтоне. У него два достоинства: он на Пайтоне и он есть
Выяснилось, что это плохая идея.
try:
os.system("mkdir '%s'" % path)
self._log('mkcol: Created new collection %s' % path)
return 201Кажется, они даже не заморачиваются экранированием спецсимволов в path, правда я бегло смотрел.
Пока не решил возьму ли
«Парсер» студии Лебедева и thttpd
Сегодня потратил часть дня, чтобы выяснить, что Парсер не заработает с thttpd.
Вообще, мне очень нравится
У меня Ubuntu 10.04, поэтому я всё поставил из пакетов, Парсер в том числе, пакет неофициальный, я его нашёл в разделе прислали пользователи.
После того как я всё настроил, ничего не заработало. Отладка через strace быстро показала, что Парсер падает. Я его перекомпилировал. Если будете перекомпилировать, вот мой рецепт.
Я поставил следующие пакеты (легко допускаю, что
В каталог
CPPFLAGS='-I/opt/pcre-8.12 -I/opt/pcre/include/' \
./configure --prefix=/opt/parser3/ --with-shared-gc --with-static-pcre=/opt/pcre
make
sudo make installПосле того как я стал пользоваться собранным мною Парсером,
Тут я догадался (поскольку в консоли не видел
Я создал небольшой
if(cgi) {
// few absolute obligatory
const char* path_info=getenv("PATH_INFO");
if(!path_info)
SAPI::die("CGI: illegal call (missing PATH_INFO)");
const char* script_name=getenv("SCRIPT_NAME");
if(!script_name)
SAPI::die("CGI: illegal call (missing SCRIPT_NAME)");
// … ещё много кода …
}При помощи CGI, написанного на bash, я выгрузил все переменные окружения, которые предоставляет thttpd (у меня версия 2.25b), оказалось, что двух последних переменных в дампе нет. Причём в интернете эта проблема уже поднималась (правда без связи с Парсером) и была успешна разрешена авторами thttpd. Наверное в последней версии
Добавлено: я
Добавлено ещё позже: так, по коду выходит следующее: если
При этом
Чтобы понимать:
http://example.org/cgi-bin/test.cgi — формируется SCRIPT_NAME, но не PATH_INFO и PATH_TRANSLATED
http://example.org/cgi-bin/test.cgi/ — формируется PATH_INFO и PATH_TRANSLATED, но не SCRIPT_NAMEИ ещё позднее: попробовал
«Парсер» студии Лебедева и nginx
Смог запустить Парсер на nginx. Поставил
server {
listen 80;
server_name parser.internal;
set $root /var/www/parser;
root $root;
location ~ \.(p|cgi)$ {
include fastcgi_params;
fastcgi_pass unix:/var/www/cgiwrap-dispatch.sock;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $root$fastcgi_script_name;
}
}SimpleCGI после запуска создаёт файловый сокет
Причём, что интересно, с SimpleCGI спокойно работает и Парсер из пакета, на который я жаловался, что он падает
Добавлено позже: если нужно указать путь до auto.p, то можно добавить «fastcgi_param CGI_PARSER_CONFIG путь/до/auto.p».
Заведения в Симферополе




Я третий раз в Симферополе и он мне нравится всё больше и больше. Говорят на окраинах тут всё очень печально, зато в центре очень хорошо. Для такого небольшого города количество заведений где можно вкусно и приятно поесть довольно приличное.
Утром завтракали в «Горьком» — ресторанчике, посвящённом литературе и Горькому, интерьер заставлен советскими ещё книгами, стилизация отлично выдержана. Счёт приносят внутри книги (есть на снимках).
Прекрасно осознаю, кстати, где таятся недостатки города, но я там не бываю, к чему мне? Я же тут не живу, буду радоваться тому, что турист.
Выяснил сколько примерно стоит квартира. Однокомнатные продаются примерно за $36—50K, причём зависимость чуть не чёткая — метр стоит около $1K. Жаль, что не сходил в краеведческий музей, если приеду ещё раз, надо будет посетить.
Завтра уже улетаем, в середине дня.
Полтонны багажа

Никогда не видели как выглядят багажные бирки для кучи сумок в полтонны весом? Я тоже не видел раньше, а в Симферополе увидел и сфотографировал. На фотографии можно примерно подсчитать сколько их там.
Стапанищев
Кстати, никто не знает, имеет ли значение правильность написания фамилии на билете на самолёт? У меня есть убеждённость, что имеет, иначе вообще какой смысл печатать на нём фамилии?
Я к чему спрашиваю, когда я пару недель назад летал в Нижнекамск, в аэропорту я случайно заметил, что фамилию на билете написали неправильно. Я покупал не электронный билет, пришлось брать в кассе, так как на сайте билет можно было приобрести только за 24 часа, а лететь надо было срочно.
И вот в кассе фамилию на билете напечатали неверно. На билете было написано «Стапанищев», а не Степанищев.
Я переживал, что меня могут не пустить на борт, поэтому пришлось идти на ухищрения. На контроле, где ставят штамп на билете я, например, выбрал сотрудницу с ребёнком и подсунул свой билет и паспорт, когда ребёнок её отвлёк.
Нужны ли были такие усилия?
Добавлено: похоже, беспокоился я зря, смотрите комментарии.
Почему водку пьют, отставив локоть
Казаки, воплощение традиционной русской культуры, пьют водку, выставив локоть. Этот обычай, распространился благодаря старинной кавалерийской культуре. Раньше казак всем делился со своей лошадью, и она тянула морду, когда её хозяин совал
что-нибудь в рот. Поэтому локоть оставляют, чтобы отодвинуть воображаемую лошадь
Я замечал, что некоторые люди пьют водку таким образом, это хорошо видно в старых фильмах, сказках и воспринимается действительно
bo.lk
А домен bo.lk до сих пор свободен. Стоит 25000 шриланкийских рупий (плюс налог 12%), получается около $250. Не, покупать не буду, но имя хорошее.
Магия гитхаба
Прочувствовал магию «Гитхаба». Я сейчас дописываю один плагин для phpBB (это популярный движок форумов), в процессе написания нашёл ошибку в плагине automod (плагин, который нужен чтобы ставить другие плагины).
Поскольку automod выложен
Авторы automod, когда увидят мой запрос, сделают merge с моей новой веткой и мои изменения помогут сделать мир лучше.
Очень просто и круто.
Алиас для /etc/init.d/… restart
Устал я писать каждый раз строки вида «sudo /etc/init.d/nginx restart» для перезапуска многочисленных серверов, поэтому сделал себе короткий алиас. Я бы не упомянул об этом, если бы не два отличия.
Вот что получилось (у меня это в .bashrc):
rst () { command sudo /etc/init.d/$@ restart; }
function _rst() {
local cur
cur=${COMP_WORDS[COMP_CWORD]}
if [ 1 -eq ${COMP_CWORD} ]; then
COMPREPLY=( $(compgen -f -- /etc/init.d/$cur | xargs -n1 basename -- ) )
else
COMPREPLY=()
fi
}
complete -F _rst rst