Udemy – podsumowanie finansowo-marketingowe grudnia

Zgodnie z obietnicą przedstawiam jak szła sprzedaż mojego kursu na Udemy w grudniu. Pomimo tego co słyszałem, że wtedy jest największy obrót, u mnie było wręcz odwrotnie. Po szczegóły zapraszam do wpisu.

Marketing

Z racji tego że grudzień i święta to nie prowadziłem marketingu zbyt intensywnie. Najwięcej działo się w pierwszej połowie grudnia kiedy to (za sprawą Udemy) pojawiłem się na Spider’s Web, oraz można było znaleźć zniżkę na kurs w jednym z okienek w wydarzeniu dev-advent-calendar. Statystyki z obydwóch źródeł znajdują się poniżej.

Jak widać z SW, które wygenerowało sprzedaż 25 sztuk kursu udało mi się uzyskać 52.01$. Z kolei kalendarz przyniósł zysk na poziomie 31.16$. Pojawiłem się w okienku 6 grudnia, jednakże kod który tam się znajdował był ograniczony czasowo do 10 grudnia. Ostatniego dnia przypomniałem o tym że że promocja dzisiaj się kończy i chyba faktycznie tego typu ograniczone czasowo oferty, pomimo małej grupy testowej, bardzo dobrze wpływają na sprzedaż. W międzyczasie w moich social media przewijały się też informacje o wydarzeniu #devrekolekcje w którym brałem udział oraz o wydarzeniu DevPanel. Następnie pojawiła się informacja o podsumowaniu listopadowym oraz o tym że trafiłem na stronę zawodprogamista.pl/kursy. 20 grudnia poinformowałem o możliwość kupienia kursu na prezent z kolei, na koniec roku pokazałem statystyki Udemy za 2017 i to by było tyle z działań marketingowych na tamten rok.

Święta wyraźnie odbiły się na sprzedaży, w pierwszej połowie miesiąca sprzedały się 42 kursy, natomiast w drugiej tylko 8 sztuk. Dochód za cały miesiąc grudzień wyniósł 170,55$ czyli o 92,2$ mniej niż w poprzednim miesiącu.

Podatki

W temacie podatków bardzo pomógł mi Bartek Rycharski z grupy Kursy Online na facebooku, który sprzedaje swój kurs już od jakiegoś czasu. Przy okazji, jeśli ktoś chciałby się dowiedzieć jak przygotowywać i przeprowadzać streamy i webinary, to tutaj znajduje się odpowiednia oferta ze zniżką: The Ultimate Guide to LIVE Streaming and Webinars. Pomimo tego, że nie jestem w stanie wyjaśnić jak to od strony podatkowej dokładnie działa (przychód z udzielonych licencji, czy coś), ja ze swojej strony wystawiam jedną fakturę dla Udemy USA. Ponadto po wykonaniu przez nich przelewów (przelewają na konto PayPal), pobieram rozliczenie oraz dowód wpływu na moje konto i przekazuje księgowej.

Podsumowanie

To by było na tyle, jeśli chodzi o grudzień. Szczerze mówiąc, słyszałem, że to podobno złoty okres dla sprzedawców, ja tego tak nie odczułem, nie wiem, być może kupno kursów na prezent nie jest aż tak popularne? W żadnym razie się tym nie przejmuję, ruszam dalej ze swoimi planami, w skład których wchodzi kolejny kurs już w tym miesiącu. No i już widzę, że będzie co analizować w lutym ponieważ w tym miesiącu według planu wkraczają reklamy AdWords, oraz Facebook. Także zapraszam do zapisania się na którąś z opcji subskrypcji po prawej i do przeczytania wkrótce!

Ps. Gdyby ktoś miał ochotę zdobyć wiedzę o tym jak piszę się aplikacje na platformę Android, to można śmiało klikać (link do kursu).

Podsumowanie roku 2017

Koniec roku to idealny czas, aby robić wszelkiego rodzaju podsumowania i zestawienia. Ja również postanowiłem zerknąć wstecz i zobaczyć jak wyglądał dla mnie rok 2017. Sporo się działo, ale mam wrażenie, że podsumowania raz w roku jednak nie dają pełnego oglądu sytuacji. Więc być może będę takowe robił i publikował częściej? Cóż, czas pokaże, tymczasem zapraszam do wpisu, zwłaszcza interesuje mnie Twoje spojrzenie na wykres z aplikacji Toggl, który znajduje się poniżej. Daj znać w komentarzu co o nim myślisz.

W skrócie

Na początku roku 2017 pracowałem jeszcze jako instruktor w szkółce programowania dla dzieci Wowschool, prowadząc rozmaite zajęcia. W styczniu podjąłem się napisania aplikacji, o której za wiele nie mogę powiedzieć, ale finalnie, nic z tego nie wyszło. W lutym zacząłem też przygotowywania do konkursu „Daj się poznać„, gdzie finalnie zająłem 20 pozycję na blisko 1000 startujących osób. W międzyczasie zmieniłem też firmę, oraz razem z Bartoszem Bonisławskim, oraz Pawłem Klimczykiem rozpoczęliśmy tworzenie serii paneli z programistami na żywo, nazwanej DevPanel. W tym roku pojawiłem się dwa razy na wydarzeniach z serii Toast prelegując na temat Google Actions, oraz „Do more with Android”, czyli automatyzacja w Androidzie. Dodatkowo przeprowadziłem całodniowe szkolenie w ramach wydarzenia #devwarsztaty, był to przyspieszony kurs javy. W trakcie wakacji (po za tym, że miałem trochę wolnego) i wkrótce po nich pracowałem nad aplikacją do obsługi budżetu, ale poległem, nie udało mi się jej dokończyć. Następnie wspólnie z ekipą udało się zorganizować wydarzenie „Devoxx4kids Wrocław„. W październiku zarejestrowałem też DG i opublikowałem swój pierwszy kurs na Udemy, rozpocząłem swoją przygodę z tą platformą.

Statystyki

Garść statystyk po całym roku, tak przedstawiały się odwiedziny bloga w całym roku 2017.

Podsumowanie roku 2017

Dane są zbliżone do tych z jeszcze poprzedniego roku, w aktualnym mam zamiar wypaść lepiej, przez tworzenie większej ilości i lepszej treści.

Wykres z Toggl z kolei przedstawia się w ten sposób.

Podsumowanie roku 2017

 

Ciekawe, prawda? 🙂 Jak interpretujecie taki wykres, to był pracowity rok, czy wcale niekoniecznie?

To może jeszcze na koniec wykres z play-store z informacjami o aplikacjach.

Podsumowanie roku 2017

Play store po za jedną aktualizacją został ostatnio nieco zaniedbany, ale kto wie, co przyniesie przyszłość. Na koniec: na platformie Udemy na mój kurs w roku 2017 zapisało się 175 osób.

Plany

W 2018 również zmienię pracodawcę 😉 Czy będzie to na zasadach b2b, czy uop, jeszcze się przekonamy. Mam też kilka punktów na liście zadań, oraz dodatkowo planuję sprawdzić jakie są możliwości zarabiania na platformie Udemy, jak mi idzie planuję publikować w comiesięcznych raportach. Pierwszy już za mną, wkrótce napiszę kolejny, o tym jak (słabo) poradziłem sobie w grudniu. Mogę tutaj zdradzić, że w planach mam na razie około 6 kursów javowo-androidowych. Dodatkowo poszukam innych źródeł dochodu, próbując monetyzować i lekko ulepszając  aplikacje które już posiadam, być może tworząc nowy produkt? Przy czym ostatni punkt będzie wymagał kilku miesięcy wytężonej pracy, więc jak będzie, przekonamy się pod koniec roku. Warto kliknąć tam po prawej -> i dołączyć do email newslettera, ponieważ na blogu będzie o tym jak radzę sobie na Udemy, może nieco o technologii, oraz o tym jakie jakie inne pomysły na wygenerowanie dochodu się pojawiają. Zapraszam serdecznie!

Udemy – podsumowanie finansowo-marketingowe listopada

Jak pewnie było widać na licznie udostępnianych przeze mnie statusach, ostatnio stworzyłem i opublikowałem kurs na platformie Udemy. Dla tych którzy przegapili, był to „Praktyczny podstawowy kurs kurs programowania Android” (pod linkiem więcej info i promo). W tym tekście chciałem podsumować co i jak robiłem monetyzując ten kurs, czyli trochę o marketingu, trochę o dochodach. Mam kilka uwag, wiem co zrobiłem źle i wiem co będę robił dalej. Finalnie w około pół miesiąca (bo kurs oficjalnie był dostępny od 14 listopada) zarobiłem 262.75$, mając 125 kursantów.

Misja

Ogólnie chciałbym, żeby ten kurs i następne, które pojawią się na moim koncie stały się takim małym centrum wsparcia developerów. Na platformie Udemy to jest podobno jedna z lepszych stron kursów, czyli ciągły kontakt z autorem, który odpowiada na pytania i rozwija kursy. Ale jak będzie, zależy oczywiście od uczestników, ja mam plan na kilka filmów mówiących o różnych aspektach pisania aplikacji na Android (np bardzo często pomijany, a ważny aspekt tego jak żyją aplikacje w całym ekosystemie Android).

podsumowanie finansowo-marketingowe listopada

Udemy

Plan marketingowy

