Hello Here is the latest OCaml Weekly News, for the week of January 10 to 17, 2023.
Table of Contents ───────────────── Installing Windows OCaml 5.0.0 in opam Release of Mehari 0.1 Outreachy Summer 2023 Petrol 1.0.0 - A high-level typed SQL API for OCaml designed to go fast! ocaml-search 0.1.1 - In-memory Search Index for OCaml values Old CWN Installing Windows OCaml 5.0.0 in opam ══════════════════════════════════════ Archive: <https://discuss.ocaml.org/t/pre-ann-installing-windows-ocaml-5-0-0-in-opam/11150/1> David Allsopp announced ─────────────────────── One of opam 2.2’s headline features is that both “upstream” opam (i.e. `opam' built from un-patched sources from [ocaml/opam]) and “un-forked” opam-repository (i.e. [ocaml/opam-repository]) finally provide native Windows opam switches. We’re aiming to get an alpha release of this out in the coming weeks, but I’ve had various requests directly for how to use OCaml 5.0 with opam-repository-mingw in the meantime, so I’m just sharing this temporary solution, in case it’s of use to others. I have a demonstration workflow at <https://github.com/dra27/ocaml5-ci-demo> with [setup-ocaml]. It shows the commands necessary for local use: ┌──── │ - run: opam repo add dra27 git+https://github.com/dra27/opam-repository#windows-5.0 --all --set-default │ - run: opam switch create 5.0 --packages=ocaml.5.0.0,ocaml-option-mingw │ - run: opam exec --switch=5.0 -- ocamlopt -config │ - run: opam install --switch=5.0 utop └──── and also how to use it directly in a workflow: ┌──── │ - name: Set-up OCaml │ uses: ocaml/setup-ocaml@v2 │ with: │ ocaml-compiler: ocaml.5.0.0,ocaml-option-mingw │ opam-repositories: | │ dra27: https://github.com/dra27/opam-repository.git#windows-5.0 │ default: https://github.com/fdopen/opam-repository-mingw.git#opam2 └──── The `windows-5.0' branch adds just enough to provide the OCaml 5.0.0 package for mingw-w64 by patching `ocaml-variants.5.0.0+options' (rather than providing `ocaml-variants.5.0.0+mingw64'). Unless you expressly select `ocaml-variants.5.0.0+options', it’ll actually pick up a version patched with [ocaml/ocaml#11846]. The only change once the alpha release comes out should be the removal of the `opam repo add dra27' part. [ocaml/opam] <https://github.com/ocaml/opam> [ocaml/opam-repository] <https://github.com/ocaml/opam-repository> [setup-ocaml] <https://github.com/ocaml/setup-ocaml> [ocaml/ocaml#11846] <https://github.com/ocaml/ocaml/pull/11846> Release of Mehari 0.1 ═════════════════════ Archive: <https://discuss.ocaml.org/t/ann-release-of-mehari-0-1/11158/1> Tim ats announced ───────────────── @artichaut and I are very pleased to announce the first release of Mehari. [Mehari] was created with the aim of offering a cross-platform framework to create [Gemini] applications. Gemini is a lightweight alternative protocol to HTTP and Gopher, which runs on top of TLS. On the “Geminispace”, there are mainly static content like blogs and other applications like games, BBS, etc. Mehari API’s is largely inspired by [Dream]: it consists of a single module, and is pretty similar, there are handlers, routes, middlewares, etc. Among the features, there are: • Cross-platform: the library provides many IO modules (Lwt, Mirage, Eio) • MIME type inference (using experimental [Conan] support) • Rate limit : it is easy to rate limit access to a route or to the whole server • Virtual hosting : hostname verification with SNI or request URL • Proxy: Ability to act as a proxy • CGI support with environment variables • Long-running TCP connection : incremental creation of the response body Examples of use are available on the [GitHub repository]. Documentation is available [online] with a short tutorial explaining the basics. Currently, the library is in its infancy, the API is subject to change, so we are open to feedback and contribution, especially in terms of security. Mehari is our first [MirageOS]-compatible library, so the creation of unikernels is experimental, and we’d love to get feedback on it. [Mehari] <https://github.com/Psi-Prod/Mehari/> [Gemini] <https://gemini.circumlunar.space/> [Dream] <https://aantron.github.io/dream/> [Conan] <https://discuss.ocaml.org/t/ann-first-release-of-conan-the-detective-to-recognize-your-file/> [GitHub repository] <https://github.com/Psi-Prod/Mehari/tree/master/examples> [online] <https://docs.heyplzlookat.me/mehari> [MirageOS] <https://mirage.io/> Outreachy Summer 2023 ═════════════════════ Archive: <https://discuss.ocaml.org/t/outreachy-summer-2023/11159/1> Patrick Ferris announced ──────────────────────── Yep, it’s that time of the year again! Outreachy has officially started asking for organisations and mentors for the Summer 2023 round. What is Outreachy? Outreachy is a paid, remote internship program. Outreachy promotes diversity in open source and open science. Our internships are for people who face under-representation, and discrimination or systemic bias in the technology industry of their country. Given the long discussion in <https://discuss.ocaml.org/t/what-are-the-biggest-reasons-newcomers-give-up-on-ocaml/10958> I can guarantee you that if you want some more really good answers, participating in Outreachy is one way to do that! To help get a feel for what is to be a mentor, Outreachy will be holding a livestreamed call with previous mentors taking part which should be available on peertube (I’ll post links when available). Important Dates ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ • Jan. 17 at 3pm UTC - Mentor chat on YouTube and PeerTube • Feb. 6 at 3pm UTC - Mentor chat on YouTube and PeerTube • Feb. 10 at 4pm UTC - Deadline for open source and open science communities to sign up to be an Outreachy mentoring organization • Feb. 24 at 4pm UTC - Deadline for mentors to submit project descriptions for May 2023 interns to work on This round ╌╌╌╌╌╌╌╌╌╌ We had some excellent proposals for projects working on the compiler but unfortunately in the end no intern was found for it, please don’t be disheartened by this and I hope to see more projects suggested. I’ve had the great fortune of working with [Prisca] on [ocaml-topojson] which has come on leaps and bounds thanks to her work! We’ll have a proper debrief towards the end of the project like the previous two rounds, although it may be a little shorter given the OCaml community only has one intern this round. The older, but still relevant post <https://discuss.ocaml.org/t/become-an-outreachy-mentor-support-the-growth-and-diversity-of-the-ocaml-community/8213> contains some more information about being a mentor which you may want to take a look at. Please uses this thread for any questions, ideas or thoughts. Thank you :camel: ! [Prisca] <https://prisca-chidimma.dreamwidth.org> [ocaml-topojson] <https://github.com/geocaml/ocaml-topojson> Patrick Ferris later added ────────────────────────── Friendly reminder the live chat will take place on <https://diode.zone/a/outreachy> tomorrow (17th Jan. 2023) at 3pm UTC. Whilst primarily focused on helping prospective applicants, it is still super useful for mentors to understand the process to help them out when the time comes. Petrol 1.0.0 - A high-level typed SQL API for OCaml designed to go fast! ════════════════════════════════════════════════════════════════════════ Archive: <https://discuss.ocaml.org/t/ann-petrol-1-0-0-a-high-level-typed-sql-api-for-ocaml-designed-to-go-fast/11166/1> Kiran Gopinathan announced ────────────────────────── Heyo! Pleased to annouce the release of a new library that I’ve been working on for some personal projects, but thought might be useful for others. *Petrol* is a Free software library that provides a high-level OCaml API for interacting with SQL databases. The aim of this interface is to provide a type-safe API to allow developers to define their SQL tables and queries directly in OCaml, thereby avoiding the impedence mismatch and fragility that comes with having to directly write SQL code, as is typical in a normal Caqti-based project. ┌──── │ open Petrol │ │ (* define a new schema *) │ let schema = StaticSchema.init () │ │ (* declare a table *) │ let example_table, Expr.[name; age] = │ StaticSchema.declare_table schema ~name:"example" │ Schema.[ │ field "name" ~ty:Type.text; │ field "age" ~ty:Type.int │ ] └──── Petrol’s DSL allows you to express complex SQL queries as simple OCaml function compositions: ┌──── │ (* create a query *) │ let insert_person ~name:n ~age:a db = │ Query.insert ~table:example_table │ ~values:Expr.[ │ name := s n; │ age := i a │ ] │ |> Request.make_zero │ |> Petrol.exec db └──── Another selling point of Petrol is that it comes out of the box with a versioning system to gracefully allow changing the schemas in your application over time - this and more is described in the documentation. <https://github.com/gopiandcode/petrol> Anyway, as usual, I’ve tried to spend some quality time tuning the documentation to make it as easy to pick up as possible, so feel free to have a gander: <https://gopiandcode.github.io/petrol/petrol/index.html> ocaml-search 0.1.1 - In-memory Search Index for OCaml values ════════════════════════════════════════════════════════════ Archive: <https://discuss.ocaml.org/t/ann-ocaml-search-0-1-1-in-memory-search-index-for-ocaml-values/11179/1> Patrick Ferris announced ──────────────────────── I’m happy to announce the release of a little OCaml library for doing in-memory searches over OCaml values: [ocaml-search]. Here’s a quick example: ┌──── │ module Book = struct │ type t = { │ title : string; │ author : string; │ } │ end │ │ let books : Book.t list = │ [ │ { title = "Dune"; author = "Frank Herbet" }; │ { title = "The Day of the Triffids"; author = "John Wyndham" }; │ { title = "The Remains of the Day"; author = "Kazuo Ishiguro" } │ ] │ │ module Mono = Search.Tfidf.Mono (Search.Uids.String) (Book) │ let search = Mono.empty () └──── You can then add an index to your search index along with the documents. ┌──── │ Mono.add_index search (fun t -> t.title); │ List.iter (fun doc -> Mono.add_document search doc.Book.title doc) books └──── Before finally being able to search. ┌──── │ Mono.search search "day";; │ - : Mono.doc list = │ [{Book.title = "The Remains of the Day"; author = "Kazuo Ishiguro"}; │ {Book.title = "The Day of the Triffids"; author = "John Wyndham"}] └──── The [README] provides more thorough documentation and also explains how it can also provide a heterogeneous search index should you want it. I have plans to make the library more easily extendible with your own search strategies, but thought the initial TF-IDF implementation might already be useful. This library is heavily inspired by [js-search] without which it wouldn’t exist. Happy Hacking :camel: [ocaml-search] <https://github.com/patricoferris/ocaml-search> [README] <https://github.com/patricoferris/ocaml-search> [js-search] <https://github.com/bvaughn/js-search> Old CWN ═══════ If you happen to miss a CWN, you can [send me a message] and I’ll mail it to you, or go take a look at [the archive] or the [RSS feed of the archives]. If you also wish to receive it every week by mail, you may subscribe [online]. [Alan Schmitt] [send me a message] <mailto:alan.schm...@polytechnique.org> [the archive] <https://alan.petitepomme.net/cwn/> [RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss> [online] <http://lists.idyll.org/listinfo/caml-news-weekly/> [Alan Schmitt] <https://alan.petitepomme.net/>
_______________________________________________ caml-news-weekly mailing list caml-news-weekly@lists.idyll.org http://lists.idyll.org/listinfo/caml-news-weekly