วันศุกร์, กุมภาพันธ์ 24, 2549
bigger or stable
น่าแปลกคือร้านที่ดีจริงๆ เหล่านั้น บ่อยครั้งไม่อยู่ให้เราไปลองกันนานๆ บางครั้งถ้าร้านเกิดฮิตขึ้นมาหน่อย ก็ต้องเข้าคิวรอกิน
เรื่องนี้ในมุมของ IT ก็เป็นเหมือนกัน คือ มักจะมีการเสนอขอความสามารถใหม่ๆ สารพัด ไอเดีัยบรรเจิดกันกระจาย
สังเกตไหมว่าเว็บอย่าง Blogger นั้นความสามารถแทบจะเรียกได้ว่าไม่มีอะไรเลย แต่คนจำนวนมากทีเดียวที่ยังใช้ Blogger ผมเองก็เป็นอีกคนหนึ่งที่ชอบใช้ Blogger ไม่ใช่เพราะความสามารถของมัน หากแต่เป็นความน่าเชื่อถือของมัน
Blogger อาจจะฟีเจอร์ไม่เยอะมากมาย แต่เมื่อคุณต้องการใช้ น้อยครั้งมากที่เซิร์ฟเวอร์มันจะล่ม
แมคก็แบบเดียวกัน มันอาจจะไม่อร่อยมาก แต่มันก็มีให้คุณกินทุกที่ และกินได้พอๆ กันในทุกๆ สาขาทั่วโลกของแมค
เรื่องนี้น่าสนใจคือเมื่อเราสร้างธุรกิจขึ้นมา เรามองระดับความต้องการที่จะขยายตัวไปถึุงระดับไหน หากเรามองที่ห้องแถวสามคูหา คนเต็มร้าน แบบร้านก๋วยเตี๋ยวแถวบ้านผม ก็ไม่ต้องคิดมาก อาศัยว่าทำอร่อย ละเมียดกับสินค้า มันก็ขายได้ แต่ถ้าอยากสเกลขึ้นไปถึงระดับประเทศ ต้องเริ่มคิดว่าเด็กทำงานพิเศษมันไม่ใช่กุ๊กระดับประเทศ จะต้องคิดสูตรยังไง ให้ไม่ว่าใครมาทำ ก็กินได้โดยไม่เสียยี่ห้อเรา อาจจะไม่ได้อร่อยอะไรมากมาย แต่ทุกคนสามารถทำได้
เว็บของเราอาจจะไม่ได้ฟีเจอร์เยอะเหมือนคู่แข่ง แต่มันรองรับคนใช้ได้สามแสนคนต่อวัน กับคู่แข่งที่ฟีเจอร์เยอะกว่า เว็บอาจจะเริ่มเดี๊ยงที่คนใช้สามพันคน
เป็นสิ่งที่เราต้องแลกเอา
cerdit: justcompany
วันพฤหัสบดี, กุมภาพันธ์ 23, 2549
เผยเคล็ดลับ... รักษาสิวเสี่ยน
เผยเคล็ดลับ... รักษาสิวเสี่ยน
ก่อนอื่นขอบอกก่อนนะว่า ลองทำแล้วได้ผลสุดๆ
ใครไม่เชื่อลองดูเลย เหมาะมากไม่ต้องไปเสียตังด้วย แนะนำเลย
พร้อมยัง.............เริ่ม
วิธีนี้อาจไม่เป็นผลดีต่อตัวเองนะคะ โปรดใช้วิจารณญาณการอ่าน
บอกทีละขั้นตอนเลยนะ
1. ตื่นเช้ามาวันแรกให้อดข้าว
2. ข้าวกลางวันก็ไม่ต้องกิน
3. พอถึงข้าวเย็นก็ไม่ต้องกิน ( อดทนหน่อยนะใกล้แล้ว )
4. นอนพักผ่อนให้เพียงพอ
5. ตื่นเช้ามาอีกวันก็อย่าเพิ่งกินข้าวเช้านะคะ
6. เมื่อเราไม่ได้กินข้าวมาทั้งวันพอถึงตอน "สายก็จะหิว"
lol
ทำไม 1 โหลต้องมีจำนวนนับได้ เป็น 12
จนมนุษย์เราติดต่อสื่อสารค้าขายกัน จึงเหลือแต่เลขฐาน 10 มาใช้เป็นหลักสากลดังปัจจุบัน ...
ส่วนไทยใช้ฐาน 10 กันมาแต่ยุคโบราณแล้ว เราจึงไม่เห็นการเปลี่ยนแปลงอะไรนัก ...
ปล. เลขฐาน5 เช่น เลขโรมัน, เลขฐาน12 เช่น โหล, กุรุส (12โหล = 12x12 = 144ชิ้น)
วันเสาร์, กุมภาพันธ์ 18, 2549
iptables for newbie
> iptables -A INPUT -i eth0 -j DROPถ้าสั่งแบบนี้ แปลว่าเราไม่รับ package ใดๆ ที่เข้ามาทาง eth0 เลย (ก็ไม่ฟังชาวบ้านหน่ะละ)
note: eth0 ก็คือ LAN Card ตัวที่ 1 ของเรา ถ้ามีตัวอื่นๆ อีกก็ไล่ไปเรื่อย
note2: ถ้าไม่ได้อยู่หน้า console อย่าไปสั่ง command นี้เชียว เดี๋ยวจะเป็นเรื่อง
ทีนี้มันเป็นไปได้หรือ? ที่จะไม่คุยกะชาวบ้านชาวช่องเลย คำตอบคือ เป็นไปไม่ได้ครับ แล้วทีนี้จะทำไงละ? ก็ต้องปิดเป็นจุดๆ ไป เช่น สมมุติว่า เราไม่อยากให้ชาวบ้านเค้า ping เราเจอ เราก็จะสั่งว่า
> iptables -A INPUT -p icmp -j DROP
มันแปลว่า ถ้ามีอะไรก็ตามที่เป็น icmp เข้ามา ก็ให้ drop ทิ้งไป ไม่ต้องสนใจ ที่นี้ ถ้าสมมุติว่าเรามี LAN Card หลายตัว เกิดอยากปิดแค่บางตัวจะทำยังไง เราก็ต้องผสมคำสั่งเข้าไปซิครับ ย้อนกลับไปดูอันบนกันหน่อย ผมมี -i eth0 อยู่ใช่ม่ะ? เราก็เอาไอ้ -i eth0 นี่ละ มาใส่เข้าไปเลย กลายเป็น
> iptables -A INPUT -i eth0 -p icmp -j DROP
คราวนี้มันก็จะแปลได้ว่า ถ้ามี icmp เข้ามาทาง eth0 เมื่อไหรให้ drop ทิ้งไป แต่ถ้ามาทางอื่นๆ ก็ไม่ต้องทำอะไร (คือปล่อยไปตามปกติ)
คราวนี้มาดูความหมายกันมั่งว่าไอ้ parameter แต่ละตัวเนี่ย มันคืออะไรกันบ้าง? เริ่มจาก
: -A INPUT ไอ้เข้า -A INPUT เนี่ย มันหมายถึงขาเข้า ทีนี้มีขาเข้ามันก็ต้องมีขาออก ก็เปลี่ยนจาก -A INPUT เป็น -A OUTPUT เท่านั้นเองครับ ถ้าเราใช้ -A ต่อๆ กันหลายๆ คำสั่ง มันก็จะเอา rule ไปต่อท้ายเรื่อยๆ ถ้าหากต้องการแทรก ให้ใช้ -I INPUT 1 แทน ซึ่งถ้าใส่ 1 มันจะเติมเข้าไปเป็นตัวแรกสุดเลย
: -i eth0 ใช้ได้กะ -A INPUT เท่านั้น เอาไว้ระบุว่าจะให้ดู package ที่ LAN Card ตัวไหน อีกตัวที่เป็นไปได้คือ -o eth0 ก็จะใช้ได้กะ -A OUTPUT เท่านั้นเหมือนกัน
: -p icmp ไอ้ตัวนี้ละที่จะเป็นตัวกำหนดเลยว่าเราจะ monitor protocal ประเภทไหน เช่น icmp (ping), tcp, udp หรือว่าอื่นๆ ถ้าเป็น tcp หรือว่า udp เราสามารถกำหนด port เพิ่มเติมได้ด้วย parameter -dport 80 หรือ -sport 80 สองตัวนี้ต่างกันตรงที่ว่า ตัวนึงไว้ใช้กะ -A INPUT (-dport 80) ส่วนอีกตัวไว้ใช้กะ -A OUTPUT (-sport 80)
: -J DROP ไอ้เจ้าตัวนี้ละสำคัญที่สุด มันจะเป็นตัวที่บอกว่า ถ้ามี package เข้ามาตามเงื่อนไขที่ระบุไว้ในบรรทัดนี้แล้ว จะให้ทำยังไง เป็นไปได้คือ DROP, ACCEPT, REJECT, REDIRECT ซึ่งที่เราสนใจจะมีสองตัวคือ DROP กะ ACCEPT ความหมายก็ตามชื่อมันเลย DROPACCEPT ก็รับมาเข้ามาแล้วจะจัดการยังไงต่อเป็นอีกเรื่องนึง
: -F อันนี้รุนแรงสุดละ มันคือคำสั่งที่จะลบ rule ทั้งหมดที่เคยทำไว้ ถ้าเกิดทำๆ ไปแล้วเจ๊งก็สามารถ reset ได้ด้วยวิธีนี้ครับ ก็ช่างหัวมัน ทิ้งไปโล้ด ส่วน
interview google
1. Complexity ของ quicksort แบบเฉลี่ยกับแย่สุด
2. มี bitstring ยาวมาก ต้องการนับจำนวนบิตที่มีค่าเป็น 1 กำหนดให้มีที่เก็บไม่จำกัด
รอบสอง
1. tcp กับ udp ต่างกันยังไง
2. ถ้าต้องเลือก tcp/udp จะเลือกยังไง
3. firewall จัดการกับ tcp/udp ยังไง
รอบสาม
1. จะ reverse string ยังไงให้เร็วที่สุด
2. ออกแบบฟังก์ชั่นโอนเงินในธนาคาร
- -"
Firefox tune up
แล้วปรับเป็น true เพื่อไม่ให้หน่วยความจำมันจำมากไป
2 Ben Goodger ได้ตีพิมพ์วิธีการยับยั้งปัญหานี้ลงในบล็อกไฟร์ฟอกซ์ของเขา
ซึ่งใจความที่สำคัญนั่นก็คือ ปัญหาการเก็บแคชที่มากไป
ไม่มีความจำเป็นใดๆเลย ที่เมื่อเปิดไฟร์ฟอกซ์ แล้วท่องเว็บไป 8 หน้า
แต่ยังเก็บแคชในเว็บแรกที่ท่อง!!
สิ่งนี้เอง ที่ทำให้มันต้องใช้หน่วยความจำที่สูงในการเก็บแคช
เขาจึงได้เสนอวิธีทางแก้ที่ง่ายๆ
โดยหลักการตั้งค่าก็คือ กำหนดว่าเราเข้าไปกี่เว็บแล้ว
ถ้าเกินโควต้า ก็จตะไม่เก็บแคช
โดย Ben ได้สร้างตารางง่ายๆขึ้นมา ซึ่งจะแปรผันตามแรมที่มี
RAM 32MB 64MB 128MB 256MB 512MB 1GB 2GB 4GB | จำนวนหน้าที่จะยังเก็บแคช 0 1 2 3 5 8 8 8 |
วิธีการก็ง่ายมาก
เพียงแค่ใส่ URL ว่า about:config
จากนั้นใส่โค้ดว่า
browser.sessionhistory.max_total_viewers
แค่นี้ก็เสร็จสิ้นแล้วครับ
อ้อ อย่างไรก็ตาม มันจะตั้งค่าได้เต็มที่คือ 8 เท่านั้น
ถ้าใส่มากกว่านี้ เช่น 20 30 40 มันจะตั้งให้เป็น 0 ให้ทันที
นั่นคือฟังก์ชั่นการเก็บแคชจะถูกปิดการทำงาน
อีกอย่างนึงครับ จำนวนหน้าที่เก็บแคช นั่นหมายถึงว่า
จำนวนเว็บที่เปิดต่อการเข้าชมทั้งหมดนะครับ ไม่ใช่ต่อแท็บ
วันพฤหัสบดี, กุมภาพันธ์ 16, 2549
How-to Compile C บน linux
gcc เป็น compiler อย่างเดียว
ถ้าอยากได้ IDE ด้วยก็ลองเล่น
พวก kdevelop หรือว่า anjuta
ส่วน debuger ก็ใช้ gdb
ปกติใช้ผ่าน command line เอาไม่ต้องเข้าโปรแกรม :-P
สมมุติว่าเราเขียน program ด้วย notepad ไว้ก่อน
แล้ว save ใส่ file ชื่อ toto.c
เรามาสั่งที่ shell ว่า gcc -o toto toto.c
แล้วว่าสั่ง run ก็สั่ง ./toto
( จริงๆ turbo c ก็ทำแบบนี้ได้นะ รู้สึกว่าใช้คำสั่ง tcc )
บน linux ไม่มี notepad เราใช้โปรแกรมอื่นๆ แทนได้
เช่น gedit ......
How-to mount USB Handy drive in *nix
เราก็อาจจะเริ่มจากสร้าง directory ( folder )
ไว้รอเช่น mkdir /mnt/flash
แล้วก็สั่ง mount
mount -t vfat /dev/sda1 /mnt/flash
ก็น่าจะเป็นอันใช้ได้
ที่ http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Flash-Memory-HOWTO.html
อธิบายละเอียดเลย ... แต่ถ้าทำง่ายแล้วมันได้ก็ไม่ต้องอ่าน :-)
เครื่องที่เคยลง Ubuntu Linux ไว้ เสีบ USB drive
เข้าไปแล้วใช้ได้เลย ( ไม่ได้ทำอะไรเลย )
ก็มี icon ขึ้นมาบนจอแล้ว clickๆ เอา
--------------------------------------------------------------------------------------------------------------------------------------
ส่วนนี้เป็นการเมาท์แฮนดี้ไดรฟ์ โดยเพิ่มพารามิเตอร์ iocharset=utf8 เพื่อให้สามารถอ่านภาษาไทยได้ และ umask=000 เพื่อให้ผู้ใช้ทุกคนสามารถอ่าน และ เขียนได้ และ /mnt/usbdisk นั้น ก็คือไดเรคเทอรี่ที่เราสร้างขึ้นมา เพื่อใช้ในการเมาท์
mkdir /mnt/usbdisk
mount -t vfat /dev/sda1 /mnt/usbdisk -o iocharset=utf8,umask=000
สำหรับ /dev/sda1 นั้น ก็เป็นที่อยู่ของแฮนดี้ไดรฟ์ ซึ่งตรวจสอบได้จากคำสั่ง fdisk -l ดังข้างล่าง
root@chatpong:~# fdisk -l
Disk /dev/hda: 30.0 GB, 30005821440 bytes
!
!
!
Disk /dev/sda: 63 MB, 63766528 bytes
122 heads, 1 sectors/track, 1020 cylinders
Units = cylinders of 122 * 512 = 62464 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1021 62271+ 6 FAT16
Partition 1 has different physical/logical endings:
phys=(1020, 121, 1) logical=(1020, 103, 1)
credit : http://chatpong.exteen.com/20050831/entry-1
วันอาทิตย์, กุมภาพันธ์ 05, 2549
RAM requirements
and it so important
คิดง่ายๆว่า ถ้ามี พื้นที่ 8gb จะต้องใช้ แรม 48mb ถึงจะครอบคลุมทุกอย่าง