Posts

Showing posts with the label python

Word Counting in Various (Programming)Language

Image
ผมเป็นคนหนึ่งทีีเขียน Programming Langauge ได้หลายภาษา เนื่องจากสนใจ ผมเริ่มเขียนจาก C/C++ ซึ่งก็ไม่สบายนัก เลย ค้นหาภาษาที่จะมาช่วยล่นระยะเวลาในการเขียนเล่น เช่น Python, Ruby  วันนี้ก็อยากเขียนเล่น โดยเราจะมาเขียนโปรแกรมง่ายๆ กันด้วยหลายๆ ภาษากัน ปัญหา: ผมจะนับคำจำนวนคำที่ไม่ซ้ำจากข้อความหนึ่งข้อความ (string) C++ เนื่องจากการใช้ split บน C++ นั้นไม่เจอวิธีที่ดูง่ายก็เลยเขียนเองซะเลย Objective-C (with ARC)  เริ่มมีตัวช่วยเป็นภาษาที่ใช้เขียนบน iOS Java ภาษาที่เขาว่าเวิ่นเว้อ #จาว่าเร็วส์  คราวนี้มาฝั่ง Scripting Langauge กันบ้างเริ่มที่ Python Ruby  กันบ้าง เป็นภาษาที่พักหลังนี้ผมใช้เขียนประจำเลยครับ :)  มีคนบอกว่าภาษาพวก Scripting เร็วส์ ซึ่งเร็วในที่นี้หมายถึง "ความเร็วในการพัฒนา" นะครับ จากที่เห็นไปด้านบน เราสามารถแก้ปัญหาด้วย Code เพียงไม่กี่บรรทัดเท่านั้น  ลองเล่นกันครับ ... เป็นหลายๆ ภาษามันก็ดี เน้นที่พื้นฐานให้มาก ถ้าพื้นฐานเน้น กำแพงเวลาในการเรียนรู้ภาษาใหม่ๆ จะลดลง แล้วอย่าพยายามเขียนภาษาใหม...

List Comprehensions in Python and Ruby Way

Image
List Comprehensions เป็น Feature ที่น่าสนใจบน Python และมีอีกหลายภาษาที่นำ Feature นี้ไปใช้ ที่ผมพบคือ Coffee Script http://www.python.org/dev/peps/pep-0202/ List Comprehensions จะพูดง่ายๆ คือการที่เราทำอะไรสักอย่างกับ List ที่มีอยู่ แล้วคืนค่ากลับมาเป็น List เช่น ยกกำลัง 2 จำนวนเต็มทุกตัวที่เป็นเลขคู่ หรือพูดอีกแง่คือ เราสามารถสร้าง List จากคำสั่ง for, if ก็ย่อมได้ ซึ่งเราสามารถใช้วิธีการวน for (และใส่ if ข้างใน) ก็สามารถทำได้เช่นเดียวกัน แต่การใช้ List Comprehensions จะทำได้ในบรรทัดเดียว และมันเร็วกว่าด้วย (เรื่องของเร็วกว่า ลองไปศึกษาเพิ่มเติมดูนะครับ) มาดูในภาษา Python กันก่อน ส่วนในภาษา Ruby นั้น ไม่มี List Comprehensions ให้ใช้ แต่มี method ที่ช่วยให้เราทำในลักษณะเดียวกันได้ นั่นคือ select และ map จะเขียนได้ประมาณนี้ครับ แต่ map นั้นจะเป็นการทำอะไรสักอย่างกับ List เท่านั้น ไม่สามารถใช้ในการสร้าง List ขึ้นมาใหม่ได้เหมือน List Comprehensions ใน Python เมื่อดูจาก Syntax แล้ว ... ผมให้ Python ชนะเรื่องนี้นะ ... Code มัน Readable กว่าจริงๆ  ...

JSON Parsing with Python

