Archive

Archive for the ‘Java’ Category

Death of Blackberry – A Case for Cross Platform Mobile App Development Paradigm

October 5, 2013 1 comment

Just like the desktop and web development ecosystem, the mobile application development world is typified with different frameworks for writing native and non-native apps. For the iOS operating systems, there is very limited choice as Apple restricts developers to writing iPhone applications in Objective-C, C, C++ or JavaScript as executed by the iPhone OS WebKit engine. Apps must be originally written in one of these languages and may only use Documented APIs in a manner prescribed by Apple. Only code written in Objective C, C, or C++ may compile and directly link against the Documented APIs. These requirements automatically exclude the Java programmer from the iOS market. Do I plan on learning C or Objective-C for the sole purpose of writing iOS apps? Sure, I will when the Satan repents and apologizes to Allah for all his misdeeds. J

According to an article written by Zonski for ZenJava, it is now possible to run JavaFX on iOS using RoboVM. That’s an excellent news innit? (in Wayne Rooney’s accent). Now check this out:

  • You need to be running on a Mac – this won’t work on anything else.
  • You need to have XCode installed: https://developer.apple.com/xcode/
  • You need to have a recent version of the Java7 JDK (7u9 or later)
  • You need to have Maven 3.0 installed: http://maven.apache.org/download.cgi
  • You need to have JavaFX on your classpath, so use the JavaFX Maven plugin
  • Currently there’s no automated way to generate an app bundle for the app store.

I’m bothered only about the first point. So, to develop apps for iOS, I first need to purchase the unnecessarily expensive MacBook? This is what the Hausa speaking people will refer to as “Magana banza kawai. . .!!!”

Android apps can be developed using Java. Good news eh? The Java programmers need not learn new coding syntax or conventions. It’s a seamless transition between the coding styles of desktop and web app that he/she is familiar with to the mobile space. There is an SDK plus an Eclipse IDE plugin that should help you get started. As you may be aware, your apps will only run on Android enabled devices.

The RIM OS development environment also makes the Java programmer feel at home. To write apps for Blackberry phones and tablets, you really don’t have to learn anything new. There is a Java Development Environment (JDE) that makes development and deployment seamless. Again, as you may already know, your apps will only run on RIM OS enabled devices.

Windows Phones? In my opinion, app development for Windows OS enabled devices is the most unpopular sphere of mobile app development ecosystem. Microsoft must have hoped the Windows mobile OS would be embraced by hardware manufacturers like HTC and Samsung as they did for Android which I guess broke a few hearts in Redmond. Nokia dominates Windows phone with over 80% of the market share, a statistic that worries Microsoft executives.

To make matters worse, the New York times reported that Nokia is working on building its own Android devices which paints a very bleak future for the Windows Mobile OS. Little wonder why the Windows mobile store is not as popular as Google Play and Blackberry World as Nokia Lumia is the only phone running the Windows OS that I have set my eyes on.

This in my opinion is one of the reasons why there are few Windows phone developers. Anyway, to develop apps for the Windows mobile OS, C# and Visual Studio is all that is needed, meaning the Java programmer is excluded.

A Case for Cross Platform Mobile Development Paradigm

I remember the late 90s and early 2000s where Java ruled the desktop world. Though Java applications were, in my opinion, not as good looking as the ones developed in Visual Basic and the likes, they still ruled. Why? Java thrived mostly, amongst other reasons, because of its platform independent nature where code is written on Windows, Mac or a Linux Box and the resulting application can be executed on any operating system where the JRE (Java Runtime Environment) is installed. Now, to develop apps for the four operating systems discussed above, it means the programmer needs to learn Objective-C, Java and C#.  Is that really necessary?

Imagine you are watching a stage play titled “Blackberry” and it’s the play is in its last scene.  After that scene, the play ends and there was an announcement that that play will be the last organized. Indirectly, it means the careers of all actors, cameramen, lights men, props men and other hands that worked on the play also ends like the closing curtain signifying the end of the play. To make matters worse, these “hands” do not know how to service any other kinds of stage performances except the ones put together by the company producing the Blackberry plays.

Now imagine Blackberry is dead. Their phones and tablets are not as popular as they used to be. For developers writing commercial apps only for the RIM OS, what will be the fate of their products and clients? Will the developers now expend more human and financial resources to write ports to other platforms?

Shouldn’t the Blackberry experience shape our approach to learning how we develop apps for the mobile space? Should schools of programming continue to teach app development for targeted mobile operating systems or adopt the cross platform paradigm in their curricula? Should we, as programmers continue to rely on official SDKs and libraries released by companies or community supported SDKs?

