δημοσκόπηση, ping, pubsub, pubsubhub, pubsubhubbub

Σε περίπτωση που είστε δύσπιστοι, υπάρχει μια μέθοδος στην τρέλα παραπάνω, στον τίτλο της θέσης. Σε κύκλους τεχνολογίας δεν είναι πιθανό ότι δεν έχετε ακούσει για pubsubhubbub. Στο γρήγορο λίγους μήνες, υπήρξε μία από τις τρεις πρώτες μιλήσει για πράγματα. Άλλοι δύο είναι ομομορφικός κρυπτογράφησης και το Google κύμα [ 1. ]. Επιστρέφοντας στην τρέχουσα θέση - άποψη του τίτλου δείχνουν πώς μπορείτε να πάρετε το περιεχόμενο από άλλους ανθρώπους. Μετά λεπτομέρειες γίνει πιο σαφές, αν φανταστεί κανείς τα πράγματα που συμβαίνουν σε σχέση με τα blogs, παρόλο που εννοιολογικά δεν περιορίζεται σε blogs.

Δημοσκόπηση αναφέρεται στο σενάριο όπου οι πελάτες διατηρούν ζητώντας από το διακομιστή, αν κάτι νέο έχει έρθει. Πόσο συχνά να ρωτήσω για ενημερώσεις θα είναι πάντα ένα πρόβλημα με το εκλογικό πολύ συχνά ή πολύ σπάνια, αλλά ως ένας αναγνώστης επεσήμανε εδώ ότι ένα μεγάλο, πράγμα που με δημοσκοπήσεις είναι ότι ο διακομιστής δεν χρειάζεται να διατηρούν την κατάσταση.

Ping αναφέρεται στην περίπτωση όπου όταν δημοσιεύετε ένα άρθρο, εσείς (ή το λογισμικό σας) ενημερώνει, επίσης, μερικά δημοφιλή (κεντρικό) υπηρεσίες ενημέρωσης. Κάποιο υπόβαθρο εδώ .

Επόμενο είναι pubsub που σημαίνει publish / subscribe, ένα από τα πρώτα βήμα για έγινε εδώ από το Evan Henshaw-Plath και Kellan Έλιοτ-McCrea (72 διαφάνειες, αλλά αξίζει να περάσει). Αδιάσειστα παράδειγμα που έδωσαν κατά ήταν αυτό - σε μια συγκεκριμένη ημερομηνία, το Flickr FriendFeed ανιχνεύσει 2,9 εκατομμύρια φορές για να δείτε τις τελευταίες φωτογραφίες από 45.754 χρήστες, εκ των οποίων 6.721 είχαν επισκεφθεί το Flickr σε αυτές τις 24 ώρες και θα μπορούσαν να έχουν «εν δυνάμει» φωτογραφία. Σημειώστε ότι αυτό που προτείνεται δεν ήταν μια νέα τεχνολογία, όπως τονίζουν «επαναστατικό νέο 20 χρονών τεχνολογίας». Αν το κάνει για τα blogs, στη συνέχεια, ένα από τα σημαντικότερα προβλήματα με XMPP - παρουσία γενικά δεδομένα, τα οποία μπορεί να είναι τόσο υψηλό όπως 60-70% μπορεί να μειωθεί πολύ.

pubsubhub σημαίνει δημοσιεύει subscribe κόμβο και pubsubhubbub είναι ένα πρωτόκολλο, πυρήνας των οποίων είναι η ιδέα της pubsubhub. Όπου οι εκδότες (δηλαδή bloggers) ενημερώνει το κέντρο που (μπορεί να είναι περισσότερα από ένα κέντρα, τα οποία επικοινωνούν μεταξύ τους) κατοικεί »κάπου στο νέφος», σύμφωνα με το πρωτόκολλο αυτό μπορεί να ωθήσει ή να τραβήξει σύμφωνα με το πρωτόκολλο, αλλά το επόμενο σύνδεσμο στο αλυσίδα, κομβικό σημείο για τον πελάτη (π.χ. αναγνώστες) έχει ωθήσει πάντα μοντέλο. Αυτή η σελίδα είναι καλό σημείο εκκίνησης για pubsubhubbub, διαφάνειες εικόνα είναι καλή. Πάντα εύγλωττη Anil Dash περιγράφει εδώ ως μπουτόν διαδίκτυο.
Δύο άλλες σχετικές αναγνώσεις είναι webhooks που είναι βασικά http επιστροφές κλήσεων. Github χρησιμοποιεί , οπότε το PayPal για ασύγχρονη ειδοποιήσεις πληρωμής στο IPN . Έτσι κάνουν και πολλοί άλλοι. Σχετική έννοια rsscloud που είναι και πάλι pubsub κόμβο. Ακολουθήστε αυτό το σύνδεσμο για περισσότερες λεπτομέρειες.

Ίσως να αναρωτιέστε ποιο είναι το σημείο της γραφής όλα αυτά εδώ, υπάρχουν δύο 1. Αυτά τα πράγματα είναι αξίζει να γνωρίζει, τουλάχιστον ελάχιστα και 2. Αυτό το blog είναι ενεργοποιημένη pubsubhubbub τώρα μέσω του κόμβου appspot χρήση αυτής της wordpress plugin και τις ζωοτροφές είναι πάρα πολύ pubsubhubbub ενεργοποιηθεί μέσω του FeedBurner, σύνδεσμο εδώ
-
[ 1 ]. - Καλή εισαγωγικό διαβάσει για την πλήρη κρυπτογράφηση ομομορφικός είναι αυτό το άρθρο του Bruce Schneier και αυτή η συζήτηση είναι περισσότερο ή λιγότερο μόνη πηγή για το Google Wave.

-Ενημέρωση - Αυτό το μήνυμα εξηγεί πώς η απαίτηση του κοινού για το διακομιστή επανάκλησης μπορεί να εργαστεί γύρω από τους πελάτες για την επιφάνεια εργασίας με τη χρήση XMPP πύλη (για pubsubhubbub).

Ένα κομμάτι της συναρμολόγησης

29 Αυγ του 2009 από Prashant · Σχόλια
Filed under: Τεχνολογία

Αφού διαβάσετε αυτό το άρθρο για το κλείδωμα χωρίς εφεδρείες και βλέποντας τη χρήση του CAS (σύγκριση και ανταλλαγή), ένιωσα σαν απόσπαση τον κωδικό της Συνέλευσης να πράξει το ίδιο. Χρησιμοποιήστε περίπτωση πάνω ήταν εκεί για να γράψει μια εγγενή μέθοδο και να το ονομάσουμε από την Ιάβα (πίσω στο 1,5, όταν ταυτόχρονη δομές δεδομένων σε Java ήταν περισσότερο ή λιγότερο ανύπαρκτη). Χωρίς άλλη καθυστέρηση, θα απελευθερώσει τον κωδικό σας επάνω :) . Πρώτη είναι για το CAS και το δεύτερο είναι για την πληροφορική GCD χρησιμοποιώντας τον αλγόριθμο του Ευκλείδη (αυτό μπορεί να βρεθεί σε πολλά μέρη και σεμινάρια, όπως επίσης).

Μεταγλωττίστε και εκτελέστε τις οδηγίες gcc file_name.c ; ./a.out

