Monthly Archives: Listopad 2017

Jak zabezpieczyć środowisko programistyczne przed awarią

Prawdopodobnie każdemu z Was kiedyś przytrafiła się awaria dysku twardego, czy też kupno nowego komputera i odtworzenie środowiska programistycznego na innym komputerze kosztowało Was dużo pracy i czasu, a niektóre dobrze skonfigurowane programy już nigdy nie były tak wygodne jak wcześniej.

Był to dla mnie poważny problem, którego nie potrafiłem przez dłuższy czas rozwiązać i choć systemy backupowania potrafią już robić kopię całych partycji, było to dla mnie zbyt uciążliwe i wymagało mojej uwagi. Jednak po zakupie porządnego komputera do programowania zacząłem się znów interesować wirtualizacją i to podsunęło mi świetny pomysł, że po co mam pracować bezpośrednio na maszynie jak mogę pracować na maszynie wirtualnej.

I teraz pewnie odezwą się głosy, że tracę część mocy obliczeniowej na środowisko hypervisora, że łącząc się przez pulpit zdalny ze swoją maszyną wirtualną mam niewielkie lagi i utraty płynności wyświetlanego obrazu i nawet z tymi głosami mogę się zgodzić, ale takie rozwiązanie ma także wiele zalet.

A zaletą jest to, że gdy chcę zrobić backup maszyny wirtualnej, to mogę skorzystać z metody snapshotów (do której nie jestem przekonany) lub po prostu zatrzymać maszynę wirtualną na kilka minut i przekopiować pliki na dysk sieciowy. Czyli zapewniam sobie w ten sposób kopię całego środowiska ze wszystkimi programami, plikami i przeglądarkami, które potrzebuję i w razie potrzeby mogę szybko odtworzyć na innym komputerze maszynę wirtualną i dalej pracować. Dzięki czemu nie tracę czasu w przypadku poważnych problemów.

Kolejną zaletą jest oddzielenie środowiska developerskiego od środowiska prywatnego, bo jednak co by nie powiedzieć jestem trochę bałaganiarzem w trakcie pracy i mój pulpit szybko zapełnia się różnego rodzaju śmieciami, których nie chciałbym mieć na prywatnym komputerze. A w ten sposób mam jeden komputer, który jest jednocześnie prywatnym i firmowym.

Niektórzy korzystają z mechanizmu snapshotów czego ja akurat nie potrzebuję, ale widzę pewne plusy tego rozwiązania, takie jak możliwość cofnięcia się do punktu z przed zaśmiecenia systemu zbędnymi danymi. Jednak ja wyszedłem z założenia, że i tak jak będę chciał się cofnąć to po prostu załaduję odpowiedni backup, który jest kopią całościową a snapshoty są przyrostowe, czyli w przypadku kopiowania tylko kolejnych plików przyrostowych jest to mniej bezpieczna metoda.

Ewentualnie polecam również stworzenie sobie środowiska developerskiego w chmurze, ponieważ tam też mamy możliwość ustalenia backupów całościowych, kopiowania środowiska i mamy dostęp praktycznie wszędzie, ale jest to rozwiązanie niestety dosyć drogie. Nawet jeżeli zdecydujemy się włączać instancję tylko na czas pracy, to wychodzi około 200 zł miesięcznie, a to pozwala w ciągu roku kupić już jakiś w miarę dobry komputer do programowania.

Podsumowując: By dobrze zabezpieczyć się przed utratą danych, programów i konfiguracji warto pracować na wirtualnej maszynie. Skonfigurowanie i zainstalowanie systemu na środowisku wirtualnym chwilę trwa, jak każda instalacja systemu na nowym komputerze, ale po jakimś czasie bardzo możliwe że się zwróci w postaci łatwego przeniesienia środowiska na inny komputer.

5 błędów które popełniają młodzi programiści

