הסקר, פינג, pubsub, pubsubhub, pubsubhubbub

6 ספטמבר 2009 על ידי Prashant · תגובות
מתויק תחת: טכנולוגיה

במקרה שאתה סקפטי, יש שיטה בטירוף לעיל, בכותרת של ההודעה. בחוגים טק אין זה סביר כי לא שמעו על pubsubhubbub. בחודשים ספורים מהר, זה היה אחד מהשלושה למעלה דיבר על דברים. שתי האחרות היו הצפנה homomorphic וגוגל גל [ 1. ]. חוזר להודעה הנוכחית - תנאי בכותרת לציין כיצד אתה מקבל את התוכן מאנשים אחרים. הפרטים הבאים יתברר יותר, אם אתה מדמיין דברים קורה לגבי בלוגים, למרות שהם לא מושגית מוגבלת בלוגים.

הסקרים מתייחס לתרחיש שבו הלקוחות להמשיך לשאול שרת אם משהו חדש צץ. כמה פעמים לשאול אם יש עדכונים תמיד תהיה בעיה עם הסקרים תכופות מדי או תכוף מדי, אבל בתור אחד הקורא הצביע פה אחד דבר נהדר, עם הקלפי היא שהשרת לא צריך לשמור על המדינה.

פינג מתייחס למקרה בו כאשר לכתוב מאמר, אתה (או התוכנה) מעדכן גם כמה פופולרי (מרכז) Update Services. קצת רקע כאן .

הבא הוא pubsub אשר מייצג לפרסם / להירשם, אחד המגרש המוקדם נעשה כאן על ידי אוון Henshaw-פלאת Kellan אליוט-McCrea (72 שקופיות אבל שווה עוברים). דוגמא משכנעת שהם נתנו היה נגד זה - בתאריך מסוים, FriendFeed זחל פליקר 2.9 מיליון פעמים כדי לקבל את התמונות העדכניות של 45,754 משתמשים, מתוכם 6,721 ביקר Flickr באותם 24 שעות ויכול היה "פוטנציאל" להעלות תמונה. שים לב מה שהם הציעו לא טכנולוגיה חדשה, כפי שהם מציינים "טכנולוגיה מהפכנית חדשה 20 שנה". אם אתה עושה את זה על הבלוגים ואז אחת הבעיות הגדולות עם XMPP - נתוני הנוכחות תקורה, אשר עשוי להיות גבוה כמו 60-70%, ניתן להפחית הרבה.

pubsubhub מייצג לפרסם רכזת כמנוי pubsubhubbub הוא פרוטוקול, הליבה שבהם הוא הרעיון של pubsubhub. המו"לים שבה (נניח בלוגרים) לעדכן את הרכזת שבו (אולי יותר מאחד רכזות, אשר לדבר אחד עם השני) שוכן "אי שם בענן", על פי פרוטוקול זה ניתן לדחוף או למשוך על פי הפרוטוקול, אבל את הקישור הבא , שרשרת רכזת ללקוח (נניח הקוראים) הוא תמיד לדחוף את המודל. זה הדף טוב נקודת המוצא עבור pubsubhubbub, שקופיות סקירה טובים. רהוט פעם אניל דאש מתאר את זה כאן כמו לחיץ האינטרנט.
שתי כניסות קשורים אחרים הם webhooks שהוא בעצם callbacks HTTP. Github משתמשת בו, כך גם PayPal עבור הודעות אסינכרוני של תשלום IPN . כך גם רבים אחרים. הרעיון הוא קשורים rsscloud שהוא שוב לרכזת pubsub. בצע את הקישור לקבלת פרטים.

ייתכן שאתה תוהה מה הטעם לכתוב כל אלה כאן, יש 2 1. דברים אלה כדאי לדעת, מינימלית לפחות ו 2. בלוג זה נמצא pubsubhubbub מופעלת כיום באמצעות רכזת appspot באמצעות וורדפרס תוסף להאכיל גם הוא pubsubhubbub מופעל באמצעות קישור, FeedBurner כאן
-
[ 1 ]. - היכרות טובה לקרוא להצפנה homomorphic מלא הוא זה מאמר של ברוס שנייר ואת זה לדבר פחות או יותר המקור היחיד של Google Wave.

עדכון - זה מסביר כיצד לכתוב את הדרישה של שרת ציבורי התקשרות יכול להיות עבד עבור לקוחות ברחבי שולחן העבודה באמצעות שער XMPP (עבור pubsubhubbub).

קצת הרכבה

29 אוגוסט 2009 על ידי Prashant · תגובות
מתויק תחת: טכנולוגיה

אחרי שקראתי את הכתבה על מאגרים נעילת בחינם ולראות את השימוש CAS (להשוואה, להחליף), הרגשתי כמו פרסום קוד הרכבה לעשות את אותו הדבר. השתמש במקרה שם היה לכתוב שיטה מקורית ולקרוא אותו Java (בחזרה 1.5, כאשר במקביל מבני נתונים ב-Java היו פחות או יותר לא קיימת). בלי שהיות, אני לשחרר את הקוד אל לך :) . הראשון הוא על CAS ואת השני הוא מחשוב GCD באמצעות האלגוריתם של אוקלידס (את זה אפשר למצוא במקומות ומדריכים רבים גם כן).

