Pages

10/14/2011

Fixing Chipmunk sound on Skype

My environment is:
OS: Blackbuntu 0.3 x64 (Ubuntu 10.10 inside)
Kernel: 2.6.39-3-bb03
Microphone: USB Webcam Logitech C310

My problem was when I speak on Skype my voice turns into Chipmunk-like sound. But if I don't use Skype, I can record my voice clearly with other tool, e.g. Audacity.

First I tried remove module "snd-usb-audio", and re-insert it again. This doesn't work.

Editing its config at '/etc/modprobe.d/alsa-base.conf' doesn't work either.

Tried this one, https://help.ubuntu.com/community/UbuntuStudio/UsbAudioDevices doesn't work either.

Adding '~/.asoundrc' doesn't work either.

THE PROBLEM IS FROM SKYPE!!!

The solution is to uncheck the box says "Allow Skype to automatically adjust my microphone mixer levels"

Solution is from this forum thread: http://forum.skype.com/index.php?showtopic=468941&st=0

----- UPDATE ---
a day after, it didn't work.
So I install pavucontrol:  sudo apt-get install pavucontrol
Then, the Skype option(sound devices) will have another button on that page.
Open that page and set to...

set fall back button on this page (green button)

for my device set internal Audio, set Profile to "Analog Stereo Duplex"

10/13/2011

วิธีคำนวนปฏิทินร้อยปีในใจ (พร้อมเหตุและผล)

(ภาพจาก iblog.siamhrm.com)


บล๊อคโพสต์นี้เป็นคณิตศาสตร์หน่อยแล้วกัน  พอดีได้ไปอ่านบทความเรื่องการคำนวนปฏิทินร้อยปีจาก http://lifehacker.com/5848651/how-to-quickly-figure-out-the-day-of-the-week-any-date-falls-on แล้วก็เห็นว่ามีสูตรคำนวนแบบง่ายๆอยู่ที่ http://gmmentalgym.blogspot.com/2011/03/day-of-week-for-any-date-revised.html  แต่ว่า.. พอเปิดเข้าไป ก็เจอแต่วิธีท่องจำ  ซึ่งเป็นอะไรที่ไม่ชอบเลยจริงๆ  เลยพยายามนั่งคิดให้เข้าใจสูตรอยู่   พอเข้าใจแล้วก็เลยเอามาเขียนบรรยายตรงนี้  เก็บเอาไว้กันลืม

วิธีแบบง่าย
วิธีนี้เอาไว้ใช้คำนวนภายในเดือนเดียวกัน หรือว่าห่างกันไปไม่กี่เดือน หรืออาจจะข้ามไม่กี่ปี  โดยเราจะใช้เทคนิคที่ว่า
วันที่ +7 แล้วจะออกมาเป็นวันเดิมเสมอ
ยกตัวอย่าง วันนี้เป็นวันที่ 13 ตุลาคม เป็นวันพฤหัสบดี ดังนั้นวันที่ 13+7 (=20), 13+7+7 (=27) ก็จะเป็นวันพฤหัสบดีด้วย  แน่นอนว่ากฎนี้ยังใช้ถอยหลัง(-7) ได้ด้วย ซึ่งจะทำให้ 13-7 (=5) เป็นวันพฤหัสด้วย
และพอเราได้วันใกล้เคียงแล้ว ก็ค่อยเทียบเดินหน้าถอยหลังไปไม่กี่วัน ก็จะรู้ว่าวันที่ต้องการนั้นคือวันอะไร
ถ้าเอากฎข้อนี้มาประยุกต์ใช้ต่อ  ถ้าเราอยากคำนวนวันห่างๆออกไปที่หารด้วย 7 ไม่ลงตัว จะสามารถใช้วิธีเอาผลต่างตรงนั้นมาทำ modulo (หรือการหารเอาเศษ) เพื่อให้ได้วันที่ต้องการได้เลยทันที
ยกตัวอย่างเช่น ถ้าต้องการหาว่าวันที่ 30 ตุลาคม เป็นวันอะไร โดยที่รู้ว่าวันที่ 13 ตุลาคมเป็นวันพฤหัส  เราก็จะสามารถใช้ผลต่าง 30 - 13 = 17 วันนี้ เอามาหารด้วย 7 เพื่อหาเศษ ซึ่งจะได้เป็น 17 % 7 = 3 นั่นหมายถึงว่า เราต้อง +3 จากวันพฤหัสไป ซึ่งหมายถึงว่าวันที่ต้องการนั้นเป็นวันอาทิตย์นั่นเอง

