aptauja, ping, pubsub, pubsubhub, pubsubhubbub

Septembris 6, 2009 ar Prashant · Komentāri
Iesniegts saskaņā ar: tehnoloģija

Gadījumā, ja jums ir skeptiski, tur ir par trakumam iepriekš metodi, kas nosaukumā pastu. Jo tehnoloģiju aprindās tas ir maz ticams, ka jūs neesat dzirdējuši par pubsubhubbub. Ātrgaitas dažiem mēnešiem, tas ir viens no top trīs runāja par lietām. Pārējie divi ir homomorphic šifrēšana un Google vilnis [ 1. ]. Atgriežoties pie pašreizējā amatā - terminus nosaukumā norādiet, kā jūs saņemsiet saturu no citiem cilvēkiem. Šādas ziņas kļūst skaidrs, ja jūs iedomāties lietas, kas notiek attiecībā uz blogiem, lai gan tie ir konceptuāli ne tikai blogus.

Izpēte attiecas uz scenāriju, kurā klienti uzdod jautājumu par serveri, ja kaut kas jauns ir jānāk klajā. Cik bieži lūgt atjauninājumus vienmēr būs problēma ar vēlēšanu pārāk bieži vai pārāk reti, bet kā viens lasītājs norādīja šeit , ka viens liels, lieta ar aptauju ir tas, ka serveris nav saglabāt stāvokli.

Ping attiecas uz gadījumu, kad, ja publicējat rakstu, jums (vai jūsu programmatūra) arī atjaunināti daži populāri (centrālā) atjaunināšanas pakalpojumus. Daži fona šeit .

Nākamais ir pubsub kas apzīmē publicēt / paraksties, viens no ātrāk piķi par to tika šeit ar Evan Henshaw blakusprodukti Plath un Kellan Eliots-McCrea (72 slaidi, bet vērts iet cauri). Pārliecinošu piemēru viņi deva pret bija šī - noteiktā datumā, FriendFeed rāpoja Flickr 2,9 miljonus reižu, lai saņemtu jaunākos fotogrāfijas 45,754 lietotāju, no kuriem 6721 bija apmeklējis šajās 24 stundās un Flickr varēja "potenciāli" augšupielādējis fotoattēlu. Ņemiet vērā, ka to, ko viņi piedāvāja, bija nevis jauna tehnoloģija, kā viņi norāda, revolucionārais jaunu 20 gadu vecs tehnoloģiju '. Ja jūs to blogus, tad viena no galvenajām problēmām, ar XMPP - klātbūtne dati, pieskaitāmās izmaksas, kas var būt pat 60-70% var samazināt daudz.

pubsubhub stendi publicēt Subscribe rumbu un pubsubhubbub ir protokols, galvenais no kuriem ir ideja pubsubhub. Kur izdevēji (teiksim blogeri) atjaunina rumbu, kas (var būt vairāk nekā viens hubs, kas runā viens ar otru) dzīvo "kaut kur mākonis", jo pēc protokola to var stumtu vai vilktu kā vienu protokolu, bet nākamais posms ķēdes, rumbas līdz klientam (teiksim lasītājus) ir vienmēr push modeli. Šī lapa ir labs sākumpunkts pubsubhubbub, pārskats slaidi ir laba. Kādreiz daiļrunīgs Anil Dash apraksta to šeit kā spiedpogu internetā.
Divus citus saistītus lasījumi ir webhooks kas ir pamatā http atzvanus. Github izmanto to, lai tas paypal asinhrono paziņojumiem par maksājumu IPN . So do daudzi citi. Saistītu koncepciju rsscloud kas ir atkal pubsub mezgls. Izpildiet šo saiti par informāciju.

Jums varētu būt jautājums, kas ir rakstīšanas visiem šiem te punkts, ir divi 1. Šīs lietas ir vērts zināt, minimāli vismaz un 2. Šis emuārs ir pubsubhubbub Javascript tagad ar appspot mezglu, izmantojot šo WordPress spraudnis un barību arī ir pubsubhubbub Javascript caur FeedBurner saite šeit
-
[ 1 ]. - Laba ievada lasīt pilnībā homomorphic šifrēšana ir tas , ko Bruce Schneier raksts un šī diskusija ir vairāk vai mazāk tikai avots Google vilnis.

-UPDATE - Šis ziņojums ir paskaidrots, kā publiskā servera atzvanu prasība var tikt strādāja ap darbvirsmas klientiem, izmantojot XMPP vārti (par pubsubhubbub).

Nedaudz pulcēšanās

29 Aug 2009 līdz Prashant · Komentāri
Iesniegts saskaņā ar: tehnoloģija

Pēc rīdinga šo rakstu par slēdzeņu bez buferiem un redzēt izmantot CAS (salīdzināt un mijmaiņas), es jutos kā norīkošanu montāžas kodu do pats. Izmantot lietu tur bija uzrakstīt dzimtā metodi un sauc to no Java (atpakaļ 1.5, kad līdztekus datu struktūras Java bija vairāk vai mazāk nav vispār). Bez papildu ADO, es ņemšu atraisīt kodu uz jums :) . Pirmā ir CAS un otrais ir par skaitļošanas GCD izmantojot Eiklida ģeometrija 's algoritmu (to var atrast daudzās vietās un konsultācijas, kā arī).

