Wednesday, December 21, 2011

The Grails Activiti Plugin 5.8.1 Released

I would like to announce the Grails Activiti Plugin 5.8.1 released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework. With the Grails Activiti Plugin, workflow application can be created at your fingertips!

What's New:
  • Fixed Issue 21 : Activiti 5.8 controller reloading broken in Grails 2.0.0.

Find Out More:

Tuesday, December 20, 2011

The Mahout Recommender Plugin 0.5.1 Released

I would like to announce the Mahout Recommender Plugin 0.5.1 released.

The Mahout Recommender plugin enabled you to use Apache Mahout recommendation algorithms in your Grails project. With the plugin, you can find an effective recommender, evaluating precision and recall, and evaluating the performance of the selected recommender without writing single line of code.

What's New:
Find Out More:

Thursday, December 1, 2011

The Grails Activiti Plugin 5.8 Released

I would like to announce the Grails Activiti Plugin 5.8 Released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework.
With the Grails Activiti Plugin, workflow application can be created at your fingertips!

Special thanks to Ned Wolpert, without his contribution of effort to upgrade Activiti's jar files to 5.8, test, package and release the plugin, you won't see this release news. Ned, welcome you to the project team!

What's New:
  • Upgrade Activiti's jar files to 5.8.

What's Next:
  • Nicolas Bohorquez Gutierrez is working on a plugin for Activiti Shiro Security Integration. The amendment and integration of this plugin to the Grails Activiti plugin is in the progress. This feature should release under 5.8.1 or 5.9
Note:
  • This version of the plugin is worked and tested for Grails 1.3.x. Once Grails 2.0.0 is released, we'll ensure it is working with the latest version of Grails.
Find Out More:

Friday, August 19, 2011

The Grails Activiti Plugin 5.7 Released

I would like to announce the Grails Activiti Plugin 5.7 Released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework.
With the Grails Activiti Plugin, workflow application can be created at your fingertips!

What's New:
  • Upgrade Activiti's jar files to 5.7.
  • Fixed Issue 15 : UUIDs in domain objects prevent task deletion.
  • Fixed Issue 18 : logging.properties causes large number of logs in the log file

Find Out More:

Monday, July 25, 2011

My First Experience of Outsourcing

On one of the Friday of last month, I am looking for part-timer or freelancer to assist me on a data entry work, so I start from my friend's circle, I posted the following message in my facebook's wall:

I am looking for part-time data entry operator to capture data from the web and record it to spreadsheet (MS Excel), may I know whether you or your friend interested to earn extra income?

Requirements: English literature, Internet Access Connection, Acrobat PDF Reader, Internet Explorer. Technical knowledge is not required.

Potential candidates: Account Clerk, Admin Clerk, Office Worker, Student

The job description is very similar to most job posts in the classified ad, do you think it is good example? It is definitely a bad one, the job description is too general, if you post similar job description, be specific about the job detail, so potential candidates know exactly the scope of the job and your expectation.

As not much feedback to my offer in facebook wall, I post the job description (it is more specific this time) to several freelancer and part-timer job sites. If you are looking for Malaysian freelancers or part-timer, I recommend AsiaPartTime.com, I received overwhelming responses within 3 days (approximately 100 responses via e-mail, SMS or phone call). A lesson learned: you must remember to include the following description after your job description and contact information:

If you are interested to the job, please tell me more about you, such as:

1) Your previous working experiences related to the job

2) Your current occupation (If student, please specify the course you studying)

3) Your understanding about the job


Otherwise, you will face the problem I faced -- asking these 3 questions to hundred applicants, I don't think you will have fun out of it. Based on the responses from these hundred applicants, I selected 7 applicants participate in a test (related to the job) to find the most suitable person for the job based on their test results.

Upon award the job to the shortlisted applicant, I include the following message:

Congratulations! The job is awarded to you!

Please take note for the following items:
Upon completion of the job:
About deadline and payment detail:

Finally, I found a right person for the job with deliverable that satisfactory. I paid 50% extra for the job. In the last message you send to your contractor, I urge you to include the following message so that you can get some feedback from her:

I need further input from you for the following items below:

1) What make you interested to take this job, besides earning extra $$$?

2) As this is the first time I involved in outsourcing, is there anything I can improve (to make the working and communication experience better)? Did I do anything make you unhappy?

3) Would you be interested to take similar job in the future, if there is any?

I hope to hear honest comments and feedback from you (even the negative one). :)

I'd love to hear your comments as usual.

Monday, June 6, 2011

The Grails Activiti Plugin 5.6 Released

I would like to announce the Grails Activiti Plugin 5.6 Released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework.
With the Grails Activiti Plugin, workflow application can be created at your fingertips!

What's New:
  • Upgrade Activiti's jar files and examples to 5.6.
  • Fixed Issue 13: Unable to run grails war after installing grails-activiti-plugin 5.5.
  • Fixed Issue 14: Nullpointer exception when the activiti engine is turned off, using activiti spring security plugin.
  • Support turning off Activiti Engine by add activiti.disabled=true to Config.groovy.

Find Out More:

Saturday, May 14, 2011

