1

กังฟู 6 ขั้นสำหรับวิศวกรของอ.พี

อ่าน: 427
ความเห็น: 0
กังฟู 6 ขั้นสำหรับวิศวกรของอ.พี

ผมนั่งเรียนวิชาเกี่ยวกับความมั่นคงของระบบคอมพิวเตอร์อยู่ ผศ.ดร.พีรวัฒน์ วัฒนพงศ์ที่สอนอยู่ในขณะนั้น ก็พูดถึงขั้นตอนการเรียน 6 ขั้น หรือว่ากังฟู 6 ขั้นของวิศวกรขึ้นมา. ปรากฎว่าตอนนั้นผมก็จดไม่ทัน เวลาผ่านไป 2-3 ปีได้ ผมก็พึ่งมาถามวันนี้เองว่ามีอะไรบ้าง :-P. อ.บอกว่า กังฟู 6 ขั้นนี้คล้ายๆ learning step ของ Blooms ที่อาจารย์พึ่งมาค้นเจอทีหลังมี 6 ข้อเหมือนกัน.

ถ้าใครชอบดูหนังจีนกำลังภายในก็จะพบว่า กว่าจะเข้ายุทธภพได้ก็ต้องฝึกฝนจากคนธรรมดาๆเป็นขั้นไป. ก็อาจจะคล้ายกับวิศวกรที่มีเริ่มฝึกกังฟูตั้งแต่ …

  • กังฟู ระดับที่ 0 “เคยได้ยิน” ยกตัวอย่างเช่น มีคนพูดถึง blog บ้าง หรือ KM ก็ต้องอ๋อเคยได้ยิน แต่ว่าไม่จำเป็นต้องรู้ว่าเป็นอะไร
  • กังฟู ระดับที่ 1 “แปลได้” ยกตัวอย่างเช่น พอพูดถึง blog ก็รู้ว่าคือเว็บที่เอาไว้ตีพิมพ์บันทึกที่เรียงจากวันที่ใหม่ไปหาเก่า
  • กังฟู ระดับที่ 2 “เข้าใจความ” ยกตัวอย่างเช่น พอพูดถึง blog ก็อธิบายได้รู้มากกว่านิยามสั้นๆ
  • กังฟู ระดับที่ 3 “ชี้ตัว” (identify) ยกตัวอย่างเช่น ใครก็รู้ว่า gotoknow และ exteen เป็นบริการ blog. วันดีคืนดีมี multiply มี hi5 โพล่มาก็ต้องบอกได้ว่า multiply หรือ hi5 เป็นอะไรใช่ blog หรือเปล่า โดยอ้างอิงตามคุณสมบัติของสิ่งนั้นๆ ตามนิยาม
  • กังฟู ระดับที่ 4 “เข้าใจข้อดีข้อเสีย” ยกตัวอย่างเช่น รู้ว่า blog ดีอย่างไร เสียอย่างไร webboard มีข้อดีข้อเสียอย่างไร อาจจะเอามาเทียบกันได้ด้วย
  • กังฟู ระดับที่ 5 “เลือกได้” ยกตัวอย่างเช่น ของบางอย่างดีกับสภาพแวดล้อม/ปัญหา/โจทย์บางอย่าง เช่น ถ้าต้องการเล่าประสบการณ์การทำงาน blog ก็อาจจะเหมาะว่า webboard แต่ถ้าต้องการถามปัญหาทางเทคนิค webboard ก็อาจจะเหมาะกว่า blog. ทีนี้พอเลือกได้แล้วก็จะออกแบบได้ ออกแบบได้ก็เป็นพื้นให้สร้างได้

ป.ล. ตัวอย่างนี่ผมดัดแปลงเอาเองจากที่ฟังมาอาจจะมั่วๆหน่อย

ป.ล. (2) อ.มะนาวบอกว่าน่าจะมีขั้น 6 คือ “innovate” ด้วย

ป.ล. (3) ผมเรียก “innovate” ว่า “สร้างสิ่งใหม่” แล้วกัน. การเลือกน่าจะอยู่ที่ขอบของ Analysis และ Synthesis ของ Blooms. ส่วน “สร้างสิ่งใหม่” ก็เป็น systhesis แบบเต็มๆ.

ป.ล. (4) มากไปกว่านั้น “สร้างสิ่งใหม่” น่าจะรวมเรื่อง design ไว้ด้วย. ในการ design น่าจะมีอะไรมากกว่า “เลือก”. ผมแอบคิดว่าน่าจะเป็นการ “เชื่อมต่อ” สิ่งที่เลือกๆมา มากไปกว่านั้นก็อาจจะ “ปรับเปลี่ยน” สิ่งที่เลือกมา. … แต่ก็คิดต่อไปมากกว่านั้นนิดนึงว่าการเชื่อมต่อ และการปรับเปลี่ยน จะมองว่าเป็นการเลือกชนิดหนึ่งได้หรือเปล่า? เลือกวิธีเชื่อมต่อ เลือกวิธีปรับเปลี่ยน?

0

Citar – ซอฟตแวร์เสรีสำหรับระบุชนิดของคำ

เดิมที่ใช้ acopost แต่ว่า acopost พอเอาไปใช้บนเครื่อง amd64 ทั้งหลายแล้วออกอาการรวนๆ ผลลัพธ์ไม่เหมือนบนเครื่อง i386 ก็เลยมองหาตัวใหม่

แต่ pos tagger ตัวอื่นก็มีตั้งเยอะ ทำไมต้อง citar ก็เพราะว่า citar ไม่ค่อยมี code ที่ผูกติดกับภาษาใดภาษาหนึ่ง หรือว่า tag ของ ค่ายใดค่ายหนึ่ง (code ที่ผูกติด เช่น เช่น if pos == “NNP” แบบนี้เริ่มไม่น่าใช้แล้ว) พอไม่ผูกติดก็เอามาใช้กับาภาษาไทยได้เลย

citar ใช้ C++ เขียนไม่พอยังต้องลง QT รุ่นเท่ากับหรือใหม่กว่า 4.5 ด้วย ไม่ได้ทำ gui อะไรแต่ว่าใช้พวก QStringList อะไรทำนองนี้เป็นต้น วิธีการใช้ก็คล้าย acopost

พอ build citar เสร็วแล้ว เราก็เรียกคำสั่ง train corpus.txt lex.dat ngram.dat

corpus.txt เราก็ใส่พวก ฉัน/noun กิน/verb ข้าว/noun อะไรแบบนี้ไว้เยอะ เวลาเอาไปใช้ก็เรียก

tag lex.dat ngram.dat แล้วพิมพ์ข้อความเข้าไป แบบเว้นวรรคด้วยมันก็จะใส่ part-of-speech มาให้

วิธี download มาใช้ก็สั่ง git clone git://gitorious.org/citar/citar.git มันก็มาแล้ว ถ้ามี QT อยู่ก็จะมี qmake ด้วยก็สั่ง qmake citar.pro พอได้ไฟล์ Makefile ก็สั่ง make

0

Citar: avoid tagging an empty string

It seem like current verion of citar (a part-of-speech tagger) tags even empty strings. Empty strings must not be tagged and must not be in token list. So I patch it as follow:

diff -Nur citar.orig/tag/tag.cpp citar/tag/tag.cpp
--- citar.orig/tag/tag.cpp	2010-03-08 08:55:32.000000000 +0000
+++ citar/tag/tag.cpp	2010-03-08 08:56:12.000000000 +0000
@@ -90,7 +90,7 @@
 		if (line.isNull())
 			break;
 
-		QStringList splittedLine = line.split(" ");
+		QStringList splittedLine = line.split(" ",  QString::SkipEmptyParts);
 
 		// Get the sequence of words, adding start/end markers.
 		QVector sentence(2, "");
16

ใช้ swath จาก python

swath เป็นโปรแกรมตัดคำที่ดีโปรแกรมหนึ่ง เอา text อะไรยัดเข้าไปก็มักจะไม่เจ๊ง ไม่ต้องเขียนอะไรครอบมาก แต่ว่าบอกทีก็อยากใช้จาก python วีธีหลักที่จะเรียกใช้ ก็อาจจะสร้าง module ด้วย c++ ขึ้นมาเชื่อม swath กับ python วิธีแรกนี้โปรแกรมทำงานได้รวดเร็ว แต่ว่ามันเหนื่อยนะกว่าจะเสร็จ

ผมก็เลยใช้วิธีที่โปรแกรมทำงานช้าๆ แต่เขียนเสร็จเร็วแทน โดยเรียกผ่าน subprocess

import subprocess

