Podobne postybeta
Metapost o pisaniu posta, albo moje próby z Obsidianem
Bestyjka - nowy mac podróżny ;-)
Jak się czuje włączając Windowsa...
Przyroda...
Mój Macbook ma 4 lata
Jakieś 2 tygodnie temu do Polski wszedł SkyShowtime.
Od razu udało mi się zainstalować jego apkę na iOS i iPadOS, ale na Androidzie mi pisało, że nie jest dostępna, to samo w Chromecast z Google TV.
Próbowałem wiele razy, na kilku urządzeniach i nic.
Wychodziło, że nie ma go w Polsce i koniec. Nie mamy pańskiego płaszcza i co nam pan zrobi? ;-)
Wczoraj więc zacząłem zabawy z sidelodem ;-)
Dla Androida to był błysk ciupagi, wejść na APK Mirror, pobrać, zainstalować, wcześniej tylko zaznaczyć, że z tej apki wolno instalować aplikacje spoza Play Store.
Do logowania nawet nie musiałem podać usera i hasła bo sam sobie je wyciągnął z Chrome.
W instalacji z sideloadem na Chromecast with Google TV musiałem posiłkować się ChatGPT ;-)
Trzeba było pobrać apkę z APK Mirror na telefon albo komputer, później na Chromecast with Google TV zainstalować specjalną apkę, która robi serwer HTTP i pozwala wrzucić pliki... długo się nie chciał ten APK wrzucić, w końcu trzeba go było tam otworzyć co też nie chciało działać... z pół godziny wcześniej szukałem opcji na akceptację instalacji spoza sklepu i nie znalazłem...
Ale w końcu udało mi się jakoś zmusić system do próby instalacji APK i wtedy mogłem zaznaczyć, że zgadzam się by ta apka mogła instalować aplikacje spoza sklepu.
A wszystko po to bym mógł im te 13 PLN miesięcznie płacić ;-)
Lubię bity.
Pamiętam, że te lata temu zastanawiało mnie jak komputer liczy.
Początkowo wydawało mi się, że robi to w jakiś głupi sposób, np. że dodawanie to jest inc na jednej liczbie i dec na drugiej i że mamy pętlę aż ta druga będzie 0 (mówimy o liczbach dodatnich tutaj).
Później do mnie dotarło, że tego się tak nie robi, że się da liczyć np. pod kreskę na bitach :-)
Tylko, że zamiast na każdym bicie robić tą operację oddzielnie robi się je na wszystkich jednocześnie ;-)
No bo jak popatrzeć na wyniki dodawania 2 bitów to mamy:
| bit 1 | bit 2 | + | carry |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| bit 1 | bit 2 | ^ |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| bit 1 | bit 2 | & |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
public int add(int a, int b) {
while (b!=0) {
var c = a&b;
a^=b;
b=c<<1;
}
return a;
}
Teraz jak mamy dodawanie to wystarczy wiedzieć, że odejmowanie to dodawanie liczby o przeciwnym znaku ;-) i tego, że liczba plus jej element odwrotny to 0 ;-)Wtedy jasne się staje jak są reprezentowane liczby ujemne, czyli jako negacja wszystkich bitów... ale to by było za mało bo wtedy 0 miałoby odwrotność... i 1 + -1 by było wszystkimi zapalonymi bitami ;-) Więc jest negacja wszystkich bitów +1 ;-)Czyli:-1 = -(0001) = ~(0001)+1 = 1110+0001 = 1111stąd -1 + 1 = 1111 + 0001 = (1)0000 (gdzie to (1) to carry które jest wyniesione poza liczbę :-)).Stąd możemy powiedzieć, że odejmowanie b od a to dodanie do a -b ;-)No i mamy:public int minus(int b) {
return add(~b, 1);
}
public int sub(int a, int b) {
return add(a, minus(b));
}
private int sig(int a) {
return new int[]{1,-1}[a>>>=31];
}
public int mul(int a, int b) {
var sum = 0;
while (b!=0) {
if ((b&1)==1) sum=add(sum,a);
a<<=1;
b>>>=1;
}
return sum;
}
public int div(int a, int b) {
// c = a/b => a=b*c
if (b==0) throw new ArithmeticException("Div by 0");
var sigA = sig(a);
var sigB = sig(b);
a=mul(sigA,a);
b=mul(sigB,b);
var d = 1;
while (a>=mul(b,d<<1) && mul(b,d<<1)>0 && (d<<1>0)) {
d<<=1;
}
var c = 0;
while (d>0) {
var mul = mul(b, c | d);
if (a>=mul && mul>0) c|=d;
d>>>=1;
}
c=mul(c,mul(sigA,sigB));
return c;
}
Na razie widzę, że ChatGPT jest dobry w:
ChatGPT to takie miss and hit ;-) ale w sprawach związanych z programowaniem bywa bardzo przydatny.
W pracy mam tak, że mam bardzo dużo danych w JSONie, tak przeciętnie koło 7.5 GB na katalog.
W macOS nie ma przezroczystej kompresji folderów więc jest problem z szybkim znikaniem dysku.
Ja te pliki zwykle przetwarzam jakimś Pythonem.... więc wpadłem na pomysł, że jakby były potraktowane GZIPem... 44 tysiące plików ważące 7.5 GB stają się 300-400 MB w 44 tysiącach plików ;-) (z różnych powodów chcę by to były oddzielne pliki, ale po prostu mniejsze).
No i nie chciało mi się tego ręcznie zrobić, więc dałem ChatGPT prompta, napisz w Pythonie program, który przeleci przez podfoldery aktualnego folderu i jeśli w podfolderze jest więcej niż 500 plików to skompresuje każdy z tych plików GZIPem, nie kompresuj już skompresowanych plików ;-)
Po jakimś czasie poprosiłem jeszcze by zrobił to na wielu wątkach.
No i stworzył mi coś takiego:
Nie znoszę pracy zdalnej ;-)
Dlatego kiedyś przyjąłem, że ponieważ w biurze chodzi się do kuchni, idzie się na obiad i takie tam to czas w pracy w biurze i w domu liczą się inaczej.
Mój sposób był taki: