Tuesday, December 9, 2008

friend's conversation

Yesterday, my friend asked me to attend conversation with customer. This session was meant to improve my skill on providing consulting. There are several things that I caught of being consultant.

  1. Understand Customer's problem.
    This is very important and also the thing that most of the people and me, are missed. Understanding what problem they have and based on the well defined problem that they have. Consultant will try to think about what actually the solution is.

    Most of the time Customer tries to explain what are their problem, but they usually are not well organized on telling all of your problem. Thus, it is job of consultant to manage them. For example: they tell that they have a problem of documenting certain project, they want to have a tool to document a project is available and published in internet and bla...bla..bla and maybe they want everything in the tool. As a consultant, Consultant needs to drive him to the correct path. What actually their problem is, dont let them navigate you. Filtering the problem and prioritizing their problem based on their business is very important so that we can solve their problem and of course it will make their business successful.

  2. Manage customer to the correct path.
    As I explain, most of the time customer tells you all of the thing they need, all of the problem that they have, but they tells you in unwell organized. This is job for consultant to manage their problem and solve their problem.


    Navigate them is very important for consultant so that we can limit and focus on their problem which relates to their business. If consultant is driven by customer, the solution of the problem will take a long time to implement and of course the impact is customer's business will slow down as probably their problems are too much to solve. Thus, filtering and managing the problem are very important to do in the world of consultancy.

  3. Use a communicative way to communicate with customer.
    Yeah, maybe for some people, this is quite difficult to do. You get to communicate what is in your mind to customer, communicate what is the solution to customer. Communication is playing the important role of providing consultancy. The above activities which I have explained, would be useless if the way we communicate to customer is not understandable. Structuring the problem, structuring the solution are also part of well communication. You could use any media to communicate your solution. This is a tentative way to do and seems to depend on the situation. There may be a customer wants to have a slide to elaborate the problem and explain the solution or maybe there is another better media to communicate them.


If there is something that I miss or wrong, It would be great for those who read this blog to give me a feedback, I appreciate it much.

Sunday, October 26, 2008

maven

i am back to blog now after resting. This week, i am learning maven. A simply build tool to make easy developing your project. All of the capability that Ant has, is provided by maven with a simply way. In this blog, I will state steps that I have gone through (even not detail :P) to build a project using maven and building maven's plugin.

There are several terms that we need to understand about maven:

  • repository, maven installed in your machine has 2 repositories (by default). First is in your local, the second is in remote server (ibiblio). repository is used for storing third party plugins needed by your project.
  • lifecycle. Lifecycle in maven comprises several phases (by default). Take a look at this url. You can bound one or more task to certain phase as you like. You can also bound plugin task to any phases in maven's life cycle.

The first thing that you need to do is creating a maven's project. Execute the following command:

mvn -DgroupId=group -DartifactId= artifact

The above command will execute plugin which belongs to group and in artifact . You will see the plugin in your repository, take a look on your repository. If this is the first time you do a maven, maven should download the necessary file to your local repository.

The other interest thing about maven is the existent of plugin. Using plugin, you can customize maven's behavior. The purpose of having plugin is to have additional goal. The goal will be attached in certain lifecycle that has been defined in maven.

Sunday, August 17, 2008

data source class used by IS to connect to database

Today, I am exploring webmethods regarding JDBC adapter. In my local machine, I have only 2 DBMS, which are MySQL and sql server 2005 express edition. Huehuehue.... as you know they are free and I can learn a lot from a free thing :P. Anyway, I had a problem today regarding connection to those DBMS.

This blog tells you about data source class that I use to create connection to MySQL and SQL server 2005 express edition.

However, I was trying to find out what is the class to connect to MySQL and sql server. I found a site talking about it. It says that I need to put datasource class like the following and it works fine:

com.mysql.jdbc.jdbc2.optional.MysqlDataSource



However, I still could not find any site saying about SQL server 2005. Then, I look around to jar file and I found the following class:

net.sourceforge.jtds.jdbcx.JtdsDataSource

