Höhe: 2677m

Immernoch im Urlaub gings heute mal auf einen "richtigen" Berg. Am Glungezer Klettersteig konnte ich dann auch mal das Klettersteigset sponsert by Meine Schwester alias Gipfelshop.de ausprobieren (zur Sicherung, die ich zum Glück nicht in Anspruch nehmen musste). So anstregend, wie's ist, Spass machts schon. Und die Aussicht vom Gipel ist es allemal wert:

Aussicht von der Sonnenspitze

Tags , , , , ,

Posted in | Posted on 01 Aug 2009 18:59by Tobi | no comments

eTobi macht Urlaub!

Nich wundern, wenn es momentan keine VDR-Paket-Updates gibt oder ich nicht auf Emails antworte, denn ich mache Urlaub!

Diesmal geht es nicht weit weg, sondern hoch hinaus. Ich bin im Kaisergebirge unterwegs und habe mich bei meiner Schwester in Kiefersfelden einquartiert. Zum warm werden gings heute erstmal bei sachten 1500m auf den Pendling - ist nach der lokalen Definition eigentlich noch garkein Berg, denn die fangen hier erst an, wenn ne 2 davor steht :-). Trotzdem ein schöner Ausblick runter auf den Inn und Kufstein, wenn auch Wetter-bedingt etwas wolkenverhangen.

Pendling

Aber morgen soll auch hier wieder mehr Sonne scheinen und dann gehts mit nem Klettersteigset und Helm ausgerüstet richtig los. Interessante Touren gibt es viele (www.klettersteige-online.de) - mal sehen, was ich mir alles zutraue :-)

Und noch etwas Werbung in eigener Sache: Im Gipfelshop, den meine Schwester betreibt, gibts versandkostenfrei jede Menge Ausrüstung, Karten, Wander- und Klettersteigführer und vieles mehr. Also wer etwas in dieser Richtung benötigt - jetzt wisst ihr, wo ihr's bekommt! :-)

Tags , , , , ,

Posted in | Posted on 31 Jul 2009 21:03by Tobi | no comments

WPF-Howto #1 - Making your buttons beep

During the last weeks I've been doing a lot of WPF when migrating a MVC (Model-View-Controller) based WinForms application to the Windows Presentation Foundation using the MVVM (Model-View-ViewModel) pattern and the fabulous Caliburn Framework.

When I touched WPF the first time about 1,5 years ago, my first thought was: "Oh no... not just XML again!". But over the time, I started to love it. I'm feeling very comfortable with editing the xaml files by hand, without the support of any design tool - the basic and commonly used layouts and components are as easy to use as HTML. When I did some GTK development with Glade yesterday, I painfully missed my beloved Stackpanel, Grid and Margin Property :-)

While 90% of the daily work with WPF is pretty easy, the other 10% sometimes can be tricky. Thankfully in most cases I'm not the first one that encounters a specific problem and often find a solution in a blog or forum post.

"Time to post some hopefully helpful tips myself", I thought, and here we go:

Click me!

For a WPF touch screen interface, I required all buttons in the application to make a "click" sound when beeing pressed.

"There must be a way to do this in XAML only", I thought and came up with this solution:

<Window x:Class="RoutedClickEvent.Window1" ...>
<Window.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
        <EventTrigger.Actions>
            <SoundPlayerAction Source="/RoutedClickEvent;component/click.wav" />
         </EventTrigger.Actions>
    </EventTrigger>
</Window.Triggers>
...

This works fine - Easy Peasy!

But not so fast my young padawan!

If I have anything in a buttons event handler, that causes a noticable delay (e.g. showing a modal dialog), the button sound will be delayed as well.

The reason is, that the Click event is a bubbling event. It bubbles from the button itself up to the Window. That means, the buttons click event handler will be executed, before the event is triggerd on the window, causing the click sound to appear delayed.

My next thought was, to go with the PreviewMouseDown event (which is a tunneling event, that will be handeled before the buttons click event). Unfortunately, this required some code:

private void Window_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    var source = e.OriginalSource as DependencyObject;
    var button = source as ButtonBase;
    while (button == null && source != null)
    {
         source = VisualTreeHelper.GetParent(source);
         button = source as ButtonBase;
     }
     if (button != null)
     {
         var stream = Application.GetResourceStream(new Uri("pack://application:,,,/PreviewMouseDownHandler;Component/click.wav"));
         new SoundPlayer(stream.Stream).Play();
     }
 }

Works fine, but walking up the visual tree to figure out, if the mouse down event happend on a button, feels terribly wrong!

"Use the Styles Luke!" - Now I tried to apply a style to the buttons, that makes them play the click sound when pressed. You indeed can wire events with the <EventSetter> tag. But I want my style to be defined in a separate ResourceDictionary, so I don't have any instance I could wire the event to.

And now it becomes a little bit weired - I created a code behind file for the ResourceDictionary! I didn't really expected this to work, but it did! To do so, just add a x:Class attribute to the ResourceDictionary, create a new class file with "MyResourceDictionary.xaml.cs" and the partial class "MyResourceDictionary" and vour la! If you want the code behind file to appear as a child of the xaml file in VisuaStudio, you can also add a DependentUpon tag to the code behind node in the *.csproj:

<Compile Include="NoisyButton.xaml.cs">
    <DependentUpon>NoisyButton.xaml</DependentUpon>
</Compile>

Now that the ResourceDictonary has a code behind, I can wire the click event in the style settings to the code behind class:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="StyleWithCodeBehind.NoisyButton">
    <Style TargetType="Button">
        <EventSetter Event="PreviewMouseDown"
                     Handler="OnClick" />
    </Style>
</ResourceDictionary>

public partial class NoisyButton
{
    private void OnClick(object sender, RoutedEventArgs e)
    {
        var stream = Application.GetResourceStream(new Uri("pack://application:,,,/StyleWithCodeBehind;Component/click.wav"));
        new SoundPlayer(stream.Stream).Play();
    }
}

Now just merge the ResourceDictionary in the main window or App and you will hear the buttons click:

<Window x:Class="StyleWithCodeBehind.Window1" ...>
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="NoisyButton.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <StackPanel>
        <Button>Click me!</Button>
        <Button Click="Button_Click">Click me harder!</Button>
    </StackPanel>
</Window>

A ResourceDictionary with a code behind file is kinda cool, but there's an easier way to make the buttons click. Indeed it's so easy, I should have come up with this in the first place:

<Style TargetType="Button">
    <Style.Triggers>
        <EventTrigger RoutedEvent="PreviewMouseDown">
            <SoundPlayerAction Source="/XamlOnlyClickingButton;component/click.wav" />
        </EventTrigger>
    </Style.Triggers>
</Style>

Lesson learned - don't think too complicated!

Download Source Code

Tags , , , ,

Posted in | Posted on 20 Jul 2009 19:30by Tobi | no comments

...3 - 2 - 1 - WolframAlpha! We have a lift-off!

Mit viel Brimborium ging letzte Nacht WolframAlpha, die neue "Wissensmaschine", online. Mit Live-Übertragung und Kontrollzentrum war das schon ziemlich abgefahren und erinnerte ein wenig an den Launch einer Ariane-Rakete bei der ESA. Die Live-Übertragung war an sich auch ganz interessant, aber nach einer halben Stunde hat dann doch die Müdigkeit gesiegt.

Inwzischen kann man WolframAlpha auch tatsächlich testen, auch wenn sich HAL ab und zu noch beschwert:

Fehlermeldung WolframAlpha

Das volle Potentiel erschließt sich mir noch nicht so ganz, aber immerhin weiß ich jetzt, dass einer von 3922 Geburten in den USA den Namen Tobias bekommt, dass bei all der geballten Intelligenz von WolframAlpha Zella-Mehlis nicht als Ort erkannt wird (hier muss man selber etwas Intelligenz zeigen und den Bindestrich weglassen) und das Wolfram besser rechnen kann als Google (siehe auch: Why Do Computers Suck at Math?). Den Regenwald kann WolframAlpa auch nicht retten. Das kann nur die Forestle Suchmaschine.

Und wer es schon immer mal wissen wollte, die größte Frau der Welt ist so groß, wie das 1,3-fache der Länge der DNA-Stränge ihres Genoms.

Tags

| Posted on 16 May 2009 09:55by Tobi | no comments

Star Trek XI - The Fast and the Furious

Gerade komme ich von Star Trek XI nach Hause und muss jetzt ganz einfach mal meinen Senf dazu loswerden.

Vorsicht ! Spoiler ahead! Wer den Film noch nicht gesehen hat, sollte besser nicht weiterlesen!

