หน้าเว็บ

วันอังคารที่ 30 กรกฎาคม พ.ศ. 2562

ตัวอย่างการเขียน Java Spring-boot Reactive (WebFlux)


ผมได้ทำตัวอย่างการเขียน Java Spring-boot WebFlux ซึ่งเป็นการเขียน Spring-boot แบบ Non-Blocking I/O หรือ Asynchronous หากใครสนใจสามารถเข้าไปศึกษาได้ที่

https://github.com/jittagornp/spring-boot-webflux-example

วันพุธที่ 12 มิถุนายน พ.ศ. 2562

ถึงคนอ่าน Blog และผู้ติดตามทุกคนน่ะครับ

Blog นี้ผมไม่ได้เขียนมาซักระยะนึงแล้ว 
จริง ๆ ต้องเรียกว่านานมาก ๆ เลยแหล่ะ (เกือบ 4 ปีได้ ฮ่าๆๆๆ)

ตอนนี้ผมย้ายไปเขียนบน platform อื่น ๆ
หลัง ๆ มาก็มี เขียนบ้าง ไม่ได้เขียนบ้าง 
เพราะมีหน้าที่รับผิดชอบที่เยอะขึ้น เลยไม่ค่อยได้มีเวลาเขียน Blog ครับ
บวกกับตอนนี้มีความสนใจ เรื่องใดเรื่องนึงเป็นพิเศษ เลยไม่ได้มีเวลามาทำตรงนี้

ถ้าผู้อ่าน เพื่อน ๆ พี่ ๆ น้อง ๆ คนไหนยังอยากติดตามอยู่ สามารถติดตามได้ตาม link นี้ครับ

ขอบคุณครับ

วันจันทร์ที่ 25 พฤษภาคม พ.ศ. 2558

maven ทำ jar file ให้ double click run program ได้ : java

ในที่นี้ผมจะยกตัวอย่างด้วย Netbeans IDE น่ะครับ

1. สร้าง maven project เป็น Java Application


วันอาทิตย์ที่ 24 พฤษภาคม พ.ศ. 2558

ฝึก recursive ด้วยโจทย์ความน่าจะเป็น


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

        ครับ!!! ผมเคยได้ยินประโยคแบบนี้มานักต่อนักล่ะ  บางคนบอกว่าผมไม่รู้จักใช้เครื่องมือให้เกิดประโยชน์
        คุณกำลังเข้าใจผิดกับคำว่า  "การเลือกใช้เครื่องมือ"  กับ  "การฝึกทักษะการแก้ปัญหา"
ที่ผมเขียนเอง เพราะผมต้องการฝึก skill เพื่อให้เกิดความคล่องตัว เมื่อเราเจอโจทย์ปัญหาลักษณะนี้  เราจะแก้มันได้รึเปล่า ลองใช้ความคิดของเราดูสิ
        skill มันส่งต่อผ่านประสบการณ์กันไม่ได้  ต่อให้มีคนพยายามเล่าประสบการณ์ทั้งชีวิตของเขาให้คุณฟัง  คุณก็ทำแบบเขาไม่ได้ คุณต้องฝึก ฝึก ฝึก ลงมือทำด้วยตัวคุณเองครับ

ปัญหา

        โดยทั่วไป การหาความน่าจะเป็นหรือความเป็นไปได้ของสมาชิกทั้งหมดภายในเซต S ซึ่งมีสมาชิกจำนวน n ตัว
คุณจะต้องวนลูปทั้งหมด n รอบ และลึก n ชั้น ถึงจะได้ค่าทั้งหมดออกมา  เช่น

S = {'A', 'B', 'C'}
n = 3 ตัว
จำนวนความเป็นไปได้ทั้งหมดคือ 3 x 3 x 3 = 27 ค่า

การเขียนโปรแกรมแบบง่ายๆ จะได้
for (var i = 0; i < S.lenght; i++){
    for (var j = 0; j < S.lenght; j++){
        for (var k = 0; k < S.lenght; k++){
               print(S[i] + ',' + S[j] + ',' + S[k]);
        }
    }
}

A,A,A
A,A,B
A,A,C
A,B,A
A,B,B
...
...
...
C,B,C
C,C,A
C,C,B
C,C,C
แล้วถ้าเขาต้องการให้คุณเขียน code ที่รองรับ S ที่มี size ขนาดใดก็ได้ คุณจะเขียนยังไง?
แน่นอน loop ใช้ไม่ได้ล่ะ เพราะมัน fixed ตายตัว
แล้วอะไรที่เราเอามาใช้แทน loop ได้ แถมยังเป็นแบบ dynamic อีก

คำตอบคือ Recursive ครับ

วันเสาร์ที่ 18 เมษายน พ.ศ. 2558

angularjs enumeration : javascript

Enum Factory
var mapApp = ...

myApp.factory('Enumerate', function () {

    return function (list, fnc) {

        var Enumerate = function (ctx) {
            if (angular.isObject(ctx)) {
                angular.forEach(ctx, function (val, key) {
                    this[key] = val;
                }, this);
            } else if (angular.isString(ctx)) {
                this.name = ctx;
            } else {
                throw new Error('incorrect arguments.');
            }
        };

        Enumerate.values = [];

        Enumerate.valueOf = function (ctx) {
            var obj = null;
            angular.forEach(Enumerate.values, function (item) {
                if (item.name === ctx) {
                    obj = item;
                    return false;
                }
            });

            if (!obj) {
                obj = new Enumerate(ctx);
                Enumerate.values.push(obj);
            }

            return obj;
        }

        Enumerate.prototype.toString = function () {
            return this.name;
        };

        fnc && angular.forEach(fnc, function (val, key) {
            Enumerate.prototype[key] = val;
        });

        angular.forEach(list, function (item) {
            Enumerate[
                    angular.isObject(item)
                    ? item.name
                    : item
            ] = Enumerate.valueOf(item);
        });

        return Enumerate;
    };
});
Using
myApp..factory('StandardColumn', [
    'Enumerate',
    function (Enumerate) {

        var StandardColumn = function () {

        };

        /* define enum */
        StandardColumn.Format = Enumerate([
            {name: 'STRING', description: 'ตัวหนังสือ'},
            {name: 'NUMBER', description: 'ตัวเลข'},
            {name: 'STUDENT', description: 'นักเรียน'}
        ]);

        StandardColumn.Format.fromDescription = function (desc) {
            var obj = null;
            angular.forEach(StandardColumn.Format.values, function (item) {
                if (item.description === desc) {
                    obj = item;
                    return false;
                }
            })

            return obj;
        };

        StandardColumn.Operation = Enumerate([
            'SUM',
            'AVERAGE'
        ]);

        StandardColumn.prototype = {
            id: null,
            name: null,
            sequence: 1,
            format: StandardColumn.Format.STRING,
            operation: null,
            operateWith: null
        };

        return StandardColumn;
    }
]);