Why Podcasts are awesome

Am Mittwoch den 16. Juli 2014 fand wieder ein Technologieplauscherl statt, dieses Mal waren wir bei Netural eingeladen. Ich durfte dort einen von vier Vorträgen halten, der Titel meines Vortrages: Why Podcasts are awesome

10446110_763889400298907_7621158855081489775_o

Foto by Klaus Fischer

2014-01-08_1389217354Wie der geneigte Leser meines Blogs (oder meiner anderen social Media Kanäle) ja schon mitbekommen haben dürfte, produziere ich seit ca. einem Jahr gemeinsam mit meinem Freund und Kollegen Andrè Steingreß das Donau Tech Radio.

Der Untertitel unseres Podcasts lautet “österreichischer Podcast rund um Software Entwicklung”. Wir reden über Themen die uns während unserer Arbeit in der Software Entwicklung unterkommen aber auch über News und Gadgets.

Den Vortrag beim Technologieplauscherl habe ich gehalten, weil ich einerseits mehr Leute von Podcasts begeistern will (mehr Hörer unseres Podcasts) und andererseits gerne Leute dazu bringen will selbst Podcasts zu produzieren (mehr Podcasts aus Österreich).

Insgesamt war das Plauscherl bei Netural wieder super – gute Location, super Verpflegung und lauter “Gleichgesinnte” anwesend ;-)

Die Slides zu meinem Vortrag hab ich auf Speakerdeck gestellt und hier embedded:

Apple introduces Swift and does Bret Victor style demo of Playgrounds

When I watched the video of Bret Victor’s presentation “Inventing on Principle” I was really fascinated about how software development tools could look like – take the time, you will enjoy this presentation:

Bret Victor – Inventing on Principle from CUSEC on Vimeo.

Today Apple presented Swift and the new developer tools they are providing around it. They demonstrated a feature called Playgrounds that looks a lot like Bret showed:

This is really exciting, I am looking forward to experiment with this.

Solar Roadways and Google’s self driving car

This week two videos went through my news feed that fit together perfectly:

1. The solar road

Wow, this looks really like it could solve a lot of our current problems. I am sure there are still many thing that need to be solved but we can support the project at Indiegogo.

2. Google’s self driving car

I can see those two combined in future where we get the electrical power we need for our (self driving) cars directly from the road we are driving/standing on.

Outlook 2013 does not trim Internet calendar URL

For our time tracking software we provide a feature that allows users to show their time recordings in their calendar application. Therefor we provide a special URL that includes a unique token to allow access to the entries of the user. The URL looks like

https://troii.timr.com/timr/cal/workingtime-1b9119c3-42a2-a5d4-5e97b8f4cda2.ics

It includes a token that authenticates the user and does not need extra login information to access the calendar.

Lately we had some support requests saying that Outlook 2013 asks for a username and a password when using this URL to subscribe to a “internet calendar”. We looked into our log files and found the following:

112.xx.xx.xxx - - [11/May/2014:06:30:00 +0200] "GET /timr/cal/workingtime-1b9119c3-42a2-a5d4-5e97b8f4cda2.ics%20 HTTP/1.1" 200 15217 "-" "Microsoft Office/15.0 (Windows NT 6.2; Microsoft Outlook 15.0.4605; Pro)" 874863 "-" "-" 0

The interesting thing here is the %20 at the end of the URL – it seems there is a space at the end of the URL. We thought it is not possible to add a space to the end of an URL because if you do this in the URL field of a browser it always strips the space character from the URL.

As it turns out this is not the case with Outlook – when you enter an URL that ends with space character it is sent to server like that, which is invalid.

I hope this is a bug and Microsoft fixes it in the next versions because I can not see why this should be a feature.

Fast am Ziel

Nachdem ich letzte Woche auf die neuen powerSpeed Tarife der Energie AG für Privatkunden hingewiesen wurde (hier zu finden), habe ich wieder Mal bei der Energie AG angerufen und um einem solchen Anschluss gebeten.

