<?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: AppMap Ruby</title>
    <description>The latest articles on DEV Community by AppMap Ruby (@appmapruby).</description>
    <link>https://dev.to/appmapruby</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%2F571762%2Fbdf76b63-81c6-4445-bdbd-26b9a7201aa8.png</url>
      <title>DEV Community: AppMap Ruby</title>
      <link>https://dev.to/appmapruby</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/appmapruby"/>
    <language>en</language>
    <item>
      <title>How to spot and fix Django ORM anti-patterns</title>
      <dc:creator>AppMap Ruby</dc:creator>
      <pubDate>Tue, 13 Apr 2021 10:32:59 +0000</pubDate>
      <link>https://dev.to/appmap/optimizing-django-orm-sql-queries-5n8</link>
      <guid>https://dev.to/appmap/optimizing-django-orm-sql-queries-5n8</guid>
      <description>&lt;p&gt;A demonstration of how to optimize Django ORM by seeing how it makes SQL queries under the hood.&lt;/p&gt;

&lt;p&gt;I use the open source &lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap"&gt;AppMap extension for Visual Studio Code&lt;/a&gt; to record the code and SQL execution of an application test case, and then display that information as a graphical execution trace.&lt;/p&gt;

&lt;p&gt;The graphical display of code and SQL shows how the ORM works behind the scenes.  &lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
      <category>sql</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Onboarding to a new codebase quickly and efficiently</title>
      <dc:creator>AppMap Ruby</dc:creator>
      <pubDate>Thu, 08 Apr 2021 11:17:47 +0000</pubDate>
      <link>https://dev.to/appmap/onboarding-to-a-new-codebase-quickly-and-efficiently-55l2</link>
      <guid>https://dev.to/appmap/onboarding-to-a-new-codebase-quickly-and-efficiently-55l2</guid>
      <description>&lt;p&gt;A short demonstration of how to use AppMaps to shorten the time it takes to get productive on a new-to-you codebase.&lt;/p&gt;

&lt;p&gt;I use the open source extension for VS Code called &lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap"&gt;AppMap&lt;/a&gt;, and the ecommerce Rails application &lt;a href="https://github.com/solidusio/solidus"&gt;Solidus&lt;/a&gt; as an example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap"&gt;AppMap&lt;/a&gt; works by recording the code execution paths of your app. A good way to create AppMaps is by recording unit, functional or integration test cases.&lt;/p&gt;

&lt;p&gt;To check it out search for 'AppMap' in the VS Code extensions tab or in the &lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap"&gt;VS Code marketplace&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>ruby</category>
      <category>rails</category>
    </item>
    <item>
      <title>Find the N+1 Query Problem in Rails Apps in Under 5 Mins</title>
      <dc:creator>AppMap Ruby</dc:creator>
      <pubDate>Fri, 02 Apr 2021 21:57:20 +0000</pubDate>
      <link>https://dev.to/appmap/find-the-n-1-query-problem-in-rails-apps-in-under-5-mins-2bgg</link>
      <guid>https://dev.to/appmap/find-the-n-1-query-problem-in-rails-apps-in-under-5-mins-2bgg</guid>
      <description>&lt;p&gt;This video is based on the brilliant &lt;a href="https://news.learnenough.com/eager-loading" rel="noopener noreferrer"&gt;Eager Loading and the N+1 Query Problem&lt;/a&gt; blog post by &lt;a href="https://dev.to/kgilpin"&gt;Kevin Gilpin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is a short demonstration of how to identify the N+1 Query anti-pattern using the &lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap" rel="noopener noreferrer"&gt;AppMap extension for VS Code&lt;/a&gt;, &lt;a href="https://stedolan.github.io/jq/" rel="noopener noreferrer"&gt;jq&lt;/a&gt; and the &lt;a href="https://github.com/mhartl/sample_app_6th_ed" rel="noopener noreferrer"&gt;Rails Sample Application Sixth Edition&lt;/a&gt; as an example.&lt;/p&gt;

&lt;p&gt;The N+1 anti-pattern happens when a query is executed for every result of a previous query.  If left unchecked N+1 queries result in a gradual slowdown in the performance of an application.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhv2gp0fd2oaiigqmkval.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhv2gp0fd2oaiigqmkval.jpg" alt="N+1 Query Problem"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Detecting  N+1 queries is tricky, because they are not revealed by any mainstream testing strategy.&lt;/p&gt;

