Sunday, January 8, 2012

အိုဘယ္႔ Filezilla

အိုဘယ္႔ Filezilla

အခုေရးမယ္႔ အေၾကာင္းအရာကေတာ႔ I.T သမားတုိင္းမကင္းႏိုင္တဲ႔အရာပါ။
စဥ္းစားၾကည္႕ပါဦး။ ဘာမ်ားျဖစ္မလဲလို႕။

Bug လား။
Shedule Deadline လား။
Version Control လား။
IDE လား။
အဲဒါေတြမဟုတ္ေသးပါဘူး။ တျခားတစ္ခုပါ။
File Sharing အေၾကာင္း သံုးမိနစ္စာေလာက္ေျပာခ်င္ပါတယ္။

လူရယ္လုိ႕ျဖစ္လာရင္ မိဘလုပ္စာခ်ည္းထုိင္စားေနလို႕ မတင္႔တယ္ဘူးဆိုသလို file ရယ္လုိ႕ျဖစ္လာရင္ ကိုယ္႔စက္မွာခ်ည္း ေနခ်င္လုိ႕မျဖစ္ဘူး။ အတူတူသံုးဖုိ႕အတြက္ share ခံရတယ္။ သနားဖုိ႕ေတာင္ေကာင္းတယ္။ ေဘာလီေဘာပြဲကလိုပဲ ဟိုဘက္ကို ပို႕တယ္ခင္ဗ်၊ ဟုိဘက္က download ၾကီးနဲ႕ ပင္႔တင္မလိုနဲ႕ဆြဲခ်လုိက္တယ္ခင္ဗ်။ ျပန္ျပီး upload ပါတယ္ခင္ဗ်ာ။ ဒီဘက္အသင္းကလည္း download ၾကီးနဲ႕ျဗဳန္းခနဲခုတ္ခ်ပါတယ္ခင္ဗ်ာ။ corrupted ျဖစ္ပါတယ္။ တစ္ခါတစ္ေလ File Size ၾကီးက mail ကေန ပို႕မရေလာက္ေအာင္ၾကီးပါတယ္။ third party ေတြဆီကပို႕ရင္လည္း ကိုယ္႔ရဲ႕ confidential data ေတြကို တျခားသူဆီမွာ ယံုယံုၾကည္ၾကည္ထားေပးရာေရာက္ပါတယ္ခင္ဗ်။

တစ္ရံုးထဲမွာေတာင္ security ေကာင္းေကာင္းနဲ႕ share ဖုိ႕ဆိုတာ AD ရိွရင္သာလြယ္တယ္ခင္ဗ်။ AD မွာ define လုပ္ထားတဲ႔ usears ေတြကို share လုပ္ခါနီးမွာရွာျပီး user A ကို folder A share မယ္။ user B ကို folder A မ share ဘူး။ စသျဖင္႔ေရြးလို႕ရပါတယ္။ ဆိုးတာက ကိုယ္ဘာသာ ဘာေတြ ဘယ္လုိ share ထားမွန္း မွတ္မထားခ်င္တာပါ။ Manage ျပန္လုပ္ရတာလည္း ပ်င္းစရာေကာင္းပါတယ္။

အလြယ္တကူ shareခ်င္ျပီး access right ေတြဘာေတြနဲ႕ သပ္သပ္ရပ္ရပ္ေလးလုပ္ခ်င္ရင္ ftp server သံုးလုိ႕ရပါတယ္။ ရည္ရြယ္ခ်က္ အၾကီးၾကီးနဲ႕ထုတ္လုိက္တဲ႔ ftp server ေတြကို ရည္ရြယ္ခ်က္ေသးေသးေလးနဲ႕ျပန္သံုးတဲ႔သေဘာပါခင္ဗ်။

Filezilla server ကို သံုးၾကည္႕ပါ။ မေလးပါဘူး။ ေပါ႔ေပါ႔ပါးပါးရိွပါတယ္။ Download+install လုပ္ခ်ိန္ ၇ မိနစ္၀န္းက်င္။ user create လုပ္၊ folder access ေပး၊ password ေပးတာက ၅ မိနစ္ခန္႕။ စုစုေပါင္း ၁၂ မိနစ္ေလာက္ဆိုရင္ ftp server up ေလသတည္း။

server ရိွရင္ client ရိွရမယ္။ ဆရာနဲ႕ တကာပဲ။ ကယ္တင္ရွင္နဲ႕ေ၀ေနယ်လိုပဲ။ တျခား network အတူတူထဲက စက္တစ္ခုခုမွာ filezilla client သြင္းပါ။ FTP Server သြင္းထားတဲ႔စက္ရဲ႕ IP ကို ခ်ိတ္ပါ။ shared ထားတဲ႔ folder ကို ျမင္ရပါျပီ။ စုစုေပါင္း ၈ မိနစ္ခန္႕။ total မိနစ္ ၂၀ ေလာက္မွာ ခင္ဗ်ားတို႕ ftp server နဲ႕client ကို ပတၱလားပမာ တီးမိေခါက္မိသြားျပီ။

ကိုယ္႔ရံုးမွာ public IP ရိွတဲ႔ Server မွာ Filezilla Server သြင္းထားျပီး အျပင္မွာ storage space ေရာင္းစားလို႕ရႏိုင္တယ္။ ဒါမွမဟုတ္ တျခားရံုးေတြကို security ေကာင္းေကာင္းနဲ႕ share ႏိုင္ပါတယ္။

Multiple folders share တဲ႔အခါ စလုပ္လုပ္ခ်င္း နည္းနည္း ခက္တတ္ပါတယ္။ Home ေပးထားတာကို နည္းနည္း နားလည္ေအာင္ၾကည္႕ပါ။
C:/folderA ကို H (Home) Folder ေပးထားတယ္ဆုိပါေတာ႔ ။ Folder ႏွစ္ခုရိွတယ္လို႕ယူဆလုိက္။

C:/folder A
D:/folder B

အဲဒီႏွစ္ folder ကို user A ကို share ထားရင္ user A က ftp client နဲ႕၀င္ရင္
\ ဆိုျပီး root folder က server မွာ home ေပးထားတာပဲ ျမင္ရပါတယ္။ အဲဒီေတာ႔ folder A က home folder ဆိုရင္ folder A ကိုပဲျမင္ရပါမယ္။ folder B ကိုပါျမင္ခ်င္ရင္ folder B ရဲ႕ alias ကိုေျပာင္းရပါမယ္။ full path နဲ႕ေရးရပါတယ္။ ဥပမာ folder B ရဲက alias=C:/folder A/ folder B

အဲဒီလိုေပးလုိက္ရင္ client ဘက္မွာ \ (root directory) ေအာက္မွာ folder B လုိ႕ေပၚပါမယ္။ ေထြေထြထူးထူးေတာ႔မဟုတ္ပါဘူး။ shortcut တစ္ခု folder A ထဲမွာ လာလုပ္သလုိမ်ိဳးပါပဲ။

alias=C:/folder A/myfav ဆိုရင္လည္းရပါတယ္။ client ဘက္ကၾကည္႕ရင္ root directory (\) ေအာက္မွာ myfav ဆိုတဲ႔ folder ေပၚေနပါမယ္။ အဲဒါဟာ folder B ပါပဲ။ client ဘက္က နာမည္မွန္မသိေစခ်င္ဘူးဆိုရင္ alias=C:/folderA/pyawpyabu ဆိုျပီးေပးလည္းရေလာက္ပါတယ္။ pyawpyabu ဆိုတာကေတာ႔ ပါဠိလို (မေျပာျပဘူးလုိ႕ အဓိပၸာယ္ရပါတယ္။ :})

ကဲ ftp တရားနာကုန္ေသာ တကာ၊တကာမတို႕သည္လည္း မိမိတို႕ အသီးသီး ဦးတည္ကုန္ရာ ရည္မွန္းခ်က္မ်ား ေပါက္ေျမာက္ေအာင္ျမင္ၾကပါေစကြယ္ရ္။

Regards,
Zero

Notes:
Window firewall မွာ port ေတြပိတ္ထားတတ္တဲ႔အတြက္ စမ္းတဲ႔အခါ server ဘက္က local network မွာ window firewall ကို off ထားပါ။

telnet (IP)(Space)(Port)
နဲ႕ port 21 ပြင္႔မပြင္႔စမ္းၾကည္႕လုိ႕ရပါတယ္။

Window 7 မွာဆုိရင္ telnet client ကိ on ျပီးမွ telnet လုပ္ၾကည္႕လုိ႕ရပါတယ္။
telnet client က Xp မွာဆုိရင္ေတာ႔ auto on ျပီးသားပါ


Start
Control Panel
Programs And Features
Turn Windows features on or off
Check Telnet Client
Hit OK

Web Service Part 1. JAX-WS 2.1

Web Service Part 1. JAX-WS 2.1

O'Reilly ကထုတ္တဲ႔ Java Web Services Up and Running ကိုဖတ္ၾကည္႕ေနပါတယ္။ ဖတ္ရင္းနဲ႕နည္းနည္းေရးလုိက္ပါတယ္။ လုိက္လုပ္ခ်င္ရင္လုပ္လုိ႕ရပါတယ္။ စုစုေပါင္းအခ်ိန္ ဆယ္႔ငါးမိနစ္ေလာက္ပဲလုိပါတယ္။
္
Java 6 ကိုသံုးပါမယ္။ သံုးရတာကလည္းအေၾကာင္းရိွပါတယ္။ Java 6 မွာပါတဲ႔ JAX-WS ေၾကာင္႔ျဖစ္ပါတယ္။ JAX-WS ရဲ႕အရွည္ကေတာ႔ Java API for XML-WEB Services ျဖစ္ပါတယ္။ SOAP-based ေရာ REST-style အတြက္ပါ JAX-WS က support လုပ္ပါတယ္။

Web Service က ဘာအတြက္ေကာင္းလဲဆိုတာကို အင္တာဗ်ဴးမွာေမးခဲ႔ရင္ေျဖဖုိ႕ကေတာ႔ အလြယ္ဆံုးနဲ႕အတိုဆံုးအေနနဲ႕ Legacy Systems ေတြမွာ တျခား systems ေတြနဲ႕ communicate လုပ္ရလြယ္ဖုိ႕အတြက္အဓိကသံုးပါတယ္။ ဟိုဘက္က .net ဒီဘက္က java ေရးထားလည္းရတယ္။ တစ္ဖက္ဖက္က web service provide လုပ္လုိက္ရင္ ေခၚသံုးလို႕ရျပီ။ .net နဲ႕ေရးထားတဲ႔ဘက္က program ရဲ႕ result ကို webservice ထုတ္ထားေပးရင္ အဲဒီ program ကို java နဲ႕ေနာက္တစ္ခါ ထပ္ေရးရတဲ႔ေသာကကင္းေ၀းတယ္ေပါ႔ဗ်ာ။ program ဆိုတာနဲ႕ hello world ေလာက္လုိ႕မျမင္လုိက္ပါနဲ႕။ အင္မတန္ခက္ခဲတဲ႔ business logic အခုတစ္ေထာင္ပါ၀င္တဲ႔ ပရိုဂရမ္ၾကီးလို႕ေတြးၾကည္႕ပါ။ ျပန္ေရးေနရင္ ပ်င္းစရာေကာင္းသလို မွားစရာလည္းေကာင္းတယ္။ Web Service သံုးလုိက္ေတာ႔ ဒါကိုေရွာင္ရွားႏိုင္တယ္။ မေကာင္းတာကေတာ႔ ပိုၾကာတာေပါ႔ဗ်ာ။ HTTP ကသြားရင္ အင္တာနက္ေႏွးတဲ႔ကိစၥေတြရိွမယ္။ timeout issue ရိွမယ္။ connection error ရိွမယ္။ ဟိုဘက္ system down ေနရင္ ဒီဘက္က ငုတ္တုတ္ေမ႔မယ္။ အဲဒါေတြပဲေပါ႔။ အေျခခံအားျဖင္႔ ဒီေလာက္ပဲသိရင္ရေလာက္ျပီထင္ပါတယ္။

ေရးၾကမယ္ေဟ႔ေကာင္းေကာင္း။

SOAP-based web service ေတြကို single class နဲ႕ေရးလုိ႕ရတယ္။ ဒါေပမယ္႔ ပိုျပီးေတာ႔ စနစ္တက်ျဖစ္ေအာင္ (Best practices လို႕ေခၚတယ္။ ဒါမ်ိဳးမေရးရင္လည္း ဘာမွေတာ႔မျဖစ္ဘူး။ ေရးရင္ေတာ႔ပိုေကာင္းတယ္။) ႏွစ္ပိုင္းခြဲေရးတယ္။ interface နဲ႕ implementation ေပါ႔။ အဲဒါေတြကိုဘာေၾကာင္႔သံုးသလဲဆိုတာေတြကိုလည္း Design Pattern ဖတ္ၾကည္႕ရင္သိတယ္။ အားတဲ႔အခါမွဖတ္ၾကည္႕လုိက္ေတာ႔။

SEI ဆိုတာကေတာ႔ Service Endpoint Interface.
SIB ဆိုတာကေတာ႔ Service Implementation Bean

SIB က POJO လည္းျဖစ္ႏုိင္သလို၊ Stateless Session EJB လည္းျဖစ္ႏုိင္တယ္။

TimeServer.java interface ျဖစ္ပါတယ္။
SEI လည္းျဖစ္ပါတယ္။


package timeserver;  // time server
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

/**
 *  The annotation @WebService signals that this is the
 *  SEI (Service Endpoint Interface). @WebMethod signals
 *  that each method is a service operation.
 *
 *  The @SOAPBinding annotation impacts the under-the-hood
 *  construction of the service contract, the WSDL
 *  (Web Services Definition Language) document. Style.RPC
 *  simplifies the contract and makes deployment easier.
*/
@WebService
@SOAPBinding(style = Style.RPC) // more on this later
public interface TimeServer {
    @WebMethod String getTimeAsString();
    @WebMethod long getTimeAsElapsed();
}

@ ေတြက annotation ေတြျဖစ္ပါတယ္။ ဒါေတြကိုေတြ႕ရင္ အေနာက္ဘက္မွာ လုပ္စရာရိွတာေတြ လုပ္ဖုိ႕ ၾကိတ္မွာလုိက္တာလုိ႕ယူဆပါ။ အခ်ိန္ပိုေနရင္ေတာ႔ annotation အေၾကာင္းဖတ္ပါ။ အခ်ိန္သိပ္ေျပာျပေလာက္ေအာင္မပိုရင္ေတာ႔ ကြ်န္ေတာ္အားလို႕ေရးရင္ျပန္လာဖတ္ပါ။

TimeServerImpl.java ျဖစ္ပါတယ္။
SIB လည္းျဖစ္ပါတယ္။ Implementation ပီပီ interface တစ္ခုခုကို implements လုပ္ထားတာကိုေတြ႕ပါလိိမ္႔မယ္။ မေတြ႕မွာစိုးလို႕ အ၀ါေရာင္နဲ႕တားထားပါတယ္။ implements TimeServer လုပ္ထားတာကိုေတြ႕ပါလိမ္႔မယ္။

package timeserver;

import java.util.Date;
import javax.jws.WebService;

/**
 *  The @WebService property endpointInterface links the
 *  SIB (this class) to the SEI (ch01.ts.TimeServer).
 *  Note that the method implementations are not annotated
 *  as @WebMethods.
*/
@WebService(endpointInterface = "timeserver.TimeServer")
public class TimeServerImpl implements TimeServer {
    public String getTimeAsString() { return new Date().toString(); }
    public long getTimeAsElapsed() { return new Date().getTime(); }
}


ဒီ implementation က ခက္ခက္ခဲခဲဘာတစ္ခုမွမလုပ္ထားပါဘူး။ အခ်ိန္ကို return ျပန္တာေလးေရးထားတာပါ။ အခုကလည္း web service အေၾကာင္းေျပာခ်င္တာျဖစ္လုိ႕ အပိုေတြထည္႕မေရးေသးတာလည္းျဖစ္ပါတယ္။

