przyznaję, że post o #lajko powinien być wczoraj, a będzie dzisiaj (w sensie, w czwartek, ale później)
no ale chociaż wrzucę zajawkę czym będziemy się zajmować w nieodległej przyszłości - robieniem "hejto które mamy w domu" czyli używania potężnego frameworka do prostego wyświetlania treści xD jutro o async/await z perspektywy człowieka który nie wie do końca jak działa async/await. ale jakoś tam dałem sobie radę #javascript
Pamiętam, jak miałem bekę z Fallouta 3 i jego implementacji pociągu metra, aż tu człowieka dopada wewnętrzny korpo legacy framework o nie lepszej elastyczności i wtedy już jest #niesmieszne ECHHH
@TRPEnjoyer - dla kogoś, kto nie wie o co chodzi to silnik miał ograniczenia dotyczące pojazdów, więc problem rozwiązano tworząc kapelusz dla NPC w kształcie pociągu - w taki oto sposób nie trzeba było modyfikować silnika a gra miała ruszające się pociągi napędzane niewidocznym (schowanym pod ziemią) NPCekiem: https://youtube.com/shorts/VAwgCEghYLQ
zanim powstało lajko - WebStorm ratuje mi życie, a copilot mnie wkurwia, czyli jak wytwarzać oprogramowanie w skończonym czasie
jeśli nie wiesz o co chodzi, albo nie wiesz co to terminal, to tutaj post wprowadzający: https://www.hejto.pl/wpis/programowanie-javascript-tworczoscwlasna-gruparatowaniapoziomu-lajko-lt-moj-tag-?commentId=13977332-7772-4f89-a067-d76784aa5c18
jeśli wyobrażacie sobie, że odpaliłem notatnik i piszę sobie różne magiczne komendy z pamięci, no to grubo się mylicie. Oczywiście, pamiętam że istnieje kilka podstawowych "klocków" - moduły, funkcje, zmienne, `if`, `for`, `let` i `const` do zmiennych i kilka innych jak nawiasy klamrowe.
Ale co do zasady, ani ja ani żaden inny programista którego znam nie pamięta "wszystkiego". Po ponad pięciu latach pewnie pamiętam dużo z biblioteki standardowej Go w którym przez ten czas pisałem, ale w innych językach - nie.
Z drugiej strony - przerywanie pisania żeby googlować, bo nie pamiętam jaka jest sygnatura każdej metody też jest bez sensu. Zajmuje to bardzo dużo czasu, i wybija mnie z twórczego rytmu.
Ponieważ najwyraźniej nie tylko ja mam słabą pamięć i nie tylko mnie to irytowało, powstały programy które nazywają się IDE. To taki notatnik, tylko oprócz "zapisz" i "wczytaj" mają dużo więcej opcji;
- informacja czy funkcja istnieje czy nie istnieje
- podpowiedzi jakie argumenty ma funkcja którą wywołuję
- podpowiedzi w którym miejscu zapomniałem nawiasu zamykającego albo otwierającego
- przeglądanie plików
- podłączanie debugera (o tym kiedy indziej)
- odpalanie programu
- zmiana nazwy obiektu w wielu plikach
- UI (interfejs graficzny zamiast terminala) do przeglądania bazy danych
i pizdylion innych. Każde IDE wspiera też tak zwane "pluginy" - czyli rozszerzenia, pisane przez indywidualnych twórców albo firmy. A jak firma chce zarabiać, to musi mieć klientów. A jak klient używa IDE, to łatwiej mu sprzedać produkt jak można go wpiąć w środowisko w którym już pracuje.
Przykładem takiego pluginu jest copilot. Ale za nim o copilocie, to linki do dwóch IDE;
- WebStorm - https://www.jetbrains.com/webstorm/ IDE z którego ja korzystam. Płatne. Ciężko mi powiedzieć w sumie, dlaczego za nie płacę. Prawdopodobnie dlatego, że korzystałem z niego w pierwszej firmie i nigdy nie chciało mi się uczyć gdzie co jest w darmowych.
- Visual Studio Code - https://code.visualstudio.com/ IDE które jest darmowe i z tego co mi wiadomo posiada takie same funkcje jak WebStorm (tzn. IDE od JetBrains) - polecam jeśli dopiero się uczysz. Jeśli zaczniesz z vscode, to potem oszczędzisz pieniądze na subskrypcjach, a jeśli nie widać różnicy - to po co przepłacać?
I teraz temat który w tym roku eksplodował - GitHub Copilot. Copilot to narzędzie, które podpowiada "co prawdopodobnie chcesz napisać dalej". No i w zależności od tego jak go używacie - może być błogosławieństwem lub przekleństwem.
Na przykładzie - jeśli napisałem już funkcję `savePosts`, ale z jakiegoś powodu chciałbym zapisywać posty pojedynczo, to wystarczy że zacznę pisać `function saveSinglePost` - copilot zasgeruje właściwie dokładnie to co sam bym zrobił (obrazek pierwszy).
Dzięki temu mogę znacząco skrócić swój czas pracy nad kodem, bo zamiast zastanawiać się nad pierdołami, korzystam z "domyślania się copilota". W tym momencie wystarczy, że "zatwierdzę sugestię" klikając "tab" i nie muszę się męczyć w myślenie gdzie subtelnie zmienić kod żeby uzyskać efekt.
Istnieje jednak druga, dużo bardziej mroczna strona copilota. I poza oczywistym (czyli sugerowaniem totalnych głupot w kodzie) chciałbym zwrócić uwagę na dwa mniej oczywiste problemy;
Problem pierwszy - w przypadku pisania tekstu (np. takiego jak ten) copilot generuje bardzo rozpraszające podpowiedzi, które nie mają sensu. Przykład - w następnym zdaniu napiszę tylko pierwsze słowo, a reszta zdania będzie dokończona przez copilota. Dowód na drugim obrazku. W tym przypadku copilot sugeruje mi, że "nie ma sensu" pisać o tym, że copilot sugeruje mi co mam napisać. No i ma rację, ale to nie jest to o czym chciałem napisać.
Problem drugi - komentarze funkcji. Copilot pisze totalne oczywistości, ponieważ nie jest w stanie zrozumieć czym są "informacje które mogą ciekawić potencjalnego odbiorcę". Ponieważ nie ma świadomości - nie wie, że istnieje jakikolwiek "odbiorca".
Jeśli chcecie natomiast zaimponować swoim kolegom programistom, to możecie dorzucić informację że copilot nie sugeruje usuwania tekstu, oraz nie sugeruje zmiany tekstu - a jak wszyscy wiemy ( ͡° ͜ʖ ͡°) w programowaniu nie chodzi tylko o to kto napisze więcej tekstu, ale też o zrozumienie kodu który zastaniemy i wprowadzanie zmian w kodzie w przyszłości, w sposób który nie ro⁎⁎⁎⁎⁎doli całego systemu.
Lennyface został zaproponowany prez copilot. Także może bywa wkurwiający, ale przynajmniej memiczny.
#programowanie #ai #tworczoscwlasna #gruparatowaniapoziomu #lajko <--- mój tag
Cześć, polecacie może jakieś książki do nauki C#? Ja wiem, że książki już w momencie publikacji są przestarzałe, a w internecie wszystko jest za darmo, ale tak już mam, że lubię się uczyć z książek.
Przyjmę wszelkie porady, pro tipy, ostrzeżenie. Po OLXach śmigają np. książki autorstwa Jesse Liberty po kilka złotych, ale przypuszczam, że wydanie z 2005 roku jest już baaaardzo nieaktualne.
W zasadzie każda książka jest tak samo dobra jak i zła. Jeśli chcesz się uczyć podstaw i nie programowałeś nigdy wcześniej to ta z 2005 będzie tak samo dobra jak i współczesna - podstawy się raczej nie zmieniły. Jeśli umiesz jako-tako programować to szukaj czegoś nowego opisującego bardziej dobre praktyki w C# i wzorce projektowe itp. Najlepiej samemu przejrzeć daną książkę i samemu wybrać co Ci najlepiej podpasuje - chodzi o styl książki, kolejność i sposób wprowadzania nowych informacji, a czasem nawet i szatę graficzną. A najlepiej to po prsotu pisać swoje programy - znaleźć sobie jakiś cel i go spróbować rozwiązać w praktyce. A w sumie C# jest dość szeroki i jeszcze możesz doprecyzować pytanie, czy chcesz pisać aplikacje webowe, programy okienkowe czy jeszcze coś innego?
Porada: masz tam u siebie wyższą uczelnię? Otwórz katalog biblioteczny i zobacz czy mają książkę do C#. Zwykle do czytelni nie musisz się zapisywać, a do biblioteki możesz zapisać się nawet nie będąc studentem.
Ostrzeżenie: pod żadnym pozorem nie kupuj książek technicznych na Amazone, żadnych i nigdy. Amazon sprzedaje podrobione książki: na kiepskim papierze, z błędami drukarskimi, rozpadające się. Temat jest znany, ale przypomnienie nie zaszkodzi.
tłumaczę jak lajko sortuje posty żeby stworzyć inaczej posegregowaną listę
^ to na górze tak napisałem, bo tzw. slug (sprawdźcie jak wejdziecie w posta to jak wygląda adres w przeglądarce) generuje się na podstawie początku wpisu. Wydaje mi się, że to może być istotne dla SEO, a mnie nie boli. Może zadziała jako darmowy clickbait.
jeśli nie wiesz o co chodzi, albo nie wiesz co to terminal, to tutaj post wprowadzający: https://www.hejto.pl/wpis/programowanie-javascript-tworczoscwlasna-gruparatowaniapoziomu-lajko-lt-moj-tag-?commentId=13977332-7772-4f89-a067-d76784aa5c18
Ale dzisiaj nie o tym - dzisiaj o tym jak to się dzieje, że mamy tablicę postów posortowaną chronologicznie a potem robimy z niej topkę.
Wszystko dzieje się w pliku process.js i do wszystkiego doszedłem googlując, bo na początku prawie nie wiedziałem co się dzieje (poza typowymi koncepcjami z programowania jak `if` albo `for`).
Pierwsza ważna uwaga - to nie jest tak, że napisanie tego kodu to jest to samo co napisanie 62 linijek tekstu. Kod który widzicie, to efekt prawdopodobnie ~8 godzin pracy w sumie na dwa pliki (średnio 4h na plik) i parę miesięcy rozważania różnych projektów i rozwiązań. Ale o pracy z ADHD też innym razem xD
No więc jak już napisałem jak trudno było napisać, to mam nadzieję że było warto i będzie łatwo zrozumieć.
Kawałek po kawałku;
- te linijki z `require` są po to żeby móc używać funkcji które ktoś inny napisał. W moim przypadku potrzebuję jeszcze poza "standardem języka";
- czytania i zapisywania plików (moduł `fs`)
- procesowania argumentów z wiersza poleceń (terminala) (moduł `yargs`).
- Ten drugi moduł to wynika z mojego doświadczenia - teraz mogę sobie wpisać który plik chcę przesortować (`--source=data-snapshots/{czas_w_ktorym_odpaliliscie_scrapejs}.json`) i według jakiego "algorytmu" sortowania ()
Oba znalazłem po prostu googlując 'how to <tutaj to co chciałem zrobić np. parse command line arguments in nodejs>'.
Potem to już było metodą prób i błędów - sprawdzam czy istnieje folder na wyniki, jak nie to tworzę. Sprawdzam komendę, sortuję z pomocą wybranego KOMPARATORA (zaraz o tym) i zapisuję do podfolderu stworzonego dla wybranego algorytmu (funkcja `savePosts`).
No dobra, to teraz o tym czym jest KOMPARATOR. Może słyszeliście kiedyś, że naukę programowania powinno się zacząć od algorytmów sortowania. To prawda. Ale nie dlatego, że są często używane, tylko dlatego że pokazują że jest dużo metod na wykonanie nawet prostej czynności, a w dodatku można je porównywać. A to porównywanie można łatwo obrazować.
Ale to nie studia tylko portal ze śmiesznymi papieżami xD
Na portalach z papieżami oraz w życiu nie pisze się funkcji sortujących, a co najwyżej KOMPARATORY - czyli funkcje które przyjmują dwa argumenty i zwracają informację który z nich jest mniejszy lub większy - czyli w jakiej kolejności względem siebie powinny się znajdować w wynikowej tablicy.
- ujemną jeśli obiekt który jest pierwszym argumentem (postA) powinien być w wynikowej tablicy PRZED drugim (postB)
- dodatnią jeśli obiekt który jest pierwszym argumentem (postA) powinien być w wynikowej tablicy ZA drugim (postB)
- zero, jeśli obiekty są równe
Jak mi nie wierzycie to możecie sprawdzić na kartce, ale jest nawet w przykładach na podanej stronie, że jak mamy dwie liczby A i B wynik operacji `A - B` da nam w wynikowej tablicy liczby posortowane rosnąco.
I teraz żeby to było użyteczne dla nas, to napisałem dwie funkcje. Najpierw zobaczmy prostszą - `compareByCommentLikes`. A właściwie `commentLikes`, bo to ta funkcja liczy "wartość posta". Otóż `commentLikes` przechodzi po wszystkich komentarzach i dodaje ich lajki do `likeSum` a gdy przetworzy już wszystkie komentarze, to zwaca `likeSum`.
Na tej podstawie napisałem kolejną funkcję - `compareByLikesTotal`. Co sprytniejsi mogli zauważyć, że rożni się ona jedynie dodaniem do sumy lajków z komentarzy lajków oryginalnego wpisu. Tak więc licząc wartość posta dla tego "filtra" dodam sobie lajki oryginalnego wpisu do wartości posta która jest liczona przez poprzednio opisaną "funkcję wartości" - `commentLikes`.
Z pozostałych sztuczek - jak się napisze `${cos} i reszta tekstu`, to zamiast `${cos}` zostanie wstawiona wartość zmiennej `cos`. Tak więc następujący kod;
let cos = "stary leży"
console.log(`${cos} na⁎⁎⁎⁎ny na wersalce`)
wypisze w konsoli `stary leży na⁎⁎⁎⁎ny na wersalce`. pdk (nie taguję bo ponoć tylko pięć pierwszych tagów działa) - zapraszam do postowania źródłowej piosenki w komentarzach
Co robi `split` to sobie możecie poeksperymentować sami, polecam wypisać (`console.log`) samo `source` i `source.split('/')` i zobaczyć co się dzieje.
O funkcji w której robię przy zapisywaniu `if (err)` porozmawiamy sobie w nieodległej przyszłości - omawiając plik `scrape.js`.
Następny wpis nie jutro, a pojutrze. Powód jest prozaiczny - wyjeżdżam na weekend i pisząc w czwartek piąty post zdałem sobie sprawę, że ważne jest by pisać regularnie (czemu? przekonacie się według nowego rozkładu jazdy już 21.09), a żeby pisać regularnie - to trzeba mieć dostatecznie dużo czasu na pisanie. A jeśli będzie mnie to stresowało, to c⁎⁎j będzie nie seria, bo się wypalę, a Wam się znudzi.
Tak więc pojutrze porozmawiamy sobie o tym jak pisać w języku którego się nie zna - czyli jak urządzić sobie środowisko pracy i dlaczego jeśli jesteś biedny to masz o wiele mniejsze szanse podczas nauki oraz na rynku pracy.
#programowanie #javascript #tworczoscwlasna #gruparatowaniapoziomu #lajko <--- mój tag
#gamedev nie wiem, czy dobrą społeczność wybrałem.
O co chodziło (już zmiękli troszkę;) w imbie z Unity:
"Pracując w branży od 13 lat wychodzę jeszcze z ery gdzie za silnik płaciło się 100 000 $ i coroczną subskrypcję. Mało kto mógł sobie pozwolić na tworzenie gier więc i developerów i gier było mało. Potem przestawiono się na model subskrypcyjny co miesiąc / co rok, od stanowiska, jeżeli masz mały zespół to płacisz odrobinę więcej, jak masz grupę 100 os. to płacisz per jednostka mniej, ale sumarycznie więcej i wszystko ok. Dzięki temu wzrosła liczba devów i firmy tworzące silniki zobaczyły: "O, dużo hajsu się generuje". Potem postanowiono wprowadzić darmowe silniki (+ ewentualną opcję premium z dodatkowym wsparciem autorów). Demokratyzacja narzędzi spowodowała lawinę developerów, z której to masy co jakiś czas trafia się spory sukces, od którego Unity czy Unreal postanowili pobierać procent. I to znów jest jak najbardziej ok - to spowodowało że np. Epic mimo że liczy swój procent od lifetime revenue gry, to nadal zarabia setki milionów rocznie. Unity również. Co łączy te wszystkie elementy? PRZEWIDYWALNOŚĆ. Wiesz ile musisz zapłacić co miesiąc , wiesz czego się spodziewać przy prospekcie finansowym. Jaki więc problem z pobieraniem opłat per instalacja? Otóż instalacja nie jest liczona per użytkownik / urządzenie tylko per FAKT INSTALACJI, więc każda instalacja: Na GamePassie, czy innej subskrypcji, w paczkach charytatywnych (tu się ponoć poprawili), każda instalacja na PC / konsoli / telefonie. Stąd generuje to ryzyko, że np. dany jeden zakup gry za 5$ nie kosztuje tych przysłowiowych 20 centów, tylko 20 centów x liczba instalacji których nie wiadomo ile może być. Dodatkowo, jest ryzyko, że nie dość że dyskontowane ale i pirackie kopie mogą generować koszty, a do tego użytkownicy mają możliwość np. generowania tych kosztów celowo, czyli mogą zrobić "install bombing" a tym samym pogrzebać finansowo developera. Przykład z życia - znajomy stworzył gierkę która kosztowała ok. 1$, miała 50 mln pobrań, ale koszt wydawcy i opłat pożerało 90% przychodu (licencja produktu, marketing, pozyskanie klienta, opłaty dla platform). Zostaje teoretycznie 5 mln$ ALE koszt developmentu dla developera (programiści, assety) to kolejne 2 mln. Idąc dalej mamy wciąż milionera, prawda? 3 mln$ ? Otóż nie - lifetime fees dla Unity to ok. 2 450 000$. Czyli zostajemy przy 550 000 dolców na czysto - i tyle mniej więcej mu zostało. Fantastyczne pieniądze (serio - fajnie zarobić ponad 2 mln złotych na gierce) To teraz wchodzą opłaty per instalacja - 50 mln instalacji to... uwaga: 1 020 000$. Czyli w powyższym przypadku znajomy JEST W PLECY 470 000. I to w przypadku, gdy każdy z klientów zainstaluje grę TYLKO RAZ. A teraz wyobraź sobie że każdy zainstaluje grę, odinstaluje i zrobi to ponownie... I jasne - 90% developerów nie będzie operowało na takich liczbach, ale wielu devów retroaktywnie może otrzymać opłaty to raz, dwa - jeżeli to przejdzie, to Unity będzie gotowało tą żabę i krok po kroku będzie dodawało kolejne elementy regulaminu bo kto im zabroni xD Tutaj chodzi o zatracenie zaufania do twórców silnika, niepewność kosztów developmentu, etc. Mam nadzieję, że dostatecznie szczegółowo to wyjaśniłem."
Jeśli koszty są wyższe, niż przychody, to jest strata. Tak działa biznes. Każdy.
Przewidywalność? Bardzo bym chciał mieć przewidywalność w moim sklepie internetowym, przecież klienci mogą zwracać towar, konkurencja obniży cenę... A co ma powiedzieć PZU, jeśli nagle klienci nieprzewidywalnie zaczną rozbijać częściej samochody? Nie ma czegoś takiego, jak przewidywalność. Możesz jedynie szacować ryzyko, robić projekcje finansowe. Jak źle oszacujesz- wypadasz z rynku na którym jest konkurencja, bo będziesz albo za drogi, albo pod wodą.
Nie wiem, o co chodzi ze zmianami w opłatach Unity, ale ten komentarz niczego nie tłumaczy, poza jednym - chlip, chlip, jest drożej i mi się nie spina. Brakuje jeszcze posta z Grupy Azoty, że gaz podrożał i powinien być tańszy.
PS Trzecie primo (ultimo!): opłaty od pirackich instalacji mi sie podobają. Nie umiesz zabezpieczyć gry, żeby użytkownicy płacili - płać ty.
#programowanie #javascript #tworczoscwlasna #gruparatowaniapoziomu #lajko <--- mój tag
no siema.
lubię społeczność @hejto , ale strasznie mnie irytuje brak różnych funkcji albo działanie inne niż to którego bym chciał. Narzekałem, tagowałem, nic z tego nie wyszło. Tak więc przedstawiam Wam alternatywę-WIP-chyba-że-mi-się-znudzi-#opensource i pierwszy merytoryczny wpis w serii.
Nie ma nawet README, ale nie od razu Rzym zbudowano. Ma za to dwa pliki które napisałem ja i cztery których nie napisałem (kto ma wiedzieć ten wie #pdk kto nie wie ten widocznie jeszcze nie potrzebuje).
Kod jest napisany w JavaScript. To taki język którego kiedyś się używało żeby robić fajne przejścia między obrazkami w przeglądarce. Teraz dostępny też w formie języka programowania z silnikiem który po prostu wykonuje kod na kompie jak np. Pythona albo C++ (nie do końca, ale to nie praca naukowa tylko edutainment)
Żeby sobie odpalić te programy, to musicie np. zainstalować NodeJS: https://nodejs.org/en/download następnie ściągnąć repozytorium z linka (można kliknąć przycisk <> Code i wybrać Download ZIP a potem rozpakować, jak nie macie gita)
no i teraz możecie poczuć się jak hacker - odpalić terminal. Może być windowsowy (wpiszcie `cmd` w wyszukaj i uruchom czy coś takiego). Poniżej szybki tutorial "chodzenia po systemie plików". W sensie klikania w foldery w formie tekstowej.
`ls` pokazuje pliki w folderze w którym jesteś
`cd <nazwa_folderu>` przechodzi do folderu o nazwie `<nazwa_folderu>` który MUSI się znajdować w folderze w którym jesteś (czyli pokazywać się w komendzie `ls`) - ten krok będziemy nazywać KROKIEM W DÓŁ
, `cd ../` przechodzi do "folderu który zawiera folder w którym jesteś" - taki "KROK DO GÓRY" - czyli przeciwieństwo kroku w dół
a jak się zamotasz albo sprawdzasz jak działają komendy to `pwd` pokaże tak zwaną "ścieżkę" - trudniej mi będzie wyjaśnić niż Tobie sprawdzić i skumać eksperymentując
no i jak będziecie w folderze z kodem, to najpierw musicie napisać `npm install` żeby pobrać tak zwane ZALEŻNOŚCI, a potem to możecie sobie np. odpalić zaciągnięcie pierwszej strony "najnowszych" i zapisanie jej jako JSON (jak nie wiesz co to to wygoogluj) kopiując, wklejając do terminala i wciskając enter;
nodejs scrape.js
stworzy Wam się wtedy plik `data-snapshots/{czas_w_ktorym_odpaliliscie_scrapejs}.json` a w środku będzie TABLICA zawierająca OBIEKTY - jak sprawdzicie co to JSON i otworzycie taki plik to myślę że intuicyjnie skumacie co to tablice i obiekty.
no ale taki plik to jest w sumie do d⁎⁎y, bo to to samo co hejto.
tutaj wkracza drugi plik - `process.js`. Odpalić go można następująco;
opcja pierwsza - sortowanie po sumie lajków komentarzy (nie patrząc na lajki samego wpisu)
opcja druga - tak samo, tylko z komendą `likes_total` zamiast `comment_likes_sum` da Wam wpisy posortowane po sumie lajków posta i komentarzy.
liczę, że foldery znajdziecie sami.
UWAGA! z łaski swojej nie napierdalajcie za często `scrape.js` - po to zapisuje wpisy, żeby nie zepsuć hejto. nie spierdolcie tego. do adminów @hejto - myślę że filtrowanie useragent wystarczy żeby największy plankton zablokować.
A na jutro postaram się przygotować wpis jak sobie napisać taki scraper samemu, chociaż starałem się żeby kod był łatwy do czytania. Sam praktycznie nie znam JavaScriptu, więc nie będę używał żadnych mega magicznych narzędzi i skomplikowanych konstrukcji językowych.
jeśli coś Wam nie działa, to zapraszam do komentowania też. z fartem wariaty.
kurde zapomniałem zapisywać linka do posta xD grupa obniżania poziomu.
nie mniej gratuluję @adam_photolive @Cris80 i @smierdakow za posty pod którymi komentarze były najbardziej plusowane, oraz @adam_photolive @Cris80 i @smierdakow za posty które razem z komentarzami zgromadziły najwięcej lajków do spółki z komentarzami.
a sobie gratuluję dobrania fantastycznych metryk na start. mam nadzieję że w przyszłości efekty będą bardziej spektakularne
@Yossarian absolutnie nie trzeba, w przyszłości jeśli mi starczy cierpliwości to zrobię swoją bramkę płatności w ramach tej serii. Ale bardzo dziękuję za wyrazy uznania.
@VonTrupka ostatnio kupiłem NAS i 2x1TB dysk. Potrzebuję motywacji żeby go skonfigurować.
A tak serio, w pythonie nie rozumiem envów i nie chce mi się ich chwilowo poznawać. W go będziemy pisać trochę później, bo na tym etapie nie ma sensu się bawić w statyczne typowanie. No i będę chciał zrobić UI, to gdyby ktoś chciał się uczyć programowania na podstawie moich postów, to nie będzie musiał się uczyć ośmiu języków na raz.
Dorzucam do listy "tematów do poruszenia". A obrazek klasyk
@666 ok, a co powinienem zrobić zamiast tego? Ten catch to jest głównie na 500 z hejto. A tematyka z czasem będzie się zmieniała - ale gdzieś trzeba zacząć. Dzięki a komentarz!
Ktoś mi powie proszę jak zrobić logowanie przez facebooka na stronie? Trzeba ich skrypt dodać w index i co potem? Dostaję ten accessToken i muszę go zweryfikować i nim wyciągnąć dane o użytkowniku? Ma ktoś fajny artykuł o tym?
W końcu nadszedł ten dzień, w którym muszę poznać Kubernetesa bardziej niż "odpalasz ten skrypt i się deployuje". Oby mi starczyło cierpliwości na patrzenie na paski postępu. #programowanie #devops #zalesie #kubernetes #docker
@wombatDaiquiri - jak się ma wszystko zautomatyzowane i deploymenty lecą przez pipeline, to wtedy następuje regres umiejętności.
Dlatego od czasu do czasu buduję sobie klasterek ręcznie.
W ogóle ostatnio konteneruję podmanem zamiast dockerem i używam CRI-O jako runtime.
Tak patrząc na cały ekosystem, to pomimo swoich zasług dla konteneryzacji, Docker ze swoim daemonem (dockerd) i poleganiu na containerd (kolejny daemon, który musi działać na OSie) - co ma poważnie implikacje dla security - będzie tracił w enterprise na rzecz podmana.
@koszotorobur ja to wszystko rozumiem, że biznes, że wzrost, że postęp. Ale czy naprawdę koniecznie muszę się uczyć wszystkiego zamiast pisać sobie stateless apki i pisać do działu adminów o bazę danych a potem przez tydzień się opierdalać aż stworzą?
@wombatDaiquiri Witaj w klubie. Podobno fajna książka to kubernetes in action, Marko Luksa. Jak coś to znam kogoś, kto zna kogoś, kto zna kogoś, kto...
Od pewnego czasu trwa już przedsprzedaż drugiej edycji szkolenia AI Devs przeznaczonego dla programistów chcących nauczyć się integracji istniejących systemów IT z modelami językowymi (AI). Nie jest to szkolenie z pisania promptów.
Przez lata skompilowałem sobie listę pytań, z którymi najczęściej spotkałem się na rozmowach kwalifikacyjnych - może komuś się przyda:
Czym w ogóle jest Python i jakie ma wady i zalety?
Jakie prymitywne typy danych oferuje Python i jakie mają właściwości?
Które złożone typy danych są mutowalne i dlaczego jest to przydatne?
Jakie znasz różnice pomiędzy Pythonem 2 a 3?
Podaj metody formatowania ciągów znaków (stringów) i interpolacji zmiennych
Wymień kilka najczęściej używanych modułów z biblioteki standardowej i ich zastosowanie
Z jakimi zewnętrznymi modułami lubisz pracować najbardziej?
Wyjaśnij wyrażenia listowe (list comprehensions) i podaj ich przykład
Jak wykonać kod Pythona asynchronicznie?
Podaj przykład obsługi błedów w Pythonie
Jak używać menedżera kontekstu (context manager)?
Czym jest GIL (Global Interpreter Lock) i jak go obejść?
Jeśli klasa dziedziczy z innej klasy ale obie klasy mają tę samą metodę, to metoda z której klasy zostanie użyta? Tip: MRO (Method Resolution Order)
Wyjaśnij dekoratory i podaj różnice pomiędzy "@classmethod" i "@staticmethod"
Jak funkcja zwana "super()" pomaga w zarządzaniu dziedziczeniem?
Jak przyspieszyć wykonywanie kodu Pythona?
Jak testujesz swoje programy napisane w Pythonie?
Często są też zadania programistyczne ja na przykład:
Wyświetl określone informacje ze strony internetowej użwając Pythona
Zaimplementuj Most Recently Used (MRU) w Pythonie bez użycia modułów zewnętrznych
Zaimplementuj dowolny algorytm sortowania w Pythonie
Tych zadań programistycznych w internecie jest sporo ale większość firm używa wariacji tych samych kilku pytań - na szczęście poważne firmy odchodzą od takiego sprawdzania wiedzy, bo to jedynie sprawdza czy ktoś jest w stanie nauczyć się kilku rozwiązań na pamięć.
Oczywiście o wiele więcej jest materiałów po angielsku - jak na przykład ten całkiem przyjemny godzinny tutorial dla początkujących: https://youtu.be/kqtD5dpn9C8 .
Uruchamiam STM32F103C8, a konkretnie EXTI na liniach PA0 ... PA4. Siedzą na tych pinach zwykłe przełączniki typu pushbutton. Rozwikłałem reference manual na tyle, że jedno przerwanie działa, ale inne mimo takiej samej składni przy każdym pinie już nie chcą.
GPIO ustawiam:
GPIOA->CRL &= ~GPIO_CRL_CNF0_0; // floating input to pull-down
Co bym nie robił tak działa tylko jedno przerwanie i to z PA2. Wiązać pinów z EXTI niby nie muszę (po resecie akurat się zgrywają), ale robię to dla pewności, nie widzę już gdzie szukać. W komentarzu dla czytelności wrzucam cały kod okrojony do obsługi EXTI.
Co mogę robić źle albo gdzie szukać? Do debugowania mam UART i LEDa ( ͡° ͜ʖ ͡°)
Nie zeby to cos zmienilo (bo to wszystko sa zera) ale EXTI0...3 sa w AFIO->EXTICR[0] a EXTI4 w AFIO->EXTICR[1].
W ramach debugowania sprobuj wywolac przerwanie programowe ustawiajac bity w rejestrze EXTI->SWIER. To pomoze Ci znalezc czy problem jest po stronie EXTI / NVIC / CPU czy konfiguracji GPIO. Sprawdz tez, prosta petla, czy czytanie pinu GPIO i pokazywanie go na LEDzie dziala dla wszystkich pieciu. Najgorzej jest spedzic wieczor debugujac program jak problem jest sprzetowy.
@Skylark dzięki. Jutrzejsze popołudnie zapowiada się zatem pod znakiem debugu, oby skutecznego.
EXTICR[0] i EXTICR[1] próbowałem wcześniej, ale też nie chodziło. Nie zapuściłem żadnego SVN, to tak zostało : )
Jak na razie spędziłem kilka dobrych posiedzeń nad szukaniem przyczyny całkowitego niedziałania nawet zwykłego blinky, a wyszło że to był jakiś pokopany CMSIS, choć wprost pobrany ze źródła.
@Skylark przerwania programowanie wywołują się. Problem polega na tym, że na dwóch pinach zamiast 3V3 z pullupa rezystorem 10k pojawia mi się jedynie 0,7 V. Poprawiałem na nich diody, a że są w obudowie SOD323, to może jedną - dwie odwrotnie wlutowałem. Napięcie pasuje ładnie do złącza p-n.
No albo coś w kodzie, ale przy ctrl+c/v to raczej nie powinno tak się stać.
@cec trzy z pięciu są dość kluczowe do działania tego przyrządu, więc zależy mi na szybkim ich zadziałaniu. Zostają dwa, które w sumie też można wrzucić do jednego wora i mieć spokój Prosto, SZYBKO...
@macgajster miłej zabawy z drgającymi stykami ¯\_( ͡° ͜ʖ ͡°)_/¯
Takie rzeczy się robi na przerwaniu od timera. Co 5 - 10 ms timer odpala przerwanie i w nim sprawdzasz czy przycisk był naciśnięty przez kilka cykli po zmianie stanu. Jeśli tak to wywołujesz funkcje onButton i ustawiasz jakiś "cooldown", żeby nie odpaliła się kilka razy przy jednym naciśnięciu.
Obsługa przycisku na przerwaniu wymaga kasowania flagi przerwania przed wyjściem z niego i pewnie jakiegoś dodatkowego timera albo delaya, żeby obsługa przerwania nie wywołała się kilka razy.
P.S. daj znać czy udało się odpalić pozostałe przerwania.
ciekawostka - hejto ma tylko 50 stron "najnowszych" - https://www.hejto.pl/najnowsze/strona/50 jak zwiększycie numerek, to będzie wyświetlało stronę 50. To oznacza, że aby zescrapować posty i zrobić z nich customowy feed, muszę je zbierać na żywo co ~2 dni. Inne opcje brzmią dużo bardziej skomplikowanie.
wiadomość najgorsza - nie widzę opcji na zbieranie danych historycznych (szczęśliwie mogę zbierać 'od dzisiaj do nieskończoności' - czyli te dane za jakiś czas mogę mieć i mogę obrabiać)
wiadomość zła - nie mam pojęcia co się dzieje w requestach, zakładam że jakaś frameworkowa magia. tak czy siak, dostęp do api nie wygląda friendly
wiadomość dobra - mogę pobrać po prostu https://www.hejto.pl/najnowsze/strona/50 i zparsować xD
kolejna wiadomość dobra - strona 50 była dwa dni temu, więc nie muszę za bardzo bombardować api xD
#lajko <--- moje próby stworzenia sobie newsfeedu, który nie będzie mnie wkurwiał. postaram się tagować.
@wrazik Po prostu Scruma pcha się tam, gdzie nie powinno i nawet jeżeli stara się go dobrze używać to i tak nie ma sensu w takich przypadkach. To jakby wkrętarką wbijać gwoździa.
Z mojego doświadczenia scruma zazwyczaj zabijają 2 rzeczy: budżet (nie nadaje się do niskich budżetów, imho nawet do średnich) - został stworzony by poprawić efektywność produkcji oprogramowania w bogatych korpo, a wciskają go wszędzie. Po drugie to mikrozarzadzanie. Jak na review scrum master/po wie dokładnie co ma zobaczyć, to robicie to zle.