Time of Update: 2018-12-06
開發是在windows平台下進行的,利用libjingle完成一個準系統的用戶端。 暫時連結Gtalk的伺服器,以後會在本地搭建伺服器。 libjingle官方: https://code.google.com/p/libjingle/1. 編譯lib 首先用libjingle內建的編譯環境產生lib和samples。 安裝包裡德readme寫的很清楚了,按照上面的步驟一步一步來就是了。
Time of Update: 2018-12-06
如何才能確定http實體的檔案長度呢?大致有下面四種情況: * 任何不含有訊息體的訊息(如1XXX、204、304等響應訊息和任何頭(HEAD,首部)請求的響應訊息),總是由一個空行(CLRF)結束。 * 如果訊息使用媒體類型“multipart/byteranges”,並且transfer-length 沒有另外指定,那麼這種自定界(self-delimiting)媒體類型定義transfer-length 。除非寄件者知道接收者能夠解析該類型,否則不能使用該類型。 *
Time of Update: 2018-12-06
看libjingle庫的過程中發現,它用了TLS機制來實現線程對象和線程的關聯。這裡簡單記述下TLS的一些細節。 TLS(thread local sttorage), 首先看圖,這是從核心編程裡摳出來的。
Time of Update: 2018-12-06
先從ThreadManager類說起: 這是一個全域的線程管理類,在thread.cc中定義。 這個類的核心功能在於提供線程對象註冊的功能。提供了一個很方便的函數CurrentThread,如下面的情境: // Check that we're being called from the channel (e.g., worker) thread. ASSERT(talk_base::ThreadManager::CurrentThread() ==
Time of Update: 2018-12-06
作為vim使用者,xcode真是讓我抓耳撓腮,難受的要死,~~咬牙切齒還是把MacVim給裝上,可是光有個vim不頂用啊。我一直使用exvim這個套裝(神器,沒用過的趕緊上),要一堆unix上的開源玩意,一個一個弄,我還不給它搞死。liunx上apt-get那玩意沒道理mac上沒有替代品,一陣google,果然有,還不知一個。作為軟體試用深度上癮症患者,趕緊的一個一個試。 Brew(homebrew首頁):好,就一個字評價,如果要安裝wget,只要這樣: brew install
Time of Update: 2018-12-06
作為堅定的vim使用者,其他編輯器都是浮雲,折騰了一天終於搞定了mac上vim環境。下面記錄下安裝配置過程,備忘之。 1. 安裝MacVim,應該是mac上使用vim最好的選擇了:http://code.google.com/p/macvim/沒啥好說,下了裝上就是了。 2. 配置基本環境MacVim做的還是不錯的,還支援背景半透明(不知道啥用哦~~)。MacVim預設是不會組建組態檔案的,所以你需要自己在~目錄下,建立.gvimrc
Time of Update: 2018-12-06
需要的前置知識:http://mattvague.com/three20-stylesheets-tutorialhttp://mattvague.com/three20-tttableitem-tutorial 如何改變導覽列 顏色:可以直接改:self.navigationBarTintColor = [UIColor blackColor];麻煩之處在於,每個頁面都得改一遍。 也可以使用全域的style sheet:-(UIColor *) navigationBarTintColor {
Time of Update: 2018-12-06
哎~ 情況繼續惡化,電視台都來了~~~,原本一個運作正常的公司,突然就不行了。。。真是神馬都是浮雲。繼續來個面試題,倒是也不怎麼無聊,就是不知道有啥用,不過做做題,心裡還平靜點。 話說題目是,用隨機演算法求PI,就是圓周那個PI。隨機演算法神馬的從來都是用過,沒寫過,這裡隨便貼個線性同餘法 其中b >= 0,c >= 0,d <=
Time of Update: 2018-12-06
什麼是keep-alive? 顧名思義即可,注意它只適用於TCP串連。系統會替你維護一個timer,時間到了,就會向remote peer發送一個probe package,當然裡面是沒有資料的,對方就會返回一個應答,這時你就知道這個通道保持正常。 有什麼用呢? 考慮下面這個情境,端點A和端B開始串連,三向交握,建立好了一個穩定的雙向通道。然後雙方發送完初始的資料後,進入等待狀態。這時候,拔掉B的電源插頭,B死掉了,它不可能有任何機會向A發送FIN包,或是其他資料來說明自己掛掉,
Time of Update: 2018-12-06
什麼是滑動視窗協議? 一圖勝千言,看下面的圖。簡單解釋下,發送和接受方都會維護一個資料幀的序列,這個序列被稱作視窗。發送方的視窗大小由接受方確定,目的在於控制發送速度,以免接受方的緩衝不夠大,而導致溢出,同時控制流程量也可以避免網路擁塞。下面圖中的4,5,6號資料幀已經被發送出去,但是未收到關聯的ACK,7,8,9幀則是等待發送。可以看出發送端的視窗大小為6,這是由接受端告知的(事實上必須考慮擁塞視窗cwnd,這裡暫且考慮cwnd>rwnd)。此時如果發送端收到4號ACK,
Time of Update: 2018-12-06
一篇備忘錄,也是周末的讀書筆記。 pow on階段: 從電源按下去到“滴的”一聲長響,通常維修人員管這個叫點亮,確實顯示器也會在這個時候被“點亮”,開始有輸入訊號。這個過程實際上是BIOS啟動,初期化,和檢測基本硬體資訊的過程。電源通電後,首先啟動的是CPU,CPU開始運行寫在flash
Time of Update: 2018-12-06
TCP本身的可靠性是利用確認機制,逾時重發來保證的,這些不說了,網上資料很多。不過以前一直沒有仔細學習過TCP的網路擁塞控制,現在記錄下一些總結吧。什麼是擁塞?
Time of Update: 2018-12-06
c++中字串處理總是個煩人的地方,雖說std::string也還不錯,但是比起pythong,lua這些總是麻煩很多。 今天發現pystring這個函數封裝庫,確實是很不錯。它通過封裝std::string實現了類似python處理string的介面。 連結在這裡:https://code.google.com/p/pystring/ 用法很簡單,這裡翻譯了下它的文檔:capitalizestd::string capitalize(const std::string &
Time of Update: 2018-12-06
一些老掉牙的知識點,就怕陰溝裡翻船,全部翻出來看看。記憶體對齊,sizeof,strlen類問題: 這類問題都是考基本的記憶體方面的問題,基本類型的資料麼,主要是字串和指標的問題,字串主要尾部的\0,指標注意32位機器上都是4位元組的。複合類型就有對齊的問題,簡單來說是由成員的對大對齊單位來指定的。具體看例子: char ss[] = "1234"; std::cout<<sizeof(ss); //輸出5
Time of Update: 2018-12-06
公司糟了災,年底了還要去找工作,真是流年不利啊。面試題啥的,向來是很反感的,有啥意義呢?哎~~,世道如此,只好把面經啥的又捧起來看了,煩啊。 題目很簡單了,就是列印下面這種樣式的字元,主要的邏輯很簡單,可是面經上的解答實在不給力啊,直接就main裡一個for就列印出來,這不是騙小孩麼,也不知道那時候買這個幹嘛,不過那會剛畢業,也差不多是個小屁孩了。往簡單了想,變化點有三個,一個是列印的行數,一個是列印到什麼位置,一個是列印的花紋,OO啥的不折騰了,就用C風格寫下算了。
Time of Update: 2018-12-06
因為也不是專門的資料庫開發,或是DBA,就是針對網上的一些資料的學習總結,謬誤之處難免,請網友不吝指教。什麼是索引? 簡單的用字典的檢索目錄做比喻多少有一點事實而非,索引的結構實際上也影響了資料實體本身的儲存結構,所以更細緻一點說,沒有索引,有索引,有叢集索引,有非叢集索引是資料庫表的不同的儲存,使用的方式。 關於B-Tree 要理解索引,就不能不瞭解他的實現。常見的實現多是用B-Tree或是B+Tree,這裡簡單說下我對B-Tree的理解。
Time of Update: 2018-12-06
其實就是翻譯下msdn,沒別的用,督促一下自己看的仔細些。 recv 從一個已經串連的或是已經綁定的socket中擷取資料。 int recv( SOCKET s, char FAR *buf, int len, int flags); 參數 s [in] socket id buf [out] 緩衝 len [in] 緩衝大小 flags [in] 標識,用處參見下面的說明
Time of Update: 2018-12-06
mac:command + option + esc -> 工作管理員command +f3 -> 顯示案頭command + shift + 3 -> 案頭command + shift + 4 -> 截取矩形delete -> backupshift + delete -> forwardcommand + m -> 隱藏視窗command + h -> 縮小視窗command + option + 電源鍵(推出鍵) ->
Time of Update: 2018-12-06
strcp strlcp memcp的實現,又寫了一遍,也不知道是第幾遍了。目標串的容量,字串重疊,寬字元,四位元組最佳化這些東西不考慮了。 char* strcp(char* dest, const char* src) { assert(dest != NULL); assert(src != NULL); if (dest == NULL || src == NULL) return NULL; char* save = dest; while((*dest+
Time of Update: 2018-12-06
以操作百度地圖的一個case為例子, 查詢兩個地址之間的大眾運輸路線,並且使用python驅動Selenium RC。 前置知識:http://seleniumhq.org/docs/05_selenium_rc.html#learning-the-api -》Selenium RC結構,安裝各種語言的sdkhttp://seleniumhq.org/docs/ -> Selenium IDE 用法 step1:使用Selenium IDE生產python代碼 Base URL: