meningsmåling, ping, pubsub, pubsubhub, pubsubhubbub

September 6, 2009 ved Prashant · Kommentarer
Filed under: teknologi

Hvis du er skeptisk, er der en metode i galskaben ovenfor, i titlen på posten. I tech kredse er det usandsynligt, at du ikke har hørt om pubsubhubbub. I hurtige par måneder, har det været en af ​​de øverste tre talte om tingene. To andre er homomorf kryptering og Google bølge [ 1. ]. Kommer tilbage til aktuel post - udtryk i titlen angiver, hvordan du får indholdet fra andre mennesker. Følgende oplysninger bliver mere tydeligt, hvis du forestille dig ting, der sker med hensyn til blogs, selvom de begrebsmæssigt ikke begrænses til blogs.

Polling refererer til den situation, hvor kunderne med at spørge serveren, hvis noget nyt er kommet op. Hvor ofte at bede om opdateringer vil altid være et problem med polling for hyppig eller for sjældne, men som en læser påpegede her, at en stor, ting med polling er, at serveren ikke behøver at vedligeholde tilstand.

Ping refererer til det tilfælde, hvor når skrive en artikel, du (eller din software) også opdateringer af nogle populære (central) opdateringstjenester. Nogle baggrunden her .

Næste er pubsub, der står for offentliggørelse / tegne, en af de tidligste banen for det blev gjort her ved Evan Henshaw-Plath og Kellan Elliott-McCrea (72 slides, men værd at gå igennem). Overbevisende eksempel gav de imod var det - på en bestemt dato, kravlede Flickr 2,9 millioner gange for at få de nyeste billeder af 45,754 brugere, hvoraf 6.721 havde besøgt Flickr i de 24 timer, og kunne have 'potentielt' uploadet et billede FriendFeed. Bemærk, at det, de foreslog, var ikke en ny teknologi, som påpeger de "revolutionerende ny 20 år gammel teknologi". Hvis du gør det for blogs, så en af ​​de store problemer med XMPP - tilstedeværelse data overhead, som kan være så høj som 60-70% kan reduceres meget.

pubsubhub står for offentliggøre subscribe hub og pubsubhubbub er en protokol, i hvilken kernen er ideen om pubsubhub. Hvor forlag (siger bloggere) opdatere hub, der (kan være mere end én nav, som taler til hinanden) ligger "et sted i skyen", som per protokol dette kan skubbe eller trække, som pr protokollen, men det næste link i kæde, hub til klient (sige læsere) er det altid skubbe model. Denne side er godt udgangspunkt for pubsubhubbub, oversigt dias er gode. Lige veltalende Anil Dash beskriver det her som trykknap web.
To andre hits er webhooks som er dybest set http tilbagekald. GitHub bruger det, så gør paypal for asynkrone meddelelser om betaling i IPN- . så gør mange andre. Relateret koncept rsscloud som igen pubsub navet. Følg dette link for yderligere oplysninger.

Du kan være undrende hvad er pointen med at skrive alle disse her, der er to 1. Disse ting er værd at vide, minimalt mindst og 2. Denne blog er pubsubhubbub aktiveres nu via appspot hub ved hjælp af denne WordPress plugin og foder er også pubsubhubbub aktiveret via FeedBurner, link her
-
[ 1 ]. - God indledning læse for fuldt homomorf kryptering, er denne artikel af Bruce Schneier, og dette snak er mere eller mindre eneste kilde til Google Wave.

-UPDATE - Dette indlæg forklarer, hvordan kravet om offentlig server callback kan arbejdes rundt til stationære klienter ved hjælp af XMPP gateway (for pubsubhubbub).

En smule samling

August 29, 2009 ved Prashant · Kommentarer
Filed under: teknologi

Efter at have læst denne artikel om lock gratis buffere og se brugen af CAS (sammenlign og bytte), følte jeg at udgive en samling kode til at gøre det samme. Brug sag, der var at skrive en indfødt metode og kalder den fra Java (tilbage i 1,5, når samtidige datastrukturer i Java var mere eller mindre ikke eksisterende). Uden videre, vil jeg frigøre koden på dig :) . Først er for CAS, og andet er for computing GCD bruge Euklids algoritme (denne kan findes mange steder og selvstudier såvel).

Kompiler og kør instruktioner gcc file_name.c ; ./a.out

Sammenlign og Swap

   # Include 
  # Include 
 / / Ombytning - newvalue, comperand er gammel / forventet værdi
 / *
  * Funktion faktisk gør følgende ting - hvis den værdi * dest er lig med oldvalue derefter erstatte det med newvalue ellers lade det være uændret: ikke alle disse atomically
  *
  * Der er to muligheder for returværdi
  * 1.is oprindelige værdi af * dest og overlade den byrde at kalde fxn at sammenligne det med oldval
  * 2.  gøre det her over og returnere 0 eller 1, bør dette være mere effektive
  ** /

 / * Senere ændre det til 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 resultat = 1 ;/ * 1 viser, at CAS lykkedes og 0 viser, at det mislykkede * /
	 / * Btw nødt til at indstille cc for flag 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" / * skal låsen på samme linje * /
			 "Jz FÆRDIG \ n \ t"
			 "Movl $ 0,% 1 \ n \ t"
			 "FÆRDIG: \ n \ t"
			 : "= M" (DEST), "= g" (resultat)
			 : "G" (oldvalue), "g" (newvalue), "m" (DEST)
			 : "% Eax", "% EBX", "ECx", "cc"
			 );
	 printf ("(% d,% d,% d)", * dest, oldvalue, newvalue);
	 tilbage resultat;
 }

 / * TODO
  * Skrive en anden asm fxn, der sætter over fxn i en while-løkke og holde prøver, medmindre det lykkes * /

 int main () {
	 int a = 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, a));
	 printf ("% d \ n", CAS (c, a, a));
	 printf ("% d \ n", CAS (c, b, b));
	 * C = 6;
	 / * C = 5 * /
	 printf ("at ændre værdien af ​​* C til% d \ n", * c);
	 printf ("% d \ n", CAS (c, b, b));
	 printf ("% d \ n", CAS (c, b, a));
	 printf ("% d \ n", CAS (c, a, a));
	 printf ("% d \ n", CAS (c, a, b));
	 printf ("% d \ n", CAS (c, b, a));
	 return 0;
 }

Formatering noter - synes ligesom WP syntaks highlighter tilføjer i sidste ende, ignorere det.

GCD

 # Include 
 int gcd (int a, int b) {
     int resultat;
     / * Compute største fælles divisor med Euklids algoritme * /
     __asm__ __ volatile__ ("movl% 1,%% EAX;"
                           "Movl% 2%% EBX"
                           "CONTD: cmpl $ 0,%% EBX;"
                           "Je FÆRDIG;"
                           "Xorl%% EDX,%% EDX"
                           "Idivl%% EBX"
                           "Movl%% EBX,%% EAX"
                           "Movl%% EDX,%% EBX"
                           "Jmp CONTD;"
                           "FÆRDIG: movl%% eax,% 0": "= g" (resultat): "g" (a), "g" (b)
     );

     tilbage resultat;
 }

 int main () {
     int første, andet;
     printf ("Indtast to heltal:");
     scanf ("% d% d", og første, og anden);

     printf ("GCD af% d &% d er% d \ n", første, andet, GCD (første, andet));

     return 0;
 }

Cricketing verden venter en ny verdensorden

August 25, 2009 ved Prashant · Kommentarer
Filed under: misc

Efter en serie spænder over fem test, og cirka to måneder, England inddæmmede aske.

Lad os tale om det vindende hold først - deres midt for er 'gennemsnitlig', hvis du ikke ønsker at kritisk. Greame Swann bidrag med battet tæller intet mindre end bidraget med bolden. Stuart Broad - bedste all rounder var ikke starteren for 5. test. Andrew Strauss var den eneste konsekvent gærdespiller og Jimmy Anderson var den eneste konsekvent bowler.

Pointen her er ikke at skælde resultaterne af det vindende hold, men at sætte i perspektiv, at på trods af alle disse, Australien tabt. du nødt til at tænke i nogle få sekunder, hvis bedt om at navngive deres bedste bowler. Højre, var det BW Hilfenhaus. Hauritz udkonkurrerede Everbody forventning, men var stadig ikke godt nok til at blive valgt for to af de fem tests. Sydafrika blev aldrig en verden tæppebanker uden verdensklasse spinner, kan Australien ikke håbe på at forblive en uden en god nok en mindst. Magician forlod scenen, og det ligner ikke kunst længere, glemmer magi. Ponting står højt blandt mindre dødelige, og Michael Clarke står op meget ofte, men det gør dem til et team med nogle meget gode spillere, og ikke et meget godt hold.
Ashes 2009 vil blive husket for Andrew Flintoff sidste aske, Stuart Broad ankomst som en all rounder (hvis han tilføjer noget mere Aske folklore til sin lovende start), og en af ​​de mest sigende debut århundredes hele tiden ved at Trott, men det vil også være husket som det punkt, hvor IFS og men'er omkring Australiens overherredømme blev endeligt lagt til hvile, er det forbi. Må ikke få mig forkert, de kan stadig grave Mike Hussey og Stuart Clark, men du føler bidrag fra alle tidspunkter greats, når de forsvinder. Nogle gange kommer de til at minde sig selv i IPL, men alligevel kan de ikke erstattes. Lad os føler velsignet for at have set Warne, McGrath og Gilchrist spille sammen og understøttes af Waughs, Ponting, Hyden, Martin og Langer.

