ก๊วนซอฟท์แวร์ </softganz> SoftGang (Gang Software)

Web &amp; Software Developer Gang.

Topic List

โดย Little Bear on 15 ก.ค. 69 07:48

เหตุการณ์ที่เกิดขึ้นคือ Mac เกิดอาการกระตุก trackpad กระโดด คุมไม่อยู่ เพลงที่เปิดเสียงติดๆ ขัดๆ ตรวจสอบ process CPU เป็นปกติ RAM กินเยอะมาก

เบื้องต้นมีปัญหาเรื่องการอ่าน/เขียน SSD คาดว่าเกิดจาก Spotlight จึงทำการปิดระบบ Spotlight ทั้งระบบไม่ให้ทำงาน

ลำดับเหตุการณ์ที่ทำให้เกิดปัญหานี้ (The Root Cause):

  1. Flutter Extension ตรวจเจอ Xcode: พอคุณเปิด VS Code ตัวปลั๊กอินเห็นว่าเครื่องนี้มีแอป Xcode ติดตั้งอยู่ (Xcode 26.6) มันจึงเข้าใจว่าคุณต้องการจะพัฒนาแอปสำหรับ iOS ด้วย [1]
  2. ปลั๊กอินพยายามสั่งเปิด simctl: ปลั๊กอินจึงส่งคำสั่ง xcrun simctl ไปยังระบบปฏิบัติการ เพื่อดึงรายชื่อเครื่องจำลอง iPhone/iPad ออกมาแสดงบนหน้าจอ [1]
  3. เกิดการ Crash (พัง) เบื้องหลัง: แต่เนื่องจากคุณไม่ได้กดดาวน์โหลดตัว iOS Simulator (Component) เก็บไว้ใน Xcode พอคำสั่ง simctl วิ่งไปหาไฟล์จำลองระบบแล้วไม่เจออะไรเลย มันจึงช็อกและปิดตัวเองลงทันที (Shutting down / Cleaning up ที่เราเห็นใน Log รอบแรก) [1]
  4. ติดลูปไร้สิ้นสุด: ตัว Flutter Extension ใน VS Code ไม่ยอมแพ้ พอมันเห็นว่ากระบวนการเช็กอุปกรณ์ดับไปโดยยังไม่ได้คำตอบ มันจึงสั่งรันคำสั่ง simctl ใหม่ซ้ำอีกครั้งในอีก 4 วินาทีถัดไป วนลูปไปเรื่อย ๆ จนทำให้ฮาร์ดดิสก์ทำงานหนัก [1]

สรุปคำแนะนำ

การที่เราแก้ปัญหาด้วยการเปลี่ยนชื่อไฟล์ simctl เป็น .bak ไปก่อนหน้านี้ ถือเป็นการแก้ทางที่ถูกต้องและปลอดภัยที่สุดสำหรับกรณีของคุณแล้วครับ เพราะเป็นการบอกตัวปลั๊กอินตรง ๆ ว่าไม่ต้องพยายามไปเรียกหาเครื่องจำลองที่ไม่มีอยู่จริงอีกต่อไป [1]

ตราบใดที่คุณยังไม่ได้ใช้ทดสอบ iOS คุณสามารถปล่อยให้ flutter doctor ขึ้นเครื่องหมาย ! แบบนี้ทิ้งไว้ได้เลย โดยไม่มีผลเสียใด ๆ กับการเขียนโค้ดฝั่ง Android หรือ Web ครับ [1]

แก้อาการอ่าน/เขียน SSD ตลอดเวลาเพื่อยืดอายุ SSD

จัดการกับ Spotlight

  1. คำสั่งปิดการทำงานทั้งหมดของ Spotlight:

bash sudo mdutil -a -i off

  1. คำสั่งเปิดกลับมาใช้งานตามปกติ:

bash sudo mdutil -a -i on

วิธีปิดการทำงาน mds_stores แบบถาวร

  1. ปิด

bash sudo mdutil -a -i off

  1. ปิดกระบวนการที่ค้างอยู่ทันที: bash sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist<br />

แก้อาการ launchd ทำงานตลอดเวลาเพื่อ run app simctl

ตรวจสอบว่า launchd ว่ากำลังทำอะไรอยู่ด้วยคำสั่ง:

bash log show --predicate 'process == "launchd"' --last 1m

พบว่าทุก 4 วินาทีจะทำการ run simctl แต่ไม่สำเร็จ ก็เลยสั่ง run ใหม่ทุก 4 วินาที ทำให้เกิดการทำงานที่ไม่ควรทำขึ้น

หลังจากพยายามมาหลายวิธีก็ยังไม่สำเร็จ จึงจัดการขั้นเด็ดขาดด้วยการ rename ชื่อ app simctl เพื่อไม่ให้ระบบ run app ได้อีกต่อไป

วิธีที่ 1: เปลี่ยนชื่อเครื่องมือค้นหา iOS เบื้องหลัง (เด็ดขาดและตรงจุดที่สุด)

เมื่อคุณไม่ได้ใช้ Xcode และไม่ได้ลงตัวจำลอง iOS ไว้ ไฟล์คำสั่ง simctl ในเครื่องคุณมักจะมาจากโฟลเดอร์ของ Command Line Tools เราจะไปทำการเปลี่ยนชื่อไฟล์หรือตัดสิทธิ์เพื่อไม่ให้ปลั๊กอิน Flutter สามารถหาคำสั่งนี้เจออีกต่อไป:

  1. เปิดแอป Terminal
  2. คัดลอกและวางคำสั่งด้านล่างนี้เพื่อตรวจสอบว่าระบบ macOS นำไฟล์ simctl ไปซ่อนไว้ที่ไหน:

bash xcrun -f simctl

  1. โดยปกติระบบจะแสดงที่อยู่ไฟล์ เช่น /Library/Developer/CommandLineTools/usr/bin/simctl ให้คุณสั่งเปลี่ยนชื่อไฟล์นั้นเพื่อซ่อนมันจาก VS Code ด้วยคำสั่งนี้ครับ:

bash sudo mv $(xcrun -f simctl) $(xcrun -f simctl).bak (ระบบจะให้พิมพ์รหัสผ่านเครื่อง Mac ของคุณเพื่อยืนยัน)

  1. เมื่อเปลี่ยนชื่อไฟล์เสร็จแล้ว ต่อให้ VS Code หรือตัวปลั๊กอินจะพยายามสั่งรันถี่ยิบแค่ไหน ระบบก็จะขึ้นว่าหาไฟล์ไม่เจอ (Command Not Found) ทันที และลูปทุก 4 วินาทีจะหยุดทำงานอย่างถาวรครับ!
  2. ตรวจสอบว่า simctl ยังคง run อยู่อีกหรือไม่

bash log show --predicate 'process == "launchd"' --last 1m

  1. อนาคตหากต้องทำงานกับ iOS ให้เปิดกลับมาใหม่ เนื่องจากได้ลองปิด services ไปหลายตัวมาก เช่น VSCODE, Flutter อาจะต้องเปิดกลับมาหลายรายการ bash sudo mv $(xcrun -f simctl).bak $(xcrun -f simctl) flutter config --enable-ios
โดย Little Bear on 24 ธ.ค. 66 10:51
brew services list
brew services restart nginx
/opt/homebrew/opt/nginx/bin/nginx -g daemon off;

brew install shivammathur/php/php@7.4
brew reinstall php@7.4

sudo lsof -i -n -P|grep php-fpm

brew services start php@8.2

แก้ไขไฟล์ opt/homebrew/etc/nginx/nginx.conf

    location / {
        root /path/to/www;
        try_files $uri $uri/ /index.php?$uri&$args;
    }

Install multiple PHP version

brew tap shivammathur/php

เลือกมาสักเวอร์ชั่น

brew install shivammathur/php/php@5.6
brew install shivammathur/php/php@7.0
brew install shivammathur/php/php@7.1
brew install shivammathur/php/php@7.2
brew install shivammathur/php/php@7.3
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.0
brew install shivammathur/php/php@8.1
brew install shivammathur/php/php@8.2
brew install shivammathur/php/php@8.3
brew install php@8.4
brew install php@8.5

Mac M1 : Config file อยู่ที่

/opt/homebrew/etc/php/7.0/php.ini
/opt/homebrew/etc/php/7.1/php.ini
/opt/homebrew/etc/php/7.2/php.ini
/opt/homebrew/etc/php/7.3/php.ini
/opt/homebrew/etc/php/7.4/php.ini
/opt/homebrew/etc/php/8.0/php.ini
/opt/homebrew/etc/php/8.1/php.ini
/opt/homebrew/etc/php/8.2/php.ini
/opt/homebrew/etc/php/8.3/php.ini

