Blog Kokosa

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

NAVIGATION - SEARCH

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

Byłem fotografę

Poza pasją do programowania i gadania o nim, mam również inne. Jedną z nich jest fotografia. A ponieważ jest to mój blog, a nie czyjś inny, pomyślałem, że opowiem o tym w ramach przybliżania swojej osoby. Zatem do dzieła, pierwszy post nie związany z IT! Mimo że nie jest IT i jest dość długi, zachęcam do przeczytania!

Fotografia przez wiele lat praktycznie dla mnie nie istniała, kojarzyła się głównie z robieniem wakacyjnych fotek. Miałem jednak jako nastolatek krótki przebłysk zainteresowania tematem. Odgrzebałem nawet całkiem przyzwoitego Zenita, modelu niestety nie pamiętam. Wraz z trzema obiektywami pozwalało to na pewną zabawę, ale analogowa technologia i potrzeba wywoływania zdjęć dość szybko ostudziła mój zapał. Więcej...

F# vs C# - eventowa podróż przez mękę

W poprzedniej części wątku WPFowego projektu MemoryVisualizer skupiłem się na przypomnieniu, czym jest i jak implementować komendę (interfejs ICommand) w C#. Dla przypomnienia, napisałem ogólne rozwiązanie, któremu podaje się odpowiednie metody, dzięki czemu jest całkowicie reużywalne:

public class CommandHandler : ICommand
{
    private Action action;
    private Func<bool> canExecute;
    public CommandHandler(Action action, Func<bool> canExecute)
    {
        this.action = action;
        this.canExecute = canExecute;
    }

    public event EventHandler CanExecuteChanged;
    public bool CanExecute(object parameter)
    {
        return canExecute();
    }

    public void Execute(object parameter)
    {
        action();
    }
}

Muszę to przełożyć na F#, żeby używać komend w MemoryVisualizerze. Więcej...

MemoryVisualizer - Memory Query Language

Memory Visualizer wymaga udostępnienia języka zapytań odnośnie obiektów i struktur w pamięci. Jak pisałem w części Cypher, co to jest?! , język ten nazywam MQL - Memory Query Language. W istocie jest to jednak po prostu Cypher, który rozszerzę o elementy kontrolujące sposób wyświetlania.

Aby sobie przypomnieć, co chcę osiągnąć, wróćmy do przykładowego rysunku z opisu projektu:

szkic2

Więcej...

MemoryVisualizer - WPF oraz ICommand

Opis projektu MemoryVisualizera toczy się w kilku wątkach. Jednym z nich jest moja przygoda z F# w kontekście WPF. Po pierwszej części, w której w ogólności opisywałem jak możemy “pożenić” WPF z F#, pora kolejne kroki. Ale wcześniej potrzebne nam będzie krótkie przypomnienie z WPF w C#. Rzecz się tyczy użycia komend, do wykonywania akcji. Oraz nieśmiertelnego OnPropertyChanged do notyfikowania interfejsu o zmianie – ale o tym w kolejnej części.Więcej...

Wydajność z Packtem - konkurs!

Siedzę w temacie wydajności, przynajmniej staram się. Mówię o niej, piszę, notuję co mówić i co pisać. No i oczywiście czytam, oglądam. Potem znowu notuję. Nawet specjalną grupę w Warszawie na ten temat staram się rozkręcić.

Ponieważ nadarzyła się okazja by coś zorganizować we współpracy z wydawnictwem Packt, oto i jest - konkurs! Okazja do wygrania wybranych przeze mnie książek właśnie z dziedziny wydajności. W formie elektronicznej - tzw. talon na balon czyli ebook. Tak wiem, że ebooka można ukraść z sieci, więc co to za nagroda?! Otóż nagroda dla uczciwych, ot po prostu.

Zasady konkursu są proste. W komentarzu pod tym wpisem rozwińcie w ciekawy, najlepiej żartobliwy sposób, niekoniecznie sensowny, słówko DOCKER. Tyle się o tym teraz mówi, sam w tym trochę ostatnio siedzę. Więc oświećcie mnie, co to znaczy?! Po polsku albo po angielsku, obojętne. Moja pierwsza, pozakonkursowa propozycja poniżej. Na komentarze niech każdy głosuje, trzy osoby o najwyższej liczbie głosów otrzymają kupon upoważniający do zakupu jednej z książek z poniższej listy:

Konkurs niechaj potrwa do 24 kwietnia do godziny 23.59.

Zachęcam do zabawy!

Memory Visualizer - Cypher, co to jest?!

Obiekty w pamięci tworzą całkiem rozbudowany graf. Mają pomiędzy sobą referencje, są też poukładane w segmenty w ramach pamięci procesu, które to możemy potraktować również jako kolejny węzeł w grafie. W tym sensie segment może być rodzicem wielu obiektów, które zawiera itd. W każdym bądź razie, tak jak już było obiecane, pora zastanowić się nad językiem zapytań do owych grafów. Choć padały inne propozycje (m.in. użycie SPARQL), ja jednak pozostaję pod nieustającym wrażeniem prostoty i przejrzystości języka Cypher, używanego w grafowej bazie danych Neo4j. Więcej...

Studia IT - dzienne czy zaoczne?

Powoli zbliżają się matury. A co za tym idzie, jeśli noga się nie podwinie, raczej poważne życiowe decyzje - jakie studia, gdzie, w jakim trybie? Pomyślałem, że to dobry moment, by dodać do tego tematu swoje trzy grosze. Bezpośrednio zainspirowało mnie jedno z pytań zadanych na grupie Programowanie/Biznes It/Java/Php/.Net/C #/ Polska/Poland na Facebooku.

Od razu uprzedzę. Nie udzielam w tym wpisie odpowiedzi, która powinna być traktowana jako wyrocznia, bo też nie jestem żadną wyrocznią i nie jestem niczym uprawniony by się za taką uważać. Ale kierując się swoim doświadczeniem, wyrażam swoje zdanie, które być może będzie małą cegiełką w Waszej decyzji.Więcej...

GitHub dla zielonych - część I

To będzie tutorialowy wpis dla początkujących, ale mam nadzieję, że komuś się przyda. Mimo że nie dotyczy wprost projektu MemoryVisualizera, od początku istnienia konkursu obiecywałem sobie przygotować taki mini poradnik nt. jak rozpocząć nowy projekt na GitHub. Cel - tworzymy nowe repozytorium na GitHubie, commitujemy pierwsze zmiany, tworzymy brancha na jakiś feature. Potem go mergujemy. Przy okazji nauczymy się trochę używania gita i może jakiś innych, fajnych narzędzi. Ze względu na długość, poradnik podzielony jest na kilka części. W tej stworzymy repozytorium i zaczniemy je lokalnie modyfikować. Więcej...