\

Facebook


วันอังคารที่ 22 สิงหาคม พ.ศ. 2560

วิธีปลด Table Lock ใน SQL SERVER 2008R2


เคยเจอไหม เวลา SELECT ข้อมูลจาก database เเล้วมันหมุนไม่หยุด ไม่ใช้เพราะ query ทำงานนานเเต่อาจเป็นเพราะ table กำลังโดน lock กล่าวคือ process ก่อนหน้านั้นยังทำงานไม่เสร็จ ผู้ใช้คนอื่นจึงยังแตะต้อง ตารางนัน้ไม่ได้ แล้ววิธีปลด lock ต้องทำยังไงหล่ะ

กันก่อนแก้ 

ป้องกันการล็อกตารางในโดยใช้คำสั่ง WITH (NOLOCK) ถ้าใช้  SQL Server 2008R2 ก็ใช้คำสั่งสั้นๆ (NOLOCK) ตามหลังการ SELECT ยกตัวอย่างเช่น


SELECT TOP 100 * FROM dbo.product WITH (NOLOCK)


ถ้าล็อคไปแล้วแก้ไขโดย ค้นหาก่อนว่ามี PROCESS ไหนจองอยู่จากตาราง sys.dm_tran_locks เช่น


SELECT * FROM sys.dm_tran_locks

  WHERE resource_database_id = DB_ID()

  AND resource_associated_entity_id = OBJECT_ID(N'dbo.product');


ถ้ามี record เเสดงว่า process จอง Table อยู่ จัดการมันซะ มองหา process ID แล้วรันคำสั่ง


KILL {PROCESS_ID}

ลองซีเล็กอีกที พบว่าไม่เหลือเร็คคอดละ
จบงาน

[VS 2017] ReportViewer เทพออกรายงานตลอดกาลของ .Net


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

มันก็โอเคแต่เสียเวลาสัสๆ ทั้งเวลาเขียนโปรแกรม และเวลาตอนออกเอกสาร ดังนั้นเพื่อแก้ปัญหาเรื่องเวลา ถ้าใช้ .Net ผมอยากแนะนำให้รู้จัก ReportViewer แล้วชีวิตจะง่ายขึ้น

มันเป็นโมดูลหนึ่งของ Reporting Service ที่อยู่ใน .Net ตั้งเเต่ยุค Web Form จนมาถึงยุค MVC แล้วโมดูลนี้ก็ยังไม่ตาย มีคนเอามาประยุกใช้โดยเอา MVC ครอบ WebForm อีกทีหนึ่งเพื่อใช้งาน module ReportViwer ซึ่ง version ปัจจุบันที่ผมคือ 14.0 ซึ่งหน้าตามันจะดูขาวๆโมเดิลขึ้นมาหน่อย

ชอบตรงไหน 

ตรงที่โยน List, DataTable เข้าไปใน datasource ตารางก็โพล่แล้ว จัดว่าง่าย
ตรงที่มีปุ่ม download Excel หรือ PDF มาให้เลยไม่ต้องเขียนเพิ่ม

เกลียดมันที่ 

ต้องใช้ไฟล์ rdlc เป็น template เอกสาร แล้วไอ้ไฟล์นี้ต้องแก้ใน Visual Sutio ผ่าน Report Designer
ต้องมี Model มารองรับทุก DataSet ที่แสดงในรายงาน

เริ่มเลยขี้เกียจพิมพ์!! 

1 ไปที่โปรเจค์ MVC สร้าง Controller มาใหม่ สร้าง Action มาใหม่แล้วสร้าง View ว่างๆมา บลาๆๆ
2. สร้างโฟลเดอร์ใหม่ใต้โปรเจคชื่อ Report ข้างในนั้น Add New Item.. เลือก WebForm C# ตั้งชื่อว่า ViewReport.aspx
3. ไปที่ package management พิมพ์

Install-Package Microsoft.ReportingServices.ReportViewerControl.WebForms

หรือ NuGet :
"ReportViewerControl.WebForms"

4. ไปที่ไฟล์ ViewReport.aspx ใส่โค๊ดที่หัว


<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>


5.ใส่ ScriptManagerControl
6. เพิ่มโมดูล ReportViewer


<rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote">

<ServerReport ReportPath="" ReportServerUrl="" />

</rsweb:ReportViewer>


คราวนี้เราจะ design ไฟล์ template แล้วถ้าใช้  VS 2017 เหมือนผมให้ถามกูเกิ้ลว่า "Microsoft Rdlc Report Designer for Visual Studio" แล้ว download มา install

สร้าง RDLC กัน

1. Add new Item.. > ค้นหา Report เเล้วเลือก Report ตั้งชื่อไฟลล์ว่า reportTemplate.rdlc 
2. เพิ่ม Add New Item.. > Visual C# > Data > DataSet ตั้งชื่อ dsMapper.xsd แล้วสร้าง column ใหม่สองอันชื่อ firstname (string) , surname (string)
2. ดับเบิ้ลคลิกไฟล์ rdlc ใต้ folder DataSet กดสร้างไหม เลือก dsMapper มาเป็น DataSource
3. เเล้วเพิ่มตารางลงในเอกสร้าง insert > table ลากคอลัมจาก folder DataSet มาวาง จัดทรงให้สวย



แสดงรายงาน ก้อปโค๊ดข้างล่าง ไปไว้ใน ViewReport.aspx.cs


DataTable table = new DataTable();

            table.Columns.Add("FirstName", typeof(string));

            table.Columns.Add("SurName", typeof(string));



            // Here we add five DataRows.

            table.Rows.Add("ชิน", "ชยุต");

            table.Rows.Add("Chayut", "Chin");

            table.Rows.Add("Hydralazine", "Christoff");

            table.Rows.Add("Combivent", "Janet");

            table.Rows.Add("Dilantin", "Melanie");



            if (!IsPostBack)

            {

                string ReportFile = HttpContext.Current.Request.PhysicalApplicationPath

                + "Report\\reportTemplate.rdlc";

                ReportViewer1.LocalReport.ReportPath = ReportFile;

              



                var rp = new ReportParameter("rp_name", "หัวเรื่อง".ToString());

                ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp });

              

                /// add more sheet

                ReportDataSource rds = new ReportDataSource("DataSet1", table);

                ReportViewer1.LocalReport.DataSources.Add(rds);

                ReportViewer1.LocalReport.Refresh();

            }


พอกด รันโปรเจค หน้ารายงานจะขึ้นละ


อยากให้ดู web.config ส่วนที่เพิ่มมาคือ


ทีนี้ถ้าอยากใช้ใน MVC ก็ครอบ ViewReport.aspx ด้วย iFrame ซะ จำไอ้ View ว่างๆข้อแรกได้ไหม ใส่โค๊ดข้างล่างนี้ลงไป เช่น


<iframe src="~/Report/ViewReport.aspx?@ViewBag.queryStr" width="100%" height="410px"></iframe>


จบงาน..

วันอังคารที่ 15 สิงหาคม พ.ศ. 2560

[ASP.NET] วิธีเข้ารหัส connectionStrings ในไฟล์ web.config ให้อ่านไม่ออก