Der freundliche Herr am Telefon hat mir versprochen sich meine Situation anzusehen und sich wieder zu melden. Diese Woche läutete dann das Telefon und der selbe Herr war dran. Ich habe mich schon auf die nächste Absage eingestellt, doch zu meiner Überraschung und großen Freude, hat er mir mitgeteilt dass ich einen Glasfaseranschluss von der Energie AG bekomme.

Er hat mir dann auch erklärt wie das ablaufen wird. Das hat gezeigt, dass er sich die örtlichen Gegebenheiten schon genau angeschaut hat. Die notwendigen Grabungsarbeiten sollen im März stattfinden. Ich habe dann auch noch sofort einen Vertrag per email erhalten, unterschrieben, gescannt und zurückgesendet.

Das ganze ist für mich ein schönes Weihnachtsgeschenk. Endlich bekomme ich genau den Internetzugang für den ich schon lange gekämpft habe  (fiber to the home). Hoffentlich kommt da nichts mehr dazwischen *fingers crossed*

In diesem Sinne frohe Weihnachten!

Österreich unter den Verlierern beim Ausbau des Glasfasernetzes

Wer mich und meinen Blog kennt, der weiß dass, ich mich hier schon das eine oder das andere mal über den miserablen Zustand der österreichischen Internetzugänge beschwert habe. Heute bin ich auf einen Spiegel Artikel von Sascha Lobo mit dem Titel Ein digitalpolitisches Armutszeugnis gestossen. Darin geht es um verschieden Versäumnisse der deutschen Bundesregierung im Bereich Digitalisierung und es kommt under anderem folgender Punkt vor:

die dramatisch vernachlässigte Infrastruktur. Während andere Länder zweistellige Milliardenförderungen in Glasfasernetze pumpen, ignoriert die Bundesregierung, dass die Unternehmen allein niemals die ungeheuren Investitionen stemmen könnten – und wenn, dann nur mit schädlichen Hilfsmitteln wie der Aufgabe der Netzneutralität oder fatalen Drosselungsdummheiten. Das Resultat: Die Auflistung der 22 europäischen Volkswirtschaften mit den meisten Glasfaseranschlüssen beinhaltet Deutschland gar nicht erst. Weil die Darstellungsgrenze bei einem Prozent liegt. Das klitzekleine Russland kommt auf 14 Prozent Haushalte mit Glasfaser, das superreiche Bulgarien auf 17 Prozent, und in Litauen verfügen mehr als doppelt so viele Haushalte über Glasfaser wie in Deutschland. Und zwar in absoluten Zahlen.

Wenn man sich die Auflistung in dem Bericht “Winners and losers emerge in Europe’s race to a fibre future” ansieht sucht man Österreich unter den Top 22 beim Glasfaserausbau Europas natürlich auch vergeblich. 

Auch der Aspekt der morgen anstehenden Nationalratswahl macht mich nicht zuversichtlich dass sich hier mit der nächsten Regierung viel tun wird.

Named access on the Window object in Safari

downloadThis week we noticed that the user administration of our time tracking app timr behaved different on Safari.

I debugged into that issue and found out that a condition in JavaScript behaved different than in other browsers:

if (assignedGroupTable) ...

The variable assignedGroupTable was defined some lines before with

var assignedGroupTable;

and the condition should be false on the first call of that function, but in Safari it was true. The debugger showed that the value of assignedGroupTable seemed to be a DIV – there was a DIV in the page with an ID assignedGroupTable, but it had never been assigned to that variable. It seemed like Safari automatically assigned the DIV, with the ID, that was equal to the variable name, to the variable.

After a quick search, I came to this article about DOM Element References as Global Variables and I was really surprised, about what I read there. It seems like all modern browser implement the Named access on the Window object, which allows you to access elements via the ID or NAME attribute, simply by using it like a variable in JavaScript.

So why did our code behave different in Safari? I adapted the example the article uses to find the difference in the behaviour of Safari.

