TechLife devBlog

IPFS: Kazus Turecki

Internet 11 maja 2017 21:53

Nieco ponad 2 tygodnie temu pisałem o rozproszonym systemie plików IPFS. Jedną z głównych wad obecnego internetu, z którą chce sobie poradzić IPFS, jest centralizacja:

[...] 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.

5 dni później (29 kwietnia 2017) obywatele Turcji zostali na polecenie rządu odcięci od Wikipedii. Z racji swojej pracy, ludzie z Protocol Labs (zajmujący się rozwojem IPFS-a) postanowili wykorzystać to co już stworzyli i pokazać przydatność sieci rozproszonej.

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

/ipfs/QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX/wiki/Anasayfa.html

lub za pośrednictwem systemu nazw (IPNS), który to identyfikator będzie zawsze wskazywał na najnowszą wersję zrzutu:

/ipns/QmVH1VzGBydSfmNG7rmdDjAeBZ71UVeEahVbNpFQtwZK8W/wiki/Anasayfa.html

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 go-ipfs-git autorstwa Kubuxu (swoją drogą studenta AGH) czeka już w AUR.

$ yaourt -S go-ipfs-git

Teraz po wystartowaniu węzła jesteśmy gotowi do przeglądania statycznej Wikipedii. W tym celu w przeglądarce wchodzimy na:

http://127.0.0.1:8080/ipns/QmVH1VzGBydSfmNG7rmdDjAeBZ71UVeEahVbNpFQtwZK8W/wiki/Anasayfa.html

I jesteśmy na ostatnim zrzucie:

strona główna

Nawet wyszukiwanie działa:

wynik wyszukiwania

strona hasła: polonia

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.

Aby pomóc udostępniać (seedować) Wikipedię wystarczy ją przypiąć do swojego węzła:

$ ipfs pin add QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX

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.

Więcej informacji o całej akcji znajdziecie na blogu IPFS-a.

Dobrej zabawy w przywracanie wolności ( ͡° ͜ʖ ͡°)

Shenzhen - światowa stolica innowacji

Inne 6 maja 2017 21:20

Shenzhen na mapie

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).

Panorama Shenzhen

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.

Aha, no i jestem ciekaw Waszych opinii.

IPFS - międzyplanetarny system plików

Internet 24 kwietnia 2017 19:16

Co niby może być ciekawego w systemie plików? Poza tym, że można zrobić z niego grę RPG to zazwyczaj niewiele. W tym przypadku może być jednak zupełnie inaczej. IPFS (InterPlanetary File System) to nowo powstający protokół, który w przyszłości może diametralnie zmienić sposób funkcjonowania sieci Internet a zastąpienie protokołu HTTP będzie tylko jedynym ze skutków ubocznych.

IPFS logo

Problemy dzisiejszej sieci

Nowych protokołów zazwyczaj nie tworzy się dla zachcianki ale w celu rozwiązania jakiś istotnych problemów. Jakie problemy więc próbuje rozwiązać IPFS?

  • CENTRALIZACJA - 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.
  • NIEEFEKTYWNOŚĆ HTTP - protokół HTTP zakłada pobieranie danego pliku z pojedynczej maszyny, nie mamy możliwości pobierania go równolegle z wielu (często bliższych nam) punktów jednocześnie tak jak w przypadku sieci p2p.
  • UTRATA HISTORYCZNYCH DANYCH - każdego dnia wiele wartościowych treści znika bezpowrotnie z internetu wraz ze stronami na których były zamieszczone a proces ich zabezpieczania i wersjonowania nie jest prosty i często wiąże się z tworzeniem kolejnych duplikatów co kosztuje sporo miejsca.
  • UZALEŻNIENIE APLIKACJI OD INTERNETU - większość współczesnych aplikacji jest uzależniona od dostępu do internetu a przez to nienadająca się do krajów trzeciego świata, nieodporna na katastrofy naturalne (podczas których duże obszary są odcinane od sieci) czy często przerywane połączenia.

Rozwiązania

Ok, skoro już wiemy z jakimi problemami chce zmierzyć się IPFS to teraz przyjrzyjmy się jakimi sposobami będzie starał się je pokonać.

1. TOPOLOGIA

topologie sieci

Obecnie wiele aplikacji działa w oparciu o scentralizowaną architekturę (A). Charakteryzuje się ona podziałem na role klient-serwer gdzie klientów mamy wielu natomiast serwer jest jeden (choć często składa się z wielu instancji). Łatwo możemy tu publikować informacje, ponieważ wysyłamy je w jedno miejsce, z którego następnie wszyscy klienci je odczytują. Problemem jest tu natomiast skalowanie aby sprostać ogromnej liczbie klientów dobijających się po aktualne informacje. Największą bolączką są pojedyncze punkty awarii (single point of failure), które w przypadku niewłaściwego funkcjonowania są w stanie unieruchomić przepływ informacji w całej sieci. Weźmy tu za przykład takie aplikacje jak Facebook czy Twitter. W przypadku awarii Load Balancerów, błędu w konfiguracji DNS-ów czy niedyspozycji bazy danych te aplikacje stają się całkowicie sparaliżowane.

