Wpis z mikrobloga

tl;dr
Mat. dyskretna: uczę się zastosowania grafów
Android: skończyłem aplikację śledzącą wynik meczu (fotki na zdjęciu, OTWIERAĆ W NOWEJ KARCIE). Rozpoczynam kolejny kurs, którego celem jest stworzenie aplikacji służącej do nauki języka plemienia Miwok, lecz ja stworzę aplikację do nauki języka norweskiego.

Przerobiłem kolejne 2 wykłady z maty dyskretnej.
Grafy.
Matching problems - dzięki zastosowaniu grafów można łączyć ludzi w "najlepsze" pary - Tinder czy Badoo korzystają z takich rozwiązań. Załóżmy, że mamy grupę 10 mężczyzn i 10 kobiet. Każdy mężczyzna ma własną listę Stooley'a, na której spisuje ranking kobiet, od najlepszej do najgorszej. Tak samo jest z kobietami. Teraz pytanie, jak dobrać w pary obie te grupy, żeby ich zadowolenie było największe i żeby nie było problemu, że ktoś wchodzi z kimś w romans? Wykorzystanie grafów i dopasowania pozwalają na rozwiązanie tego problemu :)

Jako ciekawostkę podam, że wykład z Matematyki Dyskretnej prowadzi Tom Leighton, profesor matematyki, ale także milioner, współzałożyciel firmy Akamai, dzięki której działa współczesny internet.

Aplikację na Androida do śledzenia wyniku meczu uważam za skończoną :) Wraz ze wzrostem umiejętności będę ją ulepszał, gdyż są skrajne sytuacje, z którymi nie radzi sobie aplikacja,
a powinna. Są to:

- co jeśli zaakceptuję nazwisko i bramkę, a po 10s okaże się, że był spalony? Trzeba będzie dopisać cofanie do poprzedniego stanu.
- problem tkwi też w bramkach, które padają w ostatnich sekundach. Jeśli pada gol na <5 sekund przed końcem, ciężko jest zdążyć wpisać nazwisko zanim EdiText zniknie
- zauważyłem, że da się wkleić text w EditText nawet jeśli jest zablokowany

- dołożyłem ProgressBar, bardzo ładnie śmiga (odświeżanie co sekundę. Wypełnia wraz z upływem meczu:)
- zapomniałem zupełnie o setterach i getterach, ale Android Studio jest na tyle mądre, że po wejściu w Refactor -> Encapsulate Fields, w miejscach gdzie zmieniałem bezpośrednio
wartość zmiennej pojawił się setter, a gdzie pobierałem jej wartość, pojawił się getter. Super sprawa :D
- spotkałem się też z klasą Context. Żeby przywołać obiekt tej klasy, należy zastosować słówko "this", odnoszące się do instacji klasy, w której aktualnie jesteśmy(???)
- dodałem "wyskakującą" klawiaturę przy wpisywaniu tekstu w EditText
- pozmieniałem kolorystykę, fonty. Nie pozmieniałem jeszcze sztywnych wartości w XMLu na zmienne z folderu "res". Potrzebne to będzie m. in. do tłumaczenia na angielski.
- dodać button wysyłający raport na e-maila
- na sam koniec pojawia się RatingBar, który pozwala na ocenę meczu w skali 0-5. Ocena zostaje dołączona do raportu
- apka działa w obu orientacjach (pion, poziom)
- kolorystykę i czionkę dobrałem sam z użyciem Material design od Google
- rózne klawisze są poblokowane w momencie, gdy zachodzi taka potrzeba (np. podczas przerwy nie można dodawać goli i kartek itd)
- można dodać jeszcze do raportu okres trwania meczu (np. 18:00-20:00)
- może klawisz z restartem aplikacji?
- poznałem obiekty niezmienne w Javie (zastanawiałem się dlaczego String nie zmieniał się, gdy chciałem go modyfikować, ale dowiedziałem się dlaczego)
- podejrzewam, że po kilku miesiącach kodzenia nie będę chciał wracać już do tej aplikacji, bo szybciej i lepiej będzie napisać od nowa :D
- na sam koniec pojawia się button, po którego kliknięciu otwiera się gotowy do wysłania email zawierający raport z meczu zatytuowany "Wygrał [zwycięzca]"
- nie dodałem możliwości dodawania czasu w 2. połowie. Wiem jak to zrobić (np. gdy jest 85 minuta, obok czasu wyskakuje kilka CheckBoxów z Buttonem. Np. 5x CheckBox,
które pozwalają na dodanie następujących ilości minut: "1min", "2min", "3min", "4min", "5min". Po zaakceptowaniu czas wydłuża się o tyle minut) zajęło by mi to za dużo
czasu, a w sumie to tylko niuans, więc zostawię to na kiedyś indziej.
- dodałem tło + zastosowałem na nim funkcję void setAlpha(int alpha), która ustawia przezroczystość danego @drawble. alpha jest w przedziale 0-255, gdzie 0-przezroczysty, 255-nieprzezroczysty,
ja ustawiłem na 20.
- dowiedziałem się na stackoverflow, że w Javie nie ma funkcji, tylko są metody :D

