ကဗ်ာ/ရသ/နည္းပညာ

Introduction Angular JS

Feb 20, 2016
Angular Js , 
ဒါေလးေတြ အရင္မွတ္ထားလိုက္ 
ng-app ,ng-bind, ng-model
ဒါဆိုစလို့ရျပီ .. angularjs.org ကေန သူ့ရဲ့ stable ျဖစ္တဲ့ js file ကို ေဒါင္းထားလိုက္မယ္ .
xampp ျဖစ္ျဖစ္ wamp ျဖစ္ျဖစ္ local server တခုခုလည္း ကုိယ့္စက္ထဲသြင္းထားျပီးသားလို့ယူဆရေအာင္ ။ 
ဘာေျကာင့္server လိုတာလဲဆိုေတာ့ သူအလုပ္လုပ္ပံုက brower request လွမ္းလုပ္တဲ့အခ်ိန္မွာ server ကေန 
browser cache ထဲမွာ ေနေနျပီး  လိုအပ္တဲ့အပိုင္းေလာက္ပဲ server ကုိလွမ္း လွမ္းျပီးအလုပ္လုပ္
ေပးတာမို့လို့ပါ ။ရနိုင္တဲ့ အက်ိုးေက်းဇူးကေတာ့ အရမ္းျမန္သြားတာေပါ့..
တျခားလုပ္နိုင္တာေတြရွိပါေသးတယ္ .စမ္းျကည့္ယံုအတြက္ မွာ server မပါပဲလည္းရပါတယ္ ။
html တစ္ဖိုင္ေဆာက္လိုက္ , angular Js နဲ့ လင့္ဖမ္းခ်ိတ္လိုက္ ရင္ angular Js ရဲ့ directive ေတြယူသံုးလို့ရေနပါျပီ။
 ပံုစံေလးျပမယ္။ေအာက္မွာျကည့္ျကည့္ ..
<!DOCTYPE html>
<html lang="en-US">
<script src=“js/angular.min.js”></script> // ဒါဆို angularJs နဲ့ခ်ိတ္လိုက္ျပီ
<body>

<div ng-app=“”>//ခုနက မွတ္ထားခိုင္းတာေလးလာျပီ။ angularJs အလုပ္လုပ္မယ့္ေနရာကိုသတ္မွတ္ေပးလိုက္တာပါ။
အျမဲတမ္း ဒီကေနပဲစရပါတယ္ ။ညီမ်ွျခင္း ဒီဘက္ “”အလြတ္ထားထားတာက ေလာေလာဆယ္ ဒီ div tag အတြက္သီးသန့္ app မရွိဘူး လို့ေျပာခ်င္တာပါ။
  <p>Name : <input type="text" ng-model="name"></p>//ng-model ထဲသတ္မွတ္ထားတဲ့အရာကိုျပန္ေခၚသံုးလို့ရပါတယ္။
  <h1>Hello {{name}}</h1><br/>//ဒီမွာျပန္ေခၚသံုးလိုက္ပါျပီ ။{{}} အထဲမွာေရးဖို့ angular Js ကသတ္မွတ္ထားပါတယ္.
<h1>Hello <em ng-bind=“name”></em></h1> // {{}}နဲ့မေရးခ်င္ရင္ေတာ့ ng-bind ကုိေခၚသံုးနိုင္ပါတယ္ ။
</div>

</body>
</html>

