Jacob, you are still with us, right? And we're going to go ahead and zoom in. I'm going to figure out how to do this stream deck. Jacob, boom, we're going to zoom in. Where are we zooming to today? I never know where everyone's at. They're all over the world. Where are you at, Jacob? You're in Prague?  It's like 11 AM, so I'm fine. I don't know how you are, but I'm pretty good. Well, take it away, it's all you. I'll see everyone later. Today I'm going to show you the pitchpy compiler and some advanced interoperability features. So features on how you can integrate C-sharp or any kind of .NET project with a PHP, which is pretty cool and gives you a lot of options on how you can improve or extend existing PHP projects or extend existing C-sharp projects with a little bit of PHP. So let me start with a short introduction about pitchpy. It's like an entire platform. It contains a compiler, which is based on Roslin. So there is an entire code analysis project that takes a bunch of PHP files and analyzes it and creates all the trees and semantic trees and outputs the DL file. There is an entire runtime that supports the compiled PHP programs.  So to make it a little bit more clear, and I promise this is the only animation we have in this presentation, the compiler takes all of the PHP code. It can be a really huge project, like I will show you after a few minutes. And it also references any assembly, any dotnet reference you can have and creates a dotnet standard assembly which is portable, managed, and also it's sourced less. You don't have the original PHP source code in the resulting DL file, which gives you a few more other options on how you can distribute your PHP applications, for example. Anyways, let's move on to the first demonstration to make it more clear. It's a simple console application. So let me switch to Visual Studio Code. And in here, I have an empty folder. And we'll create a single PHP file. Let's start with a single PHP file. And fill this with something really simple, like hello, hello, WorldHip. And what every dotnet project needs is a project file. You can create it manually. You can download templates, as I will show you later. In Visual Studio Code, we have a really small extension that adds a comp to the command path. Yes, it's this one, which will create a project file for it. There it is. And what we see is a PHP file and a project file containing anything we are used to from C sharp. The output type property, the target framework, is dotnet core app 2.0. Some description, which is not necessary. But there's for instance, we are compiling files. It's not a PHP, PHP files, all the files. And one addition, we refer to friends in the new get package containing core. So this is real. You actually don't need any PHP, any web server. All other stuff is downloaded automatically when you first comp the debugger project. So debugging, and you can see in the browser, debugging. And of course, you can see the dotnet debugger, which means one great advantage of the entire project. Because all the tooling, all the great tooling of the dotnet can be used for the PHP apps as well. And we will show several other toolings during the presentation, like with the diagnostics and so on. But for now, I would like to demonstrate the interoperability features.  OK, S value, and write this, I don't know, the value. And come, do something. I lost my mouse. Good. OK, I think I've just lost my keyboard. Wait a minute. Can we have a second? Sorry, I just lost the keyboard. Anyways, let's write a simple hello world application in PHP, like, hi, running it in a usual way. And what's great about the project, as I showed you before, is, yes, you can debug the application as any other dotnet application. But you can also use all the dotnet stuff. You can, implicitly, you get all the references to all the dotnet standard runtime and packages and anything you specify in your project file as a package reference or as a project reference or any other reference to a DL file. So I can write something without any other configuration, something like maybe system data type. And using the PHP syntax, I can print, I get the current time, convert it to string, and tonight using the PHP syntax. And run the project by, I think, a five and just continue. And you'll see it's seamlessly integrated with all the dotnet goodies. So what's the result of this compilation? As you are used to from any other C-sharp project, there is the bin folder with debug and net core app, and there is a DL file and PDB file for debugging features. And we can look at the DL file using some decompiler, like IOSpy, for example. So if we open the DL file and IOSpy like this, you'll see there's a bunch of weird methods. It's because they are meant to not be accessible. But there's also the function we've written. And you can see in the IOSpy, there's a regular call to the datetime function. So it's seamlessly integrated with no overhead at all. So you can write these C-sharp PHP hybrids like all together without any overhead.  But everything works as one, as any other dotnet language. So let me, let's just for a quick info. Let me show you some more interesting topic, web application. In here, we can create a regular PHP web application, PHP website, without having a web server or having a PHP on your machine because we have sp.net core, and it's built in Caster web server. So we can create a C-sharp project that will target PHP and run its own web server. It can run on command line, on IOS Express, or IOS on Azure, or anything you are used to. So we start with an empty folder again. And for this purpose, we have prepared a set of templates. If it browse to our project website, there's already prepared command for it. So using this command.net new dash I, PHP templates, we can install dotnet templates to your dotnet installation. So if you run the command, it will download new packages, our templates. And there's one template that creates an ASP.net core website with some PHP already. So dotnet new web, but the language is PHP. You can write it like that. And you'll see it creates two projects, a server and a website. Website is a PHP project with the project file we've shown before. And the server is a regular, regular Caster web server hosting our project. We configure some sessions. We configure anything needed for running the project. But there's one additional line, which gives you the option to take all the scripts from the compile.io file and run it as a part of the ASP.net core pipeline. So we built the project for the first time. We download all the dependencies. So these warnings will disappear and you can put a breakpoint into the PHP code. And we can check some more advanced interoperability features we can make use with the pitchpoint project. I can hear it's working. So we can start a project as usual. Run it using the .net core configuration. Wine. I don't want to launch a browser. Let's run the project. And it runs on port 5.04. So ASP.net core started, initialized the pipeline and requested our request handler as part of the runtime of the pitchpy and passed the request to the compiled PHP file. And now we can debug the PHP file as we showed before. Continue and you see on your ASP.net core server a message from PHP code. Let's make it more interesting. We can, for example, create a class. But we can create a class in a C-sharp project. Let's imagine we have already some C-sharp library or let's call it class, library one. Create an initial project in here using .net new how we call class slip, I guess. So let's have a C-sharp project with a class. And what we can do now, we can reference this C-sharp project from a PHP project. So we can add regular project reference from the website, which is PHP project, to the C-sharp project. That's its class, library one, come on, one slash CSProm. And why would I do that? It's because I can use this .net classes in my PHP file. So in this way, imagine you have a huge PHP code consisting of thousands and thousands of files, which is not unusual. You can slowly replace them. You can slowly replace PHP classes with .net classes. For example, you are migrating your PHP project to .net. And you would like to gain some performance. So you just remove the class from PHP project and rewrite it in C-sharp. And the PHP code will look the same. So if we have a constructor, for example, in C-sharp, and I create in PHP class, library one slash, I guess it's called class one, class one, we can instantiate the objects as before without any difference. But the class was rewritten in C-sharp. So in this way, we can keep the old PHP code and slowly rewrite pieces of it into C-sharp. And if you run the project, let's make it more interesting. Let's make a function, for example. So foo, yellow from C-sharp, nice. And foo. And if you run the project, it will seamlessly integrate with .net, with my .net project. Where is it? So I'm here. Oh, it's running. So if you request a page again, the breakpoint hits our creation of the .net project. OK, I see. Well, you kind of know. I didn't recompile the project. One, there's missing. That's why. Let's run it again. And let's put some breakpoints so we see something is happening. Now we are on PHP. And it seamlessly stepped into the C-sharp. So if we take a closer look on the call stack, we are on one stack frame, we are on PHP, and then we are in C-sharp with no overhead at all. And the same with calling the function foo. But integration gives us more features, like all the types are converted with PHP and C-sharp, as you would expect. So if we have something like no other type in C-sharp, E, let's call it I, and we pass now, for example, in PHP, it gets automatically converted. But we can go one more step further. Because thanks to the integration and thanks to the interoperative features, we can extend C-sharp classes in PHP. And also PHP class is in C-sharp. So if you write something like my class, which extends this C-sharp class, it would all work and also with function overriding and anything you would expect. And also, we can write more integration features and make use of all the dotnet features you like, for example, but you don't have in PHP. For example, in PHP, they don't have delegates. They don't have an option how to wrap something in something as a delegate. They don't have type for it. They have something like closure or classes that have magic methods, like underscore invoke or underscore call. But in C-sharp, we are used to write delegates. So if I would have something like a function that will return a delegate, taking in and returning string, what to do, for example. And it will return this function doing something like converting the number to string in this notation. And it's fully typed. That's the reason why would I do it. PHP doesn't have fully typed anonymous methods, but C-sharp does. And I would prefer to have my code fully typed. So that's why I would write it in C-sharp instead. And now you can do the same in PHP. You can take your what-to-do method. And you can just call it with 1, 2, 3. But now it's strongly typed. And you cannot do a mistake. So let's try it again. Now it's running. So if you refresh the page, we are in here in the calling of foo to write something. Now it asks my C-sharp method what to do. And I will return an anonymous strongly typed method to the PHP. And then I will call it from the PHP code. So all this integration, all this interpolated features works seamlessly. You don't have to do anything. You just write the code as you would expect it. And you can treat the PHP code as you are used to. So I wanted to show you all this because we want to show you something bigger, something in the real Visual Studio, for example. And we need a few more things.  So there's a lot of features implemented in the project already. And also, we have to realize that the PHP code behaves like any other C-sharp project. So we can do things, for example, since you have this class in the website project, we would like to share it with others. And it is a good experience. It is a good to wrap your libraries into NuGet packages. So once we have this class in here, we can do things like .NET Pack. Yeah, it doesn't have a version. And it creates, as expected, a NuGet package containing your PHP Compile code without PHP sources. And you can take this NuGet package, which you can review and explore and open it. We can take this NuGet package, push it on your NuGet feed in NuGet.origo or something like that, and share it with your team or with others. And all it contains is a DLL file to the Compile PHP code and the specification of the NuGet package, which you can alter in the MS-build project file as you are used to. And it's a great way of sharing bigger libraries written in PHP or in another language. And I'm showing you this because now let's make a move to Visual Studio and demonstrate a razor and PHP. So we can get closer to the final demonstration, which will be after that. Imagine you have a few more files in your PHP project, for example. And you would like to write a new website and C-sharp. Let's say you have really old PHP project, and all the components, all the parts of your website are already written in your app. And now you are writing this new SB.NET Core NVC application. And you would like to, of course, make use of the already written code. Because in this way, you can slowly create a new project and reuse existing piece of code. You don't have to rewrite the code. Slowly create a new project and reuse existing piece of code. You don't have to rewrite everything from scratch and wait, for example, a year or two to make the new project working. So in this demonstration, we have three projects. I've prepared a PHP library, a PHP project as you see before. And what it does, yes, there is a small PHP code. And then there is a C-sharp project, regular one with regular Caster web server, with some index razor page. And what we do here, we'd like to take this existing PHP code and render it as a component on the razor page. And for this purpose, we can do it as before. We just create a PHP project. We create an NVC application. But there is an extension to the HTML object, which usually renders things like Action Link, checkbox, and so on. There is an extension called PHP. And you can literally take your name of your PHP file, put it as an argument to this PHP extension, and make the runtime to render your compiled PHP code at this point.  Let's put a breakpoint in here. Let's put a breakpoint in here. And let's put a breakpoint also in here. Yeah, it's still in there. So now you see we are debugging the razor page. And it seamlessly transferred to the PHP code. And now we are rendering the PHP code. It's all asynchronous. So that's why you don't see the razor on the call stack. And that's like it. That's everything you have to do. You can debug it, continue. And in the result, you see a part of code from razor and part of code from PHP. If you take a look on the source code, it's all a single HTML code. There are no frames or JavaScript or anything. It's like one piece of code. So nobody will ever notice there is some PHP on this razor page. The font size, sure, like this. No problem. So we can do this in another way as well. We can render a razor partial view in a PHP code, which is pretty much the same, but written in PHP. I guess it's in this file. Yes, it's in this file. There's the same extension for PHP code already written. And as you can see, we can write something like HTML and partial and type name of your partial view, which I have in here. We can also pass a model. It can be a C-sharp object or it can be a PHP object as well. So in this demonstration, we have class user as a PHP class. We pass it as a model for this partial razor view. And the partial razor view is stating it's accepting this user. So for an interview of the C-sharp project, it's a regular.net class. If we navigate to the definition, it generates something from metadata. But it's actually contained in the generated PHP library. So it doesn't care, actually. I did implement it in the PHP object. So let's start. Let's start this project and see what happens. So running, it has the breakpoint in PHP code. And if you put a breakpoint in here, you can see it transfers the execution to the razor partial view. And on the close tag, you can see now we are in PHP. It does a bunch of stuff. And then it continues in the razor view. It renders the razor thing and goes back to the PHP code. And in the result, there is your razor partial view rendered in a PHP page that was compiled into .NET. So that's how you reuse existing stuff from NBC application or from all the PHP application in other projects that are on a different platform, for example. And I was showing this for another purpose because what's great about a project, it handles larger projects than two or three PHP files. And we showed it before. But now we can all make it working together with razor and all the other stuff. And that's a bigger replication. And we've chosen a WordPress for this demonstration. So in this demonstration, we take the entire sources of WordPress, just pack it into an MS-built project file. And we create a NuGet package from the entire WordPress. And we use this NuGet package in the NBC application, in the ASP.NET core application, without configuring any web server or installing any PHP or anything like this. So maybe let's go back to Visual Studio Code. And I have something like, yes, it's SDK.  One of them is WordPress folder. And it contains the entire sources of the WordPress or the WordPress application. And you don't have to actually take a look on the sources. The important thing is the project file. So we stated, target framework for the WordPress application is dotnet standard 2.0. We've prepared some property in here. Like in other C-sharp projects, we have no warning properties. So we can ignore some warnings.  And some of them are just not that important that I would like to care about. So for example, this one is about putting mandatory parameters after optional parameters, which is OK in PHP. In dotnet, you cannot do that. So the compiler shows you the warning. But for this demonstration, we are ignoring it. Also, we are compiling all the PHP files or the PHP except for some of them. And we are including some content files, like pictures and JavaScript files and CSS files, into the NuGet package. This is very important because if you create a NuGet package with the content files, then you don't have to do anything. You have a NuGet package with WordPress, and all its content right where you need it. And that's it. The rest is the same like before, with the one exception. We have a SDK project, which adds a few more features to the WordPress. And the SDK project is here. And it defines some interfaces that are not needed, but it also makes it extensible for our helper project that provides an extension method called use WordPress.  And also, it enables, for example, SP.NET Core Response Caching, which is pretty cool, because everyone who ever configured the WordPress site knows you have to enable some caching plugins like WP Supercache or anything like this, which is not needed now, because we have .NET Core and we have this Response Caching middleware. So there's also a small application to test the WordPress and to run it on a Casterl. So as you can see, it's a regular Casterl site calling the use WordPress. So let's run this little sample.  A lot of them are because of the unreachable code detected, because in PHP, can I open it? Yes, I can open it. Because in PHP, they like to make conditions like if a function exists, do this. And if class exists, do that. And the compiler knows the function exists. So it makes a lot of code unreachable, and it outputs you a warning for this. Anyways, now we are configuring the pipeline and stepping into the WordPress. And we are doing a bunch of stuff like we are reading the WordPress configuration from appsettings.json file. Because in WordPress, to configure our database or other things, you have to modify a source PHP file. And we don't like that. So we've replaced it with appsettings.json. So we load the configuration from appsettings.json. And then we configure the WordPress using the settings file instead of modifying the source PHP file. We also enable the response caching middleware. And dsdk also enables the short URL rewriting. So in WordPress, you have these short URLs, which doesn't refer to actual PHP files. But instead, they have to be parsed and passed to index.php. So in here, we configure the short URL rule using dsp.net core middleware. We pass the middleware to the pitchpy runtime, which will handle our requests and pass them to compile source files. And also middleware for static files. So all the JavaScript, CSS files, and images will be handled as well. So let's continue. I've already started MySQL Database, which is the most advanced topic of running WordPress on .NET, actually. So I already have MySQL Database. And yeah, it's running. So I guess I've configured it on port 5.044. So if we open the opening browser, not the ads, in here, it does some jittering and here it is. Well, not that slow. And in here, we have the entire application running on .NET.  You can, of course, put breakpoints in the PHP code somewhere, somewhere interesting like settings. OK, somewhere in here. So you can put breakpoints in a PHP code and do whatever I'm used to from the debugging application. Yes. But this is something we have shown like a year ago. And what's nice about this approach is compiling the WordPress or compiling the PHP application with this property called generate package on build. Yes. It means it creates in a NuGet package from this product file. And here we have one created from the WordPress. It's about 8 megabytes, 8 megabytes large. It contains the entire WordPress with the content files. So whenever I reference this NuGet package from my C-sharp application, I get all the content files as well. And in lib folder, there is this compiler to WordPress, including the XML documentation file, which is generated from the PHP documentation commands from the WordPress itself. So we call this package pitchpilot.wordpress. And we can use this package to run our new WordPress site without having any WordPress or without having any PHP files in my project, actually. So for these purposes, I've prepared a really small application on Kestrel. And it's this one. So there's the application with no PHP files at all. There's just one reference to that pitchpilot.wordpress NuGet package. And the rest is handled by .NET Build System itself. So we call this use.wordpress to install the WordPress into the request handler pipeline. And with few plugins that I will show later. But an important thing is there is no PHP code at all. We reference the PHP code from the NuGet package. And we can put the point as usual and run the application. Yep. So in here, we cannot step into it because it's compiled in the NuGet package. But you run it as usual. And we will see the same as before because we are running the same NuGet package as we've created before. But why would I do that? Why would I compile the WordPress to the .NET? There are a few reasons. As I've shown before, we can install this response caching mechanism that boosts performance of the WordPress site. So if we log out and go back to the site, the response time to make the request to the site is about two milliseconds. Because it just hits the SP.NET Core response caching middleware and gets me the output immediately. All I can do as well is extend the WordPress with a C-sharp. So if I have some components, some packages in C-sharp or as a NuGet package, and I don't have them in PHP, I can extend WordPress in C-sharp using these components. For example, in here, there's an additional widget in my dashboard that is actually written in C-sharp as a razor partial view. So we can use the same mechanism as I've shown in the demonstration before to render razor into widgets of the WordPress. And again, the WordPress source code was not modified at all. So the PHP code doesn't know it's coming from .NET. It's using the same syntaxes and same everything as it's used to. But it can be extended with a C-sharp in this way using the compiler. Another cool feature is I can write various plugins and short codes and have these app settings different for development and for production, which is something, again, it's not in the WordPress as it is in PHP. And if you take a closer look on the output of the project file, if you compile the project, there is no source files on the original WordPress. So that handles a lot of attacks to WordPress sites by modifying the source code, which is now not possible. You can, of course, disable modifications of the PHP files on your web server. But in here, it's coming as a single compiled WordPress site, which you can also test automatically on your Azure DevOps. It's called Azure DevOps, I guess, on your DevOps platform to check the integrity of all the plugins and everything and deploy just the compiled fully working tested application to your website. And also, as I was talking about the other two links, you can take use of the diagnostic window of Visual Studio, which I really like because it reveals me a lot of memory issues, a lot of exceptions, a lot of CPU leaks, and all the other issues I can have. So in here, when I'm browsing through the site and without the response caching because the response caching is disabled when I'm logged in, you can see the CPU is merely doing something. It's just a little peak and nothing else. And also, I can profile the application and see all the stuff I'm used to because it's very good practice to profile the application before you go to production, of course. And yes, that's it. I made it in 45 minutes. So that's actually everything I wanted to do. I wanted to demonstrate in this presentation. But yes, I guess I have a few more seconds. I can show you one more use of the .NET. I've prepared a little project in Visual Studio written in PHP code. And as you can see, it uses a Xamarin framework. So let me connect my phone somewhere into here. And where is it? And in the last two seconds, let me show you how the .NET is powerful for various reasons. You saw we can integrate PHP and .NET and all the stuff. But .NET provides you much more. .NET provides you better performance. You can publish your project to various devices, to Linux, macOS, Windows, and everything. You can, of course, make your application ultra-portable. And once you connect your phone to Visual Studio, you see it appears in the top menu. And you can just run any .NET project using the Xamarin framework on your mobile device. And I have an Android device in here. And as you know, .NET doesn't see a difference between languages. Once the language is compiled to .NET, you can do whatever you want with it. So what's PHP allows you to do is write an application for your mobile phone as well. So let it compile, deploying, building, installing target, doing some strong signatures, and deploying the DLL files to the phone, starting debugging, yes. Oh, and it's running. So in here, we have a little planet written in PHP running on Android device, which gives one more use case for the PHP language. I guess it would work for Apple and Windows phone as well, but I'm OK with Android. So that's it. I think I made it in 47 minutes. It's great. Thanks. So if you have any questions, I'm here. And I'll be glad to answer. If someone's listening at 2 AM, of course. Hey, Jacob, that's awesome stuff. We do have a couple of questions in the chat room. So we have some folks that were asking, does everybody get that performance bump when they drop in and they start using razor pages with PHP? Well, as you know, razor pages are compiled to .NET. So razor pages are strongly typed. And it can be written much more performant than PHP. And there is no performance drop because it's actually doing nothing. It's just calling the razor partial view PHP code. There is nothing performant that does. So there's no performance drop. So you get great performance when you're using razor with PHP. And there's also some questions here for folks that are just visiting a WordPress app, not an admin user, but if folks are just browsing to WordPress, do they also see that great performance coming through? Yeah, sure. Well, that's mostly because of the ASP.NET Core response caching middleware. Because locally, we have response in two milliseconds, which is great. So users will definitely notice the difference. But of course, if you configure another caching mechanism on your Apache web server or anywhere else, the result will be pretty much the same. In here, it's shorter, cleaner, and much more configurable than usual approaches. Cool. And one last question. Our friend, Ancient Coder, here in the chat room, is asking, WordPress has had major security attacks. How does your implementation of PeachPie with WordPress affect that security story? Oh, that's a good question. As you see, the WordPress is entirely on cloud, so you don't have any source files on your web server. So any attacks on these sources are not possible at all. Also, there is this ASP.NET Core and ASP.NET Core pipeline and your Azure web server, which catches a lot of attacks. And we've actually saw a lot of attacks on bugs in PHP. Since you don't have any PHP on your web server, these attacks are possible. So a lot of improvements and issues that are now in PHP like different runs or similar are simply not possible because it doesn't rather crash than allows you to modify and unsave. So a lot of attacks that are targeting PHPs are simply not possible with the compiler. That's it. Cool. And last question that I have here, I want to make sure I touch on. For folks that are browsing to a PeachPy-enabled website, is there an initial download that those folks see? PeachPy runs completely on the server, right? Yes. PeachPy is like a compiler in runtime on the server, so they don't notice. The only way how they can notice is to reveal the response headers of the web server. And they would notice there is x powered by a header with the value of PeachPy. So that's the only way how they can notice. But there is no downloading. There is no initial download at all. And so they won't notice. Fantastic. Well, thanks so much, Jacob. A number of the folks here in the chat room are pointing out that I've been doing a little bit of work with PeachPy on my channel. I know you've seen some of the stuff that I'm doing over there. So really great stuff. I can't wait to go a little bit further exploring PeachPy on my own. And it sounds like a couple of the folks here in the chat room are excited to give it a try with PHP on their own. So thank you so much. Yeah. Just think about putting all the goodness together with all the goodness of the PHP. Oh, my gosh. It's awesome. It's crazy. So thanks so much. We'll catch you later. And we're going to start getting ready for our next presentation. But in the meantime, we've got some quick words on view and webpack. Catch you later, Jacob. Thanks. Bye.


