Design Resources

UI Design Resource ဆိုပြီးတော့ Post ရေးခဲ့ဖူးပါတယ်။ အခုတလော သဘောကျတဲ့ Design နဲ့ ပတ်သက်တဲ့ resources လေးတွေကို ပြောပြချင်ပါတယ်။

premiumpixels

premiumpixels.com ကို Smashing Magazine က ညွှန်းလို့ တွေ့ခဲ့ပါတယ်။ 365psd.com လောက် အမြောက်အများမရှိပေမယ့် လှပတဲ့ UI design PSD တွေကို အခမဲ့ လွတ်လပ်စွာ သုံးခွင့်ပေးထားပါတယ်။ License နဲ့ ပတ်သက်ပြီးတော့

All resources made available on Premium Pixels, including but not limited to, icons, images, brushes, shapes, layer styles, layered PSD’s, patterns, textures, web elements and themes are free for use in both personal and commercial projects.

လို့ ဆိုထားတဲ့အတွက်ကြောင့် ကိုယ့်ရဲ့ commercial projects တွေမှာလည်း အခမဲ့ ထည့်သုံးခွင့်ရှိပါတယ်။


Continue reading “Design Resources”

Making Todolist with node.js and mongo Part VI

ကဲ … အခု ကျွန်တော်တို့ task list အတွက် mongodb ပြင်ဆင်ပြီးပြီ။ အခုတော့ mongodb အတွက် model တစ်ခု ဆောက်ပါမယ်။

data-provider.js

var Db = require('mongodb').Db,
ObjectID = require('mongodb').BSONNative;
Server = require('mongodb').Server,
Connection = require(‘mongodb’).Connection,
sys= require('sys');

DataProvider = function(host,port){
  this.db = new Db('tatoo', new Server(host, port, {}), {native_parser:true});
  this.db.open(function(){});
};

exports.DataProvider= DataProvider;

အခု code လေးက ကျွန်တော်တို့တွေ ပထမဆုံး DataProvider module လေး စလိုက်တာပါ။ DB တစ်ခု ဆောက်တယ်။

DataProvider.prototype.getCollection = function(callback){
  this.db.collection('tasks',function(error,task_collection){
     if(error) callback(error);
     else callback(null,task_collection);
  });
};

ဆိုတာက ကျွန်တော်တို့တွေ collection ကို ခေါ်ဖို့ ဖန်တီးလိုက်တာပါ။ ကဲ အခု ကျွန်တော်တို့တွေ tasks တွေ အကုန်လုံးကို ထုတ်ကြည့်ဖို့ အတွက် ရေးပါမယ်။

DataProvider.prototype.findByUser=function(user,callback){
    this.getCollection(function(error,task_collection){
        if(error) callback(error);
        else {
            task_collection.findOne({user:user},function(error,result){
                if( error ) callback(error)
                else callback(null, result)
            });
        }
    });
};

taskcollection ကို user name နဲ့ ရှာလိုက်တယ်။ ပြီးတော့ result ကို callback ပြန်ပို့လိုက်တယ်။

အခု index.js တစ်ခုဖန်တီးပြီး ကျွန်တော်တို့ ဖန်တီးထားတဲ့ model ကို လှမ်းခေါ်သုံးပါမယ်။ ကျွန်တော်တို့ လိုအပ်တာတွေက express , mongodb နဲ့ jqtpl template engine ပါ။

ဒါကြောင့် အဲဒီ module ၃ ခု ကို အရင် သွင်းထားဖို့တော့လိုပါတယ်။

$npm install express
$npm install mongodb
$npm install jqtpl

သွင်းပြီးရင် template ကို views folder အောက်မှာ ထားပါမယ်။ views folder အရင်တည်ဆောက်ပါ။ ပြီးရင် layout.html နဲ့ index.html file ၂ ခုကို ဖန်တီးထားပါ။

layout.html

<!DOCTYPE HTML>
<html>
<head>
<title>${title}</title>
<link rel="stylesheet" href="/public/style.css" type="text/css" media="screen" title="main css" charset="utf-8">
<head>
<body>
{{html body}}
</body>
</html>

index.html

<h1>Tatoo List</h1>
<ul>
{{each list}}


<li>${$value.desc}
{{if $value.done == 0}}
<a href="/done/${$value.id}">Done</a>
{{else $value.done==1}}
[done]
{{/if}}

<a href="/del/${$value.id}">Del</a>
</li>

{{/each}}
<li>
<form action="/add" method="post">
<input type="text" name="task" placeholder="New Tasks">
<input type="submit" value="add">
</form>
</li>
</ul>

ကျွန်တော်က template engine ကို jqtpl ကို အသုံးပြုထားပါတယ်။ ဘာလို့လည်းဆိုတော့ သူက နားလည်ဖို့ အလွယ်ဆုံးမို့ပါ။ jqtpl ကို သိချင်ရင်တော့ ဒီမှာ ဖတ်နိုင်ပါတယ်။ layout.html က အဓိက layout အပိုင်းပေါ့။ file ကို ခေါ်တာနဲ့ သူက အပေါ်က တဆင့် အနေနဲ့ ပါလာပါတယ်။ အဓိက main template ပေါ့။ index.html မှာတော့ ရလာတဲ့ results တွေကို each list ဆိုပြီး loop ပတ်ထားလိုက်တယ်။ done ကသာ 0 ဖြစ်ရင် done ကို နှိပ်လိုက်ရမယ်။ ၁ ဆိုရင် နှိပ်ခွင့်မပေးတော့ဘူး။ del နဲ့ done အတွက်က နောက်မှ စဉ်းစားပါမယ်။ ပြီးရင် index.js မှာ အောက်ကလို ရေးထားပါတယ်။

var express= require('express');
var jqtpl = require('jqtpl');

var sys=require('sys');
//var pub = __dirname + '/styles';
var app = express.createServer();
var DataProvider= require('./data-provider').DataProvider;
var taskProvider= new DataProvider('localhost', 27017);
var fs = require("fs");

var app = express.createServer();

app.configure(function(){
    app.set('view engine', "html");
    app.register('.html', require('jqtpl').express);
    app.set('views', __dirname + "/views");
    app.set('view options', { layout: true });

    app.use("/public",express.static(__dirname + '/public'));
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    app.use(express.bodyParser());
    app.use(app.router);

});

app.get('/', function(req, res){
    
    taskProvider.findByUser("saturngod",function(error, tasks){
        res.render('index.html',{title:"Tatoo List",list:tasks.todo});
    });
    
});

app.listen(3000);

code က တော့ ပုံမှန်ပါပဲ။ configure မှာ view engine မှာ html ကို သုံးပြီးတော့ jqtpl template ကို သုံးမယ်လို့ ကြေငြာထားပါတယ်။ views folder ကိုတော့ /views သုံးမယ်လို့ ပြောထားတယ်။ public folder ကတော့ နောက်ပြီး css ကို အသုံးပြုဖို့ အတွက်ပါ။

var taskProvider= new DataProvider('localhost', 27017);

နဲ့ init လုပ်ပြီးတော့

taskProvider.findByUser("saturngod",function(error, tasks){
});

နဲ့ ပြန်ရှာထားတာကို တွေ့နိုင်ပါတယ်။ ပြီးရင်တော့

node index.js

ကို run ကြည့်လိုက်ပါ။

Making Todolist with node.js and mongo Part V

ရှေ့ပိုင်းမှာတော့ value တွေ ထည့်တာ task အသစ်ထပ်ဖြည့်တာတွေကို ပြောပြီးပါပြီ။ အခု Mongodb ကိုပဲ ရှေ့ဆက်ရအောင်။

Update Value

အခု ကျွန်တော်တို့တွေ Task တစ်ခု done ဖြစ်သွားတဲ့ အခါမှာ done ကို 1 ပြောင်းပေးပါမယ်။ ဒီတော့ လက်ရှိ object ကို update လုပ်ရပါမယ်။

> db.tasks.update({user:'saturngod',"todo.id":1},{"$set":{"todo.$.done":1}})

ဆိုပြီး ရိုက်လိုက်ပါ။

todo.id ဆိုတာက todo အောက်က id field ကို ညွှန်းလိုက်တာပါ။ id က 1 ဖြစ်ရမယ်ဆိုပြီး ညွှန်းလိုက်တာပါ။

$set ကတော့ ပြန်ပြင်ဖို့ပေါ့။ todo.$.done ဆိုတာကတော့ ကျွန်တော်တို့ ရှာတွေ့ထားတဲ့ array number အောက်က done field ကို 1 လို့ ပြင်လိုက်တာပါ။
Continue reading “Making Todolist with node.js and mongo Part V”

Making Todolist with node.js and mongo Part IV

အခုဆိုရင်တော့ mongodb ကို နည်းနည်း သဘောပေါက်သွားလောက်ပါပြီ။ အခု project structure ကို ရှင်းပြပါမယ်။ Project က Task တွေကို add မယ်။ Task Done ဖြစ်သွားရင် မှတ်ထားမယ်။ မလိုအပ်တဲ့ task တွေကို ပြန်ဖျက်မယ်။ ဒီတော့ data ကို အောက်ပုံစံနဲ့ သိမ်းလိုက်ပါတယ်။

{"user" : "saturngod", "todo" : [
	{
		"id" : 1,
		"desc" : "hi",
		"done" : 0
	},
	{
		"id" : 2,
		"desc" : "hello",
		"done" : 0
	}
],
"lastid":2
 }

data တွေကို username ပေါ်မှာ မူတည်ပြီး သိမ်းလိုက်ပါတယ်။ todo ကို array နဲ့ သိမ်းပါမယ်။ ဖြစ်မပြီးကို သိဖို့ အတွက် done ကို 0 နဲ့ 1 သတ်မှတ်ပါမယ်။ နောက်ဆုံး သိမ်းထားတဲ့ id နံပတ်ကို သိအောင် lastid နဲ့ သိမ်းထားလိုက်ပါတယ်။ MySQL မှာ auto increment မပါတဲ့အတွက် အသစ်ဖြည့်တာ အခါမှာ id ကို ကိုယ့်ဘာသာ ကိုယ် တိုးဖို့အတွက် သိမ်းခဲ့တာပါ။

Install Mongodb

အရင်ဆုံး mongodb ကို ဒီကနေ http://www.mongodb.org/downloads download ချလိုက်ပါ။

အခု ကျွန်တော် အသုံးပြုမှာကတော့ 1.8.1 ပါ။ ၄ လပိုင်း ၆ ရက်နေ့ က ထွက်တဲ့ နောက်ဆုံး stable version ပေါ့။

