วันอังคารที่ 27 มีนาคม พ.ศ. 2561

[PR] KBank และ Google Developers ขอเชิญร่วมงาน Android Bangkok สัมมนาเพื่อนักพัฒนาแอนดรอยด์โดยเฉพาะ

KBank และ Google Developers ขอเชิญร่วมงาน Android Bangkok สัมมนาเพื่อนักพัฒนาแอนดรอยด์โดยเฉพาะ



พบกับ Android Bangkok 2018 งานสัมมนาที่เจาะลึกเทคโนโลยีแอนดรอยด์ให้นักพัฒนาแอปได้เข้ามาร่วมเวิร์คช้อปและอัพเดตเทคโนโลยีจากวิทยากรผู้เชี่ยวชาญที่มากด้วยประสบการณ์จากทั้งในและต่างประเทศเข้าร่วมมากกว่า 15 คน และหัวข้อสัมมนาแอนดรอยด์ Kotlin และอื่นๆ มากกว่า 11 หัวข้อ จัดขึ้นในวันเสาร์ที่ 31 มีนาคม 2561 โดยธนาคารกสิกรไทยเป็นเจ้าภาพร่วมกับ Google Developers ทั้งนี้งานยังมีจุดมุ่งหมายให้นักพัฒนาพบปะและแลกเปลี่ยนความรู้กันในเครือข่ายนักพัฒนาแอนดรอยด์ รวมทั้งเชิญชมบูธของ กสิกร บิซิเนส-เทคโนโลยี กรุ๊ป (KBTG) ที่จะนำเสนอนวัตกรรมบริการที่สร้างสรรค์โดยทีมนักพัฒนาของ KBTG และชมการสาธิตเทคโนโลยี e-KYC ที่จะเข้ามามีบทบาทสำคัญในการยืนยันตัวตนบนโลกดิจิทัล

Android Conference Bangkok 2018 จะจัดขึ้นในวันที่ 31 มีนาคม 2561 ณ โรงละครเคแบงก์สยามพิฆเนศ ชั้น 7 สยามสแควร์วัน บัตรเข้างานราคา 1,290 บาท พร้อมเสื้อยืดและ พิเศษ บัตรเข้างานสำหรับนักศึกษาและภาคธุรกิจ เปิดจำหน่ายแล้ว จำนวนจำกัด ลงทะเบียนซื้อบัตรได้แล้วตั้งแต่วันนี้ที่ android.wi.th/bangkok

--------------------------------------------

ถ้าอ่านข้างบนแล้วงงๆ ว่ามันคืออะไร อะไรยังไง

สำหรับชาว Android Developer น่าจะรู้จักงานนี้ดี คืองาน Android Conference หรือชื่อย่อว่า Droidcon นั่นเอง เป็นงานสัมมนาของชาว Android Developer และ All sessions are English นะคะ ได้เจอคนเก่งๆมากมายเลยด้วย ใครได้บัตรไปได้เสื้อยืดของงานด้วย และถ้าเข้า codelab ช่วงบ่ายของ Firebase ก็ได้ของที่ระลึกอีก แทบอยากโดด session ตัวเองเพื่อเข้าไปเลยนะนี่ 5555555

แต่ละ session อัดแน่นมากๆเลยนะ เป็นเรื่องที่อาจจะไม่ได้ฟังที่ไหนมาก่อน อาจจะเป็นงานแรกและงานเดียวเลยด้วย

ถ้าไม่ฟัง session ของเรา ไปฟัง codelab ก็ไม่ว่ากัน
แต่ถ้าโดดไปคอน BNK48 เราโกรธ เพราะเราไม่ได้ไปนะ ฮรืออออออออ

อ่านแล้วอยากได้บัตรใช่ไหมล่าาาาาา ไปซื้อได้ที่ android.wi.th/bangkok

ราคาบัตร Regular price 1290 บาท 
และบัตร Early bird tier 3 ขายวันสุดท้าย 29 มีนาคม ราคา 1150 บาท ลดไป 10%

งานจัดวันที่ 31 มีนาคม ที่ Siam PicGanesha (BTS Siam) นะ

แต่ถ้าอยากปามีมลูกพี่เจนนิษฐ์ นุไม่มีเงินแล้ว ใส่เราหล่ะ


บล็อกเรามีแจกบัตรจ้า ที่โพสนี้เลยยยยยยยย แล้วพบกันที่งาน Android Bangkok นะคะ

ป้ายกำกับ: ,

วันอาทิตย์ที่ 25 มีนาคม พ.ศ. 2561

ทำแอปสตรีมมิ่งของตัวเองกันเถอะ ep 2 : streaming ไฟล์จาก firebase storage และเล่นด้วย Exoplayer