Συγκρίνετε και Εναλλαγ

   # Include 
  # Include 
 / / Ανταλλαγή - newvalue, comperand είναι παλιά / αναμενόμενη τιμή
 / *
  * Λειτουργία κάνει πραγματικότητα τα εξής πράγμα - αν η τιμή στο dest * είναι ίση με OldValue στη συνέχεια να την αντικαταστήσει με άλλο newvalue αφήσει αμετάβλητη: όλα αυτά δεν atomically
  *
  * Υπάρχουν δύο επιλογές για την τιμή επιστροφής
  * 1.is αρχική αξία του dest * και αφήστε το βάρος της καλώντας fxn να το συγκρίνουμε με oldval
  * 2.  το κάνουμε εδώ και επιστρέφει 0 ή 1, αυτό θα πρέπει να είναι πιο αποτελεσματική
  ** /

 / * Το αλλάξετε αργότερα σε μακρο * /
 int CAS (int * DEST, int OldValue, int newvalue) {
	 printf ("(% d,% d,% d)", * DEST, OldValue, newvalue)?
	 / * Int CAS (DEST int, int OldValue, int newvalue) {* /
	 / * Int CAS (DEST int, int newvalue, int OldValue) {* /
	 int αποτέλεσμα = 1 ;/ * 1 δείχνει ότι CAS πέτυχε και 0 δείχνει ότι απέτυχε * /
	 / * Btw πρέπει να cc για 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" / * πρέπει να κλειδώσετε είναι στην ίδια γραμμή * /
			 "JZ ΕΓΙΝΕ \ n \ t"
			 "Movl $ 0,% 1 \ n \ t"
			 "ΕΓΙΝΕ: \ n \ t"
			 : "= M" (ύδωρ), "= g" (αποτέλεσμα)
			 : "Ζ" (OldValue), "G" (newvalue), "M" (ύδωρ)
			 : "EAX%", "ebx%", "ECx", το "cc"
			 )?
	 printf ("(% d,% d,% d)", * DEST, OldValue, newvalue)?
	 επιστρέψει αποτέλεσμα?
 }

 / * TODO
  * Γράψω άλλη ASM fxn που βάζει πάνω από fxn σε έναν βρόχο, ενώ συνεχίζουμε να προσπαθούμε και αν δεν πετύχει * /

 int main () {
	 int a = 5, β = 6?
	 int * c = (int *) malloc (sizeof (int))?
	 * Γ = 6?
	 / * Int c = 6? * /
	 printf ("% d \ n", CAS (γ, β, β))?
	 printf ("% d \ n", CAS (γ, β, α))?
	 printf ("% d \ n", CAS (γ, α, α))?
	 printf ("% d \ n", CAS (γ, β, β))?
	 * Γ = 6?
	 / * Γ = 5? * /
	 printf ("αλλάζοντας την τιμή του γ * σε% d \ n", * γ)?
	 printf ("% d \ n", CAS (γ, β, β))?
	 printf ("% d \ n", CAS (γ, β, α))?
	 printf ("% d \ n", CAS (γ, α, α))?
	 printf ("% d \ n", CAS (γ, α, β))?
	 printf ("% d \ n", CAS (γ, β, α))?
	 return 0?
 }

Σημειώνει Μορφοποίηση - μοιάζει επισήμανσης σύνταξη WP είναι η προσθήκη στο τέλος, ότι αγνοούν.

GCD

 # Include 
 int gcd (int a, int b) {
     int αποτέλεσμα?
     / * Υπολογισμός Μέγιστος κοινός διαιρέτης χρησιμοποιώντας τον αλγόριθμο του Ευκλείδη * /
     __asm__ volatile__ __ («movl% 1,%% EAX?"
                           "Movl% 2,%% ebx?"
                           "Contd: cmpl $ 0,%% ebx?"
                           "Je ΕΓΙΝΕ?"
                           «EDX xorl%%,%% EDX?"
                           "Idivl% ebx%?"
                           "Movl ebx%%,%% EAX?"
                           «EDX movl%%,%% ebx?"
                           "JMP contd?"
                           "ΕΓΙΝΕ: movl% EAX%, 0%?": "= G" (αποτέλεσμα): "ζ" (α), "G" (β)
     )?

     επιστρέψει αποτέλεσμα?
 }

 int main () {
     int με πρώτο, δεύτερο?
     printf ("Εισάγετε δύο ακεραίων:")?
     scanf ("% d% d", & πρώτα, και το δεύτερο)?

     printf ("ΠΔΠ των% d & d% είναι% d \ n", πρώτο, δεύτερο, gcd (πρώτη, δεύτερη))?

     return 0?
 }

Παγκόσμια κρίκετ αναμένει μια Νέα Παγκόσμια Τάξη

25 Αυγούστου του 2009 από Prashant · Σχόλια
Filed under: Διάφορα

Μετά από μια σειρά πέντε δοκιμών που εκτείνεται και περίπου δύο μήνες, Αγγλία αναγεννημένα στάχτες.

Ας μιλήσουμε για την πρώτη νικήτρια ομάδα - μεσαία τάξη είναι η «μέση», αν δεν θέλετε να κρίσιμη. Συμβολή Greame Swann με το ρόπαλο δεν θα μετράνε λιγότερο από τη συμβολή με την μπάλα. Ευρεία Stuart - καλύτερο all around μοτοσυκλέτα ήταν μη εκκίνησης για την πέμπτη δοκιμή. Andrew Strauss ήταν η μόνη συνεπής σφαιριστής και Jimmy Anderson ήταν η μόνη συνεπής σφαιριστής.

Το σημείο εδώ δεν είναι να μαλώσουν με τα επιτεύγματα της νικήτριας ομάδας, αλλά να τεθεί σε προοπτική το γεγονός ότι παρ 'όλα αυτά, η Αυστραλία έχασε. θα πρέπει να σκεφτεί για λίγα δευτερόλεπτα, αν ζητηθεί να αναφέρουμε καλύτερο σφαιριστής τους. Δεξιά, ήταν BW Hilfenhaus. Hauritz προσδοκία ξεπέρασε everbody, αλλά δεν ήταν ακόμα αρκετά καλός για να επιλεγεί για δύο από τις πέντε δοκιμασίες. Νότια Αφρική δεν έγινε ποτέ ένα κόσμο χωρίς beater μια παγκόσμιας κλάσης κλωστή, η Αυστραλία δεν μπορούν να ελπίζουν ότι θα παραμείνει ένας χωρίς ένα αρκετά καλό ενός τουλάχιστον. Μάγος εγκατέλειψε τη σκηνή και δεν μοιάζει πια τέχνη, ξεχάστε μαγεία. Ponting στέκεται ψηλά μικρότερο μεταξύ θνητών και Μάικλ Κλαρκ σηκώνεται πολύ συχνά, αλλά αυτό τους κάνει μια ομάδα με μερικούς πολύ καλούς παίκτες και δεν είναι μια πολύ καλή ομάδα.
Στάχτες 2009 θα θυμόμαστε για τελευταία Στάχτες Andrew Flintoff, η άφιξη Στιούαρτ Γενικοί ως ένα all rounder (εάν προσθέτει κάποιες περισσότερες λαογραφία Ashes to ελπιδοφόρο ξεκίνημα του), και ένα από τα πιο αποκαλυπτικό αιώνα ντεμπούτο όλων των εποχών από Trott, αλλά θα είναι επίσης μείνει στην ιστορία ως το σημείο όπου ενδοιασμούς σχετικά με την υπεροχή της Αυστραλίας ήταν επιτέλους να ξεκουραστούν, να είναι πάνω. Μην με παρεξηγείτε μπορούν ακόμα να ξεθάψει τον Mike Hussey ή Stuart Clark, αλλά νιώθεις τη συμβολή όλων των μεγάλους στιγμή που χάνονται. Μερικές φορές έρχονται για να σας υπενθυμίσω τους στο IPL, αλλά ακόμα δεν μπορούν να αντικατασταθούν. Ας αισθάνεται ευλογημένος για να έχει δει Warne, McGrath και Gilchrist να παίζουν μαζί και να υποστηρίζονται από Waughs, Ponting, Hyden, Martin και Langer.

Πηγαίνοντας προς τα εμπρός, η Νότια Αφρική θα παραμένει πάντα μια πολύ καλή ομάδα, αλλά πρέπει να κερδίσει στους ημιτελικούς και να είναι πιο συνεπής σε όλο τον κόσμο, το Πακιστάν θα παραμείνει αινιγματικά λαμπρή, ινδική μικρά όπλα πιθανότατα θα το βρείτε πολύ δύσκολο να γεμίσει τα παπούτσια της έκτακτης προκατόχων. Σρι Λάνκα θα πρέπει να συνεχίσει να επιδεικνύει τις αναλαμπές της τέχνης στην τέχνη. Αλλά, ίσως χρειαστεί να περιμένετε για λίγο πριν έχουν όλοι έξω κυρίαρχη ομάδα ή ένας καπετάνιος πριν καταγγέλλει την έλλειψη ανταγωνισμού, όπως ο Steve Waugh έκανε κάποτε.

Σε μια σχετική σημείωση - ας καλωσορίζω τον ερχομό πίσω του Ασίφ, έχει ένα πολύ κόλαση του δυναμικού, ας ελπίσουμε να δούμε μερικά από αυτά και επίσης ευπρόσδεκτοι Λουλούδι Andy στο νέο awatar, δικαίωμα που δεν μπορείτε να κρατήσετε καλοί άνθρωποι κάτω για πολύ.

ρουμπίνι one liners να δημιουργήσει hash

20 του Αυγούστου, 2009 από Prashant · Σχόλια
Filed under: Τεχνολογία

Χθες περνώντας από ένα από τα παλαιά προγράμματα μου, βρήκα αυτό που γράφτηκε από εμένα κάποια στιγμή πίσω:

#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

Για να σκοτώσει ορισμένα από αγωνία επιτρέψτε μου να αποκαλύψει ότι raw_text μοιάζει

 

, Δικαίωμα που έχει κοπεί από το PayPal αναγνώριση πληρωμής.

Πάνω από γραμμή σε περίπτωση που σπάσει σε τμήματα διαβάζει καλύτερα:

  unescaped_array = CGI.unescape (raw_text). διαιρούμενα ('&')
   unescaped_array = unescaped_array.collect {| x | β = x.split ("=")? b.push (μηδέν) αν b.size == 1? β}
   flattened_array = unescaped_array.flatten
   Hash hash = [* flattened_array] 

Ας κάνουμε ατομικά βήματα στο IRB:

  IRB (κύριο):. 009:0> = unescaped_array CGI.unescape (raw_text) διαιρούμενα ('&')    

 => ["Επιτυχία", "mc_gross = 10,00", "protection_eligibility = Αποκλεισμός", "payer_id U7PPJJ4TSJ47E =", "φόρος = 0,00", "payment_date = 9:45:30 10 Ιούλη 2009 PDT", "payment_status = αναμονή »]                                                                         

 IRB (κύριο): 013:0> = unescaped_array unescaped_array.map {| x | β = x.split ("=")? b.push (μηδέν) αν b.size == 1? β}  

 => [["Επιτυχία", μηδέν], ["mc_gross", "10,00"], ["protection_eligibility", "Αποκλεισμός"], ["payer_id", "U7PPJJ4TSJ47E"], ["φόρο", "0,00"] , ["payment_date", "9:45:30 10 Ιουλίου 2009 PDT"], ["payment_status", "Εν αναμονή"]]                               

 IRB (κύριο): 014:0> = flattened_array unescaped_array.flatten     

 => ["Επιτυχία", μηδέν, "mc_gross", "10,00", "protection_eligibility", "Αποκλεισμός", "payer_id", "U7PPJJ4TSJ47E", "φόρος", "0,00", "payment_date", "9:45: 30 10 Ιουλίου, 2009 PDT "," payment_status "," Εν αναμονή "]
 IRB (κύριο): 015:0>
 Hash hash = [* flattened_array]
 => {"Φόρος" => "0,00", "payment_status" => "αναμονή", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "επιτυχία" => μηδέν, "payment_date" = > "9:45:30 10 Ιουλ 2009 PDT", "protection_eligibility" => "Αποκλεισμός"} 

BTW, * ονομάζεται ράντισμα φορέα στο ρουμπίνι

Ένας άλλος τρόπος για τη δημιουργία κατακερματισμού από «σειρά των ζευγαριών είναι να χρησιμοποιήσετε ένεση:

  hash = [[1,2], [3,4]] ένεση ({}). {| αποτέλεσμα, στοιχείο | αποτέλεσμα [element.first] = αποτέλεσμα [element.last]? αποτέλεσμα} 

Υπάρχει ένας τρόπος :) Γράψτε ένα βρόχο, ότι θα φύγω ως μια άσκηση για τους αναγνώστες!

Εδώ είναι λίγο άσχετες περίπτωση χρήσης του χασίς από τη δημιουργία πινάκων:

  IRB (κύριο): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.;  : Μικρότερο :: μεγαλύτερη}

 => {: Μικρότερο => [1, 2, 3, 4],: μεγαλύτερη => [7, 9]} 