Apkopot un palaist instrukciju gcc file_name.c ; ./a.out

Salīdzināt un mijmaiņas

   # Ietvert 
  # Ietvert 
 / / Apmaiņas - NewValue, comperand ir vecs / paredzamā vērtība
 / *
  * Funkcija faktiski ir šāda lieta - ja ir valodā * dest vērtība ir vienāda ar oldvalue tad to aizstāt ar NewValue cits atstāt to nemainītu: Vai visi šie atomically
  *
  * Ir divas iespējas atgriešanās vērtību
  * 1.is sākotnējā valodā * dest vērtība un atstāt slogu izsaucēja fxn salīdzināt to ar oldval
  * 2.  darīt vairāk nekā šeit un atdod 0 vai 1, tas būtu efektīvāks
  ** /

 / * Vēlāk izmainīt to 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 rezultāts = 1 ;/ * 1 liecina, ka CAS izdevās un 0 rāda, ka tas neizdevās * /
	 / * BTW jāiestata cc karogs 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" / * būtu LOCK jābūt uz vienas līnijas * /
			 "JZ DONE \ n \ t"
			 "Movl 0 $,% 1 \ n \ t"
			 "DONE: \ n \ t"
			 : "= M" (dest), "= g" (rezultāts)
			 : "G" (oldvalue), "g" (NewValue), "m" (dest)
			 : "% EAX", "% ebx", "ECx", "CC"
			 );
	 printf ("(% d,% d,% d)" * dest, oldvalue, NewValue);
	 atgriezties rezultāts;
 }

 / * TODO
  * Rakstīt citu ASM fxn kas liek iepriekš fxn kādā kamēr cilpa un jāmēģina, ja vien tas izdodas * /

 int main () {
	 int = 5, b = 6;
	 int * c = (int *) malloc (sizeof (int));
	 * C = 6;
	 / * Int c = 6; * /
	 printf ("% d \ n", CAS (c, b, b));
	 printf ("% d \ n", CAS (c, b,));
	 printf ("% d \ n", CAS (c,,));
	 printf ("% d \ n", CAS (c, b, b));
	 * C = 6;
	 / * C = 5; * /
	 printf ("maiņas vērtība * c uz% d \ n", * c);
	 printf ("% d \ n", CAS (c, b, b));
	 printf ("% d \ n", CAS (c, b,));
	 printf ("% d \ n", CAS (c,,));
	 printf ("% d \ n", CAS (c,, b));
	 printf ("% d \ n", CAS (c, b,));
	 atgriezties 0;
 }

Formatēšanas atzīmes - šķiet kā wp sintakses marķieris ir pievienot galu galā, ignorēt to.

GCD

 # Ietvert 
 int GCD (int, int b) {
     int rezultāts;
     / * Aprēķināt Lielākais kopīgais dalītājs, izmantojot Eiklida ģeometrija '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;"
                           "DONE: movl%% EAX,% 0;": "= g" (rezultāts): "g" (), "g" (b)
     );

     atgriezties rezultāts;
 }

 int main () {
     int 1., 2.;
     printf ("Ievadiet divus naturālus skaitļus:");
     scanf ("% d% d", & 1., un 2.);

     printf ("GCD no% d &% d ir% d \ n", pirmais, otrais, GCD (1., 2.));

     atgriezties 0;
 }

Cricketing pasaule gaida jaunas pasaules kārtības

25 Aug 2009 līdz Prashant · Komentāri
Iesniegts saskaņā ar: Misc

Pēc sērijas aptver piecus testus un aptuveni divu mēnešu Anglija reģenerētus pelnus.

Parunāsim par uzvarētāju komandas 1. - viņu vidū rīkojums ir "vidējais", ja jūs nevēlaties, lai kritiski. Greame Swann ieguldījums ar nūju būs skaitīt ne mazāk kā ieguldījumu ar bumbu. Stuart Plašā - labākais viss rounder bija nerezidenti starteris ar 5 testam. Andrew Strauss bija tikai saskaņā batsman un Džimijs Anderson bija tikai saskaņā katliņš.

Punkts šeit nav bārt sasniegumus uzvarētāju komandas, bet kā relatīva, ka neskatoties uz visu šo, Austrālija zaudēto. jums ir jādomā par dažām sekundēm, ja lūgts nosaukt savus labākos katliņš. Labi, tas bija BW Hilfenhaus. Hauritz pārspēja everbody gaidas, bet vēl joprojām nav pietiekami labs, lai jāizvēlas divas no piecām testēšanas metodēm. Dienvidāfrika nekad kļuva pasaules sitējs bez pasaules klases vērpējs, Austrālija, nevar cerēt palikt viens bez viena laba pietiekami vismaz viena. Burvis atstājis stadiju un tas nav izskatās māksla vairs, aizmirst maģiju. Ponting stendi lielīgi vidū mazākā mirstīgajiem un Michael Clarke pieceļas ļoti bieži, bet padara komanda ar ļoti labu spēlētāju, nevis ļoti laba komanda.
Pelni 2009 būs atceras Andrew Flintoff pēdējām Ashes, Stuart Plašā ielidošanu kā visi rounder (ja viņš piebilst dažas vairāk pelni, folkloru viņa daudzsološo sākumu), un visraksturīgākais debijas gs visu laiku pa Trott viens, bet tas būs arī atcerējās kā vietai, kur IFS un Buts par Austrālijas pārākumu beidzot likt atpūsties, tas ir beidzies. Nesaņem mani nepareizi, tie joprojām var atklāt Maiks Hussey vai Stjuarts Klārks, bet jūs jūtaties ieguldījumu visu laiku greats kad viņi pazūd. Dažreiz viņi nāk, lai atgādinātu jums par sevi IPL, bet tomēr tie nevar aizstāt. Pieņemsim jūtas laimīgs, lai redzot Warne, McGrath un Gilchrist spēlējot kopā un ko atbalsta Waughs, Ponting, Hyden, Martin un Langer.