Nikt nie jest idealny i zdaję sobie sprawę że nie można od nikogo tego wymagać, jednak mój wpis nie ma za zadanie wyśmiewać się z błędów młodych programistów tylko zwrócić uwagę na błędy, które popełniają. Jest to lista całkowicie subiektywna i prawdopodobnie nie zawiera 99% błędów popełnianych przez programistów, ale akurat z takimi sytuacjami się spotkałem i wiem że po poprawie tych błędów było już dużo lepiej.

  1. Nie używanie breakpointów i nie sprawdzanie wartości zmiennych – nie wiem czy to z lenistwa, czy niewiedzy zauważyłem że nowo zatrudnieni programiści nie używają breakpointów w trakcie pracy nad problematycznym kodem. Rozumiem że niektórych błędów się można domyślić, ale przejście wykonania kodu krok po kroku ułatwia zrozumienie co się dzieje, co oczywiście polecam.
  2. Nie szukanie rozwiązań problemów w internecie – tutaj prawdopodobnie jest to lenistwo, ponieważ łatwiej zapytać kolegę z pracy jak rozwiązać problem niż zacząć szukać na własną rękę, ale polecam jednak spróbować najpierw szukać w google i jeżeli w krótkim czasie nie znajdziesz problemu, spytać współpracownika. Każde pytanie zadane współpracownikowi wybija go z pracy, więc warto ograniczać to tylko do najważniejszych tematów.
  3. Nie proszenie o pomoc lub proszenie o pomoc zbyt częste – tutaj przewija się temat zbyt częstego zadania pytań z poprzedniego punktu, ale również dodałem element nie pytania w ogóle. Rozumiem, że czasami programista nie chce ujawnić swojej niewiedzy, ale wierzcie mi lub nie, niewiedza i tak wyjdzie prędzej czy później. Więc nie bój się pytać jeżeli nie masz już żadnego sensownego pomysłu na rozwiązanie problemu.
  4. Nie przewidywanie nietypowych warunków działania algorytmu – to jest notoryczny problem nowych programistów, ponieważ nie rozwiązali odpowiedniej ilości błędów i nie potrafią ich przewidzieć. Tutaj mogę doradzić tylko jedno, próbuj zepsuć działanie programu na wszelkie sposoby po napisaniu kodu, a jeżeli ktoś wytknął Ci błąd, to podpatrz jak on doszedł do tego że go popełniłeś.
  5. Nie szukanie rozwiązań problemu w projekcie – ten punkt trochę wynika również z nieznajomości projektu w którym się piszę kod. Ale nie można się tak tłumaczyć, ponieważ nawet jeżeli nie znamy projektu w 100% to możemy przynajmniej spróbować poszukać, czy w kodzie któregoś modułu nie ma jakiegoś kawałka kodu który przyda się podczas tworzenia kodu. Ważne jest żeby inni pracownicy również uważali na swój kod i pisali go możliwie uniwersalnie. Zasada jest taka: jeżeli masz napisać jakąś funkcję, która się przyda w wielu miejscach projektu to przemyśl lub zapytaj współpracownika gdzie taki kod powinien się znaleźć. W różnych firmach są różne podejścia i czasami w zależności od zastosowania kodu powinien on znaleźć się w określonym miejscu i w takim momencie musisz pytać bo sam możesz nie dojść do tego jak zrobić to dobrze.

A dla ludzi współpracujących z młodymi programistami polecam code review. Wiem że to brzmi jak strata czasu, ale tylko w ten sposób jesteście w stanie wcześnie wykryć złe nawyki programisty i nauczyć go tego co w waszej firmie jest pożądane.