Tutaj muszę przyznać się do pierwszego błędu. Tak naprawdę takowy nie istniał. Zaniedbałem nieco bloga (w konkursie #dajsiepoznac bardzo mocno się wypisałem). Więc miałem mało czytelników. Nie zrobiłem żadnych materiałów wprowadzających, ani niczego tak naprawdę przed powstaniem kursu. Moje wpisy to podsumowanie konkursu, oraz po czterech miesiącach, informacja o tym, że stworzyłem kurs. Tak bardzo skupiłem się na kursie, że całkowicie zapomniałem o tym aspekcie. Dlatego też wszystkie działania marketingowe zacząłem prowadzić dopiero po wydaniu kursu. Ogólnie po za częstymi statusami informującymi o nowych promocjach związanych z kursem, ogromną część roboty wykonała za mnie platforma Udemy. O koszcie tych działań będzie jeszcze poniżej w akapicie „Jak działa Udemy”. Więc cały mój plan działań przebiegał mniej więcej tak, na początek rozdałem kurs kilku znajomym, z których jedna osoba, Wiktor, faktycznie czekała na ten kurs. Wykonała go w 100% (widzę to w Udemy), oraz wystawiła mi bardzo pozytywną opinię. Następnie prowadziłem prelekcję dotyczącą automatyzacji w Androidzie, gdzie również udostępniłem kilka kursów. Część z tych zniżek nie była w ogóle uruchomiona, więc później otrzymały je kolejne osoby. Kolejnym krokiem był wpis na blogu, o którym już wspominałem powyżej, oraz statusy na własnych profilach (te pojawiały się przypominając co jakiś czas o kursie). Przez kolejne kilka dni pojawiały się statusy na zaprzyjaźnionych związanych z programowaniem grupach, czyli:

Te grupy są ogólnie-programistyczne, brakuje na facebooku dobrej grupy skupionej na programowaniu Android. Może jest to jakaś nisza? Nie wiem, dlaczego takowa nigdy się nie przyjęła. Zasada udostępniania posta tutaj podobna, mianowicie udostępniałem kilka darmowych kursów, oraz dawałem link do zniżki. Wnioski z tego eksperymentu są dosyć ciekawe. Mianowicie dane które znajdują się w nawiasach oznaczają odpowiednio: liczbę wykorzystanych kuponów ze zniżką 100%, oraz liczbę kuponów ze zniżką do 35pln. Innymi słowy, wszystkie darmowe kursy się rozeszły (zresztą błyskawicznie), płatne z kolei nie były w ogóle użyte. Tutaj jednak ważna uwaga, to że ktoś nie skorzystał ze zniżki w poście, nie oznacza, że nie kupił w ogóle. Może wszedł na stronę, poczytał, spodobało mu się i zamówił korzystając z innej zniżki, lub bezpośrednio przez platformę? Tego nie wiem. Ciekawsze są jednak kolejne dane. Na 43 rozdane przeze kursy ze zniżką 100% zostało uruchomionych 12. Tutaj również ważna uwaga co do rozdanych kursów, napisałem w postach, coś w stylu, że jeżeli dana osoba nie ma aktualnie funduszy, albo jest jakiś inny problem z płatnością, to niech napisze PW, wtedy również udostępnię za darmo. Za analizy kodów wynika, że to właśnie osoby które napisały zrobiły tych kursów najwięcej. Więc może to jest dobry sposób na promocję kursu następnym razem? Jeszcze nie wiem, jeśli Ty masz jakiś pomysł, to śmiało zostaw go w komentarzu.

Jak działa Udemy?

A tak właściwie dla kogo ono jest? Kiedy zaczynałem i udostępniałem swoje pierwsze analizy znajomym, spotkałem się z opinią, że to trochę jak z bardzo popularnym ostatnio self-publishingiem. Albo ryzyko, wydajesz książkę sam i o wiele większy dochód, albo w wydawnictwie, gdzie dochód jest zdecydowanie mniejszy, ale nie ponosisz takiego ryzyka. A wydawnictwa tak właściwie nic nie dają. W moim przypadku Udemy dało naprawdę bardzo dużo. Najlepiej świadczy o tym fakt, że na 82 sprzedane, 6 było kupionych z moimi zniżkami. Za to dochód z tych zniżek wyniósł 36.25$. Działa to tak:

  • jeśli ktoś kupi z Twojego kodu, to Twój dochód wynosi 97%
  • jeżeli ktoś wyszuka kurs na platformie i zakupi w ten sposób to dzielimy się z Udemy po 50%
  • jeżeli z programu reklamowego, albo afiliacji to 25%
Udemy - podsumowanie finansowo-marketingowe listopada

Szczegóły dotyczące zarobków

Istnieją też opcje, gdzie nie pozwalamy Udemy na żadne zniżki, ani na żadne promocje, ale myślałem trochę o tym i nawet na wyrobionej dużej marce osobistej, to może nie być najlepsza decyzja. Ponieważ wszystkie kursy w okół o często zbliżonej tematyce mają ceny na poziomie 50 pln, a nasz jedyny kosztuje tam powiedzmy 600 pln. Udemy akurat miało mega wyprzedaż (która trochę kanibalizowała moje zniżki, ponieważ przez 2 tygodnie wszystkie kursy były po 35 pln z powodu black friday, cyber monday, etc..), ale dzięki tej wyprzedaży do grona uczestników przybyło 76 osób. A jaki był procent postępów osób które kupiły kurs? Tak naprawdę – nie wiem. Udemy pozwala na wygenerowanie raportu finansowego, ale nie dołącza do niego kto jaki procent kursu ukończył. Aby zdobyć takie dane trzeba przeszukiwać interfejs po nazwie użytkownika i wtedy podejrzeć. Wydaje mi się, że to nie przypadek i że Udemy może mieć w tym miejscu statystyki bardzo podobne do Steama i jego procenta nie uruchomionych gier. Taki mały pro-tip na koniec, jeśli widzisz jakiś kurs którego potrzebujesz i aktualnie kosztuje dużo, to napisz do autora. Dla niego najbardziej opłacalne będzie odesłanie Ci kodu zniżkowego (który może zrobić na 35pln i więcej, albo na 0 pln) i wtedy obydwoje zyskacie najwięcej.

Podsumowując

Nie wiedziałem, że sprzedaż jest taka trudna.. Piszę to całkiem poważnie, do tej pory po prostu udostępniałem swoje materiały i cieszyłem, kiedy 1000 osób spędziło na stronie 2 minuty. Teraz kiedy ludzie zaczęli głosować portfelem (mam firmę od 10 listopada, czyli ledwo ponad miesiąc) zupełnie inaczej na to patrzę. Nie mniej, cieszę się, że wydałem ten kurs, dochód ze sprzedaży też jest całkiem przyjemny, pomimo tak wielu błędów które zrobiłem, wkrótce pewnie wydam następny kurs. Ale o tym już na 100% będzie napisane dużo wcześniej 🙂

Praktyczny podstawowy kurs Android – menu, dialog, ikona

Jak pisałem poprzednim razem, stworzyłem kurs programowania na Android, na platformę Udemy. Ten wpis, jest drobnym rozwinięciem tego kursu, o informacje jak tworzyć podstawowe AlertDialog-i, edytować menu i zmienić je w menu składające się z ikon. Kilka wpisów tego typu – czyli wprost o tworzeniu aplikacji na Androida, może się zdarzyć, ale nie będą to jedyne tematy, które będą się pojawiały na tym blogu. Posiadanie kursu nie jest niezbędne, do zrozumienia tego o czym tutaj piszę (będę odnosił się do istniejącego kodu źródłowego), ale dalej zachęcam do kupna, najlepiej z tego kodu: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS w cenie promocyjnej. To tyle tytułem wstępu, zapraszam do artykułu!

Dialog

A właściwie AlertDialog, pod taką nazwą ukrywa się po prostu – wyskakujące okienko. Implementacja w moim przypadku wygląda następująco:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.dialog_message)
                    .setTitle(R.string.dialog_title)
                    .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.dismiss();
                        }
                    });
            AlertDialog dialog = builder.create();
            dialog.show();

Krótko ją omawiając, AlertDialog tworzymy korzystając z wzorca projektowego – builder. Wzorzec ten umożliwia stworzenie obiektu, poprzez ustawianie kolejnych właściwości obiektu, a następnie przez wywołanie metody create (w tym przypadku, metoda ta najczęściej nazywa się build). W ramach właściwości dodaje się też przyciski (positive, neutral, negative), a także interfejs onClick, który jako parametr przyjmuje gotowy obiekt. W naszym przypadku, po kliknięciu ok, ukrywamy okno (metoda dismiss). Po zakończeniu tworzenia obiektu bardzo ważne jest, aby wywołać metodę show. Cały ten blok kodu jest podpięty pod menu kontekstowe (pierwotnie 3 kropki w prawym górnym rogu), które również się zmieniło.

menu dialog

Menu

W trakcie trwania kursu, chyba tylko raz wspomniałem o menu, pora trochę rozbudować te informacje. Menu tworzymy w plikach xml w folderze res/menu. Tam znajdują się domyślnie tworzone „menu per aktywność” (poniższy plik to menu_main.xml), tak wygląda ono obecnie:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="pl.digitalzombielab.udemyandroid.MainActivity">
    <item
        android:id="@+id/action_info"
        android:orderInCategory="100"
        android:icon="@drawable/ic_info_white_48dp"
        android:title="@string/action_info"
        app:showAsAction="always" />
</menu>

Co mamy tutaj interesującego:

  • orderInCategory – oznacza kolejność w jakiej mają być wyświetlane elementy, od lewej do prawej, lub od góry do dołu w zależności od tego jaki sposób wyświetlania wybraliśmy. Kolejność ta jest rosnąca, czyli najpierw wyświetliło by się 100, następnie 200 (gdybyśmy mieli taki parametr), etc.. Liczby te można oczywiście zamienić na 1, 2, 3…
  • icon – ikona, która została pobrana z tego serwisu, a następnie rozpakowana, można jej używać tak samo jak w aktywnościach (wspominałem o tym w kursie)
  • showAsAction – oznacza w jaki sposób powinien wyświetlać elementy naszego menu, dostępne możliwości to: [„ifRoom” | „never” | „withText” | „always” | „collapseActionView”]. Wybrany przeze „ifRoom” oznacza, wyświetlaj ikonę, kiedy na pasku znajduje się miejsce. Z racji tego, że mamy tylko jedną ikonę, miejsce znajdzie się zawsze, więc ikona zawsze się wyświetli (moglibyśmy użyć „always”). Poprzednio znajdował się tam parametr „never”, który oznaczał – zawsze zwijaj element do menu kontekstowego. Opis pozostałych elementów znajduje się tutaj.

To by było na tyle, jeśli chodzi o te dwa, podstawowe elementy interfejsu. Nie są skomplikowane, ale w kursie nie wspominałem o nich ani słowa, a że finalnie zostały użyte w aplikacji, chciałem coś o nich napisać. Po za tymi elementami w kodzie pojawiły się też minimalne zmiany kosmetyczne, można je podejrzeć w tym commicie. Oraz oczywiście została wydana aktualizacja, do wersji 1.1. Jeszcze raz zachęcam do kupna: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS i liczę na to, że niedługo na stronie z kursem przybędzie opinii. Na blogu też wkrótce pojawi się następny tekst.

Stworzyłem kurs na Udemy – Praktyczny podstawowy kurs Android

Dokładnie 4 miesiące, 2 tygodnie i 2 dni, lub po prostu 140 dni minęło od ostatniego wpisu.. Nie mam pojęcia, jak do tego doszło, chyba po prostu musiałem odpocząć po konkursie DSP..? Nie wiem, miałem też w tym czasie kilka innych projektów, oraz wydałem kurs na Udemy. Ale do tego dojdziemy, na początek: witajcie i zapraszam na wpis po tak długiej nieobecności! 😉

Projekty, projekty

Nie było mnie na blogu, ale po za tym nie próżnowałem (a przynajmniej, nie tak bardzo).. Z tytułu wakacji trochę odpocząłem, wyjechałem. Po powrocie zająłem się projektem, który w tym momencie jest zawieszony, ale była to implementacja aplikacji, która za backend wykorzystała by stworzony przez Michała Szafrańskiego plik budżetu. Frontendem miała być aplikacja Androidowa. Być może kiedyś do niego wrócę, nie wiem, na ten moment niestety musiałem z czegoś zrezygnować. Po za tym przygotowałem prelekcję w ramach wydarzenia Toast, ta nosiła tytuł: „Do more with Android” i w sumie pokazywała kilka przepisów jak zautomatyzowałem część swoich codziennych zadań. Osobiście byłem po niej zadowolony tak na pół (częściowo zjadł mnie stres, częściowo zbyt krótki czas ją przygotowywałem), ale pomimo tego, to po żadnej ze swoich poprzednich prezentacji, nie otrzymałem tyle pozytywnego feedbacku, co po tej. Stała się jeszcze jedna ważna rzecz, mianowicie otwarłem własną firmę. W ramach tej zamierzam trochę dorobić sobie do regularnej pensji (ponieważ dalej regularnie pracuję na etacie), mam kilka pomysłów, może co nie co monetyzacji bloga (dostęp do treści pozostanie darmowy, nie będę też blokował treści osobom korzystającym z adblocków – etc, mam inne pomysły). Prawdopodobnie będę starał się stworzyć i sprzedać własny produkt w Google Play Store. Dlatego całkiem możliwe, że będą się tu pojawiały analizy i moje pomysły jak to zrobić, pewnie nawet z wykresami finansowymi i czasowymi, co kosztowało ile mojego czasu i jak na tym wyszedłem, mam nadzieję, że takie materiały się spodobają. Stworzyłem też swój pierwszy kurs na Udemy…

