Fascynuje mnie czasem ile “złej karmy” jest wokół samej nazwy Microsoft. Firma kojarzona jest z założycielem Billem Gatesem, najbogatszym człowiekiem na świecie. Generalnie przez jakąś niezrozumiałą dla mnie zawiść wiele osób i do Billa Gatesa i do samego Microsoftu podchodzi negatywnie, w moim odczuciu “bo tak”.
Bill Gates od jakiegoś czasu jest na microsoftowej emeryturze i zaciekawiło mnie jak wygląda życie wizjonera technologicznego w drugim, charytatywnym życiu jakie wybrał.
Znalazłem dobry przykład jednego z jego wykładów o malarii i edukacji w USA. Przyznam, że 20 minut z tym filmikiem zrobiło na mnie ogromne wrażenie i szacunek do człowieka. Oto filmik:
Niestety tylko po angielsku, ale z podpisami (co może niektórym ułatwić lekturę).
Ciekaw jestem ilu moich czytelników aktywnie korzysta z funkcji High DPI.
Ja tak. Mój monitor natywnie pracuje rozdzielczości Full HD. Jeśli to działa wydajnie (nie narzekam) to jest to bardzo fajna cecha, ale pod warunkiem własnie, że High DPI jest wykorzystane i zaimplementowane poprawnie od systemu operacyjnego do poszczególnych aplikacji.
Windows 7 podchodzi do tego tematu bardzo poważnie. Opcjami systemowymi “powiększyłem” sobie system do 125%. Odczuwam to głównie na tekście. Cooltype mając więcej pixli do dyspozycji powoduje, że tekst czyta się wyśmienicie.
Tutaj przechodząc do aplikacji zauważyłem, że nie wszyscy jeszcze zwracają uwagę na takiego użytkownika jak ja. W przypadku aplikacji okienkowych technologie takie jak WPF pomagają nam nie pamiętać o tym.
W przypadku aplikacji WWW pojawia się kolejny problem, który wydaje mi się, że jest w interesie każdego, a na ten moment niezależnie od przeglądarki nigdzie nie działa to tak jakbym oczekiwał. Ciekaw jestem czy testy pod różne ustawienia DPI są popularną praktyką w tego typu projektach. Ja osobiście dla różnych stron biegam od 100% do nawet 175%, żeby był sens jakiejkolwiek lektury.
Ten problem jest o tyle irytujący, gdy mamy do czynienia z RIA, które i w przypadku Silverlighta jak i Flasha działają różnie. Albo zetną kawałek zawartości albo dziwnie się zachowują.
Problem jest skomplikowany i na ten moment wydaje mi się, że wciąż po obu stronach – dostawców przeglądarek i technologii RIA jak i web deweloperów, którzy pewnie nie są jeszcze tak świadomi tego problemu.
Dla mnie jako użytkownika internetu, niejako już nie kłócąc się, która przeglądarka jest lepsza i czy Flash czy Silverlight w tym przypadku widze, że wszędzie jest potrzebna poprawa.
Szybko starałem się wyszukać coś co może pomóc problem zaadresować:
IE8: http://msdn.microsoft.com/en-us/library/cc849094(VS.85).aspx
Safari: http://webkit.org/blog/55/high-dpi-web-sites/
Dla innych przeglądarek nie znalazłem dobrych dokumentów czy artykułów, natomiast pod tym kątem podoba mi się tytuł innego wpisu blogu MSDN: to sprawa wszystkich..
Mimo, że Visual Studio znacząco poprawiono w kontekście programisty C++ to wciąż jednak C++ należy rozdzielić na Native i Managed.
Managed C++ dysponuje tymi samymi narzędziami do unit testów jak świat .NET Framework. Native C++ nie ma nic. Rozwiązaniem tego problemu zajęła się pewna miła programistka z Microsoftu i tak powstał WinUnit: http://winunit.codeplex.com/
Bardzo przyjemny i nieinwazyjny dodatek do naszych projektów. Wciąż wymaga od programisty dużej pracy konfiguracyjnej jeśli chcielibyśmy dobrze ten framework wykorzystać w naszym IDE.
Ja osobiście dla elastyczności podjąłem się wyzwania i skonfigurowałem sobie do projektu testowego odpowiednie nmake. Najprostszy scenariusz u mnie to wpis analogiczny do poniższego:
runtests: clean all
-@echo [Tests built. Execution started:]
-@winunit $(OUTDIR)\fs_tests.dll
-@echo [Done]
Gdzie uruchomienie z wiersza polecen: nmake /f makefile runtests dało mi taki wynik:
[Tests built Execution started:]
Processing [fs_tests.dll]...
(IsoVolumeStructures)
[fs_tests.dll] SUCCEEDED. Tests run: 1; Failures: 0.
All tests passed.
Tests run: 1; Failed: 0.
[Done]
Winunit.exe zwraca 0 gdy nie ma problemu i inne wartości gdy testy nie wyjdą lub jest problem po stronie hosta. To się da na poziomie nmake’a i nie tylko ładnie oskryptować. Tutaj nie chciałbym narzucać powrotu do plików make jako jedynej drogi. Natomiast ja ten kierunek pociągnąłem dalej ze względu na integrację z TFS 2010.
Podpięcie projektu Nmake pod MSBuild jest trywialne. Wystarczy takowy utworzyć, utworzyć plik makefile i zgodnie z jego konstrukcją podpiąć go pod konfiguracje naszego projektu:
Configuracja Debug czy Release może się różnić tylko przekazaniem odpowiedniej definicji preprocesora. Z testami można stworzyć po prostu osobną konfiguracje, która właśnie zamiast all, rebuild czy clean uruchomi pozycję runtests. Wszystko działa, tylko wymaga od nas trochę manualnej pracy lub może zainspirować do napisania lub poszukania addin’a, który wspiera WinUnit i CMake do automatycznej konfiguracji naszego projektu.
Wierzę, że wasza ulubiona wyszukiwarka dostarczy nawet więcej pomysłów.
Teraz jeśli chciałbym takie testy zautomatyzować na serwerze buildów to niestety jest trochę zabawy. Jak przyjrzymy się definicji konstrukcja testów wygląda następująco:
W najprostszym przypakdu jak widać TFS szuka plików Dll mających test w nazwie, to możemy dostosować do naszego nazewnictwa.
W procesie możemy też odszukać taki element:
Rozwinięcie zaznaczonego pola pozwoli nam podejrzeć jak TFS za pomocą MSTest automatyzuje wykonanie testów w komponentach .NET Framework. Na potrzeby Native C++ musimy to zmodyfikować, aby nasza Dll’ka uruchamiana była przez WinUnit.Exe a nie przez MSTest.exe.
Standardowa konfiguracja oczywiście spróbuje wykonać testy, ale bez modyfikacji spodziewałbym się poniższego wyniku:
1 error(s), 1 warning(s)
TFB210610: 'MSTest.exe' returned an unexpected exit code. Expected '0'; (…) The module was expected to contain an assembly manifest.
Jak zintegrować WinUnit z tym przykładem szablonu builda z poprawnym wychwyceniem błędów w testach oraz na przykład logowaniem? To w kontynuacji tego wpisu niebawem. Samo pozostawienie was w tym miejscu jednak powinno dostarczyć inspiracji do samodzielnych prób.
Lubię od czasu do czasu zaglądać do Dotnetomaniaka. Osoby nominujące tam wpisy wykonują wyśmienitą robotę i oszczedzają mi mnóstwo czasu na wydobywanie ciekawej lektury od kolegów i koleżanek – rodaków.
Napotkałem tam na wpis o uruchamianiu i kompilacji projektów z linii poleceń.
Fajny, natomiast nie wiem czy wiecie, że aby taki plik (sln) skompilować nie potrzeba nawet Visual Studio. Plik projektu i solucji jest zgodny z mechanizmem MSBuild. MSBuild.exe podobnie jak kompilatory języków .Net jest dostępny po zainstalowaniu Frameworku.
Wtedy warto przyjrzeć się poniższej ściądze:
Syntax: MSBuild.exe [options] [project file]
Description: Builds the specified targets in the project file. If
a project file is not specified, MSBuild searches the
current working directory for a file that has a file
extension that ends in "proj" and uses that file.
Więcej via MSBuild.exe /help
Analogiczny przykład dla projektu z cytowanego bloga to uruchomienie wiersza poleceń z poprawnie skonfigurowanymi ścieżkami lub odwołanie się po pełnej ścieżce do MSBuild tak:
MSBuild Projekt.sln /t:Rebuild /p:Configuration=Release
Analogicznie polecam sprawdzić także polecenie o nazwie MSTest.exe
Z MSBuild jest podobnie jak z make kiedyś. Gdy w bieżącym podkatalogu mieliśmy tylko plik makefile to wystarczyło wpisać make i ten plik był wykorzystywany. MSBuild reaguje podobnie. Jeśli uruchomimy go bez żadnych parametrów w folderze, gdzie jest jedna solucja, to ją wykorzysta do standardowej kompilacji w konfiguracji Debug (pierwszej zdefiniowanej).
Voila.
TFS 2010 szybko zmotywował mnie do przyjrzenia się bliżej Build Services.
Powodów jest parę, po pierwsze konfiguracja stała się banalna, dzięki wizualnym narzędziom. Piszę tutaj nie tylko o stworzeniu samej definicji builda. To się znacząco nie zmieniło. Mam na myśli modyfikację szablonu procesu budowania. Wcześniej to był plik zgodny z MSBuild, do którego nie było dobrych narzędzi.
Poniżej macie przykład przeplywu w standardowym szablonie realizowany w Visual Studio 2010:
W Toolboxie jak widać jest szeroka paleta opcji do wykorzystania. Pod spodem siedzi opis w Xamlu, który oczywiście, jak ktoś lubi, można modyfikować również w tekście.
W przypadku TFS 2010 Beta 2 niestety jest to poniekąd wymóg, gdyż ta wersja zawiera okrutny bug związany z regionalizacją. Koledzy Redmond ponownie (sic!) zapomnieli uruchomić swojego dzieła z innymi ustawieniami regionalnymi niż amerykańskie.
Błąd został już poprawiony w dalszych buildach. Niestety w publicznym Beta 2, aby build się udał, należy wykonać kroki opisane na tym blogu.
Tak czy siak, po tej drobnej poprawce można poczuć solidną różnicę w stosunku do wersji z 2008 roku.
Dla zainteresowanych polecam lekturę tego bloga:
http://blogs.msdn.com/girishr/archive/2009/11/01/dynamics-crm-at-pdc09.aspx
Dla nieobecnych w Los Angeles (ja oczywiście będę na miejscu komentował na żywo) polecam śledzenie sesji online z tych tematów:
http://microsoftpdc.com/Sessions/P09-07
oraz
http://microsoftpdc.com/Sessions/PR31
Czyli sesje xRMowe dające również przedsmak CRM 5.0
Kolejny projekt w ramach wyciągnięcia ręki w stronę platformy Eclipse.
Po Eclipse4SL pojawia się projekt WindowsAzure4E.
Dzięki temu dodatkowi możliwe jest tworzenie aplikacji pod Windows Azure w Javie czy PHP.
Na blogu Briana Harry’ego znajdziecie dwie bardzo ciekawe informacje.
Po pierwsze nostalgiczne wspomnienia jak to na początku lat 90tych powstawał Source Safe. Druga jest istotniejsza – wraz z TFS 2010 przychodzi wersja Basic, która ma właśnie zastąpić SourceSafe w waszych mniejszych projektach i repozytoriach.
Poniżej screen z instalacji, który tłumaczy wiele z tego co wersja Basic będzie zawierać. Więcej informacji na blogu Briana.

