My name is Blaine Butler. I'm a product owner with the Center for Open Science or COS. COS is a non-profit organization with a mission to increase openness, integrity, and reproducibility of research by making open scholarship practices easier and more normative. One of the ways in which COS aims to complete this mission is through the creation and maintenance of the Open Science Framework or OSF. As I mentioned earlier, this is going to be a hands-on webinar, so I'll be demoing a lot of things. So these are just a few of the images from the document that's been shared in the chat, just as an easier way to share this kind of context on a larger screen. And then what I want to really highlight right now is the topics. So there's a lot to the OSF. So we're going to be briefly going over your account and profile, discovering content or OSF search, research planning, registrations and pre-registrations, study management collaboration or OSF projects, research sharing OSF preference, and then the relationships that exist amongst all of these things and then from the OSF to other things outside. I could spend an hour talking about each and every one of these things. There's also facets of within these things that we could also focus more time on. So what I'm going to ask from you is after this webinar, we're going to send out a follow-up survey. Please let us know what you would like to learn more about. What you need deeper dives into maybe things that you've been struggling to do within the OSF or have just more questions about that we can help answer that so that we can provide more informative webinars related specifically to those topics that you're most interested in. As I said, you know, COS is a nonprofit with an organization with a mission to increase openness. And through that, we host the OSF. What is the OSF? It's a free open source online research platform that was designed to support researchers, allowing them to openly, transparently and collaboratively share their work at all stages of the research lifecycle. This involves the search and discovery phase, sharing what you're working on, seeing what others are working on and easily finding that. Designing your study, you can use registrations or preregistrations to design your study and plan out what you're intending to do. Collecting and analyzing data in a collaborative manner. You can use an OSF project to gather all the data from any collaborators, share that data, analyze that data and then publishing your reports. The OSF has its own pre-print service as well as hosting other pre-print providers where you can publish your data as soon as you're finished with your research study, as well as you can also then share any other outputs from your research, including data, code, questionnaires, any other supplementary information that is important for you to share for others to understand your research process and your research project. So let's get started. We're going to go into the OSF. If you do not have an account, you can easily create an account by just signing up. Feel free to do this now. You can log in if you have an ORC ID here or you can log in via your institution. Only those institutions that are institutional members have the ability to sign on through your institution. If you do not know that your, if your institution is an OSF institutional member, you can easily search that here. I went to James Madison University, so I am going to look up. And if I were still at James Madison, I could then sign on using my James Madison log on, just because I also know. So you can see other universities that are also institutional members. But as I am not going to be signing in via a university institution right now, I'm just going to sign in with my account. Okay, now I'm signed in. This is my account. The first thing I'm going to show you real briefly is the settings. You can also, we can look at the profile, but this is my information, my name. And then it also has a preview for how your name looks in a citation. So you can make sure that your name is represented how you want to. You can also fill in your social employment and other education information. The other thing I think is actually really important to know is your account settings. So let's say I'm at Center for Open Science or COS now, but let's say you move institutions, you can add an alternate email address, and then you would still keep access to your OSF account and all of the content within that, even as you move organizations. There's also, I've connected my org ID, that's here. My affiliated institution right now is Center for Open Science. You can change your password. If you need to deactivate your account, you can request to deactivate your account here. And then I'll show you your profile. It just shows any public projects, org ID, and then LinkedIn information and any other information you have decided to provide. Moving on from account and profile, we're going to start with OSF search. So this is a newer function or functionality that we added just last year. So within this, you can refine your results. So let's say I'm interested in projects, and I want to know projects that are funded by the National Institute of Health. I can then see all of the projects, which are the 19 that are funded by the National Institute of Health. I can then look at the metadata associated with that. And you can see that this one was funded by the National Institute of Health, and they were able to provide the award number. And it's a data, it does contain a data set. So I can also look at registrations. And within registrations, I could pick a subject like psychology. And as you can see with registrations, there is the ability to add resources or outputs from the registration, like data, code, materials, any papers or any supplementary information. So let's say I'm interested in psychology registrations that have data. And now I have 230 results, I can then take these results, and I can put them, I can share them with somebody else. And if they put in the same URL, they will get the same results refined, which is a very nice feature because it allows you to share your search terms. Within this, I can also look at autistic. And there are seven registrations related to autistic studies that have data. So that is also a very nice feature that you can use to refine what you're looking for and get the data. And most of these you can see also have code and materials. So it's a very nice feature to be able to kind of look or refine what you're looking for. Since I've been talking about registrations, let me go. Actually, Blaine, real quick, would it be okay if we popped up the poll for folks? Oh, I'm sorry, I totally forgot the poll. I hadn't practiced that as much. Yeah, so I forgot. I wanted to ask if anyone already had an OSF account and how familiar you are with the OSF. Thanks, Blaine. Sorry to interrupt. Yeah, no, it's fine. I hadn't practiced that, but like once. Sorry. You can continue to fill out the poll. I'm going to go back to talking about registrations. I am so sorry for that, y'all. So going to registrations. You can see we have OSF registries. We also have other registry services. These are branded registries that you can try to have your registration put into. I'm just going to do an add new. We're doing a registration. It asks you if you have content for registration in an existing OSF project. I'm going to say no. And just for ease of use, then there are registration templates that you have available to choose from. If you want more information about the templates that is in the document that Mark shared and has been shared in the chat, you can look for more information there just for time and ease of use. I'm going to select the open ended registration because it's one of our simplest registrations. Create a draft. You will then need to fill out all of the metadata fields, title, description, any contributors, the license, subjects, tags. Then you provide a summary and you can add files to your registration. And then you would hit review as there is nothing in this registration. It's not going to allow me to actually register it. But if all of this information is filled out, you can then register it. One of the really nice things about registrations is that you have the data update them. I can show you a sample. This is on one of our test servers. I have a registration and it was created on March 14th and that would be the original. There's also an update from March 14th and then the latest, which was updated on the 15th. And all of that information is included along with any of the updates that are in the registration. So why are registrations and pre-registrations important? Pre-registration is a time-stamped read-only version of the research plan created and submitted to a public registry before the study is conducted.  The study describes what your research plan to do, any updates which I just showed can be shown that needed to be made during the study, and then any results. Those are the data resources that we looked for and searched for earlier, such as data, code, papers, materials, or any other supplementary information, such as the questionnaires you used. If you're doing a psychology study where you're talking to interviewing subjects, think of a registration as a study management plan that you would use that would accompany your data management plan. There's a link describes differences between registrations and pre-registrations in more detail, but essentially a pre-registration is what you would complete before you begin any data collection or data review, and a registration can be done a little bit later into your research process. Now that we've gone through registries, I'm going to go. Now we're going to talk about OSF projects. So if you want to create a new project, you can then select your affiliation. As my affiliation is only with Center for Open Science, I can select it. I can also remove it. And then you have your storage location. So we have multiple storage locations. These were essential for making sure that data management requirements by country and globally are addressed. We have Australia, Canada, Germany, which is essentially the European data storage location, and then the United States. And this ensures that whatever data management data storage requirements are needed by different countries are addressed by selecting whichever location either your funder or your institution has required for you. The European Union, Germany location is what is essentially used by all of the European Union and is also used by those in the UK. I'm going to just select the US and then create my project. I'm going to go to my project. In all projects initially created are private. You can make them public at any time. You can then go back to making I could make this public. And then I can go back and make it private again. And just as a note, when you make it public, you can create a DOI for it. But I'm going to go back and make it private again. And you can change this, like I said at any time. Some other nice things about projects is you have the ability to add files. So there are a couple of different ways to add files. You can take a file on your desktop and just drag it and drop it. You can also go to your files page. You can drag and drop here. And I'm just uploading a bunch of different types of files. One's a PDF. This is a WAV file. It is the Star Wars theme. You can also add a file by uploading and data set. Once you've added your files, you can then go in. And this is a very, very brief discussion about your metadata abilities within the OSF, but you can then edit your file metadata. You can put in a description resource type. I'm going to say data set. And then language. You can also see that there's project metadata. That is going to be editable from your project overview page. So you can edit your description, contributors, resource type, any funding support information, like you have your funder, you have a grant number, you have a link to the grant, your affiliated institutions, the dates created and modified are all going to be populated. And then I have not put any tags in, but I could add tags describing what the content is within my project. Another nice feature, you can see a wiki here. So there is a wiki associated with each project. And that shows up. I can then go back in and edit that. And if I go back to the wiki, you can see each version of that wiki is saved and timestamped. This is a nice way to communicate with others that are working within your project with you, your collaborators, informing them of updates. You can add, you can link images, you can put links to videos, audio files, all within your wiki. As I mentioned, collaborators, I'll also show you adding contributors. So if you want to add another person to your research project, or your OSF project, you can simply go in and search. I'm going to pick one of my colleagues. I see an Eric Olson associated with Center for Open Science. If you're still unsure if this is the person you think they are, because there is another Eric Olson, you can click on their name and it'll take you to their user profile page. A nice way to verify is to look at their ORC ID if they've linked that. And I can see that this is Eric Olson who's at the Center for Open Science. He also, this is his ORC ID information. So I'm like, this is him. So now I go back and I select to add him. And I add him as an admin. Permissions are also gone into detail in the document. Administrators, there's rewrite and read permissions. You have the ability to change. If you create the project, you're automatically an admin and you have the ability to associate permissions with any contributors that you add. So I'm going to add another. And any contributor that you add will get an email notification that they've been added to a project. And so now I can see that I'm on the project. Eric's on the project. And Daniel's on the project. If I look at the contributors, these are the permissions. Are they bid-lead graphic contributors? You can change these permissions at any time. If I decide that I don't want Eric to have admin permissions anymore, I can downgrade him to a read or read write only just as you're allowed to control all of the permissions and privacy within your project as you so desire. There's also the ability to add components. So let's say you decide that you want to have your project split up into individual experiments, or if you want to collect maybe based on all of your data in one component, all of your analysis in another, and then any results or outputs in a third component, the ability to add components is unlimited and how you want to structure your project is up to you. For now, I'm just going to pretend that we're doing experiments. Our components can have different storage locations. So let's say you have a collaborator who's in the UK and needs to put their data specifically into a UK storage location, or a European Union storage location. They have the ability to do that. You can also add contributors from the original project. They will keep the same permissions as with the original project. You can also add any tags. So if you're tagging this based on what kind of research you're doing or any other identifiers that are important for you to help make your research more discoverable, you can carry those over to the component. I'm just going to create this now. As you can see that this project or this component is private, that's what the little block is. I can then, when I make this public, I can either make, choose to make the entire project public, or I can make all, or I can just choose to make the main project public and keep experiment one private until I am ready to share the information or data or content within that component. So now, just test is going to be public. So if I copy this and put this here, anybody, I can log out too. You don't have to be logged in. Anybody in the public can see this, but they will not see that private component. And they'll see the files associated with that test project. You should be able to see this project, but not anything else associated with it. Another nice feature of OSF projects is the ability to have add-ons associated. We have a bunch of different add-ons. So these are external pieces of software that you can link to your project. So let's say you have collaborators at an institution that use, we'll look at storage first, that use a different storage provider. They may have Box or an Amazon S3 account, Dropbox. You can link your GitHub or GitLab accounts as well. I'm going to do Google Drive just because that's the one we use the most. So in order to enable that, this gives you all of the legal ease, permissions, what it means, and how you can do things. I'm going to confirm that. So now it's added and I need to configure that add-on. And so I've already linked my add-on in my profile. There's more information for that in the document it's provided, but I can just import that account from my profile. And so one thing I recommend and that you can do is within my, I can either link my entire Google Drive, which I don't necessarily want to do, but you can create a folder very specific related to the project that you can just share that folder. So on a project that I've worked on before with the Center for Open Science, I created an S3 test file. I'm going to link that. And then if I go back to the project overview, I now see that I have my Google Drive linked in all of these documents in my storage, in my OSF storage. I can then move these around. I didn't mean to open them. And if I move this here, this will now show up in my Google Drive. And that will now be permanently in my Google Drive outside of the OSF project. And vice versa. So if I want to move this JPEG to the OSF storage, that is now in OSF storage. And I can access it. And it's it's now within the OSF storage and has been removed from my Google Drive. So now we see that I have a PDF file. And let's pretend that that PDF file contains the preprint or article from the research that I have done. And I want to publish that as a preprint. So I'm going to go to OSF preprints. So I can submit a preprint. And as I mentioned, OSF preprints is one of the preprint services, but we also host a whole variety of other preprint providers, such as Law Archive, Sci Archive, Social Archive, Meta Archive. I'm not going to read them all to you, but these are just a few. And each preprint provider has its own policies regarding moderation. I'm just going to go ahead and use OSF preprints for right now, just for demo purposes. So I can either upload the file directly from my computer. Let's say that I don't have a project, but since I am doing this from a project perspective, I'm going to select, I'm going to do open it up and then go back, upload from my computer. Usually that works. I don't know if it's because I'm sharing screen and my internet is not good. So I'm just going to drag and drop. They're good. Sorry, I think my Wi-Fi is a little slow right now. Once you've uploaded the file, there are other assertions, other information that you need to put in. You can always update or edit your preprint. All of that information is included in the document that's been shared. Let's say your preprint gets accepted into a peer review journal. You can put in that DOI here. You can license your preprint according to whatever licenses you're comfortable with. Some preprint providers have required licenses that you will have to select. I believe for OSF preprints, it's either a Universal or a CC By International. You will then need to put in your abstract. You can select discipline. Any other authors, as of now, my name is the only author, but I can add, just as we did with the project, I can add another author to this. I think my internet's a little slow right now. Any conflict of interest information that you need to provide, any supplemental materials, you can connect a project here. Create a new project if you're going to put your supplemental materials into the new project to be accessible with the preprint itself. I am not going to submit this because it's not an actual preprint, so I'm going to cancel that. Going back to our document, we've talked about DOIs, we've talked about ORC IDs, and now this is how the OSF is personal identifier ready. We link your research organization registry to your ORC ID to DOIs, and then that is carried through taking your suitcase with you with all of the PIDs that you have created and keeping them all together. Your ORC ID, if you link it to your OSF account, will automatically be updated with any preprints or projects that you create on the OSF, and then any ORC IDs that you associate to any of those things will continue to log into your institution. Okay, so need any help? Have any more questions? This is how we always end. These links, this is taken directly from the very end of the document. If you have any video references, a link to our OSF support center, some tips and tricks, tips and tricks that we share on a monthly basis, kind of just either new features or interesting ways to utilize the OSF. You can always reach out to our support desks directly via support at osf.io. Project team members will help you. We will also be starting OSF, or we will be starting office hours that you can sign up for next month. This is a link to any other webinars and events that we have. If you are interested or you're part of an organization or an institution that wants to have an institutional membership, you can click this link and reach out to us and we can help you discuss what other tools that are available through the OSF and which one might be best for you. Please don't hesitate to send us any questions. Any features you think would be helpful for using the OSF? As we went through with some of the add-ons, we're working to expand the number of third-party pieces of software that we link to. So looking at data management plan tools, potentially expanding to electronic lab notebooks, other things like that, let us know what you need because our job is to provide for you the best possible product in the OSF open science framework that we had that meets the needs of your organization and how you're doing your research. Okay, I'm going to stop share. Sorry, that was a little bit fast. I'm a fast talker, but we have a couple of minutes or at least 10 minutes. For any questions, if anyone has any? Or have they all been answered already? There is one question that we have which is I'm not sure we have someone to ask what is the difference between a registration and a pre-print? Mark, do you want to take that? You're the registration expert. Sure, I'll be happy to. So a pre-registration is essentially a plan of what you intend to do. It happens even before a study even begins. A pre-print is essentially a manuscript right before you are published. So it's after your study is completed. So they're kind of like two sides, almost the same coin. It's just on whether or not it was before the study or after the study. And then we have another question that was in the chat, which is, is there a place in each project or dataset to put institutional generated unique IDs? Their institution is generating their own IDs for each funded project. I'm not sure that will be a blame question or potentially a Gretchen question. Gretchen, can you answer that? Is that in our metadata map? Additional identifiers. So, right. Assuming these are identifiers that like your institution is assigning to a work, so a unique and identifier that's unique within your institution and not an identifier for the institution. That's the case, please write in and correctly on that. Right now there is not a place to put additional identifiers. However, there will very soon be ability to add new, some additional metadata fields in additional templates. And there will be room in those for additional identifiers. So keep an eye on the Center for Open Science blog and our announcements will be announcing about those new metadata templates that are available. And one of those templates is going to be supplemental standard metadata according to the data site metadata schema. So it will have the ability for additional identifiers, additional types of descriptions like table of contents, additional kinds of related identifiers, you know, things that are cited, things that are, things that support that are, you know, elsewhere, and additional dates for, you know, dates and things was created versus accepted versus published, etc. And perhaps a few others I can't remember right now, but keep an eye on the COS announcements and blog and we'll be putting more information on that. Hey, are there any other questions that we look into and like I want to say, you know, remember, we could have gone like it was very brief and it was an overview of everything. Make sure you answer our, you know, our follow up email about what you want more information about and we can make sure to do a deeper dive into that in the coming months and we'll be posting the schedule on that events page or webinars and events page. We're going to be doing another OSF 101 next month and then the month after that we're going to start incorporating some of the deeper dives into the other areas like the search registrations, pre-registrations, projects, metadata if that's of interest, a lot of, like I said, there's a lot there and trying to give an overview of everything, but at the same time allow for more feedback from you so that we can make sure to give you the information that you need for any pain points you have, any questions that come up all the time. And as I mentioned, you can always email supported OSF and we can get those information or get you answers that are specific and we'll be starting to host our office hours where you can sign up for some time to talk with a product owner or COS staff member about very specific questions you might have that we can schedule one on one time to help you with. So look out for that, keep an eye on our events and webinars page and we'll be putting those things out there. We have a couple more questions. Okay. Amen. I don't know where my chat is or the Q&A. It's okay. So how permanent and reliable is OSF? Is it a good idea to maintain everything that is happening in a research group from lab books to publish works on OSF? We do have a lot of OSF research labs that have started out over a decade ago putting their research lab on and there are templates for this too in the document that was shared. There are templates for like creating, you know, starting a research lab on the OSF. I've seen in that structure can be how you want. There's a lot of like onboarding, data sets, however you want to structure your lab group, but there are templates there for others that have done that. We can do, you can look for other research labs. There's some really good ones that have, especially that use their wiki specifically for onboarding new research lab members and communicating and sharing data sets and keeping all of that in one place. It's really having been, having worked in a research lab, it's really nice to have everything in a digital findable format. Paper lab notebooks and going back through those is very hard. So then be having all of that data centralized and if, and if you have it so that your institution doesn't want you to put it on OSF storage, then you can just link to your institutional research, you know, data storage and have that available through your OSF project so that everyone has access to any of those data sets generated, you know, by users or by lab members two years ago. So that when they leave, it's not kept on their computer. And then hard to find later, it's connected to a project so that everybody has access to it and can find it after they have progressed through the group or finished off their portion of the research project. That's a very long answer to a very short question. Great. Our next question is, would you recommend to have a single project for a bigger grant project and have them set up as single studies as components? Or would you recommend having each smaller study as a separate project? That's going to be on a very case by case basis. I think it depends upon how you're on that research grant funding, how you're collaborating. If you want to set it up so that you have collaborators with components so that they can kind of choose when they're ready to share their data publicly, you may also have instances where you're doing research for Indigenous groups where there's a lot of privacy issues. And so until that data is de-identified, you are at will to share it or there might be specific licensing issues for different pieces of the research. So having a component that could potentially have more secure access allowed with it or who has access to it is a nice way to be able to kind of define that. So that's, I guess it's a very case by case basis. If there's anyone else who wants to comment on that, feel free to jump in. I think that's exactly it. Depends on the land, depends on the discipline, depends on the structure. And on the funder. The funder may want everything in one, like working with them too and making sure that whatever their requirements are for data sharing and accessibility are met. And your institution, it's a whole balancing act about how your open scholarship or open science practices need to be carried out that requires input from a lot of different stakeholders. All right. And another question, does OSF allow open peer reviewing? We are not set up for open peer reviewing. There is, and I can share screen again real quick. I didn't hit the share. Sorry. I always do that. So there is the ability to allow comments, but that's not always peer reviewing. But that is a way that you can allow for others to comment on your work. And you could read this now, but chat over here.  Here it is. Okay. So I could put into my wiki, please comment on my protocol. So that is one way we can enable it. We are, there are future plans to allow for more communication within the OSF itself. So if you want to kind of set up more, you know, not necessarily a slack, but like more communication within the OSF. But that's a future improvement that we're working on. Thank you. And if they stop using OSF, is all the data they have deleted or removed? No, your data, unless you request that you do a GDPR delete and request all of your content and information be removed, you can stop using the OSF and the projects will remain. And the registrations are permanent and permanent with a DOI. So they will remain forever unless they are withdrawn. And then with for withdrawals, each registry, each branded registry or registry service has its own determinations for what is allowed to be withdrawn. And even if they're withdrawn, there is a metadata kind of like left behind for withdrawn registrations. It gives basics even most of the information is removed. I guess tombstone page for the registrations that have been withdrawn. And we had another question just came in. Did they understand that registration is done for a complete projects, meaning they can't pre-register a review protocol, but can't register it? I don't think I understood that question. Are you talking about scoping reviews? Pre-register a review protocol. Yeah, I'm not sure if I... You can pre-register a review protocol. It's more from the fact of you're trying to say exactly, here's one more review. Here's how I'm going to review it in my process. And if you're going from that approach, before we even start anything, then you can pre-register it. Even if you want to do a small sample and just say like, here is a sample just to make sure that my analysis and my code is working appropriately. You can pre-register that and then pre-register a second one saying, now that I've done the analysis, here's everything I want to do, or include it, or include all within one registration, pre-registration. It's totally up to you. The main point is to want to be transparent and to try to do it before you start it, data collection. All right, we had another question come in. What is the difference between registering a systematic review and a systematic review protocol in OSF? I don't know. Crystal, this might be a you question. I'm actually not sure I understand the question. So if the difference between pre-registering a systematic review and a systematic review protocol in OSF, I actually... Yeah, I don't know that I understand the question. Are they... Maybe, Robo, you can type out like, are you asking about the difference between pre-registering on OSF and on a different platform? Do they need to review the protocol first? So I guess it depends on what you mean by protocol. So pre-registration is where you're basically telling everybody what your plan is for doing a, in this case, like a systematic review. So that would include your protocol. And so you are creating a plan and you are uploading that onto the OSF or another platform of your choice. It doesn't have to be the OSF. And then that is a record of what you plan on doing in the study. And then on the OSF, at least you can update it. And if there are changes, you just need to make sure that you justify those changes. And so I think it sounds like, based on my understanding of the question, is they're both the same. But I may not be understanding the question. I'll put my email in the chat in case somebody wants to follow up with me on that. Thank you, Crystal. And I did drop two example labs into the chat. The Wiley Lab and the Alley Lab. The Alley Lab's been on the OSF since 2018. And the Wiley Lab has been on, and they both have slightly different structures for how they set up their lab group or their lab page. So. Thank you. And we have a question for Gretchen. Are the fair principles incorporated in OSF? So, for example, having to use a controlled vocabulary for data sets uploaded, such as the Darwin core for biodiversity data? Gretchen? Yeah. So fairs are a pretty broad guideline. So we do actively work to increase findability for the F, accessibility, interoperability, reusability with lots of aspects of our platform and our metadata. With the specific example you gave about using a controlled vocabulary for data sets, at the moment, that is not a feature of OSF to actually control vocabulary or the template that you're using for the metadata. However, related to the new development I was just talking about, keep an eye out on our COS blog and announcements. We are going to be releasing a new feature that will allow for the use of specific customized metadata templates. Right now, Darwin core is not one of the ones that supported, but it is actually on a list of ones that we're considering. And we'll be happy to have feedback about ones that we should add after that. So I think right now, you could not specifically, in a platform-specified way, use a controlled vocabulary like that, you could certainly add Darwin core terms as tags or in your description. And they would be a little more kind of free form, but so searchable. But in the future, we will be supporting more very specific metadata schema like that. Thank you. Okay, we have another question, which is, how can I get a DOI for my supplementary materials on OSF? And Crystal, I think you are answering that one.  Yeah, I was just going to say, if you have a project and you make the project public, you can generate a DOI. It'll be up at the top near where the title and everything is, the description and where you, where Blaine was showing where you can select a license. So once your project is public, you can create a DOI for it. Easy enough. All right. Give it another minute. We have four minutes left to see if there are any other questions. Yes, Neil put in there, you can also get DOIs for individual components. So let's say you want to put all of your data into a component and create a DOI just for the data. You can do that as well. Thank you, Neil. Yep. Is it possible to add resources or components with an existing DOI to a project, for example, a published paper? I know you can add those to a registration. Is it possible to link them to a project as well? I am not sure. Eric, are you here? Or Daniel? No, that isn't, not in the, in the meta that other is in a way to associate a paper publication to a project. You have opportunities to still post those in your wiki or elsewhere in the project, but the resources that the registrations have are not on projects currently. I'll add though that you will be able to, with the new metadata template, add those as, you know, related items that they won't be, as Eric said, they won't be the same as the badges that were in the registration. Yep. So as you guys can see, there is a lot of work going towards keeping things fair, using DOIs, making everything permanent, invisible, and we're always looking for feedback to improve those services. So if you have any idea, suggestions, recommendations, or pain points, feel free to reach out to me or to Daniel Steger, who is our technical community manager, and I'll put both of our emails in the chat here in a moment. All right, Blaine, we have two minutes. Anything else you'd like to say to wrap up? No, other than please make sure you fill out the follow-up survey, just so that we know, again, I've seen a lot of questions about registrations and preregistrations. So, you know, like I know, like I said, make sure you give us your feedback on what you want to hear more about, and we are going to make sure that we address those and future webinars and events that we're holding to give you more information. And as Mark mentioned, you know, he gave your his and Daniel's emails, but also feel free if you just want to write into support and say, I need help with this, or I think it would be great if the OSF did this. We take all of those requests and that feedback into our plans for how we're going to make our platform better. We try to be as user-centric as possible in picking what future improvements we're going to do that are going to give you, the ones using the product, the best experience that we possibly can. And as you can see from how we've answered these questions, this team effort, and we all work together to try to give you what you need to do the research that you want to do on our platform. Thank you for joining us and thank you for being so engaging. It's always great to see all of these questions and have, you know, have y'all answering each other's questions in the chat, knowing that, you know, there's a fair amount of you I saw from the poll that are actually already have OSF accounts and feel fairly familiar with the OSF. And like I said, this is just an intro, but then yes, let us know and we can dive deeper into the subjects that you are most interested in getting more information about or that you struggle with. So thank you again. Have a great rest of the week.


