Wednesday, November 26, 2014

USSD Idea Pro Application Developing (Php) - Part I

අද ගවේෂක ඔයාලට ගේන්නෙ නැවුම්වු අද්දැකීමක්. ඒ තමයි Dialog Ideamart Platform එකෙහි තිබෙන USSD Api එක ගැන , කොහොමද Idea Pro App එකක් Develop කරන්නෙ කියලා.


මේ tutorial එකෙන් ගොඩක්ම ප්‍රයෝජනයක් තියෙන්නෙ
   අලුතින්ම Application හදන අයටයි , Idea Apps හදලා තියෙන Idea Pro App  හදන්නෙ කොහොමද        කියලා දැන ගන්න ඔින අයටයි .

මොකක්ද මේ USSD කියන්නෙ ?

Unstructured Supplementary Service Data.

ඒ කිව්වේ ??????????? :o

දැන් ඔයාල ඔයාලගේ Mobile වලින් Short Codes Type කරලා Menu එකක් Popup කරගන්නෙ....

 අන්න ඒ Service එක තමයි USSD කියන්නෙ . සාමාන්‍යයෙන් dialog users ලගෙ *#456#  ‍වගේ Short Code වගේ ඒවා ....

http://www.ideamart.lk/idea-pro සයිට් එකට ගිහින් Developer Bundle එක Download කරගන්න



දැන් ඔබ download කරගත් location එකට command prompt එක භාවිතාකර path එක සාදා ගන්න


දැන් sdp-simulator.bat console , command එක යොදා Wrapper එක start කරගන්න




දැන් ඔබ ideamart simulator එක run කිරීම සදහා අවශ්‍යය මුලික පියවර අනුගමනය කර අවසානය

simulator එකෙහි අපි run කරන php file එක localhost server එක තුල අලුතින් folder එකක් සාදා එයට ඔබ download කරගත් sample ussd php application එක paste කරගන්න.

මෙහි A යනු ඔබ ideamart dveloper bundle එක බාගත කරගත් ස්ථානය වන අතර B යනු wamp sever එකෙහි localhost server එකට අදාල ස්ථානයයි.



ඊළගට ussd සදහා අවශ්‍යය වන libraries  පහත අාකාරය‍ට සුදුසු ස්ථානයට copy paste කරගන්න



දැන් ඔබේ wamp හෝ xampp server එක run කරගන්න


ඔබ wamp server නිසි ආකාරව open කරගත්තානම් පහත පරිදි දිස්වනු ඇත




දැන් අපි simulator එක මගින් ussd app එක run වීම සදහා අවශ්‍යය පියවරයන් බලමු


පහත ආකාරයට browser එකෙහි url එක සකසාකගන්න


 ඉන් පසු USSD Tab එක select කර ගන්න


දැන් ඔබ ඔබගේ SampleUssdApp.php file එකෙහි නිසියාකරව libraries add කර ඇත් දැයි බලන්න



මෙහි MtUssdSender.php සහ MoUssdReceiver.php යනු අත්‍යාවශ්‍යය file වේ Log file එකක් දැමීමද සුදුසු වේ .


දැන් නැවත simulator view එකට පිවිසෙන්න

එහි පහත ලෙස ඔබේ URL එක සකසා ගන්න




මෙහි localhost හි port එක ඔබගේ පරිගණකයේ වෙනස් විය හැක

දැන් ideamart simulator එකෙහි send button click කරන්නත

 ඔබගේ ussd application එක පහත ආකාරයට නිසියාකාරව preview වේ දැයි බලන්න


මෙම tutorial එක මගින් මුලික වශයෙන් ussd application එකක් run කිරීමට අව්‍යය දේ පමණක් සදහන් කර ඇත.





Monday, November 10, 2014

C# Essentials


මොකක්ද මේ C# ?

ගොඩක් දෙනෙක් Java ගැන කියපු ගමන් අනිත් අය කියන්නෙ  කියන්නෙ "නෑ නෑ C# තමා හොද Java වලට වඩා"