def wordbreak(utxt):
    if not isinstance(utxt, unicode):
        raise TypeError, "wordbreak needs unicode"
    tis_txt = utxt.encode("CP874", 'replace')
    p = subprocess.Popen("swath", stdin = subprocess.PIPE, \
            stdout = subprocess.PIPE, close_fds = True)
    p.stdin.write(tis_txt)
    p.stdin.close()
    raw_output = p.stdout.read().decode("CP874", "replace")
    words = raw_output.split("|")
    p.stdout.close()
    return words

# Copyright (c) 2010 Vee Satayamas
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

เวลาเรียกใช้ก็สั่ง wordbreak(u”ทดลองตัดคำ”) อะไรแบบนี้ได้ แล้ว wordbreak ก็จะ return list ของคำออกมา ผมใช้ python 2.5.x นะครับ

2

nsCoreFoundationBreaker

After talking to @kengggg, we are agree to implement NS_GetComplexLineBreaks without using deprecated UCFindTextBreak. So I try to rewrite nsCarbonBreaker by using Core Foundation API. However I don’t have Mac since 2008 so I didn’t test. In fact, I don’t even try to compile the code.

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Theppitak Karoonboonyanan <thep@linux.thai.net>.
 * Portions created by the Initial Developer are Copyright (C) 2007
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 * - Theppitak Karoonboonyanan <thep@linux.thai.net>
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

#include "nsComplexBreaker.h"
#include <CoreFoundation/CFStringTokenizer.h>
#include <CoreFoundation/CFBase.h>

// An imaginary nsCoreFoundationBreaker
// I don't have Mac since 2008 (Vee Satayamas)

void
NS_GetComplexLineBreaks(const PRUnichar* aText, PRUint32 aLength,
                        PRPackedBool* aBreakBefore)
{
  NS_ASSERTION(aText, "aText shouldn't be null");

  // I don't know whether CFStringCreateWithCharactersNoCopy will works.
  // Some conversions may be needed
  CFStringRef cfAText = CFStringCreateWithCharactersNoCopy(NULL, aText, aLength,
    kCFAllocatorNull);
  NS_ASSERTION(cfAText, "cfAText shouldn't be null");

  CFStringTokenizerRef tokenizer = tokenizerForString(cfAText);

  if(tokenizer)
  {
    CFStringTokenizerTokenType  tokenType; 
    // CFStringTokenizerGetCurrentTokenRange may have to be called before
    // CFStringTokenizerAdvanceToNextToken
    while(CFStringTokenizerAdvanceToNextToken(tokenizer) != 
      kCFStringTokenizerTokenNone) 
    {
      CFRange tokenRange = CFStringTokenizerGetCurrentTokenRange(tokenizer);
      aBreakBefore[tokenRange.location + tokenRange.length] = PR_TRUE;
    }
  }

  // Foundation.h must be included for CFRelease?
  CFRelease(cfAText);
}
0

This is my speed test

$ curl http://mirrors.rit.edu/ubuntu-releases/karmic/ubun-9.10-desktop-i386.iso > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  2  689M    2 14.5M    0     0  89418      0  2:14:51  0:02:50  2:12:01   99k
1

มันคือปากกา

ไปกิน Jumbo Yaki Tei แล้วได้ของแถมมา

P1198798.JPG

P1198797.JPG

ถึงแม้จะรู้ว่ามันราคาไม่แพง แต่ก็รู้สึกดีที่ได้ของแถม :-P

10

XMLChid – This product is created with the use of ORCHID corpus jointly developed by NECTEC and NICT

Orchid เป็นคลังข้อความที่มีคำ ชนิดของคำ (ทางภาษาศาสตร์) และข้อมูลอื่นๆ อยู่ มีมาตั้งแต่ พ.ศ. 2540 ตอนนี้มีหน้าเว็บที่เข้าไปดาวโหลดได้แล้ว http://www.hlt.nectec.or.th/orchid/

ผมลองเปิดดูคิดว่าถ้าเป็น xml ก็น่าจะใช้ได้ง่ายดีเหมือนกัน ก็เลยลองแปลงเป็น xml ดู ทำมาได้ปี 2 แล้วมั้ง แต่ว่าพึ่งเอามาปล่อย เพราะว่า พึ่งเห็น license ของ orchid ที่ชัดเจน และจะเอาไปใช้ในการเรียนการสอนวิชา NLP

