จดเก็บไว้ก่อน
โชว์รายการ process ที่กำลังทำงานอย่างละเอียด
ps auxfew
เช็คว่า process id ที่ระบุ รันจาก binary file path ไหน
ls -la /proc/$PID/ | grep exe
หาว่า process id ที่ระบุ ต่อ connection ไปที่ไหนหรือเปล่า
lsof -i -P -n | grep $PID
Just another WordPress Site
จดเก็บไว้ก่อน
โชว์รายการ process ที่กำลังทำงานอย่างละเอียด
ps auxfew
เช็คว่า process id ที่ระบุ รันจาก binary file path ไหน
ls -la /proc/$PID/ | grep exe
หาว่า process id ที่ระบุ ต่อ connection ไปที่ไหนหรือเปล่า
lsof -i -P -n | grep $PID
Laravel ไม่ทำ insert ignore ไว้ให้ใช้ เพราะว่ามันเป็นคำสั่ง SQL ที่ไม่เป็นสากลโลก DB engine หลายๆ ตัว ไม่มีให้ใช้ แต่ถ้าเราใช้ MySQL แล้วอยากจะใช้ insert ignore ก็เอา trait ตัวนี้มาใช้โลด
ติดตั้งใส่ project
composer require jdavidbakr/replaceable-model
แล้วไปเรียกใน Model ที่เราต้องการเพิ่มความสามารถให้มัน
<?php class Example extends Model { // ... use \jdavidbakr\ReplaceableModel\ReplaceableModel; // ... }
ทีนี้ก็เรียกใช้ตามอัธยาศัย
<?php \App\Example::insertIgnore($inserts);
.
ค่าเริ่มต้นของ phpStorm เวลา enter ชื่อคลาสออกมาจาก autocomplete มันจะไป import class ไว้ที่ด้านบน ( use … ) แล้วกรอกเฉพาะชื่อคลาสให้เราตรงที่กำลังเขียนโค๊ด. แต่ผมชอบที่จะเรียกใช้ fully-classified class name มากกว่า เพราะว่าผมไม่ได้ตั้งชื่อคลาสแบบสื่อความหมายได้ด้วยตัวเอง จะต้องเห็น namespace ด้วย ถึงจะรู้ว่ามันคืออะไร เช่น \App\Models\Orders\Book
กับ \App\Models\Products\Book
. (ปัญหานี้ผมเดาว่าน่าจะเป็นที่ผมตั้งชื่อคลาสไม่ถูกหลักละมั้ง ._.”). นอกจากสาเหตุที่กล่าวไปแล้ว ยังมีอีกอย่าง คือ เวลาที่ผมไม่ได้ออกแบบล่วงหน้าก่อนทำงาน ผมมักจะต้องมีเหตุให้ย้าย code ไปมาระหว่างไฟล์ ซึ่งปัญหาที่เกิด คือ เวลาที่ย้ายตัว code ไป ตัว import class ด้านบนมันไม่ได้เปลี่ยนตามไปด้วย ดังนั้นการใช้ fully-classified class name ก็ช่วยให้ย้าย code ไปมาได้เลย ไม่ต้องนั่งเช็คตรง import ด้านบน.
ซึ่ง PhpStorm เปิดให้เราปรับได้ว่าจะใช้ fully-classified class name ใน Settings Continue reading “PhpStorm fully-classified class name from autocomplete”
for u in `ls`; do if [ -d $u/domains ]; then # Get UID of directory name uid=$(stat -c "%u" $u); find $u -user $uid -exec chown $u "{}" \; ; gid=$(stat -c "%g" $u); find $u -group $gid -exec chgrp $u "{}" \; ; if [ -f $u/public_html ]; then chown -h $u:$u $u/public_html ; fi; fi; done;
TL;DR
"C:\Program Files\Git\git-bash.exe" --cd="D:\projects\larex" -c "php artisan serve"
สำหรับคนขี้เกียจ… แทนที่จะต้องเปิด git-bash ขึ้นมาแล้วสั่งรันคำสั่งต่างๆ อะไรที่ต้องใช้บ่อยๆ เราก็สร้างไว้เป็น shortcut เลยเพื่อความสะดวก จะได้ไม่ต้องเปิดมาพิมพ์ทุกครั้ง. ที่จริงคำสั่งที่ไม่ค่อยได้ใช้บ่อยๆ (แต่จะมีโอกาสต้องใช้ซ้ำ) จะสร้างไว้เป็น shortcut ก็สะดวกในแง่ที่ไม่ต้องจำคำสั่ง.
ล่าสุด setup เครื่องนึง สำหรับทำหน้าที่เช็ค RBL (Realtime Blackhole List) เพื่อจะให้อีเมลเซิร์ฟเวอร์ทุกเครื่องมาเช็คผ่านตรงนี้. สาเหตุจริงๆ ที่ต้องทำแบบนี้เป็นเพราะว่า IP DNS ของ IDC บางที่โดน RBL บางที่บล็อคไม่ให้ใช้งาน ก็เลยตั้งใจมาเปิดเครื่องนึงสำหรับทำหน้าที่นี้โดยเฉพาะแล้วกัน โดยวางไว้ที่ IDC ที่ไม่โดน RBL บล็อค จะได้เช็คได้ครบทุกที่ แล้วเซิร์ฟเวอร์ที่อื่นก็มาวานให้เจ้าตัวนี้มันเป็นผู้ตรวจสอบให้.
ตัวเซิร์ฟเวอร์ติดตั้งเป็น PowerDNS + Pipe backend โดยเขียน php script เพื่อไปเช็คกับ RBL แต่ละที่. ตอนแรกเขียนเป็น for loop ง่ายๆ ในการไล่เช็คกับ RBL แต่ละที่ แต่ปัญหา คือ มันทำให้ response time ของเรามันนานเกินไป. เพื่อที่จะแก้ปัญหานี้ เราเลยลองหาวิธีเขียน pararell บน PHP เพื่อให้มันเช็ค RBL ทุกๆ ที่ไปพร้อมๆ กันเลย เป็นครั้งแรกที่ใช้ PHP แบบนี้ ก็เลยจะบันทึกเก็บไว้หน่อยแล้วกัน. Continue reading “PHP 7 ZTS on CentOS (PowerDNS as RBL)”
เคสปัญหา megento มันสร้าง symbolic link พวก static file ไว้ใน pub/ แต่มันสร้างแบบ static-path ลากมาตั้งแต่ /home/ เลย เลยทำให้มันปัญหากับสิทธิ์เว็บเซิร์ฟเวอร์ในการเข้าถึงไฟล์ เก็บคำสั่งไว้คร่าวๆ ก่อนแล้วกัน
#!/bin/sh find -type l > links while read i; do target=$(readlink "${i}"); if [[ $target == /home/* ]]; then count=$(grep -o "/" <<< "$i" | wc -l) count=$(( $count - 1 )) prefix=$( printf "%${count}s\n" | sed "s# #../#g" ); suffix=$( echo $target | sed 's#^.*/public_html/##' ); newlink="${prefix}${suffix}" ln -sfv $newlink $i; fi; done < links