Μπορείτε να κάνετε περισσότερα πράγματα, κυρίως λόγω του μπλοκ χρησιμοποιείται ως το κλειδί για εκείνο το στοιχείο που προκύπτει στο χασίς.

Gmail, mutt και msmtp λύση

Εάν χρησιμοποιείτε το πρόγραμμα mutt και SMTP για πρόσβαση στο Gmail. Εδώ είναι μια (κακή) ειδήσεις. Cool παιδιά στο Google άλλαξε και πάλι πιστοποιητικό. Ω, ρωτήσατε - πώς να το ξέρεις; Απλή mutt άρχισαν να παραπονιούνται για κακή πιστοποιητικό όταν προσπαθούν να χρησιμοποιήσουν msmpt, διαβόητη «msmtp: TLS επαλήθευση του πιστοποιητικού απέτυχε:. Το πιστοποιητικό δεν έχει ένα γνωστό εκδότη χαιρέτησε μου στην οθόνη.

Για να επιβεβαιώσετε διασχίζουν -
Απλά τρέχει μετά

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

Στη θέση της παλιάς διακομιστή Thwate Τώρα μπορείτε να πάρετε από το τμήμα εκδότη
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

Ευτυχώς λύση είναι απλή, είναι εδώ τι πρέπει να κάνετε για το Debian

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

Μετά από αυτό, απλά αλλάξτε ακόλουθη γραμμή στο 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

να

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

Git και Awesome Έρευνα

15 Αύγ 2009 από Prashant · Σχόλια
Filed under: Διάφορα

Εδώ υπάρχουν δύο συνδέσεις για την έρευνα από git (σύστημα ελέγχου εκδόσεων) και φοβερό (διαχειριστής παραθύρων) κοινότητα. Εάν χρησιμοποιείτε κάποιο από αυτά, παρακαλώ πάρτε κάποιο χρόνο για να συμπληρώσετε το ερωτηματολόγιο. Σκεφτείτε το σαν το πιο απλό τρόπο να συμβάλει στην επιστροφή του λογισμικού που χρησιμοποιείτε.
Εδώ είναι οι συνδέσεις:

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

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

Σημείωση - (Όπως διαπιστώθηκε σε αυτές τις σελίδες, αλλά στο κάτω μέρος :) ) -
"Αν έχετε ενεργοποιήσει τα cookies, μπορείτε να υποβάλετε πάντα μερικώς γεμάτη έρευνα, και να επιστρέψει με τις απαντήσεις σας σε μεταγενέστερο χρόνο, ολοκληρώνοντας αργότερα."

