Today, we are joined by Aaron Braswell, who is one of the infrastructure developers here at the Center for Open Science, and Tim Head, who is the developer of the OSF-CLI tool and also the head of Wild Tree Technologies. My name is Ian Sullivan. I'm one of the trainers here at the Center for Open Science, and I'll be handling the switching today. So, if you want to follow along during a course of this, all of the files for this webinar are available at the following URL. That's just one of our OSF projects that has this particular presentation, a link to Aaron's iPython notebook that she'll be going through in just a little bit, and we'll link the video and other materials there as well. So, feel free to open that up and follow along if you want. It'll also be sent to you along with the link to the video when it becomes public. So, I work at the Center for Open Science. We are a nonprofit running out of Charlottesville, Virginia. Our mission is to increase the openness, reproducibility, and integrity of scientific research, and that's research sort of broadly, whatever your field or discipline. We want to make things easier for you. We do that in a couple of different ways. Internally, we're organized into three teams. We have a meta science team that runs replication studies to try and identify key issues in reproducibility and best practices across multiple fields. We have a community team. I'm on the community team. We run events like this and reach out to individual researchers and teams of researchers to try and spread some of those best practices around and showcase some of the efforts that people are making to improve transparency and reproducibility in their research, all of which is made significantly easier and much more possible by our infrastructure team, which is the largest team here at the Center for Open Science. Their mission is to build tools, most specifically the open science framework, that make actually implementing these best practices possible for people in the community and make it as easy as possible for that to happen. So the big effort there is the open science framework. The open science framework is both freely available and also an open source free software project, the code for which is available online. This is important because this part of how we see pushing our nonprofit mission is to make both the infrastructure and the actual operation of it freely available. So in addition to the core software as we run it, we've also built a free API, which is available for other people to interact with it. The OSF is designed to support all of the different stages of the research life cycle from searching for new ideas in the literature to collecting data, interpreting findings, publishing a report. This is a lot of steps and we know that there are a lot of other tools that are out there that people are using for individual portions of this research life cycle. And part of our strategic goal with the OSF is to be a way to tile these things together so that whatever tools that you're using at different stages along the research life cycle, the OSF can be the central dashboard for your project and a way to integrate all of those efforts into a coherent whole. And that means that we are not trying to be better than all of the existing tools that are out there for each stage and we're not trying to be more GitHub than GitHub, but we do want to give you the option to both have a tool like the OSF that's freely available and connect as many of those other tools as possible to the OSF. And we do that through the API. The API, just like the Center for Open Science, integrates in a couple of different ways. We have applications, add-ons, and user scripts. The OSF is actually an application that makes use of the OSF's API. The web interface that you see when you go to osf.io, portions of it talk to the API directly. That's direction of the development is to make the web interface something that talks to the API directly. There are some other applications out there like JASP, PsychoPie, that are external applications for statistical analysis or experiment operation that talk to the OSF via the API in order to store your scripts or run analyses on your publicly available data. We've also implemented a number of add-ons, which are bridges between the OSF's API and the API for various publicly available web services like GitHub and Zotero and Google Drive. And we have user scripts that you can use or write in a couple of different languages. There are libraries for Python and R that have different levels of functionality, and those are ways of implementing our public API in language that you might be familiar with in order to make interacting with it easier. We also have the OSF CLI, which Tim will be talking about a little later in this presentation, which is sort of an amalgam of an application and user script. It provides a Python library for interacting with the OSF, but it's also a standalone command line client that you can use to integrate directly into your sort of experimental workflow without needing to write your own scripts in either of those available languages. So with that, I'm going to pass this over to Aaron Braswell, who's one of our infrastructure developers here, and he'll be presenting the API. All right. Thank you so much, Ian. I'm going to be sharing my screen here with everybody. So as Ian said, I'm a developer here at the Center for Open Science. I've been here for just about three years, so I've gotten a chance to see the Center for Open Science grow in both size and also mission. We've gotten to do a lot more cool stuff as I've been here, which has been great, continuing to expand into those parts of the research lifecycle, which has been fun. So I'm going to share with you a presentation on how just very basics on using the OSF API, and it's going to be in a format called Jupyter Notebook, formerly iPython Notebook. I guess they're expanding beyond just Python, and now their name reflects that they're both Julia and Python. It's like a... Anyway, I think it's funny. So Julia is another great programming language as well. So this is going to be covering some very basic things, starting with just querying the API for publicly available information, and then moving on to a more fully fledged example, which will be creating a project, parsing through the information that you get back from the API when you create that project, and then uploading a file to that project. So to start off, if you're ever interested in reading way more about the OSF API, we have a pretty new version of the OSF API documentation, which is available at developer.osf.io, and this has kind of a broad overview of all of the endpoints on the OSF API. There's a lot of information here, so it's good if you're going in with one specific thing that you would like to know more about. So in my presentation, I'm going to be focusing on the nodes endpoint just because it's a nice and simple one. So we call a node, it's kind of an overarching name for a project, and so this API documentation will give you an example of all of the different attributes and relationships, and just all the information available on each endpoint, as well as an example response that you might get back from the API, just so you know what to expect. So with that, let's go into seeing some of those examples. So we're going to start querying the API for some publicly available information, and the first thing we're going to do is just do some Python imports, and we're going to define a little helper function that will make it easy for us to print out the results we get back from the API. So you can see we're just setting our URL as api.osf.io slash v2, which is the URL for the API, and also just a little function to help us print out the results. So as I mentioned before, we're going to start by accessing the public nodes list. So we're going to request the API endpoint for a list of nodes, which is just the term we use for a project. So it's like kind of the container that holds everything in a project. So here we go. So what we're going to do is go to that osf api URL plus nodes, and then see what we get back. And so this response looks a lot like the response that we got back from that was shown in the API documentation, which is good. So it's exactly the same thing as we would get if we actually went to that URL in just a normal browser. We have documentation also. It's called like a human readable API version. If you just go to it in your browser, you can also just see the JSON format, which is good as well, I think. Yeah, there we go. So if you just want to look at pure data, you can see that as well. But if you just go to the URL in your browser, you'll see kind of this human readable printed out format of all the information that's available there. And I am logged in right now. But the great thing about this is you don't have to log in. You don't have to provide any credentials. So it's a good way to just get started playing around with the information that you can get back from the API. So this is a lot. So what we're going to do is just print out just the different sections of the first result that we get back. So we have relationships, which is just links to other more expanded bits of information. We have attributes, which is things like title, description, and a lot of like little metadata type things. Type ID and links and we'll get to those later. So let's go ahead and look at some of those attributes. So we're going to go ahead for the first results. We're going to print out the titles. So this is live. So actually don't know what's going to happen, which is always fun. Hey, those look fine. Okay. So these are the most recent 10 titles of the public projects that were put on the open science framework. So some of them are pretty general like surveys or materials. We have we have people using it from all over the world. So there are a couple international results as well. It looks like open science community research is on there too. So I don't know if that's one of the one of our the Center for Open Sciences projects, but that's one thing I like is that we tend to use our own products as well, which is kind of nice so that we can kind of also function as a bit of quality assurance. So if one of us has something we'd like to use, then we can get that through the process quicker. And so we can also filter these results. So if we're interested in narrowing down our results a little bit, there's a whole bunch of different filters that you can use. We're going to use the tags filter right now. But if I go back to the documentation, there's a list here of all of the different terms that you can filter by. So you can filter by title, category, description, whether or not it's public, the tags that we're using, the date created, date modified, and then a couple other things. So let's go ahead and add to that. We're going to filter by the tag climate and then see what kind of results we get. So this is just printing out the title of the result that we get and then a couple of the tags that are associated with that result so we can just verify that that's what we're getting. So yeah, these look like they're related to climate. And you can see climate is in the tags there as we go along. So you might have noticed that we only get 10 results at a time, but there are way more than that, especially for if we just do a general node search. So the way, there are two ways that you can expand the number of results you get back. Number one is you can just paginate through the results. There's links provided at the bottom of every results page that will let you paginate. So let's go ahead and do that first. So we're going to search now for any title that has the word fish in it. So the first thing we will do is take a look at that links section. So this will print out the links section. So you can see that there's a link for the next page which already includes that filter for you so you can keep your results going. Also gives you the number of results it returns per page and then the total number of results that you have. And so this goes ahead and also just queries for the next page. So you can see this is what the links section from the next page looks like. It has the next URL which is looking for page 3. There's 10 results. There's 40 but it also has now it has a link for the previous page which is the one we were just on. The other option for getting more results would be to add the page size parameter to the query. So this time we're going to search for anything that has science in the title and we're going to request 30 results at a time and then we'll take a look at that links results. So you can see it says total is 724 and per page we have 30. So now we can go through bigger chunks at time. And the maximum number of results available to request at a time through our API is 100. So if you do anything over size 100 it'll just still give you back 100 results at a time. So I mentioned before that one of the results included with each individual node or project is relationships. So you might notice that if one thing you might notice when you're going through API is there's a lot of you get a lot of links to other places in the documentation where you can expand on that information. And all of this is it's mostly conformed to what's called JSON API. And it might look a little bit strange because there's just you know you see contributors and you would expect a list of contributors but instead it leads you on to another URL to follow to get more information about that. So it is mostly conformed to JSON API which is a nice kind of template to start from and it's a common format that's used so that folks who are familiar with this format can just kind of know what to expect and it's easier to share this convention rather than just inventing some things. We wanted to go with a community standard for our structure over API. So going back to relationships so what we're going to do is take a look at the results, the first results and then take a look at the contributors relationship and then follow that contributors relationship and then print out what we see there. So the first thing we did was print out the contributors relationship and we can see that it is a JSON object with links related in an href and that href there is the URL we can follow to get the more information about the contributors on this particular node and so then we'll go ahead and follow that relationship and see the kinds of information that we have. So we have this is about one particular person and so we see that we can get a list of their nodes. We can get a list of the institutions that they belong to. We can get some attributes about them so their first name this one's for David Miller who's also a he works in the meta science part of the Center for Open Science and just the information that he's provided here. So GitHub username links to various other online presences and then also a link to just this page the self link which is just a link back to the more information about this particular person. So there's the relationships and a little bit about why things seem to be a little bit really nested it's because it's following this JSON API standard. Okay great so now we're going to walk through a more slightly more complicated example. This would be creating a project and then uploading a file to that project using API. So the first thing you'll need to do is create an API token and you'll do that by visiting your settings page on the OSF and then on the right hand side let's see if I'm lucky yes okay on the right hand side there'll be a personal access tokens a left hand side personal access token section and you can go ahead and create a new token and then tell it what kinds of permissions you would want. So you would do like full read and full write probably for this. We'll go ahead and discard one because I have that already. So now we'll move on. So this is where I'm going to define my token and also the API URL I'm going to be using. So I'm going to be using a staging OSF API the links on the tutorial that are on GitHub are to the main API. So these examples are making a private project but if you change the parameter to be public then just be aware that anything you make using this example that you find on the GitHub page will make a public project so just keep it private if you're just testing out or if you don't mind let's find two. So this is setting your your API token and also what URL you would like to make requests to. So I'm also going to just just to make the code a little bit cleaner I'm going to define a few helper functions. One is to make a post request for us so it's going to just format the headers of the request in the way that we'd want including content type and authorization which has the word bearer and then our token in it that can be kind of a kind of tricky sometimes when trying to make authorized requests to the API. So this is just so we don't have to write all that again which is nice it'll just post our post our data for us using that helper function and then we'll also do something really similar for a get request not that we actually need to authorize a get request but it's nice if we're if we authorize our request then we can get back our private projects as well which is something we might be interested in and then also just a put request helper which is for put requests are used for like updating specific specific endpoint usually. So very similar things just slightly different methods formatting our headers with our OSF tokens. So now we're going to define a Python dictionary with the data that we'd like to use for the node that we're going to create. So we're creating a node so it has to be type nodes and then these are just some attributes of the node that we're going to do. So we'll do test project for webinar that'll be our title and this is a test node created as an example we can just keep it at that. And it's public it's not public so it's private public false and it's a project so we'll go ahead and save that particular dictionary as our node data and then we're going to go ahead and use our predetermined helper function to post that request and then print out the information that we get back if you don't think we need that. Okay print out what we get back. So it looks a lot like the data that we saw before so when you post when you post to a node when you post to the nodes endpoint to create a new node it will give you back exactly what it created so it gives you back that node information with all of the gives you back that full node detail view of the node that you just created. So we can actually use that node response to follow the files relationship and then get that files link in that files relationship. So I can show you if we go to the node list and we look for files there we go it's the first one the files relationship so this is the link that we're going to find on that node that we just created and so this files thing files link leads you to this node providers list and as Ian mentioned before we actually connect to a bunch of different storage add-ons and osf storage is one that's included on every single node by default but in this list of the providers you'll also see if you have github or dropbox or google drive those will appear right here along with osf storage in this link in this list of file storage providers. We've got one question here. Philip asks what is the difference between the normal API and the staging API? Oh so the staging API is just where we are constantly adding new features and testing things and it can go down a lot and it can be unstable so it's just basically a internal test environment for our qa to use before we release a feature out to the to the production stable version of the osf so that's all it is it's just kind of a place where we can test things before releasing them and since I'm just creating a bunch of example projects I'm just adding them to staging so that I'm not cluttering up my my real osf account okay so we're going to go ahead and oh that's what that other line was for it was like why why didn't I come okay that makes sense I shouldn't have come into that all right take two try that again so now this is the response that we'll get um when we follow that file link uh relationship very similar to the list of providers over here so um we're going to go through that response and find the upload link um which is what we found here and that's what we're going to use so we're going to create a really simple text file um that just is just text um and we're going to use our put requests predetermined helper function to um use uh we post that file data in json along with um the upload link and information about that it's a file and that give it a name newest call it newest cool file just to shape it's live okay and then we're going to put put to that upload link and then get the information back so um we got the information about the file that we just created uh so it's a cool file and this is just a whole bunch of information about that particular file including its size and one other cool thing is we also include hashes so shaw 256 and md5 just so you can verify that your file is okay and it's good and it's good condition um all right so now the last thing we should do is go visit our file on the osf so if we go ahead and look we can visit this is just visiting the project that we just created and seeing the file and this is one part of fun part about staging is sometimes it can look really weird so as right now it looks really weird but you can see uh my misspelled title here for our projects and if this was working which maybe that shouldn't have used staging for this particular thing we would be able to see our files here on the osf project that we just created so yes that is a super basic example on getting started with the osf api as ian mentioned um the this github repository is connected to the osf project and it also includes installations instructions for installing some requirements that this notebook used if you're interested in um running it yourself all right thanks very much for uh running us through that erin uh i'm just going to transition back over now so next up uh we are joined by tim head who's the developer of the osf cli uh and head of wild tree technologies and he'll be walking you through what's possible with the osf cli tool hi so i'll try and talk and share my screen simultaneously which hopefully will work yeah so i will talk a little bit about a piece of software we built that is called osf cli or these days more osf client and it is a tool or it's two things it's simultaneously a command line client and a python library for interacting with the osf so um i'll talk about that kind of you know maybe not schizophrenic setup but that split personality a little bit um yeah so if you have any questions then please do ask them and to write them not into the chat but into the q and a thing um and then i will try and answer them either while i'm talking or uh at the very end okay how did i get started um with this or how did i get involved with osf so back in a previous life i was a researcher at cern which is a particle physics research lab in europe and now i work with um various uh companies and universities and some of them are genomics people and they have a lot of files that they would like to share and adding or downloading more than a few files by hand from isf.io is a bit tedious um so that you know the question is can we build something with which we can just type one command and it will fetch all the files or send all the files and that was one of the the first ideas behind trying to build a command line client for for the osf and then yes especially in in particle physics or in genomics you very quickly have very big files and then um you don't really you know if you have a file that's several gigabytes large uploading or downloading it through your browser is um oh it's just a bit tedious so that's where we've come from and you will see if you look at um the osf cli that is very focused on on sending and fetching files and it doesn't do very much of or of all the other things that you can do with the osf and this is basically because of where we've come from we've actually got one question about that uh using the api what's the file upload size limit um if you or erin want to i think it's five gigabytes per file that sounds about right i'm not i'm not actually sure uh yeah that's the upload limit through the website as well so i would be surprised if it were different so osf cli itself doesn't impose any limits um so whatever limit is built into osf is the limit uh but but but yeah so the other one of the cool things if you ask me about using osf um is that you can access the storage provided by osf but you can also connect your github project and fig share and google drive and s3 and i think racks space and lots of other kind of storage backends and if that's what you're using in your research usually when you work together with other people you find out that they're using something else um and then you know having to deal with the api of github and the api of fig share and the api of dropbox becomes very difficult if you want to automate things and the cool thing about the osf is you can connect them all to your project um you know you can connect your dropbox and your collaborators google drive and your students github and access them all through the osf and the osf takes care of all the all the difficulty or fiddle fiddly things um related to to all these projects having all these storage backends having slightly different um apis right now osf cli supports these four backends and mostly it's a question of somebody wanting to use another one and adding usually one line of extra code and then trying it out um so if your favorite one is missing the slides when we upload them we'll have a link to an issue we use to track which ones already work and which ones are still missing and you can find instructions on how to make your favorite one works um yeah and it works with public and private projects so you can already use it before you want to make everything public which is nice so to install it all you should have to do is type pip install osf client um so it's a python library and pip is the package manager that most people are familiar with when they use python and so i'm not brave enough to do things live so i recorded a little gif so if you just type pip install osf client i will download the few dependencies that it has and after that you can then type osf which is the name of the command line interface and then dash h and it will print out a little help message like we just saw there let it go by once more yeah so if you if you try it out one good way to find out whether it's at least basically the basics are working is to type osf dash h after you've installed it um and it should print out that little help message there and it should work with python 2 and python 3 um as far as i know there's no reason why it shouldn't work with python 2 so for all the examples that come in the further slides i created a project on the osf so the important thing or one thing you will have to look for when you create your own project or want to use it with your own project is the combination of letters and can also be digits at the end of the url so in this case it's edz fp and that is the project id and that's a little piece of information you're going to need to tell the osf cli how to or which project it should be talking to so in this project when i created it i also so what you see here is a overview of all the files in the project and in the osf storage there's one image and then i also connected a github repository to it which contains one file which is just a readme so but this week i can show you that it works both with the built-in osf storage and with one external storage provider in this case github so to download a project or what we call a clone an existing project you use osf space clone as the command so i'll wait for the the gift to reset and and basically what you tell it is the the idea of the project that you want to clone and then it will create a directory with the idea of the project as the name so you saw just now it downloaded the files then it created a directory called edz fp and within that you see two subdirectories called github and osf storage and so at the beginning of the gift now just shows you that if you type osf clone dash h because you don't remember how to use it and it will give you a little help message and now we see again so you type sf dash dash project and give the id and clone and then it will download all the files from all the different storage backends so if you now do a listing of the directory you see there's a new sub directory and inside it there are two subdirectories one the osf storage and the github storage and if you look inside then you will see that it contains the image and the readme that we had on github okay so how about adding a new file for that we have a command called upload and here at the beginning i just show you again or change into the directories that were created when i clone the project and make a copy of a pick a copy of picture into the osf storage directory so now there's two and i do osf dash p and give again the project at the upload and then i tell it the name of the file locally and the name that i would like to give to the file when it is on the osf project so one thing that you notice is that to upload a file even to a public project i need to give my username and my password to do that so to tell osf what username to use there's a dash u command option so then we've added a second picture and then we do osf dash p the name of the project upload the file and it will say now okay no you need to provide username and your password and to do that you do dash u which is what i'm doing now and you give the username that you use to log into the osf and then it will ask you for your password and it will upload the file if you type in the correct password so we've got a quick question here do these same commands work with components um i'm not sure what a component is uh so like a component within a project if you have uh multiple sub direct trees within yeah yeah the um uh if you're looking at the osf page on the right hand side you can add components and those are places where you can attach additional um add-ons or sort of just logically organize your project those are also nodes in the api sense okay then it should probably work from the fact that i had to ask you what a component is you see at what level i've been or the guys i work together with use the osf we mostly use it to add different storage backends um yeah but in principle i if it's a node then it should work but if it doesn't then create an issue on the GitHub repository that i'll have a link to at the very end and you know somebody can add it or you can add it yourself yeah okay so now if you go to the lead that we added the second file to the osf storage part and so one thing that might get a bit tedious is having to type in the project id every time um and as well as typing in your your username every time so so in this case what the the gif does is use osf list to try and list all the files in the project and you see you have to specify the project but if you get bored of doing that you can type osf in it and then it will ask you for the username and the project id and it will store it in a hidden file in that directory and from then on you won't have to provide that on the command line anymore and you can just do osf list or osf upload and it will look in the file to fetch your username and your project project id that's associated with that directory we've got a couple questions here on the same point about authentication is there a way to use tokens or some other access mechanism besides having to type the password in for each operation so right now you can't use a token if we go to the next slide if you get bored of typing in your password because it will not ask you every time um we don't let you store it in the file because I think it's not a good idea to store your password in the clear um so what you can do is you can set the osf underscore password environment variable to your password and then together with the configuration file it will just use um that to authenticate you in principle we can also support tokens but it's just something that somebody needs to implement um there's no particular reason why it doesn't doesn't yet work other than that nobody's gotten around to doing that all right so yeah if you set the environment variable to your password um then it will not ask you for it again and the reason we re-implemented it like this is because very often we use it from inside docker containers and then it's very easy to pass in this environment variable from the outside um so that we found very convenient and just in terms of handling file changes we've got a question here uh assume that I upload a folder with the osf client um and then some files change does the client tool upload all of the files again or make use of the hashes to identify change files or how does that work so um if somebody uploads a new file you can use osf fetch to fetch a remote file to somebody locally you could type osf clone again and that will overwrite whatever you have locally so I think that's not a good idea so you should do osf fetch and then you have to unfortunately um do that for each of the files that you want to fetch remotely um and to upload a file by default if you just do osf upload a local file and the remote file which already exists it will refuse to do that and the way to to overwrite it is to specify a dash f and to you know dash or dash dash force to overwrite it so at the moment it leaves it to you to know whether or not you want to overwrite it or whether you don't want to overwrite it um and the idea is that we don't really want to re-implement you know all the conflict handling or conflict resolution uh logic which for example you find in git especially because often it's it's data files and then it's not very we've not found it very useful to look at diffs of the files to try and figure out who's right it usually requires sending an email to somebody and saying I thought we've not you know why has our data changed for example um that requires some humans talking to each other so that's why currently it's a slightly basic um way of handling potential conflicts other than it should not let you overwrite by just typing a command or you didn't think the remote file existed it will not let you overwrite it um without you asking to overwrite it okay so I said osf client is both a command line library and a python library and that's quite useful we had one person ask already if they can use parts or can use it for building a web application to talk to the osf um and so the code you see here is every all the code that is behind the osf space list command line um command which tells you that all of all of the you know if you want to implement this yourself in for example a web application or so then creating a list of all the files in all the storages of a project is a few lines of code because you can keep using the library and you can use it as a library so you don't have to somehow fit within the philosophy of the command line client um but you can integrate it into your own project we've got a couple of great little points um sherry has confirmed that yes indeed uh working with components works just as well as with the project id so thank you for double checking that sherry uh and we have a question from alex about whether or not there is a package to access the api in r uh there is package it's a work in progress uh it's called osfr and you can find that on github the person who maintains it seems to be very nice we bumped in at some point and discussed building packages in different languages for them as they're uh but but but yeah so the idea really is to try and uh build a library that you can use to do stuff to to projects on the osf and accidentally we also build to command line interface that's not quite true but that's how we try and think about uh where to put functionality for example so that other people can build other things okay so osf uh cli is a open source project so you can find it on github um and on this slightly blurry screenshot the most important thing well number one uh is the where to find it which is circle no red but the other thing which i think is important is the number of people who have contributed so currently there's nine people who have contributed um and if you ask me then one of the goals to try and increase that number and have more people contribute because different people find different things useful and um if people can come and contribute then we can build something which does you know things that other people need and it's not uh a big drag on any individual's person's time um yeah yeah so we have um instructions on how to contribute which hopefully uh explain you know most of uh how how people work together for this um maybe if you're a github veteran then it's not so interesting for you but if you're new to github and git then hopefully the the instructions are at the right level of detail of getting you going or at least getting you to the to the point where you uh ask a question on how to do it so feel free also to to ask if you ever need help with any of the technical uh mumbo jumbo when we're happy to help you okay so yes that is the end of the uh presentation um and at the bottom of the slide here there's the the full link to the github project um that is it so if there's more questions then um feel free to ask all right thanks so much tim uh so i'm just going to uh put up quick thank you slide uh with all the links uh both to the files for this project the api documentation uh and again to the osf cli uh available on github um let's see i think we hit most of the questions there erin do you have some information on uh uh phil's last question so to answer number one is we do not yet have a javascript wrapper but that would be cool um we do have some rate limiting um it is if you're authenticated it's 10 000 requests a day and unauthenticated is 100 an hour um for files we don't have specific rate limits um but if you're planning on uploading large number of files we can totally accommodate that um if you give us a heads up it'll be really great um token or oauth they're both totally fine depending on what you're using it for um a token is useful for scripts or for like uh one time interactions but oauth is way better for web apps and basic works just fine but um is not as ideal all right so we've got a couple last questions uh will the api cover the feature to create a doi for a project in the future that is a good question i am not sure about that it should it should be very easy to do all right so we uh we may check into that uh and let you know in particular um and philx has mentioned that he will be very slowly working on uh building a javascript wrapper uh so everyone can keep their eyes out for that that's awesome add that to the project as it comes in yeah totally uh so i think that's about it and we're at time um if you have any other questions feel free to send them to us directly via the um contact at osf.io email address and thank you everyone for joining us