หลังจากที่ทำหน้าแอปหน้าแรกที่แสดง list แบบ mock-up กันไปแล้ว
ต่อไปจะลองแสดงผลชื่อไฟล์เพลงจาก firebase storage กัน ก่อนที่จะฟังเพลงแบบสตรีมมิ่ง

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

มาให้แอปเราเชื่อมต่อกับ Firebase Storage กันเถอะ

ในที่นี้เราแค่ streaming file ไม่ได้ download เข้ามาในเครื่องนะ แต่ข้อจำกัดคือ เราต้องรู้ชื่อไฟล์ก่อน ถึงจะดึงมาได้

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

ก่อนอื่น อัพไฟล์เพลงเราเข้า Firebase Storage ก่อนนะ แบบนี้


จากนั้นไปเพิ่มที่ build.gradle ของ module app ซึ่งในนี้ไม่ใช่ version ล่าสุดนะ

compile 'com.google.firebase:firebase-storage:11.4.2'

พออัญเชิญมาเรียบร้อยก็ sync gradle ซะ

เรารับชื่อไฟล์จากหน้าแรกของแอป และเริ่มเล่นเพลงอีกหน้านึง

ใน Firebase Storage นั้น จะมี url 2 ชนิด ได้แก่
1. Storage Location : gs://<project_name>.appspot.com/<file>
2. Download Url : https://firebasestorage.googleapis.com/v0/b/<project_name>.appspot.com/o/<file>?alt=media&token=<token> ตัว token นั้น Firebase จะ generate ให้

เราจะเห็นตอนกดไปดู detail ของแต่ละไฟล์ และเราใช้ download url ในการดึงไฟล์เข้ามา
เราเคยลองเขียนโค้ดเรียก url มักจะได้ Storage url มาตลอดเลย และเราสามารถเปิดไฟล์ได้คนเดียว ส่วน download url สามารถใช้ได้หมดเลย เช่น เราเคยอัพไฟล์รูปขึ้นหน้า portfolio website โดยแปะ url ตัวนี้ไป

สรุปจากการทดลอง โค้ดเราจะเป็นดังนี้



เราจะเรียกหาแต่ละชั้นของไฟล์เราก่อน จากนั้นใช้คำสั่ง getDownloadUrl().addOnSuccessListener() เพื่อ get download url ออกมา
ref : https://stackoverflow.com/questions/37374868/firebase-getdownloadurl

เมื่อเรา debug ดู พบว่า เรียกถูก path และ token มีการเปลี่ยนแปลงตลอดเวลาเลย แต่ตัวแอป crash เนื่องจากตัว Exoplayer ของเราเล่นไม่ได้นี่แหละ เข้าใจว่าไม่ใช่ format ที่รองรับนะ


ปัญหาที่เกิดขึ้น มี 2 อย่าง คือ โค้ด Exoplayer ที่ก็อปมา เปิดลิ้งค์ไฟล์เสียงไม่ได้ แล้ว file path เป็น null ระหว่างกดที่ item ไปยัง player ตัว player สร้างไวกว่าได้ url มาซะอีก

คิดว่าถ้าลองเขียน cloud function สักตัว เพื่อทำ realtime database ในการดึงว่ามีกี่ไฟล์ใน storage ก็น่าจะดีไม่น้อย ซึ่งมีคนใจดีเขียนบล็อกในการสร้าง API โดยอัพไฟล์ไปใน Firebase Storage แล้วไปแปะที่ Realtime Database จากนั้นใช้ cloud function สร้าง API ขึ้นมา แล้ว make sure โดยการเรียกใน postman โอ้เย้ ได้แล้ววววว ขอบพระคุณรัวๆเจ้าค่ะ


มาทำความรู้จักกันกับ Exoplayer ก่อน



มันคือ player ตัวใหม่ที่ใช้ใน Android จากทาง Google ซึ่งเขาเคลมว่ามันเสถียรกว่าตัวเดิมที่มีอยู่ (หมายถึงเจ้า MediaPlayer นั่นแล) ซึ่งเปิดตัวตอน Google I/O 2017 ที่ผ่านมาเลยนะนี่

Reference

ExoPlayer เป็น open source ของ media playback สำหรับ Android ไม่ใช่ Android Framework นะจ๊ะ
ตัวนี้จะช่วยเขียนโค้ดได้ minimal และ flexible มากขึ้นในการสร้างหน้าตาของ media player เหมาะกับการใช้งานแบบ streaming หรือมีการเข้ารหัสข้อมูล รองรับ Android 4.1 หรือ api version 16 ขึ้นไป สามารถ support file ได้เกือบทั้งหมดเลย มีแค่น้อยอันที่ไม่ได้ แต่ไม่ต้องกังวล เพราะส่วนใหญ่ก็รองรับอยู่แล้ว

