<?xml version="1.0" encoding="utf-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>Karbownicki.com</title>
        <link>https://karbownicki.com/</link>
        <atom:link href="https://karbownicki.com/blog.rss" rel="self" type="application/rss+xml"/>
        <description>Wszystkie notki</description>
        <language>en</language>
        <lastBuildDate>Wed, 31 Oct 2018 04:04:15 +0000</lastBuildDate>
                        <item>
            <title>Go host yourself!</title>
            <link>https://karbownicki.com/blog/2018/go-host-yourself</link>
            <guid>https://karbownicki.com/blog/2018/go-host-yourself</guid>
            <pubDate>Wed, 31 Oct 2018 04:04:15 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/f/4/c/b/a/f4cbae6e8e816a7af2f4ab696fc5126810f7b542-admin-panel.png" />
                                <p>Powoli mija fala zachwytu nad us&#322;ugami typu "za darmo" a u&#380;ytkownicy coraz cz&#281;&#347;ciej zaczynaj&#261; si&#281; zastanawia sk&#261;d bierze si&#281; to za darmo i jaki model biznesowy za tym stoi. Najcz&#281;&#347;ciej odkrywaj&#261; wtedy smutn&#261; prawd&#281; o handlowaniu naszymi danymi, cz&#281;sto wra&#380;liwymi, manipulacjach tym jakie tre&#347;ci powinni&#347;my obejrze&#263; czy brutalnej cenzurze, kt&oacute;rej jeste&#347;my poddawani w zamian za "za darmo". Ka&#380;dy nie raz ju&#380; pewnie spotka&#322; si&#281; z opini&#261;, &#380;e najwy&#380;szy czas opu&#347;ci&#263; Gmaila czy Facebooka, tylko co p&oacute;&#378;niej? Jak &#380;y&#263;? Przenie&#347;&#263; si&#281; z jednej darmowej us&#322;ugi do drugiej, kt&oacute;ra nied&#322;ugo zacznie robi&#263; to samo co poprzednia?</p>
<p>Sp&oacute;jrzmy prawdzie w oczy, je&#380;eli chcemy by&#263; kowalami w&#322;asnego losu, samemu decydowa&#263; co jest moralne a co nie i mie&#263; kontrol&#281; nad w&#322;asnymi danymi to musimy si&#281; pogodzi&#263; z tym, &#380;e b&#281;dzie to kosztowa&#322;o. Pytanie jak wiele i czy nie da&#322;o by si&#281; jeszcze taniej? Najlepiej nie wymy&#347;la&#263; ko&#322;a na nowo tylko przyjrze&#263; si&#281; jak to dzia&#322;a w przyrodzie. Je&#380;eli nie sta&#263; nas na przyczep&#281; kempingow&#261; a w&#322;a&#347;nie tak chcemy sp&#281;dzi&#263; ze znajomymi wakacje to zawsze mo&#380;na si&#281; z&#322;o&#380;y&#263;. Koszty drastycznie spadn&#261; i wszyscy na tym skorzystaj&#261;. Podobnie jest z danymi i us&#322;ugami z kt&oacute;rych korzystamy. Wystarczy kupi&#263;/wynaj&#261;&#263; przyczep&#281; (serwer) i znale&#378;&#263; kogo&#347; z prawem jazdy (lekko ogarni&#281;tego technicznie).</p>
<p>Je&#380;eli ju&#380; mamy serwer i ludzi mog&#261;cych go sfinansowa&#263; to do akcji wkracza <a href="https://yunohost.org/">YunoHost</a> - oprogramowanie dla serwera tak &#322;atwe w obs&#322;udze, &#380;e ka&#380;dy kto prowadzi&#322; cho&#263;by stron&#281; na WordPressie i samemu doinstalowa&#322; kilka plugin&oacute;w, b&#281;dzie umia&#322; nim administrowa&#263;. Ide&#261; stoj&#261;c&#261; za YunoHost jest w&#322;a&#347;nie maksymalne u&#322;atwienie stawiania w&#322;asnych serwer&oacute;w i hostowania popularnych aplikacji. Jak sami zreszt&#261; pisz&#261;:</p>
<p><img alt="Self-hosting for you, mom" src="/user/pages/01.blog/2018/go-host-yourself/for-your-mom.png"></p>

<h1>Instalacja</h1>
<p>Do dzia&#322;ania YunoHost wymaga <strong>64-bitowego Debiana 9</strong>, wi&#281;c je&#380;eli przy wynajmowaniu serwera macie do wyboru system operacyjny to w&#322;a&#347;nie w Debiana 9 nale&#380;y si&#281; uzbroi&#263;.</p>
<p>Nast&#281;pnie wystarczy zalogowa&#263; si&#281; na &#347;wie&#380;y serwer przez ssh, jako root i u&#380;y&#263; polecenia:</p>
<pre><code># bash &lt;(wget -q -O- https://install.yunohost.org/)</code></pre>
<p>W razie gdyby <code>wget</code> nie by&#322; jeszcze zainstalowany w systemie:</p>
<pre><code># apt install wget</code></pre>
<p>Ja w przypadku obrazu Debiana 9 dostarczanego przez OVH zosta&#322;em jeszcze poproszony przez instalator do odinstalowania pakietu <strong>bind9</strong>, poniewa&#380; konfliktowa&#322; z pakietem dostarczanym przez YunoHosta (<strong>dnsmasq</strong>):</p>
<pre><code># apt remove bind9</code></pre>
<p>Instalator g&#322;adko przeprowadza ca&#322;y proces instalacji pakiet&oacute;w i konfiguracji us&#322;ug a na koniec dostajemy gotowy ju&#380; do dzia&#322;ania panel administracyjny. I w zasadzie od tego miejsca ca&#322;o&#347;&#263; konfiguracji mo&#380;e odbywa&#263; si&#281; wy&#322;&#261;cznie przez przegl&#261;dark&#281;. Czyli przy dobrym wietrze ca&#322;a instalacja sprowadza si&#281; do zalogowanie si&#281; przez ssh i wklejenia jeden komendy.</p>
<h1>Administracja</h1>
<p><img alt="Logowanie" src="/user/pages/01.blog/2018/go-host-yourself/login.png">  </p>
<p>Po zalogowaniu si&#281; do panelu u&#380;ytkownika powinni&#347;my zobaczy&#263; pusty dashboard (nie zainstalowali&#347;my jeszcze &#380;adnych aplikacji) a w stopce link do panelu administracyjnego.</p>
<p><img alt="Panel administracyjny" src="/images/2/9/1/e/6/291e6a3657a32534f99a605f33bfc76868619180-admin-panel.png">  </p>
<p>Panel administracyjny jest bardzo intuicyjne i w zasadzie trudno si&#281; tam zgubi&#263;. W paru klikach mo&#380;emy doda&#263; nowych u&#380;ytkownik&oacute;w, kt&oacute;rzy automatycznie otrzymaj&#261; swoje skrzynki pocztowe (nawet z limitem przestrzeni je&#380;eli chcemy).</p>
<p><img alt="Nowy u&#380;ytkownik" src="/user/pages/01.blog/2018/go-host-yourself/new-user.png"></p>
<p>Mo&#380;emy podpi&#261;&#263; w&#322;asn&#261; domen&#281; o ile posiadamy ju&#380; jak&#261;&#347; a je&#380;eli nie posiadamy mamy opcj&#281; skorzystania z subdomeny pod jedn&#261; z trzech domen w ramach serwisu dynamic DNS, wi&#281;c serwer mo&#380;emy postawi&#263; nawet u siebie w domu i nie b&#281;dzie...</p>
                ]]>
            </description>
                    </item>
                        <item>
            <title>IPFS: Kazus turecki</title>
            <link>https://karbownicki.com/2017/05/11/ipfs-kazus-turecki</link>
            <guid>https://karbownicki.com/2017/05/11/ipfs-kazus-turecki</guid>
            <pubDate>Thu, 11 May 2017 04:04:15 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/1/5/e/2/9/15e2973a8ca7e9cd57de29e61014e66ceb462569-tr-main-page.png" />
                                <p>Nieco ponad 2 tygodnie temu pisałem o <a href="http://karbownicki.com/2017/04/24/ipfs-miedzyplanetarny-system-plikow/">rozproszonym systemie plików IPFS</a>. Jedną z głównych wad obecnego internetu, z którą chce sobie poradzić IPFS, jest centralizacja:</p>
<blockquote>
<p>[...] obecna sieć jest mocno scentralizowana a przez to bardzo podatna na wszelkie przypadki cenzurowania treści, odcinania dostępu do zasobów czy nawet odcinania całych krajów od internetu.</p>
</blockquote>
<p>5 dni później (29 kwietnia 2017) obywatele Turcji zostali na polecenie rządu <a href="http://www.polskieradio.pl/5/3/Artykul/1759431,Wikipedia-niedostepna-w-Turcji-Ankara-tlumaczy-przyczyne-blokady">odcięci od Wikipedii</a>. Z racji swojej pracy, ludzie z <a href="https://protocol.ai/">Protocol Labs</a> (zajmujący się rozwojem IPFS-a) postanowili wykorzystać to co już stworzyli i pokazać przydatność sieci rozproszonej.</p>

