Wednesday, February 26, 2020

วิธีเปิด DNS over HTTPS บน chrome

เปิดทำไม DNS over HTTPS ทุกวันนี้มีการบันทึกการเข้าถึงเวปไซต์ต่าง ๆ ส่งไปให้หน่วยงานต่าง ๆ เยอะแยะ(ทั้งราชการ และไม่ใช่) การที่เราเข้ารหัสส่วนนี้เป็นการ ป้องกันการละเมิดสิทธิส่วนบุคคลฯ
ซึ่งเมื่อทาง ISP หรือ บุคคลอื่น ๆ ที่ดักไว้จะได้ข้อมูลประมาณ

https://www.di.com/sf23245ksajf9w83uds;fja394uoijfoe8wurj;lkvsjdf3085jlkjfsd  เป็นต้น

ขั้นตอนการเปิด  Chrome

1. ใน address bar ให้พิมพ์ chrome://flags/#dns-over-https แล้วกด  Enter 
2.  click ที่ปุ่มด้านหลัง  เพื่อ Enable 
3. จากนั้น  restart browser
***  อย่าลืมเปลี่ยน  primary DNS ใน windows  เพื่อให้เรียกใช้  DNS ที่รองรับ https ด้วย

ขั้นตอน 

1.  click ขวา ที่ปุ่ม Start จากนั้นเลือก setting  > network & internet 
2. จากนั้นเลือก status > change adapter options 
3. Click ขวา ที่ connection ที่ต้องการ เช่น wifi ก็ click ขวาที่ wifi
4. เลือก tcp/ip v4 แล้วกดปุ่ม properties 
5. ช่อง DNS ข้างล่างให้ใส่   primary 1.1.1.1   alternative 1.0.0.1   ค่านี้เป็นของ cloudflare ถ้าจะใช้เจ้าอื่นก็เปลี่ยนเอาเอง 
6. จากนั้น เลือก tcp/ip v6   ใส่ ในช่อง primary 2606:4700:4700::1111 และ 2606:4700:4700::1001 ในช่อง alternative


Tuesday, February 11, 2020

บันทึกความทรงจำ SQL Tuning (Oracle) #1 เบื้องต้น

      ไม่ได้เขียนบทความใน blog ของตัวเองมานาน ช่วงหลังจากมีลูก มีเรื่องให้คิดเยอะขึ้น มีอะไรที่อยากจะทำ มีความคำถามที่อยากจะถามตัวเอง อยากหาคำตอบให้กับตัวเอง แล้วก็อยากจะห่างจาก social หน่อย ช่วงหลัง ๆ เลยไม่ค่อยได้จับคอมฯ หรือ tablet  ส่วนใหญ่จับแต่ kindle ไว้อ่านหนังสือ เรื่องบ่น ๆ เดี๋ยวค่อยเขียนอีกอันดีกว่า ^ ^"
   
    จริง ๆ บทความนี้คิดว่าอยากจะเขียนมานานละ แล้วก็ลืมไปเลย จนวันนี้เพื่อนคนหนึ่งโทรมาปรึกษาเรื่อง SQL Tuning เลยได้โอกาสเขียนบทความนี้สักที
     


บันทึกความทรงจำการทำ  SQL Tuning (Oracle) #1 เบื้องต้น
    สมัยก่อนประมาณเกือบ ๆ 10 ปีที่แล้วผมยังทำงานสาย IT อยู่บริษัทใหญ่บริษัทนึง สำนักงานใหญ่อยู่สีลม สมัยนั้นทำงานเกือบทุกอย่างค่อยข้างผสมปนเป  ประมาณว่าใครมีปัญหาติดปัญหาอะไรก็มาปรึกษา งานไหนไม่มีใครทำก็เอามาทำ ถ้าจำไม่ผิดตอนนั้นทีมตัวเองเรียกว่าทีม solution

   หนึ่งในปัญหาที่ส่งมาปรึกษากันก็คือ Database ทำงานช้าดึงข้อมูลช้ามาก ซึ่งข้อมูลมีขนาดระดับ 200GB ได้  ก็เลยได้ลองทำ SQL Tuning และได้รู้จักกับ Oracle SQL Analyzer

