แสดงบทความที่มีป้ายกำกับ เก็บไว้อ่าน แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ เก็บไว้อ่าน แสดงบทความทั้งหมด

วันเสาร์ที่ 7 พฤศจิกายน พ.ศ. 2558

php

ปกติแล้วเวลาทำการติดตั้ง php ค่า default ของ register_globals จะเป็น Off แต่บางครั้งเราก็มีความจำเป็นที่เราจะต้องการใช้งาน ในแบบที่ register_globals=On เช่น ไม่อยากไปแก้ code โปรแกรมเดิมที่เขียนไว้ตั้งนานแล้วบ้างล่ะ แต่จะทำยังไง ถ้าหากว่า server ที่เราจำเป็นต้องใช้งานเค้ากำหนด register_globals มาให้เป็น Off ล่ะจะทำยังไง
เคยประสบปัญหาเวลาจะทำการย้าย server หรือมีการ upgrade version ของ php เป็น version ใหม่ แล้วทาง admin เค้าไม่ได้กำหนดให้ register_globals = On กันบ้างไหม เราจะแก้ปัญหากันยังไง แก้ code ในโปรแกรมของเรา หรือว่าจะแจ้ง admin ให้เค้าแก้ php.ini ให้ ????
โดยปกติแล้วเวลาทำการติดตั้ง php ค่า default ของ register_globals จะเป็น Off แต่บางครั้งเราก็มีความจำเป็นที่เราจะต้องการใช้งาน ในแบบที่ register_globals=On เช่น ไม่อยากไปแก้ code โปรแกรมเดิมที่เขียนไว้ตั้งนานแล้วบ้างล่ะ แต่จะทำยังไง ถ้าหากว่า server ที่เราจำเป็นต้องใช้งานเค้ากำหนด register_globals มาให้เป็น Off
วันนี้ผมมี script ที่จะช่วย convert ค่าตัวแปรที่อยู่ใน $_GET, $_POST, $_FILES ให้เป็นชื่อ ตัวแปร แบบที่ถูกกำหนดใน php.ini ให้ register_globals=On จะง่ายดายเพียงใด เชิญชม..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Convert Variable Array To Variable
 
while(list($xVarName, $xVarvalue) = each($_GET)) {
     ${$xVarName} = $xVarvalue;
}
 
 
while(list($xVarName, $xVarvalue) = each($_POST)) {
     ${$xVarName} = $xVarvalue;
}
 
while(list($xVarName, $xVarvalue) = each($_FILES)) {
     ${$xVarName."_name"} = $xVarvalue['name'];
     ${$xVarName."_type"} = $xVarvalue['type'];
     ${$xVarName."_size"} = $xVarvalue['size'];
     ${$xVarName."_error"} = $xVarvalue['error'];
     ${$xVarName} = $xVarvalue['tmp_name'];
}
จากนั้นก็เพียงแค่นำ code นี้ไปใส่ไว้ที่บรรทัดแรกสุดของโปรแกรมที่เราเขียน หรือว่าจะเอาไปใส่ไว้ใน file include ก็ได้นะครับ
ตัวอย่างจาก Source Code เราจะได้ชื่อตัวแปรใหม่ดังนี้ ซึ่งจะตรงกับชื่อตัวแปรที่ถูกกำหนดจาก register_globals=On
1
2
3
4
5
$_GET["get_var1"] //ไปเป็น $get_var1
 
$_POST["post_var1"] //ไปเป็น $post_var1
 
$_FILES["file1"] //ไปเป็น $file1, $file1_name, $file1_type, $file1_size
อีกนิด : ถ้าเป็นไปได้ควรเขียนโปรแกรมรับค่าจาก form ต่างๆ โดยใช้ตัวแปร $_GET, $_POST,$_FILES นะครับ

MySQL




แก้ปัญหา too many connection กับ default mysql setting

max_connect_errors
เมื่อ client ไม่สามารถ connect  mysql เซอร์เวอร์ได้    เซอร์เวอร์จะทำการยกเลิก connection นั้นหลังจาก รอไประยะหนึ่ง (wait_timeout)   และเมื่อเกิด connection_timeout mysql จะมี counter อยู่ตัวหนึ่งเอาไว้นับจำนวน connection ที่เข้ามาที่เครื่อง โดยนับแบบ สะสมไปเรื่อยๆ จนกระทั่ง clinet สร้าง connection  มาที่ mysql จนถึงค่า max_connect_errors  client จะมาสามารถ connect mysql ได้อีก โดยมีข้อความแจ้งเตตือน error  ประมาณว่า too many connection   จนกว่าเราจะไป Flush hosts (clear counter) นั้นทิ้ง     เราไม่สามารถ disable  ตัว counter นี้ได้เลย จากตัวแปร max_connect_error  หากเราเซ็ทค่าเป็น 0 (ซึ่งน่าจะหมายถึง infinity ก็ไม่ได้ช่วยอะไร​)  วิธีแก้ปัญหา มีสองวิธี คือเซ็ทค่า  max_connect_error=1844674407370954751 (ไม่แน่ใจตัวเลขนี้มาจากไหน น่าจะเป็นค่า max สุดที่เซ็ทได้รึเปล่า ) และสอง เจอ error  ก็ใช้คำสั่ง FLUSH HOST
ปล. กรณี connect_error เยอะ เกิดจาก query ค้างจำนวนมาก db รับโหลดเยอะเกิน เพราะฉะนั้น อีก Solution หนึ่งที่ดี คือปรับปรุงการ query ให้ถูกที่ถูกทาง ไม่ทำให้ db มีปัญหา หรือใช้การวาง โครงสร้าง หรือเครื่องมืออื่นๆ มาช่วยแบ่งเบาภาระ mysql   แต่โดยตัวของ mysql  เองแล้วมันทำได้แค่สองวิธีข้างต้น
connect_timeout
ตัวแปรกตัวนี้ เกี่ยวพันกับตัวปัญหาข้างบน อย่างแยกกันไม่ออก เพราะจากที่กล่าวมาข้างต้น เมื่อ connection_timeout –> wait_timeout –> บวกค่า counter ของ  connection_error โดยเฉพาะเมื่อเกิดความคับคั่ง บนระบบ network (network congestion )  เป็นไปได้ที่แต่ละ connection จะใช้เวลาหลายวินาที ในการสร้าง connection ให้สำเร็จ  แต่ค่า connect_timeout โดย default แล้วคือ 5 seconds  เราควรเพิ่มให้มันอยู่ที่ 15-20 secs โดยอาจต้องพิจารณาร่วมกับ thread_cache_size
skip-name-resolve
ถ้าจำนวน connection ที่เข้ามาที่เครื่อง mysql เยอะมากๆ นั่นคือ mysql  ต้องทำ dns lookup ทุกๆ connection  ซึ่งตอนนี้เราใช้วิธีการแก้ไขไฟล์ hosts  ที่เครื่อง mysql server เพื่อลดจำนวน lookup ที่จะเข้าไปยัง dns server  นั่นแปลว่า เวลามี backend  ใหม่ๆ เข้ามาเราต้องแก้ไข และ update /etc/hosts ตลอดเวลา เพื่อ lookup name ดังนั้น ถ้าเป็นไปได้ เพิ่ม config skip-name-resolve  ใน my.cnf  เลยก็ได้ เพราะยังไง ตอน grants สิทธิ์ ส่วนใหญ่เราก็ grant เป็น ip-range  อยู่แล้ว ไม่ได้ grant โดยใช้ชื่อ host
สำหรับการทำ master / slave ค่าที่ควรสนใจคือ
slave_net_timeout ให้เซ็ทไว้ที่  30 วินาที โดย default  อยู่ที่ 1 ชม. : (

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

MySQL - วิธีการสร้าง User ใหม่ และการกำหนดสิทธิ์บน console


หลังจากติดตั้ง MySQL เรียบร้อยแล้ว ถ้าใช้ระบบปฎิบัติการ Windows ให้เปิด console ขึ้นมาโดยการกดที่เมนู Windows แล้ว search คำว่า cmd หลังเปิด console ขึ้นมาแล้วให้ไปที่โฟล์เดอร์ bin ในโฟล์เดอร์ที่ติดตั้ง MySQL แล้วรันคำสั่ง mysql

กรณีที่เจอ error ดังนี้ ให้ตรวจสอบให้แน่ว่าเราได้เปิด MySQL service เรียบร้อยดีแล้วหรือไม่
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
รันคำสั่ง services.msc เพื่อเรียกหน้าต่างนี้ขึ้นมา
เมื่อ MySQL service อยู่ในสถานะ Started เรียบร้อยแล้ว ลองรันคำสั่ง mysql อีกครั้ง จะขึ้น command prompt ดังนี้
mysql>
จากนั้นให้รันคำสั่งต่อไปนี้ตามลำดับ
mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY'mypassword';
ในคำสั่ง CREATE USER ข้างต้น ส่วนที่เขียนว่า 'myuser'@'localhost' ระบุว่าจะสร้างชื่อผู้ใช้ myuser สำหรับการเข้าใช้จาก localhost ถ้าต้องการให้เข้าใช้จาก IP Address ใดก็ได้ให้เปลี่ยนเป็น 'myuser'@'%' หรือระบุ IP ก็ได้ เช่น 'myuser'@'192.168.1.10' เป็นต้น ส่วน IDENTIFIED BY ใช้กำหนดรหัสผ่าน ในตัวอย่างนี้รหัสผ่านคือ mypassword
mysql> GRANT ALL PRIVILEGES ON *.*TO 'myuser'@'localhost' WITH GRANT OPTION;
คำสั่ง GRANT ALL PRIVILEGES จะให้สิทธิ์ทุกอย่างกับ myuser ที่เข้าใช้จาก localhost คีย์เวิร์ด *.* หมายถึง สามารถจัดการได้ทุกฐานข้อมูลและทุกตาราง ถ้าเปลี่ยนเป็น test.* จะหมายความว่า สามารถจัดการได้ทุกตารางในฐานข้อมูล test เท่านั้น

/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////

วิธีแก้ ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

ครับ...ไม่มีสิ่งใดในโลกใบที่สมบูรณ์แบบ ทุกอย่างย่อมมีข้อบกพร่อง ข้อผิดพลาดกันได้ เช่นเดียวกับ mysql บน Ubuntu 8.04 ครับ
หลังจากทำการติดตั้ง mysql+phpmyadmin ด้วยคำสั่ง apt-get
root@durian: apt-get install mysql-server phpmyadmin
การติดตั้งก็สำเร็จไม่มี error ใดๆ แต่เมื่อเรียกใช้ mysql

seksan@durian:~$ mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
 ข้อ ผิดพลาดที่เกิดขึ้นเป็น bug ของ mysql ที่ไม่จำ password นั่งปวดหัวหาวิธีแก้ ทดลองเอา mysql ออกแล้วติดตั้งให่ก็ไม่หาย ก็ลองสืบค้นแหล่งความรู้จากโลกอินเตอร์เน็ต ก็ไปพบยาแก้ปวด http://www.debian-administration.org/articles/442 ก็ขออนุญาติแปล เรียบเรียง และทดลอง ให้นะครับ
1. หยุดการทำงานของ mysql

root@durian:# /etc/init.d/mysql stop
* Stopping MySQL database server mysqld
...done.
2. ใส่ให้ mysql ทำงานในโหมด mysql-safe
root@durian:/home/seksan# /usr/bin/mysqld_safe --skip-grant-tables &[1] 6219
root@durian:/home/seksan# nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[6258]: started
3.เรียก ใช้งานโดยไม่จำเป็นต้องมี password (--skip-grant-tables)
root@durian:/home/seksan# mysql --user=root mysqlReading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 111
Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
จาก นั้นกำหนด password ใหม่
mysql> update user set Password=PASSWORD('รหัสผ่าน') WHERE User='root';Query OK, 3 rows affected (0.00 sec)

Rows matched: 3 Changed: 3 Warnings: 0



mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)
mysql> exitBye
 4.สั่ง การทำงาน mysql
