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 ESMTP id D8E762E03 for ; Tue, 5 Jul 2022 07:42:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=nb4oJO8ja/VEcxDr0xoaXg0j7V4ih/3pagl/zR/kzFE=; b=arhrz49XIkBlqVCd/FERydbncMuroH4bLI6fDOFQNagtceTSiVcbywDs piop6vHp0yOTU7uDFNy3Z+ri4IcfzWxzO5tz3tR8qG3GrN08RS4HAjIP7 DfoE38Qw0Uk6D8jYiWu1M9FQzyAo2mSmjzuqgrTD/oxGO8KKv4ZtQxtRm 4=; Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 128.93.162.160 as permitted sender) identity=mailfrom; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:192.134.164.0/24 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@sympa.inria.fr) identity=helo; client-ip=128.93.162.160; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@sympa.inria.fr"; x-conformance=spf_only Authentication-Results: mail2-relais-roc.national.inria.fr; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@sympa.inria.fr; dkim=hardfail (signature did not verify [final]) header.i=@polytechnique.org X-IronPort-AV: E=Sophos;i="5.92,245,1650924000"; d="scan'208,217";a="44246427" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 05 Jul 2022 09:42:49 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 7D464E015F; Tue, 5 Jul 2022 09:42:49 +0200 (CEST) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 86F40E0092 for ; Tue, 5 Jul 2022 09:42:43 +0200 (CEST) IronPort-SDR: gNERnbf6dsuT9eEJYFn0k68oDPAl+PGBM4Tr2kw0FQ30yWLPqQZYySBYOvWh7gEHIllju2pRU4 cyJ4f5qlmnyFWegFqx+iJaCLigm7Z3OrADuYWszBY6XfQvD6f877Rb3lkaFofw9ZVo1l0UYnk/ kIVoXHtZ5tWOgDE8eap43Z/2WNAnCQJeBLazGRnc75TfNiWx1unvYXXtS58DSj8DIfk2mf7AAq 6M6JWmNNSqhcd2khuYJd0SE+j5L5+KnbEk+Xi+OipqWvZPQHOfbh6At6T31zJVLxpfbwFgQvkD OA49oXf3hAq315bnUcyPFsZx X-IPAS-Result: =?us-ascii?q?A0ArAACP6sNimCIeaIFaHQEBAQEJARIBBQUBgX4FAQsBg?= =?us-ascii?q?SBbKBkBZ1YuBwhEhE6JAIgNiViTNIERA08QAQMBDSwBDgQBAgQBAYIQgi9FG?= =?us-ascii?q?IU1Ah4GAQUyBg4BAgQBAQEBAwIDAQEBAQEBAwEBBQEBAQIBAQIEBAETAQEBA?= =?us-ascii?q?QEBAQEJCwkHBgwFEA4FPGRkBIFLBIF0CwcIJQ2CNQwMAwODdwEYCQoTAQE4G?= =?us-ascii?q?CMDFAEGAwIEDQEXAR4DARMBEhQGgmMBgxgDBQqRHJpLGjV6gTGBAYIIAQEGg?= =?us-ascii?q?T8BAwMLAkODdIFcCSSBAhcBhh9gTAGDEQmEEwInEIFVRIEVgikSP26CA0EHF?= =?us-ascii?q?wEBAQEBF4ERAQ8CAgEIRYMpF4JOjUmBFoQqhx8HOANHLxKBH24BCAQGBwoFM?= =?us-ascii?q?AYCDBgUBAITEk0GHAISDAoGFQ5CEhcMDwMSAxEBBwIJEggVKwgDAgMIAwIDK?= =?us-ascii?q?wIDFgkHCgMdCAocEhAUAgQRHgsIAxkeLAkCBA4DQAgLCgMRBAMTGAkWCBAEB?= =?us-ascii?q?gMILw0nCwMFDw0BBgMGAgUFAQMgAxQDBSQHAyEPJg0NBCIdAwMFJQMCAhsHA?= =?us-ascii?q?gIDAgYVBgICGFYuDQgECAQYHyQPBQIHLwUELwIeBAUGEQgCFgIGBAUCBAQWA?= =?us-ascii?q?hAIAggnFwcTMxkBBVkQCSEWBikQBQYVAyFJJgVFDyg0NjwsHxsKgRosCSIWA?= =?us-ascii?q?wQEAwIGGgMDIgIQKQYyAxUGLRUVEQYilzCEJAwJAwEiDgstBg9LBwMBERkBE?= =?us-ascii?q?xYBARcLLggFFg8KBAEKBBQSDBcEARgBAxYTAQoCCQEBLZISEScCAY1timiCY?= =?us-ascii?q?ZFbGWQ0B4NRgT4GDIgwgSKDS4k4iCODdYFQinOBSpZiIZZUIIksgRMJgkqTX?= =?us-ascii?q?U8rBIU4gU4pgQ9dDAczGjCDKwkKOwEDAg0BAgIDAQIBAgkBAQKHSIZVB4EfA?= =?us-ascii?q?QmBP4EDgmSBdTuFTD80AgEBNwIGAQoBAQMJhWMBAQUTCwGIfAEB?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23: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 r7sSg== IronPort-HdrOrdr: A9a23:+9qL9awvCI4DQTYgoTd9KrPwOb1zdoMgy1knxilNoH1uE/Bw+P re/8jzuSWetN9zYh8dcLK7VJVoKEm0naKdh7N6AV7IZmbbUQWTQb1K3M/JxTr8Eyfiss5RvJ 0BT5RD X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="5.92,245,1650924000"; d="scan'208,217";a="44246379" X-MGA-submission: =?us-ascii?q?MDFlzlvJQxMw1Pm96ybInAGvR/M3ciU9nTVBqk?= =?us-ascii?q?W+U0yTG2tnEKQ/uLlGDkB2w5BtG83LvCezd+7/ULYD9MwyL2m+6X/MCT?= =?us-ascii?q?O+hY4ebXQDRTZeUOY4k9Z6RkkmGXYFgLDkqu3S4hvyAwX/THDMGRXxVo?= =?us-ascii?q?2n3E25Skwtyj81sEbCfhkl1Q=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jul 2022 09:42:42 +0200 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 DAD045605F0; Tue, 5 Jul 2022 09:42:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=polytechnique.org; s=svoboda; t=1657006960; bh=FEEjQcACaBcJj7klzvS9frsTOZtRC+MG06LsJbLk9Nw=; h=From:To:Subject:Date:Message-ID; b=AicIw00naJh7fQrbbUsYxjgs7LY3gn+lkExdoGwHBe9zt1DnzmoGPhJ2YyvG642gm j8t3wLm7+13yT7li1k2j3/+f06l1rIoW5QEEdm7+gJj+OGzvW5YlXnXQFn4Rg9lTk7 mUjhZ6yWrWIP6OQd09e/IaLEhNmlkZbDBW8tismg= From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 05 Jul 2022 09:42:40 +0200 Message-ID: <87a69o3szz.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jul 5 09:42:41 2022 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.497902, queueID=C3E27560617 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: 18812 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: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgSnVuZSAyOCB0byBKdWx5DQowNSwgMjAyMi4NCg0KVGFibGUgb2YgQ29udGVudHMNCuKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpBbiBh bXVzaW5nIHVzZSBvZiBmaXJzdC1jbGFzcyBtb2R1bGVzOiByZWFkaW5nIGZyb20gcGxhaW50ZXh0 IGFuZCBjb21wcmVzc2VkIGZpbGVzDQpUTFMgc2lnbmF0dXJlIHdpdGggb3BhbTp0bHMNCk9wZW4g U291cmNlIHRvb2xpbmcgZW5naW5lZXIgYXQgSmFuZSBTdHJlZXQNCkR1bmUgaG93IHRvIGRlZmlu ZSBjdXN0b20gYnVpbGQgdGFzaw0KTHd0LjUuNi4wIChhbmQgb3RoZXIgTHd0IHBhY2thZ2VzKQ0K V2luZG93cy1mcmllbmRseSBPQ2FtbCA0LjEyIGRpc3RyaWJ1dGlvbiAtIERpc2t1diBPQ2FtbCAw LjEuMA0KT0NhbWxGb3JtYXQgV2ViIENvbmZpZ3VyYXRvcg0KUmVsZWFzZSBvZiBvcHRpbWwtdHJh bnNwb3J0DQpPbGQgQ1dODQoNCg0KQW4gYW11c2luZyB1c2Ugb2YgZmlyc3QtY2xhc3MgbW9kdWxl czogcmVhZGluZyBmcm9tIHBsYWludGV4dCBhbmQgY29tcHJlc3NlZCBmaWxlcw0K4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9h bi1hbXVzaW5nLXVzZS1vZi1maXJzdC1jbGFzcy1tb2R1bGVzLXJlYWRpbmctZnJvbS1wbGFpbnRl eHQtYW5kLWNvbXByZXNzZWQtZmlsZXMvMTAwNzMvOT4NCg0KDQpDb250aW51aW5nIHRoaXMgdGhy ZWFkLCBNYcOrbGFuIGFza2VkIGFuZCBTaW1vbiBDcnVhbmVzIHJlcGxpZWQNCuKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgA0KDQogICAgICAgIFlvdSBnb3QgbWUgY3VyaW91czogd2hhdOKAmXMgdGhlIHJlYXNvbiBm b3IgdXNpbmcgYQ0KICAgICAgICBmaXJzdC1jbGFzcyBtb2R1bGUgaGVyZSBpbnN0ZWFkIG9mIGEg cmVjb3JkIG9yIGFuIG9iamVjdD8NCg0KICBPZiBjb3Vyc2UhDQoNCiAg4oCiIGNvbXBhcmVkIHRv IHJlY29yZHMsIEkgZmluZCBmaXJzdC1jbGFzcyBtb2R1bGVzIHRvIGJlIGEgbG90IG1vcmUNCiAg ICBjb252ZW5pZW50IGZvciB0aGlzIHVzZSBjYXNlLiBJIHN0aWxsIHVzZSByZWNvcmRzIGZvciBf ZGF0YV8sIGJ1dCBhDQogICAgcmVjb3JkLW9mLWZ1bmN0aW9uIGlzIG9mdGVuIGxlc3MgY29udmVu aWVudC4gRm9yIGV4YW1wbGUsIG1vZHVsZXMNCiAgICBhbGxvdyB5b3UgdG8gdXNlIGBpbmNsdWRl JywgdGhleSBkaXJlY3RseSBoYW5kbGUgZG93bi1jYXN0aW5nIGFzIGENCiAgICB3YXkgdG8gaGlk ZSBpbnRlcm5hbCBzdGF0ZSAod2hlcmVhcyBmb3IgbW9kdWxlcyB5b3UgbmVlZCB0byBjbG9zZQ0K ICAgIG92ZXIgdmFsdWVzIGNyZWF0ZWQgYmVmb3JlIHRoZSByZWNvcmQpOyBtb2R1bGUgdHlwZXMg YXJlIHN0cnVjdHVyYWwsDQogICAgc28gSSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGRpc2Ft YmlndWF0aW9uLCB3aGVyZWFzIHJlY29yZHMgbmVlZA0KICAgIG1vcmUgY2FyZSB0aGVyZS4gSW4g dGVybXMgb2YgcGVyZm9ybWFuY2UgYm90aCBzZWVtIGV4YWN0bHkgdGhlIHNhbWUsDQogICAgZnJv bSBteSB0b3kgYmVuY2htYXJrcy4NCiAg4oCiIGNvbXBhcmVkIHRvIG9iamVjdHMsIGZpcnN0LWNs YXNzIG1vZHVsZXMgYXJlIGEgYml0IGxlc3MgY29udmVuaWVudA0KICAgIChubyBydW50aW1lLWZy ZWUgY2FzdCwgbm8gdHJ1ZSBpbmhlcml0YW5jZS9taXhpbiksIGJ1dCBMU1AgYW5kIG90aGVyDQog ICAgdG9vbHMgYXJlIGZyYWdpbGUuIEluIGFkZGl0aW9uLCBpbnZva2luZyBhbiBvYmplY3QgbWV0 aG9kIHNlZW1zIHRvDQogICAgYmUgcm91Z2hseSB0d2ljZSBhcyBzbG93IGFzIGEgcmVjb3JkL21v ZHVsZSBmaWVsZCBhY2Nlc3Mg4oCUIEkgc3VwcG9zZQ0KICAgIGl0J3MgYmVjYXVzZSB0aGUgbGF0 dGVyIGlzIGp1c3QgYW4gYWNjZXNzIHZpYSBvZmZzZXQuIFRoYXQncyBvbiBhDQogICAgbWljcm8g YmVuY2htYXJrIHNvIGluIHJlYWxpdHkgaXQgbWlnaHQgYmUgd29yc2UuDQoNCg0KVExTIHNpZ25h dHVyZSB3aXRoIG9wYW06dGxzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZl Og0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3Rscy1zaWduYXR1cmUtd2l0aC1vcGFt LXRscy85Mzk5LzEwPg0KDQoNCk1hcmN1cyBSb2hybW9zZXIgYW5ub3VuY2VkDQrilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIANCg0KICBqdXN0IGltcGxlbWVudGVkIGtleSBnZW5lcmF0aW9uDQogIDxodHRw czovL2NvZGViZXJnLm9yZy9tcm8vc2VwcG8vc3JjL2JyYW5jaC9kZXZlbG9wL2xpYi9hczIubWwj TDk1Pg0KDQoNCk9wZW4gU291cmNlIHRvb2xpbmcgZW5naW5lZXIgYXQgSmFuZSBTdHJlZXQNCuKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3Jn L3Qvam9iLW9wZW4tc291cmNlLXRvb2xpbmctZW5naW5lZXItYXQtamFuZS1zdHJlZXQvMTAwODMv MT4NCg0KDQpZYXJvbiBNaW5za3kgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBXZSdyZSBsb29r aW5nIHRvIGhpcmUgc29tZW9uZSB0byBqb2luIG91ciBidWlsZC1zeXN0ZW1zIHRlYW0gd2l0aCBh DQogIGZvY3VzIG9uIG9wZW4tc291cmNlIHRvb2xpbmcuIFdlIGN1cnJlbnRseSByZWxlYXNlIGFs bW9zdCBhIG1pbGxpb24NCiAgbGluZXMgb2YgY29kZSBvZiBvdXIgaW50ZXJuYWwgbGlicmFyaWVz IGFuZCB0b29scywgaW5jbHVkaW5nIHRoaW5ncw0KICBsaWtlIFNleHBsaWIsIEJhc2UsIENvcmUs IEFzeW5jLCBJbmNyZW1lbnRhbCwgQm9uc2FpLCBIYXJkY2FtbCwNCiAgbWVtdHJhY2Utdmlld2Vy LCBhbmQgcGF0ZGlmZi4NCg0KICBXZSBoYXZlIGludGVybmFsIHRvb2xpbmcgZm9yIG1vdmluZyBj b2RlIGZyb20gb3VyIGludGVybmFsDQogIHJlcG9zaXRvcmllcyB0byBHaXRodWIgYW5kIGZvciBw dWJsaXNoaW5nIHRvIG9wYW0sIGFuZCBmb3IgZmVycnlpbmcNCiAgaW5mb3JtYXRpb24gYmFjayBm cm9tIEdpdGh1YiB0byBvdXIgaW50ZXJuYWwgdG9vbHMsIHNvIHRoYXQgZGV2ZWxvcGVycw0KICBj YW4gbW9yZSBlYXNpbHkgYW5kIHByb21wdGx5IHJlc3BvbmQgdG8gUFJzIGFuZCBpc3N1ZXMgY29t aW5nIGZyb20gdGhlDQogIG91dHNpZGUuDQoNCiAgV2Ugd2FudCB0byBtYWtlIG9wZW4tc291cmNp bmcgb3VyIGNvZGUgYmV0dGVyIGFuZCBmYXN0ZXIsIHNvIGl0J3MNCiAgZWFzaWVyIGZvciB1cyB0 byB3b3JrIHdpdGggb3V0c2lkZSBjb250cmlidXRvcnMsIGFuZCBpbXByb3ZlbWVudHMgY2FuDQog IGdldCBvdXQgdG8gdGhlIGNvbW11bml0eSBtb3JlIHF1aWNrbHkuIFlvdXIgd29yayB3b3VsZCBi ZSB0byBtYWtlIG91cg0KICByZWxlYXNlcyBkZWxpZ2h0ZnVsbHkgZWFzeSBhbmQgcmVsaWFibGUh DQoNCiAgSSB3cm90ZSBhIGJpdCBtb3JlIGFib3V0IGl0IGhlcmU6DQoNCiAgPGh0dHBzOi8vdHdp dHRlci5jb20veW1pbnNreS9zdGF0dXMvMTUzNjc2NjAzMTMxMzczOTc3Nj9zPTIwJnQ9c0N5VWxI R0hPMXkzem5CaDRwbDBYdz4NCg0KICBJZiB5b3UncmUgaW50ZXJlc3RlZCwgZ28gYWhlYWQgYW5k IG1ha2UgYW4gW29yZGluYXJ5IGFwcGxpY2F0aW9uXSB0bw0KICBvdXIgc29mdHdhcmUgZW5naW5l ZXJpbmcgcm9sZSwgYW5kIG1lbnRpb24gdGhhdCB5b3UncmUgaW50ZXJlc3RlZCBpbg0KICAib3Bl bi1zb3VyY2UgdG9vbGluZyIuIFdlJ3JlIGhhcHB5IHRvIGhpcmUgZm9yIHRoaXMgcm9sZSBpbiBi b3RoDQogIExvbmRvbiBhbmQgTmV3IFlvcmsuDQoNCg0KW29yZGluYXJ5IGFwcGxpY2F0aW9uXQ0K PGh0dHBzOi8vd3d3LmphbmVzdHJlZXQuY29tL2pvaW4tamFuZS1zdHJlZXQvYXBwbHkvPg0KDQoN CkR1bmUgaG93IHRvIGRlZmluZSBjdXN0b20gYnVpbGQgdGFzaw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBz Oi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9kdW5lLWhvdy10by1kZWZpbmUtY3VzdG9tLWJ1aWxkLXRh c2svMTAwOTIvMT4NCg0KDQpjbm1hZGUgZXhwbGFpbmVkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBkdW5lIGhhcyB2ZXJ5IHBvd2VyZnVsIGV4 dGVuc2lvbnMsIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHRlbGwNCiAgeW91IGRpcmVj dGx5LiBUb2RheSBJJ2xsIHNoYXJlIGEgc3BlY2lmaWMgZXhhbXBsZSBvZiBob3cgd2UgY2FuIG1h a2UNCiAgZHVuZSBkbyBtYW55IHRoaW5ncyB3aXRoIGEgZHVuZSBjb25maWd1cmF0aW9uLg0KDQog IEZvciBleGFtcGxlDQoNCiAg4oCiIFB1Ymxpc2ggY29tcGlsZWQgZG9jdW1lbnRzIHRvIG91ciBk b2N1bWVudGF0aW9uIHNlcnZlcg0KICDigKIgU2VuZGluZyBlbWFpbCBub3RpZmljYXRpb25zIHRv IGVtYWlsIGdyb3Vwcw0KICDigKIgU2VuZGluZyBTTVMgbm90aWZpY2F0aW9ucyB0byBhZG1pbmlz dHJhdG9ycw0KICDigKIgQnVpbGQgYSBkb2N1bWVudCBhbmQgb3BlbiBhIGJyb3dzZXIgdG8gcHJl dmlldyB0aGUgZG9jdW1lbnQgcGFnZQ0KDQogIExldCdzIHN0YXJ0IHdpdGggYW4gZXhhbXBsZSwg d2UgY3JlYXRlIGEgZHVuZSBmaWxlIGluIHRoZSByb290DQogIGRpcmVjdG9yeSBvZiBvdXIgcHJv amVjdCwgd2hpY2ggeW91IG1heSBub3QgaGF2ZSBvcmlnaW5hbGx5LCB5b3UgaGF2ZQ0KICB0byBj cmVhdGUgYSBuZXcgb25lLCB3ZSBlbnRlciB0aGUgZm9sbG93aW5nDQoNCiAg4pSM4pSA4pSA4pSA 4pSADQogIOKUgiA7IG5vdyB3ZSB0ZWxsIHlvdSBob3cgdG8gZGVmaW5lIGEgY3VzdG9tIHJ1bGUN CiAg4pSCIDsgcnVsZSBzdGFydCB3aXRoIChydWxlICkNCiAg4pSCIChydWxlDQogIOKUgiA7IChh bGlhcyBpcyBwb2ludCAgdGhlIGNvbW1hbmQgbmFtZSAsIHNvIHlvdSBjYW4gcnVuIHRoaXMgcnVs ZSBieSBjYWxsICBkdW5lIGJ1aWxkIEBkb2NvcGVuDQogIOKUgiAgKGFsaWFzIGRvY29wZW4pDQog IOKUgiAgOyBmb2xsb3dpbmcgbGluZSBpcyB2ZXJ5IGltcG9ydGFudCwgaXQgdGVsbCBkdW5lIGRv IG5vdCBjYWNoZSB0aGlzIGJ1aWxkIGNvbW1hbmQsIHNvIGl0IHdpbGwgcnVubmluZyBldmVyeSBj YWxsDQogIOKUgiB3aXRob3V0IGFueSBjYWNoZQ0KICDilIIgIChkZXBzICh1bml2ZXJzZSkpDQog IOKUgiAgOyBhY3Rpb24gIChzeXN0ZW0gIHRvIHRvbGQgc3lzdGVtIHJ1biBjb21tYW5kIGJ5IGBz aGAgaW4geW91ciBMaW51eC9NYWNPUywgd2luZG93cyB1c2VyIG1heSBydW5uaW5nIGNtZC5leGUN CiAg4pSCICA7IGNkIC4uLy4uIGlzIGNoYW5nZSB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHJ1 bm5pbmcgY29tbWFuZCAsb3IgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHdpbGwgYmUgX2J1aWxkL2Rl ZmF1bHQNCiAg4pSCICAoYWN0aW9uIChzeXN0ZW0gImNkIC4uLy4uICYmIHB3ZCAmJiAgZHVuZSBi dWlsZCBAZG9jICYmIG9wZW4gX2J1aWxkL2RlZmF1bHQvX2RvYy9faHRtbC9pbmRleC5odG1sIiAp KQ0KICDilIIgKQ0KICDilIIgOyBlbmQgb2Ygb25lIHBpZWNlIG9mIHJ1bGUNCiAg4pSCIA0KICDi lIIgOyBhbmQgd2UgZGVmaW5lIG1vcmUgYW5kIG1vcmUgcnVsZSBhcyB3ZSB3YW50DQogIOKUgiAo cnVsZQ0KICDilIIgICAoYWxpYXMgd2hvYW1pKQ0KICDilIIgICAoZGVwcyAodW5pdmVyc2UpKQ0K ICDilIIgICAoYWN0aW9uIChzeXN0ZW0gInVuYW1lIC1hO3dob2FtaSIpKQ0KICDilIIgKQ0KICDi lJTilIDilIDilIDilIANCg0KICBJbiB0aGlzIGV4YW1wbGUsIHdlIGRlZmluZSB0d28gcnVsZXMs IHRoZSBydWxlcyBhcmUgdGhlIHRhc2tzIHRoYXQNCiAgZHVuZSBjYW4gcmVjb2duaXplLCBpbiBk dW5lLCBpdCBpcyBjYWxsZWQgcnVsZXMNCg0KICBCZWNhdXNlIGl0IGlzIGEgY3VzdG9tIGJ1aWxk IGNvbW1hbmQsIHdlIHVzZSBhbGlhcyB0byB0YWtlIGEgdW5pcXVlDQogIGFuZCBub24tcmVwZWF0 aW5nIGFsaWFzLg0KDQogIFRoZSBmaXJzdCBidWlsZCBjb21tYW5kIGlzIHRvIGJ1aWxkIHRoZSBk b2N1bWVudCBhbmQgb3BlbiB0aGUgYnJvd3Nlcg0KICBwcmV2aWV3Lg0KDQogIE91ciBhbGlhcyBp cyBkb2NvcGVuDQoNCiAgVGhlbiBkZXBzIHdlIGFkZCB1bml2ZXJzZSB0byB0ZWxsIGR1bmUgdGhh dCB5b3UgZG9uJ3Qgd2FudCB0byBjYWNoZQ0KICBhbmQgZ2l2ZSBtZSBhIG5ldyBidWlsZCBldmVy eSB0aW1lLiBJZiB5b3UgZG9uJ3QgYWRkIHRoaXMgbGluZSwgZHVuZQ0KICB3aWxsIG9ubHkgZ2l2 ZSB5b3Ugb25lIGJ1aWxkLCBhbmQgdGhlbiBiZWNhdXNlIG9mIHRoZSBjYWNoZSwgeW91IHdvbid0 DQogIGJlIGFibGUgdG8gZXhlY3V0ZSBpdCBsYXRlci4NCg0KICBhY3Rpb24gZm9sbG93aW5nIGJ5 IHN5c3RlbSBoZXJlLCBhY3Rpb24gaXMgdGhlIGNvbW1hbmQgdG8gc3RhcnQsDQogIHN5c3RlbSBt ZWFucyB0byB1c2UgdGhlIHN5c3RlbSBzaGVsbCAod2luZG93cyBpcyBjbWQsIGxpbnV4IG1hY29z IGlzDQogIHNoKSB0byBnaXZlIHlvdSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjb2RlIHlvdSBzcGVj aWZ5Lg0KDQogIFlvdSBjYW4gc2VlIHRoZSBmaXJzdCB3ZSBhcmUgZmlyc3QgY2hhbmdlIHRoZSBk aXJlY3RvcnkgdG8gdGhlIHByb2plY3QNCiAgcm9vdCBkaXJlY3RvcnkgW2JlY2F1c2UgdGhlIGRl ZmF1bHQgZGlyZWN0b3J5IGlzIF9idWlsZC9kZWZhdWx0XSwgYW5kDQogIHRoZW4gd2UgcGVyZm9y bSB0aGUgYnVpbGQgZG9jdW1lbnQgZ2VuZXJhdGlvbiwgYW5kIHRoZW4gb3BlbiBvcGVuIHRoZQ0K ICBnZW5lcmF0ZWQgaHRtbCBwYWdlLg0KDQogIFRoZSBmaXJzdCBidWlsZCBjb21tYW5kIGlzIHRo aXMsIGlmIHlvdSB3YW50IHRvIHBlcmZvcm0gdGhlIGZpcnN0DQogIGJ1aWxkIHRhc2ssIHlvdSBj YW4gdHlwZQ0KDQogIGBkdW5lIGJ1aWxkIEBkb2NvcGVuJw0KDQogIFRoZW4gb3VyIHNlY29uZCBi dWlsZCBjb21tYW5kLCByZWxhdGl2ZWx5IHNpbXBsZSwgd2l0aCByZWZlcmVuY2UgdG8NCiAgdGhl IGZpcnN0LCB3ZSBjYW4gYWRkIGEgbG90IG9mIGJ1aWxkIGNvbW1hbmRzIHdlIHdhbnQgdG8gYWRk IGluc2lkZQ0KICB0aGlzIGR1bmUgY29uZmlndXJhdGlvbiBmaWxlLg0KDQogIFdlIGp1c3QgbmVl ZCB0byBzcGVjaWZ5IGRpZmZlcmVudCBhbGlhcyBhbGlhc2VzIGZvciB0aGVtLCBubw0KICBkdXBs aWNhdGlvbi4NCg0KICBUaGUgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBhbHNvIHNwZWNpZmllcyBz b21lIG90aGVyIGF2YWlsYWJsZQ0KICBjb21tYW5kcywgSSB3b24ndCBnbyBpbnRvIHRoZW0gb25l IGJ5IG9uZS4gU2luY2UgSSBwcmVmZXIgdG8gdXNlIHNoZWxsDQogIHNjcmlwdHMsIEkgcmVhbGx5 IG9ubHkgbmVlZCB0aGUgc3lzdGVtIHRvIGV4ZWN1dGUgbXkgc2hlbGwgc2NyaXB0cyBmb3INCiAg bWUuDQoNCg0KTHd0LjUuNi4wIChhbmQgb3RoZXIgTHd0IHBhY2thZ2VzKQ0K4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBz Oi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tbHd0LTUtNi0wLWFuZC1vdGhlci1sd3QtcGFja2Fn ZXMvMTAwNzcvMj4NCg0KDQpSYXBoYcOrbCBQcm91c3QgYW5ub3VuY2VkDQrilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIANCg0KTHd0IDUuNi4xDQrilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBWZXJzaW9u IDUuNi4xIG9mIHRoZSBMd3QgcGFja2FnZSBoYXMgYmVlbiByZWxlYXNlZC4gVGhpcyB2ZXJzaW9u DQogIGNvbnRhaW5zIGEgZml4IGZvciBhIGJ1ZyBpbnRyb2R1Y2VkIGluIDUuNi4wIHdoZXJlYnkg ZGV2bnVsbCBmaWxlDQogIGRlc2NyaXB0b3Igd291bGQgYmUgY2xvc2VkIGR1cmluZyBzb21lIHVz ZXMgb2YgYEx3dF9wcm9jZXNzJy4NCg0KICA8aHR0cHM6Ly9naXRodWIuY29tL29jc2lnZW4vbHd0 L3JlbGVhc2VzL3RhZy81LjYuMT4NCg0KDQpXaW5kb3dzLWZyaWVuZGx5IE9DYW1sIDQuMTIgZGlz dHJpYnV0aW9uIC0gRGlza3V2IE9DYW1sIDAuMS4wDQrilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZl Og0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi13aW5kb3dzLWZyaWVuZGx5LW9j YW1sLTQtMTItZGlzdHJpYnV0aW9uLWRpc2t1di1vY2FtbC0wLTEtMC84MzU4LzIxPg0KDQoNCmpi ZWNrZm9yZCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoZSAwLjQuMCByZWxlYXNlIG9mIERpc2t1diBPQ2Ft bCBmb3IgV2luZG93cyB1c2VycyBpcyBhdmFpbGFibGUhIEl0DQogIGlzIHVzYWJsZSBlbm91Z2gg dGhhdCBJJ3ZlIGxldCBteSBzY2hvb2wtYWdlIGtpZHMgKGVsZW1lbnRhcnkgdGhyb3VnaA0KICBo aWdoIHNjaG9vbCkgaW5zdGFsbCBpdCBhbmQgZ28gdGhyb3VnaCBzb21lIHR1dG9yaWFscy4NCg0K ICA8aHR0cHM6Ly9naXRodWIuY29tL2Rpc2t1di9ka21sLWluc3RhbGxlci1vY2FtbCNyZWFkbWU+ DQoNCiAgVGhlIGxpbmtzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGFyZSBhdmFpbGFibGUgZnJvbSB0 aGUgYWJvdmUgbGluayBhcw0KICB3ZWxsLg0KDQogIEhlcmUgYXJlIHRoZSBvbmUtdGltZSBpbmNv bnZlbmllbmNlcyBpZiB5b3UgaW5zdGFsbCB0aGlzIHJlbGVhc2U6DQogIDEuIFRoZSBidWlsdC1p biBhbnRpdmlydXMgV2luZG93cyBEZWZlbmRlciB0cmVhdHMgbmV3bHkgc2lnbmVkDQogICAgIGJp bmFyaWVzIGxpa2Ugc3BhbS4gVGhlcmUgbmVlZHMgdG8gYmUgZW5vdWdoIHBlb3BsZSB3aG8gIlJl cG9ydA0KICAgICB0aGlzIGZpbGUgYXMgc2FmZSIgYmVmb3JlIHRoZSBiaW5hcmllcyBhcmUgdHJ1 c3RlZC4gL0lmIHlvdSBkbw0KICAgICBub3RoaW5nIGJ1dCBtYXJrIGl0IHNhZmUgb3IgaW5zdGFs bCBpdCBvbiBXaW5kb3dzLCB5b3UgYXJlIGhlbHBpbmcNCiAgICAgb3RoZXJzIS8NCiAgMi4gVGhl IGluc3RhbGxlciB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUgVmlzdWFsIFN0dWRpbyBj b21waWxlcg0KICAgICBpZiBuZWVkZWQuIEJ1dCBWaXN1YWwgU3R1ZGlvIHNvbWV0aW1lcyByZXF1 aXJlcyBhIHJlYm9vdC4gVGhlDQogICAgIGluc3RydWN0aW9ucyB3aWxsIHRlbGwgeW91IGlmIHlv dSBuZWVkIHRoZSByZWJvb3QuDQogIDMuIFRoZSBWaXN1YWwgU3R1ZGlvIENvZGUgT0NhbWwgcGx1 Z2luIGRlZmF1bHRzIHRvIGV4cGVjdGluZyBhIGxlZ2FjeQ0KICAgICBgb2NhbWxlbnYnIHByb2dy YW0gb24gV2luZG93cy4gWW91IGhhdmUgdG8gc2VhcmNoIGZvciBgb2NhbWxlbnYnIGluDQogICAg IFZpc3VhbCBTdHVkaW8gQ29kZSBTZXR0aW5ncyBhbmQgZGlzYWJsZSBpdC4gVGhpcyBzaG91bGQg aGF2ZSBhIGZpeCwNCiAgICAgYnV0IG5vdCBpbiB0aW1lIGZvciB0aGlzIHJlbGVhc2UuDQoNCg0K V2luZG93cyBwYXJpdHkgd2l0aCBVbml4DQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICAxLiBgb3BhbScg Y29tbWFuZHMgbGlrZSBgb3BhbSBpbnN0YWxsJyBzaG91bGQgd29yayB3aXRob3V0IGFueQ0KICAg ICB3cmFwcGVycy4gQnV0IHlvdSBzaG91bGQgY3JlYXRlIG5ldyBzd2l0Y2hlcyB3aXRoIGBvcGFt IGRrbWwgaW5pdCcNCiAgICAgKHNlZSBgLS1oZWxwJyBmb3Igb3B0aW9ucykuDQogIDIuIGBkdW5l JyBjb21tYW5kcyBsaWtlIGBkdW5lIGJ1aWxkJyBzaG91bGQgd29yayB3aXRob3V0IGFueQ0KICAg ICB3cmFwcGVycy4gVGhlIG9ubHkgaGljY3VwIGlzIHRoYXQgYWxpYXNlcyBsaWtlIGBkdW5lIGJ1 aWxkDQogICAgIEBydW50ZXN0JyBuZWVkIHRvIGJlIGVzY2FwZWQgaW4gUG93ZXJTaGVsbCBsaWtl Og0KICAgICDilIzilIDilIDilIDilIANCiAgICAg4pSCIGR1bmUgYnVpbGQgYEBydW50ZXN0DQog ICAgIOKUlOKUgOKUgOKUgOKUgA0KICAzLiBZb3UgaGF2ZSBwYXJ0aWFsIHN1cHBvcnQgaWYgeW91 ciBob21lIGRpcmVjdG9yeSBoYXMgc3BhY2VzLCBzaW5jZQ0KICAgICBpdCBpcyB2ZXJ5IGNvbW1v biBvbiBXaW5kb3dzIHRvIGhhdmUgeW91ciB1c2VybmFtZSBiZSBgRmlyc3ROYW1lDQogICAgIExh c3ROYW1lJy4gU28gZmFyIEkndmUgY29uZmlndXJlZC9wYXRjaGVkIG1vc3QgdGhpbmdzIHRvIHdv cmsgd2l0aA0KICAgICBzcGFjZXMsIGJ1dCB0aGVyZSBjb3VsZCBiZSBjb21tb24gcGFja2FnZXMg dGhhdCB3ZXJlIG1pc3NlZCwgYW5kDQogICAgIG9ubHkgTlRGUyBkcml2ZXMgd29yay4NCiAgNC4g T0NhbWwgNC4xMi4xLiBJJ2QgbGlrZSB0byB1cGdyYWRlIHRvIDQuMTMgb3IgNC4xNCwgYnV0IGhh dmluZw0KICAgICBzdXBwb3J0IGZvciBWaXN1YWwgU3R1ZGlvIENvZGUgZGVidWdnaW5nIHdpdGgg WzQuMTItb25seQ0KICAgICBvY2FtbGVhcmx5YmlyZF0gaXMgbW9yZSBpbXBvcnRhbnQsIGVzcGVj aWFsbHkgZm9yIHRyYWRpdGlvbmFsDQogICAgIFdpbmRvd3MgdXNlcnMuDQogIDUuIER1bmUgMi45 LjMuIEkndmUgYnVuZGxlZCBpbiBzdXBwb3J0IGluIDIuOS4zIGZvciBmc3dhdGNoL2lub3RpZnkg c28NCiAgICAgdGhhdCBgZHVuZSBidWlsZCAtLXdhdGNoJyB3b3JrcyBvbiBXaW5kb3dzLiBOb3Ro aW5nIGlzIGJsb2NraW5nIGFuDQogICAgIHVwZ3JhZGUgdG8gMy54IGV4Y2VwdCB0aW1lIChpZS4g bm90IG5vdykgYW5kIGEgcmVhc29uLg0KICA2LiBPcGFtIDIuMS4yIHBsdXMgc29tZSBQUnMgdGhh dCBhcmUgcGVuZGluZyB0aGUgbm90LXlldC1yZWxlYXNlZA0KICAgICB2ZXJzaW9uIDIuMi4NCiAg Ny4gR2l0IHBlcmZvcm1hbmNlIG9uIFdpbmRvd3MganVzdCBzdWNrcy4gSXQgaXMgbGlrZSBzb21l b25lIGRlc2lnbmVkDQogICAgIGl0IGZvciBhIExpbnV4IGtlcm5lbCDwn6SoLiBBcHBhcmVudGx5 IFtHaXQgRlNNb25pdG9yIGluIDIuMzcuMF0gY2FuDQogICAgIGJlIGVuYWJsZWQgdG8gc3BlZWQg dGhpbmdzIHVwLCBidXQgSSBkb24ndCBoYXZlIHJlYWwtd29ybGQNCiAgICAgZXhwZXJpZW5jZSB3 aXRoIGl0IGJlY2F1c2UgaXQgd2FzIGp1c3QgcmVsZWFzZWQgeWVzdGVyZGF5Lg0KICA4LiBNU1lT Miwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIHdpdGggYHdpdGgtZGttbCBiYXNoJywgbm93IHVzZXMg dGhlDQogICAgIENMQU5HNjQgdmFyaWFudC4gVGhlcmUgYXJlIHRob3VzYW5kcyBvZiB1cC10by1k YXRlIHRoaXJkLXBhcnR5DQogICAgIGxpYnJhcmllcyBhdmFpbGFibGUgYW5kLCB1bmxpa2UgTWlu R1csIHRoZXkgYXJlIEFCSSBjb21wYXRpYmxlIHdpdGgNCiAgICAgdGhlIGRvbWluYW50IFdpbmRv d3MgY29tcGlsZXIgKE1TVkMpLiBBbmQgaWYgeW91IGFyZSBpbnRlcmVzdGVkDQogICAgIHRoZXJl IGlzIGFuIFtvY2FtbHZlcnNlIEhlbHAgV2FudGVkXSB0byBhZGQgdGhlIENMQU5HNjQgY29tcGls ZXIgYXMNCiAgICAgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIEFkbWluaXN0cmF0b3ItcmVxdWlyaW5n LCByZWJvb3QtbmVlZGluZyBNU1ZDDQogICAgIGNvbXBpbGVyLg0KDQogIFRoYW5rcyB0byBPQ2Ft bCBTb2Z0d2FyZSBGb3VuZGF0aW9uIGZvciBzcG9uc29yaW5nIHRoaXMhDQoNCiAgMC40Lnggd2ls bCBiZSB0aGUgbGFzdCBtaW5vciB2ZXJzaW9ucyBvZiB0aGUgInByZXZpZXciLiBJJ2xsIGJlDQog IHNoaWZ0aW5nIHRvIGNsb3Npbmcgb3V0IGFueSBzaG93LXN0b3BwaW5nIGJ1Z3MsIGFuZCB1cGRh dGluZyB0aGUNCiAgdmFyaW91cyBXaW5kb3dzIG9uYm9hcmRpbmcgZ3VpZGVzIGZvciBPQ2FtbCB0 byBvZmZpY2lhbGx5IGluY2x1ZGUNCiAgRGlza3V2IE9DYW1sLg0KDQoNCls0LjEyLW9ubHkgb2Nh bWxlYXJseWJpcmRdDQo8aHR0cHM6Ly9naXRodWIuY29tL2hhY2t3YWx5L29jYW1sZWFybHliaXJk L2lzc3Vlcy8zOD4NCg0KW0dpdCBGU01vbml0b3IgaW4gMi4zNy4wXQ0KPGh0dHBzOi8vZ2l0aHVi LmJsb2cvMjAyMi0wNi0yOS1pbXByb3ZlLWdpdC1tb25vcmVwby1wZXJmb3JtYW5jZS13aXRoLWEt ZmlsZS1zeXN0ZW0tbW9uaXRvci8+DQoNCltvY2FtbHZlcnNlIEhlbHAgV2FudGVkXQ0KPGh0dHBz Oi8vb2NhbWx2ZXJzZS5naXRodWIuaW8vY29udGVudC9oZWxwX3dhbnRlZC5odG1sPg0KDQoNCk9D YW1sRm9ybWF0IFdlYiBDb25maWd1cmF0b3INCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0K DQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLW9jYW1sZm9y bWF0LXdlYi1jb25maWd1cmF0b3IvMTAxMDMvMT4NCg0KDQpMb3VpcyBSb2Now6kgYW5ub3VuY2Vk DQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIANCg0KICBJdCBpcyBteSBwbGVhc3VyZSB0byBzaGFyZSB3aXRoIHlvdSB0aGUgW29j YW1sZm9ybWF0IGNvbmZpZ3VyYXRvcl0gYXMNCiAgYSB3ZWIgcGFnZS4NCg0KICBPY2FtbGZvcm1h dCBpcyBhIGdyZWF0IHRvb2wgdGhhdCByZWFsbHkgbWFrZXMgZWRpdGluZyBjb2RlIGEgbW9yZQ0K ICBwbGVhc2FudCBleHBlcmllbmNlLiBJdCBoYXMgYSBidW5jaCBvZiBkaWZmZXJlbnQgYnVpbHQg aW4gcHJvZmlsZXMgYW5kDQogIG1hbnkgYWRkaXRpb25hbCBvcHRpb25zIHRvIGZpbmUgdHVuZSBo b3cgdGhlIGNvZGUgc2hvdWxkIGxvb2sNCiAgbGlrZS4gV2hpbGUgSSB3b3VsZCBlbmNvdXJhZ2Ug bW9zdCBwZW9wbGUgYW5kIG5ldyBwcm9qZWN0cyB0byB1c2Ugb25lDQogIG9mIHRoZSBkZWZhdWx0 IHByb2ZpbGVzLCB0aGUgbWFueSBvcHRpb25zIGFyZSBoZWxwZnVsIHdoZW4NCiAgdHJhbnNpdGlv bmluZyBhbiBleGlzdGluZyBjb2RlYmFzZS4gVW5mb3J0dW5hdGVseSBpdCBpcyBub3Qgc3VwZXIg ZWFzeQ0KICB0byBmaWd1cmUgb3V0IHdoaWNoIG9wdGlvbnMgdG8gdXNlIGFuZCBob3cgdG8gY29t YmluZSB0aGVtLiAgVGhlcmUgYXJlDQogIFs1OCBwYXJhbWV0ZXJzXSEgSSd2ZSBzcGVudCBhIGxv bmcgdGltZSB0cnlpbmcgZGlmZmVyZW50IGNvbWJpbmF0aW9ucw0KICBieSBjaGFuZ2luZyBhbiBv cHRpb24gaW4gbXkgLm9jYW1sZm9ybWF0LCBydW5uaW5nIGBkdW5lIGJ1aWxkIEBmbXRgLA0KICBj aGVja2luZyB0aGUgY29kZSwgZ29pbmcgYmFjayB0byB0aGUgZmlyc3Qgc3RlcOKApiBJdCBpcyBh IHRlZGlvdXMNCiAgd29yay4gU28gSSBkZWNpZGVkIHRvIG1ha2UgYSBzaW1wbGUgd2ViIGludGVy ZmFjZSB3aXRoIGFsbCBvZiB0aGUNCiAgb3B0aW9ucyBhdmFpbGFibGUgYW5kIGEgZmFzdGVyIGZl ZWRiYWNrIGxvb3AuDQoNCiAgPGh0dHBzOi8vZ2xvYmFsLmRpc2NvdXJzZS1jZG4uY29tL3N0YW5k YXJkMTEvdXBsb2Fkcy9vY2FtbC9vcHRpbWl6ZWQvMlgvMi8yNGU4OTFlOWUxNDAwZDRhNDdkZWJm OWUzNGIzZWE0MTRiZWJmNDE4XzJfMTM4MHg4MjYuanBlZz4NCg0KICBUaGFua3MgdG8ganNfb2Zf b2NhbWwgdGhlIHRhc2sgd2FzIG5vdCB0b28gY29tcGxpY2F0ZWQuIE9jYW1sZm9ybWF0DQogIGNh biBiZSBjb21waWxlZCB0byBqYXZhc2NyaXB0LCB0aGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgdG8g ZG8uIFdoaWNoDQogIG1lYW5zIGV2ZXJ5dGhpbmcgY2FuIGJlIGRvbmUgaW4gdGhlIGJyb3dzZXIs IHRoZSBjb2RlIHdvbid0IGxlYWsgdG8NCiAgYW55b25lLCB0aGVyZSBpcyBubyBuZWVkIHRvIG1h aW50YWluIGEgc2VydmVyLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlDQogIGd1YXJhbnRlZWQgdG8g YmUgaWRlbnRpY2FsIGFzIGEgZm9ybWF0dGluZyB3aXRoIHRoZSBjbGkgdG9vbC4NCg0KICBUaGUg Y29uZmlndXJhdGlvbiBjYW4gYmUgc2V0IHRocm91Z2ggdGV4dCAoanVzdCBwdXQgdGhlIGNvbnRl bnQgb2YNCiAgeW91ciBgLm9jYW1sZm9ybWF0YCBpbiB0aGUgdGV4dCBib3gpIGFuZCB0aHJvdWdo IGEgYnVuY2ggb2YNCiAgZHJvcGRvd24uIFRoZXkgd2lsbCBiZSBjb21iaW5lZCB0b2dldGhlci4g VGhlIGRyb3Bkb3duIHRha2VzDQogIHByZWNlZGVuY2Ugb3ZlciB0aGUgdGV4dHVhbCBjb25maWd1 cmF0aW9uIGlmIGFuIG9wdGlvbiBpcyBzZXQgaW4gYm90aC4NCg0KICBUaGUgcHJvamVjdCBoYXMg YmVlbiBzdGFydGVkIGFzIHBhcnQgb2YgdGhlICJvcGVuIHNvdXJjZSBkYXkiIGF0DQogIEFocmVm cyAod2UgdHJ5IHRvIGRlZGljYXRlIHNvbWUgdGltZSB0byBvcGVuIHNvdXJjZSBwcm9qZWN0cyB0 aGF0IHdlDQogIHVzZSBpbnRlcm5hbGx5KS4gSXQgaXMgc3RpbGwgaW4gaXRzIGluZmFuY3kuIFBs ZWFzZSBwYXJkb24gdGhlDQogIHRlcnJpYmxlIHN0eWxlLCBJIGFtIG5vdCBhIHdlYiBkZXZlbG9w ZXIgYW5kIGRpZG4ndCBoYXZlIHRpbWUgdG8gbWFrZQ0KICBpdCBsb29rIG5pY2VyIHlldC4gVGhl cmUgYXJlIHNvbWUgYW5ub3lpbmcgdGhpbmdzIHRvIGZpeCAobm8gZmVlZGJhY2sNCiAgd2hlbiB0 aGUgY29kZSBpcyBpbnZhbGlkIGFuZCBjYW4ndCBiZSBmb3JtYXR0ZWQpLCBhbmQgbWFueQ0KICBp bXByb3ZlbWVudHMgdG8gY29tZSAoYSB3YXkgdG8gZG93bmxvYWQgdGhlIGNvbmZpZ3VyYXRpb24g Zm9yDQogIGV4YW1wbGUpLiBCdXQgSSB0aGluayB0aGF0IGl0IGlzIGFscmVhZHkgd29ya2luZyB3 ZWxsIGVub3VnaCB0byBiZQ0KICB1c2VkIGJ5IG90aGVycy4NCg0KICBZb3UgY2FuIGZpbmQgdGhl IGNvbmZpZ3VyYXRvciBhdA0KICA8aHR0cHM6Ly9haHJlZnMuZ2l0aHViLmlvL29jYW1sZm9ybWF0 Lz4NCiAgVGhlIHNvdXJjZSBjb2RlIGlzIG9uIGdpdGh1YiBhdA0KICA8aHR0cHM6Ly9naXRodWIu Y29tL2FocmVmcy9vY2FtbGZvcm1hdC90cmVlL2FocmVmcy93ZWItdWkvYmluL3dlYi11aT4NCg0K ICBJZiB5b3UgbGlrZSBvY2FtbCBhbmQgd2FudCB0byBsb29rIGZvciBhIGpvYiwgd2UgaGF2ZSBz b21lIFtwb3NpdGlvbnMNCiAgYXZhaWxhYmxlXQ0KDQoNCltvY2FtbGZvcm1hdCBjb25maWd1cmF0 b3JdIDxodHRwczovL2FocmVmcy5naXRodWIuaW8vb2NhbWxmb3JtYXQvPg0KDQpbNTggcGFyYW1l dGVyc10NCjxodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vb2NhbWwtcHB4L29jYW1s Zm9ybWF0L21haW4vb2NhbWxmb3JtYXQtaGVscC50eHQ+DQoNCltwb3NpdGlvbnMgYXZhaWxhYmxl XSA8aHR0cHM6Ly9haHJlZnMuY29tL2pvYnM+DQoNCg0KUmVsZWFzZSBvZiBvcHRpbWwtdHJhbnNw b3J0DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9k aXNjdXNzLm9jYW1sLm9yZy90L2Fubi1yZWxlYXNlLW9mLW9wdGltbC10cmFuc3BvcnQvMTAxMjgv MT4NCg0KDQpJZ2FybmllciBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhpISBbb3B0aW1sLXRyYW5zcG9ydF0gd2Fz IGp1c3QgcmVsZWFzZWQgb24gb3BhbS4gVGhpcyBsaWJyYXJ5IGJpbmRzDQogIEMrKyBwcmltaXRp dmVzIHRvIHNvbHZlIHRoZSBbb3B0aW1hbA0KICB0cmFuc3BvcnRhdGlvbl0oPGh0dHBzOi8vZW4u d2lraXBlZGlhLm9yZy93aWtpL1RyYW5zcG9ydGF0aW9uX3RoZW9yeV8obWF0aGVtYXRpY3MpPikN CiAgcHJvYmxlbSBiZXR3ZWVuIGZpbml0ZSB3ZWlnaHRlZCBwb2ludCBjbG91ZHMgKGkuZS4gZmlu aXRlDQogIG1lYXN1cmVzKS4gQ29uY3JldGVseSwgdGhpcyBhbGxvd3MgdG8gbGlmdCBhbnkgW21l dHJpY10gb24gYSBiYXNlDQogIHNwYWNlIHRvIGEgbWV0cmljIG9uIGZpbml0ZWx5IHN1cHBvcnRl ZCBwcm9iYWJpbGl0eSBtZWFzdXJlcyBvdmVyIHRoYXQNCiAgYmFzZSBzcGFjZS4gKEluIGZhY3Qs IHRoZSBsaWJyYXJ5IHdvcmtzIHdpdGggY29zdCBmdW5jdGlvbnMgbW9yZQ0KICBnZW5lcmFsIHRo YW4gdGhhdCBzYXRpc2Z5aW5nIHRoZSBtZXRyaWMgYXhpb21zLikgVGhlIGxpYnJhcnkgYWxzbw0K ICBvdXRwdXRzIGFuIG9wdGltYWwgY291cGxpbmcgYmV0d2VlbiBhbnkgdHdvIHN1Y2ggbWVhc3Vy ZXMuIE9wdGltYWwNCiAgdHJhbnNwb3J0YXRpb24gaGFzIG1hbnkgYXBwbGljYXRpb25zIGluIHN0 YXRpc3RpY3MsIGdyYXBoaWNzLA0KICBvcHRpbWl6YXRpb24sIGV0Yy4NCg0KICBUaGUgbGlicmFy eSBjb25zaXN0cyBpbiBiaW5kaW5ncyB0bw0KICA8aHR0cHM6Ly9naXRodWIuY29tL25ib25uZWVs L25ldHdvcmtfc2ltcGxleD4NCg0KDQpbb3B0aW1sLXRyYW5zcG9ydF0gPGh0dHBzOi8vZ2l0aHVi LmNvbS9pZ2Fybmllci9vcHRpbWwtdHJhbnNwb3J0Pg0KDQpbbWV0cmljXSA8aHR0cHM6Ly9lbi53 aWtpcGVkaWEub3JnL3dpa2kvTWV0cmljX3NwYWNlPg0KDQoNCk9sZCBDV04NCuKVkOKVkOKVkOKV kOKVkOKVkOKVkA0KDQogIElmIHlvdSBoYXBwZW4gdG8gbWlzcyBhIENXTiwgeW91IGNhbiBbc2Vu ZCBtZSBhIG1lc3NhZ2VdIGFuZCBJJ2xsIG1haWwNCiAgaXQgdG8geW91LCBvciBnbyB0YWtlIGEg bG9vayBhdCBbdGhlIGFyY2hpdmVdIG9yIHRoZSBbUlNTIGZlZWQgb2YgdGhlDQogIGFyY2hpdmVz XS4NCg0KICBJZiB5b3UgYWxzbyB3aXNoIHRvIHJlY2VpdmUgaXQgZXZlcnkgd2VlayBieSBtYWls LCB5b3UgbWF5IHN1YnNjcmliZQ0KICBbb25saW5lXS4NCg0KICBbQWxhbiBTY2htaXR0XQ0KDQoN CltzZW5kIG1lIGEgbWVzc2FnZV0gPG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v cmc+DQoNClt0aGUgYXJjaGl2ZV0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLz4N Cg0KW1JTUyBmZWVkIG9mIHRoZSBhcmNoaXZlc10gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5u ZXQvY3duL2N3bi5yc3M+DQoNCltvbmxpbmVdIDxodHRwOi8vbGlzdHMuaWR5bGwub3JnL2xpc3Rp bmZvL2NhbWwtbmV3cy13ZWVrbHkvPg0KDQpbQWxhbiBTY2htaXR0XSA8aHR0cHM6Ly9hbGFuLnBl dGl0ZXBvbW1lLm5ldC8+DQoNCg== --=-=-= 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 June 28 to July 05, 2= 022.

