วิธีดูมิตรภาพระหว่างเรากับเพื่อน ใน facebook.com ว่าหนิดหนมกันแค่ไหน

Case study of friendship

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

หนิดหนมกันแค่ไหน ทาง facebook.com มีคำตอบมาทั้งตัวเลข และภาพ และโพสต์

ถ้ามีเพื่อนประมาณ 3600 คน ก็จะได้รับแจ้งวันเกิดเพื่อนประมาณวันละ 10 คน
เป็นการเอา [จำนวนเพื่อน] หารด้วย [จำนวนวันใน 1 ปี] = [จำนวนเพื่อนต่อวัน]

วันนี้มีวันคลัายวันเกิดของเพื่อนหลายคน
และ facebook.com มีบริการดูมิตรภาพของเรากับเพื่อน
อาทิ ajburin กับ harncharnchai
ก็จะเปิดได้ผ่าน link : facebook.com / friendship / [me] [friend]
ลองตรวจสอบดูพบว่า
เราเข้าไปส่งดูมิตรภาพของเพื่อนของเราคนหนึ่งกับของเพื่อนอีกคนหนึ่งได้

อาทิ
บุรินทร์ กับ อติชาต มีเพื่อนร่วมกัน 290 คน
https://www.facebook.com/friendship/ajburin/harncharnchai/

หรือ
บุรินทร์ กับ ปู่เก๋ มีเพื่อนร่วมกัน 6 คน
https://www.facebook.com/friendship/ajburin/gthaiall/

หรือ
บุรินทร์ กับ ขวัญชนก มีเพื่อนร่วมกัน 394 คน
https://www.facebook.com/friendship/ajburin/100000864060918/

หรือ
นสพ.แมงมุม กับ นิเวศน์ มีเพื่อนร่วมกัน 572 คน
https://www.facebook.com/friendship/mangmumnewspaper/nivate2012/

 

ใช้ bootstrap ทำเมนูไว้ใช้งาน

Bootstrap อาจแปลว่า สิ่งที่ช่วยทำให้ง่ายขึ้น หรือ สิ่งที่ทำได้ด้วยตัวเอง

Bootstrap คือ Front-end Framework ที่ช่วยพัฒนาเว็บไซต์ได้เร็วขึ้น ง่ายขึ้น
ซึ่ง Bootstrap มีเครื่องมือหลักให้ 4 อย่าง คือ
1) Scaffolding หรือ Grid system ช่วยจัด column และ row บน screen เพื่อจัด Layouts
2) Base CSS ช่วยจัด form, table, icons หรือ buttons
3) Components ช่วยจัด Navbar หรือ Pagination หรือ Progress bars หรือ Media object
4) JavaScript ช่วยจัด Dropdown, Tab, Popover, Collapse, Carousel

มีตัวอย่างการเรียกใช้ที่ http://www.thaiall.com/web2

เมนูคอมพิวเตอร์ ก็คล้ายกับเมนูอาหาร มีตัวเลือกมากมายให้เลือกสั่ง ต้ม ผัด แกง ทอด ไอศครีม เมนูคอมพิวเตอร์ที่คุ้นตาก็จะมี file, edit, view, help เป็นต้น นักพัฒนา (Developer) จะเลือกเครื่องมือจัดเมนูให้ผู้ใช้ (User) เข้าถึงบริการต่าง ๆ ที่พัฒนาขึ้น ต่อไปเป็นตัวอย่างการทดสอบ menu  ทั้ง 6 แบบ ที่ใช้ bootstrap กับ Java script ข้างนอก และเขียนเอง
ซึ่งแชร์ source code 6 แบบ

ขั้นตอนการทดสอบ ให้เห็นภาพเมนู มีดังนี้
1. download clone (repository)
จาก ใน https://github.com/thaiall/programming-page
ได้แฟ้ม programming-page-master.zip
เมื่อวันที่ 28 กันยายน 2560 มีขนาด 4,713,347 bytes

2. start โปรแกรม apache ใน xampp

3. unzip แฟ้มในข้อแรก
ได้ห้อง programming-page-master
แล้วย้าย folder นี้ไปไว้ใน c:\xampp\htdocs

4. เปิด menu แบบที่ 1
ด้วย http://localhost/programming-page-master/php/menu01.php
จนถึง menu06.php
ซึ่งทั้ง 6 แบบทำงานแบบ client-sided script

https://gist.github.com/thaiall/8e2a113c7cde54d4e18c217ba3dd8dae

 

5. พบว่า menu01.php – menu03.php ใช้ bootstrap

6. พบว่า menu04.php ใช้ javascript ของ DHTML Menu version 3.3.19

7. พบว่า menu05.php ใช้ jqueryui.com

8. พบว่า menu06.php เขียน javascript และ css ใช้เอง

มีหน้าตาของ Menu ทั้ง 6 แบบ ดังนี้

menu01.php
menu01.php
menu02.php
menu02.php
menu03.php
menu03.php
menu04.php
menu04.php
menu05.php
menu05.php
menu06.php
menu06.php
signin.php
signin.php

 

ภาพชุดนักศึกษารักการอ่าน ประจำปีการศึกษา 2560 ภาคเรียนที่ 1

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

รักการอ่าน : http://www.thaiall.com/readbookt

แชร์ผ่าน photos google
ที่ https://photos.app.goo.gl/uJjXqkKvoZalZkim2

แชร์ผ่าน fan page
ที่ https://www.facebook.com/pg/ajarnburin/

 

รักการอ่าน
รักการอ่าน

การใช้บริการ Photos ของ Google.com เพื่อ Share Album สำหรับผู้มีบัญชีของ gmail.com สามารถ install app เพื่อเก็บ photos หรือ Video ใน cloud storage หรือ share ทั้งแบบ photo หรือ album แล้วยังสั่งเปิดแบบ slide show ได้

