ensky's

  • Me
  • Archive
  • feeds

Posts match “ Note ” tag:

over 11 years ago

PCRE in c++ (Perl Compatible Regular Expressions)

前言

由於網路程式設計課程的關係需要在C++中用到Regular expression,
google之後發現有許多解決方案,如Regex++ 、 Boost.Regex 、 PCRE 、 regix.h 等等,
但考慮到系上工作站未必有安裝上述套件,而PCRE卻是人人都有,
所以我選擇使用pcrecpp這個lib。

安裝

  • Environment: FreeBSD 8.2
% sudo portmaster devel/pcre++

使用

  • CASE 1: FULLMATCH & PARTIAMATCH

    FullMatch就是需要完全相符,就像/^(regular expression code)$/一樣
    PartialMatch則反之

#include <iostream>
#include <pcrecpp .h>
  
int main(int argc, char ** argv)
{
    if (argc != 3)
    {   
        std::cerr < < "Usage: " << argv[0] << " pattern text\n";
        return 1;
    }   
  
    pcrecpp::RE oPattern(argv[1]);
    if (oPattern.FullMatch(argv[2]))
    {   
        std::cout << argv[2] << " fully matches " << argv[1] << "\n";
    }   
    else if (oPattern.PartialMatch(argv[2]))
    {   
        std::cout << argv[2] << " partially matches " << argv[1] << "\n";
    }   
    else
    {   
        std::cout << argv[2] << " dose not match " << argv[1] << "\n";
    }   
}

執行結果

% g++ TestPcre Cpp.cpp `pcre-config --cflags` `pcre++-config --cflags` -   lpcrecpp -o pcrecpp
% ./pcrecpp 
Usage: ./pcrecpp pattern text
% ./pcrecpp "http:\/\/.*\.qq\.com" "http://www.qq.com"
http://www.qq.com fully matches http:\/\/.*\.qq\.com
% ./pcrecpp "http:\/\/.*\.qq\.com" "http://www.qq.comiii"
http://www.qq.comiii partially matches http:\/\/.*\.qq\.com
% ./pcrecpp "http:\/\/.*\.qq\.com" "http://www.qqq.comiii"
http://www.qqq.comiii dose not match http:\/\/.*\.qq\.com
  • CASE 2:CONSUME之完全比對

    有時候你會想把整個字串比對完,像是你想parse一整篇html或文章中所有的email,你或許會這樣寫

string contents = ...;                 // Fill string somehow
pcrecpp::StringPiece input(contents);  // Wrap in a StringPiece
string name, site;
pcrecpp::RE re("([^@]+)@([^\s]+)");
while (re.Consume(&input, &name, &site)) {
  ...;
}

然後就可以成功抓到一篇文章所有的email。

切記,StringPiece一定要記得Wrap,否則會型態不符喔!

Note

經實際測試結果,compile時必須加上

% g++ `pcre-config --cflags` `pcre++-config --cflags` -lpcrecpp

才可以成功compile,且如果他說找不到lpcrecpp請手動symbolic link到/usr/bin下才可執行

% sudo ln -s /usr/local/lib/libpcrecpp.so.0 /usr/lib/

Reference

  • 深入淺出C/C++中的正則表達式庫(三)——PCRE, PCRE++
  • How do I get PCRE to work with C++?
  • pcrecpp man page
  • c++
  • Note
  • October 15, 2011 18:42
  • Permalink
  • Comments
 
over 11 years ago

Windows XP / Windows 7遠端關機

目的

將同網域的Windows電腦大量關機

需求

  • 你必須有該網域的administrators之權限。
  • Windows版本XP以上。

方法

Win7和WinXP和Win2008的shutdown這隻程式似乎長得不太一樣,但功能應該大同小異,
打開CMD輸入shutdown /?或者shutdown --help就可得到說明
而我測試的版本為Windows2008,指令為

shutdown /s /m \\電腦名稱 /t 秒數

即可在某固定秒數內將電腦(們)關機。
參數說明可以看windows自訂說明,其實寫得很清楚也不用多提。