Udemy

No właśnie, jak do tego doszło? Otóż jakiś czas temu odezwał się do mnie Michał – opiekun Udemy na Polskę. Zaproponował stworzenie kursu z ciekawą premią, o której więcej napiszę w podsumowaniu moich dochodów z Udemy w przyszłym miesiącu.. Zgodziłem się i w około 55 godzin wytężonej pracy nagrałem, zmontowałem i dostarczyłem swój pierwszy kurs na Udemy. Kurs ten nazywa się: „Praktyczny podstawowy kurs programowania na system operacyjny Android„. Trwa ponad 7 godzin, skierowany jest do osób które poznały javę i chcą pójść dalej, lub pracują w backendzie a potrzebują stworzyć prostego klienta Android. Plan kursu przedstawia się następująco:

  1. Informacje o kursie, oraz wprowadzenie do systemu Android
  2. Instalacja oraz konfiguracja Android Studio do działania z emulatorami, oraz urządzeniami fizycznymi
  3. Podstawowe elementy designu: button, editText, textView, checkbox, wprowadzenie praktyczne, oraz wykorzystanie biblioteki butterknife
  4. Obsługa pamięci w systemie Android, shared preferences, przekazywanie danych w intencji pomiędzy aktywnościami
  5. Omówienie layoutów, jak było, jak jest i dlaczego powinniśmy używać „constraint layout”, omówienie sposobu jego działania
  6. Aplikacja lista zakupów – od designu do implementacji, nauka korzystania z list, spinerów oraz adapterów w systemie Android
  7. Aplikacja do rysowania – implementacja, omówienie poszczególnych elementów
  8. Wątki w Androidzie, implementacja metodą AsyncTask
  9. Pobranie kodu źródłowego strony internetowej, oraz korzystanie z API (typu json-rest), automatyczne parsowanie wyników na automatycznie wygenerowany model
  10. Własny widok, oraz wykorzystanie go
  11. Dokończenie, podpisanie, oraz publikacja aplikacji w sklepie Play
  12. Poprawienie publikacji, zmiana pakietu w Android Studio

Nagrałem nawet filmik promocyjny:

I jak? Jeśli Ci się podoba, chcesz podszkolić się z Androida, to.. Przeczytaj jeszcze kilka zdań i kliknij w link 🙂 Kilka dni temu rozpoczęła się dwutygodniowa wyprzedaż, mam więc w związku z tym kilka ciekawych spostrzeżeń, mianowicie: kiedy kurs zostanie kupiony z mojego linka, to otrzymuję 97% od ceny sprzedaży, w innej sytuacji przychód jest o wiele niższy, w zależności od sytuacji. Będę to jeszcze rozgryzał, jak poprawić te wartości, ale tymczasem zapraszam do kupowania z mojego linka: https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS. Tutaj jest też kolejna ciekawostka, nie mogę ustawić kuponu poniżej ceny minimalnej 35pln, chyba, że oddam kurs za darmo. W tym miejscu chciałem też podziękować Wiktorowi, za moją pierwszą opinię na jego własnym blogu, nie spodziewałem się tak pozytywnej recenzji. Co do samego kursu jeszcze, to zauważyłem, że pojawili się duzi gracze na tym rynku (np videopoint). Aby być konkurencyjnym ze swojej strony mogę zapewnić, że będę aktywnie pomagał i odpowiadał na pytania, które pojawią się w trakcie kursu, chciałbym, żeby pojawiła się tam cała seria o Androidzie, ale jak będzie, zobaczymy. Być może powstanie tam małe centrum androidowego wsparcia, przekonamy się..

Podsumowując chciałem powiedzieć, że brakowało mi pisania. Bardzo nie chciało mi się zacząć, ale po napisaniu tego posta widzę, że siły wracają. Poprzednia edycja konkursu DSP bardzo mnie zmęczyła, ale już jestem z nowymi pomysłami i postami, które mam nadzieję, będą pojawiały się co poniedziałek rano.

Ps, link do Udemy, gdyby ktoś przeoczył:

https://www.udemy.com/praktyczny-podstawowy-kurs-programowania-android/?couponCode=BLOG_WPIS

Podsumowanie konkursu DSP i.. całego miesiąca.

Dzisiejszy wpis będzie.. o mnie. Tak wyszło, że ostatni miesiąc skłonił mnie od kilku refleksji, oraz w sumie, nie napisałem jeszcze podsumowania konkursu. Z którego wyniku osobiście nie jestem do końca zadowolony.. ale po kolei.

DSP

To był naprawdę bardzo fajny konkurs, poznałem wiele ciekawych osób, z częścią udało mi się spotkać osobiście w Warszawie, z częścią na pewno jeszcze niejednokrotnie się spotkam. Na arenie blogowej pojawiło się kilku bardzo ciekawych graczy, którzy dzielnie produkują coraz to lepsze teksty. W ramach konkursu stworzyłem grupę na facebooku (zapraszam, jeśli piszesz o IT, albo lubisz czytać o IT!) w której staram się, aby pojawiały się tylko treści od blogerów piszących o IT.

Jak pisałem poprzednio dostałem się do finału, po głosowaniu wewnętrznym byłem na 6 pozycji. Niestety po głosowaniu otwartym spadłem na pozycję numer 20.

Na wykresie jako „ja” oznaczony jest krzaq, który jest autorem wykresu (chytrze). Link do jego bloga: https://dsp.krzaq.cc/

