Freelance Web Programmer

TwitterLinkedInEmailRSS

a blog about technology, entrepreneurship, and living in the future

Are Co-Working Spaces the new Cubicles?

Here in Chicago, they seem to be popping up everywhere. What are they? A co-working space is where people come to work in the same space, these people most likely do not work for the same company, they just happen to be working out of the same space. The business model is similar to a health club in that you pay for access, there is a secure entrance with 24/7 access as well as the perks of workshops, networking, and office hours with experts, they are often touted as a community center rather than just a space to work. The price seems to be between $200 – $300 a month, keep in mind that a entry level office space in some random strip mall can easily run over $1000 a month. As you can imagine this type of setup works well for startups, freelancers, and remote workers.

Seems with more and more companies allowing, even encouraging working remotely the popularity of these spaces is only going to increase. In the 90s we had tons of nondescript office buildings housing hundreds of office workers, each with their own little real estate of a 6 X 6 X 6 cube.

Personally, I say good riddance. Goodbye Cubicles, Hello Co-working spaces.

- Blog post written from 1871 a Co-Working Space here in Chicago

 

Git Revelation

Think of Git as a state… the state of your files at the time when you commit your changes.

Last night I took a newly completed Rails App and decided I would try my hand at recreating the app using java. I was on branch master and decided that I would start a new branch called “java.” After making some changes I wanted to then see how the app looked back on the master branch. So I ran git checkout master, without having committed my changes. There I was on master branch with all the previous changes I had made back over on branch “java”. This is when I had the realization that Git was actually a ‘state’ rather than a collection of files. I jumped back to my java branch and committed my changes. After this I jumped back to master and sure enough the app was back in it’s original state.

 

Why I code

I love music, songs often play in my head for hours or even days. Unfortunately if you sit me in front of a piano there isn’t much I can do with it. I certainly cannot create music, at least beyond tapping a few keys here and there. I’ve always been envious of those who could be with a group of friends, see a piano, sit down and just start jamming. How nice it would be to just jump in with an awesome rendition of “Benny and the Jets” by Elton John.

One thing I can do is make a website. Right now, right this second, I could get an idea for the next big thing, I could get something up on the internet, A/B test it, hell I might even be able to create a decent marketing plan so it gains exposure. But I also code for the little ideas, the ones that make you chuckle, the ridiculous ones…

This is why I code.

I code for creation, empowerment, and freedom… I code so that I can enact the next idea.

Much like someone who plays the piano can create music, I code so that I can create web apps, enact ideas, and ultimately have freedom of expression. Everyday I can ask myself, “What do I want to build today?” This runs deeper than a career, level of income, or anything on paper. Being able to create things, to bring them to life on the screen, this has infinite potential, I said INFINITE potential. For me, it’s about creation, being the craftsman, being the ultimate authority for YOUR specific app. That is powerful, more powerful than any amount of money.

This is what drives me, this is why I code.

I Completed The Starter League, Now What?

It’s been one week since Demo Day and the completion of The Starter League… now what?

Some of my fellow Starters have gotten hired as Junior Developers, some are looking at apprenticeships, others have returned to their old jobs with a new skill set. Personally I went from being a freelance wordpress developer working out of my kitchen to a freelance Rails developer working out of 1871 as a member. Definitely a step up, even with an awesome kitchen like mine.

This week I decided to offer MVPs for as low as $500 (for a limited time). MVP or Minimum Viable Product  is meant to show the potential of a new product or idea without necessarily being ‘Ready to Ship’ or even fully functional. This would be something to show new investors, potential partners, or anyone else who may be interested in the idea. If a picture is worth a thousand words, than an MVP is worth a million.

great idea

Currently I am looking for anyone with a Great App Idea who would like to create an MVP. Do you have a great app idea? Are looking to move forward with an MVP? Let’s discuss and see if it would be a good fit.

resume_in_ruby.rb

Below is my updated resume, now written IN RUBY. My intention is for this resume to be at least readable to someone with no familiarity with code.

If you would like the full experience clone this gist and run the file in terminal.

The Starter League Experience: Completion

Eleven Weeks ago I began the Web Development program at The Starter League. The course led up to Starter Night where 120 Students showcased their app creations. It’s worth noting that at in this program there are no tests, no grades, no college credit, so these projects serve as both a platform for learning as well as a measurement of our progress.

Team Adventurr.Us consisted Mike Dorrance, Kitty Singsuwan, and myself. Mike Dorrance, Started out with a pain point of wanting to take his kids out on fun adventures, however he had no idea where to go or whether or not his kids would even have fun. This was the beginning of Adventurr.Us, a Family App that allows you to search for family-friendly activities by age, then read reviews from the kids themselves.

Team Adventurr.Us presents…

Adventurr.Us Family. Fun. Unplugged.

jump copy

 

Right now we are looking for families interested in beta testing version 1.0.

When I began The Starter League Experience I had virtually no coding experience. My intention was to go from no experience to the point where I had enough knowledge and understanding to where I could continue learning and creating apps on my own. For this The Starter League delivered.

The next step for me is to continue to hone my craft. At the Starter League there was an energy of innovation, cultivation, and creation. Over the upcoming years I’ll long forget about the error messages that baffled me for hours, even days, however I’ll never forget the feeling of working through them at The Starter League Winter 2013.

The Starter League Experience Week 10: Starter Night

As far as the Starter League Experience goes, we are entering into the end of the program. This means preparing for Starter Night (formerly Demo Day), where we showcase our web applications that we have been working on for weeks now. For me this has been revealing of just how much more there is to learn.

At this point our education is largely determined by the needs of our Demo Day App. Class time has been devoted to AJAX/JQuery/Javascript and other topics that make our app more professional grade. Just the fact that we are getting to these topic shows just how much content we cover in 12 weeks.

Mike Land is a Freelance Web Developer who enjoys technology, entrepreneurship, living in the future…

The Starter League Experience Week 9: How to setup a Rails form with Nested Attributes

This blog post will walk you through how to create a basic Rails form with Nested Attributes. By the end of this post you will be able to create a form that takes receives input and saves it to multiple database tables. The example given uses a One-To-Many relationship.

Requirements: Rails environment on your computer. My machine has Rails 3.2.12 and Ruby 1.9.3 p362. Since we are not using any gems and the only built in rails function that will be used is “.build”, I anticipate the steps covered here will be valid for many versions to come.

In conjunction with this blog post you may want to reference my Github repo example_of_rails_form_with_nested_attributes, I kept my commits nice and clean.

Step One: Create A New Rails Application. From the terminal run:

$ rails new example_of_rails_form_with_nested_attributes

Step Two: Generate Scaffold For People Table. From the terminal run:

$ rails g scaffold people first_name last_name family_id:integer

Step Three: Generate Scaffold For Families Table. From the terminal run:

$ rails g scaffold families family_name

At this point we have a basic Rails Application with two database tables. The likely next step is to create model associations between People and Families. Since a Family has many People and People only have one Family, this is a One-To-Many relationship.

Step Four: Add Model Associations.

In the Family Model add:

has_many :people

In the People Model add:

belongs_to :family

In the spirit of Error Driven Development let’s now adjust the form to accept nested attribute data. It’s important to note that the form being used is the one which comes from the parent model, in other words the model that has many. In this case Family.

Step Five: Add the following code inside the Family form.

<div class=”field”>
<%= f.fields_for :people do |ts| %>
<%= ts.label :first_name %><br />
<%= ts.text_field :first_name %>
</div>

<div class=”field”>
<%= ts.label :last_name %><br />
<%= ts.text_field :last_name %>
</div>
<% end %>

If you would like to see the full code see the github commit. This would be a good point to run the app, if you haven’t already. Start your rails server and don’t forget to run rake db:migrate, then direct your browser to http://localhost:3000/families/new. You should get the error, “Can’t mass-assign protected attributes: people”

So now we need to make this new data attr_accessible.

Step Six: Add code to allow for mass-assignment.

In the Family Model add the following code to the attr_accessible

, :people_attributes

Also in the Family Model add:

accepts_nested_attributes_for :people

Related Github Commit. Now the last step is to let Rails know where to put this data.

Step Seven: Add .build code to Family Controller under Def New.

@family.people.build

Step Eight: Test and Confirm. At this point your app should be working. Direct your browser to http://localhost:3000/families/new and test out your new nested form. Once you have entered in some data, go to your Rails Console and run “Person.last” and “Family.last”. You should see the data you just created both with the same Family_id. WOW. And just think you were probably considering using a Gem.

I sincerely hope this post was helpful in setting up a Rails form with nested attributes… Happy Coding.

Mike Land is a Freelance Web Developer who enjoys technology, entrepreneurship, living in the future…

The Starter League Experience Week 8: Confessions of a N00b

Websites pretty much create themselves these days, right?!? Well not really… Luckily I have been learning Ruby on Rails from the ground up at The Starter League. I can make a website, no problem, I’ll just generate some scaffolds and a couple models, Rails makes that easy (so I’ve been told)… ok done. Wait now I need some sort of front-end design, right? I can’t just leave it like this… Ok Twitter Bootstrap, got it. Looks like I am ready to go, Wait what about authentication? Oh right, no problem, bcrypt gem… wait what about authorization? Oh right, Rails makes that easy (so I’ve been told). No problem, I’ll just add “before_filter :authorized_user” to my models, I mean controller, ok done! Alright my app is ready to go… Except wait it is still on localhost:3000, that doesn’t make sense. People talk about Heroku, I’ll try that out… Ok great now my app is up and ready to go… but wait why is it so slow? Like really slow!… I hear people talk about cacheing when their site is running slow, maybe my caching is too high, or is it too low?  Maybe I should just upgrade my Heroku to a paid version… wait, what the hell is a Dyno?…

The Starter League Experience Week 7: First Builder’s Weekend

Last weekend we had our first Builder’s Weekend at The Starter League. As Arvin made clear, the purpose first and foremost is to learn. Here is the setup, we started at 9am in a large room filled with Starter League Students from all classes: Beginner HTML, Advanced HTML, UX, Visual Design, and Web Development. About 20 or so students pitched ideas that could be created within 9 hours. From here we created development teams which included members from different classes and went to work to create a web app.

Here are my valuable takeaways

  • Collaboration: Working with HTML folks was a great experience, not to mention it made our app look less like a programmer’s manifesto and more like a real app. Also this was my first experience utilizing GitHub (a cloud repository for code) with a group of collaborators. Needless to say we worked through our share of merge conflicts.
  • Pair Programming: Myself and Mike Dorrance our other group member who is in the Web Development class, were tasked with creating the back-end of our app. This was a great experience in Pair Programming as well as Domain Modeling, sketching out architecture of the app. As would be expected we had some different views on how the app should be setup. After some discussion we settled on our approach.
  • Deliverables: Unlike personal projects which can be put on the shelf, we had a clear deadline of 6pm. This meant, like the real world, as time progressed we had to make decisions about what we could or could not produce by the deadline.

This Builder’s Weekend got us primed for the next month of development which leads up to Demo Day where we will debute our newly created apps

My Demo Day Team is looking to create a Web App with the goal to inspire families to do unplugged activities together by recording the adventure, engaging the opinion of all family members and suggesting activities based on age and NEW types of adventures. This is to be user supported and suggested. We are looking to increase the quality time spend amongst families by incentivizing the whole experience.

The Builder’s Weekend was a great experience and I look forward to creating our app for Demo Day.