piątek, 29 sierpnia 2014

SQL Update dst set xyz, from src

Jest to wzór przykładowego update tabeli w t-sql, w oparciu o wyniki innej tabeli, z innej bazy danych. Często go stosuję,  a ciągle zapominam tej składni, więc... postanowiłem to sobie zachować "na przechowanie".


USE [dstInstancja]
GO

UPDATE dst
   SET [zakup] = src.[zakup]
          ,[oplata] = src.[oplata]
 FROM [dbo].[typ_transakcji] dst join [SRVxy\NazwaSerwera].[srcInstancja].[dbo].[typ_transakcji] src
 on dst.Id = src.Id

GO

środa, 20 sierpnia 2014

??

Od jakiegoś czasu mam okazję korzystać z ReSharpera (kto jeszcze nie zna tego pluginu, to niech jak najszybciej nadrobi zaległości) i dzisiaj podpowiedział mi pewną fajną, nieznaną mi wcześniej konstrukcję języka C#

Zamiast klasycznego:
var y = x.ProductName != null ? x.ProductName : string.Empty;

Można zastosować
var y = x.ProductName ?? string.Empty;

Krótszy i czytelniejszy kod zawsze na propsie, więc jak dla mnie jest git.

sobota, 2 sierpnia 2014

Console2, czyli ulepszony cmd.exe

Jak to napisał Roy Osherove na swoim twitterze:
If you’re using git from the vs menus, you’re not getting out of your comfort zone and not really learning a new skill.

Konsola i skrypty bashowe to potężne narzędzie. Wiedzą o tym linuksiarze, ale również i w świecie M$ ręczne wpisywanie komend powoli wraca do łask. Zaczynając od informacji administracyjnych, poprzez korzystanie z Git'a oraz Bash'a, na korzystaniu z NuGet'a kończąc (wewnętrzna konsola VS). Konsola w wielu przypadkach potrafi być bardzo użyteczna. Ale czy skazani jesteśmy na standardowe cmd.exe? Nie koniecznie. Na szczęcie są dostępne na rynku różne nakładki, które rozbudowują jej funkcjonalność. Jedną z takich nakładek na cmd.exe, jest opisana przez Scotta Hanselmana 'Console2'.

Po więcej informacji szczegółowych, odsyłam do bloga Scotta: Console2ABetterWindowsCommandPrompt

Od siebie dodam jeszcze, że w połączeniu z Git-em sprawuje się naprawdę fajnie (swobodny resize, konfigurowanie kolorów pod Git'a i wiele innych bajerów).
Generalnie, takie nowe, fajniejsze cmd.exe.

P.S. Do korzystania z konsoli przekonał mnie Mateusz, czyli mój nowy kolega w zespole
P.S.2 Krótki "mini tutorial" jak dodać skrót "git'a" do cmd (Mój komputer -> zaawansowane ustawienia systemu -> Zaawansowane -> Zamienne środowiskowe -> Path -> dopisujemy naszą ścieżkę, w której mamy Gita).


P.S.3 Plik konfiguracyjny, zachowany dla potomności:


<?xml version="1.0"?>
<settings>
    <console change_refresh="10" refresh="100" rows="36" columns="104" buffer_rows="500" buffer_columns="0" shell="" init_dir="C:\Users\zchpit" start_hidden="0" save_size="1">
        <colors>
            <color id="0" r="0" g="0" b="0"/>
            <color id="1" r="0" g="0" b="128"/>
            <color id="2" r="0" g="150" b="0"/>
            <color id="3" r="0" g="150" b="150"/>
            <color id="4" r="170" g="25" b="25"/>
            <color id="5" r="128" g="0" b="128"/>
            <color id="6" r="128" g="128" b="0"/>
            <color id="7" r="192" g="192" b="192"/>
            <color id="8" r="128" g="128" b="128"/>
            <color id="9" r="0" g="100" b="255"/>
            <color id="10" r="0" g="255" b="0"/>
            <color id="11" r="0" g="255" b="255"/>
            <color id="12" r="255" g="50" b="50"/>
            <color id="13" r="255" g="0" b="255"/>
            <color id="14" r="255" g="255" b="0"/>
            <color id="15" r="255" g="255" b="255"/>
        </colors>
    </console>
    <appearance>
        <font name="Consolas" size="15" bold="0" italic="0" smoothing="0">
            <color use="0" r="0" g="255" b="0"/>
        </font>
        <window title="Console" icon="" use_tab_icon="1" use_console_title="0" show_cmd="1" show_cmd_tabs="1" use_tab_title="1" trim_tab_titles="20" trim_tab_titles_right="0"/>
        <controls show_menu="0" show_toolbar="0" show_statusbar="0" show_tabs="1" hide_single_tab="1" show_scrollbars="1" flat_scrollbars="0" tabs_on_bottom="1"/>
        <styles caption="1" resizable="1" taskbar_button="1" border="1" inside_border="2" tray_icon="1">
            <selection_color r="255" g="255" b="255"/>
        </styles>
        <position x="-1" y="-1" dock="-1" snap="0" z_order="0" save_position="0"/>
        <transparency type="1" active_alpha="215" inactive_alpha="215" r="0" g="0" b="0"/>
    </appearance>
    <behavior>
        <copy_paste copy_on_select="1" clear_on_copy="1" no_wrap="1" trim_spaces="1" copy_newline_char="0" sensitive_copy="1"/>
        <scroll page_scroll_rows="0"/>
        <tab_highlight flashes="3" stay_highligted="1"/>
    </behavior>
    <hotkeys use_scroll_lock="1">
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="83" command="settings"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="112" command="help"/>
        <hotkey ctrl="0" shift="0" alt="1" extended="0" code="115" command="exit"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="84" command="newtab1"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="113" command="newtab2"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="114" command="newtab3"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="115" command="newtab4"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="116" command="newtab5"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="117" command="newtab6"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="118" command="newtab7"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="119" command="newtab8"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="120" command="newtab9"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="121" command="newtab10"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="49" command="switchtab1"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="50" command="switchtab2"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="51" command="switchtab3"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="52" command="switchtab4"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="53" command="switchtab5"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="54" command="switchtab6"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="55" command="switchtab7"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="56" command="switchtab8"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="57" command="switchtab9"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="48" command="switchtab10"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="9" command="nexttab"/>
        <hotkey ctrl="1" shift="1" alt="0" extended="0" code="9" command="prevtab"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="87" command="closetab"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="0" code="82" command="renametab"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="1" code="45" command="copy"/>
        <hotkey ctrl="1" shift="0" alt="0" extended="1" code="46" command="clear_selection"/>
        <hotkey ctrl="0" shift="1" alt="0" extended="1" code="45" command="paste"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="stopscroll"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollrowup"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollrowdown"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollpageup"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollpagedown"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollcolleft"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollcolright"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollpageleft"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="scrollpageright"/>
        <hotkey ctrl="1" shift="1" alt="0" extended="0" code="112" command="dumpbuffer"/>
        <hotkey ctrl="0" shift="0" alt="0" extended="0" code="0" command="activate"/>
    </hotkeys>
    <mouse>
        <actions>
            <action ctrl="0" shift="0" alt="0" button="1" name="copy"/>
            <action ctrl="0" shift="0" alt="0" button="1" name="select"/>
            <action ctrl="0" shift="0" alt="0" button="3" name="paste"/>
            <action ctrl="1" shift="0" alt="0" button="1" name="drag"/>
            <action ctrl="0" shift="0" alt="0" button="2" name="menu"/>
        </actions>
    </mouse>
    <tabs>
        <tab title="Console2" use_default_icon="0">
            <console shell="" init_dir="" run_as_user="0" user=""/>
            <cursor style="0" r="255" g="255" b="255"/>
            <background type="0" r="0" g="0" b="0">
                <image file="" relative="0" extend="0" position="0">
                    <tint opacity="0" r="0" g="0" b="0"/>
                </image>
            </background>
        </tab>
        <tab title="PowerShell" use_default_icon="0">
            <console shell="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" init_dir="C:\Users\zchpit" run_as_user="0" user=""/>
            <cursor style="0" r="255" g="255" b="255"/>
            <background type="0" r="0" g="0" b="0">
                <image file="" relative="0" extend="0" position="0">
                    <tint opacity="0" r="0" g="0" b="0"/>
                </image>
            </background>
        </tab>
    </tabs>
</settings>

Polecane laptopy/netbooki

Całkiem niedawno miałem problem z moim laptopem. Całe szczęście, problem dotyczył jedynie modułu zasilania mojego laptopa i  do przywrocenia go do stanu używalności wystaczyła wizyta w serwisie komputerowym. Nie zmienia to jednak faktu, że przez moment liczyłem się z koniecznością zakupu nowego sprzętu. I powiem, miałem z tym niemały ból głowy. Jaki laptop wybrać, skoro zgodnie z prawem Moora moc obliczeniowa komputerów podwaja się co każde 2 lata?

Co więc zrobiłem? Zapytałem się znajomego z "help desku", który w sprzęcie siedzi na co dzień. I jaką odp. dostałem? Że nawet on tego wszystkiego nie ogarnia bo zmiany idą za szybko. Za to skierował mnie na fora branżowe. Pomocny okazał się mój nowy kolega w zespole , który podesłał mi link do forum PC FORMAT, na którym to analizują aktualnie dostępne komputery i analizują na bierząco co się opłaca kupować link.

Dodatkowo, na tym forum raz w mieś. pojawia się temat z "zestawieniem miesiąca". Link do aktualnego zestawienia (lipiec 2014)

P.S. Gdyby ktoś potrzebował namiary na sprawdzony serwis komputerowy na Mokotowie, to polecam Centrum Serwisowe MAGNUS  na Puławskiej 107D

Trello

Kolejnym fajnym narzędziem, którego stosowanie warto jest rozważyć jest trello. Trello jest darmową aplikacją internetową, spełniającą rolę znanej i lubianej "tablicy z mazakami/karteczkami". "Tablica z karteczkami" to nic innego, jak stojąca w pokoju tablica z karteczkami, ewentualnie tablica z pisakami, na której wpisuje się zadania (najczęśniej są to nr. zgłoszeń z bugtrackera), osoby do których są przypisane, oraz stan danego zadania (todo, doing, done). W ten sposób, managment wchodząc do pokoju, jest w stanie ocenić "stan aktualnych prac" bez przerywania pracy programisty. Z zastosowaniem trello, nawet nie musi wchodzić do pokoju :D

O ile niektóre, rozbudowane 'bugtrackery" posiadają wbudowaną podobną funkcjonalność lub można ją dokupić (np jira), o tyle wielu z nich nadal im tego brakuje. Jedną z zalet trello jest fakt, ze w podstawowej wersji jest w pełni darmowe (syst. płatności oparty o mikropłatności za rozszerzenia).

Kolejną zaletą, która mi się osobiście spodobało, to pełna integracja z kontem  google (gmail), dzięki czemu nie muszę pamiętać dodatkowego hasła. Wprawdzie przy stosowaniu keepass teoretycznie nie muszę, ale mimo wszystko dla mnie takie rozwiązanie jest dużo wygodniejsze ;)).

P.S. Trello można też używać w życiu prywatnym, np. do kontrolowania prac związanych z remontem/zakupem mieszkania lub innych czynności dających podzielić się na mniejsze, skończone taski ;-)

MS SQL - DEADLOCK

Czasami zdarzy nam się, że procesy pracujące na bazie danych mogą się zakleszczyć. Nie wdając się w szczegóły, chodzi o równoczesne blokowanie jednych zasobów, oczekując na zwolnienie pozostałych. Szerzej to zagadnienie zostało opisane jako problem ucztujących filozofów.

A co, gdy taka syt. zdarzy nam sie na bazie danych?
a) dobrze by było się dowiedzieć, dlaczego dochodzi do zakleszczeń (np. sql profiler)
b) pomyśleć nad zmianą poziomu izolacji tranzakcji
c) wyśledzić odpowiedni proces za pomocą sp_who2 a nast. ubić zawieszony process, odblokowując tym samym zasoby dla innych procesów
exec sp_who2
kill SPID