August 22nd, 2010

светлая инкогнита

"Яйца наконец приготовляются"(с)

     Любите ли вы (варёные куриные) яйца так, как их люблю я?
     А ведь банальное куриное яйцо - ценнейший продукт: из него в природе вылупляется целый цыплёнок, то есть в яйце есть ну вообще всё что нужно для жизни. А самое ценное в яйце - желток: белка мы и так съедаем дофига, а вот всякие там витамины и микроэлементы - это желток, причём ещё жидкий, несвернувшийся, где витамины ещё не разложились, а микроэлементы не подверглись термоядерному распаду переходу в трудноусвояемую форму. И организм это чувствует - самое вкусное в яйце это и есть желток, пока он ещё жидкий :-) А потому - яйца варим "всмятку", ну или почти "в мешочек" - чтобы белок свернулся, а желток остался.

     Казалось бы - кинул в кастрюльку, и вари, чего тут. Но за годы варки яиц у меня выработались "технологические мелочи", от которых "не убавить, не прибавить" (почти как с соусом к пельменям), а они ведь полезные, и жизнь упрощают. Поэтому поделюсь технологией.

     Отбираем яйца для варки. Яйца должны быть без трещин, выстукивание скорлупы (ручкой от ножа, например) не должно давать ни одного "подозрительного" места. Если яйцо выстукивается как "надтреснутое" - назад на полку его, в яичницу пойдёт, варить будем другое.
     На тупом конце яйца (где воздушная прослойка), аккуратно, острым концом ножа, пробиваем небольшую (2-4мм) дырочку - не задевая внутренней части яйца, конечно. Зачем? Очень просто. Во-первых, при варке внутренность яйца будет расширяться, и при наличии такой дырочки - будет куда выходить воздуху/воде из яйца, соответственно яйцо вряд ли треснет при варке :-) Да и если треснет - сделает это с "правильной" стороны - там, где мы один фиг его будем расколупывать при съедении. Во-вторых - внутрь яйца при этом попадёт немного воды (это не страшно, белок отделён плёнкой и с водой не смешается), а при сколупывании скорлупы, скорлупа намного лучше отстаёт от "плёночки", если при этом есть небольшая прослойка воды. Соответственно, яйцо будет проще расколупывать.
     Кладём яйца (2-4 штуки, в зависимости от аппетита и размера) в небольшую кастрюльку, заливаем водой так, чтобы вода чуть-чуть покрыла яйца. Воду можно посолить (я не солю - "бульон от яиц" всё равно выливается, а в яйцо соль не попадает, но в солёной воде яйца реже трескаются (осмотический эффект, о как), и если приходится, например, варить надтреснутые яйца - можно перестраховаться). Ставим на огонь.
     ...есть два основных варианта варки яиц: "класть в кипящую воду" или "класть в холодную воду". Класть в кипящую воду удобнее при составлении рецептов - время варки при этом не зависит от скорости закипания воды, класть в холодную воду - несколько быстрее при готовке (мы не теряем впустую те минуты, которые нужны для закипания воды), кроме того - считается что при этом яйца реже трескаются. Я кладу в холодную воду, но можно класть в кипящую...
     Доводим до кипения, варим 1.5-2 минуты (зависит от объема кастрюли, силы огня, и размера яиц - первые разы придётся поэкспериментровать. При экспериментах "удобней переварить, чем недоварить", поэтому начинать лучше с 2 минут. При закладке в кипящую воду интернет советует варить 2-4 минуты). В идеале почти весь белок должен свернуться и стать плотным и белым, а весь или почти весь желток должен остаться жидким.
     Сливаем воду, обдаём яйца холодной водой, сливаем воду. Если не слить горячую воду - яйца продолжат вариться, и пока мы будем есть первое яйцо - остальные переварятся. Если не слить холодную - яйца банально остынут.
     Берем одно яйцо. Обдаём холодной водой, вставляем тупым концом вверх в яйцедержалку (фигня типа мелкой стопки, можно собственно стопку/рюмку/очень мелкий стаканчик и использовать). Надкалываем тупой конец ударами чайной ложки, очищаем конец от скорлупы. Намазываем хлеб маслом, обмакиваем кончик чайной ложки в соль (чтобы соль налипла, нужно увлажить ложку - например, подковырнув ей яйцо), набираем в ложку яйцо, едим.
     Повторяем, пока не кончится яйцо.
     Повторяем, пока не кончатся сваренные яйца.

     Бон, как говорится, апети! Напоминаю: в желтке содержится много холестерина, но он нам на самом деле не вредит, а вредит нам вредный образ жизни :-)

     UPD: да, ещё на бутерброд "к яйцу" можно намазать совсем чуть-чуть горчичики - вкус будет чуть более другим. Но это на любителя, я обычно так не делаю :-)
серая инкогнита - бамц!

много маленьких интернетиков

     Интернет - я помню - расшифровывается как Interconnected Networks, то есть создан он был для объединения сетей. И когда интернет создавался - это было, блин, действительно удобно: вместо чтобы связывать два расположенных чёрт-те где компьютера какими-то проводами, подключил их к интернету, и вуаля: оба компьютера волшебным образом доступны друг для друга по любому из протоколов, бегающих поверх TCP/IP (а других уже почти и не осталось).
     Сейчас же типичная ситуация - это когда стоят два компьютера, оба подключены к интернету, но при попытке что-то сделать, ты понимаешь, что они подключены к разным интернетам, и доступиться напрямую с одного на другой без использования сторонних сервисов - задачка не такая простая, иногда близкая к неразрешимой.

     Конечно, интернет для них как бы вроде бы один и тот же - они видят одни и те же сайты, могут писать друг другу электрописьма, и даже устраивать видеосвязь через какой-нибудь skype, а если повезёт - то и прочий пиртупир типа торрентов (главное при этом - не знать, какое количество костылей и подпорок используется там, за окошком на десктопе, для того, чтобы всё это хоть как-то работало). Но ломануться по старинке, как в те времена, когда Interconnected Networks использовался для соединения компьютеров, с одного компа на другой напрямую - опаньки: настоящие IP-адреса стали ценным ресурсом, просто так юзерам не отдаются, а провайдеры при первой же возможности сгоняют юзеров за NAT с "ненастоящими" адресами - забавными такими, типа 10.1.1.77, но всё-таки "левыми". И получается, что "глобальная объединённая сеть Интернет" давно раскололась на много маленьких интернетиков, из которых можно в замочную скважину NAT подглядывать в Настоящий Интернет, и даже устраивать весёлый пиртупир в пределах провайдерской локалки. Но и не сильно более.

     При этом окончательное и бесповоротное решение этой проблемы существует! Оно существует уже более десятка лет (RFC1726 датирован 1994 годом, RFC2460 - 1998 годом)!! И первые годы его бодро пиарили и обещали "вот прям скоро" начать внедрять, чтобы лет через несколько все жили при коммунизме, и у каждого было в запасе по тысяче-другой ip-адресов, чтобы можно было выдать реальный ip каждой пуговице на ширинке и каждому шнурку на ботинке!!! А потом как-то вот затухло: в последнее время про IPv6 (речь, понятное дело, именно о нём) как-то особо не слышно. Где-то там, какие-то работы возможно ведутся, если хорошо поискать - в отдельных крупных городах (Москве и Питере, ага) даже можно найти следы IPv6... и всё.

     А чтение интернетов на тему NAT traversal, а также изучение того, в каких условиях ухитряется работать тот же skype (и на какие извраты ему приходится идти) - чётко напоминает старый советский анекдот, про иностранца, увидевшего ГАЗ-66, и заявившего "что только эти русские не придумают, лишь бы дороги не строить". И правда - ну такой вокруг "обхода NAT" (и ещё не забываем про прокси, причём нескольких разных видов!) завал костылей и подпорок, что даже "перевязанный батничками" фидошный узел образца 1990 года по сравнению с этим выглядит шедевром прямоты и логической стройности. И всё только потому, что существующее более десяти лет решение, в этой быстроразвивающейся индустрии - как-то вот йок, мы лучше будем шлифовать очередные нюансы отображения свойства полупрозрачности в различных браузерах, да создавать очередные клоны клонов очередных "сосальных (social) сетей".

     И как-то уже начинаешь понимать, что не так уж наверное и нужно мне это самое соединение компьютеров - можно ведь и флэшками информацию носить, и электропочтой файлы передавать, а все эти телнеты и radmin'ы - это лишнее...
     "Эх, Морфеус, Морфеус. Где же ты, когда ты так нужен?"(с)

     P.S: а ещё не могу отделаться от мысли, что билайн выдаёт пользователям "жёлтых USB-свистков" адреса вида 172.[16-31].x.x потому, что про сети 192.168.x.x и 10.x.x.x помнят все (их проще запомнить и удобнее использовать), а про 172.[16-31].x.x поэтому не помнят, и пользователь может "визуально спутать" этот IP с настоящим. Впрочем, тут вопрос скорее к IETF - зачем кроме "удобного и широкого" диапазона 10.x.x.x и "компактного" 192.168.x.x, был выделен ещё и этот странный некруглый огрызок в середине диапазона. Желающие рассказать про "сети класса B" - начинайте с того, зачем вообще может понадобиться зависимость класса сети от сетевого адреса - я никакой причины кроме "создания путаницы" до сих пор придумать не могу :-)
