Skip to content


ทดสอบการทำงานแบบหลายภาษา

วันนี้เพิ่งทำการสร้างการทำงานแบบหลายภาษา ดังนั้นจึงได้ลงข้อความนี้เพื่อทำการทดสอบ

Posted in Uncategorized.

การจัดการหน้าจอแบบ Command line หรือ Clear screen (Scrollback Mode and Navigating)

การจัดการหน้าจอ ของ command line เช่นการ clear screen สามารถทำได้โดยการใช้อักขระพิเศษ ให้แสดงผลตามตาราง
Continued…

Posted in Uncategorized.

ใส่สีให้ trac (Syntax Coloring) ด้วย pygments และ svn MIME Types properties

วิธีการติดตั้ง

เวลาที่ต้องการดู source code ถ้าจะให้อ่านง่าย จำเป็นต้องแสดงผลโดยใช้สีสันเข้ามาช่วย (highlight & Syntax Coloring) ซึ่งใน Trac นั้น ก็มีเหมือนกัน โดยใน trac 0.11 เป็นต้นมา จะใช้ pygments ซึ่งมีมาให้อยู่แล้ว แต่เราจำเป็นต้องลง library นี้ในเครื่องก่อน
Continued…

Posted in Application, Linux, Programming, Trac & SVN. Tagged with .

ย้ายหรือเปลี่ยนชื่อโดเมนใน wordpress 3 และ wordpress-mu

หากวันนึงเราต้องการเปลี่ยนชื่อโดเมน blog ของเราจะทำอย่างไร ไม่ใช่เรื่องยากหรอกครับ ความจริงแล้วแค่รัน query ไม่กี่ตัวเท่านั้น ดังนี้ และเปลี่ยน old-domain.com กับ new-domain.com ไม่ต้องใส่ subdomain นะ
Continued…

Posted in Uncategorized.

ใช้ gtalk ผ่าน pidgin สำหรับ domain ขององค์กร

สามารถตั้งค่าของ pidgin ได้ดังนั้

  • เข้าไปที่เมนู Account -> Manage
  • กดปุ่ม Add..
  • กรอกรายละเอียดส่วนตัวดังนี้
    Screenshot

    • Username ชื่อบัญชี
    • Domain : ชื่อโดเมนขององค์กร
    • Resource : ใสอะไรก็ได้
    • Password : รหัสผ่าน
  • กรอกรายละเอียด ในแทป Advance
    Screenshot-1

    • ทำเครื่องหมายในช่อง Force old SSL
    • Connect port : 443
    • Connect server : talk.google.com

Posted in Application. Tagged with , .

http proxy สำหรับ apt-get

ในกรณีที่เครื่องของเราอยู่หลังเครื่อง proxy เช่น เครื่องใน office ทั่วไป จะไม่สามารถใช้งาน apt-get ได้เนื่องจาก apt-get ต้องไปดึง file ผ่าน http ซึ่งไม่สามารวิ่งทะลุผ่าน gateway ได้โดยตรง
apt-get จึงต้องวิ่งผ่าน proxy โดยสามารถทำได้โดยเติม ใน file .bashrc ใน home directory

# apt-get proxy
export http_proxy=http://[proxy ID or domain]:[port]/
export ftp_proxy=ftp://[proxy ID or domain]:[port]/

อย่าลืม log in ใหม่
แต่ในกรณีจากการทดสอบ จะไม่สามารถใช้ sudo ได้ เพราะมันจะไม่โหลด environment ของ user ของเราไปด้วย ดังนั้นจึงต้องเข้าด้วย sudo -s เพื่อไปเป็น root ก่อน
เมื่อเข้าไปแล้วลอง export environment ออกมาดู จะเป็น http_proxy เป็นค่าที่เราใส่เข้าไป

user# export

จะสังเกตว่าปลายทางที่เราไปดึงข้อมูลจะเป็น ip หรือ domain ของ proxy

Posted in Linux, Networking. Tagged with , .

Memcache & MySQL PHP Session Handler

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

การทำ centralized session หรือ เซสชั่นกลางนั้น เราสามารถทำได้ง่ายๆ โดยการหาตัวมารับหน้าที่เป็น data pool หรือที่เก็บรวบรวมข้อมูลตรงกลาง ซึ่งที่ผมจะนำไปใช้คือ MySQL สำหรับ บรรจุข้อมูลตรงกลาง ทุกเครื่องสามารถนำไปใช้งานได้ โดยเป็นข้อมูลเดียวกัน แต่เนื่องจาก MySQL จะทำการ update cache ทุกครั้งที่กำการอัพเดตข้อมูล

http://pureform.wordpress.com/2009/04/08/memcache-mysql-php-session-handler/

This is protected content. Please Login or Register for access.

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

