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#.
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.
- Developers who work on web development projects and are interested in FP. Discover how functional programming techniques can help you be more productive.
- People who work on codebases that are becoming harder to maintain.
- Managers who want to increase productivity and velocity of their teams. Functional code is clearer and easier to refactor and maintain. You can reason about code in the absence of side effects.
- Stakeholders who want to scale their processes and teams, and keep up with industry trends. FP techniques are becoming more and more popular, and technology companies that want to compete at a global level must adopt these practices.
In short, if you are:
- a web developer,
- developer working on legacy apps,
- manager of a team,
- a stakeholder of any kind who is invested in the success of the project,
you should look at Functional Programming because it might just be what you need to make your project a success!
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.
- You will learn how functional programming can help improve the scalability, maintainability, and reliability of their applications.
- You will understand how to approach and adopt functional programming in their own teams and how to educate and train people.
- You will gain an understanding of best practices from in-depth case studies.
- You will get to interact with a large pool of web development and functional programming professionals. It’s a great way to extend your hiring pool to include very smart, dedicated group of people and core members of the community.
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:
- Companies seeking employer branding.
- Evangelism of developer tools.
- Supporting diversity in the FP Web community
If you are interested in sponsoring FP Web Conf’s activities, email firstname.lastname@example.org
Hasgeek’s Code of Conduct will apply to participants, speakers and sponsors.
Next-Level Background Processing in Clojure
Conventional background processing libraries have failed to keep up with the demands of distributed systems in 2023. This talk will explore the key features that modern web developers require from an asynchronous system: Reliability, Scalability, Pluggability, and Extensibility.
Furthermore, we’ll talk about the journey of building Goose, a versatile background processing library for Clojure designed with next-level features like pluggable message brokers. Goose serves as specimen for open-source libraries, as it exemplifies community-collaboration, thorough documentation, and built-in reliability.
This talk is divided into three sections:
- What is lacking in the background processing ecosystem?
- Internals of Goose
- My perspective on how a modern open-source library should be built
- Github: https://github.com/nilenso/goose
- Wiki: https://github.com/nilenso/goose/wiki
- Cljdocs: https://cljdoc.org/d/com.nilenso/goose/
- Slack: https://clojurians.slack.com/channels/goose
- Reliability is not a built-in feature.
- Free versions of Sidekiq and Celery do not guarantee against loss of Jobs.
- If developers need reliability, they need to pay for the enterprise version of Sidekiq.
- This deters developers from deploying most open-source libraries for critical asynchronous tasks.
- The choice of message-broker is restricted to a library’s implementation.
- Users have to choose from either Redis, RabbitMQ, AWS SQS or PostgreSQL.
- Different message brokers are better suited for different use cases, depending on factors like scale, performance, and reliability.
- If users want to plugin Kafka, MongoDB, XTDB or Datomic, that is not possible with any background-processing library apart from Goose.
- For the reasons above, organisations need to create internal tooling for asynchronous processing.
- My intention for building Goose was to make background processing one less thing to worry about for the Clojure community.
Goose was designed with reliability, scalability, pluggability, and extensibility in mind. I will delve into seven next-level features that set it apart:
- Reliability is a fundamental feature, not a paid extra.
- I will walk through reliability concerns like network errors, failed enqueues, worker crashes, and broker crashes.
- These concerns are addressed through Goose’s unique queuing design, heartbeats and orphan-checkers, publisher/consumer acknowledgments, and HA architecture.
- Goose allows users to scale their applications by leveraging Java threads and concurrent broker connections.
- Before execution, a lock is acquired on all jobs to avoid duplication.
- Message-broker agnostic design
- Goose has a Broker Protocol to abstract enqueuing, scheduling, and dequeuing jobs.
- Redis and RabbitMQ message-brokers are supported out of the box.
- If developers require a different broker, they can plug it into Goose by virtue of this protocol.
- Pluggable metrics and logging
- Different organisations prefer different metrics protocols, such as StatsD, Prometheus, or
- Goose provides a StatsD implementation out of the box and allows users to plugin a custom metric backend by virtue of a Metrics protocol.
- Like metrics, organizations also prefer different logging formats, such as SLF4J, Log4J, or Apache Commons Logging.
- Goose allows developers to plugin their logging system by virtue of
- Middlewares allow users to extend Goose’s functionality.
- For instance, users can build DAGs and data pipelines based on arguments and results before and after job execution.
- Job enqueue interface
- I have gone to great lengths to ensure that enqueuing a function has the same UX as executing one.
- I will be talking about the 3 iterations and community-feedback it took to arrive at the current API of Goose, which ensures asynchronous invocation does not have any drawbacks compared to synchronous invocation of functions.
- Goose’s enqueue API takes variadic arguments to allow for flexibility in the number of arguments that a function can accept.
- Runtime config over init-time config
- Complex systems require config that can be adjusted at runtime, rather than just at initialization.
- Goose allows users to inject config during runtime, enabling them to distribute load by enqueuing to different brokers.
- The primary focus of any library should be on correctness.
- Unit, integration, and performance tests help with this.
- A library should have extensive documentation.
- A README, Wiki, Docstrings, and Specs help developers navigate seamlessly through your library’s features.
- Default settings with an option for customization go a long way in helping power users gain a quick start.
- Community collaboration should be encouraged to gain developers’ trust in trying a new library.
- Over the last year, Goose has had three major and two patch releases.
- After and before every release, users of Goose were asked for feedback, feature requests, and blockers.
- Language-agnostic design.
- It should be possible to serialize function invocations (like data) and send them over the wire.
- This idea is still in its infancy and would require support from multiple programming languages.
Through this talk, I wish to educate the audience on gaps in conventional libraries, give insights into possible solutions, talk about my attempt at building a user-friendly library, and explore what the future holds for this field.