&lt;p&gt;To detect the N+1 query problems we need to look at the number of SQL queries that are performed in a realistic situation, such as an integration test, and compare this number with a “reasonable” expectation.&lt;/p&gt;

&lt;p&gt;You can find full usage instructions, and all these links, on the &lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap" rel="noopener noreferrer"&gt;AppMap&lt;/a&gt; page in the VSCode marketplace.&lt;/p&gt;

&lt;p&gt;Thanks for watching!&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>sql</category>
      <category>performance</category>
    </item>
    <item>
      <title>Ruby Giant - Amir Rajan, Creator of DragonRuby</title>
      <dc:creator>AppMap Ruby</dc:creator>
      <pubDate>Fri, 26 Feb 2021 16:58:01 +0000</pubDate>
      <link>https://dev.to/appmapruby/making-games-with-ruby-31e3</link>
      <guid>https://dev.to/appmapruby/making-games-with-ruby-31e3</guid>
      <description>&lt;p&gt;If you’ve been around the indie games community for a few years, you’ve probably heard of Amir Rajan. He’s a game developer and the creator of the &lt;a href="http://dragonruby.org/"&gt;DragonRuby Game Development Toolkit&lt;/a&gt; . The &lt;a href="https://www.nytimes.com/2015/01/21/arts/video-games/to-a-gamer-minimalism-is-a-virtue.html"&gt;story&lt;/a&gt; of how he made and promoted the hit mobile version of &lt;a href="https://apps.apple.com/us/app/a-dark-room/id736683061"&gt;A Dark Room&lt;/a&gt; is legendary.&lt;/p&gt;

&lt;p&gt;In addition to being a smart, driven creator Amir is generous when it comes to helping others learn from his experience. &lt;/p&gt;

&lt;p&gt;My team at AppLand recently started an &lt;a href="http://bit.ly/appmap-for-ruby-devs"&gt;open source project for the Ruby community&lt;/a&gt;. We have a great deal of respect for Amir’s approach so I reached out for some inspiration and advice on making the next generation of tools for Ruby developers. &lt;/p&gt;




&lt;p&gt;It seems like people with artistic sensibilities are drawn to Ruby. Why did you choose it initially and why did you stick with it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amir:&lt;/strong&gt; I'd like to say dynamic languages are forgiving in nature. It feels like working with charcoal and oils. While static languages feel like you're working with marble. With respect to video games, Ruby is perfect given that game dev is an artistic medium. In essence: I'm not sure what I'm building yet, games are made of the stuff of dreams... having a static compiler asking my "what are you trying to build?" - at the inception of an idea - just ends up getting in the way.  &lt;/p&gt;

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

&lt;p&gt;Social awareness seems to be woven into the DragonRuby business model and it almost feels like a FOSS sensibility is lurking under the surface. Did you consider making the platform open source?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amir:&lt;/strong&gt; We can't open source all of the platform because of console/mobile-specific NDAs. But what we are able to open source is located at &lt;a href="https://github.com/dragonruby/dragonruby-game-toolkit-contrib"&gt;dragonruby-game-toolkit-contrib&lt;/a&gt;. With regards to FOSS, the DragonRuby partnership is trying to define a more sustainable software model. The OSS landscape as it stands today is definitely not sustainable. Lots of burnout, with multi-billion dollar companies profiting without giving much in return.&lt;/p&gt;

&lt;p&gt;Generally speaking, we take the stance that: "If you are gainfully employed, then you will pay for this software in full. If you can't afford to, however, then don't worry, we'll give it to you for free."&lt;/p&gt;

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

&lt;p&gt;DragonRuby's Discord game is very high. It seems like you’re investing there. How important is Discord in getting a new developer-focused company off the ground? Any tips for nurturing a healthy Discord community?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amir:&lt;/strong&gt; Community is very important especially for a young product. Small companies have to be personal and candid. It's the one competitive advantage we have over the larger (soulless) players in the market. The only tip I really have is to just be genuine and present within the community.&lt;/p&gt;

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

&lt;p&gt;The &lt;a href="https://itch.io/jam/nokiajam3"&gt;Nokia 3310 Jam&lt;/a&gt; was kind of genius and it produced some really interesting projects. Was that your idea? How did you get involved?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amir:&lt;/strong&gt; I always keep an eye on game jams hosted on itch.io that DragonRuby Game Toolkit would be a good candidate for. After I find one, I just reach out to the organizer and ask to sponsor. They are usually happy to oblige.&lt;/p&gt;

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

&lt;p&gt;DragonRuby feels very approachable to me. What level of Ruby dev skills do you need to be productive with DragonRuby? Where is the best place for people to start their DragonRuby journey?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amir:&lt;/strong&gt; You don't need to know much Ruby at all to get started really. You can play around with the engine in the web browser via &lt;a href="http://fiddle.dragonruby.org"&gt;fiddle.dragonruby.org&lt;/a&gt;. The docs have a good &lt;a href="http://docs.dragonruby.org/#--getting-started-tutorial"&gt;starting tutorial&lt;/a&gt; too. There are over 50 sample apps that are included in the downloaded that cover various aspects of the engine and video game genres. And of course, I'm always available in the Discord channel to help out. People really love &lt;a href="https://www.youtube.com/watch?v=xZMwRSbC4rY&amp;amp;ab_channel=RyanC.Gordon"&gt;this tutorial&lt;/a&gt; on building Tetris that Ryan created, too.&lt;/p&gt;




&lt;p&gt;P.S.&lt;/p&gt;

&lt;p&gt;My team at AppLand makes a VS Code extension that creates software design diagrams automatically in your IDE. The visual interface we created for the plug-in was influenced by game design tools. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://bit.ly/appmap-ruby-dev-footer"&gt;Install it for free from VS Code Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;( or just search for &lt;code&gt;appmap&lt;/code&gt; in VS Code )&lt;/p&gt;




&lt;p&gt;This is the first in a series of posts that highlight developers doing interesting or unexpected things with Ruby. I’m calling it…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kyGdKn4x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ze0j8nla1xt89or30s2d.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kyGdKn4x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ze0j8nla1xt89or30s2d.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comment here or &lt;a href="https://twitter.com/appmapruby"&gt;DM me on Twitter&lt;/a&gt; if you know of a project that should be featured.&lt;/p&gt;




&lt;p&gt;You’ve read this far so I know you’re thinking, “I wonder if I could use DragonRuby to build a game like…” &lt;/p&gt;

&lt;p&gt;Comment with your vote for all-time best 2D game!&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>gamedev</category>
      <category>rails</category>
      <category>design</category>
    </item>
    <item>
      <title>Startups can still feel good about choosing Bootstrap in 2021
</title>
      <dc:creator>AppMap Ruby</dc:creator>
      <pubDate>Wed, 17 Feb 2021 01:31:46 +0000</pubDate>
      <link>https://dev.to/appmapruby/startups-can-still-feel-good-about-choosing-bootstrap-in-2021-15el</link>
      <guid>https://dev.to/appmapruby/startups-can-still-feel-good-about-choosing-bootstrap-in-2021-15el</guid>
      <description>&lt;p&gt;I don’t remember how or when I first encountered Bootstrap, but I do remember a late night in 2012 during which I ripped all the &lt;a href="http://www.blueprintcss.org/"&gt;Blueprint CSS&lt;/a&gt; out of my company's product and replaced it with Bootstrap. The company was an early-stage startup, the product was a SaaS application, and Boostrap was a completely new thing. The next morning at standup I took some extra time and walked my team through what I had done.  I got applause. Literally. People clapped. That was a first for me.&lt;/p&gt;

&lt;p&gt;Needless to say, in 2021 the applause has died down when it comes to choosing Bootstrap. The introduction of Bootstrap for early product development must now be accompanied by a thoughtful argument. Many developers (especially the kind that join early-stage startups) now regard Bootstrap as the Toyota Camry of front end frameworks, and jQuery as the dead-dinosaur-fueled combustion engine under the hood. I am here to tell you that this battle-hardened framework makes more sense now than it ever has for early product development. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BLOAT&lt;/strong&gt; seems to be the major category of concern. Doesn’t Bootstrap have performance issues? What about all those verbose, extraneous class names? &lt;/p&gt;

&lt;p&gt;The concern is justified, but there are some very particular things you need when building the first iterations of a web UI that Bootstrap is particularly well suited for. &lt;/p&gt;

&lt;h2&gt;
  
  
  Incredibly low activation energy, Incredibly high speed of iteration
&lt;/h2&gt;

&lt;p&gt;Bootstrap is available on-demand, usable in seconds, and there is no faster way to get a web app UI up and running with a complete, documented design system.&lt;/p&gt;

&lt;p&gt;As Kevin Gilpin, founder of multiple successful startups &lt;a href="http://bit.ly/3u37WUp"&gt;points out in this post&lt;/a&gt;  in the early-stage startup game ‘speed’ is measured in how quickly, and cost-effectively you achieve goals. When it comes to building web UI this translates to getting the UI live and iterating on layout, control selection, and user flow until you have something people want to use. &lt;/p&gt;

&lt;p&gt;If you are successful at shipping product, providing value, and retaining users, there may be a point when shaving milliseconds off your load time matters. It won’t be on day one, and if you are doing it right, the thing straining your app’s performance is directly related to your core innovation, not serving commodity UI. &lt;/p&gt;

&lt;h2&gt;
  
  
  Complete and accessible documentation that anyone can understand
&lt;/h2&gt;

&lt;p&gt;Bootstrap controls are well documented, both in their official documentation and across the various support communities. This is a benefit that scales out to every member of your extended development team and enables the UI implementation to scale.&lt;/p&gt;

&lt;p&gt;As soon as your app has two developers working on it, or two similar but different views, or two modes, or two of anything really, you need a system for maintaining consistency across the visual and interaction design.&lt;/p&gt;

&lt;p&gt;Creating and maintaining reference implementations for UI controls is extraordinarily expensive in terms of developer time, and easily falls out of step with product direction. Having those resources pre-baked frees up developers and designers to focus on higher-order problems and keeps the UI development process agile. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Corollary:&lt;/strong&gt; If it’s not in the Bootstrap docs, reconsider your control selection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redundancy in the naming of classes is a quality of CSS not Bootstrap
&lt;/h2&gt;

&lt;p&gt;Good CSS class naming conventions are logical, intuitive, concise, maintainable, accurate, and have decipherable relationships to other class names. But their &lt;strong&gt;MOST&lt;/strong&gt; important quality is making the object they describe look and act as intended. Being DRY is not high on the list of concerns, especially during the rapid prototyping and early product development cycles. This can make developers that do not live on the front end bristle when they see things like...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;class=”btn btn-primary btn-lg”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the back of their mind, they know there are ways to identify and scope elements that do not require this naive style of tagging and inheritance. &lt;/p&gt;

&lt;p&gt;The ugly truth is that about one minute after the need to write CSS arises, the need for a class naming convention arises. About five minutes after that the decision gets made that adding a few extra characters is a small price to pay to get an object to look and act the way you want it to. It is a very short drive from there to a place where &lt;code&gt;btn btn-primary btn-lg&lt;/code&gt; looks downright tiny. &lt;/p&gt;

&lt;h2&gt;
  
  
  Hasn’t the world moved on from Bootstrap?
&lt;/h2&gt;

&lt;p&gt;No, not yet. Bootstrap is a mature platform with wide adoption. It is a part of many applications running in production. As you can probably tell, I find it to be ideally suited for 0-1 front-end development for web applications.&lt;/p&gt;

&lt;p&gt;There is a practical derivation of this question, however, which is "Should Bootstrap be on my resume?" The short answer to that is “no.” Bootstrap experience doesn’t belong on a resume and it never has. It’s like putting "Google Docs skillz" instead of "copywriting."  &lt;strong&gt;CSS&lt;/strong&gt; is the line item you want. &lt;/p&gt;




&lt;p&gt;Okay, I’m cutting myself off here...&lt;/p&gt;

&lt;p&gt;I guess I had a lot to say about Bootstrap. More than I thought. Comment below or hit me up on &lt;a href="https://twitter.com/appmapruby"&gt;Twitter&lt;/a&gt; if you want keep going. I could easily do a part two. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://bit.ly/2Zn8INR"&gt;If you are a Ruby developer please check out appmap-ruby. It is an open source extension that creates interactive visualizations directly from Ruby apps.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>design</category>
      <category>webdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>There are things about whiteboards that I don't miss</title>
      <dc:creator>AppMap Ruby</dc:creator>
      <pubDate>Fri, 12 Feb 2021 04:34:44 +0000</pubDate>
      <link>https://dev.to/appmapruby/there-are-things-about-whiteboards-that-i-don-t-miss-10bi</link>
      <guid>https://dev.to/appmapruby/there-are-things-about-whiteboards-that-i-don-t-miss-10bi</guid>
      <description>&lt;p&gt;Attempting to drag whiteboard drawings into our remote workflow exposed how they had been slowing us down.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sure, creating a whiteboard drawing can be fun and effective
