Nagana is the latest African country to ease its COVID-19 rolls. In his 28 COVID-19 address, President Akufu Ado announced an update on the measures taken to limit the spread of the virus, citing a review premised on the background of rapidly declining infections, the relatively success of the vaccination campaign and the increased capacity in the public and private health sector. The leader presented measures which took effect from Monday. Now two years after President Akufu Ado closed all borders, he announced the opening of sea and land borders, vowing the economy would soon rebound. All in-person activities such as those taking place in private parties, churches, mosques, cinemas, are to resume at full capacity as long as the audience are fully vaccinated. Outdoor functions at sporting events, entertainment, sports rallies and funerals may also resume at full capacity as long as those taking part are fully vaccinated. Please do subscribe to our YouTube channel and don't forget to hit the notification button so you get notified about fresh news updates.


All right, welcome, everyone, to today's Webmaster Central Office Hours Hangouts. My name is John Mueller. I'm a webmaster trends analyst here at Google in Switzerland. And part of what we do are these Webmaster Office Hours Hangouts, where webmasters and publishers and bloggers and SEOs can kind of join in and ask us questions directly all about search.  But as always, if you're kind of new to these Hangouts and want to get your question in from the start, feel free to jump on in now. Hey, John. Sorry, is somebody else talking? Just a really quick question. I'm going to get out of here quickly. I'm looking into Googlebot's ability to render JavaScript at the minute. And so we've tested this plenty of times. And Googlebot isn't really able to execute any JavaScript events, like on click or on scroll. So there's quite a lot of writing on certain websites, depending on the fact that Googlebot can't execute these events so far. Do you have any plans to start executing on scroll, on click, any kind of events? What particularly are you looking at? So for example, I mean, one basic configuration of infinite scroll would mean that when the user gets that page and you have one URL, if Googlebot is able to execute on scroll, then they would essentially see the content of two articles on one URL. The relevancy of the article won't make sense. And so one of the safeguards for infinite scroll is making sure that the extra content loads on scrolls Googlebot only sees one URL with that URL's content. I think we do scroll a little bit, though. So that's something that I think we've been doing for a while. So back when I did that blog post on infinite scroll, how to set that up, I checked some of the pages, how they were indexed. And I think there was like one or two page views additionally that was indexing per page. So some of that scrolling is already happening. I think that's at least in the plans that we have some amount of scrolling down to make sure that there is nothing that we'd otherwise missed there. So if you need to prevent that content from actually being loaded, what you could potentially do is put the script that's executed with the on scroll behind a robots.txt block or the server response that sends back the content for that on scroll section and block that by robots.txt. So that's legal. I mean, another use case would be potentially imagine we were designing filters and say we're a real estate website and we have a bunch of obscure filters like pet friendly and being able to combine them. So one of the things you might want to do is essentially on click, you may want to have a function execute, return false to the pages and reload, but essentially send back a response from the server and then have additional listings appear or be filtered. So are you saying that if we have in the event, if we have a function that is in an external script and blocked by robots.txt, that's the safest way to do it? Probably. So I think with on click, it's a little bit different in that we don't click on all of the elements. But what does happen is that we look at the JavaScript files that we load and we try to see if there are any URL-like strings in there. And if we find something there that looks like a URL, we might try to crawl that to see if we're missing anything. So if you have an on click event that just pulls in additional content with a server response type thing, then probably we wouldn't do anything with that. But again, if you really want to be sure that we don't actually process that, putting it behind a robots.txt block is probably the best approach there. OK, so just last follow-up question. So I understand what you're saying. And I didn't know that that was actually allowed. I thought Google Search Console would probably come up with errors. So another implementation would be to, if you have this property real estate page, essentially on first response, I send back all the listings and you have that page rendered, the other thing potentially we could do is have all the additional information loaded in a JavaScript object. And from there, we could just load it in that way that we're going to be any URL's accessible, unless it's something we needed indexable and then we could have a fallback age rev. Would that be OK? That would probably work too, you know. Sweet. OK, thank you very much for answering. I got a code for that. That's awesome. Thanks, Joe. Bye. OK, any more questions from any of you who aren't here regularly? We'll jump on in with the questions that were submitted. And as always, if you have any comments or further questions, clarifications that you need for some of these questions or answers, feel free to let me know. And we can go look at that. All right, let's see. Where do we start? So one question submitted by Mary Haynes around Padmapper, which has a weird issue in that they drop out of all search results for some specific types of queries that are limited to specific locations and kind of type of result or type of content that they're looking at there. I looked into that a little bit. But as far as I can tell, this is essentially ranking as it would algorithmically. So I'm double checking with some folks here just to make sure that I'm not missing anything. But from the general setup, from what I can see overall, this kind of looks like we're handling it the way that we would normally do it. There is definitely nothing manually blocking the site there. So don't really have any insightful comments to add around that. One keyword, for example, bus ticket online and online bus tickets, Google AdWords shows search volume for only one keyword in such case. Should we expect that the search result in Google would be the same for these keywords? If not, which one is the most relevant? So in general, the AdWords keyword tools do look at things like search volume as well, but they're optimized for different things. So that's not a one to one view of exactly what happens in search. So if AdWords keyword tools does one thing with regards to folding things together or not, that doesn't necessarily mean that it'll be the same in search. So this is the type of thing where I would just try it out yourself and see what happens. If you're kind of asking, are the results the same for these keywords? And it's something you can just plug those keywords in and see what actually happens. Let's see. Then there's a question from David with regards to the rendering. We looked at that. Does Googlebot make a head request or is there only a get request? So a head request is essentially just the header of a page and a get request would mean the whole page. I don't actually know for sure. I know back in the day, we used to do some head requests to kind of see if the page has actually changed or not. I believe in the meantime, we pretty much only do get requests for normal crawling and indexing. Obviously, if you have JavaScript on a page and that does some kind of special request with the JavaScript side, then we'll try to process that and try to pick that up as well. So it doesn't mean that you'll never see a head request in your server logs or that you'll never see a kind of a post request in your server logs. But probably they're a lot more rare than the normal get request where we would fetch a normal URL the way that would happen if you entered that URL in your browser and hit Enter. All right, then there's a question about a domain. We have one domain with several country domains, like FR and IT subdomains, for example, and several vertical categories for each country. In the French market, we'd like to change the name of the category and redirect all URLs from the previous to the latter for a total of 1,000 redirects. I think it kind of goes into like we think this makes sense because more people are searching for that one kind of new name than the old one. So we'd like to kind of have that covered. Would this kind of operation have any effect on search rankings considering that the old one has been around for years and has collected a decent amount of authority over time? So in general, these type of site migrations or restructurings of sites are things that kind of happen over time. And a lot of websites do that. Changing subdirectory names is something that can happen over time. Subdomains can change. You might even want to change your domain name if you wanted to. And handling redirects is something that our systems are generally pretty good at. So regardless of the number of URLs that you're redirecting there, that's something where if you set up these type of redirects properly, you'll generally see that it settles down in the new state. However, when you're doing this type of internal restructuring where you change a significant number of URLs within a website, that always means we have to kind of reprocess the whole website to understand again what actually changed on the website. So that's something where probably you'll see a period of time with some fluctuations, maybe not as high visibility as you had before, just until everything kind of settles down and returns to a kind of reasonable state where we understand exactly these URLs are related to the old ones and the rest of the website is here and they're kind of tied in together as well. So this type of restructuring, especially if it's for a significant number of URLs, my recommendation would be to make sure that you do it technically correct. So really make sure that you have everything prepared, that you have lists of the URLs, that you follow the Help Center advice on kind of site moves. And then secondly, I try to do this during a time where you're not dependent on search traffic for that part of your website. So if you have kind of like a low season where traditionally people don't search that much, that might be an option. If you're planning a bigger marketing campaign where you're driving traffic to your website in other ways in search, that might be an option as well. So that's kind of what I'd recommend there. I don't think you'll get around not having any fluctuations when you do this type of internal restructuring, but at least by making sure that technically everything's set up correctly, you can kind of limit the time effect that would be there. All right, I have a client who has, in his link profile, do follow directory links from around 15 domains that link with branded anchor text. Should I be worried about these? Can they harm my client's ranking? Is any algorithm discounting them already? Is it a sign that it's a low quality site, perhaps? So just because they're from directories and they're branded doesn't necessarily mean that they're good or that they're bad. I'd still kind of look into what exactly is happening there, where they're coming from, what was involved with those links, and then make a judgment call whether this is normal, natural links, or if these are problematic links. And also, given the number, when you say 15 domains, I assume a website that's been around for a longer time probably has a lot more links. So if these are just 15 links that you found, which you're not sure about, then probably that's not really something that you really need to worry about. So those are kind of my thoughts around this general problem there. In practice, if you think that these are unnatural links or that they might be unnatural links, disavowing them is fine. We will take them out of our calculations. And that might be one approach. But just because they're from a directory doesn't necessarily mean that they're bad links. All right, now we have the question, subdomains versus subdirectories. I think we have this question pretty much every hangout. And given that it keeps coming up all the time, my kind of rough feeling is that even around the rest of the web, it's kind of like we don't really know. And maybe there isn't a clear preference one way or the other. So my recommendation there would be kind of to look at your website and think about what makes sense for your specific case. From our side, we kind of treat subdomains and subdirectories in the same way. So that's something where I would look at more what makes sense in your specific case. We're launching a localized website for Israel but can only serve Hebrew language on the blog, which is a different platform than the retail site. The retail site will be in English. Any issues from an SEO perspective in having two languages on the same domain? Will that confuse crawlers? Will that be problematic for our rankings? In general, this is totally unproblematic. We look at language on a per page basis. So if you have some pages that are in Hebrew, some pages that are in English, that's perfectly fine. We look at them individually. So from that point of view, I don't really see a problem here. With regards to the retail site, you just mentioned that it'll be in English. But I am guessing from the context, it'll be in English and Hebrew. And if that's the case, then I just make sure you have the hreflang links between the equivalent pages on the retail site. And if on the blog, you only have one language, that's perfectly fine. There's no need to do anything with a hreflang. I have a question regarding flexible sampling. So flexible sampling, for those of you that didn't see this, is based on the old first click free setup that we used to have. Only it's more flexible in that you can define yourself as a publisher how often you want your content available for free, and you can do that in a flexible way and dynamically choose even between different types of users and showing the paywalled content or the visible content. All right, so the question goes on on a website with paywalled content. We want to implement the class name and structured data so that Google can differentiate our paywalled content from the practice of cloaking. The problem is that we don't want our content to be found in our source code. Since it's an Ajax-based website and we still use escape fragment URLs, I wanted to ask if it's OK to only deliver a schema markup and the class names in the pre-rendered HTML for Googlebot while the normal URL still deliver the same code. So I think there are kind of two different general questions here. On the one hand, if you implement flexible sampling, then obviously you'll be serving the full content to Google and you might not be serving that full content to users. So that difference between showing one version of the content to Google and one version to users I think is kind of natural with flexible sampling. So from that point of view, that's kind of fine. The other part that I'm a little bit more worried about is it sounds like you're using the Ajax crawling setup with the escape fragment URLs. And from our point of view, that's kind of a deprecated setup. And I would expect that at some point we would be turning off crawling of the escape fragment URLs. And we would only try to crawl and render the hash paying URLs themselves, which are kind of these JavaScript pages. So if you're only serving the structured data on the escape fragment version of the page, then I suspect that will kind of make things a bit more complicated in your specific setup. So that's one thing I'd kind of keep in mind that that can happen at some point. I believe we stopped recommending the Ajax crawling setup maybe two years ago. So that's something where I expect us at some point to switch to the rendered version. And given that you're thinking about setting up a new kind of structured data on these pages and you only want to serve that structured data on the escape fragment URLs, then probably you need to kind of rethink your general website setup there to see what you could do to serve the structured data within your rendered view, for example, or what it would take in an extreme case to move your website from the hash paying setup to something that uses more traditional URL setup. So I think your question is kind of starting off with this kind of simple like, where should I put my structured data on my page?  It's like, well, you need to redesign your website first. And I don't really have a simple approach there. So that's definitely something where you're probably going to have to think a bit more about your overall website strategy there before you come to a clean answer with regards to the flexible sampling setup. About two years ago, we moved a complex site about 200,000 pages from domain one to domain two. And now we'd like to upgrade to HTTPS. My question, should we update the 301 redirects from the old domain directly to HTTPS or leave it alone, thus having two hops? I think if you move two years ago, then you can just leave it alone. So we probably don't crawl your old URLs that often anymore anyway, so it's not that critical for us that we would have it all in one hop. So in general, two hops themselves would also be unproblematic. It gets a bit trickier when you have, I think, five hops or more, where we can't follow those redirects right away when we crawl. So with two hops, that's something we can still follow normally when it gets to a lot more redirects in a row. Then what happens there is we follow the first batch of redirects. And then the next time we consider crawling this URL, we'll follow the next batch of redirects, which means it takes a lot longer for us to find that final URL from the initial URL. But given that you've kind of done this site move already a long time ago, and it's just two hops instead of one hop, I really wouldn't worry about that. In the crawl error report under Not Found, we can quickly rack up hundreds of thousands of 404 errors. This is due to our servers going under rolling maintenance from 1 AM until 2 AM. During this brief window, Googlebot will get a lot of 404s. Is there any way to limit the time of day Googlebot crawls a website? And is there a way to quickly remove over 1,000 Not Found errors in the reports at a time, something like a Clear All button? So starting with end, you don't need to remove these errors in your report because removing them with the mark this fixed button in Search Console essentially just hides them in the UI. It doesn't change anything on our back end. So this is really something that you'd only be doing to make the report look clean, even though we know of all of these errors. So that's probably something you can skip. The other thing to limit crawling during a time of day, that's something that we don't support with Googlebot. And finally, what I would recommend doing in a case like this is making sure that you're serving 503 as an HTTP result code instead of 404 in this kind of a setup. So 503 is a temporary, unavailable code, which tells Googlebot that your website probably is here, but is currently not available, so maybe Googlebot should come back a little bit later. And doing that during a time like this is perfectly fine. A 404, on the other hand, tells us that this page that you tried to crawl actually doesn't exist. And I imagine what will happen there is that we'll run across all of these 404 errors. We'll drop a bunch of pages from our index based on these 404s. We'll pick them up again the next time we can crawl. And you'll see this fluctuation of URLs being indexed or not indexed. And when a URL can't be found in search, you don't really know. Is it because it was a 404 last time, or is it because there's some other problem on my website? So for this type of issue, I'd really recommend the 503 result code. How important is fetch and render in Search Console? It reads our full home page code, but the actual image in render view looks strange. Does this mean Googlebot can't read our entire home page? Or is there some other code that looks at the rest? So fetch and render is actually pretty direct with regards to what Googlebot actually picks up on a page. However, it's just a screenshot view of the page. So if there's something that's below the visible part on the page with fetch and render, you don't necessarily see that. So that's something that might be playing a role there with regards to making it easier to understand what is actually renderable by Googlebot. My guess at this general question is that the image is probably distorted on the page due to something in the CSS. So when Googlebot renders a page, it renders it with a fairly high viewport, which is much higher than a normal laptop browser window or something like that. So if your page, when it's rendered with a really high viewport, has images that are stretched that far, that might be something that makes it hard for us to actually render the view in Search Console because we stretch this image. And if the text is below the image, then that's something that kind of gets dropped in that preview window. We still use that for indexing, but we have trouble showing that to you in the screenshot view. So what you might want to do is double check your pages with a really high viewport. In Chrome, you can kind of set it up and emulate it with a responsive view where you can say, I want a page that's this wide and this high of viewport, and it'll zoom out to show the whole page. And you can kind of see what might be the problem there. And you can mess with the CSS settings to kind of limit the size of your images so that they don't get stretched for the full viewport size. And that will probably make it easier for you to debug these things with the Fetch and Render tool. It's not critical for rendering, for indexing our pages, but it does make it a little bit easier for you to kind of double check what is actually happening. All right, large websites. If you see their home page is a bunch of internal links, and they are ranking for generic queries for users, both cases are fine, whether you add content or not, because the user knows your brand and wants to go to a page, which he thinks is related to his requirement. In such case, for Search Engine, does it give any benefit to the website that it has a brief introduction of it or not? So I'm not really completely sure what you mean here, but in general, it definitely makes sense to be kind of direct on your website about what the value of your pages is and what you provide for users. So this is a really common kind of problem that we run across when we look at sites for site clinics at conferences, for example, is that it'll look like a really nice site. It's really well-designed from a graphical point of view. But when you open the page, you don't really know what this business or what this website is trying to show you. Is it trying to sell a service? Or is it selling a product? Or what are they trying to achieve with their home page? It might look really nice and fancy, but it's kind of unclear from the content on the page what it actually is that they're trying to achieve. And with that, you kind of lose users that they go to your page and they essentially get lost. I'm like, what do I do here? Whereas if you had clear calls to action, if you had clear information about what service you provide that's unique and valuable to users, then that makes it a lot easier for users. And it definitely makes it a lot easier for search engines because they have ticks that they can look at and say, oh, this website sells this service. And we can take that and put it into a snippet. We can take that and use it for understanding the relevance of this page when people search for something around that kind of topic. John, regarding that, I just wanted to say that in OTA, online travel agencies, we have seen this kind of thing too much, that their home page is ranking for a highly search queries. But if I go to that page, there is only one booking widget and all the internal link pages, all the links to internal pages. And they are just ranking for highest queries. So in such case, I was just trying to understand if adding some content really competes with them or it doesn't matter because search engine is ranking those pages. So you mean like someone else, if someone else were to create a page with more content. I think that's always tricky because you're looking at different factors. So this is something that applies to this specific case where you have one really strong website and it doesn't really have that much good content. And you have another website that's maybe not as strong, but it has a lot of good content. And our algorithms try to understand what is the balance for each specific query. And we try to figure out where we need to draw the line and say, well, this amount of good website kind of matches this amount of good content. And because of that, we should rank this one here and the other one below it. So that's something where there is no absolute answer where I can just say, well, 2,000 words on our page match five external links or something like that. It's not something that really you can kind of compare. All right, let's see. One website I think we talked about on Twitter already. In a previous chat, it was mentioned that at least one of the algorithms looks for excessive use of money keywords and alt tags to decide if they're spammy or not. So assuming the webmaster uses normal sentence syntax, it's a quality website that gives value. Alt tags are being used for their intended purpose. Would using articles, conjunctions, and prepositions be a good way to avoid getting danged or getting slightly more points? So to me, this sounds like a really weird situation where you're kind of asking, would using normal text on a page actually be useful? And of course, using normal text on a page is useful. So writing naturally, writing in a way that works for your users is something that we do try to pick up when we look at pages. So obviously using articles, conjunctions, and prepositions in the way that makes sense for that language is the right thing to do. You don't just throw a bunch of keywords on your page and assume that search engines will pick that up, and users won't mind that they can't actually read any of the content. So of course, you should write in a natural way on a page. We migrated to HTTPS 11 days ago, and only 20% of our submitted site map URLs have been indexed so far. Does this rate indicate any crawl issues, or would it be expected? I don't actually know what percentage would be acceptable for individual websites. It really depends a lot on the website itself. So this is not something where there is like one count or percentage that we can say, like after 10 days, 20%, that's something that really depends on the website itself. It depends on the structure of the website, kind of how often we recrawl the website, what kind of URLs you have on your website. So for example, if this is a news website and you have news articles that go back into, I don't know, 1800s, then you have a lot of content on your website that from our point of view probably doesn't make a lot of sense to recrawl every day. So maybe we'll look at this content, I don't know, once every couple of months, maybe once a year. So in a case like that, we wouldn't go off and recrawl everything, all of that old stuff, right away just to make sure that your percentages for the submitted site map URLs is high. So that's something, it really depends on your website. It really depends on the type of content you have, the type of pages they have on your website, the crawling that we do on your website, all of these things kind of come together. My general feeling is that this might be completely natural in a case like this. So what I would do, actually, if you're looking at the submitted URLs for per site map file is to split that up into smaller site map files so that you can kind of judge that a little bit better. And also, what I'd recommend doing is just looking at the overall traffic to your website. If people are still reaching your website and they're just going to the HTTP version and getting the redirect to the HTTPS version, then from a practical point of view, they're still on your website. They're still getting the HTTPS version in the end. And it's not really something that's critical that you need to kind of fix the re-indexing of your pages immediately. Sidebar, header and footer links are the same for Google or different. Also, sidebar changes per template means if it's a hotel template and then a sidebar, the hotel links will repeat, but it will change if there's a flight template and there'll be flight links. That's perfectly fine. So we do try to understand the primary content of the page. And that means we try to understand where kind of the header, the footer, the sidebars are so that we can focus more on the primary content of a page. And if you have different parts of your website that have different content in the sidebar sections, that's perfectly fine. In general, we're still able to figure out where the sidebar is, even if the content within the sidebar changes. So that's something, for example, that we see a lot on news websites in that they'll list the recent articles in the sidebar. And for us, it's like pretty much every day when we look at this website, we have different content in the sidebar. But that doesn't mean that this content is a part of the primary content of that page. So if you think it makes sense for your users to have different sidebars and different situations on your website, go for it. I think that's a great idea. So Googlebot considered them the same, like header links or footer links and sidebar link. Do sidebar link are changing template to template? We pretty much see them the same. I'm reluctant to say that they're exactly the same. But we do try to separate between the primary content and the boilerplate, as we call it, like everything around it. And I don't think we differentiate between where within the boilerplate this particular link or content is. Our Contact Us page comes above the home page for branded search queries. This is a sign of an algorithmic penalty. Last summer, the site was spammed with thousands of weird pages, but the developer cleaned up and the site never received a message in Search Console. I don't know. Sometimes this can happen. It's pretty rare. But in general, we can recognize these kind of shared pieces of content across a website and treat them appropriately. My tip there might be to post in the Webmaster Help Forum and double check with some peers and make sure that things are set up properly. I think when you say your site was spammed with thousands of weird pages and the developer cleaned it up, it sounds like perhaps your home page was hacked or your website was hacked and someone placed a lot of these spammy pages on your website. And if you've really cleaned that up, then that shouldn't be a problem now anymore. So that's something that if this content is no longer on your website, we wouldn't be treating it as such. But you might want to just double check to make sure that there's actually no further hack or no remaining pieces of that hack available on your page just to get that ease of mind that you've actually cleaned everything up. And that's something that often people in the Help Forum, if you give them this additional information, they can double check with other tools and with other tricks to see, is there something weird happening when Googlebot looks at your page like this or when it looks at it with a mobile version or whatever? We have extensive reviews for a large number of small businesses. Is there some kind of criteria for being featured in this section of the local business listings? Any special markup? I don't see the image associated there. So it's kind of hard to say. But in general, we do have all of the markup in our developer site. And I double check to make sure that you have all of that set up appropriately so that we can kind of pick that up there. I probably also double check in the Webmaster Help Forum to make sure that you're kind of aligned with the structured data guidelines that we have. And there are a bunch of people in the Help Forum who have a lot of experience with structured data who can give you a little bit of tips with regards to how you could implement this on your pages to make it easier to pick up or depending on how it's actually meant to be used if it's on the other people's websites or whatever. They can give you some tips on what to do there. Is the algorithm the same for the top 10 and for 11 to 100? I see websites jump directly from 100 to 20. But those that are in the top 10 take up too much time to jump to fifth or fourth. So I wanted to know if the algorithm that runs is on the same level or not. Yes, it's the same algorithm, essentially, that does all of this ranking. And usually what happens is that there's a lot of competition for the head of some of these queries. And that makes it a little bit harder to jump around in the top of the search results. Whereas on the lower part of the search results, things can shuffle around quite a bit. And that's kind of natural because there's just a lot less competition in those places. I want to add some products to two, maybe three, subcategories when relevant. My CMS allows me to do that without changing the URL. Would those avoid potential duplicate content issues? So even if you have separate URLs and you put the same content into two or three subcategories, that's perfectly fine from our point of view. We would not take manual action on a website like this. We would not demote a website for having the same content in multiple categories. That's a really common e-commerce setup. And doing that in a perfectly clean way that you really have just one URL for one product is sometimes surprisingly hard. So that's something we've learned to live with and something our algorithms have to deal with on a daily basis. So that's not something I particularly worry about. If you can do it by putting it all onto one URL, then I'd go for that. But if you really can't do it and you think having this product in multiple categories is really useful for users, then don't let the search side hold you back on this. Doesn't matter to change the anchor text of internal links in the website or a single anchor text on all web pages on the same website. It's also OK, which is better from an SEO point of view. So this really depends on your website. In practice, it's something where the anchor text just naturally varies across a website, which is what we tend to pick up on as well. So the anchor text does give us a little bit of context about the page that it's linking to. So having different anchor text leading to that page makes it a little bit easier to understand that this page is relevant for these type of things. But on the other hand, we also have a lot of content on the page itself to understand how it's relevant with regards to those keywords. So I wouldn't sweat it if you can't change the internal anchor text. If you can do it within normal articles on your website, then why not go for that? But I try to just do it the way that it naturally works within your website. I want to optimize the content of about 2 third of a website. Does it make any difference if I upload the changes in one day or do it continuously over several days? If you're changing the content of a website, my guess is you're probably also changing the internal linking between these pages. So if you're changing the template, if you're changing the textual content on a website, then often that also involves changing the internal linking. And these are things that sometimes take a bit of time for us to reprocess. But in practice, it probably doesn't make much difference if you just upload it all at once or if you do it kind of in a continuous way. So if you upload it all at once, obviously it'll be a bit of regards to fluctuations. If you upload it step by step, those fluctuations will just be smaller, but they'll be spread out for a longer period of time. So you're kind of trading off less strong fluctuations for a longer period of time versus stronger fluctuations for a shorter period of time. And which one works best for your website is kind of a call that you have to make on your site. Reconsideration request was approved twice, but manual action still shows. What's the case here? I don't know. I'd have to double check with the web spam team on that. I don't know if you have a thread in the Help Forum. Often, the people there are able to escalate these type of issues as well, so they might be able to kind of help you clean out the last things. One thing that, since you mentioned widgets, what might be happening here is that the manual action only affects a part of the links to your site. And in a case like that, what might be happening is that the web spam team is kind of like saying, well, you cleaned up all of these, but some of these are still here, so we'll just keep that in place to avoid that causing more problems for your website. Kind of like a disavow on our side in that we treat these links and don't pass the signals for you. So that's something that might be happening in a case like this. And in general, that's not something you really need to worry about, because if we're disavowing those links for you already, then that would kind of be the same as if you remove those links. So from that point of view, probably that's less problematic. But I definitely check in the Webmaster Help Forum with the folks there, kind of copy and paste the email that you received, and maybe show a screenshot of what you're currently seeing there so that someone can take a look at that and say, this is normal, or this is problematic, and you need to do this to get that resolved, or maybe they need to send it to someone from the web spam team to kind of have a deeper look at it as well. A markup question, what if there's a rating on a product page when the product is not yet released? So I guess, for example, you have a product page for the Pixel 7 or something completely new that's definitely not released yet, and people are already dropping reviews there. From our point of view, that's not something that we specifically differentiate for. So I don't believe we have any algorithms that try to figure out, is this product actually available, and could this person reasonably have left a review on that? So I assume our algorithms are generally trying to collect this information and hope that it will settle down over time. So as this product ends up being released, then obviously more reviews will show up that are based on actual people using the product or actual buyers using the product. There might be legitimate reasons where people would be able to review a product before it's officially released. That could be if you have releases globally, in some places it's released early, in some places it's released later, then you might have someone in one of those late regions reviewing a product that they bought maybe through someone else so that they picked up when they visited the other location and they're able to review it because of that. So that's something where I don't think we have really hard spam guidelines saying you're not allowed to review products that are not broadly available yet. I noticed within the last few months that podcast RSS feeds are now showing up in Google search results. Can you address why this change was made? Would there be any SEO benefit by having an RSS feed hosted on my own domain? My concern is having my RSS feed on the domain of another company is providing them some SEO value rather than kind of linking to my own site. So I don't know exactly what you're referring to, but I believe for quite some time we've been showing podcasts in the search results. And we do pick that up based on the feeds that people submit for their own podcasts. And we try to show that in search. And from what I understand, this is something that we purely do for usability reasons to make it easier for people to actually go to your podcast and discover the content that you have there. It's not something where we'd say, well, this podcast is hosted here, therefore we'll give this website that's associated with some additional SEO boost. So just doing that for the SEO boost, I don't think would make sense. I'd really try to limit it to what makes sense for your users. And if people love your podcast, then make it easy for them to get to your website and to recommend that further to other people. What cache systems can be used to optimize the crawling of AJAX crawls on AngularJS? Wow, that's a surprisingly complicated question. I don't know what we would recommend in a case like that. In general, what I would do if you have a website that's built on Angular or any of the other JavaScript-based frameworks is make sure that it actually renders well. So use the fetch and render tool in Search Console to make sure that we can actually render your full content. Sometimes there are small things that you can tweak and make sure that that page actually loads on there. We have, I think, a handful of pages in our developer documentation around debugging JavaScript-based frameworks and around supported functionality from JavaScript-based frameworks. So for example, if you rely on a service worker to function in order for a page to load, then that might be problematic because Googlebot doesn't actually have a service worker that it would run for your website. So these are the type of things you might want to double check. And with regards to the specific caching systems, I don't actually know which ones would work there. If you have examples of websites using specific setups, you can test these using, for example, a mobile-friendly test, which also renders a page. It uses the mobile view of a page. But if it's a responsive design, that should be kind of equivalent to the normal view. You can try it out like that. You can also join the JavaScript working group that we set up a while back where you can ask us specifically around individual URLs, and we can double check to see what is kind of happening there in the back end. Wow, still so many questions. Where do we start? Algorithmic penalties that don't show up in Search Console, a site that we managed doesn't have and never had any manual actions. Yet the rankings are highly depressed. So I think we do a lot of algorithmic changes, and we have a lot of algorithms that affect how a site is crawled index and ranked in the end. So usually, we would see this more as trying to understand the relevance of a page rather than as a penalty. So specifically with regards to links, which you mentioned in the question, that's something we try to recognize these problematic links and filter them out on our side so that you don't have to worry about these kind of issues. If you are seeing your site kind of dropping significantly in invisibility in the search results and there's no manual action and there's no kind of technical reason that you can find behind that, then I would assume that one of our quality algorithms is looking at your site and thinking, maybe this wasn't as relevant for some of these queries as I thought. And then it would probably make sense to kind of take a step back and think about what you can do to significantly increase the quality of your website there. All right, it looks like we just have a couple of questions left. Before we head out, what else is on your mind? Is there anything specific that I need to cover? Everyone's so quiet today. We can talk about the mobile stuff going on. Is there anything? The mobile stuff. A lot of these tracking tools that you do or do not like have been showing a lot of changes specifically on the mobile side. I assume some of them are picking up on the mobile first index tests. Is that really close to launching, you think? So close to launching. I don't know if they're picking up on the mobile indexing testing stuff there, because that's probably a fairly small amount of testing that's happening there. And I don't know specifically what these tools are kind of looking at at the moment. So I wouldn't be surprised if there are other algorithms that we have which are specific to the mobile side. I think that's definitely a big focus area for us, because a lot of people are using mobile devices to search. So having algorithms that show different results on mobile, I think, would be kind of expected. So from that point of view, I don't think that just because you see these in the mobile search results, assuming these trackers are looking at normal search results, which I think they have a lot of experience doing, so probably they are, then I assume these are just normal changes that we have in the search results normally. With regards to the mobile first indexing stuff, that is something where we're still experimenting with. And the goal is kind of to recognize when sites are ready and to switch them over step by step as we see that they're ready. So that's probably not something that would just go from one day to the next, but rather be more kind of a gradual thing. But that hasn't started yet, that first batch of sites. Not anything official that we're announcing yet. So definitely the team is looking into the classifiers and double checking to make sure that they're picking things up properly. And I believe Gary is working on a blog post. So once we have all of that lined up, we'll definitely let you all know. OK, so you didn't say that you didn't start it. You kind of may have said you did start it. I'm looking at classifiers. OK. Well, I mean, we test with a lot of things. So I'd see that as something where we definitely try things out over time. And we make these experiments all the time. So it's not something where I'd say it's like, well, like someone flipped a big switch and everything is rolling over to mobile first indexing now. I don't think that has happened yet. Right, you said that before. You're rolling them out in batches as sites are ready. I asked you, have any sites been rolled out in that first or sub-batch, like first set of batches yet? The answer is yes or no, or you can't comment. I don't know. So it's something where we're definitely trying things out, but it's not that we have kind of an official batch that we've sent out and switched over. So it's possible that for individual sites, we're kind of already indexing the mobile version. But it's probably like a really small number. So I wouldn't see that as saying, like, we've started with this, but it's more kind of still in the experimental stage. OK, thank you. All right, so with that, we managed to get the hour through. Bunch of questions left over. I have the next hangout set up, I think, for Friday. So if there's anything that I missed that you need to have more clarification on, feel free to drop that into the Friday list. There's also the Google Form where you can submit questions for other video answers that we're working on. So that's another option there. And finally, of course, the Webmaster Help Forum, if there's something where you need to kind of discuss with other people in a more frank and direct way to get advice on what you could be doing with your website. So I hope those channels kind of help you get through the rest of the week, at least until Friday. All right, with that, thank you all for joining. Thanks for all of the questions, and see you maybe next time. Thank you. Bye. Thank you, John. Bye, everyone.


Neovascular age-related macular degeneration, NVAMD, can cause severe vision loss among the elderly. Genetic risk factors for AMD include several variants related to the immune system and lipid metabolism. Obesity is a well-known predisposing factor for NVAMD, but how this metabolic disorder modulates angiogenesis in the posterior eye segment was largely unknown. In this issue of EMBO molecular medicine, Andriessen et al. show that high-fat diet induced obesity causes dysbiosis in the gut that drives retinal inflammation and pathological angiogenesis in a mouse model of laser-induced caroidal neovascularization, CNV. This article was authored by Rebecca Scholes and Thomas Langman.


holding just a second trying to get him back on the line. He hung up on me. I'm sorry. Well, cut in there.  Yeah, well, you were trying to send Anderson. I had you to do that. This filibuster had some in the house and it may not be. Only on July the 4th, some of the people on the hill and all around here about it and yet everybody concluded that the wise thing to do was as soon as we could, after it became available. At this evening, questions have been raised. Some of the folks here may think we ought to sign it as soon as we can after it's passed. But the question has been raised now that if we sign the shooting craft firecrackers and it's the 4th of July and celebrating and the fellas get a few drinks of beer and we could kick off a tentatively announced that we're going to do it tonight, if the bill is available. That is my better judgment. But I thought before I did it that maybe I'd better check with one or two of my friends and let them think about it and see what their judgment was. They know the situation better than I do maybe. Mr. President, I think the idea, which has already been suggested, of signing it as soon as it's available is the correct idea. I think you have the right hunch here. I think a delay would simply mean that you felt that you ought to delay signing it. You know, it would be interpreted that way. Now, there's another thing that worries me. The Republicans are leaving for their convention. They're getting out tonight. Congress is not going to be in session the house tomorrow. And I'm afraid, I don't know what they're coming up, but it was bipartisan and I think it wouldn't... We ought to have Republican legislators who are like Kekel and like Hallick, just saying Dirksen just like we have Humphrey. That was my second reason. The first one had to do with the term, perhaps the violence, but the second one is that the Republicans do deserve a chance at this. That's what I think, and I think they'd charge me. He was trying to be cute and put off signing after he's ready to sign. That's right. Until after they left town. That's right. That's right. This is the overwhelming political reason. And that's what's being talked about in Washington. I was there last night and they said, the Republicans wanted a chance at it and that's the reason it's being moved up. And I think it would be regarded as a gracious gesture on your part to sign it promptly so they could take part in the ceremony and go about their convention. Yeah, all right. Okay, now, I want you to be thanking how you can make good suggestions. Lee Roy Collins, I thought that they hadn't given me a final answer yet, but he has told me if there's more to let him, he's gonna come with me. He's a wonderful man. And I believe it's the best man we could get. Absolutely, wonderful man. Would you stay close to him and give him suggestions? I'll be happy to do anything I can, Mr. President. Anything I can. I need not reiterate that there's not anybody in this cause that, in whose judgment, I think, sounder than yours. So I just wish you'd take some initiative and not sit back and be too modest. Very good. I'll endeavor to do anything I can to help out in this matter. And to volunteer, whatever advice I think will be helpful. You think about folks like Ted Keele or that general type all over the South that you found that are reasonable so you can make available some of those people's names too, Lee Roy, and I'll have him talk to you after he gets in. Very good. And I sure do thank you, Roy, and did our meeting come out all right with your board? Yes, it did. I thank you. Well. I thank you for, not only for what you said the other day with the board, but I thank you for what you did on this bill. Well, I have great confidence in you and I think we've got a long hard fight ahead, but if we work together, we'll find answers. We'll do it. So we're right. Yes, we'll do it. We're right. Goodbye. Thank you.


