undersökning, ping, pubsub, pubsubhub, pubsubhubbub
Om du är skeptisk, det finns en metod i galenskapen ovan, i titeln på inlägget. I tech kretsar är det osannolikt att du inte har hört talas om pubsubhubbub. I snabba månaderna har det varit en av de tre pratade om saker. De två andra är homomorphic kryptering och Google wave [ 1. ]. För att återgå till nuvarande post - termer i titeln anger hur du får innehållet från andra människor. Följande uppgifter blir mer tydligt, om du tänka dig saker händer när det gäller bloggar, trots att de begreppsmässigt inte är begränsade till bloggar.
Polling avser scenario där kunderna frågar servern om något nytt har kommit upp. Hur ofta frågar efter uppdateringar kommer alltid att vara ett problem med polling alltför ofta eller för sällan, men som en läsare påpekade här att en stor, sak med polling är att servern inte behöver hålla staten.
Ping hänvisar till fall där då skicka en artikel, du (eller din programvara) också uppdateras några populära (central) uppdatering tjänster. Lite bakgrundsinformation här .
Nästa är pubsub som står för publicera / prenumerera en av de tidigaste pitch för den gjordes här av Evan Henshaw-Plath och Kellan Elliott-McCrea (72 bilder, men värt att gå igenom). Övertygande exempel de gav mot var detta - på ett visst datum, FriendFeed kröp Flickr 2,9 miljoner gånger för att få de senaste bilderna från 45,754 användare, varav 6.721 hade besökt Flickr i dessa 24 timmar och skulle ha "potentiellt" laddat upp en bild. Observera att vad de föreslog var inte en ny teknik, eftersom de pekar ut "revolutionerande nytt 20 år gammal teknik". Om du gör det för bloggar sedan ett av de största problemen med XMPP - Förekomst uppgifter overhead, som kan vara så hög som 60-70% kan minskas en hel del.
pubsubhub står för publicerar Prenumerera nav och pubsubhubbub är ett protokoll, kärna utgörs av idén om pubsubhub. Där förlagen (säg bloggare) uppdatera navet som (kan vara mer än en nav, som talar med varandra) finns "någonstans i molnet", enligt protokollet detta kan skjuta eller dra enligt protokollet, men nästa länk i kedjan, navet klient (säg läsare) att det alltid är tryck-modellen. Denna sida är bra utgångspunkt för pubsubhubbub, översikt bilderna är bra. Ända vältaliga Anil Dash beskriver det här som tryckknapp webben.
Två andra relaterade läsningar är webhooks vilket i grunden http återbesök. Github använder det, så gör paypal för asynkrona meddelanden om betalning IPN . Så gör många andra. Relaterad Konceptet rsscloud vilket återigen är pubsub nav. Följ den här länken för mer information.
Du kanske undrar vad är det för mening att skriva alla dessa här, finns det två 1. Dessa saker är värt att veta, minimalt minst och 2. Denna blogg är pubsubhubbub aktiverat nu via appspot hub med denna wordpress plugin och foder är också pubsubhubbub aktiveras via FeedBurner, länk här
-
[ 1 ]. - Bra inledande läsa för fullt homomorphic kryptering är här artikel av Bruce Schneier, och det tal är mer eller mindre enda källan till Google Wave.
-UPDATE - Det här inlägget förklarar hur kravet på allmän server för återuppringning kan bearbetas runt för stationära klienter genom att använda XMPP gateway (pubsubhubbub).
Lite av enheten
Efter att ha läst den här artikeln om Lock gratis buffertar och ser användning av CAS (jämför och swap), kände jag mig som att publicera den assemblerkod att göra detsamma. Använd fall över det var att skriva en alternativ metod och kallar det från Java (tillbaka i 1,5, då samtidiga datastrukturer i Java var mer eller mindre obefintlig). Utan vidare, jag släppa loss koden på dig
. Första är för CAS och andra är för beräkning GCD använda Euklides algoritm (detta kan hittas på många ställen och handledning samt).
Kompilera och köra instruktionerna gcc file_name.c ; ./a.out
Jämför och Swap
# Include# Include / / Exchange - newValue är comperand gamla / förväntat värde / * * Funktion faktiskt gör följande sak - om värdet på * dest är lika med oldvalue sedan ersätta den med newValue annars lämna den oförändrad: inte alla dessa Atomically * * Det finns två alternativ för returvärde * 1.is initiala värdet av * dest och lämna bördan att kalla fxn att jämföra den med oldval * 2. gör det hit och returnera 0 eller 1, bör detta vara effektivare ** / / * Senare ändrar det till 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 result = 1 ;/ * 1 visar att CAS lyckades och 0 visar att det misslyckades * / / * BTW behöver sätta cc för flagga dunkardags! * / __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" / * bör låset på samma linje * / "JZ görs \ n \ t" "MOVL $ 0,% 1 \ n \ t" "KLART: \ n \ t" : "= M" (DEST), "= g" (resultat) : "G" (oldvalue), "g" (newValue), "m" (dest) : "% EAX", "% ebx", "ECX", "CC" ); printf ("(% d,% d,% d)", * DEST, oldvalue, newValue); RETURN RESULT; } / * TODO * Skriva en annan asm fxn som sätter ovan fxn i en while-slinga och fortsätta att försöka om det inte lyckas * / int main () { int en = 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 ("ändra värdet * c till% 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)); returnera 0; }
Formatera anteckningar - verkar som att WP syntax highlighter är att lägga till i slutändan, ignorera det.
GCD
# Includeint gcd (int a, int b) { int resultat; / * Beräkna största gemensamma nämnaren att använda Euklides algoritm * / __asm__ __ volatile__ ("MOVL% 1,%% EAX," "MOVL% 2,%% EBX;" "Forts: cMpl 0 $,%% EBX;" "Je KLAR;" "Xorl%% EDX,%% EDX," "Idivl%% EBX;" "MOVL%% EBX,%% EAX," "MOVL%% EDX,%% EBX;" "JMP forts," "KLAR: MOVL%% EAX,% 0;" "= g" (Resultat): "g" (en), "g" (b) ); RETURN RESULT; } int main () { int första, andra; printf ("Ange två heltal:"); scanf ("% d% d", & första, och andra); printf ("GCD av% d &% d är% d \ n" första, andra, gcd (första, andra)); returnera 0; }
Cricket värld väntar en ny världsordning
Efter en rad spänner fem tester och cirka två månader, England återvunna aska.
Låt oss tala om det vinnande laget först - deras mellersta order är "genomsnittlig" om du inte vill kritisk. Greame Swann bidrag med slagträet räknar inte mindre än bidraget med bollen. Stuart Broad - bästa allround var icke starter för 5: e testet. Andrew Strauss var den enda konsekventa slagman och Jimmy Anderson var den enda konsekventa kastare.
Poängen här är inte att kritisera resultaten av det vinnande laget, men att sätta i perspektiv av att trots alla dessa förlorade Australien. du måste tänka några sekunder om man blir tillfrågad att nämna sitt bästa bowlare. Rätt var det BW Hilfenhaus. Hauritz överträffade everbody förväntningar men var ändå inte bra nog för att väljas för två av de fem proven. South Africa blev aldrig en värld visp utan världsklass spinner kan Australien hoppas på att inte vara en utan ett tillräckligt bra en åtminstone. Magician lämnade scenen och det ser inte ut som konst längre, glöm magi. Ponting står högt bland mindre dödliga och Michael Clarke står upp väldigt ofta, men det gör dem till en grupp med några väldigt bra spelare och inte en mycket bra lag.
Aska 2009 kommer att bli ihågkommen för Andrew Flintoff s sista Ashes, Stuart Bred ankomst som en allt rundare (om han lägger lite mer aska folklore till hans lovande start), och en av de mest talande debut-talet genom tiderna genom att Trott men det kommer också att vara ihågkommen som den punkt där om och men om Australien överlägsenhet slutligen gå till vila, det är över. Inte Missförstå mig att de fortfarande kan gräva Mike Hussey och Stuart Clark, men du känner bidrag tiderna storheter när de går saknas. Ibland kommer påminna dig om sig själva i IPL men de kan inte ersättas. Låt oss känner oss välsignade för att ha sett Warne, McGrath och Gilchrist spela tillsammans och som stöds av Waughs, Ponting, Hyden, Martin och Langer.
Framöver kommer Sydafrika alltid att förbli ett mycket bra lag, men de behöver för att vinna semifinalen och vara mer konsekvent runt om i världen, kommer Pakistan förblir gåtfullt lysande, kommer indiska unga kanoner förmodligen hitta det svårt att fylla skorna av extraordinära föregångare. Sri Lanka bör fortsätta att visa glimtar av konst i hantverk. Men kan vi få vänta någon gång innan du får ett allt ut dominant laget eller innan en kapten klagar över brist på konkurrens, som Steve Waugh en gång gjorde.
På en närstående anmärkning - låt oss välkomna den kommande baksidan av Asif har han ett helvete stor potential, låt oss hoppas att se några av det och också välkomna Andy Flower i den nya awatar, rätt du kan inte hålla goda män ner för länge.
ruby ett foder för att skapa hash
Igår samtidigt gå igenom en av mina gamla program, jag hittade den här skriven av mig någon gång tillbaka:
#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
Att döda några av spänning låt mig avslöja att raw_text ser ut
, Höger har skurits från PayPal betalning bekräftelse.
Ovanför linjen om bryts i delar lyder bättre:
unescaped_array = CGI.unescape (raw_text). Split ('&') unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (noll) vid b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Låt oss göra enskilda stegen i IRK:
IRB (huvud):. 009:0> unescaped_array = CGI.unescape (raw_text) Split ('&') => ["Success", "mc_gross = 10,00", "protection_eligibility = Obehörig", "payer_id = U7PPJJ4TSJ47E", "skatt = 0,00", "payment_date = 09:45:30 Jul 10, 2009 PDT", "payment_status = väntan "] IRB (huvud): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (noll) om b.size == 1, b} => [["Success", noll], ["mc_gross", "10,00"], ["protection_eligibility", "Obehörig"], ["payer_id", "U7PPJJ4TSJ47E"], ["skatt", "0,00"] , ["payment_date", "09:45:30 Jul 10, 2009 PDT"], ["payment_status", "I väntan"]] IRB (huvud): 014:0> flattened_array = unescaped_array.flatten => ["Success", noll, "mc_gross", "10,00", "protection_eligibility", "Obehörig", "payer_id", "U7PPJJ4TSJ47E", "skatt", "0,00", "payment_date", "09:45: 30 Jul 10, 2009 PDT "," payment_status "," I väntan "] IRB (huvud): 015:0> hash = Hash [* flattened_array] => {"Skatt" => "0,00", "payment_status" => "I väntan", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "Success" => noll, "payment_date" = > "09:45:30 Jul 10, 2009 PDT", "protection_eligibility" => "Obehörig"}
BTW, är * kallas splat operatören i ruby
Ett annat sätt att skapa hash från "array av par" är att använda injicera:
hash = [[1,2], [3,4]] injicera ({}). {| Resultat, element | Resultat [element.first] = resultat [element.last]; resultat} Det är ytterligare ett sätt
Skriv en slinga, som jag lämnar som en övning för läsarna!
Här är lite obesläktad användningsfall för att skapa hash från matriser:
IRB (huvud): 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öra fler saker, i princip resultatet av blocket används som nyckel för det elementet i den resulterande hash.
gmail, mutt och msmtp fix
Om du använder mutt och SMTP få tillgång till Gmail. Här är en (dålig) nyheter. Coola killar på Google ändras igen certifikat. Åh, har du frågar - hur gör det veta det? Enkel mutt började klaga på dåliga certifikat när du försöker använda msmpt, ökända "msmtp: TLS Kontrollen misslyckades:. Intyget har inte fått en känd emittentens hälsade på mig på skärmen.
Korsa bekräfta -
Bara köras efter
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
I stället för gamla Thwate Server nu får du följa i emittenten segment
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Lyckligtvis fix är enkelt, här är vad du behöver göra på Debian
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
Efter detta bara ändra följande rad i dig ~ för /. 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
till
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
Git och Enorm Survey
Här är två länkar för undersökning av git (versionshanteringssystem) och fantastisk (fönsterhanterare) samhället. Om du använder någon av dessa, ta ut lite tid att fylla i frågeformuläret. Tänk på det som det enklaste sättet att bidra till den programvara du använder.
Här är länkarna:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Obs - (Som finns på dessa sidor, men i botten
) -
"Om du har aktiverat cookies kan du skicka alltid delvis fylld undersökning och återgå till dina svar vid senare tidpunkt, fylla i det senare."
Sammanfoga hashes i yaml conf-filer
Yaml är ganska praktiskt för att skriva konfigurationsfiler. Primär fördel är att, läser det som textfil. Detta fungerar riktigt bra om din konfigurationsfil är platt (ingen hierarki) och har inga repetitioner.
Om konfigurationer filen har repetitioner då är det logiskt att skilja ut dessa element och återanvända dem. Vad jag menar är - låt oss säga att du din konfigurationsfil ser ut så här:
utveckling: input_location: common_input output_location: dev_location mail: smtp_server: Your_Server login: your_login Lösenord: top_secret produktion: input_location: common_input output_location: dev_location mail: smtp_server: Your_Server login: your_login Lösenord: top_secret
Förutsatt ovanstående kod i / tmp / test.yml här är hur du kan läsa i Python och Ruby
$cat readyml.py
#! / Usr / bin / env python från pprint import pprint som pp # I debian behöver du installera python-yaml från yaml import belastning, load_all, dumpa hash = last (open ("/ tmp / test.yml ')) PP (hash ["utveckling"])
$ cat readyml.rb
#! / Usr / bin / env ruby kräver "PP" hash = yaml :: last (File.open ('/ tmp / test.yml). läsa) PP hash ["utveckling"]
här är en praktisk en liner för Ruby version
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' eller så kan du prova samma sak i IRB eller python konsol.
Notera att i ovanstående kodsträngen är allt annat än produktionen placering är densamma i utveckling och produktion del. Det är där yml nodidentifieraren kommer att rädda. Idén är enkel har en uppsättning standardvärden och åsidosätter dem på annan plats.
Du kan dra isär enligt följande:
defaults: & standard input_location: common_input output_location: dev_location mail: SENDER_NAME: avsändare smtp_server: Your_Server login: your_login Lösenord: top_secret utveckling: <<: * Standard produktion: <<: * Standard output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Bra, det fungerar (tm)!.
Förmodligen har vi handlas viss klarhet för lite magi. Här är ett litet förklaring: &, * och <<: & som är ankartaggen kan förstås som nod identifierare, är * nod referens och <<: står för hash kopplingen.
För mer information se antingen yaml specifikationer eller wikipedia
Så långt så bra men det finns en hake här, dessa hash smälter samman är inte rekursiva. Vad det betyder är detta: låt oss säga att du vill ha olika namn för avsändare post i två miljöer kan du frestas att göra följande:
defaults: & standard input_location: common_input output_location: dev_location mail: SENDER_NAME: avsändare smtp_server: Your_Server login: your_login Lösenord: top_secret utveckling: <<: * Standard mail: SENDER_NAME: sender_dev produktion: <<: * Standard output_location: prod_location mail: SENDER_NAME: sender_prod
Lets kontrollera
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
Oj, något gick fel, problem som nämnts ovan är att hash sammanslagning inte är rekursiv och medan slå ihop den utbytt post om standard per post av produktionen som har endast en nyckel. Lösning / arbete runt är att rulla ut en mer jämn:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: avsändare smtp_server: Your_Server login: your_login Lösenord: top_secret defaults: & standard <<: * Common_settings mail: <<: * Mail_defaults utveckling: <<: * Standard produktion: <<: * Standard mail: <<: * Mail_defaults SENDER_NAME: sender_prod
Lets kontrollera igen
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
Sa du att du har en större grad av häckande, och du kan definitivt rulla ytterligare en nivå, men sedan blir det en enda röra. Så, om du inte försöker skriva lösning torn Hanoi i en conf-fil, är det bättre att restucture conf fil än att gräva i yaml eller något annat. Men det är ditt samtal ändå.
Stora programmerare hitta enkla lösningar på komplexa problem
Efter en lång tid kunde jag hitta källan till följande citat-
Junior programmerare skapa enkla lösningar på enkla problem. Senior programmerare skapa komplexa lösningar på komplexa problem. Stora programmerare hitta enkla lösningar på komplexa problem.
Det är från en essä som heter Beautiful Software av Charles Connell.
En annan favorit en av mina är Zen av Python -
Vacker är bättre än fult.
Explicit är bättre än implicit.
Enkelt är bättre än komplex.
Complex är bättre än komplicerat.
Flat är bättre än nästlade.
Glesa är bättre än tät.
Läsbarhet räknas.
Särskilda fall inte särskilt tillräckligt för att bryta mot reglerna.
Även praktiska slår renhet.
Fel ska aldrig gå tyst.
Inte uttryckligen tystas.
Mot bakgrund av tvetydighet vägrar frestelsen att gissa.
Det bör finnas en och företrädesvis endast en-uppenbart sätt att göra detta.
Även på det sättet kanske inte är självklart i början om du inte är holländska.
Nu är bättre än aldrig.
Även aldrig är ofta bättre än * höger * nu.
Om genomförandet är svårt att förklara, det är en dålig idé.
Om genomförandet är lätt att förklara, kan det vara en bra idé.
Namnutrymmen är en tutande bra idé - låt oss göra mer av dem!
-------------------------
och sedan finns det klassiker Tao of Programming
-
krediter som på den länkade webbplatsen-
Översatt av Geoffrey James
Kopierat av Duke Hillard
Sänds av Anupam Trivedi, Sajitha Tampi och Meghshyam Jagannath
Re-html-ized och redigerad av Kragen Sittler
-
Bok 1 - The Silent Void
Således talade befälhavaren programmeraren:
"När du har lärt sig att rycka felkoden från fällan ramen det
kommer att vara dags för dig att lämna. "1,1
Något mystiskt bildas, född i den tysta tomrummet. Väntar ensam och
orörlig, är det på en gång ändå och ändå i ständig rörelse. Det är källan
av alla program. Jag vet inte dess namn, så jag kommer att kalla det Tao
Programmering.Om Tao är bra, då operativsystemet är stor. Om operativsystemet
Systemet är bra, då kompilatorn är stor. Om kompilatorn är stor,
då ansökan är stor. Användaren är nöjd och det finns
harmoni i världen.Tao of Programming flyter långt bort och avkastning på vinden på morgonen.
1,2
Tao födde maskinkod. Maskinkod födde
assembler.Den assembler födde kompilatorn. Nu finns 10 tusen
språk.Varje språk har sitt syfte, men ödmjuk. Varje språk uttrycker
Yin och Yang av programvara. Varje språk har sin plats i Tao.Men inte programmet inte i COBOL om du kan undvika det.
1,3
I början var Tao. Tao födde tid och rum.
Därför tid och rum är Yin och Yang programmering.Programmerare som inte förstå Tao är alltid ont om tid
och utrymme för sina program. Programmerare som förstå Tao alltid
har tillräckligt med tid och utrymme för att uppnå sina mål.Hur skulle det kunna vara annorlunda?
1,4
Den vise Programmeraren berättas om Tao och följer den. Den genomsnittliga
programmeraren berättade om Tao och söker för det. Dåren programmeraren
berättas om Tao och skrattar åt det.Om det inte vore för skratt, skulle det inte finnas någon Tao.
De högsta ljud är svårast att höra.
Framöver är ett sätt att dra sig tillbaka.
Stor talang visar sig sent i livet.
Även en perfekt program har fortfarande buggar.-------------------------
Bok 2 - De gamla mästarna
Således talade befälhavaren programmeraren:
"Efter tre dagar utan programmering, blir livet meningslöst."
2,1
Programmerarna av gammal var mystisk och djup. Vi kan inte förstå
sina tankar, så allt vi gör är beskriver sitt utseende.Aware, som en räv korsar vattnet. Ringer, som en allmän på
slagfält. Kind, som en värdinna hälsar sina gäster. Enkel, liksom
uncarved block av trä. Ogenomskinlig, som svarta pooler i mörka grottor.Vem kan berätta hemligheter deras hjärtan och sinnen?
Svaret finns bara i Tao.
2,2
Grand Master Turing drömde en gång att han var en maskin. När han vaknade han
utbrast:"Jag vet inte om jag Turing drömmer att jag är en maskin, eller en
Maskinen drömmer att jag Turing! "2,3
En programmerare från ett mycket stort dataföretag gick till en programvara
konferens och återvände sedan rapportera till sin chef och sade: "Vad för slags
av programmerare arbetar för andra företag? De uppförde sig illa och var
obekymrade med framträdanden. Deras hår var långt och ovårdade och deras
kläder var skrynkliga och gamla. De kraschade vår gästfrihet suite och de
gjorde ohyfsade ljud under min presentation. "Chefen sa: "Jag skulle aldrig ha skickat dig till konferensen. De
programmerare lever bortom den fysiska världen. De anser livet absurt, ett
oavsiktlig slump. De kommer och går utan att veta begränsningar.
Utan en vård de lever bara för sina program. Varför skulle de bry sig
med sociala konventioner?"De lever i Tao."
2,4
En novis frågade Mästaren: "Här är en programmerare som aldrig designar,
dokument eller tester sina program. Men alla som känner honom ser honom som en av
bästa programmerare i världen. Varför är det här? "Mästaren svarar: "Det programmeraren har bemästrat Tao. Han har gått
bortom behovet av design, att han inte blir arg när systemet
krascher accepterar men universum utan oro. Han har gått längre än
behovet av dokumentation, han inte längre bryr sig om någon annan ser sin kod.
Han har gått längre än det behövs för testning, vart och ett av hans program är perfekt
inom sig själva, fridfull och elegant, deras syfte självklart. Sannerligen,
Han har gått mysterium Tao. "-------------------------
Boka 3 - Design
Således talade befälhavaren programmeraren:
"När programmet testas, är det för sent att göra design
förändringar. "3,1
Det var en gång en man som gick till en dator mässa. Varje dag som han
in, berättade mannen vakten vid dörren:"Jag är en stor tjuv, känd för mina bedrifter för snatteri. Var
förvarnad, skall för denna handel visar inte fly unplundered. "Detta tal störde vakten mycket, eftersom det fanns miljoner
dollar i datorutrustning inne, så han såg mannen noggrant. Men
Mannen vandrade bara från monter till monter, nynna tyst för sig själv.När mannen lämnade tog vakten honom åt sidan och sökte sina kläder, men
ingenting var att finna.På nästa dag mässan, återvände mannen och bannade vakten
säger: "Jag flydde med en stor byte igår, men idag kommer att bli ännu
bättre. "Så vakten såg honom allt närmare, men till ingen nytta.På den sista dagen av mässan kunde vakten hålla hans nyfikenhet
inte längre. "Sir Thief", sade han, "jag är så förbryllad, jag kan inte leva i
fred. Vänligen upplysa mig. Vad är det som ni stjäla? "Mannen log. "Jag stjäla idéer", sade han.
3,2
Det en gång var en mästare programmerare som skrev ostrukturerade program. En
nybörjare programmerare, i syfte att imitera honom, började också skriva
ostrukturerade program. När nybörjare bad befälhavaren att utvärdera sin
framsteg, kritiserade befälhavaren honom för att skriva ostrukturerade program,
säger, "vad som är lämpligt för befälhavaren inte är lämplig för
nybörjare. Du måste förstå Tao innan överskrider struktur. "3,3
Det var en gång en programmerare som fästes till domstolen i krigsherren
Wu. Krigsherren frågade programmeraren: "Vilket är lättare att utforma: en
redovisning paket eller ett operativsystem? ""Ett operativsystem", svarade programmerare.
Krigsherren uttalade ett utrop av misstro. "Säkerligen en redovisning
Paketet är trivialt intill komplexiteten i ett operativsystem ", säger han
sa."Inte så", sade programmeraren "när man utformar en redovisning paket,
programmeraren fungerar som medlare mellan människor med olika
idéer: hur det måste fungera, hur dess rapporter skall visas, och hur det ska
överensstämma med skattelagstiftningen. Däremot är ett operativsystem inte begränsat
av externa framträdanden. Vid utformning av ett operativsystem, programmeraren
söker enklaste harmoni mellan maskin och idéer. Det är därför ett
operativsystem är lättare att konstruera. "Krigsherren Wu nickade och log. "Det är allt gott och väl, men
som är lättare att felsöka? "Programmeraren svarade inte.
3,4
En chef gick till befälhavaren programmerare och visade honom de krav
dokument för en ny ansökan. Chefen frågade Mästaren: "Hur länge
kommer det att ta att utforma detta system om jag tilldelar fem programmerare till det? ""Det kommer att ta ett år", sade befälhavaren snabbt.
"Men vi behöver detta system omedelbart eller ens tidigare! Hur lång tid tar det
ta om jag tilldela tio programmerare till det? "Befälhavaren programmerare rynkade pannan. "I så fall kommer det att ta två år."
"Och om jag tilldelar hundra programmerare till det?"
Befälhavaren programmerare ryckte på axlarna. "Då designen kommer aldrig att bli
klar ", sade han.-------------------------
Bok 4 - Kodning
Således talade befälhavaren programmeraren:
"En välskriven programmet är dess egen himmel, en dåligt skriven programmet är
sin egen helvetet. "4,1
Ett program ska vara lätt och smidig, dess subrutiner ansluten som en
pärlband. Andan och avsikten med programmet bör behållas
överallt. Det bör varken vara för lite eller för mycket, varken
onödiga loopar eller meningslösa variabler, ingen brist på struktur eller
överväldigande styvhet.Ett program bör följa det så kallade lagen om minst Häpnad ". Vad är detta lag?
Det är helt enkelt att programmet alltid ska svara på användaren i vägen
att förvånar honom minst.Ett program, oavsett hur komplicerad, bör fungera som en enda enhet. Programmet
bör ledas av logiken inom snarare än av yttre utseenden.Om programmet inte i dessa krav kommer det vara i ett tillstånd av
oordning och förvirring. Det enda sättet att rätta till detta är att skriva om
programmet.4,2
En novis frågade Mästaren: "Jag har ett program som någon gång driver och
ibland avbryter. Jag har följt reglerna för programmering, men jag
helt bafflad. Vad är orsaken till detta? "Befälhavaren svarade: "du är förvirrad eftersom du inte förstår Tao.
Endast en dåre förväntar rationellt beteende från sina medmänniskor. Varför tror du
förväntar sig det från en maskin som människan har konstruerat? Datorer simulera
determinism, endast Tao är perfekt."Reglerna för programmering är övergående, bara Tao är evig. Därför
du måste fundera Tao innan du får upplysning. ""Men hur vet jag när jag har fått upplysning?" Frågade
nybörjare."Ditt program kommer då att fungera", svarade mästaren.
4,3
En mästare har förklarar vilken typ av Tao av att en av hans noviser. "The
Tao är inbakat i alla program - oavsett hur obetydlig ", säger
befälhavaren."Är Tao i en handhållen miniräknare?" Frågade nybörjare.
"Det är" kom svaret.
"Är Tao i ett spel?", Fortsatte nybörjare.
"Det är ännu i ett spel", sa mästaren.
"Och är Tao i DOS för en dator?"
Befälhavaren hostade och skiftade sin position något. "Lärdomen är över
för idag ", sade han.4,4
Prins Wangs programmerare var kodning programvara. Hans fingrar dansade på
tangentbord. Programmet kompileras utan ett felmeddelande och programmet
sprang som en mild vind."Excellent!" Prinsen utropade: "Din teknik är felfri!"
"Teknik", sade programmeraren vända från sin terminal "Vad jag
följer är Tao - över alla tekniker! När jag först började att programmera I
skulle se framför mig hela problemet i ett massa. Efter tre år har jag inga
längre tid såg denna massa. Istället använde jag subrutiner. Men nu ser jag ingenting.
Hela min varelse existerar i en formlös tomrum. Mina sinnen är i viloläge. Min ande,
fri att arbeta utan plan, följer sin egen instinkt. Kort sagt, mitt program
skriver självt. Sant, ibland finns det svåra problem. Jag ser dem
kommer jag sakta ner, titta jag tyst. Då ska jag ändra en enda rad kod
och de svårigheter försvinna som puffar för tomgång rök. Jag sammanställa sedan
programmet. Jag sitter stilla och låta glädjen av arbetet fylla min varelse. Jag avslutar min
ögon för en stund och sedan logga ut. "Prince Wang sade: "Skulle att alla mina programmerare var klok!"
-------------------------
Bok 5 - Underhåll
Således talade befälhavaren programmeraren:
"Även om ett program, men tre rader lång dag kommer det att vara
bibehålls. "5,1
En väl använt dörren behöver ingen olja på sina gångjärn.
En snabb-flödande strömmen växer inte stillastående.
Varken ljud eller tankar kan färdas genom ett vakuum.
Mjukvara ruttnar om den inte används.Dessa är stora mysterier.
5,2
En chef frågade en programmerare hur lång tid det skulle ta honom för att avsluta
program där han arbetade. "Det kommer att vara färdig i morgon," den
programmeraren svarade omgående."Jag tror att du är orealistiskt", sade chefen: "Sanningsenligt, hur
lång tid tar det? "Programmeraren tänkte efter en stund. "Jag har några funktioner som jag vill
tillägga. Detta kommer att ta minst två veckor ", sade han till slut."Även det är för mycket att förvänta sig", insisterade chef, "jag kommer att vara
nöjd om du bara tala om för mig när programmet är klar. "Programmeraren gick med på detta.
Flera år senare drog chefen. På väg till sin pensionering
lunch, upptäckte han programmeraren sover på sin terminal. Han hade varit
programmering hela natten.5,3
En novis programmerare var en gång tilldelats koda ett enkelt ekonomiskt paket.
Nybörjare arbetade ursinnigt för många dagar, men när hans herre omdömet
sitt program, upptäckte han att den innehöll en textredigeraren, en uppsättning
generaliserad grafik rutiner, en artificiell intelligens gränssnitt, men
inte den minsta omnämnandet av något ekonomiskt.När befälhavaren frågade om detta, blev nybörjare upprörd. "Var inte
så otålig, "sade han," Jag lägger i det finansiella grejer så småningom. "5,4
Struntar en bra bonde en gröda han har planterat?
Har utsikt över en bra lärare även de mest ödmjuka student?
Tillåter en bra pappa ett barn att svälta?
Vägrar en bra programmerare för att behålla sin kod?-------------------------
Bok 6 - Ledning
Således talade befälhavaren programmeraren:
"Låt programmerare är många och de chefer få - då alla kommer att
produktiv. "6,1
När chefer håller ändlösa möten, programmerare skriver spel. När
revisorer talar om kvartalsvisa vinster, är utvecklingen budget på väg att
skall skäras. När seniora forskare talar blå himmel, molnen är på väg att rulla
i.Sannerligen, detta är inte Tao of Programming.
När chefer gör åtaganden är spelprogram ignoreras. När
revisorer att göra långsiktiga planer, harmoni och ordning håller på att bli
återställas. När seniora forskare itu med de problemen på sidan
problem kommer snart att lösas.Sannerligen, detta är Tao of Programming.
6,2
Varför är programmerare icke-produktiva?
Eftersom deras tid slösas på möten.Varför är programmerare upproriska?
Eftersom ledningen stör för mycket.Varför är programmerare avgå en efter en?
Eftersom de är utbränd.Efter att ha arbetat för dålig förvaltning, att de inte längre värdera sina jobb.
6,3
En chef var på väg att avfyras, men en programmerare som arbetade för honom
uppfann ett nytt program som blev populära och sålde bra. Som ett resultat av detta
manager behöll sitt jobb.Chefen försökte ge programmeraren en bonus, men programmeraren
vägrade den sade: "Jag skrev programmet eftersom jag trodde att det var en
intressant koncept, och därför förväntar jag mig ingen belöning. "Chefen över denna anmärkte, "Detta programmerare, även om han har
en position av små självkänsla, förstår väl rätt skyldighet en
anställd. Låt oss verka honom till den upphöjda positionen för ledningen
konsult! "Men när höra detta, programmeraren gång vägrade och sade: "Jag existerar så
som jag kan programmera. Om jag skulle främjas, skulle jag göra något annat än avfall
allas tid. Kan jag gå nu? Jag har ett program som jag arbetar på. "6,4
En chef gick till hans programmerare och sade till dem: "När det gäller ditt arbete
timmar: du kommer att få komma in klockan nio på morgonen och lämna
klockan fem på eftermiddagen. "På detta blev alla av dem arga och flera
avgick på plats.Så chefen sa: "Okej, i så fall kan du ställa in din egen
arbetstid, så länge du är klar med dina projekt i tid. "The
programmerare, nu nöjd, började komma in vid middagstid och arbeta till wee
timmar på morgonen.-------------------------
Boka 7 - Corporate Wisdom
Således talade befälhavaren programmeraren:
"Du kan visa ett program för en företagsledare, men du kan inte
göra honom datorer. "7,1
En novis frågade mästaren: "I öster finns ett stort träd-struktur
att män kallar `Corporate Headquarters. Det är uppblåst ur form med
vice ordförande och revisorer. Det ger ut en mängd PM, var
säger `Go, därav! eller `Go, hit!" och ingen vet vad som menas. Varje
år nya namn sätts på grenarna, men alla till ingen nytta. Hur kan
en sådan onaturlig enhet vara? "Befälhavaren svarade: "Du ser denna enorma struktur och är
störd att det inte har någon rationell syfte. Kan du inte ta nöjesparken från
dess oändliga piruetter? Tycker du inte obesvärad enkel programmering
under dess skyddande grenar? Varför är du besväras av dess
värdelöshet? "7,2
I öster finns en haj som är större än alla andra fiskar. Den
ändras till en fågel vars vingar är som moln fyller himlen. När denna
fågel rör sig över landet, innebär det ett meddelande från Corporate
Högkvarter. Detta meddelande det droppar in mitt i programmerare,
som en fiskmås gör sin prägel på stranden. Därefter fågeln monteras på
vind och med den blå himlen i ryggen, återvänder hem.De oerfarna programmerare stirrar undrande på fågeln, för han förstår det
inte. Den genomsnittliga Programmeraren fruktar det kommande av fågeln, för han fruktar
dess budskap. Befälhavaren programmeraren fortsätter att arbeta på sin terminal för
Han vet inte att fågeln har kommit och gått.7,3
The Magician av Ivory Tower tog sin senaste uppfinning för
Master programmerare för att undersöka. Magikern hjul en stor svart låda i
befälhavarens kontoret medan befälhavaren väntade under tystnad."Detta är en integrerad, distribuerad, allmänt ändamål arbetsplats", inledde
trollkarlen, "ergonomiskt utformad med en egen operativ
system, sjätte språk generation, och flera state of the art användarens
gränssnitt. Det tog mina assistenter flera hundra manår att konstruera.
Är det inte fantastiskt? "Befälhavaren höjde på ögonbrynen en aning. "Det är verkligen fantastiskt", säger han
sa."Huvudkontor har befallt", fortsatte trollkarlen, "att
alla att använda den här arbetsstationen som en plattform för nya program. Håller ni
detta? ""Visst", svarade mästaren, "jag kommer att få det transporteras till
datacenter omedelbart! "Och trollkarlen tillbaka till sitt torn, väl
nöjd.Flera dagar senare vandrade en novis in på kontoret av befälhavaren
programmerare och sade: "Jag kan inte hitta noteringen för mitt nya program. Do
du vet var det kan vara? ""Ja", svarade mästaren, "är i listorna staplas på plattformen
datacentret. "7,4
Befälhavaren Programmeraren går från program till program utan rädsla. Ingen
förändring i ledningen kan skada honom. Han kommer inte att avfyras, även om
Projektet avbryts. Varför är det här? Han är fylld med Tao.-------------------------
Boka 8 - Hårdvara och programvara
Således talade befälhavaren programmeraren:
"Utan vinden, rör sig gräs ej. Utan programvara är hård
oanvändbar. "8,1
En novis frågade mästaren: "Jag märker att en dataföretag är mycket
större än alla andra. Det står över sin konkurrens som en jätte bland
dvärgar. Någon av dess avdelningar skulle kunna bestå av en hel verksamhet. Varför är
det så? "Befälhavaren svarade: "Varför frågar du så dumma frågor? Detta bolag
är stort, eftersom det är stor. Om det bara gjort hårdvara, skulle ingen köpa
den. Om det bara gjort programvara, skulle ingen använda den. Om det endast upprätthållas
system skulle folk behandla det som en tjänare. Men eftersom den kombinerar alla
av dessa saker, folk tror att det en av gudarna! Genom att inte försöka
strävar, det segrar utan ansträngning. "8,2
En master programmerare passerat en nybörjare programmerare en dag. Befälhavaren noterade
motpartens upptagenhet med en handhållen dator spel. "Ursäkta mig"
sade han, "kan jag behandla det?"Nybörjare bultas fast uppmärksamhet och räckte enheten till master. "Jag
se att enheten påstår sig ha tre nivåer av spel: Lätt, Medium och
Hard ", sade befälhavaren. "Men varje sådan anordning har en annan nivå
spelar, om produkten är inte att erövra människa, eller att bli erövrad
av den humana "."Be, store mästare", bad novisen, "Hur hittar en här
mystiska inställning? "Befälhavaren tappade enheten till marken och krossade den under fötterna. Och
plötsligt nybörjare var upplyst.8,3
Det var en gång en programmerare som har arbetat på mikroprocessorer. "Titta på hur
välbärgade jag är här ", sa han till en stordator programmerare som kom på besök,
"Jag har min egen operativsystem och fil lagringsenhet. Jag behöver inte
dela mina resurser med någon. Mjukvaran är fristående och
enkel att använda. Varför sluta du inte ditt nuvarande jobb och gå med mig här? "Stordatorn programmerare började sedan att beskriva sitt system till sin vän,
säger "stordatorn sitter som en gammal vis man mediterar i mitt
av datacentret. Dess hårddiskar ligger end-to-end som en stor ocean av
maskiner. Programvaran är lika mångfasetterad som en diamant, och som invecklad
som en ursprunglig djungel. Programmen, varje unik, flytta genom systemet
som en snabb strömmande flod. Det är därför jag är glad där jag är. "Mikrodatorn programmerare, när han hörde detta, tystnade. Men de två
programmerare var vänner fram till slutet av sina dagar.8,4
Hårdvara träffade programvara på vägen till Changtse. Programvara sade: "Du är
Yin och jag är Yang. Om vi reser tillsammans kommer vi att bli berömd och tjäna
stora summor pengar. "Och så som anges tillsammans, tänka att erövra
världen.För närvarande de mötte Firmware, som var klädd i trasiga trasor och linkade
längs stödd på en taggig pinne. Firmware sade till dem: "Den Tao ligger
bortom Yin och Yang. Det är tyst och stilla som en pool av vatten. Det gör
inte söka berömmelse, alltså ingen vet dess närvaro. Det syftar inte
förmögenhet, för det är fullständig inom sig själv. Den finns bortom rum och
tid. "Mjukvara och hårdvara, skäms, återvände till sina hem.
-------------------------
Bok 9 - Epilog
Således talade befälhavaren programmeraren:
"Det är dags för dig att lämna."
-------------------------
Om du gillade detta, kan du också vilja läsa värre är bättre
Lite skal omdirigering
Här är hur vi normalt gör skal omdirigering
$ ./pgm.sh args >out.txt 2>err.txt
Jag ville ändra det lite och kör enligt följande
$ ./pgm.sh args
med kravet att produktionen och fel bör gå till någon filename beräknas inne pgm.sh baserat på args. Man illustrativt fall kan vara när dagen är en del av args. Så du vill stdout gå att säga / din / katalog / pgm_out_YYYYMMDD.txt 1
Problemet med standardiserat sätt att styra N>file.txt dvs associera N filidentifierare till file.txt, är att det fungerar bara för den nyligen kluven processen och inte för den pågående processen.
så
$ echo hi 1>out.txt ; echo hii . skickar hej till out.txt, men kommer att skrivas ut hii till stdout 2
Det är där exec kommer till vår undsättning. Om vi lägger exec 1>somefile.txt sedan ut från resten av skriptet kommer att gå till somefile.txt
$. / Test.sh omdirigerar hi liksom hii att out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Likaså att omdirigera stdout samt stderr vi göra något sånt här
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Nu kommer tillbaka till den ursprungliga punkten omdirigera viss fil från innanför skalet, låt oss säga program beräknas filnamnet i någon rörlig UTFIL kunde vi just har gjort exec 1>$OUTFILE
Som löser det aktuella problemet. Men du kanske vill gå igenom följande exempel som uppnår "random access" av filer i skalskript. Exempel är från här
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
Med kommentarer, är denna kod självförklarande.
-
1 Det kan också göras genom $ ./pgm.sh args >pgm_out`date +%Y%m%d` men tanken är att skapa den här filen namn baserat på någon logik i själva programmet.
2 1 1> out.txt är överflödigt, men det klargörs här att vi omdirigerar FD 1
Sony VAIO granskning
En månad sedan jag köpte en VAIO NS25G och har planer på att skriva detta inlägg sedan dess. Detta inlägg är främst noter till självhjälp och översyn av densamma. Låt oss gå av märket snabbt -
Inlägg har två delar -
I. Granskning av hårdvara
II. Installera Debian och saker att ställa in
Eftersom jag inte en VAIO marknadsföring kille, jag börjar tvärtom -
Varför du kanske inte vill köpa denna laptop:
- Nej Bluetooth: tro mig, i 2009 Sony säljer laptop utan bluetooth. Visst kan du använda usb grejer men ...
- Skärmstorleken är 15,4 inches: om du reser mycket då detta bärbara datorn inte kan vara mycket händig och dessutom 2,9 kg laptop är inte precis det lättaste runt.
- Ingen HDMI-utgång.
- Ingen separat grafikkort och liknande. (Och ingen dedikerat videominne
Nu, varför du kan vilja köpa det:
- Denna laptop är en förbannat bra skrivbord. Vad jag menar är detta om dina krav är som jag - för det mesta att skriva program och försöker använda det 25 av 24 timmar, sedan med en stor skärm, mycket bekväma tangentbordslayout med rymliga handledsstödet och god datorkraft, gör det till ett mycket bra kombination.
- Det L2 cache är 2MB och processor / minne systembuss är 800MHz. Jag inte spelar spel så kan inte säga om det, men för något annat än en Core 2 Duo-processor med 2 GHz FREQ är bra, är detta mer än tillräckligt.
- Från mitt användande ser jag processor oftast klockor på 1.2GHz, och minnesanvändning på ~ 500MB. Som förstärker bara föregående punkt.
- Batteribackup är bra, ~ 2 timmar vad jag får.
Bara en sak här - att Sony, kommer det att kosta dig lite än andra bärbara datorer med liknande konfiguration, men det är en uppmaning u måste göra.
II. Konfigurera linux (till slut på box!):
Det kom förinstallerat med Vista (tror jag Home Premium eller något fantasinamn sånt). Dungara startat en gång och skapat en annan partition på 150 GB. Debian testning är vad jag alltid installera och sedan upp (ner?) Klass till "unstable 'sid.
Saker som fungerade utan några problem:
- X - föga förvånande X-servern inte hade problem med att starta eller upplösning. Efter en av de uppgraderingar X vägrade att starta om, men "X-konfigurera" genererade en conf-fil som fungerade ganska bra.
- Ljud - Ljud utgång och extern mikrofon fungera bra. kärnversionen 2.6.29-1-686 # 1 SMP och alsa version 1.0.17. Detta är vad du får från
$ lspci -v |grep Audio 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Con1.0.17troller (rev 03) - Video cam - bara fungerar
- Hibernate till disk och tillbaka - inga problem
- Trådlös - kort sagt - bara fungerar.
$ lspci |grep -i wireless
03:13:55 04:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01) .
Jag tror att kärnan 2,6 .. 27 och framåt det fungerar med beståndet kärnan. Du behöver inte installera ndiswrapper eller saker som t
hatt. Som en notering kan du säg bra köp gnome-network-manager och välkomna wicd, är det bara en GUI skikt men bakom scenen som de har fast mycket config saker som wpasupplient och mycket mer.
Vad fungerar inte -
- På något sätt intern mikrofon vägrar att arbeta
Extern mikrofon fungerar bra ändå. Senaste alsa källor inte sammanställa rent på Debian, så för närvarande jag köpte extern Intern mikrofon, kommer att försöka gräva i det någon gång i framtiden ändå.
Några misc tips för deiban:
- Paket för devnagri font-ttf-indic-fonts
- Paket för Flash Player - flashplugin-nonfree
- Införande i sources.list för mplayer och gillar - deb http://www.debian-multimedia.org sid huvud
- Införande i sources.list för E17 - deb http://debian.alphagemini.org/~~V instabil huvud
- Införande i sources.list för skype - http://download.skype.com/linux/repos/debian/ stabilt icke-fri
oneliner för att öka och minska ljusstyrkan -
[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
du måste sätta detta i sudo dock.
och minska förändring + till - och ... du får idén, rätt!
Lite mer, om du använder upplysningen (E17) Här är några fler tips -
[Upplysning centrala bindidings]
Du kan använda följande nyckel kod och kartläggning
mute:
KEY="Keycode-160" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master toggle"
övervintra:
KEY="Keycode-165" ACTION="exec" PARAMS="sudo /usr/sbin/hibernate-disk"
volymminskningen:
KEY="Keycode-174" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2-"
volymökningen:
KEY="Keycode-176" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2+"
öka ljusstyrkan:
KEY="Keycode-212" ACTION="exec" PARAMS="sudo /root/bin/incbrightness.sh"
minska ljusstyrkan
KEY="Keycode-101" ACTION="exec" PARAMS="sudo /root/bin/decbrightness.sh"



































