❶ 27歲386斤程序員三進ICU,程序員是不是都很辛苦
程序員確實是一項比較苦的職業,經常性的加班,長時間對著電腦易疲勞,還有工作上的壓力。
一位二十多歲的程序員,體重達到了三百多斤,因為糖尿病幾次住進ICU。這位程序員三次住進ICU,主要是因為他體重過重,身患糖尿病,這名程序員家裡條件較好,又是家中獨子,父母比較溺愛,在上大學的時候,體重就已經達到了三百多斤,然後以每年十斤的速度在遞增。他幾次住進ICU,可能跟他程序員的工作並沒有多大關系,但是程序員確實是一項很辛苦的工作。因為工作的性質需要不定時的加班;長時間對著電腦讓身體感到很勞累;同時如果遇到解決不了的問題,也會造成很大的精神壓力。
三、程序號確實辛苦,長時間對著電腦,缺少運動。
程序員這個職業使用的主要工具就是電腦,長時間對著電腦,讓眼睛跟身體都很容易感到疲勞,同時因為長時間坐著,身體缺少運動,也很容易產生肥胖等各種各樣的疾病。
❷ 如何在VS2015中集成QT5.5
1. 首先,我們下載源碼包,加壓源碼包到磁碟。
2. 由於編譯QtWekbit需要ICU andANGLE 庫,ICU庫需要單獨下載和編譯,下載ICU4Cversion 56.1並解壓到磁碟,目錄位置參見隨後說明。
3. 在Qt 5.5.1的源碼包中還存在一個BUG,如果直接編譯的話在編譯QT3D模塊的時候會報沒有找到Zlib.h的錯誤而中斷編譯,所以參照如下提示修改qt-everywhere-opensource-src-5.5.1\qt3d\src\3rdparty\assimp目錄下的assimp.pri文件。可參考地址codereview.qt-project.org/...mp.pri。
4. 在編譯QT5.5.1之前還需要安裝配置一下的工具和環境:
5. 經過上面的步驟可以開始進行編譯ICU4C version 56.1和QT5.5.1的源碼了
6. 如果以上的配置都正確的話開機讓機器編譯幾個小時後就可以在目標路徑下生成QT5.5.1的運行文件。
❸ 用MATLAB和C++2008混合編程,出現MATLAB:I18n:MissingICUData - ICU data not found
你這個錯誤據說是常見發生在安裝過多個版本的matlab的系統上的,你最好用一個純凈系統來弄。還有一個可能就是32位和64位的問題。
只是很奇怪,如果你追求時間空間效率,就純用C++,C++很多計算的庫。要是只是需要調度或者粘合matlab腳本,用腳本語言多好,何苦用C++?
❹ ICU(International Component for Unicode)有什麼作用
International Component for Unicode (以下簡稱 ICU)
是一套穩定成熟、功能強大、輕便易用和跨平台支持Unicode 的開發包,使得開發人員在 C/C++ 和 Java
上開發全球化軟體產品更容易,ICU 是由 IBM 發布和維護,並且是開放源代碼的。
ICU
可以根據客戶端的語言環境給客戶返回最接近語言的字元串,也就是說客戶端可能與伺服器端的語言環境不一致,不能只根據伺服器端的語言來返回字元串。而且將
來單獨增加或維護資源文件,不需要重新生成可執行文件或動態鏈接庫。為了提高重用性,最好將所有資源信息統一管理,不是每個模塊各自維護管理。如下圖1所
示:
http://www.ibm.com/developerworks/cn/opensource/os-mfc2icu/index.html
而 Microsoft Foundation Class(以下簡稱
MFC)是資源和程序模塊合在一起的,即每個模塊下都有多個資源文件路徑,如 neutral、en-US、ja-JP 和 zh-CN
等,它們分別代表與語言無關不需要翻譯的、英文、日文和簡體中文等資源信息,每個資源路徑下都有個擴展名是 .RC
的文件,里邊存放的是相應語言每個標識(ID)對應的字元串。每次編譯都是將所有的語言字元串和源代碼一起生成看執行文件或動態鏈接庫。當運行時只能根據
所在系統的語言環境返回相應的字元串。如下圖2所示:
圖2:MFC 資源管理框架示意圖
由此可見,ICU 更靈活,可以支持不同語言之間的交流,而且維護更容易,再增加額外的語言也方便,幾乎不用修改源代碼,並且 ICU 是跨平台的,不僅僅可以用在 Windows 上,也可以用在 linux、AIX、Solaris 和 HP-UX 等系統上。
要用 ICU 資源架構升級已有 MFC 資源架構,主要考慮兩個方面:一是要提取各個模塊下所有的字元串信息到 ICU
的資源文件;再就是要更新源程序中調用資源的介面(API),在 MFC 資源管理架構中,用的是的 LoadString
函數去讀取相應語言的字元串,我們可以用 ICU4C 的 getStringEx 或 getStringByKey 函數替代
LoadString。
對不同的語言環境(Locale),ICU 可根據不同的 Locale 參數自動使用最恰當的資源包(Resource Bundle)。
ICU 還支持回退(Fallback)機制,盡可能返回用戶最接近的語言,例如在簡體中文環境下,按優先順序依次查找
gb18030.res、_gb18030.res、zh_Hans_CN.res、_zhHans_CN.res、zh_Hans.res、
_zhHans.res、zh.res、root.res 和 _root.res 資源包文件,root 是根資源,一般就將英文資源作為根資源。
回頁首
2 用 ICU 實現對 MFC 資源架構的升級
2.1 對原有 MFC 資源架構中資源信息的提取
MFC 資源模塊有特定格式的資源文件,例如有個模塊 zh-CN 目錄下 rational.rc 文件內容如下:
//Microsoft Developer Studio generated resource script.
//
#include "..\resource.h"
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_EXCEPTION "發生異常。\n"
IDS_ERR_FAILURE "登錄失敗:"%_ARG_%"\n"
END
該資源對應的語言可以根據目錄獲得,ICU 只需要 STRINGTABLE 部分就可,即所有以 STRINGTABLE DISCARDABLE BEGIN開始,以 END 結束部分是我們需要提取的,每個標識(ID)的值在 ..\resource.h 中已定義,如:
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by rational.rc
//
#define IDS_ EXCEPTION 18001
#define IDS_ERR_FAILURE 18002
可以開發出一個自動腳本去提取所有模塊下的標識(ID)和字元串到一個以 UTF-8 編碼的 ICU 格式的資源文件,例如簡體中文資源結果如下:
zh:table {
// String resources from rational/resource.h
// Message id range: 18001 18002
// IDS_EXCEPTION
18001:string { "發生異常。\n" }
// IDS_ERR_FAILURE
18002:string { "登錄失敗:"%_ARG_%"\n" }
}
還要考慮到 ICU 的回退(Fallback)機制,將英文的定義為根(root)資源比較好,這樣英文的 ICU 資源文件就以 root:table { 開頭。
再用 ICU 的資源生成工具 genrb 將不同語言提取出來的文本文件轉換成 ICU 可讀的二進制資源文件,如:
genrb -e utf-8 -p rational -k rational_zh.txt
這樣做成功之後,這些提取出來的資源就可以被 ICU 介面函數調用了。每種語言對應一個資源包,將來要想維護或增加新的語言包,就用類似的方法,不需要重編譯核心模塊代碼了。
2.2 從 MFC資源架構到 ICU 資源架構介面的轉換
有了上面提取出來的 ICU 資源包之後,接下來就是讓源程序中使用 MFC LoadString 函數的都用 ICU
資源讀取函數了,可能會有很多處 LoadString,可以用 C++ 宏(Macro)編譯預處理這個簡便的方法,來達到替換所有的
LoadString。然後我們可以開發出新的利用 ICU 獲得資源的函數 ICULoadString(int uID, CString
value) 如下:
#include "unicode/ures.h"
BOOL ICULoadString(int uID, CString value)
{
UErrorCode err = U_ZERO_ERROR;
int32_t len;
char uID[8];
// ICU 根據客戶端的語言環境打開相應的資源包
UResourceBundle *urb = ures_open(getResPath(), getUserDesiredLocale(), &err);
if (U_FAILURE(err)) {
return FALSE;
}
// 用 ICU 函數獲取該標識對應客戶端語言環境的字元串
sprintf(uID, "%d", ID); // Convert the integer ID to a decimal string
value = CString(ures_getStringByKey(urb, uID, &len, &err));
if (U_FAILURE(err) || value.IsEmpty()) {
ures_close(urb);
return FALSE;
}
ures_close(urb);
return TRUE;
}
Locale 參數可以在客戶端剛連接或會話初始化(Session
initialization)時,就得到客戶端的語言環境信息,程序中就可隨時通過getUserDesiredLocale()
函數獲取該信息,這樣就實現了 ICU 根據客戶端語言環境返回客戶最想得到的語言信息。
回頁首
3 總結
使用 ICU
庫可以簡化我們的工作,更好的滿足了我們的全球化產品需求,而且可靠穩定,也利於將來維護和升級。想要增加更多的語言,不需要為此重新編譯可執行文件或動
態鏈接庫,只要有相應語言的 ICU資源包即可,而且會使產品的層次化和模塊化更好,減小了可執行文件或動態鏈接庫的大小,性能也會更強。
回頁首
提示
1). 注意 ICU 在對簡體中文和繁體中文使用回退機制的時候都有可能會在使用 root 資源之前會合都去查找 zh 資源,注意避免不恰當的讀取。
2). 在 ICU 3.4 以後的版本推薦使用包(Package)代替文件或路徑名構造或打開資源包,即先用 genrb 命令編譯文本文件到
ICU 資源文件,然後使用 pkgdata 命令再將 ICU 資源文件轉成包數據文件,這樣在打開資源包之前先使用 udata_setAppData 或 udata_open 裝入包數據即可。ICU 自帶的示例 ufortune 是一個利用資源包的好樣例。
❺ android 怎麼使用icu
如果只是測試修改後效果,執行步驟A即可;如果需要build後生效,則需要執行全部步驟
A. 在臨時目錄中編譯ICU資源
1. 在external/icu4c下新建臨時目錄icubuild,進入icubuild目錄
$mkdir external/icu4c/icuBuild
$cd external/icu4c/icuBuild
2. 執行icuConfigureRun Linux命令,生成make文件
$.././runConfigureICU Linux
3. 執行make -j2命令,
$make -j2
對於GB版本,如果make -j2出錯,需要用mtk提供的文件(Android 2.3 make-j2 ERROE.rar)替換(需要備份原文件)。
4. 將生成的external/icu4c/icuBuild/data/out/tmp/icudt44l.dat push到手機測試
$adb remount
$adb push external/icu4c/icuBuild/data/out/tmp/icudt44l.dat system/usr/icu/
$adb reboot
ICS對應的是icudt46l.dat,
JB以及以後版本是icudt48l.dat
B. COPY所需文件
1、將第一步生成的externalicu4cicubuilddataout mpicudt44l.dat復制到externalicu4cstubdata下並改名為icudt44l-all.dat,覆蓋原來的同名文件。
2、對於GB版本,從ICS工程上拷貝路徑prebuildlinux-x86icu-4.4文件夾,放到相應的路徑下
ICS版本是icudt46l.dat和icudt46l-all.dat
JB及以上是icudt48l.dat和icudt48l-all.dat
C. 配置環境變數
重新配置環境變數(如果不配置正確會導致執行腳本出錯)。以我的系統為例,配置過程如下:
1. 在終端中進入/proj/mtk71491/Desktop/GB/alps目錄即:
$cd /proj/mtk71491/Desktop/GB/alps
2. 然後執行腳本(等價於./ build/envsetup.sh):
$source build/envsetup.sh
3. 配置環境變數(注意「=」前後不要有空格)。
$export ANDROID_EABI_TOOLCHAIN=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/(JB2以及以上不執行此步驟)
$export LD_LIBRARY_PATH=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/icu-4.4/(JB以及上以跳過這一步)
$export ANDROID_BUILD_TOP=/proj/mtk71491/Desktop/GB/alps/
執行完沒有任何提示說明配置成功。
D. 執行腳本,重新生成.dat文件
執行腳本,如果遇到文檔印尼語錯誤請用MTK提供的腳本(icu_dat_generator.rar)替換後再執行,如下所示:
1. 進入/proj/mtk71491/Desktop/GB/alps/external/icu4c/studdata目錄
$cd external/icu4c/studdata
2. 執行腳本
$./icu_dat_generator.py 4.4 (ICS及以後版本執行$./icu_dat_generator.py)
如果該腳本執行成功,則會更新一遍stubdata下的icudt44l-**.dat這些文件,如果看到這些文件的修改時間變成了最新的時間,就說明已經重新生成真正最後起 作用的是icudt44l-large.dat這個文件。
ICS版是icudt46l-default.dat
JB以及以上是icudt48l-default.dat
E. 重新編譯工程
一般修改後都是重新編譯工程來測試效果,使用remake android命令即可.
F. 如果執行./icu_dat_generator.py報以下錯誤
Traceback (most recent call last):
File ./icu_dat_generator.py, line 296, in
main()
File ./icu_dat_generator.py, line 261, in main
icu_version = re.sub(r([^0-9]), , os.path.basename(input_files[0]))
IndexError: list index out of range
可能是環境變數沒有配置好,請使用絕對路徑,而不是相對路徑。