Zajrzałem na moment na Facebook i w propozycjach od serwisu dostałem poniższe dwie opcje:
Jak pierwsza mnie nie dziwi, tak do drugiej brakuje mi słów..
Z góry przepraszam za wulgaryzm, nie jest mój. :/
Computer World z pomocą Softchoice przeprowadził badania komputerów w amerykańskim biznesie. Wyszło z nich, że 88% kompurów aktualnie pracujących w biurach spełnia minimalne wymagania dla Windows 7. 65% może wykorzystać zaawansowane cechy systemu.
To o wiele lepiej niż w przypadku premiery Windows Vista (analogicznie: 50% i 6%).
Wniosek z tego jest prosty. W instalacjach biznesowych sam hardware nie powinien być argumentem blokującym instalację systemu.
Ciekaw jestem jaki wynik byłby w Polsce.
No właśnie.. Jeśli jesteście zainteresowani odpowiedzią na to pytanie to zapraszam do arcyciekawego webcasta na Channel 9.
Dzięki tej audycji dowiecie się trochę więcej na temat mechanizmu bootowania. Poznacie różnice pomiędzy odwołaniami do BIOSa a (U)EFI.
Dowiecie się o różnicach w procesie ładowania systemu operacyjnego (NTLDR a Winload.exe) oraz o BCD (Boot Configuration Data).
Luźno dywagując i próbując odpowiedzieć na pytanie ile kodu DOS’a jest jeszcze w najnowszym Windows, właśnie mając na uwadze BIOS/EFI spróbuję tak: Przemieniając pytanie na, ile 16bitowego kodu jest jeszcze w Windows, mogę śmiało odpowiedzieć, że na każdej platformie nie wspierającej EFI lecz BIOS: napewno 510 bajtów kodu w MBR.
Ta wiedza jest ciekawa nie tylko dla samej satysfakcji posiadania jej. Twórcy omawiają też solidnie konsekwencje pewnych decyzji wpływające na przykład na bezpieczeństwo systemu operacyjnego.
Artykuł jest na temat Windows Vista, natomiast jest aktualny także dla Windows 7. Ciekawym jest jeszcze porównanie tych mechanizmów z architekturą i implementacją projektu badawczego systemu operacyjnego Singularity. Tutaj mamy wręcz dostęp do źródeł. Bardzo fajnie tam widać jak szybko z MBR (Assembler) przechodzimy w 32bitowe C++ w trybie chronionym, aby bardzo szybko uruchomić Bartoka (kompilator i środowisko uruchomieniowe C# zoptymalizowane do zadań systemowych), a cały kernel już jest w Managed Code.
To już dla fascynatów lub uczelni, gdzie i studenci i wykładowacy mogą odkryć, że nie potrzeba instalować Linux’a, aby na trochę mniejszym projekcie nauczyć się i dowiedzieć co robi i/lub powinien robić system operacyjny.
C++ ewoluuje, standard się zmienia. Visual Studio 2010 implementuje zmiany w kompilatorze.
Oto telegraficzny skrót na temat wyrażeń lambda w C++ i deklaracji zmiennej auto, czyli odpowiednik var z C#/.NET Framework.
/*
Let's try to hack this:
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
with lambdas:
*/
auto winProc =
[](HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -> LRESULT CALLBACK
{
//TODO: real Window Proc;
switch (msg) {
case WM_CLOSE:
PostQuitMessage(0);
return S_OK;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
};
};
//Calling it..:
LRESULT result =
winProc(someHwnd,someMsg,someWParam, someLParam);
Inspirujące? Jak przegapiliście zmiany w C++ zapraszam najpierw na Wikipedię, a później do stosownych dokumentacji i wypróbujcie je z Visual Studio 2010.
Od razu zadanie. Powyższy przykład w linii prostej nie da się wykorzystać do zarejestrowania procedury okna w jego klasie (via WNDCLASS i RegisterWindowClass). Zadanie, a raczej pytanie, czy widzicie jakieś inne przykłady gdzie można by się spróbować pokusić o wykorzystanie powyższej konstrukcji w bezpośrednim powiązaniu do znanych windowsowych API?
Ciekawe przykłady realnie do wykorzystania czy nawet te czysto życzeniowe zostaną nagrodzone książką “Software Requirements 2nd. Edition” lub I.M.Wright’s “Hard Code”. Odpowiedzi proszę na maila.
Nie wiem czy mieliście okazję obejrzeć sobie premierę Windows 7 w Nowym Jorku. Jeśli jeszcze nie to filmik jest dostępny tutaj: http://www.microsoft.com/presspass/presskits/windows7/Default.aspx
Windows 7 znam już od jakiegoś czasu, więc wiele unikalnych cech tego systemu nie robi już na mnie takiego wrażenia jak za pierwszym razem, przyzwyczaiłem się i naturalnym moim oczekiwaniem jest to, żeby te cechy po prostu mieć. Natomiast nawet mnie jako osobie, która na różnych wersjach Windows 7 pracuje od roku, oczy zabłysnęły na widok różnorodnego sprzętu na którym Steve Ballmer prezentował możliwości systemu operacyjnego.
Tyle różnych doświadczeń i rozwiązań: od monitorów z multitouch dla komputerów typu desktop do różnych laptopów (nie tylko tabletów), które oferują podobne możliwości. Laptopy cienkie tak, że MacBook Air przy nich to tłusty grubas. Laptopy, które można walić młotkiem, lać na nie wodę i nic im się nie wydarzy. Laptopy z dwoma kartami graficznymi, jedna super wydajna gdy jesteśmy podłączeni do prądu, druga super energooszczędna gdy jesteśmy na baterii. Komputery-tunery telewizyjne, netbooki.
Mnogość różnorodnych doświadczeń spinanych przez jeden system operacyjny przyznam, że mnie powaliła.
No właśnie, nadeszła ta niepotomna chwila.
Przypominam, że dzisiaj premierę ma nie tylko Windows Seven.
Dostępny handlowo też jest Windows Server 2008 R2 oraz Exchange 2010.
Na zakończenie zapraszam do zapoznania sie z komentarzem Jacka Murawskiego – dyrektora generalnego polskiego biura, który napisał na własnym blogu: http://www.jacekmurawski.pl/pl/aktualnosci/entry,18,windows7.html