News

Zigron launches its new website

June 23rd, 2009

Zigron has grown tremendously over the last two years and during this time we have tried our level best to keep our website up-to-date. Keeping the iterative approach in combination with “market driven design” philosophy,we are now launching Zigron’s new website and brand identity.

Zigron has used its successful approach of “Simple , Beautiful and Usable” methodology to design and develop our new website which will cater to a wider range of our ever growing client base and industry verticals.

I will truly appreciate your feedback or suggestions for our new site.

 

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

Google’s Data Center Tour Video

April 7th, 2009

Enjoy the video of Google’s Data Center tour.

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

Zigron at NVTC’s Emerging Business and Entrepreneur Event

March 18th, 2009

photo

On March 17th 2009 Zigron Inc exhibited its services and products at Norther Virginia Technology Council’s Emerging Business and Entrepreneur Event.

The Northern Virginia Technology Council (NVTC) is the membership association for the technology community in Northern Virginia. NVTC has about 1100 member companies representing more than 200,000 employees and Zigron is its memeber.

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

DareMyCompany At Mashable.com

January 1st, 2009

“I absolutely love the idea of DareMyCompany”, says Jennifer Van Grove here on Mashable. She wrote a detailed review of the web app Zigron lately developed after the success of PingMyCompany.

DareMyCompany is a simple tool that lets companies find other companies for different sports and other challenges/competitions. It’s one of it’s kind and has been developed by keeping in mind the importance of entertainment for working people.

Currently the challenges on the site fall under sports category only, but the criteria will be expanded with a lot more locations, and some new features laters.

If you’re also tired of working and or want to show other companies in your area that you’re best at something, just give them a call at DareMyCopmany and prove yourself!

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

Zigron Bar-B-Que Event

December 26th, 2008

This is the best time to visit Pakistan for tourists, reason being the cool weather and well developed public places. To make the best use of this time, Zigron had planned a Bar-B-Que event in Rawal Lake View Park, on December 25th, 2008. The park is the back side of Rawal Lake that is one of the big artificial water reservoirs [covering an area of about 8.8km] in Pakistan.

Being a public holiday, it was a busiest day at the spot with so many people round, and it was good to see such big crowd there, which has previously been seen only in the metropolitan city Karachi. Other than crowd, the much noticeable thing was Lake View itself, all water and water, and then the delicious Bar-B-Que. How much people enjoyed there, can’t be expressed in words, but definitely in pictures below:

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

Will 2009 Be The Year Of iPhone Gaming?

December 24th, 2008

Almost all of us have played a mobile game at least once in lifetime. This fact makes mobile gaming the most active area of mobile content. The question that why people play mobile games may have many answers but a simple answer is simplicity and ease of use of these games, so anyone can play them anywhere. The popularity of mobile games can be analyzed from the fact that, the first question that raised with the launch of iPhone was, “Where are iPhone games?”.

knibbleTechnology has always revolutionized things, especially the entertainment economy. Innovations like touchscreen have renovated the business economy till yet, but it’s just one half, the other and the big one lies in the entertainment economy. iPhone when launched was an innovation in the mobile handsets and sort of threat for the competitors, but since mobile is the industry with a lot of business models associated with it, it’s now having impact on many other areas of economy, especially the marketing industry with ad-funded games and applications. Particularly in gaming, it’s also considered as Nintendo and Sony PSP’s rival, being richer in experience, and providing same sort of game development environment to the developers.  One other reason for the popularity of iPhone is the network gaming experience it gives with simple WiFi connections, that’ll get richer with 3G.

The reason for iPhone to revolutionize the arena of mobile marketing is nothing other than that it’s the best mobile gaming platform as compared to others existing in the market. And, it’s not just the iPhone buzz, instead the facts. According to the stats released by AOL in the mid of 2008, iPhone gamers generate four times of the page views as compared to players with other handsets, i.e. iPhone players have an average session of 21 minutes with 65 page views, while for others an average session is of 11 minutes with 15 page views.

Screen Digest which is a Global Media Market Research firm, reports that by 2012, advertising on mobile will worth $2.79 billion, and ad-funded games download will go upto 60 million per year [Source]. Since it’ll be touchscreen, ruling the mobile gaming world in near future, iPhone sounds to have the major market share. But the reason for iPhone’s lead in the market is not touchscreen only, instead it’s price and it’s popularity among all age groups and from different spheres of life, while other touchscreen handsets are having a target market of business professionals.

