<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Almenon</title>
    <description>The latest articles on DEV Community by Almenon (@almenon).</description>
    <link>https://dev.to/almenon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F100530%2F469a526a-147f-4448-adb7-5fe0945af798.png</url>
      <title>DEV Community: Almenon</title>
      <link>https://dev.to/almenon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/almenon"/>
    <language>en</language>
    <item>
      <title>AREPL Stats 2021</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Sun, 22 May 2022 23:19:55 +0000</pubDate>
      <link>https://dev.to/almenon/arepl-stats-2021-3ko4</link>
      <guid>https://dev.to/almenon/arepl-stats-2021-3ko4</guid>
      <description>&lt;p&gt;See last post for 2019 &lt;a href="https://dev.to/almenon/arepl-stats-2019-lgl"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: AREPL?
&lt;/h3&gt;

&lt;p&gt;Automatic-read-eval-print-loop. It's a real-time python scratchpad, currently one of the top python extensions for VSCode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wqKn8eSH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/Almenon/AREPL-vscode/master/areplDemoGif2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wqKn8eSH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/Almenon/AREPL-vscode/master/areplDemoGif2.gif" alt="" width="880" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How many people use AREPL now?
&lt;/h3&gt;

&lt;p&gt;Roughly 400 daily. Usage is around 530 on weekdays and 350 on weekends. This is FAR more than the previous number (~100). I'm not sure when or how the increased happened, because the number of weekly users is flat currently and I don't have enough historical data. This is very frustrating. A definitive increase in users would prove that AREPL is a good app and my time spent making it was worth it. Without a definitive increase I'm left to question the stats and and whether people truly like AREPL. But I suppose I'm being pessimistic here, I should be celebrating the massive increase. &lt;em&gt;sad toot&lt;/em&gt; 🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: What portion of users are using AREPL for the first time?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XV00cWhJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xtjgvu19iyqox1ee42ol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XV00cWhJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xtjgvu19iyqox1ee42ol.png" alt="Users of AREPL by first use date" width="880" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a graph of people who used AREPL yesterday, sorted by the first use date, the y-axis being total number of uses. As you can by the number of bars on the right, many users just started using AREPL recently. Specifically, 245, or 54%. Then 21 users started yesterday, 11 the day before that, 10, 3, 3, 3, and so on. Basically half the users are new with a long tail towards the left of repeated users.&lt;/p&gt;

&lt;p&gt;I have two takeaways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A very large number of users quit using AREPL right after trying it out. If I take the average number of daily users in the left tail as retained users, and the number of people using AREPL yesterday as new users, then 3/245 = 1% retention rate.&lt;/li&gt;
&lt;li&gt;I have repeated users!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;#2 is great news because repeated uses of my app indicates that it's more than just a novelty - it's something that can actually be useful in day-to-day development or learning. At least for the 1% of retained users, but better something than nothing!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Did you get any media mentions?&lt;/strong&gt;&lt;br&gt;
6 blog posts, &lt;a href="https://twitter.com/Upsurge_11/status/1368592108907470849"&gt;1 tweet&lt;/a&gt;, and 6 videos. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: So you have some stats, but what do users actually think?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Good question. Currently I'm feeling that statistics, while easy to collect, are not giving me the entire picture. Unfortunately user interviews are easier said than done. I've sent out multiple requests but I've hardly gotten any responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some final notes:
&lt;/h3&gt;

&lt;p&gt;Q: Where do I install AREPL?&lt;br&gt;
A: &lt;a href="https://github.com/Almenon/AREPL-vscode"&gt;https://github.com/Almenon/AREPL-vscode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q: How can I add application insights to my own extension?&lt;br&gt;
&lt;a href="https://medium.com/@almenon214/adding-telemetry-to-your-vscode-extension-f3d52d2e573c"&gt;https://medium.com/@almenon214/adding-telemetry-to-your-vscode-extension-f3d52d2e573c&lt;/a&gt;&lt;/p&gt;

</description>
      <category>arepl</category>
      <category>python</category>
      <category>vscode</category>
    </item>
    <item>
      <title>What have you always wanted to see in your CI?</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Fri, 21 Aug 2020 23:20:18 +0000</pubDate>
      <link>https://dev.to/almenon/what-have-you-always-wanted-to-see-in-your-ci-4h7a</link>
      <guid>https://dev.to/almenon/what-have-you-always-wanted-to-see-in-your-ci-4h7a</guid>
      <description>&lt;p&gt;Disclaimer: I'm looking for ideas for the &lt;a href="https://dev.to/devteam/announcing-the-github-actions-hackathon-on-dev-3ljn"&gt;GitHub actions hackathon&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Personally I would love a solution that intelligently figures out which tests need to be run to verify that a code change is safe, rather than just blindly running all of the tests. Some test suites can take &lt;em&gt;ages&lt;/em&gt;. I asked the #python discord channel but people weren't interested. Que lastima!&lt;/p&gt;

&lt;p&gt;What are your ideas?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The near-future of programming</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Wed, 08 Jul 2020 03:04:15 +0000</pubDate>
      <link>https://dev.to/almenon/the-near-future-of-programming-1h5f</link>
      <guid>https://dev.to/almenon/the-near-future-of-programming-1h5f</guid>
      <description>&lt;p&gt;&lt;em&gt;Predictions for the years 2021-2031&lt;/em&gt; 🚀&lt;/p&gt;

&lt;h3&gt;
  
  
  SOFTWARE
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Web
&lt;/h4&gt;

&lt;p&gt;WebAssembly is finalized with easy to use libraries for DOM access. The tyrannical reign of JavaScript is dead. Other compiled languages become popular for making new websites. JavaScript remains a solid contender due to huge amount of packages and documentation already built out, as well as a large community. But due to the increased competition JavaScript has to become more innovative - it starts merging more sorely needed libraries into its featureset. For example, I bet Typescript will become part of JavaScript, or natively supported by browsers&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://meowni.ca/posts/web-components-with-otters/" rel="noopener noreferrer"&gt;Web components&lt;/a&gt; (think easily shareable custom html elements) become popular. They have recently become supported by all browsers so you can already start using them!&lt;/p&gt;

&lt;p&gt;A new frontend framework becomes the new hotness, replacing React. React is still commonly used, but framework X is the first choice people turn to when designing new projects. This framework may use the same react-style intermingling of HTML &amp;amp; CSS within JavaScript. I don't have any specific reasons for this prediction, but I know that frontend tech evolves at a rapid pace. Frameworks can only stay in power for so long.&lt;/p&gt;

&lt;p&gt;Progressive Web Apps become a popular choice for building cross-platform apps that work on desktop and mobile. They already &lt;a href="https://whatwebcando.today/" rel="noopener noreferrer"&gt;support most of the basic native features&lt;/a&gt; and can be published to the play store. Companies &lt;a href="https://www.pwastats.com/" rel="noopener noreferrer"&gt;have had success&lt;/a&gt; with them so it's only a matter of time before they get more popular.&lt;/p&gt;

&lt;h4&gt;
  
  
  General
&lt;/h4&gt;

&lt;p&gt;AI improves, but there is no singularity, to the disappoint of futurists everywhere. AI does not replace human intelligence, but instead complements it. We have already seen this with smart speakers and services like &lt;a href="https://kite.com/" rel="noopener noreferrer"&gt;Kite&lt;/a&gt; or &lt;a href="https://www.tabnine.com/" rel="noopener noreferrer"&gt;Tabnine&lt;/a&gt;. The number of fields AI can be effectively applied to will continue to broaden. Computer Scientist Garrison Price says, "Everyone thought that ML would overtake people in decision making and problem solving. The world is slowly realizing that isn't happening. Human-Machine teaming will be the future. In the short run you'll see ML/AI boosted workflows that allow for people to be more productive and skip the tedium."&lt;/p&gt;

&lt;p&gt;Devops continues to be increasingly automated. Large enterprise companies &lt;em&gt;finally&lt;/em&gt; finish migrating most of their stuff to the cloud. &lt;a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-kubernetes" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; becomes widely popular.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.rust-lang.org/" rel="noopener noreferrer"&gt;Rust&lt;/a&gt;, ironically, gets better over time. More and more people use it over C++ / C.&lt;/p&gt;

&lt;p&gt;Linters become more comprehensive. Linters today fix a few code smells and that's about it. Linters of the future would also catch bad design patterns, overcomplexity, security flaws, and a comprehensive set of code smells and bugs. Basically code quality CI tools would become available as editor integrations.&lt;/p&gt;

&lt;p&gt;Code becomes easier to evaluate on the fly. Live unit testing becomes a popular feature of major editors. Tools for rapid prototyping like &lt;a href="https://github.com/Almenon/AREPL-vscode" rel="noopener noreferrer"&gt;AREPL&lt;/a&gt;, linqpad, &lt;a href="https://repl.it" rel="noopener noreferrer"&gt;repl.it&lt;/a&gt;, jupyter notebook, and &lt;a href="https://github.com/ziishaned/live-php" rel="noopener noreferrer"&gt;live-php&lt;/a&gt; become more popular, although real-time coding remains a novelty. &lt;/p&gt;

&lt;p&gt;Software becomes even more integrated into mission-critical hardware like cars, rockets, planes, and more. As a consequence of that security breaches and bugs can literally be deadly. &lt;/p&gt;

&lt;p&gt;Live OS patching and oauth along with security linting described above result in a safer internet. Security flaws become less common. However, when security flaws do happen they tend to be exploited in big ways. Nation-states go to extreme lengths to create hacks and when they get in they exploit vulnerabilities and privilege escalation to the fullest. Basically, less minor hacks, but the hacks that remain become more serious.&lt;/p&gt;

&lt;p&gt;Half-Life:Alyx proved that major video game publishers can have massive success with VR, in addition to &lt;a href="https://www.roadtovr.com/steam-survey-vr-headset-growth-april-2020-half-life-alyx/" rel="noopener noreferrer"&gt;adding hundreds of thousands of players&lt;/a&gt; to the VR market. Other major game studios decide to jump in on the market, planning triple-A titles for VR. After years in development they are released to massive excitement. Along with VR hardware upgrades this motivates consumers to buy VR, in turn expanding the market for VR software. This creates a feedback loop and a VR software renaissance as it becomes the new hot market similar to mobile apps.&lt;/p&gt;

&lt;p&gt;CGI for the average TV show becomes on par with full-budget movies today. No more uncanny valley effect!&lt;/p&gt;

&lt;p&gt;Python finally settles on a package management framework as pip gets the ability to have fully pinned and isolated dependencies ala npm. Many python packages start typing their code, leading to a python typing renaissance. However, the type system lags behind typescript in terms of features and ease of use.&lt;/p&gt;

&lt;p&gt;A brand new language starts becoming popular. There's so many options here (&lt;a href="https://crystal-lang.org/" rel="noopener noreferrer"&gt;Crystal&lt;/a&gt;, &lt;a href="https://elm-lang.org/" rel="noopener noreferrer"&gt;Elm&lt;/a&gt;, &lt;a href="https://elixir-lang.org/" rel="noopener noreferrer"&gt;Elixir&lt;/a&gt;, &lt;a href="http://skiplang.com/" rel="noopener noreferrer"&gt;Skip&lt;/a&gt;...) there's no way I'm going to guess the right one. I could pick the last thing I read about (&lt;a href="https://vlang.io" rel="noopener noreferrer"&gt;V&lt;/a&gt;), but as long as I'm going to be wrong I might as well be wrong with style! &lt;a href="https://codewithrockstar.com/" rel="noopener noreferrer"&gt;Rockstar&lt;/a&gt; inexplicably becomes popular in the year 2027.&lt;/p&gt;

&lt;h3&gt;
  
  
  HARDWARE
&lt;/h3&gt;

&lt;p&gt;NVM SSD's become commonplace, offering speeds over double of that of regular SSD's. No more video-game loading screens or long waiting times while moving files around! OS boot-times become near-instant as well.&lt;/p&gt;

&lt;p&gt;Quantum Supremacy is conclusively demonstrated&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. Quantum computers scale up past the research stage into commercial products offered as cloud services. They still require near-absolute zero temperatures to operate, so they are beyond the reach of the average consumer. People start moving to styles of cryptography safe from quantum attacks, but some are slow to upgrade and get their secrets stolen by nation-state actors with access to quantum computers that can break many kinds of classical cryptography. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Moore%27s_law" rel="noopener noreferrer"&gt;Moore's law&lt;/a&gt; says that the number of transistors doubles every year. It is already weakening as each jump gets more expensive and miraculous. It sputters and dies on the year 2027, when 2 nanometer chips get released a year later than expected. Improvements are still made, but not at the insane pace described by Moore's law. Eventually one nanometer chips are released, but scaling down further becomes extremely difficult. One nanometer is roughly just ten times the size of an atom - at a certain point you hit a atomic barrier. Unfortunately &lt;a href="https://en.wikipedia.org/wiki/Wirth%27s_law" rel="noopener noreferrer"&gt;Wirth's law&lt;/a&gt; states that many applications will get more bloated as programmers use hardware upgrades as an excuse to be lazy about speed, so don't expect programs to run any faster.&lt;/p&gt;

&lt;p&gt;VR-capable graphics cards become the norm. Also Microsoft finally get its act together and announces a wireless VR headset for the Xbox. With the graphics hardware out of the way millions of consumers finally bite the bullet and buy VR, expanding the customer base for VR software exponentially.&lt;/p&gt;

&lt;p&gt;A AR headset is released for consumers. Although it will remain a novelty this decade next decade will have some exciting changes!&lt;/p&gt;

&lt;h3&gt;
  
  
  SOCIETY
&lt;/h3&gt;

&lt;p&gt;A generation of people who grew up playing minecraft and making mods for it enter the workforce as Java developers. Some convince their elders to transition to &lt;a href="https://kotlinlang.org/" rel="noopener noreferrer"&gt;kotlin&lt;/a&gt;, a increasingly popular alternative.&lt;/p&gt;

&lt;p&gt;VR becomes far more popular due to the changes in hardware and software mentioned above. Old people decry VR as being harmful to youngsters and the moral fabric of society, just as old people have done for every new thing since the dawn of time. In some cases they are right - a few use VR as a way to escape the world around them, staying on for unhealthy periods of time. &lt;/p&gt;

&lt;p&gt;Level 3 Driverless mode for highway driving becomes a standard feature of new cars. Ride-share services start offering fully autonomous (level 5) highway rides. Some cities start to transition their highway bus routes to autonomous vehicles as well. Street driving remains in the research stages. Even in its limited form autonomous driving has a huge effect on society&lt;sup id="fnref3"&gt;3&lt;/sup&gt;. People simply have more time in the day to do things. Transportation becomes cheaper. Traffic accidents decrease. Commuting becomes better. Teenagers without drivers license have an easier time getting around.&lt;/p&gt;

&lt;p&gt;But most importantly, it expands the middle class. People in pedestrian-unfriendly areas (like most of the US) without access to cars gain a lot more freedom and flexibility. They don't have to beg a friend to drive them and can go anywhere the highway takes them. What was previously a hour-long uncomfortable bus ride becomes a time in which they can study or simply destress. Overall this allows millions of people to have a better life and get better jobs.&lt;/p&gt;

&lt;p&gt;A vaccine for coronavirus is released, but working remote is here to stay. Many employees prefer it to avoid a long commute, while managers realize that employees are just as productive, in some cases even more so. Some companies use a flex model where people work remote part of the week and come into the office the other part.&lt;/p&gt;

&lt;p&gt;The number of people in the digital workforce continues to increase worldwide, especially in developing countries. Space-based satellites like &lt;a href="https://en.wikipedia.org/wiki/Starlink" rel="noopener noreferrer"&gt;Starlink&lt;/a&gt; and &lt;a href="https://www.theverge.com/2020/4/22/21231205/alphabet-loon-internet-balloons-commercial-launch-kenya" rel="noopener noreferrer"&gt;Loon balloons&lt;/a&gt; bring internet service even to the most remote of areas. In the cities 5G brings a massive increase in speed to mobile networks. With more people online, managers in developed countries have a larger talent pool to draw from when outsourcing. So when remote workers in the US call for crazy things like 'liveable wages' or 'benefits' managers start outsourcing from the cheaper international talent pool. Countries like Ghana or &lt;a href="https://medium.com/outsourceglobal/making-nigeria-a-premier-outsourcing-destination-a-chat-with-amal-hassan-ceo-of-outsource-global-776c39c125b1" rel="noopener noreferrer"&gt;Nigeria&lt;/a&gt;, with a large english speaking population, could become outsourcing hotspots like India.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2F2%2F29%2FInternet_users_per_100_inhabitants_ITU.svg%2F1280px-Internet_users_per_100_inhabitants_ITU.svg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2F2%2F29%2FInternet_users_per_100_inhabitants_ITU.svg%2F1280px-Internet_users_per_100_inhabitants_ITU.svg.png" alt="Global internet usage"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;As you can see above the percentage of internet users increases over time and has a lot of room to grow.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This also applies to programmers. The percentage of programmers outsourced in the US will increase. However, time zone issues, culture issues, and the square mile of paperwork required remains a significant problem. Most companies will continue to hire within their own countries.&lt;/p&gt;

&lt;p&gt;Gender Ratio in Tech: Without a significant change in the media and cultural perception of programmers, the percentage of women in computer science in the US remains extremely low. The patriarchy is too entrenched into computer science to be easily removed. It would take some sort of major push to completely change the dynamics, not anything I could easily predict. Maybe a great work of media (like Lord of the Rings or Harry Potter) has a female programmer protagonist, leading to more female programmers in the media and encouraging more women to join the field? Or maybe programming becomes a basic skill taught in schools such that all genders are equally exposed to it? Or a cyberwar leads to a massive push on all genders being recruited as programmers for more recruits? I'm spitballing here.&lt;/p&gt;

&lt;h2&gt;
  
  
  FUNZONE
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;I started writing this article before 2020, so some of my predictions have already turned out incorrect, or correct for a quite different reason than intended:&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The rise of international programmers makes remote workers more attractive to corporations ... Company culture regarding remote work changes too - formerly strict office-only corporations allow people to work from home sometimes. This is a much needed change for office workers with hour-long commutes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;✔️ &lt;em&gt;Coronavirus already did this one for me, making remote work the norm&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not to be outdone by valve's announcement of Half-Life:Alyx for VR, other major game studios release triple-A titles on VR.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;❌ &lt;em&gt;No triple-A games were released right after HL:A. This makes sense - it takes years to develop such videogames.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tools for rapid prototyping like &lt;a href="https://github.com/Almenon/AREPL-vscode" rel="noopener noreferrer"&gt;AREPL&lt;/a&gt;, linqpad, &lt;a href="https://repl.it" rel="noopener noreferrer"&gt;repl.it&lt;/a&gt;, jupyter notebook, and &lt;a href="https://github.com/ziishaned/live-php" rel="noopener noreferrer"&gt;live-php&lt;/a&gt; become commonly used. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;❓ Could still be right but I doubt it. At least not AREPL - it's user growth has stagnated and I am pessimistic about its future.&lt;/p&gt;