root@durian:/home/seksan# /etc/init.d/mysql start* Starting MySQL database server mysqld
...done.
5. เรียกใช้งาน
root@durian:/home/seksan# mysql -u root -pEnter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 401
Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> 
 สรุป... วิธีนี้สำเร็จครับ และที่พลาดไม่ได้ Many thanks

วันพฤหัสบดีที่ 19 มีนาคม พ.ศ. 2558

ดวงชะตา คือ นิสัย

คดวงชะตา คือ นิสัย
ใจ เป็นประธาน

วันหนึ่งขณะคุยกับผู้ใหญ่ท่านหนึ่งมซึ่งเป็นอดีตนักธุรกิจที่ประสบความสำเร็จมาก ซึ่งตอนนี้ท่านอายุใกล้ 70 แล้ว ผมทึ่งในวิชาโหงวเฮ้งของท่าน ที่เพียงเห็นกันไม่กี่ครั้งท่าน ก็สามารถพยากรณ์ได้เลยว่า คนนั้น คนนี้ อนาคตจะเป็นเช่นไร

ท่านบอกว่า ท่านอาศัยการสังเกตจากคนรอบตัวท่านหลายๆ คน ตั้งแต่ท่านอายุประมาณ 30 ปีต้นๆ ว่า คนที่มีลักษณะโหงวเฮ้ง (ลักษณะรูปร่างของ ตา คิ้ว หู จมูก ปาก จนถึงการเดิน การนั่ง การพูดจา น้ำเสียง แววตา การกินอาหาร และอากัปกริยาท่าทางอื่นๆ)

โดยท่านบอกว่า วิธีสังเกตของท่าน คือ สังเกตในขณะที่คนนั้นไม่รู้ตัว เวลาที่เขาปล่อยตัวตามสบาย (ตอนเผลอ) จะให้ข้อเท็จจริงที่ดีที่สุดถูกต้องที่สุด

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

ซึ่งท่านบอกว่า ดวงชะตา ก็คือ "นิสัยนั่นเอง" นิสัยเปลี่ยน ดวงก็เปลี่ยน
โดยคนที่ดวงดี ราศีผ่องใสอยู่เสมอ มักมีนิสัยมองทุกอย่างที่เจอในชีวิตเป็นบวก
คิดในแง่บวก ไม่ว่าเจออุปสรรคอะไรก็ผ่านไปได้ เพราะมีกำลังใจดี กำลังใจเข้มแข็ง เหมือนดังคำกล่าวที่ว่า
" ทุกสิ่งสำเร็จได้ เพราะใจ มีใจ เป็นประธาน "

