Tuesday, September 2, 2008

Chrome

I posted some cynicism, speculation and first gut reactions when I heard about Chrome earlier today. 

Well I fired up one of my old XP pc's that doesn't get too much action these days and downloaded Chrome. This post is being made on Chrome.

My first 10 minute reactions...

Quick download and install.
  • Nice minimalistic feel.
  • Fast rendering, on a clunky old pc that normally feels pretty slow. Not a very technical benchmark, but call a spade a spade, it is much faster then IE7 on the same machine.
  • Good, modern HTML rendering and CSS support (ala webkit)
  • Open New Tab, shows a most visited sites, with a similar feel to Opera's speed dial.

More to come...once the Linux version is available.

Browser Wars2?

Is it a browser? Is it an OS? Its, its, its Super Google Browser.

http://googlesystem.blogspot.com/2008/09/google-os-is-actually-browser-google.html

Eventually I'll take more time to think about what this means for people like myself creating web based applications. For now, the first thing that comes to mind is please no Browser Wars 2. 

For the sake of all of us that waste so much time, effort and productivity trying to make compliant based html and css look good in each browser, the initial "oh shit another one to worry about" outweighs my initial "oh wow!". 

Some parting concerns...Google is about advertising. Google is about collecting data. A Google OS/Browser thing-a-ma-bob sure has the potential to know an awful lot about me. This is sure to feed fuel to the 'Google is evil', 'Google is big brother' conspiricy fire. 

And finally, a tongue-in-cheek thought...if Fedzilla, in the United States versus Microsoft case accused Microsoft of abusing monopoly power by bundling thier "OS" with their "Browser", and the big "G" now bundles thier "OS" with a "Browser" (Google OS Is Actually a Browser), and they already dominate the search market to boot...hmm

Thursday, August 28, 2008

You're blind ump

Two of my favorite things: systems, and baseball. Since I was a kid, I've always been fascinated to learn how things work; my mom didn't own too many kitchen gadgets that hadn't been taken apart by yours truly a time or two to understand the inner workings. Old rotary phones, TV's, radio's, record players, nothing was off limits for my research. Ah, the excitement and joy found during one particular experiment that involved getting the operator on the other end of a radio speaker that was jerry-rigged into a house hold phone line...good memories. As a foreshadow to the rest of this post, my first year at an engineering college even included a modeling and design class that had a 'high tech' project in modeling the feedback controls for a fictitious futuristic system to tell if a tennis ball was in bounds or not :-) Fun stuff.

Also, since a kid, I've loved the game of baseball. To this day, my favorite thing to listen to on the radio (yes some of us still enjoy listening to games on the radio) is a baseball game. The majority of the time I turn on the 'bube' is to catch part of a game. There is just something about baseball that I find so much more enjoyable then other sports. Some of my favorite memories of 'play time' with my kids involved seeing how many neighborhood kids we could fit in the minivan and going to the local field for a few hours. I'm not talking about parent hyped and sanctioned little league here, just pure unadulterated pick up baseball without enough people to even cover all the positions. The pick up games don't happen so much these days, but the radio and tv still bring the pros playing out my favorte pastime almost every night from spring to fall. 

Well today, two of my favorite things combine. You would think I'd be excited. But, I'm not. 

At least for me, these two have always been separate things. When I have enough technology for the day, baseball is a great past time. But the idea of mixing the two just feels wrong. To be fair, its already been happening for a while; pitching speed guns, big high tech scoreboards and 'jumbo tron' screens. But nothing to date that actually effects the real time outcome of todays game at the moment. Especially since the big screen to date usually just shows some silly kissing cam instead of replying controversial calls.

Today baseball starts using instant replay to tell if a home run is really a home run. Personally, I like the chubby middle age guy standing in the middle of the field or behind the plate waving his finger in the air.

Yes, even being a Mets fan and knowing what happened in Yankee stadium this year when even umpire Davidson said after the game “I f*cked up”. Yes, even after one of our own called for instant replay help early in the season in Miami. I still think its wrong.

Bad calls are part of baseball. I realize we are not talking strikes and balls here, but whats next? When I go to a ball game I expect bad calls. “You're blind ump, you're blind ump. You must be out of your mind ump”; its part of the fun. We fans have done it for years. Its like hot dogs, peanuts, cotton candy, and bringing your glove to the game for a foul ball, even if your seats are upper deck by the left field four pole.

I know the managers voted 25 to 5. I would guess most professional players would vote with the same percentage. Other fans I've talked to seem to be in similar percentages. But, I'm one fan saddened by today's changes to my favorite pastime.

Tuesday, June 17, 2008

Opera 9.5

Opera 9.5 is finally available! I've been running the beta version for a while and have been pretty happy. The final release has a little more polish and has so far been perfect. It feels like I've been running it for days already, but I think the official download was only like a day or two ago...what can I says, my days are very long right now as we get iZoca ready for our beta clients.

I've been an Opera fan for a couple of years. I think I started becoming more interested somewhere around the same time they decided $0 was a better price point that something crazy like $30. Opera is my browser of choice: consistent and good css support, performance, great tab support, speed dial, etc.

9.5 has all that we've come to know and love about Opera, but feels to do it all a little faster. There is additional support for some CSS level 2 specifications, and now also includes some CSS 3 specifications like text-shadow. How cool is that. Oh, well if you didn't see anything cool about that "text-shadow" thing, then you'll need to download Opera 9.5 and take a look again :-) You can get a complete look at the CSS 3 support over at the Opera 9.5 page.

One of the things that I still regularly go back to Firefox for is the great tools available for web developers. Opera is getting better at this though. I've been using their new set of developer tools in beta for a few months. Its code named Dragonfly, and is part of 9.5. There is still some catch up, but I like what I'm seeing and find myself opening Firefox when developing a little less then I used to.

I'm also a fan of the Opera email client, M2. It got a bit of an upgrade as part of 9.5 also. There is also an upgrade to the mail database as part of this install. The mail search features are amazingly fast and powerful. M2 uses a single indexed database approach, with filtered views for browsing through mails. This is little different to the traditional folder based approach that a lot of other mail clients use. At first you may ask yourself how can this mail be available in 3 different folders all at the same time. The short answer is that the folders are just "views" of the mail data. Its pretty powerful once you experience it and get accustomed to it.

So far, not single issue to report. The only real problem that I never found a workaround for while in beta was some flaky behavior when connecting to some public wi-fi hot spots that force a bunch of http redirection just to get started. That seems to be corrected 100% as of the official release.

Thursday, June 12, 2008

git, svn and our current dev workflow

At iZoca, we are currently working in a distributed development environment, using a hybrid workflow that utilizes both subversion and git. There are already quite a few blog post out there of how people are integrating git into their existing subversion based development workflow, and most of our approach has been learned from reading these.

However, we've had some small hurdles to deal with when it comes to freezing rails versions and plugins, and applying patches (either our own, or from the community) back into these plugins before they make it back into their respective master branches. We've also had some small hurdles just figuring out the workflow that feels the best for keeping rails versions and plugins up to date. So, I thought I'd share the approach that seems to be working best for us right now.

First to set the background. Like most people that have a hybrid subversion/git workflow, we are primarily using our subversion repository as our "staging" repository if you will for our deployment and as a push/pull like conduit for getting and keeping everyone's local git masters fresh.

We are following the common recipe of using git-svn as our bridge. This recipe is pretty well documented (a quick 'git svn google' will get you some examples) The recipe goes something like this:
cd my_rails_app

git checkout master <<== get yourself to master  

git svn rebase
<<== make sure master is up to date

git checkout -b my_new_feature_branch


test, code, fix, test, code, fix...

git commit -a -m "my new feature stuff" <<== maybe preceded by some individual git add x, git rm x

git checkout master <<==I think you got it now, we are switching back to the master branch

git svn rebase <<== get any newly committed changes to the shared master trunk
git checkout my_new_feature_stuff <<== switch back to the feature branch
git rebase master <<== attempt to apply our changes on to the latest trunk of code
fix conflicts if any

git checkout master

git merge my_new_feature_branch <<== bring our new feature into the master (maybe --squash if there were a number of individual commits to get this branch done and we want them to show as a single commit)
git svn rebase <<== make sure things are good
git svn dcommit <<== push our modified master up to subversion trunk. This is the basic day in day out workfow. Some of the assumptions being that "git master" and "svn/trunk" are analogous to one another. If you are working on code that is from an origin other then trunk (like subversion branch/Version_x_y_z) you will be working in a local git branch that you create by: git branch local-branch_x_y_z VERSION_x_y_z


The workflow above is basically the same with local-branch_x_y_z playing the part of master. Once your bug_fix_branch, small_feature_branch is merged back in, you probably want to keep things tidy by cleaning up when your done:

git branch -d my_new_feature_branch
So, this is all pretty well documented and seems to be the approach working best for most using a subversion / git hybrid approach. As I mentioned earlier, the hurdles we've had are usually related to plugins and vendor/rails versioning and sourcing.

One of the problems is that the common approach for those using a git only workflow is to use sub-modules for managing externally versioned and maintained sources. So, lets say you want to include the version of rails you are using within your project instead of relying on installed gems; freezing rails as we all know it. Well, one approach is to "git clone" the rails branch/master(edge) you want directly into your vendor directory. The problem here is that now within your project, you also have another complete git repository; remember, git clone gets the whole repository and history. So, you could always choose to just include a depth of 1, but you still got a repository within yours. Additionally, if you try to treat it as a git submodule, well then "git-svn dcommit" is going to have a problem the next time you rebase/dcommit. There are some published work around to the git-svn dcommit/rebase bug.

