Tuesday, September 29, 2009

Syntaxhighlighter for Blogger

在Blog中,
為了讓程式碼看起來更整齊且好閱讀,
有許多大大們引用一些tool,
這些tool可以讓我們更方便來介紹自己post的code,
而我決定使用的是Syntaxhighlighter,
它是利用java script完成的,
以下是google code底下對於Syntaxhighlighter這個project的介紹,


The idea behind SyntaxHighlighter is to allow insertion of colored code snippets on a web page without relying on any server side scripts.


而下面的貼圖是我試著把C++程式貼上來的結果,


// read a file into memory
#include <iostream>
using namespace std;

int main () {
char first, second;

cout << "Please, enter a word: ";
first=cin.get();
cin.sync();

cout << "Please, enter another word: ";
second=cin.get();

cout << "The first word began by " << first << endl;
cout << "The second word began by " << second << endl;

return 0;
}

更清楚的教學及如何使用Syntaxhighlighter可以參考以下的Blog,我就不再贅述了:
http://sharedderrick.blogspot.com/2007/12/blogger-syntaxhighlighter.html

Saturday, September 26, 2009

[轉貼] 独家:/dev/tty文件在Unix操作系统中的妙用

作者: Tina,  出处:IT专家网, 责任编辑: 罗丽艳, 2009-04-22 08:00
Unix系统中,文件是其中最重要的资源。如标准输出文件、标准输入文件、标准错误文件等等。不过这些文件普通用户与系统工程师都需要用到。而在实际工作中,对于系统工程师来说,还需要掌握/dev/tty这个文件。
【IT专家网独家】在Unix系统中,文件是其中最重要的资源。如标准输出文件、标准输入文件、标准错误文件等等。不过这些文件普通用户与系统工程师都需要用到。而在实际工作中,对于系统工程师来说,还需要掌握/dev/tty这个文件。
这个文件顾名思义,主要用来表示用户的终端,但是它跟普通的终端又有差异。普通的终端是指一些硬件设备,如显示器等等。通常情况下,标准输出或者标准错误流的文件都会输出到终端中。但是,这些标准的输入输出往往不能够输入到/dev/tty文件中。而是需要通过重定向功能,把一些命令的输出重定向到这个文件中。另外需要说明的是,普通终端的话往往是每个用户之间相互独立的。也就是说,每个用户的输出彼此之间是互不干涉的。在用户A的终端中不能够看到用户B的终端信息。但是/det/tty这个文件由其特殊性。这个终端文件可以由各个用户共享。正是因为这个文件有这方面的特殊性,为此在实际工作中系统工程师经常需要用到这个文件。


       一、系统工程师常见需求描述及实现方案。
       
       利用这个特殊文件,可以帮助系统工程师解决很多实际问题。


       1、利用这个文件来屏蔽不需要的结果信息。通常情况下,为了提高与用户沟通界面的友好性,往往会在脚本程序中,利用echo命令向用户显示一些提示信息。如一个简单的计算器脚本程序,会提示用户输入相关的参数,如“Put one number”等等。有时候,还会在程序的开头显示一大堆的程序说明。这毋庸置疑,可以提高脚本程序的可读性。即方便了用户的使用,而且别的系统工程师借助这些说明也可以顺利对其进行功能上的调整与扩展。不过这也会赞成一些工作上的困扰。如当系统工程师调试脚本程序的时候,这些显示的提示信息反而会增加系统工程师的困扰,会增加他们的阅读量。因为此时用户终端上显示的将士全部的信息,即包括对于应用程序没有实际价值的提示信息,也包括一些应用程序执行过程中的错误信息。这显然会给系统工程师阅读错误信息带来一定的麻烦。另外如笔者谈过,系统工程师可以通过重定向符号把这个终端输出的信息重定向到一个文件中。可是此时这个文件中也会显示全部的信息。而这些信息大部分是系统工程师不需要看到的。系统工程师可能只需要一些相关的参数以及具体的执行结果。如 10*10=100。就这么简单,而不需要看到一大堆的提示说明。而且如果这个文件中带有这么多的无用信息,对于其他脚本程序来调用这个文件也不是很方便。遇到这种情况时该如何处理呢?其实系统工程师可以轻松的通过/dev/tty文件来过滤这些无用的提示信息。如只需要把脚本程序的运行结果通过重定向服务重定向到/dev/tty文件中。在这个重定向的过程中,Unix系统的shell会采取一定的内部处理机制,会忽略掉echo等命令。也就是说,只要把命令的标准输出重定向到这个文件中,则利用echo命令设置的一些提示信息都会被忽略掉。此时在这个文件中,存储的只有一些必要的运行信息,如错误或者警告信息等等。


       2、当作其他命令的参数。/dev/tty文件不仅可以用作终端设备来管理,而且这个文件还可以被用来当作其他命令的参数。因为一个终端就相当于一个文件,为此在一些命令中如tee命令就可以拿这个文件当作参数。Tee命令是一个分流命令,其主要用途就是把一个输入流的一个副本保存到另外一个文件中。有时候这个特性非常有用。如现在系统工程师需要利用who命令来显示Unix系统的当前登录用户。同时希望把这个显示结果保存到一个特定的文件中。 如果没有tee这个命令的话,则需要通过两个步骤才能够完成。首先需要利用who命令在当前终端中显示相关的结果。然后再利用who >重定向符号把这个命令的显示结果保存到一个特定的文件中。如果一开始就采用who >进行重定向的话,则在用户终端将不会显示任何信息。因为其直接把结果保存到了一个文件中。而现在系统工程师即希望把命令的结果输出到终端中,同时保存到一个文件中,就需要利用tee命令,如who | tee userinfo.txt。(注意,如果利用了tee命令的话,在可以不再使用重定向符号)。到这里为止没有涉及到/dev/tty这个文件。who | tee userinfo.txt这个命令的显示结果,只会显示当前登录的用户明细,而不会显示当前有多少个用户登录到系统中。可能或许有人回说只要数一下就可以了呀。确实数数的话可以实现,但是计算机不会自己数呀。如果其他脚本程序需要用到当前登录用户的总数而不需要明细,那么该如何处理呢?此时就需要利用 /dev/tty文件作为参数了。如可以使用who | tee /dev/tty |wc –l 命令。这个命令可以把当前用户的明细以及总共的用户数量显示出来。以上这个命令其实我们可以分为四个步骤。第一步系统先执行who命令;第二步tee命令把who命令执行对结果保存到/dev/tty文件中;第三步wc命令会统计/dev/tty文件中的行数。由于一个终端对相当于一个文件,故利用wc命令可以统计出当前系统登录用户的数量。第四步再把这个统计的结果显示在终端上。所以说,把/dev/tty文件当作其他命令的一个参数,一个一起组合以实现一些比较复杂的功能


       二、/dev/tty文件使用的注意点。

