Loading
Showing posts with label Programming. Show all posts
Showing posts with label Programming. Show all posts

#Memo - Syntax Highlighting is Important :D

Syntax Highlighting is Important in Programming :D


"Go" as smart as Python or Ruby for this case

Here is print.go code from built-in documents.

package main

import "fmt"

func main() {
   var u64 uint64 = 1<<64-1;

   type T struct { a int; b string };
   t := T{77, "Sunset Strip"};
   a := []int{1, 2, 3, 4}; 

   fmt.Printf("%v %v %v\n", u64, t, a);
   fmt.Print(u64, " ", t, " ", a, "\n");
   fmt.Println(u64, t, a);
}


The results are as smart as high level languages does.

Struct, Array, can print just like Python or Ruby, or can do C way too.

$./6.out
18446744073709551615 {77 Sunset Strip} [1 2 3 4]
18446744073709551615 {77 Sunset Strip} [1 2 3 4]
18446744073709551615 {77 Sunset Strip} [1 2 3 4]

I believe C++ Programmers will like it.

#Memo - Myself - 2009 Oct 19

Today,

1) I have Ported My Roman to Number, Python one liner to C, Speed becomes unbeatable. :-)

Python
R,r={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000},lambda x:reduce(lambda T,x:T+R[x]-T%R[x]*2,x,0)

C
int R[]={100,500,0,0,0,0,1,0,0,50,1000,0,0,0,0,0,0,0,0,5,0,10};int r(char*s){int x=0;while(*s)x+=R[*s-'C']-x%R[*s-'C']*2,s++;return x;}

2) I Found New Python IDE, called Spyder

http://code.google.com/p/spyderlib/

# I am currently using Pyscripter and sometimes notepad++, previously I use Wing (its not free), Eric IDE, ...

3) I found Python to C++ Code Generator called shedskin, it supports limited syntax only though.

http://code.google.com/p/shedskin/

# I am sometimes using psyco, its quite good actually, psyco use JIT when It can, just skip if cannot, for shedskin, it cannot proceed at all for unsupported syntaxes. Well, It make sense though.

4) I have learn something new on new languages and new ideas, new writing styles.

http://myanmaritpros.com/forum/topics/challenge-on-programming-or

# Challenging is good, I believe :-)

Cheers,
Mark

Teach Yourself Programming in Ten Years - ပရိုဂရမ္ တကယ္တတ္ဖို့ ဆယ္ ... နွစ္

Teach Yourself Programming in Ten Years

ပရိုဂရမ္ တကယ္တတ္ဖို့ ဆယ္ ... နွစ္ ... အခ်ိန္လိုအပ္ပါတယ္

Peter Norvig (ပီတာ ေနာဗစ္)


လူေတြ ဘာလို့ ဒီေလာက္ ေလာေနျကတာလဲ?

စာအုပ္ဆိုင္ေတြရွိတဲ့ ဘက္ကို သင္ လမ္းေလ်ွာက္ျကည့္ဖူးမွာပါ။ ဂ်ာဗားကို ၇ ရက္အျပတ္သင္၊ Visual Basic၊ ဝင္းဒိုး၊ အင္တာနက္ စတာေတြကို နာရီ အနည္းငယ္၊ သို့ ရက္အနည္းငယ္ နဲ့ အျပတ္သင္ ဆိုတာမ်ိုးေတြေပါ့။

တစ္ခါက Amazon ဆိုတဲ့ ဝဘ္ဆိုဒ္မွာ ဒီလို ရွာျကည့္ဖူးတယ္။

ထုတ္တဲ့ရက္ ၁၉၉၂ ေနာက္ပိုင္း၊ ေခါင္းစဉ္မွာ days ဆိုတာ ပါျပီး (learn (သို့) teach yourself) ဆိုတာလည္းပါတဲ့ စာအုပ္မ်ား ဆိုျပီးေတာ့ရွာျကည့္တာ ၂၄၈ ခု ထြက္လာပါတယ္။ ပထမဦးဆံုး ၇၈ အုပ္ဟာ ကြန္ပ်ူတာစာအုပ္ေတြ ျဖစ္ျပီး (၇၉ ခုေျမာက္ဟာ ဘင္ဂါလီဘာသာကို ၃ဝရက္နဲ့ အျပတ္သင္ဆိုတဲ့ စာအုပ္ျဖစ္တယ္)

ဒါနဲ့ days ဆိုတဲ့ စာလံုးကို hours ဆိုျပီး ေျပာင္းရွာျကည့္မိတယ္။ ၂၅၃ အုပ္ေတာင္ ထြက္လာတာေတြ့ရတယ္။ ၇၇ အုပ္က ကြန္ပ်ူတာစာအုပ္ျဖစ္ျပီး ၇၈ အုပ္ေျမာက္ဟာ (အဂဿငလိပ္သဒဿဒါနဲ့ ေရးပံုေရးနည္းကို ၂၄နာရီနဲ့ အျပတ္သင္) စာအုပ္ျဖစ္တာေတြ့ရတယ္။

စာအုပ္ ၂၀၀ မွာ ၉၆ ရာခိုင္နွုန္းဟာ ကြန္ပ်ူတာ စာအုပ္ေတြ ျဖစ္ေနတာေတြ့ရတယ္။

ဒါကို ျကည့္ျခင္းအားျဖင့္ လူေတြဟာ ကြန္ပ်ူတာနဲ့ ပတ္သက္ျပီး ေတာှေတာှေလးကို ေလာေနျကတယ္။ ဒါမွ မဟုတ္ ကြန္ပ်ူတာ နည္းပညာေတြကပဲ အျခားဟာေတြနဲ့ ယွဉ္လိုက္ရင္ ဒီေလာက္ လြယ္ကုန္ျပီလား။ ကြမ္တမ္ ရူပေဗဒ၊ ဘင္သိုဗင္ စတာေတြ၊ ယုတ္စြအဆံုး ေခြးေမြးျမူေစာင့္ေရွာက္ဖို့ နည္းေတာင္ ရက္အနည္းငယ္နဲ့ တတ္နည္း ဆိုတဲ့ စာအုပ္မေတြ့ဖူးဘူး။