Συγχώνευση hashes σε YAML αρχεία conf

31ης Ιουλίου, 2009 από Prashant · Σχόλια
Filed under: Τεχνολογία

YAML είναι πολύ βολικό για το γράψιμο αρχεία ρυθμίσεων. Πρωτοβάθμια πλεονέκτημα είναι ότι, όπως διαβάζει το αρχείο κειμένου. Αυτό λειτουργεί πολύ καλά, αν το αρχείο ρυθμίσεων σας είναι επίπεδη (χωρίς ιεραρχία) και δεν έχει επαναλήψεις.
Αν διαμορφώσεις το αρχείο σας έχει επαναλήψεις τότε είναι λογικό να διαχωριστούν από τα στοιχεία αυτά και την επαναχρησιμοποίηση τους. Αυτό που εννοώ είναι αυτό - ας πούμε ότι έχετε το αρχείο ρυθμίσεων σας μοιάζει με αυτό:

  ανάπτυξη:
   input_location: common_input
   output_location: dev_location
   ταχυδρομείο:
     smtp_server: your_server
     Σύνδεση: your_login
     κωδικός: top_secret
 παραγωγή:
   input_location: common_input
   output_location: dev_location
   ταχυδρομείο:
     smtp_server: your_server
     Σύνδεση: your_login
     κωδικός: top_secret 

