niedziela, września 24, 2017

iCloud jest podły....

Jako w miarę szczęśliwy* posiadacz iPada Pro** mam też konto w iCloud.

Używam iA Writera żeby sobie prowadzić dziennik.
iA Writer wrzuca pliki do iCloud'a.

I niby cacy, ale chciałbym je mieć w jakimś innym miejscu, dokładniej zaś w Google Drive w moim własnym formacie tak by z moim Androidowym Dziennikiem wszystko się synchronizowało...

Znalazłem w sieci info jak się dobrać do iCloud'a przez HTTP.

I najpierw trzeba się zalogować, co nie jest trudne, acz wiąże się z wprowadzeniem serwerów Apple w błąd.
Bo trzeba wysłać coś w stylu:
POST /setup/ws/1/login
Origin: https://www.icloud.com
Content-Type: text/plain

{apple_id: "username",
  password: "password",
  extended_login: true
}

pod adres https://setup.icloud.com/setup/ws/1/login, stamtąd przyjdzie odpowiedź, w której będzie masa ciastek i jednym z nich będzie takie z ciastkiem X-APPLE-WEBAUTH-TOKEN.
Pogrubionym jest miejsce gdzie wprowadzamy serwery Apple w błąd.

Mając to ciastko podobno można pobrać zawartość zasobu albo informację o tym zasobie...

Info o zasobie można pobrać z dziwnego URLa, który wygląda tak:
https://p04-ubiquityws.icloud.com/ws/{dsid}/parent/{node_id}?dsid={dsid}

gdzie {dsid} to wartość z części ciasteczka, które pobraliśmy wcześniej, a {node_id} to identyfikator node'a i podobno 0 to root iCloude'a....

Żeby było zabawniej trzeba w tym requeście wysłać jeszcze ciasteczka.... wraz z tym, które wcześniej pobraliśmy by używać jako dsid...

No i tu mam problem bo nieważne czy robię GET czy POST to za każdym razem dostaję 405 Method Not Allowed...

Stąd uważam, że iCloud jest podbły.
Nie daje sobie wykraść moich własnych plików....
Świnia....

* - w miarę szczęśliwy, bo jak sprzęt jest świetny i wiele softu jest świetne, to iOS nie jest najwygodniejszym systemem... np. do teraz ma ataki zapominania i uznaje, że ekran jest w innej orientacji niż w rzeczywistości jest, trzeba dopiero uruchomić jakąś apkę i nagle wszystko się ustawia jak powinno.
** - OK, od dłuższego czasu "mam" też firmowe Macbooki.


Podobne postybeta
Po paru dniach z iPad’em Pro - mój Dock ;-)
Wredne Google Docs
Refactoring bez testów to proszenie się o problemy ;-)
Wysyłamy pliki do Google Docs przy pomocy Go :-)
Liczymy książki ;-)

Podstawy

Jakoś niedawno mi się przypominało jak tak koło 2000-2005 roku chodziłem po księgarni w Częstochowie i oglądałem książki na dziale IT.
Dużo było wtedy o XP, ale nie Windows XP, a o eXtreme Programming.

Mniej więcej wtedy się dowiedziałem też jak działają refleksje.
Pierwsze w Delphi, później w Java'ie.

XP jako eXtreme Porgramming okazało się być fade'm, czymś co się pojawiło i znikło.

Znajomość refleksji nadal mi się przydaje.


Podobne postybeta
Jak nauczyć się żonglować? ;-)
Motywy
Jakiej jodyny???
Wycieczka
Walka z VacLagiem - start ;-)

środa, września 20, 2017

Checklista ofertowa ;-)

Skończyłem parę dni temu czytać The Checklist Manifesto.
Dwa główne przekazy tej ksiązki to to, że checklisty pomagają (w co przez długo wątpiłem), i że dobrą checklistę trudno zrobić (co było powodem moich wątpliwości zawsze ;-)).