ขั้นตอนการทำ SQL Tuning 
  1. ดึงข้อมูล SQL ที่ทำงานช้าออกมาก่อน ขั้นตอนนี้ก็ง่าย ๆ แค่ดึงคำสั่งที่ทำงานช้าออกมา โดยดูการระยะเวลาการดึงข้อมูล ถ้าเป็น application ก็ลองดูว่า page ไหนทำงานช้าแล้วค่อย ๆ ดึงข้อมูล sql  นั้น ๆ ออกมา 
  2. วิเคราะห์คำสั่ง SQL ที่ใช้  คำสั่งที่ใช้ในการ Query จะมีเงื่อนไขค่อนข้างเยอะ แล้วบ้างครั้ง database ที่ออกแบบมานั้น ก็ทำ normalization เรียบร้อยมาก (ในหนังสือเรียน Database จะมีสอนเสมอ) แต่การทำ normalization ที่ละเอียดไม่ได้ตอบโจทก์การทำงานจริง ที่ต้องการความรวดเร็ว  เนื่องจากจะต้องมีการ join table เยอะ ซึ่งการ joint table ยิ่งเยอะ ก็ยิ่งทำให้ DB ทำงานเยอะตามไปด้วย แต่จะไม่ normalization เลยก็ไม่ได้เพราะข้อมูลจะเก็บซ้ำซ้อนเยอะ ทำให้การจัดการ และ DB บวมได้ สิ่งที่ต้องวิเคราะห์แบ่งเป็นข้อ ๆ ได้ดังนี้ 
    1.   การ joint table  มีการ joint กี่ table เป็นการ joint  แบบไหน? ( inner, outter, lefe join, right joint) มีการใช้ index เป็น key ในการ joint หรือไม่ ?  ถ้ามีความจำเป็นที่ต้อง joint ก็แนะนำให้สร้างเป็น view เลยดีกว่า จากนั้น select จาก view โดยตรง เนื่องจาก DB ต่าง ๆ จะสร้าง index ให้โดยอัตโนมัติ DB สมัยใหม่นั้นจะมีการสร้าง view ได้หลายแบบ สามารถเลือกสร้างได้ตามความเหมาะสม 
    2. เงื่อนไขการ Query แต่ละเงื่อนไข มีการสร้าง index แล้วหรือยัง?  กรณีที่มี index อยู่แล้ว index ที่สร้างมีความเหมาะสมกับเงื่อนไขนั้น ๆ หรือไม่  ถ้าข้อมูลมีขนาดใหญ่มาก ๆ  ก็พยายามลดการ Query ที่ดึงข้อมูลทั้ง DB เช่นการเพิ่มเงื่อนไขของช่วงเวลามาเป็นต้น จะทำให้ DB ทำงานน้อยลง 
    3. เพิ่มระบบการ Paging ลงใน SQL ถ้าใน Oracle จะใช้คำสั่ง  Limit จะทำให้ DB ลดการทำงานลง เพราะการใช้งาน ผ่าน App ส่วนใหญ่จะ display ข้อมูลแค่เพียงจำนวนนึง ไม่ได้ใช้พร้อมกันทั้งหมด เป็นต้น 
    4. database ที่ใช้ได้ทำการ reindex หรือ เรียงลำดับข้อมูลใหม่หรือไม่?  ส่วนนี้เกี่ยวข้องกับ DBA โดยตรง index ต่าง ๆ เมื่อใช้งานได้สักระยะ ก็ควรจะต้องทำการ reindex ใหม่เสมอ เช่นอาจจะ เดือนละครั้ง หรือ สัปดาห์ละครั้ง เป็นต้น
       
  3. แก้ไข index, table, view สร้าง index ตาม criteria ในการใช้งาน  table มีหลายประเภทสามารถเลือกใช้ตามความเหมาะสมได้จะทำให้ DB เร็วขึ้น  view ก็เหมือนกัน ถ้าจำเป็นต้อง joint table บ่อย ๆ สร้าง view ไว้เลยก็เป็นความคิดที่ดี  view เองก็มีทั้ง view แบบ memory และ view แบบ permanant 
  4. แก้ไขคำสั่ง SQL ใหม่ โดยอิงจากผลลัพธ์ให้เหมือนเดิม 

Saturday, November 10, 2018

