W 2015 roku miałem 24 lata i pracowałem jako programista embedded w Lumelu w Zielonej Górze. Firma miała sowieckie metody zarządzania i dostawałem mydło jako benefit, ale dostałem zadanie: zaprojektuj rejestrator temperatury i wilgotności z interfejsem sieciowym.

Wybrałem japońską obudowę za 60 zł, narysowałem layout. Potem zaczęła się robota:

- Firmware w C na mikrokontrolerze - Web server na uIP stack Adama Dunkels - Interface WWW z wykresami w czystym HTML/CSS/JS (lata 90 style, bo nie było miejsca na frameworki) - 8GB pamięci z systemem plików - SMTP do maili, FTP, DHCP, Modbus TCP/IP - Własny driver do sondy

Największy ból: musiałem kolejkować requesty HTTP po stronie JavaScript, bo EMAC buffer w mikrokontrolerze się przepełniał i łączność padała. Ethernet potrafił zawiesić cały procesor.

Produkt wszedł do sprzedaży jako Lumel HT20. Jest używany w serwerowniach, magazynach farmaceutycznych, laboratoriach, muzeach.

Dzisiaj, 10 lat później, HT20 nadal jest w katalogu Lumela i sprzedaje się globalnie - Polska, Indie, Vietnam, USA. Są nawet używane egzemplarze na eBay z Turcji.

https://www.ebay.pl/sch/i.html?_nkw=ht20+lumel&_trksid=p4432023.m4084.l1313

Moja pierwsza komercyjna rzecz która przeżyła dekadę.

#chwalesie

Komentarze (46)

DexterFromLab

@Half_NEET_Half_Amazing wiesz co się liczy? Szacunek ludzi z ulicy 52 Dębiec

Heheszki

Też dostałeś zadanie #creepypasta ?

DexterFromLab

@Heheszki true story bro

Syster

@DexterFromLab muszę przyznać, że bardzo ładnie ci wyszła wbudowana stronka z konfiguracją.

Co tam w środku siedzi? 2015 to pewnie jakis PIC z popularnym ENC jako ethernet?

DexterFromLab

@Syster tak, uczyłem się programować w pajączku xD. Strona była ukoronowaniem mojego dzieciństwa spędzonego na HTML i CSS bo robiłem strony. Wszystko napisane z palca. Ale nie jak współczesny programista. Ale jak gość co coś umiał i zrobił jak potrafił. Ale wszystko działało! Jak to robiłem to w duchu że klient musi dostać 100% działający kod. Czy pisałem jak małpa? Tak! Ale działało wszystko! Bedz bugów i niedoróbek.

DexterFromLab

@Syster tam był jakiś ethernet controller. Sprzęt PHY. Działało to w taki sposób że były bufory input i output. Chip realizował odczyt ramek. Można było sobie je zczytać. W programie na wejściu jest splitter, w przypadku uc to będzie coś bardzo prostego, jedna warstwa a nie żaden wielopoziomowy chain. Wystarczy odebrać ramkę z bufora, zrobić split po sygnaturach. Jeśli np. pakiet jest ARP, to return 0 i elo. A jak jest np. HTTP to wiadomo że do serwera i czytamy payload. Proste jak budowa cepa. Wielu programistów nie rozumie jak to działa, pracują już na warstwie aplikacyjnej.

Syster

@DexterFromLab Ale ja jako embeddedowiec akurat rozumiem ( ͡° ͜ʖ ͡°)

Z opisu to wygląda na droższego chipa być może coś od Wizneta, W5100 np? Podobne lata, chociaż wiznety chyba miały cały stos IP w sobie.

A pytałem z ciekawości bo chyba właśnie z 10-15 lat temu PICe (szczególności tanie PIC8) były popularne bo miały dobre wsparcie uIP. Wystarczyło dorzucić jakiś phy z mac, najpopularniejszy najtańszy wtedy ENC28J60 i mamy pełny ethernet 10Mb.

Opornik

@Syster @DexterFromLab poka coś z tej stronki. :)
Ech, Pajączek... już o nim zapomniałem...

DexterFromLab

@Opornik tam na stronie lumelu jest jedno urządzenie na stałe podpięte. Hostuje stronę i można sobie je przeklinać na koncie gościa

DexterFromLab

@Syster bij nie pamiętam. Chip był już uruchomiony na płytce ja tylko przeczytałem dokumentację co to jest, jak działa i jak go konfigurować. Ale po tylu latach nazwy sobie nie przypomnę. Z resztą to nie ja projektowałem płytkę.

Opornik

@DexterFromLab fajne

DexterFromLab

@Opornik sobie wyobraź że to była repsonsywna strona która sprawdzała rozdzielczość i uruchamiała się inaczej na urządzeniach mobilnych i inaczej na przeglądarkach. Elementy były odświeżane co kilka sekund załadowywane restem. Inaczej zachowywała się na telefonach po prostu przelaczając się na stronę. A inaczej na przeglądarce, okna było można przesuwać. Dodatkowo były konfigurowalne kafelki. Można było sobie wyświetlić dowolny pomiar po modbasie na ekranie. Poniosło mnie i na wymyślałem tych "foczerów"