ဒီအလြယ္တတ္နည္းေတြဟာ သူ့အေျကာင္းနဲ့ သူေတာ့ရွိလိမ့္မယ္။ ဘယ္မွာမွ သံုးစားမရတဲ့ ပရိုဂရမ္ဆိုရင္ေတာ့ လြယ္ရင္လြယ္မွာေပါ့။ အဲလိုမ်ိုးဆိုရင္ေတာ့ ခပ္တံုးတံုး သူေတြေတာင္ ၂၁ရက္နဲ့ တတ္ရင္ တတ္နိုင္လိမ့္မလားပဲ။

ကဲ.. ထားပါေတာ့။ ..

C++ ကို ၃ရက္နဲ့ အျပတ္ ဆိုတဲ့ စာအုပ္ကို နဲနဲ သံုးသပ္ျကည့္ရေအာင္။

- ၃ ရက္နဲ့ ပရိုဂရမ္ တကယ္ ေရးခ်ိန္ ရွိလိုက္မွာ မဟုတ္ပါဘူး။ ကိ္ုယ္ေရးလိုက္တဲ့ ပရိုဂရမ္ရဲ့ ေအာင္ျမင္မွု၊ မေအာင္ျမင္မွုေတြကို သိမွာ မဟုတ္ဘူး။
- တကယ့္ အေတြ့အျကံုရွိတဲ့ ပရိုဂရမ္မွာေတြနဲ့ အလုပ္လုပ္ခြင့္ရွိလိုက္မွာမဟုတ္ဘူး။
- C++ ရဲ့ လက္ေတြ့ အရသာကို သိရမွာ မဟုတ္ဘူး။ လြယ္လြယ္ေျပာရရင္ ေလ့လာဖို့ အခ်ိန္မရဘူး။
- ဒါေျကာင့္ အဲဒီ စာအုပ္ဟာ အေပါှယံေလာက္ပဲ ေျပာသြားနိုင္တာကို ေတြ့ရမွာပါ၊
- ပုတ္ရဟန္းမင္းျကီး အလက္ဇန္းဒါးက ေျပာဖူးတယ္။ နဲနဲပဲ တတ္တာဟာ အနဿတရာယ္ ျကီးမားတယ္တဲ့။

- C++ မွာ ၃ ရက္ဆိုရင္ syntax ေလာက္ေတာ့ သိရင္သိသြားမွာေပါ့ (အျခား ဘာသာစကားကို သိထားတယ္ဆိုရင္)၊ ဒါေပမယ့္ တကယ့္လက္ေတြ့ ဘယ္လိုသံုးရမယ္ဆိုတာ သိလိုက္မွာ မဟုတ္ဘူး။
- ဥပမာ basic ပရိုဂရမ္သမား ဆိုရင္၊ C++ ရဲ့ syntax  ေတြကို ဘယ္လိုသံုးရမယ္ဆိုတာ သိေကာင္းသိလာမယ္။ ဒါေပမယ့္ C++ ရဲ့ တကယ္ေကာင္းတဲ့ ေနရာ၊ မေကာင္းတဲ့ ေနရာေတြကို  သိမွာ မဟုတ္ဘူး။ ဒါေျကာင့္ ဘာမွ အဓိပဿပာယ္မရွိဘူး။
- အလန္ ပါးလစ္ဆိုတဲ့သူေျပာဖူးတယ္ ... ဘာသာစကားတစ္ခုဟာ သင့္ရဲ့ လက္ရွိ ပရိုဂရမ္ စဉ္းစားပံု စဉ္းစားနည္းကို ေျပာင္းလဲေစမွု မရွိဘူးဆိုရင္၊ ေလ့လာရတာ မတန္ပါဘူး တဲ့။
- တကယ္ျဖစ္လာမွာက C++ ရဲ့ တပိုင္းတစ ေလာက္ပဲ နားလည္လိုက္မွာပါ။ ပရိုဂရမ္ တကယ္တတ္ဖို့မဟုတ္ပဲ၊ အလုပ္ဘယ္လိုျပီးေအာင္လုပ္ရမလဲ ဆိုတာ မ်ိုးနဲ့ ပိုျပီး တူတာေတြ့ရပါတယ္။

တကယ္ေတာ့ သံုးရက္ဟာ ဘာမွ မဟုတ္ဘူး ဆိုတာ လုပ္ျကည့္ရင္ သိပါလိမ့္မယ္။

------

ပရိုဂရမ္ကို ေလ့လာဖို့ ဆယ္နွစ္ အခ်ိန္ေပးပါ။


သုေတသန ပညာရွင္ေတြျဖစ္တဲ့ (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) တို့ကို ျကည့္ပါ။ သူတို့ေတြ သူတို့ရဲ့ ကိုယ္ပိုင္ ပညာရပ္ေတြကို က်ြမ္းက်င္ဖို့ ဆယ္နွစ္ အခ်ိန္ယူခဲ့ျကရပါတယ္။ ခ်က္စ္ ကစားတာ၊ အနုပညာ ဖန္တီးတာ၊ ေျကးနန္း ပို့ေဆာင္တဲ့ပညာ၊ ပန္းခ်ီဆြဲတာ၊ စနဿဒယားတီးတာ၊ ေရကူးတာ၊ တင္းနစ္ ကစားတာ၊ ဦးေနွာက္နဲ့ အာရံုေျကာ ပညာအတြက္ သုေတသန လုပ္တာေတြဟာ တကယ့္ကို အခ်ိန္ေပးခဲ့ရပါတယ္။

အဓိက ေအာင္ျမင္ဖို့ဟာ တစ္မ်ိုးတည္းကို ပဲ ထပ္ခါထပ္ခါ လုပ္ရံုနဲ့ လဲမရပါဘူး။ ကိုယ့္အစြမ္းအစ ထက္ပိုမိုတဲ့ အရာကို အျမဲပဲ ေလ့လာလုပ္ေဆာင္ ျကည့္ေနဖို့  ျဖစ္ပါတယ္။ တျဖည္းျဖည္းနဲ့ ပိုပိုသာလာေအာင္ အမွားကင္းလာေအာင္ ျပုလုပ္နိုင္ဖို့ကို သာလ်ွင္ ထပ္ခါထပ္ခါ လုပ္ေဆာင္ရမွာ ျဖစ္ပါတယ္။

ျဖတ္လမ္းဆိုတာလည္း မရွိပါဘူး။ မိုးဇက္ဆိုတဲ့ အနုပညာ ပါရမီရွင္ဟာ အသက္ ၄ နွစ္ကတည္းက ေတးဂီတကို စလုပ္ခဲ့ေပမယ့္ ကမဿဘာ့အဆင့္အတန္းဝင္ျဖစ္ဖို့ ၁၃နွစ္ ျကာခဲ့ပါတယ္။

Beatles ဟာလည္း ၁၉၅၇ ကတည္းက ကလပ္ေတြမွာ စတင္တီးဆိုေဖ်ာှေျဖခဲ့ေပမယ့္ တကယ္တမ္း ေအာင္ျမင္ခဲ့တာ ၁၀ နွစ္ျကာျပီး ၁၉၆၇ ခုနွစ္မွ ျဖစ္ပါတယ္။

အထက္ပါ အနုပညာရွင္ေတြ အားလံုး အသက္ ၅နွစ္ေလာက္ကတည္းက စတင္ေလ့လာခဲ့ပါတယ္။
အသက္ ၅ နွစ္သားတုန္းက ေလ့က်င့္မွုဟာ တစ္ပတ္ကို ၂နာရီ ၃ နာရီ ဝန္းက်င္ေလာက္ရွိပါတယ္။
အသက္ ၈ နွစ္ေလာက္မွာ ပိုမို စြမ္းေဆာင္လာနိုင္ျပီး တစ္ပတ္ကို ၆ နာရီ ၊ အသက္ ၁၂ နွစ္မွာ တစ္ပတ္ ၈ နာရီ၊ အသက္ ၁၆ နွစ္မွာ ၁၄ နာရီ စသျဖင့္ေလ့လာခဲ့ျပီး အသက္ ၂၀ မွာ တစ္ပတ္ကို နာရီ ၃၀ မ်ွ ရွိပါတယ္။

အသက္၂၀ ေရာက္ေနတဲ့ အခ်ိန္မွာ ေလ့က်င့္ခဲ့တဲ့ အခ်ိန္ေတြကို ေပာင္းျကည့္ရင္ နာရီ ၁၀၀၀၀ ေလာက္ ရွိေနပါတယ္။ အျခား ပံုမွန္ေတာှသူေတြဟာ နာရီ ၈၀၀၀ ေလာက္ပါ။ သူတို့ကို သင္ျပေပးသူေတြဟာေတာ့ နာရီ ၄၀၀၀ ေလာက္ပဲ ရွိပါလိမ့္မယ္။

ဒါေျကာင့္ အတိအက်ေျပာမယ္ဆိုရင္ေတာ့ ၁၀ နွစ္ဆိုတာထက္ နာရီ ၁၀၀၀၀ ေလာက္ ေလ့က်င့္ဖို့ လိုတယ္ဆိုတာပါဘဲ။

ဆာမ်ူရယ္ ဂ်ြန္ဆင္ (1709-1784) က ဒီလို ေျပာခဲ့ပါတယ္  "ဘယ္ေနရာက ထူးခ်ြန္တဲ့သူမဆို ေအာင္ျမင္ဖို့ အတြက္ ဘဝနဲ့ ရင္းျပီး ျကိုးစားလာျကရတာပဲ၊ ေဈးေပါေပါနဲ့ ဝယ္လို့ရတဲ့ဟာ မဟုတ္ဘူး ဆိုတာပါပဲ။"

Chaucer (1340-1400) က ဒီလို ညဉ္းတြားဖူးပါတယ္ ... ဘဝဆိုတာ တိုသေလာက္ တစ္ခုခု က်ြမ္းက်င္ေအာင္ လုပ္ဖို့က ေတာှေတာှျကာတယ္။

Hippocrates (c. 400BC) ကေတာ့ ဒီလိုမ်ိုး ေျပာဖူးပါတယ္။ ဘဝဟာ သိပ္တိုတယ္ ... ျကိုးစားမွုက ျကာရွည္ရတယ္၊ အခြင့္အေရးေတြက မျမင္ရသေလာက္ပဲ၊ စမ္းသပ္မွုေတြအတြက္ ေအာင္ျမင္မွုတစ္ခုရဖို့ဟာ အင္မတန္ခက္ခဲတယ္။

-----

ပရိုဂရမ္နဲ့ ပတ္သက္ျပီး ေအာင္ျမင္ဖို့အတြက္ လမ္းေျကာင္းကို ဒီလိုေျပာျပခ်င္ပါတယ္။
 

၁။ အေရးအျကီးဆံုးက တကယ္စိတ္ဝင္စားပါေစ၊ ကိ္ုယ္ဘာေရးလိုက္ေရးလိုက္ ေပ်ာှရြင္မွုရွိပါေစ။ တကယ္ေပ်ာှရြင္မွုရွိမွ ဆယ္နွစ္လုပ္ကိုင္နိုင္သြားဖို့ အင္အားေတြရွိမွာ ျဖစ္ပါတယ္။

၂။ အျခား ပရိုဂရမ္မာေတြနဲ့ စကားေျပာျဖစ္ေအာင္ ျကိုးစားပါ။ အျခားသူေတြေရးထားတဲ့ ပရိုဂရမ္ေတြကို ဖတ္ျဖစ္ေအာင္ျကိုးစားပါ။ ဒါဟာ စာအုပ္ေတြ ဖတ္တာထက္၊ သင္တန္းေတြ တက္တာထက္ ပိုအေရးျကီး ပါတယ္။

၃။ ပရိုဂရမ္ဆိုတာ ေရးျကည့္ရင္းနဲ့ မွ ပိုတတ္တဲ့ အမ်ိုးပါ။ အေသးအမြွား ပရိုဂရမ္ေလးေတြေတာင္ ဖန္ရွင္ အျပည့္အစံုနဲ့ ျဖစ္ေအာင္ေရးပါ။ အျခားသူေတြရဲ့ သံုးသပ္မွုေတြကတဆင့္ ပိုေကာင္းေအာင္လုပ္ျကည့္ပါ။ အမွားေတြကို ျပင္ျဖစ္ေအာင္ ျပင္ျကည့္ပါ။

၄။ အကယ္၍ သင္ဟာ တကဿကသိုလ္ကို လည္း ၄ နွစ္ေလာက္တက္ခ်င္ေသးတယ္လည္းတက္လို့ရပါတယ္။ ဒါဟာ သင့္အတြက္ ပိုျပီး နက္နဲတဲ့ အေတြ့အျကံုတစ္ခုကို ရေကာင္းရပါလိမ့္မယ္။ မတက္ဘူးဆိုရင္လည္း အလုပ္ကေနလဲ ရနိုင္ပါတယ္။ တကဿကသိုလ္ပဲျဖစ္ျဖစ္ အလုပ္ပဲျဖစ္ျဖစ္ စာအုပ္ကေန ေလ့လာရံုဆိုရင္ေတာ့ မလံုေလာက္ပါဘူး။ ကြန္ပ်ူတာ တကဿကသိုလ္ ပညာေရးဟာ ဘယ္သူ့ကိုမွ ပညာရွင္အဆင့္ျဖစ္ေအာင္ ျပုလုပ္မေပးနိုင္ပါဘူး။ ပန္းခ်ီပညာ ဆိုရင္ စုတ္တံ သံုးပံုသံုးနည္းနဲ့ ေဆးစပ္ပံု အေျခခံကို ပဲ သင္ေပးနိုင္မွာ ျဖစ္ပါတယ္။

၅။ အျခား ပရိုဂရမ္မာေတြပါတဲ့ ပေရာဂ်က္တစ္ခုခုကို ဝင္လုပ္ပါ။ တခ်ို့ ပေရာဂ်က္ေတြမွာ ထိပ္သီးျဖစ္ေအာင္ျကိုးစားပါ။ တခ်ို့ပေရာဂ်က္မွာ ေအာက္ဆံုးကလဲ ျဖစ္ရင္ျဖစ္ေနပါေစ။ သင္ထိပ္ဆံုး ေရာက္ေနစဉ္မွာ သင့္စြမ္းရည္ကို အေကာင္းဆံုးအသံုးခ်ပါ။ အျခားသူေတြကိုလည္း သင့္ ေတြးေခါှမွုေတြကို ထုတ္ေဖာှျပသပါ။ သင္ေအာက္ဆံုးမွာ ေရာက္ေနတဲ့ ပေရာဂ်က္ဆိုရင္လည္း ေရွ့က ဆရာ့ဆရာေတြ လုပ္တာကို ေလ့လာပါ၊ သူတို့ လုပ္တာ မလုပ္တာေတြကိုလည္း ဆင္ျခင္သံုးသပ္ပါ။

၆။ အျခားသူေတြရဲ့ ပေရာဂ်က္ေတြကို ေလ့လာပါ။ နားလည္ေအာင္လုပ္ထားပါ။ အကယ္၍ အေရးေပါှအေျခအေန ျပင္ဖို့လိုတာေတြရွိရင္ နဂို ေရးတဲ့သူေတြမရွိရင္ သင္ဝင္ေရးနိုင္ေအာင္ လုပ္ထားပါ။
ေနာက္ျပီး ေနာက္လူ အတြက္လည္း အလြယ္ဆံုးျဖစ္ေအာင္ ပရိုဂရမ္ ဒီဇိုင္း အေကာင္းဆံုးျဖစ္ေအာင္ ျပုလုပ္ထားပါ။

၇။ ပရိုဂရမ္ ဘာသာစကား အနည္းဆံုး ဒါဇင္ဝက္ ေလာက္ေတာ့ ေလ့လာပါ။ class ရဲ့ သေဘာသဘာဝေတြ ပါဝင္တဲ့ ဂ်ာဗား တို့ C++ တို့ေတာ့ တစ္ခု အနည္းဆံုးပါဝင္ပါေစ၊ ေနာက္ျပီး ဖန္ရွင္ သေဘာသဘာဝေတြပါဝင္တဲ့ Lisp တို့ ML တို့လိုမ်ိုးကို လည္း တစ္ခုပါဝင္ပါေစ၊ Template သေဘာတရားေတြပါဝင္တဲ့ Prolog တို့ C++ Template လိုဟာမ်ိုးတစ္ခု၊ coroutines လို့ေခါှတဲ့ အပိုင္းေလးေတြခြဲျပီး အလုပ္လုပ္လို့ရတဲ Icon တို့ Scheme လိုဟာမ်ိုးတစ္ခု၊ Sisal လို့ေခါှတဲ့ Parallel အသံုးျပု လို့ရတဲ့ သေဘာထားေတြပါတာမ်ိုးေတြကို ေလ့လာသင့္ပါတယ္။

