Tech Blog

Frontend Web Application Developers - Sydney

Posted At : December 14, 2011 4:41 AM

Learnosity are looking for Frontend Web Application Developers

Learnosity develops cutting edge tools for language learning and is used by the leading educational publishers and assessment companies globally. We deliver millions of assessments every year, to users on 6 continents.

We are looking for multiple roles from junior to mid level range.

Learnosity are looking for Junior to Mid level Web Application Developers x2

Posted At : October 20, 2010 4:36 AM

Learnosity develop cutting edge tools for teachers and educators. Our flagship product Learnosity Voice uses the telephone to enable language students and teachers to interact on a one to one level. Our service:
  • Makes it practical for students to practice Oral and Aural skills
  • Is efficient and effective for teachers, as they can listen to each student individually at a time to suit them
  • Can be used for homework assignments or “High Stakes Assessments”

Learnosity are creating the next generation of language and assessment technology for use in schools and education worldwide. The current product portfolio includes:

  • High availability web based systems
  • Cross platform software (Windows, Mac and Linux)
  • iPhone/Android native applications
  • Telephony/VOIP and SMS applications

We need someone who can:

  • Use Javascript or Actionscript to create great user interfaces
  • Develop highly scalable web applications using ColdFusion, PHP or similar
  • Cut code with the best in the world

You will also need to be:

  • keen to continue learning new technologies
  • able to have a conversation with non technical people
  • enthusiastic and ready to push the boundaries

You'll need:

  • 1-3 years of programming experience
  • Experience in at least one Client side language (Actionscript or Javascript/jQuery)
  • Experience in at least one Server side language (eg PHP, Java, ColdFusion, etc)
  • Understanding of Object Oriented design
  • Understanding of XHTML and CSS

It would be good if you have:

  • A degree in Computer Science, Engineering or similar.
  • been working with open source tools
  • Experience with Adobe AIR or Flex
  • been playing around with iPhone/Android applications
  • experience with some of Linux/VOIP/SIP/Asterisk/Jabber/XMPP

This is a full time role and you will be working in a casual workplace with flexible hours in the Sydney CBD. Salary commensurate with experience.

If this sounds like the job for you, email a covering letter explaining why you'll be great and your resume to mark@learnosity.com - no agencies please.

SSL problems with locked down proxies

Posted At : September 13, 2010 11:05 PM

For one of our applications we've been debugging a problem where the application was not able to correctly make an SSL connection to our server.

It is an application designed to run in schools and in most schools it would work perfectly and some others it would completely fail.

After much narrowing down we found that it was limited to Windows XP SP3 machines and newer and was due to their improved support for checking certificate validity.

The problem was that the schools proxy was locked down so that access was only available to authenticated users, except for our URL which was on a whitelist so that students did not need to authenticate to access our system.

However, as part of the SSL improvements in XP SP3, Vista and Windows 7 the application was also trying to check additional urls and the proxy was blocking it.

The URLS were:

  • http://crl.verisign.com
  • http://ocsp.verisign.com

This was because we were using a verisign certificate. If you were using a thawte certificate it would be:

  • http://crl.thawte.com
  • http://ocsp.thawte.com

Adding the above URL's to the proxy whitelist fixed it all up.

Hope it helps.

Cheers, Mark

Related links:

Signing Northcode Applications with MS Authenticode

Posted At : August 16, 2010 11:16 PM

Here's a quick howto for signing applications on windows which means that it won't show up as Author unknown.

Download the Windows SDK.

Install it - I didn't install any of the code samples or help as I didn't want to wast 3.5G of space just for some code signing. Obviously it does a lot more than I was using it for :-).

If you have a code signing cert you need to install it into windows by double clicking on it and following the prompts.

Then simply run the following command:

"c:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\signtool.exe" sign /a filenametosign.exe
Done Adding Additional Store
Successfully signed: filenametosign.exe

Then when people run your application is will say the Author name instead of "Unknown"

Mark

See also: Northcode: How do I get rid of the "Unknown Publisher" security warning?

Flex 3 to Flex 4 Migration Howto

Posted At : March 21, 2010 10:50 PM 7 Comments

I recently completed migrating an application from Flex3 to Flex4, and for my own reference, here's how I did it.

