Artykuły dla tagu .Net

lis 24 2012
0

C#. Programowanie. Wydanie VI - recenzja

Wiele osób mówi, że programowania można nauczyć się samemu czytając różne samouczki oraz artykuły w sieci. Po części można by się zgodzić z tym stwierdzeniem, jednak w takim wypadku wiele nam umyka. Może jestem trochę tradycjonalistą, ale póki co nie bardzo sobie wyobrażam rozpoczynać naukę nowego języka bez przeczytania choćby jednej książki na jego temat. Później jest już z górki i dopiero w takim momencie wkracza u mnie Internet (oczywiście literatura oraz sieć świetnie się uzupełniają i szczerze zachęcam do takiego połączenia).

Sięgając po książkę z reguły uzyskujemy szerszą perspektywę na temat danej technologii/języka, poznając przy tym kluczowe elementy, co jak dla mnie jest niezwykle istotne, szczególnie jeśli dopiero wkraczamy w określoną technologię. W takim przypadku najlepsze są książki - podręczniki, które opisując język przedstawiają w mniej lub bardziej szczegółowy sposób poszczególne jego aspekty. Z taką właśnie pozycją będziecie mieć do czynienia w dzisiejszej recenzji.

paź 28 2012
0

11 sztuczek z Visual Studio, które mogą Ci się przydać w codziennej pracy

Visual Studio to potężne narzędzie i tak na dobrą sprawę ciężko wykorzystać wiele z możliwości dostarczonych przez projektantów Microsoftu. Spora grupka programistów ogranicza się do podstawowego zakresu funkcji - Solution Explorer, IntelliSense i ewentualne prostego debugowania. Tymczasem liczba opcji dostępnych w tym IDE jest porażająca. Sam często odkrywam nowe funkcje przez przypadek, lub wynajduję ich opis w Internecie. Po jakimś czasie zastanawiam się tylko, jak mogłem wcześniej programować bez takiej czy innej funkcjonalności?

Jeśli ważna jest dla Was Produktywność, to zachęcam do zapoznania się z dalszą częścią wpisu. Mam nadzieję, że każdy niezależnie od poziomu zaawansowania, znajdzie coś dla siebie.

Porady zawarte w niniejszym wpisie, zostały opisane na podstawie Visual Studio 2010.

wrz 08 2012
0

Wielowątkowość w C# - klasa Timer

Jednym z bardziej charakterystycznych zadań, którego implementację można wykazać w szeregu różnych aplikacji dostępnych na rynku, jest praca wykonywana w stałych określonych interwałach czasu. Przykładów nie trzeba daleko szukać, ponieważ wystarczy spojrzeć choćby na aplikacje mobilne, o których trochę na tym blogu się pisze. W przypadku smartfonów, zjawisko to widoczne jest w aspekcie synchronizacji. Sprawdź statusy na Facebooku co 3 godziny, ściągnij wiadomości RSS co 6 godzin, aktualizuj kalendarz co godzinę itd. Powyższe trzy rozwiązania to tylko kropla w morzu synchronizacji, które nas otacza.

Co łączy zatem wszystkie tego typu przykłady? Oczywiście wspomniana częściowo wcześniej praca interwałowa - czyli wykonywanie określonych stałych operacji w z góry zdefiniowanym, stałym odstępie czasu. A jak można realizować tego typu zadania? Pomocny w tym przypadku okaże się tytułowy Timer.

W tym miejscu należy się Wam jednak mała istotna uwaga. Klasa Timer występuje w C# trzykrotnie. My zajmiemy się opisem implementacji Timera z przestrzeni nazw System.Timers oraz System.Threading.

wrz 02 2012
0

Wielowątkowość w C# - synchronizacja wątków cz. 2 (Semafor, AutoResetEvent i ManualResetEvent, Interlocked)

Tydzień temu w pierwszym poście poświęconym synchronizacji, przedstawiłem Wam trzy kluczowe zagadnienia związane z tym tematem. I choć lock, Monitor oraz Mutex pozwalają nam rozwiązać naprawdę dużą liczbą problemów dotyczących wielowątkowości, to warto wiedzieć, że jest to tylko część programistycznego orężu w jaki wyposażył nas Microsoft. Dziś chciałbym Wam przedstawić cztery kolejne klasy, które powinny uzupełnić temat rozpoczęty tydzień temu i zasadniczo wyczerpać kwestię synchronizacji. Bez zbędnego przedłużania zapraszam zatem do tekstu:)

sie 26 2012
0

Wielowątkowość w C# - synchronizacja wątków cz. 1 (lock, Monitor, Mutex)

Kilka dni temu zainicjowałem cykl postów związanych z wielowątkowością. Rozpocząłem dość standardowo, bo od wyjaśnienia istoty tego zagadnienia i przedstawienia prostych wątków. Wiedza zawarta w tamtym wpisie, powinna w wielu przypadkach okazać się wystarczająca - szczególnie jeśli w naszej aplikacji mamy tylko jeden wątek dodatkowy, który stworzony jest tylko po to by odciążyć wątek główny.

Takie proste rozwiązanie nie będzie jednak zawsze do końca wystarczające. Problemy pojawią się w sytuacji gdy wątków będzie więcej niż jeden i gdy przynajmniej dwa wątki, będą mogły choćby teoretycznie korzystać z jednego współdzielonego zasobu w tym samym momencie. W tym momencie zapamiętajcie jedną ważną rzecz. Jeśli w programowaniu zakładamy, że coś może teoretycznie się wydarzyć, to w praktyce musimy się przed tym zabezpieczyć, bo szanse na tego typu zdarzenie są znacznie większe niż się pozornie wydaje;)

Reasumując - my jako programiści musimy zadbać oto, by w danej milisekundzie tylko jeden jedyny wątek mógł korzystać z określonego zasobu . W dalszej części tego wpisu, postaram się Wam powiedzieć jak tego dokonać za pomocą różnych mechanizmów synchronizacji.

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