Saturday, December 21, 2013

SSL_read: wrong version number

I've been  getting this error with two parts of an application where I am using Action::Mailer. My certs are up-to-date, I have my configs set up seems that a lot of others are having the same problem, and I see a lot of "try this" answers to the problem, but no real answers. I see there are a lot of others who are getting the same error. I have tried almost all of the other answers out there without resolution.

My solution? I knew that a version of the application was working on an ubuntu server and it was not getting SSL errors in the ONE part of the app that has a mailer, but I needed to be able to see if 1) the SSL error was unique to this new part of the app, or to my machine, and 2) if the rest of this feature was at all functional, and I could not tell since I could not get beyond the SSL errors. So, I cloned my repo to an ubuntu instance I had running on AWS. It worked. Despite the cert updates on my machine, it turns out it was the cause of the SSL errors. I suspect it may be an OS X firewall issue, but I will look into that later. I'd rather be coding and building things.

One thing I needed to make sure I had set properly was this line in the config/environments/development.rb file:

             config.action_mailer.default_url_options = { host: "your server address" }

Since this is the address that the mailer uses to configure the link in the reset email, it needs to be able to find the password_resets/edit<authtoken> view on your server.

I'm not a security expert, but if you're having a similar error with a mailer -- especially using the mail_form gem or Ryan Bates' Password Reset episode, ping me!

Monday, December 16, 2013

Manage Your Productivity With This Application!

I recently discovered RescueTime. It's a free application that allows you to set productivity goals and monitors how you use your time on your computer, then graphs it all out for you to see just how you spend your time. Not just on the web, but it also monitors the different applications on your computer, and activities related to them.

Thursday, December 12, 2013

My Little Secret: I'm in a dev bootcamp!

I'm not sure why I'm a little secretive about it -- Do I not want to let anyone in on this good thing? Am I afraid it will prove to be a waste of my time and I will fail?

I'm not sure. But I do know it has been a good thing so far. I'll tell you more about it, but first: some background.

Why did I wait so long? 
In my journey making the career transition back to technology and updating my skills, I have had to deal with an issue many people do: I have to work. I have to work in a field that is, in many ways completely different from being a coder in a corporate setting. I emphasize the word "corporate" because I do have a friend who is always heading off to somewhere like Tahoe, or Mexico, or Russia, or Japan. When I teasingly asked him "Don't you ever work?", he replied "I can work remotely." But I digress...In many ways it is similar. For more on that, see my earlier post on Bodywork and debugging code.

I've been largely self-taught, though I've taken some workshops here and there. Unfortunately, not knowing with certainty whether I am doing things correctly or not -- which you can really only learn by working on a group project with more experienced people -- really didn't help my level of confidence. I would freeze in technical interviews and forget things, kicking myself after ward -- because I knew that I KNEW the answer. I tried to be humble about what I knew, and expressed that I was not the most confident and needed to be in a situation where I could get some mentorship and guidance and exposure to best practices. I assured hiring managers I would be up and running within a couple of weeks as a reliable contributor. I knew exactly what I needed, and what I could offer. Maybe the problem was that I could articulate it too well? I can't tell you how many hiring managers rejected me, saying that they wanted someone more senior (even though they were seeking junior devs). I knew other, more junior developers that had been hired, so that still did not discourage me. I needed to be in a situation with other developers to see where I am at and if I am headed in the right direction.

There are a plethora of these bootcamp programs out there now, churning out Jr. Devs. The two biggest benefits that I can see from the outside are that

  1. You get job connections. A lot of companies now go to these schools to find jr. devs rather than trying to find them in the wild without knowing what they're getting, and 
  2. The opportunity to work in an intensive structured environment guided by a veteran of the industry is extremely valuable for so many reasons: You learn best practices. You get comfortable working with a team. You end up with a completed project. You get to write meaningful code and solve problems every day. It's a simulated work environment, if you will. 
Are they worth it? 
Nevertheless, they're expensive, and you have to essentially put your life on hold for 10 weeks. Sure, some are subsidized by their relationships with employers, but most require at least a down payment. You can't work at a paying job. They're for people who have some savings or are having someone support them while they attend. That is not a realistic option for everyone, and it was not for me. I need to work to support myself. 

I asked myself: Are they even that great? I had been leading a loose-knit group that would get together to solve Project Euler problems, and I would see recent grads that could type code and recall syntax well enough, but could not grasp how to approach breaking down the problems into small enough steps to be able to solve it. But yet, these guys were getting jobs. 

I had also recently heard a professional theorizing that the quality of the education has suffered in these for-profit bootcamps. That when they are new, they're great. Then, once word gets out about how great they are, class sizes are no longer limited as strictly, resources and instructors are strained -- and the quality of the graduates suffers. And then, there is this -- a proclamation that dev bootcamps are scams. 

