poniedziałek, września 26, 2022

GeoJSON jest fajny ;-)

Pracuję teraz dużo z danymi o położeniu geograficznym (co ciekawe w mojej pierwszej pracy też to robiłem ;-)) i czasem chciałbym móc coś pokazać na mapie... albo zobaczyć, bo np. fajnie jest zobaczyć czy wyniki dotyczące lokalizacji jakiejś rzeczy się poprawiły czy nie, a często mapa jest najlepszym rozwiązaniem.

Tak się rozglądałem za różnymi rozwiązaniami, ale jakoś wszystkie były skomplikowane.... i wtedy zobaczyłem GeoJSON'a i stronę https://geojson.io/ :-)

Chwila czytania dokumentacji i okazało się, że można do niej przesłać treść GeoJSONa... więc wtedy już tylko pozostaje stworzenie GeoJSON'a i można się bawić ;-)

GeoJSONa można stworzyć najprościej po prostu budując go przez zserializowanie map do JSONa ;-)

Tzn. nie jest to per se najprostsza metoda, ale w moim przypadku działa dobrze ;-)

Ponieważ większość moich skryptów w pracy to Python to wystarczy napisać w Python'ie kilka metod ;-)
Kod poniżej wygeneruje URL do strony, na której pojawi się obrazek z poprzedniego wpisu.


import json
import urllib.parse

def point(lat, lon, color):
return {"type":"Feature","properties":{"marker-color": color},"geometry":{"type":"Point","coordinates":[lat,lon]}}


def line(lat, lon, lat2, lon2, color):
return {"type":"Feature","properties":{"marker-color": color},"geometry":{"type":"LineString","coordinates":[[lat,lon],[lat2,lon2]]}}

def collection(features):
return {"type": "FeatureCollection", "features": features}

def geojsone(features):
return json.dumps(collection(features))

def url(features):
encoded=urllib.parse.quote(geojsone(features))
return f"http://geojson.io/#data=data:application/json,{encoded}"

point1=point(18.707034587860107,54.68036917970927,"#f00")
point2=point(18.54937434196472,54.52091959175506,"#0f0")
line=line(18.54937434196472,54.52091959175506,18.707034587860107,54.68036917970927,"red")

print(url([point1,point2,line]))

Uruchomienie go wygeneruje link http://geojson.io/#data=data:application/json,%7B%22type%22%3A%20%22FeatureCollection%22%2C%20%22features%22%3A%20%5B%7B%22type%22%3A%20%22Feature%22%2C%20%22properties%22%3A%20%7B%22marker-color%22%3A%20%22%23f00%22%7D%2C%20%22geometry%22%3A%20%7B%22type%22%3A%20%22Point%22%2C%20%22coordinates%22%3A%20%5B18.707034587860107%2C%2054.68036917970927%5D%7D%7D%2C%20%7B%22type%22%3A%20%22Feature%22%2C%20%22properties%22%3A%20%7B%22marker-color%22%3A%20%22%230f0%22%7D%2C%20%22geometry%22%3A%20%7B%22type%22%3A%20%22Point%22%2C%20%22coordinates%22%3A%20%5B18.54937434196472%2C%2054.52091959175506%5D%7D%7D%2C%20%7B%22type%22%3A%20%22Feature%22%2C%20%22properties%22%3A%20%7B%22marker-color%22%3A%20%22red%22%7D%2C%20%22geometry%22%3A%20%7B%22type%22%3A%20%22LineString%22%2C%20%22coordinates%22%3A%20%5B%5B18.54937434196472%2C%2054.52091959175506%5D%2C%20%5B18.707034587860107%2C%2054.68036917970927%5D%5D%7D%7D%5D%7D
Specjalnie go całego wklejam ;-) bo po prostu cały tekst GeoJSONa jest tutaj zakodowany jako parametr w URLu ;-)
Oryginalny GeoJSNO wygląda mniej więcej tak:

