Posts

Showing posts with the label list

Empty Data Sets Pattern

Image
การใช้ UITableView, UICollectionView เป็นวิธีการยอดนิยม สำหรับข้อมูลที่มีลักษณะเป็นลำดับ (List) ซึ่งก็มีคำถามต่อมาว่า "ทำอย่างไรดี เมื่อไม่มีข้อมูลบน List เลย" ผู้คนมักปล่อยว่างเป็นหน้าขาวๆ ซึ่งเป็นวิธีที่ไม่ดีนักสำหรับผู้ใช้ โดยการที่ไม่มีข้อมูลบน List เลยอาจจะมาจากได้หลายสาเหตุ ไม่มีข้อมูล อาจจะเป็นการสมัครครั้งแรกและยังไม่มีข้อมูลใดๆ ไม่ได้เชื่อมต่อ Internet ดึงข้อมูลมา แล้วเกิด Error ซึ่ง App ที่ดี ก็ควรจะบอกผู้ใช้ด้วยว่า มันเกิดอะไรขึ้นดังเช่น App ดังๆ ทำกันแบบนี้ ผู้ใช้ควรจะรู้ว่าสถานะของ App เป็นอย่างไรเนอะ แล้วมันทำยังไงล่ะ ? วันนี้จะมาแนะนำ Library ตัวนึงชื่อ DZNEmptyDataSet เพื่อจัดการเหตุการณ์แบบนี้กันครับ :) โดยวิธีการใช้งาน ก็ไม่ยากเลยเพียงแค่เซต Datasource และ Delegate ให้ UITableView หรือ UICollectionView ที่เราใช้อยู่ จากนั้นก็ทำการเขียน Datasource methods เพื่อจัดการข้อความและรูปที่จะแสดงเวลาไม่มีข้อมูล (แม้กระทั่งสร้าง Custom View มาแปะเลยก็ได้) และ Delegate methods เพื่อจัดการเหตุการณ์ที่จะเกิดขึ้นกับ View ของ Empty Data Set...

List Comprehensions in Python and Ruby Way

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

[C/C++] LinkedList with Queue, Stack Implemented

Image
Data Structure สุด Classic ที่เราต้องเขียนเอง :) ถ้าต้องการทำ Dynamic List ขึ้นมาใช้ในภาษา C/C++ จากภาพเนี่ย ลักษณะของข้อมูลแต่ละตัว ก็จะเก็บ Data พร้อมกับ Pointer ที่จะเอาไว้ชี้ ว่าตัวต่อไปคือตัวไหน ? ไม่เหมือนกับ Array ข้อมูลเรียงต่อกันตั้งแต่ต้นอยู่แล้วนะครับ :) แน่นอนว่า เราสามารถเลี่ยงไปใช้ list, vector, queue, stack ... ใน C++ STL (Standard Template Library) ได้ แต่ถ้าเป็นภาษา C ล่ะ ถ้าเขาไม่ให้ใช้ STL ล่ะ ยุ่งเลย :P มาเล่นเขียนทดสอบการใช้งานกันก่อน :) แล้วค่อยไป Implement method กัน แน่นอน จะเห็นได้ว่า LinkedList ตัวนี้ทำงานกับ Integer บนเท่านั้น ดังนั้นถ้าใครอยากเอา LinkedList ไปใช้กับ Data แบบอื่นก็ต้องเปลี่ยนกันยาวเลย  ให้สังเกตุจาก method นะครับ ... เราสามารถใช้ Queue และ Stack ตามที่กล่าวไว้ในชื่อ Blog ได้ด้วย ...  การใช้ Queue ก็คือ addNode(); และ removeFromHead(); -- FIFO การใช้ Stack คือ addToHead(); และ removeFromHead(); -- FILO Implement method โดยเริ่มจาก Constructor, Destructor ก่อน ปิดท้ายด้วย Private Met...

[Android Dev] แสดงข้อมูลในรูปแบบ List ด้วย ListView

Image
ห่างหายจากการเขียน Android Development ไปนานพอควรเลยครับ .. เนื่องจากไม่ได้ลง Android ไว้ในเครื่องใหม่เลย แล้วก็ไม่มีงานอะไรที่ต้องใช้ด้วย ก็ขอซะหน่อยแล้ว วันนี้เราจะมา Represent Data กันในรูปแบบของ List โดยใช้ ListView บน Android ซึ่งไม่ยากเลยครับ ... ซึ่งเมื่อทำได้แล้ว ก็จะได้ผลลัพธ์ประมาณนี้ ซึ่ง ListView ที่เห็นจะรองรับข้อมูลจำนวนเท่าไรก็ได้ ... เพราะ ListView สามารถ Scroll ได้อยู่แล้ว ... Code ในส่วนของ UI ก็มีแค่นี้ครับ ... แค่ใส่ ListView วางลงไปบน Layout ของเรา... ในส่วนของ Java Code ส่วนแรกก็จะเป็นการประกาศตัวแปร ListView แล้วเชื่อมกับตัว UI จากนั้นก็ Init Data ของข้อมูลขึ้นมา ในที่นี่ผมเล่นกับชื่อของระบบปฏิบัติการต่างๆ จากนั้นก็ทำการสร้าง ArrayAdapter จาก String Array ที่ได้สร้างขึ้นมา ซึ่ง ArrayAdapter จะทำการดัดแปลงโครงสร้างข้อมูลปกติเพื่อให้ใช้กับ UI ต่างๆ ของ Android ได้ ใน Spinner ก็ใช้นะครับ :) แล้วก็กำหนด Adapter ให้กับ ListView ด้วย ArrayAdapter ที่สร้างขึ้นมา ผมใส่เทคนิคการ Sort ArrayAdapter ไว้ให้ด้วยนะครับ เผื่อใครต้องการนำไปใช้งาน :) ...