to post messages and comments.

awelonblue.wordpress.com
Один чумовой программист, который развил функционально–реактивное программирование в реактивно–требовательное, однажды начал пилить язык программирования Awelon, а теперь параллельно с этим — wiki–движок.

Wikilon will be implemented as a Haskell warp web service using acid-state for persistence and websockets for liveness and reactivity.
Wikilon will be user-extensible, in the sense that developers can add new web services or web applications simply by defining new words in the Awelon Object dictionary. AO leverages ad-hoc naming conventions, e.g. words with prefix `test.` indicate tests that we should run. In this case, new web services might be installed by defining a word like `wikilon\foo` to process HTTP requests on the \foo path. It’s essentially an in-language variation of CGI. However, AO is much easier to secure than CGI, and also subject to partial evaluation (e.g. for a given set of query parameters).
I’d like to shift towards a more persistent, reactive testing environment, in a style akin to iPython notebook. As a developer edits definitions for words, they should be able to immediately observe the effects on whichever notes they’re viewing. A given note shall simply be another word in the dictionary, hanging around for anyone who wishes to view it.
The idea of user programmable wikis isn’t new. But I believe AO is better suited for this role, e.g. with respect to security, portability, concurrency, and composition. AO was designed with wiki-based development in mind.

Поскольку астрологи в #2731494 объявили неделю FRP, количество постов об FRP удваивается. github.com

По ссылке пример того, как можно реализовать методами стрелочного FRP интегрирование ODE методами а-ля Рунге-Кутта (весь код в одном файле). В качестве основы используется подход в стиле Yampa или Netwire. Хорошо описано в заезженной статье: staff.science.uu.nl

От описанного в статье сделаны следующие важные отступления. Во-первых, избегается использование init'ов или delay'ев, которые обычно в таком подходе используются для описания интегралов. Вместо этого используется примитив integrator. Во-вторых, стрелки оперируют не сырыми данными, а отдельной абстракцией под названием Signal. На которую и выкладывается бремя обеспечения интегрирования. Для примера традиционно реализовано два метода интегрирования: Эйлер первого порядка (строка 133) и Рунге-Кутта четвёртого порядка (строка 153). Собственно, строчки 153-158 наибольший интерес и представляют, остальное всё шелуха.

В качестве примера интегрируемого уравнения обычный гармонический осциллятор (строка 170). Пруф работоспособности: tau.rghost.ru

Привет.

У меня есть поток событий вида (Int, Double), есть функция

фильтрующая только интересные события:

test :: Int -> Wire (Event (Int,Double)) (Event Double)
test n = fmap (fmap snd) (filterE ((n ==) . fst))

есть функция для создания ноды, она для всех интересующих
событий держит последнее не больше 4 сек (таймаут) и считает средее по двум секундам, это все хорошо и прекрасно.

mkNodeWire :: Int -> Wire (Event (Int,Double)) Double
mkNodeWire n = sAvg 2 . holdFor 4 . test n


Но теперь у меня вознакает проблема, у меня есть куча функций нод [Wire (Event (Int,Double) Double)] и котоым я могу скормить event, но я хочу отлавливать случай, когда все ноды проигнорировали событие.

В принципе это можно сделать если test :: Int -> Wire (Int, Double) Double, тогда на проводе будет вызываться inhibit, но это угробит состояние там живущее, хранить состояние в моей функции, это как-то убого, вот и не знаю что делать.

Что у нас самое прогрессивное в этом плане? Интересует моделирование процессов, смотрел YAMPA, очень интересно, стрелки манят, смотрел netwire интересно, что сигнальная функция может порождать либо не порождать выходной сигнал. Кто вообще темой интересовался ?

blog.asana.com

Asana (Project Management) выходит в открытый доступ. Та самая, у которой функционально–реактивное программирование активно используется.

Asana is a modern web application that keeps teams in sync, a shared task list where everyone can capture, organize, track, and communicate what they are working on in service of their common goal. Rather than trying to stay organized through the tedious grind of emails and meetings, teams using Asana can move faster and do more — or even take on bigger and more interesting goals.

asana.com

Inspired by #incremental computing, we’re building Lunascript as a simple way to write modern web applications. Lunascript has a syntax and ease of use reminiscent of JavaScript, but a powerful pure-functional lazily-evaluated semantics historically confined to academic languages.

A Lunascript application specifes a data model and a function from the model to the view or user interface, annotated with handler functions from user inputs to model mutations. From this the Lunascript compiler produces a functioning Web 2.0 application — the client-side JavaScript, the server-side SQL, and everything in between — complete with real-time bidirectional data synchronization.