<p>3 maja w sieci IPFS został udostępniony statyczny zrzut tureckiej Wikipedii. W drodze są już zrzuty w języku Arabskim, Kurdyjskim i Angielskim. Zrzut można przeglądać korzystając bezpośrednio z identyfikatora wskazującego na obraz Wikipedii z 30 kwietnia</p>
<pre><code>/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Anasayfa.html</code></pre>
<p>lub za pośrednictwem systemu nazw (IPNS), który to identyfikator będzie zawsze wskazywał na najnowszą wersję zrzutu:</p>
<pre><code>/ipns/QmVH1VzGBydSfmNG7rmdDjAeBZ71UVeEahVbNpFQtwZK8W/wiki/Anasayfa.html</code></pre>
<p>Jest jeszcze tylko jedno ale, wersja 0.4.8 węzła nie radzi sobie zbyt dobrze z pociętymi katalogami (directory sharding) więc trzeba skorzystać z jeszcze nie wydanej wersji 0.4.8-rc1 lub 0.4.9-rc2. Jednak na szczęście w Protocol Labs też używają ArchLinuxa więc paczka <strong>go-ipfs-git</strong> autorstwa <a href="https://github.com/Kubuxu">Kubuxu</a> (swoją drogą studenta AGH) czeka już w AUR.</p>
<pre><code>$ yaourt -S go-ipfs-git</code></pre>
<p>Teraz po wystartowaniu węzła jesteśmy gotowi do przeglądania statycznej Wikipedii. W tym celu w przeglądarce wchodzimy na:</p>
<pre><code>http://127.0.0.1:8080/ipns/QmVH1VzGBydSfmNG7rmdDjAeBZ71UVeEahVbNpFQtwZK8W/wiki/Anasayfa.html</code></pre>
<p>I jesteśmy na ostatnim zrzucie:</p>
<p><img alt="strona główna" src="/images/a/e/9/5/6/ae956754148d6c0edcab584ffac5cb6abc47fc24-tr-main-page.png" /></p>
<p>Nawet wyszukiwanie działa:</p>
<p><img alt="wynik wyszukiwania" src="/user/pages/01.blog/2017/ipfs-kazus-turecki/tr-search.png" /></p>
<p><img alt="strona hasła: polonia" src="/user/pages/01.blog/2017/ipfs-kazus-turecki/tr-polonia.png" /></p>
<p>Wikipedia będzie dostępna w sieci IPFS tak długo jak długo któryś z węzłów z którymi mamy kontakt będzie ją posiadał. Jednak nawet kiedy jakakolwiek kopia przestanie być dostępna wystarczy aby jeden węzeł ją ponownie dodał, żeby cała sieć znów miała do niej dostęp. Po ponownym dodaniu Wikipedia nadal będzie miała ten sam identyfikator, bo jak wiadomo jest to kryptograficzny hash tworzony na podstawie treści czyli ta sama treść będzie zawsze miała taki sam identyfikator.</p>
<p>Aby pomóc udostępniać (seedować) Wikipedię wystarczy ją przypiąć do swojego węzła:</p>
<pre><code>$ ipfs pin add QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX</code></pre>
<p>Jest to identyfikator tureckiej wersji która zajmuje 10 GB. Dla porównania łącznie wersje turecka, arabska i kurdyjska zajmują 25 GB a wersja angielska 250 GB.</p>
<p>Więcej informacji o całej akcji znajdziecie na <a href="https://ipfs.io/blog/24-uncensorable-wikipedia/">blogu IPFS-a</a>.</p>
<p>Dobrej zabawy w przywracanie wolności ( ͡° ͜ʖ ͡°)</p>
                ]]>
            </description>
                    </item>
                        <item>
            <title>Shenzhen - Światowa stolica innowacji</title>
            <link>https://karbownicki.com/2017/05/06/shenzhen-swiatowa-stolica-innowacji</link>
            <guid>https://karbownicki.com/2017/05/06/shenzhen-swiatowa-stolica-innowacji</guid>
            <pubDate>Sat, 06 May 2017 04:04:15 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/5/7/e/8/e/57e8e58fba6f6299d449eb90d657a2218162fa93-shenzhen-map.png" />
                                <p><img alt="Shenzhen na mapie" src="/images/f/8/e/9/5/f8e959dfffa897ff728b78a2c0a295869095e0ad-shenzhen-map.png" /></p>
<p>Shenzhen to miasto w południo-wschodnich Chinach, graniczące na południu z  Hongkongiem. Jak podaje oficjalna witryna rządowa pod koniec 2015 roku miasto zamieszkiwało na stałe ponad 11 mln ludzi (dla porównania Warszawa ma około 1,7 mln mieszkańców).</p>

<p><img alt="Panorama Shenzhen" src="/user/pages/01.blog/2017/shenzhen-swiatowa-stolica-innowacji/shenzhen.jpg" /></p>
<p>Na pierwszy rzut oka nic szczególnego, duże miasto jak to w Chinach. Jednak to właśnie tutaj zjeżdżają się firmy z całego świata, pracujące nad innowacyjnymi technologiami i wynalazkami a startup to coś tak powszechnego jak u nas firma. 9 miesięcy potrzebnych w Szwajcarii na przejście od pomysłu do gotowego produktu tu może być skrócone do 3 miesięcy a prototyp robota można zbudować w zaledwie tydzień. Jak to możliwe i co ma z tym wspólnego specyficzne podejście do praw autorskich i patentów? Poznajcie Shenzhen, miasto mejkerów.</p>
<div class="grav-youtube-wrapper ">
  <div class="grav-youtube">
      <iframe src="https://www.youtube.com/embed/SGJ5cZnoodY?showinfo=1" frameborder="0" allowfullscreen></iframe>
  </div>
</div>
<p>Aha, no i jestem ciekaw Waszych opinii.</p>
                ]]>
            </description>
                    </item>
                        <item>
            <title>IPFS - międzyplanetarny system plików</title>
            <link>https://karbownicki.com/2017/04/24/ipfs-miedzyplanetarny-system-plikow</link>
            <guid>https://karbownicki.com/2017/04/24/ipfs-miedzyplanetarny-system-plikow</guid>
            <pubDate>Mon, 24 Apr 2017 04:04:15 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/6/6/2/3/a/6623a5f61501a53ce2b0aa65c92578cfbbe715df-centralized-decentralized-distributed.jpg" />
                                <p>Co niby mo&#380;e by&#263; ciekawego w systemie plik&oacute;w? Poza tym, &#380;e mo&#380;na <a href="https://github.com/ChrisRx/dungeonfs">zrobi&#263; z niego gr&#281; RPG</a> to zazwyczaj niewiele. W tym przypadku mo&#380;e by&#263; jednak zupe&#322;nie inaczej. IPFS (<strong>I</strong>nter<strong>P</strong>lanetary <strong>F</strong>ile <strong>S</strong>ystem) to nowo powstaj&#261;cy protok&oacute;&#322;, kt&oacute;ry w przysz&#322;o&#347;ci mo&#380;e diametralnie zmieni&#263; spos&oacute;b funkcjonowania sieci Internet  a zast&#261;pienie protoko&#322;u HTTP b&#281;dzie tylko jednym ze skutk&oacute;w ubocznych.</p>
