From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 42DC15D5 for ; Tue, 1 Feb 2022 13:07:24 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.88,333,1635199200"; d="scan'208,217";a="19081676" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 01 Feb 2022 14:07:23 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 08BCFE78DE; Tue, 1 Feb 2022 14:07:23 +0100 (CET) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id C2394E0C27 for ; Tue, 1 Feb 2022 14:07:20 +0100 (CET) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=flst=SQ=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org IronPort-SDR: nLTU2yFf/9jFSP48UlCsuOY/DKT3s/uteeUYmIYa4uQrhPEN11wEWTw+OpXUsi4veTcJnKSnN+ qZLrcItQXWrocWEd4BnKBy8xJXjBytEulNk2AN+q8q2Ty9QqBfrzFXuqGInOwfTkRIXSVRv+mf jFc9TdXcEcUK+yoFRwYQxyjh4uRERdbUusA4ZKDlaAPU4kWfkvlmoVMIsvxx7hqMY/fpF/CG/6 2Tv+jy/kULwdgU/sX5eJ374kncsVygoDE9jS85BARalZ2jQzfr/oZCBywV4+1k+Ce/zHX3RzN5 J3IQLZ+7L2/UcQNCR0vsVQTE X-IPAS-Result: =?us-ascii?q?A0ApBQARMPlhhyIeaIFaFoNuWS4ZAWRSBRYVBwgxhEmJA?= =?us-ascii?q?4gQgRUBghWGIYZxiBeFeBABAwENKgEFDgECBAEBghCGVgIeBgEFMxMBAgQBA?= =?us-ascii?q?QEBAwIDAQEBAQEBAwEBBQEBAQIBAQIDBAETAQEBAQ0LDggMBRATPGRkBIFLB?= =?us-ascii?q?IF0CzQNgjUMDAODdwMBGAECBgQGOwMnIwMUAQYDAhEBFwEUChcBEhQGAQGCa?= =?us-ascii?q?AGDFgUKkmScDH8ygQGDTgEDAgECCwMBDgkmg3aBZA0CFIEAF4JCg0pUSgGDA?= =?us-ascii?q?AmDBHkCJxCBVUSBFYIpSgdugkYGFwEBAQEBF4EkAQGDOBeCTgSRVw4+AQEmB?= =?us-ascii?q?hAkGg4FCAwICAYBARMDCgINIQgFHhUBHx0EDgUEBAEQFg0HBQYFBAILL5FaB?= =?us-ascii?q?wwfJY0rileVCTQHg0mBOAYLh1wFO4Echn2Fc4RTg0yDcoFLhReFOoZakR8hl?= =?us-ascii?q?ikggieFcnwIgQcJgkKCA5IQFAQEhS2BTiqBTR4MBzMaMEOCNQEzCUUBAwINA?= =?us-ascii?q?QICAwECAQIJAQEChRqIYS4WgycogT6BAgqCDzuFSQJAMwIBATQCBgEKAQEDC?= =?us-ascii?q?YVjAQEFEwsBhH8tghcBAQ?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:R4hk6amfwsktl9b4+6q4EiEgOALpDfIr3DAbv31ZSRFFG/Fw9v rPoB1173DJYVoqMk3I+urgBEDjex3hHPdOiOF7AV7IZmXbUQWTQb1K3M/L/HnLGiH19OJRvJ 0QEJRWOZnXFlY/qc775WCDYrMdKTS8gcKVuds= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.88,333,1635199200"; d="scan'208,217";a="4696438" X-MGA-submission: =?us-ascii?q?MDHDf9AiSj5sk+YrK6iPsV5iMDNiCUXuwUED1E?= =?us-ascii?q?q/a7ByW45FeYe86x0GLYSwi+z5RQ0krPi/MC3PIIiV9cQEiZwSNSN/n+?= =?us-ascii?q?elwSFDZ/K6nh75/S7rJ4XQcewqWY5DcdAT8GxWdAgqr5txEy7hfESBDE?= =?us-ascii?q?BFTjlOuAU05z82ebAdW7DTAw=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Feb 2022 14:07:19 +0100 Received: from set (set.irisa.fr [131.254.10.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 40461566487; Tue, 1 Feb 2022 14:01:00 +0100 (CET) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 01 Feb 2022 14:00:57 +0100 Message-ID: <875ypykagm.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Feb 1 14:01:01 2022 +0100 (CET)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.332265, queueID=D6F3856648A X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 18688 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hello Here is the latest OCaml Weekly News, for the week of January 25 to February 01, 2022. Table of Contents =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80 ppx_seq v0.1.1 OCaml Labs Joins Tarides For Diversity and the OCaml Community: Get Involved in Outreachy Summer 2022 Set up OCaml 2.0.0-beta13 First release of scfg Brr 0.0.3, a toolkit for programming browsers (anonymous?) polymorphic records 2 postdoc positions on Runtime Verification at CEA LIST, Universit=C3=A9 Pa= ris-Saclay, France Old CWN ppx_seq v0.1.1 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: hyphenrf announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80 Hello everyone, my first contribution to opam-repository has just been merged and is waiting to hit the caches of [opam.ocaml.org]. [ppx_seq] is a cute un-intrusive literal syntax for `Seq'. The rewriter is simple and has very small surface area: just `[%seq x; y; z; ...]' and `[%seq.empty]'. It tries to be maximally compatible with all OCaml releases from 4.07 (when `Seq' was introduced) to 4.14 and beyond The reason I created this rewriter is to make it an easier choice to reach first for `Seq' as a general data structure (instead of e.g. list). That wasn't quite attractive before because of how minimal the `Seq' module was, it was mostly used as an intermediate step between two types of collections, but now with 4.14 about to be released, `Seq' is becoming a first-class data structure with a very versatile API. I hope my little rewriter helps make it even more attractive to use. Check it out and maybe leave me some feedback. Thanks <3 [opam.ocaml.org] [ppx_seq] OCaml Labs Joins Tarides =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Thomas Gazagnaire announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80 Gemma Gordon (@gemmag) and I are delighted to announce that OCaml Labs, a spinout from the University of Cambridge, is joining Tarides. After successfully collaborating on many OCaml projects over the last four years, this alliance will formally combine the expertise of both groups. Joining forces will accelerate OCaml development and its broader adoption, and enable us to continue with our shared goal of bringing OCaml into mainstream use. Furthermore, it will bring the security, portability and performance of OCaml to a large spectrum of use-cases: from academic endeavours such as formal methods and existing threats within cyber security, to real-world applications for climate change, sustainable agriculture, and even space exploration! All of OCaml Labs=E2=80=99 existing responsibilities and open source commitments will migrate over to Tarides, and thanks to how closely the teams already work, business will continue without interruption to continuity or delivery. Gemma Gordon will step up as CEO of Tarides, and I will lead the technological vision and strategy as CTO. The OCaml 5.0 release will support multicore and effects handlers, influencing every aspect of the language and its ecosystem. The update will significantly improve both performance and user experience, whilst maintaining existing features that the community loves. Using the teams=E2=80=99 combined experience and zest for innovation, Tarides is looking to the future of the OCaml language and community with excitement. Since Tarides=E2=80=99 inception we have envisioned a future = where all OCaml applications are easily deployable as specialised, secure and energy-efficient MirageOS unikernels. We believe that this alliance is a step further in that direction. _This alliance will complement the commercial offerings of Tarides and contribute to Tarides' mission: empowering developers, communities and organisations to adopt OCaml as their primary programming experience by providing training, expertise and development services around the OCaml language._ Read the full announcement [here], including details of our goals and the focus for 2022. This alliance brings the headcount of Tarides up to 60+ people, all working towards making OCaml the best language for any, and every project. Join our team and reach out for commercial services at: [https://tarides.com/] [here] [https://tarides.com/] For Diversity and the OCaml Community: Get Involved in Outreachy Summer 2022 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90 Archive: Sonja Heinze announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 As @patricoferris [has mentioned] previously, the Outreachy call for open-source communities and project submissions has started. As a reminder, [Outreachy] is an initiative that provides a framework through which open-source communities can offer three month internships directed at people from any kind of under-represented background in open source. With that, Outreachy helps open-source communities grow on several levels: diversity, experience, size, and popularity. The OCaml community participated in Outreachy in summer 2019, summer 2020, [summer 2021], and currently in [winter 2021/22]. All our interns have done and are doing really amazing jobs, and summer 2022 is just around the corner! The following timeline illustrates the process: So let's start getting involved! [has mentioned] [Outreachy] [summer 2021] [winter 2021/22] Ways to Get Involved =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C Community members can take on different roles in the Outreachy effort, and all of them are very important! Maybe the most important (and most involved) role is being a mentor. Mentoring =E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2= =94=84 Mentors have two responsibilities: leading the project and guiding the interns/applicants. Leading the Project =E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2= =94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94= =88=E2=94=88=E2=94=88 One responsability is leading the project. Concretely, that means outlining an internship project, submitting a project description to Outreachy, making sure that the context repo for that project gets ready for the application/"contribution" phase, and guiding the project throughout the internship, including reacting to changes. All of that must match the Outreachy framework, which we [explained in detail] last round, based on the timeline structure shown above. [explained in detail] Guiding the Intern and the Applicants =E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2= =94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94= =88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88= =E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2=94=88=E2= =94=88=E2=94=88=E2=94=88=E2=94=88 Their other responsibility is personal guidance. During the application/"contribution" period, mentors answer questions and review code for multiple applicants. During the internship, they also offer pair-programming sessions and facilitate more specific guidance, and general support for their interns. All of that is usually quite time-intensive, so it's important to have some support from other community members and strong support from a concrete co-mentor. Co-mentoring =E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2= =94=84=E2=94=84=E2=94=84=E2=94=84 A co-mentor does the same job as described in the "Guiding the Intern and the Applicants" tasks above, so having a co-mentor is very important! Of course, if a co-mentor also wants to take part in the project's direction, that's great as well! This means that the line between co-mentoring and mentoring isn't always clear. Volunteering (aka "Acting as a Joker :bat:") =E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2= =94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94= =84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84= =E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2= =94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94= =84=E2=94=84=E2=94=84 Mentors and co-mentors receive a lot of general questions related to OCaml and programming in addition to specific questions about the project. That's where Outreachy volunteers can be very helpful! They help all applicants and interns across projects with (usually) project-unspecific questions and give a very important technical base support. Point Out Potential Project Ideas =E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2= =94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94= =84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84= =E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84 Apart from not having enough time, the main reason that stops folks from becoming a mentor is the lack of project ideas. So if you have potential project ideas, please point them out, even if you don't have time to mentor! Generally, a self-contained, uncontroversial, and incremental project makes the most suitable project for Outreachy. It's also important for a project to be associated with a repo that can serve as a basis for easy contributions during the application phase. When in doubt, don't keep your ideas to yourself. Any idea can be helpful! Prepare Your Repos =E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2= =94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94=84=E2=94= =84=E2=94=84 In general, if you maintain a repo, it's really nice to be welcoming to new contributors. Concretely, that means having clear contributing guidelines, good newcomer issues, and well-labeled issues. As a nice side-effect, this also makes your project a better target for future Outreachy projects. Ready to Get Involved? =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2= =95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95= =8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C If you've gotten interested in any of those roles or have any other comments, please just answer here in the thread. It would be super nice to get a discussion going and start our Outreachy efforts early! Sudha Parimala then said =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 I along with @shakthimaan @gs0510 are submitting a project: =E2=80=A2 Extend OCaml 5's parallel benchmark suite. The idea is to gather parallel benchmarks available elsewhere and make them available in our benchmark suite, to aid the development of the OCaml compiler and parallel programming libraries. Relevant repos: [sandmark] and [current-bench]. [sandmark] [current-bench] Set up OCaml 2.0.0-beta13 =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Sora Morimoto announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Changed =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C =E2=80=A2 Do not install opam-depext if it's not enabled. Fixed =E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C=E2=95=8C =E2=80=A2 Print a proper error if the version not found in the `.ocamlfor= mat' file. First release of scfg =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: zapashcanon announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 I'm pleased to announce the first release of [scfg] on opam. It provides a library and an executable to work with the [scfg configuration file format]. (disclaimer: scfg has been created by my good friend @emersion) Here's an example of an scfg file taken from the specification: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 train "Shinkansen" { =E2=94=82 model "E5" { =E2=94=82 max-speed 320km/h =E2=94=82 weight 453.5t =E2=94=82=20 =E2=94=82 lines-served "T=C5=8Dhoku" "Hokkaido" =E2=94=82 } =E2=94=82=20 =E2=94=82 model "E7" { =E2=94=82 max-speed 275km/h =E2=94=82 weight 540t =E2=94=82=20 =E2=94=82 lines-served "Hokuriku" "J=C5=8Detsu" =E2=94=82 } =E2=94=82 } =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Scfg is a file format designed to be simple and indeed the implementation was really straightforward. I'm planning to use it in small tools I wrote (mostly [sway] tools written in OCaml) but never released because I couldn't stand having to use TOML, YAML or JSON for them=E2=80=A6 The library provides an executable to validate and pretty-print an scfg file. It'll indent it properly, remove useless quoting and whitespaces: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 $ scfg spec.scfg =E2=94=82 train Shinkansen { =E2=94=82 model E5 { =E2=94=82 max-speed 320km/h =E2=94=82 weight 453.5t =E2=94=82 lines-served T=C5=8Dhoku Hokkaido =E2=94=82 } =E2=94=82 model E7 { =E2=94=82 max-speed 275km/h =E2=94=82 weight 540t =E2=94=82 lines-served Hokuriku J=C5=8Detsu =E2=94=82 } =E2=94=82 } =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 The library is made of four modules : `Types', `Parse', `Pp' and `Query'. The `Types' module simply defines the following types, which are all you need to deal with scfg: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 (** A directive has a name, a list of parameters and children (= a list of directive). *) =E2=94=82 type directive =3D =E2=94=82 { name : string =E2=94=82 ; params : string list =E2=94=82 ; children : directive list =E2=94=82 } =E2=94=82=20 =E2=94=82 (** A config is a list of directives. *) =E2=94=82 type config =3D directive list =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 The others modules can be used as follow: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 let file =3D {| =E2=94=82 train A-Train { =E2=94=82 bla bla bla =E2=94=82 } =E2=94=82 train "John Col Train" { =E2=94=82 tut tut tut =E2=94=82 } =E2=94=82 |} =E2=94=82=20 =E2=94=82 (* parsing the file *) =E2=94=82 let config =3D =E2=94=82 (* there's also a `Parse.from_file` function that should be m= ore useful *) =E2=94=82 match Scfg.Parse.from_string file with =E2=94=82 | Error e -> =E2=94=82 Format.eprintf "error: %s@." e; =E2=94=82 exit 1 =E2=94=82 | Ok config -> config =E2=94=82=20 =E2=94=82 (* printing the file *) =E2=94=82 let () =3D =E2=94=82 Format.printf "```scfg@.%a@.```@." Scfg.Pp.config config =E2=94=82=20 =E2=94=82 (* querying the file *) =E2=94=82 let () =3D =E2=94=82 (* gets the first directive with the name `train` *) =E2=94=82 match Scfg.Query.get_dir "train" config with =E2=94=82 | None -> Format.printf "No train found.@." =E2=94=82 | Some train -> ( =E2=94=82 (* get the parameter at index 0 in the `train` directive *) =E2=94=82 match Scfg.Query.get_param 0 train with =E2=94=82 | Error _e -> Format.printf "Train has no name.@." =E2=94=82 | Ok name -> Format.printf "The first train is `%s`.@." nam= e ) =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 For more have a look at the [project's README], the [documentation] or feel free to ask here ! :partying_face: [scfg] [scfg configuration file format] [sway] [project's README] [documentation] Brr 0.0.3, a toolkit for programming browsers =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90 Archive: Daniel B=C3=BCnzli announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 It's my pleasure to announce the release `0.0.3' of [`Brr'], a toolkit for programming browsers in OCaml with the [`js_of_ocaml'] compiler. Once it has made it to the repo, install with `opam install brr' and consult the [API docs and manuals] (or via `odig doc brr'). Among small additions and fixes, this release brings support for `js_of_ocaml' 4.0.0. Thanks to Hugo Heuzard (@hhugo) who has made the ground work in `js_of_ocaml' this means that: 1. `Brr', `js_of_ocaml' and ([soon]) `gen_js_api' JavaScript bindings can now all be used in the same program without problems (issue [#2]). 2. You no longer need to specify the `-no-check-prim' flag at bytecode link time. Linking against the `brr' library is sufficient, see the [build instructions]. The [release notes] have all the details. [`Brr'] [`js_of_ocaml'] [API docs and manuals] [soon] [#2] [build instructions] [release notes] (anonymous?) polymorphic records =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: nrolland asked =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Is there a way to avoid to create records only to preserve polymorphism ? Say, for this, in haskell style =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 h :: (forall r. (r -> a) -> (f r -> f b)) -> f a -> f b =E2=94=82 h malg =3D malg id =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 octachron replied =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80 You can use objects, they can have polymorphic methods: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 let f (id: 'a>) =3D id#f 0, id#f "zero" =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 Ma=C3=ABlan also replied =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80 The following doesn=E2=80=99t help reducing the syntactic noise, but note= that when using a record for non-prenex polymorphism like this, your record has only one field and is immutable, so (with a recent enough OCaml) you can unbox it and get rid of the runtime overhead: =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80 =E2=94=82 type ('a, 'b) fwrap =3D { f : 'r. ('r -> 'a) -> 'r list -> 'b l= ist } [@@unboxed] =E2=94=82=20 =E2=94=82 let apply_id : type a b. (a, b) fwrap -> a list -> b list =3D =E2=94=82 fun w xs -> w.f Fun.id xs =E2=94=82 (* is compiled the same as just: *) =E2=94=82 let apply_id_magic : type a b. (a, b) fwrap -> a list -> b list= =3D =E2=94=82 fun w xs -> (Obj.magic w) Fun.id xs =E2=94=82=20 =E2=94=82 let mwrap : type a. (a, a) fwrap =3D { f =3D List.map } =E2=94=82 (* is compiled to nothing at all (alias of List.map). *) =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80 2 postdoc positions on Runtime Verification at CEA LIST, Universit=C3=A9 Pa= ris-Saclay, France =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95= =90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90= =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2= =95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 Archive: Julien Signoles announced =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80 The Software Safety and Security Lab at CEA LIST, Universit=C3=A9 Paris-Saclay, France has 2 open postdoc positions in the area of runtime verification for code safety and security: =E2=80=A2 Designing Compilation Techniques for Improving Efficiency of E-= ACSL, a Runtime Assertion Checker for C Programs =E2=80=A2 Control Flow Integrity for Remote Attestation The candidates will: =E2=80=A2 solve challenging research problems; =E2=80=A2 implement their results in Frama-C, an industrial-strength open-source framework for analyses of C code; =E2=80=A2 evaluate their solutions on concrete benchmarks or/and use case= s; =E2=80=A2 publish their results in international conferences and journals. Strong knowledge in at least one of the following areas is welcome: =E2=80=A2 programming =E2=80=A2 OCaml and C =E2=80=A2 formal semantics =E2=80=A2 formal verification =E2=80=A2 runtime verification, static analysis, formal specification languages, =E2=80=A6 =E2=80=A2 compilation =E2=80=A2 code generation, program transformation, type system, =E2=80= =A6 Interested applicants should send a CV and a motivation letter to Julien Signoles (julien dot signoles at cea dot fr). Old CWN =E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90 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] [the archive] [RSS feed of the archives] [online] [Alan Schmitt] --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of January 25 to Februar= y 01, 2022.

ppx_seq v0.1.1

hyphenrf announced

Hello everyone, my first contribution to opam-repository has just been merg= ed and is waiting to hit the caches of opam.ocaml.org.

ppx_seq is a cute un-in= trusive literal syntax for Seq. The rewriter is simple and has very small surface area: just [%seq x; y; z; ...] and [%seq.empty]. It tries to be maximally compatible with all OCaml releases from 4.07 (when= Seq was introduced) to 4.14 and beyond

The reason I created this rewriter is to make it an easier choice to reach = first for Seq as a general data structure (instead of e.g. list). That wasn't quite attractive before becau= se of how minimal the Seq module was, it was mostly used as an intermediate step between two types of collections, b= ut now with 4.14 about to be released, Seq is becoming a first-class data structure with a very versa= tile API.

I hope my little rewriter helps make it even more attractive to use. Check = it out and maybe leave me some feedback. Thanks <3

OCaml Labs Joins Tarides

Thomas Gazagnaire announced

Gemma Gordon (@gemmag) and I are delighted to announce that OCaml Labs, a s= pinout from the University of Cambridge, is joining Tarides. After successfully collaborating on many OCaml projects= over the last four years, this alliance will formally combine the expertise of both groups. Joining forces will acc= elerate OCaml development and its broader adoption, and enable us to continue with our shared goal of bringing OCaml = into mainstream use. Furthermore, it will bring the security, portability and performance of OCaml to a large spectru= m of use-cases: from academic endeavours such as formal methods and existing threats within cyber security, to real-= world applications for climate change, sustainable agriculture, and even space exploration!

All of OCaml Labs=E2=80=99 existing responsibilities and open source commit= ments will migrate over to Tarides, and thanks to how closely the teams already work, business will continue without interrup= tion to continuity or delivery. Gemma Gordon will step up as CEO of Tarides, and I will lead the technological vi= sion and strategy as CTO.

The OCaml 5.0 release will support multicore and effects handlers, influenc= ing every aspect of the language and its ecosystem. The update will significantly improve both performance and user = experience, whilst maintaining existing features that the community loves. Using the teams=E2=80=99 combined experi= ence and zest for innovation, Tarides is looking to the future of the OCaml language and community with excitement. Since Ta= rides=E2=80=99 inception we have envisioned a future where all OCaml applications are easily deployable as specialised, s= ecure and energy-efficient MirageOS unikernels. We believe that this alliance is a step further in that directi= on.

_This alliance will complement the commercial offerings of Tarides and cont= ribute to Tarides' mission: empowering developers, communities and organisations to adopt OCaml as their primary p= rogramming experience by providing training, expertise and development services around the OCaml language._

Read the full announcement here, i= ncluding details of our goals and the focus for 2022. This alliance brings the headcount of Tarides up to 60+ people, all working= towards making OCaml the best language for any, and every project. Join our team and reach out for commercial serv= ices at: https://tarides.com/

For Diversity and the OCaml Community: Get Involved in Outreac= hy Summer 2022

Sonja Heinze announced

As @patricoferris has mentioned previously, the Outreachy call for open-source communities and project subm= issions has started. As a reminder, Outreachy is an initiative that p= rovides a framework through which open-source communities can offer three month internships directed at people from any k= ind of under-represented background in open source. With that, Outreachy helps open-source communities grow on sev= eral levels: diversity, experience, size, and popularity.

The OCaml community participated in Outreachy in summer 2019, summer 2020, = summer 2021, and currently in winter 2021/22. All our interns have done and are doing really amazing jobs, and summer 2022 is just around the corner! The f= ollowing timeline illustrates the process:

3D"DbzeiMO.png"

So let's start getting involved!

Ways to Get Involved

Community members can take on different roles in the Outreachy effort, and = all of them are very important! Maybe the most important (and most involved) role is being a mentor.

Mentoring

Mentors have two responsibilities: leading the project and guiding the inte= rns/applicants.

Leading the Project

One responsability is leading the project. Concretely, that means outlining= an internship project, submitting a project description to Outreachy, making sure that the context repo for tha= t project gets ready for the application/"contribution" phase, and guiding the project throughout the in= ternship, including reacting to changes. All of that must match the Outreachy framework, which we explained in detail last round, based on the timeline structure shown above.

Guiding the Intern and the Applicants

Their other responsibility is personal guidance. During the application/"co= ntribution" period, mentors answer questions and review code for multiple applicants. During the internship, t= hey also offer pair-programming sessions and facilitate more specific guidance, and general support for their intern= s.

All of that is usually quite time-intensive, so it's important to have some= support from other community members and strong support from a concrete co-mentor.

Co-mentoring

A co-mentor does the same job as described in the "Guiding the Intern and t= he Applicants" tasks above, so having a co-mentor is very important! Of course, if a co-mentor also wants to take p= art in the project's direction, that's great as well! This means that the line between co-mentoring and mentoring = isn't always clear.

Volunteering (aka "Acting as a Joker :bat:")

Mentors and co-mentors receive a lot of general questions related to OCaml = and programming in addition to specific questions about the project. That's where Outreachy volunteers can be very = helpful! They help all applicants and interns across projects with (usually) project-unspecific questions and giv= e a very important technical base support.

Point Out Potential Project Ideas

Apart from not having enough time, the main reason that stops folks from be= coming a mentor is the lack of project ideas. So if you have potential project ideas, please point them out, even = if you don't have time to mentor! Generally, a self-contained, uncontroversial, and incremental project makes= the most suitable project for Outreachy. It's also important for a project to be associated with a repo that can ser= ve as a basis for easy contributions during the application phase. When in doubt, don't keep your ideas to yours= elf. Any idea can be helpful!

Prepare Your Repos

In general, if you maintain a repo, it's really nice to be welcoming to new= contributors. Concretely, that means having clear contributing guidelines, good newcomer issues, and well-labele= d issues. As a nice side-effect, this also makes your project a better target for future Outreachy projects.

Ready to Get Involved?

If you've gotten interested in any of those roles or have any other comment= s, please just answer here in the thread. It would be super nice to get a discussion going and start our Outreachy ef= forts early!

Sudha Parimala then said

I along with @shakthimaan @gs0510 are submitting a project:

  • Extend OCaml 5's parallel benchmark suite.

The idea is to gather parallel benchmarks available elsewhere and make them= available in our benchmark suite, to aid the development of the OCaml compiler and parallel programming libraries. R= elevant repos: sandmark and current-bench.

Set up OCaml 2.0.0-beta13

Sora Morimoto announced

Changed

  • Do not install opam-depext if it's not enabled.

Fixed

  • Print a proper error if the version not found in the .ocamlformat= file.

https://github.com/ocaml/setup-ocaml/releases/tag/v2.0.0-beta13

First release of scfg

zapashcanon announced

I'm pleased to announce the first release of scfg on opam.

It provides a library and an executable to work with the scfg configuration file format. (disclaimer: scfg has been created by my good friend @emersion)

Here's an example of an scfg file taken from the specification:

train "Shinkansen" {
	model "E5" {
		max-speed 320km/h
		weight 453.5t

		lines-served "T=C5=8Dhoku" "Hokkaido"
	}

	model "E7" {
		max-speed 275km/h
		weight 540t

		lines-served "Hokuriku" "J=C5=8Detsu"
	}
}

Scfg is a file format designed to be simple and indeed the implementation w= as really straightforward. I'm planning to use it in small tools I wrote (mostly sway<= /a> tools written in OCaml) but never released because I couldn't stand having to use TOML, YAML or JSON for them…

The library provides an executable to validate and pretty-print an scfg fil= e. It'll indent it properly, remove useless quoting and whitespaces:

$ scfg spec.scfg
train Shinkansen {
  model E5 {
    max-speed 320km/h
    weight 453.5t
    lines-served T=C5=8Dhoku Hokkaido
  }
  model E7 {
    max-speed 275km/h
    weight 540t
    lines-served Hokuriku J=C5=8Detsu
  }
}

The library is made of four modules : Types, Parse, Pp and Query.

The Types module simply defines the following types, which are= all you need to deal with scfg:

(** A directiv=
e has a name, a list of parameters and children (a list of directive). *)
type directive =3D
  { name : string
  ; params : string list
  ; children : directive list
  }

(** A config is a list of directives. *)
type config =3D directive list

The others modules can be used as follow:

let file =3D {|
  train A-Train {
    bla bla bla
  }
  train "John Col Train" {
    tut tut tut
  }
|}

(* p=
arsing the file *)
let config =3D
  (* there's also a `Parse.from_file` function that should be more useful *)
  match Scfg.Parse.from_string file with=

  | Error=
 e ->
    Format.eprintf "error: %s@." e;
    exit 1
  | Ok co=
nfig -> config

(* p=
rinting the file *)
let () =3D
  Format.printf "```scfg@.%a@.```@." Scf=
g.Pp.config config

(* q=
uerying the file *)
let () =3D
  (* gets the first directive with the name `train` *)
  match Scfg.Query.get_dir "train" config with
  | None =
-> Format.printf "No train found.@."
  | Some =
train -> (
    (* get the parameter at index 0 in the `train` directive *)
    match Scfg.Query.get_param 0 train w=
ith
    | Error _e -> Format.printf "Train has no name.@."
    | Ok =
name -> Format.printf "The first train is `%s`.@." name )

For more have a look at the project's README, the documentation or feel = free to ask here ! :partying_face:

Brr 0.0.3, a toolkit for programming browsers

Daniel B=C3=BCnzli announced

It's my pleasure to announce the release 0.0.3 of Brr, a toolkit for programming browsers in OCaml with the js_of_ocaml compiler.

Once it has made it to the repo, install with opam install brr= and consult the API doc= s and manuals (or via odig doc brr).

Among small additions and fixes, this release brings support for js_o= f_ocaml 4.0.0. Thanks to Hugo Heuzard (@hhugo) who has made the ground work in js_of_ocaml this means that:

  1. Brr, js_of_ocaml and (soon) gen_js_api JavaSc= ript bindings can now all be used in the same program without problems (iss= ue #2).
  2. You no longer need to specify the -no-check-prim flag at b= ytecode link time. Linking against the brr library is sufficie= nt, see the build instructions.

The release notes have all the details.

(anonymous?) polymorphic records

nrolland asked

Is there a way to avoid to create records only to preserve polymorphism ?

Say, for this, in haskell style

h :: (forall r. (r -> a) -> (f r ->=
 f b)) -> f a -> f b
h malg =3D malg id

octachron replied

You can use objects, they can have polymorphic methods:

let f (id:<f:'a. 'a ->=
 'a>) =3D id#f 0, id#f "zero"

Ma=C3=ABlan also replied

The following doesn=E2=80=99t help reducing the syntactic noise, but note t= hat when using a record for non-prenex polymorphism like this, your record has only one field and is immutable, so= (with a recent enough OCaml) you can unbox it and get rid of the runtime overhead:

type ('a, 'b) fwrap =3D =
{ f : 'r. ('r -> 'a) -> 'r list -> 'b list } [@@unboxed]

let apply_id : type a b. (a, b) fwrap -> a list -> b list =3D
  fun xs -> w.f Fun.id xs
(* i=
s compiled the same as just: *)
let apply_id_magic : type a b. (a, b) fwrap -> a list -> b list =3D
  fun xs -> (Obj.magic w) Fun.id xs

let mwrap : =
type=
 a. (a, a) fwrap =3D { f =3D List.map }
(* i=
s compiled to nothing at all (alias of List.map). *)

2 postdoc positions on Runtime Verification at CEA LIST, Unive= rsit=C3=A9 Paris-Saclay, France

Julien Signoles announced

The Software Safety and Security Lab at CEA LIST, Universit=C3=A9 Paris-Sac= lay, France has 2 open postdoc positions in the area of runtime verification for code safety and security:

The candidates will:

  • solve challenging research problems;
  • implement their results in Frama-C, an industrial-strength open-source = framework for analyses of C code;
  • evaluate their solutions on concrete benchmarks or/and use cases;
  • publish their results in international conferences and journals.

Strong knowledge in at least one of the following areas is welcome:

  • programming
    • OCaml and C
    • formal semantics
  • formal verification
    • runtime verification, static analysis, formal specification languages, = …
  • compilation
    • code generation, program transformation, type system, …

Interested applicants should send a CV and a motivation letter to Julien Signoles (julien dot signoles at cea dot fr).

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 loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe online.

--=-=-=--