ၾကံဳလို႕ေလရွည္ရင္ ဒီ implementation class ဟာ သူ implements လုပ္တဲ႔ interface မွာ declare လုပ္ထားတဲ႔ methods ေတြ ပါရပါတယ္။ မပါရင္ error တက္မွာပါ။ တကယ္မတတ္လည္း survive ျဖစ္ႏိုင္တဲ႔ စင္ကာပူ I.T ေလာကမွာေတာ႔ မ်ားမ်ားသိစရာမလိုပါဘူး။ ရွာလို႕ရတာေတြေရးတတ္ရံုနဲ႕ရပါတယ္။ အခ်ိန္ပိုေနရင္သာ ငါတုိ႕ အျမဲ ဘာေၾကာင္႔ဒီလိုေရးတာလည္းဆိုတာေလးကို ျပန္ေလ႔လာေပးပါ။

တတိယ class တစ္ခုကေတာ႔ TimeServerPublisher.java ျဖစ္ပါတယ္။ ေကာ္မန္႕ေတြကို မဖ်က္ဘဲ ကူးထည္႕လိုက္ရတာက မူရင္းေရးသူကို ရိုေသသမႈပါ။ တကယ္တမ္း class က လုိင္းနည္းနည္းေလးပါပဲ။


package timeserver;

import javax.xml.ws.Endpoint;

/**
 * This application publishes the Web service whose
 * SIB is ch01.ts.TimeServerImpl. For now, the service
 * service is published at network address 127.0.0.1.,
 * which is localhost, and at port number 9876, as this
 * port is likely available on any desktop machine. The
 * publication path is /ts, an arbitrary name.
 *
 * The Endpoint class has an overloaded publish method.
 * In this two-argument version, the first argument is the
 * publication URL as a string and the second argument is
 * an instance of the service SIB, in this case
 * ch01.ts.TimeServerImpl.
 *
 * The application runs indefinitely, awaiting service requests.
 * It needs to be terminated at the command prompt with control-C
 * or the equivalent.
 *
 * Once the applicatation is started, open a browser to the URL
 *
 *     http://127.0.0.1:9876/ts?wsdl
 *
 * to view the service contract, the WSDL document. This is an
 * easy test to determine whether the service has deployed
 * successfully. If the test succeeds, a client then can be
 * executed against the service.
*/
public class TimeServerPublisher {
    public static void main(String[ ] args) {
      // 1st argument is the publication URL
      // 2nd argument is an SIB instance
      Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());
    }
}

နည္းတာမွ ေတာ္ရုံနည္းတာမဟုတ္ပါဘူး။ တစ္ေၾကာင္းတည္းပဲရိွပါတယ္။

      Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());

အဲဒါဘာလုပ္တာလဲဆိုရင္ေတာ႔ service ကို launch လုပ္လုိက္တာပါပဲ။ 127.0.0.1 ဆိုတာ ကြ်န္ေတာ္တုိ႕ရဲ႕ ခ်စ္လွစြာေသာ Localhost ၾကီးရဲ႕ IP ပါပဲ။ ေနာက္က ၀စၥႏွစ္လံုးေပါက္ကေတာ႔ port ကိုေရးခါနီး ျခားထားတာပါ 9876 ကေတာ႔ 4D နံပါတ္မဟုတ္ပါဘူး။ port နံပါတ္ျဖစ္ပါတယ္။ts ကေတာ႔ service name ျဖစ္ပါတယ္။ က်န္တာေတြေပးၾကည္႕ျပီးစမ္းၾကည္႕လုိ႕ရပါတယ္။ ေနာက္မွာ နရူး (ႏြားရူး၊ new) ပါပါတယ္။ Service Implementation Class ကို ေခၚထားလိုက္ပါတယ္။

Java 6 ရဲ႕ေကာင္းျခင္းေတြထဲကတစ္ခုကေတာ႔ ေနာက္ဆံုး publisher ကို run ၾကည္႕လုိ႕ရပါတယ္။ ဘာ web server မွ မလိုပါဘူး။ Eclipse ကေန run လုိက္ပါ။ Eclipse ကေန run လုိက္ပါလုိ႕ေရးတာက ေရွ႕က class ႏွစ္ခုကို compiled မလုပ္ဘဲ ေနာက္ဆံုးတစ္ခုတည္း run ေနမွာစိုးလုိ႕ပါ။ Eclipse မွာေတာ႔ သူ႕ဘာသူ အလုိက္တသိ compile စရာရိွတာ pile ရွာပါတယ္။ Eclipse ကိုလည္း JDK 1.6 နဲ႕ compile ပါ run ပါ။  အဆင္ေျပပါလိမ္႔မယ္။

Error ေတြ ဘုရားသိၾကားမလို႕ မေပၚလာဘူးဆိုရင္ ဆိုင္ရာ ဆိုင္ရာ ဘုရားေတြကို ေက်းဇူးတင္ပါ။
ျပီးရင္ web browser ကေန
အဲဒါေလးေခၚၾကည္႕ပါ။ xml ၾကီး ဘြားကနဲေပၚလာရင္ ၾကည္ႏူးေနလုိက္ပါ။
ဲ
ဒါပဲလားဆိုရင္ေတာ႔ တစ္ခုက်န္ေသးတယ္လုိ႕ေျပာရမွာပါ။ Java မွာ client တစ္ခုေလာက္ေရးျပီးစမ္းၾကည္႕ပါ။ ေရးေနၾကလူေတြကေတာ႔ URL ေတြနဲ႕ပတ္သက္ရင္ java.net.URL ကိုသံုးရမွန္းရိပ္မိေလာက္ပါတယ္။ မရိပ္မိရင္လည္း ရိပ္မိသလိုလုပ္ပါ။ ဟန္ကိုယ္ဖုိ႕မဟုတ္လား။

package client;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import timeserver.TimeServer;

import java.net.URL;
class TimeClient {
    public static void main(String args[ ]) throws Exception {
        URL url = new URL("http://localhost:9876/ts?wsdl");

        // Qualified name of the service:
        //   1st arg is the service URI
        //   2nd is the service name published in the WSDL
        QName qname = new QName("http://timeserver/", "TimeServerImplService");

        // Create, in effect, a factory for the service.
        Service service = Service.create(url, qname);

        // Extract the endpoint interface, the service "port".
        TimeServer eif = service.getPort(TimeServer.class);

        System.out.println(eif.getTimeAsString());
        System.out.println(eif.getTimeAsElapsed());
   }
}
 comment ေတြဖတ္ေစခ်င္လုိ႕ မဖ်က္ဘဲကူးလာေပးတာကိုသေဘာေပါက္ပါ။ အဲဒါကို run လုိက္ရင္ေတာ႔ ခင္ဗ်ားေမွ်ာ္လင္႔ေစာင္႔စားတမ္းတ ရင္ခုန္ေနရတဲ႔ web service က အခ်ိန္ေလးကို ျမင္ေတြ႕ရမွာပါ။

္package ေတြကို ဘယ္လိုထားထားလဲဆိုတာကို ေရးေနၾကလူဆိုရင္ေတာ႔ package keyword ကိုရွာၾကည္႕ျပီးသိႏိုင္ပါတယ္။ novice နဲ႕ newbie ေတြအတြက္ေတာ႔ ေအာက္မွာ package structure ေလး screen shot လုပ္ထားပါတယ္။



ေက်းဇူးတင္ပါတယ္။

Regards,
Zero

Ref:
Java Web Services Up and Running
Oreilly
Martin Kalin
ISBN 978-0-596-52112-7
Price SGD 55

2 b continued:
ဒီ example မွက concurrent သံုးလို႕မရေသးပါဘူး။
အဲဒါကို အပိုင္းႏွစ္မွာဆက္ပါမယ္။

အပိုင္းသံုးကေန ေျခာက္ေလာက္အထိက JAX-B
ျဖစ္ပါမယ္။

က်န္တာေတြကိုလည္းျဖည္းျဖည္းဆက္ပါဦးမယ္။

Tuesday, January 3, 2012

jQuery

jQuery

အရင္လို view အတြက္ ခဲရာခဲဆစ္လုပ္ေနစရာမလုိေတာ႔ပါဘူး။ jquery ထဲမွာၾကိဳက္တာေလးရွာျပီး ျပင္သံုးလုိ႕ရပါျပီ။ လွလွပပ form ေလးေတြ ဘယ္လိုလုပ္ထားလဲၾကည္႕ပါ။

  • view source ကိုသြားျပီး link ေတြကို click click လုပ္ျပီး ကူးတန္သည္ကူးပါ။
  • css နဲ႕ html မွာပါတဲ႔ url ေတြကို file location အရျပင္ေပးပါ။
  • css မွာသံုးထားတဲ႔ gif ေတြေတြ႕ရင္ web url ရဲ႕ေနာက္မွာ ဆက္ၾကည္႕လုိက္ျပီး ပံုေတြကိုပါ ကူးခ်င္ကူးလို႕ရပါတယ္။ ဥပမာ ဂလို။

http://www.whitespace-creative.com/jquery/jNice/
အဲဒီမွာ view source လုပ္လုိက္ရင္ [link href="jNice.css" rel="stylesheet" type="text/css" /] ဆိုတာကိုေတြ႕မယ္။ ေတြ႕ရင္ jNice.css ကို click လုိက္တယ္ဆိုပါေတာ႔။
button span {
background: transparent url(/jquery/jnice/elements/btn_right.gif) no-repeat scroll right top;
display: block;
 float: left;
 padding: 0px 4px 0px 0px; /* sliding doors padding */
 margin: 0px;
}
အဲဒီလို css code ေတြ႕မယ္။ highlight လုပ္ထားတဲ႔ပံုက ဘယ္ကေရာက္လာလဲ။ ေရွ႕ဆံုးနားကိုၾကည္႕ /jquery တဲ႔ jquery folder ထဲမွာရိွတယ္။http://www.whitespace-creative.com/jquery/jNice/ ဆိုတဲ႔ link အရ jquery folder ကိုေတြ႕ေနရျပီ။ အဲဒီေတာ႔ က်န္တာကလြယ္လြယ္ေလးပဲ။ http://www.whitespace-creative.com/jquery/jnice/elements/btn_right.gif

အဲဒီလို လုပ္လုိက္ရင္ ပံုေတြ အလကားကူးလာလို႕ရတယ္ေပါ႔ဗ်ာ။ photoshop ရမွာပ်င္းတဲ႔သူေတြအတြက္ေပါ႔။ စီးပြားေရးအတြက္ လုပ္စားမယ္႔သူေတြကေတာ႔ မကူးသင္႔ဘူး။ အခုလည္း သင္ၾကားေရးရည္ရြယ္ခ်က္နဲ႕ကူးျပတာပါ။ ဟဲဟဲ။
url ေတြေတြ႕ရင္ ေသခ်ာၾကည္႕ၾကည္႕၊ အမ်ိဳးေတြမ်ားျဖစ္ေနမလားလို႕။ သူ႕ရဲ႕ folder structure ကိုခန္႕မွန္းၾကည္႕လုိ႕ရတယ္။ ပံုေတြကူးျပီးျပီဆိုရင္ေတာ႔
background: transparent url(/jquery/jnice/elements/btn_right.gif) no-repeat scroll right top;
/jquery/jnice/elements/btn_right.gif ဆိုတာကို ျပင္လို႕ရပါျပီ။ ပံုကို css file နဲ႕ folder တစ္ခုထဲထည္႕ထားရင္ေတာ႔ btn_right.gif ဆိုရင္ရပါျပီ။  background: transparent url(btn_right.gif) no-repeat scroll right top;

