Okay, so most of you probably already know how to do this, but it only occurred to me today. I develop various websites, usually creating a local version, then uploading it to an online dev version, and finally to the production instance.
In the past, I’d go into my httpd.conf configuration file and change my DocumentRoot to a different website, then restart Apache.
But I realized I could just use a hosts file to point local subdomain to a different folder, e.g. gi.localhost or site2.localhost, or, I could even use the real site’s eventual url: mysite.com or some such.
On my Mac (generally my exclusive machine these days), I edit /etc/hosts and add a line:
Then I make the appropriate changes in /private/etc/apache2/httpd.conf
<Directory /> Options FollowSymLinks AllowOverride All Order deny,allow Allow from all </Directory>NameVirtualHost 127.0.0.1:80 <VirtualHost 127.0.0.1:80> DocumentRoot /Users/mhart/localhost ServerName localhost:80 ServerAlias 127.0.0.1:80 </VirtualHost> <VirtualHost 127.0.0.1:80> DocumentRoot /Users/mhart/gi.localhost ServerName gi.localhost:80 ServerAlias 127.0.0.1:80 </VirtualHost>
In Windows, the hosts file is in c:\Windows\System32\Drivers\etc, and your Apache config file can be found from the Start menu.
I think that my best apps are the ones I create in order to fulfill my own needs. PhotoKiosk is one of them – I wanted a nice way to view and discover photos. I set it to view the Flickr public feed, Utata Pool, my own feed, plus a variety of tags. It’s cool!
I recently saw new toy prototypes for the next Batman movie, beautiful snowscapes from around the world, and even a ladies’ roller derby team party. It’s also cool watching what people tag as “iPad”. It’s usually a drawing created on the iPad, but sometimes it is children using the device or a new case. I saw a sort of stick on peel off case that created a form-fitted protective cover around the iPad.
I updated PhotoKiosk, so check out the Lite and paid versions in the App Store.
Here’s the Feed list I use on mine:
- public feed
- Utata Pool
- wildlife (tag)
PhotoKiosk turns your iPad or iPad 2 into a gorgeous kiosk, displaying photos from an unlimited number of Flickr photo feeds or compatible URLs. Also works with the iPhone and iPod Touch.
A password-protected setup screen allows you to add feeds using an individual ID, a group ID, tags, the public feed, or a custom feed URL, or any combination. Feeds can be easily switched on or off, and a description of each feed can be optionally displayed on the kiosk.
Feeds are automatically cycled based on the refresh time you set, and the number of photos to display can also be changed. Touch a photo to zoom in, triple tap the screen to access the settings (after also entering your password), or quadruple tap to refresh the page and move to the next feed.
Older pictures are smaller and/or more transparent, while the newest pictures show up larger and opaque. Tap any picture to zoom in to the fullest size possible.
Works in either landscape or portrait mode and automatically compensates when you rotate the iPad. Use it in conjunction with iPad kiosk hardware that hides the Home button to turn it into a photo display for trade shows, non-profits or other businesses.
In this version:
* Customize the kiosk name
* Custom kiosk description or per-feed descriptions
* Unlimited feeds
* Select the number of photos
* Select the refresh timeout
* Change the password
Updated to version 1.2 – fixed a bug introduced by a Flickr API call change. Also removed the interruptive error messaging.
SuperConvert is the iPad/iPhone/iPod version of the popular Super Conversions Windows application, with over 20,000 conversions possible in 18 categories: Distance, Area, Volume, Weight, Power, Pressure, Temperature, Time, Energy, Force, Acceleration, Illuminance, Concentration, Electrical Current, Hydraulics, Density, Velocity and Viscosity.
Now Available! Click here to view it in the App Store.
Updated to version 8.2, fixed a problem where it was ignoring decimal places.
First part in a series detailing my journey line as a programmer
I encountered my first computer when I was in the 8th grade. I was living in Reno, Nevada, and had a friend who’s dad ran a couple of 7/11 stores with the help of a TRS-80 and some software he’d written. The program’s listing was printed out on tractor feed paper and was completely incomprehensible to me. I also saw the “Dancing Demon” application. The listing for it was even more crazy since it made extensive use of string packing, where machine language was encoded into BASIC string statements.
I was hooked and had to know more about this “personal computer” thing where you could write your own games and such.
Enter my summer job washing dishes at Dodson’s Cafeteria, circa 1979. I worked full time and saved my money. At the end of the summer, my step-dad took me to Radio Shack and kicked in the last hundred dollars or so for my very own TRS-80 Model I Level II, a 16K black and white computer with a cassette tape drive for storage. I also got a subscription to SoftSide magazine, a monthly publication with program listings n BASIC for the TRS-80. I typed in the listings and, with the help of the computer’s reference manual, debugged the programs and got them running. Thus I began to learn how to program.
In 1980, at the age of 14, I was hunched over a keyboard in the attic office space of our home in Dallas, writing a silly Enterprise vs. Klingons game, with a big blocky Enterprise on the left and a Klingon warbird on the right. Each player used a pair of keys to move their ship up and down the screen, and another key to fire upon their opponent. I knew little about realtime action programming at the time, so all movement ceased during a firing. It wasn’t the funnest of games to play, but it was my first real program, created entirely from scratch.
I was off and running!
December 2008. The snow turned to rain, falling steadily throughout the night, coating the forest surrounding my house with tons of ice. A layer of warm air, high above the surface, melted the falling snow. The air at the surface was still below freezing, causing the ice storm. I live down a one lane gravel road, tall trees guarding the road and the power lines that snake up the hill. Both mighty oak and tall pine trees were broken by the onslaught of ice, yanking the phone line from our home with a loud tearing noise, snapping heavy power lines in two. The grid went down at around 2am.
I ventured out every time a falling branch or tree shook the house, just wanting to check the integrity of our shelter. I didn’t venture far, and I wore a protective… well… a bike helmet… just in case. The crash of falling branches sent me scurrying back under the roof. Trees continued falling all through the night and even into the next afternoon. I wasn’t too worried – I was reasonably prepared for an extended power outage lasting, oh, three or four days.
I had a stockpile of good wood, enough to last maybe a week of solid burning. It was dry and underneath a tarp.
Our water comes from a well, but I had enough – we began conserving as soon as the power went out – even filling containers before going to bed.
The house is reasonably well insulated – it would keep warm enough without even a fire for several days, especially after I got out the duct tape and made sure the recessed can lights weren’t leaking warmth into the attic.
But this was no ordinary outage, and it showed me how little I was prepared to be off the grid for an extended period.
There were about 6 very large trees blocking the driveway, and about 30 smaller ones. My neighbor and I went through two chain saws clearing them. We just picked up the power lines and moved them out of the way as best we could – no way there was any juice running through them!
The family moved into our warm room, closing the door and putting a towel under it. We had a light from the small generator, plenty of heat from the air-blown fireplace, board games and plenty to eat. We put a table on the deck and emptied the fridge onto it, covering it with a tarp. We didn’t need no stinkin’ fridge! Not with the outside temperature peeking at 45 or so during the day.
The true extent of the disaster unfolded during the next few days. Power wasn’t just “out”, the entire grid infrastructure was broken. Hundreds of miles of power lines had to be rebuilt all over the Northern counties of Mass and some Southern New Hampshire areas.
Not only were we dead center in the disaster zone, but our house is one of the last ones on the grid. We were hosed. And we couldn’t even drive out of the disaster area – there was a huge tree hanging off a powerline in the middle of the road.
After six days, I began running out of wood. Water wasn’t too big a deal, and the food supply was still okay. But the nights were going to get really cold without a fire. The generator ran out of gas, too, so no fireplace blower. My wife had already left for a hotel in Burlington, Ma, with the kids, where her car window was shattered by a GPS thief. I stuck it out for a while longer and prepared the house to be on its own for a while. I left after, I think, day 9 without power.
It takes a lot of work to become prepared for an extended period off the grid. The best book I know of is Cody Lundin’s “When All Hell Breaks Loose”. It’s practical, not fanatical, and Cody lives what he teaches, having been off the grid for (correct me if I’m wrong) decades. I had some big basic things I wanted to do to be prepared for the next time it happens, and Cody’s book has done a great deal to fill in the blanks and give me confidence that I’ve taken the right steps.
Cody teaches the rule of 3’s – you can live 3 weeks without food, 3 days without water, but only 3 hours without warmth.
- Core body temperature.
This means a simple fireplace isn’t good enough, nor is a six day supply of fuel. So, wood stove and lots and lots of wood. Better overall insulation in the house – plug the gaps. Quality sleeping bags – for everyone. No more SpongeBob overnight bags, might as well buy the good stuff.
Stored potable water – enough immediately on hand for a month for 3 people, plus enough in a backup source, plus the means to make it potable, for as long as 100 days for 4 people. In addition to the 50 gallons in our regular water tank. And then there’s the lake down the road, and several year’s worth of disinfectant for water. Yeah, we got that covered now.
Okay, so this one seems to be the hardest for some reason. Looking at all the food options, things that seem to make it easy……. Cody makes it pretty clear – just buy more of what you eat right now, and rotate it. That’s a little harder when you eat a lot of fresh stuff. But, some things are easy – more rice, more spaghetti, more spaghetti sauce, lots of Pop Tarts and cereal. Okay, maybe not as hard as I thought! Plenty of bullion cubes and hot chocolate mix and some instant coffee. And, well, go ahead and get that 10 pound box of powdered milk, but put it in a food safe plastic container!
It’s not too hard, and it’s mostly cheap – even an installed wood stove is less than $2,000. You don’t need to go crazy, or be crazy, to prepare for a disaster, or at least prepare for an extended time of living off the grid. It’s happened to me, and tens of thousands of others around me.
Spill is almost 16 years old, but it’s time for him to go. He’s been suffering for a week now, despite repeated visits to the vet. We’re paying extra attention to him today, and he seems to be liking it, although he doesn’t wag his tail.
He was our first dog, a miniature poodle with “phantom” markings – similar to a “party” poodle, but with symmetrical markings. His chest had a “bow tie” and he had white “eyebrows”.
Like most poodles, he was intelligent and had a unique personality. As a puppy, and our first, he wasn’t crated and it took a long time to housebreak him. He tore up carpets and scratched up doors. We finally crated him and he quickly learned to go outside, but he did have one last trick: he ate my daughter’s homework once when she left it on top of his crate!
He managed to get out of our yard a few times, always into our neighbor’s back yard, attached to ours just like the duplex we shared. Once during a birthday party, he burst out the door and took off down the street. Even in his old age, he was the fastest dog we had. The kid’s grandmother led a flock of screaming girls and boys after him.
My most vivid memory involves another attempt at escape. I was picking up some Outback to go food, and I noticed a problem with the order. As I opened the door of the car to get it corrected, Spill shot out and ran toward the restaurant. I was wearing some “I’m not going into the restaurant” clothes: a holey shirt, shorts, and sandals. I ran after him as he made his way to the sidewalk surrounding the restaurant.
Did I mention he’s fast? He rounded a corner and headed for the front door. If someone had opened it, no doubt he would have run inside. Instead, he continued left around to the side. We were near a major road, and quickly running out of sidewalk. I knew I had to end this pursuit fast, so I literally dove onto him, banging and bloodying my knee and hands and arms. Once home, I instructed everyone to not be nice to him!
But then a curious thing happened – we noticed that he would play with Haunter outside, but only if no one was looking. If Spill saw anyone observing his play, he would immediately go back to ignoring Haunter. Funny little guy.
He was always kind of a nervous dog, furiously moving his legs on wooden floors like Fred Flintstone trying to run, slowly gaining momentum. When we moved into our current home, Spill was stuck running around on wooden floors and wooden stairs. He would have to nerve himself to charge up the stairs, sometimes tripping and falling backward as he clawed his way to the top. Often there would be a terrible racket as he scrambled up, missing steps and pumping his legs. He didn’t seem to realize it was okay to take it slow and sure-footed. We put carpet stair thingies down just for him.
When we got our daughter’s puppy, poor Mr. Spill had yet another hurdle to get up the stairs: the puppy would wait at the top and ambush Spill as he came up, barking and playing and blocking his way. This was a nightly headache for Spill, as the puppy harassed him for almost two years as he clawed his way to the top. He seemed to learn to ignore it, or at least nerve himself for it before he began his mad scramble.
Spill could roll over, play dead, speak, give you a high five, and catch popcorn… at least he would catch it until one day when he missed a Frisbee that hit him in the nose. After that, he wouldn’t try to catch anything.
For the last few years of his life, he would get up and go outside, get his canned food, lay around on the couch or easy chair, go upstairs, then go to bed in my son’s room. Sometime during the night, he’d come into our room and sleep on his own little bed.
We buried him on a hill, lying in his bed.
Goodnight Mr. Spill, wherever you are.
I’m working on a couple of things, including a way to make some of our internal conferences interactive and engaging. We have some big touchscreens we can use as kiosks to deliver schedule information, pictures and videos. They have the ability to read an RFID badge or otherwise allow a person to log in to the kiosk. We wanted a way to get people to login and find the additional things available when they do, so we’re creating a few games for people to play, with competitive leaderboards.
Will people log in to play a game? Will other people watch, and thus learn more about the kiosks? Will a game environment around the kiosks lead to interactions among people at the conference, especially interactions away from the kiosk?
I was recently asked a question that was, essentially, “What is your perfect job?” What is my passion? After a few moments of thought, I knew exactly what to say.
I’m passionate, work-wise, about three things: two of them I’ve always loved, the third has come about only in the past few years (see Transformation). They are related to each other, but separable in terms of job responsibilities and opportunities.
When I was in eighth grade, living in Reno, I had a friend at school – I don’t even remember his name. But his dad owned some 7/11 stores, and he used a Radio Shack TRS-80 to help him manage them. It was my first glimpse of a “personal computer”. I asked how it worked, and he showed me a “code listing” – lines and lines of BASIC. I could even recognize some of the words! I played Dancing Demon on it and started trying to figure out how to get one of those things.
After working a while as a dishwasher, I managed to save enough to buy a Model I Level II 16K TRS-80 for about $700. I was about to turn 15. I spent many nights and weekends in a scary attic space workroom typing in lines of code from SoftSide magazine and learning how to debug my typing errors using just a language reference manual. Fun stuff!
My first passion reared its head when I was 17, working at a skating rink. I became an assistant manager and started calculating payroll for the employees. I used a rate chart and a calculator, and it took me about 4 hours to do the twenty or so employee time cards every week. With a couple of years programming under my belt, I just knew I could create something on the computer to do this payroll thing for me! It took me a couple of weeks, but I wrote my first computer program that solved a customer’s pain. Including unpacking the computer, running the program with its nice summary printouts, and packing the computer back up, my payroll time was cut in half to just two hours. My first passion is simply:
Solving Customer Pains
I like to visit customers, talk to them, discover ways in which I can help them work better, faster, easier, whatever-er. This is why I created QuickBooks Keyword Search. It’s why I took on consulting jobs like my first paying gig for Plaza Diagnostics. That one took a 2+ week billing cycle for a medical diagnostics firm down to 1 night. From a “hand the papers off to a data processing company running a PDP-11” to “enter the night’s stuff into a T1000” and bill the next day! I interviewed that customer, understood his process, turned it into a program that saved him thousands of dollars. And learned to value my time more – I only charged $90 for that program.(!!!!!)
Today, this translates into visiting customers, talking to them, seeing their work, seeing them work, discovering new ways to help. You know I’m visiting customers if I’m applying for patents! There are always new ideas out there.
My second passion is all about playing around. I like to play with new languages, new platforms, new types of customers, new technologies. When I was coding in BASIC and Z-80 Assembly, I was part of Fidonet, answering questions and creating samples for people. When Windows came around, I wrote VB samples (see BlackBeltVB.com) and helped folks.
When I was stuck on version 12 or so of the accounting system our team created, I thought I’d go bonkers. I asked my boss if I could write articles for magazines, create some shareware, have some fun!! He told me, “Sure, as long as it is non-competitive with our software.” So I wrote maybe 20 or so articles, several shareware applications – one of them highly successful, and dozens and dozens of sample applications… just fiddling around with functionality and learning new things. I created a 3D rotation and transform wireframe app (it’s on the bbvb site). I tried my hand at games, at network communications tools. I even wrote my own HTML web browser!
Nowadays I still experiment with every language and new technology that comes down the pike. In one week last year, I remember that I coded in: 1) Groovy, 2) VB6, 3) Java, 4) PHP, and 5) Objective C. Groovy was for an app at work, VB6 was a quick and dirty card printer, Java and Objective C were for a Droid phone and iPad respectively, and PHP was the app that worked somewhat with the VB6 thing. I latched onto Smartphones when they first appeared, creating Palm apps and even a floating point emulator in C (of sorts – really it was just a very large integer math library) for the early Blackberries. I can’t help myself… I see an RFID reader for $39.95… wow!! Gotta have it and play with it. Cameras and GPS and motion sensors, big touchscreens… I even bypassed a UPS power switch and wired it to a phone-controlled radio transmitter relay system for remote power cycling of a computer and network switch. All that to state my second passion:
I’m usually pretty good at making connections between a need and a solution. The more I learn about new capabilities in the world of computing, about new technologies and devices, the more connections I can make and the more potential solutions. But mostly, it’s fun! It’s fun because I’m curious, I’m a programmer, so I love to find a real challenge and then figure it out. I’m like a little kid with a cube full of odd-shaped holes and a bunch of plastic shapes. I pick up each one and try to hammer it in a hole, crying out with joy when one fits!
Two down, one more passion left: acting as a catalyst. This one is really my least defined, as I haven’t really been “passionate” about it, or recognized it as something I love, until far more recently that the other two. Oh sure, I enjoyed teaching the occasional class on creativity or visiting customers, and I enjoyed participating in or facilitating brainstorming sessions. But it turned out that what I really like is to just be part of a team that wants to be more creative, wants to try more solutions and possibilities. I want to be a catalyst on that team, spurring people to greater creativity of their own. I want them to empathize with the customer the way I do. I hope that my curiosity will rub off on them. I want to instill the ability and desire to be innovative to others. I have tools that I’ve both learned and created for framing problem spaces, conducting customer visits, taking and understanding notes, using qualitative data to determine which direction a project should take.
I remember standing at the podium in a standing-room only gallery and holding up a bottle of conditioner I’d grabbed from my hotel room. My first words in that session on Walking in your customer’s shoes were, “How many of you tried to use the conditioner from the hotel?” The room erupted in laughter and people calling out – immediate customer empathy! Those little conditioner bottles were diamond shaped, stiff, filled with thick creamy conditioner. It was almost impossible to squeeze out the stuff. Observation! Empathy! Success! I took a whole room full of people and made them customers on a visit to their own hotel.
That’s something I want to do more of, and I’ve found the best way, so far, is to join with teams on their journey toward solving customer problems – be it with new offerings or old.
Be an innovation catalyst
I steal that term unashamedly from my current company, and although I mean the same thing… I think… I want more than short spurts of innovation engagement, rather I want to be part of the entire journey of investigation, learning and development: to be a real part of lots of teams.
So there’s my perfect job: visiting customers, creating offerings that solve their pains, using a variety of solutions and technologies, and as part of a team of innovators.
One of the innovation challenges in a big company is trying to work within the gravity well of the major revenue generating offerings while needing to obtain hardware, software and services that probably shouldn’t co-exist with those important offerings. You can’t spin up a Facebook app server in the same network topology as TurboTax! You probably can’t order RFID hardware from the same vendors you use for your blade servers and laptop computers.
But you can’t just step outside of the gravity well – there are good reasons for the existence of procurement and hardware exception approval processes.
There are times you can bypass it for small or temporary things, and just act like a startup and put it on your corporate credit card. But then the money might not show up in the proper place on various reports, giving the accounting department a real headache, or you clicked “Agree to terms” when you checked out, but those terms are actually not acceptable to your company.
So you have to work with them and initiate your purchase and exception requests through the system. If it’s a great system, then everything flows smoothly, suppliers are found for your stuff, the prices are the best available, and there’s no email back and forth to resolve problems.
You probably haven’t encountered that nirvana yet. Instead, your odd hardware request can’t be fulfilled, so you start on a journey of discovering the people involved in A) getting a proper request created and B) getting the money to the supplier. There is a huge amount of institutional knowledge inside the heads of people who have been around for a while, and especially in functional groups in a big company. You want to spin up a data center server? Talk to this guy. You need to install non-standard hardware? You’ll need her to grant an exception. Want to order from a new vendor? Talk to these people, oh, and maybe that guy has a locally-stored Word document you’ll need to send to the new vendor.
If you have been in the innovative space for as long as I have, you’ve definitely encountered these scenarios! And I hope that, like me, you’ve documented them for future pioneers. I’ve owned several new, unexplored “routes”, including Intuit Labs, Intuit Experimental Hosting, internal wikis and blogs. Those routes are filled with people who need to know, need to approve, or otherwise have some sort of gating role. Using Intuit QuickBase, I created processes that delight the developers and other folks who are using them.
Bottom line: it’s okay to have knowledge tied up with a PERSON, but you need to create a PROCESS that will get to that person and let them document the knowledge that they provide.