license ของ Orchid ซึ่งก็รวมถึง XMLChid มีว่าแบบนี้

     	

@1997 National Electronics and Computer Technology Center (NECTEC). All
rights reserved.

LICENSE AGREEMENT

License agreement (LA) is a legal agreement between you and NECTEC.Please read it carefully before redistribution, reproduction or downloading from ORCHID services. This license agreement consists of the above copyright notice, definitions, the acceptance of license agreement, terms of use, and disclaimer information. In addition, it provides warranty information, specific terms and conditions that depart from other "free" softwares or corpora and "open source" softwares or copora.

1. Definitions

(a) "NECTEC" refers to National Electronics and Computer Technology Center which is an organization under National Science and Technology Development Agency (NSTDA), Ministry of Science and Technology, Thailand.

(b) "NICT" refers to National Institute of Information and Communications Technology, Japan.

(b) "ORCHID" refers to a database or corpus jointly developed by NECTEC and NICT.

(c) "Services" refer to any supplies for accessing to a variety of resources, including tools, downloading, communication and collected information, and also any update, enhancement, new features, and/or the addition of any new Web property.

(d) "Terms of Use" or "TOU" refers to terms and conditions for utilizing ORCHID.

(e) "You" refers to any end users and/or government and private contributors who download program and data from ORCHID website in order to reproduce, redistribute and update content, material, or any products corresponding to ORCHID.

2. Acceptance of License Agreement
NECTEC reserves the right to update the license agreement at any time without prior notice.

3. Terms of Use

Redistribution and use of ORCHID, with or without modification, are permitted provided that all of the following conditions are met:

(a) Redistribution of ORCHID must retain the above copyright notice, Acceptance of License Agreement, TOU, and the disclaimer in section 4.

(b) Any product, created and redistributed by you, which is composed or uses of any part from ORCHID must include the following acknowledgement:

"This product is created with the use of ORCHID corpus jointly developed by NECTEC and NICT."

(c) Products derived from the adaptation of ORCHID must not be called "ORCHID", nor may "ORCHID" appear in their name, without prior written permission of NECTEC.

(d) You must not use "ORCHID" in a manner likely to cause any damage to NECTEC, NICT, or third person. NECTEC shall reserve our rights to demand any compensation, retaining fee, costs of action and execution, and expenses occurred out of such manner.

(e) Neither the name of the National Electronics and Computer Technology Center (NECTEC) / National Science and Technology Development Agency (NSTDA) / National Institute of Information and Communications Technology (NICT) nor the names of its contributors may be used to endorse or promote product derived from this software without specific prior written permission.

4. Disclaimer of Warranty

ORCHID, INFORMATION, CONTENT, MATERIAL, OR PRODUCT JOINLY PROVIDED OR RELEASED BY NECTEC AND NICT ARE THE COPYRIGHTED WORK OF NECTEC AND NICT. MOREOVER, ORCHID, INFORMATION, CONTENT, MATERIAL, OR PRODUCT JOINTLY PROVIDED OR RELEASED BY NECTEC, NICT AND CONTRIBUTORS ARE ALSO ON AN "AS IS" AND "AS AVAILABLE" BASIS. ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NECTEC, NICT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE SOFTWARE, INFORMATION CONTENT, MATERIAL, OR PRODUCT, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

พอดีเขาห้ามใช้ชื่อเดิมก็เลยตั้งชื่อให้ใหม่ว่า XMLChid ซึ่งดาวโหลดได้ที่ http://naist.cpe.ku.ac.th/pkg/xmlchid-20091123.tar.gz

3

KUCut API

ตั้งแต่ version 1.2.7 เป็นต้นไป KUCut มี API ให้เรียกใช้ง่ายๆ จาก Python แล้ว เวลาเรียกใช้งานทำแบบนี้

from kucut import SimpleKucutWrapper as KUCut
myKUCut = KUCut()
result = myKUCut.tokenize([u"ทดสอบทดสอบ"])

ใน result ก็จะได้ list 3 ชั้นออกมา

0

ส้มชุบช็อคโกแลต

pb130015.jpg

pb130013.jpg

pb130012.jpg

พี่เอมซื้อมาฝากทุกคนในแล็บได้กินเฉลี่ยๆ คนละชิ้น โชคดีว่าหลายคนบอกว่าเปรี้ยว ผมเลยได้กินเยอะหน่อย :-P