Lepszym podejściem jest oczywiście architektura zdecentralizowana (B), która jest w stanie znieść unieruchomienie niektórych serwerów, ponieważ pomimo, że serwery w niej zlokalizowane komunikują się między sobą to nie są od siebie uzależnione. Przykładem mogą być tu serwery mailowe, serwery sieci komunikacji XMPP czy sieci społecznościowe takie jak Diaspora. Jeżeli przestanie działać jeden z podów Diaspory nie przeszkodzi to w komunikacji użytkownikom innych podów. Oczywiście nadal istnieją tu wąskie gardła takie jak serwery DNS czy serwery na których masz aktualnie konto.

Najbardziej odporną topologią jest sieć rozproszona (C), na którą to właśnie stawia IPFS. Taka architektura wiąże się jednak zupełnie innym podejściem do projektowania aplikacji, ponieważ każdy węzeł może się tu zachowywać jednocześnie jako klient i serwer oraz być połączony z dowolną liczbą innych węzłów. Co ciekawe właśnie tak wyobrażano sobie pierwotny kształt sieci Internet.

2. Identyfikacja i unikalność

Ponieważ głównym nośnikiem informacji w sieci IPFS są pliki, dlatego duży nacisk postawiono na ich właściwą reprezentację. Każdy plik w sieci IPFS ma swój unikalny identyfikator oparty na kryptograficznej funkcji skrótu (cryptographic hash), który generowany jest w oparciu o jego zawartość. Oznacza to, że niezależnie od nazwy jeżeli dwa pliki będą miały tą samą zawartość wtedy otrzymają również ten sam identyfikator. Przykład takiego identyfikatora:

/ipfs/QmVBEScm197eQiqgUpstf9baFAaEnhQCgzHKiXnkCoED2c

Po wprowadzeniu do pliku choćby minimalnych zmian jego identyfikator również ulegnie zmianie. Podobnie jest z folderami, hash folderu generowany jest na podstawie jego zawartości więc dorzucenie lub usunięcie pliku zmieni jego identyfikator. W ten sposób otrzymujemy sieć permanentnych plików, gdzie każda zmiana tworzy nową wersję pliku. Od razu rodzi się pytanie w jaki sposób znaleźć najnowszą wersję jakiegoś pliku?

Dla uproszenia załóżmy, że nasz znajomy prowadzi bloga w formie pojedynczego pliku blog.html. Znając identyfikator tego pliku jesteśmy w stanie bez problemu go pobrać. Wiemy jednak, że plik jest codziennie aktualizowany a skoro jest modyfikowany to jego kolejne wersje mają nowe nieznane nam identyfikatory. Jeżeli interesuje nas zawsze najnowsza wersja pliku to jak znaleźć najnowszy identyfikator?

Każdy węzeł sieci IPFS ma również swój unikalny identyfikator, którego możemy użyć posługując się IPNS czyli międzyplanetarnym systemem nazw (InterPlanetary Name Space). Każdy kto miał styczność z GIT-em na pewno kojarzy znacznik HEAD, który określa nam, która z wersji jest obecnie traktowana jako najnowsza.

[HEAD] ----- > trzecia wersja
               druga wersja
               pierwsza wersja

Podobnie w przypadku identyfikatora węzła może on wskazywać na konkretny identyfikator pliku czy folderu.

/ipns/hash-wezla  -->  /ipfs/hash-najnowszej-wersji-pliku-blog-html

Istnieje też opcja skorzystania z serwerów DNS i użycia domen jako wskaźnika na dany hash węzła czy pliku/folderu. Wtedy możliwe jest użycie nazwy typu:

/ipns/example.com

ale jak się domyślacie centralna sieć DNS nie bardzo wpasowuje się w filozofię sieci rozproszonej, dlatego to bardziej ciekawostka lub element przejściowy.

W ten właśnie sposób jesteśmy w stanie zapewnić dynamiczną treść w sieci niemodyfikowalnych plików.

3. Własny węzeł

Aby zacząć korzystać z sieci IPFS musimy uruchomić własny węzeł, który po wystartowaniu odszuka inne węzły znajdujące się w jego otoczeniu i pozwoli nam stać się częścią sieci. Obecnie istnieją dwie implementacje węzła:

  • go-ipfs - napisana w języku Go i najszybciej aktualizowana
  • js-ipfs - implementacja w JavaScripcie, która może być wykorzystana przez silnik Node.js lub przeglądarkę.