The Grails Activiti Plugin 5.5 Released

I would like to announce the Grails Activiti Plugin 5.5 Released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework.
With the Grails Activiti Plugin, workflow application can be created at your fingertips!

What's New:
  • Upgrade Activiti's jar files and examples to 5.5. Ported the Activiti's examples from JUnit3 to JUnit4.
  • Fixed Issue 10: deleteTask with custom domain class.
  • Add a new command activiti-quickstart to install plugin's index.gsp, logo, favicon and default H2 DataSource.grooy into the project. The index.gsp no longer install by default.
  • Add businessKey support when start a process instance by assign a value to params.businessKey.
  • Must use activiti-spring-security plugin 0.4.2 or above for Spring Security Integration.

Find Out More:

Friday, May 6, 2011

Is Grails Activiti Plugin production ready? Here is how people use it in production.

I posted this question "How do you use Grails Activiti Plugin?" last month to the plugin's discussion forum to find out how people use the plugin. I am glad and appreciated kindness of plugin users to share their experiences.

The following are some production usages of the Grails Activiti Plugin:

"We're re-writing a home-grown workflow management system to an order and production management system with Activiti as the BPM side. Its not in production yet but will be in use in 2012Q1." by Ned Wolpert

"I'm about to start a new business within an existing company. The new business is around BPM consulting and the supporting IT systems, with a strong focus on logistics processes. After checking several options I've chosen the combination of Grails/Activiti/ExtJs 4 to develop thew new system. I've developed a prototype for our new system and I must say that this combination works just wonderful!" by Markus Menner

"I'm using the grails activiti plugin in an application for call-center employees. The idea is support these employees with data from everywhere out of the organization. I use the activiti engine to support call-back appointments: if the call-center employee isn't able to give an answer to the customer, he creates an appointment for a colleague." by Richard Polderman

"I'm using it to control process performance in geoprocessing internal services. It's a process automation of services like topographic mapping. We are not creating automatic maps or anything like that. It's a simple tool we are using to measure business performance. We'll be using it to track performance and promote people based on results they give. In a near future we could use it in a six sigma project." by Alberto Barcelos

Lastly, I'd love to hear your sharing on how you use the plugin in the comments section below and you can find out more about how others use the plugin in this thread.

Monday, April 25, 2011

An Open Letter to Early Access Registered Users of Form Builder

I had gone through an blog post titled "Startups: Don't just collect my email" by Phil Anderson few days ago, He write:

Collecting emails is a great way to get in touch with your potential users when you are ready to go. I've since put my email address in quite a few of these. But I haven't heard back from a single one. I know launching a startup takes time, but by not contacting people who are interested in your startup and keeping them up to date, I'm probably going to forget all about it.

Thanks Phil, your blog post reminded me I should update registered users of early access to the prototype of Form Builder via the landing page whose trusted me by sending me their e-mail address. They are my valued users, they should receive updates of the form builder they deserved.

Along the way I work out the Form Builder of ProcessCanvas.com which targeted to end user (If you would like to find out more about ProcessCanvas.com, please see this post), I find out that some Grails developers are interested in Form Builder targeted to developer. Learned from my previous mistakes, I think I am getting smarter, I prepare a landing page, write about it, announce and post updates to Grails user community to find out whether there is real need for Form Builder to Grails developers.

The landing page launched in early March and two weeks later, 33 visitors signed up for early access. The result is not too bad in my opinion, thanks to those who help me to spread the news by using twitter, facebook, blog, etc. I learned from Running Lean, a book written by Ash Maurya, using qualitative approach, talking to people by conducting customer interviews such as problem interview is the best way to find out whether "Is this a problem worth solving?". So, I prepare the problem interview script and problem summary form by refer to guidelines in Running Lean, and send out interview invitation message to the 33 registered users. I'm ready for the interviews.

You guess how was the response rate? Zero! I told my friends I stuck in "talking to people" stage. What's wrong here? Is there anything wrong for qualitative approach suggested by Ash Maurya. Hm... Not really, it was simply the fact that most developers don't like to talk to people (including myself), furthermore they don't know me personally. (I still remembered the pressure I felt the moment I send out the interview invitation message, I still doing it because I think I need to get over it in order to get things done). I understood that developers are busy, they preferred written communication over verbal communication, I should choose communication channel they preferred.

I would like to seek your input here to ensure I create a form builder that meeting your requirements. Let's me list down top 3 problem hypotheses we experienced:
  1. The first problem we encountered was creating online form that look great and professional. It was challenge to many developers as it required creative skills. The design and L&F of the form getting more and more important especially it will impact end-user impression to your application.
  2. Also, to layout form fields properly was time-consuming and required knowledge of CSS. Some developers layout form fields using HTML table, but we think CSS is better and cleaner approach.
  3. Another problem we constantly faced was effectively creating Master-Detail Dynamic Form. It was most common type of form in application, but to create one still like black art to many developers.
