Winbot – Symulacja globalnych zdarzeń (myszka i klawiatura)

Prace nad moim projektem Winbot wciąż trwają. Chociaż czas mija nieubłaganie szybko, a dzień ma tylko 24 godziny, to staram się systematycznie rozwijać Winbot’a o nowe funkcje i usprawnienia. W dzisiejszym poście postanowiłem przedstawić sposób w jaki rozwiązałem problem z symulacją globalnych zdarzeń (np. kliknięcie myszką, wciśnięcie klawisza Ctrl, itp.). Moim celem było zaimplementowanie logiki,…

LiteDB – Kompaktowa baza danych NoSQL

Jakiś czas temu poszukiwałem prostej bazy danych dla mojej aplikacji desktopowej. Oczywiście mogłem sam zaimplementować jakieś rozwiązanie, ale wolałem skorzystać z gotowca, a przynajmniej zapoznać się z dostępnymi rozwiązaniami. Moje wymagania nie były zbyt duże. Chciałem żeby było to coś bardzo prostego. Od razu odrzuciłem wszystkie serwerowe bazy danych, ponieważ jednym z podstawowych założeń jest,…

Klasy internal a testowanie jednostkowe

Często mam okazję pracować nad projektami, które udostępniają bardzo wąski interfejs na zewnątrz, mimo że zawierają w sobie dużo nietrywialnej logiki. Krótko mówiąc – powstaje bardzo mało klas publicznych i dość dużo klas internal. Testy jednostkowe zawsze umieszczam w oddzielnym projekcie. Przez długi okres, za każdym razem kiedy czułem potrzebę napisania testów dla klasy internal,…

Winbot – pierwszy scenariusz

Rozwijany przeze mnie program Winbot nareszcie działa! Oczywiście do zakończenia projektu jeszcze daleka droga, ale już widać pierwsze efekty pracy. W tej chwili można nagrać scenariusz, zapisać go na dysku i odtworzyć. Póki co ograniczyłem się do obsługi zdarzeń związanych z kliknięciem myszką lub użycia klawiatury. Interfejs użytkownika pozostawia wiele do życzenia, ale jak do tej…

Generyczny retry w C#

Ostatnio w trakcie pracy nad projektem składającym się z kilku rozproszonych, komunikujących się ze sobą komponentów napotkałem problem, którego przyczyny nie były i wciąż nie są do końca jasne. Raz na jakiś czas (bardzo rzadko) pewna operacja kończyła się błędem. Najprawdopodobniej jest to związane z konfiguracją hardware’u lub systemu operacyjnego, ale nie to jest tutaj…

Winbot – continuous integration

Prace nad moją aplikacją wciąż posuwają się do przodu. Ostatnio myślałem o wszystkich rzeczach, które zamierzam zaimplementować i doszedłem do wniosku, że przydałby mi się proces automatyzujący część pracy. Zacząłem rozglądać się za jakimś prostym narzędziem  continuos integration. Z uwagi na specyfikację Winbot’a, ważne było aby narzędzie umożliwiało: wykrywanie zmiany i pobieranie aktualnych źródeł z repozytorium…

Cudowna wielowątkowość w .NET czyli Alea GPU

Dzisiaj chciałbym przedstawić bardzo fajną bibliotekę Alea GPU, dzięki której możemy wykorzystać kartę graficzną do obliczeń wykonywanych przez aplikację napisaną w .NET. Jest tu wykorzystywana technologia CUDA, którą zaprojektowała firma Nvidia. Zacznę jednak od krótkiego wprowadzenia. GPU (Graphics Processing Unit) Jest to układ obliczeniowy znajdujący się na karcie graficznej. Tego typu jednostki obliczeniowe powstały w…

Winbot (MVVM Light + Ninject)

W tym tygodniu postanowiłem popracować trochę nad interfejsem użytkownika programu Winbot. Jeszcze dużo pracy przede mną, ale wydaje mi się, że podstawowe fundamenty są już gotowe. Projekt korzysta z framework’a WPF. Przeanalizowałem różne dostępne podejścia związane z rozwijaniem aplikacji w tej technologii. Najbardziej przekonała mnie architektura Model-View-ViewModel i oparta na niej biblioteka MVVM Light. Mimo że MVVM…

Oddzielne pliki app.config dla różnych konfiguracji

Bardzo często mamy okazję pracować nad aplikacją, która powinna być skonfigurowana odpowiednio do środowiska, w którym ją umieścimy. Najprostszy przykład – aplikacja w środowisku produkcyjnym prawdopodobnie będzie łączyła się do zupełnie innej bazy danych niż ta sama aplikacja w środowisku developerskim lub lokalnym. W dzisiejszym poście przedstawię najlepszy znany mi sposób pozwalający na bezbolesne i eleganckie…