Wednesday, December 18, 2013

Presenting Goalizr.com

Goalizr is Live!
It's been quiet here on the blog, and for good reason! With less than a day left here at camp, I was able to get my personal project live and working online. Check it out at Goalizr.com!

You can register for an account and start adding your own goals and activities, or login with the Demo account to have a look around. I've added some sample goals and activities to give an idea of how it works. Here's the login...

User: Test
Password: password

I had to reign in my initial scope for the application to get it ready to publish in time, but I'm proud of this release because of what I've learned and the problems I had to solve to get it where it is.

I also want to announce the launch of another project I helped out on, Csharper.in. My classmate, Vicky Goldstein, created this really cool Jeopardy-style game to help people learn C# and ASP.NET related terms and definitions.

It's been quite a ride the last 12 weeks, going from drinking from a firehose to now putting out fires on my own web application. I can say now with certainty, that attending this camp has been the best thing I've ever done for my career. I look forward to getting started with a good company next year, but for now I'm thrilled to be going home to see my wife Anna, and my two kids, Will & Finley!

Tuesday, November 26, 2013

Working with Bootstrap & JavaScript in a Foreach Loop

Bootstrap is an open-source frontend framework developed by Twitter that provides web developers with a large selection of HTML, CSS & JavaScript components that can save time in the early stages of putting a user interface together.

A couple of the Bootstrap JavaScript components I've used while here at camp are the Modal and the Collapse. A modal is a dialog box or prompt that can be used for a variety of things, and hides the content within the modal body until it is triggered by a button or link. A collapse is more like a Panel, that's been modified to act like a drawer for content, opening when the panel header link is clicked.
Collapse Example from GetBootstrap.com
These are pretty handy UI bits, but they can be tricky when you use them within a foreach loop to populate a page with dynamic database-driven content. On the Goalizr Goals page I wanted to use a Collapse to show a list of Activities associated with each goal. Once I got the code for displaying the Activities in the controller and the view (Thanks for the help, David Graham!), I was ready to implement the Collapse in the loop. But when I ran the application only the first collapse for the first goal worked. The others would actually toggle the collapse for the first one.

Code for Goal Activities Panel
We ran into this problem with Fund.io, and Mark Grunden (who is now an Assistant Counselor, btw!) helped me come up with a solution. In the example above, I have replaced the default IDs and references with Razor calls on the GoalId. This creates a unique ID for every Collapse on the page, allowing all information to be displayed properly when the Collapse header is clicked.


Friday, November 22, 2013

Goalizr Sneak Peek

Goalizr Frontend
There's nothing like a deadline to push you through late nights working on a project. Today was presentation day, so those of us with personal projects have been putting in a lot of time over the last few weeks to get them ready for today. Although I've got three more weeks to work on it, I still wanted to get it pretty good shape for today.

So far, I've got the frontend website at a good stopping point for now. For the remaining three weeks I'm going to focus on finishing out the backend, along with implementing user authentication so the site will allow users to create their own sets of goals, activities and such. Here's what I have so far:

Dashboard > Goals Page
This page shows all the goals, with data populating from the database for each goal. You can create new goals, edit, or delete goals as you wish. On this page I have a working search function which allows you to search through goals by the title or motivation, and a sort feature that allows you to view goals that are ending soonest, or latest. There's also working pagination that limits the number of goals per page.

Some of these things were trickier than I thought they would be coming from more of a plug-and-play background such as WordPress. But the payoff for this trickiness is more power and flexibility. And, not to mention that I'm learning how to build things from scratch and not depending solely on plugins to add functionality to a website.

Dashboard Main Page


Other pages for Activities and Emotions are working, similar to the Goals page, but the main Dashboard for the backend is still pretty much in prototype. The data for the charts is all hard coded in for now, but hopefully by the time I finish up here at camp, I'll have a solid beta version ready to go live.

Here's the development technology I've used so far:

ASP.NET, MVC5, C#, Razor, LINQ, Entity Framework 6, HTML5, CSS3, JavaScript, jQuery, Team Foundation Server, Bootstrap 3





Friday, November 15, 2013

Flying Dune Buggies & One Page Websites


Today I received an email from an online tech magazine announcing the dawn of the flying dune buggy. That's right... SkyRunner, a company out of Shreveport, LA has just announced that they're now taking orders for the super-cool, super-lightweight paraplane buggy.

I had to check out the link, and I noticed that they are employing a current trend in web design called the one page site. The idea is to put all of your site content in a single HTML file and use anchor tags to navigate throughout different sections of the page. You can check out their site at FlySkyRunner.com to see how they are doing it.

This seems to be a popular way to build sites these days, and with a little JavaScript, JQuery, CSS3, or Ajax, you can add all sorts of effects and animations for the transitions. The results can be impressive, as you can see for yourself at sites like OnePageLove.com and WebDesignerDepot.com.

However slick these websites can be, there is much debate about whether this trend is good for user experience, search engine optimization (SEO), and pay-per-click (PPC) advertising, among other things. Some of the criticisms being brought up include usability issues on mobile devices, poor keyword targeting, and low quality scores for contextual advertising.

For now, it's still difficult to determine if the pros of this trend outweigh the cons, but in the meantime I'm going to take a little break to imagine flying around in my $119,000 flying dune buggy. Until next time...








Tuesday, November 12, 2013

Fun & Games with Google Earth API

Monster Milktruck over LP Field in Nashville
One of the requirements for our personal projects is to implement some kind of web API within our project. Web APIs, or Application Programming Interfaces, allow web applications to communicate with each other in ways that extend the functionality of the applications in new ways.

Google has been offering its Google Earth API for some time, and many developers are using it to create all sorts of mapping applications that once would have taken a tremendous amount of work. For example, the Monster Milktruck mashup allows you to drive a giant milktruck anywhere on Earth. Other mashups using Google Earth include one that lets you run from Zombies in your neighborhood, or if you're feeling nostalgic, drive the A-Team Van.

I don't know if I'll have the time, but I would love to find a way to set locations for Activities in Goalizr, that way you could see where you spend your time working towards (or being distracted from) your goals. With HTML5 you can now request the location of a user from the browser (geolocation), but there would still be a lot of work getting it setup and persisting to a database. We will see... there's always Version 2.0!

Sunday, November 10, 2013

Learn and Practice LINQ & C# with LINQPad


After a much needed day off yesterday, I'm back at it today studying C# Fundamentals and LINQ (language integrated query). Thumbing through the pages of O'Reilly's C# 4.0 Pocket Reference by Joseph Albahari, I discovered that the author is actually the creator of a handy LINQ/C# scratchpad called LINQPad

During the second week of camp (seems like years ago, now!), one of our camp-mates, Danyal Mahmud told us about using LINQPad to practice writing LINQ queries. I didn't start using it right away because we were so busy learning new material. But now I wish I had, because not only is LINQPad great for LINQ, it's also great for learning and practicing C#, from a beginner level to advanced.

Here's why... 

Included in the Samples tab of the program are code snippets from C# 5.0 in a Nutshell, another highly rated book by Joseph Albahara. When you install LINQPad, you get snippets from Chapters 8, 9, 10 & 26. Then you can click "Download/import more samples...", and get even more samples from Nutshell, along with snippets from other books like C# in Depth & Asynchronous Functions in C# (I won't even pretend I know what those are... Yet!)

You can view, clone, edit & run these snippets right in the application without having to create new console apps in Visual Studio and you can practice LINQ directly on your own databases with the Add Connection feature. Starting out in C# and LINQ can be intimidating, and overwhelming at times. With tools and resources like these, however, the learning curve starts looking more like a hill than a mountain.

Wednesday, November 6, 2013

Visual Studio Keyboard Shortcuts


I'm a big fan of keyboard shortcuts. When I first started working with AutoCAD, I learned to rely less on toolbars and buttons and more on entering short aliases in the command line to get things done. The result was that I spent less time going back and forth from the keyboard to the mouse. Later, when I started using Photoshop, I was amazed at how much time you could save using keyboard shortcuts like CTRL+T (free-transform layer) and CTRL+J (new layer via copy).

The most important keyboard shortcut I ever learned, however, was CTRL+S. It only took one time losing hours of work in a CAD drawing to start using it religiously.

Now I look for shortcuts for any program I spend a lot of time working in. And since I've been spending more time with Visual Studio than with my friends and family the last 5-1/2 weeks, I've gotten pretty friendly with these little time-savers. Here are some of my favorite...