What are the features of a typical cervical vertebra? For that, let me pick up a typical cervical vertebra. We can see this for MN here, these are the transverse for MN. And this gives passage to the very important artery, which supplies the posterior part of the brain, that is the vertebral artery. It goes from the sixth, fourth, third, second, first, up. The next important feature of a typical cervical vertebra is the bifid spinous process. And we can see that the spinous process is bifid. It's especially bifid in the case of the second one, but all the spinous process will be bifid. And the seventh vertebra spinous process is the largest. That's why C7 is referred to as the vertebra prominence. The third important feature of a typical feature of a cervical vertebra is the hook-shaped process on the lateral margins of the upper part of the vertebral body. And that is referred to as the anchors. This forms a unique joint with the vertebra above, and that is known as anko-vertebral joint, which in contrast to the rest of the body, which forms a cartilaginous joint, the anko-vertebral joint is a synable joint. So, these are the typical features of a typical cervical vertebra. Okay. So, I'm holding in my hand the atlas and the axis. So, this one is the atlantoaxial joint in the middle. It's the median atlantoaxial joint, which is formed by the dense of the axis articulating with the anterior arch of the atlas. It is held in place by a very strong ligament which goes like this. And that is known as the transverse ligament of atlas. And that is what holds the dense in its place. And this transverse ligament of atlas is very important in maintaining the integrity of the median atlantoaxial joint. Additionally, we have the two lateral atlantoaxial joints formed by the articular processes. One on this side, another on this side. This atlantoaxial joint is the one which gives you the side-to-side movement. And that is the reason why this is called the axis, because the dense acts as an axis around which the atlas rotates. Now, let's come to some important clinical correlations pertaining to the axis and the atlas. We can have hangman's fracture. When a person is hung by the neck, the seat to fracture just posterior to the transverse for MN. This is the place where the fracture occurs. And as a result of which, the cervical vertebral column gets kinked. And that's what produces injury to the spinal cord and results in respiratory arrest. That's what hangman's fracture is. This is a natural X-ray of the cervical spine to show a hangman's fracture of C2, axis vertebral. We can have another fracture pertaining to the dense itself. The fracture can go through the root of the dense, in which case the dense gets separated from the rest of the vertebral. The problem with the fracture through the root of the dense is that the arterial supply to the dense runs like this, where my probe is pointing. So if the fracture occurs at the root of the dense, then this portion of the dense loses its blood supply. And it undergoes what is known as avascular necrosis. There can be another fracture of the dense, and that is through the body of the dense. The body of the dense fracture does not have this problem of avascular necrosis because the blood supply to the dense is spared. So we can have two different types of fracture, root and body of dense. So these are some clinical correlations pertaining to axes. Now let's take a look at the atlas. When there's a crushing injury from top, then the atlas can fragment in four segments. One, two, three, four. And the four pieces when they move out. And that is known as a burst fracture. More specifically Jefferson burst fracture. So that is with pertaining to the atlas. This is a CT scan to show Jefferson burst fracture of C1 atlas vertebra. The type of injury that we can get in the cervical vertebrae as such is what is known as flexion injury. If the cervical spine gets hyper flexed, it can move, the vertebra above can move on the vertebra below. And that is known as a translation. And depending on the severity of the movement, it has been classified as stage one, two, three, four. This is a lateral x-ray of the cervical spine to show stage three translation of C6 over C7. In the fourth stage, if you take a close look at the articular facet, in the fourth stage the articular facet can jump. If you look carefully. If this is the articular facet, it can jump. That is the fourth stage. And that is known as facet jumping. Like a train which has jumped from the railway tracks in derailment. That is called jumping the rails. So here also when it jumps like this, it's called facet jumping. So that is what you can get in flexion injury. The reason why cervical spine is more prone to injuries is because of its mobility. So therefore cervical injuries, flexion injuries and cervical spondylosis is more common in the cervical region. Thank you for watching. If you have any questions or comments, please put them in the comment section below. Dr. Sajja Sanyal signing out. Have a nice day.