DexterFromLab

@TyGrySSek co chcesz wiedzieć? Jak nie złamię tajemnicy przedsiębiorstwa to powiem.

DexterFromLab

@Heheszki świetna analiza prawdziwości. Porownujesz czym jest urządzenie z opinią i jeśli się zgadza to masz prawie 100% autentyczności. Autor wpisu nie kłamie

TyGrySSek

@DexterFromLab wszystko

DexterFromLab

@TyGrySSek to proste: 42

DexterFromLab

@Belzebub bazowałem na pracy poprzedników. Czytając ich kod, oglądając dokumentację różnych produktów dużo się uczyłem. Bazowałem w dużej mierze na technologii która firma już miała i opanowała. Ja tylko dołożyłem swoją cegiełkę

Belzebub

@DexterFromLab mój obecny kierownik tam pracował i to chyba w podobnym okresie

DexterFromLab

@Belzebub jak mi napiszesz na priv jak miał na imię to Ci powiem czy go znam

Roszak

@DexterFromLab Tak się uczyłem HTML i CSS w 2003 roku. Usuwałem wtedy fragment kodu ze strony, przestawiałem albo zmieniałem i patrzałem co się wydarzy. Wiedziałem o pajączku, ale że moje IQ różnie działało i działa - przeważnie krzaczy to używałem notatnika. Pewnie dlatego jestem prostym stolarzem, a nie binarnym władcą rzeczywistości wirtualnej. Moje największe zmartwienia to wkręcić prosto wkręta, nie pomylić sobie na miarce 2mm z 7mm, jak źle uciąć to oby za mało żeby można było poprawić cięcie i wnieść szafę na 4 piętro w bloku bez windy

DexterFromLab

@Roszak nie jest łatwo być zstolarzem i mieć wszystkie palce

DEAFCON_ONE

noice, praktycznie wszystkie komercyjne produkty przy których pracowałem nie przeżyły nawet 3 lat, a co dopiero dekady.

motokate

@DEAFCON_ONE zdarzały mi się bardziej długowieczne, ale wtedy np. zastałam od razu przestarzały, kilkuletni (tak bliżej 10) kod, po czym jeszcze parę lat to utrzymywałam. Budżet na przepisanie? Nie no, aż tyle to nie. Może testy do tego? Tester przeklika (zanim odszedł). To chociaż linter? Wtedy się okaże, że zawiera błędy składniowe. CI/CD? To taki zespół metalowy, tak? xD


Do tej pory mam flashbacki z tej aplikacji.

tptak

@motokate miałem trochę więcej szczęścia. Dołączyłem na osiemnaste urodziny serwisu. Taki typowy moneymaker, jak to szef mówił. Bramka SMS dla korpo, napisany w kącie przez programistów c++.

Jak dołączyłem w 2016 to działało na javie 4, dostęp do bazy z użyciem własnej modyfikacji biblioteki która kilka lat potem została przemianowana na jdbc. Deploy? Oczywiście!. Git checkout tag; mvn clean install -DskipTests; ./kill.sh; ./start.sh

Cztery lata później release z maina, gradle, Java 8 (zaktualizowaliśmy w dniu EOL ), pełne testy systemu w kontenerach, zero downtime deployment w ansible

DEAFCON_ONE

Budżet na przepisanie?

@motokate protip – przepisując korzystaj z stranding strategy, tj. nowy serwis, nowy kod, powoli zastępuje stary, dostarczając value natychmiastowo. Wtedy idzie wycisnąć budżet od biznesu i zdecydowanie łatwiej pokazywać im korzyści krok-po-kroku.


Full rewrite nigdy nie działa dobrze, bo kończy się powstaniem dwóch równoległych serwisów – stary, który zarabia kasę więc musi działać i nowy, który nigdy nie jest feature complete.


Ofc stranding też super nie jest, bo wymaga masy kompromisów i odpowiedniej delikatności, ale pozwala jakoś ruszać się do przodu. Cognitive overload ten sam lub mniejszy jak w przypadku full rewrite IMO.

motokate

@DEAFCON_ONE nie dałoby rady, to stało na bardzo starym frameworku i miało fatalny UI. Trzeba by pisać w nowym, zachowując stary wygląd do czasu przepisania całości. Nie jestem dość odporna psychicznie, żeby coś takiego zrobić. xD

Z kolei wymiana js-owego backendu nie wchodziła w grę, bo to stało na silniku Firefox 4 (nie do ruszenia że względu na ograniczenia sprzętowe) i nic nowoczesnego by na tym nie poszło.

Redwood

Wiem jak wyglądał JS 10 lat temu i jakby mnie nożem cieli nie chciałbym w tym pisać, szacun xD Natomiast dzisiaj jest bardzo przyjemny w formie TS

30ohm

@DexterFromLab Teraz to pewnie na jakimś esp32 by poleciało jak większość współczesnych iot.

