我的雲端生活網 - Life+

Saturday, August 30, 2008

抱歉!我並不希望你們假日來公司加班

親愛的夥伴,我最敬愛的摯友;我不知道你們多久會來看我的Blog;或是根本不會來,但是我還是想說一些心裡的話,今天我到公司看到大家認真加班,每個人不求加薪在星期假日到公司來趕工作,那種熱情;我本該由衷感激,不過;抱歉!我必須說:我並不希望你們假日來公司加班,因為加班只是效率不佳與無法準確估算時程最佳寫照,雖然;我不是你們每個人的主管,不過我必須跟你們說:這類的加班是錯誤的,不管對公司對個人來說,都損耗了最大的成本,而且;個人也不相信趕工出來的東西;品質能夠得到任何的保障

不過我應該更精確的說明我的想法,我所指的是沒有按照計畫行事而因為要交付客戶產品時程趕不及所需要的加班,這一連兩個禮拜,我看到這種狀況真的是搖頭連連,如果我自己知道;我所要購買的產品不是按部就班完成,而是透過加班的手段來達成目標,那我會毫不遲疑的退貨,理由無他;因為工作沒有按照例行計畫施行來完成,在每個流程裡的工作者都無法確實估算他的工作流程所需時間;且無法提出保證,這代表了生產品質也面臨相同的問題->不夠精確且無法提出證明,那麼;我們該為這種例外管理上的趕工喝采嗎? 值得商榷...真正有效的管理計畫,應該要包含很多變異的因素,所以計畫本身就要包含變化,才能將不確定的因素降到最低,如此才能使經營成本得到精確的估算,保障企業經營的穩定成長,如果我們遇到的每個問題都是不確定的,那我們要如何保障股東與客戶的權益,替他們提供確實可行的願景?

公司假日仍在公司的比率,我應該數一數二,且每天從事工作相關的事務直到am 1:00,但是我絕對不願意把絲毫的時間浪費在這種無法保證自己工作效率的事務上,我寧願假日到公司心情輕鬆自在的讀我想讀的技術文件,我情願熬夜去探討怎麼寫程式會比較好或怎麼把程式更有效率的完成且如何兼顧避免錯誤的發生,如果興趣就是programming,如果因為興趣而工作需要不停的工作,那是個人選擇,除此之外;抱歉!我只能說,這種補償過錯式的加班,不值得稱許

如果;你們認同我的想法,應該深自思考甚至開會檢討,這兩個星期我們是為什麼加班? 沒準時的理由是什麼? 該怎麼改善這些缺點? 是誰沒準時把東西交出來? 是誰說哪天要給而沒給? 是不是要提早先把工作完成? 我有沒有事先提醒我的夥伴該完成那些工作? 在遇到問題時我有積極向上反應嗎? 該不該獎勵 把準時 把品質 當成第一要務的夥伴? 這樣才真的有把問題解決,否則;我只能說要靠加班趕工來彌補事前無法按部就班所犯下的錯誤,我非常不能認同,尤其是;這本來是可以提前完成的事,為何要這樣浪費資源?

Wednesday, August 27, 2008

寫parser多簡單?

為了處理 Jabber/XMPP 的實作,勢必要考慮到 parser。

根據 Wikipedia 的說明,parser是指將一串輸入文字建立為 parse tree 的功能。根據文法,字串無法剖析為 parse tree 代表剖析錯誤。

用 Haskell 寫 parser 似乎比較簡單。 (?)

Parse tree

一般來說,(binary) tree 是指:

  1. 「空無」情況是 tree ,或是

  2. 以一項物件為基礎,擁有左子項和右子項,二個子項也是 tree 。

在 Haskell 定義 tree 資料結構為

data Tree = A | B | Bin (Tree, Tree)
deriving Show

看起來已經滿足一個 parse tree 的構成。

Parser

Parser 是一個函數,其輸入為一串資料,並輸出一些可能的 parse tree 和剩餘未 parsed 的資料。因此宣告 parser 的資料型態為:

type Parser a b = [a] -> [(b, [a])]

其中, a 是輸入資料的型態, b 是 parse tree 的型態。

根據 Parser a b 的型態規範,可以定義各式各樣的 parser 。例如:

永遠 parsed 的 parser 叫做 succeed

succeed :: Parser a ()
succeed xs = [((), xs)]

永遠 false-parsed 的 parser 叫做 fail

fail :: Parser a b
fail xs = []

讀取指定字元的 parser 叫做 lit (literal parser)

lit :: Eq a => a -> Parser a a
lit x (y:xs) | x == y = [(y, xs)]
lit x _ = []

執行情況:

lit 對字串 "Babcd" 要 parse 一個 `B' 字元,就得到一個 parsed `B',並剩下 "abcd" 字串。