Image
JSON เป็นรูปแบบเพื่อการแลกเปลี่ยนข้อมูลในปัจจุบันที่กำลังได้รับความนิยม (ซึ่งมาแย่งที่ XML) รูปแบบหลักๆ ก็คือเป็น Key Value and Object Concept ซึ่งใช้กันอย่างแพร่หลาย เนื่องจากง่ายต่อการอ่านข้อมูลอย่างมาก ไม่รก โดยสามารถอ่านรายละเอียดได้ที่นี่ครับ http://json.org ตอนแรกคิดว่าต้องลงอะไรเพิ่มเติม แต่ง่ายกว่าที่คิดครับ เพราะ Python มี JSON Parsing Library มาให้อยู่แล้ว ในที่นี้ผมจะ Request Facebook Graph API เป็นข้อมูลของผมเองนะครับ :) (Public Data) http://graph.facebook.com/baszii นี่คือส่วนของ Parsing นะครับ ยังมี method อีกหลายตัวที่น่่าสนใจให้เล่นอยู่ ตามนี้เลย ลองไปเล่นกันต่อดูนะครับ :)

[Python] Simple Crawler (HTML Parser)

Image
มาดึงข้อมูลจาก Website กันเถอะ ... นึกภาพ Mark Zuckerberg ในหนัง Social Network ตอนต้นนะครับ อารมณ์ประมาณนั้นเลย ... (แค่อารมณ์นั้นนะ แต่ในหนังนั้น Hack ของจริง :) (ข้อมูลทุกอย่างเป็นข้อมูลเปิดนะครับ แค่ไม่ได้ทำมาเพื่อให้ดึง แต่เราจะดึง โอเคนะ) Library ที่เราจะใช้ (ต้องลงเพิ่ม ไม่มี Default) คือ urllib3 และ bs4 (Beautiful Soup 4) ซึ่งสามารถหาได้จากที่นี่ -->  http://pypi.python.org/pypi?%3Aaction=index หรือใครใช้ Unix ก็ลงจาก pip หรือ easy_install ก็ได้นะ :) $ pip install urllib3 $ pip install beautifulsoup4 จากนั้นก็เริ่มเขียนกันได้เลย โดยผมออกแบบ Crawler Class แบบเรียบง่ายไว้ดังนี้ ตัวอย่างที่เรียบง่ายที่สุด นั่นคือ ผมจะ Crawl เข้าไปเก็บข้อมูลภาพใน <body></body> ให้หมด เอาจากเว็บนี้แล้วกัน :) -- http://wadkung.wordpress.com  (blog รุ่นน้องผมเอง) แต่จะเห็นได้ว่า ... เมื่อเรา Parse <img> มาแล้วมันมี image tag เยอะมาก เพราะในนั้นมีพวกภาพของตัว Wordpress เองที่ไม่ใช่ Blog Content ที่เราต้องการ ดังนั้น เราจึงต้องหาลักษณะเฉพาะจากชื่...

บันทึกการเดินทาง#11 : Python Programming at Webiz! by 7Saturday

Image
ผมได้มีโอกาสไปที่ Webiz! ครับ ไปเรียน Python มาทั้ง Beginner และ Advance เลย โดยปกติผมเขียน Python เล่นๆ อยู่แล้ว และตั้งแต่เทอมที่แล้ว ผมก็ใช้ภาษานี้ ในการเรียน Image Processing ด้วยทั้ง 2 เทอม กับภาษานี้ก็สักปีนึงได้แล้วครับ แต่มหาวิทยาลัยไม่ได้ให้ผมมากกว่านั้น - - สิ่งที่อาจารย์สอนไม่ได้คือ Coding Style (ไม่มีใครสอนได้หรอกนะ :) มีแต่อ่าน Guildline นิดหน่อย + ประสบการณ์เท่านั้นแหละ) ผมเลยสมัครมาเรียนที่นี่ เพื่อหวัง Style ของ Python ที่คงเส้นคงวา อยากรู้ว่า Programmer จริงๆ เขียนกันยังไง ได้มาเจอคนอื่นๆ ได้มาเห็น Code คนอื่นๆ เพื่อที่จะปรับใช้กับการเขียนของตัวเอง จะได้คงเส้นคงวา เพราะคำว่า Working Software = Quality Code + Performance นะ บางทีเราจะสอนคน ที่จะคิด Algorithm ที่มันสุดยอดขนาดไหน เร็วขนาดไหน ในยุคที่ Computer เร็วพอ ๆ กับแสงเนี่ยนะ ... ผมว่าเราจะต้องมองกันใหม่แล้วล่ะ ถ้าโปรแกรมไม่ได้ทำงานช้าจนเกินไป ผมว่าอย่าไปซีเรียสกับมันมากเลย ผู้สอนทั้ง 2 รอบที่ไปคือ พี่ไป๋ ซึ่งเป็น Python Expert, Senior Developer อยู่ที่ 7republic ครับ ในครั้งแรกที่เรียน Be...

