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 F093B5D5 for ; Tue, 7 Sep 2021 13:24:16 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.84,326,1620684000"; d="scan'208,217";a="527136698" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 07 Sep 2021 15:24:13 +0200 Received: by sympa.inria.fr (Postfix, from userid 20132) id 141E6E010E; Tue, 7 Sep 2021 15:24:13 +0200 (CEST) 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 91B65E010C for ; Tue, 7 Sep 2021 15:24:08 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=pOv4=N5=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org IronPort-PHdr: =?us-ascii?q?A9a23=3AfluM7RIiZMqBOFmTG9mcuJtgWUAX0o4c3iYr45Y?= =?us-ascii?q?qw4hDbr6kt8y7ehCFvbM81RSUAs3y0LFts6LuqafuWGgNs96qkUspV9hybSIDk?= =?us-ascii?q?tgchAc6AcSIWgXRJf/uaDEmTowZDAc2t360PlJIF8ngelbcvmO97SIIGhX4KAF?= =?us-ascii?q?5Ovn5FpTdgsipy+y+4ZnebxhHiDe9Y755MQm7oxjWusQKm4VpN7w/ygHOontGe?= =?us-ascii?q?uRWwX1nKFeOlBvi5cm+4YBu/T1It/0u68BPX6P6f78lTbNDFzQpL3o15Mzwuhb?= =?us-ascii?q?dSwaE+2YRXX8XkhpMBAjF8Q36U5LsuSb0quZxxC+XNtDxQr4pRDSi9L9rRwH0h?= =?us-ascii?q?ycbOTA592TXhdZxjKJdvRmtoxNyzorRbIyTNPZwfaXdfc0bRWpaX8ZeTChBDZ2?= =?us-ascii?q?hZIoBCOoBJ/tXr5LgrFcKoxayGQygCeXywTFKm3D2x7U33eQ/Hw/b0gIuHN0Bv?= =?us-ascii?q?2jPodrvKKsfS/q4wLXUwTjBaf5dxDfz6JLPchAkufyBQbZwftDXyUIyCg3KklW?= =?us-ascii?q?QqYnkPzOJyuQGrm+W4PBkVe21jW4rsRpxrSSvxscpi4nJmp4Vx0vc9SV+xIY0J?= =?us-ascii?q?cG4R1Bnbt6kFptQtjiaN5ZoTc84RGFooik6x6QAtJWmcycE1I4pyATDa/ybbYe?= =?us-ascii?q?I+BTjWf6QLDp7hH9oe6+yihas/EWjxOPyWcm53VZXoyZYjtXBt34D2RzP58SZV?= =?us-ascii?q?vdw4kev1CqT2g3d5OxJIUI5mLbaJpM/xLM7i5QdsUPGHiDsmUX2irebdl069ei?= =?us-ascii?q?06uTnfqvppoebN49xjwHxLL4imsqhDuQkKgQOWHSU9v651L3n50H5R69KjvIun?= =?us-ascii?q?qnWsZDaOcQbprOiDANPzokj7BO/Ay+p0NsGm3kIMkhFeBObgITzPlHOJOj0Dfi?= =?us-ascii?q?+g1SwkDdr2uvJMqfgApXKNnTDl6vucqx4605Y0Aoz19df64hIBbEGJfL/QlT+t?= =?us-ascii?q?NjfDh8+Ngy72PjoCM9y1o8ERW2PBaqZPLvTsVCW+uIvLfOAZIgPuDbyM/Ql5+L?= =?us-ascii?q?ujWMhmVMDZ6Wp25wXaX6gEvRkOUqZZ2TjgswdEWcQoAUxUvDqhEeeXj5UYna+R?= =?us-ascii?q?7486SshCIKnEIjMWJutjKad0ye8G51afmFGBU2MEHfsc4WIQfAMaDidIsJnjzc?= =?us-ascii?q?KVqChRpc82R2wsAL20adrIvbb9yECu5/vyMJ56uPcmB0q6DB5AdmR33uTQ2x0k?= =?us-ascii?q?W4EXSI60LxlrUBgyFqPza51iOFCG9NJ/fNGSAI6OIbcz+NkD9DyXRrMftKGSVq?= =?us-ascii?q?7WNmmGTYxTtYxwt8SfUlyB9WijhbC3yqzHr8aiaaHBJsu8qLTx3TxJsB9xGja1?= =?us-ascii?q?KQ5klUqXM9COXe7iqJj+AXfHYDEn1mDm6ukeqkQxCvN+32CzWqKskFYSglwUaD?= =?us-ascii?q?dUH4CekXYsMj161vaT7G3F7QqPRNMx9aCJ6ZSct3pilFGRff/ONvAf22xm2GwB?= =?us-ascii?q?ReRxrORcoXmYWId3D/SCEUciQ8T+WyJNQ4kCie6v23eDDluFVPzY0Pw6uRxs3S?= =?us-ascii?q?7TlIyzw6WcUJhzKC5+hsaiP2TUf8T2agEuCg5pzVuAFm9x87WC8aHpwd5YKpTe?= =?us-ascii?q?9Y94FNe2WLdtgx9JYCgIrt5hl8edgR3p1nh2w92CoVGi8gqrWklwBB8KaKCgxt?= =?us-ascii?q?9cGbS2Y/2cPWDLnb01BSwbejQ102IlJ7c8bgJorxw/178uimtF1E+6DNm38hR1?= =?us-ascii?q?z2b/JqcSEIZWJf1F0I27ARSprfAYyB76ZmH+2drNPydtjbEk+kiBO4k1groK95?= =?us-ascii?q?bOaXCDwTyFswGG+C2L+g7h1WibhQFJf1fsqkuMJX1JLO9xKe3MbM4z3qdhmNd7?= =?us-ascii?q?dUigypkGAJ2TfPO1JsehfTEzk2ATTiu1T9JV+jvnoRVeTwZHmy+0DXpQolLaf8?= =?us-ascii?q?rFW7qIWK+eouvwdFvm5PmW3hZ7UOuQVQc153wESc=3D?= IronPort-HdrOrdr: =?us-ascii?q?A9a23=3ADQAWQa6uMT7qUhvjAAPXwM/XdLJyesId70hD?= =?us-ascii?q?6qkRc3xom6Oj+PxG8M5w6faWslcssRMb9+xoUZPoKRjhHPVOjbX5U43OYCDW/E?= =?us-ascii?q?OWaKti4YHhzzCIIVycysdtkYF6fexbAN30ZGIK6PoSDTPIceod/A=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0DpAAASaxphlyIeaIFahAVTRwFkVzoxh?= =?us-ascii?q?EeJBIZFgiSDKIV1hleMC4ERA08QAQMBDSoBDgUBAgQBAYFsgnUCF4JUAh4GAQU?= =?us-ascii?q?zEwECBBUBAQUBAQECAQMDBAETAQEBAQEBAQEJGwZehTsGJw2CNQwMAwODdwEYA?= =?us-ascii?q?wYEBkMiIwMJCwEGAwIEDQEXARQKFwESFAaCVwGDBwUKi2KcCn8ygQGDTQEDAwI?= =?us-ascii?q?OAQ4JhDuBYw0CFIEXhXBTSAGCbQiDcAInEIFVRIEVgiRRboJAFwsBAQEBARd/H?= =?us-ascii?q?gQDAQEITgmCWIJkBIMnIA44BT8jKQgZDgEBCRcCDSAJCBsRBAEHAyoVBAEFBAQ?= =?us-ascii?q?YAS0JAg0UGQORJwYVA4xDgzKHBpNXay0HgyuBMQYLh2aBFYxFh3uDZYFIihuXL?= =?us-ascii?q?SGVcIh1gQsJgjWHcYs9KQIGCySEeYFNKoFMAR0BCwczGjBDgjUBMwkJVw6KC4N?= =?us-ascii?q?zLhaDUIJkgXU7hUw/MgIBAQctAgYBCgEBAwmBCAEBBRMLAYYALIE9XgEB?= X-IPAS-Result: =?us-ascii?q?A0DpAAASaxphlyIeaIFahAVTRwFkVzoxhEeJBIZFgiSDKIV?= =?us-ascii?q?1hleMC4ERA08QAQMBDSoBDgUBAgQBAYFsgnUCF4JUAh4GAQUzEwECBBUBAQUBA?= =?us-ascii?q?QECAQMDBAETAQEBAQEBAQEJGwZehTsGJw2CNQwMAwODdwEYAwYEBkMiIwMJCwE?= =?us-ascii?q?GAwIEDQEXARQKFwESFAaCVwGDBwUKi2KcCn8ygQGDTQEDAwIOAQ4JhDuBYw0CF?= =?us-ascii?q?IEXhXBTSAGCbQiDcAInEIFVRIEVgiRRboJAFwsBAQEBARd/HgQDAQEITgmCWIJ?= =?us-ascii?q?kBIMnIA44BT8jKQgZDgEBCRcCDSAJCBsRBAEHAyoVBAEFBAQYAS0JAg0UGQORJ?= =?us-ascii?q?wYVA4xDgzKHBpNXay0HgyuBMQYLh2aBFYxFh3uDZYFIihuXLSGVcIh1gQsJgjW?= =?us-ascii?q?HcYs9KQIGCySEeYFNKoFMAR0BCwczGjBDgjUBMwkJVw6KC4NzLhaDUIJkgXU7h?= =?us-ascii?q?Uw/MgIBAQctAgYBCgEBAwmBCAEBBRMLAYYALIE9XgEB?= X-IronPort-AV: E=Sophos;i="5.84,326,1620684000"; d="scan'208,217";a="392272748" X-MGA-submission: =?us-ascii?q?MDEqXKE3SjBBa6kpI9Fdzpcj2Sq4KosFPJBpWh?= =?us-ascii?q?+Ayo8MoLMpbXUx5q5FI4aDUrU/hh0P6eT6BCDcRjKh7FVtSkgV2M6yGc?= =?us-ascii?q?SrWpIUDZz3C9Y8+YePDvxu3P0dsUchoJyzuJhXRivtLHk2DCGRwm53Rl?= =?us-ascii?q?YSiF9rXbkgeOD10PEuLiJkOg=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Sep 2021 15:24:06 +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 BF28C5647CF; Tue, 7 Sep 2021 15:24:04 +0200 (CEST) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr Date: Tue, 07 Sep 2021 15:23:55 +0200 Message-ID: <87eea08qok.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Sep 7 15:24:05 2021 +0200 (CEST)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.489620, queueID=251B75647D0 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: 18561 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 ZWsgb2YgQXVndXN0IDMxIHRvDQpTZXB0ZW1iZXIgMDcsIDIwMjEuDQoNClRhYmxlIG9mIENvbnRl bnRzDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KSnVzdCByZWludmVudGVkIE9PUA0KdjMuT0NhbWwub3JnOiBBIHJvYWRtYXAgZm9yIE9DYW1s J3Mgb25saW5lIHByZXNlbmNlDQpCZWNvbWUgYW4gT3V0cmVhY2h5IE1lbnRvcjogc3VwcG9ydCB0 aGUgZ3Jvd3RoIGFuZCBkaXZlcnNpdHkgb2YgdGhlIE9DYW1sIGNvbW11bml0eQ0KR2VuZXJhdGlu ZyBzdGF0aWMgYW5kIHBvcnRhYmxlIGV4ZWN1dGFibGVzIHdpdGggT0NhbWwNCk9DYW1sIHF1YW50 LWRldmVsb3BlciBhdCBCbG9vbWJlcmcuIExvbmRvbiBvciBOZXcgWW9yaw0KSFRUUCBjbGllbnQg bGlicmFyeQ0KT3RoZXIgT0NhbWwgTmV3cw0KT2xkIENXTg0KDQoNCkp1c3QgcmVpbnZlbnRlZCBP T1ANCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvanVzdC1yZWlu dmVudGVkLW9vcC84Mzk5LzE+DQoNCg0KWWF3YXIgQW1pbiBzYWlkDQrilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICDilIzilIDilIDilIDilIANCiAg4pSC IGxldCAoIC4hW10gKSBvYmogZiA9IGYgb2JqDQogIOKUgiANCiAg4pSCIHR5cGUgcGVyc29uID0g eyBpZCA6IGludDsgbmFtZSA6IHN0cmluZyB9DQogIOKUgiANCiAg4pSCIGxldCBpZCB7IGlkOyBf IH0gPSBpZA0KICDilIIgDQogIOKUgiBsZXQgYm9iID0geyBpZCA9IDE7IG5hbWUgPSAiQm9iIiB9 DQogIOKUgiBsZXQgbmV4dF9pZCA9IGJvYi4hW2lkXS4hW3N1Y2NdDQogIOKUlOKUgOKUgOKUgOKU gA0KDQogID09PiAyDQoNCg0KS2lyYW4gR29waW5hdGhhbiByZXBsaWVkDQrilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIANCg0KICBIYWhhLCB3aGF0IGEgY29pbmNpZGVuY2UsIGp1c3QgZGlkIHRoZSBzYW1lIHZlcnkg cmVjZW50bHkgd2hpbGUNCiAgdHJhbnNsYXRpbmcgYSBydXN0IGxpYnJhcnkgdG8gT0NhbWw6DQog IDxodHRwczovL2dpdGh1Yi5jb20vR29waWFuZGNvZGUvZWdvL2Jsb2IvNWRhZjMxMmY4YTQ0NGY5 YWJjZGU1OTk2YzY3MWI5MjgyNzI3YTk3Mi9saWIvZ2VuZXJpYy5tbCNMMjExPg0KICDilIzilIDi lIDilIDilIANCiAg4pSCIGxldCBlY2xhc3NlcyA9IGVnLkBbZWNsYXNzZXNdIGluDQogIOKUgiBs ZXQgY29zdF9tYXAgPSBJZC5NYXAuY3JlYXRlIDEwIGluDQogIOKUgiBsZXQgbm9kZV90b3RhbF9j b3N0IG5vZGUgPQ0KICDilIIgICBsZXQgaGFzX2Nvc3QgaWQgPSBJZC5NYXAubWVtIGNvc3RfbWFw IChlZy5AW2ZpbmRdIGlkKSBpbg0KICDilIIgICBpZiBMaXN0LmZvcl9hbGwgaGFzX2Nvc3QgKEwu Y2hpbGRyZW4gbm9kZSkNCiAg4pSCICAgdGhlbiBsZXQgY29zdF9mIGlkID0gZnN0IEBAIElkLk1h cC5maW5kIGNvc3RfbWFwIChlZy5AW2ZpbmRdIGlkKSBpbiBTb21lIChFLmNvc3QgY29zdF9mDQog IOKUgiBub2RlKQ0KICDilIIgICBlbHNlIE5vbmUgaW4NCiAg4pSCICAgKCogLi4uICopDQogIOKU lOKUgOKUgOKUgOKUgA0KICB3aXRoIGAuQFtdJyBkZWZpbmVkIGFzOg0KICDilIzilIDilIDilIDi lIANCiAg4pSCIGxldCAoLkBbXSkgc2VsZiBmbiA9IGZuIHNlbGYgW0BAaW5saW5lIGFsd2F5c10N CiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgZm9yIGJvbnVzKD8pIHBvaW50cywgeW91IGNhbiBuYW1l IHRoZSBmaXJzdCBwYXJhbWV0ZXIgc2VsZjoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBsZXQg YWRkX2Vub2RlIHNlbGYgKG5vZGU6IElkLnQgTC5zaGFwZSkgPQ0KICDilIIgICBsZXQgbm9kZSA9 IHNlbGYuQFtjYW5vbmljYWxpc2VdIG5vZGUgaW4NCiAg4pSCICAgKCogLi4uICopDQogIOKUlOKU gOKUgOKUgOKUgA0KICBJIGRvbid0IG5vcm1hbGx5IHdyaXRlIGNvZGUgbGlrZSB0aGlzIGluIE9D YW1sLCBidXQgaW4gdGhpcyBjYXNlLCBpdA0KICBtYWRlIHBvcnRpbmcgZnJvbSBydXN0IGVhc2ll ciwgYmVjYXVzZSB0aGUgY29kZSBtb3N0bHkgbG9va2VkIHRoZQ0KICBzYW1lLg0KDQoNCmh5cGhl bnJmIGFsc28gcmVwbGllZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgWW91IGNhbiB1c2UgdGhlIG11bHRpcGxlLWlu ZGV4aW5nIHN5bnRheCB0byBpbXBsZW1lbnQgc2xpY2luZyAod2VsbCwNCiAgdGVjaG5pY2FsbHkg c3Vicykgc3VnYXI6DQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgbGV0ICguOls7Li5dKSBzID0g ZnVuY3Rpb24NCiAg4pSCICAgfCBbfHN0YXJ0OyBmaW5pc2h8XSAtPiBTdHJpbmcuc3ViIHMgc3Rh cnQgKGZpbmlzaCAtIHN0YXJ0KQ0KICDilIIgICB8IF8gLT4gcmFpc2UgKEludmFsaWRfYXJndW1l bnQgInNsaWNlIHRha2VzIGV4YWN0bHkgdHdvIGluZGV4ZXMiKQ0KICDilJTilIDilIDilIDilIAN CiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiAjICJoZWxsbyB3b3JsZCIuOlsxOzVdOzsNCiAg4pSC IC0gOiBzdHJpbmcgPSAiZWxsbyINCiAg4pSU4pSA4pSA4pSA4pSADQogIFRoZSBuZXcgaW5kZXhp bmcgc3ludGF4IGlzIHF1aXRlIHZlcnNhdGlsZSA6Pg0KDQoNCktpcmFuIEdvcGluYXRoYW4gYWRk ZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgA0KDQogIE9oIHdvdywgdGhpcyBpcyBwZXJmZWN0ISBicmIsIG9mZiB0byBy ZWltcGxlbWVudCB0aGUgcHl0aG9uIHNsaWNpbmcNCiAgc2VtYW50aWNzIGluIE9DYW1sOg0KICDi lIzilIDilIDilIDilIANCiAg4pSCIGxldCAoLkBbOy4uXSkgbHMgPSBmdW5jdGlvbltAd2Fybmlu ZyAiLTgiXQ0KICDilIIgICB8IFt8IHN0YXJ0OyAtMSB8XSAtPg0KICDilIIgICAgIExpc3QudG9f aXRlciBscw0KICDilIIgICAgIHw+IEl0ZXIuemlwX2kNCiAg4pSCICAgICB8PiBJdGVyLmRyb3Bf d2hpbGUgKFBhaXIuZnN0X21hcCAoKD4pIHN0YXJ0KSkNCiAg4pSCICAgICB8PiBJdGVyLm1hcCBz bmQNCiAg4pSCICAgfCBbfCBzdGFydDsgZmluaXNoIHxdIC0+DQogIOKUgiAgICAgTGlzdC50b19p dGVyIGxzDQogIOKUgiAgICAgfD4gSXRlci56aXBfaQ0KICDilIIgICAgIHw+IEl0ZXIuZHJvcF93 aGlsZSAoUGFpci5mc3RfbWFwICgoPikgc3RhcnQpKQ0KICDilIIgICAgIHw+IEl0ZXIudGFrZV93 aGlsZSAoUGFpci5mc3RfbWFwICgoPikgZmluaXNoKSkNCiAg4pSCICAgICB8PiBJdGVyLm1hcCBz bmQNCiAg4pSCICAgfCBbfCBzdGFydDsgZmluaXNoOyBzdGVwIHxdIC0+DQogIOKUgiAgICAgTGlz dC50b19pdGVyIGxzDQogIOKUgiAgICAgfD4gSXRlci56aXBfaQ0KICDilIIgICAgIHw+IEl0ZXIu ZHJvcF93aGlsZSAoUGFpci5mc3RfbWFwICgoPikgc3RhcnQpKQ0KICDilIIgICAgIHw+IEl0ZXIu dGFrZV93aGlsZSAoUGFpci5mc3RfbWFwICgoPikgZmluaXNoKSkNCiAg4pSCICAgICB8PiBJdGVy LmZpbHRlciAoUGFpci5mc3RfbWFwIChmdW4gaW5kIC0+IChpbmQgLSBzdGFydCkgbW9kIHN0ZXAg PSAwKSkNCiAg4pSCICAgICB8PiBJdGVyLm1hcCBzbmQNCiAg4pSU4pSA4pSA4pSA4pSADQoNCg0K djMuT0NhbWwub3JnOiBBIHJvYWRtYXAgZm9yIE9DYW1sJ3Mgb25saW5lIHByZXNlbmNlDQrilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0 cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3YzLW9jYW1sLW9yZy1hLXJvYWRtYXAtZm9yLW9jYW1s cy1vbmxpbmUtcHJlc2VuY2UvODM2OC8xOT4NCg0KDQpDb250aW51aW5nIHRoaXMgdGhyZWFkLCBB bmlsIE1hZGhhdmFwZWRkeSByZXBsaWVkIHRvIG1hbnkgY29tbWVudHMNCuKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgA0KDQogIE1hbnkgdGhhbmtzIGZvciBhbGwgdGhlIGNvbnN0cnVjdGl2ZSBj b21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgc28gZmFyLA0KICBhbmQgYWxzbyBmb3IgdGhvc2Ugd2hv IGhhdmUgZ290dGVuIGluIHRvdWNoIHRvIGNvbnRyaWJ1dGUuIFBsZWFzZSBkbw0KICBrZWVwIHRo ZW0gY29taW5nIChlaXRoZXIgb24gdGhpcyB0aHJlYWQgb3Igb24gdGhlIHZhcmlvdXMgaXNzdWUN CiAgdHJhY2tlcnMgdGhhdCBAam9ubHVkbGFtIGFuZCBAcGF0cmljb2ZlcnJpcyBoYXZlIHBvaW50 ZWQgdG8pLiAgSSdsbA0KICBhbnN3ZXIgc29tZSBlYXJsaWVyIHF1ZXN0aW9ucyBoZXJlOg0KDQog ICAgICAgIEhhdmluZyBzYWlkIHRoYXQsIHRoZSBjb2xvcnMgb24gdGhlIFtwYWNrYWdlcyBsYW5k aW5nIHBhZ2UNCiAgICAgICAgXSBmZWVsIHZlcnkgYWdncmVzc2l2ZSB0byBtZS4gTWlnaHQgYmUg bXkgc2V0dXAgaGVyZSwgYnV0DQogICAgICAgIEkgd291bGQgbGlrZSB0byBoYXZlIGEgc2xpZ2h0 bHkgbGVzcyBoYXJzaCBjb250cmFzdC4NCg0KICAgICAgICBBbHNvLCB0aGVyZSBpcyBhIGJpdCBv ZiBhbiBvdmVybGFwIGluIGNvbnRlbnQgd2l0aA0KICAgICAgICBbaHR0cHM6Ly9vY2FtbHZlcnNl LmdpdGh1Yi5pby8gXSBmb3Igc29tZSB0aGluZ3MgKGVnIGJlc3QNCiAgICAgICAgcHJhY3RpY2Vz LCBjb21tdW5pdHkpIGJ1dCB0aGUgKHRvIG1lKSBtb3N0IHZhbHVhYmxlDQogICAgICAgIGZlYXR1 cmUgaXMgbWlzc2luZzogVGhlIGVjb3N5c3RlbXMgb3ZlcnZpZXcsIHdoZXJlIEkgY2FuDQogICAg ICAgIGZpbmQgcGFja2FnZXMgc29ydGVkIHRoZW1hdGljYWxseS4gQ291bGQgc3VjaCBhIHNlY3Rp b24NCiAgICAgICAgYWxzbyBoYXZlIGEgcGxhY2UgaW4gdGhlIHBhY2thZ2VzIHN1YnBhZ2Ugc29t ZXdoZXJlPw0KICAgICAgICBBbHRlcm5hdGl2ZWx5LCBtYXliZSBvcGFtIGNhbiBhbGxvdyB0byDi gJx0YWfigJ0gcGFja2FnZXMgaW4NCiAgICAgICAgdGhlIGZ1dHVyZSBzbyBvbmUgY291bGQgc2Vl IGFsbCBwYWNrYWdlcyBmb3IgZ3JhcGhpY3MsDQogICAgICAgIGRhdGFiYXNlcyBldGMuDQoNCiAg VGhlIHN0eWxpbmcgb2YgdGhlIC9wYWNrYWdlcyBzdWItVVJMIGRvZXMgaW5kZWVkIGRpZmZlciBm cm9tIHRoZSBtYWluDQogIGRlc2lnbiwgYnV0IHRoaXMgaXMgc2ltcGx5IGR1ZSB0byBhIHRlbXBv cmFyeSB0ZWNobmljYWwgZGV0YWlsLiBUaGUNCiAgbWFqb3JpdHkgb2YgdGhlIHNpdGUgdXNlcyBS ZWFjdC9OZXh0SlMgdG8gZ2VuZXJhdGUgdGhlIGZyb250ZW5kLCBhbmQNCiAgdGhpcyB1c2VzIHRo ZSBub3ctdHJlbmR5IG1lZGl1bS1jb250cmFzdCBjb2xvdXJzIGFuZCBhbHNvIGZlYXR1cmVzDQog IGxpa2UgZmFzdC1wYWdlLXN3aXRjaGluZyB0aGF0IE5leHRKUyBvZmZlcnMuICBIb3dldmVyLCB0 aGUNCiAgZG9jdW1lbnRhdGlvbiBwb3J0aW9uIGdlbmVyYXRlZCBhcm91bmQgMi43IG1pbGxpb24g aW5kaXZpZHVhbCBwYWdlcw0KICB3aGVuIHJ1biBhY3Jvc3MgdGhlIGZ1bGwgb3BhbSByZXBvc2l0 b3J5LCBhbmQgc28gd2UgcmVzdG9yZWQgdG8NCiAgZHluYW1pYyBnZW5lcmF0aW9uIG9mIHRoZSBj b250ZW50IGZvciB0aGF0LiBXaGF0J3MgZ29pbmcgdG8gaGFwcGVuDQogIG5leHQgaXMgYSByYXRp b25hbGlzYXRpb24gb2YgdGhlIGNvZGUgYWNyb3NzIHRoZSBSZVNjcmlwdCBhbmQgT0NhbWwNCiAg ZnJvbnRlbmRzIHNvIHRoYXQgdGhlcmUgd2lsbCBiZSBubyBvYnNlcnZhYmxlIGRpZmZlcmVuY2Ug aW4gdGhlIGNvbG91cg0KICBzY2hlbWVzIGFjcm9zcyB0aGUgZnVsbCBzaXRlLg0KDQogIFJlZ2Fy ZGluZyBjcmVhdGluZyBhIGNhdGVnb3Jpc2VkIGxpc3Qgb2YgcmVjb21tZW5kYXRpb25zLCB0aGF0 IGlzDQogIGFic29sdXRlbHkgaW4gc2NvcGUgZm9yIHRoZSB2MyBpdGVyYXRpb24gb2YgdGhlIHNp dGUuIEhvd2V2ZXIsIHRoaXMNCiAgbWV0YWRhdGEgc2hvdWxkIGlkZWFsbHkgbGl2ZSBpbiB0aGUg b3BhbS1yZXBvc2l0b3J5IChmb3IgZXhhbXBsZSwNCiAgdXNpbmcgYHRhZ3MnIGFzIHlvdSBzdWdn ZXN0LCB3aGljaCBvcGFtIGFscmVhZHkgc3VwcG9ydHMpLiBJZiBhbnlvbmUNCiAgd291bGQgbGlr ZSB0byBoYXZlIGEgZ28gYXQgdGhpcywgSSdkIGVuY291cmFnZSBQUnMgdG8gdGhlDQogIG9wYW0t cmVwb3NpdG9yeSB0byBhZGQgdGhlIHJlbGV2YW50IHRhZyBtZXRhZGF0YSBmb3IgYQ0KICBjb2Rl eC4gTWVhbndoaWxlLCBAbGFtYmRhX2ZvbyBAdG1hdHRpbyBhbmQgQHBhdHJpY29mZXJyaXMgYXJl IHdvcmtpbmcNCiAgb24gdGhlIGNvcmUgT0NhbWwgUGxhdGZvcm0gd29ya2Zsb3cgaW5mb3JtYXRp b24gZm9yIHRoZSBndWlkZXMgc2VjdGlvbg0KICBvZiB0aGUgd2Vic2l0ZSB3aGljaCB3aWxsIGNv dmVyIG9wYW0sIG1lcmxpbiwgbHNwLXNlcnZlciwgZHVuZSBhbmQgc28NCiAgb24uDQoNCiAgICAg ICAgRG8gd2UgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBwcmV2aW91cyB5ZWFyc+KAmSB3b3Jr c2hvcHMNCiAgICAgICAgdG8gYWRkIHRvIFt3YXRjaC5vY2FtbC5vcmddPyAgSSBjYW4gc2VlIHBp ZWNlcyBvZiAyMDE1LA0KICAgICAgICAyMDE3LCAyMDIwIGFuZCB0aGlzIHllYXIuIEBhdnNtDQoN CiAgICAgICAgSXMgaXQgcG9zc2libGUgdG8gYWRkIHRoZSBNTCBXb3Jrc2hvcCBhcyB3ZWxsPw0K DQogIEFic29sdXRlbHkuIFRoZSB3YXRjaC5vY2FtbC5vcmcgaGFzIGhlbGQgdXAgbmljZWx5IGFm dGVyIHRoZSBPQ2FtbA0KICBXb3Jrc2hvcCwgc28gSSB0aGluayBpdCdzIGluIGdvb2Qgc2hhcGUg dG8gcG9wdWxhdGUgd2l0aCBtb3JlDQogIHZpZGVvcy4gVGhpcyBuZWVkcyBhIHZvbHVudGVlciB0 byBoZWxwIHVzIHVwbG9hZCB0aGUgcGFzdCBbbmluZSB5ZWFyc10NCiAgb2YgdmlkZW9zIGZyb20g WW91VHViZSB0byB3YXRjaC5vY2FtbC5vcmcuIElmIGFueW9uZSB3YW50cyB0byBoYXZlIGENCiAg Z28sIHBsZWFzZSBtZXNzYWdlIG1lIGFuZCBJJ2xsIGNyZWF0ZSB5b3UgYW4gYWNjb3VudC4NCg0K ICAgICAgICBJdOKAmXMgYSBiaXQgdW5jbGVhciB3aGF0IHlvdSBtZWFudCBpbiB0aGlzIHBhcmFn cmFwaC4gRG9lcw0KICAgICAgICB0aGF0IG1lYW4gdGhhdCB5b3UgcGxhbiB0byBraWxsIHRoZSBv Y2FtbCBwbGFuZXQgPyBJIHdvdWxkDQogICAgICAgIGZpbmQgaXQgYSBsaXR0bGUgYml0IHNhZC4N Cg0KICAgICAgICBPbmUgb2YgdGhlIHJlYXNvbiB3aHkgeW91IG1heSBmZWVsIGl0IGRvZXNu4oCZ dCB3b3JrIHdlbGwNCiAgICAgICAgbWF5IGJlIHRoYXQgaXQgaGFzIGJlZW4gY29uc3RhbnRseSBi cm9rZW4gaW4gdGhlIGN1cnJlbnQNCiAgICAgICAgdmVyc2lvbiBvZiB0aGUgc2l0ZeKApg0KDQog IEknbSBub3Qgc3VyZSB3aHkgeW91IHRoaW5rIHRoZSBjdXJyZW50IG9jYW1sLm9yZyBuZXcgZmVl ZCBoYXMgYmVlbg0KICBicm9rZW4g4oCTIGl0J3MgYmVlbiB3b3JraW5nIGZhaXJseSByZWxpYWJs eSBmb3IgdGhlIHBhc3QgZGVjYWRlLiBUaGUNCiAgb25seSByZWFsIHByb2JsZW0gY2FtZSB1cCBh IGZldyB0aW1lcyB3aGVuIGEgZmVlZCdzIGRvbWFpbiBleHBpcmVkIGFuZA0KICBnb3QgdGFrZW4g b3ZlciBieSBkb21haW4gc3F1YXR0ZXJzLCBhdCB3aGljaCBwb2ludCB3ZSBnb3Qgc3BhbSBpbnRv DQogIHRoZSBtYWluIHBhZ2Ugb2Ygb2NhbWwub3JnLg0KDQogIFdoYXQgSSBtZWFudCB3aXRoIHRo YXQgcGFydCBvZiB0aGUgYW5ub3VuY2VtZW50IGlzIHRoYXQgdGhlDQogIHN5bmRpY2F0aW9uIGZl ZWQgc2hvdWxkIG5vdCBiZSBtaXN0YWtlbiB3aXRoIG9yaWdpbmFsIG5ld3Mgb24gdGhlDQogIHdl YnNpdGUuIFJpZ2h0IG5vdyBpdCdzIGRpZmZpY3VsdCB0byBkaXN0aW5ndWlzaCBvZmZpY2lhbA0K ICBhbm5vdW5jZW1lbnRzIChzdWNoIGFzIGNvbXBpbGVyIG9yIG9wYW0gcmVsZWFzZXMpIGFzIHRo ZXkgYXJlIGEgbGl0dGxlDQogIHNjYXR0ZXJlZCAoZS5nLiBvbiBvcGFtLm9jYW1sLm9yZykuIFRo ZSBwbGFuIGlzIHRvIGNvbWJpbmUgdGhlDQogIFtwbGF0Zm9ybS1ibG9nXSB3aXRoIHRoZSBuZXcg d2Vic2l0ZSBkaXJlY3RseS4gSSd2ZSBhbHNvIGJlZW4NCiAgY29uc2lkZXJpbmcganVzdCBoYXZp bmcgYSBzcGVjaWFsIHRhZyBvbiB0aGlzIGZvcnVtIHNvIHRoYXQgbmljZQ0KICBhbm5vdW5jZW1l bnQgcG9zdHMgY291bGQgYWxzbyBiZSBzeW5kaWNhdGVkIHRvIHRoZSB3ZWJzaXRlIGVhc2lseSAo Zm9yDQogIGV4YW1wbGUsIEBnYXNjaGUncyBjb21waWxlciBuZXdzbGV0dGVycykuDQoNCiAgTXkg Z2VuZXJhbCBkZXNpcmUgaXMgdG8gX2dyb3dfIHRoZSBwbGFuZXQgZmVlZCBhbmQgc3luZGljYXRp b24gc3lzdGVtLA0KICBidXQgdG8gY2xlYXJseSBkZW1hcmNhdGUgdGhlbSBhcyBub3QgYmVpbmcg cHVibGlzaGVkIGJ5IG9jYW1sLm9yZyBhbmQNCiAgdG8gbWFuYWdlIHRoZW0gdmlhIG1vcmUgbW9k ZXJuIGRlY2VudHJhbGlzZWQgdGVjaG5pcXVlcyB0aGF0IGZlYXR1cmUNCiAgc3BhbSwgbW9kZXJh dGlvbiBhbmQgYXJjaGl2YWwuIFBlZXJUdWJlIGlzIGEgZ29vZCBleGFtcGxlIG9mIHRoaXMgZm9y DQogIHZpZGVvcyB0aGF0IGlzIHdvcmtpbmcgd2VsbCwgYW5kIEknZCB3ZWxjb21lIHN1Z2dlc3Rp b25zIGZvciBBdG9tL1JTUw0KICAodGhlcmUgbXVzdCBiZSBzb21ldGhpbmcgaW4gdGhpcyBzcGFj ZSwgaWRlYWxseSBBY3Rpdml0eVB1Yi1iYXNlZCkuDQoNCiAgRGVwZW5kaW5nIG9uIGhvdyB0aGUg ZXhwZXJpbWVudHMgZ28sIGl0J3MgdmVyeSBsaWtlbHkgdGhhdCB3ZSdsbCBoYXZlDQogIGEgTWF0 cml4IGhvbWVzZXJ2ZXIgZm9yIG9jYW1sLm9yZyB3aGVyZSBDSSBib3RzIGNhbiByZXBvcnQgc3Rh dHVzDQogIGluZm9ybWF0aW9uIChzZWUgdGhpcyBbcHJvdG90eXBlIFBSXSkgZm9yIG9jYW1sLWNp IHRoYXQgd2lsbCBhbHNvDQogIGFwcGx5IHRvIG9wYW0tcmVwb3NpdG9yeS4gVGhlIGdvYWwgaGVy ZSBpcyB0byBmb3Igb2NhbWwub3JnIHRvIHB1Ymxpc2gNCiAgaXRzIGRhdGEgdXNpbmcgYW4gb3Bl biBwcm90b2NvbCwgd2hpY2ggY2FuIHRoZW4gYmUgc3luZGljYXRlZCBpbnRvDQogIHdoYXRldmVy IHRlY2hub2xvZ2llcyBhcmUgaW4gdm9ndWUgKGUuZy4gRGlzY29yZCwgU2xhY2ssIFRlYW1zLCDi gKYpLg0KDQogIFNvIGlmIHlvdSBzcG90IHNvbWUgZGVjZW50cmFsaXNlZCBzeW5kaWNhdGlvbiBz eXN0ZW0gdGhhdCB5b3UgdGhpbmsNCiAgbWlnaHQgYmUgaW50ZXJlc3RpbmcgZm9yIE9DYW1sLCBw bGVhc2UgZG8gbGV0IG1lIGtub3cuICBFdmVuIGJldHRlciwNCiAgaWYgeW91J2QgbGlrZSB0byBk ZXZlbG9wIG9uZSB0byB0YWlsb3IgaXQgdG8gb3VyIG5lZWRzLCBsZXQgbWUga25vdw0KICBldmVu IHNvb25lciA7LSkNCg0KDQpbcGFja2FnZXMgbGFuZGluZyBwYWdlIF0gPGh0dHBzOi8vdjMub2Nh bWwub3JnL3BhY2thZ2VzPg0KDQpbaHR0cHM6Ly9vY2FtbHZlcnNlLmdpdGh1Yi5pby8gXSA8aHR0 cHM6Ly9vY2FtbHZlcnNlLmdpdGh1Yi5pby8+DQoNClt3YXRjaC5vY2FtbC5vcmddIDxodHRwOi8v d2F0Y2gub2NhbWwub3JnPg0KDQpbbmluZSB5ZWFyc10gPGh0dHBzOi8vb2NhbWwub3JnL21lZXRp bmdzL29jYW1sLzIwMTIvPg0KDQpbcGxhdGZvcm0tYmxvZ10gPGh0dHBzOi8vZ2l0aHViLmNvbS9v Y2FtbC9wbGF0Zm9ybS1ibG9nPg0KDQpbcHJvdG90eXBlIFBSXSA8aHR0cHM6Ly9naXRodWIuY29t L29jdXJyZW50L29jYW1sLWNpL3B1bGwvMzYyPg0KDQoNCkJlY29tZSBhbiBPdXRyZWFjaHkgTWVu dG9yOiBzdXBwb3J0IHRoZSBncm93dGggYW5kIGRpdmVyc2l0eSBvZiB0aGUgT0NhbWwgY29tbXVu aXR5DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNj dXNzLm9jYW1sLm9yZy90L2JlY29tZS1hbi1vdXRyZWFjaHktbWVudG9yLXN1cHBvcnQtdGhlLWdy b3d0aC1hbmQtZGl2ZXJzaXR5LW9mLXRoZS1vY2FtbC1jb21tdW5pdHkvODIxMy8zPg0KDQoNCkFu aWwgTWFkaGF2YXBlZGR5IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAg VGhlcmUncyBiZWVuIGEgdmVyeSBkaXNhcHBvaW50aW5nIHJlc3BvbnNlIHRvIHRoaXMgY2FsbCBm b3IgbWVudG9ycyB0bw0KICBpbmNyZWFzZSB0aGUgZGl2ZXJzaXR5IG9mIG91ciBjb21tdW5pdHku IFByZWNpc2VseSAqbm9vbmUqIGhhcyBiZWVuIGluDQogIHRvdWNoIGZvciB0aGUgd2ludGVyIGNh bGwsIGxlYXZpbmcgdGhlIGJ1cmRlbiBvZiBtZW50b3JzaGlwIG9uIHRoZQ0KICBzYW1lIHBlb3Bs ZSB0aGF0IGRpZCBhbGwgdGhlIHdvcmsgdGhpcyBzdW1tZXIuDQoNCiAgQmVmb3JlIG1ha2luZyBb bmV3IGNhbGxzIGZvciBwcm9ncmFtcyBsaWtlIEdTb0NdLCBsZXQncyBnZXQgT3V0cmVhY2h5DQog IG9udG8gbW9yZSBzdXN0YWluYWJsZSBncm91bmQgcGxlYXNlLiBXZSBhcmUgcHVyZWx5IGxpbWl0 ZWQgYnkNCiAgbWVudG9yc2hpcCB0aW1lIGF0IHByZXNlbnQuIFRoaXMgY2FuIGJlIGFzIHNpbXBs ZSBhcyBvcmdhbmlzaW5nIG5ldw0KICBmaXJzdCBpc3N1ZXMgZm9yIHByb2plY3RzIGluIHRoZSBl Y29zeXN0ZW0sIGFuZCBhbGwgdGhlIHdheSB0byBwYWlyDQogIHByb2dyYW1taW5nIHdpdGggYSBt ZW50ZWUuIFlvdSBjYW4gY2hvc2UgaG93IHRvIGJlIGludm9sdmVkLg0KDQoNCltuZXcgY2FsbHMg Zm9yIHByb2dyYW1zIGxpa2UgR1NvQ10NCjxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvdjMt b2NhbWwtb3JnLWEtcm9hZG1hcC1mb3Itb2NhbWxzLW9ubGluZS1wcmVzZW5jZS84MzY4LzE2P3U9 YXZzbT4NCg0KDQpHZW5lcmF0aW5nIHN0YXRpYyBhbmQgcG9ydGFibGUgZXhlY3V0YWJsZXMgd2l0 aCBPQ2FtbA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoN CiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9nZW5lcmF0aW5nLXN0 YXRpYy1hbmQtcG9ydGFibGUtZXhlY3V0YWJsZXMtd2l0aC1vY2FtbC84NDA1LzE+DQoNCg0KT0Nh bWxQcm8gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBJdCBoYXMgYmVlbiBhIGZldyB0aW1lcyBub3cgdGhhdCB3ZSBo YXZlIGJlZW4gdGFza2VkIHRvIGdlbmVyYXRlDQogIHBvcnRhYmxlIGJpbmFyaWVzIGZvciBkaWZm ZXJlbnQgcHJvamVjdHMuIE92ZXIgdGltZSwgd2UgaGF2ZSBnYXRoZXJlZA0KICBxdWl0ZSBzb21l IGtub3ctaG93IGFuZCwgc2VlaW5nIHRoZSBxdWVzdGlvbiBmcmVxdWVudGx5IGFyaXNlIGluIHRo ZQ0KICBjb21tdW5pdHksIHdlIGRlY2lkZWQgdG8gc2hhcmUgdGhpcyBleHBlcmllbmNlLg0KDQog IFlvdSBjYW4gZmluZCB0aGUgYXJ0aWNsZSB3cml0dGVuIGJ5IExvdWlzIEdlc2JlcnQgb25bIHRo ZSBPQ2FtbFBybw0KICBibG9nXQ0KDQoNCiAgICAgICAgRGlzdHJpYnV0aW5nIE9DYW1sIHNvZnR3 YXJlIG9uIG9wYW0gaXMgZ3JlYXQgKGlmIEkgZGFyZQ0KICAgICAgICBzYXkgc28gbXlzZWxmKSwg YnV0IHNvbWV0aW1lcyB5b3UgbmVlZCB0byBwcm92aWRlIHlvdXINCiAgICAgICAgdG9vbHMgdG8g YW4gYXVkaWVuY2Ugb3V0c2lkZSBvZiB0aGUgT0NhbWwgY29tbXVuaXR5LCBvcg0KICAgICAgICBq dXN0IHdpdGhvdXQgcmVjb21waWxhdGlvbnMgb3IgaW4gYSBzaW1wbGVyIHdheS4NCg0KICAgICAg ICBIb3dldmVyLCBqdXN0IGRpc3RyaWJ1dGluZyB0aGUgbG9jYWxseSBnZW5lcmF0ZWQgYmluYXJp ZXMNCiAgICAgICAgcmVxdWlyZXMgdGhhdCB0aGUgdXNlcnMgaGF2ZSBhbGwgdGhlIHJlcXVpcmVk IHNoYXJlZA0KICAgICAgICBsaWJyYXJpZXMgaW5zdGFsbGVkLCBhbmQgYSBjb21wYXRpYmxlIGxp YmMuIEl0J3Mgbm90DQogICAgICAgIHNvbWV0aGluZyB5b3UgY2FuIGFzc3VtZSBpbiBnZW5lcmFs LCBhbmQgZXZlbiBpZiB5b3UgZG9uJ3QNCiAgICAgICAgbmVlZCBhbnkgQyBzaGFyZWQgbGlicmFy eSBvciBhcmUgY29uZmlkZW50IGVub3VnaCBpdCB3aWxsDQogICAgICAgIGJlIGluc3RhbGxlZCBl dmVyeXdoZXJlLCB0aGUgbGliYyBpc3N1ZSB3aWxsIGFyaXNlIGZvcg0KICAgICAgICBhbnlvbmUg dXNpbmcgYSBkaXN0cmlidXRpb24gYmFzZWQgb24gYSBkaWZmZXJlbnQga2luZCwgb3INCiAgICAg ICAgYSBsaXR0bGUgb2xkZXIgdGhhbiB0aGUgb25lIHlvdSB1c2VkIHRvIGJ1aWxkLg0KDQogICAg ICAgIFRoZXJlIGlzIG5vIGJ1aWx0LWluIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgc3RhdGljDQog ICAgICAgIGV4ZWN1dGFibGVzIGluIHRoZSBPQ2FtbCBjb21waWxlciwgYW5kIGl0IG1heSBzZWVt IGEgYml0DQogICAgICAgIHRyaWNreSwgYnV0IGl0J3Mgbm90IGluIGZhY3QgdG9vIGNvbXBsZXgg dG8gZG8gYnkgaGFuZCwNCiAgICAgICAgc29tZXRoaW5nIHlvdSBtYXkgYmUgcmVhZHkgdG8gZG8g Zm9yIGEgcmVsZWFzZSB0aGF0IHdpbGwNCiAgICAgICAgYmUgcHVibGlzaGVkLiBTbyBoZXJlIGFy ZSBhIGZldyB0cmlja3MsIHJlY2lwZXMgYW5kIGFkdmljZQ0KICAgICAgICB0aGF0IHNob3VsZCBl bmFibGUgeW91IHRvIGdlbmVyYXRlIHRydWx5IHBvcnRhYmxlDQogICAgICAgIGV4ZWN1dGFibGVz IHdpdGggbm8gZXh0ZXJuYWwgZGVwZW5kZW5jeSB3aGF0c29ldmVyLiBCb3RoDQogICAgICAgIExp bnV4IGFuZCBtYWNPUyB3aWxsIGJlIHRyZWF0ZWQsIGJ1dCB0aGUgZXhhbXBsZXMgd2lsbCBiZQ0K ICAgICAgICBiYXNlZCBvbiBMaW51eCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4NCg0KICBE b24ndCBoZXNpdGF0ZSB0byBzaGFyZSB5b3VyIHRob3VnaHRzIHdpdGggdXMsIGhhdmUgYSBnb29k IHJlYWRpbmchDQoNCg0KWyB0aGUgT0NhbWxQcm8gYmxvZ10NCjxodHRwczovL3d3dy5vY2FtbHBy by5jb20vMjAyMS8wOS8wMi9nZW5lcmF0aW5nLXN0YXRpYy1hbmQtcG9ydGFibGUtZXhlY3V0YWJs ZXMtd2l0aC1vY2FtbC8+DQoNCg0KT0NhbWwgcXVhbnQtZGV2ZWxvcGVyIGF0IEJsb29tYmVyZy4g TG9uZG9uIG9yIE5ldyBZb3JrDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90 L29jYW1sLXF1YW50LWRldmVsb3Blci1hdC1ibG9vbWJlcmctbG9uZG9uLW9yLW5ldy15b3JrLzg0 MDkvMT4NCg0KDQpQaGlsaXAgQ3JhaWcgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBFeHRlbmQg YSBmaW5hbmNpYWwgY29udHJhY3RzIERTTCB0aGF0IGlzIGltcGxlbWVudGVkIGluIE9DYW1sLg0K DQogIEl0J3MgTG9uZG9uIG9yIE5ldyBZb3JrIGJhc2VkLiBJdCdzIG5vdCBhIHJlbW90ZSBwb3Np dGlvbi4NCg0KICBQbGVhc2Ugc2VlIGRldGFpbHMgYW5kL29yIGFwcGx5IGF0DQogICg8aHR0cHM6 Ly9jYXJlZXJzLmJsb29tYmVyZy5jb20vam9iL2RldGFpbC85MzgyNT4pDQoNCg0KSFRUUCBjbGll bnQgbGlicmFyeQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9h bm4taHR0cC1jbGllbnQtbGlicmFyeS84NDI4LzE+DQoNCg0KSGFubmVzIE1laG5lcnQgYW5ub3Vu Y2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIANCg0KICB3ZSBqdXN0IHJlbGVhc2VkIHRvIHRoZSBvcGFtLXJl cG9zaXRvcnkgdGhlIFtgaHR0cC1sd3QtY2xpZW50J10NCiAgcGFja2FnZSwgd2hpY2ggY29uc2lz dHMgb2YgYm90aCBhIGxpYnJhcnkgZG9pbmcgSFRUUCByZXF1ZXN0cyBhbmQgYQ0KICBiaW5hcnkg KGBodXJsJykgdGhhdCBkb2VzIEhUVFAgcmVxdWVzdHMuDQoNCiAgVGhlIGNvZGUgaXMgYmFzZWQg b24gW0hUVFAvQUZdIGFuZCBbSDJdLCBhbmQgdXNlcyBbdGxzXSBmb3IgSFRUUFMNCiAgY29ubmVj dGlvbnMuIEJvdGggSFRUUC8xKC4xKSBhbmQgSFRUUC8yIHByb3RvY29scyBhcmUgc3VwcG9ydGVk LiBUaGUNCiAgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBwYWNrYWdlIGlzIHRvIGhhdmUgYSBodHRw IGNsaWVudCB0aGF0IGhhcyBhDQogIHJlYXNvbmFibHkgc21hbGwgZGVwZW5kZW5jeSBjb25lLCBp cyBwdXJlbHkgaW1wbGVtZW50ZWQgaW4gT0NhbWwsIGFuZA0KICB1c2VzIHRoZSBhc3luY2hyb25v dXMgdGFzayBsaWJyYXJ5IGx3dC4NCg0KICBUaGlzIHBhY2thZ2UgdXNlcyBbaGFwcHktZXllYmFs bHNdIHRvIGNvbm5lY3QgdG8gYSByZW1vdGUgaG9zdCB2aWENCiAgSVB2NCBhbmQgSVB2NiwgYXMg cHJvcG9zZWQgYnkgSUVURiBbUkZDIDgzMDVdOiBvbiBhbnkgY29tcHV0ZXIgd2l0aA0KICBlaXRo ZXIgSVB2NCBvciBJUHY2IGNvbm5lY3Rpdml0eSwgYSByZW1vdGUgSVB2NiBvciBJUHY0IHNlcnZl ciB3aWxsIGJlDQogIGNvbm5lY3RlZC4gUHJlZmVyZW5jZSBpcyBnaXZlbiB0byBJUHY2Lg0KDQog IElmIGEgaHR0cHMgdXJsIGlzIHByb3ZpZGVkLCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGlzIHZl cmlmaWVkIHVzaW5nDQogIHRoZSBbY2EtY2VydHNdIHBhY2thZ2UuDQoNCiAgSWYgeW91IGV4cGVy aWVuY2UgYW55IGlzc3VlcyBvciBoYXZlIGZ1cnRoZXIgbmVlZHMgZm9yIHRoaXMgcGFja2FnZSwN CiAgcGxlYXNlIHJlcG9ydCBhbiBpc3N1ZSBvbiB0aGUgR2l0SHViIGlzc3VlIHRyYWNrZXIuDQoN CiAgVGhlIGluc3RhbGxhdGlvbiBpcyBqdXN0IGFuIGBvcGFtIGluc3RhbGwgaHR0cC1sd3QtY2xp ZW50JyBhd2F5IDopDQoNCg0KW2BodHRwLWx3dC1jbGllbnQnXSA8aHR0cHM6Ly9naXRodWIuY29t L3JvYnVyaW8vaHR0cC1sd3QtY2xpZW50Pg0KDQpbSFRUUC9BRl0gPGh0dHBzOi8vZ2l0aHViLmNv bS9pbmhhYml0ZWR0eXBlL2h0dHBhZj4NCg0KW0gyXSA8aHR0cHM6Ly9naXRodWIuY29tL2FubW9u dGVpcm8vb2NhbWwtaDI+DQoNClt0bHNdIDxodHRwczovL2dpdGh1Yi5jb20vbWlybGVmdC9vY2Ft bC10bHM+DQoNCltoYXBweS1leWViYWxsc10gPGh0dHBzOi8vZ2l0aHViLmNvbS9yb2J1cmlvL2hh cHB5LWV5ZWJhbGxzPg0KDQpbUkZDIDgzMDVdIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwv cmZjODMwNT4NCg0KW2NhLWNlcnRzXSA8aHR0cHM6Ly9naXRodWIuY29tL21pcmFnZS9jYS1jZXJ0 cz4NCg0KDQpIYW5uZXMgTWVobmVydCBsYXRlciBhZGRlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA DQoNCiAgbm93IFswLjAuMl0gaXMgcmVsZWFzZWQgdGhhdCB1bmlmaWVzIHRoZSByZXNwb25zZSB0 eXBlIGFuZCBBUEkNCiAgKHByZXZpb3VzbHkgaXQgd2FzIGEgdmFyaWFudCBhbmQgY2xpZW50cyBo YWQgdG8gd3JpdGUgY29kZSBmb3IgYm90aA0KICBIVFRQMSBhbmQgSFRUUDIpLiBOb3csIGEgc2lu Z2xlIHJlY29yZCBhbmQgU3RhdHVzL0hlYWRlcnMvVmVyc2lvbg0KICBtb2R1bGUgYWxpYXNlcyBh cmUgcHJvdmlkZWQgKHZlcnkgY2xvc2UgdG8gSFRUUC9BRikuIEVuam95Lg0KDQoNClswLjAuMl0g PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vcGFtLXJlcG9zaXRvcnkvcHVsbC8xOTQxMD4NCg0K DQpPdGhlciBPQ2FtbCBOZXdzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZANCg0KRnJvbSB0aGUgb2NhbWxjb3JlIHBsYW5ldCBibG9nDQrilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIZXJlIGFyZSBsaW5rcyBmcm9tIG1hbnkgT0Nh bWwgYmxvZ3MgYWdncmVnYXRlZCBhdCBbT0NhbWwgUGxhbmV0XS4NCg0KICDigKIgW0dvb2RieWUg Q29yZV9rZXJuZWxdDQogIOKAoiBbVGFyaWRlcyBFbmdpbmVlcnMgdG8gUHJlc2VudCBhdCBJQ0ZQ IDIwMjFdDQogIOKAoiBbQmVuY2htYXJraW5nIE9DYW1sIHByb2plY3RzIHdpdGggY3VycmVudC1i ZW5jaF0NCiAg4oCiIFtXaGF0IHRoZSBpbnRlcm5zIGhhdmUgd3JvdWdodCwgMjAyMSBlZGl0aW9u XQ0KDQoNCltPQ2FtbCBQbGFuZXRdIDxodHRwOi8vb2NhbWwub3JnL2NvbW11bml0eS9wbGFuZXQv Pg0KDQpbR29vZGJ5ZSBDb3JlX2tlcm5lbF0gPGh0dHBzOi8vYmxvZy5qYW5lc3RyZWV0LmNvbS9n b29kYnllLUNvcmVfa2VybmVsLz4NCg0KW1RhcmlkZXMgRW5naW5lZXJzIHRvIFByZXNlbnQgYXQg SUNGUCAyMDIxXQ0KPGh0dHBzOi8vdGFyaWRlcy5jb20vYmxvZy8yMDIxLTA4LTI2LXRhcmlkZXMt ZW5naW5lZXJzLXRvLXByZXNlbnQtYXQtaWNmcC0yMDIxPg0KDQpbQmVuY2htYXJraW5nIE9DYW1s IHByb2plY3RzIHdpdGggY3VycmVudC1iZW5jaF0NCjxodHRwczovL3RhcmlkZXMuY29tL2Jsb2cv MjAyMS0wOC0yNi1iZW5jaG1hcmtpbmctb2NhbWwtcHJvamVjdHMtd2l0aC1jdXJyZW50LWJlbmNo Pg0KDQpbV2hhdCB0aGUgaW50ZXJucyBoYXZlIHdyb3VnaHQsIDIwMjEgZWRpdGlvbl0NCjxodHRw czovL2Jsb2cuamFuZXN0cmVldC5jb20vd2hhdC10aGUtaW50ZXJucy1oYXZlLXdyb3VnaHQtMjAy MS8+DQoNCg0KT2xkIENXTg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBl biB0byBtaXNzIGEgQ1dOLCB5b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5kIEknbGwgbWFp bA0KICBpdCB0byB5b3UsIG9yIGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhl IFtSU1MgZmVlZCBvZiB0aGUNCiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdpc2ggdG8g cmVjZWl2ZSBpdCBldmVyeSB3ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJlDQogIFtvbmxp bmVdLg0KDQogIFtBbGFuIFNjaG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRv OmFsYW4uc2NobWl0dEBwb2x5dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cHM6 Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVz XSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0KW29ubGluZV0g PGh0dHA6Ly9saXN0cy5pZHlsbC5vcmcvbGlzdGluZm8vY2FtbC1uZXdzLXdlZWtseS8+DQoNCltB bGFuIFNjaG1pdHRdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= 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 August 31 to Septembe= r 07, 2021.

Just reinvented OOP

Yawar Amin said

let ( .![] ) obj f =3D f obj

type person =3D { id : int; name : string }

let id { id;=
 _ } =3D id

let bob =3D { id =3D 1; name =3D "Bob" }
let next_id =3D bob.![id].![succ]

=3D=3D> 2

Kiran Gopinathan replied

Haha, what a coincidence, just did the same very recently while translating= a rust library to OCaml: https://github.com/Gopiandcode/ego/bl= ob/5daf312f8a444f9abcde5996c671b9282727a972/lib/generic.ml#L211

let eclasses =3D eg.@[eclasses] in
let cost_map =3D Id=
.Map.create 10 in=

let node_total_cost node =3D
  let has_cost id =3D Id.Map.mem cost_map (eg.@[find] id) in
  if List.for_all has_cost (L.chi=
ldren node)
  then let cost_f id =3D fst @@ Id.Map.find cos=
t_map (eg.@[find] id) in Some (E.cost cost_f
node)
  else None in
  (* ... *)

with .@[] defined as:

let (.@[]) self fn =3D fn self=
 [@@inline always]

for bonus(?) points, you can name the first parameter self:

let add_enode self (node: Id.t L.shape) =3D
  let node =3D self.@=
[canonicalise] node in
  (* ... *)

I don't normally write code like this in OCaml, but in this case, it made p= orting from rust easier, because the code mostly looked the same.

hyphenrf also replied

You can use the multiple-indexing syntax to implement slicing (well, techni= cally subs) sugar:

let (.:[;..]) s =3D function
  | [|start; finish|] -> String.s=
ub s start (finish - start)
  | _ -> raise (Invalid_argument "sli=
ce takes exactly two indexes")
# "hello world".:[1;5];;
- : string =3D "ello"

The new indexing syntax is quite versatile :>

Kiran Gopinathan added

Oh wow, this is perfect! brb, off to reimplement the python slicing semanti= cs in OCaml:

let (.@[;..]) ls =3D functio=
n[@warning "-8"]
  | [| start; -1 |] ->
    List.to_iter ls
    |> Iter.zip_i
    |> Iter.drop_while (Pair.f=
st_map ((>) start))
    |> Iter.map snd
  | [| start; finish |] ->
    List.to_iter ls
    |> Iter.zip_i
    |> Iter.drop_while (Pair.f=
st_map ((>) start))
    |> Iter.take_while (Pair.f=
st_map ((>) finish))
    |> Iter.map snd
  | [| start; finish; step |] ->
    List.to_iter ls
    |> Iter.zip_i
    |> Iter.drop_while (Pair.f=
st_map ((>) start))
    |> Iter.take_while (Pair.f=
st_map ((>) finish))
    |> Iter.filter (Pair.fst_m=
ap (fun ind -> (ind - start) mod step =3D 0))
    |> Iter.map snd

v3.OCaml.org: A roadmap for OCaml's online presence

Continuing this thread, Anil Madhavapeddy replied to = many comments

Many thanks for all the constructive comments and suggestions so far, and a= lso for those who have gotten in touch to contribute. Please do keep them coming (either on t= his thread or on the various issue trackers that @jonludlam and @patricoferris have pointed = to). I'll answer some earlier questions here:

Having said that, the colors on the packages landing page feel very aggressive to me. Might be my setup here, but I would like to hav= e a slightly less harsh contrast.

Also, there is a bit of an overlap in content with https://ocamlverse.github.io/ for some things (eg best practices, community) but the (to me) most valuable feature is missing: The ecosystems overview, where I can = find packages sorted thematically. Could such a section also have a place in the packages= subpage somewhere? Alternatively, maybe opam can allow to =E2=80=9Ctag=E2=80=9D packages in th= e future so one could see all packages for graphics, databases etc.

The styling of the /packages sub-URL does indeed differ from the main desig= n, but this is simply due to a temporary technical detail. The majority of the site uses R= eact/NextJS to generate the frontend, and this uses the now-trendy medium-contrast colours= and also features like fast-page-switching that NextJS offers. However, the documentation po= rtion generated around 2.7 million individual pages when run across the full opam repositor= y, and so we restored to dynamic generation of the content for that. What's going to hap= pen next is a rationalisation of the code across the ReScript and OCaml frontends so that= there will be no observable difference in the colour schemes across the full site.

Regarding creating a categorised list of recommendations, that is absolutel= y in scope for the v3 iteration of the site. However, this metadata should ideally live in the= opam-repository (for example, using tags as you suggest, which opam already su= pports). If anyone would like to have a go at this, I'd encourage PRs to the opam-repository to add the r= elevant tag metadata for a codex. Meanwhile, @lambda_foo @tmattio and @patricoferris ar= e working on the core OCaml Platform workflow information for the guides section of the webs= ite which will cover opam, merlin, lsp-server, dune and so on.

Do we have access to all of the previous years=E2=80=99 workshops to add to= watch.ocaml.org? I can see pieces of 2015, 2017, 2020 and this year. @avsm

Is it possible to add the ML Workshop as well?

Absolutely. The watch.ocaml.org has held up nicely after the OCaml Workshop= , so I think it's in good shape to populate with more videos. This needs a volunteer to help = us upload the past nine years of videos= from YouTube to watch.ocaml.org. If anyone wants to have a go, please message me and I'll c= reate you an account.

It=E2=80=99s a bit unclear what you meant in this paragraph. Does that mean= that you plan to kill the ocaml planet ? I would find it a little bit sad.

One of the reason why you may feel it doesn=E2=80=99t work well may be that= it has been constantly broken in the current version of the site=E2=80=A6

I'm not sure why you think the current ocaml.org new feed has been broken &= #x2013; it's been working fairly reliably for the past decade. The only real problem came up = a few times when a feed's domain expired and got taken over by domain squatters, at which poin= t we got spam into the main page of ocaml.org.

What I meant with that part of the announcement is that the syndication fee= d should not be mistaken with original news on the website. Right now it's difficult to dis= tinguish official announcements (such as compiler or opam releases) as they are a little scat= tered (e.g. on opam.ocaml.org). The plan is to combine the platform-blog with t= he new website directly. I've also been considering just having a special tag on this forum so that nice = announcement posts could also be syndicated to the website easily (for example, @gasche's comp= iler newsletters).

My general desire is to grow the planet fe= ed and syndication system, but to clearly demarcate them as not being published by ocaml.org and to manage them via m= ore modern decentralised techniques that feature spam, moderation and archival. PeerTu= be is a good example of this for videos that is working well, and I'd welcome suggestion= s for Atom/RSS (there must be something in this space, ideally ActivityPub-based).

Depending on how the experiments go, it's very likely that we'll have a Mat= rix homeserver for ocaml.org where CI bots can report status information (see this prototype PR) for ocaml-ci that will also apply to opam-repository. The goal here is to for ocaml.org to publish its data usin= g an open protocol, which can then be syndicated into whatever technologies are in vo= gue (e.g. Discord, Slack, Teams, …).

So if you spot some decentralised syndication system that you think might b= e interesting for OCaml, please do let me know. Even better, if you'd like to develop one to= tailor it to our needs, let me know even sooner ;-)

Become an Outreachy Mentor: support the growth and diversity o= f the OCaml community

Anil Madhavapeddy announced

There's been a very disappointing response to this call for mentors to incr= ease the diversity of our community. Precisely noone has been in touch for the winter c= all, leaving the burden of mentorship on the same people that did all the work this summer.

Before making new calls for programs like GSoC, let's get Outreachy onto more sustainable ground please. We are purely limi= ted by mentorship time at present. This can be as simple as organising new first issues for p= rojects in the ecosystem, and all the way to pair programming with a mentee. You can chose= how to be involved.

Generating static and portable executables with OCaml

OCamlPro announced

It has been a few times now that we have been tasked to generate portable b= inaries for different projects. Over time, we have gathered quite some know-how and, se= eing the question frequently arise in the community, we decided to share this experience.

You can find the article written by Louis Gesbert on the OCamlPro blog

Distributing OCaml software on opam is great (if I dare say so myself), but= sometimes you need to provide your tools to an audience outside of the OCaml community, o= r just without recompilations or in a simpler way.

However, just distributing the locally generated binaries requires that the= users have all the required shared libraries installed, and a compatible libc. It's not so= mething you can assume in general, and even if you don't need any C shared library or are c= onfident enough it will be installed everywhere, the libc issue will arise for anyone using= a distribution based on a different kind, or a little older than the one you used to build.

There is no built-in support for generating static executables in the OCaml= compiler, and it may seem a bit tricky, but it's not in fact too complex to do by hand, s= omething you may be ready to do for a release that will be published. So here are a few tric= ks, recipes and advice that should enable you to generate truly portable executables with n= o external dependency whatsoever. Both Linux and macOS will be treated, but the exampl= es will be based on Linux unless otherwise specified.

Don't hesitate to share your thoughts with us, have a good reading!

OCaml quant-developer at Bloomberg. London or New York

Philip Craig announced

Extend a financial contracts DSL that is implemented in OCaml.

It's London or New York based. It's not a remote position.

Please see details and/or apply at (https://careers.bloomberg.com/job/detail/93825)

HTTP client library

Hannes Mehnert announced

we just released to the opam-repository the http-lwt-clien= t package, which consists of both a library doing HTTP requests and a binary (hurl) that do= es HTTP requests.

The code is based on HT= TP/AF and H2, and uses tls for HTTPS connecti= ons. Both HTTP/1(.1) and HTTP/2 protocols are supported. The motivation behind this package is to have a ht= tp client that has a reasonably small dependency cone, is purely implemented in OCaml, and use= s the asynchronous task library lwt.

This package uses hap= py-eyeballs to connect to a remote host via IPv4 and IPv6, as proposed by IETF RFC 8305: on any computer with either IPv4 or IPv6 connectivity, a remote IPv6 or IPv4 server will be connected. Preference is= given to IPv6.

If a https url is provided, the server certificate is verified using the ca-certs package.

If you experience any issues or have further needs for this package, please= report an issue on the GitHub issue tracker.

The installation is just an opam install http-lwt-client away = :)

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.

--=-=-=--