၈။ ေနာက္ျပီး ပရိုဂရမ္ အခ်က္အလက္တစ္ခု အလုပ္လုပ္ခ်ိန္မွာ အခ်ိန္ ဘယ္ေလာက္ျကာတာတို့၊ memory ေပါှက စာလံုးတစ္လံုးဖတ္ဖို့ ဘယ္ေလာက္ျကာတာတို့၊ cache ပါရင္ ဘယ္ေလာက္ျကာတယ္။ မပါရင္ ဘယ္ေလာက္ျကာတယ္တို့၊ ဟာ့ဒစ္ကေန စာလံုးေတြ ဆက္တိုက္ဖတ္ရင္ ဘယ္ေလာက္ျကာတယ္တို့၊ ဟာ့ဒစ္ရဲ့ ဖတ္ေနတဲ့ ေနရာမဟုတ္ပဲ အျခားေနရာက ဖိုင္ကိုသြားရွာရင္ ဘယ္ေလာက္ျကာတယ္ စသျဖင့္ကို သိထားသင့္ပါတယ္။ ဒါေတြသိထားရင္ အျခား ပရိုဂရမ္ေတြထက္ အလုပ္လုပ္ပံုျခင္း တူရင္ေတာင္မွ ပိုေကာင္းတဲ့ ပိုျမန္တဲ့ ပရိုဂရမ္ကို ျပုလုပ္နိုင္မွာ ျဖစ္ပါတယ္။

၉။ တတ္နိုင္ရင္ ကြန္ပ်ူတာ ဘာသာစကားေတြရဲ့ စံသတ္မွတ္ျခင္းအဖြဲ့ေတြမွာပါ ပါဝင္နိုင္ေအာင္ျကိုးစားပါ။ ANSI C++ ေကာှမတီလဲျဖစ္ရင္ျဖစ္မယ္၊ ကိုယ္ပိုင္ ကုတ္ေရးပံုေရးနည္း စတိုင္ ညွိနွိုင္းပြဲလဲျဖစ္ရင္ျဖစ္မယ္။ ကုတ္တစ္ေျကာင္းေရွ့မွာ စာလံုး အလြတ္ ဘယ္နွခု စသျဖင့္ေပါ့။ ဒါေတြလဲ စနစ္တက်ျဖစ္ေအာင္ လုပ္ျကပါတယ္။ အဲဒီမွာ ပါဝင္ျခင္းအားျဖင့္ ပရိုဂရမ္ရဲ့ သေဘာတရားေတြကို ေရးပံုေရးနည္း စတိုင္စတာေတြကို ပိုမို နားလည္လာမွာပါ။ ဘယ္ပရိုဂရမ္မွာေတာ့ျဖင့္ ဘာကေကာင္းတယ္။ ဘယ္သူေတြက ဘယ္လို သေဘာက်တယ္ ဆိုတာေတြလည္း အေရးပါပါတယ္။
အဲ စတန္းဒတ္ လုပ္ဖို့ကေတာ့ မွန္မွန္ကန္ကန္နဲ့ သဘာဝ က်တဲ့ နည္းလမ္းကို ျမန္ျမန္ဆံုးျဖတ္နိုင္ပါေစ။ (ျကာသြားရင္ လူလက္ခံဖို့ခက္မွာစိုးလို့ျဖစ္မယ္။)

အဲဒါေတြ အကုန္လံုးကို ေခါင္းထဲထည့္ထားပါ။ စာအုပ္ကေန ဘယ္ေလာက္ေလ့လာနိုင္လဲ ဆိုတာ လက္ေတြ့သိျမင္လာပါလိမ့္မယ္။

က်ေနာှ ကိ္ုယ္တိုင္ စာအုပ္နဲ့ေလ့လာခဲ့ဖူးတယ္။ က်ေနာှ (ေနာဗစ္) ပထမ သားဦး ေမြးတဲ့ အခ်ိန္မွာ How To လို စာအုပ္ေတြ အကုန္ဖတ္ခဲ့ျပီးျပီ။ ဒါေပမယ့္ ဘာမွ မဟုတ္ေသးေျကာင္း ကိုယ္ကိုယ္ကို သိေနပါတယ္။ ေနာက္ ၂နွစ္ခြဲေလာက္ျကာေတာ့ အဲဒီမွာ ျပန္စဉ္းစားျကည့္တယ္။ စာအုပ္ေတြ ျပန္ဖတ္သင့္သလားလို့ ... ေနာက္ဆံုး အဲဒီစာအုပ္ေတြ ျပန္ဖတ္မယ့္အစား ပညာရွင္ေတြ ေရးေနတာေတြကို ေလ့လာတာ၊ ပိုအသံုးဝင္မယ္လို့ ဆံုးျဖတ္ခဲ့တယ္။

Fred Brooks ဆိုတဲ့ သူတစ္ေယာက္ ေဆာ့ဝဲ ဒီဇိ္ုင္း ပညာရွင္ေတြ ေမြးထုတ္ခဲ့ပံုကေတာ့ ဒီလိုပါ။

၁။ ပံုမွန္ စနစ္က်က် ဒီဇိုင္း ပညာရွင္ေတြကို အရင္ဆံုးရွာတယ္။
၂။ သူတို့အတြက္ တိုးတက္ေအာင္ျမင္ဖို ့အတြက္ career လမ္းခ်ေပးတယ္။
၃။ ဒီဇိ္ုင္းသမားေတြ အခ်င္းခ်င္း ေတြ့ဆံု၊ နည္းပညာ ဖလွယ္နိုင္ေအာင္ လုပ္ေပးတယ္။