Dodamies uz priekšu, Dienvidāfrika vienmēr paliks ļoti laba komanda, taču viņiem ir nepieciešams, lai uzvarētu pusfinālā, un tas vairāk visā pasaulē, Pakistāna paliks enigmatically izcili, Indijas jauni ieroči, iespējams atrast grūts, lai aizpildītu kurpes ārkārtas priekšgājēju. Šrilanka jāturpina rādīt ieskatu mākslas amatniecības. Bet, mēs, iespējams, būs jāgaida dažkārt pirms kura ir visu ārā dominējošo grupu vai pirms kapteinis sūdzas par konkurences trūkumu, kā Steve Waugh darīja vienreiz.

Par saistītu piezīmi - pieņemsim atzinīgi nāk atpakaļ Asif, viņš ir ellē daudz potenciāla, pieņemsim ceram redzēt mazliet no tā un arī atzinīgi Andy zieda jaunajā awatar, labi jūs nevarat saglabāt labus vīriešus noteikti uz ilgu laiku.

rubīns 1 čaulas, lai radītu hash

20 Aug 2009 līdz Prashant · Komentāri
Iesniegts saskaņā ar: tehnoloģija

Vakar, bet iet caur vienu no saviem vecajiem programmu, es atklāju šo rakstīts ar mani dažkārt atpakaļ:

#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

Nogalināt kādu no spriedzi ļaujiet man izpaust ka raw_text izskatās

 

, Labi tas ir samazināta no paypal maksājumu apstiprināšanas.

Virs līnijas, ja sadalīts daļās skan labāk:

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

Darīsim individuālus pasākumus IRB:

  IRB (galvenais). 009:0> unescaped_array = CGI.unescape (raw_text) dalīts ("&")    

 => ["Veiksme", "mc_gross = 10,00", "protection_eligibility = neattiecināmās", "payer_id = U7PPJJ4TSJ47E", "nodoklis = 0,00", "payment_date = 09:45:30 Jūl 10, 2009 PDT", "payment_status = Līdz "]                                                                         

 IRB (galvenais): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nulle), ja b.size == 1, b}  

 => [["Veiksme", nulle], ["mc_gross", "10,00"], ["protection_eligibility", "neatbilstošiem"], ["payer_id", "U7PPJJ4TSJ47E"], ["nodoklis", "0,00"] ["payment_date", "09:45:30 10 Jūl 2009 PDT"], ["payment_status", "Kamēr"]]                               

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

 => ["Veiksme", nulle, "mc_gross", "10,00", "protection_eligibility", "neatbilstošiem", "payer_id", "U7PPJJ4TSJ47E", "nodoklis", "0,00", "payment_date", "09:45: 30 jūlijs 10, 2009 PDT "," payment_status "," Kamēr "]
 IRB (galvenais): 015:0>
 hash = Hash [* flattened_array]
 => {"Nodoklis" => "0,00", "payment_status" => "Kamēr", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "panākumi" => nulle, "payment_date" = > "9:45:30 10 Jūl 2009 PDT", "protection_eligibility" => "neatbilstošiem"} 

BTW, * sauc traips operators rubīns

Vēl viens veids, kā radīt hash no 'masīva pāru "galvenais mērķis ir izmantot injicēt:

  hash = [[1,2], [3,4]] injicēt ({}). {| rezultātā, elements | rezultātā [element.first] = rezultāts [element.last]; rezultāts} 

Ir vēl viens veids :) Rakstīt cilpas, ka es ņemšu atvaļinājumu kā pasākumā ar lasītājiem!

Šeit ir mazliet saistīts lietošanas gadījums radīt hash no blokiem:

  IRB (galvenais): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.?  : Mazāks :: lielāks}

 => {: Mazāks => [1, 2, 3, 4],: lielāks => [7, 9]} 

Jūs varat darīt daudz lietas, galvenokārt izriet no bloka tiek izmantots kā atslēga šo elementu rezultātā hash.

gmail, stulbenis un msmtp noteikt

17 Aug 2009 līdz Prashant · Komentāri
Iesniegts saskaņā ar: tehnoloģija

Ja jūs izmantojat stulbenis un SMTP piekļūt Gmail. Šeit ir (slikti) ziņas. Cool guys at Google atkal mainīja sertifikātu. Ak, tu jautāt - kā tas to zināt? Vienkāršs stulbenis sāka sūdzas par sliktu sertifikāta mēģinot lietot msmpt, kas draņķīgs "msmtp: TLS sertifikātu pārbaude neizdevās:. Sertifikāts nav ieguvuši zināmu izdevējam" sveicināja mani uz ekrāna.

Šķērsot apstiprinātu -
Ieskriet pēc

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

