เกมพาคนสัตว์สิ่งของข้ามแม่น้ำนี่มีหลายเวอร์ชั่นมาก เกมนึงที่น่าจะเคยเล่นกันคือ “เกมพาหมาป่า แกะ และกะหล่ำปีข้ามแม่น้ำ” ในเกมนี้ เราต้องพาของทั้งสามอย่างข้ามฝั่งแม่น้ำโดยมีกฎอยู่ว่า
- พาของข้ามแม่น้ำได้ทีละ 1 อย่าง
- ถ้าอยู่กันสองต่อสอง หมาป่าจะกินแกะ และ แกะจะกินกะหล่ำ
อ่านกฎ อ่านกติกาเข้าใจยาก… คลิกที่รูปเพื่อลองเล่นเลยดีกว่าครับ

เกมหมาป่า แกะ กะหล่ำ
Read the rest of this entry »
December 25th, 2011 in
คอมพิวเตอร์จ๋า | tags:
algorithm,
haskell |
No Comments |
461 views
เวลาดึงข้อมูลจาก Model เช่น
blogs = Blog.objects.all() # ได้ QuerySet ของบล็อกหลายๆ อัน
print blogs[0].title
print blogs[0].body
print blogs[1].title
print blogs[1].body
จะเห็นว่าเราใช้ QuerySet ได้เหมือนเป็นอาเรย์หรือ list เลย
แต่สิ่งที่ต้องระวังคือ blogs เป็น QuerySet ไม่ใช่ list
เวลาอัพเดทข้อมูลใน model ต้องระวัง
bug แบบนี้
1
2
3
| blogs[0].title = "New Title"
blogs[0].body = "new content"
blogs[0].save() |
ถ้ารันโค้ดข้างบนแล้ว blogs[0] จะไม่เปลี่ยนแปลงค่าอะไรเลย เพราะ:
- blogs[0] ในแต่ละบรรทัดเป็น object คนละอันกัน (คนละ instance กัน)
- การเรียก blogs[0] แต่ละครั้ง QuerySet จะให้ object ใหม่ทุกครั้ง ทำให้การกำหนดค่ามีผลกับ object ในบรรทัดนั้นเฉยๆ
- blogs[0].save() ในบรรทัดที่ 3 จะอ่านค่า blogs[0] จาก database และ save() กลับไปโดยยังไม่ได้แก้ไขอะไรเลย
ที่ถูกต้องควรเป็น
b = blogs[0]
b.title = "New Title"
b.body = "new content"
b.save()
แต่ถ้าอยากใช้ได้เหมือน list จริงๆ ก็ทำได้โดยบังคับให้ Django มัน evaluate QuerySet ให้กลายเป็น list ด้วยฟังก์ชัน list
เช่น
มีข้อเสียคือ
* มี large memory overhead
* blogs.filter ต่อไม่ได้… เพราะโดน evaluate ไปแล้ว
November 18th, 2011 in
คอมพิวเตอร์จ๋า | tags:
django,
python |
No Comments |
289 views
rules = (
( 'foo', 1),
( 'spam', 2),
( 'bar', 3),
"""
( 'egg', 4),
( 'python', 5),
"""
)
for name, val in rules:
print name, val
โค้ดข้างบนพอรันแล้วจะเจอ ValueError (too many values to unpack)
ตอนมองแว๊บแรก ก็คิดว่าโค้ดน่าจะโอเค แค่ comment egg กับ python ออกไปแบบหลายบรรทัด… แต่จริงๆ แล้วมันไม่ใช่
เราสร้าง list ที่มี (‘foo’, 1), (‘spam’, 2), (‘bar’, 3) และ “”" (‘egg’, 4),…”"” <– ก้อนนี้เป็น string แบบหลายบรรทัด ไม่ใช่ comment!!
ปล. ตอนนี้มีอยู่ 1 bug, เดี๋ยวมีอะไรเพิ่ม จะเอามาแปะอีกครับ
August 29th, 2011 in
คอมพิวเตอร์จ๋า | tags:
bugs,
python |
3 Comments |
502 views
แฮ่ วันนี้ลองเล่น closure ใน python เต็มที่เลยครับ
funcs = []
i=0
def funcfactory():
global i
i += 1
j = i
def callback():
print j
funcs.append(callback)
funcfactory() # ได้ callback ที่มี j = 1
funcfactory() # ได้ callback ที่มี j = 2
funcfactory() # ได้ callback ที่มี j = 3
print funcs
for f in funcs:
f()
list funcs จะเก็บ function ‘callback’ ที่มีโค้ดแบบเดียวกัน (print j) แต่มี context ต่างกัน (j = 1, 2, 3)
closure = (function, environment ของฟังก์ชั่น)
Edit: ข้อจำกัดสำคัญของ Closure ใน python คือ “อ่านได้อย่างเดียว” วิธีแก้ปัญหาทำได้โดยส่ง reference แทนตามตัวอย่างใน [ref]
ใน Python 3 มีคีย์เวิร์ด nonlocal ไว้ใช้อ้างถึงตัวแปรที่อยู่ใน Scope ก่อนหน้าได้
July 8th, 2011 in
คอมพิวเตอร์จ๋า | tags:
python |
1 Comment |
589 views
เคยเรียกคำสั่งอะไรใน terminal แล้วมันก็ขึ้นเลข 0%, 10%, 20%, … 100% ใน terminal ไหม (มันอัพเดทข้อความในบรรทัดเดิมได้เรื่อยๆ… มันทำยังไงหว่า?)
อ่ะนี่ ตัวอักษรสำคัญเลขคือ \r (carriage return)
#include<stdio.h>
void delay()
{
for(int i=0;i<1000000;i++) for(int j=0;j<10;j++);
}
int main()
{
for(int p=0;p<=100;p++)
{
delay();
printf("\rPercent: %d ", p);
fflush(stdout);
}
printf("\n");
return 0;
}
งืมๆ… มาพ่นโค้ด แล้วก็ไป ฮ่าๆ
June 2nd, 2011 in
คอมพิวเตอร์จ๋า | tags:
C |
2 Comments |
1,008 views
สวัสดีครับ ผมกำลังทำโปรเจคจบอยู่ครับ
สิ่งที่ทำคือ Keyboard ManMan (คีย์บอร์ดแม่นๆ)