Sunday, August 10, 2008

Exploring webmethods 2 (Sending xml file via http)

Today's exploration is about webmethods. To be more specific is sending a file to IS through http channel. I had done the following ways and only one success. I am not really sure what is the cause of it.

  • html post, This way I just create an html page and publish it using apache webserver. As usual, I create html element file. Using this element, I can choose whatever file that I want to send over. The form itself, I point to the flow service that I had just created. But unlucky me, this way fails and I dont know what is the cause.
  • Apache httpcommon , I was playing around with this useful stuff. The first try I failed. In the first try I was using a class that I am not familiar with. The following is a piece of code that I use:
Part[] parts = { part , new FilePart(f.getName(), f) };
filePost.setRequestEntity( new MultipartRequestEntity(parts, filePost.getParams()) );

The above method is actually encapsulate a file in the variable named parts. This way fails with the same output as the first way and again I dont know what is the cause of this problem. However, the second try is success. In this way, I was using the following code to send a file.

File f = new File("F:/SINAU/WM/xml/test.xml");
FileRequestEntity fileReq = new FileRequestEntity(f, "text/xml"); filePost.setRequestEntity(fileReq);

In the flow service side, I perform the following flow steps, to extract or parse the result that I want to:

What the above flow steps do are:
  • Fetch a content of file and put it in the variable test.
  • Convert the content of file to document type.
  • Perform query on the node.
The above sample may be not really efficient as it seems that I can directly query from node using flow step queryXMLNode.

The next exploration is... errmm... not sure !!!! :D

Wednesday, August 6, 2008

exploring webmethods 1

It has been a long time for not blogging. Today, I am exploring webmethods stuff. it is about reading a file to xml. I want to give a bit comment on webmethods documentation. You guys, are suck. The documentation is definitely suck. Even more, the way they named the flow service. The reason why do i tell you, it is suck:

  1. You just give the explanation with less example. Of course for me as beginner, will be having a lot of damn trouble.
  2. The flow service's name is sometime a bit difficult to interpret. if you want to have people understand on some methods, you need to have a very representative method's name of its function.
  3. There are no official, detail and complete documentation so that people can learn your product easily.

Huh, after sometimes struggling to find out on how to read a file from file system (previously, I have sent a file through ftp and get the file from ftp using webmethods), now I will blog my experience. In order to read a file, webmethods has it's own way to treat each format file. it has a way to process an xml file but I am not sure on how to read another file type. To read an xml file, is pretty much simple. First, you need a flow service named getFile. Set the load type as Bytes. The output of this flow service can be an input for another xml flow service which is xmlStringToXMLNode.

That's it, until this state, you get the xml to be loaded as a note but you cannot read it as it is an object. In order to read a node, either you read it as String or you read it as document. In my experiment, I was using xmlNodeToDocument. Yeah!!!1, that's all. You can load, read and process after the output of this flow service comes out.

Wednesday, July 30, 2008

output template

Today, i am exploring webmethods about assigning template to output. WM provides you several template's type as an output. They are:

  1. xml
  2. html
  3. wml
  4. hdml
The third and fourth are types that can be used in mobile. Thus, you may want to create a service which return an output to your mobile, wm has provided you an easy way.

You can fill in the value using DSP (Dynamic Server Page) syntax. DSP is pretty much like a server side scripting (PHP or JSP) provided by wm. By assigning some variable in certain place, you fill in the output and send the output to client such as computer's browser and mobile's browser.

Tuesday, July 29, 2008

Ways to send an input to webmethods

There are several ways to send an input to webmethods:

  1. Using Get method. Giving the input service's name like the variable name. To note that the character is in case sensitive.
  2. Using Post method. This is pretty much same like the above. The different must be the hidden data posted in this method.
For more information is in the webmethod's documentation page 356.

The URL address to invoke webmethod's service is in the following formats:

http://:5555/invoke/folder/serviceName?variableA=valueA&variableB=valueB

I created a code to post a variable using HttpClient (developed by Apache). The following is a piece of code that I created:

client.getState().setCredentials(new AuthScope("localhost", 5555), new
UsernamePasswordCredentials("Administrator","manage"));
PostMethod postMethod = new PostMethod(url);
postMethod.addParameter("name", "nama saya arie murdianto ganteng banged");
postMethod.addParameter("USERNAME", "Administrator");
postMethod.addParameter("PASSWORD", "manage");
postMethod.setDoAuthentication(true);

.....
byte[] responseBody = postMethod.getResponseBody();

My flow step is only performing the length of the input String. For your information that the latest HttpClient is having 2 dependencies. They are commons codec and commons logging

Thursday, July 24, 2008

Pipeline processing

When a message comes to several processing steps. Let's say there is an event triggering the process which is sending a message to several process. The processes are: authentication, decryption and updating db.

In order to maintain a loosely integration, it will be difficult. The best way is to make each process independent. There is a method called pipelines processing. Yeah, you can imagine the method is having pipe connected each other. When there is a message comes to the pipe. The process will taking the message from it and process it. Once the first process finishes it process, then it just straightly put the message to another pipe to be processed. While the first process finishes its job, it can take another message without waiting for the message to be finished until the last process. Using this method, the throughput will be increased.

Note that each process are running independently. It may be better to have a look at the following image.




The above picture is taken from the book Addison wesley- Martin Fowler - Enterprise Integration pattern.

Looking on the above image, we can see a comparison between pipeline processing and sequential processing. The throughput of pipeline is more effective compare to sequential. The time needed to process 3 messages in pipeline is almost a half of sequential.

Tuesday, July 22, 2008

Integration (Message and Message channel)

Message channel can be imagined as a conduit of data between one application to another. The data which will be transmitted via message channel, should be wrapped by some object that can be understand by message channel. Or we usually call this as a marshalling. Thus, before going to the message broker. The data should be marshalled. The data will be queued in the message broker.

If there is a client interested on the data, it will go to the message channel to get the data from the message broker. Before consuming the data, the data should be unmarshalled.

The data that is being transmitted via message channel contains 2 parts. They are:

  • Header, header contains the data regarding destination and application.
  • Body, this part contains information as-is. there should not be any modification on this part.
Several technologies divide the body content which depends on the type of the body content. For JMS itself, it defines several body content type, for example:
  • TextMessage
  • ByteMessage, and
  • Object message.

Monday, July 21, 2008

Integration

In order to perform integration, there are several points we need to aware of. They are:

  1. Loosely couple
  2. Simplify integration
  3. Unified data format
  4. Data staleness
  5. Awareness of Asynchronicity
Thus, when we perform integration, those points are the thing we need to remember so that it produces a good result. However, There are several ways to perform integration among several applications. They are:
  1. File transfer
  2. Shared database
  3. RPC
  4. Messaging

The above ways have advantages and disadvantages, it depends on the way people performing integration but the most recommended way is messaging. Messaging solves several limitation on File transfer, Shared database and RPC. Using messaging, you can store data and functions. With messaging, the system will be very loosely. So, the integrated applications will not depend each other.

Monday, July 14, 2008

Get back to my hometown

Today is my last day in this week in my company. Hehehe, a bit confusing right? I feel that I cannot wait any longer to go back to my hometown. Meet my family, my cousin and my friends. I cannot imagine what it would like. I m hoping that I could be refreshed after going back to my hometown. Really, this is what I want to, this is what I meant to. My working here is not meant only for working and get a money. There is other purpose what I am here.

Beside attending my cousin's marriage, I need to finish my left task in my home town. Hehehe, as usual of me, always leaving something behind. One of the thing left behind, is giving back the stuffs that I have borrowed :P. What the hell!!!!..... My bad.

If you are an expatriate and moreover this is your first overseas traveling. You will feel what I feel. A very hard homesickness is one of the purpose why do I want to go back. Hehehe...... May be what I feel cannot be imagine by anyone who has never felt like what I feel. That's all what I want to write now. I m hoping that getting back to my hometown will recharge my spirit, will refresh my mind. Thus, I will be getting back to be myself. As an ambitious man, as a very hardworker man.

Amien!!!! Amiennnn!!!!

Sunday, July 13, 2008

Different between servlet and JSP

I have done a little experiment about jsp and servlet. In the first time, I thought both files will be compiled and run in the same way. But in fact, both files are treated different by Tomcat. I have never come across on this little experiment before.

I did 3 experiments. In the first experiment, I went through the following steps:

  1. Create jsp a very simple jsp file. It only contains the html tag.
  2. Startup tomcat.
The above experiment come with the result that there is a file created by Tomcat. The filename is tldCache.ser. I am not really sure on this file, but I found some source saying that this file is used by Tomcat as a cache for tld tag defined in jsp. Thus, Tomcat doesnt read or scan the tag every time the request is meant to the jsp file.

The second experiment, I went through the following steps:
  1. Create a simple jsp file which contains html tag and several java operation (which is looping something). The filename is test.jsp
  2. startup Tomcat.
The result of this experiment is Tomcat produces java file and class file. The files are located in /work/. The files which are produced by Tomcat, are test_jsp.java and test_jsp.class. The thing that I can get from the second experiment is, Tomcat produces java file which extends org.apache.jasper.runtime.HttpJspBase. It is completely different from what I had thought before.

In the third experiment, I went through the following steps:
  1. Create a very simple java class extends HttpServlet.
  2. Compile it to be ja va class.
  3. Create directory /work//WEB-INF/classes.
  4. Create mapping file.
  5. Startup Tomcat.
In the last experiment, I didnt see any files created by Tomcat. Which means that Tomcat will use it in memory directly without creating any files.

My bad that I didnt come across this experiment before. I have gone through the things that is too far such as playing around with spring and webwork but never think on this basic thing. I hope my experiments will be useful for all of the visitor.

Thursday, July 10, 2008

SQL server backup restoration

Several days ago, I tried to restore a SQL server backup file to a just-created DB in my local. Actually, I am not really good on SQL server. Even performing restoration or backup, I had never tried them before. Moreover, I really hate about this product because it takes a lot of resource (memory, hardisk space, cpu) in my computer thus, I dont have any chance to learn it.

However, in order to perform SQL backup, you can do it easily in SQL server Management studio. But for restoration, somehow it fails performing it in management studio. I got a very annoying error message. Thus, another way that i can think of is, through console. I perform backup through the following command.

restore database DatabaseName
from file ""
with replace



For more detail about the query, please refer to the microsoft's site. If you want to have the real script, I would be happy to provide it.

Wednesday, July 9, 2008

My Birthday

Today is my birthday. A lot of my friends give birthday greeting through friendster. Thanks for it. One special greeting was coming from my family. my sister sent me a birthday greeting last night. The thing that I really like from her wish is a wish to be a better man as a son, as a big brother and as a young brother and of course as a man who live in society.

I wish to be a better man as well for my family and for the people around me. I hope so. Amiieenn.....

Tuesday, July 8, 2008

crowd

Do you know guys an application named Crowd. Yesterday, I tried this stuff and I think the idea behind this application, is pretty much cool. With only 1 application, you can delegate your user management to this god damned application. Besides, this application can be used as an SSO (Single Sign On) application to all applications which have been integrated with Crowd.

You can centralize your user management to only 1 application. The user can be created, edited from Crowd. I have tried this on Confluence. Confluence is knowledge management system developed by Atlassian. When I was integrating Crowd and Confluence, I found that it is very easy to perform this integration.

But i am not sure to use a custom application to use it. not sure whether it works or not. Can this application manage any users from a custom application. If so, there should be a convention on developing a custom application.

Sunday, July 6, 2008

Pretty girl

