<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Adorable - Medium]]></title>
        <description><![CDATA[Creative technologists solving business problems for people. - Medium]]></description>
        <link>https://medium.com/adorableio?source=rss----c50809cb2c5---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Adorable - Medium</title>
            <link>https://medium.com/adorableio?source=rss----c50809cb2c5---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 22:26:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/adorableio" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Chris is Adorable]]></title>
            <link>https://medium.com/adorableio/chris-is-adorable-f7c1aeece242?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/f7c1aeece242</guid>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Chris Wilson]]></dc:creator>
            <pubDate>Fri, 13 Apr 2018 18:09:31 GMT</pubDate>
            <atom:updated>2018-04-13T18:50:19.051Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ck3A4MZfsnXeuO9xpjnSng.jpeg" /></figure><p>It pleases Adorable to say that there’s a new Adorb developer on board: Chris Wilson. Chris is a software developer with a sciency background.</p><p>He started out writing FORTRAN for an intro physics class and then never set the keyboard aside. In the intervening years he’s worked at a particle accelerator, fixed computers, and written healthcare software.</p><p>Chris is happiest when he’s learning Something New or gushing about the New Something (repeat). He’s recently dived into embedded software development and amateur radio.</p><p>He conditionally enjoys the outdoors, namely, those times when he can get aboard a sailboat or onto a bike.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f7c1aeece242" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/chris-is-adorable-f7c1aeece242">Chris is Adorable</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Shaun is Adorable]]></title>
            <link>https://medium.com/adorableio/shaun-is-adorable-6cc1aaf8e03d?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/6cc1aaf8e03d</guid>
            <category><![CDATA[blacklivesmatter]]></category>
            <dc:creator><![CDATA[Shaun Huffman]]></dc:creator>
            <pubDate>Fri, 09 Mar 2018 17:34:31 GMT</pubDate>
            <atom:updated>2018-03-08T23:24:27.805Z</atom:updated>
            <content:encoded><![CDATA[<p>Adorable is happy to announce the addition of a new Adorb and Events Coordinator, Shaun Huffman. With his love of people and his vibrant background of Jamaican and Canadian roots, he was destined to find an industry being a people person. His destiny came true after attending the University of Tampa with degree in Public Relations and Advertising; where he developed his professional career in Marketing, Hotel Event Management and Event Planning. As a social networking guru; he loves meeting new people and is a good source to know for finding the best of what Madison has to offer. He also enjoys his time hiking, traveling, watching indie films, and hanging out with close friends.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6cc1aaf8e03d" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/shaun-is-adorable-6cc1aaf8e03d">Shaun is Adorable</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Maggie is Adorable]]></title>
            <link>https://medium.com/adorableio/maggie-is-adorable-beb35d4573f4?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/beb35d4573f4</guid>
            <category><![CDATA[adorable]]></category>
            <category><![CDATA[math]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[ruby]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Magdalena Shemayev]]></dc:creator>
            <pubDate>Thu, 08 Mar 2018 17:06:16 GMT</pubDate>
            <atom:updated>2018-03-08T17:06:16.111Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ca4Zw5nA8cLm9m_9GrwPdg.jpeg" /><figcaption>Magdalena Shemayev</figcaption></figure><p>Adorable is happy to announce the addition of a new Adorb and developer, Maggie Shemayev. Attached to her keyboard since a young age, Maggie has always dabbled in technology, from excursions into hardware and repair to basic site maintenance in college — and upon trying programming at Madison College, found a new passion. Her bachelor’s in math and love of languages leaks into her code: she has yet to find a programming language she doesn’t like, and spends her free time on everything from reading up on the structure of programming languages and writing regular expressions to knitting and coloring books.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=beb35d4573f4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/maggie-is-adorable-beb35d4573f4">Maggie is Adorable</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing the Bureau Standard Agreement]]></title>
            <link>https://medium.com/adorableio/introducing-the-bureau-standard-agreement-d29918cfa407?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/d29918cfa407</guid>
            <category><![CDATA[legal]]></category>
            <category><![CDATA[bureau-of-digital]]></category>
            <category><![CDATA[law]]></category>
            <category><![CDATA[agreement]]></category>
            <category><![CDATA[statement-of-work]]></category>
            <dc:creator><![CDATA[Jim Remsik]]></dc:creator>
            <pubDate>Tue, 20 Feb 2018 20:09:22 GMT</pubDate>
            <atom:updated>2018-02-23T15:05:18.413Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GHFp8HmVymXW8Id3D-IXEw.jpeg" /><figcaption>Sand and Dunes at Charleston, South Carolina</figcaption></figure><p>Owner Summit, an event targeting people who own and operate digital agencies, took place last week in Charleston, SC. Shops with skills ranging from marketing through design &amp; development were on hand.</p><p>Amongst a wide array of thoughtful &amp; helpful presentations from folks like Claire Lew of <a href="http://knowyourcompany.com/">KnowYourCompany</a> to Nancy Lyons of <a href="https://www.clockwork.com/">Clockwork</a> was a presentation by a couple of lawyers. Ugh! 😅</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*JIjvbnMtwkS1Lv4IW88jsg.jpeg" /><figcaption>Gabe Levine is Principal Attorney at Groundwork Legal, Inc., a Bay Area-based virtual law firm that provides legal services to the creators of digital products.</figcaption></figure><p>Gabe Levine and Josh Barrett teamed up to create a starting point agreement for digital agencies. If you’ve run a shop or dealt with contracts 9 times out of 10 you’re asked to sign paperwork that is not optimized for our industry.</p><p>One client of ours included language in their paperwork which stated if they weren’t happy at the end of the project they had the opportunity to simply return all of our work product and not pay for it. Unfortunately, in a service business all you’ve got is your time and we trade that for money.</p><p>After seeing this time and again these folks joined forces to create the <a href="http://bureauofdigital.com/standard-agreement">Bureau Standard Agreement</a>. There are a number of disclaimers listed in the document the most important of which is that using this document does not mean you don’t need a lawyer.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/300/1*j_aYGZ3Y6f0BRGaNyIbhFw.jpeg" /><figcaption>Josh is principal and founder of CreateLegal, a Portland, Oregon law firm designed for businesses doing creative work.</figcaption></figure><p>What it does mean is that you have a reasonable starting point for the conversations that happen at the beginning of projects. And, ideally, the more people that use this agreement the further refined and more sane the defaults will become.</p><p>If you’re a development heavy shop, like we are at <a href="http://adorable.io/">Adorable</a>, you should keep an eye out for updates as this inaugural version is targeting design shops and probably will leave you wanting for intellectual property carve-outs. As luck would have it Gabe has been our lawyer for the majority of our existence as a company. I can tell you that I am able to confidently walk in to calls with my clients because of his work.</p><p>The <a href="http://bureauofdigital.com/standard-agreement">Bureau Standard Agreement</a> is a helpful starting point to frame the conversation with your clients and counsel, if you’re not lucky enough to already be working with Gabe, Josh, or someone else who knows their stuff.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uYY1rYEaRP1kg_JQncUMyw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d29918cfa407" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/introducing-the-bureau-standard-agreement-d29918cfa407">Introducing the Bureau Standard Agreement</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The pitfalls of being a design island in a small software company]]></title>
            <link>https://medium.com/adorableio/the-pitfalls-of-being-a-design-island-in-a-small-software-company-7f47c1eb1f68?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/7f47c1eb1f68</guid>
            <category><![CDATA[collaboration]]></category>
            <category><![CDATA[struggle]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[isolation]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Kelly Rauwerdink]]></dc:creator>
            <pubDate>Tue, 30 Jan 2018 18:42:52 GMT</pubDate>
            <atom:updated>2018-01-30T16:06:34.586Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f6Tlb5UXzNyZjS6ALZRzgA.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/photos/u6HqyHsdEWI?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Jad Limcaco</a> on <a href="https://unsplash.com/search/photos/lonely-island?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure><p>At times, I feel like an island.</p><p>As a software designer, I have been a team of one almost my entire career.</p><p>While it can be inspiring to have a blank canvas with complete autonomy, it can also be daunting to take on such responsibility solo. Working alone on design at my company or on a client project usually means that I will have a wide spectrum of roles. I begin a project by interviewing my client to find out what they’re trying to achieve. I then do market research and come up with some ideas to propose to them for how we might go about meeting their requirements. From there, I continually switch out my hats of being a visual designer and a developer in order to bring the ideas to life.</p><p>I have a sneaking suspicion that there are lots of other islands out there, too. It’s important for us to share our knowledge, challenges, and successes, and most importantly, find ways to involve the talented people around us in our design process in order to become a part of the mainland.</p><h4><strong>Design Isolation</strong></h4><p>Isolation comes in two forms when we discuss my design experience. Isolation can be felt physically by working alone, and also felt mentally when there’s no one to collaborate or share ideas with.</p><p>There are at least two commonly held beliefs at software companies that are root causes of design isolation. I do not believe that they benefit design quality for the reasons that I discuss below.</p><ul><li>Design is a solo activity.</li><li>Design can only be advised by other designers.</li></ul><h4><strong>Working Alone</strong></h4><p>In contrast to how design projects usually work, our development team typically uses pair programming as a way to reach the best outcomes on a project. In this mode of working, two developers collaborate together on one computer to solve a problem together using code. We use it for ramping someone up on a project, to learn new languages and skills, problem solve and transfer knowledge.</p><p>Design, however, is not usually a paired activity; this is de facto true when you are the only designer in house or the only designer on a project. Some reasons for this could be that developers feel like they don’t have much expertise to contribute to design. Developers may have an idea that they aren’t good at design, or that their ideas aren’t sophisticated enough to be shared. Additionally, developers are often under pressure to finish the work that they have been assigned for their iteration cycle. Therefore, it doesn’t occur to them or their managers that they might be spending their time wisely to pair with a designer.</p><h4><strong>Catching The Issues</strong></h4><p>Unfortunately, I usually don’t stumble upon the effects of my decisions and actions until they reach the code phase in a project. The little, unchallenged issues that skipped past my attention now get worked through the implementation phase and always bubble to the surface. By that time, these decisions are being seen by the client, good or bad, and developers and I have to create solutions on the fly. Typically, project deadlines are short in my work, so decisions have to be made quickly. If the choices I made earlier are not the best for the project, I might not have an opportunity to redirect or iterate, or risk extending my deadline and putting stress on the other people on the team or project.</p><p>Input from other people early and often in the design process always has a positive effect on the project quality and timeline.</p><h4><strong>The Design Mindset</strong></h4><p>As with any creative work, if someone isn’t directly involved in the process of creating, design can look like magic. Often there is a perception that it takes no time at all to do design. Team members who aren’t involved with design have difficulty conceptualizing the decisions and thought processes that were put into the work, and therefore can have more difficulty empathizing with the overall process.</p><p>This is one reason why it can be beneficial to the project for developers in particular to get exposure to design work. They can get a deep understanding of the product they’re building very quickly, which makes it more likely that they will build the right thing the first time around. Design also gets exposure to the issues that developers are facing (what does the data structure look like, again?)</p><p>Developers and designers spending time collaborating is beneficial to both roles.</p><h4><strong>Who Is Qualified To Help?</strong></h4><p>When I am the only one making design decisions, they are solely based on <strong><em>my</em></strong> experiences and interactions with the world. The choices I make are in response to what I remember doing, seeing, and hearing consciously or subconsciously, that can be applied to the design problems I face. Unfortunately, that means that all my assumptions stick, and reach many people. I need to take a diverse set of views into consideration so that I understand the variety of needs and interests of my audience.</p><p>To me, it feels especially important to emphasis the importance of collaboration because I credit a lot of my success to experiences that I’ve had in which I was challenged or questioned. I excelled in school because I had skilled people to bounce ideas off of, learn new techniques from, or to use as inspiration.</p><p>Developers aren’t the only other role that can cross-pollinate with design. Having a design opinion makes you a human with unique experiences and a valid understanding of the world. What this means is, if you’re a person who isn’t me, chances are that I will be interested in hearing what you have to say about a problem. It helps me to know what other people’s interpretations are of the things I design, so I can express intentions across a broader audience.</p><h4><strong>Beyond Design</strong></h4><p>As the only designer on my team or project, I am responsible for much more than creating the UX/UI and visuals. The additional tasks outside of the design title range from copywriting/microcopy, cross-browser testing, client communication &amp; feedback loops, project management, and front-end development. These types of activities require different types of thought, time and skill. These tasks often fall to the designer, but can also be dispersed throughout a team in the absence of a true product manager.</p><p>This takes some conscious organizational work and buy-in from the other team members, but the effect is that everyone is more engaged overall and the shipped product is of higher quality.</p><h3><strong>What Can Be Done?</strong></h3><h4>Check the pulse</h4><p>Say ‘Hi,’ to the designer in your team’s neighborhood. Ask to see if they want to discuss what they’re working on, or collaborate on any upcoming work. Talk to them to find out if they’ve been getting enough useful input on their projects.</p><h4>Talk to your manager(s)</h4><p>Sometimes isolation creeps up on you. If you think your designer isn’t getting enough participation from the people around and are taking on a larger share of the work than they can handle, chat with your manager about whether you and your teammates can re-allocate some of that labor.</p><h4>Try some design!</h4><p>Pick a problem to solve, and try to solve it using design! A pen and paper is enough to sketch out what an application might look like to solve a specific problem. It’s fun, and helps you get into a product oriented design mindset.</p><p><em>You can find the work of Kelly’s at </em><a href="http://www.dribbble.com/missingdink"><em>Dribbble</em></a><em> . She is the Art Director/Illustrator/Developer at the software consultancy, </em><a href="http://www.adorable.io/"><em>Adorable</em></a><em> in Madison, Wisconsin.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7f47c1eb1f68" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/the-pitfalls-of-being-a-design-island-in-a-small-software-company-7f47c1eb1f68">The pitfalls of being a design island in a small software company</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ludum Dare 40 Retrospective]]></title>
            <link>https://medium.com/adorableio/ludum-dare-blog-post-54dc08307242?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/54dc08307242</guid>
            <category><![CDATA[ludum-dare]]></category>
            <category><![CDATA[game-development]]></category>
            <category><![CDATA[game-jams]]></category>
            <dc:creator><![CDATA[Casey Brant]]></dc:creator>
            <pubDate>Mon, 18 Dec 2017 22:30:17 GMT</pubDate>
            <atom:updated>2017-12-20T22:31:00.633Z</atom:updated>
            <content:encoded><![CDATA[<p>Last weekend, I participated in <a href="http://ludumdare.com/compo/about-ludum-dare/">Ludum Dare 40</a>. Ludum Dare is a global game jam where participants create a game in 48–72 hours. Once your game is finished, you post it on the Ludum Dare website for people to play and review. There were three big firsts for me with this event: it was my first time making something with Unity, my first time completing a solo game project, and my first time livestreaming development (which had some technical difficulties but was still fun). Here’s a quick recap of how the weekend went.</p><h4>My Game: SHOPPOTRON</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pVMTQfvt3XdlPGM6IUAmNQ.png" /><figcaption>Go, SHOPPOTRON, go!</figcaption></figure><p>The game I came up with is called <a href="https://ldjam.com/events/ludum-dare/40/shoppotron">SHOPPOTRON</a>. You play as a robot who loves shopping, and your goal is to collect every item in the store and take it to the cashier before your battery drains. It’s a super simple game, and there are lots of ways I could make it better, but I’m proud of overcoming my normal perfectionism and shipping something rough out into the world.</p><h4>Day 1: Brainstorming, planning, building</h4><p>The event started at 8:00pm in my timezone. Since I’m an old man who can’t pull all-nighters any more, I spent about three hours getting started and then went to bed. I brainstormed game ideas based on the theme (“The more you have, the worse it is”), created a Unity project, and got a basic build working.</p><p>My <a href="http://alistair.cockburn.us/Walking+skeleton">walking skeleton</a> build didn’t have anything more in it than a placeholder splash screen, but I wanted to make sure there was less chance of disaster while frantically trying to build/deploy my game at the end of the jam.</p><p>I streamed this first session on Twitch, and I’m glad I did, because <a href="https://twitter.com/benedictfritz">one of the people in my chat</a> made a suggestion that combined a few ideas I’d been brainstorming into what became SHOPPOTRON. Thanks, Twitch chat!</p><h4>Day 2: Designing and Coding</h4><p>On Saturday I woke up, had breakfast, and got back into it. They say sleeping on it is the best way to solve problems, and sure enough, I had basically all the pieces mentally in place when I sat down to work — or so I thought!</p><p>My goal for the second day was to get all of the coding done and create some placeholder assets to test with. I felt like I had a strong idea of where I was going, so I dove right in. Something pretty cool happened while I was building the test pieces, though.</p><p>I botched some Unity settings that I didn’t understand and got wonky physics on a couple of objects when they interacted. The result of this interaction was <strong>way</strong> more interesting than what I had been building. As luck would have it, I wasn’t too far into things yet to change direction, so I scrapped the code that I had and leaned into this type of physical interaction. That happy accident wound up becoming the main focus of the gameplay. Bob Ross was right!</p><h4>Day 3: Drawing (and more coding)</h4><p>Sunday was all about art assets. I am a <strong>horrible</strong> artist (as is evident in the final game) so this took a long time and wound up not very good. I drew all of the sprites in <a href="https://www.aseprite.org/">Aseprite</a>, which was lots of fun to play around with.</p><p>Something I hadn’t thought about before with art is that when you’re bad at it, it’s not just that you can’t get results that look how you want. It’s also that you’re <strong>slow</strong>. I had intended to spend half a day on assets, but this wound up taking me all of Sunday.</p><p>Ultimately, I think the intentionally-wonky aesthetic works for SHOPPOTRON, but art skills are definitely something I’ll be working on before releasing my next game.</p><h4>Day 4: Audio Creation and Level Design</h4><p>Last day! Monday at 8pm was the deadline, so today was about pulling everything together. I started the morning out by making sound effects and music. I used <a href="https://www.ableton.com/en/products/live-lite/">Ableton Live Lite</a> and <a href="http://www.audacityteam.org/">Audacity</a> for both tasks. I kept things super minimalist here since I don’t have any experience with audio design, but I’m actually fairly happy with the results. Just like with the art, I want to invest time in learning that skill before my next game, but for this game I like the result.</p><p>The last thing to do was level design. I had built all the component pieces, but as of lunchtime on Monday hadn’t actually put them together into a game yet. So I spent the remaining several hours of the jam slapping together 12 levels that demonstrated increasingly absurd ramifications of the game’s rules.</p><p>I got things all wrapped up around 7:00pm, shipped my builds up to itch.io for download, and wrote the description on the Ludum Dare website!</p><h4>Lessons Learned</h4><p>I have always had a hard time diving into things that I haven’t spent a lot of time studying beforehand, so this was <strong>great</strong> practice at breaking out of my comfort zone. Building all of the pieces of a game forced me to get comfortable fast with being out of my depth in many different ways simultaneously. I know I’ll be able to carry that forward to other things and decrease the average time it takes me to dive into things when I’m not totally confident.</p><p>I also had to make peace with shipping suboptimal and messy code. Because of the time crunch, there were several problems I knew I <strong>could</strong> solve more elegantly that I had to leave unsolved and hacked around because coming up with the “right” answer would have taken me too long. Obviously, I don’t want to start writing code this way for my day job, but it was good practice at fine-tuning my sense of when something is good enough.</p><p>Overall, Ludum Dare 40 was great fun, and I’m super glad I participated. If you haven’t done a game jam before, I highly recommend finding one that seems cool and diving in! And if you have a few spare minutes, <a href="https://ldjam.com/events/ludum-dare/40/shoppotron">play my game</a>!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=54dc08307242" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/ludum-dare-blog-post-54dc08307242">Ludum Dare 40 Retrospective</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Modern JavaScript ctags configuration]]></title>
            <link>https://medium.com/adorableio/modern-javascript-ctags-configuration-199884dbcc1?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/199884dbcc1</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[ctags]]></category>
            <category><![CDATA[vim]]></category>
            <dc:creator><![CDATA[Veezus Kreist]]></dc:creator>
            <pubDate>Fri, 13 Oct 2017 13:03:48 GMT</pubDate>
            <atom:updated>2017-10-13T14:02:07.160Z</atom:updated>
            <content:encoded><![CDATA[<p>The other day I was surfing around for a solution for this problem and came across <a href="https://dance.computer.dance/posts/2015/04/using-ctags-on-modern-javascript.html">Ray Grasso’s excellent post</a> from April of 2015. I recommend reading the post for his solution; I’ve just modified it a bit. He also links to his dotfiles which include updates since the content of the post.</p><h3>About ctags</h3><p>Many years ago I became familiar with the basic ctags functionality in vim. But ctags itself is much more flexible and can be consumed by most editors. I highly encourage y’all to check out the <a href="http://ctags.sourceforge.net/">ctags</a> website, as well as plugins for popular editors such as <a href="https://marketplace.visualstudio.com/items?itemName=jaydenlin.ctags-support">vscode</a>, <a href="https://atom.io/packages/atom-ctags">atom</a>, and <a href="https://github.com/SublimeText/CTags">sublime text</a>.</p><p>Essentially, ctags will scan all files you ask it to and look for what it understands to be symbol definitions. These are classes, functions, variable names, and so on. ctags has a large list of known languages, but the JavaScript support hasn’t yet been the greatest.</p><p>To start, make sure you have exuberant-ctags installed, as opposed to regular ctags. You can brew install ctags on a macOS machine, for example, which will install the latest version of exuberant-ctags.</p><h3>Inside vim</h3><p><strong>Generating ctags</strong></p><p>I use ctags to jump to the definition of a symbol in a given project. There are generally two ways I achieve this: from a cursor over the top of a symbol and using normal-mode commands to search the list of defined tags.</p><p><strong>Jumping to a definition under the cursor</strong></p><p>While reading code and the cursor is on top of a known symbol, pressing Ctrl+] will jump to that definition.</p><p><strong>Searching the available tags</strong></p><p>If you know the tag you want but are nowhere near it, you can :tag &lt;tagname&gt; to jump to it’s definition. The :tag command supports tab completion; I often use :tag searches to jump to class or constant definitions.</p><p><strong>Navigating through multiple matches</strong></p><p>Either of these ways of jumping to definition may result in multiple tag matches. You can navigate the tag stack with :tnext (briefly, as :tn) or :tprevious (:tp). If you’d like to see a list of definitions found for any given tag, you can :tselect (:tsel).</p><p><strong>Including other packages in your generated tags file</strong></p><p>Although it can take a prohibitively long time based on the size of your dependency graph, I have found it useful in some cases to include my node_modules directory in my tags file. Whereas I usually just include basic directories like app, config, and lib, there are times when I’ll want to inspect the source of a module in the same session as my application’s code. One example would be when I’m using a library module for the first time and I’m unsure how things are working under the covers, or why what I expect to happen just isn’t.</p><h3>Your new .ctags file</h3><p>After a bit of pruning and studying, this is the JavaScript-specific portion of my ~/.ctags file looks like this:</p><pre>--exclude=node_modules<br>--exclude=gulp</pre><pre>--languages=-javascript</pre><pre>--langdef=js<br>--langmap=js:.js<br>--langmap=js:+.jsx</pre><pre>--regex-js=/[ \t.]([A-Z][A-Z0-9._$]+)[ \t]*[=:][ \t]*([0-9&quot;&#39;\[\{]|null)/\1/n,constant/</pre><pre>--regex-js=/\.([A-Za-z0-9._$]+)[ \t]*=[ \t]*\{/\1/o,object/<br>--regex-js=/[&#39;&quot;]*([A-Za-z0-9_$]+)[&#39;&quot;]*[ \t]*:[ \t]*\{/\1/o,object/<br>--regex-js=/([A-Za-z0-9._$]+)\[[&quot;&#39;]([A-Za-z0-9_$]+)[&quot;&#39;]\][ \t]*=[ \t]*\{/\1\.\2/o,object/</pre><pre>--regex-js=/([A-Za-z0-9._$]+)[ \t]*=[ \t]*\(function\(\)/\1/c,class/<br>--regex-js=/[&#39;&quot;]*([A-Za-z0-9_$]+)[&#39;&quot;]*:[ \t]*\(function\(\)/\1/c,class/<br>--regex-js=/class[ \t]+([A-Za-z0-9._$]+)[ \t]*/\1/c,class/<br>--regex-js=/([A-Za-z$][A-Za-z0-9_$()]+)[ \t]*=[ \t]*[Rr]eact.createClass[ \t]*\(/\1/c,class/<br>--regex-js=/([A-Z][A-Za-z0-9_$]+)[ \t]*=[ \t]*[A-Za-z0-9_$]*[ \t]*[{(]/\1/c,class/<br>--regex-js=/([A-Z][A-Za-z0-9_$]+)[ \t]*:[ \t]*[A-Za-z0-9_$]*[ \t]*[{(]/\1/c,class/</pre><pre>--regex-js=/([A-Za-z$][A-Za-z0-9_$]+)[ \t]*=[ \t]*function[ \t]*\(/\1/f,function/</pre><pre>--regex-js=/(function)*[ \t]*([A-Za-z$_][A-Za-z0-9_$]+)[ \t]*\([^)]*\)[ \t]*\{/\2/f,function/<br>--regex-js=/[&#39;&quot;]*([A-Za-z$][A-Za-z0-9_$]+)[&#39;&quot;]*:[ \t]*function[ \t]*\(/\1/m,method/<br>--regex-js=/([A-Za-z0-9_$]+)\[[&quot;&#39;]([A-Za-z0-9_$]+)[&quot;&#39;]\][ \t]*=[ \t]*function[ \t]*\(/\2/m,method/</pre><pre>--langdef=typescript<br>--langmap=typescript:.ts<br>--regex-typescript=/^[ \t]*(export)?[ \t]*class[ \t]+([a-zA-Z0-9_]+)/\2/c,classes/<br>--regex-typescript=/^[ \t]*(export)?[ \t]*module[ \t]+([a-zA-Z0-9_]+)/\2/n,modules/<br>--regex-typescript=/^[ \t]*(export)?[ \t]*function[ \t]+([a-zA-Z0-9_]+)/\2/f,functions/<br>--regex-typescript=/^[ \t]*export[ \t]+var[ \t]+([a-zA-Z0-9_]+)/\1/v,variables/<br>--regex-typescript=/^[ \t]*var[ \t]+([a-zA-Z0-9_]+)[ \t]*=[ \t]*function[ \t]*\(\)/\1/v,varlambdas/<br>--regex-typescript=/^[ \t]*(export)?[ \t]*(public|private)[ \t]+(static)?[ \t]*([a-zA-Z0-9_]+)/\4/m,members/<br>--regex-typescript=/^[ \t]*(export)?[ \t]*interface[ \t]+([a-zA-Z0-9_]+)/\2/i,interfaces/<br>--regex-typescript=/^[ \t]*(export)?[ \t]*enum[ \t]+([a-zA-Z0-9_]+)/\2/e,enums/<br>--regex-typescript=/^[ \t]*import[ \t]+([a-zA-Z0-9_]+)/\1/I,imports/</pre><h3>Wrapping it up into an alias</h3><p>Finally, and following Mr. Grasso’s example, let’s get rid of some over-greedy matching and wrap it up into a nice alias:</p><p>alias jtags=”ctags -R app config lib &amp;&amp; sed -i ‘’ -E ‘/^(if|switch|function|module\.exports|it|describe).+language:js$/d’ tags”</p><p><em>Happy vimming!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=199884dbcc1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/modern-javascript-ctags-configuration-199884dbcc1">Modern JavaScript ctags configuration</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Debugging ES6 in Visual Studio Code]]></title>
            <link>https://medium.com/adorableio/debugging-es6-in-visual-studio-code-b323492430ae?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/b323492430ae</guid>
            <category><![CDATA[es6]]></category>
            <category><![CDATA[npm]]></category>
            <category><![CDATA[visual-studio-code]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[debugging]]></category>
            <dc:creator><![CDATA[Zachery Moneypenny]]></dc:creator>
            <pubDate>Thu, 05 Oct 2017 19:13:11 GMT</pubDate>
            <atom:updated>2017-10-05T20:10:47.204Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qEnHypuxxzzQXKyTdRvy6A.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/photos/mVLvomAz9oo">chuttersnap</a> on <a href="https://unsplash.com/">Unsplash</a></figcaption></figure><p>Debugging <a href="https://github.com/DrkSephy/es6-cheatsheet">ES6 Javascript code</a> in the <a href="https://code.visualstudio.com/">Visual Studio Code</a> IDE can be a painful process to setup. In this article we’ll walk through <em>one way</em> to set it up and get productive.</p><p>The challenge to getting this working is <strong>rapid rate of change </strong>of <strong>the Javascript language, the Javascript transpilation tooling </strong>as well as <strong>the Visual Studio Code configuration interface</strong>. Both have changed drastically in the last year, rendering most previous tutorials and blog posts out-of-date. For example, <a href="https://gist.github.com/dchowitz/83bdd807b5fa016775f98065b381ca4e">this excellent gist</a> was the basis for much of this article, but it’s written against the 1.0 version of vscode’s launch.json and tasks.json specification.</p><p>Let’s run down the characteristics of the application we’d like to debug:</p><ul><li>Written in ES6, transpiled to ES5 with babel-cli</li><li>Imports other internal files, as well as external dependencies</li><li>Uses an executable file (via chmod +x) as an entry point</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/aee87029f456a8c89f3d0e5b1b54ea92/href">https://medium.com/media/aee87029f456a8c89f3d0e5b1b54ea92/href</a></iframe><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/481bd821f11be92ed55105105c573746/href">https://medium.com/media/481bd821f11be92ed55105105c573746/href</a></iframe><p>Let’s also take a look at the package.json that implements the transpilation in various scripts. Note that our application files reside in src/bin and are transpiled to dist/bin, while the lib files it loads reside in src and are transpiled to dist.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a7773c94d7d1470ff16f7caba0f0bd35/href">https://medium.com/media/a7773c94d7d1470ff16f7caba0f0bd35/href</a></iframe><p><strong>It’s important that you generate source maps for your ES6 code —</strong> in the code above we pass the --source-maps switch to the babel tool to generate *.map files alongside the transpiled ones in the dist directory. You may also generate inline maps by using --source-maps inline instead.</p><p>We also need to specify what environment we’re targeting with our babel transpilation. Create a file named .babelrc in your root folder. We’re going to use the babel-preset-env module to target a recent version of Node.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/302015011ed9afeb14d1ad600e292935/href">https://medium.com/media/302015011ed9afeb14d1ad600e292935/href</a></iframe><p>We should now have all of the tools to write our launch.json:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/37dc848e3e1b8df96d253cf2c4857f83/href">https://medium.com/media/37dc848e3e1b8df96d253cf2c4857f83/href</a></iframe><p>Note that we’re invoking npm run build via the preLaunchTask: &quot;npm: build&quot; property in the launch config. That way every time we debug we know we’re running the latest and greatest transpiled code. If you haven’t worked with the <a href="https://code.visualstudio.com/docs/editor/tasks">Visual Studio Code Tasks system</a> before, it’s worth noting that vscode recognizes an npm project via the presence of a package.json and automatically configures Tasks based on the items in the scripts config. In our package.json we have a build task that removes the current dist directory and rebuilds both the lib and bin source with the correct configuration for each. We can refer to these auto-generated Tasks in our launch configuration by the names that vscode generates (hence why npm run build becomes npm: build in the launch config.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/422/1*UxNILTpTue_Ib6eF6h39og.png" /></figure><p>That should be it! You should now see the <strong>Debug Increment Command </strong>launch configuration when you switch to the Debug view in Visual Studio Code.</p><p>Clicking on the green Start Debugging button to the left of the launch configuration should run npm run build first and then launch the app under the debugger. If you set no breakpoints it will likely just run and end, unless you set stopOnEntry: true in the launch configuration.</p><p>Set some breakpoints in src/bin/app.js and hit the Start Debugging button again and we should now see execution halt at the breakpoint and give us all the goodies we want out of a visual debugger (local variables, watch window, call stack, console, etc.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/885/1*kbmDLmIgb1C9052CmbGR2A.png" /><figcaption>Breakpoint hit: success!</figcaption></figure><p>This tutorial may be helpful and up-to-date for anywhere between 14 nanoseconds and 6 months as the various tools change, but for those writing npm modules with possible bin scripts included this is the best way that I know of right now to be able to write ES6 code while delivering and debugging the transpiled ES5 equivalent functionality.</p><p>Happy debugging!</p><p><strong>UPDATE: Thirty-two minutes after I posted this, my prophecy was realized and the September 2017 update to Visual Studio Code was released, <em>deprecating</em> the usage of </strong><strong>${workspaceRoot} in launch and task configurations. If you have updated to version 1.17.0 or newer of vscode, then you should now use </strong><strong>${workspaceFolder} instead.</strong></p><p><em>Zachery Moneypenny is a Principal Developer at adorable.io. Rubyist for a long time, with experience in Golang and Javascript as well but moving towards Elixir and loving it.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b323492430ae" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/debugging-es6-in-visual-studio-code-b323492430ae">Debugging ES6 in Visual Studio Code</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[React native projections and templates using vim-projectionist]]></title>
            <link>https://medium.com/adorableio/react-native-projections-and-templates-using-vim-projectionist-adcb9333cf4f?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/adcb9333cf4f</guid>
            <category><![CDATA[react-native]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[vim]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Veezus Kreist]]></dc:creator>
            <pubDate>Fri, 29 Sep 2017 17:10:06 GMT</pubDate>
            <atom:updated>2017-09-29T18:19:16.147Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Recently I had the opportunity to solve some long-standing file navigation and templating complaints with my react-native vim setup.</em></p><h3>The Problem</h3><p>While developing ruby on rails applications, which I’ve been doing for ten years, I’ve relied on the powerful and popular <a href="https://github.com/tpope/vim-rails">rails.vim</a> written by <a href="https://tpo.pe/">tpope</a>. I like that rails.vim makes me decide <em>what</em> I want before going and getting it (so I don’t sit and stare at a list of files) and another part is the built-in templates for new files that rails.vim provides. For example, :Emodel user! will generate a blank ActiveRecord model class that inherits from ActiveRecord::Base.</p><p>I’ve been developing react-native apps for some time now, and I’ve been relying on vim’s built-in :e command combined with tab-completing directories and files. This has been tedious, to say the least. I wished I had the familiar navigation and new-file templates from rails.vim. I recalled, though, that rails.vim had been rewritten some time ago and <a href="https://github.com/tpope/vim-projectionist">vim-projectionist</a> had come out of the refactoring.</p><h3>The Solution</h3><p>I installed <a href="https://github.com/tpope/vim-projectionist">vim-projectionist</a>, created a .projections.json in the project root, and set up some simple file navigations with ease. When I got to writing templates, however, I had some issues with curly braces. The line import React, { Component } from &#39;react-native&#39;;, as an example, would fail to be imported into the template. This is because vim-projectionist uses curly braces to denote placeholders and Component is not a valid placeholder. To output curly braces in your template, you’ll need to use the {open} and {close} placeholders.</p><p><a href="https://github.com/tpope/vim-projectionist">vim-projectionist</a> supports easy navigation to and from test files and to “alternate” and “related” files. I haven’t yet decided how I’d like to use those, so I’m leaving those sections empty until I’ve decided on a sensical set of defaults.</p><p>Here’s what I’ve got so far for my react-native `.projections.json` file:</p><pre>{<br>  &quot;app/actions/*.js&quot;: {<br>    &quot;type&quot;: &quot;action&quot;<br>  },<br>  &quot;app/containers/*.js&quot;: {<br>    &quot;type&quot;: &quot;container&quot;,<br>    &quot;template&quot;: [<br>      &quot;import React, {open} Component {close} from &#39;react&#39;;\n&quot;,<br>      &quot;export default class {capitalize} extends Component {&quot;,<br>      &quot;  render () {&quot;,<br>      &quot;    return (&quot;,<br>      &quot;    );&quot;,<br>      &quot;  };&quot;,<br>      &quot;}&quot;,<br>      &quot;&quot;,<br>      &quot;export default connect(&quot;,<br>      &quot;  state =&gt; ({open}state: state{close}),&quot;,<br>      &quot;  dispatch =&gt; ({open}actions: bindActionCreators(actions, dispatch){close})&quot;,<br>      &quot;)({capitalize});&quot;<br>    ]<br>  },<br>  &quot;app/components/*.js&quot;: {<br>    &quot;type&quot;: &quot;component&quot;,<br>    &quot;template&quot;: [<br>      &quot;import React, {open} Component {close} from &#39;react&#39;;\n&quot;,<br>      &quot;export default class \{} extends Component {&quot;,<br>      &quot;  render () {&quot;,<br>      &quot;    return (&quot;,<br>      &quot;    );&quot;,<br>      &quot;  };&quot;,<br>      &quot;}&quot;<br>    ]<br>  },<br>  &quot;app/reducers/*.js&quot;: {<br>    &quot;type&quot;: &quot;reducer&quot;<br>  },<br>  &quot;package.json&quot;: {<br>    &quot;type&quot;: &quot;package&quot;<br>  },<br>  &quot;app/services/*Service.js&quot;: {<br>    &quot;type&quot;: &quot;service&quot;<br>  },<br>  &quot;app/styles/*.js&quot;: {<br>    &quot;type&quot;: &quot;style&quot;,<br>    &quot;template&quot;: [<br>      &quot;import {open} Platform, StyleSheet {close} from &#39;react-native&#39;;&quot;,<br>      &quot;import COLORS from &#39;../config/Colors&#39;;&quot;,<br>      &quot;import FONTS from &#39;../config/Fonts&#39;;\n&quot;,<br>      &quot;export default StyleSheet.create({&quot;,<br>      &quot;});&quot;<br>    ]<br>  },<br>  &quot;app/Store.js&quot;: {<br>    &quot;type&quot;: &quot;store&quot;<br>  },<br>  &quot;app/Root.js&quot;: {<br>    &quot;type&quot;: &quot;root&quot;<br>  }<br>}</pre><h3>Reference</h3><p>vim-projectionist supports the following placeholders. With the exception of {open} and {close}, which output curly braces, the ones you’ll be most interested in are case transformations. You can always see all the available transformations inside your vim session with<br>:let g:projectionist_transformations.</p><pre>{dot}<br>{underscore}<br>{backslash}<br>{colons}<br>{hyphenate}<br>{blank}<br>{uppercase}<br>{camelcase}<br>{capitalize} — aliased as \{}<br>{snakecase}<br>{dirname}<br>{basename}<br>{singular}<br>{plural}<br>{open}<br>{close}</pre><p>Big thanks to <a href="http://tpo.pe/">tpope</a> for making my life so much easier!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=adcb9333cf4f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/react-native-projections-and-templates-using-vim-projectionist-adcb9333cf4f">React native projections and templates using vim-projectionist</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CPAs Are a Secret Ally]]></title>
            <link>https://medium.com/adorableio/cpas-are-a-secret-ally-fbd0693c978b?source=rss----c50809cb2c5---4</link>
            <guid isPermaLink="false">https://medium.com/p/fbd0693c978b</guid>
            <category><![CDATA[business]]></category>
            <category><![CDATA[networking]]></category>
            <category><![CDATA[cpa]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <dc:creator><![CDATA[Jen Remsik]]></dc:creator>
            <pubDate>Fri, 29 Sep 2017 16:06:41 GMT</pubDate>
            <atom:updated>2017-09-29T17:01:35.775Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0gFvRKYMQgphsXD8FnMt7Q.jpeg" /><figcaption>Artwork by Kelly Rauwerdink</figcaption></figure><p>As a small business owner many hats are often needed. For a time juggling those hats will work; however, there will come a point when an expert is needed. Where do you begin to find that expert?</p><p>At <a href="https://www.adorable.io/">Adorable</a>, we often turn to our Certified Public Accountant (CPA) at <a href="http://pscpas.com/">Port &amp; Sacks, CPAs, S.C.</a> for help. Think about it, your CPA works for a number of different people in different industries. When you find that you need help, chances are they will know someone.</p><p>Back in 2014, we needed a partnership agreement drafted. It just happened we had a meeting scheduled with Port &amp; Sacks. Toward the end of the meeting, they asked if there was anything else they could help us with. We took them up on their offer and asked if they could recommend an attorney to draft a partnership agreement. As hoped, they provided a few recommendations.</p><p>Instead of spending days researching options, we had a few recommendations with introductions and an appointment scheduled within hours.</p><p>Your CPA is a great resource for expert tools such as bookkeeping software and payroll services, to name a few. These recommendations are often tools that they are familiar with, that they trust and that are easy for them to integrate with. There is no need to start from scratch researching multiple options when your CPA can narrow down that research to a couple.</p><p>The next time you need help and you are not sure where to start, turn to your CPA for a recommendation. You will be surprised by their many resources.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fbd0693c978b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/adorableio/cpas-are-a-secret-ally-fbd0693c978b">CPAs Are a Secret Ally</a> was originally published in <a href="https://medium.com/adorableio">Adorable</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>