寫教學的最大目的是教會未來的自己

pupuliao

openCV的IplImage 與 Mat 相互換轉

OpenCV針對這兩種轉換方式是採用記憶體共享,由於因為記憶體共享,所以任何一方作改變 都會改變原始的數值

(1)IplImage to Mat

Ex.
IplImage* pImg = cvLoadImage(“lena.jpg”);
cv::Mat img(pImg,0); //0是不複製影像,也就是pImg與img的data共用同個記憶體位置,header各自有

(2)Mat to IplImage

Ex.
IplImage* pImg = cvLoadImage(“lena.jpg”);
cv::Mat img(pImg,0); //img拿到pImg的data
IplImage qImg;
qImg = IplImage(img); //一樣檔案沒複製,所以qImg.imageData就是指向pImg->imageData

Post to Twitter Post to Plurk Post to Facebook Send Gmail

如何參與 WordPress 正體中文翻譯?

本篇文章經原作者同意,轉自於 http://tw.forums.wordpress.org/topic/如何參與-wordpress-正體中文翻譯??replies=1

如果你有使用wordpress,又想對這套免費的軟體做出貢獻,就請您撥出一些時間來幫忙翻驗吧

 

WordPress 本身僅有英文操作介面,其他的語系都是由各國家的使用者費心費時所翻譯的成果,而在台灣正體中文部分,雖然現在的使用者不少,但真正參與翻譯計畫的人卻不多。

我想這不是一件困難的事情,只要有心,即便你的英文能力不是頂尖,都能夠藉由翻譯軟體或是線上翻譯工具的輔助,在 WordPress 裡留下你走過的足跡,一同讓台灣正體中文社群更加茁壯,也能因此減輕每位貢獻者的工作負擔,讓大家都可以享受到最好的 WordPress 正體中文。

有鑑於一些台灣的 WordPress 社團成員反映不知道要如何參與翻譯,特地寫了一篇簡單的教學來讓想參與的朋友作為參考,當然,這些付出都是沒有實質報酬的,我們無法支付你薪資,也不會因 此而使你聲名大噪,但最棒的是你能夠真正投入一項世界級的開放原始碼專案,與大家一同進步。

要如何參與 WordPress 正體中文的翻譯工作?

1. 首先,你必須要有一個 WordPress.org 論壇帳戶,如果是在正體中文討論區註冊的也沒問題,如果你還沒有帳號,請先到 http://wordpress.org/support/register.php 註冊一個吧!完全免費。

2. 前往 http://translate.wordpress.org/ 找到 WordPress 專案底下的 Development 子項目,大部分的新字串都會出現在開發項目裡,以前的版本可以參考,但大概就不需要去更動它了。

3. 接著你會看到各個語系目前的翻譯進度,台灣正體中文的名稱為 Chinese (Taiwan) ,找到它然後進入吧!現在你可以看到 WordPress 正體中文的翻譯情形,以綠色作為背景的代表該字串已經完成翻譯的動作,如果底部是白色的,代表該字串還沒有人提供翻譯建議,可以雙擊 Translation 欄位下面的 Double-click to add 來加入適當的翻譯。

在翻譯時請把握幾個原則:

  • 使用全型標點符號
  • 善用 Search 功能,找出前人翻譯過的類似字串,使用相同的詞彙以免造成使用者混淆。例如:Blog 翻譯成「網誌」,就不該將它翻譯成「部落格」。
  • 使用大家都能夠一目了然的用語。

4. 在翻譯前可以點擊上方的 Untranslated 篩選功能,只顯示目前尚未翻譯的字串,這樣就能很輕鬆掌握現在的翻譯完成情形。

5. 在提交翻譯建議之後,會由 WordPress Taiwan 正體中文的編輯團隊進行審查,我們可能會核准你的翻譯,或是進行適當的修改調整,無論如何,當你完成一個字串的翻譯後,請記得按下 Add Translation 來存檔。

 

 

 

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

Ubuntu apt-get 更新

最近運氣十分不佳的,我負責的DNS GG了 T.T

悲情的我不會搞DNS阿…

 

