Listonic.pl
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.
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:
Interfejs trochę ala iphone, ale myślę, że może zdać egzamin. Projekt bazowałem na Fluid – Windows Mobile .NET Touch Controls Thomasa Gerbera.
Wix – wyświetlanie kopiowanych plików
Nie wiem czy zauważyliście, ale przy domyślnie stworzony instalatorach w WiX okno postępu instalacji nigdy nie wyświetla dokładnie jakie pliki, klucze rejestru są zakładane i kopiowane, wyświetla się tylko dosyć ogólna informacja “Kopiowanie nowych plików”:
Na przykład instalator od resharpera wyświetla bardzo sczegółowe info o tym co się dzieje:
Żeby dodać podobny efekt, musimy zmodyfikować interfejs użytkownika dodać nową kontrolkę i zasubskrybować jej zawartość do zdarzenia ActionData:
<Control Id="ActionData" Type="Text" X="59" Y="165" Width="273" Height="41" Transparent="yes" TabSkip="no"> <Subscribe Event="ActionData" Attribute="Text" /> </Control>
Niby prosta modyfikacja, ale wymaga albo zbudowania WiXa od nowa(chociaż UIExtension) albo dodania całego UI do swojego projektu instalatora – co ma niewątpliwe zalety na przyszłość, będzie można trochę poszaleć i np stworzyć coś podobnego do resharpera. BTW instalator resharpera jest dobrym miejscem do podejrzenia jak zrobić parę ciekawych rzeczy w wix – więc orca w dłoń i do roboty.
Mój ulubiony polski nietechnologiczny podcast
To tchnienie grozy Jacka Brzezowskiego. Jacek czyta kryminały i horrory, a wychodzi mu to naprawdę świetnie.
Na razie mój ulubiony odcinek to “Darłowskie śledztwo Eberhardta Mocka” autorstwa Marka Krajewskiego.
19. spotkanie poznańskiej grupy .NET
Już 14 maja ( jak zwykle w czwartek) o godzinie 18:00 19. spotkanie poznańskiej grupy .NET. Lokalizacja to siedziba firmy Cognifide przy Al.Wielkopolskich 4.
Tematy
NHibernate będzie pierwszym tematem – prelekcje o tym popularnym ORM wygłosi Darek Tarczyński.
Drugim tematem będzie Fluent NHibernate, prelekcje wygłosi Marek Błotny, który jest autorem serii wpisów o tym rozszerzeniu do NHibernate.
Ostatnia prezentacja Andrzeja Piotrowskiego, który wygrał konkurs speaker idol i będzie prelegentem na codecamp Warszawa. Andrzej prosi o feedback po swojej prezentacji – tak żeby mógł się lepiej przygotować do codecampu.
Gadżety
W ramach sprzątania magazynu przed wakacjami mam do rozdania trochę gadżetów i mam nadzieję, że pozbędę się ich wszystkich.
Wix w Visual Studio Express
Bartek zadał pytanie:
Od pewnego czasu szukam narzędzia do robienia instalek (lepszego niż z VS) testowałem już advanced installer i instalshield teraz znalazlem twoj opis WIX ale żedne z tych narzędzi nie integruje się z VS2008 express. Moje pytanie "Czy jest na to jakiś sposób" czy też muszę przejść na wyższą pułkę?
Wtyczka Votive, która dodaje nowy typ projektu – WixProj i pozwala na uruchomienie Candle i Light z poziomu Visual Studio niestety nie działa w wersji Express. Wersja ta ma wogóle wyłączoną możliwość instalacji dodatków( poza chlubnym wyjątkiem jakim jest TestDriven.net). Brak Votive jednak nie uniemożliwia użycia Wixa.
Wtyczka votive uruchamia aplikacje Candle i Light. Możemy zrobić to samo posługując się “Post build event” we właściwościach projektu:
A plik buildmsi.bat może mieć postać zbliżoną do:
"%wix%bin\candle.exe" -out obj\Debug\Product.wixobj -arch x86 -ext "%wix%bin\WixUIExtension.dll" Product.wxs "%wix%bin\Light.exe" -cultures:pl-PL -ext "%wix%WixUIExtension.dll" -out bin\Debug\WixProject2.msi -pdbout bin\Debug\WixProject2.wixpdb obj\Debug\Product.wixobj
W zależności od tego w jaki sposób zbudowaliśmy Product.wxs do candle może trzeba będzie podać dodakowe komendy -Dnazwaparametru=wartosc. Zmienna %Wix% jest ustawiana przez instalator podczas konfigurowania Wixa.
Kindle i inne readery
O nowym kindle od amazona jest ostatnio dosyć głośno. Ciekaw jestem kiedy będziemy używać tylko padów i e-ink jak w star treku( który nawiasem mówiąc nie podobał mi się). Interesujące jest to, że jeszcze nikt nie pokusił się o zrobienie rachunku tzw.: obciążenia środowiska naturalnego. Tzn ile kosztuje wyprodukowanie kindla(w kategoriach odpadów, CO2 itp) w opozycji do 3500 książek papierowych – to może być bardzo ciekawe zestawienie.
Swoją drogą chyba zbliża się upadek następnego przemysłu – drukarnie, księgarnie i cała logistyka książkowa. Za parę lat ksiązki papierowe pewnie będą towarem luksusowym, tak jak teraz winyle.
Niestety pewnie minie dekada zanim w Polsce przestawimy się na e-booki, potrzeba zrozumienia idei przez ogół i dużo edukacji. Moim zdaniem byłoby warto z punktu widzenia wygody, ale i tak nic nie zastąpi widoku ładnej biblioteczki i zapachu książki prosto z drukarni.
Robert D. Putnam “Samotna gra w kręgle”
Zachęcony rozmową Jacka Żakowskiego z Januszem CzapskimCzapińskim pt. “Polska smuta”, które zostało opublikowane w jednym z ostatnich wydań polityki (dostępne także w sieci) siegnąłem po zbiór wykładów Putnama. Myszę przyznać, że jest to naprawdę ciekawa lektura.
Zarówno artykuł jak i niektóre wykłady Putnama poruszają bardzo ciekawy temat kapitału społecznego. Muszę przyznać, że nawet w życiu zawodowym tłumaczy spojrzenie na zachowania ludzi poprzez pryzmat tego kapitału wiele tłumaczy. Czapski przywołuje też tzw.: “chory indywidualizm” – mógłbym dużo na ten temat powiedzieć
W wykładach też można znaleźć wiele ciekawych wątków na temat stowarzyszeń i państwa obywatelskiego. Dla mnie szczególnie interesujące były rozdziały dotyczące stowarzyszeń, badania na temat wieku uczestników sposobów i rodzajów zaangażowania.
Zdecydowanie polecam, co prawda nie da się przeczytać odrazu od deski do deski, trzeba sobie umiejętnie dozować i dawać czas na przemyślenie.
Instalator w pliku msi część 7 – generowanie listy plików do instalacji
W poprzednich częściach o WiX:
- część 1 – wstęp teoretyczny o instalatorach
- część 2 – pierwszy instalator
- część 3 – dodanie interfejsu użytkownika
- część 4 – customizacja interfejsu użytkownika
- część 5 – skróty na pulpicie i w menu start
- część 6 – upgrade
Jakiś czas temu Szymon Kobalczyk i Marcin Książek pytali o możliwość automatycznego tworzenia skryptów WxS w oparciu o stworzone przez projekt. Taki mechanizm byłby szczególnie przydatny dla projektów, w których często zmieniają się pliki, które muszą być zainstalowane np: dla aplikacji webowych. Gdy zajrzałem do jednego ze starych projektów stwierdziłem, że używałem do tego dosyć rozbudowanego skryptu Wsh.
W wix3 istnieje całkiem przydatny program narzędziowy, który pozwala właśnie na stworzenie pliku wxs. Aplikacja nazwya się heat. Przy wywoływaniu heat-a ważny jest tzw. harvester, czy zbieracz plików. Przykładowymi harvesterami jest directory, który zbiera wszystkie pliki z folderu oraz project, który tworzy wxs na podstawie wyniku projektu z VS.
Przykładowe wywołanie może wyglądać tak:
heat.exe project myproj.csproj -sfrag -srd -gg -suid -pog:Binaries -pog:Content -out Files.wxs
Omówie po kolei wszystkie parametry:
- project – określa typ harvestera, następna jest nazwa pliku projektu
- sfrag – powoduje, że nie są generowane osobne fragmenty dla każdego pliku
- gg – generuje odrazu guidy dla componentów
- suid – powoduje, że pola Id dla komponentów i plików nie są unikalnymi guidami, co jest całkiem przydatne w sytuacji gdy chcielibyśmy w innym miejscu odwołać się do plików
- pog:Binaries – określa, które grupy wyjścia mają być uwzględnione w pliku, w przykładzie wybrałem Binaria, parametr pog można powtarzać
- out Files.wxs – plik, do którego będzie generowanie wyjście
Plik Files.wxs będzie miał taką postać:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="c2csi.Binaries">
<Component Id="c2csi.Binaries.c2csi.exe" Guid="{0CCD4E1F-0AD8-40F3-B741-7A11E3E70D99}">
<File Id="c2csi.Binaries.c2csi.exe" Source="$(var.c2csi.TargetDir)\c2csi.exe" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="c2csi.Binaries">
<ComponentRef Id="c2csi.Binaries.c2csi.exe" />
</ComponentGroup>
</Fragment>
<Fragment>
<DirectoryRef Id="c2csi.Content">
<Component Id="c2csi.Content.XMLFile1.xml" Guid="{41E641F5-C0CA-470B-A7F2-73EF37B49A5F}">
<File Id="c2csi.Content.XMLFile1.xml" Source="$(var.c2csi.ProjectDir)\XMLFile1.xml" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="c2csi.Content">
<ComponentRef Id="c2csi.Content.XMLFile1.xml" />
</ComponentGroup>
</Fragment>
</Wix>
Dodatkowo do tego główny skrypt:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="00225fb3-42b1-4404-a595-f9a1c9ad5d16" Name="WixProject2" Language="1045" Version="1.0.0.0" Manufacturer="WixProject2" UpgradeCode="4dd7c3bd-1d88-4d2b-8da9-fd39b11b2653" Codepage="1250">
<Package InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="c2csi.Binaries" Name="WixProject2">
</Directory>
</Directory>
</Directory>
<Feature Id="ProductFeature" Title="WixProject2" Level="1">
<ComponentGroupRef Id="c2csi.Binaries"/>
</Feature>
</Product>
</Wix>
Trzymanie plików w osobnym skrypcie WxS jest dobrą praktyką, natomiast z automatycznym generowaniem należy być ostrożnym może to spowodować nieprzewidziane problemy.
Uruchamianie heat warto wrzucić do before build action do projektu wix.
[EN] Windows Installer XML – Heat bug?
I was trying to write a post on generating wxs scripts with heat. But i think I found a bug. Below more info – maybe someone can verify.
I’ve got a following directory contents:
And I run heat with following parameters:
heat dir . -dr D_INSTALLLOCATION -sfrag -srd -gg -suid -cg test -out test.wxs
I get following wxs:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<ComponentGroup Id="test">
<ComponentRef Id="" />
<ComponentRef Id="" />
<ComponentRef Id="" />
<ComponentRef Id="" />
</ComponentGroup>
</Fragment>
<Fragment>
<DirectoryRef Id="D_INSTALLLOCATION">
<Component Id="c2csi.exe" Guid="{43B03251-B0EE-4273-8E3C-DE54EAD0A263}">
<File Id="c2csi.exe" KeyPath="yes" Source="SourceDir\c2csi.exe" />
</Component>
<Component Id="c2csi.pdb" Guid="{5B925509-EB62-461F-BEB8-FC4C8C99C290}">
<File Id="c2csi.pdb" KeyPath="yes" Source="SourceDir\c2csi.pdb" />
</Component>
<Component Id="c2csi.vshost.exe" Guid="{048CE65A-FCD9-4A05-B482-45F326F40199}">
<File Id="c2csi.vshost.exe" KeyPath="yes" Source="SourceDir\c2csi.vshost.exe" />
</Component>
<Component Id="test.wxs" Guid="{90927E13-B1AD-48D2-AADA-0C227CD2DC36}">
<File Id="test.wxs" KeyPath="yes" Source="SourceDir\test.wxs" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>
Notice the ComponentGroup – it has empty Ids in ComponentRef.
Why would I want to generate non unique File Ids and put them in ComponentGroup?
The answer is: I would put ComponentGroupRef in Feature and use references to File element to create for example a shortcut in start menu.
Now when I removed –suid when calling heat it generated wxs with unique component and file ids which are impossible to reference in the main script.
Is it a bug or should I take a completly different approach?
UPDATE: when used project harvester with the same paramaters .wxs was ok:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="c2csi.Binaries">
<Component Id="c2csi.Binaries.c2csi.exe" Guid="{22D0EAD2-B33C-4D1D-B5F2-FA046CF79649}">
<File Id="c2csi.Binaries.c2csi.exe" Source="$(var.c2csi.TargetDir)\c2csi.exe" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="c2csi.Binaries">
<ComponentRef Id="c2csi.Binaries.c2csi.exe" />
</ComponentGroup>
</Fragment>
</Wix>
Kolejna afera z ASP .NET MVC
O aferze z Oxite było głośno jakiś czas temu. Microsoft wypuścił Oxite jako implementację przykładową przy użyciu asp .net mvc. Niestety aplikacja została bardzo ostro skrytykowana przez środowisko.
Teraz tym razem zdecydowano się wypuścić aplikację pokazującą jak budować serwisy typu web 2.0 przy pomocy ASP .NET MVC. Projekt nazwano KOBE. Tym razem znowu projekt spotkał się z miażdzącą krytyką środowiska, czego najbardziej dobitnym przykładem jest seria postów Orena:
- Kobe: Architectural Overview
- Kobe: When documentation is the only delivery that matters
- Kobe: In the nuts & bolts and don’t really liking it
- Kobe: Data Access done wrong
- Kobe: An example of exception handling done wrong
Po takiej fali krytyki Phil Haack ( jeden z PMów asp .net) próbował tłumaczyć jaką stosują taxonomie nazewnictwa. Ciekawe rzeczy działy się także na tweeterze:
Po tym całym szumie, nie można już niestety pobrać Kobe – taki tekst jest widoczny na stronie:
This sample application is being updated to incorporate community feedback. An updated version will be released shortly.
Szkoda, że nie ma żadnego sensownego przykładu do pobrania ze strony Microsoftu. Moim zdaniem najlepszy jest przykład Roba Connery MVC StoreFront vel Kona.
W tym kontekście całkiem sensowne jest pytanie Jarka :
Pojawił się ASP.NET MVC 1.0 – interesuje mnie jak sprawa wygląda z komercyjnym zastosowaniem. Czy można już ASP.NET MVC wykorzystywać komercyjnie?
Oczywiście ASP .NET MVC można stosować komercyjnie, nic nie stoi na przeszkodzie. Dostępna jest oficjalnie wspierana wersja 1.0. Licencjonowanie zezwala na komercyjne użycie już od Preview( zdaje się 3), z tym że pomiędzy poszczególnymi wersjami preview nie była zachowywana zgodność. Teraz gdy jest 1.0 już nie ma takiego ryzyka.
Powstało już wiele fajnych aplikacji webowych, które wykorzystują MVC np stackoverflow, więc gra chyba jest warta świeczki. Tylko przykłady i implementacje referencyjne coś się nie udają