<p><img alt="IPFS logo" src="/user/pages/01.blog/2017/ipfs-miedzyplanetarny-system-plikow/ipfs.png"></p>

<h1>Problemy dzisiejszej sieci</h1>
<p>Nowych protoko&#322;&oacute;w zazwyczaj nie tworzy si&#281; dla zachcianki ale w celu rozwi&#261;zania jaki&#347; istotnych problem&oacute;w. Jakie problemy wi&#281;c pr&oacute;buje rozwi&#261;za&#263; IPFS?</p>
<ul>
<li><strong>CENTRALIZACJA</strong> - obecna sie&#263; jest mocno scentralizowana a przez to bardzo podatna na wszelkie przypadki cenzurowania tre&#347;ci, odcinania dost&#281;pu do zasob&oacute;w czy nawet odcinania ca&#322;ych kraj&oacute;w od internetu.</li>
<li><strong>NIEEFEKTYWNO&#346;&#262; HTTP</strong> - protok&oacute;&#322; HTTP zak&#322;ada pobieranie danego pliku z pojedynczej maszyny, nie mamy mo&#380;liwo&#347;ci pobierania go r&oacute;wnolegle z wielu (cz&#281;sto bli&#380;szych nam) punkt&oacute;w jednocze&#347;nie tak jak w przypadku sieci p2p.</li>
<li><strong>UTRATA HISTORYCZNYCH DANYCH</strong> - ka&#380;dego dnia wiele warto&#347;ciowych tre&#347;ci znika bezpowrotnie z internetu wraz ze stronami na kt&oacute;rych by&#322;y zamieszczone a proces ich zabezpieczania i wersjonowania nie jest prosty i cz&#281;sto wi&#261;&#380;e si&#281; z tworzeniem kolejnych duplikat&oacute;w co kosztuje sporo miejsca.</li>
<li><strong>UZALE&#379;NIENIE APLIKACJI OD INTERNETU</strong> - wi&#281;kszo&#347;&#263; wsp&oacute;&#322;czesnych aplikacji jest uzale&#380;niona od dost&#281;pu do internetu a przez to nienadaj&#261;ca si&#281; do kraj&oacute;w trzeciego &#347;wiata, nieodporna na katastrofy naturalne (podczas kt&oacute;rych du&#380;e obszary s&#261; odcinane od sieci) czy cz&#281;sto przerywane po&#322;&#261;czenia.</li>
</ul>
<h1>Rozwi&#261;zania</h1>
<p>Ok, skoro ju&#380; wiemy z jakimi problemami chce zmierzy&#263; si&#281; IPFS to teraz przyjrzyjmy si&#281; jakimi sposobami b&#281;dzie stara&#322; si&#281; je pokona&#263;.</p>
<h2>1. TOPOLOGIA</h2>
<p><img alt="topologie sieci" src="/images/5/e/7/5/d/5e75d4783ad888d07e111b60c953f5ac74eb8d6b-centralized-decentralized-distributed.jpg"></p>
<p>Obecnie wiele aplikacji dzia&#322;a w oparciu o scentralizowan&#261; architektur&#281; (<strong>A</strong>). Charakteryzuje si&#281; ona podzia&#322;em na role klient-serwer gdzie klient&oacute;w mamy wielu natomiast serwer jest jeden (cho&#263; cz&#281;sto sk&#322;ada si&#281; z wielu instancji). &#321;atwo mo&#380;emy tu publikowa&#263; informacje, poniewa&#380; wysy&#322;amy je w jedno miejsce, z kt&oacute;rego nast&#281;pnie wszyscy klienci je odczytuj&#261;. Problemem jest tu natomiast skalowanie aby sprosta&#263; ogromnej liczbie klient&oacute;w dobijaj&#261;cych si&#281; po aktualne informacje. Najwi&#281;ksz&#261; bol&#261;czk&#261; s&#261; pojedyncze punkty awarii (single point of failure), kt&oacute;re w przypadku niew&#322;a&#347;ciwego funkcjonowania s&#261; w stanie unieruchomi&#263; przep&#322;yw informacji w ca&#322;ej sieci. We&#378;my tu za przyk&#322;ad takie aplikacje jak Facebook czy Twitter. W przypadku awarii Load Balancer&oacute;w, b&#322;&#281;du w konfiguracji DNS-&oacute;w czy niedyspozycji bazy danych te aplikacje staj&#261; si&#281; ca&#322;kowicie sparali&#380;owane.</p>
<p>Lepszym podej&#347;ciem jest oczywi&#347;cie architektura zdecentralizowana (<strong>B</strong>), kt&oacute;ra jest w stanie znie&#347;&#263; unieruchomienie niekt&oacute;rych serwer&oacute;w, poniewa&#380; pomimo, &#380;e serwery w niej zlokalizowane komunikuj&#261; si&#281; mi&#281;dzy sob&#261; to nie s&#261; od siebie uzale&#380;nione. Przyk&#322;adem mog&#261; by&#263; tu serwery mailowe, serwery sieci komunikacji <a href="https://xmpp.org/">XMPP</a> czy sieci spo&#322;eczno&#347;ciowe takie jak <a href="https://diasporafoundation.org/">Diaspora</a>. Je&#380;eli przestanie dzia&#322;a&#263; jeden z pod&oacute;w Diaspory nie przeszkodzi to w komunikacji u&#380;ytkownikom innych pod&oacute;w. Oczywi&#347;cie nadal istniej&#261; tu w&#261;skie gard&#322;a takie jak serwery DNS czy serwery na kt&oacute;rych masz aktualnie konto.</p>
<p>Najbardziej odporn&#261; topologi&#261; jest sie&#263; rozproszona (<strong>C</strong>), na kt&oacute;r&#261; to w&#322;a&#347;nie stawia IPFS. Taka architektura wi&#261;&#380;e si&#281; jednak zupe&#322;nie innym podej&#347;ciem do projektowania aplikacji, poniewa&#380; ka&#380;dy w&#281;ze&#322; mo&#380;e si&#281; tu zachowywa&#263; jednocze&#347;nie jako klient i serwer oraz by&#263; po&#322;&#261;czony z dowoln&#261; liczb&#261; innych w&#281;z&#322;&oacute;w. Co...</p>
                ]]>
            </description>
                    </item>
                        <item>
            <title>Elementarne Loki</title>
            <link>https://karbownicki.com/2016/10/19/elementarne-loki</link>
            <guid>https://karbownicki.com/2016/10/19/elementarne-loki</guid>
            <pubDate>Wed, 19 Oct 2016 23:35:00 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/4/f/2/e/b/4f2eb729762f9216be51f88f8b2cbc52aa38b70c-desktopsettings.png" />
                                <p>Całkiem niedawno miałem okazję przeprowadzić pewnego (już dość wysłużonego) McBooka przez tunel białego światła do krainy wiecznego Linuksa. Chociaż instalacja przebiegła gładko to miałem wcześniej niezły dylemat, bo jaką dystrybucję można zaoferować wieloletniemu użytkownikowi OS X-a, który przecież słynie z łatwości użytkowania i ładnego, dopracowanego interfejsu? Ubuntu? Wielu użytkowników do dzisiaj nie potrafi przełknąć Unity. Mint? Niby bardziej intuicyjny, ale chyba zbyt klasyczny, efektu wow nie będzie.</p>
<p><img alt="Elementary OS - logo" src="/user/pages/01.blog/2016/elementarne-loki/elementary-os-logo.png" /></p>
<p>Tak się jednak złożyło, że światło dzienne ujrzała właśnie nowa wersja dystrybucji <strong>Elementary OS</strong>, która jak pamiętałem zgarnęła przy poprzednim wydaniu całkiem niezłe oceny blogerów. Instalacja <strong>Loki 0.4</strong> (na bazie Ubuntu 16.04 LTS) waży <strong>1,32 GB</strong> i zawiera, tak jak się można spodziewać, bardzo prosty i intuicyjny instalator graficzny. Tak prosty, że przypomniały mi się czasy przeklikiwania dalej, dalej, dalej, w instalatorach Windowsów 9x.</p>
<p>Po instalacji i ponownym uruchomieniu lądujemy na ładnym ekranie logowania Lightdm a następnie na spójnym graficznie pulpicie.</p>
<p><img alt="Elementary OS - pulpit" src="/user/pages/01.blog/2016/elementarne-loki/Elementary-OS-loki-desktop.png" /></p>
<p>Na pierwszy rzut oka wyglądało mi to na połączenie Androida ze OS X-em. Minimalizm, estetyka i ładny motyw graficzny. Chociaż muszę przyznać, że domyślny motyw jest IMHO jednym z brzydszych w porównaniu do innych dostępnych.</p>
<p><img alt="ustawienia pulpitu" src="/images/0/f/4/8/6/0f48614c03818885b8183b2fcebb1a645ef60f78-desktopsettings.png" /></p>
<p>Pierwsza rzecz, która przykuła moją uwagę to ładne i funkcjonalne obramowania okien, które nie są wyłącznie zajmującą miejsce belką z tytułem ale zawierają też "inputy", paski nawigacji czy inne podręczne przyciski.</p>
<p><img alt="różne obramowania okien" src="/user/pages/01.blog/2016/elementarne-loki/elementary-windows.png" /></p>
<p>Wszystkie zainstalowane aplikacje mają też OS X-owy look&amp;feel.</p>
<p>odtwarzacz muzyki
<img alt="odtwarzacz muzyki" src="/user/pages/01.blog/2016/elementarne-loki/music.png" /></p>
<p>edytor tekstu
<img alt="edytor tekstu" src="/user/pages/01.blog/2016/elementarne-loki/edytor.png" /></p>
<p>czy klient poczty
<img alt="klient poczty" src="/user/pages/01.blog/2016/elementarne-loki/mail.png" /></p>
<p>Wszystko jest ze sobą bardzo dobrze skomponowane. Nie brakuje też znanych ułatwień takich jak efekt Expose rozstawiający na ekranie wszystkie aktywne okna czy łatwego ich przerzucania na inne obszary robocze. Wszelkie powiadomienia to również wielofunkcyjne obiekty, które mogą zawierać różnego typu widgety.</p>
<p><img alt="dymki powiadomień" src="/user/pages/01.blog/2016/elementarne-loki/indicators.gif" /></p>
<p>Mógłbym tu jeszcze wymieniać i wymieniać ale o wiele dokładniej zrobi to <a href="http://blog.elementary.io/post/147637979911/loki-04-stable-release">wpis na oficjalnym blogu</a> opisujący nowe wydanie. Moim skromnym zdaniem tak przyjaznej dystrybucji do tej pory nie widziałem i myślę, że próg wejścia do świata Linuksa został tym samym obniżony do poziomu, którego nie spodziewałem się zobaczyć jeszcze przez długi czas. Co prawda spotykam coraz więcej nie-technicznych osób używających Ubuntu ale od dzisiaj, jeżeli ktoś mnie spyta o poradę na pewno Ubuntu nie będzie pierwszą dystrybucją jaką polecę.</p>
<p>Dla osób, które chciałby spróbować polecam jeszcze dwa linki:</p>
<ul>
<li><a href="https://elementary.io/pl/docs/installation">elementary.io/pl/docs/installation</a></li>
<li><a href="https://elementary.io/pl/docs/learning-the-basics">elementary.io/pl/docs/learning-the-basics</a></li>
</ul>
<h3>Więcej oczywiście na: <a href="https://elementary.io/">elementary.io</a></h3>
                ]]>
            </description>
                    </item>
                        <item>
            <title>httpie - HTTP dla ludzi</title>
            <link>https://karbownicki.com/2016/03/07/httpie-http-dla-ludzi</link>
            <guid>https://karbownicki.com/2016/03/07/httpie-http-dla-ludzi</guid>
            <pubDate>Sun, 03 Jul 2016 04:04:15 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/9/a/7/2/e/9a72e33f2fffb08fb9be567b849c3c80fac82df5-download.png" />
                                <p>Bardzo lubię pythonowe paczki z serii <strong>for humans</strong>. Obok <a href="http://docs.python-requests.org/en/latest/">requests</a> (zamiennika urllib2) czy <a href="https://pypi.python.org/pypi/Envelopes/0.4">Envelops</a> (Mailing for human beings) znajdziemy również <a href="https://miteshshah.github.io/sysadmin/httpie-http-for-humans/">HTTPie</a> - doskonały zamiennik takich konsolowych narzędzi jak <strong>wget</strong> czy <strong>curl</strong>.</p>
