Understanding Twitter

Newsgroups, forums, blogging, Facebook, Google+, etc are all things that I understand fairly well. Twitter less so for me, as it’s not a service that I ‘use’. Some people I know use Twitter but mostly it’s just businesses and marketing, and I don’t care about any of the businesses I like that much to listen; so I’ve little use for the service.

Viewing someone’s tweets reads off like a list of short messages, similar to the blog model (e.g. like a Wall post on Facebook) which almost everyone understands these days. But it includes the users comments inline, along with their comments (replies) on other peoples posts (tweets). In a way, it is coser to the newgroup/forum model where in you have a node that fits into a ‘thread’, yet the head of the thread is just a normal post (node). In the blogging model, it’s somewhat different because of the emphasis on the blog comment.

This makes it rather disconcerting to look at tweets for the initiated. From first glance, it’s like listening to a twittering bird that not only talks to the open air (hello you Facebook mob!) but also to its imaginary friends. By clicking the tweet (look for the icon top right) you can see the thread and explore the relationship between tweets. It’s a decentralized version of how forums work; instead of defaulting to viewing by topical thread, your default view is by the user.

If that last paragraph makes sense, particularlly the last sentence: you now understand Twitter. Or I’m missing something lol.

What remains to be seen until the course of history has advanced much further, is whether or not any given model (newsgroup, blog, twitter) will become the universally accepted model of communication on the internet. Twitter is a leg up over using a mail client that doesn’t do threads (eww) but I personally prefer the newsgroup model, but profese, twitter is an interesting data model for machine processing to whatever corporations will do to profit from that data model.

Definitions:

Newsgroup model
Someone starts a topic, other people reply; replies and topic starts are all the same thing (posts) but things are usually collated into “Threads”. Examples include USENET, mailing lists, and forums.
Blog model
Someone blogs an article, other people comment; comments are distinct from the content and may be deemphasized depending on the platform. Examples include Blogging and Facebook.
Twitter model
Someone tweets a short message, other people may publically or privately reply . All nodes are equal and connected as in a shared thread, but are collated by “Users” rather than threads.

For Fails Sake!

I just noticed in Comcast’s account page, appropriately they note the default address, username, and password to login to the web interface for setup of the particular wireless router in question. However…the scary thing is they encourage you to connect using the default SSID and the network key printed on the label (hopefully not also out of a can….), skipping any need to use the web interface what so ever.

Right, let me paint you a picture. Joe & Jane Luser, don’t know squat about routers. Most people don’t even if they know how to use computers well beyond average (but it’s not that hard). The label says skip the rocket ma-science setup smetz up and just plug it in, connect to this network name and type in this password…you’re done! The Lusers are probably so inept, they even put the label on the router just in case.

Now, let’s say they have a neighbor help fix a computer problem someday and she notes the label. Sometime later they piss her off, so she connects from her apartment, logs in with the default, and locks the Lusers out. Or maybe does all sorts of nasty shit; winning!

It’s probably a good thing that routers rarely default to allowing remote administration, so at least the SSID/Key are there…but that isn’t good enough that I would want to bank on it. And trust me, if someone gets deep enough into your network, you can be banking on it.

Thoughts of modal/semi-modal editing on Android

In regards to modal, I mean `like vi`, where in the keyboard is shifted between a normal “Command” mode for manipulating text and an “Insert” mode for typing text into the buffer. A prime example can be found by learning vi (or vim or elvis). Personally I think this kind of model fits well with a mobile device like Android, even more so than it does a PC—emacs pinky be damned ;). Which makes me think of something like this:

  • A simple “Notepad” grade editor
  • Press a designated command key, send following keystrokes to command dispatcher
  • Useful stuff: save/load, buffer list, etc.
  • Scripting/configuration language

Something uniquely respective of my vi/vim heritage, yet incorporating lessons from the emacsen school. As a former XEmacs user, I do know quite well that my beloved Vi IMproved is not always well subverted. Using the volume up/down keys (and settings to rebind ofc) would make perfect replacements for Control and Meta (Alt/Escape). Using a keyboard with suitable keys, obviously eliminates this: and for on screen work with a big enough display, I really have to reccomend The Hackers Keyboard. It is an interesting preposition, at least. For scripting language, that one is a stickly wickly one. Android is not well suited to this in the conventional sense. Unless you want to implement one in a suitable subset of Java (double barf). An interesting idea would be to compile something like Lua or a Scheme interp’ to native code, and communicate with it using some type of local socket and RPC. That might be interesting to toy with. Then perhaps, “Plugin-lets” that add useful tools, such as busybox or git. That’s less feasible but certainly interesting.

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? 😛

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”.

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!

An interesting idea for Android development

I could hook up my rooted phone to my netbook turned server, write the code using my ASUS Transformer, then run a batch job over SSH that compiles and installs the app on my phone.

Then connect to my phone via VNC and test it off the same Transformer 🙂