
Z dnia życia kuca, odcinek 3
Desktopowy instalator nieważne czego, ważne że nasz, że przez nas zrobiony i to nie jest nasze ostatnie słowo. Dodaję ficzery. Super, wszystko działa. Testuję, odpalam kilka razy. Kurde, coś jest nie tak. Jak klikam cancel, to apka się wiesza na dłuższy moment. Szperam, szperam. Cofam się kilka commitów wstecz, ale nadal to samo, a przecież na 100 % działało wcześniej.
Okazuje się, że procedura zakończenia instalacji obejmuje edycję pliczku, który ma jakieś 10 kB. Podmiana jednej linii. Wygląda to mniej więcej tak:
with open(filename, 'r+') as f:
data = f.readlines()
swap_line(data)
f.truncate(0)
f.writelines(data)
Otóż kolega wklepał f.truncate(0)
i hehe pora na CSa :DDD truncate
ucina resztę pliku, tylko że kolega zapomniał przesunąć pozycję file handle'a na początek pliku, więc efektywnie uciął dokładnie nic, tym samym dublując przy każdym wywołaniu jego rozmiar. I tak u mnie z 10 kB zrobiło się w krótkim czasie 12 GB zanim sczaiłem się ocb (:
Wgl fajnie, że to śmiga na produkcji od pół roku xd

wale już 4 posta z rzędu, chyba zamieniam się w ruchena, jescze tylko troszkę bardziej wylewny być muszę

Dziś postanowiłem wydobyć z systemu informację o sile sygnału wifi, bo najwyraźniej to jest wiedza, jakiej użytkownik macOS nie jest w stanie otrzymać ot tak. No to cyk cyk, napisałem jakieś gówno w Swifcie. Okazało się, że można to nawet skompilować, no to skompilowałem. A ponieważ Swifta nie znam prawie w ogóle, to postanowiłem z niego po prostu wystawić takie małe API, a potem się zlinkować do tego z C i elo, pozamiatane. Ale takiego wała, przecież istnieje name mangling, a każdy kompilator robi to inaczej. Na szczęście okazuje się, że jak się wpisze swift demangle <zmanglowana nazwa>
, to dostajemy ładny i przejrzysty identyfikator. Zatem obrałem taktykę generowania assembly z tego swiftowego wrappera. Napisałem skrypt w Pythonie, który mi demangluje te nazwy w asm przy pomocy tego swiftowego czaru i jeszcze wypierdala .globl _main
, żeby linker nie robił spruty. I tak oto mogę się podłączyć na luziku fiku miku do systemowego API praktycznie nie tykając dwóch języków promowanych przez Apple: Objective-C, który ma składnię może nie najgorszą na świecie, ale też nie najlepszą, a poza tym jest już przestarzały oraz Swifta, w którym wszystko trzeba odpakowywać, a goły wskaźnik to jest jakieś zło i żeby się do niego dostać, to trzeba pisać jakieś zaklęcia typu UnsafePointer
(podkreślam UNSAFE), rawValue
, baseAddress
, bo oczywiście jest zanurzony gdzieś na samym dnie xD
W sumie pewnie istnieje jakiś lepszy sposób, ale całkiem nieźle się bawiłem dziś, czuję dobrze kuc.

░░░░░░░░░░░█▀▀░░█░░░░░░
░░░░░░▄▀▀▀▀░░░░░█▄▄░░░░
░░░░░░█░█░░░░░░░░░░▐░░░
░░░░░░▐▐░░░░░░░░░▄░▐░░░
░░░░░░█░░░░░░░░▄▀▀░▐░░░
░░░░▄▀░░░░░░░░▐░▄▄▀░░░░
░░▄▀░░░▐░░░░░█▄▀░▐░░░░░
░░█░░░▐░░░░░░░░▄░█░░░░░
░░░█▄░░▀▄░░░░▄▀▐░█░░░░░
░░░█▐▀▀▀░▀▀▀▀░░▐░█░░░░░
░░▐█▐▄░░▀░░░░░░▐░█▄▄░░░
░░░▀▀▄░░░░░░░░▄▐▄▄▄▀░░░
░░░░░░░░░░░░░░░░░░░░░░░

Krople walerianowe - nie wiem czy działają czy nie, więc se jeszcze nasennego biorę, ale przynajmniej smaczne są