Archive for the 'Projects' Category

MSgt Dremel: Thank you for saving a life.

Dear Master Sergeant Dremel,

Honestly, I just did a little stalking and found out that you retired from the military some time ago, but I will always remember you as Master Sergeant Dremel (“like the tool” you would always say, yet I had never heard of Dremel tools). And, in fact, I will always remember you.

I was literally raking sand while waiting for a new job.

I was literally raking sand waiting for a new job.

I won’t blame you if you don’t remember me. I was one of a few young airmen that passed through your office at the advanced Russian school at DLI. Sometime in 2008 I failed the Arabic DLPT and began the long process of reclassifying to another job. My friend (who had failed out of Arabic with me but also spoke Russian) had been sent to work in your office as an aide. He put in a good word for me (because I was tired of sweeping sidewalks and raking sand, literally) and you requested a second aide to help clean up and organize a few things around your office.

I was feeling pretty down at the time, but this isn’t a story about how I was thinking of suicide and you talked me out of it (as the title might suggest). I had signed up with the Air Force to get the $12,000 signing bonus and I felt that the new Arabic test was broken and I had been cheated out of my bonus. I knew that I had the option of getting out of the Air Force at that point, and I was seriously considering pursuing that option.

I will always remember how kind and sincerely caring a person you are. I still remember the story you told about how, at another location, you and a few other guys were concerned about a dangerous section of road that the administration was not taking proper care of–the road required some safety markings (a crosswalk, if I recall correctly) and after months of fighting for the markings to be painted no action had been taken. You and your cohorts obtained the necessary supplies and painted the markings yourselves to prevent further injury at that location.

Similarly, you saw that I was in need of a mentor and you stepped up. I will always remember the day you asked me about my plans for the future and I told you I was planning on getting out. You listened and then, in a few more words, asked me to reconsider and give the Air Force another shot. You talked about the many benefits, to include education and health care, that I would be throwing away, and you appealed expertly to my logic and sense of responsibility.

In my mind, the military represented something I didn’t want to do. I felt wronged by the system, had a deep disdain for all of the running and physical exercise required, and didn’t feel comfortable with the military culture. However, your words convinced me to give it another chance.

Within a year your actions brought me tears of gratitude, and I am sorry that it took me this long to reach out to you and let you know what kind of impact you had in my life. Let me tell you the full story.

I had been doing very well in the Arabic program. I was, in fact, near the top of my class. I was selected to study for a month in Egypt. While I was away at Egypt, on 7 February 2008, my wife gave birth to a beautiful little girl we called Sophie.

The light of my life.

The light of my life.

Sophie was the light in my life. We had another son, but he was my step-son and as much as I treated him like my own, this was my own spawn. She was beautiful. She was happy. She made everyone around her happy.

By the time I wound up in your office she was barely half a year hold. Late December of that year, less than two months after you convinced me not to pursue an early exit from my contract, I got a call from my unit superintendent who informed me that a slot had opened up for “some computer job” and, if I wanted it, I would need to report to the new training by the first week of January.

Bundle of Joy

Bundle of Joy

I took the job and after the training, in May of 2009, we trekked across the country from Monterey, CA to Andrews Air Force Base outside of Washington DC.

Everything was going pretty well. I still didn’t enjoy most aspects of military life, but it was nice having everything taken care of. In addition to your encouragement to give the Air Force another chance, I had the attitude that a job is a job and having a good one was better than not having one.

Happy

She made me happy.

By October that year the first signs that something was wrong began showing. We didn’t notice at the time, but in hind sight it’s pretty clear.

Notice the head tilt.

Notice the head tilt.

She had started walking, running a little, and growing more and more confident in her movements. Then, out of nowhere, she reversed progress. She wanted to hold hands more. She used furniture and walls to steady herself. Her head was almost always cocked to one side.

It took us another month and a half before we were concerned enough to get an appointment with her pediatrician. The appointment was set for Wednesday, 16 December 2009.

Her doctor, Dr. Barnes, wasn’t too concerned on the surface. She thought it could be a nutrient deficiency or something else that could be resolved with medicine or therapy, but just to rule out anything serious, she got us an appointment to get a CAT scan the next day at Walter Reed, the larger Army Medical Center for the National Capitol Region.

So, on Thursday, 17 December, we took Sophie to the hospital to get a scan. After the scan, instead of being sent home and told that they’d get the results to us in the next couple weeks (as is usually the procedure), we waited and waited for what seemed like hours (but may have only been a half hour or so, I don’t know). Eventually we were pulled into a closet of a room with a computer and two doctors. They pulled up her scan and showed us a big black area about the width of a baseball and told us that they weren’t sure what it was, but they were sure she would need an MRI and they were not equipped to do it there. They were referring us to the Children’s National Medical Center down the road. Sitting in that room I looked at my wife and knew that everything had changed and could never go back to being the way it was before. They sent us to the ER where an ambulance would pick us up and take us in for the MRI.

The ambulance took forever to arrive. We were scared and confused. It got late. Sophie had been fasting for the scan, and since she would be going in for another she had to continue her fast. She was hungry, tired, and righteously upset. She was the only one that cried though.

