HTML , CSS Myanmar Ebook

Planet Creator ရေးထားတဲ့ စာအုပ်ဖြစ်ပြီး HTML နဲ့ CSS ကို အခြေခံမှ စပြီး သေသေချာချာ ရေးထားတဲ့ စာအုပ်ကောင်းလေး တစ်အုပ်ပါ။ စာမျက်နှာပေါင်း ၁၉၇ မျက်နှာ ပါရှိပြီး နားလည် သဘောပေါက်အောင် ရှင်းလင်းထားတဲ့အတွက် လေ့လာတဲ့သူတွေအတွက် အတော့်ကို အသုံးဝင်မယ့် စာအုပ်တစ်အုပ်ပါ။

http://www.worldwidemyanmar.com/news/headline/423-myanmar-version-html-css-ebook.html

မှာ သွားရောက်ယူနိုင်ပါတယ်။

3 Opensource iPhone Game on App Store

iPhone game တွေထဲမှာလည်း Opensource Game လေးတွေ ရှိပါတယ်။ အောက်မှာပြထားတဲ့ game ၃ ခုဟာ လက်ရှိ app store မှာ ရှိနေတဲ့ game ပါ။

အဲဒီအတွက် source ကိုတော့ github မှာ ရှိထားပြီးသားပါ။

Continue reading “3 Opensource iPhone Game on App Store”

Learn Objective-C : Day 5

ကဲ… Part 5 ကိုတောင် ရောက်လာပါပြီဗျာ။ ဒီနေ့မှာတော့ memory mangagement အပိုင်းကို လေ့လာရအောင်။ Script Language တော်တော်များများ (PHP ကဲ့သို့ ) ဟာ memory management ပိုင်းကို အလိုအလျောက်ဆောင်ရွက်ပေးပါတယ်။ ဒါပေမယ့် Objective-C မှာကတော့ သတိထားဖို့လိုပါတယ်။ object ကို create လုပ်ပြီးရင် release လုပ်ပေးဖို့လည်းလိုပါတယ်။

Other Articles In This Series

iPhone Development လုပ်ပြီဆိုရင် memory management ပိုင်းက အရေးပါပါတယ်။ ဘာလို့လည်းဆိုတော့ iPhone က memory limit က Desktop နဲ့ ယှဉ်ရင် နည်းပါတယ်။

Two Approaches

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 တွေအတွက်သာ အသုံးဝင်ပါတယ်။

Reference Counting

ကဲ… ကျွန်တော်တို့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 ဖြစ်သွားပါပြီ။

Syntax

ကျွန်တော်တို့ ပထမဆုံး 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 လုပ်ပေးဖို့လိုပါတယ်။

Autorelease and Autorelease Pool’s

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’s

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 က သုံးတာ များလာလေလေ ဖြစ်မှာပေါ့။

retainCount

အပေါ်မှာတုန်းကတော့ reatin နဲ့ပတ်သက်ပြီးပြောထားပြီးပါပြီ။ reatin ဘယ်နှစ်ခုရှိလဲ သိဖို့အတွက် reatinCount ကို အသုံးပြုနိုင်ပါတယ်။

NSLog(@"retainCount for car: %d", [car retainCount]);

retainCount က integer ဖြစ်တဲ့အတွက်ကြောင့် %d ကို သုံးထားပါတယ်။

Wrapping Up

Memory management က new programmer တွေအတွက် အနည်းငယ် နားလည်ရခက်ခဲနိုင်ပါတယ်။ အထူးသဖြင့် script langauge က လာတဲ့ programmer တွေအတွက်လည်း ခေါင်းရှုပ်စေနိုင်ပါတယ်။ ဒါပေမယ့် Objective-C မှာက memory management ကို ကိုယ်ပိုင် စိတ်ကျ ဖန်တီးနိုင်တဲ့အတွက်ကြောင့် program ပေါ့ပါးမှုက programmer ရဲ့ object တည်ဆောက်မှုနဲ့ release လုပ်မှုပေါ်မှာ မူတည်နေပါတယ်။ နားမလည်တာတွေကို မေးနိုင်ပါတယ်။

Next Time

နောက်တစ်ပိုင်းမှာတော့ Objectiv-C နဲ့ ပတ်သက်ပြီး ရိုးရှင်းတဲ့ code တွေအကြောင်းရေးသားသွားပါအုံးမယ်။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-5/

ဘယ် programming language စ လေ့လာမလဲ ( Part 2 )

အပိုင်း ၁ မှာ 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 ကို ထပ်မံလေ့ဖို့လိုပါတယ်။

Summary

ဘယ် 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 စ လေ့လာမလဲ

programming တစ်ခုကို စသင်ဖို့ ရည်ရွယ်လိုက်တာနဲ့ ဘယ်ကနေ စသင်ရမလဲ။ ဘယ် language ကို စလေ့လာရမလဲဆိုတာက ပြဿနာ တစ်ရပ်ပါ။ သမာရိုးကျ computer တက္ကသိုလ် တက်ရောက်နေတဲ့သူတွေ အတွက်ကတော့ C , C++ နဲ့ စတင် ရင်းနှီး ကျွမ်းဝင်ရမှာပါ။ အဲဒါတွေ မစခင် သင် programming ဆိုတာကို ဘယ်လောက် သိထားပြီးပြီလဲ။

Programming Language ဆိုတာ ဘာလဲ။

Programming ကိုလေ့လာတော့မယ့် ဆိုသူတွေအတွက် အကြီးမားဆုံး စတင် စိန်ခေါ်မှုက programming language ဆိုတာ ဘာလဲဆိုတာပဲ။ အဲဒီတော့ ကျွန်တော်တို့ ပထမဆုံး စဉ်းစားသင့်တာက Programming language ဆိုတာဘာလဲ ဆိုတာပဲ။

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

Programming Language ဆိုတာ ဒီလိုပါပဲ။ Computer က နားလည်တဲ့ ဘာသာစကား တစ်ခုခုကို ကြားခံပြီး computer ကို ခိုင်းစေရတာပါ။ Computer ကတော့ ပုံမှန်အားဖြင့် 0 နဲ့ 1 သာ အလုပ်လုပ်ပါတယ်။ သို့ပေမယ့် ကျွန်တော်တို့တွေက သူ့ကို ခိုင်းစေဖို့အတွက် 0 နဲ့ 1 တွေ ရေးပြီး command ပေးဖို့ ဆိုတာ အလွန်တရာမှ ခက်ခဲလှပါတယ်။ မဖြစ်နိုင်ဘူးတော့ မဟုတ်ပါ။ အဲဒီတော့ ကိုယ် နားလည်လွယ်ပြီး computer ကို တဆင့် ပြန်ခိုင်းရတဲ့ langauge တစ်ခုခုကို ကြားခံပြီး ဆောင်ရွက်ပေးဖို့ လိုအပ်လာပါပြီ။

Language Generation

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

First Generation Language ( 1GL )

1950 မတိုင်ခင်က UNIVAC I နဲ့ IBM 701 တို့ဟာ ပထမဆုံး machine language program လို့ ဆိုလို့ရပါတယ်။ သို့ပေမယ့် 1GL ဟာ လျင်မြန်စွာ ကုန်ဆုံးသွားပြီး 2GL ကို ကူးပြောင်းလာခဲ့ပါတယ်။

Second Generation Language ( 2GL )

2GL ကတော့ လူသိများတဲ့ assembly language သို့မဟုတ် assembler ပေါ့။ assembler ကတော့ အခုထက်ထိတော့ အချို့နေရာတွေမှာ အသုံးချနေဆဲပါပဲ။

Third Generation Language ( 3GL )

အဲဒီနောက်ပိုင်းမှာတော့ 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 ( 4GL )

Fourth generation language ကိုတော့ စီးပွားရေးဆိုင်ရာ business software တွေအတွက် ရည်ရွယ်ပြီး ဖန်တီးခဲ့ကြပါတယ်။ 3GL တွေက 4GL တွေနဲ့ ပူးပေါင်းဆောင်ရွက်ပြီး develop လုပ်နေရဆဲပါပဲ။ 4GL ထဲမှာ

  • General Use
  • Database
  • Report generators
  • Data manipulation, analysis, and reporting languages
  • Data-stream languages
  • Database-driven GUI application development
  • Screen painters and generators
  • GUI creators
  • Mathematical optimization
  • Web development languages

ဥပမာ အနေနဲ့ ဆိုရရင် Database ထဲမှာ SQL ဖြစ်ပြီးတော့ Web Development မှာတော့ ColdFusion ပေါ့။

Fifth Generation Language ( 5GL )

