Google搜查列

 

2008年11月17日 星期一

RGB 色頻的亮度分佈

亮度分佈圖檢視外,新增可以同時或個別檢視RGB 色頻的亮度分佈圖,以確認曝光的分佈情況。
我就先從白色的亮度分佈開始說吧

一般我們所看到的jpg圖,都是由四層色層來形成的
分別由紅、藍、綠、亮度,這四層

你可以想像成四張底片重疊起來,放在燈下就可以形成jpg圖

解釋度:
再來要說的是解釋度啦,也就是一張800x600的圖
800 x 600 = 480000
也就是48萬,這張圖片包括了48萬點

其他常見的解釋度有
1024 x 768 =786432點(約80萬點)
1600 x 1200 =1920000點(約200萬點)
....
3072 x 2304 = 7077888點(約700萬點)

這個解釋度點數愈多,表示圖片愈細緻,所以現在的相機常說的500萬相機,800萬相機等,就是拍攝出來的照片圖片大小尺寸
解釋度愈高能洗出的傳統實體照片尺寸愈大張

影像三原色:


我們所看到電腦裡的照片,都是由RGB,紅、綠、藍三色所組成的,所以我們一張圖片可以把它分折成三張單獨的照片,也就是把紅,綠,藍,分開,重新組合就是原來的照片了

亮度分佈圖:
未完....

2008年11月4日 星期二

PSPad 不錯用的文書編輯軟體



寫腳本最好的文字編輯工具,像我個人會拿這來寫html php perl cgi ,都非常好用
同時也支援編輯的文件type,像要寫utf-8的文件格式,就不用特別在存檔時選擇了
還有自動斷行的功能(換行)
已知匯數會自動變粗體 (比如if ,chomp ,printf ......)
常要打的字句可錄製成巨集
支援巨集 - 可將常做的一連串動作錄成巨集檔, 以後要使用時只要播放該巨集檔就可執行完成
還有一個顏色選擇器,如寫html時會常用到#33bb11這種的,就可以用圖示來插入
如果更進階的,也有16進位編輯工具 PSPad HEX內建HEX編輯器
支援 Unicode
多國語系介面 - 包含了繁體及簡體中文的支援
支援分頁 - 開一堆檔案也不怕
程式語法高亮度顯示 - 個人認為「PSPad」的語法高
亮度顯示功能比「UltraEdit」更精確好用
FTP 功能 - 讓你直接編輯遠端 FTP 的文件
支援 Session - 啟動時可直接開啟上次編輯的文件 (對我而言很重要的功能)
檔案比對 - 可比對兩個檔案內容的差異

支援 HTML 驗證及排版
支援正規表示式 - 在某些情況下, 這功能很好用
內建 Google 搜尋 - 編輯文章時, 臨時想查 Google!?「PSPad」允許你直接選取文件中的任意字詞直接送到 Google 中做搜尋
支援多項開發網頁及程式時會用到的小工具 - 例如: ASCII 字碼表、色彩格式轉換器等等
支援 Extensions, 可擴充軟體功能。

不錯用!阿鳥大力推薦






PSPad是一個在microsoft下免費的程式編輯工具,對那些人而設計的呢:

*各種寫程式為工作的環境
*想強調語法的源始程式碼者
*需要一個小工具,具有簡單的控制和強大能力的程式碼編輯器
*正在尋找一種工具,純文字處理
*要節省時間-PSPad提供了豐富的文字格式化功能
*需要什麼工具,提供用戶擴展能力
*想省錢,現有功能的專業產品,因為PSPad是免費的商業和政府的目的也


支援多國語言:
Bosnian, Brazilian, Catalan, 簡體中文, 繁體中文, Croatian, Czech, German, English, French, Galician, Greek, Hungarian, Indonesian, Italian, Japanese, Kurdish, Malay, Nederlands, Norwegian, Polish, Portuguese, Romanian, Russian, Slovak, Spanish, Serbian, Finnish, Swedish, Turkish, Ukrainian

支援編輯多種程式語言格式:
C++, Cobol, MS-Dos batch, CSS, Forth, Fortran, FoxPro, HTML, XHTML, INI, Inno Setup, Java, JavaScript, KixStart, Object Pascal, Perl, PHP, Python, RSS, SQL, TCL/TK, Unix ShellScript, VBScript, Visual Basic, X86 assembler 和其他120種以上 語言,提供高亮度顯示

官網:
http://www.pspad.com/
下載頁:
http://www.pspad.com/en/download.php

2008年10月27日 星期一

簡單說明傅立葉轉換(Fourier Transform)