在使用这个文件中,特别需要关注的是其权限文件。默认情况下,普通用户也可以实现这个文件,从而可能造成一定的安全隐患。如现在系统中有两个普通用户sa01与sa02。而他们两个都是通过远程终端连入到Unix操作系统中。 此时假设用户sa01知道用户sa02的用户名以及登录密码。那么就可以假冒用户sa02的身份,把一些命令的执行结果重定向到/dev/tty文件中。 同时利用tee命令进行分流。此时对于用户sa02时,因为其执行相关的命令在终端上仍然可以正常显示,不会产生什么怀疑。但是这个用户其可能不知道,自己执行命令的结果已经保存到/dev/tty文件中。而其他用户就可以通过这个文件来显示在其用户终端上所显示的信息。这显然会导致用户SA02信息的泄 漏,给其带来一定的损失。


        /dev/tty这个文件可以有多个用户同时使用,而且相互之间不会发生冲突。这个特性可以帮助系统工程师实现很多有用的功能。但是毋庸置疑的是,也造成了一定的安全隐患。为此对于大部分情况下,Unix系统工程师要对这个文件进行一定的权限限制,如只有系统工程师(不一定是特权用户)才可以使用这个文件。从而防止非法攻击者利用这个文件来获取其攻击所必要的信息。

  另外需要注意的是命令 >/dev/tty与命令> file连个命令其最终的结果有可能相同,也有可能不同。前者在把命令的显示结果保存到/dev/tty文件中的时候,会过滤掉echo等命令设置的信息。而后者这个命令这会把显示的结果一五一十的照搬到file文件中去。也就是说,如果在命令或者脚本程序中没有echo等类似的命令设置信息的话在,则这两个命令重定向文件后所保存文件的内容是一致的。但是如果在命令或者脚本程序中有类似的提示命令的话,则两个文件的显示结果则会不同。为此系统工程师就需要根据自己的实际需要,来选择合适的重定向文件,看看有否必要采用/dev/tty文件。笔者的态度是,只有在确实有必要的情况下,才能够使用/dev/tty文件。因为这个文件是比较稀缺的,只由在缺其不可的情况下,才启用这个文件

Tuesday, September 15, 2009

Hello AVR - Atmel ATmega328P

AVR是由Atmel公司從1996年開始發行的一系列單晶片
它採用Modified Harvard architecture(8-bit)的RISC架構
它採用Flash memory[註一]來儲存program採用RAM來儲存data


我試著將一個簡單的code寫入AVR
首先我利用AVR Studio 4將程式編譯 (編譯成.hex檔)
然後透過ISP功能(In-System Programming)將它寫(燒)入其中一款microcontroller - ATmega328P
這個程式的目的是將一些文字show在LCD上


需要注意的一點是
當你要利用AVR Studio 4來compile時
要注意code的路徑是否有包含中文名稱
因為有中文名稱的話
compiler會出現以下錯誤訊息:












於是乎,我們即可開始把玩AVR。

[註一]
我們來看一下Flash Memory的歷史 應用及其優點,
以下資料取自http://shop.transcend.com.tw/index.asp

快閃記憶體(Flash Memory)  
對一般消費者是陌生的科技名詞,但目前當紅的數位記憶卡、讀卡機、隨身碟等,卻都是由快閃記憶體製造而成的數位產品。快閃記憶體到底具備何種魔力讓資料儲存變得快速且易於攜帶?

快閃記憶體v.s.一般電腦記憶體
快閃記憶體和一般電腦記憶體最大不同為:一般電腦記憶體(DRAM),當使用硬體電源關閉後,儲存於記憶體中的資料會消失,因此,又稱為動態隨機存取記憶體。而快閃記憶體卻不需要電力來維持已儲存的資料。在電源關閉後,原本寫入的資料仍可保存於記憶體中,再加上小體積大容量的特性,使快閃記憶體廣泛應用於許多可攜式的3C產品,如PDA、手機、數位相機搭配使用數位記憶卡(如CF、MMC、SM Card)、讀卡機、行動碟、轉接卡等。

快閃記憶體簡史與應用
1984年,日本東芝職員藤尾增岡(Fujio Masuoka)率先提出快閃記憶體概念。快閃屬於非揮發記憶體,即使電腦關機資料依然還留存在晶片上,與一般電腦記憶體不同,由於這種記憶體可以非常快速的存取資料,因此稱為快閃記憶體。

快閃記憶體 的產品優點與主要應用產品 
產品優點
主要應用產品
體積小容量大
讀取速度快
低耗電量
高耐久性:可重複讀寫資料十萬次


記憶卡:使用於數位相機、PDA等3C產品
行動碟
讀卡機
轉接卡
微型硬碟記憶卡(DOM)
 

Saturday, September 12, 2009

Physical Computing

這是最近常看到的一個名詞,
在看了一些資料後,
我認為應該可以這樣子來解釋它,


Physical Computing:
當我們藉由程式(軟體)來控制某個裝置上的Microcontroller(硬體),
使得該裝置可以跟人們產生某些互動,
即是Physical Computing,
因此, 它的概念就像"如何設計出一款有創意或是實用的Embedded System"!


例如:
當有了完善的Physical Computing,
我們就可以讓Robot變聰明,
讓Robot有辨識人類或是幫人類打掃...等等功能




大家也可以參考wiki上的解釋:
http://en.wikipedia.org/wiki/Physical_computing


以及相關課程
http://itp.nyu.edu/physcomp/

Friday, September 11, 2009

mmap()

mmap is sometimes used for Interprocess Communication (IPC). On modern operating systems mmap is typically preferred to the System V IPC Shared Memory facility.
~ http://en.wikipedia.org/wiki/Mmap


mmap(), 即memory map,用來將某個檔案的內容map到memory,使得各個process之間可以利用shared memory的方式來做資料的存取。


例如,在一個存取資料的程式中,我們可能透過fread來將資料讀出,經過修改後,再經由fwrite將資料寫入,但fread與fwrite皆需先透過fseek找出讀寫的記憶體位置。


然而,mmap()一開始會分配固定的記憶體區塊給某個檔案,因此多個程式便可以直接存取該共同記憶體區塊裡的任何資料。當然,shared memory可能引起race condition等問題,關於這部份可以參考其它資料說明。


[Ref.]
Beginning Linux Programming 4/e, Richard Stones and Neil Matthew

Wednesday, September 9, 2009

[轉載] ubuntu8.04 解决pdf中文乱码问题

1、sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional


2、搜索并安装poppler-data软件包


3、sudo rm /etc/fonts/conf.d/49-sansserif.conf


[Ref.]
http://evan2008.blog.51cto.com/509463/112539

Tuesday, September 8, 2009

System Call

簡單講, System Call就是一些低階函式, 它可以讓我們存取和控制檔案和設備。利用System Call, 且透過Linux Kernel的一些device driver, 可以讓我們跟硬體設備溝通。


然而, 執行system call會降低系統效率, 因為程式需經由切換到Kernel來呼叫system call, 且執行完還需返回。


舉個例子:
"read" system call, read會從檔案中讀取我們所設定的資料大小, 並將它存放在buffer中, 接著, 我們可以用"write"這個system call來將buffer裡的資料寫出來。


因此我們可以做個實驗, 也就是觀察在不同的buffer大小底下, 程式執行時間的差別。我們可以發現在buffer設定越大的時候, 其程式執行時間越短。原因就是, 在所要讀取的檔案大小固定之下, 當buffer越大, 則所需的system call次數就越少, 其執行時間當然就會越短




[Ref.]
Beginning Linux Programming 4/e, Richard Stones and Neil Matthew

Sunday, September 6, 2009

如何在Linux線上收聽ICRT或Apple Line等電台

[Step1]


安裝mplayer


[Step2]


在終端機輸入指令 

ICRT:
mplayer mms://bcr.media.hinet.net/RA000038

Apple Line
mplayer mms://bcr.media.hinet.net/RA000001


Kiss Radio
mplayer mms://bcr.media.hinet.net/RA000042

台北愛樂
mplayer mms://bcr.media.hinet.net/RA000018


POP Radio
mplayer mms://bcr.media.hinet.net/RA000080

Tuesday, September 1, 2009

Windows 常用快速鍵及操作

(1) 全螢幕與小視窗的互相切換 : Alt + Enter


(2) 叫出windows的"執行" : Windows鍵 + R


(3) 如何刪除常駐程式 ? "開始" → "執行" → 輸入"msconfig" → 在"啟動"中即可設定


(4) 如何將副檔名顯示或隱藏 ? "我的電腦" → "工具" → "資料夾選項" → "顯示" → "進階設定"