Hi! I've been told about this community as a place...
# introduce-yourself
d
Hi! I've been told about this community as a place where one can present some early stage ideas to like-minded people aware of the drastic changes that the landscape of programming systems is undergoing. During my graduate studies I did research in the fields of both theoretical Constraint Programming and End User Development, although now I only do it as a personal side project.  I devoured the now classics "Watch what I do" and "Your wish is my command", as well as all the UX books I could find and anything design-related in a wide sense. I'm a believer that the Cognive Dimensions framework of TRG Green et. al. has potential for its intended use as a meta-language for exploring software design and pivoting it in unusual directions, though that may be over-confidence on my understanding of it. 🙂 I certainly have ideas that I would like to develop into a coherent explanation, on how to create a system for information workers who want to build their own data processing workflows without constant assistance from software engineers. I've seen the venerable copy/paste being used for gluing disparate tools into personal workflows through lots of back-and-forth manual data transfers; I've even seen this copy/paste protocol upgraded from humble raw text to rich text, supporting style and multimedia objects. And I have insights for a new upgrade that provides the protocol with structured data and persistent semi-automated workflows, building the mythical "unix pipes for visual user interfaces" that we were promised decades ago. I have seen many signs that the computing field is converging towards a form of computation with novel aspects reappearing in different contexts, where many of my ideas about modern computation appear incomplete in various systems, with no single one containing all of them. I would love to explore what expectations people have about modern knowledge-processing devices, and whether my insights could be used to support those expectations and improve their users work. I hope this community will help me grow in knoledge.
👋 14
👋🏼 1
c
Hi Diego, I'd be interested to hear the ideas you allude to in paragraph 3. What do you see as the basic grammar of this system? The difficult thing from my perspective is reconciling an automated data-flow with the large amount of manual cleaning up and tweaking that normally goes on.
d
Hi Chris. I'm mostly thinking of direct manipulation, consisting on clicking and tagging structured data. Prototype tools like

Kimono

and Lapis can infer the structure of a document and create patterns to scrap data collections that way. This kind of tools usually create an API endpoint to be accessed programatically, which is not accesible to end users. I would pipe such extracted data through a cleanup tool like

OpenRefine

or

MS Power Query

, which convert a sequence of direct manipulation transformations into a persistent sequence of commands so it can be reapplied to new datasets. As you see, these workflows already exist in several tools with different degrees of maturity. However, they are separate silos, making it difficult to transfer information among different applications; and they expose information either through an API endpoint or as a whole file. My novel idea is to build an always-present capacity at the GUI level (either the windowing environment or mobile) which, like copy-paste, allows you to capture any information that the user can see and insert it at any other place that accepts editable content, but using these structured data transformation pipelines rather than raw text; and setting up some interactive widgets at the enpoint so that the user can shape the way data is injected into it. Again there are some "build your own workflow" commercial tools trying to create similar connectivity, but I don't see them working at this granularity I want to achieve of allowing a single interaction over a multiple selection of data.
n
Ah, constraint programming! I've recently been thinking about using CP as the basis for static analysis (e.g. verifying program termination) and as a language for relational queries. What do you think about constraint programming nowadays? Do you think it has a future in programming language semantics? (Perhaps you have only thought about domain-specific use-cases, such as theorem proving and optimization problems.)
👍 1
🤔 1
d
My expertise is in optimization problems, yes. Though I believe it has applications in languages for End-User Development, in special for data analysis tasks. A Jupyper-like notebook or spreadsheet-like environment could benefit from it, if the user provides hints about a desired outcome and the CP system generates a list of candidate solutions that satisfy them, possibly ordered by some quality criteria, instead of having to express a complete precise specification of the code needed to generate that outcome. This approach may provide a more exploratory, iterative experience, adequate for early stage design, rather than a full-blown coding style needed for engineering a robust fully reusable program.
👍 1
n
I notice that a lot of people in the constraint programming community propose things like that (using CP to approximate or “search” for a solution to a certain problem). But can’t you also see CP as a first-class programming paradigm? “Show me all values fulfilling these constraints, sorted by X” or “pick the minimum value satisfying Y” are pretty general programming primitives. I’m pretty sure you could build a practical language out of them.
👍 2
The CP literature tends to position itself as only suited to domain-specific problems, and it baffles me. 😐
d
@Nick Smith I think we speak that way because "solutions" is the general term for the list of results compatible with the asserted constraints, but there's no prior implication on where you apply this generic mechanism otherwise. As for a paradigm based on CP languages, there is such thing! Some constraint programming libraries like naxos or Choco-solver integrate with imperative coding, and you can use them as a kind of oracle which you feed data into and from which you get lists of successful results. I find them somehow awkward though, sometimes it feels like you need to work with two isolated models of the domain problem, one in the classical environment and one inside the solver. Conceptually I find it a bit simpler (still not easy, though) to use constraint logic programming, i.e. prolog-like environments where you program through generate-and-test subroutines but it internally keeps track of what values it can skip, for being incompatible with the current search space state.
What I'm curious about CP is its potential parnership with Machine Learning. The current AI renaissance is all about advanced statistical techniques, and they're getting awesome never-seen-before results in all kinds of artistic media or tasks requiring observation and adequate reactions. Yet it always feels like these techniques don't really understand the problem they're solving, they merely act by imitation of what they were trained on. Classic AI, the one based on logic inferences, is strong in that task of understanding the situation and giving precise answers. Yet it lacks intuition and has not been seen to be able to generate anything similar to creativity. I have often wondered if there would be a way to combine the strengths of both, but I know of no research that has attempted to do that.
Maybe this last though is interesting for the "thinking together"...
☝️ 1