piątek, maja 29, 2020

Alfred + Todoist i wysyłanie tasków do projektu, a nie tylko do Inbox'a ;-)

Od jakiegoś czasu używam Alfreda.

Dostałem sobie już nawet własny "workflow", który dodaje mi taski do Todoista.

No i było nieźle, ale trochę mi z czasem zaczęło brakować możliwości dodawania nie tylko do Inbox'a, ale też do projektów.

Wczoraj więc posiedziałem i mam, działa :-)

Wystarczy w trakcie tworzenia taska wpisać # i pojawia się lista projektów :-) co widać poniżej :-)



Mój workflow to aż 3 akcje ;-)


Pierwsza reaguje na słowo kluczowe todo i składa się z 2 skryptów w Pythoni'e ;-) pierwszy to Script Filter, którego zadaniem jest reagowanie na to co użytkownik pisze, i jak w tekście pojawi się # to skrypt ma zaproponować znane projekty :-) [oczywiście z filtrowaniem]
Gdy user już wszystko napisze i naciśnie Enter to (poza selekcją w autocomplete ;-))wynik jest wysyłany do drugiego skryptu w Pythonie, który wysyła item do Todoista i w razie w treści jest #<nazwaProjektu> to dodaje wpis do tego projektu, jeśli nie znajdzie takiego projektu to dodaje do Inboxa.

Druga reaguje na słowo todosync, i po prostu odpala skrypt który pobiera listę projektów z Todoista (ten Script Filter to też zrobi jeśli zauważy, że nie ma na dysku pliku z projektami ;-)).

Trzecia reaguje na słowo todotoken po którym powinien wystąpić ciąg znaków będący tokenem pozwalającym na korzystanie z API Todoista.
Jeśli poprzednie skrypty nie znają tokena to zamiast pomagać i robić to co jest ich zadaniem, poproszą o użycie todotoken ;-)

Sam Alfred nie wspiera jakoś szczególnie (a przynajmniej ja jeszcze nie umiem) reużywania kodu, więc w moich skryptach jest dość dużo powtórzeń ;-)

Jakby ktoś był zainteresowany to tutaj można sobie pobrać mój workflow :-) [ikonkę ukradłem stąd https://github.com/rbnh/todoist-alfred-workflow, zresztą jest tu mój pull request sprzed jakichś 2 tygodni, ale nikt tego projektu nie utrzymuje od paru lat więc raczej nie zostanie zmergowany ;-)]





Podobne postybeta
iPad Pro
Jak walczyć z gigantycznym kodem w Java'ie, część 1.5 ;-) - czyli jak je się słonie ;-)
Który kod (nie kot! ;-)) lepszy?
Buzz Troll Remover v0.3 - potęga guzików
Regresja liniowa w Google Docs

środa, maja 27, 2020

Wersjonowanie Rest API - pytanie filozoficzne

OK, w przypadku Rest API (choć de facto ogólnie API webowego ;-)) robi się wersjonowanie przez dodawanie albo w URLu numer wersji, albo w nagłówku.

No i wiadomo jak zmienia się zawartość endpointa i dochodzą nowe konieczne rzeczy to robi się update.
Ale co wtedy gdy zmiana jest kompatybilna w dół?

Nie wiem, kiedyś zwracaliśmy listę obiektów z takimi polami, a teraz te obiekty mają jeszcze jedno nowe pole?

Albo przyjmowaliśmy obiekt i pojawiło się w mim nowe pole, które nie jest required?

Czy numer API się powinien dla tego endpointa zmienić czy nie? ;-)

Wg mnie nie, bo to jest tak, że API jest nadal takie samo, stary kod nadal będzie działał.

Jak w przypadku kodu źródłowego, przyjdzie nowa wersja biblioteki i jest sobie kod z niej korzystający i API się nie zmieniło (choć może zmieniły się w sposób "niepsujacy" obiekty) to kod powinien nadal działać.
Jak zmieniamy wersję Java'y i dodano do Map nowe metody, ale zachowanie starych jest takie samo to jest OK. 
Wychodzi niemal jakby jakaś wariacja na temat zasady podstawienia Liskov ;-)



Podobne postybeta
Chrome2Chrome, mam dylemat
Delete Driven Development ;-)
WS-Security złe, SOAP zły, WebServices złe. REST dobry
Automagiczne dodawanie tagów do Pocket :-)
Google App Inventor for Android - co to będzie? ;-)