browser မွာစမ္းျကည့္ .. ရျပီ ။
na-app ထည့္ထားတဲ့ tag က ေနစျပီး angularJs အလုပ္လုပ္ပါတယ္။သူ့အတြက္ app တစ္ခုဖန္တီးမယ္ဆိုရင္ ေတာ့module ေရးရပါတယ္။ 
အဲ့ဒီ module ထဲမွာ controller တစ္ခုေတာ့အနည္းဆံုးရွိရတယ္။ အဲ့ဒါကို ေစာေစာ က ng-model ကေနျပန္ေခၚျပီး HTML မွာresult ျပန္ျပလို့ရပါတယ္။
module , controller တစ္ခုစီသပ္သပ္စီေရးတာျဖစ္လို့ ဒီလိုပံုစံကပိုျပီး ျပင္ဆင္တည္းျဖတ္ ခ်ဲ့ထြင္ လုပ္ကုိင္ရတာမွာလြယ္ကူေစပါတယ္။
ကဲပံုစံသစ္ေလးစရေအာင္ .. ဒါေလးေတြထပ္မွတ္ထားလိုက္ ပါဦး။
<div ng-app="myApp" ng-controller=“myCtrl”>…</div>
<p>blah blah </p>
<script>
var app = angular.module("myApp", []); 
app.controller(“myCtrl”,function(){
………………
});
</script>
အခု ng-app ထဲမွာသံုးမယ့္ app ရွိေနပါျပီ .. controller မွာေတာ့ ကိုယ္အလုပ္လုပ္ေစခ်င္တဲ့ အရာအတြက္ function  ေရးရပါတယ္ ။ 
function မွာ javascript ပံုစံ အတိုင္း function name မပါပဲ function (){…….} ဆိုျပီးေရးနိုင္ပါတယ္ ။angular Jsရဲ့ ပံုစံျဖစ္တဲ့ module 
နဲ့ controller မွာေတာ့ na-app , ng-controller တို့ကေနျပန္ေခၚဖို့အတြက္ name ေတြလိုအပ္ပါတယ္ ။ကြင္းထဲမွာေရးရတာ(“myApp”,[])
က angular ရဲ့ပံုစံပါ ။ေစာေစာက ေရးထားတာေလးကိုပဲ Model ,View ,Controller (MVC) ပံုစံျပန္ေရးျကည့္မယ္ .
ပိုျပီး ရွင္းရွင္းလင္းလင္းျဖစ္ေအာင္ myApp အတြက္ js တစ္ဖိုင္သပ္သပ္ေရးျပီး လာထည့္ေပးလိုက္ပါတယ္ ။
(HTML ဖိုင္မွာ )
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Angular Intro</title>
</head>
<body>
<div ng-app="myApp" ng-controller="myCtrl"> // module myApp ထဲက controller myCtrl အေနနဲ့ ေရးထားတဲ့ functionကိုလွမ္းေခၚတာပါ။
<label>First Name :</label><input type="text" ng-model="firstName" ><br/>
<label>Last Name:</label><input type="text" ng-model="lastName">
<br/>
<p>Hello ! {{firstName + " " + lastName}}</p><br/>
</div>
<script src="js/angular.min.js"></script>
<script src="js/myapp.js"></script>
</body>
</html>
javascript ဖိုင္ကို ခ်ိတ္ရာမွာ CSS လိုမ်ိုး <head> ထဲမွာပဲခ်ိတ္ရမယ္လို့မဆိုလိုပါဘူး ။ အခုလိုမ်ိုး </body> အပိတ္နားမွာ ခ်ိတ္လည္း
ရပါတယ္။ပံုမွန္အားျဖင့္ Browser က HTML ကို run ျပီးမွ Javascript ကို
run တာျဖစ္လို့ သူ့ကိုေနာက္ဆံုးနားမွ လာေရးတာကပိုျပီး သဘာ၀က်ပါတယ္။
(myApp.js ဖိုင္မွာ )

