民意調查顯示,平,PubSub的,pubsubhub,pubsubhubbub
的情況下,你是持懷疑態度,有一個在上面瘋狂的方法,在文章標題。 在高科技界,這是不可能,你沒有聽到pubsubhubbub的。 在快速的幾個月中,它一直談論的事情的前三名之一。 其他兩個分別是同態加密和谷歌波 [ 1 ]。 回來到目前的職位 - 在標題上註明你從其他人的內容如何。 以下細節變得更加清晰,如果你能想像博客的事情發生,即使它們概念並不局限於博客。
投票是指在客戶端要求服務器,如果新的東西拿出的情況下。 經常要求更新,將始終是一個投票過於頻繁或過於頻繁的問題,但作為一個讀者指出, 在這裡 ,一個偉大的 ,投票的事情是該服務器不維護狀態。
平是指在發表文章時,您(或您的軟件)也更新了一些流行(中央)更新服務的情況下。 這裡的一些背景。
接下來是PubSub的發布/訂閱,最早的球場之一,因為它是站在這裡,埃文亨肖-普拉斯和凱蘭埃利奧特-麥克雷(72張幻燈片,但值得經歷)。 引人注目的例子,他們給了反對 - 在某一特定日期,FriendFeed上抓取Flickr的290萬次,45754用戶得到最新的照片,其中6721的24小時訪問Flickr和可能潛在的“上傳照片。 請注意,他們提出的是不是一種新技術,為他們指出“革命性的新的20歲的技術”。 如果你的博客,然後使用XMPP的主要問題之一 - 存在數據的開銷,這可能是高達60-70%,可以減少很多。
pubsubhub代表發布訂閱樞紐和pubsubhubbub是一個協議,其中核心是pubsubhub的想法。 其中出版商(比如博客)更新樞紐(駐留“在雲的地方”,每個協議,可以推或拉,每協議,但在接下來的環節,可能是多個集線器,互相交談)鏈,樞紐到客戶端(比如讀者)它總是推模型。為pubsubhubbub起點, 這個頁面是好的,概述幻燈片都不錯。 曾經雄辯的阿尼爾·達什介紹, 這裡按鈕網頁。
另外兩個相關的讀取webhooks基本上是HTTP回調。 Github上使用它,所以貝寶付款IPN的異步通知,所以許多人。 相關的概念是rsscloud這又是PubSub的樞紐。 按照此鏈接查看詳情。
你可能想知道,在這裡寫這些點是什麼,有兩個1。 這些東西都是值得了解,微創至少2。 這個博客是通過Feedburner的,鏈接在這裡啟用pubsubhubbub通過appspot使用該WordPress中心現在啟用插件和飼料也是pubsubhubbub
-
[ 1 ]。 -很好的入門讀完全同態加密, 這是由Bruce Schneier的文章, 這個講座是或多或少谷歌波浪的唯一來源。
更新- 這個職位說明公共服務器回調的要求如何可以工作的桌面客戶端周圍使用XMPP網關(pubsubhubbub為)。
有點集會
看完這篇文章有關鎖空閒緩衝區,看到使用了CAS(比較和交換),我發布的彙編代碼,做同樣的感覺。 使用的情況下,那邊是寫一個本地方法,並調用它從Java(1.5,當在Java並發數據結構不存在或多或少)。 事不宜遲,我會釋放到你的代碼
。 首先是中科院和計算GCD的第二個是用歐幾里德算法(此人可以發現,在許多地方和教程以及)。
編譯和運行指示 gcc file_name.c ; ./a.out
比較和交換
#包括#包括 / /交換 - newvalue,comperand是舊的/預期值 / * *函數實際上做以下的事情 - 如果在* dest的值是等於oldvalue然後newvalue其他不改變它取代:做所有這些原子 * *有兩個返回值的選項 * 1.is初始值* dest的離開,調用fxn負擔比較與OLDVAL * 2。 在這裡做,並返回0或1,這應該是更有效 ** / / *後來改變成宏* / INT CAS(INT * dest中,oldvalue,INT newvalue){ 輸出(“(%D,為%d,%d個)”,* dest中,oldvalue,newValue)以; / * CAS(目的INT,INT oldvalue,newValue)以{* / / * CAS(INT目的,newvalue INT oldvalue){* / 結果= 1 ;/ * 1可以看出,CAS成功,0表示失敗* / / * BTW需要設置標誌重挫CC! * / __asm__ __ volatile__( “MOVL%2,%eax中\ N \ T” “MOVL%3,%ebx中\ N \ T” “MOVL%0%ECX \ N \ T” “鎖\ N \ T” \ N \ T“CMPXCHG%EBX(%ECX)”/ *應該鎖定在同一行* / “JZ \ N \ T” “MOVL $ 0%1 \ N \ T” “DONE:\ N \ T” “M”(DEST),“克”(結果) :“G”(oldvalue),“G”(newValue)以“M”(DEST) :“%eax中”,“%ebx中”,“ECX”,“CC” ); 輸出(“(%D,為%d,%d個)”,* dest中,oldvalue,newValue)以; 返回結果; } / *的TODO *寫在一個while循環以上fxn了另一個ASM fxn的不斷嘗試,除非它成功* / 詮釋的主要(){ A = 5,B = 6; INT * C =(INT *)malloc的(如sizeof(int)); * C = 6; / * C = 6 * / printf(“請為%d \ N”,CAS(C,B,B)); printf(“請為%d \ N”,CAS(C,B,A)); 輸出(“%d個\ N”,CAS(C,A,A)); printf(“請為%d \ N”,CAS(C,B,B)); * C = 6; / * C = 5; * / 輸出(“變化值* C至%d條\ n”,* C); printf(“請為%d \ N”,CAS(C,B,B)); printf(“請為%d \ N”,CAS(C,B,A)); 輸出(“%d個\ N”,CAS(C,A,A)); printf(“請為%d \ N”,CAS(C,A,B)); printf(“請為%d \ N”,CAS(C,B,A)); 返回0; }
格式化筆記 - 像WP語法高亮似乎增加 在年底,忽視這一點。
最大公約數
#包括GCD INT(INT A,INT B){ int結果; / *計算最大公約數使用Euclid的算法* / __asm__ __ volatile__(“MOVL%1,%eax中;” “MOVL%2,%ebx中;” “cmpl續完:$ 0,%ebx中;” “JE; 的“xorl%EDX,%edx中;” 的“idivl%EBX; “MOVL%%EBX,EAX%; “MOVL%%,%%ebx中EDX; “JMP續完; “DONE:MOVL%eax中,%0”:“克”(結果):(一)“G”,“G”(二) ); 返回結果; } 詮釋的主要(){ int的第一,第二; printf的(“請輸入兩個整數:”); scanf函數(“%d的%d”,與第一及第二); 輸出(“%d的%d的最大公約數是%d \ N”,第一,第二,GCD(第一,第二)); 返回0; }
紅寶石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(零)如果b.size == 1;} flattened_array = unescaped_array.flatten 哈希散列[* 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秒2009年07月10日,PDT”,“PAYMENT_STATUS =待定“] IRB(主):013:0> unescaped_array = unescaped_array.map {| X | B = x.split(“=”); b.push(零)如果b.size == 1;} => [“僑”,無],[的“mc_gross”,“10.00”],[“protection_eligibility”,“不合格”,“payer_id”,“U7PPJJ4TSJ47E”],[“稅收”,“0.00”] [“payment_date”,“9點45分30秒7月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日2009年07月10日,PDT“,”PAYMENT_STATUS“,”待定“] IRB(主):015:0> 哈希散列[* flattened_array] => {“稅”=>“0.00”,“PAYMENT_STATUS”=>“掛起”,“payer_id”=>“U7PPJJ4TSJ47E”,“mc_gross”=>“10.00”,“成功”=>“零”payment_date“= “九時45分三十秒07月10,2009 PDT”,“protection_eligibility”=>“不合格”}
順便說一句,*被稱為紅寶石的圖示操作員
從“對數組的哈希創建的另一種方法是使用注:
哈希= [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。 這裡是(壞)消息。 在谷歌酷哥再次改變證書。 哦,你問 - 如何知道? 簡單的小狗開始抱怨自己的證書時,嘗試使用的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
在此之後只是改變下面一行在你〜/。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
在YAML conf文件合併哈希
YAML是相當方便的編寫配置文件。 主要優點是,它像文本文件中讀取。 這個作品真的很好,如果你的配置文件是平坦的(不分層),並沒有重複。
如果您的配置文件中有重複,然後分離出這些元素和重用它們是有意義的。 我的意思是 - 讓我們說你的配置文件看起來像這樣:
發展: input_location:common_input output_location:dev_location 郵箱: smtp_server:您的服務器 登錄:your_login 密碼:top_secret 生產: input_location:common_input output_location:dev_location 郵箱: smtp_server:您的服務器 登錄:your_login 密碼:top_secret
假設上面的代碼在/ tmp / test.yml這裡你可以看到如何在Python和Ruby
$cat readyml.py
#!的/ usr / bin中/ env的蟒蛇 從pprint為PP進口pprint #Debian中需要安裝python-YAML 從的YAML進口負載,load_all,轉儲 哈希=負載(開放(“/ TMP / test.yml的”)) PP(哈希['發展'])
$ cat readyml.rb
#!/ USR / BIN / env的紅寶石 需要“PP” 哈希= YAML的::負載(的File.Open(“/ TMP / test.yml的”)。) PP哈希['發展']
這裡是一個方便的Ruby版本的班輪
$ 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_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_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_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或別的東西restucture比conf文件。 但是,這是你的電話了。
有點shell重定向
這裡是如何,我們通常做shell重定向
$ ./pgm.sh args >out.txt 2>err.txt
我想稍作修改並運行如下
$ ./pgm.sh args
的要求,輸出和錯誤,應該去一些內pgm.sh計算上ARGS名。 一個典型案例,可能是當日期是ARGS部分。 所以,你想輸出到去說/ /目錄/ pgm_out_YYYYMMDD.txt 1,
N>file.txt ,即與標準的重定向方式的問題,關聯到File.txt文件描述符N是,它僅適用於新的分叉過程,而不是當前進程。
所以
$ echo hi 1>out.txt ; echo hii 。將發送您好out.txt但將打印HII到stdout 2 $ echo hi 1>out.txt ; echo hii
這是其中exec來拯救我們的。 如果我們加上exec 1>somefile.txt然後輸出從腳本的其餘部分將去somefile.txt
$。/ test.sh將重定向嗨以及作為HII out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
同樣重定向標準輸出以及標準錯誤,我們會做這樣的事情
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
現在回來重定向從外殼內的一些文件的原始點,讓我們說方案計算中的一些變量OUTFILE文件名 ,我們可以有剛剛完成exec 1>$OUTFILE
能夠解決當前的問題。 但你可能想通過下面的示例實現“隨機存取”shell腳本文件。 從這裡的例子是
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
與評論,這個代碼是自明的。
-
1,它也可以通過$ ./pgm.sh args >pgm_out`date +%Y%m%d`但想法是生成此文件基礎上的一些程序本身的邏輯名稱。
2 1 1> out.txt是多餘的,但它在這裡澄清,我們重定向FD 1
要縮放或不縮放
雖然談論的數據庫水平分區 ,DHH的ROR名利建議,擴大東西可以等待,一定等到您的業務需求需要的點。 他的文章肯定是有意義的小設置說創業。 不是說,創業的,你應該寫的演示程序,但因為有一天,你應該專注於服務中只有24個小時,說比失去你的睡眠,擔心我的應用程序將如何處理負荷為13.142萬美元的1000個用戶在更多的履行方式用戶。 如果你的許多用戶,你就會知道如何調整。 對於初創企業可擴展性是一個很好的問題要解決,但有一個更好的問題,我的意思是任何啟動會喜歡碰上這個問題!
傑里米Zawodny在另一個相關的文章中寫道,你不應該取決於摩爾先生, 如果您有可擴展性問題。
因為這些物品是指以摩爾定律,我不能不寫,摩爾定律必須在計算機科學的最廣義的法律之一。 從他原來預測的晶體管密度,這部法律現在舉出任何你整個指數增長。



