Well, good afternoon everybody. Thank you for having me. Thank you for joining us on this panel, particularly when there's so many other wonderful places you could be, other panels you could be hearing. I've also changed your job title since that went to press. I'm now a Development Officer. As we heard, I'm from London Metropolitan Archives. London Metropolitan Archives is the largest local government authority archive in the country. We hold the records for the city of London Corporation, but also the former Great London Council. y Llywodraeth Cwmptiwyr, a oedd yndod y Llywodraeth yn y bodai gyda'r hosbitwyr, ymwysnysau ac ysgolwyddon ymwysigol. Rydyn ni'n ei wneud o'r gweithio cyflwyno cyffredinol sy'n diremddio'n gweithio ar gyfer dweud i chi.  Roedd y Republica oeddylon wedi gwdelach ei wneud yma yw'r hwn. Beth yw'r cyfalu Seng Fastegol felly rydych chi'n gydulio'r pwysig. Fy wnaeth i'r rhan oherwydd, os ymlaes tîm i'r bobl hefyd yw'r peirion, David Cameron was keen to salvage some good news and the good news he chose to find amongst the rubble was the introduction of the marriage equality. So there's some very hopeful developments. There's also some very sobering realities when it comes to LGBTQ lives globally.  So there are some very hopeful developments. There are some very sobering realities and there's probably every shade of grey nuance in between. And as archives it's our responsibility to chart those changes to record the memories and the life stories of the people that lived through them as also being a kind of an honest resource for activism and to fight for future changes. I'm very much aware that there are two wonderful presentations to follow and that people come to events like this not only to be spoken to but to speak. So I'm going to do my very best to keep not only to time but actually to come in slightly under time. So the best way I think to do that is for me to stick very closely to the script, perhaps more closely than the script and I might normally. So I'd like to tell you a bit more about the Speak Out London Diversity City project which we've been running at London Metropolitan Archives for the last two or so years.  Yet the histories have been marginalised. Archives reflect this marginalisation with collections that often cast LGBTQ plus people as criminal, immoral or ill. Speak Out London Diversity City, supported by the Heritage Lottery Funds and the HLF, our Heritage Funding Stream, has started to directly address this marginalisation of this part of London's history. Since 2014 Speak Out volunteers supported by London Metropolitan Archives, LMA, have created a community archive using oral histories and community records to complement and where necessary challenge more formal collections held at LMA. Over the last two years we've interviewed over 50 people and digitised new and existing collections. Between May and August 2016 the new collections featured an LGBTQ plus history exhibition at LMA and are now accessible in our media tech and will soon be accessible online as well. Archival collections reflect the prevailing attitudes and power structures of the societies that create them. LMA's collections date back to 1067 and for most of this period LGBTQ plus people and their experiences have been marginalised. LGBTQ plus people have been variously depicted as criminal, ill or immoral, with prosecution, medical intervention and moral judgement the results. Official bodies records such as courts, hospitals and churches which support and further these depictions reliably make their way into archives whilst accounts from the perspective of the marginalised do not. Consequently, historical record relating to LGBTQ plus lives is often not a record of the lives themselves but of other people's judgments on those lives. And I have here on the slide for you just a very brief selection of records that illustrate that pattern. So our oldest document which gives evidence of LGBTQ plus lives a trial for so-called immorality dating back to 1395, a medical report about homosexuality in women by Dr Albert Winnor, so Albertine Winnor, excuse me, 1947 and homosexual in prostitution from 1955. There are however important and notable exceptions to this pattern in LMA's collection and in other archives across the country. In our collection, deposits from Peter Tatchell, Kenrick, Ruckus and others offer community perspective on LGBTQ plus history. These collections show the wealth potential material available to archives and challenge institutions take an active and strategic role in their acquisition. Following on I suppose from what we heard about the keynote just now, the initial impetus of the Speak Out project was to record the all histories of older members of the LGBTQ plus community. This generation's stories are often undocumented and without action we will lose them as people become frail and pass away. The initial hope was to create a collection of all histories that could grow over time. A successful HLF bid under the R Heritage Funding Stream provided the funds not only to gather all histories but also to create a digital community archive and revisit existing collections. Since the project was addressed in the marginalisation of LGBTQ plus histories, it was essential that the Speak Out project had members of these communities at its core. This allowed LMA to listen to the needs of community members, especially those underrepresented in the collection such as BME, transgender and bisexual groups. By contributing to the project, community members were able to develop skills in many areas including all history interviewing, cataloging, archival research, events management, web design as well as exhibition planning and production. Equipped with these skills, volunteers with support from LMA staff embarked on the process of gathering all histories, building a community archive and revisiting collections. Before I move on from this slide, I should stress that these are all facsimiles so that's why we have pens and post-it notes on them. That's not how we treat our original documents at LMA. These are some of our old history participants. All history provides a way of reaching histories that are often inaccessible or overlooked by archival sources. The different approach offered by old histories is valuable in a range of context but especially so for LGBTQ plus histories. This is because for much of the of history, the activities of LGBTQ plus people were taboo and in some cases illegal. As a consequence, central aspects of sexual, romantic and social relationships often do not exist on paper as to record them as to persecution and prosecution. Thus many of the usual archival documents that were used to understand people's lives are of limited use. Gathering all histories allows people to speak about those very experiences that otherwise like to go undocumented. For the Speak Out projects, volunteers were trained in how to gather all histories by experienced historian Claire Summerskill. Over 50 interviews were eventually conducted and transcribed over a two-year period starting in August 2014. We sought in these recordings to capture the widest range of possible LGBTQ plus experiences possible. Stories vary from the personal to the political and the tragic to the comic and all things in between. They include accounts of cruising in post-war Leicester Square, older transgender people getting changed in cars before visiting a full-in restaurant, the first meeting of the Gay Liberation Front, the London School of Economics, the setting up of the lesbian and gay centre, the schisms within the women's movement and the devastation caused by the arrival of HIV AIDS in the 1980s. There's an international perspective on these stories too with people coming to London because of the relative freedom that it offered in these regards. These oral histories that we have gathered not only record people speaking in their own voice against and about their marginalisation but also add new dimensions and nuances to our existing collections. Over the coming years we will continue to grow this thriving collection so it can make a major contribution to British LGBTQ plus oral history. Although the archival record for LGBTQ plus histories is incomplete, it's not non-existent. Records of spaces, groups and personal lives exist especially after 1967 which was a landmark which marked the partial decriminalisation of homosexuality in UK and Wales so in England and Wales excuse me. But there is a challenge with these records. The challenge is that the forms these records take can be difficult for institutions to work with and the individuals to let go of. The clearest example of this is ephemera. Ephemera includes receipts, tickets, flyers, newsletters and posters. Any item that was designed to serve a specific purpose and then be discarded after use. These items are hard to catalogue because they often stand alone and archive catalogues are arranged by the providence of items. More challenging is ephemera often has emotional value to its owners. The items in questions may be mentors of happy or important times and people are understandably reluctant to part with them. We met this challenge by inviting people to bring us any items and their personal collections relating to LGBTQ plus history to digitisation sessions held at LMA. Once digitised, items were returned to their owners. These sessions were sometimes stand alone but more often took place in the background and speak out at LMA LGBTQ plus events. This approach allowed digitised items to be grouped together as a single collection and meant that people did not have to part with valued items. In this way, we were able to add over 2,000 new items to our collection.  This digitisation process also establishes a relationship and trust with people which has led to more formal acquisitions and we have more formal acquisitions planned for the future. One depositor after working with the project has deposited a personal collection which includes an excellent selection of London Pride photographs stretching back 20 years. These photographs are now one of the most comprehensive, actually they are the most comprehensive visual record of London Pride in LMA's holding. This digital archive that we've created also incorporates items from LMA's existing holdings. A full-time catalogue editor was employed for six months and this catalogue editor compiled an exhaustive list of LGBTQ plus collections which we also digitised and this takes the Speakout archive to now well over 30,000 items. This comprehensive list was also used to produce an updated information leaflet to inform readers about LGBTQ plus collections held at LMA. This process of revisiting the collection also provided an opportunity for catalogue descriptions to be reviewed and new descriptions to be added. This was necessary because the most reliable way to find many records relating to LGBTQ plus lives was to use archaic and legal terms such as immorality, gross indecency or unnatural misdemeanours. Such terms are problematic because they are potentially offensive to readers and they are no longer in common use so they require a degree of specialist knowledge in order to locate records. But the solution to this problem was not to remove these descriptions entirely but rather to add a new level of descriptions to them. The archaic terms themselves are part of the historical record and to remove them will be to destroy historical evidence. So we added a new level and this new level of description includes more familiar tags such as lesbian, gay, bisexual and trans. Although such descriptions risk anachronism as they may not have been used when the records were created and the people that the records are about may not define themselves in those terms, the view was taken that inaccessibility was a greater evil than anachronism and that readers' historical judgement could be trusted to place these terms in their proper context. This new digital archive that we've created can be accessed in a variety of ways so including our LMA's MediaTek area. The MediaTek LMA has both a large screen and single screen terminals. This allows both groups and individuals to access the archive on demand and without prior appointment. The contents is arranged so it's easily searchable but it can also be browsed. This ability to easily browse the archive is an important way to improve accessibility as it allows people with a general interest in the subject area away in without the need for a specific research agenda or specialist knowledge. In addition to the MediaTek, the Speakout archive will be made available online. At the time of writing this paper, a selection of all histories digital archive is being put on and over the next five we have funding for five years of support so it will continue to grow over that five year period and we're hoping it will be a virtuous cycle of more people seeing the website, hearing about the project and choosing to contribute either all histories or materials. LMA has an exhibition space which we use to display and draw attention to our collections. To celebrate and promote the Speakout project, a four-month temporary exhibition was created using materials from this new collection and from our existing collections. As with all aspects of the project, the community was involved in all decisions and they decided on the key message of the exhibition and its themes. They also wrote text and were consulted on design concept. The resulting exhibition was framed as a discussion between older new collections and the archive and its users about themes that emerge from your histories, namely progress, place, relationships, health and identity. Its aesthetic drew heavily from the colourful and often DIY character of the ephemera we collected. I'd like to just talk a little bit more about two of the themes that we addressed there. The theme of identity was the most challenging to present in the exhibition. Much thought was given on how to offer a discussion of identity that was neither trite nor reduced people to stereotypes. Another factor to consider was the mixed origins the exhibition would attract, which included members of the LGBT plus communities, but also school groups and the readers that attend the archive. We wanted to offer some basic definitions to people not familiar with the LGBTQ plus acronym, whilst at the same time we were aware of the contested and changing nature of the words people used to identify themselves. It was in the spirit of the exhibition and the project to make the archive a place that starts conversations rather than presenting conclusions.  Visitors were invited to use pens to offer new definitions, dispute existing definitions and share anything else they wanted. By the end of the exhibition, the wall was covered with graffiti. Contributions included alternative acronyms, so quiltbag, which is, see if I can remember this, so it's queer, undecided, intersex, lesbian, trans or transgender, bisexual, asexual and gay, as well as greetings from foreign visitors and an expression of surprise that after nearly four months there were no phallic symbols anywhere on the board. All of these comments and more have been recorded and themselves form part of the Speak Out archive. We did have a kind of pain debate amongst ourselves whether to wipe it clean or not in the end and we did actually wipe it clean at the end because after speaking to our conservator, it's very difficult to conserve something like this. We took the photographs, wiped it clean, but we're now hoping to use this as part of our events as a way to start the conversation again. We decided to make a virtue out of necessity in that regard. The other theme that I'd like to quickly discuss is place. This is a repeating theme that appeared in both our oral histories and the group discussions. Places are a focus for people's memories and experiences. The disappearances of many queer spaces as the result of gentrification is a source of much regret and activism in the LGBTQ plus community. This need to display memories of place led naturally to the creation of an interactive element of the exhibition based around a London map. After several iterations, a simple design was settled on. The only geographical feature was the Thames, which was represented with fragments of text selected from the oral histories and arranged into a found poem. On this facsimiles of documents from the collection were attached with magnets. People were encouraged to bring their own ephemera and attach it to the map, offerings included tickets from the drag star, jinx monsoons later show, membership for a motor sports club, articles about famous venues alongside more point items relating to the Admiral Duncan pub bombing and the killing of Ian Bainham. People were also encouraged to attach small pieces of paper to the wall, which contained descriptions of their memories of places. People shared the locations of bars and clubs, some still existing, others closed, as well as memories of isolation and connections, physical, romantic and social, both fleeting and enduring connections. The Speakout exhibition closed in August 2016 and this marked the end of the first phase of the project. Looking to the future, Speakout volunteers supported by London Metropolitan Archives will continue to grow the Speakout archive by gathering new oral histories and digitising community archives and more of this material will be put online. As well as growing the archives, we'll be working with groups who will be able to use LMA as a queer space in which they can collect, preserve and explore their history. Thank you.


an amazing driver from george an amazing you know first lap and getting through the traffic and and getting the best of that car you know he could cap the alfa romeo behind him if he finished fourth louis is down to 14th position so very very impressive job by george rossel but a little bit disappointing not to see melzadez bringing big update i was convinced that we bring a big update in imola and they did not and they're still on the back foot so i'm looking forward to see melzadez back at the front 100 but difficult at the minute but george doing incredible podium last race no that's fourth and he's up there with the car it's not clearly not to the level


By now, you might start to see how intimately related membrane proteins are to biological function, and that's why we're focusing on them. I'm going to show you one more really cool example. Remember that nerve impulse? I said that the voltage-gated ion channels is helping conducting the nerve signal insider cell. Well, at some point, we're going to get to the end of one nerve cell, and we need to make a jump to the next nerve cell. That's called the synaptic junction, and we know quite a lot about that from medicine. When you reach the end of a cell, you have a junction that might be a few tens of micrometers larger, so it's a tiny fraction of a millimeter, and what happens there is that you have small vesicles or small cells, well, sacs really inside the cell that contains neurotransmitters. They're just small chemical molecules. Many of them are amino acids, in fact. When this nerve signal reaches the end of that cell, these are released into the synaptic junction, and then the compounds diffuse tens of micrometers to this other cell. Do you see the small purple or yellow dots there? Those dots are membrane proteins. They're so-called ligand-gated ion channels. If a voltage-gated ion channels opens an ion channel in response to voltage change, what do you think a ligand-gated one does? It opens a channel when they bind a ligand, in particular those small neurotransmitter compounds. This is the acetylcholine receptor, which was the first structure was determined from torpedo fish by Nigel Anwen, relatively lower resolution, and was, in fact, one of the very first-cooled cryoen structures that was, at least, of a membrane protein. The acetylcholine compound, which is the neurotransmitter, will bind up here in the outer part of the channel. So this is a so-called extracellular domain, not sitting in the membrane, but outside the cell. When this molecule binds there, there is a gigantic earthquake in the entire protein, and it's causing the structure here to change, and it's pushing the loops between the extracellular and transmembrane domain, and as a result, the transmembrane domain will open up. This entire protein, if we look at it from the top instead, you might see there it goes into five subunits. It's a pentamer, and all these pentamers will then move away, just so slightly from each other, and make the central pore here large enough that it will be able to conduct ions. There is a wealth of different pentamerically congated ion channels. I won't have time to take you through all of them, but some of them lead positive ions, conduct positive ions, other conduct negative ions. Some of them are increased in the conductivity when compounds bind. Others basically end up being dampened by compounds, and this is the reason why we have a remarkable diversity in our cellular response. Here is an example of one that we've simulated. This is a bacterial channel called Glick, but do you see all the beta sheets up there? We have beta sheets in the extracellular domain, and then alpha helices in the central domain. The bacterial ones are much simpler than the human. In the bacterial case, all these five subunits are the same, and the human ones, they're typically five different ones, or at least two or three different ones. In fact, one of the most common channels that we're interested in, for instance, when it comes to anesthetics, there are 17 possible different subunits for the GABA channel. You can just calculate 17 to the power of five potential different combinations, which is likely why we can have so many different nerve cells, for instance, in our brains. It's a very large and active area of research, and we still understand how these channels open, partly due to research we've done in our lab, but connecting the actual channel, the molecular mechanism here to the genetic diversity, and how that results in cellular response, we have no idea about that yet. This is used by a number of animals. For instance, poison frogs. So poison frogs, they express a poison called epibatidine, and what epibatidine will do is going to bind inside these channels in the extracellular domain, and when epibatidine has bound, you can no longer bind the neurotransmitter, meaning that I can't conduct nerve signals. And of course, if I can't conduct nerve signals, my entire nervous system starts breaking down, which includes things like signaling my breathing or my heartbeats. So it's extremely poisonous. Cobras. Cobra toxin is also a toxin that attacks these channels. In fact, cobra toxin specifically attacks the acetylcholine receptor, and the cobra toxin itself is a small molecule that consists of a few beta strands, and we know that these beta strands will bind between the subunits up here in the extracellular domain, and when they have bound, these subunits can no longer move apart, which again will block the neurotransmission of signals. They bind extremely hard and rigid, which is good for the cobra catching its prey. But there is something else.  Having epibatidine is great for killing your prey, but it's very bad if it's killing yourself. These are vertebrates. These animals too have nervous systems. So how does the frog, for instance, make sure that it doesn't die from its own poison? It turns out that these channels in the frog, the acetylcholine receptor in particular, it has a few mutations. It's just two or three amino acids that have been changed right next to this binding site so that in the frog itself, the frog has a binding site that is not sensitive to epibatidine. So the frog can express as much poison as it was. It's not going to hurt it while its prey does not have these mutations, and therefore the prey will die. This is not merely a theoretical reasoning important to understand basic biology, but exceptionally important in healthcare. If you ever need surgery, we're going to anesthetize you. And if a general anesthetic that is inhaled corresponds to small molecules ranging from, well, today I would say it's usually isofluorine or desfluorine. But these are small gas compounds that bind to the receptors I just showed you. This is a remarkable story in itself because for a very long time we used to believe that because all these compounds are gas soluble. So people thought that they were acting purely on the lifted bilayer. But the last 15 or 20 years now we have identified the binding sites in this ligand-gated ion channels where they bind, and today we know exactly how to design anesthetics. It's just that it's hard. This far we haven't been able to design any new anesthetics for molecular basis even though we know the binding sites where they act.


A free cookies and hot cider were on hand today at the Common Goods Thrift Store as they celebrated the opening of their Christmas boutique. Common Goods is a thrift store that donates all of its proceeds to Bridges of Hope, a non-profit organization that helps families in need. Yesterday Common Goods ripped everything off their shelves and stocked them with holiday items. Common Goods is also starting their I Hope campaign for the holidays. So during the Christmas season we usually have about 350 families that reach out to Bridges of Hope between November and December to help these families. We ask for extra monetary donations this time of year so you can even make a donation right at our register or through our website. Bridges of Hope has a goal of $60,000 for their I Hope campaign and more information on how to donate can be found on our website. If you enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland PBS.


Hi, my name is David. I'm from Orlando. I'm so happy to be back at WordCamps. It's awesome. Before I start, who here has heard the term? Jason, you can come in. Now you're just going to hurt my feelings. No, okay. Who here has heard of the Indie Web before? That's fair. Who's heard it before? Yes, I can. So I've given this kind of presentation before. I've actually added a lot to this one because last time I gave this presentation was probably in 2019 at a WordCamp. And over the past few years, this topic has dramatically increased. And there's a lot more exposure. A lot more people will know the things I'm talking about, which is awesome. I feel like I'm not just going like, here's this weird little thing that only a couple of us use. And now I can say it feels like I've heard of Mastinon before. I've heard of Wordpress before. So that's easy. So what happened since the last time I gave this presentation? Well, there's this little website. Some of you may have heard it before. The WordPress community usually organizes on it. I'm not on that website anymore, even if I was able to access it. I know it's been a while since I took this screenshot. You can tell by the URL, but it still fits. Some of these websites are maybe not the most reliable anymore. Also, is anyone here like an active Redditor? Are you an active Redditor now or just before June of this year? I mean, it's fair that some people, I don't fault anyone for sticking around Reddit after the blackout. That's fine.  That's why that's why there's a divide of the room. So you didn't know we were actually sorting you in, you know, Redditors versus not Redditors. Yeah. So I also don't really use Reddit anymore. Those unaware, there was a heavy backlash earlier this year against the CEO of Reddit and the company itself for a variety of reasons. I agree with most of the reasons. And also, it's just a reminder that platforms, platforms are not your friend. Companies are not your friend. Surprise. They have things that they're trying to do and it's fair for them to want to do that. But to devalue the actual product in favor of what they think the product is, is a little disheartening. You wouldn't be on Reddit if other people weren't on Reddit. Reddit, the website itself, is valueless. The content produced by you and everyone else is where all of the value lies. And I think that we should be keeping that value for ourselves for the things that we create. I actually don't talk about Lemmy in here because I didn't think that was still a little bit too new, but there are federated Reddit alternatives. So most of you have heard of the term IndieWeb before, but I'm just giving the definition that you can get directly from IndieWeb website. A community of individual personal websites connected by simple standards based on the principles of owning your own domain, using it as your primary identity, to publish on your own site, optionally syndicating elsewhere, and to own your data. That's a long way to say something that might already sound familiar to anyone who's familiar with a motto of democratized publishing. IndieWeb core principles, in short, from that statement and what most of you talk about when they say, is your site IndieWeb compliant? Your content is yours. You own the things that you create. You are better connected to other people via that content. And most importantly, you are in control. You get to choose what happens with the things that you create and with the connections that you make. So with the idea of the IndieWeb, again, the IndieWeb I should clarify if IndieWeb is not a platform or anything like that. It's more of a mindset. That you can host your own sites wherever you want. You can make changes to your code. You get to control the design of your website. And you can move things around where you want. You can move to a different platform. You can move to a different host. Whatever. So, what does this sound like to you? Yes, it's me, Tom from MySpace again. You know, I want to say two of three of you are correct. Sorry. Kind of sounds like a platform that all of us know and use, right? WordPress already has all those things. You have a WordPress website. Congratulations. You are part of the IndieWeb. So see you. But there's a little bit more to it than just having your website. This is a great starting place, you know, having your own WordPress site. But there's a lot more that you can do, both to empower yourself and to make it easier for others to interact with you. So I'm going to start the presentation by talking about some WordPress plugins. I gave a quick little overview of this talk to somebody in the hallway a few minutes ago. And I said, if you already have your own WordPress website where you have the ability to install plugins, you can implement every single hands-on thing today, if you so choose. One of the best things about me giving this presentation now versus a few years ago is all the tools I'm going to talk about have had dramatic improvements because more people have eyes on them. I actually added one, activity pub plugin. The reason I added the activity pub plugin, excuse me, and yes, I see I messed the title. Oops. I added that one earlier because earlier this year, the person who wrote the activity pub plugin for WordPress was acquahired by automatic. And so just in the past month, they've released a major version release and a lot of minor releases. The plugin works really well now. I hope I didn't before. So I didn't want to make this super long here. Who here has heard of or uses mastodon? Or I'm going to say that because it's the most popular activity pub platform. All the other ones I'm going to list would be even fewer people have heard of them. If you don't use that, who's heard of Blue Sky? So Blue Sky itself, I'm going to clarify, does not use activity pub the protocol directly, but it works in a similar way. So I have the activity pub plugin on my website. Yeah, I'm going to love saying that over and over again. So here's an example of what this plugin can do for you. And it can do more than this, but the most basic example that people, I found that people are really connected with. My username on my website is David. Let's say Alexis had a profile on my website. He would then change that to Adalexis. And then you have the domain of the website. My personal website happens to be david.garden. So I'm going to use you as an example. You can follow atalexis, at, and possibly creative. Assuming you have this plugin installed via an activity pub platform like mastodon. When I post a new post on my website, it will automatically go to that platform. Additionally, if I write a post and I don't have it automatically post and I just copy the link to that page and go like, I wrote a new blog post. It's about whatever. And I paste it. And I have that link back to my site. So what that means is if somebody sees that post, think of this as a Twitter status update, a Facebook status update. If somebody sees that post on an activity pub-enabled site and likes it, boosts it, replies to it, leaves a comment, something like that, it will show up on my original website. So you get to bring some of the conversation back to your own site. Side note, which I didn't actually add here, is I write the post on my site. Michelle follows it and she writes a reply comment via mastodon. I reply back to your comment. Sorry. Your reply goes to my website as a comment. I reply to your comment on my website. It will then automatically go back so that you will see it on the platform you're on. That's something that I think is really important about the indie web and the decentralized web is that I'm only going to cover a few platforms because there's so many out there and all of them are going to come off as blank clones because other things already exist. But those platforms are very useful to be interconnected with one other. So for instance, if you use YouTube, there's a platform called Invidias. If you use Spotify, there's one called Funk Whale. If you use Instagram, there's a platform called PixelFed. These are ones that are very similar to those. But an idea is that okay, I have my mastodon account. I see something on PixelFed that I like.  I can interact with it without having to create an account on PixelFed or on that website. I see a video. I can like it, leave a reply, subscribe to them without making an account on that. I'll call it YouTube clone. But yeah, basically video hosting website. This is kind of what the internet was. It was kind of what the web was originally made to do.  Was anyone using Instagram at the time that you would cross post between Instagram and Twitter? Like that you could easily just, you know, cross post the same things there.  Not very long after Facebook bought Instagram.  Because why let somebody be able to go off their platform? You know, that doesn't serve that. The next plugin I'm going to talk about and suggest is the indie web plugin itself. This plugin I would like into Jetpack if you're already familiar with the Jetpack plugin for WordPress. The idea of this plugin isn't that it does things directly, but that it's like a hub for a lot of other indie web tools. What it does is instead of activating all those tools, it gives you like a nice little dashboard to install those third party plugins and control the settings for them. So it's just a way to have a bundled installer for a lot of these other tools. Which the reason for the activity of public one first is because I was the most popular people like, but you can also get that through this plugin. Next there's another plugin that you can get called Web Mention. So web mentions are a thing that your website can do to notify other websites when you link to them. So it's a little bit different than say leaving a comment, you know, on a post and having it go back to wherever the comment was. This is a lot more like, I see that, I'm going to pick on everyone in the room whose names I know, I see that Renata wrote a post on her website and I wanted to respond to your post. And so I write my own post on my website and I say, and here's the link where I got it from. Or you know, here's what I'm responding to. Assuming that both of us have web mentions enabled, you will get notified, hey, David wrote this post in response to your post. And then vice versa, mine will link back to each other. There are some platforms that have web mentions enabled by default. One platform that I'm going to put an asterisk because I don't know if this changed, but it's medium, the medium blogging platform. Another really nice thing about, one of the nice things about medium is that they allow you to use canonical URLs. So for those worried about being able to post your content to another website on yourself, they do send back all the SEO back to your site. But that's one of those platforms where you can respond to other people on your own platform and notify them that you've responded. The main thing that I, the main use that I find in this is it allows people to hold conversations better in a more long-term format. You know, you can, I can see that Jason wrote something interesting and I'm like, hey, I want to respond to this. I see people do it all the time in the web dev world. You know, Chris Coyer of CSS tricks previously, that's like half his blog now is responding to other people's blog posts. And I love seeing like, oh, what is this person who I, you know, respect think of these other people who I also respect in a positive way?  It's a better way to like form communities. And also, again, notify those people like, hey, we're talking about you. More importantly, notify you, the person who's not either of those two people, what it's in response to. So an example that I wanted to give of implementing activity pub is an old screenshot. Ignore it. Yeah, wow. Okay. This is a screenshot from 2019 is that I wrote a post. I posted that onto Twitter. And this comment that I got here is from somebody responding via Twitter, via a tweet. These likes, reposts and mentions are all things that happened on Twitter. Well, actually, I think some of them were messed up. But basically, it is that I can show my website how people interact with other places and, you know, have that like social proof that people are interacting. But also, more importantly, something like this, when somebody comments somewhere else, they'll be able to see, you know, people will be able to see here where people are talking about. And I will update those screenshots. I literally, no, no, no, I took the screenshot. I'm not going to say I first gave this presentation on 2019, but I am going to say that I should give screenshots for some of it. Another example that I want to give just to show other ways how you can interact is there's another plugin that you can get called MicroPub. MicroPub is a thing that will allow you to create posts on your website using a third party platform. So sure, there are things like I only know Mac specific ones like Bear and IA writer. And there's several writing platforms that allow you to post directly to WordPress from them. But using MicroPub, excuse me, allows you to have other platforms that are tailored to a specific use case. So the example that I have here is Indie Book Club. It is kind of like a version of Goodreads. They have their own publishing format that you can use that will do things that are specific to reviewing books. So, you know, sure, I can like write a blog post and say, hey, I read this book, it's awesome, whatever, but I'm not going to be able to get all of the data that that website would want. Using this MicroPub platform, I can still publish things in a format that they like. So the use case here is as opposed to just publishing, you know, going to Goodreads if you're familiar with that one, writing your review on a book and Amazon owns that content forever, you get to talk about it in your own space and send it to other people who also have interest in you or your book or whatever you're talking about. Pretty much the entire ethos here of everything I'm saying is why let someone else own the things that you create. Another one of the plugins that I want to talk about is called Indie Off. So who here's ever gone to a website and they say login using email or more often now the first thing they say is using Facebook or using Google, you know, using whatever. So that's something called OAuth. It's a very useful tool that lets you say, you know, I'm logged into this Facebook account. When I log into this website using a Facebook account, it can prove that it's me and, you know, I can pull my username and stuff there. And then later on I want to log in as long as I can solve access to a Facebook account, you know, I can do this without creating an account here. So that's really useful. But what happens if something happens at those other platforms? What happens if the a platform, I'm not even going to call it, what happens if Twitter turns off most of their APIs as they did last year and breaks the integration across the web as happened late in November? You're kind of screwed. Or what happens if you delete your account on those things but forget to update your accounts here? Or what happens if your account gets suspended for whatever reason? Some of us know that your accounts don't get suspended for being a bad person, just for the kind of person that, say, Elon Musk finds bad. That's a different topic. Indioff works in a very similar way, we'll get to that, where you can use one of your other platforms, your Drupal site, WordPress site, like Gravity or MicroBlog, to use that as your authenticator to say, I am me, I'm the person who wants to use this. There are a variety of platforms that allow you to use your own website for this, but most of the time I see it on other people running the same Indioff plug-ins on their website. So basically, I can log in, again, I'm saying let's use an example that Michelle had this on her website, I would then be able to go like, look, I am logged into David's website. So when I say I'm David, your website can trust that it's me. Similar-ish in concept to web mentions, but not entirely the same, is syndication links. This is something where you can have any of your content syndicated elsewhere, and you can link, basically, this one's more manual. All those other ones do things automatic for you, like set it and forget it, basically. This one's more manual, you think, okay, I'm gonna write this blog post, I'm gonna talk about it in other places or link at other places. This allows you to create those syndication links. Some platforms will use these like web mentions, you know, they will notify that you wrote it. The most prominent platform I can talk about still is Medium, because it's, you know, a bigger name blogging platform that people have heard of, and surprisingly lacks on letting you own your own content. The best use case for this, for me, is besides having a list of here's other places you can find this content interact with it. Also, when it's posted those other places, if they're one of the websites that allows you to link back, like Medium, then they will send you that traffic. So, if you are interested in SEO for your site, that's a good thing. So, all of those things that I mentioned already, those are plugins that you can download today on the wordpress.org repo, and the majority of them, I'll say that famous five-minute install, you click install on it, and, well, by five minutes I mean you click install on it, and you go through the settings page and make sure the settings look right for you. What's your username on, you know, Twitter or Mastodon or whatever thing you're connecting to? Cool. There's also other ways that you can connect that aren't wordpress things. So, I use a platform called Mastodon. I've referenced that a few times. I think that's probably the most popular indie web blogging platform. I can write content, if anyone's used TweetDeck before for Twitter, you know, I haven't set up kind of like that because I like all the information bombarding me at once. But same thing, I can follow hashtag specifically to see what people are talking about with wordpress. Thankfully, in the past year, a lot of wordpress people have moved over to Mastodon too. So, there's a lot more in this column on my screen than there used to be. Still get direct notifications from people. You can still, you know, do all the things you do on most other ones, comment on people's things, boost them like them, bookmark them for later. But I have a lot more faith in my ability to keep this website running now than, you know, a multi-billion dollar company, it turns out. I've been keeping this website running for over seven years now. And the only time we had an outage was when our hosting platform had a data center outage for like 10 hours or something. So, I am more reliable than Twitter. Put that on my website. Okay, that's not that impressive anymore, but still. There's also another platform that I mentioned, micro.blog. This was created by someone who was, I don't think it was on the core team, but a core contributor to wordpress years ago created this platform that's another micro blogging platform that has a lot of different features built into it. But the nice thing is that it can pull from other places. This is a point from wordpress blog posts that I made earlier this year when I was doing the 20 days of, 20 days, 20 years, whatever the thing was called, the wordpress 20. And it's a place where you can interact with other people, again, same as any other social media website, but also really nice that they're like a good repository to send your content out to other places. You can find that at micro.blog. I can log into it via my website or by my Mastodon account. I mentioned pixel fed earlier, Instagram-ish. I feel bad for calling things blank clones, but when you make a social media platform that's about pictures and a bunch of pictures in a gallery and stuff like that, that's basically what it is. Same activity platform that things like Mastodon are based on, which means that I can use while I have an account on this one website. I can comment on other people's things and interact with photos and everything via another site. And then another one that a lot of other people here might have already heard of, Gravitar. Gravitar was actually around before automatic audit, but it's been, so it's been active for like 20 years now. And you might notice that sometimes you'll go to a website, especially wordpress websites. If you create an account on someone's wordpress website, you might notice that you automatically have a picture showing up on that website, even though you've never been there before, because you have your Gravitar set up, that you've taken the time to do that. Gravitar itself over just the past year has become a lot more like a link tree or card in the way that it allows you to put a lot more information on where else you can be found, link back to them. Also, I didn't really highlight it here, but a lot of these platforms have verification. Mastodon does as well. I think I have a screenshot later in there. Part of this is that when I say this is who I am on this other website, if on that other website I then say, by the way, that's my Gravitar profile, it can automatically verify me and say this is who that person claims to be. You know, I know there was that whole thing about the, I get ragged on Twitter, the blue check mark on Twitter and how it became kind of absolutely meaningless, both because you can just pay for it, but also because it was an attempt, as they said, to prove who you are online, but really meant you are notable and famous enough that we want to give it to you. So theoretically, what they said that it was supposed to be was I could prove to them, no, no, I'm David, this is my Twitter account, and they would verify that, yes, we confirm this is the person who says it is who it is. That's what all these other platforms can do, by logging in via my GitHub account, since I can prove I have the credentials to log in there, they're using that as enough proof that that's me. So you have yourself connected by all these websites, you have all these plugins installed on your site, everything's great. You've already done a lot, but next you can start publishing content that is friendly for the indie web. So there's not really a lot that you have to do different from how you publish your content now. The thing that usually hangs most people up is the first concept called posse that is post to your own site, and then publish elsewhere. Sorry, I wrote it like that because publish makes more sense than syndicate, but that's for syndicate. Publish on your own site, syndicate elsewhere.  All those other plugins I showed you before handle that. It just requires a mindset shift of like, instead of me going, I'm going to write a Facebook post, I'm going to write a blog post, and then I'm also going to put it on Facebook. Hopefully for your site you have a personal domain and hosting for it. By the way, almost all the tools that I mentioned are integrated with wordpress.com too, if you use that. It's again, the guy who created that activity pub plugin works very automatic. Try verifying your website with realmie links. I'm going to show some specific examples of how to do that, as well as how to use micro formats. Try to make sure you apply proper metadata for sharing. If you're using an SEO plugin, Yoast SEO framework, whatever, all in one, you're already covered on that. When you are on other websites, link back where possible. The where possible just means that the other website allows you to. I don't mean Twitter or Facebook, but I mean like every other platform. Again, most of these tools will do automated cross posting, and there's actually a nice website called anywebify.me that you can just plug in your domain name, and it can run automated tests for you to let you know that all these things are working correctly. So, first thing I mentioned was verifying your identity with realm equals me. On my website, I linked to one of these ones. I linked to my mastodon profiles. I just have a link there that says here, profile. I use the realm attribute and I put me, and then on my mastodon profile, I put my personal website name, and that green checkmark there is just verifying, yep, we verified it both ways. A bit of social proof that you are who you say you are. As I've shown before on other ones, micro blog has it, mastodon has it, GitHub has it. That's actually one of the few things that Twitter did have is the verification, medium, the most major platforms. If you are sharing info about yourself on your website, try using micro formats and hcard markup. I'm showing you the markup that exists on my personal website. I'll go through it step by step. If you are using a plugin like Yoast SEO or something, they have, if you've ever looked at the settings there on the back end, they're like, is your website for a person or a business? Oh, it's for a person. What's the person's name? Give us a picture of that person or whatever.  So, if you don't like looking at code, if you don't want to have to deal with code, there are plugins that will just do this for you. In this case, this code here, I'm just showing you what the markup looks like. Micro formats have been around as a standard since 2005 or so, 2004. There was a consortium of three major tech platforms and search companies, AOL, Yahoo, and Google. How's that going in the last 18 years? We still use all three of those, right? Okay. But thankfully, all these big search engines decided, you know what we need to do? We need to make unified standards so that people can use them on their websites and they'll show up on our search results well. So they did something right. But yeah, so I let people know that this is this type of content. In this case, I have a picture that is a selfie that I have it not displaying on this page because I just want it linked there so that other platforms can grab that picture of me. Again, that realmie, my GitHub link. Obviously, it's an out-of-date screenshot too because it's a Twitter profile, my personal website link that I let it know that this is my URL. Again, all these things like, you know, what is your given name? I have my pronouns. You can also put your last name, your information about yourself, the link to my company, fixupfox, which is why I do WordPress maintenance. There's my plug. You note that it's an organization website that you're linking to. All these kind of things where you can say like, here's what this bit of content is for other platforms to be able to digest it correctly. Again, if you don't want to look at code or write any of this code, there are plugins that will do this for you. You probably already have one installed in your website doing this for you right now. The most common one is Yoast SEO. Just saying that gets super, who doesn't have Yoast SEO installed on one of their websites, right? Never used it for. Cool. Easy. You've all seen it before. You just might not know that by filling in some of those fields on the back end, it's doing this for you. Yep. Well, it's one thing that, so Yoast SEO is not only making these microformants, but also is using that same data to make OMBED cards, to make Open Graph. You know, Sanders, like that Facebook wrote that half the web also uses. So I mentioned posse. There's also pesos because sometimes you can't always post your own site first. And also, I don't expect everyone to post every single thought that there might be a tweet to their website first. But maybe, if you're like me, you want to store all of your tweets on your website so you can cause psychic damage to yourself later. In that case, you can totally do that. Yeah. You can totally do that by having that information posted somewhere and then having it cross-post back to your own website. That works well for a lot of websites. It does not really work. And I realize it's in the screen right here to give you an example. It doesn't work great with Facebook. And I cannot claim that it still works for Twitter. But as of a year ago, it worked well for Twitter. Here is my little plug for today. I host my sites with SiteGround. SiteGround let me come here to this event today. And also, they have the ability to implement a lot of these things too. My personal sites are up there where I do all of my anti-web stuff. There's a platform called Bridgy that can do a lot of automated cross-posting for you. Again, I need to update the screenshot mainly because there's more services listed on there now. You can find the website at brid.gy. I think you can also go to bridgy.com to get to it. The idea is that you can link accounts in some places and connect to other places. They're just doing cross-posting for you in the same way that Zapier or Ift would do. But it's just free, and it is made specifically just for cross-posting as opposed to all those other things. Also, when it says find your user page here, you're going to click on that. It's going to use IndieAuth to log in via your website. So if you want to learn more about using your WordPress site for IndieWeb, the website indieweb.org is a great resource. It's basically like a Wiki website, and they have a page specific for WordPress. There's a ton of detail there, more than I went over here. You should head to WordCamps. Just like you're already using WordPress, you're already at WordCamps. So again, you've already done everything important here. And there's also IndieWeb events. I realize that these are links. You can't click on them here, but this is up live on my website. There's going to be links in a moment, so you can click on all those. But similar to how there are WordCamps, there are IndieWeb events. And finally, just experiment on your own site. None of those plugins that I put are going to break your website. My lawyer did not review that statement. What I mean to say is, yeah, what I mean to say is, those things, all the plugins that I showed you, they don't do things visually to your website. They do things on the back end to help it connect to other websites. Give some of them a try. They're all available on the repo. Again, over the past year, they've gotten a lot more people have been using them and working with them to find bugs, to find edge cases and things that they worked so much better than they used to. I guess now people suddenly care about all the social platforms we use going away. So that's it. This is where you can find me on Macedon, my business where I do WordPress maintenance. And I have information about this on my newsletter. In this presentation. Any questions? I went over a lot. Yeah, so I would suggest using one of those, if it's a website that can do the automated cross posting, I would suggest using one of those plugins that I recommended near the beginning. Either the activity pub plugin or the syndication link plugin. All those again, you can find, if you don't want to remember the names of any of these other ones, just remember IndieWeb. You can go to the wordpress.org repo and type IndieWeb in and it has a wrapper for all of those. Otherwise, that platform, if it's one that's not supported, that platform went too far. Bridgy is a good resource because it's one that you can just freely access by logging in with your own website and connecting to other accounts. Thank you. Few services in there I was gonna wear out. So with something like Macedon, even on Twitter and stuff like that, there seems like weird friction points that you can like, dive in. So one is like, I set up a Macedon account somewhere a bunch of years ago and I, where is it? And what's my password? And I'm almost nervous to set up a second newer one and feel like there's two Jason's on the internet. And it's also stuff like, how do I like unfollowing all these people on Twitter? Or like, I just want to keep track. I'm still on Twitter because there's these people who are only there. Like, I'm there. I have a list. It's basically like the feature I use the most. Yep. And I want to be like, when you guys move to a different service I want to make sure that I follow these people I use to follow. So there's always like weird friction down there. So the problem that I'm going to say when it comes to Twitter, is any of the suggestions I'm going to give you, it's very nebulous if they all work now. I have a lot of suggestions that I can give you that worked great even a year ago. But the API has changed so many things. So like, for instance, there was a feature. There was a tool that people wrote that would go through, look at your Twitter follows, and then go see if they are also unmasked on. And it would provide you with just a, you know, a list where you can just click on them and like follow mess on, follow mess on. I do know that that explicitly for a while was disabled by Twitter for some reason. They didn't like people looking at other social platforms. So I don't know if you can use that again anymore. There are also cross posting tools. Some of them still work. One that I've used is called Moa Party. This is not a specific endorsement of it, just to say that if you go to Moa.party, presuming that the Twitter API still allows it, it was one of the simple platforms for you to say this is my master on profile. This is my Twitter profile. Whenever I make a post on either one of these, grab it and post to the other one. And then you can set specific rules like unless it's a reply to somebody, unless it's unlisted, unless it has a specific tag in it, whatever. So you can, or say I only want ones to cross post that have this tag, which like for a while you'll see some people that'll be like something, something, something, hashtag X post. They're like saying I don't want to cross post. Let's make sure other people see it. So that's one way that you can find people and still be in two places at once. Twitter lists. I used to use Twitter lists and Mastodon also has lists. One thing, one feature that I like better about Mastodon lists than Twitter lists is that you can choose to hide, I'm trying to say it, not hide. So you have your home timeline, the first timeline that I had over on that thing, where it would show everybody I follow, everything that gets posted. You could then make lists, but unlike on Twitter, you can still view those lists separately and remove them from the home timeline if you want. So whoops. So as an example, I have a WordPress, I have a WordPress list on Mastodon. I can then say, hey, if I'm looking at the stuff in this list since I already have all of their stuff displaying here, just don't clutter up my home timeline with their stuff. So you could really silo those things a little bit better, which is one positive that it's not something I really even thought of before when I was on Twitter, but when I have it, I'm like, that makes sense, we need to do that more. So that's another feature that still exists. The hard part, yeah, is the network effect. Twitter might be considered a failed platform when it still has over 100 million multi-active users or something, but then again, that's what Google Reader, what's a failed platform at 100 million users in 2013 because when you're a company operating at that scale, 100 million people somehow is meaningless. Wouldn't you love having 100 million clients? Okay, maybe not, that might be a little bit, but still, I haven't got anything near that. And to answer the other part about, you think you have another account somewhere, that's fair, a lot of people signed up in like 2017 when they started talking about it and then forgot where that stuff is. You know, how many people remembered they sold a MySpace account when they got the email from MySpace in 2019 that they were hacked and all their profile info was taken?  Yeah, so I don't have my MySpace login anymore, but I'll find whatever person on the internet stole it and has it for me. So not to say that that's not a problem, but it isn't a problem that is specific to that platform. And as far as two Jason's being out there, that's going to happen. There is going to be Jason at whatever, and there's going to be Jason at whatever, you know, other sites. So you do have the issue that people can share the same username on different websites. Your entire username on Twitter, for mine was, you know, at David Willfall, this is my full name. My username on Mestodon is at David because as a person who made the website, I get first pick at the names and the website domain, tech.lgbt. So your whole username on ActivityPub websites is your username and then whatever website you're on. That's going to be the same across, you know, those other types of sites that I talked about as well. The problem does that. So I can syndicate like an author or a user on a WordPress site? You think? Can you syndicate like a whole WordPress site? Yep. All authors just put at tech.activity. So if you are using ActivityPub plug-in, you can change this by the way, like it's a setting, but by default, like you can change it to whatever you want, like you can say full site at JasonColman.com, but by default, let's say your site is JasonColman.com, then your website's username would be at JasonColman.com at JasonColman.com.  The one thing you're not going to want to do is let's say your username is Jason on your website, you can't change it at JasonColman.com, you know, because you've already used that one for your author page. Any author on your website is going to automatically have this as well, and it is something you can disable on a per author basis if you so choose. But yeah, yeah, it can syndicate the entire website or it can syndicate specific authors. And again, that's just built into that by default as a setting.  Any other questions? I think I addressed all of my Twitter ire there. Actually, that's not true. I can rant about social media platforms forever. I'm basically only on Massivebond now, so if you want to contact me, you have to go to my website or my Massivebond page. Anything else, or do we want to get out here five minutes early? Most of these things, as I mentioned, if you didn't catch it earlier here, all of the things that I showed you there, all of the links, all of the other plugins, everything like that, those are all things that, no, you're fine, that if you have your WordPress site already set up and you have the ability to install plugins on your website, you could activate all of those things and set them up, you know, all on the same day. I mean, probably all on the same hour or something, but that's for your reason, we have all stuff to do. That's it. All right, everyone's embarrassed walking in, so thank you for coming.


