Pokazywanie postów oznaczonych etykietą fun. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą fun. Pokaż wszystkie posty

wtorek, 15 grudnia 2015

Kowboj danych w R

Ostatnio zrobiłem sobie test "jakiego typu Data Scientist'em jestem". Wyszło mi, że jestem kowbojem danych :)


Link do testu jest tutaj.

wtorek, 13 października 2015

Program jak żarówka

Obejrzałem filmik dokumentalny o sztucznym wytwarzaniu rynku zbytu dla różnych produktów. Zastanawiam się czy można takie podejście zastosować do oprogramowania, które mogłoby działać jak lodówka, drukarka albo jak współczesna żarówka. Na przykład oprogramowanie może działać tylko przez 1000 godzin lub po danej liczbie uruchomień aplikacja będzie się zacinać. Klient takiej aplikacji będzie musiał zrobić update albo kupi nową wersję aplikacji (lub nowy sprzęt).

Po dłuższym zastanowieniu się to taki model biznesowy dla oprogramowania już występuje :)
W każdym razie, zapraszam do obejrzenia filmiku.



poniedziałek, 4 maja 2015

Kontrolowanie uwagi

Dzisiaj obejrzałem filmik o kontrolowaniu uwagi przez złodzieja.Wcześniej pisałem o sztuczce z kolorami, która również nawiązuje do kontrolowania uwagi.
Troszkę mnie to przeraża jak łatwo jest oszukać nasz umysł.


Zapraszam do obejrzenia.



niedziela, 19 kwietnia 2015

Ig Nobel za badanie krów


Zrobiłem prezentację o Ig Noblu.


Nagroda była za wyciągnięcie dwóch wielkich wniosków:
1) Im krowa dłużej leży, tym wzrasta jej prawdopodobieństwo wstania
2) Kiedy już wstanie, to nie wiadomo kiedy znowu położy się




niedziela, 13 kwietnia 2014

DNS z cache

Przdstawiam Ci skrypt do pobierania pamięci podręcznej programu rozpoznawania nazw DNS. Dlaczego jest to ważne - spójrz na wpis niebezpiecznika :)

Poniżej jest skrypt, który zwraca Ci wszytkie zapisane w buforze nazwy DNS:
function Get-IPConfigDNS
{
Write-Host "Getting DNS cache info"
$recordNames = ipconfig /displaydns | select-string "Record " #white space on end
    for ($i=0;$i -lt $recordNames.count;$i+=3) 
    {

        $hash= [ordered]@{
          Name=$recordNames[$i].toString().Split(":")[1].Trim()
          Type=($recordNames[$i+1].toString().Split(":")[1].Trim()) -as [int]
          Value=$recordNames[$i+2].toString().Split(":")[1].Trim()
        }
        New-Object -TypeName PSobject -Property $hash
    }
}
Aby uzyskać wszystkie nazwy po prostu wykonaj:
Get-IPConfigDNS | sort name
I pamiętaj, zawsze czyść bufor programu rozpoznawania nazw DNS:
ipconfig /flushdns 

środa, 2 kwietnia 2014

Konferencja o porażkach

Parę miesięcy temu byłem na pierwszej konferencji poświęconej porażkom. Imprezę uważam za udaną. Konferencja bardziej była nastawiona na porażki w biznesie niż na porażki w innych sferach (życie prywatne, kariera, nauka i tym podobne).


Bardzo spodobało mi się żywe wystąpienie Fabiana:



Jeszcze z Krakowa był Pan Lech, o którym było głośno po filmie "ukłau zamkniętym":


wtorek, 1 kwietnia 2014

Outsourcing w Polsce

Czasami mam takie wrażanie jakby outsourcing w Polsce wyglądał tak jak na tym zdjęciu:

wtorek, 25 lutego 2014

Ref parametry i wieża Hanoi w PowerShellu

Niestety, przekazywanie wartości przez referencję w PS nie jest wskazane. Postanowiłem troszkę poćwiczyć z tym typem danych. Jednym z zadań algorytmicznych, dla którego przydatne jest przekazywanie wartości przez referencje jest problem wieży Hanoi. Postanowiłem rozwiązać ten problem za pomocą obiektu z .NET. Stwórzmy klasę, która będzie reprezentowała stan wieży:
$HanoiRodsClassDefinition = @"
using System.Collections.Generic;
using System.Linq;

public class HanoiRods
{
    public List<int> RotA;
    public List<int> RotB;
    public List<int> RotC;
    public HanoiRods (int spots=1)
    {
        RotA =  Enumerable.Range(0,spots).ToList();
        RotB= new List<int>();
        RotC= new List<int>();
    }

    public int GetSpots()
    {
        return RotA.Count;
    }

    public HanoiRods New( List<int> rotA,  List<int> rotB, List<int> rotC)
    {
        return new HanoiRods{
        RotA = rotA,
        RotB = rotB,
        RotC = rotC,
        };
    }
}
"@