ကဲ လုပ္ၾကည္႕ပါဦး။ web မွာ browser ေပၚမူတည္ျပီး tweak တန္သည္ tweak, heck တန္သည္ heck ရတတ္ပါတယ္။ browser နဲ႕အဆင္ေျပေအာင္ ကိုယ္႔ css ေတြ ယိုင္တုိင္တုိင္ မျဖစ္ေအာင္လုပ္ရတာမ်ိဳးပါ။ စင္ကာပူမွာေတာ႔ အစိုးရရံုးေတြက အသံုးမက်ဆံုး IE ကိုပဲသံုးစြဲပါတယ္။ software industry မွာေတာ႔ requirement ကို အတိအက်ေျပာျပီးေရးမွတ္ရပါတယ္။ ဥပမာ IE 6 မွာ best view ရမယ္။ က်န္တာေတြမွာ ယိုင္သည္ရိွေသာ္ တာ၀န္မယူ။စသျဖင္႔ အတိအက် သေဘာတူညီမႈရယူရပါမယ္။ IE 6 လို႕ေျပာထားျပီးရင္ IE 7 upgrade လုပ္လုိ႕ form ၾကီးနည္းနည္းရြဲ႕သြားတယ္ဆိုလည္း မတတ္ႏိုင္ပါဘူး။ out of scope ျဖစ္ပါတယ္။ စင္ကာပူမွာ ဒီလုိပဲ black or white လိုင္းေတြတားထားပါတယ္။ အစိုးရ web page ေတြၾကည္႕ရင္ ဘာ browser နဲ႕ view ရမယ္ဆုိတာပါပါတယ္။ payment လုပ္တာမ်ိဳးေတြပါရင္လည္း အဲဒါကို သတိျပဳဖုိ႕လိုပါတယ္။


ကြ်န္ေတာ္ကေတာ႔ web page လည္း မေရးတတ္ပါဘူး။ development သက္သက္ပဲလုပ္ဖူးပါတယ္။ css ေတြ jquery ေတြ၊ js ေတြ အနည္းအက်ဥ္းေလာက္ပဲသိပါတယ္။ designer ေတြအတြက္ေတာ႔ ဒါေတြဟာ ပိုသိသင္႔ပါတယ္။ testing လုပ္ေပးတဲ႔ site ေတြလည္းရိွတယ္လုိ႕သိရပါတယ္။ javascript အတြက္ကေတာ႔ Mozilla ရဲ႕ firebug က နာမည္ၾကီးပါတယ္။ IE မွာဆိုရင္လည္း developer tools ေတြရိွပါတယ္။ chrome မွာလည္းရိွပါတယ္။ စိတ္၀င္စားရင္ စမ္းၾကည္႕လုိ႕ရပါတယ္။


ref:
http://www.queness.com/post/204/25-jquery-plugins-that-enhance-and-beautify-html-form-elements

Monday, December 26, 2011

Wicket စာျမည္း

Wicket စာျမည္း

စေနေန႕က မိန္းမကို အလုပ္ဆင္းလာတာေစာင္႔ရင္း လုိင္ဘရီမွာ ၅ နာရီေလာက္ အခ်ိန္ျဖဳန္းခဲ႔ပါတယ္။ Wicket in action ဖတ္ၾကည္႕ပါတယ္။

သေဘာက်ပါတယ္။ HTTP က stateless ျဖစ္ျပီး Java က stateful ျဖစ္ပါတယ္။ state ေတြကို မွတ္ေနရတာ Java ရဲ႕ ပ်င္းစရာအေကာင္းဆံုးေတြထဲက တစ္ခုျဖစ္ပါလိမ္႔မယ္။ Wicket က state management အတြက္ ေျဖရွင္းေပးမယ္လို႕ဆုိပါတယ္။ Juz java, Juz Html and correct abstraction လို႕ဆိုပါတယ္။ JSP ေတြ၊ JSF ေတြလိုမဟုတ္ဘူး။ သူက ရိုးရိုးရွင္းရွင္းေလးလို႕ဆုိပါတယ္။

နမူနာတစ္ခုပဲလုပ္ၾကည္႕ရေသးတဲ႔အတြက္ သိပ္အမ်ားၾကီးမသိေသးပါဘူး။ သိတာကေတာ႔ ေရွ႕က version တစ္ခုမွာ xss attack vulnerable ရိွတဲ႔အတြက္ update ထုတ္ထားျပီဆိုတာပါပဲ။

မ်ားမ်ားသိတာဟာ ေကာင္းပါတယ္။ ဘာေတြ ရိွေနျပီလဲဆိုတာသိမွ ကိုယ္က ေကာင္းေကာင္း အသံုးခ်ႏိုင္ပါမယ္။ အားလံုးကို ႏႈိးေဆာ္ခ်င္တာက ရပ္မေနပါနဲ႕ ဆက္သြားပါ။ သိသထက္သိေအာင္လုပ္ျပီး သံုးတတ္သထက္သံုးတတ္ေအာင္လုပ္ပါဆိုတာပါပဲ။

wicket အတြက္ plug-in လည္း Eclipse မွာရိွပါတယ္။ Eclipse Helios သြင္းထားရင္ Market Place မွာ ရွာျပီး download လုပ္လုိက္ရံုပါပဲ။

