musings between the lines

there's more to life than code

url stats extractor

| Comments

I started writing this as a development post, but it turned out to be way too long and detailed. I wanted an announcement and short description post instead, so here we are. I’ll do the separate development post later.

a waht?

URL Stats Extractor: A Chrome extension to show the stats and relevant information about shortened links.

For the first release, the extension supports the goo.gl shortener simply because that’s the shortener of choice for me at the moment. Perhaps once I get the basic abstraction down (which this first release lacks), I can start to add other services like bit.ly and so on.

why?

Well, because I can and because I want to. I’m sure there are a dime a dozen of these out there, but this exercise wasn’t just about the convenience of knowing the stats of a shortened URL. This exercise was done to get myself to start coding an extension and see where it leads. So yes, it’s been done before, but I haven’t done it yet, so here we are.

I also wanted to get my hands dirty with git and GitHub since I’ve been meaning to pick up a modern SCM system, so that’s also my reason. I hope it’ll be a fun work in progress that, as time passes, can be tinkered with to add new and interesting functionality. At worst, it’ll get me a little more versed with chrome extension programming, git, and brush up my javascript skills.

where?

I’m pushing this to the official Chrome Webstore, as well as to GitHub, so you can either use it, fork it, or abuse it in whatever manner you see fit.

feedback

Yep, let me know what you think, what’s broken (there’s a lot), what would be neat to do with it. Fork it, pull it, do what you like with it.

It’s very raw at the moment since this is essentially a very quick hack (though it took me a bit of time to clean it up for GitHub). The plugin works decently with static pages, but dynamically loaded pages wont work since the plugin currently doesnt detect new content and it doesn’t periodically rescan. It’s also not going to do much for content with no hits since the dataset returned apparently isn’t compatible… need to tweak that. The display is a little ugly; more on that once the development post goes up.

Enjoy. Go break it.

git cheatsheet

| Comments

git

It’s high time I started to integrate myself into the external world of programmers. This means breaking away from my old habits and trying to learn some of the new and accepted habits of programmers. I’ve used systems like SVN and even briefly CMVC before, but they’re all been a bit tedious. I did have a brief stint with casual use of Hg, which I found quite pleasant. But seeing that atm, GitHub is the cat’s meow, I figured git should be on my list of things to learn. Namely so that I can start using it for my personal projects, which implies I’ll be starting some personal projects. Yeah, I think it’s been enough time that I’m beginning to get that programmer’s itch.

Cheatsheet

So, git’s pretty popular and there are dime a dozen tutorials out there so this isn’t a tutorial by any means. There are also quite a number of cheatsheets out there for git, so this isn’t really going to be a comprehensive one of those either. Instead, I’m going to use this space as my workbook of git commands I find useful that I need to keep in mind. It’s a conglomeration of information, as I learn it, from various sites:

  • git Book : Online git reference manual, you can also get the ebook for free. See the sidebar on the book page for more versions. Used it for the server setup reference.
  • Try GitHub : A nice interactive way to start, but really, only good for the pure basics
  • git Immersion : A pretty good lab series to help get you up and running to perhaps an intermediate level
  • Think Like a git : Good intro to the graph theory of git. Makes understanding git a bit easier. Plus basic to intermediate examples.
  • The Thing About git : Some nice tips on handling some complex sounding merge issues.
  • git Cheatsheet : Looks like it has most of the commands you could want. Now I just need to learn them…
  • git Ages 4 and Up : The information in the video is good, but the presentation is much to be desired. It’s nice that it’s casual, but the details can get a little lost. I do like it for the way it showcases how git works in the background with all the staging and branching. Good for a conceptual understanding of git.
  • git Bootcamp on GitHub : Some good, quick tutorials
  • Git Magic : An all purpose reference for git.

As time passes, I’ll add more to the list as those commands become relevant to me. But for now, these are the ones I’m thinking should be useful for what I want to do:

Setup

  • git config --global user.name "<public name>" : The name to associate with your commits.
  • git config --global user.email "<public email address>" : This email will be visible to everyone sharing the repo.
  • I had to remove these from the .gitconfig file as they interfered with being able to add a minimized jQuery to the repository. So use at your own discretion and YMMV.
    • git config --global core.autocrlf input : Line endings. Set to true for Windows users
    • git config --global core.safecrlf true
  • git config --global credential.helper cache : Cache your credentials (defaults to 15 minutes) for https:// git URLs
    • git config --global credential.helper 'cache --timeout=3600' : Cache for 1 hour instead
  • Add these to your ~/.gitconfig file for some alias access to common commands. [alias]
    co = checkout
    ci = commit
    st = status
    br = branch
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
    type = cat-file -t
    dump = cat-file -p

Setup - GitHub

  • GitHub is a great place to start experimenting with git. They have their setup page which is useful to get up to speed quickly. If you’re on Windows or Mac, there’s a native GitHub client which can handle everything for you. If you’re on Linux, apparently you’re a command line ninja so no GUI for you. That’s a shame, especially considering Linus uses git to host the Linux kernels so you’d think Linux would be a popular enough platform, especially for developers.
  • I’m using the https protocol to clone/push to my repositories. Perhaps I’ll try out the ssh protocol at some point in time, but I can live with having to input my password once in a while. It’s not like I push that often, and there’s also a cache so when I do, I only have to redo it every once in a while. The git protocol is only really for read only as it’s not secure for transmitting passwords.

Initialization

  • Starting a new project locally
    • mkdir <newprojectname>
    • cd <newprojectname>
    • git init : Sets up the initial repository. Call it in a new directory you want to turn into a git reop.
  • Connecting a local project to a new project on GitHub [source]
    • Assuming you went through the GitHub repository creation process and told it to automatically generate a README and/or LICENSE file for you:
    • From your local repository:
      • git remote add origin <url to .git repo>
      • git pull origin master to pull the bare files from GitHub
      • git push to push your local content up to GitHub (origin master)
  • Copying a project from a remote repository
    • (project directory will be created for you)
    • git clone <url to .git repo> <optional local directory name> : Downloads the entire remote repository so you can work on it locally.

Basics

  • git status : Show the current status of modified files, staged files.
  • git add <filename> : Adds the file to staging.
  • git rm <filename> : Removed the file from git and filesystem.
  • git commit -m "<message>" : Commits files in staging with message.
  • git commit -am "<message>" : Add files that have been modified and commits.
  • git commit --amend -m "<message>" : Amend to previous commit (rolls it into one).
  • git log : Show history.
  • git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short : Pretty version.
    • git hist : Aliased version (see .gitconfig setup above).
    • git hist --all : Show history for all branches.
  • git checkout <hashcode/tag/branch/etc> : Use this to move to a certain commit.
  • git checkout master : Move to the most recent version.
  • git tag <tagname> : Tag a commit with a specific name.
  • git tag -d <tagname> : Removes the tag with the specific name.
  • git checkout <tagname> : Checkout the version right before the tag.
  • git tag : List all the tags.
  • git remote : Shows remote associated repositories. “origin” is the parent repo.
  • git remote show <remotereponame> : Shows information about the remote repository.
  • Cloning a git repository:
    • This should be done from one directory above your repo
    • git clone <sourcereponame> <targetreponame> : Clones only the master branch of the remote repository (omit <targetreponame> to use the default name)
  • “Download” a remote branch:
    • git branch -r : List the remote branches. Find the one you want.
    • git branch --track <localbranchname> <remoterepositoryname>/<remotebranchname> : Clones a specific branch

Intermediate

  • See the differences in files
    • git diff : between what’s in git and the working directory changes.
    • git diff --cached : between what’s in git and the staged changes.
  • Move a file to a new directory:
    • git mv <sourcefile> <targetdirectory>
    • or
    • mv <sourcefile> <targetdirectory>
    • git add <targetdirectory>/<sourcefile>
    • git rm <sourcefile>
  • Switch to a branch:
    • git checkout <branchname>
  • Create a new branch with the specified name:
    • git checkout -b <branchname>
    • or
    • git branch <branchname> : Create it
    • git checkout <branchname> : Switch to it
  • Merge branches: Preserves commit history. Good for distributed projects.
    • git checkout <branchname> : Checkout the branch
    • git merge <anotherbranchname> : Merge target branch into current branch
  • Show branches
    • git branch : Shows branches
    • git branch -r : Shows remote branches
    • git branch -a : Shows all branches
  • Rebasing: Compacts the commit history into something more streamlined. Short branches that really didnt need to be branches
    • git checkout <branchname> : Checkout the branch
    • git rebase <anotherbranchname> : Rebase target branch into current branch
  • Updating new content from a remote repository.
    • git pull : Default pulls from “origin/master”
    • or
    • git fetch : Fetches changes from the remote origin, but does not move HEAD, no commit, no merge.
    • git merge <remotereponame>/<remotebranchname> : Like “origin/master”

Advanced

  • Create a bare repository.
    • git --bare init : Creates an empty, bare repository on a server for others to push and pull from.
    • git clone --bare <sourcereponame> <targetreponame>.git : Creates a bare repository meant as a central hub for sharing.
  • Add a remote repository
    • git remote add <remotereponame> <remoterepository>
  • Add a new git repository to an existing local project (without an existing remote repository)
    • git remote add origin <git url> : Where git url can be git@<hostname>:/path/to/repository.git
  • Set the newly added remote repository as the default (or you can change origin/master to whatever source/branch you need).
    • git push --set-upstream origin master
  • Remove a remote repository.
    • git remote rm <remotereponame>
  • Change a remote repository [source]
    • git remote set-url origin <remote git url>
  • Push commits to a remote repo.
    • git push : Pushes commits across all branches
    • git push <remotereponame> <remotebranchname>
  • Moving a section of a repository to a new repository [source]
    • source: git subtree split -P <name-of-folder> -b <name-of-new-branch>
    • target: git pull </path/to/big-repo> <name-of-new-branch>
    • source: git rm -rf <name-of-folder>

Tips

  • To undo changes to a file you’ve made:
    • git checkout <filename>
  • To undo a file sent to staging (via add):
    • git reset HEAD <filename> : To remove from staging
    • git checkout <filename> : To revert the changes
  • To undo a commit (by making a new commit from a previous commit):
    • git revert <HEAD/hash/tag/etc> : To revert to the commit state
  • To undo a commit (by removing the previous commit):
    • git reset --hard <hash/tag/etc> : To reset to the specified commit state

Did I miss any that are useful? Anything wrong with the above? Better tips? Let me know :).

