I Am Finley

Featured

Selah Chords, a beautiful new chord finder for iOS

0 Comments

Over the last year I have been learning both ukulele and mandolin, after 20 years of playing guitar. As I tweeted over the weekend, I bought a ukulele and looked for a chord app. I had a couple for guitar, but none of them supported ukulele. I found out pretty quickly that most of the apps suffered from similar issues. They were hard to use— bad UX/UI—, lacked iOS esthetic, and didn't have the features I needed most where they needed to be.

Now so much of that is subjective. Yes. True. When I am looking for a chord voicing, I am looking for where I can play it. The most popular apps show a single voicing at a time.

Take this app from The Ukulele Teacher. Are there other voicings? I will guess that the 1/32 up top indicates that there are. But how do I get to them. Swipe right to left? Nope. Maybe that next arrow in the bottom right? Crap! Now it's playing an audio clip of the voicing. Swipe up? There it is! But no scroll indicators, just a change of the fretted notes and the "1/32" changed to "2/32".

Now I want to switch to a D minor. How do I do it? Tap the C major "title" up top? No. The music note at the bottom?

Not the easiest thing to use. And to be hidden away behind an ambiguous button when it is an action I am going to use the most? Not good.

Pulling Back

I have been playing guitar for 20 years and never learned basic music theory. I didn't know how chords were formed, just where they were. Sure, I knew that they were multiple notes being played, but I never cared or concerned myself with which notes aside from my root was being played.

So I started there. How is a C major chord formed? Well, it's based on the C major scale. I didn't know my scales. Or how they were formed. Guess I would start there.

A scale starts with the root note and then takes a certain number of whole and half steps between notes back around. A major scale, for instance goes 1, 1, 0.5, 1, 1, 1, 0.5. That C major scale? C, D, E, F, G, A, B, C.

So back to that C major chord. How is that chord formed? A chord is formed on intervals of a scale. The major chord is using the I, III, and V intervals of major scale. Roman numerals for some reason. There is likely a wiki page for that explanation, if you are interested. So we start at I, which is our C, go to III, our E, and end on V, our G.

To the programmer reading this, you might have noticed that this is math. I certainly did. And math I can do. I love math.

So I Built an App

Looking through the App Store for an app that scratched my itch made me sad. As a UX/UI engineer, I decided that if this was just math, I could design a better looking/working app and build a chord finder that didn't suck. But first I needed an engine. Take that math and turn it into an algorithm. An algorithm that I could hand a set of strings and tell it to find the C major voicings— different ways to play it across the neck of my ukulele.

This was, surprisingly, done on an iPad. I opened Swift Playgrounds and built the first prototype of the algo there. Even had it doing basic drawing of the chord chart.

The algo was straight-forward. Use the above math to find the notes of the requested chord, find all the notes on the set of strings given, then find all possible combinations of those notes on those strings. From there start narrowing it down to actual, playable chords.

It worked, so I started the design process.

Defining the App

What's in and what's out. So I had a powerful algorithm. I could give it 4 strings, and it'd find the voicings of a specific chord. I could give it 5 strings. Six strings. Seven. Ooo. I decided I wanted to support multiple instruments, obviously guitar and ukulele being the top of that list. But as I built the first working prototype app and had it running on my phone, I switched to mandolin strings and went to Guitar Center to play around. See how well it worked and if I could pick up another new instrument. And it was a success. One that went onto me buying a mandolin too.

The app was to stay simple. Prize simplicity, be willing to hold back functionality that other apps may have. No scales, no arpeggios, lots of noes.

So what was required?

A beautiful, clean interface. Easily scroll through a list of chord voicings. Big enough that you could read them comfortably, but small enough that you could see many at once.

A simple mechanic to switching between chords. That above ukulele app made it very difficult to switch chords. Others do as well. I wanted none of that. So my app would have two bars. Segmented controls. Easily switch between root notes and chords.

Multiple instruments/tunings and easy switching between them. This would be in a drop down. I wanted this to be quick to access, but you wouldn't be switching instruments as often as you switched chords, so a drop down was logical.

Removing Features and Narrowing in on Version One

I wanted banjo support in version one. And the ability to mark a voicing as a favorite. And support for adding custom tunings. But shipping is more important. I shifted from feature building to spit-shine mode in October, realizing that I had a perfectly usable app.

I always remind myself of 37signals's Rework book. Do I want a half-assed whole product or a kick-ass half product? I can ship a dozen features with bugs and no polish or ship a half-dozen features with delight and polish galore.

So I Spent My Year on an App

Like most programmers that decide to pick up a new hobby, instead of learning and mastering ukulele this year, I learned basic music theory, built, and launched an app.

Yeah.

Selah Chords has shipped. And the initial reviews are that it is beautiful, intuitive, easy-to-use, and extremely useful.