Co do perspektywy czasu i jakości: ilość urządzeń które chodzi na moim gówno kodzie poszła w miliony już.
Chociaż to jest pikuś przy tym co jedna firma odwaliła. Napisałem sobie obejście do ich systemu na środowisku testowych, który był po prostu zjebany. Maksymalnie prosto i maksymalnie gównianie, bo inaczej nie chciało działać. Jak odszedłem od nich wpadli na pomysł, że jest coś takiego i działa, to wrzucą na produkcje. Od lat jestem dumny a zarazem mnie śmieszy, że nikt nie wpadł od lat na pomysł sprawdzenia kodu gdzie z internetu można stuknąć do adresu ?d⁎⁎a=1 i wyświetli wszystkie dane urządzenia.

DexterFromLab

@30ohm na stm na pewno nie. Ale jest bardzo dużo potężnych chipów od st czy tym podobnych, na których pójdzie free rtos

DexterFromLab

A i ciekawostka. Byłem od razu po studiach. To było stanowisko takiego "Junior developera" - tak byśmy to dzisiaj nazwali. I zarabiałem 3k brutto to było chyba 200 zł więcej niż minimalna wtedy. Takie były realia w tamtym roku.

DEAFCON_ONE

@DexterFromLab w 2017 po przekwalifikowaniu się na programistę dostawałem mniej niż minimalną; jak powiedziałem szefowi że chciałbym UoP i minimalną to ten zaczerwienił się, dostał kurwicy i mnie natychmiastowo wypierdolił.


Dwa tygodnie później znalazłem nową pracę w której płacili trzykrotność minimalnej. To były czasy.

DexterFromLab

@DEAFCON_ONE ja słyszałem o tych magicznych programistach 15k już wtedy. Nie miałem doświadczenia i nie rozumiałem jak to działa. Umiałem zrobić tyle rzeczy ale nie umiałem tego sprzedać. Więc jak szedłem gdzieś do firmy to mi dawali junior developera, jeszcze bardzo długo bo miałem bardzo szeroki stack i nie miałem bardzo dobrej specjalizacji w żadnym języku poza C. Dzisiaj sytuacja jest odwrotna. Ponieważ jest AI a ja rozumiem bardzo dużo technologii w szerokim zakresie ale żadnej nie recytuje z pamięci, AI robi to za mnie. On dopieszcza szczegóły a ja mówię co jak ma działać. Ja wybieram technologie i styl jej wdrożenia doskonale rozumiejąc konsekwencje każdego podejścia a AI to realizuje. Efekt jest taki że teraz ja pracuję jak zepsół ludzi. A mam AI do pomocy. Nie wiem jak długo to potrwa bo jestem takim Uber integratorem kodu generowanym przez AI. Praca stała się dużo przyjemniejsza i wszystko idzie szybko i dobrze jakościowo. Nie wiem ile to jeszcze tak potrwa. Chy a że się okaże że AGI które by robiło to co ja zużyje w miesiącu prądu za 100k $ to wtedy jednak dalej będą zatrudniać takich kolesi jak ja bo będzie taniej. Ale AI mojej roboty dzisiaj nie zrobi. A ja z AI jestem 5x szybszy, moje projekty działają 2x lepiej.

DEAFCON_ONE

@DexterFromLab testowałem intensywnie wszystkie ej aj wynalazki i jedyne co zauważyłem to znaczny spadek wydajności :P.


Nawet do małych rzeczy niezbyt się nadaje. Ostatnio agregowałem benchmarki do tabeli w markdownie, ojebałem wyniki z openejaj, wysrało mi pięć identycznie sformatowanych tabel – ino pierwsze trzy miały dobre wyniki, a pozostałe były jedną wielką halucynacją nie mającą dużo wspólnego z danymi które wrzuciłem . Zgadnij kto zauważył to za późno.


Mam też styczność z ej aj kodem na codzień (github ma przycisk "NASRAJ DO REPO" z którego czasem ludzie korzystają) i efekty też są raczej... mało zadowalające.

DexterFromLab

@DEAFCON_ONE jak się używa złych modeli do rzeczy do których nie są przeznaczone i nie rozumie się co się robi to nie będzie działało. Ludzie nie potrafią tego używać a potem marudzą że nie działa. Do odpowiednich zadań są odpowiednie modele. Innego modelu w innej konfiguracji użyjesz do wyszukiwania informacji, innego do budowy RAG a innego do kodowania. Ja używam AI z dużym powodzeniem. I już widzę jak ludzie którzy nie potrafią tego używać zostaną z tyłu.

American_Psycho

@DexterFromLab w 2015 było 1 750b wiec 3k to luksus miałeś

DexterFromLab

@American_Psycho ledwo na cokolwiek starczyło.

dziad_saksonski

@DexterFromLab no w sumie, nigdy się nad tym nie zastanawiałem

a60bd586-433c-4ec2-82cf-3409d4da9ce3
Alembik

@dziad_saksonski Fajna ilustracja.

Michumi

@DexterFromLab rozumiem niektóre słowa

Zaloguj się aby komentować