Archive for พฤศจิกายน, 2007
เข้าใจการ รับค่า และ แสดงผล ของ Haskell อย่างง่ายๆ
อ่านบล็อกของ Dan Piponi เรื่อง The IO Monad for People who Simply Don’t Care ซึ่งสอนการรับค่าและแสดงผล ของ Haskell อย่างง่ายๆ คือเขาสอนให้เข้าใจง่ายๆนะ โดยที่ยังไม่ต้องเข้าใจกลไกของ Monad ก็น่าจะนำไปใช้งานกันได้
เราเองก็ยังไม่ได้ดู Monad อย่างจริงๆจังๆเลยว่า มันมีกลไกการใช้งานอย่างไร เอาไว้ว่างๆจะลองดู
3 comments พฤศจิกายน 29, 2007
แทนที่ substring แบบต่างๆด้วย string ที่ต้องการ
จริงๆแล้วมันก็เหมือนกับโจทย์ที่ผมเคยไปถามไว้ใน
http://www.codenone.com/node/579 แต่ว่าที่มีคนมาตอบๆกันจะเป็นภาษาscript ซะส่วนใหญ่ ไม่ว่าจะเป็น php,python,ruby, หรือจะแปลกๆหน่อยก็แบบ FN อย่าง Haskell
ทีนี้วันนี้เพื่อนผมเค้าก็ต้องการทำแบบนี้เช่นกันแต่เป็นจาวา ความต้องการก็คือ ต้องการจะแทนที่ช่องว่างต่างๆใน string ให้เหลือแค่ ช่องว่างช่องเดียว อย่างเช่น มี
"abc edf xyz" ต้องการทำให้เป็น "abc edf xyz"
และก็ถ้ามีเกินมาทางด้านซ้ายด้านขวาก็ให้ trim ออกด้วย ผมก็เลยไปค้นใน doc ของ class String ก็เจอ method replaceALL ซึ่งมี รูปแบบดังนี้
String replaceAll(String regex, String replacement)
มันจะรับค่าสองค่า คือ string ที่เป็น regex และ string ที่จะนำไปแทนที่ substring ที่ match กับ regex นั้น ซึ่งจะทำให้ได้ผลลัพธ์ตามที่บอกไปเมื่อกี้ก็คือ
String a="abc edf xyz";
System.out.println(a.replaceAll("[\\s]+"," "));
ป.ล. หวังว่าเพื่อนบาสคงจะได้เอาไปใช้กับงานที่ทำอยู่นะ
1 comment พฤศจิกายน 28, 2007
add drupal user with user_save()
จากครั้งก่อนที่ผมหาทาง เพิ่ม user ให้กับ drupal ผ่านทาง curl ซึ่งมันก็ทำงานได้ แต่พอเอาโค้ดไปใส่ไว้เป็น node ใน drupal มันกลับทำงานไม่ได้ ผมก็เลยต้องหาวิธีอื่น ตอนแรกก็ลอง insert ข้อมูลเข้าตาราง users ตรงๆ ก็ติดเรื่องที่ว่ามีตารางอื่นที่ user ต้องเกี่ยวพันด้วย เลยทำให้ยุ่งยาก และการมายุ่งกับตารางของระบบตรงๆเองแบบนี้อาจจะทำให้มันเจ๊งเอาได้ง่ายๆ ก็เลยไปหาebookเกี่ยวกับ drupal มาลองค้นดูมีคำอธิบายเกี่ยวกับโมดูลต่างๆอยู่ มีอยู่ module หนึ่งคือ user ผมก็เลยลองไปค้นในโค้ดของ user.module เพื่อหาฟังก์ชันที่ทำหน้าที่ในการadd user และแล้วก็มาเจอ คอมเม้นของฟังก์ชันหนึ่งแบบนี้
/**
* Save changes to a user account or add a new user.
*
* @param $account
* The $user object for the user to modify or add. If $user->uid is
* omitted, a new user will be added.
*
* @param $array
* An array of fields and values to save. For example array('name' => 'My name');
* Setting a field to NULL deletes it from the data column.
*
* @param $category
* (optional) The category for storing profile information in.
*/
จากคอมเม้นบอกว่ามันสามารถแก้ไขข้อมูลของ user ที่มีอยู่แล้ว หรือถ้า user นั้นไม่มี ก็จะเป็นการ add user นั้นเข้าไป
ซึ่งวิธีการ add user เข้าไปก็คือเวลาส่งค่าให้ฟังก์ชัน ไม่ต้องส่ง uid ของ user เข้าไป ตัวอย่างการสร้าง add user ใหม่ เช่น
user_save(array ('name' => 'username'),array ('name' => 'username','pass' => 'abcdefg','status' => 1));
เพียงเท่านี้เราก็จะได้ user ใหม่แล้ว password และ สถานะ Active เรียบร้อย
1 comment พฤศจิกายน 27, 2007
Reset auto_increment field. และ utf8กับphpmyadmin
กำลังทำเว็บตัวนึงอยู่แล้วที่นี้ตอนลองเล่นกับ mysql มีfieldนึงที่ต้องตั้งเป็น auto_increment
พอลองทดสอบ insert ข้อมูล ตัวเลขใน field นี้ก็จะเพิ่มขึ้นเรื่อยๆ หลังจากทดสอบเสร็จแล้ว
ก็ลบข้อมูลออกแล้วต้องการให้ค่า auto_increment กลับไปเริ่มต้นที่ 1 ใหม่ ก็เจอวิธีการนึง
ใช้คำสั่งแบบนี้
ALTER TABLE [tablename] AUTO_INCREMENT =[number]
ต่อไปเป็นการทำให้ phpmyadmin เวลาแสดง row ข้อมูลที่เป็นภาษาไทยได้ถูกต้อง
วิธีการนี้ได้จาก ZePhy จากบอร์ดนาริสาที่กระทู้นี้ http://www.narisa.com/forums/index.php?showtopic=19091
นั่นคือใส่คำสั่งนี้ในโค้ด php หลังจากที่ทำการ connect และ เลือกฐานข้อมูลแล้ว
$dbhost = “localhost”;
$dbuser = “root”;
$dbpass = “xxxx”;
$dbname = “yourDB”;
$dbc = mysql_connect($dbhost,$dbuser,$dbpass) or die (“Can not connect MySQL”);
$dbs = mysql_select_db($dbname) or die (“Can not connect database”);
mysql_db_query($dbname,”SET NAMES UTF8″);//เพิ่มตรงนี้บรรทัดเดียว สบายแล้ว สากลๆ utf8
3 comments พฤศจิกายน 22, 2007
Drupal user register with curl.
วันนี้ลองหาวิธีที่จะ เขียนโค้ด php เพื่อที่จะไป เพิ่ม user ให้กับ drupal ก็เข้าไปที่เว็บของ drupal ก็เจออันนึงเป็นวิธีการ automate task ของ drupal โดยใช้ curl extension ก็คือจะใช้ curl เป็นตัวที่จะ post ข้อมูลในการ register user ใหม่เข้าไปให้ drupal จากตัวยอย่างในเว็บมันใช้กับ drupal5 ไม่ได้ก็เลยหาวิธีปรับๆจากเว็บอื่นๆก็เจอ comment จากเว็บนี้เขาได้แก้ไว้ ก็เลยเอามาปรับปรุงกับการทำให้มัน regiseter user ใหม่เข้าไปได้ โค้ดที่ได้ก็เป็นแบบนี้
อ่อก่อนที่จะดูโค้ด ใครที่ยังไม่ได้ลง curl extension ให้ลงก่อน ถ้าเป็น ubuntu ก็ให้สั่ง
sudo apt-get install php5-curl
แล้วก็เพิ่ม extension=php_curl.so ลงไปที่ไฟล์ /etc/php5/apache2/php.ini
ส่วนโค้ดที่ทดสอบ user register มีดังนี้
<?php
// ***********************************************
// ********* Login into drupal
// ***********************************************
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,”http://localhost/drupal/node&destination=node“);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, ‘PHP script‘);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, “cookie.txt“);
curl_setopt($ch, CURLOPT_COOKIEFILE, ‘cookie.txt‘);
curl_setopt($ch, CURLOPT_POST, 1);
//admin login
curl_setopt($ch, CURLOPT_POSTFIELDS, “name=username&pass=password&form_id=user_login_block“);
ob_start(); // prevent any output
curl_exec ($ch); // execute the curl command
ob_end_clean(); // stop preventing output
curl_close ($ch);
unset($ch);
// ***********************************************
// ********** get page create form (necesary for getting token)
// ***********************************************
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEFILE, “cookie.txt“);
curl_setopt($ch, CURLOPT_URL,”http://localhost/drupal/admin/user/user/create“);
$buf3 = curl_exec ($ch);
curl_close ($ch);
// find form token
preg_match(‘@edit-user-register-form-token” *value=”([^"]*)”@‘,$buf3,$matches);
$token=$matches[1
echo "token:$token\n";
// ***********************************************
// ********* post form, using token
// ***********************************************
$ch = curl_init();
curl_setopt($ch,CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_COOKIEFILE,"cookie.txt");
curl_setopt($ch,CURLOPT_URL,"http://localhost/drupal/admin/user/user/create");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,"name=newuser&mail=email@gmail.com&
pass[pass1]=password&pass[pass2]=password&status=1¬ify=0&
form_id=user_register&form_token=$token“);
$buf2 = curl_exec ($ch);
curl_close ($ch);
?>
Blogged with Flock
Tags: drupal, curl, userregister
1 comment พฤศจิกายน 21, 2007
split vim viewport และ find and replace
split vim viewport { http://www.linux.com/articles/54157 }
AND
find and replace { http://www.vim.org/tips/tip.php?tip_id=31 }
Add comment พฤศจิกายน 9, 2007
Codefest
Codefest เมื่อวันที่ 5-6 ที่ผ่านมา จัดที่ห้องบุษกรชั้น1 ตึกเนคเทค สวทช
ครั้งนี้พิเศษกว่าครั้งที่ผ่านมาก็คือมี guest จากทางญี่ปุ่นด้วย ซึ่งสามคนนั้นก็เป็นผู้เชี่ยวชาญเกี่ยวกับ debian ละครับ งานนี้มีโปรเจ็ค 7 กลุ่มด้วยกัน ครั้งนี่ผมเองได้ร่วมทำงานกับพี่ป๊อก หรือ pphetra ที่ผมได้ติดตามบล็อกพี่เขาและก็เคยได้แลกเปลี่ยนความคิดกันบน codenone มาบ้าง เพิ่งจะได้เจอตัวจริงก็งานนี้แหละครับ งานนี้พี่ป๊อกเอาโปรเจ็คมาทำสองตัวด้วยกันก็คือ ระบบ Bid Server โดยใช้ Erlang เป็นฝั่ง Server ส่วน Client นั้นใช้ Flex เป็นตัวทำ interface แล้วก็ส่ง message ติดต่อกับ erlang ผมเคยดูโค้ด erlang มาบ้างแบบผ่านๆ ไม่ได้สนใจอะไรมาก แต่เนื่องจากเคยผ่าน prolog กับ haskell มาบ้าง ก็เลยทำให้ไปได้เร็วหน่อย เริ่มแรกพี่ป๊อกก็ให้ศึกษาการเขียน socket ด้วย erlang ก่อนเลยครับ อ่อ ทีมผมก็มีเพื่อนอีกสองคนที่ร่วมกันทำในส่วนของ erlang ก็คือ บอย กับ ซี ครับ ต่างไม่เคยใช้ erlang มาก่อนด้วยกันหมดเลย แต่ก็ใช้เวลาไม่นาน ศึกษาโค้ดที่พี่ป๊อกเขียนมาเป็นตัวอย่างให้ดู ก็พอจะเข้าใจการติดต่อสื่อสารกันด้วย socket แล้วครับ จากนั้นก็วางแผนกันว่าจะต้องเขียนอะไรเพิ่มเข้าไปบ้าง ลำดับการทำงานเป็นยังไง จะต้องมีการสร้างโปรเซสอะไรบ้าง โปรเซสไหนจะติดต่อสื่อสารกับโปรเซสไหนบ้าง แล้วก็แยกย้ายกันไปเขียน ครั้งนี้นอกจากจะได้มีโอกาสใช้ erlang แล้ว ยังได้ใช้ git ซึ่งเป็นโปรแกรม version control ตัวนึง ก็ทำเอางงๆกันไปบ้างครับ เพราะว่าพี่ป๊อกเองก็เพิ่งได้ใช้ไม่นาน ตัวผมเองก็เพิ่งจะได้ใช้ version control ตัวนี้ตัวแรกนั่นแหละครับ ที่ผ่านมา ถ้าทำงานกับเพื่อนมีแต่จะส่งไฟล์ผ่าน flashdrive บ้าง ส่งให้กันทางเมลบ้าง ไม่เคยคิดจะใช้เครื่องมืออะไรแบบนี้
ทำกันอยู่ 1 วัน หนึ่งคืน กับอีกครึ่งวัน ก็ได้ตัวต้นแบบ ที่พอจะให้ admin เปิดการประมูลได้ client สามารถเข้ามาร่วมประมูลได้ แต่ก็มีปัญหาบ้าง เช่นอยู่ดีๆ โปรเซสก็ตาย แล้วก็ยังไม่ได้จัดการกรณี ที่เสนอราคาก่อนเวลา หรือ เสนอราคาตอนหมดเวลา ตอนพรีเซ้น ก็มีปัญหาเรื่องการสื่อสารกันนิดหน่อย เพราะเรื่องเวลาที่กำหนดในการประมูลนี่แหละครับ ทำให้ ซี ต้องเหนื่อยพูดไปเยอะเลย(ซีพูดภาษาอังกฤษเก่งมากเลยอะ) ส่วนผมก็ออกไปพรีเซ้นแบบ ภาษาอังกฤษ ไม่ได้เรื่องเลยอะ เป็นจุดอ่อนที่ต้องปรับปรุงกันต่อไป
มาพูดเรื่องอื่นที่ไม่ใช่เรื่องโปรเจ็คที่ทำกันบ้าง งาน Codefest ก็ยังคงเหมือนครั้งที่ผ่านมาครับ นอกจากจะเป็น เขียนโปรแกรมมาราธอนกันแล้ว ยังเป็น กินมาราธอนกันด้วย ขนม กาแฟ อาหาร เต็มกำลังกันสุดๆ ผมนี่หนังท้องยังไม่หายตึง พี่อ๊อดมาเรียกไปกินข้าวอีกแล้ว guest 3 ท่านจากญี่ปุ่นก็เป็นกันเองดีมาก เวลานอนก็หาที่นอนกันตามสบายเลยครับ ตรงไหนนอนได้ก็นอนกันเลย ส่วนผมถ้าแม่ไม่โทรมาหาตอนเช้าอาจจะนอนเตลิดไปเที่ยงเลยก็ได้ ฮ่าๆๆ จบดีกว่า แล้วเจอกันอีกในงาน Codefest ครั้งหน้านะครับ
2 comments พฤศจิกายน 7, 2007