Artykuły dla kategorii Programowanie

sie 22 2012
0

Wielowątkowość w C# - wprowadzenie

Nie wiem jak Was, ale mnie osobiście irytuje zdarzenie w którym na górnej belce aplikacji pojawia się napis Brak odpowiedzi, a sam program wygląda jakby się gdzieś po drodze pogubił... Generalnie taki stan rzeczy może być spowodowany wieloma różnymi aspektami, choć zasadniczo w tym przypadku najczęściej można wskazać dwie przyczyny. Trzeba niestety tu otwarcie przyznać, że w głównej mierze są one spowodowane źle napisanym kodem przez programistów tychże aplikacji.

Po pierwsze, w każdym programie może po prostu pójść coś nie tak. Programista powinien przewidzieć możliwie większość takich sytuacji (najlepiej wszystkie, co w praktyce jest jednak raczej nierealne, jeśli tworzymy coś więcej niż program typu Silnia) i oprogramować jakieś sensowne wyjście z problemu - czy to takie które po prostu zakończy aktualnie wykonywaną czynność, czy w przypadku błędów krytycznych, spowoduje bardziej przyjazne dla użytkownika zamknięcie aplikacji (przez bardziej przyjazne mam na myśli jakiś komunikat dla użytkownika i odpowiedni zapis w logu).

Drugą kwestią jest właśnie tytułowa wielowątkowość. Jeśli tworzymy program, którego operacje przetwarzania mogą zająć przynajmniej kilka sekund, to użycie wątków staje się koniecznością (szczególnie jeśli tworzymy aplikację z GUI, o czym pisałem już choćby przy okazji opisu Background Workera dla WPF). Wielowątkowość pozwala również na lepsze wykorzystanie wielordzeniowych procesorów, ponieważ dzięki temu operacje mogą rozłożyć się na kilka rdzeni, a nie tylko na jeden, na którym początkowo została uruchomiona dana aplikacja. Ponieważ nie jest to zagadnienie proste, to chciałbym poświęcić mu ten oraz kilka kolejnych wpisów. Zacznijmy więc od podstaw.

maj 27 2012
0

Operacje na kolekcjach w C# z użyciem LINQ

Ponad dwa lata temu, popełniłem wpis na temat operacji na kolekcjach w C#. Post ten ku mej uciesze, wciąż cieszy się sporą popularnością, dlatego też postanowiłem napisać niejako jego kontynuację.

Gdy dwa lata temu pisałem tamten wpis, wciąż dominującą wersją frameworka .Net, była ta oznaczona wersją 2.0. Dziś sytuacja się trochę zmieniła i przynajmniej w moim odczuciu, coraz więcej osób korzysta z wersji 3.5 i 4.0, a na horyzoncie jest już .Net 4.5, który pojawi się w pełni wraz z Windowsem 8 i Visual Studio 11. Nowsze wersje frameworka wprowadziły wiele istotnych zmian w tym oczywiście tytułowy LINQ. Na temat LINQ pisałem już kilkukrotnie, dziś chciałbym jednak przedstawić wykorzystanie tej technologii w kontekście kolekcji, ponieważ takie połączenie zapewnia im właściwie drugie życie i zdecydowanie zwiększa ich użyteczność.

maj 06 2012
0

C# - Interfejsy które warto znać

W obecnym czasie, z bardzo rozwiniętymi środowiskami programistycznymi, takimi jak choćby Visual Studio, czy też Eclipse, bardzo łatwo jest rozpocząć swoją przygodę z programowaniem, które w tym przypadku czasem bardziej przypomina zabawę z klockami, niż rzeczywiste klepanie kodu.

Jednak nastawiając się na bezmyślne składanie klocków, szybko można obudzić się z przysłowiową ręką w nocniku, w sytuacji gdy zajdzie potrzeba modyfikacji lub rozszerzenia tak radośnie tworzonego kodu, a warto zaznaczyć, że nieumiejętnie sklejony kod może wymagać całkowitej reorganizacji, czy wręcz nawet przepisania w sytuacji gdy zajdzie potrzeba rozszerzenia bieżących funkcjonalności oprogramowania.

Jak sobie zatem z wszystkim poradzić? Przede wszystkim warto sięgnąć po wzorce projektowe, o których na łamach Alt Control Delete już nie raz wspominałem. Pomocne będą również tytułowe interfejsy przygotowane przez twórców języka, które jak dobrze wiadomo leżą u podstaw Polimorfizmu, a odpowiednio zastosowane mają naprawdę spory sens i możliwości - znacznie większe niż by się z pozoru wydawało.

Dziś postaram się zatem przedstawić Wam kilka interfejsów, które mnie osobiście szczególnie okazały się przydatne.

