Programista 5/2013 (12)
Programista 5/2013 (12)
Usprawnienie procesu wytwarzania oprogramowania
W artykule przedstawiony zostanie model rozwojowy Git-flow, jaki wprowadzono do wielu projektów IT, zarówno komercyjnych, jak i open source. Okazał się on być bardzo udanym oraz skutecznym dla niepewnych procesów release'u. Głównie uwaga będzie poświęcona strategii rozgałęzienia i zarządzania release'ami. Model skupia się wokół systemu Git jako narzędziu do wersjonowania kodu.
Popularność języków Javy czy C/C++ nie podlega oczywiście dziś dyskusji, jednakże stary dobry Pascal nadal ma się całkiem dobrze. Do jego popularności w ostatnim czasie przyczynia się firma Embarcadero, która systematycznie wydaje kolejne edycje popularnego środowiska Delphi (a także C++Builder). Najnowsza odsłona to Delphi XE4. Jednak od dłuższego czasu istnieje projekt Free Pascal (FP), czyli kompilator open - source języka Pascal, zgodny z językiem Pascal i jego dialektem oferowanym przez Delphi.
Szperanie w kodzie binarnym aplikacji od zawsze pobudzało wyobraźnię programistów. Zapewne każdy z nas na jakimś etapie zainteresowania komputerami próbował swoich sił w tej dyscyplinie – czy chodziło o poprawienie błędu w programie bez dostępu do kodu źródłowego, czy o uzyskanie nieśmiertelności w grze. Tym razem spróbujemy zmodyfikować program skompilowany w systemie Linux bez używania debuggera i bez konieczności mozolnego grzebania w kodzie maszynowym.
Zadajmy sobie pytanie. Jaki jest pierwszy element naszej strony, który decyduje o jej postrzeganiu? Odruchowo chciałoby się powiedzieć: „jest to oczywiście strona główna”. Nic jednak bardziej mylnego. Tak naprawdę pierwszym elementem, na który zwracamy uwagę, jest adres, pod jakim znajduje się ta strona. Właśnie tym tematem zajmiemy się w niniejszym artykule. Dowiemy się, w jaki sposób formatować adresy wewnątrz naszej strony tak, aby były one przyjazne dla osób odwiedzających ją oraz spełniały wszystkie wymogi funkcjonalne w naszej aplikacji.
W pierwszej części tego artykułu (opublikowanego w ósmym numerze Programisty) przedstawiłem kilka podstawowych wariantów implementacji maszyny stanów: mechanizmu wykorzystywanego najczęściej do zarządzania stanem w grach. W niniejszym tekście zaprezentuję implementację maszyny stanów ze stosem i pokażę, jak za jej pomocą można zbudować prosty, a jednocześnie wysoce elastyczny i reużywalny mechanizm zarządzania stanem gry. Zapraszam do lektury!
Część 2 – Fakty
W poprzedniej części rozważań na temat projektowania hurtowni danych poznaliśmy ich wielowymiarowy model. Przypomnę: w modelu tym zakładamy, że baza danych zawiera fakty opisane przez wymiary i określające wartości miar. Fakt to nic innego, jak pojedyncze wydarzenie podlegające analizie (np. fakt wynajęcia samochodu czy sprzedaż biletu loteryjnego). W poprzednim numerze skoncentrowaliśmy sie na wymiarach, teraz nadszedł czas na fakty. Czym jest tablica faktów? To podstawowe miejsce przechowywania analizowanych danych. Znajdziemy w niej informacje o obiektach i związanych z nimi wydarzeniach.
W świecie baz danych bez wątpienia prym wiodą znane od kilku dekad relacyjne bazy (RDBMS), takie jak MySQL, PostgreSQL czy Oracle. W tym artykule chciałbym podzielić się wiedzą o stosunkowo młodych, ostatnio będących na topie bazach nierelacyjnych (NoSQL).
Poniższy artykuł jest pierwszym z serii trzech, w których chcemy w kompletny sposób przedstawić zagadnienia związane z odświeżaniem i utrzymywaniem aktywnego (nieblokującego) interfejsu użytkownika w aplikacjach korzystających z wątków roboczych (włączając w to zadania biblioteki TPL i metody asynchroniczne z WinRT). W pierwszej części przedstawimy zagadnienia dotyczące biblioteki kontrolek Windows Forms, które stanowią stosunkowo dobrze znaną i ugruntowaną technologię tworzenia aplikacji dla Windows. W drugiej części zajmiemy się problemem interfejsu w aplikacjach wielowątkowych opartych o komponenty z biblioteki WPF. Wreszcie, w trzeciej omówimy rozwiązanie oparte na kontekście synchronizacji, którego zaletą jest unifikacja mechanizmów synchronizacji interfejsu użytkownika z wątkami w różnych technologiach programowania aplikacji dla Windows. Jak pokażemy, kontekst synchronizacji dostarcza jeden spójny mechanizm umożliwiający kontrolę wizualnych kontrolek spoza wątku interfejsu użytkownika.
Z tego artykułu prawdopodobnie czytelnik nie dowie się niczego, co mogłoby mu pomóc w pracy. Pisząc go, myślałem raczej o chwili rozrywki, o podsunięciu tematu do rozmowy przy automacie do kawy. Nie będzie to jednak rozrywka bezmyślna. Co więcej, z góry uprzedzam, że w tym artykule pojawią się wzory, które w pierwszej chwili mogą wydawać się dość trudne, ale tak naprawdę to tylko długie sumowania.
Inżynierią wsteczną (ang. reverse engineering) określa się techniki wykorzystywane do analizy skompilowanego oprogramowania, bez dostępu do jego kodów źródłowych. W tym artykule chciałbym przedstawić metody, jakie wykorzystywane są przez twórców złośliwego oprogramowania do utrudnienia analizy wirusów komputerowych i złośliwego oprogramowania (tzw. malware), a także sposoby, jak sobie z tym radzą firmy antywirusowe i same antywirusy.
Jak wydzielić i reużyć powtarzający się w całej aplikacji kod? Jak zastosować zasadę Single Responsibility Principle w praktyce? Co to są cross cutting concerns? Kiedy zastosować przybliżenie programowania aspektowego, jakim jest programowanie funkcyjne?
Część III: Zarządzenie złożonością przez trójpodział logiki – Open/closed principle w praktyce
W modelu złożonego problemu zwykle możemy wydzielić strukturę wyższego rzędu charakteryzującą się różną podatnością kodu źródłowego na zmiany. W niniejszym artykule zostanie przedstawiony meta-model, którym możemy posiłkować się w zmaganiach ze złożoną logiką biznesową. Meta-model będzie praktyczną realizacją drugiej zasady SOLID: Open/closed principle, która pozwala tworzyć rozwiązania otwarte na rozbudowę (rozbudowa to nie to samo co zmiana).
Żaden z czołowych systemów CMS opartych na licencji Open-Source nie posiada tak rozbudowanego framework'a MVC jak TYPO3. Społeczność TYPO3, obserwując rozwój różnych konkurencyjnych rozwiązań programistycznych oraz stosując podejście do aplikacji internetowych zawartych we FLOW3, postanowiła stworzyć standard do tworzenia rozszerzeń. Dziś mijają już ponad 3 lata od powstania Extbase.
Większość programistów wie, co to refaktoryzacja, zna zalety wynikające z jej stosowania, zna również konsekwencje zaniedbywania refaktoryzacji. Jednocześnie wielu programistów uważa, że refaktoryzacja to bardzo kosztowny proces, wymaga wysiłku i brak na nią czasu w szybko zmieniających się warunkach biznesowych.