Delegaty i wyrażenia Lambda w C#

W tym poście postaram się wytłumaczyć czym są delegaty, anonimowe delegaty (równoważne z wyrażeniem lambda, które jest bardzo przydatne w wielu wypadkach.)

1. Delegaty

Delegaty są podobne do wskaźników i funkcji w C czy C++. Z definicji – delegat to zmienna będąca odniesieniem do innej, przy czym „odniesienie” można zmieniać. Czytaj dalej

Reklamy

Próba stworzenia mechanizmu autoochrony w C#

Przez ostatnie kilka dni siedziałem, wykorzystywałem przycisk „Search” w wyszukiwarce Google aż nazbyt dużo razy, gdyż próbowałem znaleźć jakiś sposób, na autoochronę w C#. Jest to strasznie ciekawe zagadnienie, dlatego postanowiłem o tym napisać. Od razu mówię, post nie będzie zbyt ładny, tekst będzie dość precyzyjny. Czytaj dalej

Wielowątkowość w C# – Threading, Locki + SpinLocki

Często zdarza się, że mamy potrzebę wykonania kilku rzeczy w tym samym czasie. Przykładowo, pijąc herbatę możemy równocześnie oglądać telewizję czy czytać książkę. Podobnie w programowaniu – podczas (przykładowo) wykonywania jakiejś dłuższej pętli nie chcemy zawieszać programu (na czas jej wykonania), tylko wykonać w tym samym czasie inne operacje.

W tym poście omówię pewną klasę i strukturę. Pierwsza z nich to Thread zawierający się w System.Threading; Pozwala on na wykonanie innej funkcji równolegle, nie naruszając działania kodu. Przykładowo: Czytaj dalej

Tworzenie nowego procesu (programowo). C#, C++, Python

Najpopularniejszym dziś sposobem tworzenia nowego procesu jest odwołanie się do odpowiedniej funkcji, gdzie deklarujemy podstawowe informacje o procesie.  Funkcja zwraca nam potem uchwyt do tego procesu (ang. handle) za pomocą którego możemy na nim operować.

Spróbujmy więc napisać w każdym z trzech wcześniej zadeklarowanych języków (C#, C++, Python) utworzyć małe aplikacje, które będą podstawą do dalszej pracy na procesach. Czytaj dalej

Coś prostego – udowadniamy niedokładność liczb zmiennoprzecinkowych

Zacznijmy od tego, czym są liczby zmiennoprzecinkowe. W programowaniu, jeżeli chcemy użyć liczb dziesiętnych, nie możemy zastosować typu int. Kod:

int a = 3; int b = 2;
return a/b;

nie zwróci nam jak oczekujemy wartości 1,5 tylko jeden. Nie działa tu zaokrąglanie, wynik 1.999999999999999999… zostanie zapisany w pamięci jako 1. Programiści by uniknąć tego typu trudności stosują inne zmienne: float (single precision – typ pojedynczej precyzji, dokładność do 7 cyfr po przecinku), double (double precision – typ podwójnej precyzji, dokładność do 15 cyfr po przecinku) Czytaj dalej

Pwn2Own 2016 – podsumowanie

Wczoraj zaczęła się kolejna edycja znanego w środowisku IT konkursu – Pwn2Own. Główna idea jest prosta – znaleźć błąd w oprogramowaniu, który może przyczynić się do zdalnego wykonania kodu, ucieczki z sandbox’a czy nawet wirutalnej maszyny.

Dziś, po dwóch dniach zmagań, jak informuje jeden z cofunderów tegorocznych nagród – firma TrendMicro – konkurs się zakończył. Brało w nim udział 5 drużyn, a za każde znalezione podatności drużyny zyskiwały dodatkowe punkty oraz powiększały swoją nagrodę pieniężną. Czytaj dalej