Please response by answer the following questions:
  1. Do any of these problems resonate with you?
  2. How would you rank these problems (must-have, nice-to-have, don't-need)?
  3. Have you run into any other problems I didn't talk about?

Today, I signed in to my unbounce account to check how many users signed up so far, the following image is the latest update:





Lastly, I included the link of this open letter in e-mail message I sent to 60 registered user.

Thanks for read until here. I'd love to hear your comments as usual.

Tuesday, April 5, 2011

The Grails Activiti Plugin 5.4 Released with Spring Security Integration

I would like to announce the Grails Activiti Plugin 5.4 Released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework.
With the Grails Activiti Plugin, workflow application can be created at your fingertips!

What's New:
  • Upgrade Activiti's jar files to 5.4.
  • Support email sending without authentication.
  • Incorporate Spring Security Integration (enabled by Activiti Spring Security plugin) to the plugin and Vacation Request Sample Application.

Find Out More:

Friday, March 18, 2011

JQuery Validation UI Plugin 1.2.1 Released - Client Side Validation without writing JavaScript

I would like to announce the JQuery Validation UI Plugin 1.2.1 Released.

The JQuery Validation UI Plugin will bring Javascript Validator, Custom Constraints, Remote Constraints, jQuery Validation plugin and qTip (jQuery tooltip plugin) under the same root and deliver comprehensive client-side validation solution.

What's New:
  • Fixed Issue #9: Validation matches [a-zA-Z]+ doesn't support single character
  • Fixed Issue #10: In the java.lang.Bigdecimal also thrown an error for unique and range.
  • Fixed Issue #11: Type mismatch custom error message not working.

Find Out More:

Friday, March 11, 2011

Resurrection of Malaysia Groovy and Grails User Group

Two days ago, I google "Grails Malaysia", I found this thread "Groovy/Grails folks in Malaysia or Singapore?" in Grails User forum and Malaysia Groovy and Grails User Group. As commented by Steve, the Malaysia Groovy and Grails User Group is look like non-existent or spam mailing list. I look into the threads of Malaysia Groovy and Grails User Group and find out that there are handful of threads related to Groovy and Grails, many are spam as per Steve's comments.

If you are Malaysia's Groovy and Grails supporter, will you join a user group that have full of spam messages? I doubt it. Like many people, when I saw so many spam messages in the front page (I hate spam!), I quickly move my mouse pointer to "x" to close my browser window and leave the user group, when I move my finger and just before I press a left click button of my mouse, a "light bulb" pop up from my mind - What if every Malaysia's Groovy and Grails developer visited this user group and leave, this user group will become ghost town as commented by the group owner.

So, I decided to join the user group and try to remove all spam messages, in few minutes time I find out that group member only can report spam, not delete spam. So I send an e-mail to the group owner to request for ownership of the user group. Thanks for his quick response and granted me the owner right on the same day and ask me "What's your plan for the group? I'd like to be involved."

The following message was my response to him:
The short term plan is to make the group a "clean" place for local groovy and grails developer to hang out:
1. Clean up spam messages
2. Kick out spammer(s) from the group
3. Make an announcement (this group come back "live") and blog about it (need your help to spread the news)

Long term....? I hadn't think of it yet. :)
After I responded to him, I continue my work and plan to re-visit the user group in the evening. You guess what? When I re-visit the user group, the group owner had completed item 1. and item 2 above. Thank you so much! So, it is my turn to do item 3.

If you are Groovy and Grails supporter from Malaysia, please join the user group, invite people like you to join the user group. Do you see the orange button on right top of this blog? Do you like it? Please embed code snippet below to your blog, twitter, etc. to help to promote Malaysia Groovy and Grails User Group.

<a href="http://groups.google.com/group/malaysia-groovy-and-grails-user-group" title="Join Malaysia Groovy and Grails User Group"><img alt="Join Malaysia Groovy and Grails User Group" src="http://grails-activiti-plugin.googlecode.com/files/malaysia-ggug-bg-black.png" height="100%" width="100%" border="0" /></a>

If you are using blogger.com, you can embed the code above to your blog using HTML/JavaScript gadget without any adjustment. Otherwise, please adapt the code above to your blog, twitter, etc. (Please let's me know if you not sure how to do so). The code snippet above support black color background, if your background is white, please change malaysia-ggug-bg-black.png to malaysia-ggug-bg-white.png.

Thanks for reading. It is your turn to take action!

Saturday, March 5, 2011

Action Notes of How to Make Money in 6 Easy Steps

Today, my friend share me an outstanding article written by Jason Fried, How to Make Money in 6 Easy Steps. Initially the title of this post is "Reading Notes of How to Make Money in 6 Easy Steps", this post is to capture my thoughts after reading the article. If you really enjoy reading as I did, it is great! However, what matters most is what you do after you read. I change "Reading" to "Action", so it become "Action Notes of How to Make Money in 6 Easy Steps".

This is quite a long post, feel free to skip.

Why making money?
The question above seems no-brainer, right? Did you think of what money means to you? Take few minutes of your time and think deeply about it... At the end of this post, I will tell you what money means to most people.

6 steps from Jason Fried:
  1. Understanding the buyer is the key to being a strong seller
  2. In which I sell electronics, knives, and throwing stars—and learn that it's all about passion
  3. How, and why, to charge real money for real products
  4. There are different pathways to the same dollar
  5. The true value of bootstrapping
  6. A word about practicing

By reading the description, the 6 steps above doesn't sound like actionable, let's take one step at a time:
1. Understanding the buyer is the key to being a strong seller
Jason's lessons learned and discovery from working as tennis-shoe and tennis-racket salesman in his 14:
  • People's reasons for buying things often don't match up with the company's reason for selling them
  • When you describe things in terms people don't understand, they tend not to trust you as much
  • When customers shop for shoes, they do three things. They consider the look and style. They try them on to see if they're comfortable. And they consider the price. Endorsements by famous athletes help a lot, too. But the technology, the features, the special-testing labs—I can't remember a single customer who cared.
  • Understanding what people really want to know—and how that differs from what you want to tell them—is a fundamental tenet of sales.
My understanding:
  • Understand what make people buy and what they look for in your product and your competitor products. Most likely it is not features. From the example above, it reminded me about the process of buying car, are they look similar?
  • Speaking terms and language that customer understand
  • Be a great salesman

2. In which I sell electronics, knives, and throwing stars—and learn that it's all about passion
Jason's lesson learned from working as reseller:
  • Sell only things you'd want to buy for yourself.
My understanding:
  • Do things that you passionate and believe.
  • Build things that you will use it yourself, a.k.a prosumer. This lesson very similar to Scratch My Own Itch, build a product to solve your own problem and dogfood the product and sell it to people that have the same problem.

3. How, and why, to charge real money for real products
Jason's lesson learned from selling his Audiofile program:
  • People are happy to pay for things that work well. Never be afraid to put a price on something. Even if there are free options.
  • Charging for something makes you want to make it better
My understanding:
  • Make a product that so much better than free options and aimed to charge from day 1 by using Free Trial model (Try first, buy later if you like it).

4. There are different pathways to the same dollar
Jason's lesson learned from 37express:
  • Don't just charge. Try as many different pricing models as you can.
  • Try to remove the fear and uncertainty, and people will be more willing to pay you.
My understanding:
  • Be creative and flexible about pricing of your product or service
  • A/B testing is good way to test for different pricing models for SaaS product.

5. The true value of bootstrapping
Jason's lesson learned from bootstrapping:
  • Bootstrapping forces you to think about making money on Day One.
My understanding:
  • Monetary constraints and pressure make you work hard and think hard seriously to create a profitable business. When you have a lot of easy money, you tend to spend it easily without giving a thought.

6. A word about practicing

How and where to start?
In this last step, Jason suggestion on practice making money: Buy and sell the same thing over and over on Craigslist or eBay.

Key takeaway about actions you (and I) can take:
  • Be reseller or online seller to practice your selling skills
  • Learn about what make customer buy (your product or service)
  • Learn about pricing models by experiments (If you sell SaaS product, pick up A/B testing to test different pricing models)
  • Get inspired? Act now!

That's all about it, thanks for reading. I'd love to hear comments from you as usual!

Oops! Almost forgot Why making money? With money, you have freedom and autonomy. Jason Fried make a good point in his article:

Making money is about freedom. When you owe people money, they own you—or, at least, they own your schedule. As long as you remain profitable, the timeline is yours to create.

Thursday, March 3, 2011

Form Builder for Grails Developer

Along the way I am working on JQuery Form Builder Plugin and Grails Form Builder Plugin, I find out that some of you (Yes, I means you... Grails developer) would like to have a form builder plugin that targeted to developer instead of end-user.

I'm keen to find out that is there a real need for such a plugin, is this plugin a "must have" to you?

Please click the image below to sign up for early access to the prototype.



Edited on 07 March 2011: Total 18 Grails developers signed up, many thanks for trusted me by sent me your e-mail address (I hate spam too. I promise anything I send to you via e-mail will be relevant).

Edited on 08 March 2011: Total 24 Grails developers signed up, thanks for your support and trust.

Edited on 11 March 2011: Total 32 Grails developers signed up, many thanks for your support and trust.

Edited on 14 March 2011: 1 more Grails developers signed up (hm... seems like slowing down), many thanks for your support and trust.

The Grails Activiti Plugin 5.3 Released

I would like to announce the Grails Activiti Plugin 5.3 Released.

Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework.
With the Grails Activiti Plugin, workflow application can be created at your fingertips!

What's New:
  • Upgrade Activiti's jar files and examples to 5.3. Ported the Activiti's examples from JUnit3 to JUnit4.

Find Out More:

Tuesday, March 1, 2011

Looking For Developers Working On Open Source Project In Malaysia

On last Thursday, 24 February 2011 I sent out the following message with subject "Looking for Web Application Developer" to 80 friends of mine who working in IT industry via Facebook Messages:

Hi there,

I am looking for Web Application Developer experienced in JQuery (http://jquery.com/), Subversion (SVN) and optionally server-side technology such as Grails (http://www.grails.org/), PHP, ASP or etc. to work on an open source project.

If you are interested, I can be contacted via e-mail: myemail@mydomain.com or my mobile: +6012 9999 999.

Otherwise, If you know anyone who have the development skills mentioned above included students, junior developers, experience developers or whoever involved in web development or working in IT industry, kindly help me forward this message to them.

Thank you very much.

Best regards,
Chee Kin

Also, I personally contacted 25 people out of 80 via one-to-one instant messaging or phone conversation and managed to get their agreement to help me forward the message to their friends who working in IT industry. Highly appreciation to 25 helpful friends, thank you so much for your support and effort to send out the message.

The same message also published or posted to two popular Malaysia Open Source Developer Communities: jobs-list@lists.foss.org.my (Mailing List) and http://groups.google.com/group/osdcmy-list (Online Group), which pending for approval by moderator at the moment.

Few close friends of mine commented that it is tough to get local developers working on open source project based on common interest and voluntary basis, I tend to agree with their comment. But I insisted to try it out and interested to see how things turn out. We'll see...

Edited on 08 March 2011:
Highly welcome to experience developers below who agreed to join my open source projects:
  1. Eswara from India (based in U.S at the moment), joined the JQuery Form Builder Plugin project.
  2. Liu Chao from Shang Hai, China, joined the JQuery Validation UI Plugin project.
  3. Yang Qing from Beijing, China, joined the JQuery Form Builder Plugin project and Grails Form Builder Plugin project.
Where are you, my dear Malaysian developers?

I'd love to hear your comments for any great ideas on recruiting developers working on open source project.

Tuesday, February 22, 2011

Crossing the Chasm in Me

I am at a cross road now, if you are frequent reader of my blog (Thanks for reading), even the title of my blog is "Thoughts of Customer Development, Entrepreneurship, Project Management and Software Development", many of my blog posts still focus on Software Development topic, I am still very much a product development guy even gone through so many business books.

Is there any thing wrong with product development approach to launch a startup? I think this approach is not wrong, but a very costly approach when things getting ugly. For some products, it taken too long time and need too much efforts (could be few months) even to produce a minimum viable product. By the time you find out that it is not the product customer will pay to use it after customer validation phase, you may running out of iterations even to pivot.

I launched ProcessCanvas.com: A workflow builder that allow you to create online workflow in minutes two months ago to see whether is there enough customers need this kind of product. I launch this product is the result of Scratch My Own Itch, it is the first hand experience I gained over the past two years working as Business Analyst and Solution Consultant. ProcessCanvas.com is targeted to the following customer segments:
  • IT Consultant: Use it as fast prototyping tool to create workflow application demo/prototype.
  • Business Analyst/Business Process (ISO) Consultant: Create production workflow application for their customers.
  • Subject Matter Experts from different industries such as Insurance (Claim Mgmt.), Medical (Case Mgmt.), Customer Service (Help Desk) and Small Business Owner to create the workflow application by themselves.
Sadly tell you that the result of the launch is far from satisfactory (if not crying), I only received two e-mail addresses that interested in production launch of ProcessCanvas.com so far (where the e-mail sign up box is put at the end of process wizard by intention to ensure the user explored and used the tool prior to submit their e-mail address) out of 58 visits tracked by Google Analytics (I think actual visits lesser than 58 if excluding my own visits).

I had invested about 4 weeks to produce the process wizard and introductory screencasts (excluded time spent to produce the Grails Activiti Plugin), since then I invested another 7 weeks to produce the Form Builder plugin which just released version 0.1 on yesterday. It is foreseeable that many more weeks required in development to produce the working minimum viable product that support multi-tenancy and ability to create working workflow application.

I give myself a pause now from continuing time investment into ProcessCanvas.com and step back to review what had I done wrong so far:
  1. Invested too much time and effort to the product before knowing whether the product have market size that big enough to build a business on it. 
  2. Customers may not have the same problems that I faced. Even they faced the same problems, the problems may not pain enough until no choice they have to pay for the product to solve it. Over passionate about the solution without knowing it is real problem to paying customers is a problem by itself.
  3. Do I know how to reach the targeted customers? Frankly speaking, I have no idea besides posting the release news and announcement to the BPM (Business Process Management) community and hanging there (Developer is poor on marketing).
Some questions cracking my mind:
  1. How do I find out a product have big enough market size to build a viable business on it, with the least effort that maximize validated learning?
  2. Is the vision too big and too broad to fit into my goal as Micropreneur?
  3. Is the product too generic? If the answer is yes, how do I find a niche and pivot toward it?
  4. Are these problems worth solving?
  5. Am I targeted the right customer segments?
Next, I need to perform some finding and reading to find out the corrective actions to make the points listed above clear enough to further support my next decisions and actions. If failing is inevitable in my first web startup in order for me to learn, I wish to fail faster and lighter so that I can get over it quickly and start all over again in shorter time.

What do you think? Any feedback is very much appreciated.

    Monday, February 21, 2011

    JQuery and Grails Form Builder Plugin 0.1 Coordinated Released

    I would like to announce the JQuery and Grails Form Builder Plugin 0.1 Coordinated Released. This announcement is for coordinated released of two Grails plugins: JQuery Form Builder Plugin and Grails Form Builder Plugin. JQuery Form Builder Plugin is client-side implementation of the Form Builder using JQuery and JQuery UI libraries, where Grails Form Builder Plugin depends on JQuery Form Builder Plugin and implement server-side of the Form Builder.

    JQuery Form Builder Plugin
    What's New:
    • Initial release of form builder with Plain Text and Single Line Text (Text Box) field
    • Creating online forms that support multilingual (English and Simplified Chinese only)
    • Add field by click or drag and drop
    • Field ordering by drag and drop
    • Ready for server-side integration
    What's Next:
    • Number (Digit & Decimal) and E-mail Address field implementation.
    Find Out More:
    Grails Form Builder Plugin
    What's New: 
    • Same with JQuery Form Builder Plugin with additional two more items below: 
    • Initial release of Form Viewer that consists of list, create, edit and show screen with multilingual support (English and Simplified Chinese only)
    • Tested with Grails 1.2.5, Grails 1.3.6, Tomcat 6.0.29 and MySQL 5.1.41. 
    What's Next:
    • Number (Digit & Decimal) and E-mail Address field implementation
    • In Form Viewer listing screen, support search by non-String property such as Number field
    • Field removal support, especially for non-nullable property/column
    • Improve error handling when form instance not found in FormViewerController
    Find Out More:

    Saturday, February 19, 2011

    Grails Dynamic Domain Class Plugin 0.3 Released - Create domain class on-the-fly

    I would like to announce the Grails Dynamic Domain Class Plugin 0.3 Released.

    The Dynamic Domain Class plugin enabled Grails application to create domain class dynamically when application is running. 


    What's New: 

    • The demo application no longer install automatically. Created install-ddc-demo script to install the demo application manually.

    Find Out More:

    Friday, February 18, 2011

    JQuery Validation UI Plugin 1.2 Released - Client Side Validation without writing JavaScript

    I would like to announce the JQuery Validation UI Plugin 1.2 Released.

    The JQuery Validation UI Plugin will bring Javascript Validator, Remote Constraints, jQuery Validation plugin and qTip (jQuery tooltip plugin) under the same root and deliver comprehensive client-side validation solution.

    What's New:
    • Implemented 3 new custom constraints from jquery validation additional methods: alphanumeric, letterswithbasicpunc and lettersonly. (jqueryValidation.additionalMethods in Config.groovy need to set to true to use these new custom constraints.)

    Find Out More:

    Tuesday, February 8, 2011

    Language Specific Font Support in JQuery Form Builder plugin

    Just completed re-structuring of the plugin to support "Each language can have it's own font family". Please see previous post for reasoning behind. Below is the outcome of Form Settings tab after re-structuring (previous version on the left).

    If you can think of better way to layout the fields of Form Settings tab, I am happy to hear from you!

    Wednesday, February 2, 2011

    The Grails Activiti Plugin 5.2 Released

    I would like to announce the Grails Activiti Plugin 5.2 Released.

    Grails Activiti Plugin was created to integrate Activiti BPM Suite and workflow system to Grails Framework.
    With the Grails Activiti Plugin, workflow application can be created at your fingertips!

    What's New:
    • Update Activiti's jar files to 5.2. 
    • Support disable activiti engine by specify system property -DdisabledActiviti=true. Eg. grails -DdisabledActiviti=true run-app.  
    • Fixed java.lang.NoClassDefFoundError in unit test execution (grails test-app -unit) after the activiti plugin installed.

    Find Out More:

    Tuesday, February 1, 2011

    Typography: Should JQuery Form Builder Plugin Support Font Family By Language?

    Overview
    These few days, there is a pending decision in my mind that need to be made before I continue the development of new field of the JQuery Form Builder Plugin: Single Line Text field. As mentioned in the title of the post:
    Should JQuery Form Builder Plugin support font family by language? Each language has it's own font family.
    The 1.0 release of plugin is targeted to support top 2 languages of the Internet (more can be added later) such as English and Chinese. This decision is crucial as the current implementation of the plugin was support one font family for all languages, if I made up my mind to support each language has it's own font family, I will need to revise the structure of form settings and field settings of the Plain Text field, not a minor restructuring.

    Findings
    As typography is a new topic to me, I goggle it and done some reading. I heard of Google Font API and  WebFont Loader, but I curious to see is there other alternatives. First I found Cufon, then follow by Typeface.js, both of these are great web fonts technology, but they are not suitable for web form use as both technology using HTML5 canvas and VML. Also, Robert has good points why it is not for input components. Nevertheless, you may consider these technologies if you use it for presentation purpose only, you can learn more about these technologies in this discussion: SIFR vs Cufon vs Typeface.js.

    Many thanks to editorial team of LogoTalks written a post related to typography with title "From TypeKit To Google Font API: The Road To Web Fonts" provides great introduction of web fonts. From the post, it was the first time I saw the @font-face CSS rule. After few more rounds of reading, I find out that it is the way to go as it is web standard and supported by browser natively (even not all browsers supported yet). Thanks to Paul done a detail write up about @font-face.

    I can find out where to get or buy web fonts from these two posts: From TypeKit To Google Font API: The Road To Web Fonts and Where to get web fonts. The following are some sites offer free web fonts:
    Conclusion
    From findings above, it is clear to me that JQuery Form Builder Plugin should support font family by language especially Asian languages such as Chinese, Japanese and Korean should use font family different from English. The solution will be Google Font API and WebFont Loader (as it support custom provider, web fonts can be hosted in own server). Thanks to Cedric Dugas written a great introductory post about WebFont Loader. Lastly, thanks to James Brocklehurst created a Web Safe Fonts Cheat Sheet that will be very helpful for later improvement of the font picker plugin. Do you have better solution?

    Thursday, January 27, 2011

    FreeMarker vs. GSP for Dynamic Template Rendering, Revisited.

    First of all, many thanks to valuable comments and inputs given in my previous blog post about this topic, grails forum and stackoverflow.com. Based on your comments and inputs I find out that the benchmarking test can be divided to 3 parts: Template Creation only, Rendering only and Both (Template Creation and Rendering). So, I update the benchmark application to support these 3 types of test. You can see the screen of updated benchmark application below:



    The Result
    Template Creation Rendering Both
    FreeMarker 17,981ms 29,909ms 45,868ms
    GSP In iteration 773, OutOfMemoryError: PermGen space 23,569ms In iteration 669, OutOfMemoryError: PermGen space

    The table above is the results of the test executed in 1000 times. It is clear that GSP is the winner for Rendering, but Template Creation and Both is not comparable as GSP facing OutOfMemoryError.

    So, I re-run the tests  for 500 times, please see the results below:
    Template Creation Rendering Both
    FreeMarker 15,885ms 33,279ms 47,032ms
    GSP 379,783ms 23,346ms 420,874ms

    Edited on 28-Jan-2011:
    • Running Both (Template Creation and Rendering) 500 times in Tomcat 7.0.6, FreeMarker takes 23,291ms and GSP takes 321,801ms.
    • Running Rendering tests 5,000 times using grails prod run-war, FreeMarker takes 177,624ms and GSP takes 142,105ms.
    Edited on 29-Jan-2011:
    • Running Both (Template Creation and Rendering) 5,000 times in Tomcat 7.0.6, FreeMarker takes 174,828ms on first time, and I re-run the same test without restart the Tomcat, it takes 161,724ms. (I did tried to run the test 10,000 times, facing java.lang.OutOfMemoryError: Java heap space in iteration 5,442.)
    How I Run The Benchmark Tests
    I run the benchmarking tests with the following steps:
    1. Start the application using grails prod run-war.
    2. After the application was started, open or refresh the URL http://localhost:8080/freemarker-vs-gsp/benchmark/index in browser.
    3. Click on "Template Creation" link and wait for test completion and shutdown the application. Do the same for remaining links, start from step 1.
    The Environment
    Operating System: Puppy Linux 4.3.1
    JDK:  1.6.0_20
    Grails: 1.3.6
    Plugins: freemarker 0.3 and freemarker-tags 0.5.8
    Processor: Intel Pentium M 1.5GHz
    Memory: 1285MB

    The Configuration
    grails.plugins.freemarkertags = [
       autoImport: false,
       asSharedVariables: true
    ]

    Edited on 29-Jan-2011: defineFunctions configuration no longer supported, so I remove it, with the updated source code below.


    The Source Code
    You can download the complete source code of the benchmark application and run it yourself. If you run the tests, please post the test results under comment section.

    Conclusion
    If your application required dynamic rendering only, go for GSP, otherwise FreeMarker is a better option.

    Wednesday, January 26, 2011

    Request For Comment: JQuery Form Builder Plugin

    The JQuery Form Builder Plugin is the first JQuery plugin created by me. Finally, the first demo of the Form Builder went live and hosted in Google App Engine (GAE) at http://jquery-form-builder-plugin.appspot.com/.


    Please take note that the live demo was tested in Firefox and Google Chrome browser only, if you see some thing odd for the layout and found some issues when running the Form Builder in your browser, please create an issue report included browser version and OS at http://code.google.com/p/jquery-form-builder-plugin/issues/list.

    I would like to seeking your reviews, comments and advices for Design, API and Source Code of the project. Please let's me know if you have more efficient way to do the same thing, let's me learn from you.

    The missing portion of the project is implementation of QUnit test suites, if you have expertise in QUnit, we welcome your contributions and advices.

    You can find out more information about the project at http://code.google.com/p/jquery-form-builder-plugin/

    Lastly, you are invited to join the project discussion forum at http://groups.google.com/group/jquery-form-builder-plugin to tell us what you think about the project.

    Thanks for reading.

    Wednesday, January 12, 2011

    FreeMarker vs. GSP for Dynamic Template Rendering

    I find out that there are two ways in Grails to render dynamic template (String template), using FreeMarker and GSP. FreeMarker support enabled by freemarker plugin and freemarker-tags plugin. Special thanks to Jeff and Daniel creating these plugins, it will be less options for Grails view technology without their contribution. Given two options, I need to perform some micro-benchmarking to find out which one is the appropriate technology for given requirements.


    The Objective
    To evaluate and decide which template engine (FreeMarker or GSP) to use as Form Template of the Grails Form Builder Plugin.


    The Result
    FreeMarker is the winner. By perform rendering 100 times for the same template, GSP need 119,946ms and FreeMarker need approximately 1/4 of GSP, 32,749ms (Surprise? Yes, I am surprised about the performance of FreeMarker over GSP in dynamic template rendering).


    How I Did It 
    The Benchmark Case
    The dynamic template was created based on the following domain class:
    package test_freemarker2

    class Test1 {
        int prop1
        String prop2
        Date prop3
       
        static constraints = { prop2 blank:false }
    }


    The FreeMarker's template rendering code:
    new Template("freemarkerTemplate",
                 new StringReader(freemarkerTemplateCode),
                 freemarkerConfig.configuration)
                .process([test1Instance: test1Instance, flash:flash], out)


    The GSP's template rendering code:
    groovyPagesTemplateEngine.createTemplate(gspTemplateCode, 'gspTemplate').make([test1Instance: test1Instance]).writeTo(out)

    As the template code (freemarkerTemplateCode and gspTemplateCode) was too lengthy, I will not describe it here (You can download the complete source code of the application here to run the benchmark test in your own environment).

    The Benchmark Application
    I run the benchmarking tests with the following steps:
    1. Start the application using grails run-war.
    2. After the application was started, open or refresh the URL http://localhost:8080/freemarker-vs-gsp/benchmark/index in your browser. You will see the following screen:
    3. Click on "FreeMarker" link and wait for test completion and shutdown the application. Do the same for "GSP", start from step 1.
    The Environment
    Operating System: Puppy Linux 4.3.1
    JDK:  1.6.0_20
    Grails: 1.3.6
    Processor: Intel Pentium M 1.5GHz
    Memory: 1285MB

    The Source Code
    You can download the complete source code of the application and run it yourself.

    Conclusion
    Even the winner of this benchmark test is FreeMarker, the benchmark code was written based on my limited knowledge of FreeMarker and GSP. You may have better way to write optimized code than I do, please let's me know if you found a better way.

    Edited on 28 Jun 2012: Please see the part 2 of this post.

      Friday, January 7, 2011

      JQuery Form Builder Plugin Project 0.1 Roadmap

      These few days, I working hard on the JQuery Form Builder Plugin Project and attempt to get it up and running as soon as possible. Finally, I just finished lay the solid foundation for future grow of the project.

      Following tasks have been completed:
      While rushing for this project in the past few days, I realized that I haven't defined proper plan and project target for release 0.1. Let's come out proper roadmap. (Edited on 26-Jan-2011: The project roadmap was revised to have shorter and consistent release cycle, please see the updated roadmap at http://code.google.com/p/jquery-form-builder-plugin/wiki/Roadmap)


      The following two group of fields supported by the JQuery Form Builder Plugin:
      Standard FieldsFancy Fields
      • Single Line Text (Text Box) [0.1]
      • Number (Digit & Decimal) [0.1]
      • E-mail Address [0.1]
      • Web Address [0.1]
      • Multi Line Text (Text Area)
      • Multiple Choice (Radio)
      • Checkboxes
      • File Upload
      • Name
      • Date (Date Picker)
      • Time
      • Phone (International & US) [0.1]
      • Mailing Address
      • Currency
      • Plain Text [0.1]
      • Rich Text (Html Text)

      All fields marked with [0.1] above will be targeted for 0.1 release and developed in the following order:
      • Plain Text (Development Started)
      • Single Line Text
      • Number
      • E-mail Address
      • Web Address
      • Phone
      A picture worth more than thousand words, I have mocked up the following screen so that you can visualize the deliverables of 0.1 release (will be hosted in Google App Engine platform):

      Any feedback is welcome and highly appreciated. You are invited to join the discussion group of the project, tell us what you think, see you there!

      Saturday, January 1, 2011

      Kick Off JQuery Form Builder Plugin Project

      What is Form Builder?
      A GUI or WYSIWYG tool that allowed you to create online forms in web browser without any programming knowledge.

      The project
      The JQuery Form Builder Plugin project is a brand new project that licensed under Apache 2.0 kicked off by me on the first great day of the new year, 1-1-11 that implementing Form Builder as JQuery Plugin and using JQuery UI as widgets.

      The JQuery Form Builder Plugin project implements the front-end of Form Builder, another sister project Grails Form Builder Plugin implements the back-end of Form Builder using Grails Framework. Please take note that the JQuery Form Builder Plugin is back-end natural, you are welcome to implement the back-end of Form Builder using any language, framework and platform you preferred.

      Origin of the project and motivation behind
      Since I kicked off the Grails Form Builder Plugin project 2 months ago, I found an open source JQuery Form Builder which I think likely to meet my project requirements.

      However, when I dig into the codes and attempt to refine it few days ago, I find out that the project have one critical issue: It is not design to support extensibility and modularity. I can see that if I use it as initial code base of Grails Form Builder Plugin's front-end, I will have problem to extend it to support additional widgets and will have hard time to maintain it. That's how the born of JQuery Form Builder Plugin project that intended to solve this issue.

      Nevertheless,  the JQuery Form Builder remained to be very good reference for the JQuery Form Builder Plugin Project. Just drop me a mail if you are interested to join this project.

      Happy New Year 2011!