Let's Build – A shared economy app – Wireframing

In this series of posts, I’m going to learn how to plan and build a shared economy web app. This is an opportunity to learn and document the process of wireframing, designing, and developing an application from nothing, which (crucially) is usable by real people. I’ll be drawing from Michael Hartl’s Ruby on Rails Tutorial to learn how to build the application. The idea that I’m going to be building out is simple. AirBnb lets you monetize your extra room, Uber lets you monetize your time and car, but what about that pool you have? Or your trampoline? Or your basketball net? So that’s it, a shared economy app for use of your extra amenities.

This post is dedicated to wireframing. In programming and in life, I’ve always found that coming up with a plan before doing something greatly increases the chances of success. When the luxury of a plan can be afforded, it’s advisable to indulge. In the case of building a web app with Rails, the plan should come in the form of a wireframe. A wireframe is a technical document which contains no color, font, or even layout decisions, but rather the structure of information and the architecture of how a user navigates an app.

In order to accomplish this, I purchased the Omni Group’s well-known and quite renowned OmniGraffle software. There were cheaper options out there, with the standard variant of OmniGraffle costing $99.99. Many people I trust use it and I enjoy high-quality Mac apps, so I took the plunge. You can likely accomplish this task with many other tools out there, free or otherwise, just search Google for “wire framing software” and do your research. Honestly, I find many things frustrating about OmniGraffle, but it’s treating me pretty well (I’ll perhaps write a review).

The next tool I’ll need to start wire framing is a good stencil (template) for OmniGraffle. To make my life easier in development, I’m going to use the Bootstrap front-end UI framework, so I found a stencil which has Bootstrap’s elements and grid. With these tools, you can drag-and-drop UI elements into you canvas to mock how your application will work. First, I created what my application will look like to the general public, for those customers who are seeking a pool (as opposed to listing one).

user-facing

Here, I tried to come up with the absolute minimum number of pages for users to have the core experience of this app – going online, inputing what they want to do, finding results of people who are offering to share their stuff, and checking out on it. I also tried to structure the information in a way that would make designing the application easy, in the sense that I avoided forms and used pictures liberally. Also, note that I’ve made a number of simplifications for the sake of this demonstration, for instance real users would want to refine by their location, I feel it’s just more than I’d like to get into for this learning experience.

After I finished these wireframes I realized I was missing something crucial. Users could easily find something they want to do, but it was impossible for them to post something they wanted to do. In wireframing this, I kept in mind that this user will tolerate something that doesn’t look too pretty, as long as it was efficient at getting their item up on the service. Furthermore, they are going to want a way to tracking how much money they’ve made. This differs from the customer-facing wireframe because it will not make liberal use of pictures and might be quite form-heavy, considering it’s data input. Here’s what I came up with:

admin-facing

With a quick idea, a good wire framing app, and a couple sessions at a coffee shop, I have a plan to take to the terminal. In the next post, I’ll either design the application by giving it some nice fonts and colors, or I’ll just jump into development (depending on my mood and level of impatience).

Apple's stance on encryption and tracking

Rich Mogull writing for TidBITS,

We are in the midst of fundamentally redefining the relationship between governments and citizens in the face of technological upheavals in human communications. Other [non-Apple] technology leaders are relatively quiet on the issue because they lack the ground to stand on. Not due to personal preferences or business compromises, but because of their business models, and lack of demand from us, their customers.

Apple surely has their customers in mind with their defense of encryption and privacy, but it is also convenient that many of their competitors’ businesses rely on tracking. This has to be one of the reasons iAd was so unceremoniously swept under the rug, why Apple allowed content-blockers on iOS, and why they are such stalwarts about privacy: it’s good for users and it’s good for business.

How does NBC know Netflix's viewership?

John Gruber has been investigating how NBC president Alan Wurtzel had an idea of how many people watched Netflix shows, it turns out he’s using figures drawn from Palo Alto-based Symphony Advanced Media’s “Media Insider” app. It works like so:

It turns on the microphone to listen to what you’re doing “intermittently throughout the day”, requires permission to see and track all of the apps you use on the device, and they want you to turn on their “M-Connect” “feature”, which is a VPN that intercepts all of your network traffic.

Oh wow. They get people to sign up for this by marketing and offering gift cards.

The ugly overlap of government and technology

Information in the digital age is free. Sharing the words or code or images you make on the Internet cannot really be controlled. In the past, governments and other organizations have limited the spread of information by physically blocking, destroying, or otherwise hampering its spread. But with the Internet this is not so easy.

For instance, England wants to ban end-to-end encryption. China has built a digital version of the Great Wall, censoring anything that they deem counter to their efforts. The White House refuses to strong stance in favor of encryption. But because information is so easily duplicated and shared, because it so badly wants to be free, and because prime factoring is so difficult with current processors, all of these efforts to control and censor people face a constant uphill battle.

And then there’s this:

We’re going to get Apple to build their damn computers in this country instead of other countries.

Flux calls on Apple to allow them to release in the App Store

Today we call on Apple to allow us to release f.lux on iOS, to open up access to the features announced this week, and to support our goal of furthering research in sleep and chronobiology.

The makers of the dimming Flux application want access to private APIs to release in the App Store. In my opinion, they shouldn’t be granted it. Not because they haven’t got a good app, but because these screen whiteness APIs should either be released to everyone or not at all. If they’re released to everyone, we will see as many screen dimming apps as there are farting apps.

Furthermore, the stunt that Flux pulled to distribute their app via GitHub without actually open-sourcing the codebase, by adding an executable binary blob to an empty Xcode project and having user’s side load that, was a terrible move. It made the project look open-source, but was actually executing arbitrary code which no one but Flux knows what does. A bad precedent, and Apple were paying attention, and that is why they’ve drew Apple’s ire and swift sherlocking.

I find Flux’s response poised and classy, but they shouldn’t be allowed to access the private APIs on iOS. They will continue to have tremendous success as a Mac app, and I will continue to use their app. I hope they get their patent approved and Apple license the technology from them. If I were them, however, I would release the code, for iOS and for the Mac, as free and open source. If they’re mission is really “to enable f.lux to advance the science, while providing customized solutions for each person”, then they should go open source. If they had done that in the first place, I bet Apple wouldn’t have minded that they were using private APIs.

And Apple’s ire extends beyond Flux, in the release notes of the Xcode 7.3 beta, it says that they’ve removed all private frameworks from the SDK.

