วันศุกร์ที่ 22 พฤษภาคม พ.ศ. 2558

ทำให้ Gradle บน Android Studio ทำงานได้เร็วขึ้นกว่าเดิม ด้วย Gradle 2.4



Gradle มันช้า

เอาละ หลายคนน่าจะเจอปัญหาแบบเดียวกันเวลาใช้ Android Studio ทำงาน ว่าทำไมมัน Build ได้ช้าจัง ถึงแม้ว่าจะเปิดใช้ Deamon และ Parallel แล้วก็ตาม



ทำยังไงดีล่ะ 

จริงๆแล้วที่ทำได้เองเลยก็คือ ขั้นตอนมาตรฐานที่ทำกันตอนนี้ก็คือ เปิดใช้ Deamon และ Parallel ตามรูปนี้
เปิดใช้ Deamon และ Parallel


แต่ถึงจะเปิดใช้แล้วมันก็เร็วขึ้นมานิดนึง แต่ถ้าจะเอามากกว่านี้ล่ะ

จริงๆแล้ว คงเหลือแต่วิธีที่ต้องไปบอกคนที่ทำ Gradle ว่า "ช่วยทำให้มันเร็วกว่านี้ได้มั้ย" ซึ่งคนทำก็จะบอกว่า "ทำอยู่ และจะทำต่อไป" (คุ้นๆนะประโยคนี้) จึงได้มาเป็น Gradle 2.4 ที่เค้าเครมมาว่าเวลาที่ใช้ Build เร็วขึ้นกว่าเดิม 20% ถึง 40% เลยทีเดียว [1] ส่วนเรื่องอื่นๆที่ปรับปรุงไปอ่านใน Release Notes เอานะ


ของใหม่ออกมา แล้วยังไงต่อ

ก็เอามาใช้สิครับ รออะไรอยู่
"แล้วทำยังไง"
OK มีขึ้นตอนนิดหน่อยที่จะทำให้ Android Studio เปลี่ยนมาใช้ Gradle 2.4 ตามนี้เลย

ขั้นแรกให้ดาวน์โหลด Gradle 2.4 มาก่อนเลย แล้วจะได้ ไฟล์ zip มา จากนั้นก็แตกไฟล์ zip นี้ แล้วเอาไปไว้ในที่ที่ถูกต้อง ก็คือถ้าติดตั้ง Android Studio บน Mac ตามปกติ ก็จะอยู่ที่
Applications/Andriod Studio.app/Contents/gradle



ตามรูปที่เห็นจะมี Gradle 2.2.1 อยู่ก่อนแล้ว เอาไว้ด้วยกันเลย ไม่ผิดที่แน่นอน ส่วนใครที่ใช้ Windows ตัว Gradle ก็น่าจะอยู่ ภายใต้ Android Studio เหมือนกันนะ ลองดู

จากนั้นเราก็จะมาเซ็ทให้ตัว Android Studio ใช้งาน Gradle 2.4 ละนะ
เริ่มจาก เปิด Android Studio ขึ้นมา แล้วเข้าไปที่ 
Preferences -> Build, Execute, Deployment -> Build Tools -> Gradle
แล้วปรับ Gradle Home ให้ชี้ไปที่ Gradle 2.4 
จากนั้น ก็เปิด Module Settings ขึ้นมา แล้วแก้ Gradle version เป็น 2.4 ซะ ตามรูป



ได้เวลาเปลี่ยนแปลง แรงถึงใจ
เพียงเท่านี้ เวลาเรา Build หรือเวลาที่ Gradle ทำงาน มันก็จะเร็วขึ้น(เค้าบอกมาแบบนี้นะ) หลังจากที่ลองใช้แล้วระยะหนึ่ง พบว่ามันเร็วขึ้นจริงๆ แต่ก็ยังไม่เท่าเจ้าอื่นที่เร็วกว่าอยู่ดี ตรงนี้บางคินอาจจะไม่เข้าใจว่า แค่มันเร็วขึ้นทำไมมันถึงสำคัญ ก็เพราะว่าเวลาทำงานเนี่ยมันก็ต้อง Build ไป Test ไป ถ้ากระบวนการมันต่อเนื่องกัน การทำงานมันก็ลื่นไหลไม่สะดุด แต่ถ้ามีอะไรมาทำให้สะดุด หึหึ เสียรมณ์

โดยรวมแล้วก็ถือเป็นนิมิตหมายที่ดีว่าในเวอร์ชันต่อๆไปมันก็จะเร็วขึ้นได้อีกแน่นอน


อ้างอิง
[1] Gradle 2.4 Release Notes - https://docs.gradle.org/current/release-notes

https://medium.com/@erikhellman/boosting-the-performance-for-gradle-in-your-android-projects-6d5f9e4580b6

วันศุกร์ที่ 1 พฤษภาคม พ.ศ. 2558

Preview notebook Dell Inspiron 5448 เมื่อ Dell ก็ยังคงเป็น Dell

เมื่อ Dell ก็ยังคงเป็น Dell 


พอดีว่ามีเรื่องให้ต้องซื้อโน๊ทบุคใหม่ รอบนี้มีสเป็คง่ายๆ ก็คือ
  • เปิดเครื่องเพื่อทำความสะอาด และอัพเกรดง่าย
  • จอดีหน่อย
  • แรงพอตัวทั้ง CPU, GPU, HDD, RAM
  • หน้าตาเครื่อง เรียบหรู
  • เอา OpenCL

ทีนี้ ณ นาทีนี้เนี่ยที่แรงๆหน่อยมันก็มี Lenovo Y,  Asus G, MSI, DELL ที่พอจะมีของที่พอจะตรงใจ แต่ไม่ 100%
  • Lenovo Y หน้าตาไม่โดน
  • Asus G ศูนย์บริการดาวอังคาร
  • MSI สเป็คไม่โดน
  • DELL แพงเมื่อเทียบกับคนอื่น

ในเมื่อไม่มีที่ดีที่สุด ก็ต้องเอาที่มันใกล้เคียงที่สุด หวยเลยไปตกที่ DELL เพราะ
  • เปิดเครื่องเพื่อทำความสะอาด และอัพเกรดง่าย ผ่าน เพราะขันน็อต 2 ตัว เปิดฝาหลังได้ทั้งแผงเลย สะดวกดี แล้วเห็นหมดทุกอย่างด้วย
  • จอดีหน่อย ไม่ผ่าน เพราะไม่ Full HD + ไม่ IPS
  • แรงพอตัวทั้ง CPU, GPU, HDD, RAM ผ่าน 
  • หน้าตาเครื่อง เรียบหรู ผ่าน
  • เอา OpenCL ผ่าน เพราะ GPU ได้ AMD

ก็โอเคนะผ่าน 4 ข้อจาก 5 ข้อ ถึงราคาจะรู้สึกว่าแพงไปนิดหน่อย แต่ก็คิดซะว่าแลกกับประกันที่ดี ก็รับได้

หลังจากพิจารณา อย่างยาวนาน ก็ได้ DELL INSPIRON 5448 สำหรับสเป็คคร่าวๆก็คือ
CPU: Intel Core i7-5500U (2.40 GHz, 4MB L3 Cache, up to 3.00 GHz)
Graphic: AMD Radeon R7 M270 (4GB GDDR3)
DisplaySize: 14 inch (1366x768) HD
Memory: 8 GB DDR3L  Memory Bus 1600 MHz
Hard Disk: 1 TB 5400 RPM + 8GB SSD (SSHD)
 
 
 


เจาะลึกชิ้นส่วนสำคัญ 3 ชิ้นหลัก: CPU, GPU, HDD ที่ส่งผลกับประสิทธิภาพของระบบ

