Blog
-
09 Nov 2024: This week, I had the privilege of attending a hand-on workshop about leading innovation. It was a packed 3-day schedule and I learned a lot both from the material and...
-
What Makes a Good Standard Operating Procedure
06 Oct 2024: What is a Standard Operating Procedure? In software operations, we use standard operating procedures (often called runbooks) to describe how to mitigate issues. These are procedures to mitigate issues that...
-
The Integration Test Partial Workflow
05 Feb 2024: This post is part of a series on the IronPLC deployment and integration pipelines. This topic describes the integration test workflow. Strategy The integration test workflow ensures compatibility between independent...
-
19 Nov 2023: This post is part of a series on the IronPLC deployment and integration pipelines. This topic describes the version partial workflow. Strategy The version partial workflow increments the version number...
-
Continuous Deployment for a Visual Studio Code Extension with Language Server Protocol
13 Nov 2023: Continuous deployment is the automated delivery of software into production environments. Continuous deployment goes one (big) step beyond continuous delivery because there are not manual approval steps. But continuous deployment...
-
Systems Engineering Reading List
04 Nov 2023: One of my favorite topics is the behavior of medium sized systems. Medium sized systems are those that are too big for analytical techniques and too small for statistical techniques....
-
27 Oct 2023: just is a cross-platform task runner. I use just extensively to define the build tasks for IronPLC, in part so that local builds and the continuous integration builds are as...
-
27 Oct 2023: just is a cross-platform task runner. I use just extensively to define the build tasks for IronPLC. I use just so that my local builds and the continuous integration builds...
-
10 Aug 2023: I read a descent amount and am often asked to recommend great books to read. I’ll try and share some of my all time favorites. (There is a bit of...
-
06 Apr 2023: Meetings are expensive. If you are going to meet, it “pays” for everyone to know the objective. It helps you decide who should be there. I think it is useful...
-
24 Mar 2023: The usual definition for engineering is the application of science and mathematics to solve problems. Implicit in that definition is that problems inherently have trade-offs. Let’s make it explicit: engineering...
-
15 Feb 2023: One more for the catalog. Naked Emperor Principal It is better to know that you are not wearing clothes rather than believe you are dressed when you are factually naked....
-
15 Feb 2023: A joke for the catalog. Boring Principal Important things are best done in a way that no one notices — Garret Fick Coined by myself as a joke. I had completed...
-
Machine Learning Models as Hypothesis
07 Sep 2021: It is common when describing neural networks (a subset of machine learning) to use the character \(h\) as the output from a perceptron, as in: \[h = g(a)\] h here...
-
21 Aug 2021: I often find myself referring to these but sometimes forget the name. Now if I could only remember I have a list… Ockham’s razor or Principle of Parsimony Entities should...
-
15 May 2019: Making mistakes is not fun but it turns out that mistakes are often very good learning opportunities. While on vacation, I got to spend some time thinking about some mistakes...
-
Fork-Friendly Node.js Travis CI Configuration
19 Apr 2019: I’ve been recently contributing to CloudSploit’s scans and gotten a few changes merged in. Their current usage pattern is to use Git to obtain the code an run it on...
-
14 Apr 2019: Domain Driven Design: Tackling Complexity in the Heart of Software - Eric Evans - Bounded Contexts Enterprise Integration Patterns Building Microservices: Designing Fine-Grained Systems SOA Patterns
-
21 Mar 2019: I’m trying to communicate with the OpenPLC Linux SoftPLC via pydnp3. In this setup the SoftPLC is operating as the outstation and my code in pydnp3 is operating as the...
-
Dependency Track with Postgres and Docker Compose
20 Mar 2019: I’ve recently been investigating Dependency Track for understanding risks in third-party software that we use. To make things easy, I’ve been running locally via docker. One lesson is that you...
-
19 Mar 2019: OpenPLC uses a particular format for binding variables to addresses. It took a bit of digging around, but I’ve finally figured out what they mean and how OpenPLC interprets the...
-
08 Mar 2019: OpenPLC supports DNP3 on the SoftPLC platform (except for Windows). This post describes how I was able to interact with the DNP3 slave (outstation) running on Linux SoftPLC. This post...
-
Hello World for OpenPLC and Modbus on Windows SoftPLC
01 Mar 2019: My explorations into PLC runtimes has taken me to discover OpenPLC. The goal of this post is to explain how I was able to deploy a “Hello World” project running...
-
08 Feb 2019: I’ve been experimenting with tools for benchmarking AWS deployments. One tool I experimented with is (prowler)[https://github.com/toniblyx/prowler]. However, it doesn’t seem to run nicely under Windows unless you have cygwin. After...
-
23 Dec 2018: A perceptron is a linear binary classifier. That is, it is an algorithm that takes a vector of inputs and produces a single true or false value representing whether the...
-
07 Oct 2018: What happens when there is a page fault? (start) │ ┌───────────┐ ┌───────────┐ │ VPN │ ┌───────┴────────┐ │ ┌───────┴────────┐ │ │ │ Find on disk │ │ │ TLB update │...
-
02 Oct 2018: Spin locks a ubiquitous tool used to implement synchronization on multiprocessor systems. Algorithms for Scalable Synchronization in Shared-Memory Multiprocessors gives a good overview of various spin lock approaches, but it...
-
Testing Asynchronous Behaviour in Java with Countdown Latch
09 Sep 2018: The popularity of reactive programming in Java (such as CompletableFuture) mean that multi-threaded programming is increasingly common. This can cause problems for unit testing because developers sometimes rely on timeouts...
-
Sterlings Approximation for Factorial
25 Jul 2018: Sterling’s approximation for the factorial function, even for small values of x. Out of my own interest, I wanted to know how accurate it is. \[x! \simeq x^{x} e^{-x} \sqrt{2...
-
Safe Multi-master Primary Keys
23 May 2018: A common database design practice is to use auto-incrementing (unsigned) integers as the primary key for a table. While there are other approaches, such as UUIDs (GUIDs), integers have several...
-
23 May 2018: I’m been working my way through a number of Docker training (tutorials). In the past, I had always used Docker on Mac, and it was pretty easy to follow the...
-
20 May 2017: Josephus Problem describes a counting-out game where you progressively remove (kill) people by their position, until only one person remains. For example, take a group of 10 people, then kill...
-
11 May 2017: Libraries for C++, C# and other language frequently provide tuple objects as an easy way to create n-pairings of items and objects, for example std::pair and System.Tuple. Because they are...
-
11 May 2017: A pretty common problem is to get the top N items from a group from a SQL database. For example, suppose you wanted to get the last order for each...
-
Using Terraform to Build Heroku/S3 Site
07 May 2017: I have been playing around with Terraform, and decided to try to use terraform to build a staging environment for this site. (In fact, I actually already had a staging...
-
06 May 2017: The program below is a simple example of testing whether two strings are isomorphic. Isomorphic means there is a straight mapping between the two strings. This example uses a simple...
-
28 Apr 2017: Quick select is an efficient algorithm for finding the k-th item in a list. The following is a simple implementation to find the k-th smallest item from a list of...
-
19 Apr 2017: The following is a simple algorithm to merge two sorted arrays. Merging two sorted arrays is essentially the same as a single round in merge sort. If you were implementing...
-
19 Apr 2017: The following is a simple example for now to convert an integer to a string (doesn’t include error checking, sign detection, non-base 10). #include <cstdint> #include <iostream> #include <string> ///...
-
Setting up a October CMS environment with Vagrant and Heroku
20 Mar 2017: OctoberCMS is an interesting CMS platform build on Laravel. There is a great official tutorial on how to setup OctoberCMS with a Vagrant box using the quick install approach. That...
-
Page does not exist - Installing GCC on Mac
23 Feb 2017: Oops. I think this page may have moved. Maybe you want Installing GCC on Mac.
-
Using Redis as Django Worker Queue on Heroku
20 Nov 2015: Heroku documentation recommends using Redis Queue to setup worker tasks. But for me, that document was pretty incomplete for how to setup Redis Queue for a production Django application. This...
-
20 Nov 2015: Suppose you want to use the latest and greatest version of GCC on the Mac because you want to use features in C++11 that are not yet available in XCode....
-
Development Process - From None to Not None
07 Nov 2015: A pretty common question I’m asked is what kind of R&D process we used (and I implemented) at my last company. The question is enormous because it covers at least...
-
Passing the YCombinator Interview With No Preparation
13 Oct 2015: For me, applying to and interviewing for YCombinator was a whirlwind experience. We applied a few days after the deadline and then didn’t hear anything until 5 days before we...
-
Split Windows and Linux Configuration
25 Sep 2015: This is part 4 of a 4 part series on how to setup Django locally on Windows and deploy to Heroku. Introduction Setup and Run Django+Heroku Locally on Windows Change...
-
Setup and Run Django+Heroku Locally on Windows
19 Aug 2015: This is part 2 of a 4 part series on how to setup Django locally on Windows and deploy to Heroku. Introduction Setup and Run Django+Heroku Locally on Windows (this...
-
Setting up Django Locally on Windows and Deploy to Heroku
19 Aug 2015: Setting up Django 1.8 with PostgreSQL to run on Heroku - that’s straightforward. Just follow the official Heroku documentation Getting Started with Django on Heroku. But what if you want...
-
Change Django from SQLite to PostgreSQL on Windows
19 Aug 2015: TODO fix the link at the bottom of this page! This is part 3 of a 4 part series on how to setup Django locally on Windows and deploy to...
-
Practical Trello for Small Team Software Development
14 Aug 2015: For small software teams on a limited budget, Trello can be a really good tool for keeping track of and planning work. Since Trello isn’t designed for this task, it...
-
06 Aug 2015: My big personal news in February was undoubtedly that I was leaving National Instruments to join a startup, SnapEDA. So it must be equally big news to announce in August...
-
Difference Between IEnumerable and IList
10 Sep 2014: During a code review, I recommended changing a return value from IList to IEnumerable. Is there any real difference between these two interfaces? In fact, there is one huge difference....
-
Web Analytics Lessons from ShanghaiPRIDE 2014
10 Aug 2014: This presentation analyzes ShanghaiPRIDE web analytics information from 2014 to understand how visitors use the website and prioritize development task for 2015. Directly download the presentation.
-
Rotating and Changing the Color of an Image with CSS3
07 Aug 2014: For the menu system on the website I’m working on, we want to have a triangular icon that indicates the item has children. The items themselves are stacked vertically and...
-
The Surprising Performance of Values
31 Jul 2014: Sometimes you find yourself needing to iterate over all items in a Dictionary. And in those cases, sometimes you don’t care about the keys - you only care about the...
-
Custom Failed Assert Information for the VisualStudio C# Test Runner
14 Jun 2014: I was recently debugging an intermittent test failure that would only occur on a machine I couldn’t access, so I wanted to output some additional information about the test failure....
-
19 May 2014: In the last post, we saw that IDs link things together. In practice, you could use anything for the IDs, as long as both the ID and the reference are...
-
30 Apr 2014: For the group I work in at National Instruments, every piece of code we commit is reviewed by at least someone else. I’ve wrote before about why I think code...
-
Object Versus String Hashing for Dictionary
28 Mar 2014: A question came up while reviewing some code that I needed to answer before I gave the feedback. What is faster: adding objects or strings to Dictionary(TKey, TValue). I was...
-
Simple Sliding CSS3 Animation2
07 Mar 2014: The website I’m working on uses a responsive design and the mobile layout has the menu hidden along the side. We want it to slide out when the user clicks...
-
How to Resolve Use Lambda Expression
14 Feb 2014: As someone relatively new to C#, I don’t always think of the simplest way to express my intent. We use Resharper in my workplace and it is quite good at...
-
Shelve-Review-Unshelve Workflow
22 Jan 2014: At National Instruments, we review every piece of code (or at least for the project I work in). Nothing gets checked in without a second (or more) set of eyes...
-
StyleCop Example Custom Rule Project
13 Nov 2013: A project I’m working on uses StyleCop to automatically enforce a set of style and consistency rules. It took some time for me to get a project setup because the...
-
06 Nov 2013: I’ve been consuming some information about choice, or more accurately, about the proliferation of choice. Harvard Business Review: More Isn’t Always Better The Economist: The Tyranny of Choice - You...
-
OECL Dictionaries and Element Relationships
05 Nov 2013: An OECL file aims to be a complete description of a component or an entire library of components. Dictionaries It does that by defining a series of dictionaries that describe...
-
Open EDA Component Library Introduction
29 Oct 2013: Finally I can talk about the longest and biggest project I have ever worked on: OECL. So what is it? Well, let’s start with the name. OECL stands for Open...
-
18 Oct 2013: It isn’t like I haven’t merged before, it’s more I never really really thought about it. When you doing a three way merge between branches, you have three files, and...
-
Lookup Table For Faster Character Checks
15 Sep 2013: Some time ago I wrote some code to check if a character was a valid VHDL identifier. The rules for a valid identifier are somewhat complex and so checking with...
-
Visitor Versus 'is' Cast in C#
03 Sep 2013: Obviously C# is not C++, and so it is important to not simply assume that things true in C++ are also true in C#. A good question is the cost...
-
Remove Built-in Formatting Styles in Word
12 Aug 2013: When I write documents in Microsoft Word, I make extensive use of styles because they are the easiest way to ensure that your document has a consistent formatting and that...
-
13 Jun 2013: It isn’t hard to notice how HTML5 and WAI-ARIA seem to conflict each other. They often provide elements and attributes that seem to do the same thing. In some cases,...
-
28 May 2013: I suspect that when most people hear that I’m a software developer, they immediately picture some stereotypical antisocial nerd who relates better to machines than to people. I’m sure that...
-
What Can Go Wrong Open a File for Writing
27 May 2013: During a code review, I requested an intern to add a try-except block for some file handling code. (The language happen to be Python, but that isn’t really the point.)...
-
Accessible HTML Link to Call a Phone
21 May 2013: You can find lots of information about how to create HTML links to call a phone number. The syntax is essentially <a href="tel:NUMBER">NUMBER</a>. Most examples however would not work for...
-
Recharging a China Unicom Phone
19 May 2013: Note It is much easier to recharge now via Alipay or Wechat pay, but not all foreigners have that setup quickly. I haven’t tried this method in quite some time,...
-
Conditional Logic is Bad in Unit Tests
23 Apr 2013: I’ve follow the mantra that branch points in unit tests are bad practice, but I’d never tried to give specific reasons why it is bad practice. If you think about...
-
What's Wrong With unsigned unsigned_val = (unsigned) double_val?
19 Apr 2013: During a code review, I was asked why I wrote the following C code: double dval = ...; uint16_t uval = (uint16_t) MAX(0, MIN(dval, UINT16_MAX)); If I am going to...
-
Physical Examination of Foreigners
19 Feb 2013: After months of work, and repeated setbacks, I received my Chinese Z visa just 2 days before my earlier booked flight. The final delay in the work visa was Physical...
-
Should You Use DATE_LONGDATE or DATE_SHORTDATE?
13 Feb 2013: The Windows API provides the GetDateFormat and GetDateFormatEx functions for formatting time information into the appropriate locale specific format. Using the function, you can decide whether to return the date...
-
Messages for Exceptional Errors
01 Feb 2013: One of things I really like about the Windows User Experience Interaction Guidelines is the expression of error messages. Microsoft phrases this as “problem, cause, solution.” In fact, the idea...
-
Settings, Preferences, and Schemes Oh My!
31 Jan 2013: Terminology in Windows can be a quite confusing. What exactly is the difference between customization, options, personalization, preferences, properties, schemes, and settings. The Windows User Experience Interaction Guidelines has some...
-
How to connect to AWR Design Environment Component API from C++
16 Jan 2013: AWR Design Environment has a COM API which you can use to extend the product. COM is easy to use from .NET languages, but requires a little extra work to...
-
Conventions are Important for Understanding
14 Jan 2013: While at the gym this past week, one of the staff members kindly informed me that I was using weights in a room where weights were not allowed. Surprised, I...
-
Page Not Found - Sending Faxes Back Home
01 Jan 2013: Oops. I’ve changed the focus of my blog and the page you visited doesn’t exist anymore.
-
Page Not Found - Registration Form of Temporary Residence
01 Jan 2013: Oops. I’ve changed the focus of my blog and this page doesn’t exist anymore.
-
How to static_cast std::unique_ptr
01 Jan 2013: I’ve been writing a lot of code using std::unique_ptr, new in standard library changes for C++11. One of the thing the library doesn’t provide is a way to cast std::unique_ptr,...
-
Page Not Found - Engineering Technology for Social Change
01 Jan 2013: Oops. I’ve changed the focus of my blog and this page doesn’t exist anymore.
-
07 Dec 2012: Last time I posted about why you should prefer streams to buffers. That post was motivated by some work I asked of an intern. I asked her to use the...
-
std::find_if with C-style arrays
06 Dec 2012: It is probably less well known, but many of the C++ STL algorithms can operate on containers and C-style arrays. The evidence is that few examples cover C-style arrays. But...
-
Why Should You Prefer Streaming to Buffers?
04 Dec 2012: I’ve been working with the xmlwrapp library on GitHub for parsing XML in C++. For parsing XML, it provides two interfaces. The first one takes a file name and the...
-
01 Dec 2012: An earlier post of mine describes the purpose of skip links. Now that you want to implement it, what is the best way? Searching online gives lots of options and...
-
Breadcrumbs and Web Accessibility
27 Nov 2012: I’ve decided to give a talk on web accessibility in a few months, in particular, on how to make web pages accessible. I’ve spent time trying to make this site...
-
Measure String Extent in non-UI Code on Windows
23 Nov 2012: A common problem I’ve had is measuring text (strings) that will be drawn to the screen from code that knows nothing about drawing. The problem is that the measure text...
-
Gaining Software Developer Experience
22 Nov 2012: I was recently asked for advice on taking a first step in to the real programming world. After studying software programming, how do you make that transition to actually work...
-
19 Nov 2012: I’ve been looking at the IPC-2581A specification for representing PCB data. The XML format defines quite a few shapes, including octagons, but I was intrigued to find that octagons in...
-
17 Nov 2012: I’m at Intro to Web Accessibility at Accessibility Camp Toronto. I’ve tried to make my website accessible, so what have I done wrong? I’m sure there is a lot more,...
-
09 Nov 2012: After finding out that our table topics member was in the hospital with appendix problems (how selfish!), I had to quickly come up with some table topics. Thankfully, Abby provided...
-
Easy Improvised Speaking Topics
26 Oct 2012: I’ve blogged before that I participate in a speaking club in my workplace. One part of our activities is giving short improvised speeches, similar to Toastmaster’s TABLE TOPICS™. Over the...
-
23 Oct 2012: HTML has tags that are useful for giving additional semantic meaning to text. They are particularly useful for describing code or instructions for using a computer, although I’ve rarely seem...
-
HTML5 time for Joomla templates
04 Sep 2012: HTML5 has a new time element. You can use it simply to identify parts of your document that describe a date/time, but the most useful part is you can use...
-
Keyboard Shortcuts for Running Windows 8 on VirtualBox for Mac
03 Sep 2012: As soon Windows 8 was released, at least for those of us with MSDN licenses, I installed it on Virtual Box since I use a Mac at home. After running...
-
08 Aug 2012: I wrote this a couple of weeks ago, but apparently forgot to hit the publish button. So far, in my list of goals for my website refresh, we’ve seen the...
-
18 Jul 2012: A couple of months ago, I ran another video series at work, this time about unit testing. Honestly, this one was less interesting than the design video series. But this...
-
18 Jul 2012: The last few posts (and probably the majority of the next few) are likely all about HTML5, metadata, schema.org and Joomla. That’s because I’ve decided to “convert” this site to...
-
Display Specific Joomla Template with URL Parameter
15 Jul 2012: For some reason, finding this took an enormous amount of time today. I started writing my own Joomla template, and wanted to see my site in it, without changing my...
-
Automatically Show Image for Paragraph using CSS
14 Jul 2012: This is an old post that has been converted to a new format. The original image does not show, but the technique is still valid. My experience writing web pages...
-
Error 3480 for Captured Variables when Nesting Lambdas
11 Jul 2012: Sometimes you need to nest C++ lambdas, for example if you have an outer and inner for loops and you want to use std::for_each to show that you intend to...
-
Setting up Eclipse CDT on Windows
03 Jul 2012: I wanted to compile my own version of libxml2 on Windows using GCC and the Eclipse CDT environment. (You can also use the Visual Studio project included with libxml2, but...
-
03 Jul 2012: I’ve recently been investigating how to better attribute articles on this blog to myself as the author. I know I write them, but how do I communicate that to the...
-
Interviewing is Like Speed Dating
19 Jun 2012: I was the humorist at our speaking club today. I gave a humorous talk about interviewing. Interviewing is kind of like speed dating. You’ll meet a lot of people in...
-
Improved Design Pattern for Unit-Testable Event-Based (SAX) Parsers
18 Jun 2012: Previously, I wrote about a design pattern for unit-testable event-based (SAX) parsers. At that time, I had used the pattern for a couple of parsers, and found it to be...
-
Design Pattern for Unit-Testable Event-Based (SAX) Parsers
14 May 2012: Note Some improvements to this article are described in a later blog post. Read this one first, then head on over to the later blog post. Recently, I’ve been looking...
-
Lambda Expressions as Class Member
29 Apr 2012: Recently I’ve been refactoring code to make it unit testable. Due to the way the code words, I needed to create a stub that included some unit test assertions. In...
-
25 Apr 2012: Today was my turn to give a main speech for the speaking club I belong to/help run at work. I spoke about online personal branding which is part of the...
-
Multithreading Bug in Main Thread Code
13 Apr 2012: Is is possible for code that is only executed in the main thread to behave as through multi-threads were accessing the code? To help answer the question, assume you are...
-
31 Mar 2012: I wrote the first draft of this post at the beginning of 2012 as an experiment - to see if I could keep my blog active long enough to actually...
-
Exporting Functions and Namespaces
19 Mar 2012: Turns out my initial analysis was incomplete. See the end of of the post for details. Initial Analysis Last week, I ran into an interesting issue that I think is...
-
Avoid Loading of Unnecessary Symbols
09 Mar 2012: Setting up Visual Studio to use a symbol server can greatly improve your ability to debug problems. However, adding a symbol server can significantly slow down debugging as Visual Studio...
-
Finding an Object Using Lambda Expressions
02 Mar 2012: After a hiatus in XML-land, I’m back developing in C++ land. We’ve moved to up Visual Studio 2010 since the last time I was doing serious development work, and so...
-
28 Feb 2012: It was my turn today to come up with impromptu speaking topics for our club at work. I decided to do a role-playing theme with the following roles. Fortune teller...
-
Designing Efficient Interfaces
25 Feb 2012: Whenever I see someone using a fancy new software interface, such as at a bank, I love to ask if they like it. I think without exception, the answer has...
-
LNK2005 After Converting to Use MFC
16 Jan 2012: Although I work on a large MFC based project, often I create small independent projects before converting and integrating that code into our main product. I usually don’t turn on...
-
05 Dec 2011: I recently discovered The Sales Lion thanks to The Globe and Mail. Although I find his writing style uses a few too many exclamation marks, the site is a great...
-
Engineering Technology for Social Change
05 Dec 2011: I had the opportunity to listen to the developer of the worlds cheapest tablet, the Aakash, speak at the University of Toronto this week about the use of technology in...
-
04 Dec 2011: Different character encoding schemes are a headache - a headache that is unfortunately not going away. wcstombs (or related Microsoft secure functions, _wcstombs_s and _wcstombs_s_l) are your staple when translating...
-
27 Nov 2011: Whenever you create a custom control in Windows, it is important that the control look right, even when Windows has been themed. This means when drawing, you need to pick...
-
27 Nov 2011: I’m working on a new iPad app (sorry, I can’t reveal yet what it is). The app is planned to have two full-screen views. The first view is fundamentally a...
-
Review - Succeeding with Agile
21 Nov 2011: I just finished reading most of Succeeding with Agile: Software Development Using Scrum by Mike Cohn. I skipped the last part of the book, particularly the sections discussing scaling scrum....
-
17 Nov 2011: Lately, I’ve been doing a lot of reading on Agile, and specifically on Scrum. Admittedly, when I started reading, I was skeptical showing the typical inertia to change. I still...
-
13 Oct 2011: Last week I wrote about why I think #include in headers are evil. Sometimes #includes in headers is a result of laziness, but other times, because there is apparently no...
-
12 Oct 2011: I’ve been working on a major project at work since the beginning of the year. As usual, I can’t talk about specifics. Is is my latest major project at work,...
-
05 Oct 2011: Any seasoned C/C++ developer should already know that #include in header files are evil. Not quite as evil as goto (see below), but close. There are any number of reasons...
-
26 Sep 2011: About a year ago, I created a video seminar series about usability. I didn’t actually create the videos - I just screened them. I still think these videos are a...
-
24 Oct 2010: I’ve been working on an application to sell through the Android Market since the middle of the summer. Life got a little busy, so there were a couple of months...
-
Natural User Interfaces and CAD
24 May 2010: There is a lot of recent interest in user interface design driven by multiple factors, primarily the pervasive mobile device, but also other factors such as increasing software capabilities. This...
-
14 May 2010: We all know, at least programmers, about replace all. It allows you to replace all text in a document that matches some condition, for example, replace all instances of “foo”...
-
04 May 2010: I was listening to a radio program - I can’t believe I’m actually writing that, but it was what the last person in my car share was listening to -...
-
29 Apr 2010: I frequently think about quality and in my job that means bugs. Severity, visibility - simply bugs. I’ve mentioned before that I don’t buy the prevailing wisdom that we can’t...
-
29 Apr 2010: OK, so we recently interviewed 5 people for a position at work. One was 5-10 minutes late, and one was 40 minutes late. That’s right, 40 minutes late. I don’t...
-
06 Apr 2010: One of the regular blogs I follow is The Old New Thing. Following the quarterly link clearance, I stumbled upon a discussion of shipping software with bugs. As the writer...
-
01 Apr 2010: I’ve had a couple of really good days at work. I spent about 16 months in 2008-2009 developing a major new feature for our flagship product. It primarily consists of...