Blog Kokosa

.NET i okolice, wydajność, architektura i wszystko inne

NAVIGATION - SEARCH

“Daj się poznać” - podsumowanie

DajSiePoznac-logo-small

Nie będę oryginalny pisząc, że nie jestem oryginalny i zbliżający się koniec konkursu "Daj się poznać" odnotuję krótkim podsumowaniem. A zatem oto i podsumowanie.

Celem mojego udziału nie było skończenie projektu, bo realnie patrząc, wiedziałem, że się z tym nie wyrobię. Chciałem jednak zmotywować się do działania. O motywacjach pisałem przed rozpoczęciem konkursu. Biorąc pod uwagę ogrom dodatkowych “zaangażowań”, które miałem przez ten trzymiesięczny okres, za

największy sukces uważam fakt, że w ogóle dotrwałem do końca!

Ale przechodząc od ogółu do szczegółu, co się udało, a co nie? Więcej...

Pierwsze kroki z GraphX

Zgodnie z wynikami wcześniejszych poszukiwań, do rysowania grafów w projekcie zamierzam używać biblioteki GraphX. Co prawda, jak słusznie zauważył w jednym z komentarzy Karol, istnieje bardzo ciekawa alternatywa. Syncfusion udostępnia bowiem swoje biblioteki za darmo w ramach licencji Community, dla projektów Open Source. A mają tam naprawdę mnóstwo świetnych kontrolek. I zapewne docelowo ich użyję - do zbudowania ładnego GUI. Jednak do rysowania grafów na razie wciąż spróbuję użyć GraphX, bo wydaje mi się bardziej zoptymalizowany do rysowania dużych zbiorów danych.

Na początku optymistyczne spróbowałem użyć tych kontrolek od razu w projekcie F#. Jednak odbiłem się od ściany licznych mniejszych lub większych problemów. Musiałem zatem zrobić krok wstecz i przygotować minimalny, działający przykład w starym, dobrym C#. W tym celu odchudziłem jak się tylko dało przykład .\GraphX\Examples\SimpleGraph i stworzyłem nowy projekt WPF. Jak zatem używa się GraphX? Więcej...

Projekt "Książka" czyli jak nie zarabiać przez 3 miesiące?

just-relax-small

Pracuję na etacie od 10 lat. O ile mnie pamięć nie myli, dokładnie 10 lat - pierwszy miesiąc to był właśnie Maj 2006 roku. Trzeba przyznać, że czas ten minął błyskawicznie i nie mogę powiedzieć, że był zawodowo jakimś ciężkim znojem. Zwłaszcza, że jak już pisałem, miałem rok przerwy i byłę fotografę. Były oczywiście okresy trudniejsze i okresy przyjemniejsze, ale praca w kamieniołomach to nie była.

Z drugiej strony jednak 10 lat to obiektywnie kawał czasu. I dobry moment, żeby się na chwilę zatrzymać i spojrzeć w tył. Zatrzymałem się zatem i popatrzyłem. Wiele tam nie zastałem - moja praca była ok i pracodawcy byli jak najbardziej ok, ale można by to wszystko określić raczej terminem "stagnacja". Prywatnie działo się bardzo wiele - ze ślubem na czele - ale mam na myśli tę zawodową część życia. Ostatni rok zaś, jak można zauważyć, w końcu mnie "ruszyło" i postanowiłem zacząć realizować się w dawno mnie kuszących i pociągających obszarach. Zaktywowałem się w społeczności, zacząłem być prelegentem, prowadzić bloga. Wszystko to jest super i jestem pewny, że to część mnie, a nie chwilowe zafascynowanie. O motywacjach pewnie jeszcze kiedyś napiszę, ale teraz chciałbym powrócić do tytułowego pytania. Więcej...

WPF i komponent do grafów

Trochę sporo ostatnio czasu w ramach projektu poświęciłem na naprawianie biblioteki ClrMd i pisania poradników o GitHubie. W ramach rdzennego rozwoju projektu skupiłem się na neo4j, teraz pora najwyższa wrócić do interfejsu i zastanowić się nad ważnym pytaniem - czego użyję jako biblioteki rysującej grafy. Na pierwszy ogień poszło przeglądanie “internetów” i wyszukanie opcji, których będę mógł użyć w WPF. Wynik tych poszukiwań nie jest przytłaczający. Wygląda na to, że jest pewne pole do popisu dla osoby, która napisze funkcjonalny i ładny komponent WPF do rysowania grafów. Ja w ramach tego projektu nie mam na to czasu, więc pozostaje mi korzystać z gotowców. Więcej...

