Bartek Szafko

all of the bits and pieces

Archive for the ‘Development’ Category

Wizardy w AERO

with one comment

W viście są dosyć fajnie dopracowane kontrolki – to już wiecie. Moją szczególną uwagę zwróciły wizardy w aero, taki jak na przykład przy dodawaniu nowej drukarki:

image image

To co głównie wyróżnia tego wizarda to przycisk wstecz w lewym górnym rogu i olbrzymi pasek tytułowy ( jak na mój gust nawet za duży).

Szukałem sposobu w jaki by można zrobić takiego wizarda we własnej aplikacji, który byłby zgodny z systemowym. Okazuje się, że istnieje nawet przykład, który pokazuje jak to zrobić w .NET, oczywiście jak zwykle w msdnie sprawa nie jest banalna i wpierw należy pobrać Vista Bridge Controls. Po skompilowaniu wszystkiego możemy zacząć używać fajnych aero wizardów w WPF:

image

image

Zrobienie czegoś takiego wymaga dosyć prostego xamla:

<v:AeroWizard x:Class="Wizard.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:v="clr-namespace:Microsoft.SDK.Samples.VistaBridge.Controls;assembly=VistaBridgeControls"
    xmlns:l="clr-namespace:Wizard"
    MainInstruction="AERO Wizard Test"
    Title="Connect to a workplace"
    >
  <v:AeroWizard.Pages>
    <Page>
      <StackPanel>
        <v:CommandLinkWPF Link="Choice One"  Note="(Recommended)"  Click="OnClick" />
        <v:CommandLinkWPF Link="Choice Two"  Note="(Not Recommended)" Click="OnClick" />
        <v:CommandLinkWPF Link="Choice Three"  Note="(Never Use)" />
      </StackPanel>
    </Page>
    <Page>
      <StackPanel>
        <v:CommandLinkWPF Link="Some Other Link text"  Note="This is a lot of descriptive text, which will enable the user to make a better choice."  Click="OnClick" />
      </StackPanel>
    </Page>
  </v:AeroWizard.Pages>
</v:AeroWizard>

Bardzo poważna wadą takiego rozwiązania to że będzie działać jedynie na Viście, na xp pojawi się komunikat o braku biblioteki dwmapi.dll. Żeby rozwiązać problem trzeba by napisać własną abstrakcję wizarda, która na viscie używałaby aero a na xp jakiegoś domyślnego wyglądu.

Written by Bartłomiej Szafko

January 4th, 2009 at 7:05 pm

Posted in Development

[EN] WPF: Ribbon in Prism Applications

with 8 comments

Microsoft some time ago published its Ribbon(known from Office 2007) control library for Windows Presentation Foundation. However it turns out that obtaining this library is quite burdensome:

  1. You have to go to a “Office UI Licensing” site and use “License the Office UI”, next you have to login with your Live Id and accept license agreement. Frankly I have no idea what have I agreed to :P at the end you will be able to download WPFRibbonCTP, which contains ribbon control.
  2. I also strongly suggest to download Hands-On-Lab: What’s Coming in WPF:Datagrid, Ribbon and VSM which contains a great tutorial on how to use ribbon in your application. In exercise 2 there is a great app with ribbon which looks like this:

image1[1]

Using Ribbon in Prism

We had a talk on Prism on 12. Poznan .NET User Group Meeting. Szymon Kobalczyk gave a great talk on using Composite Application Library ( aka Prism ) to build great WPF applications. His presentation was very inspiring and gave me a kick-start into Prism. I decided to go on and use ribbon in prism. After some code reading it turned out that I just needed a custom RegionAdapter:

    public class RibbonControlRegionAdapter : RegionAdapterBase<Ribbon>
    {
        private Ribbon m_regionTarget;

        protected override void Adapt(IRegion region, Ribbon regionTarget)
        {
            m_regionTarget = regionTarget;
            regionTarget.Tabs.Clear();
            region.ActiveViews.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(OnActiveViewsChanged);
            foreach ( RibbonTab v in region.ActiveViews)
                regionTarget.Tabs.Add(v);
        }

        private void OnActiveViewsChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    foreach (RibbonTab v in e.NewItems)
                        m_regionTarget.Tabs.Add(v);
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (RibbonTab v in e.NewItems)
                        m_regionTarget.Tabs.Remove(v);
                    break;

            }
        }

        protected override IRegion CreateRegion()
        {
            return new AllActiveRegion();
        }
    }

Here is what shell aplication looks like before enabling a  test module ( I know ugly, but it’s not the point:P ):

image6

