Maciej Aniserowicz's Blog, page 15
August 24, 2019
Dlaczego wydałem 5 000 PLN na własny event? [vlog #303]
The post Dlaczego wydałem 5 000 PLN na własny event? [vlog #303] appeared first on devstyle.pl.
August 23, 2019
Kolejny LEVEL w Twoim BIZNESIE (i życiu?) [vlog #302]
The post Kolejny LEVEL w Twoim BIZNESIE (i życiu?) [vlog #302] appeared first on devstyle.pl.
August 20, 2019
Miej wy*ebane, a będzie Ci dane [live vlog #301]
The post Miej wy*ebane, a będzie Ci dane [live vlog #301] appeared first on devstyle.pl.
August 19, 2019
Śmierć… Czego żałuję w życiu? [vlog #300]
The post Śmierć… Czego żałuję w życiu? [vlog #300] appeared first on devstyle.pl.
August 14, 2019
Mam POZWOLENIE na ZMIANY (nareszcie)! [vlog #299]
The post Mam POZWOLENIE na ZMIANY (nareszcie)! [vlog #299] appeared first on devstyle.pl.
August 13, 2019
Lipiec 2019. Tylko spokój może nas uratować. Podsumowanie i raport finansowy.
Na swoim (nieaktywnym już) profilu na Patronite obiecałem publikować co miesiąc “raport finansowy”. Dodatkowo zamieszczam podsumowanie tego, co działo się w imperium devstyle w ostatnim miesiącu. Pokazuję… wszystko. Bez tajemnic. Enjoy!
Lipiec 2019 to – jak każdy lipiec – wakacje. Więc dzisiejszy tekst – i liczby – tak bardzo “na spokojnie”. WOLMO.
Tydzień spędziliśmy w Danii, gdzie odwiedziliśmy Legoland. Bardzo chciałem pokazać go Córeczce. No to pokazałem :). I git.
Wystartował #slowbiz, tak na poważnie. I git. Spotkaliśmy się online (w sumie już 2x), a wkrótce spotykamy się też offline.
Na pełnej petardzie pracę rozpoczęła Magda, nasz najnowszy członek zespołu. Ruszyła z kopyta i działa tak zajebiście, że jesteśmy niezmiernie (i niezmiennie) wdzięczni losowi, że nam ją zesłał podczas rekrutacji :). Magda rewelacyjnie uzupełnia świetną Anię, która w ciągu ostatniego roku wielokrotnie już pojawiała się w moich materiałach. Bez niej teraz to wszystko by się chyba zawaliło ;).
Gr8 job, girlz!!
No a poza tym… luz, blues i wolmo.
A teraz, jak zwykle: kasa -> podsumowanie -> linki.
Raport finansowy: przychody
Założenia:
pieniądze (brutto) wpływające na konto w bieżącym miesiącu
usługa mogła być zrealizowana w innym terminie
Pozycje:
książka “Zawód: Programista”: 7 507,71 zł
Program “DNA: Droga Nowoczesnego Architekta”: 98 990,75 zł
afiliacja LeadPages: 325,22 zł
W sumie: 106 823,68 zł
Raport finansowy: wydatki
Założenia:
kwota brutto, znikająca z konta, bez uwzględnienia odliczeń od podatków
Pozycje (linki afiliacyjne):
ZUS: 1 500,53 zł
stały zespół: 5 817,30 zł
Ania (asystentka / PM)
Julita (księgowa)
Andrzej (montaż video)
Krzysiek (montaż audio)
Agnieszka (korekta tekstów)
Magda (slowbiz & gitmastery & copyrighting)
PIT-4: 190,00 zł
usługi prawnicze: 430,50 zł
DNA Droga Nowoczesnego Architekta:
zwroty: 1 299,00 zł
fundusz zwrotów: 98 990,75 zł
programowanie dodatkowych stron: 430,50 zł
próbne rysunki slajdów: 120,00 zł
biuro
czynsz: 554,03 zł
narzędzia i usługi
Obsługa Klienta (IMKER): 281,67 zł
LibSyn: 56,21 zł
Shoplo: 60,27 zł
obsługa płatności online (BlueMedia): 227,09 zł
telefon Orange: 50,00 zł
XMind Zen: 0 zł (opłacone do 09/2019)
MailTrack: 0 zł (opłacone do 05/2020)
Vimeo: 0 zł (opłacone do 10/2019)
ConvertKit: 0 zł (opłacone do 09/2019)
LeadPages: 0 zł (opłacone do 10/2019)
CoSchedule: 0 zł (opłacone do 09/2019)
Google Storage: 0 zł (opłacone do 11/2019)
DropBox: 0 zł (opłacone do 02/2020)
DropBox (dla Ani): 0 zł (opłacone do 06/2020)
infakt: 0 zł (opłacone do 01/2020)
wFirma: 0 zł (opłacone do 09/2019)
ToDoist: 0 zł (opłacone do 11/2019)
Headspace: 0 zł (anulowane)
Bonjoro: 95,21 zł
SleepCycle: 0 zł (opłacone do 06/2020)
ActiveCampaign: 1 198,86 zł (na slowbiz; 3 miesiące, opłacone do 09/2019)
Grammarly (dla Magdy): 227,71 zł (opłacone do 01/2020)
edukacja
kurs Google Analytics (x3): 900,00 zł
projekt gitmastery
koszulka Programistok PushPull: 69,00 zł
bluza Programistok GIT PULL: 133,00 zł
slowbiz
koszulka “Ja lubię WOLMO”: 45,00 zł
zdrowie
psychoterapia: 1 100,00 zł
marketing
reklama Facebook: 1 512,15 zł
reklama Google: 0 zł
domeny
antyhustle.pl: 12,18 zł
książki
Yvon Chouinard “Let My People Go Surfing”: 66,15 zł
Jordan B. Peterson “12 życiowych zasad”: 46,90 zł
Bishop Gary John “Unf*ck yourself. Napraw się!”: 27,99 zł
wsparcie 1 autora na Patronite: 16,00 zł
bilet na spotkanie MiroBurn Mafia: 65,00 zł
książka “Zawód: Programista” (obsługuje firma IMKER)
wysyłka: 1 963,08 zł
magazynowanie: 301,35 zł
samochód:
leasing: 1 774,56 zł
benzyna: 721,57 zł
parking: 101,90 zł
W sumie: 122 163,00 zł
Podsumowanie i plany
Kilkanaście tysi na minusie. Ale zdupy biznesmen! Jest oj jak bardzo bardzo źle! Niekoniecznie wbrew pozorom :).
W wakacje z założenia nie zarabiam, bo wakacje to czas na inne działania. Takie jak wyjazdy, relax i prace administracyjno-porządkowe.
Trwa teraz wiele ustaleń i rozmów na przyszłość. Pojawiają się pomysły. Wdrożyliśmy nowy szablon devstyle. Pracujemy nad poprawieniem kanału YT. Migrujemy z jednego sklepu do drugiego. Z płatności jednych do drugich. Docieramy się i szykujemy do jesieni. Jak jeżyki i wiewióreczki :).
No dobra, co ja plotę.
W sumie pod względem finansów to strasznie nudny miesiąc. Prawie cały przychód to nadal spływające płatności za przedsprzedaż DNA. I całość wpada na specjalny “fundusz potencjalnych zwrotów”. I tyle.
Moja książka “Zawód: Programista” sprzedała się lepiej niż zwykle (w sumie to bardzo dobrze nawet!): zrobiłem krótką akcję promocyjną, obniżając ceny pakietów o parę złotych.
A ciekawe wydatki? Będziemy się uczyć Google Analytics, więc zarówno sobie jak i Dziewczynom kupiłem kurs z tego tematu. U jego autora zamawiamy też audyt i wewnętrzne szkolenie, ale to jakoś jesienią. Kupiłem trochę ciuchów “byznesowych” (bluza i koszulka z GITem na potrzeby gitmastery, koszulkę z Kucami i WOLMO na potrzeby SLOWBIZ), ale to w sumie grosze. Kupiliśmy też trochę narzędzi: Grammarly, żeby angielskie teksty się Magdzie łatwiej pisało. I ActiveCampaign, coby je przetestować (i całkowicie odseparować mailingi devstyle od slowbiz).
I to tyle. Nudy.
Sierpień równie “biedny” względem finansowym (a nawet jeszcze bardziej!). I tak ma być. Wakacje!
ALE! Już wkrótce odbędzie się moja pierwsza “autorska” konferencja offline, w moim kochanym Białymstoku. #slowbiz rozwija skrzydła. Wygląda na to, że pojawi się ponad setka osób, i to z różnych miast. Fajnie! Ciebie też zapraszam, jeśli masz chęć się spotkać :). Oooo tutaj kliknąć można:
Pojawiają się też pytania o kolejne miasta. Fajnie, pomyślimy, zobaczymy!
Póki co – dzięki za wszystko :). Jest fajnie.
I cóż… dzięki wielkie za zainteresowanie i przemierzanie tych ciekawych, dzikich ścieżek wraz ze mną!
A żeby nie było tak słodko to:
A teraz:
Podsumowanie aktywności devstyle 07/2019
Jak wspomniałem wcześniej: wakacje w pełni! Więc i treści mało.
Bartek niestrudzenie kontynuuje swój cykl fajny o GO, a poza tym tylko kilka VLOGów i cisza :). I dobsz.
Teksty:
Czerwiec 2019. Idziemy w miliony. Podsumowanie i raport finansowy.
Golang #3 – funkcje, struktury oraz własne typy – Bartłomiej Klimczak
Podcasty (i inne audio):
[brak]
VLOGi:
KONKURENCJA w moim BIZNESIE [vlog #289]
Tylko JEDEN ROK [vlog #290]
SLOWBIZ. Czym to jest i czym będzie? [vlog #291]
Dlaczego JUŻ nie robię PLANÓW BIZNESOWYCH? (i co z tego wynika) [vlog #292]
Za WCZEŚNIE na WNIOSKI [vlog #293]
Ciemna strona INSPIRACJI! [vlog #294]
Malutki. Smutny. Przerażony. Ja. [vlog #295]
Trzy Niebezpieczne Cytaty Motywacyjne [vlog #296]
Video:
[brak]
Wyjazdy / konferencje:
[brak]
====
Dzięki za uwagę i pozdro!
P.S. Jak zwykle, jeśli masz jakiekolwiek pytania: nie wahaj się, tylko je zadawaj! Na co mogę, na to odpowiem :).
The post Lipiec 2019. Tylko spokój może nas uratować. Podsumowanie i raport finansowy. appeared first on devstyle.pl.
5 Cech Dobrego Przedsiębiorcy & Founders Mind [vlog #298]
The post 5 Cech Dobrego Przedsiębiorcy & Founders Mind [vlog #298] appeared first on devstyle.pl.
August 12, 2019
NAZARABIAŁ się, a teraz PIERD*LI! [vlog #297]
The post NAZARABIAŁ się, a teraz PIERD*LI! [vlog #297] appeared first on devstyle.pl.
July 23, 2019
Golang #3 – funkcje, struktury oraz własne typy
Przedstawiam trzeci odcinek tutoriala GO. Poprzednie znajdziesz pod tym linkiem!
Funkcje
Deklaracja funkcji zaczyna się od słowa kluczowego „func”, po którym występuje nazwa funkcji. Najczęściej. :) Są wyjątki od tej reguły, ale o tym za chwilę. Funkcja main() jest doskonałym przykładem funkcji, która nie przyjmuje żadnych parametrów oraz nic nie zwraca. Przyjrzyjmy się więc funkcji main() oraz funkcji, która zarówno zwraca wynik, jak i przyjmuje parametry wejściowe.
func favoriteNumber(i int) string {
return fmt.Sprintf("my favorite number is %d", i)
}
func main() {
fmt.Printf("Here is what the function returns: %s", favoriteNumber(13))
}
Jak widać, parametry wejściowe są podawane w nawiasach, natomiast typ zwracany jest umieszczony po owym nawiasie, przed klamrą otwierającą. Spójrzmy teraz na parametry.
To, co jest na wejściu funkcji
Kolejne parametry funkcji są wymieniane po przecinkach, tak jak pokazano poniżej.
func twoFavoriteNumbers(i int, j int) string {
return fmt.Sprintf("my favorite numbers are %d and %d", i, j)
}
I tutaj możemy skorzystać z ułatwienia: jeśli dwie zmienne (lub więcej) są tego samego typu oraz następują po sobie, to wystarczy podać typ tylko raz.
func favoriteNumbers(a1, a2, a3, a4, a5 int) string {
}
Jeśli podamy po nazwie, lecz przed typem zmiennej wielokropek ..., to otrzymamy tablicę elementów danego typu. Dokładniejsze omówienie map oraz tablic zostawmy sobie na później.
func favoriteNumbers(numbers... int) string {
return fmt.Sprintf("my favorite numbers are: % v", numbers)
}
func main() {
fmt.Printf("Here is what the function returns: %s\n", favoriteNumbers(7, 13))
fmt.Printf("Here is what the function returns: %s", favoriteNumbers(1,2,3,4,5,6,7,8))
}
Co możemy podać jako parametr funkcji? Praktycznie wszystko, nawet wskaźnik do innej funkcji. Możliwe, że brzmi to dziwnie, jednak czasami taką technikę się stosuje. Golang podczas kompilacji rozpozna, czy dana funkcja pasuje do deklaracji z funkcji `runAnotherFunction`, i jeśli definicje nie będą zgodne, to zgłosi błąd.
func runAnotherFunction(f func()string) string {
return fmt.Sprintf("the function returned: %s", f())
}
func hello()string {
return "Hello"
}
func world()string {
return "World!"
}
func anotherFunction(int i)string {
return "I do not fit:( "
}
func main() {
fmt.Println(runAnotherFunction(hello))
fmt.Println(runAnotherFunction(world))
//fmt.Println(runAnotherFunction(anotherFunction)) // won't compile
}
Omawiając parametry funkcji, należy powiedzieć o jeszcze jednej rzeczy. Otóż nie trzeba podawać nazwy parametru, lecz można zostawić tylko typ.
func funcWithoutNameInParams(string)string {
return "I have no idea how to get the parameter's value"
}
func main() {
fmt.Println(funcWithoutNameInParams("it does not matter"))
}
Korzysta się z tej możliwości, gdy – przykładowo – implementuje się interfejs, w którym nie wszystkie parametry są nam potrzebne. Nie otrzymujemy wtedy ostrzeżenia, że dana zmienna jest nieużywana.
Return, czyli to, co funkcja zwraca
Wartości zwracane w Go mają kilka ciekawych właściwości. Przede wszystkim może być ich więcej niż jedna. Rozdziela się je wtedy przecinkami oraz zamyka w nawiasach.
func multipleReturnValues() (int, string) {
return 4321, "I am second!"
}
func main() {
first, second := multipleReturnValues()
fmt.Printf("Hello, the multipleReturnValues() returned number %d and text '%s'", first, second)
}
Inną, nie wszędzie spotykaną cechą są tak zwane named return values, czyli nazwane wartości zwracane. Na początku wykonywania funkcji tworzone są zmienne o zdefiniowanych przez nas typach i nazwach, które możemy modyfikować. Dzięki temu na samym końcu nie musimy po słówku „return” podawać nic – funkcja zwróci właśnie te wartości jako wynik funkcji.
func namedReturnValues() (myDigit int, coolString string) {
myDigit = 123
coolString = "here I am!"
return
}
Oczywiście w takich wypadkach można po słówku „return” podać wprost to, co chcemy zwrócić, i wszystko zadziała, jak należy. W oficjalnym tourze znajdziemy informację, że powinno się używać tego mechanizmu tylko przy małych funkcjach. Zauważyłem jednak, że i w takich sytuacjach rzadko się korzysta z tej możliwości, ponieważ wiele osób uznaje ten sposób pisania funkcji za trochę mylący. Dlatego preferują (w tym również ja) podawanie explicit wartości zwracanych. Jak wszystko – ma to swoje plusy i minusy. Jeśli uważasz, że zwiększa to czytelność kodu – droga wolna!
Struktury
Składnię deklaracji struktury definiuje się podobnie jak w innych językach programowania. Krótko mówiąc – struktura jest to jakaś dana plus informacja o ewentualnym jej zachowaniu. Aby stworzyć strukturę, należy stworzyć nowy typ – strukturalny. Poniżej znajduje się przykład jednej z nich:
type Order struct {
ID int
User user.User
}
Pola w strukturze podaje się w klamrach, zaczynając od nazwy pola, po czym wskazuje się typ. Kropka jest operatorem (podobnie jak np. w Javie), który pozwala nam odwołać się do pól.
Nie zawsze mamy dostęp do wszystkich pól oraz metod w strukturze. Opowiem o tym więcej przy okazji pakietów oraz widoczności.
Nową instancję struktury tworzymy tak jak zwykłe zmienne, tylko że po nazwie struktury dodajemy klamry. W tych klamrach możemy (ale nie musimy) podać wartości dla naszej struktury. W przeciwnym wypadku zostaną one wypełnione wartościami domyślnymi (dla string będzie to pusty tekst, a dla wartości liczbowych – 0 i tak dalej).
Podajemy wartości pól analogicznie jak przy tworzeniu struktury – z tą różnicą, że zamiast typu wpisujemy interesującą nas wartość oraz oddzielamy nazwę pola od owej wartości dwukropkiem. Na końcu stawiamy zawsze przecinek.
order := Order{
ID: 123,
}
Nie musimy podawać wszystkich wartości oraz nie musimy tego robić w kolejności, w jakiej definiowaliśmy pola. Co ciekawe, jeśli będziemy podawać te wartości właśnie w takiej kolejności, to możemy pominąć typ.
order := Order{123}
Należy pamiętać, że musisz podać wszystkie pola dostępne w tej strukturze. Osobiście nie przepadam za tym rozwiązaniem, ale o gustach się nie dyskutuje. :)
Zachowanie (metodę) dodajemy do struktury oddzielnie, czyli poza opisem struktury.
Dla przykładu – klasa Order w Javie będzie wyglądać tak:
class Order {
int ID;
String firstName;
String LastName;
int getID() {
return this.ID;
}
}
natomiast w Go zapiszemy tak:
type Order struct {
ID int
firstName string
lastName string
}
func (o Order) GetID() int {
return o.ID
}
Konwencja jest następująca: na początku używamy słowa kluczowgo func, później w nawiasach podajemy obiekt naszej klasy, a następnie musimy podać funkcję, tak jak jest to opisane na początku tego artykułu.
func (o Order) FullName() int {
return o.firstName " " o.lastName
}
To by było na razie wszystko. Jeśli masz jakieś pytania – poniżej jest sekcja z komentarzami. :) Zamierzam nagrać tutorial (po polsku) o Go. Jeśli jesteś zainteresowany, to tutaj podaję link: Go wideotutorial. Widzimy się już wkrótce!
The post Golang #3 – funkcje, struktury oraz własne typy appeared first on devstyle.pl.
Trzy Niebezpieczne Cytaty Motywacyjne [vlog #296]
The post Trzy Niebezpieczne Cytaty Motywacyjne [vlog #296] appeared first on devstyle.pl.
Maciej Aniserowicz's Blog
- Maciej Aniserowicz's profile
- 22 followers
