diff --git a/asset/feed.xml b/asset/feed.xml index bedc8c494b..96c12652bc 100644 --- a/asset/feed.xml +++ b/asset/feed.xml @@ -1,9 +1,9 @@ -https://ocaml.org/feed.xmlOCaml.org blog2023-05-27T08:54:53-00:00https://blog.janestreet.com/feed.xmljanestreet<p>Coming from OCaml, the Rust programming language has many appealing +https://ocaml.org/feed.xmlOCaml.org blog2023-05-27T08:58:22-00:00https://blog.janestreet.com/feed.xmljanestreet<p>Coming from OCaml, the Rust programming language has many appealing features. Rust&rsquo;s system for tracking lifetime and ownership allows users to safely express patterns that are awkward in OCaml, such as:</p> -https://blog.janestreet.com/oxidizing-ocaml-locality/Oxidizing OCaml: Locality2023-05-26T00:00:00-00:00janestreethttps://tarides.com/feed.xmltarides<p>For the past few years, Tarides has been responsible for the storage component of Tezos, from L1 and L2 shells up to the Tezos protocol. In 2022, our main focus was on improving storage performance and UX for running nodes and bakers. Our efforts resulted in significant improvements, including reducing the storage requirements for rolling nodes by 10x and <a href="https://tarides.com/blog/2022-04-26-lightning-fast-with-irmin-tezos-storage-is-6x-faster-with-1000-tps-surpassed">decreasing the memory usage of the storage layer by 80%</a>. We also maintain core storage APIs necessary to scale the TPS of the network. But we didn't stop there! This year, we've already worked on improving the performance of archive nodes and delivered the project last month. In this blog post, we'll take a closer look at our work and what it means for the future of Tezos.</p> +https://blog.janestreet.com/oxidizing-ocaml-locality/Oxidizing OCaml: Locality2023-05-26T00:00:00-00:00janestreethttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#1">Looking for example tsdl games</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#2">OCaml.org Newsletter: April 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#3">A bestiary of GADT examples?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#4">2023 StackOverflow Developer Survey</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#5">Release 0.5.4 of ~Fmlib_browser~</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#6">OCaml Platform Newsletter: April 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#7">Eio Developer Meetings</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#8">New major release of Parany (v14.0.0)</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.23.htmlOCaml Weekly News, 23 May 20232023-05-23T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#1">Rendering React in OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#2">Ahrefs is Hiring</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#3">tmx: Import 2D game maps with ease</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#4">Brr 0.0.5, the WebGPU edition</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#5">A bestiary of GADT examples?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#6">Open-source tool to make a static blog in OCaml?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#7">BER MetaOCaml N114, for OCaml 4.14.1</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#8">Building iOS apps with OCaml?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#9">A Minimal Prototype of In-Package Search is on staging.ocaml.org</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#10">New release of Fix (20230505)</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#11">QCheck 0.21</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.16.htmlOCaml Weekly News, 16 May 20232023-05-16T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#1">Overview of libraries for showing OCaml values</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#2">kcas and kcas_data 0.3.0: Software Transactional Memory</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#3">OCaml.org Newsletter: March 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#4">Creating a tutorial on sequences</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#5">You started to learn OCaml less than 12 months ago? Please help us with our user survey on the OCaml.org Learning Area</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#6">Explorations on Package Management in Dune</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#7">Functional web applications running in the browser</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#8">Ahrefs is now built with Melange</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#9">Other OCaml News</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.09.htmlOCaml Weekly News, 09 May 20232023-05-09T12:00:00-00:00cwnhttps://tarides.com/feed.xmltarides<p>For the past few years, Tarides has been responsible for the storage component of Tezos, from L1 and L2 shells up to the Tezos protocol. In 2022, our main focus was on improving storage performance and UX for running nodes and bakers. Our efforts resulted in significant improvements, including reducing the storage requirements for rolling nodes by 10x and <a href="https://tarides.com/blog/2022-04-26-lightning-fast-with-irmin-tezos-storage-is-6x-faster-with-1000-tps-surpassed">decreasing the memory usage of the storage layer by 80%</a>. We also maintain core storage APIs necessary to scale the TPS of the network. But we didn't stop there! This year, we've already worked on improving the performance of archive nodes and delivered the project last month. In this blog post, we'll take a closer look at our work and what it means for the future of Tezos.</p> <p>Last year we released a <a href="https://tarides.com/blog/2022-11-10-towards-minimal-disk-usage-for-tezos-bakers">garbage collector (GC) for the <code>irmin-pack</code> backend</a> to reclaim disk space. The <code>irmin-pack</code> backend is notably used by Octez to support the <a href="https://tezos.com">Tezos blockchain</a> storage on disk. In this context, the Irmin GC is used to perform <a href="https://research-development.nomadic-labs.com/pruning-the-context-and-other-seasonal-activities.html">context pruning</a> by <a href="https://tezos.gitlab.io/user/history_modes.html">rolling nodes</a>. This operation reclaims disk space by deleting old blocks that are no longer required to participate in the Tezos consensus algorithm. In Git terms, the rolling nodes only maintain a <a href="https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/">shallow history</a> of the blockchain. On the other end, archive nodes retain the entirety of the blockchain to ensure integrity. The Irmin GC has the additional benefit of compacting the data on disk, hence improving the performances of disk operations due to better data locality.</p> <p>Following the context pruning release in Octez v16, we focused on improving the performances of the Irmin GC, both in its disk usage and memory. We also brought the optimisation benefit of data compaction to archive nodes. As the Tezos blockchain keeps growing, the archive nodes storage requirements are also becoming problematic, so our solution opens the possibility to use multiple hard drives to scale beyond a single disk. In the future, this could enable archive node operators to use a small SSD with excellent performance to store the most recent blocks, while storing older blocks on a larger, less expensive disk.</p> <h2 style="position:relative;"><a href="https://tarides.com/feed.xml#archive-node-storage-optimisations" aria-label="archive node storage optimisations permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Archive Node Storage Optimisations</h2> @@ -103,7 +103,7 @@ users to safely express patterns that are awkward in OCaml, such as:</p> </a> </span></p> <h2 style="position:relative;"><a href="https://tarides.com/feed.xml#conclusion" aria-label="conclusion permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Conclusion</h2> -<p>The Irmin 3.5 and 3.6 releases brought much needed disk and memory optimisations to Octez context pruning for rolling nodes. The Irmin 3.7 release brings more improvements to rolling nodes and introduces the same optimised garbage collection design to archive nodes, allowing them to have the same small and efficient store for recent history and enabling future improvements for storing history on multiple disks. Integration of Irmin 3.7's features into Octez is in-progress and will ship in a future version of Octez. In the meantime, we welcome your comments and feedback on the optimisations and design choices. Join the conversation on the <a href="https://discuss.ocaml.org/">OCaml Discuss forum</a>, in the <a href="https://github.com/mirage/irmin/issues">GitHub Issues</a>, and through comments on the <a href="https://forum.tezosagora.org/">Tezos Agora post</a>.</p>https://tarides.com/blog/2023-05-05-optimising-archive-node-storage-for-tezosOptimising Archive Node Storage for Tezos2023-05-05T00:00:00-00:00tarideshttps://medium.com/feed/ahrefs/tagged/ocamlahrefs<h3>OCaml, all the way&nbsp;down</h3><figure><img src="https://cdn-images-1.medium.com/max/1024/0*cGDQZKJ2bKMARpj9" alt=""/><figcaption>Photo by <a href="https://unsplash.com/ja/@lg17?utm_source=medium&amp;utm_medium=referral">Lance Grandahl</a> on&nbsp;<a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h4>Some history</h4><p>In 2021, we decided to evaluate <a href="https://github.com/melange-re/melange">Melange</a> as an alternative to <a href="http://rescript-lang.org/">ReScript</a> for compiling Ahrefs&rsquo; frontend codebase. We wrote about the reasons that led us there, as well as the limitations we encountered at the time, in <a href="https://tech.ahrefs.com/building-ahrefs-codebase-with-melange-9f881f6d022b">a previous&nbsp;article</a>.</p><p>After this experiment, discussions continued inside the team. Switching to a different compiler, which was in a very early stage, involved quite some risk. But so did the continued use of ReScript, which seemed to be diverging further and further away from&nbsp;OCaml.</p><p>Finally, in September 2022 (during <a href="https://icfp22.sigplan.org/">ICFP in Ljubljana</a>), we decided to bite the bullet and kicked off a project to deepen the integration between <a href="http://dune.build/">Dune</a> (OCaml&rsquo;s most used build system) and Melange. This better integration was the key to solve two of the three limitations we had encountered during our initial exploration of&nbsp;Melange:</p><ul><li>Build speed would increase due to less work needed to parse dune files, and more efficient rules planning and execution.</li><li>Developer ergonomics would get better, as Melange would become a first-class citizen in Dune, with concepts like Dune <a href="https://dune.readthedocs.io/en/stable/dune-files.html#library">libraries</a> and other stanzas becoming available to Melange&nbsp;users.</li></ul><p>Ahrefs&rsquo; leadership backed the project and agreed to financially support the development of this tighter integration. With this support, we set about building a team that included Rudi Grinberg, who maintains Dune as part of its development team, and Antonio Monteiro, who created Melange and is also part of the Dune development team.</p><h4>Heads down</h4><p>During the following months, we focused on two tasks, iterating over multiple cycles where the progress on one task would inform the next steps to take for the&nbsp;other:</p><ol><li>Evolve Dune to add stanzas, fields, and documentation to support Melange projects.</li><li>Migrate Ahrefs&rsquo; frontend codebase to use the Melange compiler and Dune, adapt third-party libraries and bindings to Melange, and polish the editor integration, build scripts, and other aspects of the development experience.</li></ol><p>We believe that tackling these two tasks in parallel led us to better results, compared to a more waterfall-based approach. As we applied the changes over Ahrefs&rsquo; large-ish frontend codebase&#8202;&mdash;&#8202;it will soon reach 5000 modules&#8202;&mdash;&#8202;we kept finding and fixing bugs, improving the ergonomics of the Dune and Melange integration, and in general making the solution more robust, real-world ready, and developer-friendly.</p><p>Another upside of the way the project was implemented is that we developed it initially in stealth mode, keeping it quite private. By working on it within a tight-knit team, before making a public release, we could make progress faster. We believe that this approach saved future Melange users a lot of churn and burn caused by the multiple changes in Dune stanza options, Melange flags, and other configurations we changed along the way, as we learned more about this integration.</p><h4>Migration strategies</h4><p>Initially, our plan was to progressively migrate Ahrefs&rsquo; code to Melange. As the frontend codebase is divided into different tools, each being self-contained, we thought we could introduce Melange to build one tool, then another tool, gradually migrating them one by&nbsp;one.</p><p>However, this approach turned out to be too complex because configuring a development environment that works on both Melange and ReScript is challenging. As developers could be working on multiple tools during the same week, or even within the same day, we realized that it was unfeasible to reconfigure the environment every time a developer switched from a tool built with Melange to a tool built with ReScript.</p><p>Therefore, we changed our minds and opted for a one-shot migration. We would ensure that CI, development, and staging environments were working with Melange and Dune. And we would do this on separate branches, while still using ReScript on our main branch CI and development scripts. Once we were confident everything was building and functioning correctly with Melange, we switched all CI and development scripts to use the Melange and Dune commands. We tried to keep the PR that applied this switch as small as possible, with just a few hundreds of lines of changes so that we could switch back to ReScript if needed. In fact, after a first attempt in March, we had to switch back to ReScript due to some issues on the developer experience side, related to build performance and ergonomics, which took a few more weeks to&nbsp;solve.</p><p>In terms of package management and third-party Melange dependencies, we followed a more gradual approach. Dune is quite flexible when it comes to <a href="https://dune.readthedocs.io/en/stable/dune-files.html#vendored-dirs">vendoring</a>, so in the initial phase, we downloaded Melange libraries with npm, and had Dune include them in the project as if they were local sources. Now we have started migrating some of these libraries so that we can consume them using opam, the OCaml package manager. This will involve first publishing them in our private opam mirror, but the plan is to have them published in the <a href="https://ocaml.org/packages">public opam repository</a> in the future so that other Melange developers can also use&nbsp;them.</p><h4>Timings</h4><p>You may be curious about the performance differences between the previous and current approaches. Measuring performance is tricky, but we attempted to measure a few different scenarios with both setups. The results can be seen&nbsp;below.</p><p>Keep in mind that Ahrefs frontend setup has specific characteristics, which affect the performance measurements:</p><ul><li>Before migration: Dune generated ml files from atd files, then ReScript build tool bsb built all hand-written source files plus the ones generated from atd&nbsp;files.</li><li>After migration: everything is built with Dune and&nbsp;Melange.</li></ul><p>All measurements were taken on a node with 2x AMD EPYC 7742 cpu @3.2 GHz (nproc=256), 1TB RAM, Debian 11 x86_64 GNU/Linux. The build target is always the entire Ahrefs frontend codebase.</p><p><strong>Cold build:</strong></p><ul><li>Before: real 0m28.232s, user 9m23.883s, sys 13m33.939s</li><li>After: real 1m14.208s, user 10m33.708s, sys 5m45.644s</li></ul><p><strong>Warm build</strong>, noop (no file is&nbsp;built):</p><ul><li>Before: real 0m14.687s, user 3m17.058s, sys 3m57.903s</li><li>After: real 0m21.895s, user 0m20.528s, sys&nbsp;0m1.372s</li></ul><p><strong>Watch mode, modifying an &ldquo;edge&rdquo; file</strong> with almost no reverse dependencies:</p><ul><li>Before: 1002ms</li><li>After: 1576ms</li></ul><p><strong>Watch mode, modifying an &ldquo;inner&rdquo; file</strong> belonging to a library, with many reverse dependencies:</p><ul><li>Before: 7032ms</li><li>After: 15394ms</li></ul><p>In general, Melange and Dune are slower than ReScript for cold builds in our setup. However, the differences are smaller for warm builds. For watch mode, the difference gets reduced when modifying edge&nbsp;files.</p><p>There is room for improvement in the way the Melange and Dune rules are arranged so that cold builds can get faster. For example, delaying some <a href="https://github.com/melange-re/melange/issues/464">optimizations in Melange</a> might allow to parallelize more&nbsp;work.</p><h4>Conclusions</h4><p>The results so far are quite encouraging. These are some of the things that are possible thanks to the deeper integration between Dune and Melange, and its application within the Ahrefs codebase:</p><ul><li>The same OCaml compiler is used on both frontend and backend codebases.</li><li>Access to all the bug fixes, error improvements, and new features that the OCaml compiler team added between versions 4.06 and 4.14 of the compiler.</li><li>A shared developer environment across teams, including editor extensions, OCaml LSP server, etc. No more need to maintain a different set of tooling for backend and frontend.</li><li>Removal of hand-written CI checks that were ensuring different tools in the frontend codebase would not access components from other tools. This is now solved by Dune libraries, and the OCaml compiler will complain if logical units try to reach outside their&nbsp;bounds.</li><li>Frontend and backend shared dependencies, such as <a href="https://github.com/anuragsoni/routes/">anuragsoni/routes</a>, can now be defined in a single place: an opam&nbsp;file.</li><li>Faster rebuilds and better watch mode, as Dune now controls all the build artifacts. Previously, Dune and ReScript were sharing responsibilities, which was leading to unnecessary rebuilds of some artifacts. Or alternatively, rebuilds were not starting when required due to the build system not tracking changes in some subsets of the&nbsp;sources.</li><li>Easier <a href="https://ocaml.org/docs/metaprogramming">PPX</a> maintenance, as there is no longer a need to publish pre-built versions of these&nbsp;tools.</li><li>Melange allows to run all ppxs <a href="https://github.com/melange-re/melange/pull/171">from a single executable file</a>, which has some nice performance benefits.</li><li>All the other advantages of using Dune: virtual libraries, watch mode, leverage integrations with tools like&nbsp;odoc&hellip;</li></ul><h4>What&rsquo;s next?</h4><p>We are excited about this project becoming a reality, and we believe that the deeper integration between OCaml and Melange through Dune, together with Melange&rsquo;s ergonomic integration with the JavaScript ecosystem through its bindings, can enable projects that were previously impossible to imagine. For example, full-stack React by hydrating components that are rendered <a href="https://github.com/ml-in-barcelona/server-reason-react/">server-side using native&nbsp;OCaml</a>.</p><p>Now, we have to make it easier for other people who are willing to try and use Melange and Dune. So our focus is shifting to documenting how Melange&nbsp;works.</p><p>There is a section for Melange in the Dune manual that will be included in the next stable release, and that can be consulted today in the latest branch: <a href="https://dune.readthedocs.io/en/latest/melange.html">https://dune.readthedocs.io/en/latest/melange.html</a>.</p><p>The next step will be to design and create a site where everyone can read and learn about what is needed to create and maintain a project using Melange and Dune. This site will include a playground, in the spirit of the <a href="https://reasonml.github.io/en/try">ReasonML one</a>, so that we can share snippets, see the resulting JavaScript compilation output, and iterate on ideas together.</p><p>Besides the above, we have plenty of other things we will be working on in the next months. We will share more information about the roadmap as soon as Dune 3.8 and its respective Melange version are published in the main public opam repository, which should happen in the next&nbsp;weeks.</p><h4>How to contribute?</h4><p>If you want to be a part of this, or you want to write or port your libraries to Melange, the best way to do so is by reaching out on the <a href="https://discord.gg/reasonml">ReasonML Discord</a>. There is a #melange dedicated channel where one can get help and advice on how to get&nbsp;started.</p><p>Otherwise, if you are missing features, find bugs, or run into confusing errors, please open an issue <a href="https://github.com/melange-re/melange">in the Melange public&nbsp;repo</a>.</p><p>We hope you share our excitement about this update. Our journey to integrate our frontend stack more naturally within the incredible language and ecosystem of OCaml will be well-documented. Stay tuned for further updates in the&nbsp;future!</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=b14f5ec56df4" width="1" height="1" alt=""/><hr/><p><a href="https://tech.ahrefs.com/ahrefs-is-now-built-with-melange-b14f5ec56df4">Ahrefs is now built with Melange</a> was originally published in <a href="https://tech.ahrefs.com">Ahrefs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>https://tech.ahrefs.com/ahrefs-is-now-built-with-melange-b14f5ec56df4?source=rss----303662d88bae--ocamlAhrefs is now built with Melange2023-05-03T19:06:58-00:00ahrefshttps://tarides.com/feed.xmltarides<p><a href="https://tn23.mini.debconf.org/">MinidebConf TN 23</a> was organised by Debian Developers and Villupuram Linux Users Group (VGLUG) as a precursor to DebConf 23 in September at Kochi, India. I had an opportunity to attend and speak at MiniDebConf TN.</p> +<p>The Irmin 3.5 and 3.6 releases brought much needed disk and memory optimisations to Octez context pruning for rolling nodes. The Irmin 3.7 release brings more improvements to rolling nodes and introduces the same optimised garbage collection design to archive nodes, allowing them to have the same small and efficient store for recent history and enabling future improvements for storing history on multiple disks. Integration of Irmin 3.7's features into Octez is in-progress and will ship in a future version of Octez. In the meantime, we welcome your comments and feedback on the optimisations and design choices. Join the conversation on the <a href="https://discuss.ocaml.org/">OCaml Discuss forum</a>, in the <a href="https://github.com/mirage/irmin/issues">GitHub Issues</a>, and through comments on the <a href="https://forum.tezosagora.org/">Tezos Agora post</a>.</p>https://tarides.com/blog/2023-05-05-optimising-archive-node-storage-for-tezosOptimising Archive Node Storage for Tezos2023-05-05T00:00:00-00:00tarideshttps://medium.com/feed/ahrefs/tagged/ocamlahrefs<h3>OCaml, all the way&nbsp;down</h3><figure><img src="https://cdn-images-1.medium.com/max/1024/0*cGDQZKJ2bKMARpj9" alt=""/><figcaption>Photo by <a href="https://unsplash.com/ja/@lg17?utm_source=medium&amp;utm_medium=referral">Lance Grandahl</a> on&nbsp;<a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h4>Some history</h4><p>In 2021, we decided to evaluate <a href="https://github.com/melange-re/melange">Melange</a> as an alternative to <a href="http://rescript-lang.org/">ReScript</a> for compiling Ahrefs&rsquo; frontend codebase. We wrote about the reasons that led us there, as well as the limitations we encountered at the time, in <a href="https://tech.ahrefs.com/building-ahrefs-codebase-with-melange-9f881f6d022b">a previous&nbsp;article</a>.</p><p>After this experiment, discussions continued inside the team. Switching to a different compiler, which was in a very early stage, involved quite some risk. But so did the continued use of ReScript, which seemed to be diverging further and further away from&nbsp;OCaml.</p><p>Finally, in September 2022 (during <a href="https://icfp22.sigplan.org/">ICFP in Ljubljana</a>), we decided to bite the bullet and kicked off a project to deepen the integration between <a href="http://dune.build/">Dune</a> (OCaml&rsquo;s most used build system) and Melange. This better integration was the key to solve two of the three limitations we had encountered during our initial exploration of&nbsp;Melange:</p><ul><li>Build speed would increase due to less work needed to parse dune files, and more efficient rules planning and execution.</li><li>Developer ergonomics would get better, as Melange would become a first-class citizen in Dune, with concepts like Dune <a href="https://dune.readthedocs.io/en/stable/dune-files.html#library">libraries</a> and other stanzas becoming available to Melange&nbsp;users.</li></ul><p>Ahrefs&rsquo; leadership backed the project and agreed to financially support the development of this tighter integration. With this support, we set about building a team that included Rudi Grinberg, who maintains Dune as part of its development team, and Antonio Monteiro, who created Melange and is also part of the Dune development team.</p><h4>Heads down</h4><p>During the following months, we focused on two tasks, iterating over multiple cycles where the progress on one task would inform the next steps to take for the&nbsp;other:</p><ol><li>Evolve Dune to add stanzas, fields, and documentation to support Melange projects.</li><li>Migrate Ahrefs&rsquo; frontend codebase to use the Melange compiler and Dune, adapt third-party libraries and bindings to Melange, and polish the editor integration, build scripts, and other aspects of the development experience.</li></ol><p>We believe that tackling these two tasks in parallel led us to better results, compared to a more waterfall-based approach. As we applied the changes over Ahrefs&rsquo; large-ish frontend codebase&#8202;&mdash;&#8202;it will soon reach 5000 modules&#8202;&mdash;&#8202;we kept finding and fixing bugs, improving the ergonomics of the Dune and Melange integration, and in general making the solution more robust, real-world ready, and developer-friendly.</p><p>Another upside of the way the project was implemented is that we developed it initially in stealth mode, keeping it quite private. By working on it within a tight-knit team, before making a public release, we could make progress faster. We believe that this approach saved future Melange users a lot of churn and burn caused by the multiple changes in Dune stanza options, Melange flags, and other configurations we changed along the way, as we learned more about this integration.</p><h4>Migration strategies</h4><p>Initially, our plan was to progressively migrate Ahrefs&rsquo; code to Melange. As the frontend codebase is divided into different tools, each being self-contained, we thought we could introduce Melange to build one tool, then another tool, gradually migrating them one by&nbsp;one.</p><p>However, this approach turned out to be too complex because configuring a development environment that works on both Melange and ReScript is challenging. As developers could be working on multiple tools during the same week, or even within the same day, we realized that it was unfeasible to reconfigure the environment every time a developer switched from a tool built with Melange to a tool built with ReScript.</p><p>Therefore, we changed our minds and opted for a one-shot migration. We would ensure that CI, development, and staging environments were working with Melange and Dune. And we would do this on separate branches, while still using ReScript on our main branch CI and development scripts. Once we were confident everything was building and functioning correctly with Melange, we switched all CI and development scripts to use the Melange and Dune commands. We tried to keep the PR that applied this switch as small as possible, with just a few hundreds of lines of changes so that we could switch back to ReScript if needed. In fact, after a first attempt in March, we had to switch back to ReScript due to some issues on the developer experience side, related to build performance and ergonomics, which took a few more weeks to&nbsp;solve.</p><p>In terms of package management and third-party Melange dependencies, we followed a more gradual approach. Dune is quite flexible when it comes to <a href="https://dune.readthedocs.io/en/stable/dune-files.html#vendored-dirs">vendoring</a>, so in the initial phase, we downloaded Melange libraries with npm, and had Dune include them in the project as if they were local sources. Now we have started migrating some of these libraries so that we can consume them using opam, the OCaml package manager. This will involve first publishing them in our private opam mirror, but the plan is to have them published in the <a href="https://ocaml.org/packages">public opam repository</a> in the future so that other Melange developers can also use&nbsp;them.</p><h4>Timings</h4><p>You may be curious about the performance differences between the previous and current approaches. Measuring performance is tricky, but we attempted to measure a few different scenarios with both setups. The results can be seen&nbsp;below.</p><p>Keep in mind that Ahrefs frontend setup has specific characteristics, which affect the performance measurements:</p><ul><li>Before migration: Dune generated ml files from atd files, then ReScript build tool bsb built all hand-written source files plus the ones generated from atd&nbsp;files.</li><li>After migration: everything is built with Dune and&nbsp;Melange.</li></ul><p>All measurements were taken on a node with 2x AMD EPYC 7742 cpu @3.2 GHz (nproc=256), 1TB RAM, Debian 11 x86_64 GNU/Linux. The build target is always the entire Ahrefs frontend codebase.</p><p><strong>Cold build:</strong></p><ul><li>Before: real 0m28.232s, user 9m23.883s, sys 13m33.939s</li><li>After: real 1m14.208s, user 10m33.708s, sys 5m45.644s</li></ul><p><strong>Warm build</strong>, noop (no file is&nbsp;built):</p><ul><li>Before: real 0m14.687s, user 3m17.058s, sys 3m57.903s</li><li>After: real 0m21.895s, user 0m20.528s, sys&nbsp;0m1.372s</li></ul><p><strong>Watch mode, modifying an &ldquo;edge&rdquo; file</strong> with almost no reverse dependencies:</p><ul><li>Before: 1002ms</li><li>After: 1576ms</li></ul><p><strong>Watch mode, modifying an &ldquo;inner&rdquo; file</strong> belonging to a library, with many reverse dependencies:</p><ul><li>Before: 7032ms</li><li>After: 15394ms</li></ul><p>In general, Melange and Dune are slower than ReScript for cold builds in our setup. However, the differences are smaller for warm builds. For watch mode, the difference gets reduced when modifying edge&nbsp;files.</p><p>There is room for improvement in the way the Melange and Dune rules are arranged so that cold builds can get faster. For example, delaying some <a href="https://github.com/melange-re/melange/issues/464">optimizations in Melange</a> might allow to parallelize more&nbsp;work.</p><h4>Conclusions</h4><p>The results so far are quite encouraging. These are some of the things that are possible thanks to the deeper integration between Dune and Melange, and its application within the Ahrefs codebase:</p><ul><li>The same OCaml compiler is used on both frontend and backend codebases.</li><li>Access to all the bug fixes, error improvements, and new features that the OCaml compiler team added between versions 4.06 and 4.14 of the compiler.</li><li>A shared developer environment across teams, including editor extensions, OCaml LSP server, etc. No more need to maintain a different set of tooling for backend and frontend.</li><li>Removal of hand-written CI checks that were ensuring different tools in the frontend codebase would not access components from other tools. This is now solved by Dune libraries, and the OCaml compiler will complain if logical units try to reach outside their&nbsp;bounds.</li><li>Frontend and backend shared dependencies, such as <a href="https://github.com/anuragsoni/routes/">anuragsoni/routes</a>, can now be defined in a single place: an opam&nbsp;file.</li><li>Faster rebuilds and better watch mode, as Dune now controls all the build artifacts. Previously, Dune and ReScript were sharing responsibilities, which was leading to unnecessary rebuilds of some artifacts. Or alternatively, rebuilds were not starting when required due to the build system not tracking changes in some subsets of the&nbsp;sources.</li><li>Easier <a href="https://ocaml.org/docs/metaprogramming">PPX</a> maintenance, as there is no longer a need to publish pre-built versions of these&nbsp;tools.</li><li>Melange allows to run all ppxs <a href="https://github.com/melange-re/melange/pull/171">from a single executable file</a>, which has some nice performance benefits.</li><li>All the other advantages of using Dune: virtual libraries, watch mode, leverage integrations with tools like&nbsp;odoc&hellip;</li></ul><h4>What&rsquo;s next?</h4><p>We are excited about this project becoming a reality, and we believe that the deeper integration between OCaml and Melange through Dune, together with Melange&rsquo;s ergonomic integration with the JavaScript ecosystem through its bindings, can enable projects that were previously impossible to imagine. For example, full-stack React by hydrating components that are rendered <a href="https://github.com/ml-in-barcelona/server-reason-react/">server-side using native&nbsp;OCaml</a>.</p><p>Now, we have to make it easier for other people who are willing to try and use Melange and Dune. So our focus is shifting to documenting how Melange&nbsp;works.</p><p>There is a section for Melange in the Dune manual that will be included in the next stable release, and that can be consulted today in the latest branch: <a href="https://dune.readthedocs.io/en/latest/melange.html">https://dune.readthedocs.io/en/latest/melange.html</a>.</p><p>The next step will be to design and create a site where everyone can read and learn about what is needed to create and maintain a project using Melange and Dune. This site will include a playground, in the spirit of the <a href="https://reasonml.github.io/en/try">ReasonML one</a>, so that we can share snippets, see the resulting JavaScript compilation output, and iterate on ideas together.</p><p>Besides the above, we have plenty of other things we will be working on in the next months. We will share more information about the roadmap as soon as Dune 3.8 and its respective Melange version are published in the main public opam repository, which should happen in the next&nbsp;weeks.</p><h4>How to contribute?</h4><p>If you want to be a part of this, or you want to write or port your libraries to Melange, the best way to do so is by reaching out on the <a href="https://discord.gg/reasonml">ReasonML Discord</a>. There is a #melange dedicated channel where one can get help and advice on how to get&nbsp;started.</p><p>Otherwise, if you are missing features, find bugs, or run into confusing errors, please open an issue <a href="https://github.com/melange-re/melange">in the Melange public&nbsp;repo</a>.</p><p>We hope you share our excitement about this update. Our journey to integrate our frontend stack more naturally within the incredible language and ecosystem of OCaml will be well-documented. Stay tuned for further updates in the&nbsp;future!</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=b14f5ec56df4" width="1" height="1" alt=""/><hr/><p><a href="https://tech.ahrefs.com/ahrefs-is-now-built-with-melange-b14f5ec56df4">Ahrefs is now built with Melange</a> was originally published in <a href="https://tech.ahrefs.com">Ahrefs</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>https://tech.ahrefs.com/ahrefs-is-now-built-with-melange-b14f5ec56df4?source=rss----303662d88bae--ocamlAhrefs is now built with Melange2023-05-03T19:06:58-00:00ahrefshttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#1">Lambda Capabilities</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#2">My Thoughts on OCaml vs Haskell/Rust in 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#3">Interesting OCaml Articles</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#4">Dream-html - DSL to build HTML, integrated with Dream</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#5">Trying the 7GUIs with LablGTK3/OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#6">Call for new opam-repository maintainers</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.02.htmlOCaml Weekly News, 02 May 20232023-05-02T12:00:00-00:00cwnhttps://tarides.com/feed.xmltarides<p><a href="https://tn23.mini.debconf.org/">MinidebConf TN 23</a> was organised by Debian Developers and Villupuram Linux Users Group (VGLUG) as a precursor to DebConf 23 in September at Kochi, India. I had an opportunity to attend and speak at MiniDebConf TN.</p> <p>I presented two sessions, one built on our experiences of introducing <a href="https://github.com/ocaml/code-of-conduct">a Code of Conduct</a> to an <a href="https://discuss.ocaml.org/t/adopting-the-ocaml-code-of-conduct/10870">open source community</a> <a href="https://hackmd.io/JIWCOrBfQ7CfzPqeDw4t2Q#/">(slides here</a>), and one called <a href="https://hackmd.io/wgB3EzlAQA6aTnQGyyp5Rw#/"><em>An Invitation to OCaml</em></a>, aimed at people with no prior OCaml experience. I was pleased to see a lot of folks getting interested in learning OCaml.</p> <p>Over the course of two days, I attended interesting sessions by speakers from across India and other parts of the world.</p> <h3 style="position:relative;"><a href="https://tarides.com/feed.xml#first-day" aria-label="first day permalink" class="anchor before"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>First Day</h3> @@ -118,7 +118,7 @@ users to safely express patterns that are awkward in OCaml, such as:</p> <p><a href="https://github.com/ranjithsiji">Renjith</a>, an active Wikipedian, presented their story of moving a Malayalam daily newspaper called <em>Janayugom</em> to an entirely FOSS tech stack. This saved the company a lot of money and stopped <em>Janayugom</em> from shutting down. Renjith emphasised the importance of free speech in a democracy and how small maganizes and newspapers play a role in it. Then Subin presented Varnam, an Indic input tool.</p> <hr/> <p>I was impressed by the efforts taken by <a href="https://vglug.org/">VGLUG volunteers</a> and the Debian India team to organise everything in a smooth manner. From the time we landed in Villupuram, we did not worry about anything. Transport, food, and lodging were all taken care of by VGLUG volunteers. I did not think such a vibrant community of FOSS users would operate in a rural town. The community is doing great work to uplift the lives of people in their Villupuram.</p> -<p>Best of all, it was great to meet old friends and make new ones. I hope to spread the joy of OCaml in more places.</p>https://tarides.com/blog/2023-04-28-ocaml-at-minidebconf-tn-2023OCaml at MinidebConf TN 20232023-04-28T00:00:00-00:00tarideshttps://blog.janestreet.com/feed.xmljanestreet<p>Our traders and researchers love Python for its agility and for its huge +<p>Best of all, it was great to meet old friends and make new ones. I hope to spread the joy of OCaml in more places.</p>https://tarides.com/blog/2023-04-28-ocaml-at-minidebconf-tn-2023OCaml at MinidebConf TN 20232023-04-28T00:00:00-00:00tarideshttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#1">Dream development stream + OCaml office hours</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#2">New release of Menhir (20230415)</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#3">Functional web applications running in the browser</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#4">Timmy 1.0.0, a high level time and calendar library</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#5">Wed, Apr 19 @ 7pm U.S. Central: Jonah Beckford on &quot;What distributing OCaml on Windows gave me (and you)&rdquo;</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#6">The OCaml Changelog</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#7">OUPS meetup may 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#8">3-year engineering position in Deducteam, Inria Paris-Saclay, France</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#9">RFC for a distributed process/actor model library</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#10">cfgen preview release v1.0.0-alpha.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#11">Other OCaml News</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.25.htmlOCaml Weekly News, 25 Apr 20232023-04-25T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#1">You started to learn OCaml less than 12 months ago? Please help us with our user survey on the OCaml.org Learning Area</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#2">First alpha release of OCaml 5.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#3">Interesting OCaml Articles</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#4">Porting a OCaml3-based game to the latest version of OCaml</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.18.htmlOCaml Weekly News, 18 Apr 20232023-04-18T12:00:00-00:00cwnhttps://blog.janestreet.com/feed.xmljanestreet<p>Our traders and researchers love Python for its agility and for its huge open-source ecosystem, especially when it comes to machine learning. But the heavy use of notebooks can make it difficult to support. Notebooks have a very different lifecycle than regular code, and aren&rsquo;t always @@ -126,7 +126,7 @@ rigorously version controlled. And while most of our code (much of it written in OCaml) lives in a monorepo, putting all notebooks there is difficult; many notebooks end up being stored all over the place.</p> -https://blog.janestreet.com/building-reproducible-python-environments-with-xars/Building reproducible Python environments with XARs2023-04-14T00:00:00-00:00janestreethttps://tarides.com/feed.xmltarides<p>What&rsquo;s the best way to spend a Friday evening? We think most people would agree that hacking on OCaml is pretty much at the top of that list (although full disclosure, our sample size for this data could be larger).</p> +https://blog.janestreet.com/building-reproducible-python-environments-with-xars/Building reproducible Python environments with XARs2023-04-14T00:00:00-00:00janestreethttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#1">OCAML'23: The OCaml Users and Developers Workshop</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#2">Ldp 0.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#3">Dune 3.7.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#4">cmarkit 0.1.0 &ndash; CommonMark parser and renderer for OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#5">ocamlmark &ndash; An ocamldoc to CommonMark bi-directional translation</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#6">kcas and kcas_data 0.2.4 for lock-free concurrent programming</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#7">Low-hanging fruit for a PR contribution to the OCaml runtime code (C code)</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#8">Wed, Apr 12 @ 7pm U.S. Central: Jonah Beckford on &quot;What distributing OCaml on Windows gave me (and you)&rdquo;</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#9">zbg: Zero Bullshit Git</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.11.htmlOCaml Weekly News, 11 Apr 20232023-04-11T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#1">OCaml-css 0.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#2">Bogue tutorials 0.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#3">Embedded Ocaml Templates 0.8</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#4">Available for Hire - Q2+3+4 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#5">Format strings and the OCaml compiler error messages</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#6">Other OCaml News</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.04.htmlOCaml Weekly News, 04 Apr 20232023-04-04T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#1">VOCaml: add and remove type annotations in VS Code</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#2">new versions of VS Code extensions Alcotest and Expect and Inline tests, now on Open VSX too</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#3">Docfd: TUI fuzzy document finder 0.2.3</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#4">Camomile 2.0.0 is out!</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#5">cid 0.1.0 - Content Identifiers in OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#6">Stk 0.1.0 (SDL-based GUI toolkit) and Chamo 4.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#7">Cyber-hackathon Frama-C + Binsec near Paris</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#8">Zanuda -- OCaml linter experiment</a></li></ol>https://alan.petitepomme.net/cwn/2023.03.28.htmlOCaml Weekly News, 28 Mar 20232023-03-28T12:00:00-00:00cwnhttps://tarides.com/feed.xmltarides<p>What&rsquo;s the best way to spend a Friday evening? We think most people would agree that hacking on OCaml is pretty much at the top of that list (although full disclosure, our sample size for this data could be larger).</p> <p>On Friday the 24th of February, Tarides&rsquo;s UK office hosted an evening of compiler hacking, presentations, and talks about all things OCaml. We&rsquo;re continuing a tradition that began in 2013, making this our 19th event, when we (then known as OCaml Labs) were based at the <a href="https://ocamllabs.io/compiler-hacking/">Computer Lab</a> in Cambridge. Just like back then, anyone with an interest in the OCaml compiler is welcome. At our recent event we had a mixture of students, industry professionals, and experts in attendance. If you'd like to create your own compiler hacking sessions, check out the <a href="https://github.com/tarides/compiler-hacking/wiki">wiki here</a>.</p> <p>Something that&rsquo;s changed since 2013 is that OCaml now represents a large chunk of the undergraduate Computer Science tripos at the University of Cambridge; not only as the implementation language for courses such as Compiler Construction &amp; Semantics of Programming Language, but literally as the first language students are taught! This means that we had quite a few undergraduates turn up &ndash; it was great to see such an interest in OCaml across different backgrounds.</p> <p><span class="gatsby-resp-image-wrapper" style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 680px; "> @@ -186,7 +186,7 @@ difficult; many notebooks end up being stored all over the place.</p> /static/2a82aadb22ee69e06e9b8c805dd7ce96/c44b8/Patrick.jpg 1360w, /static/2a82aadb22ee69e06e9b8c805dd7ce96/b62ab/Patrick.jpg 3581w" sizes="(max-width: 680px) 100vw, 680px" style="width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;" loading="lazy" decoding="async"/> </a> - </span></p>https://tarides.com/blog/2023-03-22-compiler-hacking-in-cambridge-is-backCompiler Hacking in Cambridge is Back!2023-03-22T00:00:00-00:00tarideshttps://watch.ocaml.org/feeds/videos.xml?videoChannelId=23emelle-tvhttps://watch.ocaml.org/w/u95Usnr46V4JCcdSdrBYimTalking with Gabriel Nordeborn ReScript, Relay and everything else!2023-03-17T21:20:37-00:00emelle-tvhttps://watch.ocaml.org/feeds/videos.xml?videoChannelId=23emelle-tv<p>If you would like to sponsor the show contact <a href="https://twitter.com/davesnx" target="_blank" rel="noopener noreferrer">https://twitter.com/davesnx</a></p> + </span></p>https://tarides.com/blog/2023-03-22-compiler-hacking-in-cambridge-is-backCompiler Hacking in Cambridge is Back!2023-03-22T00:00:00-00:00tarideshttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#1">Js_of_ocaml 5.1</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#2">Petrol 1.2.0 release - Postgres Support + User-extensible types</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#3">Docfd: TUI fuzzy document finder 0.2.3</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#4">OCamlot - Activitypub server written in OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#5">new versions of VS Code extensions Alcotest and Expect and Inline tests, now on Open VSX too</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#6">Autofonce, a modern runner for GNU Autotests suites</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#7">Release of piece_rope 0.9.0</a></li></ol>https://alan.petitepomme.net/cwn/2023.03.21.htmlOCaml Weekly News, 21 Mar 20232023-03-21T12:00:00-00:00cwnhttps://watch.ocaml.org/feeds/videos.xml?videoChannelId=23emelle-tvhttps://watch.ocaml.org/w/u95Usnr46V4JCcdSdrBYimTalking with Gabriel Nordeborn ReScript, Relay and everything else!2023-03-17T21:20:37-00:00emelle-tvhttps://watch.ocaml.org/feeds/videos.xml?videoChannelId=23emelle-tv<p>If you would like to sponsor the show contact <a href="https://twitter.com/davesnx" target="_blank" rel="noopener noreferrer">https://twitter.com/davesnx</a></p> <p>Consider sponsoring Ant&oacute;nio's work: <a href="https://github.com/sponsors/anmonteiro" target="_blank" rel="noopener noreferrer">https://github.com/sponsors/anmonteiro</a></p> https://watch.ocaml.org/w/aEabwHEfXTKGxTNi6Xhy2aTalking with António Monteiro about Melange, Esy, Reason, OCaml and more2023-03-17T21:10:48-00:00emelle-tvhttps://watch.ocaml.org/feeds/videos.xml?videoChannelId=23emelle-tv<p>Craig Ferguson is a software developer at Tarides. Join us in this episode to talk more about OCaml, MirageOS, Irmin and much more!</p> <p>We are looking for sponsors! If you'd like to support more content for Ocaml, Reason and ReScript just send us a message at <a target="_blank" rel="noopener noreferrer">emelletvshow@gmail.com</a> -- Watch live at <a href="https://www.twitch.tv/emelletv" target="_blank" rel="noopener noreferrer">https://www.twitch.tv/emelletv</a></p> diff --git a/data/planet-sources.yml b/data/planet-sources.yml index f66fd78049..9bbd850a83 100644 --- a/data/planet-sources.yml +++ b/data/planet-sources.yml @@ -9,3 +9,5 @@ sources: url: https://hannes.robur.coop/atom - name: emelle-tv url: https://watch.ocaml.org/feeds/videos.xml?videoChannelId=23 + - name: cwn + url: https://alan.petitepomme.net/cwn/cwn.rss diff --git a/data/planet/cwn.xml b/data/planet/cwn.xml new file mode 100644 index 0000000000..11aa354144 --- /dev/null +++ b/data/planet/cwn.xml @@ -0,0 +1,2 @@ + +https://alan.petitepomme.net/cwn/cwn.rsscwn2023-05-27T08:58:20-00:00https://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#1">Looking for example tsdl games</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#2">OCaml.org Newsletter: April 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#3">A bestiary of GADT examples?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#4">2023 StackOverflow Developer Survey</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#5">Release 0.5.4 of ~Fmlib_browser~</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#6">OCaml Platform Newsletter: April 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#7">Eio Developer Meetings</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.23.html#8">New major release of Parany (v14.0.0)</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.23.htmlOCaml Weekly News, 23 May 20232023-05-23T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#1">Rendering React in OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#2">Ahrefs is Hiring</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#3">tmx: Import 2D game maps with ease</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#4">Brr 0.0.5, the WebGPU edition</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#5">A bestiary of GADT examples?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#6">Open-source tool to make a static blog in OCaml?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#7">BER MetaOCaml N114, for OCaml 4.14.1</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#8">Building iOS apps with OCaml?</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#9">A Minimal Prototype of In-Package Search is on staging.ocaml.org</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#10">New release of Fix (20230505)</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.16.html#11">QCheck 0.21</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.16.htmlOCaml Weekly News, 16 May 20232023-05-16T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#1">Overview of libraries for showing OCaml values</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#2">kcas and kcas_data 0.3.0: Software Transactional Memory</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#3">OCaml.org Newsletter: March 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#4">Creating a tutorial on sequences</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#5">You started to learn OCaml less than 12 months ago? Please help us with our user survey on the OCaml.org Learning Area</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#6">Explorations on Package Management in Dune</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#7">Functional web applications running in the browser</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#8">Ahrefs is now built with Melange</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.09.html#9">Other OCaml News</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.09.htmlOCaml Weekly News, 09 May 20232023-05-09T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#1">Lambda Capabilities</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#2">My Thoughts on OCaml vs Haskell/Rust in 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#3">Interesting OCaml Articles</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#4">Dream-html - DSL to build HTML, integrated with Dream</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#5">Trying the 7GUIs with LablGTK3/OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.05.02.html#6">Call for new opam-repository maintainers</a></li></ol>https://alan.petitepomme.net/cwn/2023.05.02.htmlOCaml Weekly News, 02 May 20232023-05-02T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#1">Dream development stream + OCaml office hours</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#2">New release of Menhir (20230415)</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#3">Functional web applications running in the browser</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#4">Timmy 1.0.0, a high level time and calendar library</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#5">Wed, Apr 19 @ 7pm U.S. Central: Jonah Beckford on &quot;What distributing OCaml on Windows gave me (and you)&rdquo;</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#6">The OCaml Changelog</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#7">OUPS meetup may 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#8">3-year engineering position in Deducteam, Inria Paris-Saclay, France</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#9">RFC for a distributed process/actor model library</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#10">cfgen preview release v1.0.0-alpha.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.25.html#11">Other OCaml News</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.25.htmlOCaml Weekly News, 25 Apr 20232023-04-25T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#1">You started to learn OCaml less than 12 months ago? Please help us with our user survey on the OCaml.org Learning Area</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#2">First alpha release of OCaml 5.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#3">Interesting OCaml Articles</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.18.html#4">Porting a OCaml3-based game to the latest version of OCaml</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.18.htmlOCaml Weekly News, 18 Apr 20232023-04-18T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#1">OCAML'23: The OCaml Users and Developers Workshop</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#2">Ldp 0.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#3">Dune 3.7.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#4">cmarkit 0.1.0 &ndash; CommonMark parser and renderer for OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#5">ocamlmark &ndash; An ocamldoc to CommonMark bi-directional translation</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#6">kcas and kcas_data 0.2.4 for lock-free concurrent programming</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#7">Low-hanging fruit for a PR contribution to the OCaml runtime code (C code)</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#8">Wed, Apr 12 @ 7pm U.S. Central: Jonah Beckford on &quot;What distributing OCaml on Windows gave me (and you)&rdquo;</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.11.html#9">zbg: Zero Bullshit Git</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.11.htmlOCaml Weekly News, 11 Apr 20232023-04-11T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#1">OCaml-css 0.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#2">Bogue tutorials 0.1.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#3">Embedded Ocaml Templates 0.8</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#4">Available for Hire - Q2+3+4 2023</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#5">Format strings and the OCaml compiler error messages</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.04.04.html#6">Other OCaml News</a></li></ol>https://alan.petitepomme.net/cwn/2023.04.04.htmlOCaml Weekly News, 04 Apr 20232023-04-04T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#1">VOCaml: add and remove type annotations in VS Code</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#2">new versions of VS Code extensions Alcotest and Expect and Inline tests, now on Open VSX too</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#3">Docfd: TUI fuzzy document finder 0.2.3</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#4">Camomile 2.0.0 is out!</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#5">cid 0.1.0 - Content Identifiers in OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#6">Stk 0.1.0 (SDL-based GUI toolkit) and Chamo 4.0</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#7">Cyber-hackathon Frama-C + Binsec near Paris</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.28.html#8">Zanuda -- OCaml linter experiment</a></li></ol>https://alan.petitepomme.net/cwn/2023.03.28.htmlOCaml Weekly News, 28 Mar 20232023-03-28T12:00:00-00:00cwnhttps://alan.petitepomme.net/cwn/cwn.rsscwn<ol><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#1">Js_of_ocaml 5.1</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#2">Petrol 1.2.0 release - Postgres Support + User-extensible types</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#3">Docfd: TUI fuzzy document finder 0.2.3</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#4">OCamlot - Activitypub server written in OCaml</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#5">new versions of VS Code extensions Alcotest and Expect and Inline tests, now on Open VSX too</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#6">Autofonce, a modern runner for GNU Autotests suites</a></li><li><a href="https://alan.petitepomme.net/cwn/2023.03.21.html#7">Release of piece_rope 0.9.0</a></li></ol>https://alan.petitepomme.net/cwn/2023.03.21.htmlOCaml Weekly News, 21 Mar 20232023-03-21T12:00:00-00:00cwn \ No newline at end of file diff --git a/data/planet/cwn/ocaml-weekly-news-02-may-2023.md b/data/planet/cwn/ocaml-weekly-news-02-may-2023.md new file mode 100644 index 0000000000..f3fd297c45 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-02-may-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 02 May 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.05.02.html +date: 2023-05-02T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. Lambda Capabilities
  2. My Thoughts on OCaml vs Haskell/Rust in 2023
  3. Interesting OCaml Articles
  4. Dream-html - DSL to build HTML, integrated with Dream
  5. Trying the 7GUIs with LablGTK3/OCaml
  6. Call for new opam-repository maintainers
diff --git a/data/planet/cwn/ocaml-weekly-news-04-apr-2023.md b/data/planet/cwn/ocaml-weekly-news-04-apr-2023.md new file mode 100644 index 0000000000..2ada8cb8d5 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-04-apr-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 04 Apr 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.04.04.html +date: 2023-04-04T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. OCaml-css 0.1.0
  2. Bogue tutorials 0.1.0
  3. Embedded Ocaml Templates 0.8
  4. Available for Hire - Q2+3+4 2023
  5. Format strings and the OCaml compiler error messages
  6. Other OCaml News
diff --git a/data/planet/cwn/ocaml-weekly-news-09-may-2023.md b/data/planet/cwn/ocaml-weekly-news-09-may-2023.md new file mode 100644 index 0000000000..cebc912776 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-09-may-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 09 May 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.05.09.html +date: 2023-05-09T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. Overview of libraries for showing OCaml values
  2. kcas and kcas_data 0.3.0: Software Transactional Memory
  3. OCaml.org Newsletter: March 2023
  4. Creating a tutorial on sequences
  5. You started to learn OCaml less than 12 months ago? Please help us with our user survey on the OCaml.org Learning Area
  6. Explorations on Package Management in Dune
  7. Functional web applications running in the browser
  8. Ahrefs is now built with Melange
  9. Other OCaml News
