Detecting favicons in Yoink v3.3

One of Yoink v3.3‘s new features is the detection of favicons for webloc files dragged into the app, making it easier to quickly identify individual weblocs at a glance. (A webloc file is something Finder creates when you drag a URL/link to it).
Think of it as QuickLook icon previews, just for websites:

Yoink with webloc files without favicons

weblocs without favicons

Yoink with webloc files with favicons

weblocs with favicons

The advantage is obvious right away, that’s why I jumped on it the second the feature was suggested to me.

Optional Setting

Even though I really like favicon detection and have it enabled on my Mac, I decided right at the start that favicon detection would be opt-in (disabled by default), for a couple of reasons:

  1. It requires an internet connection
  2. It uses data (very little, but still)
  3. I thought I’d use a Google Service for this (which I discarded after the prototype) and wasn’t comfortable having users use it without their “consent”

1) Internet Connection

Yoink is not an app that should require an internet connection at all.
It’s a “local” Mac app, it helps you with drag and drop, why need an internet connection?

As a side note, the connection itself actually doesn’t happen in the main Yoink app, it’s an XPC service that has the sandbox privilege, so the main app isn’t affected.

2) Data Volume

A Mac usually connects to the internet over WiFi or an Ethernet connection, and the data transferred for favicons *is* very small.
But there’s still a chance you’re using weblocs like crazy on a Mac connected to the internet via your iPhone’s Personal Hotspot on a data plan, which also makes it obvious why the user needs to be able to turn this option on and off.

It just made me more comfortable to have users opt-in to this option, instead of opt-out.

3a) Google?

Google has a nice favicon detection service, which is just a URL you pass another URL into to receive the image data:

http://www.google.com/s2/favicons?domain_url=PERCENT-ESCAPED-URL

There’ no need to parse the HTML yourself for the URL to the favicon, Google does it all for you.

3b) So Why Not Google?

What if the service goes away?
With Google having a bad rep for some users, would they use this feature?
What about privacy? (I don’t know, but they might collect your IP and then know what URL a favicon was loaded for, etc.)

So even though it worked very nicely, I decided to implement it myself.

Getting the Favicon

With Google out of the picture, I had to roll my own detection and parsing.
What I do is actually very, very simple.

I load the webloc’s URL’s HTML content, and then look through the header part.
In particular, I look for one of the following lines:

rel=“apple-touch-icon”
rel=“shortcut icon”
rel=“icon”
rel=“apple-touch-icon-precomposed”

in that order. (I’m sure there are more I could go through, but those were the ones that I came across while testing.)
Should none of those exist, I just try something like:

•) http:// … /favicon.ico
•)  …/favicon.png
•) rinse and repeat for every image format you can think of

If I have no luck there, either, I bail and return macOS’ default webloc icon.

If I am lucky and I find a “rel” I’m interested in, I figure out what the href contains (an absolute link to the image, a relative path to the image, or just the name of the image file itself). Once I know that, I can load the image file and composite it into the final icon.

The final icon is cached so Yoink won’t have to connect to the internet and re-download favicons for weblocs that point to the same base URL.

Drawing the “personalized” webloc icon

I went through three iterations, each at its own, unique laziness level.

Iteration 1, laziness level 3 (extremely lazy)

Just show the favicon:

Iteration 1 of Favicons in Yoink

No wonder I didn’t use it. It’s so lazy.
Second, it doesn’t even remotely resemble a webloc file anymore. It actually looks more like an image file’s QuickLook preview icon, and that’s a bad thing, as it could very possibly confuse users.

So I went on to

Iteration 2, laziness level 2 (pretty lazy)

Show the favicon super-imposed on the webloc icon:

Yoink Favicon Icon Iteration 2

That’s better. But not good, either. Favicons can be transparent, like the one here, but they can also be opaque, blocking the WEBLOC text in the icon and making the overall icon look more blocky and less nice.

Onwards and upwards!

Iteration 3, laziness level 1 (not that lazy)

Crop out the “Safari” part of the webloc icon and paint the favicon below it:

Yoink Favicon Icon Iteration 3

If the favicon is transparent, I draw it on top of a white background (so it would fit with the rest of the original webloc icon), if it’s not transparent, the favicon’s background is used, solving everybody’s problems. And you can still see that it’s a webloc file, at first glance!

Eternal Storms Software Logo

– – – Do you enjoy my blog and/or my software? – – –
Stay up-to-date on all things Eternal Storms Software and join my low-frequency newsletter (one mail a month at most).
Thank you :)

Yoink 3.3 adds “File Recall”, Better Sharing Tools and More

Yoink Mac App Icon

I’m happy to tell you that today, Yoink 3.3 is available for download from the Mac App Store. It’s a free upgrade for everyone who’s purchased it before. You can download a 15-day trial for the app here.

What Is Yoink?

Yoink simplifies and improves drag and drop on your Mac.

Simplify.

