You all here. Yes, thanks, Emily, for starting the recording. Christina, if you can share and encourage. Everyone, please enter your questions in the chat, in the Google Doc that Christina has shared. And now we'll start with the paper with the second set of papers. So the first paper is titled, Going Down the Rabbit Hole, Characterizing the Long Tail of Wikipedia Reading Sessions. And the authors are Tiziano Picardi, Martin Bilrec, and Robert West. OK, can you see my screen? Yes, we can see you. We can hear you, Tiziano. OK, perfect. So hi, everyone.  And Tiziano Picardi appears to be a student at the PFL. And this work is a result of the collaboration with Martin Galakoff of the Wikimedia Foundation. And my advisor, Bob West. So imagine you are, you hear about a TV series called The Last Kingdom. You check on Wikipedia, what is it about? And you see that it's about Alfred the Great. So you're curious to start and just start to follow the links. Discovering that he fought the Vikings. The Vikings that created Finland, a settlement in North America. And where they used to make wine from berries. And so on, going to fermentation, Neolithic ancient Egypt. You end up reading about the polytasma and the role of pharaohs. What just happened is called falling in a wiki rabbit hole. Being dragged by Wikipedia in a long session, where you get lost and learn about diverse set of topics. The name is, of course, a reference to the novel Alice in Adventures in Wonderland. This is a behavior well known in popular culture. But what we know is based only on anecdotal reports. In this study, we characterize these wiki rabbit holes in a data-driven way, by investigating the digital traces left on the server by the readers. To support our analysis, we collected one month of server logs off the entire Wikipedia in English. In total, we collected more than 6.5 billion page load events that we carefully anonymized. And thanks to the HTTP referral field, we transformed these logs into navigation session that connect sequential click of the same user. But how do we recognize rabbit holes session? There are multiple possibilities. But in our analysis, we consider as a fall in rabbit hole, when the depth of the session is at least 10 articles. By applying this rule, we retain around 0.24% of all the original sessions. And as the title of the paper suggests, we are exploring the long tail of the navigation sessions. Let's see now some of the properties of these long sessions. First, by looking at the most common entry pages, we notice that often people start longer explorations from articles about election, television shows, and historical witnesses. All these articles have one thing in common. The infobox has navigational links, such as the sessor or successor, that are used by readers to explore all the articles of a series. A second interesting property is that when we look at the temporal dynamics, we notice differences between day and night. In this plot, we have the fraction of rabbit hole session by time of the day divided by device with day and weekend. We notice that the fraction of rabbit hole sessions is higher during the night, with an increase of almost two times from mobile. But what topics are associated with rabbit hole sessions? So to answer this question, we use regression analysis. First, we assign to the first article of the session the topic vector obtained from ORES, the official Wikipedia topic classifier. And then we assign the positive label to session with at least a depth of 10 articles, and the negative one to all the others. Then by fitting logistic regression, we obtain the topics that are mostly associated with falling in a wiki rabbit hole. The co-efficient show that the topics such as libraries, history, and entertainment did reverse two longer sessions, while articles about stem and medicine are more associated with brief interaction with Wikipedia. Finally, the next natural question is how do these sessions evolve beyond the first page? For example, do people move semantically far from the first article when they navigate the content? To answer this question, first, we projected all articles in a topic space obtained from ORES. We basically use the topic vector as the article position in this space. And then for each article, starting a session like a great triangle in this case, we look at the evolution of the trajectory in this space. To have a null model to compare with human navigation, we created a random worker that navigates Wikipedia by picking a random link available on the page. And for each trajectory, we run the random worker starting from the same document and for the same number of steps. And finally, we compute the mean square displacement that is used in physics to measure the dispersion of particles from the starting position. It is basically the average of the square distances. With this metric, we can plot the diffusion of the random trajectory in the semantic space. Each line in this plot is the average of the displacement of the trajectories of a given length. When we add the human generative trajectories, we observe an important property. They don't converge to a random location. This is important because it means that readers stay in the semantic neighborhood of the first page even for a long session. So on average, in Wikipedia rabbit hole, readers get lost, but in a set of consistent topics. So in conclusion, we learned that Wikipedia rabbit hole sessions are affected by the structure of the page, are more frequent at night. They start more frequently from articles about entertainment. And on average, they don't lead the readers to a complete random page. Thank you for attention. I'm happy to answer your question. Awesome. That's time for one question. Yeah. Thank you, Luciana. There are many great questions, so I'm sure you will answer later. To pick one here in this work and in this presentation, you focus on the long sequences, but how might navigation in such rabbit hole sessions compare to different navigation paths and different navigation strategies that one might see either in games and artificial scenarios or in a real navigation in the wild? So this work is a follow-up of another paper where we investigated more broadly the navigation. And we also compare with the session generated by games. And there is an important difference that is in games. There is a clear definition of success. So you know exactly where the user was going. And so you explore how the user navigate this network to find exactly what is the goal. In natural navigation is very different. You don't see this kind of going to a app, meaning a page that is generic because you are going to a central node to find the destination page, but is in average a lot shorter. People attend, for example, 78% of the sessions are composed by a single page loop. So it's a hard check and then a little bit bigger. And then the exploration is different. It's not, they tend to go to the periphery of the network. So they enter in very popular pages from a search and then they diverge to a periphery. And then many other differences but there is a full paper about that. Awesome. Thank you, Taziano. We'll move on to the next presentation by Nicole Schwitter. And the title of the talk is Offline Meetups of German Wikipedians Boosting or Breaking Activity. Thank you all for the introduction and the nice presentation before. So I will dive right in. What I'm presenting today is a part of my PhD thesis that is still a work in progress. And in my PhD, I research, well, Wikipedia and I particularly focus on the people behind it, on the people that collaborate together to write this online encyclopedia. Now I'm less focused on the online component but I focus more on the other side, the offline side.  Those informal meetups can come in all shapes and sizes from the, from meeting up in a pub and drinking a beer together or going on a hiking trips or organized barbecues or also be more work related in the terms of like open editing events. So those offline meetups are what I'm interested in in my PhD and I'm looking at how offline meetups influence online behavior. And today I'm focusing on one specific domain of online behavior. So I'm looking at how offline meetups influence online contributing behavior. So editing on Wikipedia. To answer that question, I look at the German Wikipedia from 2001 up to 2020. And on one hand, I have contributing behavior that I take from the data dumps where I look at the metadata. So I know who edited what when and I look at meeting data. Now meeting data is less, is not process generated. So it comes less structured but it's still available because meetings are organized on the platform. So my goal was to scrape all organizational pages. Those pages kind of looked like the screenshot on the right. So you have a list of attendees and list of apologies and also minutes recorded. So my goal was to scrape all meetups organized on the German Wikipedia in that timeframe. I ended up with over 4,400 meetings that took place in the timeframe, most of them while 99% taking, being organized in the German speaking area. But 1% did take part globally in 20 different countries. So far to the descriptives. Now my question for today was is to identify the cause and effects of meetings. So I'm interested in whether those attendees with their t-shirts edit any different than a comparable group that did not take part in meetings. So what I want to do is I want to compare on the right the meetup attendees, the treatment group to a control group of non attendees. So for each of my attendees, I selected one similar twin, similarity being defined as being similar in tenure and past activity, and then I can compare them. So my control group on the left and my treatment group on the right are similar up to the point of the meetup. And now I want to compare their behavior after the meetup. So I have a quasi-experimental setup and I can use a difference in differences design. So that means that I want to compare the changes before and after the meetup across the actual attendees, the treatment group and the corresponding twins, the control group. In this presentation, I look at the long-term change. So I look at one year before the meetup versus one year after the meetup. In the paper, I also look at shorter-term changes and I break the process into two separate parts. So first, I look at meetup and I look at users which have not made an edit in the year before the meetup and then look at if they make an edit after the meetup, yes or no. And I look at users which have made an edit in the year before the meetup and look at the change in the number of edits. So I have either did people that not edit before edit after the meetup and if yes, to what extent did they change their editing behavior. So now on the left, I look at this binary decision. So people did not edit before and now the intercept is the baseline probability and what we find, what I find is that 6% of people that did not make an edit in the year before do make an edit in the year after. So there's a 6% probability to start editing in the year after if you didn't edit before. However, if you're in the treatment group meaning you actually attended a meetup, your probability is 25% higher. So if you actually attended a meetup, your likelihood to start editing is at 31%. If we look at the extent, we find a negative intercept. What that means is that people make on average 12 edits less in the year after than in the year before a meetup, at least if they are in the control group. If they are in the treatment group, meaning they actually did attend this meetup, they only make about four edits less. So there's a negative trend, but it's much less pronounced in the treatment group than in the control group. So to summarize what I find is that meetups have a positive effect on Wikipedia. Users that do attend the meetup are much more likely to start contributing again after the meetup if they have not been editing articles before. And while it is not the case that users increase their contributions after a meetup in comparison to before the meetup, the reduction in contribution is less than a reduction in a comparable control group. And if you want more details about methods and more detailed analysis and directions for future research, please also look at the paper and come to the poster session. That's it. And I'm looking forward to questions. Thank you. Thank you very much, Nicole, for the good presentation. One question is how did you, oops, I missed it. Do you also have any data outside of the German Wikipedia? And then also thinking about next steps in your research, what are the next steps that you're planning to do? And also if you can also do active experiments and do some community campaigns, what would be ideal experiments that you could envision? Thank you. So many questions. To start with first one about language versions, I'm only focusing on the German one, scraping all meetups that take me about one year. So there's just, there are many meetups and many pages to read. So it just does take a lot of time, especially going to larger language versions. I did look at the Atlantic Wikipedia as well, but I didn't really analyze it and used it mostly as a toy example. I did forget the other questions. It was just about the next steps. Our next steps. So yeah, in my PhD in general, I'm also looking at how online behavior about offline meetups influencing elections and norms or reverts. And so I'm currently working on that. Okay, thank you. There are a lot of questions. So I'm sure you'll have that. There are several questions for you, Nicole, which I'm sure people will ask you in your poster session. Thanks, Christina. We'll move on to the third and the final full talk in this session. And the title of the paper is The Role of Online Attention in the Supply of Disinformation in Wikipedia. The authors are Anas Eleviari and Giovanni Luca Giampaglia. So over to you, Anas. And everyone hear me? Yes, we can hear you, we can see you. Okay, awesome. So my name is Anis and I'm a PhD student at the University of South Florida. And today I'm presenting our paper on online attention and disinformation in Wikipedia. I have worked on this research alongside my supervisor, Dr. Giovanni Giampaglia. So there exists many potential threats to Wikipedia's knowledge integrity. One of these threats is the creation of hoax articles, which are fake or fictitious entries that were deliberately created. For example, this is a hoax article that was created about a fake Australian God and lasted around 10 years without getting caught. Vandalism is another common threat to Wikipedia's knowledge integrity. However, hoaxes are different from vandalism in the sense that vandalism defaces existing articles while Wikipedia, while hoaxes are completely new entries. Vandalism attacks can take the form of sexual insults, humor, page-planking as shown by this example. In a research conducted by Dr. Pomer and colleagues amongst them is Dr. Robert West. They showed that 92% of hoaxes get detected within the first day, with one in 100 hoaxes survive for more than a year. So people's behavior online is influenced by both endogenous and exogenous factors. And these factors in turn shape how we produce and consume information on the web. And in a study conducted previously by Dr. Giampaglia and colleagues, they studied the creation of non-hoax articles on Wikipedia. And they showed that there is a sudden spike of attention right after the creation of Hurricane Sandy entry on Wikipedia, which means there was a need, there was a demand for an article to be created about that topic. They then went on to show that the demand drives the supply of information for non-hoax articles. And the unresolved question is what drives the creation of hoaxes on Wikipedia? And to get a step closer into answering that question, we tried to see whether online attention in the form of traffic to Wikipedia toward a topic increased the likelihood of disinformation in the form of hoax articles being created about it. And to do so, we've collected a set of known hoaxes, which is 190 hoax articles that are kept within a page maintained by Wikipedia moderators. And these hoaxes are successful in the sense that they evaded detection for more than one month or discussed by media sources. This plot shows how many hoaxes were created for each year. And as we can see between 2005, 2007, that's where the majority of hoaxes were created in that set. And that is parallel with Wikipedia's known peak of activity during that time. And in 2008, we see a decline. And that's because the MPP process, Wikipedia's patrolling process started in November, 2007. And we've mentioned the word topic before, the topic in our research, we define it as the known hoax outlinks, which is the pages that are linked within a hoax article. And we are studying the traffic for that topic 14 days and over a 14 day observation window centered around creation days. So seven days before creation and seven days after creation. And for each hoax we calculate the relative volume change, which is delta V over B with V of B representing the topics median traffic seven days before and V of A representing seven days after for the topics median traffic. And if that value is positive, if the relative volume change is positive, that means that the hoax accumulates more attention before creation than after. However, to affirm that claim that it is not unique to hoaxes, we have to establish a baseline to compare our relative volume too. And we collect what we call a cohort. And a cohort is defined as all the non hoax articles that were created on the same day as each hoax. So we have 190 hoaxes, 190 cohort for each hoax. And this cohort was collected after resolving redirects. And this plot shows that the inclusion of redirects not only inflates the cohort size, but also can skew the traffic analysis that we do, which is getting the values of delta V over B. And inspired by the work of Dr. Kumar and colleagues, we studied that parents' features to understand how hoaxes differ from cohorts. We're not gonna get into detail about all of the parent's features, but we're gonna point out one feature, which is the weak link density represents by how many outlinks exist within a page per 100 words. This graph simply shows the Z scores of that appearance feature. If the Z score is positive, that means that the hoax article tends to have more density than the cohort. And if the Z score is negative, it's the opposite. And we can see in this graph that it's nicely centered around a zero, which means that we can eliminate any confounding factors that can exist from our analysis due to different linking patterns, such that hoaxes and cohorts have similar linking patterns. So that's why it's an apples to apples kind of situation when we compare hoaxes to cohorts. And this graph shows just a sample distribution of delta V over B for one hoax. The turquoise bars shows the distribution of the delta V over V for the cohort. And the red line shows the delta V over V for the hoax and the black dash lines shows the average for the turquoise distribution. And if the value of the hoax, if the red line is to the right of the black line, that means that the hoax compared to its cohort tends to accumulate attention before its creation than after. And to better understand if this applies to all of the hoax articles within our dataset, we calculate the difference. The difference is simply the subtraction of these two lines. And if this difference is positive, that means that firms the case that attention is accumulated before creation for the hoax. And this shows the distribution of the 190D values that we got. And the mean in this case is positive, which means in most of the difference values, hoaxes tend to accumulate more attention before creation. And we constructed the 95% confidence interval using bootstrapping. And we can see the sample mean falls within the 95% confidence interval. And to conclude, hoaxes tend to have more traffic accumulated before their creation than after when compared to their cohorts. And this is consistent with the model which the supply false and misleading information is driven by attention. And probably the most important conclusion of all is do not create hoaxes. Like if there's only one point you get from this presentation, please do not create hoaxes. And if you would like to replicate our plots for generate our data, this is the GitHub link. And thank you all. And I'm looking forward to answering your questions. Thank you, Anis, for the great presentation. One question related to the selection on the media coverage. Could the discussion by media sources introduce a bias because there might be some very short-lived hoaxes that get picked up by some media. So did you check the characteristics of the hoaxes and the duration of the coverage? Not individually, but all of these hoaxes are successful in the sense that they were discussed. Not all of them are discussed, but some of them are discussed. But we didn't go individually into checking whether each one of these hoaxes are discussed by media sources. However, in our future consideration is to expand this to not only successful hoaxes and in non-English Wikipedia entries as well. Awesome, thanks so much, Anis. Now we move on to the lightning docs. This is the second round of those. And again, please put your questions for these lightning docs in the Google doc. We won't have time to take questions immediately afterwards, but you'll use that during the poster session. So, Miriam, if you could please start the lightning docs, please. Hi, my name is Nidia Armandes. I am responsible of data processing in Gai-Cid Conicet, a research institution in Buenos Aires, Argentina. On this video, I will present the first steps of a study related to improving Wikipedia's references. Wikipedia allows to automatically generate citations from a URL using a citation generator. These automatic citations sometimes present errors as you can see on the screen. Our research is part of Web2Cid, a project that is developing a tool for improving the results of the citation generator for URLs. We want to evaluate the performance of the citation generator, comparing the citation that it produces for a URL with the correct form of the citation for that URL. To do this, first, we need to find a set of correct citations having URLs and extract the metadata from them. We also have to obtain automatic citations for the same URL and measure the difference between the correct and the automatic citation. For the first step, finding a set of correct citations, we gather the corpus of 10,000 featured articles from English, French, Portuguese, and Spanish Wikipedia's. We isolated all the citation templates from the wiki code and we then extracted the information for a series of parameters, title, author, source, date, and of course, URL. So if you're interested in our findings regarding these first steps, please take a look at our long abstract of the site's conference. And if you want to know more about the script and the following steps, visit our Jupiter notebook on pause and join us on the conversation of the wiki workshop. Thank you. In the last few years, major social media platforms like Twitter and Reddit have noted the phenomenon of bannivation, a banned circumvention strategy that leads to temporally disjoint operation of two accounts. To study online bannivation, we have curated a dataset of about 8,500 bannivation pairs and Wikipedia, where each pair comprises a banned malicious parent and a child that was created to evade the ban and continue malicious activities. We formulate the bannivation lifecycle and address crucial early prediction, detection, and attribution tasks using machine learning models. Our models demonstrate an impressive ability to predict and detect bannivation. Additionally, our data-driven analysis shows that there are similarities between parent and child accounts in terms of edited pages and vocabulary used. Interestingly, some bannivators tend to hide by using fewer swear words and more objective language than their banned parents. Based on our research, we are working on a tool that would help Wikipedia moderators in evaluating suspected bannivation. Here's a demo of the tool by Zen and Jio. Let's say we have two users with quite different user names. The model informs us that these two users are banned in vision pair with a probability of 0.87. We want to understand why our model thinks that way. When we open the metadata dashboard, we can note that even though these two user names don't seem similar, they are actually editing the same Wikipedia pages such as Paul Rose and Victor Davis. For a closer look, we analyze the most similar sentences added by these two accounts and notice that they both mentioned two people with the same last name who were born in the same location and were involved in rebelling groups. Our system also captures sentences that discuss burials in symmetries as similar. It also allows visualizations across other categories like vocabulary overlap, cycle linguistic attributes, and sentiment scores. Thank you. And please stop by our Wiki Workshop poster and full presentation in the main conference. Hello, everyone. My name is Patrick Keogh. I'm a PhD candidate at Sobs at Monash University. Today I'll be presenting this early-stage joint research project titled Editing the Truth. In this project, we want to understand how and why governments may be interfering in Wikipedia. In particular, we're looking at the capacity of states to disseminate information in Wikipedia. And we're using government edit quality. In particular, the ability of government entities to adhere to the strict editing standards of Wikipedia to create a new measure of bureaucratic professionalism in the digital space before looking at the determinants of government editing behavior on Wikipedia. We start by creating a data set of 46,000 edits from 702 government entities in 83 countries. Create this data set using a database called VBIP which has ownership information for the universe of internet protocol addresses. We create a tool to query each owner in the group of knowledge panel and extract an anti-description for that owner. We then create a training data set of entity descriptions using the Wikidata taxonomy and classify each owner in the DBIP database as government or not government. Using our government IP data set, we match this to anonymous Wikipedia edits in all compatible language versions of Wikipedia and use this vandalism detection tools to measure the good intent of the government editor and whether or not the edit being made by the company entity damages the quality of the article. We find the percentage of higher quality and low quality edits using this measure are a good measure of bureaucratic professionalism in particular that states with higher education a greater proportion of female star and higher cybersecurity skill make higher quality edits on average. We then map the geolocation of each Wikipedia article being edited by the government. Here we see a map of government edits by United States government entities and we use this to uncover the terminates of government edits. We look forward to discussing this with you more in the poster session. Hello everyone, nice to meet you all. My name is Makola and my colleague is Diego and today I want to present our work Wikifog find semi-automated for checking base in Wikipedia. Even though the full automation of the fact checking remains unreachable today, any tool that can support the fact checkers with the manual work can be quite useful. In this work we concentrate on search for fact checking. We experiment with different manual search strategies that true claim label and the article's quality influence on the fact checking. We use the fever data set and process that for our needs living on the supports and refuse labeled samples also we actualize their article names. We use the rate of found items, the rate of correctly placed item on the first position to relate our results. According to our experiment, the searching for the raw claim in the Wikipedia search gives the good results, but the enhancement of the strategy by extracting the name entities and looking for them shows the great increase in the metrics. Another finding was that using the Google search and the raw claim query gives the comparable good results. Another interesting discovery was that searching for sources to refute incorrect claims can be more complicated than looking for correct statement evidences. But the strategy with query modification reduced that effect by searching for mentioned name entities instead of using the whole claim as a query. Also we observed that articles quality got from VP10 model and we found out that the distribution of articles of different quality differs on the different position in search. Also we decided to build the initial pipeline for ranking results to make the search more specific for fact-checking, using the quality information and learning to rank model that increase the recall one in our case. Thank you for your attention, looking forward to answering all your questions and speaking with you and stand with Ukraine. Hi, I'm Nathan DeBlunheis and I'm excited to be here at the Wiki Workshop to present my research investigating how to measure Wikipedia article quality in one dimension by extending ors with ordinal regression. This is from work that I presented at Opensim last year. Article quality measurement is an important topic and thing to do for Wikipedia community members to track knowledge gaps as well as for academic researchers to study important topics like political polarization and collaboration. Now Wikipedia has Wiki projects, the Wiki projects have members and the members do quality assessments that are really valuable that allow us to study article quality in a really good way. However, their assessments are limited and that they happen regularly in time. Articles can change between assessments and this leads to missing data. As a result, researchers have used machine learning to predict that missing data, the quality levels of articles that haven't just been assessed. The second limitation of the assessments is that they happen on a discrete scale. This is probably actually a good thing from the perspective of the people doing the assessments, but for statistical purposes, it's a little bit complicated because we might want to measure more granular levels of quality. Hathaker and others building on his work have dealt with that by basically combining the output of the ORS model into a single score ORS model actually outputs different scores for each quality level. This process of combining the scores depends on assuming that the different quality levels are roughly evenly spaced from each other. But I think that that assumption is doubtful because it might take a lot more work to raise a good article to a feature status than to raise a stub to a start level. And so in this project, I'm relaxing that assumption by using an ordinal regression model to combine the weights instead of just taking their sum. And doing this provides an improved level of accuracy on realistic research datasets. And we can also infer the different spacing between the quality levels. So this chart shows on the vertical lines like for different datasets, the quality levels that we would, the different quality levels. Yeah, so that's it. Thank you very much. Looking forward to chatting with you soon. Hello everyone, I'm Kai Zhu. So today I want to share with you our research in progress, kind machine translation narrow knowledge gap across languages. This is the very early stage of work. So any of your comments, suggestions and feedback will be highly appreciated. So in this study, we want to investigate the role of machine translation in content production on Wikipedia and how it could help with the knowledge gap issue. So we leverage initial experiment where Wikipedia integrate Google Translate into its in-house content translation tool in January, 2019. So content translation is this tool developed by Wikimedia Foundation to support its editor create an initial translation draft of an article from another language of Wikipedia by translation. So from January, 2019, you can use Google Translate to translate articles. So we have a set of research question that we aim to answer. We don't have the answer for all of them yet, but this is kind of the goal, okay? So the first question is about information is changed between different language edition of Wikipedia. The second question is about how the behavior of editor will change the way and the way they collaborate with machine translation algorithm. The third is about the diffusion of locally relevant and cultural specific content. We'll have some preliminary results. First of all, I will just say such clear trends after the integration of Google Translate in 2019. So there's a steady increase in number of articles created with content translation. Okay, so that's all the time I have. If you're interested, please reach out. Hi everyone, I'm Martin Mikkel. I will give you an overview of this paper called Wikipedia, Older or Teen. Co-author with Christian Consonni and David Laniado. Wikipedia is an undeniably successful project with an unprecedented number of online volunteers. However, researchers observed that the number of activators for the largest Wikipedia language editions start to decline in 2007. Years after those announcements, researchers and community activists still need to understand community growth. In this study, we inspected the temporal evolution of the number of activators, comparing the trends obtained for different language editions and performing clustering to identify in general patterns. We focused on the 50 largest language communities in number of activators in August, 2021. To group communities exhibiting similar temporal patterns, we applied K-means clustering to the time series and we used dynamic time warping to measure a similarity between the temporal sequences. We obtained these six clusters. Our results suggest that only half of them exhibit a pattern of decline and or explanation, while the others are still growing in the size of their age or community. This represents a significant breakthrough, given that it was widely assumed that communities were all in decline for not being able to maintain their number of activators, possibly because of a focus on English Wikipedia on other language, large language editions. To talk more about this topic, we'll see us in the Wiki workshop. Thank you very much. This paper, The Digital Gender Disparity, is part of a larger Wikimedia research project titled, Mapping Repositories on Gender and Sexuality in Indian Languages at CIS A2K. This research rise and continuum with earlier research done in the last decade at CIS A2K on gender gap in Wikimedia research projects. The gender gap and bias as noted in the existing scholarship lies in two forms. One is the participation gap and the editor composition, the second one being the nature of the content. This research focuses on the nature of the content that is produced on gender, sexuality, and feminism in Indian languages. Thereby, this research lies in three major themes, knowledge production on gender and sexuality, digital documentation of existing knowledge, and Indian languages. To understand the process of knowledge and content creation on gender, sexuality, and feminism, through this research, we have interacted with major stakeholders in the realm, such as writers, translators, educators, artists, producing content within the capacity of individuals and organizations. Two major observations that have been made in this research are going to be presented here. We have learned from our respondents that the digital space is no less to the actual world. Sociopolitical ramifications that exist in the actual world are also reproduced in the digital space that hindered the process of knowledge production on gender, sexuality, and feminism, which also leads to the lack of digital documentation of the existing knowledge on gender, sexuality, and feminism. We have also learned that social media has evolved as a space for creation of knowledge and content and its dissemination, especially by individuals hailing from socio-economically marginalized sections. The second finding of this research was the importance of locating a critique. We have learned from all our respondents that the knowledge that they produce is very critical of how gender operates and they have been very consciously deploying an intersectional perspective while they are producing knowledge on gender, sexuality, and feminism. Specific examples to this, as pointed out by our respondents, is the difficulty in translating conceptual vocabulary on gender and sexuality in Indian languages. The overemphasis of framing the feminist critique from the western or the Anglo-centric perspective. It is also pointed out to us from our respondents that the Wikimedia projects should also include these critiques and work with a similar intersectional approach while they are producing knowledge and content on gender, sexuality, and feminism. Thank you. This work is called Wikimedia and Gender, The Deleted, the Market, and the Unpolluted Biographies, created by Professor Nuria Ferran Ferrer, Professor Julio Meneses, and me, David Ramirez-Ortones. The gender bias in Wikimedia presents as a problem of three different kinds, editors, content, and readership. We focus on the gender content bias, specifically in the content creation and deletion process. We are working on English Wikimedia on biographies of scientists, the deleted, the market, and the unpolluted biographies. In this diagram, you can see different types of biographies after the evaluation process made by editors creating a spectrum, starting from the deleted biographies, those marked for lacking notability or reliable sources, and biographies without any mark or unpolluted biographies. We propose this methodology for the analysis of two corpus of data, biographies in the articles for deletion category, and biographies stuck to include reliable sources. In this way, we can cover invisible biographies for those who are not administrators. We consider that in order to solve the gender bias within Wikimedia, we need to understand the logic of the evaluation of biographies regardless of the number of biographies created. If we don't take this into account, despite that more articles are created, the rate of deletion or tagging may still maintain the imbalance and the gap will continue to persist. Thanks for your attention. Please get in touch with us. Hello, everyone. My name is Oktai Hassanzadeh. The work I'm presenting today is done as a part of a project at IBM Research with the goal of building an AI agent that could help with preparing for the future and helping the world plan for the so-called known unknowns. For the work we're presenting at this workshop, what we are exploring is whether we are able to build an event analysis and forecasting solution using the knowledge expressed in texts and Wikipedia articles about past events and their consequences. I have a very simple example here to show the high-level idea. If we go back to January 8th, 2020, we may be able to map the initial news articles covering the World Health Organization's announcement on a pneumonia outbreak with a known cause to relevant knowledge in Wikipedia. For example, the knowledge that SARS outbreak had similar events at the start. Then we can look also for what SARS outbreak resulted in, use that to predict some of the consequences of the new outbreak. For example, the effect on tourism industry and then oil and gas prices, which also happened for COVID. The question is, will we be able to do this faster than analysts and at a scale? Here's a high-level architecture of the solution we are building using Wikipedia and Wikidata and in part Wikinews. At the core, there is a causal knowledge graph of events curated from existing event-related knowledge from Wikidata and then augmented by knowledge extraction from Wikipedia articles. In this solution, monitoring ongoing news is done through mapping news headlines to event concepts in the knowledge graph and the analysis of the events is done through looking at past similar events and their causes and consequences as captured in the knowledge graph. As you can see on this example, Wikidata already has knowledge around major events and relations such as has cause or has effect, but of course, it's far from complete. At the same time, there are many relations expressed in text and Wikipedia, even the first paragraph of the article and what we do is automatically extracting such relations to augment the Wikidata-based knowledge graph. This is done primarily through a number of neural models for language understanding. If you come to our virtual session, I would love to go through some of the lessons learned so far and the work we can do with the Wikicommunity to address some of the challenges we have faced in this project. Good day and welcome at the presentation on considerations for our model on noun classes in Nile and Congo B, also known as Bantu languages in Wikidata. I am already here with the University of Cape Town and this is joint work with Lange Komalo from the Sadi Laag and Zola Matlaza from the University of Pretoria. The broader context is about the possibility of Wikipedia pages in the language spoken in Sub-Saharan Africa. Abstract in Wikipedia might help speed it up in creating those pages, but it relies on Wikidata for lexicographic data and it has very little of that for the NCP languages. The first key step is the noun class system as it governs the rest of the sentence. So here's a summary table of those noun classes and what kind of things can be found in each of those classes. For instance, class one in the single appears with two and for its plural for humans, whereas other animals go in noun class nine and 10 respectively. These noun classes affect the sentence construction consider for instance the adjective toll and the verb eats, which remain the same for the English, whatever entity it applies to, but for the NCP languages, there are concourse that depend on the noun classes of the noun in order to complete the adjective and the verb as we can see here on the slide. And we set out to collect those requirements for a model which are based on two premises, being linguistic soundness and bootstrap ability to order on a resource languages. So here's a sampling of those 14 requirements. First, it would be a mine-off system like shown in the previous tables that is key since it's the only one that satisfies those two premises. It also includes translation aspect and various optional features. The list of requirements in the abstract may be challenging to implement fully, but we are nonetheless trying to design a comprehensive model that is extensible. A first concrete action for wicked data would be to use mine-off system to cover the very basics, which then also aligns with existing natural language generation functions. Any feedback on the requirements is welcome. Thank you for your attention. ["Mine-off System"] Definitely the most musical workshop that you are ever going to attend. Thanks so much to all the presenters. I know that there was a lot of lightning talks, but you'll get a chance to talk to each of these authors, each of these presenters during the poster talk. Before that, we have an eight-minute break, and I believe during this time, get your coffees, and then we'll come back for the poster session. If you can stop the recording, Emily, that would be great.


Part of AK's learning series, do I have it on okay, that is not a good start, clicker is not working, let us go. So that is about me, my name is Nilesh and that is my website, GitHub account, Twitter, LinkedIn, in case you want to connect on any of these social media platforms, I am okay. What did we do so far? So we had three parts of this series, part one was getting started with Docker, part two was using Docker compose to stitch the multiple containers and the last part was doing container orchestration using Kubernetes on a single node mini-cube cluster. So in this session, we are going to deploy the same application into a multi-node managed Kubernetes cluster on Azure, so that is the Azure Kubernetes service AKS and the next two parts would be how do we debug and monitor these application that we deploy in the cluster and the last one would be doing continuous integration and continuous deployment, which is more like a bonus. So if you are not here, this is the application that we have built right from the scratch, we have a simple tech talks kind of application which allows you to create talks, it is front end with ASP.NET Core, MBC, there is a backend API with .NET Core and there is a SQL Server 2017 on Linux, all these running inside the containers. So that is part one, what we did using Docker. So I put the links here to the previous recordings in case you want to have a look at that. Part two as I said was Docker compose, where we composed all these multiple containers into single Docker compose file and in part three, we did the basic part of understanding what are the different Kubernetes objects like namespace, service deployment, scale sets or stateful sets. So let us get started with today's session, which is about the Kubernetes service, Azure Kubernetes service. So what is Kubernetes?  So this is like a very high level architecture of Kubernetes, it has master and it has a set of worker nodes. What we get with AKS is access only to the worker nodes, we do not get access to the master. So this is managed purely by Microsoft and we can work only with the worker nodes. So when you start working with Kubernetes or when you want to deploy your application to the AKS cluster, this is the usual workflow we have in development. So we use Docker desktop, either Docker for Mac or Docker for Windows. We build those images for the application, we package the application inside containers and then we test it locally using a local Dev Kubernetes cluster. So last time I showed you a mini-cube version, which was like the old way of testing containers on a single node cluster. Now with the recent version of Docker for desktop, you have support for Kubernetes built in. So with just your settings, you can enable single node Kubernetes cluster. So let me show that to you, while the Docker starts, let us continue on this. And once you are done with those testing locally, you can push the images to a container registry. It could be Docker Hub, a public container registry or you can have your own private container registry like Azure Container Registry or if you are using any other cloud, they have their own private container registry which you can make use of. And then you deploy it to the cluster, which is a Kubernetes cluster. So we will see this, the second part of the workflow today. We have already done the previous things in last three sessions. So let us have a look at how do we provision the Kubernetes cluster. So there are multiple ways. One is obviously you can go to the portal, log into portal.azure.com, go to create resource and here you can search for AKS and you will find Kubernetes service. Say create and provide all the options that are required like which subscription you want to use for creating this cluster. In my case, I have got multiple subscription, visual studio enterprise or Azure sponsorship and then you have the usual stuff like the resource group, your credentials, what should be the name, which region you want to create provision this cluster, how many nodes do you need, which version of Kubernetes you want to install. So there are like about 10 different versions supported here for more than 10. Based on your needs, you can select the version and you select also the number of nodes, how many worker nodes you want to create. You can also enable the authentication then go into the networking. This is like doing it using the user interface, graphical user interface, but my way of doing provisioning is using a PowerShell script. So I use this script to provision the cluster so it is basically the same information that I put inside PowerShell and then I use the Azure CLI. So I set the subscription using az account then I create the resource group and this is all parameterized. So although I am passing some default values here, we can overwrite that when we invoke the script. So I have already ran this before the session and this is the output of running that PowerShell script. So when I run, you will see output like this which starts with creating that cluster or resource group, then the AKS cluster and you can see all the details. I created a three node cluster, what is the DNS prefix, what is the subscription and all other details of that particular cluster. This takes about 10 to 15 minutes to provision all this. So with this one command like az aks and create, I can create the whole cluster. So basically this is the final command which is executed with all the parameters. And what you get at the end of this is these 18 different resources created for you. So has anyone worked on creating like a Linux machines? How many of you work with Linux? By the way, yeah, not the Windows version, one with the GUI. Without Windows using SSH, doing like password based login.  You don't have any support, you are just on command line, just commands. I've been doing that for the past two weeks trying to set up some other cluster and like you can imagine my state. So here what you get with one command is all these resources provisioned for you. All the communication established between those resources. So if you go back, you see that we have whole of this setup. So you have the master, you have the Asian nodes. There is the SSH less communication established between them. All the kind of resources that are required for them to communicate like the Kubernetes services which are required. Everything is provisioned and ready for us to use. One master and three working nodes. So what I provisioned is three working nodes. Master in this case is managed completely by Azure. Yes. So once we have all these resources, then how do we deploy our application? We saw last time, again I was using a script or I was using the kubectl commands, command line interface. I made couple of changes here, minor ones. Because in the mini cube version, I was using a single node cluster. Whereas in a case, we are using a full-fledged multi node cluster. In the single node version, I was using the service type as node port.  And we will expose these services publicly outside. So from outside the cluster, we would be able to access these resources. So I've changed couple of places where the service type has changed from node port to load balancer. One is obviously the web service that we are exposing for the user interface. So under AKS, I've created a similar structure. And if you look at the service here, this is the API. I don't want to expose API publicly. So I'm keeping this as node port itself. That means I will not be able to access it from outside the cluster. This is internally accessible for the services that are deployed within the Kubernetes cluster itself. Nobody can access it from outside. Then for the database, I changed from node port to load balancer. So I can use any of the database connectivity tools to connect to this particular database, which we'll see later. And for the web, I did the same thing. So here, in the specification of the web, I changed node port to load balancer. So once I do this, when the application is deployed, so I use the similar deploy tech talk script which I used last time. This is what happens. So it creates the namespace. It creates, I'll talk about the Azure disk a little bit later, it deploys the database, it deploys the API, and it deploys the web front end. And once the deployment is complete, we can go and browse the control plane. So we'll see the status of the cluster. Again, I need to select the right namespace here, what I'm creating as part of this deployment. So I created a namespace called AKS Part 4, and it contains all these. So we have two deployments, three pods running, two replica sets, one stateful set, three services, and you can see the public endpoint here. This is the public IP which is provisioned when I say the service type is at load balancer, and then I can go and browse this. So let's create a new talk, let's say it's a free conference level as advanced. Create, now if I want to see this data in the database, I can connect to the endpoint which is exposed for database. I can use SQL operation studio here to connect to that. Let's run a select query, and you can see the four records are already stored in the database here. So that was about the load balancer. The last change which I did was about the data persistence. So in the mini cube version, we did not handle this part, but we could externalize the data. If you remember in the second part when we were doing Docker compose, every time I restarted the application, the data was lost. I had to recreate the database creation script. So if we don't put the data outside the container, when the container is lost, when we recreate the data is lost. So to address that issue on a single node cluster, what we can do is we can map a local folder into the container and that data will be stored locally. But in a multi node cluster, if we store it on a local single machine, next time when the container starts, let's say you upgrade your application and your container gets scheduled on a different node altogether, it will not find that data and you will not be able to reuse the data. So in that kind of scenario, what we do is we use a concept called persistent volumes in Kubernetes. So this allows you to externalize your data and really store it outside of the Kubernetes cluster. So in this example, let's talk first about without a persistent volume what happens. So let's say I've got a three node cluster, I've deployed the application and each of my container gets scheduled on one node. Something goes wrong and your third node is lost. So Kubernetes will automatically reschedule that SQL Server container on some other node, but your data here will be lost. Now if you have a persistent volume, what would happen is your volume would sit outside of the Kubernetes cluster and if your node goes down, you still have the volume. You can reattach that volume and your data would be attached back to your container. Yes, when the container starts, you need to put that logic in the container saying, I'll show you in the configuration of the container how we do that. First see how we provision this volume, the external volume. So we use something called as a storage class. And storage class is like the type of external storage we want to provision. And there are more than 15 or 20 storage classes that are supported. Here are the ones. So we have AWS support, you have Azure, some external ones like Flocker. You have the NFS ones. So all these external storage types are supported by Kubernetes by default. So you can choose any one of these and you can say I want my external storage to be one of these providers. Once you have the storage class defined, you need to create something called as a persistent volume claim. So here, let's just look at the storage class. We are providing some metadata like name as Azure disk, provisioner as the Azure disk, Kubernetes IO. And then when I create a persistent volume claim, here we link it. So we are saying we are going to use Azure disk. What is the name of my persistent volume claim? And in the database section, then I need to say, I want to mount this as a volume. Sorry, it should be this, it's commented but it should not happen. So what I'm saying is, I want to mount a volume, which is in this location inside the container. But that source would be the Tech Talks data, which I provision using this persistent volume claim. This X should not be there. So that way, even if something goes wrong in the cluster, we still have our data outside of the cluster. So we talked about storage classes, different types of external storage that we can attach to our cluster and the persistent volume claim, which is a way for the container to say, I know there is a particular type of storage created or available within the cluster. I want a part of it or let's say there is one gigabyte provision externally. I want to stake claim for that one gigabyte. That's the persistent volume claim. So I think when I deployed the application, the persistent volume claim did not get created. Let's check. Oh, it is. Somehow luckily it got created. So this is the persistent volume I requested for 1GB and we can see the storage class as Azure Disk here. And if I go back to my resources here, I can see the same created as part of the external disk. Here, 1GB. So what we did in this case was via the Kubernetes cluster, we provisioned Azure Disk and then that disk was available to my database container to store its data. While we get all these details from the UI, we can also get it from the command line as well. So here are some commands we can run on the command line to get the details of Kubernetes cluster. So let's find out how many nodes we have. So we have got three nodes here, sorry, pods. I can also get the nodes. So based on my context, it will fetch me all the available nodes. Then I can also go and find out about a specific service. This is what we would also get from the portal. But if you are like a guy who likes to work on command line, you can get the same details from command line as well. And sometimes this information is much more in detail and in one single place as compared to looking at multiple places within the Kubernetes plane. So if you look at here, you might not find all the information in the same place. So you might have to move around a bit to find the same information. It's not readily available in one place whereas you can find that same thing using your command line. So we looked at these provisioning of the cluster. We looked at different ways in which we can query the state of the cluster. We looked at the Azure provision disk. We also looked at how to query the data from SQL Studio or SQL Operations Studio. So that's all I had for the demo. These are some of the links. This is the slide decks from the previous sessions. I'll post today's slide deck as well in the same location. And here are the videos of our previous three parts. So thank you. Any questions? For the continuum, you are mapping the position volumes. Yes. But can we like put some quota concept like for each node concept? Like for this node, I want each one of that 10 GB volume. I want to allocate more one should be this much. One GB, no two GB, two GB like that. The lifecycle of your container and the disks, right? Or the volumes, they are slightly different. They follow their own lifecycle. You might be able to do the quota part using persistent volume claim. So your disk might be having like 100 GB. But you can put a restriction saying this particular claim can only claim up to 10 GB. This particular node can claim up to 10 GB. Node one, node two. The way you connect the node and the disk is using the type. So in this case, I was using read once only or something which is like you attach that particular disk to only one node one time. Whereas there are other types where you can share that particular disk with multiple nodes. So I'm not exactly sure if you can put the quota, but you can share the disk with multiple containers and multiple nodes. Any other question? Yeah, in your console you are still accessing Kubernetes 50 with a loop back address. And then in that you added AKS cluster IP something like. That's the browse part. So if you go back, sorry. This is how I connect IRAN again a PowerShell script which says browse. And when you use this browse command, it takes the context of your cluster name and the resource group name. And that's how it connects to the Kubernetes master in Azure. How you're getting that in your management console? How do I get that? So when the cluster provisioning finishes, right? So if you look here at the end, it would have added it to my kube config. So this is done as part of your provisioning of the cluster. The last step is automatically it adds the public key to access this particular cluster in your dot kube config file. Any other question? Thank you.


