🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #310131

Re: Coroutines w (GNU) C

#310131
From: Piotr Gałka
Date: Mon, 03 Feb 2020 11:58
143 lines
8972 bytes
W dniu 2020-02-02 o 00:00, M.M. pisze:

>> No i dotychczas zawsze było, że oprócz tego mamy do zrobienia 'na
>> wczoraj' jeszcze kilka rzeczy i na pewno teraz nie możemy opóźniać.
>> Takich zaplanowanych, różnych skoków technologicznych do wykonania mamy
>> jeszcze kilka. Do niektórych powstał nawet hardware i czeka od 4 lat aż
>> znajdziemy na to czas.
> 
> A jakby kogoś zatrudnić, albo wynająć z zewnętrznej firmy, kto ma wyczucie
> kompilatora C++

Chyba nie zdajesz sobie sprawy ile to by było komplikacji na wstępie i 
później jakby trzeba było coś w tym poprawić.

C++ uczyłem się w 92 z ksera oryginału książki Stroustrupa. Jak w 93 
ukazało się polskie tłumaczenie przeczytałem jeszcze raz.
Na tej podstawie napisałem w C++ makro assembler'51 i coś mnie podkusiło 
(ambicja), że koniecznie muszę go przerobić na jednoprzebiegowy (nie 
załapałem, że to miało sens gdy źródło było na tasiemce perforowanej a 
gdy źródło jest na HDD to co za problem przeczytać kod jeszcze raz). 
Konieczność przechowania różnych danych do drugiego przebiegu zjadała 
pamięć i natknąłem się na problemy przy dłuższych źródłach (PC miał 640k 
RAMu). Przeciążenie operatora new pozwoliło mi wydłużyć assemblowane 
źródło 2x.
Dopóki używaliśmy 51-ki brat korzystał wyłącznie z mojego assemblera bo 
inne się wykładały na wyliczeniach danych do ustawiania UARTa z 
częstotliwości zastosowanego kwarca (liczyły na 16 bitach a ja na 32).

Uważam, że mam wyczucie C++ (w wersji z tamtych czasów), ale 
programowaniem zajmuję się tydzień/dwa w roku więc ... nie nadążam za 
nowymi standardami. Poza tym używam nadal głównie C++ Buildera 5 (on też 
nie nadąża :) ).
Mam też Buildera 2010. Pewnie bym się przeniósł gdyby nie jego fjuczer - 
tylko raz daje się uruchomić po jednym resecie komputera. Znalazłem w 
sieci jakieś obejścia do tego, ale nie miałem wystarczającej presji aby 
je wdrażać.

W związku z treścią dyskusji właśnie przeszukałem wszystkie moje *.h w 
poszukiwaniu void* i wyskoczył mi tylko ten mój assembler z 1996r. 
Pewnie przeciążenie operatora new tego wymagało.

Nigdy nie nauczyłem się korzystać z zewnętrznych bibliotek.
AES, CMAC, HMAC, SHA napisałem sobie sam (w C++).
Moje źródło zawierające:
- CRC32,
- AES128,
- AES256,
- szyfrowanie tymi AES w trybie CTR (counter),
- CMAC,
- SHA256,
to jedynie 87 linijek h i 268 liniej cpp (ale może nie być przenoszalne 
do środowiska o odwrotnym ułożeniu bajtów, choć nie jestem tego pewien).
Jakby ktoś chciał mogę zapodać.

> i mniej/więcej wie jak zaimplementować, albo jakie
> eksperymenty przeprowadzić, aby uzyskać dany efekt?

Każdy nasz program wymaga ciągłego rozwoju, a czasem natychmiastowej 
interwencji (zdarzało nam się siedzieć w pracy do 4-ej rano).
Musiałby to być ktoś na stałe i o takiej samej dyspozycyjności jak my.

> W niektórych firmach
> odpowiadali mi, że głównym problemem jest ryzyko z wdrażania nowej osoby.

Ryzyko i czas, czas, czas.

> Co u Was uniemożliwia zwerbowanie dodatkowych mocy przerobowych - jeśli mogę spytać?

Dzień wolności podatkowej, który w Polsce przypada pod koniec czerwca, a 
w USA w połowie kwietnia. To jest czynnik, który tam pozwala małym 
firmom się rozwijać, a u nas je zabija.

Poza tym nie jesteśmy pełną gębą biznesmenami i bycie człowiekiem 
stawiamy wyżej od rachunku ekonomicznego (pracownikom od montażu zawsze 
płaciliśmy bliżej średniej niż minimalnej).
Kryzys 2008 dopadł nas w 2010 (i trzymał do 2015). Biorąc kolejne 
kredyty udało nam się nie zwolnić żadnego pracownika choć nie mieliśmy 
dla nich roboty. Jeszcze się nie wygrzebaliśmy, a tu już się szykuje 
kolejny kryzys :(

Poza tym.
Nasze dotychczasowe kontakty z firmami ściśle softwareowymi każą nam 
przyjmować, że większość programistów nie umie myśleć o ograniczeniach 
sprzętu.

Przykład z ostatniego miesiąca.
Brat coś grzebie w kontrolerze korzystając po stronie PC z 
oprogramowania jednej z takich firm. Coś zmienia w ustawieniu kart i 
klika jakiś przycisk w stylu "Uaktualnij dane w kontrolerze". W 
kontrolerze ma 5 kart więc uaktualnienie to powinny być jakieś ms więc 
od razu sprawdza, czy działa - nie działa to klika jeszcze raz i jeszcze 
raz. Na ekranie żadnej informacji, że trwa jakiś proces więc wydaje się, 
że program uważa, że zrobił co trzeba. Przyczyną nie było to co napiszę 
dalej ale przy okazji prześledzenie komunikacji ujawniło, że oni w 
takiej sytuacji zamiast wysłać 2 rozkazy:
- wpisz te 5 kart,
- wykasuj karty od 6 do 32000.
robią:
- usuń kartę 1,
- wpisz kartę 1,
....
-usuń kartę 32000,
-wpisz puste dane dla karty 32000.
I kolejne naciśnięcia klawisza wstawiały w kolejkę kolejne takie procesy.

To jakaś kpina.
Rozkaz wpisz karty, gdy dane są zgodne z zawartością nie zużywa flasha 
bo najpierw jest sprawdzane, czy dane są zgodne.
Rozkaz wpisujący wszystkie karty danej strony wymaga tylko jednokrotnego 
jej przeprogramowania.
Ale rozkaz skasuj kartę (która jest) wymaga przeprogramowania strony 
flash. Potem wpisanie tych samych danych w to samo miejsce - znów.
Nie wiem ile kart jest na stronie, ale jeśli np 30 to taka procedura 
powoduje konieczność 60 krotnego przeprogramowania flash (zamiast 
średnio 0.5 raza (0 lub 1 raz)).
Kontroler, który załóżmy powinien przeżyć 30 lat, zużyje się 120 razy 
szybciej - czyli po 3 miesiącach.
Gdybym nie wiedział, że głupota pomyślałbym, że sabotaż.

Pomysł 'my robimy hardware' firma softwareowa robi oprogramowanie na PC 
(bo zrobi to na pewno lepiej od nas) mieliśmy w okolicy +- 1997. 
Przepytaliśmy pod tym kątem wszystkie firmy softwareowe na Infosystemie 
- absolutne zero zainteresowania. Nie chcieli bawić się z hardware. 
Pisali wtedy programy typu kosztorysowanie budowlanki, czy zarządzanie 
aptekami - więc pomysł upadł.

W okolicy 2014 zgłosiło się da nas kilka firm softwareowych, że chcieli 
by mieć sprzętową kontrolę dostępu, rejestrację czasu pracy, czy podobne 
zagadnienia dobrze zintegrowane z ich oprogramowaniem.
Opracowaliśmy więc system pod takim kontem.
Współpracę utrudnia to, że o komunikacji rozmawiamy innymi językami :)
Oni mają problem się dostosować do nas, a my nie jesteśmy w stanie się 
dostosować do nich.