Ale dla testów zrobiłem sobie taką, która pozwala mi szybko decydować czy odpowiedzieć na ofertę czy nie, oto ona:

  • software jest głównym produktem,
  • firma nie robi nic nieetycznego/nie zajmuje się czymś co jest w mojej ocenie nieetyczne,
  • proces jest dla inżynierw, nie inżynierowie dla procesu*,
  • piszą w Java’ie, Pythonie, Kotlinie lub Go (a nie np. w C#**),
  • prawdziwa chmura (czyli jak chmura to nie pseudo enterpise chmura, gdzie wciskamy Oracle’a czy MSSQLa),
  • G Suite jako pakiet wewnątrz firmy,
  • wyjazdy do USA,
  • amerykańska
Gdzie pierwsze 4 są konieczne, od 5 w dół są niekonieczne, acz porządane ;-)
I tak po kilku dniach testowania przyznam, że jak na razie dobrze się sprawdza ta checklista ;-)


* - uważam, że najważniejszy jest produkt, a produkt softwareowy nie powstanie bez inżynierów, cała firma jest nadbudową do tego by ten produkt zrobić dobrze i by jak najbardziej pasował klientom (i nie, sprzedaż nie jest ważniejsza, bo jak trzeba robić duży dział sprzedaży i wciskać produkt to nie jest on dobry. Dobry produkt sprzedaje się sam i wtedy sprzedawcy nie są wciskaczami, a kimś kto ma dobry kontakt z klientem i potrafi produkt sprzedać lepiej niż sam produkt by się sprzedał, bo potrafią pokazać klientom, że ten produkt jest odpowiedzią na ich potrzeby)
** - C# jest napewno bardzo dobrym językiem programowania, ja po prostu nie chcę w nim pisać.

Podobne postybeta
Chmura wygody ;-)
Paragon - zostawić czy wyrzucić?
Gdy Kindle choruje...
Przemowy współczynnik fajności firmy ;-)
Chmurka prawdopodobieństwa

wtorek, września 05, 2017

Czekolada taktyczna ;-)

Gdy człowiek robi się zły i rozdrażniony to ma najpewniej* niski poziom serotoniny w mózgu....

Można więc próbować ten poziom serotoniny trochę podnieść dostarczając organizmowi substancji z których będzie potrafił on zsyntetyzować serotoninę.

Potrafi to zrobić z tryptofanu.... a ten jest w czekoladzie :-)

I teraz taktyczne użycie czekolady jest tak, że jak czujemy, że zaczynamy się irytować to trzeba sięgnąć po 1-2 kostki** i przyjąć.
Zwykle powinno pomóc.

Może to być efekt placebo, ale wydaje się działać ;-)


* - OK, bardziej "może", zamiast "najpewniej".
** - kostki! nie tabliczki ;-)


Podobne postybeta
Google vs terroryści
2GB :-)
Stefany.... - moja pełna kolekcja :D
To działa! :-)
Inwazja kostki klinkierowej

poniedziałek, września 04, 2017

Epigenetyczne filtrowanie rekruterów ;-)

Dodałem wczoraj do mojego opisu w LinkedIn zdanie proszące rekruterów o użycie słowa "epigenetyczny" [po angielskiemu epigenetics] w razie będą do mnie pisali.
To taki filtr ma być tego czy przeczytali mój opis, a więc czy zwracają się do mnie z bardziej
"ztargetowanym" przekazem.

Zobaczymy jak się sprawdzi. Czy wytnie wszystkie oferty od rekruterów, czy tylko niektóre.

A czemu słowo "epigenetics"? Bo pojawiło się jak na razie tylko w 1 mailu, który dostałem :-)


Podobne postybeta
Pierwsza zasada wyboru pracodawcy - rozumieć co robi jego firma ;-)
OOo2GD 1.8.1 - i znów poprawki
OOo2GD 2.1.0 - filtrowanie, sortowanie [dla niektórych ;-)] i bardziej *nixowe nazwy
Książki kształtujące - nakażmy politykom przedstawiać listę książek które ostatnio przeczytali
Bloggeroid 1.4.0 :-) - w stronę stabilności... oby ;-)

środa, sierpnia 30, 2017

finalize() - do czego służy, a do czego nie i z czym to się je.

Przesłuchując kandydatów zadaję im czasem pytanie o finalize.
Odkryłem dzięki temu, że to jedno pytanie może z dużą dokładnością wykryć czy ktoś zaczął programować w Java'ie przed czy po 2010 roku ;-)

Wiele osób, które zaczęły programować w Java'ie po 2010 roku twierdzi, że finalize służy do uruchomienia GC*, albo nawet że ta metoda uruchamia GC dla tego jednego obiektu**.

