Reactive Programming - hit czy kit ?

Reactive Programming - hit czy kit ?
0

Wedlug mnie na razie kolejny buzzword.

KR
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Gdynia
  • Postów:3
0
Wielki Mleczarz napisał(a):

Wedlug mnie na razie kolejny buzzword.

Od czasu jak Java 8 dostała elementy funkcyjne, od czasu jak pojawił się LinQ, od czasu jak Scala wyszła z podziemia akademisckiego, od czasu jak pojawia się big data (hadoop, spark) to już nie jest buzzword. To jest ewolucja wymagań stawianych przez biznes i czy się to komuś podoba, czy nie - trzeba iść do przodu :)

0
krx napisał(a):
Wielki Mleczarz napisał(a):

Wedlug mnie na razie kolejny buzzword.

Od czasu jak Java 8 dostała elementy funkcyjne, od czasu jak pojawił się LinQ, od czasu jak Scala wyszła z podziemia akademisckiego, od czasu jak pojawia się big data (hadoop, spark) to już nie jest buzzword. To jest ewolucja wymagań stawianych przez biznes i czy się to komuś podoba, czy nie - trzeba iść do przodu :)

Co ma Spark i hadoop do reactive? Do czego wykorzystujesz reactive i co to według takiego jest?
Mozna iśc do przodu pod warunkiem, ze użycie tego ma uzasadnienie a nie próbować wrzucać to wszędzie gdzie się da.

KR
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Gdynia
  • Postów:3
0
Wielki Mleczarz napisał(a):
krx napisał(a):
Wielki Mleczarz napisał(a):

Wedlug mnie na razie kolejny buzzword.

Od czasu jak Java 8 dostała elementy funkcyjne, od czasu jak pojawił się LinQ, od czasu jak Scala wyszła z podziemia akademisckiego, od czasu jak pojawia się big data (hadoop, spark) to już nie jest buzzword. To jest ewolucja wymagań stawianych przez biznes i czy się to komuś podoba, czy nie - trzeba iść do przodu :)

Co ma Spark i hadoop do reactive? Do czego wykorzystujesz reactive i co to według takiego jest?
Mozna iśc do przodu pod warunkiem, ze użycie tego ma uzasadnienie a nie próbować wrzucać to wszędzie gdzie się da.

Ano ma tyle, że jest jednym z wielu przykładów dla zastosowania reactive manifesto - tutaj przykład naszego rodaka http://www.lightbend.com/activator/template/spark-streaming-scala-akka

Nie twierdzę, że należy od dzisiaj przepisać wszystko i iść reactive way. Chodzi mi jedynie o to, że nie należy się zamykać na technologie. Od dawna piszę funkcyjnie i od czasu jak zacząłem - nie chcę wracać do zwykłego kodu.

A czym jest dla mnie reactive ? elastycznym sposobem na pisanie kodu, który dobrze się skaluje w górę i na boki (actors, futures) i jest bezpieczny (mniej błędów w kodzie - ale to już kwestia językowa lub ideowa - functional programming).

0

Bardziej tutaj widzę bardziej istotne elementy, które już jakiś czas istnieja niż samo reaktive, czyli:

  • programowanie funkcyjne
  • fast data, spark
  • async

A część rzeczy jest dawna tylko nikt temu nie dawał nazwy 'reactive'

https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape
use cases:

  • External Service Calls
  • Highly Concurrent Message Consumers
  • Spreadsheets
  • Abstraction Over (A)synchronous Processing

Szczerze mówiąc, jakoś niewiele... + do wielu wcale nie potrzeba żadnego reactive.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
4

@krx ja mam wrażenie że niestety niewielu jest programistów który rozumieją że nie ma panaceum ani żadnego silver bullet w programowaniu. A już na pewno nie jest nim programowanie funkcyjne. Paradygmantów programowania jest wiele i każdy ma jakieś plusy i minusy. Programowanie funkcyjne świetnie sprawdza się w pewnych konkretnych zastosowaniach, ale to nie znaczy nagle że OO to była dziejowa pomyłka i należy o nim zapomnieć. Niestety wielu programistów ma taka hipsterską mentalność że nowe = lepsze (gdzie przez nowe chodzi o koncepcje która ostatnio nie była w modzie, bo oczywiście ani programowanie funkcyjne, ani reaktywne nowe to nie są...). Najlepiej widać to w świecie JavaScriptu, ale niestety nie tylko.
Oczywiście są też tacy którzy uważają za panaceum to co umieją, czyli choćby OO i wpychają je wszędzie, niekoniecznie tam gdzie sie nadaje. To rozszerza się też dalej o użycie takiego czy innego języka albo takiej czy innej technologii. Zgodnie z przysłowiem że jak masz młotek to nagle wszyskto przypomina gwoździe ;)

Widać np. wyżej u kolegi @Złoty Kaczor podniecanie się Future czy wywołaniami Asynchronicznymi, które w takiej Javie są od lat. To że ktoś z nich nie korzystał to jest generalnie jego błąd i brak umiejętności, nic więcej. Tak samo opowiadanie ze:

-nie ma pętli for (za wyjątkiem for comprehension w scala:) )

  • if'ów prawie nie ma
  • zapomniałem co to jest nullpointerexception

Jest dość zabawne, bo pętla for jest ukryta w map/reduce a if ukryty w optional, filter i pattern matchingu. Co wiecej wielu ludzi pisze nadal słaby kod, tylko sobie zamienia właśnie jedną konstrukcje na drugą i myślą że nagle kod jest magicznie lepszy ;]
Problem z nullpointerexception wynika z tego że ktoś nie rozumie jak używać optional, either oraz wyjątków. Normalnemu człowiekowi zapala sie czerwona lampka jak robi return null albo jak musi zrobić if x == null i technologia nie ma tu nic do rzeczy.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
Wibowit
Jeśli biblioteki z których korzystamy namiętnie stosują nulle to wtedy trzeba się z nimi babrać. Scala miała Option od początku i od początku był nacisk by nie używać nulli w Scalowych bibliotekach.
Shalom
Optional z guavy też był dostępny już od dawna jeśli ktoś chciał, a własna implementacja optionala to nie rocket science. Jak ktoś chciał to spokojnie mógł używać, więc zrzucanie winy za nullpointerexception na technologie jest trochę śmieszne ;)
Wibowit
Niby czemu śmieszne? Jeśli ja chcę używać Optionali, a biblioteka ich nie używa to w każdym miejscu gdzie używam biblioteki muszę albo na pałę wrzucać Optionale (gdzie wiele z nich będzie nadmiarowych) albo zastanowić się gdzie dane opakowywać oraz gdzie robić gałęzie, a gdzie zamieniać puste Optionale na nulle. Tu nie chodzi o to czy zrobienie własnego Optionala jest proste (bo jest proste) tylko o narzut jaki powoduje mieszanie kodu korzystającego z Optionali z kodem korzystającym z nulli.
Shalom
I oczywiscie w Scali nie korzystacie z żadnej javowej biblioteki która nie używa Optionali? Obawiam sie że póki co większość biznesowego kodu w Scali na takich bibliotekach polega tak czy siak.
Wibowit
Oczywiście, że korzystamy, ale zdecydowana większość funkcjonalności z której korzystamy jest zawarta w Scalowych bibliotekach.
0

Swoja droga z ostatnich buzzwordow to chwycily np. Mikroserwisy a z tym z nowych rzeczy to np.. docker.

Ogolnie soft napisany na Golangu po prostu ludzie zaczynaja uzywac bez obrzucania sie manifestami...

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)