Nie mniej dziękuję wszystkim, którzy na mnie głosowali! Dostałem łącznie 146 punktów, a to naprawdę coś 🙂 Chociaż moim celem było utrzymanie się w pierwszej 10, to mogłem rozegrać to trochę inaczej, np napisać jeszcze jakiś dobry tekst, w którym dodatkowo zachęcił bym do głosowania, teraz już wiem, że następnym razem muszę postąpić w taki sposób (zadziałał tak Mariusz Bugajski, co świetnie prezentuje się na wykresie). Nie mniej, jeszcze raz, dziękuję wszystkim za głosy! 😉

 

Prelekcje

Jestem zero-jedynkowy. Taki wniosek mnie naszedł po tym miesiącu. Albo robię coś na maksa, albo wcale. Nie umiem, nie potrafię inaczej. Planem na ten miesiąc, o czym wspominałem niedawno było odpocząć. Więc odpocząłem, do tego stopnia, że nie zrobiłem niczego co miałem zaplanowane 😉 Z wyjątkiem rzeczy które były w jakiś tam sposób wymuszone, poprzez zobowiązania wobec innych. Dlatego nadchodzący miesiąc będzie zdecydowanie miesiącem pracy, może nawet uda się poprawić design i zachowanie bloga? Chodzi o wyskakujące okienka, momentami wygląd, etc.. Nie mogę obiecać, że się uda, ale mam kilka spisanych uwag, którymi chciałbym się zająć. A także prawdopodobnie dojdzie zakładka „prelekcje” gdzie będzie można zobaczyć kalendarz, oraz tematy. Kilka nowych kołacze mi się w głowie i jest to zdecydowanie coś, czym chcę teraz się zająć.

Autor: Tomasz Mutter, podczas Toast Wrocław. https://web.facebook.com/toastwroclaw

Szkolenie

Możliwe, że dojdzie również zakładka „szkolenia”. Wszystko dlatego, że w sobotę 24.06 prowadziłem swoje pierwsze, całodniowe z programowania w javie. Mam jeszcze kilka pomysłów, trochę wiedzy no i muszę przyznać, że to mi się spodobało. Chociaż materiału było sporo, to wydaje mi się, że uczestnicy nie byli zawiedzeni. Jako dowód mogę pokazać kawałek ankiety.

Przez całą ankietę nie jest aż tak super różowo, ale zawsze, przeważają opinie pozytywne (3), od czasu do czasu pojawiają się neutralne (2).  Za całe wydarzenie odpowiedzialna była inicjatywa devWarsztaty, fajnie było wystąpić pod ich szyldem i coś pokazać, dziękuję za organizację i możliwość prezentacji.

DevPanel

Zakładka „DevPanel” się akurat nie pojawi, ponieważ jest już cała strona, o tu. W skrócie chodzi o to, że razem z Pawłem Klimczykiem, oraz Bartoszem Bonisławskim postanowiliśmy zorganizować pierwszy programistyczny panel dyskusyjny online. Aktualnie przerwa wakacyjna, ale wydaje się, że pomysł chwycił i budzi zainteresowanie. Postaramy się wykorzystać ten czas na aktualizacje logo, oraz wyglądu, poprawki techniczne, etc.. W czerwcu prowadziłem spotkanie z tego cyklu, jego zapis do obejrzenia znajduje się na YouTube, zapraszam!

Film na YouTube

To tyle jeśli chodzi o ten miesiąc, 24 godziny nabite w Tekken7 świadczą, że zdecydowanie udało mi się odpocząć. A może Ty masz jakieś uwagi dotyczące bloga? Napisz, podziel się, chętnie wysłucham opinii, może chciałbyś o czymś poczytać? Albo coś Cię denerwuje? Albo interesuje? Śmiało, komentarze to idealne miejsce do tego!

Finał konkursu DSP

Co za wspaniały dzień! 🙂 Budzę się rano, ogarniam, włączam kompa, a tam ekscytacja na kanale #dsp17. Maciek ogłosił listę wyników i jestem na 6 pozycji w gronie 25 osób które zakwalifikowały się do otwartej części głosowania! 🙂

Dla tych, którzy dopiero tutaj trafili – konkurs DSP był to programistyczny konkurs blogowy w którym wymaganiem były dwa posty tygodniowo, oraz prowadzenie projektu open-source. Z początkowej puli blisko 1000 ludzi IT zostało 179 które spełniły wszystkie wymogi konkursu, którzy głosując między sobą wybrali finałowe 25 osób.

Po pierwsze, chciałbym podziękować wszystkim którzy głosowali na mnie w zamkniętej części – tylko dla uczestników. To dzięki innym uczestnikom i ich głosom doszedłem tak wysoko 😉 DZIĘKUJĘ!

Po drugie, wrzucam linki do osób z tej listy:

Mateusz Kupilas: http://www.javadevmatt.pl/
Żaneta Jażdżyk: http://www.nettecode.com/
Mirosław Okoński: https://webmastah.pl
KrzaQ kq: https://dsp.krzaq.cc/
Michał Kortas: http://webroad.pl
Michał Gellert: https://www.michalgellert.pl/
Paulina Kaczmarek: http://paulinakaczmarek.wordpress.com
Rafał Hryniewski: http://hryniewski.net
Weronika Tobor: https://programmer-girl.com
Arkadiusz Benedykt: http://benedykt.net
Artur Dębkowski: http://ekhart.pl
Michał Chęciński: https://michalchecinski.pl/
Jakub Skałecki: http://rock-it.pl/
Piotr Wittchen: http://blog.wittchen.biz.pl/
Dawid Loranc:https://dloranc.github.io/
Michał Dymel: https://devblog.dymel.pl/
Marcin Lasak:http://blog.marlas.pl/
Mariusz Bugajski: http://blog.bugajsky.pl
Olga Stefaniuk: http://sowaprogramuje.pl
Marcin Kruszyński: http://marcinkruszynski.blogspot.com/
Mateusz Książek: http://devenv.pl/
Sabina Piotrowska:http://mysifoto.pl/
Maciej Gajdzica: http://ucgosu.pl/
Kamil Dąbrowski:https://www.namekdev.net
Szymon Motyka: http://szymonmotyka.pl/tag/dsp/

