<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Engineering · @jnjosh’s internet weblog</title>
    <link>https://jnjosh.com/categories/engineering/</link>
    <description>Internet weblog of Software (Mac, iOS, Web) Developer, Josh Johnson.</description>
    <language>en</language>
    <lastBuildDate>Thu, 06 Oct 2022 23:27:17 -0400</lastBuildDate>
    <atom:link href="https://jnjosh.com/categories/engineering/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Why Monorepos?</title>
      <link>https://jnjosh.com/workshop/posts/why-monorepos/</link>
      <pubDate>Thu, 06 Oct 2022 23:27:17 -0400</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/why-monorepos/</guid>
      <description>&lt;p&gt;I really like the idea of &amp;ldquo;asking a lot of dumb questions to learn fast&amp;rdquo; and while I don&amp;rsquo;t think this is a dumb question it&amp;rsquo;s kind of dumb in that it&amp;rsquo;s a controversial question on the internet. Maybe I can learn something at least? So here it goes.&lt;/p&gt;&#xA;&lt;p&gt;Why are so many developers so smitten with monorepos?&lt;/p&gt;&#xA;&lt;p&gt;What&amp;rsquo;s a monorepo? From &lt;a href=&#34;https://en.wikipedia.org/wiki/Monorepo&#34;&gt;Wikipedia&lt;/a&gt;, it&amp;rsquo;s a &amp;ldquo;software development strategy where code for many projects is stored in the same repository&amp;rdquo;. All your different apps, libraries, and utilities are in one large repository, a &amp;ldquo;shared codebase&amp;rdquo;. As you can imagine stashing a bunch of disparate projects into one large repository leads to some problems, namely size. This leads to tools like &lt;a href=&#34;https://rushjs.io&#34;&gt;Rush&lt;/a&gt; for Javascript developers to help manage the monorepo. A lot of large tech companies, including those I&amp;rsquo;ve worked with use this. Continuing on Wikipedia we see some benefits:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ease of code reuse&lt;/strong&gt; - when all the code is in one big directory you can just reference anyone else&amp;rsquo;s code (libraries ore even projects) without needing any sort of dependency management or semantic versioning.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Simplified dependency management&lt;/strong&gt; - Since many projects in the monorepo may depend on similar third-party libraries, they can be optimized and provided consistently by the monorepo.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Atomic commits&lt;/strong&gt; - When you need to make a large change affecting multiple projects and libraries, you can push it all together without chaining releases. For example, a model change can be made in a library, the frontend, and the backend all in one pull request.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Large-scale code refactoring&lt;/strong&gt; - Similarly to atomic commits, you can do large refactors across multiple projects in the course of one pull request—making sure everything continues to work as expected after the pull request is merged.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Collaboration across teams&lt;/strong&gt; - With all projects, owned by different teams, the code ownership model is much more flexible. You can contribute to and receive contributions from other teams.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve spent most of my career working on native software (iOS, macOS, Windows, etc), but did do some web development here and there. I say that because I think I&amp;rsquo;ve mostly—but not exclusively—seen monorepos coming from web development teams. Maybe that&amp;rsquo;s why this is such a strange idea to me? I know it&amp;rsquo;s not quite this bad but it reminds me of development before adopting version control systems where we&amp;rsquo;d just store the code on a network drive—everything in one directory is easier!&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s a bit extreme and when I think about this more critically there are some clear benefits, namely &lt;strong&gt;atomic commits&lt;/strong&gt;. One team I worked on we built a distributed codebase where a rich model layer was in it&amp;rsquo;s own repository. In the early days when a team owned that project, it was great. Contributions were open, but the team aimed to work with the frontend team to make sure their needs were met by the time it was needed. No silos, everyone talked! As things change, that project became ownerless and people just started making changes—forced to do a &lt;a href=&#34;https://semver.org&#34;&gt;semantic versioned&lt;/a&gt; release for every change. This would be fine if there were many consumers of that library, but there was one client app.&lt;/p&gt;&#xA;&lt;p&gt;This was a design problem that multiple repos highlighted. A design problem that would have made more sense for it to start in the repository of the client application, and only moved to a separate repo if more applications started using the project. So for a single application, even heavily factored into core components and libraries, I think I&amp;rsquo;m newly open to that just being one repo. You can still maintain code ownership with Github features, and even publish semantic versions if you want, but can take the benefit of those &lt;strong&gt;atomic commits&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Maybe that is my core struggle with this idea. The above project was all one iOS application written in Swift with the occasional Objective-C. Should there be another iOS app in that repo? Should the Android app have been in that repo too? I don&amp;rsquo;t think so but maybe that&amp;rsquo;s not just about multiple applications, but also multiple technologies all in one large repo. Maybe this is why web folks like it, when everything is Javascript why draw boundaries!?&lt;/p&gt;&#xA;&lt;p&gt;Also, what about the rest of those benefits? Anyone can change anything? So you save the effort of managing dependencies by opening up the risk of uncontrolled changes. Friction can be good to a software project. If I look at those benefits again, I could probably talk to why it&amp;rsquo;s good that you can&amp;rsquo;t do that or why it&amp;rsquo;s already possible without putting all your code in one repo. Let&amp;rsquo;s do it!&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ease of code reuse&lt;/strong&gt; - It is easier if all the code out there is easily accessible, but is that really what you want? That seems like a very stack overflow copy paste solution to just access any solution provided in the monorepo. I&amp;rsquo;d rather build on a solid foundation, even at the cost of velocity. You make up for it when the worst happens because you have clearer boundaries to debug.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Simplified dependency management&lt;/strong&gt; - It is simpler to not have to think about versions, but is that better? Package dependencies are still required for third party tooling so you aren&amp;rsquo;t avoiding it and at best you are losing out on meaningful semantic versioning allowing you to rollback dependencies easily without having to manage all the commits of an entire repository. Additionally a good framework team can predict needs and work with you to best provide APIs that solve more than just your needs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Atomic commits&lt;/strong&gt; - As I noted above, this is a benefit I can get behind, but I don&amp;rsquo;t know that it&amp;rsquo;s always what you want in a distributed set of apps and libraries. Friction is good and not everything needs to be hacked together in the same pull request. It can be fine to build the foundations in one library at a specific version, then add support in the app in another repo. I do understand that it&amp;rsquo;s hard when teams are working with fewer people than they need and there may not be anyone to own that library you need to contribute to.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Large-scale code refactoring&lt;/strong&gt; - If your project is so coupled that you need to do such large scale refactoring where this is valuable, I wonder if your problem is not the repo but the codebase. Code is a liability, not an asset. I&amp;rsquo;d rather have a heavily factored set of projects that have clear protocols and when one isn&amp;rsquo;t meeting needs, replace it. This sounds to me like everything is so interconnected that it&amp;rsquo;s hard to reason about, so you need to have it all in one folder so you can just unravel the spaghetti.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Collaboration across teams&lt;/strong&gt; - Multiple repos already provide this sort of collaboration in a more sustainable and arguably responsible way—you just contribute to their repository. I know I know, there is overhead in that in time and velocity, but really shouldn&amp;rsquo;t we be aiming for sustainability? I know in a monorepo you can still use code ownership to force a team to be required to review pull requests, but that&amp;rsquo;s not always great. One large pull request could end up requiring dozens of code reviews because you&amp;rsquo;ve touched multiple teams&amp;rsquo;s owned code. I know that&amp;rsquo;s the same with multiple repos, but that&amp;rsquo;s my point.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;I think there is an artificial feeling to this that makes me feel like it&amp;rsquo;s about perceived speed and velocity, not good software organization. In many of these cases it seems to aim to remove all barriers to any contribution instead of building good foundations.&lt;/p&gt;&#xA;&lt;p&gt;And I&amp;rsquo;m not even getting into the massively large size of these monorepos.&lt;/p&gt;&#xA;&lt;p&gt;So… with all that, I&amp;rsquo;m starting to come around on it to a point. I do think having &lt;em&gt;all&lt;/em&gt; applications in one repo is not worth the tradeoffs. However, I do understand why a large web app would want to be a monorepo with all libraries accessible in the repo—it&amp;rsquo;s all one stack. I think I also understand a platform as a monorepo as well, those scenarios where the application stack is a platform and apps are built on that platform.&lt;/p&gt;&#xA;&lt;p&gt;There is a certain reality to it that I understand. Teams and organizations change. Ownership and focus changes. When there is no team to own something, it can very quickly lead to a library or project getting duplicated instead of made a true dependency. These realities open my mind up to it a bit more.&lt;/p&gt;&#xA;&lt;p&gt;I read somewhere that &amp;ldquo;Understanding requires effortful engagement&amp;rdquo; and I think I just did this exercise here. I&amp;rsquo;m not convinced this is the best path for an organization, but I think I understand it more and maybe would choose to group more projects together—especially if they are all in the goal of shipping a single application in a single technology stack. What do you think? I&amp;rsquo;d love to continue thinking through this and if you have experiences that talk to monorepos, I&amp;rsquo;d love to hear. Let&amp;rsquo;s talk on &lt;a href=&#34;https://twitter.com/jnjosh&#34;&gt;twitter&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cross Platform Thoughts</title>
      <link>https://jnjosh.com/workshop/posts/cross-platform-thoughts/</link>
      <pubDate>Sun, 18 Aug 2019 12:27:06 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/cross-platform-thoughts/</guid>
      <description>&lt;p&gt;Cross Platform development for most mobile apps is just simply not worth it. Sure, there are great open source options like React Native and just plain C++ but you end up spending the same time trying to be clever and &amp;ldquo;share code&amp;rdquo; when you could have just built your product with all the platform has to offer. There seems to be a lot of realizations this year with &lt;a href=&#34;https://blogs.dropbox.com/tech/2019/08/the-not-so-hidden-cost-of-sharing-code-between-ios-and-android/&#34;&gt;Dropbox&lt;/a&gt; dropping their C++ components and last year &lt;a href=&#34;https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a&#34;&gt;Airbnb&lt;/a&gt; sunsetting React Native components. I&amp;rsquo;ve played this game before and while it was a great challenge, I would advise anyone not to do it for most cases.&lt;/p&gt;&#xA;&lt;p&gt;Back in 2017 I joined the &lt;a href=&#34;http://joinhighrise.com&#34;&gt;Highrise team&lt;/a&gt; as the Lead Mobile Engineer and one of the first decisions we needed to make was: what is the future of our game and how could we create it so that it could live on Android?&lt;/p&gt;&#xA;&lt;p&gt;Highrise is unique in that it&amp;rsquo;s both an app and a game. We quickly explored some cross platform options for making the game components like Unreal, Unity, libGDX, etc. These options seemed great for the parts of the app that were a game but not so great for the standard app components. We&amp;rsquo;d end up having &amp;ldquo;crappy Game UI&amp;rdquo;™ which was explicitly something we did &lt;em&gt;not&lt;/em&gt; want. We wanted the app to feel as good as Instagram or any Apple app when not in game-based UIs. I proposed the best path as either &amp;ldquo;let&amp;rsquo;s not be clever and just make the app twice&amp;rdquo; or &amp;ldquo;let&amp;rsquo;s build the game components in a shared C++ layer and the app components natively&amp;rdquo;. I had done this previously when working on BA3&amp;rsquo;s mapping engine and felt this could be a great solution for our problem. We could write the hard game-based code once and write specific UIs for each platform. I shared this at local meetups as &lt;a href=&#34;https://speakerdeck.com/jnjosh/cross-platform-shenanigans-part-1-ios&#34;&gt;cross platform&lt;/a&gt; &lt;a href=&#34;https://speakerdeck.com/jnjosh/cross-platform-shenanigans-part-2-android&#34;&gt;shenanigans&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You know what? It was actually &lt;em&gt;pretty fun&lt;/em&gt;! We ended up with an extra platform, C++, and a lot of bridging code in Objective-C++ (and JNI-based C for Android) and had to make a lot of calls on how we&amp;rsquo;d communicate game events between the UI and core layers. We worked with &lt;a href=&#34;https://google.github.io/flatbuffers/&#34;&gt;Flatbuffers&lt;/a&gt; which gave us simple data to pass around. We now had a platform that we could build on top of, we had a core layer that was compatible with multiple platforms, and we had a UI layer that would not be foreign to most iOS or Android developers. I&amp;rsquo;d even go as far as saying if you are building a game, this is probably the best way to get cross platform game logic while not sacrificing a great app experience.&lt;/p&gt;&#xA;&lt;p&gt;Would I do it again? No.&lt;/p&gt;&#xA;&lt;p&gt;The thing is we really didn&amp;rsquo;t save much time. Most features ended up being full stack features so we couldn&amp;rsquo;t isolate a developer from the Core as much as we wanted. This meant that we had to expose bridge objects going both ways—which is not a simple problem—for most features. We also had to deal with many layers of abstraction making things like simple networking much harder to debug. In the end, we spent about the same amount of time as if we had just built the app for each platform. We could have even saved some time when you consider we could us one platform as a guide to build the other platform and not fight issues that worked well in one platform and not on the other.&lt;/p&gt;&#xA;&lt;p&gt;One of the first things I teach new developers is &amp;ldquo;don&amp;rsquo;t fight the platform&amp;rdquo;. Instead of trying to be clever and solving your too many platforms problem by adding another platform, just build your app simply. Build in Swift with all that Apple offers or build in Kotlin with all that Google offers. You&amp;rsquo;ll appreciate the simplicity of it when you have to debug any issue. You may have to think a little bit harder to coordinate releases between the platforms, but that is a far simpler problem than trying to build something that works great on whatever platform it runs on. I&amp;rsquo;ve since moved on from Highrise and BA3, but one lesson I&amp;rsquo;ll take with me is don&amp;rsquo;t try to be too clever.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging with Sound</title>
      <link>https://jnjosh.com/workshop/posts/debugwithsound/</link>
      <pubDate>Thu, 08 Feb 2018 22:27:06 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/debugwithsound/</guid>
      <description>&lt;p&gt;Debugging is hard. You have to remember what you or someone else was trying to do while understanding what&amp;rsquo;s actually going on. I don&amp;rsquo;t remember where I heard it, but there is a saying that goes something like &amp;ldquo;Don&amp;rsquo;t write code at the peak of your understanding because debugging it requires 2 times the understanding…&amp;rdquo;. Sometimes it&amp;rsquo;s not that it&amp;rsquo;s hard it&amp;rsquo;s that there is just too much going on. For these cases, I&amp;rsquo;ve been using sound.&lt;/p&gt;&#xA;&lt;p&gt;One case where this comes in handy is debugging a network call and cache hit. Imagine you are building a system that checks an in-memory cache, an on-disk cache, and a download operation. You&amp;rsquo;ve probably done this several times. Debugging this is hard because you really don&amp;rsquo;t want to stop, you want to know that it&amp;rsquo;s hitting all the different points appropriately. Sure logging is fine here, but that&amp;rsquo;s prone to confusion if you have a noisy log. What I find helpful when debugging things like this—or any type of retain/release pattern—is to add a sound-based break point.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;    &lt;img&#xA;    src=&#34;https://jnjosh.com/uploads/2018/02/08/debug_hu_747d1dc453f4c2f5.webp&#34;&#xA;    srcset=&#34;https://jnjosh.com/uploads/2018/02/08/debug_hu_cb9f2458b6fb99a9.webp 640w, https://jnjosh.com/uploads/2018/02/08/debug_hu_747d1dc453f4c2f5.webp 936w&#34;&#xA;    sizes=&#34;(min-width: 42rem) 42rem, 100vw&#34;&#xA;    alt=&#34;&#34;&#xA;    width=&#34;936&#34;&#xA;    height=&#34;280&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&gt;&#xA;  &lt;/figure&gt;&lt;p&gt;Now I don&amp;rsquo;t have to study and read, I just use the app and listen. If I hear a &lt;code&gt;Ping&lt;/code&gt;, a &lt;code&gt;Funk&lt;/code&gt;, and a &lt;code&gt;Frog&lt;/code&gt; sound when I&amp;rsquo;m expecting it—I know I&amp;rsquo;m on the right track. The great thing is you also don&amp;rsquo;t have to stop the debug session, you can simply add these while debugging.&lt;/p&gt;&#xA;&lt;p&gt;I think this is a great tool and it&amp;rsquo;s kind of fun! I don&amp;rsquo;t use it all the time but every once in a while I find something that fits this debugging tool well. Then I can listen to my code instead of reading it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Number Rush</title>
      <link>http://joshuajohnson.co.uk/NumberRush/</link>
      <pubDate>Sun, 06 Mar 2016 13:38:49 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/number-rush/</guid>
      <description>&lt;p&gt;Apparently I’m not the only one named “Josh Johnson” that has a problem with German numbers. Here is a web-based game by another Josh Johnson to help with your German number learning. It also uses &lt;a href=&#34;https://facebook.github.io/react/&#34;&gt;React.js&lt;/a&gt; which is something I’ve been wanting to play with. You can see the &lt;a href=&#34;http://joshuajohnson.co.uk/NumberRush/&#34;&gt;code on Github&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://jnjosh.com/workshop/posts/number-rush/&#34;&gt;Permalink&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guide to Functional Reactive Programming</title>
      <link>https://realm.io/news/frp-ios-guide/</link>
      <pubDate>Tue, 01 Mar 2016 10:43:07 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/frp-guide/</guid>
      <description>&lt;p&gt;Realm, which posts amazing videos regularly, has just posted a &lt;a href=&#34;https://realm.io/news/frp-ios-guide/&#34;&gt;Guide to Functional Reactive Programming&lt;/a&gt;. They discuss the why, the what, the how, and the who all while linking to some great videos. Definitely a nice resource if you haven&amp;rsquo;t looked into this. I&amp;rsquo;ve read a lot about it but I don&amp;rsquo;t think I&amp;rsquo;ve fully internalized this yet. This will definitely help.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://jnjosh.com/workshop/posts/frp-guide/&#34;&gt;Permalink&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coding Weekend</title>
      <link>https://jnjosh.com/workshop/posts/devjam/</link>
      <pubDate>Mon, 29 Feb 2016 21:57:12 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/devjam/</guid>
      <description>&lt;p&gt;This weekend I spent some time at the Ticketmaster DevJam in Durham. They are working on a public API with events, venues, and more that they&amp;rsquo;d like to get developers using. For me, it was a day long event with food and building a weird app with some friends.&lt;/p&gt;&#xA;&lt;p&gt;The basic idea of the event was for Ticketmaster to get eyes on their new APIs and find things wrong with it. They&amp;rsquo;d like to get people giving feedback and building things. Several groups broke up and build some cool things and demo them at the end of the day.&lt;/p&gt;&#xA;&lt;p&gt;So… what did I build? I worked with &lt;a href=&#34;http://tmsdurham.com&#34;&gt;Ticketmaster Mobile Studio&lt;/a&gt; developer, &lt;a href=&#34;http://twitter.com/peterjfoti&#34;&gt;Peter Foti&lt;/a&gt; to build something that the world really needs. The “Justin Bieber Warning System”.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://jnjosh.com/assets/images/hackathon-february2016/world.jpg&#34; /&gt;&#xA;  &lt;figcaption&gt;Events with Justin Bieber&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;We pretty quickly mixed the data coming from the &lt;a href=&#34;http://developer.ticketmaster.com&#34;&gt;Ticketmaster Discovery API&lt;/a&gt; with the mapping engine we are building at &lt;a href=&#34;http://ba3.us&#34;&gt;BA3&lt;/a&gt;. By finding the specific ID of Justin Bieber, we were able to generate a list of events and their venue&amp;rsquo;s location. Now you can know what areas you can avoid this pop star.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://jnjosh.com/assets/images/hackathon-february2016/north-america.jpg&#34; /&gt;&#xA;  &lt;figcaption&gt;We are not Beliebers. There are few places to avoid him in North America.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;There were some more serious demos too. One team built began building &lt;a href=&#34;https://ifttt.com&#34;&gt;IFTT integration&lt;/a&gt; so that you can connect triggers based on different discovery events. Another team built a Slack plugin.&lt;/p&gt;&#xA;&lt;p&gt;Overall, it was a pretty fun weekend and I got to hang out with some friends while building comedic software.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Microsoft Acquires Xamarin</title>
      <link>https://blog.xamarin.com/a-xamarin-microsoft-future/</link>
      <pubDate>Wed, 24 Feb 2016 14:32:19 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/microsoft-aquires-xamarin/</guid>
      <description>&lt;p&gt;Interesting, and unsurprising, news today that Xamarin has been acquired by Microsoft. I&amp;rsquo;ve never used it directly to build apps but I did to some research into using their test cloud system (which is actually calabash-based, something &lt;a href=&#34;https://jnjosh.com/posts/cocoaheads-talk-calabash/&#34;&gt;I&amp;rsquo;ve worked a lot with and have written about before&lt;/a&gt;). I hear of a lot of people loving to be able to build iOS apps without learning Objective-C or Swift.&lt;/p&gt;&#xA;&lt;p&gt;This gives Microsoft an interesting position as a vendor of an iOS SDK. It will be interesting to see what comes of this.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://jnjosh.com/workshop/posts/microsoft-aquires-xamarin/&#34;&gt;Permalink&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Developer Tools and Utilities List (2014 Edition)</title>
      <link>https://jnjosh.com/workshop/posts/my-developer-tools-and-utilities-list-2014-edition/</link>
      <pubDate>Sun, 30 Nov 2014 01:37:32 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/my-developer-tools-and-utilities-list-2014-edition/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve often wanted to do a yearly roundup of the tools and utilities I use; if only as a log of&#xA;things I use over time. I &lt;a href=&#34;https://jnjosh.com/posts/my-developer-tools-for-mac-and-ios-development-2012-edition/&#34;&gt;did this two years ago in&#xA;2012&lt;/a&gt; and when I was thinking&#xA;about getting back to blogging I wanted to update the list. The funny thing is not much has changed.&#xA;I&amp;rsquo;m actually surprised that I don&amp;rsquo;t use that many tools.&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h3 id=&#34;hardware&#34;&gt;Hardware&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com&#34;&gt;&lt;strong&gt;Retina MacBook Pro&lt;/strong&gt;&lt;/a&gt; - Still working with my 2012 Retina MacBook Pro with 2.3 GHz i7, 16 GB RAM, and 256gb SSD running OS X 10.10 Yosemite.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com&#34;&gt;&lt;strong&gt;27&amp;quot; Thunderbolt Display&lt;/strong&gt;&lt;/a&gt; - Still love this monitor. After a lot of time using the MacBook Pro in clamshell mode, I&amp;rsquo;ve been using it as a second screen. It makes it much easier to disconnect.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.newegg.com/Product/Product.aspx?Item=9SIA2C512M7560&#34;&gt;&lt;strong&gt;KBC Poker 2 Mechanical Keyboard&lt;/strong&gt;&lt;/a&gt; - Last year I made the switch to using a mechanical keyboard. I love this little thing. Mine has &lt;a href=&#34;http://jsh.in/XQ2j&#34;&gt;Cherry MX Blue Switches and custom Dvorak keys&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com/&#34;&gt;&lt;strong&gt;Apple Magic Mouse&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;ve tried many mice. This is not my favorite, but it allows for some of OS X&amp;rsquo;s gestures. I think I&amp;rsquo;m going to attempt switching to tha trackpad this year.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com/&#34;&gt;&lt;strong&gt;iPhone 6 and iPad mini Retina&lt;/strong&gt;&lt;/a&gt; - These are quite obvious, but I use them every day for daily use and development.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.amazon.com/dp/B00E1O4LFQ&#34;&gt;&lt;strong&gt;Timbuk2 D-Lux Laptop Messenger&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;ve switched to the messenger version of the backpack I used two years ago. I really like this bag but still love the backpack too. I&amp;rsquo;ll probably switch again in the future.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;software&#34;&gt;Software&lt;/h3&gt;&#xA;&lt;h4 id=&#34;developer-tools&#34;&gt;Developer Tools&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://developer.apple.com&#34;&gt;&lt;strong&gt;Xcode 6&lt;/strong&gt;&lt;/a&gt; - I write software for iOS and Mac, this is the tool I use every day. Instruments is another app, but I&amp;rsquo;ll consider it part of Xcode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.barebones.com/products/bbedit/&#34;&gt;&lt;strong&gt;BBEdit&lt;/strong&gt;&lt;/a&gt; - I switched to using BBEdit. I&amp;rsquo;ve tried it several times in the past, but was convinced to try it again. Now it&amp;rsquo;s part of my daily tools.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.kaleidoscopeapp.com/&#34;&gt;&lt;strong&gt;Kaleidoscope 2&lt;/strong&gt;&lt;/a&gt; - Whenever I push new commits to Github, I check them out first in Kaleidoscope first.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://panic.com/transmit/&#34;&gt;&lt;strong&gt;Transmit&lt;/strong&gt;&lt;/a&gt; - Still the best tool for uploading via FTP or to S3.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://kapeli.com/dash&#34;&gt;&lt;strong&gt;Dash&lt;/strong&gt;&lt;/a&gt; - &lt;em&gt;Update: Can&amp;rsquo;t believe I forgot this!&lt;/em&gt; Dash is the best tool for reading documentation. I use it so much it was really easy to forget. It feels like it is a part of the system.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;other-software-and-utilities&#34;&gt;Other Software and Utilities&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.alfredapp.com/&#34;&gt;&lt;strong&gt;Alfred&lt;/strong&gt;&lt;/a&gt; - Even though Spotlight in Yosemite replaces most of what I use Alfred for, I still like using Alfred more.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mizage.com/divvy/&#34;&gt;&lt;strong&gt;Divvy&lt;/strong&gt;&lt;/a&gt; - I still use divvy every day. It&amp;rsquo;s a great tool and allows me to organize my screen really quickly.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://getcloudapp.com&#34;&gt;&lt;strong&gt;CloudApp&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;m often sharing links, photos or files with people on the internet. Transmitting these files used to be a huge problem. Now it is easy with CloudApp. I simply hit my keyboard shortcut on a file or URL and it gets uploaded and a short link is created. I have &amp;lsquo;jsh.in&amp;rsquo; mapped to it so all my links look like mine.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://reederapp.com/&#34;&gt;&lt;strong&gt;Reeder&lt;/strong&gt;&lt;/a&gt; - I have a huge RSS feed of many Mac and iOS development blogs and reeder has fit as my favorite reeder. I actually stopped using it for a little while but then switched back.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/zachwaugh/Clock.app&#34;&gt;&lt;strong&gt;Clock.app&lt;/strong&gt;&lt;/a&gt; - &lt;a href=&#34;https://jnjosh.com/posts/back-to-blogging-and-working-without-a-clock/&#34;&gt;I still keep the clock off my menu bar and use the open source Clock.app&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Implementing a language with LLVM</title>
      <link>http://llvm.org/docs/tutorial/LangImpl1.html</link>
      <pubDate>Fri, 01 Feb 2013 23:30:32 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/implementing-a-language-with-llvm/</guid>
      <description>&lt;p&gt;Writing a programming language is not something I&amp;rsquo;d ever attempt to accomplish. However, the idea of getting a better understanding of LLVM is very interesting. This tutorial isn&amp;rsquo;t a complete lesson in the compiler, but I think it will at least help you learn a little more about it..&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&amp;ldquo;This tutorial runs through the implementation of a simple language, showing how fun and easy it can be.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Sounds fun. I&amp;rsquo;m in.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://jnjosh.com/workshop/posts/implementing-a-language-with-llvm/&#34;&gt;Permalink&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Developer Tools and Utilities List (2012 Edition)</title>
      <link>https://jnjosh.com/workshop/posts/my-developer-tools-for-mac-and-ios-development-2012-edition/</link>
      <pubDate>Sat, 22 Dec 2012 21:11:32 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/my-developer-tools-for-mac-and-ios-development-2012-edition/</guid>
      <description>&lt;p&gt;&lt;em&gt;I&amp;rsquo;ve often wanted to do a yearly roundup of the tools and utilities I use; if only as a log of things I use over time. I&amp;rsquo;ve seen this idea come up often on &lt;a href=&#34;http://carpeaqua.com/2012/10/15/my-ultimate-developer-and-power-users-tool-list-for-mac-os-x-2012-edition-/&#34;&gt;other&lt;/a&gt; &lt;a href=&#34;http://www.hanselman.com/blog/ScottHanselmans2011UltimateDeveloperAndPowerUsersToolListForWindows.aspx&#34;&gt;blogs&lt;/a&gt;, so this is an idea borrowed from other developers on the internet. Anyway, the following is a list of hardware and software I use on a regular basis.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h3 id=&#34;hardware&#34;&gt;Hardware&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com&#34;&gt;&lt;strong&gt;Retina MacBook Pro&lt;/strong&gt;&lt;/a&gt; - with a 2.3 GHz i7, 16 GB RAM, and 256gb SSD. It is probably the best computer I&amp;rsquo;ve ever used. Often, I&amp;rsquo;d rather work on this display than use the thunderbolt display.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com&#34;&gt;&lt;strong&gt;27&amp;quot; Thunderbolt Display&lt;/strong&gt;&lt;/a&gt; - Really great monitor that I use when at the office. Before going to the Retina MacBook, I used the laptop as a second monitor, but the difference between the display and the retina screen is too annoying. So now when at work, I run in clamshell mode and only work off the thunderbolt display.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.twelvesouth.com/products/bookarc/&#34;&gt;&lt;strong&gt;BookArc Pro&lt;/strong&gt;&lt;/a&gt; - Since I run in closed mode at work, I like to set the MacBook up on this nice stand. It keeps my desk clean and looks really cool.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com&#34;&gt;&lt;strong&gt;Apple Wireless Keyboard&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;m not sure if this is the best keyboard in the world, but I like it a lot. Aside from being small and wireless, It more closely matches the keyboard on the laptop so I don&amp;rsquo;t have to fight to remember where the control keys are. Also, this year I switched to the &lt;a href=&#34;http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard&#34;&gt;Dvorak keyboard&lt;/a&gt; and the low height of the keys made it easy to learn rapidly.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com/&#34;&gt;&lt;strong&gt;Apple Magic Mouse&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;ve tried many mice. This is not my favorite, but it allows for some of OS X&amp;rsquo;s gestures.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://store.apple.com/&#34;&gt;&lt;strong&gt;iPhone 5 and 3rd Generation iPad&lt;/strong&gt;&lt;/a&gt; - These are quite obvious, but I use them every day for daily use and development.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.timbuk2.com/tb2/products/q-backpack/1876417&#34;&gt;&lt;strong&gt;Timbuk2 Q Backpack&lt;/strong&gt;&lt;/a&gt; - Not really hardware, but important for carrying around that Retina MacBook. I&amp;rsquo;m very picky on the bag I use. I often change bags on a whim. This bag has been a great one though, I haven&amp;rsquo;t had that feeling to change bags yet!&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;software&#34;&gt;Software&lt;/h3&gt;&#xA;&lt;h4 id=&#34;developer-tools&#34;&gt;Developer Tools&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://developer.apple.com&#34;&gt;&lt;strong&gt;Xcode&lt;/strong&gt;&lt;/a&gt; - I write software for iOS and Mac, this is the tool I use every day. It can be frustrating, but I think it is improving greatly. Instruments is another app, but I&amp;rsquo;ll consider it part of Xcode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.sublimetext.com/&#34;&gt;&lt;strong&gt;Sublime Text 2&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;ve been jumping around with text editors a lot. Finally, I stopped on Sublime Text. It is a great editor that hasn&amp;rsquo;t seemed to explode on me yet. It crashes less than Xcode.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.adobe.com&#34;&gt;&lt;strong&gt;Photoshop CS6&lt;/strong&gt;&lt;/a&gt; - I occasionally try to design &lt;a href=&#34;http://log.jsh.in/posts/bad-movie-podcast-app/&#34;&gt;things&lt;/a&gt; and often need to cut some assets. I&amp;rsquo;ve been using Photoshop since the late 90s and it is just my comfort zone for design.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.ideaswarm.com/AppViz2.html&#34;&gt;&lt;strong&gt;AppViz 2&lt;/strong&gt;&lt;/a&gt; - I finally have returned to the app store and have an app of my own on the store. This is a great tool to see how your app is performing on the store. If you care about reviews, it also gives you a great way to view them.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.charlesproxy.com/&#34;&gt;&lt;strong&gt;Charles&lt;/strong&gt;&lt;/a&gt; - Occasionally, I like to verify that my network requests are doing what I expect, or like to snoop on other apps network use. Charles is the app for this, even with it&amp;rsquo;s non-native interface.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://krillapps.com/coderunner/&#34;&gt;&lt;strong&gt;CodeRunner&lt;/strong&gt;&lt;/a&gt; - Sometimes when learning a new language or verifying something I want to do in an app, I&amp;rsquo;ll pop into CodeRunner to test the snippet of code out. Probably the most common thing is testing KVC collection operations.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.kaleidoscopeapp.com/&#34;&gt;&lt;strong&gt;Kaleidoscope 2&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;ve been using this app since version 1 as a git difftool. Version 2 adds merge support. Great tool.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.helloresolven.com/portfolio/rested/&#34;&gt;&lt;strong&gt;RESTed&lt;/strong&gt;&lt;/a&gt; - When working with a remote API it is great to be able to create and store requests without having to fumble with cURL. Don&amp;rsquo;t get me wrong, I&amp;rsquo;m a terminal guy but I can&amp;rsquo;t ever seem to remember all the different options in cURL. RESTed solves this for me and you can save the requests for later.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://panic.com/transmit/&#34;&gt;&lt;strong&gt;Transmit&lt;/strong&gt;&lt;/a&gt; - Hands down the best tool for uploading via FTP or to S3.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://iconfactory.com/software/xscope&#34;&gt;&lt;strong&gt;xScope&lt;/strong&gt;&lt;/a&gt; - Great tool for being a pixel perfect snob. xScope has a lot of tools, I probably use the horizontal guides to make sure things are lined up as I expect.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://markedapp.com/&#34;&gt;&lt;strong&gt;Marked&lt;/strong&gt;&lt;/a&gt; - We use markdown a lot at &lt;a href=&#34;http://twotoasters.com&#34;&gt;Two Toasters&lt;/a&gt; for functional specs to blogging. I blog here in markdown. Marked is a great tool I use all the time to view these files.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Terminal&lt;/strong&gt; - I can&amp;rsquo;t have this list without including the terminal. It is the first application I open when starting to work. I use &lt;a href=&#34;https://github.com/robbyrussell/oh-my-zsh&#34;&gt;oh-my-zsh&lt;/a&gt; to customize the shell and do all my git versioning from the shell. It is the only way! :-)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;other-software-and-utilities&#34;&gt;Other Software and Utilities&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.alfredapp.com/&#34;&gt;&lt;strong&gt;Alfred&lt;/strong&gt;&lt;/a&gt; - My favorite of all the quick launch style tools out there. I love it for it&amp;rsquo;s speed and simplicity. Most of the time I live on the keyboard so quick launching an app with Command+Space is really important. I realize I can do this with spotlight but I enjoy the way Alfred works. Also, it is my quick calculator.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://mizage.com/divvy/&#34;&gt;&lt;strong&gt;Divvy&lt;/strong&gt;&lt;/a&gt; - I use divvy every day to position windows from the keyboard.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://getcloudapp.com&#34;&gt;&lt;strong&gt;CloudApp&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;m often sharing links, photos or files with people on the internet. Transmitting these files used to be a huge problem. Now it is easy with CloudApp. I simply hit my keyboard shortcut on a file or URL and it gets uploaded and a short link is created. I have &amp;lsquo;jsh.in&amp;rsquo; mapped to it so all my links look like mine.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://sparrowmailapp.com/&#34;&gt;&lt;strong&gt;Sparrow&lt;/strong&gt;&lt;/a&gt; - I worry about this app. For some time it has been a great replacement for Mail.app. I still use it as I like the way it feels over the Apple supplied application. This could change though as Sparrow was bought by Google and there doesn&amp;rsquo;t appear to be a plan to continue development. For now, I use it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://tapbots.com/software/tweetbot/mac/&#34;&gt;&lt;strong&gt;Tweetbot for Mac&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;m often on Twitter reading what others are chatting about and occasionally responding. Tweetbot has been the best interface since the old Tweetie for me.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://evernote.com/&#34;&gt;&lt;strong&gt;Evernote&lt;/strong&gt;&lt;/a&gt; - I&amp;rsquo;ve recently started noting things much more. I used to believe I could remember everything, but it isn&amp;rsquo;t true. Often I remember that I knew something about a topic, but can&amp;rsquo;t remember the actual answer. This is what I&amp;rsquo;m using evernote for. I like to think of it as a hash table, my memory has the key and the value is in evernote. I&amp;rsquo;ve also started going back to WWDC videos and making notes of each session.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://reederapp.com/&#34;&gt;&lt;strong&gt;Reeder&lt;/strong&gt;&lt;/a&gt; - I have a huge RSS feed of many Mac and iOS development blogs and reeder has fit as my favorite reeder.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/zachwaugh/Clock.app&#34;&gt;&lt;strong&gt;Clock.app&lt;/strong&gt;&lt;/a&gt; - This is an open source project that shows the date and time in a nice HUD window. I don&amp;rsquo;t like to keep my clock on the screen at all times so this provides a nice quick way to see the time if I need to. With alfred I can hit Cmd+Space -&amp;gt; &amp;lsquo;C&amp;rsquo; -&amp;gt; enter and see the time really fast.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Automated Acceptance Testing or: How I stopped worrying and trusted the tests</title>
      <link>https://jnjosh.com/workshop/posts/cocoaheads-talk-calabash/</link>
      <pubDate>Sun, 05 Aug 2012 02:15:32 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/cocoaheads-talk-calabash/</guid>
      <description>&lt;p&gt;&lt;em&gt;This month at &lt;a href=&#34;http://trianglecocoa.com&#34;&gt;Triangle CocoaHeads&lt;/a&gt; in Durham, I stepped away from being just the organizer and did a talk on automated acceptance testing with &lt;a href=&#34;http://calaba.sh&#34;&gt;Calabash&lt;/a&gt;. This is a topic I&amp;rsquo;m really excited to learn more about and am constantly trying to become a better tester.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;p&gt;I first learned about Calabash when seeing a video of one of the blitz talks from &lt;a href=&#34;http://ideveloper.tv/nsconference/&#34;&gt;NSConference&lt;/a&gt; about it. I started using it on one project and it seemed to do a nice job.&lt;/p&gt;&#xA;&lt;p&gt;I think the talk went over pretty well, and since I record the presentations from CocoaHeads you can see for yourself:&lt;/p&gt;&#xA;&lt;iframe src=&#34;https://player.vimeo.com/video/46555160?color=ff9933&amp;byline=0&amp;portrait=0&#34; width=&#34;500&#34; height=&#34;375&#34; frameborder=&#34;0&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;You can also &lt;a href=&#34;http://jsh.in/IOHx&#34;&gt;download the presentation as a keynote file&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Getting kids excited about coding</title>
      <link>https://jnjosh.com/workshop/posts/getting-kids-excited-about-coding/</link>
      <pubDate>Sat, 03 Jul 2010 01:31:32 -0500</pubDate><guid isPermaLink="false">https://jnjosh.com/workshop/posts/getting-kids-excited-about-coding/</guid>
      <description>&lt;p&gt;Want to get your kids excited about coding? Think about looking into arduino. My fashion design and meteorology loving daughter was having a great time and even said “coding is fun!”.&lt;/p&gt;&#xA;&lt;iframe src=&#34;//player.vimeo.com/video/13026657?byline=0&amp;amp;portrait=0&amp;amp;color=ff9933&#34; width=&#34;800&#34; height=&#34;450&#34; frameborder=&#34;0&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&#xA;</description>
    </item>
  </channel>
</rss>
