วันจันทร์ที่ 7 มีนาคม พ.ศ. 2559

ลำนำรักเทพสวรรค์ ภาค 2 เล่ม 5 ตอนที่ 1

บทที่ 34 - ลมร้ายตะวันออก ความสุขชั่วแล่น

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

โปรดควักหัวใจของข้าออกมา เพื่อที่เลือดของข้าจะได้เปียกชุ่มผืนดิน เหมือนกับต้นดอกพีช เพื่อที่ท่านจะได้มีข้าในดวงตาท่าน"

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

จวนซูรอจนกระทั่งเสี่ยวเยาปักเข็มสุดท้ายเสร็จจึงถามว่า "เจ้าสนใจทำของพวกนี้ตั้งแต่เมื่อไหร่?"

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

"แล้วประโยชน์ข้อที่สองล่ะ?"

เสี่ยวเยายิ้ม "พอข้าทำเสร็จ ข้าจะมอบมันให้จิ่ง"

จวนซูตกตะลึง พักหนึ่งจึงถามขึ้น "เจ้า……..เจ้าคืนดีกับเขาแล้วรึ?"

เสี่ยวเยาส่ายหน้า "เปล่า"


แปลจาก http://koalasplayground.com/2014/08/05/lost-you-forever-chapter-34-the-malevolent-east-wind-the-fleeting-pleasure/

วันศุกร์ที่ 21 มีนาคม พ.ศ. 2557

Unity: Multi-Touch 2D Collider Work ^o^

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class TouchInput : MonoBehaviour {

    private List<GameObjecttouchList = new List<GameObject>();
    private GameObject[] touchesOld;
    private RaycastHit2D hit;

    void Update () {

#if UNITY_EDITOR
        if (Input.GetMouseButton(0) || Input.GetMouseButtonDown(0) || Input.GetMouseButtonUp(0)) {
            
            touchesOld = new GameObject[touchList.Count];
            touchList.CopyTo(touchesOld);
            touchList.Clear();

            hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
        
            if(hit.collider != null) {

                GameObject recipient = hit.transform.gameObject;
                touchList.Add(recipient);
                
                if (Input.GetMouseButtonDown(0)) {
                    recipient.SendMessage("OnTouchDown",hit.point,SendMessageOptions.DontRequireReceiver);
                }
                if (Input.GetMouseButtonUp(0)) {
                    recipient.SendMessage("OnTouchUp",hit.point,SendMessageOptions.DontRequireReceiver);
                }
                if (Input.GetMouseButton(0)) {
                    recipient.SendMessage("OnTouchStay",hit.point,SendMessageOptions.DontRequireReceiver);
                }
                
            }
            
            foreach (GameObject g in touchesOld) {
                if (!touchList.Contains(g)) {
                    g.SendMessage("OnTouchExit",hit.point,SendMessageOptions.DontRequireReceiver);
                }
            }
        }
#endif

        if (Input.touchCount > 0) {

            touchesOld = new GameObject[touchList.Count];
            touchList.CopyTo(touchesOld);
            touchList.Clear();

            foreach (Touch touch in Input.touches) {
                
                hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(touch.position), Vector2.zero);

                if(hit.collider != null) {
                        
                    GameObject recipient = hit.transform.gameObject;
                    touchList.Add(recipient);
                    
                    if (touch.phase == TouchPhase.Began) {
                        recipient.SendMessage("OnTouchDown",hit.point,SendMessageOptions.DontRequireReceiver);
                    }
                    if (touch.phase == TouchPhase.Ended) {
                        recipient.SendMessage("OnTouchUp",hit.point,SendMessageOptions.DontRequireReceiver);
                    }
                    if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved) {
                        recipient.SendMessage("OnTouchStay",hit.point,SendMessageOptions.DontRequireReceiver);
                    }
                    if (touch.phase == TouchPhase.Canceled) {
                        recipient.SendMessage("OnTouchExit",hit.point,SendMessageOptions.DontRequireReceiver);
                    }

                }
            }

            foreach (GameObject g in touchesOld) {
                if (!touchList.Contains(g)) {
                    g.SendMessage("OnTouchExit",hit.point,SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    }
}

วันเสาร์ที่ 9 มิถุนายน พ.ศ. 2555

วันจันทร์ที่ 14 พฤศจิกายน พ.ศ. 2554

วันเสาร์ที่ 27 สิงหาคม พ.ศ. 2554

Grails: การเก็บข้อมูลเป็นภาษาไทยใน MySQL

เราต้องทำ 2 ที่ คือ
1) ใน DataSource.groovy


เพิ่ม ?useUnicode=true&characterEncoding=utf8


2) ที่ MySQL ( เราใช้ command line )
mysql > SET NAMES 'utf8';


แค่นี้ก็เรียบร้อยแล้วค่ะ ^^

วันศุกร์ที่ 19 สิงหาคม พ.ศ. 2554

Grails: Jasper+iReport

การใช้ parameters ใน iReport

ตัวอย่าง .jrxml ไฟล์

อันดับแรก คุณต้องประกาศ parameter ซะก่อน เช่น

แล้วก็เรียกใช้ด้วย $P{ } ได้เลย