Feeds:
文章
迴響

Archive for the ‘程式設計’ Category

Code: https://github.com/mongodb/mongo-php-driver/blob/4b49b1ad80a300000cc7beab927ea43bdc6673fb/php_phongo.c

 

// 模組初始化
PHP_GINIT_FUNCTION(mongodb)
{
    // 初始化 hash
    zend_hash_init_ex(&mongodb_globals->clients, 0, NULL, php_phongo_client_dtor, 1, 0);
}

static void php_phongo_client_dtor(zval *zv)
{
   // http://mongoc.org/libmongoc/1.4.0/mongoc_client_destroy.html
   // Release all resources associated with client and free the structure.
    mongoc_client_destroy((mongoc_client_t *) Z_PTR_P(zv));
}

// Manager 初始化
void phongo_manager_init(php_phongo_manager_t *manager, const char *uri_string, zval *options, zval *driverOptions TSRMLS_DC) /* {{{ */
{
    mongoc_client_t  *client_ptr;

   // 產生hash
    hash = php_phongo_manager_make_client_hash(uri_string, options, driverOptions, &hash_len TSRMLS_CC)
   
   // 找尋 hash 吻合的連線, 吻合返回快取
    if ((client_ptr = zend_hash_str_find_ptr(&MONGODB_G(clients), hash, hash_len)) != NULL) {
        manager->client = client_ptr;
        goto cleanup;
    }
   
   // 建立新的 client
    manager->client = php_phongo_make_mongo_client(uri, ssl_opt TSRMLS_CC);
   
   // 更新 hash
    zend_hash_str_update_ptr(&MONGODB_G(clients), hash, hash_len, manager->client);

}

// 模組卸載
PHP_MSHUTDOWN_FUNCTION(mongodb)
{
   // 釋放所有的連線 
   // 觸發 php_phongo_client_dtor()
    zend_hash_destroy(&MONGODB_G(clients));
   
    mongoc_cleanup();

    return SUCCESS;
}

Read Full Post »

雖然 MongoDB 屬於 Schema Free, 但還是會有想知道 Collection 儲存了那些欄位的需求, 有人開發了 variety 搭配 mongo 命令使用依據統計列出欄位和型別資訊, 效果如下

2016111701

另外也有提供命令列版本  variety-cli 其實就是把 mongo 指令也包在程式當中方便使用

2016110702

 

Read Full Post »

最近嘗試了 Google Drive API 上傳檔案, 發現支援 io.Base (http.MediaIoBaseUpload) 方式上傳, 因此有機會直接將 URL File 的 Stream 直接儲存到 Google Drive, 可是 requests 的 Response 雖然支援 Stream 但卻不支援 seek 操作, 網路上找到 pyhttpio 不過他是針對 urllib.request, 於是我也針對 requests 改了一版

requests_io.py

所以就可以在 Drive API v3 使用

r =SeekableHTTPFile('http://....', debug=True)

media_body = MediaIoBaseUpload(r,mimetype=mime_type)

file = service.files().create(media_body=media_body).execute()

Read Full Post »

MongoDB 去除重複資料

今天同事遇到 MongoDB 想要針對特定欄位建立索引, 可是因為該欄位資料有重複無法建立, 因此如果重複資料是要刪除到只剩一筆該怎麼做呢?用 Python 實現一個做法

 

Read Full Post »

想批次檢查 Mega Link 是否存活, Python 找不到任何的實作, 只好從 MegaDownload 工具著手, 還好工具有開源, 將取得連結資訊的程式獨立成一個新的專案 MegaLinkInfo  , 只要透過 IronPython 就可以方便檢查連結資訊, 可參考專案的 test.py

取得的 URL 也可透過 wget 直接下載

Read Full Post »

有個 Unity 遊戲頻繁的更新困擾我, 雖然用 ILSpy+Reflexil 修改是很方便, 但是每次更新都要把每個地方重改一次真的很麻煩, 本來想從 Reflexil 源碼修改, 後來才注意到他底層也是用 Mono.Cecil, 於是研究了了一點心得, 礙於怕遊戲帳號被封鎖, 我就只列出關鍵代碼,

20160419

 

 

 

Read Full Post »

Chrome 限制頻寬功能

家裡的網路常常因為上傳檔案而影響下載頻寬, 原本打算找個限速軟體來處理, 後來發現原來 Chrome 本身就有內建還挺方便的

Read Full Post »

Older Posts »