Archive for June 4, 2015

Thursday, June 4, 2015

Micro Snitch 1.0

Objective Development (App Store):

We just released our brand-new OS X app called Micro Snitch. It’s an unobtrusive little app that sits in your menu bar and notifies you whenever any app uses your Mac’s microphone or camera.

(Get it? It snitches on apps that use your microphone!)

In addition to showing this information in the menu bar, Micro Snitch also has a nice overlay that automatically appears in the center of the screen to get your attention whenever the microphone or camera starts being used. It then moves off to a corner to get out of your way.

It’s from the developers of the excellent Little Snitch, but unlike Little Snitch it’s just a regular app, no kernel extension required.

What Happened to SourceForge?

Ludovic Fauvet:

The situation worsened again, we received literally dozens of emails each week from angry users complaining about some bundled software and toolbars that were added to the installer. Sourceforge did not (yet) modify our installer in any way, instead our users were clicking on some of these misleading ads. I remember counting more than seven “download” button on our SF.net page!

We couldn’t continue to operate this way so in April 2013 I started working on a new way to distribute VLC. We rented few servers, contacted some mirrors and everything was ready a couple of weeks later. We were finally able to pull the plug from the Sourceforge website.

[…]

Fast forward, end of May 2015 we heard about the Gimp binaries being bundled with the SourceForge installer and their admin access taken over by some sf-editor1. We were quite surprised to discover that the same happened to VLC, the project has been taken over without notice, removing all access to it but luckily the binaries weren’t touched. Maybe because we’re now signing all of them for the Windows platform. And we’re now trying to get our access restored to avoid any further damage.

Update (2024-04-01): Greg Foster (via Hacker News):

It’s easy to take GitHub ubiquity for granted - but how did things get this way?

MirrorType

Nate Cook:

Reflection in Swift is a limited affair, providing read-only access to a subset of type metadata. While far from the rich array of run-time hackery familiar to seasoned Objective-C developers, Swift’s tools enable the immediate feedback and sense of exploration offered by Xcode Playgrounds.

[…]

The entry point for reflection is the reflect function, which can take an instance of any type as its single parameter and returns a MirrorType. Now, MirrorType is something of an oddity for the Swift standard library: a protocol used as a type. Other than the ubiquitous AnyObject, to date no other protocol is used this way. The particular MirrorType-conforming instance that you receive depends on the type passed to reflect—Swift’s internals define mirrors for types such as Array, Dictionary, Optional, and Range, along with more generic mirrors for structs, classes, tuples, and metatypes.

MirrorType provides the nascent reflection API that Swift offers, wrapping a value along with its type information, information about its children, and different representations of the instance.

[…]

Lastly, we must link WWDCSession to its custom mirror by adding conformance to the Reflectable protocol. Conformance only requires a single new method, getMirror(), which returns a MirrorType—in this case, our shiny new WWDCSessionMirror:

Update (2015-12-20): Benedikt Terhechte:

So, as you can see, using reflection slows the whole process of creating NSManagedObjects down by about 3.5x. This is fine when you’re using this for a limited amount of items, or when you don’t have to care about speed. However, when you need to reflect over a huge amount of structs, this will probably kill your app’s performance.

Why I Don’t Write Swift

Soroush Khanlou:

Trying to use Swift in any professional capacity is a joke. A very cruel joke. The “tooling” is terrible: compilation speed has been abysmal, and SourceKit spent the better part of the year as a punchline.

[…]

There’s so much new stuff to learn about. But it’s not the good kind of learning, where you expand your mind and discover new ways of thinking and working. It’s rote memorization of the six new inscrutable ways to make readonly properties. Learning that stuff won’t make you a better programmer or thinker, it’ll make you better at working around Swift.

[…]

Don’t get me wrong: that doesn’t mean I don’t think I can write great Swift ever, or that it’s not worth learning. It’s just not worth shipping code in right now. I love reading the blog posts, with people exploring and researching and trying to understand all the new things we can make.