ดังที่ปรากฏว่า นักธุรกิจหรือคนที่ประสบความสำเร็จในชีวิตหลายคน นำไปใช้ ซึ่งตรงกันกับผลงานวิจัยของฝรั่งที่ว่า
ATTITUDE (ทัศนคติ) หรือ Positve Thinking (การคิดบวก) คือ กุญแจสู่ความสำเร็จ
ซึ่งตรงกันกับท่านอาจารย์ที่ใช้นามแฝงว่า มังกร กล่าวไว้ในนิตยสารหมอดู ฉบับปฐมฤกษ์ พฤษภาคม 2533 ในหัวข้อ " ซินแสสอนศิษย์ " ตอน โหงวเฮ้งไม่ดี มีวิธีแก้ ว่าต้องแก้โดยการ ฝึกใจเราให้ผ่องใส เพราะมันจะไปปรับราศีให้ดีขึ้นได้ เวลาใดที่จิตใจสงบสบายจะส่งผลถึงหน้าตา ผิวพรรณ มันจะเปล่งปลั่งมีราศี ซึ่งการทำใจให้สงบสบายอาจใช้วิธีการทำสมาธิเข้าช่วยอีกแรงก็จะดียิ่งขึ้น ซึ่งเมื่อจิตใจสงบสบายก็เป็นตัวเสริมให้จิตเรานิ่งมีสติ แล้วปัญญาก็จะเกิด ดังคำที่ว่า " สติมา ปัญญาเกิด " เราก็จะแก้ปัญหาอุปสรรคให้ผ่านพ้นไปได้ครับ

โดยท่านมีดวงถึงฆาต (ดวงตาย) ในปลายปี 2553 ตอนนั้นท่านป่วยหนักมาก เดินไม่ได้ สารพัดโรครุมเร้า (ทั้งโรคความดัน โรคหัวใจ โรคเก๊าต์ หลอดเลือดแดงที่ขาตีบ อัมพฤกษ์ครึ่งซีก)
แต่ท่านก็ผ่านมาได้เพราะอานุภาพของการนั่งสมาธิ และจิตใจที่คิดในแง่บวกกับทุกอย่างที่เจอ มีกำลังใจในการต่อสู้ทุก ดังคำกล่าวที่ว่า " จิตเป็นนาย กายเป็นบ่าว " และพยายามช่วยตนเองจนถึงที่สุด ไม่ต้องการให้คนอื่นพยุง พยายามออกแรงที่กล้ามเนื้อขา แขน ท่านเพียงแค่ป่วยหนักแต่ผ่านพ้นมาได้ โดยปัจจุบันนี้เดินได้แล้ว (จนอาจารย์หมอที่โรงพยาบาลศิริราชถึงกับงง เพราะคนอื่นที่เข้ารับการรักษาพร้อมกับท่าน บางคนก็ตายไปแล้ว หรือบางคนก็ต้องตัดขา)

และอีกเรื่องหนึ่ง

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

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

ซึ่งตามหลักโหงวเฮ้งแล้ว สิ่งที่สำคัญมาก คือ
1.น้ำเสียง
2.แววตา
3.ราศี

ทั้งสามสิ่งนี้ ถูกควบคุมด้วยสิ่งเพียงสิ่งเดียว คือ "ใจ "
"เมื่อใจดี ทุกอย่างดีหมด " น้ำเสียงบอกพลัง แววตาบอกความมุ่งมั่น ราศีบอกความสุขความสบายใจ เหมือนดังคำกล่าวที่ว่า " ทุกสิ่งสำเร็จได้เพราะใจ มีใจเป็นประธาน "

หมายเหตุ : ช่วยส่งบทความนี้ส่งต่อๆไปยังคนที่ท่านรู้จักด้วยก็ดีครับ ไม่ว่าจะทางอีเมล์หรือก๊อป

***ไปโพสต์หรือถ่ายเอกสารไว้แจกคนทั่วไป (โดยเฉพาะคนที่ท่านรัก) เพื่อทุกคนจะได้มีโชคชะตาที่ดีขึ้น

วันพฤหัสบดีที่ 29 มกราคม พ.ศ. 2558

แนวทางการคิดราคาค่าออกแบบ จาก Menn Studio


สัปดาห์ที่แล้ว ผมเขียนถึงหนังสือ Work for Money, Design for Love (ตอนที่ 3) ถึงเรื่องการคิดราคา ว่า ฝรั่งกับไทยไม่ตรงกันหลายอย่าง เลยคิดว่าขอเแชร์ประสบการณ์การคิดราคาค่าออกแบบของผมเองด้วยดีกว่า
ปีเตอร์ ดรักเกอร์ กล่าวว่า การคิดราคามี 2 แบบคือ แบบต้นทุนบวกกำไร กับแบบอิงจากคุณค่าที่ลูกค้าจะได้รับ

1. คิดราคาจากต้นทุน

