sobota, 20 sierpnia 2016

Piekło zamarzło - PowerShell na MAC OS X

Nie mogę w to uwierzyć, ale stało się. PowerShell jest na MAC'a.

Instalkę i src można naleźć na github'ie.

Jak widać, nowa wersja PS 6.0.0 wprowadza rewolucje w świecie Linux'a.
Wpisując Get-Command można porać wszystkie komendy jakie są dostępne, a jest ich na prawdę sporo:


Przez jakiś czas nie pisałem bo urodziła mi się fantastyczna córka, a oprócz tego większość czasu spędzałem na MAC'u. Teraz kiedy PS jest na OSX'a to może pobawię się :)

czwartek, 3 marca 2016

Szablon do sql kursora

Pewne rzeczy nie można przeskoczyć - takie jak kursor w sql server. Często szukam przykładów z użyciem kursora, więc postanowiłem zamieścić szablon.
DECLARE @v_name  NVARCHAR(MAX)
   
DECLARE v_cursor CURSOR LOCAL STATIC FORWARD_ONLY READ_ONLY FOR 
  select * from ....

OPEN v_cursor
WHILE 1=1
BEGIN 
  FETCH NEXT FROM v_cursor INTO @v_name
  IF @@fetch_status = 0   
  BEGIN
   Begin TRY
    .....
   End TRY
   Begin CATCH 
    PRINT Error_Message()
    BREAK
   End CATCH
  END
  ELSE BREAK 
End
CLOSE v_cursor
DEALLOCATE v_cursor
W SSMS przydałby się edytor snippetów. Może kiedyś będzie Resharper dla t-SQL'a :)

czwartek, 4 lutego 2016

IT w filmach

Dzisiaj oglądałem prezentację o tym jak informatyka jest przedstawiana w filmach.



A tutaj przegląd filmów:


Moją ulubioną sceną z CSI jest, gdy Pani detektyw na szybko stworzy interfejs GUI w VB do śledzenia adresu IP należącego do zabójcy:



Mój przyjaciel opowiadał mi, że jak dzwoni do niego HRowiec to używa wszystkich znanych mu słów związanych z programowaniem i zarządzaniem projektem ( nawet tych, których znaczenia nie zna), aby wyjść na bardzo dobrego specjalistę i bardzo często to działa :)







piątek, 29 stycznia 2016

Liczenie w SQL Server za pomocą CTE i ROW_NUMBER

Czasami proste rzeczy są lepsze, ale żeby te proste rzeczy znaleźć to potrzeba czasu.
Aby policzyć od 1 do 10000 to będziemy mogli wykorzystać pseudorekurencja, która opisałem wcześniej na blogu.
with cte (row)
 as (
SELECT 1
UNION all
SELECT c.row+1 FROM cte c
where c.row < 10000

 )
 select * from cte
 OPTION (MAXRECURSION 10000)
Ale wykorzystanie funkcji ROW_NUMBER jest dużo lepszym sposobem:
SELECT TOP (10000) ROW_NUMBER() OVER (ORDER BY s1.[object_id]) as row
FROM sys.all_objects AS s1 
CROSS JOIN sys.all_objects AS s2​

środa, 27 stycznia 2016

Aliasy w GIT

Aliasy w GIT to fantastyczne narzędzie upraszczające pracę.
Parę aliasów stworzyłem i chciałbym się z Tobą nimi podzielić.

Kod z aliasami jest zamieszczony na github'ie.
Żeby skorzystać z tych aliasów to będziesz musiał zmodyfikować configurację.
git config --global --edit
Dobrze jest zmienić edytor w git. Ja korzystam z atoma. Jak też masz atoma to możesz go używać pisząc taką komendę:
git config --global core.editor "atom --wait"
Przykład pobrany stąd.
Jeżeli chcesz, żeby w czasie otwartego programu atom można było pisać w konsoli to usuń parametr wait.
Na Windowsie mam inny tool. Edytor zawsze możemy zmienić przez modyfikację pliku
[core]
editor = \"c:/program files (x86)/Notepad++/notepad++.exe\" -multiInst -nosession
W pliku gitconfig dodaj ścieżkę do pliku z aliasami.
[include]
    path = /PathToRepos/git_config/gitalias
Jeżeli chcesz sprawdzić czy ścieżka jest skonfigurowana to napisz w konsoli:
git config --global include.path
Pod ścieżką /PathToRepos/git_config/ masz plik gitalias, który zawiera wszystkie aliasy.
Możesz sciągnąć kod źródłowy aliasów za pomocą gita uruchamiająć w katalogu PathToRepos taką komendę:
git clone https://github.com/arekbee/git_config

