世論調査は、ping、PubSubの、pubsubhub、pubsubhubbub
あなたが懐疑的である場合には、上記の狂気のメソッドは、ポストのタイトルに、あります。 ハイテク界では、それはあなたがpubsubhubbub聞いたことがないことはほとんどありません。 高速の数ヶ月で、それは物事について話しましたトップ3の一つとなっている。 ている他の二つの準同型暗号とGoogle 波 [ 1 ]。 現在のポストに戻ってくる - タイトルに含まれる用語は、あなたが他の人から内容を取得する方法を示しています。 あなたは、彼らが概念的ブログに限定されていない場合でも、ブログに関して起こって物事を想像する場合は、次の詳細については、より明確になります。
ポーリングは、クライアントが何か新しいものが来ている場合は、サーバーを求め続けるシナリオを指します。 どのくらいの頻度でアップデートを求めるためには、常にあまりにも頻繁すぎるかまれなポーリングに問題があるでしょうが、ある読者が指摘するようにここでポーリングを一つの大きな 、ものがそのサーバーであることの状態を維持する必要はありません。
pingは、記事を投稿するとき、あなた(またはあなたのソフトウェアが)また、いくつかの人気の(中央)の更新サービスを更新する場合を指します。 いくつかの背景ここに 。
次は、それが作られた最も早いピッチの一つ、パブリッシュ/サブスクライブの略でPubSubのですここでエヴァンHenshaw-プラスとKellanエリオット·マックリー(72スライドが通過する価値がある)で。 彼らはに対して与えた説得力のある例では、このた - 特定の日付に、6721はそれらの24時間でFlickrを訪れたと "潜在的に"写真をアップロードしたかもしれない、そのうちの45754ユーザーの最新の写真を取得するためにFlickrの290万回クロールFriendfeedで。 彼らが指摘するように彼らは何を提案したが、 "革命的な新しい20歳の技術"新技術ではなかったことに注意してください。 あなたは、ブログのためにそれを行う場合はXMPP大きな問題の1つ - 60から70パーセントと高いかもしれませんプレゼンスデータのオーバーヘッドは、多くのことを減らすことができます。
pubsubhubは、ハブとpubsubhubbubプロトコル、pubsubhubのアイデアになっているコアでサブスクライブパブリッシュを表しています。 請求項の出版社は(ブロガーと言う)、 "どこかに雲の中に"存在するプロトコルごとに、これはプロトコルごとにプッシュまたはプルすることができますが、次のリンクに進んでください(複数のハブを、お互いに話かもしれない)ハブを更新チェーン、クライアントへのハブ(読者を言う)は、常にモデルをプッシュしています。 このページはpubsubhubbubための良い出発点であり、概要スライドが良いです。 これまで説得力のあるAnil Dashは、それを説明しますここでプッシュWebサービスとして。
他の2つの関連読み取りはwebhooks基本的にHTTPコールがあります。 githubのは、 使用し 、それを、そうで支払いの非同期通知のためにPayPalを行いIPNますので、他の多くの操作を行います。 関連する概念はされていrsscloud再びPubSubのハブである。 従い、この詳細については、リンクをクリックします。
ここで、これらすべてを書くことのポイントは何か不思議に思うかもしれません、2つの1があります。 これらのことは、最低限、少なくとも、2、知っておく価値があります。 このブログは、このWordPressの使用appspotハブを介して使用できるようになりましpubsubhubbubあるプラグインとフィードもFeedBurnerは、リンクを介して有効にpubsubhubbubです。 ここで
-
[ 1 ]。 -完全に準同型暗号化のために読んでグッド入門は、 この Bruce Schneier氏の記事とこの話は、Google波の、多かれ少なかれ、唯一の情報源です。
-UPDATE - この記事は、コールバック用のパブリックサーバーの要件は、XMPPゲートウェイ(pubsubhubbub用)を使用してデスクトップクライアントのために回避する方法について説明します。
アセンブリのビット
読んだ後にこのロックフリーバッファについての記事を、CASの使用を見て(比較とスワップ)、私は同じようにアセンブリコードを投稿するように感じました。 ネイティブメソッドを記述し、Java(バック1.5、Javaの並行データ構造が多かれ少なかれ存在しない以外だったとき)からそれを呼び出すことがあった上のケースを使用しています。 さらに騒ぎがなければ、私はあなたにコードを解き放つよ
。 最初は、CAS用で、もう1つはユークリッドのアルゴリズム(このいずれかが同様に多くの場所とチュートリアルに記載されています)を使用して、コンピューティングGCDのためのものです。
コンパイルと実行命令を gcc file_name.c ; ./a.out
比較とスワップ
の#includeの#include / /交換 - newValueは、comperandは古い/期待値です。 / * *関数は、実際には、次のことを行います - * destに値が他のnewValueはそのままにしておくことによって、それを交換しOldValueプロパティに等しい場合は、次のいないすべてのこれらのアトミック * *戻り値の2つのオプションがあります。 * destの1.is初期値とoldvalにとそれを比較するfxnの呼び出しの負担を残す * 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 ;/ * CASが成功したことを図1に、それは/ *失敗したが0を示す / *ところでフラグが追い払ってくれるためにCCを設定する必要があります! * / __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をDONE" "MOVL $ 0、%1は\ n \ t"は "DONEます:\ n \ t"は : "= M"(destが)、 "= G"(結果) : "G"(OldValueプロパティ)、 "G"(newValueは)、 "M"(DEST) : "%eaxに"、 "%ebxに"、 "ECX"、 "CC" 。) のprintf( "(%dは、%D、%d)が、" * destは、OldValueプロパティ、newValueは); 結果を返します。 } / * TODO * whileループでfxn上に置く別のASM fxnを書き、それが* /を成功しない限り続けようと int型のmain(){ ます。int a = 5、B = 6; int型* C =(int型*)はmalloc(sizeof(int)を); * C = 6; / * int型C = 6; * / のprintf( "%dです\ n"、CAS(C、B、B)); のprintf( "%dです\ n"、CAS(C、B、A)); のprintf( "%dにする\ n"、CAS(C、A、)); のprintf( "%dです\ n"、CAS(C、B、B)); * C = 6; / * C = 5; * / のprintf( "*の値を変更するC%dまでの\ n"、* C); のprintf( "%dです\ n"、CAS(C、B、B)); のprintf( "%dです\ n"、CAS(C、B、A)); のprintf( "%dにする\ n"、CAS(C、A、)); のprintf( "%dです\ n"、CAS(C、A、B)); のprintf( "%dです\ n"、CAS(C、B、A)); 0を返します。 }
書式設定の注意事項 - WPのシンタックスハイライトのように思えるが追加されてい 最後に、それを無視してください。
GCD
の#includeint型GCD(int型1は、int B){ int型の結果; / *ユークリッドのアルゴリズムを使用して最大公約数を計算* / __asm__ _のvolatile__( "MOVL%1、%%eaxに;" "MOVL%2、%%EBX;" "CONTD:CMPL $ 0、%%EBX;" "JEは、DONE;" "xorl%%edxを、%%EDX;" "idivl%%EBX;" "MOVL%%ebxには、%%eaxに;" "MOVL%%edxを、%%のEBX;" "JMPはCONTD;" "DONE:MOVL%%eaxに、%0;": "= G"(結果): "G"()、 "G"(B) 。) 結果を返します。 } int型のmain(){ 第二に、最初のint; のprintf( "二つの整数を入力してください:"); scanf関数( "%dは%d個"、&、最初&2番目)。 のprintf( "%d個&%dの最大公約数は%dです\ n"、第一、第二、GCD(第1、第2、第)); 0を返します。 }
クリケット·ワールドニュー·ワールド·オーダーをお待ちしております
5つのテストと約2ヶ月間、イギリス埋め立て灰をスパニングシリーズの後に。
あなたが重要にしたくない場合、その中間の順序は、 "平均"である - のは最初の優勝チームについてお話しましょう。 バットでGreameスワンの貢献は、ボールを持って貢献よりも少なくカウントされません。 スチュアートブロード - 最高のすべてのオールラウンダー第五のテストのために非スターターであった。 アンドリューストラウスは、一貫性のある打者だったジミー·アンダーソンは、一貫性のあるボウラーだった。
ここでのポイントは、優勝チームの成果を激しく非難することではなく、遠近法で、これらすべてにもかかわらず、オーストラリアは失われたという事実を置くことはありません。 彼らの最高のボウラーに名前を付けるために依頼された場合には、数秒間考えてする必要があります。 右側には、BW Hilfenhausた。 Hauritzはeverbodyの期待を上回ったが、それでも5つのテストの2を選択することには十分ではなかった。 南アフリカは、世界クラスのスピナーのない世界のビーターとなったことはありません、オーストラリアは一つの良い十分な少なくとも一つせずに1残ることを期待することはできません。 マジシャンはステージを去り、それは魔法を忘れて、もはや芸術のようには見えません。 ポンティングは、より低い人間の間で長身、マイケル·クラークは、非常に頻繁に立ち上がるが、それはそれらのいくつかの非常に良いプレーヤーではなく、非常に良いチームとチームになります。
灰2009トロットでスチュアートブロードの(彼は有望なスタートにいくつかのより多くの灰の民話を追加した場合)は、すべてのオールラウンダーとして到着し、すべての時間の中で最も占いデビュー世紀の一つ、アンドリューフリントの最後の灰のために記憶されますが、それはまた、となりますIFS社とオーストラリアの覇権についてbutsは最終的に残りの部分に置かれた点として記憶、それは終わった。 彼らは行方不明時私は誤解しないでください、彼らはまだ発掘マイクハッセーまたはスチュアートクラークしかし、あなたはすべての時間の偉人の貢献を感じることができます。 時には彼らはIPLで自分自身を思い出させるようになるが、それでも彼らは置き換えることはできません。 ウォーン、マクグラス、ギルクリストは、一緒に遊んで見たことのために祝福しWaughs、ポン、Hyden、マーティンとランガーによってサポートされて感じてみましょう。
今後は、南アフリカ共和国は、常に非常に良いチームが残りますが、彼らは準決勝に勝ち、世界中でより一貫性のある必要があり、パキスタンは、インドの若い銃は、おそらく臨時の前任者の靴を埋めることは難しいでしょう、謎めいて鮮やかなままになります。 スリランカでは、工芸の芸術の見え隠れを表示するために継続すべきである。 しかし、我々はすべてのアウト支配的なチームを持つ前またはスティーブ·ウォーはかつてのように船長が、競争の欠如を訴える前にいつかのために待機する必要があります。
これに関連して - のは、アシフの帰って来ることを歓迎させ、彼は潜在的な地獄をたくさん持っている、のは、そのいくつかを見て、また新しいawatarでアンディの花を歓迎したいと考えてみましょう、右側には、長い間ダウンして善良な人たちを維持することはできません。
ルビーハッシュを作成する1つのライナー
私の古いプログラムのひとつを通過しながら、昨日、私はこれがいつか戻って私によって書かれました:
#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(nil)はb.size == 1であれば、B} flattened_array = unescaped_array.flatten ハッシュ=ハッシュ[* flattened_array]
irbで個々の手順を実行してみましょう:
IRB(メイン):009:0> unescaped_array = CGI.unescape(RAW_TEXT)スプリット( '&') => ["SUCCESS"、 "mc_gross = 10.00"、 "protection_eligibility =不適格"、 "payer_id = U7PPJJ4TSJ47E"、 "税= 0.00"、 "payment_date = 9時45分30秒2009年7月10日PDT"、 "PAYMENT_STATUSは=保留中"] IRB(メイン):013:0> unescaped_array = unescaped_array.map {| x |はB = x.split( "="); b.push(nil)はb.size == 1であれば、B} => ["SUCCESS"は、nil]、["mc_gross"、 "10.00"]、["protection_eligibility"、 "不適格"]、["payer_id"、 "U7PPJJ4TSJ47E"]、["税"、 "0.00"] 、["payment_date"、 "午前9時45分30秒2009年7月10日PDT"]、["保留"、 "PAYMENT_STATUS"]] IRB(メイン):014:0> flattened_array = unescaped_array.flatten => ["SUCCESS"は、nil、 "mc_gross"、 "10.00"、 "protection_eligibility"、 "不適格"、 "payer_id"、 "U7PPJJ4TSJ47E"、 "税"、 "0.00"、 "payment_date"、 "9時45分: 30 2009年7月10日PDT "、" PAYMENT_STATUS "、"保留中 "] IRB(メイン):015:0> ハッシュ=ハッシュ[* flattened_array] => {"税" => "0.00"、 "PAYMENT_STATUS" => "保留中"、 "payer_id" => "U7PPJJ4TSJ47E"、 "mc_gross" => "10.00"、 "SUCCESS" => nilで、 "payment_date" = > "9時45分30秒2009年7月10日PDT"、 "protection_eligibility" => "不適格"}
ところで、*はRubyでスプラット演算子と呼ばれ
'のペアの配列 "からハッシュを作成する別の方法は、注入を使用することです。
ハッシュ= [[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修正
あなたは、GmailにアクセスするにはmuttやSMTPを使用している場合。 ここで(悪い)ニュースがあります。 Googleのクールな男は、再び証明書を変更しました。 ああ、あなたが求めるなかった - それはどのようにそれを知っていますか? シンプルなmuttは悪名高い、msmpt使用しようとしたときに不適当な証明書に文句を開始 "その他のmsmtp:TLS証明書の検証に失敗しました:証明書が既知の発行元を持っていません。 ' 画面上で私を迎えた。
交差確認するには -
単に次のコマンドを実行します。
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
古いThwateサーバの代わりに今では発行者·セグメント内に次のGET
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
この直後、あなたに次の行を変更し、〜/。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と恐ろしい調査
ここではgit(バージョン管理システム)と素晴らしい(ウィンドウマネージャ)コミュニティによる調査の2つのリンクがあります。 あなたはこれらのいずれかを使用する場合は、アンケートを埋めるためにいくつかの時間を取り出してください。 使用するソフトウェアに戻って貢献する最も簡単な方法だと考える。
ここのリンクは以下のとおりです。
Gitは- http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
素晴らしい- http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
注 - (これらのページではなく、下部に発見
) -
"あなたはクッキーを有効にしている場合は、いつでも部分的に満たされた調査書を提出し、後であなたの答えに戻り、それを後で完了することができます。"
YAML confファイルの中にハッシュをマージする
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で上記のコードと仮定すると、PythonやRubyで読むことができる方法です。
$cat readyml.py
#!/ usr / bin / envをのpython PPとして出力の整然化のインポート出力の整然化から #Debianでのpython-yamlをインストールする必要があります YAMLインポート負荷から、load_all、ダンプ ハッシュをかざすと(開いている( 'は/ tmp / test.yml')) PP(ハッシュ['開発'])
$ cat readyml.rb
#!/ usr / bin / envをルビー "PP"を必要とする ハッシュ= YAML ::負荷(File.open( '/ tmpに/ test.yml')は。読む) ppはハッシュ['開発']
ここでルビーバージョンの便利な1ライナーです。
$ 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)の動作!
間違いなく我々は魔法のビットのいくつかの明快さを交換した。 ここで小さな説明は、次のとおりです。&、*と。<<&アンカー·タグであるが、ノードの識別子として理解することができます*は、ノードの参照と<<次のとおりです。ハッシュ結合を表しています。
詳細については、いずれかを参照してくださいYAML仕様またはWikipediaを
これまでのところは良いが、漁獲量はここにありますが、これらのハッシュのマージは再帰的ではありません。 それは何を意味すると、この次のとおりです。ましょうあなたが2つの環境でメールを別の送信者名を持ちたいと言うあなたは、次の操作を行うように誘惑される場合があります。
デフォルト値:&デフォルト 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
$
おっと、何かが間違っていた、前述したようにこの問題は、ハッシュ結合が再帰的ではないということですとマージ中には1つだけ鍵を持っている生産のメールで、デフォルトの電子メールに取って代わりました。 解決策/回避策は複数のレベルをアンロールすることです。
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ファイルにハノイの塔への解決策を記述しようとしていない場合ので、それはYAMLもしくは他の何かを掘り下げるよりも、confファイルをrestuctureすることをお勧めします。 しかし、それはとにかくあなたの呼び出しです。
偉大なプログラマは、複雑な問題への単純な解決策を見つける
長い時間の後、私は次の引用符でのソースを見つけることができる
ジュニアプログラマは簡単な問題に対してシンプルなソリューションを作成します。 上級プログラマは、複雑な問題への複雑なソリューションを作成します。 偉大なプログラマは、複雑な問題への単純な解決策を見つける。
それが呼ばれるエッセイから美しいソフトウェアチャールズコネル。
私のもう一つのお気に入りの1つであるPythonの禅 -
美しいは醜いよりも優れています。
明示的な暗黙よりも優れています。
シンプルは複雑よりも優れています。
複合体は複雑よりも優れています。
フラットは、ネストされたよりも良いです。
疎は密よりも優れています。
可読性カウントされます。
特殊なケースでは、ルールを破るのに十分特別ではありません。
実用性は、純度を打つが。
エラーは黙って渡すべきではありません。
明示的に沈黙させない限り。
曖昧さに直面して、推測する誘惑を拒否します。
それを行うには一、好ましくは1だけ明白な方法があるはずです。
あなたはオランダ語でない限りそのようには最初自明ではないかもしれませんが。
今は決してよりも優れています。
右*現在、多くの場合*よりも優れていることはありませんが。
実装が説明するのは難しい場合は、それは悪いアイデアです。
実装が説明するのは容易である場合、それは良いアイデアかもしれません。
名前空間は1警笛素晴らしいアイデアです - それらの複数の操作を行いますみましょう!
-------------------------
そして古典があるプログラミングのタオ
-
リンク先サイトオンとしてクレジット
ジェフリー·ジェームズによって翻訳され
デュークヒラードによって転写
Anupam Trivediは、Sajitha大麻、とMeghshyamジャガンによって送信される
Kragen Sittlerによる再HTML化され、編集
-
本1 - サイレントボイド
したがって、マスタープログラマspeakの過去形:
"あなたはトラップフレームからエラーコードを奪うことを学んだ、それ
あなたが去るまでの時間となります。 "1.1
神秘的な何かが静かな空間で生まれ、形成される。 一人で待っていると
動かない、それは一定の動きはまだ、まだ一度です。 それがソースです。
すべてのプログラムの。 私はその名前を知らないので、私はそれのタオを呼び出します
プログラミング。タオが大きい場合は、オペレーティングシステムは素晴らしいです。 場合、オペレーティング
システムは素晴らしいですが、コンパイラは素晴らしいです。 コンパイラが大きい場合、
次に、アプリケーションは素晴らしいです。 ユーザーが喜んで、そこに存在する
世界の調和。プログラミングのタオは遠く流れて朝の風に乗って戻ります。
1.2
タオは、機械語を生んだ。 機械語は、を出産した
アセンブラ。アセンブラ、コンパイラを出産した。 今1万があります
言語。各言語は、その目的、しかし謙虚を持っています。 各言語は、表現
ソフトウェアの陰と陽。 各言語は、タオ内でその場所を持っています。あなたはそれを避けることができれば、しかし、COBOLでプログラミングされません。
1.3
初めに、タオであった。 タオは、空間と時間を出産した。
したがって、空間と時間は、プログラミングの陰と陽があります。タオを理解していないプログラマは、常に時間を使い果たしている
それらのプログラムのための省スペース。 いつもタオを理解するプログラマ
彼らの目標を達成するのに十分な時間と空間を持っています。どのようにそれ以外の場合だろうか?
1.4
賢いプログラマはタオについて話し、それに従います。 平均
プログラマは、タオとそれに対する検索について知らされています。 愚かなプログラマ
タオとそれで笑いについて話されています。それは笑いがなかった場合、タオはないだろう。
最高音は聞くことが困難である。
今後は、退却する方法です。
偉大な才能は人生の後半に自分自身を示しています。
でも、完璧なプログラムはまだバグがあります。-------------------------
ブック2 - 古代マスターズ
したがって、マスタープログラマspeakの過去形:
"プログラミングなしで3日後に、人生は無意味になります。"
2.1
昔のプログラマは、神秘的で深遠であった。 我々は理解できない
自分の考えなので、私たちはすべての彼らの外観を記述しています。水を渡るキツネのように、注意してください。 に関する一般的なように、警告
戦場。 彼女のゲストを迎えるホステスのような一種。 のような、単純な
木のuncarvedブロック。 暗い洞窟でブラックプールのような、不透明な。誰が彼らの心の秘密を伝えることができますか?
答えは、タオにのみ存在します。
2.2
グランドマスターチューリングは、かつて彼がマシンであったことを夢見ていた。 彼は目を覚ましたときに
叫んだ。"私は私が機械だということを夢見たり、チューリングているかどうかがわからない
私はチューリングマシンだということを夢見て! "2.3
非常に大規模なコンピュータ会社からのプログラマは、ソフトウェアに行ってきました
"どのような種類:会議、その後は、と言って、彼のマネージャーに報告に戻って
プログラマは、他の企業のために動作しますか? 彼らは行儀とした
外見に無関心。 自分の髪は長くてボサボサだったとその
服はしわ、古いでした。 彼らは我々のホスピタリティースイートをクラッシュし、それら
私のプレゼンテーションの中で失礼な音を作りました。 "マネージャーは言った: "私は会議にあなたを送ったことがないはずです。 それらの
プログラマは、物理的世界を超えて住んでいます。 彼らは、人生は不条理考える
偶然の一致。 彼らは限界を知らずに来ては去って行く。
気にせず、彼らは彼らのプログラムのためにだけ住んでいます。 なぜ彼らはわざわざする必要があり
社会的慣習と?"彼らは、タオ内で生きている。"
2.4
初心者がマスターに尋ねた: "ここに設計しなかったプログラマは、ある
ドキュメントやテスト彼のプログラム。 まだ彼は彼のいずれかを検討してください知っている人すべて
世界最高のプログラマ。 これはなぜですか? "マスターは答えた: "それはプログラマがタオを習得しています。 彼はしまった
システム、彼が怒ることはありません。設計の必要性を超えて
クラッシュ、しかし気にせずに宇宙を受け入れます。 彼は超えてしまった
ドキュメンテーションのために必要があります。誰が彼のコードを見れば、彼はもはや気にしない。
彼はテストの必要性を超えてしまった、彼のプログラムの各々は完璧です
自身の中、落ち着いたエレガントな、彼らの目的は自明。 本当に、
彼はタオの謎に入りました。 "-------------------------
3本 - デザイン
したがって、マスタープログラマspeakの過去形:
"プログラムがテストされているとき、それはデザインを作るためには遅すぎる
変更されます。 "3.1
一度コンピュータのトレードショーに行ってきました男がいた。 彼として毎日
入力すると、男はドアでガードを語った。"私は、万引きの私の偉業のために有名な偉大な泥棒です。 である
備えあれば、このトレードショーのために脱出unplunderedてはならない。 "数百万があったので、このスピーチは、非常にガードを妨げ
コンピュータ機器のドルは内側なので、彼は慎重に男を見ました。 しかし
男は単に自分自身に静かにハミング、ブースからブースにさまよった。男が去ったときに、ガードは彼をわき取り、彼の服を探したが、
何も発見されるんでした。トレードショーの翌日に、男性が返され、ガードをたしなめ
と言って: "私は昨日の膨大な戦利品を使ってエスケープが、今日もになります
良い。 "ガードがこれまで以上に密接に彼を見てそうですが、無駄に。トレードショーの最終日に、ガードは彼の好奇心を抑えることができ
もはや。 "泥棒卿"と、彼は私が困惑である、私が住んでいることができません "と言った。
平和。 私を啓発してください。 それはあなたが盗んでいることは何ですか? "男は微笑んだ。 "私はアイデアを盗んでいます"と彼は言った。
3.2
一度構造化されていないプログラムを書いて、マスタープログラマがありました。 A
初心者プログラマは、彼を模倣しようとしている、また書き始めました
構造化プログラム。 初心者は彼を評価するためにマスターを尋ねられたとき
進歩、マスターは、構造化されていないプログラムを書くために彼を批判
マスターのために適切な何ですか "と言ってすることは適切ではありません
初心者。 あなたは、構造を超越する前にタオを理解する必要があります。 "3.3
将軍の裁判所に添付されたプログラマは、かつてありました
呉。 "設計が容易になります:将軍は、プログラマに尋ねた
会計パッケージまたはオペレーティング·システム? ""オペレーティングシステム"、プログラマーは答えた。
将軍は、不信の感嘆符を口に。 "確かに会計
パッケージには、彼は、 "オペレーティングシステムの複雑さの隣に簡単です
と述べた。"まあ、"プログラマは、会計パッケージを設計するときに "と言った。
プログラマは、別の持っている人々の間の仲介役として動作します
それが動作しなければならないか、そのレポートが表示されなければならないかと、どのように行う必要があります。アイデア
税法に準拠しています。 対照的に、オペレーティング·システムが限定されない
外側の出演で。 オペレーティング·システムを設計、プログラマー
マシンとアイデアの間に単純な調和を目指しています。 これはなぜ
オペレーティングシステムの設計が容易になります。 "呉の将軍はうなずいて微笑んだ。 "それがすべて良いとよくあるが、
これは、デバッグしやすいですか? "プログラマは返事をしなかった。
3.4
マネージャーはマスタープログラマーに行って、彼の要件を示した
新しいアプリケーションのドキュメント。 マネージャは、マスターに尋ねた: "どのくらい
私はそれに5つのプログラマーを割り当てる場合は、このシステムを設計するために時間がかかりますか? ""それは1年はかかるだろう"とマスターは速やかに言った。
"しかし、我々はすぐにこのシステムを必要とするか、またはあっても早く! どのくらいの時間がなります
私はそれに10のプログラマを割り当てた場合かかる? "マスタ·プログラマは眉をひそめた。 "その場合には、2年かかるでしょう。"
"私はそれに100プログラマを割り当てた場合、そして、何?"
マスタープログラマは肩をすくめた。 "それからデザインはなることはありません
完了すると、 "と彼は言った。-------------------------
本4 - コーディング
したがって、マスタープログラマspeakの過去形:
"よく練られたプログラムは、独自の天国です。出来の悪いプログラムです
独自の地獄。 "4.1
プログラムは、光とアジャイルである必要があり、そのサブルーチンは次のように接続された
真珠の文字列を指定します。 プログラムの精神と意図が保持されるべき
全体。 どちらも少なすぎるまたは多すぎるがあるはずです、どちらもない
不必要なループも無駄な変数、構造体のどちらも不足も
圧倒的な剛性。プログラムは、少なくとも驚き 'の `法則に従ってください。 この法律は何ですか?
それは、プログラムが常に方法でユーザーに応答するように単に
それは、少なくとも彼を驚かせる。プログラムは、どんなに複雑な、単一のユニットとして行動しなければならない。 プログラム
外見ではなく内のロジックによって指示されるべきである。プログラムがこれらの要件に失敗した場合、それはの状態になります
障害と混乱。 この問題を解決する唯一の方法は、書き換えることです。
プログラム。4.2
初心者には、マスターに尋ねた: "私はいつか実行するプログラムを持っており、
時々中断されます。 私はプログラミングのルールに従った、まだ私は午前
完全に困惑。 この理由は何ですか? "マスターは答えた: "あなたがタオを理解していないので、あなたには混乱しています。
唯一の愚か者は、彼の仲間の人間から合理的な行動を期待しています。 なぜあなたはそう
人間が構築しているマシンからそれを期待する? コンピュータがシミュレート
決定論、唯一の道は完璧です。"プログラミングのルールは一時的であり、唯一の道は永遠です。 従って
あなたが悟りを受け取る前にタオを熟考する必要があります。 ""しかし、私は啓発を受けたときはどのように私が知っているでしょうか?"
初心者。"あなたのプログラムはその後正常に実行され、"マスターは答えた。
4.3
マスターは、彼の初心者のいずれかのタオの性質を説明しました。 "
タオは、すべてのソフトウェアに具現されている - に関係なく、 "どのように取るに足りないと述べたの
マスター。"ハンドヘルド電卓のタオですか?"初心者は尋ねた。
"それは、"返信が来ました。
"タオは、ビデオゲームの中にいるのですか"初心者は続けた。
"それはあってもビデオゲームで、"マスターは言った。
"そして、パーソナルコンピュータ用のDOSのタオですか?"
マスターは、咳と少し彼の位置をシフトした。 "レッスンは以上です。
今日は、 "と彼は言った。4.4
プリンス王のプログラマがソフトウェアをコーディングしました。 彼の指は上に踊った
キーボード。 エラーメッセージを表示せずにコンパイルしたプログラム、およびプログラム
穏やかな風のように走った。"エクセレント!"プリンスは "あなたの技術が完全無欠だ!"、叫んだ。
"テクニック"とは?I "、プログラマが自分の端末から回して言った
フォローは、タオです - すべてのテクニックを超えた! 私が最初に私をプログラムするために始めたとき
私の前に1マスの問題全体を見ることができます。 3年後に私はありません
もはやこの塊を見ました。 代わりに、私はサブルーチンを使用していました。 しかし、今私は何も見ません。
私の全体の人間は形のない空間で存在しています。 私の感覚はアイドル状態になります。 私の精神、
計画なしで動作する自由に、独自の本能は、次のとおりです。 要するに、私のプログラムで
自分自身を書き込みます。 Trueの場合、時には困難な問題があります。 私はそれらを参照してください。
来て、私は遅く、私は黙って見て。 それから私は、単一のコード行を変更します。
や困難は、アイドル煙のパフのように消える。 私は、コンパイル
プログラム。 私はまだ座っていると仕事の喜びは私の存在を埋めてみましょう。 私を閉じて
一瞬目をして、ログオフします。 "プリンスWang氏は "私のプログラマがすべてのように賢明であったことだろう!"と言った。
-------------------------
本5 - メンテナンス
したがって、マスタープログラマspeakの過去形:
"プログラムがあるが、3つの行の長さが、いつかそれがなければならないでしょう
維持しています。 "5.1
よく使用されるドアは、ヒンジには石油を必要としません。
迅速に流れるストリームが停滞することはありません。
どちらの音も思考が真空中を移動することができます。
ソフトウェアは使用しない場合は腐敗。これらは、大きな謎である。
5.2
マネージャは、それが終了するために彼を取るとどのくらいのプログラマーを求め
彼は仕事されたプログラム。 "それは、明日が終了されます。"
プログラマは、速やかに答えた。"私はあなたが非現実的されていると思います"と、マネージャがどのように、正直に "と言った。
長い時間がかかりますか? "プログラマは、しばらく考えました。 "私はしたいことがいくつかの機能を持っている
追加します。 これは、少なくとも2週間かかります "と、彼はようやく言った。"たとえそれが期待するのは多すぎると、"マネージャーは私になる "と主張した
プログラムが完了したときは、単に私に言うなら満足している。 "プログラマはこれに合意した。
数年後、マネージャが退職した。 引退への道
昼食、彼は彼の端末で眠っているプログラマーを発見しました。 彼がいた
一晩プログラミング。5.3
初心者プログラマは、かつての単純な金融パッケージのコードに割り当てられました。
初心者が何日も猛烈に働いたが、彼のマスター時日
彼のプログラムは、彼はそれがスクリーンエディタのセットが含まれていることを発見
一般的なグラフィックスルーチン、人工知能インタフェースがありますが、
金融は何のないわずかな言及。マスターがこのことについて尋ねられたとき、初心者は憤慨しました。 "いけません
ので、せっかちな、私は最終的には金融のものに入れてよ "と彼は言った、"。 "5.4
良い農夫は、彼が植えた作物を無視していますか?
良い先生も、最も謙虚な生徒を見過ごしていますか?
良い父親は、単一の子供が餓死することができますか?
良いプログラマは自分のコードを維持することを拒否していますか?-------------------------
本6 - 管理
したがって、マスタープログラマspeakの過去形:
その後、すべてのでしょう - "プログラマは多くのと管理者が少数であるしましょう
生産的な。 "6.1
管理者は無限の会合を開催する場合、プログラマはゲームを作成します。 時
会計士が四半期の利益の話は、開発予算は約です。
カットすることができます。 上級科学者たちは青空を話すとき、雲がロールバックしようとしています
インチ本当に、これはプログラミングのタオではありません。
管理者は、約束をするときは、ゲームプログラムは無視されます。 時
会計士は長期計画を作成し、調和と秩序が必要がある場合には
復元されます。 上級科学者が手で問題に対処するとき、
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
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
それ。 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
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
$./test.sh will redirect hi as well as hii to out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
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
Since I am not a VAIO marketing guy, I'll start other way round -
Why you may not like to buy this laptop :
- No bluetooth : believe me, in 2009 sony sells laptop without bluetooth. Sure you can use usb stuff but …
- 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.
- No HDMI output.
- No separate graphics card and the likes.(and no dedicated video memory
Now , why you may like to buy it :
- 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.
- 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.
- From my usage, I see processor mostly clocks at 1.2GHz, and memory usage ~500MB. That just reinforces previous point.
- 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:
- 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.
- 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) - Video cam – just works
- Hibernate to disk and back – no problem
- 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 -
- 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"



































