Notes on the ASUS Transformer’s file system / partition layout


rootfs on / type rootfs (rw,relatime)

# physical
/dev/block/mmcblk0p1 on /system type ext4 (ro,relatime,barrier=1,data=ordered,noauto_da_alloc)
/dev/block/mmcblk0p7 on /data type ext4 (rw,relatime,barrier=1,data=ordered,noauto_da_alloc)
/dev/block/mmcblk0p2 on /cache type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)
/dev/fuse on /mnt/sdcard type fuse (rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other)

# special
tmpfs on /dev type tmpfs (rw,nosuid,relatime,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)
tmpfs on /mnt/obb type tmpfs (rw,relatime,mode=755,gid=1000)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
tmpfs on /Removable type tmpfs (rw,relatime,mode=755,gid=1000)

/dev, /dev/pts, /proc, and /sys are normal Linux stuff. I’m not familiar with /dev/cpuctl or /sys/kernel/debug but they are fairly self explanitory! Whatever /mnt/asec, /mnt/obb, and /acct and numerous other things are explained briefly in /init.rc; poking around /acct is interesting. The tempfs on /Removable pretty much just serves as a place to put mount points for external media, i.e. MicroSD / SD cards and USB drives. The mmcblk device is clearly responsible for the most important parts of the Android system: /data and /system are your air and water. Under /data, you will pretty much find all your apps (stored on internal memory), and in /system, well, stuff that helps make your system work; d’uh. /system and /data can probably be looked at as read-only and read-write portions of the Android File System Hierachy, I guess. As far as mmcblk itself is concerned, it’s just the internal memory card. The thing that I find rather interesting, is that the user storage area (/mnt/sdcard -> /sdcard), or what everyone typically interacts with, is provided through some type of relationship to FUSE, as opposed to directly through mmcblk0. This is curious enough to me, that I would consider poking around further, or even digging closer into ROMs for the Transformer, to be worth the effort. Yeah, I’ve just got to figure out how crap works, lol. On the upside, I know better than to disassemble my new “Stable” system and I’m to cheap to get one just for testing puposes.

com.google.process.gapps force close on my ASUS Transformer – solved

This isn’t an issue I’ve encountered before but since last night, I’ve been getting these. Very regularly. Today, I noticed an association between this and using the web browser.  Sure enough if I went into Settings -> Accounts & Sync -> that Google account; and unchecked “Sync Browser”, it stopped. Like wise if I toggled it back on, it would rapidly force close.

Being more scientific, I toggled sync on/off for some other Google services without getting any force closes. Problem therefore became, how to fix this?

Android apps generally store their data under /data/data/package-name; where typically /data/data is your internal memory and package-name is a Java dotted package name like com.android.browser; that’s just how it is I’m afraid. Inside, I noticed nothing very interesting. Mostly an XML file related to settings and some databases. This is a Good Thing ™ except Fuck Your Life if you want more stuff on your memory card; unless you get hacky with mount points and linkages that is. Now, being frugal, I created an archive of this data folder (com.android.browser) from my root shell, then went into Settings -> Applications -> Manage Applications -> All -> Browser, force closed the browser and hit clear data. Problem solved.

Being of the SQLite3 varity, I’m sure I could splice anything of interest out of the backup back into the new Browser setup, but I’d rather get more done. An advantage of the important parts being either in cloud (book marks) or brain (passwords, etc), is the lossage is minimum. If anyone has more data on what causes it to go wonky, or on com.google.process.gapps in general, I’d be interested in your comments.

Someday I really would like to get myself a git checkout of the Android source, but I think I will wait until after Ice Cream Sandwich for that.

Web apps or native apps?

On the desktop, I will generally opt for using a web site over an application where possible, except when an application is seriously more convenient. For example, at home I typically rely on webmail and forgo using a local client; at work the inverse is true. GMail is one of the best ways to do e-mail :-).

When it comes to e.g. Android, I will often opt in favour of a decent app, over the web version. Apps generally have less overhead then rendering a desktop-oriented website, heavy on JS and meant for the mouse, yet mobile apps sometimes suck compared to websites; mobile or web version. When it comes to Google stuff, I use the apps. The mobile versions (at least on my TF101) are fairly similar to the mobile apps. The desktop *<b>web</b>* versions are best, but the Android apps are O.K. Contrast: the Facebook app has always been crap, compared to either version of the website.

The advantage of going web with it, is that the cloud auto-magically can solve a lot of little logistical problems. Like keeping data in reasonable sync, favouring search over storage, and removing the issue of “Maintance” — all you need to keep up to date is usually your web browser, once in a blue moon. It is even possible to have web applications that are aware of one another, although this is sorely under-utilized in reality, versus what can be done. Facebook stuff is probably at the forefront, in more ways then one (but not all of them awesome).

When it comes to using an App, you gain hopefully better Native Integration. On the desktop, not so much in my experience: stuff like Mozilla Prism and Chromes app mode just don’t cut it just yet, nor does the whole add-on/extension crapola. I’m talking a *<b>Real</b>* native application. Thunderbird versus GMail. Thunderbird will always have better integration with today’s PC environments than the GMail’s web app. Well, knowing Moldy old Mozilla maybe not always, but you get the point ^_^. The few exceptions that I’ve seen are products like Dropbox, where the native application _is_ the major selling point of the experience, and thus makes the cloud go round. It just happens to have a useful web user interface to boot.

Native applications open up a whole world for interesting savings and mangles. A good example, using an Android phone, you can have device local, mobile carrier, MS Exchange, Google, and Facebook contacts all synced even though they come from seperate providers; anyone could extend their service like this, fundimentally. That’s how stuff should be done. In some cases (Google, Exchange) it is even possible to have calendar data synced. The downside is that doesn’t get merged back into the Google-cloud, and that is probably a Good Thing(tm) even if I and others might like the option of it.

I think the web is one of the better interfaces for creating applications, if you want a UI that isn’t better mapped to command line programs. Android offers quite a nice programming model, and I assume that iOS and BlackBerry-land offer something sufficent. The world of PCs not as good.

Personally, I think in the future, we will see the evolving “Mobile” experience rise up and destroy both the PC and Web 2.0. The difference is, it will be Mobile 3.0 :-). Then this will all fade away until such a millienia that notions like PC, Mac; Desktop, Laptop, Phone; all of it fades away into being about as interesting as using cornkobs to whipe your ass instead of the three sea shells.

Given the choice, it’s obvious where I stand. But the real question is, does it run unix? 😛

In cleaning out a hard drive, I stumbled across a personal DokuWiki I was running. It has various stuff in it, ranging from stuff such as a guide to making Live Operations and tryout info. For momento’s sake I guess, since [SAS] was such a big part of my life, I’ve adapted the Service History part of my own wiki entry.

It can be found here.

After a day and a half, when my mother started to bug me again this morning, I decided I was getting out. So, packed my phone & Andrea in my pack, grabbed my open bottle of water, and hit the road. Picked a direction and followed it down the super highway. After some jackass nearly slammed me off with his inept driving, I picked another route, and danced down side roads, until I eventually ended up on a freeway bound for Stone Mountain.

So I spent the day huffing it up the mountain and then trying not to roll back down. Last time I was there, maybe early 2000s, we had taken the lift up to the top and back down. It was kind of nice to get to walk. I can’t help but wonder though, if the power cables being tied off along the trail was some penny pinchers idea of “Oh, we can route power up this way to the snack bar at the summit, then use it for the hikers too!” Just so they wouldn’t have to make a separate trail lol.

Definitely though, I prefer back woods over mountains!

Evernote sucks

Thumbing around the Android market, the Evernote app caught my eye again. So I decided why not give it a go, it’s probably the best note taking app for Android (and I admit, it probably is). Thus I installed the app, created an account, and went about setting up the Windows app for my desktop.

Last time I went searching for a note taking app, I settled on the Viki plugin for vim. I probably entertained a several dozen stuff, including Evernote. It never made it past the information gathering phase, since it lacks support for Linux and *BSD. Having adapted an ASUS Transformer as my primary system, Android support is now good enough. Evernote AFAIK is widely used and reasonably respected in the business of note taking software. No wonder—it’s about as useful as a notebook and a pencil.

I am not your “Joe” note taker, that I will admit. My notes are frequently pre-processed data. Things where re-parsing it back into my head and bringing order to notes is fairly important.

