By pruet Writer on Tag:

เห็นโปรเจคท์อื่นเขาพิมพ์กันสั้น ๆ แต่เราอยากพิมพ์ยาว ๆ แหะ :P โครงการนี้ตั้งใจจะพัฒนาปลั๊กอินสำหรับโปรแกรมเล่นเพลงที่เป็นที่นิยม เช่น iTunes Songbird ฯลฯ เพื่อดึงปกอัลบัมเพลงจาก CoverShare.com ผ่านทาง CoverShare API โดยในขณะนี้ พัฒนาปลั๊กอินสำหรับ iTunes บน OS X และ Songbird เสร็จแล้ว เป้าหมายต่อไปคือ iTunes บน Windows

ที่มาของโครงการนี้ เกิดจากการที่ผมใช้บริการของเว็บ CoverShare เป็นประจำอยู่แล้ว แต่ปกติก็ต้องไปค้นหาปกอัลบัมจากเว็บทีละอัน ซึ่งก็เวลาพอควร และเห็นว่าทางเว็บมี API ให้บริการ (จริง ๆ อาจจะมีนานแล้ว แต่ผมพึ่งเห็น -_-) ก็เลยคิดว่า มานั่งเขียนปลั๊กอินสำหรับ iTunes ให้มันไปติดต่อ API เพื่อหาปกอัลบัมที่ต้องการคงไม่ยาก แล้วพอเขียนเสร็จประกาศออกไป ก็มีคนเรียกร้องว่า อยากได้ปลั๊กอินสำหรับ Songbird บ้าง จริง ๆ แล้ว ผมไม่ใช้ Songbird เพราะว่ามันหนักแรงเครื่อง แต่ในเมื่อมีคนเรียกร้องก็ต้องสนองตอบ (ช่วงนั้นค่อน ๆ fall ด้วย ก็เลยหาอะไรทำ เผื่อจะรู้สึกดีขึ้น สรุปก็เลยได้ปลั๊กอินสำหรับสองโปรแกรมมา แต่ก็มีคนเรียกร้องว่าอยากได้สำหรับ iTunes บน Windows เพราะว่า คนใช้ iTunes บน Windows เยอะกว่าบน OS X ก็คงต้องรอไปก่อน เพราะยังไม่มีเวลา

พอจะเริ่มเขียน ก็มีปัญหาคือ ผมเขียน AppleScript ไม่เป็น เนื่องจากการเขียนปลั๊กอินสำหรับ iTunes ที่ง่ายที่สุดก็คือการเขียน Script ซึ่งก็ต้องเขียนในภาษา AppleScript เมื่อผมลองเปิดดูตัวอย่างที่มี ๆ อยู่ในเครื่อง ก็พบว่า เป็นภาษาที่ชวนปวดหัวมาก (ได้อารมณ์เดียวกับการเขียน Cobol) ก็เลยเปลี่ยนแผน แทนที่จะเขียนตรง ๆ ก็ไปหาโค้คคนอื่นมาแก้เอาดีกว่า สำหรับผมแล้ว การเอาโค้คคนอื่นมาแก้ เป็นวิธีการเรียนภาษาใหม่ ๆ ที่ไวที่สุด เพราะเราสามารถจับธรรมชาติของภาษาได้เร็ว โดยดูจากวิธีการที่ภาษานั้นใช้ในการแก้ปัญหา หรือว่า การสร้างอัลกอริธึมหนึ่ง ๆ ขึ้นมา แต่ที่สำคัญคือ เราต้องรู้ว่า โค้ดที่เราเอามาแก้นั้น เขาเขียนขึ้นมาเพื่ออะไร แล้วใช้วิธีการ เทคนิค หรือว่าอัลกอริธึมใดในการแก้ปัญหา เช่นเดียวกันกับตอนที่เขียนปลั๊กอินสำหรับ Songbird ซึ่งต้องเขียนเป็น XUL + JavaScript ผมเขียน JavaScript เป็น แต่ไม่เคยเขียน XUL ก็ได้อาศัยโค้คของคนอื่นมาแกะ ๆ เอาเหมือนกัน

เมื่อได้โค้ดตัวอย่างแล้ว ผมก็แก้โน้นแก้นี่ แต่ก็เริ่มติดปัญหาว่าโค้ดที่ได้มา มันไม่ได้ตามที่ต้องการ ก็เลยต้องไปเปิด Library ของ AppleScript ขึ้นมาดู สำหรับนักพัฒนาโปรแกรมแล้ว Library หรือว่า Reference ถือว่าเป็นเพื่อนตายเลยทีเดียว นักพัฒนาโปรแกรมที่อ่าน Library/Reference ของภาษาหรือว่า Platform ที่ตัวเองเขียนไม่เป็น จะไม่สามารถเอาดีทางการเขียนโปรแกรมได้ โชคดีที่ว่า Library ของ AppleScript ทำมาค่อนข้างดี ผมจึงสามารถหาทางแก้ปัญหาที่พบได้ไม่ยาก แต่ว่า Reference ของ Songbird ห่วยมาก ทำให้เวลาเจอปัญหาอะไร หรือว่าอยากจะทำอะไรสักอย่าง จะเสียเวลานานมาก สุดท้ายก็ต้องใช้ Google ช่วยหา เวลาที่มีปัญหาอะไรที่แก้ไม่ได้ ให้ตั้งสมมุติฐานไว้ก่อนว่า เคยมีคนแก้ปัญหานี้แล้ว สิ่งที่ต้องทำก็คือการไปค้นหาโดยใช้ Search Engine แบบ Google ให้เจอ ถ้าเป็นปัญหาที่มี Error Message ก็ลองเอา Error Message นั่นแหละ ไปค้นหาดู แต่ถ้าต้องการแนวคิดว่าจะเขียนโปรแกรมอย่างไร ก็ต้องลองหา Keyword ที่จะใช้ในการค้นหา แนะนำว่า ให้มีทั้งประธาน หรือ กรรม และ กิริยา เช่น จะทำอะไร กับอะไร เป็นต้น

เมื่อเขียนไปสักพัก ก็ต้องทดสอบโปรแกรม วิธีการทดสอบโปรแกรมง่าย ๆ ก็คือการสั่งให้โปรแกรมพิมพ์สถานะของโปรแกรมออกมาให้ดู (ภาษาชาวบ้านก็เรียกว่า printf ออกมาดู) สำหรับ AppleScript นั้น ไม่ลำบากมาก เพราะว่าเป็น Script ที่เรียกใช้จาก iTunes ได้โดยตรง พอแก้ไขอะไร ก็ทดสอบได้เลย แต่ว่าสำหรับ Songbird นั้นจะค่อนข้างลำบาก เพราะว่าต้องทำ package และ deploy เข้าไปใน Songbird ก่อนถึงจะทดสอบได้ (ต้อง restart Songbird สองครั้ง) ผมพยายามใช้ Javascript Debugger ใน Songbird ก็ไม่สำเร็จเท่าไหร่ (ใช้ไม่เป็นนั่นเอง และไม่มีความอดทนพอที่จะหัดใช้) ก็เลยทนใช้ alert กับ restart Songbird ไปเรื่อย ๆ ก็เอาจนทดสอบได้สำเร็จ การใช้ debugger หรือว่า tracce พวกนี้ เป็นทักษะที่นักพัฒนาทุกคนต้องมี และต้องฝึกให้เก่ง ไม่มีใครสอนใคร debug ได้ครับ มันเป็นเรื่องของประสบการณ์ สัญชาติญาณ และ ความอดทนอย่างเดียว ถ้าคิดอยากเอาดีทางการเขียนโปรแกรม ก็ต้องฝึกไล่โค้ด กับฝึก debug นี่แหละ

ใช้เวลาเขียนสองสามคืน ก็เขียนเสร็จสำหรับทั้งสองโปรแกรม สรุปว่่างานนี้เขียนเอามัน (เพราะว่าผมเองก็ไม่ได้ใช้ Songbird) แต่ก็รู้สึกดีพอควร เอาไว้มีเวลา จะเขียนสำหรับ iTunes บน Windows และโปรแกรมอื่น ๆ ละกัน ใครที่อยากช่วยเขียน หรือว่าแจ้งบัก เชิญที่ http://code.google.com/p/covershare-plugins/ ครับ

Hiring! บริษัทที่น่าสนใจ

Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data

DoraeMew Mon, 12/22/2008 - 18:22

ขอบคุณคร้าบ เดี๋ยวต้องไปลองบน Mac เสียหน่อย :)

0xffeeddaa Mon, 12/22/2008 - 18:48

ขอบคุณครับ ผมลองกับ itunes แล้วเวิร​์คมากครับ แต่มีข้อเสียนิดหน่อย ตรงไม่มี process ให้ดู เดี๋ยวอาจจะขอแจมหน่อยนะครับ

Dio_O Mon, 12/22/2008 - 20:51

เออ พอดีผมไม่ค่อยได้ลงลึก เรื่อง Coding

ผมไม่เข้าใจอะครับ โหลด ไปแล้วต้องทำไงหร้อครับ ถึงจะใช้ได้

รบกวน ขอวิธีหน่อยนะครับ(ความรู้น้อย)

pruet Tue, 12/23/2008 - 13:14

In reply to by chris123

ฝากช่วย file issue ให้ด้วยนะครับ ที่ http://code.google.com/p/covershare-plugins/issues/list แต่ถ้าลำบาก ช่วยบอกว่า มีปัญหากับ plugin ตัวไหน และกับเพลงในอัลบัมอะไร ของใคร นะครับ ขอบคุณครับ

Apple
public://topics-images/apple_webp.png
SCB10X
public://topics-images/347823389_774095087711602_515970870797767330_n_webp.png
Windows 11
public://topics-images/hero-bloom-logo.jpg
Huawei
public://topics-images/huawei_standard_logo.svg_.png
Google Keep
public://topics-images/google_keep_2020_logo.svg_.png
Instagram
public://topics-images/instagram_logo_2022.svg_.png
SCB
public://topics-images/9crhwyxv_400x400.jpg
Microsoft
public://topics-images/microsoft_logo.svg_.png
Basecamp
public://topics-images/bwpepdi0_400x400.jpg
Tinder
public://topics-images/hwizi8ny_400x400.jpg
FTC
public://topics-images/seal_of_the_united_states_federal_trade_commission.svg_.png
Pinterest
public://topics-images/pinterest.png
Palantir
public://topics-images/-nzsuc6w_400x400.png
AIS Business
public://topics-images/logo-business-2021-1.png
PostgreSQL
public://topics-images/images.png
JetBrains
public://topics-images/icx8y2ta_400x400.png
Krungthai
public://topics-images/aam1jxs6_400x400.jpg
Palworld
public://topics-images/mccyhcqf_400x400.jpg
Bill Gates
public://topics-images/bill_gates-september_2024.jpg
VMware
public://topics-images/1nj4i1gp_400x400.jpg
Take-Two Interactive
public://topics-images/0khle7nh_400x400.jpg
OpenAI
public://topics-images/ztsar0jw_400x400.jpg
Thailand
public://topics-images/flag_of_thailand.svg_.png
NVIDIA
public://topics-images/srvczsfq_400x400.jpg
ServiceNow
public://topics-images/ytnrfphe_400x400.png
Klarna
public://topics-images/urcllpjp_400x400.png
Google Play
public://topics-images/play.png
Drupal
public://topics-images/drupal.png
Virtua Fighter
public://topics-images/virtua_figther_2024_logo.png
Paradox Interactive
public://topics-images/paradox_interactive_logo.svg_.png
Europa Universalis
public://topics-images/europa-icon.png
Nintendo Switch 2
public://topics-images/mainvisual.png
Cloudflare
public://topics-images/cloudflare_logo.svg_.png
Samsung
public://topics-images/samsung.png
Google
public://topics-images/google_2015_logo.svg_.png
Uber
public://topics-images/uber.png
Microsoft 365
public://topics-images/m365.png
USA
public://topics-images/flag_of_the_united_states.svg_.png
GM
public://topics-images/0pe0po-z_400x400.jpg
Perplexity
public://topics-images/perplex.jpg
Xperia
public://topics-images/xperia.png
iOS 18
public://topics-images/ios-18-num-96x96_2x.png
True
public://topics-images/true_logo.png
SoftBank
public://topics-images/softbank.jpg
Pac-Man
public://topics-images/pacman.png
Harry Potter
public://topics-images/harry.png
Marvel
public://topics-images/marvel.png
Skydance
public://topics-images/skydance.png
SEA
public://topics-images/sealogo.png
Find My Device
public://topics-images/find.png
Gemini
public://topics-images/google_gemini_logo.svg__1.png
Accessibility
public://topics-images/accessibility-128x128_2x.png
Material Design
public://topics-images/m3-favicon-apple-touch.png
Android 16
public://topics-images/android16.png
Android
public://topics-images/android_0.png
Firefox
public://topics-images/firefox_logo-2019.svg_.png
Google Messages
public://topics-images/messages.png
Notepad
public://topics-images/notepad.png
Singapore
public://topics-images/flag_of_singapore.svg_.png
Airbnb
public://topics-images/airbnb.png
PS5
public://topics-images/ps5.png
Krafton
public://topics-images/krafton.png
Doom
public://topics-images/doom-game-s_logo.svg_.png
AMD
public://topics-images/amd_logo.svg_.png
GTA
public://topics-images/gta_0.png
DoorDash
public://topics-images/doordash.png
YouTube
public://topics-images/yt.png
YouTube Music
public://topics-images/yt-music.png
Facebook
public://topics-images/fb.png
iQiyi
public://topics-images/iqiyi_0.png
Viu
public://topics-images/viu.png
Amazon Prime Video
public://topics-images/prime-vid.png
Spotify
public://topics-images/spotify.jpg
Apple TV
public://topics-images/apple-tv.png
HBO Max
public://topics-images/max.png
Threads
public://topics-images/threads.png
Alexa
public://topics-images/alexa.png
Kindle App
public://topics-images/kindle.png
Shopee
public://topics-images/shopee.png
Waze
public://topics-images/waze.png
Bilibili
public://topics-images/bili.png
Google Maps
public://topics-images/maps.png
Apple Music
public://topics-images/apple-music.png
Claude
public://topics-images/claude.png
TikTok
public://topics-images/tiktok.png
Xbox
public://topics-images/xbox.png
Tesla
public://topics-images/tesla.png
Chrome
public://topics-images/chrome.png
Google Calendar
public://topics-images/gcal.png
Google Home
public://topics-images/ghome.png
Google Meet
public://topics-images/meet.png
NotebookLM
public://topics-images/notebooklm.png
Reddit
public://topics-images/reddit.png
Assassin’s Creed
public://topics-images/ac.png
Mark Zuckerberg
public://topics-images/zuck.jpg
Meta
public://topics-images/meta.png
Meta AI
public://topics-images/meta-ai.png
Epic Games
public://topics-images/epic_games_logo.svg_.png
Unreal
public://topics-images/unreal_engine_logo-new_typeface-svg.png
Fortnite
public://topics-images/fortnite.png
DeepMind
public://topics-images/deepmind.png
Databricks
public://topics-images/databricks.png
Netflix
public://topics-images/netflix-logo.png
Microsoft Azure
public://topics-images/azure.png
Microsoft Copilot
public://topics-images/microsoft_copilot_icon.svg_.png
Bing
public://topics-images/bing.png
EA
public://topics-images/ea.png