Bonus - Contributing via GitHub

  • On GitHub, fork the project in question. You now have your own copy in your own repository.
  • git clone your new repository locally.
  • git remote add upstream <original repository url> to treat the original repository as a master too.
  • If you want to pull changes from the original, got fetch upstream to get the changes and git merge upstream/master to merge them into your new code.
  • Work on your project and do the changes you want.
  • Do the usual git add ., git commit, and git push origin master (which will push the new code to your forked repository on GitHub)
  • Once all your changes are in your forked repository, you want to create a “Pull Request” so that the original repository owner is notified of changes you want to merge into their repository.
  • Just follow these GitHub instruction to create a pull request.

Bonus - GitHub SSH connection

  • Basically, read through this.
  • It’ll be useful to have this set if you want to use it with Maven. The relevant maven <scm> is:
<scm>
    <url>https://github.com/[github name]/[github project]</url>
    <connection>scm:git:ssh://github.com/[github name]/[github project].git</connection>
    <developerConnection>scm:git:git@github.com:[github name]/[github project].git</developerConnection>
</scm>

Bonus - Server Setup

Sometimes, you just need your own git server running privately for one reason or another, say for a stealth project :). I’m not going to go into detail with the setup since the Git Book does a great job of running through the steps needed to get it working.

The one note to this is that once you initially push your current repository to the new server, I cant seem to make just git push work. Instead I have to fully specify it as git push origin master. The solution was to just pull a clean clone of the newly minted central repository. I’m not quite sure why, and I’m pretty sure there’s some configuration trick to make git push default to git push origin master.

Update to the above. To set origin master as the default for git push:

git push --set-upstream origin master

Of course, you will have to set the remote repository first. But that should do the trick.

This was another post that evernote ate. this one isn’t a creative post so a rewrite didnt really make it any better, though I guess I relearned the material as I went through recollecting notes to post.

facebook filtering

| Comments

Facebook

Facebook recently updated their Edgerank content filtering system and turned it up a notch to be a little more aggressive in filtering out content. The goal it seems was to help people manage the influx of content coming from their stream and reduce it to the ones that have the most relevance to them (via previous interactions, likes, ignores, and so on). Unfortunately, I don’t think that it’s as altruistic as it seems, especially considering that content publishers can increase their stream potential by promoting their post via a payment to Facebook. In essence, Facebook instituted a paywall for their content, or your content. It’s almost a no brainer strategy to make some cash flow out of a fairly captive audience, especially for those that don’t use other networks like Twitter or Google+ (hint hint, diversify!).

It’s good that it wont affect end users so most may not even notice that they may no longer be getting all the posts they had previously gotten. For some, like Robert Scoble, it’s a welcome relief to filter out the noise. I’m a little more in George Takei’s camp (who does not like it), but more for the reason that it just doesn’t seem like the right thing to do from a user experience point of view. Facebook seems to have conceded and adjusted it a bit.

Filtering

I’m all for filtering. In fact, I’d love to be able to nicely filter content from most of my streams in a way that doesn’t require too much effort. I don’t necessarily mind that Facebook or Google+ or Twitter may automatically do it for me, however, I want that concept to be my decision. I want the ability to opt into this type of filtering, and if needed, apply it only to certain segments. If this isn’t being done, there’s a fine line that gets crossed. In fact, there’s a lot of fine lines that get crossed.

Non user initiated content filtering is pretty much a form of data hostage taking. Combine that with monetization like Facebook is doing, and you’re suddenly into a subtle form of blackmail. Pay Facebook, else your posts wont show up in the user’s stream, even if the user has done nothing different and is even expecting them. That’s just not the right thing to do. I’ll be completely OK if they had decided that publishers that pay money can have promoted content show up in my stream (ala Twitter), provided I can keep my stream as is. It’s a free service after all, so I know they need to try something. Or even to create special areas where these posts can appear. I mean, we’re essentially talking about ads like we all know. But to take data hostage, especially for entities that aren’t particularly commercial (though even Takei has commercial interests to sell his book, he’s not necessarily primarily about that in day to day interactions), is just not ethical, especially for a system that purports itself to be “…free and always will be.” (as mentioned on the sign up page).

Filtering, though, is a necessity, and it’s not that it’s evil either, it’s simply a necessity. However, filtering is also very personal. As such, there’s a lot of user experience, and moreover user expectations that takes place for a good filtering system to work. You cant just take away content and hold it hostage, especially if it was previously available. However, it’s odd how if you never had that content to start with, you may be okay if things get doled out in a limited fashion. It’s much more about expectation than the literal concept of filtering.

Google+

I’m looking forward to seeing how systems that are actually progressive decide to tackle these issues. Unfortunately a system like Twitter, despite having plenty of lead time to implement something interesting, has chosen to do nothing more than a few lists and call it a day. It’s a bit disappointing. I’m hedging my bets on Google+ taking on filtering next and hopefully doing a better job of it. Their ulterior motive lies much more in the search realm, and everything else they build is built on the concept that it should somehow monetize itself in the form of more relevant search. So if they know what I want to filter, they know my interests, which means they can better target me. It also means that something like Google Now can be more relevant to my interests, Google Play can show me things I may actually buy, and so on. The spice keeps flowing throughout the infrastructure. Unfortunately for Facebook, there just isn’t that chain to traverse, so they need to make the best of it at the top level and monetize directly in that social networking space. Hence, my bets are hedged towards Google for actually trying to cater the user (which as usual collecting and big brother watching everything you do. Trade offs.).

What could they do? There’s a lot of interesting things. Personally, I would love to see producer side content tagging abilities. I want my content producers to tag their content according to what they produce. Multiple tags, circles, hashes, whatever. But then to allow me, on the receiving end, to filter based on their categorizations. That will allow me to be able to filter and control my content into what I want. This also, more importantly, lets normal people introduce facets into their personality.

At the moment, disappointingly, Google treats each person as a monotone, expecting them to produce one kind of content that I can either listen to or not. That just has to change as people simply are not that flat. Being able to expose that multifaceted aspect and leverage it on both sides is definitely a winning scenario, at least for me. I hope it’ll be something that will eventually get implemented in one form or another. It’s an interesting topic, this concept of a multifaceted identity, and something I have on my docket for a discussion… later :).

So get on it +Bradley Horowitz, or at least tell me it’s in the works.

I actually had this post all ready to go in Evernote but due to a bad network sync, it ate it. sigh, so a rewrite. yes, I guess it’s probably better now, but the time and angst was not nice.

jellybean 4.2

| Comments

Jellybean

I opted to sideload the new Jellybean 4.2 onto my Nexus 7. May as well. I was going to load it on anyway once the OTA came through (which it did before I published this).

So here are some quirks and improvements.

Quirks

  • Setting a new lock widget is awkward. When you initially get to the lock screen, a half rendered box glows on the left, to which you can swipe and it’ll let you add a new lock screen item. Unfortunately you need to specifically design something for lock screen use instead of letting you pick from the existing widget list, so the Nexus 7 only has 4, of which I really only find 1 that I can use (digital clock).
  • Daydream seems fun, but I dont really keep images on my tablet. I wish it would have just let me daydream photos from my Google+ album (it does, I just had to select it as so), or better yet, from anyone else’s album, hmm, like Trey Ratcliff.
  • New user on tablet if fun. But the initial clock on the lock screen for that user shows that it has an alarm. Nothing is set when I actually go to the clock widget to check it.
  • Apps lock up a bit. Not sure why. Never used to happen with 4.1.x. SuperSU seems rather active too.
  • (carry over from 4.1 update): Notification pull down is a bit too elastic. I want to be able to inertially pull it down like it was in 4.0. Now it takes more concerted effort to fully pull it down so that it stays open.
  • Right notification should also have a toggle for location awareness, which is in the provided widget. And there’s even an empty square. Did they just forget?

Improved

  • The “Other apps” button (the double window) now shows all the other apps running, as well as the one that you swapped out from. Which is a nice way to list all the windows, not just the other ones. I like that a lot for some reason.
  • The new digital clock is neat. To add other cities, click on the location drop pin at the center bottom. Not sure why, but that one just too me a while to figure out.
  • Multiple users. I like the concept. Not sure about the execution. This is one of those times where I wish to “exit” completely out of the other user’s account to make sure everything running there is done and all resources are available for the account I’ll be using. I know it’s supposed to be automatic, but it’s nice if it can be explicit too.
  • Notification pull down now has 2 areas, left and right. Left is the usual notifications. Right is more for settings.
  • The new swype swipe keyboard is interestingly fun. It works fairly well, though I’m still used to touch typing. Looking to leverage it a bit more and see how well it works.

To Try

  • Miracast: Not sure how to trigger it. Don’t have a compatible device to send it to :(. I wonder if Boxee Box will get support somehow?
  • Google Now: I dont think I use it enough to notice anything new about it.
  • Photosphere: I only have a Nexus 7 so I really havent used the front facing camera. plus it’s awkward to use, but I guess I can try sometime. (update: oh yeah, no camera app on the Nexus 7…)

I’m sure there will be more to add so this list should grow as time passes. Any interesting quirks or improvements to your liking?

sitting out on the nexus 4 till my contract runs out…

android update

| Comments

Nexus

The new Nexus devices just hit the play store today and it’s already sold out :P. I’m thinking about getting a Nexus 4 but I’m going to sit tight for a bit, well, mainly to wait out my current contract. But doing so will also give me a chance to see how the landscape reacts (or better yet, if something even newer comes out to compete).

With the new devices comes Jellybean 4.2 which has a slew of new features that may be fun to play with (geneirc what’s new page if you’re visiting for 4.3 updates and beyond :P). But I get impatient and antsy waiting for Google to roll out the OTA update to my Nexus 7. Plus it looks like Google delayed the rollout of 4.2 to Nexus 7 users.

And if the OTA is out for others, but not for you, you can try Settings > Apps > All > Google Services Framework > Clear data, Force stop then reboot. That may do the trick when it boots again (h/t Thanai Kumar on this post)

So I wanted to update it manually. It’s pretty easy if you’ve installed the ClockworkMod, albeit the notices and warning will feel a bit daunting. Hence this post. I’m going to have to assume that you already unlocked the device and did all the wonders of rooting, as that’s a little beyond what I want to cover here. You can find out more about that in a post like this one.

Sideloading

So, presumably, during the unlock and all that, you installed the ClockworksMod. If not, you can get it from the Play store. There’s a lot of ROMs out there, so take your pick that’s appropriate for your device. You can head over the Google’s Nexus page for their official devices ROMs which should have the latest as soon as it’s formally released, including all the Nexus 4/7/10… and even the mysteriously redacted Nexus Q.

Places like Techcrunch and so on will post the location to the official Google ROM updates, so it should eventually end up in your feed reader (you do use a feed reader right?).

Next, plug in your Nexus, and copy the downloaded ROM to a directory on the Nexus that you’ll remember. You can unplug. The rest is just clicking a bunch of menu items.

Fire up the ROM Manager. I’m basing this on 5.0.2.1 so things may be different at later times. Click on “Flash ClockworkMod Recovery”. This will set the recovery system to use the ClockworkMod instance. Mine is at 6.0.1.0, so your mileage may vary otherwise. I dont think you need to upgrade to the newest, unless you want to. It may prompt you if there’s something better available. They have to make a little $$ for this convenience, so your choice to contribute if you like what they’ve done.

Next, “Reboot into Recovery”. That will shut down your Nexus and restart it. It should dump you into a rather simple menu system. You can explore it, but I’m only going to zip through the process to update the ROM.

From the simple menu, “install zip from sdcard”. Use the volume rocker to move the menu, and power to select.

“choose zip from sdcard”. I put mine in a “temp” folder. But you there may only be 4 or so items listed initially. If there’s something like “/0/”, that’s where my temp folder was hiding. Navigate there and pick the zip for the ROM you downloaded. The big scary “THIS CANNOT BE UNDONE” of course should be heeded, but navigate to the “Yes” and click. They, as well as I, want to be certain you are doing what you want to do and not accidentally.

It’ll take a few minutes to unzip and install the ROM. Sit tight and watch the pretty little progress bar. Once done, select “Go back” and then to “reboot system now”. Another bold warning about “ROM may flash stock recovery on boot”, which is actually what you want since you want it to boot normally. So say “Yes - Disable recovery flash”.

Next warning is “Root access possibly lost. Fix?”. Well, um, “Yes - Fix root (/system/xbin/su)” is fine. Just a warning to be able to keep root. I dont see why you wouldn’t.

And that’s it. That should now reboot your machine and if all goes well, it should come up with the new ROM installed and running.

Have fun, hopefully this helped. I just didnt like all the warning messages I encountered, so I wanted to write something to just be able to feel a little better about just zipping through them. Plus, now I have the process written down for the next release when I’m purged from my memory how to get this done. A win-win :) Enjoy.

