 Good morning. Hello. Can you hear me? Very warm welcome to DrupalCon Vienna. It's been amazing. So this is the first time in this continent I am here as speaker as well as attending DrupalCon. I'm Rakesh James. My co-speaker is Vicky and she is the official general of migration module in Drupal 8. As well as I have Maxi with us. Maxi, can you stand? Maxi is one of the migration contributors. Yeah, always we have and just also with us. Release manager. So it's what we're going to do with the sessions. Just want to introduce you guys how to migrate to Drupal 8. I would love to know how many of you are working with Drupal 8 now? Started working with Drupal 8. Okay, cool. It's good numbers. I mean like, yeah, previously done, it's very less numbers. Yeah, it's, I want to say if you are still working with Drupal 7, it's easy. You can directly, if you want to do it with Drupal 8, you can directly go and start migrating it. You don't need to worry about anything. Only you need to take a couple of clicks. Then it will migrate. I will show you how to do that. Sorry. Okay. So these are the contents we are going to talk about it. First is migration modules are in Drupal 8 core. Then D7 to D8 migration. Migrating from CSV data. Just on our CSV data, comma-separated values. If you get data in comma-separated values, how to do migration and source plugins and process plugins and how to use migration modules through Drush modules. I would like to know how many of you guys migrated 6 to 7? How you guys migrated? Anyone, please? Feeds module? Yes. I mean, so we're looking forward to how the Feeds module Drupal 8, anyway. Again, anyone else used a migration class? Yes. Again, there is another way of importing, not import, as well as not import modules are there. You can easily migrate it. But for now, you don't need any more modules. Technically speaking, if you know a little bit about developing, you can directly go and use the CSV data to migrate. Let's check out what are the core modules, what are the contributor modules involved with the migration process. Migrate module and migrate Drupal UA. That is a core module that originally ships with Drupal 8.x. So you don't need to download any of these modules. And you can download the modules who may be added in future. Not sure about that. Yeah, but can be. Migrate plus and migrate tools and migrate upgrade as well as migrate source CSV. I'm just going to say how to process the CSV data to migrations. Till now, any questions? I would like to have an interactive session because of it's sort of difficult session. I'm taking this as a third time. It's all when lot of problems and like it was in Baltimore, it's when we try to do it in a workshop. Whatever you're not understanding, just raise the hands, we stop and we discuss, then we'll go forward. So these are the modules available. And you can download those contributor modules through Drash or console, anything. Yeah. So when you want to do a D7 to D8 migration, what do you need to take care of it? Obviously, you need to have the instance D8 installed in your system. And you need to have this migrate, migrate Drupal, migrate Drupal UI module installed. Then you need to run the migrate upgrade module as well. The four modules, you can start using it. Then you will go to the configuration for the migrate upgrade. You will get this kind of page. It's very straightforward. You can see what all the database you are using it, what all the database you're going to use it. And if it is where it is getting hosted and what is a database name, it's very straightforward. This is you'll get the UI part in D8, this UI. Then click, it's update. That's all you need to do it D7 to D8. But still, there is a lot of critical issues around tall critical issues as tricemen and in tricenaut. We welcome you all to come and work with the migrate issue queues. Any help, Maxi or Vicky or me or Adam or just any, come to the code sprint room. Ask any of us like we can help you. If that tall issue is more than tall, I think if we spend for another six months in a very brute force, I think it will be easy for any one of you or me. Can symbol clicks, can be migrate from seven to eight. One more thing you want to add it. This should be the last, most upgrade you are doing it manually. That's what dry says in the notes. So if you do seven to eight migration, that when your nine comes, triple nine comes, you don't need to do anything. I hope you all see that slides, drys are presented in Baltimore. There will be, have you ever find it deprecated in your coding? Drupalite coding? It's called deprecated. How many of you have heard that? Deprecated system, it still supports and it will be removed in future, but it will support with the current system. Okay, I'm not changing the topic. So D7 to D8 migration is just like this. So there's some changes on this form as well where at the top, which you can't see, you have to choose Drupal six or seven as your source. That's quite simple. It's just a little click. And also for the source files, you can set, it now accepts both your public and your private files. Yeah, adding one more thing. You can be here. Yeah, adding one more thing. The same way you can do the eight migration, six to eight migration also. There is not much difference. How many of you guys are still working with the Drupal six? It's okay. I think it's, it's not a, it's not a big problem. Yeah, I started with the Drupal six and I saw all those changes of entity. Then when I come, D7, I need to study this. Then I came to here. Oh, I need to study a lot of things. It's, it's, it's okay. It's totally okay. I mean, you can. In fact, you don't need to know object oriented program. If you want to be a builder side now. I would say if you want to build a multi-lingual site is far easier than D6 and D7. You don't need to do anything else. Like you don't, you don't need to do install a multi-lingual sites or multi-lingual modules or download any of this. D8 is very easy. I want to say that. Same way you can do the D6 to D8 migration same screen. You need to do what are the versions like a database as well as the where is getting hosted all the stuff getting updated. Then you need to do it. So moving forward, we're going to find out how to migrate other legacy systems. Anybody who works on, I personally worked on call fusion, migrated call fusion website to Drupal eight two times. I mean, one is a normal website. Other one is Drupal eight commerce. I migrated to Drupal eight commerce actually. How many of you guys familiar with this? That first block is CSV file. Yeah, you want to have a question? Please. Asking questions. No problem. Yeah. The first one is block is CSV files, comma, separated values. First one is IDs, the one, two, three. The second column is titles and third column is the body. So in these slides, we have a second block is the dot YML file. Excuse me. Dot YML files. We have a three process. There are three things involved. Three, actually, technically is three process. When you have a migration, you need to have a source where the data is placed. And you need to have a processor. And so you process the data for your purpose in the eight, like how it has to be placed. Then there is a destination. So three way. First is first is source, then process and destination. You can see the source, process and destination. So in the source, you are saying which is the CSV file you're going to migrate it. From where is the data is placed? Where is your CSV files are placed? Yeah, you can give an absolute path as well as the relative path. And the second one is process. Process use, do all the mapping. Remember, you guys use the fields module and do the field mapping. Not in both modules, we do the field mapping also, right? The same way, we can map the fields, what are the things, title is, title is, what is the CSV columns as well as the body. And we can create what is the type. There is a process plugin. I will come to that. And then destination. Destination, I say I am going to create a node. I'm going to create article. So from this CSV file, I'm going to create node. That's what these slides, like this process do. Any questions till now? Yeah. I'd like to add a tidbit there in that it can be tempting when you're writing a process plugin to do more than processing. Like you want to do something in the destination. And in fact, in one of the contrib modules, there is a thing to generate an entity during the process. But that has lots of bad things around it. And it's dealing with simple things here. So I won't go into all that. I just want to point out that if you're getting into writing these things, remember this process. This is just about changing the data you've provided it into something else. Nothing more. Okay. And then your destinations tend to be quite simple. Like as you can see, that's the destination for entity node. That's it. The rest of it is handled by the core migrate. If you look in core, there are very few destinations in the other modules. And they're all quite simple. So if you find you're making a destination plugin that's complex, stop and think about it and seek some support. Come to meet us in Drupal Migrate. Process. All these are plugins. The three steps I told you. It's getting so much light. Sorry. Source, process and destination. Three of them are plugins. So what is the basic idea of plugins? All of you guys know. You can plug and play. How many of you are familiar with plugins? Okay. So let me tell you this example. So you have a fan. You have a lot of plugs around this room. You can plug anywhere and it will work. What is according to work? Correct. It plugs to the where it has to be. It has to become for the electric and you can plug it wherever you want. And it play according to that. So plugins is like that. You can extend. You can create your own fan and plug it anywhere also. It sort of rotates. The fan still works. That's why the plugins play. Plugins work. So three of them are the plugins. We're going to explain you what is a source plugin and what is a process plugin. This I will show you in a developer perspective with an online demo. We'll show you how to do that also. So this is the easiest way to migrate from any kind of... You're getting any kind of WordPress or anything. Any data. Get that value. Get that data into the comma-separated values. And just write this YML file. Then you can import into the Drupalite very easily. Yeah. This is a source plugin. You can see the right hand of this slide that is the XML files. And the left side is the source plugin we've written for how to read these XML files. The left side is the YML file for reading this XML file. It's pretty straightforward. You... It's already... You don't need to write any of this code. It's already there. It's already there in Drupalite. I just want to explain you. So there it's... Source plugin is written and says... Where is the path? The source... The plugin says the URL... From the URL we're going to pass it. And say URL is... This is the URL. And the data feature we say... It's HTTP. And then the password we say XML. It's straightforward. And say item selector slash nodes, slash nodes. Then we say what are the things we need to map it? We say the fields come name, label, selector. It's the page title and title and body. So this is a source plugin. If you have a custom table, suppose like you have a set of data in a MySQL table. And how you can easily write a source plugin for that. Or you have a different way of data is processed. You can write a source plugin for that and get it migrated. Or you can give online streaming data and you can migrate to the system. It's... You don't need to worry about it. All these codes are available. There is a lot of examples available in the code itself. Migrate examples. You can look at that code and you'll see to find out how to do it. So this is a source plugin. Source plugin, when it's getting created, XML is already there. And JSON is already there. And CSV is already there in Drupal ecosystem. If any data present in any other way, if you want to... If you feel like, okay, I need to have it in a source plugin. So just write it all. And one more thing. If you have any piece of data that can be converted in the CSV, that is very easy way of migrating the data from other system to your local system. We're gonna talk about next, process plugins. Yeah, a process plugin is basically we are using for... We use the feeds module, right? All of you guys, I think, used feeds module. Suppose you get data, however, you need to migrate an address. So address comes generally like street numbers and address line two is comma separated just like that in a single row. But when you're going to the system, it has to be placed in a proper way. Or let's say you have a user migration, you are doing it. You have a first name and last name. But you have a field called full name. So it will attach first name and last name together, right? That is what the process plugin we have written here. So if you think about the Drupal 7 site, you use the tampering force feeds module for particular field, how it should behave it, how it should read the data from the source file and how it should get imported in Drupal. So those part, you're processing it here. So you can see this. This is the class you written process plugin class. In the right side, it's written. It's a process plugin class. In the left side, it is the YML file. You're going to migrate from the YML dot YML through the configurations. I will show you how to do that. Yeah. Let me explain this process class. And you can see that in the process class, it's say full name and class name. And you have the annotations for what should be the ID, migration process ID. Then you get a function called transform. Transform is the method that allow you to tamper the fields. You can make your own fields how should be appeared. Suppose you want to split the fields. I mean, split the data. You're getting a raw data straight one, two, three together. You can split it with a comma-separate, explode it or implode it. That's what we're doing it. Here, we're going to get the first name and last name. You can see that. And we're returning it together as a single field. So in the left side, you can see in the field full name, are you able to see the field full name? The field full name, you say the plug-in name is called full name. And source is the unique ID what is generally passing it. That has to be present. Don't matter what source. You can check out the full name. That full name will close, call this class, migration process class, and say, check for the first name and last name and concatenate together and return back. That's what process plugin does. Any questions still on? Okay. So the bit there about the process plug-in and the example provided of the full name process plug-in. In core, there's a whole bunch of existing process plug-ins. So if you look in the core migrate module, you'll see a bunch. And there's simple things in there like concat. Just a concat two fields. There's extract to pull something out of an array. It comes to mind. And then there's some more tricky ones. Like... Oh, it changed its name. Hang on. Migration lookup. So more advanced won't go there. I'm just saying there's more advanced ones in there as well. And it's worth a read of the APIs to find out the ones that you need. So look there first before you go off writing ones. So I will show you how the process plug-in works also. Yeah. Next one is what is the Drush modules help us to do it? So we need to find out how it's get runs. So when you're installing Drush modules, then migrate tools you need to install. Once you install migrate tools, modules, that will allow you to give these Drush commands. The first Drush commands give you an option to check the status of the migration files. Then you can see the import. Then you can roll back that one if you're not happy with that. Then you can stop it. Then you can reset it. And you can find out the migration messages. What is a message happen if there is an error happens or those stuff. This is the basic commands you need to understand when you're doing the migrations. Yeah. Okay. Let's do a... Any questions still now before demoing it? Yeah, please. Can you please repeat the question? So you want to migrate from six to eight? Seven to eight. Okay. That still works, actually. Okay. I will show how this has to be hands-on, but I didn't get the time. So this already is working. Let me show this. So this is your D7 site. This is your DH site. You need to go to this path slash upgrade. Then I... I told you this... This UI getting it? Seven to eight? Yeah. So you give the database name and you give the host if it is a local host, if you can do it in an online also you can do. When you click on upgrade, you'll get what all the things you need to get upgraded. Okay. When you click on upgrade, you'll see this bar. This is your happening in D8 site. Ten minutes later. It takes some time, okay? Trust me, it takes some time. So all the contents from that site is migrated here. This is a seven to eight migration. You need to do it. Yeah. Can you please come to the mic so that everyone can hear you? So it will help to others also. If you have questions, please come forward. We'll do the process plug-in migration demo also. Yeah. So my name is Marco. I'm from the Dialogue Schmiede here in Vienna. And my question is... So basically when I'm migrating custom modules from my functionalities that I need from Drupal 7 to Drupal 8, I'm basically needing the slides you showed before with the status messages and all these basic status things. That's my question. Thank you. Thank you for asking the question, Marco. It's a good question. All of you asked this. Even when I started, I also has it. I would like to say all of the contributed modules we are trying to getting into the migration upgraded. And custom modules can do the upgrade one by yourself. The content actually we're getting migrated through the migration process. After that, if you want a very particular functionality better do upgrade a module upgradation module that will give you the overview what all the things you need to change as hooks or if it is hook underscore menu that is converted into the menu.links.yml files. If you have a very particular process better those custom areas you can develop by yourself. Majorly migration we meant for the data migration first and custom module migration you need to upgrade first then you need to work on those specific functionalities. Yeah. That is the only part you need to do it but rest of the everything as possible even the translation also we're trying to get it. It's take if you do it very manually it will take three or four months to do it but if you do it in this way how much time you needed maybe one hour? Three hours? Thank you. Yeah. Just to clarify the policy on what we migrate in core anything that's in core we migrate but if it's a contributed module like paragraphs it's a responsibility of the paragraph maintainers to write the migration for that. Just just a quick question on multi-lingual content is it possible using the current multi-lingual content is it possible using the current migration tools to migrate multi-lingual content? Yes. It's a very good Maxime is probably the best one for this but it's mostly Ah! Yeah. Maxime can come and answer for that question. Come. My first thing that comes to mind is to read the known issues page about migrate there's a known issues pages but a lot of the translations are done but I don't know the nuances of it that's why I'm pausing. Please come here. The nodes from Drupal 6 and Drupal 7 to Drupal 8 are migrated there's still some work to be done like with menu items blocks and other things but it's hard to find people to work on them because you have to be able to know the multi-language system and the migrate system so it's kind of tricky issues but we're working on that. And I will gladly say that I'm sadly monolingual so I've had to learn Drupal 6 and 7 translation stuff enough to write patches so please come join us if I can do it so can you. Yeah. When you migrate all the tables including the content types so when you want to start working with the new Drupal 8 you can start adding content to the same content types. So I think you say can you repeat the question once again? Yeah. When you migrate from 7 to 8 using the migrate does it migrate also the content types? It's content types and the fields too. So this you have is automatically created here too. So then you can just start using adding new content without a problem. So it's just run this click click click it's everything translated there. I mean, yeah. Yeah, please go. In your example it's pretty simple content structures but what if I have like a more complex architecture with node references and categories, taxonomy tags how do you, is it possible right now in the state of the current API to handle all these relationships? Thank you. Yeah, entity reference are we having it. You have a taxonomies you can have it. If you have a lot of level of taxonomies you need to do a process plugin. If you have a lot of taxonomies and a lot of very high level architecture. So you would have to program a plugin, a specific plugin. Yeah, I will show you that. But it's possible, right? And just another quick question you said it can take some time. Yeah. What would be an estimate for like 4,000 nodes for example? 4,000, it's a lot of things in factor actually. So if you run it in an 8GB RAM system or 16GB or 32GB RAM system that is also factor. If you have a heavy system a good system and also we cannot have that exact times. Like a ranch like half an hour to two hours. You need to give your time. You need to give a little time, it will do. A little time. It won't break. I'm sure because I've done that it won't break but you need to be a little patient. Come on, you can be patient because it's not asking you to do it a couple of months patients. Maybe a couple of hours. That's okay. Okay, thanks. Also with those Drosch commands you can tell it just to do a couple. There's some fields you can send. Yeah, please. Yes. I have a question. Could you give us a workflow of multi-lang site in Drupal 6 but this site is not updated so it's not using the last version of Drupal 6 and it has also custom models. Cool. Thank you. You want to upgrade this is what I understand. I'm sorry, I'm making it. You have a Drupal 6 site in Drupal. Correct. You want to update to Drupal 8. Is that you want? 7 or 8, yes. No, don't do it with anything you don't need with 6 to 7. Directly go and do it with the 6 to 8. D6 to D8. No D6 to D7. D6 to D8. If you're doing it that is very correctly, that will be good. So after that you need to create your own modules, check the deprecated ones has to be removed and you keep doing it. It will be Drupal 9. When Drupal 9 comes your site is also automatically updated and upgraded. So what I'm telling 6 to 8, not 6 to 7. Coming back to your question. Yeah. 1145. 20 minutes. Okay. 6 to 8 migration with a multilingual. Actually we are not very much capable, but still we are capable. Yeah, some of the things if it is not you want it in a very direct way of this one maybe a little bit breaks you will get it. All the nodes it will migrated the couple of taxonomy or entity reference. We are working on the same plugins. So 6 to 8 migrations, translations. Excuse me. The translation it has to be work little more issues are there. We are working on it. Always welcome. Anyone wants to speed up the stuff come on issue queues are one of the good initiative and be very proactive come on ask questions or what you are doing it anyone you can find anyone of us or you can find Lucas or Adam or Maxie quite one or anyone like find out they will be answering your questions as well as. Just a second in regards to the roadmap if you have the old D6 you really do need to upgrade it to the latest because obviously we can't support every version of D6 and all the modules. So start with that lovely task and then move on. The D6 translation migrations are further along than the D7 ones. So. The migration of translations in D6 is further along than the translation migrations in D7. Hi, I've got a real quick question. On one of your first slides you showed the migration form and you could select MySQL, MariaDB or equivalent. Is Postgres considered an equivalent because it wasn't on the list otherwise? Have you included Postgres basically? That's a good question actually. I think it's work but I'm not done yet and definitely I'm going to take it forward that one. We'll discuss that. Thank you for asking that. Really appreciate it. Totally agreeing it. Totally agreeing it. We'll be doing that. I do know there were some issues that some stuff way back wasn't working with Postgres and I thought it was all fixed and it could just be an anomaly that it's not up there. So, yeah. Thank you. Yeah, please. Hi, I'm Takim. I'm working in a digitalist group from Sweden. I have two questions. The first one is that I have a D7 site where I have content in the taxonomies like taxonomy with different fields and in D8 hello. Yeah, please. I have a D7 site where I have a taxonomy with a lot of fields and in D8 I move it to content type with fields. Can I migrate the taxonomies into the content types in D7 D7 to D8? Repeat me once again, please. I have a taxonomy with a lot of fields in the D7 but the same thing I have in D8 but as a content type. You already create the two systems then you need this data from there to there. So, better you get it in a CSV file and do it. Otherwise, you need to incremental migration that can cause a little problem for you but it's better you can have it in a CSV file and I'm going to show that how to migrate a CSV file to D8. So, in the CSV plugin I will map it with the fields which I want. Yeah, I'll show you. I'm going to demo this what we told the process plugin as well as the how to create a data migrated data from CSV. So, this is a fresh Drupal 8 site. You need to go and install migrate module and you need to migrate plus and you need migrate CSV and migrate tools. So, once you install this modules yeah, you install this module yeah, I am having a let's do this. I have a CSV file yeah, this is a CSV file. Can you see it? I'm going to show you how to make it bigger in area. Sorry. This anyway, anyone know how to make it bigger? It's not work. Please come. No, okay. Anyway, this is if you can. It's not working. Okay, no problem. I think this is the first block, that same CSV file, I'm keeping it there. And I have a YML file this is my YML file. Once you install this module you need to go here in the configuration and you need to go to the configurations and you need to import it single import group is migration you're going to say see you can see before is there any there is no users present now we have the users already in the CSV file I kept that in a CSV folder here you can see I'm taking the absolute path and this is my YML file presenting here and this is my absolute path and you can see the path I'm giving it. This is my absolute path for the CSV file I have done and in the CSV file there is a column called name, email, roles same as I'm mapping with the file name I added I need to add the first name and last name then I need to add the last name then one more field I need to add that is that is the full name so I made sure that those fields are added and we need to import this CSV file and then you go to the terminal just type migration status ms-ms you can see one CSV unprocessed no no I didn't I didn't import it actually you can see this I'm going to import it so I'm going to import it now it's not imported it now I'm just checking the migration status I'm just checking the file ID is called CSV the same ID you given here CSV that is the ID you getting hit here group in the group CSV then you say there is an idealist status is ideal there is three rows of data are there and it's not imported it's not unprocessed so I'm going to use drashmi that is called drashmigration there are three files are created and you can see three files are created three users are created this is how it is if you want to roll back so you got some mistakes suppose like you found the dummy user name there is no first name last name so sorry it's not working sorry so if you want to roll back you created those three files you found some mistake you can roll back through same ID you can give it's rollback so when you go here it's rollback so it's easy to do the migration to and fro it's easy to get updated so any questions? so I saw that you are using drash to migrate I was following the official documentation it was saying to use Composer to install drash and it was installing the nine version but the first command fails because it wants the eight version so which version of drash is recommended drash to use situation of drash use drash eight drash eight above drash eight is works but not drash nine drash nine also works mine is drash nine I use drash nine you can see it's a drash nine you can see that it's a drash nine there is a really interesting page somewhere about drash it must be in the drash stock somewhere which might answer your question and it's a really clear description of which one to use and just for the recording with the gentleman the gentleman is going to use the microphone again with installing drash via Composer it all depends on we've installed drash if you've got drash eight in global and then you've installed drash nine in your projects, in your local project then it all depends on which one is running and there can be some conflicts between what's in your vendor stuff and what's in your global and what you're running so you've got to make sure that those two are aligned Yeah so I have two drash running on my system which is let me see you can see this is my d8 drash drash version eight so I got this conflict sometimes so because I need a Drupal 7 so drash nine won't work with a Drupal 7 so I installed this separately and created areas for this drash eight and using it said this is my drash eight yeah if you can see run this it will still work still is created one more question about migrating modules so it is recommended in the documentation to install all modules that you have in the Drupal 7 sites on the Drupal 8 before the migration so you go all this process let's say and eventually there is no more migration path so there is no added value if the modules do not have a migration path so is there a way to know that beforehand if the module has a migration somehow so you save the time of installing everything what is the question so the question is about determining beforehand before you enter all the data and waiting for it to decide what's available is to know what modules have an upgrade path a migration a path the answer is that anything that's in core any modules that have moved into core does have one or it's in the process has some bugs if it's not you actually have to go and look at the module itself look at their own documentation it's their responsibility to do it I can say that address field does have one I looked therefore I knew so if you have a lot of modules that could be difficult for you my question is related to that because you rightly pointed out that if it's a contrib module then it's the responsibility of the contrib people to deal with it but what happens if it's contrib in D7 it's core in D8 obviously the biggest one here is views is there any process even if it's an import rather than a migration for views there's two parts in that the first part is that if it was a contrib module in D7 in D8 because it's core in D8 it has a migration path except for views views is unique, challenging and it is documented in the known issues that it's just way too difficult except to rebuild them in D8 from scratch yes and the general consensus if I remember the discussion correctly with the other core migrators was generally you'd want to do that anyway because so much other things have changed and you might want to improve things and the views it has a UI so it's accessible you don't need a developer to do it yes please so my question is about the specific use case where you have a D7 site which is being used and you have a D8 site on the side where you would like to have the same content flowing into so it's kind of a rolling thing my question is do you think migrate is the right tool to use in that case or is there any other possibilities that would work better in your opinion can you once again you have two sites close to the mic please two sites one is the D7 site that people are using and adding content to all the time and then you have this D8 site which is basically on the side where you would like to have the same content flowing into you know on a rolling you can do it with the web service all the time do it with the web service you can do the same thing because you wanted to in 8 as well as in 7 right sorry I'm having a bit of a hard time maybe we can talk a little more in the agro thank you all it's time for us to stop hope all you are informative please review our sessions in Drupal.org put a comment on there rate it and what all the things you looking forward it and we put the slides as well as the documentation with the github notes you need to we'll introduce you how to do it all the documentation will be uploaded in this week itself please comment anything on us find us in Drupal.org twitter please put the comments there about our sessions thank you all hope you all will migrate to Drupal soon have a good Drupal call thank you if you don't mind we can have a selfie all of us can have a selfie yeah