แก้ไขไฟล์ php.ini ที่ /opt/homebrew/etc/php/8.0/php-fpm.d/www.conf เปลี่ยน port จาก 9000 เป็น 9080

restart php

brew services start php@8.0

Problem

1.Can't upload jpg/pdf

โดย Little Bear on 15 ต.ค. 65 13:25

ใช้โปรแกรม diskutil และ dd

เปิด Terminal

เรียกดูรายชื่อ device

diskutil list
diskutil unmountDisk /dev/disk4
sudo dd if=/path/to/name.iso of=/dev/disk4 bs=1m
diskutil eject /dev/disk4

ใช้ hdiutil

hdiutil burn filename.iso

ที่มา - 4 Ways to Burn ISO to USB on macOS Catalina/Mojave/Sierra and Big Sur M1 - How to Burn ISO to USB on Mac (Support Big Sur/Catalina/Mojave/High Serria)

โดย Little Bear on 14 ส.ค. 65 21:40

1.ติดตั้ง Docker

ดาวน์โหลดและติดตั้ง Docker

ปรับ config เพิ่ม ram เป็น 4GB

  1. ติดตั้ง SqlServer Express

ขั้นตอนตาม How to Install SQL Server on MacOS

Step 1: Pull the Docker Image Download the Azure SQL Edge image to your system:

docker pull mcr.microsoft.com/azure-sql-edge

Step 2: Run the Docker Container When the image successfully downloads to your machine, run the container using the following command:

docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Strong.Pwd-123' -p 1433:1433 --name sqledge -d mcr.microsoft.com/azure-sql-edge
docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Strong.Pwd-123' -p 1433:1433 --name sqlexpress03 -d mcr.microsoft.com/azure-sql-edge

Step 3: Check the Container Ensure that the Azure SQL Edge container is running properly:

docker ps

Step 4: Access the Container with Bash Shell With the container running, you can connect to Azure SQL Edge by using the docker exec command:

sudo docker exec -it sqledge "bash"

Step 5: Connect to the Database Once inside the container, connect to the database using the sqlcmd tool:

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA

อ้างอิง:

โดย Little Bear on 10 ธ.ค. 64 22:10

หลังจากติดตั้ง Flutter บน Macbook M1 pro ก็เกิดอาการ Exception: Error running pod install ตอนสั่ง flutter run บน iOS

ทางแก้ที่ลองแล้ว work คือ

1.Run คำสั่งในครั้งแรก (ครั้งเดียว)

sudo arch -x86_64 gem install ffi

2.ติดตั้ง pods

cd Project/ios
arch -x86_64 pod install

จากคำสั่ง ดูเหมือนจะเป็นการติดตั้ง x86 แต่มันสามารถใช้งานได้ เลยไม่แน่ใจเหมือนกันว่าเป็นวิธีการแก้ปัญหาที่ถูกต้องไหม

ที่มา:

โดย Little Bear on 20 พ.ย. 64 15:12

เพิ่งลองเอามาเล่นดู จากปัญหาเมื่อเปิดเครื่องกลับจาก sleep บางครั้ง app จะถูกย้ายจาก extend display มากองรวมกันอยู่ที่หน้าจอของ laptop display ต้องมาเสียเวลาลากแต่ app ไปยังตำแหน่งประจำ

Hammerspoon สามารถทำเรื่องนี้ได้ แต่ต้องเขียนโปรแกรม ลองดูอยู่เป็นชั่วโมง ก็สามารถทำอะไรได้หลายอย่าง ลองดูจาก Getting Started with Hammerspoon

ได้มาประมาณนี้ แต่ยังไม่ work ตามที่ต้องการ คงต้องเขียนอีกเยอะ

hs.hotkey.bind({"cmd", "alt", "ctrl"}, "R", function()
    hs.reload()
end)

function reloadConfig(files)
    doReload = false
    for _,file in pairs(files) do
        if file:sub(-4) == ".lua" then
            doReload = true
        end
    end
    if doReload then
        hs.reload()
    end