tgz file ကို ဖြည်လိုက်တဲ့အခါမှာတော့ mongodb folder ထဲမှာ bin folder ကို တွေ့ပါမယ်။ ကျွန်တော် အခု ဖြည်လို့ရလာတဲ့ folder ကို mongodb လို့ နာမည်ပေးပြီး home folder အောက်က document folder ထဲထည့်လိုက်ပါမယ်။ သင်လည်း သင့်စိတ်ကြိုက်နေရာမှာ သိမ်းနိုင်ပါတယ်။ ပြီးရင် Environment variable အတွက် terminal ကို ဖွင့်လိုက်ပါ။ ကျွန်တော် တို့တွေ အစပိုင်းမှာ .profile file ကို ဖန်တီးခဲ့တာ မှတ်မိပါအုံးမယ်။ အဲဒီ အထဲမှာ အခု mongodb bin folder ကို ထည့်လိုက်ပါမယ်။ ကျွန်တော်ကတော့ ~/.bash_profile ထဲမှာ သိမ်းထားလို့ အဲဒီ file လေးကို ဖွင့်ပြီးအောက်ကလို ထပ်ဖြည့်လိုက်ပါတယ်။

$HOME/Documents/mongodb/bin

ဆိုတာလေး ဖြည့်လိုက်ပါတယ်။ သင်လည်း သင် mongodb သိမ်းထားတဲ့ path ကို ထည့်ရုံပါပဲ။ ပြီးရင် ပြန်ပြီး load ခေါ်ပါမယ်။

$vim ~/.bash_profile
$source ~/.bash_profile

mongodb က data ကို /data ထဲမှာ သွားသိမ်းပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ data သိမ်းဖို့အတွက် folder ဆောက်ရပါမယ်။

$sudo mkdir /data
$sudo mkdir /data/db
$sudo chown -R $USER /data
$sudo mongod
အဲဒါပြီးရင်တော့ mongodb server ကို run လို့ရပါပြီ။ တကယ်လို့ အဲလိုမျိုး မတည်ဆောက်ချင်ဘူးဆိုရင်လည်း အဆင်ပြေတဲ့ folder ကို dbpath ပေးပြီး ခေါ်လို့ရပါတယ်။

$sudo mongod –dbpath your_path

mongodb server run ပြီးရင်တော့ ကျွန်တော်တို့တွေ client ကို run ကြည့်ပါမယ်။ အဲဒီ အတွက် နောက်ထပ် terminal တစ်ခု ခေါ်ရပါမယ်။ လက်ရှိ server run ထားတာ မပိတ်လိုက်ပါနဲ့။

$sudo mongo

လို့ ခေါ်လိုက်ရင် client ဘက် ရောက်သွားပါမယ်။

Save Data on Mongodb Client

client ကို စမ်းပါမယ်။ အရင်ဆုံး database တစ်ခု ဆောက်ပါမယ်။

> use tatoo
switched to db tatoo
> db.tasks.save({user:’saturngod’ , todo:[{id:1,desc:’hello’,done:0}],lastid:1})

ဆိုပြီး save လုပ်လိုက်ပါမယ်။ tasks ဆိုတာကတော့ collection ပါ။ MySQL မှာဆိုရင်တော့ Table ပေါ့။ Mongodb မှာ database , collection တွေကို create လုပ်ပေးစရာမလိုပဲ အလိုလို တည်ဆောက်ပေးပါတယ်။

ပြီးရင် သိမ်းထားတဲ့ data ကို ပြန်စစ်ရအောင်။

> db.tasks.find()
{ “_id” : ObjectId(“4df475be7b55990799b034f5”), “user” : “saturngod”, “todo” : [ { “id” : 1, “desc” : “hello”, “done” : 0 } ] , lastid:1 }

return ပြန်လာတဲ့အခါမှာ _id အလိုလို ပါလာတာ တွေ့မှာပါ။ သူက objectID ကို သိမ်းထားတာပါ။ save လုပ်လိုက်တိုင်း objectId တစ်ခု အလိုလိုပါလာပါတယ်။

Update Data on Mongodb Client

ကျွန်တော်တို့ နောက်ထပ် todo တစ်ခု ထပ်ဖြည့်ရအောင်။

> db.tasks.update({user:”saturngod”},{“$push”:{todo:{id:2,desc:”world”,done:0}},”$inc”:{lastid:1}})

db.tasks.update မှာ ပထမ parameter က query ရှာတာ ဖြစ်ပြီး ဒုတိယ အပိုင်းကတော့ update လုပ်တာပါ။ user:saturngod ကို ရှာလိုက်တယ်။ ပြီးတော့ todo array ထဲမှာ update လုပ်ချင်တာကြောင့် $push ကို အသုံးပြုလိုက်တယ်။ lastid ကို သိရအောင် $inc နဲ့ 1 တိုးပြီး increase လုပ်လိုက်ပါတယ်။ ပြီးရင် find နဲ့ result ကို စစ်ကြည့်ရအောင်။

> db.tasks.find()
{ “_id” : ObjectId(“4df4b7fce68a6352c234f660”), “lastid” : 2, “todo” : [
{
“id” : 1,
“desc” : “hello”,
“done” : 0
},
{
“id” : 2,
“desc” : “world”,
“done” : 0
}
], “user” : “saturngod” }

ဆိုပြီးတွေ့ရမှာပါ။

နောက်အပိုင်းမှာတော့ task ဖျက်တာနဲ့ task done ဖြစ်တာကို ရေးပေးပါအုံးမယ်။

Making Todolist with node.js and mongo Part III

ရှေ့ပိုင်းတွေမှာတော့ Node.js အကြောင်းပြောပြီးပါပြီ။ အခု အပိုင်းမှာတော့ mongodb အကြောင်း အနည်းငယ်ပြောပါမယ်။ Mongodb အကြောင်း ပြောပြီးမှပဲ project ရဲ့ တည်ဆောက်ပုံကို နားလည်မှာပါ။ Mongodb က NOSQL database ဖြစ်ပြီးတော့ document storage ကို အသုံးပြုထားပါတယ်။ Mongodb အကြောင်းကို ရေးဖူးပြီးသား ဖြစ်တဲ့အတွက်ကြောင့် အောက်က link တွေမှာ ဖတ်လိုက်ပါ။

  1. http://www.saturngod.net/knowledgebase/nosql
  2. http://www.saturngod.net/knowledgebase/nosql-part-2