Hi, I'm Rusty Komori and this is Beyond the Lines. We broadcast live on Mondays from the beautiful Think Tech Hawaii TV studio in the Pioneer Plaza in downtown Honolulu. This show is based on my book, which is also titled Beyond the Lines, and it's about creating a superior culture of excellence, leadership, achieving greater success and sustaining that greater success, and finding greatness. My special guest today is Lubie Gatzoff. She won the gold medal in the 2014 World Championship in aerobic gymnastics. Lubie is an extraordinary champion and she founded and manages her amazing golden future business which provides priceless opportunities for her to mentor kids and adults here in Hawaii, and today we are going beyond world championships. Lubie, great having you here today. Hi, thank you for having me here. It's I feel so grateful to have you have a gold medalist world champion here and this is the gold medal that you won and it's heavy. I love it. I love it. It's heavy. And this is the medal that you receive from the Austrian Federation, right? From the country. Yes, from the Austrian Republic. So that's the golden medal for an outstanding contribution to our country and I'm very proud of both medals. Yeah, it's amazing. What an acknowledgement. And you grew up in Austria? Yes, I grew up in Austria. I am born in Bulgaria, the capital of Sofia. And I was six months old, a baby, when we moved to Austria. But I grew up in Austria and I went there to school and I finished two university degrees in Salzburg. One is a bachelor's for kinesiology and sports science and my master's degree is in health and fitness. So I have two cultures in me and I'm very lucky, I'm very happy that that's the case. And how many languages do you speak? Three. So my native languages are German, of course, and Bulgarian and English. And I'm still working on my English, but it's getting better and I learned French at school. Well, you speak great English and I want to ask you, I know that you have very supportive parents. Can you tell me about them? Yes, so my parents, my mom's name is Petra and my dad's name is Christoph. And family is everything to me. They are my big supporters, my main believers, my rock. And we have always been together in a business, also back in Austria. And once I started my own business here, I also, of course, included them in my golden future. My mom is teaching group classes with me with the kids and my dad is going to be the supervisor for pain therapy. This will come on a little later, but this is a very big role for my father and I'm very happy. We both, we will interact and be together in that game. A lot of exciting things happening with you. Now I want to ask you, Luby, when did you first get interested in gymnastics? I've always been very curious about movements. So I remember that my mom always told me you were a baby and then I was six months old when I was able to stand. Okay. So it was very stubborn. And then I started with four or five to do handstands, do splits, and I signed up for rhythmic gymnastics when I was eight years old, so a little bit late, but I did it. And it was the best decision ever that I did gymnastics. Can you explain the differences in artistic gymnastics and aerobic gymnastics? So we have the International Federation of Gymnastics, it's also called Fédération Internationale de Gymnastique. And in that Federation we have artistic gymnastics, I'll just say one name, Simone Biles. So they're flipping around the rings, the beam. We have rhythmic gymnastics. So it's a female sport and the girls are using equipment. Very common is the ribbon, the rope, the ball. So I think people can get an idea of that sport. Then we have trampoline. We have acrobatics, and we have aerobic gymnastics. And aerobic gymnastics is a mixture of all those. And I always say it's the cherry on the cake, because we're the youngest gymnastics sports, but we're modern. And you do a routine of one minute and 20 seconds. Really depends on which age level you are, plus or minus five seconds. But you do that routine, you move nonstop. You try to tell a story with your choreography, and at the same time you have to show strength, flexibility, you have to perform perfectly and do your difficulty elements. The higher the better, the more points. And don't forget to smile. So when you combine that mixture, for me this is magic. And that's why I fell in love with aerobic gymnastics.  How did that evolve? For me that was the biggest gift. My mom, I know a lot of people when I have interviews, they're, how is it to work with a parent? Like, is it really you? And I say, well, I don't know, that was a gift to me, but my mom is like my best friend. I've always been super close with her, and we've never really had problems. And one look in our training, and we definitely knew, okay, how can we help the other person? How can we complete each other? And I couldn't imagine to have another coach, but my mom, she was the one waking up at 11 p.m. and bringing me to the training hall because I was freaking out that I had a mental block not doing a movement correctly. I'm like, mom, I just have to go to the training hall. And she said, you can do that perfectly fine. You did it 20 times. No mistake. And now only because you have the mental block, that doesn't mean you cannot do it. I said, mom, I need it. I went midnight to the training hall. Actually, that was in the preparation before the World Championship.  But situations like that, not that an outside coach wouldn't do it, but I think having my mom so close to me, understanding me, my emotions, everything, my whole human being, also knowing when I can push harder, and I'm saying, oh, I can't do it anymore. That's my board. You can. You can. That's the perfect combination for me, and this is the reason why I admire my parents so much. They're my big inspiration.  This is just amazing, and I know that in 2012, you won the bronze medal. In 2013, you won a silver medal, and in the 2014 World Championship in Cancun, Mexico, you won this gold medal. Can you tell me about that experience? Of course. It was magical. It was different. It was not even like I imagined it. It was like I'm flying. I've worked for that dream more than 17 years since I was eight, and it was a very hard way.  I mean, not really, but like mentally thinking, and it was very hard. But actually to, you know, get that medal and perform the way you've imagined it and do it even better. And then I always say, you know, standing actually across from your dream, I'm getting goosebumps. That's something I'll forever be grateful for, because it's a one-lifetime experience. It's not only the medal, it's way more that you get with the medal that makes you be a stronger person and have a very good character, learn how to deal with problems, challenges, and just go one step more and more forward. Well, winning the gold medal at the World Championship, I mean, it's so much meaning. I mean, it represents sacrifice and commitment and resiliency and everything. Now, how did it feel knowing that you were the best in the world at that moment? It was amazing. It was very speechless. Austria is a small country and we had not too many athletes competing just because we're small and everything, the development is different in each country. And getting that gold for Austria was a big honor. I felt pride and most of all, I felt peace after such a long time.  And you are definitely inspiring a lot of people. And I have to say, Lubey, you are extremely strong and flexible. You do all these amazing poses. You have incredible balance. I mean, so much strength and grace. I mean, there's amazing pictures of you doing amazing poses. How do you do it? Hard work. Hard work. Hard work. Yeah, just so before the World Championship, I was training six to eight hours a day to maintain that after it when you're on the peak. I was training three to four hours a day.  It doesn't matter how you're feeling. And I think that's also one, one parameter that you have to keep in mind as a champion or someone that wants to achieve more than the rest. Doesn't matter how you're feeling. You have to have that discipline to be better than the day before and, you know, get that plus. I have, I always tell myself, I have to get the plus and put it on my golden list.  And then I have to force myself to do that because not every day is beautiful. It is. But sometimes it's harder. Sometimes it's easier, but you have to get that plus. And once I have that plus, I can go to bed and sleep well and get ready for the next plus. And that's how it goes. Well, what was a typical training day like? I mean, how, how long did you train for when you were competing? When the competition was a little more far away, let's say two months, I was still also in the university. So basically it was very hard because I woke up around 5.30, 6 a.m. in the morning. And then I was driving with my car an hour and a half to Salzburg. I was at a university to, let's say 2, 3 p.m. Really dependent on what kind of classes I had. Then I was driving back an hour and a half. Then I had my training of three to four hours. And then I had somewhere in between meals. And then I had my mental training before going to bed and writing my papers or my homework. So basically I went to bed pretty late after midnight for sure. And when I had to prepare for exams, it was, I was an old, do you say old? Only my room was with lights. I was studying for exams, but it is what it is. For me, always education was a very important thing and in our family as well. So I knew not only about sport, although that's my big love and big passion, but you have to educate yourself. If you're smart and you're intelligent, that will show also on the podium. You will think differently, you will react differently. So I was proud that I wanted to keep going and pull that through and have two university degrees and my sport on the side too. Let's talk about your golden future business. We're very fortunate here in Hawaii that someone like you have this golden future business. Can you tell me what it's about? Yeah. So my business, Golden Future, offers private sessions for kids, adults, seniors, social people with disabilities. And this gives the people the opportunity to need to work with them really one-on-one and work on their personal need and tailor our training. But besides of that, I also do group classes for gymnastics. So I'm focusing on rhythmic gymnastics and aerobic gymnastics. And then I have a basic gymnastics group. And the rhythmic and aerobic gymnastics group is something that no one else is doing here in Hawaii. So if people are interested for their kids, sign kids up for those two disciplines, they're really in golden hands. But more than that, I'm also creating classes for adults, not yoga or pilates, which I really appreciate too. But I'm doing neuro fitness, I'm doing special stretch classes. And if I get a group with people that have diabetes, I can create a class for diabetes and consider all the criteria that I have to consider where I can create a school program. And I'm very open because my knowledge is very, very wide and I can really create what people need. Well, I love hearing that. You can basically do it all and you adapt to everything. And, Lubie, we're going to take a quick break. And then when we come back, I want to talk more about golden future and about success. Thank you. You are watching Beyond the Lines on Think Tech Hawaii with my special guest world champion gold medalist, Lubie Gatzoff. We will be back in 60 seconds. It's Tuesday to see my mustache live. Welcome back to Beyond the Lines on Think Tech Hawaii. My special guest today is Lubie Gatzoff, the 2014 world champion gold medalist in aerobic gymnastics. And today we are going beyond world championships. Lubie, I want to ask you more about your golden future business.  Can you tell me how you're impacting them in a positive way? I'm always trying to make them go out of their skin, go out of their comfort zone. So I'm pushing, but I know kids and their abilities very well. I'm trying really to get them to know their character too.  Like, Lubie, I can't do anymore. And I'm like, okay, I respect that. So I think I have a very good human knowledge. I can feel that vibe. When is the person ready to go for more? Where can I push and where can I pull? Because I've worked with so many different people many years ago. And now I'm continuing. And this is something special. Plus, I give a lot of inside of my thoughts when people say, kids say, I can't do that, Miss Lubie.  And the vocabulary of I can't. I will never hear that again. Because we'll do 20 squads, you're going to do sit-ups. And then it continues and continues. So I want them to understand that those words are having a lot of power in our mind. And more and more. So I can talk for a long time and tell. But basically, I'm really trying to be different and be a good example. When they do something, I'm trying to do it with them. So they can see the example. How is Miss Lubie doing this? And why is she talking that way? And I always tell them, we have a feedback round. I want to give the kids the opportunity to ask me questions. So that's what I'm doing. I'm glad to hear that. I mean, you have discipline and you read the students very well, the kids. You also impact adults. Can you tell me about how you're impacting adults in a positive way here? Yeah, I mean, I have one example. His name is Brian Munoz. And he lost now almost 30 pounds in four months. And it was not a fast. And it was not too slow. It was just in a perfect timing. So he can really keep that weight now. And he's so proud of himself. We're doing different kind of movements. And when he's a little injured, we're focusing on the weak parts. So when he wants to increase his strength in his arm and then I was like, well, now that your wrist is hurt, we can focus on your core and work on your lower body. So everything happens for a reason. So let's focus also on your other weaknesses or other goals and then make you stronger in that way as well. So I'm using my golden philosophy and telling them also, go for the gold and everything in your life. Go for the gold in your relationship. Go for the gold with your family, with your business. And basically, it works. Yeah, no, I love hearing that. And you also have a very popular after school program. Can you tell me about that after school program that you have? I teach the Jefferson Elementary School for a year and a half almost. And during that time, I was creating the PE program, which I was very grateful for because I felt like for 400 kids, I can have an impact. And I learned European games and games that I was creating. And there was, oh, this is the name in America. I'm like, well, in my studio, I call it this way. So it's just a wonderful going back and forward, connecting to. And I created the after school activity in order to increase their health and fitness. I saw what their weakness was and then it was easy for me to just fill that in and make them stronger. And that way, we went with the fifth graders to a fitness test at the end of the year and we got an award for excellence of wellness. And the kids improved from the beginning of the year and at the end of the year so much. It was significant. Jefferson Elementary School. And this is also something I want to focus on. I want also for the schools to know a world champion is here. And I want to spread the word. I want to have an impact on the kids. I want to create a program we can use for all the schools or any school. I can create whatever we need. I just want the best for Hawaii and Hawaii's Kiki. Well, I want to help and make sure that everybody knows that a world champion gold medalist is here living in Hawaii, loves Hawaii. And you definitely go beyond the line. And I know you read my book. I read it. Tell me about the book. The book was interesting. And a lot of points I totally agree and I'm already using. But every leader who wants to be a leader has to read it, my opinion. I think it was very easy to read. But at the same time, it was with wonderful tips. And it's not only about tips. It was a guidance. You don't feel you have to do it, but it was just giving those examples. Coming close to reality, that was something I really loved about the book. It was really, it was inspiring at the same time too. And you can learn very new quotes that you use. I love the quote you said about risk and the baby that if you don't take a risk, you know, and you don't crawl and stand up. You will never, you know, go forward. And this is what life is about. We have to go forward. Yeah, risk promotes growth. Yeah. Yeah. No, thank you so much. I feel honored that you read my book. I want to ask you, Luby, you're very successful. How do you define success? Yeah, success for me is love. Success is the patience and the consistency to pursue your own goals. And success is the satisfaction to help others. I think that's the best definition I can give for success. The whole combination of that is for me success. Great. And when you were on the quest to winning the gold medal, why do you think you ended up winning the gold medal? I was an am a nonstopper. If you have the word in English, I don't know. But I was a nonstopper. I visualized gold. I smelled gold. I touched gold. Everything was gold. And I was perfectly prepared. I was prepared for everything. And on that day, I exploded. I always go over my maximum. But that day was different. That day, I knew I had my wings. And I'm going to show everyone who I am and why I love that sport. So being on the stages, when you really fight for gold, you don't really think about the gold anymore.  What will happen after is in the hands of judges. And it's normal. Gymnastics, like every other sport, is not the most objective one. But so is life. Every person has a preference. But in order to win gold, you have to be visibly better. So if somebody says, okay, that routine was not that beautiful. Or less, everyone has a right to say so. But if you're visibly better than the rest, then you get the gold. And that I made that for my country makes me very happy.  Like let's say a few minutes before. What are you focusing on? I'm visualizing my routine. That's basically I'll go to the wall, I close my eyes, and then I visualize my routine, how I'm doing it perfectly. And then just like one minute after, I'm standing on the stage on the corner and waiting to hear my name. And then once I'm on stage, I'm on fire. Like I have like the, you know, the Rocky movies. I put my, I put my head on the other side and I am like a movie. Rocky. Like Rocky, yeah. No, it's just like it's different, yeah. Great.  Definitely nervousness when I was little. Let's say when I started with eight to 15, I was very nervous. I was shaking and sometimes I would want it. I was really, I had a lot of pressure. I would, when I started my sport, even rhythmic gymnastics before, I always won. And having that pressure to win again and again, I think that made me feel, you know, be so nervous for the next time. But once I got the bronze medal at the World Championship 2012 in Bulgaria, I broke the ice. And I broke also my confidence, even more. And I was, nothing could stop me anymore. I stopped being, I was always nervous and excited, but I would say more excited than nervous. I had no fear. I was out there not to get a specific rang or a place. I was there to share my passion and love and to challenge myself. And, you know, just compete against myself. And that was, that was beautiful. I love hearing that because you remember in my book how I talked about excited versus nervous. And you experience the same types of feelings. It's just mentally the mindset you should focus on being excited instead of focusing on being nervous. And that's what you did. And that's why you are the world champion. Now, what do you hope to aspire to achieve in your future? I hope that I can expand my business. I hope that I can touch as many minds and hearts here and how I as possible and be a good example for them. Not the good example, I wanna be the best example. Being a champion is always going for the gold. And I really hope that I can do this here. I know my knowledge and I know how, but I'm ready to give it to everyone. Many champions, they keep their secrets or their own little group or their own club. And it's not only about sport. This is a golden key I would like to share with every human being so they can get their own champions in their life, succeed in business, succeed in their relationship. This is what I wanna be here in Hawaii. This is what I wanna spread, my energy, my aura. Well, I think it's definitely gonna spread.  I wanna ask you one more thing before we close, Lubie. Why do champions become champions? Because they go over the comfort zone is easy, but they- Beyond the lines? Beyond the lines, absolutely beyond the lines. There is a specific drive in a champion that how bad do you want it in a good way. And you focus on that and you visualize that and you continue your hard work. And it's not about the sprint at the beginning, the sprint at the end that makes you the winner. So you have to be consistent. Keep moving forward and then sprint. And it really depends how strong are you still at the end? What are your reserves? How much were you able to train your mind to be a little faster or even a little more faster than the rest? And once you hit that finish line, you made it. Oh, I love hearing that, Lubie.  Why you won the gold medal? Thank you for being here on today's show, Lubie. Thank you, Rusty. Also congratulations on your book. Oh, thank you so much, Lubie. You're welcome. And thank you for watching Beyond the Lines on Think Tech Hawaii. For more information, please check out my website, RustyKomori.com and connect with me on Facebook, Instagram, LinkedIn and Twitter. I hope that this show and my book inspires you to create your own superior culture of excellence and to find your greatness and help others find theirs. Aloha.


