Introducing Focus Your Day

The Idea

It’s coming up on week 7 at Bitmaker Labs and final projects are on the horizon. Austin (a fellow) classmate and I have decided to pursue and idea I thought of to better focus your day. It combines your standard to-do list and sync’s that up with your realtime availability. So if you have time available to complete a task, Focus Your Day (FYD) will schedule that into your calendar. As your day changes so will your calendar.

How It Works

For example let’s say you block off 9-12 in your calendar to do some coding and you have two tasks related to coding to complete that you estimate will take you 60min each. What FYD will do is put task #1 scheduled in from 9:00-10:00 and task #2 from 10:00-11:00. But where the magic happens is let’s say now from 10:00-10:30 someone books you for a meeting – FYD will repopulate your calendar and push task #2 after your meeting. So your new day will look like 9:00-10:00 task #1, 10:00-10:30 meeting, 10:30-11:30 task #2.

Approach on solving this problem

For this app we’re going to leverage Google Calendar and it’s API (an API just let’s our app communicate with Google Calendar). So what you’ll do first is set up a default calendar on how your day would flow assuming you had 0 interruptions.

For example:

So after you’ve set up this template or dummy calendar you’ll have task categories. In my case I’d have morning routine, bitmaker lesson, lunch, code, yoga, dinner, and chill. Now that your days are setup, you can schedule tasks and associate them to a category. FYD will then plop those tasks into your predefined buckets and as I said if anything in your day changes, FYD will adjust on the fly. Furthermore, as soon as you update your dummy calendar in Google Calendar it will again adjust your schedule accordingly.

The whole point of this app is to extend your typical to-do list to be something more useful and to keep you focused on your list of priorities throughout the day.

User Validation

We collected some user feedback about our idea and the validation for this idea was a resounding can this be built like yesterday! Here are the questions we asked and some of the responses we got (sample size of 10):

Question – Have you ever set a goal only to find it get delayed of never accomplished?
Options – Yes or No
Answers – 100% Yes

Question – If yes, what happened?
Answers:
-unplanned interruptions
-lofty goals
-Feel that things take more effort to get started than to get done.
-Too much day to day things get in the way of the bigger goals
-The habit would go well at first but would get lost after a few months. Guess it didn’t stick.
-Delaying a little led to a permissive attitude that led to bigger delays.

Question – Have you ever got to the end of a day and felt like you didn’t really accomplish much?
Answers – 100% Yes

Question – If yes, why do you think your day got off track?
Answers:
-overplanning. too many frigging details on the todo list and getting discouraged if a tiny part of it gets derailed
-A lack of purpose.
-Meetings, unexpected phone calls, some things take too long to get done, lack of coffee:) I find if you can get the most important things done early in the morning, your day will go better and you get more done overall, so maybe the app can take that into account when auto populating your plan of action

Question – Do you find that when your day is more structured you get more things done?
Answers – 80% Yes 20% No

Question – If no, having a day that is structured, but also able to deal with things changing on the fly – would that be helpful?
Answers – 100% Yes

Even with a small sample size it seems like our app will address a pain point among people’s day-to-day focus.

Sneak Peek

So what’s going on here:

Left Hand Side
First Box: You have you task categories (that get automatically populated from your dummy calendar). Ideally you’ll be able to select this to highlight any associated tasks on your middle calendar view. You’ll also be able to colour code your categories.

Second Box: This gets populated by expired and completed tasks. For example if you said you’re going to complete task x between 10:00-11:00am and it’s now 1:00pm that task will go in this area. If you actually didn’t complete this task you can simply click the arrow to pop the task back over to your list of task priorities on the right hand side – then the calendar will repopulate. Below the dotted line will display your completed tasks for the day.

Middle
Here is your schedule for the day. It will display all of your tasks and any other calendar events you have from your other calendars. What’s great about this is it will allow FYD to adjust your schedule based on your other Google Calendars. So if you do get that meeting invite it’s not like you have to manually go in and adjust your day – FYD will just do this for you. We’re able to get push notifications from the Google Calendar API to alert us of these things :)

Right Hand Side
This is where your running list of task priorities goes. Here you can add a new task (pop-up on click) and rearrange your priorities via drag-drop. Again if you change anything here FYD will reschedule your day based on your new list, be it from adding a task or changing the priority order.

Feedback

I hope you enjoyed this overview of FYD! If you have any feedback, suggestions, hate it, love it, please email me at matt@milleronrails.com or tweet me @milleronrails.

Thanks folks and have a great day!

Get Hired Challenge

**Challenge Over**

Feeling super blessed as I’ve found employment at an amazing organization The Working Group. TWG built my GettingGives app and it’s amazing to see things come around full-circle. I can’t wait to get started at TWG in the New Year and I’ll keep you all posted on the exciting things I learn along the way!

In one of my previous posts I briefly introduced my final project idea and committed to a challenge until I get hired after Bitmaker.

Challenge Rules

1. At least 5 hours of coding/work per day.
2. 1 hour of exercise per day.
3. 3 healthy meals a day.
4. At least 8 hours sleep per night.
5. Describe at least one success for the day.
6. Describe at least one challenge for the day.

Dec 1, 2013

1. Worked for a little over 6 hours today with about 4.5 hours of coding
2. Did 60min of hot yoga and walked to Bitmaker for about 25min
3. Had cereal, 6inch ham sub, 6inch ham sub
4. Just barely got 8 hours
5. Got my ajax assignment done and some good early mockups on our final project
6. Getting started on the day a bit later which led to a late night to get my 5+ hours in and what I wanted to accomplish for the day. So I’m tired today.

Dec 2, 2013

1. Just got in 5 hours today, we had a few breakout sessions on various topics today that cut into my time
2. Today was super mild and I was able to get out for a nice walk on lunch, as well as, to and from BM for about 1.5 hours
3. Had cereal, 12 inch ham sub, 6inch steak and cheese sub…note to self remember your wife’s cooking!!!
4. Just barely got 10 hours went to bed a bit early
5. Today I extended my mockups for Focus Your Day and we got great feedback from Sean based on our pitch for the idea.
6. Couldn’t stop yawning today. Really need to get better sleeps as I get back into the fitness routine. Today I was super tired and had issues focusing.

Dec 3, 2013

1. Today I got in around 5.5 hours.
2. Did 60min of yoga and walked to and from BM for 50min total.
3. Had cereal, turkey breast sandwich, veggie lasagna (finally remembered my lovely wife’s cooking!)
4. Around 9 hours.
5. Compiled a list of user stories for our final project and whittled down the stories for our MVP. Adjusted mockups to reflect MVP. Started identifying our models and relationships for the app, as well as, investigated Google Calendar API.
6. Today was super noisy at BM with everyone working in groups and the location I was sitting in seemed to have abnormally high traffic. This made it so I was moving to let people in and out of my row frequently. Overall just tough focusing today, but it’s awesome to see the energy amongst my fellow BM’s!

Dec 4, 2013

1. Today was a killer day got in probably closer to 8.5 hours.
2. Just walking today for an hour.
3. Had cereal, lasagna, stir fry
4. Around 8 hours.
5. Was working on extending an assignment from BM as I had an interview (Ya!) at a company the following morning and I wanted to show a more complete project.
6. Ran into some really odd errors with jQuery and Foundation fighting against each other.

Dec 5, 2013

1. Today I probably only got in 4 hours. My wife’s family is in town so went out for dinner with them and I had my interview so that ate up a lot of my time.
2. Just walking today for an hour.
3. Had cereal, McDonald’s (bad Matt!), Steak and Fries
4. Around 8 hours.
5. I think my interview went pretty well. I’m really hoping to get hired here as it would really allow to accelerate my dev skills and work on cool projects.
6. Didn’t really have any challenges today outside of not having enough time to work on more code.

Focus

We’re coming up on week 7 at Bitmaker Labs and it’s crazy to think of how much time has passed! It’s time for us to think about our final projects and what problem we’d like to solve. I’ll be teaming up with Austin to tackle the problem of focus. More specifically, how to set a goal and achieve that goal through steady progression.

In the past I’ve set up a work schedule for myself to accomplish a particular goal or task, but often times life gets in the way and things get delayed. There are a tone of todo apps out there, but I often find that it’s more work to manage my list, to keep it current and relevant, than it provides me with a benefit. Sure the list reminds me of what needs to get done, but it doesn’t really help me deal with an ever changing day.

This is when I thought, what if I could extend the general todo list to sync up with my day-to-day availability? I could preplan how I’d like to structure my days, or sync up with my Google Calendar, and have my list of todo’s auto-populate my calendar based on my availability. This way I have a running list of priorities, my availability and a calendar all synced together to guide my day and my focus. If a meeting comes up and takes away a block of free time, the calendar will automatically repopulate to push tasks to the next block of available time. This way as your day changes you never lose sight of what to do next.

I’ll be teaming up with Austin to create what we’re calling Focus Your Day. We’d love your feedback!

As a side note…

Moving forward I have 6 weeks left till hiring week and I’d like to put out a public goal of mine. I want to become an amazing software developer and I want to be part of an amazing team after Bitmaker. There are a tone of talented people in our cohort and I want to step up my game.

Starting today until the day I get hired and my schedule changes I commit to:
1. At least 5 hours of coding/work per day.
2. 1 hour of exercise per day.
3. 3 healthy meals a day.
4. At least 8 hours sleep per night.

Every morning I will update a post here to update on whether I achieved these goals, what wins I had for my day and what challenges I had.

99 Bottles of beer on the wall, 99 bottles of beer…

This was a really fun week at Bitmaker Labs. We built a small clone of Amazon that introduced us more to associations in our models (or databases), as well as authentication and authorization. We also did a fun exercise that introduced us to the LCBO API and JSON parsing, hence the title!

Now for those new to development and possibly thinking about Bitmaker Labs let me explain some of the things I mentioned above.

————
*Associations*
What I’m referring to is the associations rails makes with your models or database tables.

So for example let’s take our simple Amazon example where you have a model for product, user and review. A product has many reviews (has_many :reviews), and it also has many users through reviews (has_many :users, :through => reviews). A review belongs to a product (belongs_to :product) and belongs to a user (belongs_to: user). Lastly, a user has many reviews (has_many :reviews) and has many products through reviews (has_many :products, :through =>:reviews).

You see above why so many people love Ruby on Rails – it’s code (in the brackets), reads very much like english and simply makes sense. The only one that might trip you up is the has many through associations and I encourage you to read up more on the on the RailsGuides.

*Authentication vs. Authorization*
Authentication is simply verifying the active user is who they say they are (logging in) and authorization is verifying or assigning the proper privileges for that user (admin, user, guest). Think of it as authentication is who are you and authorization is what can you do?

*API, JSON Parsing*
Basically, an API allows two applications to talk to or interface with one another and JSON is a collection of name/value data pairs that we can read and interact with through parsing that data.