<h2>Instalacja</h2>
<p>jak zawsze banalnie prosta.</p>
<pre><code>pip install httpie</code></pre>
<p>lub jeżeli nie chcecie zainstalować paczkę tylko dla swojego użytkownika:</p>
<pre><code>pip install --user httpie</code></pre>
<p>Po instalacja do naszej dyspozycji mamy komendę <strong>http</strong>.</p>
<p><img alt="http google.com" src="/user/pages/01.blog/2016/httpie-http-dla-ludzi/google-com.png" /></p>
<p><img alt="http -v google.com" src="/user/pages/01.blog/2016/httpie-http-dla-ludzi/google-com-verbose.png" /></p>
<h2>Główne zalety httpie</h2>
<ul>
<li>kolorowanie wyjścia</li>
<li>formatowanie wyjścia</li>
<li>łatwy upload plików</li>
<li>pobieranie plików w stylu wget-a</li>
<li>obsługa parametrów GET i POST</li>
<li>nagłówki</li>
<li>bezpieczeństwo (uwierzytelnianie, https)</li>
<li>obsługa sesji</li>
<li>strumieniowanie odpowiedzi</li>
</ul>
<h2>Kilka przykładów użycia:</h2>
<h3>Wysłanie POST-a</h3>
<p><img alt="http httpbin.org/post test=yyy --print HB" src="/user/pages/01.blog/2016/httpie-http-dla-ludzi/post.png" /></p>
<p><code>--print HB</code> pozwala wyświetlić jedynie nagłówki (<strong>H</strong>) oraz treść (<strong>B</strong>) żądania.</p>
<h3>Pobieranie pliku</h3>
<p><img alt="http http://wikipedia.pl/img/wikimedia-polska.png &gt; logo.png" src="/images/7/b/2/4/c/7b24caa27382d6d9b8cb9338aa25844373f22d92-download.png" /></p>
                ]]>
            </description>
                    </item>
                        <item>
            <title>How much is the fish</title>
            <link>https://karbownicki.com/2016/03/17/how-much-is-the-fish</link>
            <guid>https://karbownicki.com/2016/03/17/how-much-is-the-fish</guid>
            <pubDate>Thu, 17 Mar 2016 11:14:00 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/c/9/e/1/d/c9e1d7aff5b079bc4b382b72194adc5f3f3cb659-fish-default.png" />
                                <p>Dzisiaj będzie o złotej rybce, która jest w stanie spełnić większość naszych życzyń dotyczących efektownej i efektywnej konsoli. <strong>F</strong>riendly <strong>I</strong>nteractive <strong>SH</strong>ell czyli fish to jedna z powłok systemowych, której możemy użyć w konsoli jako zamiennika <strong>basha</strong> czy <strong>zsh</strong>.</p>