לקמפל ולהריץ הוראות gcc file_name.c ; ./a.out

השווה והחלף

   # Include 
  # Include 
 / / Exchange - newvalue, comperand ישן / הערך הצפוי
 / *
  פונקציה * באמת עושה את הדבר הבא - אם הערך ב * dest שווה oldvalue מכן להחליף אותו על ידי newvalue אחר להשאיר אותו ללא שינוי: האם כל אלה אטומית
  *
  * יש שתי אפשרויות עבור ערך ההחזרה
  * הערך הראשוני של 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 (int dest, int oldvalue, int newvalue) {* /
	 / * Int CAS (int dest, int newvalue, int oldvalue) {* /
	 int התוצאה = 1 ;/ * 1 מראה כי הצליחו CAS ו 0 מראה שהוא נכשל * /
	 / * אגב צריך להגדיר סמ"ק עבור הדגל מחץ!  * /
	 __ __asm__ volatile__ (
			 "Movl% 2,%% EAX \ n \ t"
			 "Movl% 3,%% EBX \ n \ t"
			 "0% movl,%% ECX \ n \ t"
			 "LOCK \ n \ t"
			 "CMPXCHG%% EBX, (%% ECX) \ n \ t" / * לנעול להיות באותה שורה * /
			 "סיימנו JZ \ n \ t"
			 "Movl 0 $,% 1 \ n \ t"
			 "מה נעשה: \ n \ t"
			 : "= M" (dest), "= g" (תוצאה)
			 : "ז" (oldvalue), "G" (newvalue), "M" (dest)
			 : "% EAX", "% EBX", "ECX", "cc"
			 );
	 printf ("(% d,% d,% d)", * dest, oldvalue, newvalue);
	 להחזיר את התוצאה;
 }

 / * TODO
  * לכתוב עוד fxn ASM אשר מעמידה מעל fxn בלולאה תוך ולשמור מנסה אלא אם כן הוא מצליח * /

 int main () {
	 int = 5, b = 6;
	 int * c = (int *) malloc (sizeof (int));
	 * C = 6;
	 / * Int c = 6; * /
	 printf ("% d \ n", CAS (ג, ב, ב));
	 printf ("% d \ n", CAS (ג, ב, א));
	 printf ("% d \ n", CAS (ג,,));
	 printf ("% d \ n", CAS (ג, ב, ב));
	 * C = 6;
	 / * C = 5, * /
	 printf ("ערך המשתנה של * ג ל% d \ n", * ג);
	 printf ("% d \ n", CAS (ג, ב, ב));
	 printf ("% d \ n", CAS (ג, ב, א));
	 printf ("% d \ n", CAS (ג,,));
	 printf ("% d \ n", CAS (ג, א, ב));
	 printf ("% d \ n", CAS (ג, ב, א));
	 התשואה 0;
 }

הערות עיצוב - נראה כמו סימון תחביר wp מוסיפה בסופו של דבר, להתעלם מזה.

GCD

 # Include 
 GCD int (int, int b) {
     int התוצאה;
     / * Compute מחלק משותף גדול ביותר באמצעות אלגוריתם של אוקלידס * /
     __ volatile__ __asm__ ("movl% 1,%% EAX;"
                           "Movl% 2,%% EBX;"
                           "CONTD: cmpl 0 $,%% EBX;"
                           "Je נעשה;"
                           "Xorl%% edx, edx%%;"
                           "Idivl%% EBX;"
                           "% Movl EBX%%% EAX;"
                           "Movl%% edx, EBX%%;"
                           "JMP CONTD;"
                           "מה נעשה: movl%% EAX, 0%;": "= g" (תוצאה): "G" (א), "G" (ב)
     );

     להחזיר את התוצאה;
 }

 int main () {
     int 1, 2;
     printf ("הכנס שני מספרים שלמים:");
     scanf ("% d% d", & 1, & 2);

     printf ("GCD של D & D%% הוא% d \ n", 1, 2, GCD (1, 2));

     התשואה 0;
 }

העולם קריקט מחכה סדר עולמי חדש

25 אוגוסט 2009 על ידי Prashant · תגובות
תחת הקטגוריות: שונות

לאחר סדרת בדיקות וחוות פורש חמש כחודשיים, אפר אנגליה קולחים.

בואו נדבר על הקבוצה הזוכה 1 - על מנת התיכון שלהם הוא "הממוצע" אם אתה לא רוצה קריטי. תרומה Greame של סוואן עם בת יספור לא פחות מאשר תרומה עם הכדור. סטיוארט ברוד - הטובה ביותר בכל הסיבובים היה המתנע לא למבחן 5. אנדרו שטראוס היה החובט רק עקבי ג'ימי אנדרסון היה באולר רק עקבי.

הנקודה כאן היא לא לנזוף ההישגים של הקבוצה הזוכה, אלא לשים בפרספקטיבה את העובדה כי למרות כל אלה, איבדה אוסטרליה. אתה צריך לחשוב כמה שניות, אם ביקש לקרוא באולר כמיטב יכולתם. נכון, זה היה BW Hilfenhaus. Hauritz ביצועים טובים יותר של ציפייה שמכל אחד אבל עדיין לא מספיק טוב כדי להיבחר 2 מתוך חמש בדיקות. בדרום אפריקה לא היה מכה את עולם ללא טווה ברמה עולמית, אוסטרליה לא יכול מקווה להישאר ללא 1 1 1 מספיק טובה לפחות. הקוסם עזב את הבמה, וזה לא נראה כמו אמנות יותר, לשכוח את הקסם. Ponting עומד גבוה בקרב בני תמותה פחותה ומייקל קלארק קם לעיתים קרובות, אבל זה גורם להם קבוצה עם כמה שחקנים טובים מאוד ולא קבוצה טובה מאוד.
אפר 2009 ייזכר אפר האחרונות אנדרו Flintoff, ההגעה של סטיוארט ברוד כמו כל הסיבובים (אם הוא מוסיף עוד קצת פולקלור האפר התחלה מבטיחה שלו), ואחד של המאה הבכורה המרשימה ביותר של כל הזמנים על ידי טרוט אבל זה יהיה גם להיזכר לנקודה שבה טענות ומענות על עליונות של אוסטרליה סוף סוף לשים לנוח, זה נגמר. אל תבינו אותי לא נכון הם עדיין יכולים לחשוף מייק Hussey או סטיוארט קלארק אבל אתה מרגיש את התרומה של כל גדולי הזמן שבו הם הולכים לאיבוד. לפעמים הם באים להזכיר לך את עצמם IPL אבל עדיין הם לא יכולים להיות מוחלף. בואו מרגיש מבורך על כך ראה Warne, מק 'גראת ו גילכריסט לשחק יחד נתמך על ידי Waughs, Ponting, Hyden, מרטין לנגר.

במבט קדימה, דרום אפריקה תמיד תישאר קבוצה טובה מאוד אבל הם צריכים לנצח בחצי הגמר ולהיות עקבית יותר ברחבי העולם, פקיסטן תישאר מבריק סתום, אקדחים צעירים הודים קרוב לוודאי שתמצא את זה קשה למלא את הנעליים של קודמיו יוצאי דופן. בסרי לנקה יש להמשיך להראות ניצוצות של אמנות מלאכה. אבל, אנו עשויים צריך לחכות קצת לפני שיש את כל הקבוצה הדומיננטית החוצה או לפני הקפטן מתלונן על חוסר תחרות, כמו סטיב וו עשה פעם אחת.

בהקשר הזה - בואו לברך את גב בואו של אסיף, יש לו הרבה יופי של פוטנציאל, נקווה לראות קצת מזה וגם בברכה פרח אנדי awatar חדש, נכון שאתה לא יכול להחזיק אנשים טובים לאורך זמן רב.

רובי 1 ספינות ליצור חשיש

20 אוגוסט 2009 על ידי Prashant · תגובות
מתויק תחת: טכנולוגיה

אתמול בשעה עובר אחת מתוכניות הישנים שלי, מצאתי את זה נכתב על ידי לי מתישהו בחזרה:

#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 | = b x.split ("="); b.push (אפס) אם b.size == 1, B}
   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 = 09:45:30 10 יולי 2009 PDT", "payment_status = בהמתנה "]                                                                         

 IRB (ראשי): 013:0> unescaped_array unescaped_array.map = {| x | = b x.split ("="); b.push (אפס) אם b.size == 1, B}  

 => [["הצלחה", אפסי], ["mc_gross", "10.00"] ["protection_eligibility", "כשיר"], ["payer_id", "U7PPJJ4TSJ47E"], ["מס", "0.00"] , ["payment_date", "09: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", "09: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" = > "09:45:30 10 יולי 2009 PDT", "protection_eligibility" => "כשיר"} 

אגב, * נקרא מפעיל מעיכה של רובי

דרך נוספת ליצור חשיש מ 'מערך של זוגות "הוא להשתמש להזריק:

  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]} 

