Walking Down No. 4 With an MD Player Cranked

The summer of 2003 was an interesting time. I was just starting to get back on my feet after moving to the west coast of Canada and, thanks to steady employment and a reasonable debt repayment plan1, disposable income was no longer a pipe dream. My computer at the time wasn't particularly amazing2, but it could handle all of the core things I wanted to do at the time; IRC, Age of Empires, and PalmOS application development.

Work at this point in my life involved the day shift at a printing shop about 5km from my apartment. I would wake up every morning at 4:15am, hop in the shower, then walk to work and punch in by 5:45 and begin taking inventory of the workload for the next 20 hours of printing, binding, and shipping tasks. The work itself was quite enjoyable, though I did sometimes take it far too seriously. What I enjoyed more, though, was all of the walking that was required. For where I lived, the first bus of the day would get me to work 20 minutes late, so it was a non-option. I could ride a bike, like some of my colleagues at the time, but I didn't trust my roommate to not steal it3. Walking, however, is free and easy to do. It also gives a person time to listen to things.

Before I warmed to the idea of listening to podcasts, music was on an endless loop on the headset every time I'd go outside. In 2003 I invested some money into a Sony MD player and five blank disks, which would offer as much as 7 hours of music. There was one disk in particular that I would start every working day with; the red one.

On the red disk was fast-paced techno, trance, and other forms of EDM4. The very first track was Yoji Biomehanika's Ding a Ling and it was the best way to start the day. At over 10 minutes in length, I could cover almost the first kilometre and a half5 of No. 4 Road, the main street closest to the apartment. Power-walking along the sidewalk of this generally-busy road at quarter-to-five in the morning was always a treat. There would often be fog for the first half of the trek and the smell of the nearby ocean. The air was heavy with the scent of various coniferous trees. Traffic was generally absent until I reached the busier Cambie Road midway in the commute.

Every time I listen to this particular piece from Yoji Biomehanika, I'm transported back in time via the mind's eye to this point, when I was young and foolish and had so much free time. This happened earlier today when the random shuffle of the music device6 pulled up Ding a Ling - 2002 Scot Project Remix for the first time in ages. Being alone at the time, I turned the music up just as it was on those mornings 17 years ago and imagined power-walking to the point where my muscles ached from the strain. Through the fog. Past the innumerable conifers. Heart racing.

Who needs a DeLorean?

  1. It's interesting how quickly a person can amass debt at a young age. Soon after moving to Japan, I ditched credit cards and went with prepaid Visas and MasterCards. If I cannot afford a thing in cash, then I cannot afford that thing. It is better (for me) to wait a month or two than to carry a balance and pay interest or — worse — max out a card and pay it back over a period of years. Aside from my house, every large purchase in the last 15 years has been the result of saving for months or years, then paying with cash or a bank transfer; including my cars.

  2. I purchased a used HP Pavilion notebook with a PIII/850MHz processor and 1GB RAM the previous winter to replace the missing computer in my life. And, because it was a notebook, I couldn't really get trapped in the monthly upgrade cycle like I had been for 4 years between 1997 and 2001, which is where so much of my debt had come from. In 2001 I built a machine that was valued at just over $10,000 CAD. It was a beast of a machine … and it wound up being too heavy to bring with me when I moved from Ontario the following summer.

  3. He eventually did. He took the bike in the middle of the night claiming he had a job interview across town and needed to get there on time, which is rich given the guy never worked a day in his life outside of selling illicit substances.

  4. Electronic Dance Music, primarily from European artists.

  5. I walked very quickly back then. I still do when out on my own. Nozomi has helped me slow down over the years, but fast-paced power-walking has always been my M.O. … particularly if there are objectives to complete.

  6. The current music device is usually the tablet, which has a much better battery life than the phone, but both have access to the music library. Almost a decade has passed since I last used the Sony MD player, though I still have the palm-sized unit in a box upstairs with just one remaining disk; the red one.

Fast & Furious at 19

One of my favourite movie franchises began almost 20 years ago. This is sometimes hard to believe, given the number of movies that I've truly enjoyed that have stood the test of time, but there's something uniquely special about this particular series. Some movie franchises, such as the Bourne series, keep us interested because of the adrenaline rush that comes from seeing the main character consistently stay one or more steps ahead of his adversaries. This series, Fast and Furious, remains one of my favourites primarily because it's one of the few sets of movies where I feel it's okay to "turn the brain off" before settling in to enjoy the action. I love racing cars. When I wasn't doing it for real while young and invincible, I was busy with EA's Need for Speed franchise of racing games. There is no point in denying that — deep down — I enjoy competing directly and vicariously in this arena.

Fast & Furious — Final Race

Today, while waiting for the boy to fall asleep, I decided to watch a little bit of the first Fast and Furious movie. This was a time when everyone was still quite young. Brian was a cop. Dom drove an import. The romances we saw at the end of F8 were just in their infancy. It was a simpler time. Nobody had expectations for a sequel.

The brain was squarely "off" before the end of the Universal Studios logo. Despite not seeing this particular movie for quite some time, we know what we're in for ahead of time. In the words of the immortal Rick Sanchez: Don't think about it. As long as you don't, the movie is thoroughly enjoyable. Races feel fast and real. The obvious product placements for Panasonic, Corona, Mazda, Corona, Subaru, Corona, and NOS are just part of the story. The bad acting, one-dimensional antagonists, incontestable plot holes, asinine catch-phrases, and throwaway supporting characters barely draw any attention. Heck, even the obviously forced attempts at swearing and rage can be taken in stride. All because we know ahead of time that this is going to be a stereotypical "guy movie".

Even after nineteen years, none of this bothers me. The movie is just as enjoyable now as it was in 2001 when I saw it in theatres. Except …

One thing that has changed over the almost two decades since this movie first came out is my reaction to the gratuitous use of scantily-clad young women. When I was in my mid-20s the shots of long legs, dark skin, midriffs, and fiery eyes captured my attention just as much as the Nissans, Mazdas, Subarus, and Hondas they stood beside. Now, though … I'm not at all interested in the "kids" standing next to the pimped out vehicles. If anything, they're in the way. I want to see and hear the cars, not a bunch of bimbos who — as per the script — are looking to get next to those who compete and win.

Perhaps this means I'm "old". Maybe it means I would rather just spend time with a car than a fickle sleeping partner. I'm content with either assessment. There's far more to life than sex, after all. A fast car and an open road can keep me content and mostly out of trouble for years.

This is perhaps what I like most about the Fast and Furious movies. They do the things that I would not dare do anymore, and I can live vicariously through this fiction. Running from the cops. Hijacking shipments. Screaming through a 30km school zone at 220kph. These are the actions best left to the world of make believe, and there isn't a better description of Fast and Furious than "a fantasy world where having the fastest car equates to freedom from responsibility".

May I never tire of these movies ….

Compliant Cookies in PHP

A number of years have passed since the last time that I've written about coding solutions on this site, but a number of people have asked me recently how they can have PHP record the SameSite=None attribute when setting cookies. ChromeLabs has a handy example page showing how it's done but, for people who need to have more attributes, this is how it's implemented in many of my PHP-based projects:

$attribs = array( 'SameSite' => (($isHTTPS) ? 'None' : 'Strict'),
                  'Domain'   => strtolower($_SERVER['SERVER_NAME']),
                  'Expires'  => {unix-formatted expiration time},
                  'Max-Age'  => {number of seconds},
                  'Path'     => '/',
                  'Secure'   => $isHTTPS,
                  'HttpOnly' => true,
setcookie( "{cookie name}", "{cookie value}", $attribs );

This little bit of code uses $isHTTPS as a boolean to understand if the site has an SSL certificate1. Expires needs to be passed as an integer in order for PHP to set the value to the correct 'D, d M Y H:i:59' format as outlined in RFC6265.

But My Server Isn't Running PHP 7.3 …

The problem with the solution I've outlined above is that it will not work if a server is running PHP 7.2 or older. In this situation, the solution becomes a little more complicated. For the sake of visual clarity, here it is broken up across lines:

$cookieStr = "Set-Cookie: $key=$val;" .
                        " Expires=" . date('D, d M Y H:i:s', {unix-formatted expiration time}) . " GMT;" .
                        " Max-Age={number of seconds};" .
                        (($isHTTPS) ? " Secure; Path=/;" : "") .
                        " Domain=" . strtolower($_SERVER['SERVER_NAME']) . ";" .
                        " SameSite=" . (($isHTTPS) ? 'None' : 'Strict') . ";" .
                        " HttpOnly";
header( $cookieStr );

This resolves the warnings in browsers like Chrome and Firefox that developers will see when testing their work and it ensures that cookies will be properly read and saved by browsers going forward.

Fun, huh?

  1. This is important in my development process, as my local tests are done without SSL certificates, whereas the live servers are all HTTPS.

Active When Bored

Over the last couple of weeks there has been an increasing number of once-idle websites coming back to life as people sit down to write — sometimes for the first time in years — blog posts lamenting the loss of liberties as a result of the global spread of the Wuhan virus1. The message seems to be the same regardless of where the writer lives: restrictions suck, working from home, and wash your hands. Few of the posts seem to have very much positive to say, even when a person has the opportunity to work from the comfort of their house on a temporary basis, and the stress people are feeling can certainly be gleaned from the word choices used. All in all, I'm quite happy to see many of the old RSS feeds show signs of activity in the reader after such a long absence, but I do wonder whether writers will choose to continue blogging for the foreseeable future or if their sites will go idle once again when governments declare it safe to resume our lives.

Is blogging now something that people do when they're bored? Or is it seen more as a semi-formal medium where ideas that appear worthwhile are explored, unlike the ephemeral posts that dot many highly-interactive social platforms.

Either way, I do hope that some of the bloggers do stick around after the pandemic comes to an end. There are a lot of really insightful people who used to put out solid articles every couple of days or once a week that often explored an idea that I knew little about or from an angle that I hadn't considered. These posts were the highlight of my commute many years ago and would often give me a lot to think about afterwards. Hopefully this isn't simply a case of writers being bored and choosing to vent frustrations as a one-off exercise.

  1. Otherwise known as COVID-19; "the coronavirus".


Jeremy lives in Rome and recently wrote about some of the changes that have come about to his everyday routine since the Italian government instituted all kinds of rules in an effort to limit the spread of COVID-19, the novel coronavirus. It’s easy to appreciate the luxuries we take for granted when we’re denied access to them. Things like morning cappuccinos, proximity to others, and the freedom to head outside without carrying any form of documentation are not the sort of liberties we expect to be deprived of in our modern world of plenty, but here we are. Jeremy’s biggest challenge, however, stems from Mayor Virginia Raggi‘s decision to deny access to all of the parks in the city.

Yesterday evening it really struck me how much this one small change had affected me. For the first time, I felt really depressed about the whole business. I need my walks, morning and evening. They are what make working at home doable. It isn’t just the exercise or the change of scene, because the scene on my walks remains the same, bar the changing seasons. No, it is something deeper than that, something about over-reacting, something about not understanding what at least some locked-down people need.

Indeed. Here in Japan we’re still permitted to use the public parks, though there has been talk about limiting access to these green areas … somehow1. Given the other restrictions that are in place, and given the number of parks in the neighbourhood2, closure of these green spaces would be devastating. Not only because Nozomi needs a good green space in order to stretch her legs and answer the call of nature, but because I need the green spaces as a reprieve from the day-to-day.

Without access to the various parks in the area there would be a great many more joggers on the paved walking paths that wind through the four local neighbourhoods, which would put more people in close proximity to each other. There would also be fewer places to sit and watch the world go by. There would be fewer (designated) places for kids to be kids. The consequences would be felt almost immediately.

Hopefully the various levels of government elect to keep the parks open. The constraints and restrictions that people are expected to endure already have a lot of neighbours looking for some sort of escape. Fewer options will lead to nothing good.

  1. Public parks generally have a large number of entrances with no gates or other means of preventing access. If a government were to try and close them, city workers would be limited to using thin ropes tied around trees and traffic cones with laminated notices taped to them. It’s been a while since I was a young boy, but I’m pretty sure there isn’t an able-bodied child anywhere in the country who,wouldn’t just walk around the rudimentary obstruction.

  2. There are 8 really good parks in the area; five of which are within 350 metres.


Since writing a short post on what will be missed when I eventually leave the day job, I've been thinking about what I perceive as the underlying question that Rachel Kroll was asking: What do you find valuable?1 The question is exceedingly important for people who are working towards a series of goals, be it personally or professionally. When I think about what I find valuable at the day job, the immediate response would be the people, which then prompts the follow-up question of "Why?" Again, the answer is immediate: I learn new things from people and, in turn, they challenge me to do something with that new information.

Can the question translate just as easily when examining hobbies and personal projects, though? What do I find valuable about the 10Centuries platform? This is something that I've worked on as a publishing platform since August of 2012. While there have been droughts of effort on occasion over the last couple of years, the ultimate goal remains the same2. What do I find valuable about the effort?

The Community

This goes without saying. There are not nearly as many people using the service as in the past, but the people who do find value in the 10C platform are incredibly valuable to me. They provide the incentive to continually build and improve the platform while keeping it accessible and simple. Everybody is quite unique, too, making the eclectic group my favourite community by far.

The Challenges

How can performance be maximised when running a web server on consumer-grade equipment? What sort of SQL query can be crafted to reduce the number of database calls from many down to one without any performance degradation? What tactics can be implemented to reduce the amount of spam that is received by the contact forms on the various sites? What is an effective way to handle content-scraping bots that choose to ignore the standard robots.txt rules?

All of these questions — and may more — are tackled on a regular basis as no solution is a panacea. The challenge of pushing the platform in multiple directions and leveraging the tools that have been refined for years across numerous projects is part of what keeps it interesting for me. This interest is incredibly valuable as it often requires learning about a problem, seeing the solutions that others have tried, and then building on their efforts to devise an answer that best suits the platform without unnecessary resource expenditures. Every function that is created must follow the Unix philosophy: do one thing, and do it well.

The Rewards

In 2015, 10Centuries came the closest it's ever come to breaking even, with about 85% of the annual operations cost being earned through subscriptions. Over the last five years people have left the platform and income has diminished to cover about 30% of annual costs. Despite this, the non-tangible rewards for the service far outstrip any financial gain that might exist. There is an incredible amount of pride for what's been accomplished over the years. Sure, I've made a number of mistakes that have resulted in people losing interest and leaving the community, and every loss resulted in learning something new. Ideally these lessons have meant that subsequent updates have actually improved the system and, looking at the last six months, I can honestly say that Version 5 today is far better than it's ever been before. Is there more work to do? Absolutely. This seemingly endless To Do list is just one of the rewards, as it's diverse and long enough that I'll not get bored for years to come.

The Education

The running theme across this article involves education; my education. There's a lot that I didn't know when 10C started out as a simple Evernote-connected blogging platform and there's a lot that I still don't know today. That said, there have been a million little lessons learned throughout the development of the platform. 10C is currently running on the 5th major version of the core framework that powers so many of the systems I create meaning that the first four attempts to have a universal API and web presentation tool have not been sufficient enough to solve all the problems. v5 comes closest, though, thanks to the feedback received and patterns observed. The knowledge gained here is distributed to the other projects just as the lessons learned elsewhere are incorporated here. If I ever stop learning, then that will be the end of the project, as it means the effort has become boring.

Ultimately these four things are what I find valuable about 10Centuries and are why I continue to invest countless hours into making the platform a viable option for anyone who might find it of value themselves.

  1. For the sake of this blog post, the question will remain five words in length, allowing it to be vague enough to think through the variables.

  2. Yes. I still endeavour to have the publicly-available content accessible to people for at least 1,000 years. As the web continues to evolve, this becomes less unrealistic.

Five Things

Today is the Ides of March, which is historically when people in the Roman Empire were expected to settle their debts. While we don’t have a specific deadline for this activity anymore, it’s something that could make a good deal of sense for those who seem to always be in debt. This describes the entirety of my 20s, with student loans, credit cards, and the typical monthly bills that come with living on your own. It would have been nice to be mostly debt free, if only for a couple of days a year. That said, now that I have a mortgage to pay down, being devoid of debt is something I will not be able to declare until some point in my 60s.

Such is life in the modern age.

Lamentations on debt aside, it’s time for another Five Things blog post where I get to ramble about more than two topics in a single article.

Ubuntu 20.04 Is Almost Ready

Despite being well into middle age, I still find the LTS releases of Ubuntu Linux exciting. The platform has come a very long way over the dozen or so years that I’ve been using it and there is a great deal of buzz over many of the features and updates that are part of this next release. While the servers I run will remain on 18.04 until the fall when 20.04.1 is released, the development notebook will be upgraded on the first day.

Still 2019

The older I get, the longer I seem to write the previous year in SQL queries and on documents. There was a Pickles cartoon in the paper some 25-odd years ago where Mrs. Pickles is at the bank and filling out a deposit slip, then says something akin to “Oh, shoot. I wrote the wrong year again.” The teller says that people usually need a couple of weeks to adjust, to which Mrs. Pickles says she wrote 19741. This is probably going to be true for me, too. By the time 2040 rolls around, I’ll still be writing 2027.


Generally when we make our way through crowded areas, we try to calm ourselves and be patient with others. Not everyone will move at the same pace, or with the same manner of intent, or even pay attention to their surroundings nearly as much as we might. So rather than get angry and push people out of our way for what can certainly be classified as willful ineptitude, we give people the benefit of the doubt that they are just distracted or physically unable to quickly complete a task. This is particularly true when it comes to children and the elderly.

Unfortunately, my patience has all but run dry over the last few weeks on account of the isolation that’s been recommended by the government, the frustrations at work, and the hassles involved with doing just about anything outside. When the opportunity to head out for a quick walk does avail itself, the last thing I want to see are oblivious Pokémon Go players blocking walkways and otherwise being hazards on the pedestrian park trails.

Phantom Vibrations

The phone hasn’t vibrated in months. The tablet doesn’t vibrate. The notebooks do not vibrate. Everything that did buzz and shake with every notification has been subsequently silenced so that I might actually be down during the weekend downtime. Despite this, there are still vibrations at certain parts of my body as though the phone received a message.


Despite all of the challenges, responsibilities, and activities that arrive throughout the week, an overarching feeling of boredom permeates my mood by mid-morning, every morning. I can stave it off from time to time by changing the activity that I’m doing, but this isn’t always feasible. Boredom in and of itself isn’t necessarily a bad thing, but in excess it can lead to some reckless decisions.

Hopefully the mental rut can be broken in the near future.

  1. Why I can remember this comic strip from a newspaper a quarter century ago but not important things from meetings last week, I just don’t know.

Taking A Short Break

When a person commits to writing and publishing a blog post a day, the self-inflicted expectation can be a little much at times. There's very little time to be away or to just recharge. That said, yesterday I did just such a thing and this right here is the first blog post I've published in 47 hours … which still technically counts as being the day after [yesterday's post about Feedly weirdness], making for 549 consecutive days of posting. There is no need for me to continue this daily effort to write and publish, but it's something that I choose to do simply because I've tried and failed to do this countless times over the last 13 years1. People do need to take little breaks from time to time, though.

Sometimes I look at my To Do list and wonder why it's consistently carrying more than 48 hours of work on it. Other times, when I'm making updates to 10C or writing a blog post, I look at the list and wonder why I'm not tackling something that was written down with the intention to finish it. Surely there are better uses of my time than pet projects, right? A younger version of me would certainly agree. The current version, however, thinks the younger is a naive fool. There's more to life than completing To Do lists, and there's more to creative efforts than simply mashing a keyboard for 90 minutes before hitting "Publish". If the last six months have taught me anything, it's that continued development of 10C has helped me enjoy coding and continued blogging has helped me enjoy writing. As it stands, I do a great deal of both for the day job. Being able to do these things for myself and the people who support my endeavours makes the effort worthwhile.

Over the last couple of weeks I've been thinking a great deal about my future. What do I want to accomplish? What needs to be done to make it happen? What roadblocks might stand in the way? The last five years have seen so much change. I'm grateful for what's been made possible and I'll continue to work hard in everything I do because that's just the way I am. Something else is on the horizon, though.

Jordan Peterson's list of things that everyone should know has a couple of items that have been guiding principles lately:

33: Notice that opportunity lurks where responsibility has been abdicated.
16: Work as hard as you possibly can on at least one thing and see what happens.
24: Nothing well done is insignificant.

Number 33 is something I've seen in a couple of domains now, and there is certainly opportunity for people who are willing to put in the work. Which leads into number 16, as working hard on something doesn't necessarily mean putting in just the physical labour — though it's crucially important — but the mental efforts as well. We have to really think about the reasons behind the abdication in order to take full advantage of the opportunity. This generally results in the development of a solution that other people want as well, and nothing that truly solves a problem is insignificant; number 24.

However, number 20 is also important:

20: Treat yourself as if you were someone that you are responsible for helping.

People tell me that I work too hard, too much, and to exhaustion. They're right, of course. So, if I were someone that I was responsible for helping, I'd say "organise your schedule in such a way that you can continue to meet your goals while also taking a break". This is what I did yesterday to create a 47-hour window between blog posts. It was a good short break.

  1. The site was started on October 18, 2006, which was 4,896 days ago. There are 3,186 posts on this site. That's a pretty high publish ratio. Shame the content isn't particularly interesting.

How Reliable Is Feedly?

Shortly after the Ides of March last year1, and for reasons I've never been able to work out, Feedly stopped updating the RSS feed for this site. The XML file that is generated for the site has been consistently deemed valid by the W3C Validator and other 10C-based sites continue to see their syndicated content properly updated in Feedly. I know this because I subscribed to a number of them. Mine, when pulling from the XML version of the syndication feed, will not show updates.

But why?

The XML version of the RSS feed will work with a number of clients just fine, as I've tested the site with standalone clients as well as alternative online services, such as FeedWrangler and Fever2. Has Feedly simply stopped visiting the site and, therefore, does not know that the RSS feeds have been operating just fine aside from the one little blip that took place on April 10th?

According to the service logs, this isn't the case.

Stats Show Two

The Feedly crawler is stopping by this site almost every hour for the XML feed and every three hours for the JSON version, which the service has no trouble at all reading. The XML file is being properly returned, too, as the number of bytes sent is the very same number of bytes as the cached XML file (compressed as a gzip). Those subscriber numbers look a little off, though ….

Feedly Shows Nineteen

Seems one or all of the reported numbers are false. 1 subscriber? Just me?3 Or is it 2 subscribers? My mum and I, perhaps? Or is it 19? Perhaps some other number?

Unfortunately, this problem does not seem to be limited just to me. A now-retired UserVoice.com forum had hundreds of people asking the same question for various feeds that just stopped updating one day. The service seems to be aware of the problem, but is unwilling to do anything about it.

Feedly Support Services

So what is a person to do when their RSS feeds stop updating? Readers who notice will hopefully continue to visit the site directly or change readers. Writers who want to be read, however, will suffer if people using Feedly just thought that the site had gone silent, like tens of millions of blogs have over the years.

Personally, I've lost interest in trying to make things work with the service. My syndication feeds are valid and have been for well over 8 years. Rather than mess around with someone else's service, I'll do the next best thing and make my own RSS service. As one would expect, 10Cv5 already has this functionality built in. All that needs to be done is to build a simple client, write the documentation for the /reader API, and share it with the world.

When paid cloud services drop the ball, I tend to pick it up and take it somewhere else.

  1. The Ides of March takes place on the 15th.

  2. Fever is a self-hosted application, but is still a valid means of testing.

  3. I subscribe to my own feeds primarily to ensure the thing is going out and being read properly. Sometimes I even spot typos this way, then I can go back and fix them.

Genuinely Missed

Rachel Kroll asked an interesting question the other day:

For those people who have worked at multiple companies and thus have left a couple of jobs over the years, do you ever think about stuff you miss? These are the internal systems, build environments, tools, features, or other neato things that you had which made your job easier, better, faster, or maybe even possible… but which didn't exist on the outside world.

Thinking through all the places I've worked as a developer over the years, from an appliance repair shop to a printing shop1 to language schools2, plus a myriad of organisations I've worked with on a freelance basis, I can honestly answer "no" to the question as it's presented. The vast majority of the things I've worked with have either been publicly available3, supplied by me, or written by me … which is probably not something to be proud of. What I do miss about many of the places that I've worked at (or with) are the people.

If we're lucky, every place we've worked has had at least one person we've looked up to, learned from, or just plain enjoyed being around. Even as a freelancer, there are certain clients who are an absolute joy to work with. For me it's the people who give me a reason to get to work on time and give it my all, learning new and interesting things from them along the way.

Often times when I think it's time to move on to another type of company to take on a completely different set of challenges, I think about the people that I would be leaving behind and reconsider. Sure, there's email and social places available to maintain relationships, but it's not the same as when you're working together towards a common set of goals.

Internal systems, build environments, tools, features, and other neato things that are unique to an organisation are certainly nice to have, but they're not something I think I'd ever miss. Mind you, I've not worked for organisations that are even half as well known or respected as the ones Ms. Kroll has. Perhaps with more exposure to the various tools that companies use internally, I'd find a reason to miss something.

  1. Not sure "shop" is the best way to describe the company, given they employed 400 people and had customers all over North America.

  2. There are other places I've worked at, but these are the ones at each major geographic location I've lived where I've worked the longest.

  3. Available either commercially or free.