Tuesday, December 30, 2008

TimeSeries chart, JFreeChart

TimeSeries Chart

Time series charts are created using data from the XYDataset, it returns x-values which are of type double, these values are converted by a class called DateAxis which converts the huge double returned from XYDataset into dates and back to the double as necessary. How the double values are converted into dates isn't important for us to know, the DateAxis just does it for us which we can use to create the chart. If you are really interested to find out, then type "number of milliseconds since midnight, 1 January 1970, XYDataset, JFreeChart" in to the Holy Grail of Searches(google ;)), you might find some convincing results.

Charts usually have a domain, a time series as the name of the interface says itself(TimeSerieschart), has a domain which will have a series of times, as a matter of fact it can have values ranging from days to months.

TimeSeries can let you make objects of different times and it lets you add up all of the them and gives a series of times back as one object.
A dataset, TimeSeriesCollection, can be created out of the TimeSeries object by adding the TimeSeries object to the TimeSeriesCollection object. Since, TimeSeriesCollection implements XYDataset, the TimeSeriesCollection becomes a dataset which can be used to create the chart.

A chart is created with default settings but it is highly customizable, for example, a renderer object can be obtained from the plot which can in-turn be obtained from the chart. Now this renderer can be changed to display series shapes at each datas point, in addition to the lines between data points.And secondly, a date format override can be set for the domain axis.

To modify the renderer, first a reference to the renderer is needed and secondly cast of the rendrer into a XYLineAndShapeRenderer is required.

eg. to set the default shape visible and to set default shape filled the following magic will suffice:

XYItemRenderer r = plot.getRenderer();
if(r instanceof XYLineAndShapeRenderer)
{
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
renderer.setDeafultShapeVisible(true);
renderer.setDefaultShapeFilled(true);
}

In other words, the above snippet of code puts a legend, which is picked for the series, at each data point.

To override the date format of the domain axis the follwing will do:

DateAxis axis =(DateAxis)plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("MM=yyyy"));

Once the above date format override is set,the axis will auto-select a DateTickUnit and will ignore the formatting from the tick unit and use the override format instead.

I am including the following program which also features in the JFreeCharts Developer's Guide. If some of you have gone through the guide, and if you happened to try out
the following code, you will notice that I have excluded the "public static JPanel createDemoPanel()" method from this code snippet because for this example the method doesn't
serve any purpose.

Other points not explained in the guide are:

In the code section where the renderer is being customized this line "renderer.setDefaultShapesFilled(true);" is there but it is not required because the shape that we have picked for
displaying a mark is not hollow type.

The exact code I worked on can't be displayed here because of my company policy but I would refine on somethings which I did different from what appears below:
As you can see below, the timeseries objects are being hand carved one after another, in my case, this done in a for loop based on matching criterion of some of the
persistent properties of POJOs. In other words, I filled up my time series objects with dates from database based on the business requirement. You could do the same, no matter whether you use
Hibernate with Spring and POJOs or some other framework, JFreeChart's TimeSeries isn't meant for one set of implementation and environment.



package name.your.own;

import java.awt.Color;
import java.text.SimpleDateFormat;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;

public class TimeSeriesDemo extends ApplicationFrame
{

public TimeSeriesDemo(String title)
{
super(title);
XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
chartPanel.setMouseZoomable(true, false);
setContentPane(chartPanel);
}

private static JFreeChart createChart(XYDataset dataset)
{
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Legal & General Unit Trust Prices", // title
"Date", // x-axis label
"Price Per Unit", // y-axis label
dataset, // data
true, // create legend?
true, // generate tooltips?
false // generate URLs?
);
chart.setBackgroundPaint(Color.white);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
XYItemRenderer r = plot.getRenderer();

if (r instanceof XYLineAndShapeRenderer)
{
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
renderer.setDefaultShapesVisible(true);
renderer.setDefaultShapesFilled(true);
}

DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
return chart;
}

private static XYDataset createDataset()
{
TimeSeries s1 = new TimeSeries("L&G European Index Trust", Month.class);
s1.add(new Month(2, 2001), 181.8);s1.add(new Month(3, 2001), 167.3);s1.add(new Month(4, 2001), 153.8);s1.add(new Month(5, 2001), 167.6);
s1.add(new Month(6, 2001), 158.8);s1.add(new Month(7, 2001), 148.3);s1.add(new Month(8, 2001), 153.9);s1.add(new Month(9, 2001), 142.7);
s1.add(new Month(10, 2001), 123.2);s1.add(new Month(11, 2001), 131.8);s1.add(new Month(12, 2001), 139.6);s1.add(new Month(1, 2002), 142.9);
s1.add(new Month(2, 2002), 138.7);s1.add(new Month(3, 2002), 137.3);s1.add(new Month(4, 2002), 143.9);s1.add(new Month(5, 2002), 139.8);
s1.add(new Month(6, 2002), 137.0);s1.add(new Month(7, 2002), 132.8);

TimeSeries s2 = new TimeSeries("L&G UK Index Trust", Month.class);
s2.add(new Month(2, 2001), 129.6);s2.add(new Month(3, 2001), 123.2);s2.add(new Month(4, 2001), 117.2);s2.add(new Month(5, 2001), 124.1);
s2.add(new Month(6, 2001), 122.6);s2.add(new Month(7, 2001), 119.2);s2.add(new Month(8, 2001), 116.5);s2.add(new Month(9, 2001), 112.7);
s2.add(new Month(10, 2001), 101.5);s2.add(new Month(11, 2001), 106.1);s2.add(new Month(12, 2001), 110.3);s2.add(new Month(1, 2002), 111.7);
s2.add(new Month(2, 2002), 111.0);s2.add(new Month(3, 2002), 109.6);s2.add(new Month(4, 2002), 113.2);s2.add(new Month(5, 2002), 111.6);
s2.add(new Month(6, 2002), 108.8);s2.add(new Month(7, 2002), 101.6);

TimeSeriesCollection dataset = new TimeSeriesCollection();

dataset.addSeries(s1);
dataset.addSeries(s2);

dataset.setDomainIsPointsInTime(true);

return dataset;
}

public static void main(String[] args)
{
TimeSeriesDemo demo = new TimeSeriesDemo("Time Series Demo 1");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}


The above examples and composition, entirely have been about still data, JFreeChart has interfaces for developing a chart system for live and streaming data as well, for example the guide talks about a little app for streaming the system resources usage in terms of dynamic charts. But the guide doesn't support it with high jinks because it could be very slow if you are crunching sizable amount of data because each time a dataset is updated, the ChartPanel reacts by redrawing the entire chart.

Saturday, December 27, 2008

Free JFreeCharts Info.

I had to use JFreeCharts all of a sudden, kind of in a rush. I had no previous information about it until I could get hold of a free JFreeCharts Developer Guide, I am lucky that I could use it since my company paid for it.

After accomplishing a few tasks using JFreeCharts, I wanted to summarize what I discovered about JFreeCharts. Well, without any further due I am going to get right into it:
To start with, it is an API to give a "face" to your data, so in simpler terms JFreeCharts helps you turn numbers into diagrams and the output diagrams can be be piped into as a PDF(using iText) or SVG(using batik) file. It fits well in a situation when you as a developer have to convey the meaning of the data in the database to a separate team like business or maybe the architecture team.

We have a tool that we developed in-hosue, the tool basically saves time since it makes querying the database a lot easier. There are tables in the database that tell how many times queries were fired and how many people were accessing the database and doing the four holy things that we always do with the database(add, edit, get, delete). Now, using the JFreeCharts methods I could give a meaningful representation to the logs in these tables, in terms of Pie Charts, Bar Charts, Line Charts, Scatter Plots, Time Series Charts etc.

I will get into details of my accomplishments with JFreeCharts but before thast just for a simple overview, the following is a list of packages into which all of the class libraries are bundled, for a resonoably advanced reader, the hierarchial names should give an initial insight into what can be accomplished with the classes and inturn the methods inside them.

(for brevity I have put everything that can be dotted in the parenthesis)
org.jfree.chart (annotations, axis, block, entity, event, imagemap, labels, needle, plot, renderer, renderer.category, renderer.xy, servlet, title, ui, urls,

(for brevity I have put everything that can be dotted after "data" in parenthesis)
org.jfree.chart.data (category, contour, function, gantt, general, jdbc, statistics, time, xml, xy)

Pie Chart can be generated using data which can be cast to the PieDataset interface and the same chart can be displayed with a 3D effect.

Data which confirms to the CategoryDatset interface can be displayed as Bar Chart and/or Line Chart

Similarly, data that confirms to the XYDataset interface can be used to generate a range of chart types. By default lines are drawn between datasets. So one can give just the X, Y data points and the interface will draw the line to connect them by default. Extentions of XYDataset such as HighLowDataset and IntervalXYDataset can be used to high-low-open-close data and histograms respectively.

Area Charts and Stacked Area Charts can be generated using data of CategoryDataset and XYDataset interface types. The list of kids of Charts that can be generated using JFreeCharts goes on and on, you name it.

There are three clear-cut steps that goes into getting data, presenting data and displaying the data into diagrams, the steps are as follows:

The steps:

1. Create the appropriate dataset using the data in hand(technically in the tables of your database system)

2. "Presenting the Data" created(or cast) in step 1. Involves creating a JFreeChart object which will draw the chart, eg. ChartFactory can draw the data in step 1.

3. The final step is "Displaying Chart" for eg. displaying the chart in a frame on the screen.


// Step 1 (creating the dataset, in other terms casting your data into a JFreeChart Dataset type)
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Amar" , 30.4);
dataset.setValue("Akbar" , 19.6);
dataset.setValue("Anthony" , 85.5);

//Step 2 (creating the chart)
JFreeChart chart = ChartFactory.createPieChart("The Chart", dataset, true, true, false);//starting from the frist boolean: legend, tooltips, urls

//Step 3 (creating and displaying a frame)
ChartFrame frame = new ChartFrame("Example", chart);
frame.pack();
frame.setVisible(true);



Once a chart object is created in step 2, a plethora of further customization eg. setting background color, getting the plot object fromt he chart object for further customization and in-turn a "renderer" object can be obtained from the the plot object to customize colors and other like attributes.

Please copy and paste the following for a google search box and click "Google Search" button, to move onto the second of my article on TimeSeriesCharts and how I used it. The text to search for in google is:

Free JFreeCharts Guide, JFreeCharts developer guide, TimeSeries, XYDataSet, Pie Chart, Bar Chart, JFreeCharts API, Premium JFreeCharts

Free Premium JFreeCharts Info.

I had to use JFreeCharts all of a sudden, kind of in a rush. I had no previous information about it until I could get hold of a free JFreeCharts Developer Guide, I am lucky that I could use it since my company paid for it.

After accomplishing a few tasks using JFreeCharts, I wanted to summarize what I discovered about JFreeCharts. Well, without any further due I am going to get right into it:
To start with, it is an API to give a "face" to your data, so in simpler terms JFreeCharts helps you turn numbers into diagrams and the output diagrams can be be piped into as a PDF(using iText) or SVG(using batik) file. It fits well in a situation when you as a developer have to convey the meaning of the data in the database to a separate team like business or maybe the architecture team.

We have a tool that we developed in-hosue, the tool basically saves time since it makes querying the database a lot easier. There are tables in the database that tell how many times queries were fired and how many people were accessing the database and doing the four holy things that we always do with the database(add, edit, get, delete). Now, using the JFreeCharts methods I could give a meaningful representation to the logs in these tables, in terms of Pie Charts, Bar Charts, Line Charts, Scatter Plots, Time Series Charts etc.

I will get into details of my accomplishments with JFreeCharts but before thast just for a simple overview, the following is a list of packages into which all of the class libraries are bundled, for a resonoably advanced reader, the hierarchial names should give an initial insight into what can be accomplished with the classes and inturn the methods inside them.

(for brevity I have put everything that can be dotted in the parenthesis)
org.jfree.chart (annotations, axis, block, entity, event, imagemap, labels, needle, plot, renderer, renderer.category, renderer.xy, servlet, title, ui, urls,

(for brevity I have put everything that can be dotted after "data" in parenthesis)
org.jfree.chart.data (category, contour, function, gantt, general, jdbc, statistics, time, xml, xy)

Pie Chart can be generated using data which can be cast to the PieDataset interface and the same chart can be displayed with a 3D effect.

Data which confirms to the CategoryDatset interface can be displayed as Bar Chart and/or Line Chart

Similarly, data that confirms to the XYDataset interface can be used to generate a range of chart types. By default lines are drawn between datasets. So one can give just the X, Y data points and the interface will draw the line to connect them by default. Extentions of XYDataset such as HighLowDataset and IntervalXYDataset can be used to high-low-open-close data and histograms respectively.

Area Charts and Stacked Area Charts can be generated using data of CategoryDataset and XYDataset interface types. The list of kids of Charts that can be generated using JFreeCharts goes on and on, you name it.

There are three clear-cut steps that goes into getting data, presenting data and displaying the data into diagrams, the steps are as follows:

The steps:

1. Create the appropriate dataset using the data in hand(technically in the tables of your database system)

2. "Presenting the Data" created(or cast) in step 1. Involves creating a JFreeChart object which will draw the chart, eg. ChartFactory can draw the data in step 1.

3. The final step is "Displaying Chart" for eg. displaying the chart in a frame on the screen.


// Step 1 (creating the dataset, in other terms casting your data into a JFreeChart Dataset type)
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Amar" , 30.4);
dataset.setValue("Akbar" , 19.6);
dataset.setValue("Anthony" , 85.5);

//Step 2 (creating the chart)
JFreeChart chart = ChartFactory.createPieChart("The Chart", dataset, true, true, false);//starting from the frist boolean: legend, tooltips, urls

//Step 3 (creating and displaying a frame)
ChartFrame frame = new ChartFrame("Example", chart);
frame.pack();
frame.setVisible(true);




Once a chart object is created in step 2, a plethora of further customization eg. setting background color, getting the plot object fromt he chart object for further customization and in-turn a "renderer" object can be obtained from the the plot object to customize colors and other like attributes.

Thanks for reading and Thanks for stopping by!!

~Nirmal

Keep your friends close and your enemies closer.
Sun-Tzu

Wednesday, December 17, 2008

Most Used Eclipse Shortcuts

This list is I believe (becoz i use : ) ), the most used eclipse shortcuts, be it myEclipse, IRAD's eclipse, CFEclipse or any other flavor of eclipse.

These are mostly the ones you use to edit text in the editor and also has the most important ones for searching.

I am sure at least 3 to 4 shortcuts here will be new for every avid shortcut users.

ctrl + shift + t
search for (java) types
you can enter only the uppercase letters of your wanted class or interface. eclipse will bring only such types to the top which contains these uppercase letters inside their names.
i.e. entering BAD finds BaseAccountData or BindAccountDAO etc

ctrl + shift + r
searches for any resources .
the same is true for search with uppercase letters as mentioned above. beside types, eclipse will list any other resources, i.e. jsp, xml, properties, ...

ctrl + o
searches for a method inside a type. let you jump quickly to the beginning of a method.

F3
opens the declaration of a type. let you jump quickly from a type to another type. just place the cursor to the declared type you want to jump to and hit F3. you can alternatively push ctrl and click onto the type you want to open.

alt + arrow left / rigth
lets you jump right back (and forth) to the location (i.e. type declaration) you came from.

ctrl + t
shows the type hierarchy of a type. just place the cursor to the declared type with the wanted hierarchy and hit ctrl + t. now you can scroll through the hierarchy (arrow up / down) and open the desired supertype or subtype (by hitting enter).

ctrl + shift + g
searches for all references of a type or method. just place the cursor the the declaration of the type or method and hit ctrl + shift + g. now you have an overview of all types in workspace which references your class / method.


Ctrl+(shift+)k
-> Searching forward (backward) for the last highlighted text

Ctrl+. -> Go to the next warning / error
Ctrl+, -> Go to the previous warning / error
* works in Javaperspective, not e.g. in phpeclipse

Ctrl+shift+l -> List of many available Shortcuts


Alt + Shift + J, release then press X
runs the program

Ctrl + NumPad - or +
to collapse/uncollapse

Ctrl + NumPad * (multiply key)
To expand all

Ctrl + NumPad / (divide key)
to collapse all

Alt+Shift+Q, B
Show all breakpoints

Alt+Shift+Q, H
Cheat sheets

Alt+Shift+Q, C
Show console

Ctrl+Shift+X
To upper case

Ctrl+Shift+Y
To lower case

Ctrl+Shift+Up
Go to previous member

Ctrl+Shift+Down
Go to next member

Ctrl+Shift+P
Go to matching bracket

Ctrl+Alt+H
Open call hierarchy

Alt + Shift + S
source quick menu

Ctrl + Shift + \ or / or C
comment uncomment block

Ctrl + /
toggle selection comment


Ctrl + L
Shift left

Ctrl + 3
Pretty much lets you search anything and everything

Ctrl + E
Same as ctrl + F6

Saturday, September 13, 2008

Digit to Two Letter Word Converter Utility

/*
* A utility for displaying combinations of letter groups, two at a time.
* The user will enter digits (0-9) on a cell-phone numeric pad, letter groups
* for each digits(eg. "ABC", "WXYX" etc are stored in a map using the letter
* key for each. Keys entered at command line by user, are mapped to their
* corresponding values("letter groups") and are retrieved and saved into
* an String array.
*
* The string arry then is passed along with other info to make the combinations.
*
* There is no definate requirement for this utility, so it servs to give a general
* idea of how user input are mapped to values and how they are combined into meaningful
* two-letter words.
*
* Please feel free to call if you need to.
*
* Assumptions: 1.Combination of two letters are to be displayed
* 2. The order of letter-group to be used for first letter doesn't matter.
* eg. if "ABC" "DEF" are entered this utility could either print:
* AD, AE, AF, BD, BE, BF, CD, CE, CF
* or
* DA, DB, DC, EA, EB, EC, FA, FB, FC
*
*
* Author Date Category
* Nirmal Singh Sep. 13th 2008 General/Utilities
*
*
* note: I can produce a more refined version, depending on input/comments in case
* somebody needs this utility for ceartain use.
*
*
*/

package mine_code;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class TwoLetterCombination
{
public static void main(String[] args)
{

getCommandLineArgsProcess(args);
}

private static void getCommandLineArgsProcess(String[] privateArgs)
{
System.out.println("Please enter digits 0-9 and ");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s = null;

try
{
s = in.readLine();
String[] strKeys = new String[s.length()];
int[] intKeys = new int[s.length()];

for(int b=0;b {
strKeys[b] = String.valueOf(s.charAt(b));
intKeys[b] = Integer.valueOf(strKeys[b]);
}

callToCopy(strKeys,intKeys, s);
}

catch (IOException e)
{
e.printStackTrace();
}
//System.out.println("Digits entered are: " + s);
}

public static void callToCopy(String[] strArr, int[] intArr, String s)
{
String[] targetArr = new String[strArr.length];
Map myHash = new HashMap();
for(int g=0;g {
targetArr[g] = strArr[g];

switch (intArr[g])
{
case 0: myHash.put(0, " ");break;
case 1: myHash.put(1, " "); break;
case 2: myHash.put(2, "ABC"); break;
case 3: myHash.put(3, "DEF"); break;
case 4: myHash.put(4, "GHI"); break;
case 5: myHash.put(5, "JKL"); break;
case 6: myHash.put(6, "MNO"); break;
case 7: myHash.put(7, "PQRS"); break;
case 8: myHash.put(8, "TUV"); break;
case 9: myHash.put(9, "WXYZ"); break;
}
}
printCombinations(myHash, s);
}

public static void printCombinations(Map myHash, String s)
{
Iterator it = (myHash.keySet()).iterator();
String[] values = new String[myHash.size()];
int arrSize=0;
System.out.println("Digits entered are: " + s);
System.out.println("The following are digits entered and their corresponding letter"+
"groups: ");
System.out.println();

while(it.hasNext())
{
int key = (Integer)it.next();
values[arrSize] = myHash.get(key).toString();
System.out.println(key + " " + values[arrSize]);
arrSize++;
}

int sizeOfArr =arrSize;
System.out.println();
System.out.println("The following are combinations of the letters: ");
System.out.println("Three blank spaces are stored for each 1 and 0 digits "+'\n'+
"and I am displaying the spaces along with the corresponding "+'\n'+
"letters as part of combination. ");
System.out.println();
for(int m=0; m {
for( int k=0;k {
if(m+1 {
for( int j=0;j {
String tempStr;
char firstChar, secondChar;
firstChar = values[m].charAt(k);
secondChar = values[m+1].charAt(j);
tempStr = firstChar+""+secondChar+"";
System.out.println(tempStr);
}
}
}
}
}
}

Thursday, January 17, 2008

You are Your Site!

In today's world you are who your website says you are. Your website can look how you look and it can tell who you are and how professional you are. The websites these days are not just info portal anymore. Hell ya, the peeps in Graphics Technology aren't learning all the mac tricks for free.

There are a lot of reasons to believe the concept of WYSIWYG. Everybody is popular today(the ones we know) because everybody knows them. How did that happen? Because of their site. Fan clubs didn't do much without websites. They still send post marked letters to their favorite artists in India but the whole picture lacks a real interaction. Not the same thing when we consider the same thing in the web world though. For example, some of my friend can get updates in texts and blogs from people like mahalo, veronica and cooper. How is all that possible? Because of the web. All of these people whom I have mentioned above have a really cool and crisp website which offer really simple sindicate. And they look really nice. Again thanks to the peep sin the graphics technology. Keep up with the good mac work! Bravo.

Okay, let me reaveal the truth...this article was inspired by a website called russell.com. If you don't believe me go there and check it out for yourselves. It is a crappy website. And guess what, there commercial claims that they are world's biggest investment company with over "TWO FREAKING TRILLION" dollars in investment! How is that possible?

In my opinoion, if you ain't got the look you ain't nothing. I am sure most of the people who have an affair with this company do most of their work through the web but I am just surprised how do they put up with this stuff.

If any of you were to go to www.russell.com, you would know yourself that the layout is so cumborsome to use. The pages are not in shape. I had to scroll every four words in a sentence. Honestly, I have been looking at companies like a hawk to work for them on the web but no matter how much russell.com offers me I think I might just say a nah to this one.

Alright let me confess, I am not that great looking but I do have a appreciation for beauty and this site makes me sad; especially when their commercial claims that they are over "two trillion dollars investment company on the globe" at one of the breaks during Larry's talk show on CNN.

Ok, last but not the least. What kinda people get hired to do the web for such companies? Do they even have time to look what they are putting themselves out as in commercials? Do they even notice how they look on the web. You can find a lot many others on the web like that but I thought a worsely designed web portal for big companies like russell.com could be the best example to express my dicomfort in the issue of desig and coordination among the people in IT and the people who just want stuff done. I know I could do a lot better job than that.

Thanks for reading!

Friday, January 11, 2008

Flock vs Widsets

Just like any program we write from the bottom up, from a block to a function and functions to a program cocooning all the functions into a program, there are things like widgets and widsets. I was happy to find out that I can get several widgets of my choice groupped together in another cocoon. There are several such cocoons like that but I was glad to get a the beginning info about widget engine after I found out what WidSets does. Nice to know that it is totally free and is for mobile phones. Ofcourse one has to think about what kind of data plan they have but WidSets can, no doubt, can add so much fun to our mobile life. I think this is high time that we rediscover our phone time life into a different dimmenssion. No I a not saying that we ought to dedicate more time to our tiny digi friends like our cell phones or PDAs but I am saying how about we use the same amount of our phone talk time doing other interesting things as well for free. No purchase necessary(ofcourse you have to have data plans to use WidSets). Instead asking or finding every piece of info we need(using the cell phone only) through a phone call, we can view or get texts, images and vidos to accomplish the same task. Doing that at least will give more piece of mind. We gotta face it, how much can we cope up with while having to interact with friends through talking in real time. For example, instead of looking for the name of a cheap hair cuttery place, we could have that info delivered to us within seconds(less than 10) using one of the widgets(that we can customize for our zip code or community name) in WidSets.

A not very exact but kind of same ideal example could be Flock. Flock does for PC what WidSets does for mobile devices.

My main topic was cocooning of little things(they seem little before some other things come out and enclose them) by another thing which is new and is usually inspired after a lot of little things mushroom. For example, so many social sites are available today and it is usually the case that our friends are using them. Mathematically if we were to take a intersection of the uncommon social sites used by our friends then the set will include most of the popular ones. I think how about another cocoon which is basically a social site and encloses all of the other social sites. Just like when there are too many little programs, we can break them down into functions or procedures and then include all of them into a single and efficient program. Doing so is typically computationally inexpensive.

In other examples, we are missing out on so many other really nice search engines because google overshadows them. I am sure google itself would like people to not miss out on those specifice engines because the fols at google themselves might be liking them because they are specific for some specific things that need. Well, nothing against or pro google here but my point is, a cocoon for search engines would be a great next line of products in the web tools arena.

Some of you might already know something like that already but I don't, so please do share.

Friday, January 4, 2008

Are you a BackButtoner?

Surfing through so many different pages or myriad websites, I have come to a simple conclusion that no matter where you are in a website you still do not need to use the back button to go back to the earlier pages you were. Let me make myself clear here: by "websites", I mean the ones which are created keepin in close compliance with the reasonable software engineering practices. Every page of a site on the web which complies the standard protocols of navigation allows a user to be able to navigate back and forth without using the back button. I have used the back button myself at many many instances but just the other day I realized that I really should quit that because it is not a good surfing practice. Actually, such a habit could put one into a serious problem resuling from loss of information. For example, if you are filling out a very important multi page form on the web and you relized that you probably filled in wrong information in the previous page, naturally you will hit the back button. If you knew this fact that you really do not need to use the back button, you still would hit the back back button and as some of you might know from past experience the the whole task of filling out such form becomes so convoluted. Maybe most of you aren't backbuttoner but this is just a reflection.
Happy late holidays~
nirmal