තව කට්ටියක් C# ගැන කියපු ගමන් අනිත් අය කියන්නෙ කියන්නෙ "නෑ නෑ Java තමා හොද C#වලට වඩා"

:D :D :D

ගවේෂකනම් Java , C# දෙකටම කැමතියි :D

අපි Java Tutorial ගැන බලපු නිසා දැන් C# ගැනත් බලමු

C# කියන්නෙ Microsoft ලගෙ Language එකක් . .NET FRAMEWORK එක මත පදනම් වු Object Oriented වු තවත් පරිගනක භාෂාවක්.

 [ multi-paradigm programming language encompassing strong typingimperative,declarativefunctionalgenericobject-oriented (class-based), and component-oriented programming ]

අපි මෙහිදී C# වල සාමාන්‍යයෙන් දැනගෙන සිටීම අත්‍යාවශය යැයි සැලකෙන දේ පමණක් කතා කරනු ලබනවා.


.NET FRAMEWORK

.NET Framework පහත පරිදි Layers ගනන‍ාවකින් යුක්ත වේ.

.NET හි Execution වීමේ පටිපාටිය පහත පරිදි වේ





C# With SQLSERVER

මෙහිදී database එකකට Data Insert, Edit , Update සහ Delete වීම සම්බන්දව සලකාබලමු

පලමුව Windows Form Application එකක් Create කරගන්න



ඉන්පසු පහත සදහන් Designs ඒ ආකාරයටම ඔබද නිරිමාණය කරගන්න

Form1  මෙලෙසද (CRUD Opertaion සහ DataGrid එකක් Button ලෙස)



CRUD Opertaion මත Click කල විට තවත් Form එකක් open වීමට මෙම button double එක Click කර පහත පරිදි Code කරන්න

Form2 f2 = new Form2();
 f2.Show();
------------------------------------------------------------------------------------------------------------------------
ඊට අදාල Form2 පහත පරිදි වේ


-------------------------------------------------------------------------------------------------------------------------

මෙහිදී Add,View,Delete,Update යන button සදහා පොදුවේ database connections සාදනු ලබයිග
[ ඔබට එය කැමති පරිදි සිදු කල හැක --- Singleton Pattern , MVC ]

Database Connection ,Command සදහා

           SqlConnection cn = new SqlConnection();
            SqlCommand cm = new SqlCommand();
            //Connection 
            cn.ConnectionString = "<<>>Put Your Connection String";
            cm.Connection = cn;

ඉහත සදහන් code පොදු වේ

පහත කේත Add,View,Delete,Update වලට අදාපව බලමු

ADD

            cm.CommandText = "INSERT INTO test values(@a,@b,@c,@d)";
            cm.Parameters.AddWithValue("a",textBox1.Text);
            cm.Parameters.AddWithValue("b", textBox2.Text);
            cm.Parameters.AddWithValue("c", textBox3.Text);
            cm.Parameters.AddWithValue("d", textBox4.Text);
            try
            {
                cn.Open();
                cm.ExecuteNonQuery();
                MessageBox.Show("Data Added");
                cn.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Error ");
            
            }
            

VIEW

cm.CommandText = "SELECT * FROM test WHERE emp_id='"+textBox1.Text+"'";
            
            try
            {
                cn.Open();
                SqlDataReader ed=cm.ExecuteReader();
                while (ed.Read())
                {
                    textBox2.Text=ed["name"].ToString();
                    textBox3.Text=ed["address"].ToString();
                    textBox4.Text=ed["contact"].ToString();
                }

                MessageBox.Show("Done");
                cn.Close();
            }
            catch (Exception)
            {
                MessageBox.Show("Error ");

            }


EDIT

මෙහිදී වෙනස්වන හා අවශ්‍ය Command එක පමණක් සදහන් කර ඇත
එමෙන්ම textbox හි සදහන් values list එකකට convert කර ඇත

