Průzkum, stolní, pubsub, pubsubhub, pubsubhubbub
V případě, že jsou skeptičtí, je metoda v šílenství výše, v názvu příspěvku. V tech kruzích je nepravděpodobné, že jste slyšeli o pubsubhubbub. V rychlých několik měsíců, to byl jeden ze tří největších mluvil o věcech. Další dva být homomorfní šifrování a Google vlna [ 1. ]. Návratu do současné post - termíny v názvu naznačují, jak se dostat obsah od ostatních lidí. Následující údaje se více zřejmé, že pokud si představit, co se děje s ohledem na blogy, i když jsou koncepčně neomezuje pouze na blogy.
Dotazování se vztahuje k situaci, kdy klienti Proste na server, pokud se něco nového vymyslet. Jak často žádat o změnách bude vždy problém s příliš častým dotazováním nebo příliš časté, ale jako jeden čtenář poukázal na tu , že jeden velký, věc se dotazování je, že server nemá k udržení stavu.
Ping se vztahuje na případ, kdy psát článek, vy (nebo váš software) se také aktualizuje některé populární (centrální) aktualizační služby. Některé pozadí zde .
Další je pubsub což je zkratka pro publish / subscribe, jeden z nejbližší hřiště pro to bylo děláno zde Evan Henshaw-Plathové a Kellan Elliott-McCrea (72 snímků, ale stojí za to prochází). Přesvědčivé příklad dali proti byl tento - k určitému datu, FriendFeed plazil Flickr 2,9 milionu krát získat nejnovější fotky 45,754 uživatelů, z toho 6721 navštívil Flickr v těch 24 hodin a mohl "potenciálně" nahráli fotografie. Všimněte si, že to, co navrhoval není nová technologie, protože poukazují na "revoluční nový 20 let staré technologie". Pokud to pro blogy, pak jedním z hlavních problémů, s xmpp - přítomnost dat nad hlavou, což může být jak vysoce jak 60-70% může být snížena hodně.
pubsubhub znamená publikovat subscribe hub a pubsubhubbub je protokol, jádro je myšlenka pubsubhub. Wherein vydavatelů (tedy bloggerů) aktualizovat centrum, které (může být více než jeden náboje, které spolu mluví) žije "kdesi v oblaku", podle protokolu to lze tlačit nebo tahat dle protokolu, ale v další odkaz řetěz, náboje na klienta (řekněme čtenáře) je vždy prosazovat model. Tato stránka je dobrým výchozím bodem pro pubsubhubbub, přehled snímky jsou dobré. Někdy výmluvné Anil Dash popisuje to tady jako tlačítkem webu.
Dva další související čtenářů jsou webhooks což je v podstatě http zpětná volání. Github používá ho, tak se paypal pro asynchronní oznámení o platbě v IPN . Tak to mnoho dalších. Příbuzné pojetí je rsscloud což je opět pubsub náboj. Následujte tento odkaz podrobnosti.
Možná se divíte, co má smysl psát to všechno tady, jsou tam dva 1. Tyto věci jsou dobré vědět, minimálně alespoň a 2. Tento blog je povoleno pubsubhubbub nyní přes hubu appspot pomocí tohoto wordpress plugin a krmiv, příliš je povoleno pubsubhubbub přes FeedBurner, odkaz zde
-
[ 1 ]. - Dobré úvodní čtení pro plně homomorfní šifrování je tento článek Bruce Schneier a tato diskuse je více či méně jediný zdroj pro Google Wave.
-UPDATE - Tento příspěvek vysvětluje, jak lze požadavek na veřejném serveru pro zpětné volání je obejít pro desktopové klienty pomocí XMPP bránu (pro pubsubhubbub).
Trochu montáže
Po přečtení tohoto článku o nárazníky Lock Free a viděl využití CAS (srovnání a výměna), připadal jsem si jako vysílání kód assembleru, aby učinily totéž. Use case tam bylo napsat nativní metody a volat z Java zpět do 1.5, kdy souběžné datové struktury v Javě byly více či méně neexistuje). Bez dalších okolků, já se uvolnil kód na vás
. Prvním z nich je pro CAS a druhý je pro výpočetní GCD pomocí Euclida algoritmus (ten lze nalézt na mnoha místech a cvičení i).
Kompilovat a spouštět instrukce gcc file_name.c ; ./a.out
Porovnejte a Swap
# Include# Include / / Výměna - newValue, comperand je starý / očekávaná hodnota / * * Funkce vlastně dělá následující věc - pokud je hodnota na * dest se rovná oldvalue pak jej nahradit jiným newValue ponechat beze změny: to vše atomicky * * Existují dvě možnosti pro návratové hodnoty * 1.is počáteční hodnota z * dest a nechat zátěže volajícího fxn porovnat ji s oldval * 2. to sem a vrátí 0 nebo 1, mělo by to být efektivnější ** / / * Později změnit v makru * / int cas (int * dest, int oldvalue, int newValue) { printf ("(% d,% d,% d)", * dest, oldvalue, newValue); / * Int CAS (int dest, int oldvalue, int newValue) {* / / * Int CAS (int dest, int newValue, int oldvalue) {* / int result = 1 ;/ * 1 ukazuje, že se podařilo cas a 0 ukazuje, že se nezdařilo * / / * Btw třeba nastavit cc pro vlajky přepisování! * / __asm__ __ volatile__ ( "Movl% 2,%% eax \ n \ t" "Movl% 3,%% ebx \ n \ t" "Movl% 0,%% ecx \ n \ t" "LOCK \ n \ t" "CMPXCHG%% ebx, (%% ecx) \ n \ t" / * LOCK by měl být na stejném řádku * / "JZ Dáno \ n \ t" "Movl $ 0,% 1 \ n \ t" "Dáno: \ n \ t" : "= M" (dest), "= g" (výsledek) : "G" (oldvalue), "G" (newValue), "m" (dest) : "% Eax", "% ebx", "ecx", "cc" ); printf ("(% d,% d,% d)", * dest, oldvalue, newValue); return vysledek; } / * TODO * Napsat další asm fxn který se projevuje především fxn v cyklu while a dál snažit, pokud uspěje * / int main () { int = 5, b = 6; int * c = (int *) malloc (sizeof (int)); * C = 6; / * Int c = 6; * / printf ("% d \ n", CAS (c, b, b)); printf ("% d \ n", CAS (c, b,)); printf ("% d \ n", CAS (c,,)); printf ("% d \ n", CAS (c, b, b)); * C = 6; / * C = 5; * / printf ("měnící se hodnota * c k% d \ n", * c); printf ("% d \ n", CAS (c, b, b)); printf ("% d \ n", CAS (c, b,)); printf ("% d \ n", CAS (c,,)); printf ("% d \ n", CAS (c, a, b)); printf ("% d \ n", CAS (c, b,)); return 0; }
Formátování poznámky - se zdá být jako zvýrazňovač syntaxe wp je přidání nakonec ignorovat.
GCD
# Includeint gcd (int, int b) { int vysledek; / * Počítat největší společný dělitel pomocí Euclida algoritmus * / __asm__ __ volatile__ ("movl% 1,%% eax;" "Movl% 2,%% ebx;" "CONTD: cMpl $ 0,%% ebx;" "Je provedeno;" "Xorl%% edx,%% edx;" "Idivl%% ebx;" "Movl%% ebx,%% eax;" "Movl%% edx,%% ebx;" "Jmp CONTD;" "Dáno: movl%% eax,% 0;": "= g" (výsledek): "g" (), "G" (b) ); return vysledek; } int main () { int první, druhý, printf ("Zadejte dvě celá čísla:"); scanf ("% d% d", a první, a druhý); printf ("% d GCD ze &% d je% d \ n", první, druhá, gcd (první, druhá)); return 0; }
Kriketovou Svět čeká na nového světového řádu
Po sérii trvající pět testů a přibližně dva měsíce, Anglie regenerované popel.
Pojďme mluvit o vítězný tým první - jejich středu, aby je "průměrná", pokud nechcete, aby kritická. Greame Swann příspěvek s netopýrem bude počítat minimálně příspěvku s míčem. Stuart Broad - nejlepší všichni univerzál byl bez startéru pro 5. test. Andrew Strauss byl pouze v souladu pálkař a Jimmy Anderson byl pouze v souladu nadhazovač.
Bod zde není nadávat úspěchy vítězného týmu, ale dát do perspektivy, že i přes všechny tyto, Austrálie ztratila. budete muset myslet na pár vteřin, je-li požádáni o zadání názvu své nejlepší nadhazovače. Správně, je to BW Hilfenhaus. Hauritz překonal očekávání everbody je ale stále není dost dobrý, které budou vybrány ve dvou z pěti testů. Jižní Afrika nikdy se stal svět šlágr bez světové třídy kužel, lze doufat, že Austrálie není zůstávají jednou, aniž by jeden dobrý dost a alespoň jeden. Kouzelník opustil jeviště a to nevypadá jako umění už, zapomeň na magii. Ponting stojí vysoký u menších smrtelníků a Michael Clarke vstane velmi často, ale to z nich dělá tým s několika velmi dobrých hráčů a ne velmi dobrý tým.
Popel 2009 se bude vzpomínat za posledních Ashes Andrew Flintoff je, Stuart Broad příchodu jako všechny univerzální (pokud přidá nějaký další Ashes folklor jeho slibný začátek), a jeden z nejvýmluvnější debutového století všech dob podle Trott, ale bude také vzpomínat jako na místo, kde IFS a Buts o nadvládu v Austrálii byly nakonec dal k odpočinku, to je u konce. Nechápejte mě špatně, že mohou ještě objevit Mike Hussey, nebo Stuart Clark, ale máte pocit, že přínos všech časových velikánů, když se ztratí. Někdy přijdou, která vám připomene sebe v IPL, ale přesto je nelze nahradit. Pojďme se cítím požehnán za to vidět Warne, McGrath a Gilchrist hrát spolu a je podporován Waughs, Ponting, Hyden, Martin a Langer.
Do budoucna bude Jižní Afrika stále ještě je velmi dobrý tým, ale oni potřebují vyhrát semifinále a být více konzistentní po celém světě, bude Pákistán zůstává tajemně brilantní, bude indické Mladé pušky pravděpodobně zjistíte, že těžké vyplnit boty mimořádných předchůdců. Srí Lanka by měly i nadále ukazovat záblesky umění řemesla. Ale můžeme čekat někdy před mít všichni ven dominantní tým nebo předtím, než kapitán si stěžuje na nedostatečné hospodářské soutěže, jak Steve Waugh udělal jednou.
Na příbuznou notu - pojďme přivítat nadcházející záda Asif, on má sakra velký potenciál, doufejme, že vidět něco z toho a také vítáni Andy květina v novém awatar, přímo nemůžete udržet dobré lidi se na dlouho.
Ruby jeden vložky pro vytvoření hash
Včera při průchodu jednoho z mých starých programů, našel jsem to napsal já někdy zpět:
#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
Zabít některé z napětí dovolte mi prozradit, že raw_text vypadá
, Přímo to bylo řez od paypal platby potvrzení.
Nad řádku, pokud rozděleny do částí zní lépe:
unescaped_array = CGI.unescape (raw_text). split ('&') unescaped_array = unescaped_array.collect {| x | = b x.split ("="); b.push (nula), pokud b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Udělejme jednotlivé kroky v IRB:
IRB (hlavní):. 009:0> unescaped_array = CGI.unescape (raw_text) split ('&') => ["Úspěch", "mc_gross = 10,00", "protection_eligibility = nezpůsobilý", "payer_id = U7PPJJ4TSJ47E", "daň = 0,00", "payment_date = 09:45:30 10.07.2009 PDT", "payment_status = Do "] IRB (hlavní): 013:0> unescaped_array = unescaped_array.map {| x | = b x.split ("="); b.push (nula), pokud b.size == 1, b} => [["Úspěch", nil], ["mc_gross", "10,00"], ["protection_eligibility", "Zákaz činnosti"], ["payer_id", "U7PPJJ4TSJ47E"], ["daň", "0.00"] ["payment_date", "09:45:30 10.07.2009 PDT"], ["payment_status", "Do"]] IRB (hlavní): 014:0> flattened_array = unescaped_array.flatten => ["Úspěch", nula, "mc_gross", "10,00", "protection_eligibility", "nezpůsobilý", "payer_id", "U7PPJJ4TSJ47E", "daň", "0.00", "payment_date", "9:45: 30 10.07.2009 PDT "," payment_status "," Do "] IRB (hlavní): 015:0> hash = Hash [* flattened_array] => {"Daň" => "0.00", "payment_status" => "Do", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "úspěch" => nula, "payment_date" = > "09:45:30 10.07.2009 PDT", "protection_eligibility" => "nezpůsobilý"}
BTW, je nazýván * ikona operátor v ruby
Další způsob, jak vytvořit hash z 'řady párů je použít injekci:
hash = [[1,2], [3,4]] injekci ({}). {| výsledek, prvek | výsledek [element.first] = výsledek [element.last];} výsledek Existuje ještě jeden způsob, jak
Napište smyčku, že nechám jako cvičení na čtenáře!
Zde je trochu nesouvisí případ užití vytváření hash z pole:
IRB (hlavní): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Menší větší ::} => {: Menší => [1, 2, 3, 4]: větší => [7, 9]}
Můžete to udělat více věcí, v podstatě výsledek bloku se používá jako klíč pro tento prvek ve výsledné hodnoty hash.
gmail, mutt a msmtp oprava
Pokud používáte mutt a SMTP pro přístup ke službě Gmail. Zde je (špatné) zprávy. Skvělé kluci na Google opět změnil certifikát. Ach, vy jste se zeptat - jak to víš? Jednoduché mutt začal stěžovat na špatné certifikátu při pokusu o použití msmpt, nechvalně známý Hasičské msmtp: TLS ověření certifikátu selhal:. Certifikát nemá známého vydavatele " přivítal mě na obrazovce.
Přejít potvrzení -
Stačí spustit po
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
Na místě staré Thwate serveru se dostanete po emitenta v segmentu
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Naštěstí oprava je jednoduchá, tady je to, co musíte udělat na debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Po tomto stačí změnit následující řádky ve vás ~~~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
na
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git a skvělý přehled
Zde jsou dva odkazy pro průzkum podle GIT (systém pro správu verzí) a úžasné (window manager) komunity. Používáte-li některý z nich, najděte si na nějaký čas na vyplnění dotazníku. Ber to jako nejjednodušší způsob, jak přispět zpět na software, který používáte.
Zde jsou odkazy:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Poznámka - (Jak najít na těchto stránkách, ale na dně
) -
"Pokud máte povoleny cookies, můžete vždy předložit vyplněný zčásti průzkum, a vrátit se do odpovědí na pozdější dobu, dokončení později."
Slučování hashe v YAML conf soubory
YAML je velmi užitečná pro psaní konfiguračních souborů. Hlavní výhodou je to, že se čte jako textový soubor. To funguje opravdu dobře, pokud váš konfigurační soubor je plochá (bez hierarchie) a nemá žádné opakování.
Pokud váš soubor obsahuje opakování konfigurace, pak má smysl oddělit tyto prvky a je znovu použít. Co chci říct je to - řekněme, že jste si konfigurační soubor vypadá takto:
vývoj: input_location: common_input output_location: dev_location mail: smtp_server: větev Váš_server Login: your_login heslo: top_secret produkce: input_location: common_input output_location: dev_location mail: smtp_server: větev Váš_server Login: your_login heslo: top_secret
Za předpokladu, že výše uvedený kód do / tmp / test.yml zde je, jak si můžete přečíst v Python a Ruby
$cat readyml.py
#! / Usr / bin / env python od dovozního pprint pprint jako pb # V Debianu je třeba nainstalovat python-YAML YAML z dovozu zatížení, load_all výklopné hash = zatížení (open ("/ tmp / test.yml ')) pp (hash ['vývoj'])
$ cat readyml.rb
#! / Usr / bin / env ruby vyžadují "PP" hash = YAML :: load (File.open ("/ tmp / test.yml"). číst) pb hash ['vývoj']
tady je praktickým vložka verze ruby
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' , nebo si můžete zkusit totéž v IRB nebo python konzole.
Všimněte si, že ve výše uvedeném kódu, všechno je jiné, než výstup poloha je stejná ve vývoji a výrobě části. To je místo, kde yml uzel identifikátor přijde zachránit. Myšlenka je jednoduchá mít sadu výchozích hodnot a přepsat je na jiném místě.
Dalo by se vytáhněte ji od sebe takto:
výchozí: výchozí nastavení a input_location: common_input output_location: dev_location mail: SENDER_NAME: odesílatel smtp_server: větev Váš_server Login: your_login heslo: top_secret vývoj: << * Výchozí produkce: << * Výchozí output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Skvělé, to funguje (tm)!.
Pravděpodobně se obchoduje nějakou přehlednost pro trochu magie. Zde je malé vysvětlení: a * a <<: a který je kotva tag lze chápat jako identifikátor uzlu, uzel * je referenční a <<: kandiduje na hash sloučení.
Pro více informací viz buď YAML specifikace nebo Wikipedie
Zatím je to dobré, ale je tu jeden háček, tyto mřížky se spojí nejsou rekurzivní. Co to znamená toto: řekněme, že chcete mít jiné jméno odesílatele pro poštu ve dvou prostředích, můžete být v pokušení udělat následující:
výchozí: výchozí nastavení a input_location: common_input output_location: dev_location mail: SENDER_NAME: odesílatel smtp_server: větev Váš_server Login: your_login heslo: top_secret vývoj: << * Výchozí mail: SENDER_NAME: sender_dev produkce: << * Výchozí output_location: prod_location mail: SENDER_NAME: sender_prod
Umožňuje kontrolovat
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Jejda, něco se pokazilo, problém jak je uvedeno výše, je, že hash sloučení není rekurzivní a zatímco slučování nahradil mailu selhání poštou produkce, které má jen jeden klíč. Řešení / práce kolem je rozvinout ještě jednu úroveň:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: odesílatel smtp_server: větev Váš_server Login: your_login heslo: top_secret výchozí: výchozí nastavení a << * Common_settings mail: << * Mail_defaults vývoj: << * Výchozí produkce: << * Výchozí mail: << * Mail_defaults SENDER_NAME: sender_prod
Umožňuje kontrolovat znovu
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Věděli jste, že máte ještě jednu úroveň vnoření, tak můžete určitě rozbalí jeden stupeň, ale pak se to stane nepořádek. Takže, pokud nejste se snaží psát řešení věže v Hanoji v conf souboru, je lepší restucture conf souboru, než kopat do YAML nebo něco jiného. Ale to je na vás tak jako tak.
Velké programátoři najít jednoduchá řešení složitých problémů
Po dlouhé době se mi podařilo najít zdroj pro následující citát-
Junior programátoři vytvářet jednoduché řešení jednoduchých problémů. Senior programátor vytvořit komplexní řešení složitých problémů. Velké programátoři najít jednoduchá řešení na složité problémy.
To je od esej s názvem Beautiful Software Charles Connell.
Dalším oblíbeným jeden z dolu je Zen Python -
Krásná je lepší než ošklivý.
Explicitní je lepší než implicitní.
Jednoduchý je lepší než komplexu.
Komplex je lepší než složité.
Byt je lepší než vnořené.
Řídké je lepší než hustý.
Čitelnost počítá.
Zvláštní případy nejsou dost speciální porušit pravidla.
Ačkoliv praktičnost bije čistotu.
Chyby by se nikdy projít tiše.
Není-li výslovně umlčel.
Tváří v tvář jednoznačně odmítnout pokušení odhadovat.
Mělo by být jedno-a pokud možno jen jeden zřejmý způsob, jak to udělat.
I když to tak nemusí být zřejmé na první pohled, pokud si nejste holandský.
Nyní je lepší než nikdy.
Ačkoliv nikdy je často lepší než * právo * teď.
Pokud implementace je těžké vysvětlit, že je to špatný nápad.
Pokud implementace je snadné vysvětlit, může to být dobrý nápad.
Jmenné prostory jsou jednou troubit skvělý nápad - pojďme udělat víc těch!
-------------------------
a pak je tu klasický Tao programování
-
úvěry jsou na odkazované stránce,
Přeložil Geoffrey James
Přepsaný Duke Hillard
Přenášeny Anupam Trivedi a Sajitha Tampi a Meghshyam Jagannath
Re-html-ized a editoval Kragen Sittler
-
Kniha 1 - Silent Void
Tak pravil hlavní programátor:
"Když jste se naučili ukrást kód chyby z pasti rámem,
bude na čase, abyste odešel. "1.1
Něco tajemného je tvořen, se narodil v tiché prázdnotě. Čekání sám a
bez hnutí, to je najednou, a přesto stále v neustálém pohybu. To je zdroj
všech programů. Já nevím jeho jméno, tak budu říkat, že Tao
Programování.Pokud Tao je skvělé, pak operační systém je skvělý. Pokud provozní
Systém je skvělý, pak kompilátor je skvělá. Pokud překladač je skvělé,
pak aplikace je skvělý. Uživatel je rád, a existuje
harmonie ve světě.Tao programování proudí daleko a vrátí se na větru ráno.
1.2
Tao porodila jazyk. Stroj jazyk porodila
assembler.Assembler porodila kompilátor. Nyní je 10000
jazyky.Každý jazyk má svůj smysl, ale pokorný. Každý jazyk vyjadřuje
Yin a Yang softwaru. Každý jazyk má své místo v rámci Tao.Ale ne programovat v COBOL, pokud můžete vyhnout.
1.3
Na počátku bylo Tao. Tao porodila na prostor a čas.
Proto se prostor a čas jsou Yin a Yang programování.Programátoři, že nechápou Tao vždy málo času
a prostor pro své programy. Programátoři, že pochopit Tao vždy
mít dostatek času a prostoru k dosažení svých cílů.Jak by to mohlo být jinak?
1.4
Programátor je moudrý řekl o Tao a sleduje ji. Průměrná
Programátor je řečeno o Tao a hledá pro něj. Pošetilé programátor
je řečeno o Tao a směje se na něj.Pokud to nebylo pro smích, tam by byla žádná Tao.
Nejvyšší zvuky jsou nejvíce slyšet.
Do budoucna je cesta k ústupu.
Velký talent se projevuje pozdě v životě.
I perfektní program má ještě chyby.-------------------------
Kniha 2 - starých mistrů
Tak pravil hlavní programátor:
"Po třech dnech bez programování, život ztrácí smysl."
2.1
Programátoři bylo let, tajemná a hluboká. Nemůžeme pochopit
jejich myšlenky, takže vše, co děláme, je popsat jejich vzhled.Vědom si, jako liška přechodu vody. Pozorní, jako generál na
bojiště. Druh, jako hosteska Pozdravení své hosty. Jednoduché, jako
uncarved bloky ze dřeva Neprůhledné, jako černé bazénů v temných jeskyních.Kdo může říct tajemství svých srdcích a myslích?
Odpověď existuje pouze v Tao.
2.2
Velmistr Turing jednou zdálo, že byl stroj. Když se probudil,
zvolal:"Nevím, zda jsem Turing sním, že jsem stroj, nebo
stroj snění, že jsem Turing! "2.3
Programátor z velmi velké počítačové firmy šel do softwaru
Konference a pak se vrátil ke zprávě k jeho manažer a řekl: "Jaké
programátorů pracují pro jiné firmy? Oni se chovali špatně a byli
nezabývá vystoupení. Jejich srst byla dlouhá a zanedbaný a jejich
oděvy byly pomačkané a starý. Oni havaroval naše pohostinství sadu a
z hrubé zvuky při své prezentaci. "Manažer řekl: "Měl jsem nikdy tě poslal do konference. Ti, kteří
programátoři žijí mimo fyzický svět. Domnívají se, život absurdní,
náhodná shoda okolností. Přicházejí a odcházejí, aniž by věděl omezení.
Bez péče, žijí jen pro své programy. Proč by měli obtěžovat
se společenským konvencím?"Jsou naživu v Tao."
2.4
Nováček zeptal Mistra: "Tady je programátor, který nikdy navrhuje,
dokumenty nebo testy své programy. Přesto všichni, kteří ho znají považují jej za jeden z
nejlepší programátoři na světě Proč je tohle? "Mistr odpovídá: "To programátor zvládl Tao. Odešel
Kromě potřeby design, nemá se zlobit, když systém
havaruje, ale přijímá vesmír bez obav. Odešel za
potřebujete pro dokumentaci, on už zajímá, jestli někdo vidí, že jeho kód.
Odešel za zkoušení, každý z jeho programů jsou perfektní
v sobě, klidný a elegantní, jejich účel evidentní. Skutečně,
on vstoupil do tajemství Tao. "-------------------------
Kniha 3 - Design
Tak pravil hlavní programátor:
"Když je program testován, je příliš pozdě na to, aby návrh
změny. "3.1
Byl jednou jeden muž, který šel na výstavě počítačové obchodu. Každý den jako on
vstoupil muž řekl stráž u dveří:"Jsem velký zloděj, známý pro své činy krádeže v obchodech. Být
varován, se k tomuto veletrhu neunikne unplundered. "Tato řeč narušen stráž výrazně, protože tam byly miliony
dolarů uvnitř výpočetní techniky, a tak sledoval muže opatrně. Ale
Muž putoval pouze z budky na stánku, hučení tiše.Když muž odešel, stráž ho stranou a hledal své oblečení, ale
nic nebylo k nalezení.Na další den veletrhu, muž vrátil a peskoval stráž
říká: "Utekla jsem s obrovskou kořistí včera, ale dnes bude ještě
lepší. "Takže stráž ho pozoroval stále blízko, ale marně.Na poslední den veletrhu, by mohla omezit jeho stráž zvědavost
už ne. "Pane zloděj," řekl, "já jsem tak zmatená, nemohu žít
mír. Pouč mě, prosím. Co je to, že jste ukradl? "Muž se usmál. "Jsem vykrádá nápady," řekl.
3.2
Byl jednou jeden pán, který napsal programátor nestrukturovaných programů.
nováček programátor, který se snaží napodobit ho, také začal psát
nestrukturované programy. Když nováček požádala pána hodnotit jeho
pokrok, mistr kritizoval jej pro psaní nestrukturovaných programů,
říká: "Co je vhodné pro pána není vhodné pro
nováček. Musíte pochopit, Tao, než překonání strukturu. "3.3
Byl jednou jeden programátor, který byl připojen k soudu válečníka
Wu. Válečník požádal programátor: "Což je jednodušší design: o
Účetní balení nebo operační systém? ""Operační systém," řekl programátor.
Válečník pronesl jako výkřik nevěřícně. "Určitě účetnictví
Balíček je triviální vedle složitosti operačního systému, "řekl
řekl."Není to tak," řekl programátor, "při navrhování účetní balík,
programátor funguje jako prostředník mezi lidmi má různé
nápady: jak musí pracovat, jak se jeho zprávy musí být, a jak to musí být
v souladu s daňovými zákony. Naproti tomu je operační systém není omezen
vnějšími vystoupení. Při návrhu operačního systému, programátor
hledá nejjednodušší harmonii mezi strojem a nápady. To je důvod, proč
Operační systém je jednodušší navrhnout. "Válečník Wu přikývl a usmál se. "To je všechno dobré a také, ale
který je snadnější ladění? "Programátor neodpověděl.
3.4
Manažer šel do hlavní programátor a ukázal mu požadavky
dokument pro nové aplikace. Správce požádal pána: "Jak dlouho
bude trvat, než navrhnout tento systém, když přiřadíte pět programátorů na to? ""Bude to trvat jeden rok," řekl velitel okamžitě.
"Ale musíme tento systém okamžitě, nebo i dříve! Jak dlouho to bude
já kdybych přiřadit deset programátorů na to? "Programátor mistr se zamračil. "V tom případě bude trvat dva roky."
"A co kdybych přiřadit sto programátory na to?"
Programátor mistr pokrčil rameny. "Pak design nikdy
dokončena, "řekl.-------------------------
Kniha 4 - kódování
Tak pravil hlavní programátor:
"Dobře napsaný program, je jeho vlastní nebe, špatně napsaný program
vlastní peklo. "4.1
Program by měl být lehký a hbitý, jeho podprogramy připojen jako
perlový náhrdelník. Duchem a záměrem programu by měl být zachován
v celém textu. Měl by být ani příliš málo nebo příliš mnoho, ani
zbytečným smyčky ani zbytečné proměnné, ani nedostatek, ani struktury
Drtivá tuhost.Program by se měl řídit program `zákon nejmenšího překvapení '. Co je to právo?
Je to prostě, že program by měl vždy odpovídat na uživatele v cestě
udivuje, že ho minimálně.Program, bez ohledu na to, jak složité by měl působit jako jeden celek. Program
by měly být zaměřeny logikou v rámci spíše než vnější vzhled.Pokud program selže v těchto požadavků bude ve stavu
nepořádek a zmatek. Jediný způsob, jak tento problém odstranit, je přepsat
program.4.2
Nováček zeptal mistra: "Mám program, který běží a někdy
někdy přeruší. Postupoval jsem přesně podle pravidel programování, ale já jsem
naprosto bezradný. Jaký je důvod? "Mistr odpověděl: "Ty jsou zmateni, protože nerozumíte Tao.
Jen blázen očekává, že racionální chování od svých bližních. Proč jste
očekávat, že ji ze stroje, který lidé mají postavené? Počítače simulovat
determinismus, jen Tao je perfektní."Pravidla programování je přechodná, jen Tao je věčné. Proto
je nutné uvažovat o Tao, než se zobrazí osvícení. ""Ale jak se dozvím, že jsem dostal osvícení?" Zeptal se
nováček."Váš program pak bude fungovat správně," odpověděl mistr.
4.3
Mistr vysvětloval podstatu Tao jednomu ze svých nováčků. "
Tao je zakotven ve všech softwaru - bez ohledu na to, jak bezvýznamné, "řekl
pán."Je Tao v ruční kalkulačky?" Zeptal se nováček.
"Je," zněla odpověď.
"Je Tao ve videohře?" Pokračoval nováčka.
"Je to i ve videohře," řekl pán.
"A je Tao v DOS na osobní počítač?"
Velitel se rozkašlal a obrátil svou pozici mírně. "Poučení je u konce
pro dnešek, "řekl.4.4
Prince Wanga programátor byl kódování softwaru. Jeho prsty tančily po
klávesnice. Program zkompilovaný bez chybového hlášení, a program
běžel jako jemný vítr."Výborně!" Princ zvolal: "Váš postup je bezchybný!"
"Technika" řekl programátor obrátil ze svého terminálu, "Co jsem
sledovat je Tao - nad rámec všech technik! Když jsem poprvé začal program, který jsem
uvidí před sebou celý problém v jedné hmoty. Po třech letech jsem se žádných
už viděl tuto hmotu. Místo toho jsem podprogramy. Ale teď vidím, nic.
Moje celá bytost existuje v beztvaré prázdnoty. Mé smysly jsou nečinné. Můj duch,
možnost pracovat bez plánu, následuje vlastní instinkt. Stručně řečeno, můj program
píše sám. Pravda, někdy je obtížné problémy. Vidím je
přijde, jsem zpomalit, dívám se tiše. Pak jsem změnit jediný řádek kódu
a obtíže zmizí jako obláčky kouře nečinnosti. Pak jsem se sestavit
program. Jsem sedět a nechat radost z práce vyplnit svou bytost. Zavřu
na chvíli oči a pak odhlásit. "Princ Wang řekl: "Bylo by to všechny mé programátorů byly moudrý!"
-------------------------
Kniha 5 - Údržba
Tak pravil hlavní programátor:
"I když program měl být, ale tři řádky dlouho, jednoho dne bude muset být
zachován. "5.1
Dobře použitá dveří není třeba olej na pantů.
Rychle tekoucí proud neroste stagnuje.
Ani zvuk, ani myšlenky mohou cestovat přes vakuum.
Software hnije, pokud není použit.Jedná se o velké tajemství.
5.2
Správce požádal programátora, jak dlouho mu bude trvat až do konce
Program, na kterém pracoval. "To bude dokončena zítra,"
Programátor ihned odpověděl."Myslím si, že jsou nereálné," řekl manažer "Po pravdě řečeno, jak
dlouho to bude trvat? "Programátor se na chvíli zamyslela. "Mám nějaké funkce, které si přejí
přidat. To bude trvat nejméně dva týdny, "řekl nakonec."I to je příliš očekávat," trval na tom, manažer: "Budu
splněna, pokud si prostě řekni mi, když program je kompletní. "Programátor s tím souhlasil.
O několik let později, manažer odešel. Na cestě do svého odchodu do důchodu
oběd, on objevil programátor spící u jeho terminálu. On byl
programování celou noc.5.3
Programátor nováček byl jednou přidělen kód jednoduchý finanční balíček.
Novic pracoval zuřivě po mnoho dní, ale když se jeho pán přezkoumána
jeho program, zjistil, že to obsahovalo obrazovky editoru, soubor
celková grafika rutiny, umělá inteligence rozhraní, ale
není sebemenší zmínka o něco finanční.Když pán požádal o tom, nováček se stal rozhořčený. "Nebuď
tak netrpělivý, "řekl," Dám ve finančním věci nakonec. "5.4
Má dobré zanedbávat zemědělec plodiny on zasadil?
Má dobrý učitel přehlédnout i ty pokorné studenta?
Má dobrý otec dovolit jedno dítě hlady?
Má dobrý programátor odmítnout udržovat jeho kód?-------------------------
Kniha 6 - Řízení
Tak pravil hlavní programátor:
"Ať se programátoři být mnoho a manažeři málo - pak všechno bude
produktivní. "6.1
Když manažeři mají nekonečné schůze, programátoři psát hry. Kdy
účetní mluvit o čtvrtletních zisků, vývoj rozpočtu se chystá
řezat. Když vědci mluví vysocí modrou oblohu, mraky se chystají vrátit
palcůOpravdu, není to Tao programování.
Když manažeři přijmout závazky, jsou ignorovány herní programy. Kdy
účetní, aby dlouhého doletu plány, harmonie a aby se chystáte být
obnovena. 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. To
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
ne. 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. Ne
change in management can harm him. He will not be fired, even if the
project is cancelled. Proč je to? 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. "Já
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
$./test.sh will redirect hi as well as hii to out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
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
Since I am not a VAIO marketing guy, I'll start other way round -
Why you may not like to buy this laptop :
- No bluetooth : believe me, in 2009 sony sells laptop without bluetooth. Sure you can use usb stuff but …
- 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.
- No HDMI output.
- No separate graphics card and the likes.(and no dedicated video memory
Now , why you may like to buy it :
- 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.
- 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.
- From my usage, I see processor mostly clocks at 1.2GHz, and memory usage ~500MB. That just reinforces previous point.
- 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:
- 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.
- 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) - Video cam – just works
- Hibernate to disk and back – no problem
- 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 -
- 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"



