CPU: Intel® Core™ i7-5500U Processor

Intel® Core™ i7-5500U Processor (4M Cache, up to 3.00 GHz) ตัวนี้ถือว่าเป็นตัวต่ำสุดของ i7 ใน gen5 codename Broadwell ใช้กระบวนการผลิตแบบ 14 นาโนเมตรอย่างเต็มรูปแบบ แต่เมื่อเทียบกับพวก gen4 ประสิทธิภาพก็ดีขึ้นราวๆ 10% ได้

Ref
http://ark.intel.com/products/85214/Intel-Core-i7-5500U-Processor-4M-Cache-up-to-3_00-GHz
http://ark.intel.com/products/family/84979/5th-Generation-Intel-Core-i7-Processors#@All

GPU: AMD Radeon™ R7 M270

R7 m270 นี่ก็ถือได้ว่าเป็นตัว top ของ R7 mobile เลย ประสิทธิภาพนี่ก็คาบเกี่ยวกับ g840m g850m ก็ถือว่าเล่นเกมบนโน๊ทบุคแก้เบื่อได้สบายๆ แถมยังรองรับ API DirectX® 12 ด้วย

Ref
http://www.amd.com/en-us/products/graphics/notebook/r7-m200

HDD

เจ้า Seagate st1000lm014-1ej164 ตัวนี้มันมีดีอยู่ที่มันคือ SSHD: Solid State Hybrid Drive ที่ทาง Seagate เครมมาว่า SSD-like Speed. Large HDD Capacity. An Affordable Price. ซึ่งจาการใช้งานจริงพบว่ามันไวกว่า HDD ธรรมดา แต่ก็ยังไม่เท่า SSD ตามกลไกของมันเอง

Ref
http://www.seagate.com/as/en/internal-hard-drives/solid-state-hybrid/laptop-solid-state-hybrid-drive/#specs
http://hdd.userbenchmark.com/Seagate-Laptop-SSHD-25--1TB/Rating/1804

ทีนี้ก็มาถึงจุดสำคัญคือ ผล Benchmark

เน้นลองกับโปรแกรม 3D เป็นหลักคือ Unigine กับ 3D Mark
และโปรแกรมยอดนิยมอีกตัวก็คือ CINEBENCH


ตรงนี้เพิ่มผลเทียบกันกับ PC ตัวเก่าที่มีอยู่แล้ว โดย System 1 จะเป็น Dell 5448 ส่วน System 2 จะเป็น PC ใช้ AMD 7790
System 1
Platform: Windows NT 6.2 (build 9200) 64bit
CPU model: Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz (2394MHz) x2
GPU model: Intel(R) HD Graphics 5500 10.18.10.3960/AMD Radeon R7 M270 14.301.1002.1001 (4095MB) x1
System 2
Platform: Windows NT 6.2 (build 9200) 64bit
CPU model: AMD FX(tm)-6100 Six-Core Processor (3322MHz) x3
GPU model: AMD Radeon HD 7700 Series 14.501.1003.0 (1024MB) x1

Unigine Valley Benchmark 1.0

# System 1 Settings System 2 settings
Render: Direct3D9
Mode: 1280x720 2xAA windowed
Preset: Basic
Render: Direct3D11
Mode: 1600x900 8xAA windowed
Preset: Extreme
Render: Direct3D11
Mode: 1920x1080 8xAA fullscreen
Preset: Extreme HD
Render: Direct3D9
Mode: 1280x720 2xAA windowed
Preset: Basic
Render: Direct3D11
Mode: 1600x900 8xAA windowed
Preset: Extreme
Render: Direct3D11
Mode: 1920x1080 8xAA fullscreen
Preset: Extreme HD
FPS 20.9 8.1 6.4 43.6 24.7 18.8
Score 876 338 268 1826 1033 788
Min FPS 12.7 5.3 4.0 14.1 11.8 7.9
Max FPS 36.2 14.0 11.2 79.7 45.3 36.0


Unigine Heaven Benchmark 4.0



# System 1 settings System 2 settings
Render: Direct3D9
Mode: 1280x720 2xAA windowed
Preset: Basic
Render: Direct3D11
Mode: 1600x900 8xAA windowed
Preset: Extreme
Render: Direct3D9
Mode: 1280x720 2xAA windowed
Preset: Basic
Render: Direct3D11
Mode: 1600x900 8xAA windowed
Preset: Extreme
FPS 23.7 7.2 69.5 22.1
Score 597 182 1750 557
Min FPS 7.0 4.8 19.2 13.8
Max FPS 44.1 15.0 123.0 49.6

3D Mark

Test Score Graphics Score Physics Score Combined Score
Ice Storm 57554 73162 32951
Cloud Gate 5954 8724 2821
Sky Diver 4624 4500 4840 5386
Fire Strike 1226 1323 4053 473

Cine Bench R15 & R11.5

 
 

เพิ่มผลเมื่อเทียบกับเครื่อง Macbook Pro มาให้ดูด้วย

สรุปคือ

ได้ Notebook งานประกอบดีมา 1 เครื่อง
ประสิทธิภาพ+งาน+ประกัน คุ้มกับราคา 29XXX จริงๆแล้วถ้าราคามัน 26XXX นี่จะเรียกได้ว่าคุ้มสุดๆเลยนะ

วันพุธที่ 5 พฤศจิกายน พ.ศ. 2557

เรามาใช้ GitHub กันนะ นะ นะ




จากคราวที่แล้วเขียนบทความเรื่อง GitHub แบบเบื่องต้นไป วันนี้เรามาเข้าสู่ภาคใช้งานจริงกันเถิด

ปล. ในบทความนี้เราจะไปพูดถึงแล้วนะ ว่า GitHub คืออะไรหน้า ตาเป็นไง ไปตามอ่านในบทความเก่ากันเองเน้อ

ปล๒. จะพูดถึงเรื่องจากใช้งานหลักๆนะ อะไรที่มัน advance มาก ควรไปลุยต่อเอง เข้าใจตรงกันนะ

ขอท้ายความนิดนึงนะ ในบทความที่แล้ว บอกไว้ว่า ตอนนี้ GitHub ออก Tool ที่เป็น GUI มาแล้ว พราะฉะนั้นถ้าใครไม่ชอบแบบ Command Line ก็ใช้ตัวนี้ก็ได้ ความสามารถ ไม่ต่างกัน

OK นะ อย่างที่บอกคือ GitHub นี่คือ Version Control ที่ช่วยเราทำงานอย่างมากมาย ประโยชน์มหาศาล ดังนั้นใครอ่านมาถึงตรงนี้แล้วก็ใช้กันเถอะนะ จะได้ไม่เดือดร้อนลูกหลานนะ

ตอนนี้ผมเข้าใจว่าทุกคนใช้ Commit / Push / Update กันเป็นแล้วนะ

ทีนี้เรื่องของเรื่องคือ ถ้าโปรเจ็คนี้มีคนทำแค่คนเดียว เท่าที่เราทำได้มันก็พอแล้ว แล้วถ้ามีหลายคนล่ะ แล้วถ้าทุกคนต้องการที่จะทำงานบน Repo เดียวกัน Branch เดียวกันล่ะ อืมมมมมมมมมมมมมมมม

1 Repo with X Collaborators

ตรงนี้นะ ก็คล้ายๆการเพิ่มสิทธิ์เข้ามาในตัว Repo คนที่เราเพิ่มเข้ามาก็ทำอะไรได้เหมือนเราเลย ณ จุดๆนี้ ผมนี่บอกเลยว่าต้องทำบนเว็บครับ เข้าไปที่เว็บ GitHub ครับ แล้วเลือกที่ Repo ของเราที่เราต้องการจะเพิ่ม Collaborator นะครับ

