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 4670 dni, 5 godzin, 22 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...
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 4690 dni, 20 godzin, 32 minuty temu 232 źrodło rozwiń
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 4715 dni, 16 godzin, 45 minut temu 110 źrodło rozwiń
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 4724 dni, 20 godzin, 28 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 4730 dni, 2 godziny, 21 minut temu 267 źrodło rozwiń
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 4732 dni, 15 godzin, 11 minut temu 66 źrodło rozwiń
Niniejszy post jest kontynuacją cyklu o Reactive Extensions dla .NET ([RX 1], [RX 2], [RX 3], [RX 4], [RX 5], [RX 6], [RX 7], [RX 8], [RX9], [RX10]) i pojawią się w nim przykłady wykorzystania Reactive Extensions. W ramach przykładu pokazane zostanie okno aplikacji, która w pasku statusu będzie wyświetlać, położenie kursora myszki w oknie aplikacji oraz informacja, czy kursor znajduje się w lewej, czy prawej części okna. Niniejszy przykład zostanie wykonany z wykorzystaniem WPF, należy więc pamiętać, że...
Programowanie rozproszone 4736 dni, 20 godzin, 1 minutę temu 110 źrodło rozwiń
Niniejszy post jest kontynuacją cyklu o Reactive Extensions dla .NET ([RX 1], [RX 2], [RX 3], [RX 4], [RX 5], [RX 6], [RX 7], [RX 8], [RX9]), dotyczyć on będzie możliwości metod rozszerzających służących wykonywaniu połączenia dwóch lub więcej strumieni. Jedną z interesujących cech Reactive Extensions jest kompozycja obserwowalnych kolekcji, czyli strumieni danych. Istnieje wiele metod rozszerzających służących wykonywaniu połączenia dwóch lub więcej strumieni; Amb, Concat, SelectMany, Merge, Zip, Combin...
Programowanie rozproszone 4748 dni, 4 godziny, 52 minuty temu 89 źrodło rozwiń
Wiele z przewag Gita nad TFS wynika z zasadniczych różnic pomiędzy scentralizowanym a zdecentralizowanym podejściem do kontroli wersji. Więcej na ten temat pisałem w postach Git - rozproszony system kontroli wersji oraz Dlaczego już nie lubię SVN. Zapraszam również tam, a póki co...
W ramach kontynuacji cyklu o Reactive Extensions dla .NET ([RX 1], [RX 2], [RX 3], [RX 4], [RX 5], [RX 6], [RX 7]) chciałbym przejść teraz do zdarzeń, dla których Rx dostarcza szczególnego wsparcia. Programowanie reaktywne, to również wykorzystanie zdarzeń (z j. ang. event), do których podłączamy się, przekazując delegat do funkcji, która ma obsłużyć zdarzenie (z j. ang. event handler), następnie czekamy na nachodzące zdarzenia. Dla przykładu rozważmy obsługę zdarzeń związanych z ruchem myszy. Wyobraźmy ...
Programowanie rozproszone 4766 dni, 9 godzin, 3 minuty temu 213 źrodło rozwiń
Używając LINQ należy pamiętać o takiej właściwości tego języka zapytań jak opóźnione wywoływanie (Diferred Execution). Polega to na tym, iż zapytanie jest wywoływanie dopiero wtedy, gdy jest to rzeczywiście potrzebne. Najczęściej dzieje się podczas wowoływania metody, która sprawdza całą kolekcje, którą przeszukujemy, takimi metodami są np. Count() ToList() Każda z tych metod, aby zwrócic wynik musi sprawdzić całą kolek...
Tak jak pisałem we wcześniejszych częściach ([RX 1], [RX 2], [RX 3], [RX 4]), Reactive Extensions dla .NET oferują mnóstwo pomocniczych rozszerzeń pozwalających na proste tworzenie obserwowalnych kolekcji. Przyjrzyjmy się tym najbardziej podstawowym. Najprymitywniejsze kolekcje obserwowalne Poniższa tabela przedstawia najprymitywniejsze (lub inaczej najprostsze) kolekcje obserwowalne. Dla każdego przykładu oprócz funkcji generującej obserwowalną kolekcję, podano również odpowiednik w postaci kolekcj...
Przeglądając kod wielu projektów, zarówno komercyjnych jak i open source, można spotkać całą masę konwencji nazewniczych stosowanych do klas i metod testujących. Dzisiaj przedstawię kilka moich zasad w tej materii wraz z uzasadnieniem. Wychodzę z założenia, że bardziej niż konwencja, standard czy "przyjęta dobra praktyka" liczy się czytelność pisanego kodu i łatwość powrotu do niego nawet po kilku miesiącach od napisania. Dlatego też w swoich projektach nie mam zdefiniowanej jedynego słusznego schematu n...
Nauka WPF idzie całkiem dobrze, a to oznacza kolejną porcję informacji. Dzisiaj trochę o ficzerze z Windows7 (które jest w Viście), a nie wiem czy będzie nadal aktualny w nowej wersji Windows, która pewnie ukaże niebawem. Opowiem trochę o pasku postępu, który można wyświetlać na ikonie aplikacji, która jest na systemowym pasku zadań, oraz o tym jak dodać kilka (maksymalnie 7 widocznych) guzików do podglądu aplikacji. Przez podgląd rozumiem, najechanie myszą na ikonę działającej aplikacji, znajdującą si...
Na dzień dzisiejszy wybierając "mocking framework" stawiam właśnie na fakeiteasy. Ma ona jeden ciemny zakamar, w którym można nieźle pobłądzić... a jest to testowanie wywołania settera.
Poprzednia część artykułu poświęconego Reactive Extensions (RX) dla .NET została zakończona prostym przykładem, w którym prostą obserwację kolekcji przeprowadzono nie tylko w ramach wątku bieżącego, ale również na odrębnym wątku. W tym celu wykorzystano jednego z wielu planistów (scheduler'ów) dostępnych w ramach RX. Przyjrzyjmy się im trochę bliżej. Otóż w Reactive Extension dla .NET można w bardzo prosty sposób sterować, na jakim wątku „pracuje” obserwowana kolekcja lub przy pomocy jakiego wątku chcem...