W rzeczywistości finalize jest wołana przez specjalny wątek Finalizera***, który sprawdza czy obiekt spełnia warunki do bycia zabitym, jeśli tak to woła metodę finalize obiektu po czym sam Finalizer zapomina o obiekcie i ginie.

Metoda finalize daje obiektowi szansę na posprzątanie po sobie.
Słowem klucz jest "szansę" ;-)

Nie ma gwarancji, że zostanie uruchomiona****, nie ma gwarancji, że w razie zostanie uruchomiona to będzie uruchomiona tym samym ClassLoaderem, który ładował klasę, gdy poleci jakikolwiek wyjątek to zostanie on zignorowany i nie trafi nawet do loga.

Jeśli gdzieś w kodzie masz finalize to traktuj to jako code smell.
Nie każde użycie jest złe, ale zawsze warto się przyjrzeć bo często okaże się, że użycie finalize nie było dobrym pomysłem.

Co ciekawe czasem ktoś używa finalize żeby sprzątać bo chce oszczędzić pamięci... a w rzeczywistości tej pamięci więcej zużywa ;-) bo JVM trzyma cały wielki obiekt Finalizer dla każdego obiektu, który nadpisał metodę finalize*****.

To ostatnie jest ciekawe. Metoda finalize może być zawołana TYLKO na obiekcie stworzonym z klasy, która nadpisała metodę finalize.
Jeśli klasa ma metodę z Object to nie ma szans by finalize zostało zawołane..
To samo tyczy się enumów.
Nawet jeśli ktoś napisze finalize() dla enuma to też nigdy nie zostanie zawołana.

Podsumowując.

  • metoda finalize() nie woła GC,
  • może zostać zawołana dla obiektu, który nie ma już żadnej referencji poza tą w Finalizerze******,
  • można jej w rzadkich przypadkach użyć do sprzątania po obiekcie (czyli do zwolnienia jakichś zasobów, w domyśle ciężkich)




* - do tego służy System.gc() i to nie jest uruchomienie, a co najwyżej sugestia dla GC, że chcielibyśmy by się uruchomił.
** - co byłoby dość karkołomne zważywszy, że musimy mieć referencję do obiektu by móc na nim zawołać jakaś metodę ;-).
*** - uproszczenie, tak naprawdę Finalizer jest tworzony dla każdego obiektu, który nadpisze metodę finalize(), a później jest jeszcze wątek, który dba o to by uruchamiać co jakiś czas metodę z Finalizera jeśli wychodzi mu, że istnieje tylko 1 referencja do obiektu (ale przyznam, że tego kodu nie oglądałem :-)).
**** - Runtime.runFinalizersOnExit(true) może to "zagwarantować", sęk w tym, że dla wszystkich obiektów, nawet tych, które są jeszcze używane w trakcie zamykania aplikacji.
***** - sam kiedyś w jednym projekcie miałem OOM na produkcji i w końcu doszedłem do tego, że to przez to, że masa krótko żyjących obiektów miała metodę finalize i większość pamięci zjadały nam Finalizery :-)
****** - no chyba, że ktoś zawoła Runtime.runFinalizersOnExit(true), wtedy jest szansa, że w trakcie wychodzenia z aplikacji Finalizer spróbuje zawołać finalize na obiekcie, który jest jeszcze gdzieś używany.


Podobne postybeta
JBoss rozrabiaka ;-)
Samochód jako zmniejszacz temperatury.... GC i jak to możliwe, że Young Generation może być zbyt duże, strzeż się finalize() i muzyczka :-) Czyli potok świadomości....
Referencje w Java'ie
Sztuczki tropiciela błędów - breakpoint na sterydach ;-)
Raport z emigracji ;-)

niedziela, sierpnia 27, 2017

Google vs terroryści

Jak myślicie, kto będzie miał większy wpływ na świat?
Google czy terroryści?

Czy za 500 lat świat będzie bardziej ukształtowany przez Google, czy przez terrorystów?

Inaczej, czy grupka gości wyznających jakieś średniowieczne poglądy i negująca ustalenia nauki, która całą swoją siłę opiera w kilku krajach mających ropę naftową wpłynie bardziej na świat od firmy, która udostępniła nam najlepszą wyszukiwarkę świata, zmieniła Internet w narzędzie i dostarczyła Androida?

Kto teraz bardziej wpływa na świat?

