W ostatniej wersji C# pojawiła się możliwość zrównoleglenia obliczeń w bardzo prosty sposób. Pętlę:for(int n =0; n <8; n++){ Console.WriteLine("Normal - iteracja {0} wątek {1}", n, Thread.CurrentThread.ManagedThreadId);} można zastąpić następującą konstrukcją:Parallel.For(0, 8, i =>{ Console.WriteLine("Parallel - iteracja {0} wątek {1}", i, Thread.CurrentThread.ManagedThreadId);}); Zapis ten powinien spowodować, że obl...
Programowanie rozproszone 5225 dni, 14 godzin, 3 minuty temu 174 źrodło rozwiń
Konwersja Enum do List. Zawsze zapominam jak to się robi a to tak prosta sprawa. IList listDayOfWeek = new List(); var dic = Enum.GetValues(typeof(DayOfWeek)) //pobiera wszystkie wartości z danego typu as IEnumerable; //!! najważniejszy punkt programu // a teraz dodajmy warunek że nasza lista ma być.. np bez niedzieli listDayOfWeek = dic.Where(d=>d!= DayOfWeek.Sunday).ToList();
Architektura 5225 dni, 14 godzin, 3 minuty temu 122 źrodło rozwiń
Po ostatnim wpisie nt. importu danych sejmowych ze strony Sejmu zostałem skarcony przez kolegę za parsowanie stron przy użyciu wyrażeń regularnych. Nie jest to zła praktyka, jednak mizerna czytelność wyrażeń, ich stopień trudności, mała odporność na zmiany schematu danych wejściowych powodują, że po pewnym czasie wyrażenia regularne mogą stać się prawdziwym utrapieniem dla programisty. Mój pomocny kolega zaproponował mi w miejsce wyrażeń regularnych użycie Html Agilty Pack. HAP jest to biblioteka do scre...
Małymi kroczkami, dotarłem do miejsca, w którym czas złapać za klawiaturę i zacząć pisać kod. Plan działania (pierwsza pięciolatka) wygląda następująco: import i parsowanie danych ze strony sejmu, obliczanie różnych statystyk na podstawie zgromadzonych danych, warstwę dostępu do bazy danych i UI w formie strony internetowej. Uszeregowałem sobie zadania od najtrudniejszego do najłatwiejszego, przynajmniej teoretycznie. Na pierwszy ogień idzie import i parsowanie danych ze strony sejmu. Fasadę procesu impo...
Architektura 5232 dni, 2 godziny, 8 minut temu 49 źrodło rozwiń
HopfieldSimulator - Daj się poznać #11 - Hostowanie WinForms w WPF Dzisiaj napiszę o WPF. Przepisałem symulator w tej technologii i wygląda nieco inaczej. Wersję WPF można pobrać tutaj: http://hopfieldsimulator.codeplex.com/releases/view/50968 (zostawiłem wersję WinForms jako podstawową). Zasadnicze zmiany w stosunku do pisania w WinForms to podział okien na XAML i kod C# skojarzony z dokumentem XAML. Podstawowy podział przestrzeni w WPF z tego, co się dowiedziałem to Grid...
Dzisiaj kolejny przepis. Tym razem na geocoding w oparciu o Google Maps API, czyli translacje adresu z formy tekstowej - np. ul. Długa 1, 11-123 Pcim na współrzędne geograficzne. Aby móc korzystać z usługi geocoding w Google Maps należy założyć konto w serwisie i skopiować wygenerowany dla nas klucz (przypisany do domeny). Kod do dokonywania konwersji adresu na współrzędne geograficzne ...
W .NET mamy do dyspozycji wygodny mechanizm do zapisywania ustawień aplikacji. W tym wpisie skupię się na stworzeniu własnego dostawcy ustawień. Domyślnym i jedynym standardowo dostępnym dostawcą, który zajmuje się zapisem ustawień jest LocalFileSettingsProvider. Dostawca ten zapisuje pliki do lokalnego katalogu ustawień danego komputera.
Dzisiaj opiszę sposób, jaki zastosowałem by przechwycić pierwszy wyjątek. Czasem w aplikacji czegoś nie przewidzimy i wyleci nam na wyjątku, dobrze wtedy zalogować ten fakt w jakimś pliku tekstowym lub e dzienniku systemu Windows. Należy też przekazać informację użytkownikowi, aby mógł w razie problemu skopiować komunikat z wyjątku i stos wywołań abyśmy wiedzieli gdzie aplikacja wyleciała. Nowy instalator z tą funkcjonalnoś...
Autor: Dotychczas myślałem, że LINQ dopuszcza stosowanie zapytań tylko i wyłącznie w formie SQL-podobnej, tzn: view sourceprint?1 var zmienna = from x in y select x; Doczytałem dzisiaj jednak, że jest to jedna z dwóch metod umożliwiających konstruowanie zapytań do bazy danych. Ta znana mi metoda to tzw. składnia zapytań. Druga, którą kojarzyłem, ale nie wiedziałem, że jest alternatywą, to tzw. składnia lambda. Żeby nie zanudzać teorią przedstawiam poniżej przykład tego samego zapytania napisanego na d...
Bazy danych i XML 5235 dni, 17 godzin, 2 minuty temu 252 źrodło rozwiń
Dziś chciałbym zaprezentować zastosowanie sieci Hopfielda do rozpoznawania polskich banknotów. Można zastosować takie rozwiązanie w automacie przyjmującym banknoty w celu odgadnięcia właściwego nominału banknotu. Oczywiście zapamiętanie obrazka całego banknotu nie jest dobrym pomysłem gdyż w przyzwoitej rozdzielczości obraz będzie zbyt duży do zapamiętania, poza tym, banknoty mają różną wielkość, postanowiłem pokazać przykład z zapamiętaniem prawego górnego rogu i rozpoznawaniem ...
Programowanie rozproszone 5242 dni, 15 godzin, 17 minut temu 170 źrodło rozwiń
OpenMP - źródło, które zainspirowało mnie do zmian w HopfieldSymulatorze znajduje się tudaj. Dzisiaj napiszę o C++ w wykorzystanym projekcie. Cała warstwa obliczeniowa jest napisana w tym języku. Oczywiście po napisaniu dobrze jest program zoptymalizować, można jeśli używamy C# i kodu zarządzalnego użyć Parallel.For(...), no ale w czystym natywnym C++ nie ma takij możliwości, pozostaje użycie OpenMP lub wzorców wielowątkowości, które są dostępne w Visual C++ 2010. Niestety nie mam ...
Programowanie rozproszone 5244 dni, 22 godziny, 53 minuty temu 54 źrodło rozwiń
August 07Daj się poznać #3 Dzisiaj postanowiłem usprawnić symulator sieci Hopfielda o zapamiętywanie kolorów. Jak pewnie wiecie z poprzednich wpisów na wyjściu sieci Hopfielda są wartości od -1 do +1 aby zapisać obraz kolorowy można – taki był mój pierwszy zamysł – podzielić ten przedział na wszystkie dostępne kolory RGB bez przezroczystości Alpha wychodzi 256x256x256 przedziałów, trochę dużo. Eksperymenty pokazały, że jest z tym kłopot obrazy co prawda zapamiętywały się ale pokazywały się przekłamania…
Programowanie rozproszone 5245 dni, 35 minut temu 76 źrodło rozwiń
Dziś zgodnie z obietnicą na dziś rozpracowałem kontrolkę MsChart. Dodam, że na CodePlex dodałem nową wersję symulatora z formatką wykresów. Źródła: http://hopfieldsimulator.codeplex.com/SourceControl/list/changeses Instalator: http://hopfieldsimulator.codeplex.com/releases/view/50075
Programowanie rozproszone 5250 dni, 14 godzin, 56 minut temu 33 źrodło rozwiń
Dziś przedstawiam nowe GUI do Hopfield Symulatora 0.2.1. Źródła projektu można pobrać tutaj: http://hopfieldsimulator.codeplex.com/SourceControl/list/changesets Instalator w wersji 0.2.1 x86 tutaj: http://hopfieldsimulator.codeplex.com/releases/view/49956
Programowanie rozproszone 5249 dni, 19 godzin, 32 minuty temu 78 źrodło rozwiń
Ostatnio pracuje nad programem do symulacji. Mój edytor symulacji złożony jest z tysięcy kwadratów (System.Windows.Shapes.Rectangle). Potrzebowałem wypełnić niektóre kwadraty tekstem. Rozwiązaniem było użycie VisualBrush. Użyłem kodu który znalazłem w dokumentacji VisualBrush na MSDN. Nie mogłem sobie jednak poradzić z dodaniem marginesu do tekstu, tak aby tekst nie przylegał do obramowania kwadratu.
Czy zdarza się wam czasem potrzeba wyłączania/hibernowania/usypiania komputera za jakiś czas, np. po wykonaniu jakiegoś długotrwałego zadania? Mnie tak. Jak więc to zrobić? Niektóre aplikacje taką funkcjonalność posiadają, jednak nie wszystkie. Z pomocą może przyjść systemowe polecenie shutdown, ale nie potrafi ono wszystkiego. „Shutdown /s” - wyłączy system, „Shutdown /h” - system zahibernuje, można dodać jeszcze opóźnienie czasowe np. „Shutdown /s /t 600”, by wyłączyć system po 10 min (600 s). Nieste...
Zbiory (w programowaniu) to kontenery, które przechowują elementy niepowtarzające się i umożliwiają szybkie sprawdzenie, czy jakaś wartość do danego zbioru należy. 'Szybkie' oznacza tu złożoność logarytmiczną (względem rozmiaru pojemnika) lub lepszą. Podstawowa różnica w stosunku do zbiorów matematycznych jest natomiast taka, iż te drugie mogą zawierać elementy różnych rodzajów, podczas struktura danych o tej nazwie przechowuje obiekty jednego typu.
Jak pozbyć się wyjątku Common Language Runtime detected an invalid program. przy emitowaniu assembly
„Mamy aplikację napisaną dla .NET 2.0, która obsługuje wtyczki (plugin'y). Chcemy opracować dla niej wtyczkę, oferującą nową funkcjonalność. Z jakiegoś powodu (np. z wygody lub lepszych rozwiązań technicznych) wtyczkę chcielibyśmy przygotować w .NET 4.0. Czy nam się to uda?” Zobaczmy przykład.
Korzystając z Viusal Studio i .NET mamy łatwy sposób konfigurowania aplikacji przy pomocy plików app.config oraz Settings.Settings. Pisałem już o tym na tym blogu w artykule: „Przechowywanie i edycja ustawień aplikacji w .NET (prosto, szybko, sprawnie i elegancko)(przykłady oparte o .NET, w języku C#)”. Niestety można natknąć się na „schody”, gdy ustawienia chcemy przenosić pomiędzy różnymi assembly. Zobaczmy na prostym przykładzie jak to rozwiązać...