cm.CommandText = "UPDATE employee set emp_name='" + list[1] + "',emp_address='" + list[2] + "',emp_contact='" + list[3] + "' where emp_id='"+list[0]+"'";

DELETE


මෙහිදී වෙනස්වන හා අවශ්‍ය Command එක පමණක් සදහන් කර ඇත

cm.CommandText = "DELETE FROM employee where emp_id='" + textBox1.Text + "'";


-------------------------------------------------------------------------------------------------------------------------

මෙයට අදාල Database එක පහත පරිදි සකසා ගන්න



දැන් ඔබේ Employee Details ඇතුලත් කිරීමේ වැඩසටහන නිසියාකාරව ක්‍රියාකරන්නේදැයි බලන්න


Delegates

ඔයාලා දැනටමත් දන්නා ඇති Delegates වලින් Event Handle කරනවා කියලා. ඉතින් අපි බලමු කොහොමද Implementation එක කියලා

Delegates ගැන වැඩි විස්තර Microsoft ගෙන්ම අහගන්න :D  - http://msdn.microsoft.com/en-us/library/ms173171.aspx

දැන් පහත ආකාරයට Design එක කරගන්න Form3 සහ Form2



Form2 හි පහත ලෙස code කරන්න


ඉහත += මගින් එයට සිදු වීමට අව්‍යය දෑ Assign කරයි

Form3 හි පහත ලෙස code කරන්න


Delegate එක MyDelegate ලෙසදක. event එන listner ලෙසද ගනී

Button Click කරන විටදී listner event එක call කරනු ලබයි. එමගින් එයට සම්බන්ධිත Form2 හි listbox එකෙහි Values වැඩිවේ



ඔබට මෙම ආකාරයම Static keyword භාවිතයෙන් සිදු කල හැක
--------------------------------------------------------------------------------------------------------------------------
Special Key words in C#


  • New

New keyword is also used in polymorphism concept, but in the case of method overloading So what does overloading means, in simple words we can say procedure of hiding your base class through your derived class.
It is implemented as:
class A
    {
        public void show()
        {
            Console.WriteLine("Hello: Base Class!");
            Console.ReadLine();
        }
    }
 
    class B : A
    {
        public new void show()
        {
            Console.WriteLine("Hello: Derived Class!");
            Console.ReadLine();
        }
    }

  • Virtual

Virtual keyword is used for generating a virtual path for its derived classes on implementing method overriding. Virtual keyword is used within a set with override keyword. It is used as

class MyBaseClass
{
    // virtual auto-implemented property. Overrides can only 
    // provide specialized behavior if they implement get and set accessors. 
    public virtual string Name { get; set; }

    // ordinary virtual property with backing field 
    private int num;
    public virtual int Number
    {
        get { return num; }
        set { num = value; }
    }
}


class MyDerivedClass : MyBaseClass
{
    private string name;

   // Override auto-implemented property with ordinary property 
   // to provide specialized accessor behavior. 
    public override string Name
    {
        get
        {
            return name;
        }
        set
        {
            if (value != String.Empty)
            {
                name = value;
            }
            else
            {
                name = "Unknown";
            }
        }
    }

}
  • Out
The out keyword causes arguments to be passed by reference. This is like the ref keyword, except that ref requires that the variable be initialized before it is passed. To use an outparameter, both the method definition and the calling method must explicitly use the out keyword. For example:

class OutExample
{
    static void Method(out int i)
    {
        i = 44;
    }
    static void Main()
    {
        int value;
        Method(out value);
        // value is now 44
    }
}



ගැටලු සදහා මෙහි පහතින් Comment කරන්න

Wednesday, July 30, 2014

WEET (Way of Expressway E Ticketing)

What is WEET? What is is it about ? How was it begun ?

Actually WEET is a mobile Telco application which provides the facility of booking your ticket in ExpressWay .

In TADHACK 2014 Competition it was originally created with the USSD ,SMS ,CAS, and as a web services .

