November 14, 2014

ความแตกต่างระหว่างคำว่า Tire กับ Layer

Difference between Tier and Layer

สิ่งหนึ่งที่เป็นความสับสนสำหรับผู้เริ่มต้น. อย่างน้อยเราก็คิดว่าเหมือนกัน. แต่มันไม่เหมือนกัน. Tier บอกถึงว่าทำงานคนละ Hardware. หมายความว่า components นั้นทำงานแยกกันคนละเครื่อง. แต่ในกรณีของ Layer นั้น components นั้นทำงานในระบบเดียวกัน

October 29, 2014

วิธีลัดในการสร้างไฟล์ C# class จาก JSON responses

Quckly Generate C# Classes from JSON Responses



วีดีโอสั้น ๆ แสดงวิธีการที่ developer ที่ใช้ Web Essentials Visual Studio Plugin, และใช้ quick tip กับ quickly generate typed C# classes โดยใช้การทำงานร่วมกับ JSON Responses.  โดนวิธีนี้เป็นวิธีที่สะดวกในการสร้าง application ที่เรียกใช้ REST API ที่ return ค่าเป็น JSON responses.

September 1, 2014

SOAP Service Architecture

SOAP เป็นช่องทางสำหรับส่งข้อมูล Web Services messages บนเครือข่าย Internet/Internet. มันเป็นส่วนหนึ่งของมาตรฐานที่กำหนดโดย W3C. SOAP เป็นหนึ่งทางเลือกจาก Representational State Transfer (REST) และ JavaScript Object Notation (JSON).

SOAP มีอยู่ 2 ส่วน:
     1. optional header มีสำหรับข้อมูลเกียวกับการ authentication, encoding ของ data, หรือวิธีรับรู้ข้อมูลของ SOAP message ที่ใช้จัดการกับ message.
     2. body ที่มี message. ที่ messages สามารถระบุการใช้งาน WSDL specification.

SOAP ปกติใช้ HTTP, แต่ protocols อื่นเช่น Simple Mail Transfer Protocol (SMTP) ซึ่งสามารถใช้ได้. SOAP สามารถถูกใช้แลกเปลี่ยนเอกสารทั้งหมดหรือเรียกใช้ remote procedure.

JSON to JSONP bypass Same-Origin Policy

บทนำ
บทความเก่าของเจ้าของบทความ (Prepare a JSON Web Service and access it with JQuery), ได้อธิบายเกียวกับ JSON, วิธีที่จะ return JSON data จาก Web Service, และวิธีใช้ JSON-enabled Web Service โดย JQuery. โดยในบทความนี้, จะอธิบายวิธีใช้งาน JavaScript Object Notation with Padding (JSONP), ที่เป็น extended concept จาก JSON, สามารถถูกใช้งานเพื่อแก้ปัญหาสำหรับ cross domain.

คืออะไรและใช้ทำไม JSONP?

AJAX เป็น key technology ใน web 2.0 ที่เริ่มใช้ในวงกว้างใน web sites. AJAX ใช้ XMLHttpRequest client side API เพื่อติดต่อกับ server แบบ background. ไม่ว่าอย่างไร, สิ่งที่ไม่อนุญาตให้ทำการสื่อสาร cross domain เนื่องจากเหตุผลด้าน security. JavaScript Object Notation with Padding (JSONP) เป็นทางที่ลดช่องว่าง JSON data จาก external domains. ซึ่งเป็นวิธีที่ดีกว่าและเขาใจได้ง่ายกว่าวิธีอื่น ๆ (เช่น web proxy และ IFrame) เพื่อเอาข้อมูลจาก external domain.

Same-Origin Policy

นโยบาย Same-origin เป็นconcept ในแบบ browser-side programming languages (เช่น JavaScript) กับการอนุญาตให้เข้าถึง resources ในเว็บไซต์เดียวกัน (domain เดียวกัน) แต่ป้องกันการเข้าถึง resources จากต่าง domains. ที่เหนือกว่านโยบาย same origin, ซึ่งมีสองวิธีที่นิยมใช้กัน:

ใช้ Proxy Web Service

XMLHttpRequest (ใน AJAX) ไม่อนูุญาตให้เรียก cross domain, โดยปกติใช้วิธีการใช้ proxy Web Service เพื่อ access third party data. ถ้าคุณมีเว็บไซต์โดเมน www.mydomain.com และคุณต้องการ access data จาก domain อื่นเช่นเรียก www.thirdpartydomain.com. โดย AJAX, คุณไม่สามารถเข้าตรงจาก Web Service บน www.thirdpartydomain.com, แต่คุณสามารถเขียน Web Service จาก domain ของคุณเพื่อเข้าไปเอาข้อมูลจาก www.thirdpartydomain.com. ที่แสดงในรูปที่ 1:


