Roland Weigelt

Born to Code

  • New Blogging Platform!

    My blog has been moved to Orchard CMS as the new blogging platform. I have been able to play around with a beta version of the site in the last weeks and the first impression is pretty good. While I have tweaked the features to resemble what the old blog offered, I haven’t found the time yet to work on the styling (which I don’t want to recreate on the new platform anyway).

  • Clippy for ReSharper

    You know, it’s that day again when April fool’s jokes appear all over the web – and the guys from JetBrains have one, too: They announced Clippy for ReSharper.

    20140401_Clippy

    But instead of just slapping together a few faked screenshots for their blog post, they actually wrote a ReSharper extension that you can download from the Visual Studio Extension Gallery (ReSharper 8.1 or 8.2 required).

    The extension replaces the default context menu, e.g.

    20140401_Default

    While I cannot imagine anybody actually using Clippy in their daily work, I really like this nice little piece of software.

  • dotnet Cologne 2014 – ausgebucht in 30 Minuten!

    Gestern Mittag um 12:00 wurde die Anmeldung für die dotnet Cologne freigeschaltet, 30 Minuten später waren alle Teilnehmerplätze belegt!

    Letztes Jahr gingen 310 Karten in den Verkauf, die in 4 1/2 Stunden vergriffen waren. Dieses Jahr konnten wir im Komed einen der kleineren Vortragsräume durch einen neu geschaffenen, größeren Raum ersetzen sowie weitere Flächen anmieten. Aber die 30 zusätzlichen Plätze waren nur ein Tropfen auf den heißen Stein…

    Wer auf den vorderen Plätzen der Warteliste steht, darf sich aber durchaus berechtigte Hoffnung machen. Von den 40 Karten, die den Sponsoren theoretisch zur Verfügung stehen, werden erfahrungsgemäß nicht alle genutzt (und gehen auch früh genug wieder zurück an uns). Und dann gibt es eine ganze Reihe von Teilnehmern, die entweder stornieren oder aber schlichtweg nicht bezahlen. Also: Es besteht noch Hoffnung!

  • Anmeldung zur dotnet Cologne 2014 am 12.3.2014 um 12:00

    dnc14_banner_468x60

    Am 9. Mai 2014 findet zum sechsten Mal die dotnet Cologne statt.

    Die Anmeldung wird am 12. März 2014 um 12:00 freigeschaltet.

    Es empfiehlt sich, vorher einen Account anzulegen bzw. einen evtl. noch aus dem Vorjahr existierenden Account zu überprüfen (z.B. um die eingetragene Email-Adresse zu aktualisieren).

    Im Vorjahr war die dotnet Cologne 2013 in 4 1/2 Stunden ausverkauft, man sollte also mit der Anmeldung nicht zu lange warten.

    Sind alle Plätze belegt, werden die folgenden Anmeldungen auf eine Warteliste umgeleitet (first in, first out). Da es erfahrungsgemäß einige Stornierungen und den einen oder anderen Rückläufer von Sponsorentickets gibt, haben die vorderen Positionen auf der Liste gute Chancen nachzurücken.

    Weitere Infos zur dotnet Cologne 2014 auf http://dotnet-cologne.de

  • A C# Feature I’d Really Like to See in a Future Version

    In C#, if you declare a variable somewhere inside curly braces, that variable cannot be accessed from the outside. Examples are (private) member variables inside a class, (local) variables inside functions or statement blocks in general.

    What I really would like to see in a future version of C# are variables that can only be accessed within a property declaration. Then it would be possible to write something like this:

    class MyClass
    {
        public string MyProperty
        {
            string _myProperty; // only accessible from within MyProperty
    
            get
            {
                DoSomething();
                return _myProperty;
            }
            set
            {
                _myProperty=value;
                DoSomethingElse();
            }
        }
    }

    Looks like other people had the same idea, the feature is already suggested on UserVoice. The original author of the suggestion had a different reason for the suggestion (citing documentation requirements); the benefit that I and another commenter see is the additional encapsulation. By declaring the variable the way it is shown above, you could express the intent that the backing field isn’t intended to be accessed directly, helping other people reading the code (or yourself in a couple of weeks…).

    If you agree that the feature would be a valuable addition to the C# language, it would be nice if you could vote for it on UserVoice.

  • dotnet Cologne 2014 am 9. Mai 2014

    dnc14_banner_468x60

    Am 9. Mai 2014 findet zum sechsten Mal die dotnet Cologne statt, wie in den Vorjahren im Komed im Mediapark Köln.

    Diese von Stefan Lange und Melanie Eibl (dotnet Köln/Bonn e.V.), Albert Weinert (.net user group Köln) und mir (Bonn-to-Code.Net) organisierte Konferenz hat sich im Laufe der Jahre zum größten deutschen Community Event rund um Entwicklerthemen im Microsoft-Umfeld entwickelt. Die 350 Teilnehmer-plätze sind jeweils in kürzester Zeit belegt, die Konferenz immer Wochen im Voraus ausgebucht.

    Wer einen Eindruck von der Konferenz erhalten möchte, dem empfehle ich das foldende Video auf YouTube, dass anlässlich der dotnet Cologne 2012 entstanden ist: http://youtu.be/NYfsaMKHeoU

    Das Erfolgsgeheimnis ist eigentlich keines – wir, hauptberuflich in der Software-Entwicklung tätig, organisieren in unserer Freizeit einfach eine Konferenz, die wir selbst gerne besuchen würden. Und egal wie groß die Begeisterung nach einer Konferenz auch ist (das überwältigend positive Feedback motiviert natürlich auch ungemein), schauen wir uns alle Kritikpunkte und Verbesserungs-vorschläge immer sehr genau an. So schaffen wir es, Jahr für Jahr noch einen Tick besser zu werden und auch für die dotnet Cologne 2014 haben wir wieder ein paar Details überdacht. Aber dazu mehr in einem der kommenden Blog-Einträge.

    Wann kann man sich anmelden?

    Die Freischaltung der Anmeldung ist für März geplant und 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 2014 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. So sind wir im Bereich der Platin-Sponsoren auch bereits ausgebucht.

    Wer 350 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) wenden. Wir bieten eine Vielzahl von Sponsoring-Möglichkeiten, von der Software-Lizenz für die Verlosung bis hin zu Ständen vor Ort. Melanie schickt dann unsere Informationsbroschüre und beantwortet alle Fragen zum Thema Sponsoring.

  • Emaroo 1.5.0 Released

    Emaroo is a free utility for browsing most recently used (MRU) lists of various applications. Quickly open files, jump to their folder in Windows Explorer, copy their path - all with just a few keystrokes or mouse clicks.

    ScreenShot400x238

    Emaroo 1.5.0 is now out, adding support for Photoshop CC and Notepad++.

    You can download it 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 the previous version.

  • UI/UX-Workshop auf der GUI & DESIGN 2013 in Frankfurt

    Vom 10.-11. Dezember findet in Frankfurt die GUI&DESIGN 2013 mit Vorträgen rund um grafische Benutzeroberflächen statt.

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

    Von Null auf GUI – Kreative Gestaltung 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.

    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 auf http://gui-design.ppedv.de/

    Tipp: Wer sich für den Workshop interessiert und Geld sparen möchte, kann sich über das Kontaktformular an mich wenden – ich habe eine Reihe von Promo-Codes zu vergeben, die 50 Euro Rabatt wert sind!

  • Emaroo 1.4.0 Released

    Emaroo is a free utility for browsing most recently used (MRU) lists of various applications. Quickly open files, jump to their folder in Windows Explorer, copy their path - all with just a few keystrokes or mouse clicks.

    ScreenShot400x238

    tl;dr: Emaroo 1.4.0 is out, go download it on www.roland-weigelt.de/emaroo

    Why Emaroo?

    Let me give you a few examples. Let’s assume you have pinned Emaroo to the first spot on the task bar so you can start it by hitting Win+1.

    To start one of the most recently used Visual Studio solutions you type

    Win+1, [maybe arrow key down a few times], Enter

    This means that you can start the most recent solution simply by

    Win+1, Enter

    What else?

    • If you want to open an Explorer window at the file location of the solution, you type Ctrl+E instead of Enter.
    • If you know that the solution contains “foo” in its name, you can type “foo” to filter the list. Because this is not a general purpose search like e.g. the Search charm, but instead operates only on the MRU list of a single application, you usually have to type only a few characters until you can press Enter or Ctrl+E.
    • Ctrl+C copies the file path of the selected MRU item, Ctrl+Shift+C copies the directory

    • If you have several versions of Visual Studio installed, the context menu lets you open a solution in a higher version.

    • Using the context menu, you can open a Visual Studio solution in Blend.

    So far I have only mentioned Visual Studio, but Emaroo knows about other applications, too. It remembers the last application you used, you can change between applications with the left/right arrow or accelerator keys.

    Press F1 or click the Emaroo icon (the tab to the right) for a quick reference.

    Which applications does Emaroo know about?

    Emaroo knows the MRU lists of

    • Visual Studio 2008/2010/2012/2013
    • Expression Blend 4, Blend for Visual Studio 2012, Blend for Visual Studio 2013
    • Microsoft Word 2007/2010/2013
    • Microsoft Excel 2007/2010/2013
    • Microsoft PowerPoint 2007/2010/2013
    • Photoshop CS6
    • IrfanView (most recently used directories)
    • Windows Explorer (directories most recently typed into the address bar)

    Applications that are not installed aren’t shown, of course.

    Where can I download it?

    On the Emaroo website: www.roland-weigelt.de/emaroo

    Have fun!

  • Using a VisualBrush for Slicing Content

    In a recent blog post I mentioned my hobby of supporting the local Basketball team, the Telekom Baskets Bonn. This post is about what I’m currently working on, describing a use case for WPF’s VisualBrush along the way.

    First a little background: For the upcoming 2013/2014 season, all first-division clubs are required by league regulations to use LED-based perimeter advertising systems in their arenas. The Telekom Baskets Bonn have decided on an LEDCON system consisting of 11 modules with a resolution of 768 by 80 pixels each (they are not delivered yet, so no photos to show at this time).

    The system comes with ready-to-use software that allows both pre-rendered video and still images to be shown using multiple playlists. But of course, it would also be very interesting to display custom content that is generated dynamically.

    Fortunately, accessing the modules is pretty simple: The hardware controller for the modules is connected to a PC via DVI, making Windows believe it is a regular monitor. In order to offer a flexible solution which allows modules to be stacked to form a large video wall, the “monitor” does not have a horizontal resolution of 11*768 = 8448 pixels (with a vertical resolution of 80 pixels). Instead, the hardware grabs the content displayed in an area of 768 by 880 pixels and distributes it to the modules: The pixels (0,0) to (767,79) are shown on the first module, the pixels (0,80) to (767,159) on the second module, and so on.

    20130831_Court

    The program I’m developing right now is intended to complement, not replace, the existing software. The idea is to treat the pixels of all LED modules as one contiguous area of 8448 by 80 pixels internally, allowing easy creation of content spanning multiple modules.

    For the UI I decided to use WPF; not only because I wanted to re-use components of my existing software LiveTexter, but also because the VisualBrush makes it almost trivial to split dynamic, live content into slices and rearrange it as needed.

    The Basics

    The VisualBrush is a brush that paints an area with a Visual (or a part of it), hence the name. For my use case, I wanted each slice to be represented by a rectangle that is painted with a specific part of the original content. It’s simply a matter of defining a VisualBrush for each slice, all with the same Visual, but different ViewBoxes:

    20130831_ViewBox

    The following code shows how easy this is:

    slice.Fill = new VisualBrush
    {
        ViewboxUnits = BrushMappingMode.Absolute,
        Viewbox = new Rect(index*width, 0, width, height),
        Visual = sourceVisual
    };
    • slice is a rectangle that will be added to a StackPanel,
    • width and height specify its size,
    • index is the index of the LED module.

    And the best part is that changes to the content, e.g. animated elements, are handled automatically – the brush is really “live”.

    The ContentSlicer Control

    I wrote a custom control called “ContentSlicer” for my purposes; while I doubt that you will use it as-is, it may be useful as a starting point for your own controls.

    You can download the source code here as a Visual Studio 2012 project, together with a simple demo that scrolls a Lorem Ipsum text over a static background:

    image

    Please note the included ReadMe.html file that explains the usage of the control.

    Recommended Reading

    The MSDN documentation on VisualBrush and its base class TileBrush is surprisingly good, if you piece the available information together.

    I recommend reading the following articles for a better understanding: