- 新電池第一次使用,請參照說明書充電(有的必需12個小時以上,沒有寫的就不用)。
- 不要短時間重複充放:
也就是電源常常插拔,這樣對電池的壽命很傷。如果你需要拿著NB在辦公室移動,可在電池量45%以下時再進行完整充電(充飽)。BIOS用電在關機且拔電源線情況下會消耗少許電力,建議短期關機時盡量不要把插頭拔掉以免讓電池形成重複充放電。
- 避免過度放電:
所有的電池都會自然放電,過度放電是很傷電池的。所謂的過度放電就是一直用到 0% 斷電後後才充電,基本上用到剩餘 5%-10%就應該充電。習慣NB不裝電池的人,要記得給電池進行放電(使用)後到5%-10%再充飽,以免擺到壞。電池充飽時電壓較高, 低電量時電壓較低. 如常在低電量(=低電壓)狀況下使用, 因機器需較高之電壓下, 從電芯內需"抽取" 較高之電量來支應, 此對電芯較傷, 壽命就會變短。 - 避免長時間充飽電:
需長時間關機時(>12小時),插著電會自然放電,但長時間放電低於臨界值又會在充電,維持在充飽狀態,請記得每次都把變壓器接頭拔掉,或關掉電源,以避免電蕊活性鈍化或結塊。而過度充電,則有些人誤解,以為插著電就是一直在充電,現在的NB都有控管電源,當電池充99%時就會停充,待電池電力''自然消耗''降至94%時才啟動充電。所以插著電池使用不會過度充電,但一樣需避免長時間充飽電。 - 盡量不要快速充放電:
慢速充放電較能保障電池壽命。用電池時盡量不要用高效能模式,高效能+高負載運算,造成大量電力於一個小時內放盡這是過速放電,這造成的傷害不下於過度放電。如果長期拿筆電電池的電力來看DVD, 其壽命就會較短。開機充電比關機充電來的穩定,關機充電時前80%可在一個小時內完成,剩下的20%卻要衝一個半至兩個小時,這是因為前段採用大電流高速充電。而開機時充電因為電源供應器必須同時應付,主機 + 電池,所以電池的充電供應會被主機分食,流進電池的電力變成了慢充。 - 記得每週至少要放電一次到10%以下:
也就是用到低電量指示後,再充飽進行一個完整的循環。但不必每次電池充飽就只用電池,用完就充,一天來回1-2次cycle,一年下來就 500次以上了,其實如此過度使用,很快就超過電芯的充放次數了。 - 若長期不使用電池,應將電池充電或放電至60%保存,並定期取出使用,以保持電池的化學活性,最好約一個月就將電池做一次充放電,然後再充電保存在低溫、乾燥壞境中。
- 有些NB可以用軟體藉由韌體來控制充電的臨界值,比如充電至90%停止充電,低於45%才開始充電,不用手動控制變壓器接頭,可以自動延長電池壽命。
sevenjay的技術文章
2011年11月28日星期一
Notebook電池使用習慣
2010年6月17日星期四
ASSERT的使用時機
ASSERT全大寫表示它是全域的。它是一種假設,當假設不成立時,程式就得全部中止。且只作用在Debug時,為的就是讓你在Debug時可以更快地寫程式、找出錯誤。Release時會不會假設就不成立了?有可能,但通常寫程式Debug時就會出現ASSERT出錯的情況,在此時就會快速的發現錯誤,如果Relese版本才出錯,就是考慮的不夠嚴謹,有些ASSERT沒有設定,或是某種情況Relese版才出現。此時更需要Unit Test配合。
寫程式需不需要到處都先假設?
被呼叫端的函式比如fun(obj * o);就必須成立一假設ASSERT(NULL!=o);
為何不return error code或throw exception,要考慮的是上層有沒有檢查就呼叫。通常是會檢查的,就沒有返回錯誤碼或丟例外的必要,但並不能保證。
如果上層要檢查那上上層要不要檢查?在每一層都必須檢查是無謂的。
通常一個軟體設計會分成三個模組,也就是所謂的MVC,是指模組而言。在程式邏輯可分成Controller、UI、Library三層,是有點類似的。Controller呼叫UI和Library,而UI傳送使用者event給Controller。在大型的軟體,可能Controller上還會有一個總體的Controller,Library可能還會呼叫別的Library。
實際的程式可能是C1->C2->L1->L2->L3,UI可能由C1整合(C1<->UI),
設有一程式輸入名子就可以知道工作時數來取得Payment(薪水、股票)
UI(input)<->C1->C2->
fun1(string name)->fun2(int work_time)->fun3(Payment * pay);
fun1就必須有ASSERT(!name.IsEmpty());
fun2就必須有ASSERT(work_time>0);
fun3就必須有ASSERT(NULL!=pay);
在此情況*下L1,L2,L3都必須ASSERT,而C1或C2就必須檢查避免傳遞無效名子。Controller會去使用UI跟Library,被呼叫端UI跟Library就必須要假設是被正常使用。
但Controller不能有ASSERT,因為它不能有任何的假設情況,必須把會發生的都考慮進去,遇到不正常的時候就阻擋。而被呼叫端都必須要確認情況是成立的才能繼續執行。煩惱就交給上層,下層就只要假設就好了。
C++ 編程規範70提到error有三種:
- Precondition(前條件)
- Postcondition(後條件)
- Invariant(不變性)
書中講得很清楚,在此不重述。只有不變性比較抽象,不變性就是滿足一個有效狀態(valid states)物件的條件。比如說一個有帳號、密碼的物件,帳號和密碼必須是成對且正確對應的,其中一個有錯就是error、無效狀態。這很明顯不該使用ASSERT來保證*。
書中說到Postcondition也可用ASSERT來確認:
"假設你呼叫某個API函式,其文件說它總是返回正值,但你懷疑該函式有臭蟲,那麼你可以在呼叫該函式後使用assert驗證其結果。"
這我認為是多餘的,不是很建議。當此API函式出錯有兩種解法:
- API可以修改:修改API錯誤,但不管Debug還是Release時還是要再確認。
- API不可修改:此時也不能用ASSERT中止,且Release版本也不希望出現這個錯誤,當然是由上層想辦法檢查繞過來解決。
不管Debug還是Release時,你還是得再一次確認結果是你所預期的,此時可搭配Unit Test來確認。要不然就是上層自行檢查來避開,沒有必要用ASSERT。Postcondition真的有需要ASSERT時,我覺得只有在驗算的時候,比如設計類似Excel的軟體,寫了兩個演算法來計算同樣的數學式,一個是用來驗算,而且只有Debug版本會算兩次比較慢,不相等的話就一定是其中一個有錯。
總結ASSERT的使用時機:
- Precondition
- 當你寫的程式是被使用的UI或Library,請多多利用ASSERT來防範吧。
*這只是假命題,fun1也可以接受空名子再處理,fun2可以用unsign int限制,fun3也可以傳reference防null物件,所以實際上用到ASSERT的情況不多。
*不要用ASSERT報告執行期錯誤[C++ 編程規範68]。
2010年5月23日星期日
安裝設定Wine執行Zoundry Raven
請先參考 [教學] 圖解 wine 入門 來安裝wine、cabextract,不用裝ies4linux,以winetricks裝ie6、msxml3、mfc40、mfc42、wininet。
打開Configure Wine,還需要用到Windows的shlwapi.dll,在libraries頁中新增輸入shlwapi,之後將c:\Windows\system32目錄下的shlwapi.dll複製到~/.wine/drive_c/Windows/system32下,可以覆蓋。
請勿安裝1.1.42版本,在編輯區會沒有滑鼠游標,害我重裝了一整天也沒用......><",後來才知道是bug。
後來裝了1.2-rc1版,又遇到一個bug,某些地方字型無法平滑化,目前無解,尚可執行就勉強用了。請看最後有解決了。
之後以下例的方式新增字型:
將/usr/share/fonts/中要新增字型檔案連結到~/.wine/drive_c/windows/Fonts
修改./wine/system.reg 全部替換成自己要的字型。
[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes]
"Arial CE,238"="PMingLiU"
"Arial CYR,204"="PMingLiU"
"Arial Greek,161"="PMingLiU"
"Arial TUR,162"="PMingLiU"
"Courier New CE,238"="PMingLiU"
"Courier New CYR,204"="PMingLiU"
"Courier New Greek,161"="PMingLiU"
"Courier New TUR,162"="PMingLiU"
.....
修改視窗亂碼:
修改./wine/system.reg
[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink]
"Lucida Sans Unicode"="DroidSansFallback.ttf,Droid Sans Fallback"
"Microsoft Sans Serif"="DroidSansFallback.ttf,Droid Sans Fallback"
"PMingLiU"="DroidSansFallback.ttf,Droid Sans Fallback"
"SimSun"="DroidSansFallback.ttf,Droid Sans Fallback"
"Tahoma"="DroidSansFallback.ttf,Droid Sans Fallback"
字型平滑化:
修改./wine/user.reg
[Control Panel\\Desktop]
"DragFullWindows"="0"
"FontSmoothing"="2"
"FontSmoothingGamma"=dword:00000578
"FontSmoothingOrientation"=dword:00000001
"FontSmoothingType"=dword:00000002[Software\\Wine\\X11 Driver]
"ClientSideAntiAliasWithCore"="Y"
"ClientSideAntiAliasWithRender"="Y"
"ClientSideWithCore"="Y"
"ClientSideWithRender"="Y"
"Managed"="Y"
執行畫面:
另外可考慮安裝Wine-doors來使用其他程式。
1.2-rc1版某些地方字型無法平滑化,最後跟據回報bug頁的解法是說不是wine的問題,可能是我裝在9.04上的關係吧。
新增一檔案~/font.conf,輸入以下內容就可以了。
<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font" >
<edit mode="assign" name="rgba" >
<const>rgb</const>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="hinting" >
<bool>true</bool>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="hintstyle" >
<const>hintmedium</const>
</edit>
</match>
<match target="font" >
<edit mode="assign" name="antialias" >
<bool>true</bool>
</edit>
</match>
</fontconfig>
2010年5月5日星期三
自訂Beagle搜尋rar、big5編碼txt
- 但是如果是rar壓縮檔裡面的資料就找不到。
- 搜尋中文時,以前是big5編碼的純文字內容就會找不到,我有不少以前的資料是用big5存的阿。
安裝完Beagle後,到/etc/beagle新增external-filters.xml加入資料如下:
- <?xml version="1.0" encoding="utf-8"?>
<external-filters>
<filter>
<mimetype>application/x-rar</mimetype>
<extension>.rar</extension>
<command>rar</command>
<arguments>lb %s</arguments>
</filter>
<filter>
<mimetype>text/plain</mimetype>
<!--mimetype>application/gedit</mimetype-->
<extension>.txt</extension>
<command>iconv</command>
<arguments>-f big5 -t utf-8 %s</arguments>
</filter>
</external-filters>
beagle-config --beagled-reload-config
就可以了。
但是之前已經index過得檔案就不會重新index喔,所以當然還是找不到,把舊index刪除 ,重新index就可以了。
如果你不確定增加external-filters有沒有成功,可以試試以下指令來確認:
- beagle-info --list-filters
- FilterExternal - Version 10 (/usr/lib/beagle/Filters/Filters.dll)
- MimeType: application/x-rar
- Extension: .rar
- MimeType: text/plain
- Extension: .txt
- beagle-extract-content --show-generated test.rar
beagle-extract-content --show-generated test.txt
.doc裡面的中文搜尋不到,目前不急用就先不解了。
參考:
http://www.linux.com/news/software/applications/254610:desktop-search-engines-compared
http://beagle-project.org/ExternalFiltersRepository#Rar_filter
http://osdir.com/ml/dashboard-hackers/2010-03/msg00006.html
2010年2月3日星期三
在windows單機上使用rsync備份
安裝完之後,並沒有將rsync所需環境參數設定進系統,而是寫在範例檔C:\Program Files\cwRsync\cwrsync.cmd。把指令寫在範例檔最後,直接執行即可。
rsync -av --delete /cygdrive/c/Temp/test/ /cygdrive/c/Temp/test2/ >>test
rsync -av --delete-after --exclude-from=rsync_exclude.txt /cygdrive/d/ /cygdrive/z/company/ >rsync3.log
rsync_exclude.txt內容範例
#System file
RECYCLER/
System Volume Information/
Thumbs.db
#no use data
not sync/
*.obj
*.pch
*.ncb
*.bsc
*.ilk
*.pdb
2009年12月7日星期一
在 windows mobile 使用 log4net
我自己的步驟如下:
- 下載log4net解壓縮,複製bin\netcf裡dll檔案到專案。在專案加入 Reference: log4net.dll
- 設定log4net設定檔
重要: -
- Net CF的log4net設定檔不支援中文註解
- 一定要包含在<configuration>...</configuration>
- 引入using
using log4net; - 在程式一開始的地方去解析 log4net 的 configuration.
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("logconfig.xml")); - 接著在你想要進行 log 的類別宣告這一個屬性.
protected static readonly ILog log = LogManager.GetLogger(typeof( your_class_name )); - 使用時Debug < Info < Warn < Error < Fatal
log.Info( "your message here." ); - 可以利用 log4net.Repository.ILoggerRepository r = LogManager.GetRepository();去看 r.Configured 屬性,如果是 false,表示沒設定到。
不使用設定檔的方式,上述步驟略過2、5,在6之後加入以下設定程式
log4net.Appender.RollingFileAppender a = new log4net.Appender.RollingFileAppender();
a.Name = "RollingFileAppender";
a.File = "log.txt";
a.AppendToFile = true;
a.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size;
a.MaxSizeRollBackups = 3;
a.MaximumFileSize = "1KB";
a.StaticLogFileName = true;
a.Layout = new log4net.Layout.PatternLayout(@"{%level}%date{MM/dd HH:mm:ss} - %message%newline");
a.ActivateOptions();
a.Threshold = log4net.Core.Level.Debug;
log4net.Config.BasicConfigurator.Configure(a);
Reference:
在 multi-thread 的環境當中使用 log4net
log4net (史帝芬心得筆記)
log4net-configuration-for-rockin-loggin-part-2
2009年12月2日星期三
Windows Mobile 6.x Emulator 在 VirtualBox 的連線方式
我自己的步驟如下:
- 在Guest OS安裝MS Loopback 網卡 http://support.microsoft.com/kb/839013/。
- 在Guest OS將Bind到Host網卡的那張網卡上啟用網路共用(Internet Connections Share,ICS)。此時在Guest OS中的MS Loopback網卡會自動連線,IP將會被強制設為192.168.0.1,Subnet mask為255.255.0.0
- 在Guest OS安裝Virtaul Machine Network Service安裝後請記得要重新開機。原下載已移除,可以安裝MS Virtual PC 2007,或找其他載點。
- 開啟WM6模擬器在工具列中的File>Configure..>network Enable NE2000 PCMCIA adapter and bind to :Microsoft Loopback adapter-Virtual Machine network service,Reset WM6。
- 再回到Start>Settings>Connections>Connections>Advanced>Select Networks>確認Programs that automatically connect to Internet 是設定為My Work Network。應該可以正常使用Mobile IE連上Internet了。

Reference:
Mobile 6.0 Emulator在Virtual PC 2007的連線問題
