Monday, May 14, 2012

အင္တာဗ်ဴး အလြဲမ်ား ၁။

အင္တာဗ်ဴး အလြဲမ်ား ၁။

ကိုယ္ေတြ႕အင္တာဗ်ဴးအေတြ႕အၾကံဳမ်ားကို မွ်ေဝသြားပါမယ္။ ဒီတစ္ပတ္လံုး အင္တာဗ်ဴးေျဖဖုိ႕ေလ႔က်င္႔၊ သြားေျဖပါပဲ။ အခုေျဖခဲ႔တဲ႔အေတြ႕အၾကံဳေတြ ေဝငွပါမယ္။

အေမရိကန္အေျခစိုက္ လူမ်ားပြဲမစည္ ဆိုတဲ႔ ကုမ္ပနီပဲထားပါေတာ႔ ။ နာမည္ေတြေရးရင္ မေကာင္းလုိ႕ပါ။

PM(Project Manager) နဲ႕ Team lead လာပါတယ္။ PM က စျပီးေမးပါတယ္။ အရင္အလုပ္အေတြ႕အၾကံဳေတြ ဘလာဘလာေတြပါ။ အဲဒါေတြကေတာ႔ ေျပာတတ္ရင္ရပါတယ္။ နည္းနည္းေတာ႔ျပင္ဆင္ထားပါ။ ဘယ္ေလာက္ပဲ ဘိုလိုေျပာတတ္ေျပာတတ္၊ ကိုယ္တစ္ႏွစ္၊ႏွစ္ႏွစ္လုပ္လာတာကို နာရီဝက္ေလးဆယ္႔ငါးမိနစ္နဲ႕ အျပီးေျပာႏုိင္ဖုိ႕မလြယ္ဘူး။ အေရးၾကီးျပီး နားေထာင္ေကာင္းမယ္ထင္တာေတြကို အရင္ေရြးေျပာပါ။ ေျပာေနရင္းနဲ႕ ကိုယ္ရဲ႕ အလုပ္ေပၚထားတဲ႔ သေဘာထားနဲ႕ စိတ္ဆႏၵျပင္းျပမႈကို ထည္႕ေျပာပါ။ attitude နဲ႕ passion က သိပ္အေရးၾကီးပါတယ္။ အလုပ္ကေတာ႔ သူသူကိုယ္ကိုယ္ လုပ္ႏုိင္တဲ႔သူေတြမ်ားပါတယ္။

Business Scenerio တစ္ခုမွာ ဒါဆို ဘယ္လုိ လုပ္မလဲဆိုတာမ်ိဳးေမးပါတယ္။ ေသခ်ာစဥ္းစားျပီး ကိုေမာင္ဆင္႔( common sense) နဲ႕ေျဖရင္ အိုေကေလာက္တယ္။

ေနာက္ေတာ႔ issue tracking ကို ဘယ္လိုလုပ္သလဲေမးတယ္။ အဲဒါေတြကလည္း အလုပ္လုပ္ေနရင္သိပါတယ္။

ေနာက္ေတာ႔ project planning , impact analysis, requirement gathering စတာေတြမွာ ပါခဲ႔လားဘာညာေမးတယ္။ Users Meeting ေတြမွာတက္သလား။ code ခ်ည္းပဲ ထုိင္ေရးေနသလားစတာေတြေမးတယ္။

အဲဒါေတြကိုေကာင္းေကာင္းမြန္မြန္ေျဖလိုက္ပါ။

ျပီးေတာ႔ ပါးစပ္နဲ႕ oracle select,update,insert, delete ေျပာရပါေသးတယ္။ ရယ္မိမလိုေတာင္ျဖစ္သြားတယ္။

ျပီးေတာ႔ team lead အလွည္႕ျဖစ္ပါတယ္။ framework နဲ႕ပတ္သက္တာေတြေမးပါတယ္။

ၾကားထဲမွာျဖတ္ျပီး sql က exists နဲ႕ in ဘာကြာလဲေမးပါတယ္။


--this statement needs to check the entire table
select count(*) from [table] where ...
--this statement is true as soon as one match is found
exists ( select * from [table] where ... )


exist ကေတာ႔ ရွာေနတာ ေတြ႕တာနဲ႔ရပ္တယ္။ ထပ္ရွာမေနဘူး။  အခ်ိန္ကုန္သက္သာတယ္။ count လုပ္ရင္ေတာ႔သိသာတယ္ထင္တယ္။ ထင္တယ္လုိ႕ေျပာရတာ အဲဒီေမးခြန္းကို တစ္ျခမ္းပဲသိတယ္။ exist ကို အရင္ကေတာ႔ တခါတေလသံုးတယ္။ ေန႕စဥ္သံုးထဲမွာမပါေတာ႔ ေမ႔ေနျပီ။ exists တစ္ေယာက္ exist ေနေသးပါလားေတာင္ေမ႔ျပီ။

