แสดงบทความที่มีป้ายกำกับ Osdev แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Osdev แสดงบทความทั้งหมด

วันจันทร์ที่ 9 ธันวาคม พ.ศ. 2556

How to send mail with Golang

ท้าวความนิดส์นึงครับว่า งานปีใหม่ของ Osdev จะมีการจัดฉลากของขวัญกัน แต่ปัญหาหลักๆ ของการจับฉลากนั้นคือ ไม่รู้จะซื้ออะไร นั่นเอง
ดังนั้นเราจึงแก้ปัญหาโดยการ จับฉลากก่อนซะเลย แต่การจับฉลากก่อนนั้น จะเป็นไปโดยที่ไม่มีใครรู้ว่าใครจับได้ใคร
ดังนั้นเราต้องมา Coding กันซึ่งก็ต้องคิดก่อนว่าจะ Code ภาษาอะไรดี ซึ่งสรุปได้ว่าใช้ Golang เพราะอยากลองเขียนอยู่พอดี
โจทย์คือ
  1. ห้าม Random ได้ตัวเอง
  2. กรณีที่ผู้เล่นเป็นเลขคี่ ห้ามเหลือเศษ (กรณีที่ทุกคนมีคู่จนเหลือคนเดียว)
Solution ที่คิดออกมาคือเอาทุกคนเข้าไปอยู่ใน Array จากนั้น Shuffle Array ซะแล้วก็ไล่ส่งเมลแบบปกติเลย ได้ Code ออกมาแบบนี้

package main

import "math/rand"
import "time"
import "net/smtp"
import "net/mail"
import "strings"

func encodeRFC2047(String string) string{
 // use mail's rfc2047 to encode any string
 addr := mail.Address{String, ""}
 return strings.Trim(addr.String(), " <>")
}

func main() {
 var members = shuffle([]string {
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
  "example@osdev.co.th", 
 })
 auth := smtp.PlainAuth("", "example@osdev.co.th", "password", "smtp.gmail.com")
 subject := "Subject: Osdev Gift Random for New Year Cerebration\r\n\r\n"

 for i, _ := range members {
  if i != len(members) - 1 {
   message := "นี่คือเมลแจ้งการจับคุ่ขาของคุณ\r\nคู่ขาของคุณคือ " + members[i] + "\r\n\r\nกรุณาซื้อของขวัญราคาไม่ต่ำกว่า xxxx บาทมาให้คู่ขาของคุณด้วยนะจ๊ะ\r\nและอย่าลืมเก็บเรื่องนี้เป็นความลับล่ะ อย่าให้คู่ขาของคุณรู้เป็นอันขาด!!!"
   smtp.SendMail("smtp.gmail.com:587", auth, "example@osdev.co.th", []string{members[i+1]}, []byte(subject + message))
  }
 }
 message := "นี่คือเมลแจ้งการจับคุ๋ขาของคุณ\r\nคู่ขาของคุณคือ " + members[len(members) - 1] + "\r\n\r\nกรุณาซื้อของขวัญราคาไม่ต่ำกว่า xxxx บาทมาให้คู่ขาของคุณด้วยนะจ๊ะ\r\nและอย่าลืมเก็บเรื่องนี้เป็นความลับล่ะ อย่าให้คู่ขาของคุณรู้เป็นอันขาด!!!"
 smtp.SendMail("smtp.gmail.com:587", auth, "example@osdev.co.th", []string{members[0]}, []byte(subject + message))
}

func shuffle(members []string) []string {
 rand.Seed(time.Now().UTC().Unix())
 var newMembers = make([]string, len(members))
 var rands = rand.Perm(len(members))
 for i, v := range rands {
  newMembers[i] = members[v]
 }
 return newMembers
}

ประเด็นอยู่ที่ว่า ไอ้ function SendMail http://golang.org/pkg/net/smtp/#SendMail นั้นมันไม่มีที่ให้ใส่ Subject น่ะสิ ซึ่งค้นไปค้นมาไปเจอ Post นึงบอกว่าให้ใช้ "Subject: xxxx" ใน body message ได้เลย https://groups.google.com/d/msg/golang-nuts/b_zNHgr5cXU/2HLlGfwkTp4J ก็เลยจัดไป ได้ผลตามต้องการ
Continue Reading...

วันจันทร์ที่ 18 กรกฎาคม พ.ศ. 2554

แปลงเลขอาราบิกให้เป็นเลขไทยใน LibreOffice/OpenOffice.org

จาก post http://www.leknarm.com/2010/10/openofficeorg-writer.html ผมได้เขียนมาโครง่ายๆ และได้ทำเป็น extension ไว้ให้ลองเล่นกันแล้ว แต่ว่ามี bug อยู่จำนวนมาก และจากงาน OpenOffice.org Codefest#9 ก็ได้มีเพื่อนๆ ช่วยกันพัฒนา extension นี้จนสมบูรณ์ขึ้นมา

แต่ระหว่างที่ผมกำลัง review และปรับปรุง extension อยู่นั้นก็ได้เกิดเหตุการที่ไม่คาดฝันขึ้น มีบุคคลนึงเอา extension จาก post ที่กล่าวมาเอาไป publish ที่ OpenOffice.org Extensions เฉยเลย
http://extensions.services.openoffice.org/en/project/thai-number-converter (ไม่ขอทำเป็น link นะครับเพราะ SEO) น่าเศร้าใจเป็นที่สุด

แต่ตอนนี้ทางทีมก็ได้ publish extension ที่แก้ไขและปรับปรุงเรียบร้อยแล้วไว้ที่ http://extensions.services.openoffice.org/project/convertdigit ทุกท่านสามารถ download และทดลองใช้ได้เลยครับ หากมี bug หรือ comment ในส่วนไหนสามารถ comment ได้ที่ extension หรือที่ blog นี้ก็ได้ครับ
Continue Reading...

Blogroll

About