讀過通訊的人,都應該知道傅立葉轉換(Fourier Transform),這是必學的一個公式

簡單快速來說明這個公式的用途,不用太多的公式把人搞暈了,其他網站說明都一長串公式數字的

就是把在時域上的圖形訊號,透過Fourier transform公式,算出頻域上的圖形訊號

就是知道時域,想知道頻域資訊,就要透過傅立葉轉換,才知道圖長什麼樣子

要是知道頻域,想知道時域資訊,就要透過反傅立葉轉換,就可以了

下圖,就是一些最常看到的訊號,左邊是時域的圖示,右邊是經過傅立葉轉換後的,也可用反傅立葉轉換回時域

簡單一句,傅立葉轉換的物理意義是:透過Fourier Transform,把時域和頻域互相轉換,取得想要的資訊

2008年10月2日 星期四

Perl使用 mail::sendmail MIME::Base64

最近要需要把server上的一些資訊
每天定時的E-mail到指定信箱

是管理員看倒是還好
但是是長官有要看,就要用HTML的mail格式了

HTML還要插入圖片,這下就不是那麼簡單了

努力了幾天,可以找到幾個套件,合併使用,可以達到我要的目的

用來把文字編碼成Base64的套件 MIME::Base64;
郵件寄送套件 Mail::Sendmail;

注意同顏色的變數,要一樣的才會插入圖片生效
而且最好用outlook收件才會有效果

#!/usr/bin/perl

use MIME::QuotedPrint;
use HTML::Entities;
use Mail::Sendmail 0.75; # doesn't work with v. 0.74!
use Mysql;
use MIME::Base64;

# MYSQL CONFIG VARIABLES
$host = "localhost";
$database = "useracc";
$tablename = "acc";
$user = "bird";
$pw = "12345";

# PERL MYSQL 建立連線()
$connect = Mysql->connect($host, $database, $user, $pw);

# SELECT DB 選擇資料庫
$connect->selectdb($database);

$myquery = "SELECT * FROM $tablename";

# EXECUTE THE QUERY 對連線下指令
$execute = $connect->query($myquery);

#取回得到的資料放入變數 $retnumber
my $retnumber = $execute->numrows();

#SQL CLOSE
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#使用localtime()取得現在時間
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);

#年份要加上1900才是公元
$year=$year+1900;
#月份要加上1才正確
$mon=$mon+1;

#開始要預先編輯html的內容放入變數
my $html="$year 年 $mon 月 $mday 日 $hour : $min
";
$html=$html."$tablename 現在有$retnumber 筆資料
";

#使用. 符號合併 字串

#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ FILE encode64
#放入附件前,要先把圖檔作編碼為base64
open(FILE, "/home/eth0-day.png") or die "$!";
while (read(FILE, $buf, 60*57)) {
$ee= encode_base64($buf);
$ff =$ff.$ee;
}
close FILE;
#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ FILE encode64

#=================== mail資訊
%mail = (
from => 'report@domain.com',
to => 'you@domain.com',
subject => "XXX Server $year/$mon/$mday $hour:$min Report",
);
#=================== mail資訊end

#一些標準標籤設定宣告一下
$boundary = "====" . time() . "====";
$boundary = '--'.$boundary;
$mail{'content-type'} = "multipart/mixed; boundary=\"$boundary\"";

$file = $^X; # This is the perl executable

open (F, $file) or die "Cannot read $file: $!";
binmode F; undef $/;
$mail{body} = encode_base64();
close F;

#---------------------------------- 真正編輯mail標頭及內容
$mail{body} = << END_OF_BODY;
$boundary Content-Type: text/html;
charset="UTF-8" Content-Transfer-Encoding: quoted-printable

$html
< src=""cid:eth0-day.png>

$boundary
Content-Type: image/png;
name="eth0-day.png"
Content-Transfer-Encoding: base64
Content-ID: <656020898@300920332-0c65>
Content-Description:
Content-Location: eth0-day.png"

$ff

$boundary--
END_OF_BODY

#---------------------------------- 真正編輯mail標頭及內容 結束


#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 使用MAIL::SENDMAIL 寄出郵件
sendmail(%mail) || print "Error: $Mail::Sendmail::error\n";

2008年8月25日 星期一

mysql + php 使用utf-8

很多人在使用mysql和php作網頁程式的撰寫

但同時想使用utf-8編碼

但這三樣東西合在一起,就會給很多人產生很多煩惱

就是寫入Datebases的資料和讀出來的資料都變成亂碼了

倒地要怎麼作,才能完完全全的把我想要的國際碼utf-8完整寫入datebases和完整讀出來呢

我在過去也是因為這個問題研究了很久,找了很多資料