All above is my limited research, and m’ sure that iPhone will have lead in mobile gaming in the coming year. I’ll, however, appreciate if I happen to find some twist in this whole scene, with some authentic information.

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

PingMyCompany named as one of the most underrated sites of 2008 by Mashable.com

December 23rd, 2008

Mashable.com recently added Zigron’ s PingMyCompany.com to its list of most underrated websites of 2008.

You can read the the story and the list here on Mashable.com

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

Writing Custom jsf Components

December 17th, 2008

What is JSF

JSF is a server side UI Component based framework for java based web applications. It adapts Component centric approach to develop java web user interfaces, hence simplifying the development. JSF follows the MVC design pattern and creates the manageable separation between the view, application data and logic.

Since the true power of JSF lies in the UI component model and JSF allows us to use prebuilt components or we can build our own, depending on our requirements.

Let’s start with creating a custom component, which would also help us understand who the compoenent model works in jsf.

Writing a Custom JSF Component

Lets start with a simple component which takes the email address as an input.

A component is made up of three main classes

o UIComponent subclass.

o Renderer

o UIComponentTag subclass

First of all we start building a UIComponent subclass, since our component is and input component we would extend this class by javax.faces.component.UIInput.

Here is how our class looks like

public class EmailComponent extends UIInput {

public static final String

EMAIL_FAMILY = “EMAILFAMILY”;

public EmailComponent() {

super();

addValidator(new EmailValidator());

}

public String getFamily() {

return EMAIL_FAMILY;

}

}

The only thing that needs explanation in this class is getFamily() method, this method is used to get the component family which is used to look up the renderer for this component when HTML is to be generated for this component.

addValidator(); is used to make sure that the user enters a valid email address. The EmailValidator class looks like this,

public class EmailValidator implements Validator {

public void validate(FacesContext context,

UIComponent component,

Object value)

throws ValidatorException {

if (null != value) {

if (!(value instanceof String)) {

throw new IllegalArgumentException(

“The value must be a String”);

}

String email = (String) value;

Pattern emailPattern = Pattern

.compile(“[a-z0-9!#$%&'*+/=?^_`{|}~-]+” +

“(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)” +

“*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)” +

“+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?”);

Matcher emailMatcher = emailPattern

.matcher(email);

if (!emailMatcher.matches()) {

throw new ValidatorException(

new FacesMessage(

“Please enter a valid Email Address”));

}

}

}

}

The important thing to know in this validator is if the string does not match the Matcher, then a new FacesMessage is created and a ValidatorException is thrown. JSF will interpret the ValidationException and get the message from it.

Another important thing is, this validator is not part of building a custom component.

We have created a UIComponent Subclass, now next step is to create a renderer, renderer is responsible for turning the component into HTML and taking posted HTML and turning it into values suitable for the component, these processes are also referred as encoding and decoding.

Below is the code for the renderer, I think the comments on the code are explaining it well.

public class EmailRenderer extends Renderer {

//THIS METHOD IS RESPONSIBLE FOR TAKING ANY PARAMETERS THAT WERE PASSED

//IN FROM A FORM POST AND SETTING THE VALUE ON THE COMPONENT

public void decode(FacesContext context,

UIComponent component) {

assertValidInput(context, component);

if (component instanceof UIInput) {

UIInput input = (UIInput) component;

String clientId = input

.getClientId(context);

Map requestMap = context

.getExternalContext()

.getRequestParameterMap();

String newValue = (String) requestMap

.get(clientId);

if (null != newValue) {

input.setSubmittedValue(newValue);

}

}

}

//THIS METHOD IS RESPONSIBLE FOR BUILDING THE HTML TO REPRESENT //THE COMPONENT IN THE BROWSER

//BASICALLY THERE ARE THREE ENCODING METHODS ENCODEBEGIN(), //ENCODECHILDREN() AND ENCODEEND().

//SINCE OUR COMPONENT DOESN’T HAVE ANY CHILDREN WE DON’T NEED //PREVIOUS TWO METHODS.

public void encodeEnd(FacesContext ctx,

UIComponent component) throws IOException {

assertValidInput(ctx, component);

ResponseWriter writer = ctx

.getResponseWriter();

writer.startElement(“input”, component);

writer.writeAttribute(“type”, “text”, “text”);

String id = (String) component

.getClientId(ctx);

writer.writeAttribute(“id”, id, “id”);

writer.writeAttribute(“name”, id, “id”);

String size = (String) component

.getAttributes().get(“size”);

if (null != size) {

writer.writeAttribute(“size”, size, “size”);

}

Object currentValue = getValue(component);

writer.writeAttribute(“value”,

formatValue(currentValue), “value”);

writer.endElement(“input”);

}

protected Object getValue(UIComponent component) {

Object value = null;

if (component instanceof UIInput) {

value = ((UIInput) component)

.getSubmittedValue();

}

// if its not a UIInput or the submitted value

// was null then get the value (it should

// always be a UIInput)

if (null == value

&& component instanceof ValueHolder) {

value = ((ValueHolder) component)

.getValue();

}

return value;

}

private String formatValue(Object currentValue) {

//THIS METHOD SHOULD PERFORM THE CONVERSION NEEDED.IN OUR //CASE WE JUST NEED A STRING.

return currentValue.toString();

}

private void assertValidInput(

FacesContext context, UIComponent component) {

if (context == null) {

throw new NullPointerException(

“context should not be null”);

} else if (component == null) {

throw new NullPointerException(

“component should not be null”);

}

}

}