Hey, what's going on guys? Patriot Prime here with Dylan and we are here tonight to draw finally for this thrilling 30 Roadbuster figure, so We'll let some people get into chat room here. I'm trying something new. I've got I'm using my phone to do the videoing and we'll try to pull this up on YouTube So I can at least see your comments or this may work. I've never I've never done it on the phone before So what do you think of this figure Dylan? You love it. You love it. So Kato's toy boxes here. We have I know I on the conus watch me screw your name up tonight He's on here shattered glass Unitron Raphael What is going on? I got Dylan messed with my G1 guns. Oh Speaking about contests You guys familiar with Wheeljacks lab from eBay Dylan actually won a contest today off Wheeljacks labs Facebook page. He posted something. He said hey anybody with a kid comment on this will do a drawing and I Comment on it and he wanted himself a generation one bone crusher. Those are people who are talking to us Too late Robo Dragon. You've already put in there you Robo Dragon's been after this. Oh check it out. Patriot Prime t-shirts, baby and Walmart All right, so how I am going to do this is I there is a website called Random comment picker and what you do you take the URL from The video that we're you did the comments on so I take the URL from the roadbuster video and I put on here So he is a good guy. He is an auto. See the Autobot symbol. Okay. Yeah, I explain these things So we have 84 Unique comments on this video. So you have a 1 in 84 chance to win this roadbuster. Do you want to say anything to anybody? Before we get started Okay, we want to help. I love you. He loves you. We all love you if it wasn't for you guys We wouldn't do this so got the future Patriot Prime right here I got 20 people in the room Shattered glass unicorn says doll somebody says you're cute. So you're also cute All right So you guys ready to do this so what I'm gonna do and we'll try to flip the camera around so you guys can see this We are going to do this live. It's not gonna be double takes But keep in mind if I draw a name and it doesn't say I'm busting for that roadbuster I'm gonna spin it again What are you touching? I'm just touching the start. Okay Got them five-year-old fingers. He's always after stuff on this desk All right, but he's been trained very well. How do you do you touch those figures behind you? Nope, you look with your eyes and what? Look with your eyes and not your hands All right 24 people here three minutes in Oh Check out my new episode of the scent wrap I actually got to talk to a transformer youtuber collector from Scotland. So that was pretty cool I'm doing better international relations than our government. All thanks to those plastic robots behind us Okay, so let's do this. I'm gonna angle this screen around. Hopefully you can still hear me. It's probably looks terrible Hop on my lap for a second. Let me see what kind of angle I got here So hopefully you guys can see what's going on Roll down here to where you start the raffle and pick a winner Everybody see that? It looks fine. Looks fine. All right, Dylan. You want to click this button right here? Let's see who wins this thing Here we go. And the winner Mike Dessauruses, I wish they could put road buster in the cartoon. He would have been cool to see in the movie He did not say I'm busting for this road buster Dylan roll again. Hit the button That one right there Okay, now Now hit it. Here we go round two Winner TC. I am busting for that road buster Love the review g1 road buster looks so cool.  I'm glad thanks for playing everybody real quick the Patriot Prime. Yes You have missed forever.  That's all yours There's your contest. What was I saying? Oh, yeah, I have a Patriot Prime merchandise page now So if you would like a Patriot Prime t-shirt, I do t-shirts hoodies Tank tops mugs and stickers. I have that link in the description of this video too I already got the four people that's bottom. So it's pretty cool. I Tell me about I'm gonna be afraid to go to sleep tonight So TC Congratulations road buster is yours Get in contact with me. Give me your address. I will ship him out Monday because I'm fortunate enough to work two blocks from the post office Sparkleton prime says guess what I got guys Yeah, that is his contest That's the back of the box All right, we're gonna get off here because I am burning my data using this right now anything you want to say to everybody Bye-bye. Bye-bye guys. I appreciate it. Keep an eye on this channel I've got new G1 reviews coming up and a special mystery for That I always get the tongue tap on these live things I have a special mystery review that I'm gonna post tomorrow as my response video to Adam Antium Matrix guys. Thanks for supporting the channel. I appreciate each and every one of you and This is Patriot prime signing out who ah You're not gonna do it Good enough take care guys Bye-bye How do you stop this thing? You don't have 15 minutes of me


