Home

Linux: reinstall Ubuntu

อยู่ ๆ อูบุนตูมันเป็นตู่อะไรก็ไม่รู้ รวน ๆ แปลกอยากจะลงใหม่แต่ว่าไม่อยากที่จะทำอะไรมาก ขี้เกียจจะลงอะไรใหม่ ไปเจอวิธีที่ซ่อมให้กลับมาใช้ได้

  1. sudo apt-get clean
  2. สร้างไฟล์ reinstall_all.sh เช่น nano reinstall_all.sh แล้วใส่เนื้อหา
    #!/bin/bash
    for pkg in dpkg --get-selections | awk '{print $1}' | egrep -v '(dpkg|apt|mysql|mythtv)' ; do apt-get -y –force-yes install –reinstall $pkg ; done
  3. sudo chown root:root reinstall_all.sh
  4. sudo chmod 755 reinstall_all.sh
  5. sudo ./reinstall_all.sh
  6. รอตอบคำถามบางอย่าง

ดูจากเวลาแล้วใช้เวลาเยอะอยู่เหมือน แต่ก็ดีกว่ามาไล่เซ็ตหลาย ๆ อย่างใหม่ตั้งแต่ต้น ขอบคุณ
Force reinstall of all Ubuntu packages

windows: ลงโปรแกรมหลายเครื่อง

ถ้าต้องลงโปรแกรมเหมือน ๆ กันหลาย ๆ เครื่อง หรือตามไปอัพเดตโปรแกรมทุกเครื่องให้เป็นตัวล่าสุด จะดีมั๋ยถ้าจะลดเวลาที่ต้องใช้ลงไป ใช้สคริปท์ง่าย ๆ หมือนฝั่่ง Linux ที่ใช้ไฟล์เดียวก็ลงโปรแกรมที่ต้องใช้ได้ครบ