問題

  1. 寫成批次檔的話會一直等待已經關閉的電腦回應,關機要很久

    可利用批次檔的START指令,該指令功能就像fork一樣,會自己呼叫新的cmd出來,可以達到一次關閉很多台電腦的功能
    EX:

    START /B shutdown /s /m \\CCCC-12345 /t 10

    而其中/B代表的是幕後執行,因此不會彈出很多個小黑窗。
    另外如果你怕一次執行太多可以用timeout /t 秒數指令延緩執行,
    比如說你可以關10台執行timout /t 20讓他每關10台等待20秒再關下十台這樣。

  2. Win7沒辦法遠端關機?

    可能是防火牆設定的問題,試著允許"檔案與印表機共用"這個欄位試試看。

Reference

  • http://ithelp.ithome.com.tw/question/10000339
  • http://itboa.blogspot.com/2011/04/shutdownwin7.html
  • windows
  • Note
  • October 18, 2011 17:41
  • Permalink
  • Comments
 
almost 11 years ago

Install octopress on FreeBSD

前言

大兜推薦Octopress這個傳說中的「駭客的blog」,可以使用markdown撰寫文章,還有很方便的程式碼上色功能,也不失設計彈性,一聽之下大為心動,就打算把blogger的舊家搬過來。

掙扎

一開始打算利用他寫的這篇文章安裝在Win7上面,不料困難重重,全部都設定好之後仍然無法使用程式碼上色功能,只好試著搬家到FreeBSD上面看看會不會比較方便安裝。

撞牆

原本打算照官網上的步驟一步一步來,但不料iconv的dependency問題一直無法解決(會一直噴找不到iconv錯誤),索性放棄,直接改用FreeBSD的ports, 結果瞬間就好了(不過未來可能會出現ruby版本相容性問題...QQ)

安裝

Install base ruby, ruby-iconv, ruby-bundler

% sudo vim /usr/ports/Mk/bsd.ruby.mk # 將RUBY_DEFAULT_VER?= 1.8 改成 1.9
% sudo portmaster converters/ruby-iconv 
% sudo portmaster /usr/ports/sysutils/rubygem-bundler
% rehash

Next, install dependencies.

% cd
% git clone git://github.com/imathis/octopress.git octopress
% cd octopress    # If you use RVM, You'll be asked if you trust the .rvmrc file (say yes).
% ruby --version  # Should report Ruby 1.9.2 or 1.9.3

Install the default Octopress theme.

% gem install bundler
% rehash
% bundle install
% rake install

OK,完成XD!
可以繼續往下跑囉!

Reference

  • http://hi.baidu.com/smallchicken/blog/item/3d0fa346e03ef3116b63e59a.html
  • admin
  • Note
  • March 26, 2012 07:57
  • Permalink
  • Comments
 
almost 11 years ago

Loadbalance By DNS

前言

最近系計中買了VMware vSphere平台的授權,當然要好好的用一下。
灌完FreeBSD9之後發現效能居然還比Ensky.tw這台實體機來的快!
因此決定把vSphere的VM偷兩部過來當做Load balance的Web server。

設定

原本那兩台採用DHCP + DDNS綁在某個hostname上面,因此打算使用CNAME做loadbalance的record,
google之後才發現CNAME沒辦法設多筆!因此我把host用A record綁在cdn.ensky.tw上面,
想要load balance的server再用CNAME指到cdn.ensky.tw上

設定其實非常簡單,就只是一筆DNS record上綁很多個A

cdn             A       10.0.0.1
                A       10.0.0.2
                A       10.0.0.3

然後再把你要load balance的hostname導到cdn上面去

www                CNAME   cdn

好了!從此之後你的www就可以自動分散流量到10.0.0.1~3上面囉!

後話

其實這個作法並非非常理想,為何?
因為假設某台Server突然死掉了,本架構並不能做到fail-over,
也就是如果client很不幸的連到死掉的那台server,一樣會噴404 not found,
你會說,那我就寫隻script檢查有沒有死掉,死掉的話就nsupdate拿掉他就好啦?
但是dns更新需要時間,你就算拿掉該host,client端還是會404一陣子,直到dns快取expire...