&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;I could be wrong about this. I have a pro-typescript bias and when the question was asked &lt;a href="https://www.reddit.com/r/typescript/comments/bbnbyf/will_typescript_eventually_be_obselete_with/" rel="noopener noreferrer"&gt;here&lt;/a&gt; people did not think it would happen. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Google claims to have already demonstrated it, but &lt;a href="https://www.ibm.com/blogs/research/2019/10/on-quantum-supremacy/" rel="noopener noreferrer"&gt;IBM disputed this claim&lt;/a&gt;. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;I'm dreaming big here. Maybe street driving is required for a large effect, not just highway driving. Either way I'm looking forward to it. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>futurism</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>AREPL stats 2019</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Mon, 09 Mar 2020 03:43:24 +0000</pubDate>
      <link>https://dev.to/almenon/arepl-stats-2019-lgl</link>
      <guid>https://dev.to/almenon/arepl-stats-2019-lgl</guid>
      <description>&lt;p&gt;See last post for 2018 &lt;a href="https://dev.to/almenon/arepl-stats-for-2018-hon"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: AREPL?
&lt;/h3&gt;

&lt;p&gt;Automatic-read-eval-print-loop. It's a real-time python scratchpad, currently one of the top python extensions for VSCode.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FAlmenon%2FAREPL-vscode%2Fmaster%2FareplDemoGif2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FAlmenon%2FAREPL-vscode%2Fmaster%2FareplDemoGif2.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How many people use AREPL now?
&lt;/h3&gt;

&lt;p&gt;Around 140 a week. Adding a button to activate arepl about doubled the amount of uses. It's easier to remember that AREPL exists when there's a button for it rather than a command you have to memorize.&lt;/p&gt;

&lt;p&gt;Unfortunately the number of AREPL users is not going up. The fact that is staying constant indicates that AREPL simply isn't good enough to retain users. It's hard to pinpoint the exact cause. I created a survey but that didn't help much.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FrslPVlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FrslPVlg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Only one answer is any good. The next question is more helpful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FOCU5YYv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FOCU5YYv.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm surprised so many people want better display of variable attributes. I thought inline display would be more popular. I should note that inline and variable display were the only two listed categories - there was the option to write in but most people chose a pre existing category. I should've had more categories to choose from. I've categorized all my enhancement issues and updated the survey with the new categories, so I should get better data going forward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: What nationality are the users?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FzJcsGqf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FzJcsGqf.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The chart has changed a lot since last year. China used to be the majority of the users but the US has overtaken it with twice as many users as China. Japan and India also increased, in second and third place respectively. UK, the former #3, fell all the way down to #7. I'm presuming the more users I get the more the chart will resemble a chart of number of internet users by country as the numbers even out. Some positions are odd however. For example, why is japan so high? In &lt;a href="https://www.benfrederickson.com/github-developer-locations" rel="noopener noreferrer"&gt;https://www.benfrederickson.com/github-developer-locations&lt;/a&gt; they are #11. Maybe Japanese developers use VSCode and python more than other developers?&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: How often does a person use AREPL each week?
&lt;/h3&gt;

&lt;p&gt;728 users total this past week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heavy users&lt;/strong&gt;: 37 (5.1%) have used it ten or more times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Light users&lt;/strong&gt;: 304 (41.8%) have used it two to ten times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Once only users&lt;/strong&gt;: 387 (53.2%) have used it only once.&lt;/p&gt;

&lt;p&gt;My sentence from &lt;a href="https://dev.to/almenon/arepl-stats-for-2018-hon"&gt;last year&lt;/a&gt; came true!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"AREPL in 2018 was still very buggy — I’m hoping to see a rise in % heavy users with my bugfixes in 2019."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hopefully the percentage will continue to rise.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Any new uses of Application Insights?
&lt;/h3&gt;

&lt;p&gt;Microsoft introduced a cool new feature to application insights called "Smart Diagnostics". Using machine learning they automatically identify unique patterns in the data. For example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnvff7hugxxy796xj3ejm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fnvff7hugxxy796xj3ejm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see there is a mysterious decrease in the number of times AREPL was opened. Clicking on the first highlighted column automatically opens up the following query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// The following pattern may explain the data discrepancy:
// application_Version = 1.0.8
customEvents | where timestamp &amp;lt; now()  and name=="almenon.arepl/closed"
| extend DiagnosticsResults = iff(application_Version == "1.0.8", 'with pattern', 'without pattern' )
| summarize opens=dcount(cloud_RoleInstance) by DiagnosticsResults,  bin(timestamp, 1day) | render timechart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fybb6wqzl8hmjpapvao7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fybb6wqzl8hmjpapvao7w.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you can see that the number of version 1.0.8 opens went down drastically and then stopped. This indicates a new release. If we change the query to look for 1.0.9, we get this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ff3ck1ncoaenhf80hdkds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ff3ck1ncoaenhf80hdkds.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So there were a few opens of version 1.0.9, but hardly any at all compared to before. What gives? Well, I took a look at the &lt;a href="https://github.com/Almenon/AREPL-vscode/milestone/28" rel="noopener noreferrer"&gt;1.0.10 release&lt;/a&gt; and found out (I had totally forgotten) that the 1.0.9 release &lt;a href="https://github.com/Almenon/AREPL-vscode/issues/190" rel="noopener noreferrer"&gt;broke telemetry&lt;/a&gt;. That explains that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Any improvements to privacy within telemetry?:
&lt;/h3&gt;

&lt;p&gt;My code now obfuscates usernames&lt;sup id="fnref1"&gt;1&lt;/sup&gt;!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;TypeError: Cannot read property 'setDecorations' of undefined  at PreviewContainer.updateErrorGutterIcons (c:\Users\&lt;strong&gt;anon&lt;/strong&gt;\.vscode\extensions\almenon.arepl-1.0.10\out\src\previewContainer.js:94:44)  at PreviewContainer.handleResult&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I made a PR to add this to the Microsoft telemetry extension but unfortunately it &lt;a href="https://github.com/microsoft/vscode-extension-telemetry/pull/32" rel="noopener noreferrer"&gt;got rejected&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Q: Did you get any media mentions?
&lt;/h3&gt;

&lt;p&gt;Yep! 🎉&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://jaxenter.com/visual-studio-code-python-arepl-159032.html" rel="noopener noreferrer"&gt;One interview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Six tweets with arepl hashtag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mbalslow.com/blog/article/how-to-use-arepl-in-vscode-for-python-evaluation/" rel="noopener noreferrer"&gt;one tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@yemreak/vscode-%C3%BCzerinde-python-d57aed06839" rel="noopener noreferrer"&gt;one mention in a blog post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Some final notes:
&lt;/h3&gt;

&lt;p&gt;Q: Where do I install AREPL?&lt;br&gt;
A: &lt;a href="https://github.com/Almenon/AREPL-vscode" rel="noopener noreferrer"&gt;https://github.com/Almenon/AREPL-vscode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q: How can I add application insights to my own extension?&lt;br&gt;
&lt;a href="https://medium.com/@almenon214/adding-telemetry-to-your-vscode-extension-f3d52d2e573c" rel="noopener noreferrer"&gt;https://medium.com/@almenon214/adding-telemetry-to-your-vscode-extension-f3d52d2e573c&lt;/a&gt;&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;mostly. There are a few events that still have names but I have no idea why. :/ ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>python</category>
      <category>vscode</category>
      <category>datascience</category>
      <category>applicationinsights</category>
    </item>
    <item>
      <title>Fixing Dev.to's scrollbar bug with a single line of code</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Fri, 04 Oct 2019 23:12:52 +0000</pubDate>
      <link>https://dev.to/almenon/fixing-dev-to-s-scrollbar-bug-with-a-single-line-of-code-4f8l</link>
      <guid>https://dev.to/almenon/fixing-dev-to-s-scrollbar-bug-with-a-single-line-of-code-4f8l</guid>
      <description>&lt;p&gt;So many articles are written after the fact, and the author either forgets or takes for granted the jumps in logic they made. This article was written as I solved the problem, before I even knew I &lt;em&gt;could&lt;/em&gt; solve the problem. I hope this gives you a better insight into the bug fixing process, from the very beginning to the very end. Without further ado:&lt;/p&gt;

&lt;p&gt;=====================================&lt;/p&gt;

&lt;p&gt;I was editing &lt;a href="https://dev.to/almenon/the-popup-killer-from-hell-4708"&gt;my article&lt;/a&gt; when I noticed an &lt;em&gt;extremely&lt;/em&gt; annoying thing - each character I typed caused a scrollbar to appear and dissapear. My first instinct was to open up the dev console to inspect it, whereupon I was greeted by this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-oooooooo/-      .+ooooooooo:  +ooo+        oooo/
+MMMMMMMMMMm+   -NMMMMMMMMMMs  +MMMM:      /MMMM/
+MMMNyyydMMMMy  /MMMMyyyyyyy/   mMMMd      mMMMd
+MMMm    :MMMM. /MMMN           /MMMM/    /MMMM:
+MMMm    .MMMM- /MMMN            dMMMm    mMMMh
+MMMm    .MMMM- /MMMMyyyy+       :MMMM/  +MMMM-
+MMMm    .MMMM- /MMMMMMMMy        hMMMm  NMMMy
+MMMm    .MMMM- /MMMMoooo:        -MMMM+oMMMM-
+MMMm    .MMMM- /MMMN              yMMMmNMMMy
+MMMm    +MMMM. /MMMN              .MMMMMMMM.
+MMMMdddNMMMMo  /MMMMddddddd+       sMMMMMMs
+MMMMMMMMMNh:   .mMMMMMMMMMMs        yMMMMs
.///////:-        -/////////-         .::.

Hey there! Interested in the code behind dev.to? Well you're in luck - we're open source! Come say hi, tell us what you're debugging, or even lend a hand in our repo - https://github.com/thepracticaldev/dev.to
Did you find a bug or vulnerability? Check out our bug bounty info here: https://dev.to/security
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I was pleasantly surprised they had a security bug bounty. I proceeded to get &lt;a href="https://dev.to/almenon/down-the-rabbit-hole-1cp7"&gt;sidetracked&lt;/a&gt; looking into the bounty program. Then I remembered I had a issue to solve.&lt;/p&gt;

&lt;p&gt;I opened up the repo and searched "scrollbar" in their issues. I came across &lt;a href="https://github.com/thepracticaldev/dev.to/issues/3330"&gt;https://github.com/thepracticaldev/dev.to/issues/3330&lt;/a&gt; which described the exact issue I experienced. Oddly enough it only had one user who reported it - it must be somewhat rare. Or people don't know to go to github to report the issue. My experience with creating &lt;a href="https://github.com/Almenon/AREPL-vscode" rel="noopener noreferrer"&gt;AREPL&lt;/a&gt; has taught me that for every issue people bother to report, according to telemetry it's probably happened multiple times already.&lt;/p&gt;

&lt;p&gt;After confirming that it's a reported issue (with a help wanted label!) I went back to the dev tools. I noticed that the textarea's height style was changing each time I typed.&lt;/p&gt;

&lt;p&gt;Before: (no scrollbar)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"height: 968px;"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"articleform__body"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"article_body_markdown"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Body Markdown"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"body_markdown"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After: (scrollbar)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"height: 924px;"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"articleform__body"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"article_body_markdown"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Body Markdown"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"body_markdown"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes sense - the scrollbar only appears when there's not enough height to display everything. But why was the height changing? I wasn't entering a new line, I was just adding a character to an existing line. Odd. &lt;/p&gt;

&lt;p&gt;In the middle of this I had a sudden realization - I could write an article about this! It would serve as a good way to track my thoughts as I solved the issue. The downside is there's no turning back now - If I fail to solve this I'll have a  ...&lt;/p&gt;

&lt;p&gt;WAIT! Holy crap - I just got the exact same bug:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Ff9xnKIC.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Ff9xnKIC.gif" alt="demo of error"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;horrible yellow courtesy of &lt;a href="https://justgetflux.com/" rel="noopener noreferrer"&gt;flux&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm forced to resort to writing this on notepad for the time being. I guess the silver lining is that I can reproduce the issue. I took the following paragraph and pasted it into a new draft. And ... huh. Problem didn't appear there. Then I remembered that according to the issue report it only happens when there is a certain amount of lines. So I added 21 lines before it and I got the problem again 🐛!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fkgmw9w085ods822sky3k.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fkgmw9w085ods822sky3k.gif" alt="demo of error"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next question is if it happens after a certain number of lines why doesn't everyone run into this issue? Is there a unspoken agreement among dev.to writers not to go above 21 lines ala twitter's character limit? I highly doubt it. There must be something I'm missing. Maybe something related to the text I'm typing.&lt;/p&gt;

&lt;p&gt;After playing around with the text for a bit, I found out that if I delete "I'll have a  " on the line &lt;code&gt;The downside is there's no turning back now - If I fail to solve this I'll have a&lt;/code&gt; then the problem doesn't appear anymore. The problem only appears when the line goes over the width of the draft.  &lt;/p&gt;

&lt;p&gt;Now I should be able to create a minimal reproducible example. I opened up a new draft, typed out aaa.... untill it overflowed the line, then added 21 lines. No error 🤔.&lt;/p&gt;

&lt;p&gt;I fiddled around with the end a bit more and discovered that the error ONLY happens in the &lt;em&gt;very&lt;/em&gt; specific scenario where you go over the draft width with space. Any normal character will simply go onto the next line, but you can add as many spaces to an existing line as you wish.&lt;/p&gt;

&lt;p&gt;So now I can reproduce it, which is half the battle. Time for debugging!&lt;/p&gt;

&lt;p&gt;But before that I want to check something - I noticed in the settings that I am using the V1 editor. Will the problem still appear in the V2 editor?&lt;/p&gt;

&lt;p&gt;No. The problem does not appear there.&lt;br&gt;
And it's worse than I thought - new users default to the v2 editor, so this problem only affects old farts like me, and only a subset of grandpas at that.&lt;/p&gt;

&lt;p&gt;Well, this was a waste of time. :|&lt;/p&gt;

&lt;p&gt;On the bright side I can comment in the issue with the solution (switch to v2 editor), so that should help some folks out. And just for the sake of my pride, I'll spend 10 minutes trying to see how I could fix the issue. Starting now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fe87z3iqba9m2vu9jaizu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fe87z3iqba9m2vu9jaizu.jpg" alt="Eleven minutes later"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So it turns out the issue STILL happens with the v2 editor, so it's a good thing I checked again. It's just that in the v2 editor when your spaces go over the draft width your cursor stays at the same spot, so it looks like everything is working. But with some fiddling you can still reproduce the error.&lt;/p&gt;

&lt;p&gt;So now let's get to debugging.&lt;br&gt;
&lt;em&gt;Finally, you say!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I set a breakpoint for attribute modifications of the textarea element. I edited the element, which caused the height change, which caused the code to stop on the  breakpoint. Unfortunately the file was blank, so I couldn't see the code it was stopped at. But I looked at the stacktrace and could see that in there was a file called &lt;code&gt;TextareaAutosize.js&lt;/code&gt;, in a folder called &lt;code&gt;preact-textarea-autosize&lt;/code&gt;, inside &lt;code&gt;node_modules&lt;/code&gt;. So dev.to is using a &lt;a href="https://preactjs.com/" rel="noopener noreferrer"&gt;preact&lt;/a&gt; (variant of react) package for their textarea implementation.  Googling it led me to &lt;a href="https://github.com/DisplaySweet/preact-textarea-autosize" rel="noopener noreferrer"&gt;https://github.com/DisplaySweet/preact-textarea-autosize&lt;/a&gt; which 404's. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;sigh&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I went to the next link - the npm package: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.npmjs.com/package/preact-textarea-autosize" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/preact-textarea-autosize&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The repository link leads to &lt;a href="https://github.com/evenius/react-textarea-autosize" rel="noopener noreferrer"&gt;https://github.com/evenius/react-textarea-autosize&lt;/a&gt;, which hasn't been updated in over two years and has no section for issues. Great. However, it is forked from a &lt;a href="https://github.com/andreypopp/react-textarea-autosize" rel="noopener noreferrer"&gt;more popular repo&lt;/a&gt; that does have issues and a demo site. I searched the issues but didn't find my scrollbar problem reported there. I went to the &lt;a href="https://andreypopp.com/react-textarea-autosize" rel="noopener noreferrer"&gt;demo site&lt;/a&gt;, and HOW ABOUT THAT, you can reproduce the problem in their demo site! So the issue might not be with dev.to code - it could be with how they are calling the library or an internal library issue. &lt;/p&gt;

&lt;p&gt;At this point it's 1am so I went to bed. Sleep is healthy, y'all.&lt;/p&gt;

&lt;p&gt;Me, ready to sleep:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fh8yz6ev4ej87x50p247c.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fh8yz6ev4ej87x50p247c.jpg" alt="Pugs, somehow both the cutest and ugliest animals on earth:"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next day I finished a long day of work at &lt;a href="https://www.15five.com/" rel="noopener noreferrer"&gt;15Five&lt;/a&gt;, read about 100 pages of &lt;a href="https://www.goodreads.com/book/show/28954189-scythe" rel="noopener noreferrer"&gt;Scythe&lt;/a&gt;, and got back to work. I wrote up what I did yesterday, and in the process found &lt;em&gt;another&lt;/em&gt; react textarea package called &lt;code&gt;react-autosize-textarea&lt;/code&gt;. (not to be confused with &lt;code&gt;react-textarea-autosize&lt;/code&gt;). &lt;em&gt;HOW MANY OF THEM ARE THERE??&lt;/em&gt; Even though the textarea script on dev.to was showing up blank, I noticed it was source-mapped from a bundled file, so I clicked on the tiny {} in the bottom left to pretty print it, searched for code matching a recent commit in the library, and confirmed that I was looking at the right one. Whew. It's been a hour, but now I can finally start debugging. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Weren't you going to do that already?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;errr, yeah. Anyways:&lt;/p&gt;

&lt;p&gt;I started off with trying to debug the bundled minified code, which was a absolute nightmare. I quickly did the sensible thing - gave up, cloned the repo, and made a reproducible example with code I could easily debug.&lt;/p&gt;

&lt;p&gt;Or at least that's what I &lt;em&gt;should&lt;/em&gt; have done. I went back to trying to debug the bundled code for the next hour.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fw8fuhgex5ht4072bjc96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fw8fuhgex5ht4072bjc96.png" alt="Yikes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fun fact: see that line where the breakpoint is, &lt;code&gt;m=1/0&lt;/code&gt;? That corresponds to this &lt;a href="https://github.com/evenius/react-textarea-autosize/blob/9e8b77e15957a3e15e88a30b7b006646caa32e41/src/calculateNodeHeight.js#L60" rel="noopener noreferrer"&gt;line&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;let maxHeight = Infinity;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You read that correctly, in Javascript 1/0 evaluates to infinity! And if you really want to be baffled, try executing this line in the console (press f12 to access):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"b" + "a" + +"a" + "a"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The output is baNaNa. I mean, duh. What else were you expecting&lt;a href="https://en.wikipedia.org/wiki/Irony_punctuation" rel="noopener noreferrer"&gt;⸮&lt;/a&gt;. But anyways, Javascript WTF's is a entire book of it's own&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. Let's get back on track.&lt;/p&gt;

&lt;p&gt;I assumed the code was setting the height every other character, but it appears to be something else. When &lt;code&gt;calculateNodeHeight&lt;/code&gt; is executed the textarea &lt;em&gt;already&lt;/em&gt; has a different height. I'm guessing it's something to do in combination with how the native textarea works and the constraining html. The mystery deepens...&lt;/p&gt;

&lt;p&gt;I tried comparing the two textarea objects in &lt;a href="https://winmerge.org" rel="noopener noreferrer"&gt;Winmerge&lt;/a&gt; but didn't notice anything fishy.&lt;/p&gt;

&lt;p&gt;If this is a html issue it's time to get educated. I read through &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight&lt;/a&gt;. Then I had a realization: &lt;em&gt;why even bother with scrollbars in the first place?&lt;/em&gt; The browser already has a scrollbar at the edge of the screen. &lt;code&gt;react-textarea-autosize&lt;/code&gt; already expands the textarea to a infinite length&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. The scrollbar is entirely unnecessary. &lt;/p&gt;

&lt;p&gt;So I googled for "disable scrollbar" and came across this &lt;a href="https://csstricks.com/forums/topic/disable-scrollbar-in-body" rel="noopener noreferrer"&gt;forumn post&lt;/a&gt; which reccomended the css style &lt;code&gt;overflow:hidden&lt;/code&gt;. &lt;code&gt;hidden&lt;/code&gt; disables scrollbars - you can read more about &lt;code&gt;overflow&lt;/code&gt; options &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/overflow" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Applying it to the textarea style got rid of the issue! 🎉&lt;/p&gt;

&lt;p&gt;Next I experimented with different page layouts - does it still work with half-window width? Quarter window? Mobile? Ipad? The answer was yes, yes, yes, and yes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fub3sowi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fub3sowi.png"&gt;&lt;/a&gt;&lt;br&gt;
Thanks to this lovely feature of the chrome devtools I was able to test all the mobile layouts from my laptop without even needing a phone.&lt;/p&gt;

&lt;p&gt;Now comes different browsers. I put it in Internet Explorer and to my horror the page didn't have any scrollbars, meaning the textarea &lt;strong&gt;had&lt;/strong&gt; to have scrollbars! My plan was ruined! CURSE YOU IE!&lt;sup id="fnref3"&gt;3&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;But then I noticed that the page didn't even have a "save changes" button - it was already totally broken and I didn't have to worry about supporting IE. Bullet dodged.&lt;/p&gt;

&lt;p&gt;Then I tried edge. I entered in about 19 lines, but then the vertical scrollbar started flashing randomly when I typed in new lines. Woah. You could also type inside the footer on the bottom - you can even see the cursor in there. So edge is already pretty buggy (why am I not surprised). Adding &lt;code&gt;overflow:hidden&lt;/code&gt; fixed the vertical scrollbar problem and didn't cause any other problems to pop up elsewhere.&lt;/p&gt;

&lt;p&gt;Finally I tried Firefox. The problem didn't even appear in firefox without the fix, way to go Firefox!&lt;/p&gt;

&lt;p&gt;Now that I confirmed the fix worked I created a &lt;a href="https://github.com/thepracticaldev/dev.to/pull/3897"&gt;PR&lt;/a&gt;. No need to even open a editor for this - I just went to &lt;code&gt;https://github.com/thepracticaldev/dev.to/blob/master/app/assets/stylesheets/preact/article-form.scss&lt;/code&gt;, clicked on the edit pencil, made my change, and commited it. Github automatically created the forked repo - from there I clicked Create Pull request, filled in a short template describing the change, and I was done!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F13080965%2F64088531-bd368a00-ccf6-11e9-9098-c7313c60b142.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F13080965%2F64088531-bd368a00-ccf6-11e9-9098-c7313c60b142.gif" alt="woman spinning in joy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, not quite. The reviewer had a comment (reviewers always do) requesting before/after images. With &lt;a href="https://getsharex.com" rel="noopener noreferrer"&gt;ShareX&lt;/a&gt; this was quite simple to provide. A couple days later, my PR was merged!&lt;/p&gt;

&lt;p&gt;You can check it out yourself - &lt;a href="https://dev.to/new"&gt;create a new article&lt;/a&gt;, right click the textarea and click inspect elemnt, and under &lt;code&gt;.articleform__body&lt;/code&gt; there's a single line of css, &lt;code&gt;overflow: hidden&lt;/code&gt; that prevents the scrollbar from appearing 🎉&lt;/p&gt;

&lt;p&gt;So, what can we take from this?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bugs can be solved in surprising ways. You should keep your eyes open for workarounds, shortcuts, and other novel ways to entirely bypass the problem. This is NOT an excuse for dirty unreadable hacks. (lookin at you regex, love you honey but you got some problems) Remember that &lt;a href="https://en.wikiquote.org/wiki/Donald_Knuth" rel="noopener noreferrer"&gt;premature optimization is the root of all evil&lt;/a&gt; and that you will be reading your own code far more than writing it.&lt;/li&gt;
&lt;li&gt;You don't need any fancy knowledge of algorithms or expensive macbooks to get into open source. All you need is a web browser. With the advances of software like &lt;a href="https://repl.it" rel="noopener noreferrer"&gt;repl.it&lt;/a&gt; and others practically everything can be done in the cloud. You can use all your free hardware space for sexy pictures of cucumbers (no judgement)&lt;/li&gt;
&lt;li&gt;More companies should open-source their code. You get free contributions and free PR. In some cases contributors can become employees, saving you &lt;em&gt;thousands&lt;/em&gt; in hiring costs. Finally open-sourcing gets rid of the false sense of security created by "&lt;a href="https://stackoverflow.com/questions/533965/why-is-security-through-obscurity-a-bad-idea" rel="noopener noreferrer"&gt;security through obscurity&lt;/a&gt;"&lt;sup id="fnref4"&gt;4&lt;/sup&gt; - by open-sourcing you &lt;em&gt;HAVE&lt;/em&gt; to keep secure for fear of someone seeing your code. Even though in practice only a few people will bother looking for vulnerabilities and most of them will probably be security researchers or bounty hunters. You DO have a &lt;a href="https://dev.to/security"&gt;security bounty&lt;/a&gt;, right?&lt;/li&gt;
&lt;li&gt;Most of the work in fixing a bug comes from reproducing it, finding out why it's happening, finding a fix, and testing the fix. Coding is a suprisingly small part.&lt;/li&gt;
&lt;li&gt;When you run into a problem, try to find an associated github repo and report the problem to the maintainers. Just by including detailed reproduction steps you're doing them a massive favor&lt;sup id="fnref5"&gt;5&lt;/sup&gt;, and sometimes the mere act of researching the problem leads you to discover a workaround or solution (or that you're a idiot doing something stupid). Last of all, if the code is open source, fixing it is a possibility! It just takes some hard work 🔨.&lt;/li&gt;
&lt;/ol&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;see &lt;a href="https://github.com/denysdovhan/wtfjs" rel="noopener noreferrer"&gt;https://github.com/denysdovhan/wtfjs&lt;/a&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;If you wana get technical, you'll "only" be able to go down a couple billion lines before you run out of memory. With utf-8 encoding each ASCII character is a byte so 4 gigabytes of ram is enough to hold 4 billion characters. The more you know! ~~~ ⭐ ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;I was trying to find a picture for this and came across this &lt;a href="https://img.memecdn.com/ie-sucks_o_218605.webp" rel="noopener noreferrer"&gt;glorious vintage meme&lt;/a&gt;. It was so wonderfully terrible I almost had to include it. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;Note that obscurity is fine as a defense in depth measure, you just shouldn't rely on it. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;A good bug report has 5 parts: A. summary B. reproduction steps C. expected result D. actual result E. current settings (ex: windows,chrome) and if you're really going for gold F. pictures/video of the problem. A report like this will make developers sing your praises to the high heavens 😇. Most issues only have a badly written part A. and it can be frustrating to even understand what's going on. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>meta</category>
    </item>
    <item>
      <title>The popup killer from hell</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Sat, 07 Sep 2019 00:11:47 +0000</pubDate>
      <link>https://dev.to/almenon/the-popup-killer-from-hell-4708</link>
      <guid>https://dev.to/almenon/the-popup-killer-from-hell-4708</guid>
      <description>&lt;p&gt;Back when I worked at my first programming job, we had a distinct lack of unit tests in our legacy codebase. Every change had to go by QA, because even a single line change could ruin everyone's day. In an attempt to fix this management hired an automation engineer to write a gigantic automation suite. They used Ranorex to automate mouse clicks like a real human user - click on this button, then that, scroll down, click here, etc.  Unfortunately Ranorex frequently failed for bizarre hard-to-debug reasons. Sometimes it would fail to find an element that was staring it in its face. Other times it would simply fail because why not? &lt;/p&gt;

&lt;p&gt;Popups were one such cause of failure. Ranorex would be happily moving the mouse, when BOOM - popup. With the popup covering up the application or demanding focus ranorex would simply fail. My coworker blamed IT for causing the popups, but eventually got tired of navigating IT bureaucracy and decided to go nuclear on the problem - he made a script that would kill EVERYTHING except for a few whitelisted processes.&lt;/p&gt;

&lt;p&gt;I'll leave you a few seconds to think about how this could go wrong.....&lt;/p&gt;

&lt;p&gt;So one day I started debugging the automation and everything except Visual Studio suddenly died. I stared at the screen in horror&lt;sup id="fnref1"&gt;1&lt;/sup&gt;. What on earth happened? Then I realized - &lt;em&gt;the popup killer!&lt;/em&gt; Of course! It launched in a seperate process and because I stopped debugging in the middle of the run the class cleanup was skipped. &lt;/p&gt;