Note - this was done with flexsdk-4.0.0.13875, which was the most recent stable build at the time.

Phase 1: Get Flex3 code compiling with Flex4

Fix up stylesheets:

If you have a current Flex3 project and you are migrating to Flex4 you need to add the following lines at the top of your stylesheet.

This makes the default non-namespaced items in your stylesheet refer to the MX components. eg:

Button{fontSize:18;}
And to style up spark buttons you simply use:
s|Button{fontSize:18;}

To statically link or not?

Flex 4 defaults to dynamically linking runtime shared libraries. This produces smaller files, but if you are making desktop type applications or developing code while not connected to the internet you'll probably want to statically link the files. Add this to your compiler option:

-static-link-runtime-shared-libraries=true

You now should have a happily compiling app, however, to use all the new goodness of flex 4 there are still some more steps to be done.

Phase 2: Using all of flex 4

Update namespace to 2009

To update the namespace references for flex 4 I did the following search and replace:

Replace mx with fx namespace

<mx:Script> and </mx:Script>
becomes:
<fx:Script> and </fx:Script>

Similarly for other tags like this:

<mx:Binding> to <fx:Binding>
<mx:Metadata> to <fx:Metadata>

Add Declarations for non visual components

Wrap tag around non visual compoents. The compiler will complain about all these errors so just follow through and wrap them in

<fx:Declarations></fx:Declarations>
tags until all the errors go away.

Migrate States

Finally, at least for the project I migrated, I needed to convert all the state tags to the new format of inline attributes.

This shows up as the following error:

Error: State overrides may no longer be explicitly declared. The legacy states syntax has been deprecated.

So if you had something like this before:

<mx:State name="loading">
<mx:AddChild relativeTo="{myBox}">
<mx:Text textAlign="center" text="Loading..." selectable="false" />
</mx:AddChild>
... snip ...
<mx:VBox id="myBox">   
</mx:VBox>

It would now look something like this:

<mx:State name="loading">
... snip ...
<mx:VBox id="myBox">   
<mx:Text textAlign="center" text="Loading..." selectable="false"
   visible="false" includeInLayout="false"
   visible.loading="true" includeInLayout.loading="true"
/>

</mx:VBox>

Migrate StyleManager References

Stylemanager is not called as a global class any more and you need to use fully qualified references so:

thisImage.source = StyleManager.getStyleDeclaration("Image").getStyle("brokenImageSkin");
becomes:
thisImage.source = styleManager.getStyleDeclaration("mx.controls.Image").getStyle("brokenImageSkin");

When these have all been converted, your application should compile.

Then you can start leveraging the new functionality of flex4 and begin migrating your components to spark if necessary.

Migrating CSS from Flex 3 to Flex 4

Posted At : March 8, 2010 11:34 PM

Having searched around for how to make CSS work when migrating to Flex 4 from Flex 3 and finding lots of incorrect namespace declarations I thought I'd blog this as a reminder to myself:

If you have a current Flex3 project and you are migrating to Flex4 you need to add the following lines at the top of your stylesheet.

This makes the default non-namespaced items in your stylesheet refer to the MX components. eg:

Button{fontSize:18;}
And to style up spark buttons you simply use:
s|Button{fontSize:18;}

Note there were lots of ones that I found that were wrong.

Do NOT use:

This info was sourced from the Flex SDK Wiki.

Flex 4 RSL's and how to not use them

Posted At : March 8, 2010 10:55 AM

