2013-10-29

Git-er dunn

So I'm a late-comer to this version control phenom called Git.  Up until basically a couple weeks ago I'd been mostly tied to Perforce for work and for my own private or local small things I'd maintain my own SVN server repo and for single one-offs even used RCS simply because it was quick and dirty and there were emacs came with bindings by default.

Oh, I was aware of Git and did some reading on it over the years and had the interest, just never had a need until recently.  I basically created the need and have been playing with it for a couple weeks now.  The need came about because Perforce licenses cost money and at work if you aren't doing development on something in Perforce for a sufficient amount of time, they "threaten" to pull your license.  Actually it's not a big deal because I can always just get a new one.  Still, I didn't like getting the notification.  More than that though, was this company-wide push to migrate towards Git from Perforce, SVN and the others.  Now that I've been using it, and given what I've read about it, not only do I understand the move but I wholly endorse it and wish I had used it before and pushed for it at my previous job. It might be the novelty and "shiny new toy" effect but I think it's pretty slick, albeit slightly obtuse in learning since it has some significant points of deviation from what I've used before and requires some re-thinking.

Initial highlights for me are:
  1. Split location development
  2. Promiscuous committing and branching
  3. Speed and Offline work

Split location development

The primary "oh, this is actually cool" feeling came when I realized that it may solve my split development-environment problem (at least the mechanical part).  What I mean is, I do/did development on different machines such as laptop and desktop and other remote machine.  I'd usually had some helper scripts and such to rsync things back and forth and keep track of what files I changed in each, always at risk of clobbering some work I had done.  It was really kludgy but necessary.  It was just easier and more convenient to develop on my laptop but I was limited because the gobs of data I needed to run on or the other needed tools/services/libraries were on the servers which my desktop could have access to but that I couldn't bring locally to my laptop.  Currently, I'm experimenting with a Git setup where my desktop pulls and pushes from the main repos on the servers, and my laptop pulls and pushes to my desktop.  So far it seems like a great way to keep things aligned and with commit changes and history preserved, made possible by branching and merges being first class features of the system.

Promiscuous committing and branching

This was new to me in terms of typical work flow.  Since branches and merges were kind of painful in the other version control systems, and because even checking work back in to a central repository with others was a time-consuming process (with regression tests, locking, merging, code-reviews, etc),  I'd basically work on many multiple things in the same checkout and check them in en masse with a single description just so I didn't have to do it as often.  Now I see I can do many local and -- more importantly-- annotated commits which is nice for collecting clusters of work related to the same goal and keeping track of change history.  And as well, I find myself now separating different work goals into different branches, even disposable ones, knowing it is still organized and relatively quick and painless to re-merge especially since it will be with myself only. In effect (if not in actuality) I get to be the repo owner and all of the benefits that entails.

Speed and offline work

I really like that I truly get to work locally.  No waiting on a central repo.  I hate when people spout nonsense that free wifi is everywhere and we're never without a connection.  Even with your own mobile wifi hotspot you don't always have a connection.  Just ride the BART for an hour like I do and see what percentage of that time you have an uninterrupted signal.  It's not that I don't wish I had uninterrupted wifi all the time, but I don't want the lack of it to gate me from being able to be productive when I'm a poor offline user.  Just as important, I really don't always want to be VPN'd into work either, which is extra annoying because I have to dig out and use a password-generating dongle to VPN in.  This is especially frustrating on e.g. BART where interrupted signal can kick me off of VPN every few minutes in some areas. Poo.  The side benefit is that since the whole repo is local and I don't need to consult with the central repo for every little thing, it's really fast.

All of this is well-known to Git users.  There are other bigger philosophical and paradigm shifting things connected to it as well.  But this is what effects me.  I hear that it was a bit more painful and/or confusing to use in the early days so it's probably just as well that I only pick this up now that it has passed the mass adoption phase.  To many I'm sure it's just another version control system, so what, we work fine with the old method, it suits us better, less to learn, the are workarounds to ease the pain points with the old system, it's still improving, etc. etc.  For me, little things like this that sort of optimize some annoyance out of existence or greatly reduce it still excite me.

Wow, nearly two years of nothing. Blame life.

I had an itch to write a few rare posts on some things techy and so I go here to look and the last entry was at the end of 2011.  Ha!  There main reason is that basically 10 years of a normal person's life got squeezed into the last 2 years = New + {wife, kid, house, job} and everything associated with them {moving, immigration, doctors, lawyers, insurance, hunting, etc}. Since this is a lonely page, it's very low priority, and noone else cares, but it's time I start scratching some of those itches.

Well, amongst the accumulated things tech that are significant are:
  • I use a Mac now.  It was the result of the job change.  I've never used one prior to last year.  I mean I've touched them and toyed with other people's... but never my own as a primary machine.
  • I hardly ever code now.  That's a bit of an exaggeration but not by much (partly because I'm not sure whether to count SQL in there). Another job switch thing. 
  • I'm still stuck writing Python when I do code, and all the things I hated about it before are still present, but I've bended to acknowledging that it benefits from better inertia and there are some interesting modules around for it that I can't seem to find the equal of in e.g. Ruby.
  • I'm in a position where I have to use new software tools and in a more structured environment which I'm finding interesting, though sometimes frustrating.

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.