We are done with the first two classes, now the last class is the subclass of UIComponentTag.

Below is the code for this class

public class EmailInputTag extends UIComponentTag {

private String size;

private String value;

private static final String EMAIL_COMP_TYPE =

“EMAIL_INPUT”;

private static final String EMAIL_RENDER_TYPE =

“EMAIL_RENDERER”;

@Override

public String getComponentType() {

return EMAIL_COMP_TYPE;

}

@Override

public String getRendererType() {

return EMAIL_RENDER_TYPE;

}

protected void setProperties(

UIComponent component) {

FacesContext context = FacesContext

.getCurrentInstance();

super.setProperties(component);

if (null != size) {

component.getAttributes().put(“size”, size);

}

if (null != value) {

if (isValueReference(value)) {

ValueExpression ve= context.getApplication().getExpressionFactory().createValueExpression
(context.getELContext(),
value,String.class);

component.setValueExpression(“value”, ve);

} else {

((UIInput) component).setValue(value);

}

}

}

public String getSize() {

return size;

}

public void setSize(String size) {

this.size = size;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

}

Two important methods here, getComponentType() and getRendererType().

getComponentType() returns the type of the component that should be created by the tag,this type is sent to the factory for the resolution of the class name and then the instance is created,

getRendererType() returns the type of the renderer and the instance is created the same way as mentioned above. These two methods are responsible for making the connection between the renderer and the component.

Now we are done with all the coding now we have to do some configuration, in faces-config.xml file we have to register our custom component with its renderer, like this.

<component>

<component-type>

EMAIL_INPUT

</component-type>

<component-class>

com.zigron.component.EmailComponent

</component-class>

</component>

Note the <component-type> tag, this is the component type we defined in com.zigron.tag.EmailInputTag class.

And the renderer like this,

<render-kit>

<renderer>

<description>

Renderer for the Email Input component.

</description>

<component-family>EMAILFAMILY</component-family>

<renderer-type>

EMAIL_RENDERER

</renderer-type>

<renderer-class>

com.zigron.renderer.EmailRenderer

</renderer-class>

</renderer>

</render-kit>

One more missing piece is a the tld that would define the tag for JSP, I would paste a part of the email.tld here.

<tlib-version>0.01</tlib-version>

<jsp-version>1.2</jsp-version>

<short-name>Email Input Example Component Tag Library</short-name>

<uri>http://www.zigron.com/jsf/component/email</uri>

<description>

This tag library has the tags for the custom jsf component, which is just a simplest example, hence most of the attributes are ignored in this tld

</description>

<tag>

<name>emailInput</name>

<tag-class>com.zigron.tag.EmailInputTag</tag-class>

<body-content>empty</body-content>

<description>

This is the tag for the Email input component.

</description>

<attribute>….</attribute>

…….

</tag>

Now we have to use this tag on JSP, for that we need to import our taglib, with the URI we mentioned in our email.tld, i.e http://www.zigron.com/jsf/component/email

Here is the example JSP code,

<%@taglib prefix=“h”

uri=“http://java.sun.com/jsf/html”%>

<%@taglib prefix=“f”

uri=“http://java.sun.com/jsf/core”%>

<%@taglib prefix=“email”

uri=“http://www.zigron.com/jsf/component/email”%>

<html>

<head>

<title>Custom Email Component</title>

</head>

<body>

<f:view>

<p>

<h:messages id=“messageList” showSummary=“true”/>

</p>

<h:form>

<h:outputLabel for=“test”>

<h:outputText id=“testLabel” value=“Email Address:”/>

</h:outputLabel>

<email:emailInput id=“test” size=“19″

value=#{test.emailAddress}/>

<br/>

<h:commandButton value=“Save”

action=#{test.showEmailAddress}/>

</h:form>

</f:view>

</body>

</html>

In this jsp test is the managed bean registered in faces-config.xml.

Now by combining all the above pieces together our component is now ready to serve.

Just for an over view , here is the step by step explanation

1. The URI prefix is used to find the uri in the tld, (email is the prefix in our example)

2. From the TLD the tag name and class pointing to that tag, under the URI is located, in our case tag name is <name>emailInput</name> in tld and the tag class is <tag-class>com.zigron.tag.EmailInputTag</tag-class>.

3. The getComponentType() method of located tag class(com.zigron.tag.EmailInputTag) is called.

4. The returned value is located in the faces-config.xml file to find out the component class against that component type.( as I mentioned earlier as a Note.)

5. Finally the component class is located from the faces-config.xml.

Download Complete Document Here

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

Mobile Development & Marketing: Current Issues & Challenges

December 11th, 2008

The world is evolving and the trends changing, making the world faster than ever before and technology more stable. With the invention of first pager in 1959 by Motorola, the world started getting mobile. The launch of first commercial mobile phone by NTT in Japan was the next step to stabilize this mobility.

The innovation in this mobility with SMS happened to be originated in Europe in 1985. SMS was a boom in the later part of 1900s and early 2000s, and still it’s the top cellular activity. There’re above 4 billion mobile phone subscribers, with 74% of them using SMS of which 94% of SMSs are read. Just in UK 1.4 billion text messages now being sent every week.

This is just an overview of mobile phones and SMS,  innovations like iPhone, Blackberry, Android and mobile-internet integration are constantly opening the new horizons of excellence for mobile marketing. Web marketing is one of the most cost effective marketing methods with maximum outreach. Since there’re more mobile phone subscribers than that of internet users, so mobile opens broad ways for marketing from small and medium to large businesses.

Mobile-web integrated marketed is still in the process of development, reason being the lack of awareness among most of mobile phone subscribers, i.e. there’re about 10 million users worldwide using GPRS services that makes only about 0.25% of the total subscribers. But, this low percentage doesn’t mean that mobile marketing is not growing. There’re various methods within mobile marketing including SMS Marketing, Ingame Mobile Marketing, Location Based Services etc.

Ingame Mobile Marketing is the fastly growing area and the future of mobile marketing. The reason is that more than 90% of mobile phone subscribers play mobile games. From simple interactive real-time 3D games to massive multi-player and social networking games, mobile gaming is everywhere. This trend is accelerating the growth of mobile 2.0 on one hand and hence the mobile development on other.

Mobile development being the next big thing is now the focus of small, medium and large business, and hence it’s becoming a competitive industry. The competition is becoming tougher as the industry leaders Nokia and Google have moved to opensource, and this situation is critical for ISVs.

ZDNet also reports that, it’ll not be the great UI as only challenge instead, things that matter more are ideas and methodologies. Though ISV’s are more under pressure, but companies will have equal pressure and will have to face almost same challenges. It’ll be the race of collective innovation [what I can term it as] or Product Innovation [combination of innovation in methodologies, design, productivity etc] so, innovation in over all performance will win!

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis

Live Broadcast Of Usability Event From NUST Islamabad

December 1st, 2008

This post will be serving as a live broadcast for our Usability Event which is going to be held tomorrow Tuesday, December 2, 2008. So, please, bookmark it for the live updates. It’ll be great, but a lot depends on the wifi availability there.

A detailed overview of the event will be a part of our post event activity, and live updates will help us gather more and more public opinions. Bloggers/web analysts/user experience gurus/usability geeks are welcomed to blog about it on their blogs and or write us their views.

Feedback will be highly appreciated, so stay tuned!


Follow us at Twitter: http://www.twitter.com/zigron

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • e-mail
  • Live
  • TwitThis