IN ကေတာ႔ရွင္းပါတယ္ဗ်ာ။ in ဆုိျပီး set တစ္ခုထည္႕ျပီးရွာလုိ႕ရတာေပါ႔။ or ေတြကို ဆက္လုိက္တာကို မေရးခ်င္လုိ႕ in လုပ္လုိက္တာပါပဲ။ အဲဒါေလးလည္းၾကည္႕ထားရင္ေတာ႔မမွားဘူးေပါ႔။ ဒီမွာ ျပန္ေရးတာက အမွန္ေတာ႔ ethic နဲ႕ မညီလွဘူး။ ျမန္မာအခ်င္းခ်င္း ကူညီရာေရာက္ေပမယ္႔ ကုမ္ပနီအတြက္ေတာ႔ မေကာင္းလွဘူး။ ျဖစ္ေစခ်င္တာကေတာ႔ အရည္အခ်င္းရိွျပီး အလုပ္ေကာင္းေကာင္းရတဲ႕ ျမန္မာ ေတြျဖစ္ေစခ်င္တာပါ။ အင္တာဗ်ဴးေျဖႏိုင္ျပီး ဘာမွမလုပ္တတ္တဲ႔သူေတြျဖစ္ေနရင္လည္း အဆင္ေျပမယ္မထင္ပါဘူး။ အရည္အခ်င္းရိွျပီးသားသူေတြ အင္တာဗ်ဴးေတြမွာ ေခ်ာေခ်ာေမြ႕ေမြ႕ျဖစ္ေစဖုိ႕ပဲရည္ရြယ္ပါတယ္။


SELECT * FROM Orders o WHERE EXISTS (
    SELECT * FROM Products p where p.ProductNumber = o.ProductNumber)
IN is used to compare one value to several, and can use literal values, like this:
SELECT * FROM Orders WHERE ProductNumber IN (1, 10, 100)


အခုေခၚတဲ႔ အလုပ္က Strut သံုးတယ္ဆိုေတာ႔ Strut အေၾကာင္းေမးပါတယ္။ ဘယ္ေလာက္ပဲေရးေန ေရးေန၊ code ေတြကို အလြတ္မွတ္မိဖို႕မလြယ္ပါဘူး။ ဒါေပမယ္႔ တကယ္ေရးတဲ႔သူက flow ကိုေတာ႔မွတ္မိပါတယ္။ navigation flow ကိုေျပာဆုိရင္ jsp--->tag-->strut-config.xml--->ActionForm-->Action-->web.xml စတာေတြမွာ ဘာေတြ ဘယ္လိုေရးတယ္၊ျပင္တယ္ေျပာျပလုိက္ရံုပါပဲ။ အဲဒါကိုေတာ႔ေျဖႏုိင္ပါတယ္။

ေနာက္ေတာ႔ scope ေတြအေၾကာင္းထဲက တစ္ခုေမးပါတယ္။ page scope နဲ႕ session scope ဘာကြာလဲတဲ႔။ တကယ္ေတာ႔ အဲဒါေတြကို ေမးေမးေနတာကို မၾကိဳက္ပါဘူး။ web မွာ အခုရွာ အခုေတြ႕ႏုိင္တာကို မရွာဘဲသိတယ္ဆုိတာဟာ အရည္အခ်င္းလို႕ကို မထင္ေတာ႔ပါဘူး။ ဒါေပမယ္႔ အင္တာဗ်ဴးမွာ ေမးရင္ေတာ႔ မရမက ေျဖၾကရတာပါပဲ။ တကယ္ဆိုရင္ scwcd ေျဖတုန္းက ဒါေတြကို အလြတ္ရေနတာေတြပါပဲ။ အခုေတာ႔ မမွတ္မိသေလာက္ျဖစ္ေနျပီ။ ေရးမွမေရးရေတာ႔တာကိုး။ တစ္ေန႕တစ္ေန႕ စာဖတ္လုိက္၊ အိပ္ငိုက္လုိက္ဆိုေတာ႔ စာေတြလည္းပ်ံကုန္ျပီ။ ဒါေပမယ္႔ နာမည္အရစဥ္းစားလုိက္တယ္။ session ဆိုကတည္းက သယ္မွာပဲ။ shopping cart က sesssion လုိပဲ မွတ္ထားသိမ္းထားရမယ္။ အဲဒီေတာ႔ Multiple pages ကေန sesssion ထဲမွာသိမ္းထားတာေတြကို ယူသံုးႏိုင္မယ္။ Page ကေတာ႔ နာမည္ကိုက ဒီ Page တစ္ခုထဲလိုပဲဆိုေတာ႔ အဲဒီေပ႔ခ်္မွာပဲသံုးမယ္။ အဲဒီေပ႔ခ်္ကို include လုပ္ထားတဲ႔ page မွာသံုးမယ္လုိ႕ထင္တယ္။

နီးေတာ႔နီးစပ္သြားပါတယ္။ အေျဖမွန္ကိုလည္း web မွာရွာၾကည္႕ထားပါ။ scope ေတြအေၾကာင္းသိရတာေပါ႔။

ေနာက္တစ္ခုက session ပါ။ ဒီမွာေလ႔လာႏုိင္ပါတယ္။ http://www.easywayserver.com/jsp/JSP-session.htm


HttpSession session = request.getSession(false);
if (!session.isNew()) {
  // Session is valid
}
else {
  //Session has expired - redirect to login.jsp
}


session တစ္ခု expired ျဖစ္ျပီလား ဘာMethod နဲ႕ check သလဲတဲ႔။ seesion obj ထဲက Method တစ္ခုနဲ႕ check တာေပါ႔။ Method name ကေတာ႔ မ်က္လံုးနဲ႕ျမင္ရင္သိတယ္။ အလြတ္ေတာ႔မရဘူး။ အမွန္က inNew ပါ။ မေရးတာၾကာလုိ႕ ေမ႔ကုန္ေပမယ္႔ code အလြတ္ရတာကို ဂုဏ္မယူပါဘူး။ java doc ၾကည္႕လုိက္လည္းသိႏုိင္တာပါပဲ။ လိဒ္ဂစ္တာ တီးတာကိုၾကည္႕ပါ။ notes ကိုၾကည္႕ျပီး တီးတဲ႔သူကမွ ဆရာက်ပါတယ္။ International notes ေကာင္းေကာင္းမၾကည္႕တတ္တဲ႔ ဂစ္တာသမားၾကေတာ႔ တီးရင္းနဲ႕ မၾကည္႕ႏုိင္တာနဲ႕ အလြတ္က်က္တီးရတာပါ။ အလြတ္က်က္တယ္ဆိုကတည္းက အေသမွတ္လုိက္တဲ႔သေဘာပဲ။ အေသမွတ္တာေတြကို အားမေပးပါဘူး။ သိသင္႔တာသိရင္ က်န္တာေတြကို အရွင္မွတ္ထားပါ။ ဒီ Method name ဟာ တစ္သက္လံုး isNew ျဖစ္ေနမယ္လုိ႕ အာမခံထားရင္ေတာ႔ ေကာင္းပါတယ္။ မဟုတ္ရင္ တစ္ေန႕မွာ oracle က isNew ထက္ပိုျပီးအဓိပၸာယ္ရိွတာေလးေတြ႕ျပီး ျပင္လုိက္ရင္ ဘယ္လိုလုပ္မလဲ။ IDE ရဲ႕ IntelliSense နဲ႕ Java Doc ကိုၾကည္႕ျပီးေရးတတ္ဖုိ႕ပဲလုိပါတယ္။ အဲဒီ Method ေတြ အလြတ္ရလုိ႕ အထင္ၾကီးတာမ်ိဳးကိုလည္း သိပ္ျပီး လက္မခံပါဘူး။

ေနာက္ေတာ႔ Database Connection အတြက္ ဘာ Design Pattern သံုးခဲ႔လဲဆိုတာပါ။ မွတ္မိတဲ႔ facade pattern ကို နည္းနည္းျပင္ေျပာခဲ႔ပါတယ္။ ဒါကလည္း တစ္ရံုးနဲ႕တစ္ရံုး ဘယ္ Design Pattern သံုးမယ္ဆိုတာက ၾကိဳက္ရာသံုးမွာပါပဲ။ Design Pattern ေလးဘာေလးဖတ္ထားရင္ေတာ႔ အဆင္ေျပေလာက္တယ္။

ေနာက္တစ္ခုကေတာ႔ Spring Transactions ေတြအေၾကာင္းပါ။
 ဟိုတေလာကပဲ Java Developer's Notebook မွာ အဲဒီအခန္းဖတ္ခဲ႔ပါေသးတယ္။ ခက္တာကမမွတ္မိေတာ႔တာပါ။ ဒီမွာၾကည္႕လုိ႕ရပါတယ္။
http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html

EJB ကိုနည္းနည္းေမးပါတယ္။ အရင္ကတည္းက EJB မလုပ္ခဲ႔ဖူးဘူးေျပာထားေတာ႔ သက္သက္ညွာညွာေမးပါတယ္။ Head First ေရွ႕သံုးခန္းဖတ္လာတဲ႔ အသိနဲ႕ထင္တာေတြေျဖခဲ႔ပါတယ္။ က်န္တာေတြ နည္းနည္းပါးပါးရိွႏိုင္ပါတယ္။ ဒါေပမယ္႔ ေလာေလာဆယ္ interview trends ေလးကို သိႏုိင္ေလာက္၊ ခန္႕မွန္းႏိုင္ေလာက္မယ္ထင္ပါတယ္။

ref:
http://stackoverflow.com/questions/24929/difference-between-exists-and-in-in-sql
http://www.easywayserver.com/jsp/JSP-session.htm

1 comment:

Ivy_Techno said...

Useful information for me,thanks for writing such kind of post.