Fremadrettet vil Sydafrika altid være et meget godt hold, men de har brug for at vinde semifinalen og være mere konsekvente over hele kloden, vil Pakistan forbliver gådefuldt strålende, vil indiske unge kanoner nok finde det svært at fylde skoene af ekstraordinære forgængere. Sri Lanka bør fortsætte med at vise glimt af kunst i håndværk. Men, kan vi nødt til at vente til engang, før de har en all out dominerende team eller før en kaptajn har klaget over manglende konkurrence, som Steve Waugh gjorde engang.

På et beslægtet note - lad os velkommen til at komme tilbage i Asif, han har en helvedes masse potentiale, lad os håber at se noget af det, og også velkommen Andy Flower i den nye awatar, højre kan du ikke holde gode mænd ned for længe.

rubin en foringer til at skabe hash

August 20, 2009 ved Prashant · Kommentarer
Filed under: teknologi

Går samtidig går gennem en af ​​mine gamle programmer, jeg fandt denne skrevet af mig engang tilbage:

#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

At dræbe nogle af suspense lad mig afsløre, at raw_text ligner

 

, Til højre den er blevet skåret fra paypal payment anerkendelse.

Over linje, hvis brudt i dele lyder bedre:

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

Lad os gøre de enkelte trin i IRB:

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

 => ["Succes", "mc_gross = 10,00", "protection_eligibility = Ikke-godkendt", "payer_id = U7PPJJ4TSJ47E", "skat = 0,00", "payment_date = 09:45:30 Jul 10, 2009 PDT", "payment_status = Afventer "]                                                                         

 IRB (hoved): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nul), hvis b.size == 1 b}  

 => [["Succes", nil], ["mc_gross", "10,00"], ["protection_eligibility", "Ikke-godkendt"], ["payer_id", "U7PPJJ4TSJ47E"], ["skat", "0,00"] , ["payment_date", "09:45:30 Jul 10, 2009 PDT"], ["payment_status", "Afventer"]]                               

 IRB (hoved): 014:0> flattened_array = unescaped_array.flatten     

 => ["Succes", nul, "mc_gross", "10,00", "protection_eligibility", "Ikke-godkendt", "payer_id", "U7PPJJ4TSJ47E", "skat", "0,00", "payment_date", "09:45: 30 Jul 10, 2009 PDT "," payment_status "," Afventer "]
 IRB (hoved): 015:0>
 hash = Hash [* flattened_array]
 => {"Skat" => "0,00", "payment_status" => "Afventer", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "succes" => nul, "payment_date" = > "09:45:30 Jul 10, 2009 PDT", "protection_eligibility" => "Ikke-godkendt"} 

BTW, er * kaldes splat operatør i Ruby

En anden måde at skabe hash fra 'vifte af par' er at bruge injicere:

  hash = [[1,2], [3,4]] injicere ({}). {| resultat, element | resultat [element.first] = resultat [element.last]; resultat} 

Der er endnu en måde :) Skriv en løkke, som jeg vil overlade som en øvelse til læserne!

Her er en smule relateret use case for at skabe hash fra arrays:

  IRB (hoved): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.?  : Mindre :: større}

 => {: Mindre => [1, 2, 3, 4],: større => [7, 9]} 

Du kan gøre flere ting, dybest set resultatet af blokken bruges som nøglen til dette element i den resulterende hash.

gmail, mutt og msmtp fix

August 17, 2009 ved Prashant · Kommentarer
Filed under: teknologi

Hvis du bruger mutt og smtp at få adgang til Gmail. Her er en (dårlig) nyheder. Seje fyre på Google igen ændret certifikat. Åh, har du spørge - hvordan det ved det? Enkel mutt begyndt at klage over dårlig certifikat, når de forsøger at bruge msmpt, berygtede 'msmtp: TLS-certifikat mislykkedes:. Certifikatet har ikke fået en kendt udsteder " hilste mig på skærmen.