Elon Musk: "It’s an open secret that Apple is working on an electric car"

Dave Mark, writing for The Loop:

Elon Musk, in a BBC interview, talks about the Tesla Model 3, in production next year, designed to be affordable for the masses. When asked about Apple’s plans, he (almost reluctantly, it seems) makes the point that it is an open secret that Apple is working on a car of their own.

I’m in two minds about this. Firstly, quite selfish: I, and many of my city-dwelling peers, am not buying a car. Even low-end, second-hand cars are too expensive for the value it would deliver back to me (as far as I can tell). So I’m quite apathetic about the Apple Car.

But! As a developer, I am curious about the potential for 3rd party apps in the car. It’s a place where consumers spend tons of time, commuting, road-tripping, Sunday-driving, all of which are moments that an app, maybe my app, could deliver value. But I’m also highly skeptical that I want code from any ol’ developer running my (very hypothetical) car.

Apple News app under-reporting usage

From the WSJ:

Eddy Cue, Apple’s senior vice president of Internet Software and Services, said the company missed the error as it focused on other aspects of the product. The company didn’t explain how the problem occurred or say exactly when it might be rectified.

“We’re in the process of fixing that now, but our numbers are lower than reality,” he said. “We don’t know what the right number is,” but he added that it was better to undercount than overcount traffic.

Graham Spencer from MacStories writes:

A curious admission from Apple, particularly given that the issue has not been fixed yet. No details are given about the scale of the miscalculation, so it’s unclear as to whether this will result in a minor adjustment or significant adjustment in reader statistics.

Dave Mark for LoopInsight:

… [T]his is an embarrassing hiccough that Apple News did not need.

Eddy Cue has had a number of missteps in the last year: the Apple Music launch at WWDC was poorly executed, the MAS exodus under his leadership, and now a fairly minor analytics bug making front-page headlines.

Twitter is removing the 140 character constraint

From the WSJ:

The company is planning to extend its 140-character limit to as many as 10,000, according to a person familiar with the matter.

Seems to me that Twitter is expanding to be more like Medium and Tumblr, becoming less of a micro-blog and more of just a blog. Admittedly, I rather dislike reading Twitter conversations, and this change will likely make them more difficult to read. I recognize not everyone wants to go through the effort of starting and maintain a blog, and I also understand that a big part of Twitter’s appeal (like all good social networks) is it’s ubiquity, but I still don’t get why people are willing to surrender their content to corporations, man.

Hi-Res audio and the 3.5mm jack on the iPhone 7

There’s major cognitive dissonance in the Apple rumor-mill right now. The claim that Apple is developing “Hi-Res Audio streaming up to 96kHz/24bit” contradicts the claim that Apple will “switch away from the common TRRS 3.5mm jack” because high resolution audio is going to be limited to the quality provided by Bluetooth without the 3.5mm jack. And that’s because I will not buy Lightning headphones, because those are headphones for exclusive use with iOS devices. But maybe there’s hope for Bluetooth.

Star Wars: The Force Awakens Review

There has been a great disturbance in the nerd Universe, coming from a a long time ago in a galaxy far, far away; Star Wars: The Force Awakens has come out and it has shattered all previous records and been met with great acclaim. The run up to the release was one of the most relentless marketing campaigns I have ever experienced: it seemed like Star Wars, now owned by Disney, found a way to insert itself into every conceivable market, from make-up to fast-food to toys. Anecdotally, there hasn’t been such hype around the franchise since the first release in the prequel trilogy, and considering that film was panned by critics and fans alike, the obvious question is, how does the 7th episode fare?

This weekend I had the tremendous pleasure of experiencing the film in IMAX 3D, and I’m happy to report that like his Star Trek adaptation before this film, J.J. Abrams and co. did excellent work with the latest episode. The film is very aware of its history, and sufficiently forward looking. In this compliment is a thinly veiled criticism however: part of the magic of Star Wars originally was that it offered a vision of the future (well, the past, but you know, spaceships) which was unprecendently exciting. It’s no longer 1977, however, and the future of today is very different from the future of yesterday, to put it obscurantly. For instance, we are today conducting automated warfare, and yet a future society which has seemingly sentient robots still places ace pilots physically in space craft to conduct war. Seems unlikely.

But we could likely bracket this concern in the same way that we suspend our disbelief in the Force, the magical power which permeates through all like of the Star Wars universe. And while we’re being as charitable as we can, it’s worth noting that the action and swash-buckling and the snappy comebacks, all cornerstones of the Star Wars tone, are present and stronger than ever. The CGI in The Force Awakens is masterful and tasteful, BB-8 has the personality and presence of Wall-E, the Millenium Falcon has never looked as believable or exciting (even if it struggled to be as nimble after all these years), and I could feel the savage, uncontrolled power of Kylo Ren’s red light saber. The mechanics of what makes a Star Wars film were present in as full a force as ever: the spaceships and lightsabers, the blowing up of spherical super-weapons, and the unlikely tales of supreme heroism against all odds are bigger and better than they’ve ever been.

Yet again in complimenting the film I’ve stumbled across a thinly veiled criticism: if this film didn’t carry the Star Wars moniker, it would be a copy that was better funded than the original, taking what was good about its predecessors and increasing the size 100 times, quite literally in the case of Starkiller Base. Not only that, but its demise of Starkiller is quickly met by the standard old way of sending your ace pilot to shoot it in its soft spot. I emphasize quickly because the terrible destructive nature of Starkiller Base is difficult to take seriously when it’s destroyed in a dozen scenes after it was introduced: it would have been much more imposing and compelling had it been looming in the collective fandom’s psyche for destruction in an upcoming film. Han Solo himself seems to recognize in a moment of prescient self-awareness, asking where Stakiller’s soft spot is and that “they always have one.” And while we’re at it, it seems Jakku is rather like Tattooine, Starkiller rather like Hoth, and Takodana rather like Endor (I recognize that I maybe just be pointing out that it’s desert, snow, and forest biomes but this is an entire Universe we’re talking about).

These are the ways in which the film draws on the previous installments, but the film does have a lot of new ideas that excite me. For instance, Star Wars has always been about the father-son dynamic, being principally about the struggle between Luke and Vader née Anakin. The Force Awakens brings something that no Star Wars film has seen before: a strong female lead, with the brilliantly casted and written Rey. I only presume that Rey is the daughter of Luke, the principal evidence being that Star Wars is the story of the Skywalkers, and I’m excited to learn how Rey will grow to defeat her clear adversary: Kylo Ren née Ben Solo. Similarly, I’m excited to learn what the killing of his father does to Kylo Ren, because while he desperately tries to emulate his grandfather, little does he know of Vader’s struggle with the Light, setting him up to strive for version of the Dark Side which never really existed.

I don’t know why Kylo does what he does: it seems he is a Good Guy who desperately wants to be the Bad Guy, and this uncertainty makes me like his story. With the mask on, he plays the Bad Buy perfectly, executing entire villages, successfully torturing and extracting information, and capturing important rebels. But when his mask is off, so does his evil falter: Rey manages to push back his Force mind-reading, he need’s his father’s help in his father’s execution, and Rey manages to keep him at bay in a lightsaber duel even as a total amateur. I look forward to learning what about Luke’s training caused Kylo to fall to the Dark Side, how Kylo’s failure will be internalized, and why Snoke has such control over the clearly powerful Kylo. In this film, Kylo seems to be a childish poseur, exercising his evil in futile ways like destroying things and relying on physical pain for Dark Side strength. For these reasons, Kylo Ren is my favorite new character, because even though he’s cowardly and undisciplined, he’s also the most complicated and has the most potential for growth, even if it is into the series worst villain.

A reason that I find Kylo more exciting than Rey or Finn could also be that Kylo’s story is more singular, while Rey and Finn tell a disjointed, stop-and-go story. Finn is much more important to the narrative early in the story, delivering Po from the certain continued torture and interrogation of Kylo back to Jakku and safely delivering Rey and BB-8 to the rebel base. When he’s knocked unconscious however, Rey takes the Light Side’s narrative flag, and continues the struggle against Kylo. I hope that in the next film, Rey and Finn get their own distinct stories as opposed to sharing one. The Light Side’s story is made even more confusing by the myriad throwback appearances, which while I throughly enjoyed, I only enjoyed them because of how good previous movies were, not necessarily because of their performance in this film.

Finally, Snoke has really captured my attention. He’s not complex like Ren because we simply do not know enough about him, but I desperately want to know his backstory and what motivates him.

The Force Awakens is an excellent entry into the Star Wars franchise, and it makes the sequel trilogies proud with its tasteful effects and operatic conflict. While it may seem I’m being very harsh on the film, it’s only because I hold the franchise to such a high standard, and J.J. Abrams and co. have done a better job than anyone else could have today.

Apple's executive mix-up: Schiller responsible for App Store

Rene Ritchie of iMore on Apple’s executive mixup:

What this means for developers in general and indie developers in specific remains to be seen. Historically there have been issues in both orgs. App review has generated complaints about capriciousness and lack of responsiveness pretty much since launch, and that has always been under Schiller. iTunes infrastructure, resources, and tools—or the lack thereof—has been under Cue but now move at least partially under Schiller. In the past, long-requested features like upgrades, trials, and Mac App Store parity have been nebulous in terms of who and how they could be lobbied. Now Schiller’s name is officially on the top and it’s absolutely clear—the buck stops with Schiller.

John Gruber on Daring Fireball:

Treating the App Stores as part of developer relations instead of “media content” is clearly the right way to go. The stores are built on the iTunes Server platform (WebObjects, still!), but running an App Store is nothing like distributing movies, TV shows, books, and music. There are far more improvements that need to be made on the developer relations side of things than the technical side of things (although better search would be welcome).

And Dave Mark on The Loop:

Bottom line, Phil Schiller has a tremendous opportunity for foundational change. He has the chance to make things better for developers in all the App Stores (Mac, iOS, tvOS). Key to this is understanding exactly what the problems are. What is driving some developers to release their apps outside the safety of the official Mac App Store? Why is it so hard to make a living building apps? Are these things fixable? Can Apple make app discovery on the various App Stores easier for users and better for developers?

Apple’s present success is almost entirely (or roughly 56%) due to the iPhone, and its success is almost entirely (perhaps more than 56%) because of wealth of apps found on the App Store. Because there are so many consumers on Apple’s iPhone and because the platform is such a pleasure to develop for, developers have flocked to the iPhone. Arguably, in the early days of the first few iPhones with App Stores, it was for the love of the platform: Mac developers who saw a chance to develop something new and cool. It such a surprise to me that considering this, and considering the resources that must have gone into the latest iTunes Connect update, that something as fundamental as the App Store on iOS and on the Mac has gone from bad to worse.

Worse how? I offer only anecdotes. Sketch has left the MAS after becoming one of its biggest hits. I can reliably freeze the iOS app by spam-hitting the elements in the bottom bar. I have app updates that don’t complete and require a restart or a delete and re-install. I hope that putting Schiller’s alone as responsible for the App Store along with placing his good reputation with developers on the line will solve the App Store’s problems.

Mastering the iOS Technical Interview

General Questions

  • Can you describe your workflow when you work on creating an iOS app? Sure. iOS is like any other platform or programming environment, and at the beginning, you need to collect a complete or good initial set of program requirements. After you and your coworkers or clients are happy with the requirements, it’s time to start translating the program requirements into your software architecture. If dynamically updating content is a requirement, you’re going to need a backend. If caching or manipulation of content is required, you’re going to need a database, which will determine the structure and nature of your model. If a GUI is required, you’re going to need to define your views. You wrap these components together with a controller, and assure that your naming convention is semantically similar to your problem domain, downloadBusinessInformationFromBackend,storeBusinessInformationInBackground,updateViewForNewBusinessInformation, etc.

Continue reading “Mastering the iOS Technical Interview”

C and C++ Callbacks with SQLite

Everything is data. Occasionally, when programming day-to-day objects and functions, you get a reminder that everything from the keys you press to the code it makes to the bits it reads is data.

But enough, say you want to use C++ with SQLite in a sane, object-oriented way. More specifically, you want to use sqlite3_exec to execute a SQL query. Here’s an example:

int rc = sqlite3_exec(db, sql, callback, data, &errMsg);

What is each one of these parameters? The first, db, is your opened database, sql is a const char * query you want to run, callback is a static function pointer, data is a peice of data you want to send to callback, and errMsg is what it sounds like. Okay, all’s well, lets define that callback.

static int callback(void *param, int argc, char **argv, char **azColName)
{
    return 0;
}

Damnit. This is going to be called once for every row, I don’t know when it’s going to end, and it’s static, throwing any hope for object-orientation out the window.

Or does it? Switch gears for a moment: What’s one of the hallmarks of object-oriented programming? I’m talking about the keyword this or self. What this is is difficult to describe to others because you’ll often find yourself saying something like, “this is this, like you know, this is this”. But this can be thought of as a hidden parameter passed along with every message sent to an object which can access the object that the message was sent to.

Well if this is what we’re after, this is a hidden parameter, and we’ve got a void * we can put whatever we want in, how about we just reconstruct our instance of an object using C++ casting?

First, make your request:

char* customer::getPerson(int id)
{
    ...
    rc = sqlite3_exec(db, sql, callback, this, &errMsg);
    ...
}

Then, define your C callback with C++ casting to turn person into this:

static int callback(void *param, int argc, char **argv, char **azColName)
{
    Person * person = reinterpret_cast<Person *>(param);
    return person->cppCallback(argc, argv, azColName);
}

Finally, profit:

int Person::cppCallback(int argc, char **argv, char **azColName)
{
    ...
}

Thanks to this StackOverflow post for the insight.

Developer Journal: MVC and Interoperability

The desire for code re-use is a strong one among considerations of how to design a program or application. This competes with the desire to implement applications in their native, and oftentimes proprietary, framework.

Arguably the most important part of a mobile application to be developed natively is the view code. Non-native views on any sufficiently complex data-centered app are almost always immediately identified by users: web views and non-standard behavior almost always give it away. Furthermore, perhaps the least important part of an application to be native is the model. The storing, manipulation, and retrieval of data is oftentimes very similar across languages and frameworks: a linked-list is a linked-list no matter what language it’s in.

Perhaps we can use this dichotomy to best satisfy the competing desires of code re-use and native implementations: keep your views and controllers in native code, but implement your data model in shared code. Specifically, I’m wondering if I can move an application’s model to C++ on iOS, Android, and Windows Phone and only implement views and minimal controllers in native code.

In fact, ideally, all data-related tasks would be handy to have in shared code: anything involving databases, making requests to servers, and parsing responses are the taks which come to my mind. I think that in order to achieve this, I’m going to need to compile a framework for manipulating a database, a framework for making network connections, and a way to have native code request and receive data.

I think a design like this at least works, but it could even be desirable. Maybe the best way for me to find out would be to try it.

iPhone 6 Plus First Impressions

I was a holdout. For three years, I used the magnificent iPhone 4S as my trusty telephone. When I upgraded from a feature-phone Nokia handset to an iPhone 4S, all the things I could do made me forget how I did without a smartphone: get all your emails on-the-go, use the decent web-browser to do tasks if a computer wasn’t around, keep yourself completely amused in all idle moments.

A week ago, I picked up the Ridiculously Big iPhone® and it is also one of those products that I already can’t remember how I did without.

My 4S really complimented an iPad well for some tasks: where the phone could send a quick message, the tablet could comfortably guide you through a book.

This 6 Plus, on the other hand, does not play so well with an iPad. It demands use, because as big as it is, it does fit in your pocket … barely, it has a screen that is just shorter than the iPad is wide, and it always has Internet connection (and to connect your iPad to 4G is quite pricey). It’ll send your quick message and then guide you through that book as you quickly switch to your train-ticket app, or whatever else it is you do.

Any media shines on the 6 Plus: it’s in your pocket, so you can play music; it has a massive screen, so you can play games or browse the web or read a book; the portrait keyboard is well-suited to two-handed use, so you needn’t shy from heavy-input use …

But there’s one thing that totally sucks about the 6 Plus.

Checking the time.

Oh I know, the humanity, you’re walking somewhere to do some lovely fun activity or something and you want to check if you’re late and you have to pull out a 5.5 inch telephone to find out. How hard.

But seriously, this device isn’t great for glance-able information, using it demands attention.

But Apple has no need to create the need for a product category which involves glance-able information.

Right guys?

Right?

'The Productive Programmer' Review

It’s a natural obsession for programmers: the more effective code you can write in a fixed amount of time, the better. This obsession, which is perhaps better labeled a professional narcissism, is well-indulged by Neal Ford’s The Productive Programmer. The book’s central theme is that many of what makes computers highly usable also slows a user down, and that by taking inspiration from the way that the Super Clever People That Made Computers, we can make our use more effective.

Ford’s splits the goal of becoming more productive into two parts: the “mechanics” and the “practice.” Mechanics are about actual tools and code-snippets: using a launcher, a more advanced clipboard, terminal add-ons for your filesystem navigator, and even code snippets for scripts. While some of the software suggestions are a little dated even only a few years after publication, the take-away message is still intact: he describes the sorts of interactions you want to seek to have with a computer programmer.

You should avoid using the mouse when possible, you should minimize the amount of clicks needed when absolutely necessary, you should use searching to find applications, programs, and you should find a way to allow your computer to parse commands from your intent. More generally, The Productive Programmer advises you not to repeat yourself: if you tell your computer to do something, chances are you’ll want to do that again later, so automate it, speed it up, minimize the effort.

The “practice” that Ford describes is oriented towards software development advice, the sorts of methodologies and development styles that decrease wasted time. For instance, many if not all development shops use a version control tool, which allows a developer to revert to a version with an important code-snippet or a working build or whatever it may be. But there are many more tools and processes which can help equally as much.

My favorite of these was the advice to use a canonical build machine. I have squandered many hours setting up a new machine with old code, finding libraries and versions of programming languages and getting the right configuration. Instead, Ford advises you use a machine with has all the tools and libraries and version required to run your piece of software. With this sort of machine, it’s unambiguous how to run your app, and you can even image new machines from the canonical machine.

The Productive Programmer is an accessible introduction for the ambitious user/soon-to-be power-user. As should be expected, some of the tools Ford recommends are a bit dated (though most of them are still around). But the method and principles Ford exemplifies are simultaneously from a Golden Era of computing and a good vision for the future.

WWDC2014 Reaction

Apple’s Worldwide Developer Conference may be one of the most misunderstood conferences held by a public-facing company. The relationship between what the event is and how the event is perceivedmakes for frustrating comment sections on tech blogs, news outlets, and developer communities. Well, more so the former and less so the latter.

