Until now we had many excuses for not writing integration tests:we prefer unit tests over integration testsour business logic (aka services) is separated and thoroughly testedwe keep our ontrollers on a dietUI consists mostly of standard elements (aka widgets) which are tested on their ownwe are lazy But there was still too much space for error. From time to time a seemingly innocent change in Razor view (or HTML helper, or filter, or “something completely irrelevant”) unexpectedly broke one of the page...
Sztuka programowania 3337 dni, 13 godzin, 56 minut temu 104 źrodło rozwiń
…humans make mistakes, but the answer is not to add additional humans to the process. Rather, the solution is that the entire deployment process should be automated, with automated deployment and automated acceptance tests. No właśnie, ludzie robią błędy, a jeśli dodamy więcej ludzi do procesu to szansa na zmniejszenie ilości błędów jest delikatnie mówiąc mała, bardzo mała, taka tyci tyci. Ostatnie dwa wpisy były poświęcone debugowaniu a dzisiaj – po przerwie – wrzucam arcy ciekawy artyk...
Pisząc aplikacje na Windows Phone często chcemy dać użytkownikowi możliwość przypnięcia jakiegoś elementu do menu start. Problem pojawia się, gdy chcemy to sformułowanie przetłumaczyć na inny język tak, aby było zgodne z obowiązujym nazewnictwem WP. Żywi lub automatyczni tłumacze nie do końca sobie z tym radzą, dlatego też zebrałem oficjalne określenia polecenia "przypnij do ekranu startowego" z kilku języków. Może się komuś przyda, mnie na pewno! Dopisujcie kolejne języki w komentarzach :) Angiel...
Mobile development 3337 dni, 13 godzin, 56 minut temu 133 źrodło rozwiń
List jest bardzo popularną kolekcją danych, niestety często źle używaną. Kiedyś pisałem, że jeśli ma się jakiekolwiek informację o rozmiarze kolekcji, warto w konstruktorze przekazać początkowy rozmiar. Temat jednak będzie dotyczył porównania List
Sztuka programowania 3340 dni, 13 godzin, 49 minut temu 231 źrodło rozwiń
Dzisiaj o czymś, z czym spotkałem się podczas niedawnego dewelopmentu. Pewnego razu klient zażyczył sobie, żeby w grupie nakładających się znaczników, klikając w przeglądarce na jeden z nich, grupa rozwijała się automatycznie i widoczne były znaczniki w postaci “ślimaka” lub “słońca”. Po przeszukaniu zasobów Internetu, natknąłem się na Overlapping Marker Spiderfier (oms.js) . Okazało się, że jest to świetne rozwiązanie, z którego oczywiście skorzystałem.
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 3343 dni, 11 godzin, 8 minut temu 226 ź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 3344 dni, 13 godzin, 30 minut temu 121 ź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 3346 dni, 19 godzin, 54 minuty temu 249 ź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 3346 dni, 19 godzin, 54 minuty temu 113 ź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 3346 dni, 19 godzin, 54 minuty temu 96 ź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 3349 dni, 10 godzin, 17 minut temu 388 ź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 3349 dni, 20 godzin, 49 minut temu 327 ź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 3353 dni, 10 godzin, 28 minut temu 120 ź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 3353 dni, 10 godzin, 28 minut temu 265 ź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 3353 dni, 10 godzin, 28 minut temu 194 źrodło rozwiń
Pokazany sposób tworzenia prostego kontenera IoC w C#.
Sztuka programowania 3355 dni, 19 godzin, 8 minut temu 881 źrodło rozwiń