At krydse bekræfte -
Bare køre efter

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

I stedet for den gamle Thwate Server Nu får du følger i udsteder segment
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Heldigvis fix er enkel, her er hvad du skal gøre på debian

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

Efter dette bare ændre følgende linje i din ~ for /. 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

til

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

Git og Awesome Survey

August 15, 2009 ved Prashant · Kommentarer
Filed under: misc

Her er to links til undersøgelse foretaget af git (version control system) og awesome (window manager) samfund. Hvis du bruger en af ​​disse, bedes du tage dig tid til at udfylde spørgeskemaet. Tænk på det som den enkleste måde at bidrage tilbage til den software, du bruger.
Her er links:

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

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

Note - (Som findes på disse sider, men i bunden :) ) -
"Hvis du har cookies aktiveret, kan du altid indsende delvist fyldt undersøgelse, og vende tilbage til dine svar på et senere tidspunkt, udfylde det senere."

Fusionerende hashes i YAML conf filer

31 Juli 2009 ved Prashant · Kommentarer
Filed under: teknologi

YAML er ganske praktisk til at skrive konfigurationsfiler. Primære fordel er, at den læser som tekstfil. Det fungerer rigtig godt, hvis din config fil er flad (ingen hierarki) og har ingen gentagelser.
Hvis din konfigurationer filen har gentagelser så giver det mening at udskille disse elementer og genbruge dem. Hvad jeg mener er dette - lad os sige, at du din config fil ser sådan her ud:

  udvikling:
   input_location: common_input
   output_location: dev_location
   mail:
     smtp_server: din_server
     login: your_login
     Password: top_secret
 produktion:
   input_location: common_input
   output_location: dev_location
   mail:
     smtp_server: din_server
     login: your_login
     Password: top_secret 

Forudsat ovenstående kode i / tmp / test.yml her er, hvordan kan du læse i Python og Ruby
$cat readyml.py

 #! / Usr / bin / env python
 fra pprint indførsel pprint som pp
 # I debian nødt til at installere python-YAML
 fra YAML import belastning, load_all, dump
 hash = belastning (åben ('/ tmp / test.yml'))
 pp (hash ['udvikling']) 