Für mich ist Star Trek: "Neue, unbekannte Zivilisationen zu entdecken und dorthin zu gehen, wo noch nie ein Mensch zuvor gewesen ist". ...Star Trek XI ist das leider nicht.

Der Film ist ganz nett, wenn man keinen Star Trek-Film erwartet. Zwar ist der Film auch für Fans durchaus sehenswert, da es viele kleine Anspielungen an alte Star Trek-Folgen gibt, aber unterm Strich fehlt ganz einfach das Flair, das Star Trek ausmacht.

Die Besetzung ist eigentlich garnichtmal so schlecht. Karl Urban gibt einen ziemlich guten Dr. "Pille" McCoy ab und Spock fand ich mit Zachary Quinto gut besetzt. Auch der Rest gäbe eine recht gute Enterprise-Crew ab, hätte man ihnen die Gelegenheit dazu gegeben. Schmerzlich vermisst habe ich ein "Ey ey, Captain" von Simon Pegg als Scotty. Leider läuft der ganze Film im Schnellvorlauf ab, was den Charakteren irgendwie die Möglichkeit nimmt miteinander zu interagieren. Stattdessen werden Spock und Uhura zum Knutschen in den Turbolift gesteckt, Scotty darf eine Fahrt in der Wasserrutsche machen, Kirk muss auf einem Eisplaneten vor CGI-Monstern davon rennen und Chekov hat Mühe dem Schiffscomputer mit seinem russischen Akzent Anweisungen zu geben. Und wo ich gerade beim Schiff bin - Die Enterprise sieht zwar von außen so aus, wie man sie erwartet, aber der Innenraumdesigner hat total versagt. Der Maschinenraum erinnert eher an eine Ölraffinnerie oder Chemiefabrik als an ein Raumschiff. Im krassen Gegegensatz dazu ist die Brücke ultra-modern und stylisch. Das passt weder zusammen, noch erinnert es an irgendeine Version der Enterprise, die es jemals gab. Wenigstens der Transporterraum war ok.

Die Storyline ist nicht sonderlich einfallsreich - Tätowierter Romulanischer Kohle-Kumpel wird nach der Zerstörung von Romulus in die Vergangenheit verschlagen, wo er sich an Spock und dem Rest der Förderation wegen unterlassener Hilfeleistung rächen will. Am Ende sind die Planeten Romulus und Vulkan zerstört, es gibt nur noch eine Hand voll Vulkanier und Spocks Mutter ist tot, was letztendlich auf eine vollständig neue Zeitlinie hinausläuft, die mit dem "alten" Star Trek-Universum nicht mehr viel zu tun hat. Immerhin gibt das die Möglichkeit, in einer etwaigen Fortsetzung im Kino oder auf der Mattscheibe ohne den "Druck" an alte Star Trek-Folgen anschließen zu müssen, etwas neues auf die Beine zu stellen. So hört der Film auch an der Stelle auf, an der ich ihn gerne hätte beginnen sehen: Zu den Klängen von Alexander Courage fliegt die Enterprise neuen Abenteuern entgegen.

Auch Vor- und Abspann des Films sind nicht sehr Star Trek-like. Immerhin wurde ganz zum Schluß, wenn eigentlich schon niemand mehr im Kino sitzt, eine Widmung für Gene und Majel Roddenberry platziert. Schade, das Kinofilme in Deutschland immer synchronisiert werden, denn in Star Trek XI ist die letzten Dezember verstorbene Majel Barrett Roddenberry leider zum letzten mal als Computerstimme zu höhren.

Bleibt zu hoffen, dass es ein Star Trek XII geben wird und Kirk & Co. dann endlich die Gelegenheit bekommen, neue Welten zu erforschen, neues Leben und neue Zivilisationen.

Fazit: Viel Action - wenig Spannung, viele Star Trek-Referenzen - wenig Star Trek-Feeling, gute Schauspieler - doofes Drehbuch. Trotzdem: Anschauen und selber eine Meinung bilden! Wenn man nicht mit all zu hohen Erwartungen ins Kino geht, bietet der Film durchaus kurzweilige Unterhaltung. Der Film hat viele gute Ansätze, vieles ist aber meiner Meinung nach auch einfach nur in die Hose gegangen.

Tags , , , ,

Posted in | Posted on 07 May 2009 23:09by Tobi | no comments