It simplifies drag and drop by providing a temporary place for files you drag, so you can navigate more easily to the destination of the files.
It’s especially useful when trying to move or copy files between different windows, Spaces or (fullscreen) applications.

Moving a file with Yoink

When you start moving a file in Finder, or app-content like an image from a website, Yoink appears at the edge of your screen, offering a temporary place for you to drag the files to. Without having to keep the mouse button pressed, you can now get to the destination of your file quicker and easier.

Improve.

Drag and drop is improved in several ways, including:

  • Collect multiple files from different locations you’d like to move to one destination without having to go back and forth
  • Split up a multiple-files-drag so you can move files to different places without having to go back and forth
  • Copy files to multiple locations more efficiently

Customize.

You can customize Yoink’s behavior so it fits in perfectly with your workflow. Aside from having to option to show it at either edge of your screen (at the top, center or bottom), you can set it up to only appear when you drag files to the edge of your screen or to appear directly at your mouse cursor when you start dragging, making drag and drop even faster.

Yoink appearing at the mouse cursor

For applications where you don’t need Yoink, add them to a “blacklist”, so Yoink doesn’t interfere with your work. A keyboard shortcut (by default, F5) lets you manually show or hide it, should you need it anyways.

What’s New in Yoink 3.3?

Version 3.3 lets you bring back files to the app that you’ve previously removed, in case you find you need to move or copy the file(s) somewhere else.
Just keep its keyboard shortcut pressed (by default, F5)

Press and Hold Shortcut Key in Yoink

or right-click onto Yoink to bring back previously removed files:

Right-click onto Yoink

Webloc files can now optionally show favicons for quicker identification:

Yoink loading favicons for webloc files

Further Improvements

  • Yoink now includes macOS’ “Share” menu to more easily share files to different services
  • More easily add links from your browser to Yoink by right-clicking onto it in your browser and selecting Share -> Yoink
  • A new Alfred File Action to make sending files from Alfred to Yoink possible (activate it in Yoink’s “Advanced” preferences)
  • Many improvements, refinements and bug fixes

Pricing and Availability

Yoink 3.3 is available for purchase on the Mac App Store for the price of $6.99 / £6.99 / €7,99. It is a free update for existing customers of the app.
You can download a free, 15-day demo version here, even if you’ve tried Yoink before. Yoink runs on Macs with OS X Lion 10.7.3 or newer. OS X Yosemite or newer is recommended.

If you’re interested in writing about Yoink, you can download the press kit here, which contains screenshots, links to a short video and further information.
Promo codes are available to members of the press at press (at) eternalstorms (dot) at.

Yoink Usage Tips

To get the most out of Yoink, I’m collecting useful tips and tricks for you on this website.

I’m looking forward to hearing from you and to see what you think about Yoink v3.3. If you like the app, please consider leaving a little review on the Mac App Store, it would help me out a lot!
Should you have trouble with it or have any feedback or questions, please be sure to get in touch, I’d love to hear from you! Thank you.

Eternal Storms Software Logo

– – – Do you enjoy my blog and/or my software? – – –
Stay up-to-date on all things Eternal Storms Software and join my low-frequency newsletter (one mail a month at most). Thank you :)

What I… (February, March 2017)

“What I…” is a monthly column where I write about what’s been going on in my life as an independent Mac and iOS developer over the last month.

… Did

Contract Work

Probably the main reason why I do these blog posts less often lately is because I’m busy with contract work I can’t talk about. I’m involved with two very interesting and challenging iOS projects right now. One is in the realm of audio, the other has to do with video.

It’s interesting work, and both are challenging in different ways. Regarding the audio project, there was an existing code base which I had nothing to do with, so getting into that code, understanding and ultimately working with it was very challenging (it wasn’t documented at all, some things were implemented multiple times, in different places, there were bugs). But with anything you do, if you stick with it, you’ll figure it out. I’m still having trouble here and there (the app itself is quite complex in the first place) but as The Beatles say, “It’s getting better all the time”. We’re now at a point where we’re mostly done with bug-fixing and are now fine-tuning the app for a slightly broader roll-out.

The video app, on the other hand, I have total control over. We did a fairly quick prototype last year, sort of a proof-of-concept, and are now in the process of producing version 1.0. Naturally, I feel far more comfortable working on a code-base I started and thus am completely familiar with. I’m making a point of properly documenting what I’m doing in the app, so that if someone else were to work on it, they wouldn’t have too hard a time to do so.

Of course, there are things I worry about: source-control commits, for example. For my own projects, I can basically do whatever I want – write descriptive commit messages (which is what I usually do) or very short ones, when I’m pressed for time or just “not in the mood”. For someone else’s project, that’s clearly not an option. And that’s where the worrying comes to play – is the commit message descriptive enough, did I take everything into account, did I mention all issue-tracking-ticket-numbers, and so on. Then again, perhaps the bar is not that high – I saw one project, where the commit message was just “commit”. Welp.