แล้วทางขวามือจะมี Menu Setting นะครับ คลิ๊กเลยครับ



ก็จะเข้ามาที่หน้า Setting นะครับ ทางซ้ายนะครับ มีเมนู Collaborators  นะครับ นั่นแหละครับ คลิ๊กครับ



คราวนี้ก็จะเห็นว่ามีช่องให้ใส่ username ที่เราต้องการเอาเข้ามาเป็น Collaborator นะครับ กี่คนก็ใส่ไปเลยครับไม่ต้องเกรงใจ



นั่นแหละครับ เท่านี้เราก็จะไม่เดียวดายอีกต่อไปแล้วใน Project เรา เย่


ต่อมานะครับ พอเรามี Collaborator เยอะๆ ต่างคนต่าง Commit นะครับ นึกภาพนะครับนึกภาพ ถ้ารัว Commit กันนะครับ เราจะรู้มั้ยครับ ว่าใคร Commit อะไร ตอนไหน โอวววววว จริงๆดูจาก History ได้นะ แต่มันไม่เท่ มันจะเท่นะถ้า มี Email แจ้งมาว่า ใคร Commit อะไร ตอนไหน โอววววววชีวิตแสนดี

Notification Email When Commit

ตัว GitHub รองรับความสามารถนี้เรียบร้อยแล้วครับ แต่ชีวิตไม่ง่ายครับ ยังไม่สามารถทำแบบว่าใน Setting ส่งให้ Collaborator คนไหนบ้าง

อ่ะ แล้วยังไงล่ะทีนี้ คือเราสามารถเซ็ทให้ GitHub ส่ง Email แจ้งเมื่อมี Commit ได้ แต่ได้แค่ 2 Email เท่านั้นนะ อ้าว แล้วถ้ามี Collaborator เป็น 10 คนทำยังไงล่ะทีนี้ ก็ต้องใช้ Mail Group สิครับ Group เดียว จะกี่คนๆก็ไหว Group รับได้

ขั้นตอนคร่าวๆก็คือ
1. สร้าง Mail Group
2. เอา Email ของ Collaborator เข้า Mail Group (แนะนำให้ใช้ Google Group)
3. เอา Mail Group ไปใส่ใน GitHub

ง่ายมะ ง่ายยยยยยยยยย แต่ชิวิตจริงไม่ได้โรยด้วยกรีบกุหราบ เพราะทำแค่นี้เหมือนจะพอ แต่ไม่พอ เราต้องเอา noreply@github.com มาใส่ใน Google Group ของเราด้วย


ส่วนขั้นตอนการเอา Mail Group ไปใส่ใน GitHub ก็ดูได้ที่
https://help.github.com/articles/receiving-email-notifications-for-pushes-to-a-repository/ และ
http://stackoverflow.com/questions/7015300/receiving-emails-on-git-push


ส่วนวิธีสมัคร Mail Group ไปลุยกันเองนะ

ปล๓. บทความนี้เน้นให้ลุยเองนะ ไม่บอกหมดแบบ 100%
ปล๔. ขอขอบคุณทุกคนที่อ่านมาจนจบนะครับ











วันอาทิตย์ที่ 7 กันยายน พ.ศ. 2557

มาเจาะลึก ASUS Zenfone 5 (Intel) กัน


พอดีว่าได้เจ้า ASUS Zenfone 5 ตัว 3G 2sims มาครอบครอง ตอนก่อนจะได้มาก็หาข้อมูลพอสมควรว่า มันใช้ CPU ของ Intel นะ ประสิทธิภาพมันเป็นยังไง แล้วใช้ VGA ตัวไหน ปรากฏว่า หาข้อมูลไม่ค่อยได้เลย (ได้แหละ แต่น้อยมาก) ประกอบกับพอมีโทรศัพท์อยู่หลายเครื่อง ก็เลยจะทำการทดสอบเพื่อเปรียบเทียบประสิทธิภาพเครื่อง จะได้รู้กันว่า เจ้า CPU Intel เนี่ยมันประมาณไหน

ปล. จะพูดแต่เรื่องที่ไม่เกี่ยวกับ ตัวเครื่องเป็นยังไง กล้องดีมั้ย เสียงดังฟังชัดมั้ย ...... พวกนี้ไม่พูดนะ มีคนทำรีวิวเยอะแล้ว




ก่อนอื่นก็ต้องมาดูที่สถาปัตยกรรมกันก่อนว่าเจ้า Intel Atom z2560 ที่ทำงานบน Zenfone 5 นี่เป็นยังไง
Essentials
StatusLaunched
Launch DateQ2'13
Processor NumberZ2560
# of Cores2
# of Threads4
Burst Frequency1.6 GHz
Intel® Smart Cache1 MB
Instruction Set32-bit
Instruction Set ExtensionsSSSE3, SSE3, SSE2
Embedded Options Available
No
Lithography32 nm
VID Voltage Range0.3-1.2V (Vcc)

เมื่อพิจารณาดูแล้วจะพบว่านี่มันตระกูล X86 นี่นา ไม่ใช่ ARM แบบชาวบ้านเค้า โอเคอันนี้ไม่เป็นไร ขอให้อัตราการใช้พลังงานต่อประสิทธิภาพมันอยู่ในเกณฑ์ที่จะมาอยู่ในมือถือได้ก็ใช้ได้แล้ว เข้าใจตรงกันนะ

อ้าวแล้วจะมีโปรแกรมอะไรที่ใช้ด้วยกันไม่ได้มั้ย ตอบเลยว่า ก็อาจจะมี แต่โอกาสที่จะเจอ ก็คงราวๆถูกเลขท้าย 3 ตัว ติดต่อกัน 2 ครั้งมั้ง




เข้าเรื่องละนะ

ว่ากันเรื่อง CPU ก่อน
เนื่องจาก ผลการทดสอบที่ออกมาเป็นตัวเลข มันบอกอะไรไม่ได้ 100% ฉะนั้นสรุปสั้นๆเลยว่าประสิทธิภาพของ Intel Atom z2560 เมื่อเทียบกับ Qualcomm Snapdragon 400 และ Qualcomm Snapdragon 600 จะได้ผลคือ

Qualcomm Snapdragon 400 < Intel Atom z2560 <<< Qualcomm Snapdragon 600


ย้ำว่าคะแนนที่เป็นตัวเลขจะประมาณนี้จริงๆ ส่วนเรื่องความรู้สึกนี่มันพูดยากนะ ที่จะบอกว่าลื่นหรือไม่ลื่น มันมีหลายอย่างประกอบกันมากมาย



มาต่อกันเรื่อง GPU
อันนี้แหละที่ถือได้ว่าเด็ดจริง อะไรจริง เพราะเจ้า Intel Atom z2560 นั้นมากับ PowerVR SGX544mp2
ถ้าถามว่าแรงขนาดไหน ก็ต้องเทียบกับพวก Adreno 305 ที่มากับ Qualcomm Snapdragon 400 และ Adreno 320 ที่มากับ Qualcomm Snapdragon 600 ผลก็คือ 

Adreno 305  < PowerVR SGX544mp2 <<< Qualcomm Snapdragon 600

ก็ประมาณเดียวกันกับตัว CPU (แน่อยู่แล้ว) แล้วทำไมถึงบอกว่ามันเด็ด มันเด็ดเพราะว่าเจ้า PowerVR SGX544mp2 ออกมาตั้งแต่ปี 2010 แล้ว แต่ Adreno 320 เนี่ยพึ่งมาตอนปี 2012 ก็นะ เกือบ 2 ปีถึงจะแซงกันได้ แล้วถ้าถามต่อว่า แล้ว VGA ของ PowerVR รุ่นใหม่ๆล่ะ ก็ตัวแรงสุดตอนนี้อยู่ใน iPad Air ไง นั่นแหละแรงสุดละ

ส่งท้ายด้วยผลจาก 3dMark หน่อยละกัน พอเป็นพิธี

ASUS Zenfone 5 + Intel Atom z2560 + PowerVR SGX544mp2









LG Nexus 4 + Qualcomm Snapdragon S4 Pro + Adreno 320











ตารางเปรียบเทียบ

mode / device Asus Zenfone 5 Nexus 4 SONY Z2
ICE STORM 6421 Maxed out! Maxed out!
ICE STORM EXTREME 5712 10832 Maxed out!
ICE STORM UNLIMITED 3615 7037 18504


ทีนี้สิ่งที่ควรกังวลคือ Intel จะออก Kernel ให้ไวขนาดไหน เพราะเรื่องนี้ส่งผลกับความเร็วในการอัพเดท version Android เต็มๆเลย


อ้างอิง

วันศุกร์ที่ 18 กรกฎาคม พ.ศ. 2557

GitHub 3 times โย่



GitHub 3 times โย่


เรื่องของเรื่องคือ ก็ใช้ GitHub มาซักพักใหญ่แล้ว ถึงจะไม่เข้าใจความสามารถทั้งหมดก็เถอะนะ แต่ว่าที่ใช้เป็นอยู่ก็น่าจะเพียงพอที่จะเป็นประโยชน์กับคนหลายๆที่ได้แล้ว






มาเริ่มกันที่ GitHub คืออะไร

GitHub คือ 1 ใน Git
แล้ว Git คืออะไร เอาง่ายๆมันคือ Version Control 

ความสามารถของมันก็ประมาณช่วยการการดูแล และจัดการการเปลี่ยนแปลงต่างที่เกิดขึ้นกับ ไฟล์ที่เราเลือกไว้ คือปกติเวลาเราแก้ไขไฟล์อะไรเราจะรู้ผลลัพท์สุดท้ายอย่างเดียว แต่เจ้า Git เนี่ยมันสามารถจดจำได้ว่าวันไหนเมื่อไรเราทำอะไรกับไฟล์นี้ไปบ้าง

อ่ะ อ่ะ อ่ะ นายคิดเหมือนที่เราคิดมั้ย
ถ้าเราใช้ Git มาเป็นตัวควบคุม เวลาที่เราทำงานกับไฟล์ๆเดียวกัน ที่ละหลายๆคน (งงมั้ย) เจ้า Git เนี่ย จะช่วยให้เรารู้ว่าไฟล์นี้ใครทำอะไรไว้บ้าง ลองนึกภาพดูนะ ว่าเรารู้ตัวการที่ก่อ Bug ได้ อืมมมมมมมมม เข้าท่า



OK เข้าเรื่อง GitHub ดีกว่า

เจ้า GitHub เวลาทำงาน มันก็จะคุมไฟล์ที่เราเลือกไว้ จะไฟล์เดียวหรือหลายไฟล์ก็ได้ เราเรียกทั้งก้อนของไฟล์ที่ GitHub คุมว่า Repository ก็เข้าใจง่ายๆว่าอะไรก็ตามที่อยู่ใน Repository เจ้า GitHub ดูแลให้หมด

ความเจ๋งของ GitHub คือความสามารถ Offline เราสามารถ Commit ได้ในขณะที่ไม่ได้ Online แล้วค่อยไป push แล้วตัว GitHub จะทำการ Merge ส่วนที่เราแก้ไข เข้ากับส่วนของคนอื่นให้เองเลย แต่ถ้ามันงงว่าจะ Merge ยังไงดี มันจะถามเราว่าจะ Merge ยังไง

พอเรารู้ว่ามีคนอื่นมาแก้ไขไฟล์เราก็ pull ลงมา ถ้าไฟล์ที่ pull ลงมามันมีส่วนที่แก้ไข เจ้า GitHub จะทำการ Merge ให้เอา และแน่นอนถ้ามันงง เราก็ต้อง Merge แบบอัตโนมือนะ





Commit, Push, Clone, Merge, Pull
คำเหล่านี้น่าจะเป็นคำหลักๆ ที่ใช้บ่อยๆๆๆๆๆๆๆๆๆๆ มาก ถามว่ามากขนาดไหน ก็เอาเป็นว่าขนาดใช้ Tool แบบ GUI ก็ยังจำได้แบบไม่ยาก





ทีนี้ในเรื่องการใช้งาน

จริงๆแล้วการใช้งาน GitHub จะทำผ่าน Command Line ซึ่ง.....(เข้าใจตรงกันนะ)....
มันก็เลยต้องมีคนทำ Tool ออกมาเป็น GUI ให้ใช้ง่ายๆๆๆๆๆ ขั้นตอนก็ไม่มีอะไรมาก ลองฝึกในเว็บของ GitHub ให้พอเห็นภาพ Commit, Push, Clone, Merge, Pull แล้วก็ใช้ Tool ได้เลย ไม่ยาก เมื่อเทียบกับการหัดใช้ Java หรือ obj C แน่นอน

ตัว Tool ที่เป็น GUI ก็มีทั้งของ GitHub เอง และของเจ้าอื่นๆอีกมากมาย เลือกใช้ได้ตามสะดวกเลยทีเดียว


ใช้ได้ฟรีมั้ย

เจ้า GitHub เนี่ย ใช้ฟรีครับ ฟรี ฟรี ฟรี แต่..... อะไรที่เราเอา Repository ไปฝากไว้กับ GitHub มันจะ Publish นะ ถ้าอยาก Private ต้องเสียเงิน

แต่ แต่ แต่ เราสามารถเปิด Server เองได้ ด้วย GitLab (คนเจ้ากับ GitHub นะ)  เท่าที่รู้ตัวที่ดังที่สุด คือ www.gitlab.com นี่แหละ



ภาคปฏิบัติ

สำหรับ Tool ที่ใช้กับ GitHub เราก็ใช้ Tool ของ GitHub นี่แหละง่ายดี (จริงๆแล้ว มีหลายตัวมาก แต่เลือกไม่ถูก เลยเอาตัวนี้) แต่ว่าหน้าตาของ Tool ที่รันบน Mac กับ Windows มันจะแตกต่างกันนิดๆ แต่ก็เข้าใจได้ไม่ยาก

หลักการใช้งานคือถ้าเรามีโปรเจ็คของเราอยู่แล้วเป็น Folder แล้วเราต้องการเอา Folder ขึ้นบน Repository เราก็จะต้องสร้าง Repository ขึ้นมาใหม่ โดยชี้ Path ไปที่ๆ Folder งานของเราอยู่ แล้วตั้งชื่อ Repository ให้ตรงกับ Folder งานของเรา แล้วตัว Tool จะอ่านไฟล์ทั้งหมดภายใต้ Folder งานของเรา แล้วเราก็จัดการ Commit + Push ได้เลย แต่ต้องไม่ลืมที่จะใส่ข้อความกำกับการ Commit ด้วยนะ ไม่งั้นมันจะไม่ยอม Commit

สำหรับข้อความกำกับการ Commit แค่บังคับว่าต้องมี แต่ก็ไม่มีการกำหนดตายตัวว่าต้องเป็นอะไร ดังนั้นหลักนิยมคือ บอกไปว่าเราทำอะไรไปบ้างก่อนการ Commit นี้ ประมาณนี้


ที่นี้ เรามาดูหน้าตาของ Tool กัน เริ่มที่



Mac OS

โหลดที่ https://mac.github.com/
จะเห็นว่า ใน Repository นี้ (mac.github.com) มีการ Commit โดยคนหลายคน หลายครั้งที่ผ่านมา และยังสามารถบอกได้ว่า การ Commit ครั้งนี้มีอะไรที่เปลี่ยนแปลง






Windows

โหลดที่ https://windows.github.com/
เนื่องการที่คือโปรแกรมที่เอาไว้ใช้งาน GitHub ถึงแม้จะรันบน OS ที่ต่างกัน แต่ความสามารถมันก็แบบเดียวกันนี่แหละ แต่สังเกตุมั้ยว่า หน้าตาโปรแกรมตัวนี้ออกแบบมาตาม Modern Design ที่ Microsoft ภูมิใจนักหนา เดะๆเลย จะว่าไป นี่เป็นโปรแกรมตัวแรกเลยนะ ที่เป็น Modern รันบน Desktop โหมด ธรรมดาได้ ที่ผู้เขียนได้ใช้ (ปกติ App ที่เป็น Modern จะบังคับให้รันใน Modern โหมด)





มาถึงตรงนี้แล้ว

ก็บอกได้เลยว่ามาใช้พวก Version Control กันเถิด ถึงจะบอกว่าทำคนเดียวไม่จำเป็นต้องใช้ แต่อย่างน้อยมันก็ช่วยเรื่อง Backup ได้ด้วย ยิ่งถ้าใน Project มีคนหลายคนอันนี้ยิ่งสำคัญใหญ่เลย

บทความนี้ได้แรงบรรดาลใจจาก
@nuuneoi - http://nuuneoi.com/blog/blog.php?read_id=704

วันศุกร์ที่ 2 พฤษภาคม พ.ศ. 2557

วันอังคารที่ 22 เมษายน พ.ศ. 2557

20 ปี สู่เส้นทาง Software Developer

blog นี้ไม่มีอะไรมาก ก็แค่อยากจะบันทึกเรื่องราวเอาไว้เฉยๆ เอาแค่ที่สนใจทางด้าน Software พอ ด้าน Hardware ไว้ทีหลัง

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

ต่อจากนั้นประมาณ 2 ปีต่อมา คอมเครื่องนั้นพัง พ่อก็ซื้อมาใหม่ จำได้ว่าจอเป็นสีขาวละ มีเกมให้เล่นด้วย! กลับมาจากโรงเรียนก็ตรงดิ่งไปที่เครื่องคอม เล่นเกมซักนึดพอชื่นใจ พอแดดร่มก็ออกไปวิ่งเล่นกับแก้งเด็กแถวนั้น ไม่มืดกลับบ้านไม่เป็น ก็ประมาณนั้น

พอขึ้นประถม 4 เริ่มปีกกล้าขาแข็ง เสาร์-อาทิตย์ นั่งรถไฟออกจากบ้าน 7 โมงเช้า ไปเรียนคอมที่พิโลก( Siam Computer) ตอนนั้นจำได้เลยว่า ไม่ค่อยรู้เรื่องอะไรหรอก ก็มีโปรแกรมแนวๆ word excel fox-pro พวกนี้ ก็เรียนไป เรียนเสร็จประมาณ บ่าย 3 ก็ไปเที่ยวท็อปแลนด์ รอรถไฟกลับบ้านประมาณ 5 โมงเย็น ก็ซักปีกว่าๆได้ ไปมันทุกเสาร์อาทิตย์

ช่วงตั้งแต่ประถม 4 จนถึง มัธยม 3 ก็ไม่ค่อยมีอะไรมากเน้นเล่นเกมเป็นหลัก จนช่วงปิดเทอร์มใหญ่ ขึ้นมัธยม 4 นี่แหละที่ได้ไปเรียนพิเศษที่กรุงเทพ (ที่จริงคือโดนบังคับไปสอบเตรียมอุดม แต่ไม่ค่อยอยากไป  เลยขอเรียนพิเศษ) ก็ไปลงเรียน HTML กับ JavaScript ที่ Siam Computer แถวๆสยาม ก็ ok อ่ะ เด็กบ้านนอกเข้ากรุงฯ (เอาซะใจกลางกรุงฯเลยด้วย) ก็นะเรียนเสร็จก็ไปนั่งเล่นชมวิวแถวน้ำพุ (ตอนนี้เป็นห้าง Digital Gateway ไปซะแล้ว) ได้ความรู้มานิดๆหน่อยๆ สะพานเหล็ก สะพานพุทธ คลองถม บ้านหม้ออยู่ตรงไหน จตุจักรอยู่ไหน เซ็นทรัลลาด ฟิวเจอร์รังสิต พันทิพย์ ไปมาหมด (ไม่เกี่ยวกับ HTML รึ JavaScript ซักอย่าง)

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

แล้วพอดีว่าช่วงงานวันวิทย์ที่ ม.นเรศวร เค้ามีแข่งเขียนโปรแกรม แน่นอนเราไม่พลาดถึงแม้จะไม่ค่อยรู้เรื่อง ผลคือ เค้าให้โจทย์ว่า ให้ทำตัวเดินหมากฮอส(ตัวม้า) ว่าถ้าอยู่ที่ช่อง (x,y) จะเดินไปที่ไหนได้บ้าง แล้วพอเดินไปช่องนั้น จะเดินไปไหนต่อได้อีก โอ้ววววววว คิด Algorithm ได้นะ แต่ code เป็น C ไม่สำเร็จ จำไม่ได้ละว่าทำไมถึงไม่สำเร็จ

จากความสำเร็จ(?)ในตอนที่ไปแข่งที่ มน. ก็เป็นแรงผลักดันให้สนใจด้านคอมมากขึ้น ก็เริ่มแบ่งเวลาจากการเล่นเกมมาศึกษามากขึ้น พอช่วงปิดเทอร์มขึ้น ม.5 มันมีแข่งทำเว็บวันแม่ โดย CITCOM มน. ก็ส่งแข่ง ผลคือ ได้ที่ 2 คุยโมไปได้ 7 วัน 7 คืน 555

พอเปิดเทอร์ม ม.5 กระทรวงสาธารณสุข มีกระกวดแข่งทำเว็บ แน่นอนเราไม่พลาด ที่จะส่งผลงานเข้าแข่ง ผลก็รู้ๆกันนะ ระดับประเทศ ฝีมือแบบบ้านๆ สู้เค้าไม่ได้อยู่แล้ว แต่สิ่งที่ได้จากการแข่งรอบนี้คือ ได้ฝึกใช้โทนสีกับหน้าเว็บหลายๆแบบเลย ก็เริ่มได้ไอเดียการออกแบบหน้าเว็บหลายๆอย่างก็เพราะส่งงานแข่งนี้แหละ ส่วนงานศิลปะก็เหมือนเดิม ผ่านระดับจังหวัด แล้วไปแพ้ระดับภาค

พอขึ้น ม.6 ช่วงนี้ติดสาว ก็ไม่มีอะไรมาก จนมาเรียนระดับมหาวิทยาลัย ชั้นปีที่ 1 วิชา Introduction to Computer อันนี้แหละที่ได้เรียนรู้อะไรใหม่ๆหลายๆอย่าง กับวิชา Introduction to Programming ที่เรียกได้ว่าทุ่มสุดตัว

พอขึ้น ปี 2 มีเรียน OOP โอ้วโลกนี้มันช่วงกว้างใหญ่นัก ไหนจะวิชา Web ที่เรียกได้ว่าถนัดที่สุด ที่สำคัญ ปีนี้เป็นปีแรกที่ได้แข่ง Debug โปรแกรม ก็นะ ใครก็ไม่รู้หน้าตาเอ๋อๆมึนๆ แข่งครั้งแรก ชนะเลิศครับ คุยแม่งเป็นเดือนกว่าจะหายเห่อ

แต่ว่าทุกอย่างมันมีจุดเปลี่ยน ช่วงปิดเทอร์มขึ้นปี 3 ได้ทำค่ายโอลิมปิควิชาการ(สอวน) ที่เราเคยสอบไม่ติด ก็ไปนั่งเรียนกับเด็กเค้านั่นแหละ โอ้ววววว ไอ้เด็กพวกนี้ มรึงจะเก่งกันไปไหนฟร่ะ ก็เป็นอีกหนึ่งครั้งที่ต้องทุ่มสุดตัว เพราะกลัวแพ้เด็กอ่ะนะ

หลังจากนั้นร้อนวิชาไปแข่งอะไรซักอย่างในกรุงเทพฯ ผลคือแพ้เยินเลย เจ็บใจสุดๆตอนนั้น ก็เลยตั้งอกตั้งใจเรียนมากขึ้นในช่วง ปี 3-4 ก็มาถึงปลายทางชีวิตในมหาวิทยาลัยละ เน้นเอาดีทาง Java กับ Web สุดท้ายผลจากการตั้งใจเรียนมากขึ้น เกรดจบ ป.ตรี เลยพ้น 3 มาได้ แบบเฉียดฉิว

หลังจากเรียนจบ ช่วงนี้หลุมดำ แต่ก็ได้หัดๆ Android บ้าง เล็กๆน้อยๆ เข้างานนั่นนุ่นนี่อย่างพวก barcamp, google devfest และที่สำคัญที่สุดเมื่อปี 56 ได้มึนๆไปเข้า Startup Camp ที่ ม.กรุงเทพ กล้วยน้ำไท ตอนแรกก็ไม่รู้หรอกว่ามันเป็นยังไง รู้แต่ว่าถึงเวลาที่จะต้องทำอะไรใหม่ๆ ต้องเปลี่ยนแปลงได้แล้ว ก็ไป ผลคือ ได้รู้ว่าถึงเราจะไม่เก่งมากนัก แต่ก็ไม่ได้ปลายแถวนะ ถ้ามีแรงผลักดันในตัวเองมากพอ อะไรๆเราก็ทำได้ ถึงจะไม่ได้ผลดีมากนัก แต่ก็ ok อยู่ ไม่ขี้เหร่

อ้าว ข้ามจุดสำคัญไป เมื่อ ปี 2555 ได้กลับไปเริ่มเรียนโท ที่ มน. ที่เดิมที่จบตรีมา ทำไมเลือกที่นี่น่ะหรอ ใกล้บ้านคือคำตอบเลย แต่ว่าไม่ได้เรียน Com Sci แบบตอน ป.ตรีแล้วนะ รอบนี้ เรียน IT เพราะว่าความขี้เกียจในตัวมีเยอะ กลัวจะเรียนไม่จบเอา ความรู้สึกในการเรียนรอบนี้ส่วนใหญ่ คือ เหมือนไปนั่งทบทวนสิ่งที่รู้แล้ว กับเติมเต็มส่วนที่ขาดหายไป แต่ถึงอย่างนั้นก็ได้อะไรใหม่ๆมาหลายอย่างอยู่

แล้วก็มาถึงจุดเปลี่ยนสำคัญอีกครั้ง เมื่อมีเหตุให้ต้องรับงานทาง iOS ทั้งที่ไม่เคยจับมาก่อน การรับงานครั้งนี้ถือได้ว่าเป็นการรับงานอย่างเป็นทางการครั้งแรกเลยทีเดียว ด้วยความรู้เดิมที่มีอยู่ กับความช่วยเหลือ และอุปกรณ์ใหม่ ทำให้สามารถผ่านมาได้ด้วยดี ทั้งๆที่ตอนแรกก็ไม่มั่นใจว่าจะทำได้มั้ย

จากนี้ต่อไป จะเป็นอย่างไร เส้นทางข้างหน้าจะลำบาก หรือสบาย ไม่รู้ รู้แต่ว่า วันนี้เราพอมีความรู้ พอมีกำลังอยู่ ไม่ว่าอะไรจะเข้ามา เราจะผ่านมันไปได้ ไม่ว่าจะเป็นอย่างไร เป้าหมายของเราคือ...


to be the Great Software Developer

ปล. บรรยากาศตอนเรียนตรี กับโทที่ภาควิชาต่างกันมาก ตอนนี้มีกิจกรรมทางวิชาการเพิ่มมาเยอะมาก มีวิทยากรมาบรรยาย และทำ workshop ถี่กว่าเมื่อก่อนมากเลย

วันจันทร์ที่ 21 เมษายน พ.ศ. 2557

[review] มีอุปกรณ์เยอะ มันก็ต้องพกที่ชาร์ทไปเยอะ แต่แก้ได้ด้วย Coop Jelly Charger Station

Coop Jelly Charger Station


ในยุคนี้ หลายๆคนที่มีอุปกรณ์พวกมือถือ มากกว่า 1 เครื่อง คงจะมีปัญหากับการชาร์ทไฟ ที่ต้องใช้ที่ชาร์ท 1 อันกับอุปกรณ์ 1 ชิ้น แล้วปัญาหามันอยู่ที่ระยะเวลาการใช้งานมันก็ดันพอๆกัน ทำให้ตรงชาร์ทพร้อมๆกัน ก็ไม่รู้เหมือนกันว่าทำไมพวกผู้ผลิตทั้งหลายไม่ยอมให้ที่ชาร์ทที่สามารถชาร์ทอุปกรณ์ได้มากกว่า 1 ตัวพร้อมๆกันมาซะที แต่จะว่าไปบางรุ่นบางยี่ห้อไม่ให้ที่ชาร์ทมาด้วยซ้ำนะ

ทีนี้มันก็เลยมีช่องว่างให้ผู้ผลิตรายอื่นผลิตที่ชาร์ทที่สามารถชาร์ทอุปกรณ์ได้พร้อมๆกันมากกว่า 1 อุปกรณ์ออกมาขาย แต่มันก็ดันมีปัญหาตามมาอีกอย่างเช่น

  • กรณีที่ 1 ที่ชาร์ท A สามารถปล่อยไฟได้ 1A ออกทาง USB 2 ช่อง แต่กรากฎว่า เวลาใช้ไฟจาก USB พร้อมกันทั้ง 2 ช่อง กระแสไฟดันตกไปอยู่ที่ช่องละ 0.5A หรืออาจจะต่ำกว่าด้วยซ้ำ
  • กรณีที่ 2 ที่ชาร์ท B สามารถปล่อยไฟได้ 1A ออกทาง USB 2 ช่อง และ สามารถปล่อยไฟได้ 2A ออกทาง USB 1 ช่อง แต่พอชาร์ทจริง ใช้ USB 1A แค่ 1 ช่อง ดันได้ไฟออกมา 3A ????????

อันนี้เนื่องจากผู้เขียนก็ไม่ได้มีความรู้ทางด้านไฟฟ้ามากมายนัก แต่ก็ขอเดาว่า เค้าออกแบบวงจรมาให้มันแชร์กัน ไม่ได้แยกกัน อ้าวแล้วแบบนี้จะมีที่ชาร์ทตัวไหนที่สามารถแยกจ่ายไฟได้จริงๆมั้ย ก็ขอตอบว่ามี ผู้เขียนก็หามานานแล้วที่ราคามันสมเหตุสมผลคุณภาพดี การใช้งานจริง ok (เรื่องเยอะนะ) ก็เลยเป็นที่มาของการรีวิว เจ้า Coop Jelly Charger Station ตัวนี้

มาเริ่มกันเลยละกัน



เจ้าตัวนี้มีชื่อว่า Coop Jelly Charger Station
เว็บผู้ผลิตคือ http://www.thecoopidea.com/#!jelly/c1oer
มีอยู่ด้วยกัน 5 สี คือ สีเทา สีฟ้า สีเขียว สีชมภู และสีเหลือง


เรามาดูสีเทากันเลยดีกว่า











ตัวกล่องที่ทำมาไอเดียดีอ่ะ ชอบ

ทำไมถึงต้องใช้ แบบนี้นี่เอง


เปิดกล่องออกมาก็มีตัวของ คู่มือ แล้วก็อากาศจากจีน


เมือแกะที่ชาร์ทออกมาจากปลอกซิลิโคน










ข้างในปลอกซิลิโคน


เวลาใช้ก็ลอดสายออกมาข้างล่างได้เลย เวลาไม่ใช้ก็ยัดสายเก็บเข้าไป สะดวกดีนะ


ทีนี้ก็เข้าเรื่องสำคัญเลยคือ จ่ายไฟแยกตามช่องได้มั้ย ในคู่มือบอกว่าได้(ลืมถ่ายรูปมา)
การจ่ายไฟของทั้ง 4 ช่องคือ

  • Tablet(iPad) 2.1A
  • Phone(iPhone/iPod) 1A
  • Phone(iPhone/iPod) 1A
  • Phone(iPhone/iPod) 1A

ส่วนเรื่องราคา ก็เห็นขายกันราวๆ 69$ usd นะ ตีเป็นเงินไทย ก็คง 2000 ได้ แต่ช่วงนี้(๒๑ เมษายน ๒๕๕๗) มันช่วงนาทีทอง ที่เว็บ lazada (ที่ในพันทิพย์เค้าบ่นๆกันว่ามีปัญหาเยอะไม่ดีนั่นแหละ แต่คนเขียนซื้อมาหลายอย่างก็ไม่เห็นมีปัญหาอะไร) ขายอยู่ 650 บาทไทย!

ก็จบเพียงเท่านี้ละกันนะ ครั้งหน้าเจอกันกับ review mac book pro

วันพฤหัสบดีที่ 17 เมษายน พ.ศ. 2557

5 วันมหัศจรรย์ กับการฝึก iOS ด้วยตัวเอง


5 วันมหัศจรรย์ กับการฝึก iOS ด้วยตัวเอง


เรื่องของเรื่องคือ
  • พอดีว่า มีงานที่ต้องการ iOS app เข้ามา
  • พอดีว่า จำเป็นต้องรับงานนั้น
  • พอดีว่า มีคนช่วยเรื่อง iOS แน่ๆ
  • พอดีว่า กระทรวงการคลังอนุมัติงบฉุกเฉินมาให้
  • พอดีว่า มีช่วงวันหยุดยาวพอดี
  • แต่ ไม่เป็น objective C เลย
  • iOS ไม่ต้องพูดถึงใช้เป็นอย่างเดียว



เลยเกิดสิ่งนี้

และสิ่งนี้




ก็เริ่มตั้งแต่วันที่ 12 จนถึง 16 เมษายน 2557
ความรู้สึกเหมือนสมัยตอนที่หัดเขียน Java ใหม่ๆเลย ตอนนั้นก็พอจะเป็น C/C++ กับ JavaScript อยู่บ้าง ก็อาศัยมั่วบ้าง อ่านจากตำราบ้าง ก็ผ่านมันมาได้

แต่มาตอนนี้เหมือนความกระตือลือล้นจะลดไปบ้าง แต่ก็ยังมีประสพการณ์(อันน้อยนิด) มาช่วยเติมเต็ม บวกกับพลังอำนาจของ google ก็พูดได้เลยว่า ถึงจะยังไม่ชำนาญ แต่ก็พอเข้าใจมันบ้างแล้ว

มาคิดๆดูแล้วยุคนี้นี่มันได้เปรียบจริงๆ ในยุคนั้นเต็มที่ก็กางตำราพร้อมกัน 2 เล่มเพื่อดูเป็นแนวทาง แต่ยุคนี้ ก็ google ไปสิ จะเอาซักกี่ตำราก็ได้ สบายๆ มีตัวอย่างเสร็จสรรพ ถ้าขี้เกียจพิมพ์ตามก็ copy & paste ไปเลย


เอาละหมดเรื่องบ่น ทีนี้เข้าเรื่องสาระละนะ

  • ความรู้ OOP สำคัญมาก
  • เลือก keyword ดี google จะน่ารัก
  • ทุ่มเทให้เกิน 120%
  • มีที่ปรึกษา
ความสำเร็จในครั้งนี้ก็คิดซะว่าเป็นของขวัญวันเกิดให้กับตัวเอง และด้วยการสนับสนุนจากบุคคลสำคัญๆ อย่างเช่น กระทรวงการคลัง(คุณป้า) คณาจารย์ และคุณพ่อ คุณแม่

วันพฤหัสบดีที่ 3 เมษายน พ.ศ. 2557

เหตุเกิดเพราะ Jena หรือ android หรือ andrjena

  • พอดีว่าตอนนี้เรียนวิชา Web Technology
  • พอดีว่าอาจารย์สั่งงานให้ทำ Ontology
  • พอดีว่าตัวอย่างที่อาจารย์มี มันมี PHP กับ Java
  • พอดีว่า PHP ต้องใช้ rdfapi-php ซึางมันตีกับ PHP 5.4.12 ที่ลงอยู่ในเครื่อง
  • พอดีว่า Apache Jena ทำงานบนเครื่องได้

จึงเลือกทำ Ontology บน Java
ซึ่งทำ Demo ง่ายได้แล้ว ให้ชื่อรุ่นว่า Mark 1

  • พอดีว่า ลืมเรื่องการทำ UI(swing) บน Java ไปแล้ว
  • พอดีว่าจะยัด HTML ไปลง Java แบบ Webview ของ Android ต้องใช้ JavaFX
  • พอดีว่าไม่เคยใช้ JavaFX
  • พอดีว่ายัด HTML ไปลง Webview ของ Android เป็น
  • พอดีว่าทำ App Android เป็น

จึงทำการ port code ของ Java ไปเป็น Android แล้วทำส่วน UI เป็น HTML
แต่ Library ของ Jena มีส่วน core ของ Java อยู่ ทำให้เอาไปใช้บน Android ตรงๆไม่ได้
????? แล้วเอายังไงดี ทางเลือกคือ เลิกกับทำต่อ

  • พอดีว่าไม่รู้อะไรดลใจให้ google ว่า jena android โอ้วววววววววววววววววววว มันมีคนทำไว้ด้วย ชื่อว่า androjena พระเจ้าช่วยกล้อยทอดมันฝรั่งต้ม สบายละทีนี้
  • พอดีว่าลองทำแล้ว ok ทำได้ จึงสำเร็จเป็น Mark 2

แต่เหมือนฟ้ากลั่นแกล้ง ทำไมโค้ดแบบเดียวกันมันดันได้ผลไม่ตรงกันฟร่ะ อันนี้ก็ขอยอมแต่เพียงเท่านี้ มันน่าจะเป็นปัญหาที่ Library ที่ port มายังไม่สมบูรณ์ เพราะ ณ วันที่เขียน androjena ยังเป็นเวอร์ชัน 0.5 อยู่เลย......

จบแค่นี้แหละ


อ้อยังไม่ครบ
ไหนๆก็ไหนๆแล้ว ฝากแปะ app ที่ทำหน่อย เผื่อใครผ่านมาเจอมาเห็น จะได้รู้ว่ามันมี

สรุป
androjena ทำงานได้ แต่ไม่สมบูรณ์มั้งนะ
ทำ App Android ใช้เวลาในการ debug มากกว่าปกติ
eclipse กาก

วันอังคารที่ 19 พฤศจิกายน พ.ศ. 2556