這裡比較好的作法可能是用一台server做reverse proxy的工作,
當流量過來的時候自動round-robin導到內部的server pool上面,
而當有server掛掉的時候可以自動導到別台這樣。

改天來研究這個方法:p

  • admin
  • Note
  • DNS
  • April 21, 2012 05:45
  • Permalink
  • Comments
 
almost 11 years ago

PHP on Windows Azure - Worker

其他issue

  • 用worker: http://blogs.msdn.com/b/silverlining/archive/2011/10/04/support-for-worker-roles-in-the-windows-azure-sdk-for-php.aspx
  • 用table, blob, queue: http://azurephp.interoperabilitybridges.com/tagsearchresults/?tag=Storage
  • 好多教學: http://azurephp.interoperabilitybridges.com/tutorials
  • 微軟教學: http://msdn.microsoft.com/zh-tw/library/windowsazure/hh696549v=VS.103).aspx(

筆者遇到的小問題

  • 明明在ServiceConfiguration.cscfg裡面將Worker的Instances設為10了,為什麼還是不會變?! 經測試,
    package create -in="SOURCE DIR" -out="OUTPUT DIR" -dev=true
    這行指令並不會把新的ServiceConfiguration.cscfg複製過去OUTPUT DIR(很有趣) 所以你可能要手動去OUTPUT DIR將那邊的ServiceConfiguration.cscfg改正才行
  • Azure的Compute Emulator跑第二次就出現 Role status Unknown 這我也常常發生但還沒找到好的解法,我的作法是直接把Compute Emulator shutdown & restart兩次就好了= =
  • Note
  • April 21, 2012 06:48
  • Permalink
  • Comments
 
almost 11 years ago

PHP on Windows Azure - Installation

前言

DataMining這門課第一次作業要建立FP Tree來分析Frequent Itemset,有分三部分:

  1. 單機版
  2. Map Reduce on Window Azure版本
  3. 第二版本改善效能(bonus) 由於筆者最擅長的語言是PHP,就打算用PHP撰寫之。

安裝

  1. 先照著這篇文章來安裝 PHP + Windows Azure SDK + SQL Server Express
  2. 再照著這篇文章來安裝 Windows Azure SDK for PHP 以及學習如何測試開發

試跑

上一步驟做完應該已經會產生package了,現在要來跑跑看,請參考這篇文章來用用看phpinfo();

安裝 Q & A

你可能會遇到一些神奇的問題

  • PHP 安裝失敗

很妙的是Microsoft Web Platform Installer他並不會自己幫你裝好IIS,你要去控制台->程式與功能->開啟或關閉windows功能把它設定成至少這樣才能開始安裝PHP

  • 404 Not Found

根據筆者的經驗,Microsoft Web Platform Installer安裝的php版本會是壞掉的(很妙,啊?),檢測方法是去C:\Program Files\PHP\v5.3\下點開php.exe和php-cgi.exe看會不會炸掉,
如果OK就可以,不行的話你可能要去PHP for Windows官網找5.3 Thread safe zip
請自行備份舊檔案,解壓縮新檔案到同一個資料夾,再把舊的php.ini複製進去新folder。

然後呢,你可能會繼續404 Not Found,此時很有可能是IIS並沒有自動幫你設定好FastCGI & enable PHP。

請進入控制台->系統管理工具->IIS管理員->FastCGI設定然後這樣設定



然後回到IIS管理員進去PHP管理區啟動PHP

之後看看行不行,不行就google看看囉,或看這裡搜尋404,至少我是這樣解決的。