developers really need to focus on ease of use. that’s the real difference when I see something like this vs something native that google has done. and would be the single reason why google cant just use clockwork’s work right off the bat without heavy UX modifications.

workflow

| Comments

Reset

I’m resetting my workflow.

I’ve spent way too many years in an insulated environment cut off from how things are working on the outside. Or rather, it’s not that I was cut off, I was able to get away with not having to integrate myself with how the real world outside does things. I got complacent.

So I’m atoning for my sins. I need a clean slate and I have to relearn a few things to get my footing back on track. So I’m going to see what’s out there now, what I should learn and what I need to pick up. Not everything will be things I need, but I’ll probably dump some tidbits that I found interesting enough to share, whether I end up using it or not. So if you’re in the same boat, or know of some neat tools, feel free to chime in.

I’m hoping that these types of aggregate posts will be a regular injection once in a while in the tech category. We’ll see how well I keep up with it :).

So, today, a little chrome love. I switched away from FF a while ago and it’s just been a superb browser to work in. I should give FF a try again to see what progress it’s made, but for now, my primary work and play browser is certainly Chrome(s/e/ium).

Get some Chrome/Chromium/Canary:

Once you have Chrome:

  • Go to chrome://flags/ to experiment and explore some settings. If you’re a developer, be sure to enable “Enable Developer Tools Experiments” to get additional option in your Developer Tools console (Ctrl-Shift-i).

  • Add Tin.cr if you want to be able to save changes made in the dev tools back to the original source files. Pretty neat.

  • Leverage multiple profiles to enable debugging as different users. h/t to Addy Osmani

  • Go watch some ”The Breakpoint”. Seems to be a good series with interesting developer oriented content straight from the Google Chrome folks. Also the source and trigger for the content of this post.

there’s so much out there… so much.

ubuntu 12.10 quirks

| Comments

A new OS means new issues to resolve.

Ubuntu 12.10 is no different.

I’ve been a primary desktop user of Ubuntu since 9.04 and have enjoyed it quite a bit since then. I used to love the concept of something like Slackware where I could install whatever I wanted and configure it to exactly how I want it to be. Nowadays, I still respect slac, but I just no longer have the time. Or rather, I no longer want to spend the time to configure and adjust just to get things 100% as I like them. 95% is good enough, and that’s where Ubuntu has met my needs nicely.

Not sure why I thought this needed an intro, but there you go.

So I normally sit back a bit and let a new release work out the kinks… but this time I just jumped in head first with the upgrade (from 12.04). I’m going to use this space to jot down what broke during the upgrade and what I had to do to get things back to working order. Hopefully it wont be too long, but we’ll see. Maybe if you’re up against the same issues, it may be of help.

Btw:

update-manager -d

to trigger the manager to start the upgrade process.

Start up

Well, right off the bat, I ran into problems. I’m guessing it’s something to do with the tweaking I’ve done (removed global menu, lots of widgets in top bar, clickable desktop, etc) but unity wouldnt consistently start on log in. Sometimes it would be fine, other times I simply get a completely clean desktop. No icons, no Unity bar, no corner triggers. Nothing. Thankfully I could Ctrl-Alt-t to get a terminal. Once in there, I just needed to start Unity and I was back in business:

unity &

An oddness for sure, but either something I need to figure out in my setup, or maybe if it’s Canonical’s fault, wait for a fix to float in. Either way, I don’t really log out of the machine I’m on, so it’s just an occasional minor annoyance.

Lost Compiz settings

This seems to nuke itself on each reboot. So it’s a bit of a pain. I need to get into CCSM (CompizConfig Settings Manager - look for it in Unity) and do my usual adjustments there. I had this same problem once in a while in 12.04, so this seems to be a carry over. Some settings I tinker with:

  1. General Options -> Focus and Raise -> Click to Focus (off)
  2. General Options -> Desktop Size -> 3 x 3
  3. Expo -> Bindings -> Expo Edge -> (display) TopRight
  4. Expo -> Appearance -> Deformation -> Tilt
  5. Expo -> Appearance -> Reflection -> checked
  6. Scale -> Binding -> Initiate Window Picker -> (display) BottomRight
  7. Scale -> Binding -> Initiate Window Picker For All Windows -> (keyboard) <Super> w
  8. Unity -> Behavior -> Hide Launcher -> Autohide
  9. Unity -> Behavior -> Reveal Trigger -> Left Edge
  10. Unity -> Experimental -> Launcher icon size -> 32
  11. WobblyWindows -> Enabled
  12. Enhanced Desktop Zoom -> Zoom In -> Ctrl - Alt - Super - Button 1
  13. Enhanced Desktop Zoom -> Zoom Out -> Ctrl - Alt - Super - Button 3

I don’t have to redo all of them, but definitely the expo and focus and raise I have to once in a while. The rest are listed just to note my own personal preferences that I use in case I need to redo them.

Clickable desktop

It’s habit. I dump things on the desktop once in a while. It’s habit. I just need it clickable. I know I don’t really use it much, and I don’t change my background too often, and I can do it other ways without too much hassle. But something feels wrong if I cant click it, so I need to get that enabled.

From a terminal:

dconf-editor &

Then navigate to:

org > gnome > desktop > background > show-desktop-icons (toggle to checked state)

For some reason, the setting isn’t honored and I have to open up dconf and uncheck and check to get it to stick. Happens on reboots so I need to repeat this each time. Also sometimes (also on 12.04), the desktop background wouldnt load (it’s a wallpaper stored on a networked drive) so I need to actively open Appearance and make it recognize the wallpaper. For that, it’s convenient to right click on the desktop and open the “Change Desktop Background” menu item. So maybe I do need it to be clickable.

Source: http://joesteiger.com/2011/07/02/enable-desktop-icons-and-right-click-gnome-3-gnome-shell-ubuntu-11-04/

Remote desktop

I only started using this in 12.10 so I’m not sure if 12.04 had the same problem. I run this via the built in “Desktop Sharing” service which is something compatible with VNC. IIRC, it should be running on port 5900, for those that want to punch through the router. Anyway, the issue I have may be specific with -ATI- AMD Radeon cards, but basially, I can connect from a remote client (in my case, a Win7 laptop) and I can see the initial screen, but it wont update. The mouse moves, and I can watch the client move windows from the host machine, but nothing changes on the client machine.

Looking at the interwebs, it mentioned I need to checkbox a “disable_xdamage” in gconf-editor but alas, I don’t see that option. Not sure if it’s because I have an AMD card or 12.10 or whatever, but it’s not there. Luckily, there was still a viable solution. For those that run NVidia, you can check:

gconf-editor &

and go to:

desktop > gnome > remote_access > disable_xdamage (checkmark it)

But for those with AMD cards, try the following:

Open the AMD Catalyst Control Center (find it in Unity, easiest that way). Go to:

Display Options > Tear Free > Enable

See if that works. That did the magic for me. Ideally, it may have been fun to use Window’s formal Remote Desktop option, but that resulted in the client just seeing a blank background only desktop too, even with the fix. No windows, nothing. At first I though it was running on a separate :# display, but I could actually create folders on the desktop that showed up on the host, so it was suffering from a different kind of blanking issue.

Anyway, your milage may vary. If you want to try the Remote Desktop method, just install the open source remote desktop protocol via:

sudo apt-get install xrdp

Maybe it’ll be kinder to you.

Source: http://ubuntuforums.org/showthread.php?t=1240836#post11727847

Scanner

The scanner I have, actually a multifunction thing from Brother (MFC 7820N), decided it didn’t know it was a scanner after the upgrade. Ubuntu did remember that it was a printer, but gscan2pdf (and other scanning apps) decided it’s no longer a scanner.

I basically redid the setup for the scanner and everything came back.

If you also have a Brother machine, you can find the instructions on Ubuntu Guide.

Amazon lens

Nice in concept and I’m all for supporting something like Ubuntu via affiliate credits, but I’m not quite sure I really need an Amazon listing each time I search in Unity. So you can remove it in one of two ways. Either turn on Privacy mode (search Unity for it):

Privacy > Search Results > Include Online Search Results > (turn it off)

or remove the shopping lens:

sudo apt-get remove unity-lens-shopping

Then restart Unity.

The first turns off any sort of online results, like for videos and music as well. The second, if you like those other searches, just removes the amazon shopping portion. I opted for the second one.

Source: http://www.howtogeek.com/126995/how-to-disable-the-amazon-search-ads-in-ubuntus-unity-dash/

Display issues

I’ll make this generic since perhaps there’ll be more.

First up is some screen tearing issues with the default “Movie Player” app. Didn’t happen in 12.04 with the default Catalyst drivers there, but something changed in 12.10. Not quite sure what the solution is, but VLC works well without the same issues, so I’m moving the default player to VLC instead. Not really a fix, but good enough.

Not quite sure how to make the global change, so for now, I just right click the movie and access:

Properties > Open With

VLC should be listed as a Recommended Application. Simply click that and set it to the Default Application. This will change the setting for all media of that type. Basically I just if I see that a movie type pops open Movie Player instead, I do this fix. Eventually this should switch over all the movies formats I regularly watch to VLC.

Unresolved

Still to figure out:

  1. Other Software sources. Well, the upgrade to 12.10 disabled all the 3rd party software sources. There’s a comment in front of each saying ”disabled on upgrade to quantal”. Does this mean I should not use them? Does it mean I should remove them and readd them as needed? Can I just activate all of them again by checking them off? And now I need to manually edit each of the source files and remove the ”disabled on upgrade to quantal” text if I find that it’s working ok? Couldn’t it just disable the ones that it couldn’t find a quantal repository for?

  2. Chromium window control buttons went back to the right. I was actually liking the left look. I wonder if it’s just a toggle switch somewhere?

Any more?

Yeah, maybe. Time will tell. And if I remember, I’ll update this post with any other issues I run into, or if any of them magically resolve themselves with updates down the line. Feel free to let me know what your experiences are or if you have any questions about the above.

sigh… dconf-editor and gconf-editor. and you wonder why we cant have a friendly linux desktop for normal people…

hackday primer

| Comments

a primer

A HackDay (http://goo.gl/xNofr) is basically a day to unleash your creativity to create something interesting, whether for yourself, your team, your company, or even the world at large.

“Hacks” can be anything you want. It can be a learning experience for yourself to improve your skills, it can be something technical like creating a website or authoring a video. It can be something totally creative like an art project or a photo contest or writing some prose. You can make it anything you want it to be.

The only catch is you need to participate and do something. That’s it. That’s the fundamental rule of HackDay: participate.

Join a HackDay and engage your creativity. Take some time and try something new, expand your horizons, see where it goes. Don’t worry about completing anything or finishing, it’s much more important to start on your journey than to worry about the destination.

See what happens and let others know. Find out what other people are doing and comment, engage, encourage. I know some of you are running this in your companies, so feel free to edit out proprietary content, but still, do let us know what you’re up to in general :)

Share this and your stories with others and be sure to use the #hackday hashtag whenever you do.

Have a great hack!

More information about the recent HackDay Micro Event: http://goo.gl/MDptP
And more information about HackDay in general: http://goo.gl/Eik4w

hackday micro event

| Comments

hack what?

Deja vu? Go read the HackDay post. Then come back. It should make sense. Cause we’re going to run one.

Now. Culminating on Friday, October 12th.

Normally, I would start the planning process for a HackDay a few months in advance. Spend a good amount of time building a website, preparing content, gathering sponsors, figuring out contests, getting in touch with interesting groups and projects, looking to see what APIs can be featured, what lessons should be taught and so on and so forth.

This time, none of that. Maybe next time. Hence the micro moniker.

We’re just going to wing it. Friday. October 12th. Yes, this week. Yes, this Friday.

I’m doing this to mainly get myself moving, but I figured it may as well benefit anyone else that may be a little stuck at the moment. So why not have a little crowdsourcing fun behind an activity? Oh, coincidentally there is a HackDay that runs annually right around this time. Most of you who read this should already know that :).

But for the rest, consider this your call for participation.

how?

Just go ahead and do something. Create something. Work on a project. Study a topic. Learn something new. Start a hack. Then post about it. Use the #hackday hashtag.

Tweet it. Google+ it. Whatever you like. Bonus points for CC’ing one of those accounts (). If you want to reference this post, you can use this: http://goo.gl/zV8Wz

by Friday!

That’s all. Nothing special. No pressure. Just an acknowledgement of participation. If you’re going to do this inside of a company and can’t really post about what you’re actually doing, that’s fine. Just use the #hackday hashtag and indicate that you’re doing something. It’s just meant as a way for us to get a sense of something happening that people can tangibly see.

So start something and see where it takes you!

recap

1. Do something between now and Friday
2. Talk about it using the #hackday hashtag
3. Look at what others are doing and comment, encourage, respond
4. Goto 1

Oh.

5. Have fun!

bonus

6. Um, spread the word? Thanks!
7. Join the Google+ Event: HackDay Micro Event on October 12th, 2012.

yes, statement never reached error…

hackday explained

| Comments

hack what?

I’m sure… or maybe not so sure (hence this post), that some of you have come across the term ”HackDay” and have sort of wondered what it’s all about. A rather broad term with multiple definitions depending on who you ask (@codinghorror, @jeanettehoran).

Originating from Altassian, it’s sometimes called a hackathon, sometimes prefixed with a descriptive noun (like music, history, or science). Sometimes capitalized, sometimes spelled with a space. They’re really all one and the same, some type of variation on a “HackDay”, well, at least in my book :).

In that case, what is my definition of a “HackDay”?

define it

Succinctly put (and trust me, that’s a hard task for me), a HackDay is an event or a goal where you take time for yourself to create something.

It could be a Javascript hack that you’ve been itching to try, or learning a new language (computer or linguistic). It could entail figuring out how to improve upon a presentation deck someone else crafted, or getting around to fixing those bugs and adding that new feature people have been asking for. You could decide to publish an article in order to explain something to users, or document an API to help developers. It’s pretty much anything you want it to be.

Should it be a day? A weekend? Done in stages? As a competition? These all become personal preferences and will be based on the target group demographic. Is it wrong to call it a “hackathon” but not do it at a venue? Or to call it a “HackDay” but offer more time than just a day? There’s no real right way.