現在有心得分享給大家

主要要三個條件同時成立,才能有完整寫入和讀取的效果

1.MySQL資料庫裡的Datebases、Tables和欄位在建立時,必須要是utf8_bin的文字校對屬性
2.php網頁文件的內文必須儲存成utf-8格式,及html的utf-8宣告
3.IIS或Apache 跟Mysql之間連線要使用UTF-8

以上三點是很必要的,我來一點一點說吧

1.MYSQL文字校對:

先對所需要存放資料的mysql資料庫格式作個改變
如已經建立的Datebases,就可以下指令變更資料庫格式 (以照你的環境變更藍色字體的資料庫名稱)
ALTER DATABASE `datebases_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

變更datebases 之後,就要對tables作變更了 (以照你的環境變更藍色字體的表格名稱)
ALTER TABLE `tables_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ROW_FORMAT = DYNAMIC

再之後要變更你的儲存格為utf-8了 (以照你的環境變更藍色字體的欄位名稱) 例子為變更account的欄位
ALTER TABLE `datebases_name`.`tables_name` CHANGE `account` `account` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

*注意:欄位的屬性跟可不可以下
CHARACTER SET utf8 COLLATE utf8_bin有關,比如int、smallint等,變成utf8會沒什麼意義,所以要注意欄位的特性

2.就是php的文件格式
以很多種編輯軟體來說,當你在存檔時,可以選擇UTF-8,以記事本來說,另存新檔就有UTF-8格式可選擇


其他的編輯軟體,也都要這樣改變文件格式,以我知道的FrontPage 2003、Pspad等都有支援utf-8

3.文件內文的語法
先說html吧,至少要下一行
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
這行是告知連線上來的瀏覽器,網頁內容是使用UTF-8編碼的

再來在PHP的內文加上這三行,告知PHP Apache跟mysql連線要資料時,是使用utf-8

mysql_query("SET CHARACTER_SET_CLIENT=utf8"); //第二行
mysql_query("SET CHARACTER_SET_RESULTS=utf8"); //第三行
?>

2008年7月29日 星期二

反駭客,學習追蹤IP來自那裡

你知道嗎?一般當駭客的,在入侵別人之前,要先知道對方的IP

在你深入了解IP是什麼時,而很多網站都告訴你

IP是一組沒有義意的一組數字,是在網路上的門牌,不需要特別去記他

不用像手機一樣,選一組好背的,因為已經交給DNS去處理了

你只要記得www.yahoo.com就好,不用去記209.131.36.158這一串數字

也許新手會好奇,為什麼我會知道www.yahoo.com就是209.131.36.158

這個我們可以使用ping的功能就可以得知

也許很多人都會使用ping,來測試網路通不通,但你知道基本的ping是帶有很多資訊的

我們來看看下面的圖
1.的地方是我所下的指令 ping www.yahoo.com
2.的是方是,ping的指令已經幫我去問DNS了,把www.yahoo.com的對應IP問回來,所以我知道IP

3.的地方,是PING這個指令,分別PING了4次遠端的IP,這4 次是有回應的,分別送出後回來的時間是711,750,982,970ms的時間,TTL是51(這個等等再說是什麼東西)
4.的地方是統計,分別是送4次測試封包,回來4個封包,錯誤0個0%錯誤率
5.的也是統計,使用最少的時間和最久的時間,還有平均使用時間

那個TTL,是由本機發出一個數字,跟隨在PING封包上的,以Wondows為例 當你ping時,會把封包的TTL設為128,當封包送到一台路由器,作轉送時,就會把TTL值減1 當TTL=0時,不管那一台機器都不會再幫這個封包轉送了,因為減到底於0,這已經不合乎成本了,轉太多次路徑 當你的封包送到對方的電腦上時,對方收到的PING封包的TTL顯示120,那就代表我的電腦和目標電腦中間有7~8台路由器在作封包的轉送

同樣的,對方也會回應,所以如果走同樣的路徑回應我的話,我收到的封包TTL也會是120 如果以上面為例,看到我的電腦到www.yahoo.com回來變成51,那是不是128-51=77台路由器呢 答案是錯誤的喔,因為不同的作業系統,預設隨ping封包回傳的TTL值是不同的
如果Windows系統,TTL就預設是128開始減
如果是Linux或Unix系統,TTL就是64開始減

所以看TTL的回應值在80~128之間,那大有可能是Windows的系統
如是小於64,那就有可能是Linux或Unix囉 所以這個TTL是一個很重要的資訊 有一些系統是不回應Ping的封包的,所以也就無法得知
也有一些管理員,會特別去修改這個TTL的預設值 (不要小於64都可以,因為以防止TTL=0時被)

