anketa, ping, pubsub, pubsubhub, pubsubhubbub
U slučaju da ste skeptični, postoji metoda u ludilu gore, u naslovu posta. U tech krugova malo je vjerojatno da niste čuli za pubsubhubbub. U brzim nekoliko mjeseci, to je bio jedan od prva tri je govorio o stvari. Ostala dva su homomorphic šifriranje i Google val [ 1. ]. Povratak na trenutnu post - odredbe u naslovu navesti kako ste se sadržaj od drugih ljudi. Nakon podaci postaju sve jasno, ako li zamisliti stvari događa s obzirom na blogovima, iako pojmovno nisu ograničeni na blogovima.
Prozivanje se odnosi na scenarij u kojem klijenti stalno postavljaju poslužitelj ako nešto novo je došao gore. Koliko često pitati za promjenama uvijek će biti problem s glasovanja previše često ili previše rijetko, ali kao jedan čitatelj istaknuo je ovdje da je jedna velika, stvar s glasovanja je da poslužitelj ne moraju održavati stanje.
Ping se odnosi na slučaju kada objaviti članak, vi (ili vaš softver) i aktualizira neke popularne (središnja) ažuriranje usluge. Neki pozadina ovdje .
Sljedeća je pubsub koja se zalaže za objavljivanje / pretplatite, jedan od najranijih terenu jer je napravio ovdje je Evan Henshaw-Plath i Kellan Elliott-McCrea (72 slajdovi ali vrijedi prolaze). Uvjerljiv primjer dali su protiv je to - na određeni datum, Friendfeed indeksirao Flickr 2,9 milijuna puta da biste dobili najnovije fotografije 45,754 korisnika, od čega 6.721 obišla Flickr u tih 24 sati, a mogao 'potencijalno' učitao fotografije. Imajte na umu da ono što predlaže nije nova tehnologija, kao što ističu revolucionarnom novu tehnologiju 20 godina '. Ako ste to učiniti za blogove, tada jedan od glavnih problema s XMPP - Prisustvo podataka iznad glave, koja može biti kao visok kao 60-70% može smanjiti puno.
pubsubhub zalaže za Jeziki čvorišta i pubsubhubbub je protokol, jezgra koja je ideja pubsubhub. Unutar kojih izdavači (recimo blogere) ažurirati hub koji (može biti više od jednog koncentratore, koji razgovaraju jedni s drugima) živi "negdje u oblaku", kao i po protokolu to može gurnuti ili povući po protokolu, ali pored vode u lanac, čvorište za klijenta (recimo čitatelje) uvijek je gurati model. Ova stranica je dobra polazna točka za pubsubhubbub, pregled slajdovi su dobri. Još rječiti Anil crtica opisuje ga ovdje kao tastera webu.
Dvije druge srodne navodi se webhooks koja je u osnovi http ponovnih poziva. Github koristi ga, tako da paypal za asinkrone obavijesti plaćanja u ZNG . A mnogi drugi. Povezano koncept rsscloud što je opet pubsub središte. Slijedite ovaj link za detalje.
Možda se pitate koja je svrha pisanja svih tih mjesta, postoje dva jedan. Ove stvari su vrijedno znati, barem minimalno i 2. Ovaj blog je pubsubhubbub omogućeno sad preko appspot razvodnika koristeći ovu WordPress plugin i hrane za životinje je također pubsubhubbub omogućena putem FeedBurner, linka ovdje
-
[ 1 ]. - Dobro pročitajte uvodni za potpuno šifriranje homomorphic je ovaj članak Bruce Schneier i ovaj razgovor je više ili manje jedini izvor za Google Wave.
-UPDATE - Ovaj nakon objašnjava kako zahtjev javnom poslužitelju za povratni poziv može biti izrađen za oko stolnih računala pomoću XMPP Gateway (za pubsubhubbub).
Malo skupštine
Nakon čitanje ovaj članak o zaključavanje bez odbojnika i vidim korištenje CAS-a (usporedi i swap), osjećao sam se kao postavljanje sklopa kod da učine isto. Koristite slučaj tamo je pisati izvorni način i poziv iz Java (natrag u 1.5, kada istodobnih strukture podataka u Javi su manje ili više ne postoji). Bez dodatnih teškoća, ja ću osloboditi kod na vas
. Prvo je za CAS i drugi je za računanje fact koristeći algoritam Euclid '(ovo se može naći u mnogim mjestima i tutoriali, kao i).
Izraditi upute i pokrenuti gcc file_name.c ; ./a.out
Usporedite Swap
# Include# Include / / Razmjena - newvalue, comperand je stara / očekivana vrijednost / * * Funkcija zapravo radi sljedeće stvari - ako je vrijednost u * DEST jednaka oldvalue zatim ga zamijeniti newvalue drugi ostaviti ista: učiniti sve ove atomically * * Postoje dvije mogućnosti za povratak vrijednosti * 1.is početna vrijednost * DEST i ostaviti teret poziva fxn ga usporediti s oldval * 2. to učiniti ovdje i vratite se 0 ili 1, to bi trebao biti učinkovitiji ** / / * Kasnije ga promijeniti u makro * / CAS int (int * odred, int oldvalue, int newvalue) { printf ("(% d,% d,% d)", * odred, oldvalue, newvalue); / * Int cas (int odred, int oldvalue, int newvalue) {* / / * Int cas (int odred, int newvalue, int oldvalue) {* / int rezultat = 1 ;/ * 1 pokazuje da cas je uspio i 0 pokazuje da nije uspio * / / * Btw potrebno za postavljanje CC za zastavu 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" / * treba LOCK biti na istom retku * / "JZ Sastavljeno \ n \ t" "Movl $ 0,% 1 \ n \ t" "Gotovo: \ n \ t" : "= M" (odred), "= g" (rezultat) : "G" (oldvalue), "g" (newvalue), "m" (odred) : "% Eax", "% ebx", "ecx", "cc" ); printf ("(% d,% d,% d)", * odred, oldvalue, newvalue); vratiti rezultat; } / * TODO * Pisati drugi ASM fxn koji stavlja iznad fxn u while petlji i držati težak, osim ako uspije * / 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)); printf ("% d \ n", cas (c, b, b)); * C = 6; / * C = 5; * / printf ("mijenja vrijednost * c% d \ n", * c); printf ("% d \ n", cas (c, b, b)); printf ("% d \ n", cas (c, b, a)); printf ("% d \ n", cas (c, a)); printf ("% d \ n", cas (c, b)); printf ("% d \ n", cas (c, b, a)); return 0; }
Oblikovanje bilješke - izgleda kao WP isticanje sintakse je dodavanje na kraju, zanemariti činjenicu da.
Fact
# Includefact int (int a, int b) { int rezultat; / * Izračunaj najveći zajednički djelitelj pomoću Euclid 's Algoritmu * / __asm__ __ volatile__ ("movl% 1,%% eax;" "Movl% 2,%% ebx;" "CONTD: cmpl $ 0,%% ebx;" "Je DONE"; "Xorl%% EDX,%% EDX;" "Idivl%% ebx;" "Movl%% ebx,%% eax;" "Movl%% EDX,%% ebx;" "JMP CONTD;" "Gotovo: movl%% eax,% 0;": "= g" (rezultat): "g" (), "g" (b) ); vratiti rezultat; } int main () { int prvi, drugi; printf ("Unesite dva cijela broja:"); scanf ("% d% d", i prvi, i drugi); printf ("fact of posto D &% d je% d \ n", prvi, drugi, fact (prvi, drugi)); return 0; }
Cricketing Svijet čeka novi svjetski poredak
Nakon niza razgranalog pet ispitivanja i dva mjeseca, Engleska otkrije pepela.
Pričajmo o pobjednički tim prvi - njihov srednji kako je 'prosjek' ako ne želite kritična. Greame Swann doprinos sa šišmiš će brojati ne manje od doprinosa s loptom. Stuart Široko - najbolje sve specijalista bio ne starter za 5. test. Andrew Strauss je bio jedini dosljedan batsman i Jimmy Anderson je bio jedini dosljedan polucilindar.
Točka ovdje je da ne izgrditi postignuća u pobjedničkom timu, ali da se stavi u perspektivu činjenicu da unatoč svim tim, Australija izgubljene. morat ćete misliti na par sekundi, ako je zatraženo da imenuje svoje najbolje polucilindar. Dobro, to je bio BW Hilfenhaus. Hauritz nadmašio je očekivanja everbody, ali još uvijek nije dovoljno dobar da bude izabran za dva od pet testova. Južna Afrika nikada nije postao svjetski gonič bez Spinner svjetske klase, Australija se ne može nadati da će ostati bez jedne nikoga dovoljno dobrog jednom barem. Mađioničar napustio pozornicu i to ne izgleda kao umjetnost više, zaboravite čari. Ponting stoji visok manje među smrtnicima i Michael Clarke ističe se vrlo često, ali to ih čini momčad s nekoliko vrlo dobrih igrača, a ne vrlo dobra momčad.
Ashes 2009 će biti zapamćena za Andrewa Flintoff u posljednjih Ashes, Stuart Široko dolaska kao sve specijalista (ako on dodaje neke više pepeo folklor svom obećavajućem početku), a jedan od najviše govori prvog stoljeća svih vremena od strane Trott, ali to će također biti zapamćen kao mjesta gdje IFS i buts o australskoj nadmoć napokon su stavili na odmor, to je gotova. Nemojte me krivo shvatiti, oni još uvijek mogu razotkriti Mike Hussey ili Stuart Clark, ali ako se osjećate doprinos svih vremena velikana kad nestanu. Ponekad dolaze da vas podsjeti na sebe u IPL, ali još uvijek se ne mogu zamijeniti. Idemo osjećam blagoslovljen što je vidio Warne, McGrath i Gilchrist igrati zajedno i podržavaju Waughs, Ponting, Hyden, Martin i Langer.
Ide naprijed, Južna Afrika će uvijek ostati vrlo dobra momčad, ali im je potrebno za pobjedu u polufinalu i biti u skladu širom svijeta, Pakistan će ostati enigmatično sjajna, mladi Indijanac oružje vjerojatno će ga pronaći teško popuniti cipele izvanrednih prethodnika. Šri Lanka treba nastaviti prikazivati brza umjetnosti u obrtu. No, možda ćemo morati čekati neko vrijeme prije nego što je sve van dominantan tim ili prije kapetan žali na nedostatak konkurencije, kao Steve Waugh je jednom.
Na srodne napomenu - neka pozdravljaju dolazak leđa Asif, on je dovraga puno potencijala, neka se nadaju da bi nešto od toga i također dobrodošli Andy cvijet u novom awatar, zar ne možete zadržati dobre ljude dolje za dugo.
rubin jedan linijski brodovi za stvaranje hash
Jučer dok prolazi kroz jedan od mojih starih programa, otkrio sam to napisao po meni negdje vratiti:
#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
Ubiti neke od neizvjesnosti neka mi otkriti da raw_text izgleda
, Zar to je izrezana iz PayPal plaćanja priznanja.
Iznad linije ako slomljene čita bolje:
unescaped_array = CGI.unescape (raw_text). Split ('&') unescaped_array unescaped_array.collect = {| x | = b x.split ("="); b.push (nula) ako b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Učinimo pojedinačne korake u IRB:
IRB (glavni). 009:0> unescaped_array = CGI.unescape (raw_text) Split ('&') => ["USPJEH", "mc_gross = 10,00", "protection_eligibility = nepodobnim", "payer_id = U7PPJJ4TSJ47E", "pristojba = 0,00", "payment_date = 9:45:30 10. srpnja 2009 PDT", "payment_status = čekanju "] IRB (glavni): 013:0> unescaped_array unescaped_array.map = {| x | = b x.split ("="); b.push (nula) ako b.size == 1, b} => [["USPJEH", nula], ["mc_gross", "10,00"], ["protection_eligibility", "nepodobnim"], ["payer_id", "U7PPJJ4TSJ47E"], ["porez", "0.00"] , ["payment_date", "9:45:30 10. srpnja 2009 PDT"], ["payment_status", "na čekanju"]] IRB (glavni): 014:0> flattened_array = unescaped_array.flatten => ["USPJEH" nula ", mc_gross", "10,00", "protection_eligibility", "nepodobnim", "payer_id", "U7PPJJ4TSJ47E", "porez", "0,00", "payment_date", "09:45: 30 10. srpnja 2009 PDT "," payment_status "," na čekanju "] IRB (glavni): 015:0> hash = Hash [* flattened_array] => {"Porez" => "0,00", "payment_status" => "na čekanju", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "USPJEH" => nula ", payment_date" = > "9:45:30 10. srpnja 2009 PDT", "protection_eligibility" => "nepodobnim"}
BTW, * zove se oznaka operator u rubin
Drugi način za stvaranje mljeveno meso iz 'niz parova' je koristiti uvelo:
hash = [[1,2], [3,4]] ubrizgati ({}). {| rezultat, element | rezultat [element.first] = rezultat [element.last];} rezultat Postoji još jedan način
Napišite petlju, da ću otići kao vježba za čitatelja!
Ovdje je malo nevezano za korištenje slučaj stvaranja mljeveno meso iz polja:
IRB (glavni): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Manje :: veća} => {: Manje => [1, 2, 3, 4]: noviji => [7, 9]}
To možete učiniti više stvari, u osnovi rezultat je blok se koristi kao ključ za taj element u rezultat mljeveno meso.
Gmail, džukela i msmtp fix
Ako koristite džukela i SMTP pristup gmail. Ovdje je (loše) vijesti. Cool Dečki na Google opet promijenio certifikat. Oh, jeste li pitati - kako to znati? Jednostavno džukela započeo gunđanje o lošem certifikata kada se pokušava koristiti msmpt i zloglasne msmtp: TLS certifikat nije uspjela provjera. Potvrdu nije dobio poznatu izdavatelja ' Pozdravila me na zaslonu.
Prijeći potvrdu -
Dovoljno je pokrenuti nakon
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
Na mjestu starog Thwate Server sada ste se nakon izdavatelja u segmentu
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Srećom popravak je jednostavan, ovdje je ono što trebate učiniti na Debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Nakon toga samo promijenite sljedeću liniju u koju ~ e /. Msmtprc
tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem
tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem
na
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git i Awesome Anketa
Ovdje su dvije poveznice za istraživanje Git (verzija sustav kontrole) i strašan (upravitelj prozora) zajednice. Ako koristite bilo koji od ovih, molimo Vas da uzmu malo vremena da ispunite upitnik. Razmislite o tome što je najjednostavniji način da pridonese natrag na softver koji koristite.
Ovdje se nalaze linkovi:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Napomena - (Kako naći na tim stranicama, ali na dnu
) -
"Ako imate omogućene kolačiće, uvijek možete podnijeti djelomično ispunjen upitnik, i vratiti se u svojim odgovorima na kasnije vrijeme, to završetka kasnije."
Spajanje hashes u yaml boys = dječaci datoteka
YAML je vrlo zgodan za pisanje konfiguracijske datoteke. Osnovna prednost je da se čita kao tekstualnu datoteku. To radi jako dobro ako je vaša config file je flat (nema hijerarhije) i nema ponavljanja.
Ako je Vaš konfiguracije datoteka ima ponavljanja onda ima smisla izdvojiti one elemente te ih ponovno. Što mislim je to - recimo da vaša config file izgleda ovako:
razvoj: input_location: common_input output_location: dev_location mail: smtp_server: your_server login: your_login lozinka: top_secret Proizvodnja: input_location: common_input output_location: dev_location mail: smtp_server: your_server login: your_login lozinka: top_secret
Uz pretpostavku iznad koda u / tmp / test.yml ovdje je kako možete pročitati u Pythonu i Ruby
$cat readyml.py
#! / Usr / bin / env python pprint iz uvoza pprint kao pp # U Debian morati instalirati python-yaml yaml iz uvoza tereta, load_all, izvatkom hash = load (open ("/ tmp / test.yml ')) pp (hash ['razvoj'])
$ cat readyml.rb
#! / Usr / bin / env rubin zahtijevaju možeš PP kontakta hash = YAML :: load (File.open ("/ tmp / test.yml '). pročitati) pp hash ['razvoj']
ovdje je pri ruci jedan brod za rubin verziji
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' ili možete isprobati isti u IRB ili python konzola.
Imajte na umu da u gore isječak koda, sve je osim izlaza lokacija je ista u razvoju i proizvodnji dio. Ovo je mjesto gdje yml čvora identifikator dolazi spasiti. Ideja je jednostavna imati set zadanih vrijednosti te ih nadjačati, na drugom mjestu.
Možete ga razvlači kako slijedi:
zadane: & defaultno input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server login: your_login lozinka: top_secret razvoj: <<: * Defaultno Proizvodnja: <<: * Defaultno output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Super, to radi (tm)!.
Uvjerljivo smo trgovali neke jasnoću za malo magije. Ovdje je malo objašnjenje: i, * i <<: i što je sidro tag se može shvatiti kao čvora identifikator, * je čvor referentni i <<: kratica za hash spajanja.
Za više pojedinosti vidi bilo yaml naočale ili Wikipedia
Do sada je tako dobro, ali postoji kvaka ovdje, ove hash stapa nisu rekurzivni. Što to znači da je ovo: recimo da želite imati drugačiji naziv pošiljatelja pošte u dva okruženja, vi svibanj biti u iskušenju da učinite sljedeće:
zadane: & defaultno input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server login: your_login lozinka: top_secret razvoj: <<: * Defaultno mail: SENDER_NAME: sender_dev Proizvodnja: <<: * Defaultno output_location: prod_location mail: SENDER_NAME: sender_prod
Omogućava provjeriti
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Ups, nešto je pošlo po zlu, problem kao što je spomenuto da je hash spajanje nije rekurzivna i dok spajanjem ga zamijeniti pošte u zadanom putem pošte proizvodnje koji ima samo jednu tipku. Rješenje / zaobišli je odvijati još jednu razinu:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: pošiljatelj smtp_server: your_server login: your_login lozinka: top_secret zadane: & defaultno <<: * Common_settings mail: <<: * Mail_defaults razvoj: <<: * Defaultno Proizvodnja: <<: * Defaultno mail: <<: * Mail_defaults SENDER_NAME: sender_prod
Omogućuje ponovno provjeriti
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Jeste li reći da imate jedan više razine gniježđenja, i definitivno možete odmotati još jednu razinu, ali onda to postaje nered. Dakle, ako ne pokušavaju napisati rješenje kule Hanoi u conf datoteke, bolje je da restucture conf datoteke od kopanja u yaml ili nešto drugo. No, to je vaš poziv anyway.
Veliki programeri naći jednostavna rješenja za kompleksne probleme
Nakon dugo vremena sam mogao pronaći izvor za slijedeći citat-
Junior programeri stvorili jednostavnih rješenja do jednostavnog problema. Viši programeri stvaranje složenih rješenja za složene probleme. Veliki programeri pronašli jednostavnih rješenja do složenih problema.
To je iz eseja pod nazivom Beautiful Software Charles Connell.
Drugi favorit je jedan od mina je zen od Python -
Lijepa je bolje nego ružna.
Eksplicitno je bolje nego implicitno.
Jednostavno je bolje od kompleksa.
Kompleks je bolje nego komplicirano.
Stan je bolje nego smješteno.
Rijetka je bolji od gusta.
Očitanja računa.
Posebni slučajevi nisu dovoljno razbiti posebna pravila.
Iako praktično kuca čistoću.
Greške ne smije proći u tišini.
Osim ako izričito ušutkati.
U lice dvosmislenosti, odbiti u napast da pogodi.
Ima bi trebao biti jedan i po mogućnosti samo jedna očigledan način da to učinite.
Iako na taj način ne može biti očigledan na prvi osim ako ste Nizozemski.
Sada je bolje nego nikad.
Iako nikada je često bolji od * pravo * sada.
Ako provedba je teško objasniti, to je loša ideja.
Ako provedba je lako objasniti, on svibanj biti dobra ideja.
Imenskom prostoru jedna sirena odlična ideja - Učinimo više onih!
-------------------------
i onda je klasična Tao Programiranja
-
krediti su na stranice povezane-
Preveo Geoffrey James
Prepisao Duke Hillard
Prenosi Anupam Trivedi i Sajitha Tampi, i Meghshyam Jagannath
Re-html-ispunjene i uredio Kragen Sittler
-
Knjiga 1 - Silent Void
Tako je govorio programer master:
"Kada ste naučili da zauzme kod pogreške iz zamka okvira, to
će biti vrijeme za vas da odu. "1,1
Nešto tajanstveno je formirana, rođen u mirnom praznini. Čeka sam i
nepokretna, ona je istodobno i dalje, a ipak u stalnom pokretu. To je izvor
svih programa. Ne znam ime, pa ću ga nazvati Tao
Programiranje.Ako Tao je velik, zatim operativni sustav je super. Ako je operativni
sustav je velik, zatim prevodilac je super. Ako prevodilac je super,
zatim primjena je super. Korisnik je zadovoljan i postoji
sklad u svijetu.Tao Programiranja teče u beskraj i vraća se na jutarnjim vjetrom.
1,2
Tao je rodila strojni jezik. Strojni jezik rodila
asembler.Monter rodila prevodilac. Sada ima 10.000
jezika.Svaki jezik ima svoju svrhu, ma kako skroman. Svaki jezik izražava
Yin i Yang softvera. Svaki jezik ima svoje mjesto unutar Tao.Ali ne programirati u COBOL, ako možete izbjeći.
1,3
U početku bijaše Tao. Tao je rodila prostora i vremena.
Stoga prostor i vrijeme su Yin i Yang programiranja.Programeri koji ne shvatiti Tao uvijek istječu vremena
i prostor za njihove programe. Programeri koji shvatiti Tao uvijek
imati dovoljno vremena i prostora da ostvari svoje ciljeve.Kako bi moglo biti drukčije?
1,4
Mudar programer je rekao o Tao i slijedi ga. Prosječna
programer je rekao o Tao i traži za njega. Lud programer
je govorio o Tao i smije mu se.Ako nije bilo smijeha, ne bi bilo Tao.
Najviše zvukovi su najteže čuti.
Ići naprijed način da se povuče.
Veliki talent pokazuje i sama kasnije u životu.
Čak savršen Program još uvijek ima bugova.-------------------------
Knjiga 2 - starih majstora
Tako je govorio programer master:
"Nakon tri dana bez programiranja, život postaje besmislen."
2,1
Programeri iz davnina bila tajanstvena i duboka. Mi ne možemo shvatiti
njihove misli, tako da sve što činimo je opisati njihov izgled.Svjesna, poput lisice prijelaza vode. Obavijesti, kao općenito na
bojno polje. Ljubazan, kao domaćica pozdravljanje svoje goste. Jednostavno, kao što su
uncarved blokovi drva. Opaque, kao što su crne bazenima u tamnim spiljama.Tko zna tajne njihovih srca i misli?
Odgovor postoji samo u Tao.
2,2
Grand Master Turing je jednom sanjao da je stroj. Kad se probudio
uzviknuo je:"Ne znam da li sam Turingov sanjala da sam ja za kavu, ili
stroj sanjala da sam Turingov! "2,3
Programer iz velike računarske kuće otišao u softveru
konferencija i zatim se vratio prijaviti njegov menadžer, kaže: "Kakav
od programeri rade za druge tvrtke? Ponašali su se i bili su jako
ravnodušan s nastupa. Dlaka im je bila duga i zapušten i njihovih
odjeća bila naborana i stara. Oni se srušio u našem gostoprimstvu paket i oni
je primitivan zvukove tijekom moje prezentacije. "Upravitelj je rekao: "Ja nikada ne treba vam poslana na konferenciji za novinare. Oni
programeri žive izvan fizičkog svijeta. Smatraju život apsurdno,
slučajno slučajno. Oni dolaze i odlaze bez znanja ograničenja.
Bez brige, žive samo za njihove programe. Zašto bi se bavili
sa socijalnim konvencijama?"Oni su živi unutar Taa."
2,4
Početnik upita Učitelja: "Ovdje je programer koji nikada ne dizajnira,
dokumenti ili testira svoje programe. Unatoč tome, tko ga zna, smatra jedan od
najboljih programera na svijetu. Zašto je to? "Učitelj odgovori: "To je programer svladao Tao. On je otišao
izvan potrebu za dizajnom, on ne postane ljut kad je sustav
pad, ali prihvaća svemir bez brige. On je otišao izvan
potrebno za dokumentaciju, on više nije briga ako netko drugi vidi njegov kod.
On je otišao izvan potrebe za testiranje, svaki od njegovih programa su savršeni
u sebi, skladna i elegantna, a njena namjena očigledna. Zaista,
je ušao u otajstvo Tao. "-------------------------
Knjiga 3 - Dizajn
Tako je govorio programer master:
"Kada je program koji se ispituje, to je prekasno da bi dizajn
promjene. "3,1
Bio jednom jedan čovjek koji je otišao na predstavu računala trgovine. Svaki dan kao on
stupio je, čovjek je rekao stražar na vratima:"Ja sam veliki lopov, poznat po svojim podvizima shoplifting. Biti
Upozoravam Vas, ovaj sajam neće pobjeći unplundered. "Taj govor poremećen straže u velikoj mjeri, jer su milijuni
dolara računalne opreme iznutra, tako da je gledao čovjeka pažljivo. Ali
čovjek samo lutao od štanda na štand, zuji tiho u sebi.Kad je čovjek odlazio, stražar ga je odveo na stranu i tražiti svoju odjeću, ali
ništa je ne može naći.Na sljedeći dan sajma, covjek se vratio, kritizirao straže
govoreći: "Ja sam pobjegao s obilnim plijenom jučer, a danas će biti još
bolje. "Dakle, stražar ga je promatrala sve bliže, ali bez uspjeha.Zadnjeg dana sajma, stražar mogao obuzdati svoju znatiželju
više. "Gospodine Lopov", rekao je: "Ja sam tako zbunjen, ja ne mogu živjeti u
mir. Molimo vas da me prosvijetli. Što je to što ste krađu? "Čovjek se nasmiješi. "Ja sam krađu ideje", rekao je on.
3,2
Tu je nekada bio glavni programer koji je napisao nestrukturiranih programe.
Početnik, tražeći da ga nasljedujemo, također je počeo pisati
nestrukturiranih programi. Kad Početnik upita učitelja procijeniti njegov
napredak, majstor ga je kritizirao za pisanje nestrukturirane programe,
govoreći: "Ono što je prikladno za majstora nije prikladna za
novak. Morate razumjeti prije Tao nadilazi strukturu. "3,3
Bio jednom programer koji je priključen na dvoru cara
od Wu. Vojvoda upitani programer: "Koji je lakše dizajn: jedan
računovodstvo paket ili operativni sustav? ""Operativni sustav", odgovorio je programer.
Vojvoda izrekao je uzvik u nevjerici. "Sigurno računovodstvo
Paket je trivijalan pored složenosti operativnog sustava ", kazao je
, rekao je."Nije tako", rekao je programer, "kada za knjigovodstvo,
programer djeluje kao posrednik između ljudi koji imaju različite
ideja: kako mora raditi, kako moraju izgledati, te kako će se
u skladu s poreznim zakonima. Za razliku od toga, operativni sustav nije ograničen
vanjski nastupa. Kod projektiranja operacijskog sustava, programer
traži najjednostavniji sklad između stroja i ideja. To je razlog zašto
operativni sustav je lakše oblikovati. "Vojvoda od Wu je kimnuo i nasmiješio se. "To je sve lijepo i dobro, ali
što je lakše za ispravljanje? "Programer ne odgovori.
3,4
Upravitelj je otišao na master programer i pokazao mu zahtjeve
dokument za nove primjene. Upita ga: "Koliko dugo
će ga odvesti na ovom sustavu, ako dodijelite pet programera? ""To će potrajati godinu dana," rekao je glavni odmah.
"No, sustav nam treba odmah ili čak prije! Koliko dugo će
poduzeti ako mi dodijeliti deset programera? "Master programer namršti. "U tom slučaju, to će potrajati dvije godine."
"A što ako zaposlim stotinu programera?"
Master programer slegnuo ramenima. "Tada dizajn nikada neće biti
završio ", rekao je on.-------------------------
Knjiga 4 - Kodiranje
Tako je govorio programer master:
"Dobro napisan program je vlastiti raj, loše napisan program
vlastiti pakao. "4,1
Program bi trebao biti lagan i okretan, njegovi potprograme povezane su kao
niz bisera. Duh i namjera programa treba zadržati
tijekom. Ima bi trebao biti ni premalo ili previše, ni
nepotrebnih petlji, niti beskorisne varijabli, niti manjka strukture, niti
Velika krutost.Program treba slijediti dati `Zakon najmanjih čuđenje". Što je taj zakon?
To je jednostavno da je program uvijek trebali odgovoriti korisniku u načinu
koji ga zapanjuje najmanje.Program, bez obzira kako složena, treba djelovati kao jedna cjelina. Program
treba biti usmjerena logikom, a ne u vanjskom izgledu.Ako program ne uspije u ovim uvjetima, to će biti u stanju
nered i zbunjenost. Jedini način da ispravi to prepisati
program.4,2
Početnik upita učitelja: "Imam program koji negdje radi, a
ponekad ne. Ja sam slijedio pravila programiranja, ali sam
potpuno zbunjen. Što je razlog za to? "Učitelj odgovori: "Ti su zbunjeni jer ne razumiješ Tao.
Samo budala očekuje racionalno ponašanje od svojih bližnjima. Zašto ste
ga očekivati od stroja da su ljudi izgrađene? Računala simulirati
determinizam, samo Tao nije savršen."Pravila programiranja su prolazne, samo Tao je vječan. Stoga
morate razmišljati Tao prije nego što dobijete prosvjetljenje. ""Ali kako ću znati kada sam dobio prosvjetljenje?", Upitao je
novak."Vaš program onda će raditi ispravno", odgovorio je majstor.
4,3
Majstor je objašnjavajući prirodu Tao jednom od svojih novaka. "
Tao je utjelovljen u svim softvera - bez obzira koliko beznačajan ", rekao je
gospodar."Je li Tao u ručni kalkulator", upitao je početnik.
"To je" došao odgovor.
"Je li Tao u video igri?" Nastavi učenik.
"To je čak iu video igri", rekao je gospodar.
"A je Tao u DOS-u za osobno računalo?"
Glavni zakašljao i pomaknuo svoju poziciju po tom pitanju. "Pouka je tijekom
za danas ", rekao je on.4,4
Prince Wang programer je kodiranje softver. Njegovi prsti su plesale na
tipkovnica. Program sastavljen bez poruke o pogrešci, a program
ran kao blagi vjetar."Izvrsno!" Princ uzviknuo je: "Tvoja je tehnika besprijekorno!"
"Tehnika", rekao je programer okreću iz svog terminala: "Što sam
slijediti je Tao - iznad svih tehnika! Kada sam prvi put počeo sam programirati
će vidjeti pred sobom cijeli problem u jednom mase. Nakon tri godine sam bez
nije vidio ovu masu. Umjesto toga, vidio sam potprograme. Ali sada vidim ništa.
Cijelo moje biće postoji u bezoblične praznini. Moja osjetila su u stanju mirovanja. Moj duh,
slobodno raditi bez plana, slijedi vlastiti instinkt. Ukratko, moj program
se piše. Istina, ponekad postoje teški problemi. Vidim ih
dolazi, ja usporim, i tiho ih promatram. Tada sam promjenim jednu liniju koda
i teškoće nestaju poput oblaka rijetkog dima. Zatim sam sastaviti
program. Još uvijek sjedim i neka radost rad ispuniti moje biće. Mogu zatvoriti moj
oči na trenutak i zatim se odjaviti. "Princ Wang je rekao: "Bi li to sve moje programera bili mudar!"
-------------------------
Knjiga 5 - Održavanje
Tako je govorio programer master:
"Iako je program biti samo tri linije dugo, jednog dana će biti
održava. "5,1
I korištena vrata ne treba podmazivati.
Brza-potok ne raste stagnira.
Ni zvuk ni misli mogu putovati kroz vakuum.
Softver trune ako se ne koristi.To su velike tajne.
5,2
Voditelj upita programera koliko dugo će ga odvesti do kraja
Program na kojem je radio. "To će biti završena sutra"
programer odvrati."Mislim da su se nerealna", rekao je direktor "Doista, koliko
dugo će to trajati? "Programer misli na trenutak. "Imam neke značajke koje želim
dodati. To će trajati najmanje dva tjedna ", rekao je napokon."Čak i da je previše za očekivati," inzistirao menadžer, "Ja ću biti
zadovoljni ako jednostavno mi reći kada program završi. "Programer dogovoreno na to.
Nekoliko godina kasnije, menadžer u mirovini. Na putu do njegova odlaska u mirovinu
Ručak, otkrio programer spava na njegovu terminala. On je bio
programiranje cijelu noć.5,3
Početnik jednom je dodijeljen kodirati jednostavni knjigovodstveni paket.
Novak radio je bijesno za nekoliko dana, ali kada je njegov gospodar pregledao
njegov program, otkrio je da u njoj screen editor, skup
grafičkih rutina, sučelje s umjetnom inteligencijom, ali
nije najmanji spomen bilo financijski.Kad učitelj upita o ovome, učenik postade ljut. "Nemojte se
tako nestrpljivi ", rekao je," Ja ću staviti u financijskom stvari na kraju. "5,4
Je li dobar poljoprivrednik zanemariti usjeva je zasadio?
Je li dobar učitelj previdjeti ni većina ponizno student?
Je li dobar otac dopustiti jedan dijete umire od gladi?
Je li dobar programer odbijaju održavati svoj kod?-------------------------
Book 6 – Management
Thus spake the master programmer:
“Let the programmers be many and the managers few – then all will be
productive.”6.1
When managers hold endless meetings, the programmers write games. Kada
accountants talk of quarterly profits, the development budget is about to
be cut. When senior scientists talk blue sky, the clouds are about to roll
in.Truly, this is not the Tao of Programming.
When managers make commitments, game programs are ignored. Kada
accountants make long-range plans, harmony and order are about to be
restored. When senior scientists address the problems at hand, the
problems will soon be solved.Truly, this is the Tao of Programming.
6.2
Why are programmers non-productive?
Because their time is wasted in meetings.Why are programmers rebellious?
Because the management interferes too much.Why are the programmers resigning one by one?
Because they are burnt out.Having worked for poor management, they no longer value their jobs.
6.3
A manager was about to be fired, but a programmer who worked for him
invented a new program that became popular and sold well. As a result, the
manager retained his job.The manager tried to give the programmer a bonus, but the programmer
refused it, saying, “I wrote the program because I thought it was an
interesting concept, and thus I expect no reward.”The manager upon hearing this remarked, “This programmer, though he holds
a position of small esteem, understands well the proper duty of an
employee. Let us promote him to the exalted position of management
consultant!”But when told this, the programmer once more refused, saying, “I exist so
that I can program. If I were promoted, I would do nothing but waste
everyone's time. Can I go now? I have a program that I'm working on.”6.4
A manager went to his programmers and told them: “As regards to your work
hours: you are going to have to come in at nine in the morning and leave
at five in the afternoon.” At this, all of them became angry and several
resigned on the spot.So the manager said: “All right, in that case you may set your own
working hours, as long as you finish your projects on schedule.” The
programmers, now satisfied, began to come in at noon and work to the wee
hours of the morning.————————————————————————–
Book 7 – Corporate Wisdom
Thus spake the master programmer:
“You can demonstrate a program for a corporate executive, but you can't
make him computer literate.”7.1
A novice asked the master: “In the east there is a great tree-structure
that men call `Corporate Headquarters'. It is bloated out of shape with
vice presidents and accountants. It issues a multitude of memos, each
saying `Go, Hence!' or `Go, Hither!' and nobody knows what is meant. Svaki
year new names are put onto the branches, but all to no avail. How can
such an unnatural entity be?”The master replied: “You perceive this immense structure and are
disturbed that it has no rational purpose. Can you not take amusement from
its endless gyrations? Do you not enjoy the untroubled ease of programming
beneath its sheltering branches? Why are you bothered by its
uselessness?”7.2
In the east there is a shark which is larger than all other fish. To
changes into a bird whose wings are like clouds filling the sky. When this
bird moves across the land, it brings a message from Corporate
Headquarters. This message it drops into the midst of the programmers,
like a seagull making its mark upon the beach. Then the bird mounts on the
wind and, with the blue sky at its back, returns home.The novice programmer stares in wonder at the bird, for he understands it
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. Ne
change in management can harm him. He will not be fired, even if the
project is cancelled. Zašto je to? He is filled with Tao.————————————————————————–
Book 8 – Hardware and Software
Thus spake the master programmer:
“Without the wind, the grass does not move. Without software, hardware is
useless.”8,1
A novice asked the master: “I perceive that one computer company is much
larger than all others. It towers above its competition like a giant among
dwarfs. Any one of its divisions could comprise an entire business. Why is
this so?”The master replied, “Why do you ask such foolish questions? That company
is large because it is large. If it only made hardware, nobody would buy
it. If it only made software, nobody would use it. If it only maintained
systems, people would treat it like a servant. But because it combines all
of these things, people think it one of the gods! By not seeking to
strive, it conquers without effort.”8,2
A master programmer passed a novice programmer one day. The master noted
the novice's preoccupation with a hand-held computer game. “Excuse me,”
he said, “may I examine it?”The novice bolted to attention and handed the device to the master. “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. I
suddenly the novice was enlightened.8,3
There was once a programmer who worked upon microprocessors. “Look at how
well off I am here,” he said to a mainframe programmer who came to visit,
“I have my own operating system and file storage device. I do not have to
share my resources with anyone. The software is self- consistent and
easy-to-use. Why do you not quit your present job and join me here?”The mainframe programmer then began to describe his system to his friend,
saying “The mainframe sits like an ancient sage meditating in the midst
of the data center. Its disk drives lie end-to-end like a great ocean of
machinery. The software is as multifaceted as a diamond, and as convoluted
as a primeval jungle. The programs, each unique, move through the system
like a swift-flowing river. That is why I am happy where I am.”The microcomputer programmer, upon hearing this, fell silent. But the two
programmers remained friends until the end of their days.8,4
Hardware met Software on the road to Changtse. Software said: “You are
Yin and I am Yang. If we travel together we will become famous and earn
vast sums of money.” And so the set forth together, thinking to conquer
the world.Presently they met Firmware, who was dressed in tattered rags and hobbled
along propped on a thorny stick. Firmware said to them: “The Tao lies
beyond Yin and Yang. It is silent and still as a pool of water. It does
not seek fame, therefore nobody knows its presence. It does not seek
fortune, for it is complete within itself. It exists beyond space and
time.”Software and Hardware, ashamed, returned to their homes.
————————————————————————–
Book 9 – Epilogue
Thus spake the master programmer:
“It is time for you to leave.”
————————————————————————–
If you liked these, you may also like to read worse is better
A bit of shell redirection
Here is how we normally do shell redirection
$ ./pgm.sh args >out.txt 2>err.txt
I wanted to modify it a bit and run as follows
$ ./pgm.sh args
with the requirement that output and error should go to some filename computed inside pgm.sh based on args. One illustrative case could be when date is part of args. So you would like stdout to go to say /your/directory/pgm_out_YYYYMMDD.txt 1
The problem with standard way of redirecting N>file.txt ie, associating file descriptor N to file.txt , is that it works only for the newly forked process and not for the current process.
so
$ echo hi 1>out.txt ; echo hii will send hi to out.txt but will print hii to stdout. 2
This is where exec comes to our rescue. If we add exec 1>somefile.txt then output from rest of the script will go to somefile.txt
$./test.sh will redirect hi as well as hii to out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Similarly to redirect stdout as well as stderr we'll do something like this
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Now coming back to original point of redirecting to some file from inside the shell, let's say program computed the filename in some variable OUTFILE, we could have just done exec 1>$OUTFILE
That solves the current problem. But you may like to go through following example which achieves 'random access' of file in shell script. Example is from here
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890
With comments, this code is self explanatory.
-
1 It can also be done by $ ./pgm.sh args >pgm_out`date +%Y%m%d` but idea is to generate this file name based on some logic in program itself.
2 1 in 1>out.txt is redundant but it clarifies here that we are redirecting fd 1
Sony VAIO review
A month back I bought a vaio NS25G and have been planning to write this post since then. This post is primarily notes to self and review of the same. Let's get off the mark quickly -
Post has two parts -
I. Review of hardware
II. Installing debian and things to setup
Since I am not a VAIO marketing guy, I'll start other way round -
Why you may not like to buy this laptop :
- No bluetooth : believe me, in 2009 sony sells laptop without bluetooth. Sure you can use usb stuff but …
- Screen size is 15.4 inches : if you travel a lot then this laptop may not be very handy and also 2.9kg laptop is not exactly the lightest around.
- No HDMI output.
- Ne zasebna grafička kartica i voli. (I nije posvećen video memorije
Now , why you may like to buy it :
- This laptop is a damn good desktop. What I mean is this if your requirement is like me – mostly writing programs and trying to use it 25 out of 24 hrs, then with a big screen , extremely comfortable keyboard layout with spacious palm rest and good compute power , it makes a very good combination.
- It L2 cache is 2MB and processor/memory system bus are 800MHz. I don't play games so can't say about that but for anything else but a core 2 duo processor with 2GHz freq is good, this is more than enough.
- From my usage, I see processor mostly clocks at 1.2GHz, and memory usage ~500MB. That just reinforces previous point.
- Battery backup is good, ~2 hrs is what I get.
Just one more thing here – being Sony, it will cost you a bit than other laptops with similar configuration, but that is a call u have to make.
II. Configuring linux (to run out of box ! ) :
It came pre installed with Vista( I think home premium or some fancy name like that). Dungara booted once and created another partition of 150 GB. Debian testing is what I always install and then up(down?)grade to 'unstable' sid.
Things which worked without any problem:
- X - unsurprisingly X server had not problem with starting or resolution. After one of the upgrades X refused to start though, but 'X -configure' generated a conf file which worked pretty well.
- Audio - Audio output and external mic work fine. kernel version 2.6.29-1-686 #1 SMP and alsa version 1.0.17. This is what you get from
$ lspci -v |grep Audio 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Con1.0.17troller (rev 03) - Video cam – just works
- Hibernate to disk and back – no problem
- Wireless - ukratko - radi.
$ lspci |grep -i wireless
03:13:55 04:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01) .
I think kernel 2.6..27 onwards it works with the stock kernel source. You dont have to install ndiswrapper or things like t
hat. As a note, please say good buy gnome-network-manager and welcome wicd, it is just a gui layer but behind the scene they have fixed lot of config stuff like wpasupplient and more.
What doesn't work -
- Somehow internal mic refuses to work
External mic works fine though. Latest alsa sources did not compile cleanly on debian, so for the time being I bought external Internal mic, will try to dig into it sometime in future though.
Few more misc hints for deiban:
- Package for devnagri font- ttf-indic-fonts
- Package for flash player – flashplugin-nonfree
- Entry in sources.list for mplayer and likes – deb http://www.debian-multimedia.org sid main
- Entry in sources.list for e17 – deb http://debian.alphagemini.org/ unstable main
- Entry in sources.list for skype – http://download.skype.com/linux/repos/debian/ stable non-free
oneliner for increasing and decreasing the brightness -
[root]prashant@vaio09:12 PM$ cat bin/incbrightness.sh
#!/usr/bin/env bash
echo $[1+`cat /sys/class/backlight/acpi_video0/brightness `] >/sys/class/backlight/acpi_video0/brightness
you'll have to put this in sudo though.
and to decrease change + to – and … you get the idea, right !
A bit more, if you use enlightenment(e17) here are few more hints -
[enlightenment key bindidings]
You can use following key code and mapping
mute :
KEY="Keycode-160" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master toggle"
hibernate :
KEY="Keycode-165" ACTION="exec" PARAMS="sudo /usr/sbin/hibernate-disk"
volume decrease :
KEY="Keycode-174" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2-"
volume increase:
KEY="Keycode-176" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2+"
increase brightness :
KEY="Keycode-212" ACTION="exec" PARAMS="sudo /root/bin/incbrightness.sh"
decrease brightness
KEY="Keycode-101" ACTION="exec" PARAMS="sudo /root/bin/decbrightness.sh"



































