Menu

Colin Devroe

Reverse Engineer. Blogger.

Follow: @c2dev2, RSS, JSON, Micro.blog.

Developers, Let me tell you about Microsoft (audio)

I’ve been writing about Microsoft’s moves for the last three years. This week everything has come together and I’ve been writing my first multi-platform application using C# and Visual Studio. In this long rant I go on and on about how Microsoft needs to spread the word about what they are up to.

Links for this bit:

Download.

My tips for new iOS 11 upgraders

I’ve been using the iOS 11 public betas on my iPhone and iPad for several releases and I think it is one of the most important updates to iOS. It brings lifesaving features to the iPhone and powerful features to the iPad.

Tomorrow iOs 11 is being released to the public, I thought I’d jot down a few things that I believe people should do on the day they upgrade, so that they don’t just move on with their busy lives and forget.

  • Turn on automatic Driving Mode detection. This setting could save your life and those of others. You have no excuse good enough to justify being able to text while you drive. iOS 11 does a good job of detecting when you are driving and turns off all notifications. Almost immediately when you exit your vehicle at your destination your messages are waiting for you. I love this setting. Settings > Do Not Disturb > Do Not Disturb While Driving.
  • Set up Driving Mode auto-replies. Optionally, you can set iOS 11 to automatically reply to certain people with messages that you’re driving. Or, you can keep this feature off and people will simply believe you have a life and cannot respond to every text message within 15 seconds of receiving one. Settings > Do Not Disturb > Auto-Reply To.
  • Customize Control Center. The control center (the screen you get when you flick up from the button of the screen, or from the top-right on the iPhone X) is very different than iOS 10. You can now add or remove buttons from it, and even customize their position on the screen. I’ve chosen to have Camera, Notes, and Voice Memos easily accessible in the bottom-right of the Control Center. I love it. Settings > Control Center > Customize Controls.
  • Identify faces in group photos. For those of you without a Mac, you’ve never had facial detection and naming capabilities for your photos. Now you can put a name to a face in iOS 11 and when your device is locked and plugged in it will rummage through your photos for you and find the vast majority of the other photos with that person in them. I’ve found that using large group photos is the quickest way to finding the most people. So, start off finding a few dozen group photos, naming everyone in them, and then let iOS 11 go to work at night. It is surprisingly good and getting better with every release. Photos > Find a Group Photo > Swipe Up > Click on person under People > Tap “Add Name” (repeat for all people in the photo).
  • On iPad: Customize your Dock. You can have up to 15 apps in your Dock on iPad. You can also add more by adding folders of apps. There is also an area on the right side of the dock that can show recent apps. Turn on Recent Apps in Settings > General. Otherwise, drag your favorite apps into the Dock.
  • On iPad: Practice multi-tasking, split-screen, and drag-and-drop gestures. iOS 10 has had split-screen features for iPad since it was released and I still see many iPad users that do not take advantage of them. iOS 11 makes these features even more powerful. Unless you make these part of your muscle memory by practicing them, you might be under-utilizing the power of your device. Watch this video on YouTube to see how best to open multiple apps, drag-and-drop files, and more.
  • Try out Notes’ new features. Notes has some new features that you will definitely find useful but you need to know they are there. Try some of the following:
    • If you have an iPad Pro with Apple Pencil, try tapping your Pencil on the lock screen. This results in a new note. Pretty slick.
    • Try the document scanner. iOS 11’s ARKit features allow for a pretty practical use of this technology in scanning a document and being able to sign it with ease. It is remarkably good. Put a document on a table, open Notes, in a new Note hit the + symbol, select Scan Documents. Prepare to be wowed. I wish this feature were part of the camera somehow or its own mode from Control Center. Again, here is a good video showing how this works.

By doing the above you may just save a life. But, also you’ll get far more use out of the device you already own and take full advantage of this monumental release of iOS.

If you have any others, feel free to leave them in the comment section below.

