Unicode အသုံးပြုပုံနဲ့ ပတ်သက်ပြီး ထည့်သွင်းရေးသားထားပါတယ်။ မရှင်းတာ နားမလည်တာတွေကို comment မှာ မေးနိုင်ပါတယ်။ သို့မဟုတ် user.mysteryzillion.org မှာ လည်း မေးနိုင်ပါတယ်။
iBook need 1.2 or later for font embed.
education for everyone
Unicode အသုံးပြုပုံနဲ့ ပတ်သက်ပြီး ထည့်သွင်းရေးသားထားပါတယ်။ မရှင်းတာ နားမလည်တာတွေကို comment မှာ မေးနိုင်ပါတယ်။ သို့မဟုတ် user.mysteryzillion.org မှာ လည်း မေးနိုင်ပါတယ်။
iBook need 1.2 or later for font embed.
Cloud ဆိုတာ ဘာလဲဆိုတာကို သေသေချာချာ ရှင်းပြထားတဲ့ video လေးပါ။ Cloud ဆိုတာကို နားမလည်တဲ့ သူတွေအတွက် ကြည့်သင့်တဲ့ video ဆိုလည်း မမှားပါဘူး။
Dropbox ကို Mac မှာ တစ်ခုထက် မက သုံးချင်တာတွေရှိပါတယ်။ သို့ပေမယ့် ပုံမှန် အားဖြင့် dropbox က တစ်ခုတည်းပဲ သုံးလို့ရပါတယ်။ ကျွန်တော် တို့ ဆီမှာ account ၂ ခုရှိတယ်။ တစ်ခုက ရုံးအတွက် တစ်ခုက personal အတွက် ဆိုပြီး ရှိတယ်ဆိုရင် သုံးရတာ အဆင်မပြေတော့ဘူး။ Mac မှာ Dropbox ၂ ခု သုံးချင်တယ်ဆိုရင်တော့ ဒီ file လေးကို download ချလိုက်ပါ။
Continue reading “Run Another Dropbox on Mac”
ပြီးခဲ့တဲ့ သောကြာနေ့ ကိုရဲမြတ်သူ ဘန်ကောက်ရောက်နေတော့ ကျွန်တော့် ဆီကို ဖုန်းဆက်ပါတယ်။ အဓိကတော့ ပြည်တွင်းကလူတွေ ပြည်ပထွက်ကုန်တဲ့ နောက်ပိုင်းမှာ လူတော်တွေရှားလာတယ်။ Computer နဲ့ အသက်မွေးဝမ်းကြောင်း လုပ်ချင်တဲ့ လူတွေ နည်းလာတယ်။ အဲဒီ အတွက် company တွေ အနေနဲ့လည်း အဆင်မပြေဘူး။ လက်ရှိ ရှိနေတဲ့ human resource တွေ ဘာကြောင့် မတိုးတက်လာတာလဲ။ ဘာကြောင့် ရှားပါးကုန်တာလဲဆိုတာကို အချိန် တစ်နာရီလောက် စကားပြောဖြစ်ခဲ့တယ်။
Generation တစ်ခုပြီး တစ်ခု နိုင်ငံခြားထွက်လာတဲ့ အမျှ မြန်မာနိုင်ငံမှာလည်း Human Resource တွေ တဖြည်းဖြည်း ကျဆင်းလာတယ်။ လက်ရှိ ပြည်တွင်းမှာ ကျန်ရှိတဲ့သူတွေက ရာခိုင်နှုန်းအရ Fresh တွေနဲ့ Begineer တွေ ပိုများလာတယ်။ အများအားဖြင့် သင်တန်းဆင်း တွေ က များလာတယ်။ သင်တန်းဆင်း တော်တော်များများဟာလည်း လက်တွေ့ လုပ်ငန်းခွင် အတွေ့အကြံု အားနည်းသလို တကယ်လိုအပ်တဲ့ project ကြီးတွေမှာ လုပ်ဖို့ကလည်း လုပ်ငန်းရှင်တွေ ကိုယ်တိုင် အာမခံရဲ ဘူးဖြစ်နေတယ်။ ပြီးခဲ့တဲ့ ရတနာပုံ DDoS ပြဿနာတုန်းကဆိုရင် တရုတ်လက်ထဲအပ်ပြီး ခိုင်းရတဲ့ အဆင့်ထိတောင် ဖြစ်သွားတယ်။ နောက်ပြီး ပြည်တွင်းမှာ လုပ်ငန်း Freelance network က အားနည်းနေသေးတာကြောင့်လည်းပါတယ်လို့ ဆိုရမယ်။ အချို့ လုပ်နိုင်တဲ့ လူတွေ ရှိပေမယ့် လက်ရှိ အလုပ်အပ်ချင်တဲ့သူတွေ ရှာဖွေရ ခက်တာတွေလည်း ရှိတယ်။ ရှိပေမယ့် ရှာရခက်နေတယ်။ ရှားနေတယ်လို့လည်း ဆိုရမှာပေါ့။
Cocos2d ဟာ iPhone 2D Game ရေးဆွဲဖို့အတွက် opensource framework တစ်ခုပါ။ game တွေကိ ုမြန်ဆန်လွယ်ကူအောင် ရေးဆွဲဖို့အတွက် framework တွေထဲက opensource framework တစ်ခုပါ။ အခု iphone အတွက် ဖြစ်တဲ့အတွက်ကြောင့် Mac OS 10.6 နဲ့Xcode ရှိထားဖို့လိုပါတယ်။ Cocos2d က အစက python နဲ့ရေးထားပြီးတော့ objective-c အတွက် သီးသန့် ပြန်ရေးထားတယ်လို့ ဆိုပါတယ်။
ဟုတ်ပြီ။ ကျွန်တော်တို့ အရင်ဆုံး http://www.cocos2d-iphone.org/download မှာ download လုပ်လိုက်ပါ။ stable version က cocos2d-iphone-0.99.4.tar.gz ပါ။ rc version ကတော့ cocos2d-iphone-0.99.5-rc1.tar.gz ပါ။ rc1 အခြေအနေ ရောက်နေတဲ့အတွက် stable မဖြစ်ပေမယ့် တော်တော် အဆင်ပြေပါတယ်။ 0.99.5 နဲ့ o.99.4 က ကွာတဲ့ အချက်တွေ ရှိပါတယ်။ 0.99.5 မှာ iPhone 4 retina display အတွက် hd image တွေ ထည့်လို့ရလာပါတယ်။ 0.99.4 ကတော့ iPhone 4 မှာ hd အနေနဲ့ support မရနိုင်ပါဘူး။ ဒါကြောင့် 0.99.5rc1 ကိုပဲ download ချစေချင်ပါတယ်။
cocos2d-iphone-0.99.5-rc1.tar.gz ကို ဖြည်လိုက်ပါ။ ပြီးရင် terminal ဖွင်ပြီး ဖြည်ထားတဲ့ folder ကို သွားလိုက်ပါ။
Terminal မှာ
$sudo sh install-templates.sh
ဆိုပြီး ရိုက်ပြီး cocos2d ကို သွင်းနိုင်ပါတယ်။ ပြီးရင် xCode ကို ဖွင့်လိုက်ပါ။ Create new project လုပ်လိုက်ရင် cocos2d template ကို user template အောက်မှာ တွေ့ပါလိမ့်မယ်။
အခု cocos2d သွင်းလို့ရသွားပြီဆိုတော့ နောက်ပိုင်း cocos2d နဲ့ game ရေးပုံလေးတွေ ဆက်လက်ရေးသားပေးပါ့မယ်။
အရင်အလုပ် web development ကနေ ဘာမှ မဆိုင်တဲ့ iphone game development ကို ရောက်သွားတော့ စာတွေတော်တော် ပြန်ဖတ်လိုက်ရတယ်။ နောက်ပြီး မသိတာတွေ တော်တော်များများလည်း လေ့လာလိုက်ရတယ်။ Game Devloper လုပ်ချင်တဲ့ သူတွေ အရင်ဆုံး ကိုမြင့်ကျော်သူရေးထားတဲ့ post လေးတွေကို ဖတ်သင့်တယ်။ ကိုမြင့်ကျော်သူကတော့ Game Dev နဲ့ ပတ်သက်လာရင် ဆရာကြီး တစ်ဆူလို့တောင် ဆိုလို့ရမယ်။ မြန်မာနိုင်ငံကနေ နိုင်ငံတကာကို game ရောင်းနေတဲ့ Total Game Studio ဆိုပြီး အောင်မြင်တဲ့ Game Studio တစ်ခုလည်း ရှိတယ်။ ဒါကြောင့် Game Developer မလုပ်ခင်မှာ သူရေးထားတဲ့ post လေးတွေကို ဖတ်သင့်ပါတယ်။
Continue reading “Starting Game Development”
အခုအချိန်မှာ real-time web applications ဆိုတာက မြန်မာနိုင်ငံနဲ့ အလှမ်းကွာသေးပေမယ့် သိသင့်ပါတယ်။ အထူးသဖြင့် google doc က အကောင်းဆုံး real-time web applications ပါပဲ။ ဒီဘက်က စာရိုက်လိုက်တာနဲ့ ဟိုဘက်မှာ ချက်ခြင်း သွားပေါ်တယ်။ Real-time web applications က chat လိုမျိုး web applications တွေမှာ တော်တော်ကို အသုံးဝင်ပါတယ်။ real time chatting ပေါ့ဗျာ။ သာမာန် သမာရိုးကျ နည်းလမ်းက ဟိုးအရင်တုန်းကတော့ iframe သုံးပြီး refresh ကို ၅ စက္ကန့် တစ်ကြိမ် လုပ်ကြတယ်။ နောက်ပိုင်း ajax ပေါ်လာတော့ iframe အစား ajax နဲ့ ၅ စက္ကန့် တစ်ခါ refresh လုပ်ရပြန်တယ်။
ဒီနေ့တော့ Day 6 ရောက်ပါပြီ။ ဒီနေ့က categories လို့ခေါ်တဲ့ cocoa Touch အကြောင်းပါ။ လက်ရှိ object တွေကို implement ထပ်လုပ်တဲ့အကြောင်းပေါ့။ အရင်တုန်းက ရေးခဲ့တဲ့ အပိုင်းတွေကတော့
Categories ဆိုတာ ဘာလဲ ? Objective-C tutorials တော်တော်များများမှာ categories ကို တွေ့နိုင်ပါတယ်။ အလွန်ပဲ အသုံးဝင်ပြီးတော့ code ကော သပ်သပ်ရပ်ရပ် ဖြစ်စေတယ်ဆိုလည်း မမှားပါဘူး။ အခုကျွန်တော်တို့တွေ မကြာခင် လေ့လာရတော့မှာပါ။ NSString function မှာ ကျွန်တော်တို့ ကိုယ်ပိုင် function တွေ ထည့်ချင်တဲ့ အခါတွေရှိပါတယ်။ ဥပမာ။။ a chatacters တွေကို 4 ပြောင်းလိုက်တဲ့ function မျိုးပေါ့။ ကျွန်တော်တို့တွေ NSString ကို subclass ရှိပြီး ကိုယ်တိုင် method ကိုယ့်ဘာသာကိုယ် ထည့်သွင်းနိုင်ပါတယ်။ subclass ပိုင်းကို ကျွန်တော်တို့တွေ car class ဆောက်တုန်းက တွေ့မြင်ဖူးမှာပါ။ subclass က တော်တော်ကောင်းမွန်ပါတယ်။ သို့ပေမယ့် categories က ပိုပြီး ပြည့်စုံကောင်းမွန်တယ်လို့ ဆိုလို့ရပါတယ်။
Categories က ကျွန်တော်တို့တွေကို methods အသစ်တွေကို ရှိနေတဲ့ class မှာ ထပ်ဖြည့်ထည့်ခွင့်ပေးထားပါတယ်။ ဥပမာ။။ 100 NSString Objects ကို သင့် app မှာ သုံးထားတယ်ဆိုပါဆို့။ reverstring function ကို extra method အနေနဲ့ ထည့်ချင်တယ်ဆိုရင်တော့ custom subclass ကို အသုံးပြုနိုင်ပါတယ်။ သို့ပေမယ့် Categories နဲ့ဆိုရင်တော့ ပိုပြီး ရိုးရှင်းပြီး လွယ်ကူတယ်လို့ ဆိုနိုင်ပါတယ်။ နောက်ပြီး ရှိနေဲ့ method တွေကိုလည်း overwrite လုပ်ပြီး အစားထိုးဖို့ကလည်း ဖြစ်နိုင်ပါတယ်။ Continue reading “Learn Objective-C : Day 6”
jQuery မှာ plugin တွေ ဘယ်လောက် အသုံးဝင်သလဲဆိုတာ သိမှာပါ။ ကျွန်တော်တို့ ကိုယ်တိုင်လည်း jquery plugin တွေ ရေးလို့ရပါတယ်။ plugin ဆိုတာကလည်း function လိုပါပဲ။ ကျွန်တော်တို့ ထပ်ခါ ထပ်ခါလုပ်နေရတာကို လွယ်ကူအောင် ဖန်တီးပေးတာပါ။ ဥပမာ။။ အောက်က code လေးကို ကြည့်လိုက်ပါ။
<html> <head> <title>jQuery Sample</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script src = "bgcolor.js"></script> <script> $(document).ready(function(){ changecolor($("#sample"),"red"); changecolor($("#sample2"),"#FF00FF"); }); function changecolor(id,value) { $(id).css("background-color",value); } </script> </head> <body> <div id="sample">This is sample<div> <div id="sample2">This is sample<div> </body> </html>
အဲဒီမှာ changecolor ဆိုတဲ့ function လေး ရေးထားပါတယ်။ အဲဒါကို ကျွန်တော်တို့ plugin ပြောင်းကြည့်ရအောင်။ function ခေါ်ရေးရင် ရပေမယ့် user friendly ဖြစ်သွားအောင် plugin ပြောင်းရေးတာပါ။ plugin ပြောင်းရေးလိုက်ရင် ကျွန်တော်တို့ အောက်ကလို ပြောင်းပြီး ခေါ်လို့ရသွားမှာပါ။
[lang name=”js”]
$(“#sample”).bgcolor();
$(“#sample2″).bgcolor({
value:”#FF00FF”
});
[/xhtml]
ပိုပြီး user friendly ဖြစ်ပြီး code ကြည့်လိုက်တာနဲ့ နားလည် လွယ်တာပေါ့။
အရင်ဆုံး bgcolor.js မှာ အောက်ကလို ရေးလိုက်ပါတယ်။
(function(jQuery){ jQuery.fn.bgcolor = function(options) { return this.each(function() { //write code in here }); }; })( jQuery );
အဲဒါက jquery plugin ရေးဖို့ပေါ့။
jQuery.fn.bgcolor က bgcolor function ကို extend လုပ်လိုက်တာပေါ့။ selector တွေကနေ တဆင့် bgcolor ဆိုတဲ့ function ခေါ်လို့ရအောင်ပါ။ ကျွန်တော် code ကို အောက်ကလို ပြင်ရေးလိုက်ပါမယ်။
(function(jQuery){ jQuery.fn.bgcolor = function(options) { var defaults = { value:"red" }; var options = jQuery.extend(defaults, options); return this.each(function() { $(this).css("background-color",options.value); }); }; })( jQuery );
defaults က red လို့ပေးထားပါတယ်။ အဲဒါက JSON format ပါ။ JSON format ကို merge လုပ်ဖို့အတွက်
var options = jQuery.extend(defaults, options);
options ဆိုတဲ့ JSON parmater က value ပါလာရင် red ကို ဖျက်ပြီး အသစ်ပြောင်းသွားမှာပါ။
return this.each(function() { //ဒီမှာ code ရေးရပါတယ်။ }
အဲဒီမှာက ကိုယ် ဖြစ်ချင်တဲ့ code ရေးရပါတယ်။ ကျွန်တောက်တော့ ရောက်လာတဲ့ selector ကို background color ပြောင်းထားပါတယ်။
HTML မှာ
<script src = "bgcolor.js"></script>
ထည့်ပြီးတော့ bgcolor ဆိုတဲ့ function ကို ခေါ်လိုက်ရင် background ပြောင်းသွားပါလိမ့်မယ်။ ပေါ်ချင်တဲ့ အရောင်ကိုတော့ value ကို ထည့်ပြီး ပြောင်းပေးလို့ရပါတယ်။
$("#sample").bgcolor(); $("#sample2").bgcolor({ value:"#FF00FF" });
စမ်းကြည့်ချင်ရင်တော့ code ကို download ချပြီး စမ်းနိုင်ပါတယ်။
Web Development လုပ်တော့မယ်ဆိုရင် ကျွန်တော် ဒီပုံမှာ ပြခဲ့တာလေးကို တချက်ကြည့်စေချင်ပါတယ်။ ပုံထဲမှာ ကျွန်တော့်အနေနဲ့ Web Programming ကို မလေ့လာခင်မှာ HTML , CSS , Javascript ကို စတင်လေ့လာဖို့ ဆိုထားပါတယ်။ HTML , CSS က programming ပိုင်း မပါဝင်ပါဘူး။ တော်တော်များများဟာ HTML, CSS, Javascript က သေချာ မတတ်ကျွမ်းပဲနဲ့ Web Development ပိုင်းကို ကူးနေကြတာတွေကိုလည်း တွေ့ရပါတယ်။
Continue reading “How to learn web development”
Planet Creator ရေးထားတဲ့ စာအုပ်ဖြစ်ပြီး HTML နဲ့ CSS ကို အခြေခံမှ စပြီး သေသေချာချာ ရေးထားတဲ့ စာအုပ်ကောင်းလေး တစ်အုပ်ပါ။ စာမျက်နှာပေါင်း ၁၉၇ မျက်နှာ ပါရှိပြီး နားလည် သဘောပေါက်အောင် ရှင်းလင်းထားတဲ့အတွက် လေ့လာတဲ့သူတွေအတွက် အတော့်ကို အသုံးဝင်မယ့် စာအုပ်တစ်အုပ်ပါ။
http://www.worldwidemyanmar.com/news/headline/423-myanmar-version-html-css-ebook.html
မှာ သွားရောက်ယူနိုင်ပါတယ်။
ကဲ… Part 5 ကိုတောင် ရောက်လာပါပြီဗျာ။ ဒီနေ့မှာတော့ memory mangagement အပိုင်းကို လေ့လာရအောင်။ Script Language တော်တော်များများ (PHP ကဲ့သို့ ) ဟာ memory management ပိုင်းကို အလိုအလျောက်ဆောင်ရွက်ပေးပါတယ်။ ဒါပေမယ့် Objective-C မှာကတော့ သတိထားဖို့လိုပါတယ်။ object ကို create လုပ်ပြီးရင် release လုပ်ပေးဖို့လည်းလိုပါတယ်။
iPhone Development လုပ်ပြီဆိုရင် memory management ပိုင်းက အရေးပါပါတယ်။ ဘာလို့လည်းဆိုတော့ iPhone က memory limit က Desktop နဲ့ ယှဉ်ရင် နည်းပါတယ်။
Objective-C မှာ memory management အတွက် methods ၂ မျိုးရှိပါတယ်။ ပထမက reference counting နဲ့ ဒုတိယကတော့ garbage collection ပါ။ သင့်အနေနဲ့ စဉ်းစားလို့ရတာကတော့ manual နဲ့ automatic ပေါ့။ reference counting ဆိုတာက programmer က code ထည့်ပေးရပြီး garbage collection ကတော့ system ကို အလိုအလျောက် memory managing လုပ်ခိုင်းတာပေါ့။ Garbage collection က iPhone မှာ အလုပ်မလုပ်ဘူးဆိုတာကို သတိထားဖို့လိုပါတယ်။ အဲဒါက Mac developer တွေအတွက်သာ အသုံးဝင်ပါတယ်။
ကဲ… ကျွန်တော်တို့app ကို memory manage ဘယ်လိုလုပ်မလဲ။ ပထမဆုံးအနေနဲ့ ဘယ်အချိန်မှာ code က memory ကို အသုံးပြုပါသလဲ။ ကျွန်တော်တို့တွေက class instance (object) ကို ဖန်တီးလုပ်ပြီဆိုတာနဲ့ memory က allocated လုပ်ပါတယ်။ object က သေးသေးလေးပေမယ့် app က တဖြည်းဖြည်း ကြီးလာတာနဲ့အမျှ memory ပြဿနာတွေက ဖြစ်လာနိုင်ပါတယ်။
ကဲ.. ဥပမာ တစ်ခုလောက် ကြည့်ရအောင်။ ကျွန်တော်တို့ Drawing App တစ်ခုဆွဲပါတယ်။ user ဆွဲတဲ့ shape တစ်ခုတိုင်းက separate object တွေပေါ့။ ကျွန်တော်တို့မှာ shpare 100 ဆိုရင် object 100 memory ပေါ်မှာ နေရာယူသွားပါလိမ့်မယ်။ screen ကို clear လုပ်ပြီး နောက်ထပ် shape 100 ထပ်ဆွဲမယ်။ ကျွန်တော်တို့ဟာ memory manage မလုပ်ခဲ့ရင် အသစ် shape 100 လည်းပြီးရော object 200 memory ပေါ်မှာ နေရာယူထားပြီလေ။ အဲလိုမျိုးတွေ လုပ်နေရင် ကြာလာတဲ့အခါမှာ memory တွေ အရမ်းစားပါလိမ့်မယ်။
ကဲ… ကျွန်တော်တို့ reference counting နဲ့ စဉ်းစားကြည့်ရအောင်။ create new object လုပ်လိုက်တိုင်း memory ပေါ်မှာ နေရာယူသွားတယ်။ object က count 1 ဖြစ်သွားပြီ။ နောက်ထပ် object ဆောက်ရင် retain count က 2 ဖြစ်သွားပြီ။ တကယ်လို့ release ပြန်လုပ်လိုက်ရင် retain count က decrease ဖြစ်ပြီး 1 ဖြစ်သွားပါလိမ့်မယ်။ ထပ်ပြီး decrease လုပ်လိုက်ရင် 0 ဖြစ်သွားမယ်။ zero ဆိုရင် ထိန်းမထားတော့ပဲ memory ပေါ်မှာ free ဖြစ်သွားပါပြီ။
ကျွန်တော်တို့ ပထမဆုံး object တစ်ခုကို တည်ဆောက်ပါမယ်။ object တစ်ခုကို အောက်ကလို တည်ဆောက်ပါမယ်။
myCarClass *car = [myCarClass alloc];
ကျွန်တော်တို့ object ဆောက်ပြီးသွားရင် manual release သို့မဟုတ် autorelease ကို နောက်ပိုင်းမှာ လုပ်ပါမယ်။ သတိထားဖို့က object ကို manual release လုပ်ပြီးမှ autorelease ကို သွားခိုင်းလိုက်ရင် application က crash ဖြစ်သွားနိုင်ပါတယ်။
ကျွန်တော်တို့ oject ကို alloc နဲ့ တည်ဆောက်ပြီးပါပြီ။ အဲဒါတော့ reatin လုပ်ပါမယ်။ object က ဆောက်လိုက်တော့ object count က 1 ဖြစ်သွားပါပြီ။
[car reatin];
ထပ်ပြီး reatin လုပ်လိုက်တော့ count က 2 ဖြစ်သွားပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ ၂ ကြိမ် release လုပ်ပေးဖို့လိုပါတယ်။
XCode မှာ create project တစ်ခုဆောက်တဲ့အခါမှာ အချို့ code တွေက autorelease အတွက် ရေးထားတာကို သတိပြုမိမှာပါ။ code က အောက်ကလို မျိုး ပုံစံလေးပေါ့
NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init]; [pool drain];
Note: documentation အဟောင်းတွေမှာတော့ နောက်ဆုံး လိုင်းက drain အစား release ဖြစ်နေမှာပါ။ တကယ်တန်းတော့ အတူတူပါပဲ။ drain ပဲ သုံးသုံး release ပဲ သုံးသုံးအဆင်ပြေပါတယ်။
အပေါ်က code က autorelease အတွက်အလုပ်လုပ်ထားတာပါ။ ကျွန်တော်တို့တွေက object ကို autorelase message ပို့ထားလိုက်ပါတယ်။ drain message ကို sent လိုက်တဲ့အခါမှာတော့ object က release လုပ်သွားပါတယ်။ autorelease က အသုံးဝင်ပါတယ်။ pool စဆောက်တဲ့အချိန်ကနေ drain မလုပ်ခင်ထိ သုံးထားတဲ့ object တွေကို drain လုပ်တဲ့အချိန်မှာ အကုန် release လုပ်လိုက်ပါတယ်။ ကျွန်တော်တို့တွေ object ကို reatin count လုပ်ပေးနေစရာမလိုတော့ပဲ relase လွယ်လွယ်ကူကူ လုပ်ပေးလိုက်လို့ရပါတယ်။
nested autorelease pool နဲ့ ပတ်သက်ပြီးတော့ အကြမ်းရှင်းပြပေးလို့ရပါတယ်။ အဲဒါကို ဘာကြောင့်သုံးရတာလဲ။ တစ်ခါတစ်လေ loop ပတ်နေတဲ့အချိန်မှာ tempoary object ကို ဆောက်တဲ့ အခါလေးတွေ ရှိပါတယ်။
ဥပမာ။။ loop လုပ်နေတဲ့အခါမှာ temporary object ၂ ခု ဆောက်လိုက်ပါတယ်။ မလိုချင်တဲ့အခါမှာ အဲဒါကို autorelease ပြန်လုပ်ဖို့လိုပါတယ်။ အောက်က code လေးကို လေ့လာကြည့်လိုက်ပါ။
void main() { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSArray *args = [[NSProcessInfo processInfo] arguments]; for (NSString *fileName in args) { NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init]; NSError *error = nil; NSString *fileContents = [[[NSString alloc] initWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:&error] autorelease]; /* Process the string, creating and autoreleasing more objects. */ [loopPool drain]; } /* Do whatever cleanup is needed. */ [pool drain]; exit (EXIT_SUCCESS); }
အဲဒီ code လေးက တော်တော်ကောင်းပါတယ်။ အဲဒီမှာ ကျွန်တော်တို့အနေနဲ့ pool တစ်ခုကို စဆောက်လိုက်တယ်။ ပြီးတော့ loop ထဲဝင်တယ်။ Loop ထဲမှာ pool ကို ထပ်ဆောက်တယ်။ အဲဒီ အချိန်မှာပဲ object ၂ ခု ထပ်ဆောက်တယ်။ ပြီးတော့ loopPool ကို drain လုပ်လိုက်တယ်။ ဒါကြောင့် pool စဆောက်တဲ့အချိန်ကနေပြီး drain လုပ်တဲ့ကြားက object တွေကို autorelease လုပ်သွားပေးပါလိမ့်မယ်။ object တွေ create လုပ်ခဲ့တဲ့အတွက် စိုးရိမ်စရာမရှိတော့ဘူးပေါ့။ နောက်ဆုံး program ပြီးသွားတော့ drain ထပ်လုပ်လိုက်တယ်။ ရှိနေတဲ့ object တွေကို အကုန် clear လုပ်သွားပေးတယ်။
loop ထဲမှာ သုံးထားတဲ့အတွက် loop လုပ်တဲ့အချိန်မှာ object တွေများလာပြီး memory တွေစားမှာ စိုးရိမ်စရာမလိုတော့ဘူးပေါ့။ တကယ်လို့သာ release သာ ပြန်မလုပ်ပေးရင် loop တွေများလာလေလေ memory က သုံးတာ များလာလေလေ ဖြစ်မှာပေါ့။
အပေါ်မှာတုန်းကတော့ reatin နဲ့ပတ်သက်ပြီးပြောထားပြီးပါပြီ။ reatin ဘယ်နှစ်ခုရှိလဲ သိဖို့အတွက် reatinCount ကို အသုံးပြုနိုင်ပါတယ်။
NSLog(@"retainCount for car: %d", [car retainCount]);
retainCount က integer ဖြစ်တဲ့အတွက်ကြောင့် %d ကို သုံးထားပါတယ်။
Memory management က new programmer တွေအတွက် အနည်းငယ် နားလည်ရခက်ခဲနိုင်ပါတယ်။ အထူးသဖြင့် script langauge က လာတဲ့ programmer တွေအတွက်လည်း ခေါင်းရှုပ်စေနိုင်ပါတယ်။ ဒါပေမယ့် Objective-C မှာက memory management ကို ကိုယ်ပိုင် စိတ်ကျ ဖန်တီးနိုင်တဲ့အတွက်ကြောင့် program ပေါ့ပါးမှုက programmer ရဲ့ object တည်ဆောက်မှုနဲ့ release လုပ်မှုပေါ်မှာ မူတည်နေပါတယ်။ နားမလည်တာတွေကို မေးနိုင်ပါတယ်။
နောက်တစ်ပိုင်းမှာတော့ Objectiv-C နဲ့ ပတ်သက်ပြီး ရိုးရှင်းတဲ့ code တွေအကြောင်းရေးသားသွားပါအုံးမယ်။
reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-5/
အပိုင်း ၁ မှာ Programming ဆိုတာဘာ။ Programming Langauge ဆိုတာ ဘာလဲဆိုတာကို ရှင်းလင်းခဲ့ပါတယ်။ Programming Lanaguage Generation တွေကိုလည်း ရှင်းပြပြီးပါပြီ။ ဒီ အပိုင်း ၂ မှာတော့ ဘယ် langauge ကို လေ့လာသင့်သလဲဆိုတာကို ဆွေးနွေးပါမယ်။
အရင်ဆုံး ကျွန်တော် ဆွဲထားတဲ့ route map လေးကို ကြည့်လိုက်ပါ။
အဲဒါကတော့ သာမာန် သမာရိုးကျ သွားဖို့ လမ်းကြောင်းလေးပါ။
လုပ်ငန်းခွင် မဝင်သေးသူများ အနေနဲ့ အရင်ဆုံး route map လေးကို ကြည့်လိုက်ပါ။ အဲဒီမှာ ပထမဆုံး အဆင့်အနေနဲ့ C++ , Pseudo , Flowchart တွေနဲ့ စထားပါတယ်။ အခုနောက်ပိုင်း UCSY မှာ Flowchart နဲ့ Pseudo ကို သင်မသင်တော့ မသိတော့ပါ။ C++ မတိုင်ခင်မှာ Pseudo နဲ့ Flowchart ကို လေ့လာခြင်းအားဖြင့် programming flow နားလည်သွားဖို့ပါ။ Programming langauge တစ်ခုကို မသင်ခင်မှာ program flow ကို နားလည်ဖို့ analyst လုပ်တတ်ဖို့ လိုပါတယ်။ Programming က thinking က အရေးပါပါတယ်။ Program တစ်ခုကို စရေးတဲ့အခါမှာ thinking ပိုင်းကို အဓိကျပါတယ်။
တော်တော်များများဟာ C++ နဲ့ စတင်ပြီး ရေးရတာကို သဘောကျပြီးတော့ Pseudo နဲ့ Flowchart ကို လေ့လာရမှာကို သဘောမကျဘူး။ Pseudo နဲ့ Flow chart ကို သင်တဲ့အခါမှာ ပြန်စစ်ပေးဖို့ လူလိုပါတယ်။ C++ ကတော့ အခုရေး အခု run အခု အဖြေထွက်ပါပဲ။ ဒါကြောင့် လူအရမ်းများတဲ့ သင်တန်းတွေ UCSY တွေမှာ Pseudo နဲ့ Flow chart ကို စိတ်ဝင်စားမှု နည်းနိုင်ပါတယ်။
ပထမဆုံး လေ့လာသင့်တာကတော့ C ကို နည်းနည်းနဲ့ နောက်ပိုင်း C++ ကို ထပ်မံလေ့လာသင့်ပါတယ်။ C++ မှာ Object Oriented ပိုင်းကို နားလည်အောင် လေ့လာခဲ့ဖို့လိုပါတယ်။ ဒါမှသာ နောက်ပိုင်း အခြား Langauge ကို ကူးတဲ့အခါမှာ လွယ်ကူအောင်ပါ။
လက်ရှိ အလုပ်လုပ်နေပြီး programming ကို စိတ်ဝင်စားလို့ လေ့လာနေသူများအတွက်ကတော့ python က အသင့်တော်ဆုံးပဲ။ C++ ကတော့ အခြေခံကနေ စပြီး လေ့လာတာကောင်းပေမယ့် အချိန်မရှိတဲ့ သူများအတွက်ကတော့ python က လွယ်ကူမြန်ဆန်စွာ ရေးသားနိုင်တဲ့အတွက် အချိန်လည်း သိပ်မကုန်တော့ပါဘူး။ python ကိုလေ့လာပြီးသွားရင်တော့ အခြား language တွေကို လေ့လာလိုစိတ် အားနည်းသွားမှာတော့ အမှန်ပါပဲ။ python က အခြား language တွေထက် စာရင် လေ့လာရတာ လွယ်ကူပြီးတော့ ရေးသားရတာလည်း လွယ်ကူပါတယ်။
programming ကို လေ့လာတော့မယ်ဆိုရင် ဘယ်လိုင်းကို သွားမလို့ လေ့လာတာလဲဆိုတော့ မေးခွန်းကိုလည်း မေးသင့်ပါတယ်။ အဲဒီ မေးခွန်းပေါ်မှာ အခြေခံပြီးတော့ ဘယ် language ကို လေ့လာသင့်သလဲဆိုတာကိုလည်း ဆုံးဖြတ်သင့်ပါတယ်။ ဘယ် programming ကိုပဲ သွားသည် ဖြစ်စေ OOP ကိုတော့ ကျေညက်အောင် လေ့လာထားဖို့လိုပါတယ်။
Windows Platform ကိုသွားမယ်ဆိုရင်တော့ C++ နဲ့ပဲ စစ python နဲ့ ပဲ စစ အဆင်ပြေပါတယ်။ C++ ကို လေ့လာတဲ့သူတွေကတော့ C# သို့မဟုတ် Java ကို ကူးပြောင်းပြီး ရေးဆွဲတာက ပိုအဆင်ပြေမယ် ထင်ပါတယ်။ python အတွက်ကတော့ နည်းနည်း ထပ်ဖြည့်ပြီး လေ့လာရုံပါပဲ။
Mac and Linux ကိုသွားမယ်ဆိုရင်တော့ python နဲ့လည်း ရေးလို့ရသလို C++ နဲ့လည်း ရေးလို့ရပါတယ်။ Mac အတွက်ကတော့ C ကို အခြေခံထားတဲ့ objective-c ကို ထပ်ပြီး လေ့လာသင့်ပါတယ်။ C++ သမားတွေအတွက် လွယ်လွယ်ကူကူ objecive-c ကို လေ့လာနိုင်ပါတယ်။
Web Development ကို သွားမယ်ဆိုရင်တော့ C++ ကနေ PHP သို့မဟုတ် ASP.NET (C#) , Ruby on Rail စတာတွေ ကို ပြောင်းလဲ လေ့လာဖို့လာပါပြီ။ Python ကတော့ Django လိုမျိုး python framework တွေကို အသုံးပြုနိုင်ပါတယ်။ Web Development အတွက် ထွေထွေ ထူးထူး မပြောတော့ပါဘူး။ Route Map ကို လေ့လာလိုက်ရင် ရပါမယ်။ Web Development သွားဖို့အတွက် web essential ကို ကျေညက်နေဖို့လည်း အဓိကျပါတယ်။
Mobile Development မှာကတော့ C++ အခြေခံရှိထားတဲ့ သူတွေအနေနဲ့ အတော့်ကို အဆင်ပြေပါတယ်။ Java , Objective-C , Android SDK စတာတွေကို လွယ်လွယ်ကူကူ လေ့လာနိုင်ပေမယ့် python အတွက်တော့ mobile development က ထဲထဲဝင်ဝင် မရှိသေးပါဘူး။ ဒါကြောင့် python သမားတွေအနေနဲ့လည်း ကိုယ် develop လုပ်မယ့် mobile platform ပေါ်မူတည်ပြီး language ကို ထပ်မံလေ့ဖို့လိုပါတယ်။
ဘယ် language ကို စလေ့လာသင့်သလဲဆိုတဲ့ အထဲမှာ C နဲ့ python ၂ ခု ထဲက တစ်ခုပါ။ အခြေခံ ကောင်းလိုချင်ရင်တော့ C ကို စလေ့လာသင့်ပါတယ်။ C က python နဲ့ ယှဉ်ရင် အများကြီး လေ့လာရခက်ပြီးတော့ နောက်ပြီး အခြား language တွေကို ကူးပြောင်းလေ့လာတဲ့ အခါမှာ အဆင်ပြေပါလိမ့်မယ်။ လိုအပ်တဲ့ langauge ကို C အခြေခံရှိထားတဲ့သူတွေ အနေနဲ့ လွယ်လွယ်ကူကူ ပြောင်းလဲ လေ့လာနိုင်ပါတယ်။ Python သမားတွေအနေနဲ့ကတော့ အခြား langauge ကို ကူးပြောင်းပြီး လေ့လာဖို့ သိပ်မလိုဘူးလို့ ဆိုရမှာပေါ့။ mobile development က လွဲရင် အခြား platform တော်တော်များများမှာ python ကို အလုပ်လုပ်နိုင်ပါတယ်။ သတိထားစရာ တစ်ခုက python အတွက် web server setup က php ထက်စာရင် အနည်းငယ် ရှုပ်ထွေးပါတယ်။ ဒါတွေက နောက်ပိုင်း သူ့အလိုလို သင်သွားမှာဆိုတော့ မလိုအပ်ပါဘူး။
၁၀ တန်းပြီးခါစ လူတွေ သို့မဟုတ် လုပ်ငန်းခွင်ထဲက မဟုတ်တဲ့သူတွေအနေနဲ့ C++ ကို စတင်လေ့လာသင့်တယ်လို့ အကြံပေးပါရစေ။ ဘာလို့လည်းဆိုတော့ အခြား language တွေကို လွယ်လင့် တကူကူးပြောင်း လေလ့ာနိုင်အောင်ပါ။ လုပ်ငန်းခွင် ဝင်ရောက်နေတဲ့သူတွေအတွက်ကတော့ အချိန်မရှိတဲ့ ကြားကလေ့လာနေရတာ ဖြစ်လို့ python ကို စတင်လေ့လာသင့်ပါတယ်။
လိုအပ်တာတွေ ကျန်ခဲ့တာတွေကို comment ပေးပြီး ဆွေးနွေးနိုင်ပါတယ်ဗျာ။
programming တစ်ခုကို စသင်ဖို့ ရည်ရွယ်လိုက်တာနဲ့ ဘယ်ကနေ စသင်ရမလဲ။ ဘယ် language ကို စလေ့လာရမလဲဆိုတာက ပြဿနာ တစ်ရပ်ပါ။ သမာရိုးကျ computer တက္ကသိုလ် တက်ရောက်နေတဲ့သူတွေ အတွက်ကတော့ C , C++ နဲ့ စတင် ရင်းနှီး ကျွမ်းဝင်ရမှာပါ။ အဲဒါတွေ မစခင် သင် programming ဆိုတာကို ဘယ်လောက် သိထားပြီးပြီလဲ။
Programming ကိုလေ့လာတော့မယ့် ဆိုသူတွေအတွက် အကြီးမားဆုံး စတင် စိန်ခေါ်မှုက programming language ဆိုတာ ဘာလဲဆိုတာပဲ။ အဲဒီတော့ ကျွန်တော်တို့ ပထမဆုံး စဉ်းစားသင့်တာက Programming language ဆိုတာဘာလဲ ဆိုတာပဲ။
Programming ဆိုတာကို theory အရပြောရရင်တော့ computer တွေကို ခိုင်းစေဖို့ ဘာသာစကားလို့ ဆိုရမှာပေါ့။ အဲဒီလို ခိုင်းစေဖို့အတွက် ဘာသာစကားလိုအပ်လာပါတယ်။ ဂျပန်ကို ပြောဖို့ မြန်မာစကားမတတ်တဲ့ ဂျပန်ကို မြန်မာလို သွားပြောနေရင် ဟိုက နားလည်မှာ မဟုတ်ပါဘူး။ ကြားကနေ ဘာသာပြန်တစ်ယောက်လိုအပ်ပါတယ်။ ဒါမှမဟုတ် သူရော ကိုယ်ရော နားလည်မယ့် ဘာသာစကားတစ်ခုခုဖြစ်တဲ့ English စာလိုမျိုး ကြားခံ သုံးရပါလိမ့်မယ်။ ပိုပြီး ထိထိ ရောက်ရောက် ဖြစ်စေချင်ရင်တော့ သူ နားလည်ဆုံး ဘာသာစကားဖြစ်တဲ့ သူ့မိခင် ဘာသာစကား ဂျပန်လို ပြောခြင်းပါပဲ။
Programming Language ဆိုတာ ဒီလိုပါပဲ။ Computer က နားလည်တဲ့ ဘာသာစကား တစ်ခုခုကို ကြားခံပြီး computer ကို ခိုင်းစေရတာပါ။ Computer ကတော့ ပုံမှန်အားဖြင့် 0 နဲ့ 1 သာ အလုပ်လုပ်ပါတယ်။ သို့ပေမယ့် ကျွန်တော်တို့တွေက သူ့ကို ခိုင်းစေဖို့အတွက် 0 နဲ့ 1 တွေ ရေးပြီး command ပေးဖို့ ဆိုတာ အလွန်တရာမှ ခက်ခဲလှပါတယ်။ မဖြစ်နိုင်ဘူးတော့ မဟုတ်ပါ။ အဲဒီတော့ ကိုယ် နားလည်လွယ်ပြီး computer ကို တဆင့် ပြန်ခိုင်းရတဲ့ langauge တစ်ခုခုကို ကြားခံပြီး ဆောင်ရွက်ပေးဖို့ လိုအပ်လာပါပြီ။
programming language generation နဲ့ ပတ်သက်ပြီးတော့ programming ကို စတင် သင်တဲ့ သူတွေ တော်တော်များများ သိထားသင့်ပါတယ်။ မသိလို့ ဘာဖြစ်လည်း ဆိုတော့ ဘာမှတော့ မဖြစ်ပါဘူး။ သိထားတော့ လက်ရှိ ကိုယ် သုံးနေတာ ဘယ် generation ရောက်နေပြီလဲ။ ဒီ generation မတိုင်ခင်က ဘယ် language တွေ ရှိခဲ့လဲ။ အခု ကိုယ်လေ့လာနေတာက ဘယ် generation လဲ။ စတာတွေကို သိရှိနိုင်ပါတယ်။
1950 မတိုင်ခင်က UNIVAC I နဲ့ IBM 701 တို့ဟာ ပထမဆုံး machine language program လို့ ဆိုလို့ရပါတယ်။ သို့ပေမယ့် 1GL ဟာ လျင်မြန်စွာ ကုန်ဆုံးသွားပြီး 2GL ကို ကူးပြောင်းလာခဲ့ပါတယ်။
2GL ကတော့ လူသိများတဲ့ assembly language သို့မဟုတ် assembler ပေါ့။ assembler ကတော့ အခုထက်ထိတော့ အချို့နေရာတွေမှာ အသုံးချနေဆဲပါပဲ။
အဲဒီနောက်ပိုင်းမှာတော့ 3GL တွေ ဖြစ်တဲ့ FORTRAN , LISP, COBOL တွေ ထွက်ခဲ့ပါတယ်။ 3GL ဟာ ပိုမို ရေးသားရမှာ လွယ်ကူလာပြီး အရင်တုန်းက machine code တွေနဲ့ မတူညီတော့ပါဘူး။ 3GL ဟာ gerneral use အနေနဲ့ အသုံးချလာနိုင်ခဲ့ပါတယ်။ 3GL နဲ့ အတူတူ general purpos language တွေကိုလည်း ပေါ်ထွက်လာခဲ့ပါတယ်။
C language ကို 1969 နဲ့ 1973 ကြားမှာ developed လုပ်ခဲ့ပြီးတော့ အခုအချိန်ထိ popular ဖြစ်နေသေးတဲ့ langauge တစ်ခုပါ။ C ကို ထပ်ပြီးတော့ version အသစ်တိုးကာ 1980 မှာ C++ ကို ထုတ်ခဲ့ပါတယ်။ C++ က object-oriented နဲ့system programming တွေ ပါဝင်လာပါတယ်။
Third Generation နဲ့ အတူ လက်ရှိ အသုံးပြုနေတဲ့ general purpose programming language တွေကတော့ C, C++, C#, Java, Delphi, and Python တို့ ဖြစ်ပြီး သူတို့ဟာလည်း Third generation Language တွေပါပဲ။
Fourth generation language ကိုတော့ စီးပွားရေးဆိုင်ရာ business software တွေအတွက် ရည်ရွယ်ပြီး ဖန်တီးခဲ့ကြပါတယ်။ 3GL တွေက 4GL တွေနဲ့ ပူးပေါင်းဆောင်ရွက်ပြီး develop လုပ်နေရဆဲပါပဲ။ 4GL ထဲမှာ
ဥပမာ အနေနဲ့ ဆိုရရင် Database ထဲမှာ SQL ဖြစ်ပြီးတော့ Web Development မှာတော့ ColdFusion ပေါ့။
5GL ကတော့ အဓိကအားဖြင့် programmer မလိုပဲနဲ့ program တွေကို တည်ဆောက်ဖို့အတွက် ရည်ရွယ်ထားတာပါ။ 5GL တွေကို အဓိကအားဖြင့် Artificial Intelligence research တွေ မှာ အဓိက အသုံးပြုပါတယ်။ Prolog , OPS5, Mercury တို့က 5GL example တွေပေါ့။
အခုအချိန်မှာတော့ 5GL ထိ ရောက်နေပေမယ့် ကျွန်တော်တို့တွေ စပြီး လေ့လာသင့်တာကတော့ 3GL ပါပဲ။ လက်ရှိ တော်တော်များများ အသုံးပြုနေကြတာတွေဟာ 3GL တွေပါပဲ။ 4GL တွေနဲ့ အချို့နေရာတွေမှာ ပေါင်းသုံးကောင်း သုံးပါလိမ့်မယ်။ စလေ့လာမယ့်သူတွေကတော့ Database တွေ ဘာတွေကို လေ့လာဖို့ မလိုသေးပါဘူး။ ပထမဆုံး လေ့လာရမှာက 3GL Programming Langauge ပါ။
နောက် အပိုင်းမှာ လက်ရှိ အသုံးပြုနေတဲ့ Programming language တွေနဲ့ ဘယ်ဟာကို လေ့လာသင့်သလဲဆိုတာကို ဆွေးနွေးရေးသားသွားမှာပါ။ ဒီ post နဲ့ ပတ်သက်ပြီး မရှင်းတာတွေကို comment ပေးခဲ့လို့ရပါတယ်။
PHP ကို အခုမှ စလေ့လာမယ့်သူများအတွက် မိုးမြင့်ရှိန်ရေးထားတဲ့ စာအုပ်လေး မျှဝေလိုက်ပါတယ်။ PHP ရဲ့ အခြေခံနဲ့ ပတ်သက်ပြီးတော့ ပြည့်ပြည့်စုံစုံလေး မြန်မာလိုရေးပေးထားတဲ့အတွက် မြန်မာစာအုပ်မှ ဖတ်ချင်တယ်ဆိုတဲ့ သူများအတွက် အဆင်ပြေမယ့် စာအုပ်တစ်အုပ်ပါ။