Make a submission
Accepting submissions till 09 Sep 2023, 11:59 PM
Web application technologies are evolving and becoming even more important. HTML/CSS/JS continues to be the primary language for web app development, but it is increasingly becoming common to build desktop applications, mobile applications, and even embedded applications with it. Simultaneously, we are seeing some really exciting things happening in the FP ecosystem and community. Functional programming is becoming more mainstream, and increasingly being applied to web development technologies.
More and more mainstream languages which are used for web development are adopting FP techniques, and providing FP oriented APIs. On the JVM you have Scala, Clojure, Kotlin, etc. Even Java has adopted things like lambdas and streams, pattern matching, as well as immutable data structures. On the dot net platform there’s F#.
There are languages like TypeScript that bring FP to JavaScript itself. And then there are Haskell and PureScript that provide a strong type system, purity, and immutable data structures. PureScript has JavaScript as the primary target backend. GHC, which is a compiler for Haskell, recently had the JS backend and the web assembly backends merged. Rust which is not pure, still adopts a lot of techniques from functional programming and provides a lot of the same compile time guarantees with its type system. Functional programming is where the industry is moving as a whole.
Using functional programming techniques can help you improve the reliability, scalability, and maintainability of your applications. It has also been shown to provide a delightful development experience and improves developer velocity.
In short, if you are:
FP Web Conf on 29 September will be held in-person. Attendance is open to JSFoo members only. Support the community’s activities with a membership to attend the conference in-person. If you have questions about participation, post a comment here.
Participants will get an in-depth understanding of the use of functional programming techniques and principles in web development.
The conference is curated by Anupam Jain. Anupam has been developing web apps for over a decade and a half, and works with strongly typed FP, user interfaces, analytics, and fintech. Anupam has founded the FP India user group, and is an active contributor to free and open source software, creating libraries such as the Concur UI framework. He curated PureConf also organised by Hasgeek and Juspay in 2022.
Sponsorship slots are open for:
If you are interested in sponsoring FP Web Conf’s activities, email sales@hasgeek.com
For any inquiries, call JSFoo at +91 7676 33 2020 or leave a comment.
Hasgeek’s Code of Conduct will apply to participants, speakers and sponsors.
Hosted by
Supported by
Community sponsor
Mitesh
@oxalorg
Submitted Sep 5, 2023
Many languages have REPLs, but some REPLs are more REPLy than other REPLs.
One of the most enlightening parts about working with Clojure is learning to wield the power of directly interacting with your programs.
It’s a 0→1 paradigm shift in the way we think about our programs, and about the way we code those programs. It is rarely found in the modern world of non-homoiconic (often typed) programming languages.
I think that it’s extraordinarily important that we in computer science keep fun in computing - Alan Perlis
I want to share this experience of having GROK’d what it means to do interactive programming with fast feedback cycles and a whole lot of FUN!
Additionally, I would also like to discuss about the expression problem and how certain language features can really aid you in designing your systems. Here I will discuss how we use Clojure’s capacity to solve these in some real-world use cases.
A rough list of ideas I would talk about:
My REPL vs Your REPL
Interactive Programming is more in-tune with what we do, rather than REPL driven developement
Interacting with the program while it runs
Never write directly into the repl, your editor is STILL your primary interface
Nowadays the editor will parse the code, the LSP server will parse the code, the tree-sitter will parse it, then the actual compiler, then other tools, everyone lives in their own separate world. There’s no shared understanding of the world.
What if we had a single process which had really STRONG abilities for interaction, introspection, reflection, evaluation, compilation, re-evaluation, everything!
That coupled with the ability to MANIPULATE anything and everything, really makes interactive programming possible. And Clojure lends to us a very pragmatic vision of that.
In lisps/smalltalk it goes a level further with the execuation stack itself being a part of this process, so you can do things like breakloops to inspect/manipulate/change the code at runtime on an exception or before any form. In smalltalk, even the editor lives inside the process!
Think about GUI vs terminal/cli, can you imagine a world where we didn’t have terminals and cli’s to interact with our machines?
Even better with an inherent emphasis on working with just data, pure functions, and immutability by default
REPL Sessions - it’s easy to just start coding in a .clj file when a REPL connection gives you access to your entire program state compiled and loaded in memory
Turn your repl sessions into tests — much more fun!
Commit the repl sessions (again just a plain old file) in the repo, they act as replayable docs / integration demos
REPL into your production systems
Ending with the note:
rapid feedback is no substitute for software design and methodic problem-solving - clojure.org
Expression problem
"It is better to have 100 functions operate on one data structure than to have 10 functions operate on 10 data structures.”
cond
cons
conj
filter
map
reduce
assoc
dissoc
etc.McCarthy built Lisp out of parts so fundamental that it is hard to say whether he invented it or discovered it.
But Clojure is very pragmatic, it gives you with a lot of different data structure like PersistentHashSet, PersistentArraySet, PersitentTreeSet, PersistentQueue, etc
But all the core functions work on all these data structures transparently. Moreover, you can create your own data structures to work with these functions too, AND not only that you can also patch other peoples data structures to work with these functions.
Rich Hickey calls this “parochialism”, where you have five things that implement some key-value mapping, and one has a .get(key), and the other has getValue(key) and another has lookup(key), and even if they have the same method signature they are in different interfaces so you can’t actually write agnostic (duck typed) code.
Most problems arise when you’re interacting with libraries, or modules, which don’t quack like the way you want it to quack. What do you do then?
Do we live with their design choices? Do we have a way to clean up someone else’s design? Yes we do!
Illustrate this with some examples of how we used these to solve problems
Eg In one case of wrapping a java library we found numerous classes being their own special snowflake.
(reflect/extend-signatures HasUUID
"java.util.UUID getUniqueId()"
(-uuid [this] (.getUniqueId this))
"java.util.UUID uuid()"
(-uuid [this] (.uuid this))
"java.util.UUID id()"
(-uuid [this] (.id this))
"java.util.UUID getId()"
(-uuid [this] (.getId this))
"java.util.UUID getUID()"
(-uuid [this] (.getUID this))
"java.util.UUID getUUID()"
(-uuid [this] (.getUUID this)))
Some more fancy bits about Clojure I would like to discuss if time permits and if I am able to prepare some nifty understandable examples:
Mitesh (@oxalorg) learnt coding because of his desire to hack video games. This slowly turned to a passion for all things computer.
Active contributor to OSS, he was also funded by ClojuristsTogether to work on Clojurians Log V2.
He creates Clojure, Emacs, & Vim related screencasts on his YouTube Channel.
Hosted by
Supported by
Community sponsor
{{ gettext('Login to leave a comment') }}
{{ gettext('Post a comment…') }}{{ errorMsg }}
{{ gettext('No comments posted yet') }}