Sunday, April 12, 2015

Further Adventures of Foster Care

This post about our first set of foster children comes long after they've been reunified with their biological parents. It wasn't until now that I've had the opportunity or desire to actually finish the post. This will likely be relatively short on details since I'm fairly well removed from a lot of the specific situations. Additionally, I want to finish writing this before moving on to our more recent placement as there has been significant movement in this case.

As a refresher, this is my first post on becoming a foster parent and receiving Mr Monkey.

Learning About the Family

One of the first things that we had to get used to was taking the baby to visits with his biological family. Through the process of taking the baby to the visits with his family, we came to know them reasonably well. Well enough to know that the reasons that the kids were taken from the family cannot be fit into any of the nice, neat boxes that we normally associate with children in foster care and their families. This has taught me, once again, to not to my trust my snap judgments made without complete information.

We learned that Mr Monkey (one of our nicknames for the baby boy) had several siblings who, at the time of our receiving him, were all in different homes. This was a bit surprising to me since I understood that DCFS attempts to keep siblings together. Even so, it was great to meet his siblings and see them interact with each other and their parents.

Meeting the Need We Didn't Expect

After several months with Mr Monkey, a new county social worker took over the case. She informed us that the court normally tries its best to keep siblings in the system together, as I had understood they did, and that they were going working to get three out of four of the children together. As such, she presented us with two choices:
  • Take two more of Mr Monkey's siblings
  • Have Mr Monkey, along with two of his siblings, move to another foster home
After discussing our options we determined that we could take one of his siblings but that it would be too much to take both. Our social worker was willing to work with us and allowed us to take just Mr Monkey's 6 year old sister while his brother stayed with his current foster parents. Within a few months we found ourselves with not just one child but two, one of of whom was a baby and the other 6 years old. Talk about a change in our lifestyle!

Living With the Children

As any parents know, living with children is a daily adventure. This was as true with these two as with any other children. Mr. Monkey was generally a very happy baby but, being a baby, he required LOTS of attention and very little sleep on our part. He, however, was always smiling, always playing, and very friendly.