<p><img alt="fish shell logo" src="/user/pages/01.blog/2016/how-much-is-the-fish/fish-logo.png" /></p>
<h1>Instalacja</h1>
<p>Powłoka <strong>fish</strong> jest dostępna w repozytoriach większości dystrybucji. Wystarczy zainstalować paczkę.</p>
<pre><code># pacman -S fish</code></pre>
<p>Następnie ustawić ją jako domyślną powłokę dla naszego użytkownika.</p>
<pre><code>$ chsh -s /usr/bin/fish</code></pre>
<p>Gotowe, po uruchomieniu nowej konsoli zobaczymy domyślne powitanie fisha.</p>
<p><img alt="fish default prompt" src="/images/e/3/f/3/3/e3f334829d1ac3a07cb931505e8e3b624846c88a-fish-default.png" /></p>
<h1>Menadżer pakietów</h1>
<p>Dobre rozwiązania mają to do siebie, że są zbudowane na solidnej podstawie ale jednocześnie dają możliwość rozszerzania swoich funkcji za pomocą pluginów. Podobnie jest i w tym przypadku. Do wyboru mamy nawet kilka menadżerów pakietów tj.</p>
<ul>
<li><a href="https://github.com/tuvistavie/fundle">fundle</a> - inspirowany Vundle-m czyli podobnym menadżerem dla Vim-a</li>
<li><a href="https://github.com/oh-my-fish/oh-my-fish">oh-my-fish</a> - menadżer inspirowany oh-my-zsh</li>
<li><a href="https://github.com/fisherman/fisherman">fisherman</a> - nowy i podobno najszybszy z nich wszystkich</li>
</ul>
<p>Jako że dzisiaj wpadłem na <strong>fishermana</strong> to właśnie jego zademonstruję. Do jego instalacji wystarczy nam <strong>curl</strong>.</p>
<pre><code>$ curl -sL get.fisherman.sh | fish</code></pre>
<p><img alt="fish default prompt" src="/user/pages/01.blog/2016/how-much-is-the-fish/fisherman-install.png" /></p>
<p>Do dyspozycji mamy teraz komendę <strong>fisher</strong> oraz dwa domyślnie zainstalowane pakiety.</p>
<pre><code>$ fisher list
* debug
* spin</code></pre>
<p>Rybaka w działaniu możecie dokładniej pooglądać tutaj - <a href="http://fisherman.sh/#demo">fisherman.sh/#demo</a></p>
<p>Szczegółową listę pakietów można podejrzeć wklepując:</p>
<pre><code>$ fisher search --long</code></pre>
<p><img alt="fisher search results" src="/user/pages/01.blog/2016/how-much-is-the-fish/fisher-search.png" /></p>
<p>Oczywiście lista obejmuje jedynie wspierane i przetestowane paczki ale nie zabrania nam to zainstalowania dowolnej paczki ze ścieżki, url-a czy podając autora i nazwę repozytorium.</p>
<pre><code>$ fisher install owner/repo</code></pre>
<p>Osobiście moim <em>must have</em> w konsoli jest nazwa użytkownika i maszyny, na którą jestem obecnie zalogowany, dlatego pierwsze co robię po instalacji fisha to dostosowanie prompta poprzez instalację paczki <strong>lambda</strong>.</p>
<p><img alt="fisher lambda prompt" src="/user/pages/01.blog/2016/how-much-is-the-fish/fisher-lambda.png" /></p>
<h1>Użytkowanie</h1>
<p>Fish jak już sama nazwa wskazuje został zaprojektowany jako przyjazna użytkownikowi interaktywna powłoka. Interakcje możemy zauważyć już po wpisaniu pierwszego znaku, ponieważ powłoka od razu podpowiada nam pasujące do wpisanego tekstu komendy.</p>
<p><img alt="fish interactive" src="/user/pages/01.blog/2016/how-much-is-the-fish/fish-interactive.png" /></p>
<p>Out of the box podpowiada też argumenty różnych komend.</p>
<p><img alt="fish git" src="/user/pages/01.blog/2016/how-much-is-the-fish/fish-git.png" /></p>
<p>Używając <strong>zsh</strong> często przyłapywałem się na tym, że 80% rzeczy które robię w konsoli zaczynają się od wciśnięcia <code>ctrl+r</code> czyli kombinacji pozwalającej na wyszukiwanie w historii. W fishu ten krok stał się zbędny ponieważ domyślnie wszystko co wklepujemy automagicznie przeszukuje historię w celu podpowiedzenia nam ostatniego użycia a strzałkami w górę i w dół możemy przeglądać pozostałe pasujące rezultaty.</p>
<p><img alt="fish history search" src="/user/pages/01.blog/2016/how-much-is-the-fish/fish-pacman.png" /></p>
<p>Mógłbym tu jeszcze pozachwycać się nad wieloma fajnymi rzeczami jakie można znaleźć w fishu, ale nie po to ktoś napisał do niego <a href="https://fishshell.com/docs/current/tutorial.html">ładny tutorial</a>, żebym go teraz pominął. Pluginy najlepiej przetestować samemu, ewentualnie korzystając z <code>fisher search --long</code> przejrzeć najpierw ich repozytoria ponieważ na większości znajdziecie gotowe screeny.</p>
<p>Na koniec oficjalnie:
<a href="http://fishshell.com/">fishshell.com</a></p>
<p>h3. UPDATE</p>
<p>Ponieważ moja poprawka do lambdy dodająca wsparcie dla pythonowego virtualenva wisi od dłuższego czasu to działającą wersję możecie zainstalować z mojego repozytorium</p>
<pre><code>fisher install trojkat/theme-lambda</code></pre>
<p>Lub jeżeli korzystacie z <a href="https://github.com/oh-my-fish/oh-my-fish">omf</a>:</p>
<pre><code>omf install https://github.com/trojkat/theme-lambda</code></pre>
                ]]>
            </description>
                    </item>
                        <item>
            <title>Praca dla kogoś vs. własny projekt</title>
            <link>https://karbownicki.com/2016/03/10/praca-dla-kogos-vs-wlasny-projekt</link>
            <guid>https://karbownicki.com/2016/03/10/praca-dla-kogos-vs-wlasny-projekt</guid>
            <pubDate>Thu, 10 Mar 2016 23:27:00 +0000</pubDate>
            <description>
                <![CDATA[
                                <p>Wczoraj <a href="http://javadevmatt.pl">Mateusz</a> wrzucił bardzo fajny materiał, w którym omawia temat wyobrażeń dotyczących zawodu programisty i ich późniejszej weryfikacji praktycznej. Trudno się z nim nie zgodzić, dlatego pozwoliłem sobie wrzucić go tutaj jako przestrogę a zarazem receptę na przyszłość.</p>
<div class="grav-youtube-wrapper ">
  <div class="grav-youtube">
      <iframe src="https://www.youtube.com/embed/SeaYJ3UrR8U?showinfo=1" frameborder="0" allowfullscreen></iframe>
  </div>
</div>
                ]]>
            </description>
                    </item>
                        <item>
            <title>Python3, Node.js i C++ jako REST-owe API</title>
            <link>https://karbownicki.com/2016/03/09/python3-nodejs-i-c-jako-rest-owe-api</link>
            <guid>https://karbownicki.com/2016/03/09/python3-nodejs-i-c-jako-rest-owe-api</guid>
            <pubDate>Wed, 09 Mar 2016 23:43:00 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/c/a/8/5/e/ca85e5d992756069ffb3cb6b1436a2a402fc7398-py-js-cpp-results.png" />
                                <p>Dzisiaj polecam przejrzeć ciekawy <a href="http://szborows.blogspot.com/2016/03/mini-restjson-benchmark-python-351-vs.html">test wykonany przez Sławomira Zborowskiego</a>, który dokonał porównania Pythona3, Node.js-a i C++ jako REST-owych backendów do aplikacji frontendowych.</p>
<p><img alt="porównanie pythona3 node.js-a i C++" src="/images/c/0/d/7/0/c0d707e42ccb8cfea9d6d786e6d2726311050778-py-js-cpp-results.png" /></p>
<p>Prawdę mówiąc zdziwiła mnie tak dobra forma Node.js-a. Czy to już czas na <strong>#dobrazmiana</strong>?</p>
                ]]>
            </description>
                    </item>
                        <item>
            <title>Little War Game - RTS by JS</title>
            <link>https://karbownicki.com/2016/03/08/little-war-game-rts-by-js</link>
            <guid>https://karbownicki.com/2016/03/08/little-war-game-rts-by-js</guid>
            <pubDate>Tue, 08 Mar 2016 23:27:00 +0000</pubDate>
            <description>
                <![CDATA[
                                <img alt="" src="https://karbownicki.com/images/8/b/1/6/4/8b164425eb0a5cf46fcf5b5d7d0767d4aabb2093-lwg-1.png" />
                                <p><img alt="Little War Game - screen 1" src="/images/5/4/0/b/f/540bfcbe8197f7f33a429ec7bd333e2c53019217-lwg-1.png" /></p>
<p>Little War Game to bardzo grywalna strategia czasu rzeczywistego przypominająca trochę średniowiecznego StarCrafta. Gra jest w pełni darmowa i zarazem wieloplatformowa, ponieważ działa w przeglądarce w całości napędzana JavaScriptem (zero Javy, zero Flasha).</p>
<p><img alt="Little War Game - screen 2" src="/user/pages/01.blog/2016/little-war-game-rts-by-js/lwg-2.png" /></p>
<p>Co ciekawe za całą mechanikę gry (nie licząc grafiki i muzyki) odpowiada <a href="https://twitter.com/jbgames_">jeden programista</a>. A co jeszcze ciekawsze oprócz jQuery i Underscore'a nie używał żadnych frameworków. Cała komunikacja z backendem odbywa się naturalnie po websocketach a na zapleczu siedzi node.js.</p>
<p><img alt="Little War Game - screen 3" src="/user/pages/01.blog/2016/little-war-game-rts-by-js/lwg-3.png" /></p>
<p>Little War Game to idealna gra do rozgrywki wieloosobowej, bez problemu możemy zahostować własną grę na jednej z miliona map czy dołączyć się do już istniejącej rozgrywki. Można również zagrać z komputerem, którego inteligencja stoi na całkiem przyzwoitym poziomie.</p>
<p><img alt="Little War Game - screen 3" src="/user/pages/01.blog/2016/little-war-game-rts-by-js/lwg-4.png" /></p>
<p>Oczywiście w grze nie brakuje też takich bajerów jak edytor map czy nawet odtwarzanie powtórek a mnogość jednostek i powiązanych z nimi budynków zapewnia całkiem przyjemną rozgrywkę ekonomiczną. Nic tylko odpalić url-a w wolnej chwili i zaprosić kilku znajomych.</p>
<p>A teraz przejdźmy do rzeczy: <a href="http://littlewargame.com/">littlewargame.com</a></p>
                ]]>
            </description>
                    </item>
            </channel>
</rss>