Umfrage, ping, PubSub, pubsubhub, PubSubHubbub

6. September 2009 von Prashant · Kommentare
Abgelegt unter: Technik

Falls Sie skeptisch sind, gibt es ein Verfahren, bei dem Wahnsinn vor, in der Titel der Post. In technischen Kreisen ist es unwahrscheinlich, dass Sie nicht von PubSubHubbub gehört. In wenigen Monaten schnell, war es eines der besten drei sprachen über die Dinge. Beiden anderen sind homomorphe Verschlüsselung und Google Wave [ 1. ]. Kommen wir zurück zu aktuellen Beitrag - Begriffe im Titel an, wie Sie den Inhalt bekommen als andere Menschen. Nach Angaben klarer werden, wenn Sie Dinge geschehen in Bezug auf Blogs, auch wenn sie konzeptionell nicht auf Blogs beschränkt vorstellen.

Polling bezieht sich auf das Szenario, in dem Kunden immer wieder die Server, wenn etwas Neues kommen. Wie oft fragen, um nach Updates wird immer ein Problem mit Polling zu häufige oder zu selten sein, aber wie ein Leser wies darauf hin, hier , dass ein großer, etwas mit Polling-Server ist, dass muss nicht Zustand zu halten.

Ping bezieht sich auf den Fall, wenn erlaubt, einen Artikel, wenn Sie (oder Ihre Software) aktualisiert auch einige populäre (Zentral) Update Services. Einige Hintergrundinformationen hier .

Weiter ist die PubSub für Publish / Subscribe, einer der frühesten Pitch um es gemacht wurde steht hier von Evan Henshaw-Plath und Kellan Elliott-McCrea (72 Dias, aber es lohnt durchlaufen). Überzeugendes Beispiel gegen sie gab, war dies - zu einem bestimmten Zeitpunkt, FriendFeed kroch Flickr 2,9 Millionen mal auf die neuesten Fotos von 45.754 Benutzern zu bekommen, von denen 6721 hatte Flickr in diesen 24 Stunden besucht und konnte 'potenziell' ein Foto hochgeladen haben. Beachten Sie, dass, was sie vorgeschlagen hatte, war keine neue Technologie, wie sie aus "revolutionäre neue 20 Jahre alte Technik" zeigen. Wenn Sie es für Blogs führen Sie dann einen der größten Probleme mit XMPP - Präsenz Daten-Overhead, der so hoch sein wie 60-70% kann kann eine Menge reduziert werden.

pubsubhub steht für Nabe und veröffentlichen subscribe PubSubHubbub ist ein Protokoll, dessen Kern der Idee ist pubsubhub. Wobei Verlage (sagen Blogger) zu aktualisieren, die die Nabe (mehr als ein Hubs, die miteinander reden sein kann) befindet sich "irgendwo in der Wolke", laut Protokoll werden diese schieben oder ziehen kann gemäß dem Protokoll, aber das nächste Glied in der Kette, Nabe, um Client (sagen Leser) Es ist immer Push-Modell. Diese Seite ist guter Ausgangspunkt für PubSubHubbub, sind gute Übersicht über Rutschen. Immer eloquent Anil Dash beschreibt es hier als Web-Taster.
Zwei weitere Verwandte sind mal gelesen webhooks das ist im Grunde http Rückrufe. Github nutzt es, so auch für asynchrone Benachrichtigungen der Zahlung in PayPal IPN . Das tun viele andere. Verwandtes Konzept ist rsscloud das ist wieder PubSub Hub. Folgen Sie diesem Link für weitere Details.

Sie fragen sich vielleicht, was ist der Sinn des Schreibens alle diese hier gibt es zwei 1. Diese Dinge sind es wert, zu wissen, zumindest minimal und 2. Dieser Blog ist nun über PubSubHubbub appspot Nabe mit dieser aktiviert WordPress Plugin -und Futtermitteln ist auch PubSubHubbub aktiviert via Feedburner, Link hier
-
[ 1 ]. - Eine gute Einführung lesen für voll homomorphe Verschlüsselung ist dieser Artikel von Bruce Schneier und diese Diskussion ist mehr oder weniger einzige Quelle für Google Wave.

-UPDATE - Dieser Beitrag erläutert, wie das Erfordernis der öffentlichen Server für Rückruf herum kann für Desktop-Clients gearbeitet werden, indem XMPP-Gateway (für PubSubHubbub).

Ein bisschen Montage

29. August 2009 von Prashant · Kommentare
Abgelegt unter: Technik

Nach dem Lesen dieses Artikels über Lock freien Puffern und sehen den Einsatz von CAS (vergleichen und Swap), fühlte ich mich wie die Buchung der Assembler-Code, um das Gleiche zu tun. Verwenden Sie bei drüben war es, eine native Methode schreiben und nennen es aus Java (zurück in 1,5, wenn gleichzeitige Datenstrukturen in Java mehr oder weniger nicht existent waren). Ohne weitere Umschweife, werde ich den Code auf Sie zu entfesseln :) . Zunächst ist für CAS und zweite ist zur Berechnung von ggT mit Euklidischen Algorithmus (dies kann man an vielen Orten und Tutorien sowie zu finden).

Kompilieren und starten Anweisungen gcc file_name.c ; ./a.out

Vergleichen und Tauschen

   # Include 
  # Include 
 / / Austausch - newvalue ist comperand alt / Erwartungswert
 / *
  * Funktion tatsächlich die folgende Sache - wenn der Wert an * dest gleich OldValue dann ersetzen Sie ihn durch newvalue sonst lässt sie unverändert: Sie alle diese atomar
  *
  * Es gibt zwei Optionen für Rückgabewert
  * 1.is Anfangswert * dest und lassen Sie die Last der Aufruf FXN, um es mit oldval vergleichen
  * 2.  tun es hier und kehren 0 oder 1, sollte dies effizienter sein
  ** /

 / * Später ändern sie in Makros * /
 CAS int (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 zeigt, dass CAS gelungen und 0 zeigt, dass es fehlgeschlagen * /
	 / * Btw müssen ccm für Flagge clobbering gesetzt!  * /
	 __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" / * sollte auf der gleichen Linie LOCK * /
			 "Jz \ n \ t FERTIG"
			 "Movl $ 0,% 1 \ n \ t"
			 "DONE: \ n \ t"
			 : "= M" (DEST) "= g" (Ergebnis)
			 : "G" (OldValue), "g" (newvalue), "m" (dest)
			 : "% Eax", "% ebx", "ECX", "CC"
			 );
	 printf ("(% d,% d,% d)", * dest, OldValue, newvalue);
	 return ergebnis;
 }

 / * TODO
  * Schreiben Sie einen anderen asm FXN die über FXN bringt eine while-Schleife und immer wieder versuchen, wenn es * / Nachfolge

 int main () {
	 int a = 5, b = 6;
	 int * c = (int *) malloc (sizeof (int));
	 * C = 6;
	 / * Int c = 6; * /
	 printf ("% d \ n", CAS (c, b, b));
	 printf ("% d \ n", CAS (c, b, a));
	 printf ("% d \ n", CAS (c, a, a));
	 printf ("% d \ n", CAS (c, b, b));
	 * C = 6;
	 / * C = 5; * /
	 printf ("wechselnden Wert von * C bis% d \ n", * c);
	 printf ("% d \ n", CAS (c, b, b));
	 printf ("% d \ n", CAS (c, b, a));
	 printf ("% d \ n", CAS (c, a, a));
	 printf ("% d \ n", CAS (c, a, b));
	 printf ("% d \ n", CAS (c, b, a));
	 return 0;
 }

Formatieren von Notes - scheint wie wp Syntax-Highlighter ist das Hinzufügen am Ende ignorieren.

GCD

 # Include 
 int ggT (int a, int b) {
     int result;
     / * Berechne Größter gemeinsamer Teiler mit Euklidischen Algorithmus * /
     __asm__ __ volatile__ ("movl% 1,%% eax;"
                           "Movl% 2,%% ebx;"
                           "Forts.: kpl $ 0,%% ebx;"
                           "Je DONE;"
                           "Xorl%% EDX, EDX%%;"
                           "Idivl%% ebx;"
                           "Movl%% ebx,%% eax;"
                           "Movl%% EDX,%% ebx;"
                           "Jmp Forts.;"
                           "DONE: movl%% eax,% 0;": "= g" (Ergebnis): "g" (a), "g" (b)
     );

     return ergebnis;
 }

 int main () {
     int erste, zweite;
     printf ("Geben Sie zwei Zahlen:");
     scanf ("% d.% d", & erste, zweite &);

     printf ("ggT von% d &% d ist% d \ n", erste, zweite, ggT (erster, zweiter));

     return 0;
 }

Cricket-Welt wartet eine neue Weltordnung

25. August 2009 von Prashant · Kommentare
Abgelegt unter: misc

Nach einer Reihe aus fünf Tests und etwa zwei Monate, England zurückgeforderten Asche.

Lassen Sie uns über das Gewinner-Team erste reden - ihre Mitte Ordnung ist "durchschnittlich", wenn Sie nicht wollen, kritisch. Greame Swanns Beitrag mit dem Schläger zählt nicht weniger als Beitrag mit der Kugel. Stuart Broad - beste Allrounder war nicht Anlasser für den fünften Test. Andrew Strauss war die einzige konsequente Schlagmann und Jimmy Anderson war der einzige konsequente Bowler.

