Friday, November 24, 2006

ย้ายบ้าน

เนื่องจากผมถนัด wordpress มากกว่าจึงขอย้ายบ้านไปที่ http://nontster.wordpress.com/ นะครับ

Thursday, November 23, 2006

อยากได้กระเป๋า Notebook ที่ใส่กล้อง DSLR ได้



เมื่อก่อนไม่มี Notebook ชีวิตก็สะดวกสบาย ไปไหนไม่ต้องหิ้วอะไรไปด้วย พอซื้อ Notebook ชีวิตก็ลำบากขึ้นอีกนิด เพราะต้องหิ้วมันไปด้วย ไอ้ครั้นจะเก็บไว้อพาร์ทเมนต์ หรือไว้ Office ก็ไม่รู้จะซื้อมันมาทำไมสู้ซื้อ Desktop แรงๆไม่ได้ อีกอย่างกลัวหายด้วย เร็วๆนี้ได้ Canon 350D มาครอบครอง ชีวิตก็ลำบากขึ้นเป็นสองเท่าเพราะต้องหิ้วสองกระเป๋า เหตุผลก็เรื่องเดิมๆ กลัวหาย เพราะราคารวมสองอย่างก็เรือนแสน

เคยคิดเล่นๆว่ามันน่าจะมีอะไรที่ใส่ได้ทั้ง Notebook และกล้อง DSLR ลอง search จาก google ดูมันมีจริงๆแฮะ ของ Lowepro รุ่น CompuDaypack ในไทยเห็นมีขายที่ AV Camera ราคาไม่เกิน 2,500 บาท

Tuesday, November 21, 2006

เมื่อถูก Brute-Force Attack ที่ sshd

Unix server ส่วนมาก เปิด secure shell daemon (sshd) ไว้เพื่อให้ admin สามารถ access เข้ามาจัดการ server และส่วนมากก็ไม่ได้ตั้ง ACL ใดๆไว้ เพราะต้องการที่จะ remote จากที่ไหนๆก็ได้ แต่ผลที่ตามมาคือ มักจะมีผู้ไม่ประสงค์ดีลักลอบมาเดา username และ password ของ account ในเครื่องเรา วันดีคืนดีเกิดมันเดาถูกขึ้นมา อาจจะซวยได้ ถ้าจะให้ดีก็ควรเปลี่ยน password บ่อยๆ

ถ้าเราดูจาก /var/log/message หรือ /var/log/auth.log เราจะพบ message ประมาณนี้แสดงว่ามีคนตั้งในล้วงคอห่านแล้วล่ะครับ :P


Nov 21 21:46:49 mail sshd[1917]: Invalid user lead from 209.219.17.122
Nov 21 21:46:51 mail sshd[1922]: Invalid user romeo from 209.219.17.122
Nov 21 21:46:53 mail sshd[1927]: Invalid user julieta from 209.219.17.122
Nov 21 21:46:55 mail sshd[1932]: Invalid user sarolta from 209.219.17.122
Nov 21 21:46:58 mail sshd[1937]: Invalid user zemba from 209.219.17.122
Nov 21 21:47:00 mail sshd[1953]: Invalid user amar from 209.219.17.122
Nov 21 21:47:02 mail sshd[1958]: Invalid user jubar from 209.219.17.122
Nov 21 21:47:04 mail sshd[1963]: Invalid user mckey from 209.219.17.122
Nov 21 21:47:06 mail sshd[1968]: Invalid user notorius from 209.219.17.122


แต่ก็มีวิธีป้องกันอย่างง่ายๆ โดยใช้โปรแกรมชื่อ denyhosts เนื่องจากผมใช้ Gentoo ซึ่งมี denyhosts อยู่ใน portage อยู่แล้ว

ซึ่งก็ติดตั้งโดย

#emerge denyhosts


ถ้าหากยังไม่ได้ config ระบบ log ให้แยกแยะ log message โดยเฉพาะการ authentication ให้เก็บใน /var/log/auth.log ก็สามารถ config ตาม Syslog-ng (ผมใช้ syslog-ng)

วิธีการ config denyhosts สามารถอ่านได้จาก HOWTO Protect SSHD with DenyHosts

เครื่องที่พยายามเจาะเข้ามาจะถูกใส่ IP ไว้ในไฟล์ /etc/hosts.deny เช่นในเครื่องผมมีอยู่เยอะเลย

tail -f /etc/hosts.deny
sshd: 82.110.225.132
sshd: 202.167.234.97
sshd: 66.63.172.178
sshd: 61.30.187.58
sshd: 218.38.14.121
sshd: 210.66.37.245
sshd: 60.209.128.199
sshd: 61.57.4.200
sshd: 211.253.228.88
sshd: 209.219.17.122


กลับไปดูใน auth.log อีกทีพบว่ามันอดเข้ามาแล้ว...สม..

Nov 21 21:47:16 mail sshd[2029]: refused connect from 122.17.219.209.transedge.com (209.219.17.122)

Thursday, December 15, 2005

ตัดคำภาษาไทยด้วย Java

JDK สามารถตัดคำภาษาไทยได้มานานแล้วแต่ไม่ค่อยมีคนรู้ บังเอิญไปอ่านเจอใน Blog ของคุณฮุ้ย


เมื่อก่อนไม่ค่อยสนใจระบบภาษาไทยสักเท่าไหร่ สงสัยจะเป็นสาเหตุหนึ่งที่ผมพูดภาษาไทยไม่ค่อยรู้เรื่อง (อังกฤษยิ่งแย่) จากการทดสอบระบบตัดคำภาษาไทยใน JDK เทียบกับ ICU ให้ผลที่ต่างกัน จากสองตัวอย่างขอฟันธงว่า JDK ให้ผลที่ดีกว่า ICU ครับ

พระเอกของงานนี้คือตัว class BreakIterator ซึ่งมีให้ใช้ทั้งใน JDK เอง และ ICU ซึ่งเป็น library ของ IBM

ข้อความที่เอามาทดสอบคือ “ชั่วโมงอินเทอร์เน็ตต้อนรับปีจอ แถมมโหฬารนานสูงสุด 2 เท่า”

ผลการตัดคำภาษาไทยของ


JDK 1.4 BreakIterator

“ชั่วโมง-อิน-เทอร์เน็ต-ต้อนรับ-ปี-จอ- -แถม-มโหฬาร-นาน-สูง-สุด- -2- -เท่า-”

ICU BreakIterator

“ชั่วโมง-อินเทอร์เน็ต-ต้อน-รับ-ปี-จอ- -แถม-มโหฬาร-นาน-สูง-สุด- -2- -เท่า-”

DictionaryBasedBreakIterator

“ชั่วโมง-อินเทอร์เน็ต-ต้อน-รับ-ปี-จอ- -แถม-มโหฬาร-นาน-สูง-สุด- -2- -เท่า-”

อีกตัวอย่าง


source

ประธานาธิบดีสหรัฐฯ ยอมรับว่า เขาได้เซ็นคำสั่งลับเพื่ออนุญาตให้เจ้าหน้าที่ความมั่นคงแห่งชาติสามารถดัก ฟังโทรศัพท์ของประชาชนในสหรัฐฯจริง ขณะเดียวกันก็พยายามต่อสู้เพื่อให้มีการขยายเวลาการบังคับใช้กฎหมายแพทริออตเพื่อต่อต้านการก่อการร้ายออกไปอีก

ผลการตัดคำ

JDK 1.4 BreakIterator

ประธานาธิบดีสหรัฐฯ- -ยอม-รับ-ว่า- -เขา-ได้-เซ็น-คำสั่ง-ลับ-เพื่อ-อนุญาต-ให้-เจ้าหน้าที่-ความ-มั่นคง-แห่ง-ชาติ-สามารถ-ดัก- -ฟัง-โทรศัพท์-ของ-ประชาชน-ในสหรัฐฯ-จริง- -ขณะ-เดียวกัน-ก็-พยายาม-ต่อสู้-เพื่อให้-มี-การ-ขยาย-เวลา-การ-บังคับ-ใช้-กฎหมาย-แพ-ท-ริ-ออ-ต-เพื่อ-ต่อต้าน-การ-ก่อการ-ร้าย-ออก-ไป-อีก-

ICU BreakIterator

ประธานาธิบดี-สหรัฐฯ- -ยอม-รับ-ว่า- -เขา-ได้-เซ็น-คำ-สั่ง-ลับ-เพื่อ-อนุญาต-ให้-เจ้า-หน้าที่-ความ-มั่น-คง-แห่ง-ชาติ-สามารถ-ดัก- -ฟัง-โทรศัพท์-ของ-ประชาชน-ใน-สหรัฐฯ-จริง- -ขณะ-เดียว-กัน-ก็-พยายาม-ต่อ-สู้-เพื่อ-ให้-มี-การ-ขยาย-เวลา-การ-บังคับ-ใช้-กฎหมาย-แพ-ทริออ-ตเพื่อต่อต้านการก่อการร้ายอ-อก-ไป-อีก-

DictionaryBasedBreakIterator

ประธานาธิบดี-สหรัฐฯ- -ยอม-รับ-ว่า- -เขา-ได้-เซ็น-คำ-สั่ง-ลับ-เพื่อ-อนุญาต-ให้-เจ้า-หน้าที่-ความ-มั่น-คง-แห่ง-ชาติ-สามารถ-ดัก- -ฟัง-โทรศัพท์-ของ-ประชาชน-ใน-สหรัฐฯ-จริง- -ขณะ-เดียว-กัน-ก็-พยายาม-ต่อ-สู้-เพื่อ-ให้-มี-การ-ขยาย-เวลา-การ-บังคับ-ใช้-กฎหมาย-แพ-ทริออ-ตเพื่อต่อต้านการก่อการร้ายอ-อก-ไป-อีก-

code ที่ใช้

package th.co.inet.workbreak;

import java.text.BreakIterator;
import java.util.Locale;

//import com.ibm.icu.text.BreakIterator;
//import com.ibm.icu.text.DictionaryBasedBreakIterator;

/**

** @author Nont Banditwong
** TODO To change the template for this generated type comment go to
** Window - Preferences - Java - Code Style - Code Templates
*/

public class ThaiWorkbreak {

public static void printEachForward(BreakIterator boundary, String source) {

StringBuffer strout = new StringBuffer();
int start = boundary.first();
for (int end = boundary.next(); end != BreakIterator.DONE; start = end, end = boundary.next()) {

strout.append(source.substring(start, end) + “-”);
}

System.out.println(strout.toString());

}


public static void main(String[] args) {

Locale thaiLocale = new Locale(“th”);

String input = “ชั่วโมงอินเทอร์เน็ตต้อนรับปีจอ แถมมโหฬารนานสูงสุด 2 เท่า”;

BreakIterator boundary = BreakIterator.getWordInstance(thaiLocale);

//BreakIterator boundary = DictionaryBasedBreakIterator.getWordInstance(thaiLocale);

boundary.setText(input);

printEachForward(boundary, input);

}

}


ด้านล่างเป็นรูปจากโปรแกรมตัวอย่างของคุณฮุ้ย