This is the first MRI result.

This was the first MRI result.

They couldn’t get her in for the MRI until the next morning. Immediately afterward they urgently recommended surgery. It all happened so fast. Wednesday: ordinary pediatrician’s visit. Thursday: precautionary CAT scan. Friday morning: brain surgery?!? There wasn’t time to think about it then though.

While in the waiting room we were sitting stoically by a nervous mother. “What is your child in for?” she asked. We instead asked what her child was there for. “He’s getting his tonsils removed,” she replied. We never told her what we were there for.

It was about that time that we got up and decided to walk the hallways for a bit. That was the first time we cried. Still though, our thoughts were focused on our family and our daughter. In that moment I was enjoying a gift you had given me–a gift that I became poignantly aware of less than a week later (we’ll get to that in a minute).

After the six hour surgery, I stayed the night in the hospital with Sophie that night and my wife drove home as it began to snow. The next morning we found that we were snowed in. You may have heard of that snow storm in the news as it was the beginning of the terrible 2009/2010 snow storm that hit the East coast.

The snow gave me a chance to finally update my family on what had happened.

She recovered quickly, and by Monday there was a break in the snow, a few roads had opened, and the doctor told us that we were free to go. Less than a week later, the day before Christmas, we got a letter in the mail from TriCare informing us that all of the bills for the hospital had been paid.

A wave of relief rushed over me. It wasn’t until that point that I remembered that in the civilian world people pay a lot of money for things like brain surgery. I wish I had kept that letter with its 6-digit total. That was the gift you gave me. Four years and almost a dozen expensive MRIs later, she is in perfect health, and we don’t owe a dime for any of it. We received some of the top care in the world, from one of the most qualified and expert pediatric neurosurgeons in the nation, under the guidance of one of the most respected and loved pediatric neuro-oncologists in the world, and it was all for the cost of one decision that you ultimately helped me make.

So, Master Sergeant Dremel, how did you save a life? Surely, even if I had left the military, Sophie would have received the care she needed. We would certainly not have been living near the Children’s National Medical Center in DC, so she wouldn’t have seen the same experts she saw. But, you know what? This isn’t about her life. She might have had a worse time with another hospital, or even had a very similar experience. But it would have cost me a fortune under any medical plan I would have been able to afford (remember, this was less than a year after we parted ways).

There are things worse than death. Not being able to support my family and provide for their needs is one of those things for me. That is my life. And you saved it for me.

Thank you.

Healthy, Happy, & Smart

Healthy, Happy, & Smart (with her Teacher)

For some photos and information about Sophie’s adventure, see:

No Promises

So, I’ve had my head buried in a fun project over the last couple weeks. I want to share it with you.

The basic concept was that I wanted to make a game with transparency in the sprite sheet, but without using a tool that lets me set pixels to transparent (no fancy tools, just basic ones). So I used Microsoft Paint, mixed two types of background colors that I could easily single out later for transparency (I think they are [254, 0, 254] and [0, 254, 0] — notice the “full” values are one value lower than the full 255). Then I drew a grid with those colors (more of a checkerboard) for 16 by 16 sprites, and started making a game. I pasted in a few NES and GameBoy sprites that were the right size just for testing purposes (I will probably replace them later, but they are still there for now). In the JavaScript, I use the HTML5 Canvas ability to pull pixel data, manipulate it, write it back in, and save it as an image object for use later. Because of a security feature with the canvas element (“tainted” canvas or something) this feature doesn’t work offline. So I had to make two rendering modes for testing purposes, but it auto-detects when it’s being served from the web, and uses the appropriate rendering mode.

This is the blank tilesheet I created.

This is the blank tilesheet I created.

Because the transparency is calculated manually, I thought it would be good to only load in the sprites that were needed for each map. This turned out to be a stupid way to do things, so I might be having it just do the process once at the beginning later instead of doing it every time I load a map or the help screen.

Then I wanted to make random dungeons. That turned out to be quite the challenge. I think I mostly succeeded though — I really like some of the designs it comes up with. I’m 100% positive my algorithm is the least efficient way of doing it, but it gets the job done. The maps it generates are really fun and interesting to explore (for me, at least). I hope you like this feature. I’m thinking about implementing a new “rendering mode” that uses these maps for a text based adventure game. All of the creatures, items, and rooms would be the same, it would just present the area to you in text form rather than visually. It could be a fun experiment.

Then I started sprinkling random things in for a while before realizing that I had room for over 1000 sprites, and only had a little over 100. The separate item sprite (for the HTML inventory display) sheet is also over sized. So I’m kind of thinking of filling those spaces with even more sprites. Some things are fairly easy to add in dynamically (like walls, floors, and furniture), and other (more interactive) things are only a little more involved to add in (like trolls who block doors, items, and other characters). If you want to submit some new sprites with descriptions of what they would be or do, let me know (email address on the right).

I also wanted to add a particle system, but I wanted it to fit in with the pixelated environment (unlike the particle system I designed for my space experiment game). The particle system turned out really nice, and I was even able to use it for a visual “+1” that pops up when you pick up or get an item. Particle emitters can behave like explosions (I even used the pixel data to create correctly colored particles in the same locations as the pixels of the exploding block before scattering them), or spray emitters that can be turned on or off, or any number of other things I haven’t tried.