Umm ... It is a bit funny, isnt it? From the title, you can see what will I write into this god damned blog. Huehue..... yeah man..... this afternoon I went to Mid Valley. Screwing around just for finding what my cousin "sepatu lucu". fuuh.... it is a bit hard for me as I have never bought such thing especially for a girl. But somehow I dont want to make her great day is screwed. I want to make that moment is as special as possible. Do you guys know what sort of moment is that? Marriage. Yeah this is once in a life moment. So, I would like to have such shoe. After calling her regarding the shoe that she order, I explained to her about a fashion shoe here. Listening to my explanation, he didnt want me to get it as it is not suitable for her. Do you know what is that? That is a high heel shoe.

I am screwing around all of the shops over there and got nothing. However, when I was in Jusco, I saw a pretty god damn girl. Waaww...... damn it. She is so much pretty. Her face is much more like arabian-malay. I like such face much. I have met such face two times. I hope very on getting such girl. But of course, her heart is much more important instead of her face. If I get a pretty god damn girl but her heart is pretty much bad. I would like her to die instead of being my ???? :P. Errmm..... what I did is only watching that girl, I cannot do much more than that. What a coward.

Today is a very tiring today and tomorrow as well. I have a lot of things on hand.....

Ganbatte...

See you all guys...

Saturday, June 21, 2008

LDAP Sharing knowledge :)

Several days ago, I read a book about LDAP. Understanding the schema and understanding components inside it, is part of my purpos e on reading it. The following are the points that I got from the book. I hope this blog help any visitors of this blog to understand LDAP.

I would like to start with the schema. What actually schema is used for? The schema is used for defining the structure of your organization in LDAP. The schema is defining 2 components to build the structure of your organization. They are:
1. Object class
Object classes define what entries are possible in an LDAP directory. Please have a look at the following example:

objectclass ( 2.5.6.4 NAME 'organization' DESC 'RFC2256: an organization' SUP top STRUCTURAL MUST o MAY ( userPassword $ searchGuide $ seeAlso $ businessCategory $ x121Address $ registeredAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName $ st $ l $ description ) )

You may be often to see the above object class defined in your ldif file when you are trying to update or add an entry to your LDAP. The above piece of code, is defining objectClass named organization. The thing that you need to put your attention on is keyword NAME, SUP, MAY and MUST.

What are those things mean?
NAME means the name of your object, it should be unique among all of the object defined.
SUP means that from which class it is derived.
MUST means the compulsory attribute that should exist when you add an entry to which class it belongs to.
May means a not compulsory attribute.

For your information, actually, there are 3 classes that is provided by LDAP (read: OpenLDAP) they are: abstract classes, auxiliary classes, and structural classes. As a lot of cases, people more often to use structural class, in the above example, I am using structural class as you can see from the above example.

2. Attribute
Attribute is defining attribute that objectClass has. For better understanding, I would like to give an example. Below is the example declaration of attribute o and the above example in objectClass organization is the example usage (Please have a look):

dn: dc=atlassian,dc=com objectClass: dcObject objectClass: organization dc: atlassian o: Kia Huat

Please have a look at the following messy picture:



From the above picture, we can see that objectClasses defined are department, sales and IT. ObjectClass sales has several attribute which are name, age and hobby. so does IT.

In attribute, you can define it as a text, image or any sort of data. Howeve, I wont cover up all of those things. It would be better to see it by yourself as it should not be a big problem to understand it.

If you have any comments or advise, I would appreciate it. Please do not hesitate to give it to this blog.

Have a nice day !!!

Monday, June 9, 2008

Learning SAP R/3

This morning, just after wake up from a nice sleep, I read the book that I had downloaded yesterday. This book is about SAP. One thing that was coming from my mind just before I read the book is what actually R/3 stands for. After reading this book (only chapter), R originally stands for Real time which means that every changes on one module will update all of the affected modules in SAP.

Regarding SAP's module, SAP contains a lot of modules (I dont want to mention it as it is too many) such as FI (this stands for Financial Accounting, and it contains several modules... ) and HR. errmm quite a lot but unlucky me i can not see it directly the SAP modules. It makes me a bit difficult to learn by myself.

Regarding SAP R/3, This application consists of 3 layer, which is Presentation layer, middle layer and basis layer. Middle layer actually, is the core of SAP. why? because kernel is located at that layer. Besides, additional functionalities which we can create it using ABAP, is located in the same layer as kernel. The book says that all of the thing we can do in this layer. we can provide many functionalities created using ABAP. Errrmm, I think this is the most interesting point on SAP currently (at least for me).

Another interesting point on SAP is its capability to integrate with other external applications. This application provides a way to integrate with many application developed using many languages, such as Java (this is a must), C, VB etc. From now, I seem to focus on learning this application. I hope there will be a lot of people or resource that I can get to learn this tool.

Sunday, June 8, 2008

JFreechart and JIRA

One of the features on my plugin is creating a chart based on the specified parameter. Actually, this plugin is completely the same as report but the different is the representation. If report plugin is using text but this portlet plugin (I put my chart onto portlet) is using chart to represent the data.

The tricky thing on this plugin is on how to generate chart on the fly. As you know, JIRA is built on several frameworks. Even in plugin creation, you can not be as free as you create common servlet. Thus, creating plugin in JIRA is similar with creating a feature or functionality in the box. There are a lot of limitations.


Lucky me, since version 3.xx (I forget since what version), JIRA (and Confluence) provides you a way to create servlet. Isnt it very cool? It seems that JIRA provides you a way to get a freedom to add an additional functionalities as free as you create common servlet. Moreover, JIRA provides you an injection mechanism so that whenever you need JIRA's object, you can grab it using ComponentManager object. The following is as example of it.

public ServletImage() {
this.searchProvider = ComponentManager.getInstance().getSearchProvider();
this.authenticationContext = ComponentManager.getInstance().getJiraAuthenticationContext();
}


By using servlet, you can create any file on the fly and you do not need to worry about temporary directory to put your file.

Sunday, May 25, 2008

Webmethod and database (Experience part 2)

I think this is quite interesting regarding webmethod usage. As you know, webmethod provides you a custom flow steps through Java source code. Currently, I am doing research on how to webmethod connects to database. I am not sure if webmethod has provided you flow steps to do this. but currently I am using Java source to connect to database.

There are several way to get connection to db:
1. Using JDBC code. May be this way is a standard way for all of Java programmer. You can find this way in many resources in internet.
2. A class provided by webmethod. This class acts as an intermediary to connect to DB. Even this class uses JDBC to connect. I assume this class uses JDBC driver and bundle several steps in one method called getConnection(url, username, password, drivername). This method is located at DBConnection class.

For example:
If I use JDBC driver, I need to write the following steps:
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/confluence28?user=root&password=arie");

But if we use the webmethod class, we only need to specify one line:
DBConnection dbConnect = db.getConnection("jdbc:mysql://localhost/confluence28", "root", "arie", "com.mysql.jdbc.Driver");

Saturday, May 24, 2008

Experience on WebMethod (Part 1)

Several days ago, my boss (read: my company) gave me a short course on webmethod. This tool is used for integration. Very nice word, it sounds so elegant. However, in the first time I learn this tool, I felt so difficult to learn. Why? because I was not really familiar with the documentation. Besides, there are not a lot of people using this tool. After several days struggling on getting familiar with the flow steps, I can finish all of the exercises that I got from my company.

Last night, I was doing research on how to integrate with flow steps written in Java. Damn, I get an error message saying that no compiler found (this is not the real message). After reading, I found that I need to put a path to the compiler in system path. After making changes on it, I get another error message saying that I need to compile the resource (What the heck !!!!). I was desperate. I thought I had put the correct path and the previous error had been solved. After several hours playing around with the compiler path, I found that I have to use WM compiler instead of my own compiler which is a java compiler that I installed on my PC. Huuuuhh.... succkksss....

In order to make your Java code compiled and run correctly, you need to put compiler bundled by WM. It is located at /jvm/win142/bin. Just put the path into your System path. Then everything works fine.

Wednesday, May 14, 2008

Getting the result of all filter in JIRA

