Arduino Ethernet Shield
12/02/2009, 17:15 - Open Source
花了一點時間,用了一下Arduino 這個小東西,Open source 的硬體和軟體。順便作了一個可以經由網路控制的數位腳,及SSR當作電源開關。這個程式加上了 Arduino Ethernet Shield 可以用 Arduino Ethernet Library 也可以換成 Ethernet2 Library,用 Ethernet2 空間會比較省。下次再配合 Arduino SD shield 看看吧!作起來比 Microship 的 PIC 簡單,程式工具不用錢,可以在Windows/Mac OS X/Linux 下寫程式,不必被限制一定要用Windows。不必買燒錄工具,用 USB 就可以寫入資料。不過在燒入資料時,digital pin 1 和 2 不可以接東西。目前 MAC address 和 IP 是固定的,有空再試試 DHCP library


/*
This program is wor Arduino Ethernet Shield with W5100 ethernet chip,
As a 8 digital pins control in web page
Programmer : Tasuka Hsu, Dec 1 2009
*/

/* Library import */
#include <Ethernet2.h>
#include <Print.h>
#include <Server.h>
#include <Client.h>

/* Const define */
#define LENGTH 42 /* Message length */
#define PINS 8 /* Digital pins 1 to 8 */
#define PORT 80 /* HTTP port */
#define REFRESH 10 /* HTTP refresh timer */

/* MAC Address */
byte MAC[]={0x00,0x0c,0x01,0x01,0xef,0xff};

/* IP Address setting */
byte IP[]={172,16,7,251};
byte GATEWAY[]={172.16,7,254};
byte SUBNET[]={255,255,255,248};

/* HTTP Server setting */
Server server=Server(PORT);

char TITLE[]="Adruino Digital Pins Control";
char MESSAGE[LENGTH+1];

void setup()
{
/* Initial Ethernet MAC and IP setting */
Ethernet.begin(MAC,IP,GATEWAY,SUBNET);

/* Initial digital pin setting to default 0 */
for(int i=0;i<PINS;i++){
pinMode(i,OUTPUT);
digitalWrite(i,0);
}

/* Start server listen */
server.begin();
}

void loop()
{
/* Initial client */
Client client=server.available();

if(client) {
boolean current_line_is_blank=true,flag=false;
char c='\0';
int i=0;

/* If connected */
while(client.connected()){
if(client.available()){

/* Clear MESSAGE */
for(i=0;i<LENGTH;i++){
MESSAGE='\0';
}

flag=false;
i=0;
/* Read from HTTP GET input information */
while((c=client.read())!='\n' && i<=LENGTH){
if(c=='?'){
flag=true;
}
if(c==' '||c=='\n'||c=='\0'){
flag=false;
}
if(flag){
MESSAGE[i++]=c;
}
}
MESSAGE='\0';

i=0;
flag=false;
/* Send to Digital pins from parse HTTP send message */
while(MESSAGE!='\0'){
if((MESSAGE=='p'||MESSAGE=='P')&&(MESSAGE[i+2]=='=')){
digitalWrite(int(MESSAGE[i+1])-0x30,int(MESSAGE[i+3])-0x30);
i+=3;
}
i++;
}

if(current_line_is_blank){
/* Send HTTP header */
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html; charset=utf-8");
client.println();

/* Send HTML */
client.print("<html>\n<title>");
client.print(TITLE);
client.print("</title>\n<head>\n<center><h1>");
client.print(TITLE);
client.print("</h1></center>\n");
client.print("<meta http-equiv=\"refresh\" content=\"");
client.print(REFRESH);
client.print(";url=/\">\n</head>\n<body>\n");
client.print("<hr>\n<form method=\"GET\" action=\"/\">\n");

/* Read data from digital pin */
client.print("<table border=\"1\">\n");
client.print("<tr><td>Digital Pin</td><td>On</td><td>Off</td></tr>\n");

for(i=0;i<8;i++){
client.print("\n<tr><td>Pin ");
client.print(i);
client.print("</td>\n<td>");

/* Display pins status */
if(digitalRead(i)==1){
client.print("<input type=radio checked value=1 name=\"p");
client.print(i);
client.print("\"></td>\n");
client.print("<td><input type=radio value=0 name=\"p");
client.print(i);
client.print("\">\n");
}else{
client.print("<input type=radio value=1 name=\"p");
client.print(i);
client.print("\"></td>\n");
client.print("<td><input type=radio checked value=0 name=\"p");
client.print(i);
client.print("\">\n");
}
client.print("</td></tr>\n");

}
client.print("</table>\n");
client.print("<br><input type=submit value=\"Send\"></form><br>\n");

/* Debug received message */
// client.print("Message=");
// client.println(MESSAGE);

/* HTML tail */
client.print("<h6>\nOpen source of hardware and software for Arduino\n<br>\n");
client.print("<a href=http://www.arduino.cc>http://www.arduino.cc</a></h6>\n");
client.print("</body>\n</html>\n");
break;
}
if(c=='\n'){
current_line_is_blank=false;
}
}
}
delay(1);
client.stop();
}
}



發表回應 發表回應 ( 1259預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 416 )

Parallels Desktop 5 for Mac 小小改善
11/23/2009, 11:57 - Apple
Parallels 4 Windows 7 系統分數

Parallels 5 Windows 7 系統分數


看來是好一點了,對我而言不是重點,反正我用到Windows的機會很低。想說的是為何 Ubuntu 9.10 在 Parallels 4 下,安裝 Parallels Tools 就會失敗(因為用的 Linux Kernel版本較 Parallels Tools 中支援列表的要新,沒辦法安裝),而 Parallels 5 就可以用,這對沒有更新到 Parallels 5 的人來說很不公平吧!
還有就是網路計價的問題,這去年更新 Parallels 4 時 Fred 就說過了-Parallels 4.0‥‥結帳注意事項,不過今年還是一樣。

原本想放棄 Parallels 而換用 VirtualBox 的,因為價格及支援的問題,Ubuntu 9.10 在 VirtualBox 下就很好,但是 VirtualBox 一直沒有解決 USB device 的問題,至少在我的 Windows/Linux/MacOSX 上都不能用,所以目前的Parallels還會活在我的MacBookPro上。
2 回應 2 回應 ( 1244預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 361 )

OS X 10.6.2 Update
11/10/2009, 12:28 - Apple


發表回應 發表回應 ( 704預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 523 )

OS X server 10.4.11 upgrade to 10.6 問題解決
11/06/2009, 21:35 - Apple
看來是 Apache 和 PHP5 之間的問題,Snow Leopard Server 的 PHP 是

root# php -v
PHP 5.3.0 (cli) (built: Jul 19 2009 00:34:29)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies


但是在系統中並沒有 Zend,而查看 Sample CPU load of httpd 時,發現 load 是在作 zend debug 時最多,所以在 /etc/php.ini 中加上兩行:

report_zend_debug = 0
mbstring.script_encoding=""


CPU load 就下來了。不過要試個幾天確定一下!

root# uptime
21:41 up 5 days, 10:57, 2 users, load averages: 0.03 0.08 0.52


發表回應 發表回應 ( 781預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3.1 / 378 )

Snow Leopard hosts.allow and hosts.deny
11/06/2009, 15:00 - Apple
新裝好的 Snow Leopard Server, 一直收到有人用字典攻擊,在測試密碼. 先用 /etc/hosts.allow 和 /etc/hosts.deny 過濾掉沒有正確 IP 正反解的連線, 到時再用 sshdfilter 來擋!

/etc/hosts.allow

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
#in.identd:ALL:ALLOW
#
smtpd:KNOWN,LOCAL,192.168.0.0/255.255.242.0:ALLOW
smtpd:UNKNOWN,PARANOID:DENY
#
httpd:KNOWN,LOCAL,192.168.0.0/255.255.2242.0:ALLOW
httpd:UNKNOWN,PARANOID:DENY
#
vsftpd:LOCAL,KNOWN,192.168.0.0/255.255.242.0:ALLOW
vsftpd:UNKNOWN,PARANOID:DENY
#
##in.telnetd:LOCAL,KNOWN,host,192.168.0.0/255.255.242.0:ALLOW
##in.telnetd:KNOWN,UNKNOWN,PARANOID:DENY
#
ipop3d:KNOWN,LOCAL,192.168.0.0/255.255.242.0,:ALLOW
ipop3d:UNKNOWN,PARANOID:DENY
#
imapd:KNOWN,LOCAL,192.168.0.0/255.255.242.0,:ALLOW
imapd:UNKNOWN,PARANOID:DENY
#
sshd:KNOWN,LOCAL,192.168.0.0/255.255.242.0:ALLOW
sshd:UNKNOWN,PARANOID,173.183.250.38:DENY
#
named:ALL:ALLOW
#
ALL:KNOWN,LOCAL,192.168.0.0/255.255.242.0:ALLOW
ALL:UNKNOWN,PARANOID:DENY
#


/etc/hosts.deny

#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
#ALL:UNKNOWN,PARANOID:DENY

發表回應 發表回應 ( 1302預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 379 )

OS X server 10.4.11 upgrade to 10.6 問題暫解
11/03/2009, 11:59 - Apple
最近將原本在 iMac G5 上的 OS X Server 從 Tiger 10.4.11 昇級並換裝至 Mac Mini 的 Snow Leopard Server 10.6. 從 PowerPC 換成 Intel 的 CPU, 因為 Apple 在這兩種 CPU 上使用的 HDD Partition 格式不同, 無法直接以原來PowerPC的硬碟在Intel機器上開機. 所以將 iMac G5 放到 Target Disk Mode, 用 Firewire 連至 MacMini, 當成資料硬碟, 就可以無痛昇級,Snow Leopard Server 系統在一安裝好之後,第一次開機會有 Server Migration 可以自動作昇級,並自動作資料的搬移及轉換, 不過時間要等有點久, Snow Leopard Server 安裝約一個小時,但需要3個小時作 migration, 最多時間用在作原本的 user 所存放的 mail 格式轉換. 10.6 server 的 postfix 己經由原本的 UNIX mailbox 格式, 換成 QMail 的 maildir 可以加快信件的處理速度. 經過 Server Migration 之後, 所有的的資料都在, 密碼及SSL的CA設定也都沒有改變, 在外部的人根本無法察覺到 Server 己經換了.

跑了兩天發現系統的 loading (uptime) 會上昇到 40 以上, CPU 100% 滿載, (一般的 UNIX 系統在 3 至 5 就不得了了), 讓系統反應變慢. 檢查的結果應該是 apache2 的關係, 原因還不明, 因為有使用 Squirrel webmail, 無法停掉 apache, 先作一個 shell script 放在 crontab 中定時檢查若 load 大於 8, 就重新起動 apache. 作為暫時解決的方案.


#!/bin/sh
AP_PS=`ps -ax|grep httpd|grep -v grep|wc -l|awk '{printf("%d\n",$1)}'`
LOAD=`uptime|awk '{printf("%d\n",$11)}'`

if [ $LOAD -ge 8 ]; then
if [ $AP_PS -ge 10 ]; then
/usr/sbin/apachectl restart
fi
fi




發表回應 發表回應 ( 1164預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3.1 / 392 )

Parallels Windows 7
10/30/2009, 16:08 - Apple
用 Parallels4 在 Snow Leopard 上跑 Windows 7,得到的測試結果,Graphics 還要再加強啊!

發表回應 發表回應 ( 624預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 389 )

寫好一份文件
10/02/2009, 16:00 - 想到的
經常需要讀一些說明文件,發現好的文件很少,要舉例的話,我只想到 Cisco IOS Configuration GuideApple Developer Library,這兩者的文件在例子及詳細說明,完完整整都會放在同一份文件中,不需要再參考別的文件,而所需要的答案都可以在看過一至兩份文件之後得到,進而還可以完整了解整個工作的方法及流程。

但是其他很多公司的文件就沒有這麼好了,這些文件大都需要參照來參照去的,不在同一份文件中詳細說明,而是用了大量的參考連結,通常的結果就是看了半天,連來連去,結果不知所云。像Microsoft MSDN的文件就是這樣。不直接給答案,而是用連結回答問題,結果弔發更多問題。

不過像Cisco和Apple,也因為將所有的資料都放在一起,並詳細說明,所以文件一般都比較大,但大都可以解決讀者的問題,而且因為太大,所以都提供可下載的版本,拿回去慢慢看。而Microsoft分成無數個小檔案的文件,就是每個文件只有寫一部份,再用連結連起來,其他的請參考某編號文件,經常在轉了一大圈之後回到原點,而問題還是沒有解決,而且因為檔案內容太少,大都沒有提供可下載的版本,不然就是需要拿一堆檔案,自已再從中看看可不可以找到答案。

有一個問題可以找到很多不同的版本,但是以 Cisco 和 Apple 而言,大都會有新舊版本之間的說明可看。而Microsoft的話,就只有看當時的運氣,以及個人的修為而定了。

Open Source 的話,我認為 GNU Project的文件算是很好的,而wxWidget 的也不錯,不過像Qt,GTK+,GNOMEX.org,都太分散了,就很不好。

所以就創造了很多人,利用這些寫得不好的文件,而自己再寫一份來賣錢!
2 回應 2 回應 ( 1336預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 2.9 / 423 )

Apple Store updating
09/29/2009, 15:28 - Apple
新東西要來了吧!


4 回應 4 回應 ( 2057預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 3 / 410 )

rpm2targz
09/16/2009, 13:26 - Open Source
我使用 Slackware Linux作為工作平台,但要找應用程式時,經常看到只有 Debian或是只有rpm的格式。今天要用Google Desktop時,就發現 Linux 版本,只有包裝成 rpm 及 deb,所以就想到用 rpm2targz/rpm2tgz 這個工具轉檔一下,再自已搬到 /usr 下,就可以用了。為何最簡單的格式反而沒有人要用呢?
2 回應 2 回應 ( 3112預覽 )   |  [ 0 引用 ]   |  permalink   |   ( 2.9 / 454 )


<<開始 <前一頁 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 下一頁> 最後>>