• Software Developers and Cognitive Load

    There are a lot of things that make a difficult job even more difficult. It’s often difficult to explain to non-developers how mentally exhausting creating software is. It’s just something that has to be experienced first hand.

    Knowing that, it often seems that we don’t do enough to lessen the burden of cognitive load. Every developer has experienced the frustration of trying to fit more things in their brain than it can hold.

    It’s one of the reasons why I am a fan of having a pen and a notebook handy to write down random things as they pop up. An easy way to make sure the cognitive ability you have is reserved for the most important work.

    Continue Reading Software Developers and Cognitive Load →
  • Ruby Reference

    This is a really cool reference for Ruby. I really like how they made the Language Structure more accessible. That type of stuff is sort of hard to find on the Ruby Language site.

  • A More Balanced Internet

    The problem with the news that IE is going to a Chromium browser is that the things that Google is doing, or trying to do (require SSL on all sites, favor AMP) gets worse. When they own market share, or even worse almost total dominance, nothing stops them from attempting even more of these types of things.

    This is the main reason why choice is a good thing. I like Firefox and I think I’m going back to that to help support a more balanced internet.

  • Building a Color Palette

    Steve Schoger has a book coming out called Refactoring UI and it looks like it’s going to be awesome. He just released a teaser for building a color palette. I’ve read quite a bit about color palettes, and while I’m not a designer, I have taken some design courses and I did win 2nd place in design competition for a Led Zeppelin collage (humble brag).

    Also, if you are interested in UI design and have not seem the Refactoring UI videos , stop everything and go watch them.

  • Attempting to Read Equations in Machine Learning

    I ran into my first issue that caused me to stop and try to dissect what was happening. I’m not bad at math, but I’ve never studied calculus or something similar. I have taken algebra and trigonometry many years ago. I knew the math involved with machine learning would slow me down considerably. Especially since I am the type of person that likes to understand things on a deep level.

    The equation was for Root Mean Square Error. I have been able to dissect it down to where I understand most of it. Here is what I know.

    • m is the number of instances in the dataset. Here I am working with housing data.
    • x(i) is a vector of all the feature values of the ith instance of the data set. So it works in conjunction with summation to iterate through each row of features in the data set.
    • y(i) is the label for x(i).
    • X is the matrix for all the feature values.
    • h is a hypothesis function.

    All of that is from Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems

    RMSE Equation

    So the equation says: Take each instance in a data set, run the features through the hypothesis function, subtract the labels, and square the result. Sum all the results and return. At least that’s what I think it says.

    Just so know, what this equation does is determine how much error the prediction would have.

    Here is what I don’t know. I don’t know what 1 over m is there for. I also don’t know if I need to understand this to proceed. I’m pretty sure scikit learn will do this for me. But it’s good to try to understand these things so I know what to use and when.

  • Digging into Machine Learning

    Since RockstarNinja has an AI element to it, I’ve decided to really dig into parts of AI. Primarily machine learning. I’ve dabbled a bit and I do understand the basics, but I decided to dig a little deeper.

    I know that video courses are really popular, but I still feel that if you really want to learn something, you just can’t go wrong with an in depth book. I decided on Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems. So far, it seems really good. Through the first chapter, I’ve learned a few things even though it’s just a general overview of machine learning.

    Looking forward to sharing what I learn as I work my way through.

  • Broken Dependencies

    One of the most frustrating things in building apps are things you can’t control, like an external API, breaking your app. A broken production app is the worst. A dependency you can’t control breaking and then causing havoc for customers is clearly worse than a developer pulling his hair out because something isn’t working the way it should. But a broken dependency in development feels like the equivalent of slow internet versus no internet.

    I would rather the whole things be broken than have the feature all set except for an external dependency that isn’t working.

    I guess the fix is to make sure there is always a fall back option you control for development.

  • Dysfunctional Single Page Apps

    I have been a vocal critic of modern single page apps. I feel like they are often (not always) over engineered, and because JavaScript frameworks change so fast, they are really hard to maintain.

    But more importantly, I don’t think they meet the users needs nearly as often as we think they do. I’ve been in more than one client meeting where the developers try to sell benefits that clients/users don’t care about. Things like:

    Developer: Look! Notice how the page didn’t reload?

    Client: Uh, yea. That’s cool.

    Most likely, the client only cares about the task at hand. The truth is it’s the developers that care about the tooling or of pages reload.

    Jim Newery has done a superb job describing patterns that single page apps follow that lead to being dysfunctional.

    So many quotes I could pull from the article. But my favorite is this.

    Mistake 4: Use naïve dev practices Under-investing in front end skills has knock-on effects.

    The relative ease with which we can create working software with JavaScript frameworks is alluring. But naïve development practices can threaten the long-term maintainability and quality of products.

    Poor development practices reinforce each other:

    • Poor or no test coverage, results in…
    • Highly-coupled code, that encourages…
    • Over-engineered solutions, that leads to…
    • Big monolithic balls of mud, that forces us to deliver…
    • Giant monolithic asset bundles

    Each of those is spot on and directly leads to the next. Almost all single page apps I have worked on lack tests and lead to hard to maintain code because of how interconnected it is. I’m at fault too. I never take the time to think about the front end architecture like I do the backend.

    Source: Create your own dysfunctional single-page app in five easy steps

  • Fitness for Programmers

    I started getting into fitness about three years ago. And by getting into fitness, I just mean doing something. Anything. It started with running. The first time nearly killed me. Then I migrated to cardio at a gym. Then cardio at a gym with some strength training with cable-based machines. Then cardio and weight training. Then I ended up where I am now. Weight training following a plan with some cardio.

    If I could bundle what I’ve learned from trial and error, and reading, into some tips, it would be this.

    1. Just start. Seems obvious. But even walking is better than doing nothing. Fear is big. But it goes away.

    2. Cardio is for health. It doesn’t do a lot for weight loss. It can, but it will require way more work. If your plan, like mine was, is to lose weight, there are more efficient methods.

    3. Follow a weight lifting plan. Strength and resistance training are proven to be the best for weight loss. As your muscles recover, they are hungry, and they use fat to regenerate. So lifting weights in the morning will burn fat and use calories all day. Where as running only burns calories while you’re running. Just randomly lifting weights seems like a good plan. It’s not. Let someone who knows what they are doing tell you what to do, and how much. There are tons of inexpensive weight lifting plans online.

    4. That reminds me. Losing belly fat is a myth. You cannot target a body area to lose fat. Your body loses fat from wherever it can. Bad news. Belly fat (for men) is visceral fat, and it’s the hardest to lose.

    5. No one at the gym cares about what you are doing. This was a big mental hurdle for me. But look around. They are all looking in the mirror. Everyone at the gym cares about themselves. Do your thing and know no one is watching what you are doing.

  • Using pkill to Kill All Ruby Processes

    I have found that at the end of the day closing all open apps on my computer is a great to signal that I am done for the day. It’s easy enough. Alfred has a command for Quit All Apps. Launching that shuts everything down.

    The problem is that it will leave any local web servers for Rails apps in a weird state where starting a new Rails server the next day will error out because one is already running on that port.

    In the past I have a done a couple of things. Using Activity Monitor to find and kill all Ruby processes works. So does using ps aux and grep to find Ruby processes and kill them one by one. But recently I’ve found the best yet.

    pkill ruby will kill them all with one command. Super useful and a great time saver.