Wednesday, December 29, 2010

J2ME Default Emulator without asking for Permission

While running J2ME project with Default Emulator it will ask for Permissions in case of File Read/Write, HTTP Connectivity etc. To get rid of this Permission on every access you have to change the Security options of Emulator. In my case I am using NetBeans IDE, so to change these options I will go through following steps:
  1. Open Project Properties
  2. Click on Manage Emulators Button
  3. Go to Tools & Extension Tab and Click Open Preferences Option
  4. On Preferences Window click on Security option
  5. Select Security Policy to 'JTWI'
  6. Select Security Domain as 'trusted'
  7. Now run the project it will not ask for access Permissions

 rizzz86

Friday, September 10, 2010

Unit Testing for J2ME - JMUnit

In professional development environment it is a common practice to create Unit Tests. On Java platform there are lots of research and development done on Unit Tests for Enterprise Edition. As far as Java Micro Edition is concerned one of the framework available is JMUnit.

Creating and executing a test case using jmunit is quite simple and can be done without wasting much time to explore it. Following steps will guide you how to work with jmunit:

  •  In your mobile application right click on package (where you want to create a unit test) and select option 'New > Empty JMUnit Test'.
  • It will create a unit test class for you that will look like this:
    /*
     * ABCTest.java
     * JMUnit based test
     *
     */
    
    package hello;
    
    
    import jmunit.framework.cldc10.*;
    
    /**
     * @author rizwan
     */
    public class ABCTest extends TestCase {
        
        public ABCTest() {
            //The first parameter of inherited constructor is the number of test cases
            super(0,"ABCTest");
        }            
    
        public void test(int testNumber) throws Throwable {
        }    
    }  

    • Next you will create a test method in same class and call it in test() using switch cases.
    • Total count of test cases will also be mentioned in unit class constructor.
    • Now the code will look like this:

    /*
     * ABCTest.java
     * JMUnit based test
     *
     */
    
    package hello;
    
    
    import jmunit.framework.cldc10.*;
    
    /**
     * @author rizwan
     */
    public class ABCTest extends TestCase {
        
        public ABCTest() {
            //The first parameter of inherited constructor is the number of test cases
            super(1,"ABCTest");
        }            
    
        public void test(int testNumber) throws Throwable {
            switch(testNumber){
                case 0: 
                    testOne();
                    break;
            }
        }    
    
        private void testOne() throws Exception{
            String tmp = "Hello Rizwan";
            assertEquals(tmp, "Hello Rizwan");
        }
    } 

    • After that you have to mention 'ABCTest' as your Midlet.
    • Go into 'project properties > Application Descriptor > MIDlets' and define unit test name and package here.
    • Run application and you will also get Test option on screen:  
    • Test the project and it will show you the results




    Your mobile test case is ready !

    rizzz86

    Saturday, September 4, 2010

    Open Transport Tycoon Deluxe (TTD)

    TTD is one of my most favorite games that I have played and when I saw the 'Open' with it, I was really excited to install it on my Ubuntu OS.

    The installation of Open TTD is difficult and you need to be a bit keera of shell scripting to do this job. I have followed all the steps on this link and managed to install OTTD successfully. After completing installation and launching the game I was really amazed by watching the same TTD main screen as what I was playing on my 'Windows OS' four years back.


    The game is upgraded now and contains four different types of maps with each map containing different industries, disasters, vehicles etc. Maps are also really interesting with environment like a Desert area map, Snow area map, Toyland area map and a default one as well. I have some getty images of the game that are as follows:


    All TTD lovers do enjoy this on your Linux OS.

    rizzz86

    Friday, September 3, 2010

    Amir, Asif & Salman - From Hero to Zero


    Pakistani cricketers are again under a controversy and this time it is a serious one - the FIXING case :|

    The trio who are Hero of last week are now Zero. In my last blog I am really excited of Pakistan's fighting win over England and now I am not much interested to even watch a cricket match.

    Is it a non-professionalism or a trap or anything else - the trio-players has taken part in this show of money. The future of these players is still not clear and are at stake. But as a Pakistani I am still hoping these players will not have a life ban and will play cricket after completing their punishments.

    rizzz86

    Sunday, August 22, 2010

    Pakistan beat England after 9 Years


    A victory dedicated to the flood victims of Pakistan.

    Pakistan beat England in England after 9 years in a Test Match is another huge achievement by a rookie team within a month. Previously they beat Australia after 15  years in a Test Match.

    A good team work by Pakistani bowlers as well as batsmen has done the work for Pakistan. Taking a first inning lead and excellent comeback by Paki bowlers in the 2nd innings has provided them a victory. There are lots of moments and achievements in a match that really boost the team moral. Some of them includes 1) Wahab Riaz's superb debut 5 wicket hall, 2) M. Yousuf solid comeback in a International side, 3) M. Amir becomes the youngest bowler to take 5 wicket hall in England in a Test Match and become a Man of the Match, 4) Saeed Ajmal's Spin magic, 5) Azhar Ali's unbeaten rock knock of 92* in the first innings and 6) Kamran Akmal's shocking 8 catches to reach his 200 dismissals in a Test Match.

    Also a big relief for a new captain Salman Butt to still remain in the series. We all are hoping to win the Lord's Test to level the series.


    Yousuf is a class act.

    rizzz86

    Wednesday, August 18, 2010

    Flood Relief Update Link

    Following link contains the activities performed by a group of people ( from IT/Software Industry of Karachi) for flood victims:

    http://floodreliefupdates.blogspot.com/


    rizzz86

    Saturday, July 31, 2010

    Cricket - Rookie Paki Beat Aussies in Tests "Unbelievable"

    At last Pakistan has proved that they are now better than Bangladesh and Zimbabwe after beating Australia once in last 15 years. The hard fought three wicket win over Aussies boost the team's confidence and allow the rookie captain "Salman Butt" to retain his captaincy role.

    When you look at the Pakistani team, currently they are the most weakest team in the history of Pakistan cricket. There are no bowling option for Wasim, Waqar, Shoaib Akhtar, Saqlain, Mushtaq etc - even than they can able to bowl Aus out on 88. Also the worst ever batting line-up missing Saeed, Inzamam, Yousuf, Younus etc - even than they can able to chase the target (credit goes to the bowlers).

    Early Captaincy Role:
    Salman Butt is very early for Test match captaincy but he has to take this responsibility. The practice for assigning captaincy role to some one who is early in his career stages is not bad for some teams - for example we have Smith for SouthAfrica, Strauss for England and Dhoni for India. But these three players have proved themselves as a right captain with their performances. We are also expecting same from Butt.

    I have gathered some numbers/stats of the match that are as follows:

    The Age Factor:

    Australia:
    Shane Watson (29), Simon Katich (34), Ricky Ponting (35), Michael Clark (29), Michael Hussey (35), Marcus North (31), Tim Paine (25), Steven Smith (21), Mitchell Johnson (28), Ben Hilfenhaus (27), Dough Bollinger (29)
    Total Sum = 323
    Average Age = 29.3

    Pakistan:
    Imran Farhat (28), Slaman Butt (25), Azhar Ali (25), Umar Amin (20), Umar Akmal (20), Shoaib Malik (28), Kamran Akmal (28), Mohammad Amir (18), Umar Gul (26), Danish Kaneria (29), Mohammad Asif (28)
    Total Sum = 275 (Not even a single player exceeds Australia's average age)
    Average Age = 25

    Test Matches Played:

    Australia:

    Shane Watson (20), Simon Katich (52), Ricky Ponting (146), Michael Clark (62), Michael Hussey (52), Marcus North (17), Tim Paine (2), Steven Smith (2), Mitchell Johnson (36), Ben Hilfenhaus (11), Dough Bollinger (10)
    Total Sum =  410
    Average Matches = 37

    Pakistan:
    Imran Farhat (35), Slaman Butt (29), Azhar Ali (2), Umar Amin (2), Umar Akmal (8), Shoaib Malik (30), Kamran Akmal (50), Mohammad Amir (10), Umar Gul (28), Danish Kaneria (60), Mohammad Asif (19)
    Total Sum = 273
    Average Matches =24.8


    This is what talent and spirit is all about. Pakistan has beaten Australia that are much better as the stats suggests.

    rizzz86

    Friday, July 9, 2010

    MySQL Import/Export Commands

    Importing and Exporting through commands for mysql:

    Import File into Mysql:
    • mysql -ppassword -hlocalhost schemaname < /filePath/file.sql
    Export Mysql Schema in File:
    • mysqldump -uusername -ppassword database_name > dump.sql
    • mysqldump -uusername -ppassword -no-data database_name > dump.sql

    rizzz86

    Friday, May 7, 2010

    Add External JAR in j2me-polish Project


    To use any external jar in a j2me-polish project following steps need to be taken:

    • Copy jar file in j2me-polish/import/ folder
    • Add jar file in project libraries
    • Update build.xml file by adding attribute 'binarylibraries="jarname1.jar;jarname2.jar"' inside < build > tag. (Multiple jars can be defined by placing semi-colon between jars)

    rizzz86


    Tuesday, May 4, 2010

    Class.forName("classname").newInstance()

    Don't do this foolish mistake again :|

    I was trying to get the class instance using Class.forname(...) but continuosly getting IllegalAccessException.

    At the end I found that the class I am trying to call has a private constructor in it. So it cannot be possible to create an instance of class with private constructor.


    rizzz86

    Thursday, April 22, 2010

    Maven j2me-Archetype

    I am using Netbeans6.7 for mobile project development and want to make that project a 'maven project'. I have maven configured on my machine.

    To make maven based j2me project I have created a new project from File > New Project > Maven > Maven Project > j2me Archetype (2.0.4). The project created successfully and showing the properties of maven as well . . .  BUT !!

    I cannot able to view the properties of mobile project (i.e. Platform Type, Device Profile and Configuration, Midlet Information etc). To execute that project it requires a class with main() method. So I have posted all that on forum and finally got the following answer:

    j2me development is not supported for maven projects in netbeans :(

    rizzz86

    Thursday, April 15, 2010

    JSON source for J2ME (mobile applications)


    Javascript Object Notation (JSON) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. I am trying to use it in for mobile application development.

    Today I was looking for a JSON source code for Java Micro Edition (J2ME). After lots of googling I have found it from the following link:


    https://meapplicationdevelopers.dev.java.net/source/browse/meapplicationdevelopers/demobox/mobileajax/lib/json/src/org/json/me/



    rizzz86

    Wednesday, April 7, 2010

    Share Common Code Between J2ME and J2SE Project -- Problem/Solution


    Statement:

    If you are creating a client/server project on Java, where client is a mobile device and server is a web application. Also if there is a common code between client and server then where do you place that common code ?

    I also faces the same and go through the following phases before deciding what to do. The two points that came in mind right away are:

    • Create a J2SE Project and place common code there. Make your client and server project dependant on that common project.
    • Create a J2ME Project and place common code there. Make your client and server project dependant on that common project.

    First I have created J2SE as a Common Project:

    When I execute the client (J2ME) project with a dependency of common project (J2SE), I got the following error:

    Running with storage root DefaultColorPhone
    Method............: 100d2aa8 'com/sun/midp/midlet/MIDletState.createMIDlet (stat
    ic)'
    Stack Chunk.......: e58cd4
    Frame Pointer.....: e58d30
    Current IP........: 10128592 = 10128584 + offset 14
    Previous Frame....: e58cf4
    Previous IP.......: 1012052b (offset 22)
    Frame size........: 8 (1 arguments, 7 local variables)
    Argument[0].......: e59a9c
    Local[1]..........: 0
    Local[2]..........: e58cf4
    Local[3]..........: e68858
    Local[4]..........: e58d08
    Local[5]..........: 100dcdd0
    Local[6]..........: e58cd4
    Local[7]..........: 1015f0a0
    Operand[1]........: e59a9c
    
    Method............: 100cd0e4 'com/sun/midp/midlet/Selector.run (virtual)'
    Stack Chunk.......: e58cd4
    Frame Pointer.....: e58cf4
    Current IP........: 1012052b = 10120515 + offset 22
    Previous Frame....: 0
    Previous IP.......: 1
    Frame size........: 6 (1 arguments, 5 local variables)
    Argument[0].......: e59d10
    Local[1]..........: e68a68
    Local[2]..........: e59a9c
    Local[3]..........: 0
    Local[4]..........: 0
    Local[5]..........: 0
    Operand[1]........: e68a68
    
    VM status:
    Instruction pointer.: 10128592 (offset within invoking method: 14)
    Next instruction....: 0x4c
    Frame pointer.......: e58d30
    Local pointer.......: e58d10
    Stack size..........: 128; sp: e58d48; ranges: e58cdc-e58edc;
    Contents of the current stack frame:
    e58d10: e59a9c (lp)
    e58d14: 0
    e58d18: e58cf4
    e58d1c: e68858
    e58d20: e58d08
    e58d24: 100dcdd0
    e58d28: e58cd4
    e58d2c: 1015f0a0
    e58d30: e58cf4 (fp)
    e58d34: 1012052b
    e58d38: e58d0c
    e58d3c: 100d2aa8
    e58d40: e58cd4
    e58d44: 0 (end of frame)
    e58d48: e59a9c (sp)
    Execution stack contains 112 items:
    e59d10
    e68a68
    e59a9c
    0
    0
    0
    0
    1
    e58cd8
    100cd0e4
    e58cd4
    0
    e68a68
    e59a9c
    0
    e58cf4
    e68858
    e58d08
    100dcdd0
    e58cd4
    1015f0a0
    e58cf4
    1012052b
    e58d0c
    100d2aa8
    e58cd4
    0
    e59a9c
    
    Execution completed.
    429584 bytecodes executed
    10 thread switches
    486 classes in the system (including system classes)
    2380 dynamic objects allocated (72064 bytes)
    1 garbage collections (0 bytes collected)
    ALERT: java/lang/ClassFormatError: Bad version information.
    Execution completed.
    429584 bytecodes executed
    10 thread switches
    486 classes in the system (including system classes)
    2380 dynamic objects allocated (72064 bytes)
    1 garbage collections (0 bytes collected)
    


    After reading some forums I recompile my common project (J2SE) on jdk1.4 and add it as a dependency in client project (J2ME) again (previously I have compiled it on jdk1.5). This time the client (J2ME) executes and works successfully.


    ISSUES:

    In Java the development toolkit for mobile (J2ME) contains limited features as compared to the standard edition (J2SE). If you are creating your project on J2SE then you must not use any feature of J2SE in project that is not provided by J2ME (mobile edition have limited features).

    In jdk1.5 there are some major specification changes due to which it generates different byte-code number that results in "ALERT: java/lang/ClassFormatError: Bad version information". So you need to run/compile your common (J2SE) project on jdk1.3/1.4




    Next I have created J2ME as a Common Project:

    I am using Netbeans 6.7 for development, so I have created 'Java ME > Mobile Class Library' project for common code. The Mobile Class Library is a mobile project but does not contain any Midlets. It uses IDE-generated Ant build scripts and special tasks to pre-process, build, obfuscate, preverify, debug, run and depoly your library in JAVA ME Environment.

    I moved all my common code in this mobile project and then use it as a dependency for both client (J2ME) and server (J2SE) projects and it works properly for both editions. Doing this ensures the compatability of both versions because mobile edition features are already supported by standard edition. Also you will be free from jdk-versioning issue that was faced in previously.

    Conclusion:
    So create 3 different projects, one is a client (J2ME), another is a server (J2SE) and a common project (J2ME) that will be used by client and server.



    rizzz86

    Monday, April 5, 2010

    Share Folder Between Ubuntu (host) and WinXP (guest) on Virtual Box

    Following steps helps me to successfully share folders between host and guest:

    • On VBox (Windows) add a shared folder from Devices > Shared Folders. Write the folder name here as well.
    • Now in guest (WinXP), use the "Add Network Place Wizard" in Windows. Follow the wizard and look for you shared folder, add it and you're done.

    rizzz86