Zdjęcie w tle

Społeczność

Programowanie

1k+

Małe projekty zazwyczaj robię w TDD. Czyli najpierw piszę testy bo wtedy gdy piszę testy to od razu wiem czego od programu oczekuję, a potem gdy mam nawet 15 min wolnego czasu to naprawiam kod aby przechodIł dany test.


Przy większych projektach zazwyczaj mi się to nie sprawdza bo za dużo czasu idzie na przepisywanie testów gdy koncepcja się zmienia, ale piszę testy gdy coś implementuję. Gdy test testuje moją apkę zamiast (robić to manualnie) to wiem, że zrobi to tak samo za każdym razem

@dotevo akurat w rust pisanie testów tak mi jakoś bardzo dobrze podchodzi. Ale to prawda jak koncepcja się szybko zmienia albo to POC to testowanie czasem bywa bez sensu

Zaloguj się aby komentować

Ostatnio w pracy zauważyliśmy, że podczas startu urządzenia(bardzo wolny armv7 32 bitowy), skrypt pythona(którego importowanie/uruchamianie traw~20/30 sekund) czasami(zwykle 1%-5% przypadków) się wysypuje, wewnątrz jakiegoś losowego importu.


Na internecie, głównym problemem jest brak np. avx, ale ten program normalnie działa, tylko czasami się wysypuje, tylko podczas importu.


Macie jakiś może pomysł co może powodować problem i w jaki sposób go próbować naprawić?


 Fatal Python error: Illegal instruction

 Current thread 0x76fc8010 (most recent call first):

  File "/usr/lib/python3.9/site-packages/matplotlib/__init__.py", line 593 in __setitem__

  File "/usr/lib/python3.9/site-packages/matplotlib/__init__.py", line 760 in _rc_params_in_file

  File "/usr/lib/python3.9/site-packages/matplotlib/__init__.py", line 796 in rc_params_from_file

...

  File "<frozen importlib._bootstrap>", line 680 in _load_unlocked

  File "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlocked

  File "<frozen importlib._bootstrap>", line 1007 in _find_and_load

  File "<frozen importlib._bootstrap>", line 1030 in _gcd_import

  File "/usr/lib/python3.9/importlib/__init__.py", line 127 in import_module

  File "/usr/lib/python3.9/site-packages/celery/loaders/base.py", line 89 in import_module

  File "/usr/lib/python3.9/site-packages/celery/utils/imports.py", line 105 in import_from_cwd

  File "/usr/lib/python3.9/site-packages/celery/loaders/base.py", line 92 in import_from_cwd

  File "/usr/lib/python3.9/site-packages/celery/loaders/base.py", line 86 in import_task_module

...

  File "/usr/lib/python3.9/site-packages/celery/bin/celery.py", line 217 in main

  File "/usr/lib/python3.9/site-packages/celery/__main__.py", line 15 in main

  File "/usr/lib/python3.9/site-packages/celery/__main__.py", line 19 in

  File "/usr/lib/python3.9/runpy.py", line 87 in _run_code

  File "/usr/lib/python3.9/runpy.py", line 197 in _run_module_as_main


lub

 Fatal Python error: Illegal instruction

 Current thread 0x76fdd010 (most recent call first):

  File "/usr/lib/python3.9/textwrap.py", line 431 in dedent

  File "/usr/lib/python3.9/site-packages/pandas/util/_decorators.py", line 477 in __call__

  File "/usr/lib/python3.9/site-packages/pandas/core/window/rolling.py", line 2041 in Rolling

  File "/usr/lib/python3.9/site-packages/pandas/core/window/rolling.py", line 1862 in

...

  File "<frozen importlib._bootstrap>", line 680 in _load_unlocked

  File "<frozen importlib._bootstrap>", line 986 in _find_and_load_unlocked

  File "<frozen importlib._bootstrap>", line 1007 in _find_and_load

  File "<frozen importlib._bootstrap>", line 1030 in _gcd_import

  File "/usr/lib/python3.9/importlib/__init__.py", line 127 in import_module

  File "/usr/lib/python3.9/site-packages/uvicorn/importer.py", line 21 in import_from_string

  File "/usr/lib/python3.9/site-packages/uvicorn/config.py", line 477 in load

  File "/usr/lib/python3.9/site-packages/uvicorn/server.py", line 67 in serve

  File "/usr/lib/python3.9/asyncio/runners.py", line 44 in run

...

  File "/usr/lib/python3.9/site-packages/click/core.py", line 782 in main

  File "/usr/lib/python3.9/site-packages/click/core.py", line 829 in __call__

  File "/usr/lib/python3.9/site-packages/uvicorn/__main__.py", line 4 in

  File "/usr/lib/python3.9/runpy.py", line 87 in _run_code

  File "/usr/lib/python3.9/runpy.py", line 197 in _run_module_as_main


#programowanie

@Klopsztanga Wstępnie przeglądałem i nie zauważyliśmy żadnych powiązań z wysypywaniem się a kolejnością uruchamiania systemowych.

Cała aplikacja uruchamia się jest zależna od redisa, który dość późno się uruchamia, więc raczej gdy aplikacje się importują, to już wszystko w systemie prawie wstało.


@wonsz - akurat jak z ręki go uruchamiamy po dłuższym okresie czasu, to problemy raczej nie występują(choć pewni nie jesteśmy). Więc dodanie delayu, pewnie nieco by problem zmniejszyło, ale jest dla nas bardzo ważne jest by ta aplikacja się uruchamiała jak najszybciej jak to możliwe.

@qarmin ok, ale opóżnienia możecie użyć do określenia wymagań środowiska do poprawnego uruchomienia skryptu. jakiś skrypt puścić co weżmie jakieś opóźnienie, zrzuci info o środowisku, spróbuje odpalić skrypt, zanotuje czy się wyjebał, zaktualizuje odpowiednio wartość opóźnienia do kolejnej iteracji, restart...i zostawić na weekend niech napierdala i zbiera dane

Masz to w dokerze? Bo wlasnie po to jest doker zeby nie bylo "u mnie dziala". Jesli nie masz kodu w dokerze to spora szansa ze to naprawi sprawe

@qarmin no to moze raz zbudowac z tego skryptu binarke (pod konkretna platforme) tak zeby za kazdym razem nie interpretowac kodu - o ile sie nie myle to python jest interpretowalny? JIT?

Zaloguj się aby komentować

może ktoś z #programowanie #devops ma jakieś doświadczenia z postgres-operatorem od Zalando https://github.com/zalando/postgres-operator/tree/master i mógłby się podzielić wrażeniami?


Use-case: chcę mieć platformę do taniego i szybkiego publikowania swoich aplikacji w internecie. W tym celu tworzę sobie mini-datacenter w domu oparte na kubernetesie, chwilowo składające się z jednego komputera. Dostęp do niego z publicznego internetu robię przez Cloudflare Tunnel https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/


Chcę żeby setup był rozszerzalny i chcę zachować jak najmniejszy stack technologiczny, bo nie lubię się uczyć rzeczy "od zera". Obecnie zastanawiam się jak załatwić temat relacyjnej bazy danych. Myślałem nad postawieniem postgresa bezpośrednio na baremetalu, ale wydaje mi się że networking żeby potencjalnie dopuścić do niego ruch z kolejnych nodów w przyszłości to będzie tragedia.


#technologia #komputery #siecikomputerowe #programista15k #naukaprogramowania #lajko

127840f5-09e5-4847-998a-944ed0aa51b9

@wombatDaiquiri - ja Kubernetesa mam po dziurki w pracy, żeby się z nim jeszcze w domu pierdzielić

Oczywiście z tym Postgres Operatorem od Zalando nie miałem do czynienia - ale patrząc po README.md z GitHuba to wygląda dobrze - możesz opisać co dokładnie Cię w tym urzekło do Twoich zastosowań jak masz tylko jedną maszynę?

Ja jako, że jestem minimalistą to używam Podmana i uruchamiam bardziej skomplikowane rzeczy w podach.

Na Malince 5 z 8GB ramu mam teraz właśnie Postgresa bo postawiłem kilka rzeczy i codzienny backup robię na mojego Bieda-NASa rsynciem (który później też rsynciem jest backupowany na większy serwer tak na wszelki wypadek - już kiedyś opisywałem mój setup i dlaczego tak akurat robię) - mi starcza

Generalnie bardziej staram się zrozumieć co Ty tam próbujesz osiągnąć z tym swoim setupem bo cały wysiłek, który w to wkładasz oceniam bardzo pozytywnie - nie każdemu się chce i nie każdy potrafi - zwłaszcza jeśli to co robisz ma Ci się przydać w pracy i by zarabiać lepszą kasę

@koszotorobur próbuję się wyzbyć metody szukania "poprawnego rozwiązania" więc bardzo dziękuję Ci za Twojego posta.


Generalnie chciałem postawić jakoś instancję bazy danych żebym mógł z niej korzystać w kontenerkach. A dzięki Twojej sugestii zmieniłem trochę zapytanie do google i dostałem tutorial na prostszych komponentach które już z nam więc plan właśnie uległ zmianie https://www.digitalocean.com/community/tutorials/how-to-deploy-postgres-to-kubernetes-cluster