Hello and welcome to yet another episode of Nikolo, investigate some story and then finds out it's super weird. Like, okay, so these days I was actually looking at how Ubuntu Touch came to be and then be a bit less because, you know, Canonical actually dropped founding and support for Ubuntu Touch and the more I discovered about the project, the more I was like, sorry, what? It's probably things that I should have known, I didn't, I do now. So this story of Ubuntu Touch starts on the 31st of October 2011 and it starts from a blog post of Mark Shettleworth, I guess it's pronounced and we gotta talk about this guy. You probably know about this guy, fun fact I just discovered about him and I was shocked. So, okay, first in 2020 he was estimated to be worth 500 million pounds, sorry actually, and that already was quite a shock and he has like a private jet which is called Canonical One, tells you anything and he actually started Canonical, is I think the founder, but for sure was the CEO for most of the time, he actually stepped back during the period of this time, he then got back at being the CEO which he currently is of Canonical which is why I probably should have known about the guy but I didn't and he founded the Ubuntu Foundation of which he called himself the benevolent dictator for lives, very similarly to what the Python author did and he has always also, sorry, been a patron of Katie, giving Katie some significant chunk of money back these times that I've been talking about, then I stopped, I'm not too sure why I wasn't in Katie at the time. Also, and this is pretty relevant I think, in 2002 he actually flew to space, he paid 20 million dollars which today are worth like 30 million dollars to go to space in Soyuz and he stayed at the International Space Station and I gotta read this quote that comes directly from Wikipedia, yes this is my source, it's Wikipedia, don't don't say anything, he also had a radio conversation with Nelson Mandela and a 14 year old whilst being in the space station and a 14 year old South African girl, Michelle Foster who asked him to marry her, he politely dodged the question stating that it was he was very honored at the question before changing the subject, this is amazing, I just imagine this person paying 20 millions to be in space and then getting asked to be married from a 14 year old just after having talked to Nelson Mandela, how did I not know about this story? Sorry, as I was saying 2011 he posted an article whilst working you know not at CEO but for canonical products and he says that in his vision buy Ubuntu 14.04 which will be released three years after the blog post roughly, Ubuntu will power everything like tablets, phones, TVs, smart screens, everything and this will be powered by Unity which was announced just a year prior and Unity was actually meant he says to be convergent and to power up all kinds of devices this is the kind of statement that you say aged like milk about you know sadly sadly this Ubuntu touch is actually gets demoed by him at the 2013 CS which is pretty significant and it was baked in the 13.10 release which means that it was indeed on time so what was missing is you know being able to sell the thing on actual hardware that is actually pretty significant like pretty important if you want end users to use your operating system for mobile phones because Ubuntu touch is that if you didn't know you need to have the option of having a phone that you can just buy and it has already Linux on it otherwise end users won't really care about putting them there themselves so what did they do now here's the second completely trippy part which I didn't know about because I'm too young or something Ubuntu try to make the phone themselves and to do that they launched a fundraising on indiegogo and that already looks weird so I thought okay how much money do you even ask to start mass producing linux phones and they decided to ask 32 million dollars and when I heard that I was like sure like kitty sometimes has troubles like raising I don't know 15k for projects like kitty and live we managed to in a month so that was very successful but 32 million dollars for a linux phone nobody is gonna let's be realistic there was no way to reach that goal 32 million dollars so I was like okay how much did they actually achieve like 10k 20k 12 million dollars they managed to raise and again I was like 12 million for a linux phone wow so apparently there were even companies like Bloomberg who donated 800 thousand dollars because they actually believed in a project that would make sure that the phones wouldn't be you know a monopoly of just a couple of companies but there will actually would actually be an open source alternative which is indeed super exciting so what went wrong like you would say okay 12 million dollars that probably enough to make a phone but the fact that they didn't reach the goal mean that all of this money was returned to whoever did this donation so because the goal was not reached none of these 12 million dollars that were raised were actually of any use they were all returned which is sad 12 million so just to give you an idea of what this ubuntu phone could have been it's the project name was called ubuntu edge again if you have I don't know 10 years more than me you probably know about the project but let me tell you again it was meant to be convergent also in the sense that you could plug in a monitor and whoa it becomes an actual desktop operating system similarly to what the pine phone is also like trying to achieve the librem was librem phones that has always been the idea it should have been a dual booth with android and ubuntu mobile which makes sense you want to make sure that there's all of the options are to use all of the apps that you probably rely upon for gigabyte of rams 128 gigabytes of internal storage a screen that was 4.5 inches 720 by 1280 which feels very 2013 because this happened 2013 and the price would have been 695 dollars however none of this happened so what did ubuntu canonical do so they again needed to have some phones that you could just buy and make sure that your hardware your software sorry is in them so they contacted hardware manufacturers and my personal guess is that the biggest hardware manufacturers like Lenovo blackberry what were the hardware from manufacturers in 2013 I don't know blackberry totally totally blackberry the biggest ones probably weren't interested in this technology and they preferred something that was done by a super big company such as google with android or ios where they can't have that you get a point however however they managed to get in touch with two hardware makers that promised to deliver phones that were meant to be run with ubuntu touch the first one is bq from spanish and the second one is maizu from china and this kind of worked both of them actually released phones and bq also tablets that were running ubuntu touch and that you could actually buy and use i think currently there are some devices that you can buy of this kind however it was clear that this was not quite the size that canonical or ubuntu were aiming for so what happened is that in 2017 mark got back to being the CEO of ubuntu and evidently some things had to change i guess that these kind of projects were actually putting some financial stress on the company as well at the end there your your product is ubuntu you're not google sadly you're not apple so i understand having to cut back some expenses so they actually killed off both unity and as a consequence consequence the ubuntu touch project these were just five years ago so you you probably remember this and i think that mark actually gave a nice article about why this happened how he was generally sad about this having to happen and to be honest i fully believe me believe him i do think that he was like interested in the project it does feel weird that you know the fundraising was missed by 20 million dollars and he also spent 20 million dollars to get to space but that's irrelevant he says and i want to quote i took the view that if convergence was the future and we could deliver it as free software that would be widely appreciated both in the free software community and the technological industry where there is a substantial frustration with the existing closed alternatives available to manufacturers i was wrong on both counts in the community our efforts were seen as fragmentation and not innovation and industry has not rallied at a possibility instead taking a better the devil you know approach to those firm factors or investing in homegrown platforms what the unity 8 team has delivered so far is beautiful usable and solid but a respect that markets and community ultimately decide what which products grow and which disappear and this kind of was the end of the project as it was led by ubuntu and canonical but this was not the end of ubuntu touch as a whole thanks to the efforts of ub ports which is a foundation actually that was opened in the same year 2017 to continue the development of unity as a whole and to be boards and they've they've made progress as an example ubuntu unity is back to being an official flavor of ubuntu which you can download and use and they've kept going and done a public beta of unity 8 which was currently being worked upon when in 2017 everything was shut down so they have done project progress there's also lately a new variety of phones that run linux and we've got the librem the pine phone but also the fear phone which i totally love and i'm very sad that i never had the chance to buy one these phones run linux very natively which is super cool so compared to 10 years ago we do have more attention i think to the mobile hardware manufacturing linux open community and there's also some more phones that were originally released as commercial android closed source phones that now people actually manage to install linux on which is also exciting but i don't have anything else to say really that was my shook my shock like discovering about the fundraising and about mark blew blew blew my word away i totally did not know about this to be honest it was an exciting journey and i wanted to share so thanks everybody for following along and as always see you tomorrow with yet another video of me doing things tokyo bye


Expert joining us now to discuss what's moving the markets is Melissa Armo, founder and owner of the stock swoosh. Melissa, always great to have you on here with us today. Stocks closing next year after that announcement that we mentioned, President Trump and Chinese officials announcing they have finally reached this phase one trade deal. Are you optimistic we'll actually get something signed in writing finally on paper in January? Hate to be a negative Nellie, but I would be surprised if something actually gets signed in January. Now that being said, I'm not saying that we never sign a trade agreement with China, but I don't think it's going to be as soon as ever expected. It could be though. I mean, they keep talking about it. The markets continue to rally. So I have two takes on this. And I like to look at things based on odds, high odds versus low odds. Okay. So right now, the market is rallying. It's been rallying continually more than I've seen it rally in a long time. We've made more brand new all-time highs in 2019 than we probably ever have, quite an anomaly for the market. So we've had a really strong year. And at this point now, with only a few trading days left, nothing's going to change that. Even if we fell every day from now until the last day of the year, we're not going to break the uptrend. The market looks very, very strong going into 2020, which is an election year. So going into February with all this optimism, if a deal gets done, the market's going to fly. But if a market does not, if a deal does not get done, the market is probably going to sell off in January, which is unusual too, because in January of 2019, we started at the market very bullish, remember? How soon do you think that we need to see the closure of the Phase 2, Phase 2A, Phase 2B, Phase 3, whatever, however many phases we're looking at from here on out? How soon do you think the markets are expecting a completed all-in trade deal? I don't think the markets care about having a deal inked. I think every time there's positive feedback that they're working towards a deal, even if that continued for another 12 months, I think the market will continue to hold well. We have a strong economy, and there's a lot of reasons the market's rallying. There's a lot of stocks in the market's rallying. And remember, the stock market, the SPY, the DAO, whatever you're looking at is made up of stocks. And you have so many things that are hitting up on new highs. Microsoft, Apple, so many things look strong to the close of this area. Even Target, which is typically not, retail sector is not normally as strong as some of these other sectors. They're all hitting new highs. So when you look at the overall market and the strength, the market just doesn't want to hear that a deal is falling apart. If it's pushed off, I think the market's okay with that. But if Trump would put more tariffs on, which remember we pushed the tariffs back from December 15th, which was Sunday, if we put more tariffs on, that's going to seem like that a deal might collapse, and that would create a negative reaction in the market. As long as that doesn't occur, I think whether a deal gets signed in January or not, the market will continue to move forward. And based on earnings come first quarter 2020, and based on a lot of other economic data that comes out in 2020, we have another strong year economics data was so good this year.  They could get better, of course, but it was really good year. Melissa, where does timing play into all this? Because President Trump has the power to move markets with a single tweet, whether it's optimism on the next phase of the trade deal or whatever it may be, especially as we get closer and closer to the 2020 election, are we going to see more pressure, more acceleration of a trade deal as we get closer to that date? Well, that's why I think January is critical, because if a deal doesn't get done, let's say a deal does not get done when it's close to January, the first quarter of 2020, then it's going to be running up into the summer period and into the busy period right up close to the election if it goes on too far past the spring. And then I have a feeling that China may vote in or out to see if Trump doesn't get reelected or Trump may wait it out to see if he can get a better deal for the United States waiting after he gets reelected, if in fact he gets reelected, which I think, again, we're talking about odds. It's high odds right now at this point that Trump is going to get reelected given the market backdrop, given the economic backdrop. I mean, it's just really high odds that Trump's going to get reelected at this point. Melissa, you got your beautiful Christmas decorations behind you. I got to ask you, retail front, are you pleased with what we're seeing? So far this holiday season, is there a retailer, a big name that you're watching going into 2020? Target. Target is my favorite of all here right now. Walmart looked good a couple of weeks ago, made new highs, but it's kind of fallen off here. And now Walmart is not at the highs, and the market is. Target is at the highs. The market's at the highs. Target is strong, had good earnings, continues to move higher. I think the last time we were talking about it, I said 130, it's almost there. It got up to 129. And Target could actually have a move up to 130 between now and the end of the year. It's not that far away. It depends how the market acts, going into next week or even by Friday by the close of this week. But I'll tell you, Target, Target looks so good. And here's another reason why I like Target. Because when you look at Amazon, okay, people are buying things online with Amazon. Target is trying to go really head to head with that. If you've ever bought anything online from Target, you get it like that. They're trying to really compete with Amazon. And Target has the freaking martyr stores too. So if you like going shopping, you like going to Target, and I don't know if you've ever noticed this again if you've ever gone to any Target stores, Target stores are so clean. Target stores are like the cleanest stores I have ever seen in a retail store. They're cleaner than the grocery store some Target. Yeah. And this holiday season, toys are us to some extent being resurrected, powered by Target as well. Just how important is the toys business going to be for Target this year especially? I think toys, electronics, all of that, it's going to be good for Target. Again, people are feeling more optimistic this year. Their 401ks are running up. And even though that's not real money that people are cashing out of, people feel wealthier when they look at the retirement. And they think that it's growing. So they're going to spend more with the quality food. We don't have the number about yet. And we won't for a couple of weeks.  It already was for Black Friday and Cyber Week. Those numbers came out.  And again, that all helps boost stocks like Target. And we still got Super Saturday ahead of us as well. So perhaps that'll work in Target's favor. Melissa, always a pleasure to have you on. Thanks so much for taking the time to talk about it.


