2011-04-22

Wireless hoops

It's been so long since I scratch-installed Linux on my work-laptop that I had forgotten the pain in the arse it can be to get the wireless working.  Not that the steps are necessarily hard nor that the howto's are that difficult to find; it's the frustration and anger when you try one recipe after the next that result in failure until magically something works.

I realise now how many problems I may potentially have avoided by putting Linux in a virtualbox on my personal laptop, where wireless is simply not an issue (all internet bridges to the ethernet port from the host).  In fact there's something to be said for virtualbox essentially standardizing all the hardware such that they are not a consideration.  I know it's been theorized and toyed with but I now think about how nice it could be if there were no real host (only a host shell that handles the hardware) and all OS's were in a virtual machine.  The nearest I can figure for that would be an extremely stripped down Linux, but then Linux doesn't have the most complete set of problem-free device drivers in the first place doesn't it?

Anyhow, this time, the fix I have to remember can be found (among other places) here, with the key novel steps being:

sudo apt-get update
sudo apt-get --reinstall install bcmwl-kernel-source

Upper left corner

I forget exactly when but at some point Ubuntu defaulted to having windows with the close/min/max buttons in the upper left corner instead of the upper right.  For some historical reason they have always been on the upper right and it was taken for granted and people just got accustomed to expecting it there.  Despite it being relatively easy to "fix" I did read some complaints on the choice.  I was rather agnostic about the placement actually.  In fact, since all menus are left justified (in my language anyways) it sorta makes sense to have the window menu buttons there as well.

Anyhow, today I just found a mildly compelling reason for me to prefer to keep those buttons on the upper left corner.  I often enough connect my laptop to my monitor at work which is vastly bigger than my laptop screen, and in doing so I tend to enlarge and space out my windows.  If I suspend and unsuspend to the smaller screen, the windows run off the page, BUT the top left corner almost always remains on the screen where I have access to these buttons but not if they were on the other side. It's a minor thing but custom and consistency is the only argument for keeping it on the upper right.

2011-04-18

Python Logging

I've been using the Python logging module for a couple of weeks now, and I want to like it because A) it's a standard module, B) it has some cool features like multiple handlers and hierarchy.  But almost every time I use it I feel like I might as well just write my own logging module suitable for my purposes... because it seems like I have to do that anyways.  The module just seems to require too much scaffolding and setup to use.

Here's what I mean. To do it properly you have to:
  • get a logger
  • set the verbosity level of the logger
  • create a file or steam handler
  • create a formatter (the default needs replacing)
  • add the formatter to the handler
  • add the handler to the logger
  • do this all again if you want to mirror to stderr AND to a file (which is why I started using logging in the first place)
  • put in code to shut down the logging (makes sure the streams get flushed) and for safety use the atexit module, meaning
    • import atexit
    • register the shutdown
  • add an exception hook so that we can log uncaught exceptions too
This is just a little too much for basic proper use, don't you think?

To be fair, there is a "simple" way to use logging which is to just use the logging module functions "BasicConfig()" and "debug|info|warning|error|etc()" functions without getting a logger for your module.  But it doesn't give the behaviour I want and even they prefer you don't use it in this manner.

What I believe is missing is a set of helper-functions and/or sytactic sugar to handle common tasks.
  • let more things like Level and Handlers be put in the argument to getLogger
  • automatically wrap common things like a File-like object and filename string into a handler instead of having the need to explicitly make one.
  • an at-exit shutdown should be somewhat implicit (maybe an option to turn it off) as well as the option to trap other exceptions
And what I'd like to have for simple operation:
  • one line (minus "import") to get a logger for my module with any optional formatting and whatnot.
  • one line to configure the root logger with all options, that can deal with an array of logging destinations, that will auto-interpret formatting strings and destinations instead of needing to create sub-handlers and formatters, etc.