With the cross platform paradigm, applications can be deployed to any of the operating systems discussed above from a single Java codebase. There will be no need to learn C or Objective-C to deploy your apps to iOS enabled devices. No need to learn C# to deploy to Windows 8 enabled devices. Even if Blackberry folds up and their devices become unpopular, no extra effort is required as the same code written for one operating system can be compiled for others. More time, energy and resources is also saved.

For companies, this paradigm will help achieve a lean staff structure as there will be no need to hire developers for different mobile operating systems thereby saving extra resources. This is a good thing for small startups.

Personally, I use the Codenameone to develop my apps for all mobile operating systems. The coding structure is almost similar to Swing which made learning easy for me. Note that Codenameone apps are not HTML5 apps running in a WebKit, they are completely native in nature. They have the same behavior as other apps written with the official SDKs of the operating systems they run on. Codenameone also comes with a DnD visual designer leaving you with just the business logic to bother about. It also comes with a theme designer giving you the full power to control the look and feel of your apps. Native themes of target platforms can also be inherited. Here is a video of one of my apps with Codenameone. It’s the first and only mobile app for the African Youth Charter. It’s also available in Google Play and Blackberry World.

It’s not all Java. There is a C# option as well even though deployment targets only Android and iOS but it’s definitely worth playing with.

Finally, just as I do not believe AJAX and HTML5 apps can replace desktop apps (discussion for another day), same way I do not believe Sencha apps and other frameworks that runs from a phone’s Webkit can replace native apps. It’s native all the way . . .!

I rest my case.

Advertisements
Categories: Java

Hacked, Then UnHacked

June 10, 2012 4 comments

Been almost a year since I expressed my thoughts and feelings here. . .Not that I found a new space to express them but the will and time to write just hasn’t been there, until four days ago when I was buzzed on YM by an old friend, a staff at Standards Organisation of Nigeria. For those who were close to me back home in Nigeria, they knew I developed several IT solutions for the nation’s apex Standards body – including their website, which I handed over to their IT guy before leaving (hosted at http://www.sononline.org)

To cut the long story shott. the site got hacked by Co=Cain Warriots. See image below

The home page was redirecting users to http://cocainteam.persiangig.com/coc.htm with the above image displayed.

Straight To Work

I logged on to the webserver (luckily, the bad guys didn’t change my password.. .did they even have it?) and opened my index.php file. I searched through the file for any <frame> or <iframe> tag thinking it may be an <IFRAME> attack, but nothing of sort. My code looked clean and there was no sign of any malicious injection.

Then I decided scan the entire webserver for viruses, just incase “the insect that feeds on vegetables, lives with the vegetables” 🙂 Scanning over. No virus found. . .:(

The Solution

Since some portion of the page displays before being redirected to http://cocainteam.persiangig.com/coc.htm , I decided to play the line-by-line execution tricl, remmniscent of my programming school days.

I replaced the entire content of my index.php with “test” and re-uploaded. (The original contents saved in a separate notepad) The page executed fine. without a redirection with “test” showing up on the screen. Then I knew I was going to win. . .:)

Then I began to copy the original contents in chunks back to my index.php file. I executed the page after each chunk is copied. I didn’t experience the redirection, until I got to the code block where I fetch the Latest News from the database. . .Viola!!! I caught the thief red-handed!!!

I immedaitely figured that my database has been compromised, the “news” table specifically. 3 malicious rows containing the <IFRAME> attack code were inserted by co-cain warriors. I deleted the three rows and refreshed my page and there was no redirection.

I changed all passwords, file permissions and ran a new virus scan

Co-cain Warriors defeated. Flawless Victory 🙂

Tips

1. Take into account that when a new table called “News” is created, every Salome, Lukman and Khadija can guess what the column names will be. ID, Title, Body and Date being the obvious ones. For your own good, name them differently.

2. Do not leave any security information raw on the server, Make sure you encrypt always.

3. Always keep back ups of your source files

4. Keep your passwords safe and alpha-numeric

It was fun while it lasted. That’s all folks. . .:)

Categories: Java, Uncategorized

Processing Long Forms in Servlets/JSP – An easy way out

May 9, 2011 2 comments

After downloading and watching “Omo Ghetto” aka Ghetto Child (A nigerian home video), and listening and re-listening to a wonderful, soulful, inspiring sermon “Put your trust in Allah” by brother Belal Asaad (watch here – its just 7 minutes), I decided to write this post to round off the weekend.