var app=angular.module("myApp”,[]); // module တစ္ခုကိုေရးနည္းအတိုင္းေဆာက္ျပီး app နာမည္နဲ့ထားလိုက္ပါတယ္ ။
app.controller ("myCtrl",function ($scope){ // အဲ့ module class ထဲကေန controller တစ္ခုကိုဆြဲယူတည္ ေဆာက္ျပီး function တစ္ခုထည့္သြင္းေပးလိုက္ပါတယ္ ။
$scope.firstName ="Aung";
$scope.lastName ="Maung";
});
browser မွာ run ျကည့္ပါဦး။ ေနာက္ထပ္ ng-init ,ng-hide ,ng-show တို့ရဲ့ စိတ္၀င္စားဖြယ္ အသံုး၀င္ပံုေတြေလးေတြေျပာစရာရွိပါေသးတယ္။
ပညာရပ္ တစ္ခုေလ့လာမယ္ဆိုရင္ ‘အစ’ ေလးကအရမ္းအေရးျကီးပါတယ္။ အစေလးေသခ်ာနားလည္ရင္ ထပ္ျပီးဆြဲထုတ္ေလ့လာသြားလို့ရပါျပီ ။


Read more ...

Python Programming notes(Basic)

Feb 15, 2016

အခုေနာက္ပိုင္း ကြ်န္ေတာ့္အေနနဲ့ စဥ္းစားမိတာက programming tutorials ကိုသင္ျပေပးခ်င္ရင္
VDO အေနနဲ့သင္ေပးတာက ပိုထိေရာက္တယ္လို့စဥ္းစားမိလာတာ ..
စာအေနနဲ့အမ်ားျကီးရွင္းျပရေပမယ့္ တကယ္ေလ့လာတဲ့သူက နားမရွင္းတတ္ဘူး ..
ေပးတဲ့သူကလညး္နားလည္ေအာင္အမ်ိုးမ်ိုးရွင္းျပရင္းနဲ့ပဲ စာရွည္ျပီး ဘေလာ့ေနာက္တစ္ပုဒ္ျဖစ္သြားေရာ
ျပီးေတာ့ တခ်ို့အပိုင္းေတြမွာစာအေနနဲ့ေတာ္ေတာ္လက္ေပါက္ကပ္ပါတယ္ .
ဒါေျကာင့္ ေနာက္ပိုင္း ကြ်န္ေတာ္ေလ့လာတဲ့ Note  ကုိပဲျပပါမယ္ ... မရွင္းရင္ ေမးလို့ရပါတယ္ ..
facebook မွာဆိုရင္ Philip Macque ကုိအက္ထားလို့ရပါတယ္..

Python programming note ,
g=input("Please type any number here:")
Please type any number here: 3
g**3
27

pow(g,3)
27

import math
math.sqrt(9)
3.0

aungaung=math.sqrt
aungaung(9)
3.0

aungaung=math.floor
aungaung(9.9)
9.0

x=raw_input("Enter name:")
print "Hay" + x
raw_input("press<enter>")

num=str(18)
print "Bucky is "+ num
Bucky is 18

num2=18
print "Bucky is "+ `num2`
Bucky is 18

//input is only for numbers.
//raw_input is multy way data accept by string .
----------------------------------------------------
//Python called array , 'sequences'
family=['mon','dad','bro','sis','dog']
family[3]
'sis'
faimly[-2]
'sis'
'bucky'[3]
'k'
family[1:4:2]
['mon','sis']
---------------------------------------------------
>>> [7,4,5]+[4,5,6]
[7, 4, 5, 4, 5, 6]

>>> 'bucky ' * 10
'bucky bucky bucky bucky bucky bucky bucky bucky bucky bucky '

>>> 21*10
210
>>> [21]*10
[21, 21, 21, 21, 21, 21, 21, 21, 21, 21]

>>> name='roastbeef'
>>> 'x' in name
False
>>> 'r' in name
True

>>> number=[8,1,4,17,28,165,7]
>>> len(number)
7
>>> max(number)
165
>>> min(number)
1

>>> list('bucky')
['b', 'u', 'c', 'k', 'y']
>>> number[3]=77
>>> number
[8, 1, 4, 77, 28, 165, 7]
>>> del number[3]
>>> number
[8, 1, 4, 28, 165, 7]
>>>

>>> example=list('easyhoss')
>>> example[4:]=list('baby')
>>> example
['e', 'a', 's', 'y', 'b', 'a', 'b', 'y']

>>> example[1:1]=[3,3,3]
>>> example
['e', 3, 3, 3, 'a', 's', 'y', 'b', 'a', 'b', 'y']
>>> example[1:5]=[]
>>> example
['e', 's', 'y', 'b', 'a', 'b', 'y']
>>>
-------------------------------------(movie14)
//about the built-in functions/methods.........
>>> aung=[1,2,3,4]
>>> aung.append(5)
>>> aung
[1, 2, 3, 4, 5]

>>> aung.count(5)
1
>>> aung.append(5)//become [1, 2, 3, 4, 5, 5]
>>> aung.count(5)//result must two
2
>>>
>>> aung.count('a')//there haven't 'a' character
>>>

>>> philip=[1,2,3,4,5]
>>> macque=[6,7,8,9,0]
>>> philip.extend(macque)
>>> philip
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>>
-------------------------------------(movie15)
>>> say=['koko','bobo','dodo','momo']
>>> say
['koko', 'bobo', 'dodo', 'momo']
>>> say.index('bobo')
1
>>> say.insert(2,'MinMin')
>>> say
['koko', 'bobo', 'MinMin', 'dodo', 'momo']
>>> say.pop(1) //first "print-out the value" and then remove
'bobo'
>>> say
['koko', 'MinMin', 'dodo', 'momo']
>>> say.remove('dodo') //just remove form list
>>> say // if you want to show result you need to type again
['koko', 'MinMin', 'momo']
>>> say.reverse()
>>> say
['momo', 'MinMin', 'koko']
>>> 
Read more ...

MY PHP မွတ္စု

Feb 15, 2016
//getimagesize($_GET['img']) ကေနအဓိကသံုးတာက img array ကေဖာ္ျပမယ့္ index [0] width [1] height ၿပီးရင္
['mime']=image/jpeg
//imagecopy(ပင္မပံု,watermarkပံု,watermarkရဲ႕အေပၚေအာက္,watermarkရဲ႕ဘယ္ညာ,ပင္မပံုရဲ႕အေပၚေအာက္,
ပင္မပံုရဲ႕ဘယ္ညာ,watermarkရဲ႕ထားမယ့္အျမင့္,watermarkရဲ႕ထားမယ့္အက်ယ္)
//move_uploaded_file() က tmp_name ထဲက ဖိုင္ကုိေရြ႕ဖို႔သံုးတယ္
//ေနာက္ထပ္တစ္ခုက ဖိုင္ကုိေရြ႕တဲ့အခါ ဖိုင္ရဲ႕ extension ကုိစစ္ၿပီးမွေရြ႔မယ္ဆို imagecreatefromjpeg($image)
နဲ႕အရင္ Cache လုပ္ၿပီးရင္ imagejpeg({$GLOBALS['core_path']}/watermark.jpeg) ဆိုရတယ္။
//အေပၚက လင့္လမ္းေၾကာင္းယူျပတာမွာ ပထမက $core_path=dirname(__FILE__); ဆိုၿပီးယူထားတယ္။
// ေနာက္တစ္မ်ိဳး က $core_path=$_SERVER['SCRIPT_FILENAME']; နဲ႕ယူတာျဖစ္ပါတယ္။
အဲဒါကုိ Global ထပ္မေၾကျငာပဲ တန္းယူျပခ်င္ေတာ့ {$GLOBALS['core_path']} လို႕သံုးလိုက္တာျဖစ္ပါတယ္။
//scandir('image/') ဆိုရင္ image folder ထဲက ဖိုင္ေတြကုိ scan စစ္ေပးတယ္။သူကစစ္ယံုစစ္ေပးတာ။
// သူ႔ထက္လန္းတာရွိေသးတယ္။အဲ့ဒါက glob(*.*); ဆိုရွိသမွ်အကုန္ျပမယ္။ glob(*.jpg) ဆို Jpg ပဲျပမယ္။
glob('*.{jpg/png/gif}',GLOB_BRACE) ဆို jpg,png,gif သံုးခုျပေပးမယ္ GLOB_BRACE ထည့္ေပးဖို႕လိုမယ္။
//extension ပဲျဖတ္ယူဖို႕ အတြက္ဆို explode('.',$img)
သူက [0]=>aungaung,[1]=>.,[2]=>jpg ဆိုၿပီးခြဲထုတ္ေပးတယ္။အဲဒီထဲကမွေနာက္ဆံုးတစ္ခုကုိယူမယ္ဆိုရင္
strtolower(end($exploded_img))ဒါဆို ေနာက္ဆံုးတစ္ခုပဲယူမယ္။ထြက္လာတာကုိစာလံဳးေသးနဲ႕ျပလိမ့္မယ္
//md5(microtime()) က နာမည္မထပ္ေအာင္ေပးရင္သံုးတယ္ microtime အခ်ိန္ကိုယူၿပီး md5 နဲ႕ Hash လုပ္လိုက္တာ
//img_sizeကုိခ်ံဳ႕ဖို႕တြက္ခ်င္ရင္ $new_size=(width+height)/(width*(height/100))
ၿပီးရင္ imagecreatetruecolor(width,height); နဲ႕ အခ်ိဳးညီညီပံုထြက္လာေအာင္လုပ္လုိ႕ရတယ္
/* if(is_dir('image/')==false){
     mkdir('image/',0744); 0744က parmission ေပးတာ Linux အတြက္ပဲသံုးတယ္ Windows မွာမသံုးဘူး
}*/
//ပံုဆိုဒ္အတြက္သံုးတာ imagecopyresampled($thumb, $src, 0, 0, $src_pos[0], $src_pos[1], $new_size[0], $new_size[1], $src_size[0], $src_size[1]);
//ပံုဆိုဒ္အတြက္သံုးတာimagecopyresized($new_image,$old_image,0,0,0,0,$new_width,$new_height,$img_width,$img_height);
//အဲ့ဒီ function ႏွစ္ခုကြာျခားခ်က္ကုိ အြန္လိုင္းမွာရွာၾကည့္ေတာ့ imagecopyresize uses the nearest pixel algorithm, imagecopyresampled
uses the the bicubic interpolation. The results clearly shows the difference  . လို႕ရတယ္ အရည္အေသြးမေလွ်ာ့ခ်င္ရင္ေတာ့ imagecopyresampled()သံုးတာ
ပိုေကာငး္လိမ့္မယ္။
ေနာက္သင္ခန္းစာ Javascript ႏွစ္ဖိုင္ခ်ိတ္ၿပီး Progress bar ဖန္တီးတာ တစ္ဖိုင္က function ကုိေနာက္တစ္ဖိုင္က obj ေဆာက္ၿပီးသံုးသြားတာ ။
library.js မွာဒါေတြကုိေရး
function progress_bar(container){
var bar=document.createElement('div');
bar.style.width='0px';
bar.style.height='100%';
bar.style.background='#eef';
container.appendChild(bar);

var text=document.createElement('div');
text.style.marginTop='-26px';
text.style.textAlign='center';
text.style.color='#222';
text.style.size='15px';
text.appendChild(document.createTextNote('0%'));
container.appenChild(text);

this.setpercentage =function(percentage){
bar.style.width=percentage+'%';
text.removeChild(text.firstChild);
text.appendChild(document.createTextNote(percentage+'%'));
}
}
Main.js မွာဒါေရး
window.onload=function(){
var bar=new progress_bar(document.getElementById('progress_bar'));
document.getElementById('set_50').onclick=function(){
bar.setpercentage(50);
}

document.getElementById('0to100').onclick=function(){
var i=0;
var interval=window.setInterval(function(){
if(i>=100) window.createInterval(interval);
bar.setpercentage(i);
i++;
},50)
}
}