ต้นทุนของนักออกแบบ หลักๆ คือค่าแรง หรือเวลาทำงานของเรา ส่วนอื่นๆ คือ ค่าคอมพิวเตอร์, ค่าซอฟต์แวร์, ค่าเช่าออฟฟิศ ฯลฯ ผมมักจะตีคร่าวๆ ว่า
ค่าแรง:เรามักอยากได้เงินเดือน 30,000 – 50,000 บาท
ค่าอุปกรณ์ไอที:ค่ามือถือ + คอมพิวเตอร์ + อุปกรณ์อิเล็กทรอนิกส์อื่นๆ ถ้ารวมแล้ว 72,000 บาทใช้งานได้ 3 ปี จะเท่ากับเป็นค่าเสื่อมราคาเดือนละ 2,000 บาท
ค่าออฟฟิศ:ไม่ว่าจะซื้อหรือเช่า (ทั้งบ้านและออฟฟิศ) สุดท้ายตีมาเป็นค่าใช้จ่ายรายเดือน รวมค่าน้ำ/ค่าไฟ/ค่าเน็ต ก็อยู่ในช่วง 5,000 – 15,000 บาท
ค่าซอฟต์แวร์:ค่า Adobe, Dropbox, Basecamp, Domain & Hosting, Google App และลิขสิทธิ์ซอฟต์แวร์อื่นๆ ตกประมาณเดือนละ 2,000 – 5,000 บาท(คุณอาจจะโกงส่วนนี้ก็ได้ ในไทยใครๆ ก็ทำกัน แต่สุดท้ายมันจะก่อผลเสียเป็นวงกว้างมากกว่าที่คิด ตัวอย่างง่ายๆ ก็เช่น หลังจากยุคเวิร์ดจุฬาฯ, เวิร์ดราชวิถี เราก็ไม่มีซอฟแวร์ไทยดีๆ ใช้อีกต่อไปแล้ว เพราะคนพัฒนาเจ๊งไปหมดแล้ว, เราแทบไม่เหลือโปรแกรมเมอร์เก่งๆ แล้ว เพราะกลายเป็นผู้บริหารห่วยๆ กันหมด หรือถ้าใกล้กว่านั้น ซอฟต์แวร์ระดับโลกที่เราขโมยใช้อยู่ ก็ไม่ค่อยรองรับภาษาไทย เพราะขายคนไทยไม่ได้ – วันหลังคงได้เขียนเรื่องนี้อีกที)
ค่าความรู้เพิ่มเติม:อาชีพเราต้องพัฒนาตลอดเวลา ไม่ว่าจะจากการอ่านหนังสือ / ดูหนังฟังเพลง / เรียนออนไลน์ / ลงคอร์สต่างๆ ฯลฯ ผมคิดว่าน่าจะกันส่วนนี้ไว้ซักเดือนละ 3,000 – 6,000 บาท
ค่าภาษี:หลังจากเป็นฟรีแลนซ์ 1 ปี พบว่า ถ้าตั้งเงินเดือนตัวเอง 5 หมื่น มีรายได้ต่อเดือนประมาณ 1 แสน เราจะเสียภาษีประมาณ 6 หมื่นบาท คือประมาณเดือนละ 5,000 บาท ดังนั้น อาจจะกันไว้เดือนละ 2,000 – 5,000 บาท
เมื่อเห็นต้นทุนส่วนใหญ่ของอาชีพแล้ว ผมเองมักจะประมาณว่า ถ้าจะเอาแค่พออยู่ได้ กำไรนิดหน่อย ไม่มีโบนัสอะไรนัก เราควรจะต้องหาเงินให้ได้ 2 เท่าของเงินเดือน เช่น ถ้าคิดว่าอยากได้เงินเดือน 30,000 ก็ควรต้องหาให้ได้อย่างน้อย 60,000 เพื่อให้ครอบคลุมค่าใช้จ่ายส่วนอื่นๆ ของธุรกิจ ถ้าหามาไม่พอ แสดงว่าเราจะต้องเอาเปรียบใครบางคนอยู่ เช่นอยู่บ้านของพ่อแม่ เลยไม่ต้องจ่ายค่าเช่า ซึ่งอาจจะดูเหมือนดีที่ได้ประหยัดค่าใช้จ่าย แต่สุดท้ายพ่อแม่จะเป็นห่วงว่าเราเอาตัวไม่รอด และอาจจะพยายามให้เราเลิกเป็นฟรีแลนซ์ ในขณะที่ถ้าเราเปลี่ยนค่าเช่าเป็นเงินเดือนให้พ่อแม่เดือนละ 1-2 หมื่น ท่านก็จะรู้สึกว่า เรามีเส้นทางของเราที่ดูแลตัวเราเองได้ และถ้าเราทำได้ต่อเนื่องยาวนาน ท่านจะเข้าใจในที่สุดว่า เป็นฟรีแลนซ์นั้นมั่นคงกว่าเป็นพนักงานบริษัทเสียอีก เพราะ การมีความสามารถนั่นแหละคือความมั่นคง