This is how shell application looks like after enabling module1:

image12

Further development

In this example custom region adapter is built in such way that it only allows you to add whole new tabs to ribbon. You can image an adapter that does reparenting and allows you to add regions even in tabs itself or items to main menu.

Written by Bartłomiej Szafko

November 29th, 2008 at 10:37 pm

Posted in Development

O wstążce w pryzmacie ( Ribbon + Prism)

with 4 comments

Wstążka (Ribbon)

Jakiś czas temu Micorosoft opublikował biblioteki ze wstążką znane z Office 2007 pozwalające na użycie w aplikacjach WPF. Okazuje się, że uzyskanie tych bibliotek wymaga jednak trochę zachodu:

  1. Trzeba się udać na stronę “Office UI Licensing” i skorzystać z linku “License the Office UI”, następnie trzeba się zalogować przy pomocy live Id i zaakceptować licencję. Przyznam się szczerze, że nawet nie wiem na co się zgodziłem :P Na końcu tego kroku będzie można pobrać WPFRibbonCTP – bibliotekę ze wstążką dla WPF.
  2. Najlepiej też pobrać Hands-On-Lab:What’s Coming in WPF: Datagrid, Ribbon, and VSM, który pokazuje jak stworzyć wstążkę. W ćwiczeniu 2 zawarta jest świetna aplikacja demonstracyjna:

image

Podłączamy Prism

O Prism opowiadał Szymon Kobalczyk na 12. spotkaniu PG .NET – jego wystąpienie zainspirowało mnie i zachęciło do eksperymentów. Postanowiłem dodać region pozwalający na dodawanie zakładek do wstążki przez moduły. Po bliższym obejrzeniu kodu źródłowego Prisma okazało się, że trzeba tylko stworzyć własny RegionAdapter:

    public class RibbonControlRegionAdapter : RegionAdapterBase<Ribbon>
    {
        private Ribbon m_regionTarget;

        protected override void Adapt(IRegion region, Ribbon regionTarget)
        {
            m_regionTarget = regionTarget;
            regionTarget.Tabs.Clear();
            region.ActiveViews.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(OnActiveViewsChanged);
            foreach ( RibbonTab v in region.ActiveViews)
                regionTarget.Tabs.Add(v);
        }

        private void OnActiveViewsChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    foreach (RibbonTab v in e.NewItems)
                        m_regionTarget.Tabs.Add(v);
                    break;

                case NotifyCollectionChangedAction.Remove:
                    foreach (RibbonTab v in e.NewItems)
                        m_regionTarget.Tabs.Remove(v);
                    break;

            }
        }

        protected override IRegion CreateRegion()
        {
            return new AllActiveRegion();
        }
    }

Tak wygląda shell przed podłączeniem modułu ( wiem – brzydki, ale nie o to chodzi:P ):

image

A tak po włączeniu modułu Module1, który używa regionu we wstążce:

image

Rozwój

W tym przykładzie adapter jest tak zbudowany, że pozwala tylko na dodawanie całych zakładek. Można sobie wyobrazić sytuację, w której na istniejących już zakładkach można dodawać nowe przyciski/grupy/menu lub nawet nowe pozycje do głównego menu.

Written by Bartłomiej Szafko

November 23rd, 2008 at 5:52 pm

Posted in Development

Speaker Idol na MTS 2008

with 3 comments

mts2008logo

Wczoraj się dowiedziałem, że już w środę 8 października będę miał okazję  wziąć udział w konkursie speaker idol na Microsoft Technology Summit.

Tematem mojego wystąpienia będzie ASP .NET MVC,  o którym napisałem trochę postów.

Każda z osób występująca 8 października ma tylko 3 minuty – więc trzeba się bardzo dobrze przygotować :) Drugiego dnia ma się do dyspozycji aż ;) 5 minut.

Tajemnicą pozostaje na razie kto znajdzie się w jury, może Kuba Wojewódzki ;)

Wsród osób, które przeszły do dalszego etapu konkursu są moi znajomi – osoby działające w siostrzanych grupach microsoftowych w całej polsce min:

  • Karol Stilger
  • Michał Jagieła
  • Łukasz Foks

Trzymajcie kciuki za wszystkich :)

PS. Pisano o tym także na codeguru, a więcej informacji o konkursie na stronach konferencji.

Written by Bartłomiej Szafko

October 4th, 2008 at 5:45 pm

Prototypowanie

without comments

breadboard

W elektronice bardzo często buduje się prototypy przy pomocy bardzo prostych narzędzi: płycie nazywanej bread bordem, kilku kabelków i paru elementów. W ten sposób można sprawdzić działanie układu – tak jak na zdjęciu powyżej zbudowany został model zegara binarnego.