Even if I could find a way to do one of the dev bootcamps, would I really want to be one of the masses trying to cram their way in -- to be scammed? Admittedly, I tend to be a skeptic when it comes to the over-hyped anyway. 

Another Option
When I heard that Bay Area Video Coalition was now offering one in the evenings, I jumped on it. I could still work, go to my classes in the evening, then do homework on the weekends and some days during the week! 

There were some assessments, but really just to test the fundamentals of writing very simple code. There were 70 applicants for 10 open seats in the class. My chances were 1:7 that I would be accepted. I was actually not hopeful. I completed my application and interviewed on a Thursday. The first class was on the following Monday. It was very last minute.

 Friday I received an email that I was accepted. I quickly rearranged my schedule for the next 12 weeks and committed all of my evenings and Saturdays to class. 

How's it going so far?
Well, it includes primarily Ruby on Rails, configuring and deploying to AWS EC2 and ubuntu servers, and introduction to node.js and mongodb, some javascript, a lot of working so far with google maps APIs...and of course working with a team of people. It's a diverse group -- in age, experience and background. I am one of the more experienced people in the class when it comes to working with Ruby on Rails, but the guys with the PHP backgrounds are kind of killing it. I not only learn from my instructor, but from them as well. In turn, I help some of the more junior people. 

The instructor is a veteran of the development industry, a CS guy, and while he has worked with Rails in the past, is currently working with SCALA. His style is a little academic -- which is refreshing. I've been spending a lot of time with people from SFRuby, and while I have made some good friends and there are a few CS people in the community, most of the people I know are also self taught or come from different educational backgrounds -- like philosophy.  He really breaks things down to the binary, which I like. He's also really good at working with all of the different personalities.

He has not been a part of the hacker community I have been a part for years now, so his perspective on coding is a little different. With RoR, things can be done many ways, but since I also have a bit of a background in art & design, I'm big on being able to justify why I executed things the way I did. Why does this need to be a rails project? Why do we need to have a session? Can things be simpler? It is helpful to have a different perspective, though I have also been consulting my experienced friends about what I'm being taught -- I've gotten mixed reactions from them (who knows why), but for the greater part, my instructor rocks. 

How have I grown so far? I would say I've have gotten more comfortable with AWS deployments for sure. I've expanded my understanding of git tools -- especially when it comes to collaboration. I feel like I am actually able to apply the things, that in theory I knew I knew, but just had not had a chance to use. I am working on a team.

Watch this space for updates int the next few weeks. I'll be done in January. In the mean time, I am available for hire during the day. Whether or not I end up actually being a developer, having coding skills -- along with people skills -- is invaluable in today's corporate world. 

Please comment if you can relate, have questions, or you just appreciate my writing about this!

Monday, November 11, 2013

Friday, September 6, 2013

The Joel Test: 12 Steps to Better Code

I stumbled across this interesting little test to check the quality of a software team. I suppose it could also be used to check the quality of an engineer too?

You should get 9 out of 12 of these questions:

  1. Do you use source control?
  2. Can you make a build in one step?
  3. Do you make daily builds?
  4. Do you have a bug database?
  5. Do you fix bugs before writing new code?
  6. Do you have an up-to-date schedule?
  7. Do you have a spec?
  8. Do programmers have quiet working conditions?
  9. Do you use the best tools money can buy?
  10. Do you have testers?
  11. Do new candidates write code during their interview?
  12. Do you do hallway usability testing?
A couple don't really apply, but I was able to answer "yes" to 9 of them. How about you and your team? 

Saturday, August 31, 2013

The Difference Between Making Digital Art and Building a Product

First, two definitions from Webster's online dictionary:

art  noun \ˈärt, ərt\ :the conscious use of skill and creative imagination especially in the production of aesthetic objects; also : works so produced. 

prod·uct noun \ˈprä-(ˌ)dəkt\ :(1) something producedespecially : commodity 1 (2) :something (as a service) that is marketed or sold as a commodity.

Since my undergrad was in Computers in Fine Art from The CADRE Institute at San Jose State University, and I have been learning Ruby on Rails and what it can do, I came up with an idea for a digital art project: an exploration and social commentary written in Ruby. I've talked about it for a bit, then just started building it. I don't intend it to be anything commercially viable -- though it could be at some point. Why not?

As I have shown it to people in the San Francisco rails community, people occasionally will come up with ideas about things I could do with or to it. I love this aspect of the startup development community! Unfortunately, many times the ideas are things like "You could put it in in a digital frame Golden Gate Bridge gift shop so people can see all the photos!" or "You need a cooler name, like 'Places I've Been'!" Sigh...Firstly, an app with that name already exists. Secondly, they're missing the point of the project and offering ways to make it a product, which it is not.

There is a difference between a product and an art piece. Both have value, and that does not mean that an art piece can not be a product and vice versa. The art community gets this, I think, but the commercial development community seems to be oblivious to the idea that an application could be art. Even one that IS a commercially viable application. I once was describing a very interesting and sophisticated art application that a friend is building to an experienced commercial developer who commented, "Cuuute!" I decided not to explain it further, since programming as an art medium was obviously not interesting or valuable to her. It turns out that my friend will be selling her application to a company that wishes integrate it into one of their products.

I think the difference lies in that digital art is not necessarily intended to be a commodity. Where a product is usually designed with a specific utility in our daily lives -- to connect people, to make tasks easier, to add efficiency. With art, there is an artist's intent perhaps, but not any real practical utility in our day-to-day lives.

That said, making an art application that is -- or appears to be -- a commercially viable application can indeed be art. Art apps can also educate, perturb, frustrate and be senseless fun! Commercial applications can also be moving, innovative, and so well done that they are indeed art.

So why am I even writing about this in a blog post about developing my professional skill set? Because my art background, and making the distinction between the two, forces me to ask the questions: "What is the utility of this application? How would it improve processes that the user may already have in place? Would anyone buy it? How can it positively disrupt the way things are currently done? How can it be monetized? How can it be win-win for everyone involved? What 'holes' can I see where it may help solve problems that people struggle with every day? How can I make people actually feel more intelligent for using my app?" This, I believe, is just one tool in my skill set that would make me valuable on a development -- or product -- team.

If you are a digital artist, you will know where I am coming from. If you are a "product guy" or have been in the trenches building applications for the enterprise, you will most likely want to change the name or add features of my project that make it more marketable. If you have suggestions that make it interesting and fun, I would love to hear about them!

In the mean time, please check out the beginnings of my project "Proof I Was There". It's a social commentary about our need to document our travels with photographs. I'll be adding references in the next week or so to excerpts about art and it's context, as well as examples of the types of digital art I am talking about.

Tuesday, August 27, 2013

Proof I Was There

Here is the beginnings of a project I have been talking about building for a while, but recently figured out a way to begin. It is just a cluster of small ruby apps to be run separately for now, but it will be integrated into a rails app, then eventually with a mobile interface.

To run it, clone the repo, then follow the directions.

Monday, July 1, 2013

Free Ruby Learning Resources

A list of some resources for learning Ruby (not Rails) and my comments about them. I'll add to and edit these as I go. Ruby is the important part, after all.

Learn Ruby the Hard Way You start with the very basics, working in irb, not in their own online environment. I like it.

Codecademy This was originally started as an online Javascript learning tool, but now offers several languages. The best part? Your answers are validated by their gamified scoring system so you know if you are on the right track. Unfortunately, this does not emulate a real development environment.

Rubymonk One of the many Bhuddism-flavored learning resources that is a fun way to practice your skills and pass to the next exercise--and maybe pick up a little wisdom along the way. Browser environment.

Ruby Koans My first exposure to Ruby, and one of the tools that made me love it. There is an introduction to testing methodology as a way to solve the koans.

Project Euler Not specifically Ruby, but this is a series of algorithm exercises that you can work out in using Ruby. Break it down!

Friday, June 21, 2013

Create a New Rails App in a Previous Version of Rails

So, I have Rails 4.0 installed and have been playing around with it, but I wanted to make a new app in the current stable version I have installed, which is 3.2.12. My system was defaulting to 4.0 since I had installed it. I didn't want to uninstall it. You can do this with RVM by creating a new gemset, but as a hobbyist developer, it just seemed convoluted to me.

The easiest way I found to create a new app in a version of Rails previous to 4.0?

  1. Create your new app: 'rails new new_app'. 
  2. Open the Gemfile from a recent project using 3.2.12 
  3. Copy the text of the Gemfile.
  4. cd into your new_app folder. 
  5. Open the new_app Gemfile in your text editor. 
  6. Paste the text you just copied into that Gemfile. This also ensures that the dependencies are there for your previous version of Rails. The dependencies for 4.0 will not work. 
  7. Remove any gems you know you will not be using in new_app that you may have added to the previous app. 
  8. 'bundle install' and you've got yourself a previous version and you've still got 4.0 installed. 

Saturday, January 26, 2013

Today in Intermediate RailsBridge!

Going through the Intermediate RailsBridge Curriculum, building it without using most of the generators to understand the structures.

Also, five different types Ruby of variables and when they're used.

Wednesday, January 9, 2013