{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"marker-color": "#f00"
},
"geometry": {
"type": "Point",
"coordinates": [
18.707034587860107,
54.68036917970927
]
}
},
{
"type": "Feature",
"properties": {
"marker-color": "#0f0"
},
"geometry": {
"type": "Point",
"coordinates": [
18.54937434196472,
54.52091959175506
]
}
},
{
"type": "Feature",
"properties": {
"marker-color": "red"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
18.54937434196472,
54.52091959175506
],
[
18.707034587860107,
54.68036917970927
]
]
}
}
]
}
Ogólnie cały ten GeoJSNO mocno się przydaje, szczególnie to, że łatwo go generować z kodu ;p


Podobne postybeta
VRML
Moja własna akcja w Google Home ;-)
Go dla Java'owca ;-) odcinek 1 "klasy"
Swing - największe zło Java'y ;-)
Najkrótsza droga do przyszłości - Polymer ;-)

niedziela, września 25, 2022

Chyba wiem czemu widzę Gdynie z Juraty ;-)

Będąc w Juracie widuję Gdynię i stojący tam Sea Towers.
No i jest problem ;-) 
Horyzont powinien być jakieś 4.7-8* km ode mnie, a Sea Towers w Gdyni jest 20.35 km od czubka mola w Juracie (wg Google Maps). 

Czerwone to czubek mola w Juracie, zielone to Sea Towers w Gdyni, a niebieskie to tak koło 20 km odległości ;-)

Jak więc mogę widzieć Gdynię?
Gdy tam byłem w latach 80 to nie zawsze było widać Gdynię i ogólnie mówiono, że to jest Fata Morgana.
No i teoretycznie mogłaby być, bo morze jest chłodniejsze zwykle od powietrza (w lato przynajmniej) i chłodzi powietrze nad sobą i wtedy światło zakrzywia się tak, że "sięga za horyzont". 
Ale tam czasem nawet widać Gdańsk i żurawie portu północnego, a to już ponad 30 km....

I tak się zastanawiałem i chyba wiem ;-)

Skoro ja z 1.84 m wzrostu widzę na jakieś 4.7 km, to znaczy, że jeśli coś jest 9.4 km ode mnie w linii prostej i oddziela nas jedynie horyzont to jak to coś jest wyższe niż ja to mogę to widzieć.... przynajmniej tą część która wystaje ;-)

Skoro Sea Towers jest 20.35 km ode mnie to tak pi razy oko widzieć powinienem najmniej wszystko z niej powyżej jakichś 18.5 jej wysokości ;-)
A, że tak naprawdę mój punkt obserwacji to tak naprawdę z 5 metrów (molo jest wyżej niż brzeg nad zatoką o jakieś 1.5 metra, a sam poziom wody jest też z jakieś 1.5-1.7 niżej) to powinienem widzieć wszytko wyższe niż jakieś 11.5 metra w Gdyni ;-) a że sam budynek tak lekko licząc jest jakieś 6-10 metrów nad poziomem wody... to całe 142 metry wysokości powinienem widzieć ;-)

To samo z portem północnym... chociaż tu by musiały mieć żurawie ponad 37 metrów by widzieć ich czubki, a widać duży ich kawałek... i nie zawsze je widać, stąd tutaj dodałbym jednak jeszcze Fata Morganę ;-)

Ale teraz mi się powoli fizyka zaczyna zgadzać :-)

* - Horyzont jest w odległości liczonej wg wzoru:
hDist = Math.sqrt((h+R)^2-R^2), gdzie R = 6378.137 km
Czyli przy moim wzroście powinienem widzieć mniej więcej na 4.7 km, podobnie wyjdzie z wzoru przybliżonego:
hDist = sqrt(13*h)
gdzie h jest w metrach, a hDist w km, wtedy mamy ~4.8 km, skąd mi wyszło 8 km? Z tego, że jednak molo ma swoją wysokość nad poziomem morza, dałem mu kila metrów "wysokości"



Podobne postybeta
Punkty uzależniają ;-)
Trzęsienie ziemii i poszukiwania wiosny ;-)
Mały pomocny coś macOS'a
Akcja bezpośrednia
Jak się profesjonalnie kłamie

O używaniu 3rd party API

Spotkałem ostatnio ciekawy problem i się zacząłem zastanawiać....