Hier geht es nicht um die Leistungen des Siegerteams beschimpfen aber in Perspektive zu setzen, dass es trotz all diesen, Australien verloren. Sie müssen für einige Sekunden zu denken, wenn aufgefordert, ihre besten Werfer zu nennen. Richtig, es war BW Hilfenhaus. Hauritz everbody übertraf die Erwartung war aber noch nicht gut genug, um für zwei der fünf Tests ausgewählt werden. Südafrika wurde nie eine Welt ohne Schläger ein Weltklasse-Spinner, Australien kann nicht darauf hoffen, eines ohne ein gut genug, ein mindestens bleiben. Zauberer verließ die Bühne und es nicht wie Kunst mehr sehen, vergessen Magie. Ponting steht hoch unter niedere Sterbliche und Michael Clarke steht auf sehr oft, aber das macht sie ein Team mit einigen sehr guten Spielern und nicht ein sehr gutes Team.
Ashes 2009 wird für die letzten Ashes Andrew Flintoff das, Stuart Broad Ankunft als Allrounder (wenn er etwas mehr Asche Folklore fügt zu seinem viel versprechenden Start), und eine der aussagekräftigsten Debüt Jahrhundert aller Zeiten von Trott, aber es wird auch daran erinnert werden erinnerte sich, wie der Punkt, an dem Wenn und Aber über Australiens Vorherrschaft endlich zur Ruhe gesetzt wurden, ist es vorbei. Versteh mich nicht falsch können sie immer noch ausgraben Mike Hussey oder Stuart Clark, aber Sie fühlen sich den Beitrag der ganz Großen, wenn sie verloren gehen,. Manchmal kommen sie, um Sie über sich selbst daran erinnern, in IPL aber sie kann nicht ersetzt werden. Lasst fühle mich gesegnet für Warne gesehen zu haben, McGrath und Gilchrist zusammen zu spielen und von Waughs unterstützt, Ponting, Hyden, Martin und Langer.

Zukünftig Südafrika wird immer ein sehr gutes Team bleiben, aber sie müssen Halbfinale gewinnen und konsistenter sein rund um den Globus, Pakistan bleibt rätselhaft brillant, wird Indischen Young Guns wahrscheinlich finden es hart, um die Schuhe von außergewöhnlicher Vorgänger zu füllen. Sri Lanka sollte weiterhin Einblicke in die Kunst im Handwerk zeigen. Aber darauf werden wir wohl für einige Zeit, bevor mit einem all out dominierende Team oder vor ein Kapitän klagt über Mangel an Wettbewerb, wie Steve Waugh einst warten.

Über einen entsprechenden Hinweis - lasst uns die Rückkehr von Asif begrüßen, er verdammt viel Potenzial hat, hoffen wir, einige davon sehen und begrüßen auch Andy Flower in der neuen awatar, rechts kann man nicht halten gute Männer nach unten für lange.

Rubin Einzeiler zu schaffen Hash

20. August 2009 von Prashant · Kommentare
Abgelegt unter: Technik

Gestern, während er durch einen meiner alten Programme, fand ich das von mir geschriebene irgendwann zurück:

#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

Um einige der Spannung töten lassen Sie mich offen zu legen, dass raw_text aussieht

 

, Rechts hat es von paypal Zahlung Anerkennung geschnitten worden.

Über der Linie, wenn in Teile zerlegt liest besser:

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

Machen wir einzelne Schritte in irb:

  irb (main):. 009:0> unescaped_array = CGI.unescape (raw_text) split ('&')    

 => ["Erfolg", "mc_gross = 10,00", "Nicht förderfähige protection_eligibility =", "payer_id = U7PPJJ4TSJ47E", "Steuer = 0,00", "payment_date = 09.45.30 10. Juli 2009 PDT", "payment_status = Pendente "]                                                                         

 irb (main): 013:0> unescaped_array unescaped_array.map = {| x | b = x.split ("="); b.push (nil), wenn b.size == 1, b}  

 => [["Erfolg", nil], ["mc_gross", "10,00"], ["protection_eligibility", "Nicht förderfähige"], ["payer_id", "U7PPJJ4TSJ47E"], ["Steuer", "0.00"] , ["payment_date", "09.45.30 10. Juli 2009 PDT"], ["payment_status", "Erwartung"]]                               

 irb (main): 014:0> flattened_array = unescaped_array.flatten     

 => ["Erfolg", nil, "mc_gross", "10,00", "protection_eligibility", "Nicht förderfähige", "payer_id", "U7PPJJ4TSJ47E", "Steuer", "0.00", "payment_date", "9.45: 30 Jul 10 2009 PDT "," payment_status "," Erwartung "]
 irb (main): 015:0>
 hash = Hash [* flattened_array]
 => {"Steuer" => "0.00", "payment_status" => "In Erwartung", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "Erfolg" => nil, "payment_date" = > "09.45.30 10. Juli 2009 PDT", "protection_eligibility" => "Nicht förderfähige"} 

BTW, ist * genannt Splat-Operator in Ruby

Eine weitere Möglichkeit zur Erstellung von Hash 'Array von Paaren ", ist die Verwendung injizieren:

  hash = [[1,2], [3,4]] injizieren ({}). {| Ergebnis element | Ergebnis [element.first] = result [element.last];} Ergebnis 

Es gibt einen weiteren Weg :) Schreiben Sie eine Schleife, dass ich als Übung, um den Lesern zu verlassen!

Hier ist ein wenig unabhängigen Verwendung Fall der Schaffung von Hash-Arrays:

  irb (main): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.?  : Geringere :: mehr}

 => {: Weniger => [1, 2, 3, 4],: mehr => [7, 9]} 

Sie können mehr tun, Dinge, im Grunde Ergebnis der Block als Schlüssel für dieses Element in der resultierenden Hash verwendet wird.

Google Mail, mutt und msmtp fix

17. August 2009 von Prashant · Kommentare
Abgelegt unter: Technik