เช่น แอปเราเปิดวิดีโอเอ็มวีของสินค้า และเราไม่อยากให้ใครสามารถดูดไปได้ ก็จะใช้การ streaming ในการนำวิดีโอมาเปิดในแอป และป้องกันไม่ให้ใครไปดูดวิดีโอมา จึงมีการเข้ารหัสไว้ ถ้าดูดมาได้ก็จะเป็นอะไรสักอย่างที่เข้ารหัสไว้ ประมาณนี้

การใช้งานที่เราเห็นทั่วไป ก็คือ YouTube และ Google Play Movies ในมือถือของเรานั่นเอง

เราลองทำตาม codelab ไปเล่นๆ ตาม https://github.com/googlecodelabs/exoplayer-intro.git
พอให้รู้จักกันคร่าวๆ

ก่อนอื่นทำพิธีการอัญเชิญเข้ามาก่อน

จุดแรก build.gradle ของโปรเจก ใส่ใน repository ใส่ได้สองท่า

ท่าแรก ท่ามาตรฐาน
maven { url "https://maven.google.com" }

ท่าที่สอง ท่าสายย่อ
google()

จุดที่สอง build.gradle ของ module เพิ่มใน dependency

// standard (require)
compile 'com.google.android.exoplayer:exoplayer:2.5.4'
// core function (require)
compile 'com.google.android.exoplayer:exoplayer-core:r2.5.4'
// DASH content
compile 'com.google.android.exoplayer:exoplayer-dash:r2.5.4'
// UI component
compile 'com.google.android.exoplayer:exoplayer-ui:r2.5.4'

แต่เดี๋ยวนี้แอดตัวเดียวเหอะ ตาม version ล่าสุดเลย

// standard (require)
compile 'com.google.android.exoplayer:exoplayer:2.7.1'

อธิบายการทำงานกันแบบคร่าวๆ

เราสร้าง layout หน้าแรกเพื่อแสดงเพลงทั้งหมดที่มี แล้วเวลากดเข้าไปก็จะเล่นเพลงนั้น

ตัว Exoplayer นอกจากจะเล่นไฟล์เดี่ยวๆแบบในตัวอย่างนี้แล้ว สามารถเล่น playlist ได้ด้วย และ repeat เพลงหรือ playlist ได้ด้วยนะ ดังนั้นเราต้องมาเปลี่ยนโค้ดและหน้าตาของมันนิดหน่อย เพื่อให้สามารถเล่นได้ตาม feature ที่เขามีอยู่ ลุยกันเลยจ้าาา

ก่อนอื่นมาดูหน้าตา player ของแอปในท้องตลาดกันเลย มีของ Spotify Fungjai และ JOOX


ตำแหน่งของปุ่มจะวางไว้ในแนวทางเดียวกัน เราก็ต้องเอาที่ user สะดวกนั่นแหละ

ถ้าส่วนแอปฟังเพลงแบบ niche ไปเลย ก็เรื่องของเขา 555 เช่น Nightwave plaza แอปฟังเพลง waporwave ยาวๆไป concept นี่น่าจะ windows 98 อะไรเทือกนี้แน่นอนนน


ดังนั้นเราจะสร้างปุ่มใหม่แบบนี้


และหน้าตา layout จะเป็นดังนี้


เราเองก็แก้อะไรมากมาย ทั้งโปรเจกเลย เช่น เรียกไฟล์จาก API ที่สร้างจาก cloud function ดังนั้นไปโฟกัสส่วน player ว่าแต่ละปุ่มเขียนยังไงก็แล้วกันเนอะ

สาเหตุที่เรียกใช้ API เพราะมันสะดวกดี ในแง่ของการดึงข้อมูลมาโชว์ ไม่ต้องมีปัญหาเนอะ

เราเล่าคร่าวๆว่าแต่ละปุ่มทำอะไรเนอะ

Play ปุ่มเล่น ตั้ง logic ที่ชื่อว่า songplay เป็น false ซะ จากนั้นก็จะให้เล่นเพลงเมื่อกดปุ่ม และเปลี่ยนปุ่มเป็น pause ด้วย โดยคำสั่งที่ใช้ในการเล่นเพลง เราสร้างเป็น function เพราะใช้หลายที่


Repeat เป็นตัวที่วนซํ้า มาตอน ExoPlayer version 2.5 ทำได้ทั้งไฟล์เดียวและ playlist จะมีโหมดแบบนี้

- No Repeat : โหมดปกติ ปิดแม่มเลย
player.setRepeatMode(Player.REPEAT_MODE_OFF);

- Repeat one : เล่นเพลงเดียวซํ้าไปซํ้ามา
player.setRepeatMode(Player.REPEAT_MODE_ONE);

- Repeat All : เล่นวนทั้ง playlist ถ้าเพลงสุดท้ายแล้ว ก็วกกลับมาเล่นเพลงแรกเอง คือต้องมี playlist ใน player ก่อนนะ
player.setRepeatMode(Player.REPEAT_MODE_ALL);