Figure 1: การใช้ proxy Web Service เพื่อเข้าถึงข้อมูลจาก different domain
นี้เป็นวิธีการทำงานของ XMLHttpRequest เรียก Web Service (จาก the proxy Web Service) ใน domain ของตัวเองและจากนั้น proxy Web Service เรียก Web Service ที่แท้จริงต่อไปที different domain. แต่วิธีที่ง่ายและใช้ในวงกว้างในการแก้ปัญหา, มันใช้ Web Service สองครั้ง, ซึ่งทำให้ล่าช้า. ดังนั้นทุก ๆ การเรียก external Web Service แล้ว requires กลับมาที่เว็บ Web Service ของเรา, ซึ่งจะทำให้ server ของเลามีภาระกับ thread เพื่อ process มากขึ้น.

August 29, 2014

JSON กับ JSONP

คนที่ทำเว็บหลายคนคงรู้จักกับ JSON บ้างไม่มากก็น้อย ซึ่งมีคู่แข่งอย่าง XML ซึ่งเกิดมาก่อนซึ่งเราไม่พูดถึงในที่นี้ แต่ผมจะอธิบายความแตกต่างระหว่าง JSON และ JSONP ซึ่งทั้งสองใช้สำหรับรับส่งข้อมูลระหว่าง server กับ client (browser, app ต่าง ๆ) ซึ่งทั้งสองมี Syntax เหมือนกัน แต่สิ่งที่ทั้งสองแตกต่างกันคือ JSON ออกแบบมาเพื่อทำงานใน web ที่อยู่ domain (url) เดียวกัน ส่วน JSONP ใช้สำหรับส่งข้อมูล cross domain (คนละเว็บ) และซึ่งมีลักษณะแตกต่างกันเล็กน้อย ดังรูปด้านล่าง


August 6, 2014

Microsoft SQL Server 2014 Express

ปัญหาโลกแต่สำหรับคนที่ชอบของฟรี เพื่อการทดสอบหรือการใช้งานขนาดเล็กคือมันเข้าใจยาก จากเมือสองปีที่แล้ว Microsoft ได้ออก SQL Server 2012 และตอนนี้ได้ออก version ใหม่ 2014 ซึ่งระยะการออกผลิตภัณฑ์เดียวนี้มันสั้นเหลือเกินถ้าไม่เกลงใจคงออกทุกปี เหมือน Visual Studio แต่สุดท้ายใครอยากอัพเดทหรือไม่ก็ตามอัธยาศัย แต่ถ้าไม่ได้ใช้งานและอยากลองของก็ติดตั้งกันได้ แต่ต้องเลือกให้ถูกต้องเพราะตอนดาวน์โหลดมันสับสนเหลือเกิน



Microsoft SQL Server 2014 Express เป็นเวอร์ชั่นฟรี, feature-rich edition ของ SQL Server ใช้สำหรับการศึกษา, การพัฒนา, การใช้งานบน desktop, web และ server ขนาดเล็ก, และสำหรับการ redistribution โดย ISVs. SQL Server 2014 Express ออกมาพร้อมกับ version เต็มของ  SQL Server 2014 Management Studio แทนที่จะเป็น SQL Server 2014 Management Studio Express.

คุณสามารถ download ได้ตาม edition ของ Express จากลิ้งด้านล่าง:
http://www.microsoft.com/en-us/download/details.aspx?id=42299

July 21, 2014

Partial Classes

มีหลายเหตุที่ต้องแยก class (partial class) ได้ตามความซับซ้อนตามที่ต้องการ:
  • เมื่อทำงานกับโปรเจ็คขนาดใหญ่, การแยก class ไว้ในหลายไฟล์เพื่อให้โปรแกรมเมอร์สามารถทำงานกับ class นั้นได้ในเวลาเดียวกัน.
  • เมื่อทำงานกับการสร้าง code โดยโปรแกรม (automatically generated source), code สามารถถูกเพิ่มเข้าไปใน class โดยไม่ต้องสร้าง source file ใหม่. Visual Studio ใช้วิธีการนี้เมื่อใช้สร้าง Windows Forms, Web service wrapper code, and so on. คุณสามารถสร้าง code ที่ใช้งาน class โดยไม่ต้องแก้ไขาไฟล์ที่ถูกสร้างโดย Visual Studio.
  • แยกหนึ่งที่มีความซับซ้อน, ให้ใช้ modifier keyword เป็น partial , ดังเช่นด้านล่าง:
public partial class Employee
{
    public void DoWork()
    {
    }
}

public partial class Employee
{
    public void GoToLunch()
    {
    }
}
partial keyword แสดงให้เห็นว่าส่วนอื่น ๆ ของ class, struct, หรือ interface สามารถสร้างเพิ่มได้ใน namespace. ทุกอยางภายในต้องใช้ partial keyword. ทุกอย่างภายในต้อง available ตอน compile time ในรูปแบบ final type. ทุกส่วนต้องมี accessibility ที่เหมือนกัน, เช่น publicprivate, และอื่น ๆ.
ถ้ามีบางส่วน declared เป็น abstract, นั้นทำให้ทั้งหมดเป็น abstract. ถ้าหลาย ๆ ส่วนกำหนดเป็น sealed, นั้นทำให้ทั้งหมดของ type ที่มีอยู่เป็น sealed. ถ้าทุกส่วนของกำหนดเป็น base type, นั้นทำให้ทั้งหมดของของ type ที่ inherits จาก class ทั้งหมด.

July 9, 2014

มีอะไรใหม่ใน ASP.NET Web API 2.2รู้

 ณ. 30 มิถุนายน 2557

ก่อนอื่นขอออกตัวก่อนว่าไม่ได้เขียน Web API อย่างเป็นกิจลักษณะ แต่ช่วงหลังต้องไปซัพพอร์ทชาวบ้านข้างนอกก็เริ่มความเห็นความสำคัญของ Web API ขึ้นมาทันตาเพราะมันเป็นเหมือนโครงสร้างพื้นฐานที่ทำให้คนอื่นสามารถเขาไปต่อเติมในงานของตนเองได้ตามใจชอบ ที่เป็นกันก็เช่น API ของ Google (maps, plus, docs เป็นต้น), Facebook, Twitter  และเจ้าอื่น ๆ อีกมากมายที่ให้บริการทั้งแบบเปิดสำหรับคนทั่วไป และแบบปิดเฉพาะองค์กร โดยคำว่า API ย่อมาจาก Application Programming Interface ซึ่งเป็นคำกลาง ๆ สำหรับโปรแกรมที่เป็นตัวช่วยให้โปรแกรมอื่นทำงานได้ตามที่ต้องการ แล้วรวมคำว่า Web เป็น Web API ก็เป็น API ที่ทำงานแบบ Web หรือผ่าน HTTP ซึ่งก็มีหลายตัวที่นิยม ก็เป็น Web service (แล้ว Microsoft มาพัฒนาต่อก็เป็น WCF -- Windows Communication Foundation) และ RESTful (แล้ว Microsoft มาพัฒนาต่อเป็น Web API ที่เราจะพูดถึง)


ฟังชั่นใหม่ใน ASP.NET Web API 2.2

OData v4

เราเพิ่มการรองรับ OData v4 protocal ใน release นี้. มีบางฟังชั่นที่เพิ่ม/เปลี่ยน อยู่ตามรายการด้านล่าง:

June 21, 2014

สิ่งที่ควรรู้เกี่ยวกับ Android Studio

คือมันกำลังพัฒนาอยู่ เพราะฉะนั้นหากมันทำงานไม่ได้ หรือแจ้ง ERROR เป็นเรื่องปกติ

Android Studio (Preview) 0.6.1

1. เมื่อติดตั้งเสร็จเรียบร้อย เปิดใช้งานโปรแกรมสร้าง Project แล้วคุณจะเจอ ERROR แรก ต้อนรับคือ


Error:Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at http://gradle.org/docs/1.10/userguide/gradle_daemon.html
Please read below process output to find out more:
-----------------------
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

June 20, 2014

Microsoft Certification - Programming in C# 70-483

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

April 15, 2014

ASP.NET MVC แสดงซื่อ Controller หรือ Action ใน View