การทำ centralized session หรือ เซสชั่นกลางนั้น เราสามารถทำได้ง่ายๆ โดยการหาตัวมารับหน้าที่เป็น data pool หรือที่เก็บรวบรวมข้อมูลตรงกลาง ซึ่งที่ผมจะนำไปใช้คือ MySQL สำหรับ บรรจุข้อมูลตรงกลาง ทุกเครื่องสามารถนำไปใช้งานได้ โดยเป็นข้อมูลเดียวกัน แต่เนื่องจาก MySQL จะทำการ update cache ทุกครั้งที่กำการอัพเดตข้อมูล

http://pureform.wordpress.com/2009/04/08/memcache-mysql-php-session-handler/

memcache = new Memcache;
            $this->lifeTime = intval(ini_get("session.gc_maxlifetime"));
            $this->initSessionData = null;
            $this->memcache->connect("127.0.0.1",11211);

            return true;
        }

        function open($savePath,$sessionName) {
            $sessionID = session_id();
            if ($sessionID !== "") {
                $this->initSessionData = $this->read($sessionID);
            }

            return true;
        }

        function close() {
            $this->lifeTime = null;
            $this->memcache = null;
            $this->initSessionData = null;

            return true;
        }

        function read($sessionID) {
            $data = $this->memcache->get($sessionID);
            if ($data === false) {
                # Couldn't find it in MC, ask the DB for it

                $sessionIDEscaped = mysql_real_escape_string($sessionID);
                $r = mysql_query("SELECT `sessionData` FROM `tblsessions` WHERE `sessionID`='$sessionIDEscaped'");
                if (is_resource($r) && (mysql_num_rows($r) !== 0)) {
                    $data = mysql_result($r,0,"sessionData");
                }

                # Refresh MC key: [Thanks Cal :-) ]
                $this->memcache->set($sessionID,$data,false,$this->lifeTime);
            }

            # The default miss for MC is (bool) false, so return it
            return $data;
        }

        function write($sessionID,$data) {
            # This is called upon script termination or when session_write_close() is called, which ever is first.
            $result = $this->memcache->set($sessionID,$data,false,$this->lifeTime);

            if ($this->initSessionData !== $data) {
                $sessionID = mysql_real_escape_string($sessionID);
                $sessionExpirationTS = ($this->lifeTime + time());
                $sessionData = mysql_real_escape_string($data);

                $r = mysql_query("REPLACE INTO `tblsessions` (`sessionID`,`sessionExpirationTS`,`sessionData`) VALUES('$sessionID',$sessionExpirationTS,'$sessionData')");
                $result = is_resource($r);
            }

            return $result;
        }

        function destroy($sessionID) {
            # Called when a user logs out...
            $this->memcache->delete($sessionID);
            $sessionID = mysql_real_escape_string($sessionID);
            mysql_query("DELETE FROM `tblsessions` WHERE `sessionID`='$sessionID'");

            return true;
        }

        function gc($maxlifetime) {
            # We need this atomic so it can clear MC keys as well...
            $r = mysql_query("SELECT `sessionID` FROM `tblsessions` WHERE `sessionExpirationTS`lifeTime));
            if (is_resource($r) && (($rows = mysql_num_rows($r)) !== 0)) {
                for ($i=0;$idestroy(mysql_result($r,$i,"sessionID"));
                }
            }

            return true;
        }
    }

    ini_set("session.gc_maxlifetime",60 * 30); # 30 minutes
    session_set_cookie_params(0,"/",".myapp.com",false,true);
    session_name("MYAPPSESSION");
    $sessionHandler = new SessionHandler();
    session_set_save_handler(array (&$sessionHandler,"open"),array (&$sessionHandler,"close"),array (&$sessionHandler,"read"),array (&$sessionHandler,"write"),array (&$sessionHandler,"destroy"),array (&$sessionHandler,"gc"));
    session_start();
?>

Posted in Linux, PHP.

70 web application ที่น่าสนใจ


This is protected content. Please Login or Register for access.

Posted in Uncategorized.

Thinkpad mouse x200si trackpoint

setup การใช้ thinkpad ครับ http://www.thinkwiki.org/wiki/How_to_configure_the_TrackPoint


This is protected content. Please Login or Register for access.

Posted in Linux.

Java-script ใน css

ท่านสามารถใส java-script ไว้สำหรับทำการแก้ bug ของ ie6 ซึ่งไม่สามารถแสดงผลได้อย่างถูกต้อง โดยการใส่ expression ดังตั่วอย่าง

#container{
	width: expression(document.body.clientWidth > 1100)? "1100px" : "auto";
	/* For web browsers supporting it */
	max-width: 1100px;
}

Posted in HTML & CSS, Javascript.