NIGHT   RSS blog   RSS komentarze
Licencja Wpisy Losowo Autor Rejestracja




Autor: Boni
Kiedy: 2020-10-14, środa
Tagi:  DIY, varia     
___________________________________

...czyli pomimo nowych czasów, problemów pandemiczno - przeprowadzkowo - codziennych, wszelkich zagadnień związanych z nową pracą i krainą, ja i tak wracam do pewnych tematów jak dobrze zakręcony bumerang.

Żona śmieje się, że to jest po prostu ta pora roku, i hasztag-a-co-nowego.

Gdyż znowu wyciągam jakieś swoje odwieczne projekciki programistyczne (tak jakbym miał za mało zabawy w pracy, znacznie mocniej zawikłanej w dorosłe IT, no dobra, w IT udające dorosłe IT, niż poprzednie); znaczy, pewnie zima będzie ciężka... Jeśli kogoś interesuje miałem o tym notkę, a może ze dwie, albo i więcej.

Tym razem zacząłem bardzo na serio, bodaj na przymusowym urlopie-izolacji przed pracą w Irlandii, rozeznaniem co do "nowych" narzędzi, nowych w cudzysłowie, bo nowych wyłącznie dla mnie. Gdyż po ostatnich podejściach do tych moich programistycznych nieudolnych gier i zabaw, kiedy wyp... w kąt Qt i te ceplusy różne, oraz okazałem się znowu niekompatybilny z Unity, a nowomodne wcielenia starego Delphi z przydatkami itp. okazały się znacznie mniej fajne niż były kiedyś i bez perspektyw na rozwój (oraz niestabilne nieco), nabrałem przekonania, że potrzebuję Zmiany i nowych narzędzi. Co zresztą sprowokowało komentarze znajomych w stylu "oj, żeby to się nie skończyło nowym kompilatorem zamiast gry w nową greu".

Okazało się, że na tyle dorosłem, że zamiast pisać własne narzędzia, poszedłem rozkminić, co też w roku bezpańskim 2020 uważa się za sensowne języki, kompilatory i środowiska, powiedzmy, uniwersalne, oraz takie, żeby były kompatybilne ze mną i miały jakieś szanse na przyszłość (znaczy, żeby był szanse, że nauczę się ich, a nawet użyję, zanim staną się archeologią IT...).

Oszczędzę wam opisu jak bardzo nie ogarniam i ile zajęło mi przekopywanie się i różne podejścia i próby, przejdę do wniosków. Na pobojowisku zostali dwaj mocni kandydaci, Go (ten nowy oczywiście, od golang i Googla) oraz Rust, ten od Mozilli i spółki. Co skądinąd ładnie pokazuje, gdzie w moim świecie hobbystycznego programowania zaczyna się "nowe", bo i GO i Rust mają "od poczęcia" już coś koło 10 lat...

Rust po próbach odpadł, nie to że jest zły czy nie daje rady, raczej - ja z nim nie daję sobie rady; w pewnych założeniach i szczegółach leży za blisko rzeczy, których po prostu nie lubię "od zawsze", od czasów 8-bitowców chyba. Coś podobnego miałem kiedyś z Erlangiem, lata temu, przy poprzednich poszukiwaniach "czym zastąpić Delphi" - no bez wątpienia było to doskonałe narzędzie i Erlang daje bullet-proof rozwiązania, ale nie, kurde, nope, łeb mnie bolał, gdy próbowałem się do niego wdrożyć. Podobnie miałem z Rustem teraz.

A dla odmiany do Go wdrożyłem się z marszu; wydaje się najdoskonalsze dla mnie tu i teraz, więc właśnie w nim sobie coś tam dłubię, np. 7 czy 8 podejście do gier i zabaw w okręciki - a że Go bardzo miło wspiera współbieżność a rzecz jasna nie wspiera grafy czy aplikacji "as is", zdaje się, że jest to moja próba zbudowania względnie sporej architektury wyspecjalizowanego serwera czasu prawie-rzeczywistego (próba druga czy trzecia ever?), bo grać się ew. będzie przez czystą przeglądarkę HTTP. Co może niekoniecznie skończyć się działającą "greu", ale za to wiele się przy tym nauczę, co nie; np. jak napisać małą SCADA w Go, z klientami przez HTTP...

Z drugiej strony, zaczynam już dostrzegać pewne wady Go oraz mam niespodziewane wrażenie bałaganu w bibliotekach i różnościach, podobne jak miewałem np. często przy PHP "czy to wymyślało 5 zespołów przez 10 lat i nikt z nikim niczego nie uzgadniał?". Ale jeszcze nie jest bardzo źle, a nawet jest bardzo dobrze, ten młotek wyraźnie pasuje do tej dłoni. Może dlatego, że Go wymyślili praktycy (a nie akademicy czy hobbyści), którzy mieli po dziurki w nosie przekombinowanych "niedeterministycznych" narzędzi "i frytki i tysiąc słoni do tego", i zaczęli od ustalenia, czego nie chcą i nie potrzebują, aż doszli do pewnego minimum, za to takiego i tak zrobionego, które po prostu "ma robić, a nie pier... (się)".

Co, zdaje się, zgadza z moim podejściem do, hm, wszystkiego.




Wpisz dane i komentarz:

Autor:

Hasło:

albo CAPTCHA dla niezarejestrowanych:

Nazwisko autora "Sonetów krymskich" 1826:

Treść:

Formatowanie: [b] pogrubienie [/b], [i] kursywa [/i], [u]podkreślenie[/u], link: URL lub [a="URL"]tekst[/a], nie używać nawiasów {} i tagów HTML. Max długość ok. 9000 znaków.