&lt;/h3&gt;

&lt;p&gt;A good visual explanation doesn't require an accurate diagram, it requires a diagram that is inaccurate in useful ways.  This is where whiteboard sessions shine. A good whiteboard diagram has very few real-world constraints, or cluttering details. The process itself is a satisfying way to create real alignment.&lt;/p&gt;

&lt;p&gt;That's great, but how do capture and share that experience in the Covid era? Pasting snapshots of whiteboards into Slack was always janky. &lt;/p&gt;

&lt;p&gt;If all you need to do is rally co-workers, then you can probably get by with the existing collaborative drawing platforms.&lt;/p&gt;

&lt;p&gt;In December I spoke with a Senior Engineer at a systems integrator in Cambridge, MA who told me that moving from onsite whiteboards to online &lt;a href="https://www.hoylu.com/" rel="noopener noreferrer"&gt;Hoylu whiteboards&lt;/a&gt; drastically improved her team's design collaboration with clients.&lt;/p&gt;

&lt;p&gt;If you are using diagrams to communicate critical design decisions, however, then a shared drawing board isn't going to be enough, because... &lt;/p&gt;

&lt;h2&gt;
  
  
  Working from someone else's whiteboard drawing is not very fun or effective.
&lt;/h2&gt;

&lt;p&gt;When trying to understand code or a complex system from a diagram, accuracy counts. Completeness counts. The visual model needs to hold together under scrutiny, even when the author or team of authors is not available. &lt;/p&gt;

&lt;p&gt;Whiteboard diagrams could never be treated as a spec. This is primarily because code entity relationships and control flow are notoriously hard things to depict visually. Getting a diagram correct to the point where a new employee can use it to understand existing code, or a co-worker can help you untangle an auth flow requires discipline and deeper tooling.&lt;/p&gt;

&lt;p&gt;If you are willing to put in the work, there are some tools for leveling up diagram quality.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://plantuml.com/" rel="noopener noreferrer"&gt;Plant UML&lt;/a&gt; - A diagramming syntax for generating UML diagrams&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://mermaid-js.github.io/mermaid/#/" rel="noopener noreferrer"&gt;Mermaid JS&lt;/a&gt; - A diagramming syntax for generating various types of technical diagrams &lt;a href="https://mermaid-js.github.io/mermaid-live-editor/" rel="noopener noreferrer"&gt;online editor&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.draw.io" rel="noopener noreferrer"&gt;Draw.io&lt;/a&gt; - Online diagram drawing app Free but not open source (disclaimer: I have not actually used this app but many people do.) &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://c4model.com/" rel="noopener noreferrer"&gt;C4 Model&lt;/a&gt; - An architectural rendering framework for creating diagrams with understandable context &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The thing is, once you leave the whiteboard behind, and the fidelity of the diagram increases, expectations go up. You start to ask and get questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can I zoom in?&lt;/li&gt;
&lt;li&gt;Can I see a previous version?&lt;/li&gt;
&lt;li&gt;What does it look like running?&lt;/li&gt;
&lt;li&gt;What exactly does that &lt;a href="https://en.wikipedia.org/wiki/Class_diagram#/media/File:Uml_classes_en.svg" rel="noopener noreferrer"&gt;arrow&lt;/a&gt; between the two boxes mean?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When the pressure is on, creating or consuming a whiteboard drawing is just painful
&lt;/h2&gt;

&lt;p&gt;Tracking down a not-obvious bug, preparing for a detailed review, or defending a design decision means you need to present the code 'as-built.' In these situations, tolerance for developer interpretation is very low. People are less interested in seeing a depiction of what you 'think' is going on, and very interested in understanding the reality of the code.&lt;/p&gt;

&lt;p&gt;This definitely requires a more sophisticated tool, one that can record running code, as-built, on-demand, then create an interactive depiction in a sharable form factor.&lt;/p&gt;

&lt;p&gt;My team built our own tooling to do just that. It is available as an open source project. If you are Ruby developer feel free to check out our &lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap" rel="noopener noreferrer"&gt;VS Code extension&lt;/a&gt;.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fenyho2ehox44il6jbpru.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fenyho2ehox44il6jbpru.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or check out &lt;a href="https://dev.to/kgilpin/why-modularity-matters-lessons-from-maintaining-monoliths-at-scale-5hg1"&gt;these&lt;/a&gt; &lt;a href="https://dev.to/kgilpin/unpacking-saml-with-appmaps-and-vscode-1i98"&gt;posts&lt;/a&gt; to see how we have been using it.&lt;/p&gt;

&lt;p&gt;At this point, it is unbelievable to me that we once reached for an Expo marker in these cases.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How Pro Ruby Developers Customize VS Code</title>
      <dc:creator>AppMap Ruby</dc:creator>
      <pubDate>Tue, 09 Feb 2021 23:15:41 +0000</pubDate>
      <link>https://dev.to/appmapruby/how-pro-ruby-developers-customize-vs-code-2hee</link>
      <guid>https://dev.to/appmapruby/how-pro-ruby-developers-customize-vs-code-2hee</guid>
      <description>&lt;p&gt;I recently asked twenty-five professional, freelance Ruby developers about their favorite extensions for Visual Studio Code. &lt;/p&gt;

&lt;p&gt;This wasn't a formal survey, just a way to dig into what makes for a great VS Code extension and use that to inform the design of our own &lt;a href="https://marketplace.visualstudio.com/items?itemName=appland.appmap"&gt;AppMap&lt;/a&gt; extension.&lt;/p&gt;

&lt;p&gt;I tallied the results and a clear picture emerged about which extensions were top of mind for Ruby developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  The most popular responses
&lt;/h3&gt;

&lt;p&gt;These are the heavyweights. No big surprises, but it was interesting to see these names appear with such consistency. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop"&gt;&lt;strong&gt;Rubocop&lt;/strong&gt;&lt;/a&gt; - A VS Code interface for the Rubocop static code analyzer.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint"&gt;&lt;strong&gt;ESLint&lt;/strong&gt;&lt;/a&gt; - JavaScript Linter. With close to thirteen million downloads, we are all well aware of this one.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"&gt;&lt;strong&gt;Prettier&lt;/strong&gt;&lt;/a&gt; - Text formatter.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby"&gt;&lt;strong&gt;Ruby&lt;/strong&gt;&lt;/a&gt; - Provides enhanced Ruby support specific to VS Code.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens"&gt;&lt;strong&gt;GitLens&lt;/strong&gt;&lt;/a&gt; - Provides enhanced Git support specific to VS Code.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  There was a dropoff and the results got more varied
&lt;/h3&gt;

&lt;p&gt;These extensions are not necessarily less popular in terms of sheer download numbers. They were just not top of mind for these developers. Part of being a great extension is seamlessly blending into and improving an existing workflow. Consequently, some of the best extensions are nearly invisible and rarely thought about.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=aliariff.vscode-erb-beautify"&gt;&lt;strong&gt;ERB Formatter&lt;/strong&gt;&lt;/a&gt; - Provides syntax formatting for ERB.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode"&gt;&lt;strong&gt;Intellicode&lt;/strong&gt;&lt;/a&gt; - AI-assisted development for Java, C#, Python, and a handful of other languages, but not Ruby. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker"&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/a&gt; - A VS Code interface for managing containers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=castwide.solargraph"&gt;&lt;strong&gt;Ruby Solargraph&lt;/strong&gt;&lt;/a&gt; - Provides code completion and inline docs for Ruby.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare"&gt;&lt;strong&gt;Live Share&lt;/strong&gt;&lt;/a&gt; - Enables real-time collaborative coding. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Incredibly useful extensions that are not &lt;em&gt;new&lt;/em&gt; but were new to me
&lt;/h3&gt;

&lt;p&gt;These are two extensions that I discovered during this exercise and added to my own toolkit. I was definitely late to the party on these, but happy to have them now. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=pranaygp.vscode-css-peek"&gt;&lt;strong&gt;CSS Peek&lt;/strong&gt;&lt;/a&gt; - Jump directly to CSS definitions from an &lt;code&gt;id&lt;/code&gt; or &lt;code&gt;class name&lt;/code&gt; in HTML.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight"&gt;&lt;strong&gt;Todo highlight&lt;/strong&gt;&lt;/a&gt; - Highlight &lt;code&gt;TODO&lt;/code&gt; in your code. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The obscure indie
&lt;/h3&gt;