โดยเราสร้างปุ่มขึ้นมาเอง เมื่อกดจะเปลี่ยนโหมดตามด้านบน รูปก็เปลี่ยนไปด้วย แบบนี้


ตัวปุ่มจะใช้แบบสำเร็จ หรือทำปุ่มเองก็ได้แบบเราก็ได้ โดยเปลี่ยนรูปปุ่มตามที่กด 
ซึ่งรายละเอียดเพิ่มเติมอ่านได้ที่นี่
https://medium.com/google-exoplayer/repeat-modes-in-exoplayer-19dd85f036d3

Prev/Next จริงๆมันควรจะผูกกับ playlist แต่เราไม่ได้สร้าง playlist ไว้เลย เลยใช้ logic ในกากดปุ่มแทน ถ้าเพลงถูกเล่นอยู่ ก็ให้เล่นเพลงต่อไปได้เลย

จริงๆลองทำเองยังก็ยากแหละ เพราะปุ่มพวกนี้ อิงจาก playlist ที่มีนั่นเอง

สรุป ตัวอย่างที่เห็นไม่ใช่ตัวอย่างการทำ ExoPlayer ที่ถูกต้อง อ้าววววว อ้าวเลยหล่ะสิ
อ่านแล้วมันดูยากๆเนอะ

แล้วอะไรคือตัวอย่างที่ถูกต้องหล่ะ

มาพบวิธีที่ถูกต้องในงาน Android Bangkok 2018 ในวันที่ 31 มีนาคมนี้ ซึ่งเราจะมาพูดถึง ExoPlayer ตั้งแต่พื้นฐาน จนสร้างแอปได้ และเสริมส่วน advance เข้าไป ให้เข้าใจมากขึ้น

เข้าไปจับจองบัตรและดูตารางเวลาของแต่ละ session กันได้ที่ https://android.wi.th/bangkok/


เจอกันงาน Android Bangkok 2018 นะคะ <3

ป้ายกำกับ:

วันอังคารที่ 13 มีนาคม พ.ศ. 2561

Python Guideline เขียนพี่เหลือมไพธอนฉบับพื้นฐานเป็นในวันเดียว!!!

จริงๆบล็อกนี้เขียนไว้นานมาก แต่ยังไม่เสร็จ มีแววจะปล่อยแต่ไม่ได้ปล่อย เลยกลับมาดูแล้วเรียบเรียงใหม่นิดๆหน่อย เพราะช่วงนี้ยุ่งมากจริงๆ



แต่ทั้งนี้ทั้งนั้นสำหรับคนที่ไม่เป็นภาษา python มาก่อน แต่เขียนภาษาอื่นได้อยู่แล้ว เรามีวิธีที่ทำให้มันง่ายขึ้น แบบวันเดียวจบ (เนื่องจาก workshop ที่ไปมา แล้วก็ที่เขาจัด ก็วันเดียวจบเหมือนกัน) แต่อ่านเองวันเดียวไม่จบแน่นอน ดังนั้นเลยสรุปเป็น Guideline ออกมาซะ ชีวิตจะได้ง่ายขึ้น และเอาไปทำแบบฝึกหัดมากขึ้นเนอะ

ก่อนอื่น python ตอนนี้ ที่นิยมใช้กับ คือ python 2.7 เนอะ ปัจจุบัน version 3.6 หล่ะ
ข้อควรระวังอันน่าตกใจ คือ syntax บางอันของ 2.7 และ 3 ขึ้นไป มีไม่เหมือนกันด้วยอ่า
ถ้าจะแนะนำว่าจะใช้ version อะไรดี ตามหลักทั่วไปคือ version ใหม่สุดเนอะ แต่อาจจะแล้วแต่งานที่ทำว่า requirement เขาเอา version ไหนเนอะ

ปล สำหรับ mac os นั้น เขาลงมาให้ทั้งสองเวอร์ชั่นเลยจ้า เย้

มาเริ่มกันเลยดีกว่า

หัวข้อที่ 1 : แนะนำภาษา python

python เวอร์ชั่นปัจจุบัน คือ 3.6 (19 มิถุนายน 2560) run เป็น high-level language มีการแปลภาษาแบบ interpreter คือทำทีละบรรทัด เป็นภาษาที่เรียนรู้ได้ง่าย

ในชีวิตประจำวัน python ถูกนำมาใช้งานหลายอย่าง เช่นการทำ back-end ของ dynamic website, ใช้ในงาน data science, การเขียนโปรแกรมลงบน hardware สำหรับงาน embedded system เป็นต้น
สามารถดาวน์โหลด python มาใช้งานได้ที่ https://www.python.org/downloads/ และมี document วิธีการเขียนโปรแกรมด้วยภาษา python ที่ https://docs.python.org/3/library/