cmos
Thu, 15 Oct 2020 08:46:58
Ty to masz dobrze, że możesz sobie wybrać. Ja w moim projekcie muszę się męczyć z .NET i C#, walczyć z ograniczeniami aplikacji 32-bit i badziewnego MS JETa, plus katastrofalnym API Enterprise Architecta.
No ale już prawie skończyłem, jestem przy instrukcji obsługi i testowaniu.

Boni avatar Boni
Thu, 15 Oct 2020 09:51:01
@cmos

Znaczy, w twoim semi-hobbystycznym projekcie, o ile pamiętam? No, jakbym chciał robić w domu i zagrodzie coś monetyzowalnego bliżej moich zawodowych działań, też bym aż takiej wolności jak w notce nie miał. Bo na przykład w okolicach "mojej" automatyki zaraz trafiłyby mnie niczym nagła smutku kotwica trzy literki, OPC, a chwilę potem tak jak ciebie, .NET...

Z innej beczki, w pracy mam obecnie głównie VBA, z którym nie mam problemów, za to niestety jest on zaplątany w fenomenalne strucle w pewnej SCADA, przez wiele warstw i wielostronnie (np. "w czasie", bo się ewidentnie zmieniało widzimisię ludzi robiących tę SCADA i w tej SCADA, przez ostatnie 10 lat, czy około, nt. "jak my chcemy te klocki VBA poukładać, tak naprawdę?"; jak zwykle retrofit robię).

cmos
Thu, 15 Oct 2020 14:28:57
@boni
Tak, w tym. Robię plugin do Enterprise Architekta, który teraz ma wersję 15.2, ale jego podstawy nie zmieniły się od czasów kiedy 20 lat temu robiłem w nim projekt, w wersji 4.cośtam. Teraz muszę omijać go przy dostępie do bazy danych (bo przez jego API jest 50 razy wolniej, to nie hiperbola tylko wynik pomiaru), sam muszę wszystkie obiekty pokazywać edytować w moich okienkach, jedyne do czego go jeszcze używam to diagramy. Ale zastąpienie go całkiem to kupa roboty - pełna edycja wszystkiego co daje UML2 to nie w kij dmuchał. Więc na początek musi być tak jak jest, potem zobaczymy.

tyz_Aniou
Thu, 15 Oct 2020 23:22:14
Tak, też mnie ta świadoma prostota Go ujęła. Do tego stopnia, że właśnie w nim napisałem swój emulator 65c816 (i jak na razie odkryłem w emulatorze tylko dwa - małego kalibru - błędy). A już zupełnie doceniłem Go, gdy szukałem błędów w emulatorze napisanym w C#. I o ile w Go mogłem pisać literalnie w notepadzie (no, w vimie, ale pod windowsem w notepad++) to w C#, mimo narzędzia wspomagającego mnie z każdej strony, pozwalającego skakać do implementacji i ogólnie trzymającego mnie za rączkę, umęczyłem się setnie z tą całym polimorfizmem i dziedziczeniem i kombinowaniem "no to to jest traktowane jako 'long' czy 'short' w tym miejscu?").

Rust najpierw zachwycił mnie opisami a potem zniechęcał kolejnymi aspektami.

Pierwszym była fiksacja na punkcie ochrony pamięci przy jednoczesnym ignorowaniu innych aspektów bezpieczeństwa (do dzisiaj zachęcanie do sekwencji "curl | sh" uważam za zachęcanie do praktykowania złych nawyków, nawet jeśli w tym jednym-jedynym aspekcie autorzy dołożyli starań). Ale oczywiście "jesteśmy projektem dla bezpieczeństwa". Obok bezpieczeństwa to oni nigdy nie stali, bezpieczeństwo i stabilność jest podejściem systematycznym. Popatrzmy choćby na Adę, gdzie myślano choćby o konwencjach, minimalizujących ryzyko popełniania literówek.

Dalej, niejako logicznie, pojawia jego fatalna nieczytelność. Może to miało poprawić ekspresję i kontrolę nad kodem, ale ja nie znoszę języków przy których wzrok gubi się w "plątaninie znaczków pokreślonych". Rust nie jest czytelny.

Nie do końca jest to winą języka, ale czy widzieliście jak wiele sekcji "unsafe" potrafi zawierać większy program?

"Ekosystem" Rusta zaczyna przypominać mi node.js. Zbudowanie trywialnego shella (nushell) zaowocowało ściągnięciem z sieci i skompilowaniem 382 (trzysta osiemdziesięciu dwóch) zewnętrznych bibliotek. A potem będzie zdziwko bo ktoś skasuje jakąś albo dokona wrogiego przejęcia. Przerabialiśmy to już.

Ostatnie: czasy kompilacji. Próbowaliście budować coś większego, na przykład fragmenty Firefoksa? Czas i zużycie pamięci takie, że siadł i płacze. Go wciąga to nosem.

A wracając do przyjemniejszych tematów: w pracy programować nie muszę, więc w domu znowu oddaję się (po paru miesiącach przerwy) wynaturzeniom w rodzaju portowania Fortha, napisanego w assemblerze 65c816 na komputer istniejący w jakichś 40 egzemplarzach :). To zaspokaja moją potrzebę egzotyki i niszowości.

Boni avatar Boni
Fri, 16 Oct 2020 01:13:27
@Aniou

No ja też dziubię w Go w notepadzie++ lekko poskręcanym "po mojemu", i ślizgam się spoko, podobnie jak w dowolnym języku w jakim się w miarę dobrze bawiłem za ostatnie dekady. Z C# itp. nigdy się dobrze nie bawiłem, nawet w wypasionych IDE.

Te zbiorcze problemy z polimorfizmem, generycznością, dziedziczeniem, połową obiektowości, itp. przeważnie nazywam "niedeterminizmem", jak w notce, i nie jest to piękno y dobro; bo jak piszesz, jeśli przez znaczący ułamek czasu pracy nad progiem, rozpieprzając skupienie, muszę się zastanawiać nie tylko co poeta (ja albo i nie ja) chciał tu powiedzieć, ale jeszcze jak to czy tamto jest interpretowane w tym kawałku kodu a jak w tamtym, tak czy srak, co tu jest "ustalone" a co się nagle może zmienić, bo jakieś tam moduły, biblioteki, obsługa jakiegoś typu albo zupełnie innego typu, czy inne uju muju może nie zachowują się tak, jak zachowywały się jeszcze wczoraj albo jak mi się wczoraj wydawało, itd. no to ogólnie wypad na niską orbitę, ale taką nad Jowiszem.

O Rust piszesz mniej więcej to, co też zaznałem. Te ich rozważania o bezpieczeństwie czy ochronie pamięci, to jakieś takie nie na miejscu mi się wydały; coś jakby sprzedawca nowych samochodów zapewniał, że bardzo zadbał i dlatego opony w jego samochodach się nie rozpadają. No może i zadbał i się nie rozpadają, ale w porównaniu z czym, po co, i WTF? I np. jakieś takie "wewnętrzne fuj, ukryte bzie" wystąpiło u mnie, gdy gdzieś tam w dokumentacji czy założeniach nagle trafiły mnie rozważania o stosie czy stosach - no chyba się komuś trochę pomieszały poziomy, jeśli Rust aspiruje do wysokopoziomych zastosowań, ew. może to był powrót w czasy czyjegoś szczęśliwego dzieciństwa w 1990...

Za mało ćwiczyłem w Rust, żeby rozkminiać nieczytelność, czas kompilacji itp. A jakby mi jakikolwiek "ekosystem" tylko 30 a nie 300 bibliotek próbował dociągać przy czymkolwiek większym od "hello world", to wywaliłbym na kopach z marszu.

Z drobiazgów ujęło mnie w Go nawet to, że kompilator staje dęba na zmiennej zadeklarowanej ale nie użytej. Bo nawet w Delphi/Pascalu tego nie było, tylko warningi; a chociaż staram się unikać patologii, i nie widuję rzeczy, jak opisywane kiedyś przez Cmosa tysiące warningów na kompilacji, no to jednak nawet w moich żałosnych zabawach miewałem kilkadziesiąt "wiecznych" warningów, m.in. przez zmienne olewane itp. rzeczy. A w Go znacznie trudniej zaśmiecić se kod "przydasiami" i zostawić se warningi "na wieczne potem", i bardzo dobrze, że się nie da.

A teraz zastanawiam się, czy ty totamto 65c816 na jakieś popłuczyny po Applach strugasz? ale tego chyba jest więcej niż 40szt., więc może na popłuczyny po Commodore? czy na jakieś jeszcze bardziej homeopatyczne i nieznane mi popłuczyny?

Codiac
Fri, 16 Oct 2020 09:53:07
Od dawna nie znoszę C i języków które używają tej samej składni/logiki. Dla mnie znak równości ma oznaczać równość a nie przypisanie. C jest pod tym względem masakryczne.
Prosta instrukcja If A = B w Pascalu oznacza "jeżeli wartość zmiennej A jest równa wartości zmiennej B" a w C "Wykonaj operację przypisania zmiennej A wartości zmiennej B i jeżeli ta się udała". Nawet kijem tego nie dotknę.

Ale co do stosów - o tym zawsze należy pamiętać pisząc programy. Ja już widziałem przypadki wywalających się serwerów produkcyjnych przez program, który źle ogarniał stos.
Konkretnie wyglądało to tak: Wysłany na serwer update programu antywirusowego (tak, wysłany wtedy, kiedy to ustawił zespół antywirusowy, bo administratorzy nie mieli na to wpływu). Coś poszło nie tak, update się nie zainstalował, nastąpiło wycofanie. Po pewnym czasie ponowna próba, znowu nie wyszło, wycofanie. I tak regularnie powtarzane przez automat.
Problem? Za każdym powtórzeniem na stosie zostawało jakieś 7 instrukcji, które przy wycofaniu instalacji nie były zdejmowane. A stos dowolnego systemu operacyjnego z gumy nie jest i kilka takich rzeczy ogarnie ale w końcu się zapełni. A wtedy normalne funkcjonowanie go wywali, bo zrzuci na stos coś standardowego i miejsce się wyczerpie. Bo ktoś w McAfee nie potrafił sprawdzić czy ich program wszystko ze stosu zabiera!

charliebravo
Fri, 16 Oct 2020 10:52:43
@Języki rodziny C
Co kto lubi i do czego jest przyzwyczajony jak sądzę. Osobiście jestem zadowolony z tego jaką niszą stają się (języki rodziny C), bo ciągle do zrobienia na tym poziomie jest dużo, a stawki rosną.