lit 對字串 "Aabcd" 要 parse 一個 `B' 字元, parse 失敗,於是得到一個 empty list [] 代表 false-parsed 。

(待續)

Tuesday, August 26, 2008

關於雲端運算

這篇是談一個稱為雲端運算的東西如何不是雲端運算。因為反面的評價高,相關人事背景加以文字混淆,避開Google搜尋。

Wikipedia對於cloud computing有一番解釋。Cloud就是internet,cloud computing是將計算擺到internet。其中對於商務需求,有一些詞彙如 Platform as a Service (PaaS)、Software as a Service (SaaS)。張亞勤對雲端運算有更細的解釋

26日參與「sales force.com」公司所辦的「碼」,原本希望看到類似於「某個翻議比賽Google傳說」(1)(2)(3)之類的有趣討論,但後來是覺得失望的。

基本上他們公司是做Application Service Providing (ASP)的。這場event是商務軟體發表會,並且與技術思考的交涉不深,其中看到的概念也不新。不過,換一個角度看,我們想要的軟體元件重覆使用的功能他們已經做了,不過耗時九年。

以下是會議摘記:



開場:(業務經理)

網路服務趨勢

  1. 以消費者為導向的enterprise IT,
  2. Enterprise IT服務趨勢: 多用戶和租用,
    且提供服務租用的廠商必須投入成本維持satisfactary。
  3. 網路服務提供叢集的資料中心儲存大量用戶資料。

接下來的說明演示,在本公司商務平台上短短幾分鐘開發應用程式.,達成 (企業內)「無軟體」的商務系統。

說明與演示:(亞洲區業務經理)

本公司花費九年做出可訂製的商務平台,其中包擴了 PaaS和 SaaS 的特性。本平台將商務中許多重用的功能整合,使用戶能自己建置自己合用的系統。

在 CIO checklist 上,企業系統須符合許多準則,如安全、可擴展、可靠、可訂製、資料庫整合、前瞻性、和可用等等。傳統平台:大多只有基本服務,而需要的功能經常要重建。而本商務平台將基礎平台、安全、應用處理架構納入。

一般建製案例

  1. Disney米‧老鼠管理系統:在 .net 平台與本平台建製時間比為 3000 : 96 小時。
  2. EA公司 HR 系統:使用本平台建製,並獲得美國 innovative use of technology award。
  3. JP network 郵便局業務轉型。

演示:(亞洲區系統工程師)

以下為本平台,創新的「非」基礎架構 PaaS 的演示。

需求 1: system reliability

演示 1:本平台一天有超過一億的 transaction.(100M+)..225ms平均處理速度.. 1,100,000+用戶數。並符合 ISO, NCS2 認證。

需求 2:在系統上建置新的模塊數據來管理線上系統的一些資料。

演示 2:在 browser 可建立數據庫、切換介面語系,以及可應使用者熟習語系開發數據庫.。

(創造 project 管理) 建立物件→建立欄位→建立 page view →調整哪一些用戶可以看見物件或欄位→加入資源需求數量。

(根據亞洲區業務經理所提出的說明,資料庫實體檔案應該是以「物件導向資料庫」模型實作。)

好簡單,普通人也可以做?

此時聽眾回應:對這平台的期待更深,因為專案所需要的資料庫都是關聯性很複雜的。一但案子因為在此平台建置出了問題,而資料也都鎖在平台內,是否有風險?

(會後討論針對此問題有解答提出)

需求 3:現有數據庫的移轉。

演示 3:提供 script 將現有數據庫導入本平台

(PaaS 特色) 本平台提供 WebServices API、 Native ERP connectors、 Middleware connectors、 .net- or Java-based tools、 Mashups 和 Desktop Connectors。

需求 4: Logic (work flow) 的需求。

演示 4:本系統可訂製批準流程、自動化、 trigger rules 和欄位與欄位的互動變化等細節特色。

(Logic as a Service 特色) 本系統使用 Java-liked 的 apex 語言,讓使用者能夠撰寫企業需要的邏輯。邏輯建置的方式有:

  1. 宣示性邏輯(只要點擊)
  2. 公式基礎邏輯
  3. apex code

需求 5:UI 的需求。

演示: 5:本平台有標準UI。此外在手機上也提供比較簡單的使用者介面。

此外提出 Vi編su碼al編Fo碼rce 的功能,使平台的整個頁面都能更改.。成功案例有 Cisco、Ashiland 和 Coda 的案例。

除了上述演示之外,

應用程式交換服務: Ap編pe碼xch編an碼ge 平台讓用戶在本平台做的東西可以賣給別人。在此交流平台上可以 "test drive" 也可以 "get it now"。案例:Chevron 用 Ap編pe碼xch編an碼ge 管理內部費用。

本平台也提供 dashboard 功能顯示各種圖形報表。

(Desktop as a Service) 本平台提供 IDE 供桌面開發使用。

結論:(亞洲區業務經理)

Cloud Computing 概念是指系統可在線上使用並與其他系統相連接。企業應知道如何使用公用系統共享合作夥伴與共享用戶。

答問與討論:

1. 資料庫變更欄位所造成的改變是否都正確?

答:線上測試帳號去做某種程度的邏輯測試,滿意了再採購本平台。

(某公司工程師 Danis 的答案) (1) 除了普通邏輯之外,還可以寫一些檢核規則。

(2) 使用 sandbox 測試開發案,完成之後再 deploy 。

2. 設計上與技術圖面上的管理?

答:本平台提供 document 與 version 管理。

此外,主要是跟隨 80-20 原則,本平台希望幫助解決大部份該解決的問題,使企業用互能夠有較多心力專注處理 20% 非平台能夠解決的問題。



以上是會議內容摘要。接下來是我的看法:

  1. 技術人員們,當公司說要建個 cloud computing 這東西,你覺得是什麼?實際該做哪些東西?

  2. 這家公司的這個平台概念不新。 Meta-system (即產生系統的系統) 的概念非常容易由技術圈萌生。做 compiler 的會漸漸做出 meta-compiler ,做 SOHO 的人會漸漸將程式整理成可以組裝的軟體零件。普通寫程式的用手刻程式,厲害的程式師則用少許程式產生大量程式。

  3. 談到正題, cloud computing 與雲端計算。在這次討論中,我看不到那片雲在哪裏。所以第 1 項我感覺不到做為一個 cloud computing 的東西,該有哪些實作。而我說感覺不到那片雲的意思,是因為這個平台只將用戶的軟體與資料搬入網路,卻還談不到任何 cloud computing 。 Cloud computing 的涵義,我覺得是 computing 的效能與產出能夠由這片 cloud 受惠。但這個平台還只是將自己的軟體平台搬上網路,享有一些資料存取的透明度 (storage transparency) 而已。但是產能是否較強呢?在 marketing 層面還有討論空間。但在純計算部份,看不到什麼好東西。

  4. 當場有個關於資料庫組織的討論,對研發者而言是有趣的事情。我們知道 relational database 有很多講究的地方,包括 functional dependency, enterty integrity 、 reference integrity 和表格的劃分。若由網頁介面提供用戶可以自行定義表格,或許表示在用戶的 view 中不必考慮這些事情。但資料庫組織改動之後,要怎麼保持資料庫與改動前的內容一致,其中的 reference 轉換可能很複雜。不過,從發言人的解釋,可以聽出他們使用的資料模型是物件導向資料庫模型,或許在物件的關係與 reference 比較簡單。這方面是可以思考的要點。當你要做個 middleware 時,在 storage transparency 方面要提供某程度的保證。裏頭要談的是一些數學與邏輯上可證明的穩固基礎。

Monday, August 25, 2008

msn 疑似有一個bug

因為自己在摸索msn protocol,發現msn 在做聯絡人的地方有一個bug,當第一次把某個人加入聯絡人(且對方也核准)後,雙方如果都刪除彼此(沒封鎖聯絡人,但同時刪除hotmail聯絡人);當任一方要再訂閱對方,而有拒絕過一次後,對方從此不會再收到訂閱的通知,但自己卻可以訂閱對方為聯絡人且看到對方的線上資訊,這情況跟gtalk很類似,看來;大家在實作這個程序時都留下了一些缺憾

ps.這問題並不是msn client的bug,因為msn server確實沒有傳送ADL 指令;通知對方有人請求加入聯絡人

另外; msn 裡的顯示歌曲資訊會佔用不必要頻寬,msn client勾選這個項目後,似乎每幾秒就會送出UBX 指令給所有的聯絡人,不知道當一個團體很大(數千人,而且每個人都開啟這個功能,且彼此為聯絡人)又同在相同網域下的時候,是不是有可能造成網路嚴重的負擔

Tuesday, August 19, 2008

msnp15 認證過程(I)

使用別人開發好的msn sdk來開發程式;真的能夠滿足你對技術的慾望嗎?以下為msn protocol v15的認證過程,msnp15大致上延續前一版的協定,但是在認證的部份改了,目前msn server 已支援msnp16,而現階段最新的msn client (msn v8.1)還在使用msnp15,要到msn v9才會開始全面支援msnp16
直接從msn protocol著手的主要理由是~這樣,才能將msn 移植到非win32的平台上,否則;微軟本身也有釋出msn sdk,它的缺點是;只能依附在有安裝msn client 的win32上,就這一點來說;msn 的政策還相當封閉,因為每次protocol升級;認證的部份幾乎都有更動,這也是從protocol著手來應用msn 最大的麻煩,不過從追蹤 撰寫msn protocol,可以學到不少東西可說是額外的收穫,msn protocol在技術上跟xmpp真的很大的落差,msn protocol顯得格外凌亂設計不良,既不結構化也談不上功能上的彈性,看起來像是非資訊背景的工程師做出來的系統,我相信當msn與yahoo在談im整合時一定相互埋怨過對方的protocol設計怎麼如此草率,這恰好凸顯了xmpp protocol 的優勢...

207.46.110.86:1863
c2s->[client to server]
s2c->[server to client]

c2s->VER 1 MSNP15 CVR0
s2c->VER 1 MSNP15

c2s->CVR 2 0x0404 winnt 5.2 i386 MSNMSGR 8.1.0178 MSFT luke_shei@hotmail.com
s2c->CVR 2 8.1.0178 8.1.0178 8.1.0178 http://msgruser.dlservice.microsoft.com/download/1/C/F/1CF776CC-90D6-4497-B079-402BA9DB8BE4/Install_Messenger.exe http://get.live.com/tc

c2s->USR 3 SSO I luke_shei@hotmail.com
s2c->GCF 0 6713
s2c->
<Policies>(省略...)</Policies>USR 3 SSO S MBI_KEY_OLD ZUzrcaa4fRluSqjOaLzc9ExfHQaoiZB4MxTjfRcmohTooJuVilSvIJ7jSy+DKBeO

此時需要使用ssl 連接 https://login.live.com/RST.srf , 並且送出認證資訊
<?xml version="1.0" encoding="UTF-8" ?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wssc="http://schemas.xmlsoap.org/ws/2004/04/sc" xmlns:wst="http://schemas.xmlsoap.org/ws/2004/04/trust">
<Header>
<ps:AuthInfo xmlns:ps="http://schemas.microsoft.com/Passport/SoapServices/PPCRL" Id="PPAuthInfo">
<ps:HostingApp>{7108E71A-9926-4FCB-BCC9-9A9D3F32E423}</ps:HostingApp>
<ps:BinaryVersion>4</ps:BinaryVersion>
<ps:UIVersion>1</ps:UIVersion>
<ps:Cookies />
<ps:RequestParams>AQAAAAIAAABsYwQAAAAyMDUy</ps:RequestParams>
</ps:AuthInfo>
<wsse:Security>
<wsse:UsernameToken Id="user">
<wsse:Username>帳號@hotmail.com</wsse:Username>
<wsse:Password>密碼</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</Header>
<Body>
<ps:RequestMultipleSecurityTokens xmlns:ps="http://schemas.microsoft.com/Passport/SoapServices/PPCRL" Id="RSTS">
<wst:RequestSecurityToken Id="RST0">
<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>
<wsp:AppliesTo>
<wsa:EndpointReference>
<wsa:Address>http://Passport.NET/tb</wsa:Address>
</wsa:EndpointReference>
</wsp:AppliesTo>
</wst:RequestSecurityToken>
<wst:RequestSecurityToken Id="RST1">
<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>
<wsp:AppliesTo>
<wsa:EndpointReference>
<wsa:Address>messengerclear.live.com</wsa:Address>
</wsa:EndpointReference>
</wsp:AppliesTo>
<wsse:PolicyReference URI="MBI_KEY_OLD" />
</wst:RequestSecurityToken>
<wst:RequestSecurityToken Id="RST2">
<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>
<wsp:AppliesTo>
<wsa:EndpointReference>
<wsa:Address>messenger.msn.com</wsa:Address>
</wsa:EndpointReference>
</wsp:AppliesTo>
<wsse:PolicyReference URI="MBI" />
</wst:RequestSecurityToken>
</ps:RequestMultipleSecurityTokens>
</Body>
</Envelope>

https://login.live.com/RST.srf 回應

<?xml version="1.0" encoding="utf-8" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<psf:pp xmlns:psf="http://schemas.microsoft.com/Passport/SoapServices/SOAPFault">
<psf:serverVersion>1</psf:serverVersion>
<psf:PUID>0001613089FFCD2E</psf:PUID>
<psf:configVersion>3.100.2199.0</psf:configVersion>
<psf:uiVersion>3.0.869.0</psf:uiVersion>
<psf:authstate>0x48803</psf:authstate>
<psf:reqstatus>0x0</psf:reqstatus>
<psf:serverInfo Path="Live1" RollingUpgradeState="ExclusiveNew" LocVersion="0" ServerTime="2008-08-20T06:17:36Z">BAYIDSLGN1E20 2008.07.30.00.23.50</psf:serverInfo>
<psf:cookies/>
<psf:browserCookies>
<psf:browserCookie Name="MH" URL="http://www.msn.com">MH=MSFT; path=/; domain=.msn.com; expires=Wed, 30-Dec-2037 16:00:00 GMT</psf:browserCookie>
<psf:browserCookie Name="MHW" URL="http://www.msn.com">MHW=; path=/; domain=.msn.com; expires=Thu, 30-Oct-1980 16:00:00 GMT</psf:browserCookie>
<psf:browserCookie Name="MH" URL="http://www.live.com">MH=MSFT; path=/; domain=.live.com; expires=Wed, 30-Dec-2037 16:00:00 GMT</psf:browserCookie>
<psf:browserCookie Name="MHW" URL="http://www.live.com">MHW=; path=/; domain=.live.com; expires=Thu, 30-Oct-1980 16:00:00 GMT</psf:browserCookie>
</psf:browserCookies>
<psf:credProperties>
<psf:credProperty Name="MainBrandID">MSFT</psf:credProperty>
<psf:credProperty Name="BrandIDList">
</psf:credProperty>
<psf:credProperty Name="IsWinLiveUser">true</psf:credProperty>
<psf:credProperty Name="CID">15797708e38d3864</psf:credProperty>
<psf:credProperty Name="AuthMembername">帳號@hotmail.com</psf:credProperty>
</psf:credProperties>
<psf:extProperties>
<psf:extProperty Name="ANON" Expiry="Sun, 08-Mar-2009 13:17:36 GMT" Domains="" IgnoreRememberMe="false">A=604A1CF7C863B25590E98D87FFFFFFFF&E=751&W=1</psf:extProperty>
<psf:extProperty Name="NAP" Expiry="Fri, 28-Nov-2008 14:17:36 GMT" Domains="" IgnoreRememberMe="false">V=1.6&E=6f7&C=D3sTmCI3EaEA1q-Ugji4rYA5G76akrqFloSZtTfKwkT6_ToKa0MUog&W=1</psf:extProperty>
<psf:extProperty Name="LastUsedCredType">1</psf:extProperty>
</psf:extProperties>
<psf:response/>
</psf:pp>
</S:Header>
<S:Body>
<wst:RequestSecurityTokenResponseCollection xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wst="http://schemas.xmlsoap.org/ws/2004/04/trust" xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:wsp="http://schemas.xmlsoap.org/ws/2002/12/policy" xmlns:psf="http://schemas.microsoft.com/Passport/SoapServices/SOAPFault">
<wst:RequestSecurityTokenResponse>
<wst:TokenType>urn:passport:legacy</wst:TokenType>
<wsp:AppliesTo xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
<wsa:EndpointReference>
<wsa:Address>http://Passport.NET/tb</wsa:Address>
</wsa:EndpointReference>
</wsp:AppliesTo>
<wst:LifeTime>
<wsu:Created>2008-08-20T06:17:36Z</wsu:Created>
<wsu:Expires>2008-08-21T06:17:36Z</wsu:Expires>
</wst:LifeTime>
<wst:RequestedSecurityToken>
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Id="BinaryDAToken0" Type="http://www.w3.org/2001/04/xmlenc#Element">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc">
</EncryptionMethod>
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:KeyName>http://Passport.NET/STS</ds:KeyName>
</ds:KeyInfo>
<CipherData>
<CipherValue>AXFOGn0CJ316qWBnizuzibVEto6s2I2AlZRmD69bPE+dfzAzqHWA3rjheo3p+wy46qtVQJXDw61/V9tVQZ3yFuQ2vuq4EWWaH5wB8RV6Bw5EVxJvlViM4FqNf7a/DaBSUCJqoPCGXxGRvXT5VYJDmMt/KAutuoO3ULh8r1aQYDs4JJQdFzHdst95oRQkeC4b1vzzNh4mRT/3y1C6wnplhlVhArpSRIf5yI5YYAz6dq0w2jzpfUZ/dJmz/vzfEsS3jV7eO0xptvy9X7wA/YM4U1r+8cIITG7DgfU85GhJmjh5P0LbvcZ6p39R/hNxUWJrHw5WU91qdVui0uMSOpQYloZxbtHtNWiQZ0Q2y+/YyGmX7THQdfyPqMSC7wl7gl2M+wwCrPzpUgpu2hRB89kUyARUz5O849F9uBy/DzV2u+l2oNmIzcOjhNDFqf9M003tJqV+ND7DA0KBJD/wQvHXP8M0OXRuTAxA4+z5bnqa858VgqwDrg==</CipherValue>
</CipherData>
</EncryptedData>
</wst:RequestedSecurityToken>
<wst:RequestedTokenReference>
<wsse:KeyIdentifier ValueType="urn:passport">
</wsse:KeyIdentifier>
<wsse:Reference URI="#BinaryDAToken0">
</wsse:Reference>
</wst:RequestedTokenReference>
<wst:RequestedProofToken>
<wst:BinarySecret>BZP+6JadxbOLyXqPL5Ryf1hHNpI9bYtU</wst:BinarySecret>
</wst:RequestedProofToken>
</wst:RequestSecurityTokenResponse>
<wst:RequestSecurityTokenResponse>
<wst:TokenType>urn:passport:compact</wst:TokenType>
<wsp:AppliesTo xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
<wsa:EndpointReference>
<wsa:Address>messengerclear.live.com</wsa:Address>
</wsa:EndpointReference>
</wsp:AppliesTo>
<wst:LifeTime>
<wsu:Created>2008-08-20T06:17:36Z</wsu:Created>
<wsu:Expires>2008-08-20T14:17:36Z</wsu:Expires>
</wst:LifeTime>
<wst:RequestedSecurityToken>

<wsse:BinarySecurityToken Id="Compact1">
t=EwBgAswbAQAUs1/VcBU2sH7mwYy3BysWZ71CRDGAAPyC8gbVv65DNR9B35NbtWgaPfSxjcx8TQRH7dSQkHl+pf46GQS1pukb1fNuh5NtW2fsIGDXCyNhyMBi4/BKhzeE66MGXBsfgdWzDzSj/SGnQYnZtvKLdBi9ihv1hR+q018ePodvV4x3Vlcet38/CE1yPd9t8Z/yhNyCBcufTbMVA2YAAAjOONh/nTbDBLABYnUuPlUVuIv9ImLzUxYuvlSzHsgEAxTJkrpnHNmJv4IS0lUGIO9+yvfEbAl46rS1vpr0MHN8uL4JIE7XkS7MHhElesCRHvMpWp/h2O9clTrk9P5krslyhepE45ZCWYyodEaCEPsD5ZEauYe4M8wf3Pm9mrF+vr0RiKwATDDz4Ow1QQ+zz/HS7XaKohPEsCQDLf5rnC+nsQha9053Wbsq6qrbTtAh5DHviCv2KjHVHykPufhlr1R/FTb4Pu/ufe3dt8r3pQseGcm0H16bYJBqlxqyG7ACIKha16xFYCltbENmNas4JGZvKWZMZsPL9XWiRwzwxg2kDUROlAZeW2AA2cBi+M8xjpZwpoktR5JbnZxu9qMta9s8576i/3plIxLxvvutva5FM/favzAauwbSZUX3virKDYKe569LyZxurrAWEmnPWNzj7ORajtvT1CXWcVwHMT+eu5oqW8PhPrKgIeCad5bRjnzyaG3WGNczkOdTcDJ8ybVCOztqrA90vqvSHS1qw1FL6JiJK0hIWHccwXrDoN7YGsnhtxhCFMLj2IQlD5KtA/SMsBJlSCtQKRa+xAE=&p=
</wsse:BinarySecurityToken>

</wst:RequestedSecurityToken>
<wst:RequestedTokenReference>
<wsse:KeyIdentifier ValueType="urn:passport:compact">
</wsse:KeyIdentifier>
<wsse:Reference URI="#Compact1">
</wsse:Reference>
</wst:RequestedTokenReference>
<wst:RequestedProofToken>

<wst:BinarySecret>
YdSj/GIkHNjeRoClluok9J4bYNsWVEea
</wst:BinarySecret>

</wst:RequestedProofToken>
</wst:RequestSecurityTokenResponse>
<wst:RequestSecurityTokenResponse>
<wst:TokenType>urn:passport:compact</wst:TokenType>
<wsp:AppliesTo xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing">
<wsa:EndpointReference>
<wsa:Address>messenger.msn.com</wsa:Address>
</wsa:EndpointReference>
</wsp:AppliesTo>
<wst:LifeTime>
<wsu:Created>2008-08-20T06:17:36Z</wsu:Created>
<wsu:Expires>2008-08-20T14:17:36Z</wsu:Expires>
</wst:LifeTime>
<wst:RequestedSecurityToken>
<wsse:BinarySecurityToken Id="Compact2">t=EwDYAfsBAAAUAHmHi/fIK5MsbQWTulxz7EiCF2+AAFyqVQompSp1Zu7W3g7T5yMceStaxs7w5I8wsiIeECJSj2+j7V3JorQeMfR1Y5Z4Azu5z+VHsRDIPrBh7FUgleNZF9SMSrhYfCiEjstd2OWD2RIWzLFmoLdZlDmhAZp1SLtJlf52O5rK6LFwTQrBJCgwYcLrX2o9l1OnwUuIMe0sA2YAAAheN9vDJtdLsigBd3QSSEiD2MhG5sHTnl8nC9xg4TMGF1+p3MomH45rnQPiQrGsgSxbymrtvO3gDDe0GSMIfLCDxJikDWVeUGeqIfrYC/KMEBbKcK24O3H+BkiWNk8PinF8T1FNAv7kK4f/fO6/UucbIyVyZC81b8/ahFjxJ0Z8tYGF3TrAGJzvqWIrgK7Hr3EC2GaagbHs6i3c3u9aNxBWqL+2x2c4csFR79lPx+cyS4DvYY0AMf6DNt03Gy6NiG51oS5At2QMyP7xT+doH2SeDeVGM3fVCa3jL0JlkOZbDy6SxDMANfaPPfOQYEadQsubPyZBe7UDCwmN6X0iio4Jy1DJyWpbROKF+lPax8ICEtB2ZAYw8PUTkym/TSCmEwX54A/LKFa6mwvA33tr4hYIv/hEAQ==&p=</wsse:BinarySecurityToken>
</wst:RequestedSecurityToken>
<wst:RequestedTokenReference>
<wsse:KeyIdentifier ValueType="urn:passport:compact">
</wsse:KeyIdentifier>
<wsse:Reference URI="#Compact2">
</wsse:Reference>
</wst:RequestedTokenReference>
</wst:RequestSecurityTokenResponse>
</wst:RequestSecurityTokenResponseCollection>
</S:Body>
</S:Envelope>

====

BinarySecurityToken-> t=EwBgAswbAQAUs1/VcBU2sH7mwYy3BysWZ71CRDGAAPyC8gbVv65DNR9B35NbtWgaPfSxjcx8TQRH7dSQkHl+pf46GQS1pukb1fNuh5NtW2fsIGDXCyNhyMBi4/BKhzeE66MGXBsfgdWzDzSj/SGnQYnZtvKLdBi9ihv1hR+q018ePodvV4x3Vlcet38/CE1yPd9t8Z/yhNyCBcufTbMVA2YAAAjOONh/nTbDBLABYnUuPlUVuIv9ImLzUxYuvlSzHsgEAxTJkrpnHNmJv4IS0lUGIO9+yvfEbAl46rS1vpr0MHN8uL4JIE7XkS7MHhElesCRHvMpWp/h2O9clTrk9P5krslyhepE45ZCWYyodEaCEPsD5ZEauYe4M8wf3Pm9mrF+vr0RiKwATDDz4Ow1QQ+zz/HS7XaKohPEsCQDLf5rnC+nsQha9053Wbsq6qrbTtAh5DHviCv2KjHVHykPufhlr1R/FTb4Pu/ufe3dt8r3pQseGcm0H16bYJBqlxqyG7ACIKha16xFYCltbENmNas4JGZvKWZMZsPL9XWiRwzwxg2kDUROlAZeW2AA2cBi+M8xjpZwpoktR5JbnZxu9qMta9s8576i/3plIxLxvvutva5FM/favzAauwbSZUX3virKDYKe569LyZxurrAWEmnPWNzj7ORajtvT1CXWcVwHMT+eu5oqW8PhPrKgIeCad5bRjnzyaG3WGNczkOdTcDJ8ybVCOztqrA90vqvSHS1qw1FL6JiJK0hIWHccwXrDoN7YGsnhtxhCFMLj2IQlD5KtA/SMsBJlSCtQKRa+xAE=&p=
--
nonce-> ZUzrcaa4fRluSqjOaLzc9ExfHQaoiZB4MxTjfRcmohTooJuVilSvIJ7jSy+DKBeO
--
BinarySecret-> YdSj/GIkHNjeRoClluok9J4bYNsWVEea
--
此處的程式下一篇補上,將上述資訊做hash 3des 的加密...程式後,產生
HAAAAAEAAAADZgAABIAAAAgAAAAUAAAASAAAAAAAAAAAAAAAu1u3n7shOrO0b1zrRTR/+hPQ97ucXZ/4vd6sPYkgZjyEUBE+nF4Xe+y1WuNzKxLSIG9AcWpKbu0JYUa06PuyvvLCTtjeqipeyISPnyHncMivinI/LcZmGmhOpfo=
而這個值是下一個程序 USR 4 SSO S t=...&p=xxx 中的p值,而t值為BinarySecurityToken

====

c2s->USR 4 SSO S t=EwBgAswbAQAUs1/VcBU2sH7mwYy3BysWZ71CRDGAAPyC8gbVv65DNR9B35NbtWgaPfSxjcx8TQRH7dSQkHl+pf46GQS1pukb1fNuh5NtW2fsIGDXCyNhyMBi4/BKhzeE66MGXBsfgdWzDzSj/SGnQYnZtvKLdBi9ihv1hR+q018ePodvV4x3Vlcet38/CE1yPd9t8Z/yhNyCBcufTbMVA2YAAAjOONh/nTbDBLABYnUuPlUVuIv9ImLzUxYuvlSzHsgEAxTJkrpnHNmJv4IS0lUGIO9+yvfEbAl46rS1vpr0MHN8uL4JIE7XkS7MHhElesCRHvMpWp/h2O9clTrk9P5krslyhepE45ZCWYyodEaCEPsD5ZEauYe4M8wf3Pm9mrF+vr0RiKwATDDz4Ow1QQ+zz/HS7XaKohPEsCQDLf5rnC+nsQha9053Wbsq6qrbTtAh5DHviCv2KjHVHykPufhlr1R/FTb4Pu/ufe3dt8r3pQseGcm0H16bYJBqlxqyG7ACIKha16xFYCltbENmNas4JGZvKWZMZsPL9XWiRwzwxg2kDUROlAZeW2AA2cBi+M8xjpZwpoktR5JbnZxu9qMta9s8576i/3plIxLxvvutva5FM/favzAauwbSZUX3virKDYKe569LyZxurrAWEmnPWNzj7ORajtvT1CXWcVwHMT+eu5oqW8PhPrKgIeCad5bRjnzyaG3WGNczkOdTcDJ8ybVCOztqrA90vqvSHS1qw1FL6JiJK0hIWHccwXrDoN7YGsnhtxhCFMLj2IQlD5KtA/SMsBJlSCtQKRa+xAE=&p= HAAAAAEAAAADZgAABIAAAAgAAAAUAAAASAAAAAAAAAAAAAAAu1u3n7shOrO0b1zrRTR/+hPQ97ucXZ/4vd6sPYkgZjyEUBE+nF4Xe+y1WuNzKxLSIG9AcWpKbu0JYUa06PuyvvLCTtjeqipeyISPnyHncMivinI/LcZmGmhOpfo=
s2c->USR 4 OK luke_shei@hotmail.com 1 0
SBS 0 null
s2c->MSG Hotmail Hotmail 1234
MIME-Version: 1.0
Content-Type: text/x-msmsgsprofile; charset=UTF-8
LoginTime: 1219213056
EmailEnabled: 1
MemberIdHigh: 90416
MemberIdLow: -1979724498
lang_preference: 1028
preferredEmail:
country: TW
PostalCode:
Gender:
Kid: 0
Age:
BDayPre:
Birthday:
Wallet:
Flags: 1610613827
sid: 72652
MSPAuth: EwBgAswbAQAUs1/VcBU2sH7mwYy3BysWZ71CRDGAAPyC8gbVv65DNR9B35NbtWgaPfSxjcx8TQRH7dSQkHl+pf46GQS1pukb1fNuh5NtW2fsIGDXCyNhyMBi4/BKhzeE66MGXBsfgdWzDzSj/SGnQYnZtvKLdBi9ihv1hR+q018ePodvV4x3Vlcet38/CE1yPd9t8Z/yhNyCBcufTbMVA2YAAAjOONh/nTbDBLABYnUuPlUVuIv9ImLzUxYuvlSzHsgEAxTJkrpnHNmJv4IS0lUGIO9+yvfEbAl46rS1vpr0MHN8uL4JIE7XkS7MHhElesCRHvMpWp/h2O9clTrk9P5krslyhepE45ZCWYyodEaCEPsD5ZEauYe4M8wf3Pm9mrF+vr0RiKwATDDz4Ow1QQ+zz/HS7XaKohPEsCQDLf5rnC+nsQha9053Wbsq6qrbTtAh5DHviCv2KjHVHykPufhlr1R/FTb4Pu/ufe3dt8r3pQseGcm0H16bYJBqlxqyG7ACIKha16xFYCltbENmNas4JGZvKWZMZsPL9XWiRwzwxg2kDUROlAZeW2AA2cBi+M8xjpZwpoktR5JbnZxu9qMta9s8576i/3plIxLxvvutva5FM/favzAauwbSZUX3virKDYKe569LyZxurrAWEmnPWNzj7ORajtvT1CXWcVwHMT+eu5oqW8PhPrKgIeCad5bRjnzyaG3WGNczkOdTcDJ8ybVCOztqrA90vqvSHS1qw1FL6JiJK0hIWHccwXrDoN7YGsnhtxhCFMLj2IQlD5KtA/SMsBJlSCtQKRa+xAE=&p=
ClientIP: 59.120.234.89
ClientPort: 6413
ABCHMigrated: 1
Nickname: luke
MPOPEnabled: 0

Friday, August 1, 2008

[微程式-技術研討會] 8月研討會 - 主講人Lucy - 社群網站相關分析簡報

一.orkut partII
http://tcmail.program.com.tw/image/Orkut_Lucy.pdf

二.從社群網站談SSO與RFID 的集合
http://tcmail.program.com.tw/image/community_website.pdf

[微程式-技術研討會] 8月研討會 - Bidirectional-streams Over Synchronous HTTP (BOSH) - 主講人:znul

Bidirectional-streams Over Synchronous HTTP (BOSH)

網址: http://www.xmpp.org/extensions/xep-0124.html

一何謂bosh?
雙向性的Http串流,利用http protocol post transport xmpp stream

二why http protocol?
一般防火牆都會允許tcp 80 prot 的對外窗口,某些少數的防火牆甚至允許任何的通訊協定通過這個port,
但是更多的proxy,filter 會確認通過的串流是否為http

三技術名詞
1pull: client use http request from server,是一種以網路為基礎的溝通方法
2 push: server response data to client,是一種以網路為基礎的溝通方法,server主動將資料傳給client

四compare other bidirectional http-base transport protocol
1http polling :週期性的詢問server是否有資料
2 ajax(Asynchronous JavaScript and XML)
3 comet :是長時間連線要求的web 應用的模式,server在有資料要傳送時透過此連線push資料至用戶端.
利用ajax with long polling or iframe or htmlfile activex 的技術去探測server是否有新的訊息
4bosh:採用多個http request / response 對,非polling,自稱可高效率低延遲的傳輸訊息及節省網路頻寬

五要求
1相容於受約束的執行環境(如行動電話或流覽器的用戶端)**.
2可以讓流覽器的用戶端建立跨網域的連接*
3相容部份緩衝的http代理回應*
4有效率的通過http回應時間限制的代理*
5完全相容http 1.0*
6相容受限的網路連線(如防火牆.代理.閘道)
7容錯性
8擴展性
9使用的頻寬遠低於輪詢機制的protocols
10回應的時間遠低於輪詢機制的protocols
11支援輪詢
12按順序傳送資料
13防止未經許可的使用者插入http request
14防止拒絕服務攻擊15多工的資料串流
*為comet無法做到的

六架構 Server [unwrapped data streams] Connection Manager (specialized HTTP server) BOSH [HTTP + <body/> wrapper] HTTP Client

六bosh原理(connection manager以下稱cm)
Client 傳送一個http請求,cm並不馬上回應,直到有資料要傳回cleint端,client端收到回應後,馬上又發送另一個
http請求,以確保cm隨時保持一個請求的連線,使之能push資料給client
在cm hold請求的同時,client端又有資料要傳送,此時需要發起第二個http請求,傳送資料,但一般的http client
並不支援管線(在同個連線發起多個請求),所以必須建立第二個http 連線發起第二個請求,此時cm不管是否
有無資料必須回應第一個http請求給client端,cm這麼做可確保client端有資料需傳送時可隨時發起第二個
請求(client不能同時開啟兩個以上的 http連線,不然就是要等cm回應第一個請求)
在網路環境良好的情況下,client可使用http 1.1,所有的請求是透過兩個持續的http連線,當cm從其中一個
連線Push資料時,client端也可透過另一個連線push資料(所以回應速度會跟一般的TCP連線差不多),要注意
的是,這兩個連線的角色,client每傳送一資料,就互換一次
若雙方在特定的時間內都沒有資料傳輸,那麼 cm傳回一個空值的回應,此時將觸發client發起另一個新的
請求,Cm藉此判斷在特定時間內連線是否中斷,這種交流就像"keep-alive" or "ping"等方法的實踐,因為BOSH
不涉及Polling,所以頻寬的消耗不會大於一般的TCP連線
在通常的情況下,數据可立即推送,不過,若其中一個端點剛推送了資料,那麼必須等待一個網路往返的時間
才可再次推送資料,若client端支援管線,那麼多個連線並行是可行的,因此client可隨時傳送資料,也可確保cm
隨時hold足夠的請求,若cm的請求連線集區夠大的話,client也不用對返回的空值回應,立即發送一個空的請求,
而是等到有資料時再發送請求,因此若client與流量是均衡的話,就像是使用一個標準的TCP連線
Cm的每個資料推送,都是一個標準的http response,因此不像commet技術,bosh可以2,3,4,5


九.參考文件
<a href="http://www.xmpp.org/extensions/xep-0124.html">http://www.xmpp.org/extensions/xep-0124.html</a>
<a href="http://www.xmpp.org/extensions/xep-0025.html">http://www.xmpp.org/extensions/xep-0025.html</a>
<a href="http://en.wikipedia.org/wiki/Comet_(programming)">http://en.wikipedia.org/wiki/Comet_(programming)</a>
<a href="http://www.ibm.com/developerworks/cn/web/wa-lo-comet/">http://www.ibm.com/developerworks/cn/web/wa-lo-comet/</a>

Blog Archive