Wyszukiwanie binarne [C#]

Wyszukiwanie binarne jest algorytmem opierającym się na metodzie dziel i zwyciężaj, który w czasie logarytmicznym stwierdza, czy szukany element znajduje się w uporządkowanej tablicy i jeśli się znajduje, podaje jego indeks. Algorytm, który napisałem korzysta z bibliotek dodatkowych (linq czy Collections.Generic), które są dostępne w C# a niekoniecznie będą dostępne w innych językach programowania, ale jeżeli chodzi o założenia algorytmu to jest on przepisywalny w łatwy sposób na C++ czy JAVA bo semantyka tych języków jest bardzo podobna.

Ważne: Działa on dla listy o wielkości większej niż 1. Nie wdrażałem tego zabezpieczenia z uwagi że generuję losowo listę o ilości elementów większej niż 1.


using System;
using System.Collections.Generic;
using System.Linq;

namespace Wyszukiwanie_binarne
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();

            // tworzę listę i wypełniam losowymi danymi
            List<int> listaLiczb = new List<int>();
            for (int i = 0; i < 100; i++) listaLiczb.Add(rand.Next(0, 1000));

            // czyszczę listę z powtórzonych wartości i sortuję
            listaLiczb = listaLiczb.Distinct().ToList();
            listaLiczb.Sort();

            Console.WriteLine("Liczby na liście:");
            Console.WriteLine(String.Join(",", listaLiczb));

            Console.WriteLine("Podaj liczbę której pozycję szukasz:");
            var szukanaLiczba = int.Parse(Console.ReadLine());

            Console.WriteLine("Poszukiwana liczba znajduje się na liście pod indexem: ");
            try
            {
                Console.Write(Szukaj(listaLiczb, szukanaLiczba));
            }
            catch (Exception)
            {
                Console.Write("Podana liczba nie znajduje się na liście!");
            }

            Console.ReadKey();
        }

        public static int Szukaj(List<int> przeszukiwanaLista, int szukanaLiczba)
        {
            // ilość elementów w liście
            var iloscElementow = przeszukiwanaLista.Count();

            // jeżeli ilość elementów wynosi jeden to znaczy że liczba nie została znaleziona
            if (iloscElementow == 1) throw new Exception("Podana liczba nie znajduje się na liście!");
            
            // wyliczenie połowy z ilości elementów
            var polowa = iloscElementow / 2;

            // wyciągnięcie z listy wartości środkowego elementu
            var srodkowyElement = przeszukiwanaLista[polowa];

            // jeżeli wartość środkowego elementu jest większa niż szukana liczba, to weź pierwszą połowę listy i przekaż do funkcji Szukaj()
            if (srodkowyElement > szukanaLiczba) return Szukaj(przeszukiwanaLista.Take(polowa).ToList(), szukanaLiczba);

            // jeżeli wartość środkowego elementu jest mniejsza niż szukana liczba, to weź drugą połowę listy i przekaż do funkcji Szukaj()
            else if (srodkowyElement < szukanaLiczba) return Szukaj(przeszukiwanaLista.Skip(polowa).ToList(), szukanaLiczba) + polowa; // tutaj dodajemy index połowy, poniważ znaleziona liczba będzie z drugiej połowy listy

            // Jeżeli jest równa co szukana liczba to zwróć index aktualnej połowy
            return polowa;
        }
    }
}


 

Zapobieganie pożarom – czyli jak lepiej tworzyć oprogramowanie z użyciem metodyki programowania zwinnego

Gdy zaczyna się pożar…

Najgorszym momentem podczas tworzenia oprogramowania jest chwila w której dowiadujemy się że końcowy produkt nie jest zgodny z oczekiwaniami klienta i prawdopodobnie czas doprowadzenia produktu do stanu oczekiwanego będzie dużo dłuższy niż zakładaliśmy.

Jak daleko trzeba się cofnąć jeżeli dopiero podczas testowania znajdziemy błąd analizy oczekiwań klienta źródło: Wikipedia.org

Zwykle nie jest to wina tylko jednej strony, ale wynika ze złożenia braku zrozumienia klienta, a z drugiej strony klient też nie do końca potrafi określić czego potrzebuje. Jednak zwykle wina pozostanie jednak po naszej stronie, ponieważ to my zgodziliśmy się na warunki klienta. Następnie trwa gaszenie pożaru, czyli łatanie oprogramowania lub kary umowne i utrata klienta, co nie jest zbyt optymistyczną perspektywą.

Jednak okazuje się że jest sposób na to żeby się uchronić przed niektórymi błędami. A sposobem na to jest metodyka programowania zwinnego (nie jest to panaceum na problemy ale na pewno pomoże). Oczywiście dla każdego to określenie może znaczyć co innego, ważne żeby jej fundamenty były oparte na wzajemnym sprawdzaniu się klienta i wykonawcy.

Samych metodyk zwinnych jest wiele i trzeba się zastanowić jaką chcemy wdrożyć i jak dużo chcemy z niej czerpać. Może nawet ktoś skusi się wykorzystać kilka pomysłów z jednej a kilka z innej i też może się to okazać poprawne, ważne żeby to robić z głową.

Jak się to u mnie robi?

  1. Projekt jest dzielony na sprinty, czyli okres czasu (1 do max 2 tygodnie) w którym zakładamy wykonanie zaplanowanych zadań,
  2. Każdego dnia odbywa się daily, na którym zespół zbiera się żeby wymienić się wykonaną pracą z poprzedniego dnia i przekazuje informację na temat aktualnych prac (punkt dla większego zespołu powyżej 3-4 osób i ważne jest żeby nie przekroczyć 15 – 20 min na takie spotkanie, ponieważ gdy jest dłużej to spada efektywność pracy w danym dniu),
  3. Ostatniego dnia każdego sprintu odbywa się demo, czyli prezentacja wykonanych zadań przed klientem (bardzo ważny punkt),
  4. Oraz ostatni punkt – planowanie zadań na następny sprint.

Oprócz sprintów określane są jeszcze kamienie milowe, czyli momenty w których ma zostać wdrożona jakaś większa funkcjonalność, przy czym ważne jest żeby każdy znał cel i datę w której powinien zostać osiągnięty.

Dlaczego demo w sprincie jest takie ważne? ponieważ jest to ten moment w którym klient dowiaduje się co w ciągu tego sprintu udało się nam zrobić i w jaki sposób to działa. Jeżeli się okaże że minęliśmy się z założeniami klienta lub zostały one źle sformułowane, to ostatecznie tracimy jedynie jeden sprint i możemy gasić malutki płomień zamiast wielomiesięcznego pożaru. Swoją drogą porównanie do pożaru jest bardzo dobre, ponieważ mały płomień zwykle da się ugasić i nie powinien poczynić wielkich strat, ale jeżeli stracimy nad nim panowanie lub nie będziemy wiedzieć że się rozprzestrzenia to może pochłonąć cały nasz dobytek, czyli projekt nad którym długo pracowaliśmy.

Ale pamiętaj że nie tylko demo jest ważne i w zasadzie te 4 (ewentualnie przy mniejszym zespole 3) punkty które napisałem to jest taki plan minimum, które warto wdrożyć, a ponieważ przeszedłem przez różne firmy i różne sposoby zarządzania projektem, mogę powiedzieć że ten sposób jest dla mnie najbardziej odpowiedni i daje pojęcie na temat tego ile pozostało jeszcze pracy.

Planowanie, jak to robić?

Nie jest to proste i przez pierwsze sprinty w których miałem sam szacować czas pracy na wykonanie określonych zadań wszystko mi się rozjechało i nie domknąłem sprintu. Dlatego dam Wam kilka pomysłów na to jak to robić trochę łatwiej.

  1. Wszystkie zadania jakie są do zrobienia w ramach projektu powinny zostać rozdzielone na moduły, grupy i kolejne mniejsze jednostki w zależności od złożoności projektu (lepiej zadanie na tydzień rozłożyć na dwa zadania po 2,5 dnia bo to już tak nie przeraża, a dodatkowo łatwiej jest oszacować czas) i umieszczone w pliku dostępnym dla całego zespołu,
  2. Jeżeli zadanie wydaje się zbyt ogólne, to rozpisz w kilku punktach co powinno zostać zrobione w takim zadaniu (łatwiej oszacować czas pisania małej funkcji niż dużego modułu),
  3. Wybierz i oszacuj czas wykonania zadań w sprincie a następnie w zespole skonsultuj czy oszacowany przez ciebie czas jest odpowiedni (być może ktoś podsunie ci pomysł jak to zadanie wykonać szybciej lub wyprowadzi cię z błędu i wyjaśni dlaczego w takim czasie się nie da tego zrobić),
  4. Staraj się nie przekraczać 2 godzin na planowanie, ponieważ wiem że w większości wypadków da się zaplanować pracę w zespole ok 5 osób w takim czasie, a ludzie i tak już będą coraz gorzej myśleć.

Nie rozumiem dlaczego mam to wdrażać, przecież to trwa tyle czasu

Na początku ja też tak myślałem i strasznie demotywowało mnie to że muszę znów oszacować swój czas (co szło mi słabo) i pewnie się nie wyrobię, a tracę czas na głupoty, które i tak mi nic nie dają. I tak było przez kilka sprintów, po czym nagle zacząłem mimowolnie wsiąkać w to. Okazało się po dłuższym czasie że nawet to zrozumiałem 🙂 a teraz nie mogę inaczej pracować. Okazuje się że teraz nie dość że potrafię zaplanować sobie sprint i z dużą dozą prawdopodobieństwa dobrze oszacować czas zadań (o ile nie będzie dużo wrzutek, czyli dodatkowych zadań, które trzeba zrobić w czasie sprintu) i coraz rzadziej zdarza mi się że przed deadline muszę się spinać i siedzieć po nocach. Właśnie idea programowania zwinnego również chroni przed tym, ponieważ na każdym małym etapie widzisz ile jeszcze zostało ci do końca projektu.