เราสามารถใช้ editor ในการเขียนโปรแกรมภาษา python ได้หลากหลายโปรแกรม เช่น notepad++, sublinetext, pyCharm เมื่อเราติดตั้งตัว python แล้ว ก็สามารถ run source code ภาษา python ได้

ความแตกต่างของ python 2.7 vs python 3.3 ถึงเวอร์ชั่นปัจจุบันจะเป็น python 3.x แต่มีบางโปรแกรมและบางหน่วยงานใช้ python 2.7 อยู่ ดังนั้นเราจะมาดูความแตกต่างกันระหว่าง 2 เวอร์ชั่นนี้



python 2.7
python 3.x
print
print “hello world”
print (“hello world”)
Integer Division
3/2 = 1
3/2 = 1.5
input value
raw_input()
input()
strip line in file
string.spilt(f.read(), “\n”)
f.read().strip().splitlines()
file mode
rb, wb, ab
r+, w+, a+

การเลือกใช้ python ขึ้นอยู่กับโปรแกรมที่รองรับ และปัจจัยอื่นๆ ที่นอกเหนือจากความใหม่ของเวอร์ชั่น

ปล. เวลาเริ่มเรียนควรเริ่มที่ python 3.x เลยจ้า เนื่องจาก python 2.x จะเลิก support แล้วนะจ๊ะ

หัวข้อที่ 2 : ติดตั้งโปรแกรม python ลงบน computer

download จากหน้าเว็บ เลือก version ได้ตามชอบใจ
จากนั้นลงโปรแกรมปกติเลย
และส่วนสำคัญ คือ การ set path ที่ system environment

กดคลิกขวาที่ไอคอนคอมพิวเตอร์ของท่าน เลือก properties และเลือก Advances system setting
จากนั้นกดปุ่ม Environment Variables ไปที่ system variable เลือกตัวแปรชื่อ PATH

  • กรณีไม่มีตัวแปร PATH ให้เพิ่มโดยการกดปุ่ม NEW และใส่ชื่อ variable เป็น PATH และ value เป็น path ของเจ้า python เช่น C:/python3
  • กรณีที่มีตัวแปร PATH แล้ว ให้กดปุ่ม EDIT แล้วใส่ ; ก่อนที่ใส่ path ของเจ้า python

หรือจะทำที่ command line ก็ได้นะ แต่วิธีนี้ชัวร์และอุ่นใจกว่า

ตัวโปรแกรม python มีสองแบบ คือแบบ command line กับแบบ GUI

 

ข้อดีข้อเสียอย่างย่อๆ คือ แบบ command line เวลาเราพิมพ์ผิด เราจะต้องพิมพ์ใหม่ ส่วนแบบ GUI เราพิมพ์ผิดแล้วก็อปแก้พิมพ์ใหม่ได้ มีแค่นี้แหละ

หัวข้อที่ 3 การพิมพ์คำสั่งขั้นต้น

การพิมพ์ Hello world ออกมาสู่หน้าจอ
เวลาเราเรียนคำสั่งใหม่ๆ มักจะเป็นคำนี้เสมอเลยเนอะ คำสั่งใช้ง่ายมากๆเลย
print "Hello world" #ง่ายๆเลย แต่อันนี้ของ python 2.7
print ("Hello world") #อันนี้ของ python 3.0 ขึ้นไป

นี่คือสิ่งที่เราบอกว่า syntax ต่างกันไงหล่ะ
ใช้ # เพื่อ comment code นะจ๊ะ

ข้อควรระวัง ในภาษา python ไม่ได้ใช้ ; ในการสิ้นสุดคำสั่งนะ
และใช้ 2space แทน tab

หัวข้อที่ 4 Data type และการประกาศตัวแปร
Data type ใน python ไม่ได้มียุ่บยับหรือภาษาอื่น หลักๆมีสามตัวคือ

- Number ตัวเลขทั้งหลาย เราจะบวกลบคูณหารผ่าน python ก็ทำได้ง่าย สบายๆเลย เช่น
บวก ลบ คูณ หาร    : +, -, *, /               =>       7/2
การหารเอาเศษ      : mod %                =>        7/2
เลขยกกำลัง           : power **             =>        7**2
การหารแบบปัดลง : floor division //   =>         7//2
การหารแบบปัดขึ้น : round()                =>         round(7/2)

ตัวอย่าง
2^n - 1 จะได้เป็น (2**n)-1
pi r^2 จะได้เป็น pi*(r**2)

ตัวแปรประเภท Number ประกาศ data type เป็น เลขจำนวนเต็ม int() และ จำนวนทศนิยม float()
หรือประกาศเป็นเลขฐานต่างๆก็ได้ด้วยนะ เช่น เลขฐานสอง bin() เลขฐานสิบหก hex() เช่น
int(‘11001100’,2) #204 แปลงเลขฐานสองเป็นฐานสิบ
int(‘0x20’,16) #32
 แปลงเลขฐานสิบหกเป็นฐานสิบ