หากคุณต้องการแสดงซื่อ Controller หรือ Action ปัจจุบันที่กำลังเรียกใช้อยู่สามารถใช้คำส่งได้เลย ความจริงจะเรียกว่าคำสั่งก็คงไม่ถูกนัก ควรเรียกว่า object นี้หน้าจะถูกว่าเพราะมันอยู่ ใน HttpContext object ครับ คุณยังสามารถเรียกค่าของ id ได้ด้วยเพียงเปลี่ยนค่าในเครื่องหมายคำพูด ถ้าเรียกให้ถูกต้องก็คือ array key เป็น id ดังตัวอย่างด้านล่าง

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"]

@HttpContext.Current.Request.RequestContext.RouteData.Values["action"]

@HttpContext.Current.Request.RequestContext.RouteData.Values["id"]


March 28, 2014

เพิ่ม class attribute ใน @Html.EditorFor

หาคุณพยายามใส่ class attribute ใน Html.EditorFor แบบด้านล้าง คำตอบคือทำไม่ได้

@Html.EditorFor(x => x.Created , new {@class="one"})

ต้องเปลี่ยนเป็น Html.TextBoxForModel แทน

@Html.TextBoxForModel(x => x.Created, new { @class = "date" })

March 6, 2014

Mobile emulation in Google Chrome

mobile web ค่อย ๆ พัฒนาขึ้นเรื่อย ๆ ในความสามารถของ application, สิ่งที่ทาง google หวังว่าจะรวมการ debug กับการ development บนเครื่องคอมพิวเตอร์. DevTools รวมการ support หลาย ๆ feature ที่สามารถช่วยให้คุณสามารถทำงานได้อย่างสะดวกในงานส่วนี้ 
Note: บางส่วนของเอกสารอาจไม่ได้อยู่ใน Chrome version ปกติ. ถ้าคุณไม่สามารถใช้งานได้. แนะนำให้ใช้ Chrome Canary ที่มี version ล่าสุดของ DevTools.
Chrome Canary ที่มีจำนวนของ mobile emulation tools ที่สำคัญที่สามารถเข้าถึงได้ใน Emulation panel ที่อยู่ใน Settings panel. วิธีเปิดการใช้งาน:
  1. เปิด Settings panel ภายใน DevTools.
  2. ทำการเปิด "Show 'Emulation' view in console drawer." ในหน้าส่วนของ Settings ที่รูปฟันเฟือง
Enabling emulation

February 20, 2014

ASP.Net – วิธีการ map virtual path เป็น physical path

ก่อนอื่น, มาทำความเข้าใจว่าอะไรคือ physical path และ virtual path. ตรงนี้คือตัวอย่าง web application project แบบง่าย ๆ . ภายใน the project, มี page หนึ่งเรียกว่า PageInRootDirectory.aspx. อันดับแรกต้องเข้าใจว่าอะไรคือ root directory หรือ root web application directory.

project นี้สร้างบน physically ภายใน the hard disc. วิธีที่เราสามารถหา folder ภายใจ project ที่ ถูกสร้างใน physical project? จากนี้, คลิกขวามใน folder และเลือก Open Folder in Windows Explorer. มันจะเปิด physical folder เมื่อ project นี้ได้สร้างเรียบร้อย. ถ้าเราดูว่า project ที่สร้างอยู่ที่ไหน, เราสามารถเห็นว่ามนจะแสดงใน D:/SampleWeb/SampleWeb.



February 10, 2014

RenderPartial vs RenderAction vs Partial vs Action in MVC Razor


นี้เป็นวิธีการในการ render partal view ใน MVC Razor. หาย ๆ นักพัฒนาคิดความสับสนว่าใช้งานอย่างไร ระหว่าง RenderPartial หรือ RenderAction หรือ Partial หรือ Action helper methods จากการ render ตัว partial view. ในบทความนี้ จะอธิบายความแตกต่างระว่าง @Html.RenderPartial, @Html.RenderAction, @Html.Partial และ @Html.Action



@Html.RenderPartial
1. method นี้ ผลลัพท์จะเป็นการ directly written แบบ Http response stream หมายความว่ามันถูกใช้เหมือนกับ TextWriter object เช่นเดียวกับการใช้ในา webpage/template ปัจจุบัน
2. ตัว method จะ return void
3. ใช้งานง่ายโดยไม่ต้องสร้างตัว Action ใด ๆ ใน Controller
4. method @Html.RenderPartial มีประโยชน์ในการใช้เมื่อแสดง data ใน partial view in already in the corresponding view model.

         @{ Html.RenderPartial("_Comments"); }

5. method นี้ เร็วกว่า method @Html.Partial  โดย result ถูกส่งข้อความกับเป็น response stream ทำให้ทำงานได้เร็ว