Tuesday, June 21, 2016

A program to help my marriage

Like many wives, mine likes complements. Unfortunately, I am usually pretty bad at remembering to give them. A couple years ago I decided I would send her an e-mail every weekday with three nice things. For a while I was pretty consistent and she really appreciated it. Eventually, though, I became inconsistent.

Programming to the rescue! I have used JavaScript and Google App Scripts to make the best program ever. First, I made a Google Form that only has one question. When I fill in the form with something I love about my wife and press submit, it adds it to a Google Sheet called "3 Things - Specific". 

I use that form to add things I love about my wife that are specifically related to something that happened in the last day. I also have another sheet that I manually add to called "3 Things - General". In this sheet I have over 250 things I love about my wife (many have similarities) that are always applicable. 

My program first checks to see if there are any new entries in "3 Things - Specific". It uses those first. However, if there are less than three entries, the program will pull entries from "3 Things - General". Once it gets to the end of the general list, it goes back to the beginning. The program will send an e-mail to my wife (from me) with those items. It is setup to run automatically run every weekday at the same time. The best part is that my wife gets an e-mail every day with three things I like about her and I don't have to remember to send it every day. Also, I can easily add things I like about her as soon as I think of them.

Here is the code from my program:

function threeThings() {
  var emailAddress = "tea......@gmail.com";
  var lastRowG = 257;
  var subject = "3 things";
  var thing1 = "";
  var thing2 = "";
  var thing3 = "";
  var cellS;
  var cellG;

  
  var ssG = SpreadsheetApp.openById("1vS9TBuT.......");
  var ssS = SpreadsheetApp.openById("1QdukK9t.......");
  var sheetG = ssG.getSheetByName('Sheet1'); 
  var sheetS = ssS.getSheetByName('Form Responses 1'); 
  var rangeG = sheetG.getRange(1,2); 
  var rangeS = sheetS.getRange(1,3);
  
  var startRowS = rangeS.getValue();
  var startRowG = rangeG.getValue();
  
  if (startRowG >= lastRowG-3) startRowG = 1; 
  
  cellS = sheetS.getRange(startRowS, 2).getValue();
  if (cellS != "") {
     thing1 = cellS;
     cellS = sheetS.getRange(++startRowS, 2).getValue();
     if (cellS != "") {
       thing2 = cellS;
       cellS = sheetS.getRange(++startRowS, 2).getValue();
       if (cellS != "") {
         thing3 = cellS;
         startRowS++;
       } else {
         thing3 = sheetG.getRange(startRowG++, 1).getValue();
       }
       } else {
       thing2 = sheetG.getRange(startRowG, 1).getValue();
       thing3 = sheetG.getRange(++startRowG, 1).getValue();
       startRowG++;
     }
  } else {
       thing1 = sheetG.getRange(startRowG, 1).getValue();
       thing2 = sheetG.getRange(++startRowG, 1).getValue();
       thing3 = sheetG.getRange(++startRowG, 1).getValue();
       startRowG++;
  }
     

  var message = "1. "+ thing1 +"\n2. "+ thing2 +"\n3. "+ thing3;
  
  MailApp.sendEmail(emailAddress, subject, message);
  sheetG.getRange(1, 2).setValue(startRowG);
  sheetS.getRange(1, 3).setValue(startRowS);
  SpreadsheetApp.flush();
}  
  

Sunday, June 19, 2016

Life Goal: Work at Covenant Eyes

I have been learning software development for awhile now but up to this point I have been a little aimless. There are so many programming languages and frameworks out there and it is hard to know which ones to spend time learning. I have heard many conflicting opinions as to which languages to learn first and which languages will be most in-demand in the future. I am excited to report that I have finally figured out a path forward. I have identified my dream job and I am going to focus on the languages and frameworks listed in a recent job posting I saw for the position. I already have some of the skills listed but I am going to strengthen the skills that I already have and learn the skills that I have yet to practice. One of my main life goals is to become a web developer at Covenant Eyes in Owosso, Michigan.

There are many reasons that I want to work at Covenant Eyes and specifically why I want to work there as a web developer. The main reason comes down to life mission. Though I have been interested in computer programming since a young age, I specifically chose to become a special education elementary teacher so I could have a positive impact on the lives of others. I have also been very involved in community service and volunteering over the course of my life. We even moved into our inner-city neighborhood with the purpose of showing God's love to our neighbors. Though I enjoy teaching, I have an even greater passion for technology and software. For some reason it is not until recently that I realized that I could combine my passion for technology and software with my passion for serving others.

I have determined that Covenant Eyes is the perfect place where I can combine these two passions. The company develops accountability software to help people fight against internet temptation. One of their slogans is "We bridge the gap between technology and relationships." I have seen first hand how accountability software can save relationships and help people deepen their relationship with God. I love their mission and I want to be part of the great things that God is doing through their company.

While I love the company's mission, I also love that they support the community involvement of their employees. Their career page lists this company perk: "Use normal work hours to volunteer around the community and help and serve others outside the workplace. No paid time off required!" God is doing a lot of great things in our neighborhood that I want to be a part of. Covenant Eyes is a company that will support me in this. This is another top reasons that I want to work for Covenant Eyes.

The next reason I want to work for Covenant Eyes is closely related in my mind to the previous reason. They sometimes allow their programmers and web developers to work remotely. I live 40 miles from their office so driving there would not be too much of an issue. However, the flexibility of working remotely would open up many more opportunities for service in my neighborhood. I am an extremely conscientious worker and would have no problem working on my own. This would save me travel time and allow me to get more involved serving others.

The final reason I want to work at Covenant Eyes is the job itself. I really enjoy web development and I would love for it to be a full-time job. I have had my own domain name since the year 2000 (www.beauvine.net) and created my first personal website even before that (on geocities!). While it is not until recently that I have started to keep up with the newer web technologies, I have always enjoyed web development. As I have started to get more into web development lately my interest and passion for the topic has continued to grow. I am super excited for the next phase of my life as a web developer and I am even more excited about the possibility of doing this for Covenant Eyes!

I have just started my summer break as a teacher. This is the first year that I am not teaching summer school or taking an extra summer job. I have decided that I am going to work full time this summer strengthening my skills in the areas listed on the web developer job description from Covenant Eyes. I am not sure yet if I will do one more year of teaching before trying to make the job switch to web development. Either way, my goal for the summer is to develop a few more original projects to demonstrate my skills as a web developer and programmer.

Friday, June 17, 2016

How I completed my entire WGU Software Development degree in 6 months (76 CUs)


I completed an entire Software Development bachelor's degree from Western Governors University in only six months. This school is unique in that you can work at your own pace so as soon as you finish the requirements for one class you can go immediately to the next class. I would like to explain how I accomplished this to hopefully help other students.


First of all, I should confess that I already misled you. I am not quite finished yet. But I have passed every class except the final project and I still have 1.5 months left until it has been 6 months. So I have passed every class except the final project in only 4.5 months! I am sure I will finish in time but I did not want to wait until I finished completely to post this. I have done this all while working full-time and spending time regularly with my wife and two young kids.


I am currently an elementary teacher (that degree also from WGU) and before starting I had very little experience with software development. All my general education classes were transferred in from my previous degree. Also, 15 years ago I got my A+ and Network+ certifications. While they did not initially transfer over to my WGU degree because they were so old, after I passed Security+ those other certifications were automatically renewed and then WGU allowed me to get credit for them. That alone took care of four classes for me. So that left me with 76 CUs (credits) to complete.


One of the biggest skills that helped me is being a good test taker. It is very important to understand questions completely. Also, many times one question will give hints to the answer of another question. It is also very helpful to regularly check the course chatter or reddit to see if there are suggestions from other students on how to do well in the exams. I spent time trying to figure out what things were most likely to appear on the exams so I could just study those things. For the most part, I only went through the entire learning resource for the classes that had to do with Java. For the rest I would find another way to learn the required material quicker or just skim. I also found study material that other WGU students made on Quizlet.com that helped me to just study the important concepts. Also, I was constantly reviewing upcoming classes to make sure I had all learning resources before it was time for me to start the class. I ordered books and reserved books from the library so they would be ready as soon as I needed them. WGU makes all the books available online but it was nice to not have to read everything on a computer.


