I’m very happy about this because previous to trying Docker Compose I spent two days getting frustrated with trying to set up a dev environment with other tools and Docker Compose was a lot easier and simpler. And then I told my sister about my docker-compose experiences and she was like “I KNOW, DOCKER COMPOSE IS GREAT RIGHT?!?!” So I thought I’d write a blog post about it, and here we are.
We use Docker Compose to make it simple for people to spin up their own personal environment for Unmark. It works incredibly well. You install Docker, download Unmark, run Docker Compose and voila — it installs the entire stack you need, creates a web server, database server, and storage area then you just install Unmark (which is really just creating the needed database tables) and you’re off and running.
You don’t even need to know what any of this means to appreciate Docker Compose.
GitHub describes this program’s purpose “The mission of the GitHub Archive Program is to preserve open source software for future generations.”
This happened in February (I didn’t see it at the time). The requisites are:
The snapshot will include every repo with any commits between the announcement at GitHub Universe on November 13th and 02/02/2020, every repo with at least 1 star and any commits from the year before the snapshot (02/03/2019 – 02/02/2020), and every repo with at least 250 stars.
With over 1,300 stars on GitHub, Unmark meets these qualifications quite handily. Not to mention the several releases we’ve done within that window.
The entire reason we open sourced Unmark was because we wanted it to live on beyond the life of our company (which turned out to be the right course to take). Even today, if Unmark were to only exist on the merits of the revenue it generates, it would have died a long time ago. In fact, it likely exists only to make Kyle and I happy because we use it every single day. However, as it stands, there are hundreds (if not thousands?) of people that either use it on our hosted service or on their own domains or locally on their computer.
I’m super happy that GitHub is making these snapshots so that our little app can live on for a long time.
My experiences learning Swift, the language, were rather positive back in 2017 when I built two apps. I re-read that post this morning and some of it still holds true.
With SwiftUI, though, I found myself postponing the project for a bit because I simply could not get SwiftUI-based views to work the way I expected them to work. Particularly around using CoreData with SwiftUI. I believe it was because, as Marco Arment said at the opening of the latest episode of Under The Radar (thanks to Casey Liss for the transcript):
Having to learn SwiftUI is, first of all, the learning resources out there are still terrible, because it’s such a young language/framework/method of even thinking about things. It’s so young, and it changes so frequently — similar to the early days of Swift — that a lot of the tutorials, sample code, or Stack Overflow answers that are out there are no longer even correct. Because something has changed since when they were written last year, and now. Or the answer was posted during a beta, and in a later beta even that same year, the name of a class changed, or the way you’re supposed to do something changed. It’s so early, still.
It is so early that almost every bit of code or tutorials that I found to fix an issue I ran across contradicted any other code or tutorial that I found. It is typical in programming to find some conflicting ways of doing something – but very, very basic things usually gel.
It would be like finding two Hello World code samples where each have totally different ways of printing Hello World to the screen and you try them and neither of them work.
I don’t doubt that if I persevered I could have made much more progress than I had. In the short time that I played with SwiftUI for this project, I definitely saw the merits in it. It seems as though it is going to be very quick to build rather complex views that can be previewed as you work. Very cool stuff.
After digging and digging I found that the version of macOS and Xcode that I currently have installed doesn’t support a few things I was trying to do. Mostly because the versions I need are in beta, I’m not going to update to them for some time.
So the Unmark for Mac app is on the shelf until then. Perhaps when I pick it back up the documentation surrounding SwiftUI will have matured as well.
Today I recorded a quick few minute walkthrough of how Unmark works. I use Unmark every single day (and have for years) to store links to read, watch, listen, etc. It is a simple app but has some great features and so I thought I was overdue on a quick video to show how it works.
So that’s my modest proposal. Extend the list of possible values for the type attribute on the button element to include “share” (or something like that). In supporting browsers, it triggers a very bare-bones handover to the OS (the current URL and the current page title). In non-supporting browsers, it behaves like a button currently behaves.
I’ve contended with the Web Share API for Unmark‘s PWA enough to know that this would be excellent to see happen.
After reading his post I realized he is attracted to Obsidian for the same reasons that I was to give it a try. It stores your notes in a format that keeps the data local, readable, and accessible to any text editor. I really like Simplenote but it only stores notes in Simplenotes cloud service and not as local files (although, it did before Automattic acquired the service many years ago).
As the capabilities of cloud services get more and more robust I find myself drifting back to the early days of my computing where I wanted complete control of all of my data. Even though I can have all of my data accessible from any device, anywhere in the world, doesn’t mean that I want to rely on those services to provide me that data. And, I certainly don’t want the data to be locked into any single app.
Web 2.0 addressed this issue by pushing for accessible APIs that allowed data to be imported or exported in a variety of standard formats. Which is great! However, I find that it is the storage that should be standardized and not the method by which you can move data around. And text notes are just one example. I’ll give another example in a moment.
I need to spend more time digesting Verborgh’s post (which I somehow missed when he published it late last year). However, the principles that are mentioned within it really land with me. One that stands out:
As apps become decoupled from data, they start acting as interchangeable views rather than the single gateway to that data.
This is exactly what I want for so much of my personal data. Any note taking app should be able to read notes written in any app – making the app’s interface simply a view into my note data. Like email. I can choose any email app for any email address. And switch whenever I want.
I’m currently working at building the very same capabilities for my photo library. In the past, I’ve written about why Photos for Mac isn’t a good long term storage solution for our photo libraries. As I write this I’m creating a set of tools and a workflow for my photo storage that allows me to store my photos in a readable format and structure while retaining the ability to use an app like Photos for Mac as a view into that library.
I still have more work to do, and I plan on writing a post sometime in September on what I’ve made so far, but it is a challenge to be sure. My overall goal is to have a photo library that does not require an app, but that an app enhances the experience of browsing my library. And, that all metadata related to a photo (EXIF, tags, faces, etc.) are stored within the file itself and not only within a photo management tool’s database. This will not be easy but I’m determined.
Notes and photos are not the only data that I wish I had in a standardized readable format. My links from Unmark are important to me. Unmark can already import from a variety of services and formats, and it can export into a JSON file. But I’ve recently started working on an export process for Unmark that will spit out a standardized HTML file so that people can export their links to be ingested in any browser or app they desire. This is, of course, the Web 2.0 approach.
I’m glad I read Zijlstra’s post. It has reinvigorated me to continue my effort to decentralize as much of my personal data as possible.
At the end of the year I like to sit down and make a rather random list of the “best” things I’ve seen that year. I do this almost entirely from memory but I also peruse my browser history and look through my Unmark archive in order to uncover some of the things I appreciated throughout the year.
Since I’ve really been going all-in on my photography this year I’ve stumbled across a lot of photographers. In fact, I’m well over 100 photographers on my private Photography Twitter list (I’m @cdevroe there). I’m very glad to have found AOWS. See also the Instagram account.
Last year I said that we’d likely return to Kentucky and we did – that must say something about it. We enjoy the entire state, the distilleries, horse farms, and rolling hills. See posts.
Runner up: Cape Cod – This was our first trip to Cape Cod and I enjoyed the whole feeling there. Likely because so many people are either retired or on vacation. I’d like to go back and make more photographs in the future.
Best book: Dark Matter by Blake Crouch.
I didn’t read nearly as many books as I’d like this year. But I’m trying not to beat myself up when I miss self assigned goals like number of books to read. I did a lot of fishing, photography, and even started a podcast this year. So I need not read books.
Dark Matter was a nice change of pace from other things I’d read this year. I always like a book that has time jumping. And this book sort of did.
Best service: OneDrive
I can’t believe I’m writing this, but OneDrive – for the most part – holds up very well for my needs. I have nearly half of a terabyte stored there and it isn’t skipping a beat. I use it mostly as a cloud-based backup of all my photos and videos. I also use it to transfer things to/from my computer and phone which worked well when I was on so many different platforms; Android, Windows 10, iOS, and Airdrop wasn’t possible.
Runner up: Disney+ just for The Mandalorian.
Best song for working: Morning of – Colin Stetson
According to Spotify I listened to this song, and the album it comes from, a lot while I was writing code.
Best album: Benton County Relic – Cedric Burnside
Love the old style jazzy/bluesy feel of this album.
I shot nearly as many photos on this camera as I did on my phones (Pixel 2 XL until October and then iPhone 11 Pro Max) and the camera is 13 years old. It is rugged, has a lot more features than I ever knew it did, and I’m satisfied with the results I’ve been getting.
I have the feeling that next year a film camera may win this category and I’m very excited about that.
Runners up: iPhone 11 Pro Max – the battery life alone deserves an award, iPad Pro – I still use this every single day, in fact I’m writing this post on it right now and I’d say I do greater than 75% of my photo editing on the iPad.
Rather than keeping Firefox in just the browser category, I’m going to give it the best desktop app award. I really, really like Firefox and it has improved greatly this year in terms of speed, privacy, feature set. I simply cannot live without Containers at this point.
If it weren’t for how relatively easy it is to create a podcast using Anchor I don’t think I would have done it. Though I am looking forward to my podcast getting a bit better with some desktop-based editing apps. If you have an idea for a podcast I suggest at least giving it a look.
Runners up: ATP. I go back and forth on whether or not I should listen to ATP. Very good information, they were even nice enough to answer one of my questions, but the constant hypercritical (see what I did there?) take on things can sometimes be draining, and so I take long breaks from listening. But that is the entire point of the podcast so I don’t begrudge them of the style. I just always try to look at things positively is all. Also Cal’s Week in Review.
Special second place: Joe Rogan Experience – I have to cherry pick episodes that I’m interested in, mostly with scientists and outdoorsy people, but the interviews and long form style are refreshing compared to the bit-sized bits we get through TV these days.
I watch a lot of YouTube. Probably too much. Not probably. Actually too much. It is how I learn, am entertained, waste time, etc. In fact, I watch a lot less TV because of YouTube. So this isn’t an easy category to choose.
Luke shares a ton of photos via Stories from his town of Atlanta. It is inspiring the number of photos he’s able to take, process, and publish and has really gained a following in that area. He’s also super gracious in his responses whenever I’ve asked him how he did something.
Special second place: captain.solo – I can always appreciate when someone creates their own style and sticks to it – it isn’t easy to do either of those things. This account has.
You can also follow @cdevroe on Instagram where I frequently share accounts and photos I like via Stories.
I hope you enjoyed this year’s list. Whenever I sit down to make the list I always under estimate the amount of time it takes to create it. But I’m always glad that I do so that I can look back on it in the future. So this post is more for me than for you.
I am looking forward to this year’s WWDC more than I have in the last 4 or 5 years. There is so much riding on this conference for my personal productivity but also for the Mac and iPad platforms as a whole.
Here are a few reasons why and I’ll follow with a few questions that I have.
Will UIKit apps from iOS work on macOS well enough to satiate us long-time Mac users? Meaning, will they be good Mac citizens unlike the current Mojave offerings that stink?
Will the iPad’s version of iOS get enough productivity updates to make a meaningful impact on how I personally use my iPad currently? (I’m not convinced the leak re: the new undo gesture will make any difference whatsoever to that particular interaction. To me a three-finger swipe is just as discoverable as the absurd shaking you have to do now. No offense to Etch A Sketch.)
Will mobile Safari support Web Share Target API by the end of the year? Related. (I need this for Unmark big time)
Will iOS finally get an app drawer (or something like one)? Having the apps on pages and pages of home screens or nestled into folders has been showing its age for a few years already.
Could the biggest announcements at WWDC still be unleaked? Could Rambo’s scoops, whatever their source, be simply laying the groundwork for a much larger announcement? Personally I would mind seeing something re: automation, AR or VR.
I do believe there’s a money problem in open source. If you listen to our shows you know I believe that. It’s just that in open source that problem doesn’t manifest until much later in the process.
It waits until the software has matured, the value has been proven, the community has been built. Then, it sucks the joy out of the developer(s) who gave a gift to the world and turns it in to the worst kind of job. An unpaid job!
The entire post is a worthy read.
We originally open sourced Unmark for one main reason: that it would live on longer than our business did. And that is exactly what happened.
Our business no longer exists but Unmark did for hundreds (if not thousands?) of people running it themselves. And now it is back (invite only as of this writing, but won’t be soon enough) because we brought it back. But someone else could have. And that is the beauty of it.
We will continue to release Unmark as open source for the same reason: that anyone can run it without paying for it for as long as they want regardless if we are around or not.
In fact, unless there were some reason not to, any product I’d build going forward would be done open source. The benefits simply outweigh the drawbacks.
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.
I use Unmark daily. Partly because I helped will it into existence. If I didn’t use Unmark I’d use Pinboard (for which I have an account that I’ve paid for). And I’m very happy that Delicious (or, as I knew it del.icio.us) is in his hands.
Fred Wilson, in A Founder’s Notebook, describing how “hard” it is to subscribe to a blog that isn’t on Tumblr but is on the open internet.
My only complaint is that its not on Tumblr, where it would be an instant and easy follow. It takes more work to follow a blog when its on the open Internet (when you don’t use RSS. i don’t).
Sigh. He’s right, of course, but … sigh.
In the heyday of Google Reader it was the exact same amount of work to subscribe to a blog’s RSS feed as it is to follow a Tumblog on Tumblr. Just one click. But now, with the RSS market so fragmented and waning it has, indeed, become more work to subscribe to blogs on the open Internet than it is to follow on Tumblr or Twitter.
There are initiatives in motion to help with this, but, like so many other great things on the web (see: microformats), they may simply never catch on at scale.
For those interested in how I subscribe to blogs both on the open Internet and elsewhere; I’m currently using Vienna on Mac as my feed reader. I do not read feeds on my iPad (though I used to) or my iPhone. I only read on Mac and filter things into Unmark to read/watch/buy/listen later. For me to subscribe to a blog is pretty painless; copy the URL of the blog, open Vienna, click Subscribe. (I don’t even need to paste.) So it is three steps rather than the one step that Fred needs to take on Tumblr.
I’ll take that hit for blogs I love to be on the open internet any day.