Hello and welcome to another episode of the Minor Issues Podcast. I'm Mark Thornton at the Mises Institute. Well, the Federal Reserve was handed a new climate change mandate recently, but there's another mandate right around the corner that it's very ill-prepared to take on. The climate change mandate is advisory for now, but eventually it will require banks to make loans based on environmental concerns. Much like the Community Reinvestment Act, it will force the banks to take on bad loans that will have to be subsidized either by the taxpayer or the consumer. The cloaked mandate that I think the Fed will soon face is another round of monetary chaos when the Fed is backed into the corner with no good moves left to make. The first round of monetary chaos occurred in the late 1970s. This was an era of very high inflation and high unemployment, economic uncertainty with mortgage rates three times as high as they are right now, and unemployment in double-digit figures. The government, at the time, responded with monetary decontrol acts giving the Fed greater power. Paul Volcker reversed course and raised interest rates significantly, and then we saw in the late 70s the Humphrey Hawkins' full employment mandate and, of course, later on the Reagan tax cuts. The price of gold in this round of monetary chaos rose from $35 an ounce to $850 an ounce and would later fall to about $250 an ounce. On the positive side, the response to the free market and the voluntary actions we saw tax revolts in the United States in the late 1970s. We saw the emergency of Ron Paul and the establishment of the Mises Institute in 1982. The second round of monetary chaos is more recent in the aftermath of the tech bubble, the housing bubble, and the great financial crisis that involved massive bailouts by the government and the Federal Reserve for banks, radical new monetary policies such as quantitative easing and zero interest rate policy. The Fed took over the mortgage market and bought up tons of federal debt. The price of gold rose from $600 an ounce during the housing bubble to almost $1,900 an ounce before retreating to about $1,000 an ounce. During this round of monetary chaos, we had the reemergency of Ron Paul, his book End the Fed, the Audit the Fed Movement, which unfortunately died in Congressional Committee, and of course the emergence of Bitcoin in 2009 as a direct affront to the Fed and the government bailouts. We had the emergence of, for example, Tom Woods and his book Meltdown and other people who became prominent, especially in social media as a result of this crisis, the government's own doing, and it's very much backward-looking policies to address it. Now here we are, roughly 15 years later, of radical monetary policy that they never really led up on from the previous crisis. They never really took their foot off the gas. And then in 2000, when the economy weakened and COVID hit, the federal government responded with trillions of dollars of so-called stimulus money. The Federal Reserve responded with expansions of money, also of trillions of dollars. Monetary chaos in its wake. We now have high inflation. We have widespread economic hardship, and we have widespread division in the American population as well as within government itself. The price of gold has reached back to $2,000 an ounce so far, and the government has a lot of, and the Federal Reserve especially, has a lot of bad policies in mind to address the crisis once it comes, including central bank digital currencies, policies involving a cashless society where they get to monitor every transaction, massive bailouts of the banks, nationalization of banks, and other failures that it has caused, as well as unknown policy choices that the government would like to make that are loosely associated with the great reset in the World Economic Forum. On the good hand of the ledger, in terms of Fed mandates, we could have a mandate that simply forced the Fed to a zero inflation rate, as advocated recently by Alex Pollock. We still have the end the Fed movement. We still have the return to the gold standard movement, but those monetary policy reforms need to become more concrete, spreading from the states to the federal government, as well as significant revolts against government spending, government policies of all sorts, and of course tax revolts across the country. When we revolt, when we respond, the government responds more favorably, and if we sit back and simply take it sitting at home in fear, we're going to get a lot more bad choices. That's a lesson of history that we can't ignore.