အဲဒါကို ဖတ်ပြီးရင်တော့ အမြန်ဆုံး လေ့လာရလွယ်အောင် http://www.mongodb.org/ မှာ Try It Out ကို နှိပ်ပြီး tutorial လေးကို လက်တွေ့ စမ်းသပ်နိုင်ပါတယ်။ အဲဒါလေး ပြီးရင်တောင project လေးကို စလို့ရပါပြီ။

Making Todolist with node.js and mongo Part II

အပိုင်း၁ မှာတော့ Node.js ဆိုတာ ဘာလဲ။ ဘယ်လို သွင်းရလဲ စတာတွေကို ရေးပြခဲ့ပြီးပါပြီ။ နောက်ပြီးတော့ hello world ဥပမာလေးလည်း ရေးပြခဲ့ပါတယ်။ သို့ပေမယ့် code လေးတွေကို မရှင်းပြရသေးပါဘူး။ အခု Hello World ရေးထားတဲ့ code လေးကို လေ့လာရအောင်။

var sys = require("sys");
    http = require("http");

http.createServer(function(request, response) {
    response.sendHeader(200, {"Content-Type": "text/html"});
    response.write("Hello World!");
    response.close();
}).listen(3000);

sys.puts("Server running at http://localhost:3000/");

ဆိုတဲ့ code မှာ

var sys = require("sys");

require ဆိုတာကတော့ php မှာ include ခေါ်သလို python မှာ import လုပ်သလိုပေါ့။ Node.js မှာတော့ require က module တွေ ခေါ်တာပေါ့။ Module ဆိုတာက Node.js မှာ အရန်သင့် အသုံးပြုရန် အတွက် ရေးထားတဲ့ library တွေပါ။ System မှာ default ပါတဲ့ module တွေ ကို ခေါ်ပြီး အသုံးပြုလို့ရသလို Third Party Module တွေကိုလည်း ခေါ်ပြီးသုံးလို့ရပါတယ်။ Node.js မှာပါတဲ့ module အကြောင်းတွေကို ဒီမှာ ဖတ်နိုင်ပါတယ်။

အပေါ်က code က sys module နဲ့ http module ၂ ခုကို ခေါ်လိုက်ပါတယ်။ sys module ကတော့ terminal မှာ message ပြဖို့နဲ့ http module ကတော့ website အတွက်ပေါ့။ port 3000 နဲ့ web server တစ်ခုကို ဆောက်လိုက်ပါတယ်။ sendHeader နဲ့ header ကို ကြေငြာပြီးတော့ hello world ကို ရိုက်ထုတ်လိုက်ပါတယ်။

NPM

NPM ကတော့ Node Package Manager ပါ။ တနည်းပြောရင် module installer ပေါ့။ Node မှာ ရှိတဲ့ module တွေကို npm ကနေ တဆင့်သွင်းလို့ရပါတယ်။ ဘာနဲ့ ဆင်တူသလဲဆိုတော့ apt-get install လို လို့ ပြောလို့ရပါတယ်။ NPM က node.js module developer တွေအနေနဲ့ npm ပေါ် လွယ်လင့်တကူ publish လုပ်လို့ရသလို node.js ကို အသုံးပြုပြီးရေးနေတဲ့သူတွေအနေနဲ့ module တွေကို လွယ်လင့် တကူ install လုပ်လို့ရပါတယ်။

Installing NPM

$ sudo curl http://npmjs.org/install.sh | sh

ဆိုပြီး သွင်းလိုက်ရုံပါပဲ။ သူ့ဘာသာသူ download ချပြီး သွင်းသွားပါလိမ့်မယ်။ တကယ်လို့ သွင်းမရဘူးဆိုရင်တော့ git ကနေ တဆင့်သွင်းပါမယ်။

$ git clone http://github.com/isaacs/npm.git
$ cd npm
$ sudo make install

NPM သွင်းလို့ ပြီးရင်တော့ express web framework လေးကို စမ်းကြည့်ရအောင်။

Starting Project

အခု todo list ကို စလုပ်ပါတော့မယ်။ မစခင်မှာ express framework ကို စမ်းကြည့်ပါမယ်။ express ဆိုတာက Node.js အတွက် web framework ပါ။ node တစ်ခုတည်းမှာဆိုရင်တော့ url ပေါ်မှာမူတည်ပြီး case နဲ့ စစ်စစ်ပြီး website အတွက် ရေးပေးရပါတယ်။ နောက်ပြီး template system တွေ အတွက် သီးသန့် ထပ်ရေးပေးဖို့ လိုပါတယ်။ express ကနေ template နဲ့ အလွယ်တကူပေါင်းနိုင်အောင် နောက်ပြီး mongodb နဲ့ အလွယ်တကူ အသုံးပြုနိုင်အောင် ဖန်တီးပေးပြီးသားပါ။

Install Express

အရင်ဆုံး project တစ်ခု ဆောက်ရအောင်။

$ mkdir ~/tatoo
$ cd ~/taoo
$ touch index.js
$ npm install express

ပြီးရင် index.js မှာ express framework ကို စမ်းပါမယ်။

var app = require('express').createServer();

app.get('/', function(req, res){
    res.send('Hello World');
    });