kwi 13 2012
0

Czy warto programować pod Windows Phone?

Wiele mówi się w ostatnim czasie w kontekście zarobków programistów, które już w chwili obecnej są jednymi z wyższych (oczywiście występuje te pewne zróżnicowanie regionalne itp.) pośród podobnych informatyce branż. Domniemając słuszności wysokości zarobków programistów oraz innych wykwfalifikowanych pracowników z obszaru IT, należy się zastanowić czy w istocie istnieje jakakolwiek inna branża, w której postęp następuje tak szybko, że świeżo upieczony magister informatyki w dniu ukończenia studiów posiada już właściwie wiedzę zdezaktualizowaną, w kontekście tego co serwuje mu rynek pracy i jeśli nie przysiedzi po godzinach, to małe są jego szanse, żeby zostać specjalistą przynajmniej dobrym.

Realia rynku zmieniają się na tyle szybko, że programista cały czas musi się uczyć nowych rzeczy. Dziś na topie są technologie webowe powiązane z HTML5 oraz rozwiązania mobilne. Dlatego też warto przynajmniej przyjrzeć się nowym technologiom. Ja ostatnio postanowiłem poświęcić trochę swojej uwagi Windows Phone. Zapewne spytacie dlaczego akurat ten system, a nie np. Android o którym piszę bardzo dużo tutaj na blogu, albo iOS. Prawda jest taka, że rozwiązanie to nie jest do końca idealne, ale mimo wszystko szala zalet z mojego punktu widzenia przeważyła szalę wad, o czym opowiem Wam więcej w dalszej cześci wpisu.

kwi 07 2012
0

LINQ i DataContext - wycofywanie zmian w bazie

Ostatnimi czasy rozpocząłem naukę programowania pod Windows Phone 7. Szybko okazało się, że przy pisaniu jednej z testowych aplikacji, warunkiem koniecznym jej dalszego rozwoju stał się dostęp do bazy danych. Programowanie na platformę mobilną wiążę się jednak z wieloma ograniczeniami w stosunku do programowania aplikacji desktopowych i oczywiście nie ominęły one również samej bazy danych.

W przypadku Windows Phone, możemy korzystać zatem tylko z SQL Server CE i wykorzystywać w tym celu wyłącznie LINQ to SQL współpracujące z DataContext. Cały ten mechanizm jest jednak dużo bardziej ograniczony, aniżeli możliwości do których przyzwyczaiły nas klasyczne zapytania wyrażone językiem T-SQL.

Dla mnie osobiście, największą bolączką jest brak mechanizmu, który w prosty sposób pozwala na wycofywanie wprowadzonych zmian. Dlaczego o tym wspominam? Ano dlatego, że transakcje wykonywane na kontekście danych, zapisywane są do bazy danych dopiero w momencie wykonania metody SubmitChanges. Jest to podejście stricte transakcyjne i w gruncie rzeczy sprawdzą się nawet dobrze w tym systemie. Niestety mimo, że istnieje metoda która symuluje commit, brakuje tutaj metody typu rollback. Prowadzi to do tego, że nawet jeśli nie zatwierdzimy zmian od razu, to zostaną one zapisane przy dowolnym późniejszym commicie (chyba że wyłączymy aplikację, ale chyba nie o to chodzi). Jest to odrobinę dziwne, ale na szczęście istnieje pewne obejście tego problemu, którym zaraz się Wami podzielę.

lut 22 2012
0

Odtwarzanie plików MP3 w C#

Z biegiem lat, mam nieodparte wrażenie, że doba staje się coraz bardziej krótsza. Brakuje mi czasu na wiele różnych rzeczy. Obojętnie czy jest to pisanie kodu, czytanie książek, czy też nauka. Problem ten dotyczy również bloga, dlatego też spróbuję rozwiązać go w pewien sposób, wprowadzając nowy rodzaj tekstów oznaczonych tagiem Szybkie porady. Głównym zadaniem wpisów oznaczonych takim znacznikiem, będzie rozwiązanie pewnych, jasno określonych problemów. Teksty tego typu mogą pojawić się właściwie w każdej kategorii i będą w sposób zwięzły rozwiązywać określony problem (mogą to być również Wasze problemy, o które spytacie np. drogą mailową.

Wpisy tej kategorii cechować się będą z pewnością odrobinę mniejszą objętością. Nie ma się co oszukiwać, że średnia ilość tekstu, która przypada na jeden wpis, jest na Alt Control Delete raczej duża - w kontraście choćby do średniej na innych blogach.

Zmniejszając objetość określonych wpisów, postaram się za to poszerzyć zakres tematów i jednocześnie nie obniżyć jakości samego bloga. Mam nadzieję, że nowy cykl wpisów przypadnie Wam do gustu;) Uprzedzając pytanie - wpisy normalnej objętości dalej będą się pojawiać.

To tyle tytułem wstępu, czas przejść do meritum, czyli w dniu dziejszym będą to zagadnienia związane z odtwarzaniem plików MP3 w C#. Przedstawię i pokrótce opiszę dwa sposoby realizacji tego celu.

lut 17 2012
0

C#, WPF oraz SQLite razem w jednym projekcie

Tworząc aplikację, która operuje na jakichkolwiek danych, które mają być dostępne również w przyszłości, szybko dochodzimy do momentu, kiedy to musimy wybrać odpowiedni sposób składowania tych danych.

Po szybkim namyśle, przyjdzie Wam z pewnością kilka propozycji:

  • Tekstowy plik danych o określonej strukturze
  • Plik XML (można korzystać z serializacji)
  • Baza danych

Każde z tych rozwiązań ma swoje określone wady i zalety, a wszystko zależy również od skali projektu. W moim przypadku miałem właśnie do czynienia ostatnio raczej ze stosunkowo nie dużą aplikacją. Z miejsca odrzuciłem pierwsze dwa rozwiązania, ponieważ wymagają one raczej złożonego przetwarzania plików, a dodatkowo chciałem mieć łatwy dostęp do danych i łatwą możliwość zbindowania.

Idealnym rozwiązaniem wydawała się być baza danych, jednak wymagała by ona instalacji serwera baza danych, co przy skali projektu byłoby grą nie wartą świeczki - więc kolejne pudło.

Troszkę już zrezygnowany, przypomniałem sobie o SQLite, który w tym przypadku okazał się strzałem w dziesiątkę i rozwiązywał wszystkie moje problemy.

gru 31 2011
0

Implementacja BackgroundWorker w WPF

Czy kiedykolwiek zdarzyło się Wam spotkać z aplikacją, która podczas przetwarzania jakiś bardziej złożonych i czasochłonnych operacji, zamrażała swoje okno w sposób, który skutecznie blokował Waszą pracę?

Czy nie zdarzało się Wam również w takich sytuacjach ujrzeć pełny optymizmu napis Brak odpowiedzi?

Podejrzewam że każdy z Was, przynajmniej raz spotkał się z taką sytuacją. Być może część z Was przeklinała system operacyjny, choć w istocie to nie była do końca jego zasługa. Bardziej winny w takiej sytuacji był niestety programista, który z niewiedzy/braku czasu/cwaniactwa (niepotrzebne skreślić) nie zaimplementował wielowątkowości w swojej aplikacji.

Być może wielu programistów, boi się po prostu tego zagadnienia, choć w gruncie rzeczy jest ono całkiem proste w implementacji. W przypadku gdy korzystamy z aplikacji napisanych w WPF/Silverlight i chcemy skorzystać z dodatkowego wątku, który nie będzie blokować naszego interfejsu UI, to w takim celu, świetnie sprawdzi się tytułowy BackgroundWorker.

lis 06 2011
0

Tworzenie własnego projektu instalatora w Visual Studio

Za każdym razem, kiedy kończymy tworzenie jakiejś nowej aplikacji, bądź też wypuszczamy aktualizację dla programu dobrze znanego na rynku, zachodzi konieczność utworzenia, bądź też zaktualizowania instalatora dla tejże aplikacji. Oczywiście możemy pliki wykonywalne aplikacji wraz z zasobami dostarczyć naszym użytkownikom np. w postaci skompresowanego archiwum, jednak często jest to rozwiązanie nie do końca elastyczne i wygodne - wymaga choćby użycia dodatkowej aplikacji obsługującej kompresję plików.

Dlatego też warto posiąść wiedzę o tym i jak tworzyć własny instalator. Przy użyciu Visual Studio i projektu Setup Wizard jest to stosunkowo proste zadanie.

paź 14 2011
0

WPF Tutorial - aplikacje wielojęzyczne

Jakiś czas temu, we wpisie Tworzenie aplikacji wielojęzycznych z C# i ASP.NET w Visual Studio opisywałem jak stworzyć aplikację, która będzie przystosowana do obsługi wielu języków i wykorzystywać będzie do realizacji tego celu mechanizm zasobów udostępniony w platformie .Net.

Wpis ten, nie opisywał jednak zastosowanie tego mechanizmu, dla aplikacji napisanych pod kątem frameworka WPF, który korzysta z języka XAML. Dlatego też dziś, w ramach kolejnego wpisu z cyklu WPF Tutorial, chciałbym nadrobić braki w tamtym opisie.