SonSpringPersonal and professional home of Christian web designer Nathan Smith.2022-11-05T00:00:00Zhttps://sonspring.com/Nathan SmithInclusive Design Communities2022-11-05T00:00:00Zhttps://sonspring.com/journal/inclusive-design-communities/<h2>Intro</h2>
<p>Firstly, if you want to skip to the crux of it: <a href="https://abookapart.com/products/inclusive-design-communities">Inclusive Design Communities</a> is well worth your time. Read on for my personal take, and how I viewed some of the lessons through the lens of my own life experiences.</p>
<figure class="ss-figure">
<p><img src="https://sonspring.com/assets/images/2022-11-05-inclusive-design-communities.jpg" alt="Inclusive Design Communities" /></p>
<figcaption>A gatefold cover makes for comfortable reading</figcaption>
</figure>
<!-- .ss-figure -->
<p>I have been following <a href="https://samkapila.com/">Sameera Kapila</a> on social media since early 2013, and over the years I have enjoyed hearing her perspective on our industry. Broadly speaking: design, development, usability, etc. When I heard about her book <a href="https://abookapart.com/products/inclusive-design-communities">Inclusive Design Communities</a>, I made a mental note to check it out once it became available. Having recently finished reading it, I must say that Sam's writing is simultaneously easy and difficult to read.</p>
<p>Easy, in that she communicates with a certain fluidity that makes engaging with the content feel like having a natural conversation. Difficult, because it shines a light on some of my underlying assumptions around design and our collective use of exclusionary language. It can be sobering to reckon with the knowledge that something you have said in casual conversation actually has more pernicious roots. Consider the following example.</p>
<blockquote>
<p>Identity is sewn into the very fabric of our language. American idioms I've heard my whole life often have a troubled past — like the term "grandfathered," which shows up in conversations from everything about phone and internet billing plans to leasing agreements and laws. It originated with the "grandfather clause," a group of statutes in the 1890s that granted voting rights to direct descendants of anyone who have been eligible to vote prior to emancipation — automatically registering white men while requiring newly enfranchised Black men to pass tests or pay poll taxes in order to vote.</p>
<p>(page 8)</p>
</blockquote>
<p>The following are a few of the overarching themes that stuck out to me, but this list is not exhaustive. There is more quality content than I could adequately summarize.</p>
<hr />
<h2>Microaggressions</h2>
<p>Reading the section on microaggressions (page 10) brought to mind an interesting story that I have not shared publicly before. It was not terribly hurtful, but reinforced in my mind that some otherwise well-intentioned individuals are simply products of their environment. I will depart slightly from the book review here and share that briefly.</p>
<p>When I was in grad school for my <a href="https://en.wikipedia.org/wiki/Master_of_Divinity">MDiv</a>, a friend's parents were visiting from out of town. I ended up dining with them at the school cafeteria one evening, where the conversation went from general pleasantries, to me opening up more specifically about my life and upbringing.</p>
<p>I shared that my family has the last name <em>Smith</em> because my dad was adopted. He was born in Japan and through a series of circumstances he and one of his sisters found themselves in the care of an American military family. My dad eventually joined the military too. As such, I grew up all over the continental United States and consider myself pretty well-rounded in exposure to its various walks of life.</p>
<p>All of this was conveyed to my friend's parents who seemed genuinely interested in our dinner chat. So, it came as a mild shock to me that after they had left campus, another student told me this.</p>
<blockquote>
<p>When his dad heard you singing, he said to the rest of us: "Nate can carry a tune pretty well, for a <a href="https://en.wikipedia.org/wiki/Chinaman_(term)">Chinaman</a>."</p>
</blockquote>
<p>I was not terribly offended. Yet it struck me as an odd thing to say, considering these facts.</p>
<ol>
<li>
<p>He knew that I am half Japanese. If you are going to use a cultural slur, at least make it accurate.</p>
</li>
<li>
<p>We had a conversation about me being born and raised in the US. Obviously, I am fluent in English.</p>
</li>
</ol>
<p>I do not think he meant any harm, nor said it with malice in his heart. He probably assumed he was making a joke at my expense amongst like-minded thinkers, aka: in the safe company of other white folks. Such is the subtle nature of racism, even (especially?) <em>good Christian people</em> can harbor deep-seated prejudices.</p>
<p>But I digress. Suffice it to say that Sam gives several comparable examples that I am sure will seem familiar to anyone who has received backhanded compliments about their abilities.</p>
<hr />
<h2>Privilege</h2>
<p>Several years ago, a long-time friend and I parted ways after reaching an "<a href="https://en.wikipedia.org/wiki/Agree_to_disagree">agree to disagree</a>" impasse. At the time, I lacked the vocabulary to explain to him what I meant. That is something I think back on from time to time, and regret not being able to better articulate my point.</p>
<p>He insisted that <a href="https://en.wikipedia.org/wiki/White_privilege">white privilege</a> is not real, because he worked hard for everything he has. I was trying to help him realize that I was not accusing him of accepting a handout, rather that the metaphorical wind was in his sails whereas people who did not look (or sound) like him had to paddle upstream against the current.</p>
<p>Sam said it even better.</p>
<blockquote>
<p>For example, every time I get coffee or tea at a shop nearby, I don't have to worry about whether I'll encounter stairs. But for someone in a wheelchair or who uses crutches after an injury, stairs are physical obstacles that put them at a disadvantage if there isn't a ramp available. In this scenario, I have privilege; the coffee shop isn't as accessible to others as it is to me.</p>
<p>You might find yourself feeling some level of guilt because of the privileges you have. We must confront such guilt head-on and acknowledge that it exists, rather than letting it pull us back into self-absorption and hinder us from doing the critical work of self-improvement. It isn't helpful to feed the narrative that you can't help what you were born into. Instead, understand that guilt is a powerful motivator, telling us where we have opportunities to make things better. Use your privilege (or guilt) to elevate others who have been historically marginalized and oppressed. At work, you might intervene in a tense meeting or shine light on others who get spoken over frequently, asking the interrupting party to let the other person complete their thought.</p>
<p>(page 21)</p>
</blockquote>
<hr />
<h2>Active listening</h2>
<p>I have heard it said that being a good listener means more than just waiting for your turn to talk. This is something I can be guilty of, as I am occasionally — let's be honest, most of the time — too eager to throw in a one-line zinger or bad pun.</p>
<p>Sam outlines key tenets that are important to being an active listener. Hear what others are saying and resist the urge to interject your own opinions into what they are conveying. Also, repeat and rephrase what is being said. It helps avoid misunderstandings and shows them that you are absorbing the essence of the discussion.</p>
<p>This is a recurring theme in conversations with <a href="https://olgasmith.com/">my wife</a>. Paraphrased:</p>
<blockquote>
<p>"I am telling you what happened, but that does not mean I need you to solve it for me."</p>
</blockquote>
<p>Sometimes, perhaps more often than I am aware, being present in the moment is enough.</p>
<hr />
<h2>Curriculum & education</h2>
<p>This is something I had honestly not really thought about before reading this book. Namely, that much of the curriculum offered in formal courses of design (and art) presuppose that all the best ideas stem from a particular culture and aesthetic. This is not to take away from some of the great art and design philosophies that originated in Europe, but that is a slice from the overall cross section of what humanity has to offer.</p>
<p>As a product of the US public education system myself, this squares with my experience. My grade school memories are foggy, but as I recall our concept of history could be summed up as: Europeans sought to colonize North America. They did. Then the colonists decided to become a country unto themselves. Oh, and we reluctantly entered the fight in World War II. You're welcome, Europe.</p>
<p>Sam describes her experience thusly.</p>
<blockquote>
<p>At some universities or colleges, design programs exist within an art school. Students are taught how to use design software, explore foundational concepts like layout, color, and typography, and undergo periodic portfolio reviews. Like their fellow art students, design students often take drawing, painting, ceramics, photography, and art history classes. Starting around 2010, some programs added courses focusing on user interface and web design.</p>
<p>Art and design history classes are one of the few environments where we learn how art, design, and culture connect. In my experience, however, those history classes focus on a small aspect of art and design history: art celebrating empires, colonization, and European perspectives. The movements taught in most design programs — Modernism, Postmodernism, the Swiss Typographic Style, Gestalt, Bauhaus, and Constructivism — are all based on European culture.</p>
<p>(page 42)</p>
</blockquote>
<p>Sam gives some examples of design beyond that scope, including a few of her favorites.</p>
<ul>
<li>
<p>Bobby Kooka and Umesh Rao, who were responsible for <a href="https://en.wikipedia.org/wiki/Air_India">Air India's</a> branding in 1946.</p>
</li>
<li>
<p>The decades-long ad campaign by <a href="https://thenationalnews.com/arts/india-s-most-famous-ad-campaign-how-the-amul-butter-girl-has-been-churning-up-debate-for-50-years-1.906660">Amul Butter</a>.</p>
</li>
<li>
<p>Stunning historical <a href="https://smithsonianmag.com/history/first-time-together-and-color-book-displays-web-du-bois-visionary-infographics-180970826/">infographics</a> by <a href="https://en.wikipedia.org/wiki/W._E._B._Du_Bois">W.E.B. Du Bois</a>.</p>
</li>
<li>
<p><a href="https://queerdesign.club/">Queer Design Club</a>, a directory of LGBTQ+ designers around the world.</p>
</li>
</ul>
<p>She also talks about keeping curriculum — in the form of course descriptions and required learning materials — flexible enough to adapt to new paradigm shifts in the design industry. That is, to structure a class with enough leeway to allow for updates to one's teaching workflow without having to go through reapproval due to somewhat rigid accreditation guidelines.</p>
<p>Additionally, she gives some great tips on how to best keep a classroom engaged. I think many of these also have applicability in conference speaking and/or communicating with coworkers as well. For example, allow time for <a href="https://en.wikipedia.org/wiki/Note-taking">note-taking</a> and consider those for whom English may not be a primary language. When interpreters are involved, ensure there is adequate delay for translation. Also, make learning materials available in formats that best suit those consuming them.</p>
<p>I especially liked Sam's anecdotal story about being creative on her feet.</p>
<blockquote>
<p>I once taught a class on HTML and CSS in which some of my students were deaf or hard of hearing due to being injured in combat overseas. The students, their interpreters, and I had to work as a team to translate HTML and CSS into plain English and American Sign Language, and vice versa. We made up a language we dubbed HTSL: HyperText Sign Language. We came up with new hand signals for some HTML tags, and they spelled out CSS lines each time, including punctuation. It may seem unconventional, but we were translating among four languages, and through our collective creativity, we made it work.</p>
<p>(page 51)</p>
</blockquote>
<p>➡️ <strong>Aside:</strong> Whenever I give a talk, I always try to upload my slide deck a day before so that attendees can grab the PDF in advance. One time, this saved me because I forgot to bring my laptop to the venue. I ended up presenting my PDF from another speaker's computer. Phew!</p>
<hr />
<h2>Optimizing workflow</h2>
<p>Sam calls to task companies who try to blame their lack of diversity on a "<a href="https://forbes.com/sites/janicegassam/2018/12/18/5-reasons-why-the-pipeline-problem-is-just-a-myth/">pipeline problem</a>." She points out that so much of what is attributed to a lack of viable candidates is actually businesses inadvertently putting up walls that impede others from feeling welcome to apply. Such as, hiring only for "culture fit" — Would I share a beer with this person? Do they even drink alcohol? — or insisting that applicants be <em>rock stars</em> or <em>ninjas</em>.</p>
<p>Or worse yet, implying that hiring someone who is unlike the rest of one's employee demographic would somehow be compromising on quality. That perpetuates an insular culture. It can be bad for business because true innovation — and hedging against unforeseen competition — often relies on a collective diversity of thought. Likewise, we need to be cognizant of the fact that "<a href="https://forbes.com/sites/gradsoflife/2019/10/16/talent-is-equally-distributed-but-opportunity-is-not/">talent is equally distributed, but opportunity is not</a>." Therefore, hiring managers ought to be willing to look anywhere and everywhere, beyond what has worked in the past.</p>
<p>Staffing a monoculture can have unintentional and potentially deadly consequences.</p>
<blockquote>
<p>Women are 47 percent more likely to be seriously injured in a car crash than men, and 17 more likely to die. Why? Crash test dummies were built to represent average male bodies. Differences in male and female stature translate to differences in how close or far our feet are from the pedals, where the back of our car seat has support against whiplash, where seat belts cross over us, and on and on. It's not that male engineers were purposefully excluding female bodies; their implicit bias simply created a fatal oversight.</p>
<p>(page 73)</p>
</blockquote>
<p>In addition to talking about leveling the playing field when it comes to pay, often by being more transparent about pay bands across job functions, Sam also covers what might be considered intangible perks.</p>
<blockquote>
<p>Remote-first companies can attract working parents with caregiving responsibilities, those seeking a healthier work-life balance, and those with far commutes, high transportation costs, or long shift hours. Work flexibility can help keep many women in the industry who've had to quit during the pandemic to take care of their families and other dependents. At the same time, don't assume that one way of working is a catch-all. Many people like going into the office, needing in-person collaboration or a quiet setting that their workspace at home just can't provide.</p>
<p>(page 86)</p>
</blockquote>
<p>One aspect that is huge for me is remote work. Due to my own <a href="https://linkedin.com/pulse/handshake-required-nathan-smith/">life circumstances</a>, I would prioritize that as one of the top factors when considering a new job. My wife had a stroke (2019) and brain surgery (2020). She has since fully recovered and is adjusted to the new "normal," but has permanent <a href="https://en.wikipedia.org/wiki/Hemianopsia">hemianopsia</a>; 50% vision loss in the left of each eye. That leaves me as the one driving parent in our household. Many of my evenings are spent shuttling our kids to/from their various extracurricular activities.</p>
<p>Having worked remotely for a few years prior to the COVID-19 lockdown, I cannot imagine going back to an in-office job. Each workday from 2:45 to 3:15pm, I step away from my desk to pick up my son from elementary school. My coworkers know that is a time slot I will not be at my computer, and everyone is cool with it.</p>
<p>Sometimes I chat with them via <a href="https://en.wikipedia.org/wiki/Microsoft_Teams">Teams</a> on my phone, while I wait for his school to release all the students. My son always runs out at full speed, trying to sneak up on me if he can. Every time, he asks me: "Hey dad, how's work?" It always brightens my day. I would not want to give that up. We work hard for our kids, but what they will remember most is the time we spent with them.</p>
<hr />
<h2>Being an ally</h2>
<p>This is a common thread throughout the book, but I think it deserves a specific mention. Sam reminds those of us who benefit more from societal stereotypes — for example: "<a href="https://en.wikipedia.org/wiki/Passing_(racial_identity)">white passing</a>, <a href="https://en.wikipedia.org/wiki/Cisgender">cisgender</a> males are natural leaders," or "<a href="https://theatlantic.com/science/archive/2018/01/asian-americans-science-math-bias/551903/">Asians are good at STEM</a>" — need to speak up for others who are not given the benefit of the doubt.</p>
<blockquote>
<p>The responsibility of setting a cultural tone is on company leadership, but employees at every level have the power to improve the workplace for themselves and others. Even if you can't change certain processes, you can advocate for others, ask questions, and model behavior.</p>
<p>(page 82)</p>
</blockquote>
<p>➡️ <strong>Aside:</strong> This is a topic for which Microsoft has <a href="https://microsoft.com/en-us/inclusion-journey/learn">specific training</a>, and as a team we tend to be pretty good about inoculating ourselves against overriding dissenting voices or misattributing ideas from marginalized people to others. To the point where we will gently rib each other, in cases where it could be interpreted that way.</p>
<p>I was in a meeting recently where a (female) project manager made a suggestion as to the cause of a bug. I halfway dismissed it, not on the basis of her gender, but because looking at the code I did not see how it could be the root issue. Later on, a (male) software developer suggested in a roundabout way that perhaps it could be related.</p>
<p>Hilarity ensued. Paraphrased:</p>
<blockquote>
<p><strong>Her:</strong> "Wait, did you just totally revisit my initial idea and restate it as your own?"</p>
<p><strong>Him:</strong> "Oh, sorry. I did not realize that. But it might be worth looking into."</p>
<p><strong>Me:</strong> "You know, now that he said it… Maybe it has some merit?"</p>
<p><strong>Her:</strong> (jokingly) "I hate you all, you're the worst."</p>
</blockquote>
<p>I then went on to genuinely apologize. I explained that the reason I had not initially given credence to her input was because I had the project on my screen and could not fathom — at that particular moment in time — how the symptoms could have stemmed from that logic path. Yet by the time my developer coworker brought it up, the notion had ruminated in my head as a possibility.</p>
<p>Ultimately, it ended up not being a front-end related problem but data missing from an API. Still, we were all able to pause and take stock of our interpersonal interactions. Often, the best way to diffuse the specter of conflict is to introduce humor. She rightly stood up for herself, pointing out that the rest of us were not doing our proverbial jobs as would-be allies on the team.</p>
<hr />
<h2>Giving back</h2>
<p>In addition to looking out for people within your own workplace, Sam recounts how as an instructor she encouraged professionals to help the next generation of students in their career pursuits. She reached out to practitioner peers in software design and development, inviting them to speak to her students.</p>
<blockquote>
<p>I brought my advisory board members into the classroom in various capacities. Many wanted to get public speaking experience and enjoyed being able to guest lecture in my class or the department. They'd stay longer to answer questions and get to know some students by name. They'd recognize those students at meetups and continue to guide them as they prepared for graduation and their first job search. Others liked to come in for portfolio reviews, sit with students individually, and assess their résumés. This demystified so much of the working world for the students.</p>
<p>It benefitted the design professionals, too. Talking about their work with eager audiences rekindled their enthusiasm. They learned from students how difficult the path from school to career had become… They also saw first-hand how motivated and talented the students were, and hired many directly after graduation.</p>
<p>(page 112)</p>
</blockquote>
<p>I had a ministry mentor who was fond of this <a href="https://en.wikipedia.org/wiki/Peter_Drucker">Peter Drucker</a> quote: "There is no success without a successor." Meaning, it does not matter what crowning achievement one accomplishes in an illustrious career, if it does not ultimately benefit those who follow in our footsteps. I appreciate that Sam showed the duality of how academia and industry influence one another. In exchange for sharing their time and expertise, those further along in their careers were able to scout talented up-and-coming individuals.</p>
<hr />
<h2>Conclusion</h2>
<p><a href="https://abookapart.com/products/inclusive-design-communities">Buy this book</a>. The end.</p>
<p>In all seriousness though, this was an excellent read. I would recommend it to anyone who aspires to a position of leadership, or considers oneself to be a seasoned and respected individual contributor. Though it is couched in the language of design — we all view the world from our own vantage point, so inevitably it would reflect Sam's life journey — it transcends being applicable to any single occupation.</p>
<p>In today's increasingly polarized social and political climate, being cruel is easy. For some, it has become almost second nature. It is base human instinct to selfishly look out for ourselves. But life is not a <a href="https://en.wikipedia.org/wiki/Zero-sum_game">zero-sum game</a>. Even if one person were to "win" by decimating everyone else, the outcome would inherently be a lonely <a href="https://en.wikipedia.org/wiki/Pyrrhic_victory">Pyrrhic victory</a>.</p>
<p>If only in the interest of our own longevity, I think it would behoove us all to be a bit more inclined towards inclusivity. Yet that outcome is not a predetermined eventuality, it will not just happen on its own. It costs nothing to be kind, but it requires intentionality to strive toward a more <a href="https://interactioninstitute.org/illustrating-equality-vs-equity/">equitable future</a>. I am thankful for luminaries like Sameera Kapila who light our way along that path.</p>
SwordSearcher 9.0 review2022-05-20T00:00:00Zhttps://sonspring.com/journal/swordsearcher-9-review/<p>It has been a while since I last reviewed <a href="https://swordsearcher.com/">SwordSearcher</a>. Quite a bit has changed since then, so I figured it would be good to dive into version <code>9.0</code> and cover some of the new functionality.</p>
<p>Brandon Staggs was gracious enough to provide me with a review copy, and I have to say I was pleasantly surprised that it still feels familiar and approachable, while also bringing new features to the table. Though perhaps <em>surprised</em> is the wrong word, since his work has always been impeccable. I will dive into a few of my favorite aspects in this review.</p>
<hr />
<h2>Dark mode</h2>
<p>New as of version nine, there is a new <em>dark mode</em> which is nicely done. According to my teenage son, it feels like a code editor for the Bible. The first thing he did was configure his SwordSearcher installation to match the <a href="https://draculatheme.com/">Dracula theme</a>, so it looks like his preferences for <a href="https://en.wikipedia.org/wiki/Vim_(text_editor)">Vim</a> and <a href="https://en.wikipedia.org/wiki/Visual_Studio_Code">VS Code</a>.</p>
<p>I would have to agree with that assessment. Even with previous versions of SwordSearcher, the layout reminded me of an <a href="https://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> with multiple ways to look at a particular topic. With the dark theme, it feels more conducive to longer reading sessions and the colored text helps words and subjects to pop off the page. Initially, the app loads the traditional light theme. Clicking the bottom-left icon will switch to the dark theme (and back again).</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-light-mode.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-light-mode.jpg" alt="SwordSearcher 9 - light mode" /></a></p>
<figcaption>Light mode</figcaption>
</figure>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-dark-mode.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-dark-mode.jpg" alt="SwordSearcher 9 - dark mode" /></a></p>
<figcaption>Dark mode</figcaption>
</figure>
<p>Note: For the sake of simplicity, I will feature dark mode screenshots for the remainder of this article. Just be aware that all the things I mention are available in both modes.</p>
<hr />
<h2>Search & layout</h2>
<p>To say that the search feature is fast would be an understatement. Overall, the speed of UI responsiveness is one thing that has always impressed me about previous versions of this app. When searching, results are nearly instantaneous and there is a tasteful bar chart that shows the frequency of results across the entire Bible.</p>
<p>This screenshot shows a search for the phrase <code>"son of david"</code>, with the Bible view on the left and search results on the right. The orange (and blue) rectangles in the image show how often this string of text appears in the various books. As can be seen in the chart, there are more instances of this search result in the Old Testament than in the New Testament. Clicking any of the bars will jump to the first occurrence of the term in its respective chapter.</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-search.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-search.jpg" alt="SwordSearcher 9 - dark mode" /></a></p>
<figcaption>Search results</figcaption>
</figure>
<p>I have achieved this layout by:</p>
<ul>
<li>Closing a few other panes</li>
<li>Dragging the top bar of the search results</li>
<li>And dropping it over to the right side</li>
</ul>
<p>It is difficult to explain with a static image, but there are hoverable regions that appear when dragging a pane. Drop the rectangle you are dragging onto that representative area, and <em>voila</em> you have an individualized layout. If you want to revert to the default, you can do so by going to the "view" menu and clicking "restore layout (Bible on the left)." Or, you can simply press <code>Alt-A</code> at any time.</p>
<hr />
<h2>Customization</h2>
<p>One aspect I missed from previous versions was the "single slant" tabbed UI, but I was thankful to find this too is customizable. I tweaked a few aspects, such as highlight and link colors to suit my needs. I have to say that level of personalization and attention to detail is a nice refinement.</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-preferences-tab-appearance.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-preferences-tab-appearance.jpg" alt="SwordSearcher 9 - preferences, tab appearance" /></a></p>
<figcaption>Preferences - tab appearance</figcaption>
</figure>
<p>In fact, nearly every aspect of SwordSearcher can be tweaked to some degree via the <em>preferences</em> menu. This includes choosing a specific typeface, font size, as well as making changes to UI colors. What's more is that this can be done separately for light and dark mode. So, if you find yourself switching between modes, each one can be specifically tailored to your liking.</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-preferences-fonts-and-colors.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-preferences-fonts-and-colors.jpg" alt="SwordSearcher 9 - preferences, fonts and colors" /></a></p>
<figcaption>Preferences - fonts and colors</figcaption>
</figure>
<p>You can also choose which tabs you want to be rendered, depending on which versions and translations of the Bible you are interested in. That can be toggled quickly from the tabs menu at the top of the app, by choosing either "show all tabs" or "show only my selected library tabs."</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-preferences-visible-tabs.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-preferences-visible-tabs.jpg" alt="SwordSearcher 9 - preferences, visible tabs" /></a></p>
<figcaption>Preferences - visible tabs</figcaption>
</figure>
<hr />
<h2>Image viewer</h2>
<p>One of the tougher parts (for me anyway) when reading the Bible is attempting to visualize what is being described in my head. I am appreciative of the <em>image viewer</em> feature, because it removes a lot of the guesswork and estimation of measurements. There are numerous supplementary images, ranging from historical plant life, to temple floorplans, and diagrams of <a href="https://en.wikipedia.org/wiki/Dispensation_(period)">dispensations</a>.</p>
<p>For example, depicted here is a map showing the expanse of the Roman Empire when ruled by Alexander the Great. It is helpful to visualize just how much territory Rome had conquered, which gives one a sense of scale when thinking about awaiting a messiah for deliverance.</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-image-viewer-map.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-image-viewer-map.jpg" alt="SwordSearcher 9 - image viewer" /></a></p>
<figcaption>Image viewer - map</figcaption>
</figure>
<p>Here is another illustration, which is a cross section of ancient Zion from west to east. It shows the vertical walls of the city, relative to the underlying elevation. There are also subterranean details included, such as the <a href="https://en.wikipedia.org/wiki/Siloam_tunnel">Siloam_tunnel</a>. This is an interesting perspective (no pun intended) that is not readily apparent when reading about the location in the text.</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-image-viewer-elevation.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-image-viewer-elevation.jpg" alt="SwordSearcher 9 - image viewer" /></a></p>
<figcaption>Image viewer - elevation</figcaption>
</figure>
<hr />
<h2>Word cloud & tree</h2>
<p>I am a <a href="https://en.wikipedia.org/wiki/Data_and_information_visualization">data viz</a> nerd, so I appreciate the ability to see various passages presented in a visual format. The <em>word cloud</em> view makes words larger that occur more often and can optionally be set to include (or exclude) common words such as "the." In this screenshot, we see the book of John chapter 3. At a glance, it is easy to see the major names and themes that appear throughout.</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-word-cloud.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-word-cloud.jpg" alt="SwordSearcher 9 - word cloud" /></a></p>
<figcaption>Word cloud</figcaption>
</figure>
<p>The <em>word tree</em> view is also helpful. It is a more exacting view of key passages, breaking down the sentence structure and relationships between words. It allows one to see the recurrence of words, in conjunction with other repeating patterns. In this example, the word "unto" is mapped to its usage alongside other phrases with commonalities.</p>
<figure class="ss-figure">
<p><a href="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-word-tree.jpg"><img src="https://sonspring.com/assets/images/2022-05-20-swordsearcher-9-word-tree.jpg" alt="SwordSearcher 9 - word tree" /></a></p>
<figcaption>Word tree</figcaption>
</figure>
<hr />
<h2>Value & price</h2>
<p>I suppose that value is in the eye of the beholder, but to me <a href="https://swordsearcher.com/">SwordSearcher</a> feels reasonably priced for the sheer amount of literature and supplemental materials it contains.</p>
<ul>
<li>Bible versions and translations</li>
<li><a href="https://en.wikipedia.org/wiki/Exegesis">Exegetical</a> study materials</li>
<li>Daily reading guide</li>
<li>Image viewer</li>
<li>Word data viz</li>
</ul>
<p>Also, bear in mind that some other academic Bible software will run upwards of $10k+ for their most full-featured version. That strikes me as cost prohibitive — and perhaps a bit overkill — for someone wanting to dive more into the daily study of scripture.</p>
<hr />
<h2>Summary</h2>
<p>Perhaps needless to say, I am a fan. The dedication that Mr. Staggs has put into this app over the years definitely shows. It has been a personal labor of love since he began building it back in 1994. He continues to add more enhancements and quality of life improvements to this day, which is a testament to his craftsmanship and devotion to the product.</p>
<p>In terms of bespoke, indie software I would put it on par with apps such as:</p>
<ul>
<li><a href="https://sublimemerge.com/">Sublime Merge</a></li>
<li><a href="https://sublimetext.com/">Sublime Text</a></li>
</ul>
<p>For context — if you are not a developer who uses those apps — this comparison is high praise.</p>
<p>So, I guess the real question is:</p>
<blockquote>
<p>"Should I buy <a href="https://swordsearcher.com/">SwordSearcher</a> version nine?"</p>
</blockquote>
<p>It depends. If you are a Windows user who wants to dive more into learning about the Bible, I would answer resoundingly: <em>Yes.</em> I consider it to be an app that is consistently best in class.</p>
My time at Reaktiv2021-05-28T00:00:00Zhttps://sonspring.com/journal/my-time-at-reaktiv/<figure class="ss-figure">
<p><img src="https://sonspring.com/assets/images/2021-05-28-reaktiv-co-hero.jpg" alt="Reaktiv's new site" /></p>
<figcaption>Reaktiv's new site</figcaption>
</figure>
<p>For the past year and a half, I have had the privilege of working alongside the kind and talented folks at <a href="https://reaktiv.co/">Reaktiv</a>. During my time there, I was able to work on interesting projects for a variety of clients.</p>
<p>We also redesigned and rebuilt the company site, while rebranding from <code>ReaktivStudios.com</code> to <code>Reaktiv.co</code> in the process. Kudos to <a href="https://linkedin.com/in/lauren-mancke-4173501b/">Lauren</a>, <a href="https://linkedin.com/in/rsmith87/">Robby</a>, and <a href="https://linkedin.com/in/corywebb/">Cory</a> for all their hard work.</p>
<p>Plus, I can say without reservation that <a href="https://linkedin.com/in/josheaton/">Josh</a> is one of the best bosses I have ever had.</p>
<hr />
<h2>Backstory</h2>
<p>To tell the story of my time at Reaktiv, it must be understood against the backdrop of some family struggles we were going through at the time. It is not an exaggeration to say Reaktiv was a lifesaver.</p>
<p>We had known about my wife's <a href="https://mayoclinic.org/diseases-conditions/brain-avm/symptoms-causes/syc-20350260">brain AVM</a> for years. For her doctors weighing options, it was always sort of a "watch and wait" scenario. Essentially, the risk of operating would outweigh simply living with it. That changed on October 29, 2019.</p>
<p>As luck would have it, that was coincidentally the same day I had a <a href="https://dictionary.cambridge.org/us/dictionary/english/skip-level">skip-level</a> meeting scheduled with my manager's boss. Since we had gone to the hospital for my wife's bad migraines in the past, I took my laptop with me to get some work done while in the waiting room. Usually, the scans would reveal there was nothing to be worried about.</p>
<p>Unbeknownst to us, that day would be different. While waiting for a doctor to come into the room to evaluate her, I stepped out for my scheduled meeting. I walked to another nearby, empty hospital room and got situated for my work-related call.</p>
<p>I am paraphrasing here, but it went something like this.</p>
<blockquote>
<p><strong>Manager:</strong> "Are you sitting down?"</p>
<p><strong>Nathan:</strong> "Oh, I am sure she will be fine. They are running some tests now."</p>
<p><strong>Manager:</strong> "What?"</p>
<p><strong>Nathan:</strong> "We are at the hospital, because my wife is having a bad migraine. I thought you were referring to that."</p>
<p><strong>Manager:</strong> "Ugh, I am sorry. That makes this so much worse. We are doing layoffs. I have to inform you that today will be your last day with the company."</p>
</blockquote>
<p>When I walked back into her hospital room, my wife told me the diagnosis. In turn, I told her about my brief video chat. We nervously chuckled — with tears welling up in our eyes — at the random absurdity and timing of the one-two punch we had been dealt.</p>
<blockquote>
<p><strong>Olga:</strong> "The doctor came by while you were outside. He said I had a stroke."</p>
<p><strong>Nathan:</strong> "Well, I was laid off. But yeah, your bad news is definitely worse."</p>
</blockquote>
<hr />
<h2>Job hunt</h2>
<p>Long story short, over the next few weeks — sometimes while in my wife's hospital room — I treated searching for employment like a full-time job. Thankfully, posting a <a href="https://twitter.com/nathansmith/status/1189591251840098305">tweet</a> got the ball rolling. Friends and former coworkers sent referrals. My philosophy at that point was to follow up with any/all job leads.</p>
<p>I narrowed down the list of potential employers to companies I thought would be remote friendly, and tracked my interview progress with a spreadsheet.</p>
<figure class="ss-figure">
<p><img src="https://sonspring.com/assets/images/2021-05-28-spreadsheet-job-leads.png" alt="Spreadsheet of job leads" /></p>
<figcaption>Spreadsheet of job leads</figcaption>
</figure>
<p>All told, I ended up with <strong>48</strong> viable job leads and applied to <strong>27</strong> of them. I had at least a first round interview with every company to which I applied. Some progressed to a second round as well.</p>
<p>There are a few factors worth mentioning.</p>
<ul>
<li>
<p>This was before COVID-19, and several of the companies I spoke with did not allow for remote work.</p>
</li>
<li>
<p>Some of the interview processes would have taken longer than I felt comfortable with, due to the immediate need for health insurance continuity. Those in the US know what I mean.</p>
</li>
<li>
<p>I respectfully bowed out of any interview process that would have culminated in an on-site interview. I did not want to be out of town, in case anything else happened with my wife's medical situation.</p>
</li>
</ul>
<p>I wrote more about my job hunt on <a href="https://linkedin.com/pulse/handshake-required-nathan-smith">LinkedIn</a>.</p>
<p>Also in the back of my mind — as we progressed into November of 2019 — was the tendency for larger companies to go into a hiring "freeze" during November and December. The thought of not having gainful employment lined up before then was daunting.</p>
<hr />
<h2>Reaktiv is family</h2>
<p>After interviewing with Josh (Reaktiv's CEO) and three other team members, I felt like I had found <em>my people</em>. They officially brought me aboard, knowing full well that my wife would need brain surgery shortly thereafter. I will forever be indebted to them, for graciously allowing me to spend time with her in the hospital as she recovered.</p>
<p>This became my default, boilerplate reply to recruiters.</p>
<blockquote>
<p><code>{name}</code>:</p>
<p>I appreciate the interest, but I am happy in my current role. I started with Reaktiv in December (2019), after having been laid off from a start-up.</p>
<p>This probably sounds cliché, but it is a company that feels like family. Meaning, I feel like that is where I belong.</p>
<p>Reaktiv initially hired me to "the bench." That allowed me to have health insurance continuity and spend most of January (2020) in the hospital with my wife, who was recovering from brain surgery.</p>
<p>It was a crazy whirlwind of being laid off, the same day my wife was diagnosed as having a stroke, and then interviewing frantically (with 25+ companies) to make sure I landed somewhere quickly.</p>
<p>I wrote more about that <a href="https://linkedin.com/pulse/handshake-required-nathan-smith">here</a>.</p>
<p>Again, I appreciate the interest. Never burn a bridge, etc.</p>
<p>But I feel like I am where I should be.</p>
<p>— Nathan</p>
</blockquote>
<p>I know that the phrase "<a href="https://shrm.org/ResourcesAndTools/hr-topics/benefits/Pages/Unlimited-PTO.aspx">unlimited PTO</a>" gets thrown around, and is sometimes blamed for making people feel guilty about actually taking time off. But in the case of Reaktiv, they encouraged a healthy work/life balance. Honestly, it was unlike anywhere I have ever been.</p>
<hr />
<h2>My role</h2>
<p>When COVID-19 hit the United States in early 2020, I (like so many of us) unexpectedly found myself with some "down time" between billable projects. As a company, we took that opportunity to get ahead of work that we would need later. To that end, I built the <a href="https://ui.reaktivstudios.com/">RKV Component Library</a>.</p>
<figure class="ss-figure">
<p><img src="https://sonspring.com/assets/images/2021-05-28-reaktiv-component-library.jpg" alt="RKV Component Library" /></p>
<figcaption>RKV Component Library</figcaption>
</figure>
<p>It housed a set of internal React components, for use on client facing projects. I also built vanilla JS versions of those UI elements, to be used with flat HTML. This versatility allowed us to apply the same markup and styles for single page JS apps and/or CMS generated content.</p>
<p>Additionally…</p>
<ul>
<li>
<p>Along with my coworker Cory Webb, I was interviewed for the React Wednesdays live stream. You can view an archive of the video <a href="https://youtu.be/rx2RrVpFToo">here</a>.</p>
</li>
<li>
<p>I created training curriculum about <a href="https://jestjs.io/">Jest</a>, <a href="https://nextjs.org/">Next</a>, and <a href="https://reactjs.org/">React</a>. I led video calls for devs at partner agencies. On retainer, I would periodically do code reviews of their projects. Some devs needed help moving from classes to <a href="https://reactjs.org/docs/hooks-intro.html">React Hooks</a>. I created comparisons, built using both approaches.</p>
</li>
</ul>
<p>Working at Reaktiv afforded me the autonomy to craft solutions, while also allowing me to lean on the collective wisdom of my coworkers. It was a positive and uplifting environment. I truly feel their company culture is something special.</p>
<hr />
<h2>Reflection</h2>
<p>I may eventually write more, in terms of <em>"What's next?"</em> on my career path. But for now, I wanted to jot down my thoughts while they are still fresh in my mind. I sincerely wish the best for the folks at Reaktiv, and will emphatically cheer on their continued success as a proud alumnus.</p>
<p>Though I will no longer be there, I cannot overstate how thankful I am for having been a part of it. I believe that I am a better person because of the friendships I made. Josh especially was (<em>continues to be</em>) wise, kind, and gracious. Time and again, he extended undeserved patience to me.</p>
<p>The entire team was impactful — in a "positive force multiplier" sort of way — during an especially difficult time in my life. If anyone else is looking for an agency that treats you like a human first (whether employee or client), I would encourage you to consider Reaktiv.</p>
<p>Depending on when you are reading these words, I bet that <a href="https://reaktiv.co/jobs/">Reaktiv is hiring</a>.</p>
Husky v5 and NPM prepare2021-02-25T00:00:00Zhttps://sonspring.com/journal/husky-v5-and-npm-prepare/<p><strong>Note:</strong> This is a summary I wrote for my coworkers this week, on our internal blog. I am hoping that it helps others who have run into similar issues with upgrading from Husky v4 to v5.</p>
<p>I also filed a <a href="https://github.com/typicode/husky/issues/884">ticket</a>, suggesting changes to the Husky documentation.</p>
<hr />
<h2>What is Husky?</h2>
<p>First, a bit of background. <a href="https://typicode.github.io/husky/">Husky</a> is "Git hooks made easy." Though the <em>easy</em> part may be a bit of a stretch lately. Husky version 4 was indeed relatively straightforward and easy to use.</p>
<p>Husky version 5 is a bit more tricky to set up. Thankfully, it is not necessary to revisit the configuration once it is done. We essentially use it as a proxy to running <a href="https://github.com/okonet/lint-staged">lint-staged</a> commands.</p>
<p>The following are steps I took to abstract that process, so that usage of v5 is automatic for repos which have it installed. This involved a slight bit of NPM and bash trickery, but not much.</p>
<hr />
<h2>What is different?</h2>
<p>Let's not mince words here. Husky v5 is weird.</p>
<p>At first, I did not understand the "why," because v4 syntax seems more intuitive.</p>
<p>I felt like this…</p>
<blockquote>
<p>"Get off my lawn, Husky five!"</p>
</blockquote>
<p>However, I did some reading and research. As it turns out, Husky is now more natively tapping into the concept of Git hooks than in previous versions. Okay, cool. I guess I can give it a pass on the odd hoops we have to jump through.</p>
<p>That said, here is a comparison of v4 and v5.</p>
<hr />
<h2>Before: v4</h2>
<p>Previously, all hooks lived within <code>package.json</code> under the <code>"husky"</code> object.</p>
<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span><br /> <span class="token property">"husky"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br /> <span class="token property">"hooks"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br /> <span class="token property">"pre-commit"</span><span class="token operator">:</span> <span class="token string">"lint-staged"</span><br /> <span class="token punctuation">}</span><br /> <span class="token punctuation">}</span><span class="token punctuation">,</span><br /> <span class="token property">"lint-staged"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br /> <span class="token property">"*.{css,html,js,json,md,scss}"</span><span class="token operator">:</span> <span class="token string">"prettier --write"</span><br /> <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre>
<p>We could simply point a <code>pre-commit</code> hook at <code>lint-staged</code> and move on with our lives.</p>
<hr />
<h2>After: v5</h2>
<p>The installation of Git hooks is no longer automatic.</p>
<p>One <em>could</em> accomplish this with <code>postinstall</code>, but that brings its own set of headaches. It runs after others have installed your NPM package as one of their dependencies.</p>
<p>At the time of this writing, the Husky documentation encourages an additional <a href="https://npmjs.com/package/pinst">pinst</a> dependency to disable <code>postinstall</code> when distributing an NPM package. That is overkill.</p>
<h3>Prepare (script)</h3>
<p>Instead, we can use the NPM <code>prepare</code> script. Read more in the <a href="https://docs.npmjs.com/cli/v7/using-npm/scripts">NPM docs</a>.</p>
<p>Our <code>prepare.js</code> file runs after <code>npm install</code>, when pulling down dependencies.</p>
<pre class="language-json"><code class="language-json"><span class="token punctuation">{</span><br /> <span class="token property">"scripts"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br /> <span class="token property">"prepare"</span><span class="token operator">:</span> <span class="token string">"node ./scripts/prepare.js"</span><br /> <span class="token punctuation">}</span><span class="token punctuation">,</span><br /> <span class="token property">"lint-staged"</span><span class="token operator">:</span> <span class="token punctuation">{</span><br /> <span class="token property">"*.{css,html,js,json,md,scss}"</span><span class="token operator">:</span> <span class="token string">"prettier --write"</span><br /> <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre>
<p>Unlike <code>postinstall</code>, the <code>prepare</code> command does not run when an NPM package is installed as a dependency in another project.</p>
<p>Meaning, it will <em><strong>not</strong></em> run within a package when someone types this…</p>
<p><code>npm install your-npm-package</code></p>
<p>…to install it for their own project.</p>
<p>But it <em><strong>will</strong></em> run when working on <code>your-npm-package</code> and installing other dependencies locally. This replicates the behavior we had before with v4.</p>
<h3>Prepare (file)</h3>
<p>Our <code>prepare.js</code> file looks like this.</p>
<pre class="language-javascript"><code class="language-javascript"><span class="token comment">// =======</span><br /><span class="token comment">// Import.</span><br /><span class="token comment">// =======</span><br /><br /><span class="token keyword">const</span> <span class="token punctuation">{</span> execSync <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'child_process'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token keyword">const</span> <span class="token punctuation">{</span> existsSync <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token function">require</span><span class="token punctuation">(</span><span class="token string">'fs'</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><br /><span class="token comment">// ===========</span><br /><span class="token comment">// File paths.</span><br /><span class="token comment">// ===========</span><br /><br /><span class="token keyword">const</span> <span class="token constant">FILE_COMMIT</span> <span class="token operator">=</span> <span class="token string">'./.husky/pre-commit'</span><span class="token punctuation">;</span><br /><span class="token keyword">const</span> <span class="token constant">FILE_HUSKY</span> <span class="token operator">=</span> <span class="token string">'./.husky/_/husky.sh'</span><span class="token punctuation">;</span><br /><br /><span class="token comment">// =========</span><br /><span class="token comment">// Commands.</span><br /><span class="token comment">// =========</span><br /><br /><span class="token keyword">const</span> <span class="token constant">CLI_COMMIT</span> <span class="token operator">=</span> <span class="token string">'npx husky add .husky/pre-commit "npx lint-staged"'</span><span class="token punctuation">;</span><br /><span class="token keyword">const</span> <span class="token constant">CLI_HUSKY</span> <span class="token operator">=</span> <span class="token string">'npx husky install'</span><span class="token punctuation">;</span><br /><br /><span class="token comment">// ==============</span><br /><span class="token comment">// Husky install.</span><br /><span class="token comment">// ==============</span><br /><br /><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">existsSync</span><span class="token punctuation">(</span><span class="token constant">FILE_HUSKY</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br /> global<span class="token punctuation">.</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token constant">CLI_HUSKY</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /> <span class="token function">execSync</span><span class="token punctuation">(</span><span class="token constant">CLI_HUSKY</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span><br /><br /><span class="token comment">// ====================</span><br /><span class="token comment">// Add pre-commit hook.</span><br /><span class="token comment">// ====================</span><br /><br /><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token function">existsSync</span><span class="token punctuation">(</span><span class="token constant">FILE_COMMIT</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><br /> global<span class="token punctuation">.</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token constant">CLI_COMMIT</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /> <span class="token function">execSync</span><span class="token punctuation">(</span><span class="token constant">CLI_COMMIT</span><span class="token punctuation">)</span><span class="token punctuation">;</span><br /><span class="token punctuation">}</span></code></pre>
<p>Code within the conditional logic will create <code>.husky/pre-commit</code> if it does not yet exist.</p>
<p>That adds a snippet (instructions for Husky) at the top of the file, and then appends the actual text that we passed in.</p>
<pre class="language-bash"><code class="language-bash"><span class="token shebang important">#!/bin/sh</span><br /><span class="token builtin class-name">.</span> <span class="token string">"<span class="token variable"><span class="token variable">$(</span><span class="token function">dirname</span> <span class="token string">"<span class="token variable">$0</span>"</span><span class="token variable">)</span></span>/_/husky.sh"</span><br /><br />npx lint-staged</code></pre>
<hr />
<h2>Conclusion</h2>
<p>Is it worth the effort to upgrade? Perhaps not. Essentially, we are now back to feature parity with v4. Except that v5 purportedly runs faster.</p>
<p>Being on the latest version does make me feel better, because that is what will come down the wire if we were to type <code>npm install husky</code> anyway. In so doing, we are keeping current with the latest changes and can help clients stay up to date.</p>
<p>I am hopeful that a simpler alternative to Husky will come along eventually, or that v6 will be more similar to v4. Disappointingly, what was once effortless has become needlessly convoluted.</p>
Chromebooks, Linux, and Family Link2021-02-08T00:00:00Zhttps://sonspring.com/journal/chromebooks-linux-family-link/<p>The following is a letter written by my son. He is a 12 year old middle school student.</p>
<p><img src="https://sonspring.com/assets/images/2021-02-08-hudson-with-laptops.jpg" alt="Hudson as an infant, and Hudson in middle school, with laptops" /> <br /> <small>Hudson is no stranger to using laptops</small></p>
<hr />
<p>Dear Google Chrome OS team:</p>
<p>I am writing to express my concerns on the topic of <a href="https://families.google.com/familylink/">Family Link</a> and Linux.</p>
<p>Chromebooks are awesome and amazing products that can be used for many things. But in my opinion, there may be limitations in the way Family Link accounts work.</p>
<p>I installed <a href="https://chromeos.dev/en/linux">Linux (Beta)</a> on my Chromebook a couple of years ago. It worked well and was great. I felt like I had a lot of control over my system.</p>
<p>Then I found <a href="https://chromeunboxed.com/">Chrome Unboxed</a>. I saw some cool and interesting things about Linux. Yet when I went to my Chromebook to try those things out, I realized that Linux was not there. It was as if Linux no longer existed.</p>
<p>No Linux command line, no Linux settings, no Linux.</p>
<p>I have been wondering when I will be able to use to Linux on my Chromebook again. I feel that it is a concern since the <a href="https://opensource.com/business/14/12/linux-philosophy">Linux philosophy</a> is for everyone to have equal access. Also, now I cannot choose the position of my dock. This does not violate any security rules and I feel that it is overprotective.</p>
<p>My main question for you is this: Is Linux on Chrome OS for everyone? Shouldn't everyone have access to Linux? If people do not want Linux, then they need not install it. However, they should be able to make that choice.</p>
<p>I do not have anything against Chromebooks. I have been using them since I was in elementary school. For my first computer, I asked my parents for a Chromebook.</p>
<p>However, lately I have been getting more into Python programming. I have recently made the switch to working on a <a href="https://en.wikipedia.org/wiki/Windows_10">Windows 10</a> laptop instead, because it offers full access to the <a href="https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux">command line</a>.</p>
<p>In my opinion, you could make Chromebooks a lot better by allowing users a choice when it comes to installing Linux on Chrome OS.</p>
<p>Linux is not just for adults, it is for everyone.</p>
<p>Respectfully, <br /> <img alt="" src="https://sonspring.com/assets/images/2021-02-08-hudson-signature.png" width="148" height="52" /> <br /> Hudson Smith</p>