不管了 先重裝OS

因為在安裝過程中我的工作夥伴,沒有順手選擇SSH ,所以我事後才安裝

運氣不好碰到apt-get 找不到軟體….

以下教學就是要來解決這個問題

 

1. vim /etc/apt/sources.list

2.把其中兩行改成

deb http://140.121.80.200/ubuntu/ quantal main restricted
deb-src http://140.121.80.200/ubuntu/ quantal main restricted

這一台是我們社團架設的伺服器,跟ubuntu 官方有同步

所以直接連舊OK了

3.sudo apt-get update

 

這樣就OK了

Post to Twitter Post to Plurk Post to Facebook Send Gmail

android 上傳檔案到電腦的方法

這篇文章 主要是給有寫android程式的人看得,如果只是普通使用者,去找APP吧XD

首先 這個功能我研究了四天,今天終於有了成果
到最後 我找到另一個 相當完整的code,為了避免人別人說我抄襲

我就直接貼連結了
http://www.cnblogs.com/greatverve/archive/2011/12/23/android-upload.html

簡單來說,android 如果要傳輸檔案,在預設的API中 並不支援 FTP(雖然似乎有人寫出來,但我還沒嘗試成功)
所以比較簡單的解決方法,就是模擬普通網頁傳輸表格的方式用POST 來傳輸
連結裡的方法就是這樣

另外,伺服器接收端可以用更簡單的方式製作
用PHP 的就可以了 這部分我改天再PO

Post to Twitter Post to Plurk Post to Facebook Send Gmail

第一次組裝書櫃就上手

上了大學,開始了我買書之路….(在這之前,買進的書大概就是金庸全套吧)

到現在研究所,累計買的小說已經不是紙箱能放得下的,所以趁著畢業換房間,買了一個新的書櫃

書櫃是從pchome 的購物網站下訂的,一個699

 

這是拆開來後的木板

加上兩包零件袋

閱讀全文

Post to Twitter Post to Plurk Post to Facebook Send Gmail

JAVA的UTF-8 繁簡互轉的方法

首先 要先感謝來自PTT JAVA版的 ClareQ (人比人Cheese人)

他的方法讓我大開眼界,比我上一篇使用replace 的方法更為快速,他使用了 hashmap

也感謝他允許我發了這篇文章

 

 

 

public class Encoding {

	public Encoding() {

	}

	public String StoT(String data) {
		return translate(data, S2T);
	}

	public String TtoS(String data) {
		return translate(data, T2S);
	}

	private static final Map T2S = new HashMap();
	private static final Map S2T = new HashMap();
	static {
                final char[] UTF8T ="繁體字表...".toCharArray();
                final char[] UTF8S ="簡體字表...".toCharArray();
                for (int i = 0, n = Math.min(UTF8T.length, UTF8S.length); i < n; i++) {
			final Character cT = Character.valueOf(UTF8T[i]);
			final Character cS = Character.valueOf(UTF8S[i]);
			T2S.put(cT, cS);
			S2T.put(cS, cT);
		}
	}

	private static String translate(String text,
			Map dictionary) {
		final char[] chars = text.toCharArray();
		for (int i = 0, n = chars.length; i < n; i++) {
			final Character found = dictionary.get(chars[i]);
			if (null != found)
				chars[i] = found;
		}
		return String.valueOf(chars);
	}

 

其中繁體字跟簡體字字字表,後面附上,因為大約有兩千五百字…..

他的方法和我以前的想法不一樣,因為我只是換字,不是換詞,所以他把字串拆開成陣列後,把文章帶進字碼表去搜尋,大概是hashmap 在這方面的高效率,所以可以快速提升執行效率

這是和上一篇同樣的樣本做的測試

總共花費 96089.0ms ;其中下載花費95658.0ms 資料處理花費  431.0ms

效率大概是使用JAVA 內建的replace()的80倍

簡繁字碼轉換表

 

看來我現在是要想辦法提高下載效率

Post to Twitter Post to Plurk Post to Facebook Send Gmail

JAVA提高String.replace() 執行速度的方法

繼續上一篇的內容,為了這些問題,我詢問了PTT 的 JAVA版,也很感謝有人替我解答,並教我如何提高replace 的效率

參考資料 https://www.facebook.com/java.tw 的 5月8日的文章

這個方法經過測試,應該可以使用正規表示式,但我測試的次數不夠多,也不保證其效率 <-免責聲明XD

 

簡單來說 就是 JAVA 官方提供的 String 中的 replace() 把所有的任務都當成正規表示式來處理,所以效率不彰,而如果我們只是要做單純的文字置換,顯然不需要那些步驟。

以下是程式碼+口語化只有我自己懂得演算法

 

public class Replace {
	public Replace() {
		// TODO Auto-generated constructor stub
	}