But, when I stepped back and looked at things with iZoca, I questioned if submodules were the right answer even if they worked with git-svn. The problem is that we want to be on the edge. We want to be active in the community. We want to contribute to open source, collaborate, and naturally harvest the benefits of what others are doing with open source. And, no matter how we slice it up, when we step back and look at it, submodules doesn't seem to be the answer for us (even if they worked with git-svn.) It seems like this approach works well if you want to freeze to a particular version, and at sometime in the future pull latest features, or checkout latest branch. But, for actively working in any of these projects, work feels more like monkey patching then it should...at least to us it did.

We are taking a bit more of a distributed development approach with these external projects. Rails, Rails plugins, javascript frameworks, etc. can simply be archived back into their respective locations in our core application by the respective developer that happens to be working with that source. They will maintain separate project folders outside of our core application that are clones of the source they work with. They can pull, branch, diff, patch at will in this project and collaborate with the community at large without interfering with iZoca proper. When changes from this work are ready to come into iZoca proper, the respective developer can simply:

git archive the respective project branch back into iZoca proper, run the test and call it a day.

From an iZoca perspective this "copied in" archive just becomes part of a local iZoca git branch changeset, and then merged back into master when ready. This lets the iZoca core branch stay a little less complicated.

The alternative to having submodules, with multiple branches all taking place within core branches at various versions all seems a bit more complicated then we want it to be, even if it worked with svn. Maybe I just don't comprehend submodules properly to begin with, but the approach we are taking now seems to be working well.

Not every developer will necessarily have a clone of each of the plugins, or even rails all of their own. It all depends on what they will be working on, contributing too, etc. We don't try to keep a centralized version of each of these separate repositories, because it kind of goes against the grain of distributed version control anyway. Depending on the scope of each of these projects, some may even be forks of github repos, but it isn't a requirement.

Rails prefers diff patches via Lighthouse, so a github Fork of Rails doesn't really seem necessary for this kind of work. But, one of our developers at some point in time might find that helpful and it doesn't really matter. The point is at some point in time we may need, want, desire to get their branch of plugin xyz into our core iZoca master to fix or enhance something. And when we do, the developer that needs, wants, desires the fix or pull of a recent change set can either collaborate with another developer that is familiar with that plugin or section of rails and get a diff patch from that person, or works on the that source themselves in their local branch of that respective project, and then when done simply archives the result of that patched plugin into a local branch of our core iZoca application, tests, then merges and eventually git-svn dcommits.

An example of the archive/copy...lets assume that I want to fix a bug in some_cool_plugin.
Well, I would either have or create a local git clone of some_cool_plugin:

git clone git://github.com/rails/rails.git
or if I already have the clone:
git checkout master

git pull
git branch my_fix_to_some_cool_plugin

test, code, fix, test, code, fix

git commit -a -m "patching bug with my cool hack"

git checkout master

git pull

git checkout my_fix_to_some_cool_plugin

git rebase master
git format-patch master --stdout > my-cool-patch-file.diff

#email patch or submit via lighthouse, or git push to forked github
#then for me to archive my latest patched version of the plugin back into our core application
#before the patch has been officially approved or committed back to the plugin/or rails master
#we can do something the following:
git archive --prefix=some_cool_plugin/ HEAD | (cd ~/scott/Projects/izoca/vendor/plugins && tar -x)

This gets the latest patch code, without including the .git repo, back into our core application branch to then be committed, merged and dcommitted just as normal.

Hope this approach helps somebody else, it seems to be working pretty good for us right now.

Friday, June 6, 2008

Opera spellcheck in OpenSolaris

Opera will use your gnu aspell install if you have one to implement spell checking. I seem to be having some problems with my aspell package install however.
So, "pfexec pkg install SUNWaspell SUNWaspell-en" seems to finish, but I don't see any aspell libraries installed anywhere. Hmmm. broken package maybe? I guess I don't know enough to suggest a broken package, I just don't see any results from installing this.

So, switch gears to blastwave:
pfexec pkg-get install aspell aspellen

now i have my aspell libraries under /opt/csw/libaspell*

So, lets link them under /usr/lib so that Opera and others can find them:
ln -s /opt/csw/libspell* /usr/lib/

Open Opera...ahh, we have spell check.

ls colors OpenSolaris terminal

The default gnome-terminal experience in the OpenSolaris install is lacking colors; at least for my personal preferences. But, I just alias my default ls to the gnu version in my bashrc and away we go...

add this to you .bashrc
alias ls='/usr/gnu/bin/ls --color=auto'