ဒါဟာ ဘာကိုေျပာသလဲ ဆိုရင္ တခ်ို့သူအေတာှမ်ားမ်ားမွာ အရည္အခ်င္းတစ္ခု ရွိေနျပီးသားပဲ။
အလုပ္က လိုက္ေလ်ွာညီေထြ ျဖစ္မယ္ဆိုရင္ ေအာင္ျမင္တဲ့ ပရိုဂရမ္မာေတြ ျဖစ္လာမွာပဲ လို့ ေကာက္ခ်က္ခ်လို့ရပါတယ္။

---

ဒါေျကာင့္ လက္ရွိ ဂ်ာဗားစာအုပ္ကို သင္ဝယ္မယ္ စဉ္းစားေနတယ္ဆိုရင္ သြားသာ ဝယ္လိုက္ပါ။
သူ့အတိုင္းအတာနဲ့ သူေတာ့ အသံုးက်ပါလိမ့္မယ္။ ဒါေပမယ့္ အဲဒါနဲ့ ၂၄နာရီ အတြင္း၊ ရက္ အနည္းငယ္ အတြင္း၊ သို့ လအနည္းငယ္ အတြင္းမွာေတာ့ သင့္ ဘဝကို ေျပာင္းလဲနိုင္ဦးမွာေတာ့ မဟုတ္ေသးပါဘူး။

ပီတာ ေနာဗစ္ http://norvig.com
---
Original Article : http://norvig.com/21-days.html

တခ်ို့ေနရာေတြမွာ ဆီေလ်ွာှသလို ျပန္ထားျခင္း ျဖစ္ပါတယ္။ မူရင္းဆိုလိုရင္းနဲ့ ကြဲျပားေကာင္း ကြဲျပားပါမည္။ :-)
---

I am learning programming 11 years now, but I am still cant do half of it :P
Well, I am not him :P


Anyway, Cheers,
Mark

#Memo : Telneting into Router with Python (using telnetlib)

% python
>>>
>>> # importing telnetlib
>>> import telnetlib
>>>
>>> # telnet into 192.168.1.1
>>> t=telnetlib.Telnet("192.168.1.1")
>>>
>>> # wait until Username is appear
>>> t.read_until("Username: ")
>>>
>>> # send the username
>>> t.write("<username>\n")
>>>
>>> # wait until Password is appear
>>> t.read_until("Password: ")
>>>
>>> # send the password
>>> t.write("<password>\n")
>>>
>>> # wait until > is appear
>>> t.read_until(">")
>>>
>>> # send the enable password
>>> t.write("<enable>\n")
>>>
>>> # wait till # is appear
>>> t.read_until("#")
>>>
>>> # Now you are in Global Configuration Mode
>>>

Cheers,
Soe Min

#Memo - FastCGI

က်ေနာ္တို့ unix က shell ထဲမွာ script ကို run ရင္

#!/bin/sh
#!/usr/bin/perl

စသျဖင့္ ထိပ္ဆံုးလိုင္းမွာ ေရးေလ့ေရးထရွိပါတယ္။

windows မွာဆိုရင္ script run ခ်င္ရင္ wscript.exe script.vs စသျဖင့္ run တာနဲ့ ဆင္မယ္ထင္ပါတယ္။

အဲသလို run ရင္ wscript.exe, sh, perl စတဲ့ main program ကို အရင္ load လုပ္ရပါတယ္။

web site အေနနဲ့ ဆိုရင္ user ရဲ့ request တိုင္းမွာ အဲလိုလုပ္ေနရရင္ performance ကို ထိခိုက္ပါတယ္။

အဲဒါကို ေျဖရွင္းဖို့ တစ္နည္းကေတာ့ apache ရဲ့ modules အေနနဲ့ လုပ္ထားတဲ့ mod_cgi, mod_perl, mod_python စတာေတြသံုးပါတယ္။ တစ္ခါ ပဲ load လုပ္ထားတဲ့ သေဘာေပါ့။

ေနာက္တစ္နည္းကေတာ့ FastCGI, fcgid စတာေတြနဲ့ cgi, php, python, ruby ေတြကို memory ေပါ္ကို တစ္ခါဆြဲတင္ျပီး ထပ္ခါထပ္ခါ memory ေပါ္ကေနပဲ သံုးတဲ့ နည္းပါ။

ဥပမာ - ေဟာ့ဒီ perl script ဟာ FCGI ကို သံုးထားျပီး page ကို refresh လုပ္တိုင္း
I have run 1 times. I have run 2 times. I have run 3 times. စသျဖင့္ တိုးတိုးသြားမွာ ျဖစ္ပါတယ္။

#!/usr/bin/perl

# တစ္ခါပဲ run

$counter=0;

# ထပ္ခါတစ္လဲလဲ run

use FCGI;
while ( FCGI::accept() >= 0 ) {
$counter++;
print "Content-type:text/html\n\n";
print "I have run $counter times.";
}

cache နဲ့ မတူပါဘူး။ cache က အေျကာင္းအရာ တစ္ခု တည္းကို ပဲ ျပန္ output ထုတ္ေပးမွျဖစ္ျပီး ဒီဟာကေတာ့ program run တဲ့ speed ကို ျမန္ေအာင္ memory ေပါ္တင္ထားတဲ့ နည္းလို့ေျပာလို့ရမယ္ထင္ပါတယ္။

memory ေပါ္ကဟာ ကို ေဟာ့ဒီလို ေခါ္ျကည့္လိုက္ရင္၊ ေဟာ့ဒီလိုမ်ိုး memory ေပါ္မွာ ရွိေနတာကို ေတြ့နိုင္မွာပါ။
PID  PPID  C STIME TTY          TIME CMD
12419 21017 0 06:13 ? 00:00:00 /usr/bin/perl test.fcgi