Podobne podejście opłaca się stosować także podczas tworzenia oprogramowania. Gdy po raz pierwszy używasz nowej technologii, biblioteki lub wprowadzasz nieznany wcześniej element warto zbudować proste rozwiązanie pozwalające na zapoznanie się z działaniem i specyfiką nowego składnika.

Istnieje kilka prostych zasad, których stosowanie znacznie ułatwia prototypowanie:

  • wyeliminuj wszystkie zależności – sprawdzaj tylko jedną rzecz(zagadnienie), zbyt wiele ruchomych części utrudni Ci namierzenie ewentualnych problemów
  • nie przejmuj się czystością kodu, architekturą – po prostu sprawdź jak coś działa
  • nie oczekuj, że coś zrobisz z prototypem po zakończeniu eksperymentu; prototyp powinien pójść do śmietnika, a to co zyskałeś powinno zostać w Twojej głowie, lub w formie opracowania(zależy jak ścisły proces stosujesz)
  • pamiętaj, że celem jest ograniczenie ryzyka związanego z nie przewidzianymi problemami oraz umożliwienie dokładniejszej estymacji czasu potrzebnego na realizacje zadania

Prototypowanie jest zalecane w metodyce XP, ale moim zdaniem każdy może dzięki temu zyskać.

Written by Bartłomiej Szafko

October 4th, 2008 at 5:25 pm

Posted in Development

MSBuild Community Tasks – wszystko czego brakuje w MSBuild

with 4 comments

http://msbuildtasks.tigris.org/ to ciekawy projekt dodający  taski do msbuilda pozwalające wykonywać naprawdę interesujące rzeczy podczas budowania projektów i co dla mnie najważniejsze bez dużego nakładu pracy. Taski, które szczególnie zwróciły moją uwagę to:

Written by Bartłomiej Szafko

September 26th, 2008 at 7:34 pm

Posted in Development

Tagged with

Hackfest

without comments


Barcampowcy wysmarzyli kolejny event: tym razem 24 godzinny konkurs na programowanie aplikacji webowych( 5 – 6 września).

Warto zauaważyć, że jest do wyboru środowisko ASP .NET. Rejestracja tylko do 31 sierpnia.

Niestety nie wiem, ile do tej pory drużyn wybrało .NET. Mam nadzieję, że będę miał okazję zapewnić wsparacie/stworzenie(?) środowiska dla developerów.

Written by Bartłomiej Szafko

August 28th, 2008 at 9:00 pm

Mój harmonogram MTS 2008

without comments


¦roda

07:30 – 09:30 Rejestracja
09:30 – 11:00 Sesja generalna (otwierająca)
11:00 – 11:20 Przerwa kawowa
11:20 – 12:35 Wydajne aplikacje ASP.NET w świecie Web 2.0 Tymoteusz Chmielewski
12:35 – 13:35 Lunch
13:35 – 14:50 Praktyczne aspekty budowania rozwiazań klasy Enterprise z wykorzystaniem produktów Microsoft Patterns and Practices Marcin Sieradzki
14:50 – 15:10 Przerwa kawowa
15:10 – 16:25 .NET bez wizardów ? sposoby tworzenia i dynamicznego aktywowania komponentów w aplikacjach Bartosz Pampuch
16:25 – 16:45 Przerwa kawowa
16:45 – 18:00 TFS – praktyka Bartosz Celmer

Czwartek

07:30 – 09:00 Rejestracja
09:00 – 10:15 Bezpieczeństwo serwisów WWW ? praktyczne uwagi o implementacji zaleceń DBTI ABW w ASP.NET Zbigniew Łapiński
10:15 – 10:35 Przerwa kawowa
10:35 – 11:50 Integrating Windows Presentation Foundation and Windows Communication Foundation into Your Office Business Applications Tim Huckaby
11:50 – 12:50 Lunch
12:50 – 14:05 Build great software with Rosario tools Michael Juřek
14:05 – 14:25 Przerwa kawowa
14:25 – 15:40 Testy w Microsoft Visual Studio Team System 2008 Artur Jedynak
15:40 – 16:00 Sesja generalna (zamykająca)

