Blog Kokosa

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

NAVIGATION - SEARCH

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...

Prelekcje - nowa podstrona

4developers

Z okazji rocznicy swojej działalności jako "prelegent", postanowiłem spojrzeć z auto-refleksją na swoje poczynania w tym czasie. Na spisanie wyników owych refleksji przyjdzie pora. Przy okazji jednak zauważyłem, że jest już całkiem dobry czas, by założyć podstronę o historii swoich wystąpień. A przy okazji mogę tam zawierać zapowiedzi również tych przyszłych, planowanych. Kto wie, może takie zebrane informacje pomogą komuś, kiedyś w przekonaniu się, czy warto zaakceptować moje kolejne CFP?

MemoryVisualizer - ClrMd + F#

Projekt MemoryVisualizera toczy się w kilku wątkach, ale jak na razie dość mało poświęciłem jednemu z najważniejszych - analizy pamięci. Planuję bardziej rozbudowany post o tym jak można się do pamięci dobrać i co tak naprawdę siedzi pod spodem. Na razie jednak jako "zajawkę" przedstawię sposób, którym się będę przez dłuższy czas posługiwał. A chodzi o świetną bibliotekę ClrMd, która to jako dostępna na Nuget, oferuje interfejs .NETowy do analizy pamięci. Szukając go w Visual Studio pamiętajmy zaznaczyć opcję "Include prerelease" ponieważ jest to wciąż biblioteka w wersji rozwojowej.

clrmd1

Więcej...

MemoryVisualizer - Neo4j, .NET i GitHub

neo4j

Jak już nie raz wspominałem, chciałbym by sercem MemoryVisualizera był język zapytań oparty o Cypher, a właściwie leżąca pod spodem baza grafowa Neo4j. Ma mi to zapewnić dużą ekspresyjność zapytań oraz (mam nadzieję) dużą szybkość działania. Tutaj pojawia się pewien drobny temat do przemyślenia. Neo4j napisany jest w Javie i szczęściarze piszący w tym języku mogą załączyć ten silnik jako część swojej aplikacji. Niestety w aplikacji .NETowej o takim self-hostowaniu nie może być mowy. Portu Neo4j na .NET nie ma, choć pojawiły się i takie pomysły, np. w formie Neo4Net. Ciekawa dyskusja na ten temat odbyła się na grupie lists.neo4j.org. Więcej...