Vietā vecu Thwate Server tagad jums sekojot emitenta segmentā
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Par laimi noteikt ir vienkārša, šeit ir tas, kas jums jādara uz Debian

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

Pēc tam vienkārši mainīt šo pozīciju, jūs ~~~V /. Msmtprc

tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem

līdz

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

Git un satriecošs Aptauja

15 Aug 2009 līdz Prashant · Komentāri
Iesniegts saskaņā ar: Misc

Šeit ir divas saites ar aptauju, ko git (Versija kontroles sistēma) un awesome (logu pārvaldnieks) kopienas. Ja jūs izmantojat kādu no šiem, lūdzu izņemt kādu laiku, lai aizpildītu anketu. Domājiet par to kā vienkāršākais veids, lai veicinātu atpakaļ uz programmatūru jūs izmantojat.
Šeit ir saites:

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

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

Piezīme - (Kā atrast šajās lapās, bet apakšā :) ) -
"Ja jums ir sīkfaili, jūs vienmēr varat iesniegt daļēji piepildīta aptauju, un atgriezties pie savām atbildēm uz vēlāku laiku, aizpildot to vēlāk."

Apvienojas hashes in YAML CONF failiem

31 jūlijs 2009 ar Prashant · Komentāri
Iesniegts saskaņā ar: tehnoloģija

YAML ir diezgan parocīgs rakstīšanai konfigurācijas failus. Galvenā priekšrocība ir tā, ka tā skan kā teksta failu. Tas darbojas patiešām labi, ja jūsu config fails ir plakana (bez hierarhija) un nav atkārtojumu.
Ja jūsu konfigurācijas fails ir atkārtojumi, tad ir jēga nodalīt šos elementus un tos atkārtoti izmantot. Ko es domāju tas ir - pieņemsim, ka tu savu config fails izskatās šādi:

  attīstība:
   input_location: common_input
   output_location: dev_location
   pasts:
     smtp_server: your_server
     Vārds: your_login
     parole: top_secret
 ražošana:
   input_location: common_input
   output_location: dev_location
   pasts:
     smtp_server: your_server
     Vārds: your_login
     parole: top_secret 

Pieņemot iepriekš koda / tmp / test.yml šeit ir, kā jūs varat lasīt ar python un Ruby
$cat readyml.py

 # / Usr! / Bin / env python
 no pprint importa pprint, PP
 # In Debian jāinstalē python-YAML
 no YAML importa slodzes, load_all, pašizgāzēji
 hash = slodze (atklātā ('/ tmp / test.yml "))
 pp (hash ['attīstība']) 


$ cat readyml.rb

  # / Usr! / Bin / env rubīns
 pieprasa "PP"
 hash = YAML :: slodze (File.open ('/ tmp / test.yml "). lasīt)
 pp hash ['attīstība'] 

Šeit ir parocīgs 1 ieliktnis uz rubīna versiju
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' , vai jūs varat mēģināt pats IRB vai python konsoles.

Atzīmē, ka iepriekš koda fragmentu, viss ir izņemot izejas vieta ir vienāds attīstības un ražošanas daļas. Tas ir, ja YML mezglu identifikators nāk glābšana. Ideja ir vienkārša ir kopums, noklusējuma vērtības un ignorēt tos citā vietā.
Jūs varētu pull to nošķir šādi:

  noklusējumu: & noklusējumus
   input_location: common_input
   output_location: dev_location
   pasts:
     SENDER_NAME: Sūtītājs
     smtp_server: your_server
     Vārds: your_login
     parole: top_secret
 attīstība:
   <<: * Noklusējumus
 ražošana:
   <<: * Noklusējumus
   output_location: prod_location 


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

Liels, tas darbojas (tm)!.
Varbūt mēs tirgo zināmu skaidrību par mazliet maģijas. Šeit ir neliels paskaidrojums: &, * un <<: & kas ir enkurs tag var saprast kā mezglu identifikatoru, * nav mezgla atsauces un <<: kājiņām hash sapludināšanā.

Sīkāku informāciju skatīt nu YAML specs vai enciklopēdijas
Līdz šim tik labi, bet tur ir nozvejas šeit, šie hash apvienojas nav rekursīvs. Ko tas nozīmē ir tā: pieņemsim, ka jūs vēlaties būt atšķirīgs sūtītāja vārdu pastam divās vidēs, jums var rasties kārdinājums veikt šādas:

  noklusējumu: & noklusējumus
   input_location: common_input
   output_location: dev_location
   pasts:
     SENDER_NAME: Sūtītājs
     smtp_server: your_server
     Vārds: your_login
     parole: top_secret
 attīstība:
   <<: * Noklusējumus
   pasts:
     SENDER_NAME: sender_dev
 ražošana:
   <<: * Noklusējumus
   output_location: prod_location
   pasts:
     SENDER_NAME: sender_prod 

Lets pārbaudīt

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

Hmm, kaut kas nogāja greizi, problēma kā minēts iepriekš, ir, ka hash sapludināšana nav rekursīvs un vienlaikus apvienojot to nomainīt pasta vēstuli nepilda pastu produkciju, kas ir tikai vienu taustiņu. Risinājums / darba apkārt ir atritināt vēl vienu līmeni:

  common_settings: & common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: & mail_defaults
  SENDER_NAME: Sūtītājs
   smtp_server: your_server
   Vārds: your_login
   parole: top_secret

 noklusējumu: & noklusējumus
   <<: * Common_settings
   pasts:
     <<: * Mail_defaults
 attīstība:
   <<: * Noklusējumus
 ražošana:
   <<: * Noklusējumus
   pasts:
     <<: * Mail_defaults
     SENDER_NAME: sender_prod

Lets pārbaudīt vēlreiz

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

Tu teikt, jums ir vēl vienu pakāpi ligzdošanas, labi jūs varat noteikti atritināt vēl vienu pakāpi, bet tad tas kļūst par putru. Tātad, ja jūs neesat mēģināt rakstīt risinājumu torņu Hanojā ar conf failu, tas ir labāk restucture conf failu, nekā rakšana vērā YAML vai kaut kas cits. Bet tas ir jūsu zvanu jebkurā gadījumā.

Great programmētājiem atrast vienkāršus risinājumus sarežģītām problēmām

30 jūnijs 2009 ar Prashant · Komentāri
Iesniegts saskaņā ar: Misc

Pēc ilgu laiku es varētu atrast avotu pēc kotēšana

Junioru programmētājiem radīt vienkāršus risinājumus vienkāršām problēmām. Vecākie programmētājiem radīt sarežģītas risinājumus sarežģītām problēmām. Great programmētājiem atrast vienkāršus risinājumus sarežģītām problēmām.

Tas ir no esejas sauc Skaists programmatūra Charles Connell.

Vēl viens favorīts viens no raktuves ir Zen Python -

Skaisti ir labāks nekā neglīta.
Skaidri ir labāk nekā netiešs.
Vienkārši ir labāks nekā kompleksa.
Komplekss ir labāks nekā sarežģīta.
Dzīvoklis ir labāks nekā ligzdotu.
Reti ir labāka nekā blīvs.
Lasāmību skaits.
Īpašie gadījumi nav īpaša pietiekami pārkāpt noteikumus.
Lai gan praktiskums Beats tīrību.
Kļūdas nekad iet klusi.
Ja nav skaidri apklusināti.
Saskaroties ar nenoteiktību, atteikties no kārdinājuma guess.
Jābūt viena un vēlams tikai vienu acīmredzams veids, kā to izdarīt.
Kaut tādā veidā, nedrīkst būt redzamas no 1. ja tu esi holandiešu.
Tagad ir labāk, nekā nekad.
Kaut gan nekad bieži vien ir labāk nekā * tieši * tagad.
Ja izpilde ir grūti izskaidrot, tas ir slikta ideja.
Ja īstenošana ir viegli izskaidrot, tā var būt laba ideja.
Vārdtelpas ir viens HONKING lieliska ideja - Darīsim vairākas no tām!
-------------------------
un tad tur ir klasisks Tao no Programmēšana

-

kredīti, kā uz saistītajā teritorijā,

Tulkoja Geoffrey James

Transkribē ar Duke Hillard

Nosūtīt pa anupam Trivedi un Sajitha Tampi un Meghshyam Jagannath

Atkārtoti html-ized un rediģēja Kragen Sittler

-

Grāmata 1 - Silent Void

Tādējādi runāja kapteinis programmētājs:

"Kad esat iemācījušies pakampt kļūdas kodu no slazda rāmja, tas
būs laiks, lai jūs atstāt. "

1,1

Kaut noslēpumains veidojas, dzimis mēmā tukšuma. Gaida tikai un
unmoving, tas ir uzreiz vēl un vēl nepārtrauktā kustībā. Tas ir avots
visu programmu. Es nezinu tās nosaukumu, tādēļ es aicinu to Tao no
Programmēšana.

Ja Tao ir liels, tad operētājsistēma ir lieliska. Ja darba
sistēma ir ļoti liels, tad kompilators ir liels. Ja kompilators ir liels,
tad pieteikums ir lieliska. Lietotājs ir gandarīta un pastāv
harmonija pasaulē.

Gada plānošanas Tao plūsmas tālu prom un ienākumi no vēja rīta.

1,2

Tao dzemdēja mašīna valoda. Mašīna valoda dzemdēja
montētājs.

Montētājs dzemdēja kompilatoru. Tagad ir 10.000
valodas.

Katra valoda ir tā mērķi, tomēr pazemīgs. Katra valoda pauž
Iņ un Yang programmatūras. Katrai valodai ir sava vieta ietvaros Tao.

Bet ne programma COBOL, ja jūs varat izvairīties no tā.

1,3

Sākumā bija Tao. Tao dzemdēja telpā un laikā.
Tāpēc Telpa un Laiks ir Iņ un Jan programmēšanas.

Programmētāji, kas nav saprast Tao vienmēr pietrūkt laika
un kosmosa par savām programmām. Programmētāji, kas saprastu Tao vienmēr
ir pietiekami daudz laika un vietas, lai veiktu savus mērķus.

Kā tas var būt citādi?

1,4

Gudrs programmētājs tiek stāstīts par Tao un šādi to. Vidējais
programmētājs tiek stāstīts par Tao un meklē to. Muļķīgi programmētājs
tiek stāstīts par Tao un smejas par to.

Ja tā nav par smiekliem, nebūtu Tao.

Augstākie skaņas ir visgrūtāk dzirdēt.
Dodamies uz priekšu, ir veids, kā atkāpties.
Liels talants liecina pats vēlāk dzīvē.
Pat ideāls programma vēl ir bugs.

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

Grāmata 2 - Senie meistari

Tādējādi runāja kapteinis programmētājs:

"Pēc trim dienām bez programmēšanas, dzīve zaudē jēgu."

2,1

Veco programmētājiem bija noslēpumains un dziļa. Mēs nevaram saprast
viņu domas, kas mums jādara, ir aprakstīt savu izskatu.

Apzinās, kā lapsa, kas šķērso ūdens. Brīdināt, kā kopumā par
kaujas. Veids, kā saimniece apsveikuma viņas viesus. Vienkāršs, piemēram,
uncarved bloki no koka. Necaurspīdīgs, tāpat kā melnā baseini aptumšotās alām.

Kurš var pateikt noslēpumus savas sirdis un prātus?

Atbilde eksistē tikai Tao.

2,2

Grand Master Tjūringa vienreiz sapņoja, ka viņš bija mašīna. Kad viņš pamodās viņš
iesaucās:

"Es nezinu, vai es esmu Tjūringa sapņoju, ka es esmu mašīna, vai
mašīna sapņo, ka es esmu Tjūringa! "

2,3

No lielā datoru kompānija programmētājs devās uz programmatūru
konferenču un tad atgriezās ziņot savam vadītājam, sakot: "Kāda
gada programmētāji strādā citos uzņēmumos? Viņi izturējās slikti un bija
bezbēdīgs ar šķietamību. Viņu mati bija gari un nevīžīgs un to
drēbes bija grumbaina un veca. Viņi avarēja mūsu viesmīlības suite un tie
kas rupjš trokšņi laikā manu prezentāciju. "

Vadītājs teica: "Es nekad neesmu jūs sūtīju uz konferenci. Tie
programmētāji dzīvot ārpus fiziskās pasaules. Tās uzskata par dzīves absurds,
nejauša sakritība. Viņi nāk un iet, nezinot ierobežojumus.
Bez aprūpes, viņi dzīvo tikai par savām programmām. Kāpēc viņi apnikt
ar sociālajām konvencijām?

"Viņi ir dzīvs ietvaros Tao."

2,4

Iesācēju jautāja kapteinim: "Te ir programmētājs, kas nekad projektē,
dokumenti vai testi savas programmas. Vēl visi, kuri zina, viņam jāapsver viņu par vienu no
labākie programmētāji pasaulē. Kāpēc tas ir? "

Master atbild: "Tas programmētājs ir apguvis Tao. Viņš devies
pēc nepieciešamības dizainparaugu, viņš nekļūst dusmīgs, kad sistēma
atteici, bet pieņem visumu bez bažām. Viņš devies tālāk
dokumentu nepieciešamību, viņš vairs cares, ja kāds cits uzskata, ka viņa kodu.
Viņš ir pārsniegusi to testēšanu, un katrs no viņa programmas ir perfekta
sevī, rāms un elegants, to nolūks pašsaprotama. Patiesi,
viņš ir ieceļojis noslēpumu Tao. "

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

Grāmata 3 - Dizains

Tādējādi runāja kapteinis programmētājs:

"Kad programma tiek pārbaudīta, tā ir pārāk vēlu, lai padarītu dizainu
izmaiņas. "

3,1

Reiz bija cilvēks, kurš devās uz datora tirdzniecības izstādē. Katru dienu, kā viņš
ievadīta, vīrs stāstīja sargam pie durvīm:

"Es esmu liels zaglis, slavens ar saviem varoņdarbiem zādzība veikalā. Būt
brīdināti, šajā izstādē nav aizbēgt unplundered. "

Šis runas traucējumi aizsargu ievērojami, jo tur bija miljoniem
dolāru datortehnikas iekšā, tāpēc viņš noskatījās cilvēks uzmanīgi. Bet
cilvēks vienkārši nomaldījies no kabīnes uz stenda, kolibri klusi pie sevis.

Kad cilvēks atstāj, sargs paņēma viņu malā un meklēja savas drēbes, bet
nekas netika atrasts.

Nākamajā dienā izstādē, vīrs atgriezās un chided aizsargu
sakot: "Es izbēguši ar plašu laupījumu vakar, bet šodien būs vēl
labāk "Tātad. sargs noskatījos viņam arvien ciešāk, taču bez rezultātiem.

Pēdējā dienā ar tirdzniecību, norāda, sargs varētu ierobežot viņa ziņkārību
vairs. "Kungs Thief," viņš teica, "es esmu tik apjucis, es nevaru dzīvot
miers. Lūdzu informēt mani. Kas ir tas, ka jūs zog? "

Vīrietis pasmaidīja. "Es esmu zādzībās idejas," viņš teica.

3,2

Reiz bija programmētājam kurš rakstīja nestrukturētas programmas.
iesācēju programmētājs, cenšoties atdarināt viņu, arī sāka rakstīt
nestrukturētas programmas. Kad iesācēju lūdza kapteini novērtēt viņa
progresu, kapteinis kritizēja viņu rakstīšanai nestrukturētas programmas,
sakot, "Kas ir lietderīgi, ka kapteinim nav piemērota
iesācējs. Jums ir jāsaprot Tao pirms pāri struktūru. "

3,3

Reiz bija programmētājs, kurš tika pievienots tiesā tajā WarLord
Wu. WarLord lūdza programmētājs: "Kas ir vieglāk izstrādāt: An
grāmatvedības paketi vai operētājsistēma? "

"Operētājsistēma," atbildēja programmētājs.

WarLord teikusi izsaukuma par neticību. "Protams, grāmatvedības
pakete ir niecīgs blakus sarežģītību operētājsistēmu, "viņš
teica.

"Nē," sacīja programmētājs, "izstrādājot grāmatvedības paketi,
programmētājs darbojas kā starpnieks starp cilvēkiem, kam ir dažādi
idejas: cik tas ir jādarbojas, kā tās atskaitēs parādās, un kā tam jābūt
atbilst nodokļu likumiem. Turpretī, operētājsistēma nav ierobežots
ar ārpus šķietamību. Plānojot operētājsistēmas, programmētājs
lūdz vienkāršāko harmoniju starp mašīnu un idejām. Tas ir iemesls, kāpēc
operētājsistēmas ir vieglāk izstrādāt. "

Wu WarLord pamāja ar galvu un pasmaidīja. "Tas ir viss labi un labi, bet
kas ir vieglāk atkļūdot? "

Programmētājs neko neatbildēja.

3,4

Vadītājs devās uz programmētājam un parādīja viņam prasībām
dokuments par jaunu pieteikumu. Vadītājs jautāja kapteinim: "Cik ilgi
būs vajadzīgs, lai izstrādātu šo sistēmu, ja es piešķirt piecus programmētājiem to? "

"Paies gadu," sacīja kapteinis nekavējoties.

"Bet mums ir nepieciešams šo sistēmu uzreiz, vai pat ātrāk! Cik ilgi tas
ņemt, ja man piešķirtu desmit programmētāji pie tā? "

Programmētājam sarauca pieri. "Tādā gadījumā, paies divi gadi."

"Un ja nu es piešķirt simts programmētājiem to?"

Programmētājam paraustīja plecus. "Tad dizains nekad nebūs
pabeigta, "viņš teica.

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

Rezervēt 4 - Kodēšanas

Tādējādi runāja kapteinis programmētājs:

"Labi uzrakstīts programma ir tā pati paradīze, slikti uzrakstīts programma
pati elle. "

4,1

Programma būtu viegls un elastīgs, tās subroutines saistīts līdzīgs
stīgu un pērlēm. Gars un nolūks programmu, būtu jāsaglabā
visā. Vajadzētu būt ne pārāk maz vai pārāk daudz, ne
nevajadzīgu cilpas, ne bezjēdzīgi mainīgie, neviens no struktūras trūkums, ne
milzīgs stingrība.

Programma jāievēro informācija `likumu vismazāk pārsteigumu". Kas ir šis likums?
Tas ir vienkārši, ka programmai būtu vienmēr atbildēt lietotājam tādā veidā
kas pārsteidz viņu vismazāk.

Programma, lai cik sarežģīti būtu jādarbojas kā viena vienība. Programma
būtu jānovirza no loģikas ietvaros, nevis izvešana šķietamību.

Ja programma neizpilda šo prasību, tas būs stāvoklī
traucējumi un apjukums. Vienīgais veids, kā labot šo ir pārrakstīt
programmas.

4,2

Iesācēju jautāja kapteinim: "Man ir programma, kas dažkārt vada un
dažreiz aborts notiek. Es sekoju noteikumiem programmēšanas, bet es esmu
pilnīgi neizprotamu. Kas ir iemesls? "

Kapteinis atbildēja: "Jūs esat apjukuši, jo jūs nesaprotat Tao.
Tikai muļķis sagaida racionālu rīcību no saviem līdzcilvēkiem. Kāpēc jūs
gaidīt to no mašīnas, ka cilvēki ir radīti? Datori simulēt
determinismu; tikai Tao ir ideāls.

"Par plānošanas noteikumi ir pārejošas, un tikai Tao ir mūžīga. Tāpēc
Jums ir domāt par Tao, pirms jūs saņemat apgaismību. "

"Bet kā es zināšu, ka esmu saņēmis apgaismību?" Jautāja
iesācējs.

"Jūsu Programma pēc tam palaist pareizi," atbildēja kapteinis.

4,3

Kapteinis bija skaidrojot Tao raksturu, lai no viņa iesācēji vienu. "
Tao iemiesojas visu programmatūru - neatkarīgi no tā, cik nenozīmīgs, "teica
kapteinis.

"Vai Tao ar rokas kalkulatoru?" Jautāja iesācējs.

"Tas ir," nāca atbilde.

"Vai Tao ar video spēli?" Turpināja iesācēju.

"Tas ir pat video spēli," teica kapteinis.

"Un ir Tao no DOS uz personīgo datoru?"

Kapteinis klepoja un pārvietoti savu pozīciju nedaudz. "Mācība ir beidzies
šodien, "viņš teica.

4,4

Prinča Wang s programmētājs tika kodēšanas programmatūru. Viņa pirksti dejoja pēc
tastatūra. Programma apkopo bez kļūdas ziņojuma, un programma
skrēja kā maigu vēja.

"Excellent!" Princis iesaucās, "Tava tehnika ir nevainojams!"

"Paņēmiens?" Sacīja programmētājs pagriežot no sava gala, "Kas es
sekot ir Tao - pāri visām metodēm! Kad es pirmo reizi sāku programmēt I
varētu redzēt pirms manis visa problēma vienā masā. Pēc trim gadiem es ne
vairs redzēju šo masu. Tā vietā, es subroutines. Bet tagad es neredzu neko.
Visa mana būtne eksistē bezformīgs tukšumā. Manas sajūtas ir dīkstāvē. Mans gars,
brīvi strādāt bez plāna, šādi savu instinkts. Īsāk sakot, manu programmu
raksta sevi. Taisnība, reizēm ir grūti problēmas. Es redzu tos
nāk, es palēnināt, es skatīties klusi. Tad es mainīt vienu rindiņu kodu
un grūtības izgaist tāpat inhalācijas tukšgaitas dūmus. Es tad sastādīt
programmas. Es mierīgi nosēdēt un ļaujiet darba prieku piepilda manu būtni. Es aizveru mans
acis uz brīdi un tad log off. "

Princis Wang teica: "Vai, ka visi mani programmētāju bija gudrs!"

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

Rezervēt 5 - uzturēšana

Tādējādi runāja kapteinis programmētājs:

"Lai arī programma ir, bet trīs līnijas ilgi, kādu dienu tas būs
jāsaglabā. "

5,1

Labi lietotu durvis nav nepieciešama nekāda eļļa par tās eņģes.
Ātra un nesējvielām plūsma nepieaug nemainīgs.
Ne skaņas, ne domas var ceļot, izmantojot vakuumu.
Programmatūra puves, ja neizmanto.

Tie ir liels mistērijas.

5,2

Vadītājs jautāja programmētājs, cik ilgi tas veic, viņam pabeigt
programma, kurā viņš strādā. "Tas tiks pabeigts rīt,"
programmētājs nekavējoties atbildēja.

"Es domāju, ka jums ir bijuši reāli," sacīja pārvaldnieks "Patiesi, cik
ilgs laiks paies? "

Programmētājs domāju kādu brīdi. "Man ir dažas funkcijas, kas man vēlas
pievienot. Tas aizņems vismaz divas nedēļas, "viņš beidzot teica.

"Pat, ka ir pārāk daudz gaidīt," uzsvēra pārvaldnieks "Es būšu
apmierināts, ja jūs vienkārši pateikt man, kad programma ir pabeigta. "

Programmētājs piekrita.

Dažus gadus vēlāk, vadītājs pensijā. Pa ceļam uz viņa aiziešanas pensijā
pusdienu, viņš atklāja programmētājs miegā savā terminālā. Viņš bija
plānošanas visu nakti.

5,3

Iesācēju Programmētājs reiz tika piešķirts kods vienkāršu finanšu paketi.

Iesācēju strādāja nikni vairākas dienas, bet, kad viņa meistars pārskatīts
viņa programmā, viņš atklāja, ka tas satur ekrāna redaktors, komplekts
ģeneralizēta grafikas kārtība, mākslīgais intelekts interfeiss, bet
ne mazākās pieminēts kaut finansiālās.

Kad kapteinis jautāja par to, iesācējs kļuva sašutis. "Vai nav
tik nepacietīgi, "viņš teica," es nolikšu ar finanšu lietām galā. "

5,4

Vai labs lauksaimnieks nolaidība apgrieztu viņš ielicis?
Vai labs skolotājs aizmirst pat visvairāk pazemīgs studentam?
Vai labs tēvs varētu viens bērns badoties?
Vai labs programmētājs atsakās uzturēt savu kodu?

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

Grāmata 6 - Vadība

Tādējādi runāja kapteinis programmētājs:

“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. When
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. When
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. Every
year new names are put onto the branches, but all to no avail. How can
such an unnatural entity be?”

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

7,2

In the east there is a shark which is larger than all other fish. It
changes into a bird whose wings are like clouds filling the sky. When this
bird moves across the land, it brings a message from Corporate
Headquarters. This message it drops into the midst of the programmers,
like a seagull making its mark upon the beach. Then the bird mounts on the
wind and, with the blue sky at its back, returns home.

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

7.3

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

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

The master raised his eyebrows slightly. “It is indeed amazing,” he
said.

“Corporate Headquarters has commanded,” continued the magician, “that
everyone use this workstation as a platform for new programs. Do you agree
to this?”

“Certainly,” replied the master, “I will have it transported to the
data center immediately!” And the magician returned to his tower, well
pleased.

Several days later, a novice wandered into the office of the master
programmer and said, “I cannot find the listing for my new program. Do
you know where it might be?”

“Yes,” replied the master, “the listings are stacked on the platform in
the data center.”

7.4

The master programmer moves from program to program without fear.
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. "Es
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

May 10, 2009 by prashant · Komentāri
Iesniegts saskaņā ar: tehnoloģija

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

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

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

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

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

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

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

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

Sony VAIO review

April 29, 2009 by prashant · Komentāri
Filed under: reviews

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

Post has two parts -

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

I. Review of hardware

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

Why you may not like to buy this laptop :

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

Now , why you may like to buy it :

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

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

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

Things which worked without any problem:

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

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

What doesn't work -

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

Few more misc hints for deiban:

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

oneliner for increasing and decreasing the brightness -

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

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

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

[enlightenment key bindidings]

You can use following key code and mapping

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

Nākamā lapa »