Reference

  • http://azurephp.interoperabilitybridges.com/articles/setup-the-windows-azure-development-environment-automatically-with-the-microsoft-web-platform-installer
  • http://azurephp.interoperabilitybridges.com/articles/setup-the-windows-azure-sdk-for-php
  • http://azurephp.interoperabilitybridges.com/articles/build-and-deploy-a-windows-azure-php-application
  • 用worker: http://blogs.msdn.com/b/silverlining/archive/2011/10/04/support-for-worker-roles-in-the-windows-azure-sdk-for-php.aspx
  • 用table, blob, queue: http://azurephp.interoperabilitybridges.com/tagsearchresults/?tag=Storage
  • 好多教學: http://azurephp.interoperabilitybridges.com/tutorials
  • 微軟教學: http://msdn.microsoft.com/zh-tw/library/windowsazure/hh696549v=VS.103).aspx(
  • Note
  • cloud
  • php
  • Azure
  • April 21, 2012 06:10
  • Permalink
  • Comments
 
over 10 years ago

Running python on hadoop using dumbo

All in one link

其實官方wiki寫的很清楚了,
直接到那邊就可以看到如何安裝、如何測試等等。不過我這邊還是記錄一下我的步驟,以及我遇到的困難及解法。

Overview

既然是要做map-reduce,所以先來份code。

這份code裡面就是基本的word count,

function version

def mapper(key, value):
    for word in value.split():
        yield word, 1

def reducer(key, values):
    yield key, sum(values)

if __name__ == "__main__":
    import dumbo
    dumbo.run(mapper, reducer)

可以看到mapper function負責map, reducer function負責reduce,是透過dumbo.run來註冊。

class version

你也可以用class來做mapper和reduce的動作,就可以定義__init__在initilize的時候執行一次就好,減少一些overhead。

class Mapper:
    def __init__(self):
        file = open("excludes.txt", "r")
        self.excludes = set(line.strip() for line in file)
        file.close()
    def __call__(self, key, value):
        for word in value.split():
            if not word in self.excludes:
                yield word, 1

def reducer(key, values):
    yield key, sum(values)

if __name__ == "__main__":
    import dumbo
    dumbo.run(Mapper, reducer, reducer)

可以看到__init__是constructor,一開始會被執行一次;__call__是真正執行的function。

Installation

https://github.com/klbostee/dumbo/wiki/Building-and-installing

Note

若你打算使用國網中心的hadoop,直接看到virtual Python environment的解法即可。

Running

dumbo允許你單機進行測試,單基測完沒問題可以放到hadoop上測試,減少開發時間。

詳細說明
https://github.com/klbostee/dumbo/wiki/Running-programs

Notes

有關Running這邊實在吃了不少苦頭,於是把一些常見問題放在這裡以資各位參考。

  • 共同
    • 每次都要刪除舊檔案很麻煩 -> 參數加上 -overwrite yes
    • 出現Memory error -> 記憶體不足,因為預設的記憶體限制很小,參數加上 -memlimit 1073741824
  • Hadoop only
    • Output出現亂碼 -> 參數加上 -outputformat text
    • 只用到兩個mapper, 一個reducer -> 預設參數是這樣,要設定參數: -nummaptasks [a number]
  • Note
  • cloud
  • May 19, 2012 23:47
  • Permalink
  • Comments
 
about 10 years ago

新酷音 on Win7 64bit!

簡介

新酷音真的比新注音輸入法好用太多,智慧選字、全形標點,怎樣都不想換回新注音輸入法。

不過新酷音對64bit的支援一直都有點問題,網路上有人提供64bit的載點和解法,但經測試過後並不成功。

於是就絞盡腦汁的嘗試XD,終於給我嘗試成功!

測試過程

經觀察後發現windows在安裝輸入法的時候,若發現他是32bit的輸入法,會將檔案放在C:\Windows\SysWOW64\下;而64bit的則會放在C:\Windows\System32\下

新酷音經熱心網友改版之後有了
32bit和
64bit兩種版本,於是分別放在syswow64和system32下的話,就可以成功使用囉!

安裝步驟

  1. 下載並解壓縮到C:\下
  2. 去控制台->時鐘、語言和區域->變更鍵盤或其他輸入方法->變更鍵盤->新增->新酷音輸入法->確定
  3. 大功告成!
  • windows
  • Note
  • November 17, 2012 07:59
  • Permalink
  • Comments
 

Copyright © 2013 ensky . Powered by Logdown.
Based on work at subtlepatterns.com.