Hello and welcome to the introduction on Python programming course. My name is Alexander Hess. If you want to find further information on me, you can do so on my LinkedIn profile, which you can find at the URL linkedin.com slash in slash web artifacts, artifacts being the Latin word for artist. So I'm a PhD student at WHO here in Germany. And I teach this Python course in the bachelor program here. And the school is a business school. So everything in this lecture is to be taken from this point of view. It is to prepare business students to solve typical management problems with the help of code. So enough for the introduction. Let's start with the course. So here I am on the GitHub page, where I host all the materials that you will need to follow the course. And you can reach it if you enter the URL, GitHub.com slash web artifacts, and then slash intro to Python with dashes in between, so three words, intro to Python. So what is GitHub? GitHub is a service that allows us to host code. So you can think of it just like Dropbox. It has folders as we can see here. It has files. And the files contain code. And GitHub is just basically like a typical Dropbox system just optimized for dealing with code. So here you will find all the materials. And if you want to download all the materials in one file, you can do so with the screen button here. You just press the screen button and then you download the zip. For more advanced students that know how to use the Git command line tool, you can of course also clone it with a Git clone command. But for beginner students, and I'm assuming that many students taking this course are beginners, it is probably the best way to download the materials as a zip file and then unpack it locally and then copy it into one folder where you keep all your work for this course. Whenever you want to know what is the current version of the course, you can go here to the releases tab, click on it. And currently, the version of the course is the version 0.66. And in the future, you will of course find updates to the materials. So if you like the course and you want to get more content. So check in the future if you will find an updated version. And then, what can you do on this GitHub page? Well, you can already use your web browser to check out what kind of files you can find in the project folder. And if you scroll down, you will find a readme file that is rented here, which has a short navigation here of all the contents and links on it so that it's a little bit more organized. And then also, you will find an installation instruction here. You will actually find two instructions, one easier one and then a more advanced one. And the easier one is based on the so-called Anaconda distribution of Python. And you can find that if you go to anaconda.com. And then under products, you will find the individual edition and you can download it. And as you can see, it exists for Windows, Mac OS and Linux. So I think everyone should get happy with this here. And you should make sure that whatever you download is the Python version 3. So in this case, the version Python 3.7, because 3.7 is the current version. I mean, there is the version 3.8 out there already since the end of last year. But currently, the version 3.7 is the one that most people use. And then on the right-hand side, you see Python 2. We will not deal with Python 2 in this course. The support for Python 2 has officially been stopped at the end of last year. So you will still find Python 2 stuff all over the web. This is mainly for legacy reasons because many people still use it today. But please, if you start a new project today, don't do Python 2, do Python 3 here. What is anaconda? Anaconda, just for short, it contains, of course, Python. But in addition to the core Python system, the anaconda distribution also contains many so-called third-party packages, among which are, for example, the Jupyter package, NumPy here, SciPy, Pandas, and many, many more. And these are packages that you commonly need to, you know, to install if you don't have them already installed. And these are the packages that power Python and enable it to be used in the world of data science. And for a beginner, my recommendation is you download the anaconda distribution because then you don't have to deal with extra installations that follow. And you can just use, you know, the installation you get by one, by downloading just this one thing here. And also note that the installation and downloading from anaconda will take some time, so I think depending on your internet connection, it can be around half an hour, I would guess, that you should spend on that. If you don't want the anaconda distribution, you can, of course, go to python.org. That's the official Python webpage. And if you click on downloads here, you can already see that there is the version Python 3.82 currently. So you can get the latest Python version and also the purest Python version on python.org. But then consider that this only installs core Python and not the many third-party languages that you most likely need. So depending on the project or on your sophistication level, one way or the other is better. In the long term, you should, of course, learn how to install third-party packages on your own. But in the beginning, if you just start out with Python, you should start with anaconda. And then there is another URL I just wanted to show you, which is docs.python.org slash 3. And what this page is, it's the official documentation of Python. And one goal of this course is to prepare you so that you can actually read this documentation because the documentation here is rather technical and you need to learn some concepts and some technical terms in order to understand it. And one of the goals that I have for this course is to introduce these technical terms so that after the course, you can teach yourself anything you want in Python by just reading official documentation. And this is basically like, I bring up the analogy here. It's basically like a law book. So when you study, let's say, the law for, you know, the civil law, the basic civil law, for example, then you won't start by reading the law book in Germany at least, but you start by attending lectures by some more experienced lawyer or legal scholar that will then give you an introduction. And hopefully after the introduction course in civil law, you can understand some of the technical terms and you can read the law actually and then only later on you will go to the actual law book. And this is in the same way as I designed the course here. So I assume you don't know anything. I will teach you all the words, but then eventually you will have to be able to read the documentation on your own. Okay. So again, on GitHub, there's also after installation. Let's say there is a screenshot that shows the installation on a Windows machine and then you will find a link called Anaconda Navigator. This should be the same for Mac systems as well. And you click on it and then the window opens and the so-called Anaconda Navigator opens. And in the Anaconda Navigator, you will open what is called JupyterLab. And then within JupyterLab, this looks like this here also in the web browser on the left-hand side, you will see some files, some file structure. You can move to wherever on your hard drive where you saved the files you downloaded from GitHub or copy paste them somewhere so that you can find them here. And then you can double click the individual chapters here. And then they will open up in your web browser and you can work through the chapters in the book that basically the GitHub repository resembles. Okay. Regarding the word book, you see the files here, they have an extension called IPymb, which is then for IPython notebook, but they are labeled in ascending order starting with 0, 1, 2, and so on. And these resemble the individual chapters of I would call it an interactive book. And then every chapter consists of a lecture part. That is the first part always with the number 0 in front of it, 0 lecture. This contains the contents. And then usually at the end of a chapter, I have a notebook here or an own part where I have some review questions so that you can check if you know the stuff that you want to learn. And then there's always a exercises section as well, which contains the coding exercises. So in the lecture part, this is more like me presenting to you how Python works. And in the exercises part, this would be you solving real coding problems. Okay. So one note, here on my screen, you see an older version of a software called Jupyter Notebook, which is a predecessor of JupyterLab, the one that you should be using. And the reason why I use not JupyterLab but Jupyter Notebook is because I have a so-called presentation mode here. And currently the presentation mode in JupyterLab is not as nice. So I use an older version here. But don't be confused. The only reason why I use it is because I want to present you a presentation and not just read to you a text from a book. So just as in JupyterLab, you can just click here in this case on the chapter zero intro and then a new tab opens here. And this is basically a document that at first glance looks like a Google doc. And you have some menu bar up here. You have some buttons that do some stuff and I will explain some of it. And then if you scroll through, you will see lots of text. And in between, you will see some code cells in this very first chapter. You won't see a lot of code because it's just the introduction. But then starting from the next chapter on, you will see more code in here than actually English text. Okay. And now I will go into presentation mode and explain to you a little bit of what this course is about and what are you about to learn and give you some tips on why Python is a good language to learn and how you should learn to code. Okay. So first of all, what's the objective of this course? My assumption is that at the end of the day, you are a management student that wants to make some management decision later on with the help of some code. So you want to analyze some more complex problems and you want to come up with a good management decision. And the field in which this is done is recently called data science. And data science is a term that many people understand different things with. And for me, it basically means I look at real-life data, so real data sets, big data sets. And I want to use the scientific method to come up with a good management decision. And the course here, this Python course, is mainly aiming at preparing you to take such courses. So this course here is not a data science course, even though some examples will lead towards data science. But this is just a basic course to teach you the basic concepts of programming in Python so that later on you can take a more advanced data science course that uses Python to do data science. So why data science? I think when you study, for example, management, but also many other subjects, then early on in your studies, you will be taught math. And you will have to take statistics courses and so on. And those early courses, you have to take so that you learn methods that you can then use to study management problems. So even though math is part of a typical management curriculum, the people that study management, they don't really want to study math. That's not the main goal. But still, business schools decide for their students that they have to study a minimal amount of math so that they can later on understand actual business problems in a better way. And my understanding is that a pragmatic coding course should be part of any business school curriculum as well. And I would even go as far and say that a basic programming course should be part for every student in a high school as well. Because we are just in the 21st century and people use computers all the time, so I'm of the opinion that you should have a minimal understanding of how you can develop apps or how the internet works and so on. And learning to code in a language like Python, I think, should be part of a curriculum. OK, so that's the objective of the course. Prepare you for further studies in the field of data science. What you're seeing at the moment is not a slide. It's not a PowerPoint slide. It's a Jupyter notebook. So even though you couldn't tell the difference at the moment, we are currently still in our web browser, and we are viewing a document called a Jupyter notebook. And the reason why I do that is because if we go back 10 years, maybe, and you wanted to study programming, then what you would do is you would have to edit text files and do something in a device or in a software application called the terminal window, which looks kind of like this here. And this is scary, right? For most beginners that have never done any programming before, doing something in this black command line here is kind of intimidating. So what I can do, I can actually open a real terminal window here in front of my web browser. And then the question is, what can we do in this terminal window? Well, I can hit the Enter button, and for example, and get a new line. But I could also type, for example, just the word Python 3, for the Python 3 version. And then the Python 3 command line prompt actually starts. And then I can type in Python. For example, I can write print. Hello, world. And then the computer prints back to me, hello, world. Maybe I make that a big, larger as well. So this is Python. So I can also ask Python what is one plus one, and it tells me it's two. So you can code in the command line. But again, for a beginner, this may be not so nice. And actually it is intimidating for most people. So I can type in Python, and I can type in Python, because of that, I chose another format, which is the Jupyter Notebook format that you see, because this gives you the feeling that you are in a Google Doc kind of document. You can read it, you can scroll it, you can use your mouse in the first place. I mean, you cannot use a mouse in a terminal window. So a Jupyter Notebook is just for me a way to make the teaching maybe a little bit easier for beginners. And also Jupyter Notebooks, they are not just a teaching device. Jupyter Notebooks are actually in heavy use by data science practitioners. So in fact, Jupyter Notebooks are the de facto standard of how you would communicate results of some data science analysis to your colleague or to your manager or whatever. So it's a format that both in academia, but also in industry is in heavy use. Okay, and also maybe one last note. Of course, as we will see, a Jupyter Notebook is basically just a layer on top of this black terminal window. So whatever I just typed into the terminal window, you can also type into code cells, as we shall see, in a Jupyter Notebook. So at the end of the day, a Jupyter Notebook can be seen just like a terminal window, just that it has some nicer colors around it.  So on, let's go on. And here is a code cell. So this is a code cell, and when I'm not in it, then it has a, in this case, a blue border. And if I click into it with my mouse, the border becomes green. This may vary in Jupyter Lab. It's a little bit different, the colors, but at the end of the day, if I click out of side of it and I click inside of it, I can really see some difference here. And then now I'm in the code cell, and as we see, there is a command, which is called print, and then it says hello world. So it's the same print hello world that I just typed into the command line. So what can we do with it here? Well, we couldn't, of course, execute it. So the question is, now, how can I execute code in a code cell? So I would try and hit the return key, or the enter button, and what happens is I just get a new line, so nothing else happens. The code is obviously not executed, so I can delete the new line again. So executing a code in a code cell in a Jupyter notebook works differently, and how it works is also pretty straightforward. All you need to do is, you need to press the control key on your keyboard, have it pressed down, and then press the enter button, and then the code cell is executed. And we see that the code cell is executed because now there is a one within the brackets here. So that means that it's the first code cell that was executed after opening Jupyter notebook. And also we see the output, of course. We see hello world here. So this is how I can execute code, and of course I can go back into the code cell here and hit control enter again, and can execute the cell a second time. Now it says two here, and the output is, of course, the same. So this is how I can execute code, and I think you will soon get used to doing that on your own as well. So just to also explain to you a little bit of what are the contents in this course, and what are they not. So the course is titled an introduction to Python and programming. This course is not supposed to be an introduction to computer science. So these two words, programming and computer science, shall have a different meaning in this course. And I also have a third word here called IT because many people in the business world, they refer to people that work with computers as IT people. And so I want to give you a short definition of what these three terms mean to me and in the context of this course. So let's start with computer science. Probably the most traditional one of those. So computer science is, for me, a theoretical field. It's a field that was originated by professors of math departments back in the old days, so to say in the 1950s or 60s. And it's not only math people who came up with computer science, it's also engineering people. So the computer science departments at universities is kind of like a mixture between the math department and the electrical engineering department. And as I said, the computer science departments at many universities are rather old in comparison to most business schools at least. And so they go back to some discipline in math usually. And this is also what I mean by computer science. So computer science, for me, is a theoretical field that is trying to answer rather abstract questions. Like, for example, can a certain problem be solved or be expressed as an algorithm at all? And if we can find an algorithm to solve some problem, how good is this algorithm? So how fast will the algorithm run and so on? These are theoretical questions. And these questions are answered in the field of computer science. So if you want to learn more about computer science, you should enroll, of course, in a bachelor program at a computer science department and study computer science. So how is computer science different from programming? Well, computer science, as I said, is abstract. And programming, to me, is basically a formal language, a programming language that does concrete things. So if I type print hello world, something very concrete happens. And to me, it's like any other language that I learn. So if you take, for example, English as a foreign language, then you, as a non-native speaker, you basically learn a new language. And in the same way, you can learn a programming language. And of course, there are theories behind languages. So you can also study English linguistics. This would be the theoretical part. But most of us, if they study a language as a foreign language, we don't really care about the theoretical concepts. We don't really care about what are the theoretical concepts that help us to classify certain grammatical rules in a language or so on. So when we study languages, it's rather applied. It's rather pragmatic. We just want to go to another country and talk with local people when we learn a foreign language. And in the same way, I see programming as a more concrete thing. So I have a certain problem. I want to solve it. And I don't really want to ask the question, is this problem solvable at all? Or how fast will it be solved? But I want to really solve it. So it's a concrete thing here. And so oftentimes, also, computer science is, of course, a science. It's a scientific discipline. But programming to me is not science, really. Programming, as we will see in this course, can be thought of a craft or an art. So oftentimes, we have more than one solution for the same problem that are equally good. But one of them basically feels more natural to a programmer. And in this way, programming can be seen as an art form as well. You will hear programmers talk about how expressive code is, or that some other code base is not so expressive for some reason. And so it's a lot more opinionated, and it's less often science here. And then lastly, just as a side note, the term IT, within the context of a business school, would probably mean something like the IT support function that a corporation has. So IT is more about some people that make sure that your corporate laptop works, or that the printer works. And if the printer doesn't work, they will send someone to repair it. So IT departments are usually about taking hardware and taking software that is already finished, putting that together and make it run. And that's IT to me. It's not about developing new software. Of course, you can argue that there are companies out there like Google or Facebook who have the core competency of developing software as well. But most companies around the world, when they refer to their IT department, that's not of one of their core competencies. For them, it's a support function in the business. And this is how I treat the term IT. OK, so in this course, we mainly focus on programming. And sometimes, occasionally, we will also look into some concepts from computer science. So just enough that we understand what is going on in our computer's memory and maybe take some implications from that for the way we code. Why Python? So as you already started to download the materials and go through the textbook here, I think you already have a reason why you want to learn Python and not some other language. So I want to give you some more reasons why Python is a very good language to learn. So Python was invented by a Dutch person called Gido van Rossem back in 1989. And the Python version one was then basically developed throughout the early 90s. And back then, Gido van Rossem had the goal also to invent a language that just works. That's what he said. And that works basically on any platform. So it should be independent of you using a Mac or a Windows system or a Linux system. And also, the language was supposed to be a general purpose language. So back at the time, there were many languages that were invented to solve, to work in a very narrow domain of problems. For example, MATLAB. MATLAB was made to only work with numerical data. Another example of this may be PHP that was invented a little bit later in the late 90s. In the early 2000s, PHP is a language that was basically developed to do web development. But Python was not narrow-minded. Python, from the first day on, was a so-called general purpose language, which means you can do many, many different things with Python. And even to this day, when you know Python, you can set up a web server and program your own web application. You can program, of course, a web API that powers, for example, an Android or iOS app. You can, of course, also do data science with it. You can write utility tools that run on your laptop and that do some maintenance work on your laptop in the background. You can technically write games with it, even though this is not so common, but it's possible. So you could write desktop applications that run natively on your machine. You can do networking with it. So you can basically control. There are actually utilities out there in Python with which you can analyze what is going on in your local Wi-Fi and so on. So the fields of application are very wide. And that's a good thing for you as a beginner, because when you make a decision of which language you want to learn, I think one thing that you should take into account is what can I do with the language? And if you can only do one never thing, you limit yourself. But you should know that in order to get good at a programming language, you have to invest lots of time. And so the time is better spent if the language has many more purposes that we can use it in. And then also Python is from the first day on, so-called open-source language. So that means Gido van Rossem from the first day on open-sourced the code with which he wrote Python. That means other people can look at the code and no understand what's going on, how something is implemented, and they can also find security holes, for example, or parts in the code base where Python is not efficient and can improve it. So that's a very interesting concept, because back in the days, at that time, many people, many software people, they would write software but not release the source code. Why not? Because they want to make money off it, of course. So by open-sourcing something, that means anyone can look at the source code and basically copy-paste it. So you're giving away everything you have. So the question is, why is that a good thing? I gave you already some indication. I think it's a good thing because it gets many people around the world to use it. So in Python, when Python was adopted and many people started using Python, then many people also went back to Guido and the core developer team and said, well, wouldn't it be cool if Python could also do this and this and that? And then they also provided a first implementation of whatever feature they wanted Python to have. And then the developers, the core developers, could just look at it and maybe just use it. So in other words, by open-sourcing, Python got many, many people around the world engaged in it. And with many people working on it, Python just got really, really good. And also maybe a third reason why Python is a nice language, especially for beginners, is that Guido from Russell actually wanted to use Python as a instruction language for kids in school to learn to code. So he said, the language should look nice and it should be understandable. I don't know if it was meant for an elementary school kid, but at least for high school kids back in the day. So he already, also back in the 90s, he had an initiative with which he tried to promote Python in high schools. And so you can think that Python, from the very beginning on, was a language that was aimed at people with no prior knowledge to just study or learn how to code. And then throughout the 2000s, there was then the occurrence of Python too. And then also around the same time, the many companies around the world, they started to gather lots and lots of data. And then at some time, the core developers decided to develop the third version of Python. And when they did so, they took into account many, many things that are important when you want to work with big data. So Python is a language that actually enables its users to deal with big data. That means for us in this course, we will have to look at some more advanced constructs of Python, but then once you understand it, we are basically ready to go to deal with lots of big data and so on. So there are many reasons to choose Python. Of course, there are also other languages. Currently, like Julia is a very hot topic. Maybe there is also R, especially in the field of data science, and these are also good languages. But again, Python is a general purpose language, so you cannot only do data science with it. And this is some very good benefit, I guess. So then we should ask the question, who is using Python? So basically, we see here who is who of important tech companies and other organizations like NASA are on here. So let's go quickly over what these companies do with Python. So Google started early on with another language, but then they decided to write their web scrapers in Python, and the main reason was that being a so-called high-level language, Python is very expressive, and it allows a business that faces a different situation, competitive situation from a week to week basis to adapt its software rather quickly. And in other languages, changing software takes longer. Changing a running software takes longer, and Google basically decided to use Python because they wanted to stay a child from the beginning. And also Google hired Gido von Rossum actually at some time, so that he would spend some years at Google. And so they got, so to say, the number one expert in Python to join their company. And therefore, philosophy actually is at one point Python where we can and see where we must. So C and C++ are other languages that are faster than Python in some situations, but they are more complex to develop. And so whenever Google says, when we can get away with the higher-level Python that allows us to stay a child, then we use it. And then at some time, another company, Dropbox, they made Gido von Rossum such a good offer so that he joined them. And at Dropbox, this is basically a company that uses mostly Python for everything. So it's not only their web services, the backends that use Python, but it's also the client that you download on your Mac, on your Windows machine, on your Linux machine that is written in Python. So they got Gido. And he actually retired at Dropbox last year, so he's now a retired person. But he worked until his last day in business, basically, for Dropbox. Some other examples are Spotify, Facebook, and Netflix, and also Instagram. And what these companies do with Python is mostly data science. So Netflix had a competition roughly 10 years ago where people could win $1 million when they came up with a good algorithm to recommend the next movie you should watch. And these recommendation engines, they are written in Python, for example. Same for Spotify, so when you listen to the artist radio or the song radio on Spotify, and so you choose one favorite song or artist that you have, and then Spotify will play similar songs or similar artists to you, then they also use Python in the background. Facebook, of course, when they want to decide which ad they show to which person, this is a prediction algorithm, which is also mostly written in Python. And then for me, surprisingly, the NASA is there. So why is NASA there? Well, NASA is the one organization in the world that has the most data. So whatever you, for your own startup, maybe, are unsure if Python is good enough because you feel like your startup will have so much data that Python might not be able to handle it. Well, there is one answer to this. The NASA uses Python to analyze the data that they get from satellites and telescopes. And in these use cases, oftentimes, you gather so many data, so many data per second, that you cannot actually not even store all the data that is gathered. So in other words, when you really want to see a company or an organization that has big, big, big data, well, talk to NASA. And if they use Python, if Python is good enough for NASA, most likely Python will be good enough for you as well. And then for business people, maybe, an interesting use case, JP Morgan. So starting two years ago, JP Morgan required its first year analyst to take a Python course after onboarding. So even the investment banks don't stop here. So Python is just a language that is very widespread. And then you may wonder, what is this logo here on the right-hand side? This is a company called Magnus, the Magnus app. It's a Shasam for art. So it's an app that you will find for iPhones. And you can go to an art gallery, take a picture of an artwork, and it gets recognized. And I co-founded this company. So I can tell you for sure that this company uses mostly Python for its backend and also for the image recall and also for all the data analytics that is done here. So one more chart here to still support the argument of that Python is a good language to know. This is the number of questions on a platform called Stack Overflow. And we see that Python, the red line here, surpassed JavaScript and Java back in 2018. And the trend continued. So Stack Overflow is a platform where you would go if you have a technical problem that you don't find an answer for and you just ask a question. And then other people around the world will try to answer it. And Stack Overflow is known for really providing good answers unless you ask a question that has been asked before. So it's your job to figure out if the problem you're facing is if you're the first person facing it or not. But then if you pose a new question that hasn't been there before, you can expect many experts will look at it and give you a good answer. And the Stack Overflow did an analysis of what language people had questions on. And they do that regularly. And we see that Python is definitely in very high usage around the world. Otherwise, there wouldn't be that many questions. And then JavaScript and Java, why are they up there? Well, JavaScript is the one language that works in web processes. So whenever you open a web browser and some interaction should happen within the web browser, then you can be sure that this is JavaScript code running. And that's why JavaScript is so widespread. And Java is so widespread because in the 90s, when many of the big corporates started to develop their enterprise systems, they decided using the Java language. But to this day, Java is still in heavy use in the large corporates. But if you are a young and upcoming startup or if you're an academic at an Ivy League University or so on, you wouldn't start to do something in Java. You would probably go to Python or maybe even hotter in the last couple of months would be Julia. But with Julia, we will still have to see where this goes. And Python is more established here. So to finish this intro part, I want to give you three tips on how to learn to code. The first one is what I call the ABC rule. It's very simple. It means always be coding. So my recommendation is that when you start out with an introduction course, try to do some exercises every day for one or two hours. I know this is a lot of time, but the thing is this, you will follow my presentation pretty easily, I guess. And you will also easily read through the textbook. But when you are faced with a problem on your own and the code isn't there and you have to come up with everything, this will be rather hard. And so you have to get used to this. And so you have to really do that. And so yeah, there's nothing else that can prevent it. Also, you should know that many things in programming even for an experienced programmer, they are kind of like muscle memory. So whenever I type something in the command line and I go to a new project, I will, you know, the type or the kind of commands that I will type in, they may change because the project changed. And when I come back after let's say two weeks or 40 days, chances are that I have forgotten many of those commands because it's just muscle memory. So you have to really do something every day to keep your muscle memory up here. The second tip is to make a schedule. So this goes back to a guy named Paul Graham who is a co-founder of Y Combinator in the Silicon Valley. And he wrote a nice blog post that you can find linked in the intro chapter where he says, well, there are two types of people. There are makers and there are managers. And the difference between those two kinds of people is managers are people that need to manage their time on a let's say a scheduled basis like they schedule meetings on an hourly basis or they have appointments, they have calls with other people and so on. So usually the manager person is someone who thinks in, you know, deadlines or things in days or business weeks and so on. And that's the manager. And then there's the maker. And as an example for a typical maker, Paul Graham mentions artists. So I know this may be a stereotype but many artists are like this. For us as normal, as non-artist people, they seem to be a little unorganized at times. Sometimes they may be a little bit weird in that they have weird working times. Whenever we want to meet them, they may be late to a meeting or something. So I know that's a stereotype but what I wanna say with that is in some professions, especially let's say if you are an artist, you require creativity and how do you foster creativity in your day-to-day working schedule? Well, the answer is you have to try to get into a so-called flow state and what does a flow state mean? That means you're just working without thinking about it. You're just doing, so to say. And as a side note, people that are in a flow state often tend to be happier in life. So this is a nice side benefit but the important fact here is once you get into a flow state, you really get things going. Think of a basketball player who hits one three after another. After a game, when they asked how they did it, then usually they will say, well, I was just in a flow or something like that. And as a programmer, your goal should be to get into this flow as often as possible because this is where you get stuff done and that means you shouldn't work in deadlines. That means you shouldn't, you know, say, you know, I only work on the coding exercises from let's say six to eight or something because the deadline, if you have a deadline in mind, you won't get into this flow state and once you get into the flow state, you may be interrupted by a deadline, right? Or you may be forget the deadline, hopefully. And the important point is the important tip that follows from this is what I found to work very good for many people. When you do exercises, coding exercises, then just put them, for example, in the evening and have like an open end setting in the evening and just try to get the stuff done as it goes. And if you feel like you get into a flow state, just don't stop to work. And this is basically a reason why many programmers, when they get into a flow, let's say late in the evening, they just work through the night because they know now I'm in a flow state, so I just keep working until my creativity is gone and then you just stop. And if it's in the middle of the night, then that's when you stop. And this is just an observation. So you shouldn't try to schedule the learning. It's a creative work. And the last tip, I call it faith iteration. So this is an observation I made that if you ask experienced programmers what are good tips to learn to code, then you will get answers that you can basically group into one of two categories. So the first category is people that will say, okay, you should take some project and finish the project. You should, for example, try to build a website. If you want to study web development, just build a finished website at the end. And that's good. But then what this teaches you is how to ship a product or how to get something done. But what this doesn't teach you is rather high level concepts or theoretical concepts. So how can you get the knowledge of such? Well, for example, by following a course like this or following some other coding course or just reading a good book, reading a good math book or something. So sometimes this is better to get some more background and knowledge. And then what do you do with it? Well, you switch between the two phases. That's the idea of phase iterations. So at one point, when you're new to a given topic, then you just look for a very good book on this topic or some video course or whatever. You study some stuff for one or two weeks on this topic and then you need to make a project and finish something. And so you have to really iterate between these two phases. And when you do that, I think that's the best way to learn because it shows you how to finish something. But also you will learn some of the theory behind and that's always important. Okay, so I think enough said and we will now go to chapter one. And in chapter one, we will see our first coding examples.