app.get('/helloworld',function(req,res){
        res.send('Working');
});

app.listen(3000);

ပြီးရင်

$ node index.js

ဆိုပြီး run လိုက်ပါ။ browser ကနေ http://localhost:3000 ကို ခေါ်ကြည့်ပါ။ နောက်ပြီး http://localhost:3000/helloworld ကို ခေါ်ကြည့်ပါ။ အလုပ်လုပ်တယ်ဆိုရင်တော့ express framework အလုပ်လုပ်ပါပြီဗျာ။

နောက်နေ့တွေမှာ project structure အကြောင်းဆက်ရတာပေါ့ဗျာ။

Making Todolist with node.js and mongo Part I

Node.js နဲ့ Mongodb ကို အသုံးပြုပြီးတော့ Todo list လေး တစ်ခု တည်ဆောက်ပုံကို ရေးပြပါမယ်။ Todo list မှာ ဘာ feature တွေ ပါမလဲဆိုတော့ ထည့်မယ်။ ဖျက်ပြီ။ ပြီးသွားတဲ့ task တွေကို done လုပ်တာ ပါမယ်။ ဒီလောက်ပါပဲ။

Node.js

အရင်တုန်းကတော့ Javascript ဆိုတာ web browser client side တွေမှာ အလုပ်လုပ်တဲ့ script ပါ။ အခုအခါမှာတော့ Google V8 ကြောင့် Javascript ကို server side မှာ အသုံးပြုလို့ရလာပါပြီ။ Node.js ဟာ Google V8 ကို အသုံးပြုထားတဲ့ Event I/O framework ပါ။ Node.js က အရမ်းကို မြန်ပါတယ်။ PHP ထက်လည်း မြန်ပါတယ်။ နောက်ပြီးတော့ Real Time application တွေ ဖြစ်တဲ့ Friendfeed , Google Wave တို့လို့ application တွေကို လွယ်လွယ်နဲ့ ရေးလို့ရပါတယ်။ Nodejs ဟာ threads တွေ အစား event loop ကို အသုံးပြုထားပြီး concurrent connection millions အတွက် ကောင်းကောင်း အသုံးပြုနိုင်ပါတယ်။ file read write တွေ အသုံးပြုလို့ရသလို အခြား web service api တွေကိုလည်း ခေါ်သုံးလို့ရပါတယ်။

Step 1. Installtion

Node.js ဟာ Mac OS X , Linux နဲ့ FreeBSD တွေ မှာပဲ သုံးလို့ရပါတယ်။ Windows အသုံးပြုနေရင်တော့ ဒီ post series ကို ဆက်မဖတ်ပါနဲ့တော့။ Windows သမားတွေအနေဲ့ Cygwin ကို အသုံးပြုလို့ရသလို virtual box မှာ Ubuntu linux တင်ပြီး အသုံးပြုတာ ပိုအဆင်ပြေပါလိမ့်မယ်။ Windows မှာ Cygwin နဲ့ သွင်းပုံကို ဒီမှာ ဖတ်နိုင်ပါတယ်။

Linux သမားတွေအနေနဲ့ကတော့ ဘာမှ မလိုအပ်ပါဘူး။ သို့ပေမယ့် python 2.4 နဲ့ အထက်နဲ့ libss-dev ကိုတော့ သွင်းထားပေးဖို့လိုပါတယ်။

Mac OSX သမားတွေအနေနဲ့ကတော့ Xcode ကို သွင်းထားဖို့ လိုပါတယ်။ ဒါကြောင့် XCode ကို အရင် download ချပြီး မှ သွင်းလို့ရပါလိမ့်မယ်။

Github ကနေ ပြီးတော့ Node ကို download ချလိုက်ပါ။ အခု လက်ရှိ version ကတော့ 0.4.8 ဖြစ်တဲ့အတွက် 0.4.8 ကို download ချပါ ။ ပြီးသွားရင် zip ကို ဖြည်ချလိုက်ပါ ။ ပြီးရင် download ချပြီး zip ဖြည်ထားတဲ့ folder ထဲကို terminal ကနေ သွားလိုက်ပါ။

ဥပမာ။။

$ cd ~/Download/joyent-node-v0.4.8-0-g7dd22c2/joyent-node-950a048/

folder name တွေကတော့ တစ်ယောက်နဲ့ တစ်ယောက် တူမှာမဟုတ်ပါဘူး။ အခု cd နဲ့ သွားထားတာက example အနေနဲ့ ပြထားတာပါ။ cd နဲ့ node folder ထဲရောက် ပြီးရင် compile လုပ်ပါမယ်။

$export JOBS=2 # optional, sets number of parallel commands.
$mkdir ~/local
$./configure --prefix=$HOME/local/node
$make
$sudo make install
$export PATH=$HOME/local/node/bin:$PATH

ပြီးသွားရင် node command ကို ခေါ်ကြည့်ပါ။ ခေါ်လို့ရရင် Ctrl+ C နဲ့ ပြန်ထွက်ပြီး terminal ကို ပိတ်ပါ။ ပြီးရင် terminal ဖွင့်ပြီး
တကယ်လို့ ခေါ်လို့ မရရင်တော့ home folder အောက်မှာ .profile ဆိုတဲ့ file ကို vi ဆောက်ပါ။ home folder အောက်မှာ .profile သို့မဟုတ် .profile_bath ရှိမရှိ စစ်ပါ။ .bash_profile ရှိရင် တော့ .bash_profile ကိုပဲ vi နဲ့ ပြင်ပါမယ်။

$vi ~/.profile

သို့မဟုတ်

$vi ~/.profile_bath

ပြီးရင်

PATH=$HOME/local/node/bin:$PATH

ကို ဖြည့်လိုက်ပါ။

$ source ~/.profile

ဆိုပြီး load ပြန်လုပ်ပေးလိုက်ရင် ရပါပြီ။ terminal ကနေ node ခေါ်လို့ရရင်တော့ node.js ကို စရေးဖို့ အသင့်ဖြစ်ပါပြီ။

Hello World

index.js file ကို တနေရာတွင် ဆောက်လိုက်ပါ။ ကျွန်တော်ကတော့ Home folder အောက်မှာပဲ ဆောက်ထားလိုက်ပါတယ်။

$cd ~/
$mkdir Nodejs_test
$cd Nodejs_test
$touch helloworld.js

ပြီးရင် နှစ်သက်ရာ editor နဲ့ ဖွင့်လိုက်ပါ။ ကျွန်တော်ကတော့ vi နဲ့ပဲ ဖွင့်လိုက်ပါတယ်။ ( vi မသုံးတတ်ရင် မသုံးပါနဲ့။ နှစ်သက်ရာ editor ကို သုံးနိုင်ပါတယ်။ )

$vi helloworld.js

ပြီးရင် အောက်ကလို ရိုက်ကြည့်လိုက်ပါ။

var sys=require('sys');
sys.puts('Hello World');

ပြီးရင် save လုပ်ပြီးတော့ terminal ကနေ run ပါမယ်။

$node helloworld.js
Hello World

ဆိုပြီး return ပြန်လာတာ တွေ့ပါလိမ့်မယ်။ ကဲ.. အဲဒီ helloworld.js ကို အောက်ကလို ထပ်ပြင်ပါမယ်။

var sys = require("sys");
    http = require("http");

http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/html"});
    response.end("Hello World!");
}).listen(3000);

sys.puts("Server running at http://localhost:3000/");

ပြီးရင် terminal ကနေ ပြန် run ပါမယ်။

$node helloworld.js
Server running at http://localhost:3000/

ပြီးရင် browser ကနေ localhost:3000 ကို ရိုက်ပြီးခေါ်ကြည့်လိုက်ပါ။ Hello World ပေါ်နေတာကို တွေ့ရပါမယ်။

ကျွန်တော် macbook pro ပျက်သွားလို့ ပြင်ဖို့ ဆိုင်ပို့ထားရလို့ ရုံးကနေ မပြန်သေးပဲ ရေးနေတာပါ။ အိမ်ပြန်လည်း နောက်ကျနေပြီမို့ ဒီနေ့တော့ ဒီလောက်ပါပဲ။ နောက်နေ့ တွေမှာ npm သွင်းနည်းကို ရှင်းပြပါမယ်။

Law of cosines , Pythagorean theorem with programming

မနေ့တုန်းက Wheel Image ပေါ်မှာ Touch Move နဲ့ ရွေ့ဖို့ ကိစ္စ အလုပ်မှာ ရေးရတယ်။ Wheel ပေါ်မှာ Touch start , Touch End , Touch Move event ၃ ခု ရှိတယ်။ Touch start ကနေ start point x နဲ့ y ကို ရတယ်။ Touch move ကနေ ရွေ့နေတဲ့ x , y ကို ရတယ်။ အဲဒီ point ၂ ခု နဲ့ လက်ရှိ ဘီး ကို လည်အောင် လုပ်ပေးရမယ်။ နာရီလက်တံ အတိုင်း လက်နဲ့ ပွတ်ပြီး လှည့်လိုက်ရင် အဲဒီ ဘက်ကို လည်သွားရမယ်။ နာရီလက်တံ ပြောင်းပြန်ဆိုလည်း ပြန်လည်လာရမယ်ပေါ့။ အဲဒါကို တွက်မယ်ဆိုတော့ ပုံကြမ်းချရေးလိုက်တယ်။

a,b အမှတ်နဲ့ x,y အမှတ် ဘယ်လောက် degree ကွာသွားလဲသိဖို့ အတွက် စက်ဝိုင်းရဲ့ ဗဟိုနဲ့ ချိတ်လိုက်တယ်။

ကျွန်တော် အခု သိချင်တာက အဲဒီက \theta ရဲ့ degree ပဲ။ ဒါမှ ကျွန်တော်က ဘီးကို ဘယ်လောက် rotate လုပ်မယ်ဆိုပြီး ပြောလို့ရလိမ့်မယ်။ အခု ကျွန်တော်တို့ သိတာက x,y | a,b | c,d စတဲ့ point တွေပဲ။ အဲဒီကနေ \theta ကို သိဖို့အတွက် Law of cosines ကို သုံးရပါမယ်။ ဒါကြောင့် အရင်ဆုံး တြိဂံ ဖြစ်သွားအောင် x,y နဲ့ c,d ကို ချိတ်လိုက်တယ်။

ဒါဆိုရင် \theta ကို ရှာလို့ရပါတယ်။

L^{2} = J^{2} + K^{2}  - 2JK \ cos(\theta )

ဒါက ကျွန်တော် တို့ UCS မှာ သင်ခဲ့ရသလို တက္ကသိုလ်ဝင်တန်း မှာလည်း သင်ရမယ်နဲ့တူတယ်။ ကျွန်တော်က \theta ပဲလိုချင်တယ်ဆိုတော့ ဒီလို ပြန်ပြောင်းလိုက်ပါတယ်။

\theta  = cos^{-1} \left ( \frac{J^{2}+K^{2}-L^{2}} {2JK} \right )

