kyselyn, ping, pubsub, pubsubhub, pubsubhubbub

06 syyskuu 2009 by Prashant · Comments
Filed under: tekniikka

Jos olet skeptinen, on menetelmä hulluus edellä, otsikossa postitse. Vuonna tech piireissä on epätodennäköistä, että et ole kuullut pubsubhubbub. Nopeasti muutaman kuukauden, se on ollut yksi kolmesta puhui asiaa. Kaksi muuta homomorphic salaus ja Google aalto [ 1. ]. Palatakseni nykyiseen tehtäväänsä - termit otsikossa kertoa, miten saat sisältöä muilta ihmisiltä. Seuraavat tiedot tulee selvemmäksi, jos voit kuvitella mitä tapahtuu suhteessa blogeja, vaikka ne eivät ole käsitteellisesti rajoitu blogeja.

Polling viittaa skenaarioon, jossa asiakkaat Kyselen palvelimeen, jos jotain uutta on keksittävä. Kuinka usein pyytää päivityksiä aina ongelma äänestyspaikalla liian usein tai liian harvoin, mutta kuten eräs lukija huomautti tähän , että yksi suuri, juttu äänestyspaikoilla on, että palvelin ei tarvitse ylläpitää tilaan.

Ping tarkoittaa silloin, kun kirjoittaa artikkeli, sinä (tai ohjelmisto) päivittää myös suosittuja (keskus) Update Services. Jotkut tausta täältä .

Seuraavaksi on pubsub joka kannattaa julkaista / tilata, yksi varhaisimmista piki se tehtiin täällä Evan Henshaw-Plath ja Kellan Elliott-McCrea (72 dioja mutta kannattaa mennä läpi). Vakuuttava esimerkki he antoivat vastaan ​​oli tämä - tiettynä päivänä, FriendFeed ryömi Flickr 2,9 miljoonaa kertaa saada uusimmat kuvia 45754 käyttäjää, joista 6721 oli käynyt Flickr näissä 24 h ja olisi voinut "mahdollisesti" ladattu kuva. Huomaa, että he ehdotti ei ollut uutta teknologiaa, koska he huomauttavat "vallankumouksellinen uusi 20 vuotiaan tekniikalla. Jos teet sen blogeja silloin yksi suurimmista ongelmista xmpp - läsnäolo datarakenteen, joka voi olla jopa 60-70% voidaan vähentää paljon.

pubsubhub sanoista julkaista Tilaa napa ja pubsubhubbub on protokolla, ytimenä on ajatus pubsubhub. Missä julkaisijat (eli bloggaajien) päivittää napa joka (saattaa olla useampia keskuksia, jotka puhuvat keskenään) sijaitsee "jossain pilvessä", koska per protocol tämä voidaan työntää tai vetää kohti protokollan mutta seuraava lenkki ketju, napa asiakkaan (sanoa lukijoille) on aina työntää mallia. Tämä sivu on hyvä lähtökohta pubsubhubbub, yleiskatsaus kalvot ovat hyviä. Koskaan lennokas Anil Dash kuvaa sitä täällä kuin painike web.
Kaksi muuta liittyvät luettu ovat webhooks joka on pohjimmiltaan http kutsuja. Github käyttää sitä, niin ei paypal tahdistamattoman ilmoituksia maksun IPN . Niin tekevät monet muutkin. Related konsepti rsscloud mikä taas pubsub napa. Seuraa tätä linkkiä.

Saatat ihmetellä, mitä järkeä on kirjoittaa kaikki nämä täällä on kaksi 1. Nämä asiat on hyvä tietää, vähän ainakin ja 2. Tämä blogi on pubsubhubbub käyttöön nyt kautta appspot keskittimeen käyttämällä tätä wordpress plugin ja ruokinnasta on pubsubhubbub portin kautta FeedBurner, linkki täällä
-
[ +1 ]. - Hyvä johdanto lukea täysin homomorphic salaus on tämä artikkelin Bruce Schneier, ja tämä puhe on enemmän tai vähemmän ainoa Google aalto.

-UPDATE - Tämä viesti kertoo, kuinka vaatimus julkisen palvelimen soittopyyntö voidaan kiertää pöytäkoneiden asiakkaille käyttäen xmpp gateway (for pubsubhubbub).

Hieman kokoonpano

29 elokuu 2009 by Prashant · Comments
Filed under: tekniikka

Kun olet lukenut tämän artikkelin lukko vapaita puskureita ja nähdä käyttöön CAS (vertaa ja vaihtaa), tunsin itseni lähettämistä assembly tekemään samoin. Käytä tapauksessa tuolla oli kirjoittaa natiivi menetelmä ja kutsuvat sitä Java (takaisin 1,5, kun samanaikaisesti tietorakenteita Java olivat enemmän tai vähemmän olematon). Pitemmittä puheitta, minä valloilleen koodia sinuun :) . Ensimmäinen on CAS ja toinen on tietotekniikan GCD käyttää Eukleideen algoritmi (tämä löytyy monin paikoin ja tutorials samoin).

Käännä ja suorita ohjeet gcc file_name.c ; ./a.out

Vertaa ja Swap

   # Include 
  # Include 
 / / Vaihto - newvalue, comperand on vanha / odotusarvo
 / *
  * Toiminto itse asiassa tekee seuraavat asia - jos arvo * dest on sama oldvalue sitten korvata newvalue muuten jätä se ennallaan: eivät kaikki nämä atomisesti
  *
  * On kaksi vaihtoehtoa paluuarvon
  * 1.is alkuarvo * dest ja jättää taakan kutsuvan fxn verrata sitä oldval
  * 2.  tekevät sen tänne ja palauttaa 0 tai 1, tämä olisi tehokkaampaa
  ** /

 / * Myöhemmin vaihtaa sen makro * /
 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 tulos = 1 ;/ * 1 osoittaa, että CAS onnistunut ja 0 osoittaa, että se epäonnistui * /
	 / * Btw tarvitse asettaa CC lippu clobbering!  * /
	 __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" / * pitäisi lukita olla samalla rivillä * /
			 "JZ DONE \ n \ t"
			 "Movl 0 dollaria,% 1 \ n \ t"
			 "DONE: \ n \ t"
			 : "= M" (dest), "= g" (tulos)
			 : "G" (oldvalue), "g" (newvalue), "m" (dest)
			 : "% EAX", "% EBX", "ECx", "CC"
			 );
	 printf ("(% d,% d,% d)", * DEST, oldvalue, newvalue);
	 palata tulos;
 }

 / * TODO
  * Kirjoittaa toisen asm fxn joka asettaa edellä fxn ja while-silmukka ja pitää yrittää jos se onnistuu * /

 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 ("muuttaminen arvo * c% 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,, b));
	 printf ("% d \ n", CAS (C, B));
	 return 0;
 }

Muotoilu toteaa - näyttää wp syntaksin korostus on lisätä lopulta sivuuttaa sitä.

GCD

 # Include 
 int syt (int, int b) {
     int tulos;
     / * Lasketaan Suurin yhteinen tekijä käyttää Eukleideen algoritmi * /
     __asm__ __ volatile__ ("movl% 1,%% EAX;"
                           "Movl% 2,%% EBX;"
                           "CONTD: CMPL 0 dollaria,%% EBX;"
                           "Je tehty;"
                           "Xorl%% EDX,%% EDX;"
                           "Idivl%% EBX;"
                           "Movl%% EBX,%% EAX;"
                           "Movl%% EDX,%% EBX;"
                           "JMP CONTD;"
                           "DONE: movl%% EAX,% 0," "= g" (tulos): "g" (), "g" (b)
     );

     palata tulos;
 }

 int main () {
     int ensimmäinen, toinen;
     printf ("Anna kaksi kokonaislukua:");
     scanf ("% d% d", ja ensimmäinen, ja toinen);

     printf ("GCD% d-% d ovat% d \ n", ensimmäinen, toinen, syt (ensimmäinen, toinen));

     return 0;
 }

Cricketing maailma odottaa UMJ

25 elokuu 2009 by Prashant · Comments
Filed under: misc

Kun sarja ulottuu viisi testiä ja noin kaksi kuukautta Englannissa regeneroituina tuhkaa.

Puhutaanpa voittajajoukkue ensimmäinen - niiden keskellä järjestys on "keskimääräinen", jos et halua kriittisiä. Greame Swann osuus kanssa bat laskee peräti panos pallon kanssa. Stuart Broad - paras all monitaituri oli ei Starter viides testi. Andrew Strauss oli ainoa johdonmukainen lyöjä ja Jimmy Anderson oli ainoa johdonmukainen keilaaja.

Kohta täällä ei ole haukkua saavutuksia voittajajoukkue vaan laittaa oikeisiin mittasuhteisiin, että huolimatta kaikista näistä, Australia menetetty. sinun täytyy ajatella muutaman sekunnin, jos pyydetään nimeämään heidän paras keilaaja. Aivan, se oli BW Hilfenhaus. Hauritz päihitti everbody odotukset, mutta ei silti ole tarpeeksi hyvä valitaan kaksi viidestä testeistä. Etelä-Afrikka ei koskaan tullut maailman vispilä ilman maailmanluokan kiekkoa, Australia voi toivoa tulevaisuudessakin yksi ilman sitä kelpaa ainakin yksi. Taikuri lavalta ja se ei näytä kuin taidetta enää unohda taikuutta. Ponting komeilee keskuudessa vähemmän kuolevaisten ja Michael Clarke nousee kovin usein, mutta tekee niistä tiimi joitakin erittäin hyviä pelaajia, eikä kovin hyvä joukkue.
Ashes 2009 muistetaan Andrew Flintoff viimeisen Ashes, Stuart Broadin saapumis kaikki monitaituri (jos hän lisää hieman Ashes kansanperinnettä hänen lupaava alku), ja yksi osuvin debyytti vuosisadalla kaiken aikaa Trott mutta se on myös muistetaan pisteeseen, jossa jossittelua siitä Australian ylivaltaa oli vihdoinkin levätä, se on ohi. Älkää ymmärtäkö minua väärin he voivat silti kaivaa Mike Hussey tai Stuart Clark, mutta sinusta tuntuu osuus kaikkien aikojen suuruuksien kun he katoavat jäljettömiin. Joskus ne tulevat muistuttamaan itseään IPL mutta niitä ei voida korvata. Katsotaan tuntea siunattu nähtyään Warne, McGrath ja Gilchrist leikkivät yhdessä ja saa tukea Waughs, Ponting, Hyden, Martin ja Langer.

Jatkossa Etelä-Afrikka jää aina erittäin hyvä joukkue, mutta heidän täytyy voittaa välieriin ja olla johdonmukaisia ​​ympäri maailmaa, Pakistan pysyy enigmatically loistava, intialainen Young Guns luultavasti löytää se vaikea täyttää kengät poikkeuksellisen edeltäjänsä. Sri Lanka on edelleen näyttää välähdyksiä taiteen veneet. Mutta saatamme joutua odottamaan jonkin aikaa ennen kuin kaikki ulos hallitseva joukkue tai ennen kapteeni valittaa kilpailun puutteesta, sillä Steve Waugh teki kerran.

On liittyvä huomautus - sanotaan tervetuloa palaamassa ja Asif, hänellä on helvetin paljon potentiaalia, toivottavasti nähdä tuon ja myös tervetullut Andy Flower uudessa awatar, oikea et voi pitää hyvää miestä alas pitkään.

ruby yksi vuorausta luoda hash

20 elokuu 2009 by Prashant · Comments
Filed under: tekniikka

Eilen taas läpi yhtä vanhoista ohjelmista, löysin tämän kirjoittanut minulle joskus takaisin:

#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

Tappaa joitakin suspense haluan paljastaa, että raw_text näyttää

 

, Oikea se on leikattu paypal maksun kuittaus.

Ennen linja rikkoutuessaan osissa lukee paremmin:

  unescaped_array = CGI.unescape (raw_text). split ('&')
   unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (nolla) jos b.size == 1, b}
   flattened_array = unescaped_array.flatten
   hash = Hash [* flattened_array] 

Tehdään yksittäisiä askeleita IRB:

  IRB (tärkein): 009:0> unescaped_array = CGI.unescape (raw_text). split ('&')    

 => ["SUCCESS", "mc_gross = 10,00", "protection_eligibility = tukikelpoinen", "payer_id = U7PPJJ4TSJ47E", "vero = 0.00", "payment_date = 09:45:30 10 heinäkuu 2009 PDT", "payment_status = Odottaa "]                                                                         

 IRB (tärkein): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nolla) jos b.size == 1, b}  

 => [["SUCCESS", nil], ["mc_gross", "10,00"], ["protection_eligibility", "tukikelpoinen"], ["payer_id", "U7PPJJ4TSJ47E"], ["vero", "0.00"] ["payment_date", "09:45:30 10 heinäkuu 2009 PDT"], ["payment_status", "Odottaa"]]                               

 IRB (tärkein): 014:0> flattened_array = unescaped_array.flatten     

 => ["Menestys" nolla "mc_gross", "10,00", "protection_eligibility", "Tukikelvottomat", "payer_id", "U7PPJJ4TSJ47E", "vero", "0,00", "payment_date", "9:45: 30 10 heinäkuu 2009 PDT "," payment_status "," Odottaa "]
 IRB (tärkein): 015:0>
 hash = Hash [* flattened_array]
 => {"Vero" => "0.00", "payment_status" => "Odottaa", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "menestys" => nil "payment_date" = > "09:45:30 10 heinäkuu 2009 PDT", "protection_eligibility" => "tukikelpoinen"} 

BTW, * kutsutaan läiske operaattori ruby

Toinen tapa luoda hash osoitteesta "joukko pareja" on käyttää pistät:

  hash = [[1,2], [3,4]]. pistää ({}) {| tulos, elementti | tulos [element.first] = tulos [element.last]; tulos} 

On vielä yksi tapa :) Kirjoita silmukka, joka Jätän harjoitustehtäväksi lukijat!

Täällä on vähän liity käyttötapaus luoda hash mistä taulukot:

  IRB (tärkein): 005:0> [1,2,3,4,7,9]. group_by {| x | x <5?  : Vähemmän :: suurempi}

 => {: Vähemmässä => [1, 2, 3, 4]: suurempi => [7, 9]} 

Voit tehdä enemmän asioita, pohjimmiltaan johtuu lohkon käytetään avain että osa tuloksena hash.

gmail, mutt ja msmtp korjaus

17 elokuu 2009 by Prashant · Comments
Filed under: tekniikka

Jos käytät mutt ja SMTP käyttää Gmailia. Tässä on (huono) uutinen. Cool guys at Google jälleen muuttunut todistus. Ai, sinä pyysit - miten se tiedä? Yksinkertainen mutt alkoi valittaa huonoa todistusta, kun yritän käyttää msmpt, pahamaineisen "msmtp: TLS varmenteen todentaminen epäonnistui: todistusta ei ole saanut tunnettu liikkeeseenlaskija." tervehti minua ruudulla.

Rajat vahvistaa -
Juokse jälkeen

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

Sen sijaan vanhojen Thwate Server nyt saat seuraaminen liikkeeseenlaskijan segmentissä
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Onneksi korjaus on yksinkertainen, täällä on mitä sinun tarvitsee tehdä on debian

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

Tämän jälkeen vain muuttaa seuraavan rivin sinä ~~~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

ja

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

Git ja Awesome Survey

15 elokuu 2009 by Prashant · Comments
Filed under: misc

Tässä on kaksi linkit kyselyssä git (versionhallintajärjestelmä) ja mahtava (window manager) yhteisö. Jos käytät jompaakumpaa näistä, ota pois jonkin aikaa täyttää kyselylomake. Ajattele sitä yksinkertaisin tapa edistää takaisin ohjelmia käytetään.
Tässä linkit:

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

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

Huomaa - (Kun löytyy näillä sivuilla, mutta alareunassa :) ) -
"Jos evästeet ovat käytössä, voit aina jättää osittain täytetty kysely, ja palata vastauksia myöhemmin, täyttämällä sen myöhemmin."

Yhdistäminen tiivisteiden ja yaml conf tiedostojen

31 heinäkuu 2009 by Prashant · Comments
Filed under: tekniikka

YAML on varsin kätevä kirjoittaa asetustiedostoja. Ensisijainen etu on, että se lukee kuin tekstitiedosto. Tämä toimii todella hyvin, jos config tiedosto on tasainen (ei hierarkia) eikä toistoja.
Jos kokoonpanoissa tiedosto on toistoa on järkevää erottaa näitä tekijöitä ja käyttää niitä uudelleen. Tarkoitan siis tämän - sanokaamme sinulle config tiedosto näyttää tältä:

  kehitys:
   input_location: common_input
   output_location: dev_location
   mail:
     smtp_server: oma_palvelimesi
     login: your_login
     Salasana: top_secret
 tuotantoon:
   input_location: common_input
   output_location: dev_location
   mail:
     smtp_server: oma_palvelimesi
     login: your_login
     Salasana: top_secret 

Olettaen yli koodi in / tmp / test.yml tässä miten voit lukea Python ja Ruby
$cat readyml.py

 #! / Usr / bin / env python
 mistä pprint tuonti pprint kuin yks
 # Debianin pitää asentaa python-yaml
 mistä yaml tuonti kuormitus load_all, dump
 hash = kuormitus (open ("/ tmp / test.yml '))
 pp (hash ['kehitys']) 


$ cat readyml.rb

  #! / Usr / bin / env ruby
 vaativat "pp"
 hash = YAML :: kuormitus (File.open ('/ tmp / test.yml "). luettu)
 pp hash ["kehitys"] 

Tässä on kätevä yhdelle putkelle Ruby version
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' tai voit kokeilla samaa sisäisten luottoluokitusten menetelmän tai python konsolin.

Huomaa, että edellä koodinpätkä, kaikki on muu kuin lähtö paikka on sama kehityksen ja tuotannon osa. Täällä yml solmu tunniste tulee pelastamaan. Idea on yksinkertainen on joukko oletusarvot ja ohittaa ne eri paikkaan.
Voisit vetää sen lisäksi seuraavasti:

  defaults: & oletusarvot
   input_location: common_input
   output_location: dev_location
   mail:
     SENDER_NAME: lähettäjä
     smtp_server: oma_palvelimesi
     login: your_login
     Salasana: top_secret
 kehitys:
   <<: * Oletusarvot
 tuotantoon:
   <<: * Oletusarvot
   output_location: prod_location 


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

Hienoa, se toimii (tm)!.
Todennäköisesti me vaihdettiin joitakin selvyyttä vähän taikuutta. Tässä pieni selitys: &, * ja <<: ja joka on ankkuri tag voidaan ymmärtää solmun tunniste, * on solmu viite ja <<: tarkoittaa hash yhdistämisessä.

Lisätietoja löytyy joko yaml silmälasit tai wikipedia
Hyvä niin, mutta siellä on saalis täällä, nämä hash yhdistämisiä ei ole rekursiivinen. Mitä se tarkoittaa on tämä: Oletetaan, että haluat olla erilaisia ​​lähettäjän nimen postin kahdessa ympäristössä, saatat joutua kiusaukseen tehdä seuraavaa:

  defaults: & oletusarvot
   input_location: common_input
   output_location: dev_location
   mail:
     SENDER_NAME: lähettäjä
     smtp_server: oma_palvelimesi
     login: your_login
     Salasana: top_secret
 kehitys:
   <<: * Oletusarvot
   mail:
     SENDER_NAME: sender_dev
 tuotantoon:
   <<: * Oletusarvot
   output_location: prod_location
   mail:
     SENDER_NAME: sender_prod 

Katsotaan

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

Oho, jokin meni pieleen, ongelma kuin edellä on mainittu, että hash yhdistäminen ei ole rekursiivinen, ja kun yhdistetään se korvattiin mail laiminlyö postia tuotantoa, joka on vain yksi avain. Ratkaisu / työ ympärillä on kääriä rullalle yksi taso:

  common_settings: & common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: & mail_defaults
  SENDER_NAME: lähettäjä
   smtp_server: oma_palvelimesi
   login: your_login
   Salasana: top_secret

 defaults: & oletusarvot
   <<: * Common_settings
   mail:
     <<: * Mail_defaults
 kehitys:
   <<: * Oletusarvot
 tuotantoon:
   <<: * Oletusarvot
   mail:
     <<: * Mail_defaults
     SENDER_NAME: sender_prod

Katsotaan uudestaan

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

Sanoitko sinulla on yksi sisältymistaso, hyvin voit varmasti levittää yksi taso, mutta silloin siitä tulee sotkua. Joten, jos et yritä kirjoittaa ratkaisua Hanoin tornit on conf tiedostoon, on parempi restucture conf tiedostoon kuin kaivaa yaml tai jotain muuta. Mutta se on teidän puhelu muutenkin.

Suuri ohjelmoijat löytää yksinkertaisia ​​ratkaisuja monimutkaisiin ongelmiin

30 kesäkuu 2009 by Prashant · Comments
Filed under: misc

Pitkästä aikaa voisin löytää lähde seuraava lainaus-

Junior ohjelmoijat luoda yksinkertaisia ​​ratkaisuja yksinkertaisiin ongelmiin. Senior ohjelmoijat luoda monimutkaisia ​​ratkaisuja monimutkaisiin ongelmiin. Suuri ohjelmoijat löytää yksinkertaisia ​​ratkaisuja monimutkaisiin ongelmiin.

Juuri essee nimeltään Beautiful Software Charles Connell.

Toinen suosikki yksi minun on Zen of Python -

Kaunis on parempi kuin ruma.
Eksplisiittinen on parempi kuin implisiittisiä.
Yksinkertainen on parempi kuin monimutkainen.
Kompleksi on parempi kuin monimutkainen.
Flat on parempi kuin sisäkkäin.
Harva on parempi kuin tiivis.
Luettavuus laskee.
Erityistapaukset eivät ole erityisiä riitä rikkomaan sääntöjä.
Vaikka käytännöllisyys voittaa puhtautta.
Virheet olisi koskaan kulkea hiljaa.
Ellei erikseen vaiennetaan.
Kun edessä epäselvyys kieltäytyä kiusaus arvata.
Pitäisi olla yksi-, ja edullisesti vain yksi-ilmeinen tapa sen.
Vaikka tämä tapa ei välttämättä ole havaittavissa ensimmäisellä ellet hollanti.
Nyt on parempi kuin koskaan.
Vaikka koskaan on usein parempi kuin * oikealle * nyt.
Jos toteutus on vaikea selittää, se on huono idea.
Jos toteutus on helppo selvittää, se voi olla hyvä.
Nimitilat ovat yksi honking loistava idea - Tehdään enemmän näitä!
-------------------------
ja sitten on klassinen Tao of Programming

-

hyvitysten on sidoksissa sivuston

Käännös Geoffrey James

Jäljentänyt Duke Hillard

Välittämien Anupam Trivedi, Sajitha Tampi ja Meghshyam Jagannath

Re-html-sivustot ja muokata Kragen Sittler

-

Book 1 - Silent Void

Näin puhui päällikkö ohjelmoija:

"Kun olet oppinut nappaamaan virhe koodi ansa runko, se
on aika sinun lähteä. "

1,1

Jotain mystistä on muodostunut, syntynyt hiljainen mitätön. Odottaa yksin ja
unmoving, se on heti edelleen ja vielä jatkuvassa liikkeessä. On lähde
kaikista ohjelmista. En tiedä sen nimeä, joten kutsun sitä Tao of
Ohjelmointi.

Jos Tao on suuri, niin käyttöjärjestelmä on suuri. Jos toiminta
Järjestelmä on suuri, niin kääntäjä on suuri. Jos kääntäjä on suuri,
niin sovellus on suuri. Käyttäjä on tyytyväinen, ja on olemassa
harmoniaa maailmassa.

Tao of Programming virtaa kaukana ja tuoton tuuli aamulla.

1,2

Tao synnytti konekielellä. Koneen kieli synnytti
assembler.

Assembler synnytti kääntäjälle. Nyt on kymmenentuhatta
kieliä.

Kullakin kielellä on tarkoituksensa, mutta nöyrä. Kukin kieli ilmentää
Yin ja Yang ohjelmistoja. Kullakin kielellä on oma paikkansa Tao.

Mutta älä ohjelmoimaan COBOL, jos sen voi välttää.

1,3

Alussa oli Tao. Tao synnytti tilaa ja aikaa.
Siksi Tila ja aika ovat Yin ja Yang ohjelmoinnin.

Ohjelmoijat, jotka eivät ymmärrä Tao aina loppumassa aika
ja tilaa niiden ohjelmia. Ohjelmoijat että ymmärtää Tao aina
on riittävästi tilaa ja aikaa toteuttaa tavoitteensa.

Miten voisikaan olla toisin?

1,4

Viisas ohjelmoija on kerrottu Tao ja seuraa sitä. Keskimääräinen
ohjelmoija kerrotaan Tao ja etsii sitä. Tyhmät ohjelmoija
on kerrottu Tao ja nauraa sille.

Jos se ei naurua, ei olisi Tao.

Korkeimmat äänet ovat vaikeinta kuulla.
Jatkossa on tapa perääntyä.
Suuri lahjakkuus näyttäytyy myöhemmällä iällä.
Myös täydellinen ohjelma on vielä bugeja.

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

Book 2 - Ancient Masters

Näin puhui päällikkö ohjelmoija:

"Kolmen päivän ilman ohjelmointia, elämä muuttuu merkityksettömäksi."

2,1

Ohjelmoijat Vanhojen oli salaperäinen ja syvällinen. Emme pysty käsittämään
heidän ajatuksensa, joten kaikki mitä teemme on kuvata niiden ulkonäköä.

Aware, kuten kettu rajan vettä. Varoittaa, kuten yleisesti on
taistelukenttä. Kiva, kuten emäntä tervehti häntä vieraille. Yksinkertainen, kuten
uncarved puu-. Läpinäkymätön, kuten musta altaat hämärässäkin luolissa.

Kuka voi kertoa salaisuuksia heidän sydämensä ja mielensä?

Vastaus on olemassa vain Tao.

2,2

Grand Master Turing kerran unta, että hän oli koneella. Kun hän heräsi, hän
huudahti:

"En tiedä olenko mistuksen unta, että olen kone, tai
kone unta, että olen mistuksen! "

2,3

Ohjelmoijaa erittäin suuri tietokone yhtiö meni ohjelmisto
konferenssiin ja palasi ilmoittamaan hänen managerinsa, sanoen: "Minkälainen
ohjelmoijien työtä muiden yritysten? Ne käyttäytyi huonosti ja oli
välinpitämättömästi ja esiintymisiä. Heidän hiuksensa olivat pitkät ja hoitamattomat ja niiden
vaatteet oli ryppyinen ja vanhoja. Ne romahtivat vieraanvaraisuus suite ja ne
tehdyt töykeä ääniä ollessani esityksen. "

Johtaja sanoi: "En olisi koskaan lähettänyt sinut konferenssiin. Ne
ohjelmoijat elävät kuin fyysisessä maailmassa. Ne katsovat elämää järjetön,
tahaton yhteensattuma. He tulevat ja menevät tietämättä rajoituksia.
Ilman hoitoa, he elävät vain niiden ohjelmia. Miksi heidän pitäisi vaivautua
yhteiskunnallisia sopimuksia?

"He ovat elossa sisällä Tao."

2,4

Noviisi kysyi Master: "Tässä on ohjelmoija, joka ei koskaan suunnittelee,
asiakirjoja tai testejä hänen ohjelmat. Mutta kaikki, jotka tuntevat hänet pitävät häntä yhtenä
parhaat ohjelmoijat maailman. Miksi näin? "

Mestari vastasi: "Se ohjelmoija hallitsee Tao. Hän on mennyt
lisäksi tarvitaan suunnittelua, hän ei suutu kun järjestelmän
kaatuu, mutta hyväksyy maailmankaikkeuden ilman huolta. Hän on ylittänyt
tarve asiakirjoja, hän ei enää välitä, jos joku muu näkee koodia.
Hän on ylittänyt testauksen tarvetta, kullekin hänen ohjelmat ovat täydellisiä
itsessään, rauhallinen ja tyylikäs, niiden tarkoitus itsestäänselvyys. Totisesti,
Hän on tullut mysteeri Tao. "

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

Kirja 3 - Suunnittelu

Näin puhui päällikkö ohjelmoija:

"Kun ohjelma on testattu, se on liian myöhäistä tehdä suunnittelu
muutoksiin. "

3,1

Olipa kerran mies, joka meni tietokoneeseen messuilla. Joka päivä kun hän
tuli, mies sanoi vartija ovella:

"Olen hyvä varas, tunnettu minun urotekoja myymälävarkauksia. Olla
ennakolta, tämä messuilla pääse pakoon unplundered. "

Tämä puhe häiriintynyt vartija suuresti, koska siellä oli miljoonia
dollaria atk-laitteiden sisällä, joten hän katseli miehen huolellisesti. Mutta
mies vain vaelteli kielittäin, hyräillen hiljaa itsekseen.

Kun mies lähti, vartija vei hänet syrjään ja tutkivat hänen vaatteensa, mutta
mitään ei löytynyt.

Seuraavana päivänä messut, mies palasi ja läksytti vartija
sanoen: "Minä pakeni suuri booty eilen, mutta tänään on vielä
paremmin. "Niin vartija katseli häntä yhä tiiviimmin, mutta turhaan.

Viimeisenä päivänä messut, vartija voisi hillitä uteliaisuuttaan
ei enää. "Sir Thief", hän sanoi, "Olen niin hämmentynyt, en voi elää
rauha. Ole hyvä valaista minua. Mikä on se että olet varastaa? "

Mies hymyili. "Olen varastaminen ideoita", hän sanoi.

3,2

Olipa kerran mestari ohjelmoija joka kirjoitti jäsentymätön ohjelmia.
noviisi ohjelmoija, etsien matkia häntä, alkoi myös kirjoittaa
jäsentymätön ohjelmia. Kun noviisi pyysi päällikköä arvioida hänen
edistystä, mestari arvosteli tätä kirjoittamista jäsentelemätöntä ohjelmia
sanoen: "Mikä on sopiva isäntä ei sovellu
noviisi. Sinun täytyy ymmärtää Tao ennen ylittävä rakenne. "

3,3

Oli kerran ohjelmoija, joka oli kiinnitetty tuomioistuimen sotapäällikkö
Wu. Sotapäällikkö kysyi ohjelmoija: "Kumpi on helpompi suunnitella:
kirjanpitopakettiin tai käyttöjärjestelmä? "

"Käyttöjärjestelmä", vastasi ohjelmoija.

Sotapäällikkö lausuttu huudahdus epäuskon. "Varmasti kirjanpito
paketti on triviaalia vieressä monimutkaisuus käyttöjärjestelmän ", hän
sanoi.

"Ei niin", sanoi ohjelmoija "suunnitellessaan kirjanpito paketti,
ohjelmoija toimii välittäjänä ihmisten välillä, joilla on eri
ideoita: miten on toimittava, miten sen raporteissa on oltava, ja kuinka se on
mukaisia ​​verolainsäädännön. Sen sijaan, käyttöjärjestelmä ei rajoitu
ulkopuolisia esiintymisiä. Suunniteltaessa käyttöjärjestelmä, ohjelmoija
pyrkii yksinkertaisin harmonia koneen ja ideoita. Tämän vuoksi
Käyttöjärjestelmä on helpompaa suunnitella. "

Sotapäällikkö Wu nyökkäsi ja hymyili. "Se on kaikki hyvin ja hyvin, mutta
joka on helpompi debugata? "

Ohjelmoija ei vastannut.

3,4

Johtaja meni master ohjelmoija ja näytti hänelle vaatimukset
asiakirjan uusi sovellus. Johtaja kysyi päällikkö: "Kuinka kauan
se aikoo suunnitella tätä järjestelmää, jos antaa viisi ohjelmoijia sitä? "

"Se kestää vuoden," sanoi Mestari nopeasti.

"Mutta me tarvitsemme tätä järjestelmää heti tai jopa nopeammin! Kuinka kauan se
ottaa jos liittää kymmenen ohjelmoijia sitä? "

Mestari ohjelmoija rypisti otsaansa. "Siinä tapauksessa, se kestää kaksi vuotta."

"Entä jos minä antaa sata ohjelmoijia sitä?"

Mestari ohjelmoija kohautti. "Sitten muotoilu koskaan
suoritettu, "hän sanoi.

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

Kirja 4 - Coding

Näin puhui päällikkö ohjelmoija:

"Hyvin kirjoitettu ohjelma on oma taivas, huonosti kirjoitettu ohjelma
oma helvetti. "

4,1

Ohjelman tulisi olla kevyt ja ketterä, sen aliohjelmat kytketty kuten
helminauha. Henki ja tarkoitus ohjelmaa olisi säilytettävä
läpi. Ei saa olla liian vähän tai liian paljon, ettei
Sanomattakin silmukat eikä turhia muuttujia, ei ole rakenteen kuin
suuri jäykkyys.

Ohjelma tulisi noudattaa jäljempänä laki vähiten hämmästystä ". Mikä on tämä laki?
Se on yksinkertaisesti, että ohjelman tulisi aina vastata käyttäjän tavalla
että hämmästyttää häntä vähiten.

Ohjelma, riippumatta siitä, miten monimutkainen, tulisi toimia yhtenä yksikkönä. Ohjelma
tulisi ohjata logiikkaa eikä ulospäin esiintymisiä.

Jos ohjelmassa on nämä vaatimukset, sillä tulee olla tila
epäjärjestystä ja sekaannusta. Ainoa tapa korjata tämä on kirjoittaa
ohjelmaa.

4,2

Noviisi kysyi päällikkö: "Minulla on ohjelma, joka joskus toimii ja
joskus painallus keskeyttää. Olen seurannut sääntöjä ohjelmoinnin, mutta olen
täysin ymmällään. Mikä on syynä? "

Mestari vastasi: "Olet hämmentynyt, sillä et ymmärrä Tao.
Vain typerys odottaa järkevää käyttäytymistä hänen lähimmäisiä. Miksi te
odottaa se kone, ihmiset ovat rakentaneet? Tietokoneet simuloida
determinismi, vain Tao on täydellinen.

"Säännöt ohjelmointi ovat ohimeneviä, vain Tao on ikuinen. Siksi
sinun täytyy miettiä Tao ennen kuin saat valaistumisen. "

"Mutta miten tiedän, kun olen saanut valaistumisen?" Kysyi
noviisi.

"Teidän ohjelma sitten suorittaa oikein", vastasi mestari.

4,3

Päällikkö selitti luonnetta Tao on yksi hänen aloittelijat. "
Tao on kirjattu kaikki ohjelmat - riippumatta siitä, kuinka merkityksetön ", sanoi
master.

"Onko Tao on kädessä pidettävä laskin?" Kysyi noviisi.

"On", kuului vastaus.

"Onko Tao on videopeli?" Jatkoi noviisi.

"Se on jopa videopeli", sanoi päällikkö.

"Ja on Tao on DOS ja tietokoneella?"

Master yski ja siirsi kanta hieman. "Oppitunti on ohi
tänään ", hän sanoi.

4,4

Prince Wangin ohjelmoija oli koodaus ohjelmisto. Hänen sormensa tanssivat heti
näppäimistö. Ohjelma on käännetty ilman virheilmoitusta, ja ohjelma
juoksi kuin lempeä tuuli.

"Excellent!" Prince huudahti, "Sinun tekniikka on virheetön!"

"Tekniikka?" Sanoi ohjelmoija kääntää hänen terminaalista "Mitä minä
noudattaa on Tao - arvaamattomaan tekniikat! Kun aloitin ohjelmoinnin I
näkisi edessäni koko ongelma yhden massan. Kolmen vuoden kuluttua en mitään
enää nähnyt tätä massaa. Sen sijaan käytin aliohjelmia. Mutta nyt en näe mitään.
Minun koko olento olemassa muodoton mitätön. Omat aistit ovat lepotilassa. Oma henki-
vapaasti työskennellä ilman suunnitelmaa, seuraa omaa vaistoa. Lyhyesti sanottuna, minun ohjelma
kirjoittaa itse. Totta, joskus on vaikeita ongelmia. Näen heidät
tulossa, en hidastaa, katson hiljaa. Sitten vaihtaa riviäkään koodia
ja ongelmat katoavat kuin haikuja tyhjäkäynnillä savua. Sitten koota
ohjelmaa. Istun hiljaa ja anna ilon työstä täyttää olemukseeni. Suljen
silmäni hetkeksi ja sitten kirjautua ulos. "

Prince Wang sanoi: "Haluaisitko, että kaikki omat ohjelmoijat olivat viisas!"

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

Kirja 5 - Huolto

Näin puhui päällikkö ohjelmoija:

"Vaikka ohjelman olla, mutta kolme riviä, joskus sen on oltava
yllä. "

5,1

Hyvin käytetty ovi ei tarvitse öljyä sen saranat.
Nopeasti virtaava virta ei kasva pysähtynyt.
Ei ääntä eikä ajatuksia voi kulkea tyhjiössä.
Ohjelmisto mätänee jos ei käytetä.

Nämä ovat suuria mysteereitä.

5,2

Johtaja kysyi ohjelmoija kuinka kauan kestäisi hänet loppuun
ohjelma jossa hän työskenteli. "Se on valmis huomenna"
ohjelmoija heti vastasi.

"Luulen, ollaan epärealistinen", sanoi johtaja, "totuudenmukaisesti, miten
kauan se kestää? "

Ohjelmoija mietti hetken. "Minulla on joitakin ominaisuuksia, joita haluan
lisää. Tämä kestää vähintään kaksi viikkoa ", hän sanoi lopulta.

"Sekin on liikaa odottaa", painotti johtaja, "Minä olen
tyytyväisiä, jos vain tietää, milloin ohjelma on valmis. "

Ohjelmoija suostui tähän.

Useita vuosia myöhemmin, johtaja jäi eläkkeelle. Matkalla eläkkeelle
lounas, hän löysi ohjelmoija nukkuu hänen terminaaliin. Hän oli ollut
ohjelmoinnin koko yön.

5,3

Noviisi ohjelmoija oli kerran määrätty koodata yksinkertaisen rahoituspaketti.

Noviisi työskenteli kuumeisesti monta päivää, mutta kun hänen isäntänsä uudelleen
hänen ohjelmaansa, hän huomasi, että se sisälsi näytön editori, joukko
yleistynyt grafiikka rutiinit, tekoäly rajapinta, mutta
ei pienintäkään mainintaa mitään taloudellisia.

Kun isäntä kysyi tästä, noviisi tuli närkästynyt. "Älä
niin kärsimätön ", hän sanoi," laitan rahoitusmarkkinoiden kamaa lopulta. "

5,4

Onko hyvä maanviljelijä laiminlyö sadon hän on istuttanut?
Onko hyvä opettaja jättää jopa kaikkein nöyrä opiskelija?
Onko hyvä isä antaa yksi lapsi nälkään?
Onko hyvä ohjelmoija kieltäytyä ylläpitää hänen koodia?

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

Kirja 6 - Management

Näin puhui päällikkö ohjelmoija:

"Olkoon ohjelmoijat ovat monet ja johtajat muutamat - silloin kaikki on
tuottavampia. "

6,1

Kun johtajat pitää loputtomia kokouksia, ohjelmoijat kirjoittavat peleistä. Milloin
kirjanpitäjät puhua neljännesvuosittain voittojen kehitys budjetti ollaan
leikata. Kun vanhempi tutkijat puhuvat sininen taivas, pilvet ovat noin roll
sisään

Todellakin, se ei ole Taon Ohjelmoinnin.

Kun johtoa tekemään sitoumuksia, peli-ohitetaan. Milloin
kirjanpitäjät tehdä pitkän tähtäimen suunnitelmia, harmonia ja jotta ollaan
palautettu. Kun vanhempi tutkijat ongelmiin käsillä,
ongelmia pian ratkaistu.

Totisesti, tämä on Tao of Programming.

6,2

Miksi ohjelmoijat ei-tuotannollisten?
Koska heidän aikaa hukkaan kokouksissa.

Miksi ohjelmoijat kapinallinen?
Koska johto häiritsee liikaa.

Miksi ohjelmoijat eroava yksi kerrallaan?
Koska ne ovat palaneet.

Ottaa työskenteli huono hallinto, ne eivät enää arvoa työssään.

6,3

Johtaja oli juuri potkut, vaan ohjelmoija joka työskenteli hänen
keksi uusi ohjelma, joka tuli suosittu ja myi hyvin. Tämän seurauksena,
johtaja säilyttää työnsä.

Johtaja yritti antaa ohjelmoija bonus, mutta ohjelmoija
hylkäsi sen ja sanoi: "Minä kirjoitin ohjelmaa, koska luulin että se oli
mielenkiintoinen käsite, joten en odota mitään palkintoa. "

Johtaja kuullessaan tämän huomautti, "Tämä ohjelmoija, vaikka hänellä
asema pienten arvostusta, ymmärtää hyvin oikea velvollisuus
työntekijä. Olkaamme ylentää korkeassa asemassa johdon
konsultti! "

Mutta kun kertoi tämän, ohjelmoija kerran kieltäytyi sanoen: "Minä on olemassa niin
että voin ohjelmoida. Jos ylennettiin, tekisin vain jätteiden
kaikkien aikaa. Voinko mennä nyt? Minulla on ohjelma, teen työtä. "

6,4

Johtaja meni ohjelmoijille ja sanoi heille: "Mitä työhösi
h: olet menossa on tulla yhdeksältä aamulla ja jättää
viideltä iltapäivällä. "Tässä, kaikki heistä suuttui ja useita
erosi paikan päällä.

Joten johtaja sanoi: "No, siinä tapauksessa voi asettaa oman
työajasta, kunhan lopetat projektit pysyvät aikataulussa. "
ohjelmoijia, nyt tyytyväisiä, alkoi tulla keskipäivällä ja työtä wee
aamuun.

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

Book 7 - Corporate Wisdom

Näin puhui päällikkö ohjelmoija:

"Voit osoittaa ohjelman johtoryhmän, mutta et voi
hänet tietokonetaitoinen. "

7,1

Noviisi kysyi päällikkö: "Idässä on suuri puu-rakenne
että ihmiset kutsuvat `Yrityksen pääkonttori". Se on paisunut ulos muodon
varapuheenjohtajat ja kirjanpitäjät. Se antaa lukuisia muistioita, kukin
sanoen `Go, siis!" tai 'Mene, tänne! " eikä kukaan tiedä mitä. Kaikki
Vuoden uudet nimet laittaa päälle oksia, mutta kaikki turhaan. Miten
niin luonnoton kokonaisuus on? "

Mestari vastasi: "Et näe tätä suunnatonta rakennetta ja ovat
häiriintynyt, että sillä ei ole järkevää tarkoitukseen. Voitko ota huvi alkaen
sen loputon kaarteet? Ettekö nauti pääosin selkeänä helppo ohjelmointi
alta suojelee oksat? Miksi vaivautunut sen
hyödyttömyys? "

7,2

Idässä on hai, joka on suurempi kuin kaikki muut kalaa. It
changes into a bird whose wings are like clouds filling the sky. When this
bird moves across the land, it brings a message from Corporate
Headquarters. This message it drops into the midst of the programmers,
like a seagull making its mark upon the beach. Then the bird mounts on the
wind and, with the blue sky at its back, returns home.

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

7.3

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

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

The master raised his eyebrows slightly. “It is indeed amazing,” he
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. Ei
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. 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

Hieman kuoren uudelleenohjaus

May 10, 2009 by prashant · Comments
Filed under: tekniikka

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

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

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

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

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

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

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

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

Sony VAIO review

April 29, 2009 by prashant · Comments
Filed under: reviews

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

Post has two parts -

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

I. Review of hardware

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

Why you may not like to buy this laptop :

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

Now , why you may like to buy it :

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

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

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

Things which worked without any problem:

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

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

What doesn't work -

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

Few more misc hints for deiban:

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

oneliner for increasing and decreasing the brightness -

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

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

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

[enlightenment key bindidings]

You can use following key code and mapping

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

Seuraava sivu »