Google, które codziennie dostarcza ludziom odpowiedzi na pytania (i najpewniej rok w rok ratuje życie tysiącom ludzi dostarczając im informacji o tym, że gdy mają jakieś objawy powinni udać się do lekarza), czy terroryści?

Ja stawiam na Google.

Terroryści są słabi.


Podobne postybeta
Jak socjaliści stworzyli globalne ocieplenie by uderzyć po kieszeni islamistów i Rosję ;-)
Nie czaję... ;-)
Motorola Rulez, czyli Motorola Atrix 4G rządzi :-)
Google Me - ja stawiam na start 1 kwietnia ;-)
Czekolada taktyczna ;-)

Rant po toolach w stylu Mavane, Gradle, Bowera i całej tej hałastry

Będzie rant...

Wszystkie Maveny, Gradle, Bowery,  NPMy, Webpacki i cały ten chłam są narzędziami do rozwiązywania problemów trywialnych, które wprowadzają problemy poważne...

Nagle przez użycie któregoś z tych narzędzi Twój projekt staje się zależny od Internetu, od widzimisię różnych programistów i masy rzeczy na które nie masz wpływu.

Nagle z programisty Java'y, JavaScripta czy czegoś podobnego musisz stać się jeszcze ekspertem w kryptycznym XMLu, Groovy'm i JSONie.

Co jest najczęstszym źródłem problemu w firmach gdzie używa się Nexusa albo NPMa?
Najpierw to, że "wolno".
To ktoś wpada na pomysł "zrobimy sobie lokalne repozytorium".
A później przez kilka lat ludzie walczą z tym, że to lokalne repo nie jest do końca zgodne z tymi w Internecie....
A jak ktoś wpadnie na to by w różnych lokalizacjach mieć lokalne klony repa to jest jeszcze zabawniej.

W spróbujcie pożenić 2 takie systemy razem....

Ja mam teraz tak, że moje Android Studio spokojnie może skompilować aplikację, wszystko działa... ale sam edytor pokazuje na czerwono typ Tracker (com.google.android.gms.analytics.Tracker)... który nie jest też widoczny w UnitTestach....

W dawnych czasach poszukałbym gdzieś na stronach Google JARa z tą klasą, wrzucił do projektu i voila wszystko by działało...
Ale nie, teraz muszę robić doktorat z Gradle'a żeby ustalić co się dzieje.....

A wszystko przez to, że kiedyś ktoś uznał, że lepiej dodać komplikację rozwiązując trywialny problem zależności*.


* - bo to jest trywialny problem, po prostu trzymaj zależności jak najprostsze, jak Ci się zaczynają komplikować to masz coś nieteges w architekturze. Jak nie możesz zapanować nad JARami z 3rd party libraries to używasz ich po prostu ZA DUŻO.


Podobne postybeta
Nigdy nie zapominaj o FSM! ;-)
Jak zmusić Gradle'a do używania ramdysku (na OS X)
Zegar w Raspberry Pi nie jest zawsze godzien zaufania
Trzy wielkie tajemnice Androida (od strony programisty)
Może mi ktoś wytłumaczyć po co istnieją GWT i GWTP?

sobota, sierpnia 26, 2017

5 ekranów

Elektronicznie „żyję” teraz na 5 ekranów.

Pierwszy to ekran Pixela XL, który służy mi głównie do kontrolowania odtwarzania podcastów i przeczytania czegoś na Pocket, albo w Gazecie Wyborczej, czy z rzadka zajrzeniu na FB czy sprawdzeniu maila.
Drugi to ekran Pixela C, który służy mi głównie do czytania książek w aplikacji Kindle, czytaniu artykułów w Pocket i kontrolowaniu YouTube’a gdy oglądam go na ekranie numer 5.
Trzecim jest ekran iPada Pro. Służy mi do przeglądania internetu z kanapy, albo pisania dziennika. Te słowa też na nim piszę.
Czwarty ekran to PC, na którym pracuje i przeglądam sieć.
Piątym ekranem jest TV, na którym oglądam YouTube’a, Netflixa czy innego Showmaxa ;-)

Niektóre rzeczy da się robić na wszystkich, niektóre tylko na jednym.
Video zawsze wolę na TV, a w ogólności na największym dostępnym ekranie ;-)
Web najlepiej na czymś między 13 a 24 calami.
Pocket od 5.5 cala do 24.
Programowanie jest podobne do weba i też między 13 a 24 celami ;-)