One of the modules of the EMIS (Education Management Information System) platform I am working on presently is a capacity assessment system that enables member states (countries) submit data on their current state of education. To cut the long English short, its a QUESTIONNAIRE. . .a very long, boring and annoying one. Its too sophisticated for all the online survey builders I checked out before I decided to attack with my fingers. It’s the first time I will be processing forms of this nature with more than a hundred check boxes, input boxes, combos, file uploads etc.

For a lazy programmer like myself, the the shear terror and fright of having to setup database tables, design the forms, validate, submit entered data, retrieve later for updates could make my face start to age at a speed of 5 years by minute. Good news is that Allah in his infinite mercies after giving us life, water, food and other things, he gave us Objected Oriented Programming to make our lives easy 🙂

Form Designs and Validation

I use JotForm. . .First Web Based WYSIWYG Form Builder. Its simple to use, Dnd (drag ‘n’ drop), Ajax validation, ready made custom components etc. The beauty of it all is that you can download your entire source files as zip archive. . .! Now that’s gangster. . .! Visit http://www.jotform.com to get started.

Apache Commons To The Rescue

Yap. . .I checked out several java form processing frameworks and Apache Commons FileUpload would be just fine for me. This API is designed to handle file uploads in Servlets/JSP but studying the documentation (click here to view I discovered two lovely classes.

FileItemStream: This interface provides access to a file or form item that was received within a multipart/form-data POST request.

FileItemIterator: An iterator, as returned by FileUploadBase.getItemIterator(RequestContext).

So with these classes, I could interate through my forms using the FileItemIterator then retrieve the element property using the FileItemStream. . .

I donloaded the Apache Commons library and the FileUpload library here http://commons.apache.org/

Database Setup

While designing the forms, I named every component as I would have named the columns that would hold their data in the database table. Then I wrote a JSP that handles table creation. Basically, the JSP loops  through every component of the form and retrieves the name of each component, builds a ‘CREATE TABLE’ query and executes it. I repeated this process for each form. Below is the JSP

<%@ page import="java.io.File" %>
<%@ page import="java.io.FileOutputStream" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@page import="org.apache.commons.fileupload.util.Streams;" %>

<%
String sql="CREATE TABLE `"+request.getParameter("table")+"` ( `RDate` datetime NOT NULL, `ID` varchar (4) NOT NULL,";
InputStream stream = null;
ServletFileUpload uploads = new ServletFileUpload();

// Parse the request
FileItemIterator iter = uploads.getItemIterator(request);
while (iter.hasNext())
{
FileItemStream item = iter.next();
String name = item.getFieldName();
stream = item.openStream();

if (item.isFormField())
{
String val=""+ Streams.asString(stream).toString();
sql=sql+"`"+name+"` LONGTEXT NOT NULL default '',";

}
else
{
//Then its a FileUpload field. You can handle it as you wish.
}

}

boolean done = mainBean.executeUpdate(sql);

%>

The code above is self explainatory even without comments. It loops through the form and builds and sql query using the form element names. The above JSP will work with any form. To use do this this. . .

<form method=”post” action=”createTable.jsp?table=section1″ enctype=”multipart/form-data”>

Form Submission

Next, I wrote another JSP that handles submissions to the database. Again, I looped through the form, retrieve form elements name and value, build an insert or update query then execute. Did I say an update query? Yes, because before any form is submitted, I check to see if the user has not filled the particular section and the query is built accordingly.

Here we go. . .

<%@ page import="java.util.Iterator" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.io.File" %>
<%@ page import="java.io.FileOutputStream" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@page import="org.apache.commons.fileupload.util.Streams;" %>

<%

String sql="";
String section =request.getParameter("f");
String id=request.getParameter("id");
String isUpdate = mainBean.checkSectionCompleted(id,section);  //Check if the user has completed this section

InputStream stream = null;

ServletFileUpload uploads = new ServletFileUpload();

// Parse the request
FileItemIterator iter = uploads.getItemIterator(request);
while (iter.hasNext())
{
FileItemStream item = iter.next();
String name = item.getFieldName();
stream = item.openStream();
if (item.isFormField())
{
String val=""+ Streams.asString(stream).toString();
if(name.startsWith("Check")) //Handling checkboxes
{
if(val != null)
{
val = "OFF";
}
else
{
val = "ON";
}
}

sql=sql+name+"='"+val+"', ";
}

}

sql=sql+"@";
sql=sql.replace(", @", "");  // "Ojoro" (trick) to remove the last comma appended to the query. . .hahaha

String m = "";

if(isUpdate.equals("false"))
{
m="insert into section_"+section+" set ID='"+id+"', RDate=Now(), "+sql;
}
else
{
m="update section_"+section+" set "+sql+" where ID='"+id+"'";
}

boolean done = mx.updateDoneSection(id,section,m);

%>

Finally, I changed the destination JSP in all my <form> tags to saveSection.jsp.

Now to retrieve the entered data, I placed some javascript snippet at the bottom of every form that talks to my java bean. This snippet checks if the user has completed a particular section. If yes, it fetches the entered data as a JSON, parses it and sets each form element value. The data entered for this section is then retrieved alog with the column names using ResultSetMetaData. Remember the column are derived from our form element names, so setting values for them should be pretty easy.

<script>

var isDone = "<%=mainBean.checkisDone("9",id)%>";  //Notice how the java bean is accessed from javascript code. The check isDone accepts the section number and the user ID as parameter
if(isDone == "yes")
{
var elementValues = "<%=m1.getElementValues("9",id)%>";
var words = elementValues.trim().split("%%%_");
for (i = 0; i < words.length; i++)
{
var e = words[i].split("-:::-");
var l=e[0];  //column name (form element name)
var v=e[1]; // value
//alert(l);

var p = document.getElementsByName(l)[0].type;
switch(p)
{
case 'text':
case 'textarea':
case 'radio':
case 'select-one':
document.getElementsByName(l)[0].value = v;
break;
case 'checkbox':
if(v == "OFF")
document.getElementsByName(l)[0].checked = true;

}
}

}

</script>

Ces’t fiini… I completed the entire application in two days because all I focused on was designing the forms. The  DRY – Don’t Repeat Yourself principle that OOP preaches has been applied here and it worked really well.

If you feel there is a better way I could have achieved my goal, please feel free to share. I am open minded. . .:)

Categories: Java

So You Want To Be A Programmer. . .?

April 17, 2011 4 comments

This Article is already published in the Digital Natives Newsletter (Links In The Chain) April 15, 2011 Vol. 4 Best Practices issue

So you want to be a programmer? You want to write web and desktop applications. You want to develop software for the iPhone and the Android market You want to be a solutions provider to companies and individuals alike. Let me share tips that will help in your quest to be one of us – the geeky do-gooders!

Already Published

Like any other profession, IT requires determination, patience and willingness to persevere. The begining could be very challenging and intimidating because you might find it hard to figure out some ugly looking write-ups called “codes”. You would wonder why a line – JButton buttonObject = new JButton(“Click Me”) – should create a button with “Click Me” written on it in Java (a scripting language). You might even be thinking about wireless internet connections as some voodoo from the west.

Being a PROGRAMMER or a SOFTWARE DEVELOPER is not rocket science. It’s not as hard as many make it seem. Those codes that scare you seem to me as the easiest part of our profession. Once you understand the structure, the rules and the syntax, basically the ‘logic’ of why codes are written in programming language, the rest is easy.
Also, note that the more you code, the more you try out examples in the book you are reading, the eaiser it will be for you to master the coding techniques of the language. I remember my NIIT (an Indian school in Nigeria) days. I would always volunteer to do the coding, ever willing to help a mate identify errors in his/her code. By the end of the first semester, my coding skills was actually faultless.

Once you master coding, the rest depends on how well you can think. Don’t wait for your instructor to tell you what to do. Go ahead and give yourself a pet project. It could be as simple a project as creating a database of students in your college with information on their names, grades and activities. Build it in bits. As your knowledge grows, let the software you are building grow in functionality as well. Who knows, it just might turn out to be a gold mine for you.

In my case, the pet project I did at NIIT, Hospital Management System, kick started my career and put me on the IT radar in Nigeria. I travelled different states, met high-profile people, addressed a cross section of medical practitioners, all at the age of 22! Since then, it’s been one challenging project or the other.

You also need to start thinking like a computer. Start viewing life and events around you with an IT lens. You walk into a resturant, order a pie and a drink totalling $10. If you pay less than the total, the computer rejects. What do you think is happening there.? Consider this statement

If amount paid < 10. . . . tell customer money incomplete else
Print reciept for customer.
If a Java programmer were to right this, its simple
if(amount < 10)
{
showMessage(“Customer money incomplete”);
}
else
{
printReceipt();
}

