Friday, May 25, 2018

Freelancing -- Beginning of a New Journey

Hi All!

Its been quite a while since I decided to write anything on this blog but I thought that the start of a new journey in my career would make a great reason to come back here. That new journey is becoming a freelance software engineer!

I am doing business as Taylor R Price, Software Consulting and can be reached at trprice.consulting@gmail.com.

Note that this does not mean that I would turn down a full time position with anybody that I am currently interviewing with or possibly interviewing with in the future that happens to find this post.

Why would I become a freelancer?

That is an excellent question. I've spent the last 6 months at home spending time with my family and looking for work. Along the way, I've realized several things:
  1. I'm a great software engineer but I'm not so great at on the spot tests that happen during in person interviews. Take home assignments after phone interviews and before in-person interviews aren't a problem but my brain just seems to shut off when I get into the interview room.
  2. I don't want to spend my time practicing for those tests. While I could get good at them, that's not what I do for a living.
    1. Note that I'm not opposed to practicing things like data structures and algorithms. I spent some time using HackerRank and posting my solutions to Github. They are foundational concepts to being a software engineer and should, at some point, be studied by everyone seeking to be a knowledgeable programmer. But practicing them doesn't pay the bills. Nor are they necessarily used in the day to day practice of fixing bugs or adding new features (that's a topic/argument for another post and might require a beer or few).
  3. I'd love to learn some new languages and technologies that I didn't get paid to learn and use in my recent positions. Presently I'm taking courses on Ruby on Rails.
  4. I don't have a job yet and I need to pay my family's bills.
  5. I'm excited to start something new!

Note that none of the above reasons address any of the benefits or downsides of being a freelancer. They're just reactions to my current situation and, for the moment, they are real frustrations and feelings that may be soothed by becoming a freelancer. That being said, I know that I'll need better reasons for being a freelancer that will keep me going during rough times. So, to address the "now why are you REALLY starting your own company and where do you REALLY want to go?", here are some of my reasons and goals:
  1. I like helping people bring their ideas to fruition. The better I do at this, the better my business will do. Win - Win.
  2. As comforting and secure feeling as a job with benefits is, I don't want to get or stay pigeon-holed into any one particular skill set such that I can be dropped when not necessary any more.
  3. I aim, in time, to transition into more of a consulting/advisory/architectural role. This will come with lots of experience and reputation but, I hope, in time I will get there.
  4. I enjoy the flexibility of being able to work from home spend time with my family during the week.

What am I doing to become a freelancer?

Really this question should be: What problems do I have to overcome to become a successful freelancer? (And what am I doing to solve those problems?)

My first problem is a lack of contacts who know that I am now willing to take on small to medium sized programming jobs that my current skill set will allow me to complete quickly. That's one of the reasons why I'm writing this post. It is my hope that some of my friends reading this will have some work to be done or know somebody who does. As a side note to this point, the majority of my experience presently lays in writing desktop applications in C and C++ for Windows and Unix machines. I'm learning Ruby on Rails presently to extend my capabilities into the web development arena. Check out my LinkedIn profile and StackOverflow profile.

My second problem is finding jobs to do to build reputation and extend my network of friends. For this problem, I'm currently using Upwork to find some positions. I welcome suggestions for changes to my profile if sent to me privately.

My third problem is knowing how to run a business. I've been listening to The Freelancers Show in an attempt to introduce myself to the problems freelancers have. I've also read a few blogs to help inform myself (this blog from Hired is a good start). I'm aware that this is about as polar opposite to earning myself an MBA and learning how to run a business "properly" (if that's even possible) as I can be. Again, please let me know what problems I'm likely to face and I'll add research to my task list (which is quickly becoming GIGANTIC).

Lastly, a major question I've been wrestling with is how to transition into working in new areas of technology that I've not yet worked in professionally. As mentioned earlier, I'm currently taking some courses on Ruby on Rails through Coursera. This, of course, doesn't mean that I'll come out the other end of the course a rails wizard. My hope is that it will bring me to the point of being able to handle small jobs that will guide me into being a wizard of the web. For now, though, I can handle the majority of your C++ projects and look forward to doing business with you!


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.


Conclusion

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.