ShortcutOperationNotes
CTRL+K, CComment a line of codeYou can place cursor in line without selecting anything
CTRL+K, UUncomment a line of codeSame as above
CTRL+SHIFT+ENTERBlank line after cursor lineCursor can be anywhere in the line, and you don't have to use END, ENTER
ALT+UP or DOWNMove line up or downCursor can be anywhere in the line, without selecting
CTRL+DELETEDelete word to right
CTRL+BACKSPACEDelete word to left
CTRL+. (period)Open Smart TagWhen you get the red squiggle, sometimes it's hard to get to this with the mouse
CTRL+ALT+LOpen Solution Explorer
CTRL+; (semicolon)Focus on Search Solution EplorerSame as above, except puts your cursor in the search box
CRTL+, (comma)Focus on Navigate ToThis searches for words in entire solution and takes you to it when you hit ENTER
CTRL+FOpen Quick Find
CTRL+HOpen Quick Replace
CTRL+QOpen Quick LaunchAllows you to search everything in VS, including tools & options
CTRL+ALT+SOpen Server Explorer
CTRL+W, EOpen Error List
F1Navigate to Help FilePlace cursor in any keyword in text editor, opens MSDN help file for item
F12Navigate to DefinitionPlace cursor in code to find definition
CTRL+SHIFT+BBuild Solution
F5Start Debugging
CTRL+F5Start w/o Debugging
CTRL+F6Next Tab
CTRL+SHIFT+F6Previous Tab

Oh, I almost forgot CTRL+K, D... Automatically formats tabs and white-space to make your code look snazzy!

Sunday, November 3, 2013

End of Week 5 Update

Things are coming along pretty well here at camp. We wrapped up the admin dashboard for Fund.io this week, complete with database driven tables for campaigns and comments, graphs for sitewide stats and key performance indicators.

We incorporated some pretty cool features like ajax page updating (which allows the database to be updated and shown on the page instantaneously without reloading the page), and a modal for displaying details about an item without leaving the current page. I also redesigned the front-end slider with a new parallax background effect. When the site goes live, I'll be sure to post links.

I've got a good head start on Goalizr as well. Officially, we were supposed to get started next week on our personal projects, but I heeded the advice of some of the previous campers and started working on it a while back.

For practice, and to learn the latest features in Visual Studio, I migrated my initial solution from VS2012 to VS2013 so it's now running on .NET 4.5.1, MVC 5, Entity Framework 6, and Bootstrap 3. I have a working CRUD for goals, activities &  emotional states, ability to add new users, and a login system that allows logging in with an external API, like Google. Currently, the app is using a basic Bootstrap theme, but I have some mockups in Photoshop I'll be trying to implement for the front-end of the site using HTML5 and CSS3.

Inspired by some of my fellow campers blogs, I'm going to try to post more specific code examples and how-to's pertaining to the technologies I'm using to build my project. It may or may not be helpful to others, but at least I'll have a record of the whole process for me to go back to.

In addition to my personal project, I've been brainstorming with a few of my classmates about getting their own projects up and running. One is an online Jeopardy game for learning C# terms and definitions. Another is a site that allows independent comic book/graphic novel creators to promote and sell their work online. And the other is a site that connects writers and artists and helps them work together to develop children's books, comics, graphic novels, book covers and more. Pretty excited about helping out on these projects too...

Friday, November 1, 2013

Movie Night

Took a little break from coding tonight to go see Ender's Game with some camp buddies. I never read the novel, but from those of us who did, they said it was a pretty good adaptation. If you're into sci-fi, it's definitely worth going to see.

Friday, October 25, 2013

ASP.NET Related Skills & Technologies

ASP.NET on MindMup

For the last few weeks I've been compiling a list of skills and technologies that have been listed in job postings in the Nashville area for ASP.NET Web Developers. As you can see in the mindmap I made with MindMup (go ahead and pan around in there, it's fun), the desired skill set for web developers these days tends to be rather meaty.

While we're actively learning and working with a good number of these technologies here at camp, it seems rather daunting to try and learn all of them in nine weeks. That's part of the reason I've decided to stay on for another three weeks for the Coder Camps "Master's Program". This will give me an extra three weeks to work on my personal project and focus on learning some of these additional skills that are in demand right now in and around Nashville.