Wszystkie powyżej są godne czytania, niektóre są popularne bardziej, inne trochę mniej, ale polecam się zapoznać, nie zawiedziecie się!

Po trzecie, rozpoczęła się teraz druga tura, głosowanie otwarte, do którego zapraszam wszystkich! Ale nie jest tak, że wskazujecie jeden ulubiony blog i już, założenia są nie co inne, musicie przyznać minimum 2 głosy, a maksimum 3. Wszystkie informacje i możliwość głosowania dostępne są tutaj:

http://uczestnicy.dajsiepoznac.pl/ankieta

Na koniec chciałoby się powiedzieć głosuj na mnie! 😉 Pewnie, bardzo bym się cieszył, ale jeśli głosujesz oceń, czy naprawdę jestem warty tych punktów, czy może powyższa lista podsunie Ci kogoś kogo nie znałeś, a jego twórczość również Ci się bardzo spodoba? Zapraszam do głosowania, powyższa lista to aktualnie, zdecydowanie, jedne z najlepszych blogów IT w tej części internetu.

Podsumowanie konkursu – DSP#22

Udało się! Dotrwałem do końca konkursu, spełniłem podstawowe założenie. Jestem naprawdę szczęśliwy, że w tym repozytorium jest gotowa do użycia, opublikowana i ukończona biblioteka. Nie było łatwo, ale dla tego kawałka kodu: compile 'com.github.migellal:dayview:0.0.1′  było warto, a oto małe podsumowanie.

Założenia

Założeniami do biblioteki o których pisałem w drugim wpisie były:

użycie Kotlina, material design, miły dla oka design, prawdziwa dokumentacja (opis całego API, etc), prawdziwy open-source (z ładnym, pokazującym działanie biblioteki na gifach plikiem README), odrobina reklamy, chcę, żeby inni również z niej skorzystali

dobre testy, continous – co się da

Tych przekreślonych osiągnąć się niestety nie udało, nie mniej jestem bardzo dumny z tego co zostało napisane. A tak miała wyglądać pierwotna wersja biblioteki. Miała, ale spisałem wymagania i w ogóle do nich nie zajrzałem (powinienem był zaglądać). Dlatego z pamięci stworzyłem coś innego, co również jest ładne oraz na szczęście spełnia założenia.

Posty

W czasie trwania konkursu pisałem nie tylko o projekcie, założyłem sobie, że posty nieparzyste będą ogólniej o IT, a te parzyste o bibliotece (co działało prawie do samego końca końca projektu). Tak wygląda lista tematów które poruszyłem w ramach konkursu:

A tak komplet postów o tworzeniu biblioteki:

Plus oczywiście ten post, zachęcam oczywiście do odwiedzania linków z powyższej listy, starałem się, żeby było ciekawie i różnorodnie.

Daty

A tak prezentowały się daty publikacji poszczególnych postów w widoku kalendarza

Niebieski kolor oznacza dwa posty dziennie. I teraz konia z rzędem temu kto mi powie, czy to jest w 100% zgodne z regulaminem, na slacku co chwilę pojawia się dyskusja na ten temat. Licząc od piątku wychodzi 10 tygodni po dwa posty w każdym, ale..

Statystyki

Zgodnie z informacjami dostarczonymi mi przez toggl praca nad projektem zajęła mi ponad 80 godzin.

Z kolei liczba odwiedzin w czasie trwania konkursu przekroczyła 10 500

Za które serdecznie dziękuję 😉

Muszę szczerze dodać na koniec, że w tym roku było zdecydowanie trudniej. Miałem mniej czasu, dużo więcej obowiązków rodzinnych, oraz służbowych (więcej projektów również). Tym bardziej jestem szczęśliwy, że udało mi się dojść aż tutaj.

Co dalej?

Chwila przerwy 😉 Lojalnie też informuję, że w czerwcu tempo pisania nowych postów zdecydowanie spadnie – chcę trochę odpocząć od bloga, przeczytać kilka zaległych książek i ogólnie odpocząć, ostatnio miałem całe mnóstwo pracy nie tylko w związku z konkursem, ale również ogromem innych projektów. Ale nowe posty się pojawią, mam kilka fajnych draftów, oraz sporo spisanych pomysłów. Tylko nie mogę zaproponować żadnej daty, kiedy to będzie.

Stay tuned!

Publikacja biblioteki cz. 2 – DSP#21

W poprzedniej części tego wpisu wykonaliśmy sporo operacji w bibliotece, żeby umożliwić jej publikację, konfiguracyjne niemalże wszystko co było wymagane. Na ten moment zostało więc nam przygotowanie reszty, kliknięcie magicznego publikuj, oraz podzielenie się ze światem tym co udało mi się przez te kilka tygodni napisać. Zatem do dzieła!

Finalna konfiguracja

Finalnej konfiguracji niestety nie pokażę 🙂 Chodzi o to, że brakującymi elementami są hasła, użytkownicy, etc, czyli:

  • NEXUS_USERNAME , NEXUS_PASSWORD
  • signing.keyId, signing.password
  • signing.secretKeyRingFile
  • org.gradle.daemon=true

Dopisujemy te parametry w tym pliku. Po dopisaniu (i jeśli zadanie na na jirze zostało oznaczone jako rozwiązane, to istotne) wreszcie można kliknąć wyślij aplikację na serwer. Ale gdzie to kliknąć? Otóż jest to zadanie dla systemu Gradle.

Chodzi oczywiście o zadanie upload archives. Jeśli wszystko przebiegło poprawnie to znajdziemy naszą bibliotekę w tzw „stagingRepos”. Prawdopodobnie na samym dole.

Trzeba tam kliknąć przycisk „close”, poczekać trochę na wykonanie wszystkich operacji. A następnie, finalnie, przycisk „release”. Tutaj znajduje się kompletna dokumentacja do tych operacji. Po kliknięciu release należy poczekać kilka minut i jeśli wszystko przebiegło poprawnie, znajdziemy naszą bibliotekę np w serwisie gradle, please.

To oznacza, że udało mi się spełnić główne założenie konkursu, czyli opublikować bibliotekę. Wymagań względem siebie miałem o wiele więcej, ale i tak uważam to za spory sukces. Na podsumowania przyjdzie jeszcze czas (w następnym, ostatnim wpisie). Ostatnim punktem związanym z publikacjami jest aktualizacja statusu zgłoszenia i oznaczenie go, że biblioteka została już udostępniona w ramach maven central.

Publikacje

Do opublikowania zostało nam kilka rzeczy, między innymi aplikacja demo w klepie Play, aplikacja demo w repozytorium, a także wieńcząca projekt finalna publikacja linku do repozytorium w readme. Do tego oczywiście zgłoszenie biblioteki na stronie android-arsenal. Generujemy więc podpisaną aplikację, wrzucamy są do sklepu w kategorii: „Biblioteki oraz wersje demo”. Swoją drogą sklep Play przeszedł ostatnio mały redesign, doszło sporo nowych funkcji, wszystko jest zdecydowanie ładniejsze oraz bardziej przejrzyste.

No i stało, aplikacja została opublikowana w sklepie Play pod tym adresem, do tego można sobie pobrać to demko bezpośrednio z repo, a także oczywiście zapraszam wszystkich do używania biblioteki:

compile 'com.github.migellal:dayview:0.0.1′

Została również zgłoszona do android-arsenal i aktualnie oczekuje na akceptację.

Update:

Została opublikowana w Android-Arsenal, można ją podejrzeć tutaj.

To tyle, jeśli chodzi o bibliotekę, naprawdę jestem szczęśliwy, że finalnie udało mi się domknąć ten projekt 🙂 Przejście przez wszystkie procedury było złożone i czasem czasochłonne, ale fajnie, że już jest i każdy może z niej skorzystać. Pozostało nam jeszcze małe podsumowanie udziału w konkursie, na które zapraszam już w najbliższy czwartek od 8:00.

Publikacja biblioteki cz. 1 – DSP#20

Planowałem rozbić publikację aplikacji na dwa etapy, wrzucenie do jakiegoś repozytorium bibliotek, oraz aktualizacje pliku README, publikacja na stronie android-arsenal. Niestety nie można zrobić jednego bez drugiego, dlatego też podzielę wpis na dwie części, w pierwszej dodamy pliki umożliwiające publikację do biblioteki, dopiszemy README, wybierzemy repozytorium, oraz zgłosimy chęć dodania projektu. W drugiej wrzucimy aplikację do repo, sklepu, oraz na stronę android-arsenal.

Wybór hostingu biblioteki

Bardzo popularnym swego czasu repozytorium dla bibliotek androidowych była strona jitpack.io. Mi jednak zależało na tym, żeby maksymalnie uprościć korzystanie, jeśli użyłbym jitpacka dochodzi jeszcze jedna linia konfiguracyjna po stronie klienta, mianowicie:

    allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}

Dlatego wybrałem chyba najpopularniejsze repozytorium w świecie javowym: Maven central. O tym jak się do niego dostać w kolejnych akapitach.

Readme

Udało mi się również napisać dzisiaj readme, można je podziwiać tutaj. Mam nadzieję, że się podoba, chwilkę nad nim posiedziałem, to chyba mój pierwszy dokument tego typu w życiu. Skupiłem się na następujących punktach:

  • Overview
  • Screnshoots
  • Features
  • API
  • Examples
  • Download
  • License

Mam nadzieję, że uwzględniłem wszystko, ale jak coś, to komentarze są do dyspozycji.

Konfiguracja

Musiałem też wykonać trochę wstępnej konfiguracji, żeby móc opublikować bibliotekę. Listę zmian najlepiej obrazuje ten commit. Zmiany w plikach .kt są nieistotne z punktu widzenia sprawy. Jak widać, doszedł kolejny plik konfiguracyjny gradle.properties zawierający informacje o pomie. Podobnie znajduje się tam zupełnie nowy plik maven-push.gardle. W przypadku chęci opublikowania własnej biblioteki można stworzyć podobny komplet plików, zmieniając oczywiście adresy, nazwy, według własnych standardów.

Konfiguracja GPG

Chcąc wysłać swoją bibliotekę potrzebujemy skorzystać z GPG. Pierwszy raz zetknąłem się z tą technologią, niemniej nieoceniony okazał się program GPG4win. Bez potrzeby korzystania z linii komend wygenerował mi niezbędny klucz, który następnie mogłem wysłać razem z biblioteką.

Zgłoszenie

Po wykonaniu tych kroków zgłosiłem gotowość biblioteki do publikacji na jirze, w tym miejscu. Proces wygląda tak, że zakładamy konto na Sonatype, zgłaszamy chęć wydania biblioteki, oni rozwiązują to zadanie i podsyłają instrukcję jak publikować. U mnie potrwało to zaledwie minut, zresztą wystarczy spojrzeć tutaj.

Na ten moment to tyle, w następnej, przedostatniej części opiszę pozostałe kroki które będą odpowiadały za publikację i odrobinę rozpropagowanie aplikacji w sieci.