And coming soon, banjo and favorite voicings. And after that, custom tunings.

Get it for free today!

Permalink

Truth matters. Words matter.

0 Comments

Truth matters. Words matter. Without meaning, words are pointless.

When you hear “school shooting”, yesterday is what comes to mind. And yesterday was terrible. Seventeen dead. And it took just minutes for the media to start talking about ways to prevent this, both sides having their piece, their take. Before the bodies are even buried, before most parents even knew their kid was one of the dead ones, we are calling half the country evil for supporting gun rights.

The statistic being quoted by many last night and this morning is that in 2018, a year that we are only some forty days into, has seen eighteen school shootings, referring to the reporting from a group called Everytown for Gun Safety. That is truly an appalling number. 18 school shootings. When you hear “school shooting”, yesterday is what comes to mind. And yesterday was terrible. Seventeen dead. But yesterday is not what Everytown is calling a school shooting. They are counting all shootings at schools or involving schools. Truth matters. Words matter. Without meaning, words are pointless.

So what does this reporting from Everytown mean? Eight of those eighteen resulted in no injuries or fatalities. Two were suicides, one in the parking lot and one in the bathroom at a school. One was a gun fired unintentionally, no one hurt. Of these eighteen incidents, three people were killed— not including the two suicides— and roughly 30-35 were injured, according to The Daily Wire.

We all wish that yesterday was one bad day out of a million good days. We all wish we had a billboard that counted the days from the last school shooting and it had been at 30 years. But when “we include suicides, accidental discharges, purposeful shootings without injuries, and purposeful shootings without only ‘superficial’ wounds” as school shootings on par with what happened yesterday our words lose meaning. We become numb. Yesterday was just another school shooting. That was the new normal. But it isn’t. It isn’t the new normal.

Truth matters. Words matter. I hope that you agree.

Permalink

In the Shithouse

0 Comments

As Republicans defend President Trump's language once more, I stand over here as a conservative without a party. These fake, ambulance-chasing Republicans are trying to defend a sitting president using language we wouldn't want our children repeating. I said after the election that I couldn't vote for President Trump because "I couldn't explain that to my daughter". I can't agree with them. This language is inappropriate for a world leader to be using to describe our allies.

But the Left wants this— too— to be about racism. It has to be about one of their -isms or -phobias. It always has to be. Why? Is it because victim identity is the new sacred? Had he called Norway, a predominantly white nation, a shithole, would so many Leftists be offended? Would they think he's talking about race?

I don't agree that this is about race. No, I think this is a case of a man that lacks control of his tongue. He described a poor, third-world nation as a shithole. He described a nation, not the people. Yes, there are, to quote a tweet, brown-skinned people living there. But it's a nation that you see no one aside from missionaries choosing to spend their vacation days on.

So you might read the above and think I agree with the term as an adequate word to describe these nations, if one is not the President of the United States. And you might be right. But my church sends a lot of money to these nations, bringing food, water, and the Gospel of the Living God to these people. My God redeems prostitutes, dines with tax collectors, and makes the poor rich. The shitholes are just as much His as are the bastions of freedom and wealth.

In my opinion, is not our government's job to raise these people out of poverty, clothe them, feed them, and give them water. But, Christian, it is yours.

Permalink

Paid the Price

0 Comments

A young man was talking to me at church on Sunday about sports. He was bewildered that people pay to watch football when all the outcomes are planned ahead of time.

This got me thinking. Our Lord knows the outcome of every play in our life. Every misstep, every mistake, every error, every foul. Every success, every friendship made, every life saved, and every victory until time ends.

Yet, He paid the price so that we can play.

Permalink

What Are You Doing to Stay Away from Echo Chambers?

0 Comments

If you’re a conservative in tech, it is next to impossible to live in an echo chamber.

Over the last week, my Twitter timeline exploded with rage over the two big GOP topics of the week: net neutrality and the big tax bill. If I was to believe my timeline, these two items were doomsday-grade events. There was no way that a human could stand by this massive tax bill or against net neutrality. Not a single dissenting voice.

Sometimes this is a real sign that something is truly important and should be stood for or against. Sometimes this is a sign of a lack of diversity in thought or ideology in your news feed.

Seeing all these voices — voices that I greatly respect — freaking out over the tax bill, I started to wonder if the GOP had truly jumped the shark. So I went to a few major news sources and a few minor ones. I sought answers and tried to understand the facts from my worldview. And found myself agreeing with the majority of the included items, while also understanding how others would see these as bad.

Echo chambers exist when we surround ourselves with a homogeneous group of voices. As a conservative, it is next to impossible to live in an echo chamber. If you want to follow anyone in tech that matters, you’re going to hear opposing views on political matters.

What are you doing to stay away from echo chambers?

Permalink

Best Viewed in Chrome: Web Standards in 2017 #bbd17

0 Comments

This year we saw Groupon, Spotify, and DirecTV decide to only support Google Chrome. For the web standards crowd, that should enough of a rallying cry for the cause. But how did we get here? Does anyone give a shit anymore?

Last year, Jeffery Zeldman wrote:

Many web developers have “moved on” from a progressive-enhancement-focused practice that designs web content and web experiences in such a way as to ensure that they are available to all people, regardless of personal ability or the browser or device they use.

And this is the foundation for what has happened. Many web developers have moved on from Progressive Enhancement. Supporting multiple browsers is much easier with Progressive Enhancement. You rely on the error recovery that HTML and CSS provides. You build on that. Layout your page for your Lowest Common Denominator. Mobile. Then, if CSS Grid is available, enhance the layout. Provide a zip-code-based location lookup tool. Then, if the Geolocation API is available, add a button to use your location.

This was one of many big pushes of the Web Standards movement. Before the Web Standards movement, "Best viewed in Internet Explorer" was a common badge. Developers would choose to only support and test for one browser and, often, block anyone coming from different browsers. As I wrote in June, I remember when I first got my Mac in 2004, many sites blocked me altogether. IE 6 didn't exist for Mac and many sites required it.

So what? “What’s so bad about only supporting Chrome?”, you may ask. It represents over 75% of web traffic, right? So did Internet Explorer back in the day. That would be the same argument many used at that time. Back in that day, there were major feature differences between IE and Firefox/Netscape. Because standards didn’t exist, Internet Explorer and its competitors invented new features. Lots of new features. The features that were the same were often implemented differently. So supporting multiple browsers required lots of effort depending on what you needed. IT departments would prevent employees from installing other browsers and then build internal applications to run on IE only. But IE wasn’t available everywhere. My Mac couldn’t access my bank’s website in 2004 unless I set it to spoof the IE user agent. So the features that the bank needed were supported in Safari, but they had a block for browsers other than IE. If I didn’t know how to change my user agent, I’d have been blocked by something as important as accessing my bank.

Today, Edge, Firefox, Chrome, and Safari are relatively the same. Build something for Safari and it will mostly just work in Firefox. I built a project this Fall that took two months worth of work to build and only a couple hours to fix a few minor things in Firefox and IE/Edge. No big deal. But if I want to access the desktop site for Spotify on my 13" iPad Pro, they block it. I cannot install Chrome. Or Firefox. On iOS, my only option is Safari.

Support any user, no matter what browser they have. That is the job of a web developer. A user running IE 6 should be able to still view your website built in 2017. It may not have all the bells and whistles, but it should work. Because the web browser has great error recovery. A user that has JavaScript turned off and a screen reader reading the content of your site to them should be able to access your site. Unless you can make an argument that a feature is an absolute must, you should be progressively adding it.

So we are coming full circle. Overuse of JavaScript. Using JavaScript to build static, undynamic, barely-interactive websites. Supporting only certain browsers for no technical reason. Best viewed in Chrome.

We— those that believe in Web Standards, those that fought in the first battles and pushed our fellow developers to learn more and produce more inclusive, accessible, cross-platform websites— we need to stand once again for Web Standards. We need to make it clear what the best practices are and fight against the bad practices where we work. There are no excuses in 2017. Web development has gotten easier. Forking code for multiple browsers is significantly less necessary today. Changes are, usually at best, a few hours of work for big projects. No excuses.

Permalink

Experiments in CSS Grid #bbd17

0 Comments

Two years ago when Web Tools was released, CSS Grid was not supported in its current form by any browser. Now it is supported by all of them. But, in my opinion, unlike most features of CSS that have come before, Grid needs some good tooling around it to help ease work with it in development. So I have started to work on some tools to help with Grid and along the way, I have been dabbling a lot with Grid.

Below is a basic experiment: reproduce the layout of the new App Store on iOS. Along the way, I also found good use for CSS Custom Properties — Variables. I hate that they aren’t called variables. — in setting the background of articles, the background and text color of the text block on each, and more.

CSS is getting more and more powerful. But, along the way, it is getting more and more simple. Where old layout techniques (tables, floats, flex box) were truly ill-suited for layout, CSS Grid is 100% made for layout. So go, dabble with Grid. Grab a comic book and reproduce the layout. Or a poster from the 70’s. Learn the ins-and-outs of it because this is the future of where front-end web development and web design is.

Permalink

Great Thanksgiving Weekend

0 Comments

I needed the break. Our second child is scheduled to be delivered on December 18th. Of course, that means a ton of prep over the last couple months, including much-needed cleaning, a lot of furniture building, and rearranging everything. And then there is Christmas. Which I kind of love more than any other holiday.

So with an extended weekend because of Thanksgiving, we got a lot done in the Finley Home. Mostly during (well-fought) naps of our daughter Lottie. But I also got some good development time in to work on a couple of projects. I pushed two of the first updates Web Tools has seen in almost a year. For an app that I barely touch, it is still pulling about $200 a month in sales.

I also built a dresser, cycled 30 miles, got our live Christmas tree (see above), and ate a fair amount while attempting not to gain any — regret-inducing — weight. I'm down 25 pounds since the start of Summer and would prefer to keep it that way.

So: great weekend. Relaxation, code, family, and food. I give thanks to God for all of that. My wife is amazing, my daughter is a dream that I enjoy daily, and we have so many blessings in our life that I cannot begin to list.

Permalink

Dabbling

0 Comments

I’m opinionated. If you’ve worked with me or hung out with me for any period of time, you know this. I’ve been building for the web since 2001, before JavaScript libraries, before CSS, before Web Standards. That is a lot of years of experience and with it, one learns a few things. The Standards movement was a major thing just as I was getting started freelancing. jQuery was just coming about as I entered and assisted in teaching a JavaScript class in college. Responsive Web Design was coined and defined as I started my first role at an agency in Chicago.

One learns a few things.

Of the last few years, I have pushed hard against using jQuery. Simply put, most browsers have solid support for new technologies that emulate many of the great features of jQuery. Those native features do it faster, better, and require less code. Remove jQuery and you remove 30+kb of resource load.

I have pushed against Bootstrap. It is a large beast of a library when most sites that include it use it for a grid system and not much else. A grid system can be written in less than 100 lines of CSS that’ll achieve the needs of your site specifically, so why include 200+kb of resources?

I have pushed against WordPress. It’s not good for the developer and offers a not-great experience for the client. There are better CMSs.

So this Summer and Fall, I decided to dabble.

I hadn’t built a website on WordPress in many years. The last one I built was before ACF took off. So I built a client a site in WP and I didn’t hate it. Much of what I have said against WP remains true. Especially after launching a large site on Craft earlier this year. But, for what it does well, it does well. Build a couple of custom plugins was a breeze. ACF made storing complex data from two third-party sources easy and displaying it easier.

I have never used Bootstrap but always maintained that it is best suited for prototyping and administration panels. So as I started building an admin panel for a current project, I decided to try Bootstrap. And I didn’t hate it. There are parts that I won’t touch. The grid system is actually one of them. The spacing utility classes, while useful if you are not writing a lick of CSS, are another. But, the component structure isn’t far from something like Atomic CSS and is actually a welcome thing for the needs of the project. Unfortunately, it requires that the page resources weigh over 300kb, which means I will likely scrap Bootstrap in a few weeks and rewrite with my own CSS.

We must, as developers, not become set in our ways and get dogmatic about certain things. There are things that we should be more opinionated about than others. I wasn’t necessarily wrong with either WordPress or Bootstrap. But, now that I have worked more with each, I can see the lure of them when it comes to getting something done quick and dirty. Atop that, I now have a more solid argument against some points of them.

So if you haven’t dabbled with something in a while or at all, maybe try. You may learn a few things.

Permalink

Is iPad the Computer for You?

0 Comments

There’s no such thing as a laptop replacement, and if there were, the iPad isn’t meant to be one.

Matt Gemmell

Golly, I’ve been thinking the same thing since WWDC. As all the reviews of the new iPads and of iOS 11 have been hitting, the age-old— well, seven year old question has been iterated again and again. Is this the iPad that finally kills the laptop?

Seldom does the writer acknowledge that they mean “is this the iPad that finally kills my laptop?” It’s a very personal question. Apple sells many different computers.

For many, the iPhone is the only computer they need. They scroll through Facebook, reading articles and liking photos. They message their friends. They respond to the occasional email. They watch Hulu and Netflix. My wife is usually in this camp. Perfectly comfortable to never grab a bigger screen.

For others, very powerful, customizable computers are required. Video editing, graphic design, photo editing, and more. They can do everything and more on their MacBook or iMac.

And then there are those that are happy with their iPhone, but sometimes or even often need a larger display. They may use a word processor. They may communicate much more and desire a bigger software keyboard. They may even prefer a Bluetooth keyboard. They may build websites. Or design websites. Or edit photos and video.

Consumers pick the computers that suit their needs. You may find that you can do everything you need on an iPhone. You may want a bigger screen, but more portability than a laptop. Or you may need much more power for your day-to-day tasks.

For me, I haven’t touched my Mac in over a week. I haven’t needed to. I’ve found Web Tools, Coda, and a Droplet to be all I need to get my job done. Most of that time, it has been a 12.9" iPad Pro that has done the job, with an iPhone stepping in occasionally to handle an email or text message.

Is the iPad the computer for you? You won’t know unless you try.

Permalink