IPython :: Powerful Python Interactive Shell

Image
ปกติแล้วเวลาเราอยากใช้ Python Shell หลังจากที่ลง Python แล้วก็ไปพิมพ์ python ใน Terminal เราก็จะได้ Default Python Shell มาใช้ **  How to Install Python Library 2.7.3 on Mac OS X แต่วันนี้จะ Python อีกตัวมานำเสนอ ซึ่งผมรู้จักจากการที่ไปอบรม Python Programming ที่ Webiz หน้าตา IPython Shell จะเป็นแบบนี้ครับ ... ที่น่าสนใจที่สุดของ Shell ตัวนี้คือแบบนี้ครับ :) นั่นคือมันสามารถกด Tab เพื่อดูคำสั่งต่างๆ ได้นั่นเอง ทำให้ช่วยเราในกรณีที่เราลืม หรือว่าจำคำสั่งไม่ได้ ได้มากเลยทีเดียว ฮาาาาาา ** แต่นั่นก็หมายความว่า เราไม่สามารถใช้ Tab เพื่อ Indent ได้นั่นเอง ต้องเคาะ Space รัวๆ วิธีการลงก็ง่ายสนง่ายครับ ไปที่นี่เลย http://ipython.org เข้าไปหน้า Download แล้วดูตรง Stable Release จากนั้นไปที่ Github https://github.com/ipython/ipython/downloads เลือก Platform เลยครับ ถ้าเป็น Windows ก็เป็น Binary File โหลดมาใช้ได้เลย (สบายอีกแล้ว) แต่ถ้าเป็นฝั่ง Unix ล่ะ ? (Mac OS X, Linux) จาก Github ให้เลือกโหลด 2 ตัวท้ายตัวใดตัวหนึ่งครับ จากนั้นแตกไฟล์ => เข้...

Install OpenCV using Homebrew (Mac OS X)

Image
นี่ผมจะใช้ OpenCV กับ Python นะครับ ขั้นแรกต้องลง Python ในเครื่องก่อนนะ ผมเขียนไว้แล้วนะครับ ที่ http://www.macbaszii.com/2012/05/install-python-library-273-on-mac-os-x.html แต่ถ้าจะเขียน OpenCV กับ C/C++ ให้ไป config ตามนี้นะครับ  http://www.together.in.th/blog/install-opencv-using-mac-homebre/ ต่อนะครับ ... เมื่อลง Python เสร็จแล้ว เราก็จะใช้ Homebrew นี่แหละ ในการลง OpenCV โดยใช้คำสั่ง ** อะไรคือ Homebrew ลองกดเข้าไปอ่านที่ Link Python 2.7.3 ที่ผมแปะไว้ให้ด้านบนนะครับ      ในนั้นมีบอก และ วิธีการลง ด้วยครับ brew install opencv ทั้งนี้เราอาจจะเจอปัญหาที่ว่า "เราไม่มี numpy" เพราะ opencv ต้องการ numpy [numpy คือ Numerical Library บน Python ซึ่งจะจัดการเรื่องตัวเลขให้เรา] ให้เราลง numpy จาก easy install ซะก่อน โดยใช้คำสั่ง easy_install numpy จากนั้นก็สั่งลง OpenCV จาก Homebrew อีกครั้งนึง เมื่อขึ้นหน้าจอตามนี้ ก็เป็นอันว่า เสร็จเรียบร้อยจ้า

Install Python Library 2.7.3 on Mac OS X