Another part of the Masters Program is that I've been asked to help out with the new troop that came in this week. So far, they're showing a lot of potential and hard work, and I can imagine I'll be learning a lot from them. Even though I'll be spending Thanksgiving here in Texas this year, I believe the opportunity to learn and hone my skills even further will be worth it.


Wednesday, October 23, 2013

The Rubber Meets the Road

Fund.io Admin Dashboard
So, I'm in the 4th week here at Coder Camps. Time to post on the blog has become scarce, but we're moving forward on the Fund.io Admin Dashboard. Josh Thoyakulathu, my paired programming partner, and I have been working on a Flagged comments page that will be used by Admin users to approve or reject flagged comments from the front-end of the website.

The daily schedule we've adopted is:

  • Stand-up meetings to coordinate what we've done and where we're going as a group
  • Function writing practice
  • Short, focused lectures
  • Paired programming 

After that, we're on our own. I'm continuing to use the Pluralsight videos in addition to sites like Microsoft Developer Network & StackOverflow to fill in the gaps and as a goto for finding solutions to problems. Next up, learning how to create AJAX calls to populate our table on the fly. 

The deeper I get into this stuff, the more I realize how much actually goes on behind the scenes. Somewhere, behind all these magically delicious gadgets and gizmos of the web, are lines of code that someone wrote. My hat is off to these wizards. I hope they don't mind me standing on their shoulders.

Friday, October 18, 2013

Bugs Be Gone!

Week 3 has been all about jumping into an existing project, finding your way around the code, and making changes or tweaks in the HTML, CSS, or C# to fix bugs or make things look better. It has been great practice for troubleshooting and getting around in a big application. Visual Studio's Page Inspector tool, as well as the search function of the Solution Explorer have been a big help for me. Working together and individually, we've been able to fine tune some of the features originally built by the two previous troops.

This week I also started working on my personal project, Goalizr. Using Entity Framework code-first, I created my classes and database, and then seeded the database with some initial data for testing. My tables include Goals, Activities, and Emotions. I also needed to create some intermediary classes for GoalActivities and ActivityEmotions, so that I can associate multiple Activities to each Goal, and likewise, multiple Emotions to each Activity. We'll be busy the next few weeks creating the Fundio admin dashboard, but I want to keep working on Goalizr when I have the time so that I can have a solid application in my portfolio by the time I finish camp.

We also had a hiring day on Thursday, where recruiters and potential employers are invited to the school to conduct interviews and give us the opportunity to meet with folks in the industry face to face. I met some top-notch people from companies in the Houston area. One company, Assemble Systems, has a web application product that integrates 3D CAD drawings into an online viewer for Building Information Management. As I get closer to the end of camp, I'll definitely be looking into companies like this that combine CAD & GIS into web-based software solutions. There is some amazing new technology that's being developed right now, and I'd love to be a part of it.

On a sad note, we said goodbye to some of the graduates of one of the other troops. They were a huge help to us these last three weeks, and I wish them the best of luck on their own new career paths.

Monday, October 14, 2013

Team Web Development

As we move into week 3 of the Coder Camps ASP.NET MVC program, we're starting to put all the pieces of the stack together and begin work on our group project. The initial scope of our project was to build the admin area of the Fund.io website. Now, we have been asked to help finish testing and debugging the entire application, in addition to the admin area.

We'll be working as a collaborative development team on this project using Team Foundation Server (TFS). Some of the benefits of TFS are source control, data collection, reporting, and project tracking. The farther I get into this technology, the more impressed I am with Microsoft's suite of development tools. While I've been a long-time user of Windows and Office (and a big fan of their Flight Simulator!), until now I never really saw the amazing things they've been cooking up for software developers over the years.

Saturday, October 12, 2013

M R Ducks


"Success consists of going from failure to failure without loss of enthusiasm."
-Winston Churchill

Yesterday, our instructor (and founder of Coder Camps) David Graham, promised to blow our minds... And he delivered. But somewhere nestled in our discussion on Adapters, Repository Patterns & Unit Testing, we had a great talk about failure, success, and the Entrepreneurial Spirit.

David, an admitted serial entrepreneur, shared with us his experiences trying out different business ideas and how his ability to forget the failures has helped him on his path to success. One of these, a camping goods store, had the humorous advertising campaign written on the board.

I can certainly relate to dealing with failures, as most people can. And among our troop, it seemed to be unanimous that getting over failure is a part of life, and is often a prerequisite to success.

So often, we find something or someone to blame for our failures, and let it paralyze us. It's much harder (but in the end more rewarding) to take responsibility for our failures, and learn to treat each failure as a stepping stone to success.

Thursday, October 10, 2013

Week 2 Progress & Looking Ahead

Goalizr.com - Making Goals Happen
Classes continue to explore the tools and techniques used by professional web developers to build dependable and robust applications. Every night we work on homework assignments that can take up to 3 hours to complete. In the morning we review the previous night's assignment, and then move right into new material for the rest of the day.

Our class works really well together, finding solutions to problems and sharing resources to help build our skills. And, as always, the instructors and other troops are more than willing to offer help when needed. Thanks everyone! I feel like all the collaboration will give us a leg-up in our careers as web developers.

Every day has been a challenge, but also rewarding. I'm starting to get really excited about bringing all this together and start working on our class and personal projects. I've got a couple of ideas for a personal project. One is an online/mobile goal tracker app with novel features that utilize the lastest research in goal achievement. It has to be something I can get up and running (think Alpha) in the last three weeks of camp, so I'll post more information when we get closer.



Tuesday, October 8, 2013

Got SQL?

Day 6 we covered the nuts and bolts of SQL (often pronounced "sequel" ), which is a special-purpose programming language used for managing databases. Today (Day 7), we're going deeper into working with databases in Visual Studio and play around with Entity Framework. I say play with caution, however, as databases are a critical component of web development because they hold all the important stuff. Our instructor showed us how easy it it to delete an entire database by accident, so we're sitting on the edge of our seats for this one.

Saturday, October 5, 2013

Saturday Afternoon Study Session