Wenn Sie mutt und SMTP-Zugriff auf Google Mail. Hier ist eine (schlechte) Nachricht. Coole Jungs bei Google wieder geändert Zertifikat. Oh, hast du gefragt - wie kann es wissen? Einfache mutt gestartet beschweren sich über schlechte Zertifikat beim Versuch, msmpt, berüchtigten verwenden 'msmtp: TLS-Zertifikat fehlgeschlagen:. Das Zertifikat nicht hat einen bekannten Emittenten begrüßte mich auf dem Bildschirm.

Um zu bestätigen, zu überqueren -
Gerade nach laufen

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

An die Stelle der alten Thwate Server Jetzt erhalten Sie in folgenden Emittent Segment
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Glücklicherweise fix einfach ist, ist hier, was Sie tun müssen, auf Debian

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

Danach ändern Sie einfach folgende Zeile in you ~ /. 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

zu

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

Git und gut Umfrage

15. August 2009 von Prashant · Kommentare
Abgelegt unter: misc

Hier sind zwei Links zur Umfrage von git (Version Control System) und genial (Window Manager) Community. Wenn Sie eine der diese verwenden, bitte nehmen Sie etwas Zeit, um den Fragebogen auszufüllen. Betrachten Sie es als der einfachste Weg, um einen Beitrag zurück auf die Software, die Sie verwenden.
Hier sind die Links:

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

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

Hinweis - (Wie auf diesen Seiten, sondern an der Unterseite gefunden :) ) -
"Wenn Sie Cookies aktiviert haben, können Sie jederzeit einreichen teilweise gefüllten Umfrage, und zurück, um Ihre Antworten zu einem späteren Zeitpunkt und schloss sie später."

Merging-Hashes in yaml conf-Dateien

31. Juli 2009 von Prashant · Kommentare
Abgelegt unter: Technik

YAML ist sehr nützlich für das Schreiben von Konfigurationsdateien. Primärer Vorteil ist, dass es wie Text-Datei liest. Dies funktioniert wirklich gut, wenn deine config-Datei ist flach (keine Hierarchie) und hat keine Wiederholungen.
Wenn Ihre Konfigurationsdatei hat Wiederholungen dann macht es Sinn zu trennen und diese Elemente wiederverwenden. Was ich meine ist diese - sagen wir mal du deine config-Datei wie folgt aussieht:

  Entwicklung:
   input_location: common_input
   output_location: dev_location
   Mail:
     smtp_server: Ihr_Server
     Anmeldung: your_login
     Kennwort: top_secret
 Produktion:
   input_location: common_input
   output_location: dev_location
   Mail:
     smtp_server: Ihr_Server
     Anmeldung: your_login
     Kennwort: top_secret 

Unter der Annahme obigen Code in / tmp / test.yml hier ist, wie Sie in Python und Ruby zu lesen
$cat readyml.py

 #! / Usr / bin / env python
 von pprint Import pprint als PP
 # In Debian müssen python-yaml installieren
 von YAML Import Last, load_all, dump
 hash = load (open ('/ tmp / test.yml'))
 pp (Hash ['Entwicklung']) 


$ cat readyml.rb

  #! / Usr / bin / env ruby
 require 'pp'
 hash = YAML :: load (File.open ('/ tmp / test.yml'). lesen)
 PP-Hash ['Entwicklung'] 

hier ist ein handliches Einzeiler für Ruby-Version
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' oder Sie können die gleiche oder im IRB-Python-Konsole ausprobieren.

Beachten Sie, dass in dem obigen Code-Schnipsel, alles andere als Ausgang gleichen Standort in Entwicklung und Produktion ist ein Teil ist. Dies ist, wo yml Knotenkennung kommt zu retten. Idee ist einfach über einen Satz von Standardwerten zu überschreiben und sie an anderer Stelle.
Sie könnten auseinanderziehen wie folgt:

  Standardwerte: Standardwerte &
   input_location: common_input
   output_location: dev_location
   Mail:
     sender_name: Absender
     smtp_server: Ihr_Server
     Anmeldung: your_login
     Kennwort: top_secret
 Entwicklung:
   <<: * Standardwerte
 Produktion:
   <<: * Standardwerte
   output_location: prod_location 


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

Große, funktioniert es (tm)!.
Wohl haben wir gehandelt etwas Klarheit für ein bisschen Magie. Hier eine kleine Erläuterung: &, * und <<: & das Anker-Tag ist als Knoten-Kennung verstanden werden kann, ist * Knoten-Referenz und <<: steht für Hash-Merge.

Weitere Details finden Sie entweder yaml specs oder wikipedia
So weit so gut, aber es gibt einen Haken hier, sind diese Hash-Zusammenführungen nicht rekursiv. Was es bedeutet, ist dies: Angenommen, Sie möchten unterschiedliche Absender-Namen für E-Mail in beiden Umgebungen haben, könnten Sie versucht, die Folgendes leistet:

  Standardwerte: Standardwerte &
   input_location: common_input
   output_location: dev_location
   Mail:
     sender_name: Absender
     smtp_server: Ihr_Server
     Anmeldung: your_login
     Kennwort: top_secret
 Entwicklung:
   <<: * Standardwerte
   Mail:
     sender_name: sender_dev
 Produktion:
   <<: * Standardwerte
   output_location: prod_location
   Mail:
     sender_name: sender_prod 

Lets prüfen

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

Hoppla, etwas schief gelaufen ist, wie oben erwähnt Problem ist, dass die Hash-Merge nicht rekursiv ist und während der Zusammenführung es ersetzt Mail des Verzugs mit der Post der Produktion, die nur einen Schlüssel hat. Lösung / Workaround ist es, entrollen eine weitere Ebene:

  common_settings: & common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: & mail_defaults
  sender_name: Absender
   smtp_server: Ihr_Server
   Anmeldung: your_login
   Kennwort: top_secret

 Standardwerte: Standardwerte &
   <<: * Common_settings
   Mail:
     <<: * Mail_defaults
 Entwicklung:
   <<: * Standardwerte
 Produktion:
   <<: * Standardwerte
   Mail:
     <<: * Mail_defaults
     sender_name: sender_prod

Lets erneut prüfen

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

Wussten Sie sagen, Sie haben noch eine weitere Ebene der Verschachtelung, gut man kann definitiv entrollen ein weiteres Level, aber dann wird es ein Durcheinander. Also, wenn Sie nicht versuchen, Lösung für Türme von Hanoi in einer conf-Datei zu schreiben, ist es besser, conf-Datei als Graben in yaml oder etwas anderes restucture. Aber das ist Ihr Anruf trotzdem.

Große Programmierer finden, einfache Lösungen für komplexe Probleme

30. Juni 2009 von Prashant · Kommentare
Abgelegt unter: misc

Nach langer Zeit konnte ich die Quelle für die folgende Zitat-finden

Junior-Programmierer erstellen einfache Lösungen für einfache Probleme. Senior-Programmierer erstellen komplexe Lösungen für komplexe Probleme. Große Programmierer finden, einfache Lösungen für komplexe Probleme.

Es ist aus einem Essay namens Schöne Software von Charles Connell.

Ein weiterer Favorit von mir ist ein The Zen of Python -

Schön ist besser als hässlich.
Explizite ist besser als implizit.
Einfacher ist besser als kompliziert.
Complex ist besser als kompliziert.
Flach ist besser als verschachtelt.
Sparse ist besser als dicht.
Ablesbarkeit zählt.
Besondere Fälle sind nicht speziell genug, um die Regeln zu brechen.
Obwohl Praktikabilität schlägt Reinheit.
Fehler sollten nie still passieren.
Sofern nicht ausdrücklich zum Schweigen gebracht.
Angesichts der Unklarheit, verweigern Sie der Versuchung, zu erraten.
Es sollte ein-und vorzugsweise nur ein offensichtlicher Weg, es zu tun.
Obwohl auf diese Weise möglicherweise nicht auf den ersten offensichtlichen sei denn, Sie sind Holländer.
Jetzt ist besser als nie.
Obwohl nie ist oft besser als * rechts * jetzt.
Wenn die Umsetzung ist schwer zu erklären, ist es eine schlechte Idee.
Wenn die Umsetzung ist einfach zu erklären, kann es eine gute Idee sein.
Namespaces sind ein Hupen großartige Idee - lasst uns mehr davon!
-------------------------
und dann gibt es klassische Tao of Programming

-

Credits wie auf der gelinkten Seite ggf. mit-

Übersetzt von Geoffrey James

Transkribiert von Duke Hillard

Übermittelt durch die Anupam Trivedi, Sajitha Tampi und Meghshyam Jagannath

Re-html-sierten und herausgegeben von Kragen Sittler

-

Buch 1 - The Silent Void

So sprach der Meister-Programmierer:

"Wenn du gelernt hast, um den Fehlercode zu entreißen, aus der Falle Rahmen, es
wird Zeit für Sie zu verlassen. "

1,1

Etwas geheimnisvoll gebildet, geboren in der stillen Leere. Warten allein und
unbewegt, ist es auf einmal still und doch in ständiger Bewegung. Es ist die Quelle
aller Programme. Ich weiß nicht ihren Namen, also werde ich nennen es das Tao der
Programmierung.

Wenn das Tao ist groß, dann das Betriebssystem ist groß. Wenn das Betriebssystem
System ist großartig, dann wird der Compiler ist groß. Wenn der Compiler ist groß,
dann die Anwendung ist groß. Der Nutzer freut und es existiert
Harmonie in der Welt.

The Tao of Programming fließt weit weg und kehrt auf den Wind von Morgen.

1,2

Das Tao gebar Maschinensprache. Maschinen-Sprache gebar die
Assembler.

Der Assembler gebar den Compiler. Nun gibt es zehntausend
Sprachen.

Jede Sprache hat ihren Zweck, wie bescheiden. Jede Sprache drückt die
Yin und Yang von Software. Jede Sprache hat ihren Platz in der Tao.

Aber nicht in COBOL-Programm, wenn Sie es vermeiden können.

1,3

Im Anfang war das Tao. Das Tao gebar Raum und Zeit.
Deshalb Raum und Zeit sind Yin und Yang der Programmierung.

Programmierer, die nicht begreifen das Tao sind immer läuft die Zeit davon
und Raum für ihre Programme. Programmierer, die das Tao immer verstehen
über genügend Zeit und Raum, um ihre Ziele zu erreichen.