The next thing I wanted was for it to be multi-player. Since I don’t do any server-side code still I decided to go with multiple players on one keyboard. Eventually I added a third player who uses the mouse. The controls for the keyboard players took a bit of work to get right. Players expect a certain behavior (rocking between directions as though using an NES controller D-pad). They want to be going one way, “rock” into another direction by hitting an additional key while still holding the first one to make a turn, and resume the previous direction of travel when they release the additional key. It’s harder to say than to do–you probably do it already naturally. And you expect it to work. Unfortunately it turned out to be a lot more complicated to code. But I succeeded. Again, it’s not the best code, but it does what it needs to do.

I also wanted to add in a leader board. Again, since I don’t do server side code yet the leader board is local only (hearkening back to the days of early arcade machines where the high scores were stored locally and you competed with others who used the same machine as you). I had to add in a way to put your name in (on the character select screen in the very beginning). If you forget, a default name is assigned.

One thing I’m very unhappy with is my persistence in using HTML to supplement what happens in the rendered game screen. Someday I’d like to make a game that has all of its interface inside the HTML canvas. Technically I did do this once, but the game has horrible flickering issues and is so poorly coded that fixing the flicker is nearly impossible. I’d need to rewrite the whole thing from scratch in order to fix it. I did reuse a couple sprites from that game though (since it also used 16 by 16 pixel sprites).

I can’t possibly think of all the other little problems I had to solve along the way (that’s what makes it fun for me). For example, this is my first project to use sound (I based the idea off this tutorial). I definitely need to redo some of the sounds, add more (including background music), and make sure the volume is consistent between them all. I recorded the current sounds (with one copyright-infringing exception that I hope falls under fair use) at 3am while everyone else was sleeping in the house, so it’s all my voice (sometimes sped up or slowed down). Audacity is a great little program for getting that sort of thing done.

99% made in Microsoft Paint

99% made in Microsoft Paint

In fact, nearly everything for this game was created with Microsoft Notepad, Microsoft Paint, and Audacity. One image, a fully transparent gif for the HTML formatting, was pulled from another project and couldn’t have been created with my chosen toolset.

Anyway, here’s the finished project. I call it “No Promises” because the game doesn’t check to see if a level is solvable (I can’t promise you’ll be able to beat every level). I added in the ability to abort a game (pause with Escape and click the screen) in case you get irreversibly stuck. An aborted game that includes at least one solved level will still be eligible for the leader board. Before aborting though, as long as some of the map is still hidden you can wait by the spawn point for random items to spawn. These items are designed to help you if you get stuck. Also, walls can have hidden doors in them (look for a wall tile that is just a little different from the rest).

Awareness

Notepad (software)

I love doing too many things. My interests cover such a wide gamut that I wonder if I’ll ever settle on a career path. But that’s not why I decided to write this blog post.

I’ve been writing JavaScript for a long time. It all started when a friend of mine showed me how you could make a webpage using nothing but Notepad in the late nineties. I was immediately hooked. But HTML was so limited (especially back then), and I wanted more. It began with copying (stealing) and modifying a simple mouseover script for making an image change when you hovered the mouse over it, and from there it exploded into rewriting Minesweeper (poorly), creating my own “encryption” software (ha ha, “encryption”), writing simple chat bots, making guessing games, and occasionally even making a website for one thing or another (with plenty of mouseover effects).

But I soon learned that programming could be so much more than what I was using it for. After a decade of believing that I could never learn object-oriented programming (the ideas just seemed too advanced for me), as recently as last year I learned that JavaScript handled everything in the code as an object and that it was an object-based (even object-oriented) language.

This opened up worlds of possibilities. I had heard many wonderful things about what one could do in an object-oriented environment. I was excited to dive in and try it.

My favorite hypothetical usage for objects in programming, and something I had never really grasped how to accomplish with JavaScript, was the idea of defining one object with its own behaviors and attributes and setting many of them loose in an environment in which they could interact. I immediately wanted to try something like this, but it proved too difficult for me at first.

So I applied my new knowledge about JavaScript objects in other projects. I was timid and unimaginative about it at first. Looking back at those early projects that incorporated custom objects I can’t help but imagine that I was afraid of these new blocks of code. It felt foreign, and my code was awkward (not that I’m doing much better now). Eventually the idea of objects clicked, and I was ready to try my idea again, but I didn’t realize it right away.

children_raidThen, last weekend, I was sitting on the couch with my family watching Chitty Chitty Bang Bang (written, apparently, by Ian Fleming, with a screenplay co-written, oddly enough, by Roald Dahl), and the idea seized hold of me again. It was the scene where the children raid the castle toward the end. They rushed the adults, and I pictured it from a bird’s eye view as dozens of little dots moving in and attacking other little dots.

Not an hour later I was writing code. I started by defining an Army object, then I wrote the Warrior object constructor. It was complex, with dozens of little stats to track, and several complicated functions for thinking, targeting, moving, attacking, defending, and more (nearly 300 lines of code just for the Warrior object). I wrote code to define the starting position boxes for the armies (bases, essentially), code to draw the objects as stylized DIVs on the page, and I wrote an HTML page with a basic framework to display it all. I’ve been learning to use the CANVAS element for drawing, but I wanted to stay away from it as this was going to be a project I could play around with at work where they still have us using IE8 and the CANVAS element isn’t recognized.

Surprisingly enough, when I first ran it (about five hours after I wrote the first line of code) everything worked (kind of) as expected. I had to rework the rendering code (I was trying to redraw everything each frame, and with hundreds of little HTML objects that initial approach was impractical). After fixing the rendering issue it ran smoothly and most of the behavior was exactly as I had imagined it.

bbsI’ve tweaked several of the systems since then, but the essential framework hasn’t changed. You can try it here if the link doesn’t get overloaded (who am I kidding – I couldn’t possibly generate enough traffic to take down a dropbox link). The one item I re-worked the most was the targeting code. In fact, I’m still not happy with a lot of things in this project, but there are even more things that I love about it.

First, it’s the very first time I’ve made something visual with what I would consider emergent behavior. I wrote a primitive chat bot (I cannot be held responsible for anything Jimmy says) once that had some pretty unpredictable responses (many layers of code analyzing your input and outputting based on more criteria than I could keep track of), but that “emergent” behavior wasn’t always contextually appropriate (Me: “Hi there! How are you?” Him: “You’re not being very nice.”). My little battle simulator behaves very much like a little battle. The winner is determined by a mixture of attributes (leadership scores, strength and number of warriors, amount of supplies available, location of base, etc.) and circumstantial happenings. I’m just as incapable of predicting the winner as anyone else, yet there is very little variation between the armies in the way of random number generation.

If you do check out the link, I apologize in advance for some of the Leader names. The idea of giving each army a leader is credited to my co-workers, but the names for those leaders were also their ideas. I made some slight modifications to a couple of the names, but one of them I left in a fairly inappropriate state simply because changing it would have taken away from the effect. Some of the names are not child friendly, just so you know.

The thing I’m least happy about with this is the targeting code. It’s limited, inefficient, and doesn’t accomplish all the goals I had for it. I realized yesterday that what I really wanted was a collision detecting framework. I imagined a centralized process being aware of everyone’s location and allowing any one of the Warrior objects to perform a simple query to get his nearest neighbors. I was unfamiliar with actual collision detection methods for software, and was pleased to learn that what I had devised wasn’t too far off from reality.

In my current system each individual on the screen has to scan every other army’s soldiers and rule out targets that are outside of his visual range. This takes a lot of processor time, and whenever anyone was selecting a target there was an awful performance drop (especially at the very beginning of the battle when nobody had selected a target yet). I did a couple of things to mitigate this: any time around half of the soldiers in the army’s array are dead it clears out the dead from the array, shortening the amount of time it takes enemies to scan for a new target (since they no longer have to process dead people); and I spread the search function out over several frames rather than attempting to do it all in one rendering cycle (I also learned how to make recursive or pseudo-recursive functions this year).

Obviously, with each and every dot doing his own collision detection and targeting it’s still pretty inefficient. I need a centralized collision detection system.

But now I have to learn how to implement something like that. I might implement it in my current project, but I think starting a new project would be better. I want to redo a lot more than the targeting. Perhaps version 2.0 will be rendered in the CANVAS element with animated graphics, explosions, terrains, etc. I wanted to incorporate tanks and other vehicles, other soldier types (archers?), goal oriented behavior (capture the flag), stealing supplies from enemies, communicating with each other when in proximity (“hey, watch your back”), and other behaviors that would require something like “sight” to be implemented. But most of all I want their movement and behavior to feel just a little more deliberate. As it is they inexplicably fail to engage each other sometimes, their movement isn’t very confident looking or smooth, and there are a lot of undesired artifacts that come from the fact that I’m still not all that great at writing code that does what I want it to.

rvwOne final, and related, note. A good friend of mine shared a post on Google+ recently (yes, some people actually use that – though I almost never use anything but Notepad++ lately) and she reminded me of one of the primary reasons I love programming. I used to want nothing more than to program robots. You can see the video from her post here.

In the video they mention a piece of software they created called Robot Virtual Worlds. It looks like something that should have been made twenty or thirty years ago for me! The other link from the conversation at right is for a website where you can register for their Robotics Summer of Learning. In conjunction with the Robotics Summer of Learning, it appears as though you get a limited (Summer only, I think) license for Robot Virtual Worlds when you buy(?) ROBOTC. I’m not going to pretend to know which version of ROBOTC you need (poking around on the site for a minute didn’t give any answers, but I plan to return on May 20th as they suggest on the website to find out more), but even just playing around with Robot Virtual Worlds for one summer could be super fun. I’d have to learn C, but how hard could that be? Right?

Simplicity, Productivity Boosting, and My Kindle

I'll be covering this topic.

I’m challenging myself to cover three huge topics and do it in as short a post as possible because I want you to actually read the whole thing.

Ready?

Go.

Simplicity has always been a thing for me. I have an entire site set up dedicated to seeking elegant simplicity in the things I own (though it’s been neglected for a while). Then, I read a book by Joshua Becker called Simplify. After reading it, I knew what I had to do. I had a vision of what I wanted my home to look like.

It was clean. It was orderly. We only had the things we absolutely needed or really, really wanted. No junk. No perpetual messes. No clutter.

But I knew I wouldn’t be able to do it alone. So I had my wife read the book on my Kindle. She agreed that it would be good for us to change the way we view our stuff, and we began.

That was back in January. So far we’ve de-cluttered over a third of the rooms and spaces in our home, and the areas we have cleared out are still immaculate. It feels great. I am a little less stressed even. I can’t wait to be done, but I suspect it will be less of a destination and more of a mentality, a lesson for our children, and a process. We will forever be questioning what we own, what we need, and what we use. It is a beautiful thing.

Along those lines, and before I move on to the second topic, I have to mention the simplification of my digital life (which began before even reading Simplify).

If you’ve been reading my posts for a while you’ll know that I have gone back and forth with Facebook for a long time. My last post on the subject mentioned that I had divided my Facebook existence into two accounts as an experiment to see if I really needed or wanted it.

Well, the experiment ended about four months ago. I realized that I just didn’t really need or want Facebook, so I shut down my accounts entirely.

Hurray for scientific experimentation.

On to topic number two: Productivity Boosting.

So last week I stumbled upon this article about fixing procrastination. Being the procrastinator that I am, I bookmarked the article and decided to read it later.

Then, the next day, I realized the irony of that approach with that sort of an article, and I printed the article, thinking that if I carried it around long enough I’d feel more pressure to read it than if it sat in my inhumanely long list of bookmarks in the To Do folder.

An iron, because I said irony.

So I carried it around in my book bag and even kept it on my nightstand for another couple of days, hoping I would read it.

Eventually, when I was about to condemn myself to a life of expert-level procrastination, I read the article.

I liked it. It was simple. I like simple. I could start immediately. Well, sort of… OK. I started the next day.

I highly recommend you read the article, but here’s what you need to know in order to follow along: The idea is that you pick three or four broad-ish goals to accomplish every single day, and if you meet your goals you put a big, fat, gratuitously gratifying “X” for the day on a special calendar reserved for this process. If you miss a day, you break the chain of X’s, which is bad, and you… um, you… well, you just allow yourself to feel horrible about breaking your chain, then you renew your resolve and go at it again the next day, or something like that.

In the end I wound up having to adapt the idea a little, since some of the specifics wouldn’t work for me and I kind of got lost on a couple of the ideas since my printer had an issue with figuring how images and text interact.

So I drafted up my Productivity Plan (the four goals), and decided that I would only hold myself to completing three of the four goals each day.

My goals are to exercise, simplify, write, and relax. I don’t want to expect myself to do all four every day because I don’t believe in exercising every single day (I have to have at least Sunday off, RIGHT?), and some days I just don’t have time to simplify something, or maybe I just can’t work up the energy required to do any writing because my soul has been drained by my sadistic government employer… I wanted some leeway to account for non-perfect days.

Vacation time, sick time, and other extraneous circumstances can be explained in the calendar by, instead of marking an “X,” marking an “S” for “sick,” a “V” for “super rad vacation that was totally too awesome to afford me any time to be productive,” or an “E” for “END OF THE WORLD, FORGET MY GOALS.”

Mostly, I anticipate a string of X’s.

So I printed off some pages of calendars. I wanted all of the days in the year to be on one sheet of paper, so I went with this calendar. I printed three years’ worth to keep me busy for a while. Then I got a super cheap-o folder from Target, and picked up these fat markers for $3.50 while I was there (sometimes Amazon prices are awesome, other times they are scary dangerous – as of this writing those same markers are selling for over $8 on Amazon).

You can't tell me this isn't an awesome hat.

To help with the exercise thing, I got a nice pedometer a few weeks ago. I also got a really awesome hat, but that’s completely unrelated.

Then I stapled the current year sheet to the front of the folder, put the extra year calendars inside with the article printout and my Productivity Plan, and started marking X’s the next day. Today is the second day of working under this slave-driver. So far, I’ve been quite productive and I like it. I also really like my hat.

Because one of my goals (the relax goal) deals with reading, it’s now time to mention my Kindle.

I decided to get a Kindle a while ago, and I did. And I’m very glad I did.

I didn’t promise a review, but here it is: I really love my Kindle and if you are on the fence between nook and Kindle, do your stinking homework. Don’t just ask me what to get. They both have their advantages and disadvantages, and the decision is yours because we live in a free country where choices are awesome. Embrace the choice.

The only “problem” is that now I have way too many books to read. I already had a pile a mile high (closer to three feet wide, in the bookshelf) of physical books to read (though those are very lazy-making since I think I have a paper allergy or something). Now I have over a hundred books on my Kindle that are waiting to be read.

It’s just too easy to add books to your Kindle library. They have this Kindle Daily Deal thing where books are put on super-sale. I know I picked up at least one $14 e-book for just $1.99 (a great book that I wanted to read – don’t judge me; I know you’re thinking back to my spat about simplification). I also picked up one of my favorite titles, which normally lists for $11.95 (but currently sells for &7.81), for just ninety nine cents! You can see how books can start to pile up. Some of the daily deals are free books, and I regularly catch wind of book promotions through Google+ where authors are giving their books away for free.

So I’m in the middle of reading the Hunger Games trilogy (almost done with book 2), but when I finish I’m going to have a reading list that puts all of my other “to do” lists to shame.

Oh, and they have this Kindle Owner’s Lending Library where many of the best-sellers can be borrowed for free. Indefinitely. You can only have one borrowed at a time, and you can’t borrow more than one per month, but that gives me easy, free access to so many good books it makes my head spin. That’s how I’m currently reading the Hunger Games. All of the books in that trilogy are free for me to borrow, for as long as it takes me to read them.

Crazy.

Alright. That’s enough for this post. I sure would like some comments from you brave, intrepid souls who made it to the end of my post. What are you currently reading? Do you use an e-reader? Do you have any productivity tricks? Do you like hats?

Nook vs Kindle: The Story of My Personal Decision

A Picture of a eBook

Image via Wikipedia

Ever since before we pre-ordered my wife’s first generation Barnes and Noble nook two years ago (probably even two years ago today since it first shipped November 30, 2009), I knew that I wanted an ebook reader that did not use a back-lit screen.

Back then I was aware that Sony and a few other companies already had expensive devices on the market that made use of the e-ink screen technologies I had read about a few years prior in Popular Science, and I had followed the release of the Amazon Kindle closely. This was a technology I knew I would use because I love to read, I love using gadgets, and I can’t read from a back-lit screen for too long before my eyes grow tired. As much as I love reading real books, the fact is that I get lazy about carrying around a whole book. I worry about tearing or creasing pages. And oddly enough, I have a sensitivity issue with paper.

Every once in a while, physical contact with paper is somehow registered as pain on my skin. I always loved to write, but my writing didn’t flourish until I could abandon the pain of resting my palm on paper and take up the keyboard. I have tried using gloves, lotion, petroleum jelly… You name it. Paper hurts my skin. Not all the time, but sometimes it’s so bad it becomes unbearable.

So I knew I needed an ebook reader.

I tend to shun products that quickly dominate a market and garner an almost cult following (ehem: iProducts).  I try to promote “the other guys” when it comes to making technology purchases, especially when the difference between the less popular product and the insanely popular product is negligible. And the Kindle had just about become such a product in the months leading up to the release of the nook.

Barnes & Noble nook (ebook reader device)

Image via Wikipedia

And so when Barnes and Noble announced the nook, I poured over the facts and decided that the  nook was a worthy competitor for the Kindle. When my wife expressed an interest in getting a nook or a Kindle, I helped her look at both as objectively as possible. In the end, she liked the openness of the Android platform, the fact that the nook would take the EPUB format, and she even liked that the nook offered competition for the Kindle. She opted for the nook, and we haven’t at any point in time regretted that decision.

So I guess a part of me always assumed I would get a nook. And recently, my desire to read and my desire to avoid touching paper books collided again and I found myself in a Barnes and Noble store holding the newest nook Simple Touch ereader. I loved it. Dark bevel (I heard once that the darker finish helped increase the perceived contrast of the e-ink screen). Slim profile. Compact design. Touch screen. And the price wasn’t bad at $150 (this was a month ago or so, before all the price changes).

I made the decision to get it. I knew that as the holidays got closer prices might go down, and I knew that some of my relatives might send money. I was too poor to just take the thing to the checkout then and there, but I knew I had a nook Simple Touch in my reading future.

It was just a matter of time.

Then Amazon did something crazy. They released an extremely similar product, at a lower price, with an ugly silver bevel. No worries. I still wanted the nook. But the Kindle was cheaper. But the nook had the dark bevel, and I was sure Barnes and Noble would match Amazon’s price soon enough (and I was right). So I stuck with my determination to get the nook.

Then Amazon did something else. They announced the Kindle Owners’ Lending Library. Essentially, it meant that I, as an Amazon Prime member, would have access to hundreds of bestselling books for free. Sure, it’s only one at a time, once a month. But these are not books that can be read for free on the nook. Most of them won’t even be on the library network where you can borrow books for free. And as a slow reader, I appreciate that the new Amazon service doesn’t have a due date. I can borrow the book indefinitely. This is a big deal for me.

But is it worth reading on a device with an ugly silver bevel?

Maybe.

So at this point my decision to purchase a nook wasn’t quite as solid. I had doubts. Also, somewhere in there I realized that the Kindle no longer held a firm, ridiculously popular grip in the ereader market. I realized that I wouldn’t have to feel like buying a Kindle was really just a pitiful cry for social help.

It was time to do what I do best: crunch some numbers.

I have used spreadsheets to analyze many things, and I knew that a spreadsheet could help me resolve this conflict. So I went to my bookshelves at home and wrote down the titles of almost forty of my favorite books that I already own (shamefully, a few of which remain unread). Then I went to my Amazon wishlist full of hundreds of books that have been recommended to me, or that I had planned on purchasing and reading in the future. All in all, I assembled a list of 103 books that were all relevant to my interests.

