大杂烩, 硬盘安装Linux
http://antkillerfarm.github.io/
SQL與數據庫
這幾天看到了這篇文章:
http://www.cnbeta.com/articles/104987.htm
之前許多課本中的概念頓時浮現在眼前。曾幾何時,SQL成了數據庫的同義詞,以至于離開SQL就沒法操作數據庫了。但其實SQL所代表的關系型數據庫,只是數據庫的一類而已。除此之外還有很多其他類型的數據庫。
Oracle的廣告詞,給當時尚在學校的我產生了這樣的錯覺:“只有數據庫,才是處理大量數據的最好方法?!敝钡胶髞黼S著自己技術的進步,才知道這樣的想法是如何的荒謬。
一個身邊的例子,有一次我們需要處理一批數據,在使用數據庫的情況下,需要2天才能處理完,峰值時內存的占用接近4G。但這還不是最糟的,關鍵的問題是以后數據的規模會越來越大,一旦內存占用超過4G,舊的32位硬件軟件就不夠用了。(當時我們對硬件了解的不多,不知道Intel X86有PAE模式,以為4G就是32位PC的極限了,其實不然。)
于是,有位同事說,這批數據雖然量大,但規則并不復雜,干脆用最原始的寫文件來做吧。結果2天的處理時間縮短為1天,內存占用減少為300M。其實這也沒有什么神奇的,一般的關系型數據庫通常由三部分組成:SQL解釋器、事務引擎和存儲查詢引擎。如果能夠根據具體情況,去掉前兩部分,并對第三部分進行優化,完全可能比Oracle做的更好。畢竟在軟件這個領域并不存在超現實的東西,Oracle再牛也是跑在相應的硬件、軟件之上的,少不了要和CPU、內存、硬盤打交道。
結論:不要太過依賴數據庫,有的時候沒有數據庫,更快,更簡單。
Symbian開發
1)試著裝好了Carbide c++以及S60 3rd SDK后,卻發現不能在C盤以外的地方建工程(在默認的C:\Symbian\Carbide\workspace之外建工程是可以的),真沒想到Nokia出的工具還有這樣不友好的限制。
PS:它的說明說工程要和SDK放在同一個盤中,結果我把SDK裝在E盤,結果還是在C盤建工程可以,在E盤建不行,而且多次安裝之后,我的系統崩潰了,郁悶,這個系統用了2年,都沒有重裝…
2)Symbian S60 2nd 和 3rd 的區別
http://www.opda.com.cn/viewthread.php?tid=182217&page=1#pid3004888
3)Carbide c++的一個小BUG
如果在開始利用向導生成代碼時,沒有選擇armv5或gcce,而只選擇了模擬器的情況下,在代碼生成之后,再添加armv5或gcce的話,是不能自動生成sis文件的,可以在Project->Properties->Carbide c++->Build Configurations->SIS Builder中添加。
Sqlite
《Inside Sqlite》是最好的參考書,目前已經有人把它翻譯成中文,可以在CSDN上找到。
《SQLite Optimization FAQ》另一篇很好的文章。
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
關于編譯和使用的問題,寫的最好的是以下兩篇:
http://www.99inf.net/SoftwareDev/VC/39396.htm
http://www.cnblogs.com/giszhang/archive/2008/10/09/1307509.html
WebKit
WebKit的代碼可以從它的官網www.webkit.org下獲得。
在以下網頁可以獲得webkit向各種GUI移植的相關信息。
http://trac.webkit.org/wiki
由于獲得的代碼比較新,所以在linux平臺下常有一些組件由于過于古老而導致編譯失敗。所以需要使用yum或者apt-get之類的工具從網上更新相關的組件。這里不推薦使用RHEL或者CentOS之類的服務器版本,因為服務器版本為了追求穩定性,不但組件不是最新的,就連網上的組件源也不是最新的。
可以使用ubuntu 9.04桌面版,不過里面缺少很多開發用的組件,除了
http://trac.webkit.org/wiki/BuildingGtk
列出的之外,還有不少組件需要下載。主要有:
1)autoconf
2)libtool
3)gtk-doc-tools
4)libgail-dev
Apache與CGI
本來以為CGI編程會比較復雜,沒想到從原理的角度,似乎比之前的JSP還要簡單一些。這次主要是用C來編寫CGI,使用的web服務器是Apache 2.0.55。網上看到了幾篇同類的文章,但大多過于簡略,有的甚至頗有錯誤,所以自己就重新寫一篇吧。
1)配置httpd.conf
如果是默認安裝的話,只要將
AddHandler cgi-script .cgi
改為
AddHandler cgi-script .cgi .exe
即可。其他的完全不用改,只要你將后面編好后的.exe放到默認的cgi-bin中就行了。如果你要將.exe放到其他路徑下的話,ScriptAlias和Options ExecCGI會派上用場。(詳細的用法,翻手冊查吧!)別忘了修改了配置之后,要重啟Apache。
2)最簡單的例子
#include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char* argv[]) {char buf[256];char *req;printf("Content-type: text/html\n\n");printf("");printf("hello world!");strcpy(buf,"HTTP_ACCEPT");req = getenv(buf);printf("%s",req);strcpy(buf,"HTTP_REFERER");req = getenv(buf);printf("%s",req);strcpy(buf,"QUERY_STRING");req = getenv(buf);printf("%s",req);printf("");return 0; }網上的例子只有輸出,沒有輸入,其實不算好例子。用VC之類的編譯器編好后,放到cgi-bin中,在瀏覽器中輸入以下地址http://localhost/cgi-bin/cgi.exe?abc就可以看到效果了。還有printf("Content-type: text/html\n\n");是一定要有的,沒有的會報HTTP 500的錯誤,有的例子中說printf("\n");就行了,這是不對的,至少在默認配置下,這樣做的結果是你可以下載該.exe,但不能把它當做CGI來執行。
從這個例子,以及Apache官方的例子(http://httpd.apache.org/docs/1.3/howto/cgi.html)
#!/usr/bin/perl print "Content-type: text/html\r\n\r\n"; print "Hello, World.";中可以看出,Apache的作用其實是重定義了這些CGI程序的標準輸入輸出,以及設置了一些系統變量。這才是它支持多種編程語言編寫的CGI的真正原因,試想還有哪種語言不支持標準輸入輸出呢?
可以在http://www.boutell.com/cgic/中獲得CGIC的代碼,這是一個C寫的CGI開發庫,本文的示例就是在這個庫的代碼的啟示下寫出來的。
3)Linux下的Apache目錄結構
Windows下Apache的各個目錄都放在一起,因此使用起來比較方便,而Linux下Apache的各個目錄分散在各個地方不是太好找,特記錄一下,以作備忘。
conf在/etc/apache2下,但是Linux下的httpd.conf實際上是個空文件,它的內容被分散到該目錄下的其他文件中。
cgi-bin在/usr/lib/cgi-bin下。
bin下的文件在/usr/sbin下可以找到。
modules在/usr/lib/apache2下。
如何在bat文件中編寫腳本,使得啟動命令行之后,能在命令行下執行命令?
cmd /k dir
如上所示的命令,在啟動命令行之后,會在命令行下執行dir命令。
Visio
如何保存成圖片
1.選中打算保存的區域。
2.“文件”->“另存為”。
3.如果需要縮放的話,調整保存的大小即可。
內存數據庫
如GemFire。
硬盤安裝Linux
2013.9
最近重新開始研究Android和Linux,由于已經快2年沒有弄過了。因此之前下載的linux發行版也不打算再繼續用了,省得到了Android開發的時候還要更新一大堆的包。
看了一下Google官網上對于Android source的編譯條件,再結合2年前編譯Android 2.2(Froyo)的經驗,在虛擬機上跑Linux的方案首先被排除。開玩笑,16G的RAM/SAWP的開銷,哪是VM能搞得定的。就連Froyo在虛擬機上都編不過去,何況是4.3(Jelly Bean)了。
2年前編譯Froyo,用的是Wubi安裝的Ubuntu 10.04。這次看了一下Jelly Bean的編譯條件,100GB+的空間。忽然覺得做軟件這么多年,還從來沒有在PC上認認真真的安裝個雙系統用用,實在是職業生涯的一個污點。于是在下載了Ubuntu 12.04之后,老老實實的在網上搜索起如何硬盤安裝的辦法來。
之所以選擇硬盤安裝,其實實在是覺得刻張盤太麻煩了。如今就連賣本本的廠商都不提供Recovery CD,而改用Recovery分區來恢復系統。想來硬盤安裝Ubuntu也早無技術難度可言了。
硬盤安裝的步驟如下:
1)EasyBCD和ISO
2)
title Install Ubuntu root (hd0,0) kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-11.10-i386.iso ro quiet splash locale=zh_CN.UTF-8 initrd (hd0,0)/initrd.lz3)
把準備好的iso用壓縮軟件或者虛擬光驅打開,找到casper文件夾,復制initrd.lz和vmlinuz到C盤,然后在把iso也拷貝到C盤。
4)
sudo umount -l /isodevice
5)
安裝好之后,沒有GRUB開機菜單的話:
sudo -i mount /dev/sda7 /mnt grub-install --root-directory=/mnt /dev/sda下面針對最近幾天的安裝實踐,做一個總結性的概括:
1)剛開始的時候,由于不熟悉Ubuntu 12.04的安裝步驟,選擇了錯誤的選項,發現之后中斷系統安裝。重啟,結果不但Ubuntu沒有安裝好,就連Windows也進不去。這時由于之前沒有刻錄Live CD的原因,只好使用Recovery分區恢復Windows系統。
2)我的本本是ASUS的,在開機時候按住F9,即可啟動一鍵恢復功能。由于這個功能也是第一次使用,因此當選擇將Windows恢復到第一個分區,并在恢復過程中出錯的時候,我選擇了重啟。然后選擇將Windows恢復到一個硬盤。。。結果除了Recovery分區之外的所有分區都被刪除了。保存在電腦中的數據也全部丟失??磥硌b系統始終是件危險的工作。安裝之前一定要將重要數據備份到移動硬盤上。
3)ASUS的一鍵恢復功能,會重啟機器若干次,且每次的畫面高度雷同,因此很讓人覺得是不是機器陷入了有問題的死循環之中。在反復折騰幾次之后,我也泄了氣,任由它先無限重啟下去。后來大概是重啟到第4次之后,我發現桌面的分辨率有改變,然后才意識到這些重啟估計是正?,F象,并不是死循環。
4)Ubuntu的虛擬內存使用的是交換分區的方式,而不是Windows的交換文件。因此要單獨劃一個分區用于虛擬內存的數據交換。
5)Win7的壓縮卷功能對于系統分區不好使,由于有不可移動的數據存在,系統盤最小也要460G(硬盤總共1T),這實在是太大了??梢允褂肁cronis Disk Director Suite調整系統分區的大小。但是需要注意的是,Windows下的分區工具對分區數量的調整,會影響到GRUB的執行,需要通過grub shell的命令切換到Linux下,然后執行grub update,方可恢復正常。而Linux下的分區工具(如GParted)就沒有這個問題。
6)GParted在調整分區大小,主要是分區首地址右移方面,執行效率非常慢。Acronis Disk Director Suite沒試過,沒準會好些。
7)分區的話題說完了,繼續談談對Linux啟動過程的心得。會提到一些名詞,但是不會展開來說。首先是BIOS和UEFI。它們決定從哪個存儲介質啟動。
8)MBR的結構。MBR決定了一個介質最多只有3個主分區和1個擴展分區。一個擴展分區可包含若干個邏輯分區。
9)GRUB和LILO。
10)initrd和vmlinuz。initrd包括image-initrd和cpio-initrd。zImage和bzImage的區別和作用。
11)在逛Ubuntu軟件中心的時候,發現了Batttle of Wesnoth這個開源的回合制戰旗游戲。試著玩了一下,感覺蠻不錯的。正好這個項目在Source Forge上使用Git管理源代碼。考慮到Android Source也是用Git管理的,于是就用Git下載了Batttle of Wesnoth的source來熟悉一下Git的用法。
12)在linux下有個叫做gitk的Git GUI工具。
總結
以上是生活随笔為你收集整理的大杂烩, 硬盘安装Linux的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FreeType, FFmpeg, SD
- 下一篇: C/C++编程心得