ขั้นตอนการ Install Ubuntu 18.04 และ amdgpu Pro สำหรับเครื่องขุดเหมือง (Crypto Currency Mining)


  1. ติดตั้ง Ubuntu 18.04  เลือกแค่ minimal install ก็พอ 
  2. ติดตั้ง amdgpu pro
    1. sudo apt-get update
    2. sudo apt-get dist-upgrade
    3. sudo reboot
    4. Download amdgpu pro จาก Download amdgpu-pro  โดยเลือกจากรุ่น Gpu ที่ใช้ 
    5. ** ถ้าไฟล์นามสกุล .xz xz -d amdgpu-pro-18.40-676022-ubuntu-18.04.tar.xz  
    6. tar -xvf amdgpu-pro-18.40-676022-ubuntu-18.04.tar.xz  
    7. cd amdgpu-pro-18.40-676022-ubuntu-18.04/
    8. สำหรับการ install ทั้วไป ใช้ ./amdgpu-installer -y
    9. สำหรับการ Gpu Vega10 ขึ้นไป ใช้ ./amdgpu-installer -y --opencl=pal
    10. สำหรับการ Gpu รุ่นตำ่กว่า vega10 เช่น Rx580, Rx570, Rx480 ฯลฯ ใช้ ./amdgpu-installer -y --opencl=legacy
    11. หลังจาก install เสร็จสิ้นก็ใช้คำสั่ง sudo adduser usernameX video เพื่อเพิ่ม usernameX ลงใน group video
    12. sudo reboot
  3. แก้ไขปรับเปลี่ยน config ใน Ubuntu ให้เหมาะสำหรับขุดเหมือง (Cryto Currency Mining)
    1. ปิด auto update 
      • แก้ไขไฟล์  /etc/apt/apt.conf.d/20auto-upgrades  
      • แก้ไขให้เป็น  APT::Periodic::Update-Package-Lists "0";
    2. Boot to text mode
      • $ sudo systemctl set-default runlevel3.target หรือ sudo systemctl start multi-user.target
    3. Boot to graphic mode (GUI) 
      • $ sudo systemctl set-default runlevel5.target หรือ sudo systemctl start graphical.target
    4. การ Run Background คำสั่ง โดย Screen
    5. การเปลี่ยน ttys ใน ssh client 
      • chvt # โดย # คือค่า ttys ที่ต้องการเปลี่ยน
    6. กรณีลืม password  Ubuntu 
      1. กดปุ่ม shift ค้างไว้ ตอน boot เครื่อง เพื่อแสดงเมนู grub 
      2. เลือก Recovery Mode > root
      3. mount -o remount,rw /
      4. passwd userXX

Wednesday, August 1, 2018

เรื่องวุ้น ๆ ของ Paratition สำหรับคนที่ใช้ทั้ง mac, linux และ windows10

    Paratition ไหนดีที่สุด? ถ้าเราต้องใช้งานร่วมกันกับเครื่องหลากหลาย Platform (linux, windows, mac)
      ที่มาของคำถามนี้คือ ที่บ้านของผมมีเครื่อง mac 2 เครื่อง linux 2 เครื่อง และปัจจุบัน (2018/07) ก็มี windows10 เพิ่มมาอีก 1 เครือง  ปัญหาที่เจอคือ

     ช่วงแรก - ใช้แต่เครื่อง mac เลย format external drive เป็น HFS+ (MAC)

     ช่วงที่สอง  -  เจอเครื่่อง notebook เก่า ๆ ของแฟน เลยเอามาชุบชีวิตใส่ linux เอาไว้เล่นเน็ต เขียน python    ช่วงนี้เริ่มเจอปัญหาละ ว่า linux มัน mount  HFS+ ไม่ค่อยเจอ ต้องสั่ง command line เอาเอง

     ช่วงที่สาม - น้องชายแฟน ซื้อ notebook ใหม่มา (windows10) พอจะเอา external drive ของเราไปต่อ ก็ต้องลงโปรแกรมเพิ่มให้สามารถอ่านได้  แล้วจะเอาไฟล์งาน กลับมาก็ไม่ได้ เนื่องจาก read only

     ช่วงที่สี่   -  เครื่อง mac เริ่มมีปัญหา เนื่องจากอายุอานามที่ใช้มานาน เลยจัด notebook ของตัวเองแต่รอบนี้ต้องทำงานกับ windows

เลยต้องทำการสังคยณาครั้งใหญ่  Paratition ที่เหมาะที่จะใช้กับหลาย Platform ที่สุดก็คือ exFat ครับ ตัวนี้ format ใน windows10 ได้เลย สามารถ read/write ผ่าน mac, linux และ windows ได้หมด 

Wednesday, July 26, 2017

vim in mac problem with python mode

ปัญหา: จะเขียนโปรแกรมภาษา python ผ่าน vim โดยใช้ python-mode เป็นตัวช่วยเขียน IDE 
พอ install เสร็จ แล้วเรียกไฟล์    .py มาแก้ไข ก็เกิดปัญหา 

Error detected while processing /.vim/bundle/python-mode/autoload/pymode/lint.vim
line  1:
สาเหตุ: เนื่องจาก vim ที่ mac ให้มาเป็น version 7.4  ซึ่ง complied โดย python 2.6 ทำให้เกิดปัญหาดังกล่าว   

การแก้ไข: ทำการ install vim ใหม่ โดยใช้คำสั่ง . 
   
    brew install vim --overide-system-vi

     จากนั้นก็ทำการแก้ไข alias ใหม่ 

    alias vim='/usr/local/Cellar/vim/8.0.0771_1/bin/vim'



Monday, July 10, 2017

แก้ไขปัญหา ถอดกุญแจไม่ออก ปุ่มเกียร์แข็งค้าง เบรคค้าง - Honda Civic

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

     แต่พอ start เครื่องอีกครั้ง เพื่อลองเข้าเกียร์ดูปรากฎว่า เกียร์ค้าง ไม่สามารถเข้าเกียร์ได้  เบรคก็แข็งค้างอีก เลยต้องติดต่อช่างฯ 

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


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

Wednesday, July 5, 2017

Genetic Algorithm (ขั้นตอนวิธีเชิงพันธุกรรม)





Genetic Algorithm (ขั้นตอนวิธีเชิงพันธุ์กรรม)  

    ** เนื่องจากภาษาไทยมันยาวต่อไปจะเรียกย่อเป็น GA 
    GA เกิดขึ้นมาจาก 
  • ทฤษฎีวิวัฒนาการของ Charles Darwin มีรายละเอียดคราว ๆ ดังนี้  "การคัดเลือกสายพันธุ์ที่มีความเหมาะสม(Fitness) กับสภาพแวดล้อมจะมีโอกาสอยู่รอดได้มากและ มีโอกาสถ่ายทอดลักษณะทางพันธุกรรมไปสู่ลูกหลานรุ่นต่อไป ในขณะที่สายพันธุ์ที่ไม่เหมาะสมกับสภาพแวดล้อมจะมีโอกาสอยู่รอดได้น้อยและมีโอกาสสูญพันธุ์ไปในที่สุด " 
  • ทฤษฎีถ่ายทอดลักษณะทางพันธุกรรม Gregor Mendel  คือ ลูกจะได้รับลักษณะเด่น ลักษณะด้อยจากพ่อและแม่ ผ่านการสืบพันธ์ โดยมีอัตราส่วนที่แน่นอน สามารถคำนวณได้ เป็นอัตราส่วน  4:1   ตามลำดับ
GA ใช้ในการแก้ไขปัญหา Optimization, จัดตารางเวลาการผลิตที่มี Factor เยอะ ๆ, จัดตารางการเดินทาง (logistics), หรือคำตอบของ function อนุพันธ์ ต่าง ๆ ผ่านการวิวัฒนาการจนได้รับคำตอบที่ดีที่สุด (Finess)

ขั้นตอนการทำงานของ GA
  1. ออกแบบ "รูปแบบคำตอบ" หรือ โครโมโซม โดยรูปแบบโครโมโซมส่วนใหญ่แล้วจะสร้างขึ้นมาในรูปของตัวเลขฐาน 2 
  2. กำหนด โครโมโซม ใน รุ่นที่ 1, กำหนด "จำนวนรุ่นที่ต้องการสร้าง" , จำนวนของโครโมโซมที่ต้องการ  ** ถ้าไม่ต้องการกำหนดจำนวนรุ่นที่ต้องการสร้าง อาจจะกำหนดเป็นเงื่อนไขของ ค่า Fitness Function ก็ได้ 
  3. ออกแบบ "Fitnesss Function" สำหรับใช้ในการทดสอบความแข็งแรงของ โครโมโซมแต่ละตัว function นี้จะเป็น function หลักที่จะใช้ตรวจสอบว่า โครโมโซมไหนแข็งแรงเพียงพอ ที่จะเป็น พ่อ และแม่พันธ์ุ สำหรับ รุ่นที่ 2
  4. ออกแบบวิธีการวิวัฒนาการ พร้อมทั้งกำหนดอัตราส่วนสำหรับวิธีการต่าง ๆ 
    1. crossover การสืบพันธ์โดยผสมยีนส์ จากโคโมโซมของพ่อ และแม่ เพื่อสืบลักษณะเด่น 
      1. Single - Point CrossOver  คือ การนำยีสต์ ตัวที่เป็นหลักเลขคี่ของพ่อ มารวมกับหลักเลขคู่ของแม่ หรือสลับกันก็ได้ เพื่อให้ได้ โครโมโซมใหม่ (ลูก) 
      2. Two - Point CrossOver คล้ายกับแบบ Single แต่ดึงมารวมกับทีละ 2 ยีนส์
      3. Uniform Crossover กำหนดรูปแบบการรวมกับเอง 
    2. Reproduction เป็นการนำโครโมโซมของรุ่นก่อนหน้าที่มีค่า Fitness ที่ดี มาใช้ใน รุ่นต่อมา
    3. Mutation การสร้างโครโมโซมขึ้นมาโดยมีรูปแบบที่ไม่แน่นอน เช่น Random เป็นต้น 
  5. ทำการคัดกรอง โครโมโซม รุ่นที่ 1 ผ่าน Fitness Function คัดกรองโดยการเรียงลำดับความแข็งแรง
  6. ทำการวิวัฒนาการของโครโมโซม รุ่นที่ 2 โดยใช้ พ่อ แม่ จากรุ่นที่ 1 เมื่อได้จำนวนครบตามที่ต้องการแล้ว ก็กลับไปทำตามข้อ 5 ใหม่ 
  7. เมื่อครบ "จำนวนรุ่นที่ต้องการสร้าง" แล้วก็แสดงผลลัพธ์ค่าคำตอบที่ดีที่สุด 
