Are you aware of the power habits have over our lives? Habits shape our lives both positively and negatively. While good habits can lead to personal growth and success, harmful habits can have detrimental effects on our well-being. There are also several harmful mindsets that can create habits that hinder personal growth and well-being. Identifying and replacing these harmful habits is essential for a healthier and more fulfilling life. In this video, we'll explore some common harmful habits and suggest healthier alternatives to replace them. With that said, let's dive into the seven most common harmful habits that you need to replace today, according to experts. 1. Negative Self-Talk Constant self-criticism and negative self-talk can harm your self-esteem and hinder personal growth. Not only that, the way you treat yourself influences the way other people treat you and may make you more prone to toxic and abusive relationships. That's why psychologist Dr. Melanie Greenberg recommends replacing this habit by practicing self-compassion and positive affirmations instead. Surround yourself with supportive and uplifting individuals who appreciate your worth. Try engaging in activities that boost your confidence and self-belief as well, such as practicing gratitude or pursuing personal goals. 2. Fixed Mindset According to Stanford psychologist Dr. Carol Dweck, a fixed mindset is the belief that our abilities and qualities are fixed traits that cannot be changed or improved upon, and this mindset can limit our potential for growth and success. Instead, Dr. Dweck advises us to cultivate a growth mindset instead, which embraces the belief that skills and qualities can be developed through effort, learning, and perseverance. 3. Perfectionism Perfectionism is the tendency to set excessively high standards for oneself and fear of making mistakes or falling short. And according to clinical psychologist Dr. Carla Schumann, this mindset can lead to stress, self-criticism, and procrastination. However, when we focus on progress and self-acceptance instead, Dr. Schumann says we are much more likely to thrive because we embrace the idea that making mistakes is part of the learning process, and that progress is more important than perfection. 4. Victim Mentality A victim mentality involves seeing oneself as powerless and attributing all negative experiences and outcomes to external factors beyond one's control. This was first famously studied by the founder of positive psychology, Dr. Martin Seligman, who said that this mindset can hinder personal responsibility and growth and should be replaced with a sense of empowerment and ownership over one's life. He recommended focusing on solutions and taking proactive steps to create positive change rather than dwelling on problems. If you find this video valuable, please support our work by leaving a like, comment, and subscribe. 5. All or Nothing Thinking All or nothing thinking, also known as black-and-white or dichotomous thinking, involves perceiving situations in extreme and rigid terms without considering middle ground or alternative perspectives. According to an article published by the Alleviant Mental Health Center, this mindset can lead to rigid thinking patterns, unrealistic expectations, and emotional distress. Replace this mindset with a more flexible and balanced approach. Embrace shades of gray, consider multiple viewpoints, and strive for moderation and compromise. 6. Comparison and Envy According to Dr. Dweck, who we mentioned earlier, negative mindsets reinforce negative beliefs, and having a grass's greener way of thinking blocks our emotional growth. Not only that, constantly comparing oneself to others and feeling envious of their achievements or possessions can be detrimental to self-esteem and happiness, as it can breed feelings of inadequacy and undermine personal growth. So it's better to replace this mindset with gratitude and self-appreciation. Focus on your own progress and strengths, celebrate the successes of others, and cultivate a mindset of abundance rather than scarcity. 7. Fear of Failure Fear of failure can hold you back from taking risks, pursuing opportunities, and reaching your full potential, explains Dr. Greenberg. This mindset can lead to missed chances for growth and success. Replace this mindset with a willingness to embrace failure as a learning experience and view them as a stepping stone to success. Reframe mistakes as opportunities for growth and cultivate resilience and perseverance. Replacing harmful ones with healthier alternatives is a vital step toward personal growth and well-being. By acknowledging these detrimental behaviors and taking proactive steps to change them, you can transform your life for the better. Remember that changing habits takes time and conscious effort, so be patient and persistent. Continue to practice self-awareness, challenge negative thoughts, and actively replace harmful mindsets with more positive and empowering ones. And surround yourself with supportive and like-minded individuals who can help reinforce these new mindsets.  Speaking of bad habits, we also covered a video on the bad habits that might damage your brain. Give this video a watch. So, psych to-goers, what are some harmful habits you want to break today, and how do you plan to do it? Let us know in the comments down below. Until next time, thanks for watching, and please share this video with others.


Okay, that's the view of the next session, but before just a few announcements, remember that we will have a final closing session at the end of the program today for 30, I think we have some prizes that you can win, so stay with us until the end, until the end. But now, we are going to start a presentation of things from Feather infrastructure, and it will tell us how to own your infrastructure in a way that we know it's going to be. So, good morning everyone, thank you for coming despite this being pretty much lunchtime. So, I hope you have a sandwich that you're going to join me for lunch afterwards. So, what I'm going to try to do today is to present you a number of tools and solutions that you can deploy within your project or within your company in such a way that you benefit from the current modern workflow that has been introduced by GitHub and popularized by GitHub, but still benefiting from the advantages of doing self hosting. So, owning your infrastructure in the edge of GitHub is not an easy task because there are some very, very big players in the field, and there are a number of reasons why you would not want to use your own infrastructure. Some of these reasons include basically convenience. I mean, if you host, if you don't host your domain name, you can use just Gmail's and you know, Gmail's works out of the box. It's free, well, okay, it's free. How do they make money?  So, Gmail is great, it works out of the box for you, but you are the one that is being sold to someone else. It's convenience, it's work, it has calendaring, it has to-do tracking, it works. You have other big players. GitHub just works.  So, it's really convenient to rely on existing solutions. There are also costs, consideration to take into account here. Having a team of people working in your company or a team of volunteers maintaining your infrastructure can have some costs. In the short term, in the longer term, these are things that you as a project manager or as a person running a company or not just a project in general, you want to take into account. You still need to pay for the domain name, you still need to pay for the hosting, you still need to have people that are present. If you're a community of volunteers, that does mean that you will accept the cost of eventually having your server offline when something goes wrong because eventually the community is not big enough to have CSAT mean that are present all over the world and therefore around the clock. So, it's, you know, it's a balance. It's something that you would have as a manager, most often you will look at the numbers and say, well, we can cut down on that expense because we can go to some other places. And then there is the social aspect. I mean, one of the biggest reasons why people are using GitHub, despite the convenience and the cost, is basically everybody is on GitHub. Let's make a raise of hand here. Does anyone in the room not have a GitHub account? I have three hands. So, I mean, a lot of good girls, guys.  But that basically means that people have GitHub accounts because other people are using GitHub, so there is a social component to that aspect. So, one of the things which you want to take into account is basically how big is your community? How big is your company? And look at what are the advantages of self-hosting. So, why would you self-host? Well, the first and foremost obvious reason is confidentiality. You don't want to have your information out there, then you keep it with you. You don't want other people to have access to it, then you keep it private. If GitHub has private Git repos, private projects that you need to pay for, but, I mean, there are still Git admins, there are still people having access to the file system, so, you know, in theory, it's not entirely private because other people will have access to it. If you're the only one with the access on the server, you're pretty sure that nobody else is going to gain access to it except for security breaches, of course. The second thing is convenience. The best part about self-hosting, so convenience you can see is both a reason why you would not want to solve, but also something why you would want to host your own infrastructure. So, convenience, the self-hosting is really nice because you actually get to pick what you want to host. You get to choose the tools for your needs. You get to compare the different solutions that are present and pick the right one for what you want. And that actually comes to the third point, which is customization. If you get to pick one tool, and if it's a tool that your sysad means, or IT team is, you know, let's say your IT team is in Python because that's what I'm going to talk about afterwards. If you deploy a tool which is great, but in Java, they might have a little bit of problems or need a little bit of adjustments to actually customize it to your need, make it, well, first to get it running, and then to actually adjust it for your needs.  And I'm not even speaking about proprietary solution here, where customization becomes a cost center and not a feature. And then there is the basic idea of principle. I want to own my infrastructure because I want to be relying on open source software because I want to. Because I know it's a cost, I know it's sometimes not convenient, I know it gives me a lot of flexibility, but it's just something which I want to do. So it's also something that depending on who is managing the project, depending on the spirit of the company or the team, principle can just be one of the reasons why you're owning your infrastructure. So I'm going to talk a little bit about what's, which kind of project I'm speaking about here, because there are a large variety of projects. So when I'm speaking about projects in the rest of the presentation, I'm speaking about community project. But when I say community, I'm not necessarily referring to community of volunteers, which you normally get in most open source projects, but I'm also speaking about the community of employees. I mean, your startup, your company itself is a community, and you all work together towards your goal, which is most likely getting paid at the end of the month. But your community might also involve both. You could have volunteers and you could have people paid to work on the project. So I'm, when I say community projects here, I'm speaking about all of these communities. When I speak about source code, I don't necessarily speak about computer programs, but that can also be designs. That can be documentations projects. That can be anything that multiple people want to work on. It could be expense reports for whatever it means. So yeah, I'll really mention some of them. So it can be all these type of projects. We'll have similar kind of needs, and these are the one which I want to present. When you run a community, so regardless of the type of community which I presented, when you run a community, the community is, you need a place where people can discuss, you need a place where people can exchange ideas, and nowadays it pretty much means emails. I mean, you can have different communication channels, you can have chats, you can have the coffee machines in the corridor. But at the end of the day, what you want is, you really want to have an email service. Emails are asynchronous. You can get them whenever you want. You can send the information and the people will reply when they can. And it also keeps tracks of what was said and who said it when and what. You also want to host your sources. So you actually want to host the core of the project, being documentations, designs, or computer programs.  So ticketing is really handy because it allows your manager to say, well, we should work on that. And then it allows you to track down, well, these are the things we need to work on. And your manager can go there and prioritize tickets and close some and open new ones. It's also a place for the community to report ideas. We are doing that, and this is not working, but we should do that. And this will work. And then it's also a place where you can discuss change proposal. So basically this is what GitHub calls pull request, which gets itself call request pull. And it's just basically, I want to do this change whether you think about it. And then we need a place where, so we have different tools, we have communications, we have ticketing, we have source code. We need a place where you have a account system. You need a place where your employees are listed. You need a place where they can log in to the different tools. And you preferably want something which can cover all of your use case. So I'm going to go through a little bit of the three main ideas here. Account system, hosting, and communications. And I'm going to do that in the reverse order compared to what's on this slide here. And start with the account system. So the account system can be as simple as system user. So you just, someone comes in the company, you just create a shell account on the server, and they will use this username and password to log in on the different service. It can be a solution that is homemade. So the federal infrastructure is using a program that's called FAS, the federal account system. And that's something which is home baked. It fits our needs. It offers support to all the way people can sign in. They can upload their information. And then we go from that account system to the different machines that we run and synchronize information there. It can be something which is more enterprise-like or enterprise-ready. The big names in there are probably LDAP, free IPA, which is an easier way of deploying an LDAP, I'm going to say, which has a bunch of bells and whistles, which you probably want to look into. It makes your life a little bit easier. And if you're not in the Linux world, there is of course the Windows Active Directory server. So all of these are going to store your username and password, but then you actually need to use your user account to authenticate. And one proposal for this is the epsilon project. So the epsilon project is a pretty neat project. It's a Python-based project, so I'm going to specify this for all the tools which I'm presenting. They are all written in Python. One of the idea being that if you install all of them you get a certain harmony in the technology which is being used. So there are also solutions. I'm going to show you the solution because it's a Python project and it fits in the flow here. So you can imagine epsilon as being some sort of portal. It takes information on the back end. So the back end is like where you store your username and passwords and user information and it exposes this information to your applications. And the back end can be any of the applications. It can be a Kerberos system. It can be Apache Auth authentication. So if you do the famous HT Password file on the server, epsilon can just read that file and expose it to the application. It can use PAM. So if you do the first approach which I presented, which system local user accounts to the server. It can be basically anything. It's a simple Python file which has a single function which for a given username and password returns a true and a false. So whatever your account system is, you can just write it around a Python function and make it work with epsilon. And then on the front end, it exposes different protocols. And these are the famous protocol. I think everyone has heard about OpenID. It's a little bit less known than OpenID. And you probably have not heard about OpenID Connect because this is brand new. It's basically an OOF2 protocol on-stared written by the OpenID consortium. And that fixes a number of the issues that OOF2 was bringing along. So you can actually pick. You say, well, my company is going to use LDAP back end and all our applications are going to use OpenID. But then one of your applications is going to use OpenID Connect. Well, that's a problem. You can actually enable one of the front ends or you can enable two of them or you can enable all of them. So you actually free your developers from the authentication protocols as long as they rely on something which is known and well-developed. So if you want to know more about it, there is the epsilon-project.org website which provides more information. And bring a beer. But if you want to give him a beverage upstream is wearing the red t-shirt on the back of the room over there. Thank you, Patrick. So the second thing is, so now we have a consistent way of users taking out on tickets. The second thing is how to host your project. So we need a place where we host our source, where we do ticketing and where we do change proposal. For this, I propose the Pegger project. Like I say, it has ticketing, it does change proposal via pre-request and it can host the documentation of your project. So this is pretty much my baby.  Just for in general, if you have questions feel free to interrupt. I might be going through open doors here, but if you have questions feel free to ask. So Pegger, what is it? So the first question people ask is how do you pronounce it? You can pronounce it however you want basically as long as people know what you're talking about. The idea is it's a French terminology for the hermit crab, for the family of the hermit crab. And the hermit crab is this little guy here that lives at the bottom of the sea. So it's a very small, it starts as a very small, I have no idea how to call that shell. Crab basically, because the shell is the whole trick about this crab. So it starts as a very small crab and it looks for a place to live and it looks for a shell basically. And as it grows, the shell doesn't belong to him. So it finds an empty shell at the bottom of the ocean, moves in, and then as it grows and the shell becomes too small, it goes to find another shell and then another shell. So this could actually be three different types of crabs, but it could be the same crab that just grew up and moved from shell to shell. And I really like, when we come up with the world, I really like the idea and the comparison because one of the main ideas of Pager is to be able to allow your project to move from a Pager instance to a Pager instance. One of the ideas which I had when we wrote Pager was being able to have two Pager instance in your company, one that is exposing the public information, the public link to the private instance of Pager and your developer internally only work on the private instance and your community can contribute in the public instance and tickets and pre-request can be synced from one place to the other. And one way we did that is that basically one project in Pager equals four Git repositories. There is one that is going to be your core Git repositories, which we all are used to, which contains the sources. There is one which is going to contain your documentation. There is one that is going to contain all the metadata of the tickets, so basically every comments on a ticket, every actions made on a ticket is going to be reflected on this Git repo and there is one that contains the metadata of the pre-request. So again, who opened it, again switch branch, what were the comments somewhere. That also allows for local access of the information, so if you travel, take an airplane or if you come to DevConf or live DevConf, you can actually clone the ticket repo and access it offline during the flights and you could actually comment, we don't have the CLI tool to do that right now, but in theory you could comment to the tickets offline and then when you find Internet again you just Git push and the UI gets updated from the content you pushed in the Git repo. I can say it could be used to sync project between Pager and it's also the mechanism that we are using if you want to migrate to Pager, so if you come from, so Fedora is running the Fedora Austit project which is a bunch of track forge and we are going to decommission that project and so we are moving people off track and into Pager and one way we do that is that we are eating the XMLRPC end points of track, generating the JSON blobs which represent the issue metadata, putting that in the Git repo of the tickets, pushing that and then suddenly all your tickets are moved from track to Pager. It can also be used to move between Pager instance like I said before, it can also be used to move off Pager although I have no idea why you would do that. There are two things about Pager also, we have very strong dedications to actually make Pager possible. If you want to run Pager, it is possible. If you want to run Pager against an open ID server, it's possible if you want to run Pager against using local user account, you can actually tweak Pager. It has three authentication models currently. It has FAS and the FAS login and first Fedora project contributor agreement so it's ensured that people that are contributing to Pager, it's basically the same thing as the FAS module except that it doesn't enforce the FPCA and you have local user account so you could have a public Pager instance and then people are just creating accounts as they want just like GitHub does basically. The second thing is that we are and are moving more and more towards service oriented architecture because as the project grows we realize that in a synchronous way it's not always the fastest and not always the most reliable in some ways. So to give you, since we are in the micro service topic, I just wanted to give you a little bit of an overview of how Pager looks like these days. It looks a little bit messy so I'm going to try to box you it's a little bit pointer. Let's start from the left. You have the web user on the left. Sir? There is a red point. So on that side we have the user and its web browser so that's the part that we care the most about because they are the users but it's a part which is not in our infrastructure. The core of Pager is basically the core of the application here, the web server, it's a flask applications and then this part here has then a number of services and it's a part to the web base, it updates it and carries it and then here we have a second service which is the documentation server. So the idea we need we basically use the documentation server to run it in a different domain name because the documentation is something which is uploaded by the users and therefore not trustworthy, sorry folks. To avoid any potential cross-site scripting we actually run the source hosting and if you deploy your own instance and you want to run the documentation server it's highly recommended that you actually do the same setup so two different domains. Subdomains is not enough you really want different domains. But basically so here we have, I'm going to throw the different service first and then I'm going to spend a little bit more I'll try to extrapolate on that. So we have a filter here.  So when you comment on a ticket in the web UI it will send a notification to all the people that are subscribed to the project or to the issue and the user can directly reply to that ticket by replying to the email and replying to the email is going to go through the filter and the user is going to be reflected in the UI. So basically you can discuss around an issue directly using your mail client and not having to go to the web UI all the time. One way that we actually so when someone comments on the UI or via the filter to a ticket there is the events of server down here that actually sends a server sent event back to the browser to the web browser which means that when someone comments on a ticket they are actually able to refresh the page live or to add the comment live. So it's actually quite funny because when you have two people walking on the same ticket you can see the comments appearing one after the other. So it becomes like a chat system where you just type answer someone and then answer the next answer and so on and so forth. So it's really nice to see. That works so the live refresh works on tickets and the web book server which sends web book notifications. We have a CI service which is now at the moment tied into Jenkins. So basically when there is a pull request that is created or updated it will trigger a web book on Jenkins to start the build and at the end of the build it will receive a web book called by Jenkins to tell that the build was finished. It will then check what was the result of the build, did it fail, did it pass the information back into the pull request that started the process. And then we have a last service at the top here which is the log com service. And that's the most important service because you know the world famous by GitHub calendar IKMAP that shows your activities through the days Pagura is the same. That's the one that is responsible for filling commit information for you. So it's really one of the most important. So the nice thing about this design is that basically every single piece here is optional.  I mean you won't be able to use documentation but that's a configuration key. You won't be able to have web books notification but that's also a configuration key. You won't be able to have live refresh of the page and that's fine. I mean the core experience about a senior project is here. And one of the things that we are doing about how to integrate with Git is that we actually rely on Gitolite which is well known, well tested and I know it's the only piece of pearl that's going to be in this presentation. But I had at one point the idea of maybe moving away from Gitolite and use our own module that would uniquely look into the database if you have the permissions to push or create branches and so on. And actually someone was like please don't do that because one of the key ideas one of the benefits that he was saying in Pagura was that it was really an existing technology. So if you really have a Git server internally or in predictions you can basically put Pagura on the top of it and it's not going to change the experience that you are already using your Git server. So that's a little bit how it works these days. Some of the features I've already mentioned a few of them. You can reply to tickets by emails. We live refresh the page on tickets and pre-quest. You can do self-registration and it's basically a self-service. So if you do local accounts to Pagura you can do self-registration. You can create your project. You don't need anyone to create a project for you. You can create a new project button and you're done. It has the calendar activity map which is very important for manager because they show you what your team was working on. It has notification via webbooks but also via a fed message which is a message bus. So instead of having an HTTP endpoint that waits to be called you can just listen to the bus and react on events there. You can flag. You can get a bus which allows third party integration to your pre-request. So basically Jenkins integration is done by a flag. At the end of the Jenkins build the Pagura CI is going to flag the pre-request saying this service said it was 0% so it was a failed build or it was 100%. It was a successful build. The idea of using percentage is that it allows for things like report. For example, instead of saying 0, 1, 0 test build test fail it could actually tell you which percentage of the test failed and which percentage of the test built.  There are a few tag issues and the idea of tag is that you can actually then filter by tags and you can combine tags filtering, you can filter by multiple tags you can exclude a certain tags from your filtering and then when you're done you can actually save that in reports so that it's easy to share the link with people and you don't have a URL that is five kilometers long. So that's few of the features there are some more I'm probably forgetting some here so where we are now we have accounts, we have authentication methods we have our source hosting what is missing is basically a place where we can discuss a place where we can announce, change there is a new version of Pager where we can support outside of tickets so it's someone trying to do something doesn't want to do the tickets I'm trying to do this thing could you please help me for this the main answer is most often and for that I would propose you the Mainman 3 suites so Mainman 3 was released a couple of years ago it's the new generation of the world famous meaningless program, Mainman it's Python 3 based which means that it's while the other two are actually Python 2 based and it's designed around a core Mainman core which talks to the SMTP server and exposes a REST API which is then consumed by two Django applications Perseus, the admin interface and HyperQT, the archive interface so this looks, this is basically how it looks you get the SMTP server that doesn't look like an SMTP anymore here you have Mainman core that's retrieves information from the database, the admin interface that fills the database and HyperQT that goes updates the database and reads to it and gets the message received directly from Mainman core so to go a little bit more about HyperQT HyperQT's goal was to bridge firms and meaningless so the idea is that you can actually go to the meaningless or the UI and it would be as if you would as if you were on any firms so you could like basically post a new, start a new thread on the meaningless that you've not subscribed to and not get the emails about this meaningless you can go to the UI, start a conversation just follow that conversation ignore everything that's going on in the list you can be pointed to the conversation and just reply on the list you can reply on the UI without using your main client and it will just work and then it was I did some of the social network features you can actually plus one or minus one someone or a certain email you can tag conversations so that you're able to find them back it has one of the features that Mainman2 did not have it has search you can finally search your archives and find that email that was sent two years ago and that you know it was sent we already discussed that point and you can actually find it back now it also has some interesting statistics about the meaningless itself so it gives you like it gives you a number of females per day over the last 30 days so when you want to kick off a discussion it gives you an idea of what are the chances that you're actually going to get an answer it also gives you the most active people so that gives you an idea of who is going to likely to reply and is it a bot or is it a person these kind of things so it's actually being run by the federal project so if you want to see just see how it looks you can see at least the federal project attack so I think that covers it we now have a account system, authentication we can also also project and we can discuss about it so do we have any questions left? so how would I compare Pager and GitLab feature wise Pager is probably probably lacking some of the features let's be honest on that Pager was started about two years ago now and as one main developer myself and a community of contributors which are doing a very good job but under space time GitLab has a company behind it I assume is a little bit more than one person and a community of contributors so Pager definitely lacks some of the features from GitLab and from GitLab on the other side we are evolving very quickly there is a release of Pager most of the time I do at least one release a month and we have had people that have been working hard on it, pushing new features so it really changes fast and I'm very open for our fees and even more open for progress of course so yeah it's a country give an idea of how much feature we are lacking how much feature we have I do think we have things that they don't have and they definitely have things that we don't have so I didn't do that myself I know that so when I was seeing that Pager is strongly dedicated to self hosting we already have a few Pager instances in the world that we don't manage there is one from Pager Space in Bruno which has apparently nothing to do with Red Hat so Pager Space in Bruno folks learned about Pager by themselves and decided it was cool and deployed I've heard about a couple of companies deploying it and there is the community which is behind notobug.org that is currently running a forge using GoG so the goal line and they are not entirely happy with GoG so they are looking to move away from it and they did an entire spreadsheet comparisons of the different solutions available good, GitLab I'm not sure if you can see I was in there but Pager gets into that and apparently that choice is going for Pager so I don't have exactly the entire table in mind but there were a number of features that made Pager appealing to them more than GitLab was it might have to do with Python it might have to do with managing the thing in the long term but I wouldn't want to go into trolling Ruby right now Sure So the question is why do we decided to go from Pager from scratch instead of using GitLab so I have to go back to the generesis of Pager basically it originally started as something I wanted to play with Python and Git and see what kind of libraries are available and how do they perform and what we can do with it and when you want to play around with something you need to have some kind of project that you want to build around so my first went to do a Seagate like in Python and it was just a pet project I spent a couple of weeks on it and I had I was able to display commits to the commit tree, the commit itself I was able to do basic pre-request not everything was perfectly working but the basic was there and we then had the problem in the federal itself we wanted to have more people contributing to the real engineering part of the community and that implied having a place to discuss around features and pre-requests and GitLab was not an option GitLab was just out of the plate but that means it was something that we had to host internally or in the federal infrastructure and GitLab has been trying to get to get into federal for a few years there has been at least that I know Google Summer of Code dedicated to packaging GitLab to actually be able to deploy it at one point but one of the requirements of the federal infrastructure is that things have to be packaged as RPM and therefore GitLab is just not available as an RPM in federal or IPO so one of the problem of GitLab is it's a huge pile of Ruby gems and managing the dependencies in Ruby is a little bit of a tough and unpleasant work I apologize for any Ruby person in the room which makes basically packaging GitLab there has been years of trying to get GitLab packaged and that never succeeded so we were left with project like Calicia there was also Fabrikator that was on the roadmap but I actually discussed with the Calicia upstream a couple of years ago and they are very strongly dedicated to review requests so it's a little bit like Garrett but much less about project hosting so a ticketing system was something that they had in their mind but something which was like long way down the roadmap so maybe they will come with a ticket feature if someone comes up to it but it's not a priority for them and it wasn't their use case so at the end we had the prototype of Pagure that was kind of working we had GitLab that wasn't packageable there was Fabrikator and Calicia that don't really have our use case so we got a green light to go with Pagure and it was like okay let's do it and that's basically the genesis of Pagure the question is which license is Pagure it's a GPL license I believe version 2 it's not even a GPL it might not have been smart but we were nice so you can host it you can have your own modifications and redistribute them or not that's not using the A currency basically more questions, more RFEs Rotten Tomatoes, flowers well thank you then one of the single Fabrikators I really don't like the UI and it's like Calicia the use case is really much about reviewing changes I think Fabrikator has a little bit of ticketing you can use the task for tickets but I don't think it has the modifications or even codos yes because in KDE we are moving to Fabrikator yeah one of my problem with Fabrikator is making the UI I just don't like it we have a Fabrikator instance running already so I was very much like I did this prototype Reliance Engineering was looking I let them basically look at the different options and they were like okay we're going to look at yours for me but yeah I did not myself did the comparison between Fabrikator I can say that I'm always lost when it comes to the UI what does it do what does it not want as I wanted to but that's I know that the Calicia guys were very strongly in favor of for requests not really much not much into ticketing Fabrikator does a few things I don't know how easy it would have been to move from track to Fabrikator or this kind of thing thank you do you have some time to sit down and talk about the migration of the different ambassadors in France do you want to go for lunch at one point I don't know if you want to eat if you have already eaten no I haven't actually I'm having a problem I'm so tired so tired so she's she's she's she's she's she's she's she's she's okay then we're that's perfect that's one of the things we have here in I think it's here where we know we think it's more so we can find some space or try to sometimes it's only about the access and we then we like to stay for like I think that you have this what state real estate and let's let's we are we're they're outside we're We're we're we're We're we're we're we're So it's easier if you change something in the classroom. A lot of people work in the NGCF, so it's better to do that. So the children work in the NGCF. Okay. How's that? So obviously this thing is really important. So I mean, it's easier if you just, yeah, that's what it looks like. That's the default that you send your peers. If you add something new, it's fine. Yeah, it's a special thing. It's a lot easier if you're a teacher. But you don't have to deal with it. Because that's... Okay, that's something that is really small. Think about the... You may have a little bit of patience that I can find. So the track is real. It's fine. It's all just a shot. It's true. I think that is okay. I'm still okay with getting it. It depends on the situation. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. Okay. So this is something that's been going on for a long time, so I've never seen it before. That's why I'm so excited to see the question now. So what is the end result? So this is actually going to be looked at later. So this is later. So here's all of this, the extreme, all of the important aspects of each person. So this is a barrier, and the strengths of each person. You can find a way to get this all together. You can do a lot of things with a lot of stuff. You can get all of the questions. You can do a lot of things with a lot of stuff. And you can get all of the questions. And the end result is going to be a lot of questions. So I'd like to see what you guys can do. That's going to look at everything. Okay. The thing is, like, we have, like, we have reports of all the expenses we have. That's going to be a group. Not this one person, which is, like, a better problem for all of us. But I would just add that person. See, so now everything's going to be more real. It's a group of people. Okay. So we're going to be able to do all of this. We're going to be able to do all of this. We're going to be able to do all of this. We're going to be able to do all of this. Okay. All right. I would just agree. I have an iPad actually, Bill will be okay. We had some problems with Macs. Yeah, I had to use VGA. I had a problem yesterday with the laptop, so I already need to go get it. That's fine. So it's a different approach from the time. Do you want to just speak or have the questions at the end? I think I'll have. I should have time for the questions at the end. So it's like 40 minutes plus 10. Yeah. And I've already started giving you the signs, like 3 minutes, 5 minutes, what? Great. And so far. I just remembered, the microphone here is in the ear, just look at the corner. Okay. This one is in the ear. And you can look at the questions. Really? Yeah. And I have somebody else here who has these discussions at the end, but not the left one. Okay. I can do that. Do you want the speaker for the slides? No, I don't. I'll just click on mine. Okay.


Amanda and Pilate. Hey, how's it going? Hello. It's going good. It's going good. We're here today to talk about how to, or not the only way. There's many ways to. But kind of what I've been learning my process, I guess, on migrating WordPress multisites. And specifically, I've been doing a lot of commas in the box open lab stuff. But the nice thing about commas in a box is it is really just WordPress multisite. So this kind of applies to both. And I guess that's maybe thing one to note is, in my experience, it is no different than any other WordPress multisite, which is great. And honestly, a huge credit to the team that works on those projects teams. For sure. I mean, it's definitely its own kind of unique thing. But the fact that it's so different and it does serve a very specific purpose, but then the fact that it's kind of universal to WordPress multisite that makes it so approachable for stuff like this. So that's awesome. Yeah, it is super nice. So I've been doing. I'm not the only one at Reclaim that's done a commas in a box migration or anything. But I've been doing them recently just to kind of have sort of one person focused on that because we actually have just a lot of interest from a lot of different places right now in commas in a box hosting specifically. And so I've done many of the most recent migrations. Just it's kind of just nice to have one person on there to keep to notice patterns and things like that. But again, the nice thing is so far, it's kind of been pretty smooth. Yeah, pretty smooth. I've had very few things. I had one migration I did where they were on a slightly older version of the commas in the box open lab theme. And there was like a menu element that was a little bit broken on the phone, not related to the migration. It was broken before, still broken after. But that's the only thing. And we just fixed it. That was just a small CSS thing. And we could have also just upgraded the theme. That also would have worked. But I wanted to take as few changes as necessary right after our migration. But yeah, so we're going to talk about kind of, I'm going to go through sort of my to-do list when I'm doing a migration. I've got a bunch of notes. I actually just was assembling here a new notes document that's stream safe that doesn't have like database passwords and stuff for people in it. And it's kind of my reference. I basically, when I'm doing a migration like this, I make one of these notes every single time. And I'm referencing it throughout. Because typically, what I like to do for migrations, especially for something like commas in a box or any WordPress multi-site, is I like to do a test migration a week or more before the real thing. And then when it comes to the real thing, it's a lot faster. Because I've run into any weird things that may be the case. And also, most of the files have already been synced. So that will, and we'll talk about that. But that's basically leveraging the power of our sync. So you're pulling updates, but not the whole thing? Yeah, if you have 150 gigs of stuff in your multi-site, the second time I do that sync a week. You're pulling three gigs of changes, maybe? Probably way less than that, honestly. Because it's basically only what people have uploaded in the time since the first sync. So that's huge. I'll be honest. I only said three because I wanted to be in the same order of magnitude as the first number. Makes sense. There isn't, as far as I know, a good way to do that with databases. Like you basically, you don't pull changes on the database. You just do the whole thing again. But the nice thing about databases is they are designed to be relatively fast to export and import, I say relatively. Sometimes relatively is 40 minutes, you know? I mean, it depends on your database setup, too. Well, it depends on the size of the site, right? Yeah. I know recently when we were spinning down UMW blogs, I think Chris did an export on that database and it took an hour and a half. But that was like 200 gigabytes of text, right? Databases just hold text. Yeah, yeah. So much text. Like just an unfathomable amount of text. So to me, I know. I saw an 8-gigabyte database the other day and I was just totally floored. Yeah, that's pretty big. Typically, we're talking under a gig, well under a gig, and then you usually zip them, too. And so we're usually talking like under 100, often like under 150, 200 megabytes once they're zipped. So yeah, we'll go through my process. I have set up a open lab that we're going to migrate. There is almost nothing on the open labs. It's not going to be like a particularly impressive migration, although it'll be nice because it should be fast. So we don't have to literally sit here and twiddle our thumbs waiting for an R-sync to finish. But yeah, I basically just set up a basic open lab. I'm going to actually share my screen here once I get some things ready. So I've got my notes document over here and I've got this is the open lab. We're going to migrate right now. Any chance you could zoom in a little bit, like one or two on both sides? Yeah, perfect. And honestly, we don't need this at the moment, so we'll get back to that. OK, cool. Yeah, so what I've got here is the existing site. This lives on shared hosting. What I'm doing here would apply to migration from basically any Linux-based web host, but I'm going to do it from shared hosting to ReclaimPress. Full transparency, I have not done any migrations to ReclaimPress yet. That's what a live stream is for. Did you say it? Yeah, that's what live streams are for. We'll make some mistakes today. It'll be rad. But theoretically, this shouldn't be that different from migrating to ReclaimCloud or, again, really any host. Most of the stuff I'm doing today will apply to basically any type of migration between hosting platforms with some exceptions. I'm probably going to use PHP MyAdmin today to do the database import and export, which isn't always going to be installed. It will be always available on ReclaimStuff. So you've got it in C-Panel, so for shared hosting or domain of one's own. And you also have access to it in ReclaimCloud or ReclaimPress, so I like to use that. But I will talk about how to do it via the terminal because there are times where you need to do it via the terminal when you've got a large database in particular. And then what we're going to migrate to is this environment I made in ReclaimPress. Now we are going to end up using both the nice interface here. Actually, we're going to be primarily using the other interface, the app.my.reclaimPress, because we need to do a lot of stuff at the terminal. So we'll be doing that. Larger here also, please. No, yeah, that's fine. I'm right. Actually, I do need to do this before I. Maybe one more? I don't know, Amanda. I think definitely bigger. I'm just, it's a weird balancing act in ReclaimCloud because I have to look at it. Because of how big the terminal, yeah. I think you could go one smaller if you wanted, yeah. That's fine. That's good. Cool. All right, so we will be mostly set here on the other side of things here. I will be using both the cPanelTerminal. Actually, you probably don't need the cPanelTerminal. Really just the file manager. So what I've got here is I'm already in the, I wanted to check out, OK, where does this site live that I'm my living? So it's in my shared hosting account. It's at homejadenmeopenlab.jaden.me. That's where it lives right now. So if I pull up my notes, what we're going to do is kind of go through this whole thing one step at a time. So first thing I like to do is I like to just get information about the existing site. And I like to have it handy. So the existing site lives at homejadenmelab.jaden.me. That's what we've just found. I'm going to go in the WP config. And I am going to look at and get details about the database from here. And what I typically will do is I just kind of copy this entire database section so I have it handy. So I will literally just paste this in a doc. Nice. Or later. Oh, I had no city and let you do that. Yeah, that's a markdown. If you have a cold block, you can put different languages here. Usually I'm putting bash, so like this is bash. That's just terminal, basically. But for WordPress stuff, you put PHP because it is a PHP file. And it will highlight it, which is just nice. That's like partially for labeling and partially just to style it, right? It's really just coloring the text. That's all it's really doing in this case. But it's just nice because what I'm looking for. I could, instead of copying that whole section, I could, of course, or I go database, name, and I could paste just this in. That's really all I need. But I am lazy, so I just do the whole thing. I mean, you're rewarded for that. Obsidian makes it extra pretty because you've chosen to take the easy road. I think it's good. There's also another somewhat reason this is sort of a backup too. I'd like to have all of this information here. I'm going to do the same thing for the cloud environment because these will be different, right? So this will have its own username and password. And database host name, character set, should be the same and this should be the same. I guess I don't really need that, but whatever. I like to put all, databases are basically black magic to me. So I don't trust that I know anything about them. So I like to just grab the entire, what does WordPress know about the database section of the file? Just so I have a backup of that too. As well as referencing the name and password and stuff. All right, so I've already created the destination environment. That's where we're going to migrate to. And like I said, I created that in ReclaimPress already. I'm actually going to probably need to zoom out a little bit here, yeah. So I'm going to go in ReclaimPress and go to the file manager and go to all. And we'll check out the wp-config file. One bigger please, maybe. This is also partially just maybe in my eyes per thing. We'll get there. I have to figure it out. Okay. So same thing, I'm going to just copy this whole section. And so I guess I could put the path. It's always going to be the same on a cloud environment. It's always going to be var, www, webroot, root. And yeah, sometimes I throw other information here like the, if I've got an admin password for WordPress itself, I may put that in this section. Yeah, whatever, there are notes. That's really all this is. Okay, so then the next thing I like to do is I like to always use SSH keys. This isn't strictly necessary. We're going to really only need this for the R sync. But technically I could use a password. I could type my password in to do the R sync. But there are times depending on where I'm moving from that keys will be necessary. Like if I'm moving from something that's not on our infrastructure or if I'm moving between two cloud environments, it's often easier to just use a key than like turn on password authentication. And it's just nice. I don't have to type the password. And frankly, it's really not that hard. So I've got linked here an article that is handy, but I really just need to generate the key and then I need to copy the key and paste it into a file on the source side. So from the destination environment. So now we're going to go to the terminal here. I need to do SSH key gen. I like to use the newer key standard. I would recommend that. So that will do that. And I can really just enter through all of these prompts. Then I need to copy the contents of the public key and add it to the authorized key. And that will be actually here. So it'll be in home directory.ssh authorized keys. So I need to copy it. So I'm going to just do SSH. I guess I could, instead of just saying this, it'll look like this. That's... Cat is just going to display the contents of a text file. Okay, okay. So there are many ways you could do this. I could use the file manager and just open it, but we're already in the terminal and it's always going to be located here. So I'm kind of viewing this note as like every single time I do a migration for now and I'm probably going to copy this note and then make specific things. But this will always be the command that will give me the access to the key. So if I paste it in and hit enter, that's the key. So I can copy this whole line.  I could do this from the terminal, but I won't really need the terminal for anything else. So I'm not going to. I'm going to go to the .ssh folder and then authorize keys to edit this. And I'm going to add another line. Now, one thing that's tricky here is you'll notice that what I pasted here actually wound up on two lines, three and four. This needs to be all on one line. So that was probably just due to the way I copy this in from the terminal. So zoom. Yeah. I'm getting my audio back. Yeah, man. Oh, I think, no, not anymore. Okay. Okay. Yeah. I heard it for a second, but not anymore. All right, cool. So anyway, so that's set now. So, well, I need to save the file. So just pasting my key here gives the destination environment, so the cloud environment, the ability to SSH in to my shared hosting account. And one thing I should add here is I should test this before I do anything else. So test the test SSH, which will look like this. SSH, it'll be username at server. So in my case, for this one, it will, let me go back to the terminal here. So it's just light speed at node? Or is this a different? Because it's on the destination going to the source. Right, right, right. So it'll be, I know this, I'll cut my head because it's my shared hosting account, right? But SSH, jaden.me at jaden.me. They'll say, hey, you sure you want to connect because it's the first time it's connected? See if it worked. It did. Oh, right, you're on Galaxian now. I am on Galaxian and I am all set. So I can exit out of there. Really just to test. Just so that later when we do an R sync, we know it's gonna work. All right, now we're ready to do like the migration part. So the first thing I actually do before I dump the database or move any files is I like to make a backup, an entire backup of the web route on the cloud. The reason I do this is we are going to move the WordPress install from shared hosting, including its WP config file, each the access files and both those things may need to be updated with, well, they will need to be updated with information that is in the current cloud files and I don't want to overwrite them. I could do our sync commands that like exclude certain files but I actually think it's easier to just make a backup of everything and then I can compare it because sometimes there are times where like, okay, I do wanna keep the majority of the WP config file from the old site except I need to put in the database information from the cloud. So I need to kind of combine the two and we'll do that, I'll show that but instead of making backups and stuff, I find it easier to just let's make a back, sorry, instead of making backups of individual files, I find it easier to just make a backup of the whole folder and then clean out the web root folder and start fresh. So I can literally just run these two commands as is. So we're gonna copy the web root and we're gonna make a backup of it and this will be root underscore back. Can we call whatever I want? That's my convention. What, I'm hitting directory, I don't know what that means. Not to distract you Mm-hmm. Well, you're doing this. I think I understand but I also feel like maybe I don't. So can I try and restate what you said? Which is pull a backup, upload the backup, upload, make all the changes, check things and then see and then do the sync. Yeah, I explained ahead too many steps for it to make any sense to be honest with you. Right now, we're just making a backup of everything in the web root. And this is on the destination. So this is a empty WordPress site, but the reason I'm doing this is database information is in there and HG access file stuff is in there, things like that. So you can grab, making the backup of the blank site means that you can grab that information from the backup. Later. Without having to do any weird stuff. Yes. Okay. Exactly. And I could put this backup anywhere. I choose to just put it next to the original and I call it root underscore back. BAK is like a convention and like Linux stuff that I see from time to time. And so I do that, but you call it whatever you want. Okay. And what I forgot is I need the dash R flag on CP for it to copy folders. Okay. So that's what it was omitting. That's why I admitted. It was like, oh, I admitted that folder for you. It was like, that's all I wanted to copy though. So now I should have two. There we go. And they should be the same. So if I go in there, there's all the stuff. Now that I've made that, I can go into the original and I really don't need any of this stuff. And technically, when I do an R sync, it will overwrite any files that exist. I like to be extra cautious and just clean this out. So there's nothing left over from the original. So we're only, we know all of the files in this folder are exactly the same as what was on the shared hosting side. So I'm going to do that too. This is probably not a necessary step to be perfectly honest with you, but I'm going to do it anyway. So it won't hurt anything. This is empty now. If I try to visit this site, it shouldn't work anymore. Yeah, there we go. So my source site, I guess we never really visited it, but it probably said, mind blown, a blog about philosophy, you know, the default WordPress theme thing, which I kind of wildly hate that they have that in the default theme. Like, why can't it be a more generic site? Anyway, it's just annoying that every time you set up a WordPress site, the first thing you have to do is either change the theme or go and delete blocks from the homepage. Like... This isn't a full site editing complaint, but... Yeah, it's... The 2021, well, the 20, what I'm saying is the 2021 that was like, you're running the Swedish Museum of Design or something, it was like... That was worse actually, because it was like, there was like entire pages built around that too. And they would only exist once you went to the customizer for the first time. It's super annoying. I thought that the default color scheme for that. I hated the default color scheme for that. And I thought... Oh, the tan and red? Yeah. Yeah. It was great. So I... Right, so we are ready to do the database thing. But what I consider the scary part... I like to use... What? Eric's in the chat defending full site editing's honor. I mostly like full site editing. I just cannot imagine why you would put blocks that literally everyone will want to delete on the first install every single time. I can kind of defend it in the context of... Like from an instructional standpoint, you have to interact with the tool, right? But it's very annoying as a professional who installs like probably at least one WordPress site a day. Yeah.  But I actually am kind of, especially in the newest version of WordPress, I think they've made a lot of the tools really, really good. There's still a little complicated, but you can do a lot with it. And I was just talking to the two of you in a different meeting about, I was able to like completely recreate a design just in full site editing. And due to things that aren't really important, I'm gonna have to use a classic theme. And I'm gonna have to make a whole child theme just to do what I was able to do in full site editing, which I'm bummed about because it was pretty easy to do in full site editing. Anyway, I'm mostly a full site editing. As I think Shannon and I have said in community chats, full site editing apologist over here, so. But- Eric has agreed, by the way, that you are right about the amount of deletion. Yeah, it's just, it's a little bit obtuse. Full site editing has no honor. It wants to be Squarespace. How can that be honorable? All right, so we're gonna dump the database. I'm gonna do it two different ways. Usually I will use PHP MyAdmin for smaller sites, just easy, because I can go in here and the database is WP6. So there's gonna be a scary amount of databases in here because I have a whole bunch of- You've only installed six WordPress sites? Well, no, because it'll restart numbering in most cases, you know? So like if you deleted one, if I made it right now, I would go WP4. So- What? There's no four, four and five. I've made six, and this was a six, but between the time that I made this one, I deleted two WordPress sites, four and five. So it will go through and start at the lowest available number. That makes sense. I was so confused at the idea that you've just- Yeah, I made this open lab site literally yesterday for the stream today, but after I made it, I was like, oh, I've got these two sites I don't need anymore, and I deleted them. Oh, okay, okay. Yeah. Anyway, so here is the database, and I will export this and format SQL, quick is, should be fine. So that's an export right there. It's pretty small in this case because there's really nothing on the site. It's only two megabytes. But if it was bigger, I could just zip it up on my computer the way you'd zip anything. I, well, I'm also gonna do this from the terminal though because often for larger sites, this is what I need to do. And so we will go here. What I'm gonna actually do, and this is like, maybe not a great idea for security reasons if you forget, but what I'm gonna do is I'm gonna actually go to the directory of the site, and I'm gonna make my database dump in the web directory so that later when I R-sync the files, the database dump comes along with it. The reason it's not a great idea is you need to make sure to delete these things so that people can't download it later if they happen to try. They would have to know that it's there or guess that it's there, but like. It's not like you're putting it on a live stream on the internet. Well, in this case, I don't really care. There's nothing there. But if you were to do this, it would be really bad because for a real site, because all of people's personal information is in the database, right?  So up to you, I will say when I'm doing this for customers, I don't do this because I don't trust myself to remember to delete it. So what I do is I will dump the database, download it, and upload it to a not publicly accessible spot on the server. I do that usually via SFTP or a separate R-sync. It's a little bit annoying. If you trust yourself or have it to-do list like I have here, then probably less dangerous, right? But yeah, I waffle on this all the time. So what I need to do, so from the source, I need to dump the database. So I need to get the database user and database name. And that will be, oh yeah, on shared hosting they're gonna be the same actually. Yeah. This will be my command. So what this is gonna do is gonna dump on one command, it's gonna dump the database. It uses quick and skip lock tables. This is just stuff that I got from Gautam told me that he usually uses these, especially for larger database, it can help things go faster. And then it's actually gonna pipe this. This is a pipe character. It's going to take that database dump and immediately zip it up, which is nice. I love that. Yeah, so I will also need a password here. Once I paste it and hit enter, it's gonna ask me for that. And this is, you're not making anything new. You're using the old one. I have to use the old one. Yes, yeah. So I pasted it, it's not gonna show anything because that's how passwords work at the terminal. You need at least one of the process privileges for this operation when trying to dump table spaces. Okay, I've run into this error before and for the sake of a stream that needs to end in 20 minutes, I don't actually remember how to fix this, which is why I normally do this in PHPI, my admin. This is a privilege thing. I think that's related to which privileges we give shared hosting users on the terminal. Yeah, I believe so. And so I think normally what I have to do is do this as root, which I could do, I'm not gonna do that because it's not really applicable to the point of the stream, which is that anyone could follow this. The answer is you would use PHPI admin, right? Which I already did and we'll do here. I was hoping, I should figure out exactly what the work around for that is, but maybe I do plan to try to log some of the details of this for folks who don't wanna watch the entire stream and maybe by that point I'll have figured that out. So anyway, we have done that. So in this case, because it's the database dump is actually on my computer, we're just gonna upload it, right? In using the Reclean Cloud or the Reclean Press File Manager. Okay. So we'll go here. We could really put it anywhere, but I guess I'm gonna go and put it in the temp files if you wanna. Yeah, I'm gonna, for now, I'll just put it next to these. It's not a publicly accessible folder, which is kind of nice. This file manager does have a limitation of 100 megabytes. I was about to say, we were talking earlier about huge databases. Yeah, for large sites, usually I zip them, right? And if it's still more than 100 megabytes, then I use SFTP or R-Sync to get the file up to the cloud environment. So there it is. And now I can go back to my terminal. And if I go back a directory, there it is. So I could restore it from the terminal, I believe, but as long as we're using PHP MyEdmin, we might as well use it for both. So let me, if I go to here and then put colon 8443 on the end of the URL, that'll bring me to PHP MyEdmin. Let me just throw that in my notes, too. Cool. I have a stream open on my other monitor and it's very interesting question mark to basically get instant replay if I miss something useful. Okay, so I can log in. I just need the username and password from the cloud environment now. So this is our database that we already have, right? So this is a fresh WordPress database. It's mostly empty. I am not 100% positive. I think I'm gonna need to drop the tables of this because when I try to import it, it's gonna be like, that table already exists. Let me try, though. So it won't overwrite here? I don't think by default. There's a button I believe I did not press that will tell it to overwrite. So it's weird. What a database dump is, is it's like a script, basically. If I open this, in fact, in a text editor, it's literally commands, SQL commands. And it just describes how to make the database again, including all of its contents. Okay, so it's not, sorry, I was just gonna say. So it's not really a list of values outside of being like, when you make the database, please add this list. It includes that. So if you look at here, it's pretty human, it's kind of human readable. So it says like, all right, here's some things. Set the time zone of this. Then, hey, create a table. Set this garbage. I don't really know what this is, but set the stuff about the table. Use this engine, storage engine. Then create this table, do this. Into that table, put this data into it. Or another table. Into that table, put this, you know. Here's a larger table. The options, right? So it is a complete, like I said, it's a script. It's a complete guide for the database. Make the table in this way. In PHP, my admin, when you dump, and there are flags in the terminal that can do this too. When you dump a database, whoops, this is not the right PHP, my admin. You can tell it, hey, along with this, tell it to drop any tables if they already exist. And I believe this is the checkbox. And I didn't do that. And maybe I just should. Because then what it's gonna do is it's gonna, it's before all of these create statements, it's gonna say first drop table, WP underscore two links. And then that will. So if you did it that way, then you wouldn't have to clear out the database to start with, you'd be able to, it's kind of like an overwrite option. And you get it, get it. You're right. You're right. Where that gets you, is actually, I'm getting the auto-transfer twice again. Yeah, I think it's when you're unmuted. Yeah, it's probably me. I don't know why. All right, so, we'll have to figure out what's going on there, cause that's a weird one. But the problem though, is sometimes, in this case, these tables will be here. There are weird exceptions where, like commons in a box is a good one. Sometimes I've seen commons in a box setups that don't use WP underscore. They use CIAB underscore. And then what you end up is the old ones and the new ones. It's not necessarily a problem, but it's sort of like unnecessary. You've got this old stuff that you don't need. So honestly, what I often will do, is I'll just drop the entire database and create it and it'll be empty. I am, should have written down, I wasn't gonna say, I know there's a way to drop the database. Here we go. So I'm actually just gonna copy this again. A little bigger, please. Sorry. Perfect. Oh, there's just fully of... Troy. Yeah. And this is fine because you made that backup earlier. Well, I didn't make a backup of the database contents. Oh, okay. But we don't need that. We've never will need the... There's nothing on here. Not that I will need, yeah. So now I'm gonna make a new one with the same name. Oh, gosh. I need to zoom out a little bit because I think I'm missing a tab. Oop, I'm not. Okay, I just need to do it right here. So I'll create a new one with the same exact name. This is just, again, one way. As you can see, there are a lot of different ways to get to the same end result. And this is what I like to do, which is just drop the whole database and create a new one. And there we go. So we created a new table. There's nothing in it. And now I'm gonna import. Select file to import. Yeah, whoops. And I really never change this stuff. Hit import. Takes a little bit. For a larger database, you know, especially in PHP, my admin, it'll take a long time. Unknown collation. That's weird. UTF-8 MB-4, 0900. So it didn't like your character set? Or no, it didn't like your collation option. Yeah, I don't really know what collation even is, to be honest with you. In the context of a database. But what I'm gonna look for here is did it make that table? I'm guessing no. This is a weird set. This is a weird thing, not something I've actually ever had happen before. Now the nice thing is this is group, this is buddy press group documents. I don't have any group documents in this site. I know that, but this would normally be something I would be worried about. Buddy press group documents. All right, let's try this again. Let me look at the options here. Oh, so collation, collation defines rules for how text is interpreted. So like you can put in rules for case sensitivity and which characters it's looking at, things like that. Okay. But I'm not going to be able to read fast enough to figure out what it doesn't like about this particular set. Oh yeah, there could be a million things. What's going on here though is basically whatever collation settings of these work on shared hosting, this particular WordPress environment doesn't know about. I'm gonna cheat a little bit and we're just gonna say, let's just use another collation setting. It's probably fine. This is like real text encoding stuff that is unlikely to matter for most use cases. So I can see that all of the other tables are using the same collation setting to accept this one. So it's kind of a weird buddy press thing is what I'm gonna guess. So I can literally just change that because database dumps are just a script and we're gonna do this again. Now I'm gonna need to also drop the database again. Actually, yeah, it probably would just be best too. I think theoretically, if I try to do this again, I could tell it like, oh, only skip all the tables you already know about, but let's just do this again. So we'll drop the database. Oh, I'm already on the right tab. We'll create it again. Eric, you're right by the way, when you mentioned Stack Overflow earlier, Googling solves everything real fast. And this is what I'm talking about with database. This is where I have definitely the least confidence and is somewhat a trial and error for me. There's often little things like this, but my point here is to show like, there are two paths, the terminal or PHP MyAdmin. And the nice thing about PHP MyAdmin is the tools are kind of laid out for me because it's not a terminal application and I'm not very familiar with stuff. I can kind of go in and I could look in, maybe there's some collation settings that I could be looking at and stuff like that too. Yeah. It might have to do also with which SQL versions know about which collation settings. Totally, yeah. Honestly, it could be a lot of different things. Databases are, I was gonna say needlessly complicated. I'm probably more accurate to say needfully complicated. They're complicated for good reasons. Reasons that database experts and admins and computer scientists probably care about, but I don't usually. So this is going, and yeah, I'm actually kind of glad, it is kind of good maybe to sort of document some of the troubleshooting stuff here too. And like, it's not often that I'm literally going in and changing stuff about the database dump, but it does happen from time to time. There we go. So now it's imported. Now we do the R-sync. And R-sync can be scary, but I love R-sync. It's my favorite thing. I'm just, I've done it enough that I'm pretty confident with about it. Confident about it now. So what we're gonna do is we're going to fill in this command here. So R-sync of course is the command. These are the options. A says archive, which does a lot of things in R-sync, but you basically always want it. And it's going to copy the folder and its contents. And it's gonna preserve permissions and ownership data as is relevant. This is almost always in every R-sync command. You're gonna want A. Each means display everything in human readable sizes. So don't display bytes, display gigabytes if we're talking gigabytes or megabytes. Z says use compression, which can speed up transfers on large transfers. It's not always actually faster for smaller transfers. In this case, because I'm going between two locations in our own infrastructure, it's probably actually slower because it's gonna look at every file, compress it and then send it.  It won't matter anyway. Usually I use Z when doing a migration of a large site. But you could leave it out if you didn't. We're probably not talking about a large, R-sync is so fast that we're probably not talking about a large difference in time anyway. Capital P will show the progress. It basically affects how the output looks. It's just one that I normally use is not 100% necessary. And then the other thing it does is it will resume transfers in progress. So if you're transferring a lot of large files, let's say like there's some files in here that are three gigabytes in size. And for some reason it gets canceled. If you rerun the command and you've been using capital P, it will actually discover, hey, I got one gig into a three gig file and it will pick up at that point and resume, which is super cool. It never hurts to use it in my experience, so I always use it. Do you know what the, I mean, I guess you just said it never hurts, but do you know if there's a reason someone would choose not to do it? I don't. I will just say maybe there's some weird edge cases where you would want to restore, these types of tools get into, always get into low levels of what trade-offs you're making, right? So maybe if you're transferring, say one million tiny files that all add up to 20 gigs, but each file's kilobytes or something. I don't actually know if that math works, by the way. Million is a big number. But you don't care about the partials because like I can retransfer a kilobyte, right? I only care that the whole thing gets over there. And so maybe there's some calculation happening with that partial that takes milliseconds to calculate per file. And you go, well, milliseconds over a million files, I guess would only be one second. So maybe we're talking 10 billion files, like a truly insane number of files. I'm sure at some level, this capital P takes some calculation time where someone's like, I want to turn that off and I'll save two minutes. Okay. You know, it's also possible, like a lot of these tools are designed in such a way where at one time capital P didn't exist. And so for backwards compatibility, they're just adding it. Yeah, they don't want to make it the default behavior. So I always use it, but you don't have to. Yeah, it's, I don't know. I'm not, maybe I'm not quite versed enough in it to know exactly why. Maybe there's even some types of files where it would be like unsafe, like it doesn't do a good job of resuming for some reason. I can't think of why that would be because it's actually using like a checksums. So it's not just looking at the size, it's actually looking at a hash of the contents to decide what to do. But yeah, I don't know. And I can't fully derail this. It's okay. So we need the source username and source server. So, well, not, sorry, not the database. This will be SSH credentials. So it'll be jaden.me at jaden.me. And then the path which I have up here at the top. I'm gonna need to get rid of those back ticks. Oops, oh my gosh. CDN thought it was gonna be clever and did a whole thing. What's happening? I'm not really sure. The square brackets are making it think it's a link, I think. Yeah, let me just grab the middle of that instead of the whole line. I don't know why. Oh, maybe it's saying, oh, if you're copying over this, it's because you actually wanna embed text into that? I think I have a plugin that lets me paste URLs into text, kind of like WordPress lets you do that. And I think that my plugin is working against me right now. So, or the plugin I'm using. Just trying to help, but no, no. All right, home jaden.me. Yeah, that looks right. Always keep an eye on the trailing matches with our sync. So, this one doesn't have a trailing slash, this one does, that's no good. Because what that will do, I'm trying to remember, you want them to match because the unexpected things will happen if they don't. Like you will put the, you'll make a folder called openlab.jaden.me inside of the root, which is not what we want. We want those folders to be the same. So, to make sure, I always make sure that either, neither of them have a slash or both of them do. And it just matters that they match so that the behavior is expected. It doesn't matter. Yeah. Other than that. Yep. All right, and then that's where it is on the cloud. So, this should be our command. I'm zoomed in here, it looks like it's three lines, but it should be just one line. It's not just zoomed in, I guess. It's also because obsidian is putting like margin. Obsidian, yeah, likes to do big margins. But... Hey guys, I got a hop off my microwave. My microphone's weird anyways, but I got a head out. So, enjoy the rest of the stream. Catch you later. All right, all right, y'all. Good to see you. All right. All right, so I will run that command. And it will R sync everything. And that's very fast because it's a small site. And, okay, so now is where our backups of things really comes in handy because what I need to do now is go into the hdaccess file to make sure there's nothing weird in there, basically. Probably not, but, you know, we'll check. And also the wpconfig file, which we will have to put the database information in. Right. Excuse me. So, let me make this a little bit smaller. So, if I open up the old... Root back. Yeah, root back. If I open up the, we're gonna do wpconfig first. And, you know, theoretically, I should be able to just actually grab the same information from up here. Like the full block. That's why I like to do it. Yeah. But I like to just do the whole, like check out the whole thing anyway to see if there's anything else in here. Like sometimes there's some weird detail that's like, oh, that would have been nice to put in there. But in this case, I'm really just gonna need the database block, I'm pretty sure. So, we're just gonna do that. Are there particular red flags that you look for usually? No, it's just like more like I did something and it didn't work. Oh, okay. Sometimes like the database prefix, like sometimes the table prefix is different between the two. Oh, like we were talking about how CBOX might do something different. Yeah. But even that's kind of not a great example because normally that would come through in the database import. And that I would want it to match and it will match in the old wpconfig file. So, I'm trying to think of a time where I needed anything other than the database block and I think it's only ever been that, but I like to be extra cautious. So, it's just nice reassuring to me to know that I have a full copy of what Reclaim Cloud or Reclaim Press did when it deployed WordPress, just in case I need to check it out. This is one weird side effect of the file manager is it doesn't update until you tell it to. Oh, okay. Maybe I didn't. Yeah, something's up here. Did you do the edits in root back instead of no? Oh, here's what happened. There's two lines in my rsync on accident. So, I'm not sure where I copied that. I probably copied it. Weird. Because I didn't give it a destination path. I don't know where it would have put anything. Maybe we find that later and we redo the rsync. Well, we'll definitely do that. What I wanna check is did I just overwrite everything on the old spot? And it looks like no. Timestamps are good. Yeah, okay. Yeah, we're just gonna do it again and I'm gonna fix the thing here. This is, that's really unfortunate. Yeah. Do you also want the flags or? Oh, yeah, I do. This is one of those things where it is probably a good idea. I probably shouldn't do this right from obsidian. It's a good idea to like. Plane text editor. So you can double check, hey, this is one line. There we go. Yeah, that looks good. Oh, that is really fast. It's not quite done yet. I'm just going away from it. I just wanted to check, is it actually going to the right place? And yes, it totally is. Now I'm gonna get rid of that database because I don't need it. And I'm also gonna go over in my source and get rid of it there, because I did forget about it. Not that this is important site, but let's do it anyway. All right, so I'm gonna go into WP config. We're gonna fix the database section of WP config. Like I said, I just do the whole thing, but really it probably only need to change name, username, password and possibly host. The host is gonna have an IP address in it instead of local host. That's just the difference between the cloud and shared hosting. Is that a clipboard? History, yeah. Clipboard. Yeah. PasteBot is a good one. I use a thing called, what is this called? What is this application I'm currently looking at? Raycast. It's a whole replacement for Spotlight that does a lot of different things, including clipboard history, but it also does some fun things. Like I can do a gift search right from here. That's good. Anyway, but PasteBot is a really good tool that just does clipboard history. I think it's like five to 10 bucks. Like it's not free, but it's a good application. There may be some free clipboard history tools. I love clipboard history and honestly, it's maybe a little dangerous for me to pull this up on stream, but this, because there could be some stuff in here I don't want to share, but it's so handy to know that like, oh, I didn't actually accidentally copy something and it got rid of something I wanted. It's like, no, you can go back. You can set this up. I think I have mine set up to remember the last 1,000 things. I copy, which is way more than I would need, right? But it's nice and you can search through it, right? So I can go in here and go like, all right, WP, you know, it'll go through the entire text or even images work in there too. All right, so one thing I forgot is we need to fix the permissions of stuff. So I'm gonna actually move this up here. I'm gonna run these two fine commands to fix the permissions. Sorry, what were you gonna say? I was gonna say that I just double checked it by moving the stream to my big screen and full-screening it and it was, I mean, I guess someone really dedicated could try and like zoom and enhance and stuff, but it was small enough that I was not able to read any of the stuff in your clipboard history. Oh, yeah, there wasn't anything compromising in there. I was kind of looking at it as they brought it up. It's all stuff from the stream. Yeah, I mean, yeah. Your most recent history would be that, but I figured, you know, I was curious, although I didn't need to clean my glasses. So maybe it is just a me thing. Cool, so, excuse me. So yeah, we need to fix permissions because I'm not able to, WP config files are locked down permissions-wise on shared hosting for security reasons. And so I'm not actually able to edit the file until I do that. I like to, as a rule, just do these permissions check just anyway. So might as well do that. That will also fix up the WP config file for us. So now if I refresh this, I should be able to edit this block and save it. Okay, sorry about that. Okay, so we're also gonna look at the HD access file. Probably nothing needs a change in here, but we'll look at it anyway. It's just standard WordPress stuff. What I'm usually looking for in here is the cPanel PHP stuff. So if you've set a custom version of me and cPanel, you don't want that line in here on Reclaim Cloud. And yeah, now's the moment of truth. We are going to, sometimes I haven't figured out if this is me being superstitious or a real thing. Sometimes I restart the web server, but we're gonna try to visit this. Now it is not going to completely work yet because it thinks it's at openlab.jdin.me and that is not what I have mapped in DNS. So we'll talk about that in a second. But what it should do is redirect. Yeah, okay, so it's working. It knows where it wants you to be. It's just. So this is where things diverge and we're not gonna do a ton with this, but typically the last important thing with an openlab or with any migration of WordPress is, okay, well, is the new site gonna be the location? So am I gonna point the domain over here or not? I'm not gonna change where my domain is pointed for this stream because of caching that is not going to be done by the time we're done with the stream, basically. So if I need to put it at a new domain, this gets a little bit tricky with WordPress multi-site, but I do have a command in here. This is what I normally use. WPsearch-replace, all tables, then whatever the old URL is and then whatever the new URL is and then I do a dry run just to check if that's gonna do anything before I run it and then I will remove the dry run flag. That is one way to do it. More often though, I don't actually want to change domain. I just want to look at it before I change DNS. So that is where we do an Etsy host thing. I know some of us that reclaim you skip DNS.  It doesn't really work for me. Like it just like literally doesn't work for me most of the time. So I don't know why or if I'm just not using it correctly. So I always just edit my host file, which is- Oh, Etsy host. Yeah, Etsy host. Yeah. I was looking for custom cryptid patches to put on a backpack two weeks ago. And so I was like, oh yeah, Etsy, Etsy. What is that? Maybe if someone can correct me if I'm wrong, Etsy is the how it's spelled by believe it's pronounced Etsy. I don't, at least that's what- My coworkers of mine would always say. I should ask maybe Chris would know. Chris would probably know. So anyway, this is the article. And down here is basically optional stuff. So maybe you need to point your host file. Maybe you need to fix, sometimes we have to fix the upload path depending on how the site was set up. It may have a complete in the WP options table. We may need to adjust the upload path to be var, web, root, root with WP content uploads. This depends though, because sometimes if it doesn't, basically if WordPress doesn't complain to you about it, it's probably set to this WP content dash uploads, which is a relative path to the WordPress directory, that will work. But what we often will see is it'll be set to home, J, me, open lab. And that's not gonna work because this folder doesn't even exist in Reqling Cloud. So we then need to set it to var, web, root, root, WP content uploads. I haven't needed to do this all the time, but it's something to look out for. So I'm gonna point my host file and we're gonna try it out. So what I need is the IP address. What's the name of that support doc? It's called pointing local host file to pre- Oh yes, no, it's right there. Okay. Yeah, no problem. So I'm gonna do this. You could use nano or VIM on the Mac. This is gonna be small. Sorry. Actually, I can zoom this in. All right. So this is on my computer, not on the cloud. So I'm now gonna paste the IP address in and then I'm going to type in the space and then the domain name. So now I'm telling my computer, don't use DNS. Just assume this IP is mapped to this domain name. Now, we use the moment of truth. We're gonna see if this works or not. So we haven't mapped, we haven't done an SSL cert because we haven't pointed domain yet. So it's complaining about the SSL not existing. But there we go. This is it on Reclaim Cloud. So we are good here and I can even check by, I mean, there's a lot of ways I could check, but the host file always works, I should say. But I could log in here, I could make some change to the Reclaim Cloud version. In my case, because this is all kind of disposable stuff, I'm literally just going to go into my C panel and delete the one from shared hosting to kind of prove that we did a migration here. So if you get rid of the original and you can still see it, then you know you're looking in the right place for the new one. Yeah, I'm not suggesting this is procedure for our migration. Don't delete your source, right? Like, because you maybe you messed something up and still need to reference it. This is a little, let's call this a jumping through a hoop of fire moment for the stream, right? You can be sure that if you've edited this file and written it, you've saved it that you're looking at the correct one, but maybe log in and make some changes on the Reclaim Cloud version, switch back and forth, that kind of stuff. But yeah, we're looking at the Reclaim Cloud one. Sweet. And we can also tell too, because the cert is as well as not set up on this one. So we did a successful migration. Even database weirdness aside, where we had to manually change that one thing. I've never seen that before, but I'm glad we were able to kind of get through that. But that is a specific thing. I did say at the beginning of the stream, hey, OpenLab is just WordPress multi-site, which is true. But in that case, we had a weird database thing because of BuddyPress, which is a vital part of Cummins and Evox, OpenLab and Cummins and Evox Classic. So I've not seen that before though. So I'm not really sure why we ran into that this time. Well, didn't you say this was your first time going to ReclaimPress instead of to just somewhere else? True. Yeah, could be related. Yeah. So that would be something I look out for because I'm about to do a couple more of these. So yeah, but you know, we did, I think we started late. I'm trying to remember. We started about 10 minutes late. Yeah, so yeah, hour and six minutes. Yeah. Which is not bad. I know that that's kind of long, but typically migrations are long. I will say they are, I'm happy we did this because this is a pretty in-depth look. Like we explained a lot of this in a pretty low or high level of detail, you know? And a couple other things I'll go here right before we sign off. I mentioned this upload path thing. I would look at that in PHP, my admin. So what I'm talking about is I'm gonna go to WP options. WP options is always the best. Yep, the table. Everything's in there. Yes. You can, yeah, make it as many rows as possible and just search for it probably. Yeah. Let me zoom out a little bit for a second and then I can filter. I think that. There we go. So this is one case where I do need to adjust this. Yeah. So you can see it's set to the shared hosting URL. That's not gonna work. So I'm gonna need to change this to var www web root, root. And then we'll be. And it's totally fine with that because this site is in the root folder now. Yes. Yeah. Also you can blame, I'm sure that I wasted at least 20 to 25 minutes of this stream. You can blame the link on me. Well, these are supposed to be conversational, right? Yeah. So the whole reason I like doing these in this way is that you and Amanda can ask questions and make sure that I'm getting all of the detail out there to make this relevant because it's easy especially when I have it. Like the doc helps me keep on task but then if I miss something from the doc, like if I forgot to put it in there in the first place I'm gonna skip right over it because it's like, oh, I've got a text file over here. We're following, you know? So anyway, thank you for joining me. Hopefully this is helpful or at least interesting to someone. I'm gonna try to turn this into a blog post as well to kind of just like throw some of these commands on a webpage so you don't have to look at them in a video, but yeah, this is how I do WordPress multi-site migrations. Soup to nuts, start to finish, so. Yeah. All right. Yeah, we'll see everybody next time. See you later.


Hi everyone, Joe for Jaspy's casequakes.com another random number block randomizer for the Cup Hockey picker team number seven That's gonna be in a separate video big group of teams right here and It's just we pulled those teams out of the Cup Hockey turn them into a random number block break It's a serial number break. Remember as it says in our frequently asked questions area in the house rules Right there's zero will also it doesn't say it here But zero will get any and all redemptions including one-of-one redemptions For that block of teams for this big block of teams right here It's a rare occurrence, but it's a disclaimer that we like to say big thanks to these folks for getting into it Appreciate it. There are the numbers right here. Let's roll it. Let's randomize it six and a four ten times for names and numbers one two Three and tenth and final time after ten we got Mike down to Anthony six and a four ten times for the numbers one Two nine and tenth and final time after ten we got two down to nine Mike with two Ryan with five Kobe with three Peter with zero Sean with eight Tim with one Clyde with four Taylor with seven Mark with six and Anthony with nine nice To order those numerically remember Peter you'll get any and all redemptions including one-of-one redemptions If they happen to pop for any of these teams in that tab on the bottom of the screen right there Tyler You'll still get live one-of-ones ten Tyler. There you go break in a separate video Jasper's case breaks.com