Ja obecnie używam implementacji w go, ponieważ ma bardzo przyjazny interfejs konsolowy a w dodatku odpowiednia paczka jest już w repozytorium Archlinuksa, więc jej instalacja sprowadza się do:

# pacman -S go-ipfs

Po instalacji należy zainicjować nasz węzeł, co wygeneruje startową konfigurację razem z unikalnymi kluczami, którymi będzie posługiwał się nasz węzeł.

$ ipfs init
initializing IPFS node at /home/trojkat/.ipfs
generating 2048-bit RSA keypair...done
peer identity: QmegHuTrDEN2j4SATDpE7U6nXW81hd1Ropph7EPkP4EXhS
to get started, enter:

ipfs cat /ipfs/QmegHuTrDEN2j4SATDpE7U6nXW81hd1Ropph7EPkP4EXhS/readme

Po wydaniu tego polecenia zobaczymy:

$ ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme
Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗  ███████╗
██║██╔═══╝ ██╔══╝  ╚════██║
██║██║     ██║     ███████║
╚═╝╚═╝     ╚═╝     ╚══════╝

If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!

 -------------------------------------------------------
| Warning:                                              |
|   This is alpha software. Use at your own discretion! |
|   Much is missing or lacking polish. There are bugs.  |
|   Not yet secure. Read the security notes for more.   |
 -------------------------------------------------------

Check out some of the other files in this directory:

  ./about
  ./help
  ./quick-start     <-- usage examples
  ./readme          <-- this file
  ./security-notes

Oczywiście zachęcam do odwiedzenia strony quick-start, ale teraz zajmiemy się najważniejszym - uruchomieniem węzła:

$ ipfs daemon
Initializing daemon...
Adjusting current ulimit to 2048...
Successfully raised file descriptor limit to 2048.
Swarm listening on /ip4/10.3.217.65/tcp/24800
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/192.168.1.103/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

Lub z wykorzystaniem systemd:

$ systemctl --user start ipfs.service

Węzeł posiada własny webowy interfejs, który możecie znaleźć odwiedzając adres http://localhost:5001/webui

IPFS webui

Można znaleźć tam również zakładkę z ciekawą wizualizacją wszystkich węzłów, które wykrył nasz węzeł.

IPFS webui: połączenia

Działający węzeł pozwala nam już operować na rozproszonej sieci IPFS. Przetestujmy:

$ ipfs get /ipfs/QmcniBv7UQ4gGPQQW2BwbD4ZZHzN3o3tPuNLZCbBchd1zh -o movie.mp4

Gratulacje, właśnie staliście się użytkownikami sieci rozproszonej! Teraz możecie również zacząć udostępniać własne pliki:

$ ipfs add example.jpg
added QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH example.jpg

O wiele, wiele więcej

Jeżeli dotrwałeś aż do tego zdania to znaczy, że prawdopodobnie temat Cię zainteresował i jesteś gotów na więcej. Wszystko co tu przedstawiłem to zaledwie liźnięcie obszernego tematu jakim jest IPFS. Za jego opracowaniem stoją ludzie z Protocol Labs i to do nich najlepiej zwrócić się po szczegółowe informacje. Ich twarzą na konferencjach a zarazem głównym pomysłodawcą protokołu jest Juan Benet dlatego nikt lepiej niż on nie opowie o tym projekcie (po angielsku).

A tu krótkie demo działania:

Garść linków:

Podsumowanie

x) Niezwykle rzadko zdarzało się w historii ludzkości, żeby jakiś nowy wynalazek nie był związany z którąś ze znanych już technologii czy teoriami, które rozważano już od wielu lat. Nasza obecna kultura remiksu przerabiająca dobrze znane idee i rozwiązania sprawdza się doskonale i ma na koncie wiele znakomitych technologii i wynalazków. Dlatego kiedy usłyszałem o składnikach, jakich użyto to przyrządzenia IPFS-a od razu pomyślałem, że ktoś dokładnie odrobił zadanie domowe. Wystarczy wspomnieć o drzewach skrótów używanych przez Git-a czy Bitcoina dodać to tego BitTorrenta, z którego wyjmujemy czułe punkty jakimi są trackery i pomnożyć to przez ulepszone rozproszone tablice mieszające. Brzmi ciekawe jeszcze przed implementacją.

y) Jak każda rodząca się technologia również IPFS musi przejść swój okres niemowlęcy, odkryć ślepe uliczki i znaleźć rozwiązania problemów, które dopiero pojawią się na horyzoncie. Jednak patrząc na obecne technologie takie jak bezstanowy protokół HTTP też można by powiedzieć, że nie nadają się do użytku. Ale przecież nie logujemy się do naszego ulubionego serwisu po każdym odświeżeniu strony, ponieważ tam gdzie jest problem wkrótce pojawia się też rozwiązanie - ciastka z identyfikatorem sesji. Również IPFS ma przed sobą wiele pytań, na które nikt nie znalazł jeszcze wystarczająco dobrej odpowiedzi, ale jak na razie nawet samo śledzenie procesu projektowania jest dla mnie niezwykle ciekawe. Zwłaszcza gdy mamy okazję dołożyć swoją choćby małą cegiełkę. W końcu ludzie do dzisiaj odwiedzają stronę z pierwszym commitem Linusa.

