Niniejsze rozważania zacznę od następującej anegdoty, która doskonale oddaje ich sedno. Pewna mała dziewczynka przyglądała się mamie przygotowującej pieczeń: - Mamo, dlaczego gdy robisz pieczeń, to zawsze odcinasz końcówki mięsa i wkładasz je po bokach brytfanny? - Bo tak się piecze kochanie. - Ale dlaczego tak się piecze? - Końcówki obcina się, aby mięso lepiej się upiekło. - Mamo, ale przecież i bez tego mięso by się upiekło. - Córeczko, twoja babcia tak piekła, ciocia tak piecze i ...
Sztuka programowania 4058 dni, 8 godzin, 57 minut temu 162 źrodło rozwiń
Zapewne każdy zna podstawowe gesty ekranów dotykowych. Wiemy też, że każdy telefon z Windows Phone 7 musi spełniać kilka podstawowych wymagań w tej dziedzinie (np. obsługa co najmniej 4 punktów dotyku). Co więcej, w SDK (dokładnie w XNA Framework) znajdziemy wbudowana obsługę pewnych gestów (np. Tap, FreeDrag, DoubleTap, Vertical/HorizontalDrag, Pinch itd). Ale jeśli to dla nas za mało to zakłwsze możemy “zejść” na niższy poziom API i tworzyć własne gesty.
Mobile development 4059 dni, 9 godzin, 33 minuty temu 45 źrodło rozwiń
Windows Phone jako jedyna platforma umożliwia tworzenie aplikacji z tzw. Trial‘em. Wiem, ktoś może powiedzieć, że przecież w AppStore czy Android Market też są aplikacje płatne i darmowe. Czym więc różni się Windows Phone? Tym, że możemy stworzyć jedną aplikację, która będzie jednocześnie wersją Trial i pełną, a Windows Phone Marketplace automatycznie zadba o procedurę kupna i podniesienia wersji z darmowej na pełną. W tym poście opiszę moje podejście do tego tematu.
Mobile development 4059 dni, 9 godzin, 33 minuty temu 71 źrodło rozwiń
W dzisiejszym temacie poruszę pewien problem na jaki można natknąć się podczas używania kolekcji obiektów typu wartościowego. Aby pokazać o co dokładnie chodzi zacznijmy od zdefiniowania przykładowej klasy opisującej prostokąt.
Sztuka programowania 4060 dni, 19 godzin, 36 minut temu 320 źrodło rozwiń
Dziś podstawy języka c#. Wszyscy znają modyfikatory public, protected, private i chętnie z nich korzystają. Modyfikator protected internal jest zdecydowanie mniej popularny a scenariusze użycia jeszcze rzadziej są prawidłowo identyfikowane. Jak sama nazwa mówi protected internal składa się z dwóch poziomów dostępności. W obrębie tego samego assembly zachowuje się jak czysty internal i mamy dostęp do pola tak jakby było one public. Załóżmy, że projekt składa się z dwóch bibliotek. W bibliotece numer A d...
Sztuka programowania 4064 dni, 12 godzin, 22 minuty temu 219 źrodło rozwiń
W dwóch poprzednich tematach poświęconych Integration Services przedstawiłem wykorzystanie Script Component do tworzenia własnego źródła danych oraz ich transformacji. W dzisiejszym wpisie omówię jego ostatnie zastosowanie – implementację własnego zapisu danych.
W ostatnim poście pisałem o barierze jako rozwiązaniu na uniknięcie problemów z związanych z optymalizacją dokonywaną przez CPU (re-ordering). Kilka postów wcześniej pisałem z kolei o buforowaniu danych i słowie kluczowym volatile. Jeśli nie wiedzie co to jest MemoryBarrier oraz Volatile zachęcam do przeczytania tych wpisów najpierw – bez nich dzisiejszy post będzie kompletnie niezrozumiały. Wiemy, że caching oraz re-ordering może na niektórych architekturach spowodować trudne w analizie błędy. Dziś chc...
Sztuka programowania 4066 dni, 20 godzin, 9 minut temu 81 źrodło rozwiń
W .NET istnieje metoda Thread.MemoryBarrier(). W użyciu jest bardzo prosta – nie wymaga przekazania żadnych parametrów. Strona teoretyczna jest jednak bardziej skomplikowana. Przed wyjaśnieniem czym jest Memory Barrier w świecie współbieżnym musimy zrozumieć jak wykonywane są instrukcje przez procesor. Załóżmy, że mamy następujące operacje:a = b +1 c = a +1 d = e +1; W jakiej kolejności zostaną wykonane powyższe operacje? Naturalne wydaje się, że procesor wykona je po kolei. Jednak ze względu na różn...
Sztuka programowania 4070 dni, 1 godzinę, 59 minut temu 134 źrodło rozwiń
Dziś trochę dla odmiany, nie będę pisał o wielowątkowości a o jednym z podstawowych słów kluczowych w c#, które na szczęście nie jest bardzo popularne – bazując na moim doświadczeniu z różnymi projektami, rzadko widuje je w kodzie. Global przydaje się gdy mamy konflikty z przestrzeniami nazw. Wyobraźmy sobie, że mamy następujący kod (kod bazuje na dokumentacji MSDN):class Program { publicclass System { } constint Console =7; staticvoid Main() { } } Następnie chcemy w metodzie Co...
Sztuka programowania 4073 dni, 9 godzin, 47 minut temu 242 źrodło rozwiń
W poprzednim temacie opisałem użycie komponentu Script jako własnego źródła danych w Integration Services. Dzisiaj przedstawię kolejne zastosowanie Script Component, a mianowicie tworzenie własnej transformacji danych.
Witam kolejna cześć artykułu z cyklu “dobre i złe praktyki w c#”. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/dobre-i-zle-praktyki-w-c-sharp–czesc-2.aspx
Sztuka programowania 4076 dni, 7 godzin, 45 minut temu 390 źrodło rozwiń
Artykuł porusza tematyką związaną z poprawną obsługą Tasków w Windows Phonie. Autor prezentuje w jaki sposób należy wywołać Taski oraz jakie wyjątki powinny zostać przechwycone. Dodatkowo przedstawione zostały scenariusze generujące opisywane błędy.
Mobile development 4078 dni, 21 godzin, 38 minut temu 60 źrodło rozwiń
Kiedyś na blogu opisywałem kilka implementacji singleton’a przystosowanych do pracy w środowisku wielowątkowym. Jedna z nich opierała się na tzw. double checked locking:publicsealedclass Singleton { privatestatic Singleton mInstance =null; privatestaticreadonlyobject mSync =newobject(); private Singleton() { } publicstatic Singleton Instance { get { if(m_Instance ==null ) { lock(m_Sync) { i...
Sztuka programowania 4078 dni, 21 godzin, 38 minut temu 212 źrodło rozwiń
W dzisiejszym temacie omówię tworzenie własnego źródła danych w Integration Services za pomocą skryptu C#. Do tego celu służy komponent Script (Script Component). Po dodaniu go do elementu Data Flow, należy skonfigurować kilka opcji.
Introduction Hi Today, I would like to present my concept of making skinnable application in Windows Phone 7.1. Making a skinnable application in Windows Phone might be a little bit tricky. Unfortunately, WP7 doesn't support DynamicResource keyword which is a basic tool for making skins in WPF. In order to overcome this inconvenience I decided to write a SkinManager for WindowsPhone. 2. Base view As I mentioned before, there is no support for using dynamic resources in WP7, therefore, in order to...
Silverlight 4081 dni, 19 godzin, 15 minut temu 42 źrodło rozwiń
WPF dostarcza obiekt Freezable. Możemy dziedziczyć po tej klasie aby stworzyć własne obiekty immutable. Ze względów wydajnościowych, można takowy obiekt “zamrozić” i wtedy nie można już go więcej modyfikować – staje się więc immutable. Przykład:internalclass SampleClass : Freezable { public SampleClass(string text) { Text = text; } protectedoverride Freezable CreateInstanceCore() { returnnew SampleClass(null); } publicstaticreadonly DependencyProperty TextProperty = ...
Na moim blogu co jakiś czas można znaleźć informacje dotyczące pisania dobrego oraz złego kodu w c#. Oprócz tego zacząłem pisać serie artykułów związanych z tą tematyką. Wiele informacji w tych artykułach można było znaleźć już wcześniej na moim blogu ale myślę, że ten cykl stanowi dobre dopełnienie i podsumowanie tego wszystkiego co piszę tutaj. Oczywiście artykuły rozszerzają tematykę, oraz zawierają więcej przykładów więc tym bardziej zachęcam do lektury. Dziś została opublikowana pierwsza część: ht...
Sztuka programowania 4085 dni, 2 godziny, 44 minuty temu 629 źrodło rozwiń
Dziś czas na kolejną metrykę badania kodu – TypeRank. Wartość metryki jest liczona za pomocą algorytmu Google Page Rank, który jest wykorzystywany przez wyszukiwarki do indeksowania stron. W świecie wyszukiwarek internetowych im większa wartość tym strona znajdzie się wyżej podczas prezentowania wyników. Algorytm bada powiązania między stronami internetowymi. Strona dostaje wyższą ocenę, gdy więcej innych stron wskazuje na nią. Stwierdzono, że skoro do danej strony odwołuje się więcej innych witryn to ...
Sztuka programowania 4088 dni, 3 godziny, 33 minuty temu 70 źrodło rozwiń
W ostatnim wpisie pokazałem w jaki sposób wczytać i uruchomić paczkę Integration Services w aplikacji .NET. Dzisiaj rozszerzę ten temat, prezentując kod C# pozwalający na pobranie danych z paczki SSIS zawierającej komponent DataReader Destination. Komponent ten poprzez interfejs DataReader udostępnia aplikacjom zewnętrznym zestaw danych z elementu DataFlow.
Dziś trochę o matematycznej walidacji kodu czyli o metrykach. LCOM (lack cohesion of methods) umożliwia obliczenie jak bardzo nasze metody są spójne. Do obliczania tej wartości istnieją gotowe narzędzia takie jak nDepend, ale aby w pełni zrozumieć znaczenie metryki obliczymy sami jej wartość dla prostej klasy. Powinno dążyć się do jak największej spójności a tym samym do jak najniższej wartości LCOM. Przed wyjaśnieniem czym jest metryka LCOM wprowadźmy następujące pojęcia: M – zbiór metod danej klasy...
Sztuka programowania 4091 dni, 3 godziny, 22 minuty temu 219 źrodło rozwiń