จากพ่อถึงลูก “หนูอยากหัดเขียนโปรแกรม”

เมื่อสักครู่ลูกชายมาถามว่า “ถ้าจะหัดเขียนโปรแกรม แบบที่ง่ายๆ เขียนอะไรดี” ด้วยความที่เป็นโปรแกรมเมอร์ และไม่ได้เตรียมพร้อมกับคำถามประเภทนี้ไว้ จึงตอบไปตามสไตล์ว่า ภาษาอะไรก็ได้ ง่ายหมด ซึ่งแฝงความหมายนัยๆ ไว้หลายอย่าง หลังจากได้เข้าไปตั้งสติในห้องน้ำแล้ว คิดว่าน่าจะมาขยายความสักหน่อย ขอตอบให้ลูกและใครที่อาจจะสนใจเริ่มเดินตามความฝันนี้ดังนี้ครับ Continue reading

php strlen() with mbstring

mvc framework รุ่นใหม่ๆมักจะมีฟังก์ชันการทำ validate ตัวแปร ซึ่งหนึ่งในการ validate ที่มักกำหนดขึ้นมาจากการสร้าง model ก็คือ length ซึ่งภายในจะใช้ strlen() และทำให้เกิดปัญหากับเนื้อหาภาษาไทย Continue reading

เรียกน้ำย่อยกับ android

รู้จักกับ Android

android เป็นระบบปฏิบัติการบนอุปกรณ์พกพา ที่ถูกสร้างโดยกลุ่ม OHA (Open Handset Alliance) ที่นำโดย google ปัจจุบันถือเป็น 1 ใน 3 แกนหลักของระบบปฏิบัติการมือถือในปัจจุบัน (Apple iOS, Google android และ Microsoft Windows Phone – BB กำลังอยู่ในช่วงดูใจ) จุดเด่นของ android คือ มีลักษณะที่เป็นระบบเปิดมากที่สุด ทำให้มีผู้เล่นในตลาดจำนวนมาก และเป็นระบบปฏิบัติการ Smartphone ที่มีจำนวน Device มากที่สุดในขณะนี้ Continue reading

zimbra certificate expired

วันนี้ mail server เกิดร่วงขึ้นมากะทันหัน เนื่องจาก certificate expire (default cer. จะเป็น 1 ปี) cert ที่ใช้เป็น self signed อยู่แล้วก็เลยไม่มีปัญหาอะไร gen ใหม่ซะเลย

source: http://wiki.zimbra.com/wiki/Administration_Console_and_CLI_Certificate_Tools#Single-Node_Self-Signed_Certificate

ขอลอกของต้นฉบับมาเลย ไม่ต้องลีลา

Single-Node Self-Signed Certificate

1. Begin by generating a new Certificate Authority (CA).
zmcertmgr createca -new
2. Then generate a certificate signed by the CA that expires in 365 days.
zmcertmgr createcrt -new -days 3650
3. Next deploy the certificate.
zmcertmgr deploycrt self
4. Next deploy the CA.
zmcertmgr deployca
5. To finish, verify the certificate was deployed to all the services.
zmcertmgr viewdeployedcrt

อันนี้รันด้วย user root เน้นว่า จำนวนวันที่ approve cert เป็น 3650 หรือ 10 ปี (โดยประมาณ) ไปเลย ไม่ต้องมาทำกันใหม่บ่อยๆ
หลังจากนั้นให้เปลี่ยนเป็น user zimbra ทำการปิด-เปิด service ใหม่
zmcontrol stop
zmcontrol start

Extjs Store loader

เราไม่ควรใช้ autoLoad store เนื่องจากจะทำให้ store นั้นถูกโหลดอัตโนมัติตั้งแต่การเรียกใช้งาน

วิธีที่ดีกว่า คือ การ load() เมื่อ component ที่เรียกใช้ store นั้นถูกแสดงผล (เพิ่มลงไปใน container) โดยใช้โค้ดดังนี้

// เรียกใช้ใน component ที่มี store
	listeners: {
		added: function() {
			this.store.load();
		},
	},

การเพิ่ม logic นี้ลงไป จะช่วยให้เราไม่ต้องมี store request จำนวนมากในตอนเรียกใช้ app ครั้งแรก แต่มีผลข้างเคียงคือ store เดียว อาจมีการ load() ข้อมูลซ้ำหลายๆ ครั้ง หากมีการถูกเรียกใช้จาก component หลายๆ ตัว กรณีนี้ อาจแก้ไขได้โดยใช้โค้ดดังนี้

	listeners: {
		added: function() {
			if (this.store.count() == 0 && !this.store.isLoading)
				this.store.load();
		},
	},