คำแนะนำการใช้งาน ดังนี้ 1) Sign in : http://photos.google.com 2) แล้วอัพโหลด 78 ภาพ ผ่าน Web browser 3) แล้วเลือก Add to Album, New album, พิมพ์ชื่ออัลบั้มแล้ว click เครื่องหมายถูกที่มุมบนซ้าย มีตัวอย่าง Album ที่ share เช่น “Love to read a book (2560-1)” , “โครงการ อพ.สธ-ม.เนชั่น” , “Miss Grand 2016” หรือ “Miss Grand 2017 (PWA)” “Fanpage สวนนายบู” สำหรับ Android : download

 


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

ข้อมูลเปิด (Open Data) และเกี่ยวกับ data.go.th

ข้อมูลเปิด (open data)
ข้อมูลเปิด (open data)

Open Data

.. เคยอ่านวัตถุประสงค์ของ data.go.th แล้วก็ชื่นชม
ข้อแรก คือ ทำให้ผู้ใช้บริการทั้งภาคประชาชน ภาคธุรกิจเอกชน รวมถึงหน่วยงานของรัฐ  สามารถค้นหาและเข้าถึงข้อมูลที่มีคุณภาพของภาครัฐได้ง่าย ข้อมูลที่เปิดให้ Download จากเว็บไซต์พบว่า มีหลายรูปแบบ อาทิ excel, json และ xml แล้วบรรทัดสุดท้ายของหน้า About พูดถึง ข้อมูลเปิด ว่าจะช่วยเพิ่มประสิทธิภาพของการให้บริการ แล้วยังช่วยลดค่าใช้จ่ายของหน่วยงานราชการได้

ท่านที่สนใจก็เข้าไปสืบค้นข้อมูลกันได้นะครับ
ที่ https://data.go.th/About.aspx

สำนักงานรัฐบาลอิเล็กทรอนิกส์ (องค์การมหาชน) (สรอ.)

[เพิ่มเติม]
เกี่ยวกับข้อมูล Data ผมก็สนใจจึงทำโฮมเพจไว้หลายหน้าที่เกี่ยวข้อง ดังนี้

http://www.thaiall.com/xml

http://www.thaiall.com/ajax

http://www.thaiall.com/lampang/index.php

http://www.github.com/thaiall

[Top Open Data]

ข้อมูลที่ถูก Download มากที่สุด คือ พิกัดตำบลจาก data.go.th
วันที่ 25 กันยายน 2560 พบมีคนเข้าชม จำนวนการเข้าชม 46423 ครั้ง
เป็นข้อมูลขอบเขตการปกครอง ของ กรมการปกครอง

ได้แฟ้มพิกัดตำบลของทั้งประเทศ
จำนวน 7768 รายการ จาก data.go.th มาในแฟ้ม tambon.xlsx
แล้วแปลงเป็น csv แต่เรียงตามรหัสตำบลเก็บในแฟ้ม tambon.csv
เลือกเฉพาะลำปางได้ 97 ตำบล เก็บในแฟ้ม tambon_lampang.csv
นับจาก tambon.xlsx ด้วย pivot table ในลำปางมี 97 ตำบล
สรุปว่ายืนยันข้อมูลว่าตรงกับรายการข้อมูลที่มีจริงใน tambon_lampang.csv
ตรวจตำแหน่งของ ต.ศาลา อ.เกาะคา จ.ลำปาง
พบว่า latitude,longitude ไปตกกลางทุ่งนา
หลังศูนย์แสดงสินค้าเซรามิกและหัตถอุตสาหกรรม จังหวัดลำปาง
ห่างทางหลวงไปหลายร้อยเมตร

ทั้งหมดเก็บไว้ที่ https://github.com/thaiall/lampang

l3nr.org เป็นห้องเรียนกลับทาง (Flipped Classroom) ที่ไม่เปิดรับสมาชิกใหม่ไปซะแล้ว

ชอบเว็บไซต์ l3nr.org และแนะนำให้นักศึกษาเข้าใช้บริการเป็นเวทีปล่อยของบ่อยครั้ง เพราะเว็บไซต์นี้เป็นแหล่งปล่อยของสำหรับนักเรียนนักศึกษา ดังคำสำคัญ หรือนิยาม ที่พบในเว็บไซต์ว่า L3nr คือ “เกมส์การเรียนรู้” หรือ “เกมส์กลับหัว เพื่อห้องเรียนกลับทาง (Flipped Classroom)” และ “การจัดการเรียนการสอนแบบห้องเรียนกลับทางนั้น ผู้สอนจะจัดกิจกรรมหลากรูปแบบโดยใช้เครื่องมือหลายอย่างทั้งออนไลน์และออฟไลน์ เพื่อให้ผู้เรียนเกิดการเรียนรู้ตลอดเวลา ทั้งในห้องเรียนและนอกห้องเรียน แบบกลุ่มและแบบรายบุคคล

แล้วปี 2017 จะให้นักศึกษาไปปล่อยของกันที่นี่เหมือนเดิม ก็มีนักศึกษาเข้าไปสมัครสมาชิก แล้วพบข้อความว่า “ระบบ L3nr ในขณะนี้ไม่เปิดรับสมาชิกใหม่แล้วค่ะ กรุณาใช้งานระบบ ClassStart ซึ่งเป็นระบบจัดการการเรียนการสอนออนไลน์ที่สมบูรณ์ที่สุดของไทยในปัจจุบัน” สำหรับเหตุการณ์ที่ไม่รับสมาชิกใหม่ของเว็บไซต์นั้น เคยเกิดขึ้นกับหลายเว็บไซต์มาแล้ว อาทิ geocities.com หรือ thai.net เป็นต้น ซึ่งแต่ละเว็บไซต์ก็มีเหตุผลที่ต้องปรับนโยบายไปเช่นนั้น ซึ่งผู้ดูแล L3nr.org มีอีก 2 เว็บไซต์หลักที่ต้องดูแล และดำเนินการอย่างต่อเนื่องต่อไป ได้แก่ GotoKnow.org คือ เว็บไซต์สำหรับคนทำงานแลกเปลี่ยนเรียนรู้ บันทึกประวัติศาสตร์ชีวิตและการทำงาน ครู อาจารย์ คนทำงานภาครัฐและภาคสังคม และ ClassStart.org คือ ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต จัดการการเรียนการสอนได้ง่าย ไม่ต้องติดตั้งระบบเอง เข้าถึงได้ทุกที่ทุกเวลา

อ่านนิยามของเว็บไซต์ L3nr.org เสร็จ .. ทำให้นึกถึงน้อง Kittichai Mala-in FramyFollow (ป.6) ที่ใช้ medium.com เป็นเวทีแชร์ประสบการณ์ใน โรงเรียนบ้านง่อนหนองพะเนาว์มิตรภาพที่ 126 ตั้งแต่สมัย ป.3 ที่ทำ root Smartphone ของ True ผ่าน King Root พอขึ้น ป.4 กับ ป.5 สร้างเกมด้วย RPG Maker VX เดี๋ยวนี้ ป.6 สนใจ Dream Weaver CS5 กับ CSS ได้ความรู้เยอะเลยจาก thaicreate.com เขียนได้ดี น่านำไปแชร์ต่ออย่างมาก

แล้วนึกถึงหนังสือ ห้องเรียนแห่งอนาคต เปลี่ยนครูเป็นโค้ช ของ อ.วิริยะ ฤาชัยพาณิชย์ มี quote ที่หน้าปกว่า “ฉีกกฎการเรียนการสอนแบบเดิม ๆ เพิ่มหลังการเรียนรู้ให้เด็กไทย
ด้วยห้องเรียนที่สร้างสรรค์อย่างแท้จริง
” แล้วห้องเรียนกลับทางก็เป็นห้องเรียนที่สร้างสรรค์อีกรูปแบบหนึ่ง

สรุปว่า .. มีเวทีมากมายที่เป็นห้องเรียนกลับหัว ที่ให้นักเรียนนักศึกษาใช้เป็นเวทีปล่อยของ จะปล่อยกันเองตามอำเภอใจ ปล่อยตามประเด็นที่ครูอาจารย์มอบหมาย หรือปล่อยเพื่อประกวดแข่งขัน ก็ทำได้ตามสะดวก อย่าใช้แต่เฟสบุ๊กโปรไฟร์หรือแฟนเพจอย่างเดียว ก็แนะนำให้ไปใช้ในหลายแหล่ง มีเวทีมากมายที่เปิดรับเป็น public อย่างแท้จริง อาทิ  1) blogger.ccom, 2) wordpress.com, 3) oknation.net=oknation.nationtv.tv, 4) medium.com, 5) dek-d.com, 6) gotoknow.org, 7) github.com, 8) FreeWebHosting อีกมากมาย และนี่ยังไม่นับรวมเวทีมัลติมีเดียทั้ง คลิ๊ปวีดีโอ เสียง ภาพ ซอฟต์แวร์ หรืออีบุ๊ค เป็นต้น

ใน 7 sites แรกที่แนะนำไปด้านบน
มี WordPress.com ที่ชอบมากเป็นพิเศษ เพราะ export post ที่เลือกแบบ published ไปให้เพื่อนที่ลง WP ไว้ในระบบ แล้ว import แฟ้ม XML ได้เลย เรียกว่า ปล่อยของไว้ที่ WP วันดี คืนดี อยากเปลี่ยนเวที ก็ Export ไปที่อื่นได้เลย

นี่ผมก็ export จากไซต์ของ wordpress.com ได้แฟ้ม xml ไปฝากไว้กับ github.com
ที่ https://github.com/thaiall/programming-page/tree/master/wordpress

 

ก่อนหน้านี้ก็มีเว็บไซต์ดี ๆ อย่าง Wonkdy.org
เขียนโดย ดร. จันทวรรณ ปิยะวัฒน์ ร่วมเขียนโดย ดร. ธวัชชัย ปิยะวัฒน์
http://www.usablelabs.org
ข้อมูลจาก https://web.archive.org/web/20150908071932/https://www.wonkdy.org/pages/101

ในวันที่เจ้าต้นไม้เข้าเรียนประถมหนึ่ง แม่ถามพ่อว่า “รู้ไหม ลูกเราจะต้องเรียนอะไรบ้าง?”

แน่นอนว่าพ่อตอบไม่ได้และนั่นคือจุดเริ่มต้นของ Wonkdy Academy (หวังดี อคาเดมี)

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

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

นอกจากนี้พ่อและแม่ยังชักชวนพี่น้องเพื่อนฝูง ทั้งในวงการการศึกษาที่พ่อและแม่ทำงานอยู่และคนอื่นๆ ที่มีความตั้งใจเดียวกัน เพื่อร่วมกันแบ่งปันเนื้อหาดีๆ ให้ทุกคนสามารถตอบคำถามเดียวกันที่แม่ถามพ่อได้ว่า “เรารู้ว่าลูกเราเรียนอะไร”

หวังดี อคาเดมี เป็นระบบเพื่อสนับสนุนการเขียนร่วมกันในลักษณะเดียวกันกับ Wikipedia โดย หวังดี อคาเดมี พยายามพัฒนาให้ใช้งานได้ง่ายที่สุด สอดคล้องกับการใช้งานของคนไทย และเหมาะกับเนื้อหาด้านการศึกษามากที่สุด

โครงการ หวังดี อคาเดมี ให้บริการโดย ศูนย์พัฒนานวัตกรรมเพื่อการจัดการความรู้และการเรียนรู้ คณะวิทยาการจัดการ มหาวิทยาลัยสงขลานครินทร์

ส่วนคำว่า “หวังดี” นั้นมาจากคำแปลของคำว่า “ปิยะวิชญ์” (Piyawish) ที่เป็นชื่อจริงของเจ้าต้นไม้ ที่พ่อและแม่พยายามคิดโดยเอาบาลีบวกสันสกฤตบวกอังกฤษเพื่อเป็นชื่อของ “ดช.หวังดี” คนดีของพ่อและแม่นั่นเอง

ปล. เรารู้ความหมายของคำว่า wonk, wonky, (และ wank) ในภาษาอังกฤษดีจึงตั้งชื่อเว็บนี้ว่า “wonkdy” เพื่อเป็นอนุสรณ์ถึงระบบการศึกษาของโลกนี้ที่พ่อกับแม่ได้เจอมา และด้วยความหวังว่าลูกคงได้เจอสิ่งที่ดีกว่า

 

อยากแก้ไข source code ของเราในเครื่องเราที่อยู่ใน Github.com เริ่มจาก pull แล้วค่อย push

ทบทวนกันนิดนึง  .. ก่อนไป clone vscode ของ microsoft
ปัจจุบันมีบัญชีใน Github.com แล้วอยากแก้ไข code ทั้งของเรา และของเขา บนเครื่องคอมพิวเตอร์ของเรา ถ้าเป็นของเราก็ push กลับไปได้ เริ่มจาก pull มาในเครื่องเรา พอแก้ไข code เสร็จ ก็ push กลับเข้าไป

clone vscode
clone vscode

มีขั้นตอนดังนี้

1. ติดตั้ง git หา Download
ได้ที่ https://git-scm.com/download

2. เข้า cmd หรือไม่ก็ใช้ Atom editor เป็นอีกทางเลือกนึง
สร้างห้องเตรียมรับ repository ที่จะดึงมาแก้ไข
อาทิ d:\git\mygitfriends
แล้ว cd d:\git\mygitfriends

3. พบห้อง DOS> หลัง run cmd
เคยเล่าขั้นตอน 9 ข้อใน http://www.thaiall.com/blog/burin/8875/
หรืออ่านเพิ่มเติมที่ https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
วันนี้สั้นหน่อย แบบรวบรัด
DOS> git init
DOS> git config –global user.email “test@test.com”
DOS> git config –global user.name “test”
DOS> git remote -v เพื่อดูว่าเชื่อมต่อทิ้งไว้แล้วหรือไม่ จะได้ไม่ซ้ำ เช่น burin
DOS> git remote remove burin แค่นี้ก็ล้างข้อมูลที่เคยเชื่อมต่อไว้ แต่ folder ไม่หายนะครับ
DOS> git remote add mytest https://github.com/thaiall/mygitfriends.git
DOS> git pull mytest master ก็ดึง branch:master ตามลิงค์ข้างต้นมาในเครื่อง ต่อไปก็เรียก mytest
ข้อมูลมาเยอะเลย ไม่ถาม user & password เพราะเป็น public และมีรูปนึกศึกษาเพียบเลย
DOS> notepad README.md
แล้วเพิ่ม This is my test on 16 september 2017. ต่อท้ายไปอีก 1 บรรทัด
เอาละ Mission complete แล้วนะ ต่อจากนี้ก็ push ล่ะ
DOS> git add README.md
เพื่อให้ git รู้ว่ามีรายการเปลี่ยนแปลง คือ “แฟ้มนี้นะ ที่ส่งเข้าประกวด”
DOS> git commit -m “i want to write lesson at http://www.thaiall.com/blog
DOS> git push -u mytest master
ผมเลิกใช้คำว่า origin จะได้ไม่สับสน เพราะเราใช้อะไรก็ได้ ไม่ต้อง origin
จากนี้ก็จะลบข้อมูลการทดสอบทิ้งหละครับ เพราะ Mission complete
เนื่องจาก login github.com ไว้แล้ว เมื่อ push ก็ไม่ถาม user & password อีก

4. ถ้าต้องการ project ใน github.com ไม่ต้อง pull ก็ได้
ใช้ clone เพื่อ download ลงมาเลย แบบนี้แก้แล้ว push กลับไม่ได้นะครับ
เริ่มต้นก็ลบทุกอย่างใน current directory ก่อน clone อะไรมาได้ ก็จะได้รู้

4.1 แบบ pull
เริ่มจากกำหนดชื่อ branch อาทิ mytest ในเครื่องเรา ที่จะเชื่อมกับ branch master
แบบนี้คล้ายกับ clone แต่หวังจะ push ถึงได้ใช้ pull
DOS> git init
DOS> git remote add mytest https://github.com/thaiall/mygitfriends.git
DOS> git pull mytest master
มาเลย

4.2 แบบ clone ไม่ต้องอะไร สั่ง git clone ตามด้วย url ก็มาเลย
ไม่ต้องสั่ง git init ก็ได้ download มาเลย แล้วสร้าง Folder แยกให้
DOS> git clone https://github.com/schacon/ticgit
DOS> git clone https://github.com/thaiall/mygitfriends
DOS> git clone https://github.com/toyoshim/SyobonAction
DOS> git clone https://github.com/Microsoft/vscode
ถ้ารอ download นาน แล้วอยากยกเลิก ก็กด Ctrl+C หรือ close window

น้องวงศ์แชร์แนวคำถาม ในกลุ่มโปรแกรมเมอร์ไทย ลองแกะ for ดู

