Monday, May 26, 2014

WWDC 2014 Wishlist

WWDC 2014 starts one week from today, so I guess that means it's time for some predictions. It's almost certain Apple will be introducing OS X 10.10 and iOS 8, which means new features, new APIs, and lots and lots of "To Be Announced" sessions. Last year, 64 of 97 sessions (65%) were marked "To Be Announced" prior to the keynote. This year, 80 of 108 sessions (74%) are still undisclosed1. There's a lot of new stuff coming. Last year I was pretty conservative, only predicting things I was pretty sure of. This year, I don't know enough to do that, so I'm going to be a bit more speculative. Here's what I'm hoping for:

OS X 10.10

Rumors are strong that we'll see a visual overhaul of OS X, similar in scope to what iOS 7 brought last year. I really have no clue what to expect in general, but a few things seem more likely to change than others:

  • No more gradient toolbar buttons (as found in Finder, Safari, etc.)
    I would be very surprised if we don't see these transition to a more flat style.  We saw the same sort of transition from Xcode 4.6 to Xcode 5. Expect that gradient buttons will be rare, especially in toolbars. I don't think the new style will look just like Xcode 5—I expect we're in for more of a change than that—but I'd be surprised if this isn't part of it.
Finder in OS X 10.9
Xcode 4.6
Xcode 5
  • Dock changes
    The Dock seems like an obvious target for changes. Currently, the dock serves as a quick launcher, an app switcher, a container for minimized windows, a home for "Stacks," and the only visible location of the Trash icon. It's an unfocused mess.

    "Multiple, more-focused docks" is obviously not the right answer. They might remove running apps and just expect users to switch between them using Mission Control or by clicking on the window, but that just seems like it's removing functionality without any user benefit. Maybe they make it only show apps that currently have windows open? But then the quick-launch functionality is gone.

    So what does this all mean for the Dock? I'm not sure, really. But I think it's ripe for change; I'll be really surprised if the Dock stays exactly how it is right now.
     
  • Open/Closed apps
    I expect Apple to continue reducing the distinction between "running" and "non-running" apps. Recent features like Mission Control suggest that Apple feels managing visible windows is more important than managing apps. (See also the trend toward integrating "Inspector" panels into the main window.) There's already an option to remove the indicator lights for open applications in the Dock, and in past years, Apple has indicated that the Automatic Termination feature will become more and more prominent.

    The iOS app management model is an inspiration for Apple, I believe. iOS users generally don't worry about whether an app is "running" or not; they just know that if they can see it, they can use it. Obviously, on a desktop system with multiple windows visible at the same time, things are more complex. But if things are already getting reshuffled visually, expect more movement in this direction.
     
  • Menu Bar
    The global menu bar is one of the hallmarks of OS X. Windows migrants protest its disconnection from the window content. Mac veterans point out its consistent location and reliability.

    More and more, I feel that most users will never find features available only through the menu bar. Right-click contextual menus are far more accessible to users than the global menu bar. Increasingly, the standard File menu is more about managing windows and tabs than about files. The View menu usually manages the state of the window, and the Window menu is just a list of app windows that most people never use.

    Honestly, I don't really think we'll see significant changes to the menu bar itself. Changing it would break too many assumptions from existing apps. But I wouldn't be surprised if the built-in apps start abandoning the traditional File, Edit, View, Window, Help setup for a more user-friendly structure.
      
  • Better access to iCloud documents
    Currently, if an app saves a file in iCloud, that file is really only available from within that app. It shows up in Finder's All My Files view, but that list is so huge that it's mostly unmanageable. I'd love for Finder to have a view of files organized by app. Essentially, each app would be a "folder" for its documents.
     
  • Siri
    We'll probably see Siri show up on OS X at some point. Maybe it will be this year? It's possible, but I'm not counting on it. If it shows up, I'll consider it a nice surprise.
     
  • Clock app
    I said it jokingly on Twitter, but it actually wouldn't surprise me if OS X included an iPad-like Clock app. Stopwatch included.
I suspect there will be lots of other exciting changes on OS X; I just don't know what they are. I'll look forward to this.

iOS 8

OS X is rumored to be the star of WWDC this year, but iOS will certainly have some new features too. The WWDC app lists 99 sessions with content relevant to iOS, and only 78 relevant to OS X. Some of this is surely just a reflection of the prominence of iOS in Apple's developer base, but it would be foolish to assume that iOS won't be getting anything interesting this year. 
  • App Services via Remote View Controllers 
    Back in October 2012, Ole Beggeman did some great investigative work on remote view controllers, used internally since iOS 6. The basic idea is that some portion of your app's interface is actually provided by a separate process. This is currently used for the Mail composition controller, for example; the pixels you see are actually generated in a separate app and then drawn into your app. Touches in that region are forwarded on to that helper app, such that everything appears to the user as if it all originated in the same app.

    Remote view controllers could resolve one of the longest-standing complaints about iOS—that apps are too "silo-ed off" from each other. Apps could instead provide interfaces to each other as "Services". Imagine if the Dropbox app could an interface for other apps to upload or download documents from within their app, without embedding a Dropbox SDK. Imagine if your university's LMS app could present a file-picking interface from Pages, and submit it as a homework submission for you. Or imagine if you could turn your Pages document as a homework submission from within the Pages app.

    This is the kind of thing that app services would allow. Of course, you'd have to have some programmatic way to discover available services and their purpose. Pages certainly isn't going to build in custom support for your university's LMS app. One approach might be for each app to declare the view controllers it can present in other apps via a plist. Each service might be labeled with its role, like these:

      - Document picker
      - Sharing service
      - Upload service

    The specific set of roles might expand over time, but the fundamental advantage is the ability for an app share its functionality with other apps on the system.
     
  • XPC and Sandboxing
    XPC is a framework for creating and managing helper processes, introduced in OS X 10.7. It and allows the developer to segment their app into multiple processes. There are two main advantages to this structure: stability and privilege separation.

    Stability is a simple one to understand: If one of the helper processes crashes, the main app is not affected; it can just carry on and launch the helper process again. If one portion of your app is especially prone to crashing (perhaps it parses user input?), you could separate that out into a separate process, and now your app is more stable.

    Privilege separation is the ability to limit the access of a process. If your parser has a vulnerability that allows access to any portion of memory, a malicious user might be able to gain access to data meant to be secure, such as user passwords, and upload them to a server2. On OS X, XPC services can also be given a more restrictive sandbox, such that the helper process would not even have access to the network. Even if there's a vulnerability in your parser code, blocking the ability of the parser to upload data to the network means that you've greatly limited the damage a malicious app can do.
     
  • Third-party keyboards?
    Users have long requesting support for third-party keyboards in iOS. One of my friends says that the main reason she won't get an iPhone is that she the Swype keyboard is not supported on iOS.

    Third-party keyboards have always been a security concern, though. A keyboard has access to every key you type. This means it has access to every username, password, social security number, and credit card number the user types in any app. Apple has long prioritized privacy and security over user features. I've always assumed that this was simply the death knell of third-party keyboard support in iOS.

    However, if we've already added App Services and Sandboxing in iOS 8, then there might be a way forward. There might be a special type of app service for third-party keyboards. These keyboard services would run in a very restricted sandbox; they would likely have no access to network, location, contacts, photos, etc. It could not launch other app services. Without this access, even a malicious keylogging keyboard would have no way to report your data. With these restrictions, Apple might consider allowing third-party keyboards.

    I think a lot of people would be excited to see this in iOS 8. It's possible, though, that Apple might prove out app services in iOS 8 before adding keyboard support in a later release. I won't say that I think this one's going to happen at WWDC 2014—it probably won't. But I'll hope for it anyway.
     
  • Healthbook
    Pretty much every rumor for months has indicated that iOS 8 will include a Healthbook app. It will apparently be able to track various health related biometrics, such as activity, sleep quality, heart rate, blood pressure, etc.

    It's a cool idea. The main question is how the data will be collected. Some metrics (step count, etc.) can be inferred just by motion of the phone itself. The rumors indicate, though, that it will have far more data than that. A report from 9to5Mac indicates that it will track metrics like "heart rate, hydration, blood pressure, physical activity, nutrition, blood sugar, sleep, respiratory rate, oxygen saturation, and weight." Some of these could perhaps be entered manually by the user, but if this is going to have any impact at all, most of this data collection has to be automatic.

    The rumored "iWatch" might be able to provide more of this data, as it would have direct skin contact. However, I think it's unlikely that any wearable tech will be announced at WWDC. Without that, I'm not sure how useful a Healthbook feature would be. If iWatch is to be released this fall, then perhaps Apple will refrain from announcing it at WWDC, but include Healthbook in iOS 8 when it ships this fall.

    Color me skeptical that we'll hear about Healthbook at iOS 8. I won't rule it out, but I'm skeptical. I just don't see how it can be useful without greater ecosystem support.
      
  • Much improved javascript performance
    Javascript performance is slower in third-party apps than in the native Safari app because the JIT compilation techniques used in Safari require write access to executable memory pages. This is considered a security concern in third-party apps, and thus JIT has been disabled there. I would be very surprised if this performance restriction is not removed in iOS 8 by means of out-of-process execution or rendering.

    I'm calling this one. It's coming.

Xcode and Developer Tools

There are a lot of TBA labs on the Tools track. I think there will be some really exciting stuff here. I keep a fairly close eye on the clang commit logs, though, and I've got a couple predictions.

  • Better formatting
    The clang-format project is an automatic code formatting tool built on clang libraries. While Xcode's code formatting ability is passable right now, they're nothing spectacular. In particular, Xcode often does really dumb things with multi-line dictionary literals or array literals. I'm hoping we'll see that improved in Xcode 5.2 (or whatever's coming next.)
     
  • Fewer tolls at our toll-free bridges
    ARC has done lots of wonderful things, but one thing it hasn't done is simplified toll-free bridging. Instead, we often see (__bridge MyFoo*) casts to specifically indicate that we don't want any memory management to happen. I think we'll see many of those casts disappear in common cases.
     
  • Better Beta Distribution tools
    Earlier this year, Apple acquired Burstly, the owners of TestFlight. TestFlight is a very widely-used service for distributing and managing beta versions of in-development apps. Shortly after the purchase, their Android platform was shut down. Beta distribution is a pain on both iOS and OS X right now. It involves collecting device UDIDs, managing provisioning profiles, etc. On Android, by contrast, users can be added to a beta simply by adding them to a Google Group. This is an area where developers are often frustrated with the Apple platform, and it's a great opportunity for them to win back some developer goodwill. I'm hopeful we'll see something exciting.
     
  • More improvements around Modules
    Last year, Apple introduced modules as a compiler feature. They enable the @import keyword, enable auto-linking of frameworks, and can make compilation times much faster. However, so far it's only been available for importing system frameworks. I've seen some commits on the Clang logs indicating that support for user modules is under development. I don't know if it will be ready for WWDC or not, but I'd love to see what the new possibilities here are.
     
  • Mogenerator (please?)
    Mogenerator is a great tool for working with Core Data. It automatically generates property declarations for you in .h and .m files, and then creates subclasses of those auto-generated classes for developer customization. If you're not using it, you absolutely should be. Even some Apple teams use it internally.

    Frankly, it seems insane that something like this isn't part of Xcode already.
Beyond that, I really have no idea. I don't think we'll see Xcode plug-ins this year; I think when they do that it will be a major revision number, and I don't think they're ready to call this Xcode 6. Is that a silly reason to hold back a feature? Probably, but I stand by my guess.

iCloud

Last year, I predicted that most of the iCloud talk at WWDC would be about how they've fixed all the bugs (especially with the iCloud-Core Data integration), and would not be announcing new features. Well, here's a quote from last year's Platforms State of the Union:
So this is an area that we have decided to not implement any new features this year but instead to focus on reliability and quality.
Nailed it. This year, I think we'll be back in feature land. I really have no solid evidence on any of the following points; they're just guesses and wishes, not predictions.

  • Improved Photo Stream service
    It's been said by many people: Instead of all the photos living on your device, with only the most recent ones living on Photo Stream, it should be the other way around. iCloud should store all my photos, and my phone should be able to download them on demand. Server storage is incredibly cheap these days; it seems like Apple should be able to do something better than what they've got right now.
     
  • Larger quotas
    Speaking of server storage costs, I hope we see the free storage tier bumped up dramatically from the current 5GB. Device backups alone can take up the majority of the free 5GB tier; I've turned off iCloud Backup on one of my devices because I was running out of space. If "always backed up, all the time" is supposed to be one of the big features of iCloud Backup, then they need to offer more space.
     
  • Server access
    One of the problems with iCloud document storage is that developers have no external access to the data. For example, many users have asked us at Day One for a way to add journal entries online. With iCloud document storage, there's simply no way for us to do this. Third-party servers have no access to the user's iCloud storage.

    If Apple allows server access, expect to see server provisioning profiles as part of it. People will complain about it, but I don't see Apple allowing this any other way.

Other

A few other predictions that just didn't fit anywhere above:
  • Improved Maps w/ Transit (iOS and OS X)
    In the Keynote session, they'll probably show off some fancy updates to Maps, including support for mass transit schedules. They won't cut off the existing transit apps added in iOS 6, but for many users, this will be much simpler.
     
  • App Rentals
    A couple years ago, references to "App Rentals" were found in iTunes. I'd love to see developer able to mark their app as available for rent. A user might rent the app for 1 week at a cost of $0.99. After that period, the app would remain installed, but upon opening it the user would be informed that their rental period had expired. They could choose to rent it again, purchase the app, or exit.

    It would be opt-in by the developer, of course, but I think most developers would be extremely excited for this. If developers were allowed to limit the number of times an app could be rented, it could serve as an inexpensive "trial period" for users. I've been hoping for this ever since it was discovered, but who knows if we'll finally see it in iOS 8 or not.
     
  • Something else
    A new class for OS X and iOS whose SHA-1 hash is c1516c6879792c45fac4867d9a66b73e7d2514f93.


1: Of course, not all of those sessions will contain earth-shattering revelations; pretty much any mention of the word "new" is enough to redact the entire session until after the keynote. And yet, somehow "What's New in Foundation Networking" slips through unredacted. Not sure what's up with that.

2: This is perhaps a lesser concern on iOS, simply due to the difficulty of getting malicious payloads into the target app and the inability to spawn separate processes. Nevertheless, it's one that should not be simply ignored.

3: Yes, I'm totally taunting you here. The information is publicly available, and has been for weeks, but I haven't seen anyone else discussing it. But I don't want to be the one to spoil Christmas morning! The name of this class isn't actually all that exciting, but I think the technology behind it will make a lot of people happy.

Saturday, April 26, 2014

Mormon Questions: Mistaken Revelation

Mormons1 believe that we learn truth not only through scripture, but also through direct personal revelation from God. This is essential to our religion. Missionaries invite the people to seek divine confirmation that their message is true from the very first meeting. We teach the importance of personal revelation in Sunday School and in youth Primary classes. The Book of Mormon itself includes this invitation in its concluding chapter:

And when ye shall receive these things, I would exhort you that ye would ask God, the Eternal Father, in the name of Christ, if these things are not true; and if ye shall ask with a sincere heart, with real intent, having faith in Christ, he will manifest the truth of it unto you, by the power of the Holy Ghost. (Read in context)

And yet, personal revelation is a difficult doctrine. By its very nature, it is individual and non-verifiable. I cannot experience what you have experienced; I cannot show you what revelation feels or sounds or tastes like. I can tell you about my own experiences, but since God communicates to each person in their own way, my experience may not be relevant to you.

This means, of course, that I cannot verify that what you experienced is a revelation. Wishful thinking can easily be mistaken for revelation, as can trepidation or nervousness. The human mind has all sorts of ways to convince itself of things that may not actually be true. The doctrine of personal revelation is not one of pristine, unambiguous communication.

How can you know, then, if a supposed revelation really comes from God? How can we distinguish divine direction from internal monologue? What about other religions that claim divine revelation from a different source?2

The answer to misinterpreted revelation is, quite simply, practice. Like most learned skills, we'll probably make a lot of mistakes at first, and practice is the only way to figure it out. Fortunately, we actually have ample opportunity to do so. Each of us has a conscience, an internal sense for right and wrong. Mormons believe that this sense actually has a divine origin, known as the Light of Christ. When we listen to our conscience, we are actually learning to receive simple revelation. The same principles involved in recognizing right from wrong by instinct are used in discerning revelation. In the same way that sharing or sticking up for others just "feels right," revelation from God also "feels right."

Of course, none of us is perfect at following our conscience either. We've all experienced that moment when you realize that you made the wrong choice. That discomfort is instructive too; it teaches us to recognize correction. If we continually ignore our conscience, though, we'll eventually diminish our ability to recognize its guidance.

A key principle in recognizing true revelation, then, is consistently following your conscience. As you do so, you'll become more sensitive to its instruction. This will help you recognize other forms of revelation.

More specific revelation is available when we seek for it. Prayer at its best is simply communication with God. Two-way communication. Though it's easy to fall into a routine of saying the same repeated phrases every time we pray, prayer should resemble a conversation more than a monologue. Prayer should include questions, and silent time to ponder as we seek to discern revelation in response to those questions. God does answer.

This pattern of revelation continues; as we attune ourselves more toward God and follow his guidance more and more closely, we will have access to more specific and more frequent revelation. Our ability to communicate with God will increase, as will our ability to recognize it.



I am hesitant to judge the motivation and experiences of someone I don't know. I do not believe God would give one person truth and another a lie; all revelation from God is true and consistent. God might, however, guide a person (via revelation) to a best available option, even if none of those options is the ideal.3 Some who claim revelation may simply be mistaken, either through their own wishful thinking or by the deceptive action of another. And yes, some of them might simply be lying, claiming revelation in order to attract attention and exploit followers. Most people who seek revelation are sincere, though.

My experience in this faith, though, has shown me that many, many people receive compatible instruction through revelation. There is a universal truth, being revealed to many individuals independently. Further, revelation often gives us information we could not have known otherwise, giving us insight into the needs of those around us or explaining things we did not know. Learning to accurately recognize revelation takes time and practice, and we all make mistakes, but the principle is nonetheless true.

Remember, though, that revelation is not something only for a few elite. Everyone receives it in at least small measure through our conscience. The Book of Mormon teaches this:

But behold, that which is of God inviteth and enticeth to do good continually; wherefore, every thing which inviteth and enticeth to do good, and to love God, and to serve him, is inspired of God. (Read in context)

Whether or not you believe in God, choose to do good. If I'm right, it will increase your ability to recognize God's voice. If I'm wrong, it will still make the world a better place. Either way, choose Good.


I'd love to hear your questions or thoughts about this article, or any other questions you have about Mormons. Find me on Twitter (@bjhomer), or send me an email (bjhomer@gmail.com).

Also, I promise I've got some technical posts in the pipeline too. I haven't forgotten.


1: More acccurately, "members of the Church of Jesus Christ of Latter Day Saints". Though I don't find the term offensive, I think calling us "Mormons" is misleading to those unfamiliar with our faith. While belief in the Book of Mormon is a unique feature of our teachings, neither the Book of Mormon nor Mormon-the-person is a central figure of my faith, any more than rubber-band overscrolling is the core of the iPhone experience. It's a unique and identifying feature, but hardly the main point. Mormons follow, preach, and teach about Jesus Christ. All those other things just point us to him.

Yes, I will probably mention this in every "Mormon Questions" post. It's important to me.


2: There are actually surprisingly few Christian religions that preach modern revelation. Many teach that the Bible contains all we ever need to hear from God. Some teach that God can influence people in undefined ways to do good, but stop short of acknowledging specific revelation. I believe most non-Christian religions either teach that revelation has ceased, or concern themselves more with morals and practices than with revelation. I am not aware of any other religion teaching that God gives revelation today exactly as he did in Biblical or other ancient times. (I admit, though, that I am not familiar with all world religions. Surely such religions exist; I am simply unfamiliar with them and thus cannot address their specific claims.)

3: For example, this might happen in areas where Christianity is virtually unknown. God might still reveal to someone the importance of following one's conscience, or guide someone to an established religion in that area that would teach many correct principles until such time as His authorized church was available there.

Sunday, April 20, 2014

Death and Resurrection

Today is Easter. Let's talk about it.

Nearly a year ago, my grandfather passed away. It was not unexpected—he'd been in pain and mostly unable to move out of his chair for months. He frequently said that he was ready to die, but just didn't know how. When the time finally came, we were relieved for him and for my grandmother.

His passing was happy, and yet sad. We'd known it was coming, were relieved when it happened, and yet we still cried. We cried because my children wouldn't get to know him, wouldn't hear his stories, wouldn't enjoy his rich singing voice. We cried for the loneliness my grandmother would endure after his passing. We cried for the loss and separation we each felt in our hearts.

Harold during World War II
Most of us have had some experience with death in one way or another. Some have had far more than their share. The loss we feel when someone we love dies is real and painful. It touches us deeply.

But it is not permanent. Death is not the end.

Easter is the celebration of Jesus Christ's resurrection. Three days after his death, his friends and followers went to his tomb and found it empty. Perplexed, they wondered if his body had been moved to another location, or perhaps been taken by vandals. 

But no, his body was not taken away. He was risen, resurrected. He was alive again. He visited his friends, showed them that he was again a living soul. He ate with them, let the touch his body. This was no mere spirit—Jesus Christ had literally risen from the dead. Something new, something none of them had seen before. Imagine the wonder you might feel—the shock, disbelief, or amazement.

This resurrection was not limited to Jesus Christ. He was the first, the evidence of death's defeat. But he was not the last. Indeed, Christ promised that through his victory, all would rise again. All of us. Each one of us will live again, regardless of our beliefs or our actions. Resurrection is a gift freely given to the entire human race.

This is why we celebrate Easter. My grandfather will live again. You and I will live again. Your parents will. All of us will. We need not fear death, for it is not the end. Is there a better reason to celebrate? Death, the universal enemy of man, is only a temporary rest stop in our eternal existence. Easter is a day of Hope, of rejoicing and happiness. Christ lived again, and because he did, we all will. Should not this be the very greatest of holidays?

So today, on Easter, take a moment and consider it. What would Resurrection mean to you?




Wednesday, April 9, 2014

Mormon Questions: Why THIS church?

I'm a member of the Church of Jesus Christ of Latter-Day Saints. That's a long name, so in the interest of efficient communication most people just call us Mormons1. Last weekend was the church's semi-annual General Conference. It consists of five 2-hour sessions, each broadcast to church meetinghouses worldwide and streamed live on the internet. Speakers chosen from church leadership select their own topics, usually focused on some aspect of Christ's life or on how we can apply his teachings and doctrine to our own lives today.

This conference is a special time for us; we believe the church is led by literal prophets and apostles, authorized and ordained just like the apostles during Christ's life. Getting messages from all of them, in one weekend, is a feast for the spiritually inclined. You might think of it somewhat like a weekend of spiritually-focused TED talks.

During the conference I was tweeting things that stood out to me. This led to a few discussions with my followers, which I was happy to entertain.
I answered the questions as well as I could, and had some great conversations. Some questions, though, are difficult to answer in 140 characters, so I wanted to revisit a few of those here over the next few days and provide more complete answers.


The short answer to this question is simply "Because God told me so." Mormons believe that everyone is capable of receiving direct personal revelation, and that God expects us to use it.

On this topic of personal revelation, it's important to understand our relationship with God. God cares deeply about us, because we are literally his children. Each of us lived with him as a spirit, his spirit children, before we were born here on Earth. Revelation from God, then, is literally communication between parent and child. He is eager to help us learn.

You and I adjust our communication according to the person we're speaking with. A conversation between myself and a technical co-worker sounds very different from a conversation with my wife, and both are different from a conversation with a non-technical family friend, or a conversation with my children. We all adjust the content and manner of our communication according to the understanding and needs of the recipient.

God does the same when he speaks to us. Because he wants us to develop and exercise faith, he rarely speaks to us face-to-face2. Instead, he speaks to us through various other mechanisms. He can guide our thoughts, touch our emotions, and influence our dreams. He can give us an unshakable feeling that something is wrong, or that something is right. He can remind us of things we have learned before, and plant thoughts we've never before considered.

All of these mechanisms, and many others, are available to God as he communicates with us. And because each of us is unique, he tailors his revelation to each of us according to our unique abilities to learn and our skill in perceiving his communication. For me, revelation often comes as new insights into some topic, accompanied by powerful feeling that what I'm considering is right, that it just makes sense—how could it be any other way? Sometimes, it may come as a warm feeling in the heart, a comfort and peace that things are just right. Infrequently, I've had dreams that seemed to have special significance to them; they gave me new understanding of a situation.

Because God's revelation is uniquely suited to each individual, it cannot be shared. I can tell you what I've learned, but I cannot prove my revelation to you. Each person has the opportunity to seek revelation from God on their own, and receive the same confirmation. This invitation is given in both the Bible and the Book of Mormon:
New Testament - James 1:5
If any of you lack wisdom, let him ask of God, that giveth to all men liberally, and upbraideth not; and it shall be given him.  
Book of Mormon - Moroni 10:4
And when ye shall receive these things, I would exhort you that ye would ask God, the Eternal Father, in the name of Christ, if these things are not true; and if ye shall ask with a sincere heart, with real intent, having faith in Christ, he will manifest the truth of it unto you, by the power of the Holy Ghost.
So, I believe that my church teaches the truth about God because I've asked him in prayer if that is so, and I believe he has answered through direct revelation that it does. It really comes down to that, in the end.

Andy had another question at the end of our conversation:
"It feels right" is appropriate because revelation is communication, not scientific inquiry. We are not studying God, we are talking to him. Talking with him. Scientific3 inquiry comes, if appropriate, as we choose whether to act on the guidance he gives us. When we act in faith on received revelation, we make a hypothesis (of sorts) that acting on that communication will produce some desired outcome. After doing so, we can evaluate the results. That process will, I believe, validate the initial exercise of faith.

This principle of acting in faith is an inherent part of our relationship with our Father. He wants it that way, it seems; there are things we can learn when forced to act in faith that we cannot learn any other way4.

"It feels right" is also appropriate simply because that's often how God speaks; it is not our privilege to dictate how he will communicate. For most of history, a rigorous scientific method for discovering truth was unknown. Even today, there are many people throughout the world who lack the training to adequately seek truth through careful examination of hypotheses and control groups. Our Father is not just interested that somebody know the truth; he wants it available to all of us.

God speaks the way he does precisely so that we can all hear his voice, no matter who or where we are.


I'd love to hear feedback on this article. I'll respond most quickly on Twitter, but you can also email me at bjhomer@gmail.com.

If you have other questions about my faith that you'd like to see answered, please let me know. I've got a couple more posts already planned, and I'll keep writing as long as there are questions.


1: The common use of "Mormon" as a reference to the church is derived from our acceptance of The Book of Mormon as an additional book of canonical scripture alongside the Bible. Despite the nickname, we follow and worship Jesus Christ, not Mormon or any other person.

2: Face-to-face appearances have occurred, both anciently and modernly, but they are rare. They carry with them an increased responsibility upon the recipient—when you have that kind of knowledge that God exists, he expects more of you. Excuses hold less weight when you absolutely know better.

3: I use the term "scientific" here quite loosely, as the inherent nature of personal revelation makes it impossible to construct any sort of control group or independent verification. Everyone can have the experience of communicating with their Father in Heaven, but each person's experience will be unique and personal.

4: We believe that a primary purpose of our time here on Earth is to develop attributes and learn skills that we simply could not learn while constantly in the presence of God. Much like some baby birds learns to fly only when kicked out of the nest, there are some aspects of us that can only grow while away from God's immediate presence.

Monday, October 28, 2013

Will code for Obduction pledges


Cyan, the company behind Myst and Riven, is creating a new game. It's in the same style as their previous games, but in a new world, with a new storyline, and in full 3D. It's called Obduction, and it looks amazing. I want this game.



I grew up playing the original Myst series, and I'd love to share a new experience like this with my children. That can only happen, though, if Cyan's Kickstarter campaign succeeds. They're trying to raise $1.1 million to help fund the game; right now they're a bit over halfway there. I really want this Kickstarter campaign to succeed. You should go contribute. Please, help out with this amazing project.

If that plea is not enough, though, let me give you an additional reason to contribute.

If you pledge $50 to the Obduction kickstarter, I will work one hour on whatever iOS or Mac software project you choose. If you pledge $100, I will work two hours. If you pledge $500, I will work 10 hours.  This is far below my usual rate; it's a fantastic deal.

I'll review code, write unit tests, add new features, or fix bugs. If we can work out travel arrangements, I'll come give in-person trainings. (I live in Utah.) You can have me work on your own project, or on an open source project, or something else. I'm an expert in iOS and Mac development. I can also offer training on git, if that's of interest. If you have some other idea, send me an email and let's work something out.

How to pledge
Cyan doesn't actually have a $50 pledge level on Obduction. Pick any reward level below what you're wanting to pledge; once you've selected a reward level, you can add additional money to your pledge. Top it off to the next $50 increment. If you've already backed Obduction, increase your pledge by the amount corresponding to the work you want done.

Who am I?
I'm a developer on Day One, the best journal app for iOS and Mac. Day One for Mac was named Apple's Mac App of the Year in 2012. Right now it's the #15 paid app in the U.S. Mac App Store. The iOS app was one of 10 apps featured in the Apple's 5 Years of the App Store celebration in Summer 2013.

I have over 23,000 reputation on StackOverflow.com. I'm the author of CKRefreshControl, and HSImageSidebarView. I post lots of code-related stuff on Twitter (@bjhomer). I'm the one friends turn to when they need Objective-C help.

Of course, I have a full-time job and a family, so I have to limit my offer.  I will make up to 20 hours per month available to Obduction backers. These hours are available on a first-come basis. If you are interested, pledge your support to the Obduction campaign, then send me an email at bjhomer@gmail.com.

UPDATE:
The first month of work has been claimed! If you back Obduction now, I'll start on your work sometime in late November.

* Yes, this offer was inspired by Adam Morgan's offer to read film and TV scripts in exchange for Obduction pledges. I think it's a fantastic idea.

Caveats:
I can't work on anything that would directly compete with Day One, my employer. This should not come as a surprise to you.  I may turn down work for other reasons as well, but hopefully that won't be necessary.

Sunday, June 9, 2013

Anticipating WWDC 2013

WWDC 2013 is a little over a week away. We already know a few things; iOS 7 and OS X 10.9 will be unveiled, and iOS will be getting a visual overhaul. Here's what I'm anticipating.

iOS 7

  • Updated design.
  • Better inter-app integration. This will probably be based on the Remote View Controller technology used internally in iOS 6, but will probably not be as generic as allowing an app to expose any arbitrary view controller for presentation by another app. Rather, I expect we'll see targeted use cases: an app may be able to specify a controller to be used for accepting files from other apps, or to be used for providing access to files found in other apps.

OS X 10.9

  • Siri support and Maps apps
  • MapKit APIs for developers
  • Re-redesigned Safari web inspector. (You can already play with this in the Webkit Nightly; it's much improved over the Safari 6 design.)
  • Better full-screen app support.
  • The biggest question: What will it be named? Sea Lion?

Xcode

  • Modules, a new language feature designed to significantly improve compiler performance. Doug Gregor talked about this at the 2012 LLVM developer's meeting, so it's a fairly safe bet.
  • Big improvements for Auto Layout in Interface Builder. I'm not sure exactly what a better interface for Auto Layout would look like, but it's way too easy for constraints to get lots in the shuffle as things currently stand.
  • Lots of improvements to Xcode. I just don't know what they all are. Maybe enough to call it Xcode 5?

iCloud

  • Lots of talk about how they've fixed all the problems.
  • More ancillary services (Photo Stream improvements, etc.) 
  • No major feature changes to the developer platform; just lots of bug fixes.

Hardware


  • Spec bumps for MacBook Pro line. Haswell processors, longer battery life.

New Platforms

There are a lot of things pointing toward a new platform. The number of "To Be Announced" sessions on the schedule is a big one, and as I noted on Twitter, Apple's expecting a lot of people for some of those sessions. This screams "Big new thing that everyone's going to want to see". I'm hoping for third-party AppleTV apps, but there are the "iWatch" rumors too, so who knows. Regardless, I'll be very surprised if there's no new platform for third-party apps.


I should note that with the exception of modules in Xcode, I have no particular inside sources for any of the above predictions. I don't know anything. This is just based on rumors and my own feelings.

Monday, May 6, 2013

What AppleTV could be

People have been hoping for an App Store for AppleTV for a while. Every year before WWDC, we hear rumors of what might be happening on that platform.

I want to talk about what it could be.

Rumors about a Apple TV set talk about an app store for the platform. But if the new TV won't connect to your existing DVD player or cable box, nobody's going to buy it. You have to address this problem.

Home entertainment systems are terribly broken right now. Every new device you connect brings with it another remote control. Each one looks about the same; a number pad, some arrows, and a host of buttons like "Audio" and "Info" that nobody can really explain. They all connect to a custom on-screen menu, which never looks great and is different from every other device connected to the TV. It's a mess of inconsistency.

Imagine a new AppleTV. It has the same functionality as the current AppleTV, but on the back are a series of HDMI input ports. When you plug in your DVD player, a new "app" shows up on the AppleTV main menu for the DVD player. You open the DVD player app, and you can control the entire DVD player right from that app, using the same AppleTV remote you were already using. You plug in your Wii U, a "Wii" app shows up on the menu that lets the Wii interface takes over the full screen. There you are, playing your Wii on your AppleTV.

The AppleTV home screen becomes the TV's input selector. Instead of repeatedly pressing the "TV/Video" button on your remote, you just choose the input right on the AppleTV home screen. It's graphical and friendly, and your grandma can use it.

In order for this to work, the AppleTV would need to know what to display for each input source; each device needs a corresponding AppleTV app. For some devices (e.g. game consoles), this app would do little more than provide a home screen icon, and display full-screen video from the device. For other devices (e.g. DVD players), the app would implement two-way functionality with the device to allow the user to control it with the AppleTV app. Conveniently, the HDMI spec already includes a Consumer Electronics Control ("CEC") connection that allows for two-way communication; no additional cables needed.

When a new device is connected, the AppleTV would need to query the device to find out which app to install. Perhaps the device could return an App ID that the TV would install, or perhaps it would look things up by device model, just like how OS X installs printer drivers automatically on demand.

Even without a built-in App Store, if Apple could save me from the remote control explosion I have right now, I'd buy it. This would make the AppleTV the hub of the family room electronics setup. A built-in app store would only make it that much more popular, and I think that's coming too. Imagine, the next Nintendo or Sega could simply ship dedicated controllers that connect via Bluetooth, and have no other hardware costs. You could build an entire platform on AppleTV.

Apple has an opportunity to build an entirely new platform. I hope that's what they're doing.


Of course, you could do most of this with a set-top box as well; it doesn't need to be a full TV set. You'd just have to increase the size of the box a bit to handle the various inputs. But you'd still have to deal with the TV's input switching mechanism, volume control, etc; I just don't think it would have the same appeal.

Tell me what you think; I'm  @bjhomer on Twitter