The BIM enthusiast since 2007, so an OG for the BIM. I mean, the BIM is very old, but still very old time enthusiast. And he will be talking about a BIM VM for Android following Luke's talk on BIM on the browser, and the Arian BIM on Embedded, now BIM for Android. So let's give it up for Victor. Thank you. Welcome, everyone. So as it was mentioned in the introduction, I have been a BIM enthusiast since 2007. But today I would like to talk about a project that I started last summer. So it's basically half a year's work or a bit more, which is named the Coffee BIM. Let's look at the questions that I would like to answer today. First, I wanted to know how the BIM file actually works. So that was my main motivation. I was really curious how to get it running. And also I found it a use case that why not run the BIM files on Android in a very, very simple way. So you should imagine a lightweight BIM execution environment. So I wanted to skip all the different stuff which can be issues on Android, like getting the right privileges for running the files or using some scripting layers to provide a base foundation for the BIM and also to just make it work in a simple way. So I thought that this should be possible. Let's see later if this is possible or not. What do you need to make it happen? So what are the building blocks that you can use? How these parts fit together? So I'm talking about the Erlang part, the BIM part, but also the Android part. And last but not least, how can we ensure the communication between the phone and the Erlang VM? Yes, so this seems possible, what I've done, but different, quite a lot of ways. If you are using Erlang to build Android applications, this coffee beam execution environment basically ensures that they are robust. That's quite OK. So it does what you expect from a BIM file. So it understands the basic Erlang mechanism and also being a functional programming language that functions with the same parameters will give the same result. Also, it is concurrent, so processes are supported. You can start as many processes in the VM as you want. Scalable, well, this is not yet implemented, but it may be doable. So for real time, it just depends on the capabilities of your Android device. Let's see a short demo. What I've made, this is basically the tic-tac-toe game built on the coffee beam VM. And in the background, there is a BIM process running the game logic and also managing the computer intelligence. If you're watching online, you should find the link to this video at the topic description. So I'm playing with the X. The computer is within the circle. And as you can see, the BIM intelligence is working on the mobile phone, providing the next steps to the computer. So it seems possible, but what do you need for that? To make it work, first, basically, you need to get Android to understand the BIM file. As the main language for Android is Java, there are also many other ways to do this, like Kotlin or C++ and things like that. I chose Java to understand the BIM file. Also, you need to load the BIM in an Android way, because this is not as simple as a usual file system on your PC. There are special privileges that you need to access files. And also, in this project, you want the BIM files to be presented in the source code integrated into the Android, basically, as a library or as a resource that you can reuse. What I wanted to avoid is to recompile the BIM files in a special way that it will fit Android. So these BIM files basically are runnable on every PC as well. You need to create a VM, for sure, that executes these BIMs. So that should be a logic on executing the parse BIM file. And also, you need to provide a way of communication to interact with the Android. This is a different approach. And what I chose is to use high-level structures in the VM implementation. So I didn't want to manage the low-level memory or optimize for low memory usage, managing the bits and bytes, because in an Android phone, you have plenty of memories. So it's not a bottleneck. The more the bottleneck is the CPU power. So if you are using a lot of CPU, then it will shorten your device's lifetime. How these parts fit together? Basically, you have the VM written in Java and also compiled into a JAR library that you can use. So the green boxes are what you can use for free, what you get for free. You need to add to this library your own custom BIM files that you pre-compiled and insert the whole thing into an Android activity. I will talk about this later. And also, you have to have a BIM client or a customized BIM client, which has the purpose of managing the VM itself and also handling the communication between the VM and your Android application. When everything is ready, you package it into an APK and you have a deployable Android application using Erlang on your phone. The BIM client is partially implemented in the VM itself. So you get a BIM client class, which provides the basic functionality, like starting and stopping the VM, also loading the BIM file and applying custom functions, which are basically translated into Erlang function calls. And what you need to implement yourself is to provide input for which functions and which arguments to apply and provide a way to handle the results of your function calls and also to implement callbacks for your custom function calls from inside the VM to the outside world to the Android. I promise you that this will be the most complex slide for today, for this talk. Let me just show the behavior of this tic-tac-tac game what I implemented. So you first start an Android activity, which is basically a way of creating interactive applications. You can imagine activity as a Java class, which has the functionality to interact with the user, getting the GUI elements together, and also managing the process in an Android way. So it provides GUI processes and other processes as well. So you can imagine the Android activity as a simple application. From this Android activity, you can call the Beam client or the customized Beam client, which you have implemented, to apply a function call to the VM. Basically, you provide strings, like the module name, function name, and the argument list, which is a special type that is implemented in Java in order to understand the Beam structures. The tic-tac-tow game will start. The internal error function call is tic-tac-tow start, which returns the PID. This PID is transformed back as a function call back inside the Android. So you have the game PID, which you can refer to. This game PID is basically a new process that is started inside the VM. You press the New Game button, then it will also apply a function call starts a new game, and the game process actually sends updates, repeatedly, to the Android VM with the custom function call Beam client update. How to handle this update function is basically depends on how you write the Android activity. In this game, this update contains the information about the game, the board, the current state of the board, and what action or event has happened, like the player or the computer has placed a sign on the table or the board has changed, someone has won, someone has lost, or the game will end in a draw, like in the video. Also, when you click a field, it invokes, in the same way, function apply MFA, tic-tac-tow put, then a board update happens, and also they put player events, so the player has put their sign on the board, then the computers turn, this also updates the board, and after many, many iterations, you will end up with updating the board with the event like draw, win, or loss. So this is basically the game communication, and the game logic is fully implemented inside one Erlang module in about 200 lines, this is the game flow and the computer's intelligence, and also there are some special callback handling which are written inside the Android activity in Java to handle this functionality, but the VM is untouched, so the library that is provided by the CafeBeam VM, basically you can use it as is. This is a public project, so this is the GitHub address, where you can check the source code, and also I will encourage you to contribute to this as well because there is a lot of work to be done, like future plans, IO handling, this is not yet implemented, also it is a big question how to handle IO in Android because you usually don't have a mechanism to fetch or view the log files, or you don't have a terminal screen where you can examine the results of function calls, so you need to handle it in a different way. Also, file handling is a bit tricky in Android, so there are a lot of questions in that. Network support, it would be really good to have a cluster of Android phones working together as nodes of one distribution group. This is still a dream, but I hope it will come in the future. Node management, otherwise number handling, of course Java doesn't support the big numbers as a built-in type, so you have to implement the mechanism yourself based on what has been done already in Erlang handling big numbers, and also there are lots of biffs built in functions that are still need to be implemented or to be reviewed. And for the end, some useful reading, so these were the sources, which I used to understand the beam and get more detailed picture on how beam works, and which I used basically in the coffee beam via implementation. So we have a lot of time, so we have more time for questions. Thanks for your attention. Yes? I'm assuming that you went to beam wisdom that you're, did you look at Erlang, which hasn't been updated in a while at all, or was this like a from scratch implementation? Yes, so the question was, if Erlang was an option, or if I have looked in the source, as mentioned in the beam wisdoms, yes, I studied the solution. This is a common question, so I put up this into a slide. I have examined a lot of different options, one of them was Erlang. Why I didn't really use this implementation is that, yep, some parts were really nice and really useful, for example, in handling the different Erlang types. I didn't take the code as is. I had to make some modifications, but of course I wanted to use it in a different way. So using the meaning of the types in understanding beam files, but not in recompilation of the code, so that's why Erlang, as a complete option, was not considered. Any other question? Yes? Specifically, if you're doing Erlang or Android, what separates? Please clarify the question. I have, if I'm not mistaken, Erlang, the beam can be cross-compiled for Android, and so routed devices can do that pretty easily. What makes it more complex for non-routed devices? Yes, so basically beam files are files. The question was that, what makes this beam file handling more complex on Android phones? Although there are some cross-compilation functionalities that you can use. Basically, beam files are files, so you have to handle them as binary input, as accessing file on a file system, which is not always easy on an Android phone. You have to get the resources or get access to the resources into the directory where this file is located, and this is sometimes not so easy. And also, in this solution, you can basically use a pre-compiled beam and put it as a resource inside your custom application without changing the original content of the Erlang source, from which this beam file was compiled. So that was my goal. Yes? Yes, I have a lot of different test cases, basically using the Ant Framework or compiling the Java code, creating the JAR library, but also there is a test module where you input a lot of Erlang expressions and have an expectation on the functional results, and this is how it is tested. This was also creating new processes or checking how the more tricky parts in the VM are handled. So the Ant Framework is basically the answer to what you use as a framework. Sorry. We may need this. Thank you. Thank you.