ตอน i=9 ไล่ ascii ผิดครับ ภาพนี้แก้ไข
ตอน i=9 ไล่ ascii ผิดครับ ภาพนี้แก้ไข

<introduction>
อ่านโจทย์ที่น้อง Wongsakorn แชร์มาในกลุ่มสมาคมโปรแกรมเมอร์ไทย
บอกว่าเป็นแนวข้อสอบที่ ม. เห็นแล้วก็สนใจ สมาชิกเข้าไปเม้นท์เพียบ
https://www.facebook.com/groups/ThaiPGAssociateSociety/
มาโปรแแกรมเดียวแต่มี 12 คำถาม
เท่าที่ดูเป็นภาษา C ปรับเพิ่ม include แล้วเอาไปลองที่ jdoodle.com ได้
https://www.jdoodle.com/c-online-compiler
</introduction>

https://gist.github.com/thaiall/3f682a040fa1ebdd5d68dcbdede05750

<question>
คำถาม 12 ข้อมีดังนี้
1. loop for ทำงานกี่รอบ
2. ถ้า i=9 แล้วค่า t1 คืออะไร
3. ถ้า i=9 แล้วค่า s2[9] คืออะไร
4. ถ้า i=5 แล้วค่า t1 คืออะไร
5. ถ้า i=5 แล้วค่า t2 คืออะไร
6. ถ้า i=1 แล้วค่า t1 คืออะไร
7. ถ้า i=1 แล้วค่า t2 คืออะไร
8. ถ้า i=1 แล้วค่า s2[1] คืออะไร
9. ถ้าออก for แล้วค่า i คืออะไร
10. ถ้าออก for แล้วค่า sum คืออะไร
11. ถ้าออก for แล้วค่า s1[1] คืออะไร
12. ถ้าออก for แล้วค่า s2[7] คืออะไร
</question>

<process>
1. ดู code แล้วก็ต้องลองนำไป compile
เพราะถ้าตอบแล้วก็อยากพิสูจน์คำตอบ ว่าใช่หรือไม่
สุดท้ายแล้ว ผมก็ไม่ได้แก้ code ให้เฉลยตามโจทย์
เพราะดูผลจาก excel ก็น่าจะได้คำตอบครบแล้ว
แต่อาจนับผิดตำแหน่งใน Ascii table นั่นก็เป็น human error หละครับ

2. ลอง code ภาษา C
ที่ https://www.jdoodle.com/c-online-compiler

3. source code ไม่ได้มีเฉพาะ while, for และ variable
แต่มี function เข้ามาเกี่ยวข้อง ตัวแปรแบบ Array of character
และการตรวจสอบค่าก็เกี่ยวกับ Ascii table ชัดเจน
https://www.cs.bu.edu/teaching/cpp/string/array-vs-ptr/

4. ค่าของ Array of character และ strlen
ทดสอบ code กันก่อน ไปดู code จริง

#include <stdio.h>
 #include <string.h>
 void main() {
 char var1[] ="abcdef"; // strlen คืนค่า 6
 char var2[5] = "abc"; // size of the array is determined at compile-time
 char var3[5] = {'a', 'b', 'c', '\0'};
 char var4[3] = "abc";
 printf("%zu\n %zu\n",strlen(var1),strlen(var2)); //6 3
 printf("%zu\n %zu\n",strlen(var3),strlen(var4)); //3 3
 printf("%zu\n %s\n %c\n %c\n",strlen(var3),var4,var4[0],var4[2]); //3 abc a c
 // http://www.cplusplus.com/reference/cstdio/printf/
 // var1 = "abc"; can not do this for array of character in c language
 }

5. ฟังก์ชัน strcmp กับ strcat กับ strcpy
ทดสอบ code กันก่อน ไปดู code จริง
https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm

void main() {
 #include <stdio.h>
 #include <string.h>
 void main() {
 char var1[] ="abcd";
 char var2[5] = "abc";
 char var3[5] = "ABC";
 char var4[2] = {'a','\0'};
 char var5[2] = {'0','\0'}; //
 if(strcmp(var1,var2)>0) printf("true"); else printf("false"); // true : [3] 100 > 0
 if(strcmp(var2,var3)>0) printf("true"); else printf("false"); // true : [0] 97 > 65
 if(strcmp(var3,var4)>0) printf("true"); else printf("false"); // false : [0] 65 > 97
 if(strcmp(var4,var5)>0) printf("true"); else printf("false"); // true : [0] 97 > 30
 if(strcmp(var5,var1)>0) printf("true"); else printf("false"); // false : [0] 30 > 97
 strcpy(var4,var2); // var4 replaced by var2
 if(strcmp(var2,var4)==0) printf("true"); else printf("false"); // true : [0] abc = abc
 printf("%s %s",var2,var4); //abc abc
 strcpy(var5,var1); // var5 replaced by var1
 printf("%s %s",var1,var5); //abcd abcd
 strcat(var3,var4); // var3 = var3(ABC) + var4(abc) = ABCabc
 printf("%s %s",var3,var4); //ABCabc abc
 }

6. โปรแกรมนี้ใช้ mod ด้วย
ทดสอบ code กันก่อน ไปดู code จริง

char var1[] ="abcd";
printf("%i",var1[0] % 2); // 1
printf("%i",var1[1] % 2); // 0
printf("%i",var1[2] % 2); // 1

ในโจทย์ต้อง mod y คือตัวที่ 25 ในภาษาอังกฤษ น่าจะ mod 2 แล้วได้ 1 นะ

7. มีคำถามเรื่อง i ที่ออกจาก for แล้ว
ภาษา c จะคำนวนค่า i แล้วเปรียบเทียบ
ดังนั้นค่า i จะเป็นค่าที่อยู่นอกเงื่อนไขของ for

int i;
for(i=5;i>0;i=i-2) {}
printf("%i",i); // -1

8.มีคำถามหนึ่งที่เค้าไม่ได้ถาม แต่ผมสงสัย
คือ char ที่ไม่มีค่า หาก -1 จะได้เท่าใด คำตอบ คือ -1 เหมือนเดิม
เพราะค่าที่จองไว้ default เป็น 0 หมด
แต่ถ้าพิมพ์ค่าที่เกินจากที่จอง โปรแกรมไม่ error แต่เอาที่ไหนมาก็ไม่รู้
เช่น v[20] ออกมาเป็น 55 นั่นหละครับ

char v[10] = "abcde";
v[9] = v[9] - 1;
printf("%i %i %i %i %i",v[1],v[5],v[6],v[9],v[20]); // 98 0 0 -1 55

9. ถ้าเข้าใจฟังก์ชันทั้ง 4 แล้วก็เหลือแต่วน loop
ปกติก็จะทำเป็นตารางแบบ excel มี header แยก column ตามตัวแปร หรือตามชอบ
row ก็เป็นค่าของ i เท่าที่ดู code ก็ไม่เปลี่ยนค่า i กระทันหัน วนจนจบเลย
จากนี้ผมจะไปเปิด excel ช่วยล่ะครับ

10. สรุปว่าคำตอบทั้งหมด ผมไม่ได้ตอบนะ
แต่ดูจาก excel ที่ได้จากการไล่ค่าใน loop
ซึ่งเก็บเรื่องนี้ไว้ไปเล่าต่อ หากมีโอกาสน่ะครับ
เพราะผมเล่า for ซ้อน for กับ mod แค่นั้นก็เหนื่อยล่ะ
</process>

ภาพนี้ไล่ลำดับ i=9 ผิด ทำภาพมาใหม่อยู่ด้านบน
ภาพนี้ไล่ลำดับ i=9 ผิด ทำภาพมาใหม่อยู่ด้านบน

MDB Viewer Plus สำหรับเปิดแฟ้ม .mdb หาก Microsoft Access รุ่นใหม่เปิดไม่ได้

MDB Viewer Plus คือ โปรแกรมช่วยในการเปิดแฟ้ม .mdb ที่สร้างมาจาก Microsoft Access 97 สามารถ download รุ่น Portable มาใช้ได้
ใช้โปรแกรมนี้เปิด NorthWind.mdb โดยคลิ๊ก Menu bar, File, Open แล้วเลือกแฟ้มก็จะเปิดตารางทั้งหมดมาให้เห็น สามารถเลือก Menu bar, Table, Export table เป็นแฟ้มแบบ .csv หรือ .xml เป็นต้น หรือ Menu bar, Table, Generate SQL – Create และทดสอบ Execute คำสั่ง SQL ได้

MDB Viewer Plus is a freeware viewer plus editor for opening Microsoft Access MDB and ACCDB database files. It does not need to be installed to run. It uses Microsoft Data Access Components (MDAC) which is installed as part of Windows.
http://www.alexnolan.net/software/MDBPlus.zip

mdb viewe rplus
mdb viewe rplus

http://www.thaiall.com/project/projectdbnwind.htm
http://www.alexnolan.net/software/mdb_viewer_plus.htm

ยัดเยียดกรอบความคิดเรื่อง “อ่านออก เขียนได้” เข้าห้วเด็ก อยากให้อยู่ในกรอบนี้

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

มนุษย์ต้องอ่านออกเขียนได้ เข้าไปในหัวเด็ก ๆ

พบว่า มีความพยายามแก้ไขด้วยวิธีการต่าง ๆ
อาทิ ครูไม่พอ ก็ไปหาครูมาเพิ่ม
เพื่อยัดกรอบความคิด (Framework) เรื่องอ่านออกเขียนได้ เข้าไปในหัวเด็ก ๆ

เด็ก ๆ บางทีก็คิดนอกกรอบนี้นะครับ
(เคยดูหนังเรื่อง คิดถึงวิทยา ที่โรงเรียนเรือนแพน่ะครับ)

 

มีกรอกความคิด อยากให้เด็กอ่านออกเขียนได้
มีกรอกความคิด อยากให้เด็กอ่านออกเขียนได้

http://www.kruwandee.com/news-id35908.html
https://www.facebook.com/photo.php?fbid=10155654550518895&set=a.10150933077238895.437258.814248894&type=3&theater

ทุกวันนี้เจอพวกตีกรอบมามากมาย
การตีกรอบความคิดมีความพยายามกันเยอะครับ
ดูหนังหนึ่งเรื่อง อ่านข่าวหนึ่งย่อหน้า ผมก็โดนยัดความคิดเข้าสมองมาล่ะ
นี่ไปดูหนังเรื่อง “สิ่งเล็ก ๆ ที่เรียกว่ารัก
พอดูเสร็จเท่านั้นหละ “รักแฟนขึ้นมาเลย
หรือ
ดูโฆษณาผ้าอนามัย ดูเสร็จ “อยากใส่ผ้าอนามัยเลย
โดนล้างสมองมาเรียบร้อย แต่เอ๊ะ ผมไม่ใช้ผ้าอนามัยนี่นา

ทุกวันนี้ก็ตีกรอบความคิดให้นักศึกษาของผมอยู่
ยัดความคิดเรื่อง
อ่านโปรแกรมออก
เขียนโปรแกรมได้
ก็ไม่รู้จะยัดความคิดพวกนี้ได้ไหม หรือพวกเขามีกรอบความคิดเป็นของตนเอง
.. คืออะไรนะ

ติดเกมมาริโอ้แมว ตอนที่ 3 ทำให้แมวจาก github ดิ้นด้วย MinGW บน Msys (แบบไม่ build SDL เอง)

Github นี่ดีนะครับ ยิ่งค้น ยิ่งเจออะไรอีกเยอะ
Github นี่ดีนะครับ ยิ่งค้น ยิ่งเจออะไรอีกเยอะ

ที่มาของเรื่อง
พบรหัสต้นฉบับเกมมาริโอ้แมว ที่ใช้ mouse ควบคุมตัวละครแมวกระโดดดึ๋ง ๆ ตอนนี้ต้องการเพียงนำ Source code มา compile, link แล้วก็ run ไม่คิดจะแก้ หรือปรับ code หากไม่จำเป็นจริง (ที่ต้องแก้ code เพราะ compile ไม่ผ่าน) และใน code ใช้ SDL (Simple DirectMedia Layer) เป็นพระเอกเรื่อง Media ซึ่งเป็น package ที่เก่ามาก (ราว 5 ปีแล้ว) ไม่ได้ใช้ SDL2 ซึ่งใหม่กว่า และ SDL ส่วนใหญ่ก็มี release ประมาณปี 2013 หรือก่อนนั้น .. สรุปว่าพบปัญหาก็ค่อย ๆ แก้ไขไปทีละเรื่อง

lesson การใช้ SDL เขียนเกม ละเอียดเลย
lesson การใช้ SDL เขียนเกม ละเอียดเลย

ในตอนหน้าคิดจะเล่าเรื่อง MinGW-W64 ตอนที่แล้วใช้ Cygwin
แต่ตอนนี้เล่าเรื่องใช้ MinGW ที่ติดตั้ง package msys มีเรื่องเล่าดังนี้

1. เลือกเครื่องมือแปลเกม
พบ Code เกม Cat mario ภาษา C++ เขียนโดยคนญี่ปุ่น
แชร์ใน Github.com นำมาลอง compile ด้วย GCC
เลือกใช้ MinGw (Minimalist GNU for Windows) เพราะเป็น GCC บน Windows
รุ่นที่ให้ Download เลือก mingw-get-setup.exe
Modified 2013-10-04 – version 0.6.2-beta-20131004-1
https://sourceforge.net/projects/mingw/files/Installer/
โปรแกรมแนวเดียวกันมีอีกหลายโปรแกรม อาทิ MinGW-W64 หรือ MSys2

download mingw_get 2013
download mingw_get 2013

2. เลือก package ระหว่าง install มีให้เลือกมากมาย
แต่ถ้าจะ compile เกมด้วย gcc ก็เลือกที่จำเป็นเพียงไม่กี่ตัว
เริ่มจากเลือกห้องลงโปรแแกรมใน c:\MinGW
และมี package 3 ตัวหลักดังนี้

- mingw-developer-toolkit
- mingw32-gcc-g++
- msys-base
mingw package
mingw package

3. หลังติดตั้งเสร็จ ก็ไป download รหัสต้นฉบับมาเตรียม compile
ก็ download เกมจาก https://github.com/angelXwind/OpenSyobonAction
แล้วผมก็นำ .cpp จำนวน 3 แฟ้มมาแก้ไข
เพราะรุ่นของ g++ ที่ใช้ในปัจจุบันเป็นรุ่นใหม่กว่าที่ผู้พัฒนาคนก่อนใช้เมื่อหลายปีก่อน
ทำให้ต้องแก้ทั้ง main.cpp loadg.cpp และ dxlib.gcc
และต้องเตรียมแฟ้มเข้าห้อง include, lib, bin(sdl-config) และ dll(.exe)
หลังเตรียม และทดสอบ ก็ upload ทั้งหมดเข้า repository
ที่ fork มาที่ https://github.com/thaiall/OpenSyobonAction
สรุปว่าท่านที่สนใจก็จะได้เห็นทั้งรุ่นก่อนปรับปรุง และรุ่นปรับปรุง

4. ใน MinGw มี msys ที่กำหนดให้เห็น G++ มาแล้ว
เริ่มต้นเข้า shell prompt หรือ bash
ด้วยการ run C:\MinGW\msys\1.0\msys.bat
ซึ่ง msys จะกำหนด config ให้รู้จักกับ G++ ที่ติดมากับ MinGWแล้ว
ไม่ได้อาศัย Path ของ Windows
ดังนั้นการกำหนด path ไปมองที่เก็บ G++ ในห้องอื่นผ่าน Windows+Pause Break
เพื่อแก้ path ใน Environment variables ไม่ได้ทำให้การเห็นรุ่นของ G++ เปลี่ยนไป
แต่การเปลี่ยน path มีผลต่อการเห็นรุ่น G++ ใน MinGW-w64 เพราะลง Msys แยกได้

มี msys 2 ตัว ก็มี g++ คนละ version
มี msys 2 ตัว ก็มี g++ คนละ version

5. ไปหา SDL source code มา build (ปี 2013 หรือประมาณนั้น)
ทั้ง SDL, SDL_mixer, SDL_gfx, SDL_image, SDL_mixer, SDL_ttf, freetype
https://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz
http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.24.tar.gz
https://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.12.tar.gz
https://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11.tar.gz
https://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.11.tar.gz
https://downloads.sourceforge.net/freetype/freetype-2.8.tar.bz2 (required by SDL_ttf)

$ .\configure
$ make
$ make install
gcc ไม่มี -V แต่ configure ไม่ผ่าน พบใน config.log
gcc ไม่มี -V แต่ configure ไม่ผ่าน พบใน config.log

ก็ผ่านไปหลายตัวครับ ติดตรง SDL_mixer ที่คนอื่นก็ติดกัน
อ่านได้ที่
– https://forums.libsdl.org/viewtopic.php?t=1431&sid=1856a055ebc60448105ee35a3779c7b2
https://forums.libsdl.org/viewtopic.php?p=10686
ไปแก้แฟ้ม configure แล้ว แต่ก็ติดจุดอื่นอีก

Line 2459 จาก "$ac_compiler -V >&5"
Line 2453 จาก "$ac_compiler -V >&5"
Line 11044 จาก "$ac_compiler -V >&5"
Line 11050 จาก "$ac_compiler -V >&5"

หลังเปลี่ยนจาก -V เป็น -v ก็มีปัญหาอื่นตามมาอีก
สรุปก็ต้องยอมแพ้ ไม่ใช้ include, lib และ dll ที่ได้จากการ build เอง
แต่ไปหาคัดลอกจาก github.com ที่เค้า share ไว้มาใช้เลย แล้วก็ใช้ได้
เหมือนที่ผม share ใน github.com นั่นหละครับ แต่ผมเลือกที่ต้องใช้กับ cat mario
ไม่ต้อง install แต่ copy เข้าไปวางใน folder ที่กำหนดเท่านั้น
ปล. ก็ไปหามาลองใช้หลายแหล่งเหมือนกัน กว่าจะลงตัว

ปัญหา -V ของ configure นี้มีหลายคนพูดถึงกันในหลายโปรแกรม ลองไปอ่านกันได้
syrinx พบปัญหา -V กับ compiling with gcc 4.7.2 and autoconf 2.69
https://superuser.com/questions/846768/
monodromy พบปัญหา -V กับ gcc-4.8.2
https://bbs.archlinux.org/viewtopic.php?id=177400
Pradeep Gupta พบปัญหา -V กับ ruby บน ubuntu
https://serverfault.com/questions/580489/

6. ปัญหาการ Build ไม่ได้เกิดกับ SDL ทุกโปรแกรม
ที่ build ไม่ผ่านก็พบกับ SDL_mixer ตั้งแต่ใช้ configure และก่อนที่จะพบปัญหาใน SDL_mixer พบว่า SDL_ttf ต้องใช้ Freetype2 ก็ต้องไป download และ build ก่อนที่ SDL_mixer จะผ่านไป ไม่อัตโนมัติเหมือนที่ทำให้ cygwin และการเป็น source code รุ่นเก่า ของหลายโปรแกรม ที่ยึดโยงกับ source code ที่ได้มา (ตั้งใจไม่แก้ source code ไปตาม package รุ่นใหม่) ทำให้สงสัยว่าอีกหลายโปรแแกรมที่ make install ผ่านแล้วนั้น จะเข้ากันได้ในตอน compile หรือไม่
ปัจจุบันใช้ compiler G++ รุ่นใหม่อย่าง 6.3.0 (Dec 2016) หรือ 7.1.0 (May 2017)
https://gcc.gnu.org/releases.html
สรุปว่า ข้อ 5 กับข้อ 6 ผมเล่าปัญหาให้ฟังว่า build แล้วติด เมื่อทำใน environment นี้

build sdl_ttf แต่ถามหา freetype2 ก็ต้องไป build มาก่อน
build sdl_ttf แต่ถามหา freetype2 ก็ต้องไป build มาก่อน

7. หลังแก้ไข code ให้รับ G++ รุ่นใหม่
แล้วเตรียมสภาพแวดล้อมที่เอื้อต่อการ compile เหมือนที่ทำในข้อ 3 ได้แก่ เตรียมแฟ้มเข้าไปในห้อง include, lib, bin (แฟ้ม sdl-config) และ dll(ห้อง .exe)
– ในการใช้ compiler G++ สามารถใช้กับ cmd ได้กับโปรแกรมทั่วไป
แต่การแปลเกมนี้ ต้องใช้ sdl-config ที่ต้องใช้ ascii ตัวที่ 96 เพื่อทำงานส่วนนี้
หากใช้กับ cmd ไม่ว่าจะใช้ ‘ หรือ ” หรือ $( ก็ไม่ผ่าน
ต้องไป compile บน bash (/usr/bin/sh)
– การ compile บน bash ที่ใช้ msys มีขั้นตอนดังนี้
$ g++ -c main.cpp
$ g++ -c loadg.cpp
$ g++ -c DxLib.cpp
$ g++ main.o loadg.o DxLib.o -o SyobonAction `sdl-config –libs` -lSDL_gfx -lSDL_image -lSDL_mixer -lSDL_ttf
$ SyobonAction.exe
สรุปคือโปรแกรม SyobonAction สามารถ run ได้ทั้งใน msys, cmd และ explorer
แต่ต้องมีแฟ้ม .dll ให้พร้อมเรียกใช้ระหว่าง runtime หลายแฟ้ม
พบปัญหาว่า จะ run .exe ต้องมี .dll หลายแฟ้ม
แก้ไขด้วย การใช้โปรแกรม 7z ทำ .exe ช่วย extract ก่อน run
มีวิธีทำ installer.exe = 7z(.exe(start after extract) + *.dll + folders)
http://ntsblog.homedev.com.au/index.php/2015/05/14/self-extracting-archive-runs-setup-exe-7zip-sfx-switch/

8. สรุปอีกครั้งเรื่อง run
ในการเรียก SyobonAction.exe
จะต้องมี .dll หลายแฟ้มรองรับขณะ runtime
อีกนัยหนึ่ง .dll นี่ใช้ตอน run
อาจอยู่ห้องเดียวกันกับ .exe หรือไปอยู่ใน /system32 หรือ /syswow64 ก็ได้
ประกอบด้วย

SDL.dll
SDL_gfx.dll
SDL_image.dll
SDL_mixer.dll
SDL_ttf.dll
libpng12-0.dll
zlib1.dll

 

ปล. แนะนำบทเรียนเขียนเกม ด้วย SDL (บทเรียนของเค้าน่าสนใจ)
เรื่อง Beginning Game Programming v2.0
ที่ http://lazyfoo.net/tutorials/SDL/