Aby dodać definicję klasy do PS to wystarczy:
Add-Type -Language CSharp -TypeDefinition $HanoiRodsClassDefinition

A sam algorytm rozwiązywania wieży Hanoi w PS jest następujący:
function Solve-Hanoi
{
    param(
    [Parameter(Mandatory=$true)]
    [HanoiRods]$rots,

    [Parameter(Mandatory=$false)]
    [int]$spots=$($rots.GetSpots()),

    [ref]$moves
    )

    if($spots -gt 0)
    {
        
        Solve-Hanoi -spots ($spots-1) -rots ($rots.New($rots.RotA, $rots.RotC, $rots.RotB)) -moves $moves

        $rots.RotC.Insert(0,$rots.RotA[0])
        $rots.RotA.RemoveAt(0)
        $moves.Value  +=1

        Write-Host ""
        Write-Host "Spot $spots"
        Write-Host "A $($rots.RotA)"
        Write-Host "B $($rots.RotB)"
        Write-Host "C $($rots.RotC)"

        Solve-Hanoi -spots  ($spots-1) -rots ($rots.New($rots.RotB, $rots.RotA, $rots.RotC)) -moves $moves
    }
}
Z ciekawych parametrów jest zmienna [ref]$moves, którą przekazujemy przez referencje.

Możemy teraz definiować parametry do rozwiązania wieży Hanoi:
$hanoi = new-object HanoiRods 5
[ref]$moves=0

A same wywołanie jest następujące:
Solve-Hanoi -rots $hanoi -moves $moves
$moves

Dla 5 krążków musimy wykonać 31 ruchów, aby rozwiązać problem wieży Hanoi.

poniedziałek, 17 lutego 2014

Quicksort w PowerShell

W trakcie nauki algorytmów napisałem alg. quick sort w PS. Średnio jestem z niego zadowolony, ale za pomocą PS widać jak z małą ilością kodu można zaimplementować ten algorytm.

function QuickSort-Object
{
    param([array] $arr)
    $Count = $arr.Count
    if($Count  -le 1 -OR (($arr |  select –unique).count -eq 1))
    {
        return $arr
    }

    $pivot = $arr[$Count/2]

    return [array](sort-object ($arr | ? {$_ -lt  $pivot})) +  
      (sort-object ($arr  | ? {$_ -eq  $pivot})) +
      (sort-object ($arr | ? {$_ -gt  $pivot}))
}

Jeszcze raz chciałbym przedstawić filmik, który świetnie przedstawia algorytm sortowania. Co prawda początek filmiku mnie troszkę zdezorientował, ale reszta jest taka sama :)


czwartek, 13 lutego 2014

Wizualizacja algorytmu Wieży Hanoi

Ilość wykonywanych ruchów w algorytmie Wieży Hanoi wzrasta bardzo szybko wraz ze wzrostem ilości krążków. Stworzyłem parę obrazków, które przedstawiają kroki jakie należy zrobić, aby rozwiązać wieże. Wierzchołki grafu są słupkami wieży, a numer na krawędzi grafu symbolizuje kolejność przesuwania krążka.


Przeniesienie dla 1 krążka:

Przeniesienia dla 2 krążków:

Przeniesienia dla 3 krążków:

Przeniesienia dla 4 krążków:

Przeniesienia dla 5 krążków:

Przeniesienia dla 6 krążków:

Przeniesienia dla 7 krążków:

Więcej o Wieży Hanoi można poczytać tutaj.

środa, 5 lutego 2014

Im mniej IE tym mniej morderstw


Natrafiłem na ciekawy wykres. Okazuje się, że jest zależność między popularnością IE, a ilością morderstw w USA.


sobota, 1 lutego 2014

Czytanie mojego kodu

Kolega przesłał mi zdjęcie przedstawiający co myśli, gdy czyta mój kod :)
No cóż, nikt nie jest idealny



niedziela, 26 stycznia 2014

Separator elementów w tablicy w PS

Nawet nie wiedziałem, że jest taka zmienna jak $OFS (zawsze można coś nowego się dowiedzieć). Nazwa zmiennej $OFS pochodzi od słów Output Field Separator. Wartość tekstową tej zmiennej określa jaki będzie separator między elementami w tabeli (array).

Dla lepszego zrozumienia popatrz na poniższy przykład:
$array = 1,"2",[Math]::Round([Math]::PI),""

PS> $array
1
2
3

PS> [string]$array
1 2 3

A teraz jak zmienimy $OFS na inną wartość
$OFS  = ", " 

PS> $array
1
2
3

PS> [string]$array
1, 2, 3,
Możemy się pobawić z tym separatorem, np.
$OFS = " missisipi...  "

I teraz można odliczać:
PS> [string]$array
1 missisipi...  2 missisipi...  3 missisipi...  

poniedziałek, 30 grudnia 2013

Kowale 2.0

