Article View: pl.comp.lang.c
Article #310131Re: Coroutines w (GNU) C
From: Piotr Gałka
Date: Mon, 03 Feb 2020 11:58
Date: Mon, 03 Feb 2020 11:58
143 lines
8972 bytes
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-mailReferences:
<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