Poprawnie zaprojektowana aplikacja powinna weryfikować dane w każdej warstwie systemu. Oczywiście najważniejszym miejscem jest warstwa biznesowa ale dobrym zwyczajem jest walidacja również w warstwie prezentacji. W idealnym interfejsie użytkownik nie jest w stanie wprowadzić błędnych danych. Podstawowym przykładem są pola edycyjne w których powinno się wpisać np. ilość sprzedanego produktu. Użytkownik nie powinien mieć możliwości wprowadzenia tekstu w takie pole. Zacznijmy od prostej sprawy – akceptacja...
Tym razem wpis będzie poświęcony dodatkowej czynności, nie związanej bezpośrednio ze Scrum albo TFS. Pokażę prosty sposób w jaki można udostępnić swój serwer nie posiadając stałego łącza IP, łącząc się przez router. Nie uważam, że jest to opcja najlepsza, ani najbezpieczniejsza, ale jest prosta i może być punktem wyjściowym do lepszej konfiguracji.Jak zrobić, żeby można było się połączyć z serwerem gdy nie posiada on stałego numer IP? Można to zrobić przy pommechanizmu DynDNS.
Dzisiaj kolejny krótki wpis, ponownie dotyczący NHibernate'a. Jak pewnie zdążyliście zauważyć jest to coś co ostatnio sprawia mi najwięcej problemów. Próbując pobrać rekordy przy pomocy zwykłego selecta zawężonego o kryteria w NHibernate, otrzymałem zaskakujący błąd "Cannot update a parent row: a foreign key constraint fails"
Bazy danych i XML 4767 dni, 22 godziny, 45 minut temu 55 źrodło rozwiń
Czasem pracując z jednym narzędziem przez dłuższy czas, człowiek zaczyna szukać czegoś innego. Nie musi to być od razu całkowita zmiana narzędzia na inne, alternatywne, a wystarczy chociażby inny wygląd. Najprostszym przykładem jest tapeta na pulpicie. Tak wiem – tapeta na pulpicie zmniejsza wydajność, trzeba ją zatem usunąć! Ja nie jestem aż tak konserwatywny i preferuję mieć co nieco jako tło pulpitu. Innym przykładem może być zmiana wyglądu Visual Studio… Nie da się ukryć, że Emulator WP7 jest ubogim ...
Mobile development 4768 dni, 23 godziny, 44 minuty temu 136 źrodło rozwiń
Słów kilka na temat tego, co złego może kryć za sobą ta pozornie niewinna praktyka.
Czasami typ ENUM znajduje zastosowanie(czasami ponieważ często ogranicza on modułowość aplikacji). W wielu przypadkach potrzebujemy jednak skojarzyć pewien opis z każdą wartością enum’a. Jako praktyczny scenariusz można wymienić implementację menedżera dźwięków. Dla przykładu w pewnej grze, którą współtworzyłem aby uatrakcyjnić interfejs dla programisty zdefiniowałem sobie typ enumeryczny SOUNDTYPE:publicenum SOUNDTYPE { ROCKETLAUNCH, MACHINEGUN_LAUNCH } Programista zatem chcąc wykorzystać d...
Domyślne wartości bardzo łatwo ustawić za pomocą wizualnego edytora EntityFramework. Wystarczy ustawić właściwość Default w oknie properties: Co jednak gdy chcemy ustawić wartość wyliczoną na podstawie jakieś funkcji? Dla przykładu może być to DateTime.Now bądź też Guid.NewGuid()?Wpisując w te same okienko dostaniemy błąd podczas kompilacji: Error 1 Error 54: Default value (System.Guid.NewGuid()) is not valid for GUID. The value must be enclosed in single quotes in the form 'dddddddd-dddd-dddd-ddd...
Bazy danych i XML 4770 dni, 14 godzin, 18 minut temu 198 źrodło rozwiń
Jakiś czas temu, pisałem na temat obsługi zdarzeń w jQuery. Dziś chciałbym wrócić do tej tematyki, a konkretniej przyjrzeć się zdarzeniom związanym z obsługą klawiatury. Obsługa klawiatury, jest stosunkowo rzadko implementowana przez programistów JavaScript/jQuery - tak przynajmniej wynika z mojej własnej obserwacji. W gruncie rzeczy, jest to jednak bardzo fajny sposób na zwiększenie usability (z ang. użyteczności) naszej strony. Na skróty klawiszowe, już dawno postawił np. Google w swoim czytniku RSS. ...
Słowo lock służy do synchronizacji kodu między wątkami. Często jednak przeglądając kod widzę niepoprawne użycie. Rozważmy następujący przykład:publicclass OrderManager { publicvoid Submit() { lock(this) { //... } } } Przedstawiona konstrukcja może spowodować wiele trudnych do wykrycia problemów. Co jeśli użytkownik naszej biblioteki również wykorzysta źle lock i napisze:OrderManager orderManager=new OrderManager(); //...lock(orderManager) { orderManage...
Programowanie rozproszone 4770 dni, 14 godzin, 18 minut temu 224 źrodło rozwiń
W miarę przeglądania dokumentacji wyławiam z niej różne mniej pierwszoplanowe informacje. Powstają z tego robocze zapiski, które myślę mogę tutaj również zamieszczać. WinJS.xhr At install time, the user sees which capabilities an app asks for, so the app is installed only if the user agrees for it to access those resources. Windows.Web.Syndication.SyndicationClient To use WinJS templates, we must reference the bulk of the WinJS CSS and JavaScript files. These files provide the styles and behavior for t...
Programując własne biblioteki, często potrzebujemy zdefiniować własny typ wyjątku. Przeglądając różnego rodzaju kody źródłowe nierzadko spotykam błędną deklarację własnych wyjątków:publicclass MyException : Exception { // specyfikacja } Co prawa kompilator nie zgłosi błędu ale już np. CodeAnalysis zwróci nam uwagę o błędnej deklaracji. Najprościej korzystać w Visual Studio z tzw. snippet’ów czyli gotowych fragmentów kodu. Naciskając klawisze ctrl+space pojawi nam się lista dostępnych snippetów w VS...
O wielowątkowości pisałem już niejednokrotnie. Niestety w żadnym z moich postów, nie wyjaśniłem podstawowych pojęć związanych z współbieżnością. Oczywiście jeśli wykorzystujemy wątki do prostych zadań typu asynchroniczne połączenie z usługą, poważniejszych problemów nie doświadczymy. W przypadku jednak nieco bardziej zaawansowanych algorytmów, musimy zawsze badać nasz kod pod kątem: 1. Zakleszczenie (deadlock) – występuję gdy wątek A czeka aż wątek B skończy swoją operację a wątek B czeka aż wątek A zako...
Przy okazji przygotowywania bazy słów kluczowych pod nasz portal napisałem proste narzędzie, które potrafi zautomatyzować część tego żmudnego procesu. Narzędzie tworzy listę podpowiedzi z wyszukiwarki Google na dane słowo kluczowe, doklejając po kolei litery alfabetu i odpytując Google Suggestion API.
Realizacja codziennego odpalania garbage collectora gita w wygodny sposób.
Generator haseł z możliwością parametryzacjilis 21 2011 9:48 W końcu nadszedł ten dzień, kiedy metoda Membership.GeneratePassword przestała mi wystarczać. Zawiedziony niewystarczającymi możliwościami tego generatora napisałem poniższy kawałek kodu:using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using Olsoft.Common.Extensions; namespace Olsoft.Common.Security { public interface IPasswordGenerator { string Generate(int length)...
Na różnych forach często użytkownicy mają problem z aktualizacją kontrolek z innego wątku. Załóżmy, że odpaliliśmy sobie BackgroundWorker lub po prostu Thread. Wykonujemy jakieś operację, np. łączymy się ze zdalnymi zasobami. Stworzenie osobnego wątku w takim scenariuszu jest bardzo pożądane ponieważ nie blokujemy wtedy aktualizacji interfejsu. W trakcie pobierania informacji z Internetu chcemy aktualizować interfejs aby informować użytkownika o postępach np.progressBar.Value = progessValue; Jeśli powyż...
No niestety tezę tę opieram na swoim przykładzie. Skąd więc taka generalizacja, że posądzam o lenistwo wszystkich? Bazuję na swoich odczuciach i na przeświadczeniu, że gdy sam sobie organizuje pracę, to lenistwo mnie nie nęka!
Analiza aplikacji .NET Zestaw narzędzi do analizy .NET-owych aplikacji znacznie różni się od klasycznych narzędzi dla zwykłych aplikacji x86 / x64, odmienna architektura kodu wymusiła utworzenie całej gamy dedykowanych narzędzi dla plików wykonywalnych .NET, spróbuję przedstawić kilka z nich, które mogą się przydać w reversingu.Dekompilacja kodu Pierwszym i podstawowym narzędziem, które chyba zna większość osób zajmujących się analizą oprogramowania i nie tylko jest dekompilator .NET Reflector..NET Refle...
Na pierwszy rzut oka, TextBlock oraz Label są bardzo podobne. Obydwie kontrolki(?) wyświetlają tekst. Różnice są jednak spore i postaram się je wyjaśnić. Sprawdźmy co następujący kod wyświetli: Kontrolka Label jest lekko przesunięta w prawo. Jest to spowodowane faktem, że Padding dla Label domyślnie ma wartość 5. W przypadku TextBlock jest to 0, dlatego też na powyższym screenie TextBlock przylega do krawędzi. Ustawmy IsEnabled StackPanel’a na false i sprawdźmy jak zachowają się kontrolki: Lab...
autor: Hawkeye .NET Runtime Object Editor to program, który znalazłem w sieci dobre dwa lata temu. W tym czasie wielokrotnie mi się przysłużył, a jest przydatny w szczególności tym, którzy pracują z technologią Windows Forms. W skrócie, pozwala modyfikować UI działającej aplikacji. Jego użycie jest proste. Wskazujemy myszką interesujący nas fragment aplikacji, a Hawkeye oznacza wybraną kontrolkę przy pomocy czerwonej ramki i wyświetla listę właściwości i prywatnych pól klasy, których wartości może...