Bartek Szafko

all of the bits and pieces

Poznańska grupa .net – zmiana kierownictwa

with 2 comments

image Po dzisiejszym spotkaniu i długiej dyskusji kierowanie grupą przejmuje Michał Korsak (jako lider) i Daniel Pasiak (jako z-ca). Michał i Daniel to stali bywalcy naszych spotkań i byli naprawdę dla mnie olbrzymim wsparciem. Jestem przekonany, że wszyscy kojarzycie Daniela i Michała ze spotkań.

Praca przy organizowaniu spotkań była dla mnie fantastycznym przeżyciem i czas na to poświęcony mogę zaliczyć do skutecznie spożytkowanych. Miałem okazję poznać wielu fantastycznych ludzi i nauczyć się wielu nowych rzeczy. Od września będę się angażował w inne przedsięwzięcia, jednak nadal będę uczestniczył, w miarę możliwości, w spotkaniach i jeśli zostanę o to poproszony z chęcią wystąpię jako prelegent.

Oczywiście będę wspierał Michała i Daniela, jeśli zajdzie taka potrzeba i o to poproszą.

W tym miejscu chciałbym Wam podziękować za rok a wspaniałej współpracy w ramach grupy. Mam nadzieję, że oprócz spotkań będzie grupy okazja żeby się spotkać na gruncie towarzyskim lub przy okazji konferencji. No i oczywiście zachęcam do czytania mojego bloga.

Written by Bartłomiej Szafko

Sierpień 5th, 2009 at 10:55 pm

Posted in Społeczności

WiX 3.0 jest, 3.5 nadchodzi

without comments

image Jak już pewnie wiecie wersja 3.0 Windows Installer Xml  jako stabilna. Oznacza to, że nie będzie już żadnych rewolucyjnych zmian w drzewie 3.0 poza poprawkami krytycznych błędów. Numer builda to 3.0.5419.0. Więcej można przeczytać na blogu Roba.

Wersja 3.5

Teraz rozpoczęły się pracę nad wersją 3.5 WiX, głównym dodatkiem będzie Burn, czyli bootstrapper(chainer) dla msi. Z tego co pisał Rob na swoim blogu wynika, że będzie można zupełnie ukryć windows installera pod swoim własnym wyglądem. Będzie można też prosto instalować pakiety zależne, a nawet je ściągnąć z sieci. Będzie wreszcie elegancki sposób na zastąpienie własnych bootstrapperów – tak jak to opisałem w jednym z poprzednich wpisów. Więcej o burn można znowu poczytać na blogu Roba.

Jako mały test zainstalowałem już wersję 3.5,  działa zupełnie poprawanie, oglądałem też sposób generowania bootstrappera za pomocą manifestów xmlowych i spróbuje go użyć jak tylko wyjdzie jakaś w miarę stabilna wersja burna. Przy okazji stworzyłem instalator dla BlipFace (wpfowego klienta dla blipa), jest do znalezienia na githubie. Tak na marginesie to było moje pierwsze użycie gita muszę przyznać że filozofia odrobinę inna niż w svn, ale udało mi się szybko dostosować.

Written by Bartłomiej Szafko

Lipiec 19th, 2009 at 3:37 pm

Posted in WiX

Mono i CAB

with 2 comments

image

Mono to otwarta implementacja środowiska .NET tworzona przez Novella – działa na linuxach i mac os.

Z ostatnich wiadomości: Microsoft obiecał, że nigdy nie będzie ścigał projektu mono o licencję, można przeczytać o tym na blogu Miguela, to może umocnić pozycję tego projektu, do tej pory niespecjalnie było wiadomo czy MSFT pozwie  novella i zmusi do zamknięcia, więc raczej nie podchodziłem do projektu na 100% poważnie.

W Mono niestety nie uświadczysz WPF czy WCF, ale jest za to asp .net MVC. Jest też prawie 100% zgodność z Winsforms. Język C# jest w wersji 3.0 i obsługuje LINQ.