Another example: Unit Tests. I have no idea what to do with them or about them. I’ve never written a single unit test for my own apps (I don’t say that proudly). Guess I should start at some point.

The pre-dominant thing I worry about working on other people’s projects is: less time for my own. I’ve been working on Transloader 3 in February, but March gave me little time to do so, and the trend seems to be continuing into April. Yoink could do with an update as well, not to mention ScreenFloat. It’s very stressful, really.

Found a Copy-Cat of Yoink. Ugh.

By members of the press and multiple customers of Yoink, I was made aware of a possible copy-cat of the app. I’m not going to name or link to it here. From what I could see, they copied the look-and-feel of the app, down to the marketing material. It’s a shame they didn’t use the time copying my app to create something unique of their own… I contacted Apple about it (if this should happen to you, you can contact them here) and started a dialog with the developer through that channel. Of course, they denied everything and started bringing up lawyers, and that’s where we stand now. I doubt I’ll proceed, it’s not worth the money, the nerves and seeing as customers recognize it as a rip-off of Yoink anyway, I can leave it at that and be somewhat happy about it. Still, personally, I think Apple should recognize the rip-off nature of the app and remove it from the Mac App Store, but that’s their decision, not mine.

Some comments from customers:

  • via mail: “it looks like they just duplicated your efforts under their name”
  • via mail: “Please check the Apple Store for a tool named “…” it is a rip off of Yoink.”
  • on a software-review site: “Appears to be a blatant rip-off of Yoink!!!”
  • via twitter: “that’s not the only app they have ripped off either”
  • on that note about another app of ‘theirs’ on a software-review site: “Okay this looks total rip off of Disk Diet.”
  • another: “I’ve read some comments in the App Store calling (…) a rip-off of Coconut Battery, and I can definitely see where the comparisons are coming from, the two are extremely similar”

It’s not just me. Phew.

… Didn’t Do That I Had Planned

Work on Transloader

I had quietly hoped to be able to finish Transloader 3 by the end of March and release it some time in April. That doesn’t look likely now. With all that contract work keeping me busy, I had to postpone my plans and am now working on-and-off on the app, whenever there’s a little time left over. But this situation is not going to last forever, perhaps another week or two, then it’s the backend-guy’s turn again, leaving me to my own apps for a while :)

… Downloaded

Underpass Mac App IconUnderpass (mac app storewebsite)

By developer Jeff Johnson (here on twitter), this is an end-to-end encrypted chat app, with encryption implemented from the ground up – it doesn’t use a third-party service, like other apps. “It’s just you, your chat partner, and a password. Peer-to-peer. There’s no signup. No account. No phone number, email, contacts, or any personal information requested, not even your real name.”

Thimbleweed Park App IconThimbleweed Park (mac app storesteam, gogwebsite)

Released today (March 30th, 2017), I can’t wait to play this game. I backed it on Kickstarter as soon as I heard about it and I’m happy they were so successful with that campaign. Their development blogis worth reading!

… Read

70 Cents Put Me on the Mac App Store Charts (lapcatsoftware)

“The charts do not accurately reflect how (un)healthy the store is and how widely (un)profitable it is to third-party developers.”

I Worked for Steve Jobs, and This Was the Best Lesson He Taught Me (huffingtonpost)

“Telling the truth is a test of your character and intelligence. You need strength to tell the truth, and intelligence to recognize what is true.”

First Dinosaur Tail Found Preserved in Amber (nationalgeographic)

“ “Maybe we can find a complete dinosaur,” he speculates, rather confidently. “

… Listened To

Erich von Däniken Lecture (website)

My girlfriend and I had the pleasure to attend a lecture given by author Erich von Däniken in Vienna. His theories are interesting and thought-provoking. Some of it is fantastic, of course, but he’s very good at making you see things from a different point of view.

… Watched

Beauty and the Beast 2017 Movie PosterBeauty and the Beast (itunes)

Not as good as the original. I don’t see why it had to be done with real-life actors in the first place, but ok. Instead of creating something new, it seems Disney’s more fond of re-visiting old material and re-doing it, like The Jungle Book. It wasn’t that bad, though. It had its moments.

… Ate

Saffron RiceVegetable-Pistachios-Rice with a Saffron Crust

… Went to See

Venice, San BarnabaAh, Venice.

Venice, drying clothes

Venice, San Marco in the distanceAt the end of February, my girlfriend and I went for a one-day-trip to Venice (by bus, we started Friday night from Vienna, were in Venice on Saturday, 7AM, and returned to Vienna 8PM that same day). We had great weather and great fun, but were quite groggy afterwards – after a walking distance of over 18 km and very little sleep. We had a constantly quarrelling older couple sitting right behind us, and they would. not. shut. up. But that’s beside the fact. Venice is great. And they filmed Indiana Jones there!

Eternal Storms Software Logo

– – – Do you enjoy my blog and/or my software? – – – Stay up-to-date on all things Eternal Storms Software and join my low-frequency newsletter (one mail a month at most). Thank you :)