Hello and welcome to the International Daily Roundup by People's Dispatch, where we bring you major news developments from around the world. Our headlines. Brazilian President Jair Bolsonaro faces Senate inquiry over the mishandling of the pandemic. Port workers' stage walkout in solidarity with truck drivers' strike in the US, Biden administration to proceed with Trump-era arms deal with UAE, and Amnesty reports civilian killings by Eritrean troops in the Tigray region. In our first story, Brazil's Senate has launched an inquiry into President Jair Bolsonaro's handling of the pandemic. The far-right leader has been repeatedly criticized for underplaying the crisis and for refusing to put adequate precautionary measures in time. Brazil has been among the worst-hit countries in the world with over 360,000 deaths so far. The launch of the Senate inquiry was authorized by the Supreme Court in April 14th. According to reports, the investigation will examine allegations that Bolsonaro sabotaged social distancing measures. Other allegations include the targeting of local authorities who try to implement lockdowns and negligence in acquiring vaccines. A major focus will also be the healthcare crisis in the capital of Manaus in the Amazonas state. Oxygen shortages were reported in ICUs during the severe second wave in January. Al Jazeera had reported on January 22 that over 100 patients had died of asphyxiation in over a week. Beyond the health crisis, people have also been suffering under worsening economic conditions. Oh, 116 million Brazilians not have proper access to food by the end of 2020. These findings are part of a survey by the Brazilian Research Network on Sovereignty, Food and Nutritional Security. 19 million people also experienced severe food insecurity, stating that they were starving. The prices of food have also increased by over 15% amid widespread pandemic-induced unemployment. An estimated 12.8% of Brazil's population is living below the poverty line. The impact of the pandemic has been somewhat cushioned by the emergency cash transfer by the government last year. However, the assistance plan for this year is only a fraction of the original amount. It will include four monthly payments over around $50 for a much narrower set of informal workers. We now go to the United States where over 60 workers staged a walkout in the city of Los Angeles on April 14. Members of the Teamsters and International Longshore and Warehouse Unions participated in the action. Workers shut down one of the seven major terminals in the Port of Los Angeles. The protest action was held in solidarity with the strike by port workers in the state of California. Port truck drivers employed by Universal Logistics Holdings Limited announced a strike on April 12. They stated that the company had denied them back pain illegally fired truck drivers. The company reportedly also refused to bargain with or recognize illegally one union. Teamsters at Teamsters had filed charges against the ULH and its affiliates in the National Labor Relations Board. In the investigation, the board founded over 20 CDS violations of federal labor law had been committed. It alleged that the ULH-ULH affiliate violated the law by terminating unionized drivers shortly after the election victory in 2019. The company then transferred work from the unionized facility to another ULH affiliate, Southern Counties Express. Teamsters at this second facility were misclassified as independent contractors. Teamsters has argued that this practice is used to avoid compliance with laws that provide basic safety net protection to employees.  During the pandemic, this also includes the provision of protective gear at the work site. Continuing with the U.S., the Joe Biden administration has announced that it will proceed with arms sales to the United Arab Emirates. The deal worth $23 billion had been approved by the Trump administration. This was an exchange for UAE agreeing to sign the Abraham Accords to normalize relationships with Israel. Following widespread outrage, the sale was halted and placed under review by the Biden administration. A State Department official, however, announced on April 13 that the move will go forward. The Trump era deals include 50 advanced F-35 fighter jets and armed Reaper drones among other weapons. While the Biden administration officially ended U.S. support for the MN War, arms sales to UAE have raised serious concerns. The administration has stated in February that it would continue to provide support to the Saudis for defense purposes. Activists have warned that Saudi Arabia might try to justify its offensive against Yemen as an act of defense. The over five-year-long war in Yemen has plunged the country into a severe humanitarian crisis and the UAE is part of the Saudi-led coalition which has conducted this war. At least three civilians were killed by retreating troops in Ethiopia's Tigray region earlier this week. Amnesty International has also reported that at least 19 people were injured in the attack in the town of Adwa. The group has cited eye-witness accounts of Eritrean soldiers firing from the back of moving trucks. According to a staff at Akshambar Hospital, people had been shot in the chest, stomach, legs and hands. News agency Reuters later quoted an official from the Tigray Interim government stating that the death toll was at least nine. The killings took place just weeks after Ethiopian Prime Minister A.B. Ahmed had announced Eritrean troops would withdraw from the region. He had previously refused to acknowledge their presence in Tigray for months. The violence in Tigray began in November 2020 when the Ethiopian government ordered troops into the region. Several reports by rights groups in the UN have since then documented severe human rights violations. These include looting, extrajudicial killings and sexual and gendered violence. The UN reported in March that over 500 cases of rape had been reported in five clinics in the region. Medical group MSF had also reported targeted attacks on healthcare facilities and the looting of supplies. There is also a scarcity of food and almost 300,000 people are yet to receive any assistance. According to the Regional Bureau of Labor and Statistics, an estimated 1.7 million had been displaced as of last month. That's all for today. We'll be back tomorrow with more news from around the world. Until then, keep watching People's Dispatch.