There three parties invovled in this application process

  1. User(Passenger )
  2. Bus Driver
  3. Bus Owner
User (Passenger )can dial the USSD code #771*933# from his Dialog mobile and he access to the E ticketing System .
Then he will get a menu and he can choose his route,time he will pay the ticket amout via this application.
After completing these steps he will get a confirmation SMS with the reference number.

In the same time Bus Driver receive that ticket purchasing details into the tab which is in the bus.So he can get the count total income and other details.

Not only that , also this transaction process can view by the  Bus Owner through a Web Application or a mobile apllication. 

The income directly transfer in to Bus Owner's bank account when the Passenger purchase his ticket.



    • So no need to be a in a huge queue until bus reaches
    • No need to pay using cash
    • Every process is transparent to the bus owner


Watch the WEET Apllication Demo and get a clear idea about how it works




Monday, July 28, 2014

Important points in Java Networking/ RMI / Socket Programming/Regular Expressions

ඔන්න Java EE ඉගන ගන්න අයට Java Networking/ RMI / Socket Programming වැදගත් කොටස් කිහිපයක විස්කරයක් කරන්නයි යන්නෙ ගවේෂක අද.

 Java Networking

In java networking we can divide it into two categories and let's see the comparision

  1. Stream Based(TCP)
    • Connection based
    • Reliable
  2. Packet Based(UDP)
    • Connectionless
    •  Not Reliable

Establish a simple Server using Stram Socket
1.Server Socket

ServerSocket server=new ServerSocket (Port_Number,Queue_Lengh);

2.Accept Client

Socket Connection=Server.accept();

3.Open Path

Input and OutPut Stream

4.Processing Part

Communication

5.Server Close

************************************************************************
Client/Server Communication Process Using TCP


  1. Server issues a call to create a listening socket.
  2. Server and client create a socket.
  3. Server and client bind socket. (This step is optional for a client.)
  4. Server converts an unconnected socket into a passive socket (LISTEN state).
  5. Server issues an accept() and process blocks waiting for a connection request.
  6. Client sends a connection request.
  7. Server accepts the connection; a new socket is created for communication with this client.
  8. Server receives device information from the local host.
  9. Data exchange takes place.
  10. Client and server delete the socket.
  11. Server deletes the listener socket when the service to the client is terminated.
UDP Socket Communication Process


  1. Server and client create a socket.
  2. Server and client bind the socket name.
  3. Data exchange takes place.
  4. Server and client delete the socket.

Port Vs Socket(Referenced)



port is a logical connection method two end points communicate with. Ports operate at the Transport layer of the OSI
A TCP socket is not a connection, it is the endpoint of a specific connection.
There can be concurrent connections to a service endpoint, because a connection is identified by both its local and remote endpoints, allowing traffic to be routed to a specific service instance.
Sockets are a means of plugging the application layer in. Sockets are determined by an IP address and port number.A socket is one end point of a connection.

A socket consists of three things:
  1. An IP address
  2. A transport protocol
  3. A port number
A port is a number between 1 and 65535 inclusive that signifies a logical gate in a device. Every connection between a client and server requires a unique socket.
For example:
  • 1030 is a port.
  • (10.1.1.2 , TCP , port 1030) is a socket.
A port is a virtualisation identifier defining a service endpoint (as distinct from a service instance endpoint aka session identifier).

A TCP socket is an endpoint instance defined by an IP address and a port in the context of either a particular TCP connection or the listening state.

There can only be one listener socket for a given address/port combination.

Java Remote Method Invocation


Steps of RMI
  • Make sure there is these classes are available
    • Serializable Classes
    • Remote Classes and Interfaces
  • Should be as follow the programming part order
    • Programming a client
    • Programming a server
  • Finally Runing the programme should be as  follows
    • Run the Client First

Codings


Hello.java
import java.rmi.server.*;
import java.rmi.*;

