สร้าง shortcut ให้รันคำสั่งใน git-bash.exe

TL;DR

"C:\Program Files\Git\git-bash.exe" --cd="D:\projects\larex" -c "php artisan serve"

สำหรับคนขี้เกียจ… แทนที่จะต้องเปิด git-bash ขึ้นมาแล้วสั่งรันคำสั่งต่างๆ อะไรที่ต้องใช้บ่อยๆ เราก็สร้างไว้เป็น shortcut เลยเพื่อความสะดวก จะได้ไม่ต้องเปิดมาพิมพ์ทุกครั้ง. ที่จริงคำสั่งที่ไม่ค่อยได้ใช้บ่อยๆ (แต่จะมีโอกาสต้องใช้ซ้ำ) จะสร้างไว้เป็น shortcut ก็สะดวกในแง่ที่ไม่ต้องจำคำสั่ง.

PHP 7 ZTS on CentOS (PowerDNS as RBL)

ล่าสุด 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)”

Replace static-path symbolic link to reletive-path

เคสปัญหา 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

 

Installing memcache on PHP 7.1

แปะเก็บไว้

CentOS 6 (prerequisite)

# install webtatic repo
rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
# install memcache things
yum -y install yum-plugin-replace
yum -y install libmemcached
yum -y replace libmemcached --replace-with libmemcached10
yum -y install libmemcached10-devel.x86_64

CentOS 7 (prerequisite)

yum -y install libmemcached-devel

 Install memcached.so

yum -y install git
cd ~
rm -rf php-memcached
git clone https://github.com/php-memcached-dev/php-memcached.git
cd php-memcached
git checkout php7
phpize
./configure --disable-memcached-sasl
make
make install

DirectAdmin (CentOS 7) + munin dynamic zoom

ปกติเวลา setup เครื่อง ผมจะปิดการใช้งาน cgi ของ apache อยู่แล้ว เพื่อความสบายใจว่าไม่ต้องกังวลกับช่องโหว่ของ cgi บลาๆ. แต่ล่าสุดมีเครื่องนึงที่อยากจะซูมดูกราฟของ munin แต่มันติดว่าทำไม่ได้ :'( ก็เลยลองพยายามที่จะปรับให้มันใช้ได้ดู. Continue reading “DirectAdmin (CentOS 7) + munin dynamic zoom”

using “this” in React event handler method

ใน method ที่ใช้เป็น Event handler ถ้าเขียนโดยใช้ ES2015 มันจะไม่สามารถเรียก this เพื่อเข้าถึง object ของ Component ได้ ซึ่งจะต้องสั่ง bind this ไว้ใน constructor ลักษณะนี้

class MyButton extends React.Component {
  static defaultProps = {
    text: 'Click'
  }
  static propTypes = {
    text: React.PropTypes.string.isRequired
  }
  state = {
    text: this.props.text
  }

  constructor(props) {
     super(props);
     this.clickHandler = this.clickHandler.bind(this); // <------ Bind here
  }

  clickHandler(e) {
    e.preventDefault();
    this.setState({ text: 'clicked' });
  }

  render() {
    return(
      <button onClick={ this.clickHandler }>
          { this.state.text }
      </button>
    );
  }
}

socket.io behind nginx (response code: 400)

เจอ error แบบนี้ใน console ของ browser

failed: Error during WebSocket handshake: Unexpected response code: 400

แก้โดยปรับ config ของ nginx ให้เป็นแบบนี้

location / {
  proxy_pass http://localhost:8080;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

(สีแดง คือ ที่เพิ่งเพิ่มเข้าไปทีหลัง แล้วมันแก้ปัญหาได้)

ปัญหา CURL ไป https:// บางที่แล้ว error

ถ้าเสิร์ช Google หลายๆ ที่จะบอกให้ปิด CURLOPT_SSL_VERIFYPEER ตอนเรียกใช้ curl ซึ่งจริงๆ แล้วเพื่อความปลอดภัย เราไม่ควรจะปิดการเช็คตรงนั้น

สำหรับวิธีแก้ที่ถูกต้องคือ ให้เราไปดาวน์โหลดไฟล์ cacert.pem จากเว็บนี้ http://curl.haxx.se/docs/caextract.html มา

แล้วแก้ที่ไฟล์ php.ini ลักษณะนี้

curl.cainfo=c:\php\cacert.pem

DirectAdmin mysql installation problem

หากเกิดปัญหาบางอย่าง ที่ทำให้การติดตั้ง mysql ไม่สมบูรณ์ สามารถใช้ script: /usr/local/directadmin/scripts/mysql.sh ในการแก้ไขได้…

ข้อควรระวัง: รู้สึกว่ามันจะเคลีย database เดิมด้วย ไม่แน่ใจว่าเฉพาะ database mysql หรือเปล่า.