Zdjęcie w tle
qarmin

qarmin

Twórca
  • 32wpisy
  • 54komentarzy
I tak się żyje jako programista open source

#programowanie
#opensource
eefd97e1-2b70-48a1-a7f6-4e79790d4cb6
628d5a07-8210-44af-bd3b-961d79dbcee3
vinclav

@qarmin O widzę kolega natknął się na bramę indyjską. No niestety.

Jak tak miałem, to dzwoniłem do supportu US.

Catharsis

Zawsze uważałem ffmpeg za nadprogram ale teraz to jeszcze większy szacuneczek.

Zaloguj się aby komentować

Jak nie śledzicie ostatnich dram w świecie programowania/open source, to oto przedstawiam nową i dość specyficzną, bo ocierającą się o możliwe tworzenie backdoorów przez rządy w popularnej bibliotece do kompresji w Linuxie(nawet jeśli jej nie używacie bezpośrednio, to masa programów w systemie jej używa pod spodem).

W skrócie to autor biblioteki w wersji 5.6.0/5.6.1 zaczął dodawać stopniowo "obfuscated"(czyli to chyba się tłumaczy jako zaciemniony) kod, który ostatecznie miał raczej pozwalać na umożliwienie zdalnego dostępu do maszyny(ponieważ xz jest używany przez openssh).

Analiza - https://www.openwall.com/lists/oss-security/2024/03/29/4
Inna analiza - https://gist.github.com/thesamesam/223949d5a074ebc3dce9ee78baad9e27

Wątki na internecie - polecam przeczytać komentarze, które wyjaśniają niektóre rzeczy:


Backdoor został wykryty, ponieważ powodował duże spadki wydajności oraz nie lubiał się z valgrindem, który przeczuwał że coś z binarką nie jest w porządku(wygląda że plik binarny sam się modyfikował)

Dla uspokojenia, problematyczne wersje były używane głównie w niestabilnych wersjach dystrybucji.

#programowanie
#linux
#opensource
4dfb1ac0-745c-4efb-99b4-b878c6930ee0
Dzemik_Skrytozerca

I nikt nie napisze gdzie doszło do naruszenia bezpieczeństwa? Ludzie, wy macie jakieś pojęcie o dokumentowaniu rzeczy? A wystarczy dodać:


Backdoor in upstream xz/liblzma leading to SSH server compromise [CVE-2024-3094]


Ten dopisek ma też od razu funkcje, że dobrze się sprawdza w Google.

Catharsis

@qarmin Jak się kładłem spać to widziałem już o tym jakiś artykuł. Jak po obudzeniu się odpaliłem kompa to od razu mi się odpaliła przeglądarka bo nowy wpis w "arch news" a tam żeby szybko zaktualizować system bo jest backdoor w paczce. No to szybkie pacman -Syu i patrzę, mam już zainstalowaną wersję bez backdoora, taki Arch moment bo nawet nie wiem kiedy zrobiłem ten update xD

vinclav

@qarmin szczerze powiedziawszy, to mnie wcale nie dziwi, AI i te gówno czaty GPT pchają oprogramowanie w closed source.


Taki zabieg ma na celu coś takiego " ej no nie dajmy tak sobie puszowac komustam coś w sieć, zablokujemy dostęp do kodu".


Na co tępe masy przystaną, nadzieja dziwna epoka, w której programiści będą się uczyć, lub też nie, języków na zlecenie pracodawców, a to już nie będzie indiańskie eldorado.

Zaloguj się aby komentować

No i stało się co miało się stać.
Przy próbie dodania dodatku, ci od firefoxa dali sobie 1 dzień na jego sprawdzenie i... pomyślnie przeszedł weryfikację!

Link do dodatku - https://addons.mozilla.org/en-US/firefox/addon/imager/
Najfajniejsze jest to że jak próbuję to wyszukać w wyszukiwarce dodatków po frazie "imager" to nic mi nie wyszukuje(pewnie musi być nieco bardziej popularny).