อีกกฎนึงก็คือ
บวกเดือน -คม ให้ +3 , บวกเดือน -ยน ให้ +2

ตรงนี้คือการนำกฎข้อที่แล้วมาใช้  เนื่องจาก เดือนที่ลงด้วย -คม จะมี 31 วัน ซึ่งก็คือ 7x4 + 3 ซึ่งถ้าการ +7 ทำให้ได้วันเดิมแล้ว ถ้าเราต้องการข้ามเดือนก็ต้อง +3 ของเดือนปัจจุบันเข้าไป  วิธีคิดเดือน -ยน ก็ใช้วิธีเดียวกัน

เช่น เรารู้ว่าวันที่ 13 ตุลาคมเป็นวันพฤหัส  แต่เราต้องการรู้ว่า วันที่ 20 เดือนหน้า(พ.ย.) เป็นวันอะไร
เราก็รู้ว่าเดือนนี้ลงท้ายด้วย -คม ดังนั้นเราจะ +3 ไปจากวันปัจจุบัน(พฤหัส)
ทำให้รู้่ว่าเดือนหน้า วันที่ 13 คือวันอาทิตย์ (พฤหัส+3)

แต่วันที่ 13 พ.ย. ยังไม่ใช่วันที่เราต้องการ(20 พ.ย.) ดังนั้นก็ใช้กฏแรกข้างบนเทียบต่อ ก็คือ 13+7 (=20) จะเป็นวันเดียวกัน ซึ่งก็คือเป็นวันอาทิตย์เหมือนเดิม

** หมายเหตุ: สำหรับเดือน กุมภาพันธ์ ซึ่งปกติมี 28 วัน ซึ่งเกิดจากก็คือ 7x4 ก็จะต้อง +0 เข้าไป ยกเว้นถ้าเป็นปีอธิกสุรทิน(leap year) เดือนก.พ.จะมี 29 วัน หรือก็คือ 7x4 + 1 ก็ค่อย +1 เข้าไป

และสุดท้ายแบบข้ามปี
เนื่องจาก ปีนึงปกติมี 365 วัน  หรือก็คือ 7x52 + 1  นั่นหมายความว่า ถ้าเราคิดถึงวันเดียวกันในปีถัดไป หรืออีก 365 วันข้างหน้า  วันนั้นก็จะเป็นวันปัจจุบัน +1
แต่ถ้าการนั้บข้ามปีนี้ จะผ่านวันที่ 29 กุมภาพันธ์ ด้วย นั่นจะทำให้ต้องนับเป็น 366 วัน หรือก็คือ 7x52 + 2 หรือก็คือวันปัจจุบัน +2
ก็จะสรุปได้ว่า
วันเดียวกันของปีข้างหน้าให้ +1, แต่ถ้านับผ่าน 29 กุมภาพันธ์ ก็ให้นับวันนั้นเพิ่มกลายเป็น +2 แทน

วิธีแบบยากแต่เร็ว

เนื่องจากวิธีข้างบนดูเหมือนจะง่าย แต่ว่ากว่าจะคิดหาวันแต่ละวันได้มันจะต้องใช้เวลาค่อนข้างนานในการเทียบแต่ละอย่าง ดังนั้นก็เลยมีคนแปลงวิธีด้านบนให้กลายมาเป็นสูตรง่ายๆ เพียงแค่แปลงวันเดือนปีที่ต้องการให้กลายเป็นตัวเลขก่อน แล้วค่อยเอาเลขพวกนั้นมาบวกกันก็จะได้วันที่ต้องการเลย
และแน่นอน..ตามหลักของ computer science  การคิดให้ความซับซ้อนน้อยลงก็ต้องแลกกับพื้นที่ความจำที่มากขึ้น (computation - memory trade-off)

