niedziela, lipca 10, 2022

Bookmarklet do robienia CSV z obligacjami i ich oprocentowaniem ;-)

[Update]
Niestety złe ludzie od strony z obligacjami mieszają z IDkami, więc mój piękny skrypt na jakiś czas przestał działać ;-) Najpierw go zupdatowałem przez poprawienie po prostu ręcznie na nowe IDki, teraz dodałem "mechanizm" do znajdowania IDików ;-)
Do tego dodałem nowy bookmarklet do pobierania ważonego oprocentowania ;-) [czyli zbieramy procent ze wszystkich emisji, później liczymy średnią ważoną oprocentowania, gdzie wagą jest kwota zakupu, dzięki temu mamy takie pi razy oko pojęcie ile w roku zarobimy]
[Koniec update]

Jeśli ktoś kupuje polskie obligacje to wie, że strona do tego ssie od strony usability ;-)
Jest tam np. możliwość pobrania pliku Excela, ale po pierwsze to Excel ;-) po drugie, nie ma tam w ogóle informacji o oprocentowaniu.
Żeby zobaczyć oprocentowanie trzeba zaś wykonywać karkołomne operacje i próbować najeżdżać na nazwę emisji by może zobaczyć oprocentowanie:


I normalnie chcąc zobaczyć jakie mam "średnie" oprocentowanie, najpierw pobierałem plik Excela, później przechodziłem przez kolejne emisje i sobie przepisywałem ostatni numerek...
Strasznie to było męczące.

Stąd dziś prezentuję ten oto bookmarklet ;-)
(przeciągnij go do bookmarków, wejdź na stronę od obligacji, zaloguj się, zmień może liczbę wyświetlanych obligacji i kliknij na ten bookmark, powinna Ci przeglądarka zaproponować pobranie pliku CSV z nazwą obligacje.csv, aha w tym CSV za separator dziesiętny robi kropka, nie przecinek, więc niektóre programy mogą mieć problem, np. Numbers na macOS upiera się, że ponieważ to Polska to ma być przecinek... więc zmieniłem sobie w całym systemie bo ja uznaję tylko kropkę ;-))

Którego kod wygląda mniej więcej tak:

// sadly this part is only for hacky way of finding what are Ids
function findIdLambda(elem,list,func) {
var id = elem.id;
if (id && func(id)) {
list.push(id);
}
for (var i=0; i<elem.childNodes.length; i++) {
var child = elem.childNodes[i];
findIdLambda(child,list,func);
}
}

function findId(elem,idStart,list) {
findIdLambda(elem,list,x => x.startsWith(idStart));
}

var list = [];
findId(document,"stanRachunku",list);
var id = list.filter(x => x.endsWith("data")).filter(x => x.indexOf("idt")!=-1)[0];
var no = id.split("idt")[1].split("_")[0]*1;
var idxNo = no;

function findQtipId(pattern) {
var list = [];
findIdLambda(document,list,x => x.startsWith(pattern));
return list[0];
}
//end of hacky way for finding proper Ids

const mouseoverEvent = new Event('mouseover');
function amount2number(s) {
var nbrsp=String.fromCharCode(160);
return s.replace(nbrsp,"").replace(',',".").replace(nbrsp+"PLN","");
}
function getPercents(idx) {
var id = findQtipId("qtip-stanRachunku:j_idt"+idxNo+":"+idx+":j_idt");
console.log(id);
var element=document.getElementById(id);
var data=element.innerText.split("%");
var res = [];
for (var i=0; i<data.length; i++) {
var line=data[i];
line=line.trim();
if (line.length==0) continue;
var l=line.split(" ");
res.push(l[l.length-1]);
}
return res;
}
var table=document.getElementById("stanRachunku:j_idt"+idxNo+"_data");
var data=table.childNodes;
var content="id,number,value,actual value,cycle,%,redemption date\n";
for (var i=0; i<data.length; i++) {
var line = data[i].childNodes;
// ugly hack... but without this it will not be visible, and we would not be able to get percents
line[0].firstChild.dispatchEvent(mouseoverEvent);
var emId=line[0].innerText;
var number=line[1].innerText;
var value=line[3].innerText;
var actual=line[4].innerText;
var redemption=line[5].innerText;
var percents=getPercents(i);
var cycle = percents.length;
var percentage = percents[percents.length-1];
var l=[emId,number,amount2number(value),amount2number(actual),cycle,percentage,redemption];
var cl = "";
for (var j=0; j<l.length; j++) cl+=l[j]+",";
cl=cl.substring(0,cl.length-1);
content+=cl+"\n";
}
console.log(content);
var blob = new Blob([[content]],{type: "text/csv"});
console.log(blob);
var downloadObj = window.URL.createObjectURL(blob);
console.log(downloadObj);
var a = window.document.createElement('a');
a.href = downloadObj;
a.text = "obligacje.csv";
a.download = "obligacje.csv";
a.click();

