หน้าเว็บ

วันอังคารที่ 16 ธันวาคม พ.ศ. 2551

แก้ปัญหา Power Calibration Error ใน Nero

ไปคุ้ยๆแล้วเจอหลายวิธีด้วย แต่เจอหน้านึงรวมไปหลายอันก็ขอแปลกันมาเลยแล้วกัน

ซึ่งวิธีที่ผมใช้แล้วได้ผลคือข้อ 3 ครับ โดยผมทำที่เครื่อง Windows XP SP2 และ Nero 8

1. ลองเปลี่ยนแผ่น เค้าบอกว่าปัญหานี้เกิดขึ้นบ่อยๆกับแผ่นเปล่าราคาถูกที่คุณภาพห่วย

2. ลองเบิร์นโดยใช้ความเร็วการเขียนแผ่นที่ต่ำลง

3. Disable การทำงานของ IMAPI Service (เค้าบอกว่ามักจะแก้ปัญหาได้ และก็ผมก็ใช้วิธีนี้แล้วเวิร์ค)
-ไปที่ Control Panel -> Administrative Tools -> Services
- หา service ที่ชื่อ "IMAPI CD-Burning COM Service", คลิ๊กขวาแล้วเลือก properties
- เปลี่ยน Startup type เป็น Disabled.
- คลิ๊ก Apply.


4. ลองเปลี่ยน software ที่ใช้ในการเขียนแผ่นเป็นเวอร์ชันใหม่

5. ลอง upgrade เฟิร์มแวร์ของเครื่องเขียนแผ่น

6. ถ้าทำทุกวิธีข้างบนแล้วยังไม่ผ่านแสดงว่าปัญหาเกิดจากตัวอุปกรณ์เองไม่เกี่ยวกับซอฟต์แวร์ นำอุปกรณ์ไปให้ช่างทำความสะอาดเลนส์

7. ถ้ายังไม่ได้อีกก็แสดงว่าตัวหัวอ่านแผ่นคงเจ๊งไปแล้ว ไปหามาเปลี่ยนหรือซื้อใหม่ดีกว่า


ที่มา
http://www.megaleecher.net/Fix_Power_Calibration_Error
http://www.gidforums.com/t-1805.html

วันศุกร์ที่ 12 ธันวาคม พ.ศ. 2551

ใช้ python อ่านไฟล์ csv

วันนี้ต้องเขียนโปรแกรมอ่านค่าจากไฟล์ csv ซึ่งแปลงมาจากโปรแกรม spreadsheet (เช่น OOo Calc หรือ MS Excel) ก็เลยทดลองเขียนด้วย python ดู และไปเจอว่า python มี built-in module สำหรับจัดการ csv โดยเฉพาะเลย

สมมติว่าในไฟล์ filename.csv มีเนื้อหาไฟล์ดังนี้
3, a, xyz
8, t, www
4, x, abc

สามารถเขียนโปรแกรมได้แบบนี้
import csv

file = open("path/to/filename.csv", "r")
parser = csv.reader(file)

for field1, field2, field3 in parser:
print 'FIELD1=%s, FIELD2=%s, FIELD3=%s\n' % (field1, field2, field3)

file.close()

ผลลัพธ์ ได้ดังนี้

FIELD1=3, FIELD2=a, FIELD3=xyz
FIELD1= 8, FIELD2=t, FIELD3=www
FIELD1=4, FIELD2=x, FIELD3=abc

หรือว่าตรง for loop เราอาจเขียนแค่
for row in parser: แค่นี้ก็ได้ แล้วเวลาเรียกค่าก็ใช้ row[0], row[1], row[2] แบบนี้แทน

อ้างอิง
http://www.python.org/dev/peps/pep-0305/

วันจันทร์ที่ 8 ธันวาคม พ.ศ. 2551

รูป network icon สำหรับ Dia

สำหรับคนที่อยากทำ Network Diagram หรือ Network Map โดยใช้ Dia ซึ่งเป็นโปรแกรม Opensource (http://projects.gnome.org/dia/ หรือ dia-installer.sourceforge.net/ สำหรับ windows) แต่รู้สึกว่า ภาพมันไม่สวยเลย

ก็ไปค้นๆเจอคนใจดีทำ icon สำหรับอุปกรณ์ network เพื่อ Dia โดยเฉพาะ ถึงจะไม่มากเท่าไหร่ แต่ก็คลุมพวกอุปกรณ์พื้นฐานที่ใช้กันบ่อยๆอย่างพอเพียง

ภาพตัวอย่าง















ดาวน์โหลดได้ที่นี่เลย http://gnomediaicons.sourceforge.net/

แล้วก็แตกไฟล์ออกมา เอาของที่อยู่ใน sheets และ shapes ไปใส่ไว้ใน sheets และ shapes ที่ dia ในเครื่องเรา (เช่น /usr/local/dia หรือ C:\Program Files\dia)

โดยเวลาใช้งานรูปจะอยู่ในหมวด RIB-Network

วันพฤหัสบดีที่ 4 ธันวาคม พ.ศ. 2551

วิธีการ replace string ในหลายๆไฟล์ บน Linux

จริงๆแล้ววิธีการ replace string บน linux ทำได้หลายวิธี ขอลองนำเสนอ 2 วิธีด้วยกัน

วิธีแรก
ใช้ grep + perl
$ grep -rl OLDSTRING . | xargs perl -pi -e ’s/OLDSTRING/NEWSTRING/g’
วิธีที่สอง ใช้ grep + sed
$ grep -rl OLDSTRING . | xargs sed -e ’s/OLDSTRING/NEWSTRING/g’
อธิบาย
คำสั่ง grep จะช่วยเลือกไฟล์ที่มี OLDSTRING ประกอบอยู่โดยเริ่มตั้งแต่ current directory (.) เป็นต้นไป ซึ่งถ้าต้องการให้เริ่มที่ directory อื่นก็สามารถเปลี่ยน . เป็นรูปแบบอื่นได้

ส่วน option -r หมายถึงให้ recursive ทุกไฟล์และโฟลเดอร์
optoin -l หมายถึงเลือกเฉพาะไฟล์ที่มี OLDSTRING อยู่

ส่วน option ใน perl มีความหมายดังนี้
-e ที่อยู่ท้ายสุดคือ script ที่เราจะทำงาน นั่นคือคำสั่ง replace string global จาก OLDSTRING ให้เป็น NEWSTRING
-p คือให้ลูป script ด้วย
while (<>) {
# your script goes here
} continue {
print or die "-p destination: $!\n";
}
-i คือให้แทน <> ในลูปด้วยไฟล์ที่รับเข้ามา ซึ่งก็คือไฟล์ทั้งหมดที่รับมาจาก grep นั่นเอง

ส่วน xargs จะทำให้ perl รับอาร์กิวเมนต์ได้ไม่จำกัด คือ สามารถรองรับไฟล์จำนวนมากจาก grep ที่ส่งมาเป็นอาร์กิวเมนต์

ส่วนคำสั่ง sed นั้นเป็น stream editor ที่จะทำการ run คำสั่งที่ระบุไปยัง stream ของไฟล์ที่ส่งเข้ามาจาก grep
option -e คือ คือรับ expression script ที่จะกระทำกับ input ที่รับเข้ามา

ระบบที่ทดสอบ
OS: CentOS 5

วันพุธที่ 26 พฤศจิกายน พ.ศ. 2551

วิธีการเปิด Port แบบระบุ range ใน Windows Firewall

ปกติแล้ว Windows Firewall นั้นจะไม่มีให้เราใส่ช่วงของ Port ที่ต้องการเปิดได้ ถ้าต้องเปิด port จำนวนมากๆก็เหนื่อยอยู่

แต่ถ้าเขียน script run บน command line ก็จะช่วยให้สบายมากขึ้น

สมมติว่าถ้าเราต้องการเปิด port ช่วง 5000 ถึง 5100 เพื่อใช้สำหรับ FTP ก็สามารถสั่งได้แบบนี้

for /L %i in (5000,1,5100) do netsh firewall add portopening TCP %i "FTP %i"
โดยคำว่า "FTP %i" นั้นใช้เป็น prefix ว่าตั้งชื่อว่า "FTP วรรค หมายเลขport"

ระบบที่ทดสอบ

OS: Windows Server 2003

หลักการพื้นฐานการเปิด port ของ FTP

การใช้งาน FTP ประกอบด้วย FTP Server และ FTP Client ซึ่งต้องมีวิธีการจัดการเกี่ยวกับ Port

FTP จะใช้ port หลักๆอยู่ 2 port ด้วยกันคือ port 20 และ 21
Port 21: ใช้ในการส่ง Control Message
Port 20: ใช้ในการส่ง Data Message หรือข้อมูลจริงที่ทำการรับส่งไฟล์
และนอกจากนั้นยังต้องใช้ random port อื่นๆเพื่อรองรับกรณีที่มีหลาย connection เชื่อมต่อเข้ามาพร้อมกัน

โดยจะเปิด port ไหนนั้นขึ้นอยู่กับการใช้งาน FTP ว่าเป็นลักษณะใด โดยแบ่งได้ 2 ลักษณะ

1. Active FTP แบบนี้ใช้ทั้ง port 20,21
command : client >1023 -> server 21
data : client >1023 <- server 20

ดังนั้น ฝั่ง client ต้องเปิด port มากกว่า 1023 เอาไว้ ฝั่ง server ต้องเปิด port 21 ขาเข้า และเปิด port 20 ขาออก

2. Passive FTP แบบนี้ไม่ต้องใช้ port 20
command : client >1023 -> server 21
data : client >1023 -> server >1023

ดังนั้น
ฝั่ง client ต้องเปิด port มากกว่า 1023 ขาออก
ฝั่ง server ต้องเปิด port 21 ขาเข้า และเปิด port มากกว่า 1023 ขาเข้า

ซึ่งปัจจุบัน FTP Server ส่วนใหญ่ก็มักใช้แบบ Passive เพราะเราไม่ต้องไปสนใจว่า client จะเปิด port ให้เรา(server)เชื่อมต่อไปได้หรือไม่

โดย port ที่มากกว่า 1023 ที่กล่าวในนี้นั้นแล้วแต่เราจะเลือกเปิด ซึ่งที่ผมใช้ Filezilla Server ในตัวอย่าง FAQ ของเค้ายกตัวอย่างว่า 5000-5100 สำหรับการเปิด port แบบเป็น range บน Windows Firewall นั้นดูได้ที่ http://ping2p.blogspot.com/2008/11/port-range-windows-firewall.html

อ้างอิง
http://www.slacksite.com/other/ftp.html

วันจันทร์ที่ 17 พฤศจิกายน พ.ศ. 2551

Clone VirtualBox Guest OS

ที่จะทำคือ ในเครื่องแรก มี VirtualBox ซึ่งมี GuestOS อยู่ และต้องการย้าย Guest OS ที่ใช้งานอยู่นี้ไปทำที่เครื่อง(physical)อื่น
ซึ่งไฟล์ที่ใช้เก็บ Guest OS นั้นจะมีสกุล .vdi ที่ตอนแรกเราได้สร้างเอาไว้ แต่ว่าจากลองอ่านๆมาเค้าว่าการก๊อปปี้ไฟล์นี้ไปดื้อๆเลยนั้นไม่ดีอาจมีปัญหาภายหลังได้

วิธีที่ถูกต้องให้ใช้คำสั่งที่มากับ VirtualBox อยู่แล้วในการ Clone
VBoxManage clonevdi sourcefile destfile
โดย sourcefile ให้ชี้ไปที่ vdi ที่เราต้องการทำการ clone ส่วน desfile ก็ให้ระบุเป็นไฟล์ใหม่ที่ต้องการ
เช่น
VBoxManage clonevdi "C:\vbox\ubuntu.vdi" "C:\clonevbox\cloneubuntu.vdi"
ซึ่งคำสั่ง VBoxManage จะอยู่ในโฟลเดอร์ที่เราลง VirtualBox ไว้ ถ้าเราไม่ได้เอาไว้ใน environment variable PATH เราก็ต้องระบบคำสั่งแบบ fullpath หรือไม่ก็ไปอยู่ที่โฟลเดอร์นั้นแล้วค่อยสั่ง

ป.ล. แต่ว่ายังมีปัญหาคือผมไม่สามารถเอา snapshot ติดไปด้วยได้ เลยแก้โดย merge ทุก snapshot ให้เหลือแค่อันล่าสุดอันเดียวครับ

ระบบที่ทดสอบ

HostOS: Windows XP SP2
VirtualBox: 2.0.4