Link do kodu na githubie - https://github.com/qarmin/imager - jednak nie zalecam tam patrzeć, jakość kodu nie powala i oczywiście nie ma tam wbudowanej funkcji która kopie bitcoiny i przelewa utarg na moje konto, które wykorzystuję do kupowania kebabów - nie ma tam takiej funkcji, więc sprawdzać tego nie musicie.

Wołam @RACO i @Odczuwam_Dysonans bo chcieliście skrypt, więc oto jest

Filmik przedstawia krótką instrukcję jak zainstalować dodatek i go używać
Jeśli zaznaczonych jest wiele kart, to potrafi na nich wszystkich za jednym razem zadziałać

https://streamable.com/yx4r8g

#programowanie
#firefox
#tworczoscwlasna
M4G33k

Robienie własnych rozszerzeń zawsze na propsie, jest tam coś specyficznego zapiętego z Firefoxa czy na innych przeglądarkach też pójdzie? Czy się mylę bo robię na Chlam a FF to inna bajka?

redve

@qarmin o kurde, to ty stoisz za czkawką

Zaloguj się aby komentować

Zostań Patronem Hejto i odblokuj dodatkowe korzyści tylko dla Patronów

  • Włączona możliwość zarabiania na swoich treściach
  • Całkowity brak reklam na każdym urządzeniu
  • Oznaczenie w postaci rogala , który świadczy o Twoim wsparciu
  • Wcześniejszy dostęp, do wybranych funkcji na Hejto
Zostań Patronem
Dodatek nabiera kształtów i jest już zgłoszony do dodania do sklepu Firefox(pewnie będzie odrzucony, ale pomarzyć można)

Mam jednak problem z tym, że po podmianie całej strony, przy użyciu

document.body.innerHTML = "";
var scripts = document.getElementsByTagName('script');
for (var i = scripts.length; i >= 0; i--) {
if (scripts[i] && scripts[i].parentNode) {
scripts[i].parentNode.removeChild(scripts[i]);
}
}
dalej w tle skrypty są uruchomione i czasami wpadają w jakąś dziwną pętlę.
W jaki sposób mogę wyszyścić ze strony absolutnie wszystko?
Na filmiku widać że popup z hejto wyskoczył, mimo że w tle podmieniłem całą stronę

Jest kilka różnic w stosunku do ostatniej wersji:

  • kod się roztył do 300 linijek javascriptu - całkowicie nieotypowany, nie wiem jak to może działać, ale działa
  • obrazy są teraz pokazywane w x kolumnach bez niepotrzebnych pustych przestrzeni
  • dodane są ustawienia(ale nie wiem czy działają po ponownych uruchomieniu przeglądarki) - można dostosować liczbę kolumn, ignorowane linki, śledzenie href linku czy ignorowanie linków bez rozszerzeń obrazowych
  • nowe, brzydkie logo

https://streamable.com/9sltr8

#programowanie
Catharsis

@qarmin Może po prostu otworzyć nową kartę z tymi obrazkami zamiast nadpisywać całą stronę?

Zaloguj się aby komentować

Ostatnio potrzebowałem narzędzia do wyświetlania wszystkich obrazów z danej strony i zrobiłem to co programista powinien zrobić - napisałem go od zera, bo nigdzie nie znalazłem dodatku, który by to robił.

Doświadczenia z javascriptem w przeglądarce miałem 0, więc nie obyło się bez problemów i wygląda to brzydko.
Wcześniej myślałem nawet, że mógłbym nawet udostępnić dodatek w sklepie firefoxa bo być może inni też potrzebują takiego narzędzia, ale okazało się że udało mi się to napisać w 150 liniach kodu i w sumie każdy kto chciał to sobie to sam napisał

#programowanie

https://streamable.com/6qxf6y
Catharsis

@qarmin Hmm też kiedyś coś takiego potrzebowałem i też to sam napisałem bo to tylko querry selector na wszystkie img ale