Naprawa buga i Pull Request na przykładzie ClrMd

W poprzednich częściach znęcałem się nad biblioteką ClrMd i zawartym w niej niedopatrzeniu – poważnym problemie z deadlockiem. Korzystając, że jest to Open Source dostępny na GitHubie, czuję się w obowiązku spróbować dostarczyć oficjalną poprawkę. A to świetna okazja do napisania artykuliku o tym, jak to formalnie przeprowadzić.

Mając namierzony błąd w ukochanym projekcie, zacząć musimy od rzeczy podstawowej - issue. Jeśli błąd zgłosił już ktoś inny, na razie nie musimy się tym przejmować. Ale jeśli jesteśmy “szczęściarzami” i pierwsi coś odkryliśmy, zanim przystąpimy do dalszych działań błąd taki najlepiej formalnie zgłosić. Więcej...

MemoryVisualizer - Paket - dodanie Neo4j

W poprzednim wpisie zmieniłem system zarządzania zależnościami z Nugeta na Paket. Ściąganie paczek Nugetowych skonwertowało się automatycznie za pomocą dołączonego narzędzia, teraz pora dodać główny cel tych zabiegów - archiwum z przenośną (samowystarczalną) wersją Neo4j.

Jest ona dostępna pod poniższym adresem i trochę waży:

$ wget http://neo4j.com/artifact.php?name=neo4j-community-3.0.1-windows.zip
...
Length: 62661995 (60M) [application/zip]

Aby dodać taką zależność musimy ją dodać do pliku packet.dependencies:

$ more paket.dependencies
source https://www.myget.org/F/roslyn-nightly/
source https://www.myget.org/F/dotnet-core
source https://www.nuget.org/api/v2/
framework >= net45

nuget FsXaml.Wpf 0.9.9
nuget Microsoft.Diagnostics.Runtime 0.8.31-beta

http http://neo4j.com/artifact.php?name=neo4j-community-3.0.1-windows.zip

Więcej...

MemoryVisualizer - Paket zamiast NuGeta

Tak jak pisałem w jednym z poprzednich postów, zdecydowałem się użyć Paket do zarządzania zależnościami w projekcie. Dlaczego? Ponieważ poza zależnościami NuGetowymi, mam jedną dużą, niestandardową - standalone binarki bazy neo4j. Tak jak pisałem, Paket poza źródłami z serwerów NuGetowych potrafi korzystać ze źródeł Gita oraz po prostu zasobów dostępnych przez HTTP. Ostatnio trochę oszukałem, mówiąc, że neo4j jest dostępny w samowystarczalnym pliku ZIP pod adresem http://neo4j.com/download-thanks/?edition=community&flavour=winzip. Stronka ta jedynie rozpozczyna auto-download pliku pod adresem http://neo4j.com/artifact.php?name=neo4j-community-3.0.1-windows.zip i to ten plik będę musiał wskazać jako zależność HTTP.

Ten wpis opisuje natomiast sposób konwersji klasycznej solucji opartej o Nugety (i plik packages.config) do wersji używającej Paketa. Więcej...

MemoryVisualizer - ClrMd i deadlock

W poprzednim poście posłużyłem się następującym kodem, mającym wczytać plik ze zrzutem pamięci i następnie załadować odpowiednią wersję pliku mscordacwks.dll:

use target = DataTarget.LoadCrashDump(@"..\..\..\..\data\ConsoleDump.exe.dmp")
target.SymbolLocator.SymbolPath <- @"SRV*http://msdl.microsoft.com/download/symbols"
target.SymbolLocator.SymbolCache <- @"c:\symbols"
for version in target.ClrVersions do
    let dacInfo = version.DacInfo
    let runtime = version.CreateRuntime()

Niestety, jak już wspomniałem, ten kod umieszczony w aplikacji WPF powoduje jej zawieszenie Więcej...

Azure App Service Day

azureservices1

Miałem w zeszłym tygodniu przyjemność brania udziału w wydarzeniu zorganizowanym przez Microsoft w swojej siedzibie. Nie wiem czy taka była oficjalna nazwa, ale spokojnie można by je nazwać “Azure App Service Day”. Była to de facto mini konferencja na temat Azure, szczególnie w kontekście wspomnianych App Services. Więcej...