Jakoś dawno nic mi się z niczym nie skodevjarzyło :). Aż tu nagle.... Nie mam nic przeciwko nałogowym palaczom, sam lubię sobie zajarać. ALE gdy wchodzę o 6.07 z samego rana do obleśnej mikrowindy w tym zapyziałym starym bloku, w którym aktualnie przyszło mi mieszkać, i otacza mnie zewsząd cuchnąca mgła wydyszana z płuc smołczyciela, który nie potrafił poczekać 2 minut z odpaleniem fajki, to mnie szlag trafia...
Używanie wątków przypomina stąpanie po cienkim lodzie: póki jesteśmy na lodzie jest fajnie i zabawnie, w momencie gdy lód pod nami pęka, no cóż, mamy problem. Teraz do rzeczy .. Dostaję do ręki okienko z jakimiś ustawieniami (checkboxy, pola textowe, te sprawy) i magicznym przyciskiem ‘Save’ zapisującym ustawienia do bazy. Żart polega na tym, że po zmianie jakiejś opcji i użycia magicznego przycisku stan kontrolki powraca do stanu sprzed ‘Save’. Niemalże mechanicznie ponawiam czynność i tym razem już wsz...
Dostałem od znajomego fragment kodu napisany przez jego grupę programistów z pewnego wschodniego kraju: private static boolean isNull(Object objectToCheck) { boolean isNullFlag = false; if(objectToCheck!= null) { isNullFlag = true; } return isNullFlag; }
Załóżmy dla przykładu taki o to kod: public class Point { public int X; public int Y; } class Program { public Point Position { get; set; } public void SetPosition(int x, int y) { Position.X = x; Position.Y = y; } static void Main(string[] args) { var p = new Program(); p.SetPosition(10, 10); Console.ReadLine(); } }
Z racji tego, że w ostatnim czasie sporo pisałem o wielowątkowości w C#, dzisiaj pokaże prawidłową implementacje wzorca projektowego singleton przystosowanego do pracy w środowisku współbieżnym. Na początek przyjrzyjmy się klasycznej implementacji:publicsealedclass Singleton { privatestatic Singleton m_Instance =null; private Singleton() { } publicstatic Singleton Instance { get { if(m_Instance ==null) m_Instance =new Signleton(); ret...
Oryginalny post: Computer Workstation Ergonomics Autor: Jeff Atwood Niemal każdą chwilę, kiedy nie śpię, spędzam przy komputerze. Jestem tym, kogo mógłbyś nazwać domowym entuzjastą. Jestem szczęściarzem, ponieważ nie doświadczyłem żadnego urazu związanego z komputerem w związku z długotrwałą pracą przy nim, ale jest to bardzo realne ryzyko zawodowe. Miewam czasem bóle w dłoniach bądź nadgarstkach, zazwyczaj po maratońskich hulankach, gdzie oczywiście przesadzam -- ale to nie jest tematem tego wpisu. O ...
Zastanawiałem się ostatnio nad tym, jaki MUSI być godny zaufania freelancer-programista, a jaki być NIE MOŻE. Efektem jest kilka spostrzeżeń, które dla wielu ocierają się zapewne o banał... ale ze względu na spore zainteresowanie ostatnim postem o tej tematyce postanowiłem się nimi podzielić. Co zatem cechuje profesjonalistę?
Programowanie współbieżne w c# 4.0 jest znacznie łatwiejsze w porównaniu z poprzednią wersją. Widać, że platforma .NET staje się coraz dogodniejszym środowiskiem programistycznym dla rozwiązań równoległych. Zacznijmy od pętli foreach. Przeważnie wykonujemy ją w sposób sekwencyjny. Jeśli chcielibyśmy zrównoleglić ją, musielibyśmy stworzyć instancję Thread i zawartość pętli umieścić w wątkach. Ponadto proces wymagałby użycia np. semafora albo ManualResetEvent aby zsynchronizować kod wykonywany po zakończe...
Bryczka z flagami public enum Kolorki { None , Black , Red , Green , Blue }; Koń jaki jest każdy widzi. A co jeśli byśmy chcieli mieć bryczkę z kiloma końmi? Pamięć przywiodła mi myśl o bitach, ale pomyślałam sobie - że niby nie ma czegoś nowszego i elegantszego? [FlagsAttribute] public enum Kolorki { None , Black , Red , Green , Blue }; //Kolorki.Green = Kolorki.Black | Kolorki.Red Św...
W dzisiejszym poście przedstawię zasadę działania semafora oraz mutexa. Zacznijmy od teorii, czym jest semafor i jak można go zaimplementować? Otóż semafor jest sposobem na realizację wzajemnego wykluczania – zapewnienia, że tylko określona liczba wątków będzie mogła jednocześnie wykonać dany fragment kodu. Wyróżniamy semafory binarne, które dopuszczają maksymalnie jeden wątek oraz semafory ogólne, które umożliwiają jednoczesny dostęp określoną przez programistę liczbę wątków. Implementacja semafora wym...
W celu synchronizacji wątków można wykorzystać mechanizm zdarzeń: ManualResetEvent oraz AutoResetEvent. Rozwiązanie polega na zastosowaniu sygnalizacji. Chcąc wejść do sekcji krytycznej piszemy:ManualResetEvent resetEvent =new ManualResetEvent(false); resetEvent.WaitOne(); W konstruktorze ustawiamy początkową wartość sygnału na false(brak sygnału). Następnie wywołujemy metodę WaitOne, która czeka na nadejście sygnału. Metoda blokuje kod aż do momentu gdy w jakimś miejscu kodu zostanie wysłane zdarzenie...
W ubiegłym tygodniu w implementowanym systemie zajmowałem się datą i czasem. I tak mnie tknęło... dlaczego w ogromnej większości systemów, które przyszło mi oglądać, datę zapisuje się w sposób następujący? 1: article.PublishedTime = DateTime.Now Niby co jest z tym złego? Właściwie... to zależy od kontekstu i rodzaju tworzonego systemu. Korzystając z powyższej konstrukcji trzeba zdawać sobie sprawę z tego, że tak zapisany czas jest ZALEŻNY od maszyny, na której operacja ma miejsce. Wartość ta odczytana...
Najtrudniejszym zadaniem w programowaniu współbieżnym jest programowanie sekwencyjne a uściślając synchronizacja wątków;). Pewne operacje w naszych programach muszą być wykonywane w sposób sekwencyjny. Często dostęp do danych współdzielonych nie może odbywać się w sposób równoległy. Rozważmy klasyczny problem zwiększania liczby o jeden:counter = counter +1; Jeśli zmienna counter jest współdzielona przez kilka wątków, powyższa operacja jest niepoprawna. Dlaczego? Zacznijmy od początku. Zwiększanie lic...
Wydawałoby się, że ostatnio temat XNA, nieco ucichł i nie pojawiają się jakieś kluczowe informacje związane z tym frameworkiem. Gdyby jednak podsumować co już wiadomo, na temat tego, co pojawi się w związku z kolejnymi wersjami, uzbierałoby się tego całkiem sporo.Surface Cieszy fakt, iż Microsoft wraz z wprowadzeniem kolejnych platform sprzętowych, planuje wprowadzić natywną obsługę XNA przez te urządzenia. Chodzi tutaj konkretnie, o już dost...
Oryginalny post: Your Favorite NP-Complete Cheat Autor: Jeff Atwood Czy kiedykolwiek słyszałeś, żeby inżynier oprogramowania odnosił się do jakiegoś problemu mianem "NP-zupełny"? To wymyślny, żargonowy skrót do "niesamowicie trudny". Najbardziej znana cecha problemów NP-zupełnych to to, że nieznany jest sposób na ich szybkie rozwiązanie; to oznacza, że czas jaki jest wymagany na rozwiązanie danego problemu przy użyciu obecnie znanych algorytmów, wzrasta bardzo szybko w miarę wzrostu rozmiaru ...
Tę serię przede wszystkim należy zacząć od pytania – po co nam to? To z kolei możemy rozbić na dwa kolejne. Po co nam w ogóle programowanie równoległe oraz po co nam TPL – przecież już mamy dostępne narzędzia.Po co nam to w ogóle Mam nadzieję, iż tak na prawdę na to pytanie odpowiadać nie trzeba, ale dla porządku zróbmy to. Potrzebujemy bo prawo Moore’a przestaje działać. Nie możemy już powiedzieć naszemu klientowi, który narzeka na słabą wydajność aplikacji, że gdy będziemy wydawać to oprogramowanie to...
W C++ nie ma mechanizmu typu garbage collector, więc jedyne automatyczne zwalnianie obiektów, jakie w tym języku występuje, dotyczy tych lokalnych - tworzonych na stosie. Dlatego wszelkiego typu pomocnicze obiekty (np. uchwyty do zewnętrznych zasobów, jak pliki) deklaruje się tu zwykle jako właśnie zmienne lokalne. W innych językach z kolei - dokładniej: w tych, w których GC występuje - praktycznie wszystkie...
Oryginalny post: Why testers? Autor: Joel Spolsky Moja siostra sprawiła swoim dzieciom szczeniaczka i one próbowały go wytresować. Aby mieszkać z psem pod jednym dachem, musisz nauczyć go, by nie skakał na ludzi, nie robił kupy w domu, siadał na zawołanie oraz nigdy, przenigdy nie przeżuwał iPada. Nigdy. Dobra dziewczynka. Z tresowaniem psów jest tak, że reakcja musi być natychmiastowa. Jeśli po powrocie do domu odkrywasz, że parę godzin wcześniej pies wywalił kubeł ze śmieciami w kuchni, jest już z...
Dawno już nie pisałem na blogu. Nie chcę tłumaczyć się, że zarobiony jestem i nie mam na nic czasu (choć tak jest :)) wiec postanowiłem zamiast tego wyznaczyć sobie temat, o którym będę pisał i starać się pisać przynajmniej raz w tygodniu. Dzięki temu stworzę kurs jak w przypadku WPF oraz będę dość regularnie pojawiały się nowe wpisy na blogu.O czym więc będzie kurs? Task Parallel Library (TPL) – bo o tym chcę rozpocząć nowy cykl postów to nowe podejście do programowania równoległego, które pojawiło się ...
Zespół Microsoft Learning za pośrednictwem bloga Beta Exam Announcements poinformował o rychłym udostepnieniu egzaminów beta z zakresu Microsoft Visual Studio 2010 oraz Microsoft® .NET Framework 4.