Taki pro-tip dla firm, które jeszcze nie wdrożyły metodyki zwinnej a chciałyby: jest wiele warsztatów i szkoleniowców, którzy przekonają i pokażą jak to robić dobrze. Ważne jest żeby zespół lub jego manager tego chciał bo po chwili męki będą z tego same korzyści.

Czy ta metodyka sprawdza się tylko w programowaniu?

Sądzę że nie, zwłaszcza że w coraz większej ilości firm jest ona wdrażane, tylko nikt jej tak nie nazywa. Wg. mnie każda praca twórcza powinna być dzielona na mniejsze kawałeczki dzięki czemu łatwiej to w jakiś sposób ogarnąć rozumem, a przecież nikt nie będzie mówił że tego się używa w programowaniu więc nie możesz używać gdzie indziej. W każdej firmie można znaleźć jakieś fajne pomysły, tylko warto sprawdzić czy są one dobre dla naszej firmy i jeżeli tak to się nie zniechęcać, bo gdybym się zniechęcił to nie poznałbym tak dobrego sposobu zarządzania projektem.

Konwersja z vmdk do Hyper-V (vhdx) – Problem „The entry is not a supported disk database entry” …

Podczas konwersji z formatu vmdk (VMware) do vhdx (Hyper-V)  za pomocą programu … dość często pojawia się problem „ConvertTo-MvmcVirtualHardDisk : The entry 00000000-0000-0000-0000-000000000000 is not a supported disk database entry for the descriptor…

Każdy plik vmdk posiada nagłówek, w którym zapisane są podstawowe informacje na temat obrazu dysku. Z jakiegoś powodu w dużej części obrazów owe dane są błędne. Nie badałem szczegółów wystąpienia tego błędu, ale udało mi się znaleźć rozwiązanie.

 

  1. Należy pobrać i rozpakować program dsfok. Służy on do rozpakowania deskryptora z obrazu do pliku tekstowego.
  2. W wierszu poleceń należy wpisać polecenie:
    dsfo.exe „D:\Ścieżka do pliku obrazu\disk1.vmdk” 512 1024 „D:\Ścieżka do pliku obrazu\descriptor.txt”
  3. Następnie można otworzyć descriptor.txt za pomocą dowolnego programu do edycji tekstu.
  4. Należy odnaleźć 5 linijek zaczynających się od poniższych tesktów i usunąć je:
    1. ddb.comment
    2. ddb.uuid.image
    3. ddb.uuid.modification
    4. ddb.uuid.parent
    5. ddb.uuid.parentmodification
  5. Następnie można zapisać deskryptor do pliku obrazu:
    dsfi.exe „D:\Ścieżka do pliku obrazu\disk1.vmdk” 512 1024 „D:\Ścieżka do pliku obrazu\descriptor.txt”
  6. Następnie można spróbować wykonać polecenie ConvertTo-MvmcVirtualHardDisk ponownie.

Problem powinien zniknąć i maszyna wirtualna powinna zostać pomyślnie przekonwertowana.

 

Co nowego u mnie?

Dawno nie pisałem niczego na bloga (ponad pół roku), a mam wrażenie że każdego miesiąca wchodzi tu coraz więcej osób, to chciałbym coś napisać do tych nowych osób, żeby mnie trochę zaczęli poznawać. Staram się nie poruszać prywatnych spraw, więc nie bójcie się nie będzie zbyt depresyjnie 😉

Trochę opowiadania …

Jakieś dwa lata temu (może nawet trochę więcej) miałem swoje pierwsze podejście do freelancingu, tzn. rzuciłem pracę w której dotychczas pracowałem i zacząłem szukać zleceń które mógłbym wykonywać na własną rękę. Pierwszy miesiąc był bardzo słaby, ponieważ głównie zajmowałem się poszukiwaniem zleceń a nie ich realizacją, a dzięki temu że wcześniej odłożyłem trochę pieniędzy to nie było źle. Później znalazłem kilka dobrych zleceń i projekt aplikacji webowej do obsługi firm księgowych który rozwijam do dzisiaj. Jednak pół roku później zrozumiałem, że nie jestem w stanie utrzymać się na dobrym poziomie z uwagi na to że realizowałem głównie małe projekty, które szybko się kończyły a znalezienie następnych trwało.

Tak więc postanowiłem zatrudnić się w firmie programistycznej poleconej przez znajomego, gdzie rzeczywiście mnie przyjęli i zacząłem pracę na 3/5 etatu, a w pozostałym czasie realizowałem projekty dla swoich klientów. Tak było przez około półtorej roku w którym miałem zarówno wzloty i upadki. Tzn. spotkałem 3 nieuczciwych kontrahentów, nie doprowadziłem do końca jednego projektu z uwagi na brak czasu, ale miałem też wiele świetnych realizacji, które dały mi sporo doświadczenia. Jednak tak jak wspomniałem, brakowało mi czasu.

Po dłuższym czasie intensywnej pracy zacząłem odczuwać że spada dokładność mojej pracy, ponieważ praktycznie cały czas jestem w pracy i niektóre rzeczy zacząłem robić z mniejszą chęcią. Być może się trochę zacząłem wypalać jako programista. Więc postanowiłem coś z tym zrobić. A coś oznaczało konkretnie ograniczenie ilości pobocznych projektów i skupienie się jedynie na najważniejszych i pozostawienie większej ilości wolnego czasu. Przecież muszę mieć też czas dla swojej dziewczyny czy na wypoczynek po pracy.

Nie chcę pisać że w tym momencie mam pewność że to działa, ale wydaje mi się że w ciągu ostatnich 3 miesięcy zacząłem mieć więcej czasu i rzadko zdarza mi się pracować po nocach a to duży skok w dobrą stronę 🙂

Odpoczynek jest bardzo ważny

Mam zasadę, którą niestety z przyczyn niezależnych w tym roku złamałem (czynnik losowy). A mianowicie każdego roku staram się gdzieś wyjechać na dłużej z moją drugą połówką. A na dłużej znaczy zwykle 2 tygodnie, co polecam każdemu, ponieważ w czasie tak długiego oderwania się od komputerów/programowania na prawdę można się zregenerować. Pewnie to sprawa indywidualna, ale dla mnie 2 tygodnie są na prawdę idealne. W tamtym roku byliśmy z Asią w Maroko, gdzie przez tydzień mieliśmy wycieczki po różnych pięknych miejscach, a kolejny tydzień byczyliśmy się na plaży i na własną rękę organizowaliśmy wyjazdy. Było na prawdę świetnie, a muszę się przyznać że już pod koniec wyjazdu miałem ogromną chęć programować. Taki reset jest ważny.

Nie mówić ciągle o pracy

Ktoś kto przejrzał tego bloga może myśleć że raczej w moim wypadku jest odwrotnie. Ale staram się to zmieniać. Kiedyś jarało mnie strasznie opowiadanie znajomym jakie ciekawe projekty robiłem, kiedy się nie widzieliśmy, ale widzę że już zaczynam zmieniać podejście. Pewnie są dwie przyczyny. Jedna taka, że już zacząłem się przyzwyczajać do tego co robię i staje się to niczym niezwykłym. A druga, to taka że zrozumiałem że nie każdego to interesuje 🙂 Jest tyle innych ciekawych tematów do rozmowy, że aż szkoda je tracić na gadanie o komputerach. To nie jest żadna rada, bo każdy ma różnych znajomych, różne podejście do życia, więc się nie wtrącam, ale w sumie cały ten wpis jest takim moim luźnym wyznaniem, więc o tym też piszę.

Założenie działalności i trochę rad

Jakiś czas temu założyłem działalność gospodarczą z uwagi na to że już nie miałem ubezpieczenia zdrowotnego z uwagi na skończone 26 lat, a druga sprawa że nie chciałem już robić wszystkiego na umowę o dzieło. To wyglądało czasami trochę niepoważnie, więc trzeba było się za to zabrać.

