Category: Operating System

  • ทำ functional design อย่างง่ายด้วยโปรแกรม Sandcastle Help File Builder

    เมื่อพัฒนาโปรแกรมเสร็จแล้ว ก็ถึงเวลาทำเอกสารการเขียนอธิบายโค้ดต่อ บางครั้งมันยุ่งยากเสียเวลา วันนี้มีวิธีที่สะดวกและรวดเร็วเพียงแค่เขียนอธิบายใน Class ที่เราต้องการอธิบาย เช่น Constructors, Properties, methods

    ตัวอย่างการเขียนอธิบายโค้ด

    โดยทั่วไปแล้วการเขียน Logic ต่างๆ เพื่อนำไปใช้งานต่อหรืออ้างอิงโค้ดที่เราเขียนมักจะ build code เป็นไฟล์ .dll เพื่อให้ระบบอื่นมาเชื่อมต่อและเรียกใช้งานได้ โดยขั้นตอนแรกเราใช้โปรแกรม Sandcastle Help File Builder สามารถอ่านรายละเอียดเพิ่มเติมตามลิ้งก์ https://github.com/EWSoftware/SHFB/releases และ download และติดตั้งตามลิ้งก์

    SHFBInstaller_v2019.11.17.0.zip 45.1 MB

    เมื่อติดตั้งเสร็จเรียบร้อย หน้าตาก็จะประมาณนี้

    โปรแกรม Sandcastle Help File Builder

    ก่อนอื่นเราต้องไปตั้งค่าการ build code ใน Visual Studio ในส่วนของ XML ตามไฮไลต์สีเหลือง

    การตั้งค่า XML ใน Visual Studio

    จากนั้นก็กด Build ใน Visual Studio

    แสดงการ Build ใน Visual Studio

    เมื่อ build เสร็จ เราจะได้ไฟล์ .dll และ .xml

    ไฟล์ .dll และ .xml

    เมื่อได้ไฟล์ .dll และ .xml เรียบร้อยแล้ว ก็เพิ่มในโปรแกรม Sandcastle Help File Builder โดยไปที่เมนู File > Project Explorer > Documentation Sources > Add Documentation Source

    เมนูการเพิ่ม Add Documentation Source

    เมื่อเลือกไฟล์ .dll และ .xml เรียบร้อยแล้ว ผลลัพธ์ที่ได้แสดงตามภาพ

    แสดงผลลัพธ์เมื่อ Add Documentation Source เสร็จ

    จากนั้นตั้งค่าเมนู Help File ตามตัวอย่างข้างล่าง

    ตั้งค่าเมนู Help File

    จากนั้นตั้งค่าเมนู Visibility ตามตัวอย่างข้างล่าง

    ตั้งค่าเมนู Visibility

    เมื่อตั้งค่าโปรแกรมเสร็จเรียบร้อยแล้ว ไปที่เมนู Documentation > Build Project

    เมนู Documentation > Build Project

    รอโปรแกรมประมวลผลสักครู่ เราก็จะได้ไฟล์ .chm ออกมา

    ไฟล์ .chm

    เมื่อเปิดไฟล์ .chm เราก็จะได้ผลลัพธ์ Help File ตามรูปแบบที่แสดงตามภาพด้านล่าง

    ผลลัพธ์ Help File 1
    ผลลัพธ์ Help File 2
    ผลลัพธ์ Help File 3
    ผลลัพธ์ Help File 4
  • วิธีทำให้ตั้ง password ใน windows server ได้ตามที่ต้องการ

    เมื่อ create user ใหม่ใน windows server เราจะต้องตั้ง password ตามกฏที่ windows server กำหนดมาให้
    ถ้าตั้งไม่ตรงตามกฎ windows server จะไม่ยอมให้สร้าง user
    อย่างเช่นสร้าง user ชื่อ sysadmin แล้วตั้ง password ว่า sysadmin123
    จะไม่สามารถสร้าง user ได้ ซึ่งจะมี error ขึ้นดังรูป

    วิธีแก้ให้สามารถตั้ง password ได้ตามที่ต้องการมีดังนี้

    1. ที่หน้า Desktop ของ windows Server ให้ไปที่ปุ่มค้นหา(รูปแว่นขยาย) ตรง taskbar แล้วพิมพ์  gpedit.msc แล้วกดปุ่ม Enter ที่ keyboard
    • ให้เลือกตามลำดับดังนี้ Computer Configuration -> Windows Settings -> Security Settings -> Account Policies -> Password Policy.
    • Double click ที่ Password must meet complexity requirements
    • ให้เปลี่ยนจาก Enabled เป็น Disabled แล้วกด OK
    • ลองสร้าง user ใหม่อีกที โดยตั้งชื่อเป็น sysadmin แล้วตั้ง password ว่า sysadmin123

    จะเห็นว่าสามารถสร้าง user ได้แล้ว

  • Canonical Livepatch Service

    Canonical Livepatch Service

    Apply critical kernel patches without rebooting.

    โฆษณา

    • Fixes are applied automatically, without restarting your system
    • Reduces downtime, keeping your Ubuntu LTS systems secure
      and compliant
    • Included as part of all Ubuntu Advantage for Infrastructure
      support packages
    • ใครควรใช้ เครื่อง ubuntu 16.04 ขึ้นไป
    • เริ่มได้
    • เปิดเว็บ https://auth.livepatch.canonical.com/ เลือก Ubuntu user แล้วกดปุ่ม Get your Livepatch token

    ก็จะไปหน้านี้

    • กด Accept all and visit site
    • ก็ให้ log in ให้เรียบร้อย หากยังไม่ได้สมัคร user ของ Ubuntu one ก็ให้เลือก I don’t have an Ubuntu One account เพื่อสร้าง account

    หลังจากกด Create account ให้ไปเช็คเมล์ที่ใช้ลงทะเบียนแล้วกด verify

    • ก็จะได้หน้าที่มี Token สำหรับลงทะเบียน
    • ติดตั้งโปรแกรมชื่อ canonical-livepatch ด้วยคำสั่ง
    sudo snap install canonical-livepatch
    • เมื่อติดตั้งเสร็จได้ผลลัพธ์ว่า

    canonical-livepatch 9.5.5 from Canonical✓ installed

    • แล้วต่อด้วยคำสั่ง copy จากในเว็บได้เลย
    sudo canonical-livepatch enable $TOKEN
    • โดย $TOKEN คือค่าที่ได้จากในหน้าเว็บ
    • ก็จะได้ผลว่าประมาณว่า

    Successfully enabled device. Using machine-token: xxxxxxxxxxx

    • เสร็จ!!! แบบง่ายๆ และงงๆ
    • และสำหรับ 1 email address สามารถใช้ token เดียวกันได้ 3 เครื่อง สำหรับผู้ใช้ฟรี!!
    • ตั้งแต่ใช้มาประมาณ 1 ปีครึ่ง ก็ไม่รู้ว่ามีอัพเดตอะไรบ้างเหมือนกัน กรั่กๆ
    • ตรวจสอบสถานะของ canonical-livepatch ด้วยคำสั่ง
    sudo canonical-livepatch status --verbose
    • ก็จะได้ประมาณว่า
    • จบขอให้สนุก

    อ้างอิง

    https://ubuntu.com/security/livepatch

  • สร้าง Web API สำหรับส่ง iOS Push Notification ด้วย dotAPNS

    ความสามารถของแอปพลิเคชันในปัจจุบันที่จะขาดไม่ได้เลย อย่าง Push Notification นั้น สำหรับนักพัฒนาชาว .Net แน่นอนครับว่ามี Library มากมายให้เลือกใช้ ในบทความนี้ผมจะเล่าวิธีการหนึ่ง ที่ได้เลือกใช้เพื่อตอบโจทย์การเชื่อมต่อแอปพลิเคชันกับหลายๆฐานข้อมูล การที่เราจะไป Deploy ตัวส่ง (Sender) ไว้ทุกๆ Server นั้นในด้าน Compatibility, Configuration, Maintain นั้นมีปัญหาแน่นอน เพราะข้อกำหนดของ Apple นั้นมีหลายอย่างพอสมควร ก่อนที่ตัวส่งของเรา จะได้รับอนุญาตุให้ส่งข้อความไปหาผู้ใช้ได้ ดังนั้นการติดตั้ง Sender ในแบบ Web API ไว้เพียงที่เดียว แล้วให้ทุก Client ที่ต้องการส่งมาเรียกใช้งาน จึงเป็นการลดปัญหาข้างต้นได้

    สิ่งที่จะต้องมี

    1.KeyID, BundleID, TeamID ทั้งสามค่านี้สามารถดูได้จาก appstoreconnect ในรายละเอียดของแอปพลิเคชัน

    2.Push Notification Certification (.p8) ในบทความนี้จะใช้วิธีการส่งแบบ Token Based ซึ่งมีความยืดหยุ่นและบำรุงรักษาได้ง่ายกว่า แบบ Certification Based แต่อย่างไรก็ตามยังคงต้องมี Certificate สำหรับการยืนยันตัวตนประกอบการสร้าง Token อยู่ดี ซึ่งสามารถเข้าไปสร้างได้ที่ developer.apple.com > Account > Key เลือกสร้างแบบ
    Apple Push Notifications service (APNs)

    3. Web Server ที่สามารถเชื่อมต่อด้วย HTTPS, HTTP/2 ได้

    สร้างโปรเจค Web API

    ในบทความนี้ใช้ Visual Studio 2019 Version 16.8.0

    1.ไปที่ File > New > Project เลือกเทมเพลต ASP.NET Web Application (.Net Framework) กดปุ่ม Create

    2.เลือกรูปแบบโปรเจคเป็นแบบ Web API กดปุ่ม Create

    3.เมื่อสร้างโปรเจคสำเร็จจะได้ไฟล์ต่างๆดังรูป (Main.aspx, MainController.cs สร้างเองภายหลัง สามารถตั้งชื่ออื่นๆได้)

    4.ทำการเพิ่ม Library dotAPNS ด้วย Nuget Manager โดยการคลิกขวาที่โปรเจค เลือกเมนู Manage Nuget Packages ค้นหาด้วยคำว่า dotAPNS จากนั้นกดปุ่ม Install

    5. ในไฟล์ MainController.cs ทำการ using dotAPNS มาใช้งาน จากนั้นสร้าง Method ชื่อ SendPush (ไม่จำเป็นต้องชื่อนี้) โดยโค้ดการสร้าง Token และส่ง Push Notification ทั้งหมดมีดังนี้

    using System.Net.Http;
    using System.Web.Http;
    using System.Threading.Tasks;
    using System.Configuration;
    using dotAPNS;
    using System.Web;
    using System;
    
    namespace APNsService.Controllers
    {
        [RoutePrefix("api")]
        public class MainController : ApiController
        {
            [Route("SendPush")]
            [AcceptVerbs("GET", "POST")]
            public async Task<ApnsResponse> SendPush(string title, string body, string token, string category)
            {
                try
                {
                    //อ่านค่า CertContent หรือ CertFilePart, BundleID, KeyID,TeamID มาจาก ไฟล์ web.config
                    string certContent = ConfigurationManager.AppSettings["CertContent"];
                    string certFilePath = ConfigurationManager.AppSettings["CertFilePath"];
                    string bundleId = ConfigurationManager.AppSettings["BundleId"];
                    string keyId = ConfigurationManager.AppSettings["KeyId"];
                    string teamId = ConfigurationManager.AppSettings["TeamId"];
    
                    //สร้าง Option สำหรับ Token
                    var options = new ApnsJwtOptions()
                    {
                        CertContent = certContent,
                        BundleId = bundleId,
                        KeyId = keyId,
                        TeamId = teamId
                    };
    
                    //สร้าง Token
                    var apns = ApnsClient.CreateUsingJwt(new HttpClient(new WinHttpHandler()), options);
    
                    //สร้าง Push Object
                    var push = new ApplePush(ApplePushType.Alert)
                        .AddAlert(HttpUtility.UrlDecode(title), HttpUtility.UrlDecode(body))//ข้อความแจ้งเตือน
                        .AddBadge(0)//แสดงจำนวนแจ้งเตือนที่หน้าแอปพลิเคชัน
                        .AddCategory(category)//กำหนดกลุ่มของการแจ้งเตือน
                        .AddToken(token);//token
                    
                    //ส่ง Notification
                    return await apns.Send(push);
                }
                catch (Exception ex)
                {
                    return ApnsResponse.Error(ApnsResponseReason.Unknown, ex.Message + ex.StackTrace);
                }
            }
        }
    }

    จากโค้ดด้านบน สามารถทราบว่าส่วนไหนทำหน้าที่อะไรได้จาก Comment ครับ เพียงเท่านี้ก็สามารถ Publish และ Deploy Web API บน Server เพื่อทดสอบการใช้งานได้แล้ว อย่างไรก็แล้วแต่ Web API ดังกล่าวยังต้องการ การปรับแต่งให้เหมาะสมกับระบบของนักพัฒนาแต่ละท่าน แต่โดยขั้นตอนหลักๆก็มีเพียงเท่านี้ครับ

    6.หน้าฟอร์ม และตัวอย่างโค้ดเรียกใช้งาน (อยู่ในหน้า Main.aspx,Main.aspx.cs เพื่อใช้ทดสอบการส่ง)

    using System;
    using System.IO;
    using System.Configuration;
    using System.Net;
    using Newtonsoft.Json;
    
    namespace APNsService
    {
        public partial class Main : System.Web.UI.Page
        {
            string token = string.Empty;
            string baseUrl = string.Empty;
    
            protected void Page_Load(object sender, EventArgs e)
            {
                token = ConfigurationManager.AppSettings["apiToken"].ToString();
                baseUrl = string.Format("{0}://{1}{2}/", Request.Url.Scheme, Request.Url.Authority, Request.ApplicationPath.TrimEnd('/'));
            }
    
            protected void btnSend_Click(object sender, EventArgs e)
            {
                string url = string.Format("{0}api/SendPush?title={1}&body={2}&category={3}&token={4}", baseUrl, txtTitle.Text,txtBody.Text,txtCategory.Text,txtToken.Text);
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.ContentType = "application/json";
                request.Headers.Add("token", token);
    
                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
                        string resultJSON = reader.ReadToEnd();
                        var result = JsonConvert.DeserializeObject<APNsResult>(resultJSON);
                        txtResult.Text = resultJSON;
                        txtURL.Text = url;
                        btnSend.Focus();
                    }
                }
                catch (Exception ex) 
                {
                    txtResult.Text = ex.Message;
                }
            }
    
        }
    
        public class APNsResult
        {
            public bool IsSuccess { get; set; }
            public int Reason { get; set; }
            public string ReasonString { get; set; }
        }
    }

    สังเกตุว่าในส่วนของการส่งจาก Client อื่นๆผ่าน Web API นั้นต้องการเพียงแค่ HttpWebRequest, Newtonsoft.Json เท่านั้นทำให้มีขนาดเล็ก และลดปัญหาความเข้ากันได้ในการติดตั้ง Client ไปได้อย่างแน่นอนครับ

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

  • วิธีการส่ง Line Notify เมื่อมีการเปิดคอมพิวเตอร์

    เริ่มจากต้องทำการขอ Line Token ซึ่งดูได้จากบทความ การส่ง Line Notify ด้วย Command Line

    จากนั้นให้สร้าง bat file โดยเปิด notepad แล้วใส่คำสั่ง command line ดังนี้

    curl -X POST -H “Authorization: Bearer Token” -F “message=XXX” https://notify-api.line.me/api/notify

    โดยที่ตัวอักษรสีแดงให้ทำการแทนที่ดังนี้
    Token แทนที่ด้วย Line Token ที่ขอไว้ตอนต้น
    XXX แทนที่ด้วย ข้อความที่ต้องการส่ง

    แล้วให้ save file ด้วยนามสกุล .bat

    เปิด Task Scheduler ขึ้นมา แล้วกดที่ Create Task

    ใส่ชื่อ task ที่ช่อง Name

    กดที่tab Triggers แล้วกดปุ่ม New

    ที่ Begin the task เลือกเป็น At startup

    ติ๊กที่ Delay task for แล้วเลือกเป็น 1 minute แล้วกดปุ่ม OK

    จะได้ผลดังรูป

    กดที่tab Actions แล้วกดปุ่ม New

    กดปุ่ม browse เลือก file bat ที่สร้างไว้ตอนต้น แล้วกดปุ่ม OK

    กดที่tab Conditions

    ตรงส่วนของ Network ให้ติ๊กหน้า Start only if the following network connection is available

    กดปุ่ม OK

    กดที่ปุ่ม OK อีกครั้งตามรูป

    จะมี task ที่สร้างขึ้นปรากฏดังรูป

    เมื่อมีการ start computer จะมีข้อความส่งไปทาง Line ดังรูป

  • การส่ง Line Notify ด้วย Command Line

    ถ้าจะส่ง Line Notify ต้องมี Line Token ก่อน ซึ่งมีวิธีการขอดังนี้
    1. เข้าไปยังwebsite https://notify-bot.line.me/my/
    2. Login ด้วย LINE Account
    3. คลิกที่ปุ่ม Generate token

    4. ตั้งชื่อ Line ที่จะแสดงตอนแจ้งเตือน ในช่องตามรูป

    5. เลือกว่าจะ Notify ไปที่ group ใด ซึ่ง group ที่เราเลือกจะเป็นสีเขียว แล้วให้กดปุ่ม Generate Token

    6. จะได้ Line Token มาดังรูป

    หลังจากได้ Line Token แล้ว ให้เราเปิดโปรแกรม Command Promt ขึ้นมา โดยถ้าเป็น windows10 ให้กดที่รูปแว่นขยายที่ taskbar แล้วพิมพ์ Command Promt แล้วกดที่ปุ่ม open ทางด้านขวา

    จะมีโปรแกรมปรากฎดังรูป

    ให้ใส่ข้อความดังนี้

    curl -X POST -H “Authorization: Bearer Token” -F “message=XXX” https://notify-api.line.me/api/notify

    โดยที่ตัวอักษรสีแดงให้ทำการแทนที่ดังนี้
    Token แทนที่ด้วย Line Token ที่ขอไว้ตอนต้น
    XXX แทนที่ด้วย ข้อความที่ต้องการส่ง

    เมื่อใส่ข้อความเสร็จแล้วให้กด Enter

    ถ้าส่งข้อความสำเร็จโปรแกรม Command Promt จะขึ้นดังรูป

    แล้วที่ Line ก็จะได้รับข้อความดังรูป

  • การสลับข้อมูลจาก Column เป็น Row ใน Excel

    ท่านผู้อ่านที่ใช้งาน Excel น่าจะเคยเจอปัญหาหรือมีความต้องการที่ว่า มีข้อมูลที่มีลักษณะเป็น Column แต่ต้องการย้ายให้มาแสดงในรูปแบบ Row ถ้าต้อง copy แล้วมา paste ทีละตัวคงไม่สะดวกอย่างแน่นอน แต่ Excel ได้จัดเตรียมเครื่องมือสำหรับแก้ปัญหาเหล่านี้เอาไว้แล้ว ลองไปดูกันเลย

    1.สมมติเรามีข้อมูลชื่อเดือนเก็บอยู่ในเ Excel ในคอลัมน์เดียวกันเรียงกันลงมาดังรูป

    2. เลือกข้อมูลที่ต้องการย้ายทั้งหมดแล้ว copy เก็บไว้

    3. ไปยัง sheet หรือ cell ที่ต้องการ จากนั้นคลิกขวา ใต้เมนู Paste Options เลือกไอคอนที่ 4 (Transpose)

    4. ก็จะได้ข้อมูลมาอยู่ในรูปแบบแนวนอน ดังรูป

    5. จากข้อ 2 ถ้าเราเลือกเมนู Paste Special… จะปรากฏ dialog ดังรูป ให้เลือก Transpose จากกดปุ่ม OK เพื่อยืนยัน ก็จะได้ผลลัพธ์เหมือนกัน

    นอกจากนี้ เรายังสามารถใช้ฟังก์ชัน TEXTJOIN() โดยฟังก์ชันนี้จะทำหน้าที่รวมข้อความจากช่วงข้อมูลหรือข้อความหลายๆ ส่วนเข้าด้วยกันและสามารถระบุตัวคั่นระหว่างข้อมูลได้ด้วย โดยฟังก์ชันนี้จะมี parameter สามส่วนหลักๆ คือ

    TEXTJOIN(ตัวคั่น, ignore_empty, text1, [text2], …)
    พารามิเตอร์คำอธิบาย
    ตัวคั่นสตริงข้อความไม่ว่าจะเป็นสตริงข้อความว่าง, ประกอบอักขระอย่างน้อย 1 ตัวในอัญประกาศ หรือมีการอ้างอิงไปยังสตริงข้อความที่ถูกต้อง ถ้ามีตัวเลขอยู่ก็ถือว่าเป็นข้อความ
    ignore_emptyถ้าเป็นค่า TRUE ให้ละเว้นเซลล์ว่าง
    text1รายการข้อความที่จะถูกรวมเข้าด้วยกัน สตริงข้อความ หรืออาร์เรย์ของสตริง เช่น ช่วงเซลล์
    [text2, …]รายการข้อความเพิ่มเติมที่จะถูกรวมเข้าด้วยกัน สามารถมีอาร์กิวเมนต์ข้อความสำหรับรายการข้อความได้สูงสุด 252 รายการ รวมถึง text1 แต่ละรายการสามารถเป็นสตริงข้อความหรืออาเรย์ของสตริงได้ เช่น ช่วงเซลล์

    ตัวอย่างการใช้งานดังรูป

    จะเห็นว่าถ้าเป็นวิธีใช้ฟังก์ชัน TEXTJOIN ข้อมูลจะถูกนำมารวมในฟิลด์เดียวกัน ซึ่งก็ขึ้นอยู่กับการเลือกนำไปประยุกต์ใช้ ว่าวิธีการไหนจะเหมาะกับงานตัวเอง

    ก่อนจะจากไป ขอแถมอีกวิธีบน MS Word เผื่อใครอยากทำอะไรคล้ายๆ แบบนี้ วิธีการคือ

    1. ข้อมูลแยกกันอยู่คนละบรรทัด ดังตัวอย่าง

    2. เลือกข้อมูลทั้งหมด จากนั้นกด Ctrl + H จะปรากฏ dialog “Find and Replace” ดังรูป

    3. ป้อน ^p ในช่อง Find what: และป้อน , ลงในช่อง Replace with: จากนั้นกด Replace All ข้อมูลทั้งหมดจะถูกยุบมาอยู่ในบรรทัดเดียวกัน โดยมี , คั่นอยู่ระหว่างข้อมูลแต่ละบรรทัด ดังรูป

    ซึ่งเทคนิคนี้ก็คือการแทนที่อักขระขึ้นบรรทัดใหม่ ด้วย , นั่นเอง

    ก็หวังเป็นอย่างยิ่งว่าบทความนี้น่าจะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อย จนกว่าจะพบกันใหม่

    สวัสดีครับ


    อ้างอิง

    https://superuser.com/questions/240858/convert-a-column-into-a-comma-separated-list
    http://www.saranitus.com/2018/10/ย้ายข้อมูลจาก-row-เป็น-column-ใน-excel-2016.html
    https://www.it-guides.com/training-a-tutorial/office-tutorial/transpose-microsoft-excel-2007
    https://support.microsoft.com/th-th/office/textjoin-ฟังก์ชัน-textjoin-357b449a-ec91-49d0-80c3-0e8fc845691c

  • How to apache2 HTTP/2

    • วันนี้อัพเกรตเครื่อง licensing เป็น 20.04.1 เลยมาดูว่ามีอะไรที่ควรเปลี่ยนอีกบ้าง ก็มี HTTP/2 นี่ละ ออกมาหลายปีแล้วยังไม่ได้เริ่มใช้งาน เท่าที่ตรวจสอบเว็บเซิร์ฟเวอร์ฝั่ง windows เป็น http/2 เกือบหมดแล้ว

    https://thanwa.medium.com/http-2-คืออะไร-แตกต่างจาก-http-1-1-อย่างไร-5dfb14e46ae4

    HTTP/1.1 และ HTTP/2 ต่างกันอย่างไร
    • เริ่มได้
    • ตรวจสอบก่อนว่า server ใช้ http/2 หรือไม่ทำได้โดยใช้ web developer tool บน web browser เช่น Firefox กด F12
    Web Developer

    คลิกหัวข้อ Network ซึ่งในครั้งแรกจะไม่สามารถดูได้ว่าใช้ http/2 แล้วหรือไม่ ให้คลิกขวาดังรูป แล้วเลือก Protocol

    Web Developer

    จะได้เป็น

    HTTP/1.1

    จะเห็น http/1.1 ในช่อง Protocol ถ้าเป็น http/2 จะได้ดังภาพ

    HTTP/2
    • ขั้นตอนต่อไปนี้ทำบน Ubuntu 20.04.1 อาจใช้ได้กับ 18.04.x ด้วยเช่นกัน
    • เริ่มด้วยการเปิด module ของ apache2 ที่ชื่อ http2 ด้วยคำสั่ง
    sudo a2enmod http2
    • เมื่อตรวจสอบแฟ้ม /etc/apache2/mods-enabled/http2.conf (ด้วย editor ที่ชื่นชอบ) จะพบว่ามีข้อความต่อไปนี้อยู่แล้ว
    Protocols h2 h2c http/1.1
    • โดยปกติ Http/1 จะถูกเรียกใช้ก่อนเสมอ เว้นแต่ว่า web browser นั้นจะรองรับ http/2 แต่เราต้องการ http/2 ถูกเลือกก่อนจึงต้องกำหนดตามนั้น
    • แต่ web browser ก็มีการเลือก Protocol เองด้วยเพื่อเป็นการบังคับให้เลือก ตามลำดับของ server ให้ใส่ข้อความต่อไปนี้เพิ่มลงไป
    ProtocolsHonorOrder On

    *** จากการทดสอบพบว่า web browser สมัยใหม่เลือก http/2 ก่อนอยู่แล้ว ไม่จำเป็นต้องใส่ก็ได้ เพราะงั้นแค่เปิดดูแล้วก็ออกจากแฟ้ม

    • รีสตาร์ท apache2 ด้วยคำสั่ง
    sudo systemctl restart apache2
    • ตรวจสอบว่า เป็น http/2 แล้วหรือไม่ด้วยคำสั่ง
    curl -I --http2 -s https://domain.com/ | grep HTTP

    ได้ผลดังภาพ

    curl

    แปลว่า http/2 ทำงานแล้ว

    • ทีนี้เว็บเรามันทำด้วย mod_php ต้องเปลี่ยนมาใช้ PHP-FPM
    • ติดตั้ง php7.4-fpm เพิ่มด้วยคำสั่ง
    sudo apt install -y php7.4-fpm
    • ปิดการใช้งาน mod_php ด้วยคำสั่ง
    sudo a2dismod php7.4
    • ปิดการใช้งาน apache mpm_prefork ด้วยคำสั่ง
    sudo a2dismod mpm_prefork
    • หลังจากนั้นเปิด การทำงานของ mpm_event, proxy_fcgi และ setenvif
    sudo a2enmod mpm_event proxy_fcgi setenvif
    • เปิดการทำงานของ php7.4-fpm ด้วยคำสั่ง
    sudo systemctl start php7.4-fpm
    • ให้ php7.4-fpm ทำงานทุกครั้งที่รีสตาร์ท
    sudo systemctl enable php7.4-fpm
    • เปิดการทำงานของ php7.4-fpm ใน apache2
    sudo a2enconf php7.4-fpm
    • เริ่มการทำงานของ apache2 ใหม่
    sudo systemctl restart apache2
    • ทดสอบว่าเป็น http/2 แล้วด้วยคำสั่ง
    curl -I --http2 -s https://domain.com/ | grep HTTP

    ได้ผลดังภาพ

    • จริงๆ ตรวจสอบด้วย web browser ก็ได้ แต่อยากอวด command line
    • จบขอให้สนุก

    อ้างอิง

    https://www.tecmint.com/enable-http2-in-apache-on-ubuntu/

    https://httpd.apache.org/docs/2.4/howto/http2.html

  • มาจัดการข้อมูลซ้ำ ๆ และเอาข้อมูลล่าสุดกัน ใน Excel

    สืบเนื่องจากเมื่อ 2-3 เดือนก่อน มีโอกาสได้ทำแบบสอบถาม เก็บข้อมูลนักศึกษา แล้วนักศึกษากรอกข้อมูลมาซ้ำ ๆ กันหลายคน และเราจะเอาแค่ข้อมูลล่าสุดเท่านั้น ทำไงกันดีนะ….. ในเมื่อแบบสอบถาม export ออกมาเป็น excel ได้ เราก็มาลองดูว่าทำไงได้บ้าง เล่นไปเล่นมา เฮ้ย ง่ายจุง ได้ข้อมูลตามต้องการด้วยสิ มาดูกัน

    จากภาพ เราต้องทำการ Sort รหัสนักศึกษาและ Timestamp ล่าสุด สุ่มดูคร่าว ๆ รหัสนักศึกษา 6110610025 มีรายการซ้ำ เมื่อจัดการข้อมูลซ้ำและให้เหลือเฉพาะข้อมูลล่าสุด ต้องเป็นแถวที่ 42

    จากนั้นคลิกแท็บ Data –> Remove Duplicates เลือกเลือกเฉพาะ รหัสนักศึกษา ซึ่งมันซ้ำกันอยู่ เมื่อเรียบร้อยแล้วจะแสดง Dialog แจ้งบอก

    มี 28 รายการที่ซ้ำและได้ลบออกไปแล้ว 165 รายการที่ไม่ซ้ำ สุ่มดู รหัส 6110610025 จะพบแค่รายการล่าสุดเท่านั้น

    เป็นวิธีที่ง่ายมาก ลองนำไปใช้กันดูนะคะ แล้วพบกันใหม่ค่ะ…..