Jak działa? ;-)
Prosto ;-)
Najpierw szuka tabelki z danymi, dziwnie na wszystkich kontach na jakich sprawdzałem (dokładnie 2 ;-)) tabelka zawsze nazywa się "stanRachunku:j_idt138_data". Później idzie przez jej linie i zbiera dane, czyli nazwę emisji, liczbę obligacji, ich wartość nominalną, wartość w chwili obecnej, datę wykupu i numer roku, oraz oprocentowanie.
Te dwie ostatnie wartości bierze hackiem ;-) okazuje się, że trzeba najechać na nazwę emisji by w ogóle pojawił się tooltip który pokaże interesujące nas wartości, po to jest linia:
  line[0].firstChild.dispatchEvent(mouseoverEvent);
która to linia wysyła event mouseover do elementu i wtedy pojawia się odpowiedni tooltip, który sobie pobieramy w getPercents ;-) 
Na końcu tworzony jest plik CSV i link do jego pobrania, który się sam z siebie klika ;-)
Wtedy przeglądarka proponuje nam pobranie danych :-)
Jedna uwaga, to są zawsze dane z aktualnej strony... więc jak ktoś ma więcej niż 20 emisji to dobrze zmienić liczbę widocznych na danej stronie na 50, a jak ktoś ma więcej niż 50 to trzeba niestety się bawić w klikanie bookmarkletu na każdej podstronie.
Nadal to jednak prostsze niż "stara" metoda ;-)


Bookmarklet by policzyć Procent z obligacji, zrobiony przy pomocy Bookmarklet Makera


Podobne postybeta
Ile w tym i przyszłym miesiącu z odsetek za obligacje?
Ile z obligacji... odsłona 2 ;-)
[Updated] Czytanie Pocketa ;-)
Ściana, czyli rozbijam się na onclick ;-)
Go dla Java'owca ;-) odcinek 2 "kontenery dwa ;-)"

niedziela, czerwca 26, 2022

Java szybsza na M1 jako X86 niż jako ARM ;-)

I okazuje się, że przynajmniej w pewnych sprawach, np. w całkowaniu numerycznym ;-) Java na M1 jest szybsza gdy działa w trybie emulacji x86-64, niż gdy działa w trybie aarch64 (czyli "natywnym" ARMowym dla M1).

Odpaliłem na laptopie z M1 programik do całkowania numerycznego (w obszarze od -10 do 10, w prawie 21.5 mln kroków, w pętli która sprawia, że wykonuje się to 10 razy).

Na Macbooku 16 z M1 z 2021 roku.

No i dla Java 11 (od Azul) wyniki są takie:

x86-64: 5611 ms
aarch64: 7528 ms

Podobne wyniki są dla Java 18.

Ciekawiej się robi dla Oracle'owej Java 18 ;-)

x86-64: 5811 ms
aarch64: 31340 ms

Czyli w przypadku JVM od Oracle'a jest wersja dla ARMa o 5.4 raza wolniejsza ;-)

Nie umiem powiedzieć czy chodzi o różnice w implementacji HostSpota czy może o jakiś kod natywny.

Ale i tak intrygujące :-)





Podobne postybeta
W końcu dane z M1, które w Java'ie mówią, że to jest ARM :-)
Dla Java'y Apple Silicon M1 to jednak nadal x86 ;-)
Wszędobylska Java :-)
JNA, czyli w Java'ie też można :-)
"os.arch", "os.name", "sun.arch.data.model" co to jest i co pokazuje na jakiej maszynie i OSie? ;-)

sobota, czerwca 25, 2022

DevoXX 2022

No i był DevoXX :-)

Było całkiem fajnie, znów spotkałem ludzi z którymi pracowałem w innych firmach, albo takich którzy pracują już w innych firmach ;-)

Spotkałem też ludzi z mojej przyszłej firmy ;-)

Tak patrząc na konferencje stwierdzam, że jak człowiek zaczyna to chodzi głównie na prezentacje i one są bardzo ciekawe bo wszystko jest nowe.

Z czasem więcej czasu spędza na spotykaniu ludzi, których zna z innych firm ;-)

W końcu prezentacje są tylko dodatkami do spotykania ludzi ;-)

Ale i tak nic nie pobije DevoXX 2019 i towarzystwa ;-)