so這些資訊看了之後,知道回報的資訊是很多了,我們再整理一下,就可以得到下面的資料
1.由網址知道ip
2.本機和目標主機之間的路由器數量
3.猜測對方的主機系統類型


練習:
你可以PING看看你的區域內的電腦,IP分享器,網路列表機等……看看 反應時間,作業系統

===============================================================
另一進階指令:
tracert
這一指令的內部也是使用ping的原理,使用TTL=0的特性,來給你整理資訊

他會show出你到目標主機之間,所經過的路由器,而且也試著反解成網址給你
而有一些星號的,代表那一台路由器不允許回應ping的封包,所以等到Time Out後,就會顯示*號,就再測下一個了

而反解的部份,如我的圖示2,你可以試著連線到http://www.tfn.net.tw,就知道你和目標主機之間,經過了那一些的電訊公司

除了這樣,你還可以根據下面網址的資料,得知全世界,那一個國家分配到那一段的IP
http://www.blackholes.us/zones/country/

當然了,說了那麼多,會問有沒有圖型介面的軟體,在WINDOWS下當然有啦
NeoTracePro

把以上兩個網路測試最常用的指令,變成圖型介面,易懂易看外,還可以標示出目標主機在地球上那一個位置(參考用,他也是用猜的~),包括中間經過的路由器,還有三種顯示方式,圖型、ICON和列表,會覺得自己是駭客一樣

這顯示方會像tracert的功能


這樣就可以學到,當防毒軟體告知你,有那一個ip攻擊你的時候,就可以查看看,對方是那個國家,那家電訊公司的啦

好工具就如同一把好菜刀,可以作出美味的食物,也可以拿來傷害人,只在於工具在使用者的心是怎麼樣的工具

2008年6月17日 星期二

VOIP SERVER 之 Asterisk



IP 電話已經不是新話題了,用戶端的電話每個人早應該都看過了

而現今IP Phone主要分兩大協定陣營,一個是H.323SIP兩大協定

還有文章作兩協定的比較

而今天我要談談伺服端的軟體Asterisk

這是一個免費,在LINUX下SIP協定的SERVER端

透過Asterisk可以架起IP Phone的伺服主機,使IP 電話可以登陸(registrar)

又因為找到免費的架設Asterisk的文件,而且是O'Reilly出的,份量很重的唷


下載:
http://downloads.oreilly.com/books/9780596510480.pdf

2008年6月12日 星期四

免費重量級繪畫軟體 GIMP

除了PhotoShop 或 PhotoImpact ,還有沒有其他的選擇呢

算是同類型的軟體GIMP已經有LINUX和Windows的版本了


Download GIMP 2.4.6 – Installer for Windows 2000 and above


應有的圖層面版,色版,工具,濾鏡功能都有,也是多國語言的呢~



更重要的時他是完全免費的,而且還在研發當中
















也有Gimp範例教學

2008年6月2日 星期一

通訊用 天線長度計算

之前有討論過 光速:波長:頻率 之間的關係

其實這三者有密切的關係外,也關係到我們日常生活的電子通訊產品的天線

像手機、收音機、藍芽耳機、WIFLY、……等等的通訊用品

今天我們來算算看,那些產品所需要使用的天線長度

所算之前,我們要先知道那個產品是使用什麼頻道的

像收音機FM頻道一般為88MHz~108MHz
以我們要收這個頻率為例,我們就以88MHz作為根據

計算方法也跟之前所換算的一樣,只要算出波長
當天線的長度為無線電信號波長的1/4時,天線的發射和接收轉換效率最高
----------------------------------------------------------------
FM波長=300000000米(光速)/88000000Hz(頻率)
FM最高效率天線長度=3.4米/4=0.8米

以上就可以算出,至少要0.8米的天線,收FM的收音機的訊號才會清楚
----------------------------------------------------------------
AM的頻率在520--1720KHz 請注意單位是k
AM波長=300000000米(光速)/520000Hz(頻率)
AM最高效率天線長度=576米/4=144米

以上就可以算出,至少要144米的天線,收AM的收音機的訊號才會清楚,但誰會帶那麼長的天線出門?自程車?
----------------------------------------------------------------
算算2G 手機的天線吧 2G的GSM頻率在890---960MHz
照樣算算看
GSM的頻率在890MHz 請注意單位是M
GSM波長=300000000米(光速)/960000000Hz(頻率)
GSM最高效率天線長度=0.31米/4 = 0.07米 再換算成CM=7公分