An amusing use of first-class modules: reading from plaintext = and compressed files

Continuing this thread, Ma=C3=ABlan asked and Simon C= ruanes replied

You got me curious: what=E2=80=99s the reason for using a first-class modul= e here instead of a record or an object?

Of course!

  • compared to records, I find first-class modules to be a lot more conven= ient for this use case. I still use records for d= ata, but a record-of-function is often less convenient. For example,= modules allow you to use include, they directly handle down-c= asting as a way to hide internal state (whereas for modules you need to clo= se over values created before the record); module types are structural, so = I don't need to worry about disambiguation, whereas records need more care = there. In terms of performance both seem exactly the same, from my toy benc= hmarks.
  • compared to objects, first-class modules are a bit less convenient (no = runtime-free cast, no true inheritance/mixin), but LSP and other tools are = fragile. In addition, invoking an object method seems to be roughly twice a= s slow as a record/module field access =E2=80=94 I suppose it's because the= latter is just an access via offset. That's on a micro benchmark so in rea= lity it might be worse.

Open Source tooling engineer at Jane Street

Yaron Minsky announced

We're looking to hire someone to join our build-systems team with a focus o= n open-source tooling. We currently release almost a million lines of code of our internal libraries and tools,= including things like Sexplib, Base, Core, Async, Incremental, Bonsai, Hardcaml, memtrace-viewer, and patdiff.