poniedziałek, maja 25, 2020

Doom Eternal.... ssie ;-)

Lubię Dooma, stąd gdy pojawiła się zapowiedź Dooma Eternal to od razu kupiłem.
Zapłaciłem 289.99 PLN i to prawie 5 miesięcy przed premierą.

I w nagrodę dostałem to miejsce:


Najsmutniejsze jest to, że gdy oglądam ludzi jak grają w Doom Eternal to tutaj w ogóle nie mają problemu.
A ja utknąłem.
Łącznie już z 2-3 godziny tu spędziłem i najdalej dotarłem tak jak w tym filmiku....

Stąd gra ssie. Nie powinna mieć takiego miejsca którego nie umiem przejść.



Podobne postybeta
Tym razem chcę bezszwowej TV ;-)
Dziwne sposoby zasypiania ;-)
Już prawie, prawie i będziemy na Plutonie ;-)
Joost - TV w komputerze
Jak zwiększyć swoje IQ?

środa, maja 20, 2020

Czasem człowiek musi napisać dekodowanie Base64 w JavaScript ;-)

Tak, wiem, że JavaScript w przeglądarce to ma, wystarczy użyć metody atob.
Ale ja postanowiłem sobie zrobić skrypt do Keyboard Maestro, który po tym jak sobie zaznaczę w przeglądarce token JWT i wcisnę jakąś kombinację klawiszy (na razie ALT-CMD-SHIFT-J) to mi zdekoduje ten token i go wyświetli.
JWT jest w Base64 i w sieci można łatwo znaleźć kod do jego rozkodowania....

No i wziąłem ten kod, tylko że okazało się, że JavaScript for Automation w macOS nie ma metody atob, która przerabia Base64 w tekst ;-)

Base64 jest proste, idea jest taka, że mamy 64 znaki, wielkie litery, małe litery, cyfry i w końcu + i /.
Mają wartości od 0 dla A do 63 dla /.
Czyli możemy tak zakodować 6 bitów :-)

Normalny znak ma 8 bitów ;-)

Więc 4 znaki z Base64 to 24 bity, czyli 3 znaki ASCII :-)

Czyli jak chcemy zdekodować jakiś tekst to bierzemy sobie liczbę, którą ustawiamy na 0, teraz robimy tak tą liczbę przesuwamy o 6 bitów w lewo, dodajemy do niej liczbę którą reprezentuje pobrany znak, i pobieramy następny znak, znów przesuwamy o 6 bitów i dodajemy... i powtarzamy to 4 razy.
Mamy 24 bity. Teraz przesuwamy najstarsze 8 bitów w prawo o 16 bitów i robimy and z 0xFF, i mamy pierwszy zakodowany znak ;-) bierzemy "środkowe" 8 bitów i przesuwamy je o 8 bitów w prawo i znów and z 0xFF i mamy drugi znak i w końcu robimy and 0xFF i mamy 3 znak :-)

Do tego trzeba pamiętać, że jak mamy = to po prostu przesuwamy bity (mogliby to równie dobrze zastąpić A ;-)

Mój kod nie jest jakiś szczególnie optymalny, ale chodziło mi o to by po prostu działał i wygląda tak ;-)
function f2t(z) {
var t = "";
var a = (z&(255<<16))>>16;
var b = (z&(255<<8))>>8;
var c = (z&255);
if (a!=0) t+=String.fromCharCode(a);
if (b!=0) t+=String.fromCharCode(b);
if (c!=0) t+=String.fromCharCode(c);
return t;
}

function _atob(base64) {
var t = "";
var z = 0;
var j = 0;
for (var i=0; i<base64.length; i++) {
var c = base64.charAt(i);
z<<=6;
if (c=='=') continue;
z+=b.indexOf(c);
j++;
if (j==4) {
t+=f2t(z);
z=0;
j=0;
}
}
t+=f2t(z);
return t;
}



Podobne postybeta
Raspberry Pi + no-ip.org ;-)
Lenie ;-)
Z NMEA do KML (chyba najbardziej kryptyczny tytuł postu jak stworzyłem ;-))
2016 będzie rokiem "nietypowym"
Spectre powinno działać nawet w Java'ie ;-)

czwartek, maja 14, 2020

Wygoda a post-PC ;-)

Zdecydowanie nie jestem jednak post-PC ;-)