The Banana (our name for Mr Monkey's sister) was a different, though wonderful, challenge. She, unfortunately, had been through more in her 6 short years than anybody should have to go through in a life time. We were the latest in a chain of foster homes that she'd been in since being removed from her home and we needed to gain her trust. Through many daily battles, including the infamous "battle of the broccoli", she came to love and trust us.

Seeing Them Go

During the fall of 2013, DCFS and the court came to the conclusion that the family had done what was required of them to be reunified with their children. That being said, there were many things that needed to happen from the county's standpoint before they could go home. These things hadn't been completed because the social workers were never quite sure that the kids would be reunified. Though we had moments of doubt, we were fairly sure that the kids would eventually go home.

Because of this decision, our county social worker had to being rushing through the required items. While we never had any concerns that caused us to have reservations about the kids going home, there were a few minor concerns that came up. This caused some frustration because it felt like the county social workers began to ignore our concerns because of the foregone conclusion that the kids were going home. Additionally, it tainted what was a good relationship with one of the biological parents. It seemed that they reacted as if we were trying to keep the kids from going home when we were really just trying to make sure they were safe and cared for in the process of going home.


It has been a year and a half since Mr. Monkey and the Banana were reunified with their parents. Even though we have grieved our loss of them and their presence in our home, we rejoice that their family is whole again. We have not been in contact with the kids or their parents at their parents request and can only continue to pray for their health, well being, and life.

Tuesday, December 10, 2013

Our Foray Into Foster Care

My wife and I have had a long term dream of being foster parents. This dream was born from the desire to provide a home for children who are in a hard place, to help those children through whatever situation they're in, to heal them, and to help heal their families.

Following is the process we went through to become foster parents and how we received our first foster child. I realize that this post stops at a point in time about a year ago, but I wanted to get it out there. I've got a further post (or posts) in the works about what it was like having a foster child, about receiving a sibling, and about seeing them go home that I'll share when they're done.

Process of Becoming a Foster Parent

We started the process of becoming foster parents by looking into the differences between going through a foster agency and going through the county. The Department of Children and Family Services (DCFS or "the county") is the governmental organization in LA that handles all of the cases for foster children. They are the first line of defense when dealing with these children. Stereotypically, the social workers working for DCFS are burdened with too many cases, are overworked, and because of these things can't give each case the full attention that it needs. (Please note that I don't say this to bash county social workers at all. This is simply the stereotype that I've heard propagated and, to some level, experienced.)

Foster agencies exist to help extend the support, services, and attention these children  This is a wonderful thing, but in order to be able to operate on a day to day basis they take a significant cut of the monthly stipend given to foster parents from DCFS. We decided that we want to be able to provide the best care possible for the children regardless of how much or little money we'd be getting (it would never be enough to provide fully for the kids anyway). Because of this we decided to go with a foster agency so that we'd have access to the extra support that they can provide.

Once we had decided on working with an agency, it came down to choosing an agency to work with. We received several recommendations for Five Acres. Given how long they've been running as an organization and that their mission aligns with our goals of providing care for the whole person (emotional as well as physical) and permanency (reunifying with the biological family if it makes sense, otherwise finding a good fitting permanent home asap), we decided to go through them. In addition they've got a group home and offices in close proximity to our home which provide meeting space for family and therapy visits.

There were things that we expected to have to do to prepare ourselves to be foster parents. Things like going through some sort of training and child proofing the house. Five Acres requires that parents get a certain number of hours of training per year to become and to maintain their status as foster parents. They provided a Sat/Sun course over several weekends that allowed us to meet the requirement. From there, although there were a couple items that caught us by surprise with our house, we were able to get it setup and approved rather quickly. (By quickly I mean 3 months from when we "officially" started going through the process. We had finished up a lot of stuff beforehand since we'd heard how stringent some of the house rules could be.)

The thing that I personally did not expect was the interview with the social worker. Going into foster care, I knew that the children that we'd be dealing would have been through experiences that I wouldn't wish on my worst enemy. The social worker reminded me of this and said that we needed to explore in detail any traumas that I had personally been through in my life. When I asked why, she gave me a response I'll never forget:

These kids will have triggers around the issues stemming from their traumas. As foster parents, you MUST know what your traumas and triggers are so that, when a child reacts out of place of hurt, you won't allow yourselves to be triggered and respond in a way that will further hurt the child. If we can avoid placing a child in your home that has the same triggers you do, we will.

This conversation lasted for quite a while with my wife and I individually, moving through all of the parts of our lives. After these discussions and fixing a last few items at our house, we were certified as foster parents!

Meeting the Need We Expected

While we were preparing our hearts and home, we discussed whether we'd prefer to take care of a child in any specific age group. As is typical, my wife had more experience with children than I. Because my experience was lacking a bit, we decided that starting where every other new parent starts would be a good idea. We found out after finishing our training that there was, at that time, a great need for families to take in infants. By the time we were actually certified, we'd been told this so many times we were convinced that we would get a call that very day. While it wasn't that day, it didn't take long for us to get the call that the was a baby boy who needed a home.

Later that night, the county social worker knocked on our door and then walked in to our living room with a handsome baby boy in his car seat. We went through the paperwork and, while we were doing so, the little guy stared up at our dining room lamp from his car seat enamored by all of the colors. Then she asked us to pull him out of the car seat.

I imagine that the nervousness I felt was similar in nature to what first time fathers feel when taking their baby home for the first time. Plus a little, maybe, since he wasn't my child but was mine to take care of. My wife pulled him out of his car seat and held him for a bit .... then handed him to me. What a feeling to have such a small life in your arms!

Tuesday, August 27, 2013

Creating Work From Your Passion ... or Finding Passion in Your Work

Recently I wrote an entry about finding what you're passionate about to help determine what projects you might want to work on during your time off. In the past few days, I've read a few blog entries that not so gently reminded me that if you want to take your passion and make it your bill paying work instead of your hobby, it will only work if your passion includes or can withstand the nasty, smelly, ugly side of running a business to make money. (Note that this is totally doable, but it's best to go into the business eyes wide open to some of these items)

These posts reminded me that leaving your passions as hobbies so that you enjoy them as such is a perfectly valid choice. If this is the route you take, make sure to find *something* that is part of your current work that you can take joy in. This will help bring several ways:
  1. You'll be happier/more joyful during your work hours. This will help you be a more productive employee since you'll have something you enjoy while you're there.
  2. Your passion can stay your passion. You'll have more enjoyment of it while you're doing it since you're not depending on it to pay your rent.
  3. Finding something to take joy in can be hard. Look anyway.

Here is Matt Linderman from 37Signals describing this idea:
"Find meaning in what you’re doing. Work to improve your industry. Get joy from making a customer’s day. Surround yourself with the kinds of people and environment that keep you engaged. Figure out the details and day-to-day process that keep you stimulated. Focus on how you execute and making continual improvements. Get off on how you sell, not what you sell."

In my list of priorities that I laid out in my previous post on this topic, I listed a lot of things that are not work related. Some of these include my wonderful wife, our awesome kids, my faith, and singing in a barbershop chorus. These are the really important things to me outside of work. Sure, I'd love to work on a famous project and/or for a big company, but is it important enough for me to take the time away from these other priorities to do so?

Should I realign my priorities? I'm not particularly inclined to at the moment because I love my wife and our kids, spending time with them, and taking care of them. Apart from that, singing brings great joy and has been a wonderful way to spend my personal time away from my family.

This does not mean that I'll abandon pb_ray or my vimrc repository. I will continue working on them as I get the opportunity. I'll also continue practicing my craft so that I get better. I just haven't yet found that project that is special enough to be a passion for me.

In the mean time, I plan to do my best at going through the 6 steps at the end of Amy Hoy's post on the subject. In other words, to steal her punch line, to practice open eyed passion instead of blindly following my passion.

Any suggestions, of course, are welcome. As is debate with anything said above.

Tuesday, August 13, 2013

pb_ray: A Ray Tracer Based On pbrt

One of my projects on github is pb_ray. It's my implementation of pbrt from version 1 of Physically Based Rendering: From Theory to Implementation. I'm using version 1 since I can read that version of the book on Safari Books Online and version 2 isn't there at this point. I'd happily read version 2 but, compared to the price of the Safari Books Online subscription (free for me from my company), it's very expensive.

Edit: I checked Safari Books Online this morning and it looks like the 2nd Edition of Physically Based Rendering has shown up. Given that, I've just added it to my favorites list there and will start taking a look through it. Thanks guys!

I'm pretty sure that my version of the code is still in line with what Matt Phar and Greg Humphreys have since I checked in on their code base in github to get some clues for some specific questions, but it's great to see the second version of the book available.

As I've mentioned in a previous post, passion is necessary to a project to get it done in a reasonable amount of time. Which is exactly why this project is taking so long. It's become a playground for technologies that I want to learn at my leisure.

Here are some of the things I've focused on:
  1. Building in multiple environments.
    1. Why? Because I'm lazy and want to be able to use Macbook Pro on the couch when I don't want to be tied to my Windows desktop. The fact that anybody can pick it up and configure as needed with a single command is also a benefit.
    2. Because learning to use CMake may come in handy on a future project.
  2. Unit Testing
    1. While I can't follow TDD with this project to flesh out what the code is supposed to do since the book has broken down the tasks into code already, I hope for a couple things. First that, if there is anything in the code that could be written in a clearer, cleaner, more testable way I'll find it. And second that it might be useful to the actual PBRT project.
  3. Vi Plugins
    1. This project gave me an excuse to play with Syntastic.
    2. I will likely start taking a look at adding YouCompleteMe to my vimrc repository next.

Why did I pick ray tracing? Simply because it's interesting. It was one of my favorite projects in college.

Additionally, the idea of being able to take a piece of hardware and figure out how to harness its power then tax it to the limit in service of something productive has always interested me. Ray tracing is not only computationally expensive but generates a visually pleasing result (if your input is good, of course).

The idea of pushing hardware to its limits also encompasses finding out how far I can push those limits. It's a challenge to myself to find the biggest time consumer in the run of a program then to see if I can make that part run faster. (Ok, so I know that there are a TON of people who are way smarter than I am who are also doing this and getting paid for it, but it's an interesting challenge for me)

Lastly, I'd like to learn how to make the ray tracer runable on a GPU. This has been done before, of course, but I'd like to learn how it's done. Just from a quick Google search on the subject, here is NVIDIAs page showing their work on this subject and several different renderers using their work. Doing this falls under the idea of marshaling all of the available resources to name a project run more quickly. If there's a GPU sitting on the computer idle while the CPU is crunching away at something, it might as well be used to help.

Thursday, July 4, 2013

Utter Ridiculousness in the Visa Process

I recently read the following letter to the president regarding a Jordanian citizen who, having spent several years in the US studying for a PhD, was denied re-entry after getting married in his home country. He was, according to the author:
  1. A model student who excelled at his studies which some $200,000 of taxpayer money was spent on.
  2. Had a great job lined up that would've brought lots of benefits back to local and federal government.
  3. Was a great ambassador for the Muslim faith, showing by example what the faith represents at its best.

I'm sure that there are details regarding the denial of re-entry that neither I nor the professor at Johns Hopkins University are privy to. That being said, this seems utterly ridiculous given the information that I do have. Why would we want to keep somebody who seems to be the best possible representative of another country and culture out of our country? Especially when they're poised to contribute so well to society and to a successful company?

I suppose that I'll never get the whole story and so, at this point, I'm left with praying that:
  1. There was no injustice from anybody involved in the process.
  2. If there was that it would be rooted out and the people punished as appropriate.
  3. That the officials involved would realize that this is ridiculous and grant Omar a visa if he is still willing to come to the States.
  4. That he would have the grace to not hold this silliness against the country and it's people as a whole.

Tuesday, June 11, 2013

On Finding A Project That You Love

In what little spare time I have, I have cycled through several projects looking for a side programming project to work on. Here are several of the reasons that I've used in the past to start a project. After listing them, I'll give you the main reason why they're all bogus:

  • I want to learn <insert some in demand technology>
  • This project is associated with a big name company ... maybe they'll notice my contributions.
  • There are lots of companies using this technology. That would be a good one to learn.
  • <Insert famous developer> says that learning about this topic will make me a better developer.
  • This <insert subject>was interesting when I worked on it for a class in college. I could re-learn about it and maybe that will lead to a project I'm interested in.

The main problem with all of these reasons? There is no passion in any of them. When using these reasons (except for maybe the last one), the project is a means to an end. If something else comes up that keeps you busy for long enough to lose momentum on the project, you're not going to want to finish the project. You have no reason to.

Given this, how do you go about finding a project to work on?

Take some time to be honest with yourself and answer the following questions:

Who am I trying to please?

If you are working from the path that somebody else took to success or the list of things they put forward on how to run a successful project or become a successful developer, you'll only reach moderate success at best. Nobody can give you anything but their opinion on what you should do and how you should get there.

You must take some time to find something that is important to you. You'll learn what you need to learn in order to reach a goal that you care about.

What are my goals?

What do I care about? Here, for example, are some of the things that I have as goals for myself regardless of if they directly apply to software engineering:

  • Become a better husband to my wife every day
  • Become a better father to the children in our home every day, whether they're foster kids or, someday, our own
  • Grow deeper in my faith every day
  • Grow deeper in my understanding of the world around me every day
  • Become a better singer
  • Win an international gold medal in the Barbershop Harmony Society's chorus contest (here's the first concretely achievable goal)
  • Gain the respect and admiration of the people in the communities I take part in (respect and admiration from your peers is a need everybody has, including myself. How important is this need to you? Although it is a need, are you letting it control you?)
  • Improve upon a complex project in such a way that people can get more creative tasks done and spend less time on tasks that can be automated (ray tracers and compilers are of interest to me at the moment)

Am I willing to shift my focus if pursuing my goal reveals a worthier objective? 

Regardless of the reason that you start a project and whether there is passion there or not, be ok with a shift of focus. If you find yourself drifting off into some other part of the process of the project, take some time to consider whether the direction in which you're drifting will be useful to you and others.

As an example, drift on one project (pb_ray) has lead me into working with build tools such as cmake (to make it build on multiple OSes) and editing tools (vim, syntastic, etc). Some of these things even lead to topics to start this blog with. Eventually, I imagine that I'll get back to working on the original project.

In the long run, having a project or goal that you care about makes life much better. It gives you something to live for. Otherwise it is too easy to let life happen day by day becoming further chained to someone else's opinion, drifting on the waves of their changing whims. I will keep working every day to find what that goal is for me. 

Wednesday, May 15, 2013

Introducing Automated Testing to a Legacy Product and Team

Testing your product is critical to its success. But if you've got a legacy product that doesn't have any automated testing facilities and is eyeball deep in critical change requests, how do you go about testing it effectively?

How do you convince team members who've been reacting to "emergency" change requests for years that it is a good idea to take extra time to make the code more maintainable and cover it with tests? If they think this is a good idea but don't believe there is time to do so, what then?

Following are some of the general reasons why automated testing is a great idea. While each person that is resisting writing automated tests will take different evidence to convince, I hope that these can provide a good starting point.

Start with testing only the code you are actually changing for the change request. By doing this, we don't have to worry about taking the time to write tests for the entire program. Additionally it may help alleviate some of the "where do I even start?" blues that can be associated with facing such a monumental task.

Refactor the code being changed along "seams" as described by "Working Effectively With Legacy Code" by Michael Feathers. Look for places where sections of logic can be pulled into smaller, easier to test modules (functions, classes, etc). The process of doing this forces us to simplify the code as much as possible. Doing so will allow us to test it in a sane manner.

Set team expectations that testing can be ignored if the situation is truly an emergency (and define what an emergency is so that it is not defined by default as "any change request"). Setup the project configuration in the build system such that tests can be built or not built. This will allow the flexibility to not write tests if there is a rush on the change request. Given that the team is used to working without taking the time to add tests, some of the team members will appreciate this as well. It can be used to ease such team members into testing; allow them to make changes to the project while we build up enough of a test suite for them to see how effective it is.

Now, having suggested that an option for not writing tests be implemented, let me also suggest setting team expectations that demand tests be written and run for emergency fixes the next time the code is open for changes. The goal here is to make sure that the tests don't become broken or stale through several sets of "emergency" changes. This also helps make sure that you actually start writing tests instead of just declaring everything an emergency that doesn't need tests.

In order to write tests we have to understand the requirements of the code that is being changed. We have to understand what good input (or beginning conditions) are. We have to understand the output that this will produce. We have to understand what bad input is and what, if any, errors the code will produce. If we don't truly understand any of these things, even if we think we do, attempting to write a test will quickly make it blatantly apparent that we don't actually understand. Consequently the process of writing tests will help us to understand why we're changing what we are. This helps us to write code that does what was asked for the first time (as opposed to having to go through cycles of coding, failing QA for requirements issues, coding, failing QA, etc).

There are many other reasons (and ways) to write automated tests which can be found in a variety of books and blogs. There are also many tools that can help with many aspects of testing from mock generation to test generation. Please take some time to think about how automated testing testing can help your project. I promise that it will help you in the long run.