The desktop application failed glaringly as less than ideal support for:

  • Concept of sectioning is limited to font size/style and horizontal rules.
  • Structure is limited to indentation, bulleted lists, numbered lists, and tables.
  • Cross referencing data is primitive but effective.
  • Support for “Snippets” of formatted content is limited.
    • as in sample commands.
    • log data and program outputs
    • definition lists.

The Android tablet application despite the awesome user interface, suffers from all of the same plus the following gotcha’s when editing text notes:

  • Indentation is gone.
  • Adding links is gone.
  • Font styling is gone.
  • Adding tables is gone.
  • It’s to dismal a prospect to test how links, indents, font styles, and tables render when viewed in the app.

Simply put, ever note is more primitive a note taking system than Microsoft Word, and it’s only advantage of adding something like Dropbox or Google Docs to that mixture, is the sync feature. In fact this blog editor is much more powerful than Evernote, even more so because it can take raw HTML.

For a stress test to evaluate if I could tolerate life with Evernote, I tried to reformat one of my notes files from Viki by copy/pasting the content and adjusting. The note consists of numerous sections/subsections  (at least up to 3 deep) and various lists, links, and pre-formatted data; nothing you can’t do in raw HTML, LaTeX, etc. Or even plain text if you roll your own conventions as per org-mode or deplate.

After about 80% of the file, I  just gave up as it came to my mind that “Evernote is about as sophisticated as using a notebook of paper and a pencil, so why don’t I use that?”—It is just so far underpowered that I would get more value out of notepad.

Some could say that I’m being too strict, but hey, I am strict when it comes to software that I will spend *excessive* amounts of time using. If I really wanted to nit pick, I would mention the lack of folding, not that I expected that from an app focused on “Notes”.

A little fun with linpack

It’s a bench mark thingy for Android. Basically you push the single threaded or multi threaded button and it gives you Mega FLOP’age for solving some equations.

Running at a fairly idle load for just sitting at the end of my desk, my phone scored about 3 and 3 1/2 MFLOPs. Nice little Optimus T, and a device I know doesn’t have a lot of processing power in general. In fact, it only has like a 600Mhz CPU.

Now, Andrea on the other hand is running a full load: instant messenger client, client for our internal IM system, web browser, Samba, terminal environment (btep, openssh server, several bash, several openssh client connections, and a long running vim instance). Plus whatever is in the background, WiFi and syncs are on&mdash;plus TexTab is linked to my phone over Bluetooth. In short, it’s pretty much at a typical load for me. The results were about 30 and 50 MFOPS.

I really would be curious to take a freshly setup and stripped Transformer, and see how high that might go. AFAIK the best super computers top out near 10 Peta FLOPS and the most powerful x86 chips around 100 Giga FLOPS, and top notch graphics cards blow that away. I’m not sure I want to know what the various x86 chips I have laying around, but ~50 Mega FLOPS sounds good to me lol. Most stuff I saw on linpacks website seemed to range from 25 to 100, and often big gaps, e.g. while some people might rack up 80~100 MFLOPS most would get 60~65 MFLOPS.

What really impresses me though, is the “Experience” offered, I could care less about Floating Point Operations per Second but quite a lot about being able to *use* my system while under load. For years, Firefox+Flash was enough to almost overheat my laptop (and nearly did on several occasions, just with Firefox!), throwing on a compile would generally make me worry about my laptop halting and catching fire. Andrea on the otherhand, has been managing the same task set without even blinking an eye.

I can surf, chat, stream music, code, and compile without blinking an eye.

What somewhat irks me, whatever this Android tablet/netbook is doing in it’s architecture and with this ARMv7. It puts to shame any x86 system I have used….except for the development server at work, and that has  multiple multi-core Xeon processors and a shit load more of memory lol.

I really would love to try an ARM powered system in a desktop config. Maybe run Linux or OpenBSD, and try for something like the next gen processor cores and as much RAM as she will stuff. Hehe. Andrea is powered by a Tegera 2, so that’s basically a 1Ghz dual cored ARMv7, sans NEON, if I remember correctly.

Fun with tmux & dtach

Generally the problem with running a terminal multiplexer like tmux or screen on a remote server: is if the server goes down so does your session. Like wise an issue will eventually crop up where in you have to SSH into another server or even the box you’re sitting in front of, if you don’t want a seperate xterm in order to do it; thus losing all that multiplexer goodness.

Well, I pretty much run the session (tmux btw) on my system, and then use dtach for running things I may want to detach from&mdash;like a big compile. One perk of this is I get to have my “notes” window in tmux without double the latency.

Today, I was thinking about how can I link this notes window to various tmux sessions? It is possible to link windows (linkw) in a session and entire sessions (new -t {other session}) but that is not what I want. dtach again to the rescue! My notes script already amounts to opening my “Scratch” note file in vim, and changing the window name to “notes” if used in tmux. So I modified it to be smart enough to run vim in dtach, or reattach. Thusly, I can have tmux sessions by project, home, etc, and share the same vim session between them using dtach.

Note tacular!

A case for autotools that I have only recently begun to understand

Like just about anyone who has ever had to install software from source has, I have /used/ autotools before. But like many barely ever scratched the surface. Lately I have been cuddling up with the autotools from a developer perspective, a lot more. To the point perhaps, that I am liking autotools better than I ever thought I would. Like anyone whose used more than 1% of autotools, I know you can (or are supposed to when the developer did it right) be able to run configure/make outside the source tree. Also I know about –prefix and most of the usual configure script goodness. Now, it’s far from the first time that I have mentioned it, but my “Holy Grail” of builds has long been a multi-tree build:  one tree for build files, one tree for distribution files, and trees for whatever source and data files are needed. Then because I may be doing a diverse set of platforms, this usually becomes a need to further grind down into having co-existing build/dist trees: for example to have FreeBSD, OpenBSD, Linux, and Windows NT builds in the same working copy. Including using different toolsets, such as GCC 3.x, 4.x; and MSVC 9.0, 10.0 on the Windows NT builds. Now that my main computer is an ARM, processor architecture will probably end up mandatory. I like stuff like Build/platform/toolset. Hacks to keep this sort of thing working under {insert random OS here} should be kept to a minimum. How well a build system supports helping me with this problem (and file system hier) is one way that I judge build systems. Over the years, I have tried…just about everything except ant and maven but hey, how many C/C++ projects do you see using those at home? Multi-lingual stuff is always idea. At present, my favourite build system is premake4 — it makes setting up such a build pretty painless. After that is probably Qt’s qmake, since it makes compiling fairly painless. With the GNU build system, it is pretty easy to do something like:


$ cd Build/Linux/ARMv7/gcc44
$ ../../../../configure --prefix ../../../../Dist/Linux/ARMv7/gcc44
$ make install

Which would give something well suited for testing, and there is a config file to save whatever configuration options I usualy test with in $prefix. The check and installcheck targets also do what I will typically do with a `make tests` or a `./tests.sh` in my own working copy. To top it off, autotools probably has one of the best tools for making a distribution: make distcheck. I do not need most of what autoconf can do, and usually prefer to skip it. The ability to have things fail at configure rather than compile time is handy. Being able to e.g. toggle between Deps/{pkg} and the systems {pkg} at configure time is great and something I already do with premake4. Automake can also pretty much do what you could get out of not having to hand write Makefiles. What REALLY shines however is libtool! We have all cursed at something or other involving autoconf, automake, or libtool. But the little secret is libtool is one of the best assets ever given to a developer. If you don’t think so, you should try to alcomplish the same thing in SCONS for a solid week, just to support three platforms with differing toolsets, unless much as changed in a few years: the amount of kludges is a recipee to be pissed off. libtool can pretty much do it all and for a lot of platforms. The real question is how well autotools would really play with doing a Windows NT build with Visual C++. I’ve never tried that. That is also the principal reason I’ve never used autotools on most of my projects lol.

Your Vehicular Retardation is Showing Again

This morning on the way to work, at one of the side junctions I was fortunate enough to slip into the turn lane while the arrow was still green, but had to content with only a solid green light for turning left. In America that means YIELD to uncomming traffic. To top it off we had a cop dealing with an incident right where I’m aiming to turn. Thus I’ve got to wait on the cop and the oncomming traffic. It’s big enough a side road to have it’s own through traffic, thus a trio stacks up waiting.

The blowhard behind me starts beating his horn, because I won’t choose between getting slammed by oncomming traffic or running OVER a police officer. My response? Give mister retard a nice one fingered salute and wait until it is safe and legal to roll: without causing murder or car more wrecks.

So many people in this state should be ashamed to be on the road!