On modern browsers (Chrome 29, Safari 6, Firefox 22, IE 10) this logs the button element to the console. But when making a small change the browsers behave different:

In Chrome, Firefox and IE this logs undefined to the console, only Safari still logs the button element!

There were two ways to fix our problem:

  1. rename the ID of the DIV or the variable so that they differ
  2. define the variable in the JavaScript with
    var assignedGroupTable = null;

    setting the value explicitly to null

Wo decided to do the second because it required fewer changes.

Erstes Treffen der Softwerkskammer Linz

Letzten Mittwoch fand in Linz das erste Treffen der Softwerkskammer Linz im Daxbau statt. Die Softwarkskammer ist:

… ein Zusammenschluss von Communities of Professionals, die über den ganzen deutschsprachigen Raum verteilt sind. Uns geht es darum, gute Software zu entwickeln, und zwar im Hinblick auf alle Aspekte.

Wir möchten

  • voneinander lernen und Erfahrungen austauschen
  • die Software erstellen, die der Kunde wirklich braucht
  • sicherstellen, dass unsere Ergebnisse eine hohe interne und externe Qualität besitzen
  • flexible, leicht änderbare Software herstellen

Kurz: Wir wollen die richtige Software entwickeln, und wir wollen die Software richtig entwickeln.

Grundsätzlich wird bei den Treffen praktisch gearbeitet werden, also keine Frontalvorträge gemacht. Beispiel für solche Aktivitäten der Softwerkskammer:

Hört sich interessant an, weil mir die Aussicht gefällt, mal gemeinsam mit einem Entwickler, aus einem ganz anderen Umfeld (Firma, Programmiersprache, …), eine Aufgabe zu lösen und neue Sichtweisen zu bekommen.

Ich habe ja schon mal gebloggt (siehe hier und hier) dass ich es ziemlich cool finde welche Gruppen und Events sich in den letzten Monaten in Linz ergeben haben:

Für mich bieten alle diese Gruppen interessante Themen (und auch Themenüberschneidungen) und ich muss mir wirklich überlegen welche Treffen ich besuche, wenn mehrere in eine Woche zusammenfallen. Bin schon gespannt wie sich diese Treffen weiter entwickeln.

PS: Am Dienstag den 6.8.2013 findet das nächste Technologieplauscherl bei Neturals statt.

Grails 2.2.x and the problem with inner classes

We have been using Grails 2.2.x in some of our projects since it came out last year. Last week when I tried to upgrade another project because it was time to develop some new features I ran into a strange problem after upgrading from 2.1.3 to 2.2.1:

org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Error executing tag : Error executing tag : java.lang.VerifyError: (class: com/troii/project/tags/SomeTag$Info, method: getSession signature: ()Ljavax/servlet/http/HttpSession;) Incompatible object argument for function call
	at com.googlecode.psiprobe.Tomcat70AgentValve.invoke(Tomcat70AgentValve.java:38)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag : Error executing tag : java.lang.VerifyError: (class: com/troii/project/tags/SomeTag$Info, method: getSession signature: ()Ljavax/servlet/http/HttpSession;) Incompatible object argument for function call

I had never seen a java.lang.VerifyError exception before and the second strange thing was that the exception only occured when deploying the war in a tomcat not when starting the app with grails run-app.

Searching the web brought up some JIRA issues:

GRAILS-9627 inner class or enum in domain class breaks unit/integration testing
GRAILS-9784 Using an anonymous inner class in Controller causes VerifyError
GRAILS-10068 inner class in controller class breaks unit testing

and a blog post from someone who experienced the same issue.

Seems like with the update from Groovy 2.0.6 to 2.1.0 caused a compilation problem for inner classes. I had no chance to test with Grails 2.2.2 which was release three days ago but it seems the only workaround currently is to move the inner classe to external ones.

UPDATE: Seems Grails 2.2.2 improved a lot, at least for our project it works.