<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Joshua Willuhn</title>
    <description>The latest articles on Forem by Joshua Willuhn (@joshuawilluhn).</description>
    <link>https://forem.com/joshuawilluhn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F134097%2Fd67ef4db-4a1c-4b5a-85eb-3c350035c215.jpg</url>
      <title>Forem: Joshua Willuhn</title>
      <link>https://forem.com/joshuawilluhn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joshuawilluhn"/>
    <language>en</language>
    <item>
      <title>OOPS! The Accidental Blog Platform</title>
      <dc:creator>Joshua Willuhn</dc:creator>
      <pubDate>Sat, 04 Apr 2020 15:09:37 +0000</pubDate>
      <link>https://forem.com/joshuawilluhn/oops-the-accidental-blog-platform-1c8c</link>
      <guid>https://forem.com/joshuawilluhn/oops-the-accidental-blog-platform-1c8c</guid>
      <description>&lt;p&gt;Wordpress. Drupal. Joomla! Wix. &lt;a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface"&gt;CGI&lt;/a&gt;. Macromedia Dreamweaver templates. &lt;a href="https://en.m.wikipedia.org/wiki/AOLpress"&gt;AOLPress&lt;/a&gt;. GoDaddy. Frontpage. ColdFusion. Instr html toolz. ActiveX. CoffeeCup. React. Tripod. Macromedia Flash. Geocities. Vue. HomeSite. Jekyll. Gatsby. LAMP, MEAN, JAM or maybe Java spring. &lt;/p&gt;

&lt;p&gt;Whatever you use, a website is the result. In October 2019 I started planning a replacement for the landing page for my app, MOTOrift.com. Until then I was using a combination of Medium’s native apps, VS code and the time tested good ol' copy and paste framework with the ctrl+c/curl+v plugin active. It did the job but I’m taking my app from a beta free version to a premium product and it needs a better website as part of that.&lt;/p&gt;

&lt;p&gt;I'd like to offer in app chat support and in app help articles. I need a native app to write those articles with, one I can trust won’t lose my articles. I need to get serious about producing content people can use to learn about my apps. &lt;/p&gt;

&lt;p&gt;When I really question why I choose one tech product over another 9/10 times it’s because of the documentation or help. Depending on the product, without documentation nobody will stick around to use the app. &lt;/p&gt;

&lt;p&gt;Landing pages, blog articles and in app help. It needs to do everything and supply it’s own toilet paper.&lt;/p&gt;

&lt;p&gt;With the basic requirements set out, I went looking for solutions to build a  website. Admittedly I’ve been so busy with developing MOTOrift I haven’t kept up on the headless CMS revolution, static site generators or the like. &lt;/p&gt;

&lt;p&gt;It turns out, if you want an app or a content management system for a static site generator it’s a separate thing that sits on top of the site generator. &lt;/p&gt;

&lt;p&gt;I was looking for “a gatsby editor app” and that’s hard to find, because...&lt;/p&gt;

&lt;p&gt;Static Site generator != CMS. &lt;/p&gt;

&lt;p&gt;I feel old. These kids have technology I know nothing about 😐&lt;/p&gt;

&lt;p&gt;That's the 411 on blogs these days or at least that’s the gist of it. I feel even older knowing what 411 meant in the 90s 🙄 but then I did start this article suggesting Macromedia products AND AOLPress. TBH I might as well sign up for AARP and save money on my cell phone bill/car insurance in the process.&lt;/p&gt;

&lt;p&gt;The world is moving past Wordpress, Drupal and Joomla. I was never too impressed with them anyway. &lt;/p&gt;

&lt;p&gt;Back in this decade, you can use any CMS that supports the SSG you're using. The best list I found from Gatsby is &lt;a href="%E2%80%9Chttps://www.gatsbyjs.org/docs/headless-cms/%E2%80%9C"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Some options like netlify, ghost and contentful stood out. They typically work with Gatsby competitors too. They sit on top of the site generator as the interface you use to edit content.&lt;/p&gt;

&lt;p&gt;Some stood out for their amazing price tags like $800-2000 a month 😂 I have a Mustang budget not a Bugatti budget. Some were more realistic around $7-40/month. &lt;/p&gt;

&lt;p&gt;I need something highly usable that I won't hate. I need something I can improve on. I need something that works. &lt;/p&gt;

&lt;p&gt;I have to wonder what kind of amazing product you'd get for $800 a month but I guess it'll stay a mystery. Eventually, I concluded I need something custom made. Maybe I don't &lt;i&gt;need&lt;/i&gt; something custom made but I want something custom made.&lt;/p&gt;

&lt;p&gt;Sometimes that has to be a good enough reason. &lt;/p&gt;

&lt;p&gt;You might be thinking "wow, 85,439 options exist and this dude/bro is making number 85,440". Yeah, that's how it is. I could plunker down $8 a month or find something free and everything would be done in an hour. I'd probably drift towards Ghost or Gatsby.&lt;/p&gt;

&lt;p&gt;Part of it is purely pride and building your own tools is a time honored tradition across different kinds of crafts and trades. &lt;/p&gt;

&lt;p&gt;Software is no different than anything else. It's a craft like what a blacksmith or a carpenter does. I like side projects, the keep me learning and pushing my limits.&lt;/p&gt;

&lt;p&gt;On one hand I genuinely have better stuff to do, I'm not trying to make a blog platform to distribute. &lt;/p&gt;

&lt;p&gt;On the other hand, I need something I'll use and won't hate using. I need it to just work and not slow me down too much (once it's built and in use). &lt;/p&gt;

&lt;p&gt;I don't want it to bump into my web app or be another DNS mess to deal with like some solutions. But at the end of the day I'm just looking for excuses to justify making something custom.&lt;/p&gt;

&lt;p&gt;I &lt;b&gt;want&lt;/b&gt; to make internal tools for MOTOrift. I want it to be something that deserves a custom built CMS SSG thing. &lt;/p&gt;

&lt;p&gt;It's some kind of a milestone. I outgrew the crappy blogging process I was using. My little app is all grown up now 😢&lt;/p&gt;

&lt;p&gt;And so I began, by planning.&lt;/p&gt;

&lt;p&gt;I accepted the fact I won't know what to call it. Is it an SSG? A headless CMS? A page builder? ERP? CRM? Blog platform? Does it deserve such a title? All of the above?? I don't know what to call it! Luckily, it doesn't matter.  &lt;/p&gt;

&lt;p&gt;I also accepted the fact I need multiple apps. &lt;/p&gt;

&lt;p&gt;I need one app that's just a blog platform for help articles. It needs search tags and support for writing longer articles (like this one). &lt;/p&gt;

&lt;p&gt;I also need a page builder for landing pages that has more structured content management and better design options that might slowdown a blog article. It wouldn't be productive to expect either to do both but they need to look the same and the end result can't feel cobbled together it should work seamlessly.&lt;/p&gt;

&lt;p&gt;Feature lists, landing pages, download pages, things like that need a different type of page than a blog article or support article.  But they need to look the same or similar and work together.&lt;/p&gt;

&lt;p&gt;Blog articles need to be in an index in the app and I don't want to mix it up with the non blog help articles. &lt;/p&gt;

&lt;p&gt;I also want a support chat thread for the website (new customers) and in app support or more of a support ticket style help for people already using the app. The app is already partially a web app and native app so I don't want a second set of logins. &lt;/p&gt;

&lt;p&gt;As much as I love chat bots, they were the first thing I ever programmed (AOL+VB3+Genocide+MONKEFADE) and felt that awesome feeling of accomplishment as a kid that started it all for me, I don't like the conversational ones. It's a computer, it should have a command list so the person can use the 🤬 thing or it's a computer guessing how it can help me based on input and life is too short for that nonsense. I try not to subject the people using MOTOrift to anything I'd find annoying.&lt;/p&gt;

&lt;p&gt;I really don't want a company reading my conversations either. I hate that Facebook insists on monetizing private messages with my grandma and that was what tipped me over the edge into avoiding Facebook products. I can't have a corporation "learning" about my customers from our conversations and I don't want to trust chat bot companies when the functionality isn't overly complicated for what I want.&lt;/p&gt;

&lt;p&gt;The typical website chat bot add on is probably doing something similar to Facebook especially on the cheaper end of their service options. I've even seen a couple that basically sold "not snooping on you" as a premium tier feature. &lt;/p&gt;

&lt;p&gt;So I'm making a chat screen too 😂&lt;/p&gt;

&lt;p&gt;Out of everything I need, the most important thing is a native app to write blog articles with. It's the deal breaker for me.  &lt;/p&gt;

&lt;p&gt;So I started with a very basic Android app. It has a couple EditText boxes and a menu button. The menu button opens a menu with .... menu options 🙄 &lt;/p&gt;

&lt;p&gt;I battled between using markdown and just going for pure html and in the end html won so I can have more flexibility. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cl6jpj6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5i8ayo1fsp7pt98p4mf2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cl6jpj6M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5i8ayo1fsp7pt98p4mf2.png" width="50%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The menu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---qWjHaCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mkyn8qbk56bqd8c2m57f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---qWjHaCA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mkyn8qbk56bqd8c2m57f.png" width="50%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the server side it saves some text to a file in one end point and combines it with a template on another post end point. Truly revolutionary 😐 I open the text file so I can edit it separately from the website. I save a reference to a database too. The whole thing took a long weekend to make the basic version of. &lt;/p&gt;

&lt;p&gt;It's unpolished. &lt;br&gt;
It's crude. &lt;br&gt;
It's unpretty on the outside and slightly ugly on the inside. &lt;br&gt;
It's perfect 😍&lt;/p&gt;

&lt;p&gt;I used Node on the server and Java spiked with Android on the app side. &lt;/p&gt;

&lt;p&gt;I followed it up with a quick web based editor.&lt;/p&gt;

&lt;p&gt;One end point saves the blog text to a file with just editable content. It has another end point that takes two partial html files and combines them and the text into a final html file. That way I can have a common menu on each page and only edit it once. In the event I do decide to change the header and footer files I'll have to rebuild each page for them to match. But it could be worse. It doesn't rebuild every page every time I save, just as needed.&lt;/p&gt;

&lt;p&gt;I have another end point that saves the blog article name to the mongo database I was already using. &lt;/p&gt;

&lt;p&gt;The Android app is my favorite part of it. It opens to full screen editing as soon as you hit the icon to fire it up. It saves locally without having to do anything but use the app. It saves on exit, activity changes, anytime it closes it saves. The loading is seamless too it just loads whatever it last saved.&lt;/p&gt;

&lt;p&gt;Open app - write - close app - that's it. There's an option to save to the web and load an article edited on the web in the menu. &lt;/p&gt;

&lt;p&gt;I didn't want to put the effort into keeping track of which article was edited where and when to load from the web or local so I do some of it manually.  &lt;/p&gt;

&lt;p&gt;I didn't want to put too much effort into it or I'd start to feel like I'm neglecting my baby, MOTOrift.  I can remember to refresh the article from the web version instead of editing the local copy if I need to.&lt;/p&gt;

&lt;p&gt;If you ever used Dreamweaver templates to create websites, I wanted it to be reminiscent of that basic process. Content and layout are separate. You can write and add html like a pro. You could save a template upper and lower files and then edit the rest of it independently. Dreamweaver might even still be around 🤷🏼‍♂️ it was high class web authoring software back in the day. &lt;/p&gt;

&lt;p&gt;"If Dreamweaver were modern and mobile what would it do?" Probably 8000 things I don't need and four that I do. If it did only the basics is what I wanted to make.&lt;/p&gt;

&lt;p&gt;I went back and fourth on having markdown support or not but in the end it's really not a big deal to write a few html tags while I blog so I dropped it because I added some buttons to quickly throw in some html tags. It supports hashtags in the in app support chat and that was more important but it was bumping up against the headline # and parsing the hashtag as a link to search. Plus it gives more flexibility. &lt;/p&gt;

&lt;p&gt;It was about the time I got to that point that I knew it would either be very worth it or very NOT worth the effort I put into it. That was probably the most complicated part of the whole app, hashtags and hashtag links. It works and I like it, those were the requirements. &lt;/p&gt;

&lt;p&gt;Next up? I need a page builder.&lt;/p&gt;

&lt;p&gt;I started with making a pretty basic "section based page editor". You can choose from a few options "one column, two column three column" and that opens up an individual editor screen for that style of section. &lt;/p&gt;

&lt;p&gt;For a two column section the left and right column text is saved as text only so you can edit just the text. Then choose from options to save as "two column style A" or "two column style B". &lt;/p&gt;

&lt;p&gt;The combined left and right column html is smashed together to form a single two column section. That complete section with html is saved to a file as are the left and right individually.&lt;/p&gt;

&lt;p&gt;Then to save the page there's an end point that puts each section together into a single page html file. &lt;/p&gt;

&lt;p&gt;It's very similar to the blog app with another layer on top of it. I let the app generate quite a bit of my html and left an area to edit it in pure form html before I save the section.&lt;/p&gt;

&lt;p&gt;It's unpolished. &lt;br&gt;
It's crude. &lt;br&gt;
It's unpretty on the outside and kinda ugly on the inside. &lt;br&gt;
It's perfect 😍&lt;/p&gt;

&lt;p&gt;I will say it could be better, but everything I make could be and this is an internal tool so at least this time I won't get any one star reviews 🙄 &lt;/p&gt;

&lt;p&gt;The rest of the team (dog) is excited about it too 😂&lt;/p&gt;

&lt;p&gt;The server side consists of saving some files, nothing too crazy. It's functional. I don't have anything to automagically regenerate each page after changes to the upper and lower page template.&lt;/p&gt;

&lt;p&gt;It could be better. But if I put too much time into it I'll lose focus completely.&lt;/p&gt;

&lt;p&gt;It sits server side and minds it's business. There are no npm installs or updates. It relies on Node's filesystem library and the Android app. It could be done in any language or framework that supports such a complicated task as saving files to memory. &lt;/p&gt;

&lt;p&gt;It's pretty basic. But it does the job and I might not have learned very much per say but I probably didn't forget too much either.&lt;/p&gt;

&lt;p&gt;With that it was on to the chat system. I wound up building two. One for the website landing page and one for the app once you're actually logged in and using it. I did that because I don't want new people to have to log in to chat. &lt;/p&gt;

&lt;p&gt;If they want to chat let 'em chat with just an email address and a name. If they're actually using the app and want help with a feature, it should be more of a support thread style help not a chat box. Small but important difference, a subject line and the expectations the 'send a message' screen sets forward. &lt;/p&gt;

&lt;p&gt;In the app it looks roughly like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qwFh2dCd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cbougce97428z1tei71k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qwFh2dCd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cbougce97428z1tei71k.png" width="50%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the web it looks like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--neevcjV9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2a39fqul0fzchuvveyzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--neevcjV9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2a39fqul0fzchuvveyzj.png" width="50%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Compared to slapping together a gatsby site and throwing a chat plugin in the corner, it took significantly more work but I'm happy with it. &lt;/p&gt;

&lt;p&gt;Update 4/27/2020&lt;br&gt;
I've used this on a couple websites now and I might even make another version soon. It's been about six months since I started the project. Though I just finished writing this article this month.&lt;/p&gt;

</description>
      <category>android</category>
      <category>webdev</category>
      <category>node</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Visualizing Motorcycle Motion</title>
      <dc:creator>Joshua Willuhn</dc:creator>
      <pubDate>Thu, 02 Jan 2020 03:23:35 +0000</pubDate>
      <link>https://forem.com/joshuawilluhn/visualizing-motorcycle-motion-3io9</link>
      <guid>https://forem.com/joshuawilluhn/visualizing-motorcycle-motion-3io9</guid>
      <description>&lt;p&gt;Motorcycles, love em or hate em you probably have an opinion. I'm in the love em camp. Like most people who ride for fun, I think the best roads are the curvy ones. Every turn, hill, valley or canyon presents itself as a series of challenges. &lt;/p&gt;

&lt;p&gt;Each turn is putting your life in the mercy of gravity and traction, as you lean over centrifugal force keeps you from crashing as long as you have traction.&lt;/p&gt;

&lt;p&gt;Unlike a car there is no room for error. You can't bounce off the guard rail in an attempt to "debug" your driving style, or to launch your new fender design. Every movement counts and even what would be a minor threat in a car is more likely to be deadly. &lt;/p&gt;

&lt;p&gt;With great risk comes great reward, riding to the mountains is what forces me to confront my fears and abandon them in the wind. The scenery is epic, the air is fresher, even the bugs splatter a little better across the front of my bike. I can't help but to feel very alive.&lt;/p&gt;

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

&lt;p&gt;It’s hard not to appreciate the moment when the last one was filled with reacting to a semi truck or minivan turning in front of you 😂 a misjudged corner or a 2x4 flying out of a truck at your face going 80mph could've ended your life and getting home is a reminder of the most precious things. I get home and my problems that felt overwhelming before I left feel far less significant. &lt;/p&gt;

&lt;p&gt;It doesn't feel like being in a car because everything you experience is much more raw. You smell the rivers, you feel the bugs hit you, the pot holes begin to hurt after a few hours, you're part of it not just traveling along complaining about bumps making you spill your food. If it rains, you get wet. If it's hot you sweat. If it's cold you hug the engine for warmth. If there's lightning or a freak hail storm you can crash and die. Even a strong enough gust of wind over the top of a 14,000 ft mountain will send you off the side without a guardrail. &lt;/p&gt;

&lt;p&gt;There's something truly epic about it because when you get home it's after an adventure and just arriving home is reason to be happy. In a car it's not quite the same, especially a modern luxury car that can cost more than a house in some places. &lt;/p&gt;

&lt;p&gt;The idea of turning those movements and that adventure into numbers saved into a database in an app? It captivated me. The result is an app I made called &lt;a href="https://motorift.com" rel="noopener noreferrer"&gt;MOTOrift.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's really two Android apps and a web app. &lt;/p&gt;

&lt;p&gt;One app records data, IMU and GPS data, the others analyze it and let you view it back. You can see stats about your ride like 0-60 times or 1/8 mile times. &lt;/p&gt;

&lt;p&gt;You can select any corner or series of corners and see your gravity or IMU data from there. Data exports to CSV or KML to put in videos with Adobe product or on Google Earth. It has heatmaps, analysis, graphs, and weather data to round off the current beta version. &lt;/p&gt;

&lt;p&gt;The goal is to Visualize Motorcycle Motion.&lt;/p&gt;

&lt;p&gt;I should say... it's a work in progress but it's also been "beta launched" for a year now. The project originally started as RideData.net with an Arduino Bluetooth project back in 2015. About a year after I launched the first version, I dropped support for it (2016) and pulled the app from the play store. &lt;/p&gt;

&lt;p&gt;It was a cool idea, it just wasn't good enough execution tho. Motorsports and motorcycle telemetry has been around for a few decades now so it isn’t like it’s a completely new idea. &lt;/p&gt;

&lt;p&gt;I needed to rebuild everything and after a year of planning and developing another app I started in on the new version of what would become MOTOrift in late 2017. It took another year to launch to the beta version in October 2018 and it's been in beta for a year. &lt;/p&gt;

&lt;p&gt;That's where I'm at now. In the next few months I plan to add more features, redesign the web app and launch the full version as a freemium style product. &lt;/p&gt;

&lt;p&gt;So... what does it look like?&lt;/p&gt;

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

&lt;h1&gt;
  
  
  That's a live map view
&lt;/h1&gt;

&lt;p&gt;I tried to make it interesting, I didn’t want to do another material design outright. I regret it occasionally but most of the time I’m glad I went the route I did. I did the graphics with Adobe[]. The button icons are from flaticons.net&lt;/p&gt;

&lt;p&gt;You can choose from a variety of theme styles for day or night mode.&lt;/p&gt;

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

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

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

&lt;p&gt;Maps are a big part of the app, I use mapbox and there are 20+ map styles to choose from. Some were the standard mapbox styles others ones I made or customized. There's the live map and maps in the RideView companion app, a heatmap with more details and a point map you can select from.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  That's a heat map you can select between data sets
&lt;/h2&gt;

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

&lt;p&gt;On the point map you can select two points and dig into the data between them.&lt;/p&gt;

&lt;p&gt;I still have some major features to develop but it’s getting closer to being “done” or at least what I’ll consider to be a full version. &lt;/p&gt;

&lt;p&gt;I tried to take some risks designing it and hopefully once it’s further along it’ll be more worth it 🤨 sometimes I consider redesigning it as a material design but I also like what I’m making. &lt;/p&gt;

&lt;p&gt;I tried to make some digital art for it to make it look interesting. &lt;/p&gt;

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

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

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

&lt;p&gt;Keyword is try 😂 I'd love to hire a designer to make some art for it one day but for now I just gotta do the best I can with the (lack of) design skills I have.&lt;/p&gt;

&lt;p&gt;This is my attempt at visualizing motorcycle motion, tell me what you think? It works with high performance vehicles of all kinds too not just motorcycles (it's just a GPS+IMU data logger). If you'd like to try it, &lt;a href="https://motorift.com" rel="noopener noreferrer"&gt;MOTOrift.com&lt;/a&gt; will get you started. &lt;/p&gt;

&lt;p&gt;You can read my intro here {link once published}, it pretty much says the same thing as this (not worth your time tbh 😂).&lt;/p&gt;

&lt;p&gt;For the new year, I'm launching a new version of the marketing landing page (1/1/20!) and I'm starting a new blog. After that I'm planning a new version of the web app.  &lt;/p&gt;

&lt;p&gt;I'm writing a case study about my most recent web redesign that'll probably be out in the next few days or so. I'm trying to ramp up the website so it's ready for the next round of app updates and eventually premium features. &lt;/p&gt;

&lt;p&gt;Well, this is me. Tell me what you're working on or hit follow I'll follow you back 👍&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>blog</category>
      <category>ux</category>
      <category>startup</category>
    </item>
    <item>
      <title>Write {for} Better Software</title>
      <dc:creator>Joshua Willuhn</dc:creator>
      <pubDate>Thu, 02 Jan 2020 03:20:54 +0000</pubDate>
      <link>https://forem.com/joshuawilluhn/write-for-better-software-2lc4</link>
      <guid>https://forem.com/joshuawilluhn/write-for-better-software-2lc4</guid>
      <description>&lt;p&gt;Whether it’s Coding Apps, programming SaaS, making PWAs among the clouds, engineering desktop software like its 1999 using Borland's C++ Compiler and Books, Reacting or Vue-ing on the modern web, designing native based web apps, developing web based native apps or my grandma’s favorite - using cards with holes in them that get fed into a computer the size of Kansas - it’s all roughly the same basic idea of convincing a computer to do something useful or cool. &lt;/p&gt;

&lt;p&gt;My goal in 2019 was trying to do that... better.&lt;/p&gt;

&lt;p&gt;My goal for 2019 was to write better software, I'd like to think I didn't fail. Probably the same goal as 2018 too. But in an attempt to create a better software product overall, I want to focus on  writing better in general for 2020. I want to write better words for human consumption instead of just for the compiler or browser engine.&lt;/p&gt;

&lt;p&gt;Whether it's in app prompts, app support or marketing and tutorials they all require a slightly different writing style. Without good copy on the website it doesn't matter how cool the app is or who clicks the link to read about it because nobody will read the page if it isn’t interesting. Writing is important.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who am I? What am I working on?
&lt;/h2&gt;

&lt;p&gt;I’m Josh. I live in Colorado. I'm working on a GPS and IMU data logger for motorcycles and high performance vehicles at &lt;a href="https://motorift.com"&gt;Motorift.com&lt;/a&gt; It uses phone sensors to record and analyze data to create a motion profile of your ride. &lt;/p&gt;

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

&lt;p&gt;If you're not familiar with the joys of riding a motorcycle, what you should know is for most people who ride one, the fun is in the corners. As you lean into a corner a mixture of gravity and centrifugal force catch you from falling over and keep you upright...unless... well, unless the tiny bit of tire that actually touches the ground at any given moment slides out from under you. But most of the time it goes great 👍 &lt;/p&gt;

&lt;p&gt;To successfully ride a motorcycle is a delicate balance of throttle control and body movements. The throttle position, the suspension and the actual body movement required to go around a corner are all tightly related. &lt;/p&gt;

&lt;p&gt;When you let off the throttle the front tire gets more weight on it from the suspension shifting forward as you decelerate. When you twist the throttle to accelerate, the rear tire gets more weight from the suspension shifting rearward. Whichever tire has more weight is doing more work. &lt;/p&gt;

&lt;p&gt;Ideally, when going around a corner you want to have the throttle at least "on" even if you're not accelerating, that's to keep the weight on the rear tire because the rear tire is bigger and that's the one you want don't most of the work around a corner. &lt;/p&gt;

&lt;p&gt;The same thing happens in a car, but it gets amplified on a bike.&lt;/p&gt;

&lt;p&gt;What does this have to do with software development? Turning those movements into data and then putting that data on the screen in a meaningful way is my goal in life at the moment. If you're leaning hard into a corner or accelerating I want to show that vs where you were riding smooth.&lt;/p&gt;

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

&lt;p&gt;To most people it's not interesting at all, I mean who cares, right? But to a few people who really like riding around on a bike or have a high performance car, it has the potential to be an interesting way to learn about your riding style. &lt;/p&gt;

&lt;p&gt;Motorsports telemetry has been around for decades now, it’s nothing too new. MOTOrift is my attempt to make something cool out of it for my bike. I didn't make it for a million people or to appeal to everyone with a bike so that freedom allows me to create what I think would be cool and what I think I can make a reality.&lt;/p&gt;

&lt;p&gt;The app also does timing like 0-60mph, 1/4 mile times, weather maps, gear ratio calculator and plenty more. It’s a pair of Java Android apps with a web app tying it all together.&lt;/p&gt;

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

&lt;p&gt;The idea is to have one app that just does data recording, and another app that does all the data analysis and viewing.&lt;/p&gt;

&lt;p&gt;Two apps means I can focus on making both sides of the experience as cool as possible without them running into each other. There's a webapp and plans for more desktop tools as well. It means your driving coach or crew chief could learn from it as well by logging into the app if you’re a more established driver/rider. &lt;/p&gt;

&lt;p&gt;Going from a working app in beta to a fully functional product has been a challenge. As it gets closer to that point I find myself needing to write more and more. A polished product needs help with decent readable copy writing on the website, and writing it is part of developing the app.&lt;/p&gt;

&lt;p&gt;I need to practice writing and conveying these ideas. I used to write on Medium until their paywall changed the value I was getting from the site, I don't want my words behind a paywall so Medium and I have gone our separate ways. I've been hanging around here on Dev.to for a solid few months, I like it here so I thought I'd say hi 👋&lt;/p&gt;

&lt;p&gt;What can you expect to see from me? I've always wanted to make one of those developer blogs that just talks about random different things during development. Hopefully that's what this will be if I can make it interesting to read, that's really the challenge. &lt;/p&gt;

&lt;p&gt;I have a few things on Medium still that deserve a better home or to be rewritten so maybe I'll move them over here before Medium is gone for good. &lt;/p&gt;

&lt;p&gt;I'm midway through on a full redesign/rebuild/re-everything for my marketing and help website and the web app after that. I'm writing about it to kick things off so that's what you can expect from me soon. &lt;/p&gt;

&lt;p&gt;Well, this is me. Say hi share what you’re working on if you want to and smash the follow button 👍&lt;/p&gt;

</description>
      <category>goals</category>
      <category>firstpost</category>
      <category>startup</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
