Miesiąc: Październik 2019

Junior, Regular, Senior… i co dalej?

Problem sufitu

W pewnym momencie mojej kariery na stanowisku programisty stanąłem przed dylematem „co dalej?”. Z piętnastoletnim doświadczeniem zawodowym, masą ukończonych projektów, zadowolonych klientów, sporą siecią kontaktów i całkiem niezłą renomą wśród współpracowników poczułem że dotarłem do „sufitu” czyli tam gdzie wyżej się już nie da pójść.

Z jednej strony chciałem nadal zajmować się programowaniem, architekturą systemów, rozwiązywaniem problemów, z drugiej jednak odczułem już lekkie zmęczenie patrzeniem się w IDE oraz konsolę przez cały dzień mojej pracy, postanowiłem więc rozejrzeć się za czymś co pozwoli mi być nadal blisko programowania, ale może trochę więcej pracować w inny sposób, z ludźmi. Po kilku rozmowach z moją Business Manager oraz po jej rozmowach z innymi osobami na szczeblu menadżerskim doszliśmy do wniosku, że to czego szukam to rola Team Leadera.

(więcej…)

PHPUnit – testowanie aplikacji używającej zewnętrznego API

Załóżmy że mamy napisaną lub dopiero piszemy aplikację w PHP, która używa zewnętrznego API i z zwraca dane poprzez swoje własne API, czyli jest pośrednikiem.

Chcemy napisać testy naszych endpointów tak, żeby nie wykonywać zapytań do zewnętrznego API w czasie testów.

Jeden z naszych endpointów zwraca informacje o produkcie, jego adres to GET /product/{id}.

Nasz test mógłby wyglądać tak:

public function test_it_should_return_product()
{
    $response = $this->get('/products/' . $this->faker->randomNumber());
    $response->assertStatus(200);

    $response->assertJsonStructure([
        "id", "name", "price"
    ]);
}

W naszym kontrolerze używamy interfejsu ProductInterface który jest implementowany przez klasę ProductRepository, a ta z kolei używa klasy ProductProxy do wykonania zapytania do API. Klasas ProductProxy dziedziczy ogólną klasę BaseProxy, która zawiera metodę sendRequest(), to właśnie ta metoda odpowiada za wszelkie requesty HTTP do zewnętrznego API. Na początek więc zróbmy mock tej metody, aby upewnić się, że żaden z naszych testów nie wykona prawdziwego zapytania do zewnętrznego API.

(więcej…)

Jak stworzyć film z audio i obrazka przy pomocy ffmpeg (linux/ffmpeg)

Załóżmy, że chcemy wrzucić na YouTube plik muzyczny z obrazkiem.

Mamy plik wave z muzyką dobrej jakości i nie chcemy go przepuszczać przez żaden enkoder przy renderowaniu filmu. Z pomocą przychodzi ffmpeg, w moim przykładzie używam go pod linuksem.

Plik z muzyką nazwałem test.wav, plik z obrazkiem test.jpg, aby wygenerować film wystarczy wykonać polecenie:

ffmpeg -loop 1 -y -i test.jpg -i test.wav -shortest -acodec copy -vcodec libx264 -pix_fmt yuv420p output.mkv

Kolejność parametrów ma znaczenie!

Parmeter -acodec copy sprawi, że zawartość ścieżki dźwiękowej zostanie skopiowana z oryginału, bez transkodowania.
Parametr -shortest sprawia, że długość filmu będzie taka jak długość ścieżki audio. Istotne jest, żeby nie umieścić tego parametru przed plikiem .jpg, ponieważ plik z obrazkiem ma nieskończoną długość i nasz film będzie się renderował w nieskończoność.
Wybrałem format wyjściowy mkv, ponieważ dał on najlepsze rezultaty w kwestii jakości filmu.

Ważną rzeczą jest to, żeby plik z obrazkiem miał rozdzielczość podzielną przez 2, najlepiej żeby obrazek miał taki rozmiar jaki chcemy uzyskać w wyjściowym filmie, np. 3840×2160 dla 4k.