[cwn] Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt
alan.schmitt at polytechnique.org
Tue Jan 17 00:37:43 PST 2023
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 at 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.schmitt at 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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/caml-news-weekly/attachments/20230117/703b1868/attachment-0001.html>
More information about the caml-news-weekly
mailing list