2011-12-15

Vertical Tabs

There were a few key reasons for my wanting to move from Firefox to Google Chrome but the ONLY, I repeat ONLY, reason I finally gave up on Firefox and moved to Google Chrome was because there was at least some form of vertical tab sidebar option in Chrome, albeit crippled compared to tree-style-tabs.

That is... until now.

Chrome updated and now there is no possibility for this tab sidebar.  And I for the life of me cannot understand why they are so fucking against having vertical sidebar tabs.

WHAT is the logical argument for it? WHAT?!  If you sill live in the 90s and only keep one or a couple tabs open at all times and just love going forward and back and reloading pages, then yes, having a few tabs at the top is more efficient.  But if you have a lot of tabs open it SAVES space to have a vertical tab bar.  Why? because tabs are wider than high, so you can fit more tabs in the space and have them be readable before you need to resort to scrolling.  On the top, you have to shorten the tabs to fit more in and have to use the scroll buttons sooner.  To top that off, most screens these days are wide-screen so it's just a better use of screen real-estate; most web-pages are NOT wide screen so there is unused space unless you love to zoom or have gigantic fonts.

I think that because tabs started out on top and are therefore the norm, they are just being lazy pricks and don't want to rock the boat or put in the extra effort on behalf of the mass of us that use a lot of tabs and therefore NEED this vertical tabs on the side.

Maybe they think that we shouldn't have many tabs open ever.  Or rather that we should go back to going forwards and backward ad nauseum.  There are many useful and valid reasons to have a lot of tabs open.  I'm not even talking 35 tabs of memory and resource gobbing youtube videos, I'm talking about normal use and even  for work.  Example.  I often have to look up python modules and it is helpful for me to have a bunch of the ones I'm using open in their own tabs and at my fingertips and NOT have to constantly go forward and backward and search and research and load and reload.  And when I'm doing a normal search I like to tab-open the links so I can compare pages and not have to back-button to the list of pages.

Come on!! WTF, man?

2011-10-12

screen tricks

GNU screen has been a staple tool for a few years now that I do most thing on remote machines. My main hangup with it is switching windows which I do a lot and requires multiple keypresses (C-a #).  This can be alleviated some by splitting the screen (C-a S) so I don't have to switch as often. But that introduces yet another sequence of key strokes (C-a TAB). It's something I can only stomach on a larger screen since I hate terminals with too few lines.

It occurred to me today that I could open up to ssh sessions and have both joined to the same screen session, so that I could keep different windows open in each. Simply open the second terminal with "screen -x".

Another trick I discovered was to add the following to my bashrc.
if [ "$TERM" = "screen" ]; then
  screen_set_window_title () {
    local HPWD="$PWD"
    case $HPWD in
      $HOME) HPWD="~";;
      *) HPWD=`basename "$HPWD"`;;
    esac
    printf '\ek%s\e\\' "$HPWD"
  }
  PROMPT_COMMAND="screen_set_window_title; $PROMPT_COMMAND"
fi
And now my windows have a more sensible name; I do find myself constantly cycling through windows till I find the right screen in the right directory.

VPN, Win7, and not seeing the LAN computers

Here's another one of those mystical computer problems that (at least) one wonderful genius found a solution to that defies explanation as to how he figgered it out.

Problem: I VPN in to work but for some reason cannot see what used to be called the "Network Neighborhood".  Basically, if there's a file on the network that I need I can't click on the link to get to it.

Search:  Turns out I can use the IP address in an explorer window to see the contents, but hell if I'm going to look up every IP address that I need.  It logically leads to a lot of guesswork on the nets looking for a solution that involves network settings, DNS, configs, and even domains and workgroups.  Most threads of which drop off without a satisfactory answer and an occasional "works for me"

Solution: Then I found this lonely page quite apart from the other threads in content and direction but which did the trick.  How the hell are we supposed to know that something called TCP Auto-tuning would be the culprit?

solution copied here for future reference:

Disable TCP Auto-Tuning
1.Open elevated command prompt with administrator’s privileges.
2.Type the following command and press Enter:
netsh interface tcp set global autotuning=disabled
Enable TCP Auto-Tuning
1.Open elevated command prompt with administrator’s privileges.
2.Type the following command and press Enter:
netsh interface tcp set global autotuning=normal

2011-09-06

Browser woes