คีย์บอร์ดนี้สามารถย่อขยายปุ่ม ตามความน่าจะเป็นที่จะโดนกดครับ เช่นในรูปทางซ้ายมือนี้ คีย์บอร์ดเดาว่าปุ่มถัดไปที่เราน่าจะกดคือ สระอี (ปุ่มสระอีมีขนาดใหญ่กว่าปุ่มอื่น)
ตอนนี้จำเป็นต้องวัดผลครับว่า คีย์บอร์ดที่ทำช่วยให้พิมพ์เร็วขึ้นหรือไม่อย่างไร
อยากรบกวนให้ดาวน์โหลดโปรแกรม 2 โปรแกรมจาก Android Market ครับ โปรแกรมแรกเป็นคีย์บอร์ด อีกโปรแกรมเป็นโปรแกรมวัดความเร็วการพิมพ์ครับ สามารถค้นใน Market ว่า Natt Piyapramote หรือใช้ Barcode ข้างล่างได้เลยครับ
เมื่อดาวน์โหลดโปรแกรมแล้วให้ Enable Keyboard โดย
1. กลับไปที่ Home และกดปุ่ม Menu
2. เลือกเมนู Settings -> Language & keyboard
3. ติ๊กถูกที่ Keyboard ManMan
เปิดโปรแกรม Keyboard Labs และลองพิมพ์โดยใช้คีย์บอร์ดแม่นแม่น และคีย์บอร์ดอื่นๆ ที่เพื่อนๆ เคยใช้มาก่อน เมื่อทดลองแล้วผลการทดลองจะปรากฏที่หน้าจอหลัก ถ้าเพื่อนๆ ต่อ Internet แล้ว อยากให้ช่วยกดปุ่ม “ส่งผลทดสอบให้นักพัฒนา” ด้วยครับ ผมจะได้ทราบว่าการย่อขยายปุ่ม/การเดาอื่นๆ จะช่วยให้พิมพ์ได้รวดเร็ว หรือผิดพลาดน้อยลงหรือไม่ครับ
แนะนำติชมได้ที่ http://on.fb.me/manman_ เลยนะคร้าบ
ขอบคุณครับ ^^
January 26th, 2011 in
คอมพิวเตอร์จ๋า | tags:
android,
cpe,
java,
keyboard |
11 Comments |
4,974 views
ปกติผมมักจะเปิด Terminal เรียกคำสั่ง แล้ว Copy ผลลัพธ์ไปแปะในโปรแกรมอื่น เช่น Browser
แต่รู้สึกชีวิตมันลำบากเหลือเกิน เลยไปค้นเจอโปรแกรม xclip เป็นโปรแกรมจัดการ Clipboard (ที่พักข้อมูลเวลาเรา Copy/Paste) บน Linux
วิธีใช้
cat file.txt | xclip # เอาผลลัพธ์ของคำสั่ง cat file.txt ไปใส่ใน clipboard
กด Paste ที่โปรแกรมที่ต้องการได้ทันที
คำสั่งอื่นๆ
xclip -o # พิมพ์ข้อมูลที่มีอยู่ใน clipboard ออกมา
xclip -o > out.txt # เอาเนื้อหาใน clipboard ลงไฟล์ out.txt
ติดตั้งด้วยคำสั่ง: sudo apt-get install xclip ตามปกติครับ
January 18th, 2011 in
คอมพิวเตอร์จ๋า | tags:
linux,
ubuntu |
No Comments |
1,005 views
ใครเขียน C# จะงงๆ ว่าทำไม Array 2 มิติถึงประกาศได้ 2 แบบ คือ
int[,] val = new int[3, 3];
|
int[][] val = new int[][3];
for(int i=0; i < 3; i++)
val[i] = new int[3];
|
เอ๊ะ มันก็ได้ array 2 มิติเหมือนๆ กันนี่นา จะมีสองแบบไปทำไม… พอไปค้นเว็บ ก็เลยอ๋อ…เราสามารถสร้าง Jagged Array ให้มีหน้าตาแบบนี้ก็ได้ครับ