Jak zapiszesz ten plik to możesz zobaczyć jakie aliasy są zdefiniowane poprzez komendę aliasesd:
git aliases
Aby zobaczyć definicje aliasów wystarczy dopisać literkę d do poprzedniego wywołania
git aliasesd


Poniżej zamieszczam krótki opis niektórych komend. Poniższe komendy będę przedstawiał na sklonowanym repo z github.com/fsharp/fsharp.
Szybkie dodanie i spuszowanie zmian. ACP to skrót od Add, Commit i Push.
git acp "message"
Ściągnięcie kodu źródłowego, ale bez folderu .git
git download https://github.com/arekbee/git_config.git
Pobranie autorów kodu z informacjami o liczbie commitów:
git authors | head -10
Kiedy będziesz refaktoryzował kod i nie będziesz wiedział od czego zacząć to może powinieneś poszukać najczęściej modyfikowane pliki.
git churn
Jeżeli chcesz usunąć wszystkie niezatwierdzone zmiany i niewersjonowane pliki to napisz:
git clean-all
Szukanie nazwy plików, które zawierają dany ciąg znaków
git find-file ".exe"
Wyświetla historię commitów
git hist
Jeżeli napiszesz git histd to uzyskasz historię commitów z wiadomościami.
Wyświetl ścieżkę w której repo. zostało stworzone.
git root
Jeżeli chcesz wyświetlić jakieś poliki, które nie zostaną dodane do repo (bo wzorzec w .gitignore jest spełniony) to wywołaj poniższą komendę:
git ls-ignore
Dodać submodule (git externalne repo.)
git siur
Pokaż wszystkie branche które nie zostały zmergowane:
git unmerged-branches 
Stwórz plik z grafem commitów
git graphviz  -n10 > graph.dot
graphviz\dot.exe -Tpng graph.dot -o graph.png​
Tutaj jeszcze będę musiał popracować. Jak na razie wygląda to tak:

Mam nadzieję, że aliasy się przydadzą. Ja najczęściej korzystam z acp.

piątek, 18 grudnia 2015

Benchmarki z webowych frameworków

Miesiąc temu wyszła 11 runda porównań frameworków webowych pod względem szybkości działania. Teraz już wiem dlaczego (dla celów wydajnościowych) wybiera się java nad c# oraz dlaczego niektóre projekty mają w back-end jvm, a od strony klienckiej jest .NET.

Wyselekcjonowałem tylko te frameworki, które zostały napisane w java i c#.
Wyniki są następujące:


Możesz sam wyselekcjonować te informacje jakie Cię interesują wchodząc na ten link.
Zastanawia się dlaczego Microsoft nie ma na celu zrobienia oddzielnej super szybkiej wersji aspnet'a dla celów komercyjnych. Pewnie wyrzuci się masę funkcjonalności związanymi z bezpieczeństwem, ale trudno.

Zawsze mi mówiono, że najlepsze frameworki powstają w środowiskach otwartych, tam gdzie za daną technologią stoją wielkie firmy - np. java i Oracle, go i google, c++ i producenci gier, objective-c i Apple, php i wikipedia, js i wszystkie strony :)

środa, 16 grudnia 2015

Dekompozycja projektu w R

Robiłem prezentacje i zastanawiałem się jak można zapisać cały projekt. Szukałem po sieci jakiś dobrych praktyk do dekompozycji plików. Ja wykombinowałem podział całego projektu na kilka plików:

Co w tych plikach jest? Zaczynając od początku:
Install.r - instalacja pakietów (ten skrypt wykonujemy tylko raz, aby pobrać paczki)
Functions.r - wszystkie funkcje
Load.r - ładowanie pakietów oraz przygotowywanie danych do prezentacji
Presentation.rpres - warstwa prezentacji, równie dobrze możne być to plik w Rmd czy z użyciem shiny (powód istnienia tego pliku jest TYLKO wyświetlanie tych danych jakie chcemy przedstawić, nie ma logiki biznesowej).
custom.css - customizacja warstwy prezentacji, czyli overridowane i dodatkowe css'y

I na końcu w folderze figures mam wszystkie zdjęcia.
Prezentacja o najpopularniejszych kryzysach ekonomicznych nie jest skończona. Jeszcze dużo chciałoby się dodać. Zaletą rpres jest to, że za każdym razem możemy mieć aktualne dane na prezentacji.
Poniżej rezultat wygenerowanej prezentacji: