Tuesday, January 28, 2014

MongoDB & Node.js

I've been exploring both Mongo DB recently, and Node.js. I keep hearing about how they are "hot" right now -- along with others, like angular.js.  As many of us know, though, using a technology just because everyone's talking about it is not justification for why we should use it. Each technology offers inherent functionality and benefits. It should be used because the application -- or the development team -- would perform better using that technology.

Can you justify the use of a particular technology in your project or are you using it just because it is "hot" and everyone is talking about it?

So, whenever I hear that a company is seeking a developer with skills in these two technologies, I am compelled to ask, "Why are you using this technology?" to better understand what it's about and why people are using it. I also ask it to see if this is a team I want to work with. If they don't have a good answer, chances are their projects are not well planned and designed. I am investigating the benefits and applications of each of these to better understand why I might use them in the future.

I was at She's Geeky last week and had some good conversations about both databases and identity (but that's another blog post). Sarah Mei led a session asking about MongoDB and its uses. Our group came to the conclusion that it is good for obviously, "unstructured" databases. But when do you need an unstructured database? are you trying to use an unstructured database, when really your data would perfectly fit into a tabular format?

The really valid uses for it seemed to be when 1) when you have a lot of user generated content, and 2) When the structure of your data may change often and be somewhat ephemeral. I've noticed that it seems to be used on a lot of music and media-related apps, in which both 1 and 2 could apply. I will elaborate on this later.

As far as Node.js goes, I am learning that it is great for uploading documents, generating reports, and generally performing non-blocking or asynchronous processes -- processes that may take some time, but you want to continue while allowing the user to perform another task concurrently.

In the next few days, I'm going to do some tutorials and get an example or two up. In the mean time, please tell me: How have you used node or MongoDB in your application. Why did you use it?

Friday, January 10, 2014

Getting started with phonegap on Mac OS X Mavericks

After fiddling around in the command line for hours, messing around with ant, cordova and android installations and configurations, I decided -- on the recommendation of a classmate -- just suck it up and install Eclipse. I feel like I'm really using my developer skills more by working in the command line, but sometimes you just have to do what will give you the most quality product in the shortest amount of time. 

Eclipse is an IDE that is specifically for mobile development and includes emulators and so on. It also includes a bunch of tutorials to help you get started. I thought it would be a huge hassle to use because the last I knew, there was only a windows version. Apparently, there is now an OS X version too. It was a huge download, but after my install was complete, I had the first one up and running within minutes. Woo! 

Here are some other resources you may need or find helpful: 

Phonegap Docs. The docs include tutorials. 

A pretty decent tutorial that is up to date. I found a lot of them are old and outdated. 

Adobe Phonegap Build. This is helpful to do several different platform builds remotely off your github repo. Keep in mind though, that if you want to try to do an iOS build, you have to pay $99 for the iOS developer key in order for that build to work. Phonegap is really used more for mobile development other than iOS, so if you're doing iOS, you might want to just stick with xcode. 

I Hope this was helpful! Let me know in the comments! 

Newbie Coders: Surround Yourself with Supportive, Encouraging People.

I'm a little hesitant to post this -- it feels a little too revealing, but I think that upon meeting me, people sometimes don't see the entire picture.

I was total nerd as a kid. A the age of eight, I had 3 aquariums, pored over a two-and-a-half-inch thick book about tropical fish around the world. I knew more than one eight-year-old should know about tropical fish. Some little girls want to be nurses when they grow up, or ballerinas at that age. I wanted to be an ichthyologist. I did not know at the time that it would require an extensive college education, which my family could neither afford nor be supportive of. I dropped that idea when I realized it would not be possible -- or so I was told.

Then there was reading, which was an escape for me. I read the typical kids books at the time: Charlotte's Web, Little House on the Prairie, and the like. For some reason, that grew into a fascination with Agatha Christie and Stephen King's stories, then on to Tom Robbins as a young adult -- along with books by various Jungian Scholars, Bruce Chatwin and Alain de Botton. Aside from work, reading and painting in my twenties took precedence over everything else. I would turn down invitations from guys who I really liked because I preferred to finish the book I was reading or the painting I was working on. It wasn't that I didn't like them. I just had my priorities. I didn't realize that "I'm doing something else tonight" was code for "I'm not interested." Whoops.

As a child, I was also immensely creative -- my handmade holiday cards for my family were hand-drawn versions of holiday-themed advertisements. I made up my own little characters that I used to draw all over everything. I crocheted, drew, painted, made little sculptures out of clay and won awards in competitions for my creations. I even had a book of "experiments" for kids that could be done using household products like baking soda. I was all over that. This eventually led to getting A's in my art, science and English classes in high school.

I've always been a bit of a renaissance girl. My undergraduate degree in Computers in Fine Art, where code was the medium we used to make art and social commentary, was the perfect combination of art, literature and science to me. I am still a renaissance girl. Some things change with time. This has not.

It was as an adult that I realized I had to force myself to be social. That it was a good thing...a "healthy" thing to reach out to people, to make connections, to have a support network. To not care too much about being judged -- everyone judges others, by the way -- whether they admit it or not. It's just human nature. I became very good at being social and communicative. Too good at it. Working with people has become one the most challenging, yet rewarding and natural things I can do. Human connection is a powerful thing, and I predict that in the next year or so, people will be talking about more in a business context. I have just had to learn to be more discerning about who I choose as friends.

I meet a lot of people. Potentially allies. But how do I decide who are just "people I know" or "friends" -- "allies"?  Allies are supportive -- what does that mean to you? To me, allies do not discourage you. Friends do not tell you that "you're not cut out for this" when you have been working as diligently as you can to learn something that you really want to learn. Instead they encourage you to believe in yourself and your ability when you're not feeling confident, but guide you in the right direction when you are headed off track. They make time for you. They show up. They do what they say they will. They are advocates for you. Friends do not give you all of the answers, but they don't let you sink or swim either. Allies do not take advantage of you by asking you to do free work. Friends stick around when things get tough for you, and you need to lean on them.

I give all this background because I want to emphasize the importance that if you are passionate about learning to code, don't let the naysayers stop you. It doesn't matter what your background is. Coding is not some sort of inherent "gift" for most people. It -- just like drawing -- is merely a learned skills.  There are people working as professional developers who are more literary people -- and have degrees in things like journalism and philosophy. Don't let someone tell you -- You're not technical enough". If they do, ask them, "What do you mean by that?" Since they are obviously not seeing some sort of quality about you that they believe is a requirement. As my bootcamp instructor said about those who say things like "You're not technical enough.": Those people are assholes. Steer clear of them, and don't listen to them, and ask yourself if these are the type of people you really want to consider "friends" or "allies", especially if they don't know the whole story about what your talents and interests really are?