Przed snem postanowiłem dodać kilka rzeczy do swojej listy ToDo.
Łatwiej mi było wziąć mojego leżącego teraz przy łóżku Macbook Air i używając Alfreda dodać kilka rzeczy do tej listy, niż zrobić to samo przy pomocy telefonu.

Jednak duża klawiatura, której mogę używać bezwzrokowo jest o wiele lepsza od wszelkich dotykowych wynalazków ;-)

Dla mnie jak mam wybierać komputer i komórka to zawsze jednak będzie komputer.... przynajmniej na razie ;-)



Podobne postybeta
Rok Darwina czas zacząć :-)
"Praca" na stojąco i Chromebook - to działa :-)
Post PC i nowa klawiatura ekranowa
Bloggeroid na Chrome OS - to działa... czasami ;-)
Czy jesteś już post-PC?

czwartek, maja 07, 2020

"Aplikacyjka" ;-)

W pracy kilka razy dziennie kopiuję kilka kawałków URLa, i później je "formatuje" wrzucając w konsoli AWSa.
I już mnie to nudzi ;-)
Zapragnąłem "narzędzia" które będzie to robiło za mnie. 
Najlepiej jakby to było coś gotowego, co można przekształcić.
Ale tak poszukałem i nie znalazłem niczego prostego, czego bym się nie musiał uczyć.

Więc napisałem sobie aplikacyjkę w JavaScript'cie z użyciem Electrona.

Działa tak, że siedzi w zasobniku systemowym jak na nią kliknę to bierze zawartość schowka i konwertuje ją na taką jaką bym chciał.

Aplikacyjka ma 33 linie JavaScriptu. I waży 121 MB ;p
Takie są uroki ciągnięcia za sobą całego Chrome'a ;-)



Podobne postybeta
Electron + Airly = wskaźnik jakości powietrza w pasku ;-)
Google Docs i Zoho niszczą wzory
Androidujemy sobie ;-) ale tak niemrawo
Android + Google Docs OCR = zestaw dla szpiega? ;-)
Raport z prac nad ubogą krewną Playtypusa, czyli Kolczatką :-)

wtorek, maja 05, 2020

Czego Apple może się nauczyć od Google?

Właśnie mój Pixel 4 XL się updatuje do nowej wersji Androida.
Robi to w wyśmienity sposób, pobiera sobie kod przez sieć, po czym instaluje go na drugiej partycji, robi jeszcze na niej "optymalizację aplikacji" (co chyba tak naprawdę oznacza kompilację ;-)) i po wszystkim proponuje, że zresetuje urządzenie. Robi reset i po parudziesięciu sekundach telefon znów działa.

Jak to wygląda w produktach Apple takich jak iPad Pro i Macbooki? Urządzenie ściąga poprawkę i pyta czy robić instalację jeśli tak to robi reset i teraz potrafi się kilka razy zresetować, przez parę minut udaje martwe (rada dla kogoś kto updatuje swojego iPada albo Macbooka, jak klikniesz Yes i zacznie się reset to wyjdź z pomieszczenia i wróć za 30-40 minut bo inaczej możesz mieć zawał jak widzisz, że urządzenie ma jabłuszko, nagle wszystko znika i przez minutę czy dwie wszystko wygląda jak martwe. Próbujesz przyciskać guziki i nic, wszystko leży).

Więc Apple mogłoby się od Google nauczyć updatów. Google to po prostu zrobiło dobrze.

Aplikacje Google są też wygodniejsze w użyciu.

Mam Apple TV+ (dostałem z "maleństwem" na rok) i naprawdę nie wiem jak to działa.... na Roku udało mi się znaleźć coś w aplikacji, ale zawsze miałem problemy.
Google Play Movies jest o wiele wygodniejsze, YouTub też.

Google Drive bije iCloud. Google Photos biją Apple Photos.

Google jest też o wiele bardziej otwarte. Używam ich produktów na Androidzie, iOS, macOS i Linuksie i powiedzmy na Windows (ale to przez Parallels) i wszędzie działa to podobnie.
Apple TV+ na Androida nie ma, do tego nie działa z Chromecastem, działa na Roku.

Że Google się może wielu rzeczy nauczyć od Apple to też wiadomo ;-)


Podobne postybeta
iCloud jest podły....
Windows mnie jednak nie lubi ;-)
Nexus S zawstydził mydelniczkę ;-)
Myjnia
Kilka rzeczy, które chciałbym zobaczyć w produktach Google...