Jeśli tworzysz aplikację i używasz 3rd party API to czy powinno się go używać bezpośrednio z tej aplikacji czy powinno się mieć swoją warstwę między apką a API?

I tak, zawsze trzeba mieć warstwę abstrakcji i pytaniem nie jest czy z kodu biznesowego wprost wołać to API, czy jednak mieć klienta, który woła API... bo powinno się mieć to drugie ;-) [w skrócie to ułatwi testy i w razie zmian w tym API nie trzeba będzie zmieniać za dużo kodu, a tylko "klienta"]

Ale czy jak to jest aplikacja na urządzeniu (telefon, tablet, komputer, zegarek, telewizor, samochód, łódź, statek kosmiczny czy kuchenka mikrofalowa ;-)) to czy powinno się wołać cudze API wprost z urządzenia czy wołać swoje API na swoim serwerze i dopiero stamtąd wołać to 3rd party API?

No i wyszło mi, że to jest funkcja tego jak często można zrobić update apki, jak krytyczne jest to API dla działania apki i tego jaka jest stabilność tego API (w sensie tak samego API, czyli czy często się zmienia i w sensie też stabilności czyli tego jak często pada ;-)).

No bo jeśli to jest apka na telefon (czyli miejsce gdzie updaty są praktycznie natychmiastowe (chociaż w Apple nie do końca ;-)), to jest dodatkowa niekrytyczna funkcjonalność apki i samo API jest stabilne (w obu znaczeniach) to można używać wprost.

Ale im gorzej z updatami, gdy użycie API jest coraz bardziej krytyczne, gdy stabilność nie jest najwyższa to wtedy jestem za stawianiem własnego kawałka kodu, który odwala kontakty z API.

Bo zawsze można nadrobić proces updatowania zmieniając tylko bebechy naszego serwisu nie ruszając apek, zawsze łatwiej przykryć tak zmiany w samym API i w razie przerw w działaniu używać cache'a (jeśli ma sens), do tego jeszcze nie trzeba czekać na to jak ktoś zaimplementuje funkcje (coś w stylu, jeśli każde urządzenie będzie musiało zrobić dzień w dzień 100 call'i tylko po to by sobie zebrać jakąś listę bo API nie ma tej listy to dostawca API będzie zły no i to potrwa, ale jak tą listę tworzymy w taki sposób "u siebie" w serwisie i w razie czego dajemy tą listę apce to nikt się nie będzie czepiał).

Czyli swoją warstwę trzeba mieć im bardziej będzie bolał jej brak ;-) 

I co ciekawe jako ktoś kto dostarczał i dostarcza API często widziałem (i widzę ;-)), że "klienci" bardzo często chcą swoje apki doprowadzić do stanu, że to są tylko UI do cudzego API i nie widzą wad tego rozwiązania... do czasu gdy słyszą "nie" na feature request i wtedy jest panika, bo przecież im nie będzie działać.... i jeszcze bardzo często reagują zdziwieniem, a nawet oburzeniem, na propozycję "ej to zaimplementujcie sobie sami to, a jak my za 3 miesiące czy rok dodamy tą funkcjonalność to się na to przepniecie, albo będziecie nadal używać tego swojego kodu". Odpowiedzi są zwykle w stylu "ale to będziemy musieli skasować ten kod", albo "ale to nie pasuje do naszej architektury" i podobnymi, które zwykle sprowadzają się do tego, że zrobili błędne założenia i nie chcą się z nich wycofać.




Podobne postybeta
Rant po toolach w stylu Mavane, Gradle, Bowera i całej tej hałastry
Integracja
Smutno mi się zrobiło...
So many Kindles..... ;-)
Gdzie popełniliśmy błąd?

sobota, września 17, 2022

Mały pomocny coś macOS'a

Jestem nadal w Juracie, byłem tu pierwszy raz (od 30 lat ;p) w tamtym roku, wtedy podano mi hasło do WiFi.
Wpisałem je do telefonu, prywatnego laptopa, firmowego laptopa i tableta.....
Byłem tu ponownie w marcu, wtedy miałem inny telefon już, ale hasła nie musiałem podawać.
Kolejny raz w czerwcu, teraz miałem innego laptopa firmowego (choć z tej samej firmy) i hasła nie musiałem podawać, to samo z drugim tabletem.
Teraz we wrześniu mam znów innego laptopa firmowego (z innej firmy ;-)) i znów hasła nie musiałem podawać ;-)
Bo w telefonie załatwiła to synchronizacja haseł z Androida, a na laptopach i tabletach iCloud.