public class Hello extends UnicastRemoteObject implements HelloInterface{
public String message;
public Hello(String msg) throws RemoteException{
message=msg;
}
public void login(String name, String pass) throws RemoteException{

}
public void logout(String name) throws RemoteException{

}

public String chat(String name, String msg) throws RemoteException{

return message;
}

}

HelloClient.java
import java.rmi.*;

public class HelloClient{

public static void main(String[] arg){

try{
HelloInterface hello = (HelloInterface)Naming.lookup("//localhost:1099/Hello");
hello.login("Lahiru","123");
System.out.println(hello.chat("Lahiru","Hi!!!"));
}catch(Exception e){
System.out.println("Exception :"+e.getMessage());
}

}

}

HelloServer.java
import java.rmi.*;
import java.io.*;

public class HelloServer{
public static void main(String[] arg){
try{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Login Name: ");
String name = br.readLine();
Naming.rebind("Hello", new Hello(name));
System.out.println("Hello Server Ready");
}catch(Exception e){
System.out.println("Exception "+e);
}
}

}

HelloInterface.java
import java.rmi.*;

public interface HelloInterface extends Remote{

public void login(String name, String pass) throws RemoteException;
public void logout(String name) throws RemoteException;

public String chat(String name, String pass) throws RemoteException;

}


Regular Expressions





Regular ExpressionDescription
\dAny digit, short for [0-9]
\DA non-digit, short for [^0-9]
\sA whitespace character, short for [ \t\n\x0b\r\f]
\SA non-whitespace character, short for [^\s]
\wA word character, short for [a-zA-Z_0-9]
\WA non-word character [^\w]
Here is a code for email validation pattern

EmailValidator.java
package com.mkyong.regex;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class EmailValidator {
 
 private Pattern pattern;
 private Matcher matcher;
 
 private static final String EMAIL_PATTERN = 
  "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
  + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
 
 public EmailValidator() {
  pattern = Pattern.compile(EMAIL_PATTERN);
 }
 
 /**
  * Validate hex with regular expression
  * 
  * @param hex
  *            hex for validation
  * @return true valid hex, false invalid hex
  */
 public boolean validate(final String hex) {
 
  matcher = pattern.matcher(hex);
  return matcher.matches();
 
 }
}
For Validate a Form Entry Data

Validate.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RegularEx;
import java.util.Scanner;
/**
 *
 * @author Lahiru Dhananjaya
 */
public class Validate {
    public static void main(String[] args) {
        ValidateInput vi=new ValidateInput();
     
        Scanner s=new Scanner(System.in);
     
        System.out.println("Enter First Name");
        String fname=s.next();
     
        System.out.println("Enter Last Name");
        String lname=s.next();
     
        System.out.println("Enter Address");
        String address=s.next();
     
        System.out.println("Enter City");
        String city=s.next();
     
        System.out.println("Enter State");
        String state=s.next();
     
        System.out.println("Enter Zip");
        String zip=s.next();
     
        System.out.println("Enter Phone Number");
        String phone=s.next();
     
        if(!vi.validateFirstName(fname))
        {
            System.out.println("Invalid First Name");
        }
        else if(!vi.validateLastName(lname))
        {
            System.out.println("Invalid Last Name");
        }
        else if(!vi.validateAddress(address))
        {
            System.out.println("Invalid Address");
        }
        else if(!vi.validateCity(city))
        {
            System.out.println("Invalid City");
        }
        else if(!vi.validateState(state))
        {
            System.out.println("Invalid State");
        }
        else if(!vi.validateZip(zip))
        {
            System.out.println("Invalid Zip");
        }
        else if(!vi.validatePhone(phone))
        {
            System.out.println("Invalid Phone");
        }
        else
        {
             System.out.println("Ok");
        }
     
     
     
    }

}


ValidateInput.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package RegularEx;

/**
 * 
 * @author Lahiru Dhananjaya
 */