Sad doesn't just stand for a standard American diet. There's a condition known as seasonal effective disorder that's characterized by increased appetite and cravings, along with increased sleepiness and lethargy that begins in autumn when light exposure starts to dwindle. This now appears to just represent kind of the far end of a normal spectrum of human behavior. We all appear to eat more as the days get shorter. There's a marked seasonal rhythm to calorie intake with greater meal size, eating rate, hunger, and overall calorie intake in the fall. In preparation for winter, some animals hibernate, doubling their fat stores with autumn abundance to deal with the subsequent scarcity of winter. Genes have been identified in humans that are similar to hibernation genes, which may help explain why we exhibit some of the same behaviors. The autumn effect isn't subtle. Research has calculated a 222-calorie difference between calorie intake in the fall versus spring. And this isn't just because it's colder. Since we eat more in the fall than the winter, it appears we're just genetically programmed to prep for the deprivation of winter that no longer comes. It's remarkable that this day and age of modern lighting and heating that our bodies would still pick up on environmental cues of the changing seasons enough to affect such major influence on our eating patterns. Unsurprisingly, bright light therapy is used to treat seasonal affective disorder, nearly tripling the likelihood of remission compared to placebo. Though it's never been directly tested, can't hurt to take the dog out for some extra autumn morning walks to maybe help fend off some of the coming holiday season weight gain. It's funny, people blame the holidays for overeating, but maybe instead of the holidays causing heightened intake, maybe the heightened intake that goes with the fall caused the holidays to be scheduled then in the first place. Regardless, other specific recommendations for the prevention of obesity by improving the circadian system health based on bearing degrees of evidence include sleeping during the night and being active during the day. Sleep enough, at least seven or eight hours a night, early to bed, early to ride. Short naps are fine, contrary to popular belief. Daytime napping does not appear to adversely impact sleep at night. Avoid bright light exposure at night and sleep in total darkness when possible. And make breakfast or lunch your biggest meal of the day. Don't eat or exercise right before bed and avoid eating at night completely.


Alright you guys what is going on welcome back to another video today's video We're gonna be looking at number four the fourth top player in the whole of the NFL for 2018 Julio Jones my first proper look at him and I cannot wait. Let's crack into it guys wide receiver for the Atlanta Falcons Julio Jones What? There's a real deal. What about him? I'm not even speaking on him. What makes him one of the best players in the league? You tell me bra. Words can't describe. Really? I have nothing to say man. Is that good? He's an absolute beast Three wide receivers. Hang on. We're gonna have to look up some stats here just before we get into this This is serious stuff Julio Jones 29 6 foot 3 100 kilos that's pretty big for a wide receiver Atlanta Falcons his whole career. He's made three five probos. Sorry Five probos his pre draft measurables back in the day. He got a four point three nine forty Nearly 40 inches on the vertical jump and 11 foot three on the broad jump.  Let's get into this Wow Julio Jones Julio Jones Antonio Brown and who's the top three wide receivers Julio Jones Antonio Brown and Geez, I don't even know man That's bad. I always put Julio at number one. He is a man amongst men Really? He has the full gamut of abilities and They can run every route the route tree doesn't change his body language Just like in communication if you say something to me and I give you a frown What do you think? What do you think those two defenders thought when they got up and neither of them had got the ball when he He just dominated them both. What do you think they thought? In this moment run every round the route tree in that moment right there when they're both getting up Just like in communication if you say something they're thinking fuck. We didn't have a chance To me and I give you a frown you then think what you said was bad It's the same thing with body language on the football field if I start to slow down It's the top of his route and you don't know that he's about to change direction. You don't know. He's about to change speeds You talk about artwork in motion. That's artwork to me for him to be as Decisive and precise as he is it's beautiful to me to watch And there's nothing a defender can do about it stick not See he is long man. He's long and he's fast. How tall was he?  Yeah, six foot three Mmm, but y'all should make me look like a pro ball for about what I respect about is that he's quiet the whole game He doesn't say anything. He just lined up and do his job And I walk out of the field shake your hand and move on to the next opponent I like that Four seasons down 1400 yards. No matter what he's still It's a guy that can stop on a dime at that side. He kind of looks like Usain Bolt sprinting He's got those long arms, man. He's really just Getting there, you know Tell me about a guy that can do that that size No, no one he's bringing his rod off at full speed Not too many not too many receivers can do that No one's defending that He got 10,000 receiving yards in 95 games really let me listen to that again 9000 Wow that's consistency Double coverage triple coverage. I know we don't cover times The quarterback trust me so much.  That's that it's it's the pace of him But it's six three. Well, maybe you think maybe he's he's talking about the hops. I don't know Look for it. It's up there That's what I'm talking about. All right guys. We've got three more three more I'm not gonna hold you here any longer than I have to Carson Wentz is the next guy I've actually looked at him before season-ending ACL injury Before the Super Bowl yet the backup quarterback came through and won it for them So I want to say Carson Wentz you're a legend. I can't wait to watch you Julio Jones I cannot wait to follow this guy. I mean all you guys have been asking for his reaction You've got it now. This is my first reaction to him.  Anyways guys If you have liked this video as always hit the like button if you want to subscribe Please do and I'll see you guys back here very shortly For number three. We've got three more to go Hallelujah I'll see you then. Peace out


Thank you very much. My name is Keith Harrison. I'm a software developer. I've been a developer for about 18 years and one of the responsibilities I've had in the various roles I've done over those years is to improve software quality in the organisations that I've worked. So that's what I'm going to talk about and how creating a culture of software craftsmanship can help do that. So, just about an overview of what I'm going to talk about. So first of all, take a bit of a step back and talk about how, before we talk about creating the culture of software craftsmanship, we're going to talk about managing complexity. So that's an issue that causes a lot of the problems that creating a culture of software craftsmanship solves. So I want to talk about that, where complexity comes from, why we have complexity, why it's so hard, what we can do about it, and how our culture of software craftsmanship can then help with that. First of all, why do projects fail? So in Steve McConnell's book Code Complete 2, he talked about the three main reasons. So they're all project management related, poor planning, poor requirements and poor management. But when they fail for technical reasons, they fail for uncontrolled complexity. So what is that? What even do we mean by complexity when we're talking about complexity in software? Fred Brooks, he's the author of Mythical Man Month, and he wrote a paper called No Silver Bullets, and he wrote this back in 1986, so there's nothing new about any of this. So he talked about two types of complexity. So he talked about, he called it accidental, I think incidental is a better phrase for it, incidental complexity. So that's the kind of complexity that engineers create, that we create, but we can also fix. So an example of that is in the languages. When we had assembly languages that were slow to work with, they were error prone, we started using high level languages, we got an order of magnitude improvement.  And actually interestingly, I think with IDEs, I think we're almost at peak IDE and we're starting to see IDEs being too complicated and causing problems and we're looking for simpler IDEs as well. So what he said about these types of complexities is that initially we saw enormous improvements in that orders of magnitude, new language comes out, suddenly developers are 10 times more productive, but that's diminished over time. And as new languages, new language features, new toolings come out, we've still seen improvements, but they're much, much smaller, they're 5, 10% types of improvement. So we're not going to see enormous productivity increases. We will see some, but not these big ones from the accidental, incidental complexity. So where we are going to see them is in the other type of complexity, which is essential complexity. So in the case of software, that's the business rules that you're trying to implement interactions with the real world, like if you're using a GPS sensor in your phone, the complexities of that. And these are things that you just can't, you can't improve that away, you just have to deal with this sort of stuff. So if the business says we need these 30 features, you have to build those 30 features, so we are stuck with this complexity. So another way to think about how complex software is is to think about the scale of what we do. So in terms of data, we might be dealing with a data birth calculation, which is just dealing with a handful of bytes. Or we could be dealing with, we're working for Netflix and we're dealing with petabytes of data. So it's an enormous range, we have to think from the very, very small to the unimaginably gigantic and only getting bigger. In terms of lines of code, even a single developer working on a single system will be dealing with thousands, potentially tens of thousands, mid-size systems, hundreds of thousands, big systems, millions of lines of code. So we have enormous amounts of complexity. So what happens if we don't manage the complexity? Well, we start, everyone should know really, we start getting more defects. We get ever-increasing dev times, so our management say build these 10 features and that takes one month. They say build 10 more features of seemingly the same complexity. It takes two months, another 10 features is four months. We're getting longer and longer, the further we go on to seemingly do the same amount of work, we become afraid to change the software. Oh, we can't change that system because the person that built it left, every time we touch it, we break stuff in production. We can't reuse anything because components are so, they do so many different things in one component. You don't know, can we use this to reuse this somewhere else? Oh, we're not quite sure. If we use it, it might have this other effect. Developers get unhappy, nobody wants to be. As there's more defects, as things are taking longer, as management start to get unhappy, and developers can see these problems coming from the uncontrolled complexity. And management are unwilling to do anything about it or don't see the problem. They, at least the developers becoming unhappy. And finally rewrites, so eventually we say this system is so complicated, so difficult. The only thing we can do is throw the whole thing in the bin and rewrite it all. And that's always a costly thing from the business's point of view. They're spending a ton of money just to get back to where you started. And so it's not a productive way to be working. So the next thing to think about complexity I want to talk about is our ability to manage that complexity. So this is me here. And I'm writing a bit of code. And I'm starting to look at a function. And there's a bug in it. So management said go fix this bug. We've got a production bug. So I start looking in this first function. And that modifies a variable and then calls another function, which then modifies another variable and calls a third one and so on. Until eventually what happens is my brain fills up. And I'm juggling all these things in my head about all these functions and all these things that are changing and all the effects of that. And then eventually my brain's full. I can't, as more information comes in that I need to remember, something needs to fall out, I make a change, I forget about the side effect elsewhere and I start introducing bugs into the system, things that I didn't expect. So it was Dijkstra that pointed out back in 1972 that the known skill is big enough to keep an entire program in. And that was 45 years ago. And we've made this problem 45 years worse by continuing to write an enormously large amount of code. So we still have to work into the limitations of what we can do because we are the ones that are writing the code. You know, if you write a function that's a thousand lines long, the computer will be happy with it. But if you can't get it into your head, then it's not something that you're going to be able to work with and maintain. So now that we've talked a bit about the problem, about our limitations in dealing with this problem as well, so with all that in mind, we can start to think about the characteristics of good design. So minimise complexity. You know, no overly complicated solutions. Reduce as much as you can accidental complexity, set up CI, don't manually deploy stuff. You know, if going to production is hard, automate it all so it's not something you're thinking about or something that's holding you up so you can focus more on the essential complexity that you can't minimise. Ease of maintenance. So going back to what I said a minute ago, write code for people and not computers. Like I say, the compiler, if you have a nested if statement that's 50 lines deep, the compiler won't care, it's happy, the computer will run it. It doesn't care. But the person that comes to maintain that when you go on holiday or you, when you come to maintain it a few months later and can't actually remember why you built this code, you'll care and it will affect your ability to actually change and maintain this code. So always keep that in mind with building stuff. Loose coupling. So reduce dependencies. Have each component be as independent from every other component as much as possible. Things like test-driven development help with this because they force you down that path. It's impossible to, or very difficult it should be if you're in test-driven development to couple everything together because you won't be able to write any tests. Cohesion. So, cohesion's a degree to which elements inside a module belong together. So if you have high cohesion, that's associated with software that's robust and reliable and reusable and easy to understand. So it's something to aim for. So another way to think about this is levels of design. So going back to that picture of my head with filling up with information, we want to build a system that at every level we can fit into our head and have the complete thing in. So at a very high level, the software should be given a discrete job that everybody can clearly understand. So, for example, an order capture system. It captures orders. That's all it does. As soon as it starts getting tweaked to well, actually we want to go in and do some fulfilment in this as well and send emails and other things. All of a sudden your order capture system starts to get quite complicated and becomes more than you can manage in your head. And decomposing all your systems at a high level into all these individual parts. So, oh, there's a bug that the users are getting a bug when they put in an order. Well, it's probably an order input system. So we'll go there. And then within that individual system, break that down into subdivisions and continue that all the way down. So components for data access, components for validating the UI, components for your business logic, and so on. So you can just, at any level in the system, you can dig down through understandable units, dig down to the module and the function level to have single functions where they're only changing or using a few variables and doing a few things. So once you get into that function, the bug's in there, you do the work, job done, haven't broken anything else. Everybody's happy. So now that we've thought a bit about the problems that complexity causes us. So how can we start to go about and fix these types of problems? So a lot of this stuff is, I think people know a lot of these things and there's certainly a lot of talks today and there's a lot of, we know all this stuff, but we still don't do it. So why does that happen and how do we get our intercells into this situation? And I think by creating, it becomes a cultural piece. It's not really about, well, nobody wants to write bad code, so why does it happen? And that starts to become a cultural thing. It's not about developers being unable to do it. That's certainly not the case. So creating a culture of software craftsmanship is how you go about changing that so the culture fits with what you actually want to do. So when developers are working away, we're pulled in different directions by those competing forces pulling us in the opposite direction. So on one hand we've got the business saying we need to hit this deadline. We promised a customer that the CEO was doing a marketing event around the country on this date. We must hit it. And on the, so on one hand we've got deadlines. On the other hand we've got quality. So yes we can hit that deadline but see when we try and do the next thing. We've made such a mess hitting that deadline. We're just going to start going slower and slower. So you're getting pulled two ways.  And you're faced with a lot of decisions and these are complicated decisions. And we're faced with them over and over again multiple times a day. What should I call a variable? Should I refactor this bit of code? Or do I just hack something in? Do what tests should I write? How much depth should I go into? We're faced with these decisions over and over again. And at such a, we have a level of expertise that means it's just impossible. You can't manage this from the top. You can't have some sort of review committee sit and go over every one of these minutiae. I mean you can do things like reviews and if you had an infinite amount of money potentially you can do reviews. But that's a different way I'm talking about like a top-down management control over all these decisions to make sure no bad decisions get made. It's just not possible. You have to trust and you have to rely on the developer while they're building the system to make the right decisions. And what decisions, all these decisions, the net effect of them is going to have an enormous effect on the long-term health of your project. So in this book, Lebrouchnyir in this book, Liars and Outliers, he's a cryptography expert. And he talked about four different social pressures that allow us to cooperate with each other. So he talks about moral. First one was moral. So I do it because it's right. So everybody when they start a new job wants to do the right thing. They want to build great code, good quality. And then they're put in a situation where they're told that here's a deadline. You've got to get this. There isn't the time to do the right thing. Just hack in a solution, cut and paste something. We don't care. And then suddenly you're faced with this choice. Do I do that? I know that's a mistake. I know that's the wrong thing to do. I know we'll pay a price down the line. But what do you do? Do you do the right thing? Or do you do what you're being pressured into? So these are the moral choices that go on. So reputational. I do it because of what others think of me. So an example of that is if you know you're going to, your code is going to have a code review. You're going to, if you're going to write some code, it's a bug fix. It's going to thrown straight into production under pressure with the best will in the world. You might think, well, you know, it might cut a few corners here. This code is good enough. It works. Let's just push it out. But if there's going to be a code review afterwards, a code review that's going to raise issues and have you do rework because, you know, this function can't be a thousand line long. You need to cut it down. Your reputation is online. Other people are going to see that and they're going to think, no, this guy didn't write very good code. As soon as that, as soon as you start thinking about that, you're going to start writing better quality up front. So institutional. So that's where your organisation rewards you or sanctions you depending on your behaviour. So for example, if you go back to the, just hit the deadline, so that's an institutional pressure to hack stuff in and to not do it correctly. Whereas, saying after you've hacked it in, right, we're going to have one month, no new features. Just tell the business they're just going to have to wait and we're going to refactor everything. That's an institutional pressure to do the right thing. And then finally, the last one is security, which I think is the least relevant to software developers. And that's simply because you're forced to. So that might be a linting tool that you can't do a check unless you don't get any errors. But ideally, we would have loads of these types of tools, but in the world we're in, we don't have the metrics yet.  So some examples of what you can do to try and influence these types of behaviours. So I mentioned that a few times, code reviews. So set times for code reviews. And so an important thing about a code review is I've seen management say, right, guys, we need to make sure all the code gets reviewed. And then that's it. And you actually don't get any... You're barely getting the work done on time, never mind having time for all these reviews. Or the system gets put in, the review gets done, it's too late to do anything about it. So the code reviews need to be... Time needs to be set aside for them. So the business needs to say, we see the value in these. We want to invest time and money in this because we know this will save us time and money in the future. So they... And pair programming as well. So when you're with somebody else, hopefully the two of you are not going to work together and say, oh, this hack piece of rubbish this all do. Both your reputations on the line, you're both going to try and show, put your best foot forward with it. So this works at... These work at a reputational and they've done correctly an institutional level as well. So group learning. So this is something that I've organised in places I've worked. So to do a coding dojo, do an in-house training session. So what I've done that works quite well is you do in-house training and you say, right, once a month we're going to meet in a room for an hour. And what we'll take in turns in the team and each person in the team is going to run a session. So first person is going to run a TDD session and the next person is going to run a session on integration tests and the third one on a bit good naming. So by getting everyone in a room together, by getting everyone to discuss, well, why do we do a TDD? Why do we want to refactor this code? You're creating this culture where everyone's saying that these are good things and understanding the benefits of all and understanding as well that everybody is thinking this because there's no good one person saying, I know this is the right thing to do, being the only person that does it while everybody else is hacking in a mess because everyone else is digging the whole deeper, faster and you can dig it, solve the problem. So you need to get everybody to do it and these kind of sessions where, you know, if it's just one person running it, it'll be, oh, Keith's making us do another one of these sessions again, what a waste of time. If everybody's doing it, then it creates that culture where everybody cares about these sorts of things and so this works on a moral level. So I discussed this as well, project management so quality related tasks. So that's where project management would say we're going to have set tasks, okay, you've built this right now, we're going to put it up on the board and we're going to assign time to refactoring work and that's a really powerful message to say that the business cares about quality and so it works on an institutional level because you're physically setting side to time to fix things and do things right but it also works on a moral level because it's a very strong message from the business to developers that we care about this so do the right thing which then leads to the moral benefits and you get this virtuous cycle where everybody's working together to create good code and so on and that you get less defects and you hit your releases on time and you start to get a good flow going with your development. So in conclusion, create a culture of software craftsmanship to help manage your complexity and to help reduce the quality of the work you do, the developer happiness, the efficiency of your team and think about your own culture so every team is different from one person teams to large teams to teams that are physically in the same room to teams that are geographically distributed, teams of different skills, teams of different backgrounds what works for one team is not going to work for another so think about the culture of your team and think about what might work for you and adapt some of the ideas that I've suggested or even come up with your own things that would work for you. So if you found this talk interesting I, in Glasgow on just a quick ad, Glasgow on 14th of September I'm one of the organisers of CodecraftConf in Glasgow and we're a different type of conference with no speakers and all we do is talk about it's all software craftsmanship related but what's different about with no speakers and what we do is we use a format called the guided conversation so everyone sits in a circle and you pick a topic like test driven development and your time box you'll say right we'll discuss this for five minutes and we'll say the guide will have a set of questions and the first five minutes they'll say discuss what is test driven development and then go on to what is the benefits of test driven development and so on and it's about creating a conversation and having people talk about these things because these issues are largely cultural if you can't make it to Glasgow don't worry because we are an open source conference so everything that we've done we've put on, we have a guided conversations website and we've described the guided conversation process we've also put in question sets so you can come in here example question sets so we've put our question sets in here we've shared them all on github so you can pretty much copy our whole and please feel free to if you just ask for two things please tell us about it so we can come and if you create any new question sets please share them with us so we can add them to this list so other people can copy it as well and that's me any questions thank you for the nice talk and the conference looks quite exciting any questions from the audience do you have a strategy for when some members of the team get upset at what they perceive as criticism from code reviews etc or trying to guide them towards better working practice yeah, I mean that is a really good question I think often what I've found is when you put these ideas forward a lot of times it's yes well these are obvious ideas and largely it's good but people don't actually do it tends to be the problem and so I know it's kind of it's not addressing your question but I think it is a primary problem of people do know what to do they just don't do it and so then it comes back to the cultural issues but I think it's just going back to your question of resistance if you're having a conversation about it so perhaps run a lean coffee where I don't know if people know that format but you're sitting in a room and there's no agenda except you say well maybe well limit it to software craftsmanship related issues and then everybody can write what they want to talk about and you vote and whatever's got the most votes that's what you discuss people can discuss the ideas the issues that they have and share that with everybody else and hopefully bring them on that way I've actually had a case where someone responded to my code review comments by complaining to HR that I was attempting to bully him bully him and someone else gave me a copy of the previous code review comments from three years earlier that were identical and he still hadn't fixed the same issues I think eight out of the first ten were word for word identical it can be a difficult problem and that's why as a cultural piece quite often than not it's not a technical problem that's such a training issue so yeah it's hard thank you you mentioned institutional pressures and quality related tasks are there any good examples just a refactoring task oh refactoring that would be a good example of it okay thank you any more questions so I want to thank again Dave for a great talk thanks very much