Today, I get another new knowledge regarding JIRA stuff. Currently, I am developing a report plugin in JIRA. This afternoon, I got a problem on populating a value of all saved filters in JIRA. These values are used for specifying parameter in the report plugin. However, after doing some research on JIRA source code. I found the following source code which is used for populating parameters in report plugin.

List savedFiltersList = ManagerFactory.getSearchRequestManager().getVisibleRequests(user);
savedFilters = new HashMap();

for (Iterator iterator = savedFiltersList.iterator(); iterator.hasNext();)
{
GenericValue request = (GenericValue) iterator.next();
savedFilters.put(request.getLong("id").toString(), request.getString("name"));
}


By returning variable savedFilters, then JIRA will populate the value of select component automatically.

SQL Updating certain pattern of text in MySQL

There are a way to update a text in some database with certain pattern. Today I get a case regarding this problem. In order to update a content in a column of a table, you can use the following command:

mysql> update bodycontent SET body = REPLACE ( `body` ,'google.com','arie.ganten
g.com');

The above query will update table bodycontent, body column which content is google.com, to arie.ganteng.com.

Sunday, May 4, 2008

Experience on Apache POI

Today, I am doing experiment on Apache POI. Company asked me to create plugin for JIRA which is not within my scope as Confluence support engineer. However, I really enjoy it. One feature that I create in the plugin is an ability to convert data within JIRA to excel file. Actually, there are several options that I can use to export to excel file. I have searched through several websites where another peoples have done some research on it and they come with the conclusion that Apache POI is better than the other.

The most important thing on Apache POI is HSSFWorkbook object. This object represents one excel file. One workbook consists of one or several sheets. And one sheet contains several rows and columns.

Below is an example on how to create workbook:

HSSFWorkbook workBook = new HSSFWorkbook();
sheet = workBook.createSheet("Product");
HSSFRow row = sheet.createRow(1);
HSSFCell cell = row.createCell((short) (1));

What a simple code...... hehehe.... Note that the second line is used for creating a sheet named Product and POI will start the index of row and column with 0 instead of 1. Thus the above code will create object row in line 2 (in the excel file, row is started from 1 instead of 0) and will create a cell in column B(in the excel file, column is started from A instead of 0).

In order to fill in the value in the cell, POI has provided you a method setCellValue(). Please take a look at the API documentation for detail information regarding this method.

Another thing that I really like with POI is the ability to manipulate style in every cell. The style is including a way to format the data inside cell. In the plugin that I create, I use an ability of POI to manipulate border of each cell in the sheet. Below is an example to use HSSFCellStyle:
HSSFCellStyle style = workBook.createCellStyle();
style.setBorderTop(style.BORDER_THIN);
style.setBorderBottom(style.BORDER_THIN);
style.setBorderLeft(style.BORDER_THIN);
style.setBorderRight(style.BORDER_THIN);
style.setAlignment(style.ALIGN_CENTER);
style.setFillForegroundColor(HSSFColor.GREY_40_PERCENT.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

In order to apply the style on each cell, POI has provided us a method named cell.setCellStyle(style). This method has a parameter HSSFCellStyle which you has manipulated in the previous example.

Friday, April 11, 2008

A new friend is leaving....:((

As the title mentions about my new friend. You know i have just known a girl who is very much nice... not really pretty but i am sure she is very nice (even i just knew her yesterday)... huuhh pity of me you know... she left me .... without telling me that she want to go back today...

If the time can be turned back, i would like to not went to work early. Shit.... this is because none take my cases. There is a lot of cases that I havent touched yet since i was sick.. ooo man... i hope i can meet such kind of girl.

Monday, April 7, 2008

Hardware Information for audit usage

yuhuu.... In the end I can find a way to retrieve hardware information... I am going to write a Confluence plugin using JMX which shows hardware information. I think it is very useful for a big company which want to have a good documentation regarding to their inventories. By using this plugin company can see their inventories which are distributed in remote area (as long as they are connected with internet :P).

However, yesterday I have done research about how to retrieve hardware information, but I found that Java does not provide you with such feature and the only way is go through platform specific API but it will make me difficult in writing this plugin... and finally I found some API that is used for retrieving hardware information even I thought it is using the same idea as I mentioned but at least this API provides an interface to get what I want regardless what platform I am using.

Now, I am going to give a try on the API. Hopefully, it can meet what I want.

Sunday, April 6, 2008

Retrieve Hardware Information

Is there a way to retrieve information regarding to hardware information using java? errmm I have looking through google about this question... wakakakak pity me... i couldnt found any result. I hope I can find library can be used to retrieve hardware information.....

However, the only way to retrieve such information is only through platform command. It means that every platform that your application will run on, you need to issue one specific command.... wakakakak what an ugly arch. there is no way again....

Actually this information is used for my plugin development. I want to take a part on codegeist competition (!!! Guys please pray for me on it .... :P) I want to make a plugin to monitor all of the machine or resources that is connected to Confluence server thus we can see what kind of resource that you have. Moreover, you can control the resource as you want. But again since this kind of instruction is not really platform independent (since java need a command from the OS where it is running on). So I guess I have no choice anymore... I need to use it.

Another suck day

Fuhh... I feel so regret on my life today.... today is not a productive day for me... i cannot touch code just because of my breakfast... to have a breakfast which is Lontong Jawa, i need to go to Damai... arrghhh so far and of course hot.... today is very hot.... unlucky me.... after having a lunch... i was feel so tired... damn... i cannot do coding today.... my leg is hurt...

Btw, I have another house mate who has just moved in yesterday... yea... i think she is very nice... Last night I had a chat with her... crapping and bla...bla...bla... In term of her face... I think I should give her 4(in range 1-10) kukukuku.... but she is very nice... i think the most important thing that you need to consider about a friend is how friendly your friend is.

Back to plugin competition, heh.... I need to catch up many thing today .... haaaa,,,,,,, a lot of thing i have not finished yet...... Hope I can finish it on time... Amieennn.....

Saturday, April 5, 2008

Plugin Competition

I am planning for Confluence (one of Atlassian's product) plugin competition... Actually i really need a help for this since i dont have much time on doing it. However, this is a thing that i need to put effort a lot on. Pity of me,

The progress is not really good... since i am stuck on something that should be my advantages on this plugin.. you what is that.... i am stuck on a way to increase a heap space for JVM... if there is a way to do that.... please kindly to ping me...by put a comment on this blog....

huuhh very hard to say... it is about life ... this is about me ..... about my character... it is very hard to deal with myself... in the first time i was seeing the advertisement on this plugin competition.... i am very interested on it.... as the time goes on,,,,, you know i am getting lazy on putting the effort to do plugin development....

However, I dont to be a loser, I hope my god gives me a light... gives me a new spirit.... to be a new Arie.... pumping up my spirit.... I hope so... come on ... come on Arie.... you can do that... you can win.... come on.... I believe you can do that....

Remember hardwork.... working smart.... navigate your life.... navigate your future....

Come on... come on.... wake up... wake up....
Ok that's all for now

My first blog

Huuuhh.......

Hi all,,,,

This is my first blog..... I dont know why do i want to create blogger account. it seems that it is because of my loneliness here. For your information, I am staying at Malaysia and my hometown is in Indonesia. Yeah..... lovely Indonesia...

Even my country is a bit retarded,,,, hahaha,,, not retarded.... too rude..... may be a more polite way to say about my country is a bit poor. I am not saying that in term of annual revenue for all Indonesians but there are only some people that is really ... really rich and the rest, which is almost all, is pretty bad..... this is not fair..... errmmm enough saying about my country... however, i keep loving my country Indonesia.

Regarding the reason of why i want to create this blog account? it is because of I want to express my mind .... since i am here alone... may be this is the only way that i can do to express my feeling.... very... very hard to live in the foreign country..... hahaha especially for a guy like me...hahaha....

That's all for now.....

happy blogging...