@"za każdym powtórzeniem na stosie zostawało jakieś 7 instrukcji (...) stos dowolnego systemu operacyjnego z gumy nie jest"
Eee, no coś tutaj okrutnie pomieszano. Programista C takich rzeczy by nie napisał :P
0) Stos to struktura danych, są używane w różnych miejscach, z kontekstu trochę jakby wynika że masz na myśli konkretnie "call stack".
1) Ciężko mówić o call stacku systemu operacyjnego. Po pierwsze, ich jest wiele (normalnie każdy wątek ma własny). Po drugie system operacyjny to co, jądro? Jak jądro, to ono zazwyczaj korzysta ze stosów dostarczanych przez user space procesu (mówimy o "procesie wykonującym się w trybie użytkownika/w trybie jądra"). Jak stos procesu się zapełni, to procesowi się robi kęsim, ale na OS to nie wpływa. Jak nie jądro, tylko jakieś demony/serwisy, to masz mnóstwo procesów, mnóstwo stosów od strony userspace, ale system się od tego nie złoży.
2) Na call stacku nie "zostają instrukcje". Może masz na myśli call frames? I przecież to nie jest "sprawdzanie czy wszystko zabiera", bo to jest zarządzane automatycznie przez procesor, kwestia powrotu z procedury/funkcji. I znowu, jeśli przepełnić stos taką dajmy na to nieskończoną rekurencją, to system ubije proces i tyle.
3) W teorii przynajmniej, na normalnie działającym systemie operacyjnym to czy program kliencki był "sprawdzony" czy nie, nie powinno mieć znaczenia, jak proces przekracza limity to tym gorzej dla procesu.
4) W praktyce, a szczególnie na Windowsach można sobie spoko zarżnąć OS, a przynajmniej uczynić go trudnym do używania przez różnego rodzaju resource leaks. Nie wiem jak jest teraz, ale przynajmniej do 2003 włącznie można było zrobić kuku całości za pomocą "GDI handle leaks". Wystarczyło na przykład utworzyć za dużo okienek (HWND), kontekstów graficznych (HDC) czy innych fontów. Niby działało, tyle że np. nic się nie wyświetlało na ekranie...

Boni avatar Boni
Fri, 16 Oct 2020 11:11:14
@Codiac

No tak, te podejście, że = to przypisanie i porównanie razem i można je wstawiać w if, to ch...jnia jest, nigdy nie zrozumiałem po cholerę to dopuszczono w ogóle. Zdaje się w PHPie mnie najbardziej dotykało.

@stosy

No ale w jakim sensie mam "zawsze pamiętać o stosach/stosie" pisząc programy, które od jakiegokolwiek klasycznego stosu powinny dzielić ze trzy warstwy i kompilator, co najmniej? Takie historyjki jak powyższa to coś jakby "dopieszczając i tuningując samochód, nie zapomnij, że tam w środku jest Złowrogie Koło Zębate!1!"; no jakieś na pewno jest i co mi do tego, że jacyś goście od kółek zębatych czasem dają ciała, już mniejsza w czy w Fiacie czy w McAffe, najwyżej nie będę więcej używał fiatów czy mcaffów.

BTW stosów i wspomnianego wyżej przez Anioua Fortha, o, to dopiero było narzędzie nakręcone stosami IIRC? Plus ta cała egzotyka notacji, itd. itp. no mocna rzecz, zawsze podziwiałem z bezpiecznej odległości i zastawiałem się jak mocny towar musiał krążyć po USA około '68 kiedy go wymyślali. I że to jest ładny przykład w pół drogi do SF na temat kontaktu z obcymi, czy nawet małego miękkiego SF jak podrzucanie wirusa w filmie ID4: (NORAD, rok 2030) "Shakujcie mnie ten program ukradziony alienom co właśnie przyleciały, pronto! - ale generale, co też generał... - dobra, jako wprawki i trening macie tu na początek podręcznik "Język Forth". Po polsku. Z 1988. Popełniony przez JANA BIELECKIEGO... (zespół programistów rozbiega się po bunkrach NORAD z paniką i krzykiem, żołnierze muszą ich szukać, wabić snikersami i przykuć do terminali z powrotem, ale np. jak John zobaczył ponownie książkę "Język Forth", to odgryzł sobie rękę i znowu uciekł i schował się w przedsionku reaktora nr 4)

Boni avatar Boni
Fri, 16 Oct 2020 11:16:42
@charliebravo

No ale nie mylimy faktu, że wapno jak my osiąga miłe kasabubu z zabaw około nisz czy języków, których młodzież raczej unika, jak twoje C czy moje VBA, z tezą, że te C czy VBA to jest cośkolwiek dobrego... ;P

charliebravo
Fri, 16 Oct 2020 11:41:03
@Boni
"że te C czy VBA to jest cośkolwiek dobrego"
Ale wiesz, że ja takiej tezy nie wygłaszałem? IMHO lokalnie wtedy kiedy C wymyślono, biorąc pod uwagę alternatywy i inne takie, to on się jakośtam nadawał do takiego programowania wpół drogi między asemblerem a normalnym językiem wyższego poziomu. A potem jak to wszędzie w technice, zrobiło się tego za dużo żeby to wywalić i zrobić na nowo.

Plus doszło do tego całe to potomstwo czy raczej pomiot, z Objective C (IMHO najbardziej rozsądne podejście do "C z klasami"), C++ i C#. Plus jak pojawiły się shader languages, to well, jakiego języka użyjemy do kodowania na poziomie przewalania bitów i bajtów na prawo i na lewo? Ja nie twierdzę że GLSL czy CUDA, czy Metal C to piękno y dobro, ale też w sumie dobrze że nie wymyślili każdy z osobna _jeszcze jednego_ potworka tylko w miarę oparli się na tym co jest, i co jest dobrze rozumiane (jak ktoś myśli że to proste, to serdecznie polecam zagłębienie się na przykład w taki drobiazg jak adresowanie różnych złożonych typów w tej samej pamięci przez dwa różne procesory - w C przynajmniej wiadomo jak to robić).

Jeśli już robimy coming outy z różnych śmiesznych języków i języczków, to ja lubię Ruby, Smalltalka i Objective C (in no particular order).

charliebravo
Fri, 16 Oct 2020 11:46:11
@Boni
"= to przypisanie i porównanie razem i można je wstawiać w if, to ch...jnia jest, nigdy nie zrozumiałem po cholerę to dopuszczono w ogóle."
ZTCP w C to się wzięło stąd, że w C każde wyrażenie ma wartość. _Zdaje mi się_ że to szło do tego stopnia kiedyś, że po prostu każda ewaluacja kończyła (na przykład) w akumulatorze procesora, i potem kolejne wyrażenie brało z akumulatora "wartość aktualną". Więc można było napisać coś w stylu:
int add(int a, int b)
{
a + b;
}

