วันพุธที่ 22 มีนาคม พ.ศ. 2560

Go Language Example 9

Go by Example: Channel Synchronization

เราสามารถใช้ Channel เพื่อประสานการทำงานข้าม goroutines นี่คือตัวอย่างของการใช้การบล็อกที่ได้รับเพื่อรอให้เสร็จสิ้น goroutine


• นี่คือฟังก์ชั่นที่เราจะเรียกใช้ใน goroutine แชแนลที่ทำจะถูกใช้เพื่อแจ้งให้ผู้อื่นทราบว่างานนี้เสร็จสิ้นแล้ว
• ส่งค่าเพื่อแจ้งว่าเราทำเสร็จแล้ว | done <- true
• เริ่มต้น goroutine ของผู้ปฏิบัติงานเพื่อให้เป็นช่องทางในการแจ้งเตือน
• บล็อกจนกว่าเราจะได้รับการแจ้งเตือนจากคนงานใน Channel
• ถ้าคุณลบบรรทัด <- done ออกจากโปรแกรมนี้โปรแกรมจะออกก่อนที่พนักงานจะเริ่ม


Go by Example: Channel Directions
เมื่อใช้ช่องเป็นพารามิเตอร์ฟังก์ชันคุณสามารถระบุได้ว่าช่องต้องการส่งเฉพาะหรือรับค่าเท่านั้น ความจำเพาะนี้เพิ่มความปลอดภัยของโปรแกรม


• ฟังก์ชัน ping นี้ยอมรับเฉพาะช่องสำหรับส่งค่าเท่านั้น นี่เป็นข้อผิดพลาดในการคอมไพล์เพื่อรับช่องนี้
func ping(pings chan<- string, msg string) {
    pings <- msg
}
• ฟังก์ชั่น pong  ยอมรับ channel  หนึ่งเพื่อรับ (ping) และหนึ่งวินาทีสำหรับส่ง (pong )


Go by Example: Select
การเลือกของ Go ช่วยให้คุณรอการดำเนินงานหลายช่อง การรวม goroutines และช่องทางที่มีการเลือกเป็นคุณลักษณะที่มีประสิทธิภาพของ Go


• ตัวอย่างเช่นเราจะเลือกทั้งสอง channel c1 := make(chan string)
                                                                    c2 := make(chan string)