poniedziałek, maja 04, 2020

Ostatnie wolne wybory już były?

No i w tym tygodniu się okaże czy ostatnie wolne wybory już mieliśmy.

Scenariuszy jest kilka.

Ustawa o prezydencie z koperty przechodzi => ostatnie wolne wybory już mieliśmy.
Ustawa nie przechodzi => tu zależy.

Jeśli ustawa nie przechodzi to mamy scenariusze:

PiS kurcgalopkiem donosi na swoją ustawę o tarczy antykryzysowej czy czymś podobnym w której zabronił PKW przeprowadzić wybory i kontrolowany przez PiS TK uznaje zapis za niekonstytucyjny, więc PKW ma zorganizować wybory. Tylko trzeba będzie pokombinować z datą => ostatnie wolne wybory już mieliśmy

PiS wprowadza stan wyjątkowy (a nie klęski żywiołowej) => ostatnie wolen wybory już mieliśmy

PiS wprowadza stan klęski żywiołowej => nie wiadomo, jest szansa na wolne wybory.


Szczerze jak PiS wygrał w 2015 roku i zaczął majstrować przy TK to się spodziewałem najgorszego, ale chyba jednak nie tak szybko. Okazuje się, że jestem w swoim pesymizmie szaleńczym optymistą ;-)


Podobne postybeta
2016 będzie rokiem "nietypowym"
Głosowanie korespondencyjne jest tak dziurawe, że aż szkoda gadać - z perspektywy IT
Skrócona wersja zmian w ustroju Polski po wyborach w 2015 roku
Geolokalizacja ma problemy
PROPFIND, czyli jak przechytrzyć HttpURLConnection

niedziela, maja 03, 2020

Czy COVID-19 spowoduje powrót do identyfikacji przez odcisk palca? ;-)

Powiedzmy wprost, używanie teraz na zewnątrz telefonu który odblokowuje się przy pomocy FaceID czy jakiegoś jego odpowiednika nie jest proste ;-)
Jak zwykle nigdy nie muszę wpisywać PINu to teraz jestem o to dość często proszony gdy jestem na zewnątrz ;-)
I to nie tylko gdy próbuję zajrzeć do apki która używa nazwijmy to FaceID do autentykacji, ale nawet jak po prostu chcę przewinąć podcast ;-) zwykle ratuje mnie jednak to, że w Androidzie można mieć przypisane niektóre urządzenia jako "godne zaufania", u mnie to są AirPods Pro i zegarek ;-)

Google Photos nie umie też skojarzyć zdjęcia ze mną ;-)


Sprawdziłem ludzie mnie nadal rozpoznają ;-)

Ciekawe czy ta epidemia spowoduje powrót do FingerID? ;-)
Chociaż odciski nie działają dobrze w zimę bo wtedy znów są rękawiczki....


Podobne postybeta
Nowa metoda autoryzacji czy też innej autentykacji zbliża się do Bloggeroida :-)
AirPods Pro rządzą
Tak sobie, czyli co bym chciał lub co mnie męczy ;-)
Bycie człowiekiem jest dziwne.
Jak utrudnić życie złodziejom kart ;-)

poniedziałek, kwietnia 27, 2020

Zakryj gębę....

Tak sobie chodzę po Krakowie (głównie po bulwarach) i często widzę ludzi bez zakrytej twarzy, albo takich którym nos wystaje.

Nie wyglądają jak zamaskowany terrorysta ;-)

(zamaskowany terrorysta ;-))

Pewnie wielu z nich odpowie zapytanych, że "się nie boją, bo są młodzi", ale cały problem polega na tym, że noszenie masek nie chroni noszących, a chroni przed noszącymi.

Jak ja noszę maskę nie po to żeby się nie zarazić, do tego potrzebowałbym specjalnej maski medycznej, której zapewne nie umiem użyć.
Noszę ją bo jeśli się tak złożyło, że jestem zarażony to zmniejszam szansę zarażenia innych.

Czyli człowieku drogi, zakryj gębę, nie dla siebie, dla innych ;-)



Podobne postybeta
Czemu nie korzystam z hulajnog elektrycznych?
Windows++ ;-)
Kiedyś
Głupie użycie twierdzenia Bayesa.....
Prawicowa logika ;-)