Computable 1.1

in Updates

Computable 1.1 brings the following fixes and improvements:

  • Inline Python code completions and documentation are now available via the new, floating i-button.
  • The new Welcome Tour gives a quick overview of the most important features to new users.
  • Lots of users have emailed in that they would like to support me, but the in-app purchase still doesn’t work for them in 1.0.2. To fix this once and for all, I have added some code that clears out the cached information of any previous installations, and asks users to restore their purchase (if they have previously purchased Computable) by clicking a button. This will happen only once after upgrading to version 1.1 from a previous installation.
  • Fixed a bug with incorrect initial caret position in the Python editor.
  • No longer hiding the navigation bar in landscape mode to keep the navigation bar buttons accessible.

About Python Code Completions

Computable uses the jedi library for code completions and documentation support. Please note that Jedi may not always report accurate results. Also, jedi puts some additional memory pressure on the system. Still, I think this is an important step towards better usability.

About Dropbox Sync

Dropbox sync should finally work in all cases and both directions. The process works like this:

It all starts when you first import a file from Dropbox (via the Dropbox browser panel). At this point, the selected file gets downloaded to your iPad, and is from now on managed by Computable’s Dropbox sync infrastructure.

On the other hand, files that have not yet been downloaded to your iPad are not managed by Dropbox sync. So, if you add another file to the Dropbox folder on your Mac, it will show up in the Dropbox browser panel on your iPad, but it will not be available locally on the device until you select it in the Dropbox browser panel, thereby downloading it.

Thus, all that follows applies only to files that have already been downloaded to your iPad. To give you an indication of which files are locally available on your device, Computable shows downloaded files in black, and not-yet-downloaded files in gray.

The sync scenarios are now:

  • If you write out a new file on your iPad (e.g., by writing out a pandas DataFrame to a new file using to_csv), the file will get written to the local Dropbox folder immediately, and (up-)synced shortly thereafter.
  • If you modify an existing file on your iPad (e.g., by writing out a new version of a pandas DataFrame), the modifications will get written to the local Dropbox folder immediately, and (up-)synced shortly thereafter.
  • If you modify a file on another linked computer, the changes will be downloaded to your iPad immediately. The hatched status panel shows you when changes are downloaded.
  • If you delete a file on another linked computer, the deletion will get synced as well (i.e., the file will vanish from your iPad).

Coming up Next

I’m already working on version 1.2, which will bring a new, LaTeX-based Markdown rendering system, replacing the current HTML+MathJax one. The aim is to significantly speed up Markdown and TeX/LaTeX math mode rendering, with first tests hinting at a 10x speed-up.

Computable 1.0.2

in Updates

Computable 1.0.2 brings the following fixes and improvements:

  • Fixed a crash when sending a notebook with no email accounts configured.
  • Fixed a crash that could occur when moving cells.
  • Fixed a crash when deleting a notebook with an empty name.
  • Fixed the permanently disabled Dropbox navigation bar button.
  • Fixed missing Pandas module init function.
  • Fixed the backtick key on the Markdown keyboard.
  • Fixed several minor issues in the notebook UI.
  • Fixed incorrect image paths in the Aero03 notebook.
  • Improved IPython startup time (in exchange for a lengthier one-time setup).
  • Added dollar sign and backslash keys to the Markdown keyboard.
  • The notebook browser now re-sorts thumbnails to their correct order after changing a notebook’s name.
  • Output changes from the last cell execution were not saved when closing a notebook.
  • The caret no longer wraps around single lines when moved via the trackpad.
  • Slightly decreased horizontal sensitivity of the trackpad for more precise caret positioning.
  • Now showing the in-app purchase price in the purchase alert.
  • Now showing a loading message when creating or opening a notebook.
  • Reduced the download size.

A few notes:

  • There’s now a one-time setup step (“Building file cache…”) on first launch that should help improve IPython startup time after the first launch.
  • Dropbox (data) file import should now work. Don’t forget to link your Dropbox account in the settings first.

FAQs and Coming Up Next

in General

Here I’ll try to answer the most frequent questions, and give an outlook on what will come in version 1.1.

Frequently Asked Questions

“How can I sync Notebooks via Dropbox?”

Well, you can’t.

Apple does not allow apps (with embedded interpreters) to download any executable code from external sources. All code must be either bundled with the app (e.g., the sample notebooks), or created within the app. Since IPython notebooks contain Python code, they count as code, hence no notebook sync.

This is of course a huge limitation. Computable with notebook sync would be so much more useful. But I don’t think Apple will ever relax these restrictions, so there will probably never be notebook sync.

“What’s Dropbox sync for, then?”

For syncing input and output data files.

The intended behavior is like this:

  • Set up Dropbox sync in the settings panel. This will create an “Apps/Computable” folder in your Dropbox. Computable will now sync any files in this folder to and from your Dropbox.
  • When editing a Python cell, the import navigation bar button gets enabled. Tapping this button will open a Dropbox browser panel, where you can browse the directory structure inside the “Apps/Computable” folder.
  • Selecting a file in the Dropbox browser will insert the Dropbox-relative path at the current cursor position. This way, functions that accept input or output filenames can read or write to your Dropbox folder.

Note: I just found that this doesn’t work at all in version 1.0.0. Sorry, I will fix this in the next update.

“Again, why no code import? Other apps do this as well.”

Many users have asked “Other similar apps offer a way to import code, why doesn’t Computable allow that?”

As I understand it, these apps are violating Apple’s Developer Program Agreement. Here’s the relevant excerpt from the iOS Developer Program License Agreement, Section 3. Your Obligations, 3.3 Program Requirements (emphasis mine):

“3.3.2 An Application may not download or install executable code. Interpreted code may only be used in an Application if all scripts, code and interpreters are packaged in the Application and not downloaded. The only exception to the foregoing is scripts and code downloaded and run by Apple’s built- in WebKit framework, provided that such scripts …”

To me, that’s a pretty clear statement. If code is bundled with the app, that’s Ok. Code injected into an app from any external sources is not Ok.

And a little further down in this document, in section 8. Revocation:

“You understand and agree that Apple may cease distribution of Your Licensed Application(s) … at any time. By way of example only, Apple might choose to do this if at any time:

… (e) You breach any term or condition of this Agreement or the Registered Apple Developer terms and conditions;”

There’s absolutely no technical barrier here, I could implement notebook sync in just a few hours. I would just fear that section 8 would be enforced by Apple should they find out that Computable allowed some way to import code.

To summarize: I could easily implement two-way notebook sync, but I’m just not allowed so.

“What does it cost?”

Ten bucks. More precisely, the app is free with in-app purchase. The free download will let you open, edit, and and run the bundled sample notebooks, to give you an idea of how the app works and what it is capable of. To create your own notebooks, you will have to make an in-app purchase of $9.99, however.

Note: As mentioned in the previous post, I totally screwed up the in-app purchase process in the initial release. Computable 1.0.0 comes fully unlocked. The next update will bring this back to the intended behavior.

Coming up Next

Computable 1.0 is a minimum viable product in many respects, lacking convenience and features in many places.

For Computable 1.1, I plan to improve in the following areas:

  • Code editor improvements: Right now, the Python code editor is merely a text view with syntax highlighting. This definitely needs improvement. For 1.1, I plan to build at least code completion into the Python editor, and possibly some other convenience features as well.
  • Faster notebook rendering: You will have noticed that notebook rendering is pretty slow right now. That’s because the Markdown rendering is HTML-based at the moment. Markdown markup gets translated into HTML, which is then rendered in a web view. TEX and LATEX are handled by the same web view, via MathJax. I intend to get rid of both, and introduce a native TEX renderer instead. I’ve already started work on this, and it looks promising.
  • Stability improvements: Right now, I have about 20 crash logs sitting in my inbox. I will try to fix as many as possible of these for the next version.

I don’t have an estimate yet for the availability of version 1.1. I will ship it when it feels ready.

In the short term, a bugfix-update 1.0.2 addressing the most frequent crashes will be released soon.

Note: This post will probably be updated from time to time, should new questions arise.

Computable Hits the App Store (With a Surprise)

in Screw-Ups

Computable had its debut on the App Store today, and many of you may have been mildly surprised about the apparent complete lack of feature restrictions.

So was I.

Only not exactly mildly.

The first tweet I read this morning for breakfast started with something like “I can create notebooks, yay!”. These few words were enough to come to the realization (not with the dramatic, slo-mo-esque quality of glaciers dropping large piceces of ice into the north sea in spring, but rather with the uneasy eye-blink of a rabbit facing a pair of annoyingly bright Xenon-filled electric discharger devices approaching at significant speed) that something had gone terribly wrong, and what exactly that was: I had submitted a completely unlocked version to Apple without realizing.

So, I had screwed up. Big time.

Had I been connected to some heart rate monitoring device at this point, it would have detected a strange absence of heartbeats for a rather significant period of time, followed by an equally strange phase of random bursts of cardio-vascular activity. How I managed to not drop the mug at this point remains a mystery to me.

After recovering my heart rate to a steady 180bpm again, I prepared an update, which would bring in-app purchasing matters to a nice and orderly state again. Trouble is, the update will take about four to five days to pass review. So, the not-quite-exactly-planned-for-as-such release promotion is still up. Grab it while it’s free!

PS: Later that day, I realized that this was one of the moments I enjoy being self-employed, because there would be no boss come running to bite my head off, quarter my corpse, and dump the remains into the nearest steel mill.

PPS: I will try to answer any tweets or emails tomorrow. Sorry, had a sightly unnerving day today.

PPPS: If you really, badly want to give me your money, you can do so by deleting Computable 1.0.0, and installing version 1.0.1 once it becomes available. If not, that’s perfectly fine as well.

Computable 1.0 Submitted to Apple

in General

Computable 1.0 has just been submitted to Apple for review. Thanks to all beta participants who submitted bug reports or contributed feedback.


in General

Welcome to the Computable Blog. On this page, you will find news and upates related to Computable.

About the beta

Wednesday evening, I announced the upcoming release of Computable on the IPython developer mailing list and on Reddit. I wanted people to know about it, and gather a handful of beta testers. Like, ten or fifteen.

Thursday morning, I had about 150 unread emails in my inbox, and more mail trickled in at a rather rapid pace. I answered all of them, inviting people to join the beta. At some point, however, I had to start rejecting people, because I have only a very limited number of slots (100, to be exact) available for registering test devices. If you emailed in but got rejected, sorry, it was simply because of a technical limit outside of my control.

The rather casual announcement has received a tremendous amount of interest I did not expect. Within the first 24 hours after the announcement, the website has seen about 8000 unique visitors.

Now, the first beta feedback has started to come in, and I’m currently answering emails, staring at crash logs, and triaging bug reports.

When will it be available?

I’m aiming for early July.

What will it cost?

Ten bucks. More precisely, the app will be free with in-app purchase. The free download will let you open, edit, and and run the bundled sample notebooks, to give you an idea of how the app works and what it is capable of. To create your own notebooks, you will have to make an in-app purchase of $9.99, however.

For the press

I will put together a press kit with a press release and product screenshots in the next days.