&lt;p&gt;Well, no matter. I would fix it but in the meantime I'd just reopen up chrome... it closed. I reopened chrome again, it closed again. Click close Click close. I tried opening up notepad. Same thing. Oh god. I tried opening the task manager and it was murdered right before my eyes. But I was able to open up the command line. I ran &lt;code&gt;tasklist&lt;/code&gt; to find the popup killer process followed by &lt;code&gt;taskkill&lt;/code&gt; to kill it but taskill itself was killed before it could even run! &lt;/p&gt;

&lt;p&gt;Things were looking grim. &lt;/p&gt;

&lt;p&gt;The class cleanup code killed the process by creating a file called &lt;code&gt;killthekiller&lt;/code&gt;. The popup killer looked for this and committed suicide when it saw it. But for some reason when i created the file nothing happened. As a final resort I tried using C# code in Visual Studio's &lt;a href="https://docs.microsoft.com/en-us/visualstudio/ide/reference/immediate-window?view=vs-2019"&gt;immediate window&lt;/a&gt;. This didn't work either - I don't remember why. Now I was &lt;strong&gt;totally&lt;/strong&gt; screwed. I had to restart the computer.&lt;/p&gt;

&lt;p&gt;💀💀💀💀💀💀💀💀💀💀💀💀💀💀&lt;/p&gt;

&lt;p&gt;After restarting, I made some changes to the code. I put all sorts of programs in the whitelist and I changed the class cleanup to directly kill the process. The problem was fixed. But the memory of it will remain scarred into my brain.&lt;/p&gt;

&lt;p&gt;I now work for &lt;a href="https://www.15five.com"&gt;15Five&lt;/a&gt;. We have a comprehensive unit test suite growing in coverage each month. Besides the occasional timezone issue tests are pretty stable. Sometimes I miss my old coworkers. But let me tell you: I do NOT miss Ranorex.&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;To be honest, this was about a year ago and I don't quite remember how I reacted. I'm using artistic license &lt;code&gt;¯\_(ツ)_/¯&lt;/code&gt; ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>automation</category>
      <category>testing</category>
      <category>codinghorror</category>
      <category>ranorex</category>
    </item>
    <item>
      <title>Down the rabbit hole</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Fri, 06 Sep 2019 04:03:40 +0000</pubDate>
      <link>https://dev.to/almenon/down-the-rabbit-hole-1cp7</link>
      <guid>https://dev.to/almenon/down-the-rabbit-hole-1cp7</guid>
      <description>&lt;p&gt;In my post &lt;a href="https://dev.to/almenon/keeping-yourself-motivated-as-acoder-5cah"&gt;Keeping yourself motivated&lt;/a&gt; I mentioned that programming is one of the most distracting jobs in existence. Recently&lt;sup id="fnref1"&gt;1&lt;/sup&gt; I ran into a concrete example of that. After a long day of work I went home, suffering from a cold and a inflamed nose, but being the industrious person I am, as soon as I got home I s̶a̶t̶ ̶o̶n̶ ̶t̶h̶e̶ ̶c̶o̶u̶c̶h̶ ̶f̶e̶e̶l̶i̶n̶g̶ ̶t̶e̶r̶r̶i̶b̶l̶e̶ ̶a̶n̶d̶ ̶w̶a̶t̶c̶h̶i̶n̶g̶ ̶a̶n̶i̶m̶e̶ ̶started programming. I was experimenting with using &lt;a href="https://pysimplegui.readthedocs.io" rel="noopener noreferrer"&gt;pysimpleGui&lt;/a&gt;, a increadibly easy to use gui library based on tkinter, in &lt;a href="https://github.com/Almenon/AREPL-vscode" rel="noopener noreferrer"&gt;arepl&lt;/a&gt;. It was working great - the simplicity of use paired well with arepl's real-time evaluation. Making a gui had never been this easy. &lt;/p&gt;

&lt;p&gt;Until I got an &lt;a href="https://github.com/PySimpleGUI/PySimpleGUI/issues/496#issuecomment-430480930" rel="noopener noreferrer"&gt;error&lt;/a&gt;, that is. No big deal - I reported it to the github page, and he quickly responded. I continued reading the documentation and noticed it mentioned &lt;a href="https://github.com/gleitz/howdoi" rel="noopener noreferrer"&gt;howdoi&lt;/a&gt;, a python command line utility that searches stackoverflow for your question. Not a very revolutionary concept, but very convenient to use. I'm in the command line all the time - using howdoi from there saves me a alt-tab and several clicks. That got me thinking - what if this was in arepl? Imagine programming and wondering how do something. Let's say, get the desktop width. Without even having to switch applications you could type &lt;code&gt;howdoi('get the desktop width')&lt;/code&gt; and arepl would print out the answer for you to use. No losing your focus - just a question and answer, fitting seamlessly into your workflow. &lt;/p&gt;

&lt;p&gt;I got to work. I quickly figured out how to call howdoi programatially and verified it ran in arepl. But there's a slight problem - in real-time mode arepl runs every code change, debounced to a customizable interval, but still quite frequently. This would lead to dozens of unnecessary duplicated requests. Thankfully howdoi has caching, which skips this problem. Just to double-check I opened up fiddler and captured the network traffic:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fpd10y3nkhqq1cpdbwuef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fpd10y3nkhqq1cpdbwuef.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uh oh. What you see there is a call to stackoverflow every request - no caching at all. The library howdoi was using, requests_cache, is supposed to create a sqlite database in &lt;code&gt;%userprofile%/.howdoi/cache&lt;/code&gt;, and that wasn't even present! I'm not going to talk about the entire issue in this article - you can read a thorough report &lt;a href="https://github.com/gleitz/howdoi/issues/213" rel="noopener noreferrer"&gt;here&lt;/a&gt; - but suffice to say it was a real issue and required a significant amount of work. While investigating this two days pass. Then the weekend comes, and with all the hiking and friends and other gross "outdoors" stuff I don't get any programing done. Finally on Monday I was able to get back to work on arepl. &lt;/p&gt;

&lt;p&gt;So what started off as a simple test of a library in arepl became a weeklong adventure. That's life on the internet - &lt;a href="https://www.youtube.com/watch?v=oHg5SJYRHA0" rel="noopener noreferrer"&gt;you never know where it will take you&lt;/a&gt;&lt;sup id="fnref2"&gt;2&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;And that's not a bad thing. It's part of why I love the internet - that it's filled with unknowns and behind every turn lies a new fact to be discovered. But sometimes you have something pressing to do and getting sidetracked can be frustrating. Your curiosity and perfectionism conflicts with your desire to be productive and finish the work already. If you're like me you'll continue being sidetracked, possibly overshoot the deadline, and be disappointed with yourself afterwords. &lt;/p&gt;

&lt;p&gt;But you need to make the right choice. The hard choice. When you find yourself being sidetracked, make a note of what needs to be done and save it for later. This follows the &lt;a href="https://en.wikipedia.org/wiki/Agile_software_development" rel="noopener noreferrer"&gt;agile&lt;/a&gt; principle of MVP - produce a Minimal Viable Product first. Perfectionism can come later. Delivering a product earlier, even if not perfect, is better for many reasons. Shorter iteration time. Faster feedback from customer. Elimination of potentially unnecessary work. Higher ticket completion rate. It's worth it. &lt;/p&gt;

&lt;p&gt;Now, I'm aware of the above... but I still get sidetracked 🙈. So here's some more practical tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://www.one-tab.com" rel="noopener noreferrer"&gt;onetab&lt;/a&gt; or a similar extension to save your tabs for later&lt;/li&gt;
&lt;li&gt;Keep your tickets small. Less work in the ticket less complexity and risk involved. This is another &lt;a href="https://agilepainrelief.com/notesfromatooluser/2010/09/story-slicing-how-small-is-enough.html#.XWfycChKiUk" rel="noopener noreferrer"&gt;agile recommendation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set a deadline for yourself. For example, &lt;a href="https://github.com/Almenon/AREPL-vscode/milestones" rel="noopener noreferrer"&gt;github milestones&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When creating a story for researching something, keep in mind are you &lt;em&gt;just&lt;/em&gt; going to research it or are you also going to try it out? If you also do the latter a half-hour of researching could turn into days worth of work.&lt;/li&gt;
&lt;li&gt;Similar to the above, try to detail each task you need to do in a ticket. Maybe even make a checklist. If the work is planned for, it doesn't count as getting sidetracked :)&lt;/li&gt;
&lt;li&gt;Modifying code without unit tests? You'll probably need to refactor it when adding unit tests.&lt;/li&gt;
&lt;li&gt;Make it easy to create new tickets. If there's a bunch of fields to fill out maybe you can configure some of them to have sensible defaults? Or if you are not in control of your ticketing system you could write a quick script to automate it.&lt;/li&gt;
&lt;li&gt;Set aside some time for an innovation sprint where you can take care of all the issues you've noticed. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hopefully those help you out, do you have any more tips? And how deep down the rabbit hole have you gotten? Comment below!&lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Last year, to be honest. Look, I forgot I had this article drafted, okay? ↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Including me. It was so long since I wrote the article I forgot what it linked to. ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>howdoi</category>
      <category>distraction</category>
    </item>
    <item>
      <title>Ubuntu on Windows for die-hard windows fans</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Sat, 13 Apr 2019 16:23:15 +0000</pubDate>
      <link>https://dev.to/almenon/ubuntu-on-windows-for-die-hard-windows-fans-7h6</link>
      <guid>https://dev.to/almenon/ubuntu-on-windows-for-die-hard-windows-fans-7h6</guid>
      <description>&lt;p&gt;For the past couple years I have worked entirely in the microsoft stack. Typescript. C#. VB. MSSQL. IIS. Azure. and the list goes on…&lt;/p&gt;

&lt;p&gt;But now I’ve joined a new company and they don’t use windows at all. It’s a total paradigm shift. JS instead of TS. Python instead of C#. Postgres instead of MSSQL. Nginx and AWS instead of IIS and Azure.&lt;/p&gt;

&lt;p&gt;I could say bye to windows. With thermite and a raft I could give my PC a decent viking burial. Then I would use a macbook air and sit in a coffee shop and say goodbye to ☕ENTERPRISE DEV☕ and become ⚡ROCKSTAR HACKER⚡.&lt;/p&gt;

&lt;p&gt;But you know what? Over the years I’ve become a bit fond of windows. It's clunky. It's slow. But I grew up with it, damn it. So……&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4b6l1vkqryul7pkb961w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4b6l1vkqryul7pkb961w.png" alt="Pictured: not what actually happened" width="359" height="474"&gt;&lt;/a&gt;&lt;br&gt;
Enter WSL, the &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10" rel="noopener noreferrer"&gt;Windows Subsystem for Linux&lt;/a&gt;, also known under its much more awkward acronym, BOUOW. With this bad boy you can have a full blown ubuntu system in the same environment as windows! Hooray! Problem Solved!&lt;/p&gt;

&lt;p&gt;But not so fast. You still have to learn all the new linux concepts and commands. And get ready for a clown car full of bugs….&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmlqjv7ridk5bop34cdv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmlqjv7ridk5bop34cdv.png" alt="http://pbfcomics.com/comics/honk other comics may be NSFW" width="800" height="1309"&gt;&lt;/a&gt;&lt;br&gt;
For starters, let’s assume you installed ubuntu, upgraded it, and have the terminal up and ready to go. Or have shelled out a few bucks for &lt;a href="https://www.microsoft.com/en-us/p/wlinux/9nv1gv1pxz6p?irgwc=1&amp;amp;OCID=AID681541_aff_7593_1291904&amp;amp;tduid=%28ir__r3gf2fplu0kfr06u0cigmvmrvu2xm2ozg1wgnbco00%29%287593%29%281291904%29%28%29%28%29&amp;amp;irclickid=_r3gf2fplu0kfr06u0cigmvmrvu2xm2ozg1wgnbco00&amp;amp;activetab=pivot:overviewtab" rel="noopener noreferrer"&gt;wlinux&lt;/a&gt;. Next you should find a basic linux terminal tutorial and follow that, getting used to cd'ing to directories, ls'ing to see items, the basic stuff. Once you've mastered the basics you can put some handy dandy aliases in your .profile:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Restart your terminal and test out a alias or two to make sure they work.&lt;/p&gt;

&lt;p&gt;Then add a softlink to your windows drive. For me I used the below command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ln -s dev /mnt/c/dev&lt;/code&gt;&lt;br&gt;
Now you can cd into your windows dev folder. (you might need to make the dev folder in Windows first)&lt;/p&gt;

&lt;p&gt;But be warned, because WSL / windows interoperability is still pretty buggy. I suggest keeping the two systems as separate as possible, even if it means re-installing stuff on your ubuntu subsystem.&lt;/p&gt;

&lt;p&gt;If you want to interact with windows from ubuntu regardless, keep these things in mind:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If you try doing git status on a windows repo, it will report all the files as modified. To fix this set the following in your repo:&lt;br&gt;
&lt;code&gt;git config --local core.autocrlf true&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git config --local core.filemode false&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you ever need to use chmod or deal with permissions in the windows filesystem follow this stackoverflow: &lt;a href="https://superuser.com/a/1343737/890079" rel="noopener noreferrer"&gt;https://superuser.com/a/1343737/890079&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;see &lt;a href="https://blogs.msdn.microsoft.com/commandline/2018/02/07/automatically-configuring-wsl/" rel="noopener noreferrer"&gt;this blog post&lt;/a&gt; for more details.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;you can invoke windows utilities through cmd /C. For example, cmd.exe /C echo hello world . Or you can invoke utilities directly by specifying .exe, like so: ipconfig.exe | grep IPv4 | cut -d: -f2&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vice-versa, you can invoke linux utilities on windows through wsl command.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Docker doesn’t work well in WSL 1, along with some other miscellaneous feature and apps that don’t function properly. For docker you need WSL 2.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Last of all, if you’re new to linux you probably want a handy reference to look up documentation on linux utilties. There is the man command, of course (man ls to see ls docs) but it can be a lot to read. I would suggest also downloading &lt;a href="https://github.com/chrisallenlane/cheat" rel="noopener noreferrer"&gt;cheat&lt;/a&gt;. cheat command will give you plenty of useful examples that you can use to quickly get up to speed. For starters, try out cheat grep.&lt;/p&gt;

&lt;p&gt;So to sum it all up, is WSL worth the hassle? If you're going to be using WSL primarily, no. I regret not just setting up a ubuntu dual-boot straightaway, and that's what I eventually ended up doing. But if you are working a minority of the time in WSL or just playing around with it, then I would heartily recommend it.&lt;/p&gt;

</description>
      <category>wsl</category>
      <category>ubuntu</category>
      <category>linux</category>
      <category>windows</category>
    </item>
    <item>
      <title>Arepl stats for 2018</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Sat, 16 Mar 2019 22:31:12 +0000</pubDate>
      <link>https://dev.to/almenon/arepl-stats-for-2018-hon</link>
      <guid>https://dev.to/almenon/arepl-stats-for-2018-hon</guid>
      <description>&lt;p&gt;See last post for june &lt;a href="https://medium.com/@almenon214/arepl-stats-for-june-5e0c87636c3"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q: How many people use AREPL now?&lt;/p&gt;

&lt;p&gt;Around 40 a week. This has increased &lt;em&gt;significantly&lt;/em&gt; from last time, largely due to increased &lt;a href="https://www.google.com/search?q=seo"&gt;SEO&lt;/a&gt; by altering my title. Just a two-word change to my title (AREPL for python) caused the popularity to skyrocket. In fact, AREPL is now the &lt;a href="https://marketplace.visualstudio.com/search?term=python&amp;amp;target=VSCode&amp;amp;category=All%20categories&amp;amp;sortBy=Relevance"&gt;#2 extension&lt;/a&gt; when searching for python.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N7kfKtqn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f42uqis8lzj6zh75rxxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N7kfKtqn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f42uqis8lzj6zh75rxxo.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q: What nationality are the users?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LChXzqjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nja6yeeald4kzvyoj1ud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LChXzqjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nja6yeeald4kzvyoj1ud.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a lot more diverse than last graph! Seriously, &lt;a href="https://medium.com/@almenon214/arepl-stats-for-june-5e0c87636c3"&gt;read my last post&lt;/a&gt; and the difference is insane. US has gone from being the majority of the users to a small minority, and &lt;em&gt;not even the largest minority at that&lt;/em&gt;. China and UK are both expected presences — but Brazil beating India and Japan really suprised me. That might be a outlier — brazil useage has gone down in 2019. I haven’t heard of brazillians having a big tech sector but brazillians feel free to correct me!&lt;/p&gt;

&lt;p&gt;Looking at this graph makes me realize how US-centric I am. In retrospect, US being the minority is obvious. Also, special shout-out to the one user in Syria! Civil war ain’t gonna stop you from programming!&lt;/p&gt;

&lt;p&gt;Q: How often does a person use AREPL each week?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;for July, August, and September:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Heavy users: 32 (1%) have used it ten or more times. This is about once a week or more.&lt;/p&gt;

&lt;p&gt;Light users: 227 (60%) have used it two to ten times. That’s a couple times a month at most.&lt;/p&gt;

&lt;p&gt;Once only users: 121(32%) have used it only once.&lt;/p&gt;

&lt;p&gt;The 1% conversion rate from newcomers to heavy users could definitely be improved. It’s not terrible — google drive only has a .5% conversion rate from free → paid users, for example. But compare that with spotify, and you can see that I have a lot of catching up to do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m4ydOh9J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rp0q57cn5jswmguvj5vg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m4ydOh9J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rp0q57cn5jswmguvj5vg.jpeg" alt="image from https://www.process.st/freemium-conversion-rate/"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AREPL in 2018 was still very buggy — I’m hoping to see a rise in % heavy users with my bugfixes in 2019.&lt;/p&gt;

&lt;p&gt;Q: Has the error telemetry been helpful so far?&lt;/p&gt;

&lt;p&gt;Yes! The telemetry recorded a spike in the number of errors (specifically, people with the wrong python path configured) when I did one of my releases. Unfortunately, I thought this was due to the overall increased usage. It turned out that the mac version was broken due to a casing bug. After I fixed that the number of errors went down.&lt;/p&gt;

&lt;p&gt;Q: Any new telemetry logging?&lt;/p&gt;

&lt;p&gt;I’m now logging settings so I can if people actually use the settings I offer. For the most part, no. I see that printResultPlacement, showFooter, and whenToExecute are sometimes changed but that’s about it. The only setting that gets frequently changed is python path — but that’s to be expected.&lt;/p&gt;

&lt;p&gt;Some final notes:&lt;/p&gt;

&lt;p&gt;Q: Where do I install AREPL?&lt;br&gt;
A: &lt;a href="https://github.com/Almenon/AREPL-vscode"&gt;https://github.com/Almenon/AREPL-vscode&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q: How can I add application insights to my own extension?&lt;br&gt;
&lt;a href="https://medium.com/@almenon214/adding-telemetry-to-your-vscode-extension-f3d52d2e573c"&gt;https://medium.com/@almenon214/adding-telemetry-to-your-vscode-extension-f3d52d2e573c&lt;/a&gt;&lt;/p&gt;