Generalnie sprawa jest mega prosta, ponieważ wszystko da się załatwić w jeden dzień i nie wymaga ogromnej wiedzy, choć warto wcześniej mieć już księgowego, ponieważ jest kilka błędów, które można popełnić. Ja zacząłem od wypełnienia formularza na CEIDG https://prod.ceidg.gov.pl/ceidg.cms.engine/ , w zasadzie wszystko co potrzeba można znaleźć na tej stronie. Dodatkowo podczas wypełniania formularza warto sugerować się jakąś firmą, która świadczy podobne usługi, ponieważ można od nich wziąć kody pkd. A warto najpierw wypełnić formularz online, ponieważ później przychodzi się do urzędu i tylko składa podpisy, bez żadnych większych problemów (u mnie wizyta w urzędzie trwała jakieś 20 min.)

Następnie trzeba się udać do ZUS, żeby złożyć wniosek o przyjęcie do ubezpieczenia. Jest tak że przy zakładaniu działalności informacje o założeniu trafiają do ZUS, ale jednak i tak trzeba osobiście zgłosić się do ubezpieczenia. To też trwało 20 min, ale trzeba było wypełnić dwustronnicowy formularz. Podpowiadam, weź 2 sztuki, bo łatwo się pomylić 🙂

(Dla chętnych*) Po tym udałem się do urzędu skarbowego, w celu złożenia deklaracji VAT, ponieważ chciałem zostać płatnikiem VAT. Tutaj temat jest dla chętnych, ponieważ jeżeli zaznaczyłeś we wniosku o założenie działalności że nie chcesz być płatnikiem to nie musisz. Generalnie opłaca się to bardzo, ale jest trochę więcej papierkowej roboty dla księgowego. Ja akurat chciałem więc się zgłosiłem. Polecam jednak zabrać ze sobą umowę wynajmu/własności nieruchomości/biura w którym działalność jest prowadzona, bo bez tego dokumentu nie da się złożyć tego wniosku. W moim wypadku wystarczyła umowa użyczenia nieruchomości, ponieważ rodzic(akurat ojciec jest właścicielem nieruchomości) nie musi w takiej sytuacji płacić podatku od tej umowy. Dodatkowo żeby nie płacić 180 zł w urzędzie skarbowym tylko zrobić to za darmo trzeba zaznaczyć na wniosku że nie potrzebujemy potwierdzenia złożenia deklaracji VAT (jeżeli dobrze pamiętam), z uwagi że teraz nie jest to potwierdzenie wymagane, a po co wydawać kasę bez sensu.

Podsumowując nie kosztowało mnie to ani złotówkę, a mam już wszystko załatwione i zarabiam więcej niż gdybym był na umowę o pracę. Jeżeli będzie taka potrzeba to mogę to dodatkowo wyjaśnić. Jakby coś to proście w komentarzu 🙂

Jakie plany na przyszłość?

Przede wszystkim pracować trochę mniej a skupić się na rzeczach ważniejszych. Mam też kilka fajnych pomysłów do zrealizowania tak „just for fun” bo ostatnio zacząłem znów mieć wenę, więc pewnie coś nowego się pojawi na Poradniku 🙂 Ogólnie chciałbym trochę przerobić poradnik, ponieważ taka forma strony mi trochę nie odpowiada. Na pewno muszę na nowo określić cele strony, przejrzeć artykuły i usunąć te które są już nieaktualne lub nie licują z moją wizją oraz stworzyć nowy design, który tym razem prawdopodobnie zlecę, ponieważ darmowe szablony mają wiele ograniczeń. (Tutaj jeszcze taka mała rada: jeżeli się nie znasz na czymś a nie zależy ci się tego nauczyć to zleć tego wykonanie, bo suma summarum stracisz więcej pieniędzy robiąc to samemu a efekt też nie będzie zadowalający)

Na pewno chciałbym żeby poradnik się rozwijał, dlatego też szukam ludzi do współpracy. Przez jakiś czas próbowałem namówić jedną firmę produkującą roboty do nauki programowania do wypożyczenia do testów i opisania na łamach poradnika, ale niestety bezskutecznie. Więc jeżeli macie jakieś pomysły na artykuły czy produkty do promowania to zapraszam, nie mogę wiele zaoferować poza sporą liczbą czytelników, którzy (wiem to z wcześniejszych współpracy) są chętni kupić produkt jeżeli jest warty kupienia. Jeżeli będzie to produkt warty zakupu to z pewnością będę chętny o nim napisać.

Także, do następnego 🙂