So for example if you check out the product section of the LCBO API and find All products, then in that snippet of code “result”: [{ – you can see the name/value pairs. “name”: “Coors Light”, “price_in_cents”: 1290, etc. We can then write an application in RoR to interact with that data to do whatever we want really. It’s pretty snazzy stuff!
————

It’s been really cool working more with models and defining associations amongst our data. Furthermore, it was a lot of fun working with Rails and wiring it up to the LCBO API. To find more APIs to play around with visit mashape.

As always if you have any questions please don’t hesitate to reach out anytime! Have a great day :)

Living up to my domain name! Sort of…

Week three at Bitmaker Labs has us taking the leap from Ruby to Ruby on Rails! I can finally live up to my domain name of milleronrails.com. The proof is right here with my super amazing photo application.

Although this app looks like poop it’s pretty exciting to see just how quickly you can get an app up and running with rails. We learned about MVC, that is to say Model, View and Controller.

Briefly:
-Model – This handles all of your data and business logic of your application
-View – Presents data to the user in any supported format and layout (HTML, PDF, CSV etc.)
-Controller – Receives user requests and calls appropriate resources to carry the requests out. Think of this as the middle-man/woman, between the model and view.

It’s very interesting to see some of the “magic” or “voodoo” I’ve heard about rails. Everything is very intuitive and easy to read. Naming conventions in rails make sense. I can definitely see why we learned ruby first, having that prior knowledge is allowing me to pick up rails and what the heck is happening much quicker.

If you’re looking to setup your first rails app and want practice on the standard setup for the vast majority of projects I encourage you to check out this tutorial. Another great resource is the Michael Hartl Rails Turorial and the Pragmatic Studio Rails Course. Tackle these resources and you’ll be well on your way!

I hope these resources help and that you enjoyed this post! If you have any questions please don’t ever hesitate to reach out.

Why Test?

It’s the start of week 2 at Bitmaker Labs and today we covered testing, more specifically test-driven-development (TDD).

What are tests? Tests ensure the code works the way we think the code should work. But beyond checking to make sure things are working as we think they should why do we test?

  1. Tests allow you to act as a client and this gives you a reason to write code
  2. Catch changes (that change behaviour)
  3. Save time – simulate user interaction, so you don’t have to!
  4. Clean code – allows you to refactor fearlessly when you have a full test suite

Did you know TDD has nothing to do with tests?
Instead, it is about designing your code. Designing the solution to the problem. It’s about using tests to understanding what you code should be doing.

Using TDD allows you to remove the guesswork when building an application. It makes for a cleaner API as you’re only creating things when you need to interact with them. Then once you everything in place you can refactor your code at will!

A nice TDD workflow is Red Light, Green Light Refactor. That is to say write a failing test, make the test pass, and then clean up your code respectively. Think of a construction site that is putting up a new building, what is the last thing they do? The last thing they do is make it all spic and span!

What does success look like in TDD? Well it’s either changing the message or making it pass, both of these represent forward progress.

This is an exciting new concept to learn, but a very difficult one as it requires a complete shift in the way you approach a problem. It’s fun though! I’ve really enjoyed working through some of the assignments on this. If you’re interested in trying this out for yourself feel free to fork this repository.

Have a wonderful day everyone and until next time!

OOP and Money!

Today is my fourth day at Bitmaker Labs. Today we covered object-oriented programming or OOP. Originally I was fairly confused on these concepts, but our instructor, Chris, cleared things up quite a bit for me today. So I’d like to pass along some of the analogies he used today that helped clear these concepts up.

With OOP we have Classes, Objects, and Relationships.  Let’s say we wanted to build the Bat Mobile how can we translate that to some of these concepts.

Classes: Think of a class as the blueprint on how exactly to make the Bat Mobile.  Your Bat Mobile knows absolutely everything about building you that speedy ballin’ car.

Objects: This is the actual Bat Mobile, not how to make it.  It’s the physical object made from the blueprint.

Relationships: Here there are 3 types — 1. kind of… (inheritance) 2. is a… 2. part of… & has a… (2/3 = association).  Not going to use the Bat Mobile here (boo).

Inheritance – This is a hierarchy the has a parent class and child classes. If you were to imagine Shape as the parent class, a Square is kind of a Shape, Circle is kind of a Shape.  But!  Is a Line kind of a Shape?  I thought yes, but the answer is no.  The reason is because in order to inherit the parent class the child class must share ALL properties of the parent.  So for example a line does not share Area, whereas a square and circle both have areas.

Associations – We didn’t go into these too much, but I’ll give you some examples of how these work.  Cat is a Mammal, Mammal is Animal.  Door is part of Car, Car has a door.  The idea here is that the whole thing (Car or Animal) are comprised of little things or objects.

Quick Money Trick
When you’re dealing with money in your application do not use floats! Instead convert your number to pennies by multiplying by 100/rounding and then dividing/rounding once you’re done. The reason for this is because computers suck at doing math (look up floating point error).

Sorry this post wasn’t a get rich quick scheme using OOP, but I hope it helps nonetheless!  Please share, comment or feel free to email me with any questions at matt@milleronrails.com.

Day 2 – Tips and Tricks

Today was another good day at Bitmaker. Our cohort seem to be a very focused bunch with many tapping away at their keyboards non stop. A good amount of us are already on Thursday or Fridays work, but at the same time you hear those who are further ahead helping others.

Helping others is something I really like to do. I pride myself on being a nice person who is willing to lend a hand whenever the opportunity presents itself.

As such, here are some tips and tricks I’ve picked up so far:

iTerm Show/Hide
This is a handy little trick to toggle your command line (in my case iTerm2) to show/hide at the top part of your screen.

Step 1 – Open iTerm -> In the menu go to iTerm -> Preferences -> Click the keys tab -> Change your settings to look like mine in the red box -> So tick both checkboxes and set your desired hotkey for this function, in my case I use cmd + `

Step 2 – Click the Profiles tab -> Click Hot Key Window -> Then make your way to Window -> Slide transparency all the way to Opaque

Step 3 – Minimize iTerm and test out your new hotkey! Neat eh?

* Please note your actual terminal and the hotkeyed one are not the same, so pick one to work in.

It’s a pretty slick finished product! Take a look :) Thanks Leo for this!

Sublime Custom Preferences Worth Adding
Here are some custom settings I’ve set up in Sublime Text 2:
{
"color_scheme": "Packages/Color Scheme - Default/Monokai Bright.tmTheme",
"font_size": 14,
"hot_exit": false,
"ignored_packages":
[
"Vintage"
],
"remember_open_files": false,
"save_on_focus_lost": true,
"tab_size": 2,
"translate_tabs_to_spaces": true
}

Breaking it down what each element does and why I feel it’s useful.

“color_scheme”: “Packages/Color Scheme – Default/Monokai Bright.tmTheme” — Personal preference on theme
“font_size”: 14, — Sets Sublime to a larger font (I don’t like squinting)
“hot_exit”: false, — Allows Sublime to exit without a prompt
ignored packages — My understanding is this removes VIM functionality
“remember_open_files”: false, — For me I was really annoyed with Sublime reopening the files I left open this fixes that

Essential ones from our instructors:
“save_on_focus_lost”: true, — This makes where your file tab is display a circle if it needs saving and x if it’s up to date
“tab_size”: 2, — reduces the tab sizing from 4 to 2 so you can fit more on your lines
“translate_tabs_to_spaces”: true — I can’t remember what this one does but from a quick google I think it relates to the tab_size

Rails Setup Guide
From one of our instructors this is an excellent guide for getting your system setup! Click here

Rounding Floats in Ruby
(f * 10**d).round.to_f / 10**d — where f = float number and d = decimal places

Getting Quicker With Hotkeys
http://www.cheatsheetapp.com/CheatSheet
This is a great tool for learning the hotkeys in whatever program you’re using more or less. It allows you to hold CMD to get a birds-eye view of all the hotkeys for the current program.

Well I hope some of the above helps! I’m off to do some more coding. Have a great day!

The Craftsman Journey Begins

Day 1 of Bitmaker Labs complete. For those who don’t know Bitmaker is a 9-week program that provides you with the necessary skills to become a solid junior developer.

I recently read (well listened…I dislike reading when I can listen) the book So Good They Can’t Ignore You by Cal Newport. This book dispels the “follow your passion” hypothesis and is a fantastic read/listen if you’ve found yourself unfulfilled in your career.

Without getting into to details about Cal’s book, I can tell you the main difference between the passion hypothesis and Cal’s is “what can the world do for me?” vs. “what can I do for the world?” respectively. It’s an exciting distinction eh? After day 1 of Bitmaker Labs, I couldn’t be more excited about what I might be able to do for the world in 9 short weeks.

A big thank you to the whole Bitmaker team for bringing a program like this to Canada. It was truly a pleasure meeting the team and all of my fellow classmates today. Feels good to be doing something meaningful again.

Can’t wait for day 2!

 Scroll to top