Attending September’s NEPA.js meetup

On September 12th, NEPA.js held its September meetup. Anthony Altieri presented on beacons – the typically small Bluetooth devices that “chirp” some very basic information multiple times per second allowing app developers to understand the proximity of a user. This allows for things like understanding where a shopper is in a retail space.

His overview of the devices, the spec, some of the software, and the differences between iOS and Android, and iBeacon and Eddystone – was a really nice introduction into the space. He did a great job.

I learned a lot during his presentation. Thanks to him for putting it together.

If you haven’t yet been to a NEPA.js and you live in our area – I implore you to check one out. It is consistently attended, always fun, and isn’t always focused solely on JavaScript. But even if it was, it is worth your time.

A unique color for every address in the world

A recent, yet-to-be-announced client project had me designing a mobile app interface that dealt a lot with showing locations and events that are happening at certain locations (how is that for vague? sorry).

While I utilized the brand’s colors to represent certain sections of the app I wanted the app to have tons of colors in order to portray a sense of fun throughout the app. But how could I incorporate pinks and yellows and bright greens without the overall brand disappearing?

After toying with a few design ideas I had an idea to create a unique color for every address in the world. This would result in two benefits; first, each location was then branded as a color, and second, every user would see that location as the same color. If I were a user of the app here in the US and I flew to Spain and looked at a location for an event  there, I would see the same exact colors representing that address as the person that lived in Spain and created that event.

Since I wasn’t to be the developer of the mobile application I wanted to avoid the possible pushback this idea might receive from that team. I didn’t want to add burden to the other people on the project by showing a design mockup and a set of requirements and then walking away. I wanted it to have zero overhead for the developers.

One of the solutions I discarded was generating a random color each time an event location was added to the service and then store the color for that address in a database. While this solution is relatively simple to implement it was no good. It adds more work for the developers and they have to maintain the datastore indefinitely. Several other ideas with the same caveats came to mind and I quickly tossed them into the bin.

Once I eliminated all of the ways I didn’t want to solve this problem – the solution came pretty quickly.

Since every address is already unique, I just needed to find a way to represent an address that could be turned into a color. In other words, I wanted the address itself to represent a unique color. And I wanted to do it in realtime as the application’s UI loaded.

So I jumped into JavaScript and began working it out. Here is what I settled on:

This solution allows for just over 16.5 million colors. Far more than this app will likely require during its lifespan.

Here is a demo of the process and if you view the source you can see the code at work. It is fairly simple to follow.

Oh, there was an issue that I ran into with this solution that was fun to solve. If the background color that was generated was too dark the text became hard to read. So digging around I found a way to determine the luminosity of the background color and thus change the text to something a bit lighter in those instances. That too is shown in the demo.

I was then able to repurpose this demo code and give production-ready code to the developer that is going to ship in the app. When that ships I’ll write more about it.

Colin Walker: “Should replies be posts?”

Colin Walker, in a post on whether or not replies to other posts (or, comments) should be their own posts:

There has to be a line, a point where a comment is just that and not a reply. It’s a question of semantics but not everyone’s answer to “what is a comment and where does it belong?” will be the same.

I struggle with this a lot.

It is likely the point I should have made in my post regarding Micro.blog becoming a commenting service (and the fact that I don’t like that). I don’t want to reply on my blog to every reply to my posts on M.b because then I would have dozens and dozens of posts on my blog that would be very tough for readers to follow contextually. I believe the commenting mechanism that has been around for decades, even un-threaded, is far more useful than dozens of desperate posts stitched together loosely with a link that says “in reply to”.

Webmention attempts to bridge that gap between post and reply but that also is tough to follow along if the thread gets unwieldy.

However, I also don’t want to reply to every reply on my posts directly on M.b either (though, I do from time-to-time) as that isn’t much better than using any other silo like Twitter or Facebook. Should M.b go away, all of those conversations would be lost.

This isn’t a new issue nor is it exclusive to M.b. If I replied on my own blog to other people’s posts on their own blogs (like I am in this post to Colin Walker’s blog) then one side of the conversation could disappear at any time. I can only control my side of the equation. But at least if I have my own blog I have control of that one side.

I think it is good that these topics are being discussed again. The same debates have been swirling since blogging began, they swelled again when the indieweb movement began to take shape, and I think they are happening again as a result of M.b’s growing community. I do not believe there is one single answer to many them. You have to do what is right and sustainable for you.

For now, here are my personal rules for replying to posts. These will most definitely change over time.

  • If I want to say a quick “congrats” or “excellent post” or something of that nature I will leave a reply directly on their blog. If they do not have commenting turned on I will attempt to email. If they do not have email publicly available I’ll say nothing at all.
  • If I have something substantive to add to the conversation, or if I would like my “followers” to see the post I will quote the post on my blog with my additions to the conversation. Like this post.
  • If I simply want to direct people to the content I will use my new repost tag that I’ve been experimenting with. I’ve seen others use the “a post I liked” type post. That could work too.
  • If people reply using M.b, Twitter, or Facebook I will not reply on those services*. But I may reply on my own blog.
  • If I would like to keep my reply private I will attempt to email.

As an aside: I know some of you do not want to leave a public comment. I love getting reader emails. I get a fair number of them. And some of them have been excellent conversations. So please don’t hesitate.

* I no longer have a Twitter or Facebook account. I do have a M.b account but I’m beginning to wonder if I need one as I have my own fully functional weblog. If I didn’t and I wanted a microblog and didn’t want to use Twitter, I could see having an account. If I wanted a more fully featured blog I still believe WordPress is the best tool for that. Also, I’m sure as the M.b community grows it could mean that my content would be discovered by more people. I think M.b may end up being a thriving, well run, community and service. It is why I backed Manton’s efforts via Kickstarter. But, if I have my own blog, and if I really don’t care much about my content being discovered, then I see little reason to syndicate to it. For the time being I’m still going to as I want to see how the service matures.

Presenting at the August 2017 Lehigh Valley Tech Meetup

The Lehigh Valley Tech Meetup is an excellent community in the Lehigh Valley that meets monthly at the Ben Franklin Technology Partners incubator within the Lehigh University Mountaintop campus. The community around the meetup is excellent and the building is amazing*.

While the tail-end of my presentation walked through my experience building my first iOS app Summit, the majority of my presentation was focused on helping early stage companies think about their go to market strategies.

I’m currently advising several companies, a few of which are businesses built around mobile apps, and have heard about 11 other start-up pitches this year so far. And during that time I’ve noticed a trend. Entrepreneurs that are attempting to build a business around an app sometimes underestimate the amount of thought that should go into the marketing and sales strategy for the app. It is as if some feel that apps are less thought and work than products that you can touch. So during my presentation at LVTech I hoped to convey that the same “boring” (yet, tried and true) business practices that apply to products also apply to software.

A few questions I urged those thinking about building a business around an app were:

  • Does your idea service a large enough segment of the market? We hear the “scratch your own itch” mantra a lot. However, it won’t always lead to finding hundreds, thousands, or tens of thousands of customers.
  • How will you reach those customers?
  • Are there ways to expand your idea into other products or services that can be sold to the same segment?
  • How will you sell or package your idea?
  • What will the price be? (free, one-time payment, subscription, service contracts)
  • What channels can you leverage to sell your idea? (App Store, retail, online, conferences, distributorships, via a sales force)

By considering these, and may other questions, you can determine if your idea has enough layers to support an entire business or if you just have an app idea**.