January 17th, 2011 in
Uncategorized |
No Comments |
987 views
a = [1]
for i in a:
print i
if len(a) < 10:
a.append(i+1)
ได้ผลลัพธ์เป็น
1
2
3
4
5
6
7
8
9
10
ตื่นเต้นดี for loop บน list ที่โตขึ้นเรื่อยๆ… ไม่รู้ว่าจะจบเมื่อไหร่
December 7th, 2010 in
คอมพิวเตอร์จ๋า | tags:
python |
No Comments |
764 views
EDIT: ตอนนี้ Chromium บน Linux ใช้ภาษาไทยได้แล้วนะครับ โหลดจาก PPA ของ Chromium Dev Channel (ผมใช้รุ่น 11.0.672.2 (75134) อยู่ครับ)
Chromium คือโปรเจค Open-source ที่เป็นฐานของ Google Chrome ที่เราใช้ๆ กัน ปัญหาใหญ่ของคนใช้ Ubuntu คือ Chrome มันแสดงผลสระภาษาไทยเลื่อนไปทางซ้าย ทำให้อ่านเว็บไม่รู้เรื่อง
จากที่ได้พยายามทำ chromium-thai-ppa กับพี่ lewcpe ในงาน Barcamp Bangkhen ผมก็กลับมางมต่อที่บ้านอีก 2 วัน ในที่สุดก็สามารถอัพ Chromium ตัวที่แก้ภาษาไทยขึ้น Ubuntu PPA ได้แล้วครับ
วิธีติดตั้งง่ายมาก 3 บรรทัดจบ (เปิด Terminal แล้วพิมพ์คำสั่งทีละบรรทัด)
sudo apt-add-repository ppa:thai/chromium-thai-ppa
sudo apt-get update
sudo apt-get install chromium-browser
หมายเหตุ: Chromium รุ่นที่มีอยู่บน PPA ตอนนี้คือตัวเดียวกับใน Chromium Dev Channel (อาจพังได้เป็นบางครั้งบางคราว) เอามา patch ภาษาไทยนิดนึง
เดี๋ยวจะมาเขียนบล็อกเพิ่มเกี่ยวกับวิธีเอา package ขึ้น Ubuntu PPA ครับ (สำหรับคนใจร้อนสามารถอ่านบล็อกพี่ลิ่วก่อนได้เลยครับ)
เขียนวิธีสร้างและเอา package ขึ้น Ubuntu PPA แล้วนะครับอยู่ที่ฟอรัม Project ของ Blognone
October 23rd, 2010 in
คอมพิวเตอร์จ๋า | tags:
chromium,
ppa,
ubuntu |
6 Comments |
1,315 views