မွတ္ထားရမယ့္ SQL Coding
INSERT INTO page_hit(name,name) VALUES (values,values) ON DUPLICATE KEY UPDATE hit=hit+1;

array ႏွစ္ထပ္နဲ႕ ရလဒ္ကုိထုတ္ျပမယ္ဆိုရင္ေအာက္ကပံုစံကုိမွတ္ထား ..
$sql=SELECT * FROM page_hit ;
$result=mysqli_query($GLOBALS['$conn']$sql);
$stat=array();
while($row=mysqli_fetch_assoc($result)){
$stat[]=array('value1'=>$row['something1'],'value2'=>$row['something2']);
}stat array() ထဲကုိ $row() ကလာမည့္ေဒတာေတြ ေနရာခ်ေပးလိုက္တယ္။အဲ့ဒါကိုမွ
HTML ထဲေရာက္ရင္ foreach နဲ႕ပတ္ၿပီးျပန္ထုတ္ျပရမယ္။

function __construct($something){...} က Class ကုိေခၚတာနဲ႕တန္းအလုပ္လုပ္တယ္။
က်န္တာေတြက class ကုိ obj ေျပာင္းၿပီး $class->function ပံုစံနဲ႕ေခၚရတာ

__toString() က string မျဖစ္ေသးတာကို string ေျပာင္းေပးႏိုင္တယ္ ။ေအာက္ကဥပမာမွာ
URL ကုိ string ေျပာင္းခိုင္းထားတယ္။
function __toString(){
return $this->site_path."<br/>".$_SERVER['REQUEST_URI'];
}
အခုထပ္ျပထားတဲ့ဥပမာမွာေတာ့ URL ထဲက '/' ေတြကုိဖယ္ထုတ္တဲ့ method ေလးကိုျပထားတယ္
function segment($segment){
$url=str_replace($this->site_path,'',$_SERVER['REQUEST_URI']);
$url=explode('/',$url);
if (isset($url[$segment])){
return $url[$segment];
}else{
return false;
}
Read more ...