Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Je kunt ook een cookievrije versie van de website bezoeken met minder functionaliteit. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , reacties: 28, views: 16.606 •

Microsoft heeft de broncode van Reactive Extensions onder een opensource-licentie vrijgegeven. Reactive Extensions, ofwel Rx, is bedoeld om de ontwikkeling van applicaties die asynchroon data uit meerdere bronnen opvragen te vereenvoudigen .

Rx wordt door Microsoft omschreven als een programmeermodel dat het ontwikkelaars gemakkelijker moet maken om asynchrone datastromen uit meerdere bronnen te bundelen. Als voorbeeld van toepassingen die zouden profiteren van Rx noemen Erik Meijer, softwarearchitect bij Microsoft, en Claudio Caldato, lead program manager bij Microsoft Open Technologies, een applicatie die informatie betrekt uit bronnen als Twitter en data ophaalt van diverse websites. Verder zou Rx met name nuttig zijn voor cloud computing-toepassingen.

Volgens Microsoft wordt Rx al toegepast in diverse producten van de softwaregigant en is het onder andere te vinden in GitHub for Windows. Ook bedrijven als Netflix zouden de Microsoft-technologie hebben gebruikt bij de ontwikkeling van toepassingen die in javascript en .NET zijn geschreven. Door de code nu vrij te geven hoopt Microsoft dat Rx geschikt wordt gemaakt voor meerdere programmeertalen en dat de mogelijkheden verder worden vergroot. De Reactive Extensions zijn beschikbaar op CodePlex.

Reacties (28)

Dat geldt voor alle opensource en betaalde software toch? Anderen maken het en wij gebruiken het en profiteren ervan.
Wat is met bovenstaande nou weer mis, waarom wegmodden. Weer een fanboy ofzo, mag je dan nergens meer een frisse kijk of realistische kijk op hebben? Flauwekul allemaal. Oh, het past even niet in mijn straatje en dan maar weer wegmodden (of wanneer bepaalde woorden niet aanstaan zonder het verhaal inhoudelijk te lezen). Geef dan op z'n minst een reactie waarom het dan niet goed zou zijn.

[Reactie gewijzigd door Erwines op 13 november 2012 07:05]

Microsoft heeft anders al twee implementaties van Rx geleverd. Eentje voor .NET en eentje voor JavaScript (RxJS). Het lijkt me onredelijk om van Microsoft te verlangen dat ze een Rx library voor elk platform geven.
En eentje voor C++ begreep ik.
Het bericht is vooral dat ook Microsoft broncode vrijgeeft. Want ik heb dat even beken op die codeplex pagina, en dat is toch wel vrij technische stuff dat volgens mij niet vaak gebruikt wordt.
Dat doet Microsoft al veel langer toch? Bijvoorbeeld de ASP.NET webstack. Zo evil zijn ze ook weer niet hoor... :)
Ja, ik weet het. Ik zit in het Microsoft wereldje. Maar Microsoft staat bij het grote publiek niet echt bekend voor opensource. Als ze dan als iets vrijgeven, is het dan al direct nieuws, zelfs wanneer het iets is dat volgens mij (ik kan me vergissen) niet veel gebruikt wordt.
Hoezo "nieuws"? Heel veel development gerelateerde projecten van Microsoft zijn open source. Alsook in omgekeerde richting: Zie Nuget, die standaard in Visual Studio geintegreerd zit, waar Microsoft open source contributies sterk aanmoedigt en zelf ook volop het goede voorbeeld geeft.

En "niet veel gebruikt", tja het is vrij nieuw, maar het is weeral een extra hulpmiddel voor asyncroon (multithreaded) te programmeren. Gezien alle Linq liefhebbers daarbuiten kan dit nog erg populair worden.

[Reactie gewijzigd door boe2 op 7 november 2012 16:05]

Nieuws op Tweakers, bedoel ik. Gaan ze dit nu bij elke opensource product publiceren?
Het bestaat toch al bijna 3 jaar (de c# versie).

Het is niet alleen maar voor multithreaded. Het is ook erg handig als je events aan elkaar wilt koppelen. Bv je wilt posities van de muis (mouse move), maar alleen als een knop is ingedrukt (button down, button up) en boven specifiek element (enter, exit). Via Rx krijg je dan alleen "events" als je in die situatie zit.
I geloof dat Microsoft regelmatig de broncode van stukken software die ze hebben gemaakt vrij geven. Het is nog altijd maar een klein deel van alle software die Microsoft maakt, maar het is in ieder geval niet echt vreemd dat het gebeurd.
Via Visual Studio heb ik veel sources van .NET tot mijn beschikking, zelfs de mscorlib kun je inzien. Erg leerzaam en soms om te huilen. :)
Daar heb je niet eens VS voor nodig; je kunt het ook "gewoon" downloaden: http://referencesource.microsoft.com/netframework.aspx
offtopic:
De paar keren dat ik 't deed kreeg ik een .aspx file die ik wel even moest renamen naar .msi :X
Dat klopt, maar ik gebruik in Visual Studio vaak de Ctrl+Click optie op API types om die sources te openen en te kijken wat zij nou denken dat goed is.
Let wel: Die code is niet vrij gegeven, alleen openbaar gemaakt. Je mag het alleen inzien voor "reference use". Je mag het dus niet hergebruiken, en gebruiken als inspiratie bron is ook niet toegestaan.
Ik dacht eigenlijk dat Rx achterhaald zou zijn bij de introductie van .NET 4.5 met async en await. Maar is Rx dan echt nog een compleet ander model voor asynchroon programmeren, of is het idee dat het juist ook op oudere .NET versies en zelfs compleet andere plaftformen ingezet moet gaan worden?
Rx is een beetje de tegenhanger van linq/ienumerable. Die werken volgens een pull model, je definieert je databron, een lijst met filters en bewerkingen en trekt het resultaat eruit. Rx is een push model, je definieert een databron die zelf data produceert, weer een lijst filters en bewerkingen en je krijgt vanzelf het gewenste resultaat voorgeschoteld.
Async/await staan er redelijk los van en zijn features om code op te schrijven die leest alsof het synchroon is, maar die eigenlijk een complexe asynchrone state machine is.
^ Wat ekoopman zegt.

Een wat oude(re) video, maar Erik Meijer legt 't hier relatief kort-en-krachtig uit. Iets meer in depth (en toevallig gisteren zitten kijken) zijn deze 6 video's. Vooral video 3 maakt veel duidelijk in de eerste 3 minuten.
offtopic:
Het is alleen hondsirritant hoe vaak die figuren "actually" zeggen, let er maar eens op :P :X

Ik sta iig te popelen om eens met Rx aan de gang te gaan en SignalR, ook open source (sinds kort meen ik?). Als je dan toch video's aan 't kijken bent, pak dan even deze mee.

[Reactie gewijzigd door RobIII op 7 november 2012 17:23]

Ik sta iig te popelen om eens met Rx aan de gang te gaan en SignalR, ook open source (sinds kort meen ik?).
SignalR is vanaf het begin opensource, als hobbyproject. Sinds een maand ondersteunt Microsoft het officieel en valt het in de Microsoft.AspNet-namespace.
Ah; ik wist dat er iets in die richting was (klok en klepel enzo :P ). Maar nu je 't zegt: klopt als een bus.
Erik Meijer is slim en zijn presentaties zijn behoorlijk "overwhelming". Maar dit is een beetje too little too late. Voor asynchrone verwerking van meerdere data bronnen is tegenwoordig node.js een perfect fit. FF snel erover lezen in de vorm van een infographic? Check hier : http://www.engineyard.com/infographics/nodejs

Grappig is dat Microsoft ook node.js indirect support. Maar da's wel vaker dat ze op meerdere paarden wedden. Persoonlijk denk ik dat ze Javascript via TypeScript meer gaan omarmen. Ook omdat je daarmee in Windows 8 ook Win RT apps kunt bakken.
Het Rx Framework bestaat al een tijdje en dat Javascript, leuk en aardig maar waar de echte kracht ligt natuurlijk dat dit ook in het .Net (of juist in het .Net) framework toe te passen is. Je kan dit goed in bijvoorbeeld monitoringtools in de LOB inbouwen.
Trust me het .Net framework ken ik. Ik zeg dus niet dat Node.js .NET overbodig maakt. Maar voor realtime web applicaties is het een perfect match.

En Javascript niet serieus nemen is een beetje naief! En waarom zou zou Microsoft ook Rx Extensions uitbrengen voor Javascript? http://blogs.msdn.com/b/r...js-v2-0-now-released.aspx

Wat handig/fijn/logisch is aan node.js is dat je client javascript spreekt en communiceert met json, node.js serverside javascript spreekt, en de gemiddelde NoSQL database ook json babbelt. En wat helpt dat? Geen gekke OO->Relational mapping crap die altijd net niet goed werkt, en steeds weer gevloek veroorzaakt. Dus niet steeds vertalingen tussen van database->.NET->Webclient.