bin(int(‘0xDEC’,16)) #แปลงเลขฐานสิบหกเป็นฐานสิบ และแปลงเป็นเลขฐานสอง
hex(int(‘101010101010’,2)) #0xAAA แปลงเลขฐานสองเป็นฐานสิบ และแปลงเป็นเลขฐานสิบหก

การทำ Fixed point number
from decimal import Decimal
interest = Decimal(“6.4200”)

- String ตัวอักษร พี่เหลือมสามารถเล่นได้เยอะแยะเลย
ทั้งการเลือกตัวอักษร ตัดทิ้ง บวกสตริง เซ็คความยาว

การสร้างตัวแปร string ใหม่ : hello = str()

การตรวจสอบความยาวของ string : len(hello)
ถ้าความยาวเป็น 0 นั่นคือเป็นตัวแปร string เปล่าๆ นั่นเอง

ค้นหาคำที่เราต้องการในตัวแปร string : find()

การตัดคำ
การนำ space หัวท้ายออกจากกัน : strip()
การตัดคำออกตามที่เราต้องการ : split()
การแทนค่าคำ : replace()

ช่วงลองทำดู เนื่องจากมันเล่นได้หนุกหนาน เลยมีอะไรให้ลองทำนิดหน่อย
1. ให้ตัวแปร string ชื่อว่า hello แล้วกัน มีค่า
Hello, it's me. I was wondering if after all these years
2. ตรวจสอบความยาวของ hello
3. หาคำว่า me ใน hello
4. ตัดคำจาก space ออกเป็นคำๆ
5. แทนค่าคำว่า me ว่า you

คำเฉลย
hello = "Hello, it's me. I was wondering if after all these years"
len(hello)
hello.find("me")
hello.split(" ")
hello.replace("me","you")

เราสามารถใช้ escaped with backslashes (\n \r\n \t \0 \x) ใน python ได้ด้วยนะ

- List อันนี้อาจจะต่างจากพวกภาษา C แต่ภาษาอื่นๆก็มี มันคล้ายๆ array แต่ไม่ใช่ซะทีเดียว
list = [1, 2, ,3, ...]

การใส่ค่าใน list ไม่จำเป็นต้องใส่ค่าประเทภเดียวกัน เช่น
member = [“brown”, 94, True]

การเพิ่มสมาชิกใหม่ มี 2 แบบ คือ append, extend
- append : ใส่เป็นคำ หรือตัวเลขก็ได้ => list.append()
- extend  : ใส่เป็น string character =>list.extend([])

การลบสมาชิกออก ใช้ list.remove() ข้างในใส่สมาชิกตัวที่เราต้องการจะลบ
ถ้าล้างไส้ในทั้งหมด ใช้ list.clear()

การตรวจสอบความยาวของ list ใช้คำสั่ง len(list)

ตัวอย่างการใช้งาน
fav_stock = ["ADVANC", "BEM", "CPALL", "CPF", "AU"]
1. เพิ่ม "BAY"
2. ลบ "AU"
3. เปลี่ยน "ADVANC" เป็น "INTOUCH"
4. หาจำนวนชื่อหุ้นใน fav_stock

คำเฉลย
fav_stock.append("BAY")
fav_stock.remove("AU")
fav_stock[0] = "INTOUCH"
len(fav_stock)

- Boolean อันนี้เหมือนภาษาอื่นๆ มีค่าสองแบบเท่านั้น คือ True กับ False

สรุป python ไม่ต้องประกาศตัวแปรให้วุ่นวาย เช่น uint8 i = 0; งี้ แค่ใส่ค่าไปเลย เช่น i = 0 จบ

หัวข้อที่ 5 comparison
การเปรียบเทียบค่าในภาษา python แบ่งเป็น 4 แบบ ดังนี้
- logical : and, or, not, and not
เช่น (len(list) >= 0) and (boo != False)

- identity : is, is not, not
เช่น not (boo)

- arithmetic : >, >=, <, <=, ==, !=
เช่น len(list) >= 0, boo != False

- Null : None
เช่น list != None

ซึ่งเรื่องนี้นำไปใช้ใน condition statement

หัวข้อที่ 6 condition statement
ใน python มี if-else ในการเลือกการตัดสินใจ
มี syntax ดังนี้

- แบบทางเดียว
if (consition):
    <statement>

- แบบสองทาง
if (consition):
    <statement>
else:
    <statement>

- แบบหลายทาง
if (condition):
    <statement>
elif (condition):
   <statement>
else:
    <statement>

มาลองทำดูดีกว่า

เขียนโปรแกรมตัดเกรดกันเถอะ ...
การตัดเกรดของวิชาการเรียน python พื้นฐาน มีเกณฑ์ ดังนี้
100 = A+, >=80 = A, >=70 = B, >=60 = C, >=50 = D, other = F