I also briefly discussed three misconceptions I’ve been seeing over the last year dealing with very early stage start-ups. These misconceptions were:

  • Press-based launch strategies: some thing that by being covered by press will be enough to get them to profitability. They have no other strategy. On the contrary, getting press coverage early on will give you very muddy analytics which will make decision marking very difficult. Very seldom are the tech audience your real customers.
  • How long until profitablilty: More and more entrepreneurs begin with the plan of losing money for 3 or more years. I believe this stems from press coverage of other companies getting large rounds of funding. Most businesses should strive for profitability within the first quarter or year of business.
  • ”I’m not technical, I need a technical co-founder”: Don’t be this person. Anyone can learn to code. Geeks are not smarter than you. They’re just interested and relentless. Be the same.

We then did about 10 minutes or so of questions and answers. The questions I got were really great and I appreciate all those in attendance helping me with the answers to the questions I didn’t have much experience in.

Thanks to Tim Lytle for the invitation to speak and to Ben Franklin Technology Partners for the continued support.

* I worked in this same building for years while at Viddler. But when I worked there the back half of the building didn’t exist. In fact, Viddler started in Jordan Hall – the building just beside the new building. And now, they are extending it even further. The building is an amazing place to work and have a meetup of this kind. I’m jealous that our incubator in Scranton feels so dated when compared to this building. Especially comparing the meeting spaces.

** It it totally fine to “just have an app idea”. I do. And I’m loving working on it. But it is also good to have the proper perspective about your app idea.

Summit – The Adventurous Step Counter

This evening, at a presentation at the Lehigh Valley Tech Meetup, I’m opening up public beta access to my new iOS app, Summit – The Adventurous Step Counter.

I’ve stitched together a temporary web site for the app as well as a mailing list that will allow you to get access to the final few beta builds prior to public release. If you have an iPhone please consider signing up and giving it a spin. I’d be very grateful for your feedback.

Thanks to the 13 private beta testers who have already tested the app and provided feedback. You can expect a brand-new build of the app coming in September.

What is Summit?

Summit is a free, iOS-only app that uses your step count to virtually hike up tall peaks like Mount Everest in Nepal, learn about amazing landmarks like Diamond Head in Oahu, and even take a leisurely stroll down famous streets like Lombard Street in San Francisco. As you make progress on your journey you’re provided new information at each goal.

At the time of public release there will be 5 summits and new summits will be added each month thereafter.

Here are some screenshots of the app as it is currently:

When I started on Summit I did not know how to develop an iOS app. It has been really fun to learn Swift, Xcode, iTunes Connect and Test Flight, and the myriad other things I was able to learn in order to get this app as far as I have.

I still have a bit of work to do, but I’d love your feedback along the way as I finish the app up for release.

My personal blogging tips

I’ve been writing things down on my own blog for a few decades. I wish more people did too. If you’d like to have a personal blog but struggle finding things to write about, here are a few tips that may help.

  • Don’t post about what you will do, post about what you’ve already done – In other words, I try to avoid the “I should blog more” posts and just get on with blogging more. Also, I like posting photos and status messages sometime after they’ve happened.
  • Find a theme – Niche blogs do extremely well. So stay on topic. Personal blogs do less well but they should still have a theme and that theme should be you.
  • Create reasons to post – My What I saw series and observations series give me a reason to write. Should I feel writer’s block I can fall back to one of the series.
  • Have a schedule – I try to post one or two posts per day prior to 9am. Some are scheduled in advance some aren’t. Everything else that happens is completely random.
  • Be totally fine with missing the schedule – Sometimes I don’t blog for a few days or weeks due to time off away from the computer or just being focused on something else. And I’m totally ok with that.
  • Don’t post test posts – Create a staging or a local development environment to test your site’s features. It is really easy to do.
  • Try not to care about stats – Stats are useful for a number of reasons but obsessing over them won’t help you at all. Check them once a month to see how you’re doing.
  • Create an inspiration list – In your notebook or notes app write down some topics you’d like to write about someday. Make it long. Like, 50 items. Don’t worry too much about what should be on it just start writing the list down. When you can’t think of anything to write about look at that list and simply pick any one at all and check it off.
  • Subscribe to a bunch of blogs that interest you – More than likely the conversations started by others will give you more than enough to write about.
  • Perfect is the enemy of good – Just hit publish.
  • Have fun! – I’ve thoroughly enjoyed blogging all these years and I don’t imagine I’ll be stopping any time soon.

