<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Technology</title><link>https://jwheel.org/categories/tech/</link><description>Homepage of Justin Wheeler, an Open Source contributor and Free Software advocate from Georgia, USA.</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>Justin Wheeler</managingEditor><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://jwheel.org/rss/categories/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>Scrub gently: On data scrubbing in a community survey.</title><link>https://jwheel.org/blog/2022/11/scrub-gently-community-survey/</link><pubDate>Tue, 15 Nov 2022 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2022/11/scrub-gently-community-survey/</guid><description><![CDATA[<p>Recently, my team with the <a href="https://chaoss.community/">CHAOSS Project</a> had a data concern emerge when I was working on a project to run a community survey. This community had never run a survey before, and it was the first notable event where the project made an explicit, structured ask for feedback from the community. As a result, this first experience was also a calibration event, so we could guide this kind of work in future years.</p>

<h2 id="survey-says-what">Survey says: What?&nbsp;<a class="hanchor" href="#survey-says-what" aria-label="Anchor link for: Survey says: What?">🔗</a></h2>
<p>At some point, after we opened the survey, a question emerged about how to handle an unruly response. In the ongoing responses, our data manager noticed one response that was objectively harmful. The person was strongly against the D.E.I. initiative that organized the survey. The response was written in a hostile tone, made insulting and derogatory comments about groups of people, and was entirely opposed to the project spending any time and resources on diversity, equity, and inclusion. The question asked to our group was whether we would include this response in the published data, or whether we would omit it.</p>
<p>There were two perspectives. Some elected to remove this response from the final report and any published data. Others felt it was important to wait and see if this response would become a pattern as we ran the survey. I found myself in the second group that felt it was important to wait and see first. I want to unpack this rationale, both for future me and perhaps someone else reading.</p>

<h2 id="on-discarding-the-survey-response">On discarding the survey response&nbsp;<a class="hanchor" href="#on-discarding-the-survey-response" aria-label="Anchor link for: On discarding the survey response">🔗</a></h2>
<p>There were good points about removing the harmful response.</p>
<p>Firstly, the response used harmful language and was likely triggering. This particular response included angry rhetoric that was reflective, to a degree, of the social and political &ldquo;climate&rdquo; of our world today. Including the response in our final reporting could also be giving it a platform, which would arguably be a harmful act. It would validate that input as acceptable input. Our group was not in disagreement that the response was harmful and not behavior the community should tolerate.</p>
<p>Second, the response did not provide actionable insight or useful asks to the project and community. It was written in an aggressive, angry tone towards the reader and did not offer workable suggestions other than ending and divesting from all D.E.I. work immediately. Given this was not an acceptable option, there wasn&rsquo;t much there for us to learn or understand about CHAOSS from this individual response. So, why include or save this response?</p>
<p>There is an option to ignore feedback by intentionally discarding it, but what if the individual feedback represents a larger trend?</p>

<h2 id="what-is-community-culture">What is community culture?&nbsp;<a class="hanchor" href="#what-is-community-culture" aria-label="Anchor link for: What is community culture?">🔗</a></h2>
<p>It is important to be aware of threats to community culture. What is community culture? My improvised definition is any organizational culture oriented towards the care, well-being, and thriving of others (including the self) within a single, shared community environment. Regardless of other values and goals in a project, the shared culture of the project can either lean towards a collective, communal-oriented approach or an independent, individual-oriented approach. The communal approach that prioritizes the well-being of all instead of a privileged view could also be considered as community culture. Many traditional &ldquo;Open&rdquo; projects skew toward a strong community culture.</p>

<h2 id="on-monitoring-survey-responses-for-a-pattern">On monitoring survey responses for a pattern&nbsp;<a class="hanchor" href="#on-monitoring-survey-responses-for-a-pattern" aria-label="Anchor link for: On monitoring survey responses for a pattern">🔗</a></h2>
<p>Coming back to the survey response, what if omitting the data leaves holes in the story of your community? If there is not just one, but several of these kinds of responses, what comments does that make about the community culture? Is there already a strong community culture, or is there resistance and challenges to building a more cooperative, caring environment? There is real work to do at both ends of the spectrum, but what that work might look like depends on which side you are on.</p>
<p>I posit that omitting the &ldquo;unhappy&rdquo; or harmful responses can create a dangerous blind spot to toxicity within a community culture. When it comes to direct, interpersonal interactions with others (e.g. meetings, emails, chats, etc.), stewards of the community culture need to take direct action against visible challenges and threats to the community culture. If someone starts swearing out at someone in a meeting, that is a hard-to-miss action. It is visible, and anyone could observe it or even record it.</p>
<p>In anonymous surveys, you might find a more subtle layer of the community culture than what is shown by the actions of a small few. There can be greater trust that someone&rsquo;s comments will not be tied back to their identity, so some responders may feel emboldened with their words and true opinions.</p>

<h2 id="dont-discard-a-blind-spot">Don&rsquo;t discard a blind spot.&nbsp;<a class="hanchor" href="#dont-discard-a-blind-spot" aria-label="Anchor link for: Don&rsquo;t discard a blind spot.">🔗</a></h2>
<p>The point of this is that especially in larger communities, it is worth noting negative and harmful responses and not totally ignoring them. Communities that organize in more decentralized ways will always have supporters, users, and contributors from both the core and the periphery. The core project membership may not interact or engage often with the periphery often, so there can be a blind spot to parts of the project that identify with the community but are a few degrees removed from the inner ring of the project community.</p>
<p>Noting whether something is indicative of a larger pattern is important. If your community has a ton of jerks, you need to know that your community is full of jerks so that you don&rsquo;t waste time persuading people otherwise, when the lived experience is very different.</p>
<p>In the original conversation with the CHAOSS Project team, this data scrubbing question emerged in the process of running the survey instead of <em>after</em> the data collection concluded. The survey later closed and our data manager confirmed that the flagged response from earlier was the only one of its kind. As a group, we then felt more confident in discarding that one outlier as an anomaly since the survey was open to the general public.</p>
<hr>
<p><em>Feature photo by <a href="https://unsplash.com/@jeshoots?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">JESHOOTS.COM</a> on <a href="https://unsplash.com/s/photos/cleaning?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>. Modified by Justin Wheeler.</em></p>]]></description></item><item><title>4 metrics to measure sustainable open source investments.</title><link>https://jwheel.org/blog/2021/12/4-metrics-open-source-investments/</link><pubDate>Fri, 31 Dec 2021 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2021/12/4-metrics-open-source-investments/</guid><description><![CDATA[<p>How do we understand value when we talk about sustainability? What does investing in open source mean? The meaning is different for many people because of an implicit understanding of what open source means.</p>
<p>This post is a reflection on the past year in my work with the <a href="https://www.unicefinnovationfund.org/">UNICEF Venture Fund</a>. We integrated new open source tools to capture metrics and data about open source repositories connected to UNICEF portfolio companies and created a shortlist of key metrics that map to business sustainability metrics. Now, we are better positioned to look back on past, current, and upcoming portfolio companies and mentor support programs.</p>
<p>As we move into 2022, this post covers my current thinking on these points:</p>
<ol>
<li>Defining investments.</li>
<li>How do these investments impact sustainability?</li>
<li>CHAOSS metrics as an open source tool for an investment lens on sustainability.</li>
<li>What next?</li>
</ol>

<h2 id="defining-investments">Defining investments.&nbsp;<a class="hanchor" href="#defining-investments" aria-label="Anchor link for: Defining investments.">🔗</a></h2>
<p>When we talk about investing in open source, what do we mean? What are the known inputs? What are the expected outputs? &ldquo;Investments&rdquo; and &ldquo;investing&rdquo; are broad terms. Investments typically mean sizeable financial injections of support and growth, but can also include non-financial investments too. Investments can also take the form of both time and energy (i.e. electricity and digital infrastructure).</p>
<p>The UNICEF Venture Fund provides equity-free funding for start-up companies building open source solutions of interest to UNICEF. All the start-up companies are registered companies in <a href="https://www.unicef.org/where-we-work">UNICEF program countries</a>. As part of the Venture Fund&rsquo;s location in the <a href="https://www.unicef.org/innovation/">Office of Innovation</a>, it is also a vehicle for UNICEF to explore frontier technology areas through the investments. When a start-up company is receiving investment from UNICEF, the company receives both funding and tailored mentorship about business and open technology.</p>
<p>A question I want to know is, <strong>what is the impact of the received funding plus guided mentorship</strong>? How does this approach enable the companies to be successful after graduating? What discoveries or knowledge could be shared with others to assist the development of their own open programs?</p>
<p>To summarize, <strong>an investment can be financial or non-financial</strong>. Financial investments include direct funding, grants, venture capital, fellowships, or any other exchange of capital. Non-financial investments include time spent in coaching sessions, personalized content for companies, and shared digital infrastructure. Neither list is exhaustive.</p>

<h2 id="how-do-these-investments-impact-sustainability">How do these investments impact sustainability?&nbsp;<a class="hanchor" href="#how-do-these-investments-impact-sustainability" aria-label="Anchor link for: How do these investments impact sustainability?">🔗</a></h2>
<p>
<figure>
  <img src="https://cauldron.io/static/img/cauldron-logo-white.png" alt="Logo for Bitergia&rsquo;s Cauldron hosted analytics platform. A key part of metrics for UNICEF Venture Fund investments." loading="lazy">
  <figcaption>Bitergia Cauldron.io (<a href="https://cauldron.io" class="bare">https://cauldron.io</a>)</figcaption>
</figure>
</p>
<p>Data makes introspection easier. Bitergia&rsquo;s <a href="https://cauldron.io/">Cauldron.io</a> was a champion tool for kickstarting an open source metrics strategy for the UNICEF Venture Fund. Its introduction as a tool opened up a wider span of data to look at. There are new opportunities to ask questions and explore growth, scale, and sustainability.</p>
<p>In order to come to a conclusion on sustainability impact, we need streamlined data to test a thesis. The Venture Fund team improved internal processes to how metrics are collected from portfolio companies. The team is unifying behind fewer tools and methods to ensure we see the same data and have the same view of the data points we measure. This also provides a fresh opportunity to review how we measure open source impact across portfolio companies. Many have dashboards on Cauldron.io, but data needs a storyteller for it to make meaning. So, the next step is to ask questions with this new data and frame a thesis to measure and test the sustainability of Venture Fund investments into open source.</p>
<p>Many have traveled before me on the same trail of thought. I started first with the <a href="https://chaoss.community/">Community Health Analytics Open Source Software (CHAOSS) project</a> and its metrics releases. This served as the initial point of brainstorming to frame questions and different scenarios of risk, evolution, DEI, and value.</p>

<h2 id="chaoss-metrics-as-an-open-source-tool-for-an-investment-lens-on-sustainability">CHAOSS metrics as an open source tool for an investment lens on sustainability.&nbsp;<a class="hanchor" href="#chaoss-metrics-as-an-open-source-tool-for-an-investment-lens-on-sustainability" aria-label="Anchor link for: CHAOSS metrics as an open source tool for an investment lens on sustainability.">🔗</a></h2>
<p>I reviewed the <a href="https://chaoss.community/wp-content/uploads/2021/10/English-Release-2021-10-21.pdf">latest release</a> of CHAOSS metrics and narrowed down four metrics I want to measure in the next year. I also shared thoughts on why collect this data and how to do it. This blog post is no more than me wondering out loud, to help me frame an analytical approach for this metrics strategy.</p>
<p>The four metrics are detailed below:</p>
<ol>
<li>Contribution Attribution</li>
<li>Contributors</li>
<li>Collaboration Platform Activity</li>
<li>Labor Investment</li>
</ol>
<p>
<figure>
  <img src="/blog/2021/12/glenn-carstens-peters-RLw-UC03Gwc-unsplash.jpg" alt="A hand holds a pen and is writing on a sheet of notebook paper. They appear to be making a list." loading="lazy">
  <figcaption>Take note of your dependencies and contributors.
<em>Photo by Glenn Carstens-Peters (<a href="https://unsplash.com/@glenncarstenspeters?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/@glenncarstenspeters?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>) on Unsplash (<a href="https://unsplash.com/s/photos/lists?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/s/photos/lists?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>)</em>.</figcaption>
</figure>
</p>

<h3 id="contribution-attribution"><a href="https://chaoss.community/metric-contribution-attribution/">Contribution Attribution</a>&nbsp;<a class="hanchor" href="#contribution-attribution" aria-label="Anchor link for: Contribution Attribution">🔗</a></h3>
<blockquote>
<p>Question: Who has contributed to an open source project and what attribution information about people and organizations is assigned for contributions?</p>
<p><a href="https://chaoss.community/metric-contribution-attribution/">chaoss.community/metric-contribution-attribution/</a></p>
</blockquote>
<p>This metric is insightful because it is targeted deeply into team and project culture. This metric is a good representation of how much the project leans into an open source model of building their project. This work ethos and intention to forge on an open source path is difficult to understand at times. If a team takes care to attribute their software dependencies and other contributors to their code (if any), this is a good sign that the team accepts collaboration as a value and encourages working with others.</p>
<p>I would measure this across two <a href="https://chaoss.community/metric-types-of-contributions/">types of contributions</a>: attributions for software dependencies including those with permissive licenses, and for any other direct contributors to the code and how they are recognized for their participation. This could be filtered in a red-yellow-green light approach:</p>
<ol>
<li><strong>Red</strong>: No attributions are made, or all attributions are inadequate.</li>
<li><strong>Yellow</strong>: One of two attributions are made, or one attribution type is inadequately attributed.</li>
<li><strong>Green</strong>: All dependencies and used works are correctly attributed.</li>
</ol>
<p>
<figure>
  <img src="/blog/2021/12/alex-hudson-m3I92SgM3Mk-unsplash.jpg" alt="View looking down at a small farmer&rsquo;s market, where a woman sits behind several different cases of vegetables. A man hands payment to the woman for unseen goods. This is connected how knowing your customers can also be like knowing your community." loading="lazy">
  <figcaption>Spend more time getting to know who participates and why.
<em>Photo by Alex Hudson (<a href="https://unsplash.com/@aliffhassan91?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/@aliffhassan91?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>) on Unsplash (<a href="https://unsplash.com/s/photos/bazaar?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/s/photos/bazaar?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>)</em>.</figcaption>
</figure>
</p>

<h3 id="contributors"><a href="https://chaoss.community/metric-contributors/">Contributors</a>&nbsp;<a class="hanchor" href="#contributors" aria-label="Anchor link for: Contributors">🔗</a></h3>
<blockquote>
<p>Question: Who are the contributors to a project?</p>
<p><a href="https://chaoss.community/metric-contributors/">chaoss.community/metric-contributors/</a></p>
</blockquote>
<p>This metric explores a more human dimension of the people and participants to an open source project. The metric defines contributors and contributions broadly, as &ldquo;anyone who contributes to the project in any way.&rdquo; Understanding the people participating in a community, their motivations, goals, and why they choose to be in that community is important to understand sustainability. Otherwise, you may lose out on good opportunities to attract contributions from people who are already engaged, and new engagements may be difficult because of a mismatch of expectations.</p>
<p>This metric is more a means than it is an end; that is, it provides opportunities to ask more questions than provide detailed answers. Nevertheless, it does provide some guidance towards understanding contributors in a project, and it can lead to some concrete actions based on gathered insights. For example, this metric will enable deeper looks in areas of diversity, equity, and inclusion.</p>
<p>Since I work with start-up companies with small, lean development teams, I look to understand the motivations of the developers working on their projects and where the motivations may align with another open source solution. This enables the two communities to leverage their combined brainstorming for meeting complimentary goals around development and innovation.</p>
<p>To collect this data, I would have the team define what <a href="https://chaoss.community/metric-types-of-contributions/">areas of contribution</a> they seek for their open source solutions and then map those desired contributions to a specific project area or different team members. This enables a form of consistent accountability for checking expectations with reality and understanding team capacity. Each area could be a key-value pair, where the value is the project area, team lead, or delegated team member for the type of contribution solicited.</p>
<p>
<figure>
  <img src="/blog/2021/12/kai-dahms-5paXZX8lWk-unsplash.jpg" alt="The dashboard of an older plane is shown, with several different meters, switches, and control knobs. In many ways, the places where we collaborate on our projects can also be as complicated, and we can miss out on some useful features if we are not looking in the right place." loading="lazy">
  <figcaption>There are many ways to collaborate, but the question is, are you counting the right ways?
<em>Photo by Kai Dahms (<a href="https://unsplash.com/@dilucidus?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/@dilucidus?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>) on Unsplash (<a href="https://unsplash.com/s/photos/measure?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/s/photos/measure?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>)</em>.</figcaption>
</figure>
</p>

<h3 id="collaboration-platform-activity"><a href="https://chaoss.community/metric-collaboration-platform-activity/">Collaboration Platform Activity</a>&nbsp;<a class="hanchor" href="#collaboration-platform-activity" aria-label="Anchor link for: Collaboration Platform Activity">🔗</a></h3>
<blockquote>
<p>Question: What is the count of activities across digital collaboration platforms (e.g., GitHub, GitLab, Slack, email) used by a project?</p>
<p><a href="https://chaoss.community/metric-collaboration-platform-activity/">chaoss.community/metric-collaboration-platform-activity/</a></p>
</blockquote>
<p>Collaboration platform activity is one effective proxy metric for community engagement if measured accurately. The metric does not define collaboration as much as it provides a data structure to measure it. It abstracts collaboration into key data points like timestamp, sender, whether the platform has threaded or non-threaded discussions, data collection date, and platform message identifier. To a degree, collaboration can be abstracted out in this way: a person takes any given action at a given time in a given way, and this action is measured as project-related activity on the collaboration platform.</p>
<p>There are a few possible approaches to collecting this data from UNICEF Venture Fund companies. Each approach does not cancel out another, but each approach could be combined with the others:</p>
<ol>
<li><strong>Measure common git activity like commits, issues, pull/merge requests</strong>. We already measure this data, but use it only in connection to validating Venture Fund workplans for each team with UNICEF portfolio manager(s).</li>
<li><strong>Count communications like comments, reviews, public messages, and other outreach</strong>. Communications strategies and tools are typically inferred from common git activity. Measuring for engagement and stratifying those metrics into a smaller group could allow for deeper insights to the evolution of early-stage open source communities.</li>
<li><strong>Make community hubs first-class citizens in the data curation process to infer about informal engagement</strong>. Both open source projects and UNICEF Venture Fund portfolio companies use a variety of tools to communicate, especially in view of COVID-19 and its seismic impact on how we work. Platforms like Discord, Telegram, Mattermost, Slack, Rocket.chat, Matrix, and others are focal points where projects collaborate, ask questions, and support others. Bringing this data stream into the mix offers deeper insights into how teams engage and build community around their work, and also guidance on when to push for contribution opportunities at the right time.</li>
</ol>
<p>The satisfaction of these three options in their totality is not enough. To leverage the fullest impact, these metrics must tie into each other, and need to be connected back to a narrative. Why is this data being collected and what actions are influenced by the knowledge of this data? The data collection enables the evaluation of sustainability and understanding the birth, growth, and evolution of an open source technology product. Influenced actions can include moving more human resources (i.e. contractors or staff) to support a project, adopting a new open source best practice, and/or engaging new customers, talent, or other leads based on participation in the community.</p>
<p>Measuring collaboration platform activity is not black and white. Many new questions would likely come forward as part of measuring this activity. Yet this is the point—it lays the foundation for the next layer to the data collection, analysis, and reporting process around sustainability.</p>
<p>
<figure>
  <img src="/blog/2021/12/jon-tyson-kR4K8nJ9JRc-unsplash.jpg" alt="A man is facing forward with his back to the camera. He wears a heavy coat and a construction hard hat. The background is blurred and unclear. In this way, we can think of labor investment from a human-centered approach first." loading="lazy">
  <figcaption>What is the impact of an investment on fair and equitable labor?
<em>Photo by Jon Tyson (<a href="https://unsplash.com/@jontyson?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/@jontyson?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>) on Unsplash (<a href="https://unsplash.com/s/photos/worker?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" class="bare">https://unsplash.com/s/photos/worker?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText</a>)</em>.</figcaption>
</figure>
</p>

<h3 id="labor-investment"><a href="https://chaoss.community/metric-labor-investment/">Labor Investment</a>&nbsp;<a class="hanchor" href="#labor-investment" aria-label="Anchor link for: Labor Investment">🔗</a></h3>
<blockquote>
<p>Question: What was the cost of an organization for its employees to create the counted contributions (e.g., commits, issues, and pull requests)?</p>
<p><a href="https://chaoss.community/metric-labor-investment/">chaoss.community/metric-labor-investment/</a></p>
</blockquote>
<p>This metric is perhaps the most ambitious of the group. How do you measure labor investment into an open source project? Or literally, the number of person-hours that go into software design, development, co-creation, and community management? It feels like a gargantuan effort, but there may be better ways to measure this in connection to other data the UNICEF Venture Fund is already connected about the businesses.</p>
<p>Measuring labor investment impacts two narratives: the rate of development on the open source work, and the impact of UNICEF investment into a company backing an open source work.</p>
<p>Firstly, understanding the rate of development on an open source work is easier to infer by understanding who is allocated on a project and how much of their time they dedicate to it. If a team of three contributors spares a few hours a week, it will mean something different compared to a team of five engineers spread across different disciplines working full-time. Mapping the labor investment for open source projects supported by UNICEF would enable better planning by understanding the typical labor investment in open source workplan tasks as piloted by other Venture Fund portfolio companies.</p>
<p>Secondly, this gives us a new way of talking about the impact of UNICEF Venture Fund investments as an investment not only in software products but also in labor. It gives us insight into the investment of labor in software engineering talent among portfolio companies. How does this measurement change over time of the investment? Do projects receive more or less investment of labor during the 12 month period we work with them? This could also be used as a proxy metric for the impact of our unique mentorship and coaching opportunities.</p>

<h2 id="what-next">What next?&nbsp;<a class="hanchor" href="#what-next" aria-label="Anchor link for: What next?">🔗</a></h2>
<p>Knowing is half the journey. Even if the knowledge is not yet firmly rooted. The analysis and introspection are from me as an individual working among the UNICEF Venture Fund and do not represent the views and beliefs of UNICEF or the UN in any capacity. My intent is that by sharing this analysis in the open, it allows for a space where conversation can spark where it could not before. It also invites others to share ideas, feedback, and constructive criticism of an emerging metrics strategy for investments made into the open source ecosystem.</p>
<p>Next, more layers can be added and internal and external validation can help to keep this moving forward. An implementation plan would be the next step to follow this post. The implementation plan considers the process of how start-up companies move through the Venture Fund from start to finish. Who interacts with the companies and when? At what point is a company ready to begin building in a new metric or count in their monthly metrics? Do they understand the implications and assessments of these metrics? At what points in the process is data already being collected? Could these new data requests be added to existing requests? And so on.</p>
<p>I hope to formalize some of this new reporting and metrics strategy in upcoming cohorts in 2022, as part of a renewed effort into communicating how our open source investments tie into sustainable impact towards the U.N. Sustainable Development Goals.</p>
<p>This post will serve as a milestone marker on the metrics strategy discussion in the coming one to two months. See you in 2022.</p>
<hr>
<p><em>Featured photo by <a href="https://unsplash.com/@edwardhowellphotography?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Edward Howell</a> on <a href="https://unsplash.com/s/photos/sustainable?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>. Modified by Justin Wheeler. CC BY-SA 4.0</em>.</p>]]></description></item><item><title>On Free Software, Red Hat, and Iran</title><link>https://jwheel.org/blog/2021/10/red-hat-iran/</link><pubDate>Tue, 26 Oct 2021 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2021/10/red-hat-iran/</guid><description><![CDATA[<p>I was visiting the Fedora Council ticket tracker when I noticed <a href="https://pagure.io/Fedora-Council/tickets/issue/377">this ticket</a> up for discussion. The ticket&rsquo;s purpose is minor and appears inconsequential. It involves adding some legal text to the Fedora Accounts system. The change is related to <a href="https://docs.microsoft.com/en-us/compliance/regulatory/offering-ear">Export Administration Regulations</a> (the &ldquo;EAR&rdquo;) as maintained by the United States Department of Commerce. And the change is not actually a change, but a clarification of a policy that has always been in effect.</p>
<p>I am opposed to the impact of Export Administration Regulations by the United States as it pertains to free and open source software. I am a strong believer that the impact of these regulations are most harmful to all free &amp; open source software communities at an individual, human level. When I saw this discussion at the Fedora Council level, it offered me an opportunity to reflect on my own feelings about these regulations, and also to share an opinion on how I believe Fedora Linux could truly live up to its <a href="https://digitalpublicgoods.net/registry/fedora-linux.html">certification</a> as a Digital Public Good to ensure a more equitable world.</p>
<p>Here is <a href="https://pagure.io/Fedora-Council/tickets/issue/377#comment-759232">what I wrote</a> to the Fedora Council, and perhaps also to anyone reading from Red Hat&rsquo;s legal team:</p>
<hr>
<p>Hi, I would like to add a counter-opinion, of course one that holds no weight as an official vote.</p>
<p>As Fedora Linux is forced to this decision by its relationship to its legal sponsor, Red Hat, <strong>I therefore believe it is also the responsibility of Red Hat to seek a solution that does not deny an individual their right to realize the <a href="https://fsfe.org/freesoftware/">Four Freedoms</a> of Free Software on the basis of geography or citizenship</strong>.</p>
<p>I recognize no policy is being changed here. It is a deliberate clarification of rules that were always in effect. Yet this ticket opens the context behind the policy for greater scrutiny, and I posit the context is harmful both to the Fedora Project and to Red Hat.</p>
<p>This policy is harmful for diversity and inclusion, and compromises Fedora&rsquo;s position to be an innovative platform built by a global community. The U.S. laws and regulations driving this decision exist within a specific context, but that context is grossly incompatible with the dynamics of inclusive Free &amp; Open Source communities. In practice, these laws and regulations deny individuals (really, other human beings) of their ability to be a beneficiary of the open licenses we employ for creating our work, collaborating on it together, and sharing it with others.</p>
<p>I see two outcomes of accepting this as an unchangeable norm.</p>
<p>Firstly, it creates confusion, doubt, and feelings of ill intent. These laws and regulations are meant to impact governments and nation-states. In a Free &amp; Open Source community such as ours, these regulations impact individual people. Not governments or nation-states. As an example, a Fedora community member, Ahmad Haghighi, was recently <a href="https://ahmadhaghighi.com/blog/2021/us-restricted-free-software/">permanently removed</a> from the Fedora Community. In a few quick clicks, Ahmad&rsquo;s legacy in the project was <a href="https://web.archive.org/web/20210813014952/https://fedoraproject.org/wiki/User:Haghighi">erased</a>. As a precedent, even if someone&rsquo;s contributions were not &ldquo;supposed&rdquo; to be accepted in the first place, it does not sit well with me that any one person&rsquo;s legacy of contributions can so easily be removed from project records.</p>
<p>Secondly, it challenges the vision and foundations of the Fedora Project. Particularly our vision statement and the <em>Friends</em> Foundation. When I contribute to the Fedora Project, I do not see people as a citizen of this-country or that-country. I see them as my peers and fellow Fedorans, helping meet that shared vision of creating &ldquo;<em>a world where everyone benefits from free and open source software built by inclusive, welcoming, and open-minded communities</em>.&rdquo; As an American citizen, I know my country makes such discriminations about large groups of people based only on their nationality, but as a contributor to Free &amp; Open Source communities, I see people by their individual character and intention to be a part of our shared vision. But how can we truly aspire to this vision if we are consciously making deliberate exclusions, even if they make little to no sense in our own context? This geographic restriction policy sits in contrast to the vision and purpose we spell out &ldquo;on paper&rdquo;.</p>
<p>I understand why Fedora leadership is taking this action due to Fedora&rsquo;s legal and sociopolitical relationship to Red Hat, an American incorporation subject to American laws and regulations. To an extent, the hand of Fedora is forced.</p>
<p>But I believe this is a great opportunity for Red Hat to be an enabler of Fedora&rsquo;s <em>First</em> Foundation. Previously, Microsoft <a href="https://github.blog/2021-01-05-advancing-developer-freedom-github-is-fully-available-in-iran/">stood up</a> for Iranian developers and successfully set a precedent about how the United States Office of Foreign Assets Control (OFAC) treats such cases. I found this excerpt from Nat Friedman&rsquo;s announcement to resonate:</p>
<blockquote>
<p>Over the course of two years, we were able to demonstrate how developer use of GitHub advances human progress, international communication, and the enduring US foreign policy of promoting free speech and the free flow of information. We are grateful to OFAC for the engagement which has led to this great result for developers.</p>
<p><em><a href="https://github.blog/2021-01-05-advancing-developer-freedom-github-is-fully-available-in-iran/">Advancing developer freedom: GitHub is fully available in Iran</a> - github.blog</em></p>
</blockquote>
<p><strong>I believe Red Hat&rsquo;s legal team should take a stand for individuals in embargoed countries to remain a beneficiary of the free and open source licenses that enable a community Linux distribution like Fedora to exist in the first place.</strong></p>
<p>After all, in Fedora, we are well-known for being <a href="https://docs.fedoraproject.org/en-US/project/#_first">first</a> in the Open Source space for innovative new ideas and approaches. We know Fedora Linux is a <a href="https://digitalpublicgoods.net/registry/fedora-linux.html">digital public good</a> that should be accessible to all and everyone. But to make this a reality, the Fedora Project cannot be first here on its own. We need our friendly primary sponsor, Red Hat, to help us clear this burden, which is brought on by our connection to Red Hat in the first place.</p>
<p>I&rsquo;ll close this counter-opinion with an excerpt from our First Foundation:</p>
<blockquote>
<p>&ldquo;However, the Fedora Project’s goal of advancing free software dictates that the Fedora Project itself pursue a strategy that preserves the forward momentum of our technical, collateral, and community-building progress. Fedora always aims to provide the future, first.&rdquo;</p>
<p><em>From <a href="https://docs.fedoraproject.org/en-US/project/#_first">What is Fedora all about?</a></em></p>
</blockquote>
<p>Here is a chance to be clear on the future we want to provide and for whom.</p>
<hr>
<p><em>Background photo by <a href="https://unsplash.com/@omidarmin?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Omid Armin</a> on <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p>]]></description></item><item><title>What if Open Source dependencies weren't software?</title><link>https://jwheel.org/blog/2021/08/open-source-dependencies/</link><pubDate>Tue, 10 Aug 2021 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2021/08/open-source-dependencies/</guid><description><![CDATA[<p>I often wonder how to best measure and communicate Open Source value. The collective focus of the industry goes into quantifying dependencies; that is, how one software relies on other software in order to complete its primary function. The vocabulary to measure dependency usually includes words like &ldquo;imports,&rdquo; &ldquo;licenses,&rdquo; &ldquo;bugs fixed to bugs open,&rdquo; and other machine-oriented terms. Yet the unique value proposition of <em>innovative</em> Open Source involves a community of people around a software. This led me on to the next question: <strong>why do we bias towards machine-oriented terms instead of human-oriented or community-oriented terms to describe Open Source communities and division of labor?</strong></p>
<p>However, this question only led to more questions. Much of the existing Open Source discourse on sustainability centers on defining, tracking, and understanding &ldquo;dependencies.&rdquo; Yet when we say dependencies, people typically mean source code, software packages, and license compatibility. So, <strong>how do we describe the value proposition of people and the impact of cross-pollinated communities?</strong></p>
<p>So, what if Open Source dependencies weren&rsquo;t <em>just</em> software? Furthermore, what if Open Source dependencies could mean people… or simply, human beings? In this blog post, we&rsquo;ll walk through this thought experiment.</p>

<h2 id="open-source-dependencies-are-people">Open Source dependencies are people.&nbsp;<a class="hanchor" href="#open-source-dependencies-are-people" aria-label="Anchor link for: Open Source dependencies are people.">🔗</a></h2>
<p>My purpose is to augment the idea of &ldquo;dependencies&rdquo; from exclusively source code to be more inclusive of its authors as well. We typically center software in our Open Source conversations, so I want to deliberately center people. There are many ways to cover this, but I will offer three ways we could think of Open Source dependencies as more than source code:</p>
<ol>
<li>Community inheritance</li>
<li>Legacies</li>
<li>Love</li>
</ol>

<h2 id="dependencies-community-inheritance">Dependencies: Community inheritance&nbsp;<a class="hanchor" href="#dependencies-community-inheritance" aria-label="Anchor link for: Dependencies: Community inheritance">🔗</a></h2>
<p>New, smaller projects sometimes form up underneath or within an existing larger project. Sometimes a new project is created to support the existing project. Sometimes it is a passion project led by a few that aligns with the motivations and values of a wider community. But these new projects begin with an added advantage of inheriting the collaborative ecosystem surrounding the existing project, instead of being tasked to create this from scratch themselves.</p>

<h3 id="why-measure-this">Why measure this?&nbsp;<a class="hanchor" href="#why-measure-this" aria-label="Anchor link for: Why measure this?">🔗</a></h3>
<p>Ask anyone responsible for building an Open Source community from scratch. The approach at this stage is experimental:</p>
<ul>
<li>Will using this feature encourage new contributors to participate?</li>
<li>Does someone in a related field discover our project on a casual whim looking at GitHub?</li>
<li>How do we make our project more accessible for contributors we do not yet have?</li>
</ul>
<p><strong>Many times, it is about forming a hypothesis and then testing it.</strong></p>
<p>However…</p>
<p>If you exist within the dynamic of an existing community, you benefit from resources, people, and infrastructure that would be unavailable if you started independently. Finding communities with compatible values and motives exposes you to a wider network, and thus more visibility in a world where there is already <em>too much</em> information. Working within an existing community can cut light-years off of time-to-market or improving product sustainability and community resiliency (in the context of other variables).</p>

<h3 id="example-of-community-inheritance">Example of community inheritance&nbsp;<a class="hanchor" href="#example-of-community-inheritance" aria-label="Anchor link for: Example of community inheritance">🔗</a></h3>
<p>The <a href="https://docs.fedoraproject.org/en-US/project/">Fedora Project</a> produces Fedora Linux. <a href="https://getfedora.org/">Fedora Linux</a> is a Free and Open Source operating system derived from the open source Linux kernel. The Fedora Project also creates other software in order to facilitate the production, creation, and updates of Fedora Linux. Examples of this are asynchronous <a href="https://github.com/fedora-infra/mote">meeting minute note managers</a>, <a href="https://github.com/fedora-infra/fedocal">community calendars</a>, <a href="https://badges.fedoraproject.org/about">gamified badges</a>, <a href="https://pagure.io/koji">software package distribution tools</a>, and more.</p>
<p>While none of these smaller software projects are the ultimate purpose and goal of the Fedora Project, they are supplementary to the overall goal of <strong>producing Fedora Linux</strong>. The sustainability of these smaller parts ensure a healthier ecosystem around the larger project.</p>
<p>Another way to see this is as a planet with several orbiting moons, where the planet is an existing project and each moon represents another smaller project orbiting around the existing one. Each moon is different, yet each is still connected to the gravitational force and motions of the planet.</p>

<h2 id="dependencies-legacies">Dependencies: Legacies&nbsp;<a class="hanchor" href="#dependencies-legacies" aria-label="Anchor link for: Dependencies: Legacies">🔗</a></h2>
<p>Open Source projects are more than source code. Human beings are social creatures, and Open Source is a social activity. An individual or groups of individuals may influence the hearts and minds of others in the movement. To win hearts and minds is to merge the intentions of the individual with the intentions of the wider community. The power to change minds is the power to move mountains.</p>

<h3 id="why-measure-this-1">Why measure this?&nbsp;<a class="hanchor" href="#why-measure-this-1" aria-label="Anchor link for: Why measure this?">🔗</a></h3>
<p>Open Source is a social activity. It has both a written and oral story-telling tradition. There is a rich history from the movement that first took root in the 1980s. We use stories to expand our imagination, or to see a perspective in a way we might not have before. So, it is important to note the value these historical stories play in shaping our movement and creating leaders.</p>
<p>Legacies of kindness and love result in thriving communities where contributors look out for each other. People are not motivated by the will to survive; they are motivated by the will to thrive with a community. Legacies of discrimination and hate result in divided, splintered communities who are focused on counting their differences instead of seeing how alike we are.</p>

<h3 id="example-of-legacies">Example of legacies&nbsp;<a class="hanchor" href="#example-of-legacies" aria-label="Anchor link for: Example of legacies">🔗</a></h3>
<p><a href="https://jwfblog.wpenginepowered.com/2018/11/fedora-appreciation-week-tribute-to-a-legacy/">Seth Vidal</a> wrote the Yellowdog Update Manager (Y.U.M.), and he contributed to Fedora. <a href="https://communityblog.fedoraproject.org/remembering-matthew-williams/">Matthew Williams</a> helped others learn about Linux and Open Source, and he contributed to Fedora. <a href="https://communityblog.fedoraproject.org/remembering-thomas-gilliard-satellit/">Thomas Gilliaird</a> helped me with using Fedora Linux in IRC as a teenager, and he contributed to Fedora. The ways we help other humans while on our own journey is how we create a legacy with wider wings. The impact of a few kind people is enough to inspire more to follow.</p>
<p>To ignore the impact of legacies in social activities surrounding Open Source is to deny the impact of charismatic leaders who lead in styles of either unity or division.</p>

<h2 id="dependencies-love">Dependencies: Love&nbsp;<a class="hanchor" href="#dependencies-love" aria-label="Anchor link for: Dependencies: Love">🔗</a></h2>
<blockquote>
<p>Power at its best is <strong>love implementing the demands of justice</strong>. Justice at its best is <strong>love correcting everything that stands against love</strong>.</p>
<p><a href="https://en.wikipedia.org/wiki/Martin_Luther_King_Jr.">Dr. Martin Luther King, Jr.</a></p>
</blockquote>
<p>The act of existence can be political. We cannot escape the sociopolitical environment of our world, no matter how much we wish to push it aside. If we choose to ignore it, there are others who choose to manipulate common ignorance, to the exploit of their own unbounded wealth. We must embrace and acknowledge the political atmosphere permeates our world; it does not disappear and hide away when it makes us uncomfortable.</p>
<p>
<figure>
  <img src="/blog/2021/04/Get_out_of_jail_free.jpg" alt="A Get Out of Jail Free card from the board game Monopoly" loading="lazy">
  <figcaption>From Wikipedia (<a href="https://en.wikipedia.org/wiki/File:Get_out_of_jail_free.jpg" class="bare">https://en.wikipedia.org/wiki/File:Get_out_of_jail_free.jpg</a>).</figcaption>
</figure>
</p>

<h3 id="why-measure-this-2">Why measure this?&nbsp;<a class="hanchor" href="#why-measure-this-2" aria-label="Anchor link for: Why measure this?">🔗</a></h3>
<p>Open Source does not get a <a href="https://en.wikipedia.org/wiki/Get_Out_of_Jail_Free_card">&ldquo;get out of jail free&rdquo; card</a>.</p>
<p>Open Source is political. Its roots in the Free Software movement were firmly rooted in politics, even if they were narrowly confined to a few key issues. The real question is, how do we wield our own political agency and expediency? We should act from our hearts and move to inspired action to correct everything that stands against love.</p>

<h3 id="example-of-love">Example of love&nbsp;<a class="hanchor" href="#example-of-love" aria-label="Anchor link for: Example of love">🔗</a></h3>
<p>This blog post. These words are a radical act of love. Acknowledging it and choosing to embrace it is the first step in using our Open Source power responsibly.</p>
<hr>
<p><em>Featured image arranged by Justin Wheeler. Original photograph by <a href="https://unsplash.com/@goian?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ian Schneider</a> on <a href="https://unsplash.com/s/photos/community?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p>]]></description></item><item><title>Introducing UNICEF Open Source Mentorship</title><link>https://jwheel.org/blog/2021/07/unicef-open-source-mentorship/</link><pubDate>Tue, 06 Jul 2021 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2021/07/unicef-open-source-mentorship/</guid><description><![CDATA[<p><em>This post was co-published <a href="https://www.unicefinnovationfund.org/broadcast/expert-posts/introducing-unicef-open-source-mentorship">on the UNICEF Innovation Fund blog</a>.</em></p>
<p>2020 saw the launch of a formalized Open Source Mentorship programme for the <a href="https://www.unicefinnovationfund.org/">UNICEF Innovation Fund</a>, built up on two years of work from <a href="https://fossrit.github.io/librecorps/">RIT LibreCorps</a> expertise and consulting.</p>
<p>The <a href="https://unicef.github.io/inventory/meta/overview/">Open Source Mentorship programme</a> includes <a href="https://unicef.github.io/inventory/meta/modules/#offered">five modules</a> about Open Source intellectual property and communities delivered <a href="https://unicef.github.io/inventory/meta/modules/#program">across twelve months</a>. UNICEF grantees are matched with an experienced Open Source Mentor to guide them through the modules. The mentorship takes an interactive, guided approach to understanding the unique context that each team and product exist within. The assigned Open Source Mentor provides specialized advice and training:</p>
<ul>
<li>Tailored feedback based on business models</li>
<li>Existing local user communities</li>
<li>Best practices for collaborating together with others on similar challenges.</li>
</ul>
<p>The geographic diversity in the UNICEF Open Source Mentorship programme is unusual for technology incubators or accelerator programs. All funded projects come from UNICEF programme countries. The UNICEF Innovation Fund provides equity-free funding for Open Source solutions from local innovators and entrepreneurs solving local problems. To date, the Innovation Fund has invested in teams from over 57 countries. Argentina, India, Iran, Kenya, Mexico, Nepal, and Rwanda represent the most recent incoming cohort in July 2021.</p>
<p>But why does this kind of work matter to UNICEF or the United Nations?</p>

<h2 id="un-roadmap-for-digital-cooperation">UN Roadmap for Digital Cooperation&nbsp;<a class="hanchor" href="#un-roadmap-for-digital-cooperation" aria-label="Anchor link for: UN Roadmap for Digital Cooperation">🔗</a></h2>
<p>In June 2020, the United Nations Secretary-General released the <a href="https://www.un.org/en/content/digital-cooperation-roadmap/assets/pdf/Roadmap_for_Digital_Cooperation_EN.pdf">UN Roadmap for Digital Cooperation</a>, a call for action and a vision with several key considerations:</p>
<ul>
<li>An Inclusive Digital Economy and Society</li>
<li>Human and Institutional Capacity</li>
<li>Human Rights and Human Agency</li>
<li>Trust, Security and Stability</li>
<li>Global Digital Cooperation</li>
</ul>
<p>The report explores the impact technology has in each key area:</p>
<blockquote>
<p>&ldquo;Digital technology does not exist in a vacuum – it has enormous potential for positive change, but can also reinforce and magnify existing fault lines and worsen economic and other inequalities. In 2019, close to 87 per cent of individuals in developed countries used the Internet, compared with only 19 per cent in the least developed countries.&rdquo;</p>
<p><a href="https://www.un.org/en/content/digital-cooperation-roadmap/assets/pdf/Roadmap_for_Digital_Cooperation_EN.pdf">UN Roadmap for Digital Cooperation</a>, June 2020</p>
</blockquote>

<h3 id="open-source-mentorship-enables-digital-cooperation">Open Source Mentorship enables digital cooperation.&nbsp;<a class="hanchor" href="#open-source-mentorship-enables-digital-cooperation" aria-label="Anchor link for: Open Source Mentorship enables digital cooperation.">🔗</a></h3>
<p>Therefore, the conception and development of Open Source Mentorship is inspired by the Roadmap, in four key aspects:</p>
<ol>
<li><strong>Digital Public Goods</strong>: To encourage knowledge transfer and collaboration on practical, everyday advice on building technology projects in line with the <a href="https://digitalpublicgoods.net/standard/">Digital Public Good Standard</a>.</li>
<li><strong>Digital Capacity-Building</strong>: Empowering others with the <a href="https://jwfblog.wpenginepowered.com/2020/11/open-source-archetypes-unicef-open-source/">skills and information</a> they need to be bringers of Open Source change and innovation in a disruptive and competitive Venture Capital ecosystem.</li>
<li><strong>Digital Trust and Security</strong>: Providing a holistic view of Open Source intellectual property that is influenced by, but not bound by, quarterly earnings reports and share prices. Understanding the commitments of Open Source licenses and technology, and how trust is earned and lost in Open Source products and communities.</li>
<li><strong>Global Digital Cooperation</strong>: Designing and structuring communities to be healthy and collaborative in nature, united in resolving common challenges and problems.</li>
</ol>]]></description></item><item><title>2021 OSI Board of Directors statement of intent</title><link>https://jwheel.org/blog/2021/04/2021-osi-board-of-directors-statement-of-intent/</link><pubDate>Tue, 13 Apr 2021 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2021/04/2021-osi-board-of-directors-statement-of-intent/</guid><description><![CDATA[<p><em>This first appeared <a href="https://wiki.opensource.org/bin/Main/OSI%20Board%20of%20Directors/Board%20Member%20Elections/2021%20Individual%20and%20Affiliate%20Elections/Flory2021/">on the Open Source Initiative Wiki</a>. In light of the <a href="https://opensource.org/election_update">election update this year</a>, I am republishing my statement of intent on my personal blog.</em></p>
<hr>
<blockquote>
<p>No culture can live if it attempts to be exclusive.</p>
<p>Mahatma Gandhi</p>
</blockquote>
<p>I believe in the value of upholding the Open Source Definition as a mature and dependable legal framework while recognizing the OSI needs to work better with works that are not Open Source. My ambition as a candidate is to support existing work to enable a more responsive, more agile Open Source Initiative.</p>
<p><strong>Twitter:</strong> <a href="https://twitter.com/jwf_foss"><strong>@jwf_foss</strong></a></p>

<h2 id="why-should-you-vote-for-me">Why should you vote for me?&nbsp;<a class="hanchor" href="#why-should-you-vote-for-me" aria-label="Anchor link for: Why should you vote for me?">🔗</a></h2>
<p>I bring a <a href="https://jwheel.org/#unicef">public sector perspective</a> to a conversation where it seems missing, despite the dependent relationship of the public sector to Free and Open Source works. In my work, I provide Open Source mentorship and coaching to humanitarian-driven start-ups hailing from 57 countries. I am an excellent communicator, I understand a subset of challenges faced by Open Source communities, and I have a collaborative nature.</p>
<p>I am also a millennial. The GPL was first drafted before I was born. My lived experience with Free Software and Open Source gives me a vantage point not well-represented in Open Source legal and policy work. My personal experience with Free and Open Source software is impacted by years of untangling my own digital life from technology decisions made for me, not by me. With that in mind, I realize not everyone can afford to be a Free Software purist, but we can still uphold the values of Open Source even if we do not use it exclusively.</p>

<h2 id="who-am-i">Who am I?&nbsp;<a class="hanchor" href="#who-am-i" aria-label="Anchor link for: Who am I?">🔗</a></h2>
<p>I work as an Open Source Technical Advisor at UNICEF in the <a href="https://www.unicef.org/innovation/">Office of Innovation</a>. I manage and support an <a href="https://unicefinnovationfund.org/">Open Source Mentorship programme</a> for start-up investments and teams building Open Source products and communities from more than 57 countries. I also provide Open Source support to other UNICEF colleagues and recently coordinated UNICEF Innovation&rsquo;s participation in the [on-going, at publication time] Outreachy round.</p>
<p>Outside of work, I have contributed to the <a href="https://docs.fedoraproject.org/en-US/project/">Fedora Project</a> for almost six years. I am soon ending a year-long term as the <a href="https://docs.fedoraproject.org/en-US/diversity-inclusion/roles/council-advisor/">Diversity &amp; Inclusion Advisor</a> to the Fedora Council. I am a founding member of the Fedora <a href="https://docs.fedoraproject.org/en-US/commops/">Community Operations</a> and <a href="https://docs.fedoraproject.org/en-US/diversity-inclusion/">Diversity &amp; Inclusion</a> teams. </p>

<h2 id="what-are-my-qualifications">What are my qualifications?&nbsp;<a class="hanchor" href="#what-are-my-qualifications" aria-label="Anchor link for: What are my qualifications?">🔗</a></h2>
<p>I first contributed to Open Source as a teenager. I was a community moderator and staff member of the open source <a href="https://jwheel.org/#spigotmc">SpigotMC project</a>. There, I handled user reports for a community forum with over 400,000 registered members. This is one of the most unique communities I have worked in, as the Spigot Community is a population of hundreds of thousands with an age demographic concentrated between ages 13-25.</p>
<p>Additionally, I am on the <a href="https://jwheel.org/#open-rit">advisory board of Open @ RIT</a>, the Open Source Programs Office for the <a href="https://www.rit.edu/">Rochester Institute of Technology</a> in Rochester, New York. This enables me to work more closely with academia, which has a growing interest in the growing ecosystem of academic Open Source Program Offices.</p>
<p>Finally, I regularly work with teams building Open Source solutions in support of children and UNICEF’s core work. I have lived experience of coaching teams on Open Source best practices across six continents. I have seen where Open Source worked well and where it didn’t. I bring this background and perspective into the work I would do as a member and representative elected by the Open Source Initiative constituency.</p>
<p>In summary, my lived experiences in Open Source, my connection to academic Open Source, and the humanitarian focus of my work make me a uniquely-qualified candidate for the OSI Board.</p>
<hr>

<h2 id="interview-responses">Interview responses&nbsp;<a class="hanchor" href="#interview-responses" aria-label="Anchor link for: Interview responses">🔗</a></h2>
<p>Luis Villa published <a href="https://opensource.com/article/21/3/board-elections-osi">four interview questions</a> for OSI Board candidates on Opensource.com. I originally <a href="https://twitter.com/jwf_foss/status/1370064424229216258">tweeted my response</a>, but I copied it here for wider visibility too.</p>

<h3 id="q1-what-should-osi-do">Q1: What should OSI do…&nbsp;<a class="hanchor" href="#q1-what-should-osi-do" aria-label="Anchor link for: Q1: What should OSI do…">🔗</a></h3>
<p>“…<em>about the tens of millions of people who regularly collaborate to build software online (often calling that activity, colloquially, open source) but have literally no idea what OSI is or what it does?”</em></p>
<p>I am excited at the opportunity to contribute here. The UNICEF Office of Innovation (and my own Open Source Mentorship programme) rely on the Open Source Definition to guide our international Open Source work, even if we are still learning how to do it best. But without the OSD as a guiding light, our work is much harder. My team is well-positioned to be an advocate and voice of support for the Open Source Definition in policy environments where Open Source is not. This relates to on-going <a href="https://gigaconnect.org/">Giga connectivity work</a> to connect schools worldwide to the Internet for equitable education opportunities for children.</p>
<p>So to directly answer the question, we have a conversation. Avoid anger when others choose software that is not Open Source. Avoid exasperated frustration when people pick licenses that are not Open Source. But the first step is always to teach &amp; educate on the stories, values and history of the Free/Open Source community.</p>

<h3 id="q2-if-an-ethical-software-initiative-sprung-up-tomorrow-what-should-osis-relationship-to-it-be">Q2: If an Ethical Software Initiative sprung up tomorrow, what should OSI&rsquo;s relationship to it be?&nbsp;<a class="hanchor" href="#q2-if-an-ethical-software-initiative-sprung-up-tomorrow-what-should-osis-relationship-to-it-be" aria-label="Anchor link for: Q2: If an Ethical Software Initiative sprung up tomorrow, what should OSI&rsquo;s relationship to it be?">🔗</a></h3>
<p>The good folks behind the Ethical Source movement have done so. The OSI needs to be open to collaborate and engage with other orgs who steward legal works that do not adhere to the OSD.</p>
<p>I want to invite the Ethical Source folks into the conversation. How can we better partner together? If elected, I would commit myself to organizing a public town hall or community discussion with the Ethical Source folks. Coraline Ada Ehmke, Tobie Langel, and many other folks are doing great work in this space. So, let&rsquo;s collaborate and work together.</p>

<h3 id="q3-when-a-license-decision-involves-a-topic">Q3: When a license decision involves a topic…&nbsp;<a class="hanchor" href="#q3-when-a-license-decision-involves-a-topic" aria-label="Anchor link for: Q3: When a license decision involves a topic…">🔗</a></h3>
<p>“…<em>on which the Open Source Definition is vague or otherwise unhelpful, what should the board do?”</em></p>
<p>The OSI needs to improve at saying what it is not. We are more clear on what the OSD <strong><em>is</em></strong> than we were even last year. As a candidate, I don&rsquo;t have crazy ideas for the Definition. But there are things that are not Open Source. The world is changing.</p>
<p>We need to adapt. We must be nimble in changing with the world, or the values and motives of the original Free/Open Source movement are at risk of volatility. As a candidate, if presented with an unclear situation, I would take one of two options:</p>
<ol>
<li>If the proposed work stands against a principle of the OSD, it should not be approved as such, or the OSD becomes meaningless; OR</li>
<li>Take an interpretive, &ldquo;living document&rdquo; view of the OSD for new copyleft innovations where the OSD is not clear or ambiguous.</li>
</ol>
<p>For context, I am a copyleft believer. Promoting and advocating for the stability and integrity of Open Source licenses is a fundamental part of my interest as a candidate for the Board.</p>

<h3 id="q4-what-role-should-the-new-staff-play-in-license-evaluation-or-the-osd-more-generally">Q4: What role should the new staff play in license evaluation (or the OSD more generally)?&nbsp;<a class="hanchor" href="#q4-what-role-should-the-new-staff-play-in-license-evaluation-or-the-osd-more-generally" aria-label="Anchor link for: Q4: What role should the new staff play in license evaluation (or the OSD more generally)?">🔗</a></h3>
<p>I don&rsquo;t have an answer to this one. Foundations are mostly new to me. I would defer to expertise and listen to what others with more years have to say. I want to better understand the capacity and ambition of the OSI to take on new work with a steady staff.</p>
<p>I am a collaborator by nature and a team player. So, I want to enable the work for the OSI to be more agile and responsive in what I see as core, critical work.</p>
<hr>
<p>That&rsquo;s it. If you have specific questions, you are welcome to get in touch with me on Twitter or add a comment below.</p>]]></description></item><item><title>Three predictions for Free Software in the 2020s</title><link>https://jwheel.org/blog/2020/12/three-predictions-for-free-software-in-the-2020s/</link><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/12/three-predictions-for-free-software-in-the-2020s/</guid><description><![CDATA[<p>From January to May 2020, I completed an independent study at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a> on <em>Business and Legal Aspects of Free/Open Source Software</em>. This was the final credit for my completion of the <a href="https://www.rit.edu/study/free-and-open-source-software-and-free-culture-minor">Free and Open Source Software and Free Culture</a> minor.</p>
<p>That semester, I traveled to <a href="https://jwfblog.wpenginepowered.com/tag/2020-foss-conferences/">different international FOSS conferences</a> (before COVID-19), analyzed contemporary changes and trends in Free Software, and reflected on where <em>I think</em> we are going. I am sharing an edited version of my final report here, as a look into my &ldquo;crystal ball&rdquo; for what is coming to Free Software in the 2020s.</p>

<h2 id="preface">Preface&nbsp;<a class="hanchor" href="#preface" aria-label="Anchor link for: Preface">🔗</a></h2>
<p>There are emerging challenges and changes to the Free Software status quo. Three pieces of context about me will help to understand my perspective.</p>
<p>First, I am a young adult who has contributed to Free Software for a third of my life. At fourteen, I landed my first Open Source contributions. In high school, I participated in Open Source communities with 100,000+ adolescents, teenagers, and young adults. Later, I led community-driven initiatives in Open Source projects <a href="https://en.wikipedia.org/wiki/Red_Hat_Linux">older than me</a>. Thus, these experiences are a significant part of my experience coming into the Free Software movement.</p>
<p>Second, I follow conversations about Open Source sustainability. I regularly collaborate with others who also care about Open Source sustainability. I participate in communities where Open Source sustainability is the key issue to address, like <a href="https://sustainoss.org/">Sustain OSS</a> and the <a href="https://chaoss.community/">CHAOSS Project</a>.</p>
<p>Third, I am a white American male in my early 20s, which yields me certain privileges. I actively work to understand how my privilege constructs my worldview and experiences. I also acknowledge my <strong>freedom to participate</strong> in the global Free Software community is afforded to me in part by who I am. So, I acknowledge these biases in order to frame my perspective.</p>
<p>So, I propose three emerging trends in Free Software across the 2020s:</p>
<ol>
<li>Sustainability of Free Software is here to stay.</li>
<li>Free Software will have its ethics interrogated.</li>
<li>More young people will stay, or leave.</li>
</ol>

<h2 id="free-software-sustainability-is-here-to-stay">Free Software sustainability is here to stay.&nbsp;<a class="hanchor" href="#free-software-sustainability-is-here-to-stay" aria-label="Anchor link for: Free Software sustainability is here to stay.">🔗</a></h2>
<p>Sustainability has subliminal buzzword status today, yet it will not fade from our vocabulary soon. Unlike other tech buzzwords from the last decade, I suspect sustainability is here to stay.</p>
<p>Sustainability is broad though. This analysis begins broadly and then narrows down the definition. To start, here is the Oxford Dictionary definition of sustainability:</p>
<blockquote>
<p>sus·tain·a·bil·i·ty</p>
<p>The ability to be maintained at a certain rate or level.</p>
<p><a href="https://www.lexico.com/en/definition/sustainability">Oxford U.S. dictionary</a></p>
</blockquote>
<p>From this definition, I look at two sub-types of sustainability: software sustainability and Free Software sustainability. While they do overlap, software sustainability is <strong><em>what</em></strong> we build: the technology we make and its ability to last into the future. Free Software sustainability is <strong><em>who</em></strong> and <strong><em>how</em></strong> we build: the people who comprise the Free Software movement and how they work together and collaborate.</p>
<p>Now, sustainability is less overlooked than five or ten years ago. However, we still have competing definitions for what sustainability means. The dictionary defines sustainability as &ldquo;the ability to maintain&rdquo; but there are different ways sustainability is interpreted.</p>

<h3 id="the-maintainer-and-the-corporation">The maintainer and the corporation&nbsp;<a class="hanchor" href="#the-maintainer-and-the-corporation" aria-label="Anchor link for: The maintainer and the corporation">🔗</a></h3>
<p>For example, to an Open Source software maintainer, the &ldquo;ability to maintain&rdquo; might mean their ability to pay for their bills, live securely and safely in their day-to-day lives, or supporting a family. On the other hand, to a corporation that depends on Open Source software for their business, the &ldquo;ability to maintain&rdquo; might mean the ability to make new software releases at a specific cadence. It could be lines of code added and removed, or the number of commits made. Both perspectives are valid, but they imply different expectations of what maintenance requires.</p>
<p>On first consideration, these competing definitions make the landscape confusing. But surprisingly, this varied interpretation does not weaken sustainability; it strengthens it. It creates more opportunities to collaborate and work together in solving common problems in new, intersectional ways. Instead of focusing on common differences, it encourages seeing common problems first. While the definitions of sustainability might be different between an independent tech freelancer and an engineering manager in a Silicon Valley tech corp, both of these people could still work together on something that benefits both of them.</p>
<p>While I cannot predict what sustainability will mean to us in 2030, I am confident it will not mean the same as it is today. So, I am interested to both observe and participate in the shaping of the sustainability conversation in software and Free Software communities over the next decade.</p>

<h2 id="free-software-will-have-its-ethics-interrogated">Free Software will have its ethics interrogated.&nbsp;<a class="hanchor" href="#free-software-will-have-its-ethics-interrogated" aria-label="Anchor link for: Free Software will have its ethics interrogated.">🔗</a></h2>
<p>Free Software emerged in the 1970s as a social movement in an act of defiance to a global market change, when software became a commodity. Activists stood together and asserted what they believed to be essential freedoms of all computer users. So, Software Freedom as a concept was born through the <a href="https://jwfblog.wpenginepowered.com/2020/04/how-did-free-software-build-a-social-movement/">GNU Project in 1983</a>.</p>
<p>Today, a similar storm is on our horizon. The world is shifting again. It is not just software that is a commodity. It is <a href="https://jwfblog.wpenginepowered.com/2020/04/fosdem-2020-pt-2-can-free-software-include-ethical-ai-systems/">data and human futures</a>. Free Software was a bold assertion of essential freedoms about software. But those in the 1980s did not know how the world would change nearly forty years later. Today, the plot has thickened. The world is more complex. Technology impacts our lives in ways we never imagined in 1983. Software Freedom may protect us in one aspect of our digital lives, but it fails us in other ways.</p>

<h3 id="ethical-source">Ethical Source?&nbsp;<a class="hanchor" href="#ethical-source" aria-label="Anchor link for: Ethical Source?">🔗</a></h3>
<p>Perhaps this is best understood by looking at the attitude towards the <a href="https://ethicalsource.dev/">Ethical Source movement</a> by those in the Free Software world. There are a wide range of views and opinions. It is difficult to build common consensus and understanding across these groups. Yet, somehow, we cannot move past this conversation. It persists.</p>
<p>One famous example is the Java programming language license that forbid its use in nuclear submarines. For this reason, Free Software activists did not consider Java as Open Source until Sun Microsystems and subsequently Oracle were challenged. To some, freedom meant the ability to do anything—with no limitations—to the original work. For others still, freedom means the freedom of <em>all</em> people. The &ldquo;freedom to use&rdquo; is a controversial freedom in respect to certain ways we use software.</p>

<h3 id="join-or-die">&ldquo;<a href="https://en.wikipedia.org/wiki/Join,_or_Die">Join, or Die.</a>&rdquo;&nbsp;<a class="hanchor" href="#join-or-die" aria-label="Anchor link for: &ldquo;Join, or Die.&rdquo;">🔗</a></h3>
<p>Is there a consensus today in the Free Software or Ethical Source worlds about how we address the ethical issues of our field? No. There is not. Inside each movement, there are disagreements and differences on what is the most effective way to accomplish collective goals of building a more fair and just world. Depending on our unique perspectives and backgrounds, we have different views on the methods and means of how we address issues of ethical and unethical uses of software. I am doubtful there is a common definition of what ethical and unethical means in the narrow context of software. We have not yet <em>clearly</em> agreed on those definitions in global and transnational legal and judiciary systems.</p>
<p>It is not clear to me which way the winds will blow in the 2020s. But what is clear is that the storm is coming. Either the Free Software movement will fragment on different definitions of Freedom, or it will collectively converge around a new set of values updated to the ways the world changed so far in the 21st century (or even just 2020 alone).</p>
<p>One path weakens us all, amid global political shifts reminiscent of 20th century nationalist politics. The other path unifies us and builds common power together for the things we can change. I just hope the Free Software movement chooses right.</p>

<h2 id="free-software-will-see-more-young-people-stay-or-leave">Free Software will see more young people stay, or leave.&nbsp;<a class="hanchor" href="#free-software-will-see-more-young-people-stay-or-leave" aria-label="Anchor link for: Free Software will see more young people stay, or leave.">🔗</a></h2>
<p>Free Software will either be more inclusive of young people and new ideas, or it will see these young people move on to something else and fragment the movement.</p>
<p>In my own life, there were decisions and opportunities to influence the building of my digital life. But it was a paradox of choice, whether I wanted this digital life or not. It was simply the reality of the world I grew up in.</p>
<p>I am a millennial. The world changed around me as a child, as I grew into this new hyper-connected digital era. I owned my first computer at four years old. My home had a (dial-up) Internet connection when I was six. In grade school, I built a community site and online forum for my class. In high school, I participated in and moderated international online communities. These experiences collectively informed my worldview as someone who grew up on the budding World Wide Web.</p>

<h3 id="the-world-the-children-made">&ldquo;The world the children made.&rdquo;&nbsp;<a class="hanchor" href="#the-world-the-children-made" aria-label="Anchor link for: &ldquo;The world the children made.&rdquo;">🔗</a></h3>
<p>Millennials were the first generation to inherit the new always-online world <a href="https://en.wikipedia.org/wiki/The_Veldt_%5C%28short_story%5C%29">built by the generation before</a>. This is true for many others my age or younger who are transitioning into global citizens. This is no small part enabled by the constant-connectivity of the Internet mixed with different social and environmental circumstances we are born into. Young people are coming, and it is an open question whether Free Software will include them. Or if it will only include a select few who subscribe to the same pre-existing value system.</p>
<p>It is difficult to articulate this well, but I think Free Software will face a challenge of inclusivity for my generation. Either it will encourage and foster the next generation of Free Software activists to assert and protect our basic freedoms of computers, or it will isolate and push those people away from being a part of this movement.</p>
<p>Will others my age, or younger, emerge as leaders in their own right in the Free Software movement? Or will young people start something new that is more welcoming and empowering to them as individuals?</p>

<h2 id="what-now">What now?&nbsp;<a class="hanchor" href="#what-now" aria-label="Anchor link for: What now?">🔗</a></h2>
<p>Just like the Free Software activists of the 1980s and 1990s, I cannot predict precisely how the world will change. But I think it is valuable to step back from the hustle and bustle of daily life to think constructively about <strong><em>where</em></strong> we are going. We can fall into a routine of living our life comfortably because it is easy, but our comforts can cover our consciousness unless we evaluate our own views and biases for what they are.</p>
<p>I cannot know for sure where we are going, but I am committed to the belief that there are essential freedoms that we, as human beings, have in the context of the systems and digital worlds we create together. It is to this core belief that I bind myself, and I am excited as much as I am nervous for what changes are to come in this next decade of Free Software.</p>
<hr>
<p><em>This blog post was originally written for an independent study at the Rochester Institute of Technology as a supplement for IGME-583 Legal and Business Aspect of FOSS. Special thanks goes to my faculty advisor, D. Joe, for supervising this independent study and being a sounding box for ideas, perspectives, and thoughts.</em></p>
<p><em>Original photo by <a href="https://unsplash.com/@freegraphictoday?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">AbsolutVision</a> on <a href="https://unsplash.com/s/photos/future?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>. Modified by <a href="https://jwheel.org">Justin Wheeler</a> for this blog post. Special thanks to <a href="https://www.linkedin.com/in/wilfriede">Wilfried Hounyo</a>, <a href="https://nolski.rocks/">Mike Nolan</a>, and <a href="https://oliviagallucci.home.blog/">Olivia Gallucci</a> for reviewing.</em></p>]]></description></item><item><title>How Mozilla Open Source Archetypes influence UNICEF Open Source Mentorship</title><link>https://jwheel.org/blog/2020/11/open-source-archetypes-unicef-open-source/</link><pubDate>Tue, 10 Nov 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/11/open-source-archetypes-unicef-open-source/</guid><description><![CDATA[<p>In May 2018, Mozilla and Open Tech Strategies released a 40-page report titled, &ldquo;<em>Open Source Archetypes</em>&rdquo;. This blog post is a recap of how this report influences the Open Source Mentorship programme I lead at the UNICEF Innovation Fund.</p>
<p>I joined the UNICEF Innovation team in June 2020, although this is <a href="https://jwfblog.wpenginepowered.com/2018/02/unicef-internship/">not the first time</a> I have worked with UNICEF Innovation. I have had <a href="https://www.unicef.org/innovation/stories/unicefs-open-source-approach-innovation">some opportunity</a> to write about Open Source, but my personal blog has been quiet! So, this felt like the right opportunity to talk about what I am up to these days.</p>
<p>The <em>Open Source Archetypes</em> report (<em>below</em>) provides nine archetypes common among Open Source projects and communities. These archetypes provide a common language and perspective to think about how to capture the most value of Open Source in various contexts.</p>
<p><a href="/docs/Open-Source-Archetypes-Mozilla-Open-Tech-Strategies-May-2018.pdf">Open Source Archetypes (May 2018)</a><a href="/docs/Open-Source-Archetypes-Mozilla-Open-Tech-Strategies-May-2018.pdf">Download</a></p>
<p>This article covers the following topics:</p>
<ol>
<li>How <em>Open Source Archetypes</em> align with my experience</li>
<li>How I use <em>Open Source Archetypes</em> at UNICEF</li>
<li>Unanswered questions</li>
</ol>

<h2 id="how-open-source-archetypes-align-with-my-experience">How <em>Open Source Archetypes</em> align with my experience&nbsp;<a class="hanchor" href="#how-open-source-archetypes-align-with-my-experience" aria-label="Anchor link for: How Open Source Archetypes align with my experience">🔗</a></h2>
<p>The <em>Open Source Archetypes</em> report is useful to me because it aligns with my own experiences and encounters with common Free and Open Source Software projects. An advantage of taking my alma mater&rsquo;s <a href="https://www.rit.edu/study/free-and-open-source-software-and-free-culture-minor">Free and Open Source Software and Free Culture Minor</a> is experiencing what real Open Source projects are like long before I entered the industry. The projects and organizations I contributed to and interacted with all ran their projects in one of the nine models identified in the report.</p>
<p>The <em>Open Source Archetypes</em> report speaks to my personal experience either using or contributing to projects like <a href="https://jwheel.org/#fedora">Fedora</a>, <a href="https://github.com/kubernetes/minikube/commits?author=justwheel">Kubernetes</a>, <a href="https://www.spigotmc.org/threads/its-been-an-amazing-three-years.185023/">SpigotMC</a>, <a href="https://musicbrainz.org/user/jflory/edits">MusicBrainz</a>, and various independent projects. <strong>The value of Open Source for any project is in meeting the goals of the intended audience.</strong> By itself, &ldquo;Open Source&rdquo; is a broad term, even if it does have a <a href="https://opensource.org/osd-annotated">legal definition</a>. My experiences taught me the importance of how different Open Source projects meet the needs of different audiences, or even different combinations and balances of audiences. The <em>Open Source Archetypes</em> report creates language for something I previously only understood through direct experience.</p>
<p>When I first read the report earlier in 2020, I knew it was relevant to my work. But how could I begin to integrate it into the Open Source Mentorship programme I manage for the UNICEF Innovation Fund?</p>

<h2 id="how-i-use-open-source-archetypes-at-unicef">How I use <em>Open Source Archetypes</em> at UNICEF&nbsp;<a class="hanchor" href="#how-i-use-open-source-archetypes-at-unicef" aria-label="Anchor link for: How I use Open Source Archetypes at UNICEF">🔗</a></h2>
<p>The <a href="https://unicefinnovationfund.org/">UNICEF Innovation Fund</a> provides early stage funding and support to frontier technology solutions that benefit children and the world. Most teams in the Innovation Fund are from countries where UNICEF has an <a href="https://www.unicef.org/about/execboard/files/CPDs_ending_in_2021-EN-2020.10.05.pdf">ongoing country programme</a>.</p>
<p>A requirement for solutions we fund is that they must be Open Source. I have seen many different types of projects and business models since I started working as a <a href="https://jwheel.org/#librecorps">part-time consultant</a> for UNICEF in 2018. As exciting as this is, it was challenging to understand the best way of supporting each team and their Open Source projects. Each team and project had differences unrelated to their source code, but closely tied to their business models and impact they wanted to have through their work.</p>
<p>So, the <em>Open Source Archetypes</em> report have me language. It gave me examples and explanations of how Open Source can work to teams who had little to no prior experience of Working Open. I take the unique context and details I understand about each team I work with, and contextualize what they are doing compared to the different models in the report.</p>
<p>The feedback I received so far on the report with the 15+ teams I currently work with is mostly positive. Some teams exclaimed this report was what they wish could have read months before because it resolved many of their doubts. Others were more overwhelmed, and needed extra time to read and review.</p>
<p>For my role as a mentor, the Open Source Archetypes report gives me cues for how to best support and direct each team I work with. The task of building an Open Source community or participating in an existing one is not a small task. Whether it is documentation, project management, quality assurance and testing, or community engagement, I have yet to see any small team accomplish all of these things at once. So, identifying which archetype a team best identifies with gives me a cue to guide the teams on their path forward. It gives me context for how to make Open Source something that works for them instead of against them.</p>

<h2 id="unanswered-questions">Unanswered questions&nbsp;<a class="hanchor" href="#unanswered-questions" aria-label="Anchor link for: Unanswered questions">🔗</a></h2>
<p>I have great appreciation and gratitude for the folks at Mozilla and Open Tech Strategies who compiled this report. But it was written over two years ago, and like all things in life, things can change. So, while I look comfortably from the position of hindsight, there are some critiques and missing components to the Open Source Archetypes reports.</p>
<p>My unanswered questions are below.</p>

<h3 id="does-the-linux-kernel-and-subsequently-linux-distributions-represent-another-unwritten-archetype">Does the Linux kernel (and subsequently, Linux distributions) represent another unwritten archetype?&nbsp;<a class="hanchor" href="#does-the-linux-kernel-and-subsequently-linux-distributions-represent-another-unwritten-archetype" aria-label="Anchor link for: Does the Linux kernel (and subsequently, Linux distributions) represent another unwritten archetype?">🔗</a></h3>
<p>The report explicitly avoided using the Linux kernel as the basis for any archetype:</p>
<blockquote>
<p>In some ways the Linux kernel project could be considered “Wide Open”. However, both technically and culturally, Linux kernel development is sui generis and we have deliberately avoided using it as the basis for any archetype.</p>
<p><em>Open Source Archetypes</em>, Page 17</p>
</blockquote>
<p>Contextualizing a project like Linux is hard. There is a lot of history to a project that first launched over email in 1991. There are many &ldquo;yes, but&quot;s about decisions made 10 or even 25 years ago that would not replay the same way in 2020.</p>
<p>Yet this is important work. Linux represents not just the kernel, but also large, decentralized sub-units of other systems that integrate the kernel in order to make it useful (e.g. Ubuntu, Fedora, Debian, Arch Linux, you name it). These sub-communities include large entities and corporations, spanning multiple countries and organizations of various sizes.</p>
<p>The Linux kernel communities are worthy of a deeper look, possibly in order to define a new archetype.</p>

<h3 id="how-can-open-source-archetypes-better-fit-the-socialhumanitarian-sector">How can Open Source Archetypes better fit the social/humanitarian sector?&nbsp;<a class="hanchor" href="#how-can-open-source-archetypes-better-fit-the-socialhumanitarian-sector" aria-label="Anchor link for: How can Open Source Archetypes better fit the social/humanitarian sector?">🔗</a></h3>
<p>The archetypes shared in the report largely focus on business sustainability. In other words, the report is biased towards Mozilla&rsquo;s interest in funding the research in order to better understand how to support a commercially-successful Open Source project. To me, there seems like a gap in models that often work for Open Source projects perhaps like <a href="https://ureport.in/about/">U-Report</a> and <a href="https://www.ushahidi.com/about">Ushahidi</a>.</p>
<p>This is an area of interest to me, and likely others in the UN and NGO space. The report could do more to address these kinds of projects.</p>

<h2 id="how-would-you-teach-open-source">How would you teach Open Source?&nbsp;<a class="hanchor" href="#how-would-you-teach-open-source" aria-label="Anchor link for: How would you teach Open Source?">🔗</a></h2>
<p>To conclude, the Open Source Archetypes report is an invaluable tool that provides me language and context for teaching others about Free and Open Source Software.</p>
<p>How would you teach Open Source? What models, research, or tools would you use to inform an Open Source mentorship or education programme? Share your thoughts below in the comments!</p>]]></description></item><item><title>Hacktoberfest 2020 with TeleIRC</title><link>https://jwheel.org/blog/2020/10/hacktoberfest-2020-with-teleirc/</link><pubDate>Mon, 12 Oct 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/10/hacktoberfest-2020-with-teleirc/</guid><description><![CDATA[<p>October is here! If you contribute to Open Source projects, you might know that October is the month of Hacktoberfest. <a href="https://hacktoberfest.digitalocean.com/">DigitalOcean teams up</a> with different partners each year to send a t-shirt (or plant a tree on your behalf) for anyone who makes four GitHub Pull Requests in October. And guess what? TeleIRC is a participating project for you to get your Hacktoberfest t-shirt or tree!</p>
<p>This post identifies specific tasks the TeleIRC team identified as &ldquo;good first issues&rdquo; for Hacktoberfest hackers. They are in order of least difficult to most difficult. Golang developers especially are encouraged to participate!</p>

<h2 id="why-work-on-teleirc-for-hacktoberfest">Why work on TeleIRC for Hacktoberfest?&nbsp;<a class="hanchor" href="#why-work-on-teleirc-for-hacktoberfest" aria-label="Anchor link for: Why work on TeleIRC for Hacktoberfest?">🔗</a></h2>
<p>Before sharing how you can contribute for Hacktoberfest, what about <em>why</em> you should contribute?</p>
<p>TeleIRC originally launched in 2016. Since then, we have <a href="https://jwfblog.wpenginepowered.com/tag/teleirc/">built up a community of users</a> around the world. TeleIRC is also used in other larger Open Source projects like the Fedora Project and LibreOffice! Of course, it is still used in the Rochester Institute of Technology community where it was first developed.</p>
<p>Working on TeleIRC means you can contribute to a project that is actually used in the real world. Hundreds of user communities, some even the size of thousands of people, use TeleIRC. Your improvements and changes will help the many downstream users of our project. (P.S. – See the full list of <a href="https://docs.teleirc.com/en/latest/about/who-uses-teleirc/">who uses TeleIRC</a> in our docs!)</p>
<p>With that out of the way… let&rsquo;s talk about what there is to do!</p>

<h2 id="1-large-messages-go-to-a-pastebin">#1: Large messages go to a pastebin&nbsp;<a class="hanchor" href="#1-large-messages-go-to-a-pastebin" aria-label="Anchor link for: #1: Large messages go to a pastebin">🔗</a></h2>
<p>This corresponds to <a href="https://github.com/RITlug/teleirc/issues/56">RITlug/teleirc#56</a>.</p>
<ul>
<li><strong>Goal</strong>: When a Telegram user writes a single line that exceeds the maximum number of characters for an IRC message (512 characters, per <a href="https://www.rfc-editor.org/rfc/rfc1459.html#section-2.3">RFC 1459, section 2.3</a>), send the string to a pastebin service.</li>
<li><strong>Success criteria</strong>: Any line greater than 512 characters is sent to a pastebin-like service.</li>
<li><strong>What we think</strong>: Note the difference between &ldquo;lines&rdquo; and &ldquo;messages&rdquo;. Telegram users can add line breaks to messages. TeleIRC should respect those line breaks as new IRC messages. So, only a single line that exceeds the maximum should go to a pastebin-like service.</li>
</ul>

<h2 id="2-telegram-poll-handler">#2: Telegram Poll handler&nbsp;<a class="hanchor" href="#2-telegram-poll-handler" aria-label="Anchor link for: #2: Telegram Poll handler">🔗</a></h2>
<p>This corresponds to <a href="https://github.com/RITlug/teleirc/issues/267">RITlug/teleirc#267</a>.</p>
<ul>
<li><strong>Goal</strong>: Send text representations of Telegram Polls to IRC. Currently, Polls are ignored by TeleIRC and do not appear in any way on IRC.</li>
<li><strong>Success criteria</strong>: If a Telegram user sends a Poll to a group, a text representation should appear in IRC.</li>
<li><strong>What we think</strong>: IRC users will not be able to participate in Polls. This is a platform limitation. However, IRC users should get some context about what a Poll includes, e.g. what the question is and what answer choices are available.</li>
</ul>

<h2 id="3-support-more-encoding-types-eg-cp1251">#3: Support more encoding types (e.g. CP1251)&nbsp;<a class="hanchor" href="#3-support-more-encoding-types-eg-cp1251" aria-label="Anchor link for: #3: Support more encoding types (e.g. CP1251)">🔗</a></h2>
<p>This corresponds to <a href="https://github.com/RITlug/teleirc/issues/332">RITlug/teleirc#332</a>.</p>
<ul>
<li><strong>Goal</strong>: Support more string encoding types than UTF-8.</li>
<li><strong>Success criteria</strong>: If a Telegram user writes a message in Cyrillic script, it should appear in Cyrillic script on IRC (if the server supports it, e.g. CP1251).</li>
<li><strong>What we think</strong>: This is one of the toughest issues we have and requires knowledge about string encoding methods. The current core developers are native English speakers and we do not use other languages that have non-Latin script. The GitHub issue has more info, but it will need additional research or knowledge about string encoding.</li>
</ul>

<h2 id="need-hacktoberfest-help-come-talk-to-us">Need Hacktoberfest help? Come talk to us!&nbsp;<a class="hanchor" href="#need-hacktoberfest-help-come-talk-to-us" aria-label="Anchor link for: Need Hacktoberfest help? Come talk to us!">🔗</a></h2>
<p><strong>Want to work on any of these?</strong> Add a new comment to the GitHub Issue and let us know you are interested in working on it.</p>
<p><strong>Have questions about the project or getting started?</strong> Come talk with the TeleIRC team! Of course, you can find us both on IRC (<code>#rit-lug-teleirc</code> on Freenode IRC) and Telegram (<a href="https://t.me/teleirc">@teleirc</a>).</p>
<p>Additionally, the TeleIRC team meets virtually <strong>every Sunday at 11:00 U.S. EDT / 15:00 UTC</strong>. Ask us for a calendar invite in our team chat if you would like one!</p>]]></description></item><item><title>TeleIRC v2.0.0 is officially here!</title><link>https://jwheel.org/blog/2020/05/teleirc-v2-0-0-is-officially-here/</link><pubDate>Sun, 24 May 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/05/teleirc-v2-0-0-is-officially-here/</guid><description><![CDATA[<p>After almost eight months of work, the TeleIRC Team is happy to announce <strong>General Availability of TeleIRC v2.0.0 today</strong>. Thanks to the hard work of our volunteer community, we are celebrating an on-time release of a major undertaking to make a more sustainable future for TeleIRC.</p>

<h2 id="download-teleirc-v200-now"><a href="https://github.com/RITlug/teleirc/releases/tag/v2.0.0">Download TeleIRC v2.0.0 now!</a>&nbsp;<a class="hanchor" href="#download-teleirc-v200-now" aria-label="Anchor link for: Download TeleIRC v2.0.0 now!">🔗</a></h2>
<p>If you want to skip the text and get to the software, head to the <a href="https://github.com/RITlug/teleirc/releases/tag/v2.0.0">GitHub v2.0.0 release</a> for more info. If you want the story behind this release, read on!</p>

<h2 id="eight-months-later">Eight months later…&nbsp;<a class="hanchor" href="#eight-months-later" aria-label="Anchor link for: Eight months later…">🔗</a></h2>
<p>The conversation started in a university hallway after the first RIT Linux Users Group meeting in the Fall 2019 semester. Together, <a href="https://github.com/Tjzabel">Tim Zabel</a>, <a href="https://github.com/Zedjones">Nicholas Jones</a>, and <a href="https://jwheel.org/">Justin Wheeler</a> set out to <a href="https://github.com/RITlug/teleirc/issues/163">rewrite TeleIRC from NodeJS to Go</a>. This was done to address a growing backlog of challenging feature requests on TeleIRC, but also a way for us to gain more experience working with Go. Along the way, we also ended up <a href="https://jwfblog.wpenginepowered.com/2020/03/teleirc-v2-0-0-march-2020-progress-update/">facilitating an agile-inspired software release process</a> adapted for open source.</p>
<p>So, what happened in the eight months after the first conversation? The team meet for weekly meetings each Saturday afternoon (at first in-person, later virtually), two new core contributors joined the team, and some drive-by contributors provided feedback andf added code to the new release. There were charts, whiteboards and dry-erase markers, and lots of Blue Jeans video calls. But after all this time, we made it to release day!</p>

<h2 id="thank-you-amazing-volunteer-contributors">Thank you amazing volunteer contributors!&nbsp;<a class="hanchor" href="#thank-you-amazing-volunteer-contributors" aria-label="Anchor link for: Thank you amazing volunteer contributors!">🔗</a></h2>
<p>This endeavor was a shared commitment by our volunteer committer team. All five of the volunteer core maintainers spread patience and sustained effort over time. At the end, we made something really cool to show for this work.</p>
<p>A <strong><em>huge</em></strong> thanks to our core maintainers and all current and past contributors to TeleIRC. You have all contributed to the success (and motivation!) for this project. It is fun to work on cool projects with friends!</p>
<p>A proper shout-out goes to the core maintainers who joined the team over the last eight months working on this release:</p>
<ul>
<li><a href="https://github.com/kennedy">Kennedy Kong</a></li>
<li><a href="https://github.com/10eMyrT">Kevin Assogba</a></li>
<li><a href="https://github.com/Zedjones">Nicholas Jones</a></li>
<li><a href="https://github.com/Tjzabel">Tim Zabel</a></li>
</ul>

<h2 id="i-found-a-bug-in-teleirc-v200">&ldquo;I found a bug in TeleIRC v2.0.0!&rdquo;&nbsp;<a class="hanchor" href="#i-found-a-bug-in-teleirc-v200" aria-label="Anchor link for: &ldquo;I found a bug in TeleIRC v2.0.0!&rdquo;">🔗</a></h2>
<p>If you run into a problem, check out the <a href="https://docs.teleirc.com/">TeleIRC documentation</a> and <a href="https://github.com/RITlug/teleirc/issues/new/choose">open an issue</a> if it does not answer your questions.</p>

<h2 id="get-in-touch">Get in touch!&nbsp;<a class="hanchor" href="#get-in-touch" aria-label="Anchor link for: Get in touch!">🔗</a></h2>
<p>If you have questions, <a href="https://github.com/RITlug/teleirc/tree/v2.0.0#live-demo">get in touch</a> with the developer community. You can find us <a href="https://t.me/teleirc">on Telegram</a> and <a href="https://webchat.freenode.net/#rit-lug-teleirc">on IRC</a> (<code>#rit-lug-teleirc</code> on <em>chat.freenode.net</em>).</p>]]></description></item><item><title>What's new in TeleIRC v2.0.0</title><link>https://jwheel.org/blog/2020/05/whats-new-in-teleirc-v2-0-0/</link><pubDate>Sun, 24 May 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/05/whats-new-in-teleirc-v2-0-0/</guid><description><![CDATA[<p>TeleIRC v2.0.0 is the latest major release of our open source Telegram &lt;=&gt; IRC bridge. Download the <a href="https://github.com/RITlug/teleirc/releases/tag/v2.0.0">latest release</a> and read the <a href="https://jwfblog.wpenginepowered.com/2020/05/teleirc-v2-0-0-is-officially-here/">release announcement</a> for the full story.</p>
<p>There are several new and noteworthy changes in TeleIRC v2.0.0. This post walks you through the major changes and differences for TeleIRC v2.0.0. Read on for the highlight reel of this release.</p>

<h2 id="full-rewrite-to-go">Full rewrite to Go&nbsp;<a class="hanchor" href="#full-rewrite-to-go" aria-label="Anchor link for: Full rewrite to Go">🔗</a></h2>
<p>TeleIRC v2.0.0 is a complete and total rewrite. With the lessons learned and best practices of the NodeJS v1.x.x releases under our belt, the team set out in September 2019 to rewrite TeleIRC in Go. The rewrite was motivated by fun and personal interest, but it was also intended to make the future of TeleIRC more sustainable.</p>
<p>The rewrite makes TeleIRC simple, fast, and lightweight. TeleIRC is unique from other chat bridge software, which usually focus on extensive configuration and supporting many chat platforms.</p>
<p>Additionally, the success criteria in order to release was feature parity with v1.x.x releases. The team accomplished this almost completely, with one exception. <strong>TeleIRC v2.0.0 does not include Imgur image upload for IRC</strong>; however, a v2.1.0 feature release will include Imgur support.</p>
<p>To summarize, TeleIRC v2.0.0 is written to be a simple and excellent Telegram &lt;=&gt; IRC bridge. No more, no less.</p>

<h2 id="run-teleirc-v200-as-a-compiled-binary">Run TeleIRC v2.0.0 as a compiled binary&nbsp;<a class="hanchor" href="#run-teleirc-v200-as-a-compiled-binary" aria-label="Anchor link for: Run TeleIRC v2.0.0 as a compiled binary">🔗</a></h2>
<p>The new release is available as a standalone 8 MB binary. The only deployment assets needed are the binary and a config file. Other pathways, including build from source and Ansible Roles, are also available.</p>
<p>This is a departure from TeleIRC v1.x.x releases, which required a NodeJS run-time and installing project dependencies. TeleIRC v2.0.0 does not require a Go run-time on the host.</p>

<h2 id="improved-teleirc-v200-documentation">Improved TeleIRC v2.0.0 documentation&nbsp;<a class="hanchor" href="#improved-teleirc-v200-documentation" aria-label="Anchor link for: Improved TeleIRC v2.0.0 documentation">🔗</a></h2>
<p>End user feedback shaped and improved documentation during development.</p>
<p>Thanks to feedback collected during the pre-release process, the documentation is simplified and written to be easy to understand. We hope you find the <a href="https://docs.teleirc.com/en/latest/user/quick-start/">TeleIRC Quick Start</a> page a helpful introduction to getting TeleIRC running in little time.</p>

<h2 id="future-roadmap-for-containers">Future roadmap for containers&nbsp;<a class="hanchor" href="#future-roadmap-for-containers" aria-label="Anchor link for: Future roadmap for containers">🔗</a></h2>
<p>Because of <a href="https://jwfblog.wpenginepowered.com/2020/03/teleirc-v2-0-0-march-2020-progress-update/">v2.0.0 design decisions</a>, there is a planned future for container and container orchestration use cases. At release time, a <a href="https://github.com/RITlug/teleirc/tree/v2.0.0/deployments/container">Dockerfile is available</a>, but it is not yet tested or documented.</p>
<p>In future releases, the TeleIRC Team will continue to test the container image and iron out bugs. Future deployment assets and documentation will offer pathways to run TeleIRC in Kubernetes or OpenShift v4.x.x.</p>
<hr>
<p><em>Article format inspired by Ryan Lerch&rsquo;s format for &ldquo;<a href="https://fedoramagazine.org/whats-new-fedora-32-workstation/">What&rsquo;s new in Fedora Workstation</a>&rdquo;.</em></p>]]></description></item><item><title>FOSDEM 2020, pt. 2: Can Free Software include ethical AI systems?</title><link>https://jwheel.org/blog/2020/04/fosdem-2020-pt-2-can-free-software-include-ethical-ai-systems/</link><pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/04/fosdem-2020-pt-2-can-free-software-include-ethical-ai-systems/</guid><description><![CDATA[<p><em>This post is a follow-up to <a href="https://jwfblog.wpenginepowered.com/2020/03/fosdem-2020-pt-1-play-by-play/">FOSDEM 2020, pt. 1: Play by play</a>. This post summarizes the talk given by me and my colleague, <a href="https://nolski.rocks/">Mike Nolan</a>, at FOSDEM 2020.</em></p>
<hr>
<p>FOSDEM 2020 took place from Saturday, 1 February, 2020 to Sunday, 2 February, 2020 in Brussels, Belgium (shortly after <a href="https://jwfblog.wpenginepowered.com/2020/02/sustain-oss-2020-quick-rewind/">Sustain OSS 2020</a> and <a href="https://jwfblog.wpenginepowered.com/2020/02/chaosscon-eu-2020-play-by-play/">CHAOSScon EU 2020</a>). On Saturday, together with my colleague and friend Mike Nolan, we presented on a topic he and I have co-conspired on for the last six months. What are the intersections of Free Software and artificial intelligence (AI)?</p>
<blockquote>
<p>What is a rights-based approach for designing minimally safe and transparent guidelines for AI systems? In this talk, we explore what a Free AI system might look like. Then, taking research and guidelines from organizations such as Google and the UN Office for the Coordination of Humanitarian Affairs, we propose practical policies and tools to ensure those building an AI system respect user freedom. Lastly, we propose the outlines of a new kind of framework where all derivative works also respect those freedoms.</p>
<p><a href="https://fosdem.org/2020/schedule/event/ethical_ai/">Freedom and AI: Can Free Software include ethical AI systems? Exploring the intersection of Free software and AI</a></p>
</blockquote>
<p><em>Video recording from FOSDEM 2020</em></p>
<p>This post is an abridged summary of the key ideas and thoughts Mike and I presented at our FOSDEM 2020 session.</p>

<h2 id="lets-frame-this-first">Let&rsquo;s frame this first.&nbsp;<a class="hanchor" href="#lets-frame-this-first" aria-label="Anchor link for: Let&rsquo;s frame this first.">🔗</a></h2>
<p>The idea behind this talk was a seed planted at MozFest 2018. I remember sitting with Mike in a hotel lobby while he was clocking some remote hours for work. We had some honest conversation about the experiences we&rsquo;ve had across the public, private, and humanitarian aid sectors. At the time, Mike worked at the International Rescue Committee, and I had just finished a six-month internship with the UNICEF Office of Innovation working on open source community management.</p>
<p>The best way I can think of to describe humanitarian work is that it comes with the highest of highs and lowest of lows. Finding success usually means either a direct or indirect impact on some of the most vulnerable populations on our planet. Making mistakes or seeing planned efforts spin out in the wrong direction mean the resources your organization do not have the full impact they could, or sometimes worse, they fix one problem and create another.</p>
<p>At MozFest 2018, the seeds of thought for the intersections of Free Software as it relates to humanitarian aid and artificial intelligence were planted. Fast-forward a year to October 2019. Mike and I caught up after a while and after we had both had new experiences out in the industry. We began tending to the seed planted the year before. Our venting sessions and simultaneous cheers turned from our video chats back to the wider Free Software ecosystem.</p>
<p>The FOSDEM 2020 call for papers would open in a few more weeks from when we first began talking about these ideas in 2019. FOSDEM 2020 is a great collection of many different minds and people in the Free Software world, so it felt like the perfect audience for us to deliver our thoughts to an audience for the first time.</p>
<p>We applied, and later found out our application to the main track was accepted, landing us in the Community and Ethics track on Saturday.</p>
<p>This blog post is a partial recap of what we covered in that FOSDEM 2020 session linked above. The FOSDEM 2020 talk covered three main ideas. This blog post summarizes only the definitions of our AI Freedoms.</p>

<h2 id="looking-to-yesterday-for-today">Looking to yesterday for today&nbsp;<a class="hanchor" href="#looking-to-yesterday-for-today" aria-label="Anchor link for: Looking to yesterday for today">🔗</a></h2>
<p>Before we define AI freedoms, we need to define the origin of Free Software. While the precise origin is debatable, Mike and I posit that the <a href="https://jwfblog.wpenginepowered.com/2020/04/how-did-free-software-build-a-social-movement/">Free Software movement began with a definition of rights</a>. These freedoms were first established by the GNU Project on 27 Sept. 1983.</p>
<p>So, in the spirit of the movement that precedes us today, Mike and I started asking questions. As we go into a new decade, what would Freedoms of AI look like? We know we aren&rsquo;t presenting <em>The Truth</em> or <em>The Answer</em>. But we are presenting our experiences and reflections.</p>

<h2 id="what-freedoms-do-we-want-to-protect">What freedoms do we want to protect?&nbsp;<a class="hanchor" href="#what-freedoms-do-we-want-to-protect" aria-label="Anchor link for: What freedoms do we want to protect?">🔗</a></h2>
<p>So, Free Software has the Four Freedoms. Combining our shared history in the Free Software movement with our personal experiences working in both commercial and humanitarian contexts, this is our vision of Three possible Freedoms of AI:</p>

<h3 id="1-audit-automated-decision-making-systems">1. Audit automated decision-making systems&nbsp;<a class="hanchor" href="#1-audit-automated-decision-making-systems" aria-label="Anchor link for: 1. Audit automated decision-making systems">🔗</a></h3>
<p>We are entitled to know and understand how decisions that affect us are made. So, you should have to freedom to audit, or understand, how those automated decisions are made.</p>
<p>For a moment, picture yourself in a classroom. Your teacher gives you a bad grade on an essay. You are probably curious to know why you received the grade that you did, especially if it was something important to you. You would likely go to the teacher and ask for help understanding why you received the grade you did, if there were no comments or notes.</p>
<p>So, why wouldn&rsquo;t you want to understand how a decision is made that affects you?</p>
<p>This does tie closely to one of the Four Freedoms of Software: the freedom to &ldquo;study the source&rdquo;. This AI freedom restates that Software freedom as, &ldquo;the freedom to understand how a system that is impacting you works&rdquo;. But this does go beyond the Software freedom to study the source because it is more than just source code.</p>

<h3 id="2-deliver-accountability-and-responsibility">2. Deliver accountability and responsibility&nbsp;<a class="hanchor" href="#2-deliver-accountability-and-responsibility" aria-label="Anchor link for: 2. Deliver accountability and responsibility">🔗</a></h3>
<p>We already know AI systems are capable of harm. We deserve the guarantee of liability when these systems do create harm. Not if, when. So, you should also have the freedom to deliver and expect accountability and responsibility from the designers of automated decision-making systems that impact you.</p>
<p>Think about it for a minute. When machines make decisions for us, who is accountable for those decisions? Is it the machines? Is it the creators who programmed them? Or is it the end-user?</p>
<p>It should be the creators and organizations that create these systems, as they directly profit from their output. Those who create these systems typically do so to profit themselves.</p>
<p><strong>But we as those affected deserve to be put over their profit.</strong></p>

<h4 id="myanmar-and-facebook">Myanmar and Facebook&nbsp;<a class="hanchor" href="#myanmar-and-facebook" aria-label="Anchor link for: Myanmar and Facebook">🔗</a></h4>
<p>What would a real world example of this look like? Have you ever thought about how social media could be connected to genocidal campaigns? This is what the United Nations is <a href="https://www.reuters.com/article/us-myanmar-rohingya-un/myanmar-generals-had-genocidal-intent-against-rohingya-must-face-justice-u-n-idUSKCN1LC0KN">asking of Facebook</a> in the role of the news feed in inciting genocide. But why would the U.N. ask these questions of Facebook?</p>
<p>The problem identified with Facebook is the news feed. The news feed optimizes for &ldquo;engaging content&rdquo;. To understand this, we have to define what &ldquo;engaging content&rdquo; means. Studies have shown that optimizing for &ldquo;engagement&rdquo; increases recommendations for extremist and alarmist content. Researchers knew the potential of &ldquo;engaging content&rdquo; to be misused, years before the Rohingya genocide began in Myanmar.</p>
<p>Then, the warnings in research became real. Religious and military leaders created &ldquo;fake news&rdquo; to divide the citizens of Myanmar. This &ldquo;fake news&rdquo; campaign is suspected to be a major contributing factor of the ethnic cleaning of the Rohingya people in Myanmar.</p>
<p>Obviously Facebook didn&rsquo;t take genocide into account in their feature planning when building the news feed. Yet it was still a contributing factor. And because of the research and warnings delivered to Facebook before the genocide, they did know about the potential for misuse.</p>
<p>So, who is responsible? Facebook? Myanmar religious and military leaders? Nobody? Even today, nobody will take responsibility. But what we do know is that profit was placed over people.</p>
<p>Thus, we must demand for a freedom that delivers accountability and responsibility in a world increasingly defined and shaped by automated decision-making. We are already in a &ldquo;catch-up&rdquo; mode to the changing world in this regard.</p>

<h3 id="3-appeal-a-decision">3. Appeal a decision&nbsp;<a class="hanchor" href="#3-appeal-a-decision" aria-label="Anchor link for: 3. Appeal a decision">🔗</a></h3>
<p>No decision-making system is ever perfect. We are <em>always</em> missing some data. So, lastly, you should also have the freedom to appeal a decision that impacts you.</p>
<p>In your life, have you ever told a story to help someone empathize with your situation? Have you ever had to explain a misconstrued fact about your background or history? You are probably familiar with the phrase, &ldquo;walk in someone else&rsquo;s shoes&rdquo;. Our ability to empathize and understand is what connects us as humans. It helps avert disaster more often than you think.</p>
<p>There are always hidden stories not captured by a set of data points. Thus, we should also have the opportunity to break through automated systems that influence an organization. We deserve the opportunity to appeal to the people behind the systems in order to use our humanity.</p>

<h4 id="resumecv-filtering">Resume/CV filtering&nbsp;<a class="hanchor" href="#resumecv-filtering" aria-label="Anchor link for: Resume/CV filtering">🔗</a></h4>
<p>If you have ever applied for a job, you might be familiar with the importance of keywords and certain requirements on your resume or C.V. Automated tools already exist to review these documents and filter out candidates.</p>
<p>But what is the point of interviews? Where you talk with a real person? Interviews are a chance to tell our own hidden stories and explain the gap between what is on our CV and what is not. It gives us a chance to build empathy between us and who we want to be our employer.</p>

<h4 id="practical-examples">Practical examples&nbsp;<a class="hanchor" href="#practical-examples" aria-label="Anchor link for: Practical examples">🔗</a></h4>
<p>It is not hard to look for examples of appealing systems in our society. Two examples are appellate courts and credit denials in the U.S.</p>
<p>Appellate courts are legal systems where we appeal decisions we think were unfair or incorrect. Sometimes this is because of an unfair trial. It could also be because of a biased judge. Either way, a system is in place to appeal a legal decision.</p>
<p>A similar system exists in the U.S. if you are denied a credit offer or loan. You can appeal to an impartial third-party if you believe a credit offer or loan was denied to you on unfair criteria. again, there is a system in place to appeal a decision that could have significant personal impact to you.</p>
<p>How else could we describe the freedom to appeal? We must not erase the opportunity for human connection and empathy when these decisions are made. Even by automated systems. To do so is to deny our humanity.</p>

<h2 id="where-do-we-go-from-here">Where do we go from here?&nbsp;<a class="hanchor" href="#where-do-we-go-from-here" aria-label="Anchor link for: Where do we go from here?">🔗</a></h2>
<p>The stakes have never been higher. These systems are being built not next year, not next month, not tomorrow, but <strong>now</strong>. These problems are not going to go away. They are only going to continue and grow. But we know we can imagine and have a better world, because we have to. The alternative is simply unacceptable.</p>
<p>The history of the Free Software movement <a href="https://jwfblog.wpenginepowered.com/2020/04/how-did-free-software-build-a-social-movement/">left us clues</a> about how to build a social movement to address problematic patterns in our digital society. So, let&rsquo;s take the cues and demand for our Freedoms to be respected, just like those who came before us nearly 40 years ago.</p>
<p>If there is anything to take away from this post, or the original talk, it is this: me, you, and everyone has some power to make change. So, let&rsquo;s build a future that we own, together, for everyone.</p>
<hr>
<p><em>For more details and ideas on how we as individuals can protect these Freedoms and how to get others to respect these Freedoms, <a href="https://fosdem.org/2020/schedule/event/ethical_ai/">watch the full talk</a>!</em></p>]]></description></item><item><title>How did Free Software build a social movement?</title><link>https://jwheel.org/blog/2020/04/how-did-free-software-build-a-social-movement/</link><pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/04/how-did-free-software-build-a-social-movement/</guid><description><![CDATA[<p>The Free Software movement is rooted to origins in the 1980s. As part of a talk I gave with my colleague and friend Mike Nolan <a href="https://jwfblog.wpenginepowered.com/2020/04/fosdem-2020-pt-2-can-free-software-include-ethical-ai-systems/">at FOSDEM 2020</a>, we analyzed how the Free Software movement emerged as a response to a changing digital world in three different phases. This blog post is an exploration and framing of that history to understand how the social movement we call &ldquo;Free Software&rdquo; was constructed.</p>

<h2 id="why-does-this-matter">Why does this matter?&nbsp;<a class="hanchor" href="#why-does-this-matter" aria-label="Anchor link for: Why does this matter?">🔗</a></h2>
<p>This exploration and thought experiment is important to understand when revisiting social movements in technology in the current day. In the FOSDEM 2020 talk Mike and I gave, we presented three possible digital &ldquo;freedoms&rdquo; for artificial intelligence. The rights-based approach we presented at FOSDEM 2020 was inspired by the origin of the Free Software movement.</p>
<p>But to understand how we got to today with thousands of contributors to the Linux project, billions of dollars in open source company buyouts, and the words &ldquo;open source&rdquo; used on mainstream cable news channels, we have to start from the beginning, in 1983.</p>

<h2 id="27-sept-1983-gnu-project-announced">27 Sept. 1983: GNU Project announced&nbsp;<a class="hanchor" href="#27-sept-1983-gnu-project-announced" aria-label="Anchor link for: 27 Sept. 1983: GNU Project announced">🔗</a></h2>
<p>On 27 September 1983, the <a href="https://www.gnu.org/gnu/initial-announcement.en.html">GNU Project was announced</a> by Richard Stallman. The GNU Project was a collection of Free Software tools for building a free operating system. But it was also more than that. The GNU Project came with a vision to give computer users freedom and control of their use of computers. To do this, the GNU Project advocated for four fundamental freedoms:</p>
<ul>
<li>Run software in any way desired</li>
<li>Copy and distribute the software</li>
<li>Study it (i.e. reading the source code)</li>
<li>Modify it and make changes</li>
</ul>
<p>Today, we call these the <strong><a href="https://www.gnu.org/philosophy/free-sw.en.html">Four Freedoms</a></strong>.</p>
<p>So, the GNU Project was founded with these fundamental freedoms as the motivation for why they did what they did. It was more than shipping code for code&rsquo;s sake, but to lead by example in how software could be developed without sacrificing the rights of users.</p>

<h2 id="4-oct-1985-free-software-foundation-founded">4 Oct. 1985: Free Software Foundation founded&nbsp;<a class="hanchor" href="#4-oct-1985-free-software-foundation-founded" aria-label="Anchor link for: 4 Oct. 1985: Free Software Foundation founded">🔗</a></h2>
<p>Next, skip ahead to 4 October 1985. Two years after the launch of GNU, the <a href="https://en.wikipedia.org/wiki/Free_Software_Foundation#History">Free Software Foundation (F.S.F.) is founded</a> to support and sustain GNU and the Free Software movement. The values of the GNU Project were important and valuable, but it wasn&rsquo;t enough to leave them out in the world on their own.</p>
<p>At first, the F.S.F. focused on employing software developers to work on Free Software and the GNU Project. Later, the F.S.F. transitioned to legal and structural issues to support the Free Software community.</p>
<p>So, it is one thing to have your values and ethics out there, but they need to be protected and respected by the rest of the world too. The F.S.F. represented the sustainability of protecting these rights and beliefs, originally put forth by GNU.</p>
<p>While the F.S.F. does help sustain those rights, how does a nonprofit foundation actually enforce these rights in practice?</p>

<h2 id="25-feb-1989-gnu-general-public-license-created">25 Feb. 1989: GNU General Public License created&nbsp;<a class="hanchor" href="#25-feb-1989-gnu-general-public-license-created" aria-label="Anchor link for: 25 Feb. 1989: GNU General Public License created">🔗</a></h2>
<p>Finally, we skip ahead four more years to 25 February 1989: the <a href="https://www.gnu.org/licenses/old-licenses/gpl-1.0.en.html">first version of the GNU Public License</a> (G.P.L.) is created. This is the license that gave &ldquo;copyleft&rdquo; a name. It was written and released for the GNU Project, but the license itself was stewarded by the F.S.F.</p>
<p>The G.P.L. put power in the hands of individual people and activists to shape how others used their software. Thus, copyleft is put into a practical legal policy. In a sense, the G.P.L. allowed software developers to place the Four Freedoms at the core of their code.</p>
<p>Although enforcement of copyleft licenses has a blemished history, it was still the &ldquo;teeth&rdquo; in translating these values and values to the rest of the world. It took inspiration from how copyright was not something often considered when distributing software <em>until</em> the early 1980s.</p>
<p>And thus, copyleft becomes a radical invention in software with the proliferation of the G.P.L., especially in its adoption in prominent projects like the Linux kernel.</p>

<h2 id="is-the-past-relevant-to-social-movements-today">Is the past relevant to social movements today?&nbsp;<a class="hanchor" href="#is-the-past-relevant-to-social-movements-today" aria-label="Anchor link for: Is the past relevant to social movements today?">🔗</a></h2>
<p>So this was a lot of history. Is the past relevant to where we are today? First, consider how the early Free Software movement responded to these emerging societal issues in the 1980s.</p>
<p>Free Software was a response to the changing ecosystem of software distribution. Software became more valued because of a standardization on hardware that didn&rsquo;t exist previously. There were simply fewer architectures to compile for!</p>
<p>Suddenly, the value of software increased. It became a commodity.</p>
<p>Before this commodification of software, the Four Freedoms were, in a sense, the default way of distributing and sharing software. After commodification, this was no longer true. The Four Freedoms were rooted in a belief that there are essential rights that belong to all users of computers and computer systems. Stallman observed this change directly at the MIT Media Lab in the 1970s and early 1980s. This motivated him and many others to stand up for Software Freedom by asserting these freedoms.</p>
<p>To respond to commodification of software, Free Software took a freedom-based approach to established their values, as the Four Freedoms. So, looking back 40 years ago, is it possible to extend and make the past relevant again in today&rsquo;s changing world?</p>
<p>Before we can answer that, we have to first ask. How has the world changed?</p>

<h2 id="your-future-is-the-new-commodity">Your future is the new commodity.&nbsp;<a class="hanchor" href="#your-future-is-the-new-commodity" aria-label="Anchor link for: Your future is the new commodity.">🔗</a></h2>
<p>The history of Free Software overlaps with what is happening now.</p>
<p>Today the world is about predictions: predictions about human futures. This is accomplished by the combination of software and data. Human futures are a simple formula: Data + Software. Or, artificial intelligence and machine learning.</p>
<p>But how are human futures becoming a commodity? In the 1980s, software became the thing we &ldquo;sold&rdquo;. It had inherent value. Today, the ability to predict what you are doing to do next is valuable. This makes both your and my future the new commodity. Where will we go next? What will we buy next? Who have we contacted recently?</p>
<p>But data is only one piece of this big puzzle. It is the enabling force for determining our futures. Third-party organizations collect the world&rsquo;s data on a massive, centralized scale. Your data is what allows companies to sell your future.</p>
<p>To add a metaphor, data is like oil, not gold. You consume the input (data) to sell the output (human futures).</p>

<h2 id="where-are-we-today">Where are we today?&nbsp;<a class="hanchor" href="#where-are-we-today" aria-label="Anchor link for: Where are we today?">🔗</a></h2>
<p>So, how have we responded to our changing world?</p>
<p>There have been some successful resistance to the new value of user data and human futures. The privacy movement and legislation like G.D.P.R. are representative of this.</p>
<p>However, data privacy is only one part of the big picture. Focusing on <strong>individual empowerment does not protect us from societal effects</strong>. Consider <a href="https://en.wikipedia.org/wiki/Predictive_policing#Criticisms">predictive policing</a> and <a href="https://www.wired.com/2017/04/courts-using-ai-sentence-criminals-must-stop-now/">court rulings</a> as two examples.</p>
<p>Ultimately, the data privacy movement has been a key factor in combating the effects of surveillance capitalism, but there are still gaps. Mike and I noticed we need to approach topics like artificial intelligence not in pieces, but as a whole.</p>
<p>And some organizations have recognized this challenge and are working to address it. &ldquo;Working groups&rdquo; and reports with non-mandatory recommendations are on the rise. However, these groups are not effective on moving forward ways of ensuring people are effectively protected from the unforeseen harms of AI systems. &ldquo;Light self-regulation&rdquo; works on an opt-in model, and it is against the interest of some actors to opt in.</p>
<p>So, if we are in the middle of this societal shift from software as a commodity to human futures as a commodity, where do we go from here? Do we choose chaos or community?</p>
<hr>
<p><em>At time of publication, I am still wrestling with these questions. As are a lot of people! To get a wider picture of what is on my mind in 2020, <a href="https://jwfblog.wpenginepowered.com/tag/2020-foss-conferences/">read my event reports</a> from my pre-coronavirus 2020 travels.</em></p>
<p><em>Photo by <a href="https://unsplash.com/@shanerounce?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Shane Rounce</a> on <a href="https://unsplash.com/s/photos/together">Unsplash</a>.</em></p>]]></description></item><item><title>TeleIRC v2.0.0: March 2020 progress update</title><link>https://jwheel.org/blog/2020/03/teleirc-v2-0-0-march-2020-progress-update/</link><pubDate>Thu, 19 Mar 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/03/teleirc-v2-0-0-march-2020-progress-update/</guid><description><![CDATA[<p>Since September 2019, the <a href="https://ritlug.com/">RITlug</a> TeleIRC team is hard at work on the <a href="https://github.com/RITlug/teleirc/milestone/8">v2.0.0 release</a> of TeleIRC. This blog post is a short update on what is coming in TeleIRC v2.0.0, our progress so far, and when to expect the next major release.</p>

<h2 id="whats-coming-in-teleirc-v200">What&rsquo;s coming in TeleIRC v2.0.0?&nbsp;<a class="hanchor" href="#whats-coming-in-teleirc-v200" aria-label="Anchor link for: What&rsquo;s coming in TeleIRC v2.0.0?">🔗</a></h2>
<p>TeleIRC v2.0.0 is a complete rewrite of TeleIRC. The team is migrating the code base <a href="https://github.com/RITlug/teleirc/issues/163">from NodeJS to Go</a>. In September 2019, the team began scoping the requirements and how to approach this large task. TeleIRC v2.0.0 does not add new features, but aims to have feature parity with the v1.x.x version of TeleIRC.</p>
<p>You might be asking, why bother with a total rewrite? What does this actually accomplish for the project? To answer this question, some historical context is needed!</p>

<h3 id="teleirc-v100-was-an-experiment">TeleIRC v1.0.0 was an experiment.&nbsp;<a class="hanchor" href="#teleirc-v100-was-an-experiment" aria-label="Anchor link for: TeleIRC v1.0.0 was an experiment.">🔗</a></h3>
<p><a href="https://github.com/RITlug/teleirc/releases/tag/v1.0.0">TeleIRC v1.0.0</a> was originally created and released in September 2016 by RIT alum <a href="https://github.com/repkam09">Mark Repka</a>. Mark created TeleIRC as a cool project for the RIT Linux Users Group (RITlug) when he was a student and vice president of RITlug. The project was written in hackathon spirit: to prove that something that was not yet common wasn&rsquo;t that hard to do.</p>
<p>Fast forward to today: TeleIRC ends up being pretty popular! As do chat bridges (Matterbridge, Matrix/Riot, etc.) as a whole. The <a href="https://docs.fedoraproject.org/en-US/project/">Fedora Project</a> is one of our largest users, with a dedicated <a href="https://docs.fedoraproject.org/en-US/teleirc-sig/">Special Interest Group</a> to manage the bots. The <a href="https://www.libreoffice.org/about-us/who-are-we/">LibreOffice community</a> is another one of our biggest users. Several international communities also adopted TeleIRC to make their chat rooms more accessible to a new generation of open source fans. Some example users are Linux and BSD user groups and hackerspaces in Argentina, Albania, and across Asia. You can see the <a href="https://docs.teleirc.com/en/latest/about/who-uses-teleirc/">full list of TeleIRC users</a> for yourself.</p>
<p>TeleIRC has grown in a way we never thought it would. Which is awesome! But the project was not originally designed to grow or scale the way it has. Additionally, by being at a university, contributors come and go as students graduate and move on to industry. We also have to think about how to maintain TeleIRC beyond the typical student life-cycle common in the academic world.</p>

<h3 id="lets-approach-teleirc-v200-as-engineers">Let&rsquo;s approach TeleIRC v2.0.0 as engineers.&nbsp;<a class="hanchor" href="#lets-approach-teleirc-v200-as-engineers" aria-label="Anchor link for: Let&rsquo;s approach TeleIRC v2.0.0 as engineers.">🔗</a></h3>
<p>A full rewrite allows us to fully leverage our knowledge as software engineers. In 2020, we know TeleIRC has a large user community and is an important part of how many open source communities communicate. We also know that breaking code into smaller, more modular pieces makes it easier to maintain and bring in new contributors. A full rewrite allows us to apply the lessons the team has learned over the years, in a way that incremental feature releases does not allow.</p>
<p>A few areas are in clear focus for the TeleIRC v2.0.0 rewrite:</p>
<ol>
<li>Write clean, simple code that is easy to understand</li>
<li>Test the code so it is easy to tell when things are working and when they aren&rsquo;t</li>
<li>Think about how to bring in new contributors to continue the project in the future</li>
</ol>
<p>But maybe you are also asking, why the jump to Go?</p>

<h3 id="a-go-rewrite-distinguishes-our-project">A Go rewrite distinguishes our project.&nbsp;<a class="hanchor" href="#a-go-rewrite-distinguishes-our-project" aria-label="Anchor link for: A Go rewrite distinguishes our project.">🔗</a></h3>
<p>When Mark and I launched the project in 2016, we didn&rsquo;t look around to see if anything else like RITlug&rsquo;s TeleIRC already existed. Turns out, there was <a href="https://github.com/FruitieX/teleirc">another NodeJS project</a> with the same name. Skip forward a few years, and there are also projects like <a href="https://github.com/42wim/matterbridge">Matterbridge</a>, <a href="https://github.com/sfan5/pytgbridge">pytgbridge</a>, and <a href="https://github.com/xypiie/teleirc">other implementations</a>. So, with all this commotion out there these days, why bother with our version of yet another chat bridge?</p>
<p>First, there is one design principle guiding our project from others like us: to do one thing and to do it well. Matterbridge is an excellent tool, and we even use it in conjunction with TeleIRC at our university. However, it is a complex tool with many features and options. For some people, this is a non-issue. But the TeleIRC team likes to think there is beauty in simplicity. Instead of offering a tool with the most features and configuration options, we aspire to do a single thing and to do it really well: connect Telegram groups and IRC channels together.</p>
<p>Second, although the FruitieX/teleirc project is archived today, it was once the biggest alternative to our project, also written in NodeJS. When we decided to launch TeleIRC v2.0.0 development, it had a larger community and user base then ours. So instead of offering a &ldquo;similar but different&rdquo; NodeJS project, we would be the first Telegram-IRC bridge written in Go. (Yes, Matterbridge is also written in Go, but see the above paragraph.)</p>
<p>Third… many of the existing maintainers of TeleIRC simply wanted an excuse to learn Go. It is an opportunity to expand our knowledge, experience, and skills, especially since we are students preparing to enter the industry.</p>

<h3 id="go-has-a-better-story-for-kubernetes--openshift">Go has a better story for Kubernetes / OpenShift.&nbsp;<a class="hanchor" href="#go-has-a-better-story-for-kubernetes--openshift" aria-label="Anchor link for: Go has a better story for Kubernetes / OpenShift.">🔗</a></h3>
<p>Finally, we are carefully considering the needs of one of our biggest downstream users: the <strong>Fedora Project</strong>. Several TeleIRC developers also support Fedora&rsquo;s TeleIRC SIG. Recently, the Fedora Infrastructure team launched an OpenShift instance for the Fedora community, called <a href="https://fedoraproject.org/wiki/Infrastructure/Communishift">Communishift</a>. All existing infrastructure in Fedora is gradually moving from virtual machines or OpenStack to OpenShift. To support this migration, we want to make a Go-based TeleIRC as easy to deploy in OpenShift as possible.</p>
<p>And fortunately, Go has a great story in the container orchestration world. Kubernetes and OpenShift are also Go-based projects. Go is the dominant language of this ecosystem. Its excellent performance in the niche of networking makes it a great choice for what TeleIRC does.</p>
<p>Now that you know more about the &ldquo;why is this happening,&rdquo; let&rsquo;s talk on where things are and what you can expect!</p>

<h2 id="teleirc-v200-progress-so-far">TeleIRC v2.0.0: Progress so far&nbsp;<a class="hanchor" href="#teleirc-v200-progress-so-far" aria-label="Anchor link for: TeleIRC v2.0.0: Progress so far">🔗</a></h2>
<p><strong>TeleIRC v2.0.0 is approximately 76% complete</strong>. All progress is tracked in the <a href="https://github.com/RITlug/teleirc/milestone/8">v2.0.0 milestone</a> on GitHub. <a href="https://github.com/RITlug/teleirc/milestone/8?closed=1">46 issues and pull requests were closed</a> since we began in September 2019. At publishing time, about 16 more issues and pull requests are left before we cut the v2.0.0 release.</p>
<p>Earlier in 2019, the maintainer team consisted of <a href="https://github.com/justwheel">Justin Wheeler</a>, <a href="https://github.com/Tjzabel">Tim Zabel</a>, <a href="https://github.com/xforever1313">Seth Hendrick</a>, <a href="https://github.com/thenaterhood">Nate Levesque</a>, <a href="https://github.com/nic-hartley">Nic Hartley</a>, and <a href="https://github.com/robbyoconnor">Robby O&rsquo;Connor</a>. Now joining the committer group, we are happy to welcome <strong><a href="https://github.com/Zedjones">Nicholas Jones</a>, <a href="https://github.com/10eMyrT">Kevin Assogba</a>, and <a href="https://github.com/kennedy">Kennedy Kong</a></strong> to the team. The current core group of maintainers for v2.0.0 are Justin, Tim, Nicholas, Kevin, and Kennedy.</p>

<h2 id="when-to-expect-teleirc-v200">When to expect TeleIRC v2.0.0&nbsp;<a class="hanchor" href="#when-to-expect-teleirc-v200" aria-label="Anchor link for: When to expect TeleIRC v2.0.0">🔗</a></h2>
<p>TeleIRC v2.0.0 is targeted for a release date of <strong>Friday, May 15th, 2020</strong>. At this point, we expect to have full feature parity with the v1.x.x version. We will recommend all existing users to upgrade to the latest release then.</p>
<p>In the meanwhile, the team is getting ready to <a href="https://github.com/RITlug/teleirc/issues/265">cut a v2.0.0-pre1 release</a>, our first &ldquo;pre-release&rdquo; of the Go port. We expect this release to be available on our <em><a href="https://github.com/RITlug/teleirc/releases">Releases</a></em> by Saturday, March 28th. Along with the v2.0.0-pre1 release, there are a few other details to note:</p>
<ol>
<li><a href="https://github.com/RITlug/teleirc/milestone/9?closed=1">TeleIRC v1.5.0</a>, the final version of the NodeJS version, will be released.</li>
<li>No future contributions will be accepted to the NodeJS version.</li>
<li><code>master</code> branch in git will reflect the latest Go version of TeleIRC.</li>
</ol>
<p>Once the v2.0.0-pre1 release is available, we want help to take it for a test drive! If TeleIRC is critical for you, we do not recommend using it yet, as it does not have full feature parity yet. But your early feedback can help improve the future of the next release while we are in active development.</p>

<h2 id="get-involved-with-teleirc">Get involved with TeleIRC!&nbsp;<a class="hanchor" href="#get-involved-with-teleirc" aria-label="Anchor link for: Get involved with TeleIRC!">🔗</a></h2>
<p>You can be a part of the upcoming TeleIRC v2.0.0 release. We&rsquo;d love your help! There is no formal commitment to contributing, although we ask for participation through a single sprint cycle.</p>
<p>Read our <a href="https://docs.teleirc.com/en/latest/dev/contributing/"><em>Contributing guidelines</em></a> on how to get started with TeleIRC. <a href="https://rit.bluejeans.com/564315135">Virtual developer meetings</a> take place every Saturday at 15:00 US EDT, so anyone can join and participate.</p>
<p>Come say hello in our developer chat rooms, either on <a href="https://webchat.freenode.net/#ritlug-teleirc">IRC</a> or in <a href="https://t.me/teleirc">Telegram</a>!</p>
<hr>
<p><em><a href="https://unsplash.com/photos/guiQYiRxkZY">Background photo</a> by <a href="https://unsplash.com/@epicantus">Daria Nepriakhina</a> on <a href="https://unsplash.com/">Unsplash</a>.</em></p>]]></description></item><item><title>CHAOSScon EU 2020: play by play</title><link>https://jwheel.org/blog/2020/02/chaosscon-eu-2020-play-by-play/</link><pubDate>Tue, 25 Feb 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/02/chaosscon-eu-2020-play-by-play/</guid><description><![CDATA[<p>CHAOSScon EU 2020 took place on Friday, 31 January, 2020 in Brussels, Belgium (the day after <a href="https://jwfblog.wpenginepowered.com/2020/02/sustain-oss-2020-quick-rewind/">Sustain OSS 2020</a>):</p>
<blockquote>
<p>Learn about open source project health metrics and tools used by open source projects, communities, and engineering teams to track and analyze their community work. This conference will provide a venue for discussing open source project health, CHAOSS updates, use cases, and hands-on workshops for developers, community managers, project managers, and anyone interested in measuring open source project health. We will also share insights from the CHAOSS working groups on Diversity and Inclusion, Evolution, Risk, Value, and Common Metrics.</p>
<p><a href="https://web.archive.org/web/20200219170041/https://chaoss.community/chaosscon-2020-eu/">chaoss.community/chaosscon-2020-eu/</a></p>
</blockquote>
<p>This is my second time attending CHAOSScon. I attended on behalf of <a href="https://fossrit.github.io/librecorps/">RIT LibreCorps</a> to represent our engagement with the <a href="https://www.unicef.org/innovation/">UNICEF Office of Innovation</a> and the <a href="https://unicefinnovationfund.org/">Innovation Fund</a>. For CHAOSScon EU 2020, I arrived hoping to learn more about effective metric collection strategies for open source communities and also get a deeper understanding of the technology behind <a href="https://chaoss.github.io/grimoirelab/">GrimoireLab</a>.</p>

<h2 id="sessions-play-by-play">Sessions: Play-by-play&nbsp;<a class="hanchor" href="#sessions-play-by-play" aria-label="Anchor link for: Sessions: Play-by-play">🔗</a></h2>
<p>Event reports take many forms. My form is an expanded version of my session notes along with key takeaways. Said another way, my event report is biased towards what is interesting to me. You can also skim the headings to find what interests you.</p>
<p>Also, I live-tweeted several sessions of CHAOSScon EU 2020, so some sections include tweet excerpts with pictures.</p>

<h3 id="ethics-what-you-know--what-you-dont-know">Ethics: What You Know &amp; What You Don&rsquo;t Know&nbsp;<a class="hanchor" href="#ethics-what-you-know--what-you-dont-know" aria-label="Anchor link for: Ethics: What You Know &amp; What You Don&rsquo;t Know">🔗</a></h3>
<blockquote>
<p>Metrics give us a lot of insight into what&rsquo;s going on with our projects &ndash; but only if we have enough context. The catch is that personal biases and pre-conceptions are extremely hard to filter for so no one person can see everything. Those gaps means that even the most well-meaning of us could end up doing more harm than good. In this talk, I&rsquo;ll share a few examples of the ways human brains make assumptions, some of our typical blind spots and how incomplete data can cause harm when deployed without any checks. For folks who collect, analyze and ultimately make mission critical decisions with metrics, the challenge is to constantly maintain a bit of healthy skepticism of what the numbers seem to be telling us.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-deb-nicholson">Deb Nicholson</a></p>
</blockquote>
<p>Deb&rsquo;s session was a great opener to a day focused on metrics and automated reporting. Her talk underscored unconscious bias and the ways poorly-designed metrics fail us. We should take an active approach to questioning our perspectives and take suggestions with grace.</p>
<p>During Q&amp;A, my colleague <a href="https://nolski.rocks/">Mike</a> asked for advice on pushing back on management when they ask for bad metrics. Deb suggested a clever strategy to respond in these situations:</p>
<ol>
<li>Provide the metric asked for</li>
<li>Provide a metric that contradicts what was asked for</li>
<li>Provide the metric they should have asked for</li>
</ol>

<h3 id="heat-light-and-love-telling-twitters-open-source-program-offices-story">Heat, Light, and Love: Telling Twitter&rsquo;s Open Source Program Office&rsquo;s Story&nbsp;<a class="hanchor" href="#heat-light-and-love-telling-twitters-open-source-program-offices-story" aria-label="Anchor link for: Heat, Light, and Love: Telling Twitter&rsquo;s Open Source Program Office&rsquo;s Story">🔗</a></h3>
<blockquote>
<p>Making it simple to trust, ship, and grow open source at Twitter demanded visibility into contribution trends that were not readily available. Twitter&rsquo;s open source program office and the Augur project collaborated with CHAOSS using student interns from Google&rsquo;s Summer of Code, Twitter&rsquo;s intern program and the University of Missouri. First, this talk describes Twitter&rsquo;s engaging interface design and its fit to the needs of Open Source stakeholders within Twitter, but also outside the open source program office. Second, we describe how an open API and data collection tool, Augur, evolved in close collaboration with Twitter.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-sean-goggins">Sean Goggins</a> &amp; <a href="https://chaoss.community/chaosscon-2020-eu/#user-content-remy-decausemaker">Remy DeCausemaker</a></p>
</blockquote>
<p>This one inspired me. It represented a dream of mine for many open source communities. Sean and Remy presented on three years of building an <a href="https://twitter.github.io/year-in-review">automated metrics visualization site</a> with <a href="https://chaoss.github.io/grimoirelab/">GrimoireLab</a> and <a href="https://github.com/chaoss/augur">Augur</a>. The visualization was powerful to communicate the value of open source engagement, participation, and investment to internal and external stakeholders.</p>
<p>The work was based on a philosophy familiar to me from working with Remy years ago in the Fedora Project community:</p>
<p>
<figure>
  <img src="/blog/2020/02/Screenshot_2020-02-21-Twitter-Open-Source.png" alt="From CHAOSScon EU 2020: Twitter&rsquo;s open source philosophy: heat, light, and love" loading="lazy">
  <figcaption>Twitter’s open source philosophy: heat, light, and love</figcaption>
</figure>
</p>
<p>If we are speaking in metaphors, one way to extend Remy&rsquo;s &ldquo;light&rdquo; metaphor is tying in a theatrical concept: <strong>stage lights and backstage lights</strong>.</p>
<p>Stage lights are the metrics and insights to present out to the world. They are front and center! These insights validate your mission to an external audience.</p>
<p>Backstage lights are for an internal audience. These metrics and insights illuminate the inside of an organization and build understanding of who and what is there. These are useful to validate work and efforts to funders, or perhaps your CFO.</p>
<p>This talk served as inspiration for something I hope to explore later in 2020.</p>

<h3 id="measuring-culture">Measuring Culture&nbsp;<a class="hanchor" href="#measuring-culture" aria-label="Anchor link for: Measuring Culture">🔗</a></h3>
<blockquote>
<p>They say you can’t be certain of anything unless it can be measured – so what about culture? We know it exists and can be passed on to others, so there must be a way to measure it. Using Apache Kibble we attempt to look for cultural indicators at the Apache Software Foundation, set a cultural benchmark then match real Apache projects against it. In theory we would expect a perfect match but as the results show, culture isn’t that simple.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-sharan-foga">Sharan Foga</a></p>
</blockquote>

<blockquote>
<p>Sharan introduced five factors to measure culture: <strong>bus factor, contributor experience, contributor retention, sentiment analysis, and key phrase extraction</strong>.</p>
</blockquote>
<p>Sharan defined culture as what we believe <em>and</em> what we do. So, she introduced five indicators for open source communities to measure culture. These came from learnings at the <a href="https://apache.org/foundation/">Apache Software Foundation</a>&rsquo;s <a href="https://kibble.apache.org/">Kibble project</a>:</p>
<ul>
<li><strong>Pony (&ldquo;bus&rdquo;) factor</strong>:
<ul>
<li>&ldquo;Committership&rdquo;</li>
<li>Authorship</li>
<li>Meta factor (# of organizations involved)</li>
</ul>
</li>
<li><strong>Contributor experience / contributor retention</strong>:
<ul>
<li>People who (re)joined</li>
<li>People who quit (why?)</li>
<li>People retained</li>
<li>Active contributors</li>
<li>Cross the above over time (e.g. # of months/years involved)</li>
</ul>
</li>
<li><strong>Mood, or sentiment analysis</strong>: Look for these moods…
<ul>
<li>Trust</li>
<li>Surprise</li>
<li>Neutrality</li>
<li>Sadness</li>
<li>Positivity</li>
<li>Anger</li>
<li>Negativity</li>
<li>Joy</li>
<li>Anticipation</li>
<li>Disgust</li>
<li>Fear</li>
</ul>
</li>
<li><strong>Key phrase analysis</strong>: Understand community jargon (e.g. if &ldquo;+1&rdquo; is used to indicate agreement)</li>
</ul>
<p>I had two key takeaways. First, <strong>nothing matches completely</strong>, so don&rsquo;t over-rely on one factor or metric. Second, <strong>identify <em>your</em> baseline indicators and iterate</strong> on those. For the above indicators, maybe these are specific to Apache projects. Maybe they apply to your projects too… or maybe they don&rsquo;t!</p>

<h3 id="meet-cauldron-your-saas-software-development-analytics-solution">Meet Cauldron! Your SaaS Software Development Analytics solution&nbsp;<a class="hanchor" href="#meet-cauldron-your-saas-software-development-analytics-solution" aria-label="Anchor link for: Meet Cauldron! Your SaaS Software Development Analytics solution">🔗</a></h3>
<blockquote>
<p>Cauldron is a brand-new free <strong>open source SaaS</strong> able to analyze software development community and processes. It relies on <a href="https://chaoss.github.io/grimoirelab">CHAOSS GrimoireLab</a> to collect and process data from different tools used in software development such as git, GitLab, GitHub and/or social platforms like Meetup, and <a href="https://opendistro.github.io/for-elasticsearch/"><strong>Open Distro for ElasticSearch</strong></a> to store and to display the project data. The talk shows how Cauldron can be easily put into action to analyze the software projects that matter to the attendees, and to get some CHAOSS metrics about them.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-jose-manrique-lopez-de-la-fuente">Jose Manrique Lopez de la Fuente</a></p>
</blockquote>

<p>I had no written notes other than &ldquo;wow!&rdquo;</p>
<p><em>Finally</em>, Bitergia built a hosted GrimoireLab service, called <a href="https://cauldron.io/"><strong>Cauldron</strong></a>. Cauldron takes the pain out of hosting your own GrimoireLab infrastructure. It is in early alpha and does not support all the data sources available in GrimoireLab yet, but it is promising.</p>
<p>In the <a href="https://fossrit.github.io/about/">FOSS@MAGIC community</a>, we want GrimoireLab to understand our open source community at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a>, home of the <a href="https://www.rit.edu/study/free-and-open-source-software-and-free-culture-minor">first academic minor</a> in free/open source. But as I go deeper, I realize GrimoireLab is very complex. Since my contract with RIT ends in a month, I want to leave something sustainable for my successors. Cauldron seems like a valid option.</p>
<p>I have some homework to do!</p>

<h3 id="language-barriers-for-open-source-contributors">Language barriers for open source contributors&nbsp;<a class="hanchor" href="#language-barriers-for-open-source-contributors" aria-label="Anchor link for: Language barriers for open source contributors">🔗</a></h3>
<blockquote>
<p>While open source development is common across the world, projects from countries outside North America and Europe, such as China, have difficulties attracting international contributors. One major reason for this is language differences. The presentation provides an overview of the diversity of non-native English speakers in different open source ecosystems. Furthermore, we will provide results about whether or not those contributors face a language barrier when contributing to open source projects. The presentation concludes with a discussion on how we can create metrics to assess the spoken language diversity in open source communities and how to include those people in the community more easily.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-isabella-vieira-ferreira">Isabella Vieira Ferreira</a></p>
</blockquote>


<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">Fascinating work from <a href="https://twitter.com/isaferreira_57?ref_src=twsrc%5Etfw">@isaferreira_57</a> on language barrier in <a href="https://twitter.com/hashtag/opensource?src=hash&amp;ref_src=twsrc%5Etfw">#opensource</a>. <a href="https://twitter.com/hashtag/choasscon?src=hash&amp;ref_src=twsrc%5Etfw">#choasscon</a><br><br>Contributing + participating in a project operating in a language (technical too!) that&#39;s not one&#39;s first always require more effort– a useful reminder to be kind and empathetic 💖💖 <a href="https://t.co/3cJ6qWWSsH">https://t.co/3cJ6qWWSsH</a></p>&mdash; Emmy Tsang (@emmy_ft) <a href="https://twitter.com/emmy_ft/status/1223240475395678208?ref_src=twsrc%5Etfw">January 31, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Isabella&rsquo;s talk was insightful and challenged my unconscious bias. An interesting insight from two case studies was translators did not transition over time to software development contributions.</p>
<p>I believe a bias exists in open source projects with active localization communities. I have seen project leaders invest in localization efforts as one way to bring new people into a community. While it does bring new people in, there is a subtle implication that &ldquo;bringing new people in&rdquo; means bringing software contributions. That&rsquo;s not always the case. Instead, the value of translation work needs to be quantified beyond just software contributions.</p>
<p>This is especially true for supporting grassroots advocacy communities. Localization may not build your developer community, but it can support stronger local communities in regions where English is not the first language.</p>

<h3 id="metrics-are-more-than-the-sum-of-their-parts">Metrics are more than the sum of their parts&nbsp;<a class="hanchor" href="#metrics-are-more-than-the-sum-of-their-parts" aria-label="Anchor link for: Metrics are more than the sum of their parts">🔗</a></h3>
<blockquote>
<p>We are in a state of Community building that maps success to metrics like lines of code and GitHub stars. I would like us to explore where these metrics fall short on capturing the most significant value of a community, and how we can use other metrics to show the much larger impact Community organizations like Developer Relations (DevRel) can have on a business. This improved process begins with mapping value to business need, pairing it with a community need, and back to the business opportunities. There will be practical advice on how to pitch and position Community, whether you’re a Community Manager, Developer Advocate, or other Developer Relations professional.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-matt-broberg">Matt Broberg</a></p>
</blockquote>


<p>Matt&rsquo;s CHAOSScon EU 2020 session pitched strategy on communicating the value of developer relations to our organizations. He covered a lot of material and left me many thoughts to reflect on. I look forward to seeing the video recording of this talk to reflect further on integrating his ideas into my day-to-day. The themes of Matt&rsquo;s talk struck a chord with me for challenging advocacy work ahead for me in 2020.</p>

<h3 id="emerging-tech-open-source-scoring-system-etoss">Emerging Tech Open-Source Scoring System (ETOSS)&nbsp;<a class="hanchor" href="#emerging-tech-open-source-scoring-system-etoss" aria-label="Anchor link for: Emerging Tech Open-Source Scoring System (ETOSS)">🔗</a></h3>
<blockquote>
<p>This is a framework used by the UNICEF Innovation Fund, to evaluate and track the strategic position and growth potential of the early stage startups in its portfolio. The focus is on startups building open source frontier tech: Blockchain, Data Science, Artificial Intelligence and Extended Reality. It classifies the startups into four quadrants, based on two dimensions: the software developed (technology), and the financial sustainability of the project (business sustainability).</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-cecilia-chapiro">Cecilia Chapiro</a> &amp; <a href="https://chaoss.community/chaosscon-2020-eu/#user-content-justin-w-flory">Justin Wheeler</a></p>
</blockquote>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">.@jflory7: The UNICEF tech KPIs are quite similar to <a href="https://twitter.com/CHAOSSproj?ref_src=twsrc%5Etfw">@CHAOSSproj</a> metrics - there are also business sustainability metric to measure, placing organisations / tech projects on a sustainable and tech scale... <a href="https://twitter.com/hashtag/CHAOSScon?src=hash&amp;ref_src=twsrc%5Etfw">#CHAOSScon</a> <a href="https://t.co/e3M440FMS4">pic.twitter.com/e3M440FMS4</a></p>&mdash; yo yehudi stays away from humans! 🏳️‍🌈 (@yoyehudi) <a href="https://twitter.com/yoyehudi/status/1223246459602194433?ref_src=twsrc%5Etfw">January 31, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">Interested in getting involved? Contact details for @jflory7 and <a href="https://twitter.com/ceciliachapiro?ref_src=twsrc%5Etfw">@ceciliachapiro</a> here! <a href="https://twitter.com/hashtag/CHAOSScon?src=hash&amp;ref_src=twsrc%5Etfw">#CHAOSScon</a> <a href="https://t.co/jMsfiCK9Rg">pic.twitter.com/jMsfiCK9Rg</a></p>&mdash; yo yehudi stays away from humans! 🏳️‍🌈 (@yoyehudi) <a href="https://twitter.com/yoyehudi/status/1223246907163758599?ref_src=twsrc%5Etfw">January 31, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">@jflory7 thanks for the great talk, great to hear <a href="https://twitter.com/UNICEFinnovate?ref_src=twsrc%5Etfw">@UNICEFinnovate</a> is actively funding OSS for the greater-good! <a href="https://twitter.com/hashtag/CHAOSScon?src=hash&amp;ref_src=twsrc%5Etfw">#CHAOSScon</a> <a href="https://t.co/g81koSI4Ov">pic.twitter.com/g81koSI4Ov</a></p>&mdash; Farbod Saraf (@farbodsaraf) <a href="https://twitter.com/farbodsaraf/status/1223247589317009409?ref_src=twsrc%5Etfw">January 31, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/opensource?src=hash&amp;ref_src=twsrc%5Etfw">#opensource</a> rubric mentioned by @jflory7 at <a href="https://twitter.com/hashtag/CHAOSScon?src=hash&amp;ref_src=twsrc%5Etfw">#CHAOSScon</a> <a href="https://t.co/U2pIZsgrMz">https://t.co/U2pIZsgrMz</a><br><br>It helped me evaluate the last proposal we received at <a href="https://twitter.com/eLifeInnovation?ref_src=twsrc%5Etfw">@eLifeInnovation</a> 🙌🙌</p>&mdash; Emmy Tsang (@emmy_ft) <a href="https://twitter.com/emmy_ft/status/1223249000058540032?ref_src=twsrc%5Etfw">January 31, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Hey, it&rsquo;s me!</p>
<p>My colleague <strong><a href="https://twitter.com/ceciliachapiro">Cecilia Chapiro</a></strong> proposed a session for CHAOSScon EU 2020 on how the <a href="https://unicefinnovationfund.org/">UNICEF Innovation Fund</a> evaluates the health and success of funded open source projects. However, due to travel complications, she was unable to attend. I presented her slides and work on her behalf at CHAOSScon EU 2020.</p>
<p>Many people were excited, if not also surprised, to hear that UNICEF funds humanitarian open source. In Cecilia&rsquo;s evaluation framework, there are two key areas: <strong>business sustainability indicators</strong> and <strong>technology indicators</strong>. There were good questions about how UNICEF measures on business sustainability. I hope to further explore GrimoireLab/Cauldron to better automate how we measure sustainability with industry-standard tools from the open source ecosystem.</p>
<p>I also gave a shout-out to <a href="https://fossrit.github.io/librecorps/">RIT LibreCorps</a> and the <a href="https://opensource.com/article/19/12/humanitarian-startups-open-source">resources we maintain</a> to help UNICEF and the Innovation Fund cohorts build and support sustainable open source projects.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/t2Lyv6G_fvU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>


<h3 id="open-and-reproducible-research-with-community-driven-research-software-metrics">Open and Reproducible Research with Community-driven Research Software Metrics&nbsp;<a class="hanchor" href="#open-and-reproducible-research-with-community-driven-research-software-metrics" aria-label="Anchor link for: Open and Reproducible Research with Community-driven Research Software Metrics">🔗</a></h3>
<blockquote>
<p>What do artificial neural networks, images of the black hole, and SETI@home all have in common? They all trace their roots to research software. In this session, we hope to explore metrics and best practices for evaluating open research software. Research software engineers are evaluated largely based on the numbers of publications and citations. However, metrics based on the number of publications encourage re-creating ‘new’ things or re-implementations instead of reuse, and there are huge variations in existing practices to cite software, meaning software isn&rsquo;t always cited or citations aren’t always captured. Better metrics that reflect the health of research software is crucial to avoid gamification, incentivizing research software engineers to follow best software development practices by recognizing and rewarding their effort appropriately, and ultimately advancing open science and improving the reproducibility of research.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-yo-yehudi">Yo Yehudi</a></p>
</blockquote>

<p>Yo teamed up with <a href="https://twitter.com/emmy_ft">Emmy Tsang</a> and <a href="https://twitter.com/matkuzak">Mateusz Kuzak</a> to deliver this session. I appreciated the audience participation in the second half, which was a creative idea for a session later in the day. It helped revive the conference energy!</p>
<p>Yo and the team captured <a href="https://discourse.sustainoss.org/t/blog-post-that-mentions-sustain-summit-academic-session/286">excellent notes from their time across Brussels</a>, so look there for a deeper dive if this is interesting to you.</p>

<h3 id="diversity--inclusion-badging-program">Diversity &amp; Inclusion Badging Program&nbsp;<a class="hanchor" href="#diversity--inclusion-badging-program" aria-label="Anchor link for: Diversity &amp; Inclusion Badging Program">🔗</a></h3>
<blockquote>
<p>Within IT, open source software exhibits some of the worst D&amp;I. The open source survey run by GitHub states that only 3% of contributors to open source software are female (GitHub, 2017). While open source has made strides in some aspects of D&amp;I, such as event inclusivity (Irwin, 2017) and community engagement to support organizational diversity (Alexander, 2019), work remains. The proposed is aimed at contributing to this positive growth through the development of a D&amp;I badging system. In open source, badges are available for community leaders to publicly display, providing a way for projects to signal their attention to such things as community health and software security. We can draw from this badging work to improve D&amp;I in open source. In this talk, I will discuss complexities associated with D&amp;I metrics and propose a D&amp;I badging system that provides open source communities the ability to make diversity and inclusion within open source projects more transparent.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-matt-germonprez">Matt Germonprez</a></p>
</blockquote>

<p>First, I must pay my full respect and gratitude to Matt for digging into this topic. It is hard. It is tricky. Nobody I know of is working on this. So, my feedback comes from a place of love because this is an important topic to me too, and I appreciate Matt&rsquo;s work! <strong>Thank you Matt and the <a href="https://chaoss.community/diversity-and-inclusion/">CHAOSS D&amp;I Working Group</a></strong>.</p>

<h4 id="critique-is-a-badging-system-how-to-do-this"><em>Critique</em>: Is a badging system how to do this?&nbsp;<a class="hanchor" href="#critique-is-a-badging-system-how-to-do-this" aria-label="Anchor link for: Critique: Is a badging system how to do this?">🔗</a></h4>
<p>Matt presented a strategy to incentivize organizations and projects to follow best practices for diversity and inclusion (D&amp;I) through a badging system. Organizations embed a badge on their project website or README when following best practices. This provides an easy way for new contributors to understand if a project community is inclusive and values equality before contributing. Since best practices are defined not by a single organization, there is a way to measure if an organization is living up to their commitment to D&amp;I.</p>
<p>However, a badging system seems like a difficult way to practically measure an organization&rsquo;s commitment to D&amp;I. There is a risk for <strong>manipulating trust of the system</strong> at the expense of open source novices. Novices have the least context and direct experience to see through an unauthentic commitment. Also, <strong>ongoing compliance seems difficult to enforce over time</strong> with a badging system. Maybe initially an organization or project is &ldquo;checked off&rdquo; for D&amp;I best practices. But if project leadership or management changes, community culture can also shift. How do you account for change?</p>
<p>Instead of badges, perhaps a <strong>central, inter-organizational certification body</strong> makes more sense to achieve this goal. A certification body acts as a central authority for validating accountability. They also have an authority to assign (or revoke) public recognition of organizations and projects with authentic, ongoing commitments to diversity and inclusion.</p>
<p>There is potential here, but I don&rsquo;t think gamifying D&amp;I best practices with a badging system is the way. We need a long-term, <em><strong>human</strong></em>-centered process in evaluating D&amp;I. We need to build in human-centered evaluation as a &ldquo;feature&rdquo; to truly hold projects accountable to their commitments.</p>

<h4 id="addendum-events-and-inclusivity"><em>Addendum</em>: Events and inclusivity&nbsp;<a class="hanchor" href="#addendum-events-and-inclusivity" aria-label="Anchor link for: Addendum: Events and inclusivity">🔗</a></h4>
<p>There are a few things I&rsquo;m genuinely proud to have contributed to open source. Most of them aren&rsquo;t code. <strong>International candy swaps</strong> at conferences are one of those things.</p>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">Time for the international candy swap! There are so many things to love about <a href="https://twitter.com/hashtag/DevConf_CZ?src=hash&amp;ref_src=twsrc%5Etfw">#DevConf_CZ</a> but the geographic diversity of attendees might be my favorite part. Thank you for organizing, <a href="https://twitter.com/jonatoni?ref_src=twsrc%5Etfw">@jonatoni</a> &amp; @jflory7! <a href="https://t.co/rU1ETp5aTa">pic.twitter.com/rU1ETp5aTa</a></p>&mdash; Mary Thengvall (she/her); mary-grace.bsky.social (@mary_grace) <a href="https://twitter.com/mary_grace/status/1221075300584448000?ref_src=twsrc%5Etfw">January 25, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote>
<p>DevConf CZ 2020 candy swap, mentioned in a <a href="https://jwfblog.wpenginepowered.com/2020/02/devconf-cz-2020-play-by-play/">previous blog post</a></p>
</blockquote>
<p>Candy swaps are fun, informal events hosted during a conference. Attendees bring local candies, sweets, or snacks from their hometowns to the conference. For an hour or so, folks gather together to swap candies. Before sampling the sweets, everyone introduces themselves, where they are from, and anything special about what they brought with them. When everyone introduces themselves and their candies, the floor is open to sample from the collected assortment.</p>
<p>This is a fun and engaging way to get to know other attendees beyond the conference&rsquo;s context. Conferences collect people around a specific context: be it technology, metrics, design, engineering, or something else. But beyond that specific context, we are also people! We have families, we have friends, and we eat food. We have things we miss about home when we travel hundreds or even thousands of miles from home. Events like candy swaps help us connect to other people not just as conference attendees, but as people. You learn something new about each other, and if you&rsquo;re bold, you try something new too.</p>
<p>While it is not a metric in itself, it would be cool to see things like this included as practical examples of how to evaluate &ldquo;family friendliness&rdquo; or inclusivity at events.</p>

<h3 id="true-confessions-the-seven-deadly-sins-of-open-source-communities">True Confessions: The Seven Deadly Sins of Open Source Communities&nbsp;<a class="hanchor" href="#true-confessions-the-seven-deadly-sins-of-open-source-communities" aria-label="Anchor link for: True Confessions: The Seven Deadly Sins of Open Source Communities">🔗</a></h3>
<blockquote>
<p>This talk would take a humorous approach to explaining what really no one should do when managing and measuring open source community best practices, with the primary goal of instilling positive open source development practices to the audience. Such &ldquo;&ldquo;don&rsquo;ts&rdquo;&rdquo; include not documenting anything, establishing no clear paths to success, and not bothering to communicate.</p>
<p><a href="https://chaoss.community/chaosscon-2020-eu/#user-content-brian-proffitt">Brian Proffitt</a></p>
</blockquote>

<p>Brian explained what to avoid in building healthy open source communities. While I was already familiar with most of them, the most interesting &ldquo;sin&rdquo; for me was the last one: &ldquo;<em><strong>not seeing ourselves in others</strong></em>.&rdquo;</p>
<p>Brian offered mitigation strategies and metrics for the first six sins, but he acknowledged &ldquo;not seeing yourself in others&rdquo; is hard to mitigate and measure. However, I think things like candy swaps (explained above) are one possible way to do this. They connect us to others in an authentically human way, beyond the specific context of a conference we traveled for.</p>
<p>This is more challenging when interaction is virtual. Virtual systems often take away communication cues that make us human! I&rsquo;m still thinking on how to mitigate &ldquo;not seeing ourselves in others&rdquo; if interaction is mostly virtual. (For what it is worth, I don&rsquo;t think running open source project meetings in V.R. is the answer either.)</p>

<h2 id="beyond-chaosscon-eu-2020">Beyond CHAOSScon EU 2020&nbsp;<a class="hanchor" href="#beyond-chaosscon-eu-2020" aria-label="Anchor link for: Beyond CHAOSScon EU 2020">🔗</a></h2>
<p>An event report wouldn&rsquo;t be complete without mentioning the hallway track. It was great to see familiar faces and also meet new folks at CHAOSScon EU 2020.</p>
<p>I had a great lunch conversation with <a href="https://fsfe.org/about/albers/albers">Erik Albers</a> from Free Software Foundation Europe. It was cool to meet a facilitator of the <em><a href="https://publiccode.eu/">Public Money? Public Code!</a></em> campaign. Hopefully there are future opportunities to collaborate with <a href="https://fossrit.github.io/librecorps/">RIT LibreCorps</a> and <a href="https://fosdem.org/2020/schedule/event/ethical_ai/">AI freedoms</a>.</p>
<p>As always, face time with <a href="https://nolski.rocks/">Mike Nolan</a> and an OG mentor of mine, <a href="https://twitter.com/Remy_D">Remy DeCausemaker</a>, is appreciated and fulfilling. I wish I could get more of it around the year.</p>

<h2 id="thanks-folx">Thanks folx!&nbsp;<a class="hanchor" href="#thanks-folx" aria-label="Anchor link for: Thanks folx!">🔗</a></h2>
<p>To wrap up this CHAOSScon EU 2020 report, a few thank-yous are in order:</p>
<ul>
<li><strong><a href="https://twitter.com/ceciliachapiro">Cecilia Chapiro</a></strong>: Thanks for putting your work forward to the wider open source community!</li>
<li><strong><a href="https://www.rit.edu/computing/directory/sxjics-stephen-jacobs">Stephen Jacobs</a></strong>: For always being supportive for yet another trip abroad and helping me push my career forward in a number of ways (and footing the bill!)</li>
<li><strong><a href="https://nolski.rocks/">Mike Nolan</a></strong>: My co-conspirator, partner in FOSS, and comrade in arms</li>
</ul>
<p>I hope to continue conversations started here later into 2020 and keep talking with folks doing great things for the ecosystem. Until next time!</p>]]></description></item><item><title>DevConf CZ 2020: play by play</title><link>https://jwheel.org/blog/2020/02/devconf-cz-2020-play-by-play/</link><pubDate>Thu, 13 Feb 2020 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2020/02/devconf-cz-2020-play-by-play/</guid><description><![CDATA[<p>DevConf CZ 2020 took place from Friday, January 24th to Sunday January 27th in Brno, Czech Republic:</p>
<blockquote>
<p>DevConf.CZ 2020 is the 12th annual, free, Red Hat sponsored community conference for developers, admins, DevOps engineers, testers, documentation writers and other contributors to open source technologies. The conference includes topics on Linux, Middleware, Virtualization, Storage, Cloud and mobile. At DevConf.CZ, FLOSS communities sync, share, and hack on upstream projects together in the beautiful city of Brno, Czech Republic.</p>
<p><a href="https://www.devconf.info/cz/">devconf.info/cz/</a></p>
</blockquote>
<p>This is my third time attending DevConf CZ. I attended on behalf of <a href="https://fossrit.github.io/librecorps/">RIT LibreCorps</a> for professional development, before a week of work-related travel. DevConf CZ is also a great opportunity to meet friends and colleagues from across time zones. This year, I arrived hoping to better understand the future of Red Hat&rsquo;s technology, see how others are approaching complex problems in emerging technology and open source, and of course, to have yummy candy.</p>

<h2 id="sessions-play-by-play">Sessions: Play-by-play&nbsp;<a class="hanchor" href="#sessions-play-by-play" aria-label="Anchor link for: Sessions: Play-by-play">🔗</a></h2>
<p>Event reports take many forms. My form is an expanded version of my session notes along with key takeaways. Said another way, my event report is biased towards what is interesting to me. You can also skim the headings to find what interests you.</p>

<h3 id="diversity-and-inclusion-meet-up">Diversity and inclusion meet-up&nbsp;<a class="hanchor" href="#diversity-and-inclusion-meet-up" aria-label="Anchor link for: Diversity and inclusion meet-up">🔗</a></h3>
<blockquote>
<p>Would you like to meet other attendees who stand under the umbrella of &ldquo;Diversity and Inclusion&rdquo; or would you like a introduction into what Diversity and inclusion is and why it&rsquo;s a good thing? this is the session for you! All are welcome!</p>
<p><a href="https://devconfcz2020a.sched.com/event/YS2w/diversity-and-inclusion-meet-up">Imo Flood-Murphy</a></p>
</blockquote>
<p>This was a short, informal session ran by Imo to network and get a high-level introduction to diversity and inclusion in open source. Everyone in the room introduced themselves and gave a short explanation of who they were or what projects they represent. I appreciated the opportunity to meet others and better understand how Red Hat approaches diversity and inclusion.</p>
<p>A suggestion for next time is to allow more unstructured time for conversations. I think fun icebreakers get folks comfortable in a short amount of time to help make connections for the rest of the weekend.</p>

<h3 id="lessons-learned-from-testing-over-200000-lines-of-infrastructure-code">Lessons learned from testing over 200,000 lines of Infrastructure Code&nbsp;<a class="hanchor" href="#lessons-learned-from-testing-over-200000-lines-of-infrastructure-code" aria-label="Anchor link for: Lessons learned from testing over 200,000 lines of Infrastructure Code">🔗</a></h3>
<blockquote>
<p>If we are talking that infrastructure is code, then we should reuse practices from development for infrastructure, i.e.</p>
<p>1. S.O.L.I.D. for Ansible.</p>
<p>2.Pair devops-ing as part of XP practices.</p>
<p>3. Infrastructure Testing Pyramid: static/unit/integration/e2e tests.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YS73/lessons-learned-from-testing-over-200000-lines-of-infrastructure-code">Lev Goncharov</a></p>
</blockquote>
<p>Lev shared best practices on building sustainable, tested infrastructure. Infrastructure-as-Code (IaC) was important to how T-Systems scaled their infrastructure over time.</p>
<p>My key takeaways:</p>
<ol>
<li>Smaller components:
<ol>
<li>More sustainable</li>
<li>Easier to maintain</li>
<li>Easier to test</li>
</ol>
</li>
<li>Ansible Roles encourage best use practices for Ansible</li>
<li>Spreading knowledge is essential (if nobody understands it, the code is broken)</li>
<li>Code review creates accountability</li>
<li>Use static analysis tools (<a href="https://github.com/koalaman/shellcheck">Shellcheck</a>, <a href="https://www.pylint.org/">Pylint</a>, <a href="https://docs.ansible.com/ansible-lint/">Ansible Lint</a>)</li>
<li>Write unit tests (<a href="https://github.com/kward/shunit2">shUnit2</a>, <a href="https://rspec.info/">Rspec</a>, <a href="https://docs.pytest.org/en/latest/">Pytest</a>, <a href="https://testinfra.readthedocs.io/en/latest/">Testinfra</a>, <a href="https://molecule.readthedocs.io/en/latest/">Ansible Molecule</a>)</li>
</ol>

<h3 id="content-as-code-technical-writers-as-developers">Content as code, technical writers as developers&nbsp;<a class="hanchor" href="#content-as-code-technical-writers-as-developers" aria-label="Anchor link for: Content as code, technical writers as developers">🔗</a></h3>
<blockquote>
<p>In the open-source project <a href="http://kyma-project.io">Kyma</a>, documentation is an integral part of code delivery. We, the project&rsquo;s Information Developers, believe that using the same tools and methodology as your good old code developers, we can create comprehensive and accurate documentation. During our talk, we’ll share the whys and hows of our approach, showing you that the &ldquo;developer&rdquo; in &ldquo;Information Developer&rdquo; isn&rsquo;t there just because it sounds cool. We&rsquo;ll prove that creating documentation goes beyond linguistic shenanigans and salvaging whatever information there is from a trainwreck that is the developer&rsquo;s notes. Testing solutions, finding our way around Kubernetes, tweaking the website, engaging with the community are just a few examples of what keeps us busy every day.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YOvj/content-as-code-technical-writers-as-developers">Barbara Czyz, Tomasz Papiernik</a></p>
</blockquote>
<p>&ldquo;Information Developers&rdquo; is a cool phrase I learned. Barbara and Tomasz explained the value of technical writing and asserted documentation should live close to project code.</p>
<p>My key takeaways:</p>
<ol>
<li>Documenting processes like release notes enables others to join with less barriers</li>
<li><strong>Docs-as-Code (DaC)</strong>: Visibility of docs across development process is important
<ol>
<li>Placing docs with code encourages feedback loops and avoids silos</li>
</ol>
</li>
<li>Put links to docs in visible places (e.g. API messages, console messages)</li>
<li>Management aside: Emphasize/incentivize value of technical writing in your team</li>
<li>Remember bridges across skill areas is possible (technical writers can also be community-oriented people too)</li>
</ol>

<h3 id="uncharted-waters-documenting-emerging-technology">Uncharted waters: Documenting emerging technology&nbsp;<a class="hanchor" href="#uncharted-waters-documenting-emerging-technology" aria-label="Anchor link for: Uncharted waters: Documenting emerging technology">🔗</a></h3>
<blockquote>
<p>We can&rsquo;t help but feel the lure towards the hot new thing, especially when it comes to technology. Part of that lure is the breaking of ground, venturing into the unknown, and working on solutions to new problems. But a lot of the same things that make emerging technology fun and exciting to work on are exactly why it can be difficult to document. These challenges are quite different to those associated with mature products.</p>
<p>This talk is for anyone working on new products and emerging technology, or just interested in learning about fast-moving documentation. It is for the developer as much as it is for the writer, since it usually falls to them to write the early docs before a writer is added to the team.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YOyU/uncharted-waters-documenting-emerging-technology">Andrew Burden</a></p>
</blockquote>
<p>This was the talk I didn&rsquo;t know I <strong><em>needed</em></strong> to go to.</p>
<p>Lately I work with &ldquo;emerging technology,&rdquo; which means different things to different people. Regardless of what emerging tech means to you, Andrew focused on how to write documentation in a fast-paced environment with &ldquo;pre-release&rdquo; technology, where things change fast and suddenly. Normally this is an excuse to <em>not</em> write docs, but Andrew showed, <em>yes</em>! It is possible to write good docs, even when context changes fast and often.</p>

<h4 id="key-considerations-of-fast-paced-technical-writers">Key considerations of fast-paced technical writers&nbsp;<a class="hanchor" href="#key-considerations-of-fast-paced-technical-writers" aria-label="Anchor link for: Key considerations of fast-paced technical writers">🔗</a></h4>
<p>An even balance of these considerations helps get into a user&rsquo;s mindset:</p>
<ol>
<li>Scope / scale of release</li>
<li>Release schedule</li>
<li>Developer meetings / face-time</li>
<li>Exposure with <code>$TECHNOLOGY</code></li>
<li>Deployment experience with <code>$TECHNOLOGY</code></li>
</ol>

<h4 id="surviving-the-information-wall">Surviving the information wall&nbsp;<a class="hanchor" href="#surviving-the-information-wall" aria-label="Anchor link for: Surviving the information wall">🔗</a></h4>
<p>The &ldquo;information wall&rdquo; is the endless wall of information and things to know about a project. If information is endless, how do technical writers survive?</p>
<ul>
<li>Take notes: Be like a scientist</li>
<li>Take notes about your notes</li>
<li>Be organized with your notes</li>
</ul>
<p>Obviously Andrew was getting at the value of note-taking. Practicing note-taking skills is critical to keep up with the pace of change.</p>

<h4 id="multi-version-syndrome">&ldquo;Multi-Version Syndrome&rdquo;&nbsp;<a class="hanchor" href="#multi-version-syndrome" aria-label="Anchor link for: &ldquo;Multi-Version Syndrome&rdquo;">🔗</a></h4>
<p>Sometimes you are writing features for things that will not be released in the next release. There is a risk of losing information across multiple releases (e.g. publishing the wrong thing too soon, or the right thing too late). Clarify the release schedule as you go. A good safeguard against losing information is to rigorously understand release cycle cadence and priority.</p>
<p>If your product isn&rsquo;t mature yet, anticipate change instead of avoiding it.</p>

<h4 id="access-to-technology-is-critical">Access to technology is critical&nbsp;<a class="hanchor" href="#access-to-technology-is-critical" aria-label="Anchor link for: Access to technology is critical">🔗</a></h4>
<p>Technical writers are often User 0. To understand the technology, you need access. There are interactive and non-interactive ways of getting access. Interactive ways are preferred because they are always reproducible.</p>
<ul>
<li>Interactive
<ul>
<li>Deploy your own</li>
<li>Get someone else to deploy it for you (but lose install context)</li>
</ul>
</li>
<li>Non-interactive
<ul>
<li>Live demos</li>
<li>Demo videos</li>
<li><a href="https://asciinema.org/">Asciicinema</a> (CLI-oriented)</li>
</ul>
</li>
</ul>

<h4 id="other-takeaways">Other takeaways&nbsp;<a class="hanchor" href="#other-takeaways" aria-label="Anchor link for: Other takeaways">🔗</a></h4>
<ul>
<li>Screenshots have high maintainability cost; avoid if possible
<ul>
<li>Sometimes good stop-gaps until something more maintainable</li>
</ul>
</li>
<li>Where to begin? Make a table-of-contents for the Minimum Viable Product
<ul>
<li>Never underestimate outlines (<em>ahem, like how I wrote this blog post…</em>)</li>
</ul>
</li>
<li>Avoid documentation scramble near release day:
<ul>
<li>Make lists / check-lists</li>
<li>Take more notes</li>
<li>Pre-release checklist</li>
<li>Think now, and for the future</li>
</ul>
</li>
<li>Audit your docs: On-boarding new people is a powerful opportunity to test out your docs</li>
</ul>
<p>Thanks Andrew for a deep dive on this narrow but important topic.</p>

<h3 id="community-management-not-less-than-a-curry">Community management: not less than a curry&nbsp;<a class="hanchor" href="#community-management-not-less-than-a-curry" aria-label="Anchor link for: Community management: not less than a curry">🔗</a></h3>
<blockquote>
<p>Every volunteer joins an Open Source community for a reason. The reasons could range from technical gains to finding his/her/their passion. This community of diverse volunteers require a leader who can not just mentor them with their interests but also a manager managing the community activities in terms of community engagement and planning. A community manager is not less than a candle of light and in this presentation, I would be highlighting my learnings and experiences about starting a community from scratch around a project and maintaining a healthy community management practices.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YOpX/community-management-not-less-than-a-curry">Prathamesh Chavan</a></p>
</blockquote>
<p>Prathamesh designed an activity to help the audience understand community management. My key takeaway was community management is about connecting and understanding others as their authentic self.</p>
<p>In the activity, Prathamesh passed papers and pens to the audience. His session had three steps. Between each step, all attendees traded papers with another attendee:</p>
<ol>
<li>Define a project idea (why, how, what)</li>
<li>Identify challenges to idea (i.e. questions)</li>
<li>Answer challenges</li>
</ol>
<p>It reminded me of a similar workshop I attended before. This inspired me to work on <a href="https://github.com/justwheel/logbook/blob/master/notes/identity/question-burst-better-questioners.adoc">my own workshop idea</a> for a future conference.</p>

<h3 id="cognitive-biases-blind-spots-and-inclusion">Cognitive biases, blind spots, and inclusion&nbsp;<a class="hanchor" href="#cognitive-biases-blind-spots-and-inclusion" aria-label="Anchor link for: Cognitive biases, blind spots, and inclusion">🔗</a></h3>
<blockquote>
<p>Open source thrives on diversity. The last couple of years has seen huge strides in that aspect with codes of conduct and initiatives like the Contributor Covenant. While these advancements are crucial, they are not enough. In order to truly be inclusive, it’s not enough for the community members to be welcoming and unbiased, the communities’ processes and procedures really support inclusiveness by not only making marginalized members welcome, but allowing them to fully participate.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YOoH/cognitive-biases-blindspots-and-inclusion">Allon Mureinik</a></p>
</blockquote>
<p>Allon recognizes the importance of diversity, but asking for improved diversity is one side of the coin. A friend recently shared a powerful quote with me: &ldquo;If diversity is being invited to the party, inclusion is being invited <em>to</em> dance.&rdquo; Allon&rsquo;s message was to dig deeper on including marginalized people in our project communities.</p>
<p>He identified ways we accidentally make our communities less inclusive because of our cognitive/unconscious biases. Everyone has blind spots! Allon suggested ways to be more conscious about inclusion in open source:</p>
<ul>
<li><strong>Knowledge barriers</strong>
<ul>
<li>Procedural knowledge, not just technical
<ul>
<li>How do you submit code? File a bug? Make meaningful contributions? These need to be documented</li>
</ul>
</li>
<li>Documentation fosters inclusivity</li>
</ul>
</li>
<li><strong>Language barriers</strong>
<ul>
<li>Working proficiency in English not universal</li>
<li>Conversations have extra barriers (e.g. communicating complex ideas, understanding advanced words)</li>
</ul>
</li>
<li><strong>Time barriers</strong>
<ul>
<li>Work schedules no longer 9 to 5</li>
<li>Remember other folks in different time zones</li>
<li>On giving feedback: Fast is not a metric! Be smart
<ul>
<li>Merging PRs while others are away, or shortly after opening it</li>
<li>Allow time for input on non-trivial changes</li>
</ul>
</li>
</ul>
</li>
<li><strong>Transparency barriers</strong>
<ul>
<li>If not in the open, it didn&rsquo;t open</li>
<li>Negative example: Contributor makes a PR, reviewer has face-to-face conversation with contributor, reviewer merges PR without public context</li>
<li>Default to open: in many ways
<ul>
<li>If you can&rsquo;t be open, at least be transparent</li>
</ul>
</li>
</ul>
</li>
</ul>

<h3 id="diversity-in-open-source-show-me-the-data">Diversity in open source: show me the data!&nbsp;<a class="hanchor" href="#diversity-in-open-source-show-me-the-data" aria-label="Anchor link for: Diversity in open source: show me the data!">🔗</a></h3>
<blockquote>
<p>How diverse is your work environment? Diverse communities are more effective, they allow us to share the strengths of the individuals who make up the community. Have you ever looked around and noticed that most of our Open Source communities are predominantly male? Why do you think that is? We’ll use gender diversity as a case study and share some intriguing data points. Let us convince you why it’s so important.</p>
<p>Regardless of your gender, we would love for you to join us! We will also give you some tips on how you can make a difference.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YOtn/diversity-in-opensource-show-me-the-data">Serena Chechile Nichols, Denise Dumas</a></p>
</blockquote>
<p>Serena and Denise divided the talk into two sections: metrics and action. The way they presented, they brought the audience on the same page by visiting a variety of metrics and then transitioned to an empowering discussion about changing trends we see.</p>
<p>Next time, I hope to see expanded messaging by defining diversity beyond only women. Diversity was frequently tied to gender participation metrics in open source. While women are underrepresented, there are additional aspects of identity that can compound discrimination. Race, socioeconomic status, nationality, sexual orientation, and more also play a part in understanding challenges collectively faced in inclusion work.</p>

<h4 id="the-data">The data&nbsp;<a class="hanchor" href="#the-data" aria-label="Anchor link for: The data">🔗</a></h4>
<ul>
<li><strong>Gender differences by # of contributors</strong>:
<ul>
<li>GSoC 2018: 11.6% female-identifying contributors</li>
<li>OpenStack: 10.4% female-identifying contributors</li>
<li>Linux kernel: 9.9% female-identifying contributors</li>
</ul>
</li>
<li><strong>U.S. Dept. of Labor: 22.2% of technical roles filled by women</strong>
<ul>
<li>2014-2019: More women entering tech jobs at companies like Apple, Microsoft, Google, etc.</li>
</ul>
</li>
<li><strong>Years of experience by gender (&lt;9 years)</strong>:
<ul>
<li>66.2% female</li>
<li>52.9% non-binary/queer</li>
<li>50.1% male</li>
</ul>
</li>
<li><strong>GitHub user and developer survey</strong>:
<ul>
<li>95% male</li>
<li>3% female</li>
<li>1% non-binary</li>
</ul>
</li>
</ul>

<h4 id="lets-make-things-better">Let&rsquo;s make things better&nbsp;<a class="hanchor" href="#lets-make-things-better" aria-label="Anchor link for: Let&rsquo;s make things better">🔗</a></h4>
<p>Serena and Denise asserted diversity creates change. All changes come with challenges. Diversity can increase the friction in the process, but that is okay. They emphasized the need for multiple perspectives see past our initial biases (conveniently covered by Allon in the previous talk).</p>
<p>This transitioned to questions, comments, and thoughts from the audience. One interesting point was using the phrase, &ldquo;<a href="http://www.thagomizer.com/blog/2017/09/29/we-don-t-do-that-here.html">we don&rsquo;t do that here</a>&rdquo; to create and set norms. I gave a suggestion to look at projects you already participate in and see if there is a diversity and inclusion effort there already. If there is, see if there are ways to help and get involved. If not, consider starting one (or network with the <a href="https://discourse.opensourcediversity.org/">Open Source Diversity community</a>).</p>
<p>To wrap up, one recurring theme of Serena and Denise&rsquo;s talk is to make time to step back and evaluate the bigger picture. Questioning our biases is an important skill to practice. We need the space and time to recompute!</p>

<h3 id="candy-swap">Candy Swap&nbsp;<a class="hanchor" href="#candy-swap" aria-label="Anchor link for: Candy Swap">🔗</a></h3>
<blockquote>
<p>Do you have a unique sweet dessert or candy from your country or hometown? Do you love to try new and exciting foods from around the world? Spend an hour with fellows as we share stories and candies from the world with each other. Participants are invited to bring a unique confectionary or candy from their country or city to share with multiple other people. Before going around to try yummy things, all participants explain what item they bring and any story about its origins or where it is normally used. After sharing, everyone who brought something rotates around to try candies brought by others. After all participants have had a chance to sample, the rest of the community is invited to come and try anything remaining.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YS6U/candy-swap">Jona Azizaj, Justin Wheeler</a></p>
</blockquote>
<p>I <em>am</em> biased when I say this is one of my favorite parts of conferences I go to. Jona originally proposed the candy swap for DevConf CZ. After unexpectedly adding DevConf CZ to my travel list for 2020, we teamed up to share the sweet tradition from Fedora Flock to DevConf CZ! This is one of my favorite conference traditions because I get to know other attendees in a context outside of technology. And food is always an easy way to win me over.</p>
<p>Instead of listening to me, see what other people have to say about it:</p>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">Time for the international candy swap! There are so many things to love about <a href="https://twitter.com/hashtag/DevConf_CZ?src=hash&amp;ref_src=twsrc%5Etfw">#DevConf_CZ</a> but the geographic diversity of attendees might be my favorite part. Thank you for organizing, <a href="https://twitter.com/jonatoni?ref_src=twsrc%5Etfw">@jonatoni</a> &amp; @jflory7! <a href="https://t.co/rU1ETp5aTa">pic.twitter.com/rU1ETp5aTa</a></p>&mdash; Mary Thengvall (she/her); mary-grace.bsky.social (@mary_grace) <a href="https://twitter.com/mary_grace/status/1221075300584448000?ref_src=twsrc%5Etfw">January 25, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">The &quot;sweetest&quot; activity of <a href="https://twitter.com/hashtag/devconf_cz?src=hash&amp;ref_src=twsrc%5Etfw">#devconf_cz</a>: Today at 3 PM! 🍬🍫<br>Join Candy Swap, share candies, sweets and stories with others from around the world! <a href="https://t.co/OlfdmgGa3a">https://t.co/OlfdmgGa3a</a> <a href="https://t.co/Jnlqi3lsaq">pic.twitter.com/Jnlqi3lsaq</a></p>&mdash; DevConf.CZ (@devconf_cz) <a href="https://twitter.com/devconf_cz/status/1221026710969298947?ref_src=twsrc%5Etfw">January 25, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">Candy Swap time at <a href="https://twitter.com/hashtag/DevConf_CZ?src=hash&amp;ref_src=twsrc%5Etfw">#DevConf_CZ</a> 😍 <a href="https://t.co/zFCNnXZoJf">pic.twitter.com/zFCNnXZoJf</a></p>&mdash; Jona Azizaj👩🏻‍💻 🥑 @jonatoni@mastodon.social (@jonatoni) <a href="https://twitter.com/jonatoni/status/1221076375081062400?ref_src=twsrc%5Etfw">January 25, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">Well I experienced this for the <a href="https://twitter.com/hashtag/Flock?src=hash&amp;ref_src=twsrc%5Etfw">#Flock</a> 2019. It&#39;s a great opportunity to know the tastebuds of diverse people and enjoy! :D</p>&mdash; Aal (Alisha)🌻 (@withloveaal) <a href="https://twitter.com/withloveaal/status/1221366223381778434?ref_src=twsrc%5Etfw">January 26, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



<h3 id="from-outreachy-to-cancer-research">From Outreachy to cancer research&nbsp;<a class="hanchor" href="#from-outreachy-to-cancer-research" aria-label="Anchor link for: From Outreachy to cancer research">🔗</a></h3>
<blockquote>
<p>Outreachy program is helping women and other underrepresented people to make first steps in tech career. Picking a project, making first open source contributions, working on assigned project and learning from advanced people. But what happens when this three months are over? Can Outreachy be a lifechanging experience?</p>
<p>I will share my story of conversion from a chemist and full time parent into a Fedora Outreachy intern and how I found my place as a junior software developer in cancer genomics research at IRB Barcelona.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YOwh/from-outreachy-to-cancer-research">Lenka Segura</a></p>
</blockquote>
<p>This was a favorite of the weekend. &ldquo;Fedora Outreachy intern Lenka Segura on how Outreachy opened the door for her career to cancer research at IRB Barcelona!&rdquo;</p>
<p>I put effort into live-tweeting a Twitter thread. Get the full scoop there!</p>


<h3 id="connect-and-grow-your-community-through-meetups">Connect and grow your community through meetups&nbsp;<a class="hanchor" href="#connect-and-grow-your-community-through-meetups" aria-label="Anchor link for: Connect and grow your community through meetups">🔗</a></h3>
<blockquote>
<p>Open source communities collaborate in a multitude of ways - chatting on irc, submitting issues and contributing code on GitHub, discussing and sharing ideas on reddit and other social channels. Face to face gatherings add another dimension to that, where community members can learn and share their experiences. Local meetups provide a venue for people with similar interests to socialize and connect. However, organizing meetups is not trivial. How do we encourage and motivate the community to arrange meetups, and to keep the momentum? In my one year with the Ansible community, we have doubled the number of active meetups in Europe. These meetups are community driven, rather than Red Hat. Find out how we use metrics to analyze the situation and needs, and the steps we are taking to reach our goals of connecting with even more community members. Learn from our mistakes and challenges (100 RSVPs and only 20 turned up?), plus some tips to make your meetups more inclusive.</p>
<p><a href="https://devconfcz2020a.sched.com/event/YOr2/connect-and-grow-your-community-through-meetups">Carol Chen</a></p>
</blockquote>
<p>Carol explained the role of local meet-ups around the world in building communities around software projects. She emphasized that single metrics are not always useful, so it is more helpful to evaluate on multiple areas. The most useful takeaway for me was the 5 W&rsquo;s: why, who, what, when, where.</p>
<ul>
<li><strong>Why?</strong> Common curiosity (noticing something new in your community)</li>
<li><strong>Who?</strong> Connections and networking</li>
<li><strong>What?</strong> Concise, compelling content
<ul>
<li>Consider venue travel (how to make it worth their while?)</li>
<li>Provide alternatives to git-based submissions</li>
<li>All talks don&rsquo;t have to be technical! Diversify to appeal to wider audiences
<ul>
<li>Announcements for future events, work-life talks</li>
<li>We are more than just the technology we work with</li>
</ul>
</li>
</ul>
</li>
<li><strong>When?</strong> Consistency
<ul>
<li>Helps with venue scheduling</li>
<li>Helps retain attendee focus and build habits</li>
</ul>
</li>
</ul>
<p>Carol also gave suggestions for common points to think about for improved inclusion. All of these need active, not passive inclusion.</p>
<ul>
<li>Special needs / disabilities</li>
<li>Food allergies</li>
<li>Beverage preference (often alcohol/non-alcoholic)</li>
<li>Language</li>
<li>Traffic-light communication stickers</li>
<li>Photography lanyards</li>
<li>Gender pronouns</li>
</ul>

<h2 id="beyond-devconf-cz">Beyond DevConf CZ&nbsp;<a class="hanchor" href="#beyond-devconf-cz" aria-label="Anchor link for: Beyond DevConf CZ">🔗</a></h2>
<p>While the sessions are excellent and fulfilling (and sometimes frustrating when you miss a good talk with a full room), DevConf is also more than the sessions. It&rsquo;s also the people and conversations that happen in the &ldquo;hallway track.&rdquo; It was nice to see many old friends and make new ones.</p>
<p>I spent a few extra days before and after DevConf CZ in Brno. In some of that time, my colleague <a href="https://nolski.rocks/">Mike Nolan</a> and I rehearsed in-person for our FOSDEM talk the following weekend (to come in a future blog post). I also enjoyed coffee and waffles with Marie, Sumantro, and Misc!</p>
<p>
<figure>
  <img src="/blog/2020/02/IMG_20200124_212601881_HDR-scaled.jpg" alt="" loading="lazy">
</figure>
</p>
<p>
<figure>
  <img src="/blog/2020/02/IMG_20200124_212616232-rotated.jpg" alt="" loading="lazy">
</figure>
</p>
<p>
<figure>
  <img src="/blog/2020/02/IMG_20200129_105148632_HDR-scaled.jpg" alt="" loading="lazy">
</figure>
</p>
<p>
<figure>
  <img src="/blog/2020/02/IMG_20200129_124253219.jpg" alt="" loading="lazy">
</figure>
</p>
<blockquote>
<p>A few memories of a great week in Brno</p>
</blockquote>

<h2 id="until-next-time">Until next time!&nbsp;<a class="hanchor" href="#until-next-time" aria-label="Anchor link for: Until next time!">🔗</a></h2>
<p>I learn a lot and have a lot of fun at DevConf CZ. I&rsquo;m happy to return for a third year. Hats-off to the organizers and volunteers who pulled it all off. Each year, DevConf gradually makes improvements. It&rsquo;s nice to see inclusion prioritized across the board.</p>
<p>Thanks also goes out to <a href="https://fossrit.github.io/librecorps/">RIT LibreCorps</a> for sponsoring my trip. Extra thanks to Jona Azizaj!</p>]]></description></item><item><title>Why FOSS is still not on activist agendas</title><link>https://jwheel.org/blog/2019/12/why-foss-is-still-not-on-activist-agendas/</link><pubDate>Fri, 13 Dec 2019 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2019/12/why-foss-is-still-not-on-activist-agendas/</guid><description><![CDATA[<p>On December 13th, 2006, author <a href="https://en.wikipedia.org/wiki/Bruce_Byfield">Bruce Byfield</a> reflected on why he thought Free and Open Source Software (F.O.S.S.) was <a href="https://web.archive.org/web/20191130172436/https://www.linux.com/news/why-foss-isnt-activist-agendas/">not on activist agendas</a>. My interpretation of his views are that a knowledge barrier about technology makes FOSS less accessible, the insular nature of activism makes collaboration difficult, and FOSS activists reaching out to other activists with shared values should be encouraged. On December 13th, 2019, is FOSS on activist agendas? The answer is not black or white, but a gray somewhere in the middle. This is my response to Byfield&rsquo;s article, thirteen years later, on what he got right but also what he left out.</p>

<h2 id="where-byfield-was-accurate">Where Byfield was accurate&nbsp;<a class="hanchor" href="#where-byfield-was-accurate" aria-label="Anchor link for: Where Byfield was accurate">🔗</a></h2>
<p>While I don&rsquo;t agree with all of Byfield&rsquo;s sentiments, he identified some key challenges that still hold truth today: <strong>a predisposition to focus on differences and not similarities, an outreach approach centered on ethics and not software, and the importance of opportunities for intersectional interaction</strong>.</p>

<h3 id="predisposition-towards-difference">Predisposition towards difference&nbsp;<a class="hanchor" href="#predisposition-towards-difference" aria-label="Anchor link for: Predisposition towards difference">🔗</a></h3>
<p><em>First</em>, Byfield notes the differing age groups of the activist communities and the tendency for viewing others by their differences first, not their similarities. He seems to attribute the tendency to view others by differences first as a characteristic of older generations; however, this is not necessarily the full truth.</p>
<p>As a member of the young activist community, this explanation is too simplistic of the underlying cause. There is also a political motivation by established power to sow division among the population of a nation-state. It makes community organizing more difficult and presents diversity as an issue to &ldquo;solve&rdquo; instead of a source of greater unity and common strength.</p>
<p>This is exemplified by the social media algorithms of today that reward sensational content (judged on likes, views, clicks, or other user feedback) and share it widely across a huge platform. In 2006, it was difficult to imagine the relationship social media would have in the lives of an everyday person; today, a great deal of social power is granted to those who understand how to leverage social media, either for good (e.g. social activism) or harm (e.g. deceptively persuading large parts of a nation-state&rsquo;s population leading up to a national election).</p>
<p>The politics of division are within the fabric of our political systems; this is a challenge for modern-day activism and community organizing to overcome. In identifying this as a challenge, Byfield is correct that a differences-first approach makes it harder to share and spread the importance of FOSS in other activism circles, especially as technology becomes an increasingly relevant way of how we experience our lives and how our systems of law and justice are enforced.</p>

<h3 id="outreach-on-ethics-not-software">Outreach on ethics, not software&nbsp;<a class="hanchor" href="#outreach-on-ethics-not-software" aria-label="Anchor link for: Outreach on ethics, not software">🔗</a></h3>
<p><em>Second</em>, Byfield suggests an ethics-based approach to outreach is more effective than a software-based approach. This is also correctly noted, even if perhaps overemphasized. The jargon and language of the technology world is not accessible to the large majority of the global population. While some degree of technology literacy might be expected in some populations, much of the existing FOSS community is deeply rooted in technology. Sometimes this limited perspective is counterproductive.</p>
<p>This revisits the rebranding of &ldquo;Free Software&rdquo; as &ldquo;open source&rdquo; in 1997. For many subsets of the wider open source community in 2019, the default approach to open source software is merely a secondary thought for how to collaboratively work on technology. This is part of the outcome of the Open Source Initiative&rsquo;s gamble in 1997 by beginning to emphasize the business sensibility and practicality of open source, and de-emphasize the social roots of Free Software (or rather, try and position itself as some sort of translator between these two &ldquo;worlds&rdquo;, as if they cannot be spoken of together in the same room).</p>
<p>As such, those who work on open source software projects are not necessarily predisposed to assume the role of an activist. Truly if <em>Free</em> Software is to take root outside of technology, then those who see the ethical values of Free Software need to better organize and promote the values of FOSS externally. This will contribute to the diversity of Free Software activism by helping non-technology activists add FOSS as a tool to their existing work.</p>

<h3 id="intersectional-movement-building-is-the-future">Intersectional movement building is the future&nbsp;<a class="hanchor" href="#intersectional-movement-building-is-the-future" aria-label="Anchor link for: Intersectional movement building is the future">🔗</a></h3>
<p><em>Thirdly</em> and finally, and perhaps most importantly, Byfield suggests the importance of intersectional interactions between Free Software communities and other activist communities. This is a fundamental requirement for the growth of Free Software as a social movement. Those of us in Free Software see the world around us informed by a background informed by technology; this background is emphasized in a world that is generating new, advanced technology at an unprecedented rate. However, while software and technology are important parts of the world around us, they are not <em>the</em> world around us. They are one part of a greater picture of fighting for a common good and welfare for all people. There are others in similar niches who have a deep understanding of their problem space and how they want to approach a challenge.</p>
<blockquote>
<p>“One group may be working against child poverty, another for recycling, but the people in these organizations can almost be transferred from one to the next.”</p>
<p><a href="https://en.wikipedia.org/wiki/Peter_T._Brown">Peter T. Brown</a>, Free Software Foundation Executive Director (2006)</p>
</blockquote>
<p>Just like a healthy garden, cross-pollination of these niches is vital to help others understand how we can help each other in accomplishing our mutual goals (this also feeds into why the politics of division explained above is so pervasive and difficult). Bringing Free Software technologists to activist communities where there is not an overwhelming Free Software background (and vice versa) is vital to building an intersectional social movement that strengthens the social impact of Free Software, not just open source.</p>

<h2 id="where-byfield-didnt-go-far-enough">Where Byfield didn&rsquo;t go far enough&nbsp;<a class="hanchor" href="#where-byfield-didnt-go-far-enough" aria-label="Anchor link for: Where Byfield didn&rsquo;t go far enough">🔗</a></h2>
<p>Byfield made one assumption on how activists have &ldquo;their own share of insularity&rdquo; and that the presence of connections between two movements does not mean they could immediately connect their existing beliefs with new ones. Fioretti&rsquo;s challenge was in others understanding why they should listen to him; there was a lack of foundational knowledge of open source and technology that is normally assumed of someone who works as a software engineer.</p>
<p>Indeed, attention is a currency in the world of an activist. It is not enough for a FOSS advocate to expect others to listen to you on an appeal of technology. Part of the work in sharing is understanding who you are sharing with; if FOSS wants to take deeper roots in the activist community, it needs to understand the backgrounds of activist communities and be creative in how to appeal the mission of FOSS to the mission of their work. Where you can build in-roads together with others through common initiatives is the beginning of grassroots community organizing. So, while Byfield is right that there is an almost competitive nature of ideas in activism, it is not enough to write insularity off as a fixed aspect of nature. To not acknowledge this is to deny the influence of capitalist power structures in the humanitarian sector as they pertain to sustainable funding.</p>

<h2 id="what-are-todays-challenges">What are today&rsquo;s challenges?&nbsp;<a class="hanchor" href="#what-are-todays-challenges" aria-label="Anchor link for: What are today&rsquo;s challenges?">🔗</a></h2>
<p>Some of today&rsquo;s challenges are about inclusion and power.</p>

<h3 id="inclusion-builds-power">Inclusion builds power&nbsp;<a class="hanchor" href="#inclusion-builds-power" aria-label="Anchor link for: Inclusion builds power">🔗</a></h3>
<p>Diversity and inclusion (D&amp;I) are important but poorly understood; not only are D&amp;I about including people of different identities in technology, but also people with backgrounds outside of technology. FOSS stands to benefit by including more people who do not necessarily have a strong technology or engineering background. The goal is to inspire different perspectives to contribute in meaningful ways to build sustainable technology.</p>
<p>Instead of seeing diversity and inclusion initiatives as problematic or unneeded, D&amp;I groups in FOSS communities stand to be the most effective people at building community and influence.</p>

<h3 id="power-and-governance">Power and governance&nbsp;<a class="hanchor" href="#power-and-governance" aria-label="Anchor link for: Power and governance">🔗</a></h3>
<p>In the activist / humanitarian / non-profit world, there is a power struggle for sustainability as it pertains to funding. Funding models in non-profit work (usually sustained by grants, sponsors, and donors) encourage solutions that get funded, not necessarily solve problems the most effective way. Many organizations struggle with how to achieve sustainable funding without being so dependent on the expiration date of a grant&rsquo;s funding.</p>
<p>We need more representative governance models in open source communities that reflect the interests of the communities around them, not necessarily an individual, a company, or group of companies. Building governance models that empower people within a community to make decisions and reduce the corrosive influence of money from humanitarian work.</p>

<h2 id="where-do-we-go-from-here">Where do we go from here?&nbsp;<a class="hanchor" href="#where-do-we-go-from-here" aria-label="Anchor link for: Where do we go from here?">🔗</a></h2>
<p>This blog post is an active reflection of my own thoughts and perspectives of Free Software, activism, and humanitarian work. If you are interested in pushing this conversation further, find me in Brussels, Belgium for any of the following three conferences and let&rsquo;s chat further:</p>
<ul>
<li>30 January 2020: <a href="https://sustainoss.org/"><strong>Sustain Summit</strong></a></li>
<li>31 January 2020: <a href="https://chaoss.community/chaosscon-2020-eu/"><strong>CHAOSScon</strong></a></li>
<li>1-2 February 2020: <a href="https://fosdem.org/2020/"><strong>FOSDEM</strong></a></li>
</ul>
<p>If you want to discuss this further, you can also drop a line in our online discussion community, <em><a href="https://fossrit.community/">fossrit.community</a></em>.</p>
<hr>
<p><em>Photo by <a href="https://unsplash.com/@bazingraphy?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Walid Berrazeg</a> on <a href="https://unsplash.com/s/photos/black-lives-matter?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></em></p>]]></description></item><item><title>HPC workloads in containers: Comparison of container run-times</title><link>https://jwheel.org/blog/2019/08/hpc-workloads-containers/</link><pubDate>Tue, 20 Aug 2019 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2019/08/hpc-workloads-containers/</guid><description><![CDATA[<p>Recently, I worked on an interesting project to evaluate different container run-times for high-performance computing (HPC) clusters. HPC clusters are what we once knew as <a href="https://en.wikipedia.org/wiki/Supercomputer">supercomputers</a>. Today, instead of giant mainframes, they are hundreds, thousands, or tens of thousands of <a href="https://en.wikipedia.org/wiki/Massively_parallel">massively parallel</a> systems. Since performance is critical, virtualization with tools like virtual machines or Docker containers was not realistic. The overhead was too much compared to bare metal.</p>
<p>However, the times are a-changing! <a href="https://jwfblog.wpenginepowered.com/tag/containers/">Containers</a> are entering as real players in the HPC space. Previously, containers were brushed off as incompatible with most HPC workflows. Now, several open source projects are emerging with unique approaches to enabling containers for HPC workloads. This blog post evaluates four container run-times in an HPC context, as they stand in July 2019:</p>
<ul>
<li>Charliecloud</li>
<li>Shifter</li>
<li>Singularity</li>
<li>Podman</li>
</ul>

<h2 id="research-requirements">Research requirements&nbsp;<a class="hanchor" href="#research-requirements" aria-label="Anchor link for: Research requirements">🔗</a></h2>
<p>My research focused around a specific set of requirements. To receive a favorable review, a container run-time needed to meet three basic requirements:</p>
<ul>
<li>Support CentOS/RHEL 7.5+</li>
<li>Compatibility with <a href="https://en.wikipedia.org/wiki/Univa_Grid_Engine">Univa GridEngine</a></li>
<li>Support for very large numbers of users</li>
</ul>
<p>Obviously there are security concerns with the third requirement. This is one reason containers have not made a strong showing in the HPC world yet. With the Docker security model, root access is a requirement to build and run containers. In a production HPC environment where users do not trust other users, this is a hard blocker.</p>
<p>Other HPC environments may differ. If you are an HPC administrator and also considering containers in your environment, consider my requirements. My research was exclusively framed through these three requirements.</p>

<h2 id="charliecloud">Charliecloud&nbsp;<a class="hanchor" href="#charliecloud" aria-label="Anchor link for: Charliecloud">🔗</a></h2>
<p><a href="https://github.com/hpc/charliecloud">Charliecloud</a> is an open source project based on a user-defined software stack (UDSS). Like most container implementations, it uses Linux user namespaces to run unprivileged containers. It is designed to be as minimal and lightweight as possible, to the point of not adding features that could conflict with any specific use cases. This can be a positive or a negative, depending on how complex your environment is.</p>
<p>However, I abandoned my research on Charliecloud early on after reading this <a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0177459">PLOS research paper</a>:</p>
<blockquote>
<p>The software makes use of kernel namespaces that are not deemed stable by multiple prominent distributions of Linux (e.g. <strong>no versions of Red Hat Enterprise Linux or compatibles support it</strong>), and may not be included in these distributions for the foreseeable future.</p>
<p>The software is emphasized for its simplicity and being less than 500 lines of code, and this is an indication of having a lack of user-driven features. The containers are not truly portable because they must be extracted from Docker and configured by an external C executable before running, and even after this step, all file ownership and permissions are dependent on the user running the workflow.</p>
<p><a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0177459">Singularity: Scientific containers for mobility of compute</a>, May 2017 (Gregory M. Kurtzer, Vanessa Sochat, Michael W. Bauer)</p>
</blockquote>
<p>However, it is worth noting this paper was written in support of Singularity. It was also written by the Singularity project lead and others from the Singularity open source community. If you are conducting your own independent research, consider looking closer at Charliecloud, since at the time of writing it is still actively developed. The research paper was written in May 2017.</p>
<p><em>Edit</em>: This situation already changed and Charliecloud is probably worth a deeper look:</p>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">This is a fantastic write up, one thing to mention is that abandoning the CharlieCloud research based solely on lack of support of the user kernel namespace is no longer a blocker. For example, PodMan now uses the same technology and it was released in RHEL8.</p>&mdash; Apptainer (formerly Singularity) (@SingularityApp) <a href="https://twitter.com/SingularityApp/status/1163846727700344834?ref_src=twsrc%5Etfw">August 20, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



<h2 id="shifter">Shifter&nbsp;<a class="hanchor" href="#shifter" aria-label="Anchor link for: Shifter">🔗</a></h2>
<p><a href="https://github.com/NERSC/shifter">Shifter</a> is another container run-time implementation focused on HPC users. At time of writing, it is almost exclusively backed by the <a href="https://www.nersc.gov/">National Energy Research Scientific Computing Center</a> and <a href="https://www.cray.com/">Cray</a>. Most documented use cases use <a href="https://slurm.schedmd.com/">Slurm</a> for cluster management / job scheduling. Instead of a Docker/OCI format, it uses its own Shifter-specific format, but this is reverse-compatible with Docker container images. It requires hosting a registry service and a <strong>Shifter Image Gateway</strong>.</p>
<p>The Shifter Image Gateway is a REST interface implemented with <a href="https://palletsprojects.com/p/flask/">Python Flask</a>. It pulls images from the registry service and converts them to the Shifter image format. MPI integration is supported but its implementation is MPICH-centric.</p>
<p>The downside to Shifter is lack of community. There are not many other organizations other than NERSC and Cray that appear to support Shifter. <a href="https://github.com/NERSC/shifter/tree/master/doc">Documentation exists</a>, but at writing time (July 2019), the last significant contribution was April 2018. Some bugs and feature requests are triaged, but there is not much of a maintainer presence in these issues. Most follow-up discussion to new issues are from a handful of outside contributors without commit access.</p>
<p>Additionally, there are several signs of stagnant development, such as <a href="https://github.com/NERSC/shifter/pull/172">NERSC/shifter#172</a> to add better MPI integration. However, the PR stalled out since it was first opened in April 2017. Furthermore, there is a high bus factor: most contributions and pull requests come from the same two developers, indicating low engagement from the wider HPC community. Code is <a href="https://travis-ci.org/NERSC/shifter">regularly tested</a>, but integration tests <a href="https://travis-ci.org/NERSC/shifter/jobs/541868408#L880-L969">only exist for Slurm</a>. For more details, check out the <a href="https://github.com/NERSC/shifter/pulse">GitHub project pulse</a>.</p>
<p>A detail worth noting is Shifter was one of the first real container run-times for HPC. A former Shifter collaborator branched off from Shifter to start Singularity (and eventually, a for-profit company to support it, Sylabs). It invites room for personal biases when evaluating Shifter and Singularity, specifically if you are not a newcomer in the HPC community.</p>

<h2 id="singularity">Singularity&nbsp;<a class="hanchor" href="#singularity" aria-label="Anchor link for: Singularity">🔗</a></h2>
<p><a href="https://sylabs.io/singularity/">Singularity</a> is the third and last HPC-specific player in the container run-time world. The vendor is <a href="https://sylabs.io/about-us/mission">Sylabs Inc</a>. There are a few different factors that make Singularity interesting, and in my opinion, the most promising HPC container implementation.</p>

<h3 id="general-overview">General overview&nbsp;<a class="hanchor" href="#general-overview" aria-label="Anchor link for: General overview">🔗</a></h3>
<p>Singularity v3.x.x is written almost entirely in Golang. It supports two image formats: Docker/OCI and Singularity&rsquo;s native Single Image Format (SIF). As of September 2018, there are an estimated 25,000+ systems running Singularity, including users like <a href="https://www.tacc.utexas.edu/">TACC</a>, <a href="https://www.sdsc.edu/">San Diego Supercomputer Center</a>, and <a href="https://www.ornl.gov/">Oak Ridge National Laboratory</a>. Additionally, Univa <a href="http://www.univa.com/about/news/press_2018/07312018.php">announced a partnership</a> with Sylabs in July 2018 to bring Singularity workflows to Univa GridEngine.</p>
<p>Sylabs offers Singularity (free and open source) and SingularityPRO (paid and proprietary). The commercial version comes with a support contract and long-term support for some releases (among other things).</p>
<p>Admin/root access is not required to run Singularity containers and it requires no additional configuration to do this out of the box. Containers are run under the Linux user ID that launches them (see <em><a href="https://sylabs.io/guides/2.6/user-guide/introduction.html#security-and-privilege-escalation">Security and privilege escalation</a></em>).</p>
<p>At a quick glance, Sylabs developers appear to be <a href="https://github.com/sylabs">actively engaged</a> in the Kubernetes development community, particularly around Red Hat technology. They also seem to keep their promises: in early 2018, blog posts show ambitious feature promises for the then-upcoming v3.0.0 release at the end of the year. Near the end of 2018, the release was delivered on-time with most/all of the promised functionality.</p>

<h3 id="image-formats">Image formats&nbsp;<a class="hanchor" href="#image-formats" aria-label="Anchor link for: Image formats">🔗</a></h3>
<p>The Singularity Image Format (SIF) is a single-image format (i.e. no layers involved). This was a design decision specifically for HPC workloads. SIFs are treated like a binary executable by a Linux user. Additionally, it is possible to create SIFs using the <a href="https://sylabs.io/guides/3.3/user-guide/definition_files.html#sections">Definition File</a> spec.</p>
<p>However, Singularity is also compatible with Docker/OCI images and OCI is given <a href="https://github.com/sylabs/singularity/labels/OCI">active development focus</a> by upstream Singularity. Docker/OCI images are converted on-the-fly to a SIF. Docker/OCI images can be used locally or pulled from a remote registry like Docker Hub or <a href="https://www.openshift.com/products/quay">Quay</a>. To the user, if using a Docker/OCI image, the conversion is seamless and does not require additional configuration to use.</p>
<p>See <a href="https://web.archive.org/web/20190726223349/https://archive.sylabs.io/2018/03/sif-containing-your-containers/">this Sylabs blog post</a> for a deeper dive on how SIFs were designed.</p>

<h3 id="flexible-configuration">Flexible configuration&nbsp;<a class="hanchor" href="#flexible-configuration" aria-label="Anchor link for: Flexible configuration">🔗</a></h3>
<p>Singularity (uniquely?) offers advanced configuration options for HPC administrators. Some highlights are detailed here:</p>
<ul>
<li><strong>Controlling bind mounts</strong>:
<ul>
<li><code>mount dev = minimal</code>: Only binds <code>null</code>, <code>zero</code>, <code>random</code>, <code>urandom</code>, and <code>shm</code> into container</li>
<li><code>mount home = {yes,no}</code>, <code>mount tmp = {yes,no}</code>: Choose to enable or disable these bind mounts globally</li>
<li><code>bind path = &quot;&quot;</code>: Bind specific paths into containers by default</li>
<li><code>user bind control = {yes,no}</code>: Allow users to include their own bind mount paths or limit it to an admin-approved set of paths (above)</li>
</ul>
</li>
<li><strong>Controlling containers</strong>:
<ul>
<li><code>limit container paths =</code>: Possible to limit SIFs provided at a specific path and nowhere else</li>
</ul>
</li>
</ul>

<h3 id="hpc-community-engagement">HPC community engagement&nbsp;<a class="hanchor" href="#hpc-community-engagement" aria-label="Anchor link for: HPC community engagement">🔗</a></h3>
<p>These notes only apply to Singularity free, not the proprietary SingularityPRO product.</p>
<p>The signals from their open source community engagement are positive and strong. They appear authentic and genuine to an <a href="https://sylabs.io/resources/community">open source commitment</a> (i.e. not <a href="https://blogs.gnome.org/bolsh/2010/07/19/rotten-to-the-open-core/">open-core business model</a>). This is demonstrated in a few ways:</p>
<p>First, they have <a href="https://sylabs.io/guides/3.3/user-guide/">thorough user documentation</a>, intended for end-users in HPC environments using Singularity. They have a less thorough but still useful <a href="https://sylabs.io/guides/3.2/admin-guide/">admin documentation</a>.</p>
<p>Second, all issues are triaged quickly and get feedback from core developers or outside contributors at a consistent pace. Pull requests don&rsquo;t stagnate either: the oldest PR is less than six months old.</p>
<p>Third, code is regularly tested (<a href="https://travis-ci.org/sylabs/singularity">1</a>, <a href="https://circleci.com/gh/sylabs/singularity/tree/master">2</a>). The code generally follows <a href="https://goreportcard.com/report/github.com/sylabs/singularity">best practices</a> (i.e. it is not atrocious to work with).</p>
<p>Fourth, there are also a handful of active contributors (both developers and in the community support channels) who come from outside of Sylabs, which indicates more engagement by a wider audience of people.</p>
<p>For more statistics, check out the <a href="https://github.com/sylabs/singularity/pulse">GitHub project pulse</a>.</p>

<h2 id="podman">Podman&nbsp;<a class="hanchor" href="#podman" aria-label="Anchor link for: Podman">🔗</a></h2>
<p><em>tl;dr</em>: Podman is an underdog that shows promise, but likely needs another one or two years of time for most HPC use cases.</p>
<p><a href="https://podman.io/">Podman</a> is a container run-time developed by Red Hat. Its primary goal is to be a drop-in replacement for Docker. While it is not explicitly designed with HPC use cases in mind, it intends to be a lightweight &ldquo;wrapper&rdquo; to run containers without the overhead of the full Docker daemon. Furthermore, the Podman development team is recently looking into better support for HPC use cases.</p>
<p>Podman is currently lacking for a HPC use case for some of these reasons:</p>
<ol>
<li><a href="https://github.com/containers/libpod/issues/3478">Missing support for parallel filesystems</a> (e.g. <a href="https://en.wikipedia.org/wiki/IBM_Spectrum_Scale">IBM Spectrum Scale</a>)</li>
<li>Rootless Podman was designed to <a href="https://github.com/containers/libpod/blob/master/rootless.md">use kernel user namespaces</a> which is <a href="https://github.com/containers/libpod/issues/3561">not compatible with most parallel filesystems</a> (might change in a year or two)</li>
<li><a href="https://github.com/containers/libpod/issues/3587">Not yet possible to set system site policy defaults</a></li>
<li><a href="https://github.com/containers/libpod/issues/3589">Pulling Docker/OCI images requires multiple subuids/subgids</a> (might change in a year or two)</li>
</ol>
<p>Where Podman does shine is providing a way to run <strong><em>and</em></strong> build containers without root access or <code>setuid</code>.</p>
<p>The same challenges and problems required for Podman to run OCI containers in an HPC environment are the same problems faced by Singularity to build SIF images without root in the HPC environment: <strong>mapping UIDs to subuids/subgids on the compute nodes</strong>. More interestingly, <strong><a href="https://buildah.io/">Buildah</a></strong> offers a promising way to enable users to build container images as Docker/OCI images all without root. It is plausible to use Buildah as the container image delivery mechanism and swap out the container run-time implementation (Podman vs. Singularity) depending on specific needs and requirements.</p>

<h2 id="what-do-you-think">What do you think?&nbsp;<a class="hanchor" href="#what-do-you-think" aria-label="Anchor link for: What do you think?">🔗</a></h2>
<p>I hope other folks out there in the HPC world find this preliminary research useful. Do you agree or disagree with any parts of this write-up? Is something out-of-date? Drop a comment down below.</p>]]></description></item><item><title>TeleIRC v1.3.1 released with quality-of-life improvements</title><link>https://jwheel.org/blog/2019/04/teleirc-v1-3-1-released/</link><pubDate>Mon, 22 Apr 2019 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2019/04/teleirc-v1-3-1-released/</guid><description><![CDATA[<p>On April 20th, 2019, the TeleIRC development team <a href="https://github.com/RITlug/teleirc/releases/tag/v1.3.1">released TeleIRC v1.3.1</a>, the latest version after the final development sprint for the university semester. This release introduces minor improvements in order to accommodate heavier work-balance loads on our volunteer contributors. However, it gave us an opportunity to reduce technical debt. This blog post explains what&rsquo;s new in TeleIRC v1.3.1 and also offers a retrospective into how this last sprint went.</p>
<p>Special thanks and appreciation goes to <a href="https://www.linkedin.com/in/tim-zabel/">Tim Zabel</a> and <a href="https://github.com/nic-hartley">Nic Hartley</a> for their contributions this release cycle.</p>

<h2 id="whats-new">What&rsquo;s new&nbsp;<a class="hanchor" href="#whats-new" aria-label="Anchor link for: What&rsquo;s new">🔗</a></h2>
<ul>
<li>Bold usernames in message prefixes (<a href="https://github.com/RITlug/teleirc/pull/134">#134</a>, <a href="https://github.com/nic-hartley">Nic Hartley</a>)</li>
<li>Include filetype in IRC string when a document is uploaded on Telegram (<a href="https://github.com/RITlug/teleirc/pull/139">#139</a>, <a href="https://github.com/Tjzabel">Tim Zabel</a>)</li>
<li>Include zero-width space in username for join/part messages to group (<a href="https://github.com/RITlug/teleirc/pull/139">#139</a>, <a href="https://github.com/Tjzabel">Tim Zabel</a>)</li>
</ul>
<p>Additionally, contributor documentation improved. I added <a href="https://github.com/RITlug/teleirc/blob/master/.github/CONTRIBUTING.md">contributor guidelines</a> and instructions to set up a development environment. Also, our friends at <a href="https://ura.design/">Ura Design</a> designed our new project logo. Thanks to Ura, we have an awesome project logo and stickers in time for <a href="https://www.rit.edu/imagine/">Imagine RIT 2019</a> later this month!</p>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">They&#39;re here! Check out our new @uracreative logo and stickers for the <a href="https://twitter.com/hashtag/TeleIRC?src=hash&amp;ref_src=twsrc%5Etfw">#TeleIRC</a> project. Grab some stickers at the <a href="https://twitter.com/RITlug?ref_src=twsrc%5Etfw">@RITlug</a> <a href="https://twitter.com/Imagine_RIT?ref_src=twsrc%5Etfw">@Imagine_RIT</a> festival on April 27! <a href="https://t.co/KGjT4F0qdY">pic.twitter.com/KGjT4F0qdY</a></p>&mdash; RIT Linux Users Group (@RITlug) <a href="https://twitter.com/RITlug/status/1118641571291901952?ref_src=twsrc%5Etfw">April 17, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



<h2 id="teleirc-v131-sprint-retrospective">TeleIRC v1.3.1: sprint retrospective&nbsp;<a class="hanchor" href="#teleirc-v131-sprint-retrospective" aria-label="Anchor link for: TeleIRC v1.3.1: sprint retrospective">🔗</a></h2>
<p>Originally, we <a href="https://jwfblog.wpenginepowered.com/2019/03/teleirc-roadmap-v1-4/">planned to release v1.4</a> at the end of this sprint. For a number of reasons, this did not happen. We decided to reduce our scope and finish strong with a bugfix release instead of the originally-planned feature release. This retrospective summarizes &ldquo;lessons learned&rdquo; for future project sprints with a team of university students.</p>

<h3 id="extended-holidays-are-sprint-bookends">Extended holidays are sprint bookends&nbsp;<a class="hanchor" href="#extended-holidays-are-sprint-bookends" aria-label="Anchor link for: Extended holidays are sprint bookends">🔗</a></h3>
<p>In the last sprint, our university had a week-long break from classes. Most students use this time to visit family or travel outside of Rochester. Originally, we agreed to pause the sprint and resume when we returned. In retrospect, it didn&rsquo;t work out like that.</p>
<p>It was harder to start again when we returned from the break. Instead of an extended holiday acting as a pause in an ongoing sprint, extended holiday breaks should divide two separate sprints. The breaks from classes are personal time; working on projects is not possible for everyone. The interruption caused by a break impacts productivity of the team. Therefore, future sprint planning will take the <a href="https://www.rit.edu/calendar">university calendar</a> into consideration.</p>

<h3 id="adjustable-sprint-length-to-semester">Adjustable sprint length to semester&nbsp;<a class="hanchor" href="#adjustable-sprint-length-to-semester" aria-label="Anchor link for: Adjustable sprint length to semester">🔗</a></h3>
<p>Sprint lengths should have an adjustable length depending on what part of the academic semester the sprint is. For example, earlier this semester, we released v1.3 in a two-week sprint. For this v1.3.1 release, it was over a month. What happened? Should sprints have a variable length?</p>
<p>When working with an academic crowd, variable sprint lengths are worth considering. The first half of a semester typically has less assigned coursework. Final projects are not at play. Therefore, usually team members have more time to invest in the project at the start of a semester. Towards the end of the semester, coursework and class projects pile on and make it difficult to find bandwidth to work on side projects like TeleIRC.</p>
<p>The compromise is keeping our sprints short at the start of a semester and stretching them out as a semester goes on. This gives students more flexibility to work at a pace that encourages quality work but isn&rsquo;t overwhelming with other responsibilities of being a student. Going forward, we will try variable-length sprints in the Fall 2019 semester.</p>

<h2 id="get-involved-with-teleirc">Get involved with TeleIRC!&nbsp;<a class="hanchor" href="#get-involved-with-teleirc" aria-label="Anchor link for: Get involved with TeleIRC!">🔗</a></h2>
<p>More opportunities are coming to participate with TeleIRC! The team is happy for new people to join us. Opportunities are available for short-term and long-term contributions.</p>
<p>Come say hello in our developer chat rooms, either on <a href="https://webchat.freenode.net/?channels=ritlug-teleirc">IRC</a> or in <a href="https://t.me/teleirc">Telegram</a>! Watch for <a href="https://jwfblog.wpenginepowered.com/tag/teleirc/">TeleIRC development reports</a> on my blog for more announcements.</p>
<hr>
<p><em><a href="https://unsplash.com/photos/guiQYiRxkZY">Background photo</a> by <a href="https://unsplash.com/@epicantus">Daria Nepriakhina</a> on <a href="https://unsplash.com/">Unsplash</a>.</em></p>]]></description></item><item><title>Roadmap for TeleIRC v1.4</title><link>https://jwheel.org/blog/2019/03/teleirc-roadmap-v1-4/</link><pubDate>Sat, 23 Mar 2019 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2019/03/teleirc-roadmap-v1-4/</guid><description><![CDATA[<p>The <a href="https://ritlug.com/">RITlug</a> TeleIRC developer team celebrated the <a href="https://github.com/RITlug/teleirc/releases/tag/v1.3">v1.3 release</a> on March 3rd, 2019. Looking ahead, the team is mapping out next steps for quality-of-life improvements in v1.4.</p>

<h2 id="whats-coming-in-teleirc-v14">What&rsquo;s coming in TeleIRC v1.4&nbsp;<a class="hanchor" href="#whats-coming-in-teleirc-v14" aria-label="Anchor link for: What&rsquo;s coming in TeleIRC v1.4">🔗</a></h2>
<p><a href="https://github.com/RITlug/teleirc/milestone/6">TeleIRC v1.4</a> is the next feature release of TeleIRC. The targeted release date for v1.4 is by the end of April 2019 (i.e. the end of the academic semester for students involved with the project). Following v1.4, the project will likely enter brief hibernation until Fall 2019 when the <a href="https://www.rit.edu/">RIT</a> academic semester begins again.</p>
<p>At the developer meeting on March 23rd, we discussed the scope of this sprint and what we felt is realistic for project maintainers to work on:</p>

<h3 id="primary-goals">Primary goals&nbsp;<a class="hanchor" href="#primary-goals" aria-label="Anchor link for: Primary goals">🔗</a></h3>
<ul>
<li>Include limited characters from Telegram replies in relayed IRC message (<a href="https://github.com/RITlug/teleirc/issues/51">RITlug/teleirc#51</a>)</li>
<li>Create doc page on development environment (<a href="https://github.com/RITlug/teleirc/issues/77">RITlug/teleirc#77</a>)</li>
<li>QoL Improvements: show file-type of documents in IRC, insert ZWP character in join/leave messages (<a href="https://github.com/RITlug/teleirc/issues/130">RITlug/teleirc#130</a>)</li>
<li>Allow user to configure more variables for IRC server connection (e.g. port, SSL certs, etc.) (<a href="https://github.com/RITlug/teleirc/issues/113">RITlug/teleirc#113</a>)</li>
</ul>

<h3 id="secondary-goals">Secondary goals&nbsp;<a class="hanchor" href="#secondary-goals" aria-label="Anchor link for: Secondary goals">🔗</a></h3>
<ul>
<li>Add Telegram-side highlighting for IRC messages prefixed with username (<a href="https://github.com/RITlug/teleirc/issues/44">RITlug/teleirc#44</a>)</li>
<li>Bold usernames on Telegram and IRC (<a href="https://github.com/RITlug/teleirc/issues/19">RITlug/teleirc#19</a>)</li>
</ul>

<h2 id="recap-of-teleirc-v13-sprint">Recap of TeleIRC v1.3 sprint&nbsp;<a class="hanchor" href="#recap-of-teleirc-v13-sprint" aria-label="Anchor link for: Recap of TeleIRC v1.3 sprint">🔗</a></h2>
<p>The <a href="https://jwfblog.wpenginepowered.com/2019/02/teleirc-v1-3-next-release/">TeleIRC v1.3 release</a> follows the v1.2.2 release on December 8th, 2018. This release is a significant change in how project development is done. For the first time, a special interest group inside of <a href="https://ritlug.com/">RITlug</a> exists around the project. The team shifted to an agile-like development practice to fit inside of the <a href="https://www.rit.edu/">RIT</a> student academic schedule.</p>
<p>A special shout-out is earned by <a href="https://twitter.com/Tjzabel21">Tim Zabel</a> for his support and participation as a core contributor during the v1.3 sprint.</p>

<h2 id="get-involved-with-teleirc">Get involved with TeleIRC!&nbsp;<a class="hanchor" href="#get-involved-with-teleirc" aria-label="Anchor link for: Get involved with TeleIRC!">🔗</a></h2>
<p>More opportunities are coming to participate with TeleIRC! We would love to have more people get involved and participate in the project. There is no formal commitment to contributing, although we ask for participation through a single sprint cycle.</p>
<p>Soon, we will have better new contributor on-boarding docs. Our weekly developer meetings are now happening over public audio/video call each Saturday at 15:00 US EDT, so anyone can join and participate.</p>
<p>Come say hello in our developer chat rooms, either on <a href="https://webchat.freenode.net/?channels=ritlug-teleirc">IRC</a> or in <a href="https://t.me/teleirc">Telegram</a>!</p>
<hr>
<p><em><a href="https://unsplash.com/photos/guiQYiRxkZY">Background photo</a> by <a href="https://unsplash.com/@epicantus">Daria Nepriakhina</a> on <a href="https://unsplash.com/">Unsplash</a>.</em></p>]]></description></item><item><title>Why did Fedora Modularity fail in 2017? A brief reflection</title><link>https://jwheel.org/blog/2019/01/why-did-fedora-modularity-fail/</link><pubDate>Mon, 21 Jan 2019 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2019/01/why-did-fedora-modularity-fail/</guid><description><![CDATA[<p>For the ISTE-430 Information Requirements Modelling course at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a>, students are asked to analyze an example of a failed software project and write a short summary on why it failed. For the assignment, I evaluated the <a href="https://communityblog.fedoraproject.org/modularity-dead-long-live-modularity/">December 2017 announcement</a> on <a href="https://docs.pagure.org/modularity/">Fedora Modularity</a>. I thought it was an interesting example of a project that experienced initial difficulty but re-calibrated and succeeded in the end. And it is a project I am biased towards, as a Fedora user and sysadmin.</p>
<p>I thought sharing it on my blog might be interesting for others. Don&rsquo;t read into this too much – it was a quick analysis from a single primary source and a few secondary references.</p>

<h2 id="what-is-fedora-modularity">What is Fedora Modularity?&nbsp;<a class="hanchor" href="#what-is-fedora-modularity" aria-label="Anchor link for: What is Fedora Modularity?">🔗</a></h2>
<p>The <a href="https://getfedora.org/">Fedora Project</a> is a common Linux operating system which ships software in &ldquo;packages&rdquo;. <a href="https://fedoraproject.org/wiki/Objectives/Fedora_Modularization,_Requirements_Phase">Since June 2015</a>, project members built a pipeline to ship modular versions of existing packages, known as Modularity. <a href="https://docs.pagure.org/modularity/">Modularity</a> allows someone to use different versions of the same software (e.g. a programming library) on the same system without dependency conflicts.</p>
<p>In a way, Fedora Modularity shifts some responsibility from the Linux distribution (as a provider of known, good combinations of co-dependent packages) to the sysadmin (as a decision-maker to use different combinations of software versions in their environment). It&rsquo;s more flexible for a variety of deployment requirements. I see it as a net-positive win for the sysadmin experience since its final release.</p>

<h2 id="why-did-modularity-fail-in-2017">Why did Modularity fail in 2017?&nbsp;<a class="hanchor" href="#why-did-modularity-fail-in-2017" aria-label="Anchor link for: Why did Modularity fail in 2017?">🔗</a></h2>
<p>However, in <a href="https://communityblog.fedoraproject.org/modularity-dead-long-live-modularity/">this post-mortem</a> from December 2017, a project lead (Stephen Gallagher) announced Fedora Modularity efforts are scrapped for a total redesign. Even though it was not a final release, it was regarded as a failure because of the late status of the project, since its proposal in mid-2015. The post-mortem explained the amount of effort required by all software packagers was significant and also noted the wide amount of engagement necessary from different stakeholders. New requirements and steps to packaging guidelines were not understood by the community of software packagers, and project milestones were not met because of low participation in the packager community.</p>
<p>Their report reveals the amount of moving parts Fedora Modularity must account for. It demonstrated a flawed understanding of user and developer needs during initial feedback from the beta&rsquo;s implementation. In other words, the level of complexity for the project exceeded the amount of employee resources available to accomplish the project. The redesigned model (proposed in the reflection) pivoted by utilizing existing tools and infrastructure to support the new features, which required less changes for new software package updates. Thus, the packager community was better able to participate in providing new functionality in existing packages.</p>
<p>Additionally, sufficient documentation of new guidelines was unavailable to users, stemming from lack of engagement and feedback by existing users. This was later remedied with user experience testing through events like Test Days, which allowed any community member to try out new features and functionality with their own packaging workflows.</p>
<p>Since the project was finally implemented in late 2018, it was better received in the community than the failed launch in December 2017. Most success since the first failure came by simplifying project requirements (e.g. by leveraging how existing infrastructure was designed instead of reinventing the pipeline) and getting more user feedback on a regular basis (e.g. with community outreach events like Test Days and classroom sessions hosted live on YouTube).</p>
<hr>
<p>Gallagher, S. (2017). Modularity is Dead, Long Live Modularity! <em>Fedora Community Blog</em>. Retrieved from <a href="https://communityblog.fedoraproject.org/modularity-dead-long-live-modularity/">https://communityblog.fedoraproject.org/modularity-dead-long-live-modularity/</a></p>]]></description></item><item><title>Sphinx docs authors: Meet an opinionated quickstart</title><link>https://jwheel.org/blog/2018/12/meet-an-opinionated-quickstart-for-sphinx-docs-authors/</link><pubDate>Mon, 03 Dec 2018 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2018/12/meet-an-opinionated-quickstart-for-sphinx-docs-authors/</guid><description><![CDATA[<p>Do you write documentation with the Sphinx <a href="http://www.sphinx-doc.org/en/master/">tool chain</a>? Do you want to encourage more people to write Sphinx documentation in a distributed organization, but worry about maintaining compatible workflows? Introducing <a href="https://github.com/justwheel/sphinx-docs-opinionated-quickstart">sphinx-docs-opinionated-quickstart</a>, a template repository with an opinionated configuration of ReStructuredText documentation with Travis CI testing and <a href="https://readthedocs.org/">readthedocs.org</a> publishing.</p>
<p>I created this for the <a href="https://ritlug.com/">RIT Linux User&rsquo;s Group</a> (a.k.a. RITlug). RITlug welcomes student-led projects for members to work on together. RITlug executive board members want to better encourage students to share and join projects for collaboration with the community (in the spirit of FOSS). To do this, the executive board members will create and offer both a template website and template documentation tools to introduce students to project development process. Then, students are better able to sustain a more diverse community around their projects.</p>

<h2 id="start-writing-restructuredtext-already">&ldquo;Start writing ReStructuredText already!&rdquo;&nbsp;<a class="hanchor" href="#start-writing-restructuredtext-already" aria-label="Anchor link for: &ldquo;Start writing ReStructuredText already!&rdquo;">🔗</a></h2>
<p>The philosophy with this small project is: &ldquo;<em>Start writing ReStructuredText already!</em>&rdquo; I use Sphinx with ReadTheDocs as a deployment option across <a href="https://jwfblog.wpenginepowered.com/2018/02/unicef-internship/">different organizations</a>. I want a common base to later customize for a specific project&rsquo;s needs.</p>
<p>The whole point of this project is to save time kicking off a new project&rsquo;s recently-established documentation effort.</p>

<h2 id="sphinx-travis-ci-testing-configuration-included">Sphinx Travis CI testing configuration included&nbsp;<a class="hanchor" href="#sphinx-travis-ci-testing-configuration-included" aria-label="Anchor link for: Sphinx Travis CI testing configuration included">🔗</a></h2>
<p>Complex documentation tool chains need simple validation of successful builds. This avoids long periods where documentation may not build and the public docs are out of date. It also better engages core contributors to monitor and take care of their documentation.</p>
<p>A Travis CI <a href="https://github.com/justwheel/sphinx-docs-opinionated-quickstart/blob/master/.travis.yml">configuration</a> is included. Fork this repository and enable the repo on <a href="https://travis-ci.org/">travis-ci.org</a> to start running builds.</p>

<h2 id="add-a-star-on-github">Add a star on GitHub&nbsp;<a class="hanchor" href="#add-a-star-on-github" aria-label="Anchor link for: Add a star on GitHub">🔗</a></h2>
<p>Does this sound helpful? Check it out and <a href="https://github.com/justwheel/sphinx-docs-opinionated-quickstart/stargazers">add a star</a> at <a href="https://github.com/justwheel/sphinx-docs-opinionated-quickstart">justwheel/sphinx-docs-opinionated-quickstart</a>. The project is licensed under the <a href="https://github.com/justwheel/sphinx-docs-opinionated-quickstart/blob/master/LICENSE.txt">BSD 3-Clause License</a>; feel free to fork it and form your own opinions too.</p>
<hr>
<p><em><a href="https://unsplash.com/photos/q7TGPrFIlIg">Photo</a> by</em> <a href="https://unsplash.com/photos/q7TGPrFIlIg?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText"><em>Jānis Skribāns</em></a> <em>on</em> <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText"><em>Unsplash</em></a><em>.</em></p>]]></description></item><item><title>How to fix missing Python for Ansible in Fedora Vagrant</title><link>https://jwheel.org/blog/2018/09/how-to-fix-missing-python-for-ansible-in-fedora-vagrant/</link><pubDate>Tue, 18 Sep 2018 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2018/09/how-to-fix-missing-python-for-ansible-in-fedora-vagrant/</guid><description><![CDATA[<p>Recently, I started to use Vagrant to test Ansible playbooks on Fedora machines. I&rsquo;m using the Fedora 28 cloud base image. However, when I tried to provision my Vagrant box, I was warned the Python binary is missing.</p>
<pre tabindex="0"><code>$ vagrant provision
==&gt; default: Running provisioner: ansible...
    default: Running ansible-playbook...

PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
fatal: [default]: FAILED! =&gt; {&#34;changed&#34;: false, &#34;module_stderr&#34;: &#34;Shared connection to 192.168.121.3 closed.\r\n&#34;, &#34;module_stdout&#34;: &#34;\r\n/bin/sh: /usr/bin/python: No such file or directory\r\n&#34;, &#34;msg&#34;: &#34;MODULE FAILURE&#34;, &#34;rc&#34;: 127}
	to retry, use: --limit @playbook.retry
</code></pre>
<h2 id="problem-python-3-by-default">Problem: Python 3 by default&nbsp;<a class="hanchor" href="#problem-python-3-by-default" aria-label="Anchor link for: Problem: Python 3 by default">🔗</a></h2>
<p>This error appears because Fedora 28 does not provide a Python 2 binary by default. Only Python 3 is provided on the base cloud image. I verified this by SSHing into the Vagrant box.</p>
<pre tabindex="0"><code>[jflory@vagrant-host vagrant]$ vagrant ssh
[vagrant@localhost ~]$ dnf list installed | grep -i python
</code></pre><p>Annoyingly, I must install Python 2 manually in the box each time it fails to provision. Surely, there is an easier way? Fortunately, StackOverflow came <a href="https://stackoverflow.com/questions/47423488/vagrant-ansible-python3">to the rescue</a>.</p>

<h2 id="solution-ansibleextra_vars">Solution: <code>ansible.extra_vars</code>&nbsp;<a class="hanchor" href="#solution-ansibleextra_vars" aria-label="Anchor link for: Solution: ansible.extra_vars">🔗</a></h2>
<p>It&rsquo;s possible to tell Vagrant where the Python binary is located. You can pass the path to the <code>python3</code> binary manually in your Vagrantfile.</p>
<pre tabindex="0"><code># Provisioning configuration for Ansible.
config.vm.provision :ansible do |ansible|
  ansible.playbook = &#34;playbook.yml&#34;
  ansible.extra_vars = { ansible_python_interpreter:&#34;/usr/bin/python3&#34; }
end
</code></pre><p>Adding these changes to your Vagrantfile allows Ansible to successfully run on the Fedora Vagrant guest. Python is successfully located.</p>
<p>This is an annoying workaround, but it solves the issue and lets you successfully test and iterate changes on Fedora systems. Here&rsquo;s hoping the Fedora cloud image maintainers add a default binary for <code>/usr/bin/python</code> to point to <code>/usr/bin/python3</code> in the future.</p>]]></description></item><item><title>Keep your open source project organized with GitHub project boards</title><link>https://jwheel.org/blog/2018/06/github-project-boards/</link><pubDate>Tue, 05 Jun 2018 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2018/06/github-project-boards/</guid><description><![CDATA[<p><a href="https://opensource.com/article/18/4/keep-your-project-organized-git-repo"><em>This article was originally published on Opensource.com.</em></a></p>
<hr>
<p>Managing an open source project is challenging work. The challenge grows as a project grows. Eventually, a project may need to meet different requirements and span across multiple repositories. These problems aren&rsquo;t technical, but are important to solve to scale a technical project. <a href="https://en.wikipedia.org/wiki/Business_process_management">Business process management</a> methodologies such as agile and <a href="https://en.wikipedia.org/wiki/Kanban_%5C%28development%5C%29">kanban</a> bring a method to the madness. Developers and managers can make realistic decisions for estimating deadlines and team bandwidth with organized development focus.</p>
<p>At the <a href="http://unicefstories.org/about/">UNICEF Office of Innovation</a>, we use GitHub projects boards to organize development on the MagicBox project. <a href="http://unicefstories.org/magicbox/">MagicBox</a> is a full-stack application to serve and visualize data for decision-making in humanitarian crises and emergencies. The project spans multiple GitHub repositories and works with multiple developers. With GitHub project boards, we organized our work across multiple repositories to better understand development focus and team bandwidth.</p>
<p>Here&rsquo;s three tips from the UNICEF Office of Innovation on how to organize your open source GitHub projects with the built-in project boards on GitHub.</p>

<h2 id="bring-development-discussion-to-issues-and-pull-requests">Bring development discussion to issues and pull requests&nbsp;<a class="hanchor" href="#bring-development-discussion-to-issues-and-pull-requests" aria-label="Anchor link for: Bring development discussion to issues and pull requests">🔗</a></h2>
<p>Transparency is a critical part of an open source community. When mapping out new features or milestones for a project, the community needs to see and understand a decision or why a specific direction was chosen. Filing new GitHub issues for features and milestones is an easy way for someone to follow the project direction. GitHub issues and pull requests are the cards (or building blocks) of project boards. To be successful with GitHub project boards, you need to use issues and pull requests.</p>
<p>
<figure>
  <img src="/blog/2018/03/Screenshot-2018-3-13-Fix-similar-code-issue-in-react-app-src-components-WebglLayer-jsx-%c2%b7-Issue-62-%c2%b7-unicef-magicbox-maps.png" alt="GitHub issues for the front-end application of MagicBox, magicbox-maps" loading="lazy">
  <figcaption>GitHub issues for the front-end application of MagicBox, magicbox-maps</figcaption>
</figure>
</p>
<p>The UNICEF MagicBox team uses GitHub issues to track on-going development milestones and other tasks to revisit in the future. The team files new GitHub issues for development goals, feature requests, or bugs. These goals or features may come from external stakeholders or from the community. We use the issues as a place for discussion on those tasks too. This makes it easy to cross-reference in the future and visualize upcoming work on one of our projects.</p>
<p>Once you begin using GitHub issues and pull requests as a way of discussing and using your project, organizing with project boards becomes easier.</p>

<h2 id="set-up-kanban-style-project-boards">Set up kanban-style project boards&nbsp;<a class="hanchor" href="#set-up-kanban-style-project-boards" aria-label="Anchor link for: Set up kanban-style project boards">🔗</a></h2>
<p>GitHub issues and pull requests are the first step. After you begin using them, it may become harder to visualize what work is in progress and what work is yet to begin. <a href="https://help.github.com/articles/about-project-boards/">GitHub&rsquo;s project boards</a> give you a platform to visualize and organize cards into different columns.</p>
<p>There are two types of project boards available:</p>
<ul>
<li><strong>Repository</strong>: Boards for use in a single repository</li>
<li><strong>Organization</strong>: Boards for use in a GitHub organization across multiple repositories (but private to organization members)</li>
</ul>
<p>The choice you make depends on the structure and size of your projects. For the UNICEF MagicBox team, we use boards for development and documentation at the organization level, and then repository-specific boards for focused work (like our <a href="https://github.com/unicef/magicbox/projects/3?fullscreen=true">community management board</a>).</p>

<h4 id="creating-your-first-board">Creating your first board&nbsp;<a class="hanchor" href="#creating-your-first-board" aria-label="Anchor link for: Creating your first board">🔗</a></h4>
<p>Project boards are found on your GitHub organization page or on a specific repository. You will see the <em>Projects</em> tab in the same row as <em>Issues</em> and <em>Pull requests</em>. From the page, you&rsquo;ll see a green button to create a new project.</p>
<p>There, you can set a name and description for the project. You can also choose from templates to set up basic columns and sorting for your board. As of writing, the only options are for <a href="https://en.wikipedia.org/wiki/Kanban_%5C%28development%5C%29">kanban-style boards</a>.</p>
<p>
<figure>
  <img src="/blog/2018/03/Screenshot-2018-3-13-unicef-magicbox-maps.png" alt="Create a new GitHub project board for your open source project" loading="lazy">
  <figcaption>Create a new project board</figcaption>
</figure>
</p>
<p>After creating the project board, you can make adjustments to the project board as needed. You can create new columns, <a href="https://help.github.com/articles/about-automation-for-project-boards/">set up automation</a>, and add pre-existing GitHub issues and pull requests to the project board.</p>
<p>Now, you may notice new options for the metadata in each GitHub issue and pull request. Inside of an issue or PR, you can add it to a project board. If you use automation, it will automatically enter a column you configured.</p>

<h2 id="build-them-into-your-workflow">Build them into your workflow&nbsp;<a class="hanchor" href="#build-them-into-your-workflow" aria-label="Anchor link for: Build them into your workflow">🔗</a></h2>
<p>After you set up a project board and populate them with issues and pull requests, you need to integrate them into your workflow. Project boards are effective only when actively used. With the UNICEF MagicBox team, we use the project boards as a way to track our progress as a team, update external stakeholders on development, and estimate team bandwidth for reaching our milestones.</p>
<p>If you are an open source project and community, consider using the project boards for development-focused meetings. Additionally, it helps to remind yourself and other core contributors to spend five minutes each day updating progress as needed. If you&rsquo;re at a company using GitHub to do open source work, consider using project boards as a way to update other team members and encourage participation inside of GitHub issues and pull requests.</p>
<p>Once you begin using the project board, yours may look like this!</p>
<p>
<figure>
  <img src="/blog/2018/03/Screenshot-2018-3-13-Build-software-better-together.png" alt="Development progress board for all UNICEF MagicBox repositories in organization-wide GitHub project boards" loading="lazy">
  <figcaption>Development progress board for all UNICEF MagicBox repositories in an organization-wide GitHub project board</figcaption>
</figure>
</p>

<h2 id="open-alternatives">Open alternatives&nbsp;<a class="hanchor" href="#open-alternatives" aria-label="Anchor link for: Open alternatives">🔗</a></h2>
<p>GitHub project boards require your project to be on GitHub to take advantage of this functionality. However, there are other open source alternatives available. You can use tools to replicate the same workflow explained above. <a href="https://about.gitlab.com/features/issueboard/">GitLab Issue Boards</a> and <a href="https://taiga.io/">Taiga</a> are good alternatives that offer similar functionality.</p>

<h2 id="go-forth-and-organize">Go forth and organize!&nbsp;<a class="hanchor" href="#go-forth-and-organize" aria-label="Anchor link for: Go forth and organize!">🔗</a></h2>
<p>Now, you can bring a method to the madness for organizing your open source project. These three tips for using GitHub project boards encourage transparency in your open source project and make it easier to track progress and milestones in the open.</p>
<p>Do you use GitHub project boards for your open source project? Have any tips for success that aren&rsquo;t mentioned in the article? Leave a comment below to share how you make sense of your open source projects.</p>]]></description></item><item><title>Six months later: 3 things I learned from deleting Facebook</title><link>https://jwheel.org/blog/2018/04/3-things-learned-deleting-facebook/</link><pubDate>Mon, 02 Apr 2018 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2018/04/3-things-learned-deleting-facebook/</guid><description><![CDATA[<p>Six months ago, I deleted my Facebook and Instagram accounts. Beyond data privacy concerns, social media became a virtual band-aid applied to moments of weakness and sadness for me. I became more aware of the effects of social media on my mood and general outlook on the world, as I explained in my decision to <a href="https://medium.com/@jflory7/cut-the-plug-deleting-facebook-and-instagram-6cbe7c86d9c9">delete my accounts</a>. Six months now passed since I deleted my accounts. Along the way, I learned a few lessons on creating a healthy diet of media and pop culture consumption in a world of constant connectivity and endless memes.</p>
<p>This article explains changes I made to how I use social media and my smart phone since deleting my accounts. Hopefully you find these tips useful too.</p>
<p>
<figure>
  <img src="/blog/2018/04/Phone-Zombie.jpg" alt="The picture is dramatic, but when you spend more time thinking about how you use your phone, you realize how the world uses our phones and the Internet. Photo from SparkXL." loading="lazy">
  <figcaption>The picture is dramatic, but when you spend more time thinking about how you use your phone, you realize how the world uses our phones and the Internet. Image credit: SparkXL (<a href="https://www.sparkxl.com/2017/11/22/slaves-to-our-screens-3/" class="bare">https://www.sparkxl.com/2017/11/22/slaves-to-our-screens-3/</a>).</figcaption>
</figure>
</p>

<h2 id="1-social-media-on-the-go-is-a-no">1. Social media on-the-go is a no&nbsp;<a class="hanchor" href="#1-social-media-on-the-go-is-a-no" aria-label="Anchor link for: 1. Social media on-the-go is a no">🔗</a></h2>
<p>Today&rsquo;s world is full of <em>content</em>. Videos, friend requests, likes, comments, memes, notifications. We are always connected and online. An endless amount of media, pop culture, and content is at our fingertips. Sometimes this is helpful and convenient, like a quick message to a friend.</p>
<p>But a constant connection can be a drug too. When a convenient escape from a moment always exists in your pocket, this encourages a default reaction of opening the phone and scrolling through Facebook, Twitter, Instagram, Tumblr, or anything that offers a momentary distraction or something &ldquo;more interesting&rdquo; than whatever we are currently doing. Ultimately, we turn to social media on our smartphones for a short blast of dopamine.</p>

<h3 id="remove-the-convenience-factor">Remove the &ldquo;convenience&rdquo; factor&nbsp;<a class="hanchor" href="#remove-the-convenience-factor" aria-label="Anchor link for: Remove the &ldquo;convenience&rdquo; factor">🔗</a></h3>
<p>I took two steps to break this habit. First, acknowledge there are negative effects to social media usage. I also had to acknowledge that self-discipline and self-moderation is hard. I knew the negative effects of social media usage, but despite knowing this, it was still hard to avoid. So, the second step is to make the self-discipline easier: <strong>drop the apps from your phone</strong>.</p>
<p>When I deleted Facebook and eventually Instagram apps from my phone, they were no longer convenient. To check either one, I had to use a mobile web app or a computer. The mobile web apps were tedious and slow, and a computer was not always accessible. When the &ldquo;convenience&rdquo; factor was gone, it became easier to disconnect from the online world because it simply wasn&rsquo;t there.</p>
<p>Anything that required me to use social media could wait until it was convenient – usually when I am sitting down at a computer.</p>

<h3 id="soup-is-on-phone-is-off">Soup is on, phone is off&nbsp;<a class="hanchor" href="#soup-is-on-phone-is-off" aria-label="Anchor link for: Soup is on, phone is off">🔗</a></h3>
<p>I also took steps to increase my awareness of my usage. If having a dinner with friends or colleagues, I turned my phone off <em>before</em> entering the restaurant or meeting the group. My phone is off at the moments I turn to it at the dinner table. Powering it back on is inconvenient. Whatever distraction I was looking for would have to wait five minutes for the phone to boot.</p>
<p>&ldquo;<em>Right, it&rsquo;s off for a reason,</em>&rdquo; I would think as I slipped the phone back into my pocket.</p>

<h2 id="2-data-driven-observations-scientific-method-for-phones">2. Data-driven observations: Scientific method for phones&nbsp;<a class="hanchor" href="#2-data-driven-observations-scientific-method-for-phones" aria-label="Anchor link for: 2. Data-driven observations: Scientific method for phones">🔗</a></h2>
<p>After deleting my social media accounts, I wanted to understand: how often do I use my phone? What applications steal most of my attention? How much is too much? I decided to take a scientific approach and run an experiment.</p>
<p>I took a quantitative approach. I measured my usage by application to understand how much time I spent on different apps. I discovered QualityTime, an application that met my requirements. <a href="https://thenextweb.com/apps/2015/01/21/qualitytime-android-tracks-much-use-smartphone/">QualityTime</a> measures your total daily screen usage, how much time you use on all applications, and how many times you unlock your phone screen in a day. [<em>Note</em>: Since this article was written, both iOS and Android introduced phone usage metrics. No app is required for this anymore, but QualityTime still offers some useful features.]</p>
<p>After installing QualityTime, I used the default quota of two and a half hours a day as the suggested maximum daily use. I was surprised I came close to or past 2.5 hours every day. Now, I see what applications take most of my time. Then, I make adjustments based on the feedback I see. I started to think things like…</p>
<blockquote>
<p>Is this application worth the two hours a day? What am I getting out of this?</p>
</blockquote>
<blockquote>
<p>I need to cut back here, over four hours is way too much.</p>
</blockquote>
<p>Now, I had data to inform my lifestyle changes or alert me when I need to make changes. When I saw my daily usage by the numbers, I better understood my own habits. It increased my awareness into how I use my phone and manage my digital life.</p>
<p>And often, awareness is the best foundation for making incremental changes to our life and how we manage our time.</p>

<h2 id="3-what-you-see-is-what-you-find">3. What you see is what you find&nbsp;<a class="hanchor" href="#3-what-you-see-is-what-you-find" aria-label="Anchor link for: 3. What you see is what you find">🔗</a></h2>
<p>What and who do you allow in your social media life? Your &ldquo;feed&rdquo;, for any application or app, is powerful. Your feed is a daily dose of perspective and thoughts delivered directly to your phone. What you see in social media is what you will find reflected back in the world around you.</p>
<p>In my case, I still use Twitter as my primary social media presence. Since deleting my Facebook and Instagram, I also become more aware of my Twitter timeline. I never followed many people by some standards – 200 people or so. First, I realized I missed content from half of those people because of how Twitter tailors what I see. Second, I become more aware of the <em>actual content</em> from the people I followed.</p>

<h3 id="change-configuration-settings-of-your-mood">Change configuration settings of your mood&nbsp;<a class="hanchor" href="#change-configuration-settings-of-your-mood" aria-label="Anchor link for: Change configuration settings of your mood">🔗</a></h3>
<p>Since the November 2016 elections, social media is a &ldquo;black box&rdquo;. You will find many different things. You find empowering optimism, cynical pessimism, and some things between the two. As I found out, content on my timeline has a tangible, noticeable effect on my daily perspective. If someone I follow launches a cynical Twitter thread about a current event, that <strong>cynicism translates into my own view</strong>.</p>
<p>We cannot pretend that what we read on the screen has no effect on our real lives.</p>

<h3 id="less-is-more">Less is more&nbsp;<a class="hanchor" href="#less-is-more" aria-label="Anchor link for: Less is more">🔗</a></h3>
<p>So, I became a &ldquo;jerk&rdquo;. I reduced who I followed on Twitter to about 50 people. Then I sought out people from various aspects of my life—technology, spirituality, friends and family—that have a positive impact to my daily outlook. I put a filter on what I filter in my feed: I looked for inspirational wisdom, people who would motivate me to enlightened action. I turned away from anger, angst, hate, and cynicism.</p>
<p>However, there is a balance between naïvety and cynicism. We can choose optimism without being naïve. Additionally, we can choose skepticism without being cynical. The point is not to drown out reality or hide away in a bubble. We must be realistic about what is happening in the world and stay hopeful. To stay motivated. To <em>not</em> wake up, read through your feed, and curl back depressed into bed.</p>
<p>My best advice is be conscious of what you filter in your social media feed. Your feed is close and personal. It is powerful. And what you see digitally is often what you find reflected back at you in non-digital life.</p>

<h2 id="considering-facebook-deletion">Considering Facebook deletion?&nbsp;<a class="hanchor" href="#considering-facebook-deletion" aria-label="Anchor link for: Considering Facebook deletion?">🔗</a></h2>
<p>Considering to cut the plug? Check out this excellent <a href="https://www.recode.net/2017/10/22/16510702/how-to-quit-facebook-mark-zuckerberg-friends-photos-backup-data-delete-account">article from Recode</a> about how to responsibly cut down on Facebook. Even if full deletion is not what you are after, it suggests helpful tips on spending less time there.</p>

<h3 id="good-luck">Good luck!&nbsp;<a class="hanchor" href="#good-luck" aria-label="Anchor link for: Good luck!">🔗</a></h3>
<p>These lessons are fundamental to me and changed how I manage my digital life. Beyond the digital world, I notice the beginnings of change. I am more present in the things I do and spend my time with. Now, when I go out with friends and family, I appreciate the time spent with them without a hole burning in my pocket.</p>
<p>I hope these lessons are also helpful to you too. Additionally, if you have any other tips or comments for others, please drop a comment below!</p>
<hr>
<p><em>Featured image arranged by Justin Wheeler.</em></p>
<p><em><a href="https://thenounproject.com/term/friends/1314299/">friends</a> by <a href="https://thenounproject.com/ilariabernareggi">Ilaria</a></em>. <em><a href="https://thenounproject.com/ilariabernareggi">Bernareggi</a>, <a href="https://thenounproject.com/term/thumbs-up/538635/">thumbs up</a> by <a href="https://thenounproject.com/mikicon">mikicon</a>, <a href="https://thenounproject.com/term/facebook/63243/">Facebook</a> by <a href="https://thenounproject.com/morbidillusion">Saloni Sinha</a>, and <a href="https://thenounproject.com/term/more/663974/">more</a> by <a href="https://thenounproject.com/ilariabernareggi">Ilaria Bernareggi</a> from <a href="https://thenounproject.com/">the Noun Project</a>.</em></p>]]></description></item><item><title>How to automatically scale Kubernetes with Horizontal Pod Autoscaling</title><link>https://jwheel.org/blog/2018/03/kubernetes-horizontal-pod-autoscaling/</link><pubDate>Tue, 06 Mar 2018 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2018/03/kubernetes-horizontal-pod-autoscaling/</guid><description><![CDATA[<p>Scale is a critical part of how we develop applications in today&rsquo;s world of infrastructure. Now, containers and container orchestration like Docker and <a href="https://jwfblog.wpenginepowered.com/2017/07/introduction-kubernetes-fedora/">Kubernetes</a> make it easier to think about scale. One of the &ldquo;magical&rdquo; things about The potential of Kubernetes is fully realized when you have a sudden increase in load, your infrastructure scales up and grows to accommodate. How does this work? With <strong>Horizontal Pod Autoscaling</strong>, Kubernetes adds more pods when you have more load and drops them once things return to normal.</p>
<p>This article covers Horizontal Pod Autoscaling, what it is, and how to try it out with the <a href="https://kubernetes.io/docs/tutorials/stateless-application/guestbook/">Kubernetes guestbook</a> example. By the end of this article, you will…</p>
<ul>
<li>Understand what Horizontal Pod Autoscaling (HPA) is</li>
<li>Be able to create an HPA in Kubernetes</li>
<li>Create an HPA for the Guestbook and watch it work with <a href="https://github.com/JoeDog/siege">Siege</a></li>
</ul>

<h2 id="what-is-horizontal-pod-autoscaling">What is Horizontal Pod Autoscaling?&nbsp;<a class="hanchor" href="#what-is-horizontal-pod-autoscaling" aria-label="Anchor link for: What is Horizontal Pod Autoscaling?">🔗</a></h2>
<p><a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/">Horizontal Pod Autoscaling</a> (HPA) is a Kubernetes API resource to dynamically grow an environment. To help simplify things, consider it in three pieces:</p>
<ul>
<li><strong>Horizontal</strong>: Think of <em>horizontal</em> growth, i.e. adding more nodes to your available pool (unlike <em>vertical</em>, which would be adding more memory / CPU to your existing nodes)</li>
<li><strong>Pod</strong>: Your deployable units in Kubernetes</li>
<li><strong>Autoscaling</strong>: Automatically scaling out when needed</li>
</ul>
<p>
<figure>
  <img src="/blog/2017/08/k8s-hpa.png" alt="Diagram to explain how Horizontal Pod Autoscaler (HPA) works" loading="lazy">
  <figcaption>Diagram to explain how a Horizontal Pod Autoscaler (HPA) works. From Kubernetes documentation (<a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/" class="bare">https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/</a>).</figcaption>
</figure>
</p>
<p>To help visualize it, imagine you have a <a href="http://flask.pocoo.org/">Python Flask</a> web server that reads and writes data to a <a href="https://redis.io/">Redis</a> back-end. Your web server is the front-end for all of your incoming traffic. You run it with three pods in Kubernetes, with 512MB of RAM and 50m of CPU. Now, suddenly, BuzzFeed writes an article about your app, Kanye West name drops the app in a TV interview, and the president of the United States retweets a link to your site.</p>
<p>Oops.</p>
<p>Now you have a serious problem on your hands, where your tiny application is overloaded. Three pods aren&rsquo;t cutting it anymore. You get woken up at 3:00am to hastily adjust the number of replicas and rapidly scale your infrastructure. While you&rsquo;re wondering <em>how this happened</em>, you also wonder… isn&rsquo;t there an easier way? Could I have avoided this panicked, pre-dawn scaling crisis? Yes, there is! At least, somewhat.</p>

<h4 id="building-to-scale">Building to scale&nbsp;<a class="hanchor" href="#building-to-scale" aria-label="Anchor link for: Building to scale">🔗</a></h4>
<p>By creating and managing your deployments with HPAs, your application grows horizontally to handle the load. As the CPU utilization rises, HPAs trigger the addition of more pods to scale automatically. Previously, you could create a Horizontal Pod Autoscaler that would begin scaling when cumulative CPU utilization was at 60%. You could also tell it to scale to a maximum of 500 pods, but no less than three. So then, when the Apocalypse of Viral Sharing happened to your web application, it could have grown dynamically.</p>
<p>If you want to dive deeper in the technical implementation of HPAs, you can read more in the <a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/">Kubernetes documentation</a>.</p>

<h2 id="create-a-horizontal-pod-autoscaler">Create a Horizontal Pod Autoscaler&nbsp;<a class="hanchor" href="#create-a-horizontal-pod-autoscaler" aria-label="Anchor link for: Create a Horizontal Pod Autoscaler">🔗</a></h2>
<p>Now that you understand how a Horizontal Pod Autoscaler (HPA) is helpful, how do you create one? Like any other resource in Kubernetes, define HPAs in a YAML definition file. Here&rsquo;s a template for getting started.</p>
<pre tabindex="0"><code>---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: my-app-hpa
  namespace: my-app-space
  labels:
    app: my-app
    tier: frontend
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta1
    kind: Deployment
    name: my-app-deployment
  minReplicas: 2
  maxReplicas: 20
  targetCPUUtilizationPercentage: 60
</code></pre><p>This is the minimal spec you need to deploy an HPA. It&rsquo;s not that different from other Kubernetes resources you may have seen.</p>

<h4 id="explaining-the-configuration">Explaining the configuration&nbsp;<a class="hanchor" href="#explaining-the-configuration" aria-label="Anchor link for: Explaining the configuration">🔗</a></h4>
<p>Let&rsquo;s look at what some of the specific lines are.</p>
<ul>
<li><code>spec.scaleTargetRef.name</code>: Name of resource to scale (e.g. name of a deployment)</li>
<li><code>spec.minReplicas</code>: Minimum number of replicas running when CPU use is minimal</li>
<li><code>spec.maxReplicas</code>: Maximum number of replicas running when CPU use peaks</li>
<li><code>spec.targetCPUUtilizationPercentage</code>: Percentage threshold when HPA begins scaling out pods</li>
</ul>
<p>When starting out for the first time, tweak these values based on the amount of traffic you expect to receive or what your budget is. Load testing your application is one way to see the HPAs do their job.</p>

<h2 id="obliterating-the-guestbook">Obliterating the Guestbook&nbsp;<a class="hanchor" href="#obliterating-the-guestbook" aria-label="Anchor link for: Obliterating the Guestbook">🔗</a></h2>
<p>But this guide wouldn&rsquo;t be complete without a live demo to try. You can create one with an existing application and put it to the test. This section assumes you have a running <a href="https://kubernetes.io/docs/tutorials/stateless-application/guestbook/">Guestbook application</a> in your Kubernetes environment. As a quick refresh, the Guestbook is a three-part application:</p>
<ul>
<li>PHP web application for writing messages into a virtual guestbook</li>
<li>Primary Redis node for writing new messages from web page</li>
<li>Replica Redis nodes for reading the data into web page</li>
</ul>
<p>We&rsquo;ll add an HPA as a fourth part to scale the PHP web application for new traffic.</p>

<h4 id="create-the-hpa-for-guestbook">Create the HPA for Guestbook&nbsp;<a class="hanchor" href="#create-the-hpa-for-guestbook" aria-label="Anchor link for: Create the HPA for Guestbook">🔗</a></h4>
<p>Now, create a new HPA spec file for the guestbook.</p>
<pre tabindex="0"><code>---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: guestbook-frontend
  namespace: guestbook
  labels:
    app: guestbook
    env: production
    tier: frontend
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta1
    kind: Deployment
    name: guestbook-frontend
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 75
</code></pre><p>Put this into a file and create the HPA with <code>kubectl</code>.</p>
<pre tabindex="0"><code>$ kubectl apply --record -f guestbook-frontend-hpa.yaml
</code></pre><p>Now, the Horizontal Pod Autoscaler is operational and monitoring the CPU utilization of your deployment.</p>

<h4 id="load-test-with-siege">Load test with Siege&nbsp;<a class="hanchor" href="#load-test-with-siege" aria-label="Anchor link for: Load test with Siege">🔗</a></h4>
<p>To force the HPA into action, we&rsquo;ll use <a href="https://github.com/JoeDog/siege">Siege</a>, an HTTP load testing and benchmark utility. Siege is a multi-threaded load testing tool and has a few other capabilities included to make it a good option for putting some force onto a simple web app.</p>
<p>First, put various permutations of the URL in a plaintext file. By doing this, Siege can randomly scan the URLs in he text file and ping them in &ldquo;Internet mode&rdquo; by randomly selecting a URL from the list for each request. This could look like the following…</p>
<pre tabindex="0"><code>http://my-guestbook.example.com/
http://my-guestbook.example.com/index.html
http://my-guestbook.example.com/guestbook.php
http://my-guestbook.example.com/guestbook.php?cmd=get&amp;key=messages
</code></pre><p>Once this is done, you can fire up Siege to begin load testing. In this case, to get fast results, we&rsquo;ll use 255 concurrent users for five minutes, using Internet and benchmark modes.</p>
<pre tabindex="0"><code>$ siege --verbose --benchmark --internet --concurrent 255 --time 10M --file siege-urls.txt
</code></pre><p>You should see Siege begin to rapidly send requests to your Guestbook application. Now that the action is in progress, you can slowly observe your CPU utilization begin to climb. Watch it slowly change by using <code>watch</code>.</p>
<pre tabindex="0"><code>$ watch -d -n 2 -b -c kubectl get hpa -l app=guestbook
</code></pre><p>During the five minute load test, you should notice CPU usage rise and then new replicas will appear. Depending on what your original requests and limits are for the deployment, you will see different results. Next, try setting the deployment&rsquo;s requests / limits to lower values if nothing seems to happen while testing.</p>

<h2 id="learn-more-about-horizontal-pod-autoscaler">Learn more about Horizontal Pod Autoscaler&nbsp;<a class="hanchor" href="#learn-more-about-horizontal-pod-autoscaler" aria-label="Anchor link for: Learn more about Horizontal Pod Autoscaler">🔗</a></h2>
<p>Horizontal Pod Autoscalers are a stable resource in Kubernetes and are available for you to begin playing around with now. To learn more, read the <a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/">documentation</a> or see another example in the <a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/">official walkthrough</a>.</p>]]></description></item><item><title>2017 - My Year in Review</title><link>https://jwheel.org/blog/2018/02/2017-year-review/</link><pubDate>Mon, 12 Feb 2018 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2018/02/2017-year-review/</guid><description><![CDATA[<p>I can&rsquo;t remember how <a href="https://jwfblog.wpenginepowered.com/tag/year-in-review/">writing an annual reflection</a> became a tradition, but after writing them for the last two years, it is now a habit. Every time I look back on all that the last year brought into my life, it is surreal. Many things that happened, I could never have expected one or two years ago. And perhaps now, I see that life is defined by the unexpected moments: the things that surprise us, warm our hearts, sadden us, and remind us of our humanity. Thus, I present my year in review of 2017.</p>

<h2 id="home-is-a-suitcase">Home is a suitcase&nbsp;<a class="hanchor" href="#home-is-a-suitcase" aria-label="Anchor link for: Home is a suitcase">🔗</a></h2>
<p>I began the third year of my degree and moved for the fifth time in two years when I made it back to Rochester in August. This time, I found somewhere to ideally live longer than only a few months of the year. I moved into a house with a few other roommates with more space than I&rsquo;ve had before. For the first time in a while, it&rsquo;s somewhere I&rsquo;ve made to feel like home.</p>
<p>This move came months after I ended a semester of a study abroad program and lived in a city for an internship. Most of 2017 made my suitcase feel like a home, but it afforded many unique experiences.</p>

<h2 id="croatia-study-abroad">Croatia: Study abroad&nbsp;<a class="hanchor" href="#croatia-study-abroad" aria-label="Anchor link for: Croatia: Study abroad">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2018/02/photo_2017-01-17_19-09-11.jpg" alt="Saying goodbye to my mom and sister at the airport before flying to Dubrovnik" loading="lazy">
  <figcaption>Saying goodbye to my mom and sister at the airport before flying to Dubrovnik</figcaption>
</figure>
</p>
<p>From January to May 2017, I participated in a study abroad program with my university to <a href="https://en.wikipedia.org/wiki/Dubrovnik">Dubrovnik, Croatia</a>. RIT has full campuses in both Zagreb and Dubrovnik. This made planning the semester abroad easy, but also encouraged me to go somewhere I might not have gone otherwise.</p>
<p>My choice to study in Croatia was well-rewarded. On paper, I earned 12 credit hours, but I took away more than what I learned in class. My most important lessons came in the form of midnight bus rides to Albania, photograph exhibits capturing genocide in Sarajevo, and hugs from normally faraway friends in Czechia. My time abroad began a process in finding myself that has continued since my time in Europe.</p>

<h4 id="devconf-2017--fedora-diversity-fad">DevConf 2017 / Fedora Diversity FAD&nbsp;<a class="hanchor" href="#devconf-2017--fedora-diversity-fad" aria-label="Anchor link for: DevConf 2017 / Fedora Diversity FAD">🔗</a></h4>
<p>At the beginning of the year, the Fedora <a href="https://fedoraproject.org/wiki/Diversity">Diversity Team</a> held a &ldquo;Fedora Activity Day&rdquo; (FAD) event in Brno, Czechia. If you&rsquo;re outside of the Fedora community, think of a FAD as a focused, in-person team sprint. Together with our team in-person and remote, we mapped out our goals and plans for 2017 and set out to continue the work we began nearly three years ago.</p>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0031.jpg" alt="" loading="lazy">
  <figcaption>Diversity Team group photo at our team sprint in Brno, Czechia</figcaption>
</figure>
</p>
<p>In addition to the work we accomplished together, it was fulfilling for me to see my teammates that span three continents. I spent a week with not only my teammates but also my friends. The days we get to spend together are a privileged few in the year, and it was fulfilling and motivating for me to spend some of our time together in a way that wasn&rsquo;t Pagure tickets or IRC meetings.</p>
<p>Read more about our team sprint in this event report:</p>
<p><a href="https://communityblog.fedoraproject.org/fedora-diversity-fad-2017/">https://communityblog.fedoraproject.org/fedora-diversity-fad-2017/</a></p>

<h4 id="fosdem-2017">FOSDEM 2017&nbsp;<a class="hanchor" href="#fosdem-2017" aria-label="Anchor link for: FOSDEM 2017">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2018/02/MwwPknD.jpg" alt="I didn&rsquo;t get many photos during FOSDEM, but this one seemed fitting enough." loading="lazy">
  <figcaption>I didn’t get many photos during FOSDEM, but this one seemed fitting enough. Photo: Bhagyashree Padalkar</figcaption>
</figure>
</p>
<p>In February, I attended the Free and Open Source Software Developers European Meeting (FOSDEM) for the first time. <a href="https://fosdem.org">FOSDEM</a> is the largest open source conference in Europe, bringing together over 8,000 open source enthusiasts, contributors, and leaders from around the globe.</p>
<p>I had the privilege to attend as a member of the Fedora community, so my time was between the Fedora booth to meet the community and catching interesting talks. I also gave a talk of my own on the main track, <a href="https://archive.fosdem.org/2017/schedule/event/storytelling/"><em>What open source and J.K. Rowling have in common</em></a>! I gave this talk to a smaller audience at DevConf, but the FOSDEM audience was considerably larger.</p>
<p>In retrospect, my original talk topic is relevant but I have ideas on how I could have delivered my message more effectively. Regardless, it was a learning experience for me to present in front of a new audience. Public speaking opportunities filled my youth, both in theater and in presentations, but I had never presented to a technical audience before (let alone on a non-technical topic). The experience at FOSDEM helped build my understanding and I hope to return with a new topic someday in the future.</p>

<h4 id="exploring-the-balkans">Exploring the Balkans&nbsp;<a class="hanchor" href="#exploring-the-balkans" aria-label="Anchor link for: Exploring the Balkans">🔗</a></h4>
<p>Outside of open source and Fedora, my time in Croatia included a lot of time outside of Croatia. When many of my roommates went to explore the wonders of Western Europe, I lost my heart in the shadows of the Balkan mountains. My spring break was a solo trip split between Sarajevo, Bosnia and Hercegovina and Tirana, Albania.</p>

<h6 id="sarajevo">Sarajevo&nbsp;<a class="hanchor" href="#sarajevo" aria-label="Anchor link for: Sarajevo">🔗</a></h6>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0033.jpg" alt="Taken from the Yellow Bastion in Sarajevo. I could get lost in this view forever." loading="lazy">
  <figcaption>Taken from the Yellow Bastion (<a href="https://goo.gl/maps/s4SHYxVLkEC2" class="bare">https://goo.gl/maps/s4SHYxVLkEC2</a>) in Sarajevo. I could get lost in this view forever.</figcaption>
</figure>
</p>
<p>The three days I spent in Sarajevo were short but significant. I was truly alone on this visit and it was up to me to make the most of it. Originally, I was skeptical to go alone, but I knew that I would never have a better opportunity to go. My fascination with Sarajevo stemmed from a year of studying European history in high school, and knowing the cultural significance of Sarajevo as a meeting point of western and eastern cultures. In the end, I decided to go, and I was rewarded for it.</p>
<p>
<figure>
  <img src="/blog/2018/02/eLj9O40.jpg" alt="Inside of the Tunnel of Sarajevo. It was so quiet I could hear myself breathe. This was a grounding experience." loading="lazy">
  <figcaption>Inside of the Tunnel of Sarajevo. It was so quiet I could hear myself breathe. This was a grounding experience.</figcaption>
</figure>
</p>
<p>Most of my trip in Sarajevo consisted of museums. I visited various museums, ranging from eighteenth to twentieth century history. The most rewarding for me were the <a href="http://galerija110795.ba/">Galerija 11/07/95</a> and the <a href="https://en.wikipedia.org/wiki/Sarajevo_Tunnel">Tunnel of Sarajevo</a>. The gallery documented the <a href="https://en.wikipedia.org/wiki/Srebrenica_massacre">Srebrenica genocide</a> in July 1995 by the Serbian armed forces. The exhibit was eye-opening and perspective-shifting. The Tunnel of Sarajevo, sometimes called the Tunnel of Hope, is another perspective-shattering experience. The museum introduces the tunnel used during the siege of Sarajevo during the 1990s, when Serbian forces surrounded the city for an almost <a href="https://en.wikipedia.org/wiki/Siege_of_Sarajevo">four-year siege</a>. The tunnel was the only way for citizens and resistance forces to contact the outside world and keep the resistance alive. A small part of the tunnel is preserved, and the other artifacts make it a gripping experience (not to mention it&rsquo;s a short drive out of the city, so you also have a chance to mentally prepare and later unpack the experience).</p>

<h6 id="tirana">Tirana&nbsp;<a class="hanchor" href="#tirana" aria-label="Anchor link for: Tirana">🔗</a></h6>
<p>I visited Tirana, Albania four times on my trip abroad. In Tirana, my heart was captured by the people there. For years, I read about the <a href="https://openlabs.cc/en/">Open Labs Hackerspace</a> community based in Tirana and I always imagined an opportunity to see it in person. I actually remember my first encounter with their community was an <a href="https://blog.azizaj.com/ada-lovelace-day/">Ada Lovelace Day event report</a>. And somehow, the circumstances shifted where I was able to meet their community and immerse myself in the culture, if only for a short time.</p>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0187.jpg" alt="My visits to Tirana are best defined by the people who impacted my time there." loading="lazy">
  <figcaption>My visits to Tirana are best defined by the people who impacted my time there.</figcaption>
</figure>
</p>
<p>During my times in Tirana, I participated in the <a href="https://opensource.com/article/17/3/open-labs-48-hour-hackathon-albania">first-ever 48 hour hackathon</a> to support the UN&rsquo;s <a href="http://www.undp.org/content/undp/en/home/sustainable-development-goals.html">Sustainable Development Goals</a> (SDGs), the first edition of <a href="https://fedoramagazine.org/students-fedora-linux-weekend-2017/">Linux Weekend</a>, and the annual <a href="https://oscal.openlabs.cc/">Open Source Conference Albania</a> (OSCAL).</p>
<p> </p>
<p><a href="https://fedoramagazine.org/students-fedora-linux-weekend-2017/">https://fedoramagazine.org/students-fedora-linux-weekend-2017/</a></p>

<h2 id="india">India&nbsp;<a class="hanchor" href="#india" aria-label="Anchor link for: India">🔗</a></h2>
<p>At the end of my study abroad experience in Croatia, a unique opportunity presented itself to me. I did not buy my return airfare back to the US before I left for Croatia. When price-checking for my trip back, I noticed it was a few hundred dollars extra if I decided to spend a week in India before flying back to the US.</p>
<p>I booked the tickets.</p>
<p>
<figure>
  <img src="/blog/2018/02/yBioeCg.jpg" alt="Witnessing a tradition on my final day in Mumbai." loading="lazy">
  <figcaption>Witnessing a tradition on my final day in Mumbai.</figcaption>
</figure>
</p>
<p>The last day of my classes finally came, and the next day, I was traveling further east, to <a href="https://en.wikipedia.org/wiki/Mumbai">Mumbai</a> (or Bombay, if you prefer). I had the great fortune of having two great friends who invited me to the homes of their families during my trip. I visited Bee in Mumbai and Amita in Pune, all split across a single week!</p>
<p>My trip to India was eye-opening. For years, I&rsquo;ve had a fascination with Eastern culture and philosophy, but it was something completely different to experience. Bee and her family took me to the <a href="https://en.wikipedia.org/wiki/Global_Vipassana_Pagoda">Global Vipassana Pagoda</a>, a personally fulfilling experience for me. We visited the <a href="https://en.wikipedia.org/wiki/Bandra%E2%80%93Worli_Sea_Link">Bandra–Worli Sea Link</a>, <a href="https://goo.gl/maps/5kthSFfZmBJ2">Shree Mahalakshmi Temple</a>, and several other places in Mumbai. I remember walking through the streets more than anything.</p>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0037.jpg" alt="The Bandra–Worli Sea Link. This may have been one of my best photos." loading="lazy">
  <figcaption>The Bandra–Worli Sea Link. This may have been one of my best photos.</figcaption>
</figure>
</p>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0018.jpg" alt="Together at the gurdwara in Pune. Left to right: Prakash Mishra, me, Amita Sharma, Sumantro Mukherjee" loading="lazy">
  <figcaption>Together at the gurdwara in Pune. Left to right: Prakash Mishra, me, Amita Sharma, Sumantro Mukherjee</figcaption>
</figure>
</p>
<p>In Pune, Amita and her family showed me their favorite places. I had a chance to meet many other Fedora friends in Pune too. One of my favorite memories of Pune was a historic <a href="https://en.wikipedia.org/wiki/Gurdwara">gurdwara</a>. Amita took me and the others in our group to visit. For a moment, I finally got to see something I&rsquo;ve only read about right in front of my eyes. The history and reverence in these places was absorbed into my mind.</p>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0048.jpg" alt="Definitely not proper zazen posture. But a cool shot anyways." loading="lazy">
  <figcaption>Definitely not proper zazen posture. But a cool shot anyways. Photo: Amita Sharma</figcaption>
</figure>
</p>
<p>I never expected an Indian visa stamp in my passport in 2017, yet it happened. I&rsquo;m equally filled with wonder at how the circumstances unfolded as I am grateful this experience sneaked into my year.</p>

<h2 id="chicago-urban-experience">Chicago: Urban experience&nbsp;<a class="hanchor" href="#chicago-urban-experience" aria-label="Anchor link for: Chicago: Urban experience">🔗</a></h2>
<p>After my semester abroad and visiting India, I was whisked back to the United States, only to pack up once again for another new experience. From June to August, I lived in <a href="https://en.wikipedia.org/wiki/Chicago">Chicago, Illinois</a> to work an internship at <a href="http://jumptrading.com/">Jump Trading</a>. Chicago had a feeling of nostalgia for me because much of my father&rsquo;s family has origins tracing back to Chicago. But I would find myself losing more of my heart in Chicago than I realized.</p>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0001.jpg" alt="The view from my apartment in Chicago. Could this even be real??" loading="lazy">
  <figcaption>The view from my apartment window in Chicago. Could this even be real??</figcaption>
</figure>
</p>

<h4 id="the-internship">The internship&nbsp;<a class="hanchor" href="#the-internship" aria-label="Anchor link for: The internship">🔗</a></h4>
<p>I worked with a fantastic team of people on exciting projects. Professionally, my time in Chicago was motivating and empowering. I was provided the opportunity to learn and also contribute. I walked in with a dreadful feeling of imposter syndrome and left feeling more confident in my own learning abilities. <a href="https://www.docker.com/">Docker</a>, <a href="https://kubernetes.io/">Kubernetes</a>, and <a href="https://opensource.com/article/17/8/influxdb-time-series-database-stack">time-series data</a> became a part of my daily work life, when I had little to no knowledge before then.</p>
<p>By the time my internship finished, I helped contribute to our team&rsquo;s goal of standing up Kubernetes and <a href="https://github.com/kubernetes/minikube/commits?author=jflory7">contributing a few patches</a> in Kubernetes projects like Minikube. I have great mentors to thank for not only direct, technical assistance but also motivational mentorship and empowerment too.</p>

<h4 id="everything-else">Everything else&nbsp;<a class="hanchor" href="#everything-else" aria-label="Anchor link for: Everything else">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2018/02/chicago-matt-justin.jpg" alt="When old friends come to visit. Hi Matt!" loading="lazy">
  <figcaption>When old friends come to visit. Hi Matt!</figcaption>
</figure>
</p>
<p>There was more to Chicago than only the work too. Before long, I felt like a true Chicagoan, traveling the subways into the Loop, catching free concerts in <a href="https://www.cityofchicago.org/city/en/depts/dca/supp_info/millennium_park.html">Millennium Park</a>, and indulging in the Chicago tradition of <a href="https://en.wikipedia.org/wiki/Chicago-style_pizza">deep-dish pizza</a>.</p>
<p>Unlike other cities I&rsquo;ve visited, like New York City, Chicago felt easier to integrate into. The culture was notably &ldquo;slower&rdquo; than the fast-pace life of NYC, London, or Washington DC. I discovered <a href="http://www.middleeastbakeryandgrocery.com/">Middle Eastern markets</a> that became a regular part of my weekends, made friends with the baristas at a <a href="https://www.intelligentsiacoffee.com/old-town-coffeebar">local coffeehouse</a>, and had the privilege of hosting friends from three continents for short stays.</p>
<p>
<figure>
  <img src="/blog/2018/02/chicago-bee-fireworks.jpg" alt="4th of July fireworks on the Navy Pier with Bee" loading="lazy">
  <figcaption>4th of July fireworks on the Navy Pier with Bee</figcaption>
</figure>
</p>
<p>I left Chicago and was offered a new contract for the following summer in 2018. I&rsquo;m looking forward to be back in June again.</p>

<h2 id="year-of-fedora">Year of Fedora&nbsp;<a class="hanchor" href="#year-of-fedora" aria-label="Anchor link for: Year of Fedora">🔗</a></h2>
<p>2017 was full of time and effort spent in the Fedora community. In addition to the Diversity FAD, I was elected to the <a href="https://docs.fedoraproject.org/fedora-project/council/charter.html">Fedora Council</a> (on my third attempt), attended the annual Fedora contributor conference, Flock, and also narrowed my scope for contributions.</p>
<p>When I began contributing to Fedora, I was contributing to many things. Marketing, community operations, Fedora Badges, Fedora Magazine, Ambassadors, Games SIG, Join SIG, the Diversity Team, and maybe a few more things. After a while, I realized my contributions carried great width but poor depth. In 2017, I &ldquo;reconfigured&rdquo; my time in Fedora to focus in on the areas where I felt my time yielded the highest impact. This is Fedora <a href="https://fedoraproject.org/wiki/CommOps">CommOps</a> and the <a href="https://fedoraproject.org/wiki/Diversity">Diversity Team</a>.</p>
<p>I resigned as Fedora Magazine editor-in-chief and also formally stepped down from other teams. It made me sad, but I knew it was the right decision for me. I&rsquo;m happy to spend more time working in fewer projects at a greater depth and focus than I had before.</p>

<h4 id="flock-2017">Flock 2017&nbsp;<a class="hanchor" href="#flock-2017" aria-label="Anchor link for: Flock 2017">🔗</a></h4>
<p><a href="https://flocktofedora.org/">Flock</a>, Fedora&rsquo;s annual contributor conference, was held from Aug. 29 to Sep. 1 in Cape Cod, Massachusetts. Every year, Flock is an empowering experience for me because of the face-time I get with the people I spend much of my year working with remotely. This year was no different, and many new faces were mixed in with the old ones.</p>
<p>The highlights for me were in three forms: the <a href="https://flock2017.sched.com/event/Bm9a/commops-and-metrics-workshop">CommOps session</a>, the <a href="https://flock2017.sched.com/event/Bm8o/diversity-team-hackfest">Diversity Team session</a>, and the <a href="https://flock2017.sched.com/event/Bm8p/fedora-magazine-workshop">Fedora Magazine session</a>. Together with <a href="https://twitter.com/iamskamath">Sachin Kamath</a>, we led the CommOps session. You can read more about our session here:</p>
<p><a href="https://communityblog.fedoraproject.org/metrics-docs-flock-2017/">https://communityblog.fedoraproject.org/metrics-docs-flock-2017/</a></p>
<p>The Diversity Team and Magazine sessions were also valuable for both teams to get feedback from the rest of the community. In the Diversity Team session, we had many active participants outside of our team that reminded us the importance of narrowing our focus for higher impact. I also attended other interesting sessions held by the community, like the <a href="https://flock2017.sched.com/event/Bm9C/the-future-of-fedmsg">future of fedmsg</a> by Jeremy Cline.</p>

<h4 id="commops-fad">CommOps FAD&nbsp;<a class="hanchor" href="#commops-fad" aria-label="Anchor link for: CommOps FAD">🔗</a></h4>
<p>Towards the end of 2017, I worked together with our team in CommOps to organize our own team sprint, or FAD, in 2018. We <a href="https://fedoraproject.org/wiki/FAD_CommOps_2018">successfully planned the event</a> and organized it in Brno, Czechia, similar to last year&rsquo;s Diversity FAD.</p>
<p>More details on this will be found in its own event report!</p>

<h2 id="listenbrainz-indie-study">ListenBrainz indie study&nbsp;<a class="hanchor" href="#listenbrainz-indie-study" aria-label="Anchor link for: ListenBrainz indie study">🔗</a></h2>
<p>In my fall semester of 2017, I took on an <a href="https://jwfblog.wpenginepowered.com/tag/rit-2171/">independent study</a> to further explore the ListenBrainz project. <a href="https://listenbrainz.org/">ListenBrainz</a> is an open source social platform to document the music you listen to over time. If you&rsquo;re familiar with Last.fm or Libre.fm, it&rsquo;s a similar concept, but the focus is more on the data than the social features. ListenBrainz is supported by the <a href="https://metabrainz.org/">MetaBrainz Foundation</a>, also the guiding body for the more well-known <a href="https://musicbrainz.org/doc/About">MusicBrainz</a> project.</p>
<p>In my independent study, I had a chance to contribute documentation and community tools (like issue / PR templates), as well as explore how the project gathers and builds metrics. I didn&rsquo;t make my original milestone of major code contributions to the project, but I better understood the community and tried to help in the areas of low coverage, like documentation.</p>
<p>The experience was insightful for me and provided me an excuse to work on something that I am genuinely passionate about. Music is a powerful part of human culture, and the MetaBrainz Foundation takes a serious approach to documenting music, especially in a technical sense. ListenBrainz represents an opportunity for us to better explore and understand ourselves through our music listening habits. I hope someday that ListenBrainz will be a platform for data journalism and research about music. That&rsquo;s my dream.</p>

<h2 id="opensourcecom-community-moderator">Opensource.com community moderator&nbsp;<a class="hanchor" href="#opensourcecom-community-moderator" aria-label="Anchor link for: Opensource.com community moderator">🔗</a></h2>
<p>At the beginning of 2017, I was brought on board as an <a href="https://opensource.com/">Opensource.com</a> community moderator. Together with other community moderators and site staff, I help contribute new content and source new writers to the site. My invitation to the community moderator team came shortly after the announcement that I received the <a href="https://opensource.com/article/17/2/community-awards-2017">2017 People&rsquo;s Choice Award</a>. When <a href="https://twitter.com/rikkiends">Rikki Endsley</a> invited me to the team, it felt like a natural alignment to my passion for storytelling.</p>

<h4 id="all-things-open-2017">All Things Open 2017&nbsp;<a class="hanchor" href="#all-things-open-2017" aria-label="Anchor link for: All Things Open 2017">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2018/02/DSC_0146.jpg" alt="Working together with the Opensource.com team to plan out the next year ahead." loading="lazy">
  <figcaption>Working together with the Opensource.com team to plan out the next year ahead.</figcaption>
</figure>
</p>
<p>I was invited to <a href="https://allthingsopen.org/">All Things Open</a>, an annual open source conference in Raleigh, by the Opensource.com team. The day before the conference, I met the rest of the team and other community moderators at the Red Hat HQ in Raleigh. We spent the day locked into a room together to hash out plans and goals for the next year. It was a productive opportunity for the team to work together and also a great opportunity to meet the other members of the community.</p>
<p>Some of my best takeaways from this experience were catching coffee with other community moderators, meeting Jim Whitehurst to talk about Opensource.com, and giving my talk, <em>What open source and J.K. Rowling have in common</em>, for the final time.</p>
<p>I hope I have the opportunity to go again next year to meet the awesome team behind Opensource.com. (If you haven&rsquo;t considered before, <a href="https://opensource.com/how-submit-article">come and write for us</a> too!)</p>

<h2 id="happiness-packet-challenge">Happiness Packet Challenge&nbsp;<a class="hanchor" href="#happiness-packet-challenge" aria-label="Anchor link for: Happiness Packet Challenge">🔗</a></h2>
<p>Another unusual milestone for my 2017 was the first rendition of the Happiness Packet Challenge. I was introduced to the Happiness Packets website in 2016. <a href="https://www.happinesspackets.io/">Happiness Packets</a> are an easy way to say thank you to someone who has had a positive impact on you. I came up with a challenge to my friends and network to write one Happiness Packet a day, every day, for a week.</p>
<p>I followed up with the team behind the project to evaluate the impact of this idea, and I was pleasantly surprised. Here&rsquo;s the number of messages sent for the two weeks prior to the Happiness Packet Challenge, followed by the week of the challenge:</p>
<ul>
<li><strong>Week starting 2017-03-27</strong>: 2 sent</li>
<li><strong>Week starting 2017-04-03</strong>: 35 sent</li>
<li><strong>Week starting 2017-04-10 (challenge week)</strong>: 72 sent</li>
</ul>
<p>You can read more about the challenge in my original blog post. Keep an eye out for it again in 2018.</p>
<p><a href="https://jwfblog.wpenginepowered.com/2017/04/happiness-packets-challenge/">https://jwfblog.wpenginepowered.com/2017/04/happiness-packets-challenge/</a></p>

<h2 id="living-openly">Living openly&nbsp;<a class="hanchor" href="#living-openly" aria-label="Anchor link for: Living openly">🔗</a></h2>
<p>Earlier in this post, I alluded to how I felt like I began to find myself when I was abroad. My study abroad experience was the beginning of a longer process that leads into present day.</p>
<p>In April, <a href="https://medium.com/@jflory7/turn-on-the-lights-267603e553b5">I went public</a> with my depression, both to help take a weight off my shoulder and to be a voice for others who are afraid to speak up. I was always concerned of the reaction from publishing something like that, but I was met with nothing but loving-kindness from friends and strangers. It gave me new confidence to live more openly and wear my values in the open.</p>
<p>The story continued in October, when I decided to delete my Facebook and Instagram accounts.</p>
<p><a href="https://medium.com/@jflory7/cut-the-plug-deleting-facebook-and-instagram-6cbe7c86d9c9">https://medium.com/@jflory7/cut-the-plug-deleting-facebook-and-instagram-6cbe7c86d9c9</a></p>
<p>I considered this for a couple of years before, but I pulled the trigger in October. Like many others, it felt almost too much of a task to disconnect myself from this huge network of people and friends. But the negative impacts of it were draining me and trapping me. Since I deleted my accounts, I&rsquo;ve noticed a positive impact in overall levels of happiness and awareness. However, I don&rsquo;t think the social media accounts alone are the reason for this.</p>
<p>In the near future, I hope to do a follow-up post to my decision to cut away from the Facebook and Instagram machines. Keep an eye out for more.</p>

<h2 id="2018">2018&nbsp;<a class="hanchor" href="#2018" aria-label="Anchor link for: 2018">🔗</a></h2>
<p>It&rsquo;s already February in 2018 when I finished this post. This year, I thought it would be the year when I get the post out closer to the new year, but somehow I always slip. In either case, it gives me a chance to take in some of the new opportunities and excitement of the new year before reflecting and looking back.</p>
<p>This year, I&rsquo;m working an internship with <a href="https://www.unicef.org/">UNICEF</a> to help lead on open source community engagement and supporting the non-technical areas of their <a href="http://unicefstories.org/magicbox/">MagicBox platform</a>. In the one month I&rsquo;ve been doing this, I feel like I have tens of articles I could write about, but the experience is still maturing for me.</p>
<p>I also have another round in Chicago to look forward to over the summer. I&rsquo;ll get to work with the same team as last year on similar projects, and I&rsquo;m looking forward to going back.</p>
<p>As for the rest, who knows what&rsquo;s to come? So many things that made 2017 what it was were the things I didn&rsquo;t expect. The surprises in life are the salt to the regiment of daily life, and add flavor and spice in unexpected ways. I have no idea what my 2018 Year in Review will look like, and that&rsquo;s okay. I&rsquo;m looking forward to seeing what will make it in.</p>

<h2 id="thank-you">Thank you&nbsp;<a class="hanchor" href="#thank-you" aria-label="Anchor link for: Thank you">🔗</a></h2>
<p>Above all, every year, I think back on the people who positively impacted my life and contributed to the &ldquo;flavor&rdquo; of my year. A close friend reminded me recently that we all stand on the shoulders of giants. And isn&rsquo;t it true? We all have our great mentors, great friends, and unexpected sages that help us find our own footing on this great path of life. We become ourselves from the various pieces impacted on us by others.</p>
<p>I&rsquo;m thankful for all of the people who have made my year into the experience it was. The list is too long to write and I fear I would leave someone out – even significant impacts were made by people who had a short-term role in this last year.</p>
<p>A long time ago, my open source experience was jump-started by someone who did something kind and exceptional for me. It was a continuing trend since that moment. My only aspiration is to pay forward the good will that so many have bestowed unto me.</p>
<p>Thanks for making it this far down, and I hope to see you in 2018. Or who knows – maybe it will just be me reading this far down for next year, when I go to write my next year in review. Hi future me!</p>]]></description></item><item><title>Raspberry Pis and open source at Rochester Mini Maker Faire</title><link>https://jwheel.org/blog/2018/01/rochester-mini-maker-faire/</link><pubDate>Tue, 09 Jan 2018 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2018/01/rochester-mini-maker-faire/</guid><description><![CDATA[<p><a href="https://opensource.com/article/17/12/rochester-mini-maker-faire"><em>This article was originally published on Opensource.com.</em></a></p>
<hr>
<p>The <a href="https://rochester.makerfaire.com/">Rochester Mini Maker Faire</a> is an annual event at the Joseph A. Floreano Riverside Convention Center in Rochester, NY. Each year, makers, creators, artists, and more from all over upstate New York and beyond show their crafts and creations to the community. Open source software and hardware are popular items at the Rochester Mini Maker Faire, with countless Raspberry Pis, Arduino boards, and open source projects powering many electronic projects.</p>
<p>On November 18th, the <a href="http://foss.rit.edu">Free and Open Source Software initiative</a> at the <a href="https://magic.rit.edu">RIT MAGIC Center</a> and the <a href="http://ritlug.com">RIT Linux Users Group</a> presented projects and their communities at the Faire. Students from both communities demonstrated projects made with Raspberry Pis or larger undertakings on other open source projects.</p>

<h2 id="looking-good-magic-mirror-and-raspberry-pi">Looking good: Magic mirror and Raspberry Pi&nbsp;<a class="hanchor" href="#looking-good-magic-mirror-and-raspberry-pi" aria-label="Anchor link for: Looking good: Magic mirror and Raspberry Pi">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/11/ritlug-makerfaire-gameboy-magic-mirror.jpg" alt="Taylor Bowling with the Magic Mirror and Retro Pi at the Rochester Mini Maker Faire 2017" loading="lazy">
  <figcaption>Taylor Bowling (<a href="https://twitter.com/TaylorScott319" class="bare">https://twitter.com/TaylorScott319</a>) with the Magic Mirror and Retro Pi at the Rochester Mini Maker Faire</figcaption>
</figure>
</p>
<p>Students from the FOSS@MAGIC initiative presented the <a href="https://github.com/MichMich/MagicMirror">Magic Mirror</a>, a mirror that combines your digital world into your reflection. A Raspberry Pi and salvaged monitor screen sit behind a piece of one-way glass. Through the glass, the mirror shows the time, daily weather report, calendar updates, and more along with your reflection.</p>
<p><a href="https://twitter.com/TaylorScott319">Taylor Bowling</a> and <a href="https://serubin.net/">Solomon Rubin</a>, two students at RIT, worked together on the project in spring 2017. The frame for the mirror was hand-built for the project. Using <a href="https://magicmirror.builders/">this guide</a>, the two created a pair of them for the upcoming <a href="https://www.rit.edu/news/story.php?id=58179">RIT MAGIC Center</a>.</p>

<h2 id="community-course-ware-with-learnit">Community course-ware with LearnIt&nbsp;<a class="hanchor" href="#community-course-ware-with-learnit" aria-label="Anchor link for: Community course-ware with LearnIt">🔗</a></h2>
<p>Another student, <a href="https://wilfriede.me/">Wilfried Hounyo</a>, demonstrated his open source course-ware platform, LearnIt. <a href="https://github.com/wilfriedE/LearnIt">LearnIt</a> is a platform for topic-based, community-contributed courses and tutorials. Similar to other platforms like <a href="https://www.udacity.com/">Udacity</a> or <a href="https://www.coursera.org/">Coursera</a>, LearnIt enables anyone to host their own learning platform and build a community around it.</p>
<p>Wilfried&rsquo;s inspiration for LearnIt came from working with the <a href="https://www.firstinspires.org/">FIRST Robotics</a> community in high school. LearnIt&rsquo;s original goal was to build an open platform for learning and teaching within the FIRST Robotics community. This way, anyone around the country could create their own lessons for anyone to view and follow. After working on the project, Wilfried decided to make the platform ambiguous for any project, so anyone could use LearnIt for building a learning community around any topic or subject area.</p>
<p>A demo is available <a href="https://learnit-demo.herokuapp.com/">here</a> and the source is <a href="https://github.com/wilfriedE/LearnIt">on GitHub</a>.</p>

<h2 id="linux-operating-system-for-rit">Linux operating system for RIT&nbsp;<a class="hanchor" href="#linux-operating-system-for-rit" aria-label="Anchor link for: Linux operating system for RIT">🔗</a></h2>
<p>Members of the RIT Linux Users Group also presented TigerOS, a custom Linux operating system for students, faculty, and staff of Rochester Institute of Technology. One of the project goals is to offer an installer based on major across all RIT majors. After picking your major, TigerOS installs and configures all the software used by the department or major.</p>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">Did you know <a href="https://twitter.com/hashtag/RITlug?src=hash&amp;ref_src=twsrc%5Etfw">#RITlug</a> is working on a custom operating system for <a href="https://twitter.com/RITtigers?ref_src=twsrc%5Etfw">@RITtigers</a>? Check out <a href="https://twitter.com/hashtag/TigerOS?src=hash&amp;ref_src=twsrc%5Etfw">#TigerOS</a> at the @ROCHMakerFaire, table #91! <a href="https://twitter.com/hashtag/Rochester?src=hash&amp;ref_src=twsrc%5Etfw">#Rochester</a> <a href="https://twitter.com/hashtag/MakerFaire?src=hash&amp;ref_src=twsrc%5Etfw">#MakerFaire</a> <a href="https://t.co/aipHh8APz6">pic.twitter.com/aipHh8APz6</a></p>&mdash; RIT Linux Users Group (@RITlug) <a href="https://twitter.com/RITlug/status/931952653998940160?ref_src=twsrc%5Etfw">November 18, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Development on TigerOS began when student <a href="https://axk4545.github.io/">Aidan Kahrs</a> picked up an abandoned project from past RIT students. After building a team, they set out to revive the project over the last year. To date, an early beta is available and efforts are going towards building an automatic CI build system and updating to Fedora 27.</p>
<p>To learn more about TigerOS, visit <a href="http://tigeros.ritlug.com/">their website</a>.</p>

<h2 id="spy-pi">Spy Pi&nbsp;<a class="hanchor" href="#spy-pi" aria-label="Anchor link for: Spy Pi">🔗</a></h2>
<p>RITlug also presented the Spy Pi at the Rochester Mini Maker Faire. The Spy Pi is a discreet camera embedded inside a picture frame powered by a Raspberry Pi. <a href="https://twitter.com/TaylorScott319">Taylor Bowling</a> also helped lead this project.</p>
<p>In the picture, R2D2 is <a href="http://www.starwars.com/video/r2-d2-captured-by-jawas">carried away</a> by the Jawas in <em>Star Wars: A New Hope</em>. Taylor added two orange LED lights into one of the hooded characters and attached an infrared motion sensor, webcam, and Raspberry Pi into the picture frame. Whenever someone walks in front of the picture frame, the LED &ldquo;eyes&rdquo; light up and the webcam takes a picture that&rsquo;s stored to the Raspberry Pi.</p>
<p>
<figure>
  <img src="/blog/2017/11/ritlug-makerfaire-gameboy-spypi.jpg" alt="Taylor Bowling stands next to the Spy Pi, a discreet picture frame that takes a picture when it detects movement at the Rochester Mini Maker Faire 2017" loading="lazy">
  <figcaption>Taylor Bowling (<a href="https://twitter.com/TaylorScott319" class="bare">https://twitter.com/TaylorScott319</a>) stands next to the Spy Pi, a discreet picture frame that takes a picture when it detects movement</figcaption>
</figure>
</p>
<p>Taylor designed the project himself and wrote simple Python scripts to automate using the sensors. His <a href="https://github.com/TaylorBowling/SpyPi">code is available</a> on GitHub.</p>

<h2 id="see-you-next-year">See you next year!&nbsp;<a class="hanchor" href="#see-you-next-year" aria-label="Anchor link for: See you next year!">🔗</a></h2>
<p>This year was the third year for FOSS@MAGIC and first year for the RIT Linux Users Group to exhibit at the Rochester Mini Maker Faire. Both communities look forward to showing off our projects and what we&rsquo;re working on again at Imagine RIT in May and again next year at the Faire.</p>
<p>To learn more, visit the websites for <a href="http://foss.rit.edu/">FOSS@MAGIC</a> and the <a href="http://ritlug.com">RIT Linux Users Group</a>.</p>
<p>
<figure>
  <img src="/blog/2017/11/IMG_20171118_082253-e1511219651105.jpg" alt="See you at next year&rsquo;s Rochester Mini Maker Faire!" loading="lazy">
  <figcaption>See you at next year’s Rochester Mini Maker Faire (<a href="https://rochester.makerfaire.com/" class="bare">https://rochester.makerfaire.com/</a>)!</figcaption>
</figure>
</p>]]></description></item><item><title>ListenBrainz community gardening and user statistics</title><link>https://jwheel.org/blog/2017/11/listenbrainz-community-user-statistics/</link><pubDate>Mon, 13 Nov 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/11/listenbrainz-community-user-statistics/</guid><description><![CDATA[<p><em>This post is part of a series of posts where I contribute to the ListenBrainz project for my independent study at the Rochester Institute of Technology in the fall 2017 semester. For more posts, find them in <a href="https://jwfblog.wpenginepowered.com/tag/rit-2171/">this tag</a>.</em></p>
<hr>
<p>My progress with ListenBrainz slowed, but I am resuming the pace of contributing and advancing on my independent study timeline. This past week, I finished out assigned tasks to discuss contributor-related documentation, like a Code of Conduct, contributor guidelines, and a pull request template. I began research on user statistics and found some already created. I wrote one of my own, but need to learn more about Google BigQuery to advance further.</p>

<h2 id="paving-the-contributor-pathway">Paving the contributor pathway&nbsp;<a class="hanchor" href="#paving-the-contributor-pathway" aria-label="Anchor link for: Paving the contributor pathway">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/11/Screenshot-from-2017-11-13-02-05-12.png" alt="Making it easier for people to contribute user statistics to ListenBrainz" loading="lazy">
  <figcaption>Making it easier for people to contribute to ListenBrainz with helpful contibuting guidelines</figcaption>
</figure>
</p>
<p>Earlier, I identified weaknesses for the ListenBrainz contributor pathway and found ways we could improve the pathway. This started with the development environment documentation. Now, I helped draft first revisions of our <a href="https://github.com/metabrainz/listenbrainz-server/pull/287">contributor guidelines</a>, <a href="https://github.com/metabrainz/listenbrainz-server/pull/286">Code of Conduct reference</a>, and <a href="https://github.com/metabrainz/listenbrainz-server/pull/288">pull request templates</a>. Together, these three documents have two goals.</p>
<ol>
<li><strong>Make it easier</strong> to contribute to ListenBrainz</li>
<li>Have a better experience and <strong>have fun</strong> contributing!</li>
</ol>
<p>Adding these documents addresses these goals. Additionally, the <a href="https://github.com/metabrainz/listenbrainz-server/community">GitHub community profile</a> also highlights these deliverables as ways to meet these goals. After getting feedback and seeing what others think, we make more revisions later (with some trial runs).</p>

<h2 id="back-to-selinux-context-flags">Back to SELinux context flags&nbsp;<a class="hanchor" href="#back-to-selinux-context-flags" aria-label="Anchor link for: Back to SELinux context flags">🔗</a></h2>
<p>Recently, I set my desktop back up and installed Docker for the first time on this machine; however, the development environment still failed to start. When I ran the script, it would eventually error out because of a permission denial. The web server image for ListenBrainz was failing.</p>
<p>After debugging, I noticed that I missed the SELinux volume tags for the ListenBrainz web server images in my original pull request, <a href="https://github.com/metabrainz/listenbrainz-server/pull/257">#257</a>. When I created the pull request, I might have had cached data that let my laptop run the development environment without a problem. In either case, it was an easy fix and I knew what the issue was when it happened. Therefore, I submitted a new fix in <a href="https://github.com/metabrainz/listenbrainz-server/pull/290">#290</a>.</p>

<h2 id="writing-new-user-statistics">Writing new user statistics&nbsp;<a class="hanchor" href="#writing-new-user-statistics" aria-label="Anchor link for: Writing new user statistics">🔗</a></h2>
<p>The most interesting part of my independent study is working with the music data to build and generate interesting statistics. I finally began exploring the <a href="https://github.com/metabrainz/listenbrainz-server/tree/master/listenbrainz/stats">existing statistics</a> in ListenBrainz. The statistic queries use BigQuery standard SQL. BigQuery helps rapidly scan and scale data queries to help with performance (I have a lot to learn about BigQuery).</p>

<h4 id="two-types-of-statistics">Two types of statistics&nbsp;<a class="hanchor" href="#two-types-of-statistics" aria-label="Anchor link for: Two types of statistics">🔗</a></h4>
<p>Additionally, ListenBrainz generates <strong>two types</strong> of statistics:</p>
<ol>
<li>Site-wide statistics</li>
<li>User statistics</li>
</ol>
<p>Site-wide statistics are metrics non-specific to a single user. There is only <a href="https://github.com/metabrainz/listenbrainz-server/blob/master/listenbrainz/stats/sitewide.py">one site-wide query</a> now. It counts how many artists were ever submitted to this ListenBrainz instance and returns an integer. There&rsquo;s room for expansion in site-wide statistics.</p>
<p>On the other hand, user statistics are metrics specific to a single user. There&rsquo;s a <a href="https://github.com/metabrainz/listenbrainz-server/blob/master/listenbrainz/stats/user.py">fair number already</a>, like the top artists and songs in a time period and the number of artists you&rsquo;ve listened to. These are a little more complete and offer more expansion for doing cool front-end work with something like <a href="https://d3js.org/">D3.js</a>.</p>

<h4 id="writing-user-statistics">Writing user statistics&nbsp;<a class="hanchor" href="#writing-user-statistics" aria-label="Anchor link for: Writing user statistics">🔗</a></h4>
<p>Of course, I had to try writing my own. One helpful query I thought of was getting a count of the songs you listened to over a time period (e.g. &ldquo;you listened to 500 songs this week!&rdquo;). I haven&rsquo;t tested it yet, but I have this in a local branch and hope to test it with real data soon.</p>
<pre tabindex="0"><code>def get_play_count(musicbrainz_id, time_interval=None): 
 
 filter_clause = &#34;&#34; 
 if time_interval: 
     filter_clause = &#34;AND listened_at &gt;=
     TIMESTAMP_SUB(CURRENT_TIME(), 
     INTERVAL {})&#34;.format(time_interval) 
 
 query = &#34;&#34;&#34;SELECT COUNT(release_msid) as listen_count 
            FROM {dataset_id}.{table_id} 
            WHERE user_name = @musicbrainz_id 
            {time_filter_clause} 
            LIMIT {limit} 
         &#34;&#34;&#34;.format( 
                 dataset_id=config.BIGQUERY_DATASET_ID, 
                 table_id=config.BIGQUERY_TABLE_ID, 
                 time_filter_clause=filter_clause, 
                 limit=config.STATS_ENTITY_LIMIT, 
            ) 
 
 parameters = [ 
     { 
         &#39;type&#39;: &#39;STRING&#39;, 
         &#39;name&#39;: &#39;musicbrainz_id&#39;, 
         &#39;value&#39;: musicbrainz_id 
     } 
 ] 
 
 return stats.run_query(query, parameters)
</code></pre>
<h2 id="researching-google-bigquery">Researching Google BigQuery&nbsp;<a class="hanchor" href="#researching-google-bigquery" aria-label="Anchor link for: Researching Google BigQuery">🔗</a></h2>
<p>My next steps for the independent study are researching <a href="https://cloud.google.com/bigquery/docs/">Google BigQuery</a>. After going through the existing statistics and understanding how ListenBrainz generates them, an understanding of Google BigQuery is essential to writing effective queries. When I become more comfortable with the tooling and how it works, I want to map out a plan of statistics to generate and measure.</p>
<p>Until then, the hacking continues! As always, keep the FOSS flag high…</p>]]></description></item><item><title>How I created my first RPM package in Fedora</title><link>https://jwheel.org/blog/2017/11/first-rpm-package-fedora/</link><pubDate>Tue, 07 Nov 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/11/first-rpm-package-fedora/</guid><description><![CDATA[<p>Over the summer, I migrated my desktop environment to <a href="https://i3wm.org/">i3</a>, a tiling window manager. Switching to i3 was a challenge at first, since I had to replace many things that GNOME handled for me. One of these things was changing screen brightness. <code>xbacklight</code>, the standard way of changing backlight brightness on laptops, doesn&rsquo;t work on my hardware.</p>
<p>Recently, I discovered <a href="https://github.com/multiplexd/brightlight">brightlight</a>, a tool that changes backlight brightness. I decided to try it, and it worked with root privileges. However, I found there was no RPM package in Fedora for brightlight. I decided this was the right time to try creating a package in Fedora and learn how to create an RPM.</p>
<p>In this article, I&rsquo;ll cover and share how I…</p>
<ul>
<li>Created the RPM SPEC file</li>
<li>Built the package in Koji and Copr</li>
<li>Worked through an issue with debug package</li>
<li>Submitted the package to Fedora package collection</li>
</ul>

<h2 id="pre-requisites">Pre-requisites&nbsp;<a class="hanchor" href="#pre-requisites" aria-label="Anchor link for: Pre-requisites">🔗</a></h2>
<p>On Fedora, I installed these packages for all steps of the package building process.</p>
<pre tabindex="0"><code>sudo dnf install fedora-packager fedpkg fedrepo_req copr-cli
</code></pre>
<h2 id="creating-the-rpm-spec-file">Creating the RPM SPEC file&nbsp;<a class="hanchor" href="#creating-the-rpm-spec-file" aria-label="Anchor link for: Creating the RPM SPEC file">🔗</a></h2>
<p>The first step to create a RPM is to create the SPEC file. These are the specifications, or instructions, that tell RPM how to build the package. This is how you tell RPM to create a binary file from the package&rsquo;s source code. Creating the SPEC file is likely the hardest part of the packaging process and its difficulty depends on the project.</p>
<p>Fortunately for me, <a href="https://github.com/multiplexd/brightlight">brightlight</a> is a simple application written in C. The maintainer made it easy to create a binary application with a Makefile. Building it was a matter of simply running <code>make</code> in the repo. So now I had a simple project to learn RPM packaging.</p>

<h4 id="finding-documentation">Finding documentation&nbsp;<a class="hanchor" href="#finding-documentation" aria-label="Anchor link for: Finding documentation">🔗</a></h4>
<p>Googling &ldquo;how to create an RPM package&rdquo; yields many results. I started with <a href="https://www.ibm.com/developerworks/library/l-rpm1/index.html">IBM&rsquo;s documentation</a>. However, I found it confusing and difficult to understand (although quite detailed; it might be more useful for a complicated app). I also found the <a href="https://fedoraproject.org/wiki/How_to_create_an_RPM_package">package creation instructions</a> on the Fedora wiki. The documentation here was good at explaining the composition and process, but I was still confused on how to begin.</p>
<p>Finally, I found the <a href="https://rpm-packaging-guide.github.io/#packaging-software">RPM Packaging Guidelines</a>, written by the amazing <a href="https://github.com/maxamillion">Adam Miller</a>. These instructions were helpful and included three excellent examples for Bash, C, and Python applications. This guide helped me better understand how to compose a RPM SPEC, and more importantly, how all the pieces fit together.</p>
<p>After this, I was able to write my <a href="https://src.fedoraproject.org/rpms/brightlight/blob/master/f/brightlight.spec">first SPEC file</a> for <code>brightlight</code>. Since it is so simple, the SPEC file is short and easy to understand. Once I had my SPEC file, I linted the file for errors. After cleaning a few mistakes, I created the source RPM (SRPM) and the binary RPM, then linted each for errors.</p>
<pre tabindex="0"><code>rpmlint SPECS/brightlight.spec
rpmbuild -bs SPECS/brightlight.spec
rpmlint SRPMS/brightlight-5-1.fc26.src.rpm
rpmbuild -bb SRPMS/brightlight-5-1.fc26.src.rpm
rpmlint RPMS/x86_64/brightlight-5-1.fc26.x86_64.rpm
</code></pre><p>Now, I had a valid RPM to send to the Fedora repositories.</p>

<h2 id="building-in-copr-and-koji">Building in Copr and Koji&nbsp;<a class="hanchor" href="#building-in-copr-and-koji" aria-label="Anchor link for: Building in Copr and Koji">🔗</a></h2>
<p>Next, I read the <a href="https://fedoraproject.org/wiki/Join_the_package_collection_maintainers">guidelines</a> to becoming a Fedora packager. Before submitting anything, they encouraged packagers to test their packages by hosting the project in a <a href="https://copr.fedoraproject.org/">Copr</a> repo and building in <a href="https://koji.fedoraproject.org/koji/">Koji</a>.</p>

<h4 id="using-copr">Using Copr&nbsp;<a class="hanchor" href="#using-copr" aria-label="Anchor link for: Using Copr">🔗</a></h4>
<p>First, I created a <a href="https://copr.fedorainfracloud.org/coprs/jflory7/brightlight/">Copr repository</a> for <code>brightlight</code>. <a href="https://developer.fedoraproject.org/deployment/copr/about.html">Copr</a> is a service in Fedora&rsquo;s infrastructure that builds your package and sets up a custom repo for whatever version of Fedora or EPEL that you choose. It&rsquo;s handy to get your RPM hosted quickly and to share it with others for testing. You don&rsquo;t need special approval to host a Copr.</p>
<p>I created my Copr project from the web interface, but you can also use the <code>copr-cli</code> tool. There is an <a href="https://developer.fedoraproject.org/deployment/copr/copr-cli.html">excellent guide</a> in the Fedora Developer portal. After I created my repo on the website, I built my package with this command.</p>
<pre tabindex="0"><code>copr-cli build brightlight SRPMS/brightlight.5-1.fc26.src.rpm
</code></pre><p>My packages successfully built for Copr and I was able to install it on my Fedora system easily.</p>

<h4 id="using-koji">Using Koji&nbsp;<a class="hanchor" href="#using-koji" aria-label="Anchor link for: Using Koji">🔗</a></h4>
<p>Anyone can use <a href="https://koji.fedoraproject.org/koji/">Koji</a> to test their package on multiple architectures and versions of Fedora or CentOS / RHEL. To test on Koji, you must have a source RPM. I wanted to package <code>brightlight</code> on all supported versions of Fedora, so I ran these commands.</p>
<pre tabindex="0"><code>koji build --scratch f25 SRPMS/brightlight-5-1.fc26.src.rpm
koji build --scratch f26 SRPMS/brightlight-5-1.fc26.src.rpm
koji build --scratch f27 SRPMS/brightlight-5-1.fc26.src.rpm
</code></pre><p>It took some time, but Koji built all the packages. Everything was fine for Fedora 25 and 26, but Fedora 27 failed. Koji scratch builds keep me on the right track and make sure my packages build successfully.</p>

<h2 id="problem-fedora-27-builds-failing">Problem: Fedora 27 builds failing!&nbsp;<a class="hanchor" href="#problem-fedora-27-builds-failing" aria-label="Anchor link for: Problem: Fedora 27 builds failing!">🔗</a></h2>
<p>Now I know that my Fedora 27 package was failing to build on Koji. But why? I discovered two relevant changes for Fedora 27.</p>
<ul>
<li><a href="https://fedoraproject.org/wiki/Changes/SubpackageAndSourceDebuginfo">Subpackage and Source Debuginfo</a></li>
<li><a href="https://fedoraproject.org/wiki/Changes/RPM-4.14">RPM 4.14</a> (specifically, the debuginfo package rewrite)</li>
</ul>
<p>These changes mean that RPM packages must build with a <code>debuginfo</code> package. This is helpful for troubleshooting or debugging an application. In my case, this wasn&rsquo;t critical or too necessary, but I needed to build one.</p>
<p>Thanks to Igor Gnatenko, he helped me understand what I needed to add to my package SPEC for it to build on Fedora 27. Before the <code>%make_build</code> macro, I added these lines.</p>
<pre tabindex="0"><code>export CFLAGS=&#34;%{optflags}&#34;
export LDFLAGS=&#34;%{__global_ldflags}&#34;
</code></pre><p>I built a new SRPM and submitted it to Koji to build on Fedora 27. And success! It built successfully.</p>

<h2 id="submitting-the-package">Submitting the package&nbsp;<a class="hanchor" href="#submitting-the-package" aria-label="Anchor link for: Submitting the package">🔗</a></h2>
<p>Now that I verified my package successfully built on Fedora 25 to 27, it&rsquo;s time to begin the packaging process for Fedora. The first step to submitting a package is to create a new bug in the Red Hat Bugzilla to ask for a package review. I <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1505026">created a ticket</a> for <code>brightlight</code>. Since this was my first package, I made an explicit note that this was my first package and I was seeking a sponsor. In the ticket, I linked to the SPEC and SRPM files in my git repository.</p>

<h4 id="getting-into-dist-git">Getting into dist-git&nbsp;<a class="hanchor" href="#getting-into-dist-git" aria-label="Anchor link for: Getting into dist-git">🔗</a></h4>
<p><em>Edit, 2022 Feb. 14th</em>: It was pointed out <a href="https://twitter.com/Det_Conan_Kudo/status/1491931714179973127">on Twitter</a> that the <code>fedrepo-req</code> tool is no longer used. See the documentation linked throughout this blog post for more guidance on best practices for today.</p>
<p><a href="https://fedoraproject.org/wiki/User:Ignatenkobrain">Igor Gnatenko</a> sponsored me into the Fedora Packagers group and left feedback on my package. I learned of some other things specific for packaging C applications. After he sponsored me, I was able to ask for a repo in <a href="https://src.fedoraproject.org/">dist-git</a>, Fedora&rsquo;s collection of RPM package repositories that host SPEC files for all of Fedora.</p>
<p>A handy Python tool helps make this part easy. <a href="https://pagure.io/fedrepo_req"><code>fedrepo-req</code></a> is a tool that creates a request for a new dist-git repository. I submitted my request with this command.</p>
<pre tabindex="0"><code>fedrepo-req brightlight \
    --ticket 1505026 \
    --description &#34;CLI tool to change screen back light brightness&#34; \
    --upstreamurl https://github.com/multiplexd/brightlight
</code></pre><p>This created a <a href="https://pagure.io/releng/fedora-scm-requests/issue/2489">new ticket</a> for me in the <a href="https://pagure.io/releng/fedora-scm-requests">fedora-scm-requests</a> repo. The next day, an admin <a href="https://src.fedoraproject.org/rpms/brightlight">created the repository</a> for me. Now, I was in business!</p>
<p>
<figure>
  <img src="/blog/2017/11/Screenshot-from-2017-11-05-19-58-47.png" alt="My first RPM in Fedora dist-git – woohoo!" loading="lazy">
  <figcaption>My first RPM (<a href="https://src.fedoraproject.org/rpms/brightlight" class="bare">https://src.fedoraproject.org/rpms/brightlight</a>) in Fedora dist-git – woohoo!</figcaption>
</figure>
</p>

<h4 id="working-with-dist-git">Working with dist-git&nbsp;<a class="hanchor" href="#working-with-dist-git" aria-label="Anchor link for: Working with dist-git">🔗</a></h4>
<p>Next, <code>fedpkg</code> is the tool used for interacting with dist-git repositories. I changed directories into my git working directory and ran this command.</p>
<p><code>fedpkg clone brightlight</code></p>
<p><code>fedpkg</code> then clones my package&rsquo;s repo from dist-git. For the <strong>first branch only</strong>, you need to import the SRPM.</p>
<pre tabindex="0"><code>fedpkg import SRPMS/brightlight-5-1.fc26.src.rpm
</code></pre><p><code>fedpkg</code> imports your package&rsquo;s SRPM into the repo and sets up the sources for you. It&rsquo;s important to use <code>fedpkg</code> for this because it helps provision the repo in a Fedora-friendly way (as compared to adding the files manually yourself). Once you import the SRPM, push the changes to the dist-git repo.</p>
<pre tabindex="0"><code>git commit -m &#34;Initial import (#1505026).&#34;
git push
</code></pre>
<h4 id="building-the-package">Building the package&nbsp;<a class="hanchor" href="#building-the-package" aria-label="Anchor link for: Building the package">🔗</a></h4>
<p>Once you push the first import to your dist-git repo, you&rsquo;re ready to do a <em>real</em> Koji build of your project. To build your project, run this command.</p>
<pre tabindex="0"><code>fedpkg build
</code></pre><p>This builds your package in Koji for Rawhide, the unversioned branch of Fedora. You must build successfully for Rawhide before you can build for other branches. IF everything builds successfully, you can now ask for other branches for your project.</p>
<pre tabindex="0"><code>fedrepo-req brightlight f27 -t 1505026
fedrepo-req brightlight f26 -t 1505026
fedrepo-req brightlight f25 -t 1505026
</code></pre>
<h4 id="note-about-building-other-branches">Note about building other branches&nbsp;<a class="hanchor" href="#note-about-building-other-branches" aria-label="Anchor link for: Note about building other branches">🔗</a></h4>
<p>Once you import the SRPM initially, remember to merge your master branch to other branches, if you choose to create them. For example, if you later request a branch for Fedora 27, you would want to use these commands.</p>
<pre tabindex="0"><code>fedpkg switch-branch f27
git merge master
git push
fedpkg build
</code></pre>
<h4 id="submitting-update-to-bodhi">Submitting update to Bodhi&nbsp;<a class="hanchor" href="#submitting-update-to-bodhi" aria-label="Anchor link for: Submitting update to Bodhi">🔗</a></h4>
<p>The last step of the process is to submit your new package as an update to Bodhi. When you first submit your package as an update, it goes to the testing repositories. Anyone can test your package and add karma to the update. If your update receives +3 votes (or as Bodhi calls it, karma), your package automatically pushes to the stable repositories. Otherwise, it pushes after a week in the testing repositories.</p>
<p>To submit your update to Bodhi, you only need one command.</p>
<pre tabindex="0"><code>fedpkg update
</code></pre><p>This opens a Vim window with different configuration options for your package. Usually, you only need to specify the type (e.g. <code>newpackage</code>) and the ticket ID number for your package review. For a more in-depth explanation, there is an <a href="https://fedoraproject.org/wiki/Package_update_HOWTO">update guide</a> on the Fedora wiki.</p>
<p>After saving and exiting the file, <code>fedpkg</code> submits your package as an update to Bodhi and eventually synchronizes to the Fedora testing repositories. I was able to install my package with this command.</p>
<pre tabindex="0"><code>sudo dnf install brightlight -y --enablerepo=updates-testing --refresh
</code></pre>
<h2 id="were-stable">We&rsquo;re stable!&nbsp;<a class="hanchor" href="#were-stable" aria-label="Anchor link for: We&rsquo;re stable!">🔗</a></h2>
<p>My package was recently submitted to <a href="https://bodhi.fedoraproject.org/updates/brightlight-5-1.fc26">Fedora 26 stable repositories</a> and will soon enter <a href="https://bodhi.fedoraproject.org/updates/FEDORA-2017-8071ee299f">Fedora 25</a> and <a href="https://bodhi.fedoraproject.org/updates/FEDORA-2017-f3f085b86e">Fedora 27</a> stable repositories. Thanks for everyone who helped me with my first package. I look forward to more opportunities to add more packages to the distribution.</p>]]></description></item><item><title>Exploring Google Code-In, ListenBrainz easyfix bugs, D3.js</title><link>https://jwheel.org/blog/2017/10/google-code-in-listenbrainz-d3-js/</link><pubDate>Sat, 21 Oct 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/10/google-code-in-listenbrainz-d3-js/</guid><description><![CDATA[<p><em>This post is part of a series of posts where I contribute to the ListenBrainz project for my independent study at the Rochester Institute of Technology in the fall 2017 semester. For more posts, find them in <a href="https://jwfblog.wpenginepowered.com/tag/rit-2171/">this tag</a>.</em></p>
<hr>
<p>Last week moved quickly for me in ListenBrainz. I submitted multiple pull requests and participated in the weekly developer&rsquo;s meeting on Monday. I was also invited to take part as a mentor for ListenBrainz for the upcoming round of Google Code-In! In addition to my changes and new role as a mentor, I&rsquo;m researching libraries like D3.js to help build visualizations for music data.  Suddenly, everything started moving fast!</p>

<h2 id="last-week-recap">Last week: Recap&nbsp;<a class="hanchor" href="#last-week-recap" aria-label="Anchor link for: Last week: Recap">🔗</a></h2>
<p>The ListenBrainz team accepted my <a href="https://github.com/metabrainz/listenbrainz-server/pull/257">development environment improvements</a> and <a href="https://github.com/metabrainz/listenbrainz-server/pull/259">documentation</a>. This gave me an opportunity to better explore project documentation tools. I experimented with <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> and <a href="https://readthedocs.org/">Read the Docs</a>. Sphinx introduced me to <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> for documentation formats. I&rsquo;ve avoided it in favor of Markdown for a long time, but I see where reStructuredText is stronger for advanced documentation.</p>
<p>Since ListenBrainz is a new project, I plan to contribute documentation for any of my work and improve documentation for pre-existing work. One of the goals for this independent study is to make ListenBrainz a viable candidate for a future data analysis course. To make it easy to use and understand, ListenBrainz needs excellent documentation. Since one of my strengths is technical writing, I plan to contribute more documentation this semester.</p>
<p>You can see some of the <a href="https://listenbrainz.readthedocs.io/en/master/">new documentation</a> already!</p>

<h2 id="google-code-in-mentor">Google Code-In mentor&nbsp;<a class="hanchor" href="#google-code-in-mentor" aria-label="Anchor link for: Google Code-In mentor">🔗</a></h2>
<p>The MetaBrainz community manager, <a href="https://musicbrainz.org/user/Freso">Freso Olesen</a>, approached me to mentor for Google Code-In. <a href="https://codein.withgoogle.com/">Google Code-In</a> is an opportunity for teenagers to meaningfully contribute to open source projects. Google describes Google Code-In as…</p>
<blockquote>
<p>Pre-university students ages 13 to 17 are invited to take part in Google Code-in: Our global, online contest introducing teenagers to the world of open source development. With a wide variety of bite-sized tasks, it’s easy for beginners to jump in and get started no matter what skills they have.</p>
<p>Mentors from our participating organizations lend a helping hand as participants learn what it’s like to work on an open source project. Participants get to work on real software and win prizes from t-shirts to a trip to Google HQ!</p>
</blockquote>
<p>MetaBrainz is a participating organization of Google Code-In this cycle. Because of my work with ListenBrainz, I will contribute a few hours a week to help mentor participating students with ListenBrainz. Beginner problems should be easy to help with since I&rsquo;m still beginning too, and as I spend more time with ListenBrainz, I can help with harder problems.</p>
<p>I&rsquo;m excited to give back to one of my favorite open source projects in this way! I&rsquo;m grateful to have this chance to help out during Google Code-In.</p>

<h2 id="choosing-easyfix-bugs">Choosing easyfix bugs&nbsp;<a class="hanchor" href="#choosing-easyfix-bugs" aria-label="Anchor link for: Choosing easyfix bugs">🔗</a></h2>
<p>After I figured out the development environment issues, I went through <a href="https://tickets.metabrainz.org/projects/LB/issues/">open tickets</a> filed against ListenBrainz to find some to work on. I made a preliminary pass through all open tickets and left some comments for more information, when needed. The tickets I highlighted to look into next were</p>
<ul>
<li><a href="https://tickets.metabrainz.org/browse/LB-85"><strong>LB-85</strong></a>: Username in the profile URL should be case insensitive</li>
<li><a href="https://tickets.metabrainz.org/browse/LB-124"><strong>LB-124</strong></a>: Install messybrainz as a a python library from requirements</li>
<li><a href="https://tickets.metabrainz.org/browse/LB-176"><strong>LB-176</strong></a>: Add stats module and begin calculating some user stats from BigQuery</li>
<li><strong><a href="https://tickets.metabrainz.org/browse/LB-206">LB-206</a></strong>: &ldquo;playing_now&rdquo; submissions not showing on profile</li>
<li><a href="https://tickets.metabrainz.org/browse/LB-212"><strong>LB-212</strong></a>: Show the MetaBrainz logo on the listenbrainz footer.</li>
</ul>
<p>Of these five, LB-124 and LB-212 are already closed. While drafting this article, I completed LB-124 in <a href="https://github.com/metabrainz/listenbrainz-server/pull/266">PR #266</a>. This was part of a test to get the documentation building again because of odd import errors. Later, a new student also learning the project for the first time asked to work on LB-212. Since it was a good first task to explore the project code, I passed the ticket to him.</p>
<p>I want to do one more &ldquo;easyfix&rdquo; bug before going into the main part of my independent study timeline. I don&rsquo;t yet feel comfortable with the code and one more bug solved will help. After this, I plan to pursue the heavier lifting of the independent study to explore data operations and queries to make.</p>

<h2 id="researching-d3js">Researching D3.js&nbsp;<a class="hanchor" href="#researching-d3js" aria-label="Anchor link for: Researching D3.js">🔗</a></h2>
<p>Prof. Roberts introduced <a href="https://d3js.org/">D3.js</a> as a library to build interactive, dynamic charts and visual representations of data. I haven&rsquo;t yet looked into much front-end work, but this was a cool project that I wanted to highlight in my weekly report. This feels like it could be a powerful match for ListenBrainz, especially since the data has high detail.</p>

<h2 id="upcoming-activity">Upcoming activity&nbsp;<a class="hanchor" href="#upcoming-activity" aria-label="Anchor link for: Upcoming activity">🔗</a></h2>
<p>This next week, I won&rsquo;t have as much time to contribute to ListenBrainz. On October 21, I&rsquo;m traveling to Raleigh, NC for <a href="https://allthingsopen.org/">All Things Open</a>. On October 24, I <a href="https://allthingsopen.org/speakers/justin-w-flory/">present my talk</a>, &ldquo;<em>What open source and J.K. Rowling have in common</em>&rdquo;. Since I&rsquo;ll be out of Rochester and missing other classwork, I expect less time on my ListenBrainz work.</p>
<p>This next week will be slower than the last two weeks. Hopefully I&rsquo;ll learn something at the conference too to bring back for ListenBrainz.</p>
<p>Until then… keep the FOSS flag high.</p>]]></description></item><item><title>How to set up a ListenBrainz development environment</title><link>https://jwheel.org/blog/2017/10/listenbrainz-development-environment/</link><pubDate>Wed, 04 Oct 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/10/listenbrainz-development-environment/</guid><description><![CDATA[<p><em>This post is part of a series of posts where I contribute to the ListenBrainz project for my independent study at the Rochester Institute of Technology in the fall 2017 semester. For more posts, find them in <a href="https://jwfblog.wpenginepowered.com/tag/rit-2171/">this tag</a>.</em></p>
<hr>
<p>One of the first rites of passage when working on a new project is creating your development environment. It always seems simple, but sometimes there are bumps along the way. The first activity I did to begin contributing to ListenBrainz was create my development environment. I wasn&rsquo;t successful with the documentation in the README, so I had to play around and work with the project before I was even running it.</p>
<p>The first part of this post details how to set up your own development environment. Then, the second half talks about the solution I came up with and my first contribution back to the project.</p>

<h2 id="install-dependencies-docker">Install dependencies: Docker&nbsp;<a class="hanchor" href="#install-dependencies-docker" aria-label="Anchor link for: Install dependencies: Docker">🔗</a></h2>
<p>This tutorial assumes you are using a Linux distribution. If you&rsquo;re using a different operating system, install the necessary dependencies or packages with your preferred method.</p>
<p>ListenBrainz ships in Docker containers, which helps create your development environment and later deploy the application. Therefore, to work on the project, you need to install Docker and use containers for building the project. Containers save you from installing all of this on your own workstation! Since I&rsquo;m using Fedora, I run this command.</p>
<pre tabindex="0"><code>sudo dnf install docker docker-compose
</code></pre>
<h2 id="register-a-musicbrainz-application">Register a MusicBrainz application&nbsp;<a class="hanchor" href="#register-a-musicbrainz-application" aria-label="Anchor link for: Register a MusicBrainz application">🔗</a></h2>
<p>Next, you need to register your application and get a OAuth token from MusicBrainz. Using the OAuth token lets you sign into your development environment with your MusicBrainz account. Then, you can import your plays from somewhere else.</p>
<p>To register, visit the <a href="https://musicbrainz.org/account/applications">MusicBrainz applications page</a>. There, look for the option to <a href="https://musicbrainz.org/account/applications/register">register your application</a>. Fill out the form with these three options.</p>
<ul>
<li><strong>Name</strong>: (any name you want and will recognize, I used <code>listenbrainz-server-devel</code>)</li>
<li><strong>Type</strong>: <code>Web Application</code></li>
<li><strong>Callback URL</strong>: <code>http://localhost/login/musicbrainz/post</code></li>
</ul>
<p>After entering this information, you&rsquo;ll have a OAuth client ID and OAuth client secret. You&rsquo;ll use these for configuring ListenBrainz.</p>

<h4 id="update-configpy">Update config.py&nbsp;<a class="hanchor" href="#update-configpy" aria-label="Anchor link for: Update config.py">🔗</a></h4>
<p>With your new client ID and secret, update the ListenBrainz configuration file. If this is your first time configuring ListenBrainz, copy the sample to a live configuration.</p>
<pre tabindex="0"><code>cp listenbrainz/config.py.sample listenbrainz/config.py
</code></pre><p>Next, open the file with your favorite text editor and look for this section.</p>
<pre tabindex="0"><code># MusicBrainz OAuth
MUSICBRAINZ_CLIENT_ID = &#34;CLIENT_ID&#34;
MUSICBRAINZ_CLIENT_SECRET = &#34;CLIENT_SECRET&#34;
</code></pre><p>Update the strings with your client ID and secret. After doing this, your ListenBrainz development environment is able to authenticate and log in from your MusicBrainz login.</p>

<h2 id="initialize-listenbrainz-databases">Initialize ListenBrainz databases&nbsp;<a class="hanchor" href="#initialize-listenbrainz-databases" aria-label="Anchor link for: Initialize ListenBrainz databases">🔗</a></h2>
<p>Your development environment needs some databases present to work. Before proceeding, run these three commands to initialize the databases.</p>
<pre tabindex="0"><code>docker-compose -f docker/docker-compose.yml -p listenbrainz run --rm web python3 manage.py init_db --create-db
docker-compose -f docker/docker-compose.yml -p listenbrainz run --rm web python3 manage.py init_msb_db --create-db
docker-compose -f docker/docker-compose.yml -p listenbrainz run --rm web python3 manage.py init_influx
</code></pre><p>Your development environment is now ready. Now, let&rsquo;s actually see ListenBrainz load locally!</p>

<h2 id="run-the-magic-script">Run the magic script&nbsp;<a class="hanchor" href="#run-the-magic-script" aria-label="Anchor link for: Run the magic script">🔗</a></h2>
<p>Once you have done this, run the <code>develop.sh</code> script in the root of the repository. Using <code>docker-compose</code>, the script creates multiple Docker containers for the different services and parts of the ListenBrainz server. Running this script will start Redis, PostgreSQL, InfluxDB, and web server containers, to name a few. But this also makes it easy to stop them all later.</p>
<pre tabindex="0"><code>./develop.sh
</code></pre><p>You will see the containers build and eventually run. Leave the script running to see your development environment. Later, you can shut it down by pressing <code>CTRL^C</code>. Once everything is running, visit your new site from your browser!</p>
<p><a href="http://localhost/">http://localhost/</a></p>
<p>Now, you are all set to begin making changes and testing them in your development environment!</p>

<h2 id="making-my-first-pull-request">Making my first pull request&nbsp;<a class="hanchor" href="#making-my-first-pull-request" aria-label="Anchor link for: Making my first pull request">🔗</a></h2>
<p>As mentioned earlier, my first attempt at a development environment was unsuccessful. My system kept denying permission to the processes in the containers. After looking at system audit logs and running a temporary <code>setenforce 0</code>, I tried the script one more time. Everything suddenly worked! So the issue was mostly with SELinux.</p>
<p>With my goal to get my environment set up, I figured out a few issues with the configuration offered by the project developers. I eventually made <a href="https://github.com/metabrainz/listenbrainz-server/pull/257">PR #257</a> against <code>listenbrainz-server</code> with my improvements.</p>

<h4 id="labeling-selinux-volume-mounts">Labeling SELinux volume mounts&nbsp;<a class="hanchor" href="#labeling-selinux-volume-mounts" aria-label="Anchor link for: Labeling SELinux volume mounts">🔗</a></h4>
<p>To diagnose the issue, I started with a quick search and found a <a href="https://stackoverflow.com/questions/24288616/permission-denied-on-accessing-host-directory-in-docker">StackOverflow question</a> with my same problem. There, the question was about Docker containers and denied permissions in the container. The answers explained it was an SELinux error and the context for the containers was not set. However, temporarily changing context for a directory didn&rsquo;t seem too effective and doesn&rsquo;t persist across reboots.</p>
<p>Continuing the search, I found an issue filed against <code>docker-compose</code> about the <code>:z</code> and <code>:Z</code> flags for volume mounts. These flags set SELinux context for containers, with the best explanation I found coming from <a href="https://stackoverflow.com/a/35222815/2497452">this StackOverflow answer</a>.</p>
<blockquote>
<p>Two suffixes :z or :Z can be added to the volume mount. These suffixes tell Docker to relabel file objects on the shared volumes. The &lsquo;z&rsquo; option tells Docker that the volume content will be shared between containers. Docker will label the content with a shared content label. Shared volumes labels allow all containers to read/write content. The &lsquo;Z&rsquo; option tells Docker to label the content with a private unshared label.</p>
</blockquote>
<p>Therefore, I added the <code>:z</code> flag to all the volume mounts in the <code>docker-compose.yml</code> file. I submitted a fix upstream for this in <a href="https://github.com/metabrainz/listenbrainz-server/pull/257">listenbrainz-server#257</a>!</p>

<h4 id="correct-the-startup-port">Correct the startup port&nbsp;<a class="hanchor" href="#correct-the-startup-port" aria-label="Anchor link for: Correct the startup port">🔗</a></h4>
<p>In the README, it says the server will start on port 8000, but the <code>docker-compose.yml</code> file actually started the server on port 80. I included a fix for this in <a href="https://github.com/metabrainz/listenbrainz-server/pull/257">my pull request</a> as well.</p>

<h2 id="git-push">git push!&nbsp;<a class="hanchor" href="#git-push" aria-label="Anchor link for: git push!">🔗</a></h2>
<p>This post makes a debugging experience that actually took hours look like it happened in minutes. But after getting over this hurdle, it was awesome to finally see ListenBrainz running locally on my workstation. It was an even better feeling when I could take my improvements and send them back in a pull request to ListenBrainz. Hopefully this will make it easier for others to create their own development environments and start hacking!</p>]]></description></item><item><title>Embracing open source cloud: Local government in Tirana switches to open source cloud solution</title><link>https://jwheel.org/blog/2017/08/tirana-switches-nextcloud/</link><pubDate>Tue, 22 Aug 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/08/tirana-switches-nextcloud/</guid><description><![CDATA[<p><a href="https://opensource.com/article/17/8/tirana-government-chooses-open-source"><em>This article was originally published on Opensource.com.</em></a></p>
<hr>
<p>Open source software has come a long way since the turn of the century. Each year, more and more people are embracing open source technology and development models. Not just people, though ­– corporations and governments are exploring open source solutions too. From the <a href="https://obamawhitehouse.archives.gov/blog/2016/03/09/leveraging-american-ingenuity-through-reusable-and-open-source-software">White House</a> to the <a href="http://www.zdnet.com/article/from-microsoft-to-libreoffice-how-italys-military-is-starting-its-march-to-open-source/">Italian army</a>, open source is appearing more frequently in the public sector. But perhaps the newest addition to the list is the municipality of <a href="https://en.wikipedia.org/wiki/Tirana">Tirana, Albania</a>.</p>
<p>On June 11th, the local government in the municipality of Tirana <a href="https://joinup.ec.europa.eu/community/osor/news/municipality-tirana-goes-free-open-source-using-nextcloud">migrated their private cloud</a> to <a href="https://nextcloud.com/">Nextcloud</a>, an open source cloud and office productivity suite. The decision to move to an integrated cloud / office suite came after internal discussion about security and performance. Because Nextcloud is entirely open source, it stood out as a powerful option for the municipality to consider.</p>

<h2 id="why-switch-to-nextcloud">Why switch to Nextcloud?&nbsp;<a class="hanchor" href="#why-switch-to-nextcloud" aria-label="Anchor link for: Why switch to Nextcloud?">🔗</a></h2>
<p>The municipality was looking for ways to optimize on costs without sacrificing security. Many people deeply familiar with open source are already aware of the <a href="https://opensource.com/business/15/5/why-open-source-means-stronger-security">security benefits</a> of using open source software. Instead of relying on a private firm to assure the code is secure, open source software benefits from letting anyone (or paying someone else) to audit the code, find flaws, and submit bugs or patches to get them fixed. This was something <a href="https://twitter.com/ermir_puka">Ermir Puka</a> and other members of the IT team in Tirana considered when choosing a cloud solution for the 600 employees of the municipality.</p>
<p>&ldquo;The IT directory at the municipality of Tirana thought the movement to Nextcloud, which is an open source platform, gives us flexibility since we won&rsquo;t be dependent from providers who offer proprietary solutions. We can also develop it ourself, according to our needs, if we have the staff with the necessary qualifications to do such a thing,&rdquo; Puka said.</p>
<p>Nextcloud also stood out not only for its use as a file sharing tool, but also the other features that make it helpful as an office productivity suite. With Nextcloud, you can edit documents simultaneously with <a href="https://apps.nextcloud.com/apps/richdocuments">Collabora Online</a>, share calendars with co-workers, use an intranet messaging system, and use it <a href="https://nextcloud.com/install/">on your phone</a> too. A large selection of <a href="https://apps.nextcloud.com/">open source apps</a> are available to add to an Nextcloud installation.</p>
<p>
<figure>
  <img src="/blog/2017/07/bashkia-tirane-open-data-launch.jpg" alt="The municipality of Tirana celebrates the launch of their open data portal, opendata.tirana.al" loading="lazy">
  <figcaption>The municipality of Tirana celebrates the launch of their open data portal, opendata.tirana.al (<a href="http://opendata.tirana.al/" class="bare">http://opendata.tirana.al/</a>). Photo from Twitter (<a href="https://twitter.com/erionveliaj/status/854941775412285440" class="bare">https://twitter.com/erionveliaj/status/854941775412285440</a>), @erionveliaj (<a href="https://twitter.com/erionveliaj" class="bare">https://twitter.com/erionveliaj</a>).</figcaption>
</figure>
</p>
<p>According to <a href="https://joinup.ec.europa.eu/community/osor/news/municipality-tirana-goes-free-open-source-using-nextcloud">European Commission Joinup</a>, Tirana is one of the first municipalities in southeastern Europe implementing open source technology in the public sector. This continues the municipality&rsquo;s growing interest in open source, following the recent announcement of their <a href="https://forum.openlabs.cc/t/open-data-portal-of-the-municipality-of-tirana/273">open data portal</a> (see it at <a href="http://opendata.tirana.al/">opendata.tirana.al</a>) and decision to collaborate with the local open source community by <a href="https://twitter.com/erionveliaj/status/855004144339496960">contributing GIS data to OpenStreetMaps</a>. &ldquo;We also hope to give a good example in the region and maybe other municipalities can follow our example,&rdquo; Puka added. This further shows the municipality&rsquo;s dedication to saving money on software licenses, protecting user privacy, and innovating by using open source technology.</p>

<h2 id="about-tirana">About Tirana&nbsp;<a class="hanchor" href="#about-tirana" aria-label="Anchor link for: About Tirana">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/07/open-labs-signing-gis-data-tirana.jpg" alt="Members of Open Labs Albania collaborating with the municipality of Tirana on providing GIS data for OpenStreetMaps" loading="lazy">
  <figcaption>Members of Open Labs Albania collaborating with the municipality of Tirana on providing GIS data for OpenStreetMaps. Photo from Twitter (<a href="https://twitter.com/erionveliaj/status/854941775412285440" class="bare">https://twitter.com/erionveliaj/status/854941775412285440</a>), @erionveliaj (<a href="https://twitter.com/erionveliaj" class="bare">https://twitter.com/erionveliaj</a>).</figcaption>
</figure>
</p>
<p>Tirana is located in Albania, in southeastern Europe, on the Mediterranean Sea just above Greece. The open source community in Tirana is growing each year. This is in part to the <a href="https://www.openlabs.cc/en/">Open Labs Albania</a> community in the city. Open Labs Albania is a not-for-profit hackerspace that promotes free and open source technologies, open data, open technological standards, and online privacy. You can read more about them in their <a href="https://wiki.openlabs.cc/faqja/Manifesto/en">manifesto</a>.</p>
<p>This continues a trend of exciting news for open source in the region. Earlier this year, the <a href="https://opensource.com/article/17/3/open-labs-48-hour-hackathon-albania">first-ever overnight hackathon</a> for the UN Sustainable Development Goals happened in March, with an emphasis on sustainable projects with open source licenses. They also host <a href="https://fedoramagazine.org/students-fedora-linux-weekend-2017/">Linux Weekend</a>, an annual mini-conference to help on-board students and interested technologists to Linux and open source. However, their most well-known event is <a href="https://oscal.openlabs.cc/">Open Source Conference Albania</a> (OSCAL), an annual conference gathering open source developers and community members from across the world. Together with the municipality, Open Labs has helped provide advice and support for some of the municipality&rsquo;s research into using open source software.</p>

<h2 id="get-in-touch">Get in touch&nbsp;<a class="hanchor" href="#get-in-touch" aria-label="Anchor link for: Get in touch">🔗</a></h2>
<p>If you&rsquo;re interested in learning more or sharing your thoughts, you can view the <a href="https://joinup.ec.europa.eu/community/osor/news/municipality-tirana-goes-free-open-source-using-nextcloud">public announcement</a> on the European Commission website or visit the <a href="https://forum.openlabs.cc/t/the-municipality-of-tirana-goes-free-open-source-by-using-nextcloud/503">thread</a> on the Open Labs forums.</p>]]></description></item><item><title>Introducing InfluxDB: Time-series database stack</title><link>https://jwheel.org/blog/2017/08/influxdb-time-series-database/</link><pubDate>Tue, 15 Aug 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/08/influxdb-time-series-database/</guid><description><![CDATA[<p><a href="https://opensource.com/article/17/8/influxdb-time-series-database-stack"><em>Article originally published on Opensource.com.</em></a></p>
<hr>
<p>The needs and demands of infrastructure environments changes every year. With time, systems become more complex and involved. But when infrastructure grows and becomes more complex, it&rsquo;s meaningless if we don&rsquo;t understand it and what&rsquo;s happening in our environment. This is why monitoring tools and software are often used in these environments, so operators and administrators see problems and fix them in real-time. But what if we want to predict problems before they happen? Collecting metrics and data about our environment give us a window into how our infrastructure is performing and lets us make predictions based on data. When we know and understand what&rsquo;s happening, we can prevent problems before they happen.</p>
<p>But how do we collect and store this data? For example, if we want to collect data on the CPU usage of 100 machines every ten seconds, we&rsquo;re generating a lot of data. On top of that, what if each machine is running fifteen containers? What if you want to generate data about each of those individual containers too? What about by the process? This is where time-series data becomes helpful. Time-series databases store time-series data. But what does that mean? We&rsquo;ll explain all of this and more and introduce you to InfluxDB, an open source time-series database. By the end of this article, you will understand…</p>
<ul>
<li>What time-series data / databases are</li>
<li>Quick introduction to InfluxDB and the TICK stack</li>
<li>How to install InfluxDB and other tools</li>
</ul>

<h2 id="introducing-time-series-concepts">Introducing time-series concepts&nbsp;<a class="hanchor" href="#introducing-time-series-concepts" aria-label="Anchor link for: Introducing time-series concepts">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/07/rbdms-table-example.gif" alt="Example of table, or how a RDBMS like MySQL stores data" loading="lazy">
  <figcaption>Example of table, or how a RDBMS like MySQL stores data. Image from DevShed (<a href="http://www.devshed.com/c/a/php/using-the-active-record-pattern-with-php-and-mysql/" class="bare">http://www.devshed.com/c/a/php/using-the-active-record-pattern-with-php-and-mysql/</a>).</figcaption>
</figure>
</p>
<p>If you&rsquo;re familiar with relational database management software (RDBMS), like MySQL, <a href="http://www.informit.com/articles/article.aspx?p=377067&amp;seqNum=3">tables, columns, and primary keys</a> are familiar terms. Everything is like a spreadsheet, with columns and rows. Some data might be unique, other parts might be the same as other rows. RBDMS&rsquo;s like MySQL are widely used and are great for <strong>reliable transactions</strong> that follow <a href="https://en.wikipedia.org/wiki/ACID">ACID</a> (Atomicity, Consistency, Isolation, Durability) compliance.</p>
<p>With relational database software, you&rsquo;re usually working with data that is something you could model in a table. You might update certain data by overwriting and replacing it. But what if you&rsquo;re collecting on data on something that generates a lot of data and you want to watch change over time? Take a self-driving car. The car is constantly collecting information about its environment. It takes this data and it analyzes changes over time to behave correctly. The amount of data might be tens of gigabytes an hour. While you could use a relational database to collect this data, they&rsquo;re not built for this. When it comes to scaling and usability of the data you&rsquo;re collecting, an RBDMS isn&rsquo;t the best tool for the job.</p>

<h4 id="why-time-series-is-a-good-fit">Why time-series is a good fit&nbsp;<a class="hanchor" href="#why-time-series-is-a-good-fit" aria-label="Anchor link for: Why time-series is a good fit">🔗</a></h4>
<p>And this is where time-series data makes sense. Let&rsquo;s say you&rsquo;re collecting data about a city traffic, temperature from farming equipment, or the production rate of an assembly line. Instead of going into a table with rows and columns, imagine pushing multiple rows of data that are uniquely sorted by a timestamp. This visual might help make more sense of this.</p>
<p>
<figure>
  <img src="/blog/2017/07/picture-the-cloud.gif" alt="Imagine rows and rows of data, uniquely sorted by timestamps" loading="lazy">
  <figcaption>Imagine rows and rows of data, uniquely sorted by timestamps. Image from Timescale (<a href="https://blog.timescale.com/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563" class="bare">https://blog.timescale.com/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563</a>).</figcaption>
</figure>
</p>
<p>Having the data in this format makes it easier to track and watch change over time. When data accumulates, you can see how something behaved in the past, how it&rsquo;s behaving now, and how it might behave in the future. Your options to make smarter data decisions expands!</p>
<p>Curious how the data is stored and formatted? It depends on the time-series database (TSDB) you use. InfluxDB stores the data in the <a href="https://docs.influxdata.com/influxdb/v1.3/write_protocols/line_protocol_tutorial/">Line Protocol</a> format. <a href="https://docs.influxdata.com/influxdb/v1.3/tools/api/#query">Queries</a> return the data in JSON.</p>
<p>
<figure>
  <img src="/blog/2017/07/influxdb-data-format.jpg" alt="How InfluxDB stores time-series data in JSON" loading="lazy">
  <figcaption>How InfluxDB stores time-series data in Line Protocol (<a href="https://docs.influxdata.com/influxdb/v1.3/write_protocols/line_protocol_tutorial/" class="bare">https://docs.influxdata.com/influxdb/v1.3/write_protocols/line_protocol_tutorial/</a>). Image from Roberto Gaudenzi (<a href="https://www.slideshare.net/RobertoGaudenzi1/introduction-to-influx-db" class="bare">https://www.slideshare.net/RobertoGaudenzi1/introduction-to-influx-db</a>).</figcaption>
</figure>
</p>
<p>If you&rsquo;re still confused or trying to understand time-series data or why you would want to use it over another solution, you can read an excellent, in-depth explanation from <a href="https://blog.timescale.com/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563">Timescale&rsquo;s blog</a> or <a href="https://www.influxdata.com/modern-time-series-platform/">InfluxData&rsquo;s blog</a>.</p>

<h2 id="influxdb-a-time-series-database">InfluxDB: A time-series database&nbsp;<a class="hanchor" href="#influxdb-a-time-series-database" aria-label="Anchor link for: InfluxDB: A time-series database">🔗</a></h2>
<p><a href="https://www.influxdata.com/time-series-platform/influxdb/">InfluxDB</a> is an open source time-series database software developed by <a href="https://www.influxdata.com/">InfluxData</a>. It&rsquo;s written in Go (a compiled language), which means you can start using it without installing any dependencies. It supports multiple data ingestion protocols, such as <a href="https://www.influxdata.com/time-series-platform/telegraf/">Telegraf</a> (also from InfluxData), <a href="https://graphiteapp.org/">Graphite</a>, <a href="https://collectd.org/">collectd</a>, and <a href="http://opentsdb.net/">OpenTSDB</a>. This leaves you with flexible options for how you want to collect data and where you&rsquo;re pulling it from. It&rsquo;s also one of the <a href="https://db-engines.com/en/ranking/time&#43;series&#43;dbms">fastest-growing</a> time-series database software available. You can find the source code for InfluxDB on <a href="https://github.com/influxdata/influxdb">GitHub</a>.</p>
<p>This article will focus on three tools in InfluxData&rsquo;s TICK stack for how you can build a time-series database and begin collecting and processing data.</p>

<h4 id="tick-stack">TICK stack&nbsp;<a class="hanchor" href="#tick-stack" aria-label="Anchor link for: TICK stack">🔗</a></h4>
<p>InfluxData creates a platform based on four open source projects that work and play well with each other for time-series data. When used together, you can collect, store, process, and view the data easily. The four pieces of the platform are known as the <a href="https://www.influxdata.com/time-series-platform/">TICK stack</a>. This stands for…</p>
<ul>
<li><strong>_T_elegraf</strong>: Plugin-driven server agent for collecting / reporting metrics</li>
<li><strong>_I_nfluxDB</strong>: Scalable data store for metrics, events, and real-time analytics</li>
<li><strong>_C_hronograf</strong>: Monitoring / visualization UI for TICK stack (not covered in this article)</li>
<li><strong>_K_apacitor</strong>: Framework for processing, monitoring, and alerting on time-series data</li>
</ul>
<p>These tools work and integrate well with the other pieces by design. However, it&rsquo;s also easy to substitute one piece out for another tool of your choice. For this article, we&rsquo;ll explore three parts of the TICK stack: InfluxDB, Telegraf, and Kapacitor.</p>
<p>
<figure>
  <img src="/blog/2017/07/tick-stack-diagram.png" alt="Diagram of how the different components of the InfluxDB TICK stack connect with each other" loading="lazy">
  <figcaption>Diagram of how the different components of the TICK stack connect with each other. From influxdata.com (<a href="https://www.influxdata.com/time-series-platform/" class="bare">https://www.influxdata.com/time-series-platform/</a>).</figcaption>
</figure>
</p>

<h4 id="influxdb"><a href="https://docs.influxdata.com/influxdb/">InfluxDB</a>&nbsp;<a class="hanchor" href="#influxdb" aria-label="Anchor link for: InfluxDB">🔗</a></h4>
<p>As mentioned before, InfluxDB is the time-series database (TSDB) of the TICK stack. Data collected from your environment is stored into InfluxDB. There are a few things that stand out about InfluxDB from other time-series databases.</p>

<h6 id="emphasis-on-performance">Emphasis on performance&nbsp;<a class="hanchor" href="#emphasis-on-performance" aria-label="Anchor link for: Emphasis on performance">🔗</a></h6>
<p>InfluxDB is designed with performance as one of the top priorities. This allows you to use data quickly and easily, even under heavy loads. To do this, InfluxDB focuses on quickly ingesting the data and using compression to keep it manageable. To query and write data, it uses an HTTP(S) API.</p>
<p>The performance notes are noteworthy standing up the amount of data InfluxDB is capable of handling. It can handle up to a million points of data per second, at a precise level even to the nanosecond.</p>

<h6 id="sql-like-queries">SQL-like queries&nbsp;<a class="hanchor" href="#sql-like-queries" aria-label="Anchor link for: SQL-like queries">🔗</a></h6>
<p>If you&rsquo;re familiar with SQL-like syntax, querying data from InfluxDB will feel familiar. It uses its own SQL-like syntax, <a href="https://docs.influxdata.com/influxdb/v1.3/query_language">InfluxQL</a>, for queries. As an example, imagine you&rsquo;re collecting data on used disk space on a machine. If you wanted to see that data, you could write a query that might look like this.</p>
<pre tabindex="0"><code>SELECT mean(diskspace_used) as mean_disk_used
FROM disk_stats
WHERE time() &gt;= 3m
GROUP BY time(10d)
</code></pre><p>If you&rsquo;re familiar with SQL syntax, this won&rsquo;t feel too different. The above statement will pull the mean values of used disk space from a three-month period and group them by every ten days.</p>

<h6 id="downsampling--data-retention">Downsampling / data retention&nbsp;<a class="hanchor" href="#downsampling--data-retention" aria-label="Anchor link for: Downsampling / data retention">🔗</a></h6>
<p>When working with large amounts of data, storing it becomes a concern. Over time, it can accumulate to huge sizes. With InfluxDB, you can <strong>downsample</strong> into less precise, but smaller metrics that you can store for longer periods of time. <strong>Data retention policies</strong> for your data enable you to do this.</p>
<p>For example, pretend you have sensors collecting data on the amount of RAM in a number of machines. You might collect metrics on the amount of memory in use by multiple users, the system, cached memory, and more. While it might make sense to hang on to that data for thirty days to watch what&rsquo;s happening, after thirty days, you might not need it that precise. Instead, you might only want the ratio of total memory to memory in use. Using data retention policies, you can tell InfluxDB to hang on to the precise data for all the different usages for thirty days. After thirty days, you can average data to be less precise, and you can hold on to that data for six months, forever, or however long you like. This compromise meets in the middle between keeping historical data and reducing disk usage.</p>

<h4 id="telegraf"><a href="https://docs.influxdata.com/telegraf/">Telegraf</a>&nbsp;<a class="hanchor" href="#telegraf" aria-label="Anchor link for: Telegraf">🔗</a></h4>
<p>If InfluxDB is where all of your data is going, you need a way to collect and gather the data first. Telegraf is a metric collection daemon that gathers various metrics from system components, IoT sensors, and more. It&rsquo;s <a href="https://github.com/influxdata/telegraf">open source</a> and written completely in Go. Like InfluxDB, Telegraf is also written by the InfluxData team and is built to work with InfluxDB. It also includes support for different databases, such as MySQL / MariaDB, MongoDB, Redis, and more. You can read more about it on <a href="https://www.influxdata.com/time-series-platform/telegraf/">InfluxData&rsquo;s website</a>.</p>
<p>Telegraf is modular and heavily based on plugins. This means that Telegraf is either lean and minimal or as full and complex as you need it. Out of the box, it supports over a hundred plugins for various input sources. This includes Apache, Ceph, Docker, IPTables, Kubernetes, NGINX, and Varnish, just to name a few. You can see all the plugins, including processing and output plugins in their <a href="https://github.com/influxdata/telegraf#input-plugins">README</a>.</p>
<p>Even if you&rsquo;re not using InfluxDB as a data store, you may find Telegraf useful as a way to collect this data and information about your systems or sensors.</p>

<h4 id="kapacitor"><a href="https://docs.influxdata.com/kapacitor/">Kapacitor</a>&nbsp;<a class="hanchor" href="#kapacitor" aria-label="Anchor link for: Kapacitor">🔗</a></h4>
<p>Now we have a way to collect and store our data. But what about doing things with it? Kapacitor is the piece of the stack that lets you process and work with the data in a few different ways. It supports both stream and batch data. Stream data means you can actively work and shape the data in real-time, even before it makes it to your data store. Batch data means you retroactively perform actions on samples, or batches, of the data.</p>
<p>One of the biggest pluses for Kapacitor is that it enables you to have real-time alerts for events happening in your environment. CPU usage overloading or temperatures too high? You can set up several different alert systems, including but not limited to email, triggering a command, Slack, HipChat, OpsGenie, and many more. You can see the full list in the <a href="https://docs.influxdata.com/kapacitor/v1.3/nodes/alert_node/">documentation</a>.</p>
<p>Like the previous tools, Kapacitor is also <a href="https://github.com/influxdata/kapacitor">open source</a> and you can read more about the project in their <a href="https://github.com/influxdata/kapacitor/blob/master/README.md">README</a>.</p>

<h2 id="installing-the-tick-stack">Installing the TICK stack&nbsp;<a class="hanchor" href="#installing-the-tick-stack" aria-label="Anchor link for: Installing the TICK stack">🔗</a></h2>
<p>Packages are available for nearly every distribution. You can install these packages from the command line. Use the instructions for your distribution.</p>

<h4 id="fedora">Fedora&nbsp;<a class="hanchor" href="#fedora" aria-label="Anchor link for: Fedora">🔗</a></h4>
<pre tabindex="0"><code>sudo dnf install https://dl.influxdata.com/influxdb/releases/influxdb-1.3.1.x86_64.rpm \
https://dl.influxdata.com/telegraf/releases/telegraf-1.3.4-1.x86_64.rpm \
https://dl.influxdata.com/kapacitor/releases/kapacitor-1.3.1.x86_64.rpm
</code></pre>
<h4 id="centos-7--rhel-7">CentOS 7 / RHEL 7&nbsp;<a class="hanchor" href="#centos-7--rhel-7" aria-label="Anchor link for: CentOS 7 / RHEL 7">🔗</a></h4>
<pre tabindex="0"><code>sudo yum install https://dl.influxdata.com/influxdb/releases/influxdb-1.3.1.x86_64.rpm \
https://dl.influxdata.com/telegraf/releases/telegraf-1.3.4-1.x86_64.rpm \
https://dl.influxdata.com/kapacitor/releases/kapacitor-1.3.1.x86_64.rpm
</code></pre>
<h4 id="ubuntu--debian">Ubuntu / Debian&nbsp;<a class="hanchor" href="#ubuntu--debian" aria-label="Anchor link for: Ubuntu / Debian">🔗</a></h4>
<pre tabindex="0"><code>wget https://dl.influxdata.com/influxdb/releases/influxdb_1.3.1_amd64.deb \
https://dl.influxdata.com/telegraf/releases/telegraf_1.3.4-1_amd64.deb \
https://dl.influxdata.com/kapacitor/releases/kapacitor_1.3.1_amd64.deb
sudo dpkg -i influxdb_1.3.1_amd64.deb telegraf_1.3.4-1_amd64.deb kapacitor_1.3.1_amd64.deb
</code></pre>
<h4 id="other-distributions">Other distributions&nbsp;<a class="hanchor" href="#other-distributions" aria-label="Anchor link for: Other distributions">🔗</a></h4>
<p>For help with other distributions, see the <a href="https://portal.influxdata.com/downloads">Downloads</a> page.</p>

<h2 id="see-the-data-be-the-data">See the data, be the data&nbsp;<a class="hanchor" href="#see-the-data-be-the-data" aria-label="Anchor link for: See the data, be the data">🔗</a></h2>
<p>Now that you have the tools installed, you can experiment with some of these tools. There&rsquo;s plenty of upstream documentation on all three projects. You can the docs here:</p>
<ul>
<li><a href="https://docs.influxdata.com/influxdb/">InfluxDB documentation</a></li>
<li><a href="https://docs.influxdata.com/telegraf/">Telegraf documentation</a></li>
<li><a href="https://docs.influxdata.com/kapacitor/">Kapacitor documentation</a></li>
</ul>
<p>Additionally, for more help, you can visit the <a href="https://community.influxdata.com/">InfluxData community forums</a>. Happy hacking!</p>]]></description></item><item><title>IRC for the 21st century: introducing Riot</title><link>https://jwheel.org/blog/2017/08/riot-matrix-irc/</link><pubDate>Tue, 08 Aug 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/08/riot-matrix-irc/</guid><description><![CDATA[<p><a href="https://opensource.com/article/17/5/introducing-riot-IRC"><em>This article was originally published on Opensource.com.</em></a></p>
<hr>
<p><a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">Internet Relay Chat</a>, or IRC, is one of the oldest chat protocols around and still popular in many open source communities. IRC&rsquo;s best strengths are as a decentralized and open communication method, making it easy for anyone to participate by running a network of their own. There&rsquo;s also a variety of clients and bots available for IRC. But on the reverse side, usability is a concern. Most common user interfaces for IRC clients or platforms aren&rsquo;t always intuitive. People from parts of the world with unstable Internet connections are challenged with remaining connected to participate in conversation. Many people have tried addressing this problem before, but none have come as far as Riot.</p>

<h2 id="what-is-riot">What is Riot?&nbsp;<a class="hanchor" href="#what-is-riot" aria-label="Anchor link for: What is Riot?">🔗</a></h2>
<p><a href="https://riot.im/">Riot</a> is a free, open source, and multi-platform client based on the <a href="https://matrix.org/">Matrix</a> protocol. To understand better, think of Matrix as the protocol and Riot as the client. Matrix is a decentralized, secure, messaging protocol. It has the benefit of using HTTP / JSON APIs, is capable of sending and receiving messages with full end-to-end encryption, WebRTC VoIP / video calling, and maybe most importantly, integration capabilities. Matrix was built to integrate with IRC servers and other communication protocols, meaning you can use the Riot client as an <a href="https://opensource.com/article/17/4/never-leave-irc-again">IRC bouncer</a>. You can read more of the details on what separates Matrix from Riot <a href="https://matrix.org/docs/guides/faq.html#what-is-the-difference-between-matrix-and-irc">on their FAQ</a>.</p>
<p>As a result, Riot becomes most useful in its implementation as the default Matrix client. It&rsquo;s convenient and decentralized, as anyone is able to launch their own Matrix &ldquo;homeserver&rdquo; and connect it with Riot. However, Matrix by default has servers bridged with <a href="https://freenode.net/">Freenode</a>, <a href="https://wiki.mozilla.org/IRC#Connect_to_the_Mozilla_IRC_server">Mozilla IRC</a>, and more. This lets you use Riot as a persistent client that keeps you connected to IRC even when you&rsquo;re not there.</p>
<p>
<figure>
  <img src="/blog/2017/03/intro-riot-01-logged-in.png" alt="Riot desktop application on Fedora Linux using Matrix" loading="lazy">
  <figcaption>Riot desktop application</figcaption>
</figure>
</p>
<p>Outside of the web application, you can also find it as a <a href="https://riot.im/desktop.html">desktop application</a> for Mac, Windows, and Linux, or a mobile application for iOS and Android. In this guide, you&rsquo;ll learn how to get started using Riot as a full-time messaging client with the default Matrix / IRC integration servers.</p>

<h2 id="register-and-get-a-client">Register and get a client&nbsp;<a class="hanchor" href="#register-and-get-a-client" aria-label="Anchor link for: Register and get a client">🔗</a></h2>
<p>First, you&rsquo;ll need to grab an account from Riot&rsquo;s website. Registration is straightforward and shouldn&rsquo;t take you much time. You can find the registration form <a href="https://riot.im/app/">here</a>. Once you&rsquo;re registered and have confirmed your email, you&rsquo;ll need to get the Riot applications on your devices of choice.</p>

<h4 id="desktop-clients">Desktop clients&nbsp;<a class="hanchor" href="#desktop-clients" aria-label="Anchor link for: Desktop clients">🔗</a></h4>
<p>There are desktop clients available for Windows, macOS, and Linux. If you&rsquo;re running Windows or macOS, you can download the right version for your desktop on the <a href="https://riot.im/desktop.html">Riot downloads</a> page. If you&rsquo;re using Debian, Ubuntu, or a related operating system, you can add a repository to your system to install the Riot desktop client. You can read <a href="http://data.agaric.com/how-install-riot-desktop-matrix-client-debian-based-systems">this guide</a> on how to add the repository and install Riot to your system.</p>

<h5 id="fedora">Fedora&nbsp;<a class="hanchor" href="#fedora" aria-label="Anchor link for: Fedora">🔗</a></h5>
<p>Riot is not yet officially packaged in Fedora&rsquo;s repositories. However, there is a <a href="https://copr.fedorainfracloud.org/coprs/taw/Riot/">third-party Copr repository</a> where the desktop application is packaged. Until it makes it into Fedora&rsquo;s repositories, you can use this version to get started with Riot. You can find the Copr project and install instructions <a href="https://copr.fedorainfracloud.org/coprs/taw/Riot/">here</a>.</p>

<h4 id="mobile-clients">Mobile clients&nbsp;<a class="hanchor" href="#mobile-clients" aria-label="Anchor link for: Mobile clients">🔗</a></h4>
<p>Want to have Riot integrated on your phone or prefer a mobile client? You can also find official versions of Riot on <a href="https://itunes.apple.com/us/app/vector.im/id1083446067">iOS</a>, <a href="https://play.google.com/store/apps/details?id=im.vector.alpha">Google Play Store</a>, and <a href="https://f-droid.org/repository/browse/?fdid=im.vector.alpha">F-Droid</a>. Using any of the mobile clients will integrate fully with a desktop client, if you choose to use both. This guide will focus more on the desktop clients.</p>

<h2 id="setting-up-freenode-in-riot">Setting up Freenode in Riot&nbsp;<a class="hanchor" href="#setting-up-freenode-in-riot" aria-label="Anchor link for: Setting up Freenode in Riot">🔗</a></h2>
<p>Riot currently supports eight IRC networks: Freenode, Moznet, Snoonet, OFTC, GIMPNet, Foonetic, Rizon, and EsperNet. Although you can use any network you like and the instructions will mostly be the same, this guide focuses on using <a href="https://freenode.net">Freenode</a>.</p>

<h4 id="joining-your-first-channel">Joining your first channel&nbsp;<a class="hanchor" href="#joining-your-first-channel" aria-label="Anchor link for: Joining your first channel">🔗</a></h4>
<p>One of the first things you&rsquo;ll see after signing into Riot is the directory. In the directory, you can search through chat rooms on Matrix itself or any of the other IRC servers that are integrated. To join your first channel, you can select the IRC channel of choice in the dropdown menu and search for a channel.</p>
<p>For example, if we want to find <code>#opensource.com</code> on Freenode, you can select the Freenode option and search for <code>#opensource.com</code>. Once it&rsquo;s there, you can join and say hello to the rest of the Opensource.com community hanging out in IRC.</p>
<p>
<figure>
  <img src="/blog/2017/03/intro-riot-05-join-opensource.com_.png" alt="Searching for #opensource.com on Freenode from Matrix / Riot client" loading="lazy">
  <figcaption>Searching for #opensource.com on Freenode from Riot client</figcaption>
</figure>
</p>
<p>Alternatively, if you would prefer directly joining a room, you can type the following as a command from any chat window in Riot.</p>
<pre tabindex="0"><code>/join #freenode_#channelname:matrix.org
</code></pre>
<h4 id="setting-your-irc-nick">Setting your IRC nick&nbsp;<a class="hanchor" href="#setting-your-irc-nick" aria-label="Anchor link for: Setting your IRC nick">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2017/03/intro-riot-07-message-appservice.png" alt="Send a message to @appservice-irc:matrix.org to change your IRC nick in Matrix / Riot" loading="lazy">
  <figcaption>Send a message to <code>@appservice-irc:matrix.org</code> to change your IRC nick</figcaption>
</figure>
</p>
<p>By default, your IRC nick, or username, will be similar to your display name in Riot. Sometimes it will have a <code>[m]</code> appended to the end. However, after you connect to a channel, you can <a href="https://github.com/matrix-org/matrix-appservice-irc/blob/master/HOWTO.md#changing-nicks">change your nick</a> on the IRC side as well. You&rsquo;ll need to start a new conversation with the IRC integration bot between Riot and Freenode.</p>
<p>In the bottom left corner of your Riot client, you can start a new personal chat with any user. To message the IRC integration bot, start a new chat with <code>@appservice-irc:matrix.org</code>. This will put you and the bot together in a private chat. To change your nick, send the following command to the bot:</p>
<pre tabindex="0"><code>!nick irc.freenode.net &lt;IRC nick&gt;
</code></pre><p>You should receive a confirmation message, similar to: &ldquo;<em>Nick changed from &lsquo;OldNick&rsquo; to &lsquo;NewNick.&rsquo;</em>&rdquo; For more help, you can read the <a href="https://github.com/matrix-org/matrix-appservice-irc/blob/master/HOWTO.md#changing-nicks">official documentation</a> on changing your nick.</p>

<h4 id="authenticating-with-nickserv">Authenticating with NickServ&nbsp;<a class="hanchor" href="#authenticating-with-nickserv" aria-label="Anchor link for: Authenticating with NickServ">🔗</a></h4>
<p>One of the other vital functions you might need to do is authenticate with NickServ. This is especially important if you want to use your registered IRC nick or are a member of invite-only channels. However, it&rsquo;s possible to do this too.</p>
<p>You&rsquo;ll need to start another direct chat again. This time, you can search for the user <code>@freenode_NickServ:matrix.org</code>. This will put you into a private message with NickServ on Freenode&rsquo;s servers. To authenticate, you can send a message just like you normally would.</p>
<pre tabindex="0"><code>IDENTIFY &lt;username&gt; &lt;password&gt;
</code></pre><p>After doing this, you should receive the normal confirmation that you are now logged in as your account. Remember to use caution when opening this chat in a public place, as your password will be displayed in plaintext whenever you open that direct message with NickServ.</p>

<h2 id="say-hello">Say hello!&nbsp;<a class="hanchor" href="#say-hello" aria-label="Anchor link for: Say hello!">🔗</a></h2>
<p>Once you&rsquo;ve joined a channel, claimed your nick, and authenticated with NickServ, you will be all set to begin using Riot. In any channel bridged in IRC with Matrix, all of your messages from Riot will show up in the IRC channel. Riot can also act like an IRC bouncer that keeps you persistently connected. Whenever you open Riot, you will be able to see a log of past discussions even if you weren&rsquo;t connected to the Internet.</p>
<p>Both Matrix and Riot are open source projects. You can find <a href="https://github.com/matrix-org">Matrix&rsquo;s code</a> and <a href="https://github.com/vector-im">Riot&rsquo;s code</a> on GitHub. If you want to better understand how the integration bridge works, you can read <a href="https://matrix.org/blog/2017/03/14/an-adventure-in-irc-land/">this blog post</a> by one of the developers.</p>
<p>Have any comments or stories to share about using Riot? Are you already using it for IRC? Share your comments with us down below!</p>]]></description></item><item><title>Sign at the line: Deploying an app to CoreOS Tectonic</title><link>https://jwheel.org/blog/2017/08/deploying-app-tectonic/</link><pubDate>Fri, 04 Aug 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/08/deploying-app-tectonic/</guid><description><![CDATA[<p><em>This is a short series to introduce Kubernetes, what it does, and how to experiment with it on Fedora. This is a beginner-oriented series to help introduce some higher level concepts and give examples of using it on Fedora. In the first post, we covered <a href="https://fedoramagazine.org/introduction-kubernetes-fedora/">key concepts in Kubernetes</a>. The second post showed how to build a <a href="https://fedoramagazine.org/minikube-kubernetes/">single-node Kubernetes deployment</a> on your own computer. The last post and this post build on top of the Fedora Magazine series. The third post introduced how to <a href="https://jwfblog.wpenginepowered.com/2017/07/tectonic-amazon-web-services-aws/">deploy CoreOS Tectonic</a> to Amazon Web Services (AWS). This fourth post teaches how to deploy a simple web application to your Tectonic installation.</em></p>
<hr>
<p>Welcome back to the <strong>Kubernetes and Fedora</strong> series. Each week, we build on the previous articles in the series to help introduce you to using Kubernetes. This article picks up from where we left off last when you installed Tectonic to Amazon Web Services (AWS). By the end of this article, you will…</p>
<ul>
<li>Start up <a href="https://redis.io/">Redis</a> master and slave pods</li>
<li>Start a front-end pod that interacts with the Redis pods</li>
<li>Deploy a simple web app for all of your friends to leave you messages</li>
</ul>
<p>Compared to previous articles, this article will be a little more hands-on. Also like before, this is based off an excellent tutorial in the <a href="https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook">upstream Kubernetes documentation</a>. Let&rsquo;s get started!</p>

<h2 id="pre-requisites">Pre-requisites&nbsp;<a class="hanchor" href="#pre-requisites" aria-label="Anchor link for: Pre-requisites">🔗</a></h2>
<p>This tutorial assumes you followed the <a href="https://fedoramagazine.org/minikube-kubernetes/">Minikube how-to</a> earlier in this series and that you already <a href="https://fedoramagazine.org/tectonic-amazon-web-services-aws/">have a Tectonic installation</a> running (doesn&rsquo;t have to be on AWS). In case you&rsquo;re jumping in now, make sure you have the Kubernetes client tools installed on your Fedora system, like <code>kubectl</code>. If not, you can install them now.</p>
<pre tabindex="0"><code>$ sudo dnf install kubernetes-client
</code></pre>
<h2 id="configure-kubectl-for-tectonic">Configure <code>kubectl</code> for Tectonic&nbsp;<a class="hanchor" href="#configure-kubectl-for-tectonic" aria-label="Anchor link for: Configure kubectl for Tectonic">🔗</a></h2>
<p>To use <code>kubectl</code> with your Tectonic installation, you need to have a valid configuration in <code>~/.kube/config</code> for your cluster. This is how <code>kubectl</code> knows where and how to talk to Tectonic. To get these values, first log into the Tectonic Console you installed.</p>
<ol>
<li>Click <em>username</em> (usually <em>admin</em>) &gt; <em>My Account</em> on the bottom left.</li>
<li>Click <em>Download Configuration</em>.</li>
<li>When the <em>Set Up kubectl</em> window opens, click <em>Verify Identity</em>.</li>
<li>Enter your username and password, and click <em>Login</em>.</li>
<li>From the <em>Login Successful</em> screen, copy the provided code.</li>
<li>Switch back to Tectonic and enter the code in the field.</li>
</ol>
<p>Now you will be able to download <code>kubectl-config</code> from Tectonic. There&rsquo;s two ways to proceed from here.</p>

<h4 id="add-a-new-configuration">Add a new configuration&nbsp;<a class="hanchor" href="#add-a-new-configuration" aria-label="Anchor link for: Add a new configuration">🔗</a></h4>
<p>If this is your first time using <code>kubectl</code>, your configuration is likely empty. If it&rsquo;s empty or you don&rsquo;t care about overwriting an old configuration, you can run the following commands to add the configuration.</p>
<pre tabindex="0"><code>$ mkdir ~/.kube/
$ mv ~/Downloads/minikube-config ~/.kube/config
$ chmod 600 ~/.kube/config
</code></pre>
<h4 id="append-to-an-existing-configuration">Append to an existing configuration&nbsp;<a class="hanchor" href="#append-to-an-existing-configuration" aria-label="Anchor link for: Append to an existing configuration">🔗</a></h4>
<p>If you already have a configuration, like from Minikube, you might not want to wipe it all out. In this case, you can merge the files manually together. You&rsquo;ll need to copy the <code>clusters</code>, <code>users</code>, and <code>contexts</code> from the Tectonic configuration into your existing one. The benefit of doing this is that you&rsquo;ll be able to change contexts to switch from one cluster to another.</p>

<h4 id="test-your-configuration">Test your configuration&nbsp;<a class="hanchor" href="#test-your-configuration" aria-label="Anchor link for: Test your configuration">🔗</a></h4>
<p>Once you finished your configuration, test to see if it works.</p>
<pre tabindex="0"><code>$ kubectl config use-context tectonic       # if you have multiple contexts in config
$ kubectl get nodes
NAME                                        STATUS    AGE
ip-10-0-0-59.us-east-2.compute.internal     Ready     1d
ip-10-0-23-239.us-east-2.compute.internal   Ready     1d
ip-10-0-44-211.us-east-2.compute.internal   Ready     1d
ip-10-0-61-218.us-east-2.compute.internal   Ready     1d
ip-10-0-67-239.us-east-2.compute.internal   Ready     1d
ip-10-0-95-51.us-east-2.compute.internal    Ready     1d
</code></pre><p>Huzzah! Now we&rsquo;re ready to get to work.</p>

<h2 id="getting-the-deployment-and-service-files">Getting the deployment and service files&nbsp;<a class="hanchor" href="#getting-the-deployment-and-service-files" aria-label="Anchor link for: Getting the deployment and service files">🔗</a></h2>
<p>All of the example files come from the official Kubernetes GitHub repo. You can find them in the <a href="https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook">Guestbook example</a>. To get started, create a new directory and download all of the files.</p>
<pre tabindex="0"><code>$ wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/examples/guestbook/redis-{master,slave}-{deployment,service}.yaml \
       https://raw.githubusercontent.com/kubernetes/kubernetes/master/examples/guestbook/frontend-{deployment,service}.yaml
</code></pre><p>We&rsquo;ll explain what all of these do in next steps. All of these next steps will start with the command to run, followed by a short explanation of what&rsquo;s actually happening.</p>

<h2 id="start-the-redis-master">Start the Redis master&nbsp;<a class="hanchor" href="#start-the-redis-master" aria-label="Anchor link for: Start the Redis master">🔗</a></h2>
<pre tabindex="0"><code>$ kubectl create -f redis-master-service.yaml
service &#34;redis-master&#34; created
$ kubectl create -f redis-master-deployment.yaml
deployment &#34;redis-master&#34; created
</code></pre>
<h4 id="define-the-deployment">Define the deployment&nbsp;<a class="hanchor" href="#define-the-deployment" aria-label="Anchor link for: Define the deployment">🔗</a></h4>
<p>The <code>redis-master-deployment.yaml</code> file downloaded earlier defines the deployment and its characteristics. In this case, we have one pod that runs the Redis master in a container. Since we&rsquo;re using a deployment, that means if our pod goes down, Kubernetes will <strong>spin up a new pod</strong> to replace it. Worth noting in this example, if the pod <em>did</em> go down, there would be a potential for data loss until the new one replaces the old one (since the Redis master is not highly available, i.e. there are multiple).</p>

<h4 id="define-the-service">Define the service&nbsp;<a class="hanchor" href="#define-the-service" aria-label="Anchor link for: Define the service">🔗</a></h4>
<p>Our service in this example is a <strong>named load balancer</strong> that <strong>proxies traffic</strong> across one or many containers. Even though we only have one Redis master pod, we still want to use a service. This is a deterministic way of making the route to the master with a dynamic (or elastic) IP address.</p>
<p>Labeling the pods is important in this case, as Kubernetes will use the pods&rsquo; labels to determine which pods receive the traffic sent to the service, and load balance it accordingly.</p>

<h4 id="create-the-service">Create the service&nbsp;<a class="hanchor" href="#create-the-service" aria-label="Anchor link for: Create the service">🔗</a></h4>
<p>The next important step is to create the service. Note that we&rsquo;re doing this <em>before</em> we create the deployment. It&rsquo;s best practice to create the service first. This allows the scheduler to later spread the service across the deployments you create to support your application.</p>
<p>After creating the service, you can check its status by running this command. You should see similar output.</p>
<pre tabindex="0"><code>$ kubectl get services
NAME              CLUSTER-IP       EXTERNAL-IP       PORT(S)       AGE
redis-master      10.0.76.248      &lt;none&gt;            6379/TCP      1s
</code></pre><p>Now your Redis master serivce is up and running! The next step will be to create the Redis master deployment.</p>
<p>If you look at the service configuration file, you&rsquo;ll notice <code>port</code> and <code>targetPort</code> are two defined variables. Once everything is up and running, these will be important for determining how the traffic from the slaves to the masters is routed.</p>
<ol>
<li>Redis slave connects to <code>port</code> on Redis master service</li>
<li>Traffic forwarded from service&rsquo;s <code>port</code> to <code>targetPort</code> on pod the service listens to</li>
</ol>

<h4 id="create-the-deployment">Create the deployment&nbsp;<a class="hanchor" href="#create-the-deployment" aria-label="Anchor link for: Create the deployment">🔗</a></h4>
<p>Next, we created the Redis master pod in the cluster. To see our deployment and pods, we can run the following commands to see what was created.</p>
<pre tabindex="0"><code>$ kubectl get deployments
NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
redis-master   1         1         1            1           27s
</code></pre><pre tabindex="0"><code>$ kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
redis-master-2353460263-1ecey   1/1       Running   0          1m
...
</code></pre><p>You should see all of the pods in your cluster so far. For now, that&rsquo;s just the Redis master. Let&rsquo;s give it some friends!</p>

<h2 id="start-the-redis-slaves">Start the Redis slaves&nbsp;<a class="hanchor" href="#start-the-redis-slaves" aria-label="Anchor link for: Start the Redis slaves">🔗</a></h2>
<pre tabindex="0"><code>$ kubectl create -f redis-slave-service.yaml
service &#34;redis-slave&#34; created
$ kubectl create -f redis-slave-deployment.yaml
deployment &#34;redis-slave&#34; created
</code></pre>
<h4 id="defining-the-deployment">Defining the deployment&nbsp;<a class="hanchor" href="#defining-the-deployment" aria-label="Anchor link for: Defining the deployment">🔗</a></h4>
<p>In the configuration file, we defined two replicas, unlike the master. By doing this, it tells Kubernetes that the minimum number of pods that should always be running is two. If one of your pods goes down, Kubernetes automatically creates a new one to support the application. If you want, you can try killing the Docker process for one of your pods to see it happen in real time.</p>

<h2 id="start-the-guestbook-front-end">Start the guestbook front-end&nbsp;<a class="hanchor" href="#start-the-guestbook-front-end" aria-label="Anchor link for: Start the guestbook front-end">🔗</a></h2>
<pre tabindex="0"><code>$ kubectl create -f frontend-service.yaml
service &#34;frontend&#34; created
$ kubectl create -f frontend-deployment.yaml
deployment &#34;frontend&#34; created
</code></pre><p>The front-end is a PHP application with an AJAX interface and Angular-based UI. When using the form on the front-end application, it talks to the Redis master or slave, depending on if it&rsquo;s reading or writing to Redis. Again, we&rsquo;re deploying the front-end with multiple replicas. In this case, there will be three pods to support the front-end.</p>

<h2 id="say-hello">Say hello!&nbsp;<a class="hanchor" href="#say-hello" aria-label="Anchor link for: Say hello!">🔗</a></h2>
<p>Once you&rsquo;ve finished deploying everything, your web app should now be accessible! To get the full domain from AWS, run this command to figure out where to look.</p>
<pre tabindex="0"><code>$ kubectl get deploy/frontend svc/frontend -o wide
NAME           CLUSTER-IP   EXTERNAL-IP                                                             PORT(S)        AGE       SELECTOR
svc/frontend   10.3.0.175   aaebd8247ef2311e6a045021d1620193-54019671.us-east-2.elb.amazonaws.com   80:31020/TCP   1m        k8s-app=guestbook,tier=frontend

NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/frontend   3         3         3            3           1m
</code></pre><p>Congratulations, we&rsquo;re all finished!</p>

<h2 id="cleaning-up">Cleaning up&nbsp;<a class="hanchor" href="#cleaning-up" aria-label="Anchor link for: Cleaning up">🔗</a></h2>
<p>Once you&rsquo;re finished or when you want to stop running the guestbook, it&rsquo;s easy to get rid of the deployments and services we created. Using labels, all the deployments and services can be deleted with one command.</p>
<pre tabindex="0"><code>$ kubectl delete deployments,services -l &#34;app in (redis, guestbook)&#34;
</code></pre><p>And now your guestbook application is offline. (It was nice while it lasted!)</p>

<h2 id="learn-more-about-kubernetes-and-tectonic">Learn more about Kubernetes and Tectonic&nbsp;<a class="hanchor" href="#learn-more-about-kubernetes-and-tectonic" aria-label="Anchor link for: Learn more about Kubernetes and Tectonic">🔗</a></h2>
<p>If you want to explore more about Kubernetes, you can read some of the earlier articles in this series. You can also read the original tutorial published by Kubernetes <a href="https://github.com/kubernetes/kubernetes/tree/master/examples/guestbook">on GitHub</a>. Additionally, the upstream documentation for <a href="https://kubernetes.io/docs/home/">Kubernetes</a> and <a href="https://coreos.com/tectonic/docs/latest/">Tectonic</a> is thorough and can help answer more advanced questions.</p>
<p>Questions, Tectonic stories, or tips for beginners? Add your comments below.</p>]]></description></item><item><title>Deploy CoreOS Tectonic to Amazon Web Services (AWS)</title><link>https://jwheel.org/blog/2017/07/tectonic-amazon-web-services-aws/</link><pubDate>Fri, 28 Jul 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/07/tectonic-amazon-web-services-aws/</guid><description><![CDATA[<p><em>This is a short series to introduce Kubernetes, what it does, and how to experiment with it on Fedora. This is a beginner-oriented series to help introduce some higher level concepts and give examples of using it on Fedora. In the first post, we covered <a href="https://fedoramagazine.org/introduction-kubernetes-fedora/">key concepts in Kubernetes</a>. The second post showed how to build a <a href="https://fedoramagazine.org/minikube-kubernetes/">single-node Kubernetes deployment</a> on your own computer. This post builds on top of the Fedora Magazine series by showing how to deploy CoreOS Tectonic to Amazon Web Services (AWS).</em></p>
<hr>
<p>Welcome back to the <strong>Kubernetes and Fedora</strong> series. Each week, we build on the previous articles in the series to help introduce you to using Kubernetes. This article takes off from running Kubernetes on your own hardware and moves us one step closer to the cloud. By the end of this article, you will…</p>
<ul>
<li>Understand what CoreOS Tectonic is</li>
<li>Set up Amazon Web Services (AWS) for Tectonic</li>
<li>Deploy Tectonic to AWS</li>
</ul>
<p>This article is also based off of the excellent tutorial provided in the <a href="https://coreos.com/tectonic/docs/latest/tutorials/creating-aws.html">CoreOS documentation</a>. Let&rsquo;s get started!</p>

<h2 id="what-is-tectonic">What is Tectonic?&nbsp;<a class="hanchor" href="#what-is-tectonic" aria-label="Anchor link for: What is Tectonic?">🔗</a></h2>
<p>In the <a href="https://fedoramagazine.org/introduction-kubernetes-fedora/">first article</a>, some of the key concepts of Kubernetes and why it&rsquo;s useful were explained. Kubernetes automates the deployment and setting up of your infrastructure across the three layers (users, masters, nodes). If you&rsquo;re working on your own at a small scale, Kubernetes itself can be plenty to meet your needs. However, there is still a decent amount of human involvement in managing the different pieces of Kubernetes. If you&rsquo;re working with multiple people in a team and across different environments, vanilla Kubernetes can be a lot to manage. For an enterprise environment, there&rsquo;s still some unmet needs. This is where Tectonic steps in.</p>
<p>Tectonic is a commercial product offered by <a href="https://coreos.com/">CoreOS</a>, the providers of <a href="https://coreos.com/os/docs/latest">Container Linux</a> and the original developers of <code>etcd</code>, now one of the core components of Kubernetes. Tectonic takes all of the open source components and pre-packages them. The self-proclaimed goal of doing this is to let anyone build a Google-style infrastructure into a cloud or on-premise environment. The outcome for the user is that it&rsquo;s easy to install a Kubernetes infrastructure across many different environments. In addition to simplifying the installation of the various components of a Kubernetes stack, Tectonic also provides a management console, a container registry for building and sharing containers, additional tools for deployment, and a few other nice features.</p>
<p>If we think about Kubernetes as a cake like we did before with three layers, Tectonic is like the box you set it in. Now, you can take your cake anywhere, move it around, and stack it with other cakes-in-a-box. All of your cakes are in their own boxes and you don&rsquo;t have to worry about them accidentally being damaged. If you&rsquo;re still a little confused, this diagram might help make more sense of it.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/06/platform-features.png" alt="Understanding where CoreOS Tectonic fits into the Kubernetes puzzle" loading="lazy">
  <figcaption>Understanding where Tectonic fits into the Kubernetes puzzle. From coreos.com/tectonic (<a href="https://coreos.com/tectonic/" class="bare">https://coreos.com/tectonic/</a>)</figcaption>
</figure>
</p>
<p>Fortunately, Tectonic has a free license that lets you use it for ten nodes. In this example, we&rsquo;ll register, get a free license, and deploy it into AWS.</p>
<p>(<em>Note</em>: If you want to revert anything we do in this example, there&rsquo;s an easy way to dismantle it across AWS and bring your bill to $0.00.)</p>

<h2 id="pre-requisites">Pre-requisites&nbsp;<a class="hanchor" href="#pre-requisites" aria-label="Anchor link for: Pre-requisites">🔗</a></h2>
<p>In order to successfully run this guide, there&rsquo;s a few things you&rsquo;ll need first.</p>
<ul>
<li><strong>Amazon Web Services (AWS) account</strong> (<em>free</em>)
<ul>
<li>Register <a href="https://aws.amazon.com">here</a></li>
</ul>
</li>
<li><strong>CoreOS Tectonic account and license</strong> (<em>free</em>)
<ul>
<li>Register <a href="https://account.coreos.com/">here</a></li>
</ul>
</li>
<li><strong>A root-level or sub-domain</strong> (<em>e.g. example.com or k8s.example.com</em>)
<ul>
<li>If you look around, you can probably find some for less than USD$1 a year if you need one</li>
</ul>
</li>
<li><strong>Curiosity</strong>!</li>
</ul>

<h2 id="setting-up-dns-with-route-53">Setting up DNS with Route 53&nbsp;<a class="hanchor" href="#setting-up-dns-with-route-53" aria-label="Anchor link for: Setting up DNS with Route 53">🔗</a></h2>
<p>The first things we&rsquo;ll do is set up our domain with Route 53 in AWS. Route 53 can do a lot of things, like DNS management, traffic management, availability monitoring, domain registration, and more. However, we&rsquo;re only going to be using it for DNS management. Tectonic will use this to automatically provision DNS records for internal and external use.</p>

<h4 id="add-your-domain">Add your domain&nbsp;<a class="hanchor" href="#add-your-domain" aria-label="Anchor link for: Add your domain">🔗</a></h4>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/06/tectonic-add-domain-route-53-283x300.png" alt="Adding a new domain to AWS Route 53 for Tectonic" loading="lazy">
  <figcaption>Adding a new domain to AWS Route 53 for Tectonic</figcaption>
</figure>
</p>
<p>To add your domain to Route 53, follow these steps from AWS.</p>
<ol>
<li>From <em>Services</em>, select <em>Networking &amp; Content Delivery</em> &gt; <em>Route 53</em>.</li>
<li>Select <em>Hosted zones</em> from the left pane and click <em>Create Hosted Zone</em>.</li>
<li>Enter your domain or sub-domain, add a comment if you want, and choose a Public Zone for the type.</li>
</ol>
<p>Once you&rsquo;ve done this, you can go ahead and click &ldquo;<em>Create</em>&rdquo;.</p>

<h4 id="change-the-nameservers">Change the nameservers&nbsp;<a class="hanchor" href="#change-the-nameservers" aria-label="Anchor link for: Change the nameservers">🔗</a></h4>
<p>After adding the hosted zone to Route 53, you&rsquo;ll need to change the nameservers for your domain via the domain registrar (whoever you bought the domain from). Usually it should be easy to find this, but it varies among registrars. If you&rsquo;re having a hard figuring out how to do this, try searching for a how-to or contacting your registrar&rsquo;s support.</p>
<p>After you added the hosted zone, you should see the nameservers in Route 53. There will be four nameservers provided there. You can copy and paste them from Route 53 to your domain registrar. Also note that if you&rsquo;re using a subdomain, the instructions might be a little different. You can read how to do this in the <a href="https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html">Route 53 documentation</a>.</p>
<p>The nameservers could take minutes or hours to update, depending on how lucky you are. If you&rsquo;re impatient and want to check, open up a terminal and run this command. If you see the AWS nameservers in the output, then your domain has propagated and is now usable by Route 53.</p>
<pre tabindex="0"><code>dig -t ns &lt;example.com&gt;
</code></pre>
<h2 id="configuring-ec2-with-ssh-key-pair">Configuring EC2 with SSH key pair&nbsp;<a class="hanchor" href="#configuring-ec2-with-ssh-key-pair" aria-label="Anchor link for: Configuring EC2 with SSH key pair">🔗</a></h2>
<p>This guide assumes you already have an SSH key pair created on your system. If you don&rsquo;t have one generated, you can read how to generate one <a href="https://www.cyberciti.biz/faq/how-to-set-up-ssh-keys-on-linux-unix/">here</a>.</p>
<p>The next step for us is to add an SSH key pair to EC2, one of the compute engine products offered by AWS. We&rsquo;ll import an existing key on your system into EC2.</p>
<ol>
<li>From AWS, go to <em>Services</em> &gt; <em>Compute</em> &gt; <em>EC2</em>.</li>
<li>Confirm that you are in the <strong>correct EC2 region</strong> by checking the location next to your name in the menu bar.</li>
<li>Under <em>Network &amp; Security</em>, click <em>Key Pairs</em>.</li>
<li>Click <em>Import Key Pair</em>.</li>
<li>Either upload your public key file (<code>~/.ssh/id_rsa.pub</code>) or paste it into the text field. Don&rsquo;t forget to give it a name.</li>
</ol>
<p>And that&rsquo;s all you need to do!</p>

<h2 id="assigning-aws-user-privileges">Assigning AWS user privileges&nbsp;<a class="hanchor" href="#assigning-aws-user-privileges" aria-label="Anchor link for: Assigning AWS user privileges">🔗</a></h2>
<p>Tectonic does the magic of setting up AWS for you, so you don&rsquo;t have to manually add and create the services from the web interface. In order to do this, you need to add a user account that Tectonic can use to do all of the provisioning it needs. To do this, you&rsquo;ll need to create a new Access ID and Secret key pair from AWS.</p>
<ol>
<li>Select <em>Services</em> &gt; <em>Security, Identity &amp; Compliance</em> &gt; <em>IAM</em>.</li>
<li>From the left hand pane, click <em>Users</em>, then click <em>Add user</em>.</li>
<li>Set the user details:
<ol>
<li><em>User name</em> can be anything you like (I used <code>tectonic-mydomain.com</code>)</li>
<li><em>Access type</em> only needs to be <em>Programmatic access</em></li>
</ol>
</li>
<li>For permissions, click <em>Add user to group</em> and create a new group for your user.</li>
<li>When creating a new group, attach only the policies needed by Tectonic to operate correctly:
<ol>
<li><code>AmazonEC2FullAccess</code></li>
<li><code>IAMFullAccess</code></li>
<li><code>AmazonS3FullAccess</code></li>
<li><code>AmazonVPCFullAccess</code></li>
<li><code>AmazonRoute53FullAccess</code></li>
</ol>
</li>
<li>Finish creating the user. You&rsquo;ll then see the <em>Access key ID</em> and <em>Secret access key</em>. Hold onto these, you&rsquo;ll need them later. You won&rsquo;t get to see the secret key again!</li>
</ol>
<p>Now we&rsquo;re ready to install Tectonic! Let&rsquo;s grab your credentials next.</p>

<h2 id="download-tectonic-credentials">Download Tectonic credentials&nbsp;<a class="hanchor" href="#download-tectonic-credentials" aria-label="Anchor link for: Download Tectonic credentials">🔗</a></h2>
<p>Jump back over to the <a href="https://account.coreos.com/">CoreOS accounts page</a>. When you&rsquo;re logged in, you&rsquo;ll see the <em>Account Assets</em> area. Download the CoreOS license file and pull secret. Later on in the installer, you&rsquo;ll need to insert these to finish the installation.</p>

<h2 id="running-the-installer">Running the installer&nbsp;<a class="hanchor" href="#running-the-installer" aria-label="Anchor link for: Running the installer">🔗</a></h2>
<p>Now things get interesting! We finally get to install and deploy Tectonic into AWS. The installer takes the form of a graphical installer in your web browser. To use the installer, you need to download the binary and run it. If you&rsquo;re curious, you can find the installer source code <a href="https://github.com/coreos/tectonic-installer">on GitHub</a>.</p>

<h4 id="download-and-run-installer">Download and run installer&nbsp;<a class="hanchor" href="#download-and-run-installer" aria-label="Anchor link for: Download and run installer">🔗</a></h4>
<p>First, open up a new terminal window and navigate to a directory you want to download the installer to. Even though you likely won&rsquo;t need to run the installer again, you will want to hang on to this if you ever want to easily dismantle everything in AWS later.</p>
<pre tabindex="0"><code>curl -O https://releases.tectonic.com/tectonic-1.6.4-tectonic.1.tar.gz
</code></pre><p>Next, extract the tarball and navigate into the directory.</p>
<pre tabindex="0"><code>tar -xzvf tectonic-1.6.4-tectonic.1.tar.gz
cd tectonic/tectonic-installer
</code></pre><p>Now execute the installer binary. After running this, a new browser window will open that features the graphical installer.</p>
<pre tabindex="0"><code>./linux/installer
</code></pre><p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/06/tectonic-installer-aws.png" alt="Now we&rsquo;re ready to deploy Tectonic into AWS!" loading="lazy">
  <figcaption>Now we’re ready to deploy Tectonic into AWS!</figcaption>
</figure>
</p>

<h4 id="running-the-installer-1">Running the installer&nbsp;<a class="hanchor" href="#running-the-installer-1" aria-label="Anchor link for: Running the installer">🔗</a></h4>
<p>The installer is thorough and assumes safe defaults for most of the steps. Be sure to have your AWS Access and Secret ID keys on hand. You should be able to run through the installer without issue. If you&rsquo;re confused about what any of the values mean or want to make custom changes, you can read more in the <a href="https://coreos.com/tectonic/docs/latest/tutorials/installing-tectonic.html">upstream documentation</a>.</p>
<p>Once you&rsquo;re finished, congrats! You&rsquo;ve successfully installed Tectonic!</p>

<h2 id="check-out-your-tectonic-install">Check out your Tectonic install&nbsp;<a class="hanchor" href="#check-out-your-tectonic-install" aria-label="Anchor link for: Check out your Tectonic install">🔗</a></h2>
<p>Once you finish the installation successfully, your Tectonic installation will be accessible within AWS. You can navigate to the domain you specified during the install to find it. Unless you added a CA authority and certificates, your browser will probably complain about invalid SSL certificates, but you can ignore the warning safely. It might also take a few minutes before the URL is accessible, so if you were looking for a coffee or tea break, now would be a good time!</p>
<p>Once you&rsquo;re logged in, you should see something like this.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/06/tectonic-status-page.png" alt="Looking at a freshly installed Tectonic status page on AWS" loading="lazy">
  <figcaption>Looking at a freshly installed Tectonic status page on AWS</figcaption>
</figure>
</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/06/prometheus-monitoring.png" alt="A more advanced use case of what Tectonic can do with monitoring" loading="lazy">
  <figcaption>A more advanced use case of what Tectonic can do with monitoring</figcaption>
</figure>
</p>

<h2 id="blow-it-all-away">Blow it all away!&nbsp;<a class="hanchor" href="#blow-it-all-away" aria-label="Anchor link for: Blow it all away!">🔗</a></h2>
<p>If you&rsquo;re like me, you might be frustrated by guides that tell you how to install things but not how to take it all apart. Fortunately, this guide not only tells you how to do that, but the Tectonic installer also makes it super easy to do. If you&rsquo;re sure that you&rsquo;re done with Tectonic and don&rsquo;t want any leftovers to remain in AWS, this is the best way to do it, instead of deleting everything manually from the AWS Console.</p>
<p>Every installation has a time-stamped folder in the <code>tectonic</code> directory we used earlier. First, you need to navigate into the specific folder for the cluster you installed. It&rsquo;s important to be inside of this directory first.</p>
<pre tabindex="0"><code>cd tectonic/tectonic-installer/linux/clusters/&lt;CLUSTERNAME&gt;
</code></pre><p><code>&lt;CLUSTERNAME&gt;</code> will be the time-stamped directory. Once you&rsquo;re in the folder, run this command to trigger the uninstaller. After running this, you&rsquo;ll see the installer slowly dismantle everything and delete any leftovers in AWS.</p>
<pre tabindex="0"><code>../../terraform destroy
</code></pre><p>Once it finishes, you should see an output message confirming how many AWS resources were destroyed. And now you&rsquo;re back to where you started.</p>

<h2 id="learn-more-about-tectonic">Learn more about Tectonic&nbsp;<a class="hanchor" href="#learn-more-about-tectonic" aria-label="Anchor link for: Learn more about Tectonic">🔗</a></h2>
<p>If you thought this was exciting and want to learn more, there is no shortage of resources for you to read. You can learn more about Tectonic from the <a href="https://coreos.com/tectonic/">CoreOS website</a> or the <a href="https://tectonic.com/blog/announcing-tectonic/">original release announcement</a>. You can also dig into the installer&rsquo;s source code <a href="https://github.com/coreos/tectonic-installer">on GitHub</a>. If you&rsquo;re still trying to wrap your head around Tectonic, there&rsquo;s a good write-up <a href="https://virtualizationreview.com/articles/2017/04/04/coreos-tectonic-to-shake-up-kubernetes.aspx">on virtualizationreview.com</a>.</p>
<p>Next week, we&rsquo;ll install a simple guestbook application to our Tectonic installation to see how it all works and what you can do with it. Stay tuned!</p>
<p>Questions, Tectonic stories, or tips for beginners? Add your comments below.</p>]]></description></item><item><title>Clustered computing on Fedora with Minikube</title><link>https://jwheel.org/blog/2017/07/minikube-kubernetes/</link><pubDate>Fri, 07 Jul 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/07/minikube-kubernetes/</guid><description><![CDATA[<p><em><strong>This article was originally published <a href="https://fedoramagazine.org/minikube-kubernetes/">on the Fedora Magazine</a>.</strong></em></p>
<hr>
<p><em>This is a short series to introduce Kubernetes, what it does, and how to experiment with it on Fedora. This is a beginner-oriented series to help introduce some higher level concepts and give examples of using it on Fedora. In the first post, we covered <a href="https://fedoramagazine.org/introduction-kubernetes-fedora/">key concepts in Kubernetes</a>. This second post shows you how to build a single-node Kubernetes deployment on your own computer.</em></p>
<hr>
<p>Once you have a better understanding of what the key concepts and terminology in Kubernetes are, getting started is easier. Like many programming tutorials, this tutorial shows you how to build a &ldquo;Hello World&rdquo; application and deploy it locally on your computer using Kubernetes. This is a simple tutorial because there aren&rsquo;t multiple nodes to work with. Instead, the only device we&rsquo;re using is a single node (a.k.a. your computer). By the end, you&rsquo;ll see how to deploy a Node.js application into a Kubernetes pod and manage it with a deployment on Fedora.</p>
<p>This tutorial isn&rsquo;t made from scratch. You can find the <a href="https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/">original tutorial</a> in the official Kubernetes documentation. This article adds some changes that will let you do the same thing on your own Fedora computer.</p>

<h2 id="introducing-minikube">Introducing Minikube&nbsp;<a class="hanchor" href="#introducing-minikube" aria-label="Anchor link for: Introducing Minikube">🔗</a></h2>
<p><a href="https://kubernetes.io/docs/getting-started-guides/minikube/">Minikube</a> is an official tool developed by the Kubernetes team to help make testing it out easier. It lets you run a single-node Kubernetes cluster through a virtual machine on your own hardware. Beyond using it to play around with or experiment for the first time, it&rsquo;s also useful as a testing tool if you&rsquo;re working with Kubernetes daily. It does support many of the features you&rsquo;d want in a production Kubernetes environment, like DNS, NodePorts, and container run-times.</p>

<h2 id="installation">Installation&nbsp;<a class="hanchor" href="#installation" aria-label="Anchor link for: Installation">🔗</a></h2>
<p>This tutorial requires virtual machine and container software. There are many options you can use. Minikube supports <code>virtualbox</code>, <code>vmwarefusion</code>, <code>kvm</code>, and <code>xhyve</code> drivers for virtualization. However, this guide will use KVM since it&rsquo;s already packaged and available in Fedora. We&rsquo;ll also use Node.js for building the application and Docker for putting it in a container.</p>

<h4 id="pre-requirements">Pre-requirements&nbsp;<a class="hanchor" href="#pre-requirements" aria-label="Anchor link for: Pre-requirements">🔗</a></h4>
<p>You can install the prerequisites with this command.</p>
<pre tabindex="0"><code>$ sudo dnf install kubernetes libvirt-daemon-kvm kvm nodejs docker
</code></pre><p>After installing these packages, you&rsquo;ll need to add your user to the right group to let you use KVM. The following commands will add your user to the group and then update your current session for the group change to take effect.</p>
<pre tabindex="0"><code>$ sudo usermod -a -G libvirt $(whoami)
$ newgrp libvirt
</code></pre>
<h4 id="docker-kvm-drivers">Docker KVM drivers&nbsp;<a class="hanchor" href="#docker-kvm-drivers" aria-label="Anchor link for: Docker KVM drivers">🔗</a></h4>
<p>If using KVM, you will also need to install the KVM drivers to work with Docker. You need to add <a href="https://github.com/docker/machine/releases">Docker Machine</a> and the <a href="https://github.com/dhiltgen/docker-machine-kvm/releases/">Docker Machine KVM Driver</a> to your local path. You can check their pages on GitHub for the latest versions, or you can run the following commands for specific versions. These were tested on a Fedora 25 installation.</p>

<h5 id="docker-machine">Docker Machine&nbsp;<a class="hanchor" href="#docker-machine" aria-label="Anchor link for: Docker Machine">🔗</a></h5>
<pre tabindex="0"><code>$ curl -L https://github.com/docker/machine/releases/download/v0.12.0/docker-machine-`uname -s`-`uname -m` &gt;/tmp/docker-machine
$ chmod +x /tmp/docker-machine
$ sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
</code></pre>
<h5 id="docker-machine-kvm-driver">Docker Machine KVM Driver&nbsp;<a class="hanchor" href="#docker-machine-kvm-driver" aria-label="Anchor link for: Docker Machine KVM Driver">🔗</a></h5>
<p>This installs the CentOS 7 driver, but it also works with Fedora.</p>
<pre tabindex="0"><code>$ curl -L https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-centos7 &gt;/tmp/docker-machine-driver-kvm
$ chmod +x /tmp/docker-machine-driver-kvm
$ sudo cp /tmp/docker-machine-driver-kvm /usr/local/bin/docker-machine-driver-kvm
</code></pre>
<h4 id="installing-minikube">Installing Minikube&nbsp;<a class="hanchor" href="#installing-minikube" aria-label="Anchor link for: Installing Minikube">🔗</a></h4>
<p>The final step for installation is getting Minikube itself. Currently, there is no package in Fedora available, and official documentation recommends grabbing the binary and moving it your local path. To download the binary, make it executable, and move it to your path, run the following.</p>
<pre tabindex="0"><code>$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ chmod +x minikube
$ sudo mv minikube /usr/local/bin/
</code></pre><p>Now you&rsquo;re ready to build your cluster.</p>

<h2 id="create-the-minikube-cluster">Create the Minikube cluster&nbsp;<a class="hanchor" href="#create-the-minikube-cluster" aria-label="Anchor link for: Create the Minikube cluster">🔗</a></h2>
<p>Now that you have everything installed and in the right place, you can create your Minikube cluster and get started. To start Minikube, run this command.</p>
<pre tabindex="0"><code>$ minikube start --vm-driver=kvm
</code></pre><p>Next, you&rsquo;ll need to set the context. Context is how <code>kubectl</code> (the command-line interface for Kubernetes) knows what it&rsquo;s dealing with. To set the context for Minikube, run this command.</p>
<pre tabindex="0"><code>$ kubectl config use-context minikube
</code></pre><p>As a check, make sure that <code>kubectl</code> can communicate with your cluster by running this command.</p>
<pre tabindex="0"><code>$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
To further debug and diagnose cluster problems, use &#39;kubectl cluster-info dump&#39;.
</code></pre>
<h2 id="build-your-application">Build your application&nbsp;<a class="hanchor" href="#build-your-application" aria-label="Anchor link for: Build your application">🔗</a></h2>
<p>Now that Kubernetes is ready, we need to have an application to deploy in it. This article uses the same Node.js application as the official tutorial in the Kubernetes documentation. Create a folder called <code>hellonode</code> and create a new file called <code>server.js</code> with your favorite text editor.</p>
<pre tabindex="0"><code>var http = require(&#39;http&#39;);

var handleRequest = function(request, response) {
 console.log(&#39;Received request for URL: &#39; + request.url);
 response.writeHead(200);
 response.end(&#39;Hello world!&#39;);
};
var www = http.createServer(handleRequest);
www.listen(8080);
</code></pre><p>Now try running your application and running it.</p>
<pre tabindex="0"><code>$ node server.js
</code></pre><p>While it&rsquo;s running, you should be able to access it on <a href="http://localhost:8080/">localhost:8080</a>. Once you verify it&rsquo;s working, hit <code>Ctrl+C</code> to kill the process.</p>

<h2 id="create-docker-container">Create Docker container&nbsp;<a class="hanchor" href="#create-docker-container" aria-label="Anchor link for: Create Docker container">🔗</a></h2>
<p>Now you have an application to deploy! The next step is to get it packaged into a Docker container (that you&rsquo;ll pass to Kubernetes later). You&rsquo;ll need to create a <code>Dockerfile</code> in the same folder as your <code>server.js</code> file. This guide uses an existing Node.js Docker image. It exposes your application on port 8080, copies <code>server.js</code> to the image, and runs it as a server. Your <code>Dockerfile</code> should look like this.</p>
<pre tabindex="0"><code>FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
</code></pre><p>If you&rsquo;re familiar with Docker, you&rsquo;re likely used to pushing your image to a registry. In this case, since we&rsquo;re deploying it to Minikube, you can build it using the same Docker host as the Minikube virtual machine. For this to happen, you&rsquo;ll need to use the Minikube Docker daemon.</p>
<pre tabindex="0"><code>$ eval $(minikube docker-env)
</code></pre><p>Now you can build your Docker image with the Minikube Docker daemon.</p>
<pre tabindex="0"><code>$ docker build -t hello-node:v1 .
</code></pre><p>Huzzah! Now you have an image Minikube can run.</p>

<h2 id="create-minikube-deployment">Create Minikube deployment&nbsp;<a class="hanchor" href="#create-minikube-deployment" aria-label="Anchor link for: Create Minikube deployment">🔗</a></h2>
<p>If you remember from the <a href="https://fedoramagazine.org/introduction-kubernetes-fedora/">first part</a> of this series, deployments watch your application&rsquo;s health and reschedule it if it dies. Deployments are the supported way of creating and scaling pods. <code>kubectl run</code> creates a deployment to manage a pod. We&rsquo;ll create one that uses the <code>hello-node</code> Docker image we just built.</p>
<pre tabindex="0"><code>$ kubectl run hello-node --image=hello-node:v1 --port=8080
</code></pre><p>Next, check that the deployment was created successfully.</p>
<pre tabindex="0"><code>$ kubectl get deployments
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-node   1         1         1            1           30s
</code></pre><p>Creating the deployment also creates the pod where the application is running. You can view the pod with this command.</p>
<pre tabindex="0"><code>$ kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
hello-node-1644695913-k2314   1/1       Running   0          3
</code></pre><p>Finally, let&rsquo;s look at what the configuration looks like. If you&rsquo;re familiar with Ansible, the configuration files for Kubernetes also use easy-to-read YAML. You can see the full configuration with this command.</p>
<pre tabindex="0"><code>$ kubectl config view
</code></pre><p><code>kubectl</code> does many things. To read more about what you can do with it, you can read the <a href="https://kubernetes.io/docs/user-guide/kubectl-overview/">documentation</a>.</p>

<h2 id="create-service">Create service&nbsp;<a class="hanchor" href="#create-service" aria-label="Anchor link for: Create service">🔗</a></h2>
<p>Right now, the pod is only accessible inside of the Kubernetes pod with its internal IP address. To see it in a web browser, you&rsquo;ll need to expose it as a service. To expose it as a service, run this command.</p>
<pre tabindex="0"><code>$ kubectl expose deployment hello-node --type=LoadBalancer
</code></pre><p>The type was specified as a <code>LoadBalancer</code> because Kubernetes will expose the IP outside of the cluster. If you were running a load balancer in a cloud environment, this how you&rsquo;d provision an external IP address. However, in this case, it exposes your application as a service in Minikube. And now, finally, you get to see your application. Running this command will open a new browser window with your application.</p>
<pre tabindex="0"><code>$ minikube service hello-node
</code></pre><p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/06/minikube-hello-world-browser-e1497995645454.png" alt="Minikube: Exposing Hello Minikube application in browser" loading="lazy">
</figure>
</p>
<p>Congratulations, you deployed your first containerized application via Kubernetes! But now, what if you need to our small Hello World application?</p>

<h2 id="how-do-we-push-changes">How do we push changes?&nbsp;<a class="hanchor" href="#how-do-we-push-changes" aria-label="Anchor link for: How do we push changes?">🔗</a></h2>
<p>The time has come when you&rsquo;re ready to make an update and push it. Edit your <code>server.js</code> file and change &ldquo;Hello world!&rdquo; to &ldquo;Hello again, world!&rdquo;</p>
<pre tabindex="0"><code>response.end(&#39;Hello again, world!&#39;);
</code></pre><p>And we&rsquo;ll build another Docker image. Note the version bump.</p>
<pre tabindex="0"><code>$ docker build -t hello-node:v2 .
</code></pre><p>Next, you need to give Kubernetes the new image to deploy.</p>
<pre tabindex="0"><code>$ kubectl set image deployment/hello-node hello-node=hello-node:v2
</code></pre><p>And now, your update is pushed! Like before, run this command to have it open in a new browser window.</p>
<pre tabindex="0"><code>$ minikube service hello-node
</code></pre><p>If your application doesn&rsquo;t come up any different, double-check that you updated the right image. You can troubleshoot by getting a shell into your pod by running the following command. You can get the pod name from the command run earlier (<code>kubectl get pods</code>). Once you&rsquo;re in the shell, check if the <code>server.js</code> file shows your changes.</p>
<pre tabindex="0"><code>$ kubectl exec -it &lt;pod-name&gt; bash
</code></pre>
<h2 id="cleaning-up">Cleaning up&nbsp;<a class="hanchor" href="#cleaning-up" aria-label="Anchor link for: Cleaning up">🔗</a></h2>
<p>Now that we&rsquo;re done, we can clean up the environment. To clear up the resources in your cluster, run these two commands.</p>
<pre tabindex="0"><code>$ kubectl delete service hello-node
$ kubectl delete deployment hello-node
</code></pre><p>If you&rsquo;re done playing with Minikube, you can also stop it.</p>
<pre tabindex="0"><code>$ minikube stop
</code></pre><p>If you&rsquo;re done using Minikube for a while, you can unset Minikube Docker daemon that we set earlier in this guide.</p>
<pre tabindex="0"><code>$ eval $(minikube docker-env -u)
</code></pre>
<h2 id="learn-more-about-kubernetes">Learn more about Kubernetes&nbsp;<a class="hanchor" href="#learn-more-about-kubernetes" aria-label="Anchor link for: Learn more about Kubernetes">🔗</a></h2>
<p>You can find the <a href="https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/">original tutorial</a> in the Kubernetes documentation. If you want to read more, there&rsquo;s plenty of great information online. The <a href="https://kubernetes.io/docs/home/">documentation</a> provided by Kubernetes is thorough and comprehensive.</p>
<p>Questions, Minikube stories, or tips for beginners? Add your comments below.</p>]]></description></item><item><title>Introduction to Kubernetes with Fedora</title><link>https://jwheel.org/blog/2017/07/introduction-kubernetes-fedora/</link><pubDate>Mon, 03 Jul 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/07/introduction-kubernetes-fedora/</guid><description><![CDATA[<p><em><strong>This article was originally published <a href="https://fedoramagazine.org/introduction-kubernetes-fedora/">on the Fedora Magazine</a>.</strong></em></p>
<hr>
<p><em>This article is part of a short series that introduces Kubernetes. This beginner-oriented series covers some higher level concepts and gives examples of using Kubernetes on Fedora.</em></p>
<hr>
<p>The information technology world changes daily, and the demands of building scalable infrastructure become more important. Containers aren&rsquo;t anything new these days, and have various uses and implementations. But what about building scalable, containerized applications? By itself, Docker and other tools don&rsquo;t quite cut it, as far as building the infrastructure to support containers. How do you deploy, scale, and manage containerized applications in your infrastructure? This is where tools such as Kubernetes comes in. <a href="https://kubernetes.io/">Kubernetes</a> is an open source system that automates deployment, scaling, and management of containerized applications. Kubernetes was originally developed by Google before being donated to the <a href="https://en.wikipedia.org/wiki/Linux_Foundation#Cloud_Native_Computing_Foundation">Cloud Native Computing Foundation</a>, a project of the <a href="https://www.linuxfoundation.org/">Linux Foundation</a>. This article gives a quick precursor to what Kubernetes is and what some of the buzzwords really mean.</p>

<h2 id="what-is-kubernetes">What is Kubernetes?&nbsp;<a class="hanchor" href="#what-is-kubernetes" aria-label="Anchor link for: What is Kubernetes?">🔗</a></h2>
<p>Kubernetes simplifies and automates the process of deploying containerized applications at scale. Just like Ansible <a href="https://fedoramagazine.org/using-ansible-provision-vagrant-boxes/">orchestrates software</a>, Kubernetes orchestrates deploying infrastructure that supports the software. There are various &ldquo;layers of the cake&rdquo; that make Kubernetes a strong solution for building resilient infrastructure. It also assists with making systems that can grow at scale. If your application has increasing demands such as higher traffic, Kubernetes helps grow your environment to support increasing demands. This is one reason why Kubernetes is helpful for building long-term solutions for complex problems (even if it&rsquo;s not complex… yet).</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/06/kubernetes-high-level-design.jpg" alt="Kubernetes: The high level design" loading="lazy">
  <figcaption>Kubernetes: The high level design. Daniel Smith, Robert Bailey, Kit Merker (<a href="https://www.slideshare.net/RohitJnagal/kubernetes-intro-public-kubernetes-meetup-4212015" class="bare">https://www.slideshare.net/RohitJnagal/kubernetes-intro-public-kubernetes-meetup-4212015</a>).</figcaption>
</figure>
</p>
<p>At a high level overview, imagine three different layers.</p>
<ul>
<li><strong>Users</strong>: People who deploy or create containerized applications to run in your infrastructure</li>
<li><strong>Master(s)</strong>: Manages and schedules your software across various other machines, for example in a clustered computing environment</li>
<li><strong>Nodes</strong>: Various machines to support the application, called <em>kubelets</em></li>
</ul>
<p>These three layers are orchestrated and automated by Kubernetes. One of the key pieces of the master (not included in the visual) is <strong>etcd</strong>. etcd is a lightweight and distributed key/value store that holds configuration data. Each node, or kubelet, can access this data in etcd through a HTTP/JSON API interface. The components of communication between master and node such as etcd are explained <a href="https://kubernetes.io/docs/concepts/architecture/master-node-communication/">in the official documentation</a>.</p>
<p>Another important detail not shown in the diagram is that you might have many masters. In a high-availability (HA) set-up, you can keep your infrastructure resilient by having multiple masters in case one happens to go down.</p>

<h2 id="terminology">Terminology&nbsp;<a class="hanchor" href="#terminology" aria-label="Anchor link for: Terminology">🔗</a></h2>
<p>It&rsquo;s important to understand the concepts of Kubernetes before you start to play around with it. There are many core concepts in Kubernetes, such as services, volumes, secrets, daemon sets, and jobs. However, this article explains four that are helpful for the next exercise of building a mini Kubernetes cluster. The three concepts are <em>pods</em>, <em>labels</em>, <em>replica sets</em>, and <em>deployments</em>.</p>

<h4 id="pods"><a href="https://kubernetes.io/docs/concepts/workloads/pods/pod/">Pods</a>&nbsp;<a class="hanchor" href="#pods" aria-label="Anchor link for: Pods">🔗</a></h4>
<p>If you imagine Kubernetes as a Lego® castle, pods are the smallest block you can pick out. By themselves, they are the smallest unit you can deploy. The containers of an application fit into a pod. The pod can be one container, but it can also be as many as needed. Containers in a pod are unique since they share the Linux namespace and aren&rsquo;t isolated from each other. In a world before containers, this would be similar to running an application on the same host machine.</p>
<p>When the pods share the same namespace, all the containers in a pod:</p>
<ul>
<li>Share an IP address</li>
<li>Share port space</li>
<li>Find each other over <em>localhost</em></li>
<li>Communicate over IPC namespace</li>
<li>Have access to shared volumes</li>
</ul>
<p>But what&rsquo;s the point of having pods? The main purpose of pods is to have groups of &ldquo;helping&rdquo; containers on the same namespace (co-located) and integrated together (co-managed) along with the main application container. Some examples might be logging or monitoring tools that check the health of your application, or backup tools that act when certain data changes.</p>
<p>In the big picture, containers in a single pod are always scheduled together too. However, Kubernetes doesn&rsquo;t automatically reschedule them to a new node if the node dies (more on this later).</p>

<h4 id="labels"><a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/">Labels</a>&nbsp;<a class="hanchor" href="#labels" aria-label="Anchor link for: Labels">🔗</a></h4>
<p>Labels are a simple but important concept in Kubernetes. Labels are key/value pairs attached to <em>objects</em> in Kubernetes, like pods. They let you specify unique attributes of objects that actually mean something to humans. You can attach them when you create an object, and modify or add them later. Labels help you organize and select different sets of objects to interact with when performing actions inside of Kubernetes. For example, you can identify:</p>
<ul>
<li><strong>Software releases</strong>: Alpha, beta, stable</li>
<li><strong>Environments</strong>: Development, production</li>
<li><strong>Tiers</strong>: Front-end, back-end</li>
</ul>
<p>Labels are as flexible as you need them to be, and this list isn&rsquo;t comprehensive. Be creative when thinking of how to apply them.</p>

<h4 id="replica-sets"><a href="https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/">Replica sets</a>&nbsp;<a class="hanchor" href="#replica-sets" aria-label="Anchor link for: Replica sets">🔗</a></h4>
<p>Replica sets are where some of the magic begins to happen with automatic scheduling or rescheduling. Replica sets ensure that a number of pod instances (called <em>replicas</em>) are running at any moment. If your web application needs to constantly have four pods in the front-end and two in the back-end, the replica sets are your insurance that number is always maintained. This also makes Kubernetes great for scaling. If you need to scale up or down, change the number of replicas.</p>
<p>When reading about replica sets, you might also see <em>replication controllers</em>. They are somewhat interchangeable, but replication controllers are older, semi-deprecated, and less powerful than replica sets. The main difference is that sets work with more advanced set-based selectors &ndash; which goes back to labels. Ideally, you won&rsquo;t have to worry about this much today.</p>
<p>Even though replica sets are where the scheduling magic happens to help make your infrastructure resilient, you won&rsquo;t actually interact with them much. Replica sets are managed by deployments, so it&rsquo;s unusual to directly create or manipulate replica sets. And guess what&rsquo;s next?</p>

<h4 id="deployments"><a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/">Deployments</a>&nbsp;<a class="hanchor" href="#deployments" aria-label="Anchor link for: Deployments">🔗</a></h4>
<p>Deployments are another important concept inside of Kubernetes. Deployments are a declarative way to deploy and manage software. If you&rsquo;re familiar with Ansible, you can compare deployments to the playbooks of Ansible. If you&rsquo;re building your infrastructure out, you want to make sure it is easily reproducible without much manual work. Deployments are the way to do this.</p>
<p>Deployments offer functionality such as revision history, so it&rsquo;s always easy to rollback changes if something doesn&rsquo;t work out. They also manage any updates you push out to your application, and if something isn&rsquo;t working, it will stop rolling out your update and revert back to the last working state. Deployments follow the mathematical property of <a href="https://en.wikipedia.org/wiki/Idempotence">idempotence</a>, which means you define your specs once and use them many times to get the same result.</p>
<p>Deployments also get into imperative and declarative ways to build infrastructure, but this explanation is a quick, fly-by overview. You can read more <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/">detailed information</a> in the official documentation.</p>

<h2 id="installing-on-fedora">Installing on Fedora&nbsp;<a class="hanchor" href="#installing-on-fedora" aria-label="Anchor link for: Installing on Fedora">🔗</a></h2>
<p>If you want to start playing with Kubernetes, install it and some useful tools from the Fedora repositories.</p>
<pre tabindex="0"><code>sudo dnf install kubernetes
</code></pre><p>This command provides the bare minimum needed to get started. You can also install other cool tools like <em>cockpit-kubernetes</em> (integration with <a href="http://cockpit-project.org/">Cockpit</a>) and <em>kubernetes-ansible</em> (provisioning Kubernetes with <a href="https://www.ansible.com/">Ansible</a> playbooks and roles).</p>

<h2 id="learn-more-about-kubernetes">Learn more about Kubernetes&nbsp;<a class="hanchor" href="#learn-more-about-kubernetes" aria-label="Anchor link for: Learn more about Kubernetes">🔗</a></h2>
<p>If you want to read more about Kubernetes or want to explore the concepts more, there&rsquo;s plenty of great information online. The <a href="https://kubernetes.io/docs/home/">documentation</a> provided by Kubernetes is fantastic, but there are also other helpful guides from <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes">DigitalOcean</a> and <a href="https://blog.giantswarm.io/understanding-basic-kubernetes-concepts-i-introduction-to-pods-labels-replicas/">Giant Swarm</a>. The next article in the series will explore building a mini Kubernetes cluster on your own computer to see how it really works.</p>
<p>Questions, Kubernetes stories, or tips for beginners? Add your comments below.</p>]]></description></item><item><title>Students meet Fedora at Linux Weekend 2017</title><link>https://jwheel.org/blog/2017/04/students-fedora-linux-weekend-2017/</link><pubDate>Tue, 04 Apr 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/04/students-fedora-linux-weekend-2017/</guid><description><![CDATA[<p><em>This article was originally published <a href="https://fedoramagazine.org/students-fedora-linux-weekend-2017/">on the Fedora Magazine</a>.</em></p>
<hr>
<p>Open source projects are built online and a lot of their community members are placed all over the world. Even though projects have people from around the world, this doesn&rsquo;t stop ambitious community members to organize open source conferences or events in their own cities. Whether they&rsquo;re focused generally to open source or for a specific project, you can find a variety of conferences, hackathons, workshops, or meet-ups all over the world. Fedora benefits from having <a href="https://fedoraproject.org/wiki/Ambassadors">Ambassadors</a> to attend these events to introduce Fedora and spread the word about the community. It&rsquo;s not uncommon to see Fedora participating in these events, and Linux Weekend 2017 in Tirana, Albania was not an exception.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/03/Azizaj-kicking-off-conference-300x146.jpg" alt="Jona Azizaj, Fedora Ambassador and Open Labs board member, kicks off Linux Weekend 2017" loading="lazy">
  <figcaption>Jona Azizaj (<a href="http://jona.azizaj.com/" class="bare">http://jona.azizaj.com/</a>), Fedora Ambassador and Open Labs board member, kicks off Linux Weekend 2017</figcaption>
</figure>
</p>
<p>From March 25-26, 2017 in Tirana, Albania, nearly 130 people attended the first-ever <a href="http://linuxweekend.openlabs.cc/">Linux Weekend 2017</a>. Linux Weekend was organized by <a href="https://openlabs.cc/en/">Open Labs Hackerspace</a> at the <a href="http://fti.edu.al/?lang=en">Universiteti Politeknik i Tiranës</a> as an introduction to Linux for beginners. Throughout Tirana, universities have a strong focus on Windows or macOS operating systems and little focus is given to Linux. Open Labs community members wanted to organize an event that would promote Linux as an open source alternative and demonstrate some of its benefits over proprietary environments. The event collected representatives from various communities, including Fedora, Ubuntu, OpenSUSE, NextCloud, MusicBrainz, and more.</p>

<h2 id="organizing-linux-weekend">Organizing Linux Weekend&nbsp;<a class="hanchor" href="#organizing-linux-weekend" aria-label="Anchor link for: Organizing Linux Weekend">🔗</a></h2>
<p>The Open Labs community is not unfamiliar to organizing open source events in Tirana. Their portfolio includes <a href="https://openlabs.cc/sq/fedora-23-release-party-report/">Fedora release parties</a>, <a href="https://openlabs.cc/sq/openstreetmap-hyrje-ne-josm/">OpenStreetMap map-a-thons</a>, <a href="https://openlabs.cc/sq/wikiprojekti-grate/">Wikipedia edit-a-thons</a>, and <a href="https://openlabs.cc/sq/fedora-meetup-tirana-2-report/">Fedora community meet-ups</a>. However, these events have been targeted towards people who already had prior interest or knowledge about open source communities. The organization and planning for Linux Weekend began in the middle of January as an idea to introduce Linux to complete beginners.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/03/Fedora-community-table-1024x683.jpg" alt="The Fedora community table at Linux Weekend 2017 in Tirana, Albania had no shortage of swag, stickers, and more to share with attendees" loading="lazy">
  <figcaption>The Fedora community table had no shortage of swag, stickers, and more to share with attendees</figcaption>
</figure>
</p>
<p>Planning and organizing Linux Weekend was a community effort. <a href="http://jona.azizaj.com/">Jona Azizaj</a> is a board member of Open Labs and a Fedora contributor, and was involved as an organizer for the event. &ldquo;This was the first edition of Linux Weekend, so the main focus is to raise awareness about Linux and open source. We wanted to educate beginners and spread the word about the choices that are available,&rdquo; Azizaj explained. The two tracks for the event were full of talks and workshops to introduce attendees not only to Linux, but also various software and applications of what someone can do with Linux.</p>
<p>Many of the attendees were students who had either heard of Linux in their classes or from their peers. Other attendees included industry professionals or other open source community members. Several representatives of Fedora from different parts of the community were in attendance as well. <a href="http://whatcanidoforfedora.org/en/#advocacy">Ambassadors</a>, <a href="http://whatcanidoforfedora.org/en/#designexclamation">designers</a>, and <a href="http://whatcanidoforfedora.org/en/#translation">translators</a> were available to answer questions and teach newcomers about Fedora.</p>

<h2 id="albanian-students-learn-linux">Albanian students learn Linux&nbsp;<a class="hanchor" href="#albanian-students-learn-linux" aria-label="Anchor link for: Albanian students learn Linux">🔗</a></h2>
<p>Since the focus of the event was to teach newcomers about Linux and how it can be used, Linux Weekend was organized to be an introduction to various parts of the Linux ecosystem. Representatives from Fedora, Ubuntu, Arch Linux, OpenSUSE, Linux Mint, and elementaryOS gave introductions to the operating systems and their communities. In addition to distributions, there were also sessions on open source licenses, <a href="https://nextcloud.com/about/">NextCloud</a>, text editors, <a href="https://musicbrainz.org/doc/About">MusicBrainz</a>, and more. The benefit of these sessions were demonstrating the different ways Linux can be used to accomplish various tasks.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/04/Uku-introducing-editors-1024x683.jpg" alt="Sidorela Uku introduces different editors and tools in her talk at Linux Weekend 2017 in Tirana, Albania" loading="lazy">
  <figcaption>Sidorela Uku (<a href="https://twitter.com/SidorelaUku" class="bare">https://twitter.com/SidorelaUku</a>) introduces different editors and tools in her talk</figcaption>
</figure>
</p>
<p>In addition to the various sessions during the weekend, there were three community booths for Fedora, OpenSUSE, and Mozilla. Attendees had a chance to get swag from each project and also talk with representatives about their own experiences or how to get started using their project.</p>
<p><a href="https://twitter.com/SidorelaUku">Sidorela Uku</a> was both an attendee and a speaker at Linux Weekend. Her talk, &ldquo;Programming in Linux, editors, and tools&rdquo;, introduced various text editors and other tools to help customize any Linux distribution to someone&rsquo;s needs or personal preferences. In addition to sharing her own knowledge, she was also excited to discover new things. &ldquo;I wanted to attend the talks and workshops to learn as much as possible. I also wanted to figure out the next steps to find a project and get involved as a contributor,&rdquo; Uku explained. &ldquo;I also wanted to share the things I know with others to help them get started with Linux.&rdquo; This was Uku&rsquo;s first time speaking at an event and she looks forward to more open source events in Tirana in the future.</p>

<h2 id="fedora-contributors-introduce-community">Fedora contributors introduce community&nbsp;<a class="hanchor" href="#fedora-contributors-introduce-community" aria-label="Anchor link for: Fedora contributors introduce community">🔗</a></h2>
<p>Various members of the Fedora community were also in attendance. Some of the Fedora presentations over the weekend introduced the project to newcomers, detailed the <a href="https://communityblog.fedoraproject.org/fedora-translation-sprint-5-days-50-members-20-thousand-words/">translation efforts</a> to bring Fedora to Albanian, and also guided attendees on how to make their first steps as contributors. The Fedora presence aimed to help give newcomers a taste of the operating system but also to show the impact someone can have if they decide to contribute.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/04/Balla-introduces-Fedora-Project-1024x683.jpg" alt="Mariana Balla, a Fedora contributor, introduces the Fedora Project to Linux Weekend 2017 attendees in Tirana, Albania" loading="lazy">
  <figcaption>Mariana Balla (<a href="https://twitter.com/marianaballa1" class="bare">https://twitter.com/marianaballa1</a>), a Fedora contributor, introduces the Fedora Project to attendees</figcaption>
</figure>
</p>
<p><a href="https://twitter.com/marianaballa1">Mariana Balla</a> was one of the first speakers on Saturday morning with her talk titled, &ldquo;Introduction to Fedora Project and how to be a part of the community&rdquo;. She started with localizing Fedora into Albanian in early 2016 and more recently started to become an advocate as well. &ldquo;Fedora is one of the most used distributions, and it was great to have Fedora here to spread the word and show what our community is all about,&rdquo; Balla said. &ldquo;One thing I hoped to show in my talk was that technical skills aren&rsquo;t required to contribute to Fedora. There&rsquo;s so many things that aren&rsquo;t code that people can help with!&rdquo; One of the highlights of Balla&rsquo;s presentation was breaking down the different sub-projects in the community and how they contribute to making Fedora what it is. One site that was mentioned was <a href="http://whatcanidoforfedora.org/">whatcanidoforfedora.org</a>, a site anyone can click their way through to find an area that interests them.</p>
<p>One key contribution area that was important for the local community was localization. Many attendees and speakers alike thought it was important to have software translated into their native language. <a href="https://twitter.com/anxhelahyseni">Anxhela Hyseni</a> is a Fedora Ambassador and led the workshop on &ldquo;Translation of Fedora&rdquo;. &ldquo;It&rsquo;s important for Albanians to have software in Albanian because we are Albanians!&rdquo; Hyseni laughs. &ldquo;People are better able to understand Fedora and it makes it more accessible for us to have it in our local language.&rdquo; She hopes that attendees left Linux Weekend with plenty of new contacts in the open source community and a better idea of what Linux is all about. She and others also helped Linux newcomers install Fedora 25 as a dual-boot or for virtual machines in the installfest on Saturday morning.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/03/Anxhela-at-Fedora-table-1024x683.jpg" alt="Fedora Ambassador Anxhela Hyseni at the Fedora community table at Linux Weekend 2017 in Tirana, Albania" loading="lazy">
  <figcaption>Fedora Ambassador Anxhela Hyseni (<a href="https://twitter.com/anxhelahyseni" class="bare">https://twitter.com/anxhelahyseni</a>) at the Fedora community table</figcaption>
</figure>
</p>

<h2 id="wrapping-up">Wrapping up&nbsp;<a class="hanchor" href="#wrapping-up" aria-label="Anchor link for: Wrapping up">🔗</a></h2>
<p>After two days of talks, workshops, and hallway discussions, the final talk finished around 4:00pm on Sunday. Azizaj closed out with some final words of encouragement and thanks for attendee participation.</p>
<p>
<figure>
  <img src="https://cdn.fedoramagazine.org/wp-content/uploads/2017/04/Lushka-introducing-Fedora-spins-1024x683.jpg" alt="Angelo Lushka, a Fedora translator and user, introduces the different Fedora spins at the installfest for Linux Weekend 2017 in Tirana, Albania" loading="lazy">
  <figcaption>Angelo Lushka (<a href="https://lushka.al/" class="bare">https://lushka.al/</a>), a Fedora translator and user, introduces the different Fedora spins at the installfest</figcaption>
</figure>
</p>
<p>The presence of Fedora, open source software, and its philosophy was present during the entire weekend. Between stickers, install media, and brochures from community tables and the various presentations during the weekend, participants and organizers felt the event was worthwhile. &ldquo;We had limited time to plan, but it was important to bring Linux to people to introduce the philosophy, show them how to use it, and also how they can give back,&rdquo; <a href="https://lushka.al/">Anxhelo Lushka</a>, an event organizer and Fedora contributor, explained. &ldquo;We hope attendees had new experiences and learned something new and useful for the real world, for jobs or studying. We also hope we convinced them to contribute and give back, even if in a small way.&rdquo;</p>
<p>Now that Linux Weekend 2017 is finished, the organizing team is switching their focus to <a href="https://oscal.openlabs.cc/">Open Source Conference Albania</a> (OSCAL), the largest open source conference in the region.</p>

<h2 id="find-fedora-near-you">Find Fedora near you&nbsp;<a class="hanchor" href="#find-fedora-near-you" aria-label="Anchor link for: Find Fedora near you">🔗</a></h2>
<p>Open source events are happening all around the world, and Fedora might be closer to you than you think! Check for local user or meet-up groups near you to get involved in some of these events. <a href="https://www.meetup.com/">Meetup.com</a> is a great way to find local events happening in your community. You can also keep an eye on what Fedora is up to by following us on <a href="https://www.facebook.com/TheFedoraProject">Facebook</a>, <a href="https://twitter.com/fedora">Twitter</a>, <a href="https://plus.google.com/&#43;Fedora">Google+</a>, or <a href="https://www.instagram.com/thefedoraproject/">Instagram</a>.</p>
<p>We hope to see you at an event in the coming future!</p>]]></description></item><item><title>First-ever overnight hackathon in Albania for sustainable goals</title><link>https://jwheel.org/blog/2017/03/hackathon-albania-sustainable-goals/</link><pubDate>Thu, 23 Mar 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/03/hackathon-albania-sustainable-goals/</guid><description><![CDATA[<p><a href="https://opensource.com/article/17/3/open-labs-48-hour-hackathon-albania"><em>This article was originally published on Opensource.com.</em></a></p>
<hr>
<p>
<figure>
  <img src="/blog/2017/03/hackathon-kick-off-eduard-pagria.jpg" alt="Redon Skikuli addresses all attendees in Open Labs to kick off the hackathon" loading="lazy">
  <figcaption>Redon Skikuli addresses all attendees in Open Labs to kick off the hackathon. © Eduard Pagria, used with permission</figcaption>
</figure>
</p>
<p>The local hackerspace in Tirana, Albania might be small, but they make up for size in spirit. During the weekend of 18-19 March 2017, the <a href="https://openlabs.cc/en/">Open Labs Hackerspace</a> organized the first-ever 48 hour &ldquo;open source&rdquo; hackathon focused on the United Nations Sustainable Development Goals. The <a href="https://sustainabledevelopment.un.org/sdgs">UN Sustainable Development Goals</a> are seventeen objectives identified by the <a href="http://www.undp.org/">United Nations Development Programme</a> (UNDP) to build a better world, starting in our own communities. Some of the goals include quality education, gender equality, decent work and economic growth, clean energy, and more. During the course of the hackathon, participants selected a goal, broke into teams, and worked on projects to make real change in their own neighborhoods. In the spirit of open source, all projects are made available under free and open licenses.</p>

<h2 id="organizing-the-hackathon-in-albania">Organizing the hackathon in Albania&nbsp;<a class="hanchor" href="#organizing-the-hackathon-in-albania" aria-label="Anchor link for: Organizing the hackathon in Albania">🔗</a></h2>
<p>The board members of Open Labs oversee most of its operations and help guide members in hosting events and keeping the hackerspace busy. The current board members are <a href="http://redon.skikuli.com/about/">Redon Skikuli</a>, <a href="http://jona.azizaj.com/">Jona Azizaj</a>, <a href="https://elioqoshi.me/">Elio Qoshi</a>, <a href="https://kristiprogri.com/">Kristi Progri</a>, and <a href="https://twitter.com/AnisaKuci">Anisa Kuci</a>. However, they emphasize that it&rsquo;s strongly a community-based organization. Board members invite others to take part in the organization&rsquo;s governance.</p>
<p>
<figure>
  <img src="/blog/2017/03/open-labs-board-members-justin-w-flory.jpg" alt="Open Labs board members. Pictured left to right: Jona Azizaj, Anisa Kuci, Kristi Progri, Redon Skikuli, Elio Qoshi" loading="lazy">
</figure>
</p>
<p><em>Open Labs board members. Pictured left to right: Jona Azizaj, Anisa<br>
Kuci, Kristi Progri, Redon Skikuli, Elio Qoshi. (Justin Wheeler, CC-BY-SA 4.0)</em></p>
<p>When the opportunity came to take part in this event, the board members felt it was a great opportunity to try something new. While hackathon events are popular and well-known in the United States and elsewhere, this was foreign territory for the community. &ldquo;At first, we were nervous because this type of 48 hour event was new for Open Labs but also for Albania. But we wanted to use this as a chance to introduce the open source philosophy to new people and to show what we do and why,&rdquo; said Azizaj. The organizers hoped to appeal to a wider audience than only active community members too.</p>
<p>
<figure>
  <img src="/blog/2017/03/un-representative-meeting-hackers-eduard-pagria.jpg" alt="The visiting representative from the United Nations meets participants and helps work with them on brainstorming ideas" loading="lazy">
</figure>
</p>
<p><em>The visiting representative from the United Nations meets participants<br>
and helps work with them on brainstorming ideas. © Eduard Pagria, used with permission</em></p>
<p>Organizing the hackathon was a challenge since many of the core team members were traveling the week before the event. However, community members and UN representatives were more than willing to help with organizing the hackathon. This event also required a level of coordination that was uncommon for the normal type of event organized in Open Labs. &ldquo;When planning, we were hoping to reach out to non-members of Open Labs too. This way, more people are exposed to open source and its culture. This lets people who want to make change, but don&rsquo;t know how, to understand what is available to help them,&rdquo; said Skikuli. When the Friday before the event arrived, the team was ready for a weekend of open source, civic hacking.</p>
<p>On Saturday morning, approximately 30 people were present for the event kick-off. Open Labs members and United Nations representatives introduced the hackathon and the themes for attendees to focus on during the weekend. Attendees were a diverse group of people as well: there was a balance between technical and non-technical people, and the gender ratio was almost evenly split between males and females.</p>

<h2 id="working-on-projects">Working on projects&nbsp;<a class="hanchor" href="#working-on-projects" aria-label="Anchor link for: Working on projects">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/03/edlina-works-on-education-eduard-pagria.jpg" alt="One participant, Edlina, worked with Augest to develop an application that creates a feedback loop with students and teachers to NGOs and governments to understand problems in schools and find ways to work together without duplicating work" loading="lazy">
</figure>
</p>
<p><em>One participant, Edlina, worked with Augest to develop an application<br>
that creates a feedback loop with students and teachers to NGOs and<br>
governments to understand problems in schools and find ways to work<br>
together without duplicating work. © Eduard Pagria, used with permission</em></p>
<p>The Open Labs organizers placed emphasis in networking between participants at the beginning. The event started with introductions and each participant made a note of whether they were a technical or non-technical contributor. After this, they wrote their names on sticky notes along with their preferred goals to stick on the wall. Participants were paired up with someone with a different background but with a mutual interest in a specific goal. &ldquo;We separated participants into two groups: technical and non-technical. Our idea was the two sides would complement each other to share experiences to build a strong team,&rdquo; said Azizaj. After the teams were formed, they began brainstorming and working on their projects. Mentors were available to offer support to participants and to introduce them to open source tools to help them prototype their projects.</p>

<h4 id="world-of-sounds">World of Sounds&nbsp;<a class="hanchor" href="#world-of-sounds" aria-label="Anchor link for: World of Sounds">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2017/03/silva-arapi-profile-justin-w-flory-e1490131911268.jpg" alt="Silva Arapi, one participant, worked with her team on their project &ldquo;World of Sounds&rdquo;" loading="lazy">
</figure>
</p>
<p><em>Silva Arapi, one participant, worked with her team on their project<br>
&ldquo;World of Sounds&rdquo;. (Justin Wheeler, CC-BY-SA 4.0)</em></p>
<p>One participant, <a href="https://twitter.com/ArapiSilva">Silva Arapi</a>, worked with teammates Dritan Sakuta, Hulemita Leka, Kristi Leka, and Klajdi Qehaja to address reduced inequalities. Their team project is called &ldquo;World of Sounds&rdquo;.  The application is a resource for parents of children with hearing or speaking disabilities. &ldquo;World of Sounds is a platform to understand early on to improve education of parents and accessibility for children. This is very helpful for rural parts [of Albania],&rdquo; Arapi explained.</p>
<p>She has been involved with the Open Labs community for almost a year and a half. It was her first hackathon but she also hadn&rsquo;t seen an event like this in Albania before. &ldquo;It was a new experience and something different. We get something done in 48 hours to have a social impact – why not participate?&rdquo; Arapi balances her time leading the NextCloud efforts in Tirana while working towards her master&rsquo;s degree in Information Security. She hopes to take part in another event at Open Labs like this again in the future.</p>

<h4 id="tackling-gender-equality-in-albania">Tackling gender equality in Albania&nbsp;<a class="hanchor" href="#tackling-gender-equality-in-albania" aria-label="Anchor link for: Tackling gender equality in Albania">🔗</a></h4>
<p>Another Open Labs community member came with an idea and a friend to try thinking through a specific issue she had seen in her community. <a href="https://twitter.com/Nafie_Shehu">Nafie Shehu</a> is an Information Communication Technology student and has been involved with Open Labs for the past seven months. With her, she brought her friend Afrim Kamberi to help, for his first visit to Open Labs and an open source event in Tirana.</p>
<p>
<figure>
  <img src="/blog/2017/03/working-on-project-eduard-pagria.jpg" alt="Two attendees work together on their project idea" loading="lazy">
  <figcaption>Two attendees work together on their project idea. © Eduard Pagria, used with permission</figcaption>
</figure>
</p>
<p>Shehu&rsquo;s selected goal was gender equality combined with an experience of one of her friends. In some rural areas and villages in Albania, women have a more difficult time maintaining their rights. They rarely have financial independence, and as a result, this sometimes leads them to live a life they might not want. Sometimes, women are obligated into a non-consensual marriage and aren&rsquo;t in a place to defend what they want for themselves. Her friend was in this situation and divorced later, but she didn&rsquo;t know where to go after and had little resources of her own. Nafie heard about this story and it deeply affected her. She hoped to brainstorm ideas on how to improve this problem.</p>
<p>After research and looking at other solutions, she discovered similar attempts had been started to solve this problems. However, for various reasons, they were ineffective and weren&rsquo;t thorough solutions to the problems. While this changed her own project development, she finished the hackathon determined to find ways to improve on what was already there and continue this even after the weekend ended.</p>

<h2 id="closing-the-hackathon">Closing the hackathon&nbsp;<a class="hanchor" href="#closing-the-hackathon" aria-label="Anchor link for: Closing the hackathon">🔗</a></h2>
<p>Towards the end of Sunday, participants put the last touches onto their projects. The deliverable product was prepared and all participants organized a short presentation to demo their project. &ldquo;In the end, you get a real product, not just talking. It&rsquo;s a real product that has an impact,&rdquo; Progri explained. All of the various teams pitched their projects to the Open Labs community and to representatives from the United Nations.</p>
<p>
<figure>
  <img src="/blog/2017/03/hacking-past-midnight-justin-w-flory.jpg" alt="Anxhelo Lushka helps two participants after midnight to help work through some problems in their project" loading="lazy">
</figure>
</p>
<p><em>Anxhelo Lushka helps two participants after midnight to help work<br>
through some problems in their project. (Justin Wheeler, CC-BY-SA 4.0)</em></p>
<p>In the project presentations, teams were given specific criteria to present in the project.</p>
<ol>
<li>Summary or main idea of the project</li>
<li>Sustainability of the project for implementation beyond the weekend</li>
<li>Recommendations for funding the project / creating a budget to carry it out</li>
<li>Reasons why they would support this if it wasn&rsquo;t their own project</li>
</ol>
<p>After the presentations, teams were given the option to send their information and projects to the UNDP via Open Labs. The UNDP will select one project and team to bring to the United Nations office in New York City to propose their project and seek support to develop it further.</p>

<h2 id="thats-a-wrap">That&rsquo;s a wrap!&nbsp;<a class="hanchor" href="#thats-a-wrap" aria-label="Anchor link for: That&rsquo;s a wrap!">🔗</a></h2>
<p>After a closing ceremonies and words of encouragement from Skikuli, the hackathon came to an end. Both participants and organizers felt it ended on a high note. &ldquo;I love coming to these events to learn new things, meet new people, and they&rsquo;re cool!&rdquo; Arapi said. Additionally, the organizers hoped that participants left with valuable knowledge and resources that would go beyond this weekend. &ldquo;We hope people understand the role open source had in this event and understand why the philosophy is so important,&rdquo; Qoshi explained. &ldquo;Some people might think the projects are the main part, but networking with people from different backgrounds goes beyond the event. These connections support sustainability for people working together. We hope these projects continue beyond this event.&rdquo;</p>
<p>The presence of open source software and its philosophy was present throughout the event. Stickers and swag from various open source projects was available for participants to take. This included stickers from Mozilla, Fedora, LibreOffice, NextCloud, and more. &ldquo;We hope attendees enjoyed the experience and had fun meeting new people. Later on, when they leave Open Labs and work on their own projects, we hope they will remember open source tools to build their work and create FOSS solutions,&rdquo; said Azizaj.</p>

<h2 id="whats-next-for-open-labs">What&rsquo;s next for Open Labs?&nbsp;<a class="hanchor" href="#whats-next-for-open-labs" aria-label="Anchor link for: What&rsquo;s next for Open Labs?">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/03/morning-brainstorming-eduard-pagria.jpg" alt="Brainstorming together at the beginning of the Open Labs Albania 48 hour hackathon on project ideas" loading="lazy">
  <figcaption>Brainstorming together at the beginning of the hackathon on project ideas. © Eduard Pagria, used with permission</figcaption>
</figure>
</p>
<p>This was a milestone event for the Open Labs community, but they have more on the horizon after the weekend of this event. Organizers, volunteers, and members are putting together the first <a href="http://linuxweekend.openlabs.cc/">Linux Weekend</a> in Tirana from 25-26 March. This is a traditional barcamp-like model with talks and workshops by several local and international speakers. However, there are a couple of goals ahead that the team hopes to begin working at.</p>
<p>One of them is a book in time for the hackerspace&rsquo;s fifth anniversary. The book would be an &ldquo;open source handbook&rdquo; in the Albanian language. Not only would it have the history of Open Labs, but it would introduce various open source projects and connect readers to resources so they could have an impact on a project. Additionally, the team is looking at policy in their government as a next step. Qoshi had a great deal to say on this: &ldquo;It feels like we&rsquo;re reaching critical mass and gaining momentum to influence local policy in Albania. We want to push for open policies and government, especially with the coming elections in June. This is a great opportunity to let people know our stances on policies. Pushing FOSS only in our space can&rsquo;t be an insider secret—we need conversations with people coming from different views if we want change.&rdquo;</p>
<p>You can learn more about the hackerspace online at their <a href="https://openlabs.cc/en/">website</a>.</p>]]></description></item><item><title>2016 – My Year in Review</title><link>https://jwheel.org/blog/2017/02/2016-my-year-in-review/</link><pubDate>Fri, 17 Feb 2017 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2017/02/2016-my-year-in-review/</guid><description><![CDATA[<p>Before looking too far ahead to the future, it&rsquo;s important to spend time to reflect over the past year&rsquo;s events, identify successes and failures, and devise ways to improve. Describing my 2016 is a challenge for me to find the right words for. This post continues a habit I started last year with my <a href="https://jwfblog.wpenginepowered.com/2016/02/2015-year-review/">2015 Year in Review</a>. One thing I discover nearly every day is that I&rsquo;m always learning new things from various people and circumstances. Even though 2017 is already getting started, I want to reflect back on some of these experiences and opportunities of the past year.</p>

<h2 id="preface">Preface&nbsp;<a class="hanchor" href="#preface" aria-label="Anchor link for: Preface">🔗</a></h2>
<p>When I started writing this in January, I read <a href="https://freenode.net/">freenode</a>&rsquo;s &ldquo;<a href="https://freenode.net/news/2016-is-finally-dead">Happy New Year!</a>&rdquo; announcement. Even though their recollection of the year began as a negative reflection, the freenode team did not fail to find some of the positives of this year as well. The attitude reflected in their blog post is reflective of the attitude of many others today. 2016 has brought more than its share of sadness, fear, and a bleak unknown, but the colors of radiance, happiness, and hope have not faded either. Even though some of us celebrated the end of 2016 and its tragedies, two thoughts stay in my mind.</p>
<p>One, it is fundamentally important for all of us to stay vigilant and aware of what is happening in the world around us. The changing political atmosphere of the world has brought a shroud of unknowing, and the changing of a number does not and will not signify the end of these doubts and fears. 2017 brings its own series of unexpected events. I don&rsquo;t consider this a negative, but in order for it not to become a negative, we must constantly remain active and aware.</p>
<p>Secondly, despite the more bleak moments of this year, there has never been a more important time to embrace the positives of the past year. For every hardship faced, there is an equal and opposite reaction. Love is all around us and sometimes where we least expect it. Spend extra time this new year remembering the things that brought you happiness in the past year. Hold them close, but share that light of happiness with others too. You might not know how much it&rsquo;s needed.</p>

<h2 id="first-year-of-university-complete">First year of university: complete!&nbsp;<a class="hanchor" href="#first-year-of-university-complete" aria-label="Anchor link for: First year of university: complete!">🔗</a></h2>
<p>Many things changed since I decided to pack up my life and go to a school a thousand miles away from my hometown. In May, I officially finished my first year at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a>, finishing the full year on dean&rsquo;s list. Even though it was only a single year, the changes from my decision to make the move are incomparable. Rochester exposed me to amazing, brilliant people. I&rsquo;m connected to organizations and groups based on my interests like I never imagined. My courses are challenging, but interesting. If there is anything I am appreciative of in 2016, it is for the opportunities that have presented themselves to me in Rochester.</p>

<h4 id="adventures-into-fossmagic">Adventures into FOSS@MAGIC&nbsp;<a class="hanchor" href="#adventures-into-fossmagic" aria-label="Anchor link for: Adventures into FOSS@MAGIC">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2017/02/Group-photo.jpg" alt="On 2016 Dec. 10th, the &ldquo;FOSS Family&rdquo; went to dinner at a local restaurant to celebrate the semester" loading="lazy">
  <figcaption>On 2016 Dec. 10th, the \&#34;FOSS Family\&#34; went to dinner at a local restaurant to celebrate the semester</figcaption>
</figure>
</p>
<p>My involvement with the <a href="http://foss.rit.edu">Free and Open Source Software (FOSS) community at RIT</a> has grown exponentially since I began participating in 2015. I took <a href="https://hfoss-ritjoe.rhcloud.com/">my first course</a> in the FOSS minor, Humanitarian Free and Open Source Software Development in spring 2016. In the following fall 2016 semester, I <a href="https://hfoss16f-ritjoe.rhcloud.com/">became the teaching assistant</a> for the course. I helped show our community&rsquo;s projects <a href="https://opensource.com/education/16/6/imagine-rit">at Imagine RIT</a>. I helped carry the <a href="https://jwfblog.wpenginepowered.com/2016/11/spigotmc-california-minecon/">RIT FOSS flag in California</a> (more on that later). The FOSS@MAGIC initiative was an influencing factor for my decision to attend RIT and continues to play an impact in my life as a student.</p>
<p>I eagerly look forward to future opportunities for the FOSS projects and initiatives at RIT to grow and expand. Bringing open source into more students&rsquo; hands excites me!</p>

<h4 id="i-3-wic">I &lt;3 WiC&nbsp;<a class="hanchor" href="#i-3-wic" aria-label="Anchor link for: I &lt;3 WiC">🔗</a></h4>
<p>With a new schedule, the fall 2016 semester marked the beginning of my active involvement with the Women in Computing (WiC) program at RIT, as part of the Allies committee. Together with other members of the RIT community, we work together to find issues in our community, discuss them and share experiences, and find ways to grow the WiC mission: to promote the success and advancement of women in their academic and professional careers.</p>
<p><a href="/img/WiCHacks-Opening-Ceremony.jpg">
<figure>
  <img src="/img/WiCHacks-Opening-Ceremony.jpg" alt="WiCHacks 2016 Opening Ceremony" loading="lazy">
</figure>
</a>In spring 2016, I participated as a <a href="https://jwfblog.wpenginepowered.com/2016/03/why-i-love-wichacks/">volunteer for WiCHacks</a>, the annual <a href="http://wichacks.rit.edu/">all-female hackathon</a> hosted at RIT. My first experience with WiCHacks left me impressed by all the hard work by the organizers and the entire atmosphere and environment of the event. After participating as a volunteer, I knew I wanted to become more involved with the organization. Fortunately, fall 2016 enabled me to become more active and engaged with the community. Even though I will be unable to attend WiCHacks 2017, I hope to help support the event in any way I can.</p>
<p>Also, hey! If you&rsquo;re a female high school or university student in the Rochester area (or willing to do some travel), you should seriously <a href="http://wichacks.rit.edu/">check this out</a>!</p>

<h2 id="google-summer-of-code">Google Summer of Code&nbsp;<a class="hanchor" href="#google-summer-of-code" aria-label="Anchor link for: Google Summer of Code">🔗</a></h2>
<p><a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a>, abbreviated to GSoC, is an annual program run by Google every year. Google works with open source projects to offer stipends for them to pay students to work on projects over the summer. In a last-minute decision to apply, I was <a href="https://communityblog.fedoraproject.org/fedora-google-summer-of-code-2016/">accepted as a contributing student</a> to the Fedora Project. My proposal was to work within the Fedora Infrastructure team to help <a href="https://summerofcode.withgoogle.com/archive/2016/projects/4844704050970624/">automate the WordPress platforms</a> with Ansible. My mentor, <a href="https://patrick.uiterwijk.org/about/">Patrick Uiterwijk</a>, provided much of the motivation for the proposal and worked with me throughout the summer as I began learning Ansible for the first time. Over the course of the summer, my learned knowledge began to turn into practical experience.</p>
<p>It would be unfair for a reflection to count successes but not failures. GSoC was one of the most challenging and stressful activities I&rsquo;ve ever participated in. It was a complete learning experience for me. One area I noted that I needed to improve on was communication. My failing point was not regularly communicating what I was working through or stuck on with my mentor and the rest of the Fedora GSoC community. GSoC taught me the value of asking questions often when you&rsquo;re stuck, especially in an online contribution format.</p>
<p>On the positive side, GSoC helped formally introduce me to Ansible, and to a lesser extent, the value of automation in operations work. My work in GSoC helped enable me to become a sponsored sysadmin of Fedora, where I mostly focus my time contributing to the <a href="https://badges.fedoraproject.org/about">Badges site</a>. Additionally, my experience in GSoC helped me when interviewing for summer internships (also more on this later).</p>
<p>Google Summer of Code came with many ups and downs. But I made it and <a href="https://jwfblog.wpenginepowered.com/2016/08/gsoc-2016-thats-wrap/">passed the program</a>. I&rsquo;m happy and fortunate to have received this opportunity from the Fedora Project and Google. I learned several valuable lessons that have and will impact going forward into my career. I look forward to participating either as a mentor or organizer for GSoC 2017 with the Fedora Project this year.</p>

<h2 id="flock-2016">Flock 2016&nbsp;<a class="hanchor" href="#flock-2016" aria-label="Anchor link for: Flock 2016">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/02/flock-group-photo-5_28949792761_o.jpg" alt="Group photo of all Flock 2016 attendees outside of the conference venue (Photo courtesy of Joe Brockmeier)" loading="lazy">
  <figcaption>Group photo of all Flock 2016 (<a href="https://flocktofedora.org/" class="bare">https://flocktofedora.org/</a>) attendees outside of the conference venue (Photo courtesy of Joe Brockmeier)</figcaption>
</figure>
</p>
<p>Towards the end of summer, in the beginning of August, I was <a href="https://jwfblog.wpenginepowered.com/2016/07/czesc-poland-back-europe/">accepted as a speaker</a> to the annual Fedora Project contributor conference, <a href="https://flocktofedora.org/">Flock</a>. As a speaker, my travel and accommodation were sponsored to the event venue in Kraków, Poland.</p>
<p>Months after Flock, I am still incredibly grateful for receiving the opportunity to attend the conference. I am appreciative and thankful to Red Hat for helping cover my costs to attend, which is something I would never be able to do on my own. Outside of the real work and productivity that happened during the conference, I am happy to have mapped names to faces. I met incredible people from all corners of the world and have made new lifelong friends (who I was fortunate to see again in 2017)! Flock introduced me in-person to the diverse and brilliant community behind the Fedora Project. It is an experience that will stay with me forever.</p>
<p>To read a more in-depth analysis of my time in Poland, you can read <a href="https://jwfblog.wpenginepowered.com/2016/08/fedora-flock-2016/">my full write-up</a> of Flock 2016.</p>
<p>
<figure>
  <img src="/img/IMG_9225.jpg" alt="To Kraków for Flock with Bee, Amita, Jona, and Giannis" loading="lazy">
  <figcaption>On a bus to the Kraków city center with Bee Padalkar, Amita Sharma, Jona Azizaj, and Giannis Konstantinidis (left to right).</figcaption>
</figure>
</p>

<h2 id="maryland-bitcamp-massachusetts-hackmit-california-minecon">Maryland (Bitcamp), Massachusetts (HackMIT), California (MINECON)&nbsp;<a class="hanchor" href="#maryland-bitcamp-massachusetts-hackmit-california-minecon" aria-label="Anchor link for: Maryland (Bitcamp), Massachusetts (HackMIT), California (MINECON)">🔗</a></h2>
<p>
<figure>
  <img src="/img/group-photo.png" alt="Bitcamp 2016: The Fedora Ambassadors of Bitcamp 2016" loading="lazy">
  <figcaption>The Fedora Ambassadors at Bitcamp 2016. Left to right: Chaoyi Zha (cydrobolt), Justin Wheeler (jflory7), Mike DePaulo (mikedep333), Corey Sheldon (linuxmodder)</figcaption>
</figure>
</p>
<p>2016 provided me the opportunity to explore various parts of my country. Throughout the year, I attended various conferences to represent the <a href="https://fedoraproject.org/wiki/Overview">Fedora Project</a>, the <a href="https://www.spigotmc.org/wiki/about-spigot/">SpigotMC project</a>, and the <a href="http://foss.rit.edu">RIT open source</a> community.</p>
<p>There are three distinct events that stand out in my memory. For the first time, I visited the <a href="https://jwfblog.wpenginepowered.com/2016/04/bitcamp-2016/">University of Maryland for Bitcamp</a> as a Fedora Ambassador. It also provided me an opportunity to see my nation&rsquo;s capitol for the first time. I also visited Boston for the first time this year as well for HackMIT, MIT&rsquo;s annual hackathon event. I also participated as a Fedora Ambassador and <a href="https://communityblog.fedoraproject.org/hackmit-meets-fedora/">met brilliant students</a> from around the country (and even the world, with one student I met flying in from India for the weekend).</p>
<p>
<figure>
  <img src="/blog/2017/02/Team-Ubuntu-2.jpg" alt="Team Ubuntu shows off their project to Charles Profitt before the project deadline for HackMIT 2016" loading="lazy">
  <figcaption>Team Ubuntu shows off their project to Charles Profitt (<a href="https://fedoraproject.org/wiki/User:Cprofitt" class="bare">https://fedoraproject.org/wiki/User:Cprofitt</a>) before the project deadline for HackMIT 2016 (<a href="https://hackmit.org/" class="bare">https://hackmit.org/</a>)</figcaption>
</figure>
</p>
<p>Lastly, I also took my first journey to the US west coast for MINECON 2016, the annual Minecraft convention. <a href="https://jwfblog.wpenginepowered.com/2016/11/spigotmc-california-minecon/">I attended</a> as a staff member of the SpigotMC project and a representative of the open source community at RIT.</p>
<p>All three of these events have their own event reports to go with them. More info and plenty of pictures are in the full reports.</p>
<ul>
<li><a href="https://jwfblog.wpenginepowered.com/2016/04/bitcamp-2016/">Going to Bitcamp 2016</a></li>
<li><a href="https://communityblog.fedoraproject.org/hackmit-meets-fedora/">HackMIT meets Fedora</a></li>
<li><a href="https://jwfblog.wpenginepowered.com/2016/11/spigotmc-california-minecon/">SpigotMC goes to California for MINECON</a></li>
</ul>

<h2 id="vermont-2016-with-matt">Vermont 2016 with Matt&nbsp;<a class="hanchor" href="#vermont-2016-with-matt" aria-label="Anchor link for: Vermont 2016 with Matt">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/02/IMG_8441.jpg" alt="Shortly after I arrived, Matt Coutu took me around to see the sights and find coffee" loading="lazy">
  <figcaption>Shortly after I arrived, Matt took me around to see the sights and find coffee.</figcaption>
</figure>
</p>
<p>Some trips happen without prior arrangements and planning. Sometimes, the best memories are made by not saying no. I remember the phone call with one of my closest friends, Matt Coutu, at some point in October. On a sudden whim, we planned my first visit to Vermont to visit him. Some of the things he told me to expect made me excited to explore Vermont! And then in the pre-dawn hours of November 4th, I made the trek out to Vermont to see him.</p>
<p>
<figure>
  <img src="/blog/2017/02/IMG_8525-e1487263384338.jpg" alt="50 feet up into the air atop Spruce Mountain was colder than we expected" loading="lazy">
  <figcaption>50 feet up into the air atop Spruce Mountain was colder than we expected.</figcaption>
</figure>
</p>
<p>Instantly when crossing over the state border, I knew this was one of the most beautiful states I ever visited. During the weekend, the two of us did things that I think only the two of us would enjoy. We climbed a snowy mountain to reach an abandoned fire watchtower, where we endured a mini blizzard. We walked through a city without a specific destination in mind, but to go wherever the moment took us.</p>
<p>We visited a quiet dirt road that led to a meditation house and cavern maintained by monks, where we meditated and drank in the experience. I wouldn&rsquo;t classify the trip has a high-energy or engaging trip, but for me, it was one of the most enjoyable trips I&rsquo;ve embarked on yet. There are many things that I still hold on to from that weekend for remembering or reflecting back on.</p>
<p>A big shout-out to Matt for always supporting me with everything I do and always being there when we need each other.</p>
<p>
<figure>
  <img src="/blog/2017/02/IMG_8476.jpg" alt="Martin Bridge may not be one of your top places to visit in Vermont, but if you keep going, you&rsquo;ll find a one-of-a-kind view" loading="lazy">
  <figcaption>Martin Bridge may not be one of your top places to visit in Vermont, but if you keep going, you’ll find a one-of-a-kind view.</figcaption>
</figure>
</p>

<h2 id="finally-seeing-nyc-with-nolski">Finally seeing NYC with Nolski&nbsp;<a class="hanchor" href="#finally-seeing-nyc-with-nolski" aria-label="Anchor link for: Finally seeing NYC with Nolski">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/02/Nolski-and-jflory-take-Manhatten.jpg" alt="Mike Nolan and Justin Wheeler venture through New York City early on a Sunday evening" loading="lazy">
  <figcaption>Mike Nolan and I venture through New York City early on a Sunday evening</figcaption>
</figure>
</p>
<p>In no short time after the Vermont trip, I purchased tickets for my favorite band, <a href="http://www.elteneleven.com/">El Ten Eleven</a>, in New York City on November 12th. What turned into a one-day trip to see the band turned into an all-weekend trip to see the band, see New York City, and spend some time catching up with two of my favorite people, <a href="http://nolski.rocks/">Mike Nolan</a> (nolski) and <a href="http://decausemaker.org/">Remy DeCausemaker</a> (decause). During the weekend, I saw the World Trade Center memorial site for the first time, tried some amazing bagels, explored virtual reality in Samsung&rsquo;s HQ, and got an exclusive inside look at the <a href="https://giphy.com/">Giphy</a> office.</p>
<p>This was my third time in New York City, but my first time to explore the city. Another shout-out goes to Mike for letting me crash on his couch and stealing his Sunday to walk through his metaphorical backyard. Hopefully it isn&rsquo;t my last time to visit the city either!</p>

<h2 id="finalizing-study-abroad">Finalizing study abroad&nbsp;<a class="hanchor" href="#finalizing-study-abroad" aria-label="Anchor link for: Finalizing study abroad">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2017/02/DSC_0029.jpg" alt="This may be cheating since it was taken in 2017, but this is one of my favorite photos from Dubrovnik, Croatia so far" loading="lazy">
  <figcaption>This may be cheating since it was taken in 2017, but this is one of my favorite photos from Dubrovnik, Croatia so far. You can find more like this on my 500px gallery (<a href="https://500px.com/jflory7/galleries/dubrovnik-croatia" class="bare">https://500px.com/jflory7/galleries/dubrovnik-croatia</a>)!</figcaption>
</figure>
</p>
<p>At the end of 2016, I finalized a plan that was more than a year in the making. I applied and was accepted to study abroad at the Rochester Institute of Technology campus in Dubrovnik, Croatia. RIT has a few satellite campuses across the world: two in Croatia (Zagreb and Dubrovnik) and one in Dubai, UAE. In addition to being accepted, the university provided me a grant to further my education abroad. I am fortunate to have received this opportunity and can&rsquo;t wait to spend the next few months of my life in Croatia. I am currently studying in Dubrovnik since January until the end of May.</p>
<p>During my time here, I will be taking 12 credit hours of courses. I am taking ISTE-230 (Introduction to Database and Data Modeling), ENGL-361 (Technical Writing), ENVS-150 (Ecology of the Dalmatian Coast), and lastly, FOOD-161 (Wines of the World). The last one was a fun one that I took for myself to try broadening my experiences while abroad.</p>
<p>Additionally, one of my personal goals for 2017 is to practice my photography skills. During my time abroad, I have created a <a href="https://500px.com/jflory7/galleries/dubrovnik-croatia">gallery on 500px</a> where I upload my top photos from every week. I welcome feedback and opinions about my pictures, and if you have criticism for how I can improve, I&rsquo;d love to hear about it!</p>

<h2 id="accepting-my-first-co-op">Accepting my first co-op&nbsp;<a class="hanchor" href="#accepting-my-first-co-op" aria-label="Anchor link for: Accepting my first co-op">🔗</a></h2>
<p>The last big break that I had in 2016 was accepting my first co-op position. Starting in June, I will be a Production Engineering Intern at <a href="http://jumptrading.com/">Jump Trading, LLC</a>. I started interviewing with Jump Trading in October and even had an on-site interview that brought me to their headquarters in Chicago at the beginning of December. After meeting the people and understanding the culture of the company, I am happy to accept a place at the team. I look forward to learning from some of the best in the industry and hope to contribute to some of the fascinating projects going on there.</p>
<p>From June until late August, I will be starting full-time at their Chicago office. If you are in the area or ever want to say hello, let me know and I&rsquo;d be happy to grab coffee, once I figure out where all the best coffee shops in Chicago are!</p>

<h2 id="in-summary">In summary&nbsp;<a class="hanchor" href="#in-summary" aria-label="Anchor link for: In summary">🔗</a></h2>
<p>2015 felt like a difficult year to follow, but 2016 exceeded my expectations. I acknowledge and I&rsquo;m grateful for the opportunities this year presented to me. Most importantly, I am thankful for the people who have touched my life in a unique way. I met many new people and strengthened my friendships and bonds with many old faces too. All of the great things from the past year would not be possible without the influence, mentorship, guidance, friendship, and comradery these people have given me. My mission is to always pay it forward to others in any way that I can, so that others are able to experience the same opportunities (or better).</p>
<p>2017 is starting off hot and moving quickly, so I hope I can keep up! I can&rsquo;t wait to see what this year brings and hope that I have the chance to meet more amazing people, and also meet many of my old friends again, wherever that may be.</p>
<p>Keep the FOSS flag high.</p>]]></description></item><item><title>Hatchit puts open source power in developers' hands</title><link>https://jwheel.org/blog/2016/11/hatchit-puts-open-source-power-developers-hands/</link><pubDate>Thu, 03 Nov 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/11/hatchit-puts-open-source-power-developers-hands/</guid><description><![CDATA[<p><a href="https://opensource.com/life/16/10/hatchit"><em>This post was originally published on OpenSource.com.</em></a></p>
<hr>
<p>More and more students are learning about the world of open source through video games. Games like <a href="http://www.freeciv.org/">FreeCiv</a> let players build empires based on the history of human civilization while games like <a href="http://www.minetest.net/">Minetest</a> emulates Minecraft in an open source block-building sandbox. Students are encouraged to dig deeper into games like this, and projects like <a href="https://www.spigotmc.org">SpigotMC</a> empower kids to write plugins to extend their favorite games. However, the tools in open source to build the actual games do not share the same prominence. <a href="https://www.rit.edu/">Rochester Institute of Technology</a> student <a href="https://github.com/MattGuerrette">Matt Guerrette</a> hopes to help change that with his open source gaming engine, <a href="https://github.com/thirddegree/Hatchit">Hatchit</a>.</p>

<h2 id="introducing-hatchit">Introducing Hatchit&nbsp;<a class="hanchor" href="#introducing-hatchit" aria-label="Anchor link for: Introducing Hatchit">🔗</a></h2>
<p>Hatchit was a project started between <a href="https://github.com/MattGuerrette">Matt Guerrette</a> and fellow student <a href="https://github.com/Honeybunch">Arsen Tufankjian</a> together in February 2016. After working with game engines for other classes, they both found challenges over how popular game engines are designed for developers. They noted that these game engines were more design-oriented. It lacked some technical details they were looking for when working on their own personal or academic projects. Together, they had the idea to build their own open source gaming engine with a goal of exposing more of the technical sides of the process to developers. &ldquo;We want to give you more access to the programming side of the game engine,&rdquo; Matt explains.</p>
<p>Hatchit is written in C/C++ and licensed in a mix between GPL and LGPL. Originally, the project was started to take advantage of the <a href="https://en.wikipedia.org/wiki/DirectX">DirectX</a> APIs for development. However, Guerrette and Tufankjian ran into an unexpected event while they were getting started. Nvidia released the <a href="https://developer.nvidia.com/Vulkan">Vulkan</a> APIs in competition to the DirectX APIs. Originally, they had attempted to support both APIs simultaneously, but later opted to focus on Vulkan.</p>

<h4 id="inspiration-for-hatchit">Inspiration for Hatchit&nbsp;<a class="hanchor" href="#inspiration-for-hatchit" aria-label="Anchor link for: Inspiration for Hatchit">🔗</a></h4>
<p>Guerrette remembers a specific type of task he wanted to accomplish with Hatchit. In the game editor, he wanted to be able to construct a render pass instead of having the engine handle it internally. An earlier project had motivated the need for this feature. By being able to create the render passes in real time, a developer would be able to create something like a custom shader that bends vertices into straight, geometric shapes in real-time. His earlier project, Mineshaft Mayhem, demonstrates this concept with how the mineshaft seems to be warping and turning, but the tunnels are actually straight in the editor.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/tzLMCVoDDGs?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>You can find more videos of Guerrette&rsquo;s work on his <a href="https://www.youtube.com/channel/UC5HDOa8-y1loj3SUm4Zxzyw">YouTube channel</a>.</p>

<h2 id="whats-happening-now">What&rsquo;s happening now&nbsp;<a class="hanchor" href="#whats-happening-now" aria-label="Anchor link for: What&rsquo;s happening now">🔗</a></h2>
<p>Since starting the project, Tufankjian graduated and is now working at Amazon Game Design. Over the summer, the community started to show interest in the project. They&rsquo;ve received a pull request from one member outside of the core developer team and have several issues filed against the <a href="https://github.com/thirddegree">different repositories</a> for the engine.</p>
<p>Matt has a few milestones set ahead for the project this year. One of the biggest tasks he is working on is getting the Vulkan renderer multi-threaded design implemented and working. This vastly speeds up the render time when working on projects and is also proving one of the greatest challenges so far. In addition to the multi-threaded design, he hopes to have game objects and components serialized with JSON. This would make it easier for the editor application to modify game data and manipulate configurations with <a href="https://en.wikipedia.org/wiki/Qt_%5C%28software%5C%29">Qt</a>.</p>

<h2 id="looking-at-foss-and-hatchit">Looking at FOSS and Hatchit&nbsp;<a class="hanchor" href="#looking-at-foss-and-hatchit" aria-label="Anchor link for: Looking at FOSS and Hatchit">🔗</a></h2>
<p>Guerrette is not unfamiliar with open source, but this is his largest undertaking yet with an open source project. While working on the project, using an open source development model has made it easier to receive feedback, work with community contributors outside of the RIT community, and also handle some technical aspects well.</p>

<h4 id="benefits-of-working-in-the-open">Benefits of working in the open&nbsp;<a class="hanchor" href="#benefits-of-working-in-the-open" aria-label="Anchor link for: Benefits of working in the open">🔗</a></h4>
<p>Working on the project on GitHub has proved to benefit the project in a variety of ways. One of the most clear ways this helped is having people file issues and raise concerns over parts of the code. In one case, someone filed an issue against an older library that made a mathematical error in its calculations. &ldquo;Having the world&rsquo;s eyes on your project to catch errors is a good thing,&rdquo; Matt said. Guerrette found the freedom to use other open source libraries and dependencies for the engine especially useful. All the licenses were compatible and presented no issue to work with.</p>
<p>Some technical challenges were also made easier with open source tooling. One of the greatest challenges for the Hatchit team was writing the build system to use build system generator software and maintain compatibility with both Windows and Linux. Locally linking dependencies in the project was inconvenient and made the project unnecessarily huge. With git, they used submodules to link dependencies in the repository and build them from source when compiling Hatchit. &ldquo;Being able to link dependency repositories has been really useful, especially for developing on Windows,&rdquo; Matt found. Additionally, some of the continuous integration features on GitHub and other services made it easy to quickly test new changes for compatibility.</p>

<h4 id="challenges-of-open-source">Challenges of open source&nbsp;<a class="hanchor" href="#challenges-of-open-source" aria-label="Anchor link for: Challenges of open source">🔗</a></h4>
<p>Along the way, some challenges came by developing in the open that the team worked to resolve. With the convenience of using git submodules also came a difficulty of tracking upstream changes. On occasion, a dependency might break in the project. The team then has to check if the project has updated or changed upstream or if a fix needs to be made locally in their project.</p>
<p>Additionally, community outreach is a challenge Guerrette is hoping to focus on as the new project lead. He shares development updates on his <a href="https://www.youtube.com/channel/UC5HDOa8-y1loj3SUm4Zxzyw">YouTube channel</a> and occasionally will stream his development on <a href="https://www.livecoding.tv/">livecoding.tv</a>. One thing is working on to make it easier for new contributors to get involved is recommending them to try building the engine from the source code. This gives potential developers experience with compiling the engine and walks them through a variety of documentation available with the project.</p>

<h2 id="get-involved">Get involved&nbsp;<a class="hanchor" href="#get-involved" aria-label="Anchor link for: Get involved">🔗</a></h2>
<p>The Hatchit team is working further on the game engine and are looking for community participation. To get involved, Guerrette recommends checking out the l<a href="https://gitter.im/thirddegree/Hatchit">Hatchit Gitter chat</a> and to review the <a href="https://github.com/thirddegree/Hatchit/blob/master/README.md">README file</a> on the main repository. Any contributions are welcome, either in the form of pull requests or filing issues.</p>]]></description></item><item><title>How to set up GitHub organizations for clubs</title><link>https://jwheel.org/blog/2016/10/set-up-github-organizations-clubs/</link><pubDate>Mon, 17 Oct 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/10/set-up-github-organizations-clubs/</guid><description><![CDATA[<p>For many universities and colleges, there are many technical clubs that students can join. Some clubs focus on programming or using programming for collaborative projects. For anything involving code, clubs usually turn to GitHub. GitHub has become the standard for open source project hosting by thousands of projects in the world. GitHub organizations are the tool GitHub provides to allow someone to create a team of people for working on projects. Organizations can have many repositories and smaller teams inside of them. When getting started with GitHub, there is a method to the madness, and there are ways you can have an ordered organization instead of keeping it messy. Here&rsquo;s how you do it.</p>

<h2 id="teams-for-purpose-teams-for-tracking">Teams for purpose, teams for tracking&nbsp;<a class="hanchor" href="#teams-for-purpose-teams-for-tracking" aria-label="Anchor link for: Teams for purpose, teams for tracking">🔗</a></h2>
<p>Team structure and designation are some of the most important ways to use organizations effectively. Since GitHub <a href="https://github.com/blog/2020-improved-organization-permissions">revamped teams</a>, they are an effective way to categorize members and to assign privileges. You can decide who can create repositories, who can push code to what repositories, or who has admin rights on projects.</p>
<p>You should create teams that have a purpose and will work with real repositories. For example, if your club has various committees, you should create a team for each committee. Then, you can give each committee privileges to their own repositories and leave it to them to manage. Being smart with what teams you create is important. Teams with a purpose should exist to carry out certain tasks within the organization. Equip them with the means to do so.</p>
<p>It&rsquo;s also helpful to create teams for tracking. In a university setting, students will graduate in a certain year and then they&rsquo;ll be gone. For university clubs using GitHub organizations, create teams for every graduating class, staff and faculty, and alumni (e.g. &ldquo;Class of 2019, Class of 2020, University staff, Graduated members, etc.). While it may seem trivial with a few people in the beginning, it is useful as the organization grows. If someone wonders why someone is part of a repository or if they are still participating in the club or organization, it is easy to see whether the student is still on campus or whether they are a graduated alumnus or alumna.</p>

<h2 id="use-organization-for-on-boarding">Use organization for on-boarding&nbsp;<a class="hanchor" href="#use-organization-for-on-boarding" aria-label="Anchor link for: Use organization for on-boarding">🔗</a></h2>
<p>Organizations are a powerful tool for bringing new people into your club or group. The moment someone receives an email inviting them to be a member of the GitHub organization, it holds a certain weight. &ldquo;<em>Wow, I&rsquo;m officially a part of this thing!</em>&rdquo; It&rsquo;s a great way to create an inclusive environment and enable new contributors to feel like they are a part of the team.</p>
<p>Having a team for newcomers or new recruits is helpful to have in place beforehand. The group doesn&rsquo;t have any real permissions in the organization, but it is a temporary holding ground for new members while they figure out their position in the club. But this way, they get to be included in the member list and show off your organization&rsquo;s logo in their profile if they choose.</p>

<h2 id="publicize-your-membership-on-github">Publicize your membership on GitHub&nbsp;<a class="hanchor" href="#publicize-your-membership-on-github" aria-label="Anchor link for: Publicize your membership on GitHub">🔗</a></h2>
<p>If someone is in your organization, make sure you encourage them to show it off! By default, GitHub sets the team member visibility to private. Unless a member of the organization sets themselves as public, they won&rsquo;t appear as a part of the organization to visitors.</p>
<p>
<figure>
  <img src="https://i.jwf.io/u/6631b7d25bbbdfa9033a2d922912fddd.png" alt="Publicize a GitHub membership" loading="lazy">
  <figcaption>\&#34;People\&#34; page of an organization - this is where you publicize a GitHub membership</figcaption>
</figure>
</p>
<p>Publicizing your membership is an underestimated step in bringing new contributors in. It&rsquo;s even helpful for older members too. By publicizing memberships, you are giving faces and real people to characterize your organization. If someone finds your organization in a search or in a link, it looks better to have rows of people associated with the group. The alternative of a team with what looks like no members implies your club is inactive. It can also make your club look smaller than it is. Additionally, individual team members also get to show off your organization on their individual profiles. This is helpful for anyone visiting their profile for activities or programming experience. For university students, this is helpful for applying for co-ops or internships.</p>
<p>To make a membership visible, the organization member has to go to the &ldquo;People&rdquo; page of the organization. On the page, next to their name, there is an option for &ldquo;Public&rdquo; or &ldquo;Private&rdquo; in a drop-down menu. Change it to &ldquo;Public&rdquo;.</p>

<h2 id="consider-repository-for-tasks">Consider repository for tasks&nbsp;<a class="hanchor" href="#consider-repository-for-tasks" aria-label="Anchor link for: Consider repository for tasks">🔗</a></h2>
<p>
<figure>
  <img src="https://camo.githubusercontent.com/4a034f0e6a4db65dc0d7779e1752256572174182/68747470733a2f2f692e696d6775722e636f6d2f77566b327771302e6a7067" alt="The FOSS@MAGIC " loading="lazy">
  <figcaption>The FOSS@MAGIC (<a href="http://foss.rit.edu/" class="bare">http://foss.rit.edu/</a>) family dinner, organized with an issue tracker</figcaption>
</figure>
</p>
<p>While not essential, a repository for real-life tasks or issues in a club can be a helpful planning tool. It also makes it easy for people to see what the club or group is working on. This promotes the idea of transparent and open leadership. You can use labels to tag issues for specific types of work or committees. Milestones are useful for deadlines or goals the group is working towards. The new <em>Projects</em> feature may also be useful in a repository for real-life task management.</p>
<p>For an example of a repository like this, you can see the <a href="https://github.com/FOSSRIT/fossbox-tasks/issues">FOSSRIT/fossbox-tasks</a> repository on GitHub. We even <a href="https://github.com/FOSSRIT/fossbox-tasks/issues/16">planned a dinner</a> on GitHub!</p>

<h2 id="go-forth-and-conquer">Go forth and conquer!&nbsp;<a class="hanchor" href="#go-forth-and-conquer" aria-label="Anchor link for: Go forth and conquer!">🔗</a></h2>
<p>Congratulations! You now have some basic knowledge and ideas on how to effectively use GitHub organizations for a club or small team. While this guide is not completely thorough, it helps give some starting points to consider when you&rsquo;re setting up your organization for the first time. It&rsquo;s also never too late to make changes later, if your organization is already formed.</p>
<p>If you have questions, comments, or feedback, I&rsquo;d love to hear about it! Feel free to leave a comment below.</p>]]></description></item><item><title>How Minecraft got me involved in the open source community</title><link>https://jwheel.org/blog/2016/10/minecraft-involved-open-source-community/</link><pubDate>Mon, 10 Oct 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/10/minecraft-involved-open-source-community/</guid><description><![CDATA[<p><a href="https://opensource.com/life/16/10/my-open-source-story-justin-flory"><em>This post was originally published on OpenSource.com.</em></a></p>
<hr>
<p>When people first think of &ldquo;open source&rdquo;, their mind probably first goes to code. Something technical that requires an intermediate understanding of computers or programming languages. But open source is a broad concept that goes beyond only binary bits and bytes. Open source projects hold great regard for community participation. The community is a fundamental piece of a successful open source project. For my experience getting involved with open source, I began in the community and worked my way around from there. At the age of fifteen, I was beginning my open source journey and I didn&rsquo;t even know it.</p>

<h2 id="gaming-introduces-open-source">Gaming introduces open source&nbsp;<a class="hanchor" href="#gaming-introduces-open-source" aria-label="Anchor link for: Gaming introduces open source">🔗</a></h2>
<p>One of my strongest memories of a &ldquo;gaming addiction&rdquo; was when I was fifteen and a younger cousin introduced me to the game Minecraft. The game was in beta then, but I remember the sandbox-style of the game entertaining the two of us for hours. But what I discovered was that playing the game alone became boring. Playing and mining with others made the experience more fun and meaningful. In order to do this, I learned I would have to host a server for my friends to connect to play with me.</p>
<p>I originally used the &ldquo;vanilla&rdquo; Minecraft server software at first, but it was limited to what it could do, and didn&rsquo;t compare to other multiplayer servers in existence. They all seemed to be using something that offered more, so players could play games, cast spells, or do other unique things that would normally not be possible in the game. After digging, I discovered <a href="https://bukkit.org/">Bukkit</a>, an open source Minecraft server software with an extensible API to let developers change the multiplayer experience. I soon became wrapped up with Bukkit like a child with a new toy. Except this toy had me digging through my computer to set up &ldquo;port forwarding&rdquo;, &ldquo;setting NAT records&rdquo;, and &ldquo;creating static IP addresses&rdquo;. I was teaching myself the basics of computer networking in the guise of creating a game server for my friends.</p>
<p>Over time, my Minecraft server hobby began to take up more and more time. More people began playing on my server and I began searching for ways to improve the performance of my server. After doing some digging, I discovered the <a href="https://www.spigotmc.org/">SpigotMC project</a>, shortened to just Spigot. Spigot was a <em>fork</em> of the Bukkit project that made specific enhancements to performance. After trialing it on my server, I discovered the performance gains were measurable and I would commit to using Spigot from then on.</p>

<h2 id="participating-in-spigotmc">Participating in SpigotMC&nbsp;<a class="hanchor" href="#participating-in-spigotmc" aria-label="Anchor link for: Participating in SpigotMC">🔗</a></h2>
<p>Before long, I began running into new challenges with managing my Minecraft server community, whether it was finding ways to scale or finding the best ways to build a community up. In October 2013, I registered an account on the Spigot forums to talk with other server owners and seek advice on ways I could improve. I found the community welcoming and accepting to helping me learn and improve. Several people in the community were owners of larger servers or developers of unique plugins to Spigot. In response to my detailed inquisitions, they responded with genuine and helpful feedback and support. Within a week, I was already in love with the people and helpfulness of the Spigot community.</p>
<p>I became an active participant in the forum community in Spigot. Through the project, I was <a href="https://fedoramagazine.org/beginners-guide-irc/">introduced to IRC</a> and how to use it for communicating with other server owners and developers. What I didn&rsquo;t realize was a trend in my behavior. Over time, I began shifting away from asking all the questions. Almost as if in a role reversal, I became the one answering questions and helping support other new server owners or developers. I became the one in an advisory role instead of the one always asking.</p>
<p>
<figure>
  <img src="/img/Spigot-Team.jpg" alt="SpigotMC team at annual Minecraft convention, MINECON, in 2015" loading="lazy">
  <figcaption>SpigotMC (<a href="https://www.spigotmc.org" class="bare">https://www.spigotmc.org</a>) team at annual Minecraft convention, MINECON, in 2015</figcaption>
</figure>
</p>
<p>In April 2014, the project lead of Spigot reached out to me asking if I would consider a role as a community staff member. Part of my responsibilities would be responding to reports, encouraging a helpful and friendly community, and maintaining the atmosphere of the community. With as much prestige and honor as my sixteen-year-old self could muster, I accepted and began serving as a community moderator. I remember feeling privileged to serve the position – I would finally get to help the community that had done so much to help me.</p>

<h2 id="expanding-the-open-source-horizon">Expanding the open source horizon&nbsp;<a class="hanchor" href="#expanding-the-open-source-horizon" aria-label="Anchor link for: Expanding the open source horizon">🔗</a></h2>
<p>Through 2014 and 2015, I actively served as a moderator of the community, both in the forums and the IRC network for Spigot. I remained in the Spigot community as the project steadily grew. It was incredible to see how the project was attracting more and more users.</p>
<p>However, my open source journey did not end there. After receiving my high school diploma in May 2015, I had set my sights on the <a href="https://www.rit.edu/">Rochester Institute of Technology</a>, a school I noted as having the country&rsquo;s only <a href="https://www.rit.edu/news/story.php?id=50590">Free and Open Source Software minor</a>. By coincidence, I also noticed that my preferred Linux distribution, Fedora, was holding its annual contributor <a href="https://fedoramagazine.org/flock-2015-rochester-institute-of-technology/">conference in Rochester</a>, a week before I would move in for classes. I decided I would make the move up early to see what it was all about.</p>

<h2 id="flock-2015-introduces-fedora">Flock 2015 introduces Fedora&nbsp;<a class="hanchor" href="#flock-2015-introduces-fedora" aria-label="Anchor link for: Flock 2015 introduces Fedora">🔗</a></h2>
<p>The summer passed, and before I knew I was ready, I was packing up from my home outside of Atlanta, Georgia to leave for Rochester, New York. After fourteen hours of driving, I finally arrived and began moving into my new home. A day after I arrived, <a href="https://flocktofedora.org/">Flock</a> was slated to begin, marking my first journey in Rochester.</p>
<p>
<figure>
  <img src="/img/Flock-2015-Strong-Museum-of-Play.jpg" alt="Group photo of Fedora Flock 2015 attendees at the Strong Museum of Play" loading="lazy">
  <figcaption>Group photo of Fedora Flock (<a href="https://flocktofedora.org/" class="bare">https://flocktofedora.org/</a>) 2015 attendees at the Strong Museum of Play (<a href="http://www.museumofplay.org/" class="bare">http://www.museumofplay.org/</a>)</figcaption>
</figure>
</p>
<p>At Flock, I entered as an outsider. I was in an unfamiliar city with unfamiliar people and an open source project I was only mildly familiar with. It was all new to me. But during that week, I discovered a community of people who were united around four common ideals. Freedom, Friends, Features, First: the <a href="https://fedoraproject.org/wiki/Foundations">Four Foundations</a> of the Fedora Project were made clear to me. The community members at Flock worked passionately towards advancing their project during the talks and workshops. And after the talks finished, they gathered together for hallway discussions, sharing drinks, and enjoying the presence of their (usually) internationally dispersed team. Without having ever attended a Fedora event before, I knew that the Four Foundations and the community behind Fedora were the real deal. Leaving Flock that year, I vowed to pursue becoming a part of this incredible community.</p>

<h2 id="pen-to-paper-keyboard-to-post">Pen to paper, keyboard to post&nbsp;<a class="hanchor" href="#pen-to-paper-keyboard-to-post" aria-label="Anchor link for: Pen to paper, keyboard to post">🔗</a></h2>
<p>The first major step I took towards contributing to the Fedora Project was in September 2015, during <a href="http://www.softwarefreedomday.org/">Software Freedom Day</a>. Then Fedora Community Action and Impact Coordinator <a href="http://decausemaker.org/">Remy DeCausemaker</a> was in attendance <a href="https://fedoraproject.org/wiki/Softwarefreedomday/2015">representing Fedora</a>. During the event, I reached out to the <a href="https://fedoramagazine.org/">Fedora Magazine</a> editorial team asking to become involved as a writer. By the end of September, I penned my first article for the Fedora Magazine, tying in my experience in the Spigot community to Fedora: <a href="https://fedoramagazine.org/run-a-minecraft-server-using-spigot/">run a Minecraft server using Spigot</a>.</p>
<p>My first step getting involved with the Fedora community was an exciting one. I remember feeling proud and excited to see my first article published on the front page, not only helping Fedora, but also helping Spigot. I realized then that it was relatively straightforward to contribute this kind of content, and I would keep writing about software I was familiar with for the Magazine.</p>
<p>As I continued writing posts for the Fedora Magazine, I became aware of another team forming up in Fedora: the <a href="https://fedoraproject.org/wiki/CommOps">Community Operations</a>, or CommOps, team. I subscribed to their mailing list, joined the IRC channel, and attended the first meetings. Over time, I became wrapped up and involved with the community efforts within Fedora. I slowly found one thing leading to another.</p>
<p>Today in Fedora, I am the leading member of the Community Operations (CommOps) team, the editor-in-chief of the Fedora Magazine, a Marketing team member, an Ambassador of North America, a leading member of the Diversity Team, and a few other things.</p>

<h2 id="advice-for-other-students">Advice for other students&nbsp;<a class="hanchor" href="#advice-for-other-students" aria-label="Anchor link for: Advice for other students">🔗</a></h2>
<p>When you&rsquo;re first getting started, it can sometimes be tough and a little confusing. As students getting involved with FOSS, there are a few challenges that we might have to face. A lot of this can be with making the first steps into a new project. There are countless open source projects of various sizes and they all do things a bit differently from others, so the process changes from project to project.</p>
<p>One of the most obvious challenges with getting involved is your personal experience level. Especially when getting started, it can be easy to look at a large project or well-known project and see all the work devoted there. There are smart and active people working on these projects, and many times their contributions are quite impressive! One of the many concerns I&rsquo;ve seen other students here face (including myself at first) is wondering how someone with beginning to moderate experience or knowledge can get involved, in comparison to some of these contributions from active contributors. If it&rsquo;s a large project, like Fedora, it can be intimidating to think where to start when there&rsquo;s so many things to do and areas to get involved with. But if you think of it all as one big project, it is intimidating and difficult for you to make that first step.</p>
<p>Break a bigger project into smaller pieces. Start small and look for something you can help with. A healthy open source project usually will have things like easyfix bugs that are good ones to start with if it&rsquo;s your first time contributing. Keep an eye out for those if you&rsquo;re getting started.</p>
<p>Another challenge you might face as a student or beginner to open source is something called <a href="https://opensource.com/life/15/8/interview-major-hayden-rackspace">imposter syndrome</a>. For me, this was something I had identified with before I knew what it was. For a definition, I&rsquo;ll pull straight from <a href="https://en.wikipedia.org/wiki/Impostor_syndrome">Wikipedia</a> first: &quot; Term referring to high-achieving individuals marked by an inability to internalize their accomplishments and a persistent fear of being exposed as a &ldquo;fraud&rdquo;.</p>
<p>Imposter syndrome can be a common feeling as you get involved with open source, especially if comparing yourself to some of those active and smart contributors that you meet as you become involved. But you should also remember you are a student – comparing yourself or your contributions to a professional or someone with years of experience isn&rsquo;t fair to yourself! It&rsquo;s not apple-to-apples. Your contributions as you get involved with open source are worthy and valuable to an open source project regardless of how deep, how many, or how much time you spend on the project. Even if it&rsquo;s a couple of hours in the week, that&rsquo;s saving others those couple of hours and it&rsquo;s adding something into the project. A contribution is a contribution – it&rsquo;s a bad idea to rate the worth of contributions to other contributions.</p>
<p>Those are some of the challenges that are useful to know and understand as you become more involved with FOSS. If you know the challenges you are up against, it makes it easier to handle them as they come.</p>
<p>There are also benefits to contributing to open source as a student as well. Contributing to open source is a great way for you to take knowledge and info you have learned from classes and begin applying it to real-world projects and gain experience. It&rsquo;s one thing to take you to the next level as a student. If you are contributing to a project in the real world, that is unique experience that is helpful for you for future career outlooks as well.</p>
<p>It&rsquo;s also a great networking opportunity. In open source, you meet many incredible and smart people. In my time in Fedora, I&rsquo;ve met many contributors and had various mentors help me get involved. I&rsquo;ve made new friends and met people who I normally would never have had the opportunity to meet.</p>
<p>
<figure>
  <img src="/blog/2016/10/IMG_9336.jpg" alt="River boat cruise dinner with Fedora friends at Flock 2016" loading="lazy">
  <figcaption>River boat cruise dinner with Fedora friends at Flock 2016</figcaption>
</figure>
</p>
<p>There are also opportunities for leadership in open source projects. Whether it&rsquo;s just one task, one bug, or even a role, you might find that sometimes all it takes is someone willing to say, &ldquo;I&rsquo;ll do this!&rdquo; to have leadership on something. It might be challenging or difficult at first, but it&rsquo;s a great way for you to understand working in team environments, how to work effectively even if you&rsquo;re remote, and how to break down a task and work on finding solutions for complex problems.</p>
<p>Lastly, it&rsquo;s important for younger people to become more involved with open source communities. As students and younger community members, we add unique perspective and ideas to open source projects. It&rsquo;s important to a healthy community for an open source project and any open source project worth contributing to should be welcoming and accepting to students who are willing to spend time working on the project and helping solve those problems, whether they&rsquo;re bugs, tasks, or other things. In short, there is absolutely a role for students getting involved with open source!</p>]]></description></item><item><title>Żegnajcie! Fedora Flock 2016 in words</title><link>https://jwheel.org/blog/2016/08/fedora-flock-2016/</link><pubDate>Mon, 15 Aug 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/08/fedora-flock-2016/</guid><description><![CDATA[<p>From August 2 - 5, the annual Fedora contributor conference, <a href="https://flocktofedora.org/">Flock</a>, was held in the beautiful city of <a href="https://en.wikipedia.org/wiki/Krak%C3%B3w">Kraków, Poland</a>. Fedora contributors from all over the world attend for a week of talks, workshops, collaboration, fun, and community building (if you&rsquo;re tuning in and not sure what Fedora is exactly, you can read more <a href="https://fedoraproject.org/wiki/Overview">here</a>). Talks range from technical topics dealing with upcoming changes to the distribution, talks focusing on the community and things working well and how to improve, and many more. The workshops are a chance for people normally separated by thousands of miles to work and collaborate on real issues, problems, and tasks in the same room. As a Fedora contributor, this is the &ldquo;premier&rdquo; event to attend as a community member.</p>
<p>Although my report comes a little late, it comes with a lot of thought and reflection over the week at Flock. I participated as a speaker for my talk with <a href="https://fedoraproject.org/wiki/User:Jonatoni">Jona Azizaj</a> titled, &ldquo;<a href="https://jflory7.fedorapeople.org/pub/flock/2016/university-outreach/flock-2016-university-outreach-new-task-new-mindset-slides.pdf">University Outreach: New task or new mindset?</a>&rdquo; I also worked with <a href="https://fedoraproject.org/wiki/User:Bee2502">Bee Padalkar</a> on running the <a href="https://fedoraproject.org/wiki/CommOps">Community Operations</a> (CommOps) team workshop for <a href="https://jflory7.fedorapeople.org/pub/flock/2016/commops-workshop/flock-2016-commops-workshop-slides.pdf">planning our own future tasks</a> in coming months and knowing what issues or topics the community had in mind. And lastly, due to last-minute scheduling issues, I helped plan and organize the <a href="https://flock2016.sched.org/event/76nj/diversity-women-in-open-source">Diversity Panel</a> with <a href="https://fedoraproject.org/wiki/User:Amsharma">Amita Sharma</a> and many other incredible contributors.</p>
<p>Without further ado, this is my analysis and report on the events at Flock 2016. And for anyone wondering what &ldquo;żegnajcie&rdquo; in the title means, Google Translate tells me that means &ldquo;farewell!&rdquo; in Polish.</p>

<h2 id="general-experiences-around-flock">General experiences around Flock&nbsp;<a class="hanchor" href="#general-experiences-around-flock" aria-label="Anchor link for: General experiences around Flock">🔗</a></h2>
<p>As a second-time visitor to Flock, I was a little familiar with the conference structure. <a href="https://fedoraproject.org/wiki/User:Jzb">Joe Brockmeier</a> made a <a href="https://fedoraproject.org/wiki/Flock/Volunteers2016">call for volunteers</a> to help transcribe talks over IRC. I signed myself up to help transcribe all the talks and workshops I was attending to help cover them in the &ldquo;CommOps-style&rdquo; way that I run meetings. This proved effective and I hope that my transcriptions were useful both to those who wanted to keep up with Flock from home and attendees who wanted to remember specific parts of talks after the conference ended. You can find an index of all talks and their transcriptions <a href="https://fedoraproject.org/wiki/Flock_2016_Talks">on the wiki</a>.</p>
<p>
<figure>
  <img src="/blog/2016/08/IMG_9238.jpg" alt="Brian Exelbierd nobly tries to organize Fedora Flock attendees for walking tour" loading="lazy">
  <figcaption>Brian Exelbierd (<a href="https://fedoraproject.org/wiki/User:Bex" class="bare">https://fedoraproject.org/wiki/User:Bex</a>) nobly tries to organize Flock attendees for the walking tour on Tuesday night.</figcaption>
</figure>
</p>
<p>The event organizers did an effective and incredible job of planning the fine details for the conference. When I arrived on August 1 at the airport, <a href="https://badges.fedoraproject.org/user/rluzynski">Rafał Lużyński</a> greeted me and provided a ride from the airport to the hotel. Along with us at the airport was <a href="https://fedoraproject.org/wiki/User:Bee2502">Bee Padalkar</a>, <a href="https://fedoraproject.org/wiki/User:Amsharma">Amita Sharma</a>, <a href="https://fedoraproject.org/wiki/User:Sgallagh">Stephen Gallagher</a> (thanks for sharing a plane ride with me!), and <a href="https://pagure.io/user/ryanlerch">Ryan Lerch</a>. Throughout the entire conference, I was always amazed at the hospitality and constant willingness to help by all the local organizers. For traveling in a country where the language was completely foreign, I never felt too confused or had a difficult time. I remember when Rafał helped translate the menu options for me at the restaurants we ate at on the first day, which was a major help for finding vegetarian choices. My impression on Kraków and then Poland is high and I hope to return again someday in the future.</p>
<p>Overall, the &ldquo;i&rsquo;s were dotted and the t&rsquo;s were crossed&rdquo;, as the saying goes. I am impressed by and thankful for the hard work that went into organizing this conference. The work of the organizers is one of the most important roles of the entire conference as it enables us to come together as a community. Events like Flock are powerful in many ways, and it would be easy for a conference to fall towards the &ldquo;lousy&rdquo; side of the scale. But the organizers, volunteers, and staff behind Flock help make the conference an amazing experience for all attendees. It&rsquo;s difficult to explain my appreciation for this work that enables so many incredible experiences and magic to come together every year.</p>

<h2 id="my-participation-at-flock">My participation at Flock&nbsp;<a class="hanchor" href="#my-participation-at-flock" aria-label="Anchor link for: My participation at Flock">🔗</a></h2>
<p>Unlike last year&rsquo;s Flock, I also participated as a speaker. In all, I helped organize and plan three different talks and workshops, which are detailed individually as follows.</p>

<h4 id="university-outreach-new-task-or-new-mindset">University Outreach: New task or new mindset?&nbsp;<a class="hanchor" href="#university-outreach-new-task-or-new-mindset" aria-label="Anchor link for: University Outreach: New task or new mindset?">🔗</a></h4>
<p>My first talk was on Tuesday. Together with <a href="https://fedoraproject.org/wiki/User:Jonatoni">Jona Azizaj</a>, we presented on the topic of outreach to students and university staff and faculty for the Ambassadors program. The talk structure was past, present, and future. We begin by looking at past efforts and trying to see what we could learn by things that have happened before now. Then, we looked at how Fedora is doing in working towards the <a href="https://fedoraproject.org/wiki/Objectives/University_Involvement_Initiative">University Involvement Initiative</a> and what tactics are effective now. We also focused on areas of student outreach with the events we are attending now. Everything up to this point was more of presenting information.</p>
<p>
<figure>
  <img src="/blog/2016/08/IMG_9222.jpg" alt="Me and Jona during our presentation on University Outreach at Fedora Flock" loading="lazy">
  <figcaption>Me and Jona during our presentation on University Outreach in Fedora</figcaption>
</figure>
</p>
<p>After running through the past and present, we presented the direction for moving forward with improving our outreach to universities, high schools, and their students and faculty members. We broke up the main points into four big topics: on-boarding, mentorship, focusing on not just students, and improving visibility. We presented some of our own thoughts on these topics and then opened the floor for community ideas and brainstorming.</p>
<p>My original plan for this talk was to present more hard information on how to begin moving forward sooner than later (e.g. &ldquo;less talking, more acting!&rdquo;). However, I had made plans and expectations for an <a href="https://fedoraproject.org/wiki/FAD_EDU_2016">EDU FAD</a> to happen in late July, which at the time, would be the place where resources and guides were created focusing on this specific topic. But due to <a href="https://web.archive.org/web/20161022131347/https://decausemaker.org/posts/friendsfeaturesfreedomfirstforever.html">sudden complications</a>, the FAD never happened. The resources I hoped to have were not available. So the end of this talk was a valuable time for attendees to leave their own thoughts and ideas on generating these resources and what kind of areas we should focus on first. The room was packed, and many people with diverse ideas had something to offer. The feedback was at times harsh, but I appreciated the directness towards coming up with solutions and the interest in the topic (after all, a full room says a lot more than an empty room).</p>
<p>A super big and special thanks goes to both <a href="https://fedoraproject.org/wiki/User:Ardian">Ardian Haxha</a> and <a href="https://fedoraproject.org/wiki/User:Jonatoni">Jona Azizaj</a>. Ardian was originally the other co-speaker for this talk, but was unable to attend Flock due to visa issues in Kosovo. Jona willingly stepped up as an interested member of the community to help deliver the talk and her help was greatly appreciated and helpful.</p>
<p>Once the videos of Flock are uploaded, I hope to review the comments and feedback from the talk once more and begin converting the ideas into action.</p>

<h4 id="diversity-panel">Diversity Panel&nbsp;<a class="hanchor" href="#diversity-panel" aria-label="Anchor link for: Diversity Panel">🔗</a></h4>
<p>The first-ever <a href="https://flock2016.sched.org/event/6yp5/diversity-panel-building-an-inclusive-community">Diversity Panel</a> was originally headed by Fedora&rsquo;s <a href="https://fedoraproject.org/wiki/Diversity_Adviser">Diversity Adviser</a>, <a href="https://fedoraproject.org/wiki/User:Tatica">María &rsquo;tatica&rsquo; Leandro</a>. But due to medical concerns, María was unable to make it to Flock. <a href="https://fedoraproject.org/wiki/User:Amsharma">Amita Sharma</a> stepped up to help lead and organize the panel this year. Amita reached out to me for help as a fellow member of the <a href="https://fedoraproject.org/wiki/Diversity">Diversity Team</a>, along with several others at the conference.</p>
<p>
<figure>
  <img src="/blog/2016/08/IMG_9317.jpg" alt="Intense thinking on the Diversity Panel at Fedora Flock" loading="lazy">
  <figcaption>Panelists on the Diversity Panel intensely thinking about the questions and concerns being fielded by the audience.</figcaption>
</figure>
</p>
<p>I was invited to take part, but I didn&rsquo;t get to spend as much time answering questions or offering ideas as I would have liked to. I helped organize and establish a remote call with María to participate from her home and also helped document the panel with some picture-taking. I feel I have to say this because the picture I&rsquo;ve seen shared the most from the panel has me looking down at my phone while the other panelists look deep in thought! At that exact moment, I was replying to messages with María to help troubleshoot some audio problems and help her identify who was speaking.</p>
<p>Overall, I feel the panel was a great success and I hope to see it become a regular part of Flock every year. We were able to target and name issues that the community feels needed focus in terms of diversity. Awareness was also raised for the incredibly large and diverse community we have. I hope together we can work towards breaking some of the stereotypes of Linux and open source communities, starting with our own. Big thanks (and hugs!) to Amita for helping organize the panel at the last minute, and a round of applause for all the panelists (<a href="https://fedoraproject.org/wiki/User:Mattdm">Matthew Miller</a>, <a href="https://fedoraproject.org/wiki/User:Marinaz">Marina Zhurakhinskaya</a>, <a href="https://fedoraproject.org/wiki/User:Lailah">Sylvia Sánchez</a>, <a href="https://fedoraproject.org/wiki/User:Bee2502">Bee Padalkar</a>, <a href="https://fedoraproject.org/wiki/User:Jonatoni">Jona Azizaj</a>, and <a href="https://fedoraproject.org/wiki/User:Riecatnor">Marie Nordin</a>).</p>

<h4 id="commops-workshop">CommOps workshop&nbsp;<a class="hanchor" href="#commops-workshop" aria-label="Anchor link for: CommOps workshop">🔗</a></h4>
<p>The <a href="https://fedoraproject.org/wiki/CommOps">Community Operations</a> (CommOps) workshop was originally headed by Fedora&rsquo;s <a href="https://fedoraproject.org/wiki/Community_Leader">Community Lead</a>, <a href="https://fedoraproject.org/wiki/User:Decause">Remy DeCausemaker</a>, but due to an <a href="http://decausemaker.org/posts/friendsfeaturesfreedomfirstforever.html">opportunity of a lifetime</a>, he left his position at Red Hat and was unable to make it to Flock. Together with <a href="https://fedoraproject.org/wiki/User:Bee2502">Bee Padalkar</a>, we took over responsibility for this workshop.</p>
<p>Together, we helped plan out the key areas of focus we wanted to have for the workshop. We decided to focus on on-boarding discussions with community members and planning ahead for tasks we wanted to work on in the coming year. We created and developed some <a href="https://jflory7.fedorapeople.org/pub/flock/2016/commops-workshop/flock-2016-commops-workshop-slides.pdf">slides</a> to help structure the workshop. Most of our preliminary planning work was done in an Etherpad, but some of the general structure and outlining exists in our <a href="https://fedoraproject.org/wiki/CommOps/Flock_2016">wiki planning pad</a>.</p>
<p>In the literal last minute before the talk began, Remy reached out to me and we patched him in for a brief audio introduction over Google Hangouts. He added some background and context to the work happening in CommOps over the past few months. Even with the suddenness of the arrangement, I was glad to have Remy with us for a time as we launched into the workshop. Unfortunately, it was only after his words we realized that our recording hadn&rsquo;t started. So his words will live on in our minds and memories forever instead.</p>
<p>The on-boarding discussion was shaped by those who were in attendance, but as I anticipated, even a few people would be enough to begin discussion to know areas that need extra focus and attention. Two areas we spent a good amount of time covering and reviewing were the <a href="https://fedoraproject.org/wiki/SIGs/Python">Python SIG</a> (thanks to <a href="https://fedoraproject.org/wiki/User:Churchyard">Miro Hrončok</a>) and the <a href="https://fedoraproject.org/wiki/Ambassadors">Ambassadors</a> (thanks to <a href="https://fedoraproject.org/wiki/User:Cwickert">Christoph Wickert</a>). We collected a lot of feedback and notes on these two specific teams. Until the workshop, the Python SIG wasn&rsquo;t on the CommOps radar, and knowing that they could use some help and assistance with on-boarding new team members is the exact type of feedback that was perfect to hear. I knew the Ambassadors would be a large one to tackle, but we were able to get some added context and feedback from a <a href="https://fedoraproject.org/wiki/Fedora_Ambassadors_Steering_Committee">FAmSCo</a> member and veteran Ambassadors to help steer the direction for how that discussion and subsequent actions will be shaped and directed.</p>
<p>We also spent some time collecting feedback on &ldquo;wishes&rdquo; for community metrics that would be helpful to understand both our impact and areas that we could spend more time focusing on. Most of this part of the discussion was lead by CommOps metrics genius Bee. You can see some of her past work on her <a href="https://networksfordata.wordpress.com/">blog</a> (like her <a href="https://networksfordata.wordpress.com/2016/03/08/fedora-at-fosdem/">FOSDEM analysis</a>). One area that would be better to understand is the <a href="https://fedoraproject.org/wiki/G11N">Globalization</a> and translation parts of the project. It would also be powerful to measure contributions by location for translations. The example used was if a small number of translations begin appearing in a new language, we can spend time providing resources and help to new contributors, with the goal of helping spur organic growth and interest in translating Fedora to that local language.</p>
<p>Of course, there are hundreds of different ways we could spin this story on metrics, but hopefully with the information we gained, we can begin directing focus at specific areas and teams. Bee has already started reaching out to Fedora&rsquo;s G11N team!</p>
<p>Again, I&rsquo;d like to reserve a very special thanks to Bee for helping organize, plan, and execute this workshop. I didn&rsquo;t originally anticipate being tasked with this and I had never organized something like this before. Having her help was a lifesaver and I think together we turned it into a productive and informative session. I&rsquo;m looking forward to another year and beyond on working with her throughout the Fedora Project.</p>

<h2 id="what-flock-was-for-me">What Flock was for me&nbsp;<a class="hanchor" href="#what-flock-was-for-me" aria-label="Anchor link for: What Flock was for me">🔗</a></h2>
<p>The context differences between my first and second Flock are immense. At the first Flock, it was a stroke of luck that it happened to be hosted in the same city as where I was already planning to move for attending my university. At Flock 2015, I was a newcomer and even an outsider. I didn&rsquo;t know anyone in the conference, I didn&rsquo;t know the city, and I had only ever wished to contribute up to that point. But I hadn&rsquo;t done much leading up to Flock 2015 other than observe. But even at the conference last year, there was one thing that was evident to me even as an outsider. The community is strong. The community is together. It was clear that the relationships within Fedora also extended outside of Fedora. I remember seeing people have a heated discussion about Fedora, or spend an entire workshop focusing on a particular issue… and after all the work was done for the day, they would walk out, have dinner together, buy each other a drink, and celebrate. There were smiles, there were hugs, there was a true air of friendliness across the entire conference. I didn&rsquo;t have to be much of a contributor to see that, even then.</p>

<h4 id="changing-roles">Changing roles&nbsp;<a class="hanchor" href="#changing-roles" aria-label="Anchor link for: Changing roles">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2016/08/IMG_9383.jpg" alt="Smiling, laughing at Flock 2016" loading="lazy">
  <figcaption>One of the rare moments where I’m in front of the lens, not behind it.</figcaption>
</figure>
</p>
<p>Now, at Flock this year, the roles were reversed. Since becoming involved in Fedora around September and October of 2015, I slowly became immersed and absorbed into the community that I had watched and observed from the sidelines at Flock 2015 (and a year or so before then). But instead of watching this time, I became a participant. IRC names become names, and names become faces. In place of giving karma cookies, we shared real cookies, high-fives, hugs, and our thanks for each other. We had intense discussions on real issues or dilemmas in <em>our</em> project and <em>our</em> community. We built solutions and addressed tricky topics, we challenged each others&rsquo; ideas, we focused on how to improve the thing we spend so much time working on, either paid or volunteering.</p>
<p>And then we would walk around the city, jump on a river boat, visit a brewery, or hit the dance floor together. We smiled, we laughed, and we enjoyed the rare opportunity to eliminate the factor of distance and spend time with our community members. There&rsquo;s an air of incredibleness to this that makes it difficult to describe. But when you&rsquo;ve experienced it, you know exactly what it feels like.</p>

<h4 id="difference-in-saying-goodbye">Difference in saying goodbye&nbsp;<a class="hanchor" href="#difference-in-saying-goodbye" aria-label="Anchor link for: Difference in saying goodbye">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2016/08/IMG_9404.jpg" alt="Bee, Jona, Amita at Kraków brewery at Fedora Flock 2016" loading="lazy">
  <figcaption>Bee, Jona, and Amita as we get ready to have dinner at a famous local brewery in Kraków.</figcaption>
</figure>
</p>
<p>The one major difference between Flock 2015 and 2016 for me, outside of changing roles from an observer to a participant, was something I wasn&rsquo;t expecting. Unlike the previous year where saying goodbye was driving a couple of miles to my apartment and thinking about all the things I saw and experienced, this time it was saying goodbye to new friends, shared memories, and an empowering sense of community. The names in IRC weren&rsquo;t just usernames, but they were faces… people. They were conversations, they were walking around together in a foreign city, they were sharing the view of a beautiful sunset on a river. It was remembering that we&rsquo;re all humans with unique ideas, perspectives, and personalities, even if the tools we use to communicate make it easy to forget that.</p>
<p>Saying goodbye at the end of the week was far harder than I anticipated, and it made me crave the opportunity to close the factor of distance again at the soonest possible opportunity.</p>

<h4 id="on-a-more-personal-note">On a more personal note&nbsp;<a class="hanchor" href="#on-a-more-personal-note" aria-label="Anchor link for: On a more personal note">🔗</a></h4>
<p>To this end, Flock came at the right time for me this year. Over the past few months, I&rsquo;ve spent a lot of time working across all different areas. My weekdays focused on Fedora and <a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a>, my weekends woke me up at 4:00am for my weekend job at a <a href="http://www.dutchmonkeydoughnuts.com/">local coffee shop</a> in my hometown, and any extra time I could sneak goes into managing my now four-year-old Minecraft server community, <a href="https://crystalcraftmc.com/">CrystalCraftMC</a>. Before that, I finished my first year of my undergraduate degree at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a>, and I&rsquo;m preparing to move back up to Rochester this week.</p>
<p>As much as I may have tried convincing others and myself that I wasn&rsquo;t at least a bit burnt out, it was definitely beginning to wear on me. Anyone who has experienced burnout knows what the feeling is like. It&rsquo;s different in how it affects all of us. But I was reaching that point through this summer. But Flock helped remind me of all the different people who are involved in this incredible project and why we&rsquo;re doing the work we are doing. Anyone who isn&rsquo;t familiar with open source will always question why we spend so much time working on something without being paid for it. But it&rsquo;s more than just that. It&rsquo;s more than a financial thing. The reason anyone volunteers willingly to open source is rarely ever to meet a financial or monetary goal. This is also a difficult thing to describe, and I hate to write something off as &ldquo;you have to experience it to know what I mean&rdquo;, but maybe this applies in this situation.</p>
<p>On that note, Flock served as a vital reminder for me about why I choose to involve myself with the Fedora Project. And it helped show me that the answer I need to take away isn&rsquo;t to contribute more, but it&rsquo;s to contribute enough for me. The several times someone in the community came up to me personally and said, &ldquo;Hey, thanks for all the work you&rsquo;re doing&rdquo; or something along those lines was incredibly powerful and moving to me. And that helped provide value for all the contributions and time I spend in Fedora. I want to make sure that I am at my best where I am able to contribute without burning myself out and away from Fedora. The unique opportunity of being in the same physical place with so many other Fedora contributors added that context for me. And who knows, maybe this realization from Flock saved me from hitting a wall at some point in the future. But now, I am confident and ready to continue with another year, and beyond, of Fedora contributions.</p>

<h4 id="thanks-for-having-me">Thanks for having me&nbsp;<a class="hanchor" href="#thanks-for-having-me" aria-label="Anchor link for: Thanks for having me">🔗</a></h4>
<p>I am incredibly thankful and grateful to be a part of the Fedora community. The opportunity to attend a conference like Flock with sponsorship in a country I&rsquo;ve never been to before was an incredible experience. Without a doubt, it&rsquo;s something that will stay with me for a long time. There are so many people I have to thank for helping open a door or offer pointers and tips for getting involved. There&rsquo;s the <a href="https://fedoramagazine.org/">Fedora Magazine</a> team, the <a href="https://fedoraproject.org/wiki/CommOps">CommOps</a> team and its <a href="https://fedoraproject.org/wiki/User:Decause">original founder</a>, the <a href="https://fedoraproject.org/wiki/Marketing">Marketing</a> team, the <a href="https://fedoraproject.org/wiki/Ambassadors">Ambassadors</a> (both globally and locally), the <a href="https://fedoraproject.org/wiki/Diversity">Diversity Team</a>… to list names would both be incredibly time-consuming and unfair (because I&rsquo;m beyond sure I would forget some name of someone who did have an impact on me getting involved).</p>
<p>I would like to give special thanks and appreciation for the companionship and friendliness of <a href="https://fedoraproject.org/wiki/User:Amsharma">Amita</a>, <a href="https://fedoraproject.org/wiki/User:Bee2502">Bee</a>, <a href="https://fedoraproject.org/wiki/User:Jonatoni">Jona</a>, and <a href="https://fedoraproject.org/wiki/User:Giannisk">Giannis</a> during Flock. We probably spent a large part of our time at the conference together and I have a deep appreciation for the opportunity to get to you know you all personally, not just as fellow contributors but as true friends. I anticipate the next time we can all be together in the same space again!</p>
<p>
<figure>
  <img src="/img/IMG_9225.jpg" alt="To Kraków for Flock with Bee, Amita, Jona, and Giannis" loading="lazy">
  <figcaption>On a bus to the Kraków city center with Bee, Amita, Jona, and Giannis (left to right).</figcaption>
</figure>
</p>

<h2 id="looking-ahead">Looking ahead&nbsp;<a class="hanchor" href="#looking-ahead" aria-label="Anchor link for: Looking ahead">🔗</a></h2>
<p>2016 is past halfway complete and we&rsquo;re on track towards a speedy arrival of 2017. But there is a lot to do before we get there. Flock has helped give the opportunity for the community and all of its teams to find their direction and aim for the next few months and to work towards that. I am refreshed, reinvigorated, and ready for another year of noting all the <code>#info</code>, answering the calls for <code>#help</code>, and taking on <code>#action</code> items to build and grow the Fedora Project forward.</p>
<p>See you in channel, on the mailing lists, or wherever our paths will collide next… as I&rsquo;m sure they will.</p>]]></description></item><item><title>Setting up Vagrant for testing Ansible</title><link>https://jwheel.org/blog/2016/06/setting-vagrant-testing-ansible/</link><pubDate>Fri, 10 Jun 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/06/setting-vagrant-testing-ansible/</guid><description><![CDATA[<p>As part of my <a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a> project proposal for the <a href="https://fedoraproject.org/wiki/Overview">Fedora Project</a>, I&rsquo;ve spent a lot of time learning about the ins and outs of Ansible. <a href="https://www.ansible.com/">Ansible</a> is a handy task and configuration automation utility. In the Fedora Project, Ansible is <a href="https://infrastructure.fedoraproject.org/cgit/ansible.git/">used extensively</a> in Fedora&rsquo;s infrastructure. But if you&rsquo;re first starting to learn Ansible, it might be tricky to test and play with it if you don&rsquo;t have production or development servers you can use. This is where Vagrant comes in.</p>

<h2 id="what-is-vagrant">What is Vagrant?&nbsp;<a class="hanchor" href="#what-is-vagrant" aria-label="Anchor link for: What is Vagrant?">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2016/06/Vagrant.png" alt="Together, Vagrant and Ansible are a powerful combination." loading="lazy">
  <figcaption>Together, Vagrant and Ansible are a powerful combination.</figcaption>
</figure>
</p>
<p>Many people in the tech industry are already familiar with virtual machines (VMs) and using them for testing. If using a virtual machine is useful for testing and experimentation, Vagrant takes that idea and makes it a thousand times for powerful. <a href="https://www.vagrantup.com/">Vagrant</a> creates and configures a single virtual machine or several groups of inter-connected virtual machines. For someone trying to learn configuration management software like Ansible (or Puppet, or Chef, or Salt…), it features tight integration for creating virtual machines from playbooks.</p>
<p>Using Vagrant allows you to make quick, simple, and easy changes in a safe, local environment. Vagrant is also incredibly easy to set up, and in my experiences, it also ran well on a laptop. My trusty Toshiba Satellite with 8GB of RAM and an Intel i3 chip was able to handle three CentOS 7 virtual machines at once, and still manage to do other regular tasks.</p>

<h2 id="installing-vagrant-for-fedora">Installing Vagrant for Fedora&nbsp;<a class="hanchor" href="#installing-vagrant-for-fedora" aria-label="Anchor link for: Installing Vagrant for Fedora">🔗</a></h2>
<p>Since I&rsquo;m working with Fedora on my hardware while working on the Fedora Project over the summer, it would make sense for this guide to cover how to install and set up Vagrant inside of Fedora. However, I imagine it&rsquo;s similar for most other distributions, so try adapting these commands for your own distribution.</p>
<p>The Fedora repositories have a Vagrant package available. To install it, run the following command.</p>
<pre tabindex="0"><code>$ sudo dnf install vagrant
</code></pre><p>This will pull down Vagrant and all the dependencies it needs to run. However, what it won&rsquo;t do is pull down some of the many providers that it might need to use a virtual machine.</p>

<h3 id="vagrant-and-providers">Vagrant and providers&nbsp;<a class="hanchor" href="#vagrant-and-providers" aria-label="Anchor link for: Vagrant and providers">🔗</a></h3>
<p>For my testing, I used a <a href="https://atlas.hashicorp.com/geerlingguy/boxes/centos7">centos7 box image</a> from geerlingguy. This image creates a current, updated CentOS 7 virtual machine. In order to use it, you must have one of the two providers available: VMware or VirtualBox. Seeing as how VirtualBox is easier for me to install and use on my system, I chose to use VirtualBox as the &ldquo;provider&rdquo; for building and simulating the CentOS 7 box within Vagrant.</p>
<p>It took a bit of figuring out at first, but I found a current and well-documented <a href="http://www.if-not-true-then-false.com/2010/install-virtualbox-with-yum-on-fedora-centos-red-hat-rhel/">guide</a> on how to install VirtualBox on to a Fedora 22 or 23 system. For a more detailed explanation of how to do it, you can read the <a href="http://www.if-not-true-then-false.com/2010/install-virtualbox-with-yum-on-fedora-centos-red-hat-rhel/">instructions</a>, but for simplicity, I have the commands here to show how to add it to your Fedora system quickly.</p>
<pre tabindex="0"><code>$ sudo dnf upgrade
$ cd /etc/yum.repos.d/
$ sudo wget http://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo
$ sudo dnf install VirtualBox-5.0 binutils gcc make patch libgomp glibc-headers glibc-devel kernel-headers kernel-devel dkms
$ sudo /usr/lib/virtualbox/vboxdrv.sh setup
$ sudo usermod -a -G vboxusers your_username
</code></pre><p>From here,  VirtualBox  will be available as a provider within Vagrant.</p>

<h2 id="running-a-centos-7-image">Running a CentOS 7 image&nbsp;<a class="hanchor" href="#running-a-centos-7-image" aria-label="Anchor link for: Running a CentOS 7 image">🔗</a></h2>
<p>Now that you have both Vagrant and VirtualBox installed, you can create a Vagrant virtual machine with this image. Navigate to a new directory you want to use for managing your virtual machines. Once there, you can use the following commands to start your CentOS 7 virtual machine.</p>
<pre tabindex="0"><code>$ vagrant box add geerlingguy/centos7
$ vagrant init geerlingguy/centos7
$ vagrant up --provider virtualbox
</code></pre><p>After a lot of downloading and then waiting for the first setup to finish, you should receive a notification that your virtual machine started! Huzzah! You can log in directly to it by typing <code>vagrant ssh</code> in the same directory you ran the above commands.</p>
<p>There&rsquo;s a lot of cool things you can do to set up your virtual machines and configure how they start. For example, you can choose to use the VirtualBox GUI for running your virtual machines if you don&rsquo;t want to SSH into it. You can tweak several different flags to alter the environment for the virtual machine. However, that is out of the scope of this guide, and there is a fair amount of documentation already online.</p>

<h2 id="provisioning-with-ansible">Provisioning with Ansible&nbsp;<a class="hanchor" href="#provisioning-with-ansible" aria-label="Anchor link for: Provisioning with Ansible">🔗</a></h2>
<p>The fun part (and what was really cool for me) was provisioning new virtual machines with Ansible. You can instruct Vagrant to seek an Ansible playbook when creating a new virtual machine. It will use the instructions of the playbook to configure, install, or tweak whatever is in the playbook, as if it&rsquo;s being run for the first time. Or maybe it&rsquo;s the second, the third, the fourth time you&rsquo;ve run it. In either case, the idempotent nature of Ansible should help make sure you avoid repeating anything that doesn&rsquo;t need repeating.</p>
<p>In order to tell Vagrant to search for an Ansible playbook, you will need to edit the <code>Vagrantfile</code> for wherever you initialized Vagrant. Open it up in your favorite text editor and add the following bits at the bottom, but before the final <code>end</code> statement.</p>
<pre tabindex="0"><code>config.vm.provision &#34;ansible&#34; do |ansible|
  ansible.playbook = &#34;playbook.yml&#34;
end
</code></pre><p>These short but sweet instructions tell Vagrant to look for a <code>playbook.yml</code> file when starting this virtual machine. It will then be easy to provision (i.e. configure / modify / change) the machine with your playbook later on.</p>

<h3 id="writing-the-playbook">Writing the playbook&nbsp;<a class="hanchor" href="#writing-the-playbook" aria-label="Anchor link for: Writing the playbook">🔗</a></h3>
<p>For this blog post, I&rsquo;ll offer a simple but clear example of a playbook you can use to start a Vagrant machine. This snippet specifically comes from <em><a href="http://www.ansiblefordevops.com/">Ansible for DevOps</a></em> by <a href="http://jeffgeerling.com/">Jeff Geerling</a>, which I have (and am) using as a guide as I continue to learn more about Ansible (I highly recommend the book, consider getting a copy).</p>
<pre tabindex="0"><code>---
- hosts: all
  sudo: yes
  tasks:
  - name: Ensure NTP (for time synchronization) is installed.
    yum: name=ntp state=present
  - name: Ensure NTP is running.
    service: name=ntpd state=started enabled=yes
</code></pre><p>All this example playbook does installs NTP if it is not present on the system, and then start and enable it, if it is not already. This is a very simple example, but it&rsquo;s good for getting started quickly.</p>

<h3 id="running-the-playbook">Running the playbook&nbsp;<a class="hanchor" href="#running-the-playbook" aria-label="Anchor link for: Running the playbook">🔗</a></h3>
<p>In the same directory as your <code>Vagrantfile</code>, create a <code>playbook.yml</code> with the above content. Once you have the YAML file there, running the following command will run the Ansible playbook and allow you to see how it runs.</p>
<pre tabindex="0"><code>$ vagrant provision
</code></pre><p>Now, Vagrant will take your playbook and instantly run it in your machine. If all goes right, your virtual machine will now have NTP installed and be syncing your clock to the Internet! While a simple task, it was a satisfying feeling for me to see this run, but also to imagine the other possibilities that this could be used for. It would be easy to run a playbook on one, two, ten, a hundred, a thousand servers, and have it do the same thing on all of them.</p>
<p>The automation was fascinating to me and began giving me ideas of how I could automate my infrastructure, as well as to creating one for WordPress (for my GSoC project).</p>
<p>Congratulations! By the end of this short but (hopefully) useful guide, you will have Vagrant virtual machines that are controlled and orchestrated by Ansible.</p>]]></description></item><item><title>The night I became a hacker</title><link>https://jwheel.org/blog/2016/04/night-i-became-hacker/</link><pubDate>Mon, 18 Apr 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/04/night-i-became-hacker/</guid><description><![CDATA[<p>On the night of April 15th, 2016, I officially became a hacker.</p>
<p>
<figure>
  <img src="http://i.giphy.com/bW3QwqNXw07RK.gif" alt="Ever wonder what being a hacker is all about? Wonder no more." loading="lazy">
  <figcaption>Ever wonder what being a hacker is all about? Wonder no more.</figcaption>
</figure>
</p>

<h2 id="how-to-be-hacker">How to be hacker&nbsp;<a class="hanchor" href="#how-to-be-hacker" aria-label="Anchor link for: How to be hacker">🔗</a></h2>
<p>You may ask yourself, how does one become a hacker? How do you become 1337? The answer might be simpler than you think. Old traditions, cheesy &rsquo;90s movies, and the information era.</p>
<p>On April 17th, I joined up with hacker <a href="http://brendan-w.com/">Brendan Whitfield</a> (beWhitty) and wannabe hacker <a href="http://nolski.rocks/">Mike Nolan</a> (nolski) to enjoy in a traditional viewing of 1995&rsquo;s <em><a href="http://www.imdb.com/title/tt0113243/">Hackers</a></em>. The movie is described as the following.</p>
<blockquote>
<p>A young boy is arrested by the U.S. Secret Service for writing a computer virus and is banned from using a computer until his 18th birthday. Years later, he and his new-found friends discover a plot to unleash a dangerous computer virus, but they must use their computer skills to find the evidence while being pursued by the Secret Service and the evil computer genius behind the virus.</p>
</blockquote>
<p>Among the students of the <a href="http://foss.rit.edu/">FOSS@MAGIC</a> program, the movie is like a cult classic. Within my first semester with the group, I became familiar with many notorious quotes and lines from the movie. Other students, now alumni, also encouraged a viewing.</p>
<p>There was no better time than the present.</p>

<h2 id="why-be-hacker">Why be hacker&nbsp;<a class="hanchor" href="#why-be-hacker" aria-label="Anchor link for: Why be hacker">🔗</a></h2>
<p>
<figure>
  <img src="http://i.giphy.com/k8j9FutKtJeRa.gif" alt="We only dreamed of having hacker skills like Crash Override and Acid Burn." loading="lazy">
  <figcaption>We only dreamed of having hacker skills like Crash Override and Acid Burn.</figcaption>
</figure>
</p>
<p>The cultural influence of the &rsquo;90s is clearly present in the movie. When we were viewing it, the movie was clearly written by a <a href="http://www.imdb.com/name/nm0604360/">writer</a> with as much experience with computers as the actors playing the parts. The stereotypes were laid thicker than molasses with the crossing of the &ldquo;high school troublemaker&rdquo; and the &ldquo;tough punk&rdquo; to define the hacker &ldquo;mentality&rdquo; of the characters. The <a href="http://www.imdb.com/name/nm0812200/">director</a> probably used a nephew, niece, or other cousin who &ldquo;sat in front of a computer all day&rdquo; as the inspiration for driving the characters and plot forward. It would be surprising if anyone who had ever used a computer or knew anything more than just using them for text documents and spreadsheets was involved in the creative process.</p>
<p>So, why bother seeing the movie at all? For all of the reasons mentioned above. Anyone in the technology or a digitally-oriented field would cringe at how the movie portrays the hacker mentality. And that&rsquo;s why it&rsquo;s so great. It is hard to imagine a viewing of the movie taken seriously. For our viewing, there were severe outbreaks of laughter and countless moments of cringe-worthy comedic relief, all wrapped up in a good time for a Friday night.</p>

<h2 id="now-we-are-hackers">Now we are hackers&nbsp;<a class="hanchor" href="#now-we-are-hackers" aria-label="Anchor link for: Now we are hackers">🔗</a></h2>
<p>After listening to many references of this movie during the past year and wondering what it meant exactly when &ldquo;the pool is on the roof&rdquo;, I have graduated to the status of full hacker along with fellow FOSSboxer nolski.</p>
<p>To demonstrate our understanding of the movie, we had a brief showing of our own in the <a href="https://webchat.freenode.net/?channels=rit-foss"><code>#rit-foss</code></a> channel on the freenode IRC network.</p>
<pre tabindex="0"><code>[23:00:52] &lt;nolski&gt; jflory7: beWhitty and I have decided that we are dropping out of college and starting a bar themed after the movie hackers
[23:45:26] &lt;nolski&gt; jflory7 and I are now official hackers.
[23:45:39] &lt;nolski&gt; We have experienced the movie Hackers
[23:46:17] &lt;CrashOverride&gt; nolski, beWhitty: Mess with the best
[23:46:20] &lt;CrashOverride&gt; Die like the rest
[23:47:28] &lt;Guest81889&gt; u on my turf CrashOverride?
[23:47:47] &lt;CrashOverride&gt; Guest81889: you are not 1337 enuf
[23:49:56] &lt;Nikon&gt; You&#39;re in the butter zone now, baby.
[23:50:11] &lt;ThePlague&gt; Never fear
[23:50:15] &lt;ThePlague&gt; I is here
[23:51:21] &lt;Acid-Burn&gt; Never send a boy to do a woman&#39;s job.
[23:51:25] &lt;CrashOverride&gt; I don&#39;t play well with others.
[23:52:12] &lt;CrashOverride&gt; Hack the planet! Hack the planet, nolski!
[23:52:23] &lt;nolski&gt; Hack the planet CrashOverride!
[23:52:46] * nolski is finally 1337 enuf
[23:54:50] &lt;nolski&gt; scp god@gibson:/.workspace/.garbage. ~/1337h4x0rsfilez/
[23:54:53] &lt;ThePlague&gt; THEY GOT THE GARBAGE FILE!
[23:55:50] &lt;nolski&gt; beWhitty++
[23:55:56] &lt;nolski&gt; jflory7++
[23:56:02] &lt;nolski&gt; hackers++
[23:56:09] &lt;ThePlague&gt; nolski: Type &#34;cookie&#34;, you idiot.
[23:56:17] &lt;nolski&gt; cookie
[23:57:14] &lt;CrashOverride&gt; HACK THE GIBSON
[23:57:16] &lt;CrashOverride&gt; ThePlague--
[00:02:41] &lt;CrashOverride&gt; My crime is that of curiosity. I am a hacker, and this is my manifesto.
</code></pre><p>I am submitting this blog post as my Meetup #3 for the <a href="https://hfoss-ritjoe.rhcloud.com/">Humanitarian Free and Open Source Software Development</a> course at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a>. I hope to help spread the hacker culture perpetuated by this film by possibly planning a late night screening of <em>Hackers</em> at the <a href="https://2016.spaceappschallenge.org/locations/rochester-ny-usa">NASA Space Apps Challenge 2016</a> at RIT, if possible.</p>
<p>
<figure>
  <img src="http://i.giphy.com/Q2W4hziDOyzu0.gif" alt="&ldquo;Hack the planet! Hack the planet!&rdquo;" loading="lazy">
  <figcaption>\&#34;Hack the planet! Hack the planet!\&#34;</figcaption>
</figure>
</p>]]></description></item><item><title>Why I love WiCHacks</title><link>https://jwheel.org/blog/2016/03/why-i-love-wichacks/</link><pubDate>Mon, 07 Mar 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/03/why-i-love-wichacks/</guid><description><![CDATA[<p>Two weekends ago, from February 27th to the 28th, the <a href="http://wic.rit.edu">Women in Computing</a> program at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a> hosted their third annual <a href="http://wichacks.rit.edu/">WiCHacks</a> hackathon. WiCHacks is a women-only hackathon open to university students and high school juniors and seniors. WiCHacks is a collaborative event bringing women together from across RIT, the country, and even the world (including attendees from Germany). The participants are in a supportive and empowering environment to build something awesome and present it to everyone else in the span of one weekend.</p>
<p>So why am I writing about WiCHacks? I signed up as a volunteer for the event this year. I would help with the setup, running the event, and packing it up. During my experience as a volunteer, I met some other awesome people, saw some really cool projects, and discovered an inviting and inclusive community on campus.</p>

<h2 id="opening-the-doors-for-wichacks">Opening the doors for WiCHacks&nbsp;<a class="hanchor" href="#opening-the-doors-for-wichacks" aria-label="Anchor link for: Opening the doors for WiCHacks">🔗</a></h2>
<p>I was scheduled for the Saturday morning shift (8:00am - 1:30pm) and the Sunday morning shift (11:00am - 5:00pm). When I arrived on Saturday morning, the prep work was just beginning. The WiC team had breakfast pizza for all the volunteers, which was surprisingly delicious!</p>
<p>After grabbing a quick bite to eat, I began helping with setting up sponsor tables, moving equipment and tables around, and other miscellaneous tasks to prepare for the first influx of people, scheduled to arrive around 10:00am. After two hours of setting up, the hackers began streaming into the Golisano building and filling the atrium. As more and more people began to roll in, it was awesome to see how diverse and culturally unique the room was. There were people of all races, from all over the country and even the world, that had come here to join other women hackers in a weekend of creativity and fun. With such a wide palette of culture and ideas, I was anticipating to see some awesome creations in my time volunteering.</p>

<h2 id="wichacks-begins">WiCHacks begins&nbsp;<a class="hanchor" href="#wichacks-begins" aria-label="Anchor link for: WiCHacks begins">🔗</a></h2>
<p>After an opening keynote by the WiCHacks committee leader <a href="https://www.rit.edu/news/story.php?id=54739">Susan Heilman</a> kicking off the hackathon, the hackers were served a quick lunch before jumping into brainstorming and programming.</p>
<p>For those who had never programmed before, there was a special Newbie Track that aimed to help teach some of the basics. It helped give girls who didn&rsquo;t know anything about programming a booster to also create something during the weekend.</p>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">GO HACKERS GO! There are 117 people listed as apart of teams already make sure you register your team <a href="https://twitter.com/hashtag/wichacks?src=hash&amp;ref_src=twsrc%5Etfw">#wichacks</a> <a href="https://twitter.com/hashtag/soundoff?src=hash&amp;ref_src=twsrc%5Etfw">#soundoff</a></p>&mdash; WiCHacks @ RIT (@wichacks) <a href="https://twitter.com/wichacks/status/703695663289278464?ref_src=twsrc%5Etfw">February 27, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>After lunch, the hacking began! Teams could go into a room and have access to whiteboards, plenty of chairs, and outlets to charge devices. If needed, Major League Hacking also had a hardware lab where people could rent out laptops and other accessories during WiCHacks.</p>

<h2 id="accidentally-discovering-something-awesome">Accidentally discovering something awesome&nbsp;<a class="hanchor" href="#accidentally-discovering-something-awesome" aria-label="Anchor link for: Accidentally discovering something awesome">🔗</a></h2>
<p>After my volunteering shift ended, I had a homework assignment for one of my classes due at midnight. I had made plans many months ago after 7:00pm that night, so I had to work on the assignment that day to submit in time. I went up to an empty IST department lab, fired up my laptop, and began working. Suddenly, a team of five girls walked into the lab and began setting up close to the whiteboard near me.</p>
<p>
<figure>
  <img src="/blog/2016/03/OpenCircle-Presentation-1.jpg" alt="WiCHacks 2016: The OpenCircle team presents" loading="lazy">
  <figcaption>The OpenCircle team presents their project to the auditorium.</figcaption>
</figure>
</p>
<p>I was curious after a while to hear what they were working on. I kept hearing the words &ldquo;open source&rdquo; and &ldquo;FOSS&rdquo; dropping, and it pulled my attention in. I learned that their idea was to make a social platform to help make it easier for girls to get involved with open source software. The plan was to collect an inventory of open source projects that need help and connect interested girls with project mentors to guide them in contributing.</p>
<p>There was overlap with some ideas I&rsquo;ve had while working with the <a href="https://jwfblog.wpenginepowered.com/2015/11/fedora-commops-im-working/">Fedora CommOps</a> team towards boosting <a href="https://communityblog.fedoraproject.org/women-in-computing-and-fedora/">#WomenInComputing</a> in Fedora&rsquo;s community. I was anticipating hearing out their idea and seeing what they would come up with!</p>
<p>Their project would be known as <a href="https://github.com/Open-Circle/WicHacks2016Demo">OpenCircle</a>. After 6:45pm rolled around, I started packing up my gear to head out for the evening. The OpenCircle team was busy hacking away on laptops or making slight alterations to the whiteboard mock designs they had drawn. It was clear that the creativity and motivation were running high when I left.</p>
<p>I was envious that I wasn&rsquo;t there for the rest of the evening. Later on that night, Insomnia Cookies delivered to the hackathon. There was also a spontaneous dance party in the atrium of Golisano. Next year, I&rsquo;ll have to make sure I&rsquo;m able to stay for the entire night!</p>
<blockquote class="twitter-tweet" data-dnt="true"><p lang="en" dir="ltr">What&#39;s better than an impromptu dance party at <a href="https://twitter.com/wichacks?ref_src=twsrc%5Etfw">@wichacks</a>? <a href="https://twitter.com/RITWIC?ref_src=twsrc%5Etfw">@RITWIC</a>  <a href="https://twitter.com/hashtag/wichacks16?src=hash&amp;ref_src=twsrc%5Etfw">#wichacks16</a> <a href="https://t.co/NvvTZC4scO">pic.twitter.com/NvvTZC4scO</a></p>&mdash; Major League Hacking (MLH) (@MLHacks) <a href="https://twitter.com/MLHacks/status/703783084957835264?ref_src=twsrc%5Etfw">February 28, 2016</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<p>Closing out WiCHacks 2016</p>
<p>After a final push by hackers throughout the night, hacking ended at 12:00pm the next day. After a lunch break, the hackers returned to the auditorium in time  to present their projects. Before the deadline, all the teams added their projects to the <a href="http://wichacks-2016.devpost.com/">WiCHacks DevPost</a>. You can also find the list of projects submitted over the weekend there.</p>
<p>
<figure>
  <img src="/blog/2016/03/OpenCircle-Presentation-2.jpg" alt="WiCHacks 2016: The OpenCircle team demos the product" loading="lazy">
  <figcaption>The OpenCircle team demos their project for all the participants.</figcaption>
</figure>
</p>
<p>After helping with some other closing work, I wanted to listen to some of the presentations given by the teams. Some people designed some really cool apps, like <a href="http://devpost.com/software/pink-planet">Pink Planet</a>, <a href="http://devpost.com/software/resumatch">Resumatch</a> (a play on Tinder but with resumes), and the ever creative <a href="http://devpost.com/software/loocator">Loocator</a>.</p>
<p>However, the <a href="http://devpost.com/software/open-circle">OpenCircle</a> team was the presentation I was looking forward to the most. While they noted that they hadn&rsquo;t had the time to demo it as completely as they wanted, the idea behind their product was there and it was pretty solid as a prototype.</p>
<p>After the weekend was over, I submitted a <a href="https://github.com/Open-Circle/WicHacks2016Demo/pull/1">simple pull request</a> and filed <a href="https://github.com/Open-Circle/WicHacks2016Demo/issues/2">two</a> <a href="https://github.com/Open-Circle/WicHacks2016Demo/issues/3">issues</a> against the project. I&rsquo;m anticipating any future development the OpenCircle team collaborates on and seeing where their idea goes!</p>

<h2 id="wichacks-2016-in-retrospect">WiCHacks 2016: In retrospect&nbsp;<a class="hanchor" href="#wichacks-2016-in-retrospect" aria-label="Anchor link for: WiCHacks 2016: In retrospect">🔗</a></h2>
<p>I was slightly nervous when registering as a WiCHacks volunteer as I had no idea what to expect or the type of community that it would attract. However, after spending time with the volunteers, hackers, organizers, and mentors, it was clear that the environment was inclusive, welcoming, and receptive to all people.</p>
<p>WiCHacks is a well-organized, powerfully motivating event and something more and more people should look into checking out on the RIT campus each year. WiCHacks empowers women interested in computer science to <em>do something awesome</em> in the presence of people who want to see you succeed. The mentorship and leadership at WiCHacks definitely supports this.</p>
<p>Great job to the WiC team for organizing this, and I look forward to participating as a volunteer again next year!</p>
<p>
<figure>
  <img src="/blog/2016/03/WiCHacks-Volunteers.jpg" alt="WiCHacks 2016 volunteers" loading="lazy">
  <figcaption>The WiCHacks 2016 volunteers!</figcaption>
</figure>
</p>]]></description></item><item><title>HFOSS: Community Architecture (CommArch) Project Proposal</title><link>https://jwheel.org/blog/2016/03/hfoss-commarch-project-proposal/</link><pubDate>Fri, 04 Mar 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/03/hfoss-commarch-project-proposal/</guid><description><![CDATA[<h2 id="what-is-this">What is this?&nbsp;<a class="hanchor" href="#what-is-this" aria-label="Anchor link for: What is this?">🔗</a></h2>
<p>This post serves as the project proposal for me and my team&rsquo;s <a href="https://hfoss-ritjoe.rhcloud.com/">Humanitarian Free and Open Source Software Development</a> &ldquo;<a href="https://hfoss-ritjoe.rhcloud.com/static/hw/commarch.txt">Community Architecture</a>&rdquo; project (shortened to CommArch)!</p>
<p>In this project proposal, we take a preliminary look at the project we&rsquo;re looking at analyzing, <a href="https://github.com/fedora-infra/tahrir">Tahrir</a>, and the different criteria we are assigned to look at.</p>
<p>
<figure>
  <img src="/img/Full-Logo.png" alt="Fedora is a free and open-source Linux distribution." loading="lazy">
  <figcaption>Fedora is a free and open-source Linux distribution.</figcaption>
</figure>
</p>

<h2 id="team-members">Team Members&nbsp;<a class="hanchor" href="#team-members" aria-label="Anchor link for: Team Members">🔗</a></h2>
<table>
  <thead>
      <tr>
          <th><strong>Name</strong></th>
          <th><strong>Email</strong></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://rdp1070.wordpress.com/">Bobby Pruden</a></td>
          <td>*******@rit.edu</td>
      </tr>
      <tr>
          <td><a href="http://blog.wilfriede.me/">Wilfried Hounyo</a></td>
          <td>********.******@gmail.com</td>
      </tr>
      <tr>
          <td><a href="https://spg1502igme582.wordpress.com/">Stephen Garabedian</a></td>
          <td>*******@rit.edu</td>
      </tr>
      <tr>
          <td>Justin Wheeler</td>
          <td>*******@gmail.com</td>
      </tr>
  </tbody>
</table>

<h2 id="project">Project&nbsp;<a class="hanchor" href="#project" aria-label="Anchor link for: Project">🔗</a></h2>
<p><em>Tahrir</em> by the <a href="https://fedoraproject.org/wiki/Overview">Fedora Project</a></p>

<h2 id="description">Description&nbsp;<a class="hanchor" href="#description" aria-label="Anchor link for: Description">🔗</a></h2>
<p>Tahrir is a <a href="http://www.pylonsproject.org/">Pyramid</a> app for distributing your own custom badges (based off of <a href="https://wiki.mozilla.org/Badges">Mozilla Open Badges</a>). The back-end is written in Python with an HTML/CSS and JavaScript front-end and the project is a smaller part of the <a href="https://fedoraproject.org/wiki/Overview">Fedora Project</a>.</p>

<h2 id="team-member-roles">Team Member Roles&nbsp;<a class="hanchor" href="#team-member-roles" aria-label="Anchor link for: Team Member Roles">🔗</a></h2>

<h4 id="justin-and-wilfried">Justin and Wilfried&nbsp;<a class="hanchor" href="#justin-and-wilfried" aria-label="Anchor link for: Justin and Wilfried">🔗</a></h4>
<ol>
<li>Project Report I-R</li>
<li>git_by_a_bus</li>
</ol>

<h4 id="stephen-and-bobby">Stephen and Bobby&nbsp;<a class="hanchor" href="#stephen-and-bobby" aria-label="Anchor link for: Stephen and Bobby">🔗</a></h4>
<ol>
<li>Project Report A-H</li>
<li>Calloway Coefficient of Fail</li>
</ol>

<h2 id="source-code-repository-url">Source Code Repository URL&nbsp;<a class="hanchor" href="#source-code-repository-url" aria-label="Anchor link for: Source Code Repository URL">🔗</a></h2>
<p><a href="https://github.com/fedora-infra/tahrir">fedora-infra/tahrir</a></p>

<h2 id="upstream-mentors">Upstream Mentors&nbsp;<a class="hanchor" href="#upstream-mentors" aria-label="Anchor link for: Upstream Mentors">🔗</a></h2>
<table>
  <thead>
      <tr>
          <th><strong>Name</strong></th>
          <th><strong>Email</strong></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Ralph Bean (threebean)</td>
          <td>*****@redhat.com</td>
      </tr>
      <tr>
          <td>Remy DeCausemaker (decause)</td>
          <td>*******@redhat.com</td>
      </tr>
      <tr>
          <td>Pierre-Yves Chibon (pypingou)</td>
          <td>******@pingoured.fr</td>
      </tr>
  </tbody>
</table>

<h2 id="communication-methods">Communication Methods&nbsp;<a class="hanchor" href="#communication-methods" aria-label="Anchor link for: Communication Methods">🔗</a></h2>
<p>The following methods of communication are ordered in the most preferred way to the least.</p>
<ol>
<li><strong>IRC channel</strong> on freenode (<a href="https://webchat.freenode.net/?channels=fedora-apps">#fedora-apps</a>)</li>
<li><strong>Issue tracker</strong> on <a href="https://github.com/fedora-infra/tahrir/issues">GitHub</a></li>
<li><strong>Mailing list</strong> via <a href="https://lists.fedoraproject.org/archives/list/infrastructure@lists.fedoraproject.org/">infrastructure@lists.fedoraproject.org</a></li>
</ol>

<h2 id="what-are-the-easy-parts">What are the easy parts?&nbsp;<a class="hanchor" href="#what-are-the-easy-parts" aria-label="Anchor link for: What are the easy parts?">🔗</a></h2>
<ul>
<li>Project is fairly small (even though it is part of a larger project)</li>
<li>People to ask for help when needed</li>
<li><a href="https://github.com/tomheon/git_by_a_bus">Git-by-a-bus</a> is going to make analytics of contributors super easy</li>
<li>Distribution of work will allow us to complete the project in a timely manner</li>
</ul>

<h2 id="what-are-the-hard-parts">What are the hard parts?&nbsp;<a class="hanchor" href="#what-are-the-hard-parts" aria-label="Anchor link for: What are the hard parts?">🔗</a></h2>
<ul>
<li>Lack of a frame of reference for some team members who have never worked with open source projects in the past (e.g. we are unable to compare activity or its community to other projects)</li>
<li>Since the project is a smaller project inside of a larger one (Fedora Project), it will be challenging to look at it in a modular sense</li>
<li>Separation of dependencies from project requirements (<a href="http://openbadges.org/">Open Badges</a> requirements and Tahrir requirements)</li>
</ul>

<h2 id="how-will-you-overcome-both">How will you overcome both?&nbsp;<a class="hanchor" href="#how-will-you-overcome-both" aria-label="Anchor link for: How will you overcome both?">🔗</a></h2>

<h4 id="hard-stuff">Hard Stuff&nbsp;<a class="hanchor" href="#hard-stuff" aria-label="Anchor link for: Hard Stuff">🔗</a></h4>
<ul>
<li>We have two people who are more advanced at hacking who can hopefully guide the two who aren&rsquo;t through the project, effectively eliminating the lack of reference point.</li>
<li>Three of our members are not people involved in the Fedora Project, and as such won&rsquo;t be distracted by its involvement with Fedora and will only look at the project itself.</li>
<li>Read up on the existing documentation and test the various endpoints of the project to identify what is needed with Open Badge and what the project is implementing itself.</li>
</ul>]]></description></item><item><title>2015 - My Year in Review</title><link>https://jwheel.org/blog/2016/02/2015-year-review/</link><pubDate>Thu, 25 Feb 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/02/2015-year-review/</guid><description><![CDATA[<p>I originally began drafting this post 900 miles away from my current location. It was an hour until the New Year and I was trying to put together a rough outline of the things that made 2015 such an incredible year for me. However, for reasons I don&rsquo;t really know, I never followed up on finishing this draft. So now, I&rsquo;d like to present my Year in Review post looking at my 2015.</p>

<h2 id="my-year-in-review">My Year in Review&nbsp;<a class="hanchor" href="#my-year-in-review" aria-label="Anchor link for: My Year in Review">🔗</a></h2>
<p>With an hour left until the New Year, there never seemed a better time to begin writing my Year in Review article. While it is a stereotypical kind of thing to do, I also think it&rsquo;s a great opportunity to reflect on the gifts, changes, and special occasions that this past year has presented to me. 2015 is special to me in many ways because it marks a significant milestone in my life of moving away from home and beginning my journey into full adulthood.</p>
<p>There are many important and special people in my life that have made this year incredible, and I want to reflect and make note of this.</p>

<h2 id="high-school-college"><code>&lt;/high school&gt;</code> <code>&lt;college&gt;</code>&nbsp;<a class="hanchor" href="#high-school-college" aria-label="Anchor link for: &lt;/high school&gt; &lt;college&gt;">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2016/02/Optimized-Graduation.jpg" alt="Graduation with my family" loading="lazy">
  <figcaption>My high school graduation day.</figcaption>
</figure>
</p>
<p>This past May, I graduated from high school. Looking back, it&rsquo;s interesting to see how much has changed in my personal life and even in my own interests. Some friends have come and gone, but there are an important core of people who have always been present in my life, and I am privileged to have been one to know them deeply over the past four years.</p>
<p>Interestingly enough, it wasn&rsquo;t until my junior year when I realized that I wanted to spend my life working in computer science. I remember when I walked into the classroom of my AP Computer Science teacher asking how I could get going with only one year left. Now, here I am immersing myself in digital technology in countless different ways. I feel like I am where I am meant to be.</p>
<p>
<figure>
  <img src="/blog/2016/02/Software-Freedom-Day-at-RIT-Fedora.jpg" alt="Software Freedom Day at the Rochester Institute of Technology" loading="lazy">
  <figcaption>Software Freedom Day (<a href="https://fedoramagazine.org/celebrating-software-freedom-day-2015/" class="bare">https://fedoramagazine.org/celebrating-software-freedom-day-2015/</a>) at the Rochester Institute of Technology. I’m in the middle!</figcaption>
</figure>
</p>
<p>These four years haven&rsquo;t been easy either. I worked hard to get to the place I wanted to go. Despite quite a few personal challenges, I was fortunate enough to afford an education here at the <a href="https://www.rit.edu/">Rochester Institute of Technology</a>. Just in the semester and a half that I have been enrolled here, I&rsquo;ve met countless people who have affected my life and helped shape the direction of where I&rsquo;m going in the world. Special shout-out to the <a href="https://fossrit.github.io/">FOSSbox</a> and <a href="https://ritlug.com/">RITlug</a>, and everyone involved with both.</p>

<h2 id="coffee-and-doughnuts">Coffee and Doughnuts&nbsp;<a class="hanchor" href="#coffee-and-doughnuts" aria-label="Anchor link for: Coffee and Doughnuts">🔗</a></h2>
<p>
<figure>
  <img src="/blog/2016/02/Cinnamon-Roll-Queen.jpg" alt="Cinnamon Roll Queen" loading="lazy">
  <figcaption>On occasion, I might model for the Dutch Monkey Instagram (<a href="https://www.instagram.com/dutchmonkeydoughnuts/" class="bare">https://www.instagram.com/dutchmonkeydoughnuts/</a>) as the Cinnamon Roll Queen.</figcaption>
</figure>
</p>
<p>For most of 2015, I worked a not-so-typical job at <a href="http://www.dutchmonkeydoughnuts.com/">Dutch Monkey Doughnuts</a> in my hometown. Dutch Monkey is an important part of my town and they have helped create a name for people visiting the region. They&rsquo;re well-known for their homemade doughnuts and <a href="https://counterculturecoffee.com/">Counter Culture Coffee</a>, both of which are legendary within their own right.</p>
<p>During my time at Dutch Monkey, I was able to attend workshops and classes at the Counter Culture Coffee Training Center in Atlanta. Throughout the eight or nine classes I took, I was able to further my understanding and appreciation for an extremely complex and fascinating beverage. My appreciation and love for coffee has become a part of my being. The coffee industry is a wild and exciting place, and it is very much an ethical hotbed of all kinds of issues. I joke to myself that if sysadmin doesn&rsquo;t work out, the coffee industry could always make a good fallback…</p>
<p>I was also fortunate to have some awesome co-workers who helped make the 4am shifts a little more enjoyable. Special shout-out to Jordan Hughes for the long talks about music, the music industry, and so many other things. I learned a lot from you and you&rsquo;ve had a big impact on my own music tastes.</p>

<h2 id="minecon-and-spigotmc">MINECON and SpigotMC&nbsp;<a class="hanchor" href="#minecon-and-spigotmc" aria-label="Anchor link for: MINECON and SpigotMC">🔗</a></h2>
<p>This was single-handedly one of the most profound events of the year for me. If you weren&rsquo;t aware, I am a community moderator for the <a href="https://www.spigotmc.org/">SpigotMC</a> project. I have been a moderator since April 2014. Spigot is my true first open-source project, even though I wasn&rsquo;t a contributor of code, but a community builder (or so I like to think).</p>

<h4 id="minecon-announced">MINECON announced&nbsp;<a class="hanchor" href="#minecon-announced" aria-label="Anchor link for: MINECON announced">🔗</a></h4>
<p>In February of 2015, Mojang announced that <a href="http://mojang.com/2015/02/minecon-2015-announced/">MINECON 2015</a> would be happening in London, England. Instantly, I thought there would be no way I would ever be able to afford a trip overseas for a two-day convention. However, I found the <a href="http://mojang.com/2015/03/minecon-2015-tickets-announcement/">application</a> for a MINECON Agent, which is the small group of &ldquo;interns&rdquo; that volunteer to help set up and prepare MINECON for over 10,000 people with the Mojang team. The only benefit to being an Agent was a waived ticket cost (around $120 last year). I applied for the program, unsure of what would come of it, doubtful I would be able to go even if I were accepted.</p>
<p>April rolls around, and I finally hear back from Mojang! &ldquo;Congratulations, you are now a MINECON Agent!&rdquo; It was difficult to believe at first, but I wasn&rsquo;t sure I would be able to go regardless.</p>

<h4 id="getting-in-gear-for-minecon">Getting in gear for MINECON&nbsp;<a class="hanchor" href="#getting-in-gear-for-minecon" aria-label="Anchor link for: Getting in gear for MINECON">🔗</a></h4>
<p>
<figure>
  <img src="/blog/2016/02/Booth-Shot.jpg" alt="SpigotMC Booth Shot at MINECON 2015" loading="lazy">
  <figcaption>A photo of the SpigotMC booth at MINECON 2015.</figcaption>
</figure>
</p>
<p>I began talking with the rest of the team at SpigotMC. We were also <a href="https://www.spigotmc.org/forums/minecon-2015.77/">getting in gear</a> for MINECON 2015 and were planning to attend as an organization with our own booth. We had arranged to have a booth and most of the team knew who was going to be there. <a href="https://twitter.com/md__5/">Michael</a>, our project lead, would be in attendance, along with <a href="https://twitter.com/thinkofdeath">Matthew</a>, the other lead developer; <a href="https://twitter.com/jtaylor69">Jordan</a>, another community moderator like myself; <a href="https://twitter.com/cindykerns">Cindy</a>, our local wiki staff, IRC staff, and contributing developer, or also the official &ldquo;Spigot Mom&rdquo;; and Miguel, our witty Spigot volunteer who has an ambiguous position with Spigot. Cindy&rsquo;s son Alex was also going to be in attendance.</p>
<p>I didn&rsquo;t think I would be able to attend. However, a very unique set of events happened one after another, and suddenly, the possibility of me attending MINECON this year began to materialize. Thanks to awesome people behind Spigot, I was fortunate enough to make it out to this year&rsquo;s convention. When I figured out that I would be going to London, I was beyond stoked.</p>

<h4 id="going-to-london-and-minecon">Going to London and MINECON&nbsp;<a class="hanchor" href="#going-to-london-and-minecon" aria-label="Anchor link for: Going to London and MINECON">🔗</a></h4>
<p>I would be there from Saturday, July 4 to Wednesday, July 8, 2016. Saturday and Sunday were the days of MINECON. Together with the team, we helped represent the SpigotMC project among thousands of convention-goers. We had brochures, bracelets, and a <a href="https://www.youtube.com/watch?v=qiNScdSAQ8k">video</a> running in the booth for visitors to take and see. I met some incredible people from our community, and I am privileged and honored to have met some incredible people there.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/qiNScdSAQ8k?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>Thanks to Michael being the incredible individual he is, we went to a few dinners and meet-ups with others in the Minecraft community. I met two of the major Minecraft developers, Nathan (<a href="https://twitter.com/Dinnerbone">Dinnerbone</a>) and Erik (<a href="https://twitter.com/_grum">Grum</a>) and countless others in the YouTube and development community. It was almost unbelievable. The entire time I was in London, the experience felt surreal. Six months before this, I would never have believed any of this would ever have happened.</p>
<p>
<figure>
  <img src="/blog/2016/02/Table-with-Justin.jpg" alt="SpigotMC Lunch in London" loading="lazy">
  <figcaption>At the SpigotMC lunch on the Saturday of MINECON.</figcaption>
</figure>
</p>
<p>The Monday and Tuesday we were there, Cindy, Jordan, Alex, and I went around London doing our proper duty as tourists. We went to see Big Ben, Westminster Abbey, rode a double-decker bus, went to the Queen&rsquo;s castle, and indulged in what Jordan called a &ldquo;proper British meal&rdquo;. On Monday night, Jordan treated me to a short trip around London hopping between bars (although everything closed so early)! We ended up crashing in some late-night diner, had a meal, and headed back for the next round of sightseeing on Tuesday.</p>

<h4 id="thanks-to-the-team">Thanks to the team&nbsp;<a class="hanchor" href="#thanks-to-the-team" aria-label="Anchor link for: Thanks to the team">🔗</a></h4>
<p>This was truly a life-changing experience that was bestowed upon me. I was honored and privileged to have met the other members of the Spigot team that I&rsquo;ve been working with for the past two years. I wouldn&rsquo;t trade my time in London for anything else, and I&rsquo;m hoping that I&rsquo;ll be able to help host the crew this upcoming MINECON if it ends up in the northeast US.</p>
<p>
<figure>
  <img src="/img/Spigot-Team.jpg" alt="SpigotMC Team" loading="lazy">
  <figcaption>You guys all rock.</figcaption>
</figure>
</p>

<h2 id="open-source-and-fedora">Open Source and Fedora&nbsp;<a class="hanchor" href="#open-source-and-fedora" aria-label="Anchor link for: Open Source and Fedora">🔗</a></h2>
<p>I have used the <a href="https://getfedora.org/">Fedora</a> operating system on my laptop since December 2013. I began using it on my desktop I built in November 2014. I have used this operating system for almost two years and I never had thought too much about the community behind the <a href="https://fedoraproject.org/wiki/Overview">Fedora Project</a>. I knew that it was a large and complex community, but I was never sure where to take the first step. I had always wanted to be an <a href="https://fedoraproject.org/wiki/Ambassadors">Ambassador</a>, but questioned my usefulness or whether I was a right fit for the program.</p>

<h4 id="flock-to-fedora">Flock to Fedora!&nbsp;<a class="hanchor" href="#flock-to-fedora" aria-label="Anchor link for: Flock to Fedora!">🔗</a></h4>
<p>I learned that <a href="https://flocktofedora.org/">Flock</a>, Fedora&rsquo;s annual contributor&rsquo;s conference, was to be hosted in Rochester, NY in 2015 from August 5th to the 9th. I would be moving right next door to Flock just a week after the conference! After contacting a pair of people who seemed knowledgeable about the details back in February 2015, little did I know I was setting in motion an entirely new track of events in my life. The two gents I emailed, <a href="https://fedoraproject.org/wiki/User:Decause">Remy DeCausemaker</a> and Prof. <a href="https://www.rit.edu/gccis/stephen-jacobs">Stephen Jacobs</a> (SJ), helped give me advice on travel details and how I would get myself into Rochester in time for Flock.</p>
<p>Come August, I am back from MINECON, packing my bags for Rochester, and ending my last few days at Dutch Monkey. When I arrived in Rochester with my mother, it was an exciting and new experience, something I had looked forward to for a long time. Once Flock rolled around, I was almost instantaneously immersed in the Fedora community, and over the course of the week, I would begin to feel a part of a Project that I had questioned how to enter for almost a year.</p>
<p>
<figure>
  <img src="/blog/2016/02/Matt-and-Remy.jpg" alt="Remy DeCausemaker (decause) and Matthew Miller (mattdm), Fedora partners in crime" loading="lazy">
  <figcaption>Remy DeCausemaker (decause) and Matthew Miller (mattdm), Fedora partners in crime.</figcaption>
</figure>
</p>
<p>The talks were fantastic, the speakers were passionate, and the community was welcoming. I was jump started into Fedora at Flock 2015, despite walking in a stranger. At first, I questioned whether coming was such a grand idea. It was obvious everyone knew someone already and I was only an excited Fedora user and fan. These were the people who did all the heavy-lifting to make this operating system and its community run. What was I doing here?</p>
<p>I distinctly remember <a href="https://fedoraproject.org/wiki/User:Immanetize">Pete Travis</a> (randomuser in IRC) coming up to me, introducing himself and asking me a few questions. In retrospect, I probably looked like I was feeling a bit out-of-place. He and I began talking a bit about his role in Fedora and some of my little experience in open source. After he spoke to me, I began to feel a little more attached to the conference. After a while, I began speaking up at some of the talks I attended, or trying to share some of my perspective or thoughts as an outsider. These were the stepping-stones that got me involved with the project.</p>
<p>One thing about all else stands out to me about the conference. I remember Remy saying to me towards the end (with minor paraphrasing), &ldquo;You should check out this Community Operations thing that&rsquo;s coming up soon. It&rsquo;s going to be awesome.&rdquo;</p>

<h4 id="fedora-magazine">Fedora Magazine&nbsp;<a class="hanchor" href="#fedora-magazine" aria-label="Anchor link for: Fedora Magazine">🔗</a></h4>
<p>Over the course of the next few months at RIT, I started working with <a href="https://fedoraproject.org/wiki/User:Pfrields">Paul Frields</a>, <a href="https://fedoraproject.org/wiki/User:Ryanlerch">Ryan Lerch</a>, and a few others on the Fedora Magazine. I began contributing as a writer, with my first article about using <a href="https://fedoramagazine.org/run-a-minecraft-server-using-spigot/">Spigot on Fedora</a>. As time went on, I began helping as an editor, revising and reviewing other people&rsquo;s articles to help get them published for the Magazine. By the end of 2015, I believe I would come to establish myself as a <a href="https://fedoramagazine.org/author/jflory7/">permanent member</a> of the editorial team behind the Magazine.</p>

<h4 id="commops">CommOps&nbsp;<a class="hanchor" href="#commops" aria-label="Anchor link for: CommOps">🔗</a></h4>
<p>Additionally, during the months after Flock, I would follow up on what Remy told me, and I checked out this whole <a href="https://fedoraproject.org/wiki/CommOps">Community Operations</a> (shortened to <em>CommOps</em>) thing. It was in the early formation stages, but the core idea behind CommOps was that they were the supporting team to offer support to all the other sub-projects in Fedora. Or in my eyes, a team focused on building and supporting the community with resources and assistance. This was something I thought I could contribute to. My programming skills were not at a level where I&rsquo;d feel comfortable hacking on to Fedora either on the <a href="https://fedoraproject.org/wiki/Infrastructure">Infrastructure</a> or as a <a href="https://fedoraproject.org/wiki/Category:Package_Maintainers">Packager</a>. But CommOps was that kind of thing that hooked me from the start. I wanted to help build Fedora up, and I could see what exactly CommOps was trying to target and how it was wanting to fix the long-term issues.</p>
<p>
<figure>
  <img src="/blog/2016/02/CommOps-Trac-banner.png" alt="Fedora Community Operations (CommOps) logo" loading="lazy">
  <figcaption>The Community Operations (CommOps) logo.</figcaption>
</figure>
</p>
<p>Now, months later, my involvement with CommOps has resulted with <a href="https://fedorahosted.org/fedora-commops/">many tickets filed and many tickets closed</a>. It has been a productive time while I have been with CommOps, and I never feel like there is too little to do. Our horizon is vast and there is much work to be done… 2016 offers great promise to the success of our sub-project, which in turn offers great promise to the Fedora Project. I am looking forward to seeing where this year takes us. I am also happy to work with such an awesome and dedicated group of people as those behind the CommOps team. There are too many to name, but I&rsquo;m thankful for the leadership of Remy to keep us all together, focused, and driven.</p>

<h2 id="2016">2016&nbsp;<a class="hanchor" href="#2016" aria-label="Anchor link for: 2016">🔗</a></h2>
<p>2016 will have a lot of ground to cover over 2015, but there is a large potential for this to be done. My own personal story with open source continues to grow, and I am beyond excited for what the future may bring. I am exposed to a unique group of people and minds here at RIT, and I am actively pursuing the <a href="http://magic.rit.edu/foss/minor.html">Free and Open Source Software (FOSS) minor</a>.</p>
<p>This self-reflection has turned into a much longer post than I anticipated, but I think this reflection is necessary and useful for my own purposes. Taking a moment to reflect on the events of the past year helps remind me what it&rsquo;s all about and why I&rsquo;m doing what I&rsquo;m doing, especially at the times where everything seems confusing and I begin to question what I&rsquo;m doing. But the path is illuminated and I am driven to succeed. There are a lot of things at stake for me and my family, and I hope to be able to meet many personal goals and better support the people closest to me in my life.</p>
<p>I would also like to give a special thanks to all the people who have made this year so incredible for me, and for those who have ridden the ride with me. There are so many names to list, and it&rsquo;s hard to come up with this list in the dark hours of the morning when I know I should be sleeping. But to all of those who play a special and important role in my life, I want you all to know that none of what has happened to me would be possible without your support. Your continued guidance, counsel, and companionship teaches me much and inspires me greatly. My only wish is that I will someday be able to repay all the good deeds that others have bestowed upon me. If not to the original giver, I hope to someday inspire others and help others in the same way you all have shown and taught me. Maybe this is less of a 2016 thing and more of a &ldquo;crystal ball into the future&rdquo; moment… but I think it&rsquo;s worth mentioning regardless.</p>
<p>Thanks for a fantastic 2015. I&rsquo;m looking forward to seeing where 2016 takes us next.</p>
<p>
<figure>
  <img src="/blog/2016/02/January-Photo-Shoot.jpg" alt="Year in Review - Justin Wheeler" loading="lazy">
  <figcaption>Looking forward to 2016 and all that it brings.</figcaption>
</figure>
</p>
]]></description></item><item><title>The most important part of your project might not even be a line of code</title><link>https://jwheel.org/blog/2016/02/licensing-most-important-part-of-project-not-code/</link><pubDate>Wed, 10 Feb 2016 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2016/02/licensing-most-important-part-of-project-not-code/</guid><description><![CDATA[<p>
<figure>
  <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Puzzly_sharing_%28from_licensing_tutorial%29.svg/327px-Puzzly_sharing_%28from_licensing_tutorial%29.svg.png" alt="Open-source licensing: how does it affect your work?" loading="lazy">
  <figcaption>Open-source licensing: how does it affect your work?</figcaption>
</figure>
</p>
<p>Today&rsquo;s entry to the blog is sourced from a thread that I posted on the <a href="https://www.spigotmc.org/threads/the-most-important-part-of-your-project-might-not-even-be-a-line-of-code.121682/">SpigotMC Forums</a>. If you wish to join in the discussion about this, feel free to chime in on the thread or leave a comment on my blog. In this post, I covered licensing, licenses, and why your open-source software project should have a license. You can read my original post in this blog entry.</p>
<hr>
<p>I&rsquo;d like to share some personal and real-word advice to many of you contributing open-source resources to Spigot, but also to other open-source software projects you may work on even outside of just Minecraft or Spigot.</p>

<h2 id="licensing">Licensing&nbsp;<a class="hanchor" href="#licensing" aria-label="Anchor link for: Licensing">🔗</a></h2>
<p>What is licensing? Why does it matter? Why should you care? There are many reasons that licensing is an important part of a project you are working on. You are taking the time to write code and share it with the world in an open way, such as publishing it on GitHub, Bitbucket, or any number of other code-hosting services. Anyone might stumble across your code and find it useful.</p>
<p>Licensing is the way that you can control exactly how someone who finds your code can use it and in what ways.</p>

<h2 id="okay-why-does-it-really-matter">Okay, why does it <em>really</em> matter?&nbsp;<a class="hanchor" href="#okay-why-does-it-really-matter" aria-label="Anchor link for: Okay, why does it really matter?">🔗</a></h2>
<p>Maybe you&rsquo;ve been writing code for a really long time and you&rsquo;ve never bothered with licenses and don&rsquo;t feel the need to. I&rsquo;d like to present two hypothetical situations that I see pop up all the time, one in Spigot and one in the greater open-source community.</p>

<h4 id="your-plugin">Your Plugin&nbsp;<a class="hanchor" href="#your-plugin" aria-label="Anchor link for: Your Plugin">🔗</a></h4>
<p>You have spent a lot of time writing an awesome resource and you pushed all of your code on GitHub! Woohoo, project complete! You package it up as a JAR and submit out to the open. Skip ahead a few months, and maybe you no longer have the time to contribute to your project. Or maybe someone has an awesome idea for a totally different plugin that uses similar functionality to what you have written.</p>
<p>A new person finds your code on GitHub and discovers that it has the perfect method or algorithm for his own project. Or maybe they want to continue your project with new, fresh energy! But you have no license for your code. By default, this means <a href="http://choosealicense.com/no-license/">default copyright laws</a> will apply to your code. <strong>This is an extremely limiting type of copyright enforcement and almost defeats the entire purpose of even open-sourcing your code.</strong> A law-abiding programmer might just give up on the project and look elsewhere, or maybe a not-so-law-abiding programmer will secretly copy and paste your code without attributing your work back to you. This helps neither you or the friendly programmer looking at continuing or forking your work.</p>
<p>In many cases, the SpigotMC Staff receive reports about people &ldquo;copying&rdquo; other peoples&rsquo; code. <strong>Having a licensed project makes reviewing these reports 10x easier</strong>. People without licenses or with ambiguous sources makes it extremely difficult to review and make decisions about whether projects are copies.</p>
<p>By licensing your code, you are protecting your own work and writing the rules to how people can use your code. If you are open-sourcing your code, usually the point is to have collaboration with others and give back to the community by allowing others to tinker, modify, or play with what you have created. Make it easier for others to contribute, help, or build new awesome things by choosing a license!</p>

<h4 id="your-project">Your Project&nbsp;<a class="hanchor" href="#your-project" aria-label="Anchor link for: Your Project">🔗</a></h4>
<p>For any open-source software project on the Internet, having a license is very, very important. For example, let&rsquo;s say you write an important library or utility that can be used to make a developer&rsquo;s life easier for making a user interface more friendly. Your program is well-designed and has usefulness outside of what even you intended to write it for.</p>
<p>Perhaps a large company stumbles across your code and also thinks it&rsquo;s very useful for their own project. Maybe their project is proprietary or closed-source. Having a license in a situation like this suddenly becomes very important. Some licenses would permit this company to take the plugin or library, modify it to their own needs, and include it in their own product, while only leaving a small mention to you in the &ldquo;Legal&rdquo; section of their app. Maybe you&rsquo;re okay with that! Maybe you&rsquo;re not.</p>
<p>If you&rsquo;re not, there are licenses that let you define how the code is used in a case like this. With some licenses, if the company decides to modify and use your code, they will have to open-source their changes that made as well. If they don&rsquo;t modify anything, they just have to link back to your original source code. In some more extreme licenses, anything that touches your code also by extension has to be open source.</p>
<p>For a Minecraft example of this, let&rsquo;s say you have a &ldquo;Super Craft Bros.&rdquo; plugin open-sourced on your GitHub. Hypixel stumbles across your code and decides they want to use it for their own servers. Let&rsquo;s say your code is licensed under the <a href="https://www.mozilla.org/en-US/MPL/2.0/">Mozilla Public License 2.0</a>. For this license, if they take your code and make no changes, they only have to give credit back to you. If they take your code and change it, they also have to open-source all of the changes they make to your code.</p>
<p>Now, the changes made by the bigger company can benefit many others instead of just the one company!</p>

<h2 id="what-licenses-are-there">What licenses are there?&nbsp;<a class="hanchor" href="#what-licenses-are-there" aria-label="Anchor link for: What licenses are there?">🔗</a></h2>
<p>If you Google &ldquo;open source licenses&rdquo;, you may be overwhelmed. There are maybe close to the hundreds of different licenses for you to choose from. How can you pick one to settle on?! Fortunately, there are websites that do a great job of summarizing licenses to exactly what others can or cannot do with your code. A very popular site is <a href="https://tldrlegal.com/">tldrlegal.com</a>, which provides bullet-point summaries of different licenses.</p>

<h6 id="tldrlegalcom"><a href="https://tldrlegal.com/">tldrlegal.com</a>&nbsp;<a class="hanchor" href="#tldrlegalcom" aria-label="Anchor link for: tldrlegal.com">🔗</a></h6>
<p>Exploring that site is a great reference for picking a license. However, in this thread, I&rsquo;m going to do a very quick summary of four of the most popular open-source licenses that exist. However, it is important to preface this with a statement: I am not a lawyer and this does not constitute legal advice. It is important for you to look more into a license that feels right for how you want to share your code and determine what others can do with it.</p>

<h4 id="mit-license">MIT License&nbsp;<a class="hanchor" href="#mit-license" aria-label="Anchor link for: MIT License">🔗</a></h4>
<p>
<figure>
  <img src="https://upload.wikimedia.org/wikipedia/commons/c/c3/License_icon-mit.svg" alt="Open-sourcing licensing: the MIT License is the most relaxed" loading="lazy">
  <figcaption>The MIT License may be the most relaxed open-source license available today</figcaption>
</figure>
</p>
<p>The MIT License is almost universally regarded as one of the least strict licenses in open source. You can read more about it <a href="https://tldrlegal.com/license/mit-license">here</a>.</p>
<p>You can:</p>
<ul>
<li>Use the work commercially (think of the big company example said earlier)</li>
<li>Modify the original code</li>
<li>Distribute the original code or distribute your modifications</li>
<li>Sublicense the code (in other words, use it with code that has a different license)</li>
<li>Use the code for private use</li>
</ul>
<p>You cannot:</p>
<ul>
<li>Hold the original author liable for damages
<ul>
<li>So this can&rsquo;t happen: &ldquo;Oh noes! I accidentally exploded my entire server with your code! You must pay me monies to fix this nao!!!&rdquo;</li>
</ul>
</li>
</ul>
<p>You must:</p>
<ul>
<li>Include a copyright notice in all copies or other uses of the work</li>
<li>Include an original copy of the license with the original or modified code
<ul>
<li>You will always be credited for your work!</li>
</ul>
</li>
</ul>

<h4 id="apache-license-20">Apache License 2.0&nbsp;<a class="hanchor" href="#apache-license-20" aria-label="Anchor link for: Apache License 2.0">🔗</a></h4>
<p>
<figure>
  <img src="http://www.apache.org/img/asf_logo.png" alt="Open-source licensing: the Apache License 2.0 offers more than MIT License" loading="lazy">
  <figcaption>Slightly stricter than the MIT License, the Apache License 2.0 offers more protection to the author</figcaption>
</figure>
</p>
<p>The Apache License 2.0 is only slightly more restrictive than the MIT License, but it defines a few more rules than the MIT License. This can be useful if you want to make sure your work is given proper credit back to you and you care a little more about how it&rsquo;s used. You can read more <a href="https://tldrlegal.com/license/apache-license-2.0-%28apache-2.0%29">here</a>.</p>
<p>You can and cannot do the same things mentioned above for the MIT License. So we will just highlight the changes!</p>
<p>You can:</p>
<ul>
<li>Same as MIT License</li>
<li><strong>Use patent claims</strong> (might be advanced for most of you, but can be useful for bigger projects)</li>
<li><strong>Place a warranty</strong> (lets you have a warranty on your code, if desired)</li>
</ul>
<p>You cannot:</p>
<ul>
<li>Same as MIT License</li>
</ul>
<p>You must:</p>
<ul>
<li>Same as MIT License</li>
<li><strong>Openly state changes you make from the original project</strong></li>
<li><strong>Include the NOTICE</strong> (if the project has a NOTICE file, you have to keep it in copies / modified works)</li>
</ul>

<h4 id="mozilla-public-license-20">Mozilla Public License 2.0&nbsp;<a class="hanchor" href="#mozilla-public-license-20" aria-label="Anchor link for: Mozilla Public License 2.0">🔗</a></h4>
<p>
<figure>
  <img src="https://opensource.com/sites/default/files/styles/image-full-size/public/images/law/OSCD_MPL_520x292_FINAL.png?itok=ELAkrGpF" alt="Open-source licensing: Introducing the Mozilla Public License 2.0" loading="lazy">
  <figcaption>Introducing the Mozilla Public License 2.0</figcaption>
</figure>
</p>
<p>The next step up from the Apache License 2.0 is the Mozilla Public License 2.0. This license has the same basic rights as the Apache License 2.0, but it goes a little more in-depth about how the code can be re-used. This is my personal favorite license! You can read more <a href="https://tldrlegal.com/license/mozilla-public-license-2.0-%28mpl-2%29">here</a>.</p>
<p>Most of the things for what you can and cannot do are the same as the Apache License (and thereby, the MIT License). So again, we&rsquo;ll just highlight the changes.</p>
<p>You can:</p>
<ul>
<li>Same as Apache License 2.0</li>
</ul>
<p>You cannot:</p>
<ul>
<li>Same as Apache License 2.0</li>
</ul>
<p>You must:</p>
<ul>
<li>Same as Apache License 2.0</li>
<li><strong>Disclose the source</strong> (any changes made using MPL&rsquo;d code must also be made open under the MPL!)</li>
<li><strong>Include the original</strong> (either the source code or instructions to get the original code must be provided)</li>
</ul>

<h4 id="gnu-public-license-v3">GNU Public License v3&nbsp;<a class="hanchor" href="#gnu-public-license-v3" aria-label="Anchor link for: GNU Public License v3">🔗</a></h4>
<p>
<figure>
  <img src="https://upload.wikimedia.org/wikipedia/commons/9/93/GPLv3_Logo.svg" alt="Open-source licensing: the GNU Public License v3" loading="lazy">
  <figcaption>Open-source licensing: the GNU Public License v3</figcaption>
</figure>
</p>
<p>The GNU Public License v3, also known as the GPLv3, is one of the most well-known and strict licenses in open-source. It has very specific rules for how the code can be used and shared, and leaves a lot of control over to the author. In a sense, it&rsquo;s &ldquo;after&rdquo; the MPL 2.0, but it also has some key differences. You can read more about it <a href="https://tldrlegal.com/license/gnu-general-public-license-v3-%28gpl-3%29">here</a>.</p>
<p>Again, we will highlight the changes from the Mozilla Public License 2.0.</p>
<p>You can:</p>
<ul>
<li>Same as Mozilla Public License 2.0 (<strong>except sublicensing</strong>)</li>
</ul>
<p>You cannot:</p>
<ul>
<li>Same as Mozilla Public License 2.0</li>
<li><strong>Sublicense the code</strong> (this is a big concept worth understanding if you use the GPLv3)</li>
</ul>
<p>You must:</p>
<ul>
<li>Same as Mozilla Public License 2.0</li>
<li><strong>Include original copyright</strong> (must be retained in all copies or modified works)</li>
<li><strong>Include install instructions</strong> (you must document how to install the software)</li>
</ul>

<h2 id="go-forth-and-conquer">Go forth and conquer!&nbsp;<a class="hanchor" href="#go-forth-and-conquer" aria-label="Anchor link for: Go forth and conquer!">🔗</a></h2>
<p>Congratulations! You now know a little bit more about licensing, open-source licenses, and how to use them. Hopefully this will help emphasize why and how licenses are important in open-source software. In many ways, the license you choose to use can even be more important than any lines of code you write. That might sound absurd, but when it comes to deciding how your code can be reused, modified, or distributed, it&rsquo;s something that can be vitally important to your project.</p>
<p>Those of you without a license, please consider choosing one, or talk to other teammates of your projects about what license you all want to use. If you code in the open, make sure you are protecting yourself and paying attention to how you want other people to use your code.</p>]]></description></item><item><title>WordPress Cron, CloudFlare, and SSL</title><link>https://jwheel.org/blog/2015/12/wordpress-cron-cloudflare-ssl/</link><pubDate>Wed, 16 Dec 2015 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2015/12/wordpress-cron-cloudflare-ssl/</guid><description><![CDATA[<p><em>Edit</em>: I haven&rsquo;t tried this in a while, but this is one of my most popular blog posts. If you try this and it works, please consider leaving a comment and let me know if anything can be improved. Thanks!</p>
<hr>
<p>Thanks to the power of <a href="https://letsencrypt.org/">LetsEncrypt</a>, I recently moved most of my sites over to using HTTPS, or in other words, SSL. I also use <a href="https://www.cloudflare.com/">CloudFlare</a> for managing most of my sites as well. What I wasn&rsquo;t fully aware of was that CloudFlare also limits scripts to increase performance (among other things). This broke WordPress cron, without my knowledge! How does one fix this issue?</p>
<p>
<figure>
  <img src="/blog/2015/12/cloudflare-banner.png" alt="WordPress cron, CloudFlare, and SSL are not always friends" loading="lazy">
  <figcaption>CloudFlare is a service that aims to make websites faster and more secure.</figcaption>
</figure>
</p>

<h2 id="wordpress-cron-scheduling-breaks">WordPress cron scheduling breaks&nbsp;<a class="hanchor" href="#wordpress-cron-scheduling-breaks" aria-label="Anchor link for: WordPress cron scheduling breaks">🔗</a></h2>
<p>Shortly after I transitioned from HTTP to HTTPS, I began noticing that many of my posts began missing their originally scheduled time. This was frustrating, as I often schedule my posts for hours when I am away or asleep, to best reach international audiences. I would wake up the following day to see that my posts failed to go out.</p>
<p>Using the <a href="http://wp-cli.org/">wp-cli utility</a>, I was able to find that my WordPress site&rsquo;s cron functionality was effectively broken. Using <code>wp-cli cron test</code> resulted in the following output:</p>
<pre tabindex="0"><code>Error: WP-Cron spawn failed with error: Cannot communicate securely with peer: no common encryption algorithm(s).
</code></pre><p>Aha! So now I knew what the issue was. Unfortunately, finding hits on Google with similarly worded searches were unsuccessful. I remembered that this was a problem that was recently encountered on the <a href="https://fedoramagazine.org/">Fedora Magazine</a>, so I asked puiterwijk, member of the Fedora Infrastructure team, about what his experience was when he fixed the same issue for the Magazine. However, his answer was completely different than what I thought the problem might be.</p>

<h2 id="fixing-wordpress-cron">Fixing WordPress cron&nbsp;<a class="hanchor" href="#fixing-wordpress-cron" aria-label="Anchor link for: Fixing WordPress cron">🔗</a></h2>
<p>The way to resolve this issue is simple. You need to map your blog&rsquo;s domain or sub-domain on your machine to the loopback address in order for your site to communicate securely with CloudFlare without the script being blocked. To do this, open your favorite text editing utility and edit <code>/etc/hosts</code> on your machine. The file should look something like this.</p>
<pre tabindex="0"><code>127.0.0.1 localhost
127.0.0.1 blog.example.com
</code></pre><p>Once you make this change, it&rsquo;s time to test. You can test whether all is functioning by either using the wp-cli test or using <code>curl</code> to verify the file is not being blocked.</p>
<pre tabindex="0"><code>$ curl -i https://jwfblog.wpenginepowered.com/wp-cron.php
HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Tue, 08 Dec 2015 01:12:47 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.16
</code></pre><p>Alternatively, if you chose to use the wp-cli utility, you should try running the cron test command. Your output should be similar.</p>
<pre tabindex="0"><code>$ wp cron test
Success: WP-Cron spawning is working as expected.
</code></pre><p>Congratulations! Your WordPress cron scheduling is back to normal.</p>

<h6 id="credit">Credit&nbsp;<a class="hanchor" href="#credit" aria-label="Anchor link for: Credit">🔗</a></h6>
<p>All credit for the findings behind this article are thanks to <a href="http://fedoraproject.org/wiki/User:Puiterwijk">puiterwijk</a> from the Fedora Infrastructure team! It would have taken me a longer time to figure this out on my own. If you&rsquo;re in a Fedora IRC channel, you should give Patrick a cookie (<code>puiterwijk++</code>). This guy does so much for Fedora and his dedication is astounding!</p>]]></description></item><item><title>Thirteen Year Legacy: Last.fm Downfall?</title><link>https://jwheel.org/blog/2015/12/thirteen-year-legacy-last-fm-downfall/</link><pubDate>Fri, 11 Dec 2015 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2015/12/thirteen-year-legacy-last-fm-downfall/</guid><description><![CDATA[<p>
<figure>
  <img src="/blog/2015/11/Lastfm-Logo.png" alt="Last.fm logo" loading="lazy">
  <figcaption>The Last.fm logo. Source: Xfdr (<a href="http://www.xfdrmag.net/ive-had-the-last-of-this-why-the-new-last-fm-layout-sucks/" class="bare">http://www.xfdrmag.net/ive-had-the-last-of-this-why-the-new-last-fm-layout-sucks/</a>)</figcaption>
</figure>
</p>
<p><a href="http://www.last.fm/">Last.fm</a> is a web service for users to track and share their music tastes with friends in an easy, simple way. A single play of a song is known as a &ldquo;Scrobble&rdquo;. Listening to music and recording the listen with Last.fm is known as &ldquo;Scrobbling&rdquo;. This is a service that has existed since 2002, originally under the name of Audioscrobbler. In 2015, Last.fm rolled out their <a href="http://www.digitalspy.com/tech/news/a664005/lastfm-unveils-brand-new-site-design-and-most-users-are-really-upset-about-it/">new website beta</a>, originally optional, but later forced upon all users.</p>
<p>Last.fm&rsquo;s site redesign is criticized widely by users, but nobody seems to be listening on the other side in CBS Interactive London offices. What went wrong with the redesign and what can be learned going forward?</p>

<h2 id="lastfm-wasnt-listening">Last.fm wasn&rsquo;t listening&nbsp;<a class="hanchor" href="#lastfm-wasnt-listening" aria-label="Anchor link for: Last.fm wasn&rsquo;t listening">🔗</a></h2>
<p>Perhaps the greatest, singular point of failure with the new Last.fm redesign (and the many months leading up to the redesign) was lack of communication and transparency with users. As someone who signed up in 2009 but only started really using the service in 2013, I never saw major interaction between employees of CBS Interactive and users of Last.fm. Usually, it has always been community volunteers speaking the voice of Last.fm and appearing as the public face of the site. The employees may have commented from time to time, but they were otherwise invisible to most users.</p>
<p>The new site redesign was the epitome of this continued state of &ldquo;non-listening&rdquo;. Without warning, the optional beta that had been available for months was forcibly rolled out, forever replacing the old layout that had existed for many years. While the new appearance certainly could be defined as &ldquo;modern&rdquo; and mobile-friendly, it was missing many of the key features users had come to know, like groups and friends. Navigating was difficult and at times buggy. The redesign felt like it was still in beta testing, but now forced as the default. There is an <a href="https://www.change.org/p/cbs-interactive-bring-old-last-fm-back">online petition</a> that has attracted over 11,000 signers to go back to the original user interface.</p>
<p>Even with 11,000 voices of protest, word from CBS Interactive is minimal. Not many people seem to know what&rsquo;s going on, if anything. This is never a good sign for any website or service. Are the doors closing soon for this thirteen year old service? Is a buyout in the cards? Nobody knows. Nobody will likely ever know until the day of an announcement, because nothing is transparent or open about Last.fm or its management.</p>

<h2 id="lastfms-small-staff">Last.fm&rsquo;s small staff&nbsp;<a class="hanchor" href="#lastfms-small-staff" aria-label="Anchor link for: Last.fm&rsquo;s small staff">🔗</a></h2>
<p>Another issue with this service (and perhaps an issue for a longer time) is that the Last.fm staff is a very small team. Even now, they&rsquo;re hiring for new web developers and Java developers - if you live in the UK, you could even <a href="http://www.last.fm/about/jobs">work for CBS Interactive today</a> (although I don&rsquo;t know if this is a job with a good outlook).</p>
<p>So what would the solution be? If the development team behind Last.fm is small, then there are better ways to create a more productive environment. Perhaps the software development model employed by the company needs reconsideration. Maybe Last.fm needs to make a larger <a href="https://github.com/lastfm">foray into open source</a>. In either case, from the outside, there it looks like a major disconnect between corporate management and the Last.fm team. Because of how opaque Last.fm is managed, it&rsquo;s impossible to know what happens behind closed doors, but something isn&rsquo;t working with their team size - that much is clear.</p>

<h2 id="now-what">Now what?&nbsp;<a class="hanchor" href="#now-what" aria-label="Anchor link for: Now what?">🔗</a></h2>
<p>Because of these decisions made over the past few months, the future of Last.fm is unclear. Many dedicated users are just Scrobbling and using <a href="http://nicholast.fm">other services</a> to use their data in a meaningful way, according to <a href="https://www.reddit.com/r/lastfm/comments/3u2ic3/lastfm_any_hope_left/cxbegwl">Reddit</a>.</p>

<h4 id="librefm">Libre.fm&nbsp;<a class="hanchor" href="#librefm" aria-label="Anchor link for: Libre.fm">🔗</a></h4>
<p>As for myself, I&rsquo;m preparing for a move to a new service. The future for Last.fm is bleak. I want to stay on the boat for as long as possible, but I don&rsquo;t know if this is a sustainable idea for any longer, and I have invested too much time, music, and data into Last.fm to willingly part with it. I was recently made aware to an awesome, open source <a href="https://github.com/kabniel/last2libre">Python toolset</a> that lets users back up any user&rsquo;s Scrobbles to a text file and export it to a service such as <a href="https://libre.fm/">Libre.fm</a>. Libre.fm isn&rsquo;t the most aesthetically pleasing or the most powerful site, but it&rsquo;s stable and open. Anyone who wants to hack on a new feature has access to the source code to do whatever they&rsquo;d like. A platform such as this is much more collaborative and allows for a more positive future than what Last.fm has now.</p>
<p>If you&rsquo;re a developer, you can have a hand in building the future by contributing to <a href="https://git.gnu.io/gnu/gnu-fm">GNU FM</a>, the platform powering Libre.fm. If there&rsquo;s a feature you want, you can add a request on their <a href="https://git.gnu.io/gnu/gnu-fm/issues">issue tracker</a>. Or if you&rsquo;re a system administrator, you can even <a href="https://git.gnu.io/gnu/gnu-fm/blob/master/gnufm_install.txt">install GNU FM yourself</a> and run your own &ldquo;private Last.fm&rdquo; site.</p>
<p>Hopefully there is something to be learned about everything that went wrong with Last.fm and we can look forward to a more open future with the availability of options such as Libre.fm.</p>]]></description></item><item><title>Mumble ready for testing</title><link>https://jwheel.org/blog/2015/12/mumble/</link><pubDate>Thu, 03 Dec 2015 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2015/12/mumble/</guid><description><![CDATA[<h2 id="mumble-is-back-in-fedora">Mumble is back in Fedora&nbsp;<a class="hanchor" href="#mumble-is-back-in-fedora" aria-label="Anchor link for: Mumble is back in Fedora">🔗</a></h2>
<p>
<figure>
  <img src="https://communityblog.fedoraproject.org/wp-content/uploads/2015/12/Mumble.png" alt="Mumble, a free and open-source VoIP program" loading="lazy">
  <figcaption>Mumble, a free and open-source VoIP program</figcaption>
</figure>
</p>
<p>The popular Voice Over IP (VoIP) program, <a href="http://wiki.mumble.info/wiki/Main_Page">Mumble</a>, is being repackaged again for Fedora 22 and 23. Fedora contributor <a href="https://bodhi.fedoraproject.org/users/fedpop">fedpop</a> unretired the package from the Fedora Package Database and is working on getting it added to the stable repositories.</p>
<p>Mumble is available for testing for Fedora 22 and 23 users. Once enough positive feedback is received, it will be added back to the stable repositories for all users. Testers are welcome, especially for Fedora 22!</p>

<h2 id="how-to-test-mumble">How to test Mumble&nbsp;<a class="hanchor" href="#how-to-test-mumble" aria-label="Anchor link for: How to test Mumble">🔗</a></h2>
<p>To test, open a command line and run the following command.</p>
<pre tabindex="0"><code>$ sudo dnf install mumble --enablerepo=updates-testing
</code></pre><p>Confirm the installation and the application will appear on your system. Give it a run and make sure everything works as expected! If it all checks out, leave feedback for the build in Bodhi so the package. This helps move it closer to being packaged for the stable repositories (links are below).</p>
<p>For help enabling the testing repository, see the <a href="https://fedoraproject.org/wiki/QA:Updates_Testing">QA Testing wiki article</a>.</p>

<h2 id="why-i-love-mumble">Why I love Mumble&nbsp;<a class="hanchor" href="#why-i-love-mumble" aria-label="Anchor link for: Why I love Mumble">🔗</a></h2>
<p>Mumble is a package I originally installed when I first began using Fedora in Fedora 20. It is one of the few major VoIP clients that can be classified as &ldquo;FOSS&rdquo; (Free and Open Source) and is available on multiple platforms. It&rsquo;s fairly simple to get a server (Murmur) up and running, and it&rsquo;s a great way for communicating over voice with friends, family, or communities. I used to use it often when I was active in various Minecraft server communities, and for a short time, I used it for my own Minecraft community as well.</p>
<p>When it originally disappeared in Fedora 21, I was disappointed since Mumble is an important piece of software that I think is important in any modern Linux distribution. Finally, Fedora users will once again be able to seamlessly install it without having to manually compile the software.</p>
<p>Big hat tip to fedpop for repackaging this awesome piece of software! This also seems to be his first experience as a Fedora packager, so a big welcome goes out to him as well. I can&rsquo;t wait to start recommending Mumble again for Fedora users.</p>

<h2 id="find-it-in-bodhi">Find it in Bodhi&nbsp;<a class="hanchor" href="#find-it-in-bodhi" aria-label="Anchor link for: Find it in Bodhi">🔗</a></h2>
<p><strong><a href="https://bodhi.fedoraproject.org/updates/FEDORA-2015-789c21d8a6">Fedora 22</a></strong></p>
<p><strong><a href="https://bodhi.fedoraproject.org/updates/FEDORA-2015-934a0702cf">Fedora 23</a></strong></p>]]></description></item><item><title>Netflix and Linux: The First 60 Seconds</title><link>https://jwheel.org/blog/2015/12/netflix-and-linux-the-first-60-seconds/</link><pubDate>Wed, 02 Dec 2015 00:00:00 +0000</pubDate><guid>https://jwheel.org/blog/2015/12/netflix-and-linux-the-first-60-seconds/</guid><description><![CDATA[<p>
<figure>
  <img src="/blog/2015/12/Linux-and-Netflix.jpg" alt="Netflix and Linux, friends at last" loading="lazy">
  <figcaption>Netflix and Linux may not agree on the desktop, but they do in the cloud. <em>Source</em>: blockless.com (<a href="https://blog.blockless.com/how-to-switch-to-linux-without-losing-your-netflix-access/" class="bare">https://blog.blockless.com/how-to-switch-to-linux-without-losing-your-netflix-access/</a>)</figcaption>
</figure>
</p>

<h2 id="netflix-linux-and-60-seconds">Netflix, Linux, and 60 seconds&nbsp;<a class="hanchor" href="#netflix-linux-and-60-seconds" aria-label="Anchor link for: Netflix, Linux, and 60 seconds">🔗</a></h2>
<p>While they have their differences on the desktop, there is one place where Netflix and Linux get along beautifully: the cloud. Netflix system administrator <a href="https://plus.google.com/112610724469645265130">Brendan Gregg</a> recently published an article on the <a href="http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html">Netflix blog</a> about what their administrators do in the first 60 seconds when analyzing performance. You should <a href="http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html">give it a read</a>!</p>
]]></description></item></channel></rss>