мегавольт

За программизм

     Сразу предупрежу - я не программист, поэтому могу быть очень сильно не в курсе текущего состояния дел. Но есть мысли, и я их думаю.

     Бывает, что программы "мучительно долго закрываются": нажал ты крестик, а она ещё минут несколько шуршит диском и грузит процессор, прежде чем покинуть список процессов. Говорят, при этом аккуратный рантайм объектно-ориентированного языка аккуратно и поочерёдно уничтожает созданные за время работы программы объекты. Аккуратно, методично, с соблюдением всех требуемых в языке формальностей, потому долго. Вот я и задумался на тему оптимизации уничтожения объектов. Создавать-то мы все умеем, а вот уничтожать с наименьшей нагрузкой на процессор?...

        1) Ведь можно же, чтобы объект при уничтожении "грохался молча", без каких-то сопутствующих действий кроме собственно освобождения памяти? Мне казалось, что оно по умолчанию так и есть (если для уничтожения не прописано явно каких-то действий), но что-то берут меня сомнения: нет ли в сегодняшних языках/рантаймах каких-то внутренних навесок "обязательных к исполнению при удалении объекта"? И если есть - почему бы не сделать для объекта флаг "можно грохать молча".
        1.1) ...ну, или "грохать молча" хотя бы при завершении работы программы (при установленном флаге, ессно - чтобы старые программы не словили каких-нибудь спецэффектов). Программа завершается, ей больше не нужны вообще никакие объекты, а нужные именно для завершения действия она и сама сделает (если будет знать, что объекты грохаются молча).
        2) "Куча в куче" или "объект типа куча". Создаем "новую кучу" (саму являющуюуся например объектом), внутри этой кучи создаём нужные нам объекты. Когда надобность в объектах отпала - грохаем кучу целиком, не заглядывая внутрь (и экономя тем самым работу по уничтожению каждого объектика по отдельности). Удобно понятно для чего - насоздавали для временных нужд много временных объектиков, потом грохнули все разом.
        3) "Объект можно грохать, если нужно - восстановим". При работе программ создаётся множество "временных" объектов, в принципе нужных, но не необходимых - какие-нибудь индексы, распакованный в память для лучшей скорости отображения jpeg, и подобные вещи, которые вроде и удалять жалко (а главное - непонятно когда), и место занимают, и пересоздаются в случае чего легко. Ввести для таких объектов флаг "можно грохать, для восстановления вызвать вот это". Если менеджер кучи обнаруживает нехватку памяти, и при этом есть давно не используемые объекты с таким флагом - их можно грохнуть, оставив от них только ссылку на процедуру пересоздания объекта. Если программа обращается к такому объекту - менеджер кучи зовёт процедуру пересоздания объекта, и только потом допускает программу до объекта.
        3.1) ...как вариант - грохать такой объект без сохранения чего либо, при обращении к объекту программы - сообщать программе что объект мы грохнули, пусть выкручивается как хочет (обходится без него, или создаёт заново).
        3.2) ...кстати, для dz phantom, с её (его?) персистентностью, эта проблема (замусоривание кучи объектами, которые не особо-то и нужны, но нет формальных причин для их удаления) может оказаться актуальной.

     Интересно, много я сегодня велосипедов наизобретал?...
серая инкогнита: курим

И яйца опять приготовляются!

     Внезапно напомнили, и я вспомнил ещё про один яичный рецепт :-)

     Варим 3-4 яйца - совсем недолго, 1-2 минуты, чтобы желток был совсем жидким а белок только-только начал сворачиваться.

     Пока яйца варятся - в металлической миске растапливаем (не перегреваем, достаточно просто растопить) крупный шматок сливочного масла, добавляем соли. Отдельно - мелко режем 3-4 ломтика батона или белого хлеба.
     Готовые яйца вскрываем, чайной ложкой вываливаем содержимое в миску, тщательно перемешиваем с маслом-солью. Туда же высыпаем порезанный хлеб, перемешиваем. Едим пока не остыло :-)

     "Ускоренно-упрощённый" вариант этого же блюда: на сковородке разогревается шматок сливочного масла, туда же разбиваются 3-4 яйца (желток сохранить целым), на сильном огне жарится "глазунья" до состояния "белок наполовину свернулся", содержимое сковородки целиком, вместе с маслом/жиром, вытряхивается в глубокую тарелку, вилкой давится и перемешивается, затем смешивается с мелко порезанным хлебом.

     Первый вариант мне нравится больше, но он чуть сложнее в готовке. Второй больше похож на тупо яичницу, но "тоже ничего" :-) У нас к первому варианту прилипло название "красота", хотя визуально оно не сильно красивее какого-нибудь овощного рагу :-)
серая инкогнита: курим

Раз уж раздразнили...

     В стакане взбиваем вилкой 2-3 яйца с солью. Отставляем в сторону.

     Вариант 1: "яичница с помидорами". Режем ломтиками помидоры, посыпаем солью и какой-нибудь острой смесью приправ, жарим с обоих сторон. Снимаем со сковородки, кладём в тарелку.
     Вариант 1а: "яичница с помидорами и фаршем". Обжариваем мясной фарш (тыкая в него вилкой при жарке так, чтобы он развалился на мелкие кусочки). Режем мелкими кусочками помидоры, посыпаем солью и какой-нибудь острой смесью приправ, всыпаем в фарш, жарим. Снимаем со сковородки, кладём в тарелку.
     Вариант 2: "типа омлет с типа гренками". Режем ломтиками хлеб, обжариваем с обоих сторон. Снимаем со сковородки, кладём в тарелку.

     При необходимости подливаем на сковородку масла, выливаем взболтанное яйцо (перед выливанием взболтнуть ещё раз, чтобы поднять осевшую на дно соль). Распределяем по сковородке, ждём пока низ слегка поджарится. В процессе жарки "подковыриваем" омлет вилкой так, чтобы жидкое яйцо сверху протекало вниз и там жарилось. Когда омлет наполовину готов (внизу слой свернувшегося яйца, сверху - слой несвернувшегося), приступаем к завершающей фазе:

     Модификация 1, "с сыриком" (оптимальна для вариантов 2 и в принципе для 1, для 1а получится совсем уж смешанный вкус): насыпаем в омлет сырик, порезанный мелкими кубиками.

     Вариант 1: выкладываем на омлет помидоры, доводим омлет до готовности (поверхность омлета должна остаться самое чуть-чуть недожаренной ("скользкой"), так вкуснее!).
     Вариант 1а: вываливаем в омлет помидоры с фаршем, равномерно распределяем, жарим до готовности (утверждение про "чуть-чуть недожаренность" в силе).
     Вариант 2: выкладываем на омлет ломтики хлеба, доводим до готовности. Чуть-чуть недожарить, да.

     Пожалуй, хватит. А то я вспомню, что русский человек способен сделать яичницу из чего угодно, включая блюда японской кухни, и тогда остановиться будет уже сложно :-)
серая инкогнита: курим

казалось бы, при чём тут Лужков?

           - У меня образовался файл, который можно перемещать куда угодно,
             даже на другой диск, но не получается удалить! Что делать?!
           - Перемести его на дискетку... а дискетку вынь и сожги!

          (с) приколы эпохи OS/2

     У меня вот только что в Google Chrome образовалась вкладка, которая страстно желала быть крайней левой. В любом окне (можно было перетащить мышью, или даже вытащить в отдельное окно), но обязательно крайней левой - мышью она как-бы-тянулась куда надо, но ронялась только в крайнюю левую позицию.
     А ещё на ней не было "крестика" для закрытия. На других закладках есть, а на этой - нет.
     Но я догадался, как её можно закрыть! Я вытащил её в отдельное окно, и закрыл всё окно :-)

     ...но, блин - что это было?!

     UPD: выяснили: это был случайно нажатый "Pin tab" :-)