FCGI ကို သံုးဖို့အတြက္ mod_fcgi လိုအပ္ပါမယ္။
.htaccess မွာျဖစ္ျဖစ္ httpd.conf / apache2.conf စတာေတြမွာ ေဟာ့ဒီလို့ထည့္ေပးရပါလိမ့္မယ္။
AddHandler fastcgi-script .fcgi
Options +FollowSymLinks +ExecCGI

.fcgi ဖိုင္ကို executable access ေပးရပါလိမ့္မယ္။
chmod +x test.fcgi

Cheers,
Soe Min

mod_python.psp

Asp တို့ Php တို့လို <% %>, <%= %> ဒီဇိုင္းမ်ိုးနဲ့ ေရးခ်င္ရင္

httpd.conf မွာ ေဟာ့ဒီလို ေရးေပးနိုင္ပါတယ္။
<Directory "C:/xampplite/htdocs">
AddHandler mod_python .psp
PythonHandler mod_python.psp
</Directory>

test.psp မွာ ဒီလိုေရးလို့ရပါတယ္။
<%= 'Hello World' %>

လူအေတာ္မ်ားမ်ားျကိုက္ေကာင္းျကိုက္ပါလိမ့္မယ္။ က်ေနာ္ ကေတာ့ သိပ္သေဘာမက်ပါဘူး။
အသံုးမေတာ္ရင္ ကိုယ့္ဆိုဒ္ထဲကို code ေတြ inject လုပ္ျပီး ဆာဗာတစ္ခုလံုး ျကြသြားနိုင္ပါတယ္။

Rgds,
Soe Min

mod_python.publisher

httpd.conf ထဲမွာ PythonHandler test လို့ေရးရင္ test.py ဖိုင္တစ္ခုပဲ run လို့ရပါမယ္။

mod_python.publisher သံုးရင္ *.py ကို run ခိုင္းလို့ရပါတယ္။

<Directory "C:/xampplite/htdocs/">
AddHandler mod_python .py
PythonHandler mod_python.publisher
</Directory>

test.py (ပိုသန့္သြားပါတယ္။ က်ေနာ္ ဒီနည္းကို အျကိုက္ဆံုးပါ)
def index():
return "Hello World!"

ဒါလည္း Hello World! ပဲေပါ္ရပါမယ္။

Cheers,
Soe Min

mod_python with xampp

mod_python ဟာ python ကို web application အေနနဲ့ သံုးလို့ရေအာင္ apache နဲ့ link လုပ္ေပးတဲ့ module ျဖစ္ပါတယ္။

I am using following versions.

xampplite 1.7.1, python 2.5, mod_python 3.3.1

xampplite-win32-1.7.1.exe

python-2.5.4.msi

mod_python-3.3.1.win32-py2.5-Apache2.2.exe

mod_python install လုပ္ရင္ mod_python.so ကို xampp/apache/modules ေအာက္မွာ ျဖန့္ေပးေအာင္ ေရြးေပးလို့ရပါတယ္။ ကိ္ုယ့္ဘာသာကိုယ္ ျဖန့္ရင္လည္းရပါတယ္။

xampp/apache/conf/httpd.conf မွာ ဒီဟာထဲ့
LoadModule python_module modules/mod_python.so

Directory တစ္ခုခုမွာ AddHandler ျဖည့္ေပး ရင္
<Directory "C:/xampplite/htdocs"> 
AddHandler mod_python .py
PythonHandler test
</Directory>

test.py
from mod_python import apache

def handler(req):
req.write("Hello World!")
return apache.OK
ကို run ရင္

Hello World! လို့လာေပါ္ပါမယ္။

Cheers,
Soe Min

SWIG (Simplified Wrapper and Interface Generator)

SWIG ဆိုတာ C/C++ နဲ့ ရးေထားတဲ့ ကုတ်တွေကို
Tcl/Tk、Perl、Python、Ruby、PHP、Lua、
Java、C#、Scheme、Ocaml
စတာတွေကနေပြီး ခ်ါေသံုးလို့ရအာေင် လုပ်ပးေတဲ့ wrapper ဖြဈပါတယ်။

ဥပမာ wxWidgets လို့ခ်ါေတဲ့ C++ နဲ့ရးေထားတဲ့ Cross-Platform UI library ကို python ကနေျခိတ်သံုးလို့ရအာေင် လုပ်ထားတဲ့ wxPython ဟာ swig ကိုသံုးပြီး compile လုပ်ထားတာဖြဈပါတယ်။

http://www.swig.org/
http://en.wikipedia.org/wiki/SWIG
http://ja.wikipedia.org/wiki/SWIG

F# (.NET Platform based Functional Programming)

F# (.NET Platform based Functional Programming)

Language Specifications

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec2.aspx

Seems nice, since I like the Languages. :-)

Crawling the blog html content with python (direct HTML read method, not through RSS)

Crawling the blog html content with python (direct HTML read method, not through RSS)

import codecs,re,urllib2

f = urllib2.urlopen('http://www.soemin.net/2009/04/font-encoding-detection-for-zawgyi-and.html')

htm=re.sub("&#(\d+);",lambda x:unichr(int(x.group(1))),f.read().decode("utf8"))

txt=re.findall('<div[^>]+post-body[^>]+>\s*(.*?)\s*<div[^>]+clear:\s*both[^>]+></div>',htm,re.DOTALL)[0]

codecs.open("crawl.txt", 'w+',"utf8").write(txt)

#its also convert #&4096; to က

results will be like this

ေဇာ္ဂ်ီနဲ့ ယူနီကုတ္ ၅.၁ ခြဲျခားျခင္း (Font Encoding Detection for Zawgyi and Unicode 5.1)

