poll, ping, pubsub, pubsubhub, pubsubhubbub
Sa kaso ikaw ay may pag-aalinlangan, may ay isang paraan sa kabaliwan sa itaas, sa pamagat ng post. Ang Sa tech bilog, ito ay malamang na hindi mo pa narinig ng pubsubhubbub. Sa mabilis na ilang mga buwan, ito ay naging isa ng ang tatlong nangungunang talked tungkol sa mga bagay-bagay. Iba pang dalawang pagiging homomorphic encryption at Google alon [ 1 ]. Babalik sa kasalukuyang post - mga tuntunin sa pamagat ay nagpapahiwatig kung paano mo makuha ang mga nilalaman mula sa iba pang mga tao. Pagsunod sa mga detalye maging mas malinaw, kung isipin mo ang mga bagay na nangyayari na may paggalang sa blog, kahit na sila ay conceptually hindi limitado sa mga blog.
Botohan ay tumutukoy sa sitwasyon na kung saan ang mga kliyente ay panatilihing humihingi ng server kung may bagong ay dumating up. Gaano kadalas na magtanong para sa mga update ay palaging isang problema sa botohan masyadong madalas o masyadong madalang, ngunit bilang isang reader itinuturo dito na ang isang mahusay na, bagay sa botohan na server ay hindi upang mapanatili ang estado.
Ping ay tumutukoy sa mga kaso na kung saan kapag mag-post ng isang artikulo, ikaw (o ang iyong software) update din ng ilang mga tanyag na (gitnang) na mga serbisyo ng update. Ilang background dito .
Susunod ay pubsub na ang ibig sabihin para i-publish / mag-subscribe, isa ng pinakamaagang sukdulang para sa ito ginawa dito sa pamamagitan ng Evan Henshaw-Plath at Kellan Elliott-McCrea (72 slide ngunit nagkakahalaga ng pagpunta sa pamamagitan ng). Nakahihimok halimbawa na sila nagbigay laban ay ito - sa isang partikular na petsa, Friendfeed crawl Flickr 2,9 milyong beses upang makuha ang pinakabagong mga larawan ng 45,754 mga gumagamit, kung saan 6721 ay binisita Flickr sa mga 24 oras at sana 'potensyal na' upload photo. Tandaan na kung ano ang kanilang iminungkahi ay hindi isang bagong teknolohiya, bilang ituro nila 'rebolusyonaryo bagong 20 taong gulang na teknolohiya. Kung gagawin mo ito para sa mga blog at pagkatapos ay ang isa sa mga pangunahing problema sa xmpp - presence mga overhead data, na maaaring bilang mataas na bilang 60-70% ay maaaring mabawasan ng maraming.
ibig sabihin ng pubsubhub para i-publish ang subscribe hub at pubsubhubbub ay isang protocol, ang core ng kung saan ay ideya ng pubsubhub. Kung saan publisher (sabihin blogger) na i-update ang hub kung saan (maaaring higit pa sa isang hubs, na makipag-usap sa bawat isa) namamalagi 'saanman sa ulap', tulad ng bawat protocol na ito ay maaaring itulak o hilahin ang bilang sa bawat ang protocol ngunit ang susunod na link sa kadena, hub sa client (sabihin ang mga mambabasa) ay palaging na ito ay itulak modelo. ang pahinang ito ay mahusay na panimulang punto para sa pubsubhubbub, pangkalahatang-ideya ng mga slide ay mahusay. Ang kailanman malinaw Anil Dash naglalarawan dito bilang pindutan web.
Dalawang iba pang kaugnay na bumabasa ng webhooks na talaga http callbacks. Github gumagamit ng ito, kaya ang PayPal para sa mga mga asynchronous abiso ng pagbabayad sa ipn . Kaya marami pang iba. Mga kaugnay na konsepto ay rsscloud na muli pubsub hub. Sundin ang link na ito para sa mga detalye.
Maaari mong wondering kung ano ang punto ng pagsulat sa lahat ng mga dito, may dalawang 1. Mga bagay na ito ay nagkakahalaga ng alam, minimally sa hindi bababa sa at 2. Ang blog na ito ay pubsubhubbub pinagana ngayon sa pamamagitan ng appspot hub gamit ang WordPress plugin na ito at feed masyadong pubsubhubbub na pinagana sa pamamagitan ng FeedBurner, link dito
-
[ 1 ]. - Magandang pambungad na basahin para sa ganap na homomorphic encryption ay ang artikulong ito sa pamamagitan ng Bruce Schneier at talk na ito ay higit pa o mas mababa lamang ang pinagmulan para sa Google alon.
-Update - ito post na nagpapaliwanag kung paano ang mga kinakailangan ng pampublikong server para sa callback ay maaaring nagtrabaho sa paligid para sa mga desktop kliyente sa pamamagitan ng paggamit ng xmpp gateway (para pubsubhubbub).
A bit ng pagpupulong
Pagkatapos ng pagbabasa ng artikulong ito tungkol sa lock libreng buffers at makita ang paggamit ng Cas (ihambing at magpalitan), ako nadama tulad ng pag-post ng pagpupulong code upang gawin ang parehong. Gamitin ang kaso sa nagkaroon na magsulat ng isang katutubong paraan at tawagan ang mga ito mula sa Java (pabalik sa 1.5, kapag kasabay data na istraktura sa Java ay higit pa o mas mababa hindi umiiral). Nang walang karagdagang linggal, kukunin ko na mapalabas ang code papunta sa iyo
. Ang una ay para sa Cas at pangalawa ay para sa computing GCD gamit Euclid ng algorithm (isa na ito ay matatagpuan sa maraming lugar at mga tutorial pati na rin).
Itala at patakbuhin ang tagubilin gcc file_name.c ; ./a.out
Ihambing at magpalitan
# Include# Include / / Palitan - newvalue, comperand lumang / inaasahang halaga / * * Ang function na talaga ang mga sumusunod na bagay - kung ang halaga sa * Dest ay katumbas sa oldvalue ang pagkatapos ay palitan ito sa pamamagitan ng newvalue ibang iwanan ito hindi nagbabago: ang lahat ng mga atomically * * Mayroong dalawang mga pagpipilian para sa halaga ng pagbabalik * 1.is paunang halaga ng * Dest at iwanan ang pasanin ng pagtawag fxn upang ihambing ang mga ito sa oldval * 2. gawin ito sa dito at bumalik ng 0 o 1, ito ay dapat na maging mas episyente ** / / * Mamaya baguhin ang mga ito sa macro * / int Cas (int * Dest, ang int oldvalue, int newvalue) { printf ("(% d,% d,% d)", ang * Dest, oldvalue, newvalue); / * Int Cas (ang int Dest, int oldvalue, ang int newvalue) {* / / * Int Cas (ang int Dest, int newvalue, ang int oldvalue) {* / int resulta = 1 ;/ * 1 nagpapakita na ang Cas nagtagumpay at 0 mga palabas na ito nabigo * / / * Btw kailangan upang itakda ang cc para sa bandila clobbering! * / __asm__ na __ volatile__ ( Sa "movl% 2,%% eax \ n \ t" "Movl% 3,%% ebx \ n \ t" Sa "movl% 0,%% ecx \ n \ t" "Lock \ n \ t" "CMPXCHG%% ebx, (%% ecx) \ n \ t" / * ay dapat i-lock sa parehong linya * / "Jz DONE \ n \ t" "Movl $ 0,% 1 \ n \ t" "DONE: \ n \ t" : "= M" (Dest), "= g" (resulta) : "G" (oldvalue), "g" (newvalue), "m" (Dest) : "% Eax", "% ebx", "ecx", "cc" ); printf ("(% d,% d,% d)", ang * Dest, oldvalue, newvalue); bumalik resulta; } / * TODO * Magsulat ng isa pang asm fxn kung saan naglalagay sa itaas fxn sa isang habang loop at panatilihing sinusubukan maliban kung ito succeeds * / int pangunahing () { int a = 5, b = 6; int * c = (int *) malloc (sizeof ang (int)); * C = 6; / * Int c = 6; * / printf ("% d \ n", Cas (c, b, b)); printf ("% d \ n", Cas (c, b, a)); printf ("% d \ n", Cas (c,, a)); printf ("% d \ n", Cas (c, b, b)); * C = 6; / * C = 5; * / printf ("pagbabago ng halaga ng * c sa% d \ n", * c); printf ("% d \ n", Cas (c, b, b)); printf ("% d \ n", Cas (c, b, a)); printf ("% d \ n", Cas (c,, a)); printf ("% d \ n", Cas (c, a, b)); printf ("% d \ n", Cas (c, b, a)); bumalik 0; }
Tala ng format - tila wp syntax highlighter ay pagdaragdag sa katapusan, huwag pansinin na.
GCD
# Includesa int gcd (int a, int b) { int resulta; / * Compute pinakamalaking Karaniwang na panghati gamit Euclid ng algorithm * / __asm__ __ volatile__ (sa "movl% 1,%% eax;" Sa "movl% 2,%% ebx;" "CONTD: cmpl $ 0,%% ebx;" "Je DONE;" Ang "xorl%% edx,%% edx;" Sa "idivl%% ebx;" Ang "movl%% ebx,%% eax;" Ang "movl%% edx, ebx ng%%;" "Jmp CONTD;" "DONE: movl%% eax,% 0;": "= g" (resulta): "g" (a), "g" (b) ); bumalik resulta; } int pangunahing () { int una, pangalawa; printf ("Ipasok ang dalawang integers:"); scanf ("% d% d", & unang, at segundo); printf ("GCD ng% d at% d ay% d \ n", una, pangalawa, gcd (una, ikalawa)); bumalik 0; }
Cricketing World Awaits isang Bagong World Order
Matapos ang isang serye spanning limang pagsusulit at humigit-kumulang dalawang buwan, England reclaimed ashes.
Hayaan ang makipag-usap tungkol sa mga nanalong koponan unang-kanilang gitna order ay 'average' kung hindi mo nais na kritikal. Greame Swann ng kontribusyon sa bat bibilangin hindi mas mababa kaysa sa kontribusyon sa bola. Stuart Malawakang - pinakamahusay na ang lahat ng rounder ay hindi na starter para sa ika-5 na pagsubok. Andrew Strauss ay ang tanging pare-pareho na batsman at Jimmy Anderson ay ang lamang na pare-pareho ang nagboboling.
Ang punto dito ay hindi kagalitan ang mga tagumpay ng nanalong koponan ngunit upang ilagay sa pananaw ang katotohanan na sa kabila ng lahat ng mga ito, ang Australya ay nawala. magkakaroon ka ng mag-isip para sa ilang segundo, kung nagtanong ng pangalan ng kanilang mga pinakamahusay na ang nagboboling. Karapatan, ito ay ang BW Hilfenhaus. Hauritz outperformed everbody ay inaasahan ngunit hindi pa rin sapat na mahusay na pinili para sa dalawang ng limang pagsusulit. South Africa ay hindi kailanman naging isang mundo pamalo walang manunulid mundo klase, Australia ay hindi maaaring inaasahan upang manatiling isa na walang isang magandang sapat na hindi bababa sa. Mago umalis sa stage at ito ay hindi tulad ng sining ngayon, kalimutan ang magic. Ponting ibig sabihin matangkad sa mga mas mababang mortals at Michael Clarke ibig sabihin up masyadong madalas, ngunit na gumagawa sa kanila ng isang team na may ilang mga napakahusay na mga manlalaro at hindi isang mahusay na koponan.
Ashes 2009 ay ay remembered para sa Andrew Flintoff ng huling Ashes, Stuart Malawakang ay pagdating bilang isang lahat rounder (kung siya nagdadagdag ng ilang higit pa Ashes alamat sa kanyang maaasahan simula), at isa sa pinaka nagsasabi siglo pasinaya ng lahat ng oras sa pamamagitan ng Trott ngunit ay ito rin ay remembered bilang punto kung saan ifs at buts tungkol sa Australya ng kataas-taasang kapangyarihan ay sa wakas ilagay sa pamamahinga, ito ay higit. Huwag makakuha ako mali nila pa rin hukayin ng Mike Hussey o Stuart Clark ngunit pakiramdam ang kontribusyon ng lahat ng mga greats oras kapag sila ay pumunta nawawala. Minsan dumating sila upang ipaalala sa iyo sa kanilang sarili sa IPL ngunit hindi pa rin nila maaaring papalitan. Sabihin pakiramdam mapalad na nakita ng Warne, McGrath at Gilchrist naglalaro ng sama-sama at na suportado pamamagitan ng Waughs, Ponting, Hyden, Martin at Langer.
Pasulong, South Africa ay palaging mananatiling isang mabuting koponan ngunit kailangan nila upang manalo ng mga semifinals at maging mas pare-pareho sa buong mundo, Pakistan ay mananatiling enigmatically makinang, Indian kabataan baril ay maaaring mahanap ito matigas upang punan ang mga sapatos ng mga pambihirang predecessors. Sri Lanka ay dapat magpatuloy upang ipakita ang mga glimpses ng sining sa bapor. Subalit, maaari naming maghintay para sa ibang panahon bago ang pagkakaroon ng lahat ang nangingibabaw koponan o bago ang kapitan ng complains ng kakulangan ng kumpetisyon, bilang Steve Waugh ay sabay.
Sa isang kaugnay na tandaan - sabihin malugod ang darating likod ng Asif, siya ay may isang impyerno pulutong ng mga potensyal na, ipaalam sa Inaasahan upang makita ang ilan sa mga na at din malugod Andy Flower sa ang bagong awatar, kanan hindi mo panatilihin ang magandang lalaki down na para sa mahaba.
mapula isa liners upang lumikha ng hash
Kahapon habang pagpunta sa pamamagitan ng isa sa aking mga lumang programa, natagpuan ko ang isinulat ko minsan likod:
#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
Upang patayin ang ilang ng pananabik hayaan mo akong ibunyag na raw_text Mukhang
, Karapatan ito ay kunin mula sa PayPal pagbabayad pagkilala.
Itaas linya kung nasira sa bahagi bumabasa ng mas mahusay na:
unescaped_array = CGI.unescape (raw_text). split ('&') unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (kawalan) kung sa b.size == 1; b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array ang]
Hayaan ng mga indibidwal na mga hakbang sa irb:
irb (main): 009:0> unescaped_array = CGI.unescape (raw_text) split ('&') => ["Tagumpay", "mc_gross = 10.00", "protection_eligibility = hindi karapat-dapat", "payer_id = U7PPJJ4TSJ47E", "buwis = 0.00", "payment_date = 09:45:30 Jul 10, 2009 PDT", "payment_status = Nakabinbin "] irb (main): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (kawalan) kung sa b.size == 1; b} => [["Tagumpay", wala], [sa "mc_gross", "10.00"], ["protection_eligibility", "hindi karapat-dapat"], ["payer_id", "U7PPJJ4TSJ47E"], ["buwis", "0.00"] , ["payment_date ang", "09:45:30 Jul 10, 2009 PDT"], [ang "payment_status", "Pending"]] irb (main): 014:0> flattened_array = unescaped_array.flatten => ["Tagumpay", wala, "mc_gross", "10.00", "protection_eligibility", "hindi karapat-dapat", "payer_id", "U7PPJJ4TSJ47E", "buwis", "0.00", "payment_date", "09:45: 30 Jul 10, 2009 PDT ", ang" payment_status "," Pending "] irb (main): 015:0> hash = Hash [* flattened_array ang] => {"Buwis" => "0.00", "payment_status" => "Pending", "payer_id" => "U7PPJJ4TSJ47E", sa "mc_gross" => "10.00", "Tagumpay" => wala, "payment_date" = > "09:45:30 Jul 10, 2009 PDT", "protection_eligibility" => "hindi karapat-dapat"}
BTW, * ay tinatawag na splat operator sa rubi
Ang isa pang paraan upang lumikha ng hash mula sa 'array ng pares' ay upang gamitin magpaturok:
hash = [[1,2], [3,4]]-paturukan ({}). {| resulta, elemento | resulta [element.first] = resulta [element.last]; resulta} May isa pang paraan
Magsulat ng isang loop, na kukunin ko na umalis bilang isang ehersisyo sa mga mambabasa!!
Narito ang isang bit hindi kaugnay na kaso ng paggamit ng paglikha ng hash mula sa arrays:
irb (main): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Mas mababang :: mas} => {: Mas mababang => [1, 2, 3, 4],: mas => [7, 9]}
Maaari mong gawin ang higit pang mga bagay, talaga ang resulta ng ang block ay ginagamit bilang ang key para sa na sangkap sa mga nagresultang hash.
gmail, ulol at msmtp na pag-aayos
Kung gumagamit ka ng ulol at ang SMTP upang ma-access ang gmail. Narito ang isang (masamang) balita. Cool guys sa Google muli nagbago sertipiko. Oh, ay mong tanungin kung paano ko ito malalaman ang mga ito? Simple ulol na nagsimula nagrereklamo tungkol sa masamang sertipiko kapag sinusubukang gamitin ang msmpt, nakahihiya 'msmtp: TLS sertipiko Nabigo ang pagpapatunay: ang sertipiko ay hindi nakuha ng isang kilalang issuer' greeted ako sa screen.
Upang tumawid kumpirmahin -
Lamang patakbuhin ang mga sumusunod na
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
Sa lugar ng lumang Thwate Server ngayon ka sumusunod sa issuer segment
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Kabutihang palad pag-aayos ay simple, dito ay kung ano ang kailangan mong gawin sa Debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Matapos ito lamang baguhin ang sumusunod na linya sa ~~~V mo /. 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
sa
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Sa Git at Galing Survey
Narito ang dalawang mga link para sa survey sa pamamagitan ng git (bersyon control system) at kasindak-sindak (manager ng window) komunidad. Kung gumamit ka ng alinman sa mga ito, mangyaring kumuha ng ilang oras upang punan ang palatanungan. Isipin ng mga ito bilang ang pinakasimpleng paraan upang mag-ambag pabalik sa ang software na gamitin mo.
Narito ang mga link:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Galing - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Tandaan - (Tulad ng matatagpuan sa mga pahina na iyon ngunit sa ibaba
) -
"Kung ikaw ay may pinaganang cookies, maaari mong laging isumite ang bahagyang napuno ng survey, at bumalik sa iyong mga sagot sa ibang pagkakataon, kinukumpleto ito mamaya."
Pinagsasama hashes sa yaml file Conf
YAML ay lubos na madaling gamitin para sa pagsulat ng mga file ng configuration. Ang pangunahing bentahe ay na, ito bumabasa tulad ng text file. Talaga ito gumagana rin kung ang iyong config file ay flat (walang hierarchy) at may walang repetitions.
Kung ang iyong configuration file ay mga repetitions pagkatapos ito ang akma upang paghiwalayin ang mga elemento at muling gamitin ang mga ito. Ano ang ibig sabihin ko ay ito - sabihin natin mo ang iyong config file ay ganito ang hitsura:
pag-unlad: input_location: common_input output_location: dev_location mail: smtp_server: your_server login: your_login password: top_secret produksyon: input_location: common_input output_location: dev_location mail: smtp_server: your_server login: your_login password: top_secret
Ipagpalagay itaas code sa / tmp / test.yml na dito ay kung paano maaari mong basahin sa python at mapula
$cat readyml.py
#! / Usr / bin / env sawa mula sa ng pprint import pprint ng pp # Sa Debian kailangan i-install ang python-yaml Sa mula yaml import ng pagkarga, dump load_all, hash = load (bukas ('/ tmp / test.yml na')) pp (hash ['pagbuo'])
$ cat readyml.rb
#! / Usr / bin / env rubi nangangailangan ng 'pp' hash = YAML :: load (File.open ('/ tmp / test.yml na'). basahin) pp hash ['pagbuo']
dito ay isang madaling isa liner para sa rubi bersyon
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' o maaari mong subukan ang parehong sa irb o python console.
Tandaan na sa itaas na snippet ng code, ang lahat ay iba na output lokasyon ay parehong sa bahagi ng pag-unlad at produksyon. Ito ay kung saan yml node identifier pagdating sa iligtas. Ang ideya ay simpleng magkaroon ng isang hanay ng mga halaga ng default at sapawan ang mga ito sa ibang lugar.
Maaari mong hilahin hatiin ito bilang mga sumusunod:
default: & default input_location: common_input output_location: dev_location mail: SENDER_NAME: nagpadala smtp_server: your_server login: your_login password: top_secret pag-unlad: <<: * Default produksyon: <<: * Default output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Mahusay, ito gumagana (tm)!.
Arguably namin traded ilang kalinawan para sa isang bit ng magic. Narito ang isang maliit na paliwanag: &, * at <<: & na ang tag ng anchor ay maaaring maunawaan bilang node identifier, * ay node reference at <<: ibig sabihin para sa hash sumanib.
Para sa karagdagang detalye makita alinman yaml na panoorin o Wikipedia
Sa ngayon kaya magandang ngunit may catch dito, ang mga hash mga merges ay hindi recursive. Ano ang ibig sabihin nito ay ito: sabihin natin na nais mong magkaroon ng iba't ibang pangalan ng nagpadala para sa mail sa dalawang kapaligiran, maaaring tempted upang gawin ang mga sumusunod:
default: & default input_location: common_input output_location: dev_location mail: SENDER_NAME: nagpadala smtp_server: your_server login: your_login password: top_secret pag-unlad: <<: * Default mail: SENDER_NAME: sender_dev produksyon: <<: * Default output_location: prod_location mail: SENDER_NAME: sender_prod
Hinahayaan suriin
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Oops, isang bagay nagpunta mali, ang problema gaya ng nabanggit sa itaas ay na ang hash sumanib ay hindi recursive at habang pinagsasama ang pinalitan ito ang mail ng default sa pamamagitan ng koreo ng produksyon na kung saan ay may isa sa key lamang. Solusyon / trabaho sa paligid ay sa magkadkad isa pang antas:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: nagpadala smtp_server: your_server login: your_login password: top_secret default: & default <<: * Common_settings mail: <<: * Mail_defaults pag-unlad: <<: * Default produksyon: <<: * Default mail: <<: * Mail_defaults SENDER_NAME: sender_prod
Hinahayaan muling suriin
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Ang sinabi mo mayroon kang isa pang antas ng nesting, well maaari mong tiyak magkadkad isa pang antas, ngunit pagkatapos ay ito ay nagiging isang gulo. Kaya, kung hindi sinusubukan mong isulat ang solusyon sa tower ng Hanoi sa isang Conf file, ito ay mas mahusay sa restucture Conf file sa paghuhukay sa yaml o iba pa. Ngunit na ay pa rin ang iyong tawag.
Mahusay mga programmer mahanap simpleng solusyon sa mga komplikadong mga problema
Pagkatapos ng isang mahabang oras ay maaaring ko mahahanap ang source para sa mga sumusunod na quote-
Junior programmer lumikha ng mga simpleng solusyon sa simpleng problema. Senior programmer lumikha ng komplikadong solusyon sa mga komplikadong problema. Dakilang programmer mahanap simpleng solusyon sa mga komplikadong problema.
Ito ay mula sa isang sanaysay na tinatawag na Maganda Software sa pamamagitan ng Charles Connell.
Isa pang paboritong ng minahan ay Ang Zen ng Python -
Maganda ay mas mahusay kaysa pangit.
Tahasang ay mas mahusay kaysa sa pahiwatig.
Simple ay mas mahusay kaysa sa mahirap unawain.
Ang Komplikadong ay mas mahusay kaysa sa kumplikado.
Flat ay mas mahusay kaysa sa nested.
Kalat-kalat ay mas mahusay kaysa sa siksik.
Mabasa bilang.
Espesyal na kaso ay hindi espesyal na sapat upang basagin ang mga alituntunin.
Kahit na ang pagiging praktiko beats kadalisayan.
Mga error ay hindi kailanman dapat pumasa tahimik.
Maliban malinaw na silenced.
Sa mukha ng kalabuan, tanggihan ang mga tukso sa hulaan.
Dapat maging isa at mas mabuti isa lamang-halata paraan upang gawin ito.
Kahit na ang paraan na ay hindi maaaring hindi halata sa unang maliban kung ikaw Olandes.
Ngayon ay mas mahusay kaysa kailanman.
Kahit na hindi kailanman ay madalas na mas mahusay kaysa sa * kanan * ngayon.
Kung ang pagpapatupad ay mahirap ipaliwanag, ito ay isang masamang ideya.
Kung ang pagpapatupad ay madaling ipaliwanag, ito ay maaaring maging isang magandang ideya.
Namespaces ay isa honking magandang ideya - ipaalam ay makagawa ng higit pa ng mga!
-------------------------
at pagkatapos ay may klasikong Tao ng programming
-
credits sa link site
Isinalin sa pamamagitan ng Geoffrey James
Transcribed sa pamamagitan ng Duke Hillard
Ipinadala sa pamamagitan ng Anupam Trivedi, Sajitha Tampi, at Meghshyam Jagannath
Re-html-ized at edit pamamagitan ng Kragen Sittler na
-
Book 1 - Ang tahimik walang bisa
Kaya spake ang master programmer:
"Kapag natutunan sa pagdaklot ang error code mula sa frame ng bitag,
ay oras para mong umalis. "1.1
Isang bagay na mahiwaga ay nabuo, ipinanganak sa ang tahimik na walang bisa. Naghihintay mag-isa at
unmoving, ito ay sabay-sabay pa rin at pa sa pare-pareho ang galaw. Ito ay ang source
ng lahat ng mga programa. Hindi ko alam ang pangalan nito, kaya ako ay tumawag ito sa Tao ng
Programming.Kung ang Tao ay mahusay na, pagkatapos ay ang operating system ay mahusay. Kung ang mga operating
Ang sistema ay mahusay na, pagkatapos ay ang tagatala ay mahusay. Kung tagatala ay mahusay,
pagkatapos ay ang application ay mahusay. Ang gumagamit ay nasisiyahang at may umiiral
pagkakatugma sa mundo.Ang Tao ng programming daloy malayo at babalik sa hangin ng umaga.
1.2
Ang Tao nagbigay kapanganakan sa wika ng makina. Machine wika nagbigay kapanganakan sa
assembler.Assembler ang nagbigay ng kapanganakan sa ang tagatala. Ngayon ay mayroong sampung libong
wika.Ang bawat wika ay ang layunin, gayunpaman mapagpakumbaba. Wika sa bawat nagpapahayag ng
Yin at Yang ng software. Ang bawat wika ay may kanyang lugar sa loob ng Tao.Ngunit huwag program sa COBOL kung maaari mong maiwasan ito.
1.3
Sa simula ay ang Tao. Ang Tao nagbigay kapanganakan sa Space at Time.
Samakatuwid Space at Time ay Yin at Yang ng programming.Programmer na hindi naiintindihan ang Tao ay palaging tumatakbo ng oras
at espasyo para sa kanilang mga programa. Programmer na maunawaan ang Tao palagi
may sapat na oras at espasyo upang tuparin ang kanilang mga layunin.Paano ito ay maaaring maging kung hindi man?
1.4
Ang matalino na programmer ay sinabi tungkol sa Tao at sumusunod ito. Ang average na
programmer ay sinabi tungkol sa Tao at sa paghahanap para dito. Ang hunghang programista ay
ay sinabi tungkol sa Tao at laughs sa ito.Kung ito ay hindi para sa pagtawa, ay hindi Tao.
Ang pinakamataas na tunog ay hardest na marinig.
Pasulong ay isang paraan upang urong.
Ang mahusay na talento nagpapakita sa mismo ng huli sa buhay.
Kahit na isang perpektong programa pa rin ay may mga bug.-------------------------
Book 2 - Ang Laong Masters
Kaya spake ang master programmer:
"Matapos ang tatlong araw na walang programming, buhay ay nagiging walang kabuluhan."
2.1
Ang mga programmer ng mga lumang ay mahiwaga at malalim. Hindi namin maaaring arukin ang lalim
kanilang mga saloobin, kaya lahat kami ay ilarawan ang kanilang mga hitsura.Kamalayan, tulad ng isang soro na tumatawid sa tubig. Alertuhin, tulad ng isang pangkalahatang sa
larangan ng digmaan. Uri, tulad ng isang hostes pagbati sa kanyang mga bisita. Simple, tulad ng
uncarved bloke ng kahoy. Malabo, tulad ng mga itim na pool sa darkened caves.Sino ang maaaring sabihin ang mga lihim ng kanilang puso at isipan?
Ang sagot ay umiiral lamang sa Tao.
2.2
Grand Master Turing sabay pinangarap na siya ay isang machine. Kapag siya ay siya awoke
exclaimed:"Hindi ko alam kung ako Turing pangangarap na ako ng makina, o isang
machine pangangarap na ako Turing! "2.3
Ang isang programmer mula sa isang napakalaking kumpanya ng computer na nagpunta sa isang software
conference at pagkatapos ay bumalik sa ulat sa kanyang manager, na nagsasabi: "Anong klase
ng ang mga programmer ay gumagana para sa iba pang mga kumpanya? Behaved sila masama at mga
walang pag-iintindi sa appearances. Ang kanilang buhok ay mahaba at gusgusin at ang kanilang mga
damit ay gusot at lumang. Nasira nila ang aming suite ng mabuting pakikitungo at sila
ginawa bastos noises sa panahon ng aking presentasyon. "Manager ang sinabi: "hindi ko dapat nagpadala ka sa conference. Iyon
mga programmer mabuhay sa kabila ng pisikal na mundo. Isaalang-alang nila ang buhay na walang katotohanan, isang
aksidenteng pagkakataon. Sila ay darating at pumunta walang alam limitasyon.
Nang walang pag-aalaga, sila nakatira lamang para sa kanilang mga programa. Bakit dapat sila abala
sa panlipunan balarila?"Sila ay buhay sa loob ng Tao."
2.4
Baguhan Ang nagtanong ang Master: "Ito ay isang programmer na hindi kailanman disenyo,
dokumento o mga pagsubok na kanyang programa. Pa lahat ng may alam ng kanya kanya isaalang-alang ang isa sa
ang pinakamahusay na programmer sa mundo. Bakit ito? "Master ng sagot: "Iyon ang programmer ay mastered ang Tao. Siya ay nawala
lampas ang pangangailangan para sa disenyo; hindi siya maging galit kapag ang system
nag-crash, ngunit tumatanggap ng ang uniberso walang alalahanin. Siya ay nawala sa ibayo ng
kailangan para sa dokumentasyon; siya ay hindi na nagmamalasakit sa kung sinumang nakikita ng kanyang code.
Siya ay nawala sa kabila ng pangangailangan para sa pagsubok; sa bawat isa sa kanyang mga programa ay perpekto
sa loob ng kanilang sarili, payapa at elegante, ang kanilang layunin ay maliwanag. Tunay,
siya ay ipinasok ang misteryo ng Tao. "-------------------------
Book 3 - Disenyo
Kaya spake ang master programmer:
"Kapag ang programa ay sinusuri, ito ay masyadong huli na upang gumawa ng disenyo
pagbabago. "3.1
May isang beses ay isang tao na nagpunta sa isang computer na kalakalan ipakita. Sa bawat araw bilang siya
ipinasok, ang tao ang sinabi ng bantay sa pinto:"Ako ay isang mahusay na magnanakaw, na kilala para sa aking mga feats ng shoplifting. Maging
forewarned, para ipakita ang kalakalan na ito ay hindi dapat makatakas unplundered. "Pagsasalita ito nabalisa ang bantay sa lubos na, dahil may mga milyon-milyong mga
dolyar ng computer na kagamitan sa loob, kaya niya pinapanood ang tao sa mabuti. Pero
tao ang lamang wandered mula sa booth sa booth, humuhuni ang tahimik na sa kanyang sarili.Kapag ang tao sa kaliwa, ang bantay ay kinuha sa kanya muna at hinanap ang kanyang damit, ngunit
walang ay matatagpuan.Sa susunod na araw ng kalakalan ang ipakita, ang tao ang nagbalik at chided ang bantay
sinasabi: "escaped ko ng sa isang malawak na nadambong kahapon, ngunit ngayon ay kahit
mas mahusay. "Kaya pinapanood ng bantay sa kanya kailanman mas malapit, ngunit sa hindi mapakinabangan.Sa huling araw ng kalakalan ang ipakita, ang bantay ang maaaring sawayin ang kanyang kuryusidad
hindi na. "Sir magnanakaw," sinabi niya, "Ako kaya naguguluhan, hindi ako mabubuhay sa
kapayapaan. Paki liwanagan akin. Ano ito na kayo ay pagnanakaw? "Tao ang smiled. "Ako pagnanakaw ng mga ideya," siya sinabi.
3.2
May isang beses ay isang master programmer na sinulat ng unstructured programa. Ang isang
baguhan programmer, naghahanap sa gayahan kanya, din nagsimula na magsulat
mga unstructured programa. Kapag baguhan nagtanong ang master na suriin ang kanyang
pag-unlad, master criticized kanya para sa pagsulat ng mga unstructured na mga programa,
sinasabi, "Ano ay angkop para sa panginoon ay hindi naaangkop para sa
baguhan. Dapat mong maunawaan ang Tao bago ang transcending istraktura. "3.3
Nagkaroon ng isang beses sa isang programmer na naka-attach sa hukuman ng warlord
ng Wu. Ang warlord Ang nagtanong ang programmer: "Alin ang mas madali sa disenyo: isang
accounting pakete o ng isang operating system? ""Ang isang operating system," Tumugon ang programmer.
Ang warlord Ang uttered ng isang tandang ng kawalang-paniwala. "Tiyak na isang accounting
pakete ay walang kuwenta sa tabi ng kasalimuotan ng isang operating system, "siya
sinabi."Hindi kaya," sinabi programmer, "kapag pagdisenyo ng isang pakete ng accounting,
programmer ang nagpapatakbo bilang isang tagapamagitan sa pagitan ng mga tao na nagkakaroon ng iba't-ibang
ideya: kung paano dapat ito gumana, kung paano ang mga ulat ay dapat na lumitaw, at kung paano dapat ito
tumalima sa mga batas sa buwis. Sa pamamagitan ng kaibahan, ang isang operating system ay hindi limitado
sa labas appearances. Kapag pagdisenyo ng isang operating system, ang programmer
Ang seeks ang pinakasimpleng pagkakatugma sa pagitan ng machine at mga ideya. Ito ay kung bakit ang isang
Ang operating system ay mas madali upang mag-disenyo. "Ang warlord ng Wu nodded at smiled. "Iyon ay ang lahat ng mabuti at maayos, pero
na kung saan ay mas madali i-debug? "Ang programmer Ang ginawa walang reply.
3.4
Manager A pinuntahan ang programmer master at nagpakita sa kanya ang mga kinakailangan
dokumento para sa isang bagong application. Manager ang nagtanong ang master: "Gaano katagal
aabutin upang mag-disenyo ng system na ito kung magtalaga ko limang programmer dito? ""Ito ay tumagal ng isang taon," sabi ni master ang kaagad.
"Ngunit kailangan namin agad ang sistema na ito o kahit na mas maaga! Gaano katagal aabutin ito
tumagal kung magtalaga ko sampung programmer dito? "Ang master programista ay frowned. "Sa kasong iyon, ito ay tumagal ng dalawang taon."
"At kung ano kung magtalaga ko ng isang daang programmer dito?"
Shrugged ang Ang master programista ay. "Pagkatapos disenyo ay hindi
nakumpleto na, "siya sinabi.-------------------------
Book 4-coding
Kaya spake ang master programmer:
"Ang isang mahusay na kasulatan na programa ay ang sarili nitong langit; isang mahinang-nakasulat na programa ay
sarili nitong impyerno. "4.1
Ang programa ay dapat na maging ilaw at maliksi, ang mga subroutines konektado tulad ng isang
string ng mga pearls. Ang espiritu at layunin ng programa ay dapat na mananatili
sa buong. Ay dapat na alinman masyadong maliit o masyadong maraming, ni
hindi na kailangan loop o inutil variable, ni kakulangan ng istraktura o
napakalaki tigas.Ang programa ay dapat sundin ang `Batas ng hindi bababa sa labis na pagtataka '. Ano ang batas na ito?
Ito ay lamang na ang program ay dapat palaging tumugon sa ang mga gumagamit sa paraan
na astonishes sa kanya ng hindi bababa sa.Isang programa, hindi mahalaga kung paano kumplikado, ay dapat kumilos bilang isang solong yunit. Ang programa
dapat mapupunta sa pamamagitan ng lohika sa loob sa halip na sa pamamagitan ng panlabas appearances.Kung nabigo ang programa sa mga kinakailangang ito, ito ay sa isang estado ng
kaguluhan at pagkalito. Ang tanging paraan upang itama ito ay upang isulat na muli ang
programa.4.2
Baguhan Isang nagtanong ang master: "Mayroon akong isang program na minsan ay tumatakbo at
Ang minsan aborts. Sinundan ko ang mga patakaran ng programming, pa ako
ganap baffled. Ano ang dahilan para sa? "Master ang sumagot: "Ikaw ay nalilito dahil hindi mo maintindihan ng Tao.
Lamang ng isang tanga Inaasahan makatuwiran na pag-uugali mula sa kanyang kapwa tao. Bakit mo
asahan ito mula sa isang makina na ang mga tao ay constructed? Computers gayahin
determinismo; lamang Tao ay perpekto."Ang mga patakaran ng programa ay panandalian lamang; lamang Tao ay walang hanggan. Kaya
dapat mong pagnilay-nilayin ang Tao bago makatanggap ka ng paliwanag. ""Ngunit paano ko malalaman kapag ako ay nakatanggap ng paliwanag?" Nagtanong ang
baguhan."Ang inyong programa ay pagkatapos tumakbo ng tama," Tumugon ang master.
4.3
Master A ay nagpapaliwanag ng likas na katangian ng Tao ng sa isa sa kanyang mga novices. "Ang
Tao ay katawanin sa lahat ng software - alintana ng kung paano hindi gaanong mahalaga, "sinabi
ang master."Ba ang Tao sa isang kamay-hawak na calculator?" Nagtanong baguhan.
"Ito ay," dumating reply.
"Ba ang Tao sa isang laro ng video?" Patuloy ang baguhan.
"Ito ay kahit sa isang laro ng video," sinabi master.
"At ang Tao sa DOS para sa isang personal computer?"
Master ang coughed at shifted kanyang posisyon bahagyang. "Aralin ay higit sa
para sa araw na ito, "siya sinabi.4.4
Prince Wang programmer ay pagkukudigo software. Ang kanyang mga daliri danced sa
keyboard. Ang programa na na compiled walang isang mensahe ng error, at ang mga programa
tumakbo tulad ng isang magiliw hangin."Magaling!" Ang Prince exclaimed, "Ang iyong pamamaraan ay walang kamali-mali!"
"Pamamaraan?" Sabi programmer ang nagiging mula sa kanyang mga terminal, "Ano ko
sundin ay Tao - lampas sa lahat ng mga diskarte! Kapag ako unang nagsimula sa programa ko
nais makita ang bago sa akin ang buong problema sa isang mass. Matapos ang tatlong taon ko
na nakita ito mass. Sa halip, ginamit ko subroutines. Ngunit ngayon ko makita ang wala.
Ang aking buong pagkatao ay umiiral sa isang walang hugis na walang bisa. Aking pandama ay bakante. Aking espiritu,
libreng upang gumana nang walang plano, sumusunod sa kanyang sariling katutubong gawi. Sa maikling, programa aking
writes mismo. Totoo, minsan may mga problema. Makita ko ang mga ito
darating, bagalan ako, panoorin ko tahimik. Pagkatapos ko babaguhin ang isang linya ng code
at ang mga paghihirap na maglaho tulad ng mga puffs ng idle na usok. Pagkatapos ko sumulat ng libro ang
programa. Umupo ako pa rin at hayaan ang kagalakan ng trabaho punan ang aking pagiging. Ko isasara ang aking
mata para sa isang sandali at pagkatapos ay mag-log off. "Prince Wang sinabi, "Gusto na ang lahat ng aking mga programmer ay bilang matalino!"
-------------------------
Book 5 - Maintenance
Kaya spake ang master programmer:
"Kahit na ang programa ng maging ngunit tatlong linya ang haba, sa ibang pagkakataon ito upang maging
pinananatili. "5.1
Ang isang mahusay na ginamit pinto ay nangangailangan ng walang langis sa mga hinges.
Isang mabilis-umaagos stream ay hindi lumaki ang mabantot.
Ni tunog o mga saloobin ay maaaring maglakbay sa pamamagitan ng isang vacuum.
Software rots Kung hindi ginagamit.Ito ang dakilang misteryo.
5.2
Manager Ang nagtanong ng isang programmer kung gaano katagal ito ay tumagal sa kanya upang matapos ang
programa kung saan siya ay nagtatrabaho. "Ito ay tapos na bukas," ang
programmer kaagad sumagot."Tingin ko ikaw ay pagiging unrealistic," sinabi ng manager, "Truthfully, kung paano
katagal? "Ang programmer Ang naisip para sa isang sandali. "Mayroon akong ilang mga tampok na nais ko
idagdag. Ito ay tumagal ng hindi bababa sa dalawang linggo, "sinabi niya sa wakas."Kahit na sobra sa inaasahan," insisted manager, "ako ay
nasiyahan kung mo lang sabihin sa akin kapag kumpleto na ang programa. "Programmer ang sumang-ayon na ito.
Ilang taon mamaya, ang manager ang ititigil. Sa ang paraan sa kanyang pagreretiro
pananghalian, natuklasan niya ang ang programmer natutulog sa kanyang terminal. Siya ay naging
programming ang lahat ng gabi.5.3
Isang baguhan programmer ay isang beses na nakatalaga sa code ng isang simpleng pinansyal na pakete.
Baguhan ang nagtrabaho furiously para sa maraming mga araw, ngunit kapag master kanyang nasuri
kanyang programa, siya natuklasan na ito ay naglalaman ng isang screen editor, ang isang hanay ng mga
heneralisado graphics gawain, isang artipisyal na katalinuhan ng interface, ngunit
hindi ang slightest banggitin ng anumang pinansiyal.Kapag ang master ang tinanong tungkol dito, baguhan ang naging nagagalit. "Huwag maging
kaya walang tiyaga, "kanyang sinabi," Kukunin ko ilagay sa pinansiyal na bagay-bagay sa huli. "5.4
Kapabayaan ng isang crop na siya ay nakatanim ang isang magandang magsasaka?
Magpaumanhin kahit ang pinaka-abang mag-aaral ay isang mahusay na guro?
Ay isang mahusay na ama payagan ang isang solong anak na mamatay sa gutom?
Ay isang mahusay na programmer tanggihan upang mapanatili ang kanyang code?-------------------------
Book 6 - Pamamahala
Kaya spake ang master programmer:
"Hayaan ang programmer ay marami at ang mga tagapamahala ng ilang - at pagkatapos ang lahat ay
produktibong. "6.1
Kapag hawak ang mga manager mga walang katapusang mga pulong, ang mga programmer na magsulat ng mga laro. Kapag
accountant makipag-usap ng mga quarterly kita, ang pag-unlad na badyet ay tungkol sa
ay cut. Kapag Senior siyentipiko makipag-usap ng asul na kalangitan, ang mga ulap ay tungkol sa roll
inTunay, ito ay hindi ang Tao ng programming.
Kapag mga managers gumawa ng mga commitments, mga programa sa laro ay binalewala. Kapag
accountant gumawa ng mga pang-hanay ng mga plano, pagkakatugma at sunod ay tungkol sa upang maging
naibalik na. Kapag Senior siyentipiko harapin ang mga problema sa kamay, ang
Ang problema ay madaling malulutas.Tunay, ito ay ang mga Tao ng programming.
6.2
Bakit ang mga programmer di-produktibong?
Dahil ang kanilang mga oras ay nasayang sa pulong.Bakit ang mga programmer suwail?
Dahil pamamahala interferes masyadong maraming.Bakit ang mga programmer resigning isa-isa?
Dahil sila ay nasunog out.Pag nagtrabaho para sa mahihirap na pamamahala, hindi na nila halaga ng kanilang mga trabaho.
6.3
Manager A ay tungkol sa fired, ngunit isang programmer na nagtrabaho para sa kanya
imbento ng isang bagong programa na naging popular at naibenta na rin. Bilang isang resulta, ang
manager mananatili ang kanyang trabaho.Manager ang sinubukan upang bigyan ang mga programmer ng isang bonus, ngunit ang programmer
tumanggi ito, na nagsasabi, "isinulat ko ang programa dahil Akala ko ito ay isang
kagiliw-giliw na konsepto, at kaya inaasahan ko walang gantimpala. "Ang manager sa pagdinig na ito remarked, "ito programmer, kahit na siya hawak
isang posisyon ng mga maliliit na pagpapahalaga, naiintindihan na rin ang tamang tungkulin ng isang
empleyado. Ipaalam sa amin nagsusulong sa kanya sa mataas na posisyon ng pamamahala
consultant! "Subalit kapag sinabi na ito, programmer minsan pa tumanggi, na nagsasabi, "umiiral ko kaya
na maaari kong programa. Kung ako ay na-promote, nais kong gawin wala ngunit basura
oras sa lahat. Maaari ba akong pumunta ngayon? Mayroon akong isang programa na akong nagtatrabaho sa. "6,4
Manager A ay napunta sa kanyang mga programmer at sinabi sa kanila: "Tulad ng tungkol sa iyong trabaho
oras: pupunta ka na dumating sa sa siyam na sa umaga at mag-iwan
sa limang sa hapon. "Sa panahong ito, ang lahat ng mga ito ay naging galit at ilang
nakatalaga sa lugar.Kaya manager ang sinabi: "kanan Lahat, sa kaso na maaari mong itakda ang iyong sariling
oras ng pagtatrabaho, hangga't mong tapusin ang iyong mga proyekto sa iskedyul. "Ang
programmer, ngayon nasisiyahan, nagsimula na dumating sa tanghali at gumagana sa ang maliit na maliit
oras ng umaga.-------------------------
Book 7 - Corporate Wisdom
Kaya spake ang master programmer:
"Maaari mong ipakita ang isang programa para sa isang corporate ehekutibo, ngunit hindi mo maaari
gumawa siya ng computer na nag-aral. "7.1
Baguhan Isang nagtanong ang master: "Sa silangan ay isang mahusay na puno-istraktura
na ang mga tao ay tumawag sa `Corporate Headquarters '. Ito ay namamaga ng hugis sa
bise Presidente at accountant. Ito ay isyu ng isang tao ng mga memo, ang bawat
sinasabi sa `Pumunta, Samakatuwid! ' o `Pumunta, rini! ' at walang nakakaalam kung ano ang ibig sabihin. Bawat
taon bagong pangalan ay ilagay papunta sa mga sanga, ngunit ang lahat upang hindi mapakinabangan. Paano maaari
tulad ng isang kakila-kilabot na nilalang? "Master ang sumagot: "mahalata mo ang ang napakalawak istraktura na ito at
nabalisa na ito ay walang nakapangangatwiran layunin. Hindi mo libangan mula sa
mga imortal gyrations nito? Hindi ka ba tamasahin ang untroubled kadalian sa programming
sa ilalim nito sheltering sanga? Bakit mo bothered sa pamamagitan ng
Ang uselessness? "7.2
Sa silangan ay isang pating kung saan ay mas malaki kaysa sa lahat ng iba pang isda. Ito
mga pagbabago sa isang ibon na may pakpak tulad ng mga ulap na pagpuno sa kalangitan. Kapag ito
ibon gumagalaw sa buong lupa, ito ay nagdudulot ng isang mensahe mula sa Corporate
Headquarters. Ang mensaheng ito patak sa gitna ng ang mga programmer,
tulad ng isang tagak paggawa nito mark sa beach. Pagkatapos ibon mounts sa
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. Hindi
change in management can harm him. He will not be fired, even if the
project is cancelled. Why is this? 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. Ginagawa
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"



































