Organizacja błędów aplikacji w środowisku produkcyjnym
Jako osoby odpowiedzialne za tworzenie oprogramowania powinniśmy dążyć do tego aby w naszym kodzie występowała jak najmniejsza ilość defektów. Czas i koszt ich naprawy rośnie wraz z tym jak późno je wykrywamy oraz jak wielkie zawiłości posiadamy w kodzie. Zdarza się, że są błędy których się nie poprawia, ponieważ koszt ich naprawy wielokrotnie przekracza wartość dodaną do aplikacji – uznając, że da się z tym żyć.
#devenv #technicalblog #blog
Dev:Cast – #23 Unit Tests – Dobre praktyki
Testy jednostkowe to temat, który nie raz poruszaliśmy podczas naszego podcastu. Wspominaliśmy o ich wartości, głównych zasadach ale także zachwalaliśmy technikę Test-driven development. Z naszych rozmów jednoznacznie wynika, że praca bez Unit Tests jest dla nas ciężka i tak na prawdę zwiększa ilość pracy…
Tym razem skupiliśmy się na definicji kilku dobrych praktyk wspomagających tworzenie testów jednostkowych. Takich testów, które dobrze weryfikują implementacje, zapewniają jakość oraz łatwo jest je utrzymywać.
#devenv #devcast #programowanie #dobrepraktyki #unittests #technicalblog
@Aventus: zależy co dla ciebie jest jednostką. U siebie odpalam cała aplikacje bez I/O podczas testów z zmockowana baza jako hashmape i mam efekt podobny do ciebie tylko szybszy. Odpowiednie formatowanie przez kontrolery itp ogarniam sobie osobnymi 'integracyknymi' testami odpalamymi rzadziej
Terraform wprowadzenie
Terraform to narzędzie służące do zarządzania infrastrukturą, pliki terraforma tworzone są w języku HCL (HashiCorp configuration language). Dzięki temu że zmiany w infrastrukturze są przechowywane jako kod, można je wersjonować, przeprowadzać code review lub też łatwo dzielić się z zespołem informacjami co dokładnie zostało zmienione.
#devenv #blog #technicalblog #terraform #devops
Siema, wracamy z kolejnym postem o #RUST. Tym razem na tapet bierzemy Moving Ownership. Zapraszamy! ;)
#Devenv #technicalblog #blog
Przez jakiś bug nie mogę zmodyfikować mojego postu, a wypadałoby dorzucić inną ważną informację: każda struktura w Ruście ma z góry określony, znany w trakcie kompilacji rozmiar (w odniesieniu do pierwszego cytowanego przeze mnie wyżej fragmentu). Typami odbiegającymi od tego są jedynie traity i slice'y (https://doc.rust-lang.org/nomicon/exotic-sizes.html).
Dzięki @Patryk27.
W Rust nie ma słówka kluczowego class, ale jakoś struktura, która implementuje traity lub własne funkcje jest dla mnie klasą. Reprezentuje dane wraz z zachowaniami.
Trait to jest deklaracja interfejsu podobna do tych z C# lub Javy, ale nie identyczna.
Miałem to rozdzielone, bo to o czym wspominasz czyli implementacja trait Copy opisana była poniżej. Podkreśliłem to bardziej.
Typy proste to prymitywy. Typy złożone to struktury.
Co macie na myśli poprzez wykorzystać dziedziczenie? Zmieniłem by było jasno wypisane, że chodzi o implementacje konkretnego traita a nie o całe zjawisko dziedziczenia.
W kolejnych częściach planuje opisać: Borrowing, wpływ mutowalności, slice. Nie chciałem naraz wprowadzać dużej ilości pojęć. Dodałem zdanie zapowiadające by czytelnik wiedział.
Rc, Arc, Mutex planuje wprowadzić dopiero w późniejszych częściach, bo to są mechanizmy skierowane na współbieżność.
Dzięki za feedback i pomoc :)
Rust – Ownership – Po co nam ta własność?
Ownership jest głównym mechanizmem języka Rust, który umożliwia uzyskanie gwrancji bezpieczeństwa pamieci już na etapie kompilacji. Co jest w nim takiego unikalnego? Jak może nam pomóc w codziennej pracy programisty? Co nam tak naprawdę gwarantuje?
#devenv #blog #technicalblog #rust
Dzięki za pomoc i uwagi
@cerrato: niezamierzona literówka.
@Patryk27: Faktycznie chodziło mi o typ :) Faktycznie użycie stwierdzenia "własny" jest niefortunne, bardziej odpowiednie byłoby unikalny.
Co do stwierdzenia "nie zwalnia programisty z konieczności posprzątania" bardziej chodziło mi o dobrą praktykę i fakt, że może dojść do sytuacji wycieku pamięci w tych językach. Zbytnie uproszczenie. Przeformatuje to.
Ze względu na charakter tekstu nie chciałem odnosić się do usingów, Disposable oraz unsafe. GC w większości przypadków w końcu się aktywuje lub mu w tym pomożemy robiąc to ręcznie lub skończy się pamięć :)
W Ruście faktycznie występuje mechanizm bazujący na zliczaniu odwołań. Nie chciałem wrzuczać tego do wora GC znanego mi z C# i Javy.
@Dregorio: Niestety to jest wstęp za tydzień wrzucę drugą część z kilku. Ownership okazał się bardziej złożonym tematem, na więcej niż jeden artykuł.
Dev:Cast – #19 Dlaczego (nie?)powinno się robić wdrożenia w piątek popołudniu?
Jest piątek, wybija godzina 15:00. Pozostała zaledwie godzina do końca pracy. Do Twojego zespołu dociera informacja, że koniecznie teraz musicie wdrożyć na produkcję zmiany, które w ostatnim czasie wprowadziliście. Wdrożenia w piątek = istny koszmar?
Zapraszamy do odsłuchu naszego podcastu, w którym tym razem poruszamy temat wdrożeń na produkcję.
#devenv #devcast #technicalblog #blog #deployment
Aventus@danek: pierwsze słyszę o takiej idei testów jednostkowych. No ale nie będę się czepiał szczegółów, domyślam się o co Ci chodzi. Natomiast nie wierzę w to że przy bardziej rozbudowanej logice wszystkie testy jednostkowe wykonują się w 1-2 sekundy. Faktycznie, testy które opisałem są wolniejsze, ale nieznacznie. To nie są pełnoprawne testy integracyjne a kompromis- coś za coś. Ponadto, jestem przekonany że znacznie zaoszczędza się na czasie przy pisaniu nowych testów, ponieważ nie muszę się rozdrabniać dla każdej nowo napisanej "jednostki". Jeśli nowa funkcjonalność jest w ramach już istniejącej, pokrytej testami to w ogóle nie ma potrzeby na pisanie nowych testów.