มาลงโค้ดดิ้งกัน
ให้ input มีชื่อตัวแปรว่า score และ output ชื่อว่า grade

# input student score
score = 78

if (score == 100):
  grade = "A+"
elif ((score >= 80) and (score < 100)):
  grade = "A"
elif ((score >= 70) and (score < 80)):
  grade = "B"
elif ((score >= 60) and (score < 70)):
  grade = "C"
elif ((score >= 50) and (score < 60)):
  grade = "D"
else:
  grade = "F"

print (grade)

หัวข้อที่ 7 loop statement
ใน python มี for และ while ในการใช้วนลูป

มาลองทำดูดีกว่า พิมพ์ค่าสมาชิกแต่ละตัวใน array_list
ซึ่งในภาษา python จะต่างจากภาษาอื่นๆ สามารถวนลูปค่าใน list ได้เลย ภาษาอื่นๆจะวนจากตัวเลข เช่น
array_list = [‘apple’, ‘papaya’, ’banana’, ’orange’]
for i in array_list:
   print (i)

ให้พิมพ์เลข 1-10 ออกมาสู่หน้าจอ สามารถเขียนได้ดังนี้
#print 1-10
i=1
while i <= 10:
    print(i)
    i += 1

function range เป็น function ที่สร้าง range ค่าในช่วงที่เราต้องการ เช่น range(10) สร้างค่าเริ่มจาก 0 ไป 10 ตัว ดังนั้นจะได้ค่า 0-9 เราไม่สามารถเขียนเป็นเลขโดดๆใน for ได้
#print 1-10
for i in range(1,11):
   print (i)

loop comprehensions คือการเขียน loop statement แบบลดรูป พร้อมการเปรียบเทียบค่า
ตัวอย่าง เช่น หาเลขระหว่าง 0-30 ที่หารด้วย 2 ลงตัว

ถ้าเราจะเขียนแบบเต็มๆ จะได้แบบนี้ ข้อดี คือ สามารถตรวจสอบได้เวลาที่โค้ดเรามีปัญหา
evens = []
for i in range(31):
   if i % 2 == 0:
      evens.append(i)

และการเขียนแบบลดรูปแบบ loop comprehensions
evens = [i for i in range(31) if i % 2 == 0]

หัวข้อที่ 8 การใช้ break, continue และ pass ใน statement

break คือ การให้โค้ดของเราหยุดทำงาน เมื่อเข้าสู่ statement ที่เรากำหนด
continue คือหลังจากเจอ statement ที่เรากำหนด ก็ให้ตรวจที่ statement ถัดไป
pass ใส่เมื่อเราไม่ให้มีการทำงานใดๆเมื่อเข้า statement ที่เรากำหนด

ตัวอย่าง
# check order
if (order == 0):
  break
elsif (order == 1):
  continue
elif (order % 3 == 0):
  pass
else:
  print (order)

หัวข้อที่ 9  Function
มี syntax การเขียนดังนี้
def fn_name(input):
   …

   return output

เรามีวิธีง่ายๆ นั่นคือ การนำโปรแกรมตัดเกรดของเรามาใส่ในฟังก์ชั่น โดยมี input คือ คะแนนของนักเรียนในวิชาการเรียน python พื้นฐาน และ คืนค่าเป็นเกรดของนักเรียน

def python_grade(score)
  # ใส่โปรแกรมตัดเกรดของเราลงไป
  if (score == 100):
    grade = "A+"
  elif ((score >= 80) and (score < 100)):
    grade = "A"
  elif ((score >= 70) and (score < 80)):
    grade = "B"
  elif ((score >= 60) and (score < 70)):
    grade = "C"
  elif ((score >= 50) and (score < 60)):
    grade = "D"
  else:
    grade = "F"
  return grade

การเรียกใช้งาน เป็นดังนี้
python_grade(78)
ถ้าต้องการแสดงผล สามารถใส่ print ครอบไว้ได้
print(python_grade(78))

หัวข้อที่ 10 Data structure
tuple
เราสามารถเก็บข้อมูล data type ใดก็ได้ ในตัวแปร tuple
t = 12345, 54321, 'hello!'
การ update ค่าใน tuple : t[0] = 0
เราสามารถนำ tuple นำมาบวกกันได้ด้วยนะ : t3 = t1 + t2
การลบค่าทั้งหมดใน tuple : del t
set
union => a | b
intersection => a & b
difference => a-b, b-a
symmetric difference => a ^ b

dictionary
การแสดงผลค่า key และ value ของสมาชิกแต่ละตัวใน dict
for key, val in num.items():
 print (key, val)

การเรียงค่า key ของ dict โดย output จะเป็น list : sorted(num)
การเรียงค่า key และ value ของ dict โดย output จะเป็น list เช่นกัน: sorted(num.value)

