TechnoBuzz

A Techno Blog, mainly about Java

escaping characters

I find that if you are using HTTP GET you will run into a lot of troubles with your url string with characters such as quotes, colons, and others. The way to get around that is to use HTTP POST. But, if you still want to use GET, the best way is to escape the characters.

“URL encoding is the practice of translating unprintable characters or characters with special meaning within URLs to a representation that is unambiguous and universally accepted by web browsers and servers”

Here are a few javascript solutions on how to encode url:

Javascriptwriter: You can convert any string to a URL-encoded string (suitable for transmission as a query string or, generally speaking, as part of a URL) using the JavaScript functions escape,encodeURI and encodeURIComponent.

From an ASP dot net blog  : Understand that in asp.net, virtual path in the URL with colon (:) is not allowed. To solve this problem, i replace the colon (:) with ASCII value for colon : (please check http://www.asciitable.com/)

If you are working with javascript,  it provides a number of functions that encode and decode special characters

MSDN JScript Reference – escape()encodeURI()encodeURIComponent()

Mozilla Developer Core Javascript Guide – escape()encodeURI()encodeURIComponent()

ASCII Table – http://www.asciitable.com/

W3C’s URIs, URLs, and URNs: Clarifications and Recommendations 1.0 – http://www.w3.org/TR/uri-clarification/

Iframe JQuery http://stackoverflow.com/questions/5044210/jquerys-attr-escaping-ampersands, if you are using jQuery 1.6 and up, you want to use .prop() rather than .attr():

One thing to consider:

//import org.apache.commons.lang.StringEscapeUtils;
StringEscapeUtils.escapeJavaScript(out, str)

Documented at :
http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringEscapeUtils.html#escapeJavaScript%28java.lang.String%29

References:

http://www.freeformatter.com/javascript-escape.html#ad-output

 

February 16, 2013 Posted by | Uncategorized | Leave a comment

Beginning iOS

This project i used a storyboard and I added a label and a button to it. I then took the button on the storyboard clicked the control button and held it down into the controller (h file).

This generated code:

@property (weak, nonatomic) IBOutlet UILabel *display;

I then on the storyboard located the button and clicked control button held it down and dragged the link into the controller. This created a method in the controller. I added a print to the method:

#import “RookieViewController.h”

@implementation RookieViewController

@synthesize display;

– (IBAction)buttonDo:(id)sender {

NSLog (@”test”);

}
….

I then modified the above method to change the label on a button click:

– (IBAction)buttonDo:(id)sender {

NSLog (@”test”);

UILabel *label1 = self.display;

NSString *label1text =label1.text;

NSLog(@”the label was %@” ,label1text);

[label1 setText:@”Luke”];

}

RookieAppDelegate.h: define your class as a UI Reponder

@interface RookieAppDelegate : UIResponder

@property (strong, nonatomic) UIWindow *window;

@end

January 27, 2013 Posted by | Uncategorized | | Leave a comment

MVC can you see

link : “With your first glance at Spring MVC 2.5 you have probably noticed that controller methods don’t have to return a ModelAndView anymore.”

link: Some basics in Spring MVC 3 with how to construct a project, additional concepts, form processing, and more in a tutorial series.

link : an overview of Spring MVC which ends with a link to a video on Spring MVC

http://www.captaindebug.com/search/label/MVC

http://www.javavm.net/spring-mvc-controllers/

http://krams915.blogspot.com/2010/12/spring-3-mvc-using-modelattribute-in.html

http://stackoverflow.com/questions/10401402/how-to-share-sessionattributes-between-controllers-in-spring-mvc

http://richardchesterwood.blogspot.com/2011/03/using-sessions-in-spring-mvc-including.html

http://stackoverflow.com/questions/5938951/set-session-variable-spring-mvc-3

http://vard-lokkur.blogspot.com/2011/01/spring-mvc-session-attributes-handling.html

https://github.com/SpringSource/spring-mvc-showcase

https://src.springframework.org/svn/spring-samples/

http://sleeplessinslc.blogspot.com/2012/07/spring-mvc-31-presentation-and-tutorial.html?m=1

 

January 10, 2013 Posted by | Uncategorized, Web Design, Web/Tech | , | Leave a comment

Moving past scriplets

In the early days, while working in JSP files, the approach was to use scriplets to present server side data. Such as

Scriptlet <% code %>
– Code is inserted in service method.

JSP Expression <%= expression %>
– Expression is evaluated and placed in output.

Insert a help message into jsp file
<%
String s3 = new String();
s3 = s3 + “XYZ” ;
out.print(“<!– ” + s3 + ” –>”);
%>

Moreover, to generate javascript inside a JSP, you might do something like:

out.print(“<script>” + “alert” + “(‘” +situation.getValue() + “‘)” + “</script>”);

JSTL technology followed JSP (or even the Struts tag libraries) .

These objects allow for access to any variables that are held in the particular JSP scopes. Objects include:

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

${sessionScope.loginId} will return the session-scoped attribute named LoginId, or null if the attribute is not found.

<c:if test=”${someTest}”> Content</c:if>

<c:set var=”string1″value=”${item.value}” />

< c:out value=”${‘dmb: ‘} ${string1}” escapeXml=”false”/ >

Now, for javascript jstl integration:

var totRec = ‘<fmt:formatNumber type=”number” value=”${myCount}” />’;

 

January 6, 2013 Posted by | Uncategorized | Leave a comment

ioS beginnings part 2

 

Delegate file (h) example:

#import <UIKit/UIKit.h>

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) ViewController *viewController;

@end

Controller File (h) example:

@interface ViewController : UIViewController

 

Change the view controller example in your delegate:

@property (strong, nonatomic) UINavigationController*viewController;

Other choices:

UITableViewController

UIViewController

December 26, 2012 Posted by | Uncategorized | Leave a comment

First Steps into ioS

I had never done any programming in native mobile development with the ioS operating system prior to now. The way i found the Xcode on the iMac was searching the files on computer until i found out about cmd-space and entered xcode in the search box. There was a pdf on the computer named about Xcode 4.2

“Xcode is the complete developer toolset for creating applications for Mac, iPhone, and iPad”

In Xcode, you would start by doing File -> new project  and then single view application and click next where you enter a product name, a company identifier,  device such as iphone or ipad (dont click storyboarding, but click automatic reference counting), and then indicate where project goes and then you will click create.

After XCode loads the new project, you can click run to launch the simulator (or cmd-r).

You will see files AppDelegate.h AppDelegate.m ViewController.h ViewController.m ViewController.xib

Click on the sidebar the AppDelegate.h then on right at top click the tuxedu icon which will display now the AppDelegate.m beside the other file.

@interface AppDelegate : UIResponder <UIApplicationDelegate>

In the editor, if you click the command button the identifiers become URLs

On right side,

[ standard ] [ assistant] [ version ]            [Navigator] [Debug] [Utilities]                                  [open]
editor                                                                 view                                                         organizer

Utilities: toggle panel on right side, Debug : toggle panel on bottom, Navigator: toggle panel on left

bottom utilities:

  • file template library
  • code snippet library
  • Objects
  • Media library

December 23, 2012 Posted by | Uncategorized | Leave a comment

Spring WS template

So what is JAXWS: “Java API For XML Web Services can be thought of as a
Java Programming API to create Web Services. JAXWS was introduced in JAVA SE 5 and
uses Annotations in the creation of end points and service clients. JAXWS 2.0 replaced or
encompassed the JAX-RPC API. For more details on the same look at this developer works article.
JAXWS uses JAXB 2.0 for data binding
Generating proxy classes
JAX-WS provides a tool called wsimport which takes the WSDL of a web service and generates proxy classes for the WSDL’s service and port definitions. These can then be used to access the web service endpoint.

With the help of the JAX-WS Maven plugin the wsimport tool can easily be used in Maven based projects.

he WSDL to be processed can either be fetched directly from the actual web service endpoint or from a local directory (by specifying the wsdlDirectory property as shown in the example). I recommend to stick with the latter approach. That way your project can be built even if the service to be accessed is not available from your development environment.

During the “generate-sources” build lifecycle phase the plugin will generate

  • proxy classes for all service and port type declarations contained within the WSDL files in the specified directory
  • JAXB binding classes for all schema types used in the operations of that services

http://krams915.blogspot.com/2010/12/spring-ws-mvc-implementing-client.html

November 5, 2012 Posted by | Uncategorized | Leave a comment

Soap Client Homemade implementation

The Soap request:

<?xml version=”1.0″ encoding=”utf-8″?>

<soap:Envelope xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221; xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”&gt;
<soap:Body>
<GetInfoByZIP xmlns=”http://www.webserviceX.NET”&gt;
<USZip>27615</USZip>
</GetInfoByZIP>
</soap:Body>
</soap:Envelope>

The java program:

try {
// Set up the Web Service URL and SOAP Message file name
// http://www.webservicex.net/uszip.asmx
// src/exercise1/test.xml

String WebServiceUrl = args[0];
String SOAPFile = args[1];

//Create the connection where we’re going to send the file.
URL url = new URL(WebServiceUrl);
URLConnection connection = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) connection;

//Get the SOAP document ready to send

File f1 = new File(SOAPFile);
String path = f1.getAbsolutePath();
FileInputStream FileIn = new FileInputStream(path);
ByteArrayOutputStream ByteOut = new ByteArrayOutputStream();
byte[] buffer = new byte[256];
while (true) {
int bytesRead = FileIn.read(buffer);
if (bytesRead == -1)
break;
ByteOut.write(buffer, 0, bytesRead);
}

byte[] b = ByteOut.toByteArray();
FileIn.close();

