So what are the plans for a full web stack? Will it be a plugin for
websharper or just an experiment or showcase?
What kind of performance do you get from http machine is it efficient?
What are you using?
I have used loads of perf testing tools don't worry about those, I meant Cashel, for some reason I was searching for Cashew :~ lol
Have you got a quick brain dump or reference project that will give me a high level over view that I can be thinking about?
I guess you want me to finish FHPS too, Is Cachel working using a stream FHPS produces a payload at a time based on the contents of the pinned memory buffers in the TCP stack.
Theres FParsec too although the documentation looks to have a steep learning curve...
I guess you want me to finish FHPS too, Is Cachel working using a stream FHPS produces a payload at a time based on the contents of the pinned memory buffers in the TCP stack.
I set up my HttpMachine implementation (well, the UriParser, anyway) to use ArraySegment<byte>, which looked to be a good corollary to the SocketAsyncEventArgs. My thought was that I could take the SAEA buffer, offset and count, and create a related ArraySegment. The parser progresses through the ArraySegment as it would use functional lists. Again, tests are available to demonstrate that in Cashel. Along with updating to the newer naming conventions and .NET 4.0, the ArraySegment combinators were part of my contribution.
The problem may be that under load you get one buffer full of a message and there will be another almost immediately afterwards. If you are parsing half a message does it cope well with this? \One of the reasons I pipelined the output was that there were stages which split messages up producing a payload which was deemed to be one complete message, I was dealing with a different domain though, SDR (Short Data Router) messages which were 140bytes in size, and raw xml in another instance.
Theres FParsec too although the documentation looks to have a steep learning curve...
FParsec is very powerful, uses Streams of chars with a custom iterator, and is just amazing... until you want to do something asynchronously. It's highly optimized for synchronous parsing. That's the primary reason I went with Cashel. When I started with Cashel, I actually converted the parser monad to wrap an async at first, but then I realized I was releasing the thread all over the place when I didn't want to do that.
Im trying to get a picture in my mind of how it would work asynchronously, are different threads working on different pattern matches, which are then combined?
* Connect up WebSharper sitelets with a fully F#-based web stack
(Frack + Frank)
* Eliminate the need for IIS to run WebSharper applications
* Increase the adoption of WebSharper
* All-in-all drive people to develop web applications with F#
Our piece in this puzzle is establishing a connector for expressing
first-class web sites (sitelets), web forms and UI in general
(formlets, flowlets), and web functionality/behavior (pagelets) on the
Frack/Frank stack - and thus enable developing markupless, dynamic,
client-based web and mobile applications with nothing but F# code.
This will change the way people write web applications, not only
because it's cool and easy, but also because of the strong impact
functional programming carries. Being able to write client-side code
in F# is a strong point (and the wealth of WebSharper connectors to
third-party JavaScript libraries is another), but writing the backend
logic side-by-side as well without having to worry about how to
interface with the client-side is a clear and unbeatable benefit.
One test case I would like to create is a visualization-heavy,
enterprise-grade application that uses asynchronous and higher-order
functional programming to process data obtained from various sources,
serve it to clients in an interactive and visually highly appealing
way, enable access over mobile phones, and allow for thousands of
concurrent users. This should be under 1000 lines of nothing but F#
code.
--
Adam Granicz, IntelliFactory
www.intellifactory.com
Re the sitelets to Frack/Frank connector - on the high-level, we need
a function that lifts a sitelet to an application that Frack can
serve.
Sitelets have strong URL management capabilities (safe and computed
URLs, infering from action types, etc.) and can also match (in a
type-safe way) arbitrary requests (and respond to anything from plain
GET requests to full RESTful services) - so they offer the "full
enchilada" when it comes to defining dynamic sites.
--
Adam Granicz, IntelliFactory
www.intellifactory.com
What do we need for the connecter between sitelets and Frack/Frank, I
guess we splice together what we have and they look at streamlining
while keeping to the Interfaces in OWIN, or is that open to
modification?
The 1000 lines is the user code (all F#, except for the designer
template - that's in Xml and auto-converted to F# code) - all the code
a user has to write to use WebSharper and the related extensions to
implement this application. We would likely use Infovis or Protovis
to visualize data (or anything we can wrap reasonably easy), these are
available as WebSharper extensions already. Usually, similar small
demo-type apps are around a couple hundred lines, but here I would be
aiming to implement an enterprise-grade application that could even
sell (perhaps visualizing stock prices, or whatever), hence the larger
code base - but still, darned impressive compared to similar ASP.NET
or MVC apps that are at least an order of magnitude larger in code
size. The beauty will be mostly in how the data is retrieved,
filtered/mapped, tranformed, and then visualized.
Re the sitelets to Frack/Frank connector - on the high-level, we need
a function that lifts a sitelet to an application that Frack can
serve.
Sitelets have strong URL management capabilities (safe and computed
URLs, infering from action types, etc.) and can also match (in a
type-safe way) arbitrary requests (and respond to anything from plain
GET requests to full RESTful services) - so they offer the "full
enchilada" when it comes to defining dynamic sites.
Sent from my iPhone
I tried to build frank but was missing references even after the git commands you gave and trying to build everything.
D.
--
Adam Granicz, IntelliFactory
www.intellifactory.com