poniedziałek, sierpnia 03, 2020

Jakie by tu zadanie zrobić? ;-)

Raz na jakiś czas lubię zrobić sobie jakieś zadanie koderskie, zawsze jest jednak problem które....
Czasem ktoś podrzuci, innym razem trzeba samemu wybierać.... 
Ja zawsze gdy wybieram to jednak robię szybką analizę czy umiem to zadanie zrobić, czy nie.... i chętniej wybieram te które umiem.
Teraz już będzie inaczej ;p

A wszystko przez narzędzie do losowania zadań ;-)
Losuje zadania z 2 książek "Cracking the Coding Interview" (6 wydanie) i "Elements of Programming Interviews in Java".

Po wejściu na http://www.przemelek.pl/file/taskChooser.html oczom Twoim ukaże się tytuł książki, numer rozdziału i numer zadania do zrobienia ;-)

Fakt, treść zadania "pobieramy" z książki, tak dobrze nie ma żeby samo pokazywało zadanie ;-)

Teraz tylko sprawdzić czy rzeczywiście będę robił więcej zadań....



Podobne postybeta
Słuchawki bezprzewodowe dobre :-)
Ksiązki - nieksiążki ;-)
Ha! Amazon drukuje książki :-)
Nie jestem pewien czy zadania koderskie/algorytmiczne są dobrym elementem rekrutacji
Mniej wredne Google Docs ;-) - zabawy z OCRem część 2

czwartek, lipca 23, 2020

Czas odejść do 1 okienko = 1 telewizor? :-)

OK, to mam teraz 27 calowy monitor 4K.
Fajny jest, immersyjny ;-)

Ale wychodzi na to, że muszę chyba znaleźć nowy sposób na pracę z monitorem ;-)

Bo np. edytor, w którym teraz piszę wygląda tak:


I makabryczna część przestrzeni monitora po prostu jest nie używana ;-)

Żeby nie było rozdzielczość nie jest do końca problemem, bo niby monitor ma fizycznie 3840x2160 pixele, ale że są malutkie to działa tu magia retiny, gdzie pixel nie jest równy punktowi...
Do tego żeby czcionki nie zgłupiały i nie próbowały się rysować w trybie 1 pixel=1 punkt to w macOS można wytłumaczyć OSowi, żeby używał większych czcionek. Łatwiej się wtedy czyta ;-)

Mimo wszystko mój IntelliJ wygląda teraz tak ;-)


I da się na tym pracować, ale tak połowa "telewizora" się marnuje...
Może czas odejść od mojego trybu pracy 1 okienko = 1 telewizor? :-)



Podobne postybeta
Nieszczęście... ale nie takie złe ;-)
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 ;-)
Pixel C - dobry
Cywilizacja migających diod i lampeczek ;-)
Nexus 6

wtorek, lipca 21, 2020

A może by odkurzyć AI? ;-)

Wczoraj usłyszałem, że Toyota buduje "miasto przyszłości", a jej CEO twierdzi, że muszą przejść z bycia firmą produkującą samochody do bycia firmą produkującą oprogramowanie....

Dotarło do mnie też, że mój odkurzacz używa więcej AI niż chyba wszystkie firmy w których pracowałem (OK, może z jednym wyjątkiem) kiedykolwiek zrobiły.

Mam kilka certyfikatów z AI, zrobiłem "specjalizację z DeepLearning" ;-), to Stanford'owe Machine Learning (żeby nie było, to jest tylko Stanford Online) czy to How Google Does Machine Learning.
Więc mogę chyba już twierdzić, że jestem "oczytanym" laikiem i to oczytanie sprawiło, że się sceptyczny zrobiłem do AI, jest nieziemsko dobre w pewnej wybranej sferze, ale poza tym daje ciała.
Ale może czas się z tym sceptycyzmem przeprosić i jednak popróbować?

Próbowałem zrobić kiedyś clickbait detector, użyłem Bayesa i regresji liniowej, skuteczność na szkoleniowych danych była 100%, ale w real world tak sobie to działało.
Nie użyłem sieci neuronowych bo nie miałem pomysłu jak to zakodować, przecież nie zrobię każdego słowa jako wejścia do sieci bo przy 10 tysiącach słów to jest gigantyczna sieć, a i tak gubi kontekst. Niby modele sekwencyjne by mi tu pomogły i robiłem je w ramach DeepLearning.ai, ale zrobić kilka przykładów, a rozumieć jak kodować ficzery to dwie różne rzeczy ;-)

Może więc poza algo i system designem trzeba by było wrócić do nauki o AI? :-)



Podobne postybeta
Clickbait detector ;-) - czyli próbujemy użyć naiwnego klasyfikatora Bayesowskiego do rozpoznawania clickbaitów ;-)
Czemu filmowe AI jest prawie zawsze tak bardzo tępe?
Regresja liniowa w Google Docs
Po Google I/O - TensorFlow, App Maker, Kotlin i Firebase ;-)
Zasada numer 1: sprawdzaj oczywiste

sobota, lipca 18, 2020

strictfp sierota po x87 ;-)

Jest taki zespół 3 słów kluczowych w Java'ie które są używane tak rzadko, że prawie nikt nie wie do czego służą.
To volatile, transient i strictfp.
Dwa pierwsze jeszcze nie są takie całkowicie niezwykłe do użycia, czasem może się zdarzyć, że chcemy mieć zmienną trzymaną w pamięci głównej komputera,  a nie w cache'u, tak by wszystkie wątki/cpu widziały tą samą wartość (volatile to zrobi), i czasem jak używamy serializacji (nie powinno się, ale i tak to robimy ;-)) to są pola których nie chcemy serializować.
Ale strictfp to chyba najrzadziej używane słowo kluczowe w Java'ie (nawet goto jest częściej używane, bo co prawda my go w kodzie nie możemy użyć, ale kompilator może i czasem jak ktoś robi dekompilację kodu to dekompilator potrafi co najwyżej użyć goto w tłumaczeniu ;-)).

Najzabawniejsza jest jednak historia strictfp ;-)

Weszło do Java'y w wersji 1.2 czyli w 1998 roku. Tej wersji Java'y zawdzięczamy kolekcje (czyli od wtedy używanie Vector i Hashtable jest passe ;-)), oraz IntelliJ ;-) bo w Java 1.2 wszedł Swing, a w co trudno uwierzyć IntelliJ jest napisany w Java'ie z użyciem Swinga...

Java gdy była tworzona przyjęła używanie liczb zmiennoprzecinkowych w formacie IEEE 754, co było i jest nadal standardem (choć pokręconym). 
Jednak w tamtym czasie x87 (czyli koprocesory x86) nie zawsze były w pełni zgodne z IEEE 754, niby formalnie były, ale pewne sekwencje operacji mogły być wykonywane tak, że wyniki się trochę różniły między tym co zwracał x86/x87 a co zwróciłoby IEEE 754.
Z tego też powodu Java zawsze dbała o to by obliczenia zmiennoprzecinkowe były zgodne z IEEE 754.
Ale to oznaczało, że obliczenia były wolniejsze i programiści nie byli zachwyceni.
Dlatego Sun postanowił zmienić specyfikację JVM, tak że JVM nie wymaga tak ścisłego przestrzegania IEEE 754.... do czasu gdy metoda (sama, albo przez klasę czy interfejs) nie zostanie oznaczona jako strictfp, wtedy wszystkie operacje w takich metodach muszą być zgodne z IEEE 754.
Oczywiście Intel dość szybko zauważył, że jego procesory mogą tu powodować pewne problemy i wprowadził w nich zmiany, które sprawiły, że obecnie arytmetyka z strictfp i bez daje takie same rezultaty (przynajmniej zwykle ;-)).

Ja wiem, że w swoim kodzie nigdy nie użyłem strictfp, jak mi się wydaje nie pracowałem też nigdzie z kodem który używałby strictfp.
W samym JDK Java'y strictfp jest użyte w 2 plikach ;-) w FdLibm.java i w StrictMath.java, łącznie w 6 metodach :-)




Podobne postybeta
Goto Go ;-)
Refleksje i serializacja w Java'ie - podstawy i obalanie mitów ;-)
GCJ mnie przerosło ;-)
Moc obliczeniowa
Java na Raspberry Pi zaskakuje ;-)

czwartek, lipca 16, 2020

Nieprzewidziane konsekwencje blokowania sobie dostępu do różnych stron kradnących czas ;-)

Tak sobie od jakiegoś czasu blokuję czy bardziej opóźniam dostęp do pewnych stron (więcej o tym w moim poście o diecie informacyjnej przed wyborami ;-)) i to ma smutne konsekwencje ;-)

Zaczyna do mnie docierać jak rzadko używam komputera do czegoś produktywnego ;-)

Skończyłem pracę i przeszedłem z firmowego komputera do prywatnego, i po chwili widzę czarny ekran bo do mnie dociera, że próbuję wejść na Facebooka albo stronę z newsami ;-)

A kupka przypadkowych książek na biurku czeka....

kupka "przypadkowych" książek przy biurku...

Komputery są głupie.... ;-)


Podobne postybeta
Ewolucja Buzz Troll Remover'a ;-) - czyli nad czym teraz pracuję
TVP Kultura - uświadamiacz ignorancji ;-)
Nie bądź jak miś koala....
Dieta informacyjna przed wyborami
Chyba czas na cyfrowy detoks ;-)

Soft lepszy niż dobry zwykle nie jest lepszy ;-)

Jedna z najważniejszych lekcji w programowaniu i tworzeniu softu jako takim jest tak "Lepsze jest wrogiem dobrego, i nie należy zostawiać luźnych końców" ;-)

Mówiąc inaczej, z iściem na produkcję trzeba być bardzo konserwatywnym. Nigdy nie należy dodawać czegoś na ostatnią chwilę. Bo to zwykle ugryzie. 

Lepiej poprawić coś na produkcji jak się zobaczy, że to jest błędem, niż antycypować błędy w stylu "a co jak nie będzie X skonfigurowane, dodajmy sobie sprawdzenie w trakcie operacji i potraktujmy usera komunikatem"... a później się okazuje, że komunikat pojawia się co 2 raz opcja jest użyta, ale nie dlatego, że X jest nie skonfigurowane, ale dlatego, że infrastruktura nie pozwala na połączenie za pierwszym razem, a nie ma retry ;-)

Nigdy nie należy też dodawać ficzerów "bo można", ani takich, które są zbyt trudne do zrozumienia.

User ma mental model w głowie tego z czym pracuje, trzeba się poruszać w tym modelu. Wyjście poza model powoduje, że użytkownik się zgubi i będzie uważał, że soft jest popsuty.



Podobne postybeta
Porzucić książkę czy nie? Oto jest pytanie ;-)
Bardzo testowa wersja OOo2GD 1.7.0, która w porywach działa nawet na MacOS ;-)
Lepsze jest wrogiem dobrego
Jak zostać wrogiem wolności słowa ;-)
Maniacki pomysł na inteligentny dialer ;-)

środa, lipca 15, 2020

Ehh... I po co nam te wszystkie algorytmy i struktury danych? ;-)

Bądźmy szczerzy większość czasu* programista spędza na pisaniu prostego kodu, który jest wariacją na temat "weź dane w jednym formacie, wypluj w innym", albo "weź dane, wrzuć do bazy", "weź z bazy, wyrzuć na ekran".

OK, możemy robić stada microserwisów, ale one de facto też przerzucają po prostu dane między sobą.

Ale raz na jakiś czas zdarza się coś bardziej niezwykłego.

W jednej firmie pisałem w Prologu ;-)
Kolega napisał mechanizm do wnioskowania co testować na podstawie zmian w kodzie, ja to troszkę dozbroiłem w to, że np. potrafiło stwierdzić na podstawie zmian w kodzie źródłowym co się zmieniło i dzięki temu mogło zawęzić poszukiwania.
Ten prolog w końcu jednak robił chyba głównie jakieś proste wyszukiwanie w grafie....

W kolejnej firmie też najdalej doszedłem chyba do grafów, i może małego LRU.
Grafów, a dokładnie BFS (choć próbowałem najpierw DFS) używałem do szukania najbliższego punktu gdzie można wrzucić koszyk na sieć konwojerów.... (w JavaScript ;-)), albo do tego by znaleźć powiązania między fragmentami kodu (w Pythonie i JavaScript), albo graf dependencji (JavaScript).
Najwięcej było tego BFSa w mojej wersji code forensics...

LRU napisałem w Java'ie i jego głównym, jeśli nie jedynym celem było działanie ciut inne niż LRU ;-) bo nie miał to być cache, ale po prostu mechanizm który miał pilnować żeby nam nikt nie był w stanie atakować aplikacji próbami logowania zbyt częstymi (pomiędzy 3 nieudanymi logowaniami miało minąć 10 minut, ale nie chcieliśmy żeby nam ktoś zawalił pamięć rzucając losowe requesty, więc był limit ilości prób logowania które śledziliśmy (wszyło LRU).

BFSa używałem jeszcze do kopiowania obiektów... ale moja zmiana była głównie na blokowaniu tego, a i pomogłem trochę w kawałku który miał za zadanie wyszukiwać wśród obiektów obiektu z jakimś łańcuchem...

Wcześniej miałem parsowanie SQLa, budowanie relacji i regeneracja SQLa... 
I sortowanie topologiczne ;-) (brałem serię insert'ów do bazy i wrzucałem tego kopię do innej, ale zmieniając IDki, nie znając tych IDików i ich nazw).

Całkowanie numeryczne, chociaż tak naprawdę to było po prostu sumowanie zakresów z miernika...

Reszta to rzeczy, które bez większych problemów można zrobić listami, setami, albo mapami... i to zwykle najprostszymi...

Najwięcej ciut bardziej wyszukanych algorytmów napisałem chyba na rozmowach ;-)

To jest ciut smutne.


* - co by mogło sugerować, że ja już programistą do końca nie jestem... bo mam coraz częściej wrażenie, że większość czasu spędzam na spotkaniach ;-)





Podobne postybeta
Dziś programista ma być teoretycznym algorytmistą, a praktycznym kleistą ;-)
Cukierki, radosny chaos i takie tam, czyli Przemkowe rojenia ;-)
Jestem anonimowym programistą....
A tak sobie ;-)
Nie inicjalizuj rozmiaru kolekcji...

wtorek, lipca 14, 2020

Ha! Amazon drukuje książki :-)

Od lat miałem Cracking the Coding Interview, ale okazuje się, że moje wydanie było już dość stare więc zamówiłem nowsze.


Ależ jakie było moje zdziwienie gdy z tyłu zobaczyłem coś takiego:


Co ciekawe książka którą kupiłem już ponad rok temu, też była tam drukowana :-)
O ta:

Ale jak sprawdzałem to inne książki w stylu beletrystyki czy podobnych nie są tam drukowane :-)
Ale chytre, to trzeba przyznać. Zamiast marnować miejsce na trzymanie książek, mogą je sobie drukować gdy jest potrzeba :-)



Podobne postybeta
Jakie by tu zadanie zrobić? ;-)
Słuchawki bezprzewodowe dobre :-)
Ksiązki - nieksiążki ;-)
Hackowanie dysku ;-)
Części samochodowe

poniedziałek, lipca 13, 2020

Nie podobają mi się wyniki wyborów

W końcu poznałem wynik wyborów.
Jak się można domyślić nie podoba mi się, takiego się spodziewałem, ale na inny miałem nadzieję.
Przeraża mnie to, że różnica to było trochę ponad 400 tysięcy głosów i to, że linia podziału leci niemal klasami społecznymi.
Lepsza chyba by była polaryzacja, która szłaby bardziej przez wszystkie grupy społeczne.
Lepiej by było gdyby to było 1.5 mln głosów.
Tak mamy konflikt który będzie naturalnie trwał.
Najpewniej stracimy w wyścigu z resztą świata kolejne lata.... PiS nie uszanuje tej prawie połowy wyborców i totalnie zignoruje ich pragnienia, Duda też bo nadal jest za miękki żeby mieć swoje zdanie.
No trudno. Można zazdrościć Warszawie, że oni tam mają fajniejszego prezydenta.

posted from Bloggeroid




Podobne postybeta
Dużo książeczek :-)
Automatyczne tłumaczenie - Automatic translation
Ja czegoś nie czaję....
Wybory
Wybory w USA a fake news - IMHO nie ma związku

niedziela, lipca 12, 2020

Za blokadą informacyjną - nie znam wyniku wyborów i nie chcę go poznać do wtorku (jak się da)

Ok, już jest po wyborach, są zapewne już znane wyniki z exit polls, albo nawet z late exit polls. 
Możliwe, że różnica jest niewielka i w takim przypadku może nawet już się zmienił lider między exit polls, a late exit polls, jak różnica jest większa to jedni się cieszą, a inni smucą, ale ci smucący mają nadzieję.
Są ogólnie nerwy.

A ja mam na razie spokój :-)

Nie znam wyniku :-)
Jutro mam jeszcze urlop i mam nadzieję nie wchodzić w żadne interakcje które mi podadzą wyniki.
Liczę, że może jutro koło 20 zajrzę na stronę PKW żeby zobaczyć oficjalne wyniki... a może i do wtorku poczekam i dopiero we wtorek jak będę zaczynał pracę sprawdzę wyniki...

I jakoś tak mniej nerwowo :-)
Bardziej rozluźniony jestem. Mniej się martwię.

Ja wiem jaki chcę by był wynik, boję się, że taki nie będzie, w końcu takie coś sugerowały wyniki z zakładów bukmacherskich. 
Ale mój wpływ to tylko wrzucenie 1 głosu do urny. To zrobiłem.

(wiem, że to już któryś post o tym samym, ale my żyjemy w świecie który przez telewizje informacyjne i serwisy internetowe sprowadzony został do takiego ciągłego strumienia ważnych informacji, to jest pewien rodzaj rozrywki, człowiek ma taki hit dopaminy jak coś zobaczy, nawet jak to jest zła informacja. I chyba już trochę tym jestem zmęczony)





Podobne postybeta
Dieta informacyjna przed wyborami
Chyba czas na cyfrowy detoks ;-)
No to lecę do Los Angeles ;-)
Głosowanie korespondencyjne jest tak dziurawe, że aż szkoda gadać - z perspektywy IT
Świat disco polo...