Wie könnte es anders sein?

1,4

Der kluge Programmierer wird über das Tao erzählt und folgt ihr. Die durchschnittliche
Programmiergerät wird über Tao und sucht sie erzählt. Die törichten Programmierer
wird über das Tao erzählt und lacht darüber.

Wenn es nicht zum Lachen, gäbe es kein Tao sein.

Die höchsten Töne sind am schwersten zu hören.
Für die Zukunft ist ein Weg, sich zurückzuziehen.
Großes Talent zeigt sich erst spät im Leben.
Selbst ein perfektes Programm immer noch Fehler.

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

Buch 2 - Die alten Meister

So sprach der Meister-Programmierer:

"Nach drei Tagen ohne Programmierkenntnisse, wird das Leben sinnlos."

2,1

Die Programmierer von alt waren geheimnisvoll und tiefgründig. Wir können nicht ergründen
ihre Gedanken, so alles, was wir tun ist, beschreiben ihr Aussehen.

Im Bewusstsein, wie ein Fuchs über das Wasser. Aufmerksam zu machen, wie ein General auf die
Schlachtfeld. Art, wie die Gastgeberin ihre Gäste begrüßen. Einfach, wie
uncarved Holzblöcke. Blickdichte, wie schwarze Pools in abgedunkelten Höhlen.

Wer kann sagen, die Geheimnisse ihrer Herzen und Köpfe?

Die Antwort gibt es nur in Tao.

2,2

Großmeister Turing einst träumte, dass er eine Maschine war. Als er erwachte,
rief aus:

"Ich weiß nicht, ob ich träume AM Turing, dass ich eine Maschine bin, oder eine
Maschine geträumt, dass ich AM Turing! "

2,3

Ein Programmierer aus einer sehr großen Computer-Firma ging an eine Software
Konferenz und kehrte dann zu seinem Vorgesetzten melden und sagen: "Was
von Programmierern arbeiten für andere Unternehmen? Sie benahmen sich schlecht und waren
unbekümmert mit Auftritten. Ihr Haar war lang und ungepflegt und ihre
Kleider waren faltig und alt. Sie stürzte unsere Hospitality Suite und sie
gemacht unhöflich Geräusche während meiner Präsentation. "

Der Manager sagte: "Ich hätte nie gesendet haben Sie zu der Konferenz. Diejenigen
Programmierer leben jenseits der physischen Welt. Sie betrachten das Leben absurd, ein
zufälliges Zusammentreffen. Sie kommen und gehen, ohne zu wissen Einschränkungen.
Ohne Sorgen, sie leben nur für ihre Programme. Warum sollten sie sich die Mühe
mit gesellschaftlichen Konventionen?

"Sie sind am Leben innerhalb des Tao."

2,4

Ein Novize fragte den Meister: "Hier ist ein Programmierer, der nie entwirft,
Dokumente oder Tests seine Programme. Doch alle wissen, wer ihn halten ihn für einen
die besten Programmierer der Welt. Warum ist das? "

Der Meister antwortet: "Das Programmierer hat das Tao gemeistert. Er ist gegangen
darüber hinaus die Notwendigkeit für Design, er wird nicht wütend, wenn das System
Abstürze, akzeptiert aber das Universum ohne Sorge. Er hat darüber hinaus die gegangen
müssen für die Dokumentation, er kümmert sich nicht länger, ob jemand sieht seinen Code.
Er hat darüber hinaus die Notwendigkeit für die Prüfung gegangen, jedes seiner Programme sind perfekt
in sich selbst, heiter und elegant, ihren Zweck selbstverständlich. Wahrlich,
er hat das Geheimnis des Tao getreten. "

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

Buch 3 - Design

So sprach der Meister-Programmierer:

"Wenn das Programm getestet wird, ist es zu spät, um Design machen
Veränderungen. "

3,1

Es war einmal ein Mann, der mit einem Computer-Messe ging. Jeder Tag, als er
eingegeben, sagte der Mann die Wache an der Tür:

"Ich bin ein großer Dieb, für meine Taten der Ladendiebstahl bekannt. Sein
vorgewarnt, wird für diese Messe nicht unplundered. entkommen "

Diese Rede störte die Wache stark, denn es gab Millionen von
Dollar von EDV-Anlagen im Inneren, so beobachtete er den Mann aufmerksam. Aber
der Mann lediglich wanderte von Stand zu Stand, summte leise vor sich hin.

Als der Mann verließ, nahm die Wache ihn beiseite und durchsuchten seine Kleidung, sondern
nichts war zu finden.

Am nächsten Tag der Messe, kehrte der Mann und tadelte die Wache
sagte: "Ich kam mit einer großen Beute gestern, aber heute wird sogar
besser. "Also die Wache beobachtete ihn immer enger, aber ohne Erfolg.

Am letzten Tag der Messe, konnte der Wachmann seine Neugier zügeln
nicht mehr. "Sir Dieb", sagte er: "Ich bin so perplex, kann ich nicht leben
Frieden. Bitte erleuchte mich. Was ist es, dass Sie stehlen? "

Der Mann lächelte. "Ich freue mich Stehlen von Ideen", sagte er.

3,2

Es war einmal ein Master-Programmierer, der unstrukturierte Programme schrieb. Ein
neuen Programmierer, versuchen, ihn nachzuahmen, begann auch zu schreiben
unstrukturierten Programmen. Wenn der Novize fragte den Meister zu seinem bewerten
Fortschritt, kritisierte der Meister ihn für das Schreiben von unstrukturierten Programme,
sagte: "Was ist angemessen für den Master ist nicht geeignet für die
Neuling. Sie müssen das Tao vor transzendieren Struktur zu verstehen. "

3,3

Es war einmal ein Programmierer, der an den Hof des Kriegsherrn befestigt war
von Wu. Der Kriegsherr, fragte der Programmierer: "Was ist leichter zu entwerfen: ein
Accounting-Paket oder ein Betriebssystem? "

"Ein Betriebssystem", antwortete der Programmierer.

Der Kriegsherr sprach einen Ausruf des Unglaubens. "Sicherlich ein Rechnungswesen
Paket ist trivial neben der Komplexität eines Betriebssystems ", so
sagte.

"Nicht so", sagte der Programmierer, "bei der Konzeption einer Accounting-Paket,
Der Programmierer arbeitet als Mittler zwischen Menschen mit unterschiedlichen
Ideen: wie sie arbeiten muss, wie seine Berichte erscheinen müssen, und wie es
entsprechen den Steuergesetzen. Im Gegensatz dazu wird ein Betriebssystem nicht beschränkt
durch äußere Erscheinungen. Bei der Gestaltung eines Betriebssystems, der Programmierer
sucht die einfachste Harmonie zwischen Maschine und Ideen. Deshalb ist ein
Betriebssystem ist einfacher zu entwerfen. "

Der Kriegsherr von Wu nickte und lächelte. "Das ist alles schön und gut, aber
das ist leichter zu debuggen? "

Der Programmierer machte keine Antwort.

3,4

Ein Manager ging nach dem Master-Programmierer und zeigte ihm die Anforderungen
Dokument für eine neue Anwendung. Der Manager fragte den Meister: "Wie lange
wird es dauern, um dieses System zu entwerfen, wenn ich fünf Programmierer zuweisen? "

"Es wird ein Jahr dauern", sagte der Meister prompt.

"Aber wir brauchen dieses System sofort oder sogar noch früher! Wie lange wird es
nehmen, wenn ich zehn Programmierer zuweisen? "

Der Master-Programmierer runzelte die Stirn. "In diesem Fall wird es zwei Jahre dauern."

"Und was, wenn ich hundert Programmierer zuweisen, um es?"

Der Master-Programmierer zuckte mit den Schultern. "Dann wird das Design wird nie
abgeschlossen ", sagte er.

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

Buch 4 - Codierung

So sprach der Meister-Programmierer:

"Ein gut geschriebenes Programm ist seinen eigenen Himmel, ein schlecht geschriebenes Programm ist
seine eigene Hölle. "

4,1

Ein Programm sollte leicht und agil, seine Unterprogramme wie ein angeschlossenes
Perlenkette. Der Sinn und Zweck des Programms sollte beibehalten werden
überall. Es sollte weder zu wenig oder zu viel, weder
unnötige Schlaufen noch nutzlos Variablen, weder Mangel an Struktur noch
überwältigende Steifigkeit.