5GL ကတော့ အဓိကအားဖြင့် programmer မလိုပဲနဲ့ program တွေကို တည်ဆောက်ဖို့အတွက် ရည်ရွယ်ထားတာပါ။ 5GL တွေကို အဓိကအားဖြင့် Artificial Intelligence research တွေ မှာ အဓိက အသုံးပြုပါတယ်။ Prolog , OPS5, Mercury တို့က 5GL example တွေပေါ့။

Summary

အခုအချိန်မှာတော့ 5GL ထိ ရောက်နေပေမယ့် ကျွန်တော်တို့တွေ စပြီး လေ့လာသင့်တာကတော့ 3GL ပါပဲ။ လက်ရှိ တော်တော်များများ အသုံးပြုနေကြတာတွေဟာ 3GL တွေပါပဲ။ 4GL တွေနဲ့ အချို့နေရာတွေမှာ ပေါင်းသုံးကောင်း သုံးပါလိမ့်မယ်။ စလေ့လာမယ့်သူတွေကတော့ Database တွေ ဘာတွေကို လေ့လာဖို့ မလိုသေးပါဘူး။ ပထမဆုံး လေ့လာရမှာက 3GL Programming Langauge ပါ။

What Next

နောက် အပိုင်းမှာ လက်ရှိ အသုံးပြုနေတဲ့ Programming language တွေနဲ့ ဘယ်ဟာကို လေ့လာသင့်သလဲဆိုတာကို ဆွေးနွေးရေးသားသွားမှာပါ။ ဒီ post နဲ့ ပတ်သက်ပြီး မရှင်းတာတွေကို comment ပေးခဲ့လို့ရပါတယ်။

Learn Objective-C Day 4

ပြီးခဲ့တဲ့ အပိုင်းတွေကတော့ အခြေခံလေးတွေကို ပြန်နွှေးပြီးပါပြီ။ ပြီးခဲ့တဲ့ အပိုင်း တွေကတော့

ကဲ .. အခု Day 4 လေး စလိုက်ရအောင်

Getting Started

အရင်ဆုံး Xcode ကို ဖွင့်လိုက်ပါ။ MacOSX အောက်က Applications ကို ရွေးပြီး Command Line Tool ကို click လုပ်လိုက်ပါ။ Type ကို Foundation လို့ ရွေးလိုက်ပါ။ File name ကို အဆင်ပြေတာပေးပါလိုက်ပါ။ ကျွန်တော်ကတော့ CarApp လို့နာမည်ပေးလိုက်တယ်။ ပြီးရင် ကျွန်တော်တို့တွေ New Class ဆောက်ဖို့လိုပါတယ်။ Command-N သို့မဟုတ် File > New File ကို သွားပါ။ Coca Class အောက်က Objective-C Class ကို ရွေးပါ။ subclass ကတော့ NSObjective ပဲ။ Next လုပ်ပြီးနောက် SimpleCar.m ဆိုပြီး နာမည်ပေးလိုက်ပါ။ ပြီးရင် Finish လုပ်လိုက်ပါ။

Coding the Interface

SimpleCar.h ကို ဖွင့်လိုက်ရင် အောက်ကလို မြင်ရပါလိမ့်မယ်။

#import <Cocoa/Cocoa.h>

@interface SimpleCar : NSObject {

}

@end

ဆိုတဲ့ file လေး ရလာပါမယ်။ Cocoa.h ကြောင့် ကျွန်တော်တို့တွေ NSString, NSMutableString စတာတွေ အသုံးပြုလို့ရလာပါတယ်။ ဟုတ်ပြီ။ Car နဲ့ ပတ်သက်တဲ့ Attribute တွေ ကျွန်တော်တို့တွေ ထည့်ရအောင်။ ဘာတွေလည်းဆိုတော့

  • Make
  • Model
  • VIN

စတာတွေပေါ့။ တခြား Properties တွေ ရှိပေမယ့် အခုတော့ ဒီလောက်ပဲ ထည့်ထားပါမယ်။ အဲဒါကို Cocoa မှာ ဒီလို ရေးလိုက်ပါတယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

@end

ကျွန်တော် တို့တွေ ပြီးခဲ့တဲ့ နေ့တုန်းကပြောခဲ့ဘူးပါတယ်။ Data တွေကို ဖတ်ဖို့ ရေးဖို့အတွက် function တွေ လိုအပ်ပါတယ်။ ဒီတော့ ကျွန်တော်တို့ method တွေ ထည့်ပါမယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

// set methods

- (void) setVin: (NSNumber*)newVin;

- (void) setMake: (NSString*)newMake;

- (void) setModel: (NSString*)setModel;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

@end

ဒါတွေကတော့ ကျွန်တော် Class ရဲ့ SET mthod ပေါ့။ နောက်ပြီးတော့ Parameter ၂ ခုနဲ့ function တစ်ခု ပါထည့်သွင်းထားပါတယ်။ Data Type တွေ တူညီအောင် ကျွန်တော်တို့တွေ ထည့်ပေးဖို့လိုပါတယ်။ ဥပမာ။။ vin က NSNumber ဖြစ်တဲ့အတွက်ကြောင့် setVin ကိုလည်း NSSNumber paramter ပို့ထားတာပေါ့။ နောက်ပြီးတော့ method တွေကို @end မတိုင်ခင်နဲ့ } အဆုံးမှာ ရေးရတာကို သတိထားစေချင်ပါတယ်။ ဟုတ်ပြီ။ Set Method တော့ ပြီးပြီ။ Get method ရေးရအောင်။

// set methods

- (void) setVin: (NSNumber*)newVin;

- (void) setMake: (NSString*)newMake;

- (void) setModel: (NSString*)newModel;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

// get methods

- (NSString*) make;

- (NSString*) model;

- (NSNumber*) vin;

return ပြန်စရာလိုတဲ့အခါမှာတော့ ကျွန်တော်တို့တွေ (void) ကို သုံးလို့မရတော့ပါဘူး။ Return ပြန်မယ့် data type ကို ထည့်သွင်းပေးဖို့လိုပါတယ်။

Coding the Implementation

အခု ကျွန်တော်တို့တွေ SimpleCar.h မှာ ပါမယ့် variable တွေ mehtod တွေ ရေးပြီးပါပြီ။ SimpleCar.m မှာ ကျွန်တော်တို့တွေ စပြီး Implement လုပ်ဖို့ လိုလာပါပြီ။ အပေါ်က method တွေမှာ ပါတဲ့ အတိုင်း function တွေကို အောက်ကလို ချရေးလိုက်ပါတယ်။

#import "SimpleCar.h"

@implementation SimpleCar

// set methods

- (void) setVin: (NSNumber*)newVin{

}

- (void) setMake: (NSString*)newMake{

}

- (void) setModel: (NSString*)newModel{

}

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel{

}

// get methods

- (NSString*) make{

}

- (NSString*) model{

}

- (NSNumber*) vin{

}

@end

make , model , vin အတွက်ကတော့ return ပြန်ဖို့ပဲ လိုတဲ့အတွက် ဒီလို ထပ်ပြီး ရေးလိုက်တယ်။

- (NSString*) make {

return make;

}

- (NSString*) model {

return model;

}

- (NSNumber*) vin {

return vin;

}

ဒီမှာ တချက် သတိထားဖို့က ကျွန်တော် variable ကို return ပြန်လိုက်တာပါ။ Method Name က သပ်သပ် variable name က သပ်သပ်ပါ။ method name အတိုင်း return ပြန်တာ မဟုတ်ပါဘူး။ variable name အတိုင်း method name ကို လိုက်ရေးရတာ မဟုတ်ပါဘူး။

ကဲ.. ရှေ့ဆက်ရအောင်။ ကျွန်တော်တို့တွေ အခြား set method ကို implement လုပ်ဖို့ လိုပါပြီ။

// set methods

- (void) setVin: (NSNumber*)newVin {

[vin release];

vin = [[NSNumber alloc] init];

vin = newVin;

}

- (void) setMake: (NSString*)newMake {

[make release];

make = [[NSString alloc] initWithString:newMake];

}

- (void) setModel: (NSString*)newModel {

[model release];

model = [[NSString alloc] initWithString:newModel];

}

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel {

// Reuse our methods from earlier

[self setMake:newMake];

[self setModel:newModel];

}

ဒီ code ကို ကြည့်ရင် ရှုပ်ထွေးသွားပါလိမ့်မယ်။ အခြား Language တွေနဲ့ မတူတာက NSStirng တို့ NSNumber တို့ကို clear လုပ်ချင်တဲ့အခါမှာ release ဆိုတာလေးကို သုံးရပါတယ်။ နောက်ပြီးတော့ alloc နဲ့ init လုပ်ပေးဖို့လိုပါတယ်။ အခြား Language တွေနဲ့ မတူညီတဲ့ အချက်တွေကြောင့် ခေါင်းနည်းနည်း ရှုပ်ရတတ်ပါတယ်။ code တွေ ရေးပြီးရင်တော့ memory ပေါ်ကနေ ပြန်ရှင်းဖို့လိုပါတယ်။ program ကို ပိတ်တဲ့အခါမှာ memory ပေါ်ကနေ အကုန် ရှင်းချခဲ့ပေးရပါမယ်။

-(void) dealloc

{

[vin release];

[make release];

[model release];

[super dealloc];

}

ဆိုတာလေးကို ထပ်ဖြည့်လိုက်ပါတယ်။

ကဲ.. အခုတော့ Implementation အဆင့်တော့ ပြီးသွားပါပြီ။ နောက်တဆင့် Testing ပေါ့။

Testing the Class

ကဲ… အခု Test အဆင့်ကို ရောက်လာပါပြီ။ ကျွန်တော်တို့ ရေးထားတာတွေ မှန်မမှန် စမ်းရအောင်ဗျာ။

CarApp.m ကို ဖွင့်လိုက်ပါ။

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// insert code here…

NSLog(@”Hello, World!”);

[pool drain];

return 0;

}[/objc]

အဲလို မျိုး ရေးထားတာလေးကို တွေ့မှာပါ။ အဲလိုရေးထားတာလေးကို အောက်ကလို ပြင်ကြည့်ရအောင်။

#import &lt;Foundation/Foundation.h&gt;

#import "SimpleCar.h"

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

SimpleCar *myCar = [[SimpleCar alloc] init];

NSNumber *newVin = [NSNumber numberWithInt:123];

[myCar setVin:newVin];

[myCar setMake:@"Honda" andModel:@"Civic"];

NSLog(@"The car is: %@ %@", [myCar make], [myCar model]);

NSLog(@"The vin is: %@", [myCar vin]);

[myCar release];

[pool drain];

return 0;

}

အဲလိုလေး ရေးပြီးတဲ့အခါမှာတော့ Build and Run ကို နှိပ်လိုက်ပါ။ ဘာမှ မမြင်ရရင် Run > Console ကို နှိပ်လိုက်ပါ။ Console Log မှာ The car is: Honda Civic , The car is: 123 ဆိုပြီး ပေါ်လာတာကို တွေ့ရပါလိမ့်မယ်။

Property and Synthesize

ကဲ .. ကျွန်တော်တို့တွေ အဆင်ပြေပြေနဲ့ code တော့ ရေးပြီးသွားပြီ။ Objective-C နဲ့လည်း Class ဆောက်လို့ရသွားပြီ။ ဒါပေမယ့် code တွေက ရှည်နေတယ်။ အဲဒီအတွက် @property နဲ့ @synthesize ကို သုံးပြီး ချုံလို့ရပါတယ်။

ကျွန်တော်တို့တွေ ပြီးခဲ့ SimpleCar.h ကို အောက်ကလို ပြောင်းလိုက်ပါမယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

@property(readwrite, retain) NSString* make;

@property(readwrite, retain) NSString* model;

@property(readwrite, retain) NSNumber* vin;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

@end 

အများကြီးကို တိုသွားပါတယ်။ setMake နဲ့ vin method ၂ ခုကို ပေါင်းပြီး ရေးလိုက်တာပေါ့။ @property က Interface မှာ ကြေငြာထားတာတွေကို ပြန်ထည့်ထားတာပါ။ readwrite လုပ်မယ်လို့ ဆိုလိုတာပေါ့။ အဲလိုပြင်လိုက်တော့ SimpleCar.m ကို လည်းပြင်ဖို့လိုလာပါပြီ။ အဲဒီတော့ ဒီလို ပြင်လိုက်ပါတယ်။

#import "SimpleCar.h"

@implementation SimpleCar

@synthesize make, model, vin;

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel {

[self setMake:newMake];

[self setModel:newModel];

}

@end

SimpleCar.h မှာ ကြေငြာထားတာတဲ့ Properties ကို အလုပ်လုပ်ဖို့အတွက် @synthesize နဲ့ variable တွေ ကြေငြာလိုက်ပါတယ်။ ဒါကြောင့် setMake, setModel စတာတွေကို သုံးလို့ရတာပေါ့။

အခုဆိုရင်တော့ Objective-C အကြောင်း အနည်းငယ်တော့ သိလာပြီလို့ထင်ပါတယ်။ နောက်နေ့တွေမှာ ဒီထက် ပိုပြီး ပျော်စရာကောင်းတဲ့ code တွေနဲ့ ရှေ့ဆက်သွားပါအုံးမယ်ဗျာ။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-4/

Learn Objective-C: Day 3

အခြား အပိုင်းက Series တွေကတော့

Class from Apple (and some history)

Apple မှာ classes တွေ အများကြီးရှိပြီး တော်တော်များများဟာ NS နဲ့ စပါတယ်။ NS ဆိုတာက NextStep ရဲ့ အတိုကောက်ပေါ့။ NeXT ဆိုတာကတော့ Steve Jobs Apple ကနေ ထွက်ပြီးနောက်ပိုင်းမှာ workstation computer တွေပေါ်မှာ run ဖို့ operation system တွေပါ။ NeXTSTEP မှာ object orientated programming ကို အသုံးပြုထားပါတယ်။ NS ကလည်း NeXTSTEP ကနေ ဆင်းသက်လာတာပါ။ Apple က NeXTSTEP ကို ဝယ်ပြီးနောက် Mac OS X ကို NeXTSTEP ပေါ်မှာ အခြေခံခဲ့ပြီး ထုတ်ခဲ့ပါတယ်။

အချို့ common classes တွေကို အောက်မှာ ဖော်ပြထားပါတယ်။

  • NSString ကတော့ string စာကြောင်းတွေ အတွက်ပေါ့။
  • NSMutableStrng ကတော့ mutable string တွေအတွက်ပါ။
  • NSArray ကတော့ immutable object တွေ အတွက်ပါ။
  • NSMutableArray ကတော့ object array mutable တွေအတွက်ပေါ့။
  • NSNumber ကတော့ number တွေအတွက်ပေါ့။

object က immutable ဆိုတာကတော့ object ကို create လုပ်ပြီး assign လုပ်တဲ့အခါမှာ value က static ဖြစ်သွားပါတယ်။ ပြန်ပြောင်းလို့မရတော့ပါဘူး။ တကယ်လို့ object က mutable ကတော့ ပြောင်းလဲလို့ရတဲ့ dynamic ပေါ့။ object ကို create လုပ်ပြီး နောက်ပိုင်း ပြန်ပြောင်းလို့ရပါတယ်။

Pointers and Initializing

ကဲ.. code လေးကို အရင် ကြည့်ရအောင်

#import

int main (int argc, const char * argv[]) {

NSString *testString;
testString = [[NSString alloc] init];
testString = @"Here's a test string in testString!";
NSLog(@"testString: %@", testString);

return 0;

}

Xcode ကနေ File > New Project > Mac OSX > Application > Command Line Tool > Type: Foundation ကနေ create လုပ်ထားလိုက်တာပါ။ ပေးထားတဲ့ နာမည်နဲ့ source folder အောက်က extension .m file လေးကို အပေါ်က code လို ပြင်ကြည့်ပါ။

အပေါ်က code တွေကနေ ရှင်းပြပါမယ်။

