Przez ostatnie dwa tygodnie dużo się już na ten temat pisało, postanowiłem, więc, że dodam i swoje dwie krople do dyskusji. Dla tych którzy nie są w temacie, wszystko rozbija się o to, że RedGate (firma która kilka lat temu przejęła development na darmowym narzędziem do analizy i dekompilacji kodu napisanego pod .NET) oświadczyło, że zacznie pobierać opłatę za oprogramowanie. Pewnie to by umknęło uwadze społeczności gdyby nie tak naprawdę trzy kluczowe punkty:
Kilka dni temu Sławek napisał tekst o ukrywaniu kodu i skorzystał z klasy DynamicMethod, dzięki której generował kod IL w trakcie wykonania programu. Był również na tyle uprzejmy, że podesłał mi przykładowy kod, dzięki któremu zaoszczędziłem trochę czasu i mogłem zająć się od razu konkretem. Mam nadzieję, ze nie będzie na mnie zły jak wrzucę całościowo część tego kodu, dostępnego również w jego notce... :) Dla przypomnienia zatem, Sławkowi zależało na ukryciu szczegółów metody GetValue, tak, aby po dezas...
Express App Framework – walidacja danych Luty 10th, 2011 | Author: Kelut Dane przed wysłaniem do bazy danych, musimy poddać walidacji. Standardowe przypadki to „pole nie może być puste”, „pole musi mieć unikatową wartość”, czy też bardziej zaawansowane przypadki, w których używamy wyrażeń regularnych. W Express App Framework zadanie to realizujemy w prosty sposób, używając do tego gotowego silnika. Żeby nie przedłużać wpisu, przejdźmy od razu do rzeczy. Na początek dodajmy przestrzeń nazw DevExpress.Pers...
Mniej więcej dwa miesiące temu postanowiłem, że chcę mieć trackballa. Mniej więcej miesiąc temu otwierałem paczkę z Logitech Cordless Optical TrackMan. Co było dalej - o tym poniżej. Najpierw jednak o motywach tej decyzji. Przez całe moje personalne otoczenie (i część "twittosfery":) ) została ona odebrana z niemałym zdziwieniem. Padały pytania w szerokim zakresie, od "to robią jeszcze trackballe?" do "po co?".
Microsoft Research opracował ciekawe rozwiązanie automatycznego generowania testów jednostkowych. Artykuł: http://msdn.microsoft.com/pl-pl/library/pex-i-moles–narzedzia-do-automatycznego-generowania-testow-jednostkowychExplore posts in the same categories:Testy This entry was posted on Monday, February 7th, 2011 at 7:35 pm and is filed under Testy. You can subscribe via RSS 2.0 feed to this post's comments. ...
Jedną z najczęściej wykonywanych operacji w pracy z komputerem jest „kopiuj (wytnij) -> wklej”. Wiąże się to z użyciem kombinacji klawiszy „ctrl+C (crtl+X) -> ctrl+V”. Ten wspaniały mechanizm pozwala na powielanie (przenoszenie), a dzięki temu szybsze programowanie ;), dowolnego tekstu czy grafiki. Efektem ubocznym (choć czasami pożądanym) jest przenoszenie formatowania wraz z kopiowaną zawartością.
Stanąłem ostatnio przed następującym problemem: ukryć algorytm (w tym wypadku zawartość metody) tak, żeby przynajmniej na pierwszy rzut oka nie dało się go przeczytać. Pogrzebałem troche w róźnych helpach i innych internetach i stwierdziłem, że idealnie do tego celu nada się klasa DynamicMethod. Jak się okazało łatwiej powierdzieć, trudniej zrobić. Jak zawsze zresztą...
Programiści dzielą się na: Tych, którzy piszą bardzo dużo komentarzy, czasami prawie w każdej linijce. Tych spotkałem niewielu.Tych, którzy w ogóle ich nie piszą, nawet jeśli napisali kod, którego nie da się zrozumieć bez choćby odrobiny komentarza. Tych ortodoksów jest już więcej.Największa grupę stanowią natomiast programiści, którzy sytuują się gdzieś pomiędzy tymi dwiema skrajnościami. Kiedy zaczynałem programować pisałem bardzo dużo komentarzy. Wiele z nich było zupełnie niepotrze...
W wersji 4.0 wprowadzono nowy typ – dynamic. Zmienne tego typu będą sprawdzane w momencie wywołania (runtime) a nie kompilacji. Oznacza to, że w czasie kompilacji nie będziemy poinformowani o błędach takich jak brak funkcji. Przykład:dynamic variable="tekst"; variable=variable *5; Powyższy kod skompiluje się, jednak w momencie uruchomienia zostanie wyrzucony wyjątek (nie można pomnożyć przecież tekstu przez liczbę). Gdybyśmy użyli klasycznych typów (np. string) kompilacja nie powiodłaby się. Dynamic jes...
"Nie mam pojęcia, co jest nie tak z moimi deweloperami", myśli CEO. "Wszystko szło tak dobrze, gdy zaczęliśmy projekt. Przez kilka pierwszych tygodni zespół szalał i stworzył świetny prototyp. Od tego czasu jednak wszystko zwolniło do żółwiego tempa. Oni po prostu nie pracują już tak ciężko." Wybiera driver Callaway Titanium i wysyła wózek golfowy po lodowatą lemoniadę. "Może jeśli zwolnię kilku leniwców, to zapali im się grunt pod nogami!"....
Krótka lekcja na temat tworzenia imperatywnych pętli oraz konstrukcjach warunkowych czyli ifach. Przedstawiłem także metodę przekształcania imperatywnych pętli w funkcje rekurencyjne. Do postu dołączam dwa przykładowe programy (rozwiązanie dwóch zadań ze strony projecteuler.net).
Gdyby było to fizycznie możliwe, chętnie przeprowadziłbym następujący eksperyment. Z odległej przeszłości – na przykład z połowy lat 90. poprzedniego stulecia – sprowadziłbym w obecne czasy dowolnego ponadprzeciętnie uzdolnionego programistę. Jak szybko odnalazłby się we współczesnym koderskim środowisku pracy?… W celu redukcji złożoności problemu poczyńmy daleko idące uproszczenia i pomińmy wszelk...
Istnieją dwie opcje, pierwsza klient prosi o soft i nie interesuje go konkretna technologia/zbiór bibliotek jaki zostanie wykorzystany do wytworzenia oprogramowania. Tutaj mamy dowolność. Wybieramy to co chcemy i jak chcemy i nie musimy się od razy na tym znać – możemy traktować projekt jako środowisko doświadczalne dla pewnych narzędzi i bibliotek, które zawsze chcieliśmy wykorzystać. W tym przypadku nie musimy wiedzieć dokładnie czy istnieje produkt XYZ, który spełni nasze oczekiwania, dowiemy się w tr...
Czasami chcemy mieć pewność, że zdarzenie nie zostanie podpięte dwa razy do tej samej metody. Przyjrzyjmy się jak to zrobić w C#:private EventHandler _Event; publicevent EventHandler ExampleEvent { add { if (Event ==null||!Event.GetInvocationList().Contains(value)) _Event += value; } remove { _Event -= value; } } Rozwiązaniem jest użycie metody GetInvocationList. Następnie podłączając metody do zdarzenia za pomocą += mamy pewność, że nie będzie duplikatów i metoda n...
Jak z pomocą GITa radzić sobie w sytuacji, w które wprowadzając masę zmian, przez przypadek gdzieś w tym gąszczu wpisaliśmy sobie także i crasha. Mały poradnik :)
Co to jest?!?!?!. Kiedyś otrzymałem mail o takim właśnie tytule, a zawierający fragment mojego kodu. Kod ten, przyznam szczerze, zbyt elegancki nie był, ale napisałem go w sytuacji rodzaju "Masz to napisać na wczoraj". Ważne, że działał i robił to co miał robić. Nie jestem człowiekiem, który uważa swój kod za święty i sądzę, że umiem przyjąć krytykę, ale ten mail nie spodobał mi się z kilku powodów.
Po opublikowaniu dzisiejszego posta kolega Paweł zgłosił mi, że mój blog nie działa – ładowanie strony kończyło się wyjątkiem: „HTTP Error 400. The request is badly formed”. Zdziwiłem się, ponieważ u mnie działał bez zarzu...
Bardzo wiele wejść na bloga odnotowuje z zewnętrznych serwisów. Prym wśród nich wiodą develway.pl oraz dotnetomaniak.pl (kolejność przypadkowa). Postanowiłem, więc bardziej "otworzyć" się na te serwisy, a przy okazji jeszcze na parę innych. A to wszystko za pomocą tak zwanych... Sexy Bookmarks
Kilka dni temu opublikowany został najnowszy numer (02/2011) magazynu SDJournal. Spośród wszystkich artykułów chciałbym szczególnie polecić jeden, którego tematyka jest mi ostatni czasy bardzo bliska. Mam tu na myśli artykuł NHibernate vs Entity Framework. Frameworki ORM dla platformy .NET autorstwa Agnieszki Polak oraz Przemysława Krysztowiaka...
Przy pisaniu którejś z kolei aplikacji na pewno natkniemy się na problem nadania unikalnej nazwy jakiemuś plikowi. Czasami jest to podyktowane tym, że nie obchodzi nas jaka będzie nazwa takiego pliku, bo ścieżka do niego będzie przechowywana np. w bazie danych, lub nie chcemy aby plik o identycznej nazwie znalazł się jeszcze raz w tym samym katalogu, co oczywiście zaowocuje błędem. Poniżej przedstawiam jak wygenerować taką unikalną nazwę pliku/katalogu. Niektóre z poniższych przykładów nadawają się równi...