ต้นทุนต่อชั่วโมง จริงๆ แล้วราคาเท่าไหร่?

ไม่ว่าจะคิดเงินลูกค้าตามชั่วโมงทำงานหรือไม่ เราควรเข้าใจคร่าวๆ ว่า การเสียเวลาไปในแต่ละชั่วโมง เรามีต้นทุนอยู่เท่าไหร่กันแน่
ฟรีแลนซ์นั้นไม่ใช่พนักงานบริษัทที่มีข้อกำหนดการทำงาน (Job Description) ชัดเจน เราต้องเป็นทุกแผนกของบริษัท ซึ่งอย่างน้อยคือ เป็นฝ่ายขายและการตลาด, ฝ่ายผลิต, ฝ่ายควบคุมคุณภาพ และฝ่ายบัญชี และเมื่อคิดว่า วันทำงานที่เหมาะสมคือ 20 วันต่อเดือน (รวมวันหยุดต่างๆ แต่ห้ามลาคลอดลาบวช) ทำงานวันละ 8 ชั่วโมง เราจะได้ว่า เดือนนึงต้องทำงาน 160 ชั่วโมง
ผมคิดว่า สัดส่วนงานที่ควรทำ น่าจะประมาณนี้
งานสัดส่วนต้นทุนเวลาที่ควรใช้หมายเหตุ
ขายงาน
Marketing & Sale
20%32 ชั่วโมงธุรกิจปกติมักจะกันไว้ 30% แต่ธุรกิจสมัยใหม่ที่เน้นนวัตกรรม จะเอาทรัพยากรไปทุ่มกับการทำงานมากกว่าการขาย
ทำงาน
Designer/Developer
25%40 ชั่วโมงงานออกแบบ/เขียนโปรแกรม ฯลฯ
ตรวจงาน
Art Director/Tester
25%40 ชั่วโมงทำงานแล้วไม่เผื่อเวลาตรวจ งานจะหลุดและคุณภาพแย่
พัฒนาตนเอง
R&D
20%32 ชั่วโมงอันนี้ลอกจากบริษัทไอทีต่างๆ ที่มักกัน 20% ของเวลางานไว้ทำงานอื่นๆ หรือพัฒนาตนเอง
บัญชี
Accounting
10%16 ชั่วโมงตกสัปดาห์ละ 4 ชั่วโมง น่าจะเพียงพอสำหรับฟรีแลนซ์ที่ไม่ค่อยชำนาญงานเอกสาร ไว้ออกใบเสนอราคา, ใบแจ้งหนี้, สรุปงบกระแสเงินสด
จะเห็นว่า เวลาที่เราคิดเงินลูกค้าได้ จะอยู่ที่ครึ่งเดียว หรือ 80 ชั่วโมงต่อเดือนเท่านั้น ดังนั้นถ้าอยากได้เงินเดือน 30,000 ต้องหาเงิน 60,000 และมีค่าแรงชั่วโมงละ 60,000/80 = 750 บาท หรือถ้าอยากได้เงินเดือน 5 หมื่น ก็คือค่าแรง 1,250 บาทต่อชั่วโมง
ซึ่งเราจะคิดลูกค้าเป็นรายชั่วโมง หรือจากจำนวนการแก้งาน ก็ได้

คิดเงินรายชั่วโมง

ฝรั่งใช้วิธีคิดแบบนี้เป็นหลัก แต่เมืองไทยยากมาก ผมเองเคย คิดชั่วโมงละ 800 บาทเมื่อ 4 ปีที่แล้ว พบว่ายังไม่ค่อยชอบนัก ต้องอธิบายเยอะ และวางแผนงานลำบาก งานบางอย่างง่ายบางอย่างยาก ใช้พลังชีวิตต่างกันมาก คิดเท่ากันก็ไม่คุ้ม คิดต่างกันก็ต้องไล่แจกแจงให้ลูกค้าเข้าใจ

คิดเงินจากจำนวนการแก้งาน

นักออกแบบบางคนอาจจะกำหนดจำนวนการแก้งานเป็นหลักในการคิดราคา เช่น แก้ไม่เกิน 3 ครั้ง ครั้งต่อไปคิดครั้งละ xxx บาท ซึ่งก็จะช่วยป้องกันความยืดเยื้อของงานได้ แต่จากประสบการณ์ ผมพบว่ามันทำให้ลูกค้าและเราเกร็งเกินไป ว่าตกลงแก้แบบนี้นับด้วยมั้ย? บางอย่างแก้เยอะ บางอย่างแก้น้อย พอบังคับว่าแก้ได้เท่านี้ครั้ง ก็จะเกิดการต่อรองกันไปเรื่อยๆ ไม่งั้นเค้าก็อาจจะพยายามเขียนสรุปให้ละเอียดๆ เป๊ะๆ ซึ่งอาจจะดีถ้าเราเป็นแค่คนใช้คอมที่ทำตามสั่งแล้วจบ แต่มูลค่าของงานออกแบบนั้นคือไอเดียต่างๆ ที่เราใส่ให้ต่างหาก สุดท้ายผมพบว่า แม้จะจบงานได้ แต่งานมักออกมาไม่ค่อยดี และงานต่อๆ ไป ลูกค้าสามารถหา “แรงงานคอม” ที่ราคาถูกกว่าเราไม่ยากนัก