Wysokopoziomowo - jestem programistą. Jestem nieskromnie mówiąc niezły w pisanie programów. Ale całe środowisko w którym te programy były uruchamiane były własnością firmy w której pracowałem. W ten sposób zawsze uczyłem się procedur które ktoś mi przygotował, ale na własne potrzeby nadal korzystałem z `./binarka &` bo w sumie działa.


No i z wiekiem odczuwam potrzebę podzielenia się wiedzą jak tworzyć cyfrowe produkty, ale do tego potrzebuję środowiska uruchomieniowego które uczeń będzie mógł zreplikować i rozszerzać według własnych potrzeb. A i mi się przyda wyrobić opinię i usystematyzować stack bo często ciekawe pomysły upadają jak staję przed wizją pierdół do wykonania zanim się zaczną ciekawe zadania.

@wombatDaiquiri - widzę, że zacząłeś od bardzo wysokiego poziomu abstrakcji i komplikacji, którym jest Kubernetes (nawet w konfiguracji Sinlge Node K8s) - dobrze go oczywiście znać ale do swoich zastosowań często jest to overkill jeśli nie wybrałeś tego rozwiązania świadomie ze wglądu na benefity, które faktycznie Tobie oferuje (a dalej musisz płacić cenę za skomplikowanie projektu).


Ja od zeszłego roku preferuję Podmana zamiast Dockera gdyż Docker wymaga dwóch daemonów ciągle działających na systemie (dockerd oraz containerd) a Podman jest daemonless i może uruchamiać aplikacje od razu w podach (i też można użyć z nim Compose).


Jeśli chodzi o super prosty deployment Postgresa (jak nie masz klastra K8s) to możesz uruchomić go w łatwy sposób z obrazu kontenera tak by mieć data persistance oraz być w stanie zrobić backup.


Utwórz dwa foldery na serwerze ~/postgres_data oraz ~/postgres_backup.


Uruchom kontener:

podman run -p 5432:5432 --name postgres -v ~/postgres_data:/var/lib/postgresql/data -v ~/postgres_backup:/home -e POSTGRES_PASSWORD=<YOUR_PASS> -d docker.io/library/postgres:alpine


A tak wywołać psql w działającym kontenerze:

podman exec -it <CONTAINER_NAME_OR_ID> psql -U postgres


Od tego kroku, droga jest prosta uruchamiania w ten sam sposób narzędza pg_dump lub pg_dumpall czy pg_basebackup (i zrobienia backupu do folderu /home kontenera) a następnie potem zbackupowania dumpa z folderu ~/postgres_backup serwera na innego hosta przy pomocy narzędzia rsync.

Zaloguj się aby komentować

Hej, programiści. Mam pytanie filozoficzno-techniczne.


Załóżmy, że jest sobie jakieś tam API udostępniające różne funkcje. API nie jest obiektowe i stanowi po prostu jedną płaską listę funkcji, które można wywołać z różnymi parametrami. Obowiązkowym parametrem każdej funkcji jest identyfikator klienta (pluginu), który funkcję wywołuje.

Chciałem sobie to API jakoś opakować i porobić na jego podstawie jakieś proste obiekty, którymi potem będzie można manipulować, ale nie wiem jak to rozwiązać architektonicznie, głównie przez ten obowiązkowy identyfikator, który trzeba zawsze przekazywać. Każdy jeden obiekt musiałby znać ten identyfikator, więc musiałby być on globalny. Z drugiej strony nie może być za bardzo globalny (np. jako obiekt statyczny), ponieważ teoretycznie w tej samej przestrzeni pamięci będą przebywać różne pluginy z różnymi identyfikatorami. Z kolei przekazywanie identyfikatora jawnie do obiektów za każdym razem trochę mija się z celem, gdyż właśnie tego chcę uniknąć.


Może zetknęliście się kiedyś z takim problemem, albo istnieje jakiś wzorzec na coś takiego?


#programista15k #programowanie #csharp#dotnet #cpp (dla zasięgu)

@MostlyRenegade No to niech sobie każdy obiekt trzyma ten API key - wtedy nie będziesz go musiał za każdym razem do obiektu przekazywać. Różne pluginy w tej samej przestrzeni bdą, oczywiście, musiały korzystać z innych instancji danej klasy.

@sierzant_armii_12_malp Właśnie wymyśliłem, że przecież i tak te obiekty muszę najpierw pobrać funkcją API, a potem wszelkie zmiany zatwierdzić innymi funkcjami, więc już na etapie ich pobierania mogę im przypisać klucz. A gdybym tworzył nowy obiekt, to nic nie stoi na przeszkodzie, aby pobrana kolekcja (w sensie obiekt) również trzymała klucz i przekazywała go obiektom w miarę potrzeby.


Czasem wystarczy napisać posta na hejto i rozwiązanie samo przychodzi ( ͡° ͜ʖ ͡°)