אתה יכול לעשות עוד דברים, בעצם תוצאה של בלוק משמש כמפתח עבור אלמנט כי hash שהתקבל.

Gmail, מאט ו msmtp תיקון

17 אוגוסט 2009 על ידי Prashant · תגובות
מתויק תחת: טכנולוגיה

אם אתה משתמש הכלבלב ו-SMTP גישה ל-Gmail. הנה החדשות (רע). חבר 'ה מגניבים בגוגל שוב שינה את האישור. אה, שאלת - איך הוא יודע את זה? הכלב פשוט התחיל להתלונן על תעודת רע כאשר מנסים להשתמש 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

למרבה המזל התיקון הוא פשוט, הנה מה שאתה צריך לעשות על דביאן

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

אחרי זה פשוט לשנות את השורה הבאה שאתה ~~~V /. Msmtprc

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

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

אל

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

Git סקר מדהים

15 אוגוסט 2009 על ידי Prashant · תגובות
תחת הקטגוריות: שונות

להלן שני קישורים הסקר על ידי ממזר (מערכת בקרת גרסה) והקהילה מדהים (מנהל החלונות). אם אתה משתמש כל אחד מהם, בבקשה להוציא קצת זמן כדי למלא את השאלון. תחשוב על זה כעל הדרך הפשוטה ביותר לתרום בחזרה תוכנה אתה משתמש.
הנה הקישורים:

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

