Witam bo dluzszym czasie pracy nad mchat web jest kilka nowosci, sa to rzeczy experimental ale juz dosyc przetestowane.
Miedzy innmi:
Jak zwykle lista pomyslow nigdy sie nie konczy a backlog zamiast sie kurczyc to sie zwieksza
Anonymous chat app
https://mchat-web-client.vercel.appHej, ostatnio miałem trochę czasu, a rozwój aplikacji poszedł do przodu pod względem samego bezpieczeństwa, naprawy błędów i drobnych ulepszeń. W międzyczasie stworzyłem również stronę główną projektu: https://marcio199226.github.io/mchat-site/public/
Zastosowałem się do niektórych rad, przede wszystkim tych od @msm, między innymi:
Przykładowo, tak wygląda wysyłana wiadomość:
{
"fromUser": "ubuntu",
"toUser": "65aa543b898ef0c9651d2b16",
"metadata": "757e319359aa916af7c51160c85b735745af557cb4095eb2f09c8e40ddefa16fd32a033a1ca47595f45b60d5fae2694402c2746c09a1b2c9e827a9dab52ed45b757d696c3a84acb036572b2c4429d677196b0a40c3790330b97537ec53022276b4ca23764c875b6560542009d663c95374bd041fe0d2320ca7b28126cc2d59c9d20758b411c8bee44ada75afcf80f500da6786f0147b29cc5dd09f2a68cbf67f4449229a0f225ddc856fb0bc82826e90ba8bef9c8199703eb29331b1f57cae59d746b0565cadd2fd0209e7d4857f591d6c500ce002334b3d9488c29f3bf945114cc508f64125a69ce02f0ce7d50569f2949e2abdae90ccdce705788af4b8da8f8b3426038bdae7d6536b8051f0673adc95698e6ca90b0b8c2ea89f27d7a0042de78af003e3af5f323854222928e25c64f94c5b934080f7f253ad6e9cb9675fa4cff677419152b7cf7190209841b23badf160e36575728ad94c8d223922b881a28c68e25c73406d1ca3bb41de6b91adbedd307eb9d46103c0147a8700b9e5959ff0bb4ffcbe788d1ecb095e2bd9ed402ba89c284e1e6ca61c96590712258b899664492d030d0b6066aa377d76739a898f92daf15222205c185e5335a87d8a0d8ea52af1a21cd5d8334a9fcc4de6418a63499bf610a274dc2fea409e68a36765e32c518cf28d39b6c05d0bc009563704715c7146685b18499e07ca60e53d222bb7138ae4796e3e81260ac947c97cb8cdcc82faa2fd562c951d65243732fd412d1636f5467b8b979dab6fed2134cbb89096cdccb5c64a604c5f04e1bc374e12cedc425d7128d03b6c9e5ea6ef277c3ee82e7b79743dc6ba3520782dcffb6439debbab109736c83332cd97766edfcf43a385f0e8e2bc72216f1414357a4c6862f4880e7fdcd0463f6e916180a224e778119756abb402236890dac60bee1f5cb514923cab84035cad3d104cd2b47620c4427903b795357936a08a121584546b6ee3193b6eb1f07f35e504ac5dbd70ff41e0c12658a8d4e594388697a8869b85293eacf257750caaaf3f82d32b871dfe1569dec501736b7788d033687d680b9532e32ef80722721c0d788d74f57c0b7b06c44759b9865db109e8108f91353498821d4cad60c487a1f4993f1c5a224c18bd58e4b3f0c3a1ddafd0dcf61512b81d5a04e298cddc97a405efa09bb9fbd88e950ac44f6bf9476246b655da697ca9562943383bef54e26c327ff495c669fac139989d57f70ea0d0cd914dc07f24240830e1f0153e4de9925c9eaccd788ddfa3dcf4328b70636c43413538aec3d8ed62f28b299b1321aacf634c9f0c5e5018597aa50bbf32d0aa93abeb4df0177cc4fb206e406ec9198e857348eeb0788402e24e637c06f8d04da30eb1c294c56ca8cfd098267ec8a4f3563ca273c9cefee6989f985652c817fb9e6fd9fa3eee1c0a5f4e085fb8d2037116cfe92190c7afb3ba377bdd662587ed107feb054d896f8a5d6af804e6fca038d2416d80cb95ad0435820ec3d79a8e5d8f8907c0ef93f3a7d8b306ee999421d9d4037868ebdbf036d5eeba7490fc3663f8f21894fde7c9f85360a335643a98f386301619954818539ee3413db8b17eb99997f863bc93aefd87b4b8c7999eca4160b1d8b3c41e656629c559f7fe9f52a039c12d179e185c8aa97d1196a5776033318bc562a11658c51f329a3d252773a06a8c0f7f401cc7539769fc081f0b6fc460b3b2c3784bd422902918298b9ef5464665ec151dd664e12c08ac4c0ebb46ef4f659459be6128911391237bab1013ece33a3c722fcd4d0d01dc4788c37219d51ac22d66ad9011c77f746d4bb15e4d7ba81fce8a803cf3b8f089f481c61949178f0c8f2f85d0021d8d318e705451cc045bad271e65521f8df3f1f968dbd1e1b9e41c0715122bbf2998692d12f0a83d9b96fad42c66975ef7e73fa3bb4828529152b1e9a282af0bee6e240d061742254527ca3f07c9ec624980caaf42c965866abf18f2c6e240b2c3aad8b98f40872b4ef4464768cf3fd582e32fd9a11ba937e039b3e9f2b489b0d1927d72aae6726e58454e02fe635b90d754cdee2e1b4170581bfd7b33a6505a9aea7606720a8f3141e76e53dc05e3be219f0e0725a788b2a7858653713bd303d0bc0ea549c02f9f64b142853fc81d8dea8f73cc82aa8d34d50a1e31c7e688adcea4014e7e1c5b9440b390d773415f5bba9d5ab93fc617c2ad3c5b246acbf4b3a4f8cf2feed39d3e574ed19477c1dd99bb03483808eacdf818"
}
Niestety, póki co nie wpadłem na pomysł, jak ukryć dane "from/to". Być może będę robił wyszukiwanie użytkowników za pomocą sha256 klucza publicznego RSA. Zobaczymy.
Roadmap:
jesli ktos chcialby mi zrobic powazny ddos majac jakas duza siec botnet nie widze problemu server pojdzie down i tyle, zreszta hostingi maja anty ddsowe rozwiazania wiec sami blokuja ip z ktorych ewentualnie wykryja ddos nie trzeba sie nawet przejmowac tym po stronie aplikacji. nie jest to system ktory musi miec SLA 100% :)
Siemanko mały preview aplikacji desktop nad która pracuje i mam frajdę w wolnym czasie.
kilka cech które moge wymienic:
No tak tylko ze majac juz same info na temat nr telefonu roznym agencja nie sprawia to wielkiego trudy cie namierzyc
Miałem na myśli: przestępcy nie rejestrują się na swój numer telefonu. Wiedząc gdzie szukać, łatwo jest "załatwić" sobie numer telefonu na cudze dane (bez wiedzy tej osoby). Wtedy w razie czego policja przyjedzie pod zły adres.
Jak wygląda legalność takiej aplikacji? Czy prawo nie wymaga, aby nadawcę wiadomości dało się wyśledzić?
@piotrevic: jasne że nie wymaga, nie żyjemy w Chinach ;). Przynajmniej na razie.
@msm:
Miałem na myśli: przestępcy nie rejestrują się na swój numer telefonu. Wiedząc gdzie szukać, łatwo jest "załatwić" sobie numer telefonu na cudze dane (bez wiedzy tej osoby). Wtedy w razie czego policja przyjedzie pod zły adres.
Chodzi mi bardziej o to ze kazdy telefon i karta sim ma IMEI i IMSI te dane (na pewno IMSI) zostaja wysylane to wierz GSM wiec latwo jest zlokalizowac fizycznie telefon tak zreszta robi policja kiedy chce udowodnic ze ktos byl tu i tam w danym momencie
Go to dziwny język.
Np. nie tylko argumenty funkcji mogą mieć swoje nazwy, ale i to, co zwracasz może mieć swoją nazwę. Nie musi, ale może.
W ten sposób zaczyna przypominać to Pascala, bo piszesz np. result = 123
, a potem tylko samo return
i jak funkcja wyjdzie, to będzie miała wynik 123
func double(x) (result int) {
result = x * 2
return // nie wiem czemu, ale jest wymagane i tak return
}
no i można zwracać kilka wartości naraz, ale to mnie nie dziwi, ot takie krotki, w różnych językach to jest. No i każda wartość może być nazwana.
func compute(x int) (doubled int, incremented int) {
doubled = x * 2
incremented = x + 1
return
}
Idąc dalej - w Go można za pomocą słowa kluczowego defer
odpalić funkcję, która odpali się bezpośrednio po danej funkcji i jest w stanie zmodyfikować zwracane wartości (do tego właśnie przydają się ich nazwy) albo zrobić jakiś cleanup, np. zamknąć plik.
Więc takie jakby middleware dla funkcji. Możesz mieć ileś takich funkcji i wtedy uruchomią się w odwrotnej kolejności:
func compute(x int) (doubled int, incremented int) {
defer func () {
fmt.Println("doubled = ", doubled)
doubled = x * 2
}()
defer func () {
fmt.Println("incremented =", incremented)
incremented = x + 1
}()
fmt.Println("compute")
// zwracamy niby dwa zera, ale po return włączą się zdeferowane funkcje i podmienią
return 0, 0
}
// ...
fmt.Println(compute(123))
output konsoli:
compute
incremented = 0
doubled = 0
246 124
nic dziwnego, że ludzie w tym backendy robią, skoro w Go nawet funkcje mogą mieć middleware niczym jakiś backendowy framework.
no i jeszcze inne dziwy są w tym języku. Czyli może jest to skromny język, ale jest wystarczająco dziwny, że można się nim zainteresować i zobaczyć, co tam twórcy języka wymyślili.
@Szalony Programista2: Trochę chyba nie doceniasz C. Nie masz obiektów, czyli nie możesz wstawiać metod do struct'ów, ale twierdzenie, że nie ma tam struktur jest nazbyt odważne.
@piotrpo: no w standardowej bibliotece nie ma, ale masz sys/queue.h
, a tak sam implementuejsz lub z neta ściągasz. A C++ daje ci wszystko pod nos i przenośne.
Zajęło mi to ponad pół roku, ale opublikowałem kolejny art na blogu https://developer20.com/hate-go/.
Jest sporo argumentów hejterów (?) przeciwko Golangowi. W moim arcie staram się, na tyle obiektywnie na ile potrafię, potwierdzić czy im zaprzeczyć.
@jarekr000000: mówię o Springu i pośrednio o Javie. Jeśli większość projektów używa Springa to niestety jest to cecha Javy jako community. Zwłaszcza, że tradycja "grubego" runtimu wywodzi się od czasów antycznych tego języka.
@slsy: ok, ja czasem nie zaliczam Springa do javy, bo nie dość, że "niekompatybilny" to jeszcze działa wbrew założeniom języka. (Spring to jeden z powodów dla których nie piszę w javie - za dużo walki było, żeby go unikać - przez pewien czas mi się udawało, ale w końcu się zmęczyłem).
Nie tylko JavaScript i Java. Jakie nowe języki programowania warto znać
Możliwości zawodowe i zarobki w branży IT kształtują się w zależności od znajomości określonych technologii i biegłości w posługiwaniu się nimi, dlatego warto znać więcej niż jeden język programowania. Nieustanną popularnością wciąż cieszą się języki znane od lat, takie jak JavaScript, Java czy Python. Coraz więcej osób zaczyna jednak korzystać z języków, które mogą być odpowiedzią na problemy generowane przez dinozaury z programistycznego świata. Chcesz dowiedzieć się, jakie możliwości mogą dać Ci takie języki jak Rust, Elixir, TypeScript czy Go? Przygotowaliśmy zestawienie książek, które pomogą Ci poznać potencjał tych języków. Dzięki nim sprawdzisz, czy warto nauczyć się któregoś z nich.
Rust – gwarancja wydajności
Rust to język programowania, który pozwala szybciej pisać niezawodne oprogramowanie. Daje możliwość kontrolowania szczegółów niskiego poziomu (jak wykorzystanie pamięci) w połączeniu z ergonomią wysokiego poziomu, eliminując kłopoty tradycyjnie związane z językami niskiego poziomu.
Programowanie w języku Rust to oficjalna książka na temat tego języka stworzona przez Steva Klabnika i Carol Nichols we współpracy ze społecznością Rusta. Publikacja uczy, jak w pełni korzystać z właściwości Rusta – od instalacji po tworzenie własnych niezawodnych i skalowalnych programów. Autorzy zaczynają od podstaw, takich jak tworzenie funkcji, wybieranie typów danych i wiązanie zmiennych i przechodzą następnie do bardziej zaawansowanych pojęć takich jak m.in. bezpieczeństwo pamięci Rusta, testowanie, obsługa błędów i efektywna refaktoryzacja.
Elixir – jak tworzyć szybkie i niezawodne aplikacje
Język Elixir został stworzony w 2012 roku przez José Valima. Przez kilka lat był rozwijany przez społeczność, by w 2020 roku uzyskać pełną dojrzałość. Elixir pozwala na tworzenie szybkich i niezawodnych aplikacji, niezależnie od tego, czy tworzysz duże systemy rozproszone, zestaw usług backendowych, czy prostą aplikację webową. Przejrzysta składnia Elixira oraz sposób myślenia nastawiony na programowanie funkcyjne, sprawiają, że oprogramowanie jest łatwe w zapisie, odczycie i utrzymaniu.
Tego, jak budować aplikacje rozproszone o jakości produkcyjnej przy użyciu Elixira, dowiesz się z książki Elixir w akcji. Autor przedstawia ten wysoce skuteczny język na przykładach podkreślających korzyści płynące z funkcyjnego i współbieżnego programowania za pomocą Elixira. Przekonasz się, że framework OTP może znacznie zredukować ilość nużącej, niskopoziomowej pracy z kodem. Poznasz również praktyczne metody stosowania współbieżności, ucząc się, jak rozpraszać gotowy system między wieloma maszynami.
Książka jest przeznaczona dla programistów posiadających wiedzę z zakresu aplikacji klienta/serwera na poziomie średniozaawansowanym oraz znających takie języki programowania jak Java, C# czy Ruby.
TypeScript – koniec z niepewnością typowania
TypeScript to język programowania, z którego korzystają tacy giganci jak Google, Netflix, LinkedIn, Facebook i wiele innych firm. Język ten został stworzony jako nadzbiór JavaScriptu, by być odpowiedzią na problemy, które wiążą się z korzystaniem z JavaScriptu.
Jeśli jesteś średniozaawansowanym programistą JavaScript i chcesz nauczyć się, jak opanować język TypeScript, powinieneś sięgnąć po książkę Programowanie w TypeScript. Dzięki niej zrozumiesz, w jaki sposób TypeScript pomaga w eliminowaniu błędów i usprawnia współpracę wielu programistów nad tym samym kodem.
Zaczniesz od podstaw – poznasz różne typy i operatory TypeScript, dowiadując się, do czego służą i jak ich używać. Zagłębisz się w bardziej zaawansowane zagadnienia – zrozumiesz system typów TypeScript, m.in. to jak bezpiecznie obsługiwać błędy i budować programy asynchroniczne. Zdobędziesz praktyczne umiejętności – dowiesz się jak, używać języka TypeScript w połączeniu z ulubionymi frameworkami front-endowymi i back-endowymi, migrować istniejący projekt JavaScript do TypeScripta i uruchomić aplikację TypeScript w środowisku produkcyjnym.
Mały, zdolny język Go
Go to prosty język programowania zaprojektowany przez Google do rozwiązywania dużych problemów. Jest to mały, ale zdolny język, który może być zrozumiany i używany przez każdego, bez względu na jego doświadczenie. Zarówno hobbyści, osoby początkujące, jak i profesjonaliści mogą korzystać z tego szybkiego, nowoczesnego języka – jedyne, czego potrzebują, to odpowiednie źródło.
Książka Zacznij programowanie w Go to przydatne wprowadzenie do podstaw i zasad tego języka, które może służyć jako solidna baza dla kolejnych programistycznych projektów. Dzięki tej publikacji opanujesz składnię Go, będziesz pracować z typami i funkcjami, odkryjesz bardziej zaawansowane zagadnienia jak stan i współbieżność, po drodze rozwiązując ćwiczenia, które pomogą utrwalić to, czego się nauczyłeś.
Dla Czytelników 4Programmers mamy niespodziankę – kod rabatowy 4programmers upoważniający do dodatkowej, 5% zniżki od cen promocyjnych na książki papierowe IT od Wydawnictwa Naukowego PWN. Kod jest ważny do końca czerwca, wystarczy go wpisać w ostatnim kroku podsumowania zakupu. Zapraszamy do księgarni PWN.
Programowanie w języku Rust to oficjalna książka na temat Rusta: języka programowania na licencji open source, który pozwala nam szybciej pisać niezawodne oprogramowanie. Rust daje możliwość kontrolowania szczegółów niskiego poziomu (jak wykorzystanie pamięci) w połączeniu z ergonomią wysokiego poziomu, eliminując kłopoty tradycyjnie związane z językami niskiego poziomu. W książce Programowanie w języku Rust dwaj członkowie Rust Core Team pokazują, jak w pełni korzystać z właściwości Rusta – od instalacji po tworzenie własnych niezawodnych i skalowalnych programów. Zaczynamy od podstaw, takich jak tworzenie funkcji, wybieranie typów danych i wiązanie zmiennych i przechodzimy następnie do bardziej zaawansowanych pojęć takich jak: posiadanie i pożyczanie, czasy życia i cechy bezpieczeństwo pamięci Rusta, które gwarantuje budowanie szybkich, bezpiecznych programów testowanie, obsługa błędów i efektywna refaktoryzacja typy generyczne, inteligentne wskaźniki, wielowątkowość, obiekty cech oraz zaawansowane dopasowywanie wzorców użycie Cargo - wbudowanego w Rust menedżera pakietów, służącego do budowania, testowania i dokumentowania swojego kodu i zarządzania zależnościami używanie zaawansowanego kompilatora Rusta wraz z technikami programowania opartymi na kompilatorze Książka zawiera dużo przykładów kodu, a także trzy rozdziały poświęcone budowaniu gotowych projektów przeznaczonych do sprawdzenia swojej wiedzy: gra w zgadywanie, implementacja narzędzia wiersza poleceń w języku Rust oraz wielowątkowy serwer. Patroni:
https://ksiegarnia.pwn.pl/Programowanie-w-jezyku-Rust,783546017,p.html
Czyli homeopatyczne zabiegi :D Jesli miałbyś prawdziwy atak na taki system, to tego typu zabiegi spowodują tylko podniesienie progu od którego system osiągnie limity przepustowości. W praktyce atakujący zwykle mają spory zapas, więc i tak im to nie przeszkodzi.