nigdzie nie znalazłem dodatku, który by to robił.

https://chromewebstore.google.com/detail/download-all-images/ifipmflagepipjokmbdecpmjbibjnakm

https://chromewebstore.google.com/detail/download-all-images/nnffbdeachhbpfapjklmpnmjcgamcdmm

https://chromewebstore.google.com/detail/images/iieipaakoflfijmpbjdoicmhgafhmgme


takich dodatków jest masa xD, wiem bo kiedyś też szukałem i żadne mi się nie podobało dlatego napisałem swoje.

mike-litoris

@qarmin widzę nie tylko ja taktycznie przed zrobieniem screena czy nagraniem screencapa chowam bookmarki

libertarianin

A Firefox nie ma wbudowanej takiej opcji?

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

Porównaj syslogi . Może Linux czasem czegoś nie zdąży załadować.

666

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

groman43

Masz cały callstack, weź po prostu sprawdź co dokładnie poszło nie tak w pliku źródłowym.

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
def

Po czym poznasz progrmiaste rusta? Sam ci to powie

Catharsis

@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.

qarmin

@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).

piotrb

@qarmin Ja bym dodał jeszcze tych co rzucają: „a i tak trzeba wszędzie zrobić unsafe”.

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
wombatDaiquiri

@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
Meverth

@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

qarmin

@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

Meverth

@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.

DexterFromLab

@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?

qarmin

@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.

DexterFromLab

@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.

szczekoscisk

A czy komunikacja jest szyfrowana (HTTPS, nie http)? Bez tego logowanie i autoryzacja nie ma sensu.

qarmin

@szczekoscisk Jeszcze nie, do testów nie jest to potrzebne, zwłaszcza że większość rzeczy robię lokalnie, ale z tego co widzę, to dodanie https, to będzie jedynie kilkanaście nowych linii - https://actix.rs/docs/server/#tls--https

Zaloguj się aby komentować

Od ~5 miesięcy po godzinach tworzyłem sobie nową wersję aplikacji do czyszczenia niepotrzebnych danych z dysku.

Tutaj blogpost opisujący zmiany w niej - https://medium.com/@qarmin/czkawka-7-0-4941b9bdba55

Jednak zapewne większość z was nie wie co to jest.
Program nazywa się Czkawka, Krokiet(krokiet to nazwa nowego gui, który właśnie stworzyłem, czkawka to stara wersja gui i nazwa biblioteki pod spodem) i potrafi znajdować duplikaty plików, puste pliki i foldery, podobne obrazy, widea, pliki muzyczne, niepoprawne symlinki, rozszerzenia, uszkodzone pliki i jest jednym z najszybszych tego rodzaju.

Ja sam często z niego korzystam by wyszukać dwa niemal identyczne memy, różniące się np. rozdzielczością czy znakiem wodnym i usunąć ten w gorszym stanie.

No i dochodzimy do najważniejszego, jaka cena tego badziewia?
Darmo. Licencja MIT/GPL.

Repozytorium - https://github.com/qarmin/czkawka
Pliki do pobrania - https://github.com/qarmin/czkawka/releases

#tworczoscwlasna #programowanie #rust #rustlang
89c79c8a-4ad4-4f8f-b904-3a089d556f4d
Peregrin

@qarmin hej! Pamiętam jak opisywałeś program po raz pierwszy na portalu na w. Super, że projekt dalej żyje i jest rozwijany. Powodzenia na przyszłość!

Marchew

@qarmin 

Klikam randomowy soft z githuba:


Windows Defender

19.02.2024 19:52

Wykryto: Trojan:Win32/Wacatac.B!ml

Stan: Kwarantanna

Szczegóły: Ten program jest niebezpieczny i wykonuje polecenia osoby atakującej.

Dotyczy elementów:

file: C:\Users\xxx\Desktop\windows_krokiet.exe

DexterFromLab

@qarmin czyli jak pobiore 2 takie same filmy, różniące się np nazwą i kodowaniem to mi to rozpozna? I mogę go odpalić z konsoli na serwerze?

Catharsis

@DexterFromLab Tak, oraz rozpoznaje nawet jak filmy mają inną rozdzielczość i długość. Można ustawić "czułość" wykrywania i przy odpowiednio wysokiej to potrafiło mi nawet wykrywać jak film miał w sobie urywek z innego filmu, np to samo intro xd.

qarmin

@DexterFromLab Tak i tak


@Catharsis Obecny algorytm wyszukiwania podobnych filmów jest prosty(w sensie prosto go zrozumieć jak działa, ale sama implementacja jest skomplikowana). Korzystam więc z zewnętrznej biblioteki, bo sam chyba nigdy bym tego nie napisał. Ma ona ograniczenie, że testuje jedynie widea dłuższe niż 30 sekund i tylko porównuje te 30 sekund z początku.


Autor tej biblioteki pracuje nad usunięciem limitu minimalnej długości 30 sekund, jednak ciągle max 30 sekund z początku bedzie testowane.


Jeśli interesuje was tylko i wyłącznie kwestia znajdywania podobnych wideo i funkcja w Czkawce nie wystarcza, to polecam również darmowy i open source - https://github.com/0x90d/videoduplicatefinder, sam go czasami używam i działa całkiem dobrze(z tego co kojarzę to tutaj jest chyba tylko wersja GUI).

Zaloguj się aby komentować

Mam bardzo wymagającego klienta - siebie - i ten oto jegomość pod wpływem impulsu i zewnętrznych potrzebuje napisać 3 aplikacje:

  • serwer
  • aplikacja desktopowa
  • aplikacja na smartfony

Aplikacje będą się logowały na serwer i pobierały/zapisywały tam dane - standard.

Problem jednak jest z wyborem technologii.
Z serwerem nie ma problemu, bo tutaj będę korzystał z dobrze mi znanego rusta.

Jednak nie wiem co wybrać do napisania aplikacji na komórkę i desktopa, gdyż jestem głównie backendowcem + znam trochę qt, gtk, slint, ale z grubsza chcę stworzyć jedną aplikację na obie platformy, więc te typy odpadają bo albo nie mają wsparcia dla androida, albo jest ono na bardzo wczesnym poziomie.

Zastanawiam się nad Tauri + Svelte, bo wydaje się ciekawą opcją, a na pewno nie chce mi się tego pisać w jakimkolwiek stopniu w javie, a też czystego javascriptu unikam jak ognia.

#programowanie
monke

@qarmin ale apki na androida w tfu javie piszą tylko polskie januszexy. Od tego jest kotlin

Meverth

@qarmin pisz backend w kotlin, a części wspólne (model itp.) wrzucaj przez kotlin multiplatform na moblilkę i desktop. Zobacz sobie, do czego się to to kompiluje i na tej podstawie wybierz technologię mobile/desktop. Zawsze trochę mniej roboty jak już masz jakiś kawałek i go re-używasz, nie?

koszotorobur

@qarmin - no i na czym w końcu stanęło kolego?

Ja jeszcze coś takiego znalazłem: https://www.skeleton.dev/docs/tauri - wiele funkcjonalnych komponentów do UI pod Svelte i ma integrację z Tauri.

qarmin

@koszotorobur Raczej stanęło na tauri.


Dużo decyzji(wstępnej póki co) pomogło bardzo proste tworzenie plików apk, nie muszę szukać, grzebać ani konfigurować żadnych plików gradle ani jakichkolwiek innych javowych/androidowych rzeczy, po prostu kompiluję a plik apk się wypluwa i wrzuca od razu go na emulator(chociaż miałem trochę problemów by to poprawnie skonfigurować)


W pracy szef korzysta ze svelte i nawet mówi że to niezłe, chociaż ma czasami trudności i też nie próbował nigdy żadnego innego frameworku, więc porównania też nie ma, czy coś nie działa o niebo lepiej