.....

အဓိကအားျဖင့္ကေတာ့
၁။ သေဝထိုး၊ ရရစ္၊ ရပင္းစတာေတြ နဲ့

....

.....

Cheers,

Cheers,
Soe Min

Untitled!

Yay! Almost success Zawgyi to Unicode 5.1 and Unicode 5.1 to Zawgyi Converter in Pure C with 60MB+/s

Zawgyi Normalization Program

normalize.7z

- extract and run normalize.exe test.txt 6 in command line (Command Prompt).
(6 is zawgyi for this exe file)
- Input file must be UTF8 encoded text file
- outfile will be test.out

Able to fix the following things

ေမာင္ ္ ္ ္ ္ က ု       ိ  က ိ      ု ၏၏၏၏၏၏၏။။။။။။။။။။။။။။။။။။။
ျမျကျခ ျကျကိ ျကြ ျကြိ ျခ ျခြ ျခိ ျခြိ ျခ ျခြ ျခိ ျခြီ

and result will be like this.

ေမာင္္ ကို ကို၏။
ျမျကျချကျကိျကြျကြိျချခြျခိျခြိျချခြျခိျခြီ

Here is my license

- Cannot be used in Commercial related programs, applications, anything , related with commercial things
- Must be credit to me, if you use and put your data or program online.

Cheers,
Soe Min

Burglish Update v1.9.2

updates for unicode 5.1 direct input layout (typewriter input)

In Unicode 5.1, သေဝထိုး and ရရစ္ need to store after consonent(က-အ), like this က, ေက

But from user side, most people want to type ဩေဝထိုး first.

so, i reorder the input sequence after you type in burglish test area.

http://burglish.googlepages.com/testarea.htm
or
http://burglish.my-mm.org/latest/trunk/web/testarea.htm

when you type ေက, it will automatically fix က, and ေျက to က , if you have proper unicode 5.1 font(Myanmar3,Padauk,Parabaik) and render engine (eg. latest uniscribe), you will not see like this ျက , you will instead see, ျက

for ေျမာင္, you need to type ေမ ာ ျင ္. it will properly convert to unicode 5.1 compatible one မ ာ ေျင ္.

and few others update.

Zawgyi's some useful shortcuts like,

Shift Q -်ွ
Shift W -်ြွ
Shift E - ်ြ
Shift K -ွု

can also type in Unicode 5.1 (Myanmar3) through Burglish Test Engine

Cheers,
Soe Min

-ize, -ise

acclimatize -ise
authorize ,-ise
amortization , -ise
agonizing,-ise
aggrandizement -ise

>>> r="(\w+iz\w*)\s*,?\s*\-(is\w*)"
>>> [re.sub(r,"\\1",INPUT),re.sub(r,lambda x:x.group(1).replace("iz","is"),INPUT]

[acclimatize,acclimatise]
[authorize,authorise]
[amortization,amortisation]
[agonizing,agonising]
[aggrandizement,aggrandisement]

I am writing dictionary parser from HTML files lately, for few weeks.

Cheers,
Soe Min

Regular Verb မွ Simple Past ေျပာင္းပံုေျပာင္းနည္း (Python)

Original Article here.
http://web2.uvcs.uvic.ca/elc/StudyZone/330/grammar/pasted.htm (thx to Ma TTA)

rule 1
live, date တို့လို e နဲ့ဆံုးတာေတြကို "d" ပဲေပါင္းေပး lived, dated
>>> if word[-1]=="e":word+"d"

rule 2
try, cry တို့လို y နဲ့ဆံုးတာေတြကို ied ေျပာင္း tried, cried
>>> if word[-1]=="y":word[:-1]+"ied"

rule 3 (နဲနဲရွုပ္တယ္)
tap, commit တို့လို့စာလံုးေတြကို က်ေတာ့ ေနာက္ဆံုးစာလံုးကို ၂လံုးလုပ္
ေနာက္ဆံုးကေန သံုးလံုးမွာ ဗ်ည္း၊ သရ၊ ဗ်ည္းဆိုျပီး သြားေနရင္ rule 3 နဲ့ ညိတယ္လို့ ယူဆပါတယ္။
>>> if word[-3] not in "aeiuo" and word[-2] in "aeiuo" and word[-1] not in "aeiuowy": word+word[-1]+"ed"

rule 4
အထက္ကဟာေတြ နဲ့မညိတာေတြ အားလံုးကို ed ေပါင္းေပး
>>> word+"ed"

cheers,
Soe Min

Search POS (Part of Speech) using NLTK

% python
>>> import nltk
>>> nltk.pos_tag(["work"])
[('work', 'NN')]
Oh! its say work as NOUN!

Yeah, single verb can be use as noun. we need to pass the the whole sentence to check it

we have english sample like "he works for a company"
>>> nltk.pos_tag("he works for a company".split())
[('he', 'PRP'), ('works', 'VBZ'), ('for', 'IN'), ('a', 'DT'), ('company', 'NN')]

wow :-) its show "works" as VBZ, it is verb, great. huh!

so search, "work" in nltk results again. and can get very accurate POS :-)

work = VBZ for that case :-)

#but unfortunately its take time around 100ms to 1s, its slow for me, but no way. have to use that.

cheers,
soe min

Get a English Word under mouse cursor with Javascript

Get a English Word under mouse cursor with Javascript

event.target.innerHTML.substring(event.target.innerHTML.lastIndexOf(" ",event.rangeOffset),event.target.innerHTML.indexOf(" ",event.rangeOffset));

+

Mouse Cursor in Pixel by event.clientX and event.clientY.

can make popup english to burmese dictionary when you point to english words.

just an idea.

:-)

က်ေနာ္ဖတ္ေသာ အျခား ဘေလာ့ / ဆိုဒ္မ်ား