I took all pre-assessments "open book". Usually the final exam asks similar questions so the pre-assessment helps to know where to study. I would usually take the entire pre-assessment without looking at the book and I would mark the questions I did not know. Then I would go back through and look up the questions I did not know. I would keep a count of the number of questions where I changed my answer. After I saw my final score on the pre-assessment I was able to calculate what my score would have been had I not changed any answers. This allowed me to judge how ready I was for the final. Sometimes I would leave a question wrong on purpose so my final score on the pre-assessment was not too high. I thought it may seem weird to my mentor if my final exam was always way lower than my pre-assessment. I took screenshots of all the questions I had trouble with so I could study those concepts further. I only retook a pre-assessment once. Since the second time had the exact same questions as the first time I decided not to retake anymore pre-assessments. It was easy to score high enough to not have to retake since I was taking them “open book”. It was not helpful to retake the same exam since I already had screenshots of all the difficult questions.


Another key thing that helped me get through quickly is that I made a schedule of when I planned to pass each class. I usually gave myself between 1 and 3 weeks for each exam based on reviewing what the course entailed. The schedule motivated me to put in extra time studying so I could pass the exam on time. WGU recommends spending 20 hours per week on coursework. I may have even averaged less than that. It does not take a lot of extra work to finish quickly. You just need to work smarter.


While I don’t remember everything I did to pass the classes, I have made a list of some of the things that were very helpful for me to get through the classes quickly. I also show how long each class took me and what grade I got on the exam. I do not give my grades on the projects but most of them I passed on my first try.


Network and Security - Applications - C178 Time: 3 weeks, Grade: 853
This class is all about earning the CompTIA Security+ certification. All classes that you pass by earning a certification have a lot of resources online that you can use to help pass. I read a lot of forums about different tips for this exam. I watched Professor Messer videos about Security+. Here is the first (of two) playlist: https://www.youtube.com/playlist?list=PLG49S3nxzAnkcKd71N4OjSv4cUXNhoPlQ


I watched all the videos at 2x speed. I also watched some of his study session videos and I purchased his Network+ notes for $10. I read the notes a few times. I took all the practice exams on uCertify but I did not read much of the material on there. I did read the sections that I scored low on when I took the practice exams. I also took some other practice exams I found online.


Introduction to IT - C182 Time: < 2 days, Grade: 81%
The only studying I did for this class is during my ‘open book’ pre-assessment.


Principles of Management - C483 Time: < 2 days, Grade: 71%
52% to pass? This is a joke class that they don’t expect you to actually do. Studied during pre-assessment.


Scripting and Programming - Foundations - C173 Time: 4 days, Grade: 89%
I quickly went through the learning resources on Udacity and Codecademy. This material is not very long, especially when you watch the videos at double speed. There are not actually very many videos they want you to watch on Udacity according to the pacing guide. This exam was pretty basic.


Scripting and Programming - Applications - C169 Time: 5 days, Grade: 82%
I read “Java for Everyone” completely. I was able to check it out from the library through interlibrary loan. This was the only learning resource I used. I watched a cohort recording that helped with the final project. Also, the course mentor sent me a file called “ArrayListExample.zip”. This contained code very similar to what was required in the final project. Looking at that code, along with watching a few YouTube videos from Derek Banas, helped me to complete this project quickly.


Operating Systems for Programmers Time: 5 days, Grade: 88%
The main thing I did for this class was to read the powerpoint presentations that are accessible in the learning resource. These basically provide a summary of all the important concepts. I also did the practice quizzes and read through the parts of the actual book that I struggled with. This is the class that I retook the pre-assessment. I was a little concerned about this class so I read through more of the book than I originally planned.


Data Management - Foundations - C175  Time: 7 days, Grade: 78%
As far as I can remember I just went through the entire learning resource for this class.


Data Management - Applications - C170 Time: 7 days, Grade: 86%
I think I went through most of the learning resource for this class. Also there was a pdf from the course mentors that was very helpful for completing the project.