We have internal tooling for moving code from our internal repositories to = Github and for publishing to opam, and for ferrying information back from Github to our internal tools, so that develo= pers can more easily and promptly respond to PRs and issues coming from the outside.

We want to make open-sourcing our code better and faster, so it's easier fo= r us to work with outside contributors, and improvements can get out to the community more quickly. Your work would= be to make our releases delightfully easy and reliable!

I wrote a bit more about it here:

https://twitter.com/yminsky/status/1536766031= 313739776?s=3D20&t=3DsCyUlHGHO1y3znBh4pl0Xw

If you're interested, go ahead and make an ordinary application to our software engineering role, and mention that you're interested in "op= en-source tooling". We're happy to hire for this role in both London and New York.

Dune how to define custom build task

cnmade explained

dune has very powerful extensions, but the documentation doesn't tell you d= irectly. Today I'll share a specific example of how we can make dune do many things with a dune configuration.

For example

  • Publish compiled documents to our documentation server
  • Sending email notifications to email groups
  • Sending SMS notifications to administrators
  • Build a document and open a browser to preview the document page

Let's start with an example, we create a dune file in the root directory of= our project, which you may not have originally, you have to create a new one, we enter the following

; now we tell you how to define a custom rule
; rule start with (rule )
(rule
; (alias is point  the command name , so you can run this rule by call  dun=
e build @docopen
 (alias docopen)
 ; following line is very important, it tell dune do not cache this build c=
ommand, so it will running every call
without any cache
 (deps (universe))
 ; action  (system  to told system run command by `sh` in your Linux/MacOS,=
 windows user may running cmd.exe
 ; cd ../.. is change the base directory of the running command ,or the def=
ault directory will be _build/default
 (action (system "cd ../.. && pwd &&  dune build @doc &=
& open _build/default/_doc/_html/index.html" ))
)
; end of one piece of rule

; and we define more and more rule as we want
(rule
  (alias whoami)
  (deps (universe))
  (action (system "uname -a;whoami"))
)

In this example, we define two rules, the rules are the tasks that dune can= recognize, in dune, it is called rules

Because it is a custom build command, we use alias to take a unique and non= -repeating alias.

The first build command is to build the document and open the browser previ= ew.

Our alias is docopen

Then deps we add universe to tell dune that you don't want to cache and giv= e me a new build every time. If you don't add this line, dune will only give you one build, and then because of the c= ache, you won't be able to execute it later.

action following by system here, action is the command to start, system m= eans to use the system shell (windows is cmd, linux macos is sh) to give you the execution of the code you specify.

You can see the first we are first change the directory to the project root= directory [because the default directory is _build/default], and then we perform the build document generation, and = then open open the generated html page.

The first build command is this, if you want to perform the first build tas= k, you can type

dune build @docopen

Then our second build command, relatively simple, with reference to the fir= st, we can add a lot of build commands we want to add inside this dune configuration file.

We just need to specify different alias aliases for them, no duplication.

The official documentation also specifies some other available commands, = I won't go into them one by one. Since I prefer to use shell scripts, I really only need the system to execute my sh= ell scripts for me.

Lwt.5.6.0 (and other Lwt packages)

Rapha=C3=ABl Proust announced

Lwt 5.6.1

Version 5.6.1 of the Lwt package has been released. This version contains a= fix for a bug introduced in 5.6.0 whereby devnull file descriptor would be closed during some uses of Lwt_proce= ss.

https://githu= b.com/ocsigen/lwt/releases/tag/5.6.1

Windows-friendly OCaml 4.12 distribution - Diskuv OCaml 0.1.0<= /h2>

jbeckford announced

The 0.4.0 release of Diskuv OCaml for Windows users is available! It is usa= ble enough that I've let my school-age kids (elementary through high school) install it and go through some tutori= als.

https://g= ithub.com/diskuv/dkml-installer-ocaml#readme

The links to the documentation are available from the above link as well.

Here are the one-time inconveniences if you install this release:

  1. The built-in antivirus Windows Defender treats newly signed binaries li= ke spam. There needs to be enough people who "Report this file as safe" bef= ore the binaries are trusted. If you do nothing but mark it safe or inst= all it on Windows, you are helping others!
  2. The installer will automatically install the Visual Studio compiler if = needed. But Visual Studio sometimes requires a reboot. The instructions wil= l tell you if you need the reboot.
  3. The Visual Studio Code OCaml plugin defaults to expecting a legacy ocamlenv program on Windows. You have to search for ocamlenv= in Visual Studio Code Settings and disable it. This should have a f= ix, but not in time for this release.

Windows parity with Unix

  1. opam commands like opam install should work w= ithout any wrappers. But you should create new switches with opam dkml init (see = --help for options).
  2. dune commands like dune build should work without= any wrappers. The only hiccup is that aliases like dune build @runtest need to be esc= aped in PowerShell like:

    dune build `@runtest
    
  3. You have partial support if your home directory has spaces, since it is= very common on Windows to have your username be FirstName LastName. So far I've configured/patched most things to work with spaces, but = there could be common packages that were missed, and only NTFS drives work.=
  4. OCaml 4.12.1. I'd like to upgrade to 4.13 or 4.14, but having support f= or Visual Studio Code debugging with 4.12-only ocamlearlybird is more important, = especially for traditional Windows users.
  5. Dune 2.9.3. I've bundled in support in 2.9.3 for fswatch/inotify so tha= t dune build --watch works on Windows. Nothing is blocking an = upgrade to 3.x except time (ie. not now) and a reason.
  6. Opam 2.1.2 plus some PRs that are pending the not-yet-released version = 2.2.
  7. Git performance on Windows just sucks. It is like someone designed it f= or a Linux kernel =F0=9F=A4=A8. Apparently Git= FSMonitor in 2.37.0 can be enabled to speed things up, but I don't hav= e real-world experience with it because it was just released yesterday.
  8. MSYS2, which can be accessed with with-dkml bash, now uses= the CLANG64 variant. There are thousands of up-to-date third-party librari= es available and, unlike MinGW, they are ABI compatible with the dominant W= indows compiler (MSVC). And if you are interested there is an ocamlverse Help Wanted= to add the CLANG64 compiler as an alternative to the Administrator-req= uiring, reboot-needing MSVC compiler.

Thanks to OCaml Software Foundation for sponsoring this!

0.4.x will be the last minor versions of the "preview". I'll be shifting to= closing out any show-stopping bugs, and updating the various Windows onboarding guides for OCaml to officially incl= ude Diskuv OCaml.

OCamlFormat Web Configurator

Louis Roch=C3=A9 announced

It is my pleasure to share with you the ocamlformat configurator as a web page.

Ocamlformat is a great tool that really makes editing code a more pleasant = experience. It has a bunch of different built in profiles and many additional options to fine tune how the code sho= uld look like. While I would encourage most people and new projects to use one of the default profiles, the many o= ptions are helpful when transitioning an existing codebase. Unfortunately it is not super easy to figure out which o= ptions to use and how to combine them. There are 58 parameters! I've spent a long time trying different combinations by changing an option in my= .ocamlformat, running `dune build @fmt`, checking the code, going back to the first step… It is a tedious wor= k. So I decided to make a simple web interface with all of the options available and a faster feedback loop.

=3D"24e891e9e1400d4a47debf9e34b3ea414bebf418_2_1380x826.jpeg"

Thanks to js_of_ocaml the task was not too complicated. Ocamlformat can be = compiled to javascript, there is nothing special to do. Which means everything can be done in the browser, the code = won't leak to anyone, there is no need to maintain a server, and the result will be guaranteed to be identical as a f= ormatting with the cli tool.

The configuration can be set through text (just put the content of your `.o= camlformat` in the text box) and through a bunch of dropdown. They will be combined together. The dropdown takes prece= dence over the textual configuration if an option is set in both.

The project has been started as part of the "open source day" at Ahrefs (we= try to dedicate some time to open source projects that we use internally). It is still in its infancy. Please pardon= the terrible style, I am not a web developer and didn't have time to make it look nicer yet. There are some an= noying things to fix (no feedback when the code is invalid and can't be formatted), and many improvements to come (a w= ay to download the configuration for example). But I think that it is already working well enough to be used by = others.

You can find the configurator at https://ahrefs.github.io/ocamlformat/
The source code is on github at https://github.com/ahrefs/ocamlformat/= tree/ahrefs/web-ui/bin/web-ui

If you like ocaml and want to look for a job, we have some positions available

Release of optiml-transport

Igarnier announced

Hi! optiml-transpo= rt was just released on opam. This library binds C++ primitives to solve the [optimal transportation](https://en.wikipedia.org/wiki/Transportation_th= eory_(mathematics)) problem between finite weighted point clouds (i.e. finite measures). Concretely, this allows to li= ft any metric on a base= space to a metric on finitely supported probability measures over that base space. (In fact, the library works with cost functi= ons more general than that satisfying the metric axioms.) The library also outputs an optimal coupling between any tw= o such measures. Optimal transportation has many applications in statistics, graphics, optimization, etc.

The library consists in bindings to https://github.com/nbonneel/network_simplex

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.

--=-=-=--