Flex 4 allows and defaults to using Runtime Shared Libraries (RSL's).

These have advantages of making flash movies using them work very well, but they can also require more http requests the first time they are used, and are not good for application development with Northcode.

To turn them off you need to add the following compiler flag:

-static-link-runtime-shared-libraries=true

Thanks to Flex Butterflies and bugs for the info.

ExtendoText project on google code

Posted At : April 7, 2009 11:09 PM 1 Comments

We've been busy squirrelling away on many projects and they are beginning to come to light:

One which is coming to light very early is a new text framework for actionscript which leverages flash 10 text engine.

It's very early alpha but is a good proof of concept and already solves some problems for us - namely the ability to simply create rich text area's that have superscript and subscript text.

It uses XML and CSS and completely seperates the formatting from the content.

Screenshot of extendotext 0.1

It can now:

  • Render a simple XML document
  • Apply styles including color, font and opacity
  • Plug in custom code for rendering images, video or any other XML tag you want to create.

The screenshot highlights a number of these features:

  • Bold, italic, super and subscript text
  • Text wrapping around custom display classes (Red and Green boxes)
  • Opacity applied to display objects (green box)

There is still a lot more to be done - including editing of text which is the next hard piece to knock over.

You can get it from the google code site

Keen to hear any feedback.

Cheers, Mark

More of AIR Gzip compression

Posted At : March 19, 2009 10:37 AM

Further to Marko's blog entry on implementing Gzip compression in AIR applications - turns out we were impressively hoodwinked.

By adding the 'Accept-Encoding':'gzip' header we were telling our apache server to serve up the compressed version of the content and we could see the content was compressed coming through Charles Proxy, and our application was working perfectly.

However, I started working on the exact same code the next day and straight away got an error - the application was erroring because it was getting binary data where it expected the decompressed XML data.

I turned Charles back on to see what was going on and it started working again. With my best sherlock holmes head on I rapidly deduced that Charles as well as proxying the request was also decompressing it helpfully for me.

Luckily I'd already come across the solution to the problem courtesy of Anirudh Sasikumar (GzipHTTPService) and Paul Robertson (Gzip Encoder).

I made some minor modifications to Anirudh's Gzip HTTP Service to do two things.

  • Always send the header 'Accept-Encoding':'gzip' if running a Desktop (Aka AIR) app.
  • Handle the case where the Gzip response that comes back is not gzip compressed. I.e. Charles already decrypted it or the server doesn't support gzip compression.
  • Change it to use version 0.2.0 of the gzip encoder

With these changes it is a drop in replacement for the <mx:HTTPService/> tag.

The changes are as follows:

...snip....
public function GzipHTTPService(rootURL:String=null, destination:String=null)
{
super(rootURL, destination);
         //If using AIR then set accept GZIP          if(Capabilities.playerType == "Desktop")
         {
            this.headers = {'Accept-Encoding':'gzip'};
         }
}

...snip....
else if ( body is ByteArray )
{
var barr:ByteArray = body as ByteArray;

try{
   var encoder:GZIPBytesEncoder = new GZIPBytesEncoder();
   /* decode the gzip encoded result */
   message.body = encoder.uncompressToByteArray(barr).toString();
}catch(error:IllegalOperationError){
   //Not gzip compressed - assume utf8    barr.position = 0;//reset to start of bytearray    message.body = barr.readUTFBytes(barr.length);
}
/* pass it on to HTTPService */
return super.processResult(message, token);            
}

...snip...

For convenience you can download the modified files from here.

Hope it helps.

Cheers, Mark

GZIP encoding in Adobe AIR/Flex - HOWTO

Posted At : March 6, 2009 1:27 AM

If you use HTTPService component in Flex or AIR to retrieve data from a server, you might want to consider gzipping the response. This can significantly reduce the packet size you get from the server, which results in a much better application performance.

This means that response packet is compressed by Apache web server and your client will need to decompress it. Fortunately, both Flex and AIR 1.5.1 natively support GZIP compression. However there are a couple of things you need to watch out for.

Firstly, you need to enable Apache Module mod_deflate in your virtual host.

In your AIR application, you need to tell HTTPService component to accept gzip encoding and AIR will take care of the rest:

<mx:HTTPService id="service" resultFormat="e4x" />
this.service.headers = {'Accept-Encoding':'gzip'};

If you are in a Flex project, specifying gzip encoding will throw the following error:

ArgumentError: Error #2096: The HTTP request header Accept-Encoding cannot be set via ActionScript.

This is because Flex apps run in a browser and the browser is responsible for determining encoding type and decompression (if required). Therefore, you cannot specify encoding type in Flex apps.

Our problem is that we use one core library for AIR and Flex applications. So the issue above can be avoided by conditionally specifying encoding type depending on the framework used. This can be done in 2 lines of code:

if(Capabilities.playerType == "Desktop")
this.service.headers = {'Accept-Encoding':'gzip'};

Note: this is not the complete solution - check out this entry for the rest of it :-)

Cheers Marko