logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ChatGPT junior programista? Praktyczne programy od AI część 1: tunel TCP do TCP

p.kaczmarek2 08 Wrz 2025 10:04 2421 18

TL;DR

  • Dwa programy konsolowe w C# tworzą zdalny most TCP↔TCP, który wystawia usługę poza NAT między dwiema osobnymi sieciami lokalnymi.
  • Jedna aplikacja działa jako „podwójny serwer” na maszynie z publicznym IP, druga jako klient; obie przekazują dane między socketami i pokazują stan w tytule konsoli.
  • Postawienie aplikacji zajęło około 3 minuty, a prompt wymagał minimalnego demo w C# z dwoma plikami, portami z argumentów i logowaniem pakietów w hex.
  • Skopiowany kod skompilował się i działał od razu, choć po około pół godzinie trzeba było uruchomić oba programy ponownie z powodu zawieszonego socketu.
  • Rozwiązanie nie sprawdzi się bez publicznego IP i przekierowania portów, a autor świadomie zignorował gotowe tunele, VPN-y i inne alternatywy.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Okna konsolowe RemoteMachine.exe i LocalMachine.exe pokazujące przekaz danych TCP w hex
    W tej serii będę przedstawiać przydatne programy i narzędzia wygenerowane przez AI. Seria ograniczy się tylko do praktycznych przypadków, czyli takich, które naprawdę mi się przydarzyły i pomogły w pracy. Dziś na tapetę biorę tematykę sieciową i aplikację, którą udało się wygenerować za pierwszym razem, a samo jej postawienie zajęło mi w sumie ze 3 minuty. Będzie to zdalny pomost TCP na TCP pozwalający łatwo wystawić daną usługę poza NAT. Będzie to dobry przykład pokazujący jak bardzo pomocne są dzisiejsze modele sztucznej inteligencji.

    Pomost był potrzebny przy testowaniu usługi powiązanej z API dla Home Assistant.

    Problem
    Mam dwa urządzenia, które chcę skomunikować po TCP, ale są osobne w osobnych sieciach lokalnych. Tylko jedna z sieci daje mi możliwość przekierowania portu na routerze (posiada publiczne IP) a na domiar złego to jest ta sieć, która w moim zastosowaniu byłaby stroną kliencką. Nie mam jak w normalny sposób zatem nawiązać tego połączenia, a potencjalne rozwiązania (których nawiasem mówiąc trochę jest) wydają się wymagać troszkę konfiguracji i zabawy.

    Rozwiązanie
    Mój pomysł to dwie aplikacje w C#, jedna będzie "podwójnym serwerem" i postawię ją na maszynie z publicznym IP (przekierowany port), a druga będzie klientem i postawię ją zdalnej maszynie. Obie aplikacje będą przerzucać po prostu dane między socketami.

    Prompt
    Bez cenzury. Całość autentycznie tak, jak pisałem. Wybaczcie luźny styl, grunt, że działa:
    
    Write C# console TCP to TCP bridge. What I need:
    RemoteMachine:
    - connect to two IPs and ports, forward traffic between them, if any connection dies, just reopen it, do not block, be fast, use Available () etc, in console title show stats  as sent/received (two numbers) , and state of each connection, take ips/ports from args
    LocalMachine:
    - Provide two open ports waiting for connection, also show state in console title, also forward traffic between them, also be very quick, one client per each port max ofc so it makes sense
    So give just two files, minimal working demo, ofc course ignore are errors, it must be stable, it must work without attendance. Each tool should also dump to console received packets in hex with [timestamp] IP:port -> IP:port AABBCCFF format
    



    Kod
    Maszyna lokalna (dwa serwery); to ona wymaga publicznego IP:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    Maszyna zdalna (dwa klienty):
    Kod: C#
    Zaloguj się, aby zobaczyć kod


    Testowanie
    Skopiowałem, skompilowałem i odpaliłem... i w zasadzie działa. Spełnia swoją rolę. Po powrocie do komputera po pół godziny musiałem odpalić ponownie oba programy, bo chyba któryś socket zawisł, ale to nie problem. Wygląda na to, że dostałem to czego chciałem i to kosztem minuty pisania zapytania do AI. Jestem zadowolony.

    Co można by ulepszyć?
    Mam wrażenie, że można by bardziej uodpornić ten program na oczywiste błędy i dodać lepsze wyświetlanie stanu socketów. Nie pokusiłem się jeszcze jednak o to, bo szkoda mi było zabawy.

    Podsumowując, oszczędziłem troszkę czasu a wszystko działa bez zarzutów. Poniekąd rozumiem, że tyle jest mowy o spadku wartości programistów juniorów, jak takie przydatne rzeczy potrafi wygenerować LLM. Oczywiście tu trzeba zwrócić uwagę na to, że ja z góry wiedziałem czego potrzebuję i potrafiłem zawrzeć to w prompcie - kompletny początkujący mógłby mieć z tym problem, więc ogólna wiedza jest wciąż bardzo potrzebna, a nawet wydaje się, że teraz duże doświadczenie jest jeszcze cenniejsze niż przed erą AI...
    Można by tutaj nieco dyskutować, czy rzeczywiście sama moja idea miała sens - czy może lepiej po prostu wziąć jakieś gotowe rozwiązanie? Możliwe, że ktoś z czytających takie rozwiązanie zna i ma sprawdzone, ja natomiast nie chciałem przeczesywać Internetu przez godzinę czy ileś i uważam, że naprawdę oszczędziłem czas.
    Podoba mi się też to, że dostaję kod zrobiony wedle wymagań i bez poprawek. W przypadku trudniejszych zadań tak nie ma, ale trudniejszych zadań i tak nie robiłby junior LLM.
    A jak Wy uważacie? Czy też udało Wam się wygenerować jakieś autentycznie przydatne programy?
    PS: Oczywiście to rozwiązanie nie u każdego się sprawdzi, bo nie każdy ma publiczne IP i opcję przekierowania portu. Dodatkowo są różne usługi, tunele, VPN, itd. Jestem tego świadom. Celowo ich nie chciałem użyć - chciałem mieć rozwiązanie szybkie i "czyste". Temat jednak nie miał na celu forsowania tego rozwiązania jako poprawne, po prostu chciałem pokazać, jak pomocne może być AI w przypadku prostych i typowych zadań.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14440 postów o ocenie 12413, pomógł 650 razy. Jest z nami od 2014 roku.
  • REKLAMA
  • #2 21656583
    Imekxus
    Poziom 20  
    Posty: 855
    Pomógł: 38
    Ocena: 232
    Nienawidzę ludzi commitujących kod od AI do repo bez dopasowania się do istniejącej architektury kodu, a niestety coraz więcej się takich osób pojawia - commitują zmiany tylko dlatego, że funkcjonalnie działają.

    https://lore.kernel.org/all/CAHk-=wjamixjqNwr...7t33Pn7J36EeUwCRjk_aem_HODuQTsRApOdVFeTrOsefw

    Cytat:

    Yes, I'm grumpy. I feel like my main job - really my only job - is to
    try to make sense of pull requests, and that's why I absolutely detest
    these things that are automatically added and only make my job harder.

    ...

    Can we please stop this automated idiocy?


    dodatkowo:
    https://pl.wikipedia.org/wiki/Prawo_nag%C5%82%C3%B3wk%C3%B3w_Betteridge%E2%80%99a
  • #3 21656628
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14440
    Pomógł: 650
    Ocena: 12413
    Imekxus napisał:
    Nienawidzę ludzi commitujących kod od AI do repo

    Nie zapominaj o coraz to bardziej popularnym pomyśle by to samo AI commitowało swój kod do repo - systemy agentowe, Devin i tak dalej. Widziałem już na GitHubie różne nonsensowne pull requesty wygenerowane przez tego typu AI.

    Ja z kolei najbardziej chyba narzekam na klientów korzystających z AI bez zrozumienia problematyki całego zagadnienia. Już kilka takich przypadków miałem. Jeden nawet za namową ChatGPT kupił VPS w celu rzekomego przyśpieszenia usługi chodzącej w samej przeglądarce (!), a drugi mi wklejał "wspaniałe pomysły" od Groka jako bloki tekstu w Whatsappie...

    Nie zmienia to faktu, że moim zdaniem, rozważnie i odpowiedzialnie użyte AI jest w stanie dać doświadczonemu programiście nawet więcej, niż taki junior programista do pomocy. W każdym razie ja próbowałem i tego, i tego, i moim zdaniem AI więcej pomaga - szybciej wyszukuje informacje, daje przykłady, itd., choć w większości przypadków nie używam nawet kodu od AI, bardziej przepisuję po swojemu, no, chyba że chodzi o coś co naprawdę stanowi osobny moduł lub endpoint API.

    Też inna sprawa, że z tego co widziałem, to ludzie w moim otoczeniu nie umieją korzystać z AI - albo korzystają z niego za dużo i uważają je za wyrocznie, albo wcale.
    Pomogłem? Kup mi kawę.
  • #4 21656637
    Imekxus
    Poziom 20  
    Posty: 855
    Pomógł: 38
    Ocena: 232
    Podstawową zasadą przy korzystaniu z agentów (w moim przypadku github copilot) jest to, że nie można wygenerowanych treści użyć bez ich wcześniejszego zweryfikowania. Pytanie ilu programistów i z jakim stażem przypadało by na jednego agenta AI żeby robić mu review? A skoro review to przecież zmienia się to w zwykłe pisanie promptów i koło się zamyka - zamiast juniorów mamy po prostu pewnie jakichś senior devów - vibe coderów.
  • #5 21656650
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14440
    Pomógł: 650
    Ocena: 12413
    Zgadza się, takie poprawianie po AI już nawet zaczyna mieć swoją nazwę - slop fixer:
    Cytat:

    Now, that push has resulted in a new line of gig work: slop fixer-uppers, who get paid to improve AI-generated art, writing, and code — by making it less, well, sloppy.

    Źródło: https://futurism.com/companies-hiring-humans-fix-ai

    Jeszcze teraz wypada dodać, że taki low quality AI code trafia masowo na Github, a potem z tego uczą się kolejne modele...

    Nie zmienia to faktu, że i tak uważam, że odpowiednio użyte AI potrafi zredukować ilość pracy w znacznym stopniu i i tak wolę mieć dostęp do LLM, niż jednego dodatkowego juniora bez AI.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #6 21656864
    Imekxus
    Poziom 20  
    Posty: 855
    Pomógł: 38
    Ocena: 232
    Po co wybierać, trzeba pamiętać, że junior to zasób ludzki który będzie pracował i odprowadzał w kraju podatki a AI zarabia dla Panów z USA. Też korzystam z AI ale review to podstawa i ciężko mi się pracuje z ludźmi, którzy walą commity tylko dlatego, że coś działa nie zmieniając nic/prawie nic w wygenerowanym kodzie. Szczerze to nie nadążam za ich zmianami, jest ich za dużo żeby je rzetelnie przeanalizować.

    A no i ten junior kiedyś ewoluuje, każdy się kiedyś uczył - to co teraz koniec z branżą IT zatrudniamy tylko ludzi z 10 lat+ expa?
  • REKLAMA
  • #7 21657034
    krzbor
    Poziom 29  
    Posty: 1733
    Pomógł: 40
    Ocena: 1046
    Mając na jednym komputerze stałe IP dlaczego nie zestawiłeś VPN? Uzyskujesz bezpieczeństwo i nie musisz się martwić o ponowne połączenie. Wszystko załatwia VPN (polecam OpenVPN). To, że komputer klienta jest w rzeczywistości serwerem nie ma znaczenia - można to bez problemu skonfigurować. VPN zestawia sieci i organizuje routing - w którą stronę będziemy się łączyć nie ma znaczenia.
  • #8 21657180
    Pawel_
    Poziom 12  
    Posty: 18
    Ocena: 2
    Mając jednego klienta z publicznym IP to bym postawił WireGuard. Jest prosty w konfiguracji i działa bez problemów.
  • #9 21657232
    chemik_16
    Poziom 27  
    Posty: 999
    Pomógł: 74
    Ocena: 127
    A jak nie ma klienta z publicznym to jest i taki zerotier ;)
  • #10 21658502
    calkiem_bez_sensu
    Poziom 7  
    Posty: 10
    Ocena: 20
    Super inteligiencja. Umie przepisać coś, co ja pisałem sam, od podstaw z pomocą jakiegoś helpa od API WinSock + api do socketów linux 25 lat temu jako szesnastolatek. Niezły poziom ma wspólczesny "junior programista".
  • REKLAMA
  • #11 21687050
    katakrowa
    Poziom 23  
    Posty: 899
    Pomógł: 9
    Ocena: 854
    Imekxus napisał:
    Nienawidzę ludzi commitujących kod od AI do repo bez dopasowania się do istniejącej architektury kodu, a niestety coraz więcej się takich osób pojawia - commitują zmiany tylko dlatego, że funkcjonalnie działają.


    Dziwne masz problemy. Nie ma pojęcia jak dalej będziesz z tym żyć?

    Imekxus napisał:
    dstawową zasadą przy korzystaniu z agentów (w moim przypadku github copilot) jest to, że nie można wygenerowanych treści użyć bez ich wcześniejszego zweryfikowania

    Zgadza się. Nie zmienia to faktu, że w rękach doświadczonego programisty AI daje "turbo moce". Jak korzysta się z tego z głową to w 3 minuty możemy napisać coś co bez pomocy AI zajęłoby nawet kilka godzin. Dodatkowo AI jest świetnym źródłem pomysłów na alternatywne rozwiązanie problemu.
  • #12 21687057
    Imekxus
    Poziom 20  
    Posty: 855
    Pomógł: 38
    Ocena: 232
    >>21687050
    Ano tak, że jeśli trafia/trafi mi się taki pull request do review to go rejectuję.
  • #13 21687058
    katakrowa
    Poziom 23  
    Posty: 899
    Pomógł: 9
    Ocena: 854
    Imekxus napisał:
    Ano tak, że jeśli trafia/trafi mi się taki pull request do review to go rejectuję.


    Wspaniale.
  • #14 21687063
    Imekxus
    Poziom 20  
    Posty: 855
    Pomógł: 38
    Ocena: 232
    Widzę, że masz dużo energii i szukasz zaczepki, jedyne czego mogę Ci życzyć to żebyś trafił do projektu z legacy kodem, takim nie za długim, może być 2 letni, gdzie kodowali sami vibe coderzy, najlepiej z Indii - zobaczymy czy wtedy będziesz taki cwany.
  • #15 21687070
    katakrowa
    Poziom 23  
    Posty: 899
    Pomógł: 9
    Ocena: 854
    >>21687063
    Nie martw się. Doskonale daję sobie radę zarówno z kodem młodych juniorów jak i "legacy" kodem sprzed 25 lat.
    Na wszystko jest sposób a doświadczenie bardzo w tym pomaga. Wnioskuję, że jesteś początkującym lub mało doświadczonym programistą skoro tak bardzo boisz się projektów "legacy".
    Dodam jeszcze, że właśnie przy takich starych projektach AI potrafi być niezastąpione.


    Moderowany przez ArturAVS:

    3.1.9. Rozpowszechnianie treści ironizujących, prześmiewczych lub złośliwych, stanowiących przejaw braku szacunku do innych Użytkowników lub osób trzecich.

  • #16 21687072
    Imekxus
    Poziom 20  
    Posty: 855
    Pomógł: 38
    Ocena: 232
    Radzę jednak wrócić do 1 klasy szkoły podstawowej, nauczyć się czytać ze zrozumieniem, przeczytać temat od początku a potem się odzywać.

    Moderowany przez ArturAVS:

    3.1.9. Rozpowszechnianie treści ironizujących, prześmiewczych lub złośliwych, stanowiących przejaw braku szacunku do innych Użytkowników lub osób trzecich.

  • #17 21687095
    katakrowa
    Poziom 23  
    Posty: 899
    Pomógł: 9
    Ocena: 854
    p.kaczmarek2 napisał:
    A jak Wy uważacie? Czy też udało Wam się wygenerować jakieś autentycznie przydatne programy?


    Zdecydowanie tak. Przy odrobinie cierpliwości można AI może wygenerować cały program z podziałem na front-end, back-end, DB itp.
    W głównej mirze jedna używam generowania metod, w których mam dużo pól albo bardziej złożone pętle i warunki. W tym obszarze oszczędność czasu jest chyba nahwiększa.

    Drugi obszar to programy pomocnicze typu napisz program, który połączy się za bazą wyciągnie coś, przeliczy i będzie tworzył z tego np. pliki XLS albo csv.

    Jakiś czas temu napisałem program, który dawał GPT dostęp do dysku/systemu plików i linii komend. Cyklicznie uruchamiany (poprzez API) potrafił napisać całe działające programy lub skrypty (a to była jeszcze wersja GPT v3). Ważne, że GPT sam mógł testować to co napisał co w praktyce przekładało się na to, że było to całkowicie samodzielne narzędzie tworzące małe projekty.
  • #18 21687218
    Konto nie istnieje
    Poziom 1  
  • #19 21774374
    LEDówki
    Poziom 43  
    Posty: 9371
    Pomógł: 1305
    Ocena: 2531
    W październiku zachciało mi się użyć AI do pisania kodu. Szło to bardzo opornie gpt-5. Popełniał mnóstwo błędów i to szkolnych. Wrzucał na ślepo jakieś poprawki - może zadziała?
    Przetestowałem modele na LMArena. Z ich pomocą dokończyłem kod i program działa. Zachęcony zrobiłem kolejny program. Tu znowu mnóstwo błędów podstawowych - a to niezwalniane uchwyty ikon, a to coś za szybko otwierane. Najsłabiej radził sobie z logiką. Prosty konstruktor skomplikował tak, że później wyższy model w innej sesji stwierdził, że da się to uprościć. Uprości, ale i tak nie uruchomił. Po moich testach załapał w czym problem i moje podejrzenia sprawdziły się. Wywalił podejrzany kod i w końcu program zaczął działać jak chciałem. Później usunął szkolne błędy w formularzu - czekboksy jednego ustawienia wpływały na czekboksy innych ustawień. GPT 5.1 podał kod usuwający usterkę.
    Jeśli junior startuje od zera, to AI jest dużą pomocą, bo zna dobrze język, dość dobrze potrafi przenieś logikę działania na kod. Jeżeli junior nie ogarnie logiki działania programu, to może mieć spory problem właśnie z tymi drobnymi błędami, które jednak powinny być omijane przez coś, co zna język bardzo doborze. i bardzo dobrze zna system, na który jest pisany program.
    Poprawki wrzucałem tylko gdy usuwane były poważne błędy.
    Pewne rzeczy poprawiałem z innymi modelami, bo gpt5 nie nadawał się do tego. I jeszcze taka ciekawostka - gpt lepiej sobie radzi gdy go chwalimy. nagany powodują, że kręci się w miejscu i nie wie, co robić. zupełnie jak junior albo nowy użytkownik elektroda.pl niefachowo zadający pytanie.;)

    Co do języków - w C# pisanie programu zajęło znacznie więcej czasu niż wygenerowanie skryptu python, który dawał tę samą użyteczność. GPT pomógł też wprowadzić drobne zmiany w konfiguracji programów, żeby zużywały mniej pamięci. Taką bzdurkę jak wyłączanie urządzeń BT mogłem sam znaleźć, ale skoro było AI, to skorzystałem. Za jakiś czas pewnie trzeba będzie znowu samodzielnie drążyć każdy temat, bo AI nie będzie za darmo w nieskończoność.
📢 Słuchaj (AI):

Podsumowanie tematu

✨ Dyskusja dotyczy praktycznego zastosowania AI do generowania programów sieciowych, w szczególności tunelu TCP do TCP umożliwiającego komunikację między urządzeniami w różnych sieciach lokalnych, gdzie tylko jedna sieć ma publiczne IP i możliwość przekierowania portów. Autor podkreśla, że AI pozwoliło mu szybko stworzyć działające rozwiązanie w kilka minut, co ilustruje potencjał modeli sztucznej inteligencji w pracy programisty. W odpowiedziach poruszono kwestie jakości kodu generowanego przez AI, konieczności jego weryfikacji i dostosowania do istniejącej architektury, a także ryzyka masowego wprowadzania niskiej jakości kodu do repozytoriów. Wskazano, że AI może znacząco przyspieszyć pracę doświadczonego programisty, oferując szybkie wyszukiwanie informacji, generowanie przykładów i alternatywnych rozwiązań. Jako alternatywne rozwiązania sieciowe dla problemu komunikacji między sieciami wymieniono VPN (OpenVPN), WireGuard oraz Zerotier, które zapewniają bezpieczne i stabilne połączenia. Dyskusja podkreśla, że AI jest narzędziem wspomagającym, które wymaga odpowiedzialnego użycia i umiejętnego przeglądu wygenerowanego kodu, a także że w rękach doświadczonych programistów może pełnić rolę efektywnego wsparcia, porównywalnego lub przewyższającego pomoc juniora. Wspomniano również o wykorzystaniu AI do generowania kompleksowych programów i automatyzacji zadań, co zwiększa produktywność i pozwala na szybkie prototypowanie.
Wygenerowane przez model językowy.
REKLAMA