Tuesday, September 17, 2019

Diploma

My e-diploma arrived earlier today. The hard copy is in the mail. 


I'm getting ready for the high holidays now so I'll be quiet for a little while. I'm still winding down and getting used to not being in a constant rush. When I'm done I'll start putting together the framework for the projects I have lined up and get back to some reading. There are books from the core program that I really need to go over again now that I have a big picture of CS.

Students have mentioned moving my blog activities over to medium but it just sounds like a bunch of techies trying to be noticed by recruiters ... I don't think my writing or marketing abilities would be able to compete in that environment. I just need a place to keep my notes and celebrate my wins.

I am REALLY thankful for the fellow students who took a moment to unravel whatever corner I coded myself into or explained a topic I was beating my head against. This was one program I don't think I could have done solo. Thank you, my angels.


Sunday, September 15, 2019

36

So this is what I'm doing with my free time these days (found a company that lets you customize text for letterman jackets) ... In theme with being WGU's 36th comp sci graduate:


In all seriousness, I've been working on decompressing. I've been wound really tight in the weeks leading up to graduation and it's been difficult getting myself off that mindset. 

Up next: my diploma should be coming in the mail in the next week or so. 

Wednesday, September 11, 2019

Extension Oddities

Because I was on an extension when I passed, the capstone didn't actually finalize as completed until 9/9. But I was able to fill out my application for graduation on Sunday. I got a ding today thinking it was good news but the financial aid department decided to send me a bill for next term (I sent it back) ... It looks like WGU needs to tweak the automatic settings or something.

I keep checking to see when they finally kick me out of the degree plan. I'll post back when it does.

EDIT: I was kicked out of the degree plan on Thursday with the following message:


Someone on reddit said he spoke with the head of CompSci earlier that day and learned we had exactly 35 graduates. Because of that, I've been telling everyone I'm WGU's 36th graduate. Woot!


Saturday, September 7, 2019

Friday, September 6, 2019

Capstone Adventures: Part 20

Section D is done and I am spent. I'll work on B tomorrow.

Capstone Adventures: Part 19

I fleshed out a lot of Part D but didn't finish. I spent most of the evening fool-proofing my local installation. Magically, it got qgrid working on my computer. For some reason I could not manually set the environment properly but my automation script manged to figure it out for me.

I probably wrote more about the data cleaning process than I needed to. But it did make up the majority of the coding which it generally does in machine learning models.

Anyway, I should be able to finish Part D tomorrow. Then I'll be doing B and finally A.

I shouldn't be trying to finish by the weekend but I'm ready to be done.

Wednesday, September 4, 2019

Capstone Adventures: Part 18

I didn't quite take the entire weekend off but it was good enough.

I'm completing Task 2 out of order. I just completed Section C which is a description of the product features. I'll probably attempt section D tomorrow which is documentation.

I ended up tweaking the product with a few navigation features to make it easier to get to everything. I also adjusted the size of the data frames to be more viewer-friendly. And I added a logging tool to check off the 'security' feature requirement.

Friday, August 30, 2019

Capstone Adventures: Part 17

And we're live again!

http://bit.ly/ccrlfost42 - click the Voila button on top to run.

If you're not on mobile and/or the Voila button doesn't work, click the "Not Trusted" button to set to "Trusted". Then with the menu click Kernel -->> Restart & Run All

I'm taking the long weekend off and will begin the paper next week.

Thursday, August 29, 2019

Capstone Adventures: Part 16

Programming is done. It launches on Heroku but will only deploy with the $250/month dynos so I think I will keep it a desktop app and switch the csv files to pulling from the parent folder and whatnot. I'll figure out how to rebuild it as something deployable at a later time. Until then, this will not end up in my portfolio.

I have a web dev course on udemy that I can work on after I pass capstone. Hopefully that will shed some light on what I'm doing wrong (other than using a Jupyter notebook). I also have the goat book which I should have worked on during my term break.

Back to desktop I suppose. I'll need some kind of logging mechanism for security purposes.


Tuesday, August 27, 2019

Capstone Adventures: Part 15

I feel like it's been a while since I had good news to share. I got the more advanced features to run on Voila with the exception of a confusion matrix heatmap that's supposed to generate on command. Oh well. I just switched the output to a text that makes the numbers appear in a grid. Though I'll play with refresh able heatmaps later today.

The markup and formatting are also done or at least mostly (I'm always tweaking). Hopefully I'll get it deployed in the next few days. Heroku is my first stop.

Also, my extension was approved so this thing is not due on Sunday. I have until the end of September but I'm hoping to turn it in within the first week of September.

Sunday, August 25, 2019

Capstone Adventures: Part 14

My app is now fully functional. It has everything it needs to be an app except it's still a jupyter notebook. Voila broke a few of the more advanced functions so I'm attempting a few other options today. I think if it's not working by the end of the day I'll remove the advanced functions, deploy it on Heroku, and call it a day ... it's getting harder to count how many ways my capstone keeps failing.

I do have some good news. My capstone extension was approved. So I have until the end of September to pass task 2. However, if I can get it done by the end of the thee-day-weekend next week, I'll take that win and go back to this in the future. I do not want to be working on this beyond the 8th.

Thursday, August 22, 2019

Capstone Adventures: Part 13

Just a short update. Qgrid refuses to work on my computer. My husband was kind enough to set up my environment on his computer but there's a slight change that part isn't going to work when it's time to launch on Heroku.

I'll worry about that later. Interactive queries done.

Up next, I need to make my data visualizations interactive. Back to looking stuff up.

Wednesday, August 21, 2019

Capstone Adventures: Part 12

PyQt5 broke again and doesn't seem to want to cooperate with Spyder so I think it's time to put the desktop GUI to bed for good.

I learned enough Flask and Django to know that I don't know enough to get something going on those. Javascript plays a role and I I don't know javascript. There are also a few other pieces I don't grasp well enough to take what I have and implement it with these tools.

Good news though. It looks like I can use Voila to integrate most of my jupyter notebook with a few modifications. I'd basically create a few widgets to make it functional use Heroku to host the notebook as a single web page.

I still have to learn a few things to get this to launch, but I should have a basic implementation of most features by the weekend.

Saturday, August 17, 2019

Capstone Adventures: Part 11

I was told that a desktop gui app is far more complicated than a web app, and also that I probably should have read the goat book and looked into Django (would have been nice to know that a month ago).

This is the kind of thing a mentor should be able to give advice about. I've been teaching mine about the course more than he's been teaching me. He has no clue what he's on about half the time and when I do ask him a question, I do so in the hopes that he asks someone for me because he has access to the graders --even though he rarely thinks to use that resource.

If you're not willing to learn about the course you are tasked to instruct, you probably shouldn't be an instructor for that course. The bar for this one is way too low for our capstone, WGU. My mentor didn't know what data cleaning was. Can looking up all the terms on the rubric be a minimum requirement for being a capstone instructor?

Anyway, back to work. I will work on this until I hear back about my extension. If I don't get it, I'll stop to read a few books, then build the app on a few different platforms so I can report on the various needs and methods for taking on the different approaches. You guys can get the diploma in my place.

Wednesday, August 14, 2019

Capstone Adventures: Part 10

Time is running low. I have the GUI drafted though not fully functional. I'm chipping away at all the pieces but I keep getting this nagging feeling that I'm making it harder than it needs to be.

The rubric was holding me back a bit. I tried to get clarification on a few things and my CI was clueless. So I had to build the various options to figure out the answer. That really tanked my motivation, especially after I figured out what I needed to know and how easy it would have been for the CI to simply read the capstones that have been submitted so far (what are we at, 20 graduates by now?).

In any case, I applied for an extension and if I don't get it or finish by the end of the term, I will withdraw. While I can afford another term, WGU is starting to not feel worth it. At this point, I would rather give that win (not to mention tuition) to a school that actually helps me get there --even if I have to pay more for that privilege.

Sunday, August 4, 2019

Capstone Adventures: Part 9

I made a lot of progress once I switched away from Computer Vision topics. I am now determining Cervical Cancer Risk based on a data set in the UCI Repository. The model will be based on it but the data used can be collected by just about any clinic, hospital, state, etc.

One of the more interesting features I implemented was customizing the risk threshold so that the user can select their acceptable levels of false negatives vs. false positives. It took a while to figure out how to convert the continuous variable back into binary in a format that allows me to compare the results to the original test data. But I finally finished that today.

I'm ready to start integrating all the features into a GUI. I didn't set up security features or queries because it didn't make sense to do that in Jupyter, but I left all the other stuff in there because it doesn't make sense to put all of that into the GUI.

So Jupyter is done. I even printed it out as a pdf to ceremoniously close that segment up. I kept it open on my desktop until today so it's literally closed as well, lol.

I'll spend the next day or two exploring GUI options before digging into that part. Hopefully all that time in Software 1 and 2 transfers over into doing similar things in Python.

I really have no idea how much time I need to finish. I guess I'll find out once it's time to start the next phase. After this, I just have the writing. There are 28 days left in my term.

Friday, July 26, 2019

Capstone Adventures: Part 8

No. Just no image projects for me. I don't have the time or computer power to figure this out.

Time to attempt a more classic problem that only uses a csv.

Monday, July 22, 2019

Capstone Adventures: Part 7

I have tensorflow! After wrangling with environment builds and variations of tensorflow and cuda, I finally find a stackoverflow post that says I can just install keras-gpu on anaconda.

Next batch of things to learn:

  1. Use Tensorflow to train my data
  2. Dump the model into a pickle file
  3. Design an application that fits all capstone requirements 
  4. Integrate the pickle in the application

I am thankful for Keras-GPU and the guy who mentioned in on StackOverflow. You're my hero!

Sunday, July 21, 2019

Capstone Adventures: Part 6

I think I've decided that I'm going for the Diabetic Retinopathy (leading cause of blindness) project. Getting this to work will involve either pushing my current system to run tensorflow-gpu or getting a new computer. I've been attempting to install it all day, going back and forth between CUDA9, CUDA10, and several variations of other parts of the installation.

After the first few failed attempts I figured that a new computer will likely not help and just realized at 11pm, that Tensorflow absolutely cannot work with Python 3.7. As you can clearly see ... I'm really not that smart ... This experience has been great for my self-esteem. To Python 3.6 and the glimmer of hope that I'm a little closer to figuring this out than I was 12 hours ago.


Friday, July 19, 2019

Capstone Adventures: Part 5

Well, the data reappeared but then I deleted everything the next day after my bill spiked up to over $500. So there goes that idea.

Right now I'm bouncing between another image-based dataset with under 5k images and an e-commerce dataset for customer segmentation or a market basket analysis. I really want to do an image one because it's not something I could have done before BSCS and the other two I could have done after MSDA.

I'm exploring a few tools right now, trying to decide which one is more feasible. If I used a service like Clarifai, it would cut down on the number of things I need to build from scratch. I have another week before I really need to buckle down and get things moving.

Tuesday, July 16, 2019

Capstone Adventures: Part 4

I got through my dataset, had everything uploaded, then started training. My mistake was not knowing how much credit that was using though I supposed that's Microsoft Azure's mistake because it didn't tell me how much it would cost. So I pick the 24 hour option because why not? And I run out of credit which I thought might be a thing but it was the last part I needed before I could start programming it.

I upgrade my account and that is when this project died. It is no longer there. All my data and training is just gone.

Time for a new project.

Sunday, July 14, 2019

Capstone Adventures: Part 3

Well, it looks like this dataset might be too big for Computer Vision. I just realized that it has a 100k upload limit which is less than half my training dataset.

EDIT:

... and my dataset is gone. Apparently I built the last project on my "student" account which just expired. I'm going to continue classifying my files since the remaining data will fill up the 100k limit easily. But I'll wait to hear from my advisor before recreating the project on the "free" account.

I also have another project lined up just in case I end up nixing this idea all together: Facial Expression Recognition. I would need to converting a .bib file into jpeg files to get it to work. But it's under 30k images so even my computer can handle this one.

RAWR!!!

On the upside, I am acquiring useful data munging and automation skills.

Saturday, July 13, 2019

Capstone Adventures: Part 2

It took a few tweaks to get the image search and sort scripts working. The process is finally streamlined and I was able to get through 3 of the 14 batches until I stopped to attempt to send some of those files to Azure.

Of course this didn't work, otherwise I wouldn't have had to add an extra post today. Apparently Azure doesn't like .tif images. After confirming that it prefers some other file format, I installed IrfanView to start batch converting them before upload.

The last hiccough of the day was having to stop that process because my computer was running out of space again. So I'm now uploading the files into Azure so I can make room to convert more files. I think I'll finish uploading the files I processed so far today, then tomorrow I can sort, convert, and upload at the same time (in theory) ... get some sort of assembly line going, lol.

Adventure!

Capstone Adventures: Part 1

This is more like Part 3 but I'll catch you up, lol.

My first choice for capstone project was Recursion Cellular Image Classification to disentangle experimental 'noise' from biological signals. This would help researchers understand how drugs interact with human cells which translates to decreasing the cost of treatments and the time it takes to bring new treatments to market. My computer couldn't handle the dataset. There were over 85GB worth of images and I shouldn't have attempted to download it, lol. It took a day to get the zipped file into my computer and partially unzipped before I ran out of room. Then it took another day to get the files off my computer.

My second choice is currently an image recognition application to identify metastatic tissue in histopathologic scans of lymph node sections. At 6 GB, my computer is currently struggling to do things with the dataset (220,006 image files). Right now it needs to parse a list and separate the 'cancer' images from the 'not cancer' images which were not-so-conveniently itemized in a csv file.

I spent the morning separating those files into 14 different folders in the hopes that my computer finds searching through under 20k files each more reasonable than the full dataset. Of course I'm using automation scripts but my computer is a dinosaur so it's still struggling to get by. But I just need to get the data separated and into Azure. After that I can get these images off my computer and handle everything else from the cloud.

The first file is still running by the time I posted this. Remember I have 14 to get though and once I do all that, I need to upload them into Azure.

I am thankful the cloud exists so I can work with datasets like this! I know I need to update my computer. It's on my list, especially because I REALLY want to attempt the Recursion Cellular Image problem once I have enough time to do it properly.

Monday, July 8, 2019

C951 Introduction to Artificial Intelligence

Both of these tasks ended up being largely an exercise in using buzz words for the paper. It's frustrating because it can easily be turned into something more to include machine learning which is required for capstone. I attempted to do that with Task 1 but it was taking too long to put a proper dataset and base case together. I'll have to attempt it again after graduation.
TASK 1: Start with the chapter in Ucertify called Focus: Chatbots between chapters 11 and 12. Find the exercises and hit the submit button to see examples on how to answer various parts of the rubric. For relevant data, I used O*NET which is what WGU uses for our career assessments. The Bureau of Labor Statistics can help find computer careers if you're not finding 5 distinct ones ... If you follow the rubric, this is a really primitive version of the assessments we get in the career center. My best advice is to play with different chat options. Decide your criteria that can be assessed with questions and answers, then build your conversation paths from there.
TASK 2: Start with the chapter in Ucertify called Focus: Robotics and Feature Engineering between chapters 25 and 26. Again, find the exercises and hit the submit button to see examples on how to answer various parts of the rubric. I started by building the environment to get used to the interface and object manipulation. The first thing I did was create an enclosed space to prevent Rob from falling off the testing area. Then I built a few obstacles and ran the simulation to see what Rob can do and how to improve it. I stuck with adding proximity sensors which involved copying the nose sensor and modifying the sensor name and attributes to suit my needs. Then I modified the main rob script (you'll see the nose sensor stuff in there and should be able to trace the code and use it to add the logic needed to make other sensors work). I ended up with three proximity/collision avoidance sensors that allowed rob to make right and left turns (the default only turns left). I also tweaked the speed and other attributes to force it to cover wider areas instead of getting caught in circular paths or not being able to back out of certain corners. This ended up more interesting than task 1 and I plan to make it more interesting in the future before showcasing it on GitHub.

My Tenure at WGU

I did have my eye on two other degrees at WGU (B.S. Math Ed and M.S. Special Ed) but all things considering, I think this will be my last at WGU. Right now I plan to spend some time taking select advanced math courses at Brandman (through Westcott). From there I will either go for the B.S. Mathematics program at Louisiana State University or the M.S. Computer Science program at Georgia Tech ... I no longer have any interest jumping through WGU hoops to get into the math ed program. Their loss.

Friday, June 28, 2019

C195 Software II

I thought I was going to need the rest of my term to finish this one but here I am! Thank you to all my rubber duckies, testers, and Java gurus who took me in and made sure I didn't chase down too many rabbit holes. 
This class is kind of a mess because it was overhauled a little earlier this year so some students are using one schema and the rest have the updated version. That made it easier to complete but a lot of the old tips and info is not relevant so it's easy to get confused when everyone else is talking about something that no longer applies. Even the intro video goes over things in the old version.
Beginners: start with the webinars! You need to set up MySQL to connect the WGU database and then with your java program. There are no handy text guides though I may work on making one after graduation (I'll update this post once I make it). Setting everything up properly was among the more painful parts of the program for me.
I generally find lectures too slow to watch at normal speed so I recorded them in OBS while catching up on some reading and then took a weekend to go through the webinars on my YouTube account (you will not find them there, they were set to private and I deleted them when I'm done). This allowed me to watch them on my iPad at whatever speed I wanted (often 2x). We're not allowed to share webinars because they are considered school property so if you do put them on YouTube for viewing purposes, set them to private because the school doesn't take kindly to non-WGU students getting a hold of their materials.
Here are a list of webinars. If you are not a WGU student, you will not be able to see them. Sorry!
This was my reading list and reference guide, many from other slack students plus a few by me. Students were just adding their own sources at the end of the list so when I got to it, I cleaned out the dead links and categorized them so I can find them easier. I say this to make sure it stays that way, lol.
Program Design
Data Access
Sample Codes for JDBC
Java Topics
And here are some notes I collected from different parts of chatter plus a few notes from me
  • Run the conversion script first (convertToNewDB_ver2.sql), then run the insertion script (dataForNewDB_ver2.sql).
  • You do not have to make a custom calendar for the ‘view calendar by month and week’ requirement;  you can use a Table View and fill it with appointment the data with the option to sort by month and week
  • Make sure that your project includes the JDBC file in the project folder so when you zip the folder to submit it the file will be in there.
  • When submitting make sure that you build specific exception controls for each control on the form. For example it is not good enough to say "Invalid Customer Information". It needs to say "Invalid Phone Number" or whatever control is wrong on the form.
  • 15-minute alert requirement: have the program check if there is an appointment in within 15 minutes of successful login and show an alert for it/them. Set the 'test' account to see the alerts for all users.
  • Everything time Related goes into the DB as UTC. There's code in the repo to help do this, learning how to grab the local time now and turning it into UTC time should be a static method that you can use at any point.
  • The assignment doesn’t explicitly require a paper but you need one to tell the graders where everything is. Copy the rubric and in each section, identify where in the script the requirement can be found and/or how you fulfilled the requirement. For example, in Section J, identify where the log file will be saved and where this part of the code can be found. For the lambda requirement, list the name of the script and line number.
  • CREATE VIEW is allowed (I used them to add customer names to my appointment tables).
Database notes:
  • Some of the primary keys in the tables aren't set to auto increment. Use ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT; to change it while you're setting up (one less thing to worry about). There is a script that supposedly does it but it didn't work for me so I did it by hand which took a few minutes.
  • Countries and Cities are static and are given in the rubric so adding those should be part of your database setup
  • I added users and customers to the database while setting up because I wanted to be able to test my functions once they were available. I probably went overboard but I wanted to be sure things worked properly.
Time Zone Applications:
Make friends with Timestamp, DateTimeFormatter, LocalDateTime, ZonedDateTime, ZoneId, and ZonedDateTime. If you want to be fancy, you can check out LocalTime, parseInt, and split to turn the 24H time into 12H; this will require some string splicing which I was fortunate to have played with in DSA2. Don't forget to test both AM and PM if you go this route, those parts can mask certain bugs that the graders will gladly find for you, lol. Take this part step-by-step, utilize println statements (coupled with a //TODO to delete them so they're easy to find and comment out when you're done). Read the time stuff in the book, it is probably the most helpful section in there.
I'm glad I took the time to go through this one. There were a lot of programming concepts I was just using without fully understanding how it worked. I still don't 'fully' understand it all but it did clear up a lot of cobwebs. If you're not ready for the project after you watch the webinars, these will be worth your time. You can always skip to the parts you know you need work on if you can actually pinpoint your weaknesses.

My Experience:
I spent a week playing with the examples in the webinars and setting up my program environment and design. I also set up the proper folders and scripts so by the time I started watching the webinars, I would throw in rubric notes or maybe a link to a resource. I set up the database before getting around to the programming since that's the one thing I do have experience with. I wrote up the queries I imagined I would need and saved them for a rainy day. Then I played with GUI components to decide how I wanted everything to look (this changed as I actually implemented them and figured out more efficient ways to do it, but putting it together got me organizing my thoughts and work flow early on).
With Software I, I was able to breeze through the beginning part and struggled at the end. I had the opposite experience with this project. I was so slow in the beginning I thought I might need the rest of my term to get through this course. But as I chipped away at each requirement, progress began to cascade. At one point I thought I was going to finish by the end of the week and I ended up submitting by that Tuesday evening.
This course is really hefty and worth all 6 CU's! The requirements read as short but there is so much involved in getting through each one. You're also coordinating the database with java and scene builder and at times it felt like a game of pick-up-sticks. For the most part, you can go through the sections by order of the rubric, at least at first. Customers took the longest, almost two weeks. Then I managed to crush through Appointments over a weekend. Reports were done in an evening. Then I spent a few days adding validations and polishing up some of the code.
I didn't want to stop when I did, but there were so many other features I wanted to implement that I figure I'd better save it for when I'm not paying $600 a month for the privilege of staying longer than I needed to. So I have a list of things I want to implement after graduation. I think I did a nifty job for a beginner programmer, almost GitHub worthy. My paper is in the slack google drive. It doesn't give anything away, just a lot of screen shots and names of my files with line numbers when applicable. It's a great example on how to format all papers at WGU (using rubric headers and filling in the blanks).
Here's another slack invite in case you've never made it to the end of any of my posts before now or want to see my paper (join then use the !googledrive command to get a link). Yes I'm there and will respond to messages, though there are a few days during the week in which I only log in long enough to answer messages and catch up on anything I've been tagged in. - https://join.slack.com/t/wguit/signup?x=x-33472218180-427664703120
I have 2 classes left (Introduction to Artificial Intelligence and Capstone).

Wednesday, June 12, 2019

Hired!

After over 14 years at home raising a family, I am officially hired (been mostly on contract or temp positions since December). It is in a great industry (entertainment), the company treats their employees well, the other employees are not insane, the bosses are human, and the benefits are awesome. 
It came with a pay increase so now that I can afford to, I will not be rushing through the end of the degree. That means instead of just learning what I need to finish Software 2, I’ll be working on the Udemy master course that’s been snoozing in my account. I’ll also make capstone something I would want to show off in GitHub.
I've been programming in cycles of: try this, if it works move on, else backtrack to when it was working and try something else. I’m hoping the course breaks me out of that mentality and give me the confidence to work through my bugs or at least figure out what piece of code caused the break.I don't know if I'll use Java for capstone but I need an actual class and I've only heard good things about Buchalka. 
I'm forcing a break because I need to break out of that constant rush mentality. No more worrying about running out of time and money; I have enough of both (now) to get me through another term if needed. 

Thursday, June 6, 2019

C950 Data Structures and Algorithms II


I did it! I passed! And I'm not officially qualified as a candidate to Georgia Tech! I have 12 weeks left in my term so the following is just my reddit post. I'll come back to add other thoughts and details when I have more time to myself.  

WARNING: This is long. It was mostly written for those who learned how to program by completing Software I/II at WGU and need a little perspective by the time they reach this point. Remember, I just stared programming a few months ago so if you have a lot of experience, don't expect to be enlightened by my post.

This project tests your ability to take a very large set of constraints and requirements (some of which make very little practical sense), implement them into a design, and code that design to work within the scope of the project. I think I'm finally feeling confident enough to start a portfolio and would if my end of term wasn't approaching so fast. If you are a beginner, I do recommend taking Software II first to get more experience with OOP and putting a multi-component program together. I took this first because it was the last one I needed to qualify for Georgia Tech and I wanted to make sure I got it in before the end of my term but plan could have easily not worked out.

There are some students who built the project way beyond what I considered the scope. There's a lot of interpretation involved, but keep in mind the business aspect and remember they are a small company that delivers 40 packages per day and only have plans to expand in the future. There are things they need now and things they will need for expansion. Are they really going to have the money to invest in extra bells and whistles to accommodate expanding additional cities and whatnot? For a lot of things, it only needs to be designed to allow for future updates (especially for planned expansion), and these are points you'll argue in your paper.

This is the heart of BSCompSci for all CompSci programs. It's a matter of setting priorities and being organized: both in completing the project in general and in executing your solution of the problem and constraints. Break down the problem into some general segments, then break that down further into sub-segments and various tasks (similar to the check list in Software I).

If you are just starting to work with Python, you're going to want to read

Below, I flesh out how I broke down my project to demonstrate how it can be done. Some of my pieces might not make sense depending on how you perceive the problem and how you decide to design your program (the design itself is pretty open-ended which is part of the challenge). I read the scenario as a data problem and reduced it to data that can be stored, retrieved, sorted, calculated, and printed.

That said, if you follow what I did too closely you're going to have a bad time because some of my decisions came about because of how I interpreted the problem, how I coded my project, and the odd twists that lead me to the next part. Remember, I'm still a beginner programmer so there is likely a better way to get it done. I just wanted to write this out for those of you who can't figure out where to start ... break it down and simplify. Remember, your project is going to be built differently so if you use too much of this as a guide, you're going to get stuck as it may not align with your own thought process, flow, or coding techniques. That being said .... here is my breakdown:

Data Structure Stuff:
  1. Build hash table. Zybooks was really good for this part. Pick the one you like, keep in mind you'll need to justify your choice in the paper.
  2. Get csv data into the hash table
  3. Format distance data to suit the data structure you want. You have a few options. A lot of students build some kind of graph. https://www.youtube.com/watch?v=th00zpkPM9Q&list=PLC617CBC8385356FF
  4. Build data structure for packages and distances (the rubric tends to refer to both as package data so it's probably safe to write about both when asked though it probably wouldn't hurt if you picked one and talked about that)
Note: while Python implements dictionaries as hash tables, our assignment is to build a hash table from scratch for the package stuff. I used DictReader for the route stuff.

UI parts:
  1. Look up package data
  2. Insert new package/data
  3. Print all package data at a given time
  4. Print route with mileage data

Algorithm:
There was no breaking anything down for this one except picking one and implementing it. This was one of the times I just had to pull samples apart and put them back together until I could get one running. I found nearest neighbor easiest to understand and model. Dijkstra is really popular because there is an example in the book that makes it easier to implement and I know one person who implemented brute force.

I manually separated the packages into 3 sets (with the help of excel because I'm an excel junkie ... I switched back and forth between sorting by address, delivery constraints, and truck sort to decide what package was going on what route). After I had 3 lists of packages, I ran it through nearest neighbor. Most students opt to program this part into the core algorithm.

... I'm not sure how common it is, but the path determined by my presort and algorithm ended up meeting all requirements (about one of the only things that worked out unexpectedly well!). I saved the things I originally planned to do in terms of optimization for my 'what I'd do if I did it over again' part of the paper. I reasoned that since the company was using csv files, management (or whomever they use to add the data into Excel) can do the initial sort in Excel. I plan to go back to this project after graduation to create a sorting program to replicate what I did in Excel.

Because I worked out the performance of each route did in Excel (delivered time, etc.), I was able to take that experience and translate it into python. The final bits were creating truck objects, having them load the packages and run the algorithm for deliveries. I used those actions to determine the status of packages, start, and end times. This was my outline for figuring out those parts:

Other algorithm tips (not from me):
This info came from a student in chatter who ended up with 76.1 miles. If your presort doesn't match muster or if you think it's too much of a hassle to sort by hand/excel, this was HIS general method: "First part removes all non-deliverable packages. Second part loads all urgent packages. Third part randomly loads packages in several dozen sets. Fourth part recursively checks each set from the third part for lowest mileage, route path, and route weights. Fifth part takes the best data from the fourth part and uses that to cook the route/weights into the truck class. Finally, truck leaves the hub and begins deliveries. Optimization for each part includes loading addresses that share the same address as packages loaded onto truck, unloading non-urgent packages in truck if it exceeds capacity, and throwing out routes if any packages do not get delivered on time."

States, Actions, Limitations:
  1. Truck Limit - 16 packages per load
  2. Package status is either AT_HUB, IN_TRANSIT, or DELIVERED
  3. Truck
  4. Time:
  • Note: I'm pretty sure if truck 2 has 16 packages and leaves after 9: 05 AM, it will not return until after 10:20
  • Every package with a deadline needs to be delivered on time! It helps to have a list for the paper.

For the time component, I kept mapping out what the program was supposed to do and what I needed to get the things that would indicate those things. I started with travel distance and converted that to time. In Excel, I found the difference between the start and end time of each route. From there I was able to figure out how to iterate the time and mileage values for each individual package and during the route (need a cumulative sum to find a package's place in the route). This seems to be a simpler implementation than others who have passed the class (the program acted more like an observer in which events 'happen' linearly as in the 'other algorithm tips' above). I'll chalk off my interpretation to my beginner status. The jury is still out on whether my method is scalable for calculating delivery times and setting the status.

Again, try not to tackle more than one issue or component at a time. If you're getting overwhelmed, you're probably trying to do too much at one time. Take a step back and figure out what you need first, then limit yourself to working with that. Break it down until the only parts left are simple.

The Writing Part:
The writing component is incredibly ambiguous; you need to combine the instructions with the rubric guidelines to make sense of it. I pasted the instructions into a document and used the various sections as topic headers. Then under each header, I pasted the rubric stuff (in italics). I highlighted them a really ugly color so when I was working on it, I could easily tell if I were done with the section or not (removed highlighting when done).

Some of the sections are basically asking for the same thing; it's ok to copy something from one section and paste it into another. For example, there are two places that ask you to verify that each package was delivered on time. Yes, they want it again; no, you don't have to reword all the iterations of the same question. Some sections ask for things that aren't included in the scope of the project; for those I said: the current software requirements don't include ___. For example, there was one section that mentioned hosting of the environment. For brownies, I followed up with: implementation of that feature would require ___. It was helpful asking about sections on Slack and discussing how everyone else interpreted the question and how they answered it. There were variations and all were accepted.

Anyway, I was nervous about the complexity analysis because I wasn't sure how well I understood it (I would not be surprised if I got some of it wrong). I took my best guess for each function in each script (in a note), then created tables for each script in my paper where I listed the line #, space complexity, and time complexity. At the bottom of the table I added each line, then put it in Big O notation. Here's a short example:

buildhash.py
Line #
Space Complexity
Time Complexity
11
O(N)
O(N)
20
O(1)
O(1)
38
O(N)
O(N)
52
O(1)
O(1)
Total:
2N + 2 = O(N)
2N + 2 = O(N)

Once I did that for each script, I replaced line # with Script Name and listed the results. Then I added to get the total N's and converted it back to Big O notation ... I didn't go into that much detail for the core algorithm overview. For that one I just put the overall Time and Space complexity in a section of my overview which is in the sample the mentors give us. I think they would notice if you had a sort function and the complexity didn't include a log function and things of that sort so I wouldn't attempt to put in random values. Do your best.

Anyway, I'm down to 3 courses: Software II, Introduction to Artificial Intelligence, and Capstone. Woot!

Wednesday, May 29, 2019

Algorithms and YouTube

No cohorts for c950 Data Structures and Algorithms II! That cost me $70 to get in some practical python 3 practice. On the advice of another student, I purchased a course (Jumpstart Python by Talk Python) that walked me through 10 programs. Most of it was solid but I ran into a few issues where he didn’t mention a line so my code didn’t work until I compared what I had with the GitHub and found the bit left off. One of the programs was outdated because the website he was scraping had an update. So he reconciled that by adding a note to use other code instead which made me not want to recommend the course to others ... for $70 a pop, you can redo 5 minutes of video!

It seems to be part of that issue I’ve been having where people explain things as if I already knew what they knew ... from books to lectures to people on slack. He assumed everyone watching could see new code and translate it into whatever he was talking about. I couldn’t ... This weird tendency to assume I know the answer to the question I just asked is sooooo rampant in BSCS that I started to avoid asking questions. Every once in a while I’ll mention that the explanation would be helpful to someone who knew more than me but it’s often followed by more unhelpful advice. More often than not, I regret having bothered.

I decided that one of the things I’m going to do is make some YouTube lectures for this (and other courses eventually). This one is pretty important because we otherwise have no help unless we manage to magically mesh something together, submit it, and get it returned for revisions. That’s the ONLY time a mentor is allowed to look at your code which is a horrible way to learn DSA2, the most important course in ANY CompSci program. This will have the added bonus of helping me convince WGU that I want that teaching degree; I figure I can include a link to my channel as part of my application.

Anyway, I started being more active in the Braille community. I’m hoping to take on some projects once I graduate BSCS. The Library of Congress still hasn’t released their Nemeth certification course for UEB yet so I’m part of a growing number of rogue transcribers. But, I need to keep those skills fresh!

I’m thankful for chocolate covered strawberries. Long story, lol.




Thursday, May 16, 2019

C188 Software Engineering

This class was a lesson in procrastination. I came up with the 5 requirements and picked a CRM. Then the project sat for a week (I had meetings after work that week). By the time I got back to it I finished in two days.

I went about this one backward. I picked a CRM first, then I found the requirements that it met. Around that time I built a scenario around why those requirements would be needed. I wrote up unit tests next. Then I worked on the introduction, scope, etc. Of course the last thing I did were the visuals ... I need to take a serious course in data visualization sometime.

One thing I wanted to note about performance assessments in general. There is some leeway when it comes to working with the scenario given. As long as what you're writing doesn't explicitly contradict the scenario, you can make assumptions to help argue a point. For instance, you can say that documentation is important to a company or that documentation is not important to a company and both assumptions would be accepted (just don't claim both in the same paper, lol).

I keep going back and forth between wanting to finish the degree or just withdrawing at the end of my term. I'll keep considering my options. I can't figure out if I'm more likely to get accepted into the math program if I finish it or if I withdraw from the program, lol. I wish they'd tell me what they want. I just want to study math.

I also want to help figure out a way to teach advanced math to visually impaired students. My current path is B.S. Computer Science to B.S. Math Ed to M.S. Computer Science to M.S. Special Ed.