Image
โดยปกติแล้วถ้าเราลง Developer Tools ที่มากับ Mac OS X นั้น จะมี Python Library มาให้อยู่แล้ว แต่จะเป็น Python 2.7.1 เราจะอัพเกรดเป็น Python 2.7.3 กัน เพราะมัน Compatible กับ Open Source ต่างๆ มากกว่า เราจะลงโดยใช้ Homebrew นะครับ [HomeBrew เป็น Package Manager ที่เป็น Open Source และเขียนด้วย Ruby] ขั้นแรกลง Homebrew ซะก่อน เปิด Terminal แล้วใส่ไปตามนี้เลยครับ [เป็นการลง Homebrew] $ /usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)" จากนั้นก็ลง Python ผ่าน Homebrew $ brew install python $ /usr/local/share/python/easy_install pip $ /usr/local/share/python/pip install --upgrade distribute จะเห็นได้ว่า เมื่อเราลงผ่าน Homebrew เนี่ย python มันจะไปอยู่ที่ /usr/local/bin ซึ่งเป็นคนละที่กับ Default Python ในเครื่องของเรา ดังนั้นเราต้องไปเปลี่ยน Path ให้มัน ชี้ มายัง Python ที่เราลงจาก Homebrew ให้เปิด ~/.bash_profile ขึ้นมาครับ แล้วเพิ่ม export PATH=/usr/local/bin:/usr/local/share/p...

Using Python 3.x "print Function" in Python 2.x

Image
วันนี้เจอปัญหานิดหน่อยครับ คือต้องการที่จะไม่ให้ print ใน Python 2.7.1 เนี่ย มันเว้นบรรทัดเอง (ปกติแล้ว print จะจบด้วย new line character เสมอ) ซึ่งใน Python 3.x เนี่ย ผมเคยใช้แบบนี้ print ("Hello", end = ' ') print ("World") print ("iMacbaszii") ก็จะได้ผลลัพธ์เป็น Hello World iMacbaszii และแน่นอน เราไม่สามารถใช้ end = ' ' ได้ใน Python 2.x เพราะมันไม่มีให้ใช้นั่นเอง วิธีการคือ เราก็ต้องเลี่ยงไปขอใช้ print function ของ Python 3.x ซะ แต่ต้องใช้ตลอดนะ เมื่อ import มาแล้ว... ตอนนี้ผมยังไม่พบวิธีอื่น ถ้าพบแล้วจะมาอัพเดทอีกครั้ง Blog ไว้ก่อนกันลืม

Python Image :: Color Model and Convert RGB <--> CMYK

Image
เรามารู้จักเรื่องของสีกันนิดนึงนะครับ สีมีอยู่ 3 ประเภท แต่วันนี้ผมจะกล่าวถึงแค่ 2 ประเภท คือ RGB (Red, Green, Blue) และ CMYK (Cyan, Magenta, Yellow, Key) และอีกประเภทที่ผมว่าคือ HSL หรืออีกชื่อ HSB (Hue, Saturation, Brightness or Luminance) เดี๋ยวได้เรียนแล้ว อาจจะมาเขียนเพิ่ม ตอนนี้ยังไม่มีข้อมูล แต่หาได้เท่านี้ มาเริ่มที่ RGB กันก่อน RGB เป็นสีที่ใช้ใน Computer Monitor และ TV ทั่วไป โดยใช้หลักการเปล่งแสงของหลอดไฟ 3 ดวง เมื่อสีผสมกันจะทำให้เกิดสีที่มนุษย์สามารถของเห็นได้ทั้งหมด 6 สี (ในสีรุ้งมีสีนึงที่มนุษย์ไม่สามารถมองเห็นได้) ส่วนค่าของสี RGB นั้นจะ Represent ได้ 2 รูปแบบคือ เลขฐานสิบ จะเขียนในรูป (R,G,B) โดยที่ R,G,B มีค่า 0 - 255 ตามความเข้มของสี เลขฐานสิบหก จะเขียนในรูป  RRGGBB โดย RR,GG,BB จะมีค่าตั้งแต่ 00 - FF                                  ** แต่ถ้ามีการซ้ำกันเช่น 00FFCC อาจจะย่อเหลือแค่ 0FC ก็สามารถทำได้ และในทางกลับกัน ดังภาพ RGB vs CMYK ด้านบน เราจะเห็นว...