@MostlyRenegade o widzisz, a ja się zastanawiałem dla kogo pisze @elszczepano a pisze dla Ciebie - polecam jego bloga@MostlyRenegade


w większości przypadków wystarczy użyć konstruktora obiektu z parametrem: https://www.frontstack.pl/blog/constructor-design-pattern


dla bardziej specyficznych zastosowań możesz chcieć użyć: https://devszczepaniak.pl/wzorzec-projektowy-builder/ lub https://devszczepaniak.pl/wzorzec-projektowy-factory-fabryka/

jeśli Cię dobrze rozumiem to możesz to ogarnąć przez clousures albo klasę z konstruktorem zależy czy funkcyjnie czy obiektowo.


edit - wombat dał bardziej kompleksową odpowiedź.

Zaloguj się aby komentować

@rayros Ale za co?

Banalny projekt, jakich miliony. Ale to nawet można przeboleć i dać na zachętę. Gdyby nie był niechlujny - masz tam pięć komentów na krzyż, z których niewiele wynika. README zawiera jedynie napis TODO. Więc nie.

@rayros - ImageMagick z tego raczej nie będzie - ale jest to jakiś początek i można się wiele nauczyć pisząc taki program - chwal się postępami

Zaloguj się aby komentować

Hej, zna się tu ktoś na C++/CLI?


Jest sobie aplikacja, do której można pisać pluginy. Wtyczki mają postać bibliotek dll, które muszą eksportować odpowiednie funkcje i muszą znajdować się w odpowiednim folderze w ścieżce aplikacji np. "c:\Aplikacja\plugins\"). Interfejs i API jest natywne, ale mam narzędzie napisane w C#, które chciałem podpiąć. Jedna opcja to użycie jakiegoś starego pakietu z NuGeta (DllExport), które dokleja tablicę eksportów do dotnetowego zestawu, ale pomyślałem, że zrobię po prostu pomost w C++/CLI, z którego będą wywoływał obiekty napisane w C#.