คิดรวมๆ โดยสรุปตามชิ้นงาน

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

2. คิดราคาจากคุณค่าที่ลูกค้าได้รับ

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

ถ้าการออกแบบคือการลงทุน แล้วลูกค้าควรได้รับผลตอบแทนเท่าไหร่?

การปล่อยกู้ในไทย มักจะได้ผลตอบแทน 15-30% ต่อปี,  การทำร้านอาหาร มักจะคืนทุนใน 1-3 ปี = ผลตอบแทน 30-100% ต่อปี, การทำผับหรืออาบอบนวด (ที่ว่ากันว่าเป็นธุรกิจที่กำไรสูงอันดับต้นๆ) จะคืนทุนใน 3-6 เดือน นั่นคือผลตอบแทน 200-400% ต่อปี
ส่วนการออกแบบ เท่าที่ผมทำมา ถ้าทำให้ลูกค้าคืนทุนได้ภายใน 1 ปี ลูกค้าจะประทับใจมาก ถ้า 2 ปี จะโอเค ถ้า 3 ปี จะเฉยๆ เพราะงานออกแบบนั้นลูกค้าต้องเหนื่อยช่วยสร้างด้วย เหมือนกับเหนื่อยทำร้านอาหาร ดังนั้นผมคิดว่าคืนทุนใน 1-3 ปี เป็นตัวเลขที่เหมาะสม
ดังนั้น ผมคิดว่า ROI (Return Of Investment) ของงานออกแบบ ควรอยู่ในช่วง 30-100% ต่อปี

แล้วจะวัดยังไงล่ะ?

ถ้าเราไม่สามารถรู้กำไรจริงๆ ของลูกค้า ก็อาจประมาณว่า ธุรกิจทั่วไปมักมีกำไร 20-30% จากยอดขาย ดังนั้นถ้าเราออกแบบให้เค้า 30,000 บาท เราควรทำให้ลูกค้าได้กำไรเพิ่ม 30,000 บาทใน 1-3 ปีแรก ซึ่งหมายถึงยอดขายเพิ่มขึ้น 100,000 – 150,000 บาท นั่นเอง ดังนั้นจะเห็นว่า บางธุรกิจก็เป็นไปได้ง่ายมาก (เช่น รีสอร์ท, ร้านอาหารหรู, ร้านขาย Gadget, ฯลฯ) ในขณะที่บางธุรกิจนั้นยาก
ผมจึงมักรับทำเว็บเฉพาะที่คิดว่าเราจะทำให้เค้าทำกำไรเพิ่มขึ้นได้ ถ้าดูแล้วเค้าไม่ได้กำไรตรงนี้ สู้แนะนำให้เค้าไปเปิด Fan Page หรือ ใช้เว็บสำเร็จรูป หรือไปประกาศขายของตามเว็บบอร์ดดีกว่า
และจากตัวเลข “คุณค่าที่ลูกค้าจะได้รับ” จะทำให้เราพบว่า บางที จ้างทำเว็บ 10,000 บาท ยังอาจจะแพงไป (ถ้าเค้าขาดทุน) และจ้างทำเว็บ 100,000 บาท ยังอาจจะถูกมาก (ถ้าเค้ากำไร) การทำเว็บที่ไปตอบโจทย์ลูกค้าได้จริงๆ จึงทำให้เราและลูกค้าได้ผลตอบแทนที่ดีทั้งคู่ ดีกว่าคิดราคาถูกตามตลาด แล้วรอทำตามสั่ง ไม่ได้สร้างผลกำไรให้ลูกค้า
ดังนั้น ถ้าเราทำให้ลูกค้าทำกำไรได้ เราจะคิดค่าตอบแทนสูงได้ เพราะเราเป็น “ที่ปรึกษาทางด้านการตลาดและการออกแบบ” แต่ถ้าเราทำไม่ได้ เราจะเป็นแค่ “แรงงานคอม” ที่ในไทยอาจจะจ้างกันถูกกว่ากรรมกร

การทำสัญญาว่าจ้าง

หลังจากทำงานมาหลายราคา ผมพบว่า ถ้ามูลค่างานต่ำกว่า 1 แสนบาท ไม่ค่อยคุ้มที่จะทำสัญญาว่าจ้าง (ทั้งเค้าและเรา) เพราะต่อให้ละเมิดสัญญา ก็ไม่คุ้มฟ้องร้อง แต่ถ้ามูลค่างานเกิน 1 แสน ก็มักจะหนีไม่ค่อยพ้น
การทำสัญญาเป็นต้นทุนอย่างหนึ่ง ต้องใช้เวลาและทักษะในการอ่านเอกสาร (รวมถึงอาจต้องปรึกษาทนาย ซึ่งก็ต้องมีค่าใช้จ่ายบางส่วน) ฟรีแลนซ์ส่วนมากเลยยอมเซ็นต์สัญญาที่ลูกค้าร่างมาให้ โดยลืมดูว่าตนเองอาจจะเสียเปรียบอะไรบ้าง
ประเด็นที่ควรระวัง