I to będzie działać zupełnie tak samo jak bardziej współczesne "return a + b;"
Stąd if (a = b) jest bessęsu (zresztą za dobrą praktykę w C uważa się pisanie if (const = zmienna) bo wtedy każdy kompilator się rozedrze) i dobry kompilator powinien wypluwać wtedy warning, natomiast niegdyś popularne było pisanie
if ((a = call())) które z kolei wykonuje przypisanie do a wyniku call i jeśli jest niezerowy, wykonanie ifa.

Boni avatar Boni
Fri, 16 Oct 2020 11:59:15
@charliebravo

natomiast niegdyś popularne było pisanie if ((a = call())) które z kolei wykonuje przypisanie do a wyniku call i jeśli jest niezerowy, wykonanie ifa.

O, coś w tym stylu mi dzwoniło, że musiało stać za tym = "z przypisaniem", ale nie potrafiłem sobie przypomieć/wymyśleć. Bo tak normalnie, to jednak straszna głupota.

@wstydliwe wyznania o języczkach

Ja kiedyś tam nieco przetestowałem Erlanga i Ruby, powiedzmy, tyle co Rust teraz. I, nie śmiać się, ale zawsze entuzjastycznie machałem łapkami w kierunku Ady, no ale chyba nigdy nawet nie testowałem bardziej serio, aczkolwiek na pewno miałem kompilator, itd.

cmos
Fri, 16 Oct 2020 14:24:44
@wstydliwe wyznania

Wiecie, a mi to się całkiem podobał perl. Przede wszystkim przez to, że miał wyrażenia regularne jako część języka. Większość tych kretyńskich $%&#*? nie była obowiązkowa, i można było zapisać kod ładnie i czytelnie, do skryptów które parsowały jakieś pliki był super.
Zrobiłem w nim oskryptowanie do budowania i testowania, używali tego w kilkunastu projektach.

Boni avatar Boni
Fri, 16 Oct 2020 15:35:31
@cmos

Mnie perl nie zachwycał, takie skryptololo-parselolo nieco zbyt wyspecjalizowane jak dla mnie, no ale do zadań jak piszesz może i był superos. Ja jakoś nie jestem fanem regexpów w ogóle, więc i języków wkoło zagadnienia zbudowanych też nie bardzo. A że coś tam można zapisać ładnie i czytelnie, no pewnie wszystko można, pewnie nawet w Lispie czy innym PHPie można (oh wait, przecież rozmawiamy przez w miarę uporządkowanego PHPa ;)

BTW inny wynalazek który mi się zawsze wydawał od poczęcia o wiele za mocno wyspecjalizowany, kiedy mu się parę razy przyglądałem, to Prolog.

Ogólniej, ja chyba nie mam problemów z brzydką notacją czy z nieczytelnością kodu (znaczy, na pewno mam jakiś limit, po którym pizgnę rzecz w kąt, ale jw. prawie wszystko można ZAPISAĆ ładniej i porządniej), za to mam kolosalne problemy z "logiką" czy paradygmatem stojącym GŁĘBIEJ pod danym jakoś tam zapisanym kodem, i z tym całym "niedeterminizmem" jw. dyskutowałem. Np. już samo to, że w Go można używać deklaracje z var i z := daje mu nieduży, ale minus, bo jeśli w istotnej kwestii są dwa równorzędne rozwiązania do wyboru zamiast jednego, to IMHO jest o jedno za dużo... Oczywiście pisząc se prywatnie czy jednoosobowo mogę panować nad takimi rzeczami, ale np. w zespole 10 ludzi po 5 latach m.in. z takich minusików i kopeczków w dupeczkę mogą być fakapy i "write-only code" (nie muszą, ale mogą).

janek.r
Fri, 16 Oct 2020 18:07:45
@język C(++)
Kto zna na pamięć wszystkie warianty wbudowanej funkcji do kopiowania stringów?

@przypisanie
W klasycznym dziele "Język C" Kernighan i Ritchie jest dokładnie wyjaśnione, dlaczego = i ==
A że z drugiej strony przypisanie też jest funkcją...

cmos
Fri, 16 Oct 2020 19:16:23
@boni
"Ogólniej, ja chyba nie mam problemów z brzydką notacją czy z nieczytelnością kodu (znaczy, na pewno mam jakiś limit"

Akurat perl niewyprostowany późniejszymi usprawnieniami przekroczyłby Ci limit z całą pewnością :-)
Był nawet taki cykliczny konkurs na najbardziej kryptyczny program w perlu:
https://en.wikipedia.org/wiki/Obfuscated_Perl_Contest



tyz_Aniou
Fri, 16 Oct 2020 19:38:53
@Boni
A teraz zastanawiam się, czy ty totamto 65c816 na jakieś popłuczyny po Applach strugasz?

A nie, jedna taka pani zrobiła samodzielny komputer oparty o normalny 65c816 i kilka, zasymulowanych w FPGA scalaków. Na razie istnieją takie bardziej wypasione modele, dla freaków maximusów (model "FMX") i postaje tańsza się wersja "U" dla freaków ordynariusów.

Ogólnie projekt jest bardzo miły, coś na zasadzie "czym by chciało być Atari/C64 gdyby dorosło jako ceniony członek społeczeństwa a nie wykolejeniec na Motoroli" i bardzo ładnie wyważony między prymitywizmem a współczesnością. Do tego - jak na współczesne projekty tego rodzaju - stosunkowo tani. Przykładowo takie Spectrum Next z dwoma milionami funtów na Kickstarterze kosztuje 300 funciaków, Mega65 (wersja C128 na wypasie) w wersji "devel", która nijak nie wygląda jak docelowa, to praktycznie 1000 eurasków a słynny Commander X16, który jeszcze nie istnieje, na pewno nie będzie tańszy, niż omawiana maszynka (patrząc na estymaty).