Going through tutorials today. This morning we built a website that would be used by a school to add and edit student information within a database. Next up: An app to present movie listings with the ability to create, read, update and delete the movie records (That's CRUD for short, by the way.)

Friday, October 4, 2013

Week 1 Recap

Here's a view of the lake behind Pearland Town Center. I've been trying to offset all the chair-time with some running in the afternoons, and this is a great place to get out into the sunshine after a long day of coding.

Today, we reviewed a lot of what we did this week, discussed our progress with the group, and came up with a schedule for the weekend. One of the prior groups' students, Andy, is going to come in tomorrow for a Q&A, and help us tackle some of the more difficult subjects. On our own, most of us are watching C# & ASP.NET videos to drill on the basics. From talking with students in the other groups, this seems to be the best way to learn the material without getting behind.

Also, we had a good discussion about the job market for web software developers, potential interview questions we should be prepared for, and how to develop a positive, problem-solving mindset that is essential to being a successful developer.

Classes, Methods & Functions Oh My!

Day 3 & 4 were crazy. Tons of material is being covered and I've never had to push myself this hard to learn something new. From extension methods to polymorphism, we've been up to our necks in code. Building our first "app" was rewarding, though. It's not completely functional, but my partner and I managed to get it fleshed out pretty good. It's a simple checklist app that will eventually let you add items to the checklist and send the list to an email address. Yesterday, we had visitors from Tsevo, a Houston based software development company, give us a presentation on some of their projects as well as answer questions about starting a career as a junior developer. Very informative, and they showed us some pretty cool examples of what's possible with the skills we're learning.

Tuesday, October 1, 2013

Day Two - More C# & Model Diagramming

So today we jumped into the basics of Object Oriented Programming, classes, properties and more. Our team worked on a model diagram similar to this one (my homework assignment) for Fund.io and started applying some of the programming concepts to real world applications. I was familiar with implementing a shopping cart plugin into a website, but learning to build them is quite different!

Monday, September 30, 2013

Day One - Meet "The Stack"

ASP.NET MCV Stack
ASP.NET MVC Stack
Day One of Coder Camps was a whirlwind introduction into the language, tools and projects we'll be working on. Our group will be developing the admin dashboard & tools for an up-and-coming crowdfunding site called Fund.io.

I'd write more, but I'm busy finishing up my assignment: Write three functions in C#, one that will calculate the area of a circle (given the radius), one that calculates the circumference of a circle (given the radius), and one that will return the reverse of a string (ex. "What?" into "?tahW").

Edited 11:04pm - Finally finished the assignment: http://ideone.com/Fe7k8p

Wednesday, September 25, 2013

Coder Camps Prerequisite Work

In preparation for the Coder Camps programming school, I have been asked to complete some prerequisite work in the form of reading, going through online tutorials, as well as setting up this blog and a profile on LinkedIn. Although I'm still working on marking these off the checklist, I thought I'd post something about what it takes to get ready for a camp like this.

One of the books recommended by the school is Head First C# which focuses on the C# programming language and the .NET framework (not related to .net top level domain, by the way). I can tell from going through some of this book, there's a steep learning curve. I'm sure it's true with any programming language, even spoken languages, but I'm banking on being immersed in it for 9 weeks to get into the groove of things.

Another book I picked up, which wasn't recommended but looked interesting, was Code: The Hidden Language of Computer Hardware and Software. Less of a technical book, the author explores the connections between humans and machines, and the history of communications technology such as Morse code & Braille. So far, a good read that explores the world of computers in an entertaining and easy to grasp format.

Another prerequisite is to become familiar with some of the technologies that will be used at the camp. Primarily, we'll be using Visual Studio Express for Web, a web development program designed to help you create modern web applications. After installing the free software, and poking around a little bit, I could tell this is a powerful program. I look forward to seeing what this baby can do!

Since all websites are based on HTML, and more increasingly CSS, JavaScript & jQuery, a general understanding of these is needed to have a good head start going into the training. Coder Camps recommends Codecademy.com online courses to get a handle on these coding skills. I've completed the Web Fundamentals & jQuery courses, and am in the process of completing the JavaScript. The site walks you through lessons and exercises and allows you to enter and test your code in a handy virtual console. Some other online tutorial sites such as Codeschool.com and Teamtreehouse.com include videos and premium features.

While most of these tech bootcamps say they can take a complete beginner and turn them into an entry level programmer, I'm sure the prerequisite work allows students to focus on the meat and potatoes of programming when they get to camp. I feel like I've got a pretty basic understanding of this stuff, but I'm still a little nervous about jumping into 9 weeks of it. Oh well, a little pressure never hurt anyone...

Monday, September 16, 2013

Get Out The Map

After thinking about making a shift in my career path for some time, I've decided to pull the trigger. At the end of the month I'm heading out west to Houston for a nine week intensive (10-12 hrs/day, 6-7 days/wk) bootcamp to acquire the skills needed to become a software developer.

A few weeks ago I heard of this new format for learning computer programming through a friend of the family. This young lady attended a three month bootcamp in 2012 to learn Ruby on Rails. She said it was intense, but that it really paid off. She worked hard, and was hired by one of her instructors, who owns a software development company in Nashville. She now has a rewarding career in a field that's in high demand right now, and in the foreseeable future.

Inspired by her story, I began to do some research, along with some heavy-duty soul searching, and came up with a plan to attend one of these bootcamps and work to become a software programmer in the web development field.

I found a bootcamp located in Houston, Texas called Coder Camps that teaches the ASP.NET (pronounced A-S-P dot Net) framework. After speaking with some programmers in the Nashville area, and conducting my own research*, I found that ASP.NET would be a strong choice since many of the large healthcare, insurance, hospitality and entertainment companies in Nashville are using ASP.NET to develop their software systems.

Out of the many "coding" bootcamps that have sprung up in the country's tech centers over the last few years, Coder Camps is the only one offering an immersion study program focusing on the ASP.NET framework. In 9 weeks you learn the critical skills needed to work as a junior programmer. For an extensive list of these kinds of bootcamps, check out BootCamper.io.

After submitting my application to Coder Camps, I was invited to a Skype interview with David Graham, the founder of Coder Camps and the owner of a software development company based in Houston. I thoroughly enjoyed talking with David about his school, the curriculum, and the requirements for attending. After speaking with him for about half an hour about my background and my goals, he approved my application. It's a big commitment, and that's the main reason for the application/interview process. They want to be 100% sure that students know what they're getting into and the sacrifices they'll have to make. But in the end, I believe the reward of an exciting new career in web development will be worth it. So, here's to new beginnings, and maybe a little Texas-style BBQ!

*Research Sources
Google Trends - Software Technologies
BuiltWith - Framework Usage Statistics
Indeed - Job Trends & Job Salaries