Problem polega na tym, że nie mam pomysłu jak poprawnie skonfigurować ścieżki w projekcie, żeby wszystkie DLLki ładowały się od razu przy starcie wtyczki, bez konieczności ręcznego ładowania zestawów dotnetowych i pokazywania ścieżek. Obecnie zestawy dotnetowe muszą być obok aplikacji wywołującej (w "c:\Aplikacja\"), a chciałbym, aby były folderze z pluginami, albo jeszcze lepiej - w dedykowanym folderze wewnątrz katalogu z pluginami (c:\Aplikacja\plugins\MojaWtyczka\). Oczywiście dobrze by było, żeby wszystkie dll-ki budowały się od razu do docelowych folderów przy debugowaniu.


A może jednak trzeba napisać własny resolver, żeby pokazać, gdzie dotnet ma szukać dll-ek?


#programista15k #programowanie #cpp #csharp #dotnet

@fadeimageone no właśnie nad czymś takim pracuję: natywna aplikacja zewnętrzna + wrapper C++/CLI i reszta w C#. Chodzi mi natomiast o konkretny problem ze ścieżkami do wszystkich potrzebnych dll-ek. Nie mogą się znajdować gdziekolwiek, gdyż wtedy to nie działa.

I jak teraz na to patrzę, to chyba najefektywniej będzie po prostu napisać własny resolver, w którym będzie wskazana ścieżka do ich wyszukiwania.

Zaloguj się aby komentować

Zaloguj się aby komentować

#daily_wolnegostudenta #programowanie #java


Aż się pochwalę. Siedziałam nad tym 4 godziny. jeszcze nie skończone bo docelowo ma odczytywać pliki z danymi na temat pogody i w analizie podawać np średnie ciśnienie spośród tych w pliku. Ale cel główny: zaimplementować słabe wiązania do przeglądania i analizy plików spełniony

Na zdjęciach widać że można wybrać plik z podanego folderu i wyswietla się pewna zawartość pliku oraz analiza pliku.


co pozostało:


  • utworzyć foldery o odpowiednich nazwach

  • wygenerować pliki z danymi

  • napisać metodę analizującą dane pogodowe


  • uruchomic program z roznymi opcjami VM

  • zebra dane w pliku readme

  • utworzyc projekt na gitlabie

  • wrzucic wszystko do gitlaba


No i jest jeszcze drugi projekt do zrobienia... chodz mysle ze z tego projektu to sie nie bee bawic w ta pogode i powiem ze poprosze trzy, a jak się zapyta czemu to powiem że wolałam pisać posty na hejto lol (nie no nie powiem tak)

ecc3afed-ee25-43d7-b3e0-5997a154c1d4
079109a6-f8cc-4553-85a1-0f6faf8ccc91

@camonday - BTW czemu GitLab a nie GitHub tak jak każdy obecnie? - nie to że mam coś do GitLaba bo hostowałem go przez lata i ze swoim CI/CD był lata przed GitHub Actions.

@koszotorobur na gitlabie można mieć konto uczelniane z logowaniem przez e-science i łatwiej jest prowadzącemu zebrać wszystkich w gitlabie połączonym z e-science i mieć maile studenckie do wszystkich

@camonday nie masz błędu przesunięcia o 1? Wczytujesz plik, który ma: `1, 2, 3, ., ., .` znaki. Dla mnie to 6: 3 liczby 3 kropki. Czyli pewnie iterujesz od 0.

Zaloguj się aby komentować

Zaloguj się aby komentować

@HolenderskiWafel Zgaduje że Chińczycy nie przesiadują na forach Rusta to pewnie nawet nie wiedzieli o tej ankiecie. Ja np nie miałem o niej pojęcia a od ponad miesiąca się uczę Rusta xD.

Zaloguj się aby komentować

Zaloguj się aby komentować

Będąc użytkownikiem Rusta, widzę niekiedy wiadomości, jak to nowy projekt zaczyna używać tego języka czy nowy driver w kernelu jest na niego przepisywany.


Pod każdym znajduje się spora ilość komentarzy pozytywnych/neutralnych jak i pewna część negatywnych głównie pochodzących od użytkowników innych niskopoziomowych języków tj. C czy C++.


Oto niektóre powody szkalowania(często słusznego) języka:


  • Toksyczna społeczność - głównie chodzi o RIR(Rewrite in Rust) - pisane często pod postami o programach nie napisanych w tym języku - głównie przez osoby nie programujące w Rust, tylko myślące że jest to złoty środek na wszystkie bolączki i błędy występujące w programach.

  • Niebezpieczny system pakietów - chodzi głównie o to że można próbować ataku polegającego na podszyciu się pod crates.io i zmienić paczki na ich złośliwe wersje. Według mnie taki atak prawie niemożliwy do wykonania, bo np. Cargo.lock posiada w środku hashe paczek, co uniemożliwia użycie podrobionej wersji paczki.

  • Używanie do wszystkiego obcych zależności - parser cli czy implementacja tls, według niektórych użytkowników powinno to być napisane ręcznie albo przez zrobione przez kopiuj/wklej bezpośrednio do repozytorium. Według mnie to właśnie jest niebezpieczne, bo kopiowanie coś takiego komplikuje proces budowania, wydłuża proces tworzenia aplikacji jak i zwiększa ryzyko błędów/wymusza ciągłą synchronizację(można to łatwo zrobić przy pomocy git submodule, którego jednak niezbyt lubię). Obce pakiety, używane przez setki innych projektów mają zwykle o wiele lepszą jakość, więcej funkcji i mniej błędów niż te ręcznie napisane.

  • Problemy statycznego linkowania - jeśli jakaś zależność np. openssl, będzie miała błąd który będzie naprawiony w nowej wersji, to gdy jest ona dynamicznie linkowana trzeba tylko ją przekompilować a w przypadku rusta całą aplikację - głównie jest to podnoszone przez ludzi zarządzających dystrybucjami, bo wiąże się to ze zwiększonym wysiłkiem.

  • Problemy z pamięcią to tzw. skill issue i dobrzy programiści nie robią ich prawie wcale/mnie się one nie zdarzają choć już kilka lat programuję w C/C++ - setki tysięcy programistów używają C/C++ i naturą ludzką jest popełnianie błędów a te języki pozwalają odstrzelić sobie stopę w najbardziej wymyślny sposób w zupełnie losowym momencie(problemy z pamięcią często objawiają się z opóźnieniem). Wymagają od użytkowników trzymania dużej ilości informacji o kodzie w swojej głowie, co oczywiście nie jest idealne i problemy ze zrozumieniem kodu/jego poprawną zmianą pojawiają się przy zmiany osoby używającej program czy po dłuższej przerwie od danego kawałka kodu. W przeciwieństwie do C i podobnych niskopoziomowych języków, kompilator Rust traktuje użytkowników z dystansem(można powiedzieć że jako debili - ale w pozytywnym tego słowa znaczeniu(jeśli oczywiście takie jest)) i wymusza określony styl i praktyki, no chyba że zmienimy to przez unsafe. Pozwala to zwykłym użytkownikom tworzyć szybko działające programy, bez bania się o wszędzie czychające problemy z pamięcią, jak i przychylniejszym okiem patrzyć na pull requesty, bo szansa na zepsucie kodu jest o wiele mniejsza. Z tego co zauważyłem to programiści C, często uważają się za pewną elitę, bo przecież nie każdy potrafi robić to co oni. Wystarczy zobaczyć https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=memory, by zauważyć że zbyt wiele programów rozwijanych przez bardzo wykwalifikowanych programistów ma problemy z pamięcią i że to raczej nie problem ich zbyt małych umiejętności. No a jeśli to problem zbyt małych umiejętności, to większość programistów powinna unikać jak ognia C skoro jest on przystosowany jedynie dla najbardziej zaawansowanych.

  • Długa kompilacja i biorąca dużo zasobów systemowych - Rust z racji ilości koniecznej weryfikacji wszystkich parametrów, typów, lifetimów etc. bierze o wiele więcej zasobów systemowych i czasu niż c czy np. go, więc do kompilacji lepiej zaopatrzyć się w mocniejszy komputer

  • Brak dostępności na wszystkich platformach gdzie C jest dostępny - C jest chyba najbardziej przenośnym językiem na świecie(w ilości kompilatorów na różne platformy sprzętowe), wiec trudno by z nim konkurować. Rust wspiera najbardziej popularne systemy bazujące na ARM, x86-64 i wielu innych architekturach wspieranych przez llvm, ale obecnie nie ma oficjalnego wsparcia dla alpha, hppa, ia64, m68k czy s390. Problemem dużym to nie jest bo dotyczy zapewne grubo mniej niż 1% wszystkich użytkowników i to tych, którzy pracują na antycznym/mniej popularnym sprzęcie.

  • Jest o wiele trudniejszy niż C/C++ - składniowo na pewno na pierwszy rzut oka nie wygląda zachęcająco, jednak z doświadczenia muszę powiedzieć że programuje się w nim o wiele szybciej niż w powyższych językach, bo nie muszę polegać w wielu przypadkach na sobie, tylko na kompilatorze. C jest dość prosty pod względem składni, ale bardzo trudnym gdy chce się go poprawnie używać, głównie przez to że bezpośrednio operuje się na pamięci. C++ z wersji na wersji próbuje stać się językiem bezpiecznym, jednak ciągnie się za nim szereg funkcji ze starszych wersji i problemów, które po prostu nie mogą zostać naprawione bez gruntownej modyfikacji języka.

  • Rust rozwiązuje tylko problemy z pamięcią a ich nie robię - cóż, jeśli nawet to prawda(w co szczerze wątpie, jeśli używasz C/C++) to przynosi on szereg przydatnych funkcji, tj. ograniczenie wyścigów o dane, ujednolicenie formatowanie kodu(rustfmt), oficjalny system budowania(cargo), wymuszanie obsługi wszystkich sytuacji w match (switch w C/C++), przyjazne komunikaty błędów - bardzo często z kodem który można zrobić kopiuj/wklej i naprawić problem.

Jak widać Rust nie jest złotym środkiem na wszystko ale wprowadza kilka niezłych usprawnień w stosunku do C/C++, jednak jak widać części ludzi nie jest tym przekonana. C/C++ jak widać po np. statystykach na githubie nigdzie się nie wybiera i ciągle miliony linii kodu będą w tych językach pisane, jednak z roku na rok, coraz większe grono języków zaczyna je podgryzać.


#programowanie

#rustlang

#rust

178866a4-d06a-4a8f-b49c-195e1697a9ce
5348b615-36e1-4a23-b735-7a34e7c5cb0c
faf9ce9d-a1b6-48e6-8ba4-97bb88e975b0
adb6cd90-ab8a-4da2-a53b-9147ed684de3

@qarmin Ostatnio zacząłem się uczyć Rusta i jako osoba która wcześniej pisała dosłownie wszystko w JS to było ciężko. Na pewno bardzo mi się podoba Cargo i Crates.io bo to dosłownie jest odpowiednik npm i działa niemal identycznie znacząco upraszczając pisanie czegokolwiek.


Kiedy chodziłem do technikum to byłem chyba ostatnim rocznikiem który uczył się na programowaniu C++ (teraz jest python) i o ile uważam, że Rusta uczy mi się dużo lepiej to jednak na pewno nie polecałbym go jako pierwszy język programowania bo znacząco się różni od innych popularnych języków i potem uczenie kolejnych może być utrudnione.


A co do społeczności Rusta to nie wiem może przeglądamy jakieś inne subreddity ale dosłownie jeszcze nie widziałem nigdzie w necie na niego hejtu lol. Na Reddicie wszyscy zawsze pomocni, masę rzeczy się dowiedziałem z odpowiedzi pod postami. Tak samo na różnych forach i stackach. Nawet na r/linux czytałem posty zachwalajace dodawanie kodu Rusta do kernela , nie wiem może przypadek że ominęło mnie to totalnie xD.


A co do wydajności to jako typ przychodzący z JS to xD, dwa światy. Czasem sobie testowo/dla nauki przepisuje jakiś stary kod z JS na Rusta i jaram jak wykonuje się z 50 razy szybciej jednocześnie zużywając ułamek ramu który zużył JS. To chyba moja największa motywacja w nauce Rusta.

@Catharsis Przeglądam głównie reddita(nie tylko r/rust, ale też z innych języków np. r/python czy r/go) jak i phoronix i tam niemal zawsze się znajdzie się ktoś kto ma mocne obiekcje co do języka(pewnie część to trolle, ale nie wszyscy).

Zaloguj się aby komentować

.

Dzisiaj ruszyły zapisy na Potyczki Algorytmiczne 2024, ogólnopolski, otwarty konkurs programistyczny.



Harmonogram


Rejestracja rozpoczyna się 1 marca 2024 o godz. 12:00.

Runda próbna startuje 5 marca 2024 o godz. 12:00 i kończy się 7 marca 2024 o godz. 23:59.

Rundy zdalne wystartują 11 marca 2024 o godz. 12:00, a zakończą się 17 marca 2024 o godz. 23:59.

Ogłoszenie ostatecznych wyników rund zdalnych nastąpi 19 marca 2024 o godz. 20:00.

Finał odbędzie się w dniach 24-25 maja 2024 w Zielonej Górze.


Warto spróbować, nawet jeśli ktoś tylko trochę umie programować. Zadania i rozwiązania z poprzedniej edycji.


Każdego, kto jest pasjonatem algorytmiki i programowania gorąco zapraszamy do wzięcia udziału w XIX edycji konkursu „Potyczki Algorytmiczne”. Potyczki Algorytmiczne są najstarszym internetowym konkursem algorytmiczno-programistycznym w Polsce, adresowanym do wszystkich – uczniów, studentów, zawodowców i amatorów, bez jakichkolwiek ograniczeń wiekowych. W tej edycji, oprócz rozwiązań w C++, dopuszczamy także rozwiązania w Pythonie.

Rejestracja on-line do konkursu rusza już 1 marca 2024 r.

Potyczki Algorytmiczne w roku 2024 składać się będą z dwóch etapów:

● zdalnego – odbywającego się w dniach od 11 marca do 17 marca 2024 roku;

● wielkiego finału – rozgrywanego w dniach 24 – 25 maja w gościnnych progach współorganizatora konkursu, zielonogórskiej firmy Digital Technology Poland. DTP Ltd. Do finału zostanie zakwalifikowanych 20 zawodników.

Dla najlepszych zawodników czekają nagrody rzeczowe. Dodatkowo 128 uczestników otrzyma kultowe koszulki Potyczek Algorytmicznych 2024 oraz upominki-niespodzianki.


#cpp #python #algorytmy


Jak ktoś ma konto na wykopie, to może tam też opublikować.

Zaloguj się aby komentować

Z czego korzystacie do testowania rest api(głównie chodzi o fuzzer lub coś w tym stylu i to lokalnie, bo chcę to automatyzować bez dostępu do świata)?


Używam serwisów napisanych w pythonie (pydantic + fastapi) i rust (actix + utoipa)


Obecnie korzystam z:


  • https://github.com/matusf/openapi-fuzzer - działa tylko dla rustowego openapi, bo fastapi bazuje na jakimś starym dokumencie gdzie niektóre wartości mają inne typy niż walidatory oczekują i przez to się wysypuje. Problematyczne jest to że więcej logiki do weryfikacji mam właśnie od strony pythona i to właśnie chciałbym bardziej testować

  • https://github.com/Endava/cats - ciekawy projekt, który ignoruje część błędów w schemacie openapi i pozwala na testowanie nawet niepoprawnego schematu. Działa na początku całkiem dobrze, bo znajduje najbardziej podstawowe błędy, jednak z czasem widać że celuje on bardziej w implementację testowania takich programów jak uvicorn/fastapi a nie samego programu użytkownika(np. jest masa fuzzerów które wysyłają śmieci w nagłówkach, dane z niepoprawnym kodowaniem etc.), a mnie interesują tylko dane które w miarę poprawne mogą zwrócić nieoczekiwany wynik


Poszukuję czegoś "myślącego" albo dającego takie pozory, by znaleźć błędy które powyższe programy pomijają i muszę ręcznie błedy te wyszukiwać, np. sytuację w której dodaję użytkownika i za pomocą zwróconego uuid kontynuowany jest proces testowania api


jakieś inne programy też testowałem, ale odbijałem się od nich bardzo szybko, bo trudno było je używać albo i nawet zainstalować


#programowanie

#naukaprogramowania

@qarmin 

a mnie interesują tylko dane które w miarę poprawne mogą zwrócić nieoczekiwany wynik


To się nazywa "domena biznesowa" i za to Ci płacą mordo ( ͡° ͜ʖ ͡°)

Zaloguj się aby komentować

Potrzebuję stworzyć prosty system logowania do serwera i dostępu do jego zasobów, który oczywiście powinien być bezpieczny, ale w miarę łatwo implementowalny.


Jako że nigdy się w aplikacjach warstwą sieciową nie zajmowałem, to mam problem ze znalezieniem odpowiedniej metody.


Na internecie jest masa poradników jak to zrobić, ale oczywiście dotyczą różnych frameworków jak i różnych metod(tokeny, sesje), więc akurat nie wszystko kojarzę.


Z tego co wnioskuję logika powinna wyglądać w ten sposób:


  • W bazie użytkownika zostaje dodane login + posolone hasło

  • Użytkownik próbuje zalogować się do serwera, więc w zapytaniu przesyła w body login + hasło

  • Serwer weryfikuje czy w bazie dane się znajdują, jeśli tak, to generuje token przy pomocy sekretnego klucza, w którym wewnątrz jest zapisany login użytkownika i czas wygaśnięcia i zwraca go użytkownikowi

  • Użytkownik otrzymuje klucz i następnie do każdego zapytania api dodaje go do nagłówka Authentication

  • Serwer po otrzymaniu zapytania, sprawdza nagłówek i odpakowywuje login i czas wygaśnięcia tokena, jeśli token jest ciągle ważny, to wykonuje daną operację, jeśli nie to zwraca błąd

  • Serwer dla każdego zapytania wymaga tego tokena(oczywiście oprócz resta do logowania)


Czy moje rozumowanie jest poprawne?


#programowanie

#naukaprogramowania

@qarmin brzmi jak JWT. Domyślnie podpis JWT nie jest sprawdzany, więc twoja w tym głowa by to wymusić. Jak wspomniano wyżej; co złego jest w zwykłej sesji? Będzie najprościej

@Meverth Pewnie wychodzę w rozważaniach zbyt daleko, ale czy ciasteczka w przypadku wielu serwerów nie są problematyczne? Skoro jeden serwer otworzył sesję, to drugi raczej o niej nic nie wie i trzeba się bawić w przesyłanie danych o niej pomiędzy nimi(oczywiście jeśli dobrze rozumiem jak to działa).


W przypadku jwt każdy serwer może obsłużyć to zapytanie, bo nic się na nim związanego z tym konkretnym tokenem nie zapisuje

@qarmin zależy co rozumiesz pod pojęciem 'wielu serwerów'. Możesz użyć wspólnego, rozproszonego cache do trzymania sesji. JWT ma też swoje problemy. Np. konto zostanie hacknięte i chciałbyś je dezaktywować, a token jest dalej ważny.

@qarmin najprostszy i najbezpieczniejszy dostęp do serwera to klient SSH, z zablokowanym dostępem innym niż przez klucz. Ale ty piszesz o aplikacji webowej. Jeśli chcesz zapewnić dostęp do serwera za pomoacą aplikacji webowej, to zasoby które udostępni serwer będą ograniczone tylko do tego co wystawia aplikacja za pomocą interfejsu. Musisz się zastanowić co chcesz udostępnić, a potem pomyśleć o sposobie realizacji bo aplikacja to jeden ze sposobów. Poza tym jest wiele różnych darmowych aplikacji serwerowych do różnego typu zasobów. Filmy, pliki, Smart Home i różnego rodzaju czujniki, konsolowe sesje dostępowe. W zasadzie to co potrzeba?

@DexterFromLab Jako serwer, chodziło mi o serwer dla aplikacji(mobilnej/webowej), udostępniający zasoby do niej i logowanie użytkowników poprzez resty - czyli bardziej o aplikacja do obsługi takich zapytań a nie sprzet/system.

@qarmin no to masz w springu np. moduł security i jak masz "serwer side rendering" to załatwia całą autoryzację, tokeny, klucze, szyfrowanie. Jeśli nie preferujesz żadnej konkretnej technologii to java jest spoko. Ale myślę z każdy wiodący framework webowy będzie kompleksowo obsługiwał sesje logowania. Django w pythonie na przykład, a w PHP to w sumie nie wiem co się teraz używa. Kiedyś używałem codeigniter.

Zaloguj się aby komentować

Zaloguj się aby komentować

Symfony Messenger i klasy Transportów


https://gildia-developerow.pl/symfony-messenger-i-klasy-transportow/ 


Symfony Messenger jest świetny. Zgodzicie się? Instalujecie jedną paczkę i możecie wysłać wiadomość na kolejkę… oh wait. No jednak nie. Chociaż nie jest to tak trywialne jak w Doctrine, to jest to dosyć proste, o czym będzie dzisiejszy post.


Tagi: #programowanie, #naukaprogramowania i #programista15k w #php, #symfony i #technologia

Zaloguj się aby komentować