Hello everyone, I hope you all are safe and sound. The registration for this year's biggest AI and coding competition Codewa 2020 AI is now open. This video guides you through how to get yourself or your team registered for the competition. Let's begin. Visit the codewa.org website on your web browser or your smartphone. You may find all the information that you need to know about the competition on the first page of the website. Go through it if you haven't already. Once you get through the details, let's begin with the registration process. You may find register on the menu bar of the website. Click on it and you'll be taken to the registration page for the participants. The first section asks you to enter the team details. First, find a suitable name for your team which can be unique. Next is to set the password. As you keep on writing the password, the strength indicator shows how strong your password is. Confirm your password. Now choose the age group that you belong to. If you are a group of two, make sure that both the teammates belong to the same age group. Next, select the country you reside in. Enter the name of the school that you study in. If your school is not present in the list, select the others option and write the name of your school.  If not, kindly choose not applicable. Select your team size. Moving on to the next step, you need to fill in yours and your teammate's details. Make sure that you do not make any mistake in writing your name as that will be printed on your certificate. Do share the correct email address on which all the updates related to Codever will be sent to. Next, add your contact details, gender and a profile photo which will be added to the certificate. Finally, agree to the terms and conditions and click on register. With this, you have registered your team onto the website. But there is one last step which you need to do is to complete the payment. Once you click on register, you'll be redirected to the payment page. Add your billing details on the left section. If you have a scholarship code, enter it here and click on the complete payment. You may find all the available options for the payment here. Once you complete the payment, you'll be now able to get access to the free tutorials, your dashboard and will now be able to submit your project for Codever 2020 year. All the very best!