ปกติหลังจากเราสร้างเว็บแอปเสร็จเรียบร้อยแล้ว เมื่อจะส่ง deploy สิ่งหนึ่งที่ควรระมัดระวังคือ username และ password ของ DB Account ใน connection string ที่อยู่ภายในไฟล์ web.config ที่โชว์ทั้งตัวเลขตัวอักษรอย่างไม่เกรงใจใคร เรียกได้ว่าเมื่อมีใครเข้ามาแอบเปิดไฟล์นี้ดูก็สามารถขโมยข้อมูลเหล่านี้ออกไปได้อย่างง่ายดาย วิธีป้องกันคือการเข้ารหัสมันซะ

สคลิปที่เราใช้มีชื่อว่า aspnet_regiis ซึ่งซ่อนตัวอยู่ภายในโฟล์เดอร์ของเฟรมเวิร์ค 4.0 ตามพาทนี้ C:\Windows\Microsoft.NET\Framework\v4.0.30319 ถ้าไม่เจอก็ให้ install .NET framwork 4 ก่อนครับ

ไปเพิ่ม path ใน environment ก่อน จะได้เรียกสคิปได้


เข้าไปที่ Control Panel > System and Security > System เลือก Advanced System settings แล้วเลือก Environment Variables มองหาพาแนล System variables แล้วแก้ไขค่า Path เพิ่ม C:\Windows\Microsoft.NET\Framework\v4.0.30319\ เข้าไป


หลังจากนั้นเปิด command line ขึ้นมาด้วย Administrator แล้วใส่คอมมานนี้ลงไปเพื่อเข้ารหัส section "connectionStrings" ที่อยู่ในไฟล์ web.config


aspnet_regiis -pef "connectionStrings" "D:\PathTo\File"


อย่าลืมเปลี่ยนพาท "D:\PathTo\File" ให้เป็นพาทจริงที่บรรจุไฟล์ .config


หลังจากนั้นถ้าขึ้นข้อความว่า Succeeded! แปลว่าเข้ารหัสสำเร็จ ทดลองเปิดไฟล์ดูจะพบว่าถูกเพิ่มส่วน EncryptedData เพื่อใส่ CipherData ขึ้นมาเป็นอันเสร็จสิ้น

ถ้าต้องการถอดรหัสคืน ทำไง?

อย่างง่าย แค่พิมพ์ command นี้ลงไป


aspnet_regiis -pef "connectionStrings" "D:\PathTo\File"


จบ

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

แก้ไข PDF ออนไลน์ไม่ต้องพึ่งโปรแกรมเสียเงิน



เป็นความอารมณ์เสียอย่างหนึ่งเมื่อต้องแก้งาน PDF แล้วเครื่องเราไม่มี software สำหรับแก้ ซึ่งตัวเสียเงินดีๆเห็นจะเป็น Acrobat Reader Pro แต่ตามสเตปโปรแกรมเมอร์ไส้แห้ง ใช้ของฟรีที่ดีต่อไป วันนี้จะมาแนะนำเว็บแก้ไขไฟล์พีดีเอฟออนไลน์แบบดีงามพระรามเก้า

Online PDF Editor ( BETA )

สามารถเข้าใช้งานได้ที่หน้าเว็บ https://www.sejda.com/pdf-editor


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

ลงรายละเอียดเครื่องมือเเต่ละตัว

1. Text : ใส่อักษร
2. Link : ใส่ลิ้งสู่เว็บไซด์ เป็นกรอบเหลี่ยม คลุมส่วนที่จะคลิก อันนี้ผมบั๊ค มันไม่เป็นสี่เหลี่ยมปกติ
3. Forms : เพิ่มเครื่องหมาย ถูก ผิด จุด
4. Image : เพิ่มรูป
5. Sign : เพิ่มลายเซ็น ก็รูปอีกนั้นแหละ
6. Whiteout : ระบายขาวส่วนที่เลือก
7. Annotate : เพิ่มลักษณะอักษร เช่น ขีดกลาง
8. Shapes : เพิ่มรูปวงกลมหรือสี่เหลี่ยม แก้สีได้ด้วย เเต่มีสีให้เลือกจำกัด

ข้อดี 
1. ไม่ต้องลงโปรแกรมให้หนังเครื่อง
2. เครื่องมือเเก้เอกสาร 
3. คุณภาพไฟล์ไม่ถูกลดทอน

ข้อเสีย
1. ต้องต่ออินเตอร์เน็ตทุกครั้งเวลาใช้งาน
2. ใส่ annotation ไม่ได้
3. Object ที่ใส่จะกลายเป็นรูปลอยบนเอกสาร


เครื่องมือนี้ มีไว้ก็จบงานได้ ผมมักใช้ whiteout เพื่อระบายเก็บบางส่วนที่ไม่ต้องการแสดง จบเเล้วกด save เพื่อดาว์นโหลดไฟล์เอกสารได้เลย 

วันพุธที่ 2 สิงหาคม พ.ศ. 2560

4 วิธี รับค่าจาก Form ใน ASP.NET MVC แบบมือโปร



Form Post คือ โครตพื้นฐานการส่งข้อมูลบนเว็บไซด์แล้ว โดยฟอร์มจะทำหน้าที่สร้าง FormData ขึ้นมาเพื่อ POST กลับไปยัง SERVER

1. สร้างตัวแปรมารองรับใน controller : อันนี้คือวิธี basic ที่สุดโดยการตั้งชื่อตัวแปรให้ตรงกับชื่อ input การทำแบบนี้ถ้ามีการเปลี่ยน Model คุณก็ต้องมาเพิ่มหรือลด ตัวแปรใน controller เอง ไม่แนะนำ

ตัวอย่าง

[HttpPost]
public ViewResult Edit(string FirstName)
{
    ...
}


2.  สร้าง Interface / Class มารองรับ : ก็คือการสร้าง Model ขึ้นมา โดยตั้งชื่อตัวแปรให้ตรงกับชื่อ input แล้วโมเดลก็จะถูก Blinding อัตโนมัติ อันตรายของวิธีนี้คือ ถ้าคุณเล่นเอาโมเดลที่รับจากฟอร์ม โยนไป Database ตรงๆ โอกาสที่จะถูกอัพเดตผิดฟิลล์ก็เกิดขึ้น เช่น ในโมเดล มีฟิลล์ TotalAmount แต่ไม่มีการรับค่าจากฟอร์ม แฮกเกอร์ก็สามารถส่งค่าเข้ามาได้ หากเราข้ามการตรวจสอบไปก็อาจถูกอัพเดต TotalAmount ได้โดยที่ไม่รู้ตัว

ตัวอย่าง

[HttpPost]
public ViewResult Edit(User user)
{
    // ...
}

ฝั่ง View หน้าตาเป็นแบบนี้

@using (Html.BeginForm()) {
   
     @Html.EditorFor(model => model.FirstName)
     @Html.EditorFor(model => model.LastName)
        
    
}

สร้างโลเดลตามฟอร์ม

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int TotalAmount { get; set; }
}


ลองเอา Interface ไปรับค่าจากฟอร์มแทน แต่ตัว Class ให้สร้าง Property ที่มากกว่าก็สามารถแก้บัญหานี้ได้ระดับหนึ่ง


[HttpPost]
public ViewResult Edit(IUserInputModel user)
{
    // ...
}

อินเทอเฟสหน้าตาแบบนี้

public interface IUserInputModel
{
    string FirstName { get; set; }
    string LastName { get; set; }
}

ส่วนโมเดลจริง

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int TotalAmount { get; set; }
}

3. หรือตั้งค่า property ของ class เป็น ready only เพียงเท่านี้ ก็ไม่สามารถ set ค่าลง model class ได้ละ เเต่มันใช้ได้กับ MVC  4 , 5  ขึ้นไป


public class User 
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [ReadOnly(true)]
    public int TotalAmount { get; set; }
}

4. ใช้ [Bind] attribute :  วิธีนี้เราสามารถเลือกเอาเฉพาะบางฟิลไปอัพเดตได้ หรือไม่เลือกบางฟิลล์ได้เช่นกัน เป็นวิธีที่เราจะเห็น จำนวนฟิลล์ชัดเจน

ตัวอย่าง แบบเลือกเอาเฉพาะฟิลล์

[HttpPost]
public ViewResult Edit([Bind(Include = "FirstName,LastName")] User user)
{
    // ...
}

แบบไม่เลือกบางฟิลล์

[HttpPost]
public ViewResult Edit([Bind(Exclude = "TotalAmount")] User user)
{
    // ...
}

เป็นอันเสร็จสิ้นครับ ที่มาของบทความ http://odetocode.com/blogs/scott/archive/2012/03/11/complete-guide-to-mass-assignment-in-asp-net-mvc.aspx

วิธี HOST ไฟล์ JavaScript หรือ CSS ไว้บน DropBox แบบฟรีๆ


ผมเขียนบล็อกบน Blogger มีปัญหารที่เจอประจำคือ ไฟล์ JS หรือ CSS ที่ผมปรับแต่งเพิ่มเติมนั้น ไม่สามารถอัพโหลดขึ้นไปรวมกับทรีมได้ ผมต้องใส่ลิ้งจากเว็บนอกแทน ซึ่งมันกฌดีที่ไม่ต้องหนักโหลดที่หน้าเว็บเรา แต่ปัญหาคือเมื่อไหร่ที่เว็บนอกตัวนั้น down ไปเว็บเราที่มี dependency กับเค้าจะมีอาการโหลดไม่ขึ้น หรือเว็บช้าลากดิน งานนี้ต้องแก้

แล้วจะเอาไฟล์ไปฝากไว้ที่ไหนดีหล่ะ

โฮสของตัวเองก็ไม่มี ครั้นจะเอาไปวางบน Cloud Storage ก็เปลืองตังโดยใช้เหตุ เพราะคราวเล่นคิดระยะเวลาที่ request ไฟล์ด้วยในการคิดเงิน ผมเลยเลี่ยงมาใช้เว็บฝากไฟล์ฟรีแทน ซึ่งที่ดังเเล้วเป็นที่รู้จักตอนนี้ น่าจะเป็น DropBox

จัดไป DropBox !!

อัพโหลดไฟล์ขึ้นไปเลยครับ เเต่ขอเป็นใน Folder ว่างๆ เพราะเราจะทำเป็น Public Folder เพื่อให้สิทธิคนทั่วไปเข้าถึงได้

หลังจากนั้นคลิกขวาที่ไฟล์ เลือก "Shared" 

แล้วกด "Copy Link"

แล้วเปลี่ยน "www" ให้เป็น "dl" แทนอย่างเช่น

https://www.dropbox.com/s/w39yc90dtkxlq3o/csharp.js?dl=0
เปลี่ยนเป็น
https://dl.dropboxusercontent.com/s/w39yc90dtkxlq3o/csharp.js



เพียงเท่านี้ เราก็สามารถใช้ ไฟล์ได้อย่างสบายใจแล้ว โดยไม่มีติดขัด ถ้าเราไม่ทำ account ของ dropbox ถูกระงับซะก่อนนะ

ทดลองแก้ theme บน blogger

เอาลิ้งไปวางเลยครับ 

ไหนทดสอบสิ อันนี้ ผมทำ syntax highlighter  เอาไว้ซึ่งเรียก js ชื่อ rainbow จากดรอบบ็อก

namespace NerdDinner.Models
{
 using System.Data.Linq;
 using System.Data.Linq.Mapping;
 using System.Data;
 using System.Collections.Generic;
 using System.Reflection;
 using System.Linq;
 using System.Linq.Expressions;
 using System.ComponentModel;
 using System;

 [System.Data.Linq.Mapping.DatabaseAttribute(Name="NerdDinner")]
 public partial class NerdDinnerDataContext : System.Data.Linq.DataContext
 {

  private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();

  public NerdDinnerDataContext() :
   base(global::System.Configuration.ConfigurationManager.ConnectionStrings["NerdDinnerConnectionString"].ConnectionString, mappingSource)
  {
   OnCreated();
  }

  public NerdDinnerDataContext(string connection) :
   base(connection, mappingSource)
  {
   OnCreated();
  }

  public NerdDinnerDataContext(System.Data.IDbConnection connection) :
   base(connection, mappingSource)
  {
   OnCreated();
  }

  public NerdDinnerDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) :
   base(connection, mappingSource)
  {
   OnCreated();
  }
       }
}

วันพฤหัสบดีที่ 22 มิถุนายน พ.ศ. 2560

เช็คราคาเที่ยวบินจบในคลิกเดียวด้วย Selenium IDE ใช้เวลาแค่ 3 วิ


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


จะดีกว่าไหมที่เราบันทึก process ซ้ำๆเหล่านี้ขึ้นมาเป็น check list แล้วสั่งให้ computer วิ่งเข้าไปที่หน้าเว็บและแสดงผลการค้นหาออกมาตามที่เราต้องการเลยในคลิกเดียว ยินดีต้อนรับสู่โลกของ Automate tool วันนี้เรามาลองใช้งาน Selenium IDE ซึ่งเป็น plugin ที่ต้องติดตั้งลง FireFox เป็นเครื่องมือสำหรับการบันทึก Event หรือเหตุการณ์ต่างๆที่เราทำบนหน้าเว็บออกมาเป็นไฟล์ โดยเราสามารถรันเหตุการณ์เหล่านั้นซ้ำกี่รอบก็ได้! ซึ่งเราจะยกตัวอย่างจากการหาเที่ยวบิน AirAsia จากเชียงใหม่ ลงไปกรุงเทพ ในวันที่ 22 – 25 กันยายน มาดูกันว่า Selenium IDE จะทำให้ชีวิตง่ายขึ้นสักเท่าไหร่

ขั้นตอนการติดตั้ง

1. ลง FireFox Web Browser
2. เข้าไปที่ https://addons.mozilla.org/en-US/firefox/ แล้วค้นหา Selenium IDE ติดตั้งให้เรียบร้อย
3. กด ctrl + shift + s เพื่อเปิดหน้าต่าง Selenium Windows 



รู้จัก HTML Element (ถ้ารู้จักแล้ว ข้ามไปได้ไม่โกรธ)

บนหน้าเว็บที่เราเข้าเป็นประจำทุกๆวัน มันจัดองค์ประกอบซ้าย ขวาอย่างสวยงามนั้นเบื้องหลังประกอบไปด้วย element ต่างๆเข้ามาประกอบกันจนไป HTML ไฟล์ ซึ่งชั้นบนสุดเราจะเรียก root หรือ tag <html> แล้วสิ่ที่อยู่ภายในนั้นจะถูกบรรจุลงไปใน element ถัดไปเรื่อยๆ ตัวอย่าง element ที่ควรรู้จัก

