Roland Weigelt

Born to Code

  • WebAssembly – A new Hope

    Recently, WebAssembly was announced, a new standard that defines a binary format and execution model for the Web. With Google, Mozilla, Microsoft and others voicing their support, my first thought was: Wow, so there is actually hope to get rid of JavaScript someday!

    In this blog post I’ll explain why I think WebAssembly is such a big step in the right direction, even if it’s something that won’t have an immediate impact.

    What’s the problem with JavaScript, anyway?

    JavaScript is a programming language that has quirks (see Seven JavaScript Quirks I Wish I’d Known About or JavaScript garden), lacks important features (e.g. proper arithmetic data types) and isn’t type safe (by design).

    All this doesn’t matter for JavaScript’s original purpose – writing a few lines of script code. In fact, the dynamic nature of JavaScript, i.e. being able to add object properties or change data types on the fly, enables some pretty elegant solutions.

    But writing large amounts of JavaScript in a team of average developers comes with a risk that is higher than in other languages. Bugs that the compiler for a typed language would catch immediately can remain unnoticed for a long time. Renaming identifiers (via find-and-replace in a text editor) or refactoring code can be downright dangerous. Anders Hejlsberg puts it this way: “[…] you can write large programs in JavaScript. You just can’t maintain them.”.

    So why are people using JavaScript?

    • JavaScript in the browser (used in conjunction with other web technologies) enables highly responsive, cross-platform, zero-deployment applications…
    • without any additional client installation (most would consider their favorite non-IE-browser as part of the “basic operating system setup” before any work can be done on a new computer) …
    • … and is good enough for developing almost any kind of application – at least given enough time, budget and/or determination.

    The problem: this “good enough” is an enormous hurdle for any alternative technology. At this point in time, it’s totally unrealistic that a completely new technology will magically appear and win the uphill battle to be available on all platforms, with the same reach as JavaScript-enabled web browsers.

    Fact is, JavaScript (plus other web tech) won. Some people are perfectly fine with this, others (me included) are a bit skeptical what this means for the future of software development –  to put it mildly.

    Is JavaScript the QWERTY of programming languages?

    I started programming in 1983 and since then I’ve witnessed incredible progress. From writing Z80 code that fit into a few kilobytes of RAM to simply using a component without caring, or even knowing, what language it was written in. And then, at some point, writing lots of code using a scripting language (using a document markup language to create application UIs, but that’s another story) became state-of-the-art. I thought we’d be much further in 2015.

    Ok, if replacing the JavaScript ecosystem with something completely new isn’t a realistic option, what can be done to improve the current situation for software developers?

    Option #1: Make JavaScript better

    JavaScript can be improved if all major players agree on the how, when and what. This can happen (see ECMAScript 2015), but sometimes it doesn’t (see ECMAScript 4). Improving a standard takes time, and it’s definitely not a playground for “let’s try this crazy idea and see how it works out when all browser have it”. Plus, some language characteristics simply cannot be changed without breaking a lot of existing code.

    Of course, this “you want to turn X into Y, but you cannot change X and don’t want to start from scratch” is nothing new in the world of programming languages. It’s a recurring pattern that if people have an idea for a programming language [feature] and are not in the position to write a full-blown compiler/interpreter and the matching runtime environment, they choose the route of more or less advanced a preprocessor.

    Which is exactly what happened with JavaScript, too.

    Option #2: Compile-to-JavaScript

    There are quite a few source-to-source compilers (see List of languages that compile to JS). These “transpilers” let you write programs in one language and translate the source code to another – JavaScript.

    In the early days, debugging was kind of painful, because you had to debug the resulting JavaScript. Now that browsers support source maps, the debugging story is straightforward: You step through the original source code, and the debugger keeps track of where program execution is in the JavaScript code behind the scenes.

    Note that source maps are not magic; they can tell the JavaScript debugger the original filename, line and column. If you want on-the-fly inspection of variables, the source language shouldn’t be too far away from JavaScript and its concepts (see the article “Beyond Source Maps” for more on source maps).

    TypeScript is a language that is close to JavaScript by design, extending it e.g. by offering optional typing. The TypeScript compiler translates the source code to idiomatic JavaScript code, i.e. code that a JavaScript developer following certain patterns would write by hand. TypeScript improves the developer experience, but cannot overcome inherent limits of JavaScript. The performance is determined by how fast the JavaScript engine executes JavaScript, obviously, and you still don’t get better (native) arithmetic data types.

    asm.js is “a strict subset of JavaScript that can be used as a low-level, efficient target language for compilers” (quote from the spec). So this is not a language intended to be written by human developers. Instead, a compiler like emscripten compiles a source language to “JavaScript-as-assembly” code. The code still runs in any browser, but for good performance you need an engine that either knows about asm.js or at least can achieve good performance from the JavaScript code that tries to avoid type conversions and garbage collections.

    There are a couple of things to keep in mind regarding asm.js:

    • Currently it is intended for statically-typed languages like C/C++ that use manual memory management. For other languages, you either have to translate the source to e.g. C first, or even translate the whole interpreter/runtime environment.
    • Browser vendors have to adapt their JavaScript engines for significant performance gains.
    • The resulting JavaScript code can be pretty large, so parsing the code on the client becomes a bottleneck (sending the code over the write can be an issue in certain scenarios, too).
    • Debugging is a problem, because the information stored in source maps is not sufficient.

    Finally, what’s WebAssembly about?

    WebAssembly can be thought of as an evolution of asm.js, to have “something” that can execute low-level code which can be optimized and precompiled. The central idea is transport the code in a binary format instead of (mis-)using JavaScript. This results in smaller file sizes and removes the parsing of source code on the client (good for mobile or IoT).

    This “something” will be part of JavaScript engines some day. Part of the high-level goals is to have a polyfill at least for the first step, the minimum viable product, which enables the MVP to run on existing browsers, but I’m not sure how important this will be in practice.

    It is important to note that at first, WebAssembly won’t be a general purpose compilation target for languages other than C/C++. The idea is to work incrementally, gain experience and collect feedback. The long-term vision does contain support for garbage-collected languages, though. Looking at the long list of To-dos it becomes clear that a lot of work is waiting to be done (including better source maps).

    Does WebAssembly have a chance?

    Judging from the collaboration of the big players alone, I’d say yes. Also important: Both the vision and the incremental approach to get there sound reasonable, clearly trying to avoid XHTML 2‘s “death by overambitious design”. WebAssembly is not about throwing away or replacing JavaScript engines. WebAssembly will be added to the engines, which helps interop and means that low-level infrastructure can be reused.

    Again, things will take time, and the first versions will not be suitable for all scenarios. In the long run (we’re talking years, not months), though, WebAssembly is very promising. If you have a general purpose engine/virtual machine in every browser, developers are free to use whatever language they want because the language matters only at compile time, not at runtime.

    And this is the point where we’ll be able to get rid of JavaScript.

  • Emaroo 2.5.0 Released

    Emaroo is a free utility for browsing most recently used (MRU) lists of programs like Visual Studio, Word, Excel, PowerPoint and more. Quickly open files, jump to their folder in Windows Explorer, copy them (and their path) to the clipboard - all with just a few keystrokes or mouse clicks.

    20150525_ScreenShot400x254

    You can download Emaroo 2.5.0 on www.roland-weigelt.de/emaroo

    Getting Started

    • Download, unzip and run the MSI
    • Start Emaroo (e.g. by hitting the Windows key, typing “Emaroo” and pressing Enter)
    • Tip: Right-click the “Emaroo” task bar item and choose “Pin this program to the task bar” from the context menu. If you drag the task bar item to the left-most position, you can start Emaroo anytime by hitting Win+1.
    • Press F1 for a quick reference of the features.

    What’s New?

    • Added: Support for Visual Studio Code (most recently used files and directories). 
    • Added: For IrfanView, now both most recently used files and directories are shown. 
    • Added: Individual applications can be hidden on the new configuration tab.
      20150525_ConfigPage_1
      20150525_ConfigPage_2
    • Fixed: Error message when cancelling a UAC prompt
    • Fixed: Crash at startup on some first-time installations
  • OzCode – or: Why it’s Always a Good Idea to Visit the Exhibitor Booths at a Conference

    You surely have come across the situation when you visit a developer conference with an exhibition area, walk past a booth, see the company logo, read claims about increased productivity and think “ah, whatever”.

    Tip: If you see something that remotely touches your area of work or general interest, do yourself a favor and ask for a product demo. You never know what you may miss.

    I’m at the Microsoft Build conference right now and I stumbled across a fine product that promised increased productivity when debugging C# code – and actually delivers.

    OzCode (http://www.oz-code.com/) is a Visual Studio add-in by the company CodeValue. They have videos on their website, showing off the individual features. Each video is just a couple of minutes and gets to the point really quick.

    I downloaded the trial version, used it on the application I’m working on in my spare time and the “Reveal” feature alone made me regret I haven’t come across this add-in earlier.

    OzCode doesn’t interfere with ReSharper (the OzCode devs are ReSharper users themselves), the pricing is reasonable and they offer free licenses to open source developers and Microsoft MVPs. Definitely worth a look!

  • dotnet Cologne 2015 am 8. Mai 2015

    20150128_Banner

    Ein neues Jahr, eine neue dotnet Cologne: Am 8. Mai 2015 findet bereits zum siebten Mal die größte deutsche Community-Konferenz für Entwickler im Microsoft-Umfeld statt. Für dieses Jahr erwarten wir 400 Teilnehmer im KOMED Veranstaltungszentrum im Kölner Mediapark.

    Wir, das sind Stefan Lange und Melanie Eibl (dotnet Köln/Bonn e.V.), Albert Weinert (.net user group Köln) und ich (Bonn-to-Code.Net). Zusammen mit Sprechern, Sponsoren und Helfern vor Ort organisieren wir die dotnet Cologne als eine Konferenz, die sich jeder leisten kann und die wir selbst gerne besuchen würden.

    Und anscheinend finden auch andere Leute die dotnet Cologne ganz nett – im letzten Jahr waren in weniger als 30 Minuten alle Plätze ausverkauft!

    Wann kann man sich anmelden?

    Die Freischaltung der Anmeldung ist für März geplant, der Termin wird frühzeitig auf der Website, auf Twitter und Facebook bekanntgegeben.

    Was wird es kosten?

    Unser Ziel ist es, die Preise vom Vorjahr anzubieten, insbesondere den Super-Early-Bird für nur 25,- Euro.

    Sprecher gesucht!

    Eine erste Runde des “Call for Papers” ist bereits gelaufen und die ersten Sprecher und Vorträge sind online. Wir sind aber weiter auf der Suche, um die sechs Tracks mit interessanten Sessions zu füllen. Von der Einführung bis zum Deep Dive, vom Mainstream bis zum Spezialthema – wer Interesse hat, die dotnet Cologne 2015 mitzugestalten, findet hier alle Infos dazu.

    Sponsoren gesucht!

    Es macht uns schon ein wenig stolz, wenn Sponsoren kurz nach einer Konferenz bereits ihre Teilnahme für das nächste Jahr ankündigen. Insbesondere die Sponsoren mit Ständen im Ausstellungsbereich zeigen sich begeistert von den Möglichkeiten, mit den Teilnehmern ins Gespräch zu kommen und nicht zuletzt davon, wie qualifiziert das Publikum ist.

    Wer 400 Entwicklern sein Produkt, seine Dienstleistung oder ggf. seine Firma als Arbeitgeber vorstellen möchte, kann sich an Melanie Eibl (Melanie.Eibl [at] dotnet-koelnbonn.de) für weitere Informationen über die vielfältigen Sponsoring-Möglichkeiten wenden.

  • Emaroo 2.2.0 Released

    Emaroo is a free utility for browsing most recently used (MRU) lists of programs like Visual Studio, Word, Excel, PowerPoint and more. Quickly open files, jump to their folder in Windows Explorer, copy them (and their path) to the clipboard - all with just a few keystrokes or mouse clicks.

    20150130_ScreenShot400x238

    You can download Emaroo 2.2.0 on www.roland-weigelt.de/emaroo.

    Getting Started

    • Download, unzip and run the MSI
    • Start Emaroo (e.g. by hitting the Windows key, typing “Emaroo” and pressing Enter)
    • Tip: Right-click the “Emaroo” task bar item and choose “Pin this program to the task bar” from the context menu. If you drag the task bar item to the left-most position, you can start Emaroo anytime by hitting Win+1.
    • Press F1 for a quick reference of the features.

    What’s New?

    • Added: Files can be dragged outside the application window (e.g. to copy them to a folder or open them in another application). This will not affect the most recently used list.
    • Fixed: Context menu not updating items to match the "always open as administrator" option when using the menu key on the keyboard.
    • Fixed: Bitmap cache files of old versions not being removed.

    You can read the complete version history on the Emaroo website.

  • Emaroo 2.1.0 Released

    Emaroo is a free utility for browsing most recently used (MRU) lists of programs like Visual Studio, Word, Excel, PowerPoint and more. Quickly open files, jump to their folder in Windows Explorer, copy them (and their path) to the clipboard - all with just a few keystrokes or mouse clicks.

    ScreenShot400x238

    You can download Emaroo 2.1.0 on www.roland-weigelt.de/emaroo.

    Getting Started

    • Download, unzip and run the MSI
    • Start Emaroo (e.g. by hitting the Windows key, typing “Emaroo” and pressing Enter)
    • Tip: Right-click the “Emaroo” task bar item and choose “Pin this program to the task bar” from the context menu. If you drag the task bar item to the left-most position, you can start Emaroo anytime by hitting Win+1.
    • Press F1 for a quick reference of the features.

    What’s New?

    Version 2.1.0 adds an option in the context menu for Visual Studio solutions to always open a solution as administrator:

    ContextMenu

    Checking the option adds a small file to the directory where the solution is located; if the solution is named e.g. Example.sln, the marker file will be named Example.sln.openAsAdmin. So this transfers to other systems when you check the file into source control. Unchecking the option deletes the file (and vice versa).

    You can read the complete version history on the Emaroo website.

  • Emaroo 2.0.0 Released

    Emaroo is a free utility for browsing most recently used (MRU) lists of applications like Visual Studio, Word, Excel, PowerPoint and more. Quickly open files, jump to their folder in Windows Explorer, copy them (and their path) to the clipboard - all with just a few keystrokes or mouse clicks.

    ScreenShot400x238

    Emaroo 2.0.0 adds support for Illustrator (CS6/CC/CC2014), lets you now open files in a text editor, copy files to the clipboard (for pasting them into an Explorer window) and fixes some UI glitches on systems with high DPI settings.

    You can download Emaroo 2.0.0 on www.roland-weigelt.de/emaroo.

    For examples of how Emaroo can speed up working with files, take a look at the “Why Emaroo?” section of the blog post announcing version 1.4.0.

  • UI/UX-Workshop auf der GUI&DESIGN 2014 in Berlin

    Vom 9.-10. Dezember findet in Berlin die GUI&DESIGN 2014 statt, eine Fachkonferenz rund um grafische Bedienoberflächen im Microsoft-Umfeld.

    Im Rahmen des zugehörigen Workshop-Tags am 8. Dezember halte ich einen Workshop mit dem Titel

    Von Null auf GUI - Praxiswissen für Entwickler

    Dieser Workshop vermittelt Entwicklern ohne UI/UX-Vorkenntnisse in einem Crash-Kurs sowohl ein Grundverständnis für die Materie, als auch das notwendige Handwerkszeug, um selbst ansprechende Bedienoberflächen gestalten zu können. Vortragsteile und praktische Übungen wechseln sich dabei ab, um das Erlernte in Einzel- und Gruppenarbeiten direkt vertiefen zu können.

    Diesen Workshop habe ich schon einige Male gehalten, u.a. auf der GUI&DESIGN 2013. Es hat jedesmal sehr viel Spaß gemacht und besonders die Übungen sind immer wieder spannend, wenn die Teilnehmer in kleinen Gruppen nach und nach komplexere Aufgaben lösen.

    Einige der Themen:

    • Menschliche Wahrnehmung: Warum ist man manchmal einfach "blind", wenn man einen Button in einer GUI sucht, aber nicht findet?
    • Visuelles Design für Nicht-Designer: Ein paar Grundregeln, um auch mit wenig Talent zu brauchbaren Ergebnissen zu kommen.
    • User Experience: Wie Gefühle das Handeln von Anwendern bestimmen und wie das Wissen darüber hilft, bessere Bedienoberflächen zu gestalten.
    • Das passende Werkzeug zur richtigen Zeit: Mit Stift und Papier Zeit und Geld sparen - auch wenn man gar nicht zeichnen kann.
    • Selbstverständliches abstrakt betrachten: Mit einem scharfen Blick auf Daten und ihre Eigenschaften Erkenntnisse für die GUI-Gestaltung gewinnen.

    Wer sich als Entwickler wünscht, bessere GUIs gestalten zu können, sich aber bisher die Frage nach einem Einstieg mit verwertbaren Erkenntnissen für den Alltag gestellt hat, für den ist dieser Workshop genau das Richtige.

    Alle Infos zur Konferenz: http://gui-design.ppedv.de

  • .NET Rocks! – on Fusion!

    I’ve been following the “.NET Rocks!” podcasts of Carl Franklin and Richard Campbell for many years now. They’ve had virtually all well-known names of the .NET development community on the show and hearing the podcasts is a good way to kill time on a flight, in the gym or elsewhere.

    From time to time they feature so-called “GeekOut” shows on topics other than software development. In recent months they had three shows on fusion science:

    The two shows on “hot” fusion were both fascinating and sobering at the same time, as the promise of “clean” energy seems to be far away – not only for “we haven’t figured that details out yet” reasons, but because of some very hard-core problems that are more or less being pushed back and ignored in order not to disturb the big machinery that is “Big Science”.

    The third show looks back at the circumstances of the original announcement and mentions current work by Mitsubishi that is not about producing energy, but basic research on nuclear reactions at low temperatures.

    Of course, a podcast can only scratch the surface of such heavy topics, but if you want something entertaining apart from software development that is interesting, yet easy to consume on the treadmill, give these episodes a listen.