</description>
      <category>stats</category>
      <category>data</category>
      <category>applicationinsights</category>
      <category>vscode</category>
    </item>
    <item>
      <title>The shape of the code</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Sat, 03 Nov 2018 17:15:58 +0000</pubDate>
      <link>https://dev.to/almenon/the-shape-of-the-code-1c81</link>
      <guid>https://dev.to/almenon/the-shape-of-the-code-1c81</guid>
      <description>&lt;p&gt;Code has a shape. For a small script, it might be a simple arrow. Stuff goes in, stuff goes out. A large script might be a mess of spaghetti, arrows going every which way. Intersections, crossings, dead ends, all forming a scary mess. As the code grows and grows the knots get tighter and tighter, until eventually it becomes impossible to untangle. “&lt;a href="https://stackoverflow.com/questions/35772001/how-to-handle-the-signal-in-python-on-windows-machine/35792192#comment81619892_35792192"&gt;Abandon all hope ye who enter here&lt;/a&gt;” the comments warn, because a single change could cause the whole system to catch on fire. Due to lack of testing and pressure from on high, most code ends up like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BzrJOkMA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hsi2jthwsq1k6qyh9l17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BzrJOkMA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hsi2jthwsq1k6qyh9l17.png" alt="alt text" title="https://xkcd.com/844/"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But in good systems, it’s less of a knot and more of a grid. Input follows sensible proper paths and logical output is returned. From the output, more code can be applied with yet more logic. If the code is good, eventually another library picks it up as a dependency, and that library picks that library up, and you end up with gigantic skyscrapers of code. Prime example: any popular npm package. It’s like reading the geneaology of Adam: vscode uses gulp-chmod, which uses gulp-symdest, relying on vinyl-fs, in turn relying on glob-stream, which uses micromatch, but that uses braces, and that has expand-range, which of course uses fill-range, and randomatic, and finally is-number. It’s a tower.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Oy9UBJTd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ph44g1ijxx769q81pdxr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Oy9UBJTd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ph44g1ijxx769q81pdxr.jpeg" alt="alt text" title="you better hope is-number doesnt get hacked, or else the whole tower might fall"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or maybe the shape of code is a pyramid — vscode doesn’t have just one dependency, it has tons of dependencies. One library relies on many other libraries, which in turn relies on other libraries, so on, expanding exponentially.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HTLoPlJh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AHd1p9SEP797mkIx6_ZHpdA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HTLoPlJh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AHd1p9SEP797mkIx6_ZHpdA.jpeg" alt="alt text" title="If you printed out books of all the code in the world and stacked them up it would be at least this high"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exponentially…. That sounds like a tree! An upside down tree, sure, but this is computer science land. And as long as we are there why a tree? You can view code as a fractal — the more in depth you look into it, the more confusing it gets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---9W5nbkM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8tdfchs29evfumqq0ybc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---9W5nbkM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8tdfchs29evfumqq0ybc.jpeg" alt="alt text" title="psychedelic AND healthy!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But why a fractal brocoli? Maybe it’s a onion. You peel back one layer of code, and there’s another layer. A function in that layer calls a library in a deeper layer, which makes a web request to the backend which hands it off to a ancient stored procedure in the legacy database and pretty soon you have twenty files open in the editor and you’re cying just like you’re peeling a real onion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V1rb5eTg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f6iqhg1ia7nldm13t0ei.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V1rb5eTg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f6iqhg1ia7nldm13t0ei.jpeg" alt="alt text" title="Onions: a powerful metaphor for both ogres and code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Personally, I like the idea of code as a star. GET IT? &lt;a href="https://en.wikipedia.org/wiki/A*_search_algorithm"&gt;A STAR??&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;…. I’ll show myself out.&lt;/p&gt;




&lt;p&gt;What’s your shape?&lt;/p&gt;

</description>
      <category>programming</category>
      <category>softwaredevelopment</category>
      <category>coding</category>
      <category>philosophy</category>
    </item>
    <item>
      <title>Keeping yourself motivated as a coder</title>
      <dc:creator>Almenon</dc:creator>
      <pubDate>Sat, 29 Sep 2018 21:21:26 +0000</pubDate>
      <link>https://dev.to/almenon/keeping-yourself-motivated-as-acoder-5cah</link>
      <guid>https://dev.to/almenon/keeping-yourself-motivated-as-acoder-5cah</guid>
      <description>&lt;p&gt;Programmers probably have one of the most distracting jobs in existence. Their entire workday is spent in front of a computer - a literally endless source of entertainment and pleasure, a limitless virtual heaven. With literally just a click of a button, you could be in another world. You could be slaying dragons. You could be learning about the &lt;a href="https://www.damninteresting.com/the-great-molasses-flood-of-1919/"&gt;great molasses flood of 1919&lt;/a&gt;. You could literally be doing anything. So why do programmers spend their time programming, a hobby that could only be described as exciting by masochistic workaholics?&lt;/p&gt;

&lt;p&gt;Well, the vast sums of money that a software engineer gets is a pretty good reason. Another reason is that they probably are workaholics. You don't see doctors spending all-nighters at hackathons for a 20$ starbucks giftcard, or linguists designing &lt;a href="http://lhartikk.github.io/ArnoldC/"&gt;languages composed of Arnold Schwarzenegger quotes&lt;/a&gt; as a joke.&lt;/p&gt;

&lt;p&gt;Or maybe they do it for the pride. Making open source projects gets you virtual street cred - the bigger the project, the better the cred. Guido, the creator of python, is practically a king. Before abdicating his throne he was called the BDFL, or benevolent dictator for life. Contributing to a project is a way of becoming something greater than youself and leaving a lasting mark on society. Make a commit, and git will forever stamp you into history, a hash 785b312 saying I was there. xNinja47, 4/30/2005, changed 3 files for the better.&lt;/p&gt;

&lt;p&gt;Or it could just be for practical reasons - you need to keep your skills sharp, after all. And open source work looks good on your resume. Not everyone loves programming - for some it's just a high paying job to slog through untill they get home to their families and social life.&lt;/p&gt;

&lt;p&gt;But if you're reading this article, maybe you don't have anything to motivate you. Maybe reddit sounds like a good idea. Stop! Don't do it! No funny cat pics! No cute bears! Keep on writing this medium article! (I may be speaking to myself here). So without further ado, here is some strategies to employ for keeping yourself in shape:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Deadlines: set deadlines for yourself - github &lt;a href="https://github.com/Almenon/AREPL-vscode/milestones?state=closed"&gt;milestones&lt;/a&gt; and &lt;a href="https://github.com/Almenon/AREPL-vscode/issues"&gt;issues&lt;/a&gt; are great for this. If you look at my projects I have hundreds of issues I create for myself to keep track of my work. Another benefit of writing issues is that you have written documentation to refer to when you go back to working on it. Or if you're not on github, you can simply set up calendar events. Maybe even tell your friends that you will get something done by a certain time - that creates commitment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Releases. Your project is a piece of crap. It barely functions, the architecture is horrible, and &lt;a href="https://en.wikipedia.org/wiki/Impostor_syndrome"&gt;you don't even really know what you're doing&lt;/a&gt;. The last thing you want to do is to expose your baby duckling to the public. But at a certain point you have to cut your losses - you can't just keep on working on something forever, because then you're going to have burnout. And you may be pleasantly surprised. Maybe people will like it. Worst case scenario, people will hate it, but in the process of shitting all over it they inadvertently give you helpful advice to fix it. In fact, in my experience the detractors are more helpful than the fans, because they will give you actual advice, not just "oh that looks cool".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maximize Fun. Look for more pleasurable and fulfilling fun, rather than lazy and cheap entertainment. For example, it's far too easy to control-n to open a new tab and type in the letter r to get the autocomplete for reddit. That's just 3 keys and a enter. Reddit is fun, I love it, but its filled with low effort reposts. Taking the time to watch a show or even a movie might be a better idea - you have a clear chance to stop (at the end) rather than scrolling through reddit's infinite amount of content. Important disclaimer: never click on netflix's next episode button. That's a feature designed by the devil to get you to binge-watch shows and hate yourself afterwards. If you actually have time to watch the next episode then you can wait for the credits to go by. Or more likely, realize what you are doing and go do something productive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Take walks. Rest your eyes. Think about how to approach the problem. If you're me, try reading while walking. It's not that dangerous - you've only bumped into a pole once or twice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get the support of others. Join a slack/discord community. Make a program that other people use. Ask for advice from your friends. Go to programming meetups. Go to programming conventions - it's a great excuse for a vacation, and it's a lot less dry than it sounds. Go past your normal boundaries - you might be surprised as to what you are capable of.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add &lt;a href="https://medium.com/@almenon214/adding-telemetry-to-your-vscode-extension-f3d52d2e573c"&gt;telemetry&lt;/a&gt; or alerting to your program. It might not be practical for a small application, but it is extremely useful as a motivating tool. Every day I get emails from around the world. People use &lt;a href="https://github.com/Almenon/AREPL-vscode"&gt;AREPL&lt;/a&gt; in New York, Canada, Brazil, Chile. Europe, Japan, Israel, and Pakistan. Every day it's a different country. It's significant to know that people are using what I make and relying on me to continue developing it. In a similar vein, I also get emails whenever my reddit bot posts. I can see if people upvote it or if there are problems with the bot I need to fix.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hopefully these tips are helpful to you. If they are, I'd love to hear it. Or maybe you have a tip of your own - either way, leave a comment below!&lt;/p&gt;

</description>
      <category>motivation</category>
      <category>selfhelp</category>
      <category>tech</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
