A Blog for Wilcox Development Solutions| blog.wilcoxd.com
An Architecture Notebook Sometimes changes in a codebase are straight forward, sometimes they require a bit of research and investigation before some kind of architecture or design document is created. GToolkit is often where my architecture notebook is created, but lately the power of Org Mode compels me - sometimes providing better integration…| blog.wilcoxd.com
The quest for request makers As a backend developer I’m often looking to make some one-off requests to test new API endpoints, or to explore some returned data. In the past I’ve used curl directly, or Postman. Postman turning into an enterprise collaboration tool is fine, (or even a cli runner) but in general its gotten to feel too much for simple…| blog.wilcoxd.com
Rash and Unix Exit Codes I continue to play with Rash as a language for small shell scripts I know I’ll have to enhance over time. Through it I discovered something interesting about Rash. In Unix a process returning a non-zero exit code (often called status codes or exit status codes) mean something’s gone wrong. Sometimes the program will print…| blog.wilcoxd.com
GToolkit provides AST analysis tools for Javascript & others! Let’s see how much we really use a dependency! The problem with any package used in Node.js is knowing where and exactly how much of it is used in a project. From there we can estimate effort and come up with a deprecation plan. Luckily GToolkit to the rescue! The Desire to Understand…| blog.wilcoxd.com
A long while ago I - Ryan Wilcox - wrote an article for Toptal on Behavior Driven Development (or BDD). I’ve learned a lot in the years since that article was published, so time for a revisit of the entry (which can no longer be found online). Introduction: What is BDD Behavior Driven Development, from it’s own wiki: BDD aims to bridge the gap…| blog.wilcoxd.com
The term “software artifact” is often seen as being about only the runnable bits of a program: what’s the steps to getting ideas to bits running on machines. However, as you move through aspects of the software development lifecycle various (non-executable) artifacts are created - even in Agile environments! To me the important part about any…| blog.wilcoxd.com
Intro In a long standing blog patterns start to emerge. I’m interested in what I call ”Systems Level Programming“. By “Systems Level…| Wilcox Development Solution's Blog
My Personal History with Early Blogging Tools: From Jan 15, 2002 until Feb 18, 2009 I kept a personal blog with Radio Userland. Radio…| Wilcox Development Solution's Blog
DuckDB Explorations: Approaching data persistence in exploratory situations In software, I believe exploration and experimentation means a delicate balance of just enough infrastructure, easily changed decisions, simplicity until the last possible moment, and as small a complexity surface area from your tools as you can manage. In my work using…| blog.wilcoxd.com
Leading Technical Change across the Herd. Software has evolved from a team activity to teams activity: multiple teams, each with their own Microservices, where a single user request’s calls a service which then calls another service to look something up, which calls another service, etc. A single request may spawn many requests inside the…| blog.wilcoxd.com
Some Background: The Remarkable tablet The Remarkable is an e-ink powered device that leans into writing as an experience. I often refer to it as the “infinity notebook”: in the UI you create notebooks which have pages, which you write on. Instead of a stack of notebooks I have my Remarkable. Important to my purchase was the ability to get…| blog.wilcoxd.com
Intro In June 2023 I explored intermediate functional programming patterns in JavaScript. That article gave the following kinds of functional programming: Personally I’ve come to the - somewhat incremental but somewhat not - kinds of functional programming: Declarative data transformations: someArray.map( (x) => x+ 1): much better than a for loop…| blog.wilcoxd.com
Note: previously I tried to keep personal stuff off this blog, and have that be on another site. I decided to revisit that decision, and now…| Wilcox Development Solution's Blog
I draw a lot of diagrams at work. What makes it kind of worse is that now a days I’m very cross-platform: while I still enjoy the power duo…| Wilcox Development Solution's Blog
In grooming and backlog refinement in software we find ourselves breaking functionality into epics, which then have many stories, and - from here I like to break stories explicitly into behaviors, or at least acceptance criteria. With stories classified into epics you may be able to, upon completion, see the larger business functionality, and where…| blog.wilcoxd.com
Introduction We’re all familiar with the idea of technical debt in software, where the velocity of development is hampered by code not being ideally suited for the task at hand. Maybe the task changed, maybe an engineer had an idea that didn’t turn out so well, maybe the data model forced an unnatural shape. for more on technical debt O’reilly has…| blog.wilcoxd.com
I finally did it: I moved this blog to Gatsby This blog has made its second transition: first, from MovableType to Wordpress, then from WordPress to GatsbyJS. This is a simple blog, and while it has some history, it’s one developer, posting infrequently, with no real comments and - really - no real reason to have it dynamically hosted on Wordpress…| blog.wilcoxd.com
How to quickly iterate on your private Node libraries You’re fixing a bug and turns out the problem is in some private library of yours! You fix the bug in the library, but are you sure ? How do you test it in your application locally!?? First, a word about Node module resolution In general Node module resolution traverses up the directory…| blog.wilcoxd.com
Intro Functional programming means different things to different people. Personally I’ve come to the - somewhat incremental but somewhat not - kinds of functional programming: Declarative data transformations: : much better than a for loop, especially as you add primitives like filter or select into the mix. Build on the provided blocks! Traversal…| blog.wilcoxd.com
Playing with GToolkit’s Lepiter Notebook and its support for Node.js cells One of the components of GToolkit is Lepiter, a knowledge base excutable notebook. Each notebook page has many cells, and these cells can be lines of text, blocks of code, pictures, interfaces to Jenkins, Wardley Maps, (now) GraphQL queries, and many other things. One of the…| blog.wilcoxd.com
Introduction CircleCI recently announced an extension for Visual Studio Code, allowing you to view the status of your CircleCI pipelines. I decided to run this tool for a week to evaluate how well it would work for a mid-sized development project. The result? It’s neat, with significant drawbacks, but might be a timesaver if you’re also in Visual…| blog.wilcoxd.com
My 2021 Year In Books 2021 saw a lot of reading and thinking and - mostly, except towards the end - not a lot of new tech. However, like those Spotify Year Wrapped playlists, I thought I should make a blog post on what books I read over the year. Because fun. For work: Range Scaling Scrum Across Modern Enterprises Practical Hapi Success In…| blog.wilcoxd.com
I made a video about how gtoolkit’s Wardley Map functionality works. Check it out, on Youtube: Link| blog.wilcoxd.com
For early stage experiments I like deploying to Heroku. Heroku’s free model will spin down servers that haven’t gotten traffic in a while, and none of my free experiments have enough continuous load to require anything more. When I set up a Heroku app I usually set up Cloudfront as a CDN and S3 as a blob storage. Heroku is already just a layer over…| blog.wilcoxd.com
Today I had to use the CSV Node Module. It looked like the best and most mature of the alternatives. The disadvantage about it is that the examples - especially for taking Javascript objects and getting a CSV string out - really leave something to be desired. To combat this I wrote a simple Node program to illustrate how to write CSV files with the…| blog.wilcoxd.com
A client of mine contacted me the other week. He lives in NYC, and was hit as part of Hurricane Sandy. The trouble with all the relief efforts is that it’s hard to know what to do. What is your organization doing to help, and are there things you can do to get involved. He explains it best: Over the past several months a few developers and I have…| blog.wilcoxd.com
Today I decided to record what my workflow is when I get a new potential project. Maybe you’re a new client and what to see behind the scenes what goes on when you say, “Ryan, can you do this project for me?“. Especially if this is your first time working with me For most of my client projects I use a tool (being released today, I believe) called…| blog.wilcoxd.com
Today I ended up writing a white-paper in which I collect links for early startup people. Particularly, early, non-technical, startup people. My standard operating procedure, next time I hear a pitch about some startup needing a technical co-founder for equity, is to send them to this whitepaper. I’ve helped a lot of startups and small businesses…| blog.wilcoxd.com
A client wants me to write an import task for their Django app. They already use Fabric to deploy their site, so I figured that writing this script as a Fabfile would work out well. The script requires me to import classes from their Django app. Specifically, I’m doing queries against their domain models, and adding things to the database, and I’d…| blog.wilcoxd.com
I spent some time last night giving node.js a serious looking at. I was looking for best practices from the node community, and didn’t find any resources there. So I dug and wrote my own. Initially this was for internal research, but it seemed too good to keep secret. So, I present: Node.js: research, analysis, and best practices| blog.wilcoxd.com
Lately there’s been a lot of buzz in the Rails community about using the Presenter Pattern to organize common view related code outside of the model. Think of Presenters like Helpers: The Next Generation I used Presenters on one project with great success. Today I was about to add presenters to a second project, when I said: Self, you could copy…| blog.wilcoxd.com
Today I wanted to post a Gist from the OS X Services menu. Because I love Services. I use Services probably a dozen times a day. Call me crazy. I found a Gist service, but it’s broken. It didn’t work for me, don’t really know why. Tried to write my own (using Ruby’s TempFile), but that didn’t work either. (Nothing was written in the temp file. I…| blog.wilcoxd.com
Sometimes I find myself with more work than I can handle, or internal work I want done but can’t do myself. Today, I decided to fix that problem I’ve created a subcontractor survey on my website. If you do consulting work (mostly around the web sphere: Ruby on Rails, Django, front end design work using CSS frameworks and Javascript.) How It Works…| blog.wilcoxd.com
Today I did a poll, using PollEverywhere to get a feeling of the Ruby on Rails communities favorite CI server PollEverywhere limits responses to 30 for the free version, and 50 for one pay level up. I spend the little bit of money to get the additional responses And here they are: Jenkins wins by a wide margin (50% of the participants). Looks like…| blog.wilcoxd.com
One of my projects has a problem: while we all try to be in the office for scrum, sometimes we can’t all be. Maybe one person is in the car and can’t talk, maybe another person is on the subway… maybe another person has the day off (but the team needs to know their status). So I started working on a website to take care of these things, and used…| blog.wilcoxd.com
My title here at Wilcox Development Solutions is Owner, Chief Engineer and Master Toolsmith. The last part is because I love making tools that make other people faster. In every project we have the project itself, but I also encourage you to create a tools folder in your project, to keep items that might not add business value, but add programmer…| blog.wilcoxd.com
BBEdit is a pretty awesome editor. While I’ve moved to TextMate for most of my text editing, I’ll occasionally come back to BBEdit because it has the tools I need. In a magazine article I once compared TextMate to a M*A*S*H style surgery theatre, and BBEdit to a hospital operating room. There’s a lot of time I really need it done (M*A*S*H style…| blog.wilcoxd.com
Want to feed XPath expressions into jQuery in Firebug? Me too, so I wrote a bookmarklet: jquery-xpath-ify| blog.wilcoxd.com
So I decided to switch things around and write a sample application in Django. I started a simple project management / bug tracker / projects-have-many-todo-items app. Hopefully in the near future I can spend some more time on this example app, for example actually finishing up more than just the project level screens :) Find it at (in a Mercurial…| blog.wilcoxd.com
So I’ve noticed there’s not one central place for Turbogears newbies to go to see a bunch of sample applications. I’m trying to fix that. To gauge interest, and as an easy/no hassle way to collect all these links, I started a public Google Doc that lists all the Turbogears examples on the web that I know about. Check it out at: Turbogears Examples…| blog.wilcoxd.com
When I first designed the Wilcox Development Solutions website it was meant to say one thing, stylistically: I design simple, clean websites that look functional. It was 2003 after all: things should look simple. We still have people on 56K modems, running Internet Explorer on the Mac, and nobody’s really figured out a good way to do layout, anyway…| blog.wilcoxd.com
I’m playing with Turbogears 2 more and more, and as part of this process I wanted to improve and codify my process for getting a new TG2 app up and running. I also really like virtualenv, and am learning to love pip (mostly for the ease of requirements.txt). I also know that the Installation for the Impatient make me, well, impatient. Ughh,…| blog.wilcoxd.com
The other week I created Email Form Relay: a Google App Engine app to make it really easy to implement a “Contact Us” style form. As web developers we find ourselves coding “Contact Us” forms alot. In addition to having the form to write, we also have the backend logic to deal with: gather up the TO information, from, subject, body and send it off…| blog.wilcoxd.com
So I’m on a Rails project, we use Git for source control, and we have a team policy of good test coverage (validated by a CI server - specifically CruiseControl - running tests and alerting the team on a failed build). Day to day we do work on feature branches which we later merge to the master branch when that sub-system (ticket) is complete. My…| blog.wilcoxd.com
I find myself writing more and more sample projects for Turbogears 2. These sample projects are actually meant to be read by going through the commit history with GitX and reading the commit messages and reading the diffs. Anyway, I’ve posted another one, on the form technology in Turbogears: Sprox/FormEncode. Clone it from its Github Repository| blog.wilcoxd.com
Turbogears uses Python’s logger module to perform logging operations. This has an advantage (it uses Python’s logger module) and an disadvantage (it uses Python’s logger module). Be that as it may, here is the simplest configuration possible for you to log to a file (by default TG logs to your STDOUT device, which might not actually be what you…| blog.wilcoxd.com
If you have a batch of Applescript .scpt files to convert into text, do NOT use the command line tool. You use this tool like so: If your .scpt has high ASCII characters in it (like Applescript’s line break character, the Ã?¬) the .applescript file you get out will not have your high level ASCII line break. Which breaks the script if you turn…| blog.wilcoxd.com
This is a test to make sure I have the blog up and working| blog.wilcoxd.com
I’ve been doing a lot of Ruby on Rails Cucumber testing, and was inspired by the simplicity of controlling the flow of executing by matching on regular expressions. The idea behind cucumber is you write English steps and assertions to test a web app. Plain English means just that: no “tell box 1 of window 1” almost-english-but-not-quite, and not…| blog.wilcoxd.com
Today I’m proud to announce a product launch: Experienced Man’s Guide To Cross-Platform Programming with wxWidgets. When I buy a computer book I write notes in it. Sometimes these notes are back and forward references, sometimes I found a bug in something and I write the solution down, sometimes something behaves one way one place and another way…| blog.wilcoxd.com
Today I got distracted by Review Board, a tool to help companies do code reviews. Because I was too lazy to deal with the dependancies I decided to look for a virtual machine for Review Board, all configured for me. This was probably a stupid idea in retrospect. I found a virtual image provided by rPath/rBuilder with (come to find out) no…| blog.wilcoxd.com
I’m starting something new on this blog - along with my normal content, I’ll give out book recommendations on topics or languages. I’ve got a pretty big bookshelf, and i pick the best of the best and list them here. So, now on with my first topic: Python! Python In A NutshellA BIG nutshell, a great reference book. The sections on performance…| blog.wilcoxd.com
So I need to update my website a bit. After a bit o reorganization and backend rework. But, in the spirit of Useful Information Now, I’m going to make it easy for people to see my reputation online. For right now it’s just wxWidgets links, because I’m out of time (and I do have a decent sized presence in the wx community), but I’ll add more links…| blog.wilcoxd.com
Intro A mid-2010s style MERN stack separates out backend and frontend concerns into separate deployable units (which we’ll call “projects” here), resulting in an architecture that looks something like this for a consumer web app with admin backend: In this diagram we have four projects: “Consumer Microservice”, “Consumer Frontend”, “Admin…| blog.wilcoxd.com
These days most of my analysis - or even short scripts! - start in GToolkit. GToolkit’s paradigm of executable notebooks - with human viewable results - means I can write a script, do my business logic, and not focus on display formatting (much). Awesome! As part of my weekly bujo review I want to list all the PRs I’ve closed, on Github, in the…| blog.wilcoxd.com
I’ve been working with Jenkins quite a bit lately. When I set up a system I want it to be as reproducable as possible: you can never trust hardware, especially when it’s virtual. I found Accenture’s Jenkins Docker configuration . It’s super good, especially as a basis of sample code. Based on this code I was able to install and configure plugins…| blog.wilcoxd.com
Scaling Specialized Expertise Modern software engineering is very enabling to an individual engineer, but with that enablement comes complexity. Likewise, even in areas we would consider “old news” the complexity of admistrating, operating, and interacting with those systems doesn’t go away. When you’re dealing with optimizing that Postgres query…| blog.wilcoxd.com
Introduction: Setting the stage Years ago I explored writing system level tools in Groovy. The idea here was to create OS independent, easily deployable programs for use in systems level tasks. Hint: for me this usually means “A binary I can easily install as part of some CI workflow but that also won’t mess up whatever the developers are doing in…| blog.wilcoxd.com
In this DevOps world deployment diagrams help document not just how a system relates to other components, but how the underlaying infrastructure configuration is structured. For example, if your application requires a database and a storage bucket on a cloud provider, that requires configuration in a cloud account. The problem with these diagrams…| blog.wilcoxd.com
Some senior+ developer roles have a lot going on. In my work I had many inputs happening concurrently: meetings, Slack messages, email, and my current Jira ticket work. Sometimes a meeting might spawn 4 different next actions that I would need to handle. I developed a finely tuned sense of urgency: Is this new task important enough that I have to…| blog.wilcoxd.com
Intro For a good sized microservice herd it’s important to know how these services relate to each other. How much internal traffic does X service get, what’s the order of the microservices from the user’s request point of view, etc etc. Drawing this diagram shouldn’t, but often is, engineers “just knowing” the system in their heads then putting it…| blog.wilcoxd.com
Intro Ansible is a configuration management, multi-machine task running, DevOps automating declarative devops tool. I’ve used it for things so varied as developer machine setup, thought about using it as an abstraction layer over plain Dockerfiles, and as a task runner for CloudFormation automation. Ansible breaks configuration up into “playbooks…| blog.wilcoxd.com
Intro In my earlier software projects and planes of growth I posited that software projects have five steps of growth: foundations, testing, specialization, process, stabilization, and self actualization. I talked very little about what stabilization means in that article, and I’m going to define it a bit here. Stabilization looks different for…| blog.wilcoxd.com
A few days of vacation for me usually means a time to relax, recharge a bit, do things with the family, catch up on TODO items, and play with new tech I’ve been meaning to play with or make progress on projects of my own. Today I experimented with GToolkit a moldable software analysis framework built on top of Pharo Smalltalk. What I really want is…| blog.wilcoxd.com
Introduction In my previous blog article I said: This is the topic of a future blog post: roads and feature capacity of microservice herds. Which will be a much easier conversation to have now that we understand microservices, cliques, herds, products, teams, and how enterprises mash those concepts up in different ways. Before that we need to…| blog.wilcoxd.com
Herds of microservices, flocks of people, and those that take care of them I’ve been in big enterprises, as a day job, for almost 6 years now. I’ve also been working on, and growing, a large scale microservice architecture (about 150 microservices) for about 18 months. In one way microservices give large enterprises the ability to split large work…| blog.wilcoxd.com
The Problem In 2020 I realized I had a problem. I was in four different OSes: Windows, Linux, iOS and some Mac OS X. This wasn’t so much a problem, except that I would find myself with the following problems: The tool I wanted to use wasn’t in the environment at hand I wanted a good shell, no matter where I was I wanted a good CLI experience, and…| blog.wilcoxd.com
Introduction Containers give us a way to package software and ensure that the software etc we expect installed is, in, fact, installed. We are back to the days of a single binary to run your application, even though we all know there’s a language runtime, third party dependencies, and half a Unix userspace in that carefully crafted container. But…| blog.wilcoxd.com
Introduction I’ve been playing with Gatsby.js. Gatsby is a static site render that uses React and GraphQL to make neat sites that a modern 2016+ web developer is gonna love… then render these sites to plain ol’ static HTML. So I started building something… My goal: render my reading notes into a website I’ve kept a wiki for a long time, and have…| blog.wilcoxd.com
This weekend I took the time to play with Bitbucket Pipelines, a new feature from Bitbucket. Often, my goal with my setup is “get something simple up and running simply”. This is why I like hosting on Bitbucket (free private repositories), and the pipeline’s feature now lets me get a simple CI pipeline up, without involving extra tools. With a…| blog.wilcoxd.com
Introduction Posted on this blog as comments may be insightful. My other - more personal - blog doesn’t have comments, so this one will have to do. I’m hoping future comments will be helpful getting this running on Ubuntu 18 or something I’m interested in text editors again. My main driver for the last 5(??) years only runs on OS X, but I’m not…| blog.wilcoxd.com
I’m constantly looking for new innovations that I can use on brown-field projects. You know the ones: you come in and there’s a large engineering investment in a project, so architectural decisions have been made, and to change those decisions would require large amounts of capital (both political and money capital). So we have legacy code. But we…| blog.wilcoxd.com
I like Puppet with Vagrant. Puppet 4 removed an option I really liked: You see, often when I’d start a greenfield project, I’d include a so getting a new developer set up is one command. I’ve talked about this in the past. Now-a-days I want to keep my puppet scripts in a folder, organized and slightly away from the main code. Because I’m boring I…| blog.wilcoxd.com
Introduction: Setting the stage Lately I’ve found myself turning to Groovy for — oddly enough — system level development tasks. This is an unexpected turn of events, and seemmingly mad choice of technologies to say the very least. Why Groovy?: I can’t assume OS (so Unix command line tools are out). One of my recent tasks involved something pretty…| blog.wilcoxd.com
A Vagrant setup that supports my blog entry on “Vagrant / Puppet and Hiera Deep Dive”. Below is a reproduction of that article. Introduction This weekend I spent far more time than I’d like diving deep into Puppet, Hiera and Vagrant. Puppet is a configration/automation tool for installing and setting up machines. I prefer Puppet to other…| blog.wilcoxd.com
In 2010 ago I wrote My Base Rails Setup. I looked at it again and it looks pretty dated. The Rails community changes a lot in just 3 years. Here are the tools I run into with frequency on Rails projects, and some notes where that has changed from the 2010 tools of choice. Over the last 3 years I’ve done full time, then part time, consulting, mostly…| blog.wilcoxd.com
As a long time Rails consultant, every new Rails project I come on to I go through the same dance: Does this project have a useful ? Maybe with setup instructions? No? Just Rail’s default ? Shucks. Does this project have a database.yml file? No? Great. Does this project have a sample database.yml file I can copy and get sane defaults for this…| blog.wilcoxd.com
Intro In the last several years Apple has been pushing us Cocoa developers away from thread based concurrency. Thread based concurrency tends to be bug-ridden, ceremony filled, and just unpleasant code. There have also been some changes in the wider world of development that have changed how we as developers thing about concurrency. Today there are…| blog.wilcoxd.com
I’m doing more Django work and find myself contrasting how Rails does things and how things are done in Django. Routing is one of those things. Both Django and Rails want you to use their systems to dynamically create URLs to other places on the site, instead of hard-coding the path in the part of the tag. This makes life easier both now and in…| blog.wilcoxd.com
First of all, my blog is now back up! Instead of self hosting my Wordpress blog, now the fine people at ZippyKid host it. These guys are awesome: taking a mess of an import and making it Just Work. A+++ WOULD DO AGAIN Now, back to real news… The Problem: Security in Rails: Say hello to the secure boss (different from the old boss) Because of some…| blog.wilcoxd.com
Introduction I really enjoy using Vagrant to do my development. I’ve even posted my Base Vagrant Package. But I found I was still doing the same things over and over again: setting up postgres, and setting up the RVM. Yes, I had automated 80% of my “get a new Rails box up”, but that extra 20% eluded me. Today I said, “No more” I’ve improved on my…| blog.wilcoxd.com
Introduction to the Problem Capistrano is the standard way to deploy Rails apps. Yesterday I was using Capistrano to deploy to a machine where I had installed RVM (Ruby Version Manager) at the system level. I manually set up Ruby 1.8.7 and Ruby 1.9.2, because I need to run two applications on that machine (one a Ruby 1.8.7 app and one a Ruby 1.9.…| blog.wilcoxd.com
In my last blog article I talked about Returning HTML content from AJAX requests. However, I’ve been struggling with a question since then: I asserted (implicitly) that the following (and canonical!) pattern for doing AJAX replacement is wrong. I felt this strongly, but why is it wrong? First, the current pattern Normal Rails pattern for HTML…| blog.wilcoxd.com
The problem: semantic formats for returned HTML for AJAX In a previous Rails 2 project, we decided that Rails apps return 3+ kinds of content: A complete HTML page, for user viewing JSON (for JS/web API viewing) A partial HTML page, for jQuery DOM swapping/ However, it was hard to know when to return a full HTML page, and when to So we invented a…| blog.wilcoxd.com
Installing Radiant with Passenger (Standalone), RVM and Launchd on OS X Introduction - why Passenger Standalone I like to deploy all my basic sites on the same host. For example, deploying a Radiant site along with a few small Rails sites on the same box. This keeps things easy for me, and no sense devoting a lot of resource if I know the site will…| blog.wilcoxd.com
Intro: What is Passenger, and why I want to use it I seriously want to love Passenger Standalone, I really do. Certain client projects of mine could use the increased speed, and I’d love to use Passenger Standalone for production deploys too (more on that in a future article). But it seems like I’m running into every problem under the sun…| blog.wilcoxd.com
Since starting Wilcox Development Solutions I’ve understood two things: Programmer time is expensive - indeed, prohibitive - to most people or companies. When people buy expensive things they want to know where their money went. Even at the grocery store you get a big long receipt with your purchase, and programmer time will set you back many…| blog.wilcoxd.com
Git flow is awesome, and accomplishes everything you might want easily. This is (part) of an email I sent out today about the patterns git flow sets you up for, and what that means. The Broken Build > Hi guys, > > Can you guys huddle and see about getting the build working again? > > Thanks! > - Ed The Manager My Response I think it’s important to…| blog.wilcoxd.com
Over this weekend I read some of W. Edward Deming’s Out Of Crisis. Deming was a man credited with the success Japanese industry had after World War II. I’m 100 pages into the book and have already pulled out much information Saturday I read: … Next day, in one of his plants, a superintentant showed me two pieces of a certain item from two different…| blog.wilcoxd.com
I’m going to start a new practice. Before I even do an estimate for a client, I’m going to ask: Which is more important to you: having it done by a certain date, or having all your features 100% complete? Two extremes: I’m dealing with a client right now that has a very firm, but internal, sense of when they want my current project done at. I’ve…| blog.wilcoxd.com
I’ve been working with Rails for 2 years now, and I’ve developed a collection of tools I really like. I’m going to share these with you (eventually I’ll make a Rails template for them, but not now). Normal Application Stack will_paginate formtastic: this really cuts back on the amount of HTML I have to write, and, having the input type defaulted…| blog.wilcoxd.com
Tonight I was debugging something for a client. Our Rails app uses SyslogLogger to log to syslog (instead of the files in log/*.log, like Rails is set up by default. We think there are some wins using syslog). I was trying to debug why some logging statements would show up, and some didn’t. In fact, and weren’t working for us. These correspond…| blog.wilcoxd.com
The Intro, and the frustration So SVN’s command line interface could be a lot better. Specifically, svn diff. Use case: I update and see a change someone else has made. I want to see what modifications they made relative to what it used to be… how do I do this? The answer using the straight svn command line is so: Figure out what revision the file…| blog.wilcoxd.com
So, after trying to install ReviewBoard on a virtual machine (and failing), I decided to install it on my real server, a machine running Debian PPC (sarge). Eventually I got it up and running, but here are my notes: I decided to run it off fastcgi (asking apt-get to install lighttpd pulled in tons of other software I didn’t want… and I didn’t want…| blog.wilcoxd.com
So Rails has a feature called “migrations”. The idea here is that your database will change over time and you need a way to change this incrementally as the project changes and new requirements come up. So essentially your database moves through time. Rails also has a feature where you can define validations for a field at the model level (aka…| blog.wilcoxd.com
The release of a new book from one of my favorite authors gave me incentive to write this list. Techno-geekery Fiction Because I read so quickly, for me to spend any length of time with a book requires the book to be pretty massive… as in around a thousand pages. These books fit that bill, in a very technological setting (or diving into very…| blog.wilcoxd.com
Introduction BackgrounDRb is both a blessing and a curse. First, it allows you to farm off work to other Ruby processes, so that your main process can get back to the work of serving your client (before a proxy timeout). All kinds of things can be done: re-encoding data, doing long queries, importing data. You can query BackgrounDRb to see what the…| blog.wilcoxd.com
Update: Yikes, I hit the Post button before I really wanted to! So you’ll get to see more of my revision process than normal. Sorry about that. It also might be incomplete when you read it, as it might take me a few days to finish it. So I haven’t been posting here - or anywhere - a lot. That’s because I got a full-time contract doing some Ruby On…| blog.wilcoxd.com
Here’s a fun gotcha when creating commands for TextMate: if your command’s output is set to Create New Document on output, then that output must be either free of high level (extended) ASCII characters, or UTF-8. If your output doesn’t conform to this rule, the new document populated by TextMate will be blank. Nada, nothing, just blank. Try this…| blog.wilcoxd.com