Thursday, May 7, 2015

My commitment to never being "that guy"

An anecdote came to mind this morning in dealing with a work situation:
Back when I was in college in San Jose, I moved into a small apartment building where the entire, HUGE yard was dirt. No grass--just weeds and dirt. I asked the landlord if I could garden. 
He said, “Sure! Do what you want”. 
The people that had lived there for years never did anything with it. So I picked out all the rocks, amended the soil, and started planting: flowers, vegetables, a little sunflower forest, butterfly garden, morning glories that covered an ugly fence…20 kinds of herbs. It was so lush and beautiful that people walking down the street would stop and comment. There were humming birds, butterflies, lady bugs…in a yard where there was previously just dirt.
What happened? Some residents in the building got angry and started complaining that I was “taking over the yard” and that they wanted to plant things too but felt like they couldn’t because I was. They never said anything or commented to my face about what I was doing, but went to the landlord as if I was some sort of problem. My response to my landlord was kind of “Whaaaat?? Nobody was doing anything with it before, but there’s plenty of room for every one. If you want to garden, then PLANT!”
So everyone started gardening and I was excited that the action I took inspired others to garden too. But one guy insisted I kept maliciously knocking down his corn. Never mind there were a bunch of feral cats and opossums in the neighborhood — and cats like to climb things. He was insisting I was getting up in the middle of the night to knock down his corn and even vandalized something I had left on the back stairs one evening in retaliation.
Thankfully, one other neighbor who became my friend, finally had a talk with him and told him, “You know, I don’t think Mary really cares if you plant anything or about anything else you do”, and he finally mellowed out.
Some people don’t like to be challenged. I never purposely try to challenge anyone, but I’m a doer, a thinker and an idea person. My experience is that, unfortunately the people who can’t bring themselves to do the same thing and are not confident and passionate about what they do, complain that the doer is not “playing nice” or is somehow cheating, or has an unfair advantage. People who are confident and passionate about what they are doing are inspired and step up to the challenge.
I hereby commit to never being that guy, but I am also not going to let that guy drag me into not doing my best and my most creative. I will gladly help and support people who ask for guidance, but I refuse to do mediocrity and half-assed just so someone feels better about themselves.

Tuesday, December 9, 2014

Caching & Naming: the Hardest Things About Programming?

I recently heard someone say: "The two hardest things about software engineering are caching & naming."

I've not learned much about caching, but am about to. The app I am working on was at one time running slow, so the agency decided it would be a good thing to implement caching for user images & data. They did a little overkill though, and have implemented several layers of it so it is affecting user experience. Plus, my company is spending too much on these services.

So, in order to help optimize the app and its caching, I'm reading this article and this article to start learning as much as I can about caching. If you can recommend any others, please do!

The naming thing I'm pretty comfortable with. If these two things are the hardest thing about software engineering, I got this.

I like this idea from a commenter on Steve Souder's blog, Cache is King:
"If you are combining all your JS into a single concat file, you are undoubtedly combining some code which is extremely stable (like a jQuery release which will never ever change) and some (maybe a lot) which is quite volatile (like your UX code you tweak frequently). If you only serve one file, you have to pick one caching length for all that code.  
If you split your JS into 2 chunks (the volatile chunk and the stable chunk), you can serve each with different caching length headers. When your UX code updates frequently, over time, repeat users on your site will not have to keep downloading all that stable code over and over again.  
I have done these things in production on large sites and I can attest time and again it helps. It helps big time. And it’s nice to see your real numbers research backing that up."

Wednesday, November 5, 2014

How We See Ourselves as Developers

It's common knowledge--among the female developer community, anyway--that women often under-represent their skills. Women say they can do what they've done before, where men say they can do whatever they think they can do, whether they've actually done it or not. It's kind of a confidence thing.

So, I've been calling myself a "Junior Developer", which is what I feel like most of the time. I feel like I'm being honest: I know I know a LOT--more than a TON of developers I have seen get hired. But I don't have consistent experience in a long term intense production environment--this is what I feel makes me junior.

Today I received this feedback (via a staffing agency) from a technical screener who is a 20-year veteran. It was just the confidence boost I need. Furthermore, he rated me between a 7 & 9 out of 10 in FED skills.  
"Mary has an extremely evolved and intuitive grasp on javascript and the front end. She certainly has a talent for merging graphical design with data delivery. Her skill set seems to have started from more of a design discipline, but in our conversations she demonstrated a strong understanding of how different architectural components would fit together. She answered strongly technical css questions as well and showed confidence with html. I would have no problem saying she is very technically competent. 
She certainly has the ability to perform well as a Mid to Senior front end developer on a team with several others or a strong lead, as she could use more experience with different frameworks/architectures, workflows, and some confidence building. 
She certainly seems to have a strong skill set topped off with terrific communication skills. I would highly recommend her for a position which will really allow her to grow quickly."
It kinda blew me away, and it has made me realize how I do downplay my skills--but I'm not sure why I do. I don't know if I'm trying to be humble, or manage expectations or what, but I need to knock it off.

Sometimes it's just good to gain some perspective on where you're at from someone who has no agenda other than completing the task of giving an honest and accurate appraisal of someone's skills. He gets paid whether it's positive or negative, and he's got a reputation to maintain. 

Monday, October 13, 2014

gRaphael Line Chart With Grid & Popup Tags

I've been learning a few different data viz applications and am learning a bit about what they are each capable of.

Here is an example of a line chart I had to build in Raphael, using the gRaphael library. Why Raphael?

  • It's fairly light weight & makes it easier to render SVG objects without drawing them by hand. 
  • It is backward compatible to IE 8. The company I'm working for has clients that are slow to update to the most current browsers, so backwards compatibility is required. 
Some drawbacks: 
  • It is really poorly documented. 
  • You can not control the style of the axes or placement of the labels. The labels in my example are simply divs that are placed using css. 
  • You can not easily do grids. This is kind of a joke. The grid in my chart is actually a table inside a div that has the borders turned on. There are several divs in this chart, and they are stacked on the z-index to create a hierarchy. The white square is at -10, the grid is at 0, and the line chart itself is at 10. 
You may be wondering why I did not do a set with the white graphic and the line chart -- or simply make the background of the chart white. The problem is the grid. As I mention above, I had to try to sandwich the grid between the line chart and the background. For some reason, the z-index settings seem to not be working and I need to try to get it to sit just behind the orange line. They block access to the tags. 

The popup tags are set by x & y coordinates, but are populated with yet a third data set. 

I'll post an updated solution later. In the meantime, I'm going to look for a libraary that does exactly what we need it to so we don't have to do all the klugy workarounds. 

Wednesday, October 1, 2014

JavaScript Frameworks

Some Javascript frameworks I've been using lately:

Backbone.js: A front end framework for single page applications in an MVC framework.

d3.js: A Javascript framework specifically for graphic data representation. Utilizes SVG, but is much more rich and complex as far as data integration than raphaël.js.

Some good d3 tutorials:

raphaël.js: a light weight library for creating simple vector graphics. Better for backwards browser compatibility than d3.js. The axes are not easily configurable and one of the complaints many have about it is how poorly it is documented.

Here are some blog posts I found about it:

three.js: A Javascript framework for 3d graphics.

tween.js: A javascript tool to do tweening in animations. 

node.js: A javascript framework to create an environment for multi-core applications.

Wednesday, March 19, 2014

More Notes on Erlang

So, I have been talking about Erlang a lot. It just seems to work so well  with my thought process. And for crying out loud: the syntax is so similar to written language! Clauses? Periods at the end of statements? Semiclons? How can you not love that?

Yes, it is not useful for processing huge amounts of data and crunching numbers. What it is good for, however, is allowing a lot of connections to the application without crashing. This is why Whatsapp was able to have ~500 million users and a staff of only, what was it? Thirty-two?

Since it is multi-core, it is actually faster than node.js. Not as fast as c, but it is often compared to node. So I will just tell you: Erlang is faster. I think the only reason node.js is popular is because there are more people who already know javascript, so what is one more framework? It is easy to implement and learn node if you already know javascript.

So, here's the deal. Erlang is really good at pattern matching and sending messages, and allowing a huge number of connections to the application. Hm...what can that possibly be used for? What is it that people are now talking about? I'll give you one hint: "Refrigerator".

Ping me in the comments if you want to talk about it.

Monday, March 17, 2014

A week full of snafus...technological and otherwise.

During my interview process, I sometimes wonder if anyone ever really looks at my blog to see what I am up to.

I've had interviewers tell me they did look, which I really appreciate! However, if you are one of the one or two people who do possibly look at this blog, you may have noticed that it -- and my github account have both been very quiet over the last week or so.

I've had a week or so of my attention occupied with first a family emergency, then the untimely death of my hard drive, and the loss of everything I was currently working on, as well as the configuration of my system. Lessons learned: 1) not only should I back up, but I should back up often. 2) Next time, I am going with solid state.

On the upside, I now know how to change out the hard drive on my mac. I was able to upgrade it (with some help) to one terabyte and it runs like new!

Today, I have been getting my system all reconfigured, resetting passwords, downloading software and retrieving licenses...

Tomorrow I should be able to get to work!