public class ValidateInput {
    public static boolean validateFirstName(String firstName)
    {
        return firstName.matches("[A-Z][a-zA-Z]*");
    }
    
    public static boolean validateLastName(String lastName)
    {
        return lastName.matches("[a-zA-Z]+([ '-][a-zA-Z]*)");
    }
    
    public static boolean validateAddress(String address)
    {
        return address.matches("\\d+\\s+[a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+");
    }
    
    public static boolean validateCity(String city)
    {
        return city.matches("[a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+");
    }
    
    public static boolean validateState(String state)
    {
        return state.matches("[a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+");
    }
    
    public static boolean validateZip(String zip)
    {
        return zip.matches("\\d{5}");
    }
    
    public static boolean validatePhone(String phone)
    {
        return phone.matches("[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}");
    }
    
    
}


Java Bean Class Example

Edisplay.java

package xm_java_bean;

/**
 *
 * @author Lahiru Dhananjaya
 */
public class Edisplay {
    public static void main(String[] args) {
        Employee em=new Employee();
        em.setName("Lahiru");
        em.setNumber("001");
     
        System.out.println(em.getName());
        System.out.println(em.getNumber());
    }

}


Employee.java
package xm_java_bean;

/**
 *
 * @author Lahiru Dhananjaya
 */
public class Employee implements java.io.Serializable {

    private String EmployeeName;
    private String EmployeeNumber;
 
    //Default Constructor
    public Employee() {
    }

    public void setName(final String EmployeeName) {
        this.EmployeeName = EmployeeName;
    }

    public void setNumber(final String EmployeeNumber) {
        this.EmployeeNumber = EmployeeNumber;
    }
    
    public String getName() {
        return EmployeeName;
    }
    public String getNumber() {
        return EmployeeNumber;
    }
    
}

********************************************************************************
To view Full code in JSP(Referenced)


package player;
 
public class PersonBean implements java.io.Serializable {
 
    /**
     * Property <code>name</code> (note capitalization) readable/writable.
     */
    private String name = null;
 
    private boolean deceased = false;
 
    /** No-arg constructor (takes no arguments). */
    public PersonBean() {
    }
 
    /**
     * Getter for property <code>name</code>
     */
    public String getName() {
        return name;
    }
 
    /**
     * Setter for property <code>name</code>.
     * @param value
     */
    public void setName(final String value) {
        name = value;
    }
 
    /**
     * Getter for property "deceased"
     * Different syntax for a boolean field (is vs. get)
     */
    public boolean isDeceased() {
        return deceased;
    }
 
    /**
     * Setter for property <code>deceased</code>.
     * @param value
     */
    public void setDeceased(final boolean value) {
        deceased = value;
    }
}

TestPersonBean.java:

import player.PersonBean;

/**
 * Class <code>TestPersonBean</code>.
 */
public class TestPersonBean {
    /**
     * Tester method <code>main</code> for class <code>PersonBean</code>.
     * @param ARGS
     */
    public static void main(String[] args) {
        PersonBean person = new PersonBean();
 
        person.setName("Bob");
        person.setDeceased(false);
 
        // Output: "Bob [alive]"
        System.out.print(person.getName());
        System.out.println(person.isDeceased() ? " [deceased]" : " [alive]");
    }
}

testPersonBean.jsp;
<% // Use of PersonBean in a JSP. %>
<jsp:useBean id="person" class="player.PersonBean" scope="page"/>
<jsp:setProperty name="person" property="*"/>
 
<html>
    <body>
        Name: <jsp:getProperty name="person" property="name"/><br/>
        Deceased? <jsp:getProperty name="person" property="deceased"/><br/>
        <br/>
        <form name="beanTest" method="POST" action="testPersonBean.jsp">
            Enter a name: <input type="text" name="name" size="50"><br/>
            Choose an option:
            <select name="deceased">
                <option value="false">Alive</option>
                <option value="true">Dead</option>
            </select>
            <input type="submit" value="Test the Bean">
        </form>
    </body>
</html>