Nie wiem czy coś takiego jest teraz w Windows, za moich czasów tam nie było ;-)
Na Linuksie też tego nie miałem i nie mam (bo raz na jakiś czas jednak użyję Ubuntu).

Stąd wdzięczny jestem za synchronizację haseł do WiFi między urządzeniami od Apple ;-)



Podobne postybeta
Rekrutacja w czasach pandemii ;-) - a może poszerza liczbę firm?
Chyba wiem czemu widzę Gdynie z Juraty ;-)
DisplayPort.... za jakie grzechy?
Utrata keystore szansą na odwyk od Facebook? ;-) - chyba jednak nie ;-)
Punkty uzależniają ;-)

sobota, września 10, 2022

Przechodzę na iPhone'a...

Od "zawsze" (czyli od 2009 roku ;-)) wybierałem Androida.

Miałem oryginalne G1, Nexus S, Nexusa 4, Nexusa 5, Nexus 10, Nexus 7 (obie edycje ;-)), Nexus 6, Pixela C, Pixela XL, Pixela 2 XL, Pixela 3 XL, Pixela 4 XL, Pixela 6 i teraz mam Pixela 6 Pro....

Ale ponieważ dla Google Polska to III świat, to zawsze kupowanie tych urządzeń było trudne. Zwykle były z nieoficjalnego importu i przez to nigdy to nie był sprzęt dla Polski... np. mój Pixel 6 Pro 5G miał tylko gdy byłem w tym roku w Kalifornii ;-)

Stąd uznałem, że spróbuję z Apple... dokonałem zamówienia koło 14:45 w piątek, a sprzedaż była od 14....

I trochę mnie terminy przerażają ;-)

W kolejności są to ;-)




Rozpiętość od 16 września do 4 listopada ;-)
50 dni... 

Sam nie wiem czy mi się zamiana spodoba, jeden plus, Apple Watch bije na razie wszystko co jest po "mojej" obecnej stronie barykady...




Podobne postybeta
Z Nexusów do Pixeli
Pixel XL jest genialny
Pixel 4 XL czy iPhone 11 Pro
Pixel 6 po ~2 miesiącach.... prawie nieodróżnialny od Pixela 4 XL ;-)
70+ godzin, Staff i iPhone ;-)

czwartek, września 08, 2022

W 2023 będę na Rammstein 2.... wróć 3 razy ;-)

Po koncercie w Wawie zapragnąłem mieć jakieś koszulki i czapeczki z logo Rammstein, poszedłem do ich sklepu i była też możliwość kupienia rocznego członkostwa w LIFAD.... a że mi po głowie chodziło, że pewnie jeszcze jakiś koncert będzie w 2023, bo skoro mają nową płytę... 

I miałem rację, Rammstein ogłosił nową trasę i tym razem mam zamiar 2 3 razy pójść :-)

17/07/2023 do Berlina i 30/07/2023 do Chorzowa :-) i jeszcze raz w Chorzowie 31/07/2023, ale tym razem w feuerzone :-)

W Berlinie nigdy nie byłem, a jakoś tak z Run Lola, Run i Kleo mi się podobał to chcę zobaczyć na żywo, a znów Chorzów lubię bo przecież tam przez jakieś 11 lat mieszkałem dzieckiem będąc ;-)

Stąd w 2023 2x 3x Rammstein! ;-)



Podobne postybeta
Rammstein :-)
"Wstydliwy" sekret
Dziwne skojarzenia
Kiedy polecimy na Marsa?
Niepewność wielostopniowa ;-)

środa, sierpnia 31, 2022

Moja triada spokoju to jednak nie triada a tetrada spokoju ;-)

Dotarło do mnie dziś, że jak pisałem o traiadzie spokoju to się tak zakochałem w idei triady, że zapomniałem, że to jest jednak nie triada, a tetrada bo są w niej nie 3, a 4 cosie ;-)

Wymieniłem już:

  • medytacje,
  • pomodoro,
  • spacery
zapomniałem o czwartej rzeczy, czyli grze w Dooma ;-)

Wtedy to już są 4 rzeczy, które tworzą tetrade spokoju:
  • medytacja,
  • pomodoro,
  • spacer,
  • Doom
;-)
Doom wnosi szybki trening w planowaniu i egzekucji ;-) bo są w koło cele i problemy, których priorytet zależy od tego jak są niebezpieczne, ale nie jest to tak, że silniejszy przeciwni jest zawsze ważniejszy, czasem silniejszego można zostawić na potem. Wszystko dzieje się też w szybkim tempie i pomyłka drogo kosztuje. Więc człowiek chcąc nie chcąc robi sobie ćwiczenie w priorytetyzacji i zarządzaniu zasobami ;-)

Jeden problem, na te wszystkie 4 rzeczy czasem po prostu brakuje czasu ;p




Podobne postybeta
Triada spokoju, albo triada antychaosowa ;-)
Pomodoro z positive reinforcement? ;-)
Jak zwiększyć swoje IQ?
Doom Eternal.... ssie ;-)
Głupie oszczędności

wtorek, sierpnia 30, 2022

Toole do CI są dziwne ;-)

Nie przepadam za wszelkimi narzędziami w stylu TeamCity, GitLab (CI) czy Jenkins, ogólnie za wszystkimi tymi narzędziami do CI.
Ale ciekawa sprawa, mimo wszystko, mimo tego, że te języki tam stosowane są dziwne, że jest to często i gęsto bardzo barokowe, jak człowiek pamięta, że na 99% gdzieś jest tam w tekście tych plików yml wpisane coś co się przekłada na basha ;-) i że można w końcu dojść do tego jak na tym zapanować....
To daje się nad tym zapanować ;-)
Oczywiście zawsze jest haczyk ;-) i często tym haczykiem jest to, że by default jakieś joby/pipeline'y/taski są zafiksowane na brancha, albo domyślnie środowisko zawsze czyta z mastera.... 
Ale to tylko dodaje atrakcyjności tym sprawą....
Szczególnie, że prawie zawsze jak człowiek się z tym bawi to MUSI, bo coś się właśnie wali i pali i trzeba ratować, a tu np. build nie chce pójść ;p



Podobne postybeta
+2 czy +6?
Kariera IT, jak iść w górę i jak iść w bok ;-)
"Zestaw inspektora" się tworzy ;-)
Czego nie lubię w Kalifornii?
6:22 czyli środek nocy

niedziela, sierpnia 28, 2022

Triada spokoju, albo triada antychaosowa ;-)

Mam taką swoją triadę spokoju ;-)

Wygląda mniej więcej tak:

  • Pomodoro
  • Medytacja
  • Spacer
Jej celem jest zapewnienie tego bym był w miarę spokojny i szczęśliwy.
Czasem jednak o niej zapominam ;-) 
Mam nawet na telefonie przez to pokazywane jak go otwieram, ale też nie zawsze zauważam ;-)

Ale o co chodzi w działaniu tej triady spokoju? ;-)

Pomodoro jest po to by w sytuacji gdy jest za dużo rzeczy do zrobienia, albo jestem za bardzo rozkojarzony mieć takie momenty po te 25 minut gdy robię 1 rzecz naraz.
To jest trudne, jak masz wiele priorytetów naraz i za mało informacji by dokonać jakiejkolwiek priorytetyzacji. 
Wtedy pomodoro wprowadza jakąś chociaż ułudę spokoju, bo przez te 25 minut zajmujesz się tylko jedną rzeczą.
Nie działa to zawsze, bo jak masz spotkanie po spotkaniu to nie zawsze masz czas na nawet 1 pomidora między...
No i często można zapomnieć.

Medytacja jest po to by się wyciszyć, czy też skupić. Cel jest podobny jak używania pomodoro, wprowadza jakiś porządek do chaotycznego dnia. Jest 10 minut gdy nic nie robisz, próbujesz uważać na swój oddech i tyle, oczywiście po paru minutach do Ciebie dociera, że zamiast obserwować oddech od paru minut robisz plany co dziś zrobisz, albo rozważasz jakiś problem. Wtedy trzeba sobie z tego zdać sprawę i odsunąć to od siebie, jak się nie da to przyjrzeć się temu, tej myśli i zwykle wtedy odpływa. I na jakieś 5-10 sekund jest spokój, zapominamy i znów pojawia się inna myśl i znów po jakimś czasie do Ciebie dociera "ej, przecież ja znów planuje/myślę o X" ;-)
Działać działa, ale czasem człowiek nie może wysiedzieć i go nosi. Do tego ponieważ to jest jednak jakiś wysiłek często prościej internet przeglądać.

Spacer jest po to by mieć jakiś wysiłek fizyczny i by mieć czas na myślenie. Jak się uda jeszcze by ten spacer był np. "rytuałem przejścia" od pracy do domu, albo od domu do pracy to jeszcze lepiej, ale tutaj pandemia przeszkodziła i to straszliwie.
Do tego podobno (ja tego nie mam za często bo zbyt często słucham podcastów idąc ;-)), sam akt "iścia" i widzenie przesuwającego się świata powoduje, że nasz mózg się skupia? Coś dobrego w każdym bądź razie ;-)
Znów, nie zawsze się chce iść, bo to jednak wysiłek, bo szkoda czasu, bo pada, bo gorąco, bo nie ma gdzie, a bo może jeszcze to zrobię zanim wyjdę i tak dalej....

Ale z obserwacji, ta triada pomaga, nawet jej kawałki pomagają ;-)




Podobne postybeta
Moja triada spokoju to jednak nie triada a tetrada spokoju ;-)
Jak zwiększyć swoje IQ?
Pomodoro z positive reinforcement? ;-)
Zaszumienie....
Hackowanie teorii umysłu ;-)

czwartek, sierpnia 18, 2022

Mój Macbook ma 4 lata

No to mój Macbook Pro 2018 ma już 4 lata.


Działa nadal dobrze, choć przyznam, że momentami dostaje zadyszki jak ma otwarte 3 przeglądarki z dużą ilością kart, 3 razy IntelliJ, Obsidiana i Notion....

Ale jak go kupowałem to planowałem go na lata i dostał wtedy max pamięci czyli 32 GB RAM i najbardziej wypasioną wersję CPU, jakieś i9 od Intela ;-)

Jest niezły, ale czasem czuć jego wiek.... przed kupnem nowego powstrzymują mnie:
* jednak nowe są tylko z M1, jak będzie M2 i 48, czy 96 GB ;-) to czemu nie,
* ARM, jednak czasem lubię odpalić Parallels, a podobno Parallels na M1 (i M2) odpalać potrafi tylko ARMowego Windowsa... a ja mam Windowsa dla paru starych gier ;-)
* 22k za nowego to jest jednak dużo monet ;-)

Ale tak ogólnie jestem zadowolony z tych 4 lat mojego laptopa ;-), całkiem dobrze działał i działa, miał na początku problem, że głośniki trzeszczały i w Internecie było dużo rozważań czy to się w ogóle da naprawić... a naprawiali softem ;-)
Dostał rozdęcia baterii... wymienili mi ją za darmo ;-) więc moja bateria w 4 letnim MBP ma dopiero 16 cykli za sobą ;-) (dla porównania w moim MBA, który ma ciut ponad 2 lata ma ich 158 ;-))
Co ciekawe klawiatura w nim nadal wydaje się działać... ale to może być też przez to, że tylko przez pierwsze parę miesięcy używałem klawiatury laptopa, później prawie zawsze był podłączony do zewnętrznej klawiatury ;-)

Ogólnie polecam ;-)


Podobne postybeta
Dla Java'y Apple Silicon M1 to jednak nadal x86 ;-)
396 m2 ekranu
"os.arch", "os.name", "sun.arch.data.model" co to jest i co pokazuje na jakiej maszynie i OSie? ;-)
Laptop
No i jest problem natury logistyczno-temporalnej....