วันอังคารที่ 9 กันยายน พ.ศ. 2557

การเช็คว่า เข้ามาจาก Wifi หรือ 3G



  string UserHostName = Request.UserHostName;  
 string UserHostAddress1 = Request.UserHostAddress;
  string ServerName = Request.ServerVariables["SERVER_NAME"];

   
 string isWifi = "";
     
try {
      GetHostEntry = System.Net.Dns.GetHostEntry(Request.UserHostAddress).HostName;
      isWifi = "true";
      if(GetHostEntry.Contains("asianet.co.th"))
      {
          if (UserHostName.Substring(2, 1) == ".") {
                   isWifi = "false";
          }
          else {
                 isWifi = "true";
          }
      }
 } catch (Exception ex)
{
                        isWifi = "false";

อธิบาย เพราะว่า AIS กับ Dtac ไม่ได้ทำ DNS ไว้ ทำให้เวลา get  System.Net.Dns.GetHostEntry(Request.UserHostAddress).HostName จึงเกิด Error ทำให้เรารู้ว่าเป็น 3G

ส่วน TRUE ทำ DNS ไว้  เพราะฉะนั้น ต้อง check จาก ip ถ้า ขึ้นต้น แค่เลข 2 ตัว เป็น 3G ถ้า 3 ตัว เป็น Wifi จ๊ะ

ใคร งง ตรงไหน ฝากคำถามไว้นะจ๊ะ

วันจันทร์ที่ 8 กันยายน พ.ศ. 2557

ทำให้ Web API รับ การ Cross-Domain Requests จาก Ajax ได้

Web API คือไร ?

เอาง่ายๆ เลยนะ แล้วไว้มีเวลาจะมาเขียน เรื่อง WebAPI แบบละเอียดอีกที

สรุป WebAPI คือ เราเอาไว้ทำ ในการ รับ Request จาก client

โดยในงานนี้ เราจะใช้ Json ในการรับส่งข้อมูลกัน

โดยตามทั่วไปถ้าเราจะรับ-ส่ง request เราจะใช้ ajax ในการรับส่ง
ตัวอย่าง code ดังนี้


var mydata= {

"data": {

"width": "1366",

"heigth": "768",

"map_id": "No",

"DB": "LinkFreeDB"

}

};


$.ajax({

type: "POST",

data: JSON.stringify(mydata),

url: xxx, // แก้เป็น url ของเรา

success: function (data) {

console.log('OK');

}

});

ถ้าภายใน Domain เดียวกัน ก้อจะไมมี ปัญหา แต่ถ้าต่าง Domain ก้อจะเกิด error

ต่าง Domain คือ ?

เช่น           http://www.send.com/sendViaAjax.aspx
request ไปยัง  http://www.receive.com/DoSomeThing/

เนื่องจาก domain ข้างหน้าไม่เหมือนกัน จึงเกิด error

วิธีแก้ คือ

1.เข้าไป Nuget Downlao package ชื่อว่า  Microsoft.AspNet.WebApi.Cors
2. เปิด file ใน App_Start/WebApiConfig.cs. เพิ่ม code ใน WebApiConfig.Register method
 config.EnableCors();

3.เพิ่ม [EnableCors] attribute ใน class ที่ extend ApiController
ตัวอย่าง เช่น
[EnableCors(origins: "http://mywebclient.azurewebsites.net"

, headers: "*", methods: "*")]
 
     
public class MyController : ApiController


4 ถ้าต้องการ รับทุกweb ที่ request มา ก้อให้กำหนดแบบนี้นะครับ
[EnableCors(origins: "*", headers: "*", methods: "*")]

5. กด F5 แล้วทดลองรัน ดูได้เลยครับ เป็นอันเสร็จพิธี ไปกินข้าวก่อนนะจ๊ะ ทุกคน บะบาย


 

วันพฤหัสบดีที่ 4 กันยายน พ.ศ. 2557

เริ่ม Nosql ด้วย mongoDB

mongoDB เป็น Nosql แบบ Documment database เขียนด้วย C++

ลักษณะการเขียน เป็นแบบ Json style

คำศัพท์ 

collections  = Table
documment = row
field = column

คำสั่ง แนว อ่าน

db.user.find ( { name :  "amp"} )


select   *
From user
Where name = "amp"


db.user.find ( { name :  "amp"} , {name :1 , _id : 0})
select   name  -- ค่า 0 คือไม่โชว์ หรือ กำหนด true ,false ก้อได้
From user
Where name = "amp"

คำสั่ง แนว เขียน

db.user.insert( { id : 3 , name : "peck" })

หรือ จะ update

db.user.update (  {id : 3}   ,  { $set: { name : "A" } },  { multi: true })


คำสั่ง ดู ว่ามี collections อะไรบ้าง

show collections

คำสั่ง เปลี่ยน ชื่อ field ทั้งหมด โดยยังให้ object id ยังเป็นตัวเดิม
db.user.update (  {}   ,  { $rename: { id : "idNew" } },  { multi: true })

วันอังคารที่ 2 กันยายน พ.ศ. 2557

แนะนำ Nosql

NoSQL

  • Redis  => Key-value
  • MongoDB => Document
  • Cassandra => Column
  • Couchbase =>  Document
  • Riak => Key-value
  • HBase => Column
  • Neo4j => Graph

  • พบว่ามี NoSQL ที่ได้รับความนิยมมากๆ นั้นประกอบไปด้วย 4 ตัวคือ
    1. MongoDB
    2. Cassandra
    3. HBase
    4. Redis

    โดยสรุปแล้ว

    ในโลกของ NoSQL นั้น ตัวที่ได้รับความนิยมสุดๆ คือ Hadoop นั่นแหละ
    ส่วนตัวอื่นๆ ที่ได้รับความนิยม ก็คือ
    • MongoDB
    • Cassandra
    • Hbase
    • Redis (ปัจจุบัน ยังไม่รองรับ windows 02/09/54)

    วันจันทร์ที่ 1 กันยายน พ.ศ. 2557

    SignalR ตอนที่ 2

    เริ่มต้น ศึกษา SignalR ผ่าน Persistent Connections

    Persistent Connections คืออะไร ?
    Persistent Connections คือ lower-level API ที่ทาง .NET สร้างขึ้นมาเพื่อติดต่อกันแบบใกล้ชิด โดยติดต่อกันในระดับชั้น (layer)ระหว่าง client กับ server แต่เนื่องจาก API ตัวนี้อยู่ในระดับ lower-level จึงไม่เหมาะเอามาใช้งานที่ complex หากต้องการนำไปใช้งานจริง ผู้เขียนแนะนำว่าให้ใช้ Hubs ในการติดต่อจะดีกว่า ส่วนสำหรับ Hubs นั้นผู้เขียนจะเขียนแนะนำในบทความ SignalR ตอนนที่ 3 โปรดติดตามต่อไป เรากลับเข้าเรื่อง Persistent Connections กันดีกว่า มาทำความรู้จักกัน ถ้าจะเริ่มเขียน ใช้งาน SignalR ควรจะทำความรู้จัก กับ เจ้าตัวนี้ก่อน  เพราะการเขียน เชื่อมกัน ง่ายและไม่ซับซ้อน เข้าใจโดยง่าย  โดยตัวอย่างที่จะแสดง จะแสดง การเชื่อมต่อ ระหว่าง หน้า Web และ หน้า Application  มาเริ่มกันเลยดีกว่า

    1. เริ่มจากสร้างโปรเจ็ต เป็นแบบ Web Empty ก่อน แล้วเข้าไป Nuget
    2. Download Microsoft.AspNet.SignalR มาติดที่เครื่องเรา
    3. Add new item ชื่อว่า OwinStartup เข้ามา กำหนด เป็น app.MapSignalR<ChatConnection>("/chat");
    4. สร้าง class chat ขึ้นมา เพื่อคอยจัดการ กับ Message ที่ส่งมาจาก Client ต่างๆๆ (web and app) มาจัดการ command ที่ใช้ในการส่งหากัน โดยอาศัย javascript <script> $(function () {
    var connection = $.connection("/chat");

    connection.start().done(function () {

    console.log("Connected");

    $("#chatWindow").val("Connected\n");

    $("#sendButton").click(function () {

    connection.send($("#messageTextBox").val());

    $("#messageTextBox").val("");

    });

    });

    connection.received(function (data) {

    $("#chatWindow").val($("#chatWindow").val() + data + "\n");

    });

    });
    มาจัดการฝั่ง App สร้างโปรเจ็ตขึ้นมาใหม่ เป็นแบบ Console ล่ะกัน

    เข้า Nuget download Microsoft.AspNet.SignalR.Client

    แล้วเขียน CODE ดังนี้ // Connect to the service var connection = new Connection("http://localhost:47338/chat");
    // Print the message when it comes in
    connection.Received += data => Console.WriteLine(data);
    // Start the connection
    connection.Start().ContinueWith(t => Console.WriteLine("Connected")).Wait();
    string line = null;
    while ((line = Console.ReadLine()) != null)
    {
    // Send a message to the server
    connection.Send(line).Wait();
    }

    เป็นอันเสรฦ็จ พิธี เด๋วว่างๆ จะ up รูปให่นะ ใครตามไม่ทันยังไง เขียน comment ทิ้งไว้ล่ะกัน จะปรับปรุงให้นะครับ



    บายไปล่ะ









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

    SignalR ตอนที่ 1

    วันนี้เรามาทำความรู้จัก กับ SignalR กันดีก่า

    SignalR คืออะไร ?

    SignalR คือ library หนึ่ง ของ ASP.NET ที่เอาไว้จัดการงานแบบ Realtime โดยเขียน Code ไว้ในส่วนกลางแล้ว มี Client มา Connect Register ลงทะเบียนเอาไว้ แล้วเมื่อมี User มาแจ้ง update ข้อมูล Code ที่ถูกเขียนไว้ในส่วนกลางจะทำหน้าที่รับและกระจายข้อมูลไปยัง ทุกๆ Client ที่ได้มีการลงทะเบียนไว้

    SignalR เหมาะสำหรับงานประเภทไหน โดยส่วนตัวแล้วผู้เขียนคิดว่า SignalR เหมาะสำรับงานแบบที่ต้องการความ Realtime ในการ display data ยกตัวอย่าง เช่น
    1. งานประเภท logistics ในการรับข้อมูลพิกัด lat long แล้วนำวาดบนแผนที่
    2. งานประเภท Business แสดง Graph ข้อมูลแบบ Realtime
    3. งานประเภท Networks Monitor ไว้แสดงข้อมูล ปริมาณ traffic การใช้งานข้อมูล
    4. งานประเภท Chat Program ไว้คุยกันผ่านหน้า Web
    ในการใช้งาน library SignalR นั้น เราสามารถใช้งานผ่าน SignalR API ที่ทาง .NET ได้เตรียมไว้ให้ โดยการสร้าง remote procedure connection (RPC) ด้วยการเรียก javascript function ในส่วนของ client browser หรือจะเป็นการ connect แบบ Server to Server โดยผ่าน code จาก asp.net แบบ server-side .NET code โดยสามารถใช้งานผ่าน dll ที่ทาง .NET ได้จัดเตรียมไว้ให้

    SignalR และ WebSocket
    SignalR ใช้เทคโนโลยี WebSocket ในการส่งผ่านข้อมูลออกไปให้ปลายทางที่ available พร้อมรับข้อมูล และส่งผ่านกลับอีกครั้งเมื่อมีความจำเป็นต้องเรียกอีกครั้ง โดยที่ทาง developer ไม่ต้องเขียน code implement เอง code ในส่วนนี้ได้ถูกจัดการให้อย่างพร้อมใช้งาน ที่สำคัญ code ที่ถูกเขียนขึ้นจะไม่ต้องกังวลเกี่ยวกับการเขียนเรียกเส้นทาง (Path) ของแต่ละ client ที่ Register เอาไว้ เพราะว่า SignalR จะทำการค้นหาและ Update ข้อมูลปลายทางของเครื่อง Client ที่รับข้อมูลโดยอัตโนมัติ

    ด้วยเหตุผลที่กล่าวมาข้างต้น ไม่มีเหตุผลเลยที่ทำไม เราถึงจะไม่เลือกใช้ SignalR มา apply ในงานของเรา แล้วคุณจะรู้สึกสนุก ชอบในความง่ายและหลงรัก ใน SignalR