Uncategorized

elasticsearch for developer by Sprint3r [Part 1]

จบไปแล้วสองวันสำหรับ elasticsearch ครับ ก็เลยอยากเก็บบรรยากาศมาเล่าให้ฟัง

ด้วยพื้นฐานความรู้เกี่ยวกับ elasticsearch ของผมมันแทบจะเป็น 0 เลย ในชีวิตการทำงานไม่ได้แตะมัน แถมก่อนมาเรียนคอร์สนี้ก็อดหลับอดนอนมาหลายคืนทำให้ร่างกายไม่ค่อยพร้อมเท่าไหร่ สองวันนี้สำหรับผมก็เลยสมองตื้อๆ ไปหน่อย แต่พี่ปุ๋ยก็ช่วยตบ Learning curve ที่สูงเป็นภูเขาสำหรับผมลงมาจนผมคิดว่าผมเดินเองไหวแล้ว …​ ก็ขอกราบขอบพระคุณมานะที่นี้ 🙂

 

ผมไปสาย ชั่วโมงกว่าๆ นั่งโต๊ะเปิดคอมฯ ได้ปุ๊บ พี่ปุ๋ยก็เหล่ตามาถามว่า start elasticsearch หรือยัง

ห๊า!!!!! ….. ตาเหลือก

แอบเหลือบตามองพี่ข้างๆ ก็ร้องอ๋อ ไม่ยากๆ … แค่ download โปรแรม elasticsearch มาจาก http://www.elasticsearch.org/overview/elkdownloads/

แล้วก็ทำตาม step 1) แตกไฟล์  2) run elasticsearch  3) ทดลองเรียกใช้งาน  แบบที่มันบอกเลย

(ลองเข้าใช้งานผ่าน browser ที่ localhost:9200 ก็ได้  ถ้าได้ json string หน้าตาประมาณนี้ก็ถือว่าอะเครร)

Screen Shot 2558-01-25 at 22.49.10

 

จากนั้นก็ลง plugin เทพตัวนึงที่ชื่อว่า mavel วิธีการก็ทำตาม step นี้

http://www.elasticsearch.org/guide/en/marvel/current/_installation.html

ลองเรียก ผ่าน browser ไปที่  http://localhost:9200/_plugin/marvel/ ดู เราจะเห็น dashboard สวยๆ ประมาณเนี้ย

Screen Shot 2558-01-25 at 22.54.25

 

ที่ลง marvel plugin เพราะเราจะไปใช้เครื่องมือตัวนึงที่ชื่อว่า sense ครับ เรียกมันใช้งานได้ที่

Screen Shot 2558-01-25 at 22.58.37

 

แล้วเราก็จะมีเครื่องมือที่เอาไว้เขียน Query ง่ายๆ หน้าตาแบบนี้

 

Screen Shot 2558-01-25 at 23.00.31

จากนั้นเราก็ละเลงเพลงรัก กันได้ตามสะดวก 🙂

 

 

 

Uncategorized

Intermec label printer ตอน คำตอบ

วิธีการพิมพ์รูปโดยใช้ Direct Protocol ให้เครื่องพิมพ์ Label Intermec PD42 ทำได้ง่ายๆ ดังนี้

  1. Upload รูปภาพเป็นไฟล์ PCX  ขาวดำ (1-bit) อาจจะ upload โดยใช้ ftp ก็ได้
  2. สั่งคำสั่ง IMAGES
  3. พิมพ์รูปด้วยคำสั่ง PRIMAGE “LOGO.PCX”

คำตอบมันสั้นและง่ายมากใช่ไหมครับ? ทำไม่เกิน 2 นาทีก็น่าจะเสร็จ

 

ผมสารภาพว่าใช้เวลา 2 วันเต็มๆ เพื่อแค่จะทำให้ Intermec PD42 มันพิมพ์รูปที่ผมต้องการออกมาได้  มันเป็น 2 วันที่ไม่ง่ายเลยสำหรับผม ในคู่มือบอกว่ามัน Support PCX นะ และใช้คำสั่ง PRIMAGE ในการพิมพ์รูปออกมา และนี่คือสิ่งที่ผมทำซ้ำไปซ้ำมาตลอด 2 วันนี้ครับ

  • ทดลองพิมพ์รูปภาพ GLOBE.1 (รูปมาตรฐานที่มากับ Label Printer) ด้วยคำสั่ง PRIMAGE
  • สร้างรูป Logo ด้วยโปรแกรม Paint
  • Convert รูป Logo ให้เป็น PCX , resize , reduce colorให้เป็น PCX ด้วย Online web และโปรแกรม  IrfanViewer
  • Convert PCX ให้เป็น INTELHEX format
  • ทดลองสร้างไฟล์รูปที่มี Format แบบ INTELHEX และทดลองพิมพ์รูป ด้วยคำสั่ง DIRECT PROTOCOL
  • ทดลองสร้างไฟล์รูปแบบ INTELHEX
  • แก้ปัญหาเครื่องพิมพ์แสดง error Memory Overflow
  • ทดลองใช้โปรแกรม fingerprint ของ intermec
  • Setup LAN network
  • ทดลอง Upload รูปแบบอัตโนมัติผ่าน USB
  • ทำ Factory Reset เครื่อง Label Printer
  • ใช้ ftp upload ไฟล์รูปแบบ INTELHEX ไปบน server
  • ทดลองวางไฟล์รูปใน path ต่างๆ เช่น  /tmp  ,  /c  ,  /rom
  • ทดลอง hack  bitmap image buffer format ของไฟล์ GLOBE.1 ของ label printer
  • ทดลองคำสั่ง Direct Protocol ในการอ่านเขียนไฟล์ภาพจาก path ต่างๆ ของ server ต่างๆ
  • ทดลอง setup printer , paper size , media type ผ่าน direct protocol
  • ทดลองคำสั่งอ่าน/เขียน image buffer ของ label printer
  • …..
  • ….

นี่ยังไม่รวม Treatment ต่างๆ ในแต่ละหัวข้อเช่น

  • รูปขาวดำ (1-bit), Gray scale
  • ไฟล์รูป Format แบบ INTELHEX ความกว้าง 16 bytes, 32 bytes และ 64 bytes
  • Image size ต่างๆ เช่น  100×21, 56×62, 661×773 …
  • Location ของไฟล์รูปที่จะเอามาทำ  bitmap image buffer  /tmp   /c

ต้องทำการทดลองซ้ำไปซ้ำมา  รวมทั้งยังต้องหาข้อมูลในคำสั่งต่างๆ ที่เรายังไม่เข้าใจ หาวิธีการทำ Factory Default (ทำ factory default ไม่น่าจะต่ำกว่า 4 ครั้ง) จำนวน Label ที่เสียไป(ถ้าไม่ reuse) น่าจะเป็นม้วน ปัญหาและอุปสรรคมีให้แก้ตลอดระหว่างทาง

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

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

เลือกเอา …​ ระหว่างรอดมดอกไม้ที่ปลายทาง กับความสำราญระหว่างเดินครับ!!!

 

Uncategorized

ว่าด้วยเรื่อง Queue และ Universal Studio Japan

ผมชอบเล่นสวนสนุกมาก ยิ่งเป็นสวนสนุกระดับโลกนอกจากจะได้ผ่อนคลายจนลืมแก่แล้วก็ยังมีมุมให้ได้เก็บมาคิดเอามาวิเคราะห์เป็นอาหารสมองได้อีกทางหนึ่ง

เมื่อต้นเดือนผมไปญี่ปุ่นมาและตั้งใจจะเล่น Theme park ชื่อดังทั้ง 3 แห่งอย่าง Universal Studio ที่ Osaka และ Disney Land and Disney Sea ที่ Tokyo แต่เนื่องด้วยเวลาไม่อำนวยเลยได้ไปแค่ที่เดียวคือ Universal Studio นี่แหล่ะ วันที่ผมไปสวนสนุกเปิดให้เล่นตั้งแต่ตี 2 ยัน 3 ทุ่ม เล่นกันให้อ๊วกแตกกันไปข้างนึง

สิ่งที่ดูไม่น่าประทับใจเท่าไหร่นั่นคือปริมาณคิว (แถวคอย) ในการเล่นเครื่องเล่นแต่ละชิ้นนั้นนานและยาวมาก โดยเฉพาะ Theme ใหม่ที่เพิ่งเปิดคือ Harry Potter ซึ่งนอกจากจะต้องกดจองคิว (ผมจองตอนตี 5 ได้คิวประมาณเกือบเที่ยง) เพื่อเข้าไปในพื้นที่ส่วนนั้นแล้ว ยังมีการต่อคิวเพื่อเล่นเครื่องเล่นในปราสาท Hawkward ด้วย

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

คนเยอะ คิวยาวถึงขนาดที่ทางสวนสนุกบอกว่า ถ้าจะเล่นเครื่องเล่นนี้ อาจจำเป็นต้องซื้อบัตร EXPRESS เสียตังค์ เพิ่มด้วย

ที่ USJ (Universal Studio Japan) การจัดการคิวของเครื่องเล่นแต่ละชิ้นไม่เหมือนกัน แต่โดยหลักๆ แล้ว จนท. จะแบ่งลูกค้าออกเป็น 3 กลุ่ม

  1. ลูกค้าที่มีบัตร Express Pass
  2. Single rider (พวกมาคนเดียว นั่งตรงไหน เล่นกับใครก็ได้)
  3. ลูกค้าทั่วไป (ซึ่งปกติจะมาเป็นกลุ่ม)

จนท. จะเป็นคนบริหารคิวเอง จากที่สังเกตุ กลุ่มที่เป็น Single rider จะได้เปรียบที่สุด เพราะคิวเฉพาะแถวนี้น้อยอยู่แล้วและคนที่อยู่ในแถว Single rider จะถูกให้บริการอย่างเร็วมากๆ เนื่องจาก จนท. จะต้องจัดคนเข้าไปเติมเก้าอี้เดี่ยวๆ ที่ว่าง เนื่องจากลูกค้า Express Pass และ ลูกค้าทั่วไป มักจะมาเป็นกลุ่มและอยากเล่นด้วยกัน พร้อมๆ กัน

ระหว่างยืนเซ็งในแถวคอย ก็นึกถึง Queing Theory ที่เคยเรียนผ่านหัวมาว่า

ใน Queuing Theory เราจะใช้สัญลักษณ์ เพื่ออธิบายระบบคิวที่เรากำลังศึกษาดังนี้

A / B / m / K / n / D

A : Distribution function ของเวลาการเข้ามาของลูกค้า
B : Distribution function ของเวลาการให้บริการ
m : จำนวนผู้ให้บริการ
K : capacity ของระบบ หรือ จำนวนผู้ใช้บริการสูงสุดในระบบ (รวมคนที่กำลังรับบริการอยู่ด้วย)
n : จำนวนประชากรของลูกค้า
D : รูปแบบการควบคุมการให้บริการ

และถ้า capacity ของระบบ จำนวนประชากรของลูกค้า และ รูปแบบการให้บริการเป็น FIFO  ตรง  / K / n / D ก็จะละไว้ได้

ยกตัวอย่างเช่น

M/M/1  ก็หมายความว่าเป็นระบบคิวที่ระยะเวลาการเข้ามาของลูกค้าก็มีการแจกแจงแบบ Exponential  ระยะเวลาการให้บริการก็มีการแจกแจงแบบ Exponential และมีผู้ให้บริการ 1 คน

หรือยกตัวอย่างเครื่องเล่น Harry Potter ที่มี service rate คงที่ (ระยะเวลาการให้บริการที่แน่นอน) และนั่งได้ทีละ 3 คนพร้อมกัน ก็จะเป็น M/D/3

 

ว่าแล้วก็ตอนท้ายกลับมาวิชาการหน่อย

ที่จริงแล้วผมต้องใช้ Queuing Theory ในชีวิตการทำงานในโรงงานอุตสาหกรรมเยอะมาก

  • ระยะเวลาในการรอคอยของชิ้นงานประกอบในสายการการผลิต
  • ระยะเวลาในการรอคอยการสแกนลายนิ้วมือ เข้า/ออกจากงาน
  • ระยะเวลาในการรอคอยการออก label packing , box

 

ซึ่งตัวเลขทางสถิติเหล่านี้ จะทำให้เราตัดสินใจได้ว่า เราควรเพิ่มคน เพิ่มผู้ให้บริการไหม … ถ้าต้องเพิ่ม ควรเพิ่มเท่าไหร่

…. มันจะไม่ใช่ Magic number อีกต่อไป ….