I've given it as much chance as I could stand for it to somehow correct itself but at the end of the day I have to say that Firefox has failed me.  FF has been my only main browser for what seems like as long as I can remember.  The primary reason was that it was cross platform and for the longest time I used Linux at work and Windows on the home machines, so I could use the same browser and setup on both.  But in recent years it has started to show its bloat.  Maybe it was the cool add-ons I loaded, maybe not.  One thing is for certain, it wasn't the speedy snappy browser of its youth.  That can be forgiven but lately it's been doing something aweful on my main PC.  It regularly and frequently just stalls there, whether I'm scrolling, moving the cursor, typing, anything, for several moments it would sit unresponsive, then catch up then do it again.  I've recently updated to 5.x then 6.x and the problem never went away despite there being lots of "fixes".  I have a habit of keeping a lot of tabs open and I've even gotten into the habit of paying special attention to close many AND to actually starting and restarting my browser in an attempt to free up resources.  I ended up putting up with that  for long enough, and the constant freezes were the last straw.
So lately I switched to using Chrome.  I had it installed some time back but never used it as a primary browser like I intend to now.  I gotta say, the snappiness and absence of stalls is refreshing.  In fact, VERY REFRESHING.  VERY!  I'm reminded of an article that I can't remember the details of but it concerned people getting used to having to reboot Windows to solve problems, and expecting software to basically suck... all because that's the only experience many people can have.  Can't really fault them for not having money to own multiple computers with different operating systems for comparison.  Even I don't feel like I have the time to, say, migrate to working on a Mac when what I have works (most of the time).
Anyhow, Chrome is good.  I'm going to keep using it for the time being. It's STILL missing a few things that I grew to depend on in FF, especially these add-ons:  Downthemall, DWhelper, and TreeStyleTabs (and to some extent Google Toolbar).  Nothing available for Chrome approaches the level of the FF versions.  If either of them get their act together (what I want available in Chrome, or FF fixing their performance fiasco, though hopefully both), then I will re-evaluate.  Until then, I'm going to be stuck doing most stuff in Chrome and certain things in Firefox.  A bit of a sad state of affairs.

2011-06-21

More reboot nonsense

So yeh, I'm to blame for continuing to use the free Adobe Acrobat PDF viewer when there are so many other, probably better, certainly less bloated PDF viewers around.  But it was convenient, been using it for over a decade, many sites that generate PDFs helpfully suggest you get it, and they're the creators of the format giving an extra false feeling of competence.

Anyways, it just gave me another notification that an update was ready so I let it update.  After installing, it told me I have to reboot my computer for the changes to take effect.  I'm sure it's got something to do with that accursed windows registry or something similar because for the life of me I can't think of a good solid reason for a PDF viewer to need a system restart.  I know they're not the only software that requires a nonsensical system reboot.  Why after how many versions of Windows do we still need to reboot when non-system/kernel/hardware changes are made?

2011-05-19

Reboot-itis

I almost popped a vein the other day with Windows 7 again.  It drives me NUTS that it will auto-reboot (post-update) without your permission and no matter what you have running.  In fact, I find that policy downright unprofessional.  I know they think it's to "protect" the users and perhaps for the vast majority of them maybe there is some benefit; benefit as much to Microsoft as to the user.  You see, if they step in as if they were you're IT department forcing you to do it their way for you're own good without choice and in the process manage to actually cut down on exploits and infections, then in the public eye Windows looks good even if they do it in a big brother fashion. 

But at least have the decency to let us turn that bloody "feature" off with a simple option click.  And I don't mean "Turn off auto-updates" because then you'll just be nagged.  And I don't mean scour Google for registry hacks and third party software that sometimes does the trick but sometimes not.  I mean an honest to goodness checkbox that says "don't reboot automatically until I say so".  Not only do some of us not need it, but it actually interferes with us.  My sis sometimes needs to work remotely from her main home machine when she's away and she's completely fucked if her machine decides to reboot and she's not around to turn it back on and run the proper software.  Poor thing has had to call relatives to break into her home to turn it back on.  And the answer should not be "oh she should install x, y, z, buy u, v, w and edit o, p, q to have l, m, n started upon boot and ...".  She's not an IT professional.  The simple answer is "Don't shutdown without my permission!", nag me about it later if you must.

While I'm at it... 20 years later and you still need to reboot for what feels like every little freaking thing.  A driver here, a service there, registry setup change over yonder.  What is it about the system that makes it impossible to just stop-service start-service restart-service and once identified to FIX IT? 

(Granted, it's gotten a lot better and it's not always their fault)

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.