Thursday, May 3, 2012

Javascript Constructor & Namespacing

Namespacing is an obvious requirement for any JS applications in the enterprise world - apps. with several functions & data sets. Keeping data/functions i.e., objects in the global namespace would otherwise require being very creative with var names.
The following code demonstrates how to create a name space as well as constructors for JS Objects.

var a = {};
a.b = {};
a.b.C = function(){
    console.log("Constructor called!!");
    this.value="a.b.C";
    this.toString = function(){return this.value};
}

//console.log(b) // ReferenceError: b is not defined
console.log(a.b) // Object { C=function()}

var aa = new a.b.C();
console.log("Value: " + aa.toString()); // Constructor called!! 
                                        // Value: a.b.C

Thursday, April 5, 2012

ToDo App - jQuery UI

I have been playing around with Jquery UI and finally got some time to create a stand alone app. It's a GTD like app, of my personal taste. I use it home/work for personal tasks management. It may eventually hit the Chrome store, but I need to iron out some more kinks. I used to use task on cygwin, see my blog on this, but it certainly lacks in UI.

Features Include:
  • Uses jStorage for local storage: So tasks are available even after browser restart.
  • Keyboard Shortcuts - q  and Q to either quickly add a task or a form driven interface. Quick Add (q) follows some cryptic format but lets users "quickly" add a task. e.g., Something important ^t @Work #Feb 5 !H
  • Today/Next/Someday - Tabs can be navigated using arrow keys. 
  • Sortable tasks - This is the jquery ui sortable; lets users drag the tasks based on the order in which they want to perform.
  • Completed Tasks get nicely stricken out for that sense of accomplishment :D
Few enhancements that are still in the making:
  • Allow drag-n-drop across panes.
  • In-place editing of tasks : description/context/due/priorities
  • Log of completed/deleted tasks
This app was inspired by the so many good GTD apps available on Chrome Store or Mac OS X & the iOS. 

Friday, March 23, 2012

Unix sed - Fun at Work - Its Friday!

In my constant pursuit of efficiency vis-a-vis laziness, I ended up writing this stream editor command. I needed to transform this long list of constants in java into an HTML select tag. This served as a perfect opportunity to use sed.
Input: This comes from my file.
public static final String SOME_CONSTANT_1 = "CST1";
public static final String SOME_CONSTANT_2 = "CST2";
Output:


Here is the magical command.
sed -e 's/[[:space:]]\{1,\}/ /g' \                                                    
-e 's/.*g[[:space:]]\(.*\);/\1/g' \                                                   
-e 's/\(.*\)[[:space:]]*=[[:space:]]*"\(.*\)"/<option value="\2">\1<\/option>/g' \ 
fileName
  • [1]: Replace multiple spaces/tabs [white spaces] in and around a line in a file with a single space.
  • [2]: Get rid of unnecessary text
  • [3]: Swap and format the output to HTML

Friday, March 16, 2012

Javascript Singleton Pattern

This is just a working example of the idea discussed here. I thought it would help to see the working behavior.
var QuickDialog = function(){
    var privateInit = function(){console.log("init")};
    return{
        init: privateInit
    };
}();

QuickDialog.init();
QuickDialog.privateInit();
This is the firebug output for the above code.

Javascript === vs ==

=== also looks at the type


var a = "1";
var b = 1;
console.log(a===b); //false
console.log(a==b); //true

Saturday, February 18, 2012

Spring MVC 3.1 - Cancel button

I was searching for a way to deal with cancel button that would not cause a form submit and subsequent unnecessary validation of the form backing bean.
I ended up with the following solution for the time being.

Controller:
@RequestMapping(value = "cancel"
 method = RequestMethod.GET)
public String cancelSaveContact() {
 return "redirect:list";
}
JSP:
<a href="<c:url value='/contact/cancel'/>">
 <input type="button" value="Cancel"/>


Update: Unless you don't need cancel to do anything specific for this page, you might as well just redirect to the previous page.

Thursday, January 19, 2012

Java Lessons [3]


3. Hibernate:
People have been forever zealous about jumping into new technologies, but still hanging on to obsolete ideas. Just noticed a code written for Hibernate, where HQL was formed appending several HQLs & then the parameters as well. I thought we were done with this, having identified security issues like SQL injections & the complete failure in utilizing any caching mechanism offered by Hibernate or event the database.
Use Criteria to handle these dynamic queries, at least it will be clean and secure. And Hibernate can even cache these internally, if not by the DB.