	public static String replace(String str, String patten, String replacement) {
		// str 要置換的字串 把patten換成 replacement
		int pos = str.indexOf(patten);
		return pos < 0 ? str : _replace(str, patten, replacement, pos);
	}
/**演算法說明
 * 
 * @param str 資料
 * @param patten 要換掉的文字
 * @param replacement 要改成的文字
 * @param pos 那段文字在哪
 * @return 
 * 1. 從頭開始找出符合的字串,並且標示第幾個字放進pos
 * 2. 先把在pos前面的字放進結果區(newContent)
 * 3. 再放進replacement
 * 4. 再去找下一個字的位置放進pos 
 * 5. 接續步驟三直到全部找完為止
 */
	public static String _replace(String str, String patten,
			String replacement, int pos) {
		int len = str.length();
		int plen = patten.length();
		StringBuilder newContent = new StringBuilder(len);

		int lastPos = 0;

		do {
			newContent.append(str, lastPos, pos);
			newContent.append(replacement);
			lastPos = pos + plen;
			pos = str.indexOf(patten, lastPos);
		} while (pos > 0);
		newContent.append(str, lastPos, len);
		return newContent.toString();
	}
}

經過我在小說下載器上的實際測試結果

效率提高的8倍左右

以下是測試數據,以一部124頁的小說當作測試樣本

使用String.repalce() :總共花費 112890.0ms ;其中下載花費80601.0ms  資料處理花費 32289.0ms

使用新的方法             :總共花費 71188.0ms ;其中下載花費67008.0ms 資料處理花費  4180.0 ms

下載花費時間取決於測試當下的網路狀況

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

JAVA 的字串替換

參考資料

http://satellite.iteye.com/blog/224820

http://lbs.iteye.com/blog/208056

http://hehome.blogspot.tw/2011/06/java.html

 

最近為了我的小說下載器,找了很多相關的資料

 

首先 String 的 replace() 和 replaceAll()的差別

這兩個都是做string 大量置換,只是 replace() 就只是單純的置換,而replaceAll() 支援 使用正規表示式

以下是例子(抱歉引用了 參考文章的)

         
        String src = new String("ab43a2c43d");
        System.out.println(src.replace("3","f"));=>ab4f2c4fd.
        System.out.println(src.replace('3','f'));=>ab4f2c4fd.
        System.out.println(src.replaceAll("\\d","f"));=>abffafcffd.
        System.out.println(src.replaceAll("a","f"));=>fb43fc23d.
        System.out.println(src.replaceFirst("\\d,"f"));=>abf32c43d
        System.out.println(src.replaceFirst("4","h"));=>abh32c43d. .

再來就是 另一種 使用 正規表示式的 大規模置換的方法,下面的範例是用來 過濾所有的HTML 的

 
          java.util.regex.Pattern p_html;
          java.util.regex.Matcher m_html; 

          String regEx_html = "<[^>]+>"; //定義HTML標籤的正則表達式 
          p_html = Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
          m_html = p_html.matcher(htmlStr);
          htmlStr = m_html.replaceAll(""); //過濾html標籤 


我剛剛理解了 兩者之間的差別
前者的作法,每次都要重新分析一次正規表示式,而後者可以指分析一次就重複使用

Post to Twitter Post to Plurk Post to Facebook Send Gmail

Copyright © 2020. All Rights Reserved.

歡迎光臨
初音