Data Management for Programmers - C192 Time: 8 days, Grade: 85%
Don't be intimidated by all the reading. There are not that many questions on the exam and they are all about core concepts. If anything in the reading seems complicated (i.e. relational algebra and calculus), it is probably ok to just skip that section entirely. Just keep asking yourself, "Would they really use one of the 56 questions to test for this concept?" Also, keep open the study guide while you read. When you get to a new section heading, do a search in the study guide using the keyword from the section heading. If that keyword is not in the study guide, it is probably safe to skim the section very quickly and not read in detail. A lot of the exam involved actual SQL commands. Also, there are quite a few questions about schemas (star, snowflake, starflake). Some of the chapters in the in the pacing guide do not have concepts in the objectives. I skipped chapters 3,10,11,12,14,15, & 16. I probably read less than half the book in detail and skimmed the rest.


Organizational Behavior and Leadership - C484 Time: 1 day, Grade: 81%
Another joke class only needing 51% to pass. In the ‘course tips’ section there is a link to ‘Key Terms’. I read over this before the exam.


Data Structures - C189 Time: 4-5 days, Grade: 93%
I read through the entire learning resource. I think I got this book from the library through interlibrary loan. Videos and code samples from Derek Banas on YouTube really helped on the project.


Business of IT - Project Management - C176 Time: 9-10 days, Grade: 831
This class was for the Project+ certification. I mainly just studied notes that someone else made for the exam. You can get them at this link. http://www.techexams.net/forums/project/109567-passed-project.html
Besides that, I just skimmed uCertify (focussing on the chapter summaries) and did the practice exams on there.


Software I - C482 Time: 9-10 days, Grade: 90%
I read the book “OCA Java SE 7 Programmer I Certification Guide” by Mala Gupta. The book was for version 7 and I took version 8 so I did some additional reading, some through the WGU library, to learn about the version 8 concepts. I did not read any of the uCertify material but I went through all the practice exams on uCertify. These are the exact same exams as the Enthuware exams. The course mentor told me that if I could score at least 65% on the practice exams then I would be ready to take the final since the practice exams are much harder than the final. That was true.


Software Engineering - C188 Time: 4 days, Grade: 65% (minimum grade to pass!)
I read all the suggersted reading and I reviewed this a few times https://quizlet.com/95219442/software-engineering-wgu-c-188-flash-cards/
I don’t think I did the practice exam in the learning resource.


Business of IT - Applications - C179 Time: 6 days, Grade: 87%
The course mentors provide a fill-in-the-blank study guide. The following quizlet has almost all the answers. https://quizlet.com/112474086/c179-study-guide-fill-in-the-blanks-flash-cards/. I used just studied this quizlet and some other quizlets and the study guide and I was able to pass the exam.


Software II - Advanced Java Concepts - C195 Time: 20 days, Grade: 66% (1% more than minimum)
This is the most challenging class in the degree. I read through all the uCertify material. Instead of doing the practice exams on there I purchased and completed the Enthuware practice exams. Here are some other helpful resources I used:


Client-Server Application Development - C193 Time: 11 days, Grade: 80%
No secrets to this one. I just read the book and did the practice quizzes.


Mobile Application Development - C196 Time: 17 days, Grade: 80%
I watched the suggested Lynda.com videos, along with part of another Lynda.com video called “Android SDK: Local Data Storage”. I did not read any of the book from the WGU library. YouTube videos from Derek Banas and The New Boston were very helpful. I also used the camera tutorial from the ‘course tips’ and countless searches on Google and Stack Exchange.

Sunday, June 12, 2016

Programming Journey

I am currently a special education elementary teacher. I became a teacher so I could have a positive impact on people's lives. However, I have always been interested in computer programming. I wrote my first computer program almost 20 years ago in Q-BASIC and I took a few programming classes when I went to college the first time. After some life experience, I have finally realized I can have a positive impact on people while in a career I am truly interested and passionate about. I am now about to finish a degree in software development (my third Bachelor's degree).

This last Friday was my last day of work as a teacher for the school year. I have decided to work full time this summer on learning to become a better computer programmer. I have a couple projects to finish up for my software development degree and then I will be completely self directed. I will be using this blog to share what I am learning and thinking about along the way.