Wicket မွာ Java annotation ကို အလွဴလိုသံုးထားတာကိုေတြ႕ရပါလိမ္႔မယ္။ developer ေတြ အဆင္ေျပဖုိ႕ ထုတ္တာေတြမွန္သမွ်ကုိ warmly welcome လုပ္ပါတယ္။ ASF (Apache Software Foundation) သက္ေတာ္ရာေက်ာ္ရွည္ပါေစလုိ႕ဆုေတာင္းေပးလုိက္ပါတယ္။

Wicket in action ကေတာ႔ Manning ရဲ႕ in action series ပါပဲ။ ဖတ္ရတာ အဆင္ေျပပါတယ္။ ေရွ႕စာမ်က္ႏွာ ၂၀၊ ၃၀ ေလာက္အထိေတာ႔ အဆင္ေျပေနတယ္လုိ႕ တိတိက်က်ေျပာႏိုင္မယ္ထင္ပါတယ္။

J2EE ျဖစ္ေစ၊ C#,.Net ျဖစ္ေစ၊ သူတို႕ၾကိဳးစားေနတာေတြအကုန္လံုးက အဆင္ေျပဖုိ႕ပါပဲ။ Hibernate လိုမ်ိဳး ORM ေတြဆုိရင္ပဲၾကည္႕လုိက္။ သီအိုရီအတူတူပဲ။ implement လုပ္ၾကတာပဲကြာရင္ကြာမယ္။ achieve ျဖစ္ခ်င္တဲ႔ goal ေတြလည္းအတူတူပဲ။ language တစ္ခုခုကို က်က်နနတတ္ဖုိ႕ အခ်ိန္မ်ားမ်ားယူလုိက္ရင္ က်န္တာေတြ ေလ႔လာတဲ႔အခါ အမ်ားၾကီး သက္သာပါတယ္။ learning curve တိုသြားမယ္လုိ႕ဆိုလုိပါတယ္။

Regards,
Zero

Ref:
http://wicket.apache.org/

freeze the column in excel

freeze the column in excel

ဒါကေတာ႔ အပိုေပးတာပါ။ technical နဲ႕ဘာမွမဆိုင္ပါဘူး။
documentation လုပ္တဲ႔အခါ ေရွ႕နားမွာ အေရးၾကီးတဲ႔ row ေတြ excel ရဲ႕ ေရွ႕ပိုင္း column ေတြမွာထားျပီး freeze လုပ္ထားခ်င္တဲ႔အခါမ်ိဳးေတြမွာသံုးပါတယ္။ excel ကိုက အမ်ားၾကီးသံုးလို႕ရတာေတြရိွပါတယ္။

Column ကို select မွတ္ျပီး view Menu ထဲက Freeze Pane မွာ သြားျပီး freeze လုိက္ရံုပါပဲ။
ရဲေတြ ေအာ္တဲ႔ Freeze လိုပါပဲ။ (မလႈပ္နဲ႕ လက္ေျမွာက္ လိုပါပဲ။) columns ေတြ ရပ္ေနမွာပါ။ ေနာက္ကို scroll ပင္ဆြဲေသာ္လည္း သူတုိ႕ကေတာ႔ မေပ်ာက္ေတာ႔ပါဘူး။ ခပ္တည္တည္ၾကီးရပ္ေနတာကိုေတြ႕ရပါလိမ္႔မယ္။

ေရွ႕ကလူေတြ လက္ကျမင္းျပီး freeze သြားတာေတြကို ျပန္ျပီး unfreeze လုပ္ခ်င္ရင္လည္း အဲဒီလိုပါပဲ။ view>freeze pane>Unfreeze ပါပဲ။

Freeze ၾကည္႕ပါဦး။ အဆင္ေျပမွာပါ။

Regards,
Zero

Ref:
http://office.microsoft.com/en-us/excel-help/freeze-or-lock-rows-and-columns-HP005203861.aspx

line Number in Eclipse

line Number in Eclipse

Eclipse အေၾကာင္းကို မေန႕ကဖတ္ၾကည္႕ေတာ႔ I=M=P=R=E=S=S=I=V=E ျဖစ္ရတယ္ ေဒၚလာ သန္းေလးဆယ္ ကုန္က်ခဲ႔တဲ႔ project ျဖစ္ျပီး အလကားေပးထားတယ္ဆိုတာ ကမာၻ႕အံ႔ဖြယ္တစ္ခုပဲ။ IBM ရဲ႕ေစတနာလုိ႕လည္းေျပာႏုိင္ပါတယ္။

အခုကေတာ႔ အေသးအဖြဲတစ္ခုအေၾကာင္းပါ။ Error တက္ရင္ ဘယ္ line ကလည္းေတာ႔ သိၾကရပါတယ္။ Eclipse မွာ line no ကို Ctrl+l နဲ႕ရွာလုိ႕ရပါတယ္။ ဒီထက္ အဆင္ေျပတာတစ္ခုကေတာ႔ source code ကို line no တပ္ထားလုိက္တာ ေကာင္းပါတယ္။ မၾကာမၾကာ Ctrol l (l for line) ႏွိပ္ေနရတာ အခ်ိန္ကုန္ပါတယ္။

မခက္ခဲေပမယ္႔ အသံုး၀င္ပါတယ္။  ကဲလုပ္ၾကည္႕လုိက္ပါဦး။


1) Windows -> Preferences
2) General – > Editors -> Text Editors
and click the “Show Line Numbers” checkbox.



Tuesday, December 20, 2011

Java Map

Java Map