Υποθέτοντας παραπάνω κώδικα στο / tmp / test.yml εδώ είναι το πώς μπορείτε να διαβάσετε σε python και ρουμπίνι
$cat readyml.py

 #! / Usr / bin / env python
 από την εισαγωγή pprint pprint ως σελ.
 # Στο Debian χρειάζεται να εγκαταστήσετε την Python-YAML
 από YAML φορτίο εισαγωγής, load_all, χωματερή
 hash = φορτίο (ανοιχτή («/ tmp / test.yml '))
 PP (hash [«ανάπτυξη»]) 


$ cat readyml.rb

  #! / Usr / bin / env ρουμπίνι
 απαιτούν «PP»
 hash = YAML :: φορτίο (File.open ('/ tmp / test.yml »). read)
 PP κατακερματισμού [«ανάπτυξη»] 

Εδώ είναι ένα εύχρηστο ένα σκάφος της γραμμής για την έκδοση ρουμπίνι
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' ή μπορείτε να δοκιμάσετε την ίδια σε IRB ή κονσόλα Python.

Σημειώστε ότι στο παραπάνω απόσπασμα κώδικα, τα πάντα είναι άλλη από την τοποθεσία παραγωγής είναι ίδια στην ανάπτυξη και μέρος της παραγωγής. Αυτό είναι όπου YML αναγνωριστικό κόμβος έρχεται να διασώσει. Η ιδέα είναι απλή έχουν μια σειρά από προκαθορισμένες τιμές και τους αντικαθιστούν σε διαφορετικό μέρος.
Θα μπορούσατε να το τραβήξει πέρα ​​ως εξής:

  προεπιλογών: προεπιλογές &
   input_location: common_input
   output_location: dev_location
   ταχυδρομείο:
     SENDER_NAME: αποστολέα
     smtp_server: your_server
     Σύνδεση: your_login
     κωδικός: top_secret
 ανάπτυξη:
   <<: * Προεπιλογές
 παραγωγή:
   <<: * Προεπιλογές
   output_location: prod_location 


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

Μεγάλη, λειτουργεί (tm)!.
Θα μπορούσαμε να πούμε διαπραγματεύονται κάποια σαφήνεια για ένα κομμάτι της μαγείας. Εδώ είναι μια μικρή εξήγηση: &, και << *: και η οποία είναι άγκυρα tag μπορεί να θεωρηθεί ως κόμβος αναγνωριστικό, είναι ο κόμβος * αναφοράς και <<: σημαίνει κατακερματισμού συγχώνευσης.

Για περισσότερες λεπτομέρειες, βλ. είτε YAML προδιαγραφές ή wikipedia
Μέχρι εδώ όλα καλά, αλλά υπάρχει ένα πρόβλημα εδώ, αυτές οι συγχωνεύσεις χασίς δεν είναι αναδρομική. Αυτό που σημαίνει είναι το εξής: ας υποθέσουμε ότι θέλετε να έχετε διαφορετικό όνομα αποστολέα για αλληλογραφία σε δύο περιβάλλοντα, μπορείτε να μπείτε στον πειρασμό να κάνετε τα εξής:

  προεπιλογών: προεπιλογές &
   input_location: common_input
   output_location: dev_location
   ταχυδρομείο:
     SENDER_NAME: αποστολέα
     smtp_server: your_server
     Σύνδεση: your_login
     κωδικός: top_secret
 ανάπτυξη:
   <<: * Προεπιλογές
   ταχυδρομείο:
     SENDER_NAME: sender_dev
 παραγωγή:
   <<: * Προεπιλογές
   output_location: prod_location
   ταχυδρομείο:
     SENDER_NAME: sender_prod 

Αφήνει να ελέγξετε

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

Ωχ, κάτι πήγε στραβά, το πρόβλημα όπως προαναφέρθηκε είναι ότι η συγχώνευση δεν κατακερματισμού είναι αναδρομική και κατά τη συγχώνευση αλληλογραφίας αντικατέστησε αθέτησης μέσω ταχυδρομείου της παραγωγής, η οποία έχει μόνο ένα πλήκτρο. Λύση / εργασία είναι γύρω να ξεδιπλώνουν ένα ακόμη επίπεδο:

  common_settings: & common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: & mail_defaults
  SENDER_NAME: αποστολέα
   smtp_server: your_server
   Σύνδεση: your_login
   κωδικός: top_secret

 προεπιλογών: προεπιλογές &
   <<: * Common_settings
   ταχυδρομείο:
     <<: * Mail_defaults
 ανάπτυξη:
   <<: * Προεπιλογές
 παραγωγή:
   <<: * Προεπιλογές
   ταχυδρομείο:
     <<: * Mail_defaults
     SENDER_NAME: sender_prod

Αφήνει να ελέγξετε και πάλι

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

Μήπως λέτε ότι έχετε ένα ακόμα επίπεδο ένθεσης, και μπορείτε να επεκταθούν σίγουρα ένα πιο επίπεδο, αλλά στη συνέχεια γίνεται ένα χάος. Έτσι, αν δεν προσπαθεί να γράψει λύση με τους πύργους του Ανόι σε ένα conf αρχείο, είναι καλύτερα να restucture conf αρχείο από το σκάψιμο σε YAML ή κάτι άλλο. Αλλά αυτό είναι η κλήση σας ούτως ή άλλως.

Μεγάλη προγραμματιστές βρουν απλές λύσεις σε σύνθετα προβλήματα

30 Ιουν, 2009 από Prashant · Σχόλια
Filed under: Διάφορα

Μετά από μεγάλο χρονικό διάστημα θα μπορούσα να βρω την πηγή για το παρακάτω απόσπασμα-

Τζούνιορ προγραμματιστές δημιουργούν απλές λύσεις σε απλά προβλήματα. Ανώτερος προγραμματιστές δημιουργούν σύνθετες λύσεις σε σύνθετα προβλήματα. Μεγάλη προγραμματιστές βρουν απλές λύσεις σε σύνθετα προβλήματα.

Είναι από ένα δοκίμιο που ονομάζεται Όμορφη λογισμικού από τον Charles Connell.

Ένα άλλο αγαπημένο μου είναι το Zen της Python -

Όμορφη είναι καλύτερη από ό, τι άσχημο.
Ρητή είναι καλύτερη από σιωπηρή.
Απλή είναι καλύτερο από το συγκρότημα.
Complex είναι καλύτερη από ό, τι περίπλοκη.
Κατ 'είναι καλύτερο από το ένθετο.
Αραιά είναι καλύτερο από το πυκνό.
Αναγνωσιμότητα μετράει.
Ειδικές περιπτώσεις δεν είναι αρκετά ειδικά να παραβούν τους κανόνες.
Αν και πρακτικότητα κτυπά καθαρότητα.
Λάθη δεν πρέπει ποτέ να περάσει σιωπηλά.
Εκτός αν ρητά σιωπή.
Εν όψει της ασάφειας, να αρνηθεί τον πειρασμό να μαντέψει.
Θα πρέπει να υπάρχει ένα και κατά προτίμηση μόνο ένας προφανής τρόπος για να το κάνει.
Παρά το γεγονός ότι με αυτόν τον τρόπο μπορεί να μην είναι προφανής κατά την πρώτη αν δεν είστε ολλανδικά.
Τώρα είναι καλύτερη από ποτέ.
Αν και ποτέ δεν είναι συχνά καλύτερα από ό, τι * ακριβώς * τώρα.
Εάν η εφαρμογή είναι δύσκολο να εξηγηθεί, είναι μια κακή ιδέα.
Εάν η εφαρμογή είναι εύκολο να εξηγηθεί, μπορεί να είναι μια καλή ιδέα.
Namespaces είναι μια μεγάλη ιδέα κορνάρουν - ας κάνουμε περισσότερα από αυτά!
-------------------------
και τότε υπάρχει κλασικό Τάο Προγραμματισμού

-

πιστώσεις που συνδέονται με την τοποθεσία

Μεταφράστηκε από τον Τζέιμς Τζέφρι

Μεταγράφεται από το Δούκα Hillard

Μεταδίδεται από Anupam Trivedi, Sajitha Tampi, και Meghshyam Jagannath

Re-html-ized και επιμέλεια Kragen Sittler

-

Βιβλίο 1 - Η Σιωπηλή Άκυρο

Έτσι ελαλησαν τον προγραμματιστή πλοιάρχου:

«Όταν έχεις μάθει να αρπάξει τον κωδικό σφάλματος από το πλαίσιο παγίδα,
θα είναι χρόνος για σας να φύγετε. "

1,1

Κάτι μυστηριώδες σχηματίζεται, γεννήθηκε στη σιωπηλή κενό. Αναμονή και μόνο
ακίνητος, είναι ταυτόχρονα και εξακολουθεί ακόμη σε συνεχή κίνηση. Είναι η πηγή
όλων των προγραμμάτων. Δεν ξέρω το όνομά του, γι 'αυτό θα αποκαλούν το Τάο του
Προγραμματισμός.

Αν το Τάο είναι μεγάλη, τότε το λειτουργικό σύστημα είναι μεγάλη. Αν το λειτουργικό
σύστημα είναι μεγάλη, τότε ο compiler είναι μεγάλη. Αν ο μεταγλωττιστής είναι μεγάλη,
τότε η εφαρμογή είναι μεγάλη. Ο χρήστης είναι στην ευχάριστη θέση και υπάρχει
αρμονία στον κόσμο.

Το Τάο Προγραμματισμού ρέει μακριά και επιστρέφει στον αέρα το πρωί.

1,2

Το Τάο γέννησε γλώσσα μηχανής. Γλώσσα μηχανής γέννησε η
συναρμολογητή.

Το συναρμολογητή γέννησε τον compiler. Τώρα υπάρχουν δέκα χιλιάδες
γλώσσες.

Κάθε γλώσσα έχει το σκοπό του, όμως ταπεινός. Κάθε γλώσσα εκφράζει την
Γιν Γιανγκ και του λογισμικού. Κάθε γλώσσα έχει τη θέση του εντός του Τάο.

Αλλά μην προγραμματίσετε σε COBOL, αν μπορείτε να το αποφύγετε.

1,3

Στην αρχή ήταν ο Τάο. Το Τάο γέννησε χώρο και χρόνο.
Επομένως χώρος και ο χρόνος Γιν και Γιανγκ του προγραμματισμού.

Προγραμματιστές που δεν κατανοούν το Τάο είναι πάντα ο χρόνος τελειώνει
και χώρο για τα προγράμματά τους. Προγραμματιστές που κατανοούν το Τάο πάντα
έχουν αρκετό χρόνο και χώρο για να επιτύχουν τους στόχους τους.

Πώς θα μπορούσε να είναι αλλιώς;

1,4

Ο σοφός προγραμματιστής είπε για Τάο και την ακολουθεί. Η μέση
προγραμματιστής είπε για Τάο και αναζητήσεις για αυτό. Η ανόητη προγραμματιστής
έχει πει για το Τάο και να γελάει με αυτό.

Αν δεν ήταν για γέλια, δεν θα υπήρχε Τάο.

Τα υψηλότερα ήχοι είναι πιο δύσκολο να ακούσουν.
Πηγαίνοντας προς τα εμπρός είναι ένας τρόπος για να υποχωρήσουν.
Μεγάλη ταλέντο δείχνει το ίδιο αργά στη ζωή.
Ακόμα και ένα τέλειο πρόγραμμα εξακολουθεί να έχει σφάλματα.

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

Βιβλίο 2 - Τα Αρχαία Masters

Έτσι ελαλησαν τον προγραμματιστή πλοιάρχου:

"Μετά από τρεις μέρες χωρίς προγραμματισμό, η ζωή γίνεται χωρίς νόημα."

2,1

Οι προγραμματιστές των παλαιών ήταν μυστηριώδης και βαθιά. Δεν μπορούμε να καταλάβω
τις σκέψεις τους, έτσι το μόνο που κάνουμε είναι περιγράψουμε την εμφάνισή τους.

Γνωρίζοντας, όπως μια αλεπού τη διέλευση του νερού. Ειδοποίηση, όπως μια γενική σχετικά με την
πεδίο της μάχης. Όμοια, σαν οικοδέσποινα χαιρετισμό στους επισκέπτες της. Απλά, όπως
uncarved μπλοκ του ξύλου. Αδιαφανής, όπως το μαύρο σε σκοτεινό πισίνες σπηλιές.

Ποιος μπορεί να πει τα μυστικά της καρδιάς και τα μυαλά τους;

Η απάντηση υπάρχει μόνο στο Τάο.

2,2

Μεγάλου Μαγίστρου Turing μόλις ονειρεύτηκε ότι ήταν μια μηχανή. Όταν ξύπνησε
αναφώνησε:

"Δεν ξέρω αν είμαι Τούρινγκ ονειρεύομαι ότι είμαι μια μηχανή, ή
μηχανή ονειρεύεται ότι είμαι Τούρινγκ! "

2,3

Ένας προγραμματιστής από μια πολύ μεγάλη εταιρεία ηλεκτρονικών υπολογιστών πήγε σε ένα λογισμικό
συνεδρίου και στη συνέχεια επέστρεψε στην έκθεση ο διευθυντής του, λέγοντας: «Τι είδους
προγραμματιστές εργάζονται για άλλες εταιρείες; Είναι συμπεριφέρθηκε άσχημα και ήταν
αδιάφορος με τις εμφανίσεις. Τα μαλλιά τους ήταν μακρύς και απεριποίητος και τους
ρούχα ήταν τσαλακωμένο και παλιά. Οι συνετρίβη σουίτα φιλοξενία μας και
γίνονται αγενείς θορύβους κατά τη διάρκεια της παρουσίασής μου. "

Ο διευθυντής είπε: «Εγώ ποτέ δεν θα πρέπει να σας έχουν στείλει στη διάσκεψη. Εκείνοι
προγραμματιστές ζουν πέρα ​​από τον φυσικό κόσμο. Θεωρούν ζωή παράλογο, ένα
τυχαία σύμπτωση. Έρχονται και παρέρχονται χωρίς να γνωρίζει περιορισμούς.
Χωρίς φροντίδα, ζουν μόνο για τα προγράμματά τους. Γιατί πρέπει να μπαίνουν στον κόπο
με τις κοινωνικές συμβάσεις;

"Είναι ζωντανός στο Τάο."

2,4

Ένας αρχάριος ζήτησε από τον Κύριο: «Εδώ είναι ένας προγραμματιστής που δεν σχεδιάζει,
έγγραφα ή τα προγράμματα δοκιμών του. Ωστόσο, όλοι όσοι τον γνωρίζουν τον θεωρούν έναν από
οι καλύτεροι προγραμματιστές στον κόσμο. Γιατί συμβαίνει αυτό; "

Ο Δάσκαλος απαντά: "Αυτό προγραμματιστής έχει κυριαρχήσει το Τάο. Έχει περάσει
πέρα από την ανάγκη για το σχεδιασμό? που δεν θυμώνουν, όταν το σύστημα
συντριβές, αλλά αποδέχεται το σύμπαν χωρίς ανησυχία. Έχει προχωρήσει πέρα ​​από το
χρειάζονται για την τεκμηρίωση? παύσει να ενδιαφέρεται αν κάποιος άλλος βλέπει τον κωδικό του.
Έχει προχωρήσει πέρα ​​από την ανάγκη για έλεγχο? Καθένα από τα προγράμματα του είναι τέλεια
μέσα τους, γαλήνια και κομψή, σκοπός τους είναι αυτονόητη. Πραγματικά,
έχει εισέλθει το μυστήριο του Τάο. "

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

Βιβλίο 3 - Σχεδιασμός

Έτσι ελαλησαν τον προγραμματιστή πλοιάρχου:

"Όταν το πρόγραμμα είναι υπό δοκιμή, να είναι πολύ αργά για να κάνει το σχεδιασμό
αλλαγές. "

3,1

Κάποτε υπήρχε ένας άνθρωπος που πήγε σε μια εμπορική έκθεση ηλεκτρονικών υπολογιστών. Κάθε μέρα, όπως ο ίδιος
εγγραφεί, ο άνθρωπος είπε στον φρουρό στην πόρτα:

"Είμαι ένας μεγάλος κλέφτης, φημίζεται για τα κατορθώματα μου κλοπές σε καταστήματα. Είναι
προειδοποιήσει για αυτό το σόου του εμπορίου δεν πρέπει να ξεφύγουν ασύλητο. "

Αυτή η ομιλία διαταραχθεί σε μεγάλο βαθμό τη φρουρά, επειδή υπήρχαν εκατομμύρια
δολάρια μέσα του μηχανογραφικού εξοπλισμού, έτσι έβλεπε τον άνθρωπο προσεκτικά. Αλλά
ο άνθρωπος απλώς περιπλανήθηκε από το περίπτερο στο περίπτερο, βουίζει ήσυχα στον εαυτό του.

Όταν ο άνθρωπος έφυγε, ο φρουρός τον πήρε παράμερα και έψαξε τα ρούχα του, αλλά
τίποτα δεν ήταν να βρεθεί.

Την επόμενη μέρα της εμπορικής έκθεσης, ο άνθρωπος και επέστρεψε chided τον προφυλακτήρα
λέγοντας: «Εγώ δραπέτευσε με μια τεράστια λεία χθες, αλλά σήμερα θα είναι ακόμη
καλύτερα. "Έτσι, ο φύλακας, τον έβλεπα όλο και πιο στενά, αλλά εις μάτην.

Την τελευταία ημέρα της εμπορικής έκθεσης, ο φρουρός θα μπορούσε να συγκρατήσει την περιέργειά του
πλέον. "Κύριε Κλέφτης», είπε, "είμαι τόσο μπερδεμένος, δεν μπορώ να ζήσω σε
ειρήνη. Παρακαλώ διαφωτίσει μου. Τι είναι αυτό που σας κλέβουν; "

Ο άνθρωπος χαμογέλασε. "Είμαι κλέβει τις ιδέες», είπε.

3,2

Κάποτε υπήρχε ένας προγραμματιστής που έγραψε κύριος αδόμητα προγράμματα. Μια
αρχάριος προγραμματιστής, προσπαθεί να τον μιμηθεί, επίσης άρχισε να γράφει
αδόμητα προγράμματα. Όταν ο αρχάριος ζήτησε από τον πλοίαρχο του να αξιολογήσει
πρόοδος, ο πλοίαρχος τον επέκρινε για το γράψιμο των αδόμητων προγραμμάτων,
λέγοντας, "Τι είναι η κατάλληλη για τον πλοίαρχο να μην είναι κατάλληλο για το
αρχάριος. Πρέπει να καταλάβετε το Τάο πριν υπέρβαση δομή. "

3,3

Υπήρχε κάποτε ένας προγραμματιστής ο οποίος συνδέθηκε με το δικαστήριο της πολέμαρχος
του Γου. Ο πολέμαρχος ζήτησε από τον προγραμματιστή: "Ποια είναι ευκολότερο να σχεδιάσει: ένα
λογιστικό πακέτο ή ένα λειτουργικό σύστημα; "

"Ένα λειτουργικό σύστημα," απάντησε ο προγραμματιστής.

Ο πολέμαρχος πρόφερε ένα επιφώνημα της δυσπιστίας. «Σίγουρα ένα λογιστικό
πακέτο είναι ασήμαντο δίπλα στην πολυπλοκότητα ενός λειτουργικού συστήματος, "ο
είπε.

"Δεν είναι έτσι», είπε ο προγραμματιστής, «κατά τον σχεδιασμό ενός πακέτου λογιστικής,
ο προγραμματιστής λειτουργεί ως μεσολαβητής μεταξύ των ανθρώπων που έχουν διαφορετικές
ιδεών: πώς πρέπει να λειτουργεί, πώς εκθέσεις πρέπει να αναγράφεται, και πώς πρέπει να
συμμορφώνονται με τη φορολογική νομοθεσία. Αντίθετα, ένα λειτουργικό σύστημα δεν περιορίζεται
από εξωτερικές εμφανίσεις. Κατά το σχεδιασμό ενός λειτουργικού συστήματος, ο προγραμματιστής
επιδιώκει την απλή αρμονία μεταξύ μηχανής και ιδέες. Αυτός είναι ο λόγος ενός
λειτουργικό σύστημα είναι ευκολότερο να σχεδιάσει. "

Ο πολέμαρχος του Wu έγνεψε και χαμογέλασε. "Αυτό είναι καλό και όλα καλά, αλλά
το οποίο είναι ευκολότερο για τον εντοπισμό σφαλμάτων; "

Ο προγραμματιστής δεν έκανε καμία απάντηση.

3,4

Ένας διευθυντής πήγε να τον προγραμματιστή πλοίαρχο και του έδειξε τις απαιτήσεις
έγγραφο για μια νέα εφαρμογή. Ο διευθυντής ζήτησε από τον πλοίαρχο: "Πόσο καιρό
θα αναλάβει να σχεδιάσει το σύστημα αυτό, αν μπορώ να ορίσω πέντε προγραμματιστές να είναι; "

"Θα πάρει ένα χρόνο," δήλωσε ο πλοίαρχος αμέσως.

«Αλλά χρειαζόμαστε αυτό το σύστημα αμέσως ή ακόμη και νωρίτερα! Πόσο καιρό θα
λάβουν, εφόσον μπορώ να ορίσω δέκα προγραμματιστές να είναι; "

Ο προγραμματιστής πλοίαρχος κατσούφιασε. «Στην περίπτωση αυτή, θα διαρκέσει δύο χρόνια."

"Και τι θα γίνει αν μπορώ να ορίσω εκατό προγραμματιστές να είναι;"

Ο προγραμματιστής πλοίαρχος ανασήκωσε τους ώμους. "Στη συνέχεια, το σχέδιο δεν θα είναι ποτέ
ολοκληρωθεί », είπε.

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

Βιβλίο 4 - Κωδικοποίηση

Έτσι ελαλησαν τον προγραμματιστή πλοιάρχου:

"Ένα καλογραμμένο πρόγραμμα είναι το δικό του παράδεισο? Μια κακώς-γραπτό πρόγραμμα είναι
δική του κόλαση. "

4,1

Ένα πρόγραμμα πρέπει να είναι ελαφρύ και ευκίνητο, υπορουτίνες του συνδέονται μεταξύ τους σαν ένα
σειρά από μαργαριτάρια. Το πνεύμα και την πρόθεση του προγράμματος θα πρέπει να διατηρηθεί
όλη. Θα πρέπει να υπάρχει ούτε πολύ λίγο ή πολύ, ούτε
περιττό, ούτε άχρηστο βρόχους μεταβλητές, ούτε η έλλειψη δομής, ούτε
συντριπτική ακαμψία.

Ένα πρόγραμμα πρέπει να ακολουθήσει την εξής: νόμος του λιγότερο έκπληξη ». Τι είναι αυτός ο νόμος;
Είναι απλά ότι το πρόγραμμα θα πρέπει πάντα να ανταποκριθεί στο χρήστη με τον τρόπο
που τον εκπλήσσει τουλάχιστον.

Ένα πρόγραμμα, δεν έχει σημασία πόσο περίπλοκη, θα πρέπει να ενεργούν ως μία ενιαία μονάδα. Το πρόγραμμα
πρέπει να καθοδηγείται από τη λογική και όχι μέσα από την εξωτερική εμφάνιση.

Εάν το πρόγραμμα αποτυγχάνει σε αυτές τις απαιτήσεις, θα είναι σε κατάσταση
αταξία και τη σύγχυση. Ο μόνος τρόπος για να διορθωθεί αυτό είναι να ξαναγράψουμε το
πρόγραμμα.

4,2

Ένας αρχάριος ζήτησε από τον πλοίαρχο: «Έχω ένα πρόγραμμα που τρέχει και κάποια στιγμή
Μερικές φορές ματαιώνει. Έχω ακολουθήσει τους κανόνες του προγραμματισμού, αλλά είμαι
εντελώς ακατανόητη. Ποιος είναι ο λόγος για αυτό; "

Ο πλοίαρχος απάντησε: "Θα βρίσκονται σε σύγχυση, επειδή δεν μπορείτε να καταλάβετε Τάο.
Μόνο ένας ανόητος αναμένει την ορθολογική συμπεριφορά από τους συνανθρώπους του. Γιατί εσείς
αναμένουν από ένα μηχάνημα που οι άνθρωποι έχουν κατασκευαστεί; Υπολογιστές προσομοίωση
ντετερμινισμός? μόνο Τάο είναι τέλεια.

«Οι κανόνες του προγραμματισμού είναι παροδικές? Μόνο Τάο είναι αιώνια. Ως εκ τούτου
θα πρέπει να συλλογιστεί Τάο πριν λάβετε φώτιση. "

«Αλλά πώς θα ξέρω πότε έχω λάβει φώτιση;" ρώτησε η
αρχάριος.

"Το πρόγραμμά σας θα τρέξει τότε σωστά," απάντησε ο πλοίαρχος.

4,3

Ένας κύριος είχε εξηγεί τη φύση του Τάο του σε έναν από τους αρχάριους του.
Τάο είναι ενσωματωμένη σε όλα τα λογισμικά - ανεξάρτητα από το πόσο ασήμαντο », δήλωσε ο
ο πλοίαρχος.

"Είναι το Τάο σε χειρός υπολογιστής;" ρώτησε ο αρχάριος.

"Είναι", ήρθε η απάντηση.

"Είναι το Τάο σε ένα τηλεοπτικό παιχνίδι;" συνέχισε τον αρχάριο.

"Είναι ακόμη ένα παιχνίδι στο βίντεο», είπε ο πλοίαρχος.

"Και είναι το Τάο στο DOS για έναν προσωπικό υπολογιστή;"

Ο πλοίαρχος έβηξε και μετακινήθηκε ελαφρώς τη θέση του. "Το μάθημα είναι πάνω από
για σήμερα », είπε.

4,4

Προγραμματιστή Πρίγκιπα του Wang έγινε κωδικοποίηση του λογισμικού. Τα δάχτυλά του χόρευαν πάνω της
πληκτρολόγιο. Το πρόγραμμα καταρτίζονται χωρίς ένα μήνυμα σφάλματος, και το πρόγραμμα
έτρεξε σαν ένα απαλό άνεμο.

"Excellent!" Αναφώνησε ο πρίγκιπας, «Η τεχνική σου είναι άψογη!"

"Τεχνική;», είπε ο προγραμματιστής στροφή από τον τερματικό σταθμό του, «Τι
Τάο ακολουθεί είναι - πέρα ​​από όλες τις τεχνικές! Όταν άρχισα να μπορώ να προγραμματίσω
Θα δείτε μπροστά μου το όλο πρόβλημα σε μια μάζα. Μετά από τρία χρόνια χωρίς
πλέον είδε αυτή τη μάζα. Αντ 'αυτού, χρησιμοποιείται υπορουτίνες. Αλλά τώρα βλέπω τίποτα.
Όλη την ύπαρξη μου υπάρχει σε ένα άμορφο κενό. Αισθήσεις μου είναι σε αδράνεια. Το πνεύμα μου,
ελεύθεροι να εργάζονται χωρίς σχέδιο, ακολουθεί τη δική του ένστικτο. Εν ολίγοις, το πρόγραμμα μου
γράφει η ίδια. Βέβαια, μερικές φορές υπάρχουν δύσκολα προβλήματα. Τους βλέπω
που έρχονται, θα επιβραδύνει, βλέπω σιωπηλά. Τότε μπορώ να αλλάξω μια ενιαία γραμμή κώδικα
και οι δυσκολίες εξαφανίζονται, όπως εισπνοών του καπνού σε αδράνεια. Κάνω compile τότε η
πρόγραμμα. Κάθομαι ακόμα και αφήστε τη χαρά της εργασίας συμπληρώσετε ύπαρξής μου. Κλείνω μου
τα μάτια για μια στιγμή και μετά αποσυνδεθείτε. "

Πρίγκιπας Wang είπε, "Θα του ότι όλες οι προγραμματιστές μου ήταν τόσο σοφός!"

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

Βιβλίο 5 - Συντήρηση

Έτσι ελαλησαν τον προγραμματιστή πλοιάρχου:

"Αν ένα πρόγραμμα είναι, αλλά τρεις γραμμές πολύ, κάποια μέρα θα πρέπει να είναι
διατηρηθεί. "

5,1

Ένα καλά-που χρησιμοποιούνται πόρτα δεν χρειάζεται λάδι σε μεντεσέδες της.
Μια ταχεία ρέει ρεύμα δεν αυξάνεται στάσιμη.
Ούτε ήχο ούτε οι σκέψεις μπορούν να ταξιδέψουν μέσα από ένα κενό.
Λογισμικό σαπίζει, αν δεν χρησιμοποιούνται.

Αυτά είναι μεγάλα μυστήρια.

5,2

Ο διευθυντής ζήτησε από έναν προγραμματιστή πόσο καιρό θα τον πάρει για να ολοκληρωθεί η
πρόγραμμα για την οποία εργαζόταν. "Θα πρέπει να τελειώσει αύριο," η
προγραμματιστής απάντησε αμέσως.

"Νομίζω ότι είστε είναι εξωπραγματικό», δήλωσε ο διευθυντής, "Ειλικρινά, πώς
καιρό θα πάρει; "

Ο προγραμματιστής σκέφτηκε για μια στιγμή. "Έχω κάποια χαρακτηριστικά που θα ήθελα να
προσθέσετε. Αυτό θα πάρει τουλάχιστον δύο εβδομάδες ", είπε τελικά.

"Ακόμα και ότι είναι πάρα πολύ να περιμένουμε", τόνισε ο διευθυντής, «θα είμαι
ικανοποιημένος αν μου πεις απλά, όταν ολοκληρωθεί το πρόγραμμα. "

Ο προγραμματιστής συμφώνησε σε αυτό.

Αρκετά χρόνια αργότερα, ο διευθυντής συνταξιοδοτήθηκε. Στο δρόμο για την αποχώρησή του
γεύμα, ανακάλυψε τον προγραμματιστή κοιμάται στο τερματικό του. Ήταν
προγραμματισμού όλη τη νύχτα.

5,3

Ένας προγραμματιστής αρχάριος κάποτε ανατεθεί να φτιάξετε ένα απλό οικονομικό πακέτο.

Ο αρχάριος εργάστηκαν εξαγριωμένα για πολλές μέρες, αλλά όταν ο κύριός του αξιολόγηση
το πρόγραμμά του, ανακάλυψε ότι περιείχε έναν επεξεργαστή οθόνη, ένα σύνολο
γενικευμένη γραφικά ρουτίνες, μια τεχνητή νοημοσύνη περιβάλλον, αλλά
όχι η παραμικρή αναφορά για οτιδήποτε οικονομικό.

Όταν ο πλοίαρχος ρώτησε γι 'αυτό, ο αρχάριος έγινε αγανακτισμένος. "Μην
τόσο ανυπόμονοι, "είπε," Θα βάλω στο χρηματοπιστωτικό πράγματα τελικά. "

5,4

Μήπως ένας καλός αγρότης παραμελούν την καλλιέργεια που έχει φυτευτεί;
Μήπως ένας καλός δάσκαλος βλέπουν ακόμη και το πιο ταπεινό μαθητή;
Μήπως ένας καλός πατέρας επιτρέπει ένα παιδί να λιμοκτονήσουν;
Μήπως ένας καλός προγραμματιστής να αρνηθεί να διατηρήσει τον κώδικά του;

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

Βιβλίο 6 - Διαχείριση

Έτσι ελαλησαν τον προγραμματιστή πλοιάρχου:

"Αφήστε τους προγραμματιστές να είναι πολλές και οι διαχειριστές λίγα - τότε όλα θα
παραγωγικό ».

6,1

Όταν οι διευθυντές διαθέτουν ατελείωτες συναντήσεις, οι προγραμματιστές γράφουν παιχνίδια. Όταν
λογιστές μιλήσουμε των τριμηνιαίων κερδών, ο αναπτυξιακός προϋπολογισμός είναι έτοιμος να
να κοπεί. 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. Το
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
είπε.

“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
αυτό. 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. Και
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

Ένα κομμάτι της ανακατεύθυνσης του φλοιού

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 αναθεώρηση

29 Απρίλη 2009 από Prashant · Σχόλια
Filed under: reviews

Ένα μήνα πίσω αγόρασα ένα VAIO NS25G και έχουν σχεδιάζει να γράψω αυτό το post από τότε. Αυτή η θέση είναι κυρίως σημειώσεις για τον εαυτό και την αναθεώρηση της ίδιας. Ας πάρει από το σήμα γρήγορα -

Post has two parts -

Ι. αναθεώρηση του υλικού
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 -

Γιατί μπορεί να μην θέλει να αγοράσει αυτό το laptop:

  1. Όχι Bluetooth: πιστέψτε με, το 2009 η Sony πουλάει το laptop χωρίς 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. Δεν απαιτείται ξεχωριστή κάρτα γραφικών και το συμπαθεί. (Και όχι αποκλειστική μνήμη βίντεο

Τώρα, γιατί μπορεί να θέλετε να το αγοράσετε:

  1. Αυτό το laptop είναι πολύ καλός στην επιφάνεια εργασίας. 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. Η μνήμη L2 cache είναι 2MB και επεξεργαστή / μνήμη του συστήματος λεωφορείων είναι 800MHz. Δεν παίζω παιχνίδια οπότε δεν μπορούμε να πούμε γι 'αυτό, αλλά για οτιδήποτε άλλο πέρα ​​από ένα επεξεργαστή Core 2 Duo 2GHz με συχνοτήτων είναι καλό, αυτό είναι περισσότερο από αρκετό.
  3. From my usage, I see processor mostly clocks at 1.2GHz, and memory usage ~500MB. Αυτό ενισχύει ακριβώς προηγούμενο σημείο.
  4. Εφεδρική μπαταρία είναι καλή, ~ 2 ώρες και είναι αυτό που παίρνω.

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 ! ) :
Ήρθε προεγκατεστημένο με τα Vista (νομίζω πριμοδότηση σπίτι ή κάποιο φανταχτερό όνομα όπως αυτό). Dungara ξεκινήσει μια φορά και δημιούργησε άλλο ένα διαμέρισμα των 150 GB. Το Debian είναι δοκιμή αυτό που πάντα εγκαταστήσετε και στη συνέχεια πάνω (κάτω;) βαθμού σε «ασταθή» sid.

Πράγματα που εργάστηκαν χωρίς κανένα πρόβλημα:

  1. X - X server όπως ήταν αναμενόμενο δεν είχε πρόβλημα με την έναρξη ή την επίλυση. After one of the upgrades X refused to start though, but 'X -configure' generated a conf file which worked pretty well.
  2. Ήχος - παραγωγής και των εξωτερικών ωραία δουλειά μικρόφωνο. έκδοση του πυρήνα 2.6.29-1-686 # 1 SMP και alsa έκδοση 1.0.17. Αυτό είναι ό, τι πάρετε από
    $ lspci -v |grep Audio 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Con1.0.17troller (rev 03)
  3. Βίντεο Κάμερα - απλά δουλεύει
  4. Αδρανοποίηση στο δίσκο και πάλι - κανένα πρόβλημα
  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) .

    Νομίζω ότι ο πυρήνας 2,6 .. 27 και μετά, λειτουργεί με την πηγή του πυρήνα απόθεμα. You dont have to install ndiswrapper or things like t
    καπέλο. 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.

Τι δεν λειτουργεί -

  1. Κάπως εσωτερικό μικρόφωνο αρνείται να συνεργαστεί : ( Εξωτερικό μικρόφωνο λειτουργεί καλά όμως. 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:

  • Πακέτο για devnagri font-ttf-ινδική-γραμματοσειρές
  • Πακέτο για το 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 -

[Φώτιση bindidings κλειδί]

Μπορείτε να χρησιμοποιήσετε το ακόλουθο κλειδί κώδικα και χαρτογράφηση

σίγασης:
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-"
αύξηση του όγκου:
KEY="Keycode-176" ACTION="exec" PARAMS="/usr/bin/amixer -q set Master 2+"
αύξηση της φωτεινότητας:
KEY="Keycode-212" ACTION="exec" PARAMS="sudo /root/bin/incbrightness.sh"
μειώσετε τη φωτεινότητα
KEY="Keycode-101" ACTION="exec" PARAMS="sudo /root/bin/decbrightness.sh"

Επόμενη Σελίδα »