koszotorobur

@qarmin - ja zakochałem się w Svelte (a właściwie w SvelteKit) i robię w nim narzędzia wewnętrzne.

Problemy się czasem pojawiają ale ja osobiście nie utknąłem na więcej niż jeden dzień (gdy na przykład przy Angularze rwałem włosy z głowy a przy Reakcie mi często przez kilka dni nie chciało działać).

Zawsze troszkę miałem nie po drodze w WebDevem (chociaż przez ostatnie 10 lat próbowałem chyba wszystkiego do WebDevu co wyszło) i SvelteKit jakoś mi tak naturalnie wszedł i bez oporu (pomimo tego, że kiedy zaczynałem 2 lata temu z nim to był niestabilny i przechodził wiele zmian).

Do tego Tauri 2.0 wyjdzie niedługo z bety i działa ze SvelteKit więc do pisania apek multiplatformowych jak znalazł

Zaloguj się aby komentować

Ostatnio zacząłem przeglądać sobie większe programy open-source napisane w pythonie i zerknąłem na lutris.

54000 tysięcy linii napisanych w tym języku i dopiero ostatnio zaczął korzystać z mypy w bardzo podstawowym stopniu.

Zacząłem przeglądać kod jako kompletny outsider i zauważyłem kilka zmiennych których typów nie mogłem wydedukować. Przepatrzyłem miejsca gdzie są odczytywane/zapisywane i jedyne wywnioskowałem że niektóre z nich to dicty, ich klucze to stringi lub czasami tuple a wartości to jakieś nieotypowane zmienne.

Dlaczego, nawet przy tak dużych projektach ludzie wzbraniają się przed używaniem typów?
Przecież brak jasno określonych typów zmiennych rodzi problemy i utrudnia osobom zrozumienie kodu i pomaganie.

Od kiedy w pracy zaczęliśmy korzystać z duetu ruff + mypy strict, ilość błędów znacząco zmniejszyła się i dziwi mnie że duże pythonowe projekty nie korzystają z mypy, choć jest dostępny już kilka/kilkanaście lat i jest potwornie przydatny

#python
#programowanie
848e4c84-1104-4e17-bfca-42e94dfc46c9
szczekoscisk

Podobnie mam z Type Script i "any" lub "object". Dla wyjaśnienia, TS pozwala ale nie wymusza typowanie. Więc mam takie WTF gdy ktoś poświęcił chwilę na wpisanie że coś jest/zwraca "cokolwiek" . Gdzie tu jest jakaś korzyść?

rakokuc

@szczekoscisk jak dobrze pamiętam, to czasami kompilator TS potrafi się przyczepić, że typ jest nieokreślony, więc żeby się nie czepiał to daje się any i fajrant ( ͡° ͜ʖ ͡°)


Przy czym dotyczy to głównie sytuacji, kiedy ktoś używa TS bo jest modny albo mu kazali.

szczekoscisk

Nie kojarzę by sam kompilator TS wymuszał typowanie (przynajmniej na szybko nie kojarzę takich przypadków), możliwe że widziałeś sytuacje gdzie "tslint" czegoś się czepiał.

dotevo

Myślę, że to przez to, że lutris to dość stary projekt, a typowanie w pythonie to jednak coś dość nowego. Pamiętam, że z 10 lat temu używałem już lutrisa.

grzmichuj_gniezno

@qarmin Gdy po kilku dobrych latach z C++ zacząłem w robocie pisać w Pythonie to nie mogłem się odnaleźć i strasznie mi typów brakowało. A później się przyzwyczaiłem i juz miałem wszystko w dupie ( ͡° ͜ʖ ͡°) Może dlatego. W większości przypadków da się (przynajmniej u mnie) typ spokojnie wyczaić z kodu. Raz na ruski rok się nie da i wtedy używam debuggera.

Zaloguj się aby komentować

Poprzednia