ก่อนอื่นโปรแกรมตัวนี้ชื่อ Chocolatey ไม่ต้องไปดาวน์โหลดมาก่อน วิธีติดตั้งมีทั้งแบบใช้คนเดียวและแบบองค์กรขนาดใหญ่ เพื่ออธิบายง่าย ๆ และที่ใช้ตอนนี้ไม่ได้มีเครื่องที่ต้องลงโปรแกรมมาก ขอใช้แบบลงส่วนตัวละกัน

  1. เปิด PowerShell ขึ้นมาโดนสิทธิ administrator copy
    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(‘https://community.chocolatey.org/install.ps1’))
    ไปวางแล้ว enter ก็ลงโปรแกรมติดตั้งเสร็จแล้ว
  2. ต่อไปคือสร้างลิสต์โปรแกรมที่จะติดตั้งลงเครื่องอื่น ๆ ขึ้นมาเพื่อความสดวกจะติดตัว Chocolatey Gui ( ทำแค่เครื่องของเราเครื่องเดียวก็พอ ) พิมพ์ choco install chocolateygui ใน PowerShell แลัว enter
    1. เปิดโปรแกรม Chocolatey GUI จากเมนูของ windows โดยสิทธิ administrator จะเห็นว่าซ้ายมือจะมีอยู่ 2 เมนูคือ
      • This PC คือรายชื่อโปรแกรมที่ติดตั้งในเครื่องเรา
      • chocolatey จะเป็นหน้าที่ไว้ค้นหาโปรแกรมที่จะติดตั้ง ต้องการจะติดตั้งโปรแกรมอะไรก็ค้นหาเอาจากหน้านี้ คลิกขวา install มันจะดาวน์โหลดโปรแกรมและติดตั้งให้เอง
    2. เมื่อลง program ที่ต้องการครบแล้วไปที่ This PC มุมขวาบนจะมีปุ่ม Export ให้เซฟไฟล์ไว้ใน flash drive จะเป็นไฟล์ Chocolatey.config
  3. ไปที่เครื่องที่จะติดตั้งโปรแกรมเพิ่มเปิด PowerShell ขึ้นมาโดนสิทธิ administrator และลง Chocolatey เหมือนขั้นตอนที่ 1
  4. ติดตั้งโปรแกรมในลิสต์โดยใช้ choco install <path-to-exported-file> เช่น choco install “E:\Chocolatey.config” โปรแกรมจะถูกติดตั้งเพิ่มตามที่มีอยู่ในลิสต์ที่ได้ทำไว้
  5. เวลาผ่านไปโปรแกรมที่ลงไว้เริ่มเก่าแล้วก็สั่งอัพเดตโดยใช้ choco upgrade all -y ถ้าจะ upgrade บางโปรแกรมหรือจะยกเว้นบางโปรแกรมก็ทำตามคู่มือ https://docs.chocolatey.org/en-us/choco/commands/upgrade

ถ้าไม่เข้าใจลองดูวิธีได้จากคู่มือ https://docs.chocolatey.org/en-us/chocolatey-gui/user-interface/main-window/actions/export ตัวสคริปต์ที่มันใช้เป็นไฟล์ง่าย ๆ อย่างที่ผมใช้คือ

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="avastfreeantivirus" version="21.6.6446.0" />
  <package id="chocolatey-core.extension" version="1.3.5.1" />
  <package id="chocolatey-dotnetfx.extension" version="1.0.1" />
  <package id="chocolatey-visualstudio.extension" version="1.9.0" />
  <package id="chocolatey-windowsupdate.extension" version="1.0.4" />
  <package id="chocolatey" version="0.10.15" />
  <package id="chocolateygui" version="0.18.1" />
  <package id="dotnetfx" version="4.8.0.20190930" />
  <package id="filezilla" version="3.55.1" />
  <package id="Firefox" version="91.0" />
  <package id="gimp" version="2.10.24.3" />
  <package id="GoogleChrome" version="92.0.4515.131" />
  <package id="googledrive" version="2.34.5075.1619" />
  <package id="greenshot" version="1.2.10.6" />
  <package id="keepass.install" version="2.48.1" />
  <package id="microsoft-teams" version="1.4.00.19572" />
  <package id="microsoft-windows-terminal" version="1.9.1942.0" />
  <package id="notepadplusplus.install" version="8.1.2" />
  <package id="postman" version="8.9.1" />
  <package id="sourcetree" version="3.4.1" />
  <package id="visualstudio-installer" version="2.0.1" />
  <package id="vlc" version="3.0.16" />
  <package id="winmerge" version="2.16.12" />
</packages>

จะลองแก้เองเพื่อที่จะใช้กับ user หลาย ๆ กลุ่มก็ได้ครับ กลุ่มนี้เพิ่มบรรทัดนี้ อีกกลุ่มลงอีกโปรแกรมก็แค่ copy ไปอีกไฟล์ แล้วเพิ่มลดรายชื่อโปรแกรมเอา

ติดตั้ง Poor Man’s T-SQL Formatter ใน SSMS รุ่นใหม่ ๆ

Poor Man’s T-SQL Formatter จะติดตั้งได้ใน SQL Server Management Studio ( SSMS ) เวอร์ชั่นเก่า ๆ ได้ แต่ตัวติดตั้งรุ่นใหม่ ๆ เมื่อติดตั้งแล้ว จะไม่สามารถคลิกเมนูของตัว extension ได้ แก้ได้ง่าย ๆ โดย

  1. ปิด SQL Server Management Studio
  2. ถ้ายังไม่ได้ติดตั้ง .Net 2.0 ให้ติดตั้ง .NET Framework 2.0 ก่อนโดยวิธี How-To How to Enable .NET Framework 2.0 and 3.5 in Windows 11
  3. ถ้าต้องการใช้กับ SSMS 19 ต้องติดตั้ง SSMS 18 ในเครื่องก่อน จากนั้นติดตั้ง plugin ตามปกติ แล้ว copy C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Extensions ไปเป็น C:\Program Files (x86)\Microsoft SQL Server Management Studio 19\Extensions
  4. เปิดไฟล์ C:\Program Files (x86)\Microsoft SQL Server Management Studio {version}\Common7\IDE\Ssms.exe.config เช่น
    • C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe.config
    • C:\Program Files (x86)\Microsoft SQL Server Management Studio 19\Common7\IDE\Ssms.exe.config
  5. ค้นหาบรรทัด <assemblyBinding
  6. เพิ่มข้อความใต้<probing privatePat
    <dependentAssembly><assemblyIdentity name="Microsoft.VisualStudio.Shell.12.0" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="2.0.0.0-15.0.0.0" newVersion="15.0.0.0"/></dependentAssembly>
  7. เปิด SQL Server Management Studio ใหม่

เท่านี้ก็สามารถใช้ Poor Man’s T-SQL Formatter จัดรูปแบบ sql ได้แล้ว

Windows: install error 0x800f0954

ถ้าลงโปรแกรมเก่า ๆ บางครั้งจะเจอ error 0x800f0954 ซึ่งสาเหตุคือ เราไปลงโปรแกรมที่เก่ากว่า version ปัจจุบัน อย่าง Poor Man’s T-SQL Formatter จะใช้ .net2 ที่เก่ามากหลายปีแล้ว ทำให้เจอ error code 0x800f0954

ก่อนอื่นโหลดตัวติดตั้ง .net 2 มาก่อน แต่เพราะว่ามันเก่ามากจนไม่สามารถหาตัวติดตั้งจาก microsoft ได้ ดังนั้นจะโหลดตัวติดตั้ง .Net 3.5 จาก Microsoft .NET Framework 3.5 ที่จะมี .NET Framework 2.0 และ .NET Framework 3.0 service pack ในตัวแทน

การเตรียมการติดตั้ง

  1. เปิดโปรแกรม regedit โดยไปที่เมนูของ windows พิมพ์ regedit.exe ในช่อง run หรือ search แล้ว enter
  2. เปิดคีย์ตามลำดับ HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
  3. ดูที่ด้านขวาจะมี value ชื่อ UseWUServer เซ็ตค่าเป็น 0
  4. ปิด regedit
  5. restart windows หรือ restart service Windows Update

Cr. Error Code 0x800F0954 on Windows 10

windows: เอาพยากรณ์อากาศออกไป

หลัง update windows มันมีอะไรแปลกๆ เพิ่มขึ้นมาอย่างหนึ่ง คือพยากรณ์อากาศตรง task bar คิดว่าคนที่ต้องการจะดูมันตลอดทั้งวันนี้คงมีน้อยมากๆ เอาออกไปเหอะ

  1. คลิก task bar
  2. ไปที่ News and interests
  3. คลิก turn off

PowerBuilder: Target ( Template Application )

วิธีสร้าง target application จาก template

  1. เปิด workspace ที่ต้องการขึ้นมาเช่น งานชิ้นใหม่ก็เปิดจาก development.pbw
  2. คลิก file
  3. คลิก Open..
  4. Browse ไปไฟล์ *.pbw ที่ต้องการ
  5. คลิก OK
  6. คลิก file
  7. คลิก New…
  8. ที่เท็บ Target เลือก Template Application
  9. คลิก OK
  10. หน้า About the Template Application Wizard
  11. คลิก Next >
  12. หน้า What you will do
  13. คลิก Next >
  14. หน้า Specify New Application and Library
    • Application Name: ใส่ชื่อ เช่น prototype_pb8
    • Library: ใส่ชื่อ Library ตัวหลักเช่น C:\UsersDatas\ProjectsGit\PrototypesPowerBuilder8\Source code\main.pb
    • Target: เช่น C:\UsersDatas\ProjectsGit\PrototypesPowerBuilder8\Source code\prototype_pb8.pb
  15. หน้า Specify Template Type เลือกชนิดของ application ที่ต้องการ
    • MDI Application with Microhelp
    • SDI Application
    • PFC-base application
  16. เลือก MDI
  17. คลิก Next >
  18. หน้า Adjust Application Library Search Path
  19. คลิก Next >
  20. หน้า Name MDI Frame and Menu
    • MDI Frame: ใส่ชื่อ เช่น w_main
    • MDI Frame Menu: เช่น m_main
  21. คลิก Next >
  22. หน้า Name MDI Base Sheet, Menu and Service
    • Base Sheet Window: เช่น w_basesheet
    • Sheet Menu: เช่น m_sheet
    • Sheet Manager Service: เช่น n_sheetmanager
  23. คลิก Next >
  24. หน้า Name individual Sheets
    • Sheet 1: เช่น w_sheet1
    • Sheet 2: เช่น w_sheet2
    • Sheet 3: เช่น w_sheet3
  25. คลิก Next >
  26. หน้า Assign Display Name to Sheets
    • W_sheet1 Title (1) : เช่น Untitled for Sheet 1
    • W_sheet2 Title (2) : เช่น Untitled for Sheet 2
    • W_sheet3 Title (3) : เช่น Untitled for Sheet 3
  27. คลิก Next >
  28. หน้า Name About Box and Toolbar Window
    • About Window: เช่น w_about
    • Toolbar Window: เช่น w_toolbars
  29. คลิก Next >
  30. หน้า Specify Connectivity
    • Requires SQL Database connection
    • Requires EAServer connection
    • None
  31. เลือก Requires SQL Database connection
  32. คลิก Next >
  33. หน้า Choose Database Profile
    • เลือก database ที่ต้องการ
  34. หน้า Specify Connectivity Source Info
    • Application INI file คือเก็บไว้ในไฟล์ .ini
    • Registry Settings ฝากไว้ในความจำของ windows
    • Script
    • Connection Service Object: เก็บไว้ในชื่อ เช่น n_connectservice
  35. คลิก Next >
  36. หน้า Name Application INI File
    • Application INI File: เช่น C:\UsersDatas\ProjectsGit\PrototypesPowerBuilder8\Source code\main.ini
  37. คลิก Next >
  38. หน้า Create Project?
    • No. create project later
    • Yes, Create project now
  39. เลือก Yes ซิจะได้ไปต่อ
  40. คลิก Next >
  41. หน้า Specify Project Object
    • Project: เช่น p_prototype_pb8_exe
  42. คลิก Next >
  43. Specify Executable and Resource Files
    • Executable File Name เช่น C:\UsersDatas\ProjectsGit\PrototypesPowerBuilder8\Source code\prototype_pb8.exe
    • Option Resource File (.pbr) เว้นไว้ก่อน
  44. คลิก Next >
  45. Specify Build Options จากจุดนนี้ไปทำเหมือนตอน build เอา

PowerBuilder: Deploy

การ Deploy โปรเจกต์ powerbuilder ไปยัง user สามารถทำได้โดยมีส่วนประกอบ 2 ส่วนด้วยกัน

  1. ไฟล์ *.exe
    • ชื่อไฟล์โดยปกติจะโดนระบุไว้ในไฟล์ *.pbt
    • ถ้าไม่มีการเพิ่มหรือลด library ใน target ก็ไม่จำเป็นต้องส่งไฟล์นี้ให้ user
  2. ไฟล์ *.pbd
    • เป็นไฟล์ที่เกิดจากการแปลงไฟล์ library ( *.pbl ) โดยจะมีชื่อเดียวกันแต่นามสกุล .pbd โดยจะอยู่ใน path เดียวกัน
    • สามารถนำไฟล์ pbd ไปแทนที่ไฟล์เดิมในเครื่อง user ได้ทันที ตัว .exe จะสามารถใช้ datawindow, function, window และส่วนประกอบอื่น ๆ ที่อยู่ใน library version นั้น ๆ ได้ทันที
    • ไฟล์ pbd อื่น ๆ สามารถเรียกใช้สิ่งที่อยู่ใน pbd อื่น ๆ ได้ ถ้ายังเป็นชื่อเดิม มี parameter เหมือนเดิม ถึงตัวมันเองจะเก่ากว่า หรือว่าใหม่กว่าไฟล์ pbd ตัวนั้น ๆ

ข้อดีจากคุณสมบัติของไฟล์ pbd และ exe ทำให้เวลาที่ส่งโปรแกม update ให้ user สามารถส่งบางฟีเจอร์ ไปให้ user แต่ละกลุ่มได้โดยการส่ง pbd ให้ต่างกัน กลุ่ม a อาจจะได้รับไฟล์ pbd ที่ใหม่กว่าเพื่อทดลองใช้ฟีเจอร์ใหม่ ๆ ในเมนูเดียวกันกับกลุ่ม b ที่ได้รับไฟล์ pbd เวอร์ชั่นก่อนหน้าที่ใช้งานได้ อาจจะไม่ดีนัก แต่ทำงานได้อยู่

PowerBuilder: build application

การ build source code ของเราเป็น application ( .exe ) ทำได้ง่าย ๆ โดย

  1. เปิด workspace ที่ต้องการขึ้นมาเช่น งานชิ้นใหม่ก็เปิดจาก development.pbw
  2. ใน System tree คลิก target ที่ต้องการ build
  3. คลิกขวา New…
  4. ที่เท็บ Project เลือก Application Wizard
  5. คลิก OK
  6. จะมีหน้าต่าง About the Application Project Wizard ขึ้นมา คลิก Next >
  7. หน้า Specify Destination Library
  8. คลิก Next >
  9. หน้า Specify Project Object จะให้เราสามาารถตั้งชื่อได้ เช่น p_prototypes_pb8_exe
  10. คลิก Next >
  11. หน้า Specify Executable and Resource Files จะช่องให้ว่าจะ build ไฟล์ .exe ไว้ที่ไหน ชื่ออะไร
  12. คลิก Next >
  13. หน้า Specify Build Options มีอยู่ 2 Options
    • Fill Build จะ build ทั้ง target
    • Incremental Build จะ build เฉพาะไฟล์ที่เปลี่ยนแปลงจากครั้งที่ Build ล่าสุดเท่านั้น จะเร็วกว่า
  14. คลิก Next >
  15. หน้า Generate Machine Code?
  16. คลิก Next >
  17. หน้า Specify Dynamic Library Options
  18. ติ๊ก Build Dynamic Libaries (.PBD)
  19. คลิก Next >
  20. หน้า Specify Version Information จะไว้ระบุข้อมูลของโปรแกรม เช่น บริษัท version
  21. คลิก Next >
  22. หน้า Ready to Create Application จะให้รายละเอียดตัวเลือกที่ผ่านมา
  23. คลิก Finish
  24. จะเห็นหน้าที่ใช้ Build โดยด้านล่างจะมี list Library ให้สามารถเลือกทับ Resource File Name นั้น ๆ ได้
  25. คลิก Deploy จากเมนู

ด้านล่างจะมี log แสดงการทำงานอยู่ เมื่อแสดงข้อความประมาณ

———- Deploy: Deploy of p_prototypes_pb8_exe
Creating executable file . . .
Inspecting Application Dependencies. . .
Inspecting Application Dependencies. . .
Inspecting application libraries . . .
Writing C:\UsersDatas\ProjectsGit\PrototypesPowerBuilder8\Source code\common.pbl(prototypes_pb8) . . .
———- Finished Deploy of p_prototypes_pb8_exe


โปรแกรมของเราจะเสร็จสมบูรณ์

PowerBuilder: Target

ตัวโปรแกรมจริง ๆ ของ powerbuilder ที่เอาไป build เป็น *.exe จะอยู่ในไฟล์ target โดยไฟล์นี่จะมีหน้าที่ลิสต์ Library ต่าง ๆ ที่ใช้ไว้

  1. เปิด workspace ที่ต้องการขึ้นมาเช่น งานชิ้นใหม่ก็เปิดจาก development.pbw
  2. คลิก file
  3. คลิก Open..
  4. Browse ไปไฟล์ *.pbw ที่ต้องการ
  5. คลิก OK
  6. คลิก file
  7. คลิก New…
  8. ที่เท็บ Target เลือก Application
  9. ระบุ
    • Application Name: เช่น prototypes_pb8 ย่อมาจาก Prototype Power Builder 8
    • Library: จะเป็นไฟล์ที่เก็บส่วนประกอบย่อย ต่าง ๆ เป็นกลุ่ม ๆ เหมือนห้องสมุดที่แบ่งเป็นห้องสมุดการแพทย์ก็อยู่ที่หนึ่ง ห้องสมุดเกี่ยวกับการเกษตรก็อยู่อีกที่ เช่น C:\UsersDatas\ProjectsGit\PowerBuilder\Prototype_PB8\common.pbl
      สาเหตุที่ไฟล์นี้ใช้คำว่า common เพราะตั้งใจจะไว้เก็บ function กลาง ไว้ใช้ทั้งโปรแกรม
    • Target: จะเป็นชื่อไฟล์ .exe ที่จะ build ขึ้นมา เช่น C:\UsersDatas\ProjectsGit\PowerBuilder\Prototype_PB8\prototypes_pb8.pbt

เมื่อเปิดโพลเดอร์ C:\UsersDatas\ProjectsGit\PowerBuilder\Prototype_PB8 จะเห็นอยู่ 2 ไฟล์ main_pb8.pbt และ common.pbl ที่จะอธิบายต่อไป

PowerBuilder: new project / open project

ไฟล์ project ของ PowerBuilder จะมีนามสกุล *.pbw ย่อมาจาก PowerBuilder Workspace เป็นไฟล์ที่จะบันทึก กลุ่มของ target ไว้ภายใน โดยไฟล์ *.pbw จะสามารถมี target ภายในได้มากกว่า 1 และ target เดียวกันสามารถอยู่ได้ในหลาย worksapce

สามารถสร้างใหม่ได้โดย

  1. คลิก file
  2. คลิก New…
  3. ที่เท็บ Workspace คลิก Workspace คลิก OK
  4. ตั้งชื่อที่ต้องการ
  5. คลิก save

โดยผมเลือกสร้าง workspace ไว้ 3 กลุ่มดังนี้

  • development สำหรับพัฒนาโปรแกรม
  • production งานที่ build ให้ user จะอยู่ในนี้
  • prototype สำหรับทดลองแนวทางต่าง ๆ ง่าย ๆ เร็ว ๆ

ในครั้งต่อไปที่เปิดโปรเจกต์ต้องเปิดจากไฟล์ตัวนี้ ไม่อย่างนั้นจะหาส่วนต่างๆ ไม่เจอได้

ตอนต่อไป PowerBuilder: Target