Dzisiaj myśl, która powinna być mottem każdego programisty. Porada motywująca do rozwoju i do poznawania świata. Zasada, której przestrzeganie jest gwarancją ogromnego doświadczenia, obycia i umiejętności porozmawiania na każdy programistyczny temat. Wreszcie: jedna z moich największych "zawodowych" porażek, ponieważ okazało się, że na życie według tej reguły najzwyczajniej w świecie nie ma czasu:
Know something about everything and everything about something
A chciałoby się i zastosować w pra...
[More]
Zastanawiałem się ostatnio nad tym, jaki MUSI być godny zaufania freelancer-programista, a jaki być NIE MOŻE. Efektem jest kilka spostrzeżeń, które dla wielu ocierają się zapewne o banał... ale ze względu na spore zainteresowanie ostatnim postem o tej tematyce postanowiłem się nimi podzielić. Co zatem cechuje profesjonalistę? Zadowolenie klienta Różne mogą być bodźce powodujące zostanie freelancerem i różne zrządzenia losu mogą być przyczyną radości bądź rozżalenia. Wartością numer jeden w ty...
[More]
Mój komputer ma 4GB RAMu, z czego 2GB prawie cały czas oddane są maszynie wirtualnej, na której pracuję. W celu zwiększenia wydajności wyłączyłem plik stronicowania, coby mi co chwila nie rzęziło dyskami (wzrost wydajności o jakieś miliard %, co chyba zwiastuje rychły zgon tychże...?) Podczas normalnej pracy, z uruchomionymi wszystkimi potrzebnymi aplikacjami, zwykle ok 500MB wisi sobie wolne (jak możecie się domyślić, przed przejściem na 64 bity było dość kiepsko:) ). Po aplikacjach nie zauważ...
[More]
W ubiegłym tygodniu w implementowanym systemie zajmowałem się datą i czasem. I tak mnie tknęło... dlaczego w ogromnej większości systemów, które przyszło mi oglądać, datę zapisuje się w sposób następujący? 1: article.PublishedTime = DateTime.Now
Niby co jest z tym złego? Właściwie... to zależy od kontekstu i rodzaju tworzonego systemu. Korzystając z powyższej konstrukcji trzeba zdawać sobie sprawę z tego, że tak zapisany czas jest ZALEŻNY od maszyny, na której operacja ma miejsce. W...
[More]
Czytając ostatnio dokumentację narzędzia KDiff3 (tak, zdarza mi się czytać takie rzeczy:) ) natknąłem się na zabawne, a jednocześnie chyba dość prawdziwe stwierdzenie: To err is human, but to really mess things up you need a computer Przypomina to, że ostrożność przede wszystkim! Źródło: dokumentacja KDiff3.
Gmail jest moją "oficjalną" skrzynką i codziennie dostaję na niego sporo wiadomości. Spora część to spam, ale... wolę dostać 100 spamów każdego dnia niż przegapić jeden nie-spam z powodu nadgorliwego filtra antyspamowego. Nie korzystam z interfejsu webowego, więc i o zapełniającym się spamie nie byłem w żaden sposób powiadamiany. Tak więc ku pamięci: poniższy obrazek prezentuje ustawienie wyłączające filtr antyspamowy w Gmailu (trochę naokoło, ale działa:) ):
Programowanie w JavaScript niesie za sobą dużą dozę swobody jeżeli chodzi o posługiwanie się funkcjami. Funkcje są wszędzie, deklarować je można na wiele sposobów, a rozsądne ich wykorzystanie jest źródłem nowych przyzwyczajeń, które chciałoby się niejednokrotnie przenieść do "rodzimego" języka programowania. W moim przypadku oczywiście C#. I dzięki wyrażeniom lambda takie szafowanie funkcjami na lewo i prawo staje się nie tylko możliwe (bo możliwe było już wcześniej od .NET 2.0 dzięki...
[More]
W poście przedstawiającym Gita wspomniałem o możliwości modyfikacji historii - i dzisiaj więcej na ten temat. Jest to funkcjonalność naprawdę nie do przecenienia. Commit nie jest już czynnością ostateczną, z którą nie można nic zrobić, jak nas przyzwyczaił SVN. Wtedy przed puszczeniem zmian trzeba się było zastanawiać i analizować dokonane zmiany. Tutaj natomiast bardzo sensownym trybem pracy jest lokalne zatwierdzanie zmian tak często jak mamy na to ochotę - ja na przykład nienawidzę mieć jedno...
[More]
Git posiada możliwość nadawania własnych aliasów jego komendom. W konfiguracji wygląda to tak: 1: [alias]
2: ci = commit
A więcej na ten temat można poczytać w WIKI.
Ja jednak zamiast korzystać z aliasów, napisałem swój skrypt do miniaplikacji AutoHotkey. Przechwytuje ona zdefiniowane sekwencje klawiszy, w locie zamieniając na inne akcje. (tym, którzy go nie znają, gorąco polecam ściągnięcie i kilka chwil zabawy, świetna sprawa).
Mój poniższy skrypt jest banalny: ogranicz...
[More]
Wspominałem o "nienajświetniejszym" działaniu Git pod Windows oraz o tym, że w Mercurialu udało mi się zrobić WIĘCEJ przez 2 godziny niż w Git przez kilka miesięcy. Główną czynnością, którą miałem wówczas na myśli, było udostępnienie swojego repozytorium na zewnątrz. Linuxowa wersja Gita rozprowadzana jest z komendą git-daemon pozwalającą na zdalne dobranie się do repo po protokole git://. Taki odpowiednik svnserve. Niestety po zainstalowaniu msysgit okazuje się, że w tej wersji deamo...
[More]
System kontroli wersji zbierający WSZYSTKO z naszego working copy byłby bardzo ciężki w użyciu. Dlatego też każdy z nich w ten czy inny sposób umożliwia ignorowanie wybranej zawartości. Kiedyś pisałem o obsłudze tego scenariusza w SVN (post "Ignorowanie "zewnętrznych" plików w repozytorium SVN"), zobaczmy więc dla porównania jak to jest zrealizowane w Gicie. Ignorowanie nowych plików Standardowym zachowaniem jest ignorowanie plików, których w ogóle nie chcemy w swoim repozytorium. Do...
[More]
Instalacja Git na Windows Najprostsze co mogę zrobić to podać link do instalatora: http://code.google.com/p/msysgit/downloads/list. Ładny wizard przeprowadzi nas przez cały proces instalacji. Wstępna konfiguracja Przed rozpoczęciem pracy z Git zalecana jest wstępna konfiguracja narzędzia. Najpierw zidentyfikujemy się na poziomie całej maszyny w konfigu wspólnym dla wszystkich repozytoriów: 1: git config --global user.name "Procent"
2: git config --global user.email proce...
[More]
Ostatnim razem ponarzekałem trochę na SVN i scentralizowany model systemów kontroli wersji. Jedną z wspomnianych alternatyw, realizującą model rozproszony, jest Git - i o nim dzisiaj kilka słów. Nie zamierzam pisać tutoriala dla Git czy nawet omawiać zasad jego działania. Zamiast tego zbiorę i zaprezentuję garść linków, które warto odwiedzić chcąc zająć się Gitem na poważne. Muszę ostrzec, że zabawa ta nie jest banalna - i nie zawsze przyjemna. Ja korzystam z Gita od ponad pół roku, a mimo to j...
[More]
Niejednokrotnie pisałem o SVN, zachwycając się cudownością tego narzędzia. Wpłynęło ono na moje życie zawodowe dość znacząco - tak naprawdę od niego zacząłem przygodę z kontrolą wersji. A kontrola wersji całkowicie zmienia sposób pracy, o czym przekonał się każdy kto zaczął korzystać z jakiegokolwiek systemu z tej rodziny (wtrącenie: jeśli czyta to ktoś ignorujący te systemy, niechaj natychmiast się nawróci! to nie jest trudne, a naprawdę niezbędne!). Subversion było też (albo jest nadal) standa...
[More]
Mając wartość enuma w postaci napisowej, pobraną na ten przykład z bazy, bardzo łatwo jest z powrotem sparsować ją do właściwego dla aplikacji typu: 1: public enum MyEnum
2: {
3: FirstVal,
4: SecondVal
5: }
6: //...
7: (MyEnum)Enum.Parse(typeof(MyEnum), "FirstVal");
Powtarzanie tego w kodzie jest jednak dość męczące. I po raz kolejny świetny mechanizm Extension methods przychodzi na ratunek:
1: public static class StringExtensions
2...
[More]