diff --git a/data/planet/cwn/ocaml-weekly-news-11-apr-2023.md b/data/planet/cwn/ocaml-weekly-news-11-apr-2023.md new file mode 100644 index 0000000000..100d6bcb2c --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-11-apr-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 11 Apr 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.04.11.html +date: 2023-04-11T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. OCAML'23: The OCaml Users and Developers Workshop
  2. Ldp 0.1.0
  3. Dune 3.7.0
  4. cmarkit 0.1.0 – CommonMark parser and renderer for OCaml
  5. ocamlmark – An ocamldoc to CommonMark bi-directional translation
  6. kcas and kcas_data 0.2.4 for lock-free concurrent programming
  7. Low-hanging fruit for a PR contribution to the OCaml runtime code (C code)
  8. Wed, Apr 12 @ 7pm U.S. Central: Jonah Beckford on "What distributing OCaml on Windows gave me (and you)”
  9. zbg: Zero Bullshit Git
diff --git a/data/planet/cwn/ocaml-weekly-news-16-may-2023.md b/data/planet/cwn/ocaml-weekly-news-16-may-2023.md new file mode 100644 index 0000000000..84f248e216 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-16-may-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 16 May 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.05.16.html +date: 2023-05-16T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. Rendering React in OCaml
  2. Ahrefs is Hiring
  3. tmx: Import 2D game maps with ease
  4. Brr 0.0.5, the WebGPU edition
  5. A bestiary of GADT examples?
  6. Open-source tool to make a static blog in OCaml?
  7. BER MetaOCaml N114, for OCaml 4.14.1
  8. Building iOS apps with OCaml?
  9. A Minimal Prototype of In-Package Search is on staging.ocaml.org
  10. New release of Fix (20230505)
  11. QCheck 0.21
diff --git a/data/planet/cwn/ocaml-weekly-news-18-apr-2023.md b/data/planet/cwn/ocaml-weekly-news-18-apr-2023.md new file mode 100644 index 0000000000..2e7e19b11d --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-18-apr-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 18 Apr 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.04.18.html +date: 2023-04-18T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. You started to learn OCaml less than 12 months ago? Please help us with our user survey on the OCaml.org Learning Area
  2. First alpha release of OCaml 5.1.0
  3. Interesting OCaml Articles
  4. Porting a OCaml3-based game to the latest version of OCaml
diff --git a/data/planet/cwn/ocaml-weekly-news-21-mar-2023.md b/data/planet/cwn/ocaml-weekly-news-21-mar-2023.md new file mode 100644 index 0000000000..b33c51f5b2 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-21-mar-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 21 Mar 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.03.21.html +date: 2023-03-21T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. Js_of_ocaml 5.1
  2. Petrol 1.2.0 release - Postgres Support + User-extensible types
  3. Docfd: TUI fuzzy document finder 0.2.3
  4. OCamlot - Activitypub server written in OCaml
  5. new versions of VS Code extensions Alcotest and Expect and Inline tests, now on Open VSX too
  6. Autofonce, a modern runner for GNU Autotests suites
  7. Release of piece_rope 0.9.0
diff --git a/data/planet/cwn/ocaml-weekly-news-23-may-2023.md b/data/planet/cwn/ocaml-weekly-news-23-may-2023.md new file mode 100644 index 0000000000..8cd9acc651 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-23-may-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 23 May 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.05.23.html +date: 2023-05-23T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. Looking for example tsdl games
  2. OCaml.org Newsletter: April 2023
  3. A bestiary of GADT examples?
  4. 2023 StackOverflow Developer Survey
  5. Release 0.5.4 of ~Fmlib_browser~
  6. OCaml Platform Newsletter: April 2023
  7. Eio Developer Meetings
  8. New major release of Parany (v14.0.0)
diff --git a/data/planet/cwn/ocaml-weekly-news-25-apr-2023.md b/data/planet/cwn/ocaml-weekly-news-25-apr-2023.md new file mode 100644 index 0000000000..d478f7b582 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-25-apr-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 25 Apr 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.04.25.html +date: 2023-04-25T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. Dream development stream + OCaml office hours
  2. New release of Menhir (20230415)
  3. Functional web applications running in the browser
  4. Timmy 1.0.0, a high level time and calendar library
  5. Wed, Apr 19 @ 7pm U.S. Central: Jonah Beckford on "What distributing OCaml on Windows gave me (and you)”
  6. The OCaml Changelog
  7. OUPS meetup may 2023
  8. 3-year engineering position in Deducteam, Inria Paris-Saclay, France
  9. RFC for a distributed process/actor model library
  10. cfgen preview release v1.0.0-alpha.0
  11. Other OCaml News
diff --git a/data/planet/cwn/ocaml-weekly-news-28-mar-2023.md b/data/planet/cwn/ocaml-weekly-news-28-mar-2023.md new file mode 100644 index 0000000000..b2b4ea0771 --- /dev/null +++ b/data/planet/cwn/ocaml-weekly-news-28-mar-2023.md @@ -0,0 +1,12 @@ +--- +title: OCaml Weekly News, 28 Mar 2023 +description: +url: https://alan.petitepomme.net/cwn/2023.03.28.html +date: 2023-03-28T12:00:00-00:00 +preview_image: +featured: +authors: +- cwn +--- + +
  1. VOCaml: add and remove type annotations in VS Code
  2. new versions of VS Code extensions Alcotest and Expect and Inline tests, now on Open VSX too
  3. Docfd: TUI fuzzy document finder 0.2.3
  4. Camomile 2.0.0 is out!
  5. cid 0.1.0 - Content Identifiers in OCaml
  6. Stk 0.1.0 (SDL-based GUI toolkit) and Chamo 4.0
  7. Cyber-hackathon Frama-C + Binsec near Paris
  8. Zanuda -- OCaml linter experiment