Gry za to albo na 49 calach (w pracy to nawet na większym bo na rzutniku gramy :-)), takich 10-13 cala albo na komórkowym. Jakoś PC nie za bardzo.

Muzyka w tle praktycznie tylko przy 24 calach... przy mniejszych to głównie z Google Home.

Jestem wcieleniem Google’owej wizji wielu ekranów ;-) stąd podziwiam natywnych mobilnie, że wszystkie te rzeczy robią na ekranie telefonu.
Ja bym tak nie umiał i nie umiem ;-)


Podobne postybeta
Listy Top 10 aplikacji nie są dla mnie ;-)
Lubię tramwaje :-)
Ukradli nam przyszłość....
Strategiczny wybór miejsca w tramwaju - poradnik ;-)
Duży ekran - największy plus Nexus 5

poniedziałek, sierpnia 21, 2017

Po paru dniach z iPad’em Pro - mój Dock ;-)

Mam iPada Pro 12.9 cala od trochę ponad tygodnia.
Kilka dni temu zainstalowałem na nim iOS 11.

Moim celem jest uczynienie z iPada urządzenia, które w razie podróży będzie mi mogło służyć jako komputer i tabelet jednocześnie.
Odkryłem też, że świetnie nadaje się do robienia notatek.

Jestem nowy w iOS, ale i tak się podzielę moim zestawem programów ;-)

Mój pierwszy ekran wygląda tak:


Co jest na samym ekranie nie jest na tyle istotne, bo najważniejsze aplikacje są w Docku :-)

I jak widać pierwsza grupa to wszystko aplikacje od Google:

  • Chrome - to tak naprawdę „nakładka” na Safari, ale synchronizuje się z Chrome na moich komputerach, telefonie i Pixel C, stąd wolę ją od Safari
  • Inbox - mój ulubiony klient pocztowy
  • Google Calendar - głównie dla dostępu do mojej agendy w której mam rozplanowane przez Kalendarz „cele’
  • Google+ - szczerze wygląda ochydnie... tak jakby wersja telefoniczna rozciągięta na gigantyczny ekran iPada Pro, na tablecie z Androidem wygląda dużo lepiej
  • Google Drive - szczerze chyba przez przyzwyczajenie :-)
  • Google Keep - które robi mi nadal za podstawowe ToDo
Dalej są już aplikacje „nie od Google”:
  • Pocket - do czytania, ale znów wersja dla Androida jest jakaś przyjemniejsza,
  • Notability - genialny program do robienia notatek przy pomocy Apple Pencila. Jest po prostu genialny. 
  • Evernote - szczerze jest tu głównie po to bym zaczął bardziej używać,
  • iA Writer - głównie do prowadzenia dziennika czy journalingu, próbuję tu też spisywać jakieś pomysły, główną zaletą aplikacji jest to, że znam ją z Androida i nawet lubię,
  • Pythonista - czyli możliwość programowania w Pythonie na iPadzie :-) na razie napisałem kilka prostych testów, a to całkowanie numeryczne, a to testowy serwer WWW... docelowo chciałbym napisać w tym kilka programów, 
  • Trello - momentami chciałbym przerzucić moje ToDo do Trello by móc bardziej dokładnie widzieć co robię.
Jak widać mój iPad ma programy głównie do konsumpcji i kilka do produkcji treści.. 
Jeszcze mi nie zastępuje komputera, ale momentami całkiem nieźle mu to wychodzi.
Chociaż np. teraz gdy piszę te słowa na Bloggerze w wersji wężowej to nie jest najlepiej... bo co chwilę mi edytor webowy wrzuca obrazek przed oczy ;-) co „lekko” denerwuje.

Ale nadal jestem zadowolony z zakupu. 
Sprzęt na 9/10 - -1 za przycisk Home
iOS 7/10 - jest poprawa w porównaniu do iOS 10, ale nadal Android jest wg mnie wygodniejszy (dlatego w domu Pocketa czy Kindela czytam na Pixel C, to samo z Google+)
Software firm trzecich 9/10 - jest ładne i funkcjonalne.




Podobne postybeta
iPad Pro
Co na moim telefonie...
Ta sama rozdzielczość przy różnych wielkościach ekranu to nie musi być dobry pomysł ;-) czyli o tym, że iPad Mini może boleć w oczy ;-)
iCloud jest podły....
ToDo od Trello jako "oddzielna aplikacja"