Niestety, ze wszystkich w/w Stefany (autorka) jest najmniej medialna i autopromocyjna i po prostu przyszła, zakasała rękawy i gdy reszta budowała społeczności i rozklejała plakaty to sama zrobiła robotę. Robotę, która jest namacalna i której nikt nie dostrzega. Jest nawet emulator, o bardzo dużym poziomie zgodności z blachą.
Zabawne jest to, że Commander X16 wystartował praktycznie łeb w łeb, jest prostszy (będzie, jeśli powstanie) ale z racji tego, że autor jest środowiskowym celebrytą to zgarnął "milion" entuzjastów jeszcze zanim zdecydował się na zawartość urządzenia. Taki świat.

No więc ja, zamiast rozwiązywać sudoku, klepię to sobie licząc bity i zaspokajam nostalgię i powrót do lat dziecięcych metodą wystarczająco autentyczną (blacha to nie emulowana namiastka) i odpowiednio mało frustrującą (bo jest to wygodniejsze, niż np. oryginalne Atari czy Commodore). Choć do Atari np. już zmontowano przystawkę, pozwalającą na podobny efekt. Ciekawe, dlaczego nie mogę znaleźć podobnych dla Commodore, tam jest to łatwiejsze do uzyskania.

Boni avatar Boni
Fri, 16 Oct 2020 20:27:53
@janekr

Czemu jest = i ==, czy := i =, czy nawet = i =, to ja wiem, nie wiem, czemu w 2020 nadal istnieją "środowiska" czy "ekosystemy" pozwalające na postawienie "przypisania" w if.

@cmos

Chyba wszystko da się napisać obfuscated i w wielu jezykach są konkursy? No ale niektóre jakby trudniej, jakoś nie pamiętam, żeby były międzynarodowe doroczne zawody w Obfuscated Ada, takie jak dla C różnych. BTW pamiętam, że dosyć porażające były przykłady obfuscated Lisp, bo nie bardzo odróżniałem od normalnego Lisp, no dobra, przesadzam ;)

@Aniou

Tak się domyślałem, że są tu jakieś sentymentalne powroty w szczęśliwe czasy dzieciństwa (okej, przez chwilę myślałem, że może to jakieś emulacje do jakiegoś starego unikalnego sprzętu naukowego czy astronomicznego...). I na bogato, że tak powiem, dla mnie chyba zbyt bogato; szczytem moich nostalgia tripów to zabawy parę dni emulatorem ZX Spectrum, ale do pały by mi nie przyszło cokolwiek hardwarowego strugać.

cmos
Fri, 16 Oct 2020 20:51:43
@boni & obfuscated
W perlu autor wymyślił sobie całą masę zmiennych predefiniowanych, z nazwami w stylu $_ albo $?, do tego różne $ % & _ / > w różnych kombinacjach, jak użyjesz jednoliterowych nazw zmiennych, to program będzie się składał głównie ze znaków specjalnych. Nie znam lepszego języka do obfuscowania.

Potem, dzięki elastyczności języka, zrobili biblioteki w których te zmienne predefiniowane mają porządne, czytelne aliasy po angielsku i daje się tego używać zaglądając do dokumentacji nie częściej niż co 3 minuty.

Ale tak serio, to do parsowania tekstów nie ma nic lepszego od perla (pod if robisz wprost regexa, również substitute, żadnego wołania funkcji, wyniki w zmiennych predefiniowanych). Przy tym całkiem ładnie robi GUI, potrafi robić klasy, ma kupę sensownych bibliotek, a to wszystko jako język interpretowany. Do skryptowania super.

charliebravo
Fri, 16 Oct 2020 21:11:03
@cmos
Właściwie wszystkie zalety które wymieniłeś ma dla mnie TCL/Tk. Plus byl bodaj pierwszym językiem, którego interpreter łatwo było „wciągnąć” do programu w C. Sporo narzędzi napisałem decfacto dodając do TCLa kilka customowych funkcji z dziedziny problemu. A potem właśnie fajne biblioteki (po dziś dzień jak mam do czegoś zagadać Modbusem to z tcla), znośne GUI, wszystko działa tak samo na windzie i Windowsach

charliebravo
Fri, 16 Oct 2020 21:14:41
Windzie i Unixach oczywiście

Boni avatar Boni
Fri, 16 Oct 2020 21:23:48
@cmos

@obfuscated

Młodzieńcze, obczaj np. te hello world w Lisp, o którym nie do końca żartowałem: https://gist.github.com/wasamasa/d26e5c0bec84b3af8c2c

@bardziej serio

Wierzę co do perla, nigdy nie miałem potrzeb jakiegoś wielkiego oskryptowania; jw. z regexpami jakoś tak niekompatybilny jestem, tzn. oczywiście znam i jak muszę, to użyję, ale to nie moje porno. BTW wielkim fanem interpreterów też nie jestem.

igor
Sat, 17 Oct 2020 10:58:14
@Go
Great minds think alike. Parę lat temu uznałem, że moje umiejętności robią się przestarzałe i trzeba by się nauczyć jakiegoś modnego języka programowania. Po krótkim researchu też padło na go. Ale u mnie z braku czasu skończyło się na hello world...

@Perl
Kiedyś znałem i lubiłem. Dopóki nie przekonałem się, że po miesiącu niezaglądania nie rozumiem nawet własnego kodu. Potem do podobnych celów kilka razy uczyłem się Pytonga, ale zawsze go zapominałem. Jakoś dzisiaj rzadziej muszę pisać zaawansowane skrypty.

@reszta
Niedawno musiałem sobie odświeżyć PHP, a nawet przerobić własny kod sprzed ponad 10 lat, by działał ze współczesnym interpreterem. To było zaskakująco przyjemne. Za to teraz muszę napisać jakiś kawałek z AJAXem czy czymś w tym stylu i aż mnie skręca na samą myśl.

cmos
Sat, 17 Oct 2020 13:22:09
@boni
Owszem, lisp ładny, ale obczaj na przykład to: http://totl.net/PerlContest/
Lispa spróbowałem daaaawno temu, jeszcze na Commodorku, nie podobał mi się.
A "młodzieńca" traktuję jako komplement :-)

Boni avatar Boni
Sat, 17 Oct 2020 15:58:45
@igor

No ja w Go bardzo pomaluśku się wciągam, dziś w nocy dopiero pierwsze bojowe użycie metod i interfejsów miałem. Ale też pewnie mniej niż połowa ćwiczenia to ćwiczenie z Go, większa połowa to projektowanie architektury tego, co mi się zmyśla, tj. klienci ciągłej gry (nie-turowej) na czystych przeglądarkach vs. serwer, szczególniej w tematach zabezpieczeń itp.

@PHP

Jak się zastanowić, to największa rzecz jaką w PHP popełniłem, to ten blog, tj. engine, około 2012, i jest to śmieszne 1500 linii. Potem nie było potrzeb jakichś dużych zmian czy utrzymywania tego, "działa, to na ch... drążyć"; ostatnia przeróbka to nowa CAPTCHA w końcu 2017. No więc nigdy nie miałem większych problemu z rozkminą tego itd., choć nie jest to kod IMHO w jakimś wysokim standardzie czy "porządny" czy wydajny, raczej jest toporny, dosyć "jawny", no i "zdeterminowany" a la Pascal/Delphi, czy co tam mam w naturze. Więc może dlatego nie mam problemów z powrotami do tego kodu po latach. Jakby ten kod zoptymalizować, użyć wszelkich wypasionych funkcji PHP, szczególniej do XML (bo treść stoi tu głównie w XMLach lub prawieXMLach) i dopieścić, pewnie dałoby się ściąć kod o połowę, no i wyglądałby profi, a nie ludziom nieładny. Tylko nie wiem, czy byłbym go w stanie po tym utrzymywać ;)

@cmos

Fakt, niezły ten perl, takie rzeczy raczej w C widywałem. A Lispa nigdy tak naprawdę nie próbowałem poza hello world, no ale kojarzę ten festiwal nawiasów.

"Młodzieńcze" to ja mówię w przekomarzaniach do każdego starszego ode mnie, od czasów mojego nastolęctwa, ale jakoś już nie jest to tak zabawne jak dawniej, zanim przekroczyłem czterdziestkę.

Bogdanow
Sat, 17 Oct 2020 16:28:57
Nikt nie wspomniał o Javie, a dla mnie to podstawowa ciężarówka której codziennym prowadzeniem zarabiam na chlebuś i szyneczkę. Ale wiadomo, ciężarówki nie są sexy :D

Takim kabrioletem który trzymam w garażu i którym w niektóre soboty pojadę na przejażdżkę po miasteczku jest Prolog. Od wielu lat fascynuje mnie i bardzo przyjemny jest.

PHP to taksówka w której dawno temu jeździłem zanim zrobiłem kat C+E :D Staram się do dzisiaj zapomnieć traumę.

Natomiast Go, Rust, Ruby, Python itp. to takie fajne wozidła o których czytam czasem w kolorowych czasopismach i może nawet mam jakieś książki na półce, ale w sumie tak naprawdę nigdy nie używałem. Jakbym miał kiedyś dużo wolnego czasu, to bym się pewnie pobawił językiem Julia, z tego co czytałem bardzo sympatyczne.

Boni avatar Boni
Sat, 17 Oct 2020 20:19:54
@Bogdanow

No, jeśli Java to TIRoska ciężarówka, którą zarabia się chlebuś, to co ja mam powiedzieć o tym VBA i okolicach w których dłubię, że to 30 letni zajeżdżony spychacz ze szrotu, połączenie amerykańskiej miniaturyzacji z japońską topornością? (to konkretnie raczej o tych "okolicach" od GE i Fanuc, a nie o samym VBA) ;D

Prolog też mnie fascynował i bawiłem się nim kiedyś tam, dawno temu. A potem dorosłem. ;PbPb

(A w ogóle proszę zaprzestać analogii motoryzacyjnych!!1! bo mnie dziś wyjątkowo denerwują, szczegółowy wniosek na szrocie irlandzkim AD2020: mercedesy obsysają, lexusy rządzą. Oraz jak to mówią w Rosji, "przybyło w naszym pułku!")

Bogdanow
Sat, 17 Oct 2020 22:24:51
Piję mleko i jem marchewkę więc też na pewno kiedyś dorosnę!

Boni avatar Boni
Sat, 17 Oct 2020 22:33:36
Mhm, ale chyba nie warto; ja kiedyś dorosłem, ale potem przestałem, bo oczy mi od tego łzawiły. (parafrazując M.Gambona)

charliebravo
Tue, 20 Oct 2020 11:13:40
@"przybyło w naszym pułku"
Ale napiszesz coś więcej? Bo rozumiem że o szrocie mowa?

@analogie motoryzacyjne
Oczywiście piękno w oku widza i te wszystkie, ale mnie nie leżą. Dla mnie język nie jest czymś takim jak pojazd (sexy coupe czy zarżnięty pickup, nieważne), dlatego że pojazd jest w jakimś sensie kompletnym rozwiązaniem, a język jest bardziej jak skrzynki z narzędziami. Można zrobić z niego to, a można zrobić i tamto. To nie jest tak że jak się da "mocny" język byle komu, to rozwiązanie też wyjdzie "mocne".

I ogólnie, wiadomo że mamy swoje preferencje (być może to kwestia późnego zabrania się za, z głową zoraną tradycyjnym programowaniem), na przykład mnie te wszystkie LISPy i Prologi zupełnie nie leżały. Ale generalnie - IMHO - należy się starać "być programistą" przede wszystkim, a nie "programistą C", "programistą JS" czy whatever. Wiadomo, że jakaś tam specjalizacja i największa wprawa jest w tym, czego się używa najwięcej, ale jeśli ktoś rzuci we mnie Javą (nie używałem od 20 lat, tj od studiów) czy innym Pytongiem to przecież też sobie poradzę, tylko częściej będę guglać biblioteki (bo mniej znam na pamięć), no i więcej rzeczy mnie zaskoczy (bo mniejsze doświadczenie).

@dzisiejszy dzień
CAPTCHA spytała mnie o "Nazwisko autorki Nad Niemnem..." a przyzwyczajone palce wpisały "ożeszku..." ;-)

Boni avatar Boni
Tue, 20 Oct 2020 15:54:40
@szrot

Tia, pewnie że napiszę, o upadku i obniżeniu stopy życiowej. I laboga ;)

@analogie

Masz 110% racji, chyba zawsze w notkach i IRL porównywałem języki i środowiska prog. do młotków itp. narzędzi "różnie leżących w dłoni".

Co do "byciem programistą" i specjalizacji też się zgadzam, oczywiście; także szczegółowo w mojej działce (też zaznaczałem to przez lata w notkach "przemysłowych") - pracownicy czy pracodawcy z podejściem "doświadczony automatyk od PLC Siemensa XYZ" czy "od SCADA GE-Fanuc UVW" itp. na ogół nie są tak fajni i sensowni, jak "jestem (ew. pracodawca: potrzebuję) automatyk przeciągnięty przez 30 różnych SCADA i PLC i jeszcze pod kilem".

Wiadomo, to są odwieczne (naprawdę odwieczne!) dyskusje "superwydajna specjalizacja" vs. "Jack-of-all-trades, Master of none". IMHO zaleca się jakiś tam zdrowy kompromis w temacie, akurat tu wyjątkowo prawda leży po środku, mam wrażenie.

@kapcia

"To nie ja, to jednoręki!" (serio nie pamiętam co ja tam nawsypywałem do tego pliku, może czas go odświeżyć po latach, będziecie się uczyć nowych dat i nazwisk ;D )

charliebravo
Wed, 21 Oct 2020 11:58:53
@upadek
Znaczy V8 -> R6?

@zdrowy kompromis
Tutaj poniekąd jest to narzucone przez samą "strukturę umiejętności". Raczej trudno być super programistą czegokolwiek konkretnego (=wąska specjalizacja) bez bycia "programistą" po drodze (chociaż z drugiej strony sam narzekam że właśnie mnóstwo ludzi się ta trudna sztuka udaje). Może to zależy od historii budowania skillsów, czy to przyszło "od dołu" czy "od góry"?

@kapcia
Daty i nazwiska to spoko, najbardziej mnie irytuje guglanie tablicy Mendelejewa :P

Boni avatar Boni
Wed, 21 Oct 2020 12:58:58
@szrot

Miało być V8->R4 ale pse pana fyfło V8->V6

@programowanie

Mam wrażenie, że nadmierne wyspecjalizowanie programistów jest całkiem łatwe i przyjemne, jeśli robią na wystarczająco wysokich poziomach abstrakcji (nie jezyków, ale ogólnie zagadnień i rozwiązań okołokomputerowych). Co teoretycznie nie zachodzi dla byle automatyki czy podobnych, ale jednak od jakiegoś czasu spoko można tak podchodzić ("a co mnie obchodzą bity, bajty, transmisje czy inne ciśnienie pary w kotle, kiedy to przecież są cyferki i obrazki oprogramowane w SCADA w skryptach a la C#, na tagach, z bazami danych i SQL pod ręką - JAM JEST SPEC OD TEJ SCADA!"). Z czego bywają "przezabawne" fakapy oczywiście, jak np. wspominane kiedyś chyba przeze mnie próby wyjęcia przez baaardzo kumatych inż. automat. zakresu 0-99999 z 16 bitów...

@kapcia

No jak rany, po ówczesnych waszych narzekaniach zostały tam tylko ze 4 i to naprawdę popularne pierwiastki! ;P

charliebravo
Wed, 21 Oct 2020 14:36:57
@V6
IS 2gen?

@100k z 16b
No przecież można, tylko to tak "co półtora" wyjdzie (troll face)

@popularne pierwiastki
Jakoś się numerków na pamięć nie nauczyłem nigdy. Pewnie by mi było łatwiej np z łacińskiej nazwy na polską niż numerek.

Boni avatar Boni
Wed, 21 Oct 2020 22:42:56
@szrot

Owszem, IS250. No ale to łatwa zagadka, niewiele dawniej było modeli lexusa...

@100k w 16bit

Ale jesteś zabawny! zupełnie jak moi koledzy wtedy, no ale klient od tamtego projektu jakoś się nie śmiał ;D

@pierwiastki w kapciu

Eee tam, łacińskie nazwy bezużyteczne przecież. Może kiedyś coś wymyślę innego zamiast tych 5 (hel, lit, azot, tlen, krzem). Albo zostawię tylko pierwiastki i wszyscy komcionauci zaraz te 5 wykują na blachę ;P




 

Engine: Anvil 1.08   BS