It's time to get started here. My name's Jeremy Green and I'm talking about going serverless. So what do we mean about, what does serverless mean? That's kind of a weird term. The idea is that we want to deploy web applications without servers. So I'm going to go out on a limb here and do a little bit of mind reading. I bet some of you are thinking a very particular thing right now. Are you thinking serverless, really? Come on, if you're going to serve something, you need servers, right? So if it'll make you feel better, we can think of it like this. We'll call it serverless with big old air quotes. So the goal here is that, yeah, there are servers involved. But we don't want to think about them. We want to think about our code as code and not worry about the particulars of the infrastructure that's being deployed to. If you've deployed to something like Heroku, you already kind of know how this works. You, on Heroku, you're not really thinking about instances. You might be thinking about your dino size, that kind of thing. But you're not thinking about the physical infrastructure that it's running on. You're just coding your stuff and pushing it up and letting Heroku worry about what machines does it go on? What instances does it go on, that kind of stuff? So that's where we want to get to. And in particular, in this talk, when we talk about serverless, we'll be talking about the serverless framework. The serverless framework is a framework for building web, mobile, and Internet of Things applications exclusively on AWS Lambda, API Gateway, and their other related services. So, a little bit more mind reading here. I bet a few of you noticed that word exclusively on the last slide. And you're probably thinking this, vendor lock-in. So the cons of vendor lock-in are pretty obvious and I'm not really gonna get into them. So why would you sign up for this kind of vendor lock-in? The most compelling reason is ops. Amazon is better at ops than you will ever be. If you disagree with me on that, please talk to me and we can put together a nice fact-insulting proposal to help Amazon be better at ops, but that's unlikely. So this is especially true if you're an application developer and not an operations engineer. Another one is scale. They have data centers all over the world. By deploying into their infrastructure, you can take advantage of their scale with very little work. And another compelling reason is money, especially when you compare the salary of operations engineers. Deploying into Amazon's infrastructure can be very cost effective. So just a little bit about me, my name's Jeremy Green. I'm a consultant, an author, and I run a couple of SaaS businesses. You can find me on the tweets at JaggedTheDrummer. There's my email, send me an email if you'd like. The Independent Consulting Manual is a book that I recently co-authored. Remark.io is one of my SASSs. And I'm also into drumming, photography, and brewing. So if you like any of those things, we can talk about that. I wanna give a shout out to my client ClickFunnels. They've supported me in this talk. Working with them is where I got into all the serverless stuff. They helped me get to the conference. They've been very supportive. I really appreciate them. So I don't wanna get too deep into the weeds of what they do, but I've prepared this very technical diagram of their infrastructure. All right, so enough silliness. First, let's talk about the pieces that we're gonna be dealing with. We're gonna be using some building blocks that we're gonna build up into bigger applications. So the first piece is AWS Lambda. This is basically function execution on demand. I think of it like Heroku for single functions. You give them one little function, tell them how you want it to be run, and then you can call that function either via their API or they have this service called API Gateway, which allows, this is kind of like routing as a service. So this allows you to set up endpoints. And then when somebody hits that endpoint, you can route that request to be handled by Lambda. You might use DynamoDB to store some data or you might use RDS or any of their other services that they offer. And then CloudFormation is kind of infrastructure as code. This is a way that you can describe assets that you need in your infrastructure like a Dynamo table or an RDS instance. You can keep that description in your source code repository and then you can push it to Amazon and ask them to deploy this stuff for you. So this makes it really easy to have like a staging environment that you can duplicate into production and you know that you're using the same stuff across all of your stacks. When you put all this together, you're gonna end up with something that looks kind of like this. You're using multiple Amazon services to route requests around. And they give you a lot of tools where you can do this. You can get into their UI, see a list of all your Lambda functions. You can browse their repository of demo code that shows various applications, various things that you might do.  You can hook it up to an API endpoint. You can add an event source from some other place. But if you do all this for very long, you're gonna start thinking seriously, am I coding in the browser? Is this what we've come down to? And then if you do that long enough, you're gonna go through a cycle, something like this.  Then you're gonna start to get worried about the number of things that can possibly go wrong when somebody's just making changes in a browser and not committing anything to source code. And then if you keep down that path, you're gonna get very angry. So don't do this, this is where the serverless framework comes in. The serverless framework allows you to manage Lambda API gateway and other cloud formation services via code instead of via GUI. You can find their docs at docs.serverless.com. It's all pretty good. I should go ahead and say that this is a very young project and is moving very quickly. So everything that I'm gonna talk about and show you in details could change by this afternoon. Probably not, but just be warned, it's very young. So when you get started with serverless, the first step is you wanna create a new AWS account. You don't wanna use the one that you already have up and running for all your production stuff. And the main reason for this is that the serverless documentation at this point advocates that for getting started, you should create basically an admin super user that can do anything and everything in your infrastructure. And so that's kind of a security risk. You don't want that profile to get into the wrong hands where somebody can start shutting down your production instances or deleting a S3 bucket or something like that. So really seriously, just start with a new account and then as you figured out what you actually want to deploy into production, take time to understand the permission model and do it correctly. So to get started with serverless, it's an NPM module. My apologies to Searls and Tenderlove for having to talk about Node, but I'm fully on board with making Ruby great again. So we'll look at how we can do Ruby in a little while. So once you've installed it, you can do serverless project create. The CLI gives you a nice shorter version of serverless. You don't have to type out the whole thing. You can just say SLS if you want to. And then the first thing you're going to see is some sweet ASCII art. So that's how you know it's good, right? So then it's going to start stepping you through the process of creating a new project. It's going to ask you to enter a name. It's going to ask you for a stage. And a stage in the serverless terminology is a lot like an environment. Like if you're used to development and staging and production environments, it's almost exactly the same thing. It's just called a stage. It's going to ask you what profile you want to use if you want to create a new one or use one that's already there. And then it's going to ask you what region you're going to want to deploy your stuff to. After it does a little bit of stuff, it's going to finally tell you, okay, your project's ready and some things have been deployed to cloud formation. If you go into the directory that's been created for this new project, you're going to see a tree that looks about like this. All of this stuff that you're seeing in the Rails world is going to be stuff like config.ru, config slash application.rb. A bunch of just bootstrap boilerplate that needs to be there to get the thing to run, but that you probably don't really care about until you need to make it do something that it doesn't do out of the box. So we're not even going to really mess with looking at any of that stuff. So let's build something. But if we're going to build something, the question is, what do we build?  So how about we do this? I mean, there's an MPM module for it, right? So that means it must be useful enough to be a service. So first thing we're going to do is serverless function create, give it the name that we want, left pad. It's going to ask you to select a runtime. In this case, we're going to go ahead and use node for three. And then it's going to ask if you want to create an API endpoint or an event or just a function on its own. In this case, we're going to actually create the endpoint so that it's easy to get deployed. If we look in the directory that's created for us, we have three files. Event.json is basically where you set up sample data that your function is going to use. Handler.js is the function itself that you're going to write. And sfunction.json is some configuration for the lambda, for the endpoint, for any other resources that you need. So at this point, it's already ready, we can ship it. And this is part of the workflow that you're going to use with serverless. You can't exactly run lambda and API gateway on your local development box. And so you're going to be constantly shipping stuff to Amazon in the dev stage, testing it out there, and then when you're ready, you can promote it into your staging stage or production stage or whatever. So to deploy, you can use serverless-deploy. Dash is short for dashboard. It's going to give you something like this, more sweet ASCII art, and then a list of all the things that you can deploy. Here I've selected that I want to deploy the function and the endpoint, and then hit the deploy, and it goes and starts doing stuff. And it tells you that it's deployed the function into the dev stage, and then it's deployed the endpoint into the dev stage. And then at the very bottom there, you'll see it gives you a URL that you can hit where you can see your function running through the API endpoint. So if you go hit that, you're going to see something that looks like this. It returns a JSON blob that has a message, and the message is go serverless, your lambda function executed successfully. So let's look at what does the code look like that generated this? This is the default handler that serverless generates for you, very, very simple. It exports a handler function. The function has three arguments, an event, a context, and a callback. And then for the default one, it's just calling the callback with the payload that we want to deliver. So the event, the event is just a JSON object full of data. This is something that you as the developer or whoever is calling this function is gonna put together. These are the inputs that go into the function that you want to have worked on to create your outputs. The context is an object that's provided by the Lambda infrastructure.  One of the most important things is get remaining time in milliseconds. So this allows you to do some things that are kind of long running as long as you can pause them so you could be iterating through a bunch of records and then be checking this to see how much longer you have until your Lambda is forcibly killed. And then you could write to the database, here's the last one that we did on this run, and then queue another event. You can also get some stuff about the identity if you're using some of the AWS authorization methods. And then if it's being called from a mobile device, you can get some client context about what's the device, what's the operating system that's running, that kind of stuff. And so then finally you have the callback function. This is also handed in from the Lambda infrastructure. The signature of it is that you call the callback passing in an error and then the data. This is fairly standard node callback structure. If you need to only return an error, you can just return the error, but if you need to return actual data, you should return null for the error and then return your data. So now let's get this function actually doing something. So if we go into the left pad directory, we can do npm in it, and what's happening here is we're creating a local node modules directory and package.json so that we can have additional libraries that we wanna ship with our function. Everything that's in your function directory is gonna be shipped to Amazon when you do serverless-deploy. And then we can install left pad and save it so that it gets added to our package.json. So then we can start updating the handler. So the first thing we wanna do is require the left pad library. This is happening outside of the handler instead of inside the handler because everything outside the handler is run once when Amazon first launches and tries to run your Lambda for the first time. So anything that's like a, it's gonna take some time and is not part of the actual processing of your inputs to generate your outputs, you wanna do that outside. This is setup stuff. So then the next thing we can do is declare a couple of variables where we're gonna pull data out of the event that is passed in. And then we're gonna create a padded string by calling the left pad function that we get from that npm module. And then we're gonna construct a payload that is let's just return the padded string as a JSON object. And then finally we're gonna call the callback with null as the first argument because we didn't run into an error and then the payload as the second. We also need to make some adjustments to sfunction. This is all of what you're seeing right now is automatically generated by serverless. This is where you can tell Lambda how much memory you need for your function to run. You can also set what the timeout is, that kind of stuff. And then the handler line there, you're giving it the name of the handler that should be in vote. And that is constructed by the name of the file that it lives in and then the name of the function that's being exported. So in this case, and by default, it's gonna be handler.handler because it generates a file called handler.js. And then inside of that, it's exporting handler as a function. This stuff is also auto-generated when you go to create your function. I told it that I wanted it to create an endpoint. So it generated, says there's a path called leftPAD.  That's how you're gonna invoke this function via the gateway. You're gonna be doing it via get. You can use all of those standard HTTP methods here. It could be get, put, post, delete, even options. And then there's a request template. And by default, the request template is blank. And this is basically how you tell API gateway how to generate the event that you want based on the HTTP request that comes in. Because your Lambda function doesn't know anything about HTTP. It's not a native HTTP function. It just gets an event object. It doesn't care how that event object is created or what. So you need to tell API gateway how to deconstruct an HTTP request and create an event that can be used by your function. So in order to do that, you can add a couple of lines that look like this. So what we're saying is that we want to create an event with two properties. One's called string and one's called padding. And the string event should come from the input params of the HTTP request. And it should be the param called string. And then the same thing for the padding. So once you've made all those changes, you can dash deploy again. And again, it's gonna give you a URL where you can hit it. And so then if you call that URL with a couple of query params that look like this, string and padding, it's gonna return a padded string, pad it out to the 10 spaces that we want it to be. So how do we test something like this? Like I mentioned, the function is just a function. So it's really pretty easy to test. You test it just like you would any other vanilla function. You don't need to worry about the Lambda stuff. You can, or the API gateway stuff. You can just test the function itself. So we can install Mocha to drive the tests. And then we can install something like Chai to give us some nice assertions. And then we make a left pad slash handler test. And we require Chai, require the handler file that is under test in this function. And so then we can just create, this is basically a mock event that we're gonna pass in to the function in order to test it. The context, we're not using any of the context that Lambda supplies to us in this case. So we can just make it an empty object. And then for the callback, this is where we can do assertions on the return value that we get out of Lambda. So we just make a function that has the same signature as the callback that Lambda provides for us. And then once that's called, at that point we can say that we expect the error to be null because we didn't expect to get anything. And then we can say that we expect the response dot padded string to equal the value that we expect to be returned based on what's in the test event. So then once you've got that handler in place, or that test file in place, you can just call mocha handler test and it's going to run it, show you that it's returning the right thing and that it's been successful. So what about Ruby? I mean, that's kind of a bummer that Ruby is not supported right out of the box. But we can do some things to get it to run. What I'm gonna show you here is all at the proof of concept stage, it's not production ready. If you want to do Ruby in Lambda, you're gonna wanna harden it a little bit, make it a little more resilient to errors, crashes, that kind of thing. So what I did here was serverless function create and then called it mruby hello world. I added two additional files into that directory. One is a Ruby script that's gonna run some Ruby code. And the other one is the mruby executable itself. I used mruby on this because I had found a proof of concept that Nick Caranto put together previously that was using mruby, so I knew it was compiled and would run on Lambda. AWS does publish what operating system and AMI image that they are running the lambdas on. So if you do need to compile stuff, you can fire up an EC2 instance, compile new stuff there and then add that binary into your package. You're probably gonna wanna make sure that you statically link everything because they don't provide a whole lot of stuff in the default image. So since Lambda doesn't support Ruby right out of the gate, we kinda have to get it to work in a backhanded way. We have to write a node-based handler that then shells out to Ruby to let it do what it needs to do. So to make that work, we're gonna use the spawn library, I'm sorry, we're gonna use the child process library and in specific their spawn function. To create our process, we're gonna call spawn telling it that we wanna use the mruby executable that's in the project directory and that we want it to run handler and that it should pass in a JSON stringified version of the event. This lets the Ruby script know what the inputs are that we got. We're gonna hook up a couple of handlers for any time that the Ruby script puts anything on standard out or standard error. We wanna capture that and push it into an array so that we have all of our outputs. And then we wanna say that when that child process closes when the Ruby script is done running, at that point we want to call the callback function that we get from Lambda so that we can tell Lambda that everything is executed and that we're done. So for the purposes of this demo, this is a very simple handler.rb. All we're doing is a couple of puts to output some data. And so then if you call this one mruby hello world, you'll see that we get back an object that has the message, one message that came from our node handler itself and then the Ruby output which is an array of all of the data that the Ruby script put out to the command line. Like I said before, this is not production ready. There are numerous ways that you can improve on this to make it work, but it does work and is a proof of concept that you can use Ruby with the serverless framework in Lambda. So how fast is all of this stuff? It's really reasonably fast. So this is a chart of the API gateway timing. That baseline down there at the very bottom is about 30 to 40 milliseconds. And that's the entire time that a request coming into the API gateway is inside the Amazon, inside the Amazon infrastructure. That's from the time it hits the API gateway, is routed to Lambda, Lambda executes, Lambda returns, and then the response is returned out of the API gateway. But there's some pretty big spikes there. They're going up to like 650 or 700 milliseconds. So what's going on there? That's what Lambda refers to as the cold start penalty. And so basically any time that a request comes in and AWS doesn't already have a Lambda function or a Lambda spun up and ready to accept a request, it's gonna go through the cold start process. That's basically them provisioning a container, loading your code onto the disk in that container, and then calling your handler, getting it started. So that takes a little bit of extra time. And the cold start scenario can happen either when you just push new code and are calling it for the first time, or if you start to get a lot of concurrent requests. So like you'll have one request come in, cold start happens and it's handling a request. And then if another request comes in before that one has completed, you're gonna get another cold start and then you're gonna have two Lambdas running. By default, you can run up to 100 Lambdas concurrently. And if you need more than that, you can apply it to AWS to have your cap raised. So I set up RunScope to just time these two things from outside of the Lambda environment, or the AWS environment. And I was consistently getting about this, average response time of 70 to 75 milliseconds with the M-Ruby one being consistently about five to six milliseconds more time. And so this is going over the wire, getting into the AWS infrastructure and getting back. If we look at the timing for the Lambdas themselves, they look about like this. The orange one is the M-Ruby, and the blue one is just a vanilla node-based Hello World. We can see on this that the M-Ruby one is consistently about four milliseconds slower. The baseline on the node one is about half a millisecond of runtime. This is only in Lambda itself. This is not including the API gateway or any network effects. This is just the sheer execution time of the handler function itself.  It is not everything. So if you need everything that Ruby provides for you, you're gonna have a larger executable.  In the Lambda timings, you can see cold starts there as well, even though this doesn't include the time that your code is being loaded onto the disk, it's the first time that your code is being run, so it's the first time it's being loaded into memory. And so that takes a little extra time just in the Lambda execution itself. So to wrap this up, AWS provides building blocks. They give you Lambda, API Gateway, all of their database services. Serverless provides some structure and process on top of everything so that you're not coding in the browser or trying to manipulate their APIs directly yourself, and then you provide the magic. So thanks.