Dla Mono jest coś co się nazywa Mono Migration Analyzer (MoMA) – pozwala na sprawdzenie w jakim stopniu aplikacja będzie się uruchamiać na mono.

Wszystko fajnie, ale postanowiłem spróbować jak to wygląda w rzeczywistości na bardziej zaawansowanych aplikacjach.  Wziąłem Smart Client Software Factory w wersji z kwietnia 2008, a konkretnie Quickstarts.BankTeller i przepuściłem przez MoMA, oto  co dostałem:

image

Czyli w sumie nie jest źle! Dokładniejszy raport wygląda tak:

image

Pierwsza z uwag jest spowodowana tym, że w aplikacji jest wywoływana przeglądarka internerowa, której brakuje w Mono – co w sumie jest OK. Drugi brak już jest poważniejszy, ale z tego co kojarze jest w kolejce do zrobienia.

Czyli w sumie powinno się udać uruchomić aplikację w SCSF na linuxie – hmm to otwiera całkiem ciekawe możliwości. Teraz tylko muszę wybrać jakąś dystrybucję ( czy Polish Linux Distribution jeszcze żyje?) zainstalować na wirtualce i sprawdzić jak to działa w praktyce.

PS: Ostatnio pojawił się także ciekawy podcast Scotta Hanselmanna w tym temacie – do posłuchania tutaj.

Written by Bartłomiej Szafko

Lipiec 8th, 2009 at 7:11 pm

Posted in .NET, Development

Malta Festiwal 2009 – subiektywne podsumowanie

without comments

W tym roku całkiem niezły wynik – z planowanych 7 spektakli zobaczyłem 4. Na Ba-ku Schron niestety nie udało się już dostać biletów, na pozostałe już mi się nie chciało iść, ale ogólnie można przyznać że się odchamiłem ;) Nie jestem krytykiem, ale pokuszę się o moją własną opinie.

Teatr USTA USTA – Aleksandria

image image

Jak zwykle się nie zawiodłem, miejsce bardzo fajne – stary Stadion Warty. Do tego muzyka na żywo, rzecz rzadko spotykana. Spektakl bardzo dynamiczny cały czas się wszystko ruszało.

Kompania Doomsday – Mewa

image

Mewa autorstwa Czechowa oczywiście. 4 aktorów zupełnie niespodziewana i żywiołowa forma, tylko to rosyjska recytacja mnie zabiła  totalnie nie wiedziałem o co chodzi. Wnętrze też bardzo interesujące – jedna z hal starej rzeźni.

Asoscja 2006 – Rabin Mahral i Golem

Niestety bez zdjęć. Dosyć kontrowersyjne. Przy okazji dowiedziałem się, że rabin Mahral z Pragi, który stworzył Golema był z Poznania :)

Teatr Porywaczy Ciał – More Heart Core

image

Ten spektakl podobał mi się najbardziej. Wpierw dostaliśmy jedzenie dla psów do misek, później poleciała wiązanka przekleństw i wielka rozpierducha do Slayera puszczonego na cały regulator. A później było miło i przyjemnie: budowaliśmy duże żyrafy i takie mniejsze z plasteliny.

Spektakl bazował luźno na poradniku Marshalla Rosenberga – pt “Porozumiewanie bez przemocy”. Rosenberg wyróżnił dwa sposoby komunikowania się: język szakala: oskarżenia, groźby, obrażanie, etykietowanie, uogólnianie, budzenie poczucia winy, agresja, brak umiejętności aktywnego słuchania oraz język żyrafy: język pełen empatii, miłości, rozwiązywanie konfliktów w sposób pokojowy, okazywanie akceptacji, umiejętność aktywnego słuchania, powstrzymywanie się od oceniania. Naprawdę sporo to dało do myślenia.

Jednym słowem psychoteatr in your face.

Written by Bartłomiej Szafko

Lipiec 3rd, 2009 at 6:09 pm

Posted in General

Instalowanie komponentów zależnych

with 9 comments

image O tym, że można wykryć czy .NET albo dowolny inny pakiet  jest zainstalowany pisałem w jednym z poprzednich wpisów. Pisałem również, że z poziomu MSI nie można odpalać instalacji innych pakietów.

Dzisiaj pokaże jak szybko stworzyć bootstrappera do plików MSI. W tym celu będę używał bootstrappera znanego z ClickOnce.

Pierwszym krokiem jest wyedytowanie pliku .wixproj i dodanie następującego kawałka kodu:

<ItemGroup>
  <BootstrapperFile Include="Microsoft.Net.Framework.3.5">
    <Visible>False</Visible>
    <ProductName>.NET Framework 3.5</ProductName>
    <Install>true</Install>
  </BootstrapperFile>
</ItemGroup>
<Target Name="AfterBuild">
  <GenerateBootstrapper
ApplicationFile="WixProject3.msi"
ApplicationName="WixProject3"
BootstrapperItems="@(BootstrapperFile)"
OutputPath=".\bin\Debug"
ComponentsLocation="Relative"
Culture="en"
Path="C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper"
  />
</Target>

I to właściwie wszystko! Po uruchomieniu budowania projektu WiX w folderze bin\Debug znajdziemy setup.exe, który po uruchomieniu sprawdzi i ewentualnie zainstaluje .NET 3.5, a później odpali plik WixProject3.msi.

Zawartość folderu bin\Debug wygląda mniejwięcej tak:

image

zwróćcie uwagę, że wszystkie pakiety od .neta też wylądowały w tym folderze. Stało się tak ponieważ użyłem ComponentsLocation=”Relative”, ale można również ustawić żeby pobierał się z sieci (więcej o GenerateBootstrapperTask).

Teraz całość (oprócz .wixpdb) możemy zapakować,  najlepiej jakiś selfextractorem ( ja lubie iexpress ) i ustawić wywołanie setup.exe po rozpakowaniu. Trzeba tylko uważać na rozmiar, gdy jeszcze dorzucimy crystala i sql może być już całkiem spory.

Przedstawione przezemnie rozwiązanie ma pewne niedogodności:

  • boostrapper clickonce nie ma polskiej lokalizacji, jednak stosunkowo prosto można to załatwić tłumacząc odpowiednie pliki xml
  • w przypadku jakiś niestandardowych (albo własnych) zależności będziemy musieli je dodać, tak żeby były widoczne w deploymencie clickonce we właściwościach projektu. Na szczęście to też można załatwić w miarę szybko.

Miłej zabawy!

PS. Zastanawiam się, czy by nie opowiedzieć o WiX w ramach Speaker Idola na MTS 2009 – jak myślicie warto ? czy temat zainteresuje publikę ? Na pewno warto zwrócić na niego uwagę szerszej publiczności, bo przez sam Microsoft jest traktowany po macoszemu, pewnie dlatego że jest open source :P

Written by Bartłomiej Szafko

Czerwiec 22nd, 2009 at 8:58 pm

Posted in WiX

Mój artykuł o WiX w SDJournal

with 5 comments

Miła dla mnie wiadomość na początek czerwca – w numerze 06\2009 Software Developer’s Journal ukazał się artykuł o WiX mojego autorstwa:

image image


Przy okazji małe sprostowanie w momencie pisania artykułu WiX miał być częścią VS 2010 później to się zmieniło.

Jeśli chodzi o zawartość artykułu – to jeśli czytasz regularnie mojego bloga nie będzie w nim dla Ciebie żadnych niespodzianek.

Written by Bartłomiej Szafko

Czerwiec 2nd, 2009 at 6:21 pm

Posted in Personal, WiX

WIX – Wykrywanie zainstalowanych MSI

without comments

imageCzasami przy instalacji trzeba stwierdzić czy zainstalowano już jakiś inny MSI. Może to być .NET, serwer SQL, czy może jakiś zupełnie inny produkt.

.NET

Z samym .NETem sprawa jest dosyć prosta. Wystarczy, że użyjemy biblioteki WixNetFxExtension.dll, która realizuje potrzebną nam funkcjonalność:

<PropertyRef Id="NETFRAMEWORK35"/>
<Condition Message=".NET Framework w wersji 3.5 musi być zainstalowany ([NETFRAMEWORK35])">
  NETFRAMEWORK35
</Condition>

Użycie PropertyRef jest konieczne, aby zastała zaimportowana odpowiednia wartości Property z WixNetFxExtension.dll. Dalej już jest prosto definiujemy element Condtion w  InnerText wpisujemy warunek, który musi być ustawiony na TRUE, aby mogła rozpocząć się instalacja – całość ląduje w tabeli LaunchCondition. Własność NETFRAMEWORK35 jest ustawiona na #1 jeśli jest zainstalowany .NET Framework 3.5 . W NetFxExtension jest ustawianych bardzo dużo własności, które mogą nas poinformować o wersji SP, a nawet czy zainstalowano Client Profile. Pełny opis w c:\program files\Windows Installer Xml v3\doc\Wix.chm – hasło “WixNetfxExtension”.

Inne pakiety

Żeby wykryć inne zainstalowane pakiety można użyć np.: RegistrySearch:

<Property Id="NETFRAMEWORK20">
  <RegistrySearch Id="NetFramework20" Root="HKLM" Key="Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" Name="Install" Type="raw" />
</Property>

Co ustawi, własność NETFRAMEWORK20 na wynik wyszukiwania wartości klucza w rejestrze – tak naprawdę taką metodą posługuje się NetFxExtension.

Innną metodą jest wyszukiwanie konkretnego zainstalowanego komponentu za pomocą ComponentSearch:

<Property Id="VS2005PROJECTAGGREGATOR2">
  <ComponentSearch Id="VS2005ProjectAggregator2Search" Guid="B0BB80E0-5CCC-474E-A75E-05DC1AE073BC" />
</Property>

Musimy w takiej sytuacji znać Guid komponentu.

Inne możliwości to:

  • IniFileSearch – pozwala szukać pliku .ini lub konkretnej jego zawartości, to jest trochę przestarzała metoda, ponieważ tych plików już tak często się nie używa
  • DirectorySearch – wyszukiwanie konkretnego folderu
  • FileSearch – wyszukiwanie konkretnego pliku

Instalacja zależnych pakietów

W samym pakiecie MSI nie możemy wywoływać instalacji innych pakietów MSI, jest to zabronione. Możemy do naszego instalatora dołączyć tzw. Merge Module, czyli plik z rozszerzeniem .msm, ale takie pliki rzadko są dostarczane przez producentów.

Jedyną skuteczną metodą na zainstalowanie np. .NETa przed instalacją naszej aplikacji jest użycie tzw. MSI chainera, który instaluje pliki .MSI jeden po drugim. Można też posłużyć się czymś bardziej zaawansowanym – bootstrapperem od clickonce. Temat chainera i bootstrappera to sprawa na osobny wpis, a właściwie całą serię.

Written by Bartłomiej Szafko

Maj 27th, 2009 at 10:42 pm

Posted in WiX

Malta Festiwal 2009

without comments

image

Już od środy będzie można kupić bilety na przedstawienia  Malta Festiwal 2009.

Jak zwykle zabrałem się za planowanie, na które przedstawienia chciałbym pójść i jak co roku jest to droga przez mękę. Program festiwalowy umieszczony na stronie, jest zupełnie nieprzydatny. Spektakle są co prawda wyświetlane według daty i faktycznie stanowią jakąś informację, ale niesposób ułożyć to w całość. Idealnie byłoby mieć osobistego planera – takiego jak zdarzają się przy okazji konferencji, tak żeby można było łatwo stwierdzić  czy są jakieś konflikty itp. Potrzebny byłby też orientacyjny czas trwania spektaklu.

Udostępniony dokument pdf z programem też jest jakiś lewy – brak na nim dat w tytułach kolumn, wiem czepiam się.

Design strony też mógłby być trochę wyraźniejszy no i brak RSSa mnie dobija – bo newsletter jakoś mi nie podchodzi, tak też czepiam się.

