Ben Tsai

Mainly technology.

Jul 30, 2012

XOXCO - Is it time for password-less login? #

My personal solution to the too-many-password problem is to use completely random, automatically generated password when I create an account. Most websites will allow me to stay logged in forever, and on the odd occasion that I need to log in again, a password reset tool will send a link to your email account that will allow me to login again. This way, I don’t really have a password, but I can always gain access to any account, as long as I still have access to my secure email account.

That's an intriguing solution to a problem that everyone online has. I think I'm going to start doing this for all of the passwords I've been using a throwaway password on:P

Jul 26, 2012

The Art of Lean Software Development

At a recent internal technology summit, one of the mantras that was preached was Lean. I'm excited to see how this practically plays out. This is coming from the top down, which hopefully means real change will occur.

I just finished skimming through The Art of Lean Software Development, which I found in our company library. It's a short read (about 100 pages). It provides a concise overview of the origins of Lean and then covers various practices that you can employ to incrementally adopt. The first few practices are more low-level and hands-on:

  • Source code management and scripted builds
  • Automated testing
  • Continuous integration
  • Less code

Those are pretty well understood and accepted, regardless of what specific methodology you are using. The second batch of processes that the book mentions are:

  • Short iterations
  • Customer participation

These practices are a little softer and require more team participation. They are more interesting to me since I have less experience with doing this on a team. Customer participation is particularly difficult to employ because it requires buy-in from many parties, and ones that developers don't typically have access to&emdash;customers.

The book concludes with a single chapter about next steps, and mentions a few more areas to dig deeper in. It briefly talks about Kaizen, value stream maps, other lean techniques like Kanban. I think value stream maps and kanban are worth exploring for our team. There's a certain benefit to visualizing progress, making it concrete.

Most of the content of the book was a review of what I've already read. My perspectives slightly changed about how Lean fits in with Agile. Originally, I put Lean underneath Agile as another methodology. But actually, Lean has different roots from Agile and the famous Snowbird meeting. And, as a methodology, it is more descriptive than prescriptive. It can be applied across business functions, and in fact, ought to be. That makes it even more exciting that we have a mandate from senior management to put this into practice.

Jul 25, 2012

Sheet music, DNA, and source code #

John D. Cook makes a very astute point about the nature of software:

Not only is DNA not source code, in a sense even source code is not source code! Source code in the technical sense, a set of computer language files used to build a program, is not source code in the colloquial sense of “everything you need to know.”

And also:

Practically speaking, it takes far more than source code to be able to maintain a program, especially if you want to come up to speed quickly. There’s always extra knowledge needed outside the code. This extra knowledge may be so widespread within a community as to be invisible. It’s still there, though it may take someone outside the community to see it.

The fact that there is "extra knowledge" that is not communicated through the source code is big deal and important to recognize. How do we capture the tribal knowledge that accumulates as a project progresses? How do we open the walled gardens of communications among the team? How do we keep track of the gotchas, tips and tricks and minutiae of working on, building, and deploying the software?

Most of the tools and processes software developers use daily attempt to address and alleviate this issue. Version control stores the history of code changes and provides the ability to annotate those changes. Bug tracking keeps track of defects and communicates what the problems and fixes are. We have daily standups, kanban boards, chats, emails, wikis, post-it notes - a huge range of forms of capturing and sharing information.

Jul 18, 2012

Download a local NuGet repository using Nuget #

I was setting up a development environment on a remote server today, and due to the security constraints on the machine, I wasn't able to reach the official NuGet feed. After some searching, I found the Nuget.Downloader package, which allows you to download all of NuGet locally!

Because NuGet allows you to specify a local folder as a source, all I had to do was

  • run the Download-Packages -top 100 command (to get the top 100 most popular packages)
  • copy the folder up to my server
  • point NuGet package manager to that folder
Jul 10, 2012

Get a transparent, Quake-style Windows console with ConEmu #

After reading Hanselman's post about ConEmu, I installed it and tried briefly to customize the UI a bit. The menus and options are ultra-confusing, so I only got so far. Thankfully, Josh Earl did what I was hoping someone would do: he made a sweet looking configuration and posted the details.

Now I've got a Quake-style Windows console at my fingertips. And yes, Quake style slide down is actually an option in ConEmu's latest builds, so it's safe to say it will remain pinned to my taskbar.

Jun 27, 2012

Getting Vim Pathogen to work

After much stumbling around, I finally figured out why installing mru.vim into Pathogen wasn't working for me. It was this small comment that finally got me to realize the problem:

Yes, the root of each set of runtime files must sit in bundle.

I had created a directory in my bundle directory called mru, and inside of that I put mru.vim. The problem is, since this is a plugin, it needs to go into a plugin folder inside of there.

Jun 25, 2012

Vi in the Cloud #

This is pretty neat: an implementation of Vi in the browser. You can open files from multiple sources, including Dropbox. In fact, I'm writing this post using it right now. It looks like it uses another project called filepicker.io to handle files. After authorizing my dropbox and opening this file, I was able to save directly to dropbox by issuing a :w. Things will get really interesting if you can configure it to load a .vimrc from Github or something...

Jun 25, 2012

Introducing Prose: A Content Editor for GitHub #

Yet another project that involves reducing the friction of writing Markdown in a blog. This one is GitHub-centric. You authorize it with GitHub, and it manages your Jekyll site. From the Getting Started page:

Prose is similiar to iAWriter as it is also using a minimal interface for editing Markdown, but it’s web-based and uses Github for storing your text so your writings are more than save and Github keeps a history of every saved version. So Prose can potentially be seen as a whole new way of sharing documents online, while utilizing the usual suspects Markdown and Github. Oh and it’s free and open source.

It looks pretty, too.

Jun 19, 2012

VBScript for creating a shortcut

I wrote some VBScript for the first time in my life. Here's a script that creates a shortcut on the desktop, based heavily on the answers here. It's pretty rough, but does the job for now:

set objWSHShell = CreateObject("WScript.Shell")

' First argument is the name of the shortcut
' Argument 2 is path to target
sScriptDir = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
sShortcut = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(0))
sDesktop = objWSHShell.SpecialFolders("Desktop")
sTargetPath = objWSHShell.ExpandEnvironmentStrings(WScript.Arguments.Item(1))
set fso = CreateObject("Scripting.FileSystemObject")
sTargetDir = fso.GetParentFolderName(sTargetPath)

set objSC = objWSHShell.CreateShortcut(sDesktop & "\" & sShortcut) 
objSC.TargetPath = sTargetPath
objSC.IconLocation = sScriptDir & "Slick_icon.ico"
objSC.WorkingDirectory = sTargetDir
objSC.Save
Jun 1, 2012

Automating SQL Server 2008 installations #

While waiting for SQL Server 2008 to install after walking through a Confluence page full of screenshots of the setup wizard and thinking to myself, "there has got to be a better way," I did a simply DuckDuckGo search for "automating SQL Server installation" and came across this post. Presumably, the wizard basically produces a INI file which you can hand to the setup.exe. This is awesomer. Thank you, Sidharth.