ဒါဆိုရင် ကျွန်တော်တို့တွေ \theta ကို သိပါပြီ။ ဒါပေမယ့် cos inverse က Math Object မှာ မရှိပဲ radian တွက်တာပဲ ရှိတယ်။ ဒါကြောင့် Radian ကနေ degree ပြန်ထွက်အောင် တွက်ရပါတယ်။

radian ကနေ degree တွက်ချင်ရင်

\frac{180}{\pi }

နဲ့ မြှောက်ရပါတယ်။ ဒါကြောင့် ပုံသေနည်းက ဒီလို ဖြစ်သွားပါမယ်။

\theta  = arccos \left ( \frac{J^{2}+K^{2}-L^{2}} {2JK} \right )  \times \frac{180}{\pi }

သို့ပေမယ့် L , J , K အနား တွေကို မသိသေးဘူး။ သိအောင် ဘယ်လို လုပ်ရမလဲ။ ၉ တန်း လောက်တုန်းက သင်ထားတဲ့ Pythagorean theorem ကို မှတ်မိသလား။ ထောင့်မှန် တြိဂံရဲ့ ၂ နားကို သိရင် ကျန် ၁ နားကို ပါသိနိုင်တယ် ဆိုတာလေ။ ထောင့်မှန် အနား ပုံသေနည်းက

c^{2} = a^{2}+b^{2}

ဒါဆိုရင် အနား ၃ နားကို ရှာလို့ရပါတယ်။ ဥပမာ ။။ L အနားဆိုရင်

L = \sqrt{(x-c)^{2} \times (y-d)^{2}}

အနား ၃ နားရသွားရင် \theta ကိုလည်း လွယ်လွယ်နဲ့ ရှာလို့ရသွားပါပြီ။ \theta degree ကို သိရင် စက်ဝိုင်းကိုလည်း rotate လုပ်လို့ရသွားပြီပေါ့။ ဒါက အကြမ်းပဲ ရှိပါသေးတယ်။ ဘယ် ဘက် အခြမ်း ညာဘက်အခြမ်း တွေအတွက်လည်း condition တွေ ထည့်ရေးရတာတွေ ရှိပါသေးတယ်။ UCS မှာ သချာင်္သင်ထားတာတွေ လက်တွေ့ လုပ်ငန်းခွင့်မှာ အသုံးချလို့ရတယ်ဆိုတာကို ပြတဲ့ အနေနဲ့ အကြမ်း သဘောမျိုးသာ ရေးထားတာပါ။ ၉ တန်း ၁၀ တန်း သချာင်္ကျေညက်တဲ့ အခါမှာ programming လုပ်ရတာ ပိုလွယ်ပြီး အဆင်ပြေပါတယ်။ UCS မှာ စာသင်တဲ့အခါမှာလည်း လက်တွေ့လောကမှာ အသုံးချနေတာတွေနဲ့ ဥပမာ ပေးပြီး သင်ကြားရင် ပိုစိတ်ဝင်စားကြမယ်ထင်ပါတယ်။ သချာင်္က game သာမက UI Development ပိုင်းတွေမှာလည်း အရမ်းကို အသုံးဝင်လှပါတယ်။

UI Design Resources

တစ်ခါတစ်လေ ကျွန်တော်တို့တွေ iphone , ipad UI Design ကို စဉ်းစားတဲ့ အခါ ဖြစ်ဖြစ် web design အတွက် UI ကို စဉ်းစားတာ ဖြစ်ဖြစ် ဘယ်လို သုံးသင့်ရမလဲဆိုတာ စဉ်းစားမရတာတွေ ရှိတတ်တယ်။ ကျွန်တော်က Designer မဟုတ်တဲ့အတွက် Design ပိုင်းကို လန်ထွက်နေအောင် မဆွဲနိုင်ဘူး။ သို့ပေမယ့် ဘယ် UI Design သုံးသင့်တယ်ဆိုတာကို နေ့စဉ် ထိတွေ့နေရတဲ့ ပတ်ဝန်းကျင်ကြောင့် သိနိုင်တယ်။ အခု တလော ရုံးမှာ အလုပ်များနေတာကြောင့် Designer ကလည်း project တစ်ခုကို အချိန်ပြည့် ယူနေရတယ်။ လက်ရှိ ကျွန်တော့် project တွေအတွက် UI Design ကိုယ့်ဘာသာကိုယ် ဖန်တီးရပါတော့တယ်။ Continue reading “UI Design Resources”

Zawgyi Docx to epub for iBook and Nook Color

Zawgyi နဲ့ရေးထားတဲ့ Docx ကနေပြီးတော့ epub ပြောင်းပုံလေးပါ။ iBook , Nook Color တို့မှာ ဇော်ဂျီ မသွင်းထားပဲနဲ့ ကိုယ် ရေးထားတဲ့ စာအုပ်ကို ဖတ်လို့ ရအောင် ဘယ်လို လုပ်ရမလဲဆိုတာကို ပြထားပါတယ်။

Syntax Highlighting on MZ

MZ မှာ code အတွက် syntax highlight လုပ်ချင်ပါက ကို နှိပ်ပါ။

ထို အခါ code view ရောက်သွားမည်။ code view ထဲတွင် code ထည့်သည့်အခါ pre tag နှင့် ထည့်ရမည်။

<pre lang=”your language”>

ဒီနေရာမှာ code ထည့်ပါ။

</pre>

အောက်က ပုံလို မျိုး ထည့်သွင်းရေးရပါမည်။

post တင်လိုက်တဲ့ အခါမှာတော့ syntax highlighting နှင့် ထွက်လာပါမည်။

