Powtarzanie kodu w kilku miejscach zwykle jest sygnałem zaniedbania i nie powinno mieć miejsca. Nawet (a może: w szczególności!) gdy kod ten jest prosty, głupi, niewymagający myślenia i będący efektem tzw. clipboard inheritance (ctrl+c, ctrl+v). Tyczy się to również konstruktorów klas. Tą część kodu łatwo jest przegapić, bo wszelakie ułatwiacze umożliwiają automatyczne ich wygenerowanie. A co jeśli mamy ich kilka? Poniższy przykład obrazuje stan, do którego NIE CHCEMY doprowadzić: 1: pu...
[More]
Tak prawdziwe, a często musimy się tego nauczyć... "the hard way": An untested backup strategy is no backup strategy at all! Źródło: Phil Haack.
Jakiś czas temu z dużego projektu nad którym obecnie pracuję zostały całkowicie usunięte i zaorane biblioteki Enterprise Library. I życie stało się prostsze. Wykorzystywaliśmy je jedynie do logowania i obsługi wyjątków i JAKOŚ trzeba było te funkcjonalności w systemie zachować. O ile w przypadku logowania wybór jest dość naturalny (wypasiony log4net), o tyle z wyjątkami nie było już tak "oczywiście". Na szczęście dzięki własnej fasadzie na EHAB, o której pisałem kilka miesięcy temu, n...
[More]
Ostatnio natknąłem się na coś, co... blew my mind (wydymało mi umysł?). Bardzo krótko wspomniał o tym Bartek Pampuch na ostatnim MTS i utkwiło mi w pamięci, ale dopiero kilka dni temu niechcący przyjrzałem się "owemu czemuś" bliżej. Owo cuś to biblioteka Reactive Extensions (Rx) implementująca założenia programowania reaktywnego by Microsoft. Nie będę zagłębiał się w teorię czy omawianie szczegółów, ponieważ sam dopiero zacząłem skrobać powierzchnię tej megazajebistej koncepcji i post...
[More]
Mądre słowa mądrego człowieka. Odnoszą się do tworzenia oprogramowania, ale pewnie nie tylko tam mają zastosowanie: Simplicity is prerequisite for reliability. Warto o tym pamiętać w programistycznym szale:). Źródło: Edsger W.Dijkstra.
Czy poniższy kod nie jest doskonałym odwzorowaniem odpowiedzi na pytanie "dlaczego programiści nie pracują w Święta?"? :) 1: Observable.Timer(new DateTime(1, 12, 25))
2: .Subscribe(x =>
3: {
4: throw new Exception();
5: });
Heh, ależ to głupie...
A co to za konstrukcja? O tym wkrótce.
"Bezpieczeństwo w WCF" - pojęcie takie wydaje się oklepane i opisane na wszelkie możliwe sposoby. Tyle materiałów, tyle blogów, artykułów, książek... Chciałem osiągnąć rzecz bardzo prostą, właściwie - podstawową. Zacząłem od stworzenia własnej implementacji interfejsów "tożsamości": IIdentity: 1: public class ProcentIdentity : GenericIdentity
2: {
3: public int Id;
4:
5: public ProcentIdentity(int id, string name)
6: : base(name)
7: {
...
[More]
Projektanci WCF zostawili w swoim produkcie bardzo dużo półprzymkniętych furtek czekających tylko na odkrycie i wykorzystanie ich potencjału. Jednym z takich czarodziejskich otworów do przyjemnego, różowego, miękkiego wnętrza WCF jest infrastruktura Behaviors (więcej o, między innymi, nich, na przykład w artykule "Extending WCF with Custom Behaviors"). Z ich pomocą można osiągnąć baaardzo wiele, między innymi: w niesamowicie elegancki sposób zebrać w jednym miejscu wszystkie błędy wyge...
[More]
Ostatnio było banalnie. Dziś słowa osoby niezwiązanej właściwie z informatyką, ale nadające temu banałowi głębszy sens. you can go complaining about how you lack passion (...) passion is something that likes to be conquered Źródło: "Night of the Living Dead" by Julia Marcell
Podczas korzystania z WCF najprostszą drogą do wywołania metody udostępnianej przez jakąś usługę jest pozwolenie Visual Studio na wygenerowanie odpowiedniego proxy, stworzenie jego instancji... i już - mamy metody usługi do dyspozycji. Bez wysiłku, bez kodu... bez sensu? O tym, dlaczego takie podejście NIE jest wyborem słusznym, rozpisywać się nie będę. Zainteresowanych argumentami "przeciw" odsyłam do fajnego artykułu autorstwa Miguela Castro na Code-Magazine: "WCF the Manual Wa...
[More]
Jakiś czas temu pod koniec jednego z programistycznych rajdów od świtu do świtu pojawiło się zapotrzebowanie na funkcjonalność "masz tu liczbę i zwróć X jej ostatnich cyfr w postaci stringa; w razie potrzeby wypełnij jego początek zerami". Wydaje się banalne i byłem pewny, że w ciągu kwadransa załatwię to odpowiednim formatowaniem integera. Po półtorej godziny (sic!) lektury MSDN, różnych blogów i popełniania głupich eksperymentów nadal byłem w kropce. Jest to szczególnie irytuj...
[More]