I decided that whichever service provided the greatest selection of books that I would be interested in reading would win. I put the list of books into the spreadsheet, then began pulling prices from Amazon and Barnes and Noble for the ebook versions.

Keep in mind that I put the spreadsheet together quickly, without doing a bunch of digging around. I went with the price for the first version that popped up, I didn’t do searches for variations or special editions or anything of the sort. I searched, I clicked, I got the price. That was it.

Oh, and I didn’t include expensive ebooks in my average price calculations. To me, any ebook that costs more than $20 should be ignored. If it’s that expensive but you just have to read it, find the hard copy in a library or check ebay.

Behold: MY SPREADSHEET.

I found out a couple of things right away. First, I have spent so much time on Amazon making music, movie, game, and grocery  purchases that I am way more comfortable with Amazon than I am with Barnes and Noble. I love going to a Barnes and Noble store in person, but I found their website nearly offensive in some cases. I can’t pinpoint exactly what I found so distasteful, but navigating it felt like trying to ride a bike through a rock garden, even after searching for 103 titles.

Second, and this one is important, I realized that Amazon does digital distribution better than Barnes and Noble. Amazon makes the entire process easier for me. Finding the books I wanted was easier and faster on Amazon, and since I already have an intimate relationship with them, the process for purchasing a book from them was easier (I found this out while trying to get free ebooks as a test of the system).

The results of the spreadsheet war? Amazon had 72 of my target titles in their Kindle library (69.9%) at an average price of $9.35 per title. Barnes and Noble had 63 of my target titles in their nook library (61.2%) at an average price of $9.32 per title. I found one book in the nook library that was less expensive than the version I found on Amazon. There were nine books that I found on Amazon that were not available for the nook. Not a single book from my list was only available for the nook.

All this meant that owning a Kindle would mean having access to all of the books I wanted to read in the nook library, plus some that I wanted to read that I couldn’t read on a nook, and it meant that I would have access to a constantly changing list of bestsellers that I could borrow for free indefinitely, in addition to all of the free books nook and Kindle can access equally (Project Gutenberg, the OverDrive library loaning network, and others).

Even with only a difference of 9 books between the services, a clear winner had emerged for me.

And since aesthetics are never a primary factor in my decision-making process, the Kindle Touch won by a landslide based on the Amazon architecture.

Plus, if the silver bevel does become a problem, I can always get a darker skin decal or a rubberized cover.

So last week I placed my pre-order, and today Amazon began shipping the devices, a whole week early.

I am very happy with my decision. I would promise a full review after I get it in the mail, but I’m afraid that I will be doing a lot more reading than writing.

Blogging Fail, Game Win

Alright. I am a terrible blogger. I’ve completely neglected this and every other blog I own lately. I get obsessed with projects and other things that I sink my time into, and blogging just doesn’t get the attention it requires.

But I didn’t get on here to post about how terrible I am at blogging, I wanted to invite you, my intrepid reader, to apply to be a beta tester on a board game I am designing.

You  need to be trustworthy. You need to be brave. You need to read the following and email me requesting an invitation to the beta. So do it.

You don't want to know the working title. Help me come up with something better.

Very Temporary Logo

The target crowd for the beta test is parents and teachers who are interested in games that can be played casually at home or in the classroom with anywhere from two to a bazillion players. However, anyone interested can ask to help. Beta testers should be relatively fearless when faced with dense and complicated looking rules and instructions. The game is simple once you know what’s going on, but at initial glance the rules can be a bit intimidating.

I will expect the following from my beta tester group in the form of regular communications (email, preferably):

  • Initial impressions upon unpacking the game.
  • Ease of (or difficulties in) getting started.
  • Any unclear instructions or opportunities to simplify.
  • Feedback on difficulty of the game (too easy? too hard?).
  • Accounts of several play sessions with different audiences (children, peers, hobos on the street, etc.).
  • Ideas and suggestions for improvement of any aspect of the game.
  • NAME SUGGESTIONS! I cannot stress this enough – this game NEEDS an effective, creative name. A reward is being offered for a winning name (it’s a secret reward for now, and it’s nothing to get too excited about). There will be a vote if more than one awesome idea is submitted.

Beta testers can expect their contributions to be implemented if a clear sense of improvement is perceived on my end.

Access to a printer is preferable for this beta testing period, but not required. If you do not have a printer, you have two options:

  1. I can mail you a packet of printed materials. This option has the disadvantage of costing someone money, and it does not allow you to quickly and easily receive updates if significant changes are made to the game structure.
  2. I originally played this game with a group of 9 and 10 year olds on a chalkboard and a sheet of scratch paper. Some features (cards) have been introduced since then, but at its simplest the game does not require anything more than a surface to draw on. See if you can figure out how to make it happen with what you have. In fact, I have included a small set of instructions for setting the game up on a drawing surface (even for those who are not artistically inclined). If you also wish to get crafty and recreate the cards manually, use the included PDFs as reference.

Option 2 is preferable, but I am willing to work with people who want to help.

