Анкета, пинг, pubsub, pubsubhub, pubsubhubbub

6 септември 2009 г. от Prashant · Коментари
Пила под: технология

В случай, че са скептично настроени, има метод в лудостта по-горе, в наименованието на длъжността. В високотехнологични среди, че е малко вероятно, че не са чували за pubsubhubbub. В бързи няколко месеца, той е бил един от трите най-говорихме за нещата. Останалите две са homomorphic криптиране и Google Wave [ 1 ]. Да се ​​върнем към настоящата мнение - в заглавието показват, как можете да получите на съдържание от други хора. Следните данни стават все по-ясно, ако си представим нещата да се случват по отношение на блогове, въпреки че те концептуално не са ограничени до блогове.

Polling се отнася до сценария, където клиентите продължават да питат сървър, ако нещо ново излезе. Колко често да пита за актуализации винаги ще бъде проблем с избирателната твърде често или твърде рядко, но като един читател посочи, че един велик, нещо с избирателната е, че сървъра не трябва да се поддържа състояние.

Пинг се отнася до случай, когато публикувате статия, можете (или софтуер), също така актуализира някои популярни (Централна) услуги по актуализация. Някои фон тук .

Следваща е pubsub,, което е съкращение публикува / абонирате, един от най-ранните терена е направена от Еван Henshaw-Plath и Kellan Елиът McCrea (72 пързалки, но си струва, преминаващи през). Убедително пример те дадоха срещу това - на определена дата, FriendFeed обходен Flickr 2.9 милиона пъти, за да получите най-новите снимки на 45,754 потребители, от които 6721 са посетили Flickr в тези 24 часа и са могли да "потенциално" прикачи снимка. Имайте предвид, че това, което предлага не е нова технология, тъй като те изтъкват, "революционно нов 20 години стара технология". Ако го правиш за блогове тогава един от основните проблеми, с XMPP - наличие на данни режийни, които могат да бъдат по-висока от 60-70% може да се намали много.

pubsubhub означава публикува Абонирай хъб, и pubsubhubbub е протокол, ядрото на които е идеята за pubsubhub. В който издатели (да речем блогъри) актуализира хъб, който (може да бъде повече от една центрове, които да разговарят помежду си) пребивава някъде "в облака", по протокол, това може да се бутайте и не дърпайте по Протокола, но следващата връзка в верига, концентратор до клиента (да речем читателите), винаги се бута модел. Тази страница е добра отправна точка за pubsubhubbub, преглед пързалки са добри. Още красноречив Анил Dash го описва като бутон уеб.
Два други свързани с тях прочитания, са webhooks, които са основно HTTP обратни извиквания. GitHub го използва, , така че няма PayPal за асинхронни уведомления за плащане в IPN , така и много други. Свързани концепция се rsscloud, което е отново pubsub хъб. Следвайте тази връзка за повече подробности.

Може би се чудите какъв е смисълът на писмено всички тези неща тук, има два 1. Тези неща си струва да се знае, минимално по-малко и 2. Този блог е pubsubhubbub поддръжка за сега чрез хъб appspot използвате този WordPress плъгин и фуражи също е pubsubhubbub, активирани чрез Feedburner, линк тук
-
[ 1 ]. - Добър уводна, прочетете за напълно homomorphic криптиране е тази статия от Брус Шнайер и този разговор повече или по-малко е единственият източник за Google вълна.

-Update - Този пост обяснява как изискването за публичен сървър за обратно може да се работи наоколо за настолни клиенти чрез използване на XMPP шлюз (за pubsubhubbub),.

Малко на събранията

След като прочетете тази статия за свободните буфери заключване и виждат използването на CAS (сравни и суапови), аз се почувствах като публикуване на Асамблеята код, за да направят същото. Използвайте случай там е да пишат на родния метод и го наричат ​​от Java (в 1,5, когато едновременно структури от данни в Java са повече или по-малко не съществуват). Без повече приказки, аз ще отприщи кода върху вас :) . Първият е за КО и втората е за изчисляване на GCD използва алгоритъм на Евклид (това може да се намери на много места и уроци, както и).

Компилирате и изпълнявате инструкциите gcc file_name.c ; ./a.out