end
myWatcher = hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/", reloadConfig):start()
hs.alert.show("HammerSpoon config loaded")

hs.application.enableSpotlightForNameSearches(true)
local laptopScreen = "Built-in Retina Display"
local BenQScreen = "BenQ EW3270U"
local DellScreen = "S2718H/HX"
local windowLayout = {
    {"Safari",  nil,  BenQScreen, nil, nil, hs.geometry.rect(1800, 0, 1000, 1400)},
    {nil,  "LINE",    BenQScreen, nil, nil, hs.geometry.rect(1800, 1430, 800, 800)},
    {"ForkLift",  nil,    BenQScreen, nil, nil, hs.geometry.rect(2500, 1200, 1600, 980)},
    {nil,"Users", BenQScreen, hs.layout.right50, nil, nil},
    -- {"Google Chrome", nil,         BenQScreen, nil, nil, hs.geometry.rect(2200, 0, 1000, 1400)},
}
hs.layout.apply(windowLayout)

print("APPLICATION " , hs.application.frontmostApplication())
print(hs.window.focusedWindow():application():title())

สรุป ณ ตอนนี้คือ ติดตั้ง โปรแกรม Stay มาใช้งานไปก่อน

ที่มา:

โดย Little Bear on 4 ต.ค. 64 14:48

เดี๋ยวค่อยมาเขียนรายละเอียด

Install Apache

Location of Apache config file is /opt/homebrew/etc/httpd/httpd.conf Change www home folder

mv /opt/homebrew/var/www /opt/homebrew/var/www.bak
ln -s /Users/httpdocs /opt/homebrew/var/www
brew services restart apache2

brew tap shivammathur/php

เลือกมาสักเวอร์ชั่น

brew install shivammathur/php/php@5.6
brew install shivammathur/php/php@7.0
brew install shivammathur/php/php@7.1
brew install shivammathur/php/php@7.2
brew install shivammathur/php/php@7.3
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.0
brew install shivammathur/php/php@8.1
brew install shivammathur/php/php@8.2

Mac M1 : Config file อยู่ที่

/opt/homebrew/etc/php/7.0/php.ini
/opt/homebrew/etc/php/7.1/php.ini
/opt/homebrew/etc/php/7.2/php.ini
/opt/homebrew/etc/php/7.3/php.ini
/opt/homebrew/etc/php/7.4/php.ini
/opt/homebrew/etc/php/8.0/php.ini
/opt/homebrew/etc/php/8.1/php.ini
/opt/homebrew/etc/php/8.2/php.ini

Mac Intel : Config file อยู่ที่

/usr/local/etc/php/5.6/php.ini
/usr/local/etc/php/7.0/php.ini
/usr/local/etc/php/7.1/php.ini
/usr/local/etc/php/7.2/php.ini
/usr/local/etc/php/7.3/php.ini
/usr/local/etc/php/7.4/php.ini
/usr/local/etc/php/8.0/php.ini

ผลลัพท์ตอนติดตั้ง

To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

&lt;FilesMatch .php$&gt;
    SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;

Finally, check DirectoryIndex includes index.php DirectoryIndex index.php index.html

The php.ini and php-fpm.ini file can be found in: /usr/local/etc/php/7.4/

php@7.4 is keg-only, which means it was not symlinked into /usr/local, because this is an alternate version of another formula.

If you need to have php@7.4 first in your PATH, run: echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc

For compilers to find php@7.4 you may need to set: export LDFLAGS="-L/usr/local/opt/php@7.4/lib" export CPPFLAGS="-I/usr/local/opt/php@7.4/include"<br /> <br /> <br /> To start shivammathur/php/php@7.4: brew services start shivammathur/php/php@7.4 Or, if you don't want/need a background service you can just run: /usr/local/opt/php@7.4/sbin/php-fpm --nodaemonize

เปลี่ยนลิงก์

brew unlink php && brew link --overwrite --force php@7.4

Apache

แก้ไขไฟล์ /opt/homebrew/etc/httpd/httpd.conf /etc/apache2/httpd.conf หรือ /usr/local/etc/httpd/httpd.conf file scroll to the bottom of the LoadModule entries.

 LoadModule php5_module /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so
 <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.0/lib/httpd/modules/libphp7.so
 <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
 <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
 <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so
 <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so
 <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php_module /usr/local/opt/php@8.0/lib/httpd/modules/libphp.so
 <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php_module /usr/local/opt/php@8.1/lib/httpd/modules/libphp.so

ใช้ sphp เป็นตัวเปลี่ยน version จะสะดวกกว่า

curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw/adc8c149876bff14a33e3ac351588fdbe8172c07/sphp.sh > /opt/homebrew/bin/sphp
chmod +x /opt/homebrew/bin/sphp
sphp 8.1

Install MariaDB

brew install mariadb

Restart MariaDB

Auto start

brew services start mariadb

Manual start

mysql.server restart

Location of database is /opt/homebrew/var/mysql, If you want to change use symbolic link to new location

brew services stop mariadb
cp -R /opt/homebrew/var/mysql /Users/mysql
mv /opt/homebrew/var/mysql /opt/homebrew/var/mysql.bak
mkdir /opt/homebrew/var/mysql
ln -s /Users/mysql /opt/homebrew/var/mysql
brew services start mariadb

MariaDB Configuration

แก้ไขไฟล์ /opt/homebrew/etc/my.cnf.d/my.cnf

[mysqld]
sqlmode="NOFIELDOPTIONS"
  # Avaliable Mode<br />
  # "NOFIELDOPTIONS,IGORESPACE,NOZEROINDATE,NOZERODATE,ERRORFORDIVISIONBYZERO,NOAUTOCREATEUSER,NOENGINESUBSTITUTION"
default-storage-engine = MYISAM
character-set-server = utf8
  <a class="hashtag" href="/tags/collation">#collation</a>-server = utf32unicodeci

หากไม่ต้องการให้ตรวจสอบการบันทึกข้อมูลของฟิลด์ เช่น ข้อมูลยาวเกินกว่าที่กำหนดในฟิลด์ ให้กำหนด mode เป็น NOFIELDOPTIONS

ที่มา

โดย Little Bear on 19 ก.ย. 64 21:24

มี 2 วิธี

  1. QuickTime
  2. Reflector with Airplay

พอดีว่าใช้ iPad Air 2020 แต่ Macbook Pro เป็นรุ่นปี 2015 ซึ่งยังหาวิธีเชื่อมต่อผ่าน Airplay ยังไม่ได้

เลยลอง mirror ผ่าน QuickTime ดู

ขั้นตอนในการ Mirroring With QuickTime

  1. จำเป็นต้องใช้สาย cable ต่อผ่าน USB ของ Mac กับ iPad

  2. เปิด QuickTime บน Mac ก่อน แล้วเลือกเมนู File แล้วเลือก New Movie Recording

  3. จะแสดงหน้าต่างสำหรับบันทึก Movie โดยค่า default จะถูกกำหนดให้เป็นกล้อง

  4. เปลี่ยนให้เป็น iOS device โดยคลิกที่ปุ่มลูกศรลงถัดจากปุ่มบันทึก (record button) แล้วเลือก iOS device จากรายการกล้องที่แสดง

แค่นี้เอง หน้าจอของ iPad ก็จะมีอยู่บนหน้าจอของ Mac เรียบร้อย

ข้อเสียคือต้องต่อสาย USB ระหว่าง Mac กับ iPad ซึ่งอาจจะไม่สะดวกในการใช้งานในบางสถานการณ์

โดย Little Bear on 25 มี.ค. 64 13:08

ตอนจะติดตั้ง Xcode มัน error "Not enough storage disk space, you can't install the product".

สาเหตุเกิดจาก App Store คำนวณพื้นที่ว่างผิด ได้ไม่เท่ากับพื้นที่ว่างจริง

สำรวจพื้นที่ว่างในฮาร์ดดิสกันก่อน

About this Mac > Storage

Trick คือ  ให้ macOS ทำการ clean up APFS โดยสร้าง a huge garbage file หลังจากนั้นก็ลบมันทิ้งไป

สร้างไฟล์โดยคำสั่ง:

dd if=/dev/zero of=/Users/<username>/hugefile bs=100m

ปล่อยให้มันทำงานไปสัก 30 วินาที แล้วก็ kill มันทิ้งด้วย ctrl+c หลังจากนั้นก็ลบไฟล์นั้นทิ้งไป:

rm ~/hugefile

ลบ Snapshots

tmutil thinlocalsnapshots / 21474836480 4