Ja wiem, że programistyczny świat coraz bardziej zagarniany jest przez różnego rodzaju ORM-y i – co za tym idzie – czysty SQL jest używany coraz rzadziej. Może jednak właśnie z tego powodu warto poruszać związane z nim tematy, aby ci którzy doraźnie lub incydentalnie w nim programują trzymali się jednak pewnych zasad i konwencji. W tym wpisie chciałbym jedną z takich konwencji przybliżyć i tym samym być może zachęcić osoby, które mają do czynienia z SQL-em do jej stosowania. Wspomniana konwencja...
Bazy danych i XML 4055 dni, 1 godzinę, 22 minuty temu 229 źrodło rozwiń
W ostatnich wpisach, pokazałem dwa różne podejścia wykonywania pętli równolegle. Każda z nich wciąż ma wady, głównie związane z sytuacją gdzie część logiki blokuje wątki. W tym poście, pokażę bardziej dynamiczne podejście. Żaden z wątków nie będzie miał z góry przydzielonych elementów na których musi pracować. Zacznijmy po prostu od kodu:privatestaticvoid For(Action
Sztuka programowania 4056 dni, 3 godziny, 44 minuty temu 122 źrodło rozwiń
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
Zwyczajny, często widziany kod który parsuje stringa na inta. int Foo(string value) { var pageId = string.IsNullOrEmpty(value) ? 0 : int.Parse(value); return pageId; } W zależności od tego czy jesteśmy pewni, że przekazany string ładnie się sparsuje, powyższa funkcja może wystarczyć lub nie. Fakt, że dostajemy string już mówi, że coś może pójść nie tak. Gdybyśmy mogli przekazać int...
Sztuka programowania 4058 dni, 10 godzin, 8 minut temu 251 źrodło rozwiń
We use Kendo-UI in a project we are developing at work and it’s great if you don’t have to customize it a lot. Otherwise I’m pretty sure you will encounter many strange problems, like me. My current tasks connected with UI layer of the application so I’m struggling with many different problems. Today I’ll describe one of them and present my own solution.
The dynamic keyword has been part of the C# language for quite a while now. I thought I know it well, yet I stumbled upon an interesting case that surprised me.The code that works Here's a piece of code that I started with. This code works like you would expect.
Sztuka programowania 4058 dni, 10 godzin, 8 minut temu 115 źrodło rozwiń
Zrównoleglenie danego algorytmu to jeszcze nie koniec wyzwań. Pytanie jakie należy postawić, to jak wiele stworzyć wątków? Musimy wziąć pod uwagę synchronizacje i problemy z tym związane. Jeśli mamy tylko 4 procesory, wtedy tworzenie więcej niż 4 wątków nie przyśpieszy obliczeń, jeśli wszystkie one zawsze będą zajęte. Tworzenie większej liczy wątków niż CPU, ma sens wyłącznie jak część z nich musi czekać na jakieś dane i tym samym, nie wykorzystują one w pełni cykli CPU. Liczba wątków, zależy od tego j...
Sztuka programowania 4058 dni, 10 godzin, 8 minut temu 98 źrodło rozwiń
Po ponad miesiącu od ostatniego wpisu (niestety, mimo chęci, nie mogłem znaleźć chwili wolnego czasu) poruszę dzisiaj temat jednego z najczęściej używanych wzorców projektowych – Factory Method. Przy użyciu tego wzorca, możemy w prosty sposób zaimplementować funkcjonalność związaną z wytwarzaniem konkretnych “produktów” przez konkretne “fabryki”.
Sztuka programowania 4061 dni, 31 minut temu 392 źrodło rozwiń
Dzisiaj kilka rzeczy z Visual Studio, które przydają się a nie zawsze wszyscy mają świadomość, że są one dostępne. Zauważyłem, że często ustawiam breakpoint w jakimś miejscu a potem odpalam debugger, aby zacząć proces debugowania właśnie w tym miejscu. W VS istnieje coś takiego jak tymczasowy breakpoint. Wystarczy nacisnąć kombinację klawiszy CTRL+F10, a aplikacja uruchomi się i debugger przejdzie do danej linii (w zależności, w której był kursor podczas wykonywania tej operacji). Jedną kombinacją klaw...
Niedawno w projekcie pisałem małą apkę która wykonywała pewne działanie, które muszą być uruchamiane cyklicznie. W celu uzyskania dostępu do katalogu aplikacji użyłem zmiennej System.Environment.CurrentDirectory . Wszystko działało podczas debugowania. Jakies było moje zdziwienie, gdy okazało się, że zmienna ta wskazuje na katalog C:\Windows\System32\ podczas uruchamiania procesu przez Task Scheluder, zamiast katalogu aplikacji. Po długich lecz owocnych :) poszukiwaniach udało mi się znaleźć rozwi...
Sztuka programowania 4061 dni, 11 godzin, 2 minuty temu 330 źrodło rozwiń
Witajcie w Coding News – serii screencastów, w której omawiam najciekawsze wydarzenia i znaleziska minionego tygodnia.
W poprzednim poście pisałem o statycznej dekompozycji tablicy na kilka wątków. Główną wadą podejścia było przypuszczenie, że wszystkie iteracje są tak samo skomplikowane. W niektórych algorytmach należy znaleźć element spełniający podane wymagania. Wyobraźmy sobie, że mamy 100 elementową tablicę i dzielimy ją na 10 wątków. Ponadto element szukany znajduje się pod indeksem 9. Wniosek taki, że NIC nie zyskamy ze zrównoleglenia. Dziewięć wątków będzie szukało w złym miejscu, a pierwszy z nich będzie wyko...
Sztuka programowania 4065 dni, 41 minut temu 121 źrodło rozwiń
Kiedyś przeczytałem o antypaternie jakim jest tworzenie nowego typu wyjątku, który jest per aktualny projekt, czyli np. GitHubException, ktory dziedziczy z System.Exception i nie dodaje własnych pól ani zachowania. Tworzymy go ponieważ wszystko co już jest nie pasuje nam, a wiadomo, że rzucanie Exception też jest złem. Taki wyjątek nic nie wnosi. Łatwo powiedzi...
Sztuka programowania 4065 dni, 41 minut temu 266 źrodło rozwiń
Dzisiaj kilka rozważań na temat korzyści płynących z wielowątkowości. Zastanówmy się, jak bardzo może nam pomóc albo zaszkodzić wprowadzenie nowych wątków w aplikacji. Jeśli wykonanie danej pracy na jednym procesorze zajmuje T(1) a wykonanie jej na n procesorach zajmuje T(n) wtedy możemy oszacować korzyści płynące z nowych wątków. W przypadku gdy T(1)/T(n) daje wynik < n. oznacza to, że gdy praca na jednym rdzeniu zajęła 5 sekund, wtedy na 5 rdzeniach zajmie np. 1.2 sekundy. czyli wydajność ma chara...
Programowanie rozproszone 4065 dni, 41 minut temu 195 źrodło rozwiń
Pokazany sposób tworzenia prostego kontenera IoC w C#.
Sztuka programowania 4067 dni, 9 godzin, 22 minuty temu 899 źrodło rozwiń
Zapytano mnie wczoraj czego lepiej używać do konwersji typów w T-SQL, albowiem do wyboru są dwie konstrukcje cast i Convert. Zanim podzielę się odpowiedzią, jakiej udzieliłem ...
Bazy danych i XML 4067 dni, 9 godzin, 22 minuty temu 186 źrodło rozwiń
Chciałem przypomnieć prezentację Pawła Łukasika zatytułowaną Kurs programowania w C# – 24. Wzorce projektowe, która została nagrana 1,5 roku temu na VirtualStudy. Dużo się z niej nauczyłem zwłaszcza o antyzworcach. Ostatecznie pytanie o wzorce na pewno pojawi się na rozmowie o pracę, jeśli ktoś ma wątpliwości czy warto. Chociaż fakt lepszego zrozumienia jednego z najważniejszych pojęć powinien wystarczyć. Poniższy ry...
Sztuka programowania 4067 dni, 9 godzin, 22 minuty temu 658 źrodło rozwiń
Today I would like to introduce you to Process Governor – a new tool I added to my .NET diagnostics toolkit. This application allows you to set a limit on a memory committed by a process. I wrote this tool to test my .NET applications (including web applications) for memory leaks. With it I can check if under heavy load they won’t throw OutOfMemoryException.
Quartz.NET to biblioteka, tzw. scheduler służący do cyklicznego wykonywania zadań. Z grubsza rzecz ujmując, konfiguracja pracy Quartz.NET sprowadzania się do tworzeniu obiektów job/trigger w celu uruchomienia określonego zadania (kodu) w zaplanowanym czasie. Do dyspozycji mamy pojedyncze (SimpleTriggerImpl dla danego DateTime) oraz cykliczne uruchamianie zadań (CronTriggerImpl w oparciu o wyrażenia cron, ang. cron expressions). Wizualizacja DateTime nie jest wyzwaniem. W Internecie można zna...
Czasy kiedy wszystkie komunikaty błędów wyrzucaliśmy z kodu przez okno modalne alert mam nadzieje, że już dawno minęły. Dzisiaj mamy narzędzia dla programistów, które w mniej inwazyjny sposób potrafią zaadresować potrzebę sprawdzenia co w programie się dzieje na bieżąco.
Sztuka programowania 4068 dni, 25 minut temu 93 źrodło rozwiń