Maar zware business logica stop je nog steeds gewoon in .NET/Java webservices, en roep je aan vanuit node.js.
Voor asynchrone verwerking van meerdere data bronnen is tegenwoordig node.js een perfect fit. FF snel erover lezen in de vorm van een infographic? Check hier : http://www.engineyard.com/infographics/nodejs
Die infographic vertelt anders bar weinig.

Daarnaast is Rx niet beperkt tot puur asynchrone zaken, maar kan ook het werken met synchrone zaken versimpelen. Zo wordt in dit filmpje een voorbeeld aangehaald hoe je twee blocking database operaties die dezelfde resultaten zouden moeten geven (IEnumerables) met Rx gemakkelijk kunt combineren. Dit kan door beide IEnumerables om te zetten naar IObservables, vervolgens deze twee IObservables te combineren met Amb tot één IObservable om tenslotte deze ene IObservable terug om te zetten naar een IEnumerable.

Ergo, de kracht van Rx is compositie. Node.js biedt voor zo ver ik zie alleen maar een framework met de nadruk op continuation passing style.
Kun je me kort uitleggen welk probleem het voor me oplost?

Daarbij is bij node.js het mantra : non-blocking io. Alles is asynchroon en non-blocking. Maar goed lees erover.

But if you can't beat them, join them : https://github.com/Reactive-Extensions/rxjs-node ;)

Oh ja ik zei "snel erover lezen". Wil je minder snel en enigszins objectief, check dan : http://www.ibm.com/develo...rary/os-nodejs/index.html
Kun je me kort uitleggen welk probleem het voor me oplost?
Zoals ik al zei, compositie (van asynchrone bronnen).

Het meest simpele voorbeeld dat de kracht van Rx laat zien is "dictionary suggest", hetgeen dat je op o.a. Google ziet. Je typt wat tekens in het zoekveld en je krijgt een lijst met aanvulsuggesties.

In dit probleem spelen 2 asynchrone bronnen een rol: input events die de gebruiker genereert en de lookup-service die de suggesties aanlevert. Dit probleem lijkt triviaal, maar is het niet.

Je hebt namelijk te maken met de volgende issues:
  • Throttling: Je wilt niet dat voor elke toetsaanslag meteen een request naar de lookup-service gestuurd wordt. Als de gebruiker snel tikt is het zonde om al aanvulsuggesties op te vragen voor de eerste toetsaanslag.
  • Text"change" events: Je wil alleen reageren als de tekst daadwerkelijk veranderd is. (a) In de meeste GUI frameworks is het zo, dat als ik de laatste letter van het tekstveld selecteer en vervolgens dezelfde letter op m'n toetsenbord indruk, dat er alsnog een textchange event optreedt. (b) Als je gaat throttlen, heb je ook kans dat dezelfde "textchange" events doorkomen. Denk bijv. aan het drukken op backspace en vervolgens snel het verwijderde teken weer terugplaatsen.
  • Out-of-order: Het is mogelijk dat wanneer je voor een aantal input events een request naar de lookup-service stuurt, dat de antwoorden niet in volgorde terugkomen. Voorbeeld: Als het systeem een request stuurde voor "rea" en iets later voor "reacti", wil je niet dat wanneer de latere request als eerste beantwoordt wordt, dat je dan later de suggesties voor de eerste request nog toont.
Rekening houden met dit alles is nogmaals niet triviaal. Rx echter maakt het met de juiste operators juist triviaal. Het is hooguit iets van 10 regels code:

var input =
(from evt in someSourceOfTextChangeEvents
select ((Textbox)evt.Sender).Text)
.Throttle(TimeSpan.FromSeconds(0.5))
.DistinctUntilChanged();

var suggestions =
from query in input
from words in lookup(query).TakeUntil(input)
select words;

suggestions.Subscribe(ShowSuggestions);


(Niet geheel netjes opgemaakt, maar de frontpage ondersteunt geen codetags)

Addendum: De belangrijkste operators hierboven zijn dus Throttle(), DistinctUntilChanged() en TakeUntil().

[Reactie gewijzigd door RayNbow op 8 november 2012 09:34]

Op dit item kan niet meer gereageerd worden.



Populair: Desktops Samsung Smartphones Sony Microsoft Apple Games AMD Consoles Politiek en recht

© 1998 - 2014 Tweakers.net B.V. Tweakers is onderdeel van De Persgroep en partner van Computable, Autotrack en Carsom.nl Hosting door True

Beste nieuwssite en prijsvergelijker van het jaar 2013