アセンブリのビット

によって2009年8月29日プラシャント · コメント
の下でファイルされる: 技術

読んだ後にこのロックフリーバッファについての記事を、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

の#include 
 int型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を返します。
 }

クリケット·ワールドニュー·ワールド·オーダーをお待ちしております

によって2009年8月25日プラシャント · コメント
報告Filed under: その他

5つのテストと約2ヶ月間、イギリス埋め立て灰をスパニングシリーズの後に。

あなたが重要にしたくない場合、その中間の順序は、 "平均"である - のは最初の優勝チームについてお話しましょう​​。 バットでGreameスワンの貢献は、ボールを持って貢献よりも少なくカウントされません。 スチュアートブロード - 最高のすべてのオールラウンダー第五のテストのために非スターターであった。 アンドリューストラウスは、一貫性のある打者だったジミー·アンダーソンは、一貫性のあるボウラーだった。

ここでのポイントは、優勝チームの成果を激しく非難することではなく、遠近法で、これらすべてにもかかわらず、オーストラリアは失われたという事実を置くことはありません。 彼らの最高のボウラーに名前を付けるために依頼された場合には、数秒間考えてする必要があります。 右側には、BW Hilfenhausた。 Hauritzはeverbodyの期待を上回ったが、それでも5つのテストの2を選択することには十分ではなかった。 南アフリカは、世界クラスのスピナーのない世界のビーターとなったことはありません、オーストラリアは一つの良い十分な少なくとも一つせずに1残ることを期待することはできません。 マジシャンはステージを去り、それは魔法を忘れて、もはや芸術のようには見えません。 ポンティングは、より低い人間の間で長身、マイケル·クラークは、非常に頻繁に立ち上がるが、それはそれらのいくつかの非常に良いプレーヤーではなく、非常に良いチームとチームになります。
灰2009トロットでスチュアートブロードの(彼は有望なスタートにいくつかのより多くの灰の民話を追加した場合)は、すべてのオールラウンダーとして到着し、すべての時間の中で最も占いデビュー世紀の一つ、アンドリューフリントの最後の灰のために記憶されますが、それはまた、となりますIFS社とオーストラリアの覇権についてbutsは最終的に残りの部分に置かれた点として記憶、それは終わった。 彼らは行方不明時私は誤解しないでください、彼らはまだ発掘マイクハッセーまたはスチュアートクラークしかし、あなたはすべての時間の偉人の貢献を感じることができます。 時には彼らはIPLで自分自身を思い出させるようになるが、それでも彼らは置き換えることはできません。 ウォーン、マクグラス、ギルクリストは、一緒に遊んで見たことのために祝福しWaughs、ポン、Hyden、マーティンとランガーによってサポートされて感じてみましょう。

今後は、南アフリカ共和国は、常に非常に良いチームが残りますが、彼らは準決勝に勝ち、世界中でより一貫性のある必要があり、パキスタンは、インドの若い銃は、おそらく臨時の前任者の靴を埋めることは難しいでしょう、謎めいて鮮やかなままになります。 スリランカでは、工芸の芸術の見え隠れを表示するために継続すべきである。 しかし、我々はすべてのアウト支配的なチームを持つ前またはスティーブ·ウォーはかつてのように船長が、競争の欠如を訴える前にいつかのために待機する必要があります。

これに関連して - のは、アシフの帰って来ることを歓迎させ、彼は潜在的な地獄をたくさん持っている、のは、そのいくつかを見て、また新しいawatarでアンディの花を歓迎したいと考えてみましょう、右側には、長い間ダウンして善良な人たちを維持することはできません。

ルビーハッシュを作成する1つのライナー

によって2009年8月20日プラシャント · コメント
の下でファイルされる: 技術

私の古いプログラムのひとつを通過しながら、昨日、私はこれがいつか戻って私によって書かれました:

#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修正

によって2009年8月17日プラシャント · コメント
の下でファイルされる: 技術

あなたは、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と恐ろしい調査

によって2009年8月15日プラシャント · コメント
報告Filed under: その他

ここではgit(バージョン管理システム)と素晴らしい(ウィンドウマネージャ)コミュニティによる調査の2つのリンクがあります。 あなたはこれらのいずれかを使用する場合は、アンケートを埋めるためにいくつかの時間を取り出してください。 使用するソフトウェアに戻って貢献する最も簡単な方法だと考える。
ここのリンクは以下のとおりです。

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

素晴らしい- http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D

注 - (これらのページではなく、下部に発見 :) ) -
"あなたはクッキーを有効にしている場合は、いつでも部分的に満たされた調査書を提出し、後であなたの答えに戻り、それを後で完了することができます。"