&lt;p&gt;Simple but so useful. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://marketplace.visualstudio.com/items?itemName=aki77.rails-routes"&gt;&lt;strong&gt;Rails Routes&lt;/strong&gt;&lt;/a&gt; - Jump to a route definition from wherever it is being called in the code&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;One well-known developer responded to my question by pasting his &lt;code&gt;plugins.json&lt;/code&gt; file into a DM. It actually ended up being interesting to pick through. Kind of like watching the credits of a movie. &lt;a href="https://gist.github.com/Daniel-Warner-X/108bde41d2768b54e0511a56bc09e748"&gt;Check it out&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;If you have any extensions that you really like and think would be useful to a Ruby developer, please comment.&lt;/p&gt;




&lt;h3&gt;
  
  
  The raw data
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Extension&lt;/th&gt;
&lt;th&gt;Developer&lt;/th&gt;
&lt;th&gt;Mentions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rubocop&lt;/td&gt;
&lt;td&gt;Misogi&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prettier&lt;/td&gt;
&lt;td&gt;Prettier&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESlint&lt;/td&gt;
&lt;td&gt;Dirk Baeumer&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VSCode Ruby&lt;/td&gt;
&lt;td&gt;Stafford Bunk&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ruby&lt;/td&gt;
&lt;td&gt;Peng Lv&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitLens&lt;/td&gt;
&lt;td&gt;Eric Amodio&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ERB Formatter&lt;/td&gt;
&lt;td&gt;Ali Ariff&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intellicode&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Solargraph&lt;/td&gt;
&lt;td&gt;Castwide&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live Share&lt;/td&gt;
&lt;td&gt;Microsoft&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ERB&lt;/td&gt;
&lt;td&gt;Craig Maslowski&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live Server&lt;/td&gt;
&lt;td&gt;Ritwick Dey&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bracket Pair Colorizer&lt;/td&gt;
&lt;td&gt;CoenraadS&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto Close Tag&lt;/td&gt;
&lt;td&gt;Jun Han&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vetur&lt;/td&gt;
&lt;td&gt;Pine Wu&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JS Code Snippets&lt;/td&gt;
&lt;td&gt;charalampos karypidis&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peacock&lt;/td&gt;
&lt;td&gt;John Papa&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stylelint&lt;/td&gt;
&lt;td&gt;Stylelint&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boostrap 4 snippets&lt;/td&gt;
&lt;td&gt;Zaczero&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bootstrap 4, Font Awesome&lt;/td&gt;
&lt;td&gt;Ashok Koyi&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro Snippets&lt;/td&gt;
&lt;td&gt;uncprocore&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redux DevTools 8&lt;/td&gt;
&lt;td&gt;Jingkai&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto Rename Tag&lt;/td&gt;
&lt;td&gt;Jun han&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error Lens&lt;/td&gt;
&lt;td&gt;Alexander&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live Server&lt;/td&gt;
&lt;td&gt;Street Side Software&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rails Go To Spec&lt;/td&gt;
&lt;td&gt;Sporto&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Better TOML&lt;/td&gt;
&lt;td&gt;Bung cip&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code Elixir&lt;/td&gt;
&lt;td&gt;Matt McLoughlin&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Better HAML&lt;/td&gt;
&lt;td&gt;Karuna Murti&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code PDF&lt;/td&gt;
&lt;td&gt;tomoki1207&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Add New Line To Files&lt;/td&gt;
&lt;td&gt;Jeremy Forsythe&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSS Peek&lt;/td&gt;
&lt;td&gt;Pranay Prakash&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rest Client&lt;/td&gt;
&lt;td&gt;Huachao Mao&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ruby Linter&lt;/td&gt;
&lt;td&gt;Cody hoover&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simple Ruby ERB&lt;/td&gt;
&lt;td&gt;Victor Ortiz Heredia&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trailing Spaces&lt;/td&gt;
&lt;td&gt;Shardul Mahadik&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code Database&lt;/td&gt;
&lt;td&gt;Bajdzis&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Todo Highlight&lt;/td&gt;
&lt;td&gt;Wayou Liu&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Endwise&lt;/td&gt;
&lt;td&gt;Kai Wood&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gem Lense&lt;/td&gt;
&lt;td&gt;ninoseki&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rails Routes&lt;/td&gt;
&lt;td&gt;aki77&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>vscode</category>
      <category>ruby</category>
      <category>rails</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