以上就可以算出,至只要7公分的天線,GSM的訊號就會清楚
----------------------------------------------------------------
那看看藍芽的天線吧,藍芽的工作在2.4GHz的共用頻道
照樣算算看
Bluetooth的頻率在2.4GHz 請注意單位是G
Bluetooth波長=300000000米(光速)/2400000000Hz(頻率)
Bluetooth最高效率天線長度=0.12米/4 = 0.03米 再換算成CM=3公分

以上就可以算出,至只要3公分的天線,Bluetooth的訊號就會清楚,所以你身上的藍芽設備,有看到那麼長的天線嗎
---------------------------------------------------------------

都會了嗎,那如果知道3G手機的頻率,那你自己也來算算看,最佳天線長度是多少吧!
國際電聯確定的3G頻段是1885—2025MHz及2110—2200MHz頻段

2008年5月16日 星期五

作了phpMyAdmin線上展示

就有人問我mysql怎麼那麼難用,沒有GUI可以管理MYSQL

就覺得MSSQL的介面很人性化,圖形使用

本人覺得MYSQL也沒什麼不好,他只是負責把他自己的分內事(儲存資料)作好就好了

介面就由第三方軟體管理就好了

就可以使用phpMyAdmin管理,這是一個web的php網頁工具,運行在PHP WEB Server上

可以簡單的管理你的MYSQL Databases,也同時可產生報表,匯出匯入(也支援ANSI語法),同時

支援多國語言,很方便

目前架的phpMyAdmin線上DEMO
http://netbird.no-ip.org/phpMyAdmin/


登入:demo2
密碼:demo2

2008年5月2日 星期五

免費的螢幕錄製軟體(Wink)Free


免費的螢幕錄製軟體--Wink 製作線上教學的好工具


這個好工具不推不行呢,以前作線上教學影片

以前只有Macromedia Captivate來作選擇,不過現在多一個免費的,也可以輸出成Flash的.swf檔案

而且還有繁體中文、簡體中文介面的支援

在使用的效率都不錯,很簡單的將Windows或Linux系統中的軟體使用的過程畫面錄影下來,製作成動畫,也可以自己加旁白錄音,自訂錄製畫面的大小

官方網站:http://www.debugmode.com/wink/

下載有分Windows和Linux版本,兩大作業系統都支援,大家可以多多使用呢

2008年4月24日 星期四

把十六進位轉十進位

最近在找PERL有關於進位的轉換,好像比較少

為什麼呢?
因為在PERL的世界裡,不用宣告這個變數是什麼特別格式

一時是整數,有時是字串…
但你要知道如果變數內的2B如何變成十進位

也就是如果在螢幕上看到的是 A--->ASC II是65(這是十進位表示)---->或是十六進位表示是0x41

這次我是要把AAA當成十六進位的0x00414141轉為十進位的4276545

或許有人會問為什麼要這樣作,因為我目前遇到的問題是封包問題,因封包Packet分析的器Wireshark上某一欄位看到的是1B,我想轉成十進位來看裡面的東西

好比是IP位置,PORT號,轉成十進位比較好看

目的是把ASC II旳值轉成十進位看

#!/usr/bin/perl

use strict;
my $tt;
my $go1=chr(65); #大寫A的十進位為65
my $go2=chr(0x41); #大寫A的十六進位為41
my $go3=chr(0x41);

my $text="$go1$go2$go3"; #合起來當作是十六進位0AAA轉十進位來看

print "$text\n";
my $tot=0;
my $ligh=length($text);
for(my $i=0;$i < $ligh;$i++){
my $SC=substr($text,$i,1);

if(ord($SC)!=0 ){
$tt=int(ord($SC)/16)*(16**(($ligh*2)-($i*2)-1))+int(ord($SC)%16)*(16**(($ligh*2)-($i*2)-2));

#print " $i\t".ord($SC)."\t$SC\t";

print $tt,'+';

}
$tot=$tot+$tt;

}
print ' 轉成10進位後',"\t$tot\n";

2008年4月23日 星期三

最近買了一本好書





這一本不錯,有在台北天瓏找到中文版的
網路上也找到原文的電子書
下載
在於支持作者,我還是跑去買了一本
原文書要一千多,在天瓏的中文版,$680,就買了,厚度還是很厚
老闆說這本已經第九刷了

裡面除了解說IO::Socket以外,還說了物件的關係,<>角符號的使用、open()、sysopen()、read()、sysread()、以二進位方式開始檔案的binmode()……

還有很多網路protocol的使用方法
smtp,pop,ftp,imap,nntp,web,telnet……UDP程式設計、Broadcasting、Multicasting

還有用perl寫多執行緒應用程式……