Another example. Imagine you are playing the FIFA 2011 soccer game (Sorry, I’m a game freak 🙂 🙂 with a mate and at the end of the first half, the match analysis is displayed showing that your team had 3 corner kicks and 2 offsides. What comes to your mind? It means there is a ‘variable’ to store value for each of those game highlights. The variable is set to zero at kickoff and incremented by 1 anytime you win a corner kick or caught offside. At the end of the half, the variables are retrieved and presented to you. If you did not win a corner kick, the variable remains zero. Does it make sense?

Case Study

Bottom line here is how logically you can break down or tear apart any situation in daily life and apply it to programming. This will determine your pace of learning as well. Start paying attention to the things you normally ignore. From your ATM machine telling you “Insufficient Funds” to your webmail application returning an ‘Invalid Login’ message. The more you understand the dynamics behind these simple things, the faster it will be for you to come up with solutions to problems related to IT, technology, finance, pharma, healthcare, education and even entertainment and sports industries (think about cricket match analysis on your TV).

Again, don’t expect that you will master the syntax or grammar of coding in a day or learn computer languages immediately. The more you write them, the eaiser they are for you to recall.

Note also, that not everyone will end up being a coder, however, a good understanding of the intricacies involved will help. So, for instance, if you decide to be an IT Project Manager or an Application Specification Developer amongst other fields, you should have the basic understanding of coding and programming.

Finally, you need a writing pad. As the wind blows new ideas to your direction, write them down. What kind of idea it is, who will it affect or who are the target audience, what do you need to bring it to life, revenue generation strategies and so on, should be penned.

A good place to start learning about programming languages is here:

Java http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/

PHP http://php.net/manual/en/tutorial.php

.NET http://www.w3schools.com/aspnet/default.asp

Your comments are welcomed. . .!

javax.imageio.ImageIO and JTDS JDBC Driver to the Rescue

October 19, 2010 1 comment

A friend of mine back home in Nigeria, a VB developer hollered at me sometimes last month to ask how he can retrieve blob data containing images stored in a MS SQL database and save them to the local disk. The database contains over 6,000 records. I’m sure there is a way to achieve this in VB, apparently he does not know. . . I completed the task in minutes. . .

It’s been a long time I worked with MSSQL and I think I only used it once since I graduated from school in 2003. Don’t ask me why, ask MySQL. . .lol

First, I don’t have MSSQL installed on my laptop which means I have to write a database independent code which should work for both MySQL and MSSQL. .

I quickly setup a database, created a table and populated it some of my pictures. At the end, I had 30 records in my table. First, we run our select query. .

//To store the image ID
String imageID;

// To store the binary stream retrieved from the database
InputStream in;

//Path to save Image on local disk
String imagePath="c:\pictures\";
File file;

//Will be used to store the image;
ImageIcon icon;
Image image;

PreparedStatement st=cn.prepareStatement("select ImageID, BlobImage from tblImages");
ResultSet rs=st.executQuery();
while(rs.next())
{
	imageID=rs.getString(1);
	in=rs.getBinaryStream(2);

	//Store the retrieved image ina byte array
	byte[] b= new byte[1024];

	//Store the bytes in java.awt.Image object
	image=Toolkit.getDefaultToolkit().createImage(b);

	//Convert java.awt.Image to javax.swing.ImageIcon;

	icon= new Imageicon(image);

	//Convert the java.awt.Image to a BufferedImage
	BufferedImage bi= new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
	Graphics2d g2d= bi.createGraphics(icon.getImage(),0,0,null);

	//Create the file name. Our encoding is JPEG
	imageName= imageID+".jpg";
	file= new File(imagePath+imageName);

	//Now lets write out the image to our file path
	ImageIO.write(bi, "jpg", file);

}

This worked perfectly well with mySQL but there was a problem when he used it with MS SQL. He complained that only one image is retrieved and saved, and then the ResultSet closes. I figured out that the relationship between JDBC and MSSQL is not a rosy one. I tried JTDS driver, repackaged the application and sent to him. It worked perfect and retrieved the 6000 images in the database in 25 minutes but there was another problem. he could not log in to MSSQL with windows authentication. I sent him a dll file that was shipped with the JTDS package to paste in c:\wondows\system32 and that fixed it.

Below is the UI
Screenshot

GuiGenie – My Choice for Swing UI Design

September 2, 2010 4 comments

I have been doing desktop application development with the Swing Framework for over six years. In those six years, my focus has always been to develop applications that are rich in functionalities and with nice looking GUIs.

NetBeans, Eclipse, JCreator, JBuilder et al are all wonderful IDEs in fact; I love NetBeans. I use NetBeans for almost all my web projects because it makes all the processes from development to deployment as easy as it can get. Thanks to my friends Segun and Tope for helping me find my way around the IDE.

As much as I enjoy using NetBeans for web applications development, it’s the opposite for desktop development. Reasons? Well I will discuss that in later posts reasons why I prefer GuiGenie in designing my user interfaces.

GuiGenie

Developed by Mario Awad, GuiGenie is a Java Gui builder that is light (less than 400KB) and very easy to use. It’s free too and lets you create Guis in minutes. Plus it has a very simple UI,

GuiGenie Screen

The Code View

GuiGenie Code View

Some Of My Works With The Genie

FRO (Fund Release Order) For The Federal Government

FRO

FRO

JStore – Fixed Asset Management Solution

JStore Main Screen

New Supply

CareWare – Hospital Management Solution

Careware Screen

JInventory – Accounts Receivables System

JInventory Screen

Customer Screen

JEmployee – Payroll, HR, Electronic Filing and Pension Management Solutio

JEmployee - Payroll, HR, Electronic Filing and Pension Management Solution

JEmployee Salay Screen

Electronic Filing Screen

Quiet Office – Intranet Collaboration App

Electronic Filing Screen

 

Looking at the screen shots of my apps, you will discover that most of the components used are not found in GuiGenie (refer the GuiGenie screen shot above). This of course is a limitation of the builder and if Mario releases the source code hopefully, I will include those components like Tables, Trees and some custom components I developed.

The trick is to replace your intending component with either a list or a JTextArea. Place the JTextArea in the exact width, height and location you wish to place your table, tree etc. When you are done, generate your source code and edit the generated code to suit your requirements. Copy and paste the code wherever you desire or in any other IDE of your choice or Notepad. Code your event listeners and viola!!!. . .Your application is ready.

So I am using this opportunity to reach out to Mario to release the source code so that I and other users of GuiGenie can contribute to its development. At least we have all in one way or the other benefited from using the builder, it’s time to contribute. . .
Wow. . It’s already half past 2 am here in Addis Ababa. . .time to go sleep. . Oh. . We are in the last 10 days of Ramadan fast so I better observe some prayers before going to bed . . . that’s after a cup of hot Cappuccino. . .lol

Don’t forget to leave your comments. . .

Categories: Java Tags: , , ,

Mark My Word

August 27, 2010 1 comment

If you a programmer. . .Mark My Word.

I know Java even though I havent been to Indonesia.
The Java I know is not in Malaysia or anywhere near Asia.
The java I know was discovered in a Coffee shop and not the one hit by Tsunami and washed ashore .
I SWING alot and I enjoy it. . .Swinging back and forth with different frameworks, components and libraries. . .
And anytime you see me not SWINGing,
i’m either preparing some JavaBeans with netBeans for the Web thing. .
JSP as the sauce and some JavaScript thing. . .
I tell you, I’m the next big thing. .
Aand when i’m stressed out,
pushing pixels is what blows me out
Rather than coding in a languages with syntax like CIN and C-OUT
or better still get on java .NET and check posts out. . .
(sighs)
Shannon Hickey, Romain Guy, Krill are those who clear my doubts. . . lol

.Enough!!! let me say the truth now. . .I’m a Java Programmer. I Swing for breakfast, JSP/Java Beans for lunch and I starve for dinner. . .U can check out some of my works here. . .you will love ’em. . .Mark My Word. . .!

Ok lets talk Islam. . . I’m a muslim and i will die as one. Islam is the reason why i’m refered to as a book worm. Islam is the reason why I’m truthful and sometimes thought a fool. Islam is the reason for loving, caring, helping and tears shedding. Islam is the reason why i know Allah the creator, not Ilah the god of the Idolator. Islam is peace which encourages me to give my heart’s piece to those in need. . .I encourage u to study Islam and find out what it is that makes us proud. .

I’m in love with Poets and poetry. Amir Suleiman from USA and Sage Hasson from Nigeria being my favorrites. . .

hiphop in its originality is equal to Poetry. . . I listen to Nigerian hip hop acts like Modenine and Modenine and Modenine alone. He’s by far the only African rapper (after ProVerb of South Africa) that awakes the mental though process. . .

So here, we will be talking Programming, Islam, poetry and Hiphop. . .

Even if u have a memory of low ram, you will still mark my word. . .!