z) Coraz częściej słyszy się zarówno w Polsce jak i w innych krajach o mniej lub bardziej udanych próbach kontroli internetu. Wymówek zawsze jest wiele: walka z pedofilią, terroryzmem czy Fake News™. Ostatecznie jednak wszystko sprowadza się do tego samego: ściślejszej kontroli obywateli, zamykaniu niewygodnych portali czy odcinaniu niewygodnych osób/grup od ich wpływu na społeczeństwo. W takim świetle bardzo ciekawe rysuje się scenariusz, w którym kilku gości z klawiaturami przekonfigurowuje tak strukturę sieci, że przestaje ona być możliwa do kontroli, niezależnie od tego jak wysoko siedzi osoba, której się to nie podoba.

Elementarne Loki

Linux 19 października 2016 23:35

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.

Elementary OS - logo

Tak się jednak złożyło, że światło dzienne ujrzała właśnie nowa wersja dystrybucji Elementary OS, która jak pamiętałem zgarnęła przy poprzednim wydaniu całkiem niezłe oceny blogerów. Instalacja Loki 0.4 (na bazie Ubuntu 16.04 LTS) waży 1,32 GB 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.

Po instalacji i ponownym uruchomieniu lądujemy na ładnym ekranie logowania Lightdm a następnie na spójnym graficznie pulpicie.

Elementary OS - pulpit

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.

ustawienia pulpitu

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.

różne obramowania okien

Wszystkie zainstalowane aplikacje mają też OS X-owy look&feel.

odtwarzacz muzyki odtwarzacz muzyki

edytor tekstu edytor tekstu

czy klient poczty klient poczty

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.

dymki powiadomień

Mógłbym tu jeszcze wymieniać i wymieniać ale o wiele dokładniej zrobi to wpis na oficjalnym blogu 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ę.

Dla osób, które chciałby spróbować polecam jeszcze dwa linki:

Więcej oczywiście na: elementary.io

How much is the fish

Linux, Software 17 marca 2016 11:14

Dzisiaj będzie o złotej rybce, która jest w stanie spełnić większość naszych życzyń dotyczących efektownej i efektywnej konsoli. Friendly Interactive SHell czyli fish to jedna z powłok systemowych, której możemy użyć w konsoli jako zamiennika basha czy zsh.

fish shell logo

Instalacja

Powłoka fish jest dostępna w repozytoriach większości dystrybucji. Wystarczy zainstalować paczkę.

# pacman -S fish

Następnie ustawić ją jako domyślną powłokę dla naszego użytkownika.

$ chsh -s /usr/bin/fish

Gotowe, po uruchomieniu nowej konsoli zobaczymy domyślne powitanie fisha.

fish default prompt

Menadżer pakietów

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.

  • fundle - inspirowany Vundle-m czyli podobnym menadżerem dla Vim-a
  • oh-my-fish - menadżer inspirowany oh-my-zsh
  • fisherman - nowy i podobno najszybszy z nich wszystkich

Jako że dzisiaj wpadłem na fishermana to właśnie jego zademonstruję. Do jego instalacji wystarczy nam curl.

$ curl -sL get.fisherman.sh | fish

fish default prompt

Do dyspozycji mamy teraz komendę fisher oraz dwa domyślnie zainstalowane pakiety.

$ fisher list
* debug
* spin

Rybaka w działaniu możecie dokładniej pooglądać tutaj - fisherman.sh/#demo

Szczegółową listę pakietów można podejrzeć wklepując:

$ fisher search --long

fisher search results

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.

$ fisher install owner/repo

Osobiście moim must have 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 lambda.

fisher lambda prompt

Użytkowanie

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.

fish interactive

Out of the box podpowiada też argumenty różnych komend.

fish git

Używając zsh często przyłapywałem się na tym, że 80% rzeczy które robię w konsoli zaczynają się od wciśnięcia ctrl+r 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.

fish history search

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 ładny tutorial, żebym go teraz pominął. Pluginy najlepiej przetestować samemu, ewentualnie korzystając z fisher search --long przejrzeć najpierw ich repozytoria ponieważ na większości znajdziecie gotowe screeny.

Na koniec oficjalnie: fishshell.com

h3. UPDATE

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

fisher install trojkat/theme-lambda

Lub jeżeli korzystacie z omf:

omf install https://github.com/trojkat/theme-lambda
Strona 1 z 43 | Starsze »