2008年11月17日 星期一
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」的語法高
FTP 功能 - 讓你直接編輯遠端 FTP 的文件
支援 Session - 啟動時可直接開啟上次編輯的文件
檔案比對 - 可比對兩個檔案內容的差異
支援 HTML 驗證及排版
支援正規表示式 - 在某些情況下, 這功能很好用
內建 Google 搜尋 - 編輯文章時, 臨時想查 Google!?「PSPad」
支援多項開發網頁及程式時會用到
支援 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,把時域和頻域互相轉換,取得想要的資訊
2008年10月2日 星期四
Perl使用 mail::sendmail MIME::Base64
每天定時的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
但同時想使用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是一組沒有義意的一組數字,是在網路上的門牌,不需要特別去記他
不用像手機一樣,選一組好背的,因為已經交給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
2008年6月12日 星期四
免費重量級繪畫軟體 GIMP
算是同類型的軟體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線上展示
就覺得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
2008年4月24日 星期四
把十六進位轉十進位
為什麼呢?
因為在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日 星期三
最近買了一本好書
在於支持作者,我還是跑去買了一本
裡面除了解說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
嗯! 我想到的是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驗證系統身份
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日 星期一
新研究之一,電話來電控電源
那熱當機的話就只好到機器前面,把電源重開,這樣就很累人了
萬一有長假期,又要跑回公司重開,光用說的累了
別人的家電控制系統太高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日 星期一
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 |