• แต่ละ channel จะได้รับค่าหลังจากระยะเวลาหนึ่งเพื่อจำลองตัวอย่างเช่น การปิดกั้นการดำเนินงานของ RPC ที่ดำเนินการใน goroutines พร้อมกัน
• เราจะใช้ตัวเลือกเพื่อรอค่าทั้งสองค่านี้พร้อมกันพิมพ์แต่ละรายการตามที่มาถึง
for i := 0; i < 2; i++ {
        select {
        case msg1 := <-c1:
            fmt.Println("received", msg1)
        case msg2 := <-c2:
            fmt.Println("received", msg2)
        }
• เราได้รับค่า "หนึ่ง" และ "สอง" ตามที่คาดไว้
• โปรดทราบว่าเวลาในการดำเนินการทั้งหมดอยู่ที่ประมาณ 2 วินาทีเนื่องจากทั้ง 2 และ 2 วินาทีมีการใช้งานพร้อมกัน


Credit By :https://gobyexample.com/


ขอบคุณที่เข้ามาดูกันนะคับ


##########ฝากติดตามเพจของพวกเราด้วยนะคับ############




สอนสร้างเกมด้วยภาษา C# ใน Form ด้วยโปรแกรม Visual Studio EP#3 ทำกำแพงที่ชนละเด้งกลับไปที่เก่า




คำสั่งสำหรับเวลาเดินชนกำแพงละจะเด้งกลับไปที่เก่า

    if (player.Bounds.IntersectsWith(Wall.Bounds))
            {
                player.Left = 14;
                player.Top = 12;
            }
ในคลิปในจะไม่สามารถใส่ ลง ใน timer1ได้เนื่องจากผมได้ตั้ง stopไว้ มันจะไม่ทำงานจนกว่าผมจะกดเดิน และปล่อย จะใช่รวมกันกับตัวกำแพงไม่ได้ ให้สร้าง timer2 มาอีกอัน ละให้เข้าไปตั้งค่าให้ timer2
ให้เป็น Enabled ให้เป็น True  จะทำให้เป็น timer2 ทำงานตลอด ขออภัยถ้าหากผมพูดไม่เข้าใจในคลิป
ขอบคุณที่รับชมครับ

ตัวแปรและประเภทข้อมูล C#

ตัวแปร

ตัวแปรถูกใช้เพื่อเก็บข้อมูลในหน่วยความจำเพื่อนำข้อมูลเหล่านั้นไว้ใช้ภายหลังในโปรแกรม ในภาษา C# นั้นมีตัวแปรประเภทต่างๆ ที่มีชนิดข้อมูลที่แตกต่างกันไป เช่น boolean integer floating point string และพอยน์เตอร์ โดยการประกาศตัวแปรนั้นมีรูปแบบดังนี้
type identifier;
โดยที่ type เป็นชนิดของข้อมูลพื้นฐานที่มีในภาษา C# แต่อย่างไรก็ตามมันยังสามารถเป็นชนิดข้อมูลแบบอื่นๆ ได้ เช่น ออบเจ็ค ซึ่งเราจะกล่าวภายหลังในบทเรียนนี้ ส่วน identifierเป็นชื่อของตัวแปรที่เราต้องการสร้างขึ้น และนี่เป็นตัวอย่างในการประกาศตัวแปรในภาษา C#
char a;
int b;
float c = 5.6f;
ในการตั้งชื่อตัวแปรนั้น ชื่อของตัวแปรไม่สามารถตรงกับคำสงวนที่มีในภาษา C# ได้ และจะเป็นแบบ case-sensitive นั่นหมายความว่า ตัวแปร name และ NAME เป็นตัวแปรคนละตัวแปรกัน ในการตั้งชื่อตัวแปรในภาษา C# จะมีกฏดังนี้
  • ชื่อของตัวแปรสามารถประกอบไปด้วย ตัวอักษรภาษาอังกฤษ ตัวเลข และเครื่องหมาย _ เท่านั้น และไม่สามารถขึ้นต้นด้วยตัวเลขได้
  • ชื่อของตัวแปรต้องไม่ตรงกับคำสงานในภาษา C# แต่อย่างไรก็ตาม คุณสามารถใช้เครื่องหมาย @ นำหน้าชื่อตัวแปรได้หากคุณต้องการใช้คำสงวน แต่นั่นไม่ใช่วิธีการปฏิบัติที่ดี
ในกฏการตั้งชื่อของตัวแปรที่เราได้กล่าวมานั้นยังสามารถใช้กับการตั้งชื่อ เมธอด คลาส Interfaces หรือสิ่งต่างๆ ที่ผู้ใช้เป็นคนกำหนดขึ้นมา ซึ่งคุณจะได้เห็นตัวอย่างการใช้งานในบทต่อๆ ไปของบทเรียน

ประเภทข้อมูล

ในภาษา C# มีประเภทข้อมูลเพียงพอที่ให้เราสามารถจัดการกับข้อมูลประเภทต่างๆ ได้ เช่น ตัวอักษร ข้อความ ตัวเลขจำนวนเต็ม และจำนวนจริง เป็นต้น ซึ่งข้อมูลแต่ละประเภทจะใช้สำหรับเก็บค่าที่แตกต่างกันออกไป เช่น เก็บค่าคะแนนของผู้เล่นเกมส์ไว้ในตัวแปรประเภทจำนวนเต็ม หรือเก็บชื่อไว้ในตัวแปรประเภทข้อความ เป็นต้น
และนี่เป็นข้อมูลพื้นฐาน 4 ประเภทที่มีในภาษา C# ซึ่งประเภทข้อมูลเหล่านี้เป็น Primitive datatype หรือประเภทข้อมูลพื้นฐานในการเขียนโปรแกรม
  • Characters: นี่เป็นประเภทของข้อมูลที่ใช้ในการเก็บตัวอักษร โดยการใช้คำสั่ง charหรือ string ในการประกาศตัวแปร
  • Integer: นี่เป็นประเภทข้อมูลที่ใช้ในการเก็บข้อมูลตัวเลขแบบจำนวนเต็ม โดยการใช้คำสั่ง int หรือ long ในการประกาศตัวแปร แต่ที่แตกต่างกันคือหน่วยความจำที่ใช้ในการเก็บ เช่น long จะเ็บข้อมูลได้มากกว่า int และมันก็ใช้หน่วยความจำมากกว่าเช่นกัน
  • Floating point: นี่เป็นประเภทของข้อมูลที่ใช้สำหรับการเก็บตัวเลขแบบทศนิยมหรือจำนวนจริง โดยการใช้คำสั่งอย่างเช่น float หรือ double ในการประกาศตัวแปร
  • Boolean: ประเภทข้อมูลนี้สามารถเก็บข้อมูลได้เพียงแค่สองค่าคือ true และ false
ประเภทของข้อมูลแบบอื่นในภาษา C# นั้นจะเป็นประเภทข้อมูลแบบออบเจ็ค อาเรย์ ซึ่งจะมากับไลบรารี่ของภาษาหรือผู้ใช้ก็สามารถสร้างขึ้นเองได้เช่นกัน
ตารางข้างล่างนี้เป็นตารางแสดงประเภทของข้อมูลพื้นฐานในภาษา C#
คลาสประเภทคำอธิบายค่า
Charcharตัวอักษร Unicode character ขนาด 16 bitU +0000 ถึง U +ffff
SBytesbyteเลขจำนวนเต็มขนาด 8 bit-128 ถึง 127
Int16shortเลขจำนวนเต็มขนาด 16 bit-32,768 ถึง 32,767
Int32intเลขจำนวนเต็มขนาด 32 bit-2,147,483,648 ถึง 2,147,483,647
Int64longเลขจำนวนเต็มขนาด 64 bit-9,223,372,036,854,775,808 ถึง 9,223,372,036,854,775,807
Singlefloatเลขจำนวนจริงขนาด 32 bit-3.40282E38 ถึง 3.40282E38
Doubledoubleเลขจำนวนจริงขนาด 64 bit-1.79769E308 ถึง 1.79769E308
Bytebyteเลขจำนวนเต็มบวกขนาด 8 ฺbit0 ถึง 255
UInt16ushortเลขจำนวนเต็มบวกขนาด 16 ฺbit0 ถึง 65,535
UInt32unsigned intเลขจำนวนเต็มบวกขนาด 32 ฺbit0 ถึง 4,294,967,295
UInt64unsigned longเลขจำนวนเต็มบวกขนาด 64 ฺbit0 ถึง 18,446,744,073,709,551,615
Decimaldecimalเลขขนาด 128 ฺbit-7.92282E28 ถึง 7.92282E28
Booleanbooleanค่า true หรือ falsetrue, false
Stringstringใช้เก็บตัวอักษรหลายตัวหรือ textMultiple characters (Char array)

การประกาศตัวแปร

เราได้อธิบายแนวคิดและวิธีการประกาศตัวแปรไปแล้ว ต่อไปมาดูตัวอย่างการประกาศและใช้งานตัวแปรในภาษา C#
int x;
x = 10;
ในตัวอย่าง เราได้ประกาศตัวแปรที่ชื่อว่า x ซึ่งเป็นตัวแปรแบบจำนวนเต็ม โดยใช้คำสั่ง intในการประกาศ และบรรทัดต่อมาเราได้กำหนดค่าให้กับตัวแปร อย่างไรก็ตามเราสามารถประกาศตัวแปรและกำหนดค่าให้กับมันได้พร้อมกัน
int a = 4;
float b = 10.5;
String name = "Thomas";
อ้างอิงจากเว็บ : http://marcuscode.com/lang/csharp/variables-and-types

โครงสร้างของภาษา C#

โปรแกรม Hello World ในภาษา C#

ในบทนี้ คุณจะได้เรียนโครงสร้างพื้นฐานของการเขียนโปรแกรมภาษา C# เราจะสร้างโปรแกรมที่ชื่อว่า Hello World ซึ่งจะแสดงคำว่า "Hello Word" ออกทางหน้าจอคอมพิวเตอร์ของคุณ มันเป็นโปรแกรมแรกที่ทุกคนจะได้เขียนเมื่อพวกเขาเริ่มเขียนโปรแกรม
// #C Hello Word program 
using System;

namespace Hello
{
    class Program
    {
        static void Main()
        {
            // print text to the screen
            Console.WriteLine("Hello World!");
        }
    }
}
คุณสามารถรันโปรแกรมใน Visual Studio ได้โดยการ Ctrl + F5 สำหรับโหมด Debug เพราะว่าเมื่อโปรแกรมจบการทำงาน Console จะปิดลงทันที หรือคุณสามารถใช้คำสั่ง Console.ReadKey()ในตอนท้ายของเมธอด Main() สำหรับแก้ปัญหาดังกล่าวได้
Hello World!
นี่จะเป็นผลลัพธ์ของโปรแกรม ลองเปลี่ยนเป็นชื่อของคุณหรือคำอื่นๆ ต่อไปจะเป็นการอธิบายส่วนต่างๆ ที่สำคัญจากโปรแกรมด้านบน

คำสั่ง using

คำสั่ง using ถูกใช้เพื่อ include ไลบรารี่และฟังก์ชันในภาษา C# ทั้งฟังก์ชันมาตราฐานและฟังก์ชันที่ผู้ใช้สร้างขึ้นเอง จากตัวอย่างโค้ด Using System หมายถึงเราได้ทำการ include คลาสและฟังก์ชันทั้งหมดภายใต้ System namespace เพื่อที่จะนำมาใช้ในโปรแกรมของเรา

ฟังก์ชัน Main

ภาษา C# นั้นต้องการฟังก์ชันที่เรียกว่า Main() เพื่อเริ่มต้นและสิ้นสุดโปรแกรม คุณสามารถเขียนโค้ดโปรแกรมของคุณในฟังก์ชัน Main และใช้เรียกฟังก์ชันอื่นๆ และฟังก์ชัน Main นั้นจะมีหลายแบบ ซึ่งคุณสามารถสร้างได้โดยใช้คำสั่ง voidint และอื่นๆ โดยที่คำสั่ง void บ่งบอกว่าฟังก์ชันนี้ไม่ได้มีค่าส่งหลับ น่าไม่เช่นนั้น คุณต้องใช้คำสั่ง return เพื่อส่งค่ากลับหลังจากจบฟังก์ชัน อย่างไรก็ตามคุณจะได้เรียนรู้เกี่ยวกับฟังก์ชันในภาษา C# ภายหลัง
นี่เป็นตัวอย่างของฟังก์ชัน Main แบบอื่นๆ และแบบเป็นฟังก์ชัน Main ที่ใช้คำสั่ง int ในการสร้าง
// method integer type
using System;

namespace Hello
{
    class Program
    {
        static int Main()
        {
            Console.WriteLine("Hello World!");
            return 0;
        }
    }
}
และนี่เป็นฟังก์ชัน main ในภาษา C# กับอากิวเมนต์
using System;

namespace Hello
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
ภายในฟังก์ชัน Main คำสั่ง Console.WriteLine("Hello World!") นั้นถูกใช้เพื่อแสดงผลข้อความ "Hello Word!" ออกทางหน้าจอโดยการใช้ฟังก์ชัน WriteLine จากคลาส Console ซึ่งอยู่ภายใต้ System namespace

คำสั่ง namespace

คำสั่ง namespace นั้นถูกใช้สำหรับการประกาส namespace สำหรับคลาส ในภาษา C# namespace สามารถประกอบไปด้วยคลาสเดียวหรือหลายคลาสก็ได้ ในตัวอย่างเราได้สร้าง namespace Hello สำหรับโปรแกรมของเรา

การสร้างคลาส

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

Comment

ในภาษา C# คุณสามารถคอมเม้นต์โดยการใช้เครื่องหมาย// ก่อนหน้าบรรทัดของตัวอักษรที่ต้องการคอมเม้นต์ ผลลัพธ์ของการคอมเมนต์ก็คือโค้ดนั้นจะไม่มีผลกับโปรแกรม // และจะถูกเพิกเฉยจากคอมไพเลอร์ และการคอมเม้นต์แบบนี้เรียกว่าการคอมเม้นต์แบบ 1 บรรทัด มาดูตัวอย่าง
// This is my first comment
มีคอมเม้นต์อีกแบบหนึ่งที่คือ การคอมเม้นต์แบบบล็อคหรือหลายบรรทัด ซึ่งจะทำให้คุณสามารถคอมเม้นต์โค้ดได้มากกว่า 1 บรรทัดหรือค้อมเม้นต์ในส่วนที่ซับซ้อนขึ้น โดยสิ่งที่คุณคอมเม้นต์จะอยู่ในเครื่องหมาย /* และ */ และนี่เป็นตัวอย่างการคอมเม้นต์แบบหลายบรรทัด
/* The first line of comment
The second line of comment */
อ้างอิงจากเว็บ : http://marcuscode.com/lang/csharp/program-struct

Startup คืออะไร?

Startup คืออะไร?

คำนี้ถูกใช้กันมากใน 2 – 3 ปีหลัง ถ้าแปลตรงตัว มันก็คือการเริ่มต้นธุรกิจใหม่
อ้าว และมันต่างกับ SME ยังไง?” นี่คำถามที่หลายคนสงสัยและเข้าใจผิด
Startup’ คือการเริ่มต้นธุรกิจเพื่อการเติบโตแบบก้าวกระโดด มีวิธีสร้างรายได้ที่สามารถหาเงินแบบทำซ้ำและขยายได้ง่ายนั่นเอง ส่วนใหญ่จะเป็นธุรกิจที่เกิดขึ้นเพื่อแก้ปัญหาในชีวิตประจำวัน หรือเห็นโอกาสที่ยังไม่มีใครเคยเห็น เช่น แอพพลิเคชั่นเคลมประกันเมื่อเกิดอุบัติเหตุด้วยตัวเอง แอพพลิเคชั่นรวมที่จอดรถ เป็นต้น
ลองนึกภาพดู หากจะขยายทีเราต้องหาที่ใหม่ จ้างคนเพิ่ม หาวัตถุดิบ และเพิ่มกำลังการผลิต ถือว่าไม่สามารถขยายและทำซ้ำได้โดยไม่มีค่าใช้จ่าย จึงถือว่า ‘ร้านขายน้ำเต้าหู้’ ไม่ใช่ Startup แต่เป็น SME คือเป็นเจ้าของธุรกิจเอง ลงทุนเอง และเติบโตแบบค่อยเป็นค่อยไป
ในทางกลับกัน หากเราสร้างเว็บไซต์หรือแอพพลิเคชั่นให้คนมาขายของ เมื่อเราทำเสร็จปุ๊บ คนเอาของมาลงขายเยอะ รายได้ที่เข้ามาก็เพิ่มมากขึ้นโดยเราไม่ต้องไปขยายอะไรตามมากมาย ยิ่งถ้าพิสูจน์แล้วว่ามันดี ทำเงินได้ ขยายไปเปิดต่างประเทศด้วยโมเดลเดิมก็ทำได้อีกเช่นกัน เรียกได้ว่าทั้งขยายและทำซ้ำได้ เราจึงเห็น Startup ทำธุรกิจเกี่ยวข้องกับสายเทคโนโลยีซะเยอะ เพราะสามารถเติบโตได้ง่ายกว่าการทำธุรกิจประเภทอื่นๆ
หลายๆ Startup จำเป็นต้องมีผู้ใช้ที่เยอะในระดับนึงก่อนที่จะเริ่มหาเงิน หรือระดมทุนเพิ่มเพื่อขยายฐานผู้ใช้ให้เติบโตขึ้นอย่างก้าวกระโดด ตัวอย่างนี้มีให้เห็นมากมาย ไม่ว่าจะเป็น Facebook หรือ Youtube ต่างก็เคยเป็น Startup มาก่อน ตอนแรกใช้ฟรี หลังๆ ถึงเริ่มมีโฆษณามากขึ้น มีรายได้มากขึ้น มีแผนธุรกิจที่ชัดเจน
ที่บอกว่า Facebook และ Youtube เคยเป็น Startup เพราะคำว่า Startup เป็นคำจำกัดความของการเริ่มธุรกิจในระยะเริ่มต้นเท่านั้นและยังไม่มีแผนธุรกิจที่ชัดเจน เรียกว่าระดับ Beginner นั่นเอง
Startup ไม่จำเป็นต้องลงทุนเอง แต่สามารถนำเสนอไอเดีย เพื่อซื้อใจนักลงทุน ให้เห็นศักยภาพและมาร่วมลงทุนได้ ซึ่งงานที่เปิดโอกาสให้ Startup เสนอไอเดียนั้นเกิดขึ้นทั่วโลก ไม่จำเป็นต้องจำกัดอยู่ภายในประเทศเท่านั้น จนเกิดเป็นธุรกิจร่วมลงทุนที่มาในรูปแบบองค์กร เงินหนาลงหนัก ก็มีอยู่มากมาย ทว่า SME ส่วนใหญ่ใช้เงินทุนของตัวเอง หรือต้องทำเรื่องกู้ผ่านธนาคารที่มีโครงการสนับสนุนสินเชื่อเพื่อ SME
อ่านมาถึงตรงนี้แล้ว ใครที่มีไอเดียใหม่ๆ และอยากเข้าสู่วงการ Startup บ้าง ก็อาจเริ่มต้นด้วยการค้นคว้าสิ่งที่ตัวเองสนใจอย่างจริงจัง แล้วลงมือทำ เพราะช่วงเริ่มต้นงบประมาณไม่ใช่สิ่งสำคัญ ก้าวแรกนั้นวัดกันที่ไอเดียและใจ บวกกับความอึด ที่ขอบอกเลยว่าต้องใช้เยอะเชียวแหละ…แต่ถ้าผ่านไปได้ รับรองว่าอนาคตสดใสอย่างแน่นอน!
อ้างอิงจากเว็บ http://tech.mthai.com/tips-technic/51936.html 

วันอังคารที่ 21 มีนาคม พ.ศ. 2560

คำศัพท์ Network ที่ควรรู้จัก Ep.1




ISP :
        ISP หรือ Internet Service Provider เป็นหน่วยงานที่ให้บริการเชื่อมต่อเข้ากับเครือข่ายอินเทอร์เน็ต เช่น 3BB True ToT

Client :
       Client คือ เครื่องลูกข่าย หรือเครื่องที่เชื่อมต่อกับเครื่อง Server

Bridge :
       Bridge เป็นการเชื่อมโยงเครือข่ายที่แยกจากกัน

Port :
       Port คือ เส้นทางการส่งข้อมูล มีสองประเภทคือ TCP/UDP

Redundant :
       Redundant คือ การที่มี server มากกว่า 1 ตัว แล้วสามารถทำงานทดแทนกันได้ในทันทีที่ตัวใดตัวหนึ่งชำรุดหรือเสีย
+++++++++++++++++++++++++++++++++++++
              ยังมีคำที่เราต้องรู้อีกมากมาย ยังไงวันนี้ขอฝากไว้เท่านี้นะครับ สหายเน็ตเวิคทั้งหลาย

Machine Learning คือ ??

. . . Machine Learning . . .

            ต้องบอกเลยว่าสมองของมนุษย์นั้นมีความสามารถที่น่าสนใจอยู่หลายอย่างเช่น อารมณ์ ความรู้สึกนึกคิด ความทางจำ ประสาทสัมผัสทั้งห้า แต่ก็มีบางอย่างที่ซับซ้อนและไม่เหมาะที่จะแก้ปัญหาโดยการใช้สมองของมนุษย์เพียงอย่างเดียว
 
      เมื่อต้องเขียนโปรแกรมที่จัดการกับข้อมูลจำนวนมาก และมีรูปแบบที่แตกต่างกันออกไป เป็นเรื่องยากที่เราจะทำความเข้าใจข้อมูลและเขียนโปรแกรมที่จะตอบสนองต่อมัน เมื่อมีข้อมูลเข้ามาเพิ่มและมีลักษณะที่ต่างไปอีกก็เหมือนกับ requirement เปลี่ยนตลอดเวลา เราก็ต้องวิเคราะห์ข้อมูลใหม่และแก้โปรแกรมของเราเรื่อยๆซึ่งลำบากมาก
Field of study that gives computers the ability to learn without being explicitly programmed.
    Arthur Samuel หนึ่งในผู้บุกเบิก Computer Gaming, Artificial Intelligence และ Machine Learning ชาวอเมริกัน ได้นิยาม Machine Learning เอาไว้ว่า เป็น “การศึกษาเกี่ยวกับการทำให้คอมพิวเตอร์มีความสามารถที่จะเรียนรู้โดยที่ไม่ต้องเขียนโปรแกรมลงไปตรงๆ”
   กล่าวคือ Machine Learning นั้น ไม่ได้กำหนดลงไปในโปรแกรมว่า สำหรับลักษณะ A, B ใดๆ หากข้อมูลมีลักษณะแบบ A ต้องทำอย่างไร แบบ B ต้องทำอย่างไร แต่เป็นโปรแกรมที่ทำความเข้าใจความสัมพันธ์ของข้อมูล แล้วสร้างวิธีการตอบสนองต่อข้อมูลขึ้นมาเอง
  ในเมื่อโปรแกรมสามารถเปลี่ยนแปลงวิธีการตอบสนองต่อข้อมูลได้ด้วยตัวเอง เราจึงไม่จำเป็นต้องคอยวิเคราะห์ข้อมูลและแก้โปรแกรมทุกครั้งที่มีข้อมูลใหม่เข้ามาอีกต่อไป
/////////////////////////////////////////////////////////////////////////////////
Cr . https://medium.com/
/////////////////////////////////////////////////////////////////////////////////

Go Language Example 8

Go by Example: Goroutines

Goroutine เป็นความคิดที่ง่ายในการดำเนินการ


•  สมมติว่าเรามีฟังก์ชัน f(s) ต่อไปนี้คือวิธีที่เราเรียกว่าโดยปกติแล้วเรียกใช้งานแบบซิงโครนัส
•  เมื่อต้องการเรียกใช้ฟังก์ชันนี้ใน goroutine ใช้ f (s) ไป นี้ใหม่ goroutine จะดำเนินการควบคู่ไปกับการเรียกหนึ่ง
•  คุณยังสามารถเริ่ม goroutine สำหรับการเรียกฟังก์ชันที่ไม่ระบุตัวตน
go func(msg string) {
        fmt.Println(msg)
    }("going")

•  การเรียกใช้ฟังก์ชันสองแบบของเรากำลังทำงานแบบ asynchronously ใน goroutines แยกต่างหากในขณะนี้ดังนั้นการดำเนินการจะตกผ่านไปที่นี่ รหัส Scanln นี้ต้องการให้เรากดปุ่มก่อนที่โปรแกรมจะออก
•  เมื่อเราเรียกใช้โปรแกรมนี้เราจะเห็นผลลัพธ์ของการปิดกั้นการโทรก่อนจากนั้นจึงนำเอาผลลัพธ์การแทรกซึมของสอง gouroutines interleaving นี้สะท้อนให้เห็นถึง goroutines กำลังทำงานพร้อมกันโดยรันไทม์ Go

Go by Example: Channels
Channels คือท่อที่เชื่อมต่อกัน คุณสามารถส่งค่าลงในช่องจากหนึ่ง goroutine และได้รับค่าเหล่านั้นลงใน goroutine อื่น


•  สร้าง Channel ใหม่ด้วย Make (chan val-type) Channels ถูกพิมพ์โดยค่าที่ถูกถ่ายทอดมา
•  ส่งค่าลงใน Channels โดยใช้ Channel <- syntax ที่นี่เราจะส่ง "ping" ไปยัง Channels ข้อความที่เราทำไว้ข้างต้นจาก goroutine ใหม่
•  ไวยากรณ์ <-channel จะรับค่าจาก channel ที่นี่เราจะได้รับข้อความ "ping" ที่เราส่งมาและพิมพ์ออกมา
•  เมื่อเราเรียกใช้โปรแกรมข้อความ "ping" จะถูกส่งผ่านได้สำเร็จจากที่หนึ่งไปยังอีกช่องทางของเรา
•  โดยค่าเริ่มต้นจะส่งและรับบล็อกจนกว่าทั้งผู้ส่งและผู้รับจะพร้อม คุณสมบัตินี้อนุญาตให้เรารอในตอนท้ายของโปรแกรมสำหรับข้อความ "ping" โดยไม่ต้องใช้การซิงค์อื่น ๆ

Go by Example: Channel Buffering
โดยค่าเริ่มต้น Channels จะ unbuffered หมายความว่าพวกเขาจะยอมรับการส่ง (chan <-) ถ้ามีการรับ (<- chan) ที่สอดคล้องกันเพื่อรับค่าที่ส่งมา แชแนลบัฟเฟอร์ยอมรับค่าที่ จำกัด โดยไม่มีตัวรับสัญญาณที่สอดคล้องกันสำหรับค่าเหล่านั้น


•  ที่นี่เราสร้าง channel ของสตริงที่กำหนดบัฟเฟอร์ได้ถึง 2 ค่า
•  เนื่องจาก channel นี้มีการเก็บบัฟเฟอร์ไว้เราจึงสามารถส่งค่าเหล่านี้ไปยังช่องได้โดยไม่ต้องได้รับพร้อม ๆ กัน


Credit By :https://gobyexample.com/


ขอบคุณที่เข้ามาดูกันนะคับ


##########ฝากติดตามเพจของพวกเราด้วยนะคับ############







วันจันทร์ที่ 20 มีนาคม พ.ศ. 2560

WebAssembly

Web Assembly Binary ใหม่สำหรับเว็บเบราว์เซอร์

             Web Assembly ถูกคิดค้นพัฒนาโดย วิศวกรจาก กูเกิล , ไมโครซอฟท์ , Mozilla และ Webkit เทคโนโลยีฟอร์แมตไบนารี แบบใหม่ สำหรับเว็บเบราว์เซอร์

        นักพัฒนาสามารถคอมไพล์ภาษาโปรแกรม (ปัจจุบันเน้นที่ C/C++ ในอนาคตจะเพิ่มภาษาอื่นเข้าไป เช่น Rust, Go หรือ C#) ให้มาอยู่ในรูปแบบของฟอร์แมตไบนารีสำหรับเว็บ ทำงานบน JavaScript เอนจินบนเบราว์เซอร์ได้เลยโดยไม่ต้อง parse โค้ด JavaScript ที่เป็นข้อความอีกต่อไป ผลคือการประมวลผลเร็วขึ้น (ต้นแบบปัจจุบันทำงานได้เร็วกว่าการ parse asm.js โค้ด 23 เท่า) และข้อดีอีกอย่างคือขนาดของโค้ดที่คอมไพล์ให้อยู่ในรูปแบบของไบนารีฟอร์แมตจะมีขนาดเล็กกว่า JavaScript
Web Assembly ยังเป็นเทคโนโลยีใหม่ที่หวังว่าเบราว์เซอร์ทุกตัวจะรองรับ (ซึ่งจากรายชื่อผู้เข้าร่วม รายใหญ่ก็มากันครบ) แต่ทางทีมผู้พัฒนาก็ออก Poly fill library เพื่อให้เบราว์เซอร์ในปัจจุบันสามารถทำงานกับ Web Assembly ได้ก่อน (Poly fill ทำหน้าที่ในการแปลง Web Assembly ฟอร์แมตไบนารีให้กลับมาอยู่ในรูปแบบของ JavaScript ที่เบราว์เซอร์สามารถทำงานได้)
      ทำไมถึงต้อง Web Assembly ในเมื่อมี asm.js อยู่แล้ว?
         1. asm.js นั้นดี แต่ก็ยังเป็น JavaScript ที่เบราว์เซอร์ยังต้อง parse โค้ดก่อนที่จะทำงานได้ เปรียบเทียบกับฟอร์แมตไบนารีของ Web Assembly ที่เป็นเนทีฟโค้ด เบราว์เซอร์สามารถถอดรหัสและใช้งานได้ทันที (ในการทดลองพบว่าเร็วขึ้น 23 เท่า)
          2. สามารถหลีกเลี่ยงข้อจำกัดของ asm.js โดยใน Web Assembly นักพัฒนาสามารถเพิ่มฟีเจอร์ที่จำเป็นต่อประสิทธิภาพได้ง่ายกว่ามาก

ในขั้นแรก ทีมงานตั้งใจให้ Web-Assembly มีฟีเจอร์เท่ากับ asm.js ในปัจจุบัน โดยนักพัฒนาสามารถใช้ Emscripten for Web Assembly ในการคอมไพล์ C++ โค้ดได้เลย
         Web Assembly เป็น Virtual Instruction ที่วิ่งบน Browser และ Environment อื่นๆ เช่น Node.js ทำให้ความหวังของการทำโปรแกรมครั้งเดียว ไปวิ่งบนเครื่องไหนก็ได้ใกล้ความจริงเข้ามามากและที่สำคัญอีกอย่างคือ โปรแกรมเหล่านี้สามารถรันบน web browser ได้ แปลว่าเราไม่ต้องลงโปรแกรม ไปเว็บแล้วก็วิ่งโปรแกรมที่เขียนด้วยภาษา Native ได้ทันทีประการสุดท้ายคือ การที่ Web Browser กลายเป็น Virtual VM ที่เราเอาโปรแกรมไปวิ่งได้ แปลว่าเรามีเครื่องใหม่ที่จะรันอีกมหาศาล กำลังเครื่องจะเพิ่มขึ้นมาก และผู้ใช้จ่ายตังค์ซื้อมาเองโปรแกรมที่เขียนด้วย C/C++ อย่างเดียวก็ port กันไม่ไหวแล้วยิ่งตอนนี้ browser หลักๆต่างเห็นชอบกับมาตรฐานนี้แล้ว ยิ่งต้องรีบศึกษากันเลยนะครับ



////////////////////////////////////////////////////////////////////

Cr. FB : Panutat Jimmy Tejasen
     https://www.blognone.com/
     https://github.com/WebAssembly/design/blob/master/FAQ.md

////////////////////////////////////////////////////////////////////

Go Language Example 7

Go by Example: Methods

Go สนับสนุนวิธีการที่กำหนดไว้ใน struct types

• Method นี้มีวิธีรับประเภทของสัญญาณ * rect
 func (r *rect) area() int {
    return r.width * r.height
}
• สามารถกำหนดวิธีการสำหรับตัวบ่งชี้หรือตัวรับชนิดค่าได้
• ที่นี่เราเรียก 2 วิธีที่กำหนดไว้สำหรับ struct ของเรา
fmt.Println("area: ", r.area())
fmt.Println("perim:", r.perim()
• Go จัดการการแปลงระหว่างค่าและคำแนะนำสำหรับการเรียกเมธอดโดยอัตโนมัติ คุณอาจต้องการใช้ตัวรับประเภทตัวรับเพื่อหลีกเลี่ยงการคัดลอกการเรียกเมธหรืออนุญาตให้เมธอด mutate โครงสร้างที่รับ
• ต่อไปเราจะดูกลไกของ Go สำหรับการจัดกลุ่มและตั้งชื่อชุดของวิธีการที่เกี่ยวข้อง: interfaces

Go by Example: Interfaces
Interfaces เป็นคอลเลกชันชื่อลายเซ็นของโหมด



• ต่อไปนี้คือส่วนติดต่อพื้นฐานสำหรับรูปทรงเรขาคณิต

• สำหรับตัวอย่างของเราเราจะใช้อินเทอร์เฟซนี้ในรูปแบบ rect และ circle
• ในการใช้อินเทอร์เฟซใน Go เราจำเป็นต้องใช้วิธีการทั้งหมดในอินเทอร์เฟซ ที่นี่เราใช้เรขาคณิตใน rects
• การดำเนินการสำหรับวงกลม  func (c circle) area() float64 {
                                                   return math.Pi * c.radius * c.radius
}

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


Go by Example: Errors
• ใน Go เป็นสำนวนในการสื่อสารข้อผิดพลาดผ่านทางค่าที่ส่งคืนที่แยกต่างหากต่างหาก นี้ขัดแย้งกับข้อยกเว้นที่ใช้ในภาษาเช่น Java และ Ruby และค่าผลมากเกินไป / ค่าผิดพลาดบางครั้งใช้ในวิธีการของ C. Go ทำให้ง่ายต่อการดูที่หน้าที่ส่งกลับข้อผิดพลาดและจัดการกับพวกเขาโดยใช้โครงสร้างภาษาเดียวกันใช้สำหรับอื่น ๆ , งานที่ไม่ใช่ข้อผิดพลาด


• ตามข้อตกลงข้อผิดพลาดคือมูลค่าที่ส่งคืนล่าสุดและมีข้อผิดพลาดประเภทอินเทอร์เฟซในตัว
• ข้อผิดพลาดใหม่สร้างค่าข้อผิดพลาดพื้นฐานพร้อมกับข้อความแสดงข้อผิดพลาดที่ระบุ
• ค่าเป็นศูนย์ในตำแหน่งข้อผิดพลาดระบุว่าไม่มีข้อผิดพลาด
• เป็นไปได้ที่จะใช้ประเภทที่กำหนดเองเป็นข้อผิดพลาดโดยการใช้วิธีการ Error () ในไฟล์เหล่านั้น ต่อไปนี้คือตัวแปรในตัวอย่างข้างต้นที่ใช้ประเภทที่กำหนดเองเพื่อแสดงข้อผิดพลาดของอาร์กิวเมนต์อย่างชัดเจน
• ลูปสองแถวด้านล่างทดสอบแต่ละฟังก์ชันที่ส่งคืนข้อผิดพลาด โปรดทราบว่าการใช้การตรวจสอบข้อผิดพลาดแบบอินไลน์ในบรรทัด if เป็นสำนวนที่พบบ่อยในรหัส Go
• ถ้าคุณต้องการใช้ข้อมูลในข้อผิดพลาดที่กำหนดเองโดยทางโปรแกรมคุณจะต้องได้รับข้อผิดพลาดเป็นตัวอย่างของประเภทข้อผิดพลาดที่กำหนดเองผ่านการยืนยัน


Credit By :https://gobyexample.com/


ขอบคุณที่เข้ามาดูกันนะคับ


##########ฝากติดตามเพจของพวกเราด้วยนะคับ############