KLOC (ang. Kilo Lines Of Code) to bardzo stara miara złożoności programów na podstawie liczby linii kodu. Z pewnością ma wiele wad, bo jak porównywać kod w C/C++ z kodem w Java czy C#. Czy jako linie kody powinno liczyć się komentarze lub importy przestrzeni nazw, co z kodem generowanym automatycznie itd. Wszystko to prawda, ale osobiście uważam, że ta miara jednak coś mówi. Ostatnio natknąłem się na bardzo ciekawe dane dotyczące liczby błędów/KLOC.
Strona głównaUżytkownik
Paweł Łukasik | użytkownik
Sztuka programowania 4042 dni, 16 godzin, 59 minut temu 139 źrodło rozwiń
W .NET istnieje metoda do wykonywania pętli równolegle. Pisałem ogólne o niej kilka miesięcy temu. Temat jest jednak dużo bardziej skomplikowany i z pewnością należy zrozumieć różne podejścia do problemu. Przed zrównolegleniem pętli, należy zastanowić się czy na prawdę przyniesie to pozytywne efekty. Złe rozpoznanie przypadku spowoduje znaczącą degradację wydajności. Zastanówmy się na co należy zwracać uwagę:Czy poszczególne elementy tablicy można przetwarzać w sposób bezpieczny (thread-safe). Jeśli nie...
Sztuka programowania 4044 dni, 15 godzin, 44 minuty temu 168 źrodło rozwiń
W .NET można anulować wątki za pomocą tokena. Oczywiście nie należy używać metody Abort czy Cancel, ale o tym już wiele razy pisałem – w skrócie nie wiadomo kiedy taki wątek zostanie przerwany. Użycie tokena jest proste tzn. (przykład MSDN):class Program { staticvoid Main() { var tokenSource2 =new CancellationTokenSource(); CancellationToken ct = tokenSource2.Token; var task = Task.Factory.StartNew(() => { // Were we already canceled? ct.T...
Sztuka programowania 4047 dni, 5 godzin, 13 minut temu 140 źrodło rozwiń
Czasem zwykłe metody debugowania nie wystarczają, czasem watch-e i sprawdzanie krok po kroku jest nie wystarczające. Czasem chciało by się sprawdzić wartość obiektu, do którego nie mamy referencji. No właśnie, wszystkie normalne narzędzia debuggowania jakie udostęnia Visual Studio pozwalają na oglądanie wszystkiego co mamy w zasięgu referencji albo gdzieś po callstack-u możemy się do “tego” dorwać. Co jednak jeśli i to za mało? Na pomoc Make Object ID. Zatrzymując program w momencie gdy ma...
Nie wszystko co kwacze to kaczka Czasem rzeczy są podobne ale jest to przypadkowe podobieństwo. To są w rzeczywistości różne rzeczy Przykład z życia, akurat bardzo niskopoziomowy. Potrzebowałem posklejać takie jakby “ścieżki”, separatorem był underscore (najlepsze polskie tłumaczenie to podłoga) “”. Przykładowo contentcolors_red. Rzuciło mi się, że mamy już napisany kod metody System.IO.Path.Combine(). Mo...
Sztuka programowania 4049 dni, 16 godzin, 4 minuty temu 293 źrodło rozwiń
.NET 2.0 to stara rzecz, ale wciąż z różnych powodów używana, na przykład dlatego, że klient nie chce zainstalować nowej wersji platformy na maszynach wszystkich użytkowników systemu. A co, jeśli pomimo tego wymarzy się nam użycie na przykład LINQ to Objects? Metody takie jak Select, Take itd. łatwo zaimplementować samemu, ale bez extensions methods ich użycie nie będzie takie przyjemne. Zastanówmy się, co z tym robić. Metody rozszerzające obsługiwane są począwszy od .NET w wersji...
Ostatnio widzę dużo wpisów na temat debugowania aplikacji. Nie trafiłem jednak na opis dwóch rzeczy, które bardzo tą czynność ułatwiają, mianowicie, zmiana kolejności wykonywania kodu oraz GetHashCode()Zmiana kolejności wykonywania kodu Czy zdarzyło Ci się podczas debugowania przejechać o tą jedną linijkę za daleko? Nic prostszego, chwyć żółtą strzałkę i przesuń kilka linijek do tyłu i wykonaj kod jeszcze raz. To jest tak proste, że aż niebywałe, że niektórzy o tym nie wiedzą. Teraz już w...
Kiedyś pisałem już o false sharing. Jeśli problem nie jest znany, najpierw zachęcam do przeczytania tego wpisu, ponieważ nie będę tutaj pisał o teoretycznych zagadnieniach: http://www.pzielinski.com/?p=1489 Oprócz wyjaśnienia podstaw, podałem przykład struktury danych składających się z dwóch Int32. Pokazałem również jakie pułapki czekają nas przy pracy z tablicami. To zadziwiające, że kolejność w jakiej przeglądamy tablicę ma tak ogromne znaczenie w wydajności (kod może być nawet kilkakrotnie wolniejs...
Sztuka programowania 4050 dni, 4 godziny, 3 minuty temu 122 źrodło rozwiń
Zapewne każdy profesjonalny programista zna zasadę DRY, której nazwa jest zarazem skrótem jej treści Don’t Repeat Yourself czyli zalecenia Nie Powtarzaj Się. Najczęściej stosuje się ją, by przeciwdziałać powielaniu kodu wykonującemu tę samą czynność (czy to przez jego niepotrzebne, ponowne napisanie czy też przez zwykłe przeklejanie). To co ciekawego w tej regule, to fakt, że w swej treści skierowana jest ona do ...
Sztuka programowania 4063 dni, 21 godzin, 56 minut temu 210 źrodło rozwiń
NSubstitute to (dla tych co nie znają jeszcze) taki Moq na sterydach. Sytuacja wygląda tak, mamy klasę, która potrzebuje jakiś zależności, mniej więcej tak: public class SomeClass { public SomeClass(INeedSomeStuff stuff) { // ....... } } public interface INeedSomeStuff { string DoSomeStuff(string param); void DoSomeOtherStuff(); } Możemy użyć moq i napisać: var moq = new Mock
Nie mam zamiaru nikogo indoktrynować. Nie mam zamiaru dyskutować o wyższości tego nad tym i owego nad tamtym. Zamierzam natomiast przedstawić parę zalet regionów oraz powód, dla którego podobają się właśnie mi. A skoro już zdradziłem, że wpis jest subiektywny i tendencyjny, to zacznę właśnie od tego powodu. Z urodzenia jestem ...
Sztuka programowania 4063 dni, 21 godzin, 56 minut temu 200 źrodło rozwiń
Nie wiem jak wy ale ja kocham debugować kod. Odkrywanie, gdzie programista (w wielu wypadkach ja sam!) popełnił (świadomie/nieświadomie) błąd wprawia mnie w stan euforii pewnie jak morfina uzależnionego :). Visual Studio (dla mnie) jest dość bliskie idealnego narzędzia do tego celu, ale do szczęścia brakowało mu kilku rzeczy. Jedną z nich był podgląd zwracanej wartości z funkcji. W poprzedniej wersji mogliśmy tę wartość uzyskać, ale trzeba było się troszkę "namęczyć". VS 2013 to the rescue Najnow...
Co jakiś czas odkrywam w Gicie perełkę, która czyni moją codzienną pracę jeszcze przyjemniejszą. Niedawno takim ficzerem okazał się tryb “fixup” komendy “commit“. Do czegóż to służy? Jest to po prostu szybszy sposób na poprawienie commita z przeszłości. Załóżmy, że do klasy User dodałem właśnie property age, tyle że przez pomyłkę nazwałem je z małej litery i… nie zauważyłem. Pracuję, pracuję i dopiero po dwóch kolejnych ...
Dość długo siedzę w IT. Zawsze od strony kodu i konkretu. Długo byłem programistą i wydaje mi się, że chociaż częściowo już rozumiem, co jest ważne. Co jest ważne, żeby stać się dobrym programistą. Jeśli chcesz poczytać to powiem w krótkich żołnierskich słowach co sprawiło, że nauczyłem się efektywnie tworzyć oprogramowanie. Oto sekret ;)
Błędnym założeniem jest to że developerzy odchodzą tylko dlatego że za mało im się płaci. W Stanach programiści utrzymują się na stanowiskach firmie średnio przez 18 miesięcy. W Polsce z moich obserwacji rotacja jest nieco dłuższa trwa między 24, a 36 miesięcy. Sen z powiek rekruterom spędza aktualna sytuacja na rynku. Aktualnie wygląda to w ten sposób. Człowiek przychodzi do pracy do małej, średniej firmy z...
Enumerable.Empty Jeśli funkcja zwraca IEnumerable, nie zwracaj pustej dopiero co stworzonej listy. Enumerable.Empty() jest właśnie tym czego oczekuje wywołujący kod. return new MyClass[0]; // Better return Enumerable.Empty
Sztuka programowania 4078 dni, 18 minut temu 423 źrodło rozwiń
Po krótkiej przerwie, wracam do blogowania. Ostatnio, pokazałem jak C# traktuje przeładowywanie metod. Nie zawsze jest to proste i czasami naprawdę może spowodować błędy w interpretacji. Jeszcze raz chcę powtórzyć, że celem wpisów NIE jest zachęcenie czytelników do pisania skomplikowanych przeładowań. Wręcz odwrotnie – wiedząc jak trudno odgadnąć wynik należy po prostu unikać przedstawionych konstrukcji.
Sztuka programowania 4078 dni, 18 minut temu 197 źrodło rozwiń
Bazy danych i XML 4079 dni, 18 godzin, 10 minut temu 325 źrodło rozwiń
Dane w postaci tekstowej mogą posiadać różnorodne formaty. Poszczególne wartości mogą być w nich odseparowane od siebie w dowolny sposób: albo za pomocą dedykowanego znaku, albo poprzez przyjęcie, że każda wartość zajmuje z góry ustalony obszar, a jeśli nie wypełnia jego całości, to jest on uzupełniany spacjami. Same wartości mogą mieć różną postać, wystarczy chociażby pomyśleć o dacie...
Bazy danych i XML 4086 dni, 1 godzinę, 50 minut temu 280 źrodło rozwiń
Jeżeli po przeczytaniu tytułu tego wpisu masz mieszane uczucia, bo niby co wspólnego może mieć psychologia z programowaniem, to zanim postanowisz zrezygnować z dalszej lektury, przypomnij sobie o wzorcach projektowych, a dokładnie skąd się one wzięły. Tak, początkowo to nie był pomysł programisty, ale architekta. Okazał się on jednak nie przystawać do tej dziedziny, za to zgrabnie dał się zaadaptować do naszego podwórka. W przypadku psychologii analogia nie jest może aż tak bezpośrednia, niemniej ...
Sztuka programowania 4086 dni, 1 godzinę, 50 minut temu 297 źrodło rozwiń