အသုံးပြုလို့ရတဲ့ language တွေကတော့

  • applescript
  • actionscript3 as3
  • bash shell
  • coldfusion cf
  • cpp c
  • c# c-sharp csharp
  • css
  • delphi pascal
  • diff patch pas
  • erl erlang
  • groovy
  • java
  • jfx javafx
  • js jscript javascript
  • perl pl
  • php
  • text plain
  • py python
  • ruby rails ror rb
  • sass scss
  • scala
  • sql
  • vb vbnet
  • xml xhtml xslt html

Ornagaime Winner

အောက်ပါ လူ ၁၀ ယောက်ကတော့ ကံထူးရှင် ၁၀ ဦးပါပဲ။ ၁၀ ယောက်လုံးကို promo code mail ပို့ထားပြီး အသုံးပြုပုံ ကိုလည်း mail ပို့ထားပါတယ်။

ကို ဖိုးချမ်း နဲ့ ကို မောင်အောင် တို့က ဝယ်ပြီးသွားပြီဆိုတဲ့ အတွက်ကြောင့် SQL ထဲမှာ သူတို့ ပြန်မပါလာအောင် condition စစ်ပြီး random ထုတ်ထားပါတယ်။

စည်းကမ်းချက်က ပါဝင် ကံစမ်းသူများသည် App Store account ရှိပြီး iOS 4.0 နှင့် အထက် ရှိသူများ ဖြစ်တဲ့အတွက်ကြောင့် promo code ကို လွယ်လင့် တကူ အသုံးပြုနိုင်မယ်လို့ မျှော်လင့်ပါတယ်။

Unicode Guide

Unicode အသုံးပြုပုံနဲ့ ပတ်သက်ပြီး ထည့်သွင်းရေးသားထားပါတယ်။ မရှင်းတာ နားမလည်တာတွေကို comment မှာ မေးနိုင်ပါတယ်။ သို့မဟုတ် user.mysteryzillion.org မှာ လည်း မေးနိုင်ပါတယ်။

iBook need 1.2 or later for font embed.

Download

Ornagaime Giveaway

Ornagaime ( Myanmar to English ) Dictionary ကို မဲ ၁၀ ခု ဖောက်ပေးပါမယ်။ Ornagaime ဟာ Myanmar to English Dictionary ဖြစ်ပြီး အခုအချိန်မှာတော့ Version 0.5.1 ပဲ ရှိပါသေးတယ်။ Ornagaime ဟာ နောက်ပိုင်း version တွေ ထပ်ပြီး update လုပ်သွားဖို့ အစီအစဉ်တွေ ရှိပါတယ်။ နောက်ထွက်မယ့် version တွေမှာ

syllable break – ကို ဆိုတာကို ရှာရင် ကိုး ဆိုတဲ့ စာလုံးမထွက်လာအောင်
normalization – က-ိ-ု ပဲ ရိုက်ရိုက် က-ု-ိ ပဲ ရိုက်ရိုက် အဖြေတစ်ခုတည်းထွက်လာအောင်

စတာတွေ ပါရှိလာပါမယ်။

ကံစမ်းမဲတွင် ပါဝင်လိုတဲ့သူတွေကတော့ အောက်မှာ comment ဝင်ရေးလိုက်ရုံပါပဲ။ comment ရေးတဲ့အခါမှာ email အမှန်ဖြည့်စွက်ပေးဖို့ လိုအပ်ပါတယ်။ နောက်ပြီး App store account ရှိတဲ့သူဖြစ်ပြီး iPhone OS 4.0 နှင့်အထက် ရှိရပါမယ်။

* jailbreak ဖြစ်ရန် မလိုအပ်ပါ။ application အတွက် keyboard နှင့် font built in ထည့်သွင်းထားပါသည်။

မဲပေါက်သူများကို April 22 ရက်နေ့ Good Friday မှာ ကြေငြာပါ့မယ်။

Freelance သမားတွေ အသုံးဝင်မယ့် Tool ၄ ခု

Freelance လုပ်တဲ့ အခါမှာ ကျွန်တော်တို့တွေအတွက် စျေးသက်သက်သာသာ ဒါမှမဟုတ် free ရမယ့် service လေးတွေ လိုအပ်ပါတယ်။ Client အနေနဲ့လည်း ကိုယ်ဘာတွေ ပြီးသွားပြီ ဘာတွေလုပ်ဖို့ ကျန်သေးလဲဆိုတာကို တစ်ခါတည်း သိရှိနိုင်ဖို့လိုပါတယ်။ ကျွန်တော် အကြိုက်ဆုံး tool ၄ ခုကို ဖော်ပြလိုက်ပါတယ်။

Freedcamp

Freelance လုပ်တဲ့အခါမှာ အရေးကြီးဆုံး အပိုင်းကတော့ Project Management ပါ။ Client ဘာလိုလဲ။ ကိုယ်ရဲ့ milestone တွေ စတာတွေ အပြင် discussion တွေပါ အစ ပါဝင်ပါတယ်။ basecamp ကို သုံးဖူးတဲ့သူတွေအနေနဲ့ free ရမယ့် basecamp လိုမျိုး project management ကို ရှာနေရင်တော့ freedcamp က အကောင်းဆုံးပါပဲ။ နောက်ပြီး freedcamp က အမြဲတန်း free ပေးမယ်လို့ ကြေငြာထားပါတယ်။ အလွယ်အကူဆုံး အရိုးအရှင်းဆုံးနဲ့ ထိရောက်မှုရှိတဲ့ project management website တစ်ခုပါ။

Continue reading “Freelance သမားတွေ အသုံးဝင်မယ့် Tool ၄ ခု”