1. <input> มีหลายรูปแบบ แบบที่เราเห็นบ่อยๆคือ textbox หรือ <input type=’text’>
2. <div> ดีวิชั่นที่ใช้ บรรจุ element อื่นๆ
3. <button> ปุ่ม
4.     <li> ลิส

ซื่ง Selenium จะรู้ตำแหน่งของ element บนหน้าจอได้ก็จากการจดบันทึกตำแหน่งจาก html element ที่บรรจุมันอยู่นั้นเอง

เริ่มใช้งาน

Download ไฟล์ตัวอย่างได้ที่นี้


1. การใช้ Selenium IDE เราจะเหนื่อยครั้งแรกครั้งเดียวส่วนครั้งถัดๆไปเราเพียงแค่กด run เพื่อทำงานตาม event ที่เราบันทึกในครั้งแรก
2. กด record (ปุ่มแดง ทางขวามือบน)
3. เริ่มเข้าหน้าเว็บ Airasia.com แล้วเลือกเส้นทาง ออกจากเชียงใหม่ เข้าสู่กทม หลังจากนั้นเลทอกวันเวลา และจำนวนผู้โดยสาร สังเกตที่ตัว Selenium จะมีการสร้าง record ขึ้นมาทุกครั้งที่เรามีการคลิกเลือกจุดต่างๆ ซึ่งแต่ละจุดเราแทนด้วย HTML element

4. หลังจากจบ process กดปุ่มสีแดง (record) อีกครั้งเพื่อจบการทำงาน
5. สังเกตุทางซ้ายมือ จะมีชื่อ test case อยู่ใน list test suit คลิกขวา กด save เพื่อบันทึก records เอาไว้
6. ถ้าอยากบันทึดเพิ่ม คลิกขวาบนที่ว่างทางซ้าย เลือก new test case
7. เริ่ม records ให้อีกครั้ง


ข้อสังเกตุ Selenium IDE มาพร้อมความง่าย แต่ Error เพียบ

เพราะ Selenium IDE มีหน้าที่แค่จับ element จาก event ที่เราทำบนหน้าจอในขณะนั้น เช่นตัวอย่างเว็บแอร์เอเชียนี้ เราได้คลิกเลือกต้นทาง และปลายทางจากตัวเลือก ซึ่งเมื่อกดรันอีกครั้งกลับ error เพราะอะไร เพราะว่ามันไม่ได้ฉลาดขนาดรอให้ ตัวเลือกแสดงขึ้นมาก่อน ทำให้สคริปพังกลางทาง เราต้องแก้ไขโดยการเปลี่ยนการกดเลือก เป็นการพิมพ์ลงไปแทน ซึ่ง Selenium จะมองเป็นการกรอกข้อความแทน

เปรียบเทียบจากการคลิก command ขึ้นว่า 


แต่ถ้ากรอกข้อความ command ขึ้นว่า



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

อย่างน้อยการกด run ครั้งถัดไปก็ใช้เวลาน้อยมาก และเราไม่ต้องเสียเวลาเลือก หรือกรอกใดๆทั้งสิ้น เพราะครั้งที่สองเป็นต้นไป selenium จะทำงานแทนเราเอง ถ้าทำแบบนี้ทุกเว็บสายการบินจะประหยัดเวลาได้มาก การใช้ automate เข้ามาช่วยให้ชีวิตง่ายขึ้นก็ดีแบบนี้แล สวัสดีครับ มี version วิดีโอด้วยตาม link ข้างล่างนี้ ครับเผื่อใครอ่านแล้วยังไม่เห็นภาพชัดเจน

ยุคสมัยแห่ง Automate เมื่อ Selenium เข้ามาเป็น QA แทนมนุษย์ (Part 1)


ยอมรับสักทีเถอะว่ายุคนี้ ปี 2017 มันเริ่มเข้าสู่ยุคหุ่นยนต์แล้ว ไหนจะรถไร้คนขับ ไหนจะ AlphaGo ที่เล่นเกมส์โกะชนะมนุษย์ที่เลานเก่งที่สุดในโลก เดินไปทางไหนคอมพิวเตอร์ก็เข้ามาคิดแทนมนุษย์แล้ว และมนุษย์กำลังจะตกงานมากขึ้นเพราะมีคอมพิวเตอร์ทำงานแทน วงการเขียนโปรแกรมก็เช่นเดียวกันโดยเฉพาะการเทสโปรแกรมที่ต้องเทสซ้ำๆ โมดูลเดิมๆบ่อยๆซึ่งต้องจ้างคนมาทำงาน QA แถมมนุษย์ยังมีโอกาสผิดพลาดอีกแบบนี้ไม้เหลือเหตุผลใดที่จะเปลี่ยนมาใช้ Automate tool

เครื่องมือเทสเสียเงินก็มี แถมฟีเจอร์โหด แต่ถ้าพูกถึงเครื่องมือฟรีผมขอแนะนำ Selenium ในงานเทสของคุณโดยเจ้าตัว Selenium เนี้ยหลายคนจะคุ้นหูคุ้นตากับตัว Selenium IDE ที่เป็นปลั้กอินติดกับ Firefox Web Browser โดยเราทำเพียงแค่คลิกบันทึก Event ที่จะทำงานบนหน้าจอครั้งแรกครั้งเดียว แล้วโปรแกรมก็จะรันอีกกี่ครั้งก็ได้ สมมุติว่าสร้างชุดการเทสขึ้นมาหนึ่งอย่าง ให้วิ่งเข้าไปกรอกข้อมูลบนหน้าเว็บแล้วกด Submit ถ้าผ่าน โปรแกรมจะวิ่งไปหน้า Success แต่ถ้าไม่สำเร็จไปหน้า Error Page แบบนี้เราก็สามารถ Capture URL สุดท้ายเพื่อเช็คข้อมูลได้

Selenium WebDriver เหมาะกับงานประเภทไหน

1. งานที่ต้อง Import TestCase จาก Project Unit Test
2. งานที่ต้องการใช้ feature ของ .Net Framework เข้ามาเกี่ยวข้อง เช่น ดึงข้อมูลจากหน้าเว็บแล้วเอาข้อมูลไปเซฟลง Database หรืออาจเรียก Web Service เพื่อตรวจสอบค่าบางอย่าง
3. งานที่ซ้ำๆ ซ้อนๆ มนุษย์ทำแล้วน่าเบื่อ เช่น generate เอกสารจากปุ่ม Download ทั้งหมด 100 ไฟล์ ใครมันจะมานั้งทำจนมือหงิก

แล้วมันไม่เหมาะกับงานประเภทไหน

1. งานเทสโปรเจกที่สเกลเล็กจนใช้คนทำจะไวกว่า
2. งานที่รีบเร่งส่งงาน เพราะการเขียนตัว Unit Test ใครเวลาพอสมควร (แต่สบายระยะยาว)
3. งานที่โปรแกรมเมอร์ ไม่สามารถออกแบบ Test Case ด้วยตัวเองให้ครอบคลุม เพราะบางอย่างดูด้วยตาจะชัดเจนกว่ามาก เช่นเช็คสีของข้อความที่แสดงบนหน้าเว็บ

หยุดพล่ามแล้วเริ่มลงมือทำความรู้จักกับ Selenium กันดีกว่า ขอเริ่มอธิบายสั้นๆตามความเข้าใจก่อนว่า Selenium คือหน้ากากที่จะช่วยเราแปลภาษาสำหรับติดต่อสื่อสารกับ Web Browser เช่น เราอยากเข้าเว็บ Google แล้ว Search คำว่า “solid programming” เราจะต้องทำอะไรบ้าง อันดับแรก
- กรอก URL : http://www.Google.coth
- กรอกข้อความลงไปใน Search textbox ว่า “solid programming”
- กดปุ่มค้นหา

ทั้งหมดสามสเตปนี้เราต้องเข้าโปรแกรมเป็นภาษาที่ Selenium เข้าใจแล้วสุดท้ายมันจะไปคุยกับ browser ให้เองว่าต้องทำอย่างไร ซึ่งมันก็สามารถคุยได้กับทั้ง firefox, Google Chrome, Internet Explorer  และอีกมากมาย (PhantomJS ยังได้เลย) ทำให้เราเขียน test case ครั้งเดียวแต่เทสได้ทั้ง 3 browser ไงหล่ะเริ่มเห็นความสบายอยู่ข้างหน้าละยัง


โดยเราจะสนใจการเขียนโปรแกรมโดยใช้ Selenium WebDriver เป็นหลัก ถ้าท่านต้องการเขียนแบบที่เป็น Plugin FireFox ต้องอ่านบทความนี้ ส่วนสกิลที่จำเป็นสำหรับเขียน Unit Test ในครั้งนี้

1. C# programming เราจะเขียนด้วย C#  กันเพราะต้องสร้าง Unit test project
2. Nunit framework เป็น Framework สำหรับสร้าง TestCase
3. Selenium WebDriver syntax รูปแบบการเขียน การสร้าง web driver
4. HTML Xpart เข้าใจว่า html จาก root element ไล่เรียงไปจนถึง element ที่เราสนใจมี XPART เป็นแบบไหน

ซึ่งเดียวผมจะค่อยๆอธิบายแต่ละข้อรวมไปถึงวิธีการใช้งาน ตั้งแต่ต้นจนจบ บทต่อไป เริ่มสร้าง Unit Test สำหรับ Selenium

วันพุธที่ 31 พฤษภาคม พ.ศ. 2560

ฝึกทักษะการฟังภาษาอังกฤษด้วยเพลงฮิตอินเตอร์ quiz music

เมื่อการฟังเพลงคือการฝึกฟังภาษาอังกฤษ ถ้าไปดูคลิปเพลง inter top chart บนช่อง YouTube จะพบว่า นักร้องจำนวนไม่น้อยสมัยนี้ ต่างมี Lyric version ซึ่งจะแสดงเนื้อเพลงบนตัววิดีโอ หรือที่เรียกว่า Lyric on screen เพราะผู้ชมที่เริ่มอินไปกันเพลงก็เกิดข้อสงสัยอย่างแน่นอนว่า "เพลงท่อนนี้ร้องว่าอะไร" "เนื้อเพลงแปลความหมายว่าอะไร" เพราะบางท่อนเราฟังไม่ถนัดเเละอยากฟังซ้ำอีกรอบ เลยเป็นจุดกำเนิดเกมส์ทายคำศัพท์จากเนื้อเพลง ให้บริการสงตรงความบันเทิงทั้งฟังเพลงเเละฝึกภาษาไปพร้อมกัน

เค้าไหมคุยกับฝรั่งเเล้วเราฟังเค้าไม่ทัน จนต้องถามกลับ "Can you speak again slowly?" เค้าจะพูดเร็วกันไปไหน แถมยังพูดไม่ชัดอีก นั้นเป็นเพราะในชีวิตจริงการใช้ภาษาเพื่อการสื่อสารนั้นแตกต่างจากในหนังสือที่เราเรียนมา การพูดมักเน้นการสื่อสารด้วยภาษาพูดเป็นหลักโดยไม่จำเป็นต้องถูกต้องตามหลักแกรมม่า เช่น เนื้อเพลง Blank Space ของ Taylor Swift มีท่อนหนึ่งร้องว่า Ain't it funny rumors fly ซึ่งคำว่า  Ain't เราไม่ได้ใช้การในหนังสือแน่นอน ความหมายของคำแปลว่า"ไม่" ซึ่งถูกนำมาใช้ประกอบประโยคเพื่อเพิ่มส่วนของอารมณ์ในคำร้อง ว่าแต่มันออกเสียงยังไง?? อยากรู้ลองไปตามหาในเพลง ทดลองเล่นเกมส์ทายคำศัพท์จากเนื้อเพลงเพื่อเพิ่มทักษะการฟังฟรี ที่เว็บไซด์ QuizaSong.com ครับ

"เพราะการฟังภาษาเป็นทักษะที่จำเป็นสำหรับการสื่อสาร"



ตัวเพลงจะถูกซ่อนคำศัพท์บางคำในเนื้อร้องเอาไว้ โดยเราต้องตั้งใจฟังเพลงให้ดีๆเมื่อถึงท่อนที่มีการซ่อนคำศัพท์ เนื้อเพลงจะใบ้คำศัพท์ออกมา 3 คำ ซึ่งแน่นอนหนึ่งในนั้นคือคำตอบที่ถูกต้อง แต่ละท่อนของเนื้อเพลงเองยังเลื่อนไปตามเสียงร้อง แต่ไม่ได้ตรงตามจังหว่ะเป๊ะๆแบบการร้องคาราโอเกะ ซึ่งการแบ่งท่อนก็เหมือนการแบ่งจังหว่ะการฟัง ซึ่งจะแบ่งท่อนละสองบรรทัด ทำให้ง่ายต่อการฟังตามเนื้อร้อง นอกจากนี้เรายังสามารถคลิกที่ท่อนเพลงเพื่อฟังท่อนนั้นซ้ำอีกครั้งหนึ่งถ้าเราฟังไม่ทัน เหมาะสำหรับทั้งคนที่เริ่มต้นฝึกฝนการฟัง ซึ่งเพลงแต่ละเพลงที่อยู่บนหน้าเว็บก็ถูกเลือกคัดสรรมาอย่างดี เลือกเฉพาะเพลงฮิตติดหู เพลงที่เราได้ยินจนติดหูแต่เราไม่เคยตั้งใจฟังเนื้อร้องเเละความหมายจริงๆของมัน ทั้งมันส์ไปกับเพลงที่ชอบแล้วยังได้ฝึกฝนการฟังคำศัพท์ภาษาอังกฤษ ไม่ลองไม่ได้แล้ว


วิธีเล่นเกมส์

1. เข้าหน้าเว็บ http://quizasong.com/music เลือกเพลงที่ถูกใจ
2. เมื่อได้เพลงที่ต้องการ กด Play เพื่อเริ่มเล่นเพลง


3. เมื่อถึงท่อนที่มีคำภามซ่อนอยู่ให้ตั้งใจฟังเเละเลือกคำตอบที่เราได้ยิน โดยตัวเกมส์จะใบ้ศัพท์มาให้สามคำ
4. เมื่อตอบครบ 10 ข้อ ก็ฟังเพลงชิวๆ แล้วคลิก Submit เพื่อเช็กคำตอบ
5. ได้คะแนนเท่าไหร่กันบ้าง กดแชร์ได้เลย


แชร์ประสบการณ์โทรเรียก DELL on-site support หลังคอมพัง



ส่วนนี้อินโทร (ยาวไปไม่อ่าน ข้าวไปที่ .."ส่วนนี้เริ่มเข้าสาระ")
หลังจากกูเกิ้ล อย่างหนักถึงโน๊คบุ๊คที่ทนและถึก เหมาะกับมนุษย์โปรแกรมเมอร์มือหนัก แต่น้ำหนักต้องพกพาได้ ก็ได้คำตอบอยู่ 2 ยี่ห้อ คือ Dell โมเดล Vostro และ Lenovo โมเดล thinkpad ซึ่งได้สเปกสำหรับเขียนโปรแกรมในงบไม่เกิน 39k ทั้งคู่ วิ่งตรงไปพันทิพประตูน้ำทันทีแต่พอไปดูตัวเครื่องจริงๆที่ร้านผมกลับถูกใจ ตัวของ Dell Inspiron มากกว่าเพราะเป็นรุ่นตัดของจอ 14" ให้อยู่ในขนาด 13" และได้สีทองหรือเงิน ซึ่งตอนนั้นร้านมีโปรโมชั่นลดราคาลง 2 พันบาทจากป้าย เหลือ 34500 บาท คนขายพูดจนจำได้ว่า "จ่ายสามหมื่นห้าทอนห้าร้อย" คนขายพูดดีมาก แนะนำโน้นนี้นั้น ผมจัดเลยครับซื้อก่อนสงกรานต์เดี๋ยวของหมด ร้าน"xxxx" จ่านเงินรับเครื่อง ตรวจสอบเเล้วผ่านหมด เราก็สบายใจ

หลังจากนั้นผมก็เปิดเครื่องใช้งานตลอด ทั้งลงโปรแกรม เล่นเว็บ ดูหนัง ฟังเพลง สองอาทิตย์ผ่านไปอย่างไว แต่สิ่งที่ไม่คาดฝันก็เกิดขึ้น หลังพักเที่ยงผมเปิด sleep mode ไว้เเต่พอกลับขึ้นมาเปิดกลับเปิดไม่ขึ้น หน้าจอดำสนิท ลองอยู่สามทีไม่รอด เลยกดปุ่มค้างไว้เพื่อรีสตาทแล้วก็ใช้งานได้ตามปกติ แต่วันรุ่งขึ้นล่อเเต่เช้าเลยอาการเดิม แบบเดิมผมก็เริ่มเอ๊ะใจเเล้วว่า ถ้าเครื่องหยุดทำงานไม่ว่าจะ shut down หรือ Sleep มันจะเปิดอีกไม่ได้แน่ๆ ซึ่งก็เป็นตามนั้น(ไม่ทัน back up) เที่ยงวันนั้นไม่รอดครับ ตายสนิท
boot ไม่ขึ้นอีกเลย ซึ่งก่อนมันจะพัง Dell จะส่งเสียงร้องอย่างดัง "ตี้ดดดดด" ครั้งเดียวยาว 2 วินาที ซึ่งผมเคยใช้ Dell มาก่อน และเจอเสียงแบบนี้มาเเล้วรู้เลยเสียงนี้ hardisk พังเเล้ว (ซวยเเล้ว) 2 สัปดาห์พัง เยี่ยมจริงๆ ผมเดาว่าน่าจะลูกแรกที่เป็น boot partition

ใจจริงผมอยากไปซื้อ SSD มาเปลี่ยนแม่งเลย แต่ DELL เค้ามี Support On-Site ไอ้เราก็อยากรู้ว่ามันจะไวขนาดไหน ก็เลยโทรไปตามสายที่แป๊ะอยู่ใน sticker

ส่วนนี้เริ่มเข้าสาระ

1. 1800-06-01-43 (โทรฟรี)
2. 02-670-7252 (เสียเงิน)

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

1. Express Service Code เป็นโค๊ด 11 หลักด้านหลังเครื่อง
2. รูปหน้าจอตอน Error ซื่ง Dell จะสร้าง report code แบบงงๆเอาไว้
3. สถานที่ที่จะให้ support ไปหาคุณ พิมพ์ไว้ในเมลล์เลย พนักงานเค้าไม่มานั่งจดให้

มีสามอย่าครบคุณจะไม่ติดขัดอันได้ ในการโทรคุยเลย จากนั้นหลังจากโทรติดผมกดเบอร์ดังนี้


หลังจากนั้นก็รอ.. ฟังเพลงสนุกๆไป ผมรอไป 4 นาทีได้เป็นพนักงานผู้หญิงรับสาย อันดับแรกเค้าจะถามว่ามีปัญหาอะไร ไม่ต้องเสียเวลาอธิบายครับ บอกสั้นๆคอมพังเปิดไม่ขึ้น เค้าอาจถามต่อข้อสองข้อก็ตอบสั้นๆ จนกว่าเค้าจะถามว่า "ขอหมายเลข Express Service Code ด้วยค่ะ" ก็บอกเค้าไปชัดๆ เช่น A อเมริกา F ฟินแลนด์ หลังจากนั้นพนักงานจะคีย์ข้อมูลค้นหาและบอกให้เราพักสายรอสักครู่ ผมรอ 1 นาทีหลังจากเค้ากลับมาเค้าจะทวนชื่อรุ่นเครื่องเรา และวันที่เราไปลงทะเบียนประกัน ถ้ายังอยู่ในระยะ ก็คุยกันต่อได้ หลังจากนั้นไม่ต้องอธิบายยาว บอกต่อว่าคอมพังมีเลข service tag และ Error Code ขอ email พนักงานเพื่อส่งไฟล์ หลังจากนั้นเค้าจะให้ email กลับมา ซึ่งคุณควรจะย้ำอีเมลล์ให้ชัดเจน ตรงนี้ผมพลาดได้เมลล์มาเเต่ผมลืมต่อ internet ไว้เลยขอเค้าให้วางสายก่อน แล้วผมจะส่งเมลล์ไปให้แล้วขอเค้าช่วยโทรกลับอีกที ซึ่ง Dell ไม่มีนโยบายโทรกลับ!! คุณวางสายโดยที่ยังเปิดเคสไม่สำเร็จถือว่าสละสิทธิ!! บร่ะเจ้าหลังจากส่งเมลล์จบ พนักงานเงียบเป็นเป่าสาก จบครับ เสียเวลาไปฟรีๆ หลังจากผ่านไป 3 ชม. ผมเมลล์ไปอีกรอบก็เงียบ จนผมเเน่ในเเล้วว่าเค้าไม่ติดต่อกลับ(เเม้เเต่ email กลับ) ผมต้องเปิดเคสใหม่โดยโทรไปเเบบเดิม คราวนี้รอสายนานถึง 5-6 นาที เป็นผู้ชายรับแล้วด้วยพลังงานบางอย่าง สายขาดหลังจากเค้าขอเซอร์วิสโค๊ด โดนตัดสายเฉย!! เซ็ง ผมนิลุกไปแดกข้าวเย็นเลย ผมเลยถอดใจ google หาเบอร์ตรงพนักงานสักคนเถอะ ช่วยกูที มีเว็บให้เบอร์มาเป็นของ ตัวแทนการ dell ซึ่งโทรไม่ติดเลยสักเบอร์ ผมเลยเดินเข้าไปที่ร้านที่ขายของให้ เพราะเค้าเคยบอกว่าเค้าเป็นพนักงานเดล และมาทำงานขายด้วย ใจจริงอยากถามเค้าว่า ถ้าเครื่องพังมีวิธีไหนเปิดเคสได้บ้างโทรไม่ต้องโทรไปเพราะผมโทรไป dell support แล้วเปิดเคสไม่ได้ ซึ่งบอกเลยว่า เค้าไม่ได้มีหน้าที่มา support คุณ เค้าขายอย่างเดียว จากพูดดีๆกลายเป็นขึ้นเสียง นี้คือตัวอย่างคำพูดบางส่วนของพนักงานร้านxxxx

"ไม่รับซ่อม ต้องโทรเค้า dell support อย่างเดียว" (กูไม่ได้ขอมึงซ่อม กูอยากได้วิธีเปิดเคส)
"ห้ามแกะเครื่อง ประกันหายทันที" (ไอ้สัส กูรอไม่ไหวแล้ว กูอย่างซ่อมเองโว้ยย)
"ถ้าผมเปลี่ยนฮาร์ดดิส จะขอ Windowsแท้ที่ติดเครื่องมาลงได้ไหม " > "ไม่มีแจกค่ะ formatแล้วหายเลย ต้อง backup windows ไว้เท่านั้น"

เออกูผิดเองที่มาหามึง! มึงเเค่พนักงานขาย ไม่ใช่พนักงาน Dellชัว!! หลังจากนั้นผมรู้เเล้วว่าถ้าจะซ่อมในวงประกันจะต้องโทรเจ้าไปเปิดเคสให้ได้ ผมเลยโทรไปครั้งสุดท้าย ดีกว่าเปิดเปลี่ยนฮาร์ดดิสเอง

ปล. ผมลองเปิดเคสผ่าน หน้าเว็บ ปลายทางจะเป็นฝรั่งมาตอบ สุดท้ายก็มาลงที่ เบอร์โทร ถ้าอยากติดต่อ dell support thailand

คราวนี้รอ 3 นาทีพนักงานผู้หญิงรับสาย คนนี้ผมชอบตั้งเเต่น้ำเสียงเเล้ว เป็นคน active เเละมีความเป็นมืออาชีพสูงมาก ต่างจากสองคนเเรกสิ้นเชิง ชื่อว่าคุณ Thanyarat ให้เครดิตเลย พูดกระชับ ตรงประเด็นและใส่ใจปัญหาลูกค้า เค้าจะถามอย่างฉลาด และตอบได้เยี่ยมมาก เช่นจังหวะที่เรารอ เค้าจะบอกเวลาโดยประมาณ เช่นพักสายสามนาที เธอก็ใช้เวลาสามนาทีจริงๆ พอผมบอกว่ามี Error Code เค้าก็ถามเราเลยว่าเลขอะไร ไม่ต้องส่งรูปให้เสียเวลา เปิดเคสไวมาก เคสผมเป็นฮาร์ดดิสพัง ต้องเปลี่ยนลูกใหม่ แปปเดียวรู้ตัวอีกทีเค้าถามที่อยู่ ผมดันลืมจดที่ทำงานมา เค้าก็ให้ email address เพื่อส่งไปเปิดเคสอีกรอบ ซึ่งหลังจากนั้นก็เปิดเคสจบเเละนัดอีก 2 วันถัดมา ซึ่งมี email กำกับเอาไว้ชัดเจนถึงวันเเละช่วงเวลาที่เราขอเอาไว้

เมื่อเวลามาถึง engineer โทรเข้ามาก่อน ถามว่าตึกอยู่ตรงไหน เราก็อธิบายตามระเบียบเเล้ว มารับพี่เค้าขึ้นไป office จากนั้นเค้าก็เปิดคอมเรา รัน diagnostic แล้วพบว่า HDD ลูกที่สองพัง เค้าก็ดำเนินการเปลี่ยนให้เเล้วยังมอบ HDD ลูกเก่าให้เรา backup ข้อมูลก่อน แถมไฟล์ boot usb ให้เราเผื่อว่าเกิดปัญหาอีกแล้วเราจำเป็นต้องเปิดเครื่องเพื่อเก็บไฟล์ ทำงานไวเเละดีมากครับ พี่เค้าชื่อ Theerawat ให้เครดิต งานจบไว คอมกลับมาดีเช่นเดิม จากนั้นพี่เค้าจะให้เราเซ็นเอกสารเป็นอันจบงาน เเต่เคสยังไม่จบ

วิธีปิดเคส 
เคสจะจบเมื่อเราปิด ซึ่งอันนี้ผมงมเอง จนรู้ว่าเราต้องไปสร้าง account ก่อนเเล้วที่หน้าเว็บ dell support ซึ่ง status จะยังเป็น Open อยู่ซึ่งเราต้องไปปิดเคสให้พนักงานด้วย

http://www.dell.com/support/contents/us/en/19/article/Product-Support/Self-support-Knowledgebase/software-and-downloads/support-center



วิธีให้คะเเนน
อันนี้พนักงานเค้าจะโทรมาถามเรื่อง on-site support ซึ่งเราต้องให้คะแนนการทำงานด้วย เช่นเค้าจะถามว่า "พนักงานกัน..ไฟรั่วไหม" "พนักงานอธิบาย...ไหม" ผมก็ตอบตามที่เห็น แล้วอยากลืม e-mail สั้นๆกลับไปเพื่อให้ฟีดแบ๊ค

ความจริงที่ควรรู้เกี่ยวกับ DELL

1. แกะเครื่องประกันไม่หลุด engineer บอกเอง
2. วินโดว์แท้ที่มากับเครื่องสามารถลงใหม่ได้จากไฟล์ของเดล เพราะเลขเครื่องเราลงทะเบียนไว้เเล้ว
3. โทรให้ติด เพราะนั้นคือหนทางเดียวที่จะรับ support on-site Thailand
4. เบอร์เสียตัง รอคิวเหมือนเบอร์ฟรี
5. พนักงานดี ควรให้ฟีดแบ๊คดี

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

วันศุกร์ที่ 26 พฤษภาคม พ.ศ. 2560

วิธีเพิ่ม Domain บน Google Cloud จาก Namecheap.com



หนังจากสร้าง website บน App engine ถึงเวลาเผยแพร่เว็บไซด์ให้คนอื่นเข้าสู่เว็บซึ่ง GCloud สามารถชี้โดเมนเข้ามาที่โฮสโดยไม่เสียเงินเลยสักกะแดงเดียว จุดนี้คือจุดที่แตกต่างจาก Azure Cloud ที่จะคิดค่าบริการทางอ้อม โดยให้อัพเกรดแพลนเป็นแบบไม่ฟรีก่อน ถึงจะชี้โดเมนเนมเข้ามาได้ อีกทั้งโดเมนสำหรับเทสเว็บไซด์ของ Google ยังมาพร้อมกับ ssl(https) ลดแลกแจกแถมขนาดนี้ไม่จัดไม่ได้แล้ว

Let’s Start เริ่มที่ GCloud ก่อนเข้าไปที่ https://console.cloud.google.com

1.       ไปที่ App Engine > Settings > Custom domain

2.       กดปุ่ม Add a custom domain เพื่อสร้างโดเมนเนมใหม่ โดยกูเกิ้ลจะให้เรา verify domain ก่อนว่าเป็นเจ้าของหรือไม่
3.       ช่อง select the domain you want to use เลือก Verify a new domain..
4.       กรอกโดเมนไปตามระเบียบ แล้วกดปุ่ม Verify

5.       วิ่งมาหน้า Webmaster Central เลือก domain name provider : Namecheap.com เราจะได้ TXT record กลับมาเป็นคีย์ของ google-site-verification

6.       Login เข้า Namecheap

Part of NameCheap
โดเมนจาก Namecheap การตั้งค่าโดเมนค่อนข้างง่าย ใช้งานได้ไม่ยาก อีกกทั้งค่าต่ออายุโดเมนยังถูกอีก ตัวอย่างนี้ผมของใช้เนมชีพเป็นหลัก หากใครมี account อยู่เเล้วก็ login เข้าหน้าต่าง dashboard ซึ่งจะเห็นโดเมนที่เราซื้อเอาไว้

1.       เลือก Domain List > Domain เพื่อแสดง Information ของโดเมนปัจจุบัน


2.       เลือก Name Server เป็น Namecheap BasicDNS แล้วรอให้โดเมน refresh ตังเองสักครู่



3.       เลือกเมนู Advance DNS แล้วตั้งค่าตามนี้
          - กด ADD NEW RECORDS เลือก TXT Record ช่องแรก
          - พิมพ์ @ เข้าไปช่องที่สอง
          - พิมพ์ key ของ google-site-verification ไปช่องสามตามรูป


4.       กลับมาที่หน้าจอ Console Google Cloud แล้วกด refresh domain
5.       ถ้าไม่มีปัญหาอะไร โดเมนเราจะเขียว และได้ A record กลับมา พร้อมกับ www
6.       กลับไปที่ Namecheap กรอกทุกสิ่งอย่างลงไปตามที่ Google จัดมาให้


7.       รอๆ ให้ DNS อัพเดต อาจเป็นวัน เดือน ปีแสง แล้วแต่กรรมฮ่าๆ ผมรอ 1 วันเต็มๆ

คราวนี้ลองเข้าโดเมนที่เราชี้เอาไว้ tadaaa !!!! ในที่สุดโดเมนก็ชี้มาเรียบร้อย อันนี้เป็นตัวอย่างเว็บที่ผมใช้ในตัวอย่าง


ถามถึงความง่ายในการตั้งค่า ผมให้เต็ม 9/10 เพราะเข้ามาครั้งเเรกก็สามารถตั้งค่าเองได้ โดยถามกูเกิ้ลอีกนิดหน่อยก็ชี้โดเมนมาที่ google cloud ได้แล้ว สุดท้าย Hosting กำลังปรับเปลี่ยนมาเป็น Cloud ซื้งเป็นการเปลี่ยนแปลงที่มีมาสักพักใหญ่ๆแล้ว โดยราคาก็เริ่มต่ำจนพอรับไหว ปรับตัวกันตามไป

วันพุธที่ 26 เมษายน พ.ศ. 2560

วิธีเปิดปิด Backlit Keyboard โน๊ตบุ๊ค DELL


Backlit Keyboard คืออะไร

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

สำหรับ DELL Labtop ที่มี Backlit Keyboard สามารถเปิดปิดไฟแป้นพิมพ์ได้ 2 วิธี

1. ผ่านปุ่ม Fn + F10 ซึ่งเป็นคีย์ลัดสำหรับเพิ่มระดับความสว่างทีละ step ซึ่งมีทั้งหมด 2 ระดับความสว่าง

2. ผ่าน Windows Mobility Center ตรงส่วน Customized เพียงกด Win + <X> ปล่อยมือเเล้วพิมพ์  <B>


จากนั้นมองหา Keyboard Brightness : ปรับระดับตามเหมาะสม
นอกจากนี้ Function Key Row ก็สามารถปรับได้เช่นกัน ซึ่งเป็นการกำหนดว่าเวลากดปุ่น Fn จะเป็นคีย์อะไร

**หมายเหตุ การตั้งค่าดังกล่าวสำหรับ Windows 10 เเละ Windows 8.1

วันพฤหัสบดีที่ 23 กุมภาพันธ์ พ.ศ. 2560

Win10 วิธี Install .Net Framework 3.5 (คิดว่าง่ายหรอ หึหึ)



Windows 10 ของแท้ ลิกขสิทธิ์ก็ใช่ว่าจะ perfect ไปทุกอย่าง หลังจาก Install สำเร็จจะพบว่า feature ของ .net 2.0 / 3.5 นั้นโดนปิดเอาไว้อย่างไร้เหตุผล ผมก็เลยไปดาว์นโหลด ตัวinstaller มาลง ดันเจอปัญหาอีกว่าลงไม่ได้เพราะยังไม่มี .net framwork (โคตรซับซ้อน) วันนี้เลยจะมาสอนวิธีการลง .net 3.5 บน Windows 10

ใครเจอหน้านี้ แสดงว่าปัญหาเดียวกัน



พอเข้าไปเช็คที่ Control Panel\All Control Panel Items\Programs and Features > turn Windows feature on or off

เมื่อพยายามเปิดก็พบว่า มัน error ด้วยโค๊ดไม่คนธรรมดาไม่รู้เรื่อง ไปต่อไม่เป้น อีกทั้งตัววินโดว์ยังบอกให้ไป Update Windows 10 ให้เป็นเวอร์ชั่นล่าสุดเเล้วทุกปัญหาจะจบลง ซึ่งหลังจากทดลองทำเเล้วก็พบว่าตัวอัพเดตนั้นมันไม่ได้รวม .Net Framwork 3.5 เข้ามาด้วย ทำให้ไม่สามารถ install program ต่างๆได้

งั้นต้องต่องใช้วิธี Manual ละ

1. Download files ชื่อว่า "Windows.iso" ซึ่งเป็นแพคเกจตัวล่าสุดของไฟล์อิมเมจวินโดว์สิบที่ทาง Microsoft แจกฟรีที่หน้าเว็บเเต่ว่าต้องโหลดผ่าน MediaCreationTool

ง่ายๆแค่เข้าหน้าเว็บ https://www.microsoft.com/th-th/software-download/windows10 แล้วกด "ดาว์นโหลดเครื่องมือทันที"

2 หลังจากนั้นให้เปิดโปรแกรมขึ้นมา เลือกเมนู Accept > Create installation media for another PC > ISO File 

3. หลังจาก download  เสร็จเรียบร้อยให้ mount iso แล้วเปิด  CMD ขึ้นมาพิมลงไปว่า

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:d:\sources\sxs

*** d:\sources\sxs คือ path ที่อยู่ของไฟล์ image เรา



เป็นอันจบ..

May be like this posts