Here was my first crack at collapsing all that with two helper functions, but I hate having to add more functions to import for things that should have just been available (yes it's a bit ugly).

def add_to_logging(log,whereto=None,level=10,format="%(levelname)s: %(message)s",dateformat='%Y%m%d_%H%M%S'):
    ''' shortuct to attach a destination to an existing logging object
    logfile can be file or gzip or stream or None(meaning stderr) '''
    if whereto is None: whereto = sys.stderr
    if isinstance(whereto,(str,unicode)):
        fp = opener(whereto,'w')
    else:
        fp = whereto
    fh = logging.StreamHandler(fp)
    fh.setLevel(level)
    if format: 
        formatter = logging.Formatter(format,dateformat)
        fh.setFormatter(formatter)
    log.addHandler(fh)

def setupLogging(logname=None,rootname='',timestamp=False,consoleLevel=20):
    ''' shortcut to set up a dual stderr/logname LOGGING stream 
    default level for file is DEBUG, for console is INFO
    (set consoleLevel to 0 to turn off console)
    SEE PYTHON LOGGING DOCUMENTATION FOR LOGGING BEHAVIOR
    returns a logging object'''
    import atexit
    logger = logging.getLogger(rootname)
    logger.setLevel(logging.DEBUG)
    dateformat='%Y%m%d_%H%M%S'
    # change the formatting if timestamp
    fmtstring = "%(levelname)s: %(message)s"
    if rootname is not None and rootname != '':
        fmtstring = "%(name)s:" + fmtstring
    if timestamp:
        fmtstring = "[%(asctime)s:%(name)s:%(lineno)s:%(levelname)s] %(message)s"
    # add a file if specified
    if logname:
        assert isinstance(logname,(str,unicode))
        #logging.basicConfig(filename=logname,format=fmtstring,dateformat=dateformat)
        add_to_logging(logger,logname,format=fmtstring,dateformat=dateformat)
    # add a console
    if consoleLevel!=0:
        add_to_logging(logger,sys.stderr,format=fmtstring,level=consoleLevel,dateformat=dateformat)

    # cleanup and exception handling
    atexit.register(logging.shutdown)
    # the following will capture exceptions to the logs as well
    sys.excepthook = lambda *x: logger.error('Uncaught Exception',exc_info=x)
    return(logger)



In the above "opener()" is a separate function I have that wraps opening a filename, file object, pipe, or what have you depending on the input and optionally with encoding.  Sometimes I miss how easy that is dealt with in Perl.

2011-04-12

Download Squad Fired!?

WTF?!  Did I miss something?  I have a lot of feeds in my RSS reader but this would have been one of the guaranteed survivors were I forced to trim it down to the essentials.  Aww man, that sucks.  And not much of an explanation to go along with it. There's a gaping void in my feed list now.  I valued it more than many of the other feeds they recommend as a replacement and that I even have on my feed list.

Addendum:  Ok, looking deeper through the comments followed by a search, it seems AOL-Huffington Post shut them down.  Again with the big media guys fracking up the good stuff.  shakes fist in air

2011-04-11

Emacs, you ugly nerd

I once saw Emacs described as a "thermonuclear text processor" and I find that description fitting.  Emacs is a beast.  It has a really steep learning curve.  But much the same way the *nix in general can have a steep learning curve, after you use it for a long enough time you grow to appreciate the raw power available over the other offerings.  Some even take it up a level "Emacs IS my operating system".  There are too many quirks with that for me to accept on that part though.  I know I can run a shell terminal in Emacs but I never do, mostly because of how the environment seems to get screwed up just enough to turn me off.

Anyhow, I sometimes can't believe how utterly craptastic it is make Emacs look pretty by way of fonts and such.  It's a freaking mess.  And there is the invariable quirk with it as well.  Thankfully the internet comes to the rescue.  What I love most about the web coupled with a good search engine is that I often enough am able to find the workaround to a problem I'm having.  Not easily some of the time but it puts a whole host of things within the realm of possibility.  Most recently I wanted to correct the annoying issue of Emacs not using the default font when opening a new frame via C-x 5 2.  Found the snippet of code I needed to add to my .emacs file almost immediately.

Only thing I really regret about using Emacs as much as I do is never having learned Lisp.  It's always been on my someday list.

FF4

I installed Firefox 4 partly because I simply wanted the speed improvements and partly because of newest-gadget-syndrome.  I'm pleased to report that I am digging the loading speed improvement immensely.  As for the better handling of memory, even with the feature where it will unload unvisited tabs after some time and it can be set to not load all tabs at startup, I find myself again running into the issue of FF taking up way to much memory and slowing to a crawl.

The fatal flaw with FF4 was that they didn't go far enough and just up and swallow the BarTab add-on, the first or second most critical addon in my FF arsenal.  I was really dismayed that BarTab hadn't been updated to work with FF4 yet.  I tried the tweaks and suggestions to get some of that functionality that's built-in to FF but it just doesn't hold water.  I need the ability for tabs to explicitly be unloaded exposed, preferably with a rightclick menu and a menu item to "unload all other tabs".  When FF gets slow, this has helped a lot with BarTab.

Thankfully, I just found a hack to get BarTab mostly working with FF4, and it must be treated as Beta.  There's already the issue where tabs don't load automatically when clicking on them but pressing F5 is the just price I will pay to have the ability to unload tabs.  We'll see though, maybe it will get too annoying.

On a side note, I get really annoyed in the discussions from people imposing their view that you should never have more than a few tabs open.  There's merit to the notion that you shouldn't keep more tabs than you need open, but there are lots of times where I do need many open simply so that I do not have to constantly look for previously opened sites.  Case in point, I have a bunch of tabs open to a set of Python modules and related info.  I just need the page loaded once so I can click on the tab to look something up, I don't want to have to close it and load it up again when I need to look it up again.

2011-04-10

Tramp at work

One major change in workflow that I had to get used to with the company change a few years ago was doing most of my work and development through remote terminals.  Try as I might to do at least some work on my local machine there was just no escaping that it was just more convenient to do my script writing and edits and tests on the remote machines.  A shell is a shell so I can manage: windowless emacs and vim for editting, and screen sessions for stuff.  But I hate the lag introduced working remotely, I hate not being able to exploit having remote drives mountable to my local machine, I hate not being able to exploit my local tools and environment.  All of this could go away partly if they just enabled sshfs so that I could at least access some of the data for development purposes (much to much to xfer locally and there's policy against it).  But alas, they are unwilling to enable it, even if there's no good reason.  It's not like i would be able to access anything more than I could anyways.

So one thing I tried before was at least being able to use my local emacs editor to edit remote files with Tramp.  I recall having to munge my commandline prompt to get it to work and that it was a little clunky and so I gave up.  But I've tried recently tried it again and it went a lot more smoothly to my surprise.  It even came with my latest Ubuntu installation (finally updated after a year+ of laziness) vs my downloading and installing it myself previously.  So it was trivial to try again and I was pleasantly surprised.  Saving and loading has the lag still but everything else gives me the snappiness of a local machine (save for when I have a network interruption).  I guess I'm going to try this method out until I come up with a more satisfactory method of doing more work locally without all the constant syncing.

Unfortunately what got me thinking of this again was wanting to try another editor to edit Python.  As much as I like (or rather am used to) emacs and vim, Python feels like it require a lot more editor support to do right and to overcome annoyances.  So I've been wanting to move to an IDE so I'm testing out Eclipse and the remote access plugin, but so far I am thwarted by it's need to have SFTP enabled remotely or another server running remotely in order to work.  Not having root there I just don't have the time or energy to work around trying to hammer that together.  I'm bugged to no end that there is no easy facility for installing packages as a user without root.

2011-04-09

No vertical screen split for J00

I got quite happy when I learned there was a version of Gnu Screen that let you do vertical splits.  I always have 2 screens side by side (emacs and shell) both distinct ssh sessions with distinct instances of screen.  Had this worked it would have saved me some minor inconvenience since I'd only need to log in once and not have to select between the two detached screen sessions.

I said "had it worked".  Actually it did work, but there is a side effect that is a deal breaker and it makes me really sad.  The fatal flaw is that I mouse select for cut/paste a LOT and the selection does not respect the border between the vertical split.  Yes, there is the keyboard option for cut/paste but that's insufficient.

2011-04-08

I keep wanting to hate Python

Just something I feel I have to say once in a while.

Dell XPS m1330, a most beautiful piece of shit

I remember being quite excited upon receiving my m1330.  It was a beautiful laptop.  Very sleek and original.  Relatively thin.  Powerful enough to run my WoW (at the time) by sporting an NVidia card.  I loved it.  I stopped using my Alienware desktop monstrosity almost entirely.  It was a bit pricey though, something like $1600 in '07/'08.  Perhaps the only complaint I had was that it came with Vista.

It's sad though, the innards of that thing ended up being junk.  I had to have it serviced every year.  It overheated, the video would give out, the motherboard would break. I even forked out dough for the extended warranty just to get it fixed (2nd time it died was shortly after the previous warranty expired but they let me buy the extended).  It was my main machine at the time, in particular since I had just moved and purged much of my wares, so I kept it serviced.  And a part of me wanted it to be a nice working machine because I really did like it cosmetically and feel-wise.

But at last, it just wasn't cutting it.  I'm not sure if it was the game upgrades or the vidcard or what, but WoW and other similar games became completely unplayable.  It ran a bit clunky.  It still had Vista on it just to run the games but when that stop it basically became a linux box.  So a year ago, upon getting the Alienware m11x, a machine I also love (though I still think I prefer the m11x look and feel-wise), I gave it to my sister.  Not much long after that, it started exhibiting more problems and basically quit on her.  I took it back, loaded it up with linux to find that it kept crashing.  I had good indication it was the hard drive so I bought another one.  Installed it, spent more time putting Ubuntu on it, had it just about set up the way I liked and wouldn't you know.... it completely gives up the ghost.  Won't power on or anything.  Pisses me off that I had just spent more money on it again only to have it bricked.

I've read about bad experiences with Dell and their machines.  It wasn't my experience for the most part, until now.  My previous laptop was also a Dell and although it ended up with some issues here and there, it worked for a looong time, on the order of 8 years or so.  And (having a warranty) I had fair service.  But now I'm very disappointed, doubly so because they put together a machine that I really wanted to like and they ruined it with shoddy parts and internal design and a hefty price tag.  Such is the life with gadgets I suppose.  I did try and look up how much it would cost me to fix it and I decided that I'd rather spend the money on a new netbook than sink it into an aging machine.  I did consider it though.  If I could have found a new mobo for, say, $50-70 I would have justified it as a geek hobby.

As to whether or not I'll ever trust Dell again to buy from them... Well, I probably will.  I mean, I already have with this Alienware but I'm HOPING that that subdivision of the company (acquired) has a higher standard and from what I read they mostly are.  I did have to have it serviced but it was only a fan that stopped working causing overheat and shutdown.  I'm getting good use out of it though and that's the important bit.  Also, sometimes the price is hard to ignore, I have the discount deals through my company and I have a work-issued Dell as well that is a clunky beast but is still kicking with nary a problem (other than a dead battery) in 3.5 years.

I just wish it wasn't the m1330 that ended up being the lemon.

2011-04-07

Autostart annoyance

I find it ironic that Windows too often goes through this extra "security" step of asking you if you really want to do something even though you just tried to do it, but has no checks on programs that love to put themselves in the startup.  The most annoying offender of all is the MS Live IM client by the way, but there are other programs that slow up my boot time by automatically installing in in the startup with no option to tell it not to do that.

vbox

A couple years ago I was using vmWare to have linux running on my work laptop.  It did it's job but for some reason felt just clunky enough to where I just ended up using putty terminals instead.  They're light and quick even if a bit featureless and I got accustomed to running emacs without a mouse.  vmWare was one of those things that I installed and didn't want to touch again because I recall it being a little confusing, particularly finding the right product.  They had a bunch, they all required some kind of registration, it wasn't always clear to me which one I was to download.  Eventually I just gave up.  Not that it was bad, just that it wasn't something I needed to spend time on.

A year ago or so I saw some positive press on Virtualbox (prior to Sun being acquired by Oracle).  I gave it a whirl (coinciding with my new laptop purchase).  My impressions were quite positive. It seemed less complicated.  Of course, the REAL reason I gave it a try was because the reports were that there was finally a VM that could run COMPIZ.  Back when I had my own Gentoo workstation at the office, I grew addicted to Beryl/Compiz.  It made work just a little more fun, and I'm also one of those people who's productivity is increased by multiple desktops.  But if I'm gonna stare at a screen all day, why not make it cool too right?  (and I get a little pleasure from the wow factor in other people who saw me at work)

Anyhow since then I've been using it more often.  I normally work on remote servers because I have little choice (that's where the data is) but for development It really helps to do things locally, especially when I'm on the road with intermittent internet access, or when I know that the servers will be down, or when they're running really slow, etc. etc.  Mostly though, I prefer having a full environment than just putty terminals.

So for months, I've been seeing this popup whenever I launch vbox that there is 4.0.4 out but I never made the upgrade.  Upgrades terrify me because when it's important, something almost certainly will go wrong.  But finally the mood struck me and I gave it a try.  And it failed!  It was start installing and then hang there doing nothing.  Meanwhile, it uninstalled my old version.  Horrors!!!  Panic!!!  Did a bunch of searches, tried several things, had to reboot countless times (primarily because installing vbox turns off the network, very annoying).  After many hours of following what turned out to be the wrong post, I found another that simply stated you turn off DropBox.  Boom! It worked quickly and cleanly.  If I hadn't found that post I don't know what I would have done.  I completely forgot about DropBox, it auto starts (another rant) and it interferes with the network changes.  It's completely unrelated to vbox so I don't know how long it would have taken for me to make the connection.  It never fails, something always goes wrong.

As I mentioned I have some trepidation about upgrading software but I figured that since the upgrade was already months old it might be safe, and what's more I finally got around to moving my home directory to it's own partition; making me a little more cavalier about making OS modifications now.  I used to simply let the home directory exist along with the OS because with limited drive space I've been burned before about how big to make each partition.  But that's less of a concern now so I finally got around to it.  Need to do it on my other computers now tho.  Now that I have it, I can finally play around with other linuxera with more impunity and vbox makes that a lot easier to do.

CD access

I thought computer CD drives were ancient news, a solved problem, a triviality.  I can't believe I downloaded (a rather cool) program that can't access my CD drive like everything else I have can.  That program is foobar2000.  I did a beyond token amount of web searches trying to get it to work, stopping short of downloading some other program (Nero) to help it do it's job.  I just wanted to rip some songs to FLAC and was dumbfounded that the CD wouldn't access.  I may try again.

Paying rent for my characters

This is utterly ludicrous.  I haven't played WoW in at least 4 months and before that only once in a long while. The did in fact log in in January to discover that my account was hacked and my main characters stripped of their possessions.  In fact one was moved to another server.  Must have been one of those free-transfer to empty server jobs as I don't imagine someone paying to move it.  Terrible.  But at least my characters were restored.  But does that matter? I'm essentially paying $15/mo to keep my chars alive.  I'm not going to have time to play for the foreseeable future due to new family and baby on the way.  Alas, $15 is just under the threshold of too small to register as a significant dent in my lifestyle, unlike say cable, internet, mobile phone etc.  Yet it is one of those things that is nickel-and-dime-ing me and of all the things I could eliminate to save a little here and there, this is an obvious candidate.  And still, I just can't seem to get myself to close the account.