Posted on 02/01/2024 6:25:03 AM PST by SunkenCiv
A. L. Lloyd and Alf EdwardsThe Unfortunate Rake | 2:59
A. L. Lloyd - Topic | 1.08K subscribers | 103,735 views | May 30, 2015
Set of two slides and a slip jig
Rosie Finn's Favourite
Over the Water to Charlie
The Kid On the Mountain
[from The Bothy Band re-union concert at Celtic Connections 22nd January 2024]]The Bothy Band 2024 Kid on the Mountain set | 4:41
Edgar Bolton | 38 subscribers | 4,392 views | January 23, 2024
Monkey Man (Remastered 2019) | 4:11
The Rolling Stones | 3.16M subscribers | 2,134,854 views | October 31, 2019
Life as a Girl Dad: Jeff Dunham | 6:22
Laugh Society | 639K subscribers | 274,759 views | February 16, 2024
Okay, so, not music, I usually throw in one of these in each of the Musical Interlude topics.
I would never have guessed that Apple of all companies would make ANOTHER YAML alternative, but here we are. I'll admit, pkl (pickle) is actually really cool. Too bad I don't use Kubernetes lolPkl: Apple's New JSON/YAML Killer (I actually want to use this...) | 14:29
Theo - t3․gg | 238K subscribers | 250,091 views | February 10, 2024
Transcript · Intro 0:00 · Json is not the best thing in the world 0:01 · it works but it doesn't work great what 0:03 · if I told you there's yet another 0:05 · alternative and no it's not yaml what if 0:07 · I told you that alternative was by Apple 0:09 · and they open sourced it for some reason 0:11 · all of that by itself sounds really 0:12 · interesting but what if I told you on 0:14 · top of all that it's actually really 0:16 · cool so much so that I kind of want to 0:18 · start using it as soon as I can I did 0:19 · not expect this release to be as 0:21 · interesting as it was so I can't wait to 0:22 · show you what I've learned as I dug in 0:24 · so let's take a look at pickle Apple's 0:26 · new configuration focused programming 0:28 · language I like how they open with a · Pkl 0:30 · configuration that is programmable 0:31 · scalable and safe configuration is the 0:34 · key here this is focused on being good 0:36 · for configuring things the first example 0:39 · here bird. pickle we have a name and a 0:41 · job which is a nested thing so this is a 0:43 · pickle file the interesting thing about 0:45 · pickle is you're not actually expected 0:46 · to like use this exactly as is you're 0:48 · expected to run this and Export out the 0:50 · different things you might want like 0:52 · Json or a yaml file or a pist or a do 0:56 · properties which I didn't even know was 0:57 · still a thing but if you need one of 0:58 · these specific formats now you have a 1:00 · standard that will export all the 1:02 · different formats gets weirder though 1:04 · because as I mentioned can do a bit of 1:06 · programming in here first off they have 1:07 · integrated application config so that 1:09 · you can embed pickle into other 1:11 · programming languages like Java cotland 1:12 · Swift and even go you can see what the 1:15 · resulting output looks like when you run 1:17 · pickle to configure these types of 1:19 · things absolutely fascinating that they 1:21 · are generating code for these different 1:23 · languages based on a pickle module and 1:25 · if we keep going you'll see they've 1:27 · built IDE integration including Visual 1:29 · Studio code which is crazy to think that 1:31 · apple is building plugins for vs code as 1:33 · far as I know that's unprecedented I 1:35 · never would have expected Apple to be 1:37 · building things for Microsoft's open 1:38 · source code editors apple and open 1:40 · source generally aren't things I 1:41 · associate much but here we are and as 1:44 · someone just pointed out in chat they 1:45 · don't even support xcode what that's 1:47 · hilarious they support all these other 1:49 · things and not their own cursed Madness 1:51 · I I hate xcode so much that I've 1:53 · consider making a video about it for a 1:54 · while cuz it is such a show but 1:56 · we'll talk about that another time 1:57 · because I want to show off more of the 1:59 · cool things go going on here like in 2:00 · this example where you can actually do 2:02 · logic you can enforce that this int has 2:05 · to be greater than a th and then when 2:06 · you assign it you'll get an error yes 2:08 · this is a config language that lets you 2:10 · encode logic to guard things that's like 2:13 · Zod just built in to the config language 2:16 · very very interesting it's clear Apple 2:18 · had like specific problems they were 2:19 · trying to solve here introducing pickle 2:21 · a programming language for configuration 2:23 · we are delighted to announce the open 2:25 · source first release of pickle a 2:27 · programming language for producing 2:28 · configuration when thinking about 2:29 · configuration it's common to think of 2:31 · static languages like Json yaml or 2:33 · property lists while these languages 2:34 · have their own merits they tend to fall 2:36 · short when configuration grows in 2:37 · complexity for example their lack of 2:39 · expressivity means that the code often 2:41 · gets repeated additionally it can be 2:42 · easy to make configuration errors 2:44 · because these formats do not provide any 2:45 · validation of their own someone who's 2:47 · been working a bit more in terraform 2:48 · lately yes absolutely the case to 2:50 · address these shortcomings sometimes 2:52 · formats get enhanced by in ciliary tools 2:54 · that add specific Logic for example 2:56 · perhaps there's a need to make code more 2:58 · dry so a special property introduced 2:59 · that understands how to resolve 3:00 · references and merge objects together 3:02 · alternatively there's a need to guard 3:04 · against validation errors so some new 3:06 · way is created to validate these 3:07 · configuration values against an expected 3:09 · type before long these formats almost 3:11 · become programming languages but ones 3:12 · that are hard to understand and hard to 3:14 · write on the other end of the spectrum a 3:16 · general purpose language might be used 3:18 · instead languages like cotlin Ruby or 3:20 · JavaScript become the basis for dsls 3:23 · that generate configuration data while 3:24 · these languages are tremendously 3:25 · powerful they can be awkward to use for 3:27 · describing configuration because they 3:29 · are not oriented around defining and 3:30 · validating data additionally these dsls 3:32 · tend to be tied to their own ecosystems 3:34 · it's a hard cell to use a cotlin DSL is 3:36 · the configuration layer for an 3:38 · application written in go it's a very 3:39 · fair point because you don't want to use 3:41 · cotlin to define your configs in go we 3:43 · should invent a new standard obviously 3:45 · if you don't want to write your go 3:46 · configs and cotlin clearly what we need 3:48 · is yet another 3:50 · standard this XKCD gets more and more 3:52 · relevant every day I swear anyways we 3:55 · create a pickle because we think that 3:56 · configuration is best expressed as a 3:58 · blend between a static Lang language and 4:00 · a general purpose programming language 4:01 · this is a bold statement to make to say 4:03 · a blend of static languages and general 4:05 · purpose programming languages is the 4:06 · right thing for a config and honestly 4:08 · the more I think about it I'm starting 4:09 · to agree we want to take the Best of 4:11 · Both Worlds providing a language that is 4:13 · declarative and simple to read and write 4:14 · but enhanced with the capabilities 4:16 · borrowed from general purpose languages 4:18 · when writing pickle you're able to use 4:19 · the language features you'd expect like 4:21 · classes functions conditionals and Loops 4:23 · you can build abstraction layers and 4:24 · share code by creating packages and 4:26 · Publishing them more most importantly 4:28 · you can use pickle to meet many 4:29 · different types of configuration needs 4:31 · it can be used to produce static 4:32 · configuration files in any format or be 4:35 · embedded as a library into another 4:36 · application 4:37 · runtime we designed pickle with three 4:39 · overarching goals one to provide safety 4:42 · by catching validation errors before 4:43 · deployment two to scale from simple to 4:45 · complex use cases and three to be a joy 4:47 · to write with our best-in-class ID 4:49 · Integrations this is actually an 4:50 · interesting set of goals very very 4:53 · interesting more and more I like this 4:54 · idea of validating in the config that 4:56 · just saves so much trouble so let's do · Quick Tour 4:59 · their quick quick tour of pickle we 5:00 · create a pickle to have a familiar 5:01 · Syntax for depths and to be easy to 5:03 · learn that's why we've included features 5:04 · like classes functions loops and type 5:06 · annotations for example here's a pickle 5:07 · file a module that defines the 5:09 · configuration schema for an imaginary 5:10 · web app they want us to know that this 5:12 · file defines types not data which is a 5:14 · common pattern in pickle interesting to 5:15 · have the concept of a template in 5:17 · something meant to compete with Json 5:19 · application dep pickle it's a module 5:21 · named application it's a host name 5:22 · that's a string Port which is an INT 5:24 · 16bit environment which is an 5:26 · environment so this has to be coming 5:27 · from something else would be my guess 5:29 · data a database also probably coming 5:30 · from something else oh look at that they 5:32 · Define them right below database is a 5:33 · class that has all of these properties 5:35 · the environment is a type Alias for one 5:37 · of these values this is so interesting 5:40 · it's a blend of a bunch of different 5:41 · things but the results actually really 5:43 · simple I'm liking where this is going 5:45 · let's keep digging someone asked isn't 5:46 · this kind of the same idea like T3 5:48 · environment yes and no T3 and V is very 5:50 · much tied to typescript environments and 5:53 · is only for validating environment 5:55 · variables this is for validating things 5:57 · inside of outside of and around the idea 5:59 · of config like this would go much better 6:01 · with something like terraform than T3 6:02 · environment would and here's how the 6:04 · configuration data might be defined now 6:06 · we have local host. pickle it amends the 6:08 · application file and then it sets all of 6:10 · these things really nice and there's 6:13 · built-in read expressions for reading 6:14 · external resour actually that's really 6:16 · nice too that you can read from the 6:17 · environment like that huh really 6:20 · interesting it's easy to create 6:22 · variations of the same Base by amending 6:24 · for example let's imagine we want to run 6:25 · four databases locally as sidecars this 6:27 · uses a four generator to produce four 6:30 · variations Each of which amends the base 6:31 · DB and specifies a different port so 6:34 · here is the for Loop example that I was 6:36 · looking for import application. pickle 6:38 · hidden DB application. database is a new 6:40 · database with these properties and we 6:42 · create the side cars which uses a for 6:44 · Loop where we select all of the values 6:47 · in this list a lazy way to do a for Loop 6:49 · where you guarantee it's just these 6:51 · values but we have 0 1 2 and three so 6:53 · for each of these it's going to create a 6:55 · config for a database that is 6,000 plus 6:57 · the offset so you'll have Port 6,000 61 7:00 · 2 and 3 all is valid 7:02 · configs if you want to understand this 7:04 · code we can take a look at the Json that 7:06 · gets exported so if we export database 7:08 · password Center this is setting the 7:09 · password for the environment then we run 7:11 · the pickle evaluation code tell it that 7:13 · we want Json out and now here's the Json 7:16 · that we get it's actually really nice as 7:18 · a a language that does this and only 7:20 · this like this code is solid this makes 7:23 · sense to me and having this be a thing 7:25 · that can spit out whatever different 7:26 · format you need inv validate in whatever 7:28 · language that you use 7:31 · I'm digging it I want to learn more 7:33 · about this validation it's one of the 7:34 · most interesting Parts configuration is 7:36 · about data and data needs to be valid in 7:38 · pickle validation is achieved by using 7:40 · type annotations and type annotations 7:42 · can optionally have constraints defined 7:43 · on them here's an example that defines 7:45 · the following constraints age must be 7:47 · between 0 and 130 name must not be empty 7:49 · and zip code must be a string with five 7:51 · digits hey somebody will be older than 7:53 · 130 someday you don't want this you 7:55 · don't want your code to break because 7:56 · Brian Johnson was right let's be real so 7:59 · let's take a look at the person pickle 8:00 · module name String not is empty is this 8:03 · a helper that they have built 8:05 · in interesting age is an INT which is 8:08 · between 0 and 130 seems like this is 8:10 · syntax is there like core validation 8:12 · stuff I'm sure there's a doc somewhere 8:13 · that lists all of these so age is an INT 8:16 · that is between these values and zip 8:17 · code is a string that matches this Rex 8:20 · of course Rex is involved I was 8:22 · wondering when we'd see the word Rex the 8:24 · only way you could possibly make yam 8:26 · more curse is adding Rex to it and they 8:28 · managed to do that 8:30 · anyways a failing constraint causes an 8:32 · evaluation error so if we make this 8:33 · Alexandra file where age is negative 8:36 · we'll get an error when we try to 8:37 · evaluate it that says that there's a 8:39 · type constraint failing is between 030 8:42 · violated by this value and it calls up a 8:43 · specific line it happened on 8:46 · nice good stuff constraints are · Constraints 8:49 · arbitrary Expressions this allows you to 8:50 · author types that can express any type 8:52 · of check that can be expressed in pickle 8:54 · here's a sample type that must be a 8:55 · string with an odd length and whose 8:57 · first letter matches the last letter 9:00 · interesting at least they got equals 9:02 · right sharing packages pickle provides 9:04 · the ability to publish packages and to 9:06 · import them as dependencies in a project 9:08 · so this going to be PPM pickle package 9:10 · manager this is nuts this provides an 9:13 · easy way to share pickle code that can 9:14 · be used in other projects it's easy to 9:16 · create your own package and publish them 9:17 · as GitHub releases or to upload them 9:19 · anywhere you wish they could be imported 9:20 · from the absolute URL look at that 9:22 · they're learning all the right lessons 9:23 · from the things we got wrong in 9:24 · JavaScript and node this is actually 9:26 · really cool this is like I feel like 9:27 · they watched that one talk that Ryan D 9:30 · did about the regrets he had from node 9:31 · and they applied all of those lessons 9:33 · really well here I'm impressed this is 9:35 · cool alternatively they could be managed 9:37 · as dependencies of a project using a 9:38 · project allows pickle to resolve version 9:40 · conflicts between different versions of 9:42 · the same dependency within a dependency 9:43 · graph it also means that you can import 9:45 · packages by a simpler name huh you can 9:48 · Define dependencies like that H well it 9:50 · is a Json replacement so they have to 9:52 · replace package Json seems like they 9:53 · found a way to do that version conflicts 9:55 · in my config files is a a meme I'm 9:58 · seeing in chat now that yeah funny 10:00 · enough not a lot of people know this the 10:02 · package system for iOS is a thing called 10:04 · pods that were created by the community 10:06 · not by Apple and the creator of PODS 10:08 · orta actually kind of moved on from IOS 10:11 · and became one of the lead contributors 10:12 · for typescript at Microsoft which was 10:15 · very interesting to see somebody who 10:16 · made packages possible in the iOS world 10:19 · ha it so much he moved over to 10:20 · JavaScript and typescript they don't 10:22 · call the pickle package manager the 10:23 · pickle jar they're doing it wrong that's 10:25 · fair looks like they even have their own 10:27 · set of packages that they're managing 10:28 · which is interesting because this means 10:30 · Apple's probably using these 10:31 · Technologies in order to justify the 10:32 · time they're putting in which means 10:34 · Apple's officially almost certainly 10:35 · using kubernetes because they built the 10:36 · kubernetes binding very interesting they 10:38 · also called the monor repo for 10:40 · publishing many of them the pantry the 10:42 · pickle Pantry I'll give that a star it's 10:44 · 28 stars for those wondering and the 10:46 · actual pickle language it's a 3K and 10:48 · give that a start too this is 10:49 · fascinating it's also just crazy the 10:51 · rare times you see apple popping up in 10:52 · the open source world one of my favorite 10:54 · examples of this there's this weird 10:56 · Apple account and we've confirmed this 10:57 · is officially Apple the developer 10:59 · ecosystem engineering account on GitHub 11:01 · previously it had a really ominous 11:03 · profile picture tell me that's not one 11:05 · of the most ominous profile pictures 11:07 · you've seen on a GitHub account that 11:08 · turned out to actually be Apple's GitHub 11:10 · account it seems like apple doesn't want 11:12 · the engineers who are contributing these 11:14 · things to be like using their usernames 11:17 · on their own accounts it's very Apple to 11:19 · do this from like the Shadows so to 11:21 · speak it's Eerie almost also it wasn't 11:23 · originally this poorly Alias this is 11:25 · just the very lowquality backup that uh 11:28 · archive.org has huge shout out to them 11:29 · for keeping most of the internet alive 11:31 · so I remember when I first saw this 11:33 · account file a poll request on OBS 11:36 · rewriting the layer for window capture 11:38 · on Mac this was really cool the reason 11:40 · they did this seemed to be that they 11:41 · were testing their new capture Solutions 11:43 · and they used OBS as like a standard for 11:46 · capture so having Apple out of nowhere 11:47 · show up and contribute really nice 11:49 · changes to OBS was really unexpected and 11:52 · cool and they did a huge breakdown cuz 11:55 · it's Apple here's where they call out 11:56 · the language bindings which is really 11:58 · interesting because they want it to be 12:00 · embeddable in other languages Apple 12:02 · generally doesn't like JavaScript and I 12:04 · am certain they don't like typescript 12:05 · much so I'm not surprised we don't see 12:06 · those here but of course they had to 12:08 · support Swift because it's Apple but 12:10 · it's interesting they also support go 12:11 · Java and cotlin especially cotlin when I 12:14 · think about it Apple does have quite a 12:15 · few Android apps now like the Android 12:17 · Apple music apps one of the best apps on 12:19 · Android makes sense they have to think 12:21 · about cin a bit more especially if 12:23 · they're already using Java for their 12:24 · stuff it that makes · Editor Support 12:26 · sense using Code generation is just one 12:28 · of the ways to embed pickle within an 12:30 · application our language bindings also 12:32 · provide evaluator apis to control pickle 12:34 · evaluation at low level and users are 12:36 · free to interact with pickle at the 12:37 · abstraction level that makes the most 12:39 · sense for their 12:40 · application now the last big piece is 12:42 · the editor support we believe that a 12:44 · programming language is only as good as 12:45 · the experience of writing it that's why 12:47 · we aim to provide best-in-class editor 12:49 · support when writing pickle and an 12:50 · editor users are guided through the 12:52 · process of filling in configuration data 12:54 · from a given template additionally the 12:56 · editors provide instant feedback if any 12:58 · values are in valid documentation is 13:00 · immediately available when called upon 13:02 · we're also releasing the intell plugin 13:03 · which provides Rich support for jet 13:04 · brains editors including intell webstorm 13:07 · goand and pycharm these plugins are able 13:08 · to analyze a pickle program and provide 13:10 · features like autocomplete go to 13:11 · definition and refactoring support 13:13 · that's really cool that they're doing 13:14 · language servers properly that's nuts to 13:16 · have like a config file like imagine if 13:18 · your Json autocom completed and gave you 13:20 · errors when you were editing it this is 13:22 · actually one of my favorite Parts okay 13:24 · when are we replacing package Json with 13:25 · package pickle because I need this type 13:27 · of safety in everything I do this is 13:29 · great seriously though imagine like an 13:30 · alternative to something like next where 13:32 · the next config Json wasn't a Json it 13:34 · was a pickle file and when you went to 13:36 · your editor and started typing out the 13:37 · config it would error if you got things 13:39 · wrong that sounds awesome this seems 13:41 · genuinely really cool right now when we 13:43 · want to do stuff like this we end up 13:44 · doing crazy hacks like putting our 13:46 · config files in the language we're using 13:48 · like typescript so that we can get type 13:49 · errors and now we have to compile that 13:51 · in order to use it this skirts so much 13:53 · of that it's actually really 13:57 · cool Sly the vs Cod C PL doesn't seem to 13:59 · have the erroring yet just the syntax 14:00 · highlighting and cold folding but they 14:02 · are planning on doing that in the future 14:03 · really nice to 14:04 · see they have examples here for a bunch 14:07 · of different things from kubernetes to 14:09 · Swift to the jvm and go really good 14:12 · stuff this is both further along and 14:14 · better than I would have expected I did 14:16 · not expect this to be this cool honestly 14:17 · and I'm genuinely really hyped I 14:19 · certainly didn't expect Apple to make 14:20 · something like this much less open 14:22 · source it so I'm really hyped to see the 14:23 · results what about you are you excited 14:25 · too let me know in the comments anyways 14:27 · thank you again for watching peace NS
Disclaimer: Opinions posted on Free Republic are those of the individual posters and do not necessarily represent the opinion of Free Republic or its management. All materials posted herein are protected by copyright law and the exemption for fair use of copyrighted works.