Od teraz każdy projekt będę zaczynał od skonfigurowania styli (@drawable, @value), żeby potem nie musieć wszystkiego poprawiać i tracić masę czasu.
Proszę o konstruktywną krytykę. Zapraszam do klonowania repozytorium na Githubie i odpalania apki na swoim urządzeniu :)

Mam też pytanko do bardziej doświadczonych. Piszecie komentarze do każdego kodu? Czy może jeśli zmienne są dobrze nazwane to nie zawsze trzeba to robić?

Ten kurs przewidywał zrobienie 2 aplikacji, jednak ja zostanę przy tylko tej jednej. Dlaczego? Bo i tak zrobiłem dużo więcej niż wymagano w obu tych projektach razem wziętych
i zrobienie drugiej podobnej aplikacji nie nauczyło by mnie pewnie niczego nowego, a trzeba iść do przodu :)

W końcu mogę przejść do aplikacji wieloekranowych :D
Z tego co widzę, to szykuje się kolejny ciekawy projekt. Będzie to aplikacja pomagająca w nauce języka (w kursie na Udacity jest to język plemienia Miwok, ale ja zrobię wersję polsko-norweską,
jako, że uczę się tego skandynawskiego języka).

#studiacs #programowanie #naukaprogramowania

Do niedzieli! :)
frezarkotokarka - tl;dr
Mat. dyskretna: uczę się zastosowania grafów
Android: skońc...

źródło: comment_33Con40za9QTHbRfA3EyvlmxGwIuLRhx.jpg

Pobierz
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@assembly: Na Githubie są projekty botów, które korzystają z sieci neuronowych w celu automatycznego swapowania (w zależności od Twoich upodobań swapują w lewo lub prawo, z czasem się uczą i dają jeszcze lepsze rezultaty). Czy same programy Tinder/Badoo korzystają z sieci neuronowych to nie jestem pewien, ale obstawiam, że tak.
  • Odpowiedz
Z góry zaznaczam, że proces tworzenia tych notatek wygląda w ten sposób, że gdy przyjdzie mi coś na myśl, lub napotykam na jakiś problem, to opisuję to od kolejnego myślnika. Nie przerabiam tego później do wpisu, bo szkoda na to czasu :d
  • Odpowiedz
@frezarkotokarka: Nie chodziło mi o boty, raczej o samego Tindera/Badoo. Myślałem nad pewną aplikacją, ale wydaje mi się, że ma zbyt skomplikowany model do opisania, a chciałbym mieć ~90% skuteczności.
W każdym razie, obserwuje twoje poczynania i powodzenia! Ja także robię co nieco, może się kiedyś pochwalę :D
  • Odpowiedz
@ven_: Idę kursem na Udacity. Temat apki zaliczeniowej z tego kursu, który właśnie skończyłem był podobny (licznik przebiegu meczu) z tą różnicą, że wyszedłem baaardzo mocno poza wymagania. Według zakładki "requirements" wystarczyłoby tylko ustawić możliwość dodawania bramek :D. Nie trzeba było wstawiać nazw drużyn, timera, nazwisk strzelców, oceniania przebiegu meczu, wysyłania raportu na emaila. Staram się każdy projekt z kursu robić w ten sposób :D Jeśli chodzi o dalsze plany
  • Odpowiedz
@ven_: Zdaje mi się, że mówisz tutaj o Nanodegree, które jest płatne ~200$/miesiąc. Ja opieram się tylko na darmowych kursach, ale z tego co czytałem, to zapisywanie się na Nanodegree i wydawanie na to góry szmalu nie ma większego sensu. Jeśli chodzi o kursy z AI, to jest dużo darmowych:
Intro to Artificial Intelligence
Deep Learning
Knowledge-Based AI: Cognitive Systems
Artificial Intelligence for Robotics
Intro to
  • Odpowiedz