If you have a neglected blog or are just starting one – jump in! Oh, and don’t forget to email me the URL.

Attending the August NEPA.js Meet up

The NEPA.js Meet up is really hitting its stride. Each meet up is pretty well supported – even in the summer – and the camaraderie and general feeling around each event is pretty great. Also, the Slack channel is pretty active.

If you’re within an hour or so of Scranton I’d recommend joining the meet up group, jumping into the Slack channels from time-to-time, and attending at least a few events per year. If you need help with any of these things send me an email.

Also, within the past few weeks we’ve seen a new group spin out of the NEPA.js group. A more general meet-and-work-on-stuff type of group created by Den Temple. This event fills the gaps for when there isn’t a NEPA.js group event.

This month’s presentation was by Ted Mielczarek. Ted works at Mozilla on build and automation tools for Mozilla’s primary product Firefox. He has, though, dabbled in a variety of other things at Mozilla like crash reporting and the gamepad web API. It was his experience building this API that spurred this month’s topic; Web APIs.

I remember jumping onto the web in the 90s and being blown away when I was able to put animated GIFs of X-Wing fighters on my personal Star Wars fan page. Today, web browsers support a variety of Web APIs that make the open web a true software development platform. There are APIs to control audio and video, to connect to MIDI-enabled devices, to connect to Bluetooth, VR and – of course – to allow for game controller input. There are lots of others too.

Ted did a great job showing demos of many of these APIs. Just enough for us to get the idea that the web has matured into a powerful platform upon which just about anything can be made.

Thanks to Ted for the work he put into creating the presentation and to all the attendees for helping the NEPA.js community thrive.

Following Twitter accounts via RSS

I haven’t missed Twitter that much since deleting my account. The first week or two I missed Moments – but once that subsided I realized that Moments are generally a waste of time. Realtime reporting of most newsworthy events result in ill-informed, unsubstantiated tweets. I’m at a point now where I’d much prefer to get the real story after-the-fact rather than realtime.

There are instances where realtime reporting can be incredibly useful, such as when there is a fire, a traffic accident, or a natural disaster happening. Those tweets can save lives. But, in general, I’m perfectly OK with reading up on the news once or twice daily to see what really happened.

I do miss certain Twitter accounts. Especially those that do not have a blog or web site counterpart that I can follow along through another medium. And since Twitter is still web and developer hostile (meaning their API is far too limited and they don’t support open web distribution technologies like RSS) I’ve missed out on a lot of great content from those Twitter accounts.

So today I went searching around for some RSS feed generators that would use what little access to Twitter they have (presumably the limited API or HTML scraping or both) to create an RSS feed from accounts or hashtags or lists. And there are a number of services out there, some of which you have to pay for, others that toss in some ads, or others that are severely limited.

Then I found Publicate. I’m using Publicate’s Twitter RSS Feed Generator to create a few feeds based on some Twitter accounts I miss the most. You simply type in the URL you want to create a feed from, give them your email address*, and they provide a feed URL. So far it seems to be working. I’ve created a new collection in Feedly to store these feeds. Hopefully I’ll get the tweets I wanted to see most and I won’t have to deal with the drivel and hate I’ve seen on Twitter over the last 18 months. Or even Twitter itself!

* I certainly don’t mind my email address being a form of payment to a company. So I gave it to them. But, if you’re a bit of a hacker it is quite easy to dismiss the overlay, read the page’s source, and grab the feed URL without giving Publicate your email address. I want this tool to stick around so if my email address helps them to keep it up-and-running so be it.