Ein Programm sollte nach dem `Gesetz des geringsten Staunen '. Was ist das Gesetz?
Es ist einfach, dass das Programm immer auf den Benutzer reagieren in der Weise
das erstaunt ihn zumindest.

Ein Programm, egal wie komplex, sollten als eine Einheit agieren. Das Programm
sollte von der Logik innerhalb und nicht durch Äußerlichkeiten gerichtet werden.

Wenn das Programm nicht auf diese Vorgaben, wird es in einem Zustand sein,
Unordnung und Verwirrung. Der einzige Weg, dies zu korrigieren ist, um das neu zu schreiben
Programm.

4,2

Ein Novize fragte den Meister: "Ich habe ein Programm, das irgendwann läuft und
manchmal bricht. Ich habe die Regeln der Programmierung gefolgt, doch bin ich
völlig verwirrt. Was ist der Grund dafür? "

Der Meister antwortete: "Sie sind verwirrt, weil Sie nicht verstehen Tao.
Nur ein Narr erwartet rationales Verhalten von seinen Mitmenschen. Warum tun Sie
erwarten, dass es von einer Maschine, die Menschen konstruiert haben? Computer simulieren
Determinismus; nur Tao ist perfekt.

"Die Regeln der Programmierung sind vergänglich, nur ist das ewige Tao. Deshalb
Sie müssen nachdenken, bevor Sie Tao Erleuchtung zu empfangen. "

"Aber wie weiß ich, wann ich die Erleuchtung empfangen haben?", Fragte der
Neuling.

"Ihr Programm wird dann korrekt laufen", antwortete der Meister.

4,3

Ein Meister wurde aus dem die Art des Tao zu einem seiner Novizen. "Die
Tao wird in allen Software verkörpert - ganz gleich, wie unbedeutend ", sagte
der Meister.

"Ist das Tao in einem Handheld-Rechner?", Fragte der Novize.

"Es ist", lautete die Antwort.

"Ist das Tao in einem Videospiel?", Fuhr der Neuling.

"Es ist sogar in einem Videospiel", sagte der Meister.

"Und ist das Tao in der DOS für einen Personal Computer?"

Der Master hustete und veränderte seine Lage ein wenig. "Die Lektion ist zu Ende
für heute ", sagte er.

4,4

Prinz Wangs Programmierer wurde Verschlüsselungssoftware. Seine Finger tanzten über die
Tastatur. Das Programm ohne Fehlermeldung kompiliert, und das Programm
rannte wie ein sanfter Wind.

"Excellent!" Der Prinz rief: "Ihr Technik ist einwandfrei!"

"Technik", sagte der Programmierer Drehen von seinem Terminal, "Was ich
Tao folgen ist - jenseits aller Techniken! Als ich anfing zu programmieren, ich
würde vor mir sehe das ganze Problem in einem Masse. Nach drei Jahren habe ich keine
mehr sah diese Masse. Stattdessen benutzte ich Unterprogramme. Aber jetzt sehe ich nichts.
Mein ganzes Wesen besteht in einer formlosen Leere. Meine Sinne sind im Leerlauf. Mein Geist,
frei, ohne Plan zu arbeiten, folgt seinen eigenen Instinkt. Kurz gesagt, mein Programm
schreibt sich. Zwar gibt es manchmal schwierige Probleme. Ich sehe sie
Kommen, ich verlangsamen, beobachte ich leise. Dann ändere ich eine einzige Zeile Code
und die Schwierigkeiten verschwinden wie Puffs von Rauch im Leerlauf. Ich kompilieren Sie dann das
Programm. Ich sitze still und ließ die Freude der Arbeit füllen meines Wesens. Ich schließe meine
Augen für einen Moment und dann abmelden. "

Prinz Wang sagte: "Wäre das alles von meinen Programmierern so weise waren!"

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

Buch 5 - Wartung

So sprach der Meister-Programmierer:

"Obwohl ein Programm sein, sondern drei Zeilen lang, eines Tages wird es sein müssen
erhalten bleibt. "

5,1

Eine gut genutzte Tür braucht kein Öl in den Angeln.
Ein schnell fließenden Strom wächst nicht stagniert.
Weder Ton noch Gedanken können durch ein Vakuum zu reisen.
Software verrottet, wenn nicht verwendet.

Dies sind große Geheimnisse.

5,2

Ein Manager bat einen Programmierer, wie lange es ihn zu ergreifen, um das zu beenden
Programm, an dem er arbeitete. "Es ist vollbracht wird morgen sein", das
Programmierer antwortete prompt.

"Ich glaube, Sie sind unrealistisch", sagte der Manager, "Ehrlich gesagt, wie
lange wird es dauern? "

Der Programmierer dachte einen Moment nach. "Ich habe einige Features, die ich möchte
hinzuzufügen. Das dauert mindestens zwei Wochen ", sagte er schließlich.

"Auch, dass zu viel zu erwarten ist", betonte der Manager, "ich werde sein
zufrieden, wenn Sie sagen mir einfach, wenn das Programm beendet ist. "

Der Programmierer war damit einverstanden.

Einige Jahre später zog sich der Manager. Auf dem Weg zu seiner Pensionierung
Mittagessen, entdeckte er den Programmierer schlafend an seinem Terminal. Er war
Programmierung die ganze Nacht.

5,3

Ein Anfänger-Programmierer wurde einmal vergeben, um eine einfache finanzielle Paket codieren.

Der Novize arbeitete wie wild für viele Tage, aber wenn sein Meister bewertet
sein Programm, entdeckte er, dass es eine Bildschirm-Editor, eine Reihe von enthaltenen
generalisierte Grafik-Routinen, eine künstliche Intelligenz-Schnittstelle, aber
nicht die geringste Erwähnung von etwas finanzielle.

Wenn der Meister danach gefragt, wurde der Neuling empört. "Sei nicht
so ungeduldig ", sagte er," ich werde in der Finanzbranche Zeug schließlich setzen. "

5,4

Muss ein guter Landwirt zu vernachlässigen eine Ernte er gepflanzt hat?
Ist ein guter Lehrer zu übersehen, auch die bescheidenste Student?
Ist ein guter Vater zu erlauben ein einzelnes Kind zu verhungern?
Muss ein guter Programmierer weigern sich seinen Code zu pflegen?

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

Buch 6 - Management

Thus spake the master programmer:

“Let the programmers be many and the managers few – then all will be
productive.”

6.1

When managers hold endless meetings, the programmers write games. Wann
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. Wann
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. Es
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. Kein
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. “I
see that the device claims to have three levels of play: Easy, Medium, and
Hard,” said the master. “Yet every such device has another level of
play, where the device seeks not to conquer the human, nor to be conquered
by the human.”

“Pray, great master,” implored the novice, “how does one find this
mysterious setting?”

The master dropped the device to the ground and crushed it underfoot. 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 · Kommentare
Abgelegt unter: Technik

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 · Kommentare
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ächste Seite »