Na wstępnie od razu chciałbym dodać, że dla większości aplikacji, dalsze rozważania w tym poście nie mają sensu i należy to traktować jako ciekawostkę. Dla części systemów może to jednak być ważne a mianowicie dla oprogramowania działającego w “czasie rzeczywistym”, wymagającego low-latency. Dzisiejszy wpis może powstał trochę zbyt wcześnie ale wkrótce powinna pojawić się druga część mojego artykułu o GC, który będzie dotyczył różnych trybów kolekcji. Jednym z tych trybów jest wykonywanie kolekcji w spo...
Sztuka programowania 4226 dni, 14 godzin, 39 minut temu 128 źrodło rozwiń
W poprzednim poście poruszyłem temat mojego side-projectu (który BTW nie powinien zająć więcej niż 2-3 dni, ale lubię dawkować przyjemności więc pewnie jeszcze trochę to potrwa;) ) i MSpec. Teraz zobaczymy jak można w bardzo ciekawy sposób przetestować WebAPI emulując dosłownie całego requesta z kodu, co miło przejedzie przez kompletny stack i sprawdzi nie tylko logikę, ale również m.in. konfigurację routingu… a docelowo tak...
Sztuka programowania 4227 dni, 7 godzin, 19 minut temu 118 źrodło rozwiń
Zawód programisty to jeden z tych, w których powiedzenie nabiera szczególnego znaczenia. Tworząc oprogramowanie niejednokrotnie stanąłem przed problemem, który został przez kogoś już wcześniej rozwiązany, dlatego tylko jeśli na czymkolwiek się to od razu sięgam do wujka Google. Podobnie sprawa ma się w przypadku pewnych schematycznych rozwiązań. Tworząc specjalne klasy do obsługi logowania, bazy danych, czy kolekcji, trzeba liczyć się z tym, że ktoś już coś podobnego wcześniej zrobił. Jeśli określone ...
Architektura 4228 dni, 13 godzin, 45 minut temu 343 źrodło rozwiń
Prezentacja Git in my TFS! przedstawiona podczas konferencji dotnetConf, o której pisałem wcześniej, dotyczyła...
Wczoraj i przedwczoraj odbyła się konferencja dotnetConf, o której pisałem już wcześniej. Ten wpis stanowi krótkie podsumowanie całego wydarzenia.
Dzisiaj znów trochę od strony teoretycznej postaram wyjaśnić jak działają priorytety wątków w systemach Windows. Każdy chyba słyszał o tym, że wątkowi można nadać priorytet. Nie każdy natomiast wie, jaki jest zakres oraz jak wygląda dokładnie ich interpretacja. Przede wszystkim mamy do czynienia z dwoma typami priorytetów, które składają się na końcową wartość używaną przez task scheduler. Pierwszy komponent dotyczy procesu i jest to tzw. klasa priorytetu. W Windows możemy wyróżnić następujące klasy: ...
Sztuka programowania 4229 dni, 20 godzin, 37 minut temu 122 źrodło rozwiń
Każdy wątek posiada metodę Suspend, która wstrzymuje jego wykonywanie. Ktoś mógłby napisać takiego “potworka”:class Program { staticvoid Main(string[] args) { Thread thread=new Thread(Run); thread.Start(); Thread.Sleep(1000); thread.Suspend(); Thread.Sleep(5000); thread.Resume(); } staticprivatevoid Run() { while(true) { Console.WriteLine("Running..."); } } } Używanie Suspend jest bardzo złą praktyką i może ...
Sztuka programowania 4232 dni, 3 godziny, 53 minuty temu 138 źrodło rozwiń
SQL Profiler – jak zapewne większość wie – jest narzędziem pozwalającym śledzić pracę SQL Serwera. Chyba najbardziej popularnym jego wykorzystaniem, jest śledzenie poleceń SQL przesyłanych do serwera. Zapewne także większość wie, iż nie jest to narzędzie darmowe. Co zatem zrobić, kiedy posiadamy jedynie wersję Express SQL Serwera? Okazuje się, że wiele zadań SQL Profilera można zrealizować samodzielnie. W tym wpisie ...
Bazy danych i XML 4233 dni, 7 godzin, 10 minut temu 175 źrodło rozwiń
Systemy kontroli wersji mają to do siebie, że otwierają przed nami, programistami (nie tylko zresztą), piękne możliwości. Niestety niektóre z narzędzi zamiast życie ułatwiać – utrudniają. Fajnie podsumował to Linus Torvalds, twórca Gita, krzycząc do programistów SVN coś w stylu: “pewnie, w SVN łatwo jest zrobić nowy branch, ale po co skoro nie da się zrobić merge?”. To samo tyczy się zresztą TfuFSa (chociaż tam to jest j...
O tym, czym jest redundacja wie chyba każdy programista. Każdy z nas wie również, że jest to zjawisko nieporządane i w większości wypadków lepiej mu zapobiegać. Ten post przeznaczę na opis przykładowego zjawiska powtórzeń w zapytaniach LINQ spotykanego w sytuacjach codziennych oraz prostym i czytelnym ich rozwiązaniu, o którym nieraz zapominamy.
Sztuka programowania 4233 dni, 7 godzin, 10 minut temu 246 źrodło rozwiń
Po mojej prezentacji o unit testach na 4Developers dostałem pytania typu “skąd uczyć się o testach?”, “jak zacząć?”, “jak poszerzyć wiedzę?”. Oto zatem moje rekomendacje Pluralsight (200 minut jest za darmo – trial – za resztę trzeba zapłacić, ale warto wykupić sobie chociaż miesięczny abonament za ~30$) Test-First Development Part I – podstawy unit testów, całkiem OK ale raczej wyłącznie dla nowicjuszy; na pewno super na start Test-First De...
Pierwszy wpis na moim blogu i pierwsza część cyklu o TDD. Wprowadzenie do TDD, opis Red/Green/Refactor, wady i zalety.
Sztuka programowania 4235 dni, 14 godzin, 43 minuty temu 350 źrodło rozwiń
W .NET istnieje kilka klas, które odpowiadają mniej więcej za to samo. Przyczyna dlaczego nie ma po prostu jednej klasy a kilka, wynika z faktu, że cześć z nich była zaprojektowana z myślą o konkretnej technologii jak np. WinForms. Nie zmienia to faktu, że dla części programistów nie jest to jasne, kiedy używać konkretnego timer’a. OK, to zaczynamy. W .NET mamy następujące timer’y:System.Threading.Timer – używamy, gdy chcemy aby nasza operacja była wykonywana w osobnym wątku (z puli). Dlatego, ten timer...
Sztuka programowania 4235 dni, 14 godzin, 43 minuty temu 216 źrodło rozwiń
Dzisiaj króciutka notka, ale mam nadzieję, że komuś przyda się. Załóżmy, że mamy kolekcję zawierającą np. DateTime. Naszym zadaniem jest zwrócenie maksymalnej wartości. Za pomocą LINQ łatwo to zrobić:DateTime[] dateTimeList=/.../; DateTime maxValue = dateTimeList.Max(); Niestety, w sytuacji gdy kolekcja zawiera 0 elementów dostaniemy wyjątek: “Sequence contains no elements”. Potrzebujemy funkcji MaxOrDefault, która niestety nie istnieje. Mamy do dyspozycji FirstOrDefault, SingleOrDefault, ale nie ma o...
Ostatnio napisałem jak możemy odebrać pingback z innego serwisu/strony. Teraz pora na to byśmy my poinformowali inną stronę, że linkujemy do niej. Samo w sobie wysyłanie nie jest skomplikowane, jednak to kiedy wysłać pingback może stanowić nie lada problem. Na przykład dodajemy post, który ma się wyświetlić 30 kwietnia, kiedy więc powinniśmy wysłać pingback? Przy dodaniu? Nie da rady bo go jeszcze nie ma widocznego, przez co nie ma jak zweryfikować czy pingback pochodzi z naszego źródła. Przy pierws...
Krótko o tym jak i kiedy korzystać z Creation methods.
Sztuka programowania 4241 dni, 14 godzin, 47 minut temu 383 źrodło rozwiń
W poprzednim wpisie przedstawiłem podstawy macierzy DSM. Dzisiaj postaram się wyjaśnić, jakie znaczenie ma to w praktyce. Sam fakt, że macierz pokazuje referencje między różnymi elementami systemu nie jest zbyt ciekawy. Pierwszą własność, jaką w łatwy sposób możemy odczytać z DSM jest spójność (cohesion). Dokładna wartość spójności zależy od konkretnej metryki. Ogólnie pisząc, wysoka spójność w systemie oznacza, że elementy w nim są bardzo od siebie zależne. Przyjrzyjmy się następującemu przykładowi (źr...
Sztuka programowania 4241 dni, 14 godzin, 47 minut temu 101 źrodło rozwiń
Opublikowano Do 22 kwietnia JetBrains oferuje zniżkę na swoje produkty w wersji personal. Więcej informacji tutaj: http://www.jetbrains.com/specials/ Tutaj cenniczek:ReSharper (34% OFF)IntelliJ IDEA (50% OFF)WebStorm (41% OFF)AppCode (40% OFF)PyCharm (40% OFF)PhpStorm (40% OFF)RubyMine (40% OFF)dotTrace Performance (35% OFF)dotCover (40% OFF) To też może Cię zainteresować:JetBrains szalejeWebcast z Johnem SkeetemWarsztat czyli moje narzędzia pracyWarsztat czyli moje narzędzia pracy–te używane spor...
Dziś krótki post informacyjny o zbliżającej się wielkimi krokami konferencji. Już niebawem odbędzie się konferencja ...
W dzisiejszym wpisie chciałbym zaprezentować macierz zależności i co można z niej odczytać. Pominiemy aspekty matematyczne – ze względu, że jest to macierz istnieje wiele faktów matematycznych ale myślę, że nie są one najważniejsze dla programisty. Załóżmy, że mamy prostą aplikację składającą się z klienta, warstwy usług, biznesowej oraz DAL. Macierz możemy wygenerować w nDepend – o tym programie kiedyś już pisałem. Umożliwia przede wszystkim liczenie metryk kodu i monitorowanie jakości kodu. Macierz dla...
Sztuka programowania 4242 dni, 13 godzin, 25 minut temu 115 źrodło rozwiń