Month: January 2016

Zakładki w Visual STudio

Posted on

Bookmark – zakładka – stosowana aby zaznaczyć miejsce (linię) w kodzie. Np aktualnie pracujemy nad czymś w kilku miejscach na raz i chcemy szybko przechodzić między tymi miejscami.

Są różne zakładki. Dotychczas korzystałem z CTRL+k+K do ustawiania i CTRL+k+n do przechodzenia do następnej zakładki.

Inną (potencjalnie lepszą) opcją jest ustawianie zakładek numerowanych. Poprzez CTRL+SHIFT+1 ustawiamy zakładkę o numerze 1 a poprzez CTRL+1 przechodzimy do tej zakładki. I tak dalej dla kolejnych numerków.

visual studio bookmark

Timeout czyli kolejny plus dla DateTime.UtcNow

Posted on Updated on

Taki “synchronizator”, który dodatkowo przerwie czekanie po kilku sekundach.

private static void WaitWithTimeout()
{
    var startTime = DateTime.Now;

    while (true)
    {
        lock (SyncRoot)
        {
            if (!_isOperationInProgress)
            {
                return;
            }
        }

        if (DateTime.Now - startTime > TimeSpan.FromSeconds(3))
        {
            throw new TimeoutException("Max duration exceeded");
        }

        Debug.WriteLine("Waiting for xxx with timeout...");
        Task.Delay(TimeSpan.FromMilliseconds(50)).Wait();
    }
}

Użycie DateTime.Now sprawia, że ten kod wywali się na pewno raz w roku podczas zmiany czasu na letni/zimowy czy tam na odwrót. Oczywiście optymiści powiedzą że na pewno nam się to nie przytrafi bo prawdopodobieństwo małe… Ach Ci optymiści 😀 A potem grzebiesz w gównie (najczęściej nie swoim) bo nie możesz zreprodukować.

DateTime.UtcNow zrobi robotę.

private static void WaitWithTimeout()
{
    var startTime = DateTime.UtcNow;

    while (true)
    {
        lock (SyncRoot)
        {
            if (!_isOperationInProgress)
            {
                return;
            }
        }

        if (DateTime.UtcNow - startTime > TimeSpan.FromSeconds(3))
        {
            throw new TimeoutException("Max duration exceeded");
        }

        Debug.WriteLine("Waiting for xxx with timeout...");
        Task.Delay(TimeSpan.FromMilliseconds(50)).Wait();
    }
}

Kiedy nazwane argumenty mogą pomóc

Posted on Updated on

Taki kod:

var users = await UploadUsers();

Po zrozumieniu jak działa await/async (np po artykule Async and Await: Context) wiem, że powinno się dodawać metodę ConfigureAwait()it():

var users = await UploadUsers().ConfigureAwait();

Podczas Code Review zauważyłem, że kolega wrzucił jednak taki kod:

var users = await UploadUsers().ConfigureAwait(continueOnCapturedContext: false);

Nie rozumiałem po co dorzucać nazwane argumenty z wartością taka jak domyślna. Przekowałem się że jest to jednak czytelniejsze “co tak naprawdę się dzieje”, ponieważ samo ConfigureAwait() nie wiele mówi. Ostatecznie skończyło się na extension method:

    public static class TaskExtension
    {
        public static ConfiguredTaskAwaitable ConfigureAwaitWithoutReturnToContext(this Task task)
        {
            return task.ConfigureAwait(continueOnCapturedContext: false);
        }
    }

Czyszczenie w repo

Posted on Updated on

Wyrzucenie wszystkich plików pozostałych po rozwiązywaniu konfliktów (*.orig):
Z konsoli unixowej:

find Mobile -type f -name '*.orig' | xargs rm

Na kiedyś

Napisać programik, który z katalogu i podkatalogów usuwa wszystkie pliki *.cs, które nie wchodzą w skład żadnego *.csproj. Są to pliki pozostałości po złych mergach (bo jak zostawię za dużo to nikt mi głowy nie urwie…).

Wielowątkowość w teorii i praktyce

Image Posted on Updated on

multithreading in theory and practice

Korzystanie z async/await to ciężki kawałek chleba więc polecam lekturę Don’t Block on Async Code (w pigułce fajne rzeczy).

Coś o estymowaniu

Posted on

estymujemy na 2 punkty

“to zadanie jest banalne, wyestymujmy je na 2pkt”

Pisanie kodu w Xamarin Studio (na Macu) zamiast VS

Posted on Updated on

Thinks to keep in mind when using Xamarin Studio on Mac:
– Change formatting to VS: Preferences->Source Code->Code Formatting->C# source code->Policy->MS Visual Studio
– Do not indent new lambda brackets (indent blocks inside expressions) Preferences->Text Editor->Behavior->Indentation->Indentation mode->Automatic

Turn of asking about converting End Of Lines:
Tools->Options->General->Line ending conversion->Leave line ending as is