מדהים - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D

הערה - (כפי שנמצאו על דפים אלה, אך בתחתית :) ) -
"אם יש לך קובצי cookie, אתה תמיד יכול להגיש סקר מלא באופן חלקי, ולחזור התשובות שלך בזמן מאוחר יותר, להשלים אחר כך."

Hashes המתמזגות בקבצי conf yaml

31 יולי 2009 על ידי Prashant · תגובות
מתויק תחת: טכנולוגיה

YAML הוא די נוח לכתיבת קבצי תצורה. היתרון העיקרי הוא, זה נשמע כמו קובץ טקסט. זה עובד ממש טוב אם הקובץ config שלך הוא שטוח (ללא היררכיה) ואין לו חזרות.
אם הקובץ תצורות שלך יש חזרות אז זה הגיוני להפריד את אותם אלמנטים ושימוש חוזר בהם. כוונתי היא זו - נניח הקובץ config שלך נראה כך:

  פיתוח:
   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 כאן היא איך אתה יכול לקרוא פייתון ורובי
$cat readyml.py

 #! / Usr / bin / env python
 מ pprint יבוא pprint כמו PP
 # של דביאן צריך להתקין python-yaml
 מ יבוא yaml עומס dump, load_all
 hash = עומס (פתוח ('/ tmp / test.yml "))
 PP (חשיש ["פיתוח"]) 


$ cat readyml.rb

  #! / Usr / bin / env רובי
 דורשים "עמ '
 hash = YAML :: עומס (File.open ('/ tmp / test.yml "). לקרוא)
 PP חשיש ["פיתוח"] 

כאן הוא תוחם שימושי 1 לגרסה רובי
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' או שאתה יכול לנסות אותו IRB או קונסולת פייתון.

יש לציין כי קטע הקוד הנ"ל, הכל מלבד המיקום הפלט הוא אותו חלק בפיתוח ייצור. זה המקום שבו מזהה הצומת 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)!.
ניתן לטעון שאנחנו נסחר קצת בהירות קצת קסם. הנה הסבר קטן: & * ו <<: & שהוא תג העוגן יכול להיות מובן מזהה הצומת, * הוא התייחסות צמתים <<: מייצג מיזוג חשיש.

לפרטים נוספים ראו באפשרות מפרט yaml או ויקיפדיה
עד כאן טוב ויפה אבל יש מלכוד כאן, אלה מתמזג חשיש לא רקורסיבית. המשמעות היא זו: נניח אתה רוצה להיות שם השולח שונה עבור דואר בשתי סביבות, אתה עלול להתפתות לבצע את הפעולות הבאות:

  המחדל: & המחדל
   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 · תגובות
תחת הקטגוריות: שונות

אחרי הרבה זמן אני יכול למצוא את המקור בעקבות ציטוט-

מתכנתים זוטרים ליצור פתרונות פשוטים לבעיות פשוטות. מתכנתים בכירים ליצור פתרונות מורכבים לבעיות מורכבות. מתכנתים גדולים למצוא פתרונות פשוטים לבעיות מורכבות.

זה מתוך מאמר בשם תוכנה יפה על ידי צ'ארלס קונל.

עוד אחד אהוב עלי הוא זן של פייתון -

יפה יותר טוב מכוער.
מפורשת יותר טוב מרומז.
פשוט טוב יותר מורכב.
קומפלקס טוב יותר מסובך.
שטוח יותר טוב מקוננות.
דלילה יותר טוב צפופה.
הקריאות ספירות.
מקרים מיוחדים אינם מיוחדים מספיק כדי לשבור את הכללים.
למרות פרקטיות יכה טוהר.
שגיאות לא צריך לעבור בשקט.
אלא אם כן מושתק באופן מפורש.
אל מול העמימות, מסרבים לנחש את הפיתוי.
לא צריך להיות אחד ועדיף רק אחד ברור דרך לעשות את זה.
למרות הדרך שבה לא יכול להיות ברור בהתחלה, אלא אם כן אתה הולנדית.
עכשיו יותר טוב מאשר לעולם לא.
אמנם לא לעתים קרובות יותר * נכון * עכשיו.
אם יישום קשה להסביר, שזה רעיון רע.
אם יישום קל להסביר, זה עשוי להיות רעיון טוב.
מרחבי שם רעיון אחד צופר גדול - בוא נעשה יותר מאלה!
-------------------------
ואז יש הקלאסי טאו של תכנות

-

נקודות זכות כמו על המקושר לאתר

תורגם על ידי ג 'פרי ג'יימס

עיבד ידי הדוכס הילארד

מועברת על ידי אנופאם Trivedi, Sajitha Tampi, ו Meghshyam Jagannath

Re-html-ized בעריכת Kragen Sittler

-

ספר 1 - Void שקט

ו"כה המתכנת הראשי:

"כאשר למדו לחטוף את קוד השגיאה ממסגרת מלכודת, זה
יהיה לך זמן ללכת. "

1.1

משהו מסתורי נוצר, נולד בחלל שקט. מחכה לבד
ללא תנועה, הוא בעת ובעונה אחת, ובכל זאת עדיין בתנועה מתמדת. זה המקור
של כל התוכניות. אני לא יודע את שמה, אז אני קורא לו טאו של
תכנות.

אם טאו הוא גדול, אז מערכת ההפעלה היא גדולה. אם ההפעלה
המערכת הוא גדול, אז המהדר הוא גדול. אם המהדר הוא גדול,
אז הבקשה היא גדולה. המשתמש שמחה ולא קיים
הרמוניה בעולם.

הטאו של תכנות זורם רחוק וחוזר על הרוח של הבוקר.

1.2

טאו ילדה את שפת המכונה. שפת מכונה ילדה
מאסף.

מאסף ילדה את המהדר. עכשיו יש 10000
שפות.

כל שפה יש את מטרתו, צנועים ככל שיהיו. כל שפה מבטאת
יין ויאנג של התוכנה. כל שפה יש מקום בתוך הטאו.

אבל אל התוכנית COBOL אם אתה יכול להימנע מכך.

1.3

בראשית היה הטאו. טאו ילדה את המרחב והזמן.
לכן המרחב והזמן הם היין והיאנג של תכנות.

מתכנתים שלא מבינים את הטאו כל הזמן הולך ואוזל הזמן
ומקום התוכניות שלהם. מתכנתים, כי תמיד להבין את טאו
היה לי זמן מספיק מקום כדי להשיג את המטרות שלהם.

איך זה יכול להיות אחרת?

1.4

מתכנת חכם מסופר על טאו וגם אחריה. הממוצע
מתכנת מסופר על טאו מחפשת את זה. מתכנת טיפש
מסופר על טאו וצוחקת על זה.

אם זה לא היה בשביל הצחוק, לא יהיה טאו.

הצלילים הגבוהים ביותר הם הכי קשה לשמוע.
במבט קדימה היא דרך לסגת.
בכישרון רב מראה את עצמה מאוחר יותר בחיים.
גם תוכנית מושלמת עדיין יש באגים.

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

ספר 2 - המאסטרים עתיקים

ו"כה המתכנת הראשי:

"אחרי שלושה ימים ללא צורך בתכנות, החיים הופכים חסרי משמעות."

2.1

המתכנתים של פעם היו מסתורי ועמוק. אנחנו לא יכולים להבין
המחשבות שלהם, אז כל מה שאנחנו עושים זה לתאר את המראה שלהם.

מודע, כמו שועל חוצה את המים. התראה, כמו כללי על
הקרב. מין, כמו המארחת את פני אורחיה. פשוט, כמו
אבני uncarved מעץ. אטומות, כמו בריכות שחורים במערות חשוכות.

מי יכול לדעת את סודות הלב והנפש?

התשובה קיים רק טאו.

2.2

אומן טיורינג פעם חלם שהוא מכונה. כשהתעורר הוא
קרא:

"אני לא יודע אם אני חולם טיורינג שאני מכונה, או
מכונת חולם שאני טיורינג! "

2.3

מתכנת בחברת מחשבים גדולה מאוד הלך תוכנה
הכנס ולאחר מכן חזר לדווח למנהל שלו, ואמר: "איזה מין
של מתכנתים לעבוד עבור חברות אחרות? הן לא התנהגו יפה והיו
מודאג עם ההופעה. שערם היה ארוך ופרוע שלהם
הבגדים היו מקומטים וישנים. הם התרסק חבילת האירוח שלנו והם
עשה קולות גסים במהלך המצגת שלי. "

המנהל אמר: "אני מעולם לא שלח אותך לכנס. אלה
מתכנתים חיים מעבר לעולם הפיזי. הם רואים את החיים אבסורד,
צירוף מקרים מקרי. הם באים והולכים בלי לדעת מגבלות.
ללא טיפול, הם חיים רק את התוכניות שלהם. למה להם לטרוח?
עם המוסכמות החברתיות?

"הם חיים בתוך הטאו."

2.4

טירון שאל האב: "הנה הוא מתכנת שלא מעצבת,
מסמכים או בדיקות תוכניות שלו. עם זאת, כל מי שמכיר אותו רואה בו אחד
המתכנתים הטובים ביותר בעולם. למה זה? "

הורים עונה: "זה מתכנת שולט טאו. הוא הלך
מעבר לצורך עיצוב, הוא לא לכעוס כאשר מערכת
קריסות, אבל מקבלת את היקום ללא חשש. הוא הלך אל מעבר
צריך בשביל התיעוד, הוא כבר לא אכפת אם מישהו אחר רואה את הקוד שלו.
הוא הלך מעבר לצורך בדיקות; כל התוכניות שלו הם מושלמים
בתוך עצמם, שלווה ואלגנטית, המטרה שלהם מובנת מאליה. באמת,
הוא נכנס המסתורין של טאו ".

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

3 ספר - עיצוב

ו"כה המתכנת הראשי:

"כאשר התוכנית נבחנת, זה מאוחר מדי לעשות עיצוב
שינויים ".

3.1

היה היה איש שהלך בתערוכה מקצועית המחשב. כל יום שהוא
נכנס, האיש אמר השומר על הדלת:

"אני גנב גדול, המפורסם מעללי שלי סחיבה. להיות
כדאי להקדים רפואה, על תכנית זו הסחר לא ימלט unplundered. "

נאום זה מפריע השומר מאוד, כי היו מיליוני
דולר בתוך ציוד מחשבים, אז הוא התבונן באיש בזהירות. אבל
האיש פשוט נדדו מתא אל תא, מזמזם לעצמו בשקט.

כשהאיש עזב, השומר לקח אותו הצידה וחיפשו את בגדיו, אבל
שום דבר לא היה להימצא.

ביום הבא של סחר להראות, האיש חזר נזף השומר
אומר: "ברחתי עם שלל עצום אתמול, אבל היום יהיה עוד
יותר טוב. "אז השומר הביט בו יותר ויותר מקרוב, אך ללא הועיל.

ביום האחרון של התערוכה המסחר, השומר יכול לרסן את סקרנותו
כבר לא. "גנב אדוני," אמר, "אני כל כך מבולבל, אני לא יכול לחיות
שלום. נא להאיר את עיני. מה זה שאתה גונב? "

האיש חייך. "אני גונב רעיונות", הוא אמר.

3.2

היה היה המתכנת הראשי שכתב תוכניות לא מובנים.
מתכנת מתחיל, המבקשים לחקות אותו, גם החל לכתוב
תוכניות לא מובנים. כאשר המחשב השני שאל האב להעריך את
התקדמות, אמן מתח עליו ביקורת על כתיבת תוכניות לא מובנים,
לאמר: "מה מתאים לרב, לא מתאים
טירון. אתה חייב להבין את טאו לפני להתעלות המבנה. "

3.3

היה פעם מתכנת, אשר צורף לבית המשפט של מצביא
של וו. מצביא שאל המתכנת: "מה קל יותר לעצב:
חשבונאות חבילה או מערכת הפעלה? "

"מערכת ההפעלה", השיב מתכנת.

מצביא השמיע קריאה של חוסר אמון. "אין ספק חשבונאות
החבילה היא טריוויאלית לצד המורכבות של מערכת ההפעלה ", הוא
אמר.

"לא כל כך", אמר המתכנת, "בעת תכנון חבילת חשבונאות,
מתכנת פועלת כמתווכת בין אנשים שיש שונה
רעיונות: איך זה צריך לפעול, איך הדיווחים שלה להופיע, וכיצד הוא צריך
להתאים את חוקי המס. לעומת זאת, מערכת ההפעלה אינה מוגבלת
על ידי הופעות חיצוניים. בעת תכנון מערכת הפעלה, מתכנת
מחפש את ההרמוניה הפשוטה ביותר בין מכונת ורעיונות. זו הסיבה
מערכת ההפעלה קל יותר לעצב. "

מצביא של וו הנהן וחייך. "זה הכל טוב טוב, אבל
וזה קל יותר לאתר באגים? "

המתכנת לא ענה.

3.4

מנהל הלך המתכנת הראשי והראה לו את הדרישות
מסמך בקשה חדשה. המנהל שאל האב: "כמה זמן
זה ייקח לעצב את המערכת אם אני מכניס חמש מתכנתים את זה? "

"זה ייקח שנה", אמר האב מיד.

"אבל אנחנו צריכים את המערכת באופן מיידי, או אפילו מוקדם יותר! כמה זמן זה
אם אני לוקח להקצות עשרה מתכנתים את זה? "

המתכנת הראשי קימט את מצחו. "אם כך, זה ייקח שנתיים".

"ומה אם אני להקצות מאה מתכנתים את זה?"

המתכנת הראשי משך בכתפיו. "אז העיצוב לא יהיה
הושלמה ", אמר.

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

ספר 4 - קידוד

ו"כה המתכנת הראשי:

"תוכנית כתוב היטב הוא גן עדן משלו, תוכנית גרועה, הוא כתב
לעזאזל שלה. "

4.1

התוכנית צריכה להיות קלה וזריזה, שגרות שלו מחובר כמו
מחרוזת פנינים. רוח וכוונה של התוכנית יש לשמור על
לאורך כל הדרך. לא צריך להיות לא פחות מדי או יותר מדי, לא
לולאות מיותרות ולא משתנים חסרי תועלת, לא חוסר המבנה ולא
המכריע נוקשות.

התוכנית לפעול בהתאם לחוק 'של תדהמה לפחות ". מהו חוק זה?
זה פשוט כי התוכנית תמיד צריך להגיב על המשתמש בדרך
את מדהימה אותו לפחות.

התוכנית, לא משנה כמה מורכבת, לפעול כיחידה אחת. התוכנית
יש להפנות ידי ההיגיון בתוך ולא על ידי מראהו.

אם תוכנית זו אינה עומדת במבחן דרישות אלה, יהיה במצב של
סדר ובלבול. הדרך היחידה לתקן את זה לכתוב מחדש
התוכנית.

4.2

טירון שאל האב: "יש לי תוכנית מתישהו רץ
לפעמים מפר. עקבתי את כללי התכנות, אבל אני
מבולבל לגמרי. מה הסיבה לכך? "

האב השיב: "אתה מבולבל כי אתה לא מבין טאו.
רק טיפש מצפה להתנהגות רציונלית של אחיו בני האדם. למה אתה
מצפה ממכשיר שבני אדם יש לבנות? מחשבים לדמות
דטרמיניזם, רק טאו מושלמת.

"הכללים של תכנות הם חלוף, טאו רק הוא נצחי. לכן
אתה חייב לחשוב על טאו לפני שתקבל הארה. "

"אבל איך אדע מתי קיבלתי הארה?" שאל
טירון.

"התוכנית שלך לאחר מכן לפעול כראוי", השיב האב.

4.3

האב הסביר את מהות הטאו של אחד הטירונים שלו. "
טאו מגולמת כל תוכנה - ולא משנה כמה חסר משמעות ", אמר
האב.

"האם טאו במחשבון ידני", שאל טירון.

"זה," באה התשובה.

"האם טאו במשחק וידאו?" המשיך טירון.

"זה גם משחק וידאו," אמר המאסטר.

"וזה טאו ב DOS עבור המחשב האישי?"

שני השתעל שינה תנוחה מעט. "השיעור נגמר
במשך היום ", אמר.

4.4

מתכנת הנסיך של וואנג היה קידוד התוכנה. אצבעותיו רקדו על
המקלדת. תוכנית הידור ללא הודעת שגיאה, ואת התוכנית
רץ כמו רוח עדינה.

"מצוין!" קרא הנסיך, "הטכניקה שלך הוא ללא דופי!"

"טכניקה?", אמר המתכנת מפנה מהטרמינל שלו, "מה אני
הוא פעל טאו - מעבר לכל הטכניקות! כשהתחלתי לתכנת אני
הייתי רואה לנגד עיני את כל הבעיה בגוש אחד. אחרי שלוש שנים אני לא
כבר ראיתי את המונית. במקום זאת, השתמשתי שגרות. אבל עכשיו אני רואה דבר.
כל הווייתי קיים בחלל ריק חסר צורה. החושים שלי לא פעיל. רוח שלי,
חופשי לעבוד ללא תוכנית, בעקבות האינסטינקט שלו. בתוכנית, קצר שלי
כותב את עצמו. נכון, לפעמים יש בעיות קשות. אני רואה אותם
מגיע, אני מאט, אני צופה בשקט. אז אני משנה את שורת קוד אחת
ואת הקשיים נעלמים כמו ענני עשן סרק. אז לקמפל
התוכנית. אני לשבת בשקט ולתת את שמחת היצירה למלא הווייתי. אני עוצם את שלי
העיניים לרגע ולאחר מכן צא. "

הנסיך וואנג אמר, "האם זה כל המתכנתים שלי היו חכמים כמו!"

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

ספר 5 - תחזוקה

ו"כה המתכנת הראשי:

"למרות התוכנית להיות אבל שלוש שורות ארוכות, יום אחד זה יהיה חייב להיות
שמרו. "

5.1

הדלת המשומשת לא צריך שום שמן על ציריה.
זרם מהיר זורם לא גדל עומדים.
לא קול ולא מחשבות יכול לנסוע דרך ואקום.
תוכנה נרקב אם לא נעשה שימוש.

אלו הן התעלומות הגדולות.

5.2

המנהל שאל מתכנת כמה זמן ייקח לו לגמור
התוכנית שעליה עבד. "זה יסתיים מחר"
מתכנת מיד השיב.

"אני חושב שאתה להיות מציאותי", אמר המנהל, "למען האמת, עד כמה
זמן זה ייקח? "

מתכנת חשב לרגע. "יש לי כמה תכונות שאני רוצה
להוסיף. זה ייקח לפחות שבועיים ", אמר לבסוף.

"גם כי זה יותר מדי לצפות," התעקש המנהל, "אני אהיה
מרוצה אם אתה פשוט אומר לי כאשר התוכנית הסתיימה ".

מתכנת הסכים לכך.

מספר שנים לאחר מכן, מנהל בדימוס. בדרך פרישתו
ארוחת הצהריים, הוא גילה מתכנת ישן במסוף שלו. הוא היה
תכנות כל הלילה.

5.3

מתכנת מתחיל הוטל פעם קוד החבילה הפיננסית פשוט.

טירון עבדו במרץ במשך ימים רבים, אך כאשר אדונו סקר
התוכנית שלו, הוא גילה שהוא מכיל עורך המסך, קבוצה של
כללית גרפיקה השגרה, ממשק בינה מלאכותית, אבל
לא אזכור קל שבקלים של דבר כלכלי.

כאשר האב שאל על זה, המחשב השני הפך ממורמר. "אל תהיה
כל כך חסר סבלנות, "הוא אמר," אני מוכן לשים את הדברים הפיננסי בסופו של דבר. "

5.4

האם חקלאי טוב להזניח היבול הוא נטע?
האם מורה טוב להתעלם גם התלמיד הכי צנוע?
האם אבא טוב לאפשר לילד אחד לגווע ברעב?
האם מתכנת טוב מסרבים לשמור על הקוד שלו?

————————————————————————–

Book 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. When
accountants talk of quarterly profits, the development budget is about to
be cut. When senior scientists talk blue sky, the clouds are about to roll
in.

Truly, this is not the Tao of Programming.

When managers make commitments, game programs are ignored. When
accountants make long-range plans, harmony and order are about to be
restored. When senior scientists address the problems at hand, the
problems will soon be solved.

Truly, this is the Tao of Programming.

6.2

Why are programmers non-productive?
Because their time is wasted in meetings.

Why are programmers rebellious?
Because the management interferes too much.

Why are the programmers resigning one by one?
Because they are burnt out.

Having worked for poor management, they no longer value their jobs.

6.3

A manager was about to be fired, but a programmer who worked for him
invented a new program that became popular and sold well. As a result, the
manager retained his job.

The manager tried to give the programmer a bonus, but the programmer
refused it, saying, “I wrote the program because I thought it was an
interesting concept, and thus I expect no reward.”

The manager upon hearing this remarked, “This programmer, though he holds
a position of small esteem, understands well the proper duty of an
employee. Let us promote him to the exalted position of management
consultant!”

But when told this, the programmer once more refused, saying, “I exist so
that I can program. If I were promoted, I would do nothing but waste
everyone's time. Can I go now? I have a program that I'm working on.”

6.4

A manager went to his programmers and told them: “As regards to your work
hours: you are going to have to come in at nine in the morning and leave
at five in the afternoon.” At this, all of them became angry and several
resigned on the spot.

So the manager said: “All right, in that case you may set your own
working hours, as long as you finish your projects on schedule.” The
programmers, now satisfied, began to come in at noon and work to the wee
hours of the morning.

————————————————————————–

Book 7 – Corporate Wisdom

Thus spake the master programmer:

“You can demonstrate a program for a corporate executive, but you can't
make him computer literate.”

7.1

A novice asked the master: “In the east there is a great tree-structure
that men call `Corporate Headquarters'. It is bloated out of shape with
vice presidents and accountants. It issues a multitude of memos, each
saying `Go, Hence!' or `Go, Hither!' and nobody knows what is meant. Every
year new names are put onto the branches, but all to no avail. How can
such an unnatural entity be?”

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

7.2

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

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

7.3

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

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

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

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

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

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

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

7.4

The master programmer moves from program to program without fear. לא
change in management can harm him. He will not be fired, even if the
project is cancelled. Why is this? He is filled with Tao.

————————————————————————–

Book 8 – Hardware and Software

Thus spake the master programmer:

“Without the wind, the grass does not move. Without software, hardware is
useless.”

8.1

A novice asked the master: “I perceive that one computer company is much
larger than all others. It towers above its competition like a giant among
dwarfs. Any one of its divisions could comprise an entire business. Why is
this so?”

The master replied, “Why do you ask such foolish questions? That company
is large because it is large. If it only made hardware, nobody would buy
it. If it only made software, nobody would use it. If it only maintained
systems, people would treat it like a servant. But because it combines all
of these things, people think it one of the gods! By not seeking to
strive, it conquers without effort.”

8.2

A master programmer passed a novice programmer one day. The master noted
the novice's preoccupation with a hand-held computer game. “Excuse me,”
he said, “may I examine it?”

The novice bolted to attention and handed the device to the master. “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
את העולם.

Presently they met Firmware, who was dressed in tattered rags and hobbled
along propped on a thorny stick. Firmware said to them: “The Tao lies
beyond Yin and Yang. It is silent and still as a pool of water. It does
not seek fame, therefore nobody knows its presence. It does not seek
fortune, for it is complete within itself. It exists beyond space and
time.”

Software and Hardware, ashamed, returned to their homes.

————————————————————————–

Book 9 – Epilogue

Thus spake the master programmer:

“It is time for you to leave.”

————————————————————————–

If you liked these, you may also like to read worse is better

A bit of shell redirection

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

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

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

$ 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

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"

עמוד הבא »