Tak jak jestem olbrzymim fanem Malty – tak z bólem muszę przyznać, że obecność w Internecie coś im się nie udaje. Wydaje mi się, że dobrze skonfigurowany drupal załatwiłby większość problemów, pozostałby do zrobienia tylko moduł planera. No i oczywiście możliwość blipowania i flakowania :) To może być nawet całkiem ciekawa sprawa – chętnie bym się czymś takim zajął, nawet za darmo:)

A teraz co wybrałem… Na mojej prime liście jest 7 spektakli, wszystkie w dosyć dziwnych miejscach:

image

Tutaj linki do mojego pubicznego google kalendarza na Malta Festiwal: .

Myślę, że w tym razem będę równie zadowolony i zainspirowany jak w 2008 i 2007 roku. Naprawdę polecam warto być, zobaczyć i przeżyć coś nowego.

Written by Bartłomiej Szafko

Maj 25th, 2009 at 9:35 pm

Posted in General

Tagged with , ,

Iron Python

with 2 comments

O Iron pythonie czytałem już trochę wcześniej, jednak nie miałem okazji go faktycznie spróbować. Okazja na użycie pojawiała się jakiś czas temu – szukałem rozwiązania pozwalającego użytkowniokowi aplikacji mieć wpływ na pewne części aplikacji bez konieczności programowania, ani posiadania środowiska programistycznego. Iron Python nadał się do tego idealnie.

Leon Bambrick ma na swoim blogu świetny przykład:

image

W pierwszym polu tekstowym wpisujemy skrypt, który ma się wykonać po naciśnięciu GO. W skrypcie mamy dostęp do całego obiektu txt, który jest drugim polem edit – tutaj jest przykład pozwalący na zrobienie UpperCase z zaznaczonego tekstu. Całość można wywołać za pomocą prostych komend:

ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = null;
scope = engine.CreateScope();
scope.SetVariable("txt", TargetTextBox);
string code = CommandTextBox.Text.Trim();
ScriptSource source = engine.CreateScriptSourceFromString(code, SourceCodeKind.Statements);
source.Execute(scope); 

Jedyną wadą jest zauważalnie dłuższy czas pierwszego uruchomienia w stosunku do pozostałych. Trzeba pewnie będzie zrobić warmup podczas startu aplikacji.

IronPythona można pobrać z codeplex.

No i ciekawostka – instalator pythona jest napisany przy pomocy Windows Installer Xml.

Written by Bartłomiej Szafko

Maj 24th, 2009 at 9:02 pm

Posted in Development

Tagged with ,

Listonic.pl

with 4 comments

Raczej nie piszę o startupach, ale tym razem zrobię wyjątek, bo warto. Listonic.pl to serwis pozwalający na zbudowanie listy zakupów dzielenie jej np. z żoną i umożliwiający dostęp do listy poprzez mobilną przeglądarkę. Autorzy także udostępnili aplikację java na telefony komórkowe, która umożliwia pracę offline.

image

Co ciekawe serwis jest napisany w asp.net – można to wywnioskować oglądając kod źródłowy strony, jest tam wiele kawałków charakterystycznych dla .neta. Myślę, że może to być ciekawy głos w dyskusji, którą toczyłem jakiś czas temu z Michałem Grzegorzewskim o tym, że startupy raczej trzymają się z daleka od techonologii .net. Oczywiście sama technologia, w której wykonano serwis nie ma większego znaczenia z punktu widzenia użytkowników i biznesu liczy się tylko użyteczność i czy realizuje założone cele.

Autorzy zpewniają, że pracują nad wieloma dodatkami, w tym wersję na Windows Mobile. Postanowiłem ich trochę ubiec i poeksperymentować w .net compact framework stworzyć prototyp możliwej aplikacji,  oto moja propozycja:

image image image

Interfejs trochę ala iphone, ale myślę, że może zdać egzamin. Projekt bazowałem na Fluid – Windows Mobile .NET Touch Controls Thomasa Gerbera.

Written by Bartłomiej Szafko

Maj 19th, 2009 at 9:51 pm

Posted in General

Tagged with ,