很多很多,這本是一本很好的進階書

原文介紹:

Network Programming with Perl is a comprehensive, example-rich guide to creating network-based applications using the Perl programming language. Among its many capabilities, modern Perl provides a straightforward and powerful interface to TCP/IP, and this book shows you how to leverage these capabilities to create robust, maintainable, and efficient custom client/server applications.

The book quickly moves beyond the basics to focus on high-level, application programming concepts, tools, and techniques. Readers will find a review of basic networking concepts and Perl fundamentals, including Perl's I/O functions, process model, and object-oriented extensions. In addition, the book examines a collection of the best third-party modules in the Comprehensive Perl Archive Network, including existing network protocols for e-mail, news, and the Web.

The core of the book focuses on methods and alternatives for designing TCP-based client/server systems, and more advanced techniques for specialized applications. Some of the specific topics covered are: The Berkeley Sockets API; The TCP protocol and the IO::Socket API; FTP file-sharing service; The Net::Telnet module for adapting clients to interactive network services; SMTP, including how to create and send e-mails with multimedia attachments; HTTP and the LWP module for communicating with Web servers; Bulletproofing servers; Broadcasting and multicasting; and Interprocess communication with UNIX domain sockets.

Useful, working programs demonstrate ideas and techniques in action, including a real-time chat and messaging system, a program for processing e-mail containing MIME attachments, a program for mirroring an FTP site, and a Web robot.

Network Programming with Perl focuses on TCP/IP rather than just the common Web protocols. Modeled after the critically acclaimed TCP/IP Illustrated by W. Richard Stevens, this book achieves a level of detail far superior to most. It is an essential resource for network administrators and Perl programmers who are creating network applications.


2008年3月17日 星期一

使用perl來作telnet

你有試想跑telnet可以全自動化嗎?

或者你會想問說,什麼時候會用到自動telnet

嗯! 我想到的是tftp啦,也就是很多設備在更新時可以用

以下只對特別設備撰寫,並不能對其他設備使用,請自行修改


#!c:\perl\bin\perl.exe

print "請輸入IPHome的ip:";
my $PhoneIP=<>; #IPHome IP
chomp $PhoneIP;

print "輸入img file name:";
my $imgFile=<>;
chomp $imgFile;

print "輸入tftp server ip:";
my $tftp_ip=<>;
chomp $tftp_ip;

print "輸入更新過程參考時間(預設90/秒):";
my $sec=<>;
chomp $sec;
if($sec == ''){$sec=90;};


my ($forecast, $t);


use Net::Telnet ();
$t = new Net::Telnet;
$t->open(host=>$PhoneIP,port=>4159);

($forecast) = $t->waitfor('/MXP.*$/i');
print $forecast;
#$t->waitfor('/MXP.*$/');
$t->print("test -start_telnet");

($forecast) = $t->waitfor('/MXP.*$/i');
print $forecast;
#$t->waitfor('/MXP.*$/');
$t->print("quit");
print "第一次連線結束\n";

#=========================
print "建立第二次telnet";
$t2 = new Net::Telnet;
$t2->open(host=>$PhoneIP,Timeout=>$sec);

($forecast) = $t2->waitfor('/#.*$/i');
print $forecast;
$t2->print("cd /tmp/");
($forecast) = $t2->waitfor('/#.*$/i');
print $forecast;

$t2->print("tftp.sh $imgFile $tftp_ip");
#$t2->waitfor('/\#.*$/');
($forecast) = $t2->waitfor('/\-r.*$/i');
print $forecast;
$t2->print("cp fs.img /dev/mtdblock/0");
sleep $sec;
($forecast) = $t2->waitfor('/#.*$/i');
print $forecast;
$t2->print("ls -l");
#檢查檔案大小
($forecast) = $t2->waitfor('/#.*$/i');
print $forecast;
$t2->print("reboot");
print "------------ip為$PhoneIP的IPHome改完成動作,請按Enter開始瀏覽器視窗作設定------------";
<>;
system("\"C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE\" $PhoneIP");

2008年2月18日 星期一

使用perl驗證系統身份

如果有要作跟系統的shadow密碼檔作驗證,可以使用Crypt::PasswdMD5套件幫忙的

要先安裝perl-Crypt-PasswdMD5

如果你的是RH或FC系列,可以使用YUM安裝

#yum install perl-Crypt-PasswdMD5

在使用前,請確認你有讀取shadow的權限

試用程式:
#!/usr/bin/perl

#getpw*();
use Crypt::PasswdMD5 qw(unix_md5_crypt);
print "輸入使用者:";
$user = <>;
chomp $user;
print "輸入密碼:";
$pass = <>;
chomp $pass;

$line = `cat /etc/shadow | grep $user`;
if($line eq ''){
print "沒有這使用者\n";}else{
@shadow = split(/:/,$line);
$passwd_unix = $shadow[1];
$key = substr($passwd_unix,3,8),"\n";
$passwd_perl = unix_md5_crypt($pass,$key),"\n";

print 'passwd_unix = ',$passwd_unix,"\n";
print 'passwd_perl = ',$passwd_perl,"\n";

if ($passwd_unix eq $passwd_perl){print "驗證成功\n";}else{print "驗證失敗\n";}
}

參考網站:http://blog.pixnet.net/gisanfu/post/8179025

2008年2月4日 星期一

新研究之一,電話來電控電源

很久以前就有的一個問題我很想要解決了,就是ip分享器或一些Switch HUB如果熱當機,又剛好人沒有在家裡或公司裡
那熱當機的話就只好到機器前面,把電源重開,這樣就很累人了

萬一有長假期,又要跑回公司重開,光用說的累了

別人的家電控制系統太高LEVEL,有點大材小用
自己找了一下,找到4n25小晶片(PDF
datasheet)光耦和加上小電路就可以用了
結合之前作了冷氣搖控器,同一個8051就可以一起工作了

所以設計了下圖的小電路:
成品圖:




























因為是跟8051連線的,給8051控制
所以有4線連接
+:是8051的5V電源連線
回:是測試是否有來電,有來電就回傳5v道通,告知8051有來電
C:控制4N25上的斷電器跳躍,0為OFF,1為ON
-接地:接8051電路接地

8051單晶片上的程式碼(組合語言):
ORG 00H
JMP START
ORG 50H
START: SETB P0.0
SETB P0.1
;註解:冷氣開關程式
START1: CLR P1.0
CALL DELAY1
SETB P1.0
MOV R5,#60
CALL D11
CLR P1.0
CALL DELAY1
SETB P1.0
CALL DELAY2
JMP START1
;註解:電源控制開關副程式
APP1: CLR P0.1
MOV R5,#250
CALL D11
SETB P0.1
JMP START1

;註解:五秒鐘空迴圈副程式
DELAY1: MOV R5,#30
D11: MOV R6,#40
D12: MOV R7,#249
DJNZ R7,$
DJNZ R6,D12
DJNZ R5,D11
RET

;註:空迴圈監控來電接腳P0.0副程式30分鐘
DELAY2: MOV R4,#45
D21: MOV R5,#200
D22: MOV R6,#200
D23: MOV R7,#200
D24: CLR P0.0
JB P0.0,APP1
DJNZ R7,D24
DJNZ R6,D23
DJNZ R5,D22
DJNZ R4,D21
RET

END

上面還有指示燈,嘿~

不過呢,這個系統是沒有身份驗證的,也就是任何人打電話來,都會重開電源和冷氣

我是用家裡的或公司的ADSL線路,基本上是不公開的

如果要作驗證密碼,那要加上HT9170等,把電話上的按鍵傳到8051分析,驗證通過後再作其他所需要的動作

運動過程影片:

2008年1月16日 星期三

汽車防盜回報系統

最近的新作,其實也不算新啦,作了一、二年的東西

別人早就有產品了,只不過有不用的手機就把他變成可以用的成品吧

簡單說就是把不用的手機,設定在車子裡,把電源及控制門窗的都裝好

如果有人動你的車,不管是小偷還是被拖屌,都會打到你指定的手機喔

2008年1月14日 星期一

聖誕快樂,好好笑~

哈哈~看到這一段短片,真的會被這位仁兄打敗

快笑死我了

手拿video card,利用video card上的散熱片長短不一的特性

彈出聖誕曲,這位仁兄是不是宅得太無聊了

有人要挑戰新年快樂歌嗎

2008年1月10日 星期四

轉貼-寫SOP就是寫程式

文/iThome (記者) 2008-01-08

雖然寫SOP與寫程式相似,但兩者終究不同,SOP的執行者是人,不是機器。所以寫SOP時,一定要充分考慮到人的因素,納入人的彈性,排除人的偷懶(或自作聰明),才會寫出真正實用的SOP。


任何一家有制度的公司,都會定義「標準作業程序」(Standard Operating Procedure,SOP)。對麥當勞和統一企業等以服務見長的大企業來說,SOP是重要資產、公司經營的Know-How,影響產品與服務品質,只要 SOP完備,就可以快速展店。