Niestety sesja Bartka Pampucha koliduje z równie ciekawą sesją Szymona Kobalczyka o aplikacjach biznesowych w WPF :( mam nadzieję, że będzie można zobaczyć materiały wideo.

Written by Bartłomiej Szafko

August 19th, 2008 at 8:37 pm

Integracja Trac z Visual Studio

without comments

Traca chyba nie trzeba chyba specjalnie reklamować. Jest to świetny webowy system do prowadzenia projektów, zawiera w sobie wiki oraz bug-trackera.

Jedynej rzeczy, której szczerze mówiąc brakowało to możliwość integracji z visual studio. Okazuje się, że istnieje projekt VsTrac, który pozwala na podłączanie się do Traca z poziomu visual studio. Całość wygląda podobnie do team explorera z tfs, ale oczywiście jest za darmo. Sam projekt jest dopiero we wczesnej fazie rozwoju, więc ma pewne ostre krawędzie, mimo to da się go używać. Poniżej kilka screenshotów.

Written by Bartłomiej Szafko

April 24th, 2008 at 6:05 pm

Posted in Development

Tworzenie aplikacji webowych

without comments

Ostatnio zastanawiałem się nad tworzeniem aplikacji webowych, w szerszym zakresie niż tylko język programowania. Element, który moim zdaniem jest niezbędny do prawidłowego funkcjonowania to CMS ( lub szerzej serwer aplikacji webowych). Według mnie budowanie aplikacji webowej w ramach takiego serwera aplikacji ( lub systemu cms) może znacznie skrócić czas realizacji. Prawdopodobnie nie będziemy musieli martwić się o tworzenie mechanizmów rejestracji, logowania czy przypominania hasła. Dodatkowym zyskiem jest zapewnienie przez CMS mechanizmu do obsługi treści statycznych. Treści statyczne to ważna część aplikacji webowej. Z reguły zawiera rzadko zmieniające się informacje np.: pomoc, opis formularzy, polityki prywatności lub regulaminy. Dostęp do tych części od strony administracyjnej z reguły mają osoby niezbyt “techniczne” i oczekują łatwej możliwości edycji ( bez konieczności odpalania np visual studio lub vi i grzebania w htmlu) koniecznie za pomocą edytora WYSIWYG. Z reguły tworzenie takich mechanizmów mocno wykracza poza zakres projektu lub zapomina się o nich i w ogóle nie zostają uwzględnione.

Przyglądając się bliżej różnym rozwiązaniom( będę bazował na rozwiązaniach .netowych i php oraz troszkę na rubym, pozostałych nie znam, ale zapraszam do podzielenia się) w kontekście potrzeb opisanych w poprzednim paragrafie nasuwa się parę wniosków:

  • Sharepoint – wielkie rozwiązanie, praktycznie serwer aplikacji, ma bardzo duże możliwości, ale wymaga sporej wiedzy na temat windows i funkcjonowania samego sharepointa. Z tego co kojarzę koszt licencji dla sharepointa wystawionego w Internecie też jest dosyć znaczny.
  • Drupal, phpNuke, joomla, mambo – również spore możliwości, niestety także trzeba poznać same rozwiązania i ich specyfikę
  • W ruby on rails rozwiązano ten problem trochę inaczej. Powstał mały CMS – Comatose, który można dowolnie podłączyć do swojej aplikacji na zasadzie biblioteki, skonfigurować i już mamy prosty CMS.

Oczywiście istnieją zagrożenia przy używaniu gotowych środowisk( w głównej mierze dotyczy to pierwszych 2 rozwiązań). Po pierwsze same systemy narzucają pewne ograniczenia wynikające z założeń projektowych. Twórcy mogą napisać własne moduły ale w pewnych ramach np. trudno będzie dodać kontrolę dostępu na poziomie wiersza. Dodatkowym problemem może być zautomatyzowane testowanie, wiele z serwerów aplikacji/CMS nie przewidziało możliwości testowania własnych modułów i wtyczek, więc może np brakować interfejsów do mockowania itd – to naprawdę może zabić projekt.

Dla mnie najbardziej eleganckie wydaje się metoda proponowana przez Comatose w Ruby on Rails. Pozwala twórcy utrzymać maksymalną kontrolę nad aplikacją jako całością z zachowaniem elastyczności systemu CMS. Zainspirowany tą metodą szukałem czegoś podobnego co można by dołączyć do .net. Okazuje się, że na razie nic takiego nie istnieje. Noszę się z zamiarem stworzenia takiego projektu(Comatose.NET???), na razie jest to w fazie pomysłu, ale wydaje mi się, że asp .net mvc(a szczególnie system.web.routing) się do tego nadaje. Jesteś zainteresowany tym tematem? Masz jakieś przemyślenia? Podziel się nimi…

Written by Bartłomiej Szafko

April 19th, 2008 at 5:39 pm

Posted in Development