PuTTY i wykonywanie żądań HTTP


Jakiś czas temu zostałem poproszony o wykonanie prostej instrukcji do wykonywania żądań HTTP za pomocą PuTTY’ego.  Umieszczam to również tutaj, bo kto wie, a nóż może komuś się przyda.

Zespół Scrumowy – dlaczego nie lubię tej nazwy


Na pozór wszystko wydaje się idealnie, marketingowo brzmi świetnie, wydźwięk jest wyraźny: Zespół Scrumowy/Zespół Developerski. Bardzo długo było to dla mnie odpowiednie nazewnictwo, nie wzbudzające żadnych wątpliwości i podejrzeń. Jednak z biegiem czasu, kiedy coraz bardziej poznaję, chociaż nie! Poznaję to też nie trafione słowo w przypadku agile, coraz bardziej czuję scruma/agile uważam, że jest to złe sformułowanie( Zespół Scrumowy to błąd tłumaczenia z angielskiego).

Ado.net – automatyczne wznawianie połączeń


Microsoft na przestrzeni kilku wersji wprowadził dwie znaczące zmiany wpływające na to jak obecnie działa automatyczne wznawianie połączeń (connection resiliency). Pierwsza ze zmian jest mało istotna i nie będę skupiał się na niej. Za to druga, jest czymś czego od dawna brakowało. Począwszy od wersji .net 4.5.1 i Sql Server 2014 nie musimy więcej pisać banalnych kawałków kodu, które wyglądają mniej więcej jak poniżej:

int tryNo = 0;
bool executed = true;
while (!executed && tryNo < MaxTries)
{
    try
    {
        using (dbConnection = new SqlConnection(connectionString))
        {
            ExecuteSomeSql(dbConnection);
            executed = true;
        }
    }
    catch (DbException ex)
    {
        Thread.Sleep(waitTime);
        ++tryNo;
    }
}

Definition of Done vs Testy Akceptacyjne


Co jakiś czas natrafiam na ten sam problem i te same dyskusje. Testy akceptacyjne, a Definition of Done. Przez pewien czas pośród kilku projektów zdążyłem wyrobić sobie na ten temat zdanie, oparte zarówno teorią jak i praktyką. Obecnie odpowiedź dla mnie jest jedna. UAT,CAT… i inne podobne nie powinny, a wręcz nie mogą być częścią Definition of Done.

Transaction Log – Virtual File Log


Transaction log ze względu na swoje przeznaczenie musi być bardzo wydajny podczas zapisu kolejnych rekordów, musi być również wydajny przy przywracaniu bazy. Łączny rozmiar danych logów może znacznie przekraczać ilość samych danych(bazodanowych), które te zmiany generują. Zważywszy na to, że fizyczny zapis na dysk jest integralną częścią każdej transakcji, transaction log został zoptymalizowany na bardzo szybki przyrost kolejnych logów i zaprojektowany jako sekwencyjny tzn. zapis kolejnych rekordów odbywa się sekwencyjnie, jeden po drugim, dzięki czemu operacje z odnalezieniem miejsca zapisu kolejnych logów są zminimalizowane. Również odczyt w takim przypadku jest szybki – SqlSerwer może odczytać ciągły obszar pamięci w którym będą kolejne logi.

Czym jest Transaction Log


Transaction Log jest jednym z najważniejszych komponentów Sql Serwera, jest to miejsce do którego trafiają informacje o każdej zmianie dokonanej w bazie. Jest jednym z filarów na którym został oparty system transakcji (spełniający właściwości ACID). To również najważniejszym element kiedy dochodzi do przywracania bazy po awarii systemu. Każda baza danych – bez wyjątku – posiada swój log transakcyjny, do którego zapisywane są w postaci tzw. rekordów logów (ang. log records) wszystkie dane o transakcjach zmieniających stan bazy. Dane bazy(baza danych) oraz Logi Transakcyjne to dwa oddzielne byty, które są zapisywane do oddzielnych plików: .mdf i .ldf .

TopShelf – lek na Windows Service


TopShelf jest jedną z tych biblotek, którą każdy .net deweloper powinien znać. Nieważne ile usług NT napisałeś i jak bardzo jesteś biegły w ich tworzeniu. Jeżeli raz użyjesz tej biblioteki, już nigdy nie napiszesz usługi z użyciem ‚legacy code’ Microsoftu ;).

HTTP Host header


Żeby najlepiej zrozumieć do czego nagłówek Host jest wykorzystywany najlepiej cofnąć się dużo, dużo lat wstecz, kiedy jeszcze nie był nagłówkiem protokołu HTTP. Kiedy (nie wskazując palcami) niektórych przeglądarek nie było jeszcze na świecie. Kiedy google to obce słowo.

GROUPING oraz GROUPING_ID


Problem jaki pojawia się w wykorzystaniu operatorów grupowania GROUPING SETS, CUBE oraz ROLLUP polega na tym, że nie zawsze da się jednoznacznie określić przynależność wiersza do grupowania.  Operatory dla grupowań w których dana kolumna nie jest uwzględniana wstawiają NULL. Jeżeli kolumny tabeli nie mogą być NULL, wówczas można rozpoznać, który wiersz należy do którego grupowania sprawdzając czy wartość istnieje. Jednak w przypadku kiedy nawet jedna z kolumn może być NULL, wówczas nie ma możliwości sprawdzenia, czy brak wartości danej kolumny oznacza to iż kolumna nie była częścią grupowania, czy też po prostu nie ma przypisanej wartości.

GROUPING SETS, CUBE oraz ROLLUP


Operatory GROUPING SETS, ROLLUP oraz CUBE są operatorami wielokrotnego grupowania (Multiple Grouping Sets), które w bardzo konkretnych przypadkach zastępują konieczność pisania zapytania złożonego z wielu zapytań połączonych UNION ALL.