甚至,日前警方查獲的詐騙集團也有SOP,該集團將詐騙手法詳細記載成為詐騙執行手冊。當詐騙集團也懂得藍海策略(詐騙手法推陳出新)、知道長尾 效應(對準特定小眾族群進行詐騙也能獲利),並充分運用SOP時,或許也正代表我們社會相當進步,已經進入所謂的知識經濟的時代吧。

一般公司內部的運作,處處仰賴SOP。有的公司雖小,但SOP累積多年之後也是厚厚一大本。一般來說,SOP會告訴人員,要怎麼做一件工作、處理一件事情、調用公司的資源……等。

這一切,是不是讓熱愛程式的你有所聯想?

把公司看成一個電腦系統,有許多的資源(設備、材料、人員、執行緒、I/O),每個員工都是一個執行緒,櫃臺和倉儲是I/O,負責資料的進出,其中,SOP扮演程式的角色,以有效的方式協調、處理、運用這些資源,以達到特定的目的。

如果SOP是在公司內執行的程式,那麼,寫SOP其實就是寫程式,寫程式的方法自然也可以套用在SOP撰寫上。寫程式的經驗,對於寫SOP,其實是有幫助的。當你需要寫SOP,卻不知從何下手時,不妨往程式設計的方向來思考。

我認為SOP可以分成三大部分,第一部分是常規作業(Routine),第二部分是事件驅動(Event-Driven)作業,第三部分是例外處理(Exception Handling)。如果你了解程式設計,這三者該寫些什麼,你應該就會知道。

一個好的SOP應該具備哪些要素?從判斷程式的準則來看,應該是:執行效率高且耗費資源少、容易理解、支援跨平臺(在不同的分店一體適用)、方便修改維護。

既然SOP是一種程式,那麼,也可以採用不同的編程思維(Paradigm),例如物件導向、命令式、邏輯式、函數式。許多時候,用文字敘述的 SOP,往往不夠清楚,如果能夠改用寫程式的方式來表達(不使用真正的編程語言,而是使用Pseudo Code),搭配註解,也會是不錯的方式。

除了可以套用程式設計思維,寫SOP時也可以套用軟體工程的作法。或許SOP比較適合採用敏捷(Agile)與反覆式(Iterative)的開發方式。因為SOP在執行之後才會發現缺失,就可以繼續進行修正補強。別忘了每次的改變,記得要做好版本控制。

UML(Unified Modeling Language,統一塑模語言)支援許多種圖,幾乎每一種圖都可以在SOP內派上用場。UML可以幫助SOP作者編寫SOP,也可以幫助讀者理解SOP。

和程式設計一樣,寫SOP不能光靠語言和邏輯,還需要特定專業領域的知識。

例如,寫3D繪圖的程式,必須先了解3D圖學的許多知識。對於SOP來說,專業領域可能是會計、稅務、法律……等。所以編寫SOP時,最好與了解該領域的人一同合作。

OO的封裝和繼承也可以套用在SOP,利用封裝將資源和動作集中在一起,利用繼承將某些方法進行擴充或修改(例如「同A作業,但步驟3更改如下」)。但是OO的多型似乎不可能用在SOP上,所以還是得大量使用switch/case的語法。

另外,邏輯式編程的作法似乎相當適合用在SOP,因為大部分的人都有足夠的邏輯能力,可以理解與判斷。使用邏輯編程可以讓SOP的編寫較簡潔。當一個資源許多人搶著用時,你就可以引進Concurrency編程的方法。

寫程式時,我們要多使用變數,而不是將資料寫死在程式碼中,寫SOP也是一樣,例如,你不應該在SOP內寫「把這份資料交給陳水扁」,而是應該寫「把這份資料交給總統」。畢竟,陳水扁總有下臺的一天。

有許多程式工具可以幫助我們檢查程式中的語法/語義錯誤、Dead Code,甚至Dead Lock、效能瓶頸。但是SOP卻沒有這樣的檢查工具,一切只能靠SOP編寫者的經驗。

所幸,人和程式不一樣,人是有彈性的,許多SOP的缺失可能會因為人的介入,能視情況應變而不會發生問題。但是,好的SOP並不能保證公司營運不會出問題,許多公共安全意外發生的原因,是檢修人員偷懶,沒有確實按照SOP規定的步驟進行維修所造成。

因此,雖然寫SOP與寫程式相似,但兩者終究不同,SOP的執行者是人,不是機器。所以寫SOP時,一定要充分考慮到人的因素,納入人的彈性,排除人的偷懶(或自作聰明),才會寫出真正實用的SOP。

作者簡介:
蔡學鏞-技術顧問
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。

轉貼自:http://www.ithome.com.tw/itadm/article.php?c=47000

Google Analytics