Сравнете и суапови

   # Include 
  # Include 
 / / Обмен - newvalue, comperand е стар / очакваната стойност
 / *
  * Функция всъщност прави следното нещо - ако стойността AT * DEST е равна на oldvalue след това да го замените с newvalue друг го остави непроменен: вършим всички тези атомично
  *
  * Има два варианта за връщане стойност
  * 1.is първоначалната стойност на целевите и с напусне тежест на повикващата fxn да го сравни с oldval
  * 2.  го направя тук и да се върне 0 или 1, това трябва да бъде по-ефективно
  ** /

 / * По-късно го промените в макро * /
 INT CAS (Int * DEST, Int oldvalue, вътр newvalue) {
	 ФОРМАТ ("(% d,% D,% г)" * DEST, oldvalue, newvalue),;
	 / * Int CAS (INT DEST, Int oldvalue, вътр newvalue) {* /
	 / * Int CAS (INT DEST, Int newvalue, вътр oldvalue) {* /
	 Int резултат = 1 ;/ * 1 показва, че CAS успели и 0 показва, че не успя * /
	 / * Между другото трябва да зададете CC за знаме clobbering,,!  * /
	 volatile__ __asm__ __ (
			 "Movl 2%,% EAX \ n \ т"
			 "Movl% 3,% ebx \ n \ т"
			 "Movl% 0% ECX \ n \ т"
			 "LOCK \ n \ т"
			 "CMPXCHG ebx%, (% ECX) \ n \ т" / * следва да заключите е на същия ред * /
			 "JZ \ n \ т"
			 "Movl $ 0,% 1 \ n \ т"
			 "Готово: \ n \ т"
			 : "= M" (DEST), "= G" (резултат)
			 : "G" (oldvalue), "ж" (newvalue), "M" (DEST)
			 : "EAX%",% ebx ", - ECX", "CC"
			 );
	 ФОРМАТ ("(% d,% D,% г)" * DEST, oldvalue, newvalue),;
	 върне резултат;
 }

 / * TODO
  * Напише друга ASM fxn, която поставя над fxn в последно време контур и продължаваме да опитваме, освен ако не успее * /

 INT главната () {
	 Int A = 5, B = 6;
	 и Int * C = (INT *) изчистване (sizeof (INT));
	 * C = 6;
	 / * Int C = 6; * /
	 ФОРМАТ ("% г \ n", CAS (C, B, б));
	 ФОРМАТ ("% г \ n", CAS (C, B, а));
	 ФОРМАТ ("% D \ n", CAS (C, A, а));
	 ФОРМАТ ("% г \ n", CAS (C, B, б));
	 * C = 6;
	 / * C = 5; * /
	 ФОРМАТ ("смяна на стойността на * C% г \ n", * в);
	 ФОРМАТ ("% г \ n", CAS (C, B, б));
	 ФОРМАТ ("% г \ n", CAS (C, B, а));
	 ФОРМАТ ("% D \ n", CAS (C, A, а));
	 ФОРМАТ ("% г \ n", CAS (C, A, б));
	 ФОРМАТ ("% г \ n", CAS (C, B, а));
	 връщането на 0;
 }

Форматиране на бележки - изглежда като маркер WP синтаксис е добавянето в края на краищата, игнорирайте.

GCD

 # Include 
 INT GCD (INT един, вътр б) {
     Int резултат;
     / * Compute-големия общ делител, използвайки алгоритъм на Евклид * /
     volatile__ __asm__ __ ("movl% 1,% EAX;"
                           "Movl 2%,% ebx;"
                           "CONTD: cmpl $ 0,%% ebx;"
                           "Je свърши;"
                           "Xorl% EDX,% EDX;"
                           "Idivl% ebx;"
                           "Movl ebx%,% EAX;"
                           "Movl% EDX,% ebx;"
                           "JMP CONTD,;"
                           "Готово: movl% EAX, 0%;": "= G" (резултат): "ж" (а), "G" (б)
     );

     върне резултат;
 }

 INT главната () {
     вътр първо, второ;
     ФОРМАТ ("Въведете две цели числа:");
     scanf ("% г% D", и на първо място, и втория);

     ФОРМАТ ("GCD% D &% D% D \ n", първо, второ, GCD (първо, второ));

     връщането на 0;
 }

Cricketing World очаква Новия Световен Ред

25 август 2009 г. от Prashant · Коментари
Пила под: Други

След серия, която обхваща пет тестове и приблизително два месеца, Англия възстановени пепел.

Нека поговорим за първият печеливш екип - тяхната среда за е "средна", ако не искате до критичната. Принос greame Суон с бухалката ще се брои не по-малко от приноса с топката. Стюарт широка - най-добрите на всички универсален е стартер за 5-ти тест. Андрю Строс е само в съответствие батсман и Джими Андерсън е само в съответствие бомбе.

Въпросът тук не е да ругайте постиженията на печеливш екип, но да постави в перспектива на факта, че въпреки всички тези, Австралия загуби. ще трябва да се мисли за няколко секунди, ако са помолени да назоват най-доброто им бомбе. Добре, че е BW Hilfenhaus. Hauritz надмина очакванията everbody, но все още не е достатъчно добър, за да бъде избран за два от петте теста. Южна Африка никога не се превръща в световен тупалка без световно фабрика клас, Австралия не могат да се надяват да остане без една достатъчно добра поне един. Магьосник излезе на сцената и той не изглежда повече като изкуство, забравете магия. Ponting издигат сред малки смъртните и Майкъл Кларк се изправя много често, но това ги прави отбор с няколко много добри играчи, а не много добър отбор.
Ashes 2009 ще се помни за последните Ashes Андрю Флинтоф ", пристигане Стюарт Широк, като един милион всички универсален (ако той добавя още малко Ashes фолклор обещаващ му старт), и един от на най-показателен дебют век на всички времена от Трот, но това ще също да бъде запомнен като точка, IFS и но-та за надмощие на Австралия са най-накрая за почивка, тя е приключила. Не ме разбирайте погрешно, те все още могат да изкопаят Майк Hussey или Стюарт Кларк, но се чувстват приноса на великите за всички времена, когато те изчезват. Понякога те идват да ви напомня за себе си в IPL, но все още те не могат да бъдат заменени. Да се ​​чувствам благословена за Warne, МакГрат и Gilchrist играе заедно и подкрепена от Waughs, Ponting, Hyden, Мартин и Langer.

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

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

Ruby един покритие, за да създаде хеш

Вчера, докато преминава през един от старите ми програми, намерих тази написана от мен някъде назад:

#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 | B = x.split ("="); b.push (нула), ако b.size == 1;}
   flattened_array = unescaped_array.flatten
   Hash = 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 = 09:45:30 10 Юли, 2009 PDT", "payment_status = До "]                                                                         

 IRB (Основно): 013:0> unescaped_array = unescaped_array.map {| X | B = x.split ("="); b.push (нула), ако b.size == 1;}  

 => [["Успех", нула], ["mc_gross", "10,00"], ["protection_eligibility", "Не могат"], ["payer_id", "U7PPJJ4TSJ47E"] ["данък", "0,00"] ["payment_date", "09: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", "09:45: 30 Юли 10, 2009 PDT "," payment_status "," В очакване "]
 IRB (Основно): 015:0>
 Hash = Hash [* flattened_array.]
 => {"Данък" => "0,00", "payment_status" => "В очакване", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "успех" => нула "payment_date" = > "09:45:30 10 Юли, 2009 PDT", "protection_eligibility" => "Не могат"} 

BTW, * се нарича кръгче оператор в Ruby

Друг начин за създаване на хеша "масив от двойки" е да се използва инжектират:

  Hash = [[1,2], [3,4]] се инжектира ({}). | резултат, елемент | резултат [element.first] = резултат [element.last]; резултат} 

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

Тук е малко несвързан случай използването на създаване на хеша масиви:

  IRB (Основно): 005:0> [1,2,3,4,7,9] group_by {| X | X <5?  : По-малка :: голяма}

 => {: По-малка => [1, 2, 3, 4]: по-голяма => [7, 9]} 

Можете да правите повече неща, основно в резултат на блока се използва като ключ за този елемент в хеш.

Gmail, пес и msmtp, корекция

Ако използвате пес и SMTP достъп до Gmail. Ето новини (лош). Готини момчета на Google отново сменя сертификат. О, не ви попитам - как да го знаем? Simple пес започна да се оплаква за лош сертификат, когато се опитват да използват 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

След това просто променя следния ред в ~~ /. 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 и Awesome Проучване

15 август 2009 г. от Prashant · Коментари
Пила под: Други

Ето две връзки за проучване Git (версия система за контрол) и страхотен мениджър на прозорци общността. Ако използвате някоя от тези, моля, отделете малко време, за да попълнят въпросника. Мислете за това като най-простият начин да допринесем обратно за софтуера, който използвате.
Ето линкове:

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

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

Забележка - (както е на тези страници, но в долната част :) ) -
"Ако имате бисквитки поддръжка, вие винаги може да представи частично пълни проучване, и да се върнете към вашите отговори на по-късен срок, като попълва по-късно."

Сливане на хешове в yaml файлове CONF

YAML е доста по-удобен за писане на конфигурационните файлове. Основното предимство е, че се чете като текстов файл. Това работи много добре, ако си конфигурационния файл е плосък (няма йерархия) и няма повторения.
Ако вашият конфигурации файла има повторения, тогава има смисъл да се отделят тези елементи и да ги използва повторно. Какво искам да кажа е това - да кажем, че вие ​​си конфигурационния файл изглежда така:

  развитие:
   input_location: common_input
   output_location: dev_location
   мейл:
     smtp_server: your_server
     Login: your_login
     Парола: top_secret
 производство:
   input_location: common_input
   output_location: dev_location
   мейл:
     smtp_server: your_server
     Login: your_login
     Парола: top_secret 

Ако приемем, че по-горе код в / TMP / test.yml тук е как можете да прочетете в Python и Ruby
$cat readyml.py

 #! / ЮЕсАр / хамбар / "Околна среда" Python
 от внос pprint pprint, като ПП
 # В Debian трябва да инсталирате Python-yaml
 от yaml внос натоварване, load_all, сметището
 Hash = товара (отворен ("/ TMP / test.yml,"))
 РР (хеш ['развитие']) 


$ cat readyml.rb

  #! / ЮЕсАр / хамбар / "Околна среда" рубин
 изисква "ПП"
 Hash = YAML :: натоварване (File.open ("/ TMP / test.yml,").)
 ПП хеш ["разработване"] 

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

Имайте предвид, че в по-горе откъс код, всичко е различна от изходната Мястото е същото в разработването и производството част. Това е, където yml възел идентификатор идва да спаси. Идеята е проста, за да има набор от стойности по подразбиране и да ги замени на различно място.
Може да се разглобява, както следва:

  неустойки: & подразбиране
   input_location: common_input
   output_location: dev_location
   мейл:
     SENDER_NAME: подател
     smtp_server: your_server
     Login: your_login
     Парола: top_secret
 развитие:
   <<: * По подразбиране
 производство:
   <<: * По подразбиране
   output_location: prod_location 


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

Чудесно, тя работи (TM).
Може да се каже ние търгуваме известна яснота за малко на магия. Ето един малък обяснение: и * и <<: и, което е котва тагове може да се разбира като възел идентификатор * възел позоваване и <<: щандове за хеш обединяването.

За повече подробности вж или yaml спецификации или Уикипедия
Досега толкова добър, но има и уловка тук, тези хеш слива не са рекурсивни. Какво означава това: да речем, че искате да имате различно име на подателя за поща в две среди, може да се изкушите да направите следното:

  неустойки: & подразбиране
   input_location: common_input
   output_location: dev_location
   мейл:
     SENDER_NAME: подател
     smtp_server: your_server
     Login: your_login
     Парола: 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
   Login: your_login
   Парола: 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"
$

Знаете ли, че имате още едно ниво на гнездене, добре Определено може да се развивам още едно ниво, но след това се превръща в каша. Така че, ако не се опитвате да напишете решение на кулите на Ханой в CONF файл, е по-добре да restucture CONF файл, отколкото да копаят в yaml или нещо друго. Но това е вашето обаждане, така или иначе.

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

След дълго време, мога да се намери източник за следния цитат,

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

Той е от едно есе, наречено "Красива софтуер от Чарлз Конъл.

Друга любима моя е Zen на Python

Красива е по-добре, отколкото грозна.
Изрично е по-добре, отколкото имплицитно.
Просто е по-добре, отколкото комплекс.
Комплексът е по-добре, отколкото сложно.
Апартамента е по-добре от вложеното.
Рядка е по-добре, отколкото гъста.
Четивността се брои.
Специални случаи, които не са специални достатъчно, за да нарушават правилата.
Въпреки че практичността бие чистота.
Грешки никога не трябва да мине тихо.
Освен ако изрично е заглушено.
В лицето на неяснота, да откаже на изкушението да се отгатне.
Трябва да има и за предпочитане само един очевиден начин да го направя.
Въпреки че по този начин не може да е очевидно най-напред, освен ако не сте холандски.
Сега е по-добре, отколкото никога.
Въпреки че никога не е често по-добре, отколкото * право * сега.
Ако реализацията е трудно да се обясни, това е лоша идея.
Ако реализацията е лесно да се обясни, може би е добра идея.
Пространствата от имена са една honking страхотна идея - да направим повече от тези!
-------------------------
и след това е класически Тао на програмирането

-

кредити както на свързан сайт

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

Транскрипция от Duke Hillard

Предавани от Анупам Триведи, Sajitha Tampi и Meghshyam Jagannath,,

Re-HTML-рана и редактират от Крейгън Sittler,

-

Книга 1 - The Silent Void

Така говореше майстор програмист:

"Когато сте научили да грабне кода на грешката от капана рамка,
ще дойде време да си тръгнеш. "

1,1

Се формира нещо тайнствено, роден в тиха празнота. Изчакване сам и
неподвижно, тя е едновременно все още и все пак в постоянно движение. Тя е източник
на всички програми. Аз не знам името му, така че аз ще го наричаме Дао на
Програмиране.

Ако Тао е голям, а след това операционната система е страхотно. Ако операционната
система е голям, а след това компилатора е страхотно. Ако компилаторът е голям,
след това заявлението е страхотно. Потребителят е доволен и съществува
хармонията в света.

Дао на програмирането потоци далеч, и се връща на вятъра на сутринта.

1,2

Дао ражда на машинен език. Машинен език ражда
асемблер.

Асемблера родила на компилатор. Сега там са десет хиляди
езици.

Всеки език има своя цел, колкото и скромна. Всеки език изразява
Ин и Ян на софтуера. Всеки език има своето място в рамките на Дао.

Но не програмирате в COBOL, ако можете да го избегнете.

1,3

В началото бе Дао. Дао ражда пространството и времето.
Ето защо пространството и времето са Ин и Ян на програмирането.

Програмистите, които не разбират Дао са винаги вървят от време
и място за техните програми. Програмистите, които разберат Тао винаги
имат достатъчно време и пространство, за да постигнат целите си.

Как би могло да бъде другояче?

1,4

Мъдрият програмист е казал за Тао и го следва. Средната
програмист се разказва за Тао и търсене за него. Глупавите програмист
се разказва за Тао и се смее на това.

Ако не беше смях, няма да има Тао.

Най-високите звуци са най-силно да чуят.
В бъдеще е начин да се оттеглят.
Голям талант показва в края на живота.
Дори перфектна програма все още има бъгове.

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

Книга 2 - древните майстори

Така говореше майстор програмист:

"След три дни без програмиране, животът става безсмислен."

2,1

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

Наясно, като лисица, преминаване на водата. Сигнализирай, като генерал на
бойното поле. Вид, като домакиня, поздрави гостите си. Обикновено, като
uncarved блокове от дърво. Непрозрачни, като черни басейни в затъмнени пещери.

Кой може да каже тайните на сърцата и умовете си?

Отговорът съществува само в Тао.

2,2

Grand Master Тюринг веднъж сънувал, че е една машина. Когато той се събуди
възкликна:

"Не знам дали съм Тюринг сънувам, че съм една машина, или
машина сънувам, че съм Тюринг! "

2,3

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

Мениджърът заяви: "Аз никога не трябваше да ви изпрати на конференцията. Тези
програмисти живеят отвъд физическия свят. Те считат, че живота е абсурдно,
случайно съвпадение. Те идват и си отиват, без да знае ограничения.
Без да се интересувам, те живеят само за техните програми. Защо трябва да те притеснява
със социалните конвенции?

"Те са живи в рамките на Тао."

2,4

Новак попита Учителя: "Тук е програмист, който никога не проектира,
документи или тестове неговите програма. Но всички, които знаят му го смятат за един от
най-добрите програмисти в света. Защо е това? "

Учителят отговаря: "Това програмист е овладял Дао. Той е отишло
отвъд необходимостта за проектиране; той да не се превърне ядосан, когато системата
катастрофи, но приема вселена без притеснения. Той е отишло отвъд
необходимостта от документация, той вече не му пука, ако някой друг не вижда кода си.
Той отиде отвъд необходимостта от изпитване, като всяка от неговите програми са перфектни
в себе си, спокойна и елегантна, тяхната цел очевидно. Наистина,
той е влязъл в тайната на Тао. "

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

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

Така говореше майстор програмист:

"Когато програмата се тества, че е твърде късно да се направи дизайн
промени. "

3,1

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

"Аз съм велик крадец, известен за моите подвизи в кражба от магазин. Бъдете
предупредени за тази търговия, шоу не може да избяга unplundered. "

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

Когато си тръгне човекът, телохранителите му дръпна настрана и търси дрехите си, но
нищо не е да се намери.

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

В последния ден на търговско изложение, телохранителите можаха да сдържат любопитството си
вече не. "Сър крадец", каза той, "Аз съм в недоумение, не могат да живеят в
мир. Моля да ме просвети. Какво е това, че ви крадат? "

Мъжът се усмихна. "Аз съм кражба на идеи", каза той.

3,2

Има веднъж е майстор програмист, който пише неструктурирани програми. А
начинаещ програмист, се стреми да го имитират, също започна да пише
неструктурирани програми. Когато новак попита капитана, за да се оцени неговата
прогрес, капитанът го критикувал за писане на неструктурирани програми,
казвайки: "Това, което е подходящо за капитана не е подходящо за
новак. Трябва да разберете, Дао преди отвъд структура. "

3,3

Имаше веднъж един програмист, който е прикрепен към съда на военачалник
Wu. Военачалник попита на програмист: "Кое е по-лесно да се проектира:
счетоводен пакет или операционна система? "

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

Военачалник произнесе удивителен на неверие. "Със сигурност счетоводна
Пакетът е тривиален до сложността на една операционна система ", каза той
каза.

"Не е така", каза на програмиста, при проектирането на един счетоводен пакет,
програмист работи като посредник между хора, които имат различен
идеи: как трябва да работят, как своите доклади трябва да се появи, и как тя трябва да
в съответствие с данъчните закони. От друга страна, една операционна система не се ограничава
от външни изяви. При проектирането на една операционна система, програмист
търси простата хармония между машина и идеи. Ето защо един
Операционната система е по-лесно за проектиране. "

Военачалник на Wu кимна и се усмихна. "Това е всичко добро и добре, но
което е по-лесно да трасирате? "

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

3,4

Мениджър отиде на капитана програмист и го показа на изискванията
документ за ново заявление. Мениджърът попитал капитана: "Колко дълго
ще отнеме да се проектира тази система, ако ми възложите пет програмисти да го? "

"Това ще отнеме една година", каза капитанът на кораба незабавно.

"Но ние нужда от тази система веднага, или дори по-рано! Колко време ще
предприеме, ако зададете десет програмисти да го? "

Майстор програмист се намръщи. "В този случай, тя ще отнеме две години."

"И какво ще стане, ако аз присвоите сто програмисти към него?"

Програмист майстор вдигна рамене. "Тогава дизайн никога няма да бъде
завършен ", каза той.

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

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

Така говореше майстор програмист:

"Един добре написан програма е неговата собствена небето; зле написана програма е
своя ад. "

4,1

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

Една програма трябва да следва "Закона за най-малкото учудване". Какъв е този закон?
Това е просто, че програмата винаги трябва да отговорят на потребителя в начина, по който
, които го удивляват малко.

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

Ако програмата не успее в тези изисквания, тя ще бъде в състояние на
безредици и объркване. Единственият начин да се коригира това е да се пренапише
програма.

4,2

Новак попитал капитана: "Имам една програма, която по някое време работи и
понякога може да се прекрати. Следя правилата за програмиране, а аз съм
напълно объркани. Каква е причината за това? "

Капитанът отговорил: "Вие сте объркани, защото не разбират Тао.
Само глупак очаква рационално поведение от колегите си хора. Защо правите
се очаква от една машина, която хората са построени? Компютри симулират
детерминизъм; само Тао е перфектен.

"Правилата на програмирането са преходни, само Дао е вечен. Следователно
трябва да съзерцавам Тао, преди да сте получили просветление. "

"Но как ще разбера, когато съм получил просветление? Зададен
новак.

"Вашата програма ще работи коректно", отговори капитанът.

4,3

Учител обяснява естеството на Тао на един от неговите послушници. "
Тао е въплътена в всички софтуер, независимо от това колко незначителен ", каза
на капитана.

"Дао в ръчен калкулатор?", Попита новак.

"Това е", бил отговорът.

"Дао във видео игра", продължи новак.

"Това е дори във видео игра", каза капитанът.

"И е Тао в DOS за персонален компютър?"

Капитанът се изкашля и леко изместен позицията си. "Урокът е над
за днес ", каза той.

4,4

Програмист Принц Уан е кодиране на софтуер. Пръстите му танцуваха
клавиатурата. Програмата, съставен без съобщение за грешка и програмата
завтече като нежен вятър.

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

"Техника", каза, че програмистът превръща от терминала си, "Това, което
следват е Тао - отвъд всички техники! Когато за първи път започва да съм програмирате
ще видите преди мен целият проблем в една маса. След три години няма
вече видях тази маса. Вместо това, аз използвам подпрограми. Но сега виждам нищо.
Цялото ми същество съществува в безформена празнота. Сетивата ми не са активни. Моя дух,
свободни да работят без план, следва своя инстинкт. Накратко, моята програма
пише себе си. Вярно е, че понякога има трудни проблеми. Аз ги виждам
идва, аз се забави, гледам тихо. Тогава се променя един ред код
и трудностите изчезват като кълба празен дим. След това се компилира
програма. Все още седя и нека радостта от работата изпълниш моето същество. Да закрия
очите за момент и след това да излезете. "

Принц Уан каза: "Бихте, че всички от моите програмисти са като мъдри!"

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

Книга 5 - Поддръжка

Така говореше майстор програмист:

"Въпреки че програмата да бъде, но три линии, някой ден той ще трябва да бъдат
поддържани. "

5,1

А добре използван врата, не се нуждае от масло от пантите.
Бързо прелял поток не расте в застой.
Нито звук, нито мисли могат да пътуват чрез вакуум.
Софтуер гние, ако не се използват.

Това са велики загадки.

5,2

Мениджър поиска програмист, за колко време ще го взема, за да завършите
програма, на която той е работил. "Това ще бъде завършен утре,"
програмист незабавно отговори.

"Мисля, че се е нереалистично", каза мениджърът "Честно казано, как
време ще отнеме? "

Програмистът се замисли за момент. "Имам някои функции, които желаят да
добавите. Това ще отнеме най-малко две седмици, той най-накрая каза.

"Дори това е твърде много, за да се очаква," настоя мениджър, "Аз ще бъда
удовлетворен, ако Вие просто да ми кажете кога програмата е пълна. "

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

Няколко години по-късно, мениджърът се пенсионира. По начина, по който до пенсионирането си
обяд, той открил, програмист заспал си терминал. Той е бил
програмиране цяла нощ.

5,3

Начинаещ програмист някога е бил назначен за кодиране прост финансов пакет.

Новак работи яростно в продължение на много дни, но когато господаря си преразглеждат
програмата си, той открил, че то съдържа екран, редактор, набор от
генерализирана графика ежедневие, един интерфейс за изкуствен интелект, но
не се споменава нищо финансова.

Когато капитанът попита за това, послушницата става възмутен. "Не се
толкова нетърпеливи, "каза той:" Ще поставя във финансовия неща в крайна сметка. "

5,4

Има ли добър фермер се пренебрегва култура, той е посадил?
Има ли добър учител пренебрегват дори и най-скромен студент?
Има ли добър баща позволи на едно дете да гладуват?
Има ли добър програмист да откаже да се поддържа кода си?

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

Книга 6 - за управление на

Thus spake the master programmer:

“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. То
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
said.

“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. And
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"

Следваща страница »