New WebGL based 3D Editor

The Clara.io 3D Editor based on HTML5/WebGL is currently in closed Beta. Besides standard 3D editing features it sports awesome Features like Versioning, URL Sharing and Realtime Collaboration on 3D Models. Awesome!

With the rising number of Browsers and Devices supporting WebGL this one could become the Webdevelopers 3D Editor of choice really really fast.

Apply for Beta-Access on their Blog.


Leaflet Update with many Improvements

The stable version .6 of our favourite js mapping library leaflet was just released. Besides extended GeoJSON support lots of new and useful API functions were added. Especially the improved fitBounds function as well as setZoomAround are very much appreciated.

Event better: a whole slew of improvements on the tile layer and zoom handling implementation should finally remove odd drifting and flickering when using custom tile providers.

Be sure to checkout the changelog!


Schladming 2013 Mobile App

Really proud, that our dedicated team of developers managed to release the official mobile Application for the FIS Ski WMS 2013 supporting iPhones, iPads and Android Devices natively as well as various other devices using mobile HTML5.

See at all the Apps Features at ulrich.tao.at, download the App for iPads, iPhones as well as Android Devices or try the HTML5 Version in your Browser.


HTML5 or Native

It’s a fact that mobile applications these days demand support for multiple platforms. The current iOS as well as Android deliver a really solid user experience, each with it’s own advantages as well as shortcomings. Hence their userbases are quite equally distributed.

Now in essence there are only two possible ways to support both platforms. Either write two separate applications using (mostly) Java for Android and Cocoa/Objective-C for iOS or use HTML5 to share a large part of your codebase for both platforms. Mark Zuckerberg just declared the latter approach dead and claims that Facebook wasted two years trying to go the HTML5 route. On the other hand Linkedin is really happy with their gourgeous HTML5 apps and only needs 5% of native code to fulfill the needs of their userbase.

I for one, really think that Facebooks move to go all native is just plain wrong. First of all it speaks volumes, that Facebook only managed to finish a native iOS version up until now. The native Android version is still in development with no fixed release date available. Second, and more important, going all native looks, smells and tastes like premature optimization in my book. I can think of no valid argument against rapid development of plain HTML Applications, identifying the performance critical parts and only implementing those using native code. Chances are, you only need to optimize a tiny fraction of your code.

On the other hand I can think of plenty of arguments to use HTML for your applications:

  • code-reuse across platforms as well as your web app
  • Less iOS / Android knowledge needed on your development team
  • Surprisingly well standardized development environment (in essence webkit mobile)
  • stick with your existing web app workflows and toolchains

And last but not least there are tons of ressources available these days to build native HTML Apps. Some keywords for your next google search:

  • jQuery Mobile
  • Sencha Touch
  • Apache Cordova
  • Phonegap
  • Zend Studios new UI Based App Generator

Just saying

Let users experience, discover and conquer your application. Don’t try to force your way on them. Watch and learn.


Mac OSX Trackpad click not working

Ever so often my OSX Trackpack suddenly stops working in a strange way. Moving the cursor is possible, but clicks are ignored. Turns out the root of all evil is the osx bluetooth stack – again! By simply disabling and reenabling bluetooth connectivity the trackpad magicly starts working again …


Zerg Rush

Google revives old Starcraft memories HERE


jQueryUI nested Sortable still bugs out on Internet Explorer – easy to fix

Using jQueryUI’s nested Sortables again I was surprised to see, that a rather stupid ie bug still exists for ie8+. In essence, dragging some nested Elements also starts dragging the parent Elements. In most cases this can be fixed quite easily unsing this piece of code from Stackoverflow.

http://stackoverflow.com/questions/1789169/jquery-unexpected-sortable-behaviour/1789775#1789775

Still i would suggest wrapping the code with if( $.browser.msie ) { } because the fix is not needed on other browsers. Mind you that $.browser is deprecated.


WordPress: qTranslate and Shopp Plugin II

Just a quick reminder: Shopp Plugin and qTranslate don’t play nice when it comes to Pretty Links / Permalinks. In this case the root of all evil seems to be WordPress because with a typical setup bloginfo('url') displays http://mydomain.com/en i.e. the correct qTranslate URL, but get_bloginfo('url') returns http://mydomain.com.

One possible fix includes hacking shoppurl in the functions.php file of the Shopp plugin – simply replace get_bloginfo('url') with get_bloginfo('url', 'display').


WordPress: qTranslate and Shopp Plugin

qTranslate is a lets say sufficient free plugin that enables multilingual wordpress setups. For a free plugin it is really feature rich, but when it comes to interact with the really nice shopp plugin, there are a few shortcommings. Especially, there is no way (besides writing qtranslate’s comments by hand) to translate the product summaries. This however can be resolved rather easy, because the product-summary field is more or less identical to wordpress own postexcerpt field. The later can be translated by qTranslate with qTranslates internal qtrans_modifyExcerpt() function.

So if we want to add translation für shopp product summaries, we simply have to take that function, adjust it to our needs and call it at the right spot. Without further ado – add the code below to your functions.php and you are done.

function tao_qtrans_modifyProductSummary() {
	global $q_config;
	echo "<script type="text/javascript">n";
	echo "if(jQuery('#summary').size()>0) {";
	echo $q_config['js']['qtrans_is_array'];
	echo $q_config['js']['qtrans_xsplit'];
	echo $q_config['js']['qtrans_split'];
	echo $q_config['js']['qtrans_integrate'];
	echo $q_config['js']['qtrans_switch_postbox'];
	echo $q_config['js']['qtrans_use'];
	$el = qtrans_getSortedLanguages();
	foreach($el as $language) {
		echo qtrans_createTitlebarButton('product-summary', $language, 'summary', 'qtrans_switcher_product-summary_'.$language);
		echo qtrans_createTextArea('product-summary', $language, 'summary', 'qtrans_switcher_product-summary_'.$language);
	}
	echo "qtrans_switch_postbox('product-summary','summary','".$q_config['default_language']."');";
	echo "jQuery('#summary').hide();";
	echo "}";
	echo "n</script>n";
}

if( function_exists('qtrans_createTitlebarButton') &&
	function_exists('qtrans_createTextArea') ) {
	add_filter('admin_footer', 'tao_qtrans_modifyProductSummary');
}