If you are interested, please email me at brianhaddad@gmail.com and ask for an invitation. I will be hand picking my crack team of beta testers this weekend. Frankly, if we don’t have some sort of connection through blogging, Twitter, Facebook, Google+ or real life, I am unlikely to trust you with my intellectual property. This is not an invitation to see what I’m working on so you can sell it if it’s good. Significant contributions from the beta program will be noted and celebrated in a “thank you” note on the final version of the game somewhere, but that is all I can promise.

Thanks for reading, and have a lovely weekend.

Compressed Air Rocket Launcher Update

I just realized that Compressed Air Rocket Launcher can be shortened to CARL. I like that. I think I shall use this name from now on to refer to my launching platform.

Anyhow, we took CARL out again on Friday to test a few new rockets we had made since every one of them blew up last time. Since CARL had some sensitivity in the air tube leading into the main tank last time, I got some zip ties of my own to add a second tie. It seemed to make the seal a lot more secure up until about 85 psi, which is plenty of pressure for some awesome launches.

CARL’s battery box received just one more upgrade as well. If you recall from last time, the only thing I had left to do in the battery box was to secure the 9v battery clips to the inside so they wouldn’t rattle around.

We went to Target and got a cheap hot glue gun, which I thought would be good because the metal battery clips had several holes that the glue could rise above and spread out, securing the metal to the plastic base. Since the holes were right by where the battery sits inside the clip, I wrapped the 9v batteries in parchment paper to prevent the glue from sticking to them, then I applied glue to each of the holes from the bottom, and pressed them into position inside the box. After the glue hardened I removed the batteries, unwrapped the parchment paper, and replaced the batteries. It worked perfectly, and those clips are very secure.

During the operation one of the wires snapped. That’s where a nice wire stripper comes in handy. The wire was weakened when I used a knife to strip the wire and accidentally nicked the copper in the center. Anyhow, I just re-soldered a new wire into the clips (it was the wire connecting the two clips to combine the batteries into a single power source) and made sure I remembered the heat shrink this time.

In all, the battery clips ended up looking very nice, they are extremely secure in there, and the system still functions wonderfully. I only wish I had taken some photos of the process.

As for the rockets, we wanted to try a few different approaches this time. Here are the three models we came up with:

Starting from the right, my first attempt at a tougher body didn’t go very well. I went ahead and threw a couple of fins and a nose cone on it, but it was fatally flawed – I had wrapped it around the 1/2″ pipe a little too tightly. Even my attempts at removing some of the inner paper couldn’t remedy the situation.

My approach with this rocket was to use clear packing tape in such a way as to prevent air from escaping through the seams. I think the best approach was to cover the entire length in overlapping rings (overlapping by at least half the width of the tape), then start at the top and go down the entire length in a spiral pattern, again overlapping as much as possible. If the first spiral descended in a counter-clockwise spiral, I then did a second spiral clockwise. Then I reinforced each end of the spirals (top and bottom) with duct tape.

This rocket proved tough enough for the pressure, but because it was too tight I couldn’t get it all the way onto the pipe, causing poor performance (not much altitude, crooked flight path).

The middle rocket was built by my friend James. He showed up in the last post helping me with some of the soldering. You can see in the photo that his rocket is about 10% thicker than the other two. His technique for preventing a blowout was to put several thick layers on. Some of his layers were spiraled, some weren’t. I think he spend a full hour applying tape to his rocket’s body. Keeping with the thick build theme, he decided to use cardboard for the fins. For that we brought out the hot glue gun again.

Seeing how fun the hot glue behaved and how hard it hardened, he decided to “armor plate” his nose cone and the leading edges of his fins with the glue. Below you can see a video of all three rockets and their performance. Make sure you pay special attention to how the armored nose cone looked after the landing.

The final rocket, on the left, was my follow-up attempt after getting the other one too tight. To prevent myself from getting it too tight, I wrapped a whole sheet of paper around the length of the pipe before even starting my rocket. That way, when I finished the rocket and the body was on there real tight, I could pull it all off and remove the inner layer of paper. This resulted in a nice, loose fit on the pipe.

I ended up putting a tad too much tape on there, I think. At first I was only going to put packing tape on, so there are several layers of that, but then I decided to put duct tape on as well. I ended up putting about three or four layers of duct tape on (following the opposing spirals rule and finishing with a neat overlapping rings pattern).

Finally, I put three fins on it that had a slight angle to them that caused a really great spiraling motion after launch. The spin appeared to be just right to keep the rocket on a relatively straight flight path.

Check out the video of the launches below.

We finished up the weekend with a camping trip (CARL was not invited) which I will write about on our family blog in a couple of weeks.


Subscribe to Me

What I’m Reading

When I Post

April 2017
M T W T F S S
« Sep    
 12
3456789
10111213141516
17181920212223
24252627282930

RSS My Favorite Quotes

  • Quote #60
    "The greatest minds are capable of the greatest vices as well as the greatest virtues." - Rene Descartes
  • Quote #59
    "There is nothing noble in being superior to your fellow man; true nobility is being superior to your former self." - Ernest Hemingway
  • Quote #58
    "The fool doth think he is wise, but the wise man knows himself to be a fool." - William Shakespeare

I have had:

  • 50,214 page views (so far)

I’m a Twit