กล้องติดรถ มีไว้ไม่เสียเปล่า

เนื่องจากมีเหตุให้ต้องหากล้องมาติดรถ เพื่อควบคุมเส้นทางการขับรถ คือตอนแรกใช้ GPS แต่ปรากฏว่ารู้ว่าวิ่งผิดทาง แต่พอชี้บนแผนที่ว่าแยกนี้ให้เลี้ยวไปอีกทาง คนขับดันเลี้ยวที่แยกอื่นแทน เลยเปลี่ยนวิธีแก้ปัญหาใหม่ ใช้กล้องไปเลย ให้ดูจากภาพไปเลย ถ้าผิดอีกก็ไม่รู้จะว่ายังไงแล้ว
ข้างบนคือที่มาว่าทำไมต้องใช้กล้อง
ทีนี้มาเข้าเรื่องรีวิวตัวกล้องกันเลยดีกว่า กล้องตัวนี้ได้มาในราคา 700 บาท ก็ราคาถูกดี คาดหวังแค่ว่า ถ่ายได้เห็นภาพ ดูออก ประมาณนี้ แล้วมันก็ทำได้ประมาณนี้แหละ
หน้าตากล่องก็แบบนี้

อันนี้บอกสรรพคุณว่าทำอะไรได้บ้าง


อุปกรณ์ในกล่อง ก็จะมีคู่มือ สายAV สายUSB สายชาร์ทรถยนต์ ขายึด และตัวกล้อง

อันนี้ไว้เสียบ USB ใช้หัวแบบ mini USB
 
เลนส์กล้อง กับไฟอินฟราเรด

ด้านนี้ใส่ SD card กับสาย AV

ด้านบนมีช่องใส่แบต กับจุดยึด

ด้านหลังก็จะเป็นปุ่มเกิดปิดเครื่อง กับปุ่มสั่งบันทึก



เปิดเครื่องก็จะแสดงหน้าจอแบบนี้ ตรงกลางบน แสดงขนาดภาพที่ใช้บันทึก ขวาบนแสดงเวลาที่เหลือที่สามารถบันทึกได้ ติ่งๆที่อยู่ติดกันบอกว่าใส SD card อยู่ ล่างซ้ายแสดงระดับแบตเตอรี

เมนูการตั้งค่าเข้าใจง่าย อ่านตามคู่มือได้

เวลาที่บันทึกวีดีโออยู่จะขึ้นตัวเลขสีเหลืองกลางจอขึ้นมา ก็ ok เข้าใจง่ายอยู่


ที่นี้จะบอกลักษณะการใช้งาน
  • เวลาใช้ในรถ เสียบสายชาร์ทไว้ พอสตาร์ทเครื่องกล้องจะเปิดตัว แล้วเริ่มบันทึกเอง ใช้เวลาราวๆ 3 วินาที
  • พอดับเครื่องรถ กล้องจะหยุดบันทึก และปิดตัวเอง ใช้เวลาราวๆ 5 วินาที
  • มุมมองรับภาพไม่กว้างมาก
  • พอแสงน้อยไฟอินฟราเรดทำงานอัตโนมัติ แต่แทบไม่ช่วยอะไรเลย
  • ไม่ว่าจะปรับความระเอียดภาพที่ขนาดไหน ก็ใช้พื้นที่บันทึกเท่าเดิม (10นาที/900MB โดยประมาณ ฉะนั้นถ้าใช้ 32GB ก็ได้ราวๆ 3 ชั่วโมงครึ่ง โดยประมาณ)
  • ไมค์บันทึกเสียงเบามาก
  • คุณภาพภาพวีดีโอที่บันทึกได้ ก็ดูได้รู้เรื่อง




ตัวอย่างภาพที่บันทึกมา(แปลงไฟล์ให้ขนาดลดลงหน่อย ไม่งั้นอัพขึ้น Youtube ไม่ไหว คิดว่าคุณภาพไม่น่าจะตกไปจากต้นฉบับมาก)
สังเกตุที่ทะเบียนรถคันหน้า ว่าระยะไหนถึงจะอ่านได้


จริงๆจะอัพวีดีโอตอนกลางคืนด้วย แต่อย่าดีกว่ามันไม่เห็นอะไรนอกจากแสงไฟ

สรุปสั้น 700 บาท คุ้มอยู่นะ

ข้อมูลประกอบ
รายละเอียดไฟล์ที่มาจากกล้อง
General
Complete name                            : E:\DCIM\100MEDIA\SUNP0034.AVI
Format                                   : AVI
Format/Info                              : Audio Video Interleave
File size                                : 819 MiB
Duration                                 : 10mn 0s
Overall bit rate                         : 11.4 Mbps

Video
ID                                       : 0
Format                                   : JPEG
Codec ID                                 : MJPG
Duration                                 : 10mn 0s
Bit rate                                 : 11.3 Mbps
Width                                    : 640 pixels
Height                                   : 480 pixels
Display aspect ratio                     : 4:3
Frame rate                               : 32.642 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Compression mode                         : Lossy
Bits/(Pixel*Frame)                       : 1.123
Stream size                              : 805 MiB (98%)

Audio
ID                                       : 1
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Signed
Codec ID                                 : 1
Duration                                 : 10mn 0s
Bit rate mode                            : Constant
Bit rate                                 : 176.4 Kbps
Channel(s)                               : 1 channel
Sampling rate                            : 11.025 KHz
Bit depth                                : 16 bits
Stream size                              : 12.6 MiB (2%)
Alignment                                : Aligned on interleaves
Interleave, duration                     : 93 ms (3.03 video frames)


รายละเอียดไฟล์ที่แปลงเพื่ออัพขึ้น Youtube
General
Complete name                            : E:\DCIM\100MEDIA\Sunp0034-1.m4v
Format                                   : MPEG-4
Format profile                           : Base Media / Version 2
Codec ID                                 : mp42
File size                                : 272 MiB
Duration                                 : 10mn 0s
Overall bit rate mode                    : Variable
Overall bit rate                         : 3 799 Kbps
Encoded date                             : UTC 2013-11-19 03:01:25
Tagged date                              : UTC 2013-11-19 03:06:53
Writing application                      : HandBrake 0.9.9 2013051800

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Main@L4.0
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 9mn 59s
Bit rate mode                            : Variable
Bit rate                                 : 3 754 Kbps
Width                                    : 640 pixels
Height                                   : 480 pixels
Display aspect ratio                     : 4:3
Frame rate mode                          : Variable
Frame rate                               : 32.448 fps
Minimum frame rate                       : 16.319 fps
Maximum frame rate                       : 32.644 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.377
Stream size                              : 269 MiB (99%)
Writing library                          : x264 core 130 r2273 b3065e6
Encoding settings                        : cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x1:0x111 / me=hex / subme=2 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=6 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=1 / keyint=330 / keyint_min=33 / scenecut=40 / intra_refresh=0 / rc_lookahead=10 / rc=crf / mbtree=1 / crf=20.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=20000 / vbv_bufsize=25000 / crf_max=0.0 / nal_hrd=none / ip_ratio=1.40 / aq=1:1.00
Encoded date                             : UTC 2013-11-19 03:01:25
Tagged date                              : UTC 2013-11-19 03:06:53
Color primaries                          : BT.601 NTSC
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.601

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 10mn 0s
Bit rate mode                            : Variable
Bit rate                                 : 39.6 Kbps
Maximum bit rate                         : 46.5 Kbps
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 11.025 KHz
Compression mode                         : Lossy
Delay relative to video                  : 61ms
Stream size                              : 2.83 MiB (1%)
Encoded date                             : UTC 2013-11-19 03:01:26
Tagged date                              : UTC 2013-11-19 03:06:52