Working Copy makes my heart throbb

Working Copy is one freaking impressive feat of work.

One of my early bits of research into apps to solve less popular problems, was searching the app store for a Git client. Because I’m really more of a git and vim kind of guy than a cloud thing and browser based word processor kind of guy. On my old Tab S3 and on my Chromebook, it was easy enough to combine a git client and an editor to manage some repos, even keep a backup of some software projects for reference. Priorities being as they are, I started with iVim because muscle memory and most likely to freak out the fruity operating system. Combined with Pretext it gives me an editor I’m very familiar with, and a simple editor that matches what I’d want out of something neither vi nor emacs like.
After reading around Mac Stories, I decided to finally give Working Copy a whurl. I’m impressed, and I’m happy. Hell, judging by its user guide I could probably manage a nice local edit + git → remote build life cycle if I really wanted to.
For the most part, the software I use tends to be cross platform. E.g. developed on Linux, also available on Windows, cie; Android and iOS. And mostly the apps I use that are on both, are mostly the same on both. Except for the habit of iOS apps to use a scrunched landscape in portrait rather than going to a full screen view. Which is fine by me ‘cuz I’m a lazy git and have more than a few platforms to deal with.
Working Copy manages to be pretty native and runs with it all the way. You wanna know what my definition of professional grade, well made software for doing real shit would look like on an iPad? Well pal, Working Copy is now that definition, and what a damned stunning example it is!!!
Even more so, it appears to be feature complete enough that I don’t have to worry much. You see, I’m weird. I tend to like doing my work from the git command line client, and if I’m going to suffer a GUI then it’ll probably be git gui + gitk. And if Working Copy can’t do what I need to do, odds are I’d be running command line git regardless of the operating system, and probably quite out of my routine.
Something that makes me kind of happy about how native it is, is the file sync.
The way {App}/Documents is exported into the On My iPad provider as {App} is pretty nice. But doesn’t seem like the iOS Files stuff really has a concept of Unix style hidden files, so getting to .vim is a bit of a pickle.
Thus, I had Working Copy’s sync feature use On My iPad/iVim/vimfiles. Which for iVim, maps to ~/vimfiles. A quick :e ~/.vimrc and it only took a moment to get my stuff in order.
" For iVim on iOS.
" Working copy can sync my terryp/vim to ~/ or a subdir but not ~/.vim because iOS file goodies don't like dot files
" So let's use terryp/vim -> ~/vimfiles ala wintel.

set runtimepath+=~/vimfiles/
set runtimepath+=~/vimfiles/after
source ~/vimfiles/vimrc

Since Working Copy is trivially able to handle the submodules in my repo, which anger some GUI clients I’ve tried on PC and Android, all my stuff pretty much just works. Because my .vim/bundle gets synced to vimfiles/bundle like the rest of my stuff.

When someone makes an application as good as Working Copy,  we should all applaud. I know that I’m sure freaking happy! It takes a lot of work to make an application that great, and all to often when you find an application to scratch such a less popular itch, it can be hard to find a really great solution. Working Copy is one of those rare, great solutions.

Thoughts on Oracle v Google stuff

Or more specifically after parsing this, thanks Noles ;).

Personally, I think under that context, Oracle will likely win.  I do not believe that a language /should/ be copyrighted but that they technically can be, think about how the types involved might mix for various copyrighted works.

I’ll be the first to admit that our system for copyright, patents, intellectual property, trademarks, and the like is a maze with more than a few turns just full of bullshit. But let’s think a moment: what is it really about? Money. It’s not about fostering innovation (patents) or controlling your property (oi). It’s about money. That’s it, simple.

Java is a product and a creative work, sufficient to be copyrighted. So is the GNU Compiler Collection and that last book you read.

What is the jist of copyright? Wikipedia as of this writing, defines it as a sub class of Intellectual Property that is generally “the right to copy, but also gives the copyright holder the right to be credited for the work, to determine who may adapt the work to other forms, who may perform the work, who may financially benefit from it, and other related rights”

Java, as it applies to Android, is not very different than any other language applied to other systems. The devil is in the details as they say. An Android application is a collection of Dalvik bytecode, native code, and resources running under the Dalvik virtual machine: and Android provides a runtime.

The implementation is not “Java” as Oracle ships it. In fact, as Microsoft’s various efforts to make a .NET dialect of C++ and projects like JRuby confirm: you can have a fair bit of abstraction between *concept* and implementation. Android developers typically write code in Java to an interface documented in Java. They could just as easily write in any language you can eventually wrangle into Dalvik bytecode! Android applications can and have been written in other JVM languages, and non JVM languages. The interface, well hell, many things in the .NET world are done in C# but you could just as easily use Visual Basic or F#. Really helps to be able to read C# though. Just like how on many systems, it helps to be able to read C and or C++.

That runtime part that Android applications depend on is quite “Java like”. Many intrinsic components are provided. C programmer’s should think of the stdio library. Because that is the sort of thing that has been “Copied” from “Java”. Essential programming interfaces, not implementations but interfaces (as far as Oracle holds right to). GNU implements C’s I/O library in their runtime. So does Microsoft in their own. They didn’t have to supply crap like printf() and puts(), they could’ve supplied their own pf() and IoConsolePutLStr() functions! Nether group owes the other jack shit over that. But hey, printf() and puts() are what are widely used: even in other languages!!!!

A lot of things in Androids runtime are also unique. For example, the parts that make it Android specific rather than able to compile under Oracles development kits for PC. The implementation is not copied but the conceptual interface, yes.

So that’s a problemo, how far does that level of control and ownership apply to derivatives? And what actually constitutes a derivative work?

Is copying the script of a movie scene for scene, line for line, and reshooting it for your own release and profit, an issue? Yeah. Obvious. Is doing a movie about a train, going to allow whoever owns copyright on some other movie with a train, to sue your ass for it? It shouldn’t unless it’s close enough to the former, or similarly having a legal problem of some other sort.

It’s more of a question like, should Matz and Oracle be able to sue the developers of JRuby for copyright infridgement: because it provides an even stronger resemblance to both Ruby’s and Java’s programming interfaces than Android’s runtime does to Java’s. Things like C, C++, C#, Common Lisp, Scheme, and EmcaScript are formally standardized to some extent. Things like Java, Python, Perl, Ruby, and Lua are not. Could Niklaus Wirth (or Apple) have sued Boreland over Delphi?

I do not feel that it is responsible to exercise such strong-arm aggression against users. It’s bad for Java, it’s bad for business, it’s bad for the continuing evolution of the industry, and it’s bad for those who have already invested.

And as far as I am concerned, enough programming languages “Borrow” stuff that applications of copyright the way Oracle must be seeking, or not feasible—and may very well fuck up language development for the next decade. Now we have to worry what the fuck we name our classes? What next, companies are going to start exerting control over _our_ works made with their tools?

Thanks Oracle, hope your stock plummets and your employees find good jobs with businesses that offer better job security.

Titanium Backup + Dropbox HOWTO

I set this up today at long last (and assume most of it will apply to Box as well). Couldn’t find much use on how to actually make it sync, so here is a picture!

Go into your Preferences -> Cloud sync settings; and enable dropbox. You can go into Dropbox Settings to control stuff like what to sync and where to sync, etc. Then go to the “Schedules” tab and voila!

I don’t see what is so schedule about that, and I seem to remember reading that you have to do sync’s manually rather than on a schedule but whatever. Couldn’t find crap on Google, so I took a screenie ^_^.

Contemplating mutiny from Amazon to Google

Back in August, I rambled a bit about my thoughts on electronic books. Later on I acquired an Android tablet; about 4 x as much as a Kindle for the make/model tablet I purchased, but a hell of a lot more useful than a kindle or my netbook.

Since then, I have more or less established myself with getting books via Amazon. In fact, it’s the only setup I’ve been using these past few months. I like it and my only complaint is I find wish-list issues more useful from a real web browser. Since then the Cloud Reader has become widely available, so Linux/BSD issues are even pretty moot now. I like Amazon and use it for plenty but they may have just lost a customer.
Today I clicked through references to Amazon and Google Play and became angry.
Now Amazon rarely makes me angry, the worst they’ve ever done is hook me up with a seller that bungles tracking data, but hey, packages still got there and it was small stuff. So far as long as I don’t have to work for Amazon, it’s a good enough thing in my books. Up to now, if a competitor would offer a lower price: I would still buy the Kindle version, in order to keep consistency and not have to remember which app/platform I bought it from.  It also sometimes pisses me off that books I want are not always available in a Kindle edition, but that makes me upset with publishers, not Amazon! The price difference of $58.28@Amazon versus $69.42@Google isn’t /THAT/ bad, seriously. Although I will admit I usually find Amazon has much better deals on books that _I_ want, I have never seen this issue with Kindle books before.
Real Time Rendering is available in a Kindle edition but, I can only view it using the PC/Mac clients or the iPad client. You cannot tell me that dinky ass XGA screen on the iPad can display books better than my 22″/1080hd monitor using the Cloud Reader client, or my Android tablet with hit’s 10.1″/720hd screen. OK, I can understand it might not look sexy on my phones 3.8″/WVGA screen but still, wtf? Total steaming pile of stupidity right there. 
I want my content and I want it on all of my able bodied devices!
That discovery inspires me to jump ship and change my purchasing habits: to Google Play by way of Play Books. Once upon a time I thought about just going with whichever resource gave the best price, Amazon, B&N, or Google; Kobo I won’t trust with my $data after poking ’round there site. In practice though I found that having consisency like all my books either via Amazon, or physical books, was much more convienant than maybe saving $2 here or $5 there. Even for price differences between used real books and electronic books, because my shelf space is at a premium in the real world.
Looking at other books of interest, here’s a little break down:

`

Title Amazon Kindle Price Google Play Price List Price @Amazon Amazon Availability Google Availability
Real-Time Rendering $58.28 $69.42 $89.00 PC, Mac, iPad Web, iOS, Android, eReader
OpenGL SuperBible: Comprehensive Tutorial and Reference $28.59 $37.67 $59.99 Kindle, iOS, Android, Blackberry, PC, Mac Web, iOS, Android, eReader
Essential Mathematics for Games and Interactive Applications, Second Edition: A Programmer’s Guide N/A $47.36 $59.95 N/A Web, iOS, Android, eReader
3D Game Engine Design: A Practical Approach To Real-Time Computer Graphics N/A $66.36 $82.95 N/A Web, iOS, Android, eReader
Linux Kernel Development $17.69 $31.19 $39.99 PC* Web, iOS, Android, eReader
Understanding The Linux Kernel $29.79 $37.67 $59.99 PC* Web, iOS, Android, eReader

eReader in the above table is defined as what is described here. Amazon Availability is what’s listed on the web page, although I assume the OpenGL SuperBible would work with WP7 and the Cloud Reader clients too. Ones marked with a * say what is listed but e.g. can have a sample sent to my tablet, so I’d assume they work anywhere.
Loss of dedicated applications for Windows Phone and Blackberry don’t bother me, I don’t use either, and should have other means of accessing my content off these devices if I ever need to change. I’m also inclined to think that Google’s published policy on removals beats the shit out of Amazon’s track record. From the look of the help pages, Google also offers more natural syncing between devices, as long as you don’t have to resort to pushing files over Adobe/USB. So really the only gripe I can have is the when the price tag may be more drastic (like for LKD).

The Big Android Browser Test

There have been a couple of things on the net about various browsers, I’m sure, but certainly nothing comprehensive that I have found. Like wise, over @XDA in the Transformer forums at least, things tend to get muddled up after awhile from all the commentary.

So I thought I would install a shit load of browsers and do some testing! My test procedures can be found here.

It will take a while to do in my off hours and I doubt I’m going to get much done today, stuck home with the parental unit sick, so, I’m pretty much on butler call all day :-/. I’d rather be getting work done, like debugging yesterdays crap near interrupt free.

My summery of Android versions

  • 1.0.
    • September of 2008.
  • 1.1.
    • February of 2009.
    • General software refinements, which I’ll usually omit below.
  • 1.5 Cupcake.
    • April of 2009.
    • Third party (custom) keyboards are now possible.
    • We got widgets!
    • Bluetooth A2DP and AVRCP profiles (think stereo).
  • 1.6 Donut.
    • September 2009.
    • Voice I/O.
      • Voice input (Speach to Text).
      • Multi-lingual voice output (Text to Speech)
    • Apps can make their data available to search results.
    • Better support for gestures.
  • 2.0 – 2.1 Eclair.
    • 2.0 in October of 2009, 2.0.1 in December of 2009, and 2.1 in January of 2010.
    • Support for multiple accounts in sync.
    • Exchange account support for email.
    • Camera app sucks much less.
  • 2.2 – 2.2.3 Froyo.
    • 2.2 in May of 2010, 2.2.1 and 2.2. in January of 2011, 2.2.3 in November of 2011.
    • Dalvik VM gains Just In Time (JIT) compilation.
    • Exchange support becomes USEFUL.
    • USB and WiFi tethering. (Use your phone as a bridge between your laptop and your data plan.)
    • Now have the option to DISABLE mobile data.
    • Apps can now be installed to external memory (e.g. MicroSD card).
  • 2.3 – 2.3.7 Gingerbread.
    • 2.3 in December of 2010, 2.3.3 in February of 2011, 2.3.4 in ???, 2.5 in July of 2011, 2.3.6 in September of 2011, and 2.3.7 in ???.
    • Native support for SIP VoIP.
    • Selecting text to cut/copy/paste actually works.
    • Text input cursor can now be precisely positioned.
    • Ext4 replaces YAFFS(2) as standard file system.
    • Native support for more sensors; gyroscopes, barometers, etc.
    • NFC support.
  • 3.0 – 3.2.2 Honeycomb
    • 3.0 in February of 2011, 3.1 in May of 2011, 3.2 in July of 2011, 3.2.1 in September of 2011, 3.2.2 in August of 2011.
    • Notification bar moved from top of screen to bottom corner.
    • On screen software buttons (back, home, multi-task, menu, …) and the action bar.
    • View of recent apps can be snap shots (multi-task button) or existing icon view (long press physical home button).
    • Browser UI becomes more like Google Chrome.
    • Browser can now sync bookmarks with Google Chrome.
    • Apps are now commonly multi-pane, e.g. message list and message body on one screen.
    • More hardware acceleration.
    • Support for multi-core CPUs.
    • Encrypting user data.
    • USB devices now work as expected, e.g. flash drives, game pads.
    • Proper support for Bluetooth keyboards, gamepads, etc.
    • Stock launcher now allows widgets to be resized.
    • WiFi performance can be maintained when screen is off (WiFi locking).
    • Apps designed for small screens can be zoomed or stretched to fit.
      • this Android 2.2 feature is a really good thing and makes many reviewer’s complaints about Honeycomb less of a big deal for normal people.
    • Screenshots (or was this just a TF101 thang?).
      • Previously required a custom ROM like Cyanogen Mod.
    • Pasting integrated with 2.3.x selection UI.
  • 4.0.1 – Ice Cream Sandwich.
    • 4.0.1 in October of 2011, 4.0.2 in November of 2011, 4.0.3 in December of 2011.
    • Small screens get traditional (1.0-2.3.x) UI, large screens get tablet style (3.x) UI from Honeycomb.
    • On screen software buttons (from 3.x) now work on phones.
    • Stock launcher catches up to common features of custom launchers.
    • Access apps from lock screen.
      • Previously required custom ROM/UI (e.g. Sense; Cyanogen Mod).
    • Unlock your phone by taking a picture of your face.
    • New Roboto font.
    • Can now monitor data usage without requiring third party apps (or custom ROMs).
    • Camera app sucks less.
    • Basic photo-editing.
    • Much stronger NFC integration, alternative to Bluetooth data transfer.
    • Yet more work on hardware acceleration.
    • WiFi Direct, a form of Ad-hoc WiFi networking and bridging.

Dropbox 2.0 for Android: fixing your folder

I don’t get why so many people are pissed at this. The old folder location was at ${sdcard}/dropbox. This is really good for an app like Dropbox and I wish they would have kept it, but to be honest, it does technically belong in the new location of ${sdcard}/Android/data/com.dropbox.android/files/scratch. Although I would’ve used dropbox or cache instead of scratch but whatever.

Don’t like it? Well guess what, fix it yourself. Open a terminal emulator [0] [1] and do the following:



example# ln -s /mnt/sdcard/Android/data/com.dropbox.android/files/scratch /mnt/sdcard/dropbox

If you get an error about no ln command being found, you should install busybox and add it to your $PATH.

If you’ve got a real MicroSD card, you may get an error about the operation being unsupported (etc). In which case you either need root or you need to use a file system that supports symlinks. Which means probably reformatting your memory card as NTFS, or EXT4, or YAFFS2. Whatever your shit can read, because FAT32 is probably not going to support symlinks.


If you’ve got a device like my Transformer, that has an internal memory on /mnt/sdcard (${sdcard}), odds are the actual data is somewhere behind a FUSE shim, and is really stored at something like /data/media on an ext4fs partition. Easy symlinkage!

If none of the above makes any sense, you only no one tenth the power of Android and should have learned more about unix and Android, or maybe have bought an iPhone.

My word, if you’re not using Opera and it’s Dragonfly for web development, all I can say is Firebug users, eat your bits out.