Podobne postybeta
Konferencje są przereklamowane
OOo2GD 1.8.1 - i znów poprawki
Po Devoxx'ie
Chce komputerów, które będą "seamless"
Co umie OpenOffice.org2GoogleDocs ;-)

piątek, czerwca 10, 2022

Telefon jako repeater WiFi ;-)

Właśnie dokonałem odkrycia ;-)

Można używać telefonu jako repeatera WiFi ;p

Android od pewnej wersji (w tym telefonie jest Android 13 w wersji tej testowej, ale na 100% działa to też na Androidzie 12, a wydaje mi się, że jeszcze wcześniej na wcześniejszych też to miałem) pozwala na dzielenie się Internetem nie tylko z sieci komórkowej, ale też z sieci WiFi ;-)

No i w miejscu gdzie teraz jestem Internet jest taki sobie.... w moim pokoju go praktycznie nie ma, więc przez ostatnie parę godzin używałem telefonu jako HotSpota i dzieliłem się moim Internetem z NJU...

Ale coś mnie naszło i włączyłem HotSpot w drugim telefonie, zaniosłem go do przedpokoju w którym spokojnie łapie "miejscowy" Internet, podłączyłem do tego lokalnego... i nagle mam Internet w komputerze podpiętym do mojego HotSpota, ale to nie jest ten Internet z NJU, a "miejscowy" dla którego telefon robi za swoisty repeater ;-)




Podobne postybeta
Pixel i iPhone mają chyba inne "filozofie" pracy z radiem ;-)
Migracja
USB-C w iPhonie dobra rzecz :-)
Przydatne i nieoczywiste "narzędzia" czy rzeczy, które pomagają w podróżach
Kolejny "projekt" na GitHub ;-) LocaleSSID

środa, czerwca 08, 2022

Ostatni on-call ;-)

Ponieważ zmieniam wkrótce pracę to zaczynam wypadać z różnych dodatkowych rozrywek, np. od niedzieli z on-call'a i przez to dziś miałem od 1:00 do 13:00 ostatni dyżur na on-call'u ;-)

Który zakończyłem uroczystym odinstalowaniem PagerDuty ;-)


Później odinstalowałem moją aplikacyjkę do pokazywania ile mi zostało czasu do on-call'a i ile czasu na on-call'u ;-)

O tym odinstalowaniu to już miewałem fantazje ;-)



Podobne postybeta
On-call....
Kiedy następny on-call?
A może by tak nosić drugi telefon specjalnie do on-call'a?
Zgubiłem dźwięk...
9 miesięcy bez on-call&#39;a - to jest super :-)

sobota, kwietnia 23, 2022

Uniwersalny zasilacz ;-)

W końcu znalazłem uniwersalny zasilacz ;-)


Ma 100W mocy wiec każdy z laptopów z niego mogę nakarmić :-) [MBP je 68 albo 62W, MBA je do 33W], do tego iPada i telefon, a jeszcze i zegarek ;-)

Jak się ma dwa takie to można jeszcze parę rzeczy ładować w tym samym czasie :-)

Akurat te moje zasilacze mają jeszcze to, że normalnie mają amerykańską wtyczkę, ale mają takie fikuśne nakładki, które zmieniają ją w europejską lub brytyjską.

Z europejską nakładką wygląda to tak:


A bez tak:

I po "wyjęciu" jest to amerykańska wtyczka. Chytre :-)

Moje zasilacze to MINIX NEO P3 100W i mają po 3 USB-C (z czego 2 górne mogą dać max do 100W,  trzeci daje max 20W i dolne USB-A daje do 18W) i jestem na razie dość zadowolony bo na wyjazdach się sprawdzają :-)



Podobne postybeta
Przydatne i nieoczywiste &amp;quot;narzędzia&amp;quot; czy rzeczy, które pomagają w podróżach
W Wenecji ;-)
Instrukcje obsługi do ludzi
Chcę MBP15, ale z klawiaturą ;-)
HD

wtorek, kwietnia 05, 2022

Szaleństwo scyzorykowe ;-)

Kupiłem sobie drugi scyzoryk od Victorinox i jednak chyba ten który kupiłem wcześniej jest bardziej praktyczny ;-)

Bo jak z góry wyglądają podobnie:

Jak się jednak spojrzy z boku zaczyna to troszkę przerażać ;-)

W tym czerwonym ciut przegięli ;-)

Ale jednak na wyjazdy dobra rzecz bo są w nim np. nożyczki :-)



Podobne postybeta
Przydatne i nieoczywiste "narzędzia" czy rzeczy, które pomagają w podróżach
Rząd wykonał swój plan aż w 17% ;-)
W Wenecji ;-)
Chromebook i jego wady
Lepsze formatowanie kodu w Obsidian&#39;ie - trick