//Set the HTTP parameters.
httpConn.setRequestProperty(“Content-Length”, String.valueOf(b.length));
httpConn.setRequestProperty(“Content-Type”, “text/xml; charset=utf-8”);
httpConn.setRequestProperty(
“Accept”,
“application/soap+xml, application/dime, multipart/related, text/*”);
httpConn.setRequestProperty(“User-Agent”, “WSAD”);
httpConn.setRequestProperty(“Host”, “localhost”);
httpConn.setRequestProperty(“Cache-Control”, “no-chache”);
httpConn.setRequestProperty(“Pragma”, “no-chache”);
httpConn.setRequestProperty(“SOAPAction”, “http://www.webserviceX.NET/GetInfoByZIP&#8221;);
httpConn.setRequestMethod(“POST”);
httpConn.setDoOutput(true);
httpConn.setDoInput(true);

//Send XML File
OutputStream out = httpConn.getOutputStream();
out.write(b);
out.close();

//Get the response
InputStreamReader isr = new InputStreamReader(httpConn.getInputStream());
BufferedReader in = new BufferedReader(isr);

String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();

} catch (Exception e) {
System.out.println(“FaultString: ” + e.toString());
return;
} //end exception
}

Response:

<?xml version=”1.0″ encoding=”utf-8″?><soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”><soap:Body><GetInfoByZIPResponse xmlns=”http://www.webserviceX.NET”><GetInfoByZIPResult><NewDataSet xmlns=””><Table><CITY>Raleigh</CITY><STATE>NC</STATE><ZIP>27615</ZIP><AREA_CODE>919</AREA_CODE><TIME_ZONE>E</TIME_ZONE></Table></NewDataSet></GetInfoByZIPResult></GetInfoByZIPResponse></soap:Body></soap:Envelope>

October 21, 2012 Posted by | Uncategorized | Leave a comment

Soap Web Services Begin To End Part 3

Using the WSDL in Part 2, right click on it in the sidebar:

WebService -> Generate Java Bean Skeleton

Again move the notch up to  Test Service  and click Next until it completes

Then, you will see in src folder all the generated files.

This completes the Producer  side of the web service.

Now, to generate a client side, you generate a new dynamic project (i.e. Call it MyClientProject).  After the dynamic project is complete, you can go into the Producer project, and get the wsdl and place it in the new Client project. Right click on the WSDL, click WebService -> Generate Client.

 

http://localhost:8080/MyClientProject/sampleCostServiceProxy/TestClient.jsp

 

October 21, 2012 Posted by | Uncategorized | Leave a comment

Soap Web Services Begin To End Part 2

Create a Dynamic Web project in eclipse. In my case I called it NumbersService.

Create a new class :
learn.webservices.numbers.ElectricCompanyService :

public class ElectricCompanyService {

public int multiply(int number1, int number2)
{
return number1 * number2;
}

public int add(int number1, int number2)
{
return number1 – number2;
}

}

Right click in the siderbar on ElectricCompanyService

WebService-> Create Web Service

On the screen that comes up, move the selector up one notch where it shows Test Service

In Web Content you can find a folder named WSDL with the WSDL file

<?xml version=”1.0″ encoding=”UTF-8″?>
<wsdl:definitions targetNamespace=”http://numbers.webservices.learn&#8221; xmlns:apachesoap=”http://xml.apache.org/xml-soap&#8221; xmlns:impl=”http://numbers.webservices.learn&#8221; xmlns:intf=”http://numbers.webservices.learn&#8221; xmlns:wsdl=”http://schemas.xmlsoap.org/wsdl/&#8221; xmlns:wsdlsoap=”http://schemas.xmlsoap.org/wsdl/soap/&#8221; xmlns:xsd=”http://www.w3.org/2001/XMLSchema”&gt;
<!–WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)–>
<wsdl:types>
<schema elementFormDefault=”qualified” targetNamespace=”http://numbers.webservices.learn&#8221; xmlns=”http://www.w3.org/2001/XMLSchema”&gt;
<element name=”add”>
<complexType>
<sequence>
<element name=”number1″ type=”xsd:int”/>
<element name=”number2″ type=”xsd:int”/>
</sequence>
</complexType>
</element>
<element name=”addResponse”>
<complexType>
<sequence>
<element name=”addReturn” type=”xsd:int”/>
</sequence>
</complexType>
</element>
<element name=”multiply”>
<complexType>
<sequence>
<element name=”number1″ type=”xsd:int”/>
<element name=”number2″ type=”xsd:int”/>
</sequence>
</complexType>
</element>
<element name=”multiplyResponse”>
<complexType>
<sequence>
<element name=”multiplyReturn” type=”xsd:int”/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>

<wsdl:message name=”multiplyResponse”>

<wsdl:part element=”impl:multiplyResponse” name=”parameters”>

</wsdl:part>

</wsdl:message>

<wsdl:message name=”multiplyRequest”>

<wsdl:part element=”impl:multiply” name=”parameters”>

</wsdl:part>

</wsdl:message>

<wsdl:message name=”addResponse”>

<wsdl:part element=”impl:addResponse” name=”parameters”>

</wsdl:part>

</wsdl:message>

<wsdl:message name=”addRequest”>

<wsdl:part element=”impl:add” name=”parameters”>

</wsdl:part>

</wsdl:message>

<wsdl:portType name=”ElectricCompanyService”>

<wsdl:operation name=”add”>

<wsdl:input message=”impl:addRequest” name=”addRequest”>

</wsdl:input>

<wsdl:output message=”impl:addResponse” name=”addResponse”>

</wsdl:output>

</wsdl:operation>

<wsdl:operation name=”multiply”>

<wsdl:input message=”impl:multiplyRequest” name=”multiplyRequest”>

</wsdl:input>

<wsdl:output message=”impl:multiplyResponse” name=”multiplyResponse”>

</wsdl:output>

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name=”ElectricCompanyServiceSoapBinding” type=”impl:ElectricCompanyService”>

<wsdlsoap:binding style=”document” transport=”http://schemas.xmlsoap.org/soap/http”/&gt;

<wsdl:operation name=”add”>

<wsdlsoap:operation soapAction=””/>

<wsdl:input name=”addRequest”>

<wsdlsoap:body use=”literal”/>

</wsdl:input>

<wsdl:output name=”addResponse”>

<wsdlsoap:body use=”literal”/>

</wsdl:output>

</wsdl:operation>

<wsdl:operation name=”multiply”>

<wsdlsoap:operation soapAction=””/>

<wsdl:input name=”multiplyRequest”>

<wsdlsoap:body use=”literal”/>

</wsdl:input>

<wsdl:output name=”multiplyResponse”>

<wsdlsoap:body use=”literal”/>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name=”ElectricCompanyServiceService”>

<wsdl:port binding=”impl:ElectricCompanyServiceSoapBinding” name=”ElectricCompanyService”>

<wsdlsoap:address location=”http://localhost:8080/NumbersService/services/ElectricCompanyService”/&gt;

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

:

October 21, 2012 Posted by | Uncategorized | Leave a comment

Soap Web Services Begin To End Part I

Step 1 : Open Web Perspective -> Web Services Explorer




Launch Web services explorer:


Select WSDL page (next to star on right):


Enter the SDL URL : http://www.webservicex.net/stockquote.asmx?WSDL

Choose Soap enter stock quote and Go!

<soapenv:Envelope xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:q0=”http://www.webserviceX.NET/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>

<soapenv:Body>

<q0:GetQuote>

  <q0:symbol>IBM</q0:symbol>

  </q0:GetQuote>

  </soapenv:Body>

  </soapenv:Envelope>

<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>

<soap:Body>

<GetQuoteResponse xmlns=”http://www.webserviceX.NET/“>

  <GetQuoteResult><StockQuotes><Stock><Symbol>IBM</Symbol><Last>193.36</Last><Date>10/19/2012</Date><Time>4:03pm</Time><Change>-1.60</Change><Open>195.12</Open><High>196.08</High><Low>193.18</Low><Volume>6621563</Volume><MktCap>219.9B</MktCap><PreviousClose>194.96</PreviousClose><PercentageChange>-0.82%</PercentageChange><AnnRange>177.06 – 211.79</AnnRange><Earns>13.913</Earns><P-E>14.01</P-E><Name>International Bus</Name></Stock></StockQuotes></GetQuoteResult>

  </GetQuoteResponse>

  </soap:Body>

  </soap:Envelope>


Here is a WSDL for Mortgage  payments calculation:

http://www.webservicex.net/mortgage.asmx?WSDL

October 21, 2012 Posted by | Uncategorized | Leave a comment

Spring Web Services

Contract First Web Services tutorial: When using contract-first, you start with the WSDL contract, and use Java to implement said contract.  Spring-WS only supports the contract-first development style.

3.5. Creating the project

src/main/webapp/WEB-INF/

spring-ws-servlet.html

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans&#8221;
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xmlns:context=”http://www.springframework.org/schema/context&#8221;
xmlns:sws=”http://www.springframework.org/schema/web-services&#8221;
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd”&gt;

<sws:annotation-driven/>
</beans>

a) add this line to above file <context:component-scan base-package=”com.mycompany.hr”/>

b) Create java package com.mycompany.hr.ws

web.xml:

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app xmlns=”http://java.sun.com/xml/ns/j2ee&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&#8221;
version=”2.4″>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

Spring-WS, you will implement Endpoints to handle incoming XML messages. An endpoint is typically created by annotating a class with the @Endpoint annotation.

you will create one or more methods that handle incoming request.

3.6.1. Handling the XML Message

use JDom to handle the XML message. We are also using XPath, because it allows us to select particular parts of the XML JDOM tree,

New class HolidayEndpoint

package com.mycompany.hr.ws;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import com.mycompany.hr.service.HumanResourceService;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.xpath.XPath;

@Endpoint                                                                                
public class HolidayEndpoint {

private static final String NAMESPACE_URI = “http://mycompany.com/hr/schemas&#8221;;

//The HolidayEndpoint requires the HumanResourceService business service to operate, so we inject the dependency via the constructor and annotate it with @Autowired

@Autowired
public HolidayEndpoint(HumanResourceService humanResourceService)
throws JDOMException {
this.humanResourceService = humanResourceService;
Namespace namespace = Namespace.getNamespace(“hr”, NAMESPACE_URI);
startDateExpression = XPath.newInstance(“//hr:StartDate”);
startDateExpression.addNamespace(namespace);
endDateExpression = XPath.newInstance(“//hr:EndDate”);
endDateExpression.addNamespace(namespace);
nameExpression = XPath.newInstance(“concat(//hr:FirstName,’ ‘,//hr:LastName)”);
nameExpression.addNamespace(namespace);
}

//The @PayloadRoot annotation tells Spring-WS that the handleHolidayRequest method is suitable for handling XML messages.
//In this case, it can handle XML elements that have the HolidayRequest local part and the http://mycompany.com/hr/schemas namespace
//gets passed with the <HolidayRequest/> element from the incoming XML message.
// The @RequestPayload annotation indicates that the holidayRequest parameter should be mapped to the payload of the request message

@PayloadRoot(namespace = NAMESPACE_URI, localPart = “HolidayRequest”)         
public void handleHolidayRequest(@RequestPayload Element holidayRequest)
throws Exception {
SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
Date startDate = dateFormat.parse(startDateExpression.valueOf(holidayRequest));
Date endDate = dateFormat.parse(endDateExpression.valueOf(holidayRequest));
String name = nameExpression.valueOf(holidayRequest);
humanResourceService.bookHoliday(startDate, endDate, name);
}

We skipped the Schema and WSDL, but they follow here (Note that Spring WS will create the WSDL, but here it is for getting to know it):

Schema………………………………………………………………………………………..
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema&#8221;
xmlns:hr=”http://mycompany.com/hr/schemas&#8221;
elementFormDefault=”qualified”
targetNamespace=”http://mycompany.com/hr/schemas”&gt;
<xs:element name=”HolidayRequest”>
<xs:complexType>
<xs:all>
<xs:element name=”Holiday” type=”hr:HolidayType”/>
<xs:element name=”Employee” type=”hr:EmployeeType”/>
</xs:all>
</xs:complexType>
</xs:element>
<xs:complexType name=”HolidayType”>
<xs:sequence>
<xs:element name=”StartDate” type=”xs:date”/>
<xs:element name=”EndDate” type=”xs:date”/>
</xs:sequence>
</xs:complexType>
<xs:complexType name=”EmployeeType”>
<xs:sequence>
<xs:element name=”Number” type=”xs:integer”/>
<xs:element name=”FirstName” type=”xs:string”/>
<xs:element name=”LastName” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
</xs:schema>

Note: Save this schema as hr.xsd in WEB-INF

WSDL………………………………………………………………………..
<wsdl:definitions xmlns:wsdl=”http://schemas.xmlsoap.org/wsdl/&#8221;
xmlns:soap=”http://schemas.xmlsoap.org/wsdl/soap/&#8221;
xmlns:schema=”http://mycompany.com/hr/schemas&#8221;
xmlns:tns=”http://mycompany.com/hr/definitions&#8221;
targetNamespace=”http://mycompany.com/hr/definitions”&gt;
<!–SCHEMA REFERENCE–>
<wsdl:types>
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”&gt;
<xsd:import namespace=”http://mycompany.com/hr/schemas&#8221;

schemaLocation=”hr.xsd”/>
</xsd:schema>
</wsdl:types>

<!–MESSAGE HolidayRequest–>
<wsdl:message name=”HolidayRequest”>
<wsdl:part element=”schema:HolidayRequest” name=”HolidayRequest”/>
</wsdl:message>
<!–MESSAGE Holiday Request to port type Human Resource as operation–>
<wsdl:portType name=”HumanResource”>
<wsdl:operation name=”Holiday”>
<wsdl:input message=”tns:HolidayRequest” name=”HolidayRequest”/>

                  </wsdl:operation>

       </wsdl:portType>

<!-Binding which tells the client how to invoke the operations just defined and service which tells where to invoke it->

<wsdl:binding name=”HumanResourceBinding” type=”tns:HumanResource”>
<soap:binding style=”document”
transport=”http://schemas.xmlsoap.org/soap/http”/&gt;
<wsdl:operation name=”Holiday”>
<soap:operation soapAction=”http://mycompany.com/RequestHoliday”/&gt;
<wsdl:input name=”HolidayRequest”>
<soap:body use=”literal”/>
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name=”HumanResourceService”>
<wsdl:port binding=”tns:HumanResourceBinding” name=”HumanResourcePort”>

<soap:address location=”http://localhost:8080/holidayService/”/&gt;
</wsdl:port>
</wsdl:service>

</wsdl:definitions>

To generate the WSDL by spring ws add the following to spring-ws-servlet.html:

<sws:dynamic-wsdl id=”holiday”
portTypeName=”HumanResource”
locationUri=”/holidayService/”
targetNamespace=”http://mycompany.com/hr/definitions”&gt;
<sws:xsd location=”/WEB-INF/hr.xsd”/>
</sws:dynamic-wsdl>

The web.xml file is modified as follows:

<servlet>
<servlet-name>spring-ws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
  <param-value>true</param-value>
</init-param>
</servlet>

http://localhost:8080/holidayService/holiday.wsdl

http://static.springsource.org/spring-ws/sites/2.0/faq.html

http://www.springbyexample.org/examples/simple-spring-web-services.html

Spring WS+JAXB

Reference to JAXB Plugin

http://aigloss.blogspot.com/2011/07/creating-spring-web-services-with.html?m=1

http://krams915.blogspot.com/2010/12/spring-ws-2-and-spring-3-mvc.html?m=1

http://javaclue.blogspot.com/2012/05/soap-web-service-using-spring-ws-20.html?m=1

http://www.disasterarea.co.uk/blog/?tag=spring-ws

September 19, 2012 Posted by | Uncategorized | Leave a comment

Twitter bs (Bootstrap)

what-is-bootstrap “is an open-source Javascript framework developed by the team at Twitter. It is a combination of HTML, CSS, and Javascript code designed to help build user interface components. Bootstrap was also programmed to support both HTML5 and CSS3.”

<script src=”js/bootstrap-transition.js”></script>
<script src=”js/bootstrap-alert.js”></script>
<script src=”js/bootstrap-modal.js”></script>
<script src=”js/bootstrap-dropdown.js”></script>
<script src=”js/bootstrap-scrollspy.js”></script>
<script src=”js/bootstrap-tab.js”></script>
<script src=”js/bootstrap-tooltip.js”></script>
<script src=”js/bootstrap-popover.js”></script>
<script src=”js/bootstrap-button.js”></script>
<script src=”js/bootstrap-collapse.js”></script>
<script src=”js/bootstrap-carousel.js”></script>
<script src=”js/bootstrap-typeahead.js”></script>

or

<script src=”js/bootstrap.min.js”></script>

Style code:

< link href=”css/bootstrap.css” rel=”stylesheet” >

< link href=”css/bootstrap-responsive.css” rel=”stylesheet” >

 

bootstrap and less css “At its core, Bootstrap is just CSS, but it’s built with Less, a flexible pre-processor that offers much more power and flexibility than regular CSS. With Less, we gain a range of features like nested declarations, variables, mixins, operations, and color functions.”

http://tuts.wtfdiary.com/2012/07/bootstrap-tutorial-to-design-blog.html  : “top navigation bar, DropDown Menu in the navigation bar, Search Box too in the navigation bar

http://www.mrgeek.me/technology/tutorials/web-design/getting-started-with-bootstrap-part-1-of-series/ : ” the grid system allows you to quickly create a design by calling the required classes, which are pre-written for you in the stylesheet provided with Bootstrap. This doesn’t mean you don’t have to write a line of CSS ever again, but it certainly means you won’t have to write much of the CSS as far as design the skeleton of the web page is concerned”

http://roy-barber.co.uk/bootstrap/

LESS extends CSS with dynamic behavior such as variables, mixins, operations and functions.

More references:

September 17, 2012 Posted by | Uncategorized | Leave a comment

iPhone5 w iOS6 launch

Wow factor? 4 ” screen, 4G LTE, new chargers needed, sleeker, no wireless charging, no NFC Wallet, A6. Sold 20x faster

Meanwhile, that new dock connector was so thoroughly leaked that it’s unlikely to put the wind up the burgeoning “appcessories” industry (yes, a word used seriously by real companies).

The Dev Centerhttps://developer.apple.com/technologies/ios6/

http://techcrunch.com/2012/09/12/the-loops-jim-dalrymple-apple-got-a-decade-head-start-on-most-people/

Very lightweight, more usable real estate, can operate with one hand, panoramic effect on side vertical view, fits in pocket

sweet spot on market with one device, upgraded components , a6, re-engineering camera, smaller camera, LTE,

Apple chose no NFC for now or step fwd on mobile payment system – punted for now. New passbook

iOS6 – developer pure performance, console quality graphics, google kicked out of platform, Map stuff is apple and google data is gone when upgraded, apple video instead of youtube.

iphone launch

Apple is not and will not change things just for the sake of change. And while some may now be clamoring for this change, the paradox is that if Apple did make some big changes, many of the same people would bitch and moan about them

 

September 15, 2012 Posted by | Uncategorized | Leave a comment

FOUC! (Flash of Unstyled Content)

It occurs when applying styles with JavaScript on page load.

The problem is most evident when there is some content that needs to be hidden initially and when the document is large or complex.

< ul id=”flash” >

In the On Ready function , you would apply :

$ (‘#flash’).hide();

A whole lot of document that has to be ready before anything inside the ready() function can be executed.

Putting the tags just inside the closing  body tag doesn’t help either

http://www.learningjquery.com/2008/10/1-way-to-avoid-the-flash-of-unstyled-content

September 10, 2012 Posted by | Uncategorized | , | Leave a comment

Fluff 2012 August Notes on Next Gen Framework

Framework worth a look Spring Social

@Habuma : “Need to fix it if you don’t  know JS ”

spinejs , spine mobile : based on coffee script http://www.coffeescriptlove.com/2011/11/why-is-spine-in-coffeescript.html

– tool to generate a project spine.app

– spine mobile GFX library under covers

web hosting – cloudfoundry , red hat open shift

oauth2 – mention of harsh comments by http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/

zepto a jquery like library for mobile, jquery good beacuse it handles all browser types

Next-Gen “Stack”:

Database : Neo4j with Spring Data
REST API : Spring MVC
OAuth 2 : Spring Security for OAuth
Client : Spine.js and Spine Mobile
Mobile : PhoneGap/Apache Cordova

Asked him about knockoutjs and said it was great for data binding but you need to pair it with a routing js framework.

September 4, 2012 Posted by | Uncategorized | Leave a comment

Knockout Custom Bindings

I am continuing to work with KnockoutJs and I noticed a few examples that use custom bindings. This post does a great overview:

Knockout bindings consist of two methods: init and update. Creating a binding is as simple as creating an object with these two methods..

ko.bindingHandlers.yourBindingName = {
  init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
  },
  update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
  }
};

The init function – This is usually used to run one-time initialization code or to wire up event handlers …

The update function – provides a way to respond when associated observables are modified….

don’t actually have to provide both init and update callbacks ….

The element parameter – the DOM element that contains the binding…

The valueAccessor parameter – function that gives you access to what was passed to the binding. If you passed an observable, then the result of this function will be that observable (not the value of it). If you used an expression in the binding, then the result of the valueAccessor will be the result of the expression.

The allBindingsAccessor parameter – just a way to pass additional options to the binding, unless you choose to pass an object with multiple properties into your main binding.

The viewModel parameter – provides access to your overall view model for bindings outside of templates.  Most of the time the valueAccessor will give you the data that you want, but the viewModel parameter is particularly useful if you need an object to be your target when you call/apply functions.

ko.bindingHandlers.jqTabs = {
init: function(element, valueAccessor) {
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).tabs(“destroy”);
});
},
update: function(element, valueAccessor, allBindingsAccessor) {
var dependency = ko.utils.unwrapObservable(valueAccessor()), //just to create a dependency
options = allBindingsAccessor().jqTabOptions || {}, //any additional options
selected = $(element).tabs(“option”, “selected”);  //restore selected index

//do in a setTimeout, as the DOM elements are not built yet when we are using bindings to create them
setTimeout(function() {
$(element).tabs(“destroy”).tabs(options).tabs(“option”, “selected”, selected);
}, 0);
}
};

August 22, 2012 Posted by | Uncategorized | | Leave a comment

JQueryUI Tab – The Uncola

Lets say you are using knockoutjs , so your tabs might look something like this in your form data.

< div id=”tabs” data-bind=”jqTabs: { fx: { opacity: ‘toggle’ } }”>
< ul>
{{each tabs}}
< ul>
< li>< a href=”#tab-${id}” data-bind=”click: function(event,ui) {$root.ClickedTab(event,ui);}”>${title}
< /li>< /ul>

Handling the screen interaction is what I am interested in.

Such as the Tab  events.  Getting what was selected .

The  JQueryUI tabs documentation  lists Methods , EventsOptions

For example, under methods,

tabsselect, tabsload, tabsadd

selected: Get or set the selected option, after init.-
var selected = $( ".selector" ).tabs( "option", "selected" );
$('#tabs').tabs("option", "selected")
$('#tabs').data()

$('#tabs').tabs({
        selected: selection.parent().index(),
    });
 

As well the live demos under contents feature information :

Events

A series of events fire when interacting with a tabs interface:

  • tabsselect, tabsload, tabsshow (in that order)
  • tabsadd, tabsremove
  • tabsenable, tabsdisable

Event binding example:

$('#example').bind('tabsselect', function(event, ui) {

    // Objects available in the function context:
    ui.tab     // anchor element of the selected (clicked) tab
    ui.panel   // element, that contains the selected/clicked tab contents
    ui.index   // zero-based index of the selected (clicked) tab

});

tab fiddle  , tab jsbin , tabs stackoverflow

August 15, 2012 Posted by | Uncategorized | , | Leave a comment

Knockout Templating

I am in middle of the use of conditional rendering with knockout.  There are some good articles out there on the use of templates.

http://www.akhildeshpande.com/2012/04/knockout-data-bindings-and-templates.html

http://www.strathweb.com/2012/08/knockout-js-pro-tips-working-with-templates/

http://blog.evereq.com/blog/index.php/2012/03/conditional-template-rendering-with-knockoutjs/

http://www.knockmeout.net/2011/03/quick-tip-dynamically-changing.html

August 10, 2012 Posted by | Uncategorized | | Leave a comment

Knockout Nuggets

1) Send an event on some screen action

Form:

< input type=”button” id=”Button1″ value=”Create My Event” data-bind=”event: { click:createGreatEvent } ” />

Model:

this.createGreatEvent = handleReset;

function handleReset() { alert event(‘Yay’);}

2) Display Label from model

Form:

< label data-bind=”text: myLabel()”>

Model:

this.myLabel = ko.observable(“”);

this.myLabel(“Yay”);

3) Bind to typical form objects

Form:
< tr>
< td data-bind=”with:myObj” >
< textarea size=70 id=’myTextVal’ rows=5 cols=100 data-bind=”value:$data.text” />
< /td>< /tr>
< tr>

< td data-bind=”with:myObj” >
< input type=’checkbox’ id=’displayByDefault’ data-bind=”checked: $data.awesome == ‘Y’ ” />
< /td>< /tr>

< td >
< select id=’questionTypeVal’ data-bind=”options:typeItems, optionsText: ‘text’, value: selectedType, event: {change: changedTypeEvent} ”

</select>
</td>
< /select>
< /td>
Model:

this.myObj = ko.observable(“”);

this.myObj = new Obj(”, ”, ”, ”, ”, ‘N’, ”, ”, ”, ‘Y’);

this.typeItems = ko.observableArray();

// choice list selected

this.selectedType = ko.observable();

this.typeItems.push(new OptionObj(“Text”, “Text Box”));
this.typeItems.push(new OptionObj(“TextArea”, “Text Area”));
this.typeItems.push(new OptionObj(“Date”, “Date”));

this.changedTypeEvent = handleTypeChoice;

function handleTypeChoice() {

if (this.selectedType() != null) {

var type = this.selectedType().id;

}}

4) Conditional Rendering with Templates

Model:

this.SetupQuestions = ko.observableArray();

this.templateToUse = function (item) {

var templateName;

if (item.type == “Text”) {
templateName = “temp1”;
}
else if (item.type == “TextArea”) {
templateName = “temp2”;
}

return templateName;
}

var myViewModel = new myProject();

ko.applyBindings(myViewModel);

myViewModel.SetupQuestions.push({

“myId”: “50001”,
“type”: “Text”
});

myViewModel.SetupQuestions.push({
“myId”: “50002”,
“type”: “TextArea”
});

Form:
< script type=”text/html” id=”temp1″>

< span data-bind=”template: { name: ‘QuestionAnswerChildTemplate’, data: $data }”>< /span>
< /script>

< script type=”text/html” id=”temp2″>

< span data-bind=”template: { name: ‘QuestionAnswerChildTemplate2′, data: $data }”>

< /span>

< /script>

< script type=”text/html” id=”QuestionAnswerChildTemplate”>
< input data-bind=”value : AnswerVal” />
< /script>

< script type=”text/html” id=”QuestionAnswerChildTemplate2″>

< textarea size=70 id=’questionTextVal’ rows=5 cols=100 data-bind=”value : AnswerVal” />
< /script>

< table >
< tbody data-bind=”template: { name: templateToUse, foreach: SetupQuestions }”>< /tbody>
< /table>

August 7, 2012 Posted by | Uncategorized | | Leave a comment

Knockout webosphere

1) Decoupling with Knockoutjs [pluralsight]

2) Knockout js shootout vs other js libraries [  screencast.]

3) data-*

4) Knockout.Unobtrusive

5) Cleaning up knockout

6) Knockout with jSON [1]

7) ESPN api with Knockout  [arrays]

8) Knockout built in binding types

9) Conditional rendering [1]  [2] [3]

10) wiki

August 4, 2012 Posted by | Uncategorized | Leave a comment

GitHubba

I first heard of GitHub (what is GitHub anyway? ) several years ago at the NoFluffJustStuff conference. After the conference I set up an account (technobuzz is a member since Sep 03, 2010) , allthough I have not made much use of it.

https://help.github.com/

http://git-scm.com/doc/

http://git-scm.com/documentation/book

Also, in PhoneGap  they show you how to get started with Git bash .

I am using Aptana Studio which shows you a little about Git use and it comes with the tool/plugin.

http://pressedweb.com/tutorials/how-to-use-github-part-1/

– Some git hub resources

– git man pages

set up git

C:\Program Files (x86)\Git\bin\ssh>ssh-keygen -t rsa -C “yagottabelieve@gmail.co
m”
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/xyz/.ssh/id_rsa):
Created directory ‘/c/Users/xyz/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/xyz/.ssh/id_rsa.
Your public key has been saved in /c/Users/xyz/.ssh/id_rsa.pub.
The key fingerprint is:
b2:f8:32:17:e1:ea:41:61:7b:79:39:b1:a0:55:88:4a xyz@gmail.com

https://github.com/settings/profile

go to .ssh dir and get text of pub key

C:\Users\xyz\.ssh>type id_rsa.pub

paste it into github ssh (https://github.com/settings/ssh)

Test out key:
C:\Users\xyz\.ssh>ssh -T git@github.com

C:\Users\xyz\.ssh>git config –global user.name “Dave-o”

C:\Users\xyz\.ssh>git config –global user.email “xyz@gmail.com”

GitHub for Windows includes this helper, and provides a git shell so you don’t need to install and configure git manually

cd c:\wamp\www\jquery

git init

git status

git add file1.txt

git commit – m “add test file ”

git remote add orgin git@github.com:technobuzz/jquery.git

git pull orgin master

git push  orgin master

https://help.github.com/articles/fork-a-repo

July 22, 2012 Posted by | Uncategorized | Leave a comment

Knockout jQuery Binding and Visibility

Reading more on Knockout js

Here is the panel we will enable or disable:

< div id=”optionalPanel” style=”color: red;” data-bind=”visible:isEnabled”>The following is an example div</div>

Here we have a button that sends an event when it is clicked

< input type=”button” id=”Button1″ value=”My Button” data-bind=”event: { click:buttonEvent } ” /> 

Here is what the associated binding  (javascript) looks like:

function viewModel() {
   var self = this;

    myValues = ko.observableArray([]);

    this.isEnabled = ko.computed(function () {   return myValues().length > 0;  }    );

    // Here when er receive event we enable div tag by making size of myValues greater than zero

    buttonEvent = function (selectedSection, userAction) { myValues.push(“some value”);   };

};

//Must apply a model to bindings
ko.applyBindings(new viewModel());

The documentation for this example (also an example with booleans).

Likewise, here is an example of using anonymous function in html to reference the javscript bindings.

A  dropdown  binding example

More binding techniques

Site point series : 1 2 3

special comments for “if” binding

select list  example (i.e. picklist) , alternate select list example

July 21, 2012 Posted by | Uncategorized | , | Leave a comment

Knockout jQuery

In the GWT ecosystem , the Model View Presenter (MVP) pattern is the architecture of choice. However, the model requires some special capabilities when  dealing with the state (i.e. what the user did should force some special visibility rules).

In MVP the model typically refers to just the domain objects that will be displayed, things like a Customer, Contact or Account. From a Presentation Model perspective the term model encompasses the domain data plus all additional state that can change during the normal operation of the UI.

Likewise, pure javascript libraries have to deal with these type of issues too. They have a name for the MVP + (Editors/Pectin) pattern.  Its called MVVM.

Model–View-ViewModel talks of creating a new model (in addition to your domain model). This model normally adds additonal properties from the prespective of View (as we understand that View has controls in addition to data which it’s displaying).

Knockout  handles data binding :  “Any time you have sections of UI that update dynamically (e.g., changing depending on the user’s actions or when an external data source changes)”.

A simple example always explains it best.

The ViewModel can be considered a specialized Controller that acts as a data converter. It changes Model information into View information, passing commands from the View to the Model.

For example, let us imagine that we have a model containing a date attribute in unix format (e.g 1333832407). Rather than our models being aware of a user’s view of the date (e.g 04/07/2012 @ 5:00pm), where it would be necessary to convert the address to it’s display format, our model simply holds the raw format of the data. Our View contains the formatted date and our ViewModel acts as a middle-man between the two.

KnockoutJS interprets the ViewModel as the represtation of data and operations that can be performed on a UI. 

Another simple example with code.

The intent of Knockout and other MVVM framework offerings is to move those conditional logic statements into the ViewModel and let the ViewModel be the sole source of the business logic

more: http://learn.knockoutjs.com/#/?tutorial=intro

July 18, 2012 Posted by | Uncategorized | , | Leave a comment

MVC in Javascript

http://www.alexatnet.com/articles/model-view-controller-mvc-javascript

Controller:

  • add an item
  • delete an item
  • update

View

  • wired to listen for add button click, invokes controller
  • wired to listen for delete button click, invokes controller
  • Event (model) handler for itemAdded, itemRemoved
  • sender object
  • attach method to add handler to the event
  • notify method to invoke a handlers

Model

  •  list of current items
  • selected index
  • define Event (model) for item added, removed, selectedindex changed
  • model getters/setter methods for items

July 17, 2012 Posted by | Uncategorized | | Leave a comment

From Sencha to jQuery

After learning alot about EXTJS, it makes sense to get familiar with jQuery. If you have 15 minutes, this is a good overview. Similarly, try this slide share too as it provides good explanations.  As well, there is a jQuery fundamentals, an  online book or  jQuery in Action. As the first chapter says :

If you’ve spent any time at all trying to add dynamic functionality to your pages, you’ve found that you’re constantly following a pattern of selecting an element or group of elements and operating upon those elements in some fashion. You could be hiding or revealing the elements, adding a CSS class to them, animating them, or modifying their attributes.

This javascript library make it easier to accomplish these routine blocks of code in your client code.
To collect a group of elements, we use the simple syntax:

$(selector)
or
jQuery(selector)

The $ () function (an alias for the jQuery() function)  returns a special javascript object containing an array of DOM elements (known as the wrapped set or wrapper)  that match the selector.

Then, jQuery provides methods (or sometimes known as commands or actions) that can act on the group of elements. Some of these actions when completed return the same set of elements that can then again be acted on (known as chaining).

jQuery. or $. is the notation for utility functions.

15 days of jQuery

Selectors

Dimensions

Traversing

Maniplulation

Utilities

Events , Event Object

Ajax

July 14, 2012 Posted by | Uncategorized | , | 1 Comment

Mobile advancements by Qualcomm

http://scobleizer.com/2012/07/11/mobile-3-0-arrives-how-qualcom-just-showed-us-the-future-of-the-cell-phone-and-why-iphone-sucks-for-this-new-contextual-age/

But in the future your mobile device, whether it be something you hold in your hand like a smart phone, or wear on your face, like Google Glasses, will know a hell of a lot about you.

How?

Well, Qualcomm just shipped the developer SDK, called Gimbal.

Apple does NOT give developers access to the Bluetooth and Wifi radios. This is going to really hinder developers in this new contextual world.

This is the location based services we have been hearing about for years. It is the auto check in functionality. Let’s say you are driving n your car, it knows you have visited Starbucks on many occasions. It knows that you are approaching a StarBucks, it offers you  a coupon code.

July 11, 2012 Posted by | Uncategorized | Leave a comment

Mobile Apps explosion

http://blog.daniel-kurka.de/2012/05/talk-about-mgwt-gwt-phonegap-at-dutch.html

Clutter phone with apps instead of web pages

What we will do with phone in future going to explode.

Search for apps on our phone since there are so many

Periodically delete apps since cluttering phones

Web much better

One answer is phone gap

With different platforms  have to know different OS and API and languages. a lot to learn, and code  API changing all time.

The web provides a common software to bring different platforms together.

Build on standards (i.e. html5) , deploy app everywhere.

Native development – slow since have to develop for every platform, have to do separate implementation for every device, no portability, high cost, good performance on devices, native functionality

web development  – portability, low cost , no native functionality, device specific browser

Phone Gap – hybrid, web app and native app . Build it on standards and can run on anywhere. consistent api

gwt tool for building web apps

gwt  use java to build in javascript with compile (browser compatibility) , efficient javascript

mobile slow cpu drain battery slow network connections

can use phonegap and gwt together

web app – device, browser, mgwt great looking gui

apache 2.o license

native and javascript  (web)  in phone gap

adobe buys phonegap

donate code to Cordova

phone gap is one distribution of phone gap

adobe will build tools on it

web – native web control html,css – browser

phone gap plugins  (native) – camera plugins, android plugins, ioS

July 7, 2012 Posted by | Uncategorized | Leave a comment

HBaseball

http://www.cloudera.com/resource/intorduction-hbase-todd-lipcon/

HBase : open source, distributed, sparse (no strict schema), column oriented (control how stored on disk) sorted map data store, modeled after Big Table.

Usage scenario: alot of data, very high write throughput (i.e. sequential writes), easy to scale (distribute across machines), data layout efficient(key look up disk seeks efficient and cost transparent some rows filled in some not still efficient)

column oriented – every row with same column, transaction on single row basis, not full acid, hbase no sql except with hive, but not realtime,

get :  single row get columns

put : put row these columns

scan row x in sorted order until row y, some filtering

indexing – primary key only

clustered indexes –  primary key is clustered key index

Hbase built on top of Hadoop, requires HDFS, work with map reduce but built on top of it.

HDFS sequential writes , cant update in middle of file, provides streaming I/O

HDFS lacks random read/write capabilities

HBase random read and write in middle of file

converts random writes to  writes into log, merge log back into table

log structure merge trees 89

http://www.cloudera.com/resource/chicago_data_summit_apache_hbase_an_introduction_todd_lipcon/

Failover handled with Zookeeper

Sorted Map Datastore:

Not a relational database

Tables consists of rows and primary key

Each row any number of cols

rows stored in sorted order

Have primary key and columns have attributes (column families) that can store many different things

logical view (row key : data) :

– info and roles are column families

– Can have versions of the data

cutting (row key):  info {height: ‘9ft’, state : ‘CA’}, roles {ASF : ‘director’, Hadoop : ‘Founder’}

tlipcon (row key):  info {height: ‘5ft7’, state : ‘CA’}, roles {Hadoop : ‘Committer’@ts=2010,Hadoop :’PMC’@ts=2011, Hive: ‘Contributor’}

physical view (for each column family, row key (primary key), col key (what data), time stamp, value) :

– column families stored separately on disk

info column family:

cutting (row key) ,  info.height (col key) , 12345678910 (timestamp), 9ft (value)

cutting (row key) ,  info.state (col key) , 12345678911 (timestamp), CA (value)

tlipcon(row key) ,  info.height (col key) , 12345678912 (timestamp), 5ft7 (value)

tlipcon (row key) ,  info.state (col key) , 12345678912 (timestamp), CA (value)

–  roles column family:

cutting (row key) ,  roles.ASF (col key) , 12345678910 (timestamp), Director (value)

cutting (row key) ,  roles.Hadoop (col key) , 12345678911 (timestamp), Founder (value)

tlipcon(row key) , roles.Hadoop(col key) , 12345678912 (timestamp), PMC (value)

tlipcon (row key) ,roles.Hadoop(col key) , 12345678912 (timestamp), Committer (value)

tlipcon (row key) ,roles.Hive(col key) , 12345678912 (timestamp), Contributer (value)

– Sorted in ascending order by row key and column key, and descending order by timestamp

–  column families:

each column may have different access patterns or properties

can configure compression, cache priority, #versions properties

– Java API, Rest Calls, Apache Thrift, Hive (sql)/Pig (hybrid) integrate

get(row)

put (row,Map)

scan (key-range, filter)

http://jimbojw.com/wiki/index.php?title=Understanding_Hbase_and_BigTable

HBASE Architecture

” HBase handles basically two kinds of file types. One is used for the write-ahead log and the other for the actual data storage. The files are primarily handled by the HRegionServer‘s.”

You may also notice that the actual files are in fact divided up into smaller blocks when stored within the Hadoop Distributed Filesystem (HDFS).

The general flow is that

a new client contacts the Zookeeper quorum (a separate cluster of Zookeeper nodes) first to find a particular row key. It does so by retrieving the server name (i.e. host name) that hosts the -ROOT- region from Zookeeper.

With that information it can query that server to get the server that hosts the .META. table. Both of these two details are cached and only looked up once.

Lastly it can query the .META. server and retrieve the server that has the row the client is looking for.

http://hbase.apache.org/book/quickstart.html

http://hbase.apache.org/book/zookeeper.html

A distributed HBase depends on a running ZooKeeper cluster. All participating nodes and clients need to be able to access the running ZooKeeper ensemble. HBase by default manages a ZooKeeper “cluster” for you.

http://hbase.apache.org/book/datamodel.html

http://hbase.apache.org/book/data_model_operations.html

http://hbase.apache.org/book/schema.html

http://hbase.apache.org/book/mapreduce.html

http://hbase.apache.org/book/architecture.html

http://www.larsgeorge.com/2010/01/hbase-architecture-101-write-ahead-log.html

http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved/ :

” I will write about why I think we will see a seismic shift from SQL to NOSQL over the coming years, which will be just as important as the move to cloud computing. ”

“HBase and its required supporting systems are derived from what is known of the original Google BigTable and Google File System designs (as known from the Google File System paper Google published in 2003, and the BigTable paper published in 2006″

” Cassandra on the other hand is a recent open source fork of a standalone database system initially coded by Facebook, which while implementing the BigTable data model, uses a system inspired by Amazon’s Dynamo for storing data (in fact much of the initial development work on Cassandra was performed by two Dynamo engineers recruited to Facebook from Amazon).”

HBase being more suitable for data warehousing, and large scale data processing and analysis (for example, such as that involved when indexing the Web)

Cassandra being more suitable for real time transaction processing and the serving of interactive data.

where platforms are perceived as similar, people tend to aggregate around the platform that is going to offer the best supporting ecosystem in the long term

When starting with HBase, my impression then was that it had the greatest community momentum behind it, but I now believe that Cassandra is coming through much stronger.

HBase vs Cassandra: NoSQL Battle!” link more , or HBASE vs Big Table

ccelerating momentum behind Cassandra. You might also take note of the big names coming on board, such as Twitter, where they plan broad usage (see here).

“CAP Theorem, and was developed by Professor Eric Brewer, Co-founder and Chief Scientist of Inktomi.

The theorem states, that a distributed (or “shared data”) system design, can offer at most two out of three desirable properties –Consistency, Availability and tolerance to network Partitions.

Very basically, “consistency” means that if someone writes a value to a database, thereafter other users will immediately be able to read the same value back,

“availability” means that if some number of nodes fail in your cluster the distributed system can remain operational, and

“tolerance to partitions” means that if the nodes in your cluster are divided into two groups that can no longer communicate by a network failure, again the system remains operational.

a complete HBase solution is really comprised of several parts: you have the database process itself, which may run in several modes, a properly configured and operational hadoop HDFS distributed file system setup, and a Zookeeper system to coordinate the different HBase processes

HBase in pseudo distributed mode on a single server is difficult – so difficult in fact that I did my best to write a guide that takes you past all the various gotchas in the minimum time (see http://ria101.wordpress.com/2010/01/28/setup-hbase-in-pseudo-distributed-mode-and-connect-java-client/ if you wish to try it). As you will see from that guide, getting HBase up and running in this mode actually involves setting up two different system systems manually: first hadoop HDFS, then HBase itself.”

http://nosql.mypopescu.com/post/651051316/hbase-and-data-locality

http://www.larsgeorge.com/2010/05/hbase-file-locality-in-hdfs.html

Cassandra quick tour

http://research.google.com/archive/gfs.html

http://research.google.com/archive/bigtable.html

http://www.scribd.com/doc/21244790/Google-Designs-Lessons-and-Advice-from-Building-Large-Distributed-Systems

http://nosql.mypopescu.com/post/573604395/tutorial-getting-started-with-cassandra

July 5, 2012 Posted by | Uncategorized | Leave a comment

Data on the Tube Blasts

Interview with Dr. Jim Goodnight CEO SAS Institute On Data Analytics

What is Hadoop in 9 minutes

Hadoop by Linkedin engineer

Google Compute Engine

July 4, 2012 Posted by | Uncategorized | Leave a comment

Hadoop you do

Hadoop is a computing environment built on top of a distributed clustered file system  that was built specifically for large scale data.   The approach of Hadoop is distributing the data into a collection  of commonly available servers where each server is an in inexpenseive disk drive. Moreover, as it says here : “we introduce the idea of “big data” that the string is too huge to one master machine, so “master method” failed. Now we distribute the task to thousands of low cost machines.” With Hadoop, redundancy is built into the environment where data is stored in multiple places across the cluster. Not only is the data stored in multiple places in the cluster, but the programming model is such that  failures are expected and resolvedby running portions of the program on different servers in the cluster.

Hadoop  has two main parts :

  • HDFS, the Hadoop Distributed File System, is a distributed file system designed to hold very large amounts of data (terabytes or even petabytes), and provide high-throughput access to this information. The design of HDFS is based on GFS (Google File System). Files are stored in a redundant fashion across multiple machines to ensure their durability to failure and high availability to very parallel applications. There is one NameNode, and multiple DataNodes.  Moreover, via Facebok Under the Hood says :  “HDFS clients perform filesystem metadata operations through a single server known as the Namenode, and send and retrieve filesystem data by communicating with a pool of Datanodes. Data is replicated on multiple datanodes, so the loss of a single Datanode should never be fatal to the cluster or cause data loss.”  Also see IBM Big Data Analytics  HDFS, Facebook’s Realtime Hadoop
  • MapReduce , the programming model.  it is a programming paradigm that allows for massive scalability across the many servers in a hadoop cluster. map reduce performs two seperate tasks. first is the map job which takes a set of data and converts it into another set of data where elements are broken down into key/value pairs. The reduce job takes the output from a map as input and combines the key/value pairs into a smaller set of key/value pairs.

Note: The IBM Infosphere BigInsights platform (current version is  1.4) is built on top of Hadoop .

More:

July 3, 2012 Posted by | Uncategorized | Leave a comment

Learning Big Data

From the  whatsthebigdata.com post on  Crowdsourcing :

The Wikipedia article on Big Data says it requires exceptional technologies to efficiently process large quantities of data within tolerable elapsed times.

Big data is making us think of ways to harness the excessive amount of unstructured data that is generated on a daily basis.  Moreover, it is no surprise we have seen the introduction of many new Big Data technologies .

It was   Carlo Strozzi who coined the term NoSQL (“Not only SQL”) in 1998, referring to a lightweight database that did not expose a SQL interface. The NoSQL databases provide Infinite  scalability, fault  tolerance, high availibilty,  design-friendly lack of schema.  For example,  Oracle has a NoSQL offering, and  Globals is an Open Source NoSQL that supports a Java API.

My first experience with an unstructured like database was with the  Google App Engine in which uses the  BigTable like concepts (App Engine datastore and BigTable are not the same thing – datastore is built on top of the lower level BigTable, and adds extra capabilities. Bigtable is a sparse, distributed, persistent multidimensional sorted map. The map is indexed by a row key, column key, and a timestamp; each value in the map is an uninterpreted array of bytes.

Likewise, “The guts of Google are where concepts such as key-value pairs and MapReduce have been brought to the everyday user, albeit transparently.To finish the thought, NoSQL is a database-like storage engine for key-value pairs and Hadoop is an open-source implementation of MapReduce, among other things. Together, they enable mountains and mountains of data to be used purposefully

The Primer on Big data defines the  four “V’s” of data: volume, velocity, variety and veracity :

Volume: The sheer amount of data being digitized, maintained, secured, and then used. Knowing the organization’s current needs and having a plan for its growth is fundamental.

Velocity: The speed at which data must be moved, stored, transformed, managed, analyzed or reported on in order to maintain competitiveness. This will vary by organization and application or usage.

Variety: The different types of data, from source (origin) to storage and usage, must be well understood because competitiveness requires access to the right types of data more than ever. From aged flat files to spatial and unstructured data, a plan must be in place.

Veracity: The truthfulness or quality of data can either lead to poor understanding and decisions that belie progress or deliver a powerful jolt of reality that fuels new insight and ideas. Ultimately, data quality may be the most important frontier.

I first heard the hadoop and cassandra  buzz words bounced around when they talked of the technology behind google/facebook.

More on Hadoop :

“Traditional databases have columns and structures — name, rank, serial number, data of entry, date of departure,” Kay said. “In a Hadoop cluster, it’s unstructured. You don’t know what the structure is.”

“Hadoop was created by computer scientist Doug Cutting, who developed the platform based on data-indexing research from Google Inc. Cutting, now Cloudera’s chief architect, named the technology after his son’s yellow stuffed-elephant toy, which went on to become the platform’s logo.”

Now,  VMWare is bringing in Hadoop to its SpringSource Umbrella.

References:

June 28, 2012 Posted by | Uncategorized | Leave a comment

SAS Proc Summary and Means joined at hip

I have been working with SAS PROC Summary , and now know the PROC Means provides almost the exact same functionality (as the legend goes that two different people were designing  procs that did the same thing) . If you go to documentation for either, it shows the same syntax. The core
difference is that by default PROC MEANS sends the results to an Output Window and that PROC SUMMARY, by default, creates a SAS data set.

Class statement:   class variable(s) </ option(s)>;  

– Specifies the variables whose values define the subgroup combinations for the analysis

Id statement:  Id variable(s); 

includes additional variables in the output data set.

Output statement: OUT=SAS-data-set

  • statistics : The statistical analyses PROC MEANS will generate
  • _FREQ_ is the count of the number of observations available for use
  • _TYPE_  is a numeric flag which indicates the subgroup of the CLASS variables summarized by that observation in the output data set.

Here is an example. Nice presentation here.

June 22, 2012 Posted by | Uncategorized | Leave a comment

SAS BI Tasks

I am using the SAS Enterprise Guide and trying out a few things.

My samples directory is C:\Program Files\SASHome\x86\SASEnterpriseGuide\4.3\Sample\Data

  • Tools-> SAS Enterprise Guide Explorer
  • Tools -> Update Library Metadata
  • File -> Open ->
  • Right click on SAS program and click create stored process

June 20, 2012 Posted by | Uncategorized | Leave a comment

More BI Learnings

http://cwebbbi.wordpress.com/2011/12/07/using-google-docs-data-explorer-and-powerpivot-for-questionnaires/

http://cwebbbi.wordpress.com/2012/05/20/a-look-at-google-bigquery/

http://proc-x.com/2011/11/sas-olap-cubes-tips-for-building-olap-cube-aggregations-effectively/

SAS Snippets

http://www.sasanalysis.com/search/label/web%20analytics

June 17, 2012 Posted by | Uncategorized | Leave a comment

Pre-assign Library in SAS Management Console (SMC)

We created a new SAS library (which is just a name that points to a directory in the system),  but the SAS BI Dashboard  was not recognizing it.  Turns out you have to pre-assign the library.

We had to reset the tool for SAS BI Dashboard to take notice.  Simply checking the library was not good enough.

June 17, 2012 Posted by | Uncategorized | Leave a comment

Stored Processes

A SAS stored process is a SAS program that is hosted on a server and described by metadata.

Because a stored process is basically a SAS program, it can access any SAS data source or external file as input
and can create multiple types of output, such as new data sets, files, and report output in a variety of formats.

code is not embedded in client applications  it is stored on a server

SAS stored processes can be hosted by either the SAS Stored Process Server or the SAS Workspace Server

Any SAS program can be a stored process

More on Stored Processes… http://www.bi-notes.com/2012/05/stored-process-edit-modify-change/

June 17, 2012 Posted by | Uncategorized | Leave a comment

SAS data manipulations

SAS Transpose : “So many times we need to take our data and turn it around. One of the reasons that this is done is that it
is more efficient to store your data in a vertical format and processing the data is easier in a horizontal
format”

  • Changes the variables (columns)  into observations (rows)
  • eliminates the need to write a complex data step
  • Horizontal data has many variables with few rows. There will be empty cells in the data if there are any missing values

SAS Summary/SAS Means : In SAS, you can use the UNIVARIATE, MEANS, or SUMMARY procedure to obtain summary statistics such as the median, skewness, and kurtosis

Median:
By definition, a median is a statistical term identifying a piece of data (number) that divides numerically ordered data into two equal halves. In easier terms, the median is the middle piece of data when those data are placed in numerical order.

June 15, 2012 Posted by | Uncategorized | Leave a comment

Play the InfoMap Game

an information map bridges the gap between the:

  • the physical data warehouse
  • business user who views or builds reports from the data

An Example:

  •  information architects  sees physical data source that might be an array of interconnected tables and columns
  •  business users sees a simple list of business terms

an information map:

  • enables business users access to the most current data that is needed for business reporting
  • hides from business users the details of the physical data view

Information maps are :

user-friendly metadata definitions of physical data sources.

information map contains two basic elements:

data item   (a table column, an OLAP hierarchy, or an OLAP measure) –

  • are used for building queries and can be an item that represents either physical data or a calculation.
  •  are usually customized in order to present the physical data in a form that is relevant and meaningful to a business user.

filter is criteria that subset the data (i.e. where clause).

SAS Information Maps contain metadata to describe the following elements:

Metadata about the data sources:  An information map can be based on SAS data sets, SAS OLAP cubes, or a third-party database such as Oracle, Teradata, DB2, or Microsoft Excel

Metadata about relationships : Multiple relational data tables can be combined or joined to enable optimized queries, regardless of the data source.

Metadata about the appearance and usage of data items : control the display of data items through labels and formats. It can also control the usage of the data items. For example, you can decide that a certain data item should not be used in a sort or to compute statistics.

Metadata about business rules : Standard calculations and filters can be predefined so that business users do not need to re-create them every time that they are needed.

Metadata Repository pane on left: display of the information maps

Presentation tab: physical data sources, data items, and filters

Physical data on left : shows physical data sources

Information Map: details panel displays the Information Map data items and filters

Relationship Tab: Tables and their relationships to others

You cannot use both a table and a cube in the same information map

By inserting a data source for your information map, you have made the data available to the information map.

Now, you must create data items in order to include them in the information map.

A business user sees data from the data source only if you create a data item to represent it.

  • A data item can be a logical view of a field in the physical data.
  • A data item can be calculated from an expression.

To create data items, you use the Presentation tab of the main SAS Information Map Studio window.

To create a data item that is a logical view of the physical data field, you select an item in the Physical Data pane, and you use the Insert button to create a corresponding data item in the Information Map pane.

Data items are listed in the Information Map pane with an icon indicating their classification. There are two classes of data items

category: distinct value that is used to group or summarize measure data items

measured: a value that is measured and can be used in expression

Each data item has metadata to describe its properties

You can view and edit a data item’s properties in the Data Item Properties window

you right-click the data item in the Information Map pane of the Presentation tab and select Properties

Filters :  A filter can also be based on a physical data column or on an expression. The expression that you use in a filter can reference data items, physical data columns, or both.

category data item:

  • query code uses a WHERE clause
  • the clause is evaluated for individual records prior to any aggregations

measure data item:

  • query code uses a HAVING clause
  • the clause is evaluated on summarized information after aggregating the data

To open the New Filter window, you click the New Filter tool

In the Data item box, you specify the data item, physical column, or expression to which this filter applies.

In the Condition box, you specify the condition that is used to filter the data. For relational filters, the list of available conditions is based on the data item that is selected in the Data item box.

In the Value(s) box, you specify the unformatted values that the condition uses to filter the data items

You click Combinations to display or hide the elements that enable you to create compound expressions for the filter. Or/And expressions

he Edit button on the Definition tab enables you to open the Expression Editor window, where you can specify an expression for the new data item.

 

June 12, 2012 Posted by | Uncategorized | Leave a comment

OLAP Sandwich

I am learning about OLAP cubes… [concepts] [more]

Cubes are logical, multidimensional models that consist of the following elements:

  • One or more dimensions
  • One or more levels
  • One or more hierarchies
  • Members

Dimension – collection of closely related hierarchies that group data into natural categories (i.e. variables)

Level – level of detail within dimension

Dimensions have top level

Hierarchy – order of levels in a dimension based on parent child relationships

Member – individual value within level

 Star Schema – The set of tables includes a single fact table and one or more dimension tables. ” It is called a star schema because the diagram resembles a star, with points radiating from a center. The center of the star consists of fact table and the points of the star are the dimension tables.”

Fact Table – ” The fact tables contain fields for the individual facts as well as foreign key fields relating the facts to the dimension tables.”

Aggregate Tables – “are special fact tables in a data warehouse that contain new metrics derived from one or more aggregate functions (AVERAGE, COUNT, MIN, MAX, etc..) or from other specialized functions that output totals derived from a grouping of the base data.”

http://proc-x.com/2011/11/sas-olap-cubes-tips-for-building-olap-cube-aggregations-effectively/

http://sastechies.blogspot.com/2010/02/building-olap-cubes-with-sas-enterprise.html

June 7, 2012 Posted by | Uncategorized | Leave a comment

EXTJS4 Tree

I am designing a Tree for use in the EXTJS4.  In my tree I will be adding new nodes to the Tree. The basic Sencha Tree example is quite the simple case.

The tree I am defining makes use of the Tree Panel as follows:

Ext.define(‘my.view.FolderList’, {
extend : ‘Ext.tree.Panel’

Just like the example, I define my first column as a ‘tree column’:

xtype: ‘treecolumn’, //this is so we know which column will show the tree

Some methods of the Tree Panel which will be usefull:

Via the getSelectionModel()  which returns Ext.selection.Model , you can get:

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.NodeInterface-method-expand

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.NodeInterface-cfg-expanded

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.tree.Panel-method-expandPath

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.NodeInterface-method-getPath

http://www.clintharris.net/2011/how-to-use-extjs-4-treepanels-with-both-static-data-and-model-stores/

http://stackoverflow.com/questions/7491638/extjs-4-treestore-with-both-static-and-dynamically-loaded-data

http://www.sencha.com/forum/showthread.php?179514-Dynamic-node-loading-TreeStore-Panel

http://www.mysamplecode.com/2012/03/extjs-4-reload-tree-node-error.html

http://www.mindfiresolutions.com/Dynamic-Tree-in-Extjs402-1274.php”>http://www.mindfiresolutions.com/Dynamic-Tree-in-Extjs402-1274.php

April 17, 2012 Posted by | Uncategorized | | Leave a comment

MVC and more with extjs

Every framework/toolkit has their example app. GWT has its Stockwatcher. The Sencha EXTJS  toolkit has the Pandora.

After downloading the code for this, it doesn’t work out of the box until you add the following line of code to app.js:

Ext.Loader.setConfig({enabled:true});

The app.js file defines yout stores, controllers, and

Ext.application({name: ‘Pandora’,

autoCreateViewport: true,

models: [‘Station’, ‘Song’],
stores: [‘Stations’, ‘RecentSongs’, ‘SearchResults’],
controllers: [‘Station’, ‘Song’]
});

Lets start by looking at ViewPort file in view package:

Ext.define(‘Pandora.view.Viewport’, {
extend: ‘Ext.container.Viewport’,
layout: ‘fit’,

It uses the dock item – Any components may be docked to any side of a panel via the new dockedItems config property, and docked items must be configured with a dock property to specify which border to dock to. This allows for amazingly flexible Panel layouts now :

initComponent: function() {
this.items = {
dockedItems: [{
dock: ‘top’,
xtype: ‘toolbar’,
height: 80,
items: [{
xtype: ‘newstation’,
width: 150
}, {
xtype: ‘songcontrols’,
flex: 1
}, {
xtype: ‘component’,
html: ‘Pandora<br>Internet Radio’
}]
}],

From left to right,

layout: {
type: ‘hbox’,
align: ‘stretch’
},

The station list and ad  is in west region,

items: [{
width: 250,
xtype: ‘panel’,
id: ‘west-region’,
layout: {
type: ‘vbox’,
align: ‘stretch’
},
items: [{
xtype: ‘stationslist’,
flex: 1
}, {
html: ‘Ad’,
height: 250,
xtype: ‘panel’
}]

followed by the container in middle:

xtype: ‘container’,
flex: 1,
layout: {
type: ‘vbox’,
align: ‘stretch’
},
items: [{
xtype: ‘recentlyplayedscroller’,
height: 250
}, {
xtype: ‘songinfo’,
flex: 1
}]

Select a station, Station.js has:

stationslist’: {
selectionchange: this.onStationSelect

onStationSelect: function(selModel, selection) {
// Fire an application wide event
this.application.fireEvent(‘stationstart’, selection[0]);
},

In Song.js, wired up for the event as follows:

// Listen for an application wide event
this.application.on({
stationstart: this.onStationStart,
scope: this
});

Thus calls onStationStart which uses store to do a proxy call, but has call back to OnRecentSongsLoad:

onStationStart: function(station) {
var store = this.getRecentSongsStore();
store.load({
callback: this.onRecentSongsLoad,
params: {
station: station.get(‘id’)
},
scope: this
});
},

Next, we go into call back after proxy call:

onRecentSongsLoad: function(songs, request) {
var store = this.getRecentSongsStore(),
selModel = this.getRecentlyPlayedScroller().getSelectionModel();
// The data should already be filtered on the serverside but since we
// are loading static data we need to do this after we loaded all the data
store.clearFilter();
store.filter(‘station’, request.params.station);
store.sort(‘played_date’, ‘ASC’);
selModel.select(store.last());
},

It hits the selModel.select which selModel is equivalent to

this.getRecentlyPlayedScroller().getSelectionModel().select();

We have an event in Song.js that says invoke OnSelect method:

 this.control({
‘recentlyplayedscroller’: {
selectionchange: this.onSongSelect
}
});

In OnSelect method in Song.js tells us to go update SongInfo:

 onSongSelect: function(selModel, selection) {
this.getSongInfo().update(selection[0]);
}

SongInfo update method:

update: function(record) {
var data = record ? record.data : {};
this.down(‘#songdescription’).update(data);
this.callParent([data]);
}

However, this MVC  app example  for mobile Sencha is great.

Create your first EXTJS Object

What is a Store  along with a Store/Proxy –

Model with a validator

Model grid example

http://www.learnsomethings.com/

http://blog.hao909.com/extjs4-viewport-example/

http://www.extjsframework.com/mvc/simple-mvc-application

http://www.fusioncube.net/index.php/extjs4-capturing-window-header-close-button-click

http://as400samplecode.blogspot.com/2011/12/extjs-4-mvc-architecture-tutorial-using_8986.html

http://as400samplecode.blogspot.com/2011/12/extjs-4-mvc-architecture-tutorial-using_878.html

http://as400samplecode.blogspot.com/2011/12/extjs-4-mvc-architecture-tutorial-using_415.html

Ext.AJAX

Reference your view anywhere in MVC

Revisit MVC

Treegrid in EXTJS

Tooltips

Sample, Sample

March 30, 2012 Posted by | Uncategorized | | Leave a comment

Sencha extjs4 learning

Ext 

Viewport is a  specialized container representing the viewable application area,  to simply make a single child item occupy all available space, use fit layout, To display one “active” item at full size from a choice of several child items, use card layout.

Components may be added to a Container through the items config option at the time the Container is created, or they may be added dynamically via the add method.

* Base class of any component is Ext.container.Container -GUIDE working with LAYOUTS/CONTAINERS

* Can specify child items of a Container, or dynamically adding Components to a Container

* All Components are registered with the Ext.ComponentManager on construction

* Components created with an id may be accessed globally using Ext.getCmp

* The xtype configuration option can be used to optimize Component creation and rendering. It serves as a shortcut to the full componet name.

* You can define your own xtype on a custom component by specifying the alias config option with a prefix of widget.

* a  layout  default Auto scheme Certain layout managers allow dynamic addition of child components. Those that do include Ext.layout.container.CardExt.layout.container.Anchor,Ext.layout.container.VBoxExt.layout.container.HBox, and Ext.layout.container.Table.

* Ext.panel.Panel  extend a Container have properties like closeable To enable the close tool to simply hide a Panel for later re-use, configure the Panel withcloseAction: 'hide'.

* Instead of using assigned ids, use the itemId config, and ComponentQuery which provides selector-based searching for Sencha Components analogous to DOM querying

http://docs.sencha.com/ext-js/4-0/#/api/Ext.tab.Panel-method-down

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.ComponentQuery

March 21, 2012 Posted by | Uncategorized | Leave a comment

The Flux Capacitor

It’s been a while since I have blogged. But, better late than never. I wanted to record my new knowledge  on DataFlux which was entirely new to me before Tuesday.  Dataflux has an office here in the triangle and was acquired by SAS in the year 2000. The current version of the Data Management Studio is 2.2 The lifecycle consists of Plan (define/discover), Act (design/execute), Monitor (Evaluate/Control). The different components in the Dataflux products are the Dataflux Data Management Studio , Web Studio, Federated Server (outbound connections, virtualization, multiple data sources), Data Management Server (jobs, alerts, triggers).  The data management repository consists of the rps file  and the propitiatory files.

To create a new repository, go to the Administration riser on the left, find repository definition tree, right click and select new.

QKB (QualityKnowledge Base) – houses schemes, definitions, etc. ~ what names should look like. It can be found under repository definitions, should be set as default

The Data riser is where you can explore tables and ODBC connections.

http://www.dataflux.com/MyDataFlux-Portal.aspx

Data Collections is where you group like fields

Field Match, Table Match, Identification Analysis

Higher sensitivty, less likely match

Data profiling – look for errors with frequencies and patterns

Analysis report – what is right

create a standardization scheme

phrase or identification analysis

http://www.dataflux.com/MyDataFlux-Portal.aspx

http://www.datafluxinsight.com/local/dataflux/home/frontpage.php

February 24, 2012 Posted by | Uncategorized | Leave a comment

Java Practices -> Forward versus redirect

http://www.javapractices.com/topic/TopicAction.do?Id=181

June 9, 2011 Posted by | Uncategorized | Leave a comment

Google TV you say?

With Apple TV, you can stream from your apple device to your television.  Such as,  Pay-per-view of TV shows (for the networks who are on board), or movies from Netflix.  But, what is Google TV? How do they compare?

This site states what we think it is:

Based on what has been circulating around the net it appears that Google TV has formed a partnership with both Sony as well as NetFlix to offer streaming on demand video in the best quality possible. Movie Downloads will be in 1080 p HD resolution.

In addition, Google TV Boxes will be pre-installed with Google Chrome for web surfing, will have the ability to utilize and run Android applications. Google TV will integrate into your television, computer and cloud platforms rather seamlessly. Web applications like Twitter, Google’s online photo sharing and storage service will also be included.

As Tim says:

Apple TV / Google TV are throwing down the challenge to all Cable providers. The goal is to ditch your cable boxes, and Blu-ray and instead view live streams direct from the internet directly through TV monitors. This will have a significant impact on the cable television as we know it. It’s only a matter of time television will be an old dusty device that our children’s grand-parents still view due in part Web mania is still a fad…

The google tv developers

September 19, 2010 Posted by | Uncategorized, Video | Leave a comment

jQuery basics

I am in the process of learning about jQuery. I have used some dojo, and recently most my work on client side has been in GWT . I figured the best place to start is in a slide share.  As well, there is a jQuery fundamentals, an  online book.  jQuery in Action is also online. As the first chapter says :

If you’ve spent any time at all trying to add dynamic functionality to your pages, you’ve found that you’re constantly following a pattern of selecting an element or group of elements and operating upon those elements in some fashion. You could be hiding or revealing the elements, adding a CSS class to them, animating them, or modifying their attributes.

This javascript library make it easier to accomplish these routine blocks of code in your client code.
To collect a group of elements, we use the simple syntax:

$(selector)
or
jQuery(selector)

Known as a wrapper or a wrapped set.

September 6, 2010 Posted by | Uncategorized, Web Design | | Leave a comment

NFJS 2010 Java Agility Event Series

NoFluffJustStuff
Resarch Triangle Software Symposium
(August 27 – 29, 2010) at Marriot Hotel.

I attended No Fluff Just Stuff 2010. I will cover what I learned in this blog post.

Collections By Ted Neward: The collection API is seperated by the interfaces, implementation, and the algorithims.  Although a Map contains key/value pairs, it is not a collection. This was something Joshua Bloch fought for, and ten years later it still makes sense.  Use of initializing collections to null was a mistake. Its better to initialize it to a zero sized collection value (i.e. new ArrayList()).   Of coure, certain collections are synchronized where others are not. Refer to the book Java Concurrency in Practice which is a good for learning about thread safe issues. Note of Google Collections (now called Guava).Lastly, use for loops for iteration.

OSGI by Craig Walls : Modularity spec for Java is OSGI. Bundle lifecycle is installed, resolved (everything i need), starting, active (running). Everything defaults to private unless you tell it otherwise.  Fragments are partial bundles. You don’t write manifest files yourself. Tools such as Bnd or Bundlor. Apparently OSGI didn’t incorporate JPA (see apache Arries) into it and because of that the springsource community realized that they did not have resources among itslef to take it to new level. As a result, it was taken to a new open source community to get help with it. Eclipse Gemini is the new project. Also, the Spring DM server is now Eclipse Virgo . Other projects include Apache Felix, Paxrunner. See Book Modular Java. See www.habuma.com/osgi/osgi-examples.html

Groovy On GAE (gaelyk) by Tim Berglund :  The session started with a discussion of the book The Shallows which covers what the interent does to our brains.  This framework is for small quick web applications (page centric). Mention of suitable and non-suitable architectures. Its syntax like coding jsps. Small size war files. Application server in cloud, Data store (big table noSql),  Authentication, caaching (MemCache), XMPP (IM), Email, Task Queue, Image API, URL fetching, OAuth, Blobstore.  github link . Mention of Dr. Laurie Williams and Pair programming.

Html5 by Brian Sletten : Despite what this website says, HTML5  by w3 is here. There is an ie enabling script even as mentioned here. Microsoft will support HTML5 in their browsers in ie9, and in a sense will be aiding in the phase out of the flash technology.  With html5,  the multimedia experience is achieved without the plugin that is neccesary with flash. The recourse for flash is supporting html5. Especially, since Steve Jobs changed the licensing agreement not allowing the Apple software to cross compile for adobe. As this html5 preview shows, the new section and article tags are part of the new standard, and replace the need for div tags to achieve this. html5 has a tool to create outlines of html5 conent. The new visual elements progress meter  (shows measurement within a range), details (dropdown with detailed info), input (such as time,date), canvas coordinate system. edspencer  has a nice site covering html5 topics like Canvas,  web storage api . A chrome html5 demo.  The site html5 tutorial is a nice resource such as its canvas cheat cheat. The Codec Hell situation in which Google tried to move theVP8 codec along.  The audio part of html5. html5 video player demo , and here is an example of html5 video that can be rotated , and more. The geolocation demo. The offline storage demo. Web workers/socket chat. Lastly, quake on html5.  Some other html5 goodies: http://html5boilerplate.com/ , page in chrome http://www.thewildernessdowntown.com/index.html. Silverlight doom ?

August 31, 2010 Posted by | Uncategorized | 1 Comment

The IBatis Model

Been a while since I started first looking at IBatis. The Spring Framework has a sample application named JPetstore (available in the core download) that gives you an example of IBatis, Spring, and Struts 1.x .

Different Spring Ibatis SQLMaps approaches:

Use Of Annotations

Implementing DAOs based on plain iBATIS API

<bean
id=”dataSource”
class=”org.springframework.jdbc.datasource.SingleConnectionDataSource”
destroy-method=”destroy”
>

<bean id=”transactionManager”
class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
<property name=”dataSource” ref=”dataSource”/>
</bean>

<bean id=”sqlMapClient” class=”org.springframework.orm.ibatis.SqlMapClientFactoryBean”>
<property name=”configLocation” value=”classpath:/sqlmap-config.xml”/>
<property name=”dataSource” ref=”dataSource”/>

</bean>

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE sqlMapConfig PUBLIC
“-//ibatis.apache.org//DTD SQL Map Config 2.0//EN”
http://ibatis.apache.org/dtd/sql-map-config-2.dtd”&gt;
<sqlMapConfig>
<settings defaultStatementTimeout=”5″ />
<sqlMap resource=”MyType.xml” />
</sqlMapConfig>

You can actually omit the ‘transaction-manager’ attribute in the <tx:annotation-driven/> tag if the bean name of the PlatformTransactionManager that you want to wire in has the name ‘transactionManager’.

<!– Instructs Spring to perfrom declarative transaction managemenet on annotated classes –>
<tx:annotation-driven/>

@Autowired
public void setSqlMapClient(SqlMapClient sqlMapClient) {
iBatisTemplate = new SqlMapClientTemplate(sqlMapClient);
}

@@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)

– The @Transactional annotation may be placed before an interface definition, a method on an interface, a class definition, or a public method on a class. However, please note that the mere presence of the @Transactional annotation is not enough to actually turn on the transactional behavior.
public MyType insertMyType(MyType myType) {
MyType myType = null;
myType= (MyType) iBatisTemplate.insert(“insertIntoMyType”, MyType;
return myType;
}

Use Of Spring’s DaoSupport Class

<bean
id=”dataSource”
class=”org.apache.commons.dbcp.BasicDataSource”
destroy-method=”close”
>

<bean id=”sqlMapClient” class=”org.springframework.orm.ibatis.SqlMapClientFactoryBean”>
<property name=”configLocation” value=”classpath:/sqlmap-config.xml”/>
<property name=”dataSource” ref=”dataSource”/>
</bean>

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE sqlMapConfig PUBLIC “-//iBATIS.com//DTD SQL Map Config 2.0//EN”
http://www.ibatis.com/dtd/sql-map-config-2.dtd”&gt;
<sqlMapConfig>
<settings useStatementNamespaces=”true” />
<sqlMap resource=”person.xml” />
</sqlMapConfig>

PersonDaoIbatisImpl extends SqlMapClientDaoSupport

public void addPerson(Person person) {
Long id = (Long) this.getSqlMapClientTemplate().insert(“person.insert”,
person);
person.setId(id);
}

August 17, 2008 Posted by | Uncategorized | 1 Comment

The Spring Stack 2008 – Part1

Spring 2.0 introduced support for various annotations for configuration purposes, such as:

  • @Transactional – The @Transactional annotation may be placed before an interface definition, a method on an interface, a class definition, or a public method on a class. However, please note that the mere presence of the @Transactional annotation is not enough to actually turn on the transactional behavior.
  • @Required – used to mark a property as being ‘required-to-be-set’ (i.e. an annotated (setter) method of a class must be configured to be dependency injected with a value)
  • @PersistenceContext – annotated on EntityManager instances are not thread safe
  • @PersistenceUnit – annotated on EntityManagerFactory instances are thread-safe

Thus, to use annotations for the transactions for my purposes, I do the following:

  1. Put an tag tx:annotation-driven in the config file (i.e applicationContext.xml)
  2. Put @Transactional annotation in the services class implementation that contains operations on the entity manager

Spring 2.5 introduces support for a complete set of configuration annotations:

  • @Autowired in combination with support for the JSR-250 annotations @Resource
  • @PostConstruct
  • @PreDestroy

July 16, 2008 Posted by | Uncategorized | 1 Comment

NFJS In Links

The Pragmatic Programmer

The Mythical Man Month

AntiPatternsCatalog

Eclipse Dali

The Vietnam Of Computer Science

Jacobsen : Use Cases and Aspects

GWT

coolandusefulgwt

GWT Designer

Clay Shirky : “Its Turtles All the Way Up

Ted Neward on Rest vs Soap

Purl.org

REST: Get, Post, Put, Delete

Roy Fielding : Architectural Styles & the Design of Network-based Software Architectures

Spring 2.5 : SpringSource

Bob Mcwhirter : the founder of drools (jboss rules) and codehaus

Jess is another rules platform

Habits of Effective Programmers

Darshan Arney takes on: ‘ The Top software developers are more productive than average software developers not by a factor of 10x or 100x or even 1000x but by 10,000x.’

Ken Sipe 7 habits

Broken Windows Theory

Book – TopGrading

Raymond : The Cathedral and the Bazaar

Dijkstra: Computer Science is no more about computers than astronomy is about telescopes.

Writing the Right Stuff

The Corridor Principle

AgileManifesto

csszengarden

Groovy

grails.org

Groovy Recipes

Ken SipePerficient

Neal Ford – Thoughtworks

Brian Goetz – Sun

David Geary

Brian Sletten zepheira.com

Brian Sam-Bodden –   Integrallis

Jason RudolphRelevance

Venkat SubramaniamRelevance

David Bock –  Java Guy

Jeff BrownG2one

Scott Davisaboutgroovy.com

Jared Richardson

June 23, 2008 Posted by | Uncategorized | Leave a comment

Fluffage

Starting at about  12:00 tommorow I’ll be arriving at NoFluffJustStuff conference – also known as the Research Triangle Software Symposium. This is put on by Jay Zimmerman and his cast of notable experts from the software industry.

There are a lot of good choices on the menu.

June 20, 2008 Posted by | Uncategorized | Leave a comment

roller 4 + planet

In this post I will cover getting started with the Roller4.0 blogging software including setting up the planet (aggregation server).

Anyway, I am using the mysql database (5.0.41 community edition) with roller 4
(best available) which i placed in Tomcat’s webapps directory naming the folder roller4_0 .

I am using tomcat 5.5 with java5.

Setup: Tomcat’s common/classes folder have placed file roller-custom.properties:
installation.type=auto
database.configurationType=jdbc
database.jdbc.driverClass=com.mysql.jdbc.Driver
database.jdbc.connectionURL=jdbc:mysql://localhost:3306/rollerdb
database.jdbc.username=root
database.jdbc.password=admin
mail.configurationType=properties
mail.hostname=smtp-server.nc.rr.com
mail.username=x
mail.password=x

Important: You need to put the mysql driver, and two other jars into Tomcats’s common/lib directory:

  • mysql-connector-java-3.1.13-bin
  • activation (obtained from my java 5 lib folder)
  • mail (obtained from my java 5 lib folder)

 

After starting Tomcat, I go to the main screen via url http://localhost:8080/roller4_0/index.jsp

which says I have a successful connection but have no tables . So I click the button to create the tables.

image01.jpg

Then, I get the page to create users and the blog.
image002.jpg

Yes, you need a planet-custom properties (roller-custom.properties in common/classes) file…

I set up a blog which i called planet which I give a theme of
roller front page…

My weblog template now has
## 1) SITE-WIDE entries (the default)
##set($pager = $site.getWeblogEntriesPager($since, $maxResults))

## 2) PLANET-entries
#set($pager = $planet.getAggregationPager($since, $maxResults))
## The below pager code should work against either
the planet blog _must_ be the frontpage blog (this is not optional as
I thought).enable “Enable aggregated site-wide frontpage” (this is on by default)
“That’s true because the Installation Guide tells you to put the
PlanetModel in the ‘rendering.siteModels’ list.
If you want Planet aggregations to be available to all blogs you can
put the model in the ‘rendering.pageModels’ list.
Or, if you are an admin user the you can add the PlanetModel to
individual blogs via the blog’s Preferences->Settings page.”
3- in roller-custom.properties
planet.aggregator.enabled=true
cache.dir= /mycache/planetcache
planet.aggregator.guice.module=\
org.apache.roller.weblogger.planet.business.jpa.RollerPlanetModule
# Tasks which are enabled. Only tasks listed here will be run.
tasks.enabled=ScheduledEntries
Task,ResetHitCountsTask,\
TurnoverReferersTask,PingQueueTask,RefreshRollerPlanetTask,SyncWebsitesTask
# Set of page models specifically for site-wide rendering
rendering.siteModels=\
org.apache.roller.weblogger.ui.rendering.model.SiteModel,\
org.apache.roller.weblogger.ui.rendering.model.PlanetModel

The installation guide says the planet cache directory property is
named planet.aggregator.cache.dir, but the planet.properties file
looks like it uses cache.dir
It should be RefreshRollerPlanetTask not RefreshPlanetRollerTask
planet-custom.properties:
database.configurationType=jdbc

database.jdbc.driverClass=com.mysql.jdbc.Driver
database.jdbc.connectionURL=jdbc:mysql://localhost:3306/rollerdb
database.jdbc.username=x
database.jdbc.password=y

January 6, 2008 Posted by | Uncategorized | Leave a comment

CM is made of what?

http://devlicio.us/blogs/derik_whittaker/archive/2007/05/09/questions-every-candidate-should-ask-a-potential-new-employer.aspx

June 25, 2007 Posted by | Uncategorized | Leave a comment

Just Say No

“I am suggesting that there are those around us who are “serial committers” – they always say yes and rarely say no, even when they should.  These individuals become so engulfed by the shear number of commitments that they have made that it becomes impossible for them to execute on any of them, at least not effectively.”

http://cjhemp.wordpress.com/2007/04/28/promise-based-management/

June 25, 2007 Posted by | Uncategorized | Leave a comment

Practices are way to Go

http://drdobbs.com/dept/architect/198000264: “”

June 25, 2007 Posted by | Uncategorized | Leave a comment

links for 2006-12-13

December 12, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-11-30

November 29, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-11-27

November 26, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-11-23

November 22, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-11-20

November 19, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-11-18

November 17, 2006 Posted by | Uncategorized | Leave a comment

web 2.0 to 3.0

November 14, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-26

August 25, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-17

August 16, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-12

August 11, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-11

August 10, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-10

August 9, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-08

August 7, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-06

August 5, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-05

August 4, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-03

August 2, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-08-01

July 31, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-31

July 30, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-30

July 29, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-29

July 28, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-23

July 22, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-22

July 21, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-19

July 18, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-17

July 16, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-15

July 14, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-14

July 13, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-13

July 12, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-12

July 11, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-07-11

July 10, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-28

June 27, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-18

June 17, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-17

June 16, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-13

June 12, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-12

June 11, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-10

June 9, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-06

June 5, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-03

June 2, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-06-02

June 1, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-05-31

May 30, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-05-26

May 25, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-05-25

May 24, 2006 Posted by | Uncategorized | Leave a comment

links for 2006-05-24

May 23, 2006 Posted by | Uncategorized | Leave a comment

Official First Day

online sessions
JavaOne begins by Matt Raible
Sporar on Day one

Burnette [1] [2] [3] [4] [5] [6]

Post in Links

Debian News

Portal Open Source

Lastly    code.google.com/webtoolkit/

May 17, 2006 Posted by | Uncategorized | Leave a comment

Mobile Jump

Link: Mobile Jump.

March 28, 2006 Posted by | Uncategorized | Leave a comment