int main(int argc, const char * argv[]) { 

C သမားတွေကတော့ သိပြီးသားပါ။ program တစ်ပိုဒ်စရင် main နဲ့ စပါတယ်။ two parameter ရှိပြီး , နဲ့ ပိုင်းထားပါတယ်။ arguments passing လုပ်ဖို့အတွက်ပေါ့။

NSString *testString;
testString = [[NSString alloc] init];

အဲဒါကတော့ testString ကို pointer နဲ့ create လုပ်ပြီး NSString object ကို ခေါ်လိုက်တာပေါ့။ အပေါ်က တစ်ကြောင်းပြီးသွားပေမယ့် tesString က object အနေနဲ့ပဲ ရှိနေအုံးမှာပါ။ နောက် တစ်ကြောင်းကမှ testString ထဲမှာ init လုပ်ပေးလိုက်တာပါ။

အဲဒါကို အောက်ကလို ပြန်ပြင်ရေးလို့ရပါတယ်။

testString = [NSString alloc];
[testString init];

nested ရေးတာကတော့ တစ်ကြောင်းတည်းပြီးသလို အခု လို ၂ ကြောင်းနဲ့ ရေးလိုက်လည်း ရပါတယ်။

testString = @"Here's a test string in testString!";

NSString မှာ စာတွေ ထည့်ဖို့အတွက် @ sign ကို ရှေ့ ဆုံးမှာ ထည့်ဖို့လိုပါတယ်။

NSLog(@”testString: %@”, testString);

%@ ဆိုတာကတော့ Objective-C object ကို ဆိုလိုတာပါ။ %@ နေရမှာ testString ကို အစားထိုးမှာပါ။ ကဲ … အပေါ်က code ကို run ကြည့်လိုက်ပါ။ Command + Shfit + R ကို နှိပ်ပြီး Debugger Console ကို ဖွင့်ဖို့လိုပါတယ်။ NSLog နဲ့ ထုတ်ထားတာတွေကတော့ Debugger Console မှာပဲ မြင်ရမှာပါ။

Inheritance

NSString ကို ကျွန်တော်တို့ သိပါပြီ။ NSMutableString , NSArray စတာတွေကလည်း single NS Class တွေပါပဲ။ code တွေ အားလုံးမှာ init လုပ်ဖို့ လိုပါတယ်။ အဲလို လုပ်ရတာ အလုပ်ပိုတယ်လို့ ထင်နေတယ်မဟုတ်လား။ ဟုတ်ပါတယ်။ root Class က NSObject ဖြစ်ပြီး သူ့ ပေါ်မှာ implemented လုပ်ထားရပါတယ်။ ဘာကြောင့်လည်းဆိုတော့ အဆင့်ဆင့် inherit အချင်းချင်းလုပ်ထား ပါတယ်။

NSMutableString ဆိုရင် NSString က parent ပါ။ NSString ရဲ့ parent ကတော့ NSObject ပါ။

NSObject မှာ method အသုံးပြုဖို့အတွက် init လုပ်ပါတယ်။ ဒါကြောင့် subclass တွေမှာလည်း init ပါလာပါတယ်။ NSObject ဟာ တကယ်တန်းတော့ return ကိုယ့်ဘာသာ မပြန်ထားပါဘူး။ ဒါကြောင့် method တွေကို overwritten လုပ်လို့ရပါတယ်။ NSArray class ဟာ init ကို override လုပ်ထားပြီး functionality တွေ ပေါင်းထည့်ထားပါတယ်။ အဲဒါကြောင့် memory avaiable ဖြစ်ဖို့အတွက်ရယ် လိုအပ်တဲ့ instance variable တွေကိုလည်း ပြင်ဆင်နိုင်ပါတယ်။

inheriting classes တွေက ထပ်ပြီး extend လုပ်နိုင်တဲ့အတွက် အသုံးဝင်လှပါတယ်။ ကျွန်တော်တို့တွေဟာ extend class ကို ထပ်ဆောက်ပြီး လိုအပ်တဲ့ functionality တွေကို ထပ်မံ ဖြည့်ပေးနိုင်ပါတယ်။ ကျွန်တော်တို့ ကိုယ်ပိုင် NSString version ကို ဖန်တီးပြီး methods တွေ ထပ်ဖြည့်နိုင်ပါတယ်။

Summary

ကျွန်တော်တို့ Class တွေကို ဘယ်လို အသုံးချရမလဲ ဘယ်လို Inheritance လုပ်ထားလဲ။ နောက်ပြီး inheritance လုပ်ထားတဲ့အတွက် ဘယ်လို အသုံးဝင်သလဲဆိုတာတွေကို ဖော်ပြထားပါတယ်။

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

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-3/

Learn Objective-C: Day 2

Day 2 ကို မစခင် အရင်တုန်းက ရေးခဲ့တဲ့ Day 1 လေးကို ပြန်ညွှန်းလိုက်ပါတယ်။

Object Orientated Programming

ကျွန်တော်တို့ ဘာလို့ Objective C ကို သုံးရတာလဲ။ ဘာဖြစ်လို့ C language ကို မသုံးရတာလဲ။ ဘာလို့လည်းဆိုတော့ Objective C ဟာ Object Orientated Programming ဖြစ်ပြီး Application တွေကို တည်ဆောက်ရမှာ လွယ်ကူစေပါတယ်။ OOP ဆိုတာကတော့ programming paradigm တစ်ခုပါ။ သူက Software တစ်ခုကို တည်ဆောက်တဲ့အခါမှာ object တွေ attribute တွေ နောက်ပြီး function တွေ ပါဝင်လာပါတယ်။ OOP မှာ data abstraction, encapsulation, modularity, polymorphism, နဲ့ inheritance တွေ ပါဝင်ပါတယ်။ OOP အကြောင်းပြောရရင် စာအုပ် တစ်အုပ်စာ ဖြစ်သွားပါလိမ့်မယ်။ ဒါကြောင့် စာပြန်နွှေးတဲ့အနေနဲ့ ဒီနေ့မှာတော့ အခြေခံလေးတွေ ပြောသွားပါမယ်။

စဉ်းစားကြည့်လိုက်ပါ။ သင့်မှာ ကား တစ်စီးရှိတယ်။ အဲဒီ ကား ကို object လို့ သတ်မှတ်လို့ရပါတယ်။ ကမ္ဘာပေါ်မှာ ကားတွေ အများကြီးရှိပါတယ်။ ဒါကြောင့် ကားတွေမှာ properties တွေ ရှိလာတယ်။ model , color , engine type စသည်ဖြင့် အများကြီးရှိပါတယ်။ OOP အရဆိုရင် car က abstract class ဖြစ်ပြီး အဲဒီ class ပေါ်မှာ အခြေခံပြီး အခြား car တွေကို ဖန်တီးလို့ရပါတယ်။ car အသစ်တစ်ခုမှာ မူရင်း ကားမှာ သတ်မှတ်ထားတာတွေ အပြင် အခြား properties တွေ ပါလာနိုင်ပါသေးတယ်။

ဟုတ်ပြီ။ ဒါဆိုရင် ဘာကို object လို့ ခေါ်တာလဲ။ အရာတော်တော်များများဟာ Object တွေလို့ သတ်မှတ်လို့ရပါတယ်။ ဥပမာ လူဟာလည်း Object တစ်ခုလို့သတ်မှတ်ရင်လည်း ရပါတယ်။ Object တစ်ခု ထဲမှာ Properties တွေ function တွေ ပါဝင်လာပါတယ်။ လူဟာ လက် ၂ ဖက် ခြေ ၂ ချောင်း properties တွေ ပါဝင်ပြီး လက်တွေ ခြေတွေ ကို ခိုင်းစေဖို့ function တွေ ပါဝင်ပါတယ်။ ဒီလောက်ဆို နည်းနည်း ရှင်းမယ်ထင်တယ်။ OOP သင်ခဲ့တဲ့သူတွေကတော့ လွယ်လွယ် ကူကူ နားလည်နိုင်ပါလိမ့်မယ်။

Class ဆိုတာကလည်း Object ကိုခေါ်တာပါပဲ။ Object က class ကနေ ဖန်တီးထားတာပါ။a နောက်ပိုင်းမှာ တဖြည်းဖြည်းနဲ့ နားလည်ပါလိမ့်မယ်။ အခုထိ ဘာမှ မမြင်ရသေးတော့ နည်းနည်း စိမ်းနေသေးတာမို့ OOP ကို သိခါစကလူတွေ အတွက် ခေါင်း ရှုပ်ကောင်း ရှုပ်ပါလိမ့်မယ်။

Method

ဟုတ်ပြီ။ car ဆိုတဲ့ Object ရှိတယ်။ car မှာ ဆီဖြည့်တာရှိမယ်။ မောင်းတာ ရှိမယ်။ ကွေ့တာရှိမယ်။ နောက်ဆုတ်တာ ရှိမယ်။ ဒါသူ့ရဲ့ Method တွေပေါ့။ Objective C မှာ method ကို ခေါ်ရင် အောက်ကလို ခေါ်ပါတယ်။

[recipient message];

ဒါဆိုရင် car ဆိုတဲ့ object မှာ gas ဖြည့်တာ ဆိုရင် အောက်ကလို ခေါ်ပါလိမ့်မယ်။

[dansCar addGas];

ဒါက Objective C မှာ ခေါ်တဲ့ ပုံစံ ပါ။ Programming Langauge တော်တော်များများကတော့ အောက်ကလို ခေါ်ကြတာ များပါတယ်။

dansCar.addGas();

Objective C ဟာ အခြား programming language တွေနဲ့ ရေးသားတဲ့ syntax က နည်းနည်းလေး ကွဲပြားတဲ့အတွက် Objective C ကို မလေ့လာပဲ iPhone Development ကို ကူးတဲ့အခါမှာ syntax တွေကြောင့် စိတ်အနှောင့်အယှက် ဖြစ်ရတတ်ပါတယ်။

Attributes

gas ကတော့ ဖြည့်ပြီးသွားပြီ။ gas tank ထဲမှာ gas ဘယ်လောက်ရှိလဲသိရဖို့အတွက် လိုလာပါပြီ။ gas tank ထဲမှာ gas 50% ရှိတာလား။ 100% ရှိတာလား ဆိုတာကို သိဖို့လိုပါတယ်။ အဲဒီအတွက် attribute variable လိုလာပါပြီ။ Attribute ဆိုတာကတော့ ဒီ class အတွက် သီးသန့် variable ပေါ့ဗျာ။ OOP နားလည်ပြီးသားသူတွေအနေနဲ့တော့ ပြောလိုက်တာနဲ့ သဘောပေါက်မယ်ထင်ပါတယ်။ OOP အားနည်းတဲ့သူတွေ နားမလည်ရင်လည်း comment မှာ မေးလို့ရပါတယ်။ အားမငယ်ပါနဲ့။ Objective C လုပ်ရင်း OOP ကို နားလည်သွားပါလိမ့်မယ်။

Interface and Implementation

Objective C မှာ အဓိက အားဖြင့် file 2 file ပါဝင်ပါတယ်။ .m နဲ့ .h file ပါ။ Interface ကို .h နဲ့ သိမ်းပြီး implementation ကိုတော့ .m နဲ့ ရေးပါတယ်။

Interface

#import <Cocoa/Cocoa.h>

@interface Car : NSObject {

//This is where attributes go
float fillLevel;

}

//This is where methods go
- (void)addGas;

@end

အဲဒါက Interface တစ်ခု ဖန်တီးထားတာပါ။ ဒါက Objective-C ရဲ့ .h file အခြေခံပေါ့။ ဒီ ဥပမာ က syntax သဘောတရားပဲ ပြထားတဲ့အတွက် run လို့ရမှာမဟုတ်ပါဘူး။ Car ကို Interface တစ်ခု အနေနဲ့ တည်ဆောက်လိုက်တယ်။ NSObject ကတော့ Car class က NSObject ကို inherits လုပ်ထားတယ်ကို ပြောတာပါ။ Attribute အနေနဲ့ Float value fillLevel ပါပါတယ်။ နောက်ပြီး function အနေနဲ့ addGas ဆိုတာ ပါပါတယ်။ (void) ဆိုတာကတော့ return value မရှိဘူးလို့ ဆိုလိုတာပါ။ C နဲ့ ဆင်ပေမယ့် syntax လေးတွေက နည်းနည်း ကွာပါတယ်။

Implementation

#import "Car.h"

@implementation Car

-(void) addGas {
// code goes here to add gas
}

@end

ဒါကတော့ Implementation ပိုင်းဖြစ်တဲ့ .m အပိုင်းပေါ့။ interface မှာ ပြောထားတဲ့ function ကို implementation လုပ်ပါတယ်။ နောက်ပြီး interface မှာ ကြေငြာထားတဲ့ attribute ကို ခေါ်ယူပြီး အသုံးပြုလို့ရပါတယ်။ addGas ကနေ gas ဖြည့်တဲ့ function ကို ရေးသားရပါမယ်။

ကဲ.. ဒီနေ့တော့ ဒီလောက်ပါပဲ။ အခုဆိုရင် Objective C အကြောင်း အနည်းငယ် သိသွားလောက်ပါပြီ။ နောက်နေ့တွေမှာ Objective C အကြောင်းကို ဆက်သွားပါမယ်။ အခုတော့ အခြေခံ သဘောတရားလေးတွေ နွှေးပြီးပြီမို့ Objective C အပိုင်းကိုပဲ ဆက်သွားပါတော့မယ်။

reference : http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-2/

PHP Myanmar Ebook

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

http://www.mediafire.com/?bika34i9w48f93a

Learn Objective C : Day 1

Objective C series ထဲမှာ အခြား အပိုင်းများ

Objective C ဆိုတာ ဘာလဲ။

Objective C ဆိုတာကတော့ Objective Oriented Language တစ်ခုဖြစ်ပြီး C Language ပေါ်မှာ အခြေခံထားခြင်းဖြစ်ပါတယ်။ သူဟာလက်ရှိ Mac OS X နဲ့ iOS အတွက် အဓိက programming language တစ်ခုပါပဲ။ အရင်တုန်းကတော့ NeXTSTEP OS ရဲ့ အဓိက language တစ်ခုပါ။ အဲဒီ OS ကို apple က ဝယ်ပြီး OS X ကို ထုတ်လုပ်ခဲ့ပါတယ်။

Objective C ဟာ C ကို အခြေခံထားပြီး C ကိုလည်း run နိုင်ပါတယ်။ Objective C ဟာ C ပါ run နိုင်တာကြောင့် C လုပ်နိုင်သမျှ အကုန်လုံးကို Objective C က လုပ်နိုင်ပါတယ်။

ဘာတွေ လိုအပ်သလဲ။

အခု ကျွန်တော်တို့ iPhone Development မလုပ်သေးခင် Objective C အကြောင်းကို သိထားဖို့လိုပါတယ်။ Objective C ကို စမ်းဖို့အတွက် XCode ကို သွင်းတဲ့အခါမှာ Mac OSX SDK ကိုပါသွင်းခဲ့ဖို့ လိုပါလိမ့်မယ်။ iPhone SDK ကို သွင်းတဲ့အခါမှာ XCode , Interface Builder အပြင် အခြား Application တွေပါပါဝင်ပါတယ်။ ထို့အတူ gcc ကိုလည်း အလိုအလျောက်သွင်းသွားပါလိမ့်မယ်။

Objective C ကို လေ့လာတဲ့ အခါမှာ C ကို အခြေခံသိထားတဲ့ သူတွေဆိုရင် ပိုကောင်းပါလိမ့်မယ်။ C programming language က programmer တော်တော်များများရဲ့ ပထမဆုံး အခြေခံ language ဆိုလည်း မများပါဘူး။ တကယ်လို့ C ကို မလေ့လခဲ့လည်း ကိစ္စတော့ သိပ်မရှိပါဘူး။ Programming ကို တတ်ကျွမ်းထားရင် လေ့လာနိုင်ပါလိမ့်မယ်။

iPhone Development လုပ်ဖို့အတွက် Mac OSX လိုအပ်ပါတယ်။ Intel CPU Mac တွေ လိုအပ်ပါတယ်။ ဒါကြောင့် Mac user မဟုတ်တဲ့သူတွေအတွက် Objetive C ကို လေ့လာလို့ ရမှာမဟုတ်ပါဘူး။ နောက်ပြီးတော့ Objective C ကို အဓိက ထားမှာ ဖြစ်တဲ့အတွက်ကြောင့် iPhone Development ကို ချက်ခြင်း ကူးမှာ မဟုတ်ပါဘူး။ Objective C အခြေခံမရှိပဲ iPhone Development ပိုင်းကို ကူးတဲ့အခါမှာ ပြဿနာတွေ ကြံုတတ်ပါတယ်။

Compile လုပ်ခြင်း

GCC က ကျွန်တော်တို့ စက်တွေထဲမှာ ရှိနေပြီးသား ဖြစ်တဲ့အတွက် သီးသန့် သွင်းနေစရာ မလိုတော့ပါဘူး။ တစ်ခါတည်း code တွေကို compile လုပ်လို့ရပါတယ်။ အခု အပိုင်းမှာတော့ C ကိုပဲ Mac မှာ ဘယ်လို compile လုပ်သလဲဆိုတာလေးကို အခြေခံအနေနဲ့ ရေးသားမှာပါ။ Application -&gt; Terminal ကို ဖွင့်ပြီး Terminal ကနေ ကျွန်တော်တို့ gcc ကို compile လုပ်ရပါတယ်။

[lang name=shell]$gcc inputfile.m -o outputfile[/c]

အဲလို မျိုး compile လုပ်ပြီးသား program ကို run ဖို့အတွက်ကတော့

[lang name=shell]$./outputfile[/c]

ဆိုပြီး run လိုက်လို့ရပါတယ်။

The Basics

ကဲ … ကျွန်တော်တို့တွေ ဥပမာလေး တစ်ခုလောက် စမ်းရအောင်။ Desktop ပေါ်မှာ Test ဆိုတဲ့ Folder လေး ဆောက်လိုက်ပါ။ Texteditor မှာ C code ကို အောက်ပါ အတိုင်း ရိုက်နိုင်ပါတယ်။

#include &lt;stdio.h&gt;
int main(){
printf("Hello World\n");
return 0;
}

ပြီးတဲ့ အခါမှာ Test ဆိုတဲ့ Folder ထဲမှာ program1.m နာမည်နဲ့ သိမ်းလိုက်ပါ။ Terminal ကို ဖွင့်ပြီး

$cd ~/Desktop/Test
$gcc program1.m -o program1
$./program1

အဲဒါဆို compile လုပ်ပြီးသား program ကို run လိုက်တဲ့အခါမှာတော့ Hello World ဆိုတဲ့ စာလေးထွက်လာပါလိမ့်မယ်။ code လေးကတော့ ရှင်းရှင်းလေးပါပဲ။ computer တက္ကသိုလ် first year ပြီးထားတဲ့သူတိုင်း သိတဲ့ code လေးပါ။ printf နဲ့ ထုတ်ပြီး \n ကတော့ တစ်ကြောင်းဆင်းထားလိုက်တာပါ။

Variable

Variable ကတော့ data တွေကို memory ပေါ်မှာ သိမ်းဖို့အတွက်ပါ။ Variable တွေမှာ variable type တွေ ရှိပါတယ်။ ဒါတွေကတော့ programming အခြေခံတတ်ထားပြီးသားသူတွေအတွက် သိပြီးသားလို့ ထင်ပါတယ်။ variable type တွေကတော့

  • int – integer နံပတ်တွေကို သိမ်းဖို့အတွက်ပါ။
  • char – character တွေကို သိမ်းဖို့အတွက်ပေါ့။
  • float – ဒဿမ ကိန်းတွေအတွက်ပါ။
  • double – ဒဿမ ကိန်းတွေအတွက်ပါပဲ။ ဒါပေမယ့် သူက float ထက် ပိုပြီး အရေအတွက်များပါတယ်။

variable ကို ဘာလို့ အသုံးပြုရသလဲဆိုတော့

1+10 = 11

ဖြစ်ပါမယ်။ အမြဲ ပုံသေ မဟုတ်ချင်တဲ့အခါမှာတော့ variable ကို အသုံးပြုပါတယ်။

1+i= ?

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

#include &lt;stdio.h&gt;
int main(){
int someNumber = 123;
printf("My number is %i \n", someNumber);
return 0;
}

အဲဒါကို run လိုက်ရင် 123 ဆိုပြီး ဖြစ်သွားပါလိမ့်မယ်။ printf ကို သုံးတဲ့အခါမှာ variable ပေါ်မယ့် နေရာတွေကို ဘာ variable ဆိုပြီး data type ပေါ်မူတည်ပြီး text လေးထည့်ပေးရပါတယ်။ အခု ဥပမာမှာ %i ကို ထည့်ထားတာ တွေ့ပါလိမ့်မယ်။ အဲဒါက someNumber က int ဖြစ်နေလို့ပါ။ အခြားဟာတွေအတွက် အောက်မှာ ကြည့်နိုင်ပါတယ်။

  • %i – integer အတွက်
  • %f – float အတွက်
  • %e – double အတွက်
  • %c – char အတွက်

ဒါတွေက အရေးကြီးပါတယ်။ C မှာ သာမဟုတ် နောက်ပိုင်း Objective C ကို ရေးသားရာမှာလည်း အသုံးများလာပါလိမ့်မယ်။ အဲဒီအထဲမှာ character က string အတွက် အသုံးပြုမယ်ဆိုရင် အခန်းတွေ အများကြီးနဲ့ တွဲပြီး အသုံးပြုရပါတယ်။ ဥပမာ။။ Hello World ဆိုတဲ့ စာလုံး ၁၁ လုံး မှာဆိုရင် chr[0] က H ပေါ့။ အဲလိုမျိုး 0 ကနေ စပြီး 10 အထိ အခန်းပုံစံတွေနဲ့ အသုံးပြုရပါတယ်။

Conditionals

လောကမှာ အရာအားလုံးက တဆင့်ပြီး တဆင့်ဖြစ်နေတာ ရှိနေသလို အချို့နေရာတွေမှာကတော့ ဒါဖြစ်ရင်ဒါလုပ် မဖြစ်ခဲ့ရင် ဒါလုပ် ဆိုတဲ့ Conditional တွေ ရှိပါတယ်။ Programming မှာလည်း ရှိပါတယ်။ အဲဒီအခါမှာ programming မှာ if နဲ့ အသုံးပြုပါတယ်။ code ကတော့ အောက်မှာ ဥပမာ ပေးထားပါတယ်။

#include &lt;stdio.h&gt;
int main()
{
if(1 == 1) { // This is always true

// Do some stuff here

}

return 0;
}

1 နဲ့ 1 သာ တူခဲ့ရင် true ဖြစ်ပြီး အောက်က { နဲ့ စပြီး } ပိတ်ထားတဲ့ ကြားက code တွေကို အလုပ်လုပ်မှာပါ။ မဖြစ်ခဲ့ရင် condition အတွက်တော့ else ဆိုတာကို အသုံးပြုနိုင်ပါတယ်။ // နဲ့ ရေးထားတာတွေက comment ပါ။

int main(){

if(1==1){

// Do some stuff here.

}

else{

// The universe is broken!

}

return 0;

}

ကျွန်တော်တို့တွေ အဲဒီ 1==1 ဆိုတဲ့ နေရာတွေမှာ variable တွေထားပြီး စစ်နိုင်ပါတယ်။ i==1 ဖြစ်လားဆိုသလိုမျိုးပေါ့

Loop

ကြိမ်ဖန်များစွာ ထပ်ခါ ထပ်ခါ လုပ်နေရင် Loop လုပ်တယ်လို့ ခေါ်ပါတယ်။ Looping အတွက် ကျွန်တော်တို့တွေ for , while , do တွေကို အသုံးပြုကြပါတယ်။

// if loop

int main () {

int i = 9;

int x = 0;

for (x = 0; x &amp;lt; i; x++){

printf("Count is: %i\n", x);

}

return 0;

}

အဲဒါလေးကတော့ for loop ပေါ့။ x က 0 ကနေ စပြီးတော့ i ထက် ငယ်တဲ့အထိပေါ့။ i က 9 ဖြစ်တဲ့အတွက်ကြောင့် 0 ကနေ 8 အထိ အလုပ်လုပ်ပါမယ်။ အဲဒီတော့ Count is 0 ကနေ Count is 8 ထိကို ဖော်ပြပေးပါလိမ့်မယ်။

// while loop

int main () {

int x = 0;

while (x &lt; 10){

printf("Count is: %i\n", x); //Watch OUT! Something is missing.

}

return 0;

}

ဒါကတော့ while loop ပေါ့။ သူကတော့ variable တစ်ခုထဲပါပဲ။ x ကို 0 လို့ သတ်မှတ်ထားတယ်။ 10 ထက် ငယ်နေသ၍ အလုပ်လုပ်မယ်လို့ ဆိုထားတာပါ။ ဒါပေမယ့် အဲဒီ code ကို run ရင် ပြီးတော့မှာ မဟုတ်ပါဘူး။ ဘာကြောင့်လဲဆိုတော့ x တန်ဖိုး မပြောင်းလဲသွားတဲ့အတွက်ကြောင့်ပါ။ for loop မှာတုန်းက x++ ဆိုပြီး x တန်ဖိုးကို ၁ တိုးတိုး သွားပါတယ်။ while loop မှာလည်း အဲလို တန်ဖိုး တိုးပေးဖို့လိုပါတယ်။ အဲဒါကြောင့် အောက်ကလို နည်းနည်းပြင်လိုက်ပါတယ်။

// while loop
int main () {
int x = 0;
while (x &lt; 10){
x++;
printf("Count is: %i\n", x);
}

return 0;
}

အဲဒီအခါ x ကို ၁ တိုးတိုးသွားတဲ့အတွက် ၁၀ ရောက်တာနဲ့ ၁၀ ထက် မငယ်တော့တာကြောင့် loop က ထွက်သွားပါလိမ့်မယ်။ do loop က လည်း while loop နဲ့ အတူတူပါပဲ။ မတူတာကတော့ condition ကို အောက်မှာ စစ်တာပါပဲ။ while loop က process မစခင် စစ်ပေမယ့် do loop က process ကို အနည်းဆုံး ၁ ခေါက်လုပ်ပြီးမှ condition ကို စစ်ပါတယ်။

// do loop

int main () {

int x = 0;

do {

x++;

printf("Count is: %i\n", x);

} while(x &lt; 10);

return 0;

}

Pointer

pointer က memory ပေါ်က address နံပတ်ကို မှတ်ထားတာပါ။ variable က value ကို မှတ်ပေမယ့် pointer က memory address ကို မှတ်ထားပြီး အဲဒီ memory address ကို value ကို လှမ်းယူတာပေါ့။ ဥပမာ။။ variable value က အမြဲ ပေါင်းနေပေမယ့် variable ရဲ့ address က တစ်ခုတည်းမှာပဲ value တွေ ပြောင်းပြောင်းသွားနေတာပါ။ ဒါကြောင့် address နံပတ်ကို လှမ်းခေါ်လိုက်ရင် variable မှာ ပြောင်းထားတဲ့ value ကို ရနိုင်ပါတယ်။

int foo = 123; // This is an integer variable

int *ptr = &amp;foo; // This is a pointer to an integer variable

ရှုပ်သွားလောက်ပြီထင်တယ်။ နောက်ပိုင်းမှာ Objective-C လေ့လာရင်း pointer အသုံးပြုပုံတွေ တွေ့လာမှာပါ။ အဲဒီ အခါ ထပ်ရှင်းပြတာပေါ့။

အဆုံးသတ်ခြင်း

ဒီနေ့မှာတော့ Objective-C မစခင် C ကို ပြန်နွှေပေးတာပါ။ လွယ်လွယ်လေးနဲ့ ပြန်မှတ်မိအောင်ပေါ့။ အချို့တွေကလည်း C ကို အသုံးမပြုတာကြာပြီဆိုတော့ မေ့သွားလောက်ပြီ။ ဒါကြောင့် Objective-C မစခင် ပြန်ပြီး နွှေးပေးတဲ့ သဘောပါ။ နောက်နေ့မှာ Objective-C အကြောင်း Intro လေး စပါမယ်။

Reference : http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-1/

MVC Post Collection

MVC နဲ့ သက်ဆိုင်တဲ့ Post လေးတွေ ကို စုစည်း တင်ပြထားပါတယ်။

PHP MVC Framework ဘယ်လို ဖန်တီးရသလဲဆိုတာကို အောက်က link တွေကနေ လေ့လာလို့ရပါတယ်။

HTML5

HTML 5 ဆိုတာကတော့ အခုနောက်ပိုင်း ခေတ်စားလာပါတယ်။ အခုနောက်ပိုင်း Browser တွေဟာ HTML5 ကို support လုပ်လာပါပြီ။ နောက်ပိုင်းမှာ website တွေဟာ HTML5 ကို အဓိက အသုံးပြုတော့မှာပါ။ HTML5 ဆိုတာဘာလဲ။ HTML5 က ဘာတွေ ထူးလဲ။ HTML5 ကို ဘယ်မှာလေ့လာလို့ရမလဲ။

HTML 5 ~= HTML 5 + jsAPI + CSS3

လို့ ဆိုလို့ရပါတယ်။ HTML ဆိုတာက tag တွေပါပဲ။ ထူးထူးခြားခြားရယ်လို့ မရှိလာပေမယ့် HTML5 နဲ့ အတူ တွဲပါလာတဲ့ javascript API အသစ်တွေနဲ့ CSS3 က ထူးခြားမှုတွေ ဖြစ်စေပါတယ်။

Continue reading “HTML5”

CSS – Part 3 : Text Formating

Text formatting ဆိုတာကတော့ စာလုံးတွေကို အရောင်ထည့်တာတွေ နောက်ပြီး font တွေပြောင်းတာ alignment လုပ်တာ စတာတွေကို css ကို ဆောင်ရွက်လို့ရပါတယ်။

Text Color

text color ကိုတော့ CSS မှာ color လို့သုံးပါတယ်။ အောက်မှာ ဥပမာ ကြည့်ပါ။

body { color:#FF0000; }

လို့ဆိုရင် body စာလုံးတွေက အနီရောင်နဲ့ ပြပေးမှာပါ။

Text alignment

text alignment ကတော့ left, right , center,justify ဆိုပြီး သတ်မှတ်ပေးတာပါ။ ကျွန်တော်တို့ html မှာက align နဲ့ လုပ်ခဲ့တာ မှတ်မိအုံးမယ်ထင်ပါတယ်။ CSS မှာကတော့

p&nbsp; { text-align: center; }
h1 { text-align: right; }
h2 { text-align : justify }

left ကတော့ default ပါ။ ဒါလေးတွေက လွယ်သေးတော့ ကိုယ့်ဘာသာ ကိုယ်စမ်းကြည့်လိုက်ပါ။

Text Transformation

ကျွန်တော်တို့တွေ HTML မှာ upper case တွေ lower case တွေပြောင်းချင်ရင် စာတွေ ပြန်ပြင်ရိုက်ရပါတယ်။ CSS သုံးရင် အဲလို ပြန်ပြင်ရိုက်တဲ့ ပြဿနာ ရှင်းသွားပါတယ်။ အောက်က example လေး ကို ကြည့်ကြည့်ပါ။

<html>
<head>
<title>Sample</title>
<style type="text/css">
p.uppercase {text-transform:uppercase;}
p.lowercase {text-transform:lowercase;}
p.capitalize {text-transform:capitalize;}
</style>
<body>
<p class="uppercase">uppder case</p>
<p class="lowercase">LOWER CASE</p>
<p class="capitalize">capitalize</p>
</body>
</head>
</html>

Text Indentation

စာလုံးတွေကိုရွှေ့ချင်တယ်ဆိုရင် indentation ကို သုံးလို့ရပါတယ်။ အောက်က ဥပမာလေး ကိုကြည့်ကြည့်ပါ။

<html>
<head>
<title>Sample</title>
<style type="text/css">
p {text-indent:50px;}
</style>
<body>
<p>
Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing Testing 
</p>
</body>
</head>
</html>

Space between characters

Characters တစ်ခုနဲ့ တစ်ခုကြား space တွေကို ခြားချင်ရင်တော့ letter-spacing ဆိုတာကို သုံးလို့ရပါတယ်။

<html>
<head>
<style type="text/css">
h1 {letter-spacing:2px;}
h2 {letter-spacing:-3px;}
</style>
</head>

<body>
<h1>This is heading 1</h1>
<h2>This is heading 2</h2>
</body>
</html>

Space Between Lines

Characters တစ်ခုနဲ့ တစ်ခုကြား space အကွာအဝေး ချိန်ညှိလို့ရသလို line တစ်ခုနဲ့ တစ်ခုကြားလည်း line-height နဲ့ ချိန်ညှိလို့ရပါတယ်။ အောက်က example လေးကို လေ့လာကြည့်ပါ။

<html>
<head>
<style type="text/css">
p.small {line-height:90%;}
p.big {line-height:200%;}
</style>
</head>

<body>
<p>
This is a paragraph with a standard line-height.
The default line height in most browsers is about 110% to 120%.
This is a paragraph with a standard line-height.
</p>

<p class="small">
This is a paragraph with a smaller line-height.
This is a paragraph with a smaller line-height.
This is a paragraph with a smaller line-height.
</p>

<p class="big">
This is a paragraph with a bigger line-height.
This is a paragraph with a bigger line-height.
This is a paragraph with a bigger line-height.
</p>

</body>
</html>

Right To Left Text

ဒါကတော့ ကျွန်တော်တို့တွေ သုံးခဲတယ်။ left to right ရေးရတဲ့ ဘာသာစကားတွေအတွက် သုံးတာပါ။ ဥပမာ တော့ မပြတော့ဘူး။ ဘယ်လိုပေါ်လဲ သိချင်ရင် စမ်းကြည့်နိုင်ပါတယ်။

p{direction:rtl;}

Word Spacing

Character spacing , line spacing တွေပြီးတော့ word spacing ပေါ့။

<html>
<head>
<style type="text/css">
p
{ 
word-spacing:30px;
}
</style>
</head>
<body>

<p>
This is some text. This is some text.
</p>

</body>
</html>

Nowrap

စာလုံးတွေကို wrap မဖြစ်ချင်ဘူး။ စာလုံးက တစ်တန်းပြည့်သွားပေမယ့် အောက်တစ်လိုင်း မဆင်းသွား စေချင်ဘူးဆိုရင် white-space ကို nowrap ပေးရပါတယ်။

p
{
white-space:nowrap;
}

ကိုယ့်ဘာသာ ကိုယ်စမ်းကြည့်လိုက်ပေါ့။

Vertical Align

image တွေမှာ ကျွန်တော်တို့တွေ HTML တုန်းက align တွေလိုက်ထည့်ရတယ်။ text align ညှိတာပေါ့။ အဲလိုမျိုးပဲ CSS မှာလည်း သုံးလို့ရပါတယ်။

<html>
<head>
<style type="text/css">
img.top {vertical-align:text-top;}
img.bottom {vertical-align:text-bottom;}
</style>
</head>

<body>
<p>An <img src="w3schools_logo.gif" alt="W3Schools" width="270" height="50" /> image with a default alignment.</p> 
<p>An <img class="top" src="w3schools_logo.gif" alt="W3Schools" width="270" height="50" /> image with a text-top alignment.</p> 
<p>An <img class="bottom" src="w3schools_logo.gif" alt="W3Schools" width="270" height="50" /> image with a text-bottom alignment.</p>
</body>
</html>

Text-shadow

စာလုံးတွေနောက်မှာ shadow ထည့်ချင်တဲ့အခါမှာတော့ text-shadow ကို သုံးနိုင်ပါတယ်။

<html>
<head>
<style>
p.test {
&nbsp;&nbsp; &nbsp;text-shadow: #6374AB 20px 25px 2px;
}
</style>
</head>
<body>
<p class="test">This is txt shadow</p>
</body>
</html>

text-shadow: #အရောင် , X , Y, bluer ဆိုပြီး ထည့်ပေးရတာပါ။

CSS Text Properties

Property

Description

Values

color

text color

color

direction

text direction

ltr

rtl

line-height

line တစ်ခုနဲ့ တစ်ခုကြား အမြင့်

normal

number

length

%

letter-spacing

characters တစ်ခုနဲ့ တစ်ခုကြား အကွာအဝေး

normal

length

text-align

text align ညှိခြင်း

left

right

center

justify

text-decoration

add decoration to text

none

underline

overline

line-through

blink

text-indent

indent ရွှေ့ခြင်း

length

%

text-shadow

အရိပ်ထည့်ခြင်း

none

color

length

text-transform

uppercase , lowercase ပြောင်းခြင်း

none

capitalize

uppercase

lowercase

vertical-align

vertical align

baseline

sub

super

top

text-top

middle

bottom

text-btoom

length

%

white-space

wrap text လုပ်မလုပ်

normal

pre

nowrap

word-spacing

word တစ်ခုနဲ့တစ်ခုကြား spacing 

normal

length

Cheat Sheet For Web Essential

Cheat Sheet ဆိုတာကတော့ ကျွန်တော်တို့တွေ ပုံမှန် များပြားလှတဲ့ reference တွေကို လိုအပ်ပြီး အသုံးဝင်တာတွေ စုစည်းထားတာကို ဆိုတာပါ။ တနည်းပြောရင် quick reference လို့ ဆိုလို့ရပါတယ်။ ကျွန်တော် HTML, CSS , jQuery အကြောင်း MZ Edu မှာ ရေးခဲ့ဘူးပါတယ်။ အခု Web Development လုပ်မယ့်သူတွေအနေနဲ့ HTML, CSS , jQuery တို့ကို သိထားဖို့လိုအပ်ပါတယ်။ ရေးသားရာမှာလည်း လွယ်လွယ်ကူကူ reference လုပ်လို့ရအောင် cheat sheet လေးတွေ ဆောင်ထားဖို့လည်း လိုအပ်ပါတယ်။

Continue reading “Cheat Sheet For Web Essential”

HTML5 Form

HTML အကြောင်းကို ကျွန်တော် ရေးခဲ့ပြီးပါပြီ။ ရေးထားခဲ့တဲ့ စာအုပ်က HTML4 အကြောင်းပါ။ အခု HTML5 မှာ ပါဝင်လာတဲ့ feature တွေထဲက form အကြောင်း ထပ်မံဖြည့်စွက်ထားပါတယ်။

Placeholder

textbox မှာ စာမဖြည့်ခင် textbox information ပြထားချင်တဲ့အခါမှာ အရင်တုန်းက jquery ကို သုံးပြီးရေးရတယ်။ အဲဒီလို ရေးမယ့် အစား HTML5 မှာ placeholder ဆိုတဲ့ attribute ကို သုံးလို့ရပါတယ်။ code ကိုတော့ ဒီလိုရေးတယ်။

<input type="text" placeholder="Enter Your Name" />

အဲဒီ code လေးက လက်ရှိ webkit borwser တွေမှာ အလုပ်လုပ်ပါတယ်။ Firefox 3.6 မှာတော့ အလုပ်မလုပ်သေးပါဘူး။ နောက်ပိုင်း version တွေမှာတော့ အလုပ်လုပ်မယ်ထင်တယ်။

Required

require validation စစ်ဗျို့အတွက် ကျွန်တော်တို့တွေ jquery ဖြစ်ဖြစ် javascript ဖြစ်ဖြစ် ရေးပြီး စစ်ခဲ့ရပါတယ်။ အခု HTML5 မှာ require ဆိုတဲ့ attribute နဲ့ တင်ရပါတယ်။ Safari မှာကတော့ error message မပြပေမယ့် form တစ်ခုကို မကူးသွားပါဘူး။ လိုအပ်တဲ့ field မှာ focus ဖြစ်သွားပါတယ်။ Opera မှာကတော့ message ကိုဖော်ပြပေးပါတယ်။ သူ့ကိုတော့ ဒီလိုလေးရေးတယ်။

<input type="text" placeholder="Enter Your Name" required />

Autofocus

HTML5 မှာ javascript နဲ့ textbox ကို focus လုပ်ဖြစ်အောင် ရေးစရာမလိုတော့ပါဘူး။ ဥပမာ။။ Google လိုမျိုး တက်တက်ချင်းမှာ textbox ကို focus ဖြစ်ချင်ရင် autofocus attribute ကို သုံးလိုက်ရုံပါပဲ။ jquery , javascript တွေနဲ့ သီးသန့် ထပ်ရေးနေဖို့မလိုတော့ဘူးပေါ့။ သို့ပေမယ့်လည်း browser တွေ အားလုံးမှာ မရသေးပါဘူး။ လက်ရှိ firefox 3.6 မှာတော့ အဲဒီ attribute အလုပ်မလုပ်သေးပါဘူး။

<input type="text" placeholder="Enter Your Name" required autofocus />

Type=email

HTML4 တုန်းက javascript နဲ့ email validation တွေ စစ်ခဲ့ကြပါတယ်။ အခုတော့ javascript မလိုအပ်ပဲ html5 မှာ စစ်လို့ရပါပြီ။

<input type="email" placeholder="yourmail@mail.com" required />

iPhone, iPodTouch တို့မှာဆိုရင်တော့ email keyboard ပြောင်းသွားပါလိမ့်မယ်။ Opera မှာဆိုရင်တော့ form submit လုပ်တဲ့အခါမှာ email format မှားနေတယ်ဆိုပြီး error message ပြပါလိမ့်မယ်။ Safari တို့ chrome တို့မှာတော့ submit လုပ်လို့မရပဲ focus ဖြစ်သွားပါလိမ့်မယ်။

type=tel

သူကတော့ HTML5 မှာ အသစ်ပါဝင်လာတာပေါ့။ Telephone number အတွက်ပါ။ iPhone , iPodTouch တို့မှာဆိုရင်တော့ phone number keyboard ပေါ်လာပါတယ်။ အခြား browser တွေမှာတော့ ထူးထူးခြားခြားရယ် မရှိပါဘူး။

<input id=phone name=phone type=tel placeholder="Eg. +447500000000" required>

type=number

HTML5 မှာ number တွေ သီးသန့် ထပ်ပါလာပါတယ်။ number field ကို HTML5 မှာ ထပ်ပါလာပါပြီ။ number field ဖြစ်တဲ့အတွက် increase , decrease button လေး ဘေးမှာ ထပ်ပါလာပါတယ်။

<input id=cardnumber name=cardnumber type=number required>

type=date

ကျွန်တော်တို့တွေ date အတွက် javascriptနဲ့ဖြစ်ဖြစ် jqueyr ui နဲ့ ဖြစ်ဖြစ် အသုံးပြုခဲ့ကြပါတယ်။ HTML5 မှာ date field ပါလာပေမယ့် အခုလောလောဆယ်တော့ Opera တစ်ခုတည်းမှာပဲ ရပါသေးတယ်။

<input id=dob name=dob type=date  required>

HTML5 ဆိုင်ရာလေ့လာစရာများ