Zaczęło się od tego, że programista musi być trochę leniwy. Zbyt pracowity człowiek po prostu zrobi co ma być do zrobienia, bez marudzenia. Programista powinien mieć bardzo rozwinięty zmysł zauważania wzorca, coś w rodzaju
"hola hola, przecież od dwudziestu minut robię dokładnie to samo, słyszę regularność w pracy swoich palców coś jest nie tak"
tak jak młynarz budzi się ze snu gdy ustaje dźwięk młyna, programista budzi się ze snu gdy słyszy rytm w dźwięku wydawanym przez swoje palce. To oznacza, że znajdujemy się w cyklu, że robimy rzecz, którą być może mogłaby robić maszyna.
W tym momencie trochę skłamałem. W rytmie pisania kodu nie ma nigdy słyszanego rytmu. Znam ten dźwięk z czasów pracy przy rotoskopii, cyzelowania keyframeów, mozolnego przekładania czegoś z jednego miejsca na drugie, gdzie elementów jest na tyle mało że jeszcze nie opłaca się pisać skryptu w jakimś topornym środowisku, ale gdyby elementów do przełożenia było cztery razy tyle, to mogłoby się już opłacać (obserwując wirujący zegar i słuchając monotonnego rytmu pracy swoich rąk. Dobra zeszliśmy z tematu
Programista musi być leniwy, bo jego rolą jest zbudowanie maszyny, która będzie robić sama to, co wcześniej robił człowiek, albo co mogłaby robić armia ludzi gdybyśmy mieli ich gdzie nocować i czym karmić przez parę lat, w każdym razie celem jej lub jego jest stworzenie czegoś (będziemy myśleć o tym w kategorii bytu), co będzie miało pewną dozę samodzielności istnienia.
Trochę jakby tworzyło się małą istotę żywą.
A potem jest serwis. Serwis jest wtedy jak maszyna przestała działać. Mogło się coś zużyć, zazwyczaj coś się po prostu zmieniło z warunków na jakie maszyna była projektowana, jakiś element wypracowanej pomiędzy sensorami, logiką a częścią renderującą równowagi został wytrącono poza zakres stabilny. Maszyna wymaga odrobinę miłości, odrobinę opieki. Jak dziecko.
Ale jednak nie, dla życia, tego prawdziwego, zmienne warunki nie stanowią problemu, adaptuje się, to bardzo kosztowne ale ostatecznie się adaptuje.
Program, czy jak u mnie, instalacja, umiera. Czasami poprzedza to okres choroby, niedomagania, okresu, podczas którego gdybym był wtedy przy niej, mógłbym przeczuwać że coś się dzieje, ale często dzieje się to gwałtownie. W końcu śmierć następuje (ostatecznie gdy pleśń zje kondensatory stabilizujące zasilanie na płycie głównej, ale nie o tym przypadku mowa). Wtedy trzeba to coś wskrzesić. Tu następuje tytułowe spostrzeżenie tego posta: Technologia to magia Nekromancji.
No więc przyjeżdżasz na miejsce, faktycznie, pacjent nie żyje, zmarł. Czasami to coś banalnego, sprzątaczka ruszyła kabel i odłączyła zasilanie. Czasami trzeba zabrać zwłoki do bazy, ocalić działające organy i wymienić resztę.
Ps. najczęściej sekcja zwłok wykazuje za przyczynę awarii nie gnijące kondensatory, a Twój własny błąd. Nie popełnia błędów tylko ten co nie robi.
Opowiem wam co mi się właśnie przydarzyło. Historia hermetyczna ale chyba czytelnicy tej strony są do tego przyzwyczajeni.
Sobota wieczór, czas na odświeżenie tematu generowania perlin noise w Unity3D za pomocą shadera (jest mi potrzebne, dłuższa historia, innym razem).
Pierwszą rzeczą którą robię w takich sytuacjach jest sprawdzenie czy keijiro przypadkiem nie zrobił tego dawno temu, i oczywiście zrobił, trzy lata temu, ale bardziej jako proof of concept i niezbyt użyteczne do moich celów
Niezawodne google pokierowało mnie w strone TurbulenceLibrary i tu wylądowaliśmy zdecydowanie bliżej celu (prawie na miejscu).
Wtyczka miała mały kosmetyczny problem przy próbie odpalenia, zakodowana na sztywno była ścieżka do szablonu shadera, i jeżeli przypadkiem umieściłeś katalog w innym miejscu to nie potrafiła się ogarnąć i w tym miejscu stawała.
Ponieważ u mnie rzeczy często zmieniają miejsce postanowiłem poświęcić te pięć minut i dopisać wyszukiwanie właściwego pliku, raptem parę linijek
Pomyślałem wtedy, że to może być ważny moment, bo ogólnie wtyczka jest bardzo potężna, ale porzucona, zmiana którą wprowadziłem nie powoduje żadnych side effects, a jedynie naprawia praktyczny problem, więc mam rzadką sytuację gdzie jest względnie jasne że zmiana którą zrobiłem jest in plus, co więcej, inni mogliby na niej skorzystać
Z sercem bijącym na ramieniu otworzyłem tutorial tworzenia na githubie pull requestów. Utworzyłem requesta, napisałem opis, ale gry próbowałem go wysłać okazało się że to repo zostało zamrożone.
W takiej sytuacji nie pozostawało nic innego jak stworzyć forka
Okazało się, że istnieje ich już siedem
Co tu teraz zrobić? Zrobiłem to co musiało zostać zrobione czyli przejrzałem wszystkie siedem forków, i na szczęście tylko na jednym był jakikolwiek ruch (dwa commity zmieniające formatowanie, ale przy okazji psujące nieco strukturę katalogów. Skończyło się oczywiście ósmym forkiem (zwłaszcza że przeczuwam że jeszcze tam coś dopiszę), ale chciałem tak naprawdę nie o tym.
Zaglądając na profile ludków, którzy klonowali projekt (podejrzewam że wykonując po prostu w ten sposób publiczny 'backup' chroniący ten kod przed zaginięciem na wypadek jakby autor zdecydował się je usunąć, doszło do mnie, że ludzie którzy wpadli na ten sam pomysł byli podobni do mnie zainteresowaniami. Niby oczywiste ale jednak zastanowiło mnie to gdy w zasadzie splądrowałem ich projekty, patrząc 'o to, się przyda' i 'o to też się może przydać', narzędzia do geometrii, shadery, OSC, ogólnie parę tematów do których dość regularnie wracam. W końcu trafiłem na to
W zasadzie nic ciekawego, ot, hackerski projekt jakiś, jak każdy inny. Na mnie osobiście zrobiło to wrażenie na pewno większe niż na was, ponieważ nie dalej niż 72h temu bawiłem się tematem. Tzn obydwoma tematami. Tytuł repo sugeruje że rzecz jest o threadingu w dostępie do portu szeregowym pomiędzy unity a arduino - co też usprawniałem w swoim własnym kodzie bardzo niedawno, ale potem przyjrzałem się wykresom (są animowane czego już mi sie nie chcę tu kopiować ale wystarczy kliknąć). Bardzo niedawno bawiłem się prototypując zabawkę która wyczuwa zbliżającą się do niej rękę i zaczyna migać wesoło diodkami już odrobinę wcześniej, zresztą pokażę wam.
Czujniki dotyku ESP działają na zasadzie pomiaru pojemności elektrody - układ pobudza ją falą prostokątną i mierzy odpowiedź, tzn po jakim czasie napięcie faktycznie osiągnęło zadany poziom na danej nóżce - czas ten wydłuża się w miarę wzrostu pojemności (a więc zbliżania się do elektrody powierzchni palca, którą traktujemy tu jako uziemioną. Działa, chociaż nie działa za dobrze.
Jak się okazuje laboratorium działające pod skrzydłami Disney Studios opracowało metodę detekcji nie tylko odległości palca użytkownika od powierzchni interakcji, ale, za pomocą modulacji częstotliwości pobudzenia elektrody, i późniejszej analizy widmowej odpowiedzi, uzyskać można o wiele bardziej szczegółowe informacje o tym co robi ręka użytkownika, do momentu że podobno całkiem dobrze działa sterowanie za pomocą gestów. Poczytać można o tym tutaj:
UPDATE:
Ciekawostka z katalogu synchroniczności świata. Ten wpis napisałem cztery dni temu, publikuję go dziś. Czyli wpływ na rzeczywistość miał nawet nie opublikowany najwyraźniej (albo po prostu randomowy wynchron):
Co oznacza, że prawie dokładnie wtedy kiedy podekscytowany opisywałem Wam moje przygody z forkowaniem po raz pierwszy projektu, dwa moje projekty zostały sforkowane.
Harmonic Clocka zlutowałem 8 czy 9 lat temu, ale tak naprawdę nigdy go specjalnie nie używałem, az do wczoraj. Zaquencer używany jako arpegiator, kontrolowany z elektorna, kontorlujący x0xb0xa, chciałem sposobu na podejrzenie nut które faktycznie są przez ten setup wypluwane. Wystarczyło sięgnąć do schowka z prototypami i gotowe. Przykład rzeczy które robię sobie 'na zapas' jeszcze nie wiedząc dokładnie po co.
Przy okazji drugi filmik, nagrany dnia poprzedniego, opowiadający więcej o działaniu tego setupu
Z okazji zbliżającej się (a być może nawet przekroczonej, bo po wersji 1.0 nie został nawet ślad w webarchive) dwudziestej rocznicy odpalenia tej strony, postanowiłem wreszcie odpalić permalinki (dostępne są po prawej stronie przy poscie). Dodatkowo zaczęło ponownie działać oglądanie starszych postów (przez jakiś błąd dało się obejrzeć tylko ostatnich 20). Za dużo mądrości tam nie ma ale jakaś wartosć historyczna jest. Also czytanie swojego kodu sprzed kilkunastu lat, bezcenne
Ale ponieważ witasz na mojej stronie a nie na mediach społecznościowych, pare słów więcej: tajnym 'sosem' w którym pływa to nagranie jest sprzężenie zwrotne pomiędzy sherman filterbank a RV600 (gitarowym pogłosem w kostce) - pogłos jest z dużym predelayem, 100% wet, odzywa sie po chwili - trafia na przester, który następnie znowu wysyłany jest na pogłos. Skąd po chwili wraca. To jest to dziwne coś pomiędzy stanradowym, run-of-the-mill łupaniem.
Przydażyła mi się dziś dziwna rzecz, mam mieszane uczucia, być może jest to stan zbliżony do utraty zmysłów, do tego miejsca gdzie do pewnych 'normalnych' procesów myślowych po prostu nie ma już powrotu
Poszedłem dziś na lokalne spotkanie sympatyków VR, po czym uciekłem z niego. Ono tra dalej, 10 minut rowerem stąd, mogę tam wrócić, ale wybieram robienie w samotnośći. 1
W pewien sposób VR jest dla mnie o samotności, chciałbym żeby inni ludzie mogli doświadczyć tego świata, ale chyba wolę żeby efekt był lepszy, nawet jeśli miałoby to być pośmiertne ;)
Uciekłem z lęku pewnie głównie, przed tym że zacząłbym opowiadać, gdy tylko zacząłbym zadawać pytania, pytania zaczęłyby pojawiać się w odpowiedzi, i musiałbym - o zgrozo - wejść w interakcję z prawdziwym człowiekiem
Wejście w interakcję, fun and games, śmianie się i picia piwa z innymi ludźmi, przecież to przed tym właśnie próbuję uciec, konstruując ten świat
Ale z drugiej strony mam też dość dobrą racjonalizację. Jeżeli mogę pewne rzeczy zrobić sam, bez niczyjej pomocy, to będą one bardziej spójne bardziej wyrażały to co chcę powiedzieć,
samo gadanie o tym z innymi pasjonatami, byłoby jakimś zboczeniem z kursu pewnie, wolałbym pokazać im coś bardziej gotowego
a jeśli nigdy nie bedzie gotowe? to że wydaje się blisko może być równie dobrze iluzją, projekt może stawać się
Nie wiem czy będzie gotowe, chyba podróż jest dla mnie ciekawsza,
Przepraszam za literackie ułomności, livestream ze snu sprzed paru miesięcy:
To był jakiś rodzaj dystopii, pełnej wojska patrolującego strefy, kolczastych płotów, nomadów, do których sam się zaliczałem, było tam wiele wątków, mieszających się ze sobą. Pamiętam że próbowałem dostać się na wschód, i że marzyłem żeby ukraść śmigacz który widziałem w bogatej dzielnicy, znałem dobrze czas reakcji ekip trzymających wodne checkpointy na rzece, i wiedziałem że nie zdążyliby odłożyć menażki z herbatą żeby podejść do karabinów, system ustawiony był pod zatrzymywanie i kontrolowanie większych łodzi handlowych, którymi dalej, jakby udając że konflikt nie istnieje trwała wymiana żywności za używane baterie litowo jonowe i inne dobra obecne wzdłuż żyły. Towary były sprawdzane, a żeby przepłynąć całą trasę jako załoga barki, trzeba by dysponować ważnym międzystrefowo dowodem, w zasadzie mieli je tylko więksi przewoźnicy, i ich najemnicy.
Mój hamak był blisko rzeki, nie było w nim wiele rzeczy, mógłbym opuścić go gdyby sytuacja na to pozwalała, ale przy rzece mogłem w miarę stabilnie funkcjonować, dostarczając potrzebnych napraw, w zamian czerpiąc jedzenie z garów gotowanych przez całą dobę przy dużych ogniskach. Nie mieliśmy najemników, ale żyliśmy dobrze z checkpointem przy rzece, handel trwał ale żołnierze nie mieli nic ciekawego do powiedzenia, poza tym trwał konflikt, my nie ufaliśmy im, ani oni nie ufali nam.
W zasadzie jedyną rzeczą po którą musiałbym wrócić do plecaka ukrytego w hamaku, gdyby przyszło mi natychmiast zmieniać obóz, był czysty zestaw ubrań, z nowoczesnych, samoczyszczących się tkanin, z zewnątrz wyglądałem w nim prawie jak średni mieszkaniec miasta, którego przedmurze sąsiadowało z naszym obozem, uniemożliwiając w zasadzie ruch inny jak w górę czy w dół rzeki. Kurtka była przeróbką, miała w środku różne schowki gdzie rozmaite karty magnetyczne były izolowane magnetycznie, więc nie wykrywały ich zwykłe czytniki, nie pamiętam skąd ją miałem, czy była to trudna usługa czy jedna z trudnych etycznie decyzji o przygarnięciu sprzętu porzuconego na polu bitwy ale była moim orężem w tej bitwie.
Musiałem skądś znać Miasto, być może byłem w nim wcześniej, były różne systemy, pasaże kablowe, trakty wentylacyjne, przejścia dla obsługi, w każdym razie pamiętam widoki z dachów, refleksy przeszklonej metropolii, porastającej niczym fluorescentne koralowce zbocza i doliny falujące na wysokość kilku pięter aż po horyzont. Szczyt wulkanu ginął we mgle, przy tej pogodzie mogłem tylko na pamięć odtworzyć jego kontur, gęste szare chmury podświetlone intensywną łuną miasta pożerały szczyty drapaczy chmur, razem z ich koronami, niereuglarnymi porostami z anten, w dzień zdawało się że niektóre uginają się prawie pod ich ciężarem.
Przez któryś z kanałów wentylacyjnych udało mi się przedostać do komisariatu policji, do toalety. Korytarz pełny był gliniarzy, nie obawiałem się ich aż tak bardzo, ponieważ nie było na mnie aktualnego nakazu zatrzymania, ale wolałem uniknąć pytań co tu robię biorąc pod uwagę wcześniejsze, odpracowane wyroki, na pewno mogłoby to pokrzyżować mi plany. Nie miałem dostępu do innych części komisariatu, miał swój własny system wentylacyjny, ale w tym miejscu budynku miała miejsce jakaś przeróbka, przez którą ktoś doczepił tą jedną toaletę do zewnętrznej sieci wentylacyjnej, która pozostała niezabezpieczona. Gliniarze znali się z twarzy, ale często widziałem jak interesanci do poszczególnych pokojów czekali na korytarzu, z ich wyrazów twarzy potrafiłem prawie wyczytać czy są tam jako świadkowie czy jako podejrzani, w stronę krzeseł poczekalni ustawiona była większość kamer, a kamery w toalecie musiały być nieaktywne już dawno bo nikt nie reagował gdy smażyłem ich przetwornice laserem.
onieważ wszyscy paradowali tam z widocznymi identyfikatorami, starałem się stać zawsze tak żeby udawać że sikam do pisuaru, czasami gdy ktoś zagadywał udawałem że chwieję się i bełkoczę coś, zostawiano mnie w spokoju, wielu funkcjonariuszy nosiło podobne kurtki więc mogłem czasami uczyć się rozkładu korytarzy, starałem się jednak unikać pokazania mojej twarzy kamerom. Czasami wkradałem się tam w nocy, z detektorem podczerwieni, znałem więc obszar po którym mogłem bezpiecznie się poruszać. Czasami stałem przy lustrze, udając że obserwuję swoją twarz.
Chyba mniej więcej w tym czasie nad miastem zaczęły pojawiac się hologramy, z początku chyba nikt po prostu nie zwrócił na nie uwagi, wyglądały jak zwykłe ekrany diodowe, nie odróżniały się niczym od reklam coca-coli widocznych na starych pocztówkach z trafalgar square, zaskakiwało co prawda jak udało się powiesić je na masztach, już uginających się od anten, ale dziś istnienie ultralekkich technologii wyświetlania było w zasadzie koniecznością, a że kogoś pomimo konfliktu stać było na dalsze powiększanie łuny - cóż, odkąd emiraty zaczęły nieoficjalnie przejmować drobny handel w Mieście, różne kaskaderstwa w wykonaniu węża konsumpcji próbowano uskuteczniać na mieszkańcach Miasta, którzy utrzymywali byli dzięki niemu w błogim przeświadczeniu, że nic zlego się nie dzieje.
Potem pamiętam że wzdłuż muru pędził konwój samochodów terenowych, plus kilka opancerzonych wozów piechoty. Wojsko regularnie oczyszczało drogę wzdłuż podmurza z żebraków i handlarzy, spychając ich do nas, w dół rzeki, właśnie dlatego że od czasu do czasu kanał ten musiał byc uzywany do transportu ciężkiego opancerzenia. Spojrzałem w dół rzeki i zauwazyłem duży pośpiech barek, wszystkie jednak próbowały odpychać sie jednak swoimi napędami na zachód, w górę rzeki.
Spojrzałem jeszcze raz na drogę, konwój nie kończył się jeszcze wiele minut, nie był wyjątkowo długi ale zawierał także wozy zaopatrzeniowe a wreszcie na końcu wozy oznaczone jako karetki, była to więc formacja która nie spodziewała się rychłego powrotu do bazy, spodziewali się zginąć, coś większego musiało się więc dziać.
Postanowiłem nie ryzykować zostawania przy rzece, konwój handlowy z jakiegoś powodu zawrócił, więc możliwe że stanie się tam niedługo nieprzyjemnie, zerwałem więc swój hamak i przeniosłem się na tą noc na jeden z dachów opuszczonych magazynów, było tam już kilku mieszkańców, znałem ich z widzenia, ale nigdy nie rozmawialiśmy, tak było bezpieczniej. Bez słowa rozłożyłem śpiwór i nasłuchiwałem odgłosów miasta, ale miasto było spokojne, trwał mecz, a może transmisja koncertu, w każdym razie stopniowo, szybciej niż nadszedłby świt, miasto zaczęło stawać się dziwnie jasne, jakby wszystkie szklane powierzchnie odbijały jakieś fajerwerki.
Wystawiłem głowę nad legowisko ale miasto wyglądało prawie normalnie, przynajmniej na pierwszy rzut oka. Stopniowo jednak zauważyłem całą bateria wieżowców, dość daleko, parę kilometrów od mojej pozycji płonie.
Przetarłem oczy ze zdumienia ale obraz wijących się płomieni, eksplozji wybuchów kolejnych pięter, w hiperrealizmie, niczym z hollywoodzkiego filmu wywołuje u kolejnych ludzi atak paniki, zostaliśmy zaatakowani, ewentualnie mógł mieć meijsce atak terrorystyczny, z punktu widzenia nomada konsekwencje są w zasadzie takie same. Jeszcze większa presja wojska, jeszcze ciaśniejsze kontrole.
W mieście zaczęły rozlegać się syreny, nikt jeszcze nie krzyczał z przerażenia, nikt blisko jeszcze nie wił się od poparzeń, na pewno nie była to więc technologia termonuklearna, telefon także wydawał się dalej mieć internet, więc nie był to atak jonizujący, ale powoli całe miasto zaczynało stawać w płomieniach, i pierwsze krzyki przerażenia słychać już było z pobliskich balkonów.
Czekałem co będzie dalej bo wyglądało to bardziej na marketing stunt producenta gaśnic, albo nieśmieszny żart hakerów z bogatej dzielnicy, niż faktyczny kataklizm, wszystko wydawało się być nienaruszone.
Nagle rozbłysły chmury, najpierw było tylko światło, pare sekund bieli która błyskawicznie sfocusowała laserowe projekcje na jednolity grid, niczym wielki obraz kontrolny focusując się na optymalnej głębokości gęstych chmur. Obraz zgasł, a następnie zapłonął na sekundę ogromnym, zajmującym całe niebo obrazem kontrolnym, którego odbicia widać było we wszystkich okolicznych oknach. Atak holograficzny pomyślałem, starając się nie patrzeć w rozszarpujący świadomość na drobne kawałki miks, wyświetlany na pewno na wszystkich odbierających publiczny internet wyświetlaczach, przez godzinę czułem odruch wymiotny po fragmencie który dostrzegłem kątem oka odbity od szyby toalety. Potem wszystko zgasło, był wyjątkowo słoneczny dzień, dzięki czemu udało się rozmontować montowany na pewno przez kilka miesięcy system projektorów laserowych, dzięki którym chmury zapłonęły, ale nigdy nie udało się wprowadzić poprawek firmware łatajacych dziury w wyświetlaczach, Miasto nie odzyskało już nigdy swojego wczorajszego poziomu beztroski.
Następnego dnia w toalecie komisariatu był lekko powiększony ruch, dwóch grubasów oddawało swoje odchody, oraz co gorsza, na korytarzu mignął mi mundur polowy służb specjalnych, ale poza nerwowym trzaskaniem drzwiami w zasadzie panował spokój.
Jadłem batona udając oddającego kał w toalecie, kiedy usłyszałem nerwowe krzyki, wojsko zajęło korytarz szybko wypychając gliniarzy do ich gabinetów, nie mogli tego widzieć, zresztą nikt się nie opierał, widocznie znali tą procedurę. Podwinąłem nogi zanim wyraźnie spieszący się żołnierz zerknął tylko schylając się po toaletach szukając nóg, a nie widząc moich uznał że jest pusta i pobiegł dalej. Po chwili rozmów przez radio usłyszałem znajomy odgłos, często dochodził z windy, przypominał otwieranie śluzy pneumatycznej.
Tym razem było jednak trochę inaczej, po kolei otwierały się kolejne śluzy, a drzwi windy pozostawały otwarte. Wojskowi opuścili korytarz, a sześciu dryblasów w cywilnych ciuchach przeciągnęło przez korytarz coś czemu nie mogłem się przyjrzeć, było mniej więcej gabarytów człowieka ale musiał to być albo egzoszkielet albo coś tego typu bo sześciu kolesiom niesienie tego sprawiało dużą trudność. Miałem też wrażenie że słyszałem brzdęk metalu gdy ta rzecz przekraczała próg windy i znikała w czeluściach tajemnego przejścia, prowadzącego do ukrytej części budynku.
Do korytarza ktoś wszedł więc udałem że sikam do pisuaru, koleś poszedł najpierw do damskiego a potem speszony stanął nieopodal,
- Pierwszy dzień? Spytałem żartobliwie
-Pierwszy dzień to nie są ćwiczenia - odpowiedział wyraźnie spięty
Ktoś do nas krzyknął z korytarza
- Dawać chłopaki, zaraz zamykamy śluzę
Tak zacząłem współpracę z służbami specjalnymi.
Potem sen urywa się, prawdopodobnie w końcu zorientowali się kim jestem, zresztą jestem bezpieczniejszy wiedząc że w moim mózgu nie ma już śladów tego czym zajmowałem się przez te lata. Na szczycie czaszki mam ślady po wszczepach, całość noszę pod odczepianą plastikową osłoną, którą pozwolono mi zachować bo goła zaślepka po implancie w tym miejscu wyglądała słabo, reszty implantu nie udało mi się niestety zachować odchodząc ze służby.
Nie macie ze soba nic wspolnego. Nie stanowicie stada. Nie lubicie podobnej muzyki, podobnych sytuacji. Nie jesteście tej samej narodowości chociaż większość z was posługuje się językiem polskim. Nie zbieram informacji na wasz temat. Nie musisz klikać że akcptujesz ciasteczka. Nie sprawdzam nawet jaką przeglądarką się posłgugujesz to nie jest istotne. Ta strona może funkcjonować bez mrugnięcia okiem że niby w ten sposób wyraziłaś zgodę na jakieś przetwarzania. Nie wyraziłaś zgody a jedyne przetwarzanie jakie ma miejsce to Ty jako parser tekstu. Czytasz, rozumiesz, po co mi informacje o perfumach których używasz która skóra ci się podoba, to jest Twoja prywatna sprawa.
Przyznaję się do grzechu, po tym jak znudzilo mi się czytanie logow Apache miałem chwilę zainstalowane google analitics, ale nie akceptuję już ich polityki w związku z czym zakończyliśmy współpracę na przykaznych termsach, dostając piętnascie lat analizy logow apache za darmo.
Stanowicie mniejszość, są zarówno kobiety jak i mężczyzni, czujecie się troche inni ale nie łączy was nic a przynajmniej nie w moim imieiu. Mijacie się niczym w mało uczęszczanej kawiarni, odkąd rozpocząłem nadawanie z jedynką z przodu mijacie się. Nieczęsto, ale raz na pare godzin jest was dwie osoby, po odwiltrowaniu ruchu generowanego przez boty. Zazwyczaj czytasz tą stronę sama. Spędzasz około 40minut, contentu jest na 300h, mijasz się z jedną osobą.
Wiem, że nie wiecie o czym mówię tak do końca więc opowiem jeszcze raz.
Na prywatnej stronie www (bo pewnie wiekszosc i tak czyta to na fejsie, dziekujemy za uwage) mam ruch kolo 14 osob dziennie. Parę osób zgląda i czyta paragraf, pare osob w tym ty czyta dalej. Po co? Cdn
Ps. Tak to oznacza że odpinam google analiticsa, papa, żegnam bez żalu, i tak tam nie zaglądałem, dajcie mi czas do pokjutrza na ogarnieie technikaliow
Dawno nie zajmowałem stanowiska w bierzących sprawach politycznych, po pierwsze dlatego że mnie tu nie było, po drugie temat uważałem za
w większości dobrze opracowany serią (na szczęście nie publikowanych) felietonów w liceum
Wczoraj miały miejsce protesty kobiet w sprawie zaostrzenia prawa do otrzymania zabiegu aborcji. Nie wypowiadałbym się nawet i dziś, ale musiałem o 19 przejechać przez gdańsk i pól kilometra przy dworcu zajęło pół godziny, więc była chwila żeby przemyśleć zagadnienie.
Lubię myśleć o Ziemi, jak o bąbelku powietrza pływającym w oceanie próżni. Płyniemy na jednej łodzi. Dryfujemy z nieznaną trajektorią przez pogranicza galaktyki. Można powiedzieć że każdy z nas budzi się na tym dziwnym statku kosmicznym, komora hibernacyjna otwiera się, wychodzisz ty, zajmuje pare lat zanim ogarniesz o co chodzi, że jesteśmy na statku na misji. (jak ktoś lubi takie scifi Pandora 2017)
Z surowcami jest jeszcze całkiem dobrze, dolne pokłady statku, tam w maszynowni, ci którzy muszą codziennie osiem godzin składać nasze telefony komórkowe i szyć ciuchy, mogą mieć na ten temat inne zdanie, ale na naszych pokładach jest spokój. Mamy czystą wodę, mamy czyste powietrzy (przynajmniej tu w Trójmieście jest spoko), mamy prąd w gniadzku, internet, samochody i tanie telefony komórkowe.
Ale jajogłowi z pokładu naukowego mówią już o tym że robi się nas powoli za dużo. Kiedyś inne gatunki dzieliły z nami niektóre pokłady, teraz tylko płodzimy zmutowane potomstwo tych gatunków żeby jeść ich jaja, teraz jesteśmy tylko my, a nasza liczba wykładniczo przyrasta. Każdego dnia stoimy w korkach dłużej, jakiś nowy człowiek zyskał uprawnienia jazdy i zapycha mi drogę swoim BMW. W końcu zasoby zaczną się kończyć. Wielu ludzi pracuje nad tym aby miało to miejsce możliwie najpóźniej.
Wprowadźmy teraz dwa dodatkowe poziomy abstrakcji, shall we?
Może nie jesteśmy promem, rakietą wystrzeloną z innej planety. Może jesteśmy bardziej jak stacja międzycywilizacyjna kosmiczna. Dla istot na różnycm poziomie dajemy możliwość zalogowania się na różnych poziomach, odbywają się równolegle, na przykład scena insektów, rozwijająca zagadnienie rozproszonych sztucznych inteligencji rozgrywa tu swoje zawody różnych dyscyplin w cyklach rocznych, dzielmy się z nimi przestrzenią bo dopóki są małe (karaluchy są z nami w stanie zerwania stosunków dyplomatycznych).
Przed wejściem na stację 'logujesz się' do skawandra, którego nie będziesz mógł/mogła opóścić aż do końca wizyty. adaptacja zajmuje parę lat, potem jeszcze obowiązkowe kursy przysposobienbia, i przez kilkadziesiąt lat możesz na naszej stacji operować. Wylogowanie następuje automatycznie z chwilą opuszczenia skafandra (lub jego uszkodzenia beyond repair). Jeżeli komuś bardzo nie podoba się stacja, może honorowo wejść do śluzy powietrznej i dać się wypchnąć poza atmosferę ochronną. Tą operację nazywamy Eutanazją.
Do śluz pukają też także nowe byty, które chciałyby rozpocząć swój cykl na stacji, dowiedzieć się jak to jest żyć, jak to jest chodzić, jak to jest robić kupę, jak to jest kochać. Sława turnusu na Ziemi rozpościera się daleko poza naszą galaktykę, chętnych nie brakuje.
Zapłodnienie to jak rodzaj otwarcia śluzy. Samica zdolna do produkcji ciała dla nowego bytu i samiec zdolny do zapewnienia mu bezpieczeństwa jednoczą się, otwierając śluzę, chętni wchodzą do programu rozpoczęcia materializacji swojej powłoki.
Problem polega na tym, że średni poziom życia w tych rejonach świata jest już wysoki. Mamy lodówki, mikrofalówki, lustrzanki, najnowsze iphony, za pomocą tych przedmiotów komunikujemy się ze sobą, ja piszę do was na swoją stronę stukając w macbooka. Nawet jeśli czasami płaczę myśląc o tym co ze sobą zrobiłem, i tak jestem w uprzywilejowanej części. Nie muszę szukać orzechów żeby przeżyć.
Oferta przyszłego życia którą może dać siedemnastolatka z patologicznej rodziny, którą zapylił jakiś pijany seba jest żadna. To dziecko będzie, będzie kolejny człowiek, ciężko powiedzieć w twarz dorosłemu człowiekowi 'fajnie jakby cię nie było', ale to nie jest zasługa porodu. To jest zasługa starań bardzo wielu ludzi po drodze którzy dzielili się tym bytem swoim jedzeniem, dawali mu ciepło, uczyli go. I teraz jest. Ale to jest rezultat pracy, a w mniejszym stopniu cud. Taki sam cud jak to że po tygodniu na śmietanie wyrośnie pleśń.
Najlepiej by było nie otwierać bez przyczyny wrót, może grażyna jednak nie powinna była dawać sebie. A może seba też by się zajął czymś pożytecznym. Ale stało się, brajanek w drodze, co teras. Brajanek może anwet mieć już ciało, z mojego punktu widzenia może mieć mózg i nogi - ale nie widzaił jeszcze świata, jeszcze nie wie co by stracił, gdybyśmy pozwolili mu skończyć w sierocińcu
I tak otwieramy znowu śluzę powietrzną, przed zakończeniem pierwszej fazy operacji dekompresji po bardzo długiej podróży. Świadomość brajanka nie dostaje wilczego biletu, jest już blisko stacji, a za pięć minut rozpoczyna się kolejne dokowanie.
Poznałem dziś ciekawego człowieka. w okolicy czwartego zdania wspomniał mimochodem że jest zazanjomoiony z treścią strony.
To są chwile kiedy to wraca, dostajesz wypłatę, z autoamtu sypią się monety. twój przekaz trafił. osoba, którą chciałeś poznać, już wie, co odpowesz na pytanie o najlepszą aplikację na iphone, oczywiście impaktor.
A przy tym jakoś trochę szerzej też, o budowaniu nadzieji, gdzieś w ciemnym świecie niepowiązanych informacji, szumu twittera fejsbuka instagrama i pierdyliona nowych modnych platform o ktorych nigdy nie słyszałem (obawiam się że przegapiłem okienko na zakładanie konta w tinderze), że cała ta produkcja dokądś trafia.
Póki jeszcze ton w miare formalny, wspomnę o pewnych również bardziej formalnych zaletach. Po pierwsze, obowiązuje mnie tu prawo prasowe, jestem wydawcą o nakładzie nie wymagającuym rejstracji, ale mogę korzystać z praw domu medialnego. mogę wydurkować sobie legitymacje reportera zambari.art.plm nadać jej numer 001 i oba będzie ważnym dokumentem w polsim prawie (osobną kwestią jest że wszystkie prawa dziennikaży są uprzejmnościowe i legitymacja tak naprawdę niewiele daje poza omijanem ochrony). Co ważniejsze. Wpisu na tej stronie nie może usunąć nikt poza mną i sądem rzeczypospolitej polskiej. ani obama (sorry, merkel), ani żydksiążka, ogólnie dopóki nie zostanie wyudany prawomocny wyrok sądu Polski który każe mi coś usunąć, mogę sobie tu publikować absolutnie wszystko na co mam ochotę (o ile nie łamię tym prawa oczywiście). jestem w procesie tracenia czwartego czy piątego z kolei konta na fejsbuku, te fasady odpadają ode mnie, nie trzymają się. czasami
to mi się najbardziej zawsze podobało w publikowaniu swojej usługi publikującej tekstym, czasami zastanawiam się jak ludzie na tą stronę trafiają obecnie. Bo tempo odwiedzin, kilkanaście osób dziennie mam tu z zasadzie stałe od początku istniani strony.
Jesteście długim ogonem, to jest ruch który umyka błędowi statystycznemu w kategoriach big data. w zasadzie was tu nie ma. nie czytaćie tego.
Jeżeli ktoś z wasz zastanawia się czy nie postawić swojej strony www. to kosztuje dużo pracy. jeżeli ma ci się znudzić po dwóch miesiącach, to lepiej nie zajmuj globalnej przestrzeni nazw swoim url (jaki to jest obecnie problem)
Ale dla tych którym się będzie chciało, z perspektywy kogoś, kto napisał sobie małego pejdża w html prawie dwadzieścia lat temu i od tego czasu tylko raz na pare miesięćy dopisuje coś nowego, to była to inwestycja bardzo udana. Jest coś magicznego w tym pisaniu listu do nieznanego adresata. Jak wielu arestatów odnajdyuwałem, poprzez co w zasadzie, ani to literacko dobre ani muzycznie, ale może jest coś w percepcji czym mogę sobie siebie się podzielić. Mogę wręcz pozwolić sobie bardziej osobiście, na chwilę, listu do Ciebie. Nie jesteś kroplą w morzu, użytkownikiem o numerze w rejonaach milionów, jesteś prawie jak ten pojedynczy foton wpadająćy przez bramkę, interferujesz sam ze sobą, w pomieszczeniu nie ma nikogo innego.
tl;dr: Nie wiem jak tu trafiacie, ale myślę że się domyślam.
2017:11:2   Synthetic Aperture Radar (SAR) // Software Defined Radio (SDR) // Phased Antenna Array
Pomysł sprowadza się do tej samej idei co doświadczenie z fizyki z pojdynczymi falami przechodzącymi przez szczelinę, formuuljąc nowe czoło fali
Jeżeli możemy opóźnić sygnał dochodzący do kolejnych 'szczelin', możemy przed światem zewnętrznym utworzyć dowolne czoło fali. Technologia tego typu jest w powszechnym użyciu w nowoczesnej technice radarowej. Mogąc otwierać i zamykać szczeliny w precyzyjnych slotach czasowych możemy nakierowywać nasz radar na bardzo konkretny punkt na powierzchni ziemi. Taki radar nie ma potrzeby wykonywania ruchów - jego ogniskowaniem zajmuje się komputer, otwierający i zamykający szczeliny w bardzo precyzyjnych ods†epach czasu. Jak bardzo precyzyjnych? Światło porusza się 300 000 000 m/s, więc jeżeli twoje anteny rozstawione są co metr, musisz pilnować czasu z dokładnością do 3 nanosekund. Jeżeli chcesz miniaturyzować układ, twoja dokładność czasowa musi być jeszcze wyższa.
Tworząc tego rodzaju 'Arraye', oprócz bardzo precyzyjnego ogniskowania, emitując falę możemy wywoływać wrażenie istnienia syntetycznego źródła promieniowania, w innym punkcie, albo po prostu emitującego równoległe fale pod pewnym kątem. Można też odbierać, wtedy kierunkowość działa nam jako filtr, bardzo mocno osłabiający wszelkie promieniowanie które NIE przyszło z zadanego kierunku. Nawet mocna fala, która przyszła z innego kierunku, jest po prostu niwelowana przez konstrukcję układu odbiornika.
A teraz, pisząc wcześniejszy wpis, żeby historia się zgadzała, kolejny cykl obrazków, nieco wcześniejsze implementacje tego samego pomysłu.
I tak by pewnie w najlepsze trwała zabawa w syntezę potężnych, potężnych sygnałów radiowych, takich mogących wzbudzić drżenie szyb kilkaset kilometrów dalej, i skutecznie odbieranych być po kilku okrążeniach planety. Wiele relacji (sam za młodu kilka słyszałem) że były przypadki że komuś metalowy ząb w czaszce zaczynał odbierać słyszalne ludzkie głosy, było spowodowanych przez próby emisji za pomocą Woodpeckera sygnałów audio. Normalnie służył on jednak jako radar zwiadowczy, emitujący puls i gromadzący odbicia, nawet spoza lini horyzontu. Było to tak zwane radiowe oko moskwy. Mówimy dalej o 1978 data pierwszego odebrania sygnału, a był on zarejestrowany praktycznie na całej planecie. W polsce, leżącej stosunkowo niedaleko trasy fali 'woodpeckera', także często zdażały się sytuacje dziwnych drżeń metalowych przedmiotów. Aby emitować tego rodzaju moc w 78 potrzebna była masa energii (dalej jest). Dlatego rosjanie wybudowali bardzo niedaleko elektrownie atomową, i wykonywali sobie za pomocą tej rozgłośni rozmaite skany różnych wydarzeń, aż któregoś dnia któryś z generałów, chcąc być może czegoś dowieść, postanowił zignorować czerwony alarm wznieciony przez inżynierów projektu. Panie generale, pobieramy za dużo mocy, reaktor zaczyna się topić. I tak oto dostaliśmy jedną z większych katastrof nuklearnych w tym rejonie ziemi. osobiście znałem w momencie wybuchu reaktora już takie tytuły jak 'spiderman' byłem więc pozytywnie naładowany myślami o tym że o to nasz gatunek znowu idzie naprzód, będziemy mutować szybciej. Tą samą myślą staram się pocieszać w sprawie fukushimy
Od dawna chodziła za mną pewna wizja. Odpowiadała ona na pytanie : dlaczego antyczne cywilizacje znajdujemy zazwyczaj przysypane, pokryte czymś, pyłem, pisakiem, gruzami, lawą. Logika nakazywałaby tu dopatrywać się jakiegoś rodzaju równoważenia, tzn że np. połowę znajdujemy zakopaną, bo nie znajdujemy tej drugiej połowy, klóra została przez ząb czasu zeszlifowana na zero. Tak też może być.
Ale załóżmy na moment że jest inaczej.
Co jeśli ziemia naprawde stopniowo rośnie, jej materii przybywa, atlandyta jest zalana nową wodą, kości dinozaurów odkrywane są na głębokościach kilkudziesięciu metrów, dominuje wrażenie jakby ziemia jednak akumulowała materię.
INTRODUCING: PROMIENIOWANIE KOSMICZNE
Na wstępnie chciałbym zaznaczyć ze kwantówki nie ogarniam, i że będę upraszczał i opowiadał domysły, prosżę o korektę gdyby były rażące różnice ze stanem faktycznym.
Nie zastanawiałem się nigdy specjalnie nad tym czym jest 'promieniowanie kosmiczne', zawsze mi się wydawało że chodzi tu po prostu o promieniowanie elekromagnetyczne tła, emisje pulsarów, eksplozje supernowych i tak dalej.
Niedawno, przypadkiem, trafiłem na termin 'cosmic shower'
Mówiono nam, że spadające gwiazdy to zawsze ciężka materia, odłamki komet, spalająće się w atmoswezre. Ale część z tych błysków to promieniowanie czerniekowa, błysk światła związany z tymczasową emisją promieniowania 'radioaktywnego',
Shower3_html_m2d3be517.png2wbmp(string pngname, string wbmpname, int d_height, int d_width, int threshold)
)
Ten wpis będzie o tym, dlaczego warto zacząć używać GITa, nawet jeśli nie zamierzamy nigdzie publikować kodu.
Jeżeli napisałeś/aś kiedykolwiek kod dłuższy niż dwie strony, to na pewno był taki moment, kiedy teraz nie działa, chociaż wiesz na pewno, że wczoraj działało. Coś się zepsuło, i trzeba szukać co. Czasami prosciej niż cofać mozolnie wszystkie zmiany które się ostatnio zrobiło, jest cofnąć się do backupu, i napisać jeszcze raz to co się chciało - warunkiem skuteczności takiej operacji jest istnienie odpowiedniego backupu. Bardzo długo procedura polegała u mnie na semi-regularnym wykonywaniu paczki .ZIP z aktualnym projektem, jednak wymaga to po pierwsze systematyczności, a po drugie może mieć katastrofalne skutki - trzeba uważać żeby zrobić snapshot zapsutgo projektu na wypadek gdyby okaząło się że backup był jednak starszy niż myśleliśmy, i że właśnie nadpisaliśmy sboie ostatnie dwa dni pracy. been there one that. a ile razy okazywało się że ZIP zawieał jednak nie wczorajszą, jak myślalem wersję, a zeszłotygodniową, i kończylo sie na mozolnym, manualnym, wycofywaniu się z błędnych zmian.
A jednak, jak pewnie wielu z was, długo myślałem że ZIPY są ok, a git nie jest mi po prostu potrzebny, ze to overkill z którego muszą korzystać tylko duże zespoły, aby zarządzać zmianami wprowadzanymi w wielu miejscach jednocześnie. Miałem tu o rację o tyle, że starsze systemy Version Control (jak SVN czy SubVersion) są w przy większych projektach absolutną koniecznością, bez nich w zasadzie umierasz w bloku startowym, ale jednak wymagają one każdorazowo utworzenia gdzieś na serwerze repozytorium, i faktycznie do jakichś szkicy w processingu czy arduino czas zakładania repo SVN powoduje pewien overhead. Ale GIT reprezentuje tu nieco inną filozofię, i odkąd nieco go poznałem (zaznaczam że nieco, bo moja znajomość go jest napawdę dalej bardzo niewielka) to w zasadzie każda rzecz nad którą zamierzam pracować dłużej niż jeden wieczór dostaje u mnie repozytorium. Słyszałem głosy chwalące gita w zasadzie odkąd szturmem przejął monopol kontroli wersji w świecie open source. Bardzo długo jednak moja prywatna kontrola wersji polegała na wykonaniu co jakiś czas paczki .ZIP
Ale zacznimjmy od wyjaśnienia czym git różni się od 'klasycznych' systemów wersjonowania, i dlaczego była to taka rewolucja. W klasycznym version control istnieje centralny punkt, serwer, który zawiera repozytorium, zaczynasz pracę od check-outu aktualnej, usalonej wersji kodu, wprowadzasz swoje zmiany, a pod koniec dnia robisz ich check-in, wpisujesz je do rejestru zmian, tak aby w razie popełnienia błędu (które są jak wiemy nieuniknioną codziennością, całe to programowanie jest waleniem głową w mur własnej słabości), móc dojść do tego gdzie błąd został popełniony (i ewentualnie zwolnić winnego), oraz przywrócic ostatni stabilny stan - naprawienie błędu popełnionego dzisiaj jest znacznie prostsze niż odkrycie że powstał on gdzieś na przestrzeni ostatniego miesiąca.
Git jest inny w tym, że nie istnieje żaden centralny punkt. To znaczy tak, projekt przy którym pracuje więcej osób oczywiście musi posiadać jakieś umówione 'miejsce zbiórki', gdzie nasze wysiłki łączą się (dokonujemy merge), ale GIT jest systemem rozproszonym, w którym poza umownym wskazaniem tego głównego w ramach zespołu, możemy mówić bardziej o chmurze repozytoriów (dlatego nazywa się go systemem rozproszonym) niż o drzewie z ustaloną strukturą. W gicie bo moje loklane repozytorium (a wszystkie commity idą najpierw do mojego lokalnego repo, w zasadzie nie ma tu commitów do remote, jest lokalny commit a potem push który rozprowadza zmianę) ma w nim równe prawa co repozytorium autora.
Oczywiście GIT nie zabrania ustawienia sobie tego wszystkiego jako struktura drzewiasta, ale sieć ta może przebiegać w bardzo różnych kierunkach (można robić push do kilku źródeł, origins, do różnych branchy, w zasdzie z tej dowolności w tym 'co dalej' wynika to że gita trzeba się nieco nauczyć żeby robić coś więcej. Ale nie ma obowiązku robienia nic więcej.
Piękno gita polega bowiem na tym, że żaden, ani jeden serwer nie jest konieczny. W momencie wskazania gitowi nowego katalogu, i wykonanie komendy inicjalizacji, git zakłada tam nowe, pełnoprawne repozytorium, i rozpoczyna śledzenie zmian. I w tym momencie już zaczynają się benefity. Nie muszę być online, nie musze informować kogokolwiek co robię, żeby czepać profity z sieci bezpieczeństwa jaką daje nowoczesny system version control. Git jest fantatycznie wydajny, i jego obecność nawet tam gdzie masz doczyeninai z tysiącami plików, nie powoduje żadnego obicążenia dla twojej maszyny (analiza zmian ma miejsce tylko na etapie Stagigng). Jedynym kosztem używania go do wszystkiego jest konieczność uruchomienia na chwilę swojego ulubionego klienta w danym katalogu i wydanie komendy Init, nie musisz nigdzie zakładać żądnych kont - tylko BAM i masz repozytorium.
klientów gita jest co niemiara, dla każdego coś miłego. Oczywiście dla hardkorów zawsze będzie wersja command-line, czyli jedyny prawdziwy git, jedna metoda na wykonanie najbardziej rzeźnickich salt wymagających wizard-class skilli, ale istnieje wiele uproszczonych (i dzięki temu przystępnych) narzędzi takich jak SoucrceTree, GitHub Desktop, czy mój prywatny faworyt, Git Kraken.
Wystarczy spojzeć na interfejs krakena, żeby domyśleć się co w nim się podoba. Jest ładny. JEST CZARNY. Żeby oceniać go od strony technicznej nie mam jeszcze dość wiedzy, ale używam go od paru miesięcy i w zasdzie jedyne do czego mogę się przyczepić to że nie sygnalizuje on że trwa tzw Fetch, czyli odpytanie naszego repozytorium nadrzędnego o zmiany - czasami trwa to nawet minutę, podczas której myślimy że jesteśmy na szczycie, a kraken do piero po chwili wyświela historię nowych zmian. Ale dobrze, starczy tego wprowadzenia, czas na to co tygrysy lubią najbardziej.
DEMONSTRACJA:
Załóżmy że mam projekt, nad ktorym chce pracować w katalogu c:\MojProjekt. Tworzę ten katalog, uruchamiam krakena, i proszę o utworzenie (inicjalizację) tam nowego repo
Bam, repozytorium utworzone, właśnie utworzyłeś repozytorium kodu. Oczywiście na razie nic tam nie ma (poza ukrytym katalogiem .git gdzie pracujący w tle demon gromadzi notatki na temat tego co robisz), i nowo utworzonym plikiem README.MD, ale sytuacja szybko się zmieni gdy dodamy tam pierwszy plik. Trzymanie w katalogu głownym repozytorium pliku readme.md nie jest obowiązkowe, ale jest dobrym zwyczajem - w dobrym tonie jest umieścić tam krótki opis zawartości. pliki. MD to zwykłe pliki tekstowe, korzystające z bardzo prostej składni formatowania zwanej MarkDown, ale nie będziemy się tym zajmować. Zacznjmy od wywalenia pliku readme i dodania pliku test.txt, o dowolnej treści
Gdy przełączymy się z powrotem na krakena, zauważamy, że pojawiła się nowa linijka, zawierająca tekst '//WIP' i dwie małe ikonki. WIP oznacza Work in progress, czyli nowe zmiany w projekcie, zielona ikonka to uwtorzenie nowego pliku, a czerwona to usunięcie istniejącego.
Po kliknięciu na to pole, dosajemy krakenowską interpretacje tzw. staging area - jest to lista wszystkich zmian jakie zostały dokonane od ostateniego Commita (o tym ze sekundę). Możemy wybrać albo wszystie, albo tylko niektóre ze zmian, i zmienić ich status z Unstaged na Staged. Przejdą one do pola Staged files, jest to peron z którego odjeżdzają commity, rodzaj poczekalni gdzie możemy zgromadzić naszą 'drużynę' która zabierze się następnym commitem do wieczności. Poniżej zanjduje się pole do wpisania tzw Commit Message, czyli obowiązkowego, krótkiego opisu tego co się zmieniło. Oczywisćie gitowi opis jest wszystko jedno, i jak chcesz możesz tam wstawić tylko np. spację, ale za to że musisz wpisać COŚ dość szybko będziesz gitowi wdzięczny, dzięki temu jako człowiek masz szansę orientacji w historii projektu.
W momencie gdy wcisnę przycisk commit, zmiany zostają zespolone przez GIT do obiektu nazywanego Commitem. Commit to snapshot całego projektu, a nie tylko plików które uległy zmianie - to dosyć istotny niuans, bo git nie pozwala prosto wyciągać z commitów pojedynczych plików - aby nie dopuścić do istnienia rozsynchronizowanych stanów - przywracając później stan z danego commita, przywrócimy stan wszystkich plików, które w danym momencie były już trackowane (tzn były STAGED przyanjmniej raz). Ale idzmy dalej, dodajmy drugi plik tekstowy. Załóżmy że popełniem w nim błąd, z którego zdałem sobię sprawę po wykonaniu drugiego commita. Poprawiłem błąd, co dzieje się dalej?
W krakenie nasza historia commitów wygląda póki co tak
.
Po zaznaczeniu commita możemy podejrzeć zmiany - na czwrono są linijki usunięte, na zielono dopisane - zmiany traktuje się jako usuniecie poprzedniej i dodanie w to miejsce innej linijki.
I teraz tak - piewotnie chciałem ten tekst mniej więcej tutaj skończyć - mój projekt jest już bowiem trackowany, jeżęli będę pamiętał o commitach od czasu do czasu, to korzystam już z najważniejszego dobrodzeijstwa GITA - wszystkie pliki i katalogi znajdujące się wewnątrz repozytorium są od tej pory bezpieczne - gdy popełnie błąd, jestem w stanie znacznie prosciej niż za pomocą sterty paczek z zipami, namierzyć miejsce gdzie powstał, porównać z poprzednią wersją, czy wykonać naniesienie zmian wykonanych przedwczoraj na te wykonane przed chwilą.
No ale dobrze, co stanie się teraz gdy stwierdzę, że mój wierszyk jednak lepiej brzmiał z błędem, rozmyśliłem się. Kraken ma wielkie jak byk przyciski undo i redo, pozwalające na szybkie podróżowanie po historii projektu, ale załóżmy że wacham się dalej, być może będę chciał rozwijać obydwie wersję. klikam więc prawym klawiszem na wybranym commicie, i tworzę tam nowego brancha.
Jest to sytuacja o tyle komforowa, że obydwa stany projektu współistnieją sobie, a korzystając z listy dosępnych branchy po prawej, mogę przerzucać się pomiędzy nimi - trwa to ułamek sekundy dla lokalnych branchy blisko siebie, ale nawet jeśli zmodyfikowałem kilkaset plików, nie powinno trwać więej niż kilka sekund - i wszystkie pliki w moim katalogu roboczym będą wyglądać dokładnie tak samo jak w momencie ostatniego commita danego brancha. Postanowiłem porozwijać chwilę obie wersje mojego wiersza, w jednym dodająć linijkę o papudze, a w drugim idąć radykalnie w błędy ortograficzne i robiąc kolejne dwa. stan widoczny przez okno krakena wygląda mniej więcej tak
W typowej konwencji pion oznacza chronologię, widać tu ciekawą sytuację - jestem na branchu master, tym bez błędu, ale commit na branchu KUT został wykoany później, więc git daje mi do zrozumienia że wersja nad którą pracuje może nie być najbardziej aktualną. oczywiście w tym wypadku nie ma to znaczenia
Ok, i teraz zaczyna dopiero robić się ciekawie. Pomimo tego, że readme nie istniało już na moim dysku od pięciu commitów, plik był już dawno w koszu, ale świadomie omijałem go podczas fazy stage - akcja polegająca na usunięciu pliku nie była wpuszczana na peron. I teraz, gdy mamy już dwie rozdzielne historie projektu, postanowiłem zatwierdzić usunięcie w commicie wykonanym na branchu master (powiedzmy że poprawny wiersz nie wymaga komentarza), przerzuciłem się na branch eksperymentalny KUT, i zamiast przeprowadzać stage tej zmiany, zrobiłem jej reset. Plik został przywrócony - zmiana nie była bowiem w tym branchu jeszcze scommitowana. Dopisałem więc linijkę komentarza o idei artystycznej przyświecającej pisaniu tekstu z błędami, i scommitowałem tą zmianę w readme. Sytuacja jaką mamy teraz jest prawie magiczna - gdy dwuklikam na brancha kod, plik readme.md pojawia się w katalogu, po czym znika gdy przerzucam się na brancha master. Jest to samo w sobie pewnego rodzaju cudem -zmiany odbywają się bowiem fizycznie na moim dysku - program w którym edytuje pliki tekstowe i git nie wiedzą o swoim istnieniu absolutnie nic, ale mimo to cały projekt automagicznie przeskakuje do innego stanu. To jednak nie koniec cudów.
Załóżmy że kiedyś, w dalekiej przyszłośći, gdy obie wersje mają już po wiele stron, postanowię skleić je z powrotem w jeden projekt, czyli wykonać tak zwany merge. W sytuacjach gdy w różnych branchach pracowałem nad różnymi plikami, merge przebiega automatycznie - git weźmie nowsze wersje każdego pliku i sprawa jest załatwiona - tu jednak istnieje konflikt - w jednej wersji doszła linijka, w drugiej treść pozostałych uległa zmianie - git nie jest pewien o co dokładnie mi chodzi, ale mergowanie branchy jest w zasdzie jednym momentem że coś może pójść nie tak - git po wykryciu konfliktu wchodzi z projektem w tzw conflicted state -
Po otwarciu konfliktu możemy (a nawet musimy zanim przejdziemy dalej) przejść przez wszystkie skonfikotowane pliki i wskazać rozwiązanie które mnie interesuje. Taki widok dostajemy po wybraniu pliku readme.md - w jednym branchu plik został dawno skasowany, a w drugim został zmodyfikowany. git daje mi więc trzy opcje - może plik skasować, zostawić zmodyfikowany, albo przywrócić ostatnią wspólną (w tym wypadku bazową) wersję, a więc nie tylko cofnie modyfikacje, ale też przywróci wersję dawno skasowaną, którą zawierał wyłącznie pierwszy, automatyczny commit tego repozytorium. Postanawiam zapisac zmodyfikowana wersje
Nieco bardziej skomplikowana sytuacja jest w pliku ala. Dopóki konflikty nie zostaną rozwiązaneW tym stanie pliki gdzie wystąpił konflikt nie nadają się do użycia - zawierają bowiem linijki z obydwu wersji. Kraken (niestety tylko w wersji pro) pozwala mi przejść przez konflikty, i wybrać wersję z dwóch commitów które próbuję mergować przy każdej linijce. Być może wolę zatrzymać błąd tylko w pierwszej linijce, a w drugiej przywrócić wersję bez błędu
Jeszcze więcej możliwości daje nam użycie zewnętrznego narzędzia do mergowania, np. potężnego choć brzydkeigo jak noc KDIFF, który wyciąga z repozytorium nie tylko wersje z mergowanych commitów ale także wersję bazową, pozwalając kształtować ostateczny kształt wynikowego pliku z jeszcze większą precyzją.
Po wykonaniu merge na naszym wykresie widzimy po raz pierwszy jeden z przyjemniejszych widoków jakie ogląda programista na swoim ekranie - dwie odrębne gałęzie projektu z powrotem sklejone w jedną doskonalszą całość. Rezutlaty merge trzeba oczywiście jeszcze scommitować (tzn utworzyć nowego commita zawieającego snapshot po merge, bo nie wolno nam modyfikowac już istniejących commitów - nie ma takiej operacji - wolno zmienić commit message, ale ponieważ na istnieniu danego commita mogą już polegać kolejne operacja, zwłaszcza jeżeli zmiany zostały pushniete to zmiany commitów wstecz w historii nie są zasadniczo mozliwe (chyba że mamy już wizard level i nie boimy się zagrzebać w wariacjach commandlinowego, surowego gita))
I teraz, robię sobie ten przykład na jednym komputerze, pracując na dwóch lokalnych branchach, ale częstszym use case są różni ludzie pracujący na różnych branchach - i wtedy możliwa jest sytuacja, w której ja siedzę dalej na swoim branchu KUT, jeszcze lśniącym połyskiem dopiero co odbytego merge, ale w tym czasie ktoś zmodyfikował brancha master, i teraz zawiera on zmianę której w moim branchu nie ma (i brardzo dobrze, bo mogłaby ona coś psuć w strukturze mojego projektu). taki stan widzimy mniej więcej tak
Tym razem jednak, ponieważ zmiana dotyczyła pliku który na branchu KUT nie był modyfikowany, merge przebieg całkowicie automatycznie - brach master ma od tej pory zestaw zmian wykonanych na nim, wraz ze zmianami których doknałem podczas merge na branchu KUT, który w tej chwili jednak pozostaje do tyłu względem HEAD, tzn nie zawiera nowych zmian. Na tym etapię mogę uznać, że branch KUT nie jest mi już potrzebny, ponieważ master zawiera wsystkie zmiany których chciałem, i po prostu go usunąć (przejść na stałe na branch master)
Mogę także, jeśli chcę, zmergować zmiany z brancha master do brancha KUT (i wprowadzić dalsze zmiany, np. zmienić alę na janka), i będzie to wyglądać tak:
I tak dalej, i tak dalej, taki mniej więcej jest rytm GITa. Dlaczego commity uciekają sobie do góry i muszą się gonić? Aby to zrozumieć wystarczy odejść od mojej hipotetycznej sytuacji. W tej chwili pracowałem tylko i wyłącznie na lokalnym repozytorium, przez cały czas pisania tego tekstu nie wysłałem w sieć ani jedneo pakietu. Przy pisaniu czegoś w parę osób, z repozytorium dostępnym online, do całej zabawy dochodzą jeszcze dwie operacje - PULL i PUSH. Push, prawdopodobnie najważniejsza operacja w ramach GIT, powoduje wypchnięcie twojego ostatniego comita do repozytorium ustawionego jako twój ORIGIN - można traktowąć to jako repozytorium nadrzędne, choć nie będzie to do końca słuszna metafora, w każdym razie w momencie wykonania pusha (o ile masz do niego prawa zapisu) twoje lokalne commity stają się częśćią stanu danego brancha w zewnętrznym repozytorium (REMOTE). Zanim jednak git pozwoli ci na pusha, musi upewnić się że stan danego brancha nie uległ w międzyczasie zmianie - jeżeli tak, to musisz wykonać najpierw operację PULL, tzn pobrać z serwera comitty innych ludzi które stały się od tego czasu 'oficjalne'. Jeżeli stefan w międzyczasie zmienił psa na hipototama, i jego push znalazł się na serwerze wcześniej, to nie mogę tego po prostu zignorować (tzn mogę, robiąć Force Push, ale może mieć to negatywne konsekwencje dla innych ludzi, którzy w mieczyasie wykonali merge hipototama - ich praca zostanie wtedy utracona), unikamy więc robienia Force Push, zamiast tego najpierw wykonujemy PULLA. Pull powoduje pobranie z serwera historii commitów któe wydarzyły się odkąd ostatni raz wykonywaliśmy tą operację, i odtworzenie ich z playbacku na moim lokalnym repozytorium. Powoduje to zmianę stanów moich lokalnych plików. Jeżeli żaden z tych plików nie był modyfikowany przeze mnie, pliki te znajdą się po prostu w Unstaged, mogę je zignorować i wypchnąć moje zmiany, jeżeli jednak zmiany które są już na REMOTE są w konflikcje z tymi które zrobiłem ja, mam do wyboru albo przeprowadzić merge w ramach swojego lokalnego repozytorium, albo jeżeli nie chcę tego robić, utworzenie nowego brancha (który będzie moim lokalnym stanem, ale przestanie synchronizować się ze zmianami w innych branchach.
Jeżeli kiedykolwiek pobieraliscie cokolwiek z GitHuba, a na pewno tak, to z pewnością zauważyliscie że oprócz DOWNLOAD jest tam przycisk CLONE. To w zasadzie esencja popularności gita - mogę pobwiem sklonować repozytorium z REMOTE (w tym wypadku z githuba), dokonać lokalnych zmian, i jeżęli uważam że zmiany te poprawiają projekt, mogę zrobić ze swoim repo mniej więcej trzy podstawowe czynności - jeżeli mam uprawnienia zapisu do danego REPO, mogę je po prostu tam wysłać, za pomocą operacji PUSH. Jeżeli nie, mogę zrobić tak zwany pull request, tzn wysłać zmiany autorowi jako propozycje - jeżeli sposobają się autorowi, może on wykonać merge do swojej wersji (co dla niego jest znacznie prostsze niż przeklejanie fragmentów poprawek wysłanych mailem). Jeżeli autor nie chcę pullować moich zmian, albo jeżeli chcę ten projekt pociągnąc z zupełnie inną stronę, wystarczy że zmienie adres origin na inny, nowy, tworząc w ten sposób tak zwanego FORKA, i mam nowe, niezależne od poprzedniego repozytorium, do któego już sam przyznaje uprawnienia zapisu, rozważam pull requesty itp. Jeżeli chcę zrobić swoją wersję jakiegoś projektu - czy będzie to mikroskopijny GITST mrugający ledem zawierajacy pojedynczy commit, czy cały np dotnet/corefx który zawiera w tym momencie ponad 24k commitów, o ile licencja na to pozwala mogę takie repo sklonować, puschnąć gdzie indziej i mieć swoejgo forka jako anonimowy typek z polski, na równych prawach z wielkimi korporacjami. Jest to ekstremalnie demokratyczna idea, prawie że uskrzydaljąca.
Okej, poszedłem z tym tekstem dużo dalej niż chciałem (nie pierwszy raz), tak naprawdę chciałem poukładać sobie sam to wszystko w głowie podczas pisania, ale jeżeli dotarłeś do końca to widocznie dostrzegasz w tym dla siebie pewien pożytek. Najważniejszym takeawayem z zabawy jest to, że stan w którym robsiz COMMIT wchodzi do gitowej zamrażarki, i już zawsze możesz do niego wrócić - nie jest to pełna kopia projektu a jedynie snapchot zmian, polegający na poprzednich snapshotach (dlatego nie wolno ich modyfikować), dzięki czemu nawet dla dużych projektów GIT nie zwiększa znacząco objętości projektu, lokalne commity są bardzo tanią operacją, i w zasadzie możesz je robić po napisaniu dowolnie małego fragmentu kodu - a potem podróżować po historii projektu jak tylko jest ci wygodnie, szukajać miejsca gdzie cos przestało, albo zaczęło działać, czego sobie i wam życzę.
Unreal raczył mi wysłać BWNa, bardzo ważną wiadomość, pojawiło się okienko z notyfikacjami, ale oprócz stada błędów z buildowaniem świateł pokazało się (1) przy
Localisation services. Pomyślałem, w sumie ciekawe co tam jest.
Tak, dziękuję bardzo, wiem że nie ma w tym projekcie lokalizacji, nie pada żadne słowo nawet, jest ok, chill out, Unreal, fajnie byłoby dostawać tego typu ostrzeżenia wtedy kiedy naprawdę coś się dzieje, jak na przykład inna sytuacja z dzisiaj, kiedy nastąpił crash edytora podczas applyowania baked lightmap, zakończone stanem w którym scenę główną dało się otworzyć około trzech razy zanim wchodziła w stan corrupted, crasujący edytor, i wymagała rekonstrukcji od nowa z przeniesieniem zaimportowanych obiektów na czystą scenę, zanim i ona ulegała korupcji, i tak około siedmiu razy zanim znaleźliśmy przyczynę, pomyślałem, z pewną sympatią do programistów spoglądając na ten komunikat, i rozmyślając o tym jak różne rzeczy mogą być ważne dla różny ch ludzi przy tego rodzaju projekcie.
Wtedy zwróciło moją uwagę, aż pięć (5) BWNów w sekcji Source Control. Jako że w tym projekcie source control za bardzo nie ma, mogłem się spodziewać następującego komunikatu, ale mimo wszystko wywołał na mojej twarzy uśmiech
Użytkownicy VSCode często instalują sobie (i słusznie) różne pomagiery do kodu. Jeden z nich jednak, UnitySnippets od Ycleptic Studios ma brzydką cechę, podczas zatwierdzania jego sugestii dodaje dodatkowo napoczęty blok komentarza i niezakończoną kopię deklaracji metody (np. void funkcja /*koment*/ void funkcja() { }, co potrafi być bardzo wkurzające.
Na pomoc przychodzi jednak z odsieczą Iionize ze swoją modyfikacją tego dodatku która nie ma takiego zchowania
A swoją drogą instalacja VSCode tak, aby działał w nim Omnisharp/Intelisense na nowej instalce OSX 10.9 to jakiś koszmar - nie udało mi się to dziś.
UNREAL vs Unity - kustomizacja interfejsu
Tak,
zgadza się, unreal posiada przyzwoity system snappowania okienek, jest całkiem usable.
Okej, nie TAK używalny jak Programy wideo od Adobe (AFTER EFFECTS)
W after effects możemy poprosić o dowolną ilość okien typu Viewer, dających wgląd na dowolną kompozycję - blokujemy widok małą kłudeczką - niezablokowane zmieniają się kontekstowo.
Unity, ku mojej wielkiej uciesze, kustomizuje się jeszcze o wiele bardziej. Nie tylko można mieć tam dowolną ilosć Inspektorów (odpowiednik Effect Control z AE), ale także dowlną ilość okien Project (super, w AE brakowało mi tego okrutnie), dowolną ilość okien hierarchii (chociaż niestey nie działają zupełnie rozdzielnie). Do tego, co jest jedną z największych zalet edytora Unity - nie jesteśmy ograniczeni do rzeczy z którymi przychodzi program. Dodanie nowego okna czy nowej pozycji w głównym Menu jest równie proste jak napisanie Hello World; - po prostu przed funkcją którą chcemy z menu wywołać dodajemy dekorator. [MenuItem("MyMenu/Do Something")]
To w zasadzie temat na cały wpis, i mam nadzieję ze kiedyś taki powstanie, tu chciałem jeszcze na chwilę wrócić do Unreala
Jak widać, w unreal snapowanie okienek działa mniej więcej tak jak byśmy oczekiwali,
okienek można mieć kilka (cztery viewporty z których każdy dzieli się jeszcze na cztery
wystarczają, cztery okienka Details wystarczjaą też.
Jednakże, niektórych okien po prostu nie można mieć kolejnych. Za to winnych miejscach nie da się otworzyć pewnych rzeczy (edytor materiałów, edytor blueprintów, edytor animacji) BEZ otwierania kolejnego okna, bez względu na preferencje które sobie ustawiliśmy.
Sama sekcja z ładowaniem layoutów jest komicznie różna - unreal ma piękne ikonki przy
połowie featuresów, ale layout zapiusje po prostu jako preferencja do pliku .INI gdzieś
u siebie w Program Files. Reset spowoduje ... no właśnie, co, reset moich do domyślnych,
czy reset aktualnych do moich? Na Unreal Market można kupić plugina do zarządzania plikami
INI który umożliwia przeładowywanie innych layoutów (choć chyba z restartem edytora). Dla
porównania na screenshocie z unity widać jak ładnie zintegrowały się pozycje dodane
przez pluginy (MidiJack, ConsoleE, UI Extensions) - są nie do odróżnienia od funkcjnalności
natywnej. W unnity jeżeli masz do zrobienia jedną rzecz więcej niż 10 razy na przestrzeni
paru dni to warto rozważyć napisanie małego throwaway scriptu uruchamianego z menu, który
robić będzie za nas dokładnie tą rzecz - przy użyciu całego API edytora i gry.