In the introductory video for Getting Git I talk about using Git from the command line instead of through a GUI. I label GUIs as evil wizards and slay them with a custom die command. But why?
I don’t agree with the sentiment that GUIs are bad and that you should use command line tools. Command lines have their own problems too.
Use the tool in the way that suits your workflow and the way you work. Nobody would suggest designers run a command line version of Photoshop, after all.
This is not a drill. A ginger haired emoji is finally a step closer. According to Unicode, redheads will be able to describe themselves in emoji form from June 2018 after the organisation’s emoji subcommittee recommended 67 new characters.
Great to increased diversity represented in emoji 🤔
August 11, 2017
Why we’re switching Ulysses to Subscription Today, we are switching Ulysses to a subscription model. The short story is this (tl;dr): Our users expect a continuously evolving high quality product — and subscription is the only way we can truly deliver on that expectation.
This is a really interesting, and detailed, breakdown of the pros and cons of various strategies and business models for app development. It neatly explains why Ulysses is going to a subscription model.
Tech startups live by the rule that speed is paramount. Houseparty, creator of a hot video app, has an extra reason for urgency. Facebook Inc., FB -2.21% a dominant force in Silicon Valley, is stalking the company, part of the social networkâ€™s aggressive mimicking of smaller rivals.
Facebook uses an internal database to track rivals, including young startups performing unusually well, people familiar with the system say. The database stems from Facebook’s 2013 acquisition of a Tel Aviv-based startup, Onavo, which had built an app that secures users’ privacy by routing their traffic through private servers. The app gives Facebook an unusually detailed look at what users collectively do on their phones, these people say.
Shocking, but not surprising
August 10, 2017
iPad can’t replace my computer, but I don’t care
There’s an assertion doing the rounds lately that the iPad can’t replace your laptop. Well, for me that’s certainly true : I need a Mac to do my job.
As an iOS app developer, when I sit down to work it’s invariably and necessarily in front of a Mac. MacBooks seem to be the favoured weapon of choice for developers of all persuasions these days, but I personally work better at a desktop machine - so an iMac is my preferred tool. App developers need a Mac because Xcode - the tool for building Mac and iOS apps - only runs on Macs. Other powerful tools compliment this, the Unix command line, GUI clients for source control, and design and graphics apps - making the Mac a productivity powerhouse.
But any time I’m not ‘working’ at app development, I pick up my iPad. In fact, I’m writing this on the train using my iPad. I haven’t bothered to connect to the slow on-board WiFi because the iPad has it’s own 4G connection. I’m typing as fast as I can on my laptop because I’m using the Smart Cover keyboard.
I work away from home during the week, and usually pack my iPad and my personal single port MacBook (I have a work-owned machine that I use during the day). But I rarely, if ever, crack open the Macbook. The only times I turn it on are when I need to do some coding on my own personal apps, and the odd occasion that some task really require the additional flexibility that Mac OS offers. But those times are rare.
Not only is the iPad a capable productivity and entertainment device, there are things it does that the Mac can’t hope to compete with. Start listening to music on your AirPods, and chuck the iPad in your bag and head out. Guess what - the music keeps on playing. Try that on a Mac. Want to sketch out some ideas? Pull out the Pencil and fire up Linea (or on iOS11, just tap the pencil to the screen and start drawing).
My default machine is the iPad. It’s the thing I reach for when I want to write and email or a blog post, browse a web site or read the news, watch a movie or listen to music. I only defer back to the Mac if I hit some roadblock where I know I could do the task more easily on a Mac.
Don’t get me wrong - I love the MacBook too. It’s tiny and lightweight, and has a great keyboard and screen. But I think it might be the last MacBook I own. In future I think I’ll stick with an iPad for portability, and a desktop Mac for work.
So for me, I couldn’t completely replace my Mac with an iPad. But - like any developer - I’m an outlier. For the majority of people and iPad can, and does, excel as their only computing device.
June 30, 2017
Apple’s Worldwide Developers Conference is set to kick off on June 5, and along with a new version of iOS, Apple is expected to introduce the next-generation version of macOS, macOS 10.13. We’ve heard no rumors on what to expect in macOS 10.13, so whatever Apple introduces will come as a total surprise.
Another good list of well thought out feature requests, this time for macOS 10.13
May 27, 2017
Sector - adventures in procedural mapping
Back in 1988 I was studying for my computer science A-level. At the time, this meant writing relatively simple apps in BBC Basic on the BBC model B computer. Things weren’t going so well, because we were quite distracted in class by a game someone had copied - Elite.
Elite screenshot - Wikipedia
In Elite you played a space ship captain, flying between space stations in different star systems, trading to make a profit and fighting off pirates - all rendered in groundbreaking 3D line graphics. But what was really amazing to me wasn’t the graphics or the gameplay, it was the sheer amount of game that had been some how squeezed onto an 880KB floppy disk.
There were eight galaxies of 256 different worlds you could fly between. Each had descriptions and names, and active trading markets. You couldn’t fit that much content onto a disk that small. How did it do it? Was it using some kind of compression? No.
The secret to this magic of course was procedural generation. Instead of storing the details for every world, the game stored rules about how these details could be generated on the fly. When the game run, the galaxy was created in memory there and then. When you visited a star system, the worlds and stations, names and commodities were generated on the fly as you hyperspaced in. And although based on random generation, computers will, given the same started ‘seed’, generate exactly the same details every time.
The idea that entire, complex structures could be generated from a simple set of rules fascinated me. It turns out it wasn’t exactly a new idea. Another space game was already using this technique to generate entire galaxies of stars and worlds. This game, however, used dice and paper : Traveller.
Inside this collection of ‘little black books’ you could, with the help of nothing more than a sheet of paper a pencil and a couple of regular 6-sided dice, roll up vast ‘sectors’ of space and populate them with worlds and cultures of your own creation. The only drawback was the time it took - but I remember spending hours rolling up subsectors of worlds just for the fun of it.
The results were plotted onto a hexagonal grid map that ended up looking something like this:
traditional Traveller map
Several years ago I started playing around with a web app to generate sector maps automatically, using the rules encoded in the various editions of Traveller. The script I build in Ruby used ImageMagick to draw the maps, and running on a G5 Mac Pro took several minutes per subsector (a maximum of 80 worlds). Nevertheless, the images it produced were pretty attractive:
Ruby generator output
I embellished the standard maps with colour - using the colour of the world to indicate the surface type, and the border of it to indicate it’s atmosphere. I also added icons for various bases and travel codes (additional details you generate for a world, a kind of short hand saying if the place his rich or a desert or a garden world, etc).
Although the project languished after that, I still retained a fascination with procedural generation and mapping. Years later I decided to revisit this idea, and see what I could do with current technology.
Sector on the iPad
Sector is my Ruby Traveller mapping app brought up to date and build for iOS. It’s been completely re-written in Swift 3, and running on the latest devices it will generate an entire sector (that’s 16 subsectors of 80 hexes) in an instant.
In the years since I wrote the original Ruby code, Traveller has been published in an open source ‘System Reference Document’ - and this is the basis of the rules that Sector uses.
In addition to the basic mapping and colour coding, Sector also draws in ‘trade routes’ - lines of communication or commerce between the worlds. This gives more context to the map, and you can get some idea of the relationships between the worlds. It also generates names for everything - the worlds themselves, and also the clusters and voids that exist on the map are named. Names are created based on a dictionary of real English worlds as well as place names from around the world, so the generated worlds have names that at least sound familiar and pronounceable.
There are still things I’d like to add - printing out the map or sharing it as an image are top of the list. But, as it stands I’m very pleased with the result, and it was a fun project to work on - even if I never want to see a hexagon again!
You can download it on the App Store
May 23, 2017