Opublikowano Bardzo ciekawy wywiad z jednym z najbardziej zasłużonych dla środowiska .net-owego człowieka – z Andersem Hejlsberg-iem. To w dużej mierze dzięki niemu c# i .net jest tam gdzie dzisiaj jest.
W poprzednim poście podałem krótki fragment kodu, który można było zoptymalizować. Wspomniałem o parametrze StringComparison, który zwykle sprawia problemy w zrozumieniu. W dzisiejszym wpisie postaram się wyjaśnić różnicę między poszczególnymi porównaniami. Dla przypomnienia istnieją następujące wartości StringComparison: 1. Ordinal – domyślna wartość. Znaki zamieniane są na wartości numeryczne i wtedy porównywane. Zdecydowanie najszybsza metoda jeśli chodzi o wydajność. 2. OrdinalIgnoreCase – tak ja...
Kod:if(anyText.ToLower()=="tekst") { Console.WriteLine("Zmienne takie same"); } Kod ma na celu sprawdzenie czy jakaś zmienna jest równa danemu strumieniowi znaków. Nie chcemy brać pod uwagę wielkości liter więc dlatego używamy funkcji ToLower. Zatem if zwróci true gdy anyText jest równy “tekst” lub “TEKST” itp. Rozwiązanie ma jedną wadę – tworzony jest nowy, tymczasowy string po wywołaniu metody ToLower. W powyższym przykładzie będziemy mieli zatem 3 obiekty: anyText, obiekt dla “tekst” oraz obie...
Stop me if you know this one. You find a library/framework that does something useful to you. You start using it and then realise it doesn’t work the way you want it in certain scenario or has a missing feature. What do you do then?Abandon the library and look for alternative that is more “feature rich”? Ask the author to support your scenario/submit a pull request with the feature? Those two, from my experience, a...
Klasa Parallel stanowi doskonałe dopełnienie do task’ów. Dostarcza trzy statyczne metody:Invoke – współbieżne uruchomienie kilku zadań. For – współbieżna pętla FOR. ForEach – współbieżna pętla foreach. Klasa stanowi helper, ponieważ wszystkie powyższe operacje można wykonać za pomocą obiektów Task lub Thread. Implementacja jednak własnej pętli współbieżnej jest zawsze trudniejsza niż użycie po prostu gotowej metody. Zacznijmy od Invoke, przykład:staticvoid Main(string[] args) { Parallel.Invoke(Me...
W tym wpisie zajmę się omówieniem polecenia yield, udostępnionego w wersji 2.0 języka C#. Do czego służy ta instrukcja? Dzięki niej możemy tworzyć tzw. leniwe kolekcje, do których poszczególne elementy dodawane są dopiero w momencie zgłoszenia na nie zapotrzebowania. Żeby zaprezentować działanie polecenia yield, najpierw zobaczmy standardowy sposób tworzenia kolekcji.
Lock free data structures are very handy for concurrent programs especially that the number of cores increases. The benefits of such data structures is that they never acquire a lock, instead they do a form of a spin lock, where a local copy of the data must be stored and exchanged or updated by an processors atomic operation (like "compare and swap" or "fetch and add") only when the global value and the local copy match, otherwise we repeat the whole procedure. Almost every lock free data structure foll...
W ostatnim poście napisałem kiedy warto korzystać z strong-name. Jeśli ktoś uważnie prześledził screen’y dołączone do postu, być może dostrzegł, że jest tam opcja taka jak “Delayed Signing”. Do czego to służy? Sprawa jest bardzo prosta. Delayed signing po prostu nie używa klucza prywatnego. Taka biblioteka nie zawiera więc poprawnego podpisu cyfrowego a w miejsce jego zawiera same zera. Klucz publiczny z kolei jest wstawiany do biblioteki z tym, że nie jest liczony jej hash. Integralność zatem jest nie...
Programując pod Sharepointa czy inne tego typu badziewie musimy podpisywać nasze assemblies i wrzucać je do GACa. Już dwa razy mnie to "ugryzło" i straciłem w sumie dobre kilka godzin na diagnostykę poniższego scenariusza: 1) piszę testy do funkcjonalności zawartej w podpisanej dllce 2) koduję implementację w tejże dllce 3) uruchamiam testy 4) dostaję wyjątek TypeLoadException czy coś innego w ten deseń mówiącego, że w testowanej dllce nie ma kodu który... przecież tam jest bo dopiero co go napisałem!
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.
Żyjemy teraz w ciekawym momencie roku, kiedy to Windows 8 uzyskuje status RTM, a za nim inne produkty jak np. Visual Studio 2012, a dodatkowo mamy też SQL-a 2012, który status RTM osiągnął już na przełomie marca i kwietnia tego roku. Wielu developerów zapewne będzie robiło reinstalacje, będzie po kolei instalowało aplikacje niezbędne do pracy, a później np. mogą zobaczyć w SQL Server Configuration Manager coś takiego: Najprościej jest pamiętać aby podczas nowej instancji wykonywać ją wg poniższej kole...
Nie, to nie będzie ogłoszenie w którym będę poszukiwał programisty. Wpis ten jednak będzie traktował o zatrudnianiu tychże. Ostatnio coraz częściej ocieram się o jakieś oferty pracy i naszło mnie kilka przemyśleń, którymi chciałbym się tu podzielić. Od razu zastrzegę, że są to tylko i wyłącznie moje opinie, a że za wyrocznię rynku się nie mam, mogą się kompletnie nie zgadzać z tym co mają do powiedzenia moi koledzy (i koleżanki?) programiści. Oferta ofercie nie równa Wiadomo, że ile firm tyle...
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.
Nierzadko jest tak, że aplikacja zachowuje się nieprawidłowo, jednak wszystkie wyjątki są przechwycone i nie ma żadnej informacji (czy to wizualnej, czy tez w logach) o tym, że wydarzyło się coś niepokojącego, program po prostu dalej działa. Klasyczny przykład, to ‘połykanie’ wyjątków, czyli konstrukcja typu: try {...KOD...} catch(Exception) { } czyli blok obsługi wyjątku jest puściutki :) My jednak wyczuwamy jakąś zmyłkę i chcemy dowiedzieć się, co też poszło nie tak. Systemowy mechanizm obsługi wyj...
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.
Tym artykułem rozpoczynamy serię wpisów dotyczących jednego z API wchodzących w skład .NET Framework – WCF (Windows Communication Foundation). Dowiesz się czym jest WCF i „z czym się go je”. Seria artykułów o WCF pomoże Ci się przygotować do egzaminu 70-503. Wpisy będą doskonałym materiałem do powtórki i przypomnienia sobie zagadnień – więc zapraszam do śledzenia kodzimy.net WCF? WTF! WCF (Windows Communication Foundation) – jest to jedno z API .NET Framework. Dzięki WCF będziesz w stanie p...
W ramach pakietu dystrybucyjnego .NET Framework do systemu trafia biblioteka SOS.DLL, która pozwala analizować kod .NET w WinDbg. Na tym blogu promuję jednak użycie biblioteki psscor4 (i wcześniejszej psscor2) do analizy dumpów (a także debuggowania aktywnych procesów), co wiąże się głównie z tym, że biblioteka ta jest niezależna od konkretnej wersji CLR (a konkretniej biblioteki mscordacwks.dll), w ramach której uruchomiony był proces. Do tego dochodzi fakt, że psscor zawiera wszystkie te rozszerzenia, ...
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.
W dzisiejszym temacie przedstawię przykładowy kod C# umożliwiający załadowanie i uruchomienie paczki Integration Services. Na początku w projekcie konieczne jest dodanie referencji do Microsoft.SQLServer.ManagedDTS.dll. Wszystkie użyte klasy znajdują się w przestrzeni Microsoft.SqlServer.Dts.Runtime.
RxExtension - to biblioteka od Microsoftu ułatwiająca programowanie asynchroniczne. Opiera się na istniejących interfejsach IObservable oraz IObserver. W RX wiadomości są traktowane jako strumienie danych, do których należy się przypiąć i reagować na pojawienie się nowej wiadomości. Najnowsza wersja ma już cyferkę 2, ale nie jest jeszcze oznaczona jako stabilna. Ja do nauki wykorzystałem wersję 1 oraz książeczkę dostępną na stronie RX - Dev Labs Hands On. Na Channel9 są jakieś filmy na temat RX. Poniże...