สิ่งที่ต้องจำคือ
การแปลงวัน
ความหมายของวันในสัปดาห์(ผลลัพธ์การคำนวน)จะตีความได้ดังนี้
อาทิตย์ : 0
จันทร์ : 1
อังคาร : 2
พุธ : 3
พฤหัสบดี : 4
ศุกร์ : 5
เสาร์ : 6

คำอธิบาย:
ตรงนี้จะใช้ตัวเลขทางคณิตศาสตร์แทนวัน  โดยใช้เริ่มต้นจาก 0 และจบลงที่ 6
นั่นทำให้เวลาคำนวนเลขแล้วมีเลขเกิน 6 จะสามารถใช้วิธี modulo ด้วย 7 เพื่อให้ลดลงมีค่าอยู่ระหว่าง 0 - 6 ได้เหมือนเดิม เพื่อความสะดวกในการคิดคำนวน

ภาษาง่ายๆคือหมายถึงว่า  ถ้าคำนวนแล้วเลขเกิน 7 (วันในสัปดาห์มีแค่7วัน) ให้เอา 7 หาร แล้วเหลือเศษเท่าไหร่ก็จะได้ตัวเศษนั้นเป็นผลลัพธ์แทน
**ปล. การใช้ 7 หาร มาจากกฎข้อแรก

การแปลงเดือน
ตามตารางในลิงค์ที่ 2 ด้านบนจะแสดงการแปลงค่าเดือนไว้ดังนี้
มกราคม : 6
กุมภาพันธ์ : 2
มีนาคม : 2
เมษายน : 5
พฤษภาคม : 0
มิถุนายน : 3
กรกฎาคม : 5
สิงหาคม : 1
กันยายน : 4
ตุลาคม : 6
พฤศจิกายน : 2
ธันวาคม : 4
**โดยที่ปีไหนเป็นปี อธิกสุรทิน เดือน ม.ค.และก.พ.จะลดลงหนึ่ง เหลือเป็น 5 และ 1 ตามลำดับ

คำอธิบาย
จะเห็นว่าค่าของเดือนต่างๆ จะเพิ่มไปตามคำอธิบายการเพิ่มเดือน(ในวิธีคำนวนแบบง่าย) ก็คือใช้การ +3, +2 เหมือนเดิม และถ้าเลขเกิน 6 เมื่อไหร่ เลข 7 ก็จะปัดลงมาเป็น 0 (เนื่องจากวันมีแค่ 7 วันต่อสัปดาห์)  ส่วนการเริ่มต้นให้มกราคมเป็นเลข 6 นั้นเพื่อเป็นการดุลสมการให้ตรงกับวันที่ 1 มกราคม 2000 ซึ่งตรงกับวันเสาร์(6)  ซึ่งเดี๋ยวจะกล่าวต่อไป

การแปลงปี
การแปลงปีในสุตรตามลิงค์ที่2ด้านบนสุดจะบอกว่าให้จำว่า
ปีที่ติดกันและไม่เป็นปีอธิกสุรทิน ให้ใช้ +1 เช่น
2000 : 0
2001 : 1
2002 : 2
2003 : 3

คำอธิบาย:
วิธีคิดปีถัดไปที่ติดกันให้ดูที่วิธีคิดปีแบบง่ายจะเห็นว่าทำไมต้อง +1

แต่ถ้าเริ่มห่างเกิน 4 ปี ให้หาว่าห่างจากปีอธิกสุรทินที่ใกล้ที่สุดเท่าไหร่  โดยให้จำปีอธิกสุรทินเฉพาะคือ
2000 : 0
2004 : 5
2008 : 3
2012 : 1
2016 : 6
2020 : 4
2024 : 2