A to, że jesteśmy nadal w Xmega a nie w jakimś linuxie to ....
Firma przeprowadzająca audyt bezpieczeństwa nie była w stanie w żaden 
sposób się wpiąć w naszego RS485, czy dobrać do komunikacji z serwerem. 
Jedyne co zasugerowali to zablokowanie strony www kontrolera po 
instalacji bo np. ataki przez przepełnienie bufora.
Odpisaliśmy, że z tego co wiemy to taki atak może być skuteczny tylko, 
gdy program jest wykonywany z RAMu - więc nie u nas. Nie wiem, czy 
blokujemy to www, czy nie - to brat pisze.
P.G.
Technical Details
Message-ID: <r191ta$mh$1$PiotrGalka@news.chmurka.net>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.213.192.88.68!not-for-mail
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <r0n95e$35l$1@dont-email.me> <f3df206c-11d4-4b22-87ff-fc7aa00935f3@googlegroups.com> <r0nevq$9iq$1@dont-email.me> <ecae4ae1-0b06-4956-8df0-593fa0f1cd01@googlegroups.com> <r0njjv$740$1@dont-email.me> <0e0786af-7b58-4070-b8cd-81f1bda1f432@googlegroups.com> <r0q9iv$23b$1@dont-email.me> <20200128233003.4bf9d9eb@mateusz> <1a207604-09fa-43f2-8d0a-e3ff51b183f4@googlegroups.com> <r0sf4i$d46$1@dont-email.me> <c9ada043-010e-41c1-8362-385fcab97fbb@googlegroups.com> <r0sm9p$r2m$1@dont-email.me> <35023603-9392-414e-9ad2-dfb5ddf4a850@googlegroups.com> <r0t1ne$3re$1@dont-email.me> <91b73c11-aadd-4e8f-9a1b-a3ea1da6adc3@googlegroups.com> <r0vipi$i8e$1@dont-email.me> <2c5f15fd-b0c0-466f-8961-a3e5b291657e@googlegroups.com> <r11uhf$6bf$1@dont-email.me> <a5b8d9cc-7cdf-467f-abc0-d91489d80a8e@googlegroups.com> <r13bkl$s0k$1@dont-email.me> <r13pgb$p54$1$PiotrGalka@news.chmurka.net> <501d4b3c-2464-4181-8f5d-376b1da7d5b6@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.213.192.88.68!not-for-mail
From: Piotr Gałka <piotr.galka@cutthismicromade.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Coroutines w (GNU) C
Date: Mon, 3 Feb 2020 12:58:15 +0100
Organization: news.chmurka.net
Message-ID: <r191ta$mh$1$PiotrGalka@news.chmurka.net>
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <r0n95e$35l$1@dont-email.me> <f3df206c-11d4-4b22-87ff-fc7aa00935f3@googlegroups.com> <r0nevq$9iq$1@dont-email.me> <ecae4ae1-0b06-4956-8df0-593fa0f1cd01@googlegroups.com> <r0njjv$740$1@dont-email.me> <0e0786af-7b58-4070-b8cd-81f1bda1f432@googlegroups.com> <r0q9iv$23b$1@dont-email.me> <20200128233003.4bf9d9eb@mateusz> <1a207604-09fa-43f2-8d0a-e3ff51b183f4@googlegroups.com> <r0sf4i$d46$1@dont-email.me> <c9ada043-010e-41c1-8362-385fcab97fbb@googlegroups.com> <r0sm9p$r2m$1@dont-email.me> <35023603-9392-414e-9ad2-dfb5ddf4a850@googlegroups.com> <r0t1ne$3re$1@dont-email.me> <91b73c11-aadd-4e8f-9a1b-a3ea1da6adc3@googlegroups.com> <r0vipi$i8e$1@dont-email.me> <2c5f15fd-b0c0-466f-8961-a3e5b291657e@googlegroups.com> <r11uhf$6bf$1@dont-email.me> <a5b8d9cc-7cdf-467f-abc0-d91489d80a8e@googlegroups.com> <r13bkl$s0k$1@dont-email.me> <r13pgb$p54$1$PiotrGalka@news.chmurka.net> <501d4b3c-2464-4181-8f5d-376b1da7d5b6@googlegroups.com>
NNTP-Posting-Host: 213.192.88.68
Mime-Version: 1.0
Injection-Date: Mon, 3 Feb 2020 11:58:34 +0000 (UTC)
Injection-Info: news.chmurka.net; posting-account="PiotrGalka"; posting-host="213.192.88.68"; logging-data="721"; mail-complaints-to="abuse-news.(at).chmurka.net"
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.4.2
In-Reply-To: <501d4b3c-2464-4181-8f5d-376b1da7d5b6@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit