Опрос, пинг, PubSub, pubsubhub, PubSubHubbub

В случае, если вы настроены скептически, есть метод в безумие выше, в названии должности. В кругах технологий маловероятно, что вы не слышали о PubSubHubbub. В быстрых несколько месяцев, он был одним из трех крупнейших говорили о вещах. Две другие гомоморфных шифрования и Google волны [ 1. ]. Возвращаясь к нынешней должности - термины в названии указывает, как вы получите содержимое от других людей. После детали становятся более ясными, если представить, что происходит в отношении блогов, даже если они концептуально не ограничивается блогами.

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

Ping относится к случаю, когда, где разместить статью, вы (или ваш программного обеспечения) также обновляет некоторые популярные (центральной) Update Services. Некоторые фон здесь .

Далее идет PubSub которая выступает за публикации / подписки, одним из первых шага на это было сделано здесь, Эван Хеншоу-Плат и Келлан Эллиот-Мак-Кри (72 слайдов, но стоит идти путем). Убедительным примером они дали против эта - на определенную дату, FriendFeed пополз Flickr 2900000 раз, чтобы получить последние фотографии 45 754 пользователей, из которых 6721 побывал Flickr в эти 24 часа и могли бы "потенциально" загрузил фотографию. Обратите внимание, что то, что они предложили не новые технологии, как они указывают на «революционный новый 20-летний технологии". Если вы делаете это для блогов, то одна из основных проблем, с XMPP - наличие данных накладные расходы, которые могут достигать 60-70% может быть уменьшена много.

pubsubhub выступает за публикацию подписаться ступицы и PubSubHubbub это протокол, ядром которой является идея pubsubhub. В чем издатели (например блоггеров) обновить центр которого (может быть более одного центров, которые общаются друг с другом) находится "где-то в облаках, в соответствии с протоколом этого можно толкать или тянуть в соответствии с протоколом, но в следующей ссылке цепи, центр клиента (скажем, читателей) он всегда толкать модели. Эта страница является хорошей отправной точкой для PubSubHubbub, обзор слайдов хороши. Всегда красноречивый Анил Даш описывает его здесь в качестве веб-кнопки.
Два других связанных чтении webhooks которая в основном HTTP обратного вызова. Github использует его, так же PayPal для асинхронных уведомлений оплаты в рп . Так делают многие другие. Связанные концепции rsscloud что снова PubSub центром. Следуйте этой ссылке подробнее.

Вы можете быть удивлены, что смысл писать все эти вот, есть две 1. Эти вещи надо знать, по крайней мере минимально и 2. Этот блог PubSubHubbub включен в настоящее время через appspot концентратору с помощью этого WordPress плагин и кормов тоже PubSubHubbub включен через FeedBurner, ссылка здесь
-
[ 1 ]. - Хороший вводный читать полностью гомоморфных шифрования этой статье Брюс Шнайер и это речь идет более или менее единственным источником волны Google.

ОБНОВЛЕНИЕ - Это сообщение объясняет, как требование публичного сервера для обратного вызова можно обойти для настольных клиентов с помощью XMPP шлюз (для PubSubHubbub).

Немного сборки

После прочтения этой статьи о блокировки свободных буферов и, увидев использования CAS (сравнить и своп), я чувствовал, что размещение сборки кода, чтобы сделать то же самое. Используйте случае там было написать собственный метод и вызывать его из Java (еще в 1.5, когда одновременно структур данных в Java были более или менее несуществующие). Не мудрствуя лукаво, я раскрыть код на вас :) . Во-первых, для СПС и второй для вычисления НОД по алгоритму Евклида (это могут быть найдены во многих местах и ​​учебных пособий, а).

Скомпилируйте и запустите инструкцию gcc file_name.c ; ./a.out

Сравните и Обмен

   # Include 
  # Include 
 / / Обмен - NewValue, comperand старое / ожидаемое значение
 / *
  * Функция фактически выполняет следующие вещи - если значение в * DEST равно OldValue затем заменить его NewValue еще оставить его без изменений: не все эти атомарно
  *
  * Есть два варианта возврата
  * 1.is начальное значение * DEST и оставить бремя вызова FXN сравнить его с oldval
  * 2.  сделать это здесь и вернуть 0 или 1, то это должно быть более эффективным
  ** /

 / * Позже изменить его в макросов * /
 Int CAS (Int * НАЗНАЧЕНИЕ, OldValue Int, Int NewValue) {
	 Е ("(% D,% D,% г)", * НАЗНАЧЕНИЕ, OldValue, NewValue);
	 / * Int CAS (INT DEST, Int OldValue, Int NewValue) {* /
	 / * Int CAS (INT DEST, Int NewValue, Int OldValue) {* /
	 Int результат = 1 ;/ * 1 показывает, что CAS успешно и 0 показывает, что он не * /
	 / * Кстати нужно установить флаг см для затирания!  * /
	 volatile__ __asm__ __ (
			 "Movl% 2,%% EAX \ п \ т"
			 "Movl% 3,%% EBX \ п \ т"
			 "Movl 0%,%% ECX \ п \ т"
			 "LOCK \ п \ т"
			 "CMPXCHG%% EBX, (%% ECX) \ п \ т" / * должны быть блокировки на одной строке * /
			 "Совершено JZ \ п \ т"
			 "Movl $ 0,% 1 \ п \ т"
			 "Совершено: \ п \ т"
			 : "= М" (Dest), "= г" (результат)
			 "Г" (OldValue), "г" (NewValue), «м» (Dest)
			 : "% EAX", "% EBX", "ECX", "CC"
			 );
	 Е ("(% D,% D,% г)", * НАЗНАЧЕНИЕ, OldValue, NewValue);
	 возвращение результата;
 }

 / * TODO
  * Написать еще АНМ FXN которая ставит выше FXN в то время цикла и продолжать пробовать, если он успешно * /

 Int основных () {
	 Int = 5, б = 6;
	 Int * с = (INT *) таНос (SizeOf (INT));
	 * С = 6;
	 / * Int C = 6, * /
	 Е ("% г \ п", CAS (C, B, б));
	 Е ("% г \ п", CAS (C, B));
	 Е ("% г \ п", CAS (С, А,));
	 Е ("% г \ п", CAS (C, B, б));
	 * С = 6;
	 / * С = 5, * /
	 Е ("изменение значения с * к% г \ п", * с);
	 Е ("% г \ п", CAS (C, B, б));
	 Е ("% г \ п", CAS (C, B));
	 Е ("% г \ п", CAS (С, А,));
	 Е ("% г \ п", CAS (с, а, б));
	 Е ("% г \ п", CAS (C, B));
	 return 0;
 }

Форматирование ноты - кажется WP подсветку синтаксиса добавления В конце концов, игнорировать это.

НОД

 # Include 
 Int НОД (INT A, INT B) {
     Int результат;
     / * Вычислить Наибольший общий делитель по алгоритму Евклида * /
     __asm__ __ volatile__ ("movl% 1,%% EAX;"
                           "Movl% 2,%% EBX;"
                           "ПРОДОЛЖЕНИЕ: cmpl $ 0,%% EBX;"
                           "Совершено е";
                           "Xorl%% EDX, EDX%%";
                           "Idivl%% EBX;"
                           "Movl EBX%%%% EAX;"
                           "Movl%% EDX, EBX%%";
                           "JMP ПРОДОЛЖЕНИЕ";
                           "Совершено: movl%% EAX,% 0,": "= г" (результат): "г" (а), "г" (б)
     );

     возвращение результата;
 }

 Int основных () {
     int, первое, второе;
     Е ("Введите два целых числа:");
     Scanf ("% D% D", и первое, и второе);

     Е ("НОД% D и% D% г \ п", первый, второй, НОД (первый, второй));

     return 0;
 }

Крикета мир ждет новый мировой порядок

После серии тестов на протяжении пяти и примерно через два месяца, Англия мелиорированных пепла.

Давайте поговорим о команде-победительнице первой - их средний заказ в среднем ", если вы не хотите к критической. Вклад Greame Свана с битой будет считаться не меньше, чем вклад с мячом. Стюарт Широкий - лучший универсал, не было стартер на 5-й тест. Эндрю Штраус был единственным последовательным бэтсмен и Джимми Андерсон был единственным последовательным котелок.

Дело в том, чтобы не ругать достижения команды-победительницы, но и в перспективе тот факт, что несмотря на все эти, Австралии потеряли. Вы должны думать на несколько секунд, если просили назвать их лучшими котелок. Право, это было BW Hilfenhaus. Hauritz превзошли ожидания everbody, но еще не был достаточно хорош, чтобы быть выбран в течение двух из пяти тестов. Южная Африка не стала мировой било без счетчика мирового класса, Австралия не может надеяться остаться один без одного хорошего достаточно одного по крайней мере. Маг покинул сцену, и это не похоже на искусство больше, забыть магию. Понтинг возвышается среди простых смертных и Майкл Кларк встает очень часто, но, что делает их команда с очень хорошими игроками и не очень хорошая команда.
Пепел 2009 года будут помнить за последние Пепел Эндрю Флинтофф в, прибытие Стюарт Широкий как универсал (если он добавит еще несколько Пепел фольклор его многообещающее начало), и один из наиболее ярким дебютом века все время Тротт, но он также будет вспомнил, как точки, где IFS и возражайте о первенстве Австралии были, наконец, положить на отдых, она закончилась. Не поймите меня неправильно, они могут раскопать Майк Хасси и Стюарт Кларк, но Вы чувствуете, что вклад всех времен великих, когда они пропадают без вести. Иногда они приходят, чтобы напомнить вам о себе в IPL, но все же они не могут быть заменены. Давайте чувствую себя счастливым за то, что видел Варн, МакГрат и Gilchrist играть вместе и при поддержке Waughs, Понтинг, Хайден, Мартин и Лангер.

Забегая вперед, Южная Африка всегда будет оставаться очень хорошая команда, но они должны выиграть полуфинал и быть более последовательными во всем мире, Пакистан останется загадочным блестящий, индийский молодые игроки, вероятно, будет трудно заполнить обувь чрезвычайных предшественников. Шри-Ланка должна продолжать показывать проблески искусства в ремесло. Но, мы, возможно, придется ждать где-то до того, все из доминирующей командой или перед капитан жалуется на отсутствие конкуренции, как Стив Вог сделал один раз.

На соответствующую записку - давайте приветствовать возвращение Асифа, он чертовски большой потенциал, будем надеяться, чтобы увидеть некоторые из этих, а также приветствовать Энди цветов в новой awatar, право, вы не можете сохранить хорошие люди вниз надолго.

рубин один вкладыши для создания хэш-

Вчера при прохождении одного из моих старых программ, я нашел это написано мной некоторое время назад:

#begin magic
hash=Hash[*CGI.unescape(raw_text).split('&').map{|x| b=x.split("=");b.push(nil) if b.size==1;b}.flatten]
#end magic

Чтобы убить приостановки позвольте мне раскрыть этот raw_text выглядит

 

, Права она была вырезана из PayPal подтверждение оплаты.

Над линией, если нарушена в части читает лучше:

  unescaped_array = CGI.unescape (raw_text). раскол ("&")
   unescaped_array = unescaped_array.collect {| х | = б x.split ("="); b.push (ноль), если b.size == 1, б}
   flattened_array = unescaped_array.flatten
   хэш = Hash [* flattened_array] 

Давайте сделаем отдельные шаги в IRB:

  IRB (основной). 009:0> = unescaped_array CGI.unescape (raw_text) сплит ('&')    

 => ["Успех", "mc_gross = 10,00" "protection_eligibility = Неприемлемые", "payer_id = U7PPJJ4TSJ47E", "налоговая = 0.00", "payment_date = 9:45:30 10 июля 2009 PDT", "В ожидании payment_status = "]                                                                         

 IRB (основные): 013:0> = unescaped_array unescaped_array.map {| х | = б x.split ("="); b.push (ноль), если b.size == 1, б}  

 => [["УСПЕХ", ноль], ["mc_gross", "10.00"] ["protection_eligibility", "не имеющие права"] ["payer_id", "U7PPJJ4TSJ47E"] ["налог", "0.00"] , ["payment_date", "9:45:30 10 июля 2009 PDT"] ["payment_status", "В ожидании"]]                               

 IRB (основные): 014:0> = flattened_array unescaped_array.flatten     

 => ["Успех", ноль ", mc_gross", "10.00", "protection_eligibility", "не имеющие права", "payer_id", "U7PPJJ4TSJ47E", "налоги", "0.00", "payment_date", "9:45: 30 10 июля 2009 PDT "," payment_status "," В ожидании "]
 IRB (основные): 015:0>
 хэш = Hash [* flattened_array]
 => {"Налог" => "0.00", "payment_status" => "До", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10.00", "успех" => ноль ", payment_date" = > "9:45:30 10 июля 2009 PDT", "protection_eligibility" => "Недопустимые"} 

Кстати, * называется оператор восклицательный знак в рубине

Еще один способ создать хэш из "массива пар" является использование инъекционных:

  хэш = [[1,2], [3,4]] вводят ({}). {| результате элемент | результат [element.first] = результат [element.last];} результат 

Существует еще один способ :) Напишите цикл, который я оставляю в качестве упражнения для читателей!

Вот несколько вариантов использования не связаны создания хэш из массива:

  IRB (основные): 005:0> [1,2,3,4,7,9] Аргумент group_by {| х | х | <5.?  : Меньше больше ::}

 => {: Меньше => [1, 2, 3, 4]: большая => [7, 9]} 

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

Gmail, дурак и msmtp исправления

Если вы используете Mutt и SMTP для доступа к Gmail. Вот (плохие) новости. Крутые парни в Google снова изменил сертификат. Ах, вы спросите - как это знать? Просто дурак начали жаловаться на плохое сертификат при попытке использовать msmpt, печально известный "msmtp: TLS сертификат проверки не удалось. Сертификат не получил известный эмитента встретил меня на экране.

Чтобы пересечь подтвердить -
Просто запустите следующие

$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off

На месте старого сервера Thwate теперь вы получаете следующие эмитента в сегменте
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

К счастью, исправить это просто, вот то, что нужно делать на Debian

# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814

После этого просто измените следующую строку в вас ~~~V /. Msmtprc

tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

к

tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt

Git и Удивительный Обзор

Вот две ссылки на обследование, ЖКТ (система контроля версий) и удивительным (оконный менеджер) сообщества. Если вы используете одну из них, выньте некоторое время, чтобы заполнить анкету. Думайте об этом как самый простой способ внести свой вклад в программное обеспечение вы используете.
Вот ссылки:

Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54

Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D

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

Слияние хешей в YAML файлы конф

YAML это очень удобно для записи файлов конфигурации. Основным преимуществом является то, что он читает, как текстовый файл. Это работает очень хорошо, если ваш файл конфигурации квартира (нет иерархии) и не имеет повторений.
Если ваш файл конфигурации повторов, то имеет смысл выделить те элементы и использовать их. Что я имею в виду это - скажем, вы конфигурационный файл выглядит следующим образом:

  развития:
   input_location: common_input
   output_location: dev_location
   почта:
     smtp_server: your_server
     Логин: ваш_логин
     Пароль: top_secret
 Производство:
   input_location: common_input
   output_location: dev_location
   почта:
     smtp_server: your_server
     Логин: ваш_логин
     Пароль: top_secret 

Предполагая выше код в / TMP / test.yml вот как вы можете прочитать в питоне и рубин
$cat readyml.py

 #! / USR / бен / ENV питон
 pprint от импорта pprint как пп
 # В Debian необходимо установить Python-YAML
 YAML от импорта нагрузки, load_all, самосвалы
 хэш = нагрузки (открытой ('/ TMP / test.yml))
 рр (хэш ['развитие']) 


$ cat readyml.rb

  #! / USR / бен / ENV рубин
 require 'рр'
 хэш = YAML :: нагрузки (File.Open ('/ TMP / test.yml). читать)
 стр. хэш ['развитие'] 

Здесь удобная один лайнер для версии рубиновых
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' или вы можете попробовать то же самое в IRB или питона консоли.

Обратите внимание, что в приведенном выше фрагменте кода, все, кроме выходных Место же в разработке и производстве части. Здесь ут идентификатор узла идет к спасению. Идея проста есть набор значений по умолчанию и переопределить их в другом месте.
Вы могли бы вытащить его на части следующим образом:

  По умолчанию: и по умолчанию
   input_location: common_input
   output_location: dev_location
   почта:
     SENDER_NAME: отправитель
     smtp_server: your_server
     Логин: ваш_логин
     Пароль: top_secret
 развития:
   << * По умолчанию
 Производство:
   << * По умолчанию
   output_location: prod_location 


$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$

Великий, он работает (тм)!.
Возможно мы обменяли некоторую ясность в немного магии. Вот небольшое объяснение: и * и <<: и которая тега может быть понята как идентификатор узла, * является узлом ссылки и <<: обозначает хэш слияния.

Для получения дополнительной информации см. или YAML спецификации или Википедии
Пока все хорошо, но есть загвоздка, эти хэш слияния не рекурсивным. Что это означает, заключается в следующем: допустим, вы хотите иметь другое имя отправителя почты в двух средах, вы можете захотеть сделать следующее:

  По умолчанию: и по умолчанию
   input_location: common_input
   output_location: dev_location
   почта:
     SENDER_NAME: отправитель
     smtp_server: your_server
     Логин: ваш_логин
     Пароль: top_secret
 развития:
   << * По умолчанию
   почта:
     SENDER_NAME: sender_dev
 Производство:
   << * По умолчанию
   output_location: prod_location
   почта:
     SENDER_NAME: sender_prod 

Давайте проверим

$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$

К сожалению, что-то пошло не так, проблема, как упоминалось выше, что хэш-слияние не является рекурсивной и при слиянии его заменить почты по умолчанию по почте производства, который имеет только один ключ. Решение / Обходной развернуть еще один уровень:

  common_settings: и common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: и mail_defaults
  SENDER_NAME: отправитель
   smtp_server: your_server
   Логин: ваш_логин
   Пароль: top_secret

 По умолчанию: и по умолчанию
   << * Common_settings
   почта:
     << * Mail_defaults
 развития:
   << * По умолчанию
 Производство:
   << * По умолчанию
   почта:
     << * Mail_defaults
     SENDER_NAME: sender_prod

Давайте еще раз проверить

$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$

Знаете ли вы, у вас есть еще один уровень вложенности, а вы определенно можете развернуть еще один уровень, но затем она становится беспорядок. Итак, если вы не пытаетесь написать решение Башни Ханоя в конфигурационный файл, то лучше restucture конфигурационный файл, чем копаться в YAML или что-то другое. Но это ваш звонок в любом случае.

Великие программисты найти простые решения сложных проблем

После того, как долго я могу найти источник для следующих котировок

Младший программистам создавать простые решения для простых задач. Старший программистам создавать комплексные решения для сложных проблем. Великие программисты находить простые решения сложных проблем.

Именно в эссе под названием Красивые Software Чарльз Коннелл.

Другой любимый мой это Дзен Python -

Красивое лучше, чем некрасивым.
Явный лучше чем неявный.
Чем проще, тем лучше, чем сложные.
Комплекс лучше, чем сложные.
Плоские лучше вкладываться.
Редкие лучше, чем плотная.
Читаемость имеет значение.
Особые случаи не являются специальными достаточно, чтобы нарушать правила.
Несмотря на практичность бьет чистоты.
Ошибки никогда не должны проходить тихо.
Если явно не замолчать.
В условиях неопределенности, отказаться от искушения догадаться.
Там должна быть одна и, желательно, только один очевидный способ сделать это.
Несмотря на то, что никак не может быть очевидным на первый, если вы не голландцы.
Сейчас лучше, чем никогда.
Хотя никогда зачастую лучше, чем * право * сейчас.
Если реализацию сложно объяснить, это плохая идея.
Если реализацию легко объяснить, она может быть хорошей идеей.
Пространства имен являются одним сигналят отличная идея - давайте делать больше таких!
-------------------------
и есть классический Дао Программирования

-

кредитов, а на связанные сайта

Перевод Джеффри Джеймс

Перевод Герцог Hillard

Передано Анупам Trivedi, Sajitha Tampi и Meghshyam Джаганнатха

Re-HTML-ized под редакцией Kragen Ситтлер

-

Книга 1 - The Silent Пустота

Так говорил главный программист:

"Когда вы узнали вырвать код ошибки из ловушки кадре,
будет для вас время, чтобы уйти. "

1,1

Что-то таинственное формируется, родился в тихой пустоте. Ожидание в одиночку и
двигаясь, он сразу еще и тем не менее в постоянном движении. Это источник
всех программ. Я не знаю ее имени, поэтому я буду называть его Дао
Программирование.

Если Дао велико, то операционная система велика. Если операционная
Система большая, то компилятор велик. Если компилятор велик,
то приложение велик. Пользователь доволен и существует
гармонии в мире.

Дао Программирования течет далеко и возвращается на ветер утром.

1,2

Тао родился в машинный язык. Машинный язык породил
ассемблер.

Ассемблер породил компилятор. В настоящее время существует десять тысяч
языков.

Каждый язык имеет свою цель, но скромным. Каждый язык выражает
Инь и Ян программного обеспечения. Каждый язык имеет свое место в Дао.

Но не программировать на COBOL, если вы можете избежать этого.

1,3

В начале было Дао. Дао породило Пространство и Время.
Поэтому пространство и время являются Инь и Янь программирования.

Программисты, которые не постичь Дао, всегда не хватает времени
и пространства для их программ. Программисты, которые постичь Дао всегда
иметь достаточно времени и пространства для достижения своих целей.

Как могло быть иначе?

1,4

Мудрый программист слышит о Дао и следует ему. Среднее
программист слышит о Дао и ищет его. Глупый программист
слышит о Дао и смеется над ней.

Если бы это было не для смеха, не было бы Дао.

Самые высокие звуки труднее слышать.
В дальнейшем это путь к отступлению.
Большой талант проявляется в конце жизни.
Даже совершенная программа все еще есть ошибки.

-------------------------

Книга 2 - Древние мастера

Так говорил главный программист:

"После трех дней без программирования жизнь становится бессмысленной."

2,1

Программисты старых были загадочны и глубоки. Мы не можем понять
свои мысли, так что все что мы делаем, описать их внешний вид.

Сознавая, как лиса пересечения воды. Сигнал, как и вообще на
боя. Вид, как хозяйка приветствует своих гостей. Простой, как
uncarved блоков из дерева. Непрозрачными, как черный бассейнов в затемненном пещеры.

Кто может сказать, секреты их сердец и умов?

Ответ на этот вопрос существует только в Дао.

2,2

Великий магистр Тьюринга однажды приснилось, что он машина. Когда он проснулся, он
воскликнул:

"Я не знаю ли я Тьюринга снилось, что я машина, или
Машина снилось, что я Тьюринг! "

2,3

Программист из очень большой компьютерной компании пошли на программное обеспечение
конференции, а затем вернулся представить его менеджер, говоря: "Какой
программисты работают в других компаниях? Они вели себя плохо и были
равнодушен к внешности. Их волосы были длинные и неопрятные и их
Одежда была морщинистой и старой. Они разбился наше гостеприимство пакет, и они
сделаны грубые звуки во время моего выступления ».

Менеджер сказал: "Я бы никогда не послал тебя на конференцию. Те
программисты живут за пределами физического мира. Они считают жизнь абсурдна,
случайное совпадение. Они приходят и уходят, не зная ограничений.
Без помощи, они живут только для своих программ. Почему они должны беспокоиться
с социальными конвенциями?

"Они живы внутри Дао."

2,4

Ученик спросил учителя: "Вот программист, что никогда не проектирует,
документы или испытания его программ. Но все, кто знает его считают его одним из
лучших программистов в мире. Почему это происходит? "

Мастер ответил: "Этот программист овладел Дао. Он пошел
за необходимость разработки, он не сердится, когда система
падает, но принимает вселенную без беспокойства. Он вышел за пределы
необходимые для документации, он не заботится, если кто-то видит, что его код.
Он ушел от необходимости тестирования, каждый из его программы идеально подходят
в себе, спокойный и элегантный, их цель очевидна. Действительно,
он вошел в тайне Дао. "

-------------------------

Книга 3 - Проектирование

Так говорил главный программист:

"Когда программа тестируется, уже слишком поздно, чтобы сделать дизайн
изменения ".

3,1

Там когда-то был человеком, который пошел на выставке компьютер. Каждый день, как он
введен, мужчина сказал охранник у двери:

"Я великий вор, известен мой подвиг кражи. Быть
предупрежден, для этой выставки не избегнут unplundered ".

Речь нарушается охрана сильно, потому что там были миллионы
долларов компьютер внутри оборудования, так что он наблюдал за человеком внимательно. Но
Человек просто бродили от стенда к стенду, напевая тихо сам с собой.

Когда мужчина вышел, охранник отвел его в сторону и обыскал его одежду, но
ничего не было найдено.

На следующий день выставки, этот человек вернулся и упрекнул охранника
сказал: «Я бежал с огромной добычей вчера, но сегодня будет еще
лучше ". Так что охранник смотрел на него все более тесно, но безрезультатно.

В последний день выставки, охранник мог сдержать своего любопытства
больше нет. "Господин Вор", он сказал: "Я очень озадачен, я не могу жить в
мира. Пожалуйста, просветите меня. Что это, что вы крадете? "

Человек улыбнулся. "Я краже идеи", сказал он.

3,2

Там когда-то был мастером программист, который писал неструктурированные программы.
начинающий программист, стремясь подражать ему, а также начал писать
неструктурированные программы. Когда Ученик спросил мастера, чтобы оценить его
прогресс, мастер критиковали его за написание неструктурированных программ,
сказал: «Что подходит для мастера не подходит для
новичок. Вы должны понять Дао, прежде чем преодоление структуры ".

3,3

Был однажды программист, который был прикреплен ко двору военачальника
Ву. Военачальник спросил программиста: "Что легче проектировать:
бухгалтерский пакет или операционную систему? "

"Операционная система", ответил программист.

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

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

Военачальник из Ву кивнул и улыбнулся. "Это все хорошо, но
что легче отладить? "

Программист не ответил.

3,4

Менеджер пришел к мастеру программисту и показал ему требования
документ для новых приложений. Менеджер спросил учителя: "Как долго
займет проектирование этой системы если я назначу пять программистов к нему? "

"Это будет один год", сказал мастер в кратчайшие сроки.

"Но нам нужна эта система немедленно и даже раньше! Как долго это
принять, если я назначу десять программистов к нему? "

Программист мастер нахмурился. "В таком случае, это займет два года."

"А что, если я назначу сто программистов?"

Программист мастер пожал плечами. "Тогда проект никогда не будет
завершен ", сказал он.

-------------------------

Книга 4 - Кодирование

Так говорил главный программист:

"Хорошо написанная программа это свой собственный рай, плохо написанная программа
свой ад ".

4,1

Программа должна быть легкой и гибкой, ее подпрограммы связано как
нитка жемчуга. Духу и целям программы должны быть сохранены
во всем. Там должно быть ни слишком мало или слишком много, ни
ненужные петель и бесполезно переменных, ни отсутствия структуры, ни
Подавляющее жесткости.

Программа должна следовать Закону `наименьшего удивления». Что это за закон?
Это просто, что программа должна всегда отвечать пользователю в пути
Поражает, что его меньше всего.

Программы, независимо от того, насколько сложным, должна действовать как единое целое. Программа
должны быть направлены по логике в течение, а не внешне.

Если программа не в эти требования, он будет в состоянии
беспорядка и путаницы. Единственный способ исправить это переписать
программы.

4,2

Ученик спросил мастера: "У меня есть программа, которая иногда работает и
иногда прерывается. Я следовал правилам программирования, но я
полностью сбиты с толку. Какова причина этого? "

Мастер ответил: "Вы в замешательстве, потому что ты не понимаешь Дао.
Только глупец ожидает разумного поведения от своих собратьев. Почему, как вы
ожидать от машины, что люди построили? Компьютеры моделирования
детерминизма, только Дао совершенно.

«Правила программирования преходящи, только Дао вечно. Поэтому
Вы должны созерцать Дао прежде чем вы получите просветление ".

"Но как я знаю, когда я получил просветление?" Спросил
новичок.

"Ваша программа будет работать правильно," ответил мастер.

4,3

Мастер объяснял природу Дао одному из своих новичков. "
Дао воплощено во всех программных - независимо от того, незначительны ", сказал
мастер.

"Является ли Дао в ручной калькулятор?" Спросил ученик.

"Это", был ответ.

"Является ли Дао в видеоигре?" Продолжает новичка.

"Это даже в видеоигре," сказал учитель.

"И это Дао в ДОС для персонального компьютера?"

Мастер закашлялся и перевел положение немного. "Урок закончен
на сегодняшний день, "сказал он.

4,4

Программист принц Ван был кодирования программного обеспечения. Его пальцы танцевали на
клавиатуры. Программа составлена ​​без сообщения об ошибке, и программа
побежал, как легкий ветерок.

"Отлично!" Принц воскликнул: "Ваша техника безупречна!"

"Техника"? Сказал программист поворот от терминала, "Что я
следовать, Дао - за пределами всех техник! Когда я впервые начал программировать я
что вижу перед собой все проблемы в одну массу. Через три года я не
не видел эту массу. Вместо этого я использовал подпрограммы. Но сейчас я ничего не вижу.
Все мое существо существует в бесформенную пустоту. Мои чувства бездействуют. Мой дух,
свободно работать без плана, следует своим инстинктам. Короче говоря, моя программа
пишет сам. Правда, иногда возникают сложные проблемы. Я вижу их
идет, я замедляться, я смотрю молча. Тогда я изменить одну строку кода
и трудности исчезнут, как клубы дыма простоя. Я затем скомпилировать
программы. Я сижу до сих пор, и пусть радость работы заполнить мое существо. Я закрываю
Глаза на мгновение, а затем выйти из нее. "

Принц Ван сказал: «Будет, что все мои программисты были мудрыми!"

-------------------------

Книга 5 - Техническое обслуживание

Так говорил главный программист:

"Хотя программа должна быть, кроме трех строк, когда-нибудь ему придется быть
поддерживается ".

5,1

Хорошо использовать дверь не требует смазки на петлях.
Быстротекущей поток не растет стагнации.
Ни звука, ни мысли могут путешествовать через вакуум.
Программное обеспечение гниет, если не используется.

Это великие тайны.

5,2

Менеджер спросил программиста, сколько времени ему потребуется, чтобы закончить
Программа, на которой он работает. "Она будет закончена завтра"
Программист быстро ответил.

"Я думаю, вы в настоящее время нереально," сказал менеджер, "Честно говоря, как
времени это займет? "

Программист задумался на мгновение. "У меня есть некоторые особенности, которые я хочу
добавить. Это займет не менее двух недель ", сказал он наконец.

"Даже это слишком много, чтобы ожидать", настаивал менеджер, "Я буду
выполнены, если вы просто скажите, когда программа будет готова ".

Программист согласился с этим.

Несколько лет спустя, менеджер в отставку. На пути к своей отставке
обед, он обнаружил, что программист спит за своим терминалом. Он был
программирование всю ночь.

5,3

Начинающий программист однажды присваивается код простой финансовый пакет.

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

Когда хозяин спросил об этом, новичок пришел в негодование. «Не
таким нетерпеливым ", он сказал:" Я положу в финансовом вещи в конце концов. "

5,4

Есть ли хороший фермер пренебречь урожая он посадил?
Есть ли хорошие учителя выходят даже самого скромного студента?
Есть ли хороший отец позволить одному ребенку голодать?
Есть ли хороший программист отказаться от поддержания его код?

-------------------------

Книга 6 - Менеджмент

Так говорил главный программист:

“Let the programmers be many and the managers few – then all will be
productive.”

6,1

When managers hold endless meetings, the programmers write games. When
accountants talk of quarterly profits, the development budget is about to
be cut. When senior scientists talk blue sky, the clouds are about to roll
in.

Truly, this is not the Tao of Programming.

When managers make commitments, game programs are ignored. When
accountants make long-range plans, harmony and order are about to be
restored. When senior scientists address the problems at hand, the
problems will soon be solved.

Truly, this is the Tao of Programming.

6.2

Why are programmers non-productive?
Because their time is wasted in meetings.

Why are programmers rebellious?
Because the management interferes too much.

Why are the programmers resigning one by one?
Because they are burnt out.

Having worked for poor management, they no longer value their jobs.

6,3

A manager was about to be fired, but a programmer who worked for him
invented a new program that became popular and sold well. As a result, the
manager retained his job.

The manager tried to give the programmer a bonus, but the programmer
refused it, saying, “I wrote the program because I thought it was an
interesting concept, and thus I expect no reward.”

The manager upon hearing this remarked, “This programmer, though he holds
a position of small esteem, understands well the proper duty of an
employee. Let us promote him to the exalted position of management
consultant!”

But when told this, the programmer once more refused, saying, “I exist so
that I can program. If I were promoted, I would do nothing but waste
everyone's time. Can I go now? I have a program that I'm working on.”

6.4

A manager went to his programmers and told them: “As regards to your work
hours: you are going to have to come in at nine in the morning and leave
at five in the afternoon.” At this, all of them became angry and several
resigned on the spot.

So the manager said: “All right, in that case you may set your own
working hours, as long as you finish your projects on schedule.” The
programmers, now satisfied, began to come in at noon and work to the wee
hours of the morning.

————————————————————————–

Book 7 – Corporate Wisdom

Thus spake the master programmer:

“You can demonstrate a program for a corporate executive, but you can't
make him computer literate.”

7.1

A novice asked the master: “In the east there is a great tree-structure
that men call `Corporate Headquarters'. It is bloated out of shape with
vice presidents and accountants. It issues a multitude of memos, each
saying `Go, Hence!' or `Go, Hither!' and nobody knows what is meant. Every
year new names are put onto the branches, but all to no avail. How can
such an unnatural entity be?”

The master replied: “You perceive this immense structure and are
disturbed that it has no rational purpose. Can you not take amusement from
its endless gyrations? Do you not enjoy the untroubled ease of programming
beneath its sheltering branches? Why are you bothered by its
uselessness?”

7.2

In the east there is a shark which is larger than all other fish. It
changes into a bird whose wings are like clouds filling the sky. When this
bird moves across the land, it brings a message from Corporate
Headquarters. This message it drops into the midst of the programmers,
like a seagull making its mark upon the beach. Then the bird mounts on the
wind and, with the blue sky at its back, returns home.

The novice programmer stares in wonder at the bird, for he understands it
not. The average programmer dreads the coming of the bird, for he fears
its message. The master programmer continues to work at his terminal, for
he does not know that the bird has come and gone.

7.3

The Magician of the Ivory Tower brought his latest invention for the
master programmer to examine. The magician wheeled a large black box into
the master's office while the master waited in silence.

“This is an integrated, distributed, general-purpose workstation,” began
the magician, “ergonomically designed with a proprietary operating
system, sixth generation languages, and multiple state of the art user
interfaces. It took my assistants several hundred man years to construct.
Is it not amazing?”

The master raised his eyebrows slightly. “It is indeed amazing,” he
сказал.

“Corporate Headquarters has commanded,” continued the magician, “that
everyone use this workstation as a platform for new programs. Do you agree
to this?”

“Certainly,” replied the master, “I will have it transported to the
data center immediately!” And the magician returned to his tower, well
pleased.

Several days later, a novice wandered into the office of the master
programmer and said, “I cannot find the listing for my new program. Do
you know where it might be?”

“Yes,” replied the master, “the listings are stacked on the platform in
the data center.”

7.4

The master programmer moves from program to program without fear. Нет
change in management can harm him. He will not be fired, even if the
project is cancelled. Почему это происходит? He is filled with Tao.

————————————————————————–

Book 8 – Hardware and Software

Thus spake the master programmer:

“Without the wind, the grass does not move. Without software, hardware is
useless.”

8.1

A novice asked the master: “I perceive that one computer company is much
larger than all others. It towers above its competition like a giant among
dwarfs. Any one of its divisions could comprise an entire business. Why is
this so?”

The master replied, “Why do you ask such foolish questions? That company
is large because it is large. If it only made hardware, nobody would buy
it. If it only made software, nobody would use it. If it only maintained
systems, people would treat it like a servant. But because it combines all
of these things, people think it one of the gods! By not seeking to
strive, it conquers without effort.”

8.2

A master programmer passed a novice programmer one day. The master noted
the novice's preoccupation with a hand-held computer game. “Excuse me,”
he said, “may I examine it?”

The novice bolted to attention and handed the device to the master. “I
see that the device claims to have three levels of play: Easy, Medium, and
Hard,” said the master. “Yet every such device has another level of
play, where the device seeks not to conquer the human, nor to be conquered
by the human.”

“Pray, great master,” implored the novice, “how does one find this
mysterious setting?”

The master dropped the device to the ground and crushed it underfoot. И
suddenly the novice was enlightened.

8.3

There was once a programmer who worked upon microprocessors. “Look at how
well off I am here,” he said to a mainframe programmer who came to visit,
“I have my own operating system and file storage device. I do not have to
share my resources with anyone. The software is self- consistent and
easy-to-use. Why do you not quit your present job and join me here?”

The mainframe programmer then began to describe his system to his friend,
saying “The mainframe sits like an ancient sage meditating in the midst
of the data center. Its disk drives lie end-to-end like a great ocean of
machinery. The software is as multifaceted as a diamond, and as convoluted
as a primeval jungle. The programs, each unique, move through the system
like a swift-flowing river. That is why I am happy where I am.”

The microcomputer programmer, upon hearing this, fell silent. But the two
programmers remained friends until the end of their days.

8.4

Hardware met Software on the road to Changtse. Software said: “You are
Yin and I am Yang. If we travel together we will become famous and earn
vast sums of money.” And so the set forth together, thinking to conquer
the world.

Presently they met Firmware, who was dressed in tattered rags and hobbled
along propped on a thorny stick. Firmware said to them: “The Tao lies
beyond Yin and Yang. It is silent and still as a pool of water. It does
not seek fame, therefore nobody knows its presence. It does not seek
fortune, for it is complete within itself. It exists beyond space and
time.”

Software and Hardware, ashamed, returned to their homes.

————————————————————————–

Book 9 – Epilogue

Thus spake the master programmer:

“It is time for you to leave.”

————————————————————————–

If you liked these, you may also like to read worse is better

A bit of shell redirection

Here is how we normally do shell redirection
$ ./pgm.sh args >out.txt 2>err.txt
I wanted to modify it a bit and run as follows
$ ./pgm.sh args
with the requirement that output and error should go to some filename computed inside pgm.sh based on args. One illustrative case could be when date is part of args. So you would like stdout to go to say /your/directory/pgm_out_YYYYMMDD.txt 1

The problem with standard way of redirecting N>file.txt ie, associating file descriptor N to file.txt , is that it works only for the newly forked process and not for the current process.
so
$ echo hi 1>out.txt ; echo hii will send hi to out.txt but will print hii to stdout. 2

This is where exec comes to our rescue. If we add exec 1>somefile.txt then output from rest of the script will go to somefile.txt

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$./test.sh will redirect hi as well as hii to out.txt

Similarly to redirect stdout as well as stderr we'll do something like this
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp

Now coming back to original point of redirecting to some file from inside the shell, let's say program computed the filename in some variable OUTFILE, we could have just done exec 1>$OUTFILE

That solves the current problem. But you may like to go through following example which achieves 'random access' of file in shell script. Example is from here
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890

With comments, this code is self explanatory.
-
1 It can also be done by $ ./pgm.sh args >pgm_out`date +%Y%m%d` but idea is to generate this file name based on some logic in program itself.
2 1 in 1>out.txt is redundant but it clarifies here that we are redirecting fd 1

Sony VAIO review

A month back I bought a vaio NS25G and have been planning to write this post since then. This post is primarily notes to self and review of the same. Let's get off the mark quickly -

Post has two parts -

I. Review of hardware
II. Installing debian and things to setup

I. Review of hardware

Since I am not a VAIO marketing guy, I'll start other way round -

Why you may not like to buy this laptop :

  1. No bluetooth : believe me, in 2009 sony sells laptop without bluetooth. Sure you can use usb stuff but …
  2. Screen size is 15.4 inches : if you travel a lot then this laptop may not be very handy and also 2.9kg laptop is not exactly the lightest around.
  3. No HDMI output.
  4. No separate graphics card and the likes.(and no dedicated video memory

Now , why you may like to buy it :

  1. This laptop is a damn good desktop. What I mean is this if your requirement is like me – mostly writing programs and trying to use it 25 out of 24 hrs, then with a big screen , extremely comfortable keyboard layout with spacious palm rest and good compute power , it makes a very good combination.
  2. It L2 cache is 2MB and processor/memory system bus are 800MHz. I don't play games so can't say about that but for anything else but a core 2 duo processor with 2GHz freq is good, this is more than enough.
  3. From my usage, I see processor mostly clocks at 1.2GHz, and memory usage ~500MB. That just reinforces previous point.
  4. Battery backup is good, ~2 hrs is what I get.

Just one more thing here – being Sony, it will cost you a bit than other laptops with similar configuration, but that is a call u have to make.

II. Configuring linux (to run out of box ! ) :
It came pre installed with Vista( I think home premium or some fancy name like that). Dungara booted once and created another partition of 150 GB. Debian testing is what I always install and then up(down?)grade to 'unstable' sid.

Things which worked without any problem:

  1. X - unsurprisingly X server had not problem with starting or resolution. After one of the upgrades X refused to start though, but 'X -configure' generated a conf file which worked pretty well.
  2. Audio - Audio output and external mic work fine. kernel version 2.6.29-1-686 #1 SMP and alsa version 1.0.17. This is what you get from
    $ lspci -v |grep Audio 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Con1.0.17troller (rev 03)
  3. Video cam – just works
  4. Hibernate to disk and back – no problem
  5. Wireless - in short – just works.
    $ lspci |grep -i wireless
    03:13:55 04:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01) .

    I think kernel 2.6..27 onwards it works with the stock kernel source. You dont have to install ndiswrapper or things like t
    hat. As a note, please say good buy gnome-network-manager and welcome wicd, it is just a gui layer but behind the scene they have fixed lot of config stuff like wpasupplient and more.

What doesn't work -

  1. Somehow internal mic refuses to work : ( External mic works fine though. Latest alsa sources did not compile cleanly on debian, so for the time being I bought external Internal mic, will try to dig into it sometime in future though.

Few more misc hints for deiban:

  • Package for devnagri font- ttf-indic-fonts
  • Package for flash player – flashplugin-nonfree
  • Entry in sources.list for mplayer and likes – deb http://www.debian-multimedia.org sid main
  • Entry in sources.list for e17 – deb http://debian.alphagemini.org/ unstable main
  • Entry in sources.list for skype – http://download.skype.com/linux/repos/debian/ stable non-free

oneliner for increasing and decreasing the brightness -

[root]prashant@vaio09:12 PM$ cat bin/incbrightness.sh
#!/usr/bin/env bash
echo $[1+`cat /sys/class/backlight/acpi_video0/brightness `] >/sys/class/backlight/acpi_video0/brightness

you'll have to put this in sudo though.
and to decrease change + to – and … you get the idea, right !

A bit more, if you use enlightenment(e17) here are few more hints -

[enlightenment key bindidings]

You can use following key code and mapping

mute :
KEY="Keycode-160" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master toggle"
hibernate :
KEY="Keycode-165" ACTION="exec" PARAMS="sudo /usr/sbin/hibernate-disk"
volume decrease :
KEY="Keycode-174" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2-"
volume increase:
KEY="Keycode-176" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2+"
increase brightness :
KEY="Keycode-212" ACTION="exec" PARAMS="sudo /root/bin/incbrightness.sh"
decrease brightness
KEY="Keycode-101" ACTION="exec" PARAMS="sudo /root/bin/decbrightness.sh"

Следующая страница »