I’ve recently seen a few articles about video streaming with raspberry pi using node.js streaming server and ffmpeg utility. It’s funny how easily you can create your own live video streaming with opensource tools and cheap mini-computer. But there are some problems with this approach. The highest resolution I was able to capture, encode and live stream was 160×120. It is too low to recognize people or plate numbers seen on the picture. There are also some network issues that make things...
Programowanie rozproszone 3400 dni, 9 godzin, 51 minut temu 204 źrodło rozwiń
Po ostatnim poście powinno być jasne dlaczego i kiedy warto używać CORS. Przedstawiony przykład pokazywał dwa kluczowe nagłówki: origin oraz Access-Control-Allow-Origin. W praktyce jednak, może zdarzyć się, że przeglądarka wyśle dodatkowy pakiet, tzw. “prefight”. Przeglądarki omijają ten etap, gdy następujące warunki sa spełnione:Zapytanie jest typu GET, HEAD lub POSTW nagłówku nie ma innych zapytań niż Accept, Accept-Language, Content-Language lub Content-TypeContent-Type ma wyłącznie wartości takie ja...
Programowanie rozproszone 3419 dni, 9 godzin, 41 minut temu 164 źrodło rozwiń
Bardzo często tworzymy osobne usługi, które dostarczają jakieś dane. Pisząc aplikacje ASP.NET Web nierzadko chcemy korzystać z zewnętrznych usług, zamiast hostować dane w tym samym projekcie. Niestety może to spowodować problemy, jeśli chcemy skonsumować usługę w JavaScript, a należy ona do innej domeny. Załóżmy, że mamy jakąś usługę REST. Dla testów posłużyłem się http://www.mocky.io. Polecam tą stronę, można generować tam własne “mocki”. Dla tego wpisu stworzyłem mock, który zwraca następującą treść ...
Programowanie rozproszone 3470 dni, 23 godziny, 36 minut temu 189 źrodło rozwiń
W poprzednim wpisie pokazałem jak korzystać z JSONP w JQuery. Wiemy, że usługa musi rozpoznawać parametr callback i zwrócić treść w odpowiedniej formie tzn. “callback(dane)”. Załóżmy, że mamy następujący kontroler...
Programowanie rozproszone 3470 dni, 23 godziny, 36 minut temu 115 źrodło rozwiń
W poprzednim poście wyjaśniłem na czym polega działanie wzorca i kiedy z niego korzystać. Dzisiaj przyszedł czas na implementację. Nie będziemy jednak pisać wszystkiego od początku, ponieważ jest to dość skomplikowane i prawidłowa implementacja zajęłaby sporo czasu...
Programowanie rozproszone 3497 dni, 22 godziny, 57 minut temu 168 źrodło rozwiń
Sporo ostatnio o SOA i mikroserwisach. Jednym z wyzwań podczas rozłupywania monolitu na serwisy jest wydajność. Wywołania in-memory są zastępowane np. HTTP lub innym zdalnym protokołem. Niesie to ze sobą kilka niedogodności m.in.: 1. Wydajność jest dużo mniejsza – serializacja, deserializacja, nawiązanie połączenia, transmisja danych. 2. Serwis może być nieaktywny. 3. Może wystąpić timeout. Powyższe punkty mogą być wyjątkowo niebezpieczne, gdy wiele usług próbuje wywołać serwisy, które aktualnie nie...
Programowanie rozproszone 3497 dni, 22 godziny, 57 minut temu 333 źrodło rozwiń
Ostatnio na blogu sporo o SOA. W poprzednim wpisie, poruszyłem temat kompatybilności, teraz czas na coś, co ma na celu zminimalizowanie ilości różnych wersji usług. Najprostszym sposobem na uniknięcie problemów z kompatybilnością jest po prostu nie wprowadzenie niekompatybilnych zmian. Consumer-driven contracts to prosty sposób, aby mieć pod kontrolą śledzenie zmian oraz ich wpływ na konsumentów naszej usługi. Zwykle usługi posiadają pewien schemat (schema) czyli po prostu kontrakt. Najbardziej restry...
Programowanie rozproszone 3504 dni, 9 godzin, 8 minut temu 94 źrodło rozwiń
Kompatybilność usług jest problemem w każdej architekturze SOA, ale w przypadku mikro-usług staje się jeszcze bardziej widoczna. W przyszłości chce napisać post o tzw. consumer-driven contracts, które znacząco mogą zminimalizować potrzebę wersjonowania usług. W każdym razie, bardzo prawdopodobne, że w pewnym momencie zajdzie potrzeba wprowadzenia zmiany, która nie jest kompatybilna wstecz. Jeśli nasz system składa się np. z 20 usług to musimy mieć mechanizm, który zagwarantuje nam, że nie wprowadzimy zm...
Programowanie rozproszone 3510 dni, 19 godzin, 29 minut temu 211 źrodło rozwiń
Akka.NET simple example with Github Api Posted on by Michal Franc In this post I want to a simple introduction to Akka.NET using an example app based on Github api. I have been diving into Akka .NET lately. My first encounter with this technology was on Vaughn Vernon workshop in Krakow. The main event had couple of side presentation and one of them was about Akka project in Java world. It was a magic to me. Couple years later, I accidentally found ( probably on twitter ) Bartosz Sypytkowski blog and ...
Programowanie rozproszone 3516 dni, 11 godzin, 40 minut temu 162 źrodło rozwiń
Martin Fowler, kilka lat temu pisał o tzw. Richardson maturity model, którego autorem jest tak naprawdę Leonard Richardson. Groźnie brzmiąca nazwa, jak zwykle nie opisuje nic bardzo skomplikowanego. Nie mniej jednak, model ten doskonale opisuje założenia usług RESTful. W zasadzie nie ma framework’ów, które wymuszałyby poprawną implementację REST, stąd niezbędne jest zrozumienie jakie są założenia tych usług. Programiści zbyt często luźno interpretują pojęcie REST. Moim zdaniem, w momencie, gdy REST wchod...
Programowanie rozproszone 3524 dni, 21 godzin, 30 minut temu 530 źrodło rozwiń
Hi, today I would like to share with you idea of right parallel execution of actions/methods. Imagine at the beginning that you have queue of messages and even some number of threads that in parallel get messages from queue and then there are doing background work. Now if that messages executes actions on relational database you will quickly find out that some of your work is done right, but b...
Programowanie rozproszone 3559 dni, 4 godziny, 47 minut temu 158 źrodło rozwiń
Hadoop w .NET, czyli "word count" w wykonaniu F#, Hortonworks Data Platform i mono.
Programowanie rozproszone 3584 dni, 19 godzin, 26 minut temu 143 źrodło rozwiń
Akka.NET is a .NET port of famous actor model programming framework Akka, well known for the JVM community. This blog post discuss how in few lines of code we can distribute our computations by deploying actors on the remote machines. And all of that using F# functional API.
Programowanie rozproszone 3653 dni, 9 godzin, 26 minut temu 101 źrodło rozwiń
This post is a part of preparation for 70-483 exam. Information written down here refers to the part Manage program flow. Last time I wrote about the Thread class which allows you to run the code concurrently. Today I will show an another part of the System.Threading namespace, the ThreadPool class.
Programowanie rozproszone 3920 dni, 3 godziny, 44 minuty temu 53 źrodło rozwiń
This post is a part of preparation for 70-483 exam. Information written down here are related with the part Manage program flow. .NET framework provides several mechanisms to write concurrency, parallel and asynchronous code. They all are included in System.Threading namespace. This namespace contains types that allow creating multithreaded applications. Today’s post is about the Thread class.
Programowanie rozproszone 3924 dni, 18 godzin, 47 minut temu 46 źrodło rozwiń
This post is a part of preparation for 70-483 exam. Information written down here are related with the part Manage program flow. First of all I decided to explain the differences between concepts which come along with a phrase multithreading...
Programowanie rozproszone 3925 dni, 5 godzin, 51 minut temu 103 źrodło rozwiń
Dzisiaj kilka rozważań na temat korzyści płynących z wielowątkowości. Zastanówmy się, jak bardzo może nam pomóc albo zaszkodzić wprowadzenie nowych wątków w aplikacji. Jeśli wykonanie danej pracy na jednym procesorze zajmuje T(1) a wykonanie jej na n procesorach zajmuje T(n) wtedy możemy oszacować korzyści płynące z nowych wątków. W przypadku gdy T(1)/T(n) daje wynik < n. oznacza to, że gdy praca na jednym rdzeniu zajęła 5 sekund, wtedy na 5 rdzeniach zajmie np. 1.2 sekundy. czyli wydajność ma chara...
Programowanie rozproszone 4036 dni, 22 godziny, 50 minut temu 195 źrodło rozwiń
by Marcin Borecki Dzisiaj artykuł z serii poważnych– choć po przeczytaniu części tekstu mogło by się wydawać, że żartuję to chciałbym położyć nacisk na to by wszyscy zrozumieli jak działają dyski podłączone automatycznie do maszyny wirtualnej. Chciałbym dzisiaj zainspirować wszystkich do czytania tego bloga, albo chociaż do przeczytania dokumentacji w Windows Azure do komponentów, których zamierzacie używać. W ramach usługi Windows Azure możemy założyć maszyny wirtualne zarówno z systemem Linux jak I W...
Programowanie rozproszone 4082 dni, 3 godziny, 8 minut temu 139 źrodło rozwiń
Dzisiaj zajmiemy się kolejnym wzorcem przeznaczonym dla środowiska wielowątkowego. W dokumentacji\artykułach możemy go spotkać pod nazwą “condition pattern”. Załóżmy, że jeden wątek musi sprawdzić pewien warunek aby móc wykonać jakąś pracę. Innymi słowy, mamy współdzielony zestaw zmiennych, modyfikowanych przez różne wątki. Jeden z wątków może wykonać swój kod wyłącznie, gdy te współdzielone zmienne spełnią jakiś warunek. W jaki sposób moglibyśmy podejść do problemu? Najprostszym rozwiązaniem byłaby pęt...
Programowanie rozproszone 4210 dni, 1 godzinę, 22 minuty temu 168 źrodło rozwiń
W ostatnim poście zajęliśmy się wprowadzeniem do TPL Dataflows. Użyliśmy ActionBlock do implementacji wzorca producent\konsument. Dzisiaj dołączymy kolejne bloki, aby pokazać na czym polega tworzenie współbieżnych algorytmów w TPL. ActionBlock przetwarzał wyłącznie dane – nie zwracał żadnego rezultatu. Innymi słowy, przyjmował parametry wejściowe ale zwracał wyłącznie void. TransformBlock implementuje zarówno ITargetBlock jak i ISourceBlock – stanowi również źródło danych. Rozważmy przykład:privatestati...
Programowanie rozproszone 4231 dni, 10 godzin, 53 minuty temu 65 źrodło rozwiń