คำอธิบาย:
เนื่องจากปีที่ลงอธิกสุรทินจะมีวันเพิ่มขึ้น 1 วัน ดังนั้นจึงต้องเพิ่ม +1 เข้าไปเพื่อที่จะชดเชยกับวันนั้น
ทำให้จากเดิมที่ปีอธิกสุรทินถัดไปแทนที่จะแค่ +4 (สี่ปีถัดจากก่อนหน้า) แต่ต้องกลายเป็น +5 เพราะเพิ่มวันที่ชดเชยนั้น  และถ้าเกิน 7 ก็ให้ใช้วิธีหารด้วย 7 เอาเศษเหมือนเดิม(เพราะมีแค่7วันในสัปดาห์)

และเนื่องจากเราชดเชยวันพิเศษนี้ไปแล้วด้วยการบวก 1 เพิ่มไปในการแปลงปี ซึ่งจะทำให้ปีทั้งปีมีวันเพิ่มขึ้นไปหนึ่งวัน  แต่เนื่องจากวันพิเศษนี้คือ 29 ก.พ. ดังนั้นเดือนที่จะไม่ได้รับผลกระทบจากวันพิเศษนี้ก็คือเดือนม.ค.และก.พ. ดังนั้นเลยทำให้ในการแปลงเดือนของเดือนม.ค.และก.พ.ในปีที่เป็นอธิกสุรทินต้องมีการ -1 เพื่อชดเชยการชดเชยการแปลงปีตรงนี้ด้วย

และถ้าสังเกตให้ดีในการแปลงปี เมื่อครบ 12 ปี จะเป็นการ +1 แทน (365x12 + 1x3 = 4380 = 7x626 +1)
จะทำให้ได้วิธีจำง่ายๆว่า
2000 : 0
2012 : 1
2024 : 2
2036 : 3
2048 : 4

การคำนวน
วิธีการคำนวน ก็คือการแปลงวันที่ได้รับมาให้อยู่ในตัวเลขก่อน แล้วค่อยนำตัวเลขเหล่านั้นมาบวกกัน โดยใช้หลัก
วันที่ต้องการ = วันที่ + เดือน(แปลงแล้ว) + ปี(แปลงแล้ว)

ยกตัวอย่างเช่น
วันที่ 13 ต.ค. 2011
วันที่ : 13
เดือน : ต.ค. = 6
ปี : 2011 = ปีอธิกสุรทินใกล้สุดคือ 2008 + 3 = 3 + 3 = 6
ดังนั้นวันนั้นคือ วันที่ + เดือน + ปี = 13 + 6 + 6 = 25 = 7x3 + 4 = 4 = วันพฤหัส

ตัวอย่างที่ 2
วันที่ 1 ม.ค. 2000
วันที่ : 1
เดือน : ม.ค. = 6 แต่เป็นปีอธิกสุรทินจะต้อง -1 = 5
ปี : 2000 = 0
วันนั้นจะเป็นวัน 1 + 5 + 0 = 6 = เสาร์

และถ้าสังเกตดีๆ ตรงนี้นี่เองที่เป็นการบังคับว่ามกราคมต้องแทนด้วยเลข 6 ซึ่งส่งผลต่อเลขเดือนอื่นๆที่ต้องท่องจำด้วย  ก็เพราะวันที่ใช้อ้างอิงในสูตรนี้คือ 1 มกราคม 2000 ซึ่งเป็นวันเสาร์นั่นเอง

ตัวอย่างที่ 3
วันที่ 31 ธันวาคม ปี 2099
วันที่ : 31
เดือน : ธันวาคม = 4
ปี : 2099 = 2096 + 3 = (2000 + 12x8) + 3 = 8 + 3 = 11 = 7x1 + 4 = 4
ดังนั้นวันนั้นจะเป็นวัน 31 + 4 + 4 = 39 = 7x5 + 4 = 4 = วันพฤหัสบดีี

ลองเอาไปเล่นกันนะครับ  ^_^

UPDATE (23 ก.ย. 2555)
พอดีมีคนถามเรื่องการคิดถอยหลังไปในปีที่ตำกว่าปี 2000
เลยเขียนโพสต์เพิ่ม สำหรับการคำนวนที่ไม่อยู่ระหว่างปี 2000 - 2999
ติดตามอ่านได้ที่  วิธีคำนวนปฏิทินร้อยปีในใจ (พร้อมเหตุและผล) ภาค 2 สำหรับศตวรรษอื่น