The WWDC is an annual conference Apple holds to tempt developers into developing on their platforms with their technologies. The bulk of what the conference is are the workshops and presentations on software engineering. Conversely, the bulk of how the conference is perceived is the conferences keynote presentation, of which the WWDC has become nearly synonymous with.

As a recovering fanboy and a budding developer, I offer this post to interpret what happened at the event and specify what I am most excited about.

First, I will outline some of my thoughts about the changes to OS X. This is followed by the changes to iOS. Interestingly, however, the best of the WWDC announcement did not exist on each platform alone, but rather in the interplay between the platforms. That is, it is not in any single new software feature, but in the single experience that Apple is cultivating across its different products. So that’s what I’ll cover after OS X and iOS. Finally, I will cover some of the news that Apple had for developers.

OS X Yosemite

Apple opened the event with the updates to its desktop operating system, OS X. Aside from bumping the version number from 10.9 to 10.10, Apple has brought a new look, some new core features, an update to Spotlight (hit Cmd-Space to find out what that is), some radical Safari changes, a few convenient Mail changes, but most importantly, I think, an revamp of iCloud’s capabilities.

The new look is trivially a big part of how Apple’s operating system is perceived but more crucially a big part of how the event is perceived. So what specifically has changed and what does it have to do with the perception of Apple and the WWDC? The changes are:

  • Flat design, (fewer color gradients)
  • iOS-style translucency and Gaussian blurs
  • Helvetica Neue replaces Lucida Grande

These changes are all in the right direction for a modern look for Apple’s desktop OS, says the fanbody devil sitting on my left shoulder, but it is not really why the WWDC’s annoucements for OS X are exciting, says the developer angel on my right shoulder.

Before what’s exciting, an interesting pattern emerges from noticing that the new Spotlight sherlocks a smart search tool known as Alfred. (Sherlocking is when third-party developers ship a particular feature first and Apple subsequently implement and release it themselves.)

The feature that matters the most announced yesterday is called iCloud Drive. If Spotlight sherlocks Alfred, then iCloud Drive sherlocks Dropbox andGoogle Drive. Contrary to the per-app file management strategy that Apple has been taking, iCloud has been opened up to allow you to manage everything in iCloud via Finder. This includes everything that your iOS apps store there, anything you want to share between all your Macs, and anything you’d like to send to your apps.

Interestingly, this the latest in a series of features which could be uncharitably characterized as exemplify the Steve Jobs quote which was aptly stolen from Picasso, that “Good artists copy, great artists steal.” As Gizmodo point out, Apple have done this before with Instapaper and Safari Reading List.

One of the reasons that iCloud Drive is so important going forward is that I have heard many times, take the general sentiment to be, and it be the case that Apple’s web services are underpowered. Compare iCloud’s present collaboration and file-sharing functionality to Dropbox and Google. Dropbox is the de facto standard for sharing filesystems, and Google Drive is the de facto standard for sharing and collaborating on files.

With iCloud Drive, Apple is competitively placed to implicitly takeover both of these use cases on Macs and iOS devices. Google Drive and Dropbox are software additions to any machine, require separate accounts and configuration, etc. Conversely, every new Mac shipped and all Mac OS X upgrades will feature this tool by default, and with the advent of BYOD, Apple is positioned to be the default.

This is not the only place that Apple continues to wage its “thermonuclear war” on its old friend, the updates to Safari place Wikipedia results and other items before conventional web search autocomplete.

tl;dr What you should expect is that in the Fall, a visual overhaul of your Mac will be released. It will feature a number of improvements, the biggest of which is iCloud Drive, which will give you an OS integrated Dropbox and Google Drive feature set.

From a developer’s technical point-of-view, the improvements to OS X are tepid at best, heated by the monumental improvement to Apple’s web services. From a fanboy’s point-of-view, I cannot wait to have the visual updates to OS X light up my Retina display.

iOS 8

Contrary to the glaring visual changes to OS X, the changes to iOS are not visual at all. What iOS 8 is to iOS 7 is what Mountain Lion is to Lion: a subtle but global fleshing out of the functionality. Arguably, many of the features which iOS 8 brings, like improvements to Siri, a predictive keyboard, interactive notifications, and a better photo management system, should have come to iOS a while ago. What I mean is that competitors have shipped these items before Apple has, much before. The case-and-point is how Android-y the predictive keyboard is and Google’s ever better Siri clone.

One of the most surprising announcements that Apple made was that it is allowing third-party developers to create and ship software keyboards to iOS devices. The rationale for disallowing the practice has historically been than it opens up a number of security and experience issues. Specifically, if a developer has access to your keyboard, and developer has access to everything you type, and perhaps you type sensitive or personal information. Further, should you pick up any iOS device and are accustomed to the platform, you will instantly be able to begin typing. Some software keyboards are very different from conventional software and hardware keyboards, including everything from swiping to drawing.

In similar vein, iOS 8 gives developers a way to give users a safe means to have their apps interact with one another. For instance, if you are creating a social network and want users on iOS to have your share sheet presented in the OS when a user wants to share, iOS 8 gives developers a way to do this. Or if Instagram want to allow other photo applications to use its filters, iOS 8 gives Instagram’s developers a way to offer that service. The reason this is similar is because this has been disallowed by Apple in the past for security reasons: apps are sandboxed to their own files to protect the user’s other files.

One of the reasons apps have been so successful is that there is little to no risk of any app changing your phone in a way that a Windows XP malware might. The types of permissions that Windows XP granted to executables was much greater than the permissions an iOS app has, which is why a user can be quite careless about what they install in a manner that proved to be quite catastrophic on more lenient systems.

The common denominator of the additions of third-party keyboards and app interactivity is that it is an anachronistic “highly controlled openness.” What I mean by this is twofold:

  1. Yes, you can now have app’s interact and change your default keyboard.
  2. No, potential attacks are not possible in the way they are on competing products.

Specifically, the reason that this approach is not prone to malware is that keyboard are not given default access to the network, for instance. If a keyboard cannot connect to the internet, a sketchy company cannot make a key-logger without your permission. Further, the inter-app communication is a form of openness in that it allows developers to have deeper access to the interactions outside of their application, but it protects the user by sandboxing the inter-app communication.

I take this to be how inter-app communication and third-party keyboards “should have” been done in that it is the sleekest and safest way it has been implemented so far. I hope that the common denominator between these two new features and iCloud Drive is this: When I use iCloud Drive, I hope it has the feeling of being late to the party, but being the best dressed.

Apple takes further aim at existing app developers of the more ephemeral social networks which have been enabled by more powerful devices and people’s desire to take increasingly complex selfies, namely, Snapchat’s feature of being able to quick send video and images to another on a timer. In iOS 8, the Messages app allows you to send video, audio, picture, and location to others.

Another strategy Apple is taking with iOS 8 is defining central location for existing but disparate services. The health quantification apps are all over the place: lots of hardware, lots of software, and little communication or unified direction. With iOS 8’s HealtKit and Health app, Apple has defined a way (HealthKit) for all of these developers and manufacturers to centralize the information and services they provide into a single place (Health app).

Apple mirrors this approach for home automation products and services. With iOS 8’s HomeKit and Siri, Apple has defined a way (HomeKit) for all these developers and manufacturers to centralize the informations and services they provide into a single place (Siri). How does Siri control your home? Well, you need only ask her. When you return home from a long day, you need simply groan into your phone “I’m going to bed.” and Siri will know to lock you garage, dim your lights, lock the door, and check that the dog has enough water.

tl;dr Apple’s iOS 8 will give you things you’ve wanted for a long time: interactive notifications, third-party keyboards, family iTunes accounts, improved photo management, improved Siri, and inter-app communication. It will also give you features you didn’t know you wanted, but come to think of it, it is the future: centralized and powerful health quantification and centralized and intuitive home automation. All of these services share a few common and very Apple-y common denominators:

  1. The features take existing services and integrate them at the OS level,
  2. The features are late but are much better in virtue of being integrated,
  3. The features are better in part because of how secure they are.

From a developer’s technical point-of-view, the updates that Apple is bringing to iOS are monumental, especially when taken in tandem with the framework updates Apple is making. From a fanboy’s point of view, the updates to iOS are tepid at best, not only are there no exciting visual changes, but the most of the added functionality is long overdue.

iCloud and Continuity

If OS X is the Father which was there at the beginning and iOS is the Son that redeemed Apple as a company, then iCloud and Continuity is the Holy Ghost, the ever-present and all-knowing space between your phone, your tablet, and you computer. It is in this space that the WWDC was most exciting to me as a user. On this front, Apple announced four new features:

  1. Handoff,
  2. Airdrop between platforms,
  3. Instant hotspot, and
  4. SMS and phones calls on all platforms.

Handoff is a feature that allows you to begin working on an email or a document on any one of your devices, and subsequently continue working on that email or document on any other device instantly. For instance, if you are working in Pages on a blog post and you want to move from your desk with a desktop computer to the conference room with your tablet, when you open your tablet you will have an indicator at the bottom of the screen to open up and continue work on that document. For far too long have I carefully selected which device I choose to work on a given task on because of limitations and typing and portability, and I am very pleased that I am now empowered to just use whatever it is I am presently on without the need to awkwardly transfer files.

However, if I do want a one-time transfer of a file from my Mac to my iDevice, the updated AirDrop allows me to do that. This is going to be very convenient for when I, as I have found myself, need to transfer a file on my phone to someone who is working on their Mac or vice-versa. This is a much requested and workhorse feature whose utility should be evident. Much in the same boat is Apple’s now easier Instant Hotspot feature, which allows me to use my phone’s cellular data as the Internet for my Mac, which is another hugely convenient addition.

The feature I am most excited to get my hands on as a user, however, is that no longer do I have to use my phone exclusively to make phone calls or use SMS. When I pair my phone with my computer and my tablet, now I can use those protocols from any of my devices. Hallelujah.

But not only is this interesting from a user point-of-view, but from a strategic point-of-view. With Facetime and iMessage, Apple entered the telecommunications market subversively. Facetime Audio and iMessage are barely noticeable from the standpoint of the user, they are simply a more convenient and feature-rich version of what telecommunications companies already offer them. In fact, many other companies offer instant messaging and VoIP. What’s different about Facetime and iMessage is that they are seamlessly integrated into your existing SMS and telephone, technologies that have not much changed in the last one hundred years. By expanding its influence to all SMS and phone calls, Apple is positioning itself to quietly topple public-facing telecommunications companies from bottom-up.

tl;dr If you own all three or any two of the Apple’s product categories, the intercommunication and shared experience are better than they have ever been or are anywhere else. Where Google’s Android is ubiquitous and Microsoft’s Windows is homogenous, Apple’s OS X and iOS are seamless. More simply, you’ll be able to share documents, share your 4G, take phone calls on any device, and send/receive SMS on any device.

The user’s perspective transcends the developer/fanboy divide, as it will help me do all of my tasks better and allows me to use my favorite devices more.

DEV

Apple announced a new programming language to replace Objective-C, and that language is called Swift. The features presented in the keynote were very, very exciting, and most of all its “Playground” feature. What Playground seems to be is that when you are writing code in Xcode and Swift using Playground, when your code compiles Xcode performs some introspection and analysis on it to display on the right hand side a visualization of what your code does. So, for instance, if I write a loop which runs 100 times and moves a UI element from the bottom of the screen to the top, Playground will show that it runs 100 times (if I coded it correctly) and show me the UI element’s movement right from Xcode.

I see Playground as being one of the first seriously compelling reasons to move from a terminal based text editor to an IDE. Of course there are others, IDEs make it easier to use debugging tools and have less of a learning curve. But I have not known a task that was impossible with my favored vim until this Playground feature was demoed.

The fanboy in me obviously doesn’t care about a new programming language, but you may be surprised to learn that the developer in me in strangely apathetic as well. Until some more information is released and I get the opportunity to try writing an app in Swift for the first time, I reserve my judgement about it. Why? Because, frankly, learning a programming language, and especially learning it well and fully, is very hard. Furthermore, Swift, like Objective-C, is a platform specific language. Of course you canuse Objective-C with GCC on any machine, but it is Cocoa that really makes Objective-C a pleasure to develop in.

What is revolutionary from a development point-of-view, however, is Apple’s announcement of “CloudKit.” CloudKit is an API a developer can use to securely store and efficiently retrieve cloud-based data as thought it were in a local database. Apps have become much more stack-heavy in recent years: When you develop an application for an Apple product these days, you are not just developing for one device but for the entire ecosystem. It used to be that an iPhone app would mostly just run on the intended device and maybe eventually the Web. Now, application development requires a back-end for authentication, accounts, in-app purchases, and analytics. This is a massive undertaking for a lone developer looking to publish their idea. CloudKit allows me to do what I do well, compiled, on-device application development, even more powerfully because I can define the server-side logic on device and off-shore the task of running and maintaining to Apple’s servers. Revolutionary.

Practicing Philosophy

The Unofficial Guide to Getting the Most of Undergraduate Philosophy at Rutgers University

A warning. Philosophy will keep you up at night. Your consciousness might be an illusion. Skepticism looms over everything you thought you knew. Our understanding of time may be fundamentally flawed. You could be incapable of expressing yourself to others, doomed to loneliness forever. It’s possible you’re part of a sociopolitical machine which deals systematic injustice. Or maybe there isn’t such a thing as morality.

But, like many things that are worth losing sleep over, philosophy has been neatly regimented into professional academia for hundreds of years. I’d like to offer this guide as an invitation to the major. I’ll share what I’ve learned about why and how to study philosophy as an undergraduate at Rutgers.

First, an introduction: Rutgers University houses one of the top three philosophy departments in the world. Not only that, but the department just received a $3 million donation from the Andrew W. Mellon Foundation and an anonymous donor to fund the department’s first endowed chair. This will be sure to bring another of the world’s top philosophers to Rutgers. Here and now is the best time and place to start a philosophy major or minor, and here’s how …

The first step: The Philosophy Club

If you’ve made it this far, then you’ve probably always considered yourself philosophically minded, but are unsure if you’re really interested in the major. Or alternatively, you’re in the major and you’re looking to broaden your philosophical thinking. The Rutgers Undergraduate Philosophy Club is perfect for this.

Picture Greek philosophers, and you see togas and beards. But, when you picture Rutgers philosophy, you should see a conference table flanked on every side by sharp students led by a distinguished member of faculty, or a rising star in Rutgers’ graduate program. Since its creation in its present form last year, the Rutgers Philosophy Club has been the best place for undergraduates to connect with a broad array of philosophical topics. The meetings are held on Friday’s at 5:00PM. While they officially end at 6:30PM, it is often buzzing long after that. The meetings are open to all.

While every speaker is free to choose his or her own format, the most frequent is a presentation, followed by a question-and-answer session. Every meeting is entirely independent from all of the others, and often the presentations assume nothing about the audience’s philosophical background. Likewise, the curious-minded are free to wander in to whatever meeting they choose. This is because the Rutgers Philosophy Club practices “analytic philosophy,” which strives to be straightforwardly clear about both the question being asked and the answer given.

So, who are professional philosophers and what types of questions do they ask? Modern philosophy is practiced by all sorts of folks, and investigates issues like: What is real? How do we know? What is good? What is beautiful? What is just? What is the mind? What is language? What is science? And even, perhaps a bit vainly, what is philosophy?

The Philosophy Club has been honored to host Rutgers faculty members Prof. Peter Klein, Prof. Douglas Husak, and Prof. Alvin Goldman to talk on these topics. Of graduate students, the Philosophy Club has also formerly hosted Lisa Mirrachi, David Black, Rodrigo Borges, Marilie Coetsee, and Michael Smith, who came to share their philosophical insight.

Regardless of what classes you’ve taken or what your background is, the answers to these philosophical questions are ones you have views on! Do you jump off of cliffs contemplating the meaninglessness of everything and how you cannot know about gravity? Do you see how that would be a badthing for you to do? That it would causeyou as person to cease to exist? That it would be unfairon your family? Philosophy Club is a setting where you can learn about yourself, and develop your views on these fundamental issues.

The next step: Making Philosophy

Students are not restricted to being on the audience’s side of the conference table, however. An important part of the student philosopher’s philosophical progress is expressing their ideas to others, seeing exactly where it is that others may disagree, and considering whose arguments are stronger.

If you have gone to philosophy club and want to take the next step, there are at least three ways to move forward: (1) write a thesis, (2) participate in the undergraduate conference, and (3) work with an undergraduate journal.

Theses

The first step you should take to “make philosophy” is to write a paper that attempts to contribute to philosophical progress. Although you can look up all the logistics of thesis writing on the Rutgers Philosophy Department website, I’ll share some of the harder aspects of it. Namely, (1) picking a topic and (2) securing an advisor.

As a prerequisite to finding the issue that shakes you to your very core, take a well-balanced set of courses. I’d recommend every philosophy major take at leastan epistemology, a metaphysics, and an ethics course. While in those classes, consider which of the debates you enjoy the most: perhaps you like the back-and-forthedness of the Gettier counterexample literature, the fundamentality of metaphysics, or a particular moral issue.

When you think you have a candidate for something you could write deeply about, jump up to the 400-level course with a tenured faculty member in that field, and go to office hours to talk over your papers for the course. Rutgers faculty are encouraging and exciting to work with, but you will need to reach out first.

Should you do well on a paper, ask the professor if they would consider working with you to develop your writing into an honors thesis. This would also be a great time to start discussing graduate school and letters of recommendation, should you be interested.

Conferences

One place to take your completed thesis is to an undergraduate philosophy conference, where you will present it to a national audience. A Google search will yield calls for papers all across the country, as more universities begin hosting such conferences. Should your work be accepted, you’ll take on the job of the visitors to the Philosophy Club: you’ll start by presenting your research, which will be followed by a question-and-answer session. This is an amazing opportunity to hone the skills you’ll need to be a professional philosopher. Namely, articulating your views to an audience of your peers.

Rutgers and Princeton are among the universities hosting undergraduate conferences, as the first annual jointly-held philosophy conference was organized by Rutgers’ own Jimmy Goodrich and Princeton’s Max Siegal. Students from NYU, McGill University, Brown University, and many more came to Princeton to give their selected paper in the form of a presentation. The keynote presentation was given by Rutgers’ Prof. Stephen Stich and Princeton’s Prof. Michael Smith on the role of intuitions in philosophy. It was a stimulating two-day event that will happen again in the Spring of 2015.

Journals

Another avenue you can take your thesis to is that of undergraduate journals. The role of a journal is to select and edit philosophical work for publication, to be read by a peer-group. Just like conferences, journals submit a “call for papers”, which you’ll receive via email, or can find with a Google search. If selected, you’ll likely undergo a couple round of edits and eventually receive a published copy of your work!