Python Image :: Color Change [Sample]

Image
วันนี้เราจะมาเล่น Python Imaging Library กันนะครับ ในส่วนของโค้ดผมว่าแค่ดู ก็น่าจะเข้าใจนะครับ เพราะ method ใช้งานง่ายพอสมควรเลย ภาพนี้เป็นภาพ Original ที่เราจะใช้กันในวันนี้ครับ ที่นี่คือ Apple Store สาขา Grand Central Terminal เรามาเริ่มจากการเปลี่ยนภาพเป็น Sepia กัน ส่วนของ Sepia เนี่ยผมไม่รู้การคำนวณที่แน่นอนนะครับ เรื่องของค่าที่นำมาใช้ พอดีเจอค่าคงที่ นี้มาจาก Internet น่ะครับ เราก็จะได้ผลลัพธ์ที่เป็นภาพสีแบบนี้ครับ จากนั้นเราจะเปลี่ยนเป็นแบบ Gray-Scale กันบ้างนะครับ วิธีการเปลี่ยนก็คือ ปกติรูปของเราจะอยู่ใน RGB Mode และประกอบไปด้วยแต่ละ Pixel ที่มีค่าสี (Intensity) เป็นลักษณะของแผ่น 3 แผ่นซ้อนกันแบบนี้ครับ จากนั้นการทำ Gray-Scale เนี่ยคือการลดจาก 3 แผ่นให้เหลือเพียงแผ่นเดียว... (ค่าเดียว) ง่ายสุดคือการหาค่าเฉลี่ยของแต่ละ Pixel แล้วยัดใส่ให้เท่ากันทั้ง 3 แผ่น (ที่ต้องยัดใส่ทั้ง 3 แผ่นก็เพราะไม่ว่ายังไง Computer ก็แสดงค่าสีเป็น RGB อยู่ดียังไงล่ะ) ผลลัพธ์ภาพที่ได้ ก็จะเป็นภาพ ขาว-เทา ที่สวยงาม ต่อไปก็เป็นภาพขาว-ดำ ล่ะนะครับ ภาพขาว-ดำ ใช้ Concep...

How to install Python Imaging Library with Python 2.7

Image
เมื่อ Blog ที่แล้วผมพูดถึงการลงใน Python 3.x นะครับ ซึ่งผมก็หมดหนทาง เพราะเกิดปัญหาขึ้นบน Mac แต่ผมไม่ได้ทดสอบฝั่ง Windows นะครับว่าใช้ได้หรือปล่าว ? ก็เลยถอดใจและมาเขียนบน Python 2.7 นี่ก็พึ่ง Install เสร็จสดๆ ร้อนๆ เลย (1.47 AM) วิธีการก็ไม่มีอะไรมากนะครับ เครื่องคุณควรจะมี Python 2.x ผมแนะนำเป็น 2.7 ครับ (จริงๆ ต้องขอบคุณ @nuboat ครับ เขาแนะนำผมมาอีกที) สำหรับ Windows ก็หาโหลดมาลงนะครับ (ไม่ใช่ ล่าสุดนะครับ ล่าสุดคือ 3.2) ส่วน Mac เนี่ย ถ้าลง Xcode Developer Tools แล้วจะมี Python 2.7 ติดมาให้เลยครับ ถ้าไม่ชัวร์ลองเปิด Terminal แล้วทำแบบนี้ดูครับ .. เลื่อนลงมาด้านล่างนิดนึง ก็จะเห็น Version ของ Python แล้วก็แถมเห็นเวอร์ชั่นของ GCC Compiler ด้วย จากนั้นไปที่นี่ครับ Python Imaging Library (PIL) http://www.pythonware.com/products/pil/ ก็ให้ทำการ Download เวอร์ชั่นล่าสุดมาเลยครับ (ณ ปัจจุบัน 1.1.7) ฝั่ง Windows ทำการโหลด .exe มาติดตั้งได้เลย แล้วใช้ได้เลยนะครับ ... ส่วนฝั่ง Mac ให้โหลดตัวที่เป็น Source Kit มาครับ พอโหลดมาแล้ว ก็จัดการแตกไฟล์ซะ แล้ว...