for sort by key and show all member in dict, output is tuples data type
sorted(num.items(), key=lambda x:x[1])

หัวข้อที่ 11 การทำงานร่วมกันกับไฟล์
การอ่านไฟล์ มี syntax หลักๆ ดังนี้
f = open(filename, mode)
parameter ตัวแรก คือ ชื่อไฟล์ และตัวที่สอง คือโหมดการอ่านเขียนไฟล์

โหมดการเขียนอ่านไฟล์ มีดังนี้
r : read อ่าน
w : overwrite เขียนทับ
a : write at end of the file เขียนต่อ
mode++ : reading & writing => r+, w+ a+

มาดูการเขียนโค้ดกันดีกว่า

# open file
f = open(‘text.txt’, ‘a’)

# read file 
code = f.read()

หลังจากอ่านไฟล์แล้ว สามารถส่วนนี้ไปใช้งานได้ แต่ประเภทของตัวแปรจะเป็นแบบ binary ดังนั้นอาจจะต้องแปลงเป็น string โดยใช้ decode("utf-8") เช่น
# find word in line of file
if (code.find(b"file") >= 0):
  print (code)

elif (code.decode("utf-8").find(b"line") >= 0):
  print (code)

# spilt line
lines = code.strip().splitlines()

# read single line of a file
f.readline()

# write file
f.write(“blah blah blah”)

#close file
f.close()

หัวข้อที่ 12 Exception handling
syntax error คือ การที่ compiler แจ้งในส่วนที่เราเขียนโค้ดผิด syntax ที่เราพบเห็นกัน มีดังนี้
SyntaxError : invalid syntax
IndexError: string index out of range
NameError: name 'n' is not defined

exception คือ การที่ compiler แจ้งเราว่า code error ไม่สามารถทำงานต่อได้ มี Error defect ดังนี้
ZeroDivisionError: division by zero
NameError: name 'test2' is not defined
TypeError: unsupported operand type(s) for -: 'str' and 'int'

handling exception การจัดการเมื่อโค้ดของเรามีปัญหา มี syntax การเขียน ดังนี้
try:
   // Protected code
except:
   // Catch block
else:
   // The finally block always executes.
การทำงาน ทำในส่วนของ try ก่อน ถ้าทำงานในส่วนนี้สำเร็จ ก็คือจบ ถ้าไม่สำเร็จ จะไปในส่วนของ except ต่อ

raising Exceptions ถ้าเปรียบเทียบกับ JAVA เหมือน throw
raise ValueError('A very specific bad thing happened')

ตัวอย่างการใช้งาน เช่น การหารด้วยศูนย์
try:
   result = input1 / input2
except ZeroDivisionError:
   print (“cannot divide by 0”)

ปล เรื่องของ OOP ขออนุญาติตัดออกในตอนนี้นะ เพราะจะยากกว่านี้อีก step นึง

... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

ในบล็อกนี้คิดว่า น่าจะครอบคลุมการเขียน python ขั้นต้นแล้วนะ
และเนื้อหาในนี้ เราเอามาลองใช้กับ ovlwegrammo ไม่แน่ใจว่าคนอ่านจะชอบอ่านแบบยาวๆ หรือสั้นๆมีละตอนมากกว่า

สุดท้าย จริงๆเรายังไม่ได้อนุญาติเพื่อเผยแพร่ไฟล์สไลด์ที่ไป workshop มา
ดังนั้น เอางี้แล้วกัน แปะลิ้งที่จำเป็นต่อการเรียน python เอาแล้วกันเนอะ
- python 3 document ฉบับ official
- การเขียน python ฉบับภาษาไทย
- codecademy เขามีสอน python ด้วยนะ ง่าย มีแบบฝึกหัดให้ทำตลอดๆ

และฝากที่เคยเขียนไว้ของ python ทั้งแปดตอนด้วยคะ ซึ่งใช้ได้บ้าง งงๆบ้าง ก็ว่ากันไป
- ep1 python : academy fantasia เอ้ยยย codecademy
ep2 python : python กับ excel
ep3 python : python กับ excel กลับไปใช้ openpyxl อย่างเดิมดีกว่า
ep4 python : สมัครเรียนที่ coursera.org + ตัวอย่าง code เขียน excel จาก .txt + แอบแจก A-Z list
ep5 python : เก็บตกของฝาก python -> datetime and split text และการวนลูป
ep6 python : understand python ไม่ได้แปลว่าคุณเข้าใจไพธอนไหม มันแปลว่า...
ep7 python : การแตกไฟล์ .zip ด้วยพี่เหลือม (extract .zip file by coding python)
ep8 python : compile python file to exe file (or user can't edit my code)

ปล. จริงๆวาปไปอยู่ในนี้แล้ว https://owlvegrammo.firebaseapp.com/

ป้ายกำกับ: ,