1. ถ้ามีการปรับเงิน ลูกค้าขอปรับเรา เราต้องขอปรับลูกค้า

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

2. กำหนดงานเสร็จ ไม่ควรเป็น “วัน/เดือน/ปี” แต่ควรเป็น “จำนวนวันนับจากเริ่มงาน”

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

3. วันเริ่มงาน ต้องนับจากหลักฐานว่าเราจะได้เงิน

ดีที่สุดคือเก็บเงินงวดแรกก่อน น้อยก็ยังดี ตีเช็คล่วงหน้าก็ยังดี เพราะมันพิสูจน์ว่า ได้เกิดการว่าจ้างแล้วจริงๆ ได้เข้าไปในระบบบริษัทลูกค้าแล้วจริงๆ ฟรีแลนซ์จำนวนมากมักจะเจอว่า “น้องทำไปก่อนเลย พี่รับผิดชอบเอง” สุดท้ายโปรเจ็คล่ม เก็บเงินใครไม่ได้ และเผลอๆ ไอ้พี่คนนั้นก็ลาออกไปแล้ว
แต่ถ้าไม่ได้งวดแรก อย่างน้อยในสัญญาควรระบุว่าจะได้เมื่อไหร่

4. เมื่อมีสัญญา ก็ต้องมีการเซ็นต์อนุมัติแต่ละงวด

เมื่อมีสัญญา ในสัญญาจะระบุว่าจะเก็บเงินแต่ละงวดได้เมื่อไหร่  ซึ่งเราก็ต้องมีหลักฐานว่า มันถึงงวดนั้นจริงๆ แล้ว โดยปกติเช่น เมื่อดีไซน์ผ่าน ถึงจะเก็บเงินได้, เมื่อเริ่มทดสอบระบบ ก็จะเก็บอีกงวด ฯลฯ เราก็ต้องมีเอกสารให้เค้าเซ็นต์อนุมัติ ถ้าไม่เซ็นต์ เราเก็บงวดนั้นไม่ได้ ก็ไม่ควรทำงวดต่อไป เพราะถ้าโปรเจ็คด่วนจริง สำคัญจริง จะมีคนผลักดันให้จ่ายเงินได้อยู่แล้ว เงินไม่ออกแปลว่าด่วนไม่จริง
ฟรีแลนซ์โดยมากมักจะทำไปเรื่อยๆ ลืมบังคับลูกค้าเซ็นต์อนุมัติแต่ละงวด ผลสุดท้ายมีใครก็ไม่รู้โผล่มาแล้วบอกว่า “ผมไม่ชอบแบบนี้ มาเริ่มกันใหม่ดีกว่า ไม่จ่ายเพิ่มนะ และถ้าช้ากว่าสัญญาเดี๋ยวปรับอีกด้วย” แว้กกกก

5. แยกแยะ “น้ำใจ” กับ “สิ่งที่รับปาก”

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

ฯลฯ

(ใครมีประสบการณ์อื่นๆ แชร์ในคอมเม้นท์ได้นะครับ)

แต่หลังจากผ่านงานเว็บงบ 5 พัน ถึงงบ 5 ล้าน ผมพบว่าตนเองเป็นพวกไม่ค่อยชอบโปรเจ็คใหญ่ๆ ที่ต้องมีการทำสัญญา เพราะเรามักเสียเวลากับการต่อรองมากกว่าการมาร่วมกันทำงาน ดังนั้นผมเลยเลิกรับงานราคาเกิน 1 แสนบาทไป รับราคาหลักหมื่น ขอเก็บ 30-50% ก่อนเริ่มงาน จบงานง่ายกว่า สร้างคุณค่าให้ลูกค้าได้มากกว่า และมีเวลาสำหรับพัฒนาตัวเองได้เยอะกว่า

แบบฟอร์มต่างๆ ที่เกี่ยวข้อง

แบบฟอร์มที่ผมคิดว่าจำเป็นต้องมีจริงๆ คือ ใบเสนอราคา, ใบแจ้งหนี้, ใบเสร็จรับเงิน และการสรุปงบกระแสเงินสดของตัวเอง
ซึ่ง…
ขอให้ติดตามต่อในสัปดาห์หน้าละกันนะครับ จะเอาตัวอย่างฟอร์มต่างๆ มาให้ดูกัน
(ทำตัวเหมือนหนังซุปเปอร์ฮีโร่เลยเนาะ :D)




เครดิต : http://mennstudio.com/2014/design-price-cost-value/