At Rutgers, the undergraduate journal is called Arête. I recommend that you submit your paper to other university’s journals, and opt to join Arête as an editor. I recommend this for two reasons: (1) you cannot join another university’s journal, and (2) it raises editorial concerns to both edit and publish your own work. To join Arête, you’ll need a special permission number from the Editor-in-Chief, which you can get from a couple of emails. The undergraduate journal at Rutgers will give you another set of skills you’ll need to go on in philosophy: to read, interpret, and constructively criticize the work of your peers.

The roadmap, completed

To begin practicing philosophy at Rutgers, attend a few sessions of the Philosophy Club. If the issues at stake excite you, take a few classes and find your favorite topic. After that, the philosophy major at Rutgers is the most rewarding experience I’ve had: thinking deeply with the help of the world’s best philosophers, submitting and participating in conferences of like-minded peers, and in turn considering their work. With hard work, these steps will turn you into an aspiring philosopher.

Philosophy's Not Dead

The Wave Function, Breakfast Cereal, and Philosophy of X

Philosophy is the oldest study in the world, arguably beginning when Plato established the Academy in 428 BCE. Simultaneously, it is arguably now the most disparaged, where every few months a leading scientist will claim philosophy is dead or metaphysics is fairy-laden. There are at least two ways to respond to this: (1) to defend philosophy on the scientist’s own stomping ground, citing examples of progress within the scope, and (2) to justify philosophy on its own merit, to defend the goals of philosophy.

The purpose of this article is to appeal to the scientifically-minded to embrace philosophy because of both its contribution within scientific domains and inquiry and on its own merit.

What is Philosophy?

What is the scope of philosophy? It’s very clear that psychologists study people, biologists study life, physicists study energy, etc. So what on earth does the world’s oldest study actually study? A popular answer is that philosophy studies philosophers, but this just pushes the bump in the carpet. Another popular method of working this out is to look at the word “philosophy” and to see its meaning, which is “love of wisdom.” Unfortunately, this is too cryptic and still just pushes the bump in the carpet. Perhaps a look into the hard-and-fast divisions of the subfields of analytic philosophy will help. They are:

  1. Logic, “What is truth and how does it work?”;
  2. Metaphysics, “What is real?”;
  3. Epistemology, “What is knowledge?”;
  4. Ethics, “What is good to do?”;
  5. Politics, “What is justice?”;
  6. Aesthetics, “What is beauty?”

But this answer won’t do either, for two reasons. First, I don’t think this is going to impress the scientifically-minded skeptic that philosophy is worthwhile or rigorous. Second, and thankfully, this taxonomy fails to capture where most of the progress has been in philosophy: the “philosophy of Xs.” There is a “philosophy of …” for practically every field, with some of the most prominent being the philosophy of science, thephilosophy of language, and the philosophy of mind.

In this article I’ll map out one such Òphilosophy of XÓ study and appeal to the scientifically-minded skeptic that it is both properly a field of philosophy and is as rigorous and as worthwhile as empirical science. Specifically, I think that there are two intellectual activities at play: (1) the “first-order” observation and hypothesizing about physical phenomena, and (2) the “second-order” interpretation and synthesis of these hypotheses into the broader corpus. In (2) is where I see the scientifically-minded skeptic embracing the practice of philosophy.

Philosophy of Physics: An Open Question

Hypothetically consider an omniscient, but somewhat limited, god at the very beginning of space and time. This god only knows everything about the present moment, but it is indeed everything, including the position and velocity of all particles and the laws which govern them. Whatever laws are is a question for another article.  All we need to think about is what is logically consistent with such an imaginary being.

Is this enough information to determine how the universe will end? If it is not possible to determine the course of the universe like this, are there probabilities? Perhaps there’s a certain probability of a heat death and a certain probability of a big crunch death of the universe. Could this hypothetical being determine these? Are the probabilities somehow “in the world” and observable, or merely just a instrumental frequency count we assign to sufficiently complex phenomena? If this omniscient being can neither determine the course of our universe nor work out with certain probabilities, what is it that binds together frames in space and time? Is it entirely random? Whether or not these are these problems interest you, these are the sorts of questions where I think philosophy can help physics, in the interpretation of these physical observation and hypotheses.

Questions of determinism and indeterminism are of clear philosophical interest, and hinge on the findings of our fundamental physics. If our universe were purely Newtonian  “clockwork universe,” then with enough investigation we could come to predict the end of our universe and our choice of breakfast cereal tomorrow morning. On the other hand, if our best physics has probability or indeterminacy built-in, then the end of our universe and our choice of breakfast cereal may very well be unknowable. This is consequential to our understandings of ourselves and our ability to choose, of what it is to make the good choice, and of what it is that we can in principle come to understand.

We have two questions here: (1) What is? (2) What does that mean? Philosophers are interested, just like physicists, in determining what is. In addition, I hold that philosophy is uniquely the study of how to “glue” what is with our everyday lives. This is where I think philosophy parts ways from pure observation.

Science & Philosophy Side-by-Side

This taxonomy is not at all divisive, it’s just the case that some eager minds wish to carefully observe the world and hypothesize about it (what “is”), while others want to take those hypotheses and make them cohere with the rest of the corpus of human understanding (what does “it” mean?), and those categories are not at all mutually exclusive. This distinction is between a straightforward hypothesis of the physical world and a picture, understanding, or conception of experienced world. The question of what the world is actually like will overlap with the study of metaphysics, specifically, it is exactly the study of ontology, which asks, “What is being?” The question of how and whether we can come to know what the world is like is an epistemological question. Whether or not there is a pre-determined end to our actions should inform our intuitions about ethics, like can you blame someone for an action they were pre-determined to perform? As such, the question trickles into how to organize our society in the fairest way. Furthermore, I take this to be how the hardcore physicists’ own domain of inquiry will contribute to the classic questions of philosophy.

The determinism/indeterminism debate above is directly observed in quantum phenomena, where our best hypotheses use a wave function to describe the state of particles. However, I claim that nothing in the fundamental physics of our world could in principle answer questions like (2).  That’s one of the domains of philosophy, to reconcile the latest and greatest discoveries with other, more ordinary observations and ourstrongest intuitions. Nothing about the way the world is is going to tell about how we should act, for instance. No fact that’s come to be known will tell us whether we can know that fact. Some of our best theories of physics hold we should abandon our everyday notions of space and time, of simultaneity, of color, of mind. My use of philosophy is to reconcile this objective study of the world with what it’s like to be human.