Menu

Colin Devroe

Reverse Engineer. Blogger.

Like? Subscribe.

The Swift Era begins

Brent Simmons:

Though I don’t discount Catalyst’s usefulness — we will get lots of apps new to the Mac — the real news this week was about SwiftUI and the Combine framework. This, finally, is a new way of writing apps, and it’s based on Swift and not on Objective-C. It’s very much not from NeXT.

We were all biting our lip waiting for Marzipan/Catalyst to not suck and Apple was busy building an all-new way to create interactive UIs for their entire line-up of devices.

I’ve watched some of the SwiftUI sessions already. It looks very impressive. It has definitely taken cues from declarative web frameworks (in the best way possible) and brought those lessons into the more structured native app world*.

If I were rebuilding Summit, my never released iOS app, I’d throw out my entire UI layer and use SwiftUI without even thinking about it. As Brent wrote, SwiftUI is the future of UI development on all Apple platforms – both released and as-yet-unreleased – for the next few decades.

* It may be because I’m currently writing a React app, but I can’t help but notice the similarities between it and SwiftUI. To have a framework that manages state and updates the UI according to that state is such a powerful way to build modern UIs. Where SwiftUI keeps a “source of truth” about a view’s state, React keeps a “virtual DOM”. Great tools and each have their place.

Xamarin videos, now on YouTube

Me, 17-minutes into an audio bit in 2017 (paraphrasing):

If you go onto YouTube search for a problem you’re having for Xcode and Swift you’ll find 15 well-produced videos to solve your problem. […] But you won’t find 15 well-produced videos with Visual Studio + C# (or Xamarin).

For the last few years I’ve thought that Microsoft needs a much larger presence on YouTube (in addition to Channel9). They also need other developers that make these sorts of videos to do them as well. I’ve long thought they should directly sponsor a series of videos from Lets Build That App’s Brian Voong.

But, perhaps this new channel will help.

Boring is good in software development

I use the term “boring” here to describe that which isn’t brand new. Sometimes we’re only excited about the new. The new car! The new house! Rather than being content with what we have, because it works or is paid off or we’re familiar with every nook and cranny, we sometimes can get wrapped up in the excitement of something new.

Chris Coyier, co-founder of CodePen, writing on CSS Tricks:

Perhaps the worst reason to choose a complex solution is that it’s new, and the newness makes it feel like choosing it makes you on top of technology and doing your job well. Old and boring may just what you need to do your job well.

Me, in 2016, discussing a topic very similar to this in a piece I then titled Use what works, play with the new:

The very same reasons Kyle uses Ruby on Rails is why I use PHP. I do like the way Ruby looks far better than PHP. (Insert GIF of DHH saying Ruby is gorgeous here) I also think that the Rails framework is well structured for web applications. I do think Go looks succinct and interesting. And Node is likely better for some of the things I’m trying to accomplish. However, I’m faster with PHP, a lot of people know it, it is very fast and stable, and has been used in large-scale projects. So I’m perfectly happy using PHP.

New (and therefore sometimes more complex to Chris’ point) may be exciting but it may not be the most reliable choice. Or the most widely tested. So you may do well to choose the old or boring choice.

This topic comes up on the blogosphere every few years. It is a good reminder.

I recommend reading the entirety of Coyier’s post as well as mine.

Testing inconsistent Web Share Target API data with a Progressive Web App

One of the latest things I’ve been working on for Unmark is turning the app into a Progressive Web App (PWA). Among other benefits, this affords Unmark the capability of being a “Web Share Target” on Android. (Sadly, only Android for now)

A Web Share Target is very similar to a feature you likely use every day and may not realize it. When you “Share to” or “Share via” an app (say, Twitter or Facebook or Micro.blog’s iOS app) it automatically picks up the URL, title, etc. from the web page you’re currently on – this is using a similar feature set. For PWA’s, this is called the Web Share Target API.

What happens is that the app you share from sends a small little packet of data to the app or PWA. According to the spec it should be sending three specific items: title, url, and notes.

The issue I’ve been working through is that each app has a different way of sending that data. Some of them exclude one or more of the items and each of them have very different ways of sending “Notes”.

I don’t know why these apps aren’t consistent. I suppose it might be in part because they are handling PWAs the same way they are handling other apps. They are just sending a “chunk” of data and they expect the target app to work through it all.

Today I was noodling how best to set up a test application to install on my Android phone so that I can inspect how these apps share their information. This way I can see exactly what information is being shared how Unmark could work with each of them. And I was going to open source it so that others working on this same issue had something they could use.

But it turns out I don’t need to, the Web Incubator Community Group already has a Web Share Target Test PWA already in place to do this. Just install this app on your Android device’s home screen and “Share To” it.

Thanks to Matt Giuca on the Google Chrome team for pointing me in the right direction. I’m glad this already existed.

Xamarin.Forms 3.1

David Ortinau on the Xamarin Blog:

Earlier this year, we surveyed Xamarin.Forms developers about the kinds of custom controls and extra platform code being written repeatedly that should be considered for support “in the box”. From these conversations, we created an initiative to deliver as many as we could in the next several releases. Just six weeks after shipping Xamarin.Forms 3.0 at Build 2018, we are excited to introduce Xamarin.Forms 3.1 with a batch of those enhancements to make your lives easier.

I shipped a Xamarin.Forms app on iOS and Android in 2017. I thoroughly enjoyed exploring and using Xamarin and in some circumstances, for some teams (especially those with deep C# experience) I’d wholeheartedly recommend Xamarin. The Xamarin team continues to keep on top of the latest OS/SDK/API releases as well as making it very easy for developers to ship cross platform applications.

Hopefully by the end of this year I’ll be able to say the same about React/React Native. I’m looking forward to exploring this deeper than I have in the past. I like to use different things so that I know what the best tool for each job is – rather than using the same tool for every project.

Microsoft Office now shares a common codebase

Erik Schwiebert:

Mac Office 2016 version 16 is now live! For the first time in over 20 years, Office is again built out of one codebase for all platforms (Windows, Mac, iOS, Android)!

MSFT is dog fooding big time with this latest release of Mac Office. I’ve been enjoying my work within their frameworks and products that allow cross-platform mobile app development.

Choosing without deciding

Seth Godin:

We can save a lot of time and effort by making our meaningless choices effortless. Pick the first one, or the one in alphabetical order or flip a coin. Merely have a rule and make the choice.

This point made by a recent post by the inimitable Seth Godin strikes the same chord as my SPARK Talk at this month’s NEPA Tech meet up.

I advise several companies and speak to dozens of entrepreneurs. Many of them make the same mistake – they give too much weight to some of their very early decisions and never getting started because they can’t decide.

I see it all the time. In many facets of business. Another way to phrase this situation is paralysis by analysis.

The example I used in my SPARk Talk was that of programmers that become dogmatic in their language or framework choice, or can’t decide at all which to use, or always want to jump to the latest buzz worthy trending language or framework for very early versions of their product. The result is that they never ship anything.

Choosing a language or framework is an important decision. But, not at the cost of starting. Just get started.

While we’re on this subject, let me be clear about how I would advise a company to make this choice. In many cases is doesn’t matter whatsoever what programming language or framework you decide to use for your app. At least not for the first few iterations of the product. In general, the customer will never know or care what you used to write the app. So, in this respect it doesn’t matter. However, if you’re going to maintain the code longterm, use a language or framework that makes you happy to type. If you’re going to hire a large team, use a language or framework that has the largest pool of talent to pull from. But please start!

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.

Firefox Quantum Developer Edition

Julian Descottes, for Mozilla Hacks:

Firefox 57 Developer Edition was just released! It’s such an advance that we’ve given this browser a new name: Firefox Quantum.

I’ve been using Firefox as my default web browser on the Mac, iPad, and iPhone for a little over a week. I’ve also been using Developer Edition for most of my development needs. The Mozilla team is on a tear and this latest version is incredibly good.

John George shares a solution

John George, fellow NEPA.js attendee:

I’m writing this because I discovered the hard way that .NET Core’s ‘dotnet run’ command is NOT meant to be production ready. My biggest headache was that my website shut down when I exited my shell. Not even the ‘disown’command would dissociate the running service from the user.

Posts like this by John often do not get enough attention. While it may not be applicable to you right now – dozens, hundreds, or perhaps thousands of people searching for this issue over the following months and years will be very glad that John took the time to do the write-up.

Kudos to him. More developers should write about their solutions.