Ostatnio oglądałem filmik przedstawiający modelowanie w stali. Ze stalą zawsze kojarzyły mi się wielkie i ciężkie konstrukcie mostów jak Golden Gate Bridge ( zwany również Mostem Samobójców). Ale konstrukcje stalowe mogą być na tyle lekkie i elastyczne, że mogą być modelowane poprzez ciśnienie. Prezenter 'nowej stali' przedstawia nie tylko technologię, ale również sposób projektowania mebli ze stali. Jednym z mebli przyszłości jest Polski Ludowy Obiekt Pompowany Powietrzem:


Zapraszam do obejrzenia filmiku:


sobota, 14 grudnia 2013

Czas do świąt w PowerShell

Święta coraz szybciej się zbliżają, ale za ile dni będą te święta? Z pomocą (jak zawsze) na odpowiedzenie przychodzi mi powershell :)

function  Countdown-Xmas
{
    $dateNow = [DateTime]::Now
    $dateXmas = [DateTime]::ParseExact( 
[string]($dateNow.Year) + "/12/25", "yyyy/MM/dd", $null) 
    
    if($dateNow -gt $dateXmas)
    {
        $dateXmas = $dateXmas.AddYears(1)
    }   
    
    return $dateXmas - $dateNow
}

A wywołanie wygląda następująco:

$xmasCounter = Countdown-Xmas
Write-Host "There are $($xmasCounter.Days) days and $($xmasCounter.Hours) hours until Xmas"


niedziela, 8 grudnia 2013

Ostatnie posty w PowerShellu

Skoro już siedzę troszkę w PS to pomyślałem sobie, że napiszę skrypt do pobierania postów z bloga. Skorzystałe z feedburner jako zasób wpisów.
function Get-ArekOnSoftwarePosts
{
    $url  = "http://feeds.feedburner.com/ArekOnSoftware"
    $webClient =  New-Object Net.WebClient
    $webClient.Proxy = [System.Net.WebRequest]::DefaultWebProxy
    $webClient.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
    $webClient.Encoding = [System.Text.Encoding]::UTF8;
    $feed = $webClient.DownloadString($url)
    ([xml]$feed).rss.channel.item | Select title, pubDate, origLink, category, description
}

Możemy wziąć 3 ostatnie wpisy o powershellu:
$posts = Get-ArekOnSoftwarePosts 
$posts | ?{$_. category -icontains "PowerShell" } 
| select title,  origLink -first 3

A rezultat z działania skryptu jest następujący:

Oczywiście w miejsce zmiennej $url możesz zmienić adres na RSS feed z innego bloga.

czwartek, 28 listopada 2013

Przemilczana premiera PowerShell 4.0

Korzystałem z Windows 8 i miałem możliwość aktualizacji systemu do Windows 8.1. Po aktualizacji (oprócz problemów z Apple Boot Camp'em oraz powrotu starego-dobrego przycisku Start) to nie zauważyłem jakieś większej różnicy z poprzednią wersją.

Któregoś dnia wywołałem polecenie $PSVersionTable, a tu dostaje taki wynik:


Okazuje się, że mam PowerShell w wersji 4.0. Ta wersja należy do pakietu Windows Management Framework 4.0 i ten pakiet można pobrać stąd. Instalując Windows 8.1 dostajesz do tego PowerShell v4. Nowy PS jest domyślnie dostępny dla systemów operacyjnym Windows 8.1 oraz Windows Server 2012 R2.


Wiem, już dawno nie byłem na PowerShell Magazine, a polska grupa użytkowników PowerShell jeszcze ma do nadrobienia i mogłem sam zainteresować się nową wersja, ale dziwi mnie to, że premiera PS została przemilczano przez Microsoft i pozostawiona bez większego odzewu.


W najbliższych dniach sprawdzę co jest nowego w PS v4.


niedziela, 24 listopada 2013

Wyciągnięta nauka z statystyki

Zastanawiam się, po co te wszystkie metody statycznej analizy danych, szukanie reguł i zależności, grupowanie elementów i inne bardziej lub mniej złożone metody analizy skoro możemy mieć błędne dane. Najważniejszą naukę jaką zdobyłem z analizy danych jest to, że metody analizy dobrze działają, ale dane zostały źle uzyskane.

Znasz to przysłowie:

Statystyka nie kłamie,
ale kłamcy liczą.


albo jak J.Stalin mawiał:
Nieważne, kto głosuje, ważne, kto liczy głosy.

Nawet w dzisiejszych czasach da się oszukać ludzi na wielką skalę.



poniedziałek, 18 listopada 2013

Kodowanie w stylu Rammstein

Natrafiłem na zdjęcie przedstawiające kod, który się czyta w melodii utworu "du hast" zespołu Rammstein. Jako wielki fan tego zespołu bardzo mi się spodobał ten kod :)





wtorek, 12 listopada 2013

Dzwonienie do klientów banków

Jak wiadomo (albo nie) socjotechniki są bardzo ważne i nie doceniane. Natrafiłem na filmik przedstawiający jak pewien holender wyciągnął ponad 100 tyś euro dzwoniąc do klientów banków i prosząc od nich ich dane.