ဒီေန႕ Oracle က နမူနာျပထားတဲ႔ Map ကို ခဏေလာက္ျပန္ၾကည္႕ရင္းသေဘာက်တာနဲ႕ ဒီမွာတင္ထားလိုက္တယ္။
import java.util.*;
public class PhoneList {
   public static void main(String args[]) {
     // Create map - maintain insertion order
     Map map = new LinkedHashMap();

သူ႕ရဲ႕ comment ေတြကိုၾကည္႕ရင္ကို နားလည္ႏိုင္ပါတယ္။ 
Insert လုပ္တဲ႔အခါ ပထမဆံုး ထည္႕တဲ႔ record က ပထမ ေနရာမွာရိွေနခ်င္တယ္ဆိုရင္၊
 တစ္နည္းအားျဖင္႔ order ကို မွတ္ထားခ်င္တယ္ဆိုရင္
LinkedHasMap ကိုသံုးရပါတယ္။ ဒါမ်ိဳးေတြက SCJP မွာေမးတတ္ပါတယ္။

// Add members
     map.put("George", "202-456-1111");
     map.put("Bill", "212-348-8882");
     map.put("Hillary", "202-224-4451");
     map.put("Elvis", "901-332-3322");
     map.put("Jimmy", "229-924-6935");
 
ဒီေနရာမွာ map ထဲကို id နဲ႕ value ထည္႕ပါတယ္။ ဒီေနရာမွာ Phone List လုပ္ေနတာဆိုေတာ႔ လူနာမည္နဲ႕
ဖံုးနံပါတ္အတြဲလုိက္ေလးေတြထည္႕ပါတယ္။ဒါေတြကို Array နဲ႕လုပ္လည္းရပါတယ္။
Map ရဲ႕အားသာခ်က္ေတြကေတာ႔ အမ်ားၾကီးရိွပါတယ္။ အထူးသျဖင္႔ Object ေတြကို 2D, 3D လုပ္တဲ႔အခါလြယ္ပါတယ္။
map တစ္ခုထဲမွာ map ေတြထပ္ထည္႕ခ်င္လည္းရပါတယ္။ dimension မ်ားလာရင္ ပိုျပီး လြယ္ကူေစပါတယ္။
Objects ေတြကိုလည္း အဆင္ေျပေျပသံုးႏုိင္ပါတယ္။ 
http://en.wikipedia.org/wiki/Hash_table Hash table ေတြရဲ႕ structure နဲ႕
 pros and cons ေတြကို အဲဒီမွာဖတ္လို႕လည္းရပါတယ္။
တစ္ခါတစ္ေလၾကရင္ ကိုယ္အဆင္ေျပတာသံုးေနၾကတာမ်ားပါတယ္။ 
ဘယ္လိုနည္းနဲ႕ျဖစ္ျဖစ္ အဆင္ေျပေအာင္ လုပ္ႏိုင္ၾကရင္ေကာင္းပါတယ္။
 တစ္ခ်ိဳ႕ ေနရာေတြမွာ ပိုျပီးအဆင္ေျပလြယ္ကူတယ္ ဆိုတာကိုသိစရာလိုပါတယ္။

// Print map
     print(map, "Insertion Order:");
Print function တစ္ခုေအာက္မွာေရးထားတာကိုေခၚတာပါပဲ။ အေပၚမွာ LinkedHashMap လုပ္ထားတဲ႔အတြက္
Add လုပ္ထားတဲ႔ order အတိုင္းထြက္လာပါတယ္။

// Convert map to regular
     map = new HashMap(map);

တစ္ခါတစ္ေလၾကရင္ Data ေတြရိွေနရင္ေတာ္ျပီ ပထမဆံုးထည္႕ထားတာ ပထမဆံုးမွာရိွကိုရိွေနရမယ္ဆိုတာမ်ိဳး မလိုခ်င္ဘူးဆိုရင္
HashMap သံုးလို႕ရပါတယ္။ Hashing Order လို႕ေခၚပါတယ္။ သူအဆင္ေျပသလို ထည္႕ထားပါလိမ္႔မယ္။ ျပန္ထုတ္လိုက္ရင္ 
Hash Order အတုိင္းထြက္လာပါမယ္။
ေနာက္ဆံုးမွာျပထားတဲ႔ results ေတြကိုၾကည္႕ရင္ပိုျပီးသေဘာေပါက္ႏုိင္ပါတယ္။
// Print map
     print(map, "Hashing Order:");

     // Convert map to sorted
     map = new TreeMap(map);


TreeMap လုပ္လုိက္ရင္ sort လုပ္ျပီးသားရပါမယ္။ ကိုယ္႔ဘာသာကို sorting စီေနဖုိ႕မလုိပါဘူး။

// Print map print(map, "Sorted"); } private static void print(Map map, String message) { System.out.println(message); Set entries = map.entrySet(); Iterator iterator = entries.iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry)iterator.next(); System.out.println(entry.getKey() + " : " + entry.getValue()); } System.out.println(); } }


Your result should look something like the following:
Insertion Order:
George : 202-456-1111
Bill : 212-348-8882
Hillary : 202-224-4451
Elvis : 901-332-3322
Jimmy : 229-924-6935

Hashing Order:
Hillary : 202-224-4451
George : 202-456-1111
Bill : 212-348-8882
Jimmy : 229-924-6935
Elvis : 901-332-3322

Sorted
Bill : 212-348-8882
Elvis : 901-332-3322
George : 202-456-1111
Hillary : 202-224-4451
Jimmy : 229-924-6935

Regards,
Zero

ref:
http://java.sun.com/new2java/supplements/solutions/July02.html
http://en.wikipedia.org/wiki/Hash_table