$ cat readyml.rb

  #! / Usr / bin / env rubin
 kræver 'PP'
 hash = YAML :: belastning (File.open ('/ tmp / test.yml). læst)
 pp hash ['udvikling'] 

her er en handy en liner for Ruby-version
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' , eller du kan prøve det samme i IRB eller Python konsol.

Bemærk, at i ovenstående kodestykke, er alt andet end output placering er den samme i udvikling og produktion del. Det er her yml node id kommer til at redde. Ideen er enkel have et sæt standardværdier og tilsidesætter dem på andet sted.
Du kan trække det ud som følger:

  standarder: og standarder
   input_location: common_input
   output_location: dev_location
   mail:
     SENDER_NAMEs: afsender
     smtp_server: din_server
     login: your_login
     Password: top_secret
 udvikling:
   <<: * Standard
 produktion:
   <<: * Standard
   output_location: prod_location 


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

Great, det virker (tm)!.
Formentlig har vi handlet lidt mere klarhed for lidt magi. Her er en lille forklaring: &, * og <<: & der er ankerkode kan forstås som node identifikator, * er node reference og <<: står for hash merge.

For flere detaljer se enten YAML specs eller wikipedia
Så langt så godt, men der er en fangst her, disse hash fusionerer ikke rekursiv. Hvad det betyder er dette: Lad os sige du vil have forskellige afsenderens navn for e-mail i to miljøer, kan du blive fristet til at gøre følgende:

  standarder: og standarder
   input_location: common_input
   output_location: dev_location
   mail:
     SENDER_NAMEs: afsender
     smtp_server: din_server
     login: your_login
     Password: top_secret
 udvikling:
   <<: * Standard
   mail:
     SENDER_NAMEs: sender_dev
 produktion:
   <<: * Standard
   output_location: prod_location
   mail:
     SENDER_NAMEs: sender_prod 

Lad os kontrollere

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

Ups, noget gik galt, problem, som nævnt ovenfor er, at hash fletningen ikke er rekursiv, og samtidig lægge det erstattet post af misligholdelse af post produktion, som kun har en nøgle. Løsning / arbejde omkring at oprulle en mere niveau:

  common_settings: & common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: & mail_defaults
  SENDER_NAMEs: afsender
   smtp_server: din_server
   login: your_login
   Password: top_secret

 standarder: og standarder
   <<: * Common_settings
   mail:
     <<: * Mail_defaults
 udvikling:
   <<: * Standard
 produktion:
   <<: * Standard
   mail:
     <<: * Mail_defaults
     SENDER_NAMEs: sender_prod

Lad os se igen

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

Sagde du du har en større niveau af nesting, godt du kan helt sikkert oprulle en mere lige, men så bliver det noget rod. Så, hvis du ikke forsøger at skrive løsning tårne ​​i Hanoi i en conf-fil, er det bedre at restucture conf fil end at grave i YAML eller noget andet. Men det er dit opkald alligevel.

Store programmører finde enkle løsninger på komplekse problemer

30 Juni 2009 ved Prashant · Kommentarer
Filed under: misc

Efter en lang tid jeg kunne finde kilden til følgende citat,

Junior programmører at skabe enkle løsninger på enkle problemer. Senior programmører skaber komplekse løsninger på komplekse problemer. Store programmører finde enkle løsninger på komplekse problemer.

Det er fra et essay kaldet Smuk Software af Charles Connell.

En anden favorit af mine er Zen af Python -

Smuk er bedre end grim.
Eksplicit er bedre end implicit.
Simple er bedre end kompleks.
Complex er bedre end kompliceret.
Flat er bedre end indlejret.
Sparse er bedre end tæt.
Læsbarhed tæller.
Særlige tilfælde er ikke specielle nok til at bryde reglerne.
Selv praktiske slår renhed.
Fejl bør aldrig gå lydløst.
Medmindre det udtrykkeligt er tavshed.
I lyset af tvetydighed, nægte fristelsen til at gætte.
Der bør være en, og fortrinsvis kun en indlysende måde at gøre det.
Selv om denne måde ikke kan være indlysende ved første medmindre du er hollandsk.
Nu er bedre end aldrig.
Selvom aldrig er ofte bedre end * lige * nu.
Hvis implementeringen er svært at forklare, det er en dårlig idé.
Hvis implementeringen er let at forklare, kan det være en god idé.
Namespaces er en dytter rigtig god idé - lad os gøre flere af dem!
-------------------------
og så er der klassisk Tao for programmering

-

kreditter, som på den linkede site-

Oversat af Geoffrey James

Transskriberet af Duke Hillard

Overføres af Anupam Trivedi, Sajitha Tampi, og Meghshyam Jagannath

Re-html-ized og redigeret af Kragen Sittler

-

Book 1 - The Silent Void

Således talte skibsføreren programmør:

»Når du har lært at snuppe fejlkoden fra fælden rammen, det
vil være tid for dig at forlade. "

1,1

Noget mystisk er dannet, født i det tavse tomrum. Waiting alene og
ubevægelig, det er på en gang stille og alligevel i konstant bevægelse. Det er kilden
af alle programmer. Jeg kender ikke dens navn, så jeg vil kalde det Tao
Programmering.

Hvis Tao er stor, så operativsystemet er stor. Hvis driftstiden
systemet er stor, så compileren er stor. Hvis compileren er stor,
så ansøgningen er stor. Brugeren er glad og der findes
harmoni i verden.

Den Tao Programmering flyder langt væk, og afkast på vind morgen.

1,2

Tao fødte maskine sprog. Machine sprog fødte
assembler.

Den assembler fødte compileren. Nu er der 10.000
sprog.

Hvert sprog har sit formål, men ydmyg. Hvert sprog udtrykker
Yin og Yang af software. Hvert sprog har sin plads i Tao.

Men du behøver ikke programmerer i COBOL, hvis du kan undgå det.

1,3

I begyndelsen var Tao. Tao fødte rum og tid.
Derfor er rum og tid er Yin og Yang programmering.

Programmører, der ikke forstår Tao er altid løbe tør for tid
og plads til deres programmer. Programmører at forstå Tao altid
har nok tid og plads til at opnå deres mål.

Hvordan kunne det være anderledes?

1,4

Den kloge Programmøren fortalte om Tao og følger den. Den gennemsnitlige
programmør er fortalt om Tao og søger efter det. Den tåbelige programmør
er fortalte om Tao og griner på det.

Hvis det ikke var for latter, ville der ikke være Tao.

De højeste lyde er hårdest at høre.
Fremadrettet er en måde at trække sig tilbage.
Fantastisk talent viser sig sent i livet.
Selv en perfekt program stadig bugs.

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

Bog 2 - de gamle mestre

Således talte skibsføreren programmør:

"Efter tre dage uden programmering, bliver livet meningsløst."

2,1

Programmørerne gamle var mystisk og dyb. Vi kan ikke begribe
deres tanker, så alt, hvad vi gør, er beskrive deres udseende.

Aware, som en ræv krydse vandet. Alert, som en generel på
slagmark. Kind, som en værtinde hilser sine gæster. Enkel, ligesom
uncarved blokke af træ. Uigennemsigtig, som sorte pools i mørke huler.

Hvem kan fortælle hemmeligheder i deres hjerter og sind?

Svaret findes kun i Tao.

2,2

Grand Master Turing drømte engang, at han var en maskine. Da han vågnede han
udbrød:

"Jeg ved ikke, om jeg turerings drømmer at jeg er en maskine, eller en
maskine, drømmer, at jeg turerings! "

2,3

En programmør fra et meget stort computer selskab gik til en software
konference og vendte derefter tilbage til at rapportere til sin chef og sagde: "Hvad slags
af programmører arbejder for andre virksomheder? De opførte sig dårligt og var
ligeglade med optrædener. Deres hår var langt og usoigneret og deres
tøj var rynket og gammel. De styrtede ned vores gæstfrihed suite, og de
gjort uhøflig lyde under min præsentation. "

Lederen sagde: "Jeg aldrig skulle have sendt dig til konferencen. De
programmører leve over den fysiske verden. De mener, livet absurd, en
utilsigtet tilfældighed. De kommer og går uden at vide begrænsninger.
Uden en pleje, lever de kun for deres programmer. Hvorfor skulle de gider
med sociale konventioner?

"De er i live inden for Tao."

2,4

En novice spurgte Master: "Her er en programmør, der aldrig designer,
dokumenter eller test sine programmer. Men alle, der kender ham, betragter ham som en af
de bedste programmører i verden. Hvorfor er dette? "

Mesteren svarer: "Det programmør har styr på Tao. Han er gået
Ud over behovet for design, han ikke bliver vred, når systemet
nedbrud, men accepterer universet uden bekymring. Han er gået ud over den
behov for dokumentation, han ikke længere bekymrer sig om alle andre ser sin kode.
Han er gået ud over behovet for test, og hver af hans programmer er perfekte
i sig selv, rolig og elegant, deres formål selvindlysende. Sandelig,
Han er gået ind i mysteriet om Tao. "

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

Book 3 - Design

Således talte skibsføreren programmør:

"Når programmet er ved at blive testet, er det for sent at lave nyt design
ændringer. "

3,1

Der var engang en mand, som gik til en computer messe. Hver dag, som han
ind, manden fortalte vagten ved døren:

"Jeg er en stor tyv, berømt for mine bedrifter af butikstyveri. Vær
advaret, skal for denne messe ikke undslippe unplundered. "

Denne tale forstyrret vagt i høj grad, fordi der var millioner af
dollars af edb-udstyr inde, så han så manden omhyggeligt. Men
manden alene vandrede fra bod til bod, nynnede stille for sig selv.

Da manden forlod, vagten tog ham til side og søgte hans tøj, men
intet var at finde.

På den næste dag af handelen viser, vendte manden og skældt ud af vagten
sige: "Jeg slap med et stort bytte i går, men i dag vil være endnu
bedre. "Så vagten betragtede ham stadig tættere, men til ingen nytte.

På den sidste dag i messen, kunne vagten begrænse sin nysgerrighed
længere. "Sir Thief," sagde han, "Jeg er så forvirret, kan jeg ikke leve i
fred. Venligst oplyse mig. Hvad er det, at du stjæle? "

Manden smilede. "Jeg stjæle ideer," sagde han.

3,2

Der var engang en mester programmør, der skrev ustrukturerede programmer. En
novice programmør, der søger at efterligne ham, begyndte også at skrive
ustrukturerede programmer. Når novice bad føreren at vurdere hans
fremskridt, master kritiserede ham for at skrive ustrukturerede programmer,
sige, "hvad der er passende for master er ikke egnet til at
novice. Du skal forstå Tao før overskridende struktur. "

3,3

Der var engang en programmør, der var knyttet til retten i krigsherren
af Wu. Det krigsherre spurgte programmør: "Hvilket er lettere at designe: en
regnskabs-pakke eller et operativsystem? "

"Et operativsystem," svarede programmøren.

Den krigsherre udtalte et udråbstegn på vantro. "Sandelig en regnskabsmæssig
pakke er trivielt siden kompleksiteten af ​​et operativsystem, "siger han
nævnte.

"Ikke det," sagde programmør, "når designe en regnskabsmæssig pakke,
programmøren fungerer som en mægler mellem mennesker med forskellige
ideer: hvordan det skal fungere, hvordan dens rapporter skal vises, og hvordan det skal
i overensstemmelse med skattelovgivningen. Derimod er et operativsystem ikke er begrænset
af eksterne optrædener. Ved udformningen af ​​et operativsystem, programmøren
søger den enkleste harmoni mellem maskine og ideer. Derfor er en
operativsystemet er lettere at designe. "

Den krigsherre af Wu nikkede og smilede. "Det er alt godt og vel, men
som er lettere at fejlrette? "

Programmøren gjorde ingen svar.

3,4

En leder gik til master programmør og viste ham de krav,
dokument for en ny ansøgning. Lederen spurgte mester: "Hvor længe
vil det tage at designe dette system, hvis jeg tildeler fem programmører til det? "

"Det vil tage et år," sagde manden hurtigt.

"Men vi har brug for dette system med det samme eller endnu hurtigere! Hvor lang tid tager det
tage, hvis jeg tildeler ti programmører til det? "

Føreren programmør rynkede panden. "I så fald vil det tage to år."

"Og hvad hvis jeg tildeler hundrede programmører til det?"

Føreren programmør trak på skuldrene. "Så design vil aldrig være
afsluttet, "sagde han.

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

Bog 4 - Kodning

Således talte skibsføreren programmør:

"En velskrevet programmet er dets egen himmel, en dårligt skrevet program er
sit eget helvede. "

4,1

Et program skal være let og adræt, dets underprogrammer forbundet som en
perlerække af perler. Den ånd og hensigten med programmet bør bevares
hele. Der bør være ikke for lidt eller for meget, hverken
unødvendige loops eller ubrugelige variabler, hverken mangel på struktur eller
overvældende stivhed.

Et program skal følge `loven af ​​Least Overraskelse". Hvad er denne lov?
Det er simpelthen, at programmet altid skal svare til brugeren på den måde
der forbløffer ham mindst.

Et program, uanset hvor kompleks, skal fungere som en enkelt enhed. Programmet
bør ledes af logik i stedet for ydre optrædener.

Hvis programmet ikke disse krav, vil det være i en tilstand af
uorden og forvirring. Den eneste måde at rette dette på er at omskrive
program.

4,2

En novice spurgte mester: "Jeg har et program, der engang kører og
gange afbryder. Jeg har fulgt reglerne for programmering, men jeg
helt forvirret. Hvad er årsagen til dette? "

Skibsføreren svarede: "Du er forvirret, fordi du ikke forstår Tao.
Kun en tåbe forventer rationel adfærd fra sine medmennesker. Hvorfor gør du
forvente det fra en maskine, som mennesker har bygget? Computere simulere
determinisme, kun Tao er perfekt.

"Reglerne for programmering er forbigående, kun Tao er evigt. Derfor er
skal du overveje Tao, før du får oplysning. "

"Men hvordan vil jeg vide, når jeg har modtaget oplysning?" Spurgte
novice.

"Dit program vil køre korrekt," svarede mester.

4,3

En master blev forklarer karakteren af ​​Tao til en af ​​sine novicer. "The
Tao er indeholdt i al software - uanset hvor ubetydelig, "sagde
skibsføreren.

"Er Tao i en håndholdt lommeregner?" Spurgte den uerfarne.

"Det er," lød svaret.

"Er Tao i et videospil?" Fortsatte den uerfarne.

"Det er selv i et videospil," sagde manden.

"Og er Tao i DOS for en personlig computer?"

Skibsføreren hostede og flyttede sin stilling en anelse. "Lektionen er slut
for i dag, "sagde han.

4,4

Prince Wangs programmeringsenhed blev kodende software. Hans fingre dansede på
tastatur. Programmet kompileret uden en fejlmeddelelse, og programmet
løb som en blid vind.

"Excellent!" Prinsen udbrød, "Din teknik er fejlfri!"

"Teknik?" Sagde programmør dreje fra sin terminal, "Hvad jeg
følge er Tao - ud over alle teknikker! Da jeg først begyndte at programmere jeg
ville se for mig hele problemet i en masse. Efter tre år har jeg ingen
længere så denne masse. I stedet brugte jeg underrutiner. Men nu kan jeg ikke se noget.
Hele mit væsen eksisterer i en uformelig tomrum. Mine sanser er i brug. Min ånd,
fri til at arbejde uden plan, følger sin egen instinkt. Kort sagt, mit program
skriver sig selv. True, nogle gange er der vanskelige problemer. Jeg ser dem
kommer, jeg sætter tempoet ned, jeg ser lydløst. Så jeg ændre en eneste linje kode
og de vanskeligheder borte ligesom pust i tomgang røg. Jeg så kompilere
program. Jeg sidder stille og lod glæden ved arbejdet fylder min væsen. Jeg lukker min
øjne for et øjeblik og derefter logge af. "

Prins Wang sagde: "Ville, at alle mine programmører var så klog!"

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

Book 5 - Vedligeholdelse

Således talte skibsføreren programmør:

"Selvom et program være, men tre linjer lang, vil det en dag være
opretholdes. "

5,1

Et godt brugt dør behøver ingen olie på sine hængsler.
En hurtig-flydende strøm vokser ikke stillestående.
Hverken lyd eller tanker kan bevæge sig gennem et vakuum.
Software rådner hvis den ikke anvendes.

Det er store mysterier.

5,2

En leder spurgte en programmør hvor lang tid det ville tage ham til at afslutte
program, hvor han arbejdede. "Det vil være færdig i morgen," den
programmør hurtigt svarede.

"Jeg tror, ​​du bliver urealistisk," sagde lederen, "sandheden, hvordan
lang tid tager det? "

Programmøren troede et øjeblik. "Jeg har nogle funktioner, som jeg ønsker at
tilføje. Det vil tage mindst to uger, "sagde han til sidst.

"Selv det er for meget at forvente," insisterede lederen, "Jeg vil være
opfyldt, hvis du bare fortælle mig, hvornår programmet er afsluttet. "

Programmøren indforstået med dette.

Adskillige år senere, lederen pensioneret. På vej til sin pensionering
frokost, opdagede han programmøren i søvn på hans terminal. Han havde været
programmering hele natten.

5,3

En novice programmør engang blev tildelt til at kode en simpel finansiel pakke.

Den uerfarne arbejdede voldsomt i mange dage, men da hans herre revideret
hans program, opdagede han, at det indeholdt en skærm editor, et sæt af
generaliseret grafik rutiner, en kunstig intelligens-interface, men
ikke den mindste omtale af noget økonomisk.

Når føreren spurgt om dette, den uerfarne blev forarget. "Vær ikke
så utålmodig, "sagde han," Jeg sætter i den finansielle ting til sidst. "

5,4

Er en god landmand forsømmer en afgrøde, han har plantet?
Er en god lærer overser selv den mest ydmyge studerende?
Er en god far give et enkelt barn til at sulte?
Er en god programmør nægte at bevare sin kode?

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

Book 6 - Management

Således talte skibsføreren programmør:

"Lad programmører være mange, og de ledere få - så alle vil være
produktive. "

6,1

Når ledere holder endeløse møder, programmører skriver spil. Hvornår
revisorer taler om kvartalsvise overskud, udvikling budgettet er ved at
skæres. Når seniorforskere taler blå himmel, skyerne er ved at rulle
i.

Sandelig, det er ikke Tao programmering.

Når ledere indgå forpligtelser, der er vildt programmer ignoreres. Hvornår
revisorer foretage langsigtede planer, harmoni og orden er ved at være
genoprettet. When senior scientists address the problems at hand, the
problems will soon be solved.

Truly, this is the Tao of Programming.

6.2

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

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

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

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

6.3

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

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

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

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

6.4

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

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

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

Book 7 – Corporate Wisdom

Thus spake the master programmer:

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

7.1

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

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

7.2

In the east there is a shark which is larger than all other fish. Det
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. Ingen
change in management can harm him. He will not be fired, even if the
project is cancelled. Hvorfor er dette? 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. Og
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
verden.

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

Software and Hardware, ashamed, returned to their homes.

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

Book 9 – Epilogue

Thus spake the master programmer:

“It is time for you to leave.”

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

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

A bit of shell redirection

May 10, 2009 by prashant · Kommentarer
Filed under: teknologi

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 · Kommentarer
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"

Næste side »