In the way I’ve run them, the HackDay itself is the culmination day. It’s more like a checkpoint to say: “Here, we’ll pick a day. Show us what you can do by then”. Does that mean those who have more time may spend a few extra days creating? Sure. Will some people only literally have that day (or less) to go form nothing to completion? Absolutely. Does it mean you’re all done once the HackDay is over? Not if you want to take it further.

A HackDay is meant to be flexible but tailored to the needs of the organizers and participants alike.

drive it

So, why participate?

Because you can. Or rather, because you want to.

There are all sorts of motivations for participating. I’m not going to dive into this too deeply [yet], but suffice to say, running a good HackDay means understanding what people want. Figuring out what drives them to participate.

Contests, sponsorships, prizes, even fame and glory are great motivators, but in the end, those are really just superficial treats. As with anything people do, they do it to have some sort of satifaction from having participated. Stoke that inner flame and keep it well fed and happy, creative and energized, motivated and excited about participating.

With that in mind, the rest is all about driving the movement forward. Creating that wave of interest and getting more people involved. These types of things usually have a snowball effect, starting with a handful of dedicated supporters who see the value, and slowly acquiring converts. Once you get that going, it’s self driving and no amount of external influence is going to hinder this process.

And there will be external influences, both good and bad. There will undoubtedly be detractors, people who wont understand, people who will question why, even people who will actively try to stop it. But there will also be those that are in it hook, line and sinker. You just have to know it’s impossible to cater to everyone. That nothing is universal is just about the only universal truth.

So find the supporters, figure them out, feed them what they want and cater to their needs. Focus on creating an event for the people participating, not for the sponsors or an API or a model or [especially] a directive. Figure that out and you’ll have an event that’ll simple take on a life of its own.

deregulate it

I’m an idealist when it comes to HackDays.

I’m not too worried about venues or location logistics as I prefer a much more accessible online participation format. I’m not absolutely sold on needing sponsors or contests or formats or restricting what people can do or use. But I can totally understand how those things can help (as I’ve also leveraged them in the past). I’m far more interested in the spirit of a HackDay and what can motivate people to get in on it. That’s when the magic happens.

I know every HackDay is different, so there’s bound to be all sorts of rules and requirements, or at least suggestions that should be followed to make it a success. So here’s my set of “rules”.

The first rule of HackDay is:

1. Participate

Um, that’s it. What you do, how you do it, with whom, why, where, or even when is really completely up to you.

The only requirement is that you take it upon yourself to participate and try something. The phrase “it’s about the journey, not the destination” never rang so true as when you try out a HackDay.

The real goal is to learn something from the process, with the added bonus that you may actually complete something by the end of the HackDay. But completion is certianly not at all a requirement.

I have no idea where inspirations can come from, that’s why I like to encourage exploration and participation over the quest for results. Though, yeah, it is cool to be able to complete something :).

But, it’s even cooler to start something new and see where it goes.

organize it

Companies like Yahoo have their Open Hack Days where they invite developers to a campus for a weekend and see what happens. Others like IBM focus their HackDays internally, over a longer more gradual time period. One may allow the public to participate, creating a concentrated contest atmosphere. The other may focus internally on employees developing valuable IP to further the business. Both are different yet valid uses of the concept.

I’ve helped to organizine these types of HackDays at my previous place of employment since 2006. During my time there, we ran a total of 9 of these events, and we did it all grassroots style, from the bottom up, via pure community means and support. We saw good growth in participation, interest, and community over those years.

People participated because they wanted to participate. They created because they could. There was no mandate, and often times, no formal work time to participate. Folks took the initiative into their own hands to participate. They found spare time, after work time, and a few lucky ones asked and got blessed with formal time.

Some experimented simply for self satisfaction and learning. Others produced tools that benefitted their team or community, or implemented a long overdue website redesign. We saw feature enhancements and bug fixes, presentations and videos, even an internal radio station broadcasting during HackDay. Some even managed to produce really well done prototypes that caught the attention of management and went on to become products and enhancements to the company’s software line.

believe it

But it all started by simply setting a date.

We wanted to organize something that could intrinsically be beneficial to the participant, no matter what else happened. They didn’t need to feel like they had to complete something. There were no repercussions for not participating. No executive mandate or directive coercing them. No pressure to “win”. We wanted them, first and foremost, to enjoy their own participation, to enjoy the spirit of HackDay.

We did at times solicit other groups to sponsor prizes and contest for adhering to their set of guidelines, but the main event always remained free and clear of any requirements or expectations. All we offered was the chance at being voted as the winner in various categories. A fleeting chance at fame and glory.

It was enough to motivate people to participate. It was enough for people to anticipate the annual event.

Those familiar with the process were ready for the annual event. Groups took it upon themselves to organize their local faction by providing rooms, snacks and even local prizes. We seeded the idea, and let the word spread as orgnically as possible.

It grew because we believed it was the right thing to do. It grew because others believed in it as strongly as we did.

personalize it

I spent the last 6 years driving a company-internal HackDay initiative, and I left it in the good hands of people who understand the concept and hopefully can see it grow.

Now that my participation in that internal one is done, it’ll be interesting to see what may come of it out here. The realities are certainly different, the audience is immense and vast. But if there’s a way to figure out a nice niche to play in, it could indeed be something interesting to brew.

We’ll have to see… :)

Update: HackDay Micro Event on October 12th, 2012.

indeed… there is a certain itch waiting to be scratched