niedziela, marca 13, 2022

Sieć w telefonie jest ważna

Dziś w ramach eksperymentu nie używałem Internetu do 15:00... i z nudów policzyłem np. ilość aplikacji/skrótów do aplikacji które mam na ekranie główny.

Wyszło mi 61 skrótów/aplikacji:


Tylko 21 jest w miarę użyteczne bez sieci ;-) i to w wielu przypadkach tylko jak się coś pobierze (nie liczyłem np. Netfliksa, bo niby można pobrać ale zjada dużo miejsca, ale liczyłem np. Spotify, PocketCast, Kindle czy Pocket'a bo tutaj te rzeczy się prawie zawsze same pobierają (no poza Spotify) i idea jest taka by dane synchronizowały się do urządzenia, a nie strumieniowały z sieci).

Trochę mnie to zaskoczyło ;-)



Podobne postybeta
&quot;Odstawianie&quot; telefonu ;-)
Reklamy w podcastach
Robimy nową galerię ;-)
A może by tak zacząć zamykać przeglądarkę? ;-)
Piszę sobie...

poniedziałek, lutego 21, 2022

10 lat temu byłem u Buffy ;-)

Nie da się ukryć, że jestem fanem Buffy the Vampire Slayer ;-)

I 10 lat temu udało mi się odwiedzić miejsca gdzie kręcono serial :-)

Dom Buffy:


(tak wiem, ładnie widać mój brzuszek ;-))

Szkołę Buffy:


I parę innych miejsc ;-)

Mogłem tam być 3 lata wcześniej, ale wtedy jeszcze nie było Ubera ;-) [a te 10 lat temu nie wiem czy był, ale zawiozła mnie tam koleżanka z pracy, która też była fanką Buffy ;-)]

Ogólnie lubię odwiedzać miejsca, które znam z filmów i seriali ;-)




Podobne postybeta
Byłem u Buffy :-)
Me Borat ;-)
Buffy ma 40 lat....
TVP HD - najsmutniejszy program TV
Przenośna wikipedia

niedziela, lutego 06, 2022

Eksperyment

Zrobiłem dziś eksperyment.
Od 10 do 15 miałem wyłączony Internet.
Nie, że nie miałem internetu, a sam wyłączyłem.
Chciałem sprawdzić jak to będzie.
Było trudno, nagle miałem od razu problemy w stylu "Ok, ale które algorytmy sortowania są stabilne" i podobne.
W kolejny dzień mam plan znów nie mieć dostępu do Internetu od 10 do 15.

Co chce sprawdzić?
- czy umiem wytrzymać bez Internetu
- i czy z czasem może w ogóle przestanie mi brakować bycia ciągle on-line?
- czy jestem w tym czasie bardziej skupiony? Mam wrażenie, że im więcej informacji jest na wyciągnięcie ręki, tym bardziej fragmentaryczna i taka naładowana silną dozą emocjonalności jest. Kiedyś umiałem czekać na maila od kogoś 1-2 dni, czasem dłużej, a na list nawet dłużej, teraz jak na Slacku, Signal czy Telegram ktoś mi nie odpowiada w ciągu paru minut to jestem zły i zniecierpliwiony.
- czy zajmę się czymś bardziej sensownym w tym czasie?

Zobaczymy jak długo będzie mi się chciało sprawdzać.
To jest pierwszy raz gdy próbuje, bo myślałem o tym więcej razy, ale wtedy była obawa, że a nóż ktoś napisze do mnie coś na Telegramie? (Dlatego na jakiś czas aż wyłączyłem Telegrama żeby nie wkurzać spamowaniem ludzi (jednej sztuki tak naprawdę), bo choć nikt nie narzekał to zacząłem już interpretować jako informację przerwy między odpowiedziami i tak dalej... A w 90% przypadków odpowiedź kilka godzin po przeczytaniu wiadomości to po prostu wygoda w stylu "odpowiem jak będę mieć czas, bo tak to szkoda pisać", ale człowiek sobie umie dopowiedzieć miliony rzeczy, szczególnie taki z dużą wyobraźnią i wolnym czasem.)

posted from Bloggeroid



Podobne postybeta
Windows - system, który się ciągle updatuje....
Praca z komputerem na stojąco...
Plusy dodatkie i plusy ujemne, czyli co może być złego, a co dobrego w AppInventorze :-)
USB-C w iPhonie dobra rzecz :-)
Moje G1 jest "chore", zamiast 30 godzin, wytrzyma chyba 90 godzin na baterii bez ładowania ;-)