Ilu z nas wracając do starego kodu (napisanego wczoraj/ tydzień temu/ miesiąc temu) krzywi się patrząc na bałagan, który po sobie pozostawił? W zasadzie prościej będzie chyba zapytać komu się to nie zdarza. Otóż amerykańscy naukowcy znaleźli na to sposób. No dobra może nie amerykańscy, ale skrót jest z angielskiego - SOLID, rozkłada się on na pięć czynników, a każdy z nich jest znowu jakimś skrótem.
Strona głównaUżytkownik
Paweł Łukasik | użytkownik
Architektura 4632 dni, 16 godzin, 42 minuty temu 244 źrodło rozwiń
"Firma" organizuje programistom warunki pracy. Środowisko. Sprzęt. Oprogramowanie. Kawkę/herbatkę/whateva. Na ten temat się jeszcze pewnie kiedyś "rozwinę". A co najważniejsze, ten abstrakcyjny byt - "firma" - programistom PŁACI. A ja, jako team leader? Co ja mogę zrobić? Co POWINIENEM robić? Dumałem nad tym dość sporo i wydaje mi się, że po dobrych kilku tygodniach refleksji sformułowałem idealne podsumowanie roli team leadera. A przynajmniej takiego team leadera, do którego ja chciałem trafić, wyobraża...
Uhu, dawno nie pisałem. Już już, nie płaczcie. Dlaczego warto rozmawiać, pytać, poprawiać i pokazać komuś swój kod? Najtrudniej jest znaleźć swoje błędy, trudno jest spojrzeć na swój kod i zapytać się "czemu zrobiłem to tak - a nie w inny sposób?". Skoro wszystko działa tak jak założyłem na początku to znaczy, że jest dobrze i refaktoryzacja jest nie potrzebna. Jeśli się uruchamia, działa i nie wywala to po co mi napisać testy. I w końcu skoro się tyle namęczyłem na tym wszystkich, użyłem całej swojej...
Na tym blogu pojawiło się już trochę informacji na temat Reactive Extensions (Rx), dlatego dla zainteresowanych mam informację, że niedawno udostępniona została wersja beta kolejnej odsłony Reactive Extensions. Nowa wersja RX w skrócie zawiera następujące zmiany...
autor: Jak kilkukrotnie pisałem - od prawie kwartału nie jestem już samotnym homo-jeźdźcem na zerojedynkowej dev-pustyni. Teraz oprócz kodowania mam sporo innych "zawodowych" spraw na głowie... i o tym sprawach będę czasem refleksje puszczał. Wcześniejszy cykl Zawód-programista wyewoluował sobie w Zawód-team leader. Życie. Oficjalnie moje stanowisko to "dev lead", ale "team leader" jest moim zdaniem bardziej pasujące do nowych obowiązków. Zacznę od rzeczy absolutnie podstawowej, czyli jak zorganizowałe...
Ostatnio przyszło mi nieco więcej niż zwykle bawić się zrzutami pamięci różnych procesów, generowanych przez procdumpa, tudzież myszkowo z Process Explorera lub Process Hackera. Czasem po prostu wygodniej jest zrobić zrzut i potem bawić się takim 'zamrożonym procesem' na spokojnie, w innym miejscu i o innym czasie. Szczególnie, gdy bawimy się w analizę jakiegoś ciekawego malware'u (;)) i po prostu maszyna wirtualna nie jest najlepszym miejscem do zabawy debuggerem, a pliki .dmp zarażonych procesów można ...
Po kilku tygodniach korzystania z Marketplace z poziomu telefonu nasunęło mi się kilka myśli i dobrych rad dla programistów umieszczających tam swoje aplikacje. Dotyczą one głównie aplikacji użytkowych – nie gier – i wynikają z potrzeby wygody korzystania z aplikacji mobilnych.Metro UI Nie oszukujmy się – ludzie korzystający z Windows Phone lubią styl Metro. Więc jeśli myślisz o zaimportowaniu twojej aplikacji z Androida czy iPhone’a łącznie z jej wyglądem (tak jak ta po prawej), to wyleje się na ciebie...
Mobile development 4653 dni, 7 godzin, 51 minut temu 232 źrodło rozwiń
Bardzo lubię TFS, może nie jest doskonały ale ja go lubię. Ostatnio poszukiwałam jakiejś kontroli wersji do użytku prywatnego, dlatego ucieszyłam się na wiadomość że nowy TFS będzie również w wersji Express.
Na podstawie dwóch ostatnich wpisów ("[MAF 01] Rzut okiem na Managed Aadd-in Framework (System.AddIn)" , "[MAF 02] Przykład prostej aplikacji z obsługą wtyczek z wykorzystaniem Managed Aadd-in Framework (System.AddIn)") oraz MSDN, postanowiłem skompresować przedstawione informacje, by zebrać je wszystkie na jednej kartce papieru. Wspomniane informacje o MAF na kartce papieru, czyli "MAF w pigułce" ("MAF in a nutshell"), dostępne jest jako PDF lub obrazek (jpg). Wersja PDF (dostępna przez Google Docs, ab...
W poprzedniej notce pokazałem jak przy pomocy bardzo prostego interfejsu IRepository oraz QueryObject można zrealizować warstwę dostępu do danych. W zalezności od wielkości projektu może się okazać, że ciut brakuje funkcjonalności. Co zatem robić? Z założenia nie chcemy już więcej zmieniać naszego interfejsu. Jak więc przykładowo wykonać operację pobrania rekordu z bazy i ustanowienia na nim blokady? W bazowej implementacji nie mamy takiej metody... i nie będziemy jej dodawać do interfejsu. Na szczęście...
Architektura 4678 dni, 4 godziny, 4 minuty temu 110 źrodło rozwiń
Tworząc aplikację, która operuje na jakichkolwiek danych, które mają być dostępne również w przyszłości, szybko dochodzimy do momentu, kiedy to musimy wybrać odpowiedni sposób składowania tych danych. Po szybkim namyśle, przyjdzie Wam z pewnością kilka propozycji: Tekstowy plik danych o określonej strukturze Plik XML (można korzystać z serializacji) Baza danych Każde z tych rozwiązań ma swoje określone wady i zalety, a wszystko zależy również od skali projektu. W moim przypadku miałem właśnie do czy...
Bazy danych i XML 4683 dni, 20 godzin, 28 minut temu 349 źrodło rozwiń
W poprzednim poście przedstawiłem ogólne zasady działania GC w zarządzanych językach. Dziś przyjrzymy się bardziej na konstrukcję rozwiązania Microsoft’owego. Zakładam, że czytelnik zna już algorytm Mark&Sweep. Pamięć alokowana w .NET jest przechowywana w tzw. generacjach. Istnieją 3 generacje:Generation 0 – zwolnienie obiektu z GEN0 jest szybkie i mało kosztowne. Przechowywane są w niej obiekty używane tylko przez krótki czas. Generation 1 – obiekty, które awansowały z GEN0. Zwolnienie zasobów w GE...
W poprzednim poście przedstawiłem zasadę działania generacji w GC. Dowiedzieliśmy się, że zwalnianie zasobów z generacji 0 jest bardzo szybkie z kolei z GEN 2 wolne. Healthy GC to reguła określająca optymalny (zdrowy) stan GC: gen0 : gen1 : gen2 => 100 : 10 : 1 W Internecie można również znaleźć nieco inne wartości ale ogólna zasada jest taka sama: GEN0 powinna zawierać dużo więcej obiektów niż GEN2. Jeśli obiekty nie są zwalniane, wtedy promowane są do generacji pierwszej i drugiej. Z poprzedniego po...
Jeśli miał ktoś do czynienia np. z CPP z pewnością kojarzy pojęcie destruktora. Jest to metoda, wywoływana w momencie zwalniania obiektu z pamięci (przeciwieństwo konstruktora). Zarówno w CPP jak w C#, nazwa destruktora stanowi ‘~’ plus nazwa klasy.
W poprzednim wpisie chciałem pokazać jak w dłuższej perspektywie opasłe obiekty repozytoriów są mało użyteczne i nie spełniają swoich teoretycznych założeń. Mimo to jednak postanowiłem zostawić w swojej infrastrukturze interfejs IRepository
Architektura 4687 dni, 7 godzin, 48 minut temu 218 źrodło rozwiń
Niedawno poznałem w pracy magiczną kombinację klawiszy, która daje mi od tamtej pory wiele radości. O ile o radości może być w tym przypadku mowa. Chodzi o CTRL+G. Takie coś wciśnięte w VS w kontekście TFS wyświetli dialog box z polem na wpisanie ID interesującego nas workitema. Po wpisaniu tegoż otwiera się nowa zakładka z wybranym w ten sposób elementem. Baaaardzo się cieszę, że nauczyłem się tego po 3 tygodniach a nie 3 latach szukania tasków za pomocą sortowania wyników zapytań ORDER BY ID DESC.
O to jest pytanie. Używać czy nie używać Repository Pattern? Ostatnio troszkę się nad tym zastanawiałem i doszedłem do solidnego wniosku: tak i nie. :) Wiadomo, że ktoś zawsze powie: "to zależy". A ja mu przytaknę. W malutkim projekcie nie ma sensu. W większym? Chcąc być purystą powinienem zrealizować cały dostęp do danych poprzez wartwę realizowaną na bazie Repository Pattern. Czy to ma sens? Co jeśli chcę tylko wyciągnąć imię i nazwisko ostatnio dodanego użytkownika? Czy na prawdę muszę pisać te wszys...
Architektura 4692 dni, 13 godzin, 40 minut temu 267 źrodło rozwiń
Zachęcam do kolejnego artykułu, tym razem o wzorcu MVVM: http://msdn.microsoft.com/pl-pl/library/wprowadzenie-do-wzorca-projektowego-model-view-viewmodel-na-przykladzie-aplikacji-wpf.aspxExplore posts in the same categories:Patterns & Practices, WPF
Architektura 4701 dni, 25 minut temu 920 źrodło rozwiń
Aby pisać kod, który jest wydajny i optymalny należy dobrze zrozumieć jak działa Garbage Collector (GC). W dzisiejszym poście przedstawię ogólne zasady działania GC na przykładzie algorytmu mark and sweep. Zaznaczam, że implementacja w .NET różni się i jest dużo bardziej wyrafinowana – ale o tym w następnych postach. Chcę najpierw przedstawić algorytm mark and sweep ponieważ da to czytelnikowi ogólny obraz zagadnienia związanego ze zwalnianiem pamięci w językach zarządzanych. Garbage Collector oczywiści...
Pracując na co dzień z emulatorem systemu Windows Phone 7 można zaoszczędzić trochę czasu korzystając ze skrótów klawiszowych. Skróty są utworzone dla podstawowych funkcji telefonu i symulują przyciski, w które wyposażony jest telefon. Korzystając z emulatora można wykorzystywać następujące skróty na klawiaturze:F1 – odpowiada naciśnięciu przycisku WsteczF2 – odpowiada naciśnięciu przycisku StartF3 - odpowiada naciśnięciu przycisku SzukajF6 – symuluje wciśnięcie d...
Mobile development 4695 dni, 2 godziny, 30 minut temu 66 źrodło rozwiń