อ้างอิง https://kapitaennem0.wordpress.com/2013/07/17/genetic-algorithm/

โจทก์ตัวอย่าง

   โรงงาน AAA  มีเครื่องจักรทั้งหมด 4 เครื่อง แต่ละเครื่องมีกำลังการผลิต และระยะเวลาทำงานแตกต่างกัน  รายละเอียดดังนี้

ชื่อเครื่องจักร กำลังการผลิต เวลาเปิดทำงาน ช.ม. ค่าไฟฟ้า
M-A 2500 24 1500
M-B 4000 12 2500
M-C 5000 18 3000
M-D 10000 24 10000
โดย มีวัสดุการผลิตเท่ากันทุกเครื่องจักร

มีคำสั่งซื้อ ดังนี้
บริษัท เวลารับสินค้าห่างจากวันปัจจุบัน (วัน)จำนวน
CA 3 2000
CB 5 30000
CC 12 100000
CD850000

ออกแบบตารางการผลิต (ระยะเวลา 14 วัน) ที่มีต้นทุนค่าไฟฟ้าถูกที่สุด และส่งของได้ครบภายในวันเวลาที่กำหนด

  1. ออกแบบ โครโมโซมจากโจทก์   ตารางการผลิต 14 วัน นับจากปัจจุบัน 










  2. กำหนดจำนวน ต่าง ๆ 
    1. จำนวนโครโมโซม ในแต่ละรุ่น  = 100
    2. .จำนวน Generation = 100 Gen 
  3. ออกแบบ Fitness Function มีเงื่อนไข 
    1. ต้องส่งสินค้าได้ัทันกำหนด อ่านข้อมูลจาก "ตารางคำสั่งซื้อ" โดย เทียบจำนวนที่ผลิตได้ในวันที่ต้องส่งสินค้า ว่าผลิตครบตามจำนวนนั้นหรือไม่  โดยกำหนดไว้กรณีแผนการผลิตที่ผลิตไม่่ทัน จะมีคะแนน FitnessScore = 0 ทันที 
    2. คำนวน ค่าไฟฟ้าของ แผนการที่มีค่า FitnessScore !=0 แล้วเรียงลำดับจาก ใช้ไฟฟ้าน้อย > ใช้ไฟฟ้ามาก > โครโมโซมที่มีค่า FitnessScore = 0  
  4. กำหนดรายละเอียดของการวิวัฒนาการ
    1. Re-production (30%) - นำโครโมโซม 30 อันดับแรกจาก ข้อ 3.2  
    2. Crossover (60%) -  นำโครโมโซมจากข้อ 4.1  มาเป็น พ่อ - แม่ พันธ์ุ
      1. single-point Crossover (25%)  
      2. two-point Crossover (25%)
      3. uniform Crossover (10%)
    3. Mutation (10%) -  Random ค่าโครโมโซมขึ้นมาให้ถูกต้องตามรูปแบบโครโมโซม 
  5. นำโครโมโซมรุ่นที่ 1 ทั้งหมดมาผ่าน Fitness Function ตามข้อ 3 
  6. ทำการวิวัฒนาการเพื่อสร้าง โครโมโซมรุ่นที่ 2  ตามข้อ 4
  7. กลับไปทำตามข้อ 5 ใหม่ จนกระทั้ง ครบจำนวน Gen ที่ต้องการ (100 gen)