anketa, ping, pubsub, pubsubhub, pubsubhubbub
V primeru, da so skeptični, da je metoda v norosti zgoraj, v naslovu delovnega mesta. V tech krogih ni verjetno, da še niste slišali za pubsubhubbub. Na hitro nekaj mesecih, je bil eden od prvih treh govoril o stvareh. Druga dva pa homomorphic šifriranje in Google val [ 1. ]. Prihaja nazaj na sedanje delovno mesto - izrazi v naslovu kažejo, kako dobiš vsebino od drugih ljudi. Po podrobnosti postalo bolj jasno, če si predstavljate stvari dogaja v zvezi z blogi, čeprav so konceptualno ni omejena na blogih.
Anketiranje se nanaša na scenariju, kjer stranke hranijo sprašuje, strežnik, če je kaj novega, pridi gor. Kako pogosto zaprositi za posodobitev bo vedno problem z volišč preveč pogosti ali preveč redko, ampak kot 1 bralec opozoril sem , da je ena super, stvar z volišč je, da strežnik ni nujno, da vzdržuje stanje.
Ping se nanaša na primer, ko, ko post članek, vi (ali vaša programska oprema), prav tako posodablja nekatere popularne (centralne) posodobitev storitev. Nekateri ozadje tukaj .
Naslednja je pubsub ki stoji za objavo / naročiti, eno igrišče za prvi je bil narejen tukaj z Evan Henshaw-Plath in Kellan Elliott-McCrea (72 slides, ampak vredno iti skozi). Nujni primer, da je proti je bilo to - na določen datum, FriendFeed plazil Flickr 2,9 milijona krat, da bi dobili najnovejše fotografije 45,754 uporabnikov, od tega je 6721 obiskal Flickr v teh 24 ur in bi lahko "potencialno" dodal fotografijo. Upoštevajte, da tisto, kar so predlagali ni nova tehnologija, saj poudarjajo out 'revolucionarno novo 20 let staro tehnologijo ". Če si to naredil za bloge kot eno od glavnih težav z XMPP - lahko prisotnost podatkov, plini, ki je lahko tako visoka kot 60-70% zmanjšajo veliko.
pubsubhub pomeni objaviti Naročni vozlišče in pubsubhubbub je protokol, jedro, ki je ideja pubsubhub. Čemer založniki (recimo Bloggers) posodobiti vozlišče, ki (lahko je več kot vozlišča, ki govorijo drug z drugim) prebiva "nekje v oblak", v skladu s protokolom, lahko to potiskanje ali vlečenje kot na protokol pa je naslednji člen v verige, vozlišč do naročnika (recimo bralcev) je vedno potisnite model. Ta stran je dobro izhodišče za pubsubhubbub, pregled diapozitivi so dobri. Kdaj zgovoren Anil Dash ga opisuje tukaj kot Pushbutton spletu.
Dva druge s tem povezane bralcev so webhooks , ki je v osnovi http callbacks. Github uporablja jo, tako da ne paypal za asinhroni obvestil o plačilu v IPN . Torej, to še mnogi drugi. Sorodni koncept rsscloud ki je spet pubsub središče. Sledite to povezavo za podrobnosti.
Morda se sprašujete, kaj je smisel vsega tega pisanja tu, obstajata dve 1. Te stvari je vredno vedeti, vsaj minimalno in 2. Ta blog je pubsubhubbub omogočeno zdaj preko vozlišča appspot uporabo tega WordPress plugin in krmo, preveč je pubsubhubbub omogočeno preko feedburner in povezavo tukaj
-
[ 1 ]. - Dobro uvodno branje za popolnoma homomorphic šifriranje je ta članek Bruce Schneier in ta pogovor je bolj ali manj edini vir za Google Wave.
-UPDATE - To sporočilo pojasnjuje, kako se lahko zahteva javni strežnik za povratni klic delal približno za namizne stranke z uporabo XMPP prehod (za pubsubhubbub).
Malo montažo
Po branju tega članka o prostih rezerv za zaklepanje in videnje uporabe CAS (primerjati in swap), sem se počutil kot objavo montažo kodo, da storijo enako. Uporabite primer več kot je bilo, da bi napisal izvirni način in jo pokličite s Java (nazaj na 1,5, ko so bili sočasno podatkovne strukture v Javi več ali manj ni). Brez odlašanja, se bom sprostil kodo na vas
. Prvi je na CAS in drugo, je za računalniške GCD pomočjo Evklidovega algoritma (ta je mogoče najti v številnih krajih in vajah, pa tudi).
Pripravijo in vodijo navodila gcc file_name.c ; ./a.out
Primerjati in Swap
# Include# Include / / Izmenjave - newvalue, comperand je star / pričakovana vrednost / * * Funkcija v resnici počne to stvar - če je vrednost v * destilirano vodo, je enako potem oldvalue jo nadomestiti s newvalue pa pustimo nespremenjena: vse to ne atomically * * Na voljo sta dve možnosti za vrnitev vrednosti * 1.is začetno vrednost * Podrobnosti destilirano vodo in pustite breme kliče fxn, da ga primerjajo z oldval * 2. to storite tukaj in se vrnil 0 ali 1, bi to moralo biti bolj učinkovito ** / / * Kasneje spremenite v 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 rezultat = 1 ;/ * 1 kaže, da je cas uspelo in 0 kaže, da ni * / / * Btw morali nastaviti cc za zastava 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" bi / * LOCK biti v isti vrstici * / "JZ poteka \ n \ t" "Movl $ 0,% 1 \ n \ t" "Sestavljeno: \ n \ t" : "= M" (dest), "= g '(rezultat) : "G" (oldvalue), "g" (newvalue), "M" (dest) : "% EAX", "% ebx", "ECx", "cc" ); printf ("(% d,% d,% d)", * dest, oldvalue, newvalue); vrne rezultat; } / * TODO * Napisati še eno ASM fxn ki postavlja nad fxn v nekaj časa zanke in poskušati, če ne uspe * / 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,,)); printf ("% d \ n", cas (c, b, b)); * C = 6; / * C = 5; * / printf ("spreminja vrednost * c na% d \ n", * c); printf ("% d \ n", cas (c, b, b)); printf ("% d \ n", cas (c, b, a)); printf ("% d \ n", cas (c,,)); printf ("% d \ n", cas (c, a, b)); printf ("% d \ n", cas (c, b, a)); return 0; }
Oblikovanje ugotavlja - se zdi, kot wp sintakso označevalnik je dodal na koncu, da ne upoštevajo.
GCD
# Includeint gcd (int a, int b) { int rezultat; / * Compute Največji skupni delitelj pomočjo Evklidovega algoritma * / __asm__ __ volatile__ ("movl% 1,%% EAX;" "Movl% 2,%% ebx;" "Nadalj.: cmpl $ 0,%% ebx;" "JE SESTAVLJENO;" "Xorl%% EDX, EDX%%;" "Idivl%% ebx;" "Movl%% ebx,%% EAX;" "Movl%% EDX,%% ebx;" "JMP nadalj.;" "Sestavljeno: movl%% EAX,% 0;": "= g '(rezultat):" g "(a)," g "(b) ); vrne rezultat; } int main () { int prvi, drugi; printf ("Vnesite dve celi števili:"); scanf ("% d% d", & prvi, in drugo); printf ("GCD od% d &% d je% d \ n", prva, druga, gcd (prvi, drugi)); return 0; }
Cricketing svet pričakuje nov svetovni red
Po vrsti segajo pet testi in približno dva meseca, ki Anglija predelanih pepel.
Spregovorimo o zmagovalni ekipi 1. - njihova sredina, da je "povprečno", če ne želite, da kritično. Prispevek Greame Swann je s kijem bo štela nič manj kot prispevek z žogo. Stuart Broad - najboljši vseh vsestranski ni bil starter za 5. test. Andrew Strauss je bil edini v skladu batsman in Jimmy Anderson je bil edini v skladu Polucilindar.
Točka tukaj ni Graditi dosežke zmagovalno ekipo, ampak za uvedbo vidika dejstva, da kljub vsem tem, Avstralija izgubljeno. boste morali razmišljati za nekaj sekund, če je bilo ime svoje najboljše polcilinder. Prav, da je BW Hilfenhaus. Hauritz prekosila pričakovanja everbody, vendar še vedno ni dovolj dobra, da je izbran za dva od petih testov. Južna Afrika nikoli postala svetovna Mućkalica brez svetovnega razreda spinner, Avstralija ne more upati, da ostane 1 brez enega dobrega dovolj ena najmanj. Čarovnik zapustil oder in ne izgleda kot umetnost več, pozabi čarobno. Ponting stoji visok med manjšimi smrtniki in Michael Clarke vstane zelo pogosto, vendar to pomeni, da so ekipa z nekaj zelo dobrih igralcev in ne zelo dobra ekipa.
Pepel 2009 si bomo zapomnili za zadnjih Ashes Andrew Flintoff je, prihod Stuart Broad, kot vse obel (če je še dodal nekaj več pepela folklore v svojo obetavno), in eden od najbolj pripoveduje stoletja prvenec vseh časov z Trott pa bo tudi v spominu kot točke, kjer oklijevanja in izgovorjavo o prevlado v Avstraliji so bili na koncu dal za počitek, je konec. Ne razumite me narobe, lahko še vedno izkopala Mike Hussey in Stuart Clark, vendar se počutite prispevek vseh časov greats ko gredo manjka. Včasih pridejo do vas spomnim sebe v ZIL, vendar še vedno jih ni mogoče zamenjati. Poglejmo počutim blagoslovljena, ker je videl Warne, McGrath in Gilchrist igrajo skupaj in ki jih podpirajo Waughs, Ponting, Hyden, Martin in Langer.
V prihodnje se bo Južna Afrika še vedno zelo dobra ekipa, ampak jih potrebujejo za zmago polfinalu in bolj dosledno po vsem svetu, bo ostal Pakistan skrivnostno briljantno, bo indijski mlade pištole verjetno zdi, da je težko zapolniti čevlje izrednih predhodnikov. Šrilanka je treba še naprej kažejo utrinki umetnosti obrti. Ampak, se bomo morali počakati nekje pred ki ima vse od prevladujočega ekipo ali pred kapetan očita pomanjkanje konkurence, kot je Steve Waugh storil enkrat.
S tem povezanim note - kaj je pozdravil prihaja zadnji Asif, ima hudiča veliko potenciala, upajmo, da vidim nekaj, da je in prav tako dobrodošli Andy Flower v novem awatar, desno ne morete obdržati dobre ljudi dol za dolgo.
ruby 1 podlage za oblikovanje hash
Včeraj, ko je šel skozi enega od mojih starih programov, sem našel to napisal me kdaj nazaj:
#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
Da bi ubil nekaj napetosti naj razkrije, da raw_text izgleda
, Desno je bilo izrezano iz paypal potrditvi plačila.
Nad črto, če razdeljene v dele bere bolje:
unescaped_array = CGI.unescape (raw_text). split ("&") unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (nič), če b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Naredimo posamezne korake v pristopu IRB:
IRB (glavni). 009:0> unescaped_array = CGI.unescape (raw_text) split ("&") => ["Uspeh", "mc_gross = 10,00", "protection_eligibility = Neupravičeni", "payer_id = U7PPJJ4TSJ47E", "taksa = 0,00", "payment_date = 09:45:30 10 julij 2009 PDT", "= Do payment_status "] IRB (glavna): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nič), če b.size == 1, b} => [["Uspeh", nič], ["mc_gross", "10,00"] ["protection_eligibility", "Neupravičeni"] ["payer_id", "U7PPJJ4TSJ47E"] ["davek", "0,00"] ["payment_date", "09:45:30 10. julij 2009 PDT"] ["payment_status", "Do"]] IRB (glavna): 014:0> flattened_array = unescaped_array.flatten => ["Uspeh," je nič, "mc_gross", "10,00", "protection_eligibility", "Neupravičeni", "payer_id", "U7PPJJ4TSJ47E", "davek", "0,00", "payment_date", "09:45: 30 10. julij 2009 PDT "," payment_status "," Do "] IRB (glavna): 015:0> hash = Hash [* flattened_array] => {"Davek" => "0,00", "payment_status" => "Do", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "SUCCESS" => nič, "payment_date" = > "09:45:30 10 julij 2009 PDT", "protection_eligibility" => "Neupravičeni"}
BTW, se imenuje * Hlajenje operater v Ruby
Drug način za ustvarjanje hašiš iz 'paleto parov' je uporaba injicirati:
hash = [[1,2], [3,4]] injekcijo ({}). {| rezultat, element | Rezultat [element.first] = rezultat [element.last]; rezultat} Obstaja še en način
Napiši zanko, da bom zapustiti kot uresničevanje z bralci!
Tukaj je nekoliko povezano primerov uporabe za ustvarjanje haše od polja:
IRB (glavna): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Manj :: večja} => {: Manj => [1, 2, 3, 4]: več => [7, 9]}
To lahko storite več stvari, v bistvu je rezultat bloka uporablja kot ključ za ta element, ki izhaja hash.
gmail, Mutt in msmtp fix
Če uporabljate Mutt in SMTP za dostop do Gmaila. Tukaj je (slaba) novica. Kul fantje na Googlu spet spremenila potrdilo. Oh, pa si vprašal - kako pa to veš? Enostavno Mutt začel pritožujejo nad slabo spričevalo, ko poskuša uporabiti msmpt, ki zloglasni "msmtp: TLS certifikata preverjanje ni uspelo. Potrdila ni dobil znano izdajatelju" me je pozdravil na zaslonu.
Prestopiti potrditi -
Samo teči po
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
Namesto starega strežnika Thwate zdaj dobiš po v segmentu izdajatelja
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Na srečo je popravek preprost, tukaj je tisto, kar morate storiti na Debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Po tem samo spremeniti vrstico v ste ~ i /. 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
s
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git in Awesome Survey
Tu sta dve povezave za raziskave po GiT (različica nadzorni sistem) in super (upravljalnik oken) skupnosti. Če uporabljate eno od teh, si vzeti nekaj časa, da izpolnite vprašalnik. Misli, da je najpreprostejši način, da prispeva nazaj v programski opremi, ki jo uporabljate.
Tu so povezave:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Opomba - (kot so na teh straneh, ampak na dnu
) -
"Če imate omogočene piškotke, lahko vedno predloži delno izpolnjen vprašalnik in se vrniti na odgovore na kasnejši čas, in ga izpolni kasneje."
Združujejo v zgoščeni vsebini yaml datotek conf
YAML je zelo priročen za pisanje nastavitvene datoteke. Osnovna prednost je, da je se bere kot besedilno datoteko. Ta deluje zelo dobro, če je vaš config datoteka stanovanje (brez hierarhije) in nima ponovitev.
Če je vaš konfiguracije datoteka ponovitev potem je smiselno izločiti tiste elemente in jih ponovno. Kaj hočem reči je to - recimo, da ste napisali konfiguracijsko datoteko izgleda takole:
razvoj: input_location: common_input output_location: dev_location mail: smtp_server: your_server Prijava: your_login geslo: top_secret produkcija: input_location: common_input output_location: dev_location mail: smtp_server: your_server Prijava: your_login geslo: top_secret
Ob predpostavki, zgornjo kodo v / tmp / test.yml tukaj je, kako si lahko preberete v jezikih Python in Ruby
$cat readyml.py
#! / Usr / bin / env python pprint od uvoza pprint kot ot # V Debian morali namestiti python-yaml od yaml uvoz obremenitve, load_all, smetišče hash = obremenitev (odprto ('/ tmp / test.yml')) odstotne točke (hash ["razvoj"])
$ cat readyml.rb
#! / Usr / bin / env ruby zahtevajo želiš PP ' hash = YAML :: obremenitev (File.open ('/ tmp / test.yml). branje) pp hash ['razvoj']
Tu je priročna podloga za različico 1 ruby
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' ali lahko poskusite enako v IRB ali python konzolo.
Upoštevajte, da v zgornji del kode, je vse drugo kot je izhodna lega enako na področju razvoja in proizvodnje delom. To je, če yml vozlišče identifikator gre za reševanje. Ideja je preprosta imajo vrsto privzete vrednosti in jih preglasijo na drugem mestu.
Lahko bi ga potegnite narazen, kot sledi:
zamude: & Privzeta input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret razvoj: <<: * Podrobnosti privzeto produkcija: <<: * Podrobnosti privzeto output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Super, da deluje (tm)!.
Verjetno smo se z njimi trguje nekaj jasnost za malo čarovnijo. Tukaj je majhen razlaga: &, * in <<: in ki je sidro tag lahko razumemo kot vozlišča identifikator, * je vozlišče sklic in <<: pomeni razpršitve dokumentov.
Za več podrobnosti glej bodisi yaml očala ali Izbrani članek
Do sedaj tako dobro, vendar je ulov tukaj, ti zgostitvene združuje so brez rekurzije. Kaj to pomeni je to: recimo, da želite imeti drugačno ime pošiljatelja na pošti v dveh okoljih, vas bo morda zamikalo, da naredite naslednje:
zamude: & Privzeta input_location: common_input output_location: dev_location mail: SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret razvoj: <<: * Podrobnosti privzeto mail: SENDER_NAME: sender_dev produkcija: <<: * Podrobnosti privzeto output_location: prod_location mail: SENDER_NAME: sender_prod
Omogoča pregled
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Ups, kaj je šlo narobe, problem, kot je navedeno zgoraj, je, da hash spajanje ni rekurzivna in hkrati združitev je zamenjala naslov neplačila po pošti proizvodnje, ki ima samo eno tipko. Rešitev / delo okoli je Dogaja še eno stopnjo:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: pošiljatelj smtp_server: your_server Prijava: your_login geslo: top_secret zamude: & Privzeta <<: * Podrobnosti common_settings mail: <<: * Podrobnosti mail_defaults razvoj: <<: * Podrobnosti privzeto produkcija: <<: * Podrobnosti privzeto mail: <<: * Podrobnosti mail_defaults SENDER_NAME: sender_prod
Omogoča preverjanje še enkrat
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Ali ste, da imate še eno raven gnezdenja, pa lahko zagotovo Dogaja še eno raven, potem pa postane nered. Torej, če se ne poskuša pisati rešitev stolpi Hanoju v conf datoteke, je bolje, da restucture conf datoteko kot kopanje v yaml ali kaj drugega. Ampak to je vaš klic vseeno.
Veliki programerji našli enostavne rešitve za kompleksne probleme
Po dolgem času sem lahko našli vir za po-quote
Mladi programerji ustvarjajo enostavne rešitve za enostavne probleme. Senior programerji ustvarili kompleksne rešitve za kompleksne probleme. Veliki programerji našli enostavne rešitve za kompleksne probleme.
To je od eseja, imenovano Lepa Programska oprema Charles Connell.
Še en favorit eden od rudnika je Zen za Python -
Lepo je boljše kot grdo.
Explicit je bolje kot implicitno.
Enostavno je boljši od kompleksa.
Kompleks je bolje kot zapletena.
Stanovanje je bolje kot ugnezdena.
Redko je bolje kot gosta.
Berljivost šteje.
Posebni primeri niso dovolj, da bi posebna kršijo pravila.
Čeprav praktičnost bije čistost.
Napake ne sme nikoli tiho mimo.
Razen če ni izrecno utišani.
V obraz dvoumnosti, zavrne skušnjavi uganiti.
Treba bi bilo eno in po možnosti le en očiten način, da to storite.
Čeprav na ta način morda ne bo jasno, na prvi, razen če ste nizozemščina.
Zdaj je bolje kot nikoli.
Čeprav nikoli ne je pogosto bolje kot * pravico * zdaj.
Če izvedba je težko razložiti, da je to slaba ideja.
Če izvedba ni težko razložiti, je morda dobra ideja.
Imenskih prostorov so eden honking dobra ideja - naredimo več tistih!
-------------------------
in potem je klasična Tao Programiranje
-
krediti so na strani povezano-
Prevedla Geoffrey James
Prepisal Duke Hillard
Posredovati anupam Trivedi in Sajitha Tampi in Meghshyam Jagannath
Re-html-rešitev za virtuali in uredil Kragen Sittler
-
Knjiga 1 - Silent Void
Tako je govoril glavni programer:
"Ko ste se naučili, da ugrabil kodo napake iz pasti okvirja, je
bo čas, da zapusti. "1,1
Nekaj skrivnostnega je nastala, rojen v mirnem prostoru. Čakam samo in
unmoving je hkrati še vedno in še v nenehnem gibanju. Je vir
vseh programov. Ne vem njegovo ime, tako da bom imenujem Tao
Programiranje.Če Tao je super, potem operacijski sistem je odličen. Če je operacijski
Sistem je super, potem prevajalnik je super. Če prevajalnik je super,
se vloga je super. Uporabnik je zadovoljen, in obstaja
harmonija na svetu.Tao Programiranje teče daleč stran in se vrne na veter zjutraj.
1,2
Tao rodila jeziku stroja. Stroj jezik rodila
monter.Monter rodila prevajalnik. Zdaj je 10.000
jeziki.Vsak jezik ima svoj namen, vendar skromno. Vsak jezik izraža
Yin Yang in programske opreme. Vsak jezik ima svoje mesto v Tao.Ampak ne programirajo v COBOL, če ga lahko preprečili.
1,3
V začetku je bil Tao. Tao rodila prostora in časa.
Zato Prostor in čas sta Yin Yang in programiranja.Programerji, ki ne razumela Tao vedno zmanjkuje časa
in prostor za svoje programe. Programerji, ki razumela Tao napotke
imeli dovolj časa in prostora, da izpolnijo svoje cilje.Kako bi lahko bilo drugače?
1,4
Pametno programer je povedal Tao in ga sledi. Povprečna
programer je povedal Tao in išče za to. Neumno programer
je povedal Tao smeje in ob njej.Če ne bi bilo smeha, ne bi bilo Tao.
Najvišje zvoki so najbolj slišati.
V prihodnje je način za umik.
Veliki talent pokaže sam pozno v življenju.
Tudi popoln program, še vedno napake.-------------------------
Knjiga 2 - Stari mojstri
Tako je govoril glavni programer:
"Po treh dneh brez programiranja, življenje postane nesmiselna."
2,1
Programerji starih bili skrivnostni in globoko. Ne moremo doumeti
njihove misli, da vsi delamo, je opisati njihov videz.Zavedati, kot lisica, ki prečka vodo. Opozori, kot splošno na
bojišče. Prijazen, kot hostesa pozdrav svoje goste. Enostavno, kot
uncarved kosi lesa. Nejasen, kot so črne bazenih v zatemnjenih jam.Kdo lahko pove skrivnosti svojih srcih?
Odgovor obstaja samo v Tao.
2,2
Veliki Mojster Turing nekoč sanjal, da je bil stroj. Ko je se je zbudil
je vzkliknil:"Ne vem, ali sem Turing sanjal, da sem stroj, ali
stroj sanjal, da sem Turing! "2,3
Programer iz zelo veliko podjetje računalniške programske opreme šel
konferenco, nato pa vrnil v svoje poročilo upravitelja, rekoč: "Kakšen
od programerji delajo za druga podjetja? Ti obnašal slabo in so bili
Brezskrben z nastopi. Njihova dlaka je dolga in unkempt in njihovi
Oblačila so bila nagubana in stare. Ti strmoglavilo našo gostoljubnost zbirko in jih
je nesramno hrup v moji predstavitvi. "Vodja je dejal: "Še nikoli nisem bi vas poslal v konferenco. Tisti
programerji živijo onkraj fizičnega sveta. Menijo, da življenje nesmiselno,
naključno naključje. Ti pridejo in gredo, ne da bi vedel omejitve.
Brez skrbi, živijo zgolj za svoje programe. Zakaj bi se trudim
s socialnimi konvencijami?"So živi v Tao."
2,4
Novice pozvane mojstra: "Tukaj je programer, ki nikoli ne oblikuje,
dokumenti ali testi svoje programe. Vendar vsi, ki vedo, mu menijo mu eno
najboljši programerji na svetu. Zakaj je to? "Mojster odgovori: "To je programer obvlada Tao. On je šel
presegajo potrebe po načrtovanju, on ne postane jezen, ko je sistem
zruši, vendar se strinja, vesolje, brez skrbi. On je preseglo
potrebe po dokumentaciji, on ni več mar, če še kdo vidi svojo kodo.
On je preseglo potrebe po testiranju, vsak od njegovih programov so kot nalašč
v sebi, miren in eleganten, njihov namen samoumevna. Resnično,
, ki jo je začela skrivnost Tao. "-------------------------
Knjiga 3 - Oblikovanje
Tako je govoril glavni programer:
"Ko je program, ki se preskuša, je prepozno, da bi oblikovanje
spremembe. "3,1
Nekoč je bil človek, ki je šel na razstavi računalniške trgovine. Vsak dan, kot je on
začela, človek povedal policist na vratih:"Sem velik lopov, znana po svojih podvigih kraje v trgovinah. Bodite
forewarned, za tem sejmu ne sme uiti unplundered. "Ta govor motnje v straže močno, saj je bilo na milijone
dolarjev računalniške opreme znotraj, tako da je gledal človeka previdno. Ampak
človek samo hodil od kabine do kabine, pela tiho k sebi.Ko človek ostane, čuvaj ga vzel stran in iskal svojo obleko, ampak
nič ni bilo mogoče najti.Na naslednji dan borze, mož vrnil in je grajal straže
rekel: "Jaz pobegnil z veliko plena včeraj, danes pa bo celo
bolje. "Torej čuvaj ga gledal vse bolj tesno, a brez uspeha.Na zadnji dan v sejmu, lahko policist omejili svojo radovednost
ni več. "Gospod Thief," je dejal: "Jaz sem tako zmeden, ne morem živeti v
mir. Mi prosim razsvetli. Kaj je to, da ste kradli? "Mož se je nasmehnil. "Jaz sem ukradel ideje," je dejal.
3,2
Nekoč je bil glavni programer, ki je napisal nestrukturiranih programov.
novice programer, ki želijo posnemati ga, prav tako začel pisati
nestrukturiranih programi. Ko novice vprašal kapitana oceno njegovega
napredek, mojster mu očitati, da je pisanje nestrukturiranih programov,
besedami: "Kaj je potrebno za poveljnika ni primerna za
novice. Morate razumeti, Tao pred preseganju strukturo. "3,3
Tam je bil nekoč programer, ki je pritrjena na sodišču gospodarja vojne
od Wu. Vojskovodja pozvane, programer: "Katero je lažje oblikovati tudi:
računovodski paket ali operacijski sistem? ""Operacijski sistem,« je odvrnil programer.
Vojskovodja izrekel tudi klicaj za nejeverno. "Zagotovo računovodstvo
Paket je trivialna poleg kompleksnosti operacijskega sistema, "je
je dejal."Ne tako," je dejal programer, "pri oblikovanju računovodski paket,
programer deluje kot posrednik med ljudi, ki imajo drugačno
ideje: kako mora delovati, kako morajo njegovi poročila pojavljajo, in kako je treba
v skladu z davčno zakonodajo. Nasprotno pa je operacijski sistem ni omejen
zunanjih nastopov. Pri oblikovanju operacijski sistem, programer
išče najpreprostejši harmonijo med strojem in idej. To je razlog, zakaj
operacijski sistem je lažje oblikovati. "Vojskovodja iz Wu je prikimal in se nasmehnil. "To je vse dobro in dobro, vendar
, ki je lažje odpravljanje napak? "Programer je brez odgovora.
3,4
Vodja šla na glavni programer in mu pokazal zahteve
dokument za novo uporabo. Vodja vprašal kapitana: "Kako dolgo
bo potrebno oblikovati ta sistem, če bi dodeli pet programerji z njim? ""To bo trajalo eno leto," je dejal poveljnik takoj.
"Vendar moramo ta sistem takoj ali pa še prej! Kako dolgo bo
da če bi dodeli deset programerji z njim? "Programer mojster namrščil. "V tem primeru bo trajalo dve leti."
"In kaj, če mi dodeli sto programerji za to?"
Programer mojster skomignil z rameni. "Potem zasnova ne bo nikoli
zaključena, "je dejal.-------------------------
Knjiga 4 - Coding
Tako je govoril glavni programer:
"Dobro napisana program je sama nebesa, slabo napisan program
sam pekel. "4,1
Program mora biti lahka in okretna, njegove podprogram povezan kot
biseri. Duh in namen programa je treba ohraniti
v celotnem besedilu. Ne sme biti niti premalo ali preveč, niti
nepotrebnih zanke niti neuporabna spremenljivke, niti pomanjkanje strukture niti
velika togost.Program mora slediti `zakon z najmanj presenečenje". Kaj je ta zakon?
To je preprosto, da je program vedno odzove na uporabnika na poti
, ki ga astonishes najmanj.Program, ne glede na to, kako zapleteno je treba delovati kot eno enoto. Program
naj se usmerja v logiki in ne zunanjega videza.Če program ne uspe v teh zahtev, bo v stanju
nered in zmedo. Edini način za odpravo tega je, da znova
program.4,2
Novice vprašal kapitana: "Imam program, ki včasih deluje in
včasih aborts. Sledil sem pravil programiranja, vendar sem
popolnoma nerazumljiva. Kaj je razlog za to? "Poveljnik odgovoril: "Vi ste zmedeni, ker ne razumete Tao.
Samo bedak pričakuje razumno vedenje svojih soljudi. Zakaj ste
jo pričakujete od stroja, ki so konstruirane ljudje? Računalniki simulirajo
determinizem, le Tao je kot nalašč."Pravila programiranja so prehodnega značaja; le Tao je večna. Zato
moraš razmišljati Tao, preden boste prejeli razsvetljenje. ""Ampak, kako bom vedel, ko sem prejel razsvetljenje?" Vprašal
novice."Vaš program bo torej prost pravilno,« je odvrnil, da kapitan.
4,3
Mojster je bil pojasniti naravo Tao na enem od svojih novince. "
Tao je vključeno v vse programske opreme - ne glede na to, kako nepomembno, "je dejal
mojster."Ali je Tao v ročnim kalkulatorjem?« Je vprašal novice.
"To je,« je prišel odgovor.
"Ali je Tao v video igri?" Je nadaljeval novic.
"To je tudi v video igri," je dejal poveljnik.
"In je Tao v DOS-u za osebni računalnik?"
Poveljnik zakašljal in preusmerila svoj položaj nekoliko. "Lekcija je končana
za danes, "je dejal.4,4
Programer princa Wang je kodiranje programske opreme. Njegovi prsti so plesali po
tipkovnica. Program pripravi, ne da bi sporočilo o napaki in program
tekel kot nežen veter."Odlično!" Prince je vzkliknil: »Vaš tehnika je brez napak!"
"Tehnika?" Je dejal programer obrača od svojega terminala: "Kaj sem
upoštevati je Tao - preko vseh tehnik! Ko sem prvič začel programirati I
bi videli pred mano celoten problem v enem mase. Po treh letih sem brez
več videli to maso. Namesto tega sem podprogramov. Zdaj pa vidim ničesar.
Moje celotno bitje obstaja v brezobličnega praznino. Moji čuti so idle. Moj duh,
prosimo, da dela brez načrta, sledi svoj nagon. Skratka, mojega programa
sam piše. Res je, včasih so težki problemi. Vidim jih
prihajajo, sem upočasnil, sem gledal tiho. Potem sem spremeniti eno vrstico kode
in težave izginejo kot puder v idle dima. Nato sem sestaviti
program. Sedim pri miru in pustite veselje dela izpolnite moje bitje. Zaprem
oči za trenutek in potem odjavite. "Prince Wang je rekel: "Bi, da so bile vse moje programerjev kot pametno!"
-------------------------
Knjiga 5 - Vzdrževanje
Tako je govoril glavni programer:
"Čeprav program pa tri vrstice dolgo, nekega dne bo moral biti
ohraniti. "5,1
Dobro razširjenih vrat ne potrebuje olje na svojih tečajih.
Hiter, tekoč tok ne raste stagnira.
Niti dobro niti misli lahko potujejo skozi vakuum.
Programska oprema gnil, če ne uporablja.To so velike skrivnosti.
5,2
Vodja vprašal programer, kako dolgo bi ga lahko do konca
Program, na katerih je delal. "To se bo končal jutri,"
programer takoj odgovoril."Mislim, da ste se nerealno," je dejal vodja "Po resnici, kako
dolgo bo to trajalo? "Programer je za trenutek pomislil. "Imam nekaj značilnosti, ki ga želim
dodati. To bo trajalo vsaj dva tedna, "je končno rekel."Tudi to je preveč pričakovati," je vztrajal vodja, »bom
izpolnjen, če si preprosto mi povej, ko je program končan. "Programer s predlogom strinjala.
Nekaj let kasneje, vodja upokojil. Na poti do svoje upokojitve
kosilo, je odkril programer zaspal na svojem terminalu. Bil je
programiranje vso noč.5,3
Novice programer je enkrat dodeljen kodo preprosto finančni paket.
Novice besno delali več dni, ko pa njegov gospodar pregledati
njegov program, je odkril, da je vsebovala zaslon urednik, sklop
splošni grafika rutine, umetna inteligenca vmesnik, vendar
niti najmanjšega omenja ničesar finančno.Ko mojster vprašal o tem, novinec postal ogorčen. "Ne bodite
tako nestrpni, "je dejal:" Jaz bom dal v finančni stvari na koncu. "5,4
Ali je dober kmet zanemariti tudi pridelek, ki ga je zasajeno?
Ali je dober učitelj spregledati še tako skromno študenta?
Ali je dober oče lahko sam otrok stradati?
Ali je dober programer zavrne ohraniti svojo kodo?-------------------------
Knjiga 6 - Upravljanje
Tako je govoril glavni programer:
"Naj programerji so mnogi managerji in malo - potem bo vse
produktivno. "6,1
Ko menedžerji imajo neskončne srečanja, programerji pišejo iger. Ko
računovodje govoriti o četrtletnih dobičkov, razvoj proračuna bo kmalu
rezati. Ko vodilni znanstveniki govorijo modro nebo, oblaki so na tem, da roll
noterResnično, to ni Tao programiranja.
Ko menedžerji prevzamejo obveznosti, so prezrti igre programi. Ko
računovodje, da dolgega dosega načrtov, harmonijo in red na tem, da je
obnoviti. Ko vodilni znanstveniki rešujejo težave pri roki,
Težave se bodo kmalu rešili.Resnično, to je Tao programiranja.
6,2
Zakaj so programerji ne-produktivno?
Ker je njihov čas zapravili na sestankih.Zakaj so programerji uporniški?
Ker je upravljanje moti preveč.Zakaj so programerji odstopu enega po enega?
Ker so pregorele.Potem ko je delal za slabo upravljanje, ki jih ni več vrednost svoje delo.
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. Vsako
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
je dejal.“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. Št
change in management can harm him. He will not be fired, even if the
project is cancelled. Why is this? He is filled with Tao.————————————————————————–
Book 8 – Hardware and Software
Thus spake the master programmer:
“Without the wind, the grass does not move. Without software, hardware is
useless.”8,1
A novice asked the master: “I perceive that one computer company is much
larger than all others. It towers above its competition like a giant among
dwarfs. Any one of its divisions could comprise an entire business. Why is
this so?”The master replied, “Why do you ask such foolish questions? That company
is large because it is large. If it only made hardware, nobody would buy
it. If it only made software, nobody would use it. If it only maintained
systems, people would treat it like a servant. But because it combines all
of these things, people think it one of the gods! By not seeking to
strive, it conquers without effort.”8.2
A master programmer passed a novice programmer one day. The master noted
the novice's preoccupation with a hand-held computer game. “Excuse me,”
he said, “may I examine it?”The novice bolted to attention and handed the device to the master. "Jaz
see that the device claims to have three levels of play: Easy, Medium, and
Hard,” said the master. “Yet every such device has another level of
play, where the device seeks not to conquer the human, nor to be conquered
by the human.”“Pray, great master,” implored the novice, “how does one find this
mysterious setting?”The master dropped the device to the ground and crushed it underfoot. And
suddenly the novice was enlightened.8,3
There was once a programmer who worked upon microprocessors. “Look at how
well off I am here,” he said to a mainframe programmer who came to visit,
“I have my own operating system and file storage device. I do not have to
share my resources with anyone. The software is self- consistent and
easy-to-use. Why do you not quit your present job and join me here?”The mainframe programmer then began to describe his system to his friend,
saying “The mainframe sits like an ancient sage meditating in the midst
of the data center. Its disk drives lie end-to-end like a great ocean of
machinery. The software is as multifaceted as a diamond, and as convoluted
as a primeval jungle. The programs, each unique, move through the system
like a swift-flowing river. That is why I am happy where I am.”The microcomputer programmer, upon hearing this, fell silent. But the two
programmers remained friends until the end of their days.8.4
Hardware met Software on the road to Changtse. Software said: “You are
Yin and I am Yang. If we travel together we will become famous and earn
vast sums of money.” And so the set forth together, thinking to conquer
the world.Presently they met Firmware, who was dressed in tattered rags and hobbled
along propped on a thorny stick. Firmware said to them: “The Tao lies
beyond Yin and Yang. It is silent and still as a pool of water. It does
not seek fame, therefore nobody knows its presence. It does not seek
fortune, for it is complete within itself. It exists beyond space and
time.”Software and Hardware, ashamed, returned to their homes.
————————————————————————–
Book 9 – Epilogue
Thus spake the master programmer:
“It is time for you to leave.”
————————————————————————–
If you liked these, you may also like to read worse is better
A bit of shell redirection
Here is how we normally do shell redirection
$ ./pgm.sh args >out.txt 2>err.txt
I wanted to modify it a bit and run as follows
$ ./pgm.sh args
with the requirement that output and error should go to some filename computed inside pgm.sh based on args. One illustrative case could be when date is part of args. So you would like stdout to go to say /your/directory/pgm_out_YYYYMMDD.txt 1
The problem with standard way of redirecting N>file.txt ie, associating file descriptor N to file.txt , is that it works only for the newly forked process and not for the current process.
so
$ echo hi 1>out.txt ; echo hii will send hi to out.txt but will print hii to stdout. 2
This is where exec comes to our rescue. If we add exec 1>somefile.txt then output from rest of the script will go to somefile.txt
$./test.sh will redirect hi as well as hii to out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Similarly to redirect stdout as well as stderr we'll do something like this
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Now coming back to original point of redirecting to some file from inside the shell, let's say program computed the filename in some variable OUTFILE, we could have just done exec 1>$OUTFILE
That solves the current problem. But you may like to go through following example which achieves 'random access' of file in shell script. Example is from here
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890
With comments, this code is self explanatory.
-
1 It can also be done by $ ./pgm.sh args >pgm_out`date +%Y%m%d` but idea is to generate this file name based on some logic in program itself.
2 1 in 1>out.txt is redundant but it clarifies here that we are redirecting fd 1
Sony VAIO review
A month back I bought a vaio NS25G and have been planning to write this post since then. This post is primarily notes to self and review of the same. Let's get off the mark quickly -
Post has two parts -
I. Review of hardware
II. Installing debian and things to setup
Since I am not a VAIO marketing guy, I'll start other way round -
Why you may not like to buy this laptop :
- No bluetooth : believe me, in 2009 sony sells laptop without bluetooth. Sure you can use usb stuff but …
- Screen size is 15.4 inches : if you travel a lot then this laptop may not be very handy and also 2.9kg laptop is not exactly the lightest around.
- No HDMI output.
- No separate graphics card and the likes.(and no dedicated video memory
Now , why you may like to buy it :
- This laptop is a damn good desktop. What I mean is this if your requirement is like me – mostly writing programs and trying to use it 25 out of 24 hrs, then with a big screen , extremely comfortable keyboard layout with spacious palm rest and good compute power , it makes a very good combination.
- It L2 cache is 2MB and processor/memory system bus are 800MHz. I don't play games so can't say about that but for anything else but a core 2 duo processor with 2GHz freq is good, this is more than enough.
- From my usage, I see processor mostly clocks at 1.2GHz, and memory usage ~500MB. That just reinforces previous point.
- Battery backup is good, ~2 hrs is what I get.
Just one more thing here – being Sony, it will cost you a bit than other laptops with similar configuration, but that is a call u have to make.
II. Configuring linux (to run out of box ! ) :
It came pre installed with Vista( I think home premium or some fancy name like that). Dungara booted once and created another partition of 150 GB. Debian testing is what I always install and then up(down?)grade to 'unstable' sid.
Things which worked without any problem:
- X - unsurprisingly X server had not problem with starting or resolution. After one of the upgrades X refused to start though, but 'X -configure' generated a conf file which worked pretty well.
- Audio - Audio output and external mic work fine. kernel version 2.6.29-1-686 #1 SMP and alsa version 1.0.17. This is what you get from
$ lspci -v |grep Audio 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Con1.0.17troller (rev 03) - Video cam – just works
- Hibernate to disk and back – no problem
- Wireless - in short – just works.
$ lspci |grep -i wireless
03:13:55 04:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01) .
I think kernel 2.6..27 onwards it works with the stock kernel source. You dont have to install ndiswrapper or things like t
hat. As a note, please say good buy gnome-network-manager and welcome wicd, it is just a gui layer but behind the scene they have fixed lot of config stuff like wpasupplient and more.
What doesn't work -
- Somehow internal mic refuses to work
External mic works fine though. Latest alsa sources did not compile cleanly on debian, so for the time being I bought external Internal mic, will try to dig into it sometime in future though.
Few more misc hints for deiban:
- Package for devnagri font- ttf-indic-fonts
- Package for flash player – flashplugin-nonfree
- Entry in sources.list for mplayer and likes – deb http://www.debian-multimedia.org sid main
- Entry in sources.list for e17 – deb http://debian.alphagemini.org/ unstable main
- Entry in sources.list for skype – http://download.skype.com/linux/repos/debian/ stable non-free
oneliner for increasing and decreasing the brightness -
[root]prashant@vaio09:12 PM$ cat bin/incbrightness.sh
#!/usr/bin/env bash
echo $[1+`cat /sys/class/backlight/acpi_video0/brightness `] >/sys/class/backlight/acpi_video0/brightness
you'll have to put this in sudo though.
and to decrease change + to – and … you get the idea, right !
A bit more, if you use enlightenment(e17) here are few more hints -
[enlightenment key bindidings]
You can use following key code and mapping
mute :
KEY="Keycode-160" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master toggle"
hibernate :
KEY="Keycode-165" ACTION="exec" PARAMS="sudo /usr/sbin/hibernate-disk"
volume decrease :
KEY="Keycode-174" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2-"
volume increase:
KEY="Keycode-176" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2+"
increase brightness :
KEY="Keycode-212" ACTION="exec" PARAMS="sudo /root/bin/incbrightness.sh"
decrease brightness
KEY="Keycode-101" ACTION="exec" PARAMS="sudo /root/bin/decbrightness.sh"



































