On August 7th/8th, there will be a Django Girls workshop in Seattle, and I encourage others to join! It’s intended for those with very little/no programming experience to get their feet wet making a blog with Django and Python. Check out Django Girls Seattlefor more information! I will be coaching, and I believe they still need more coaches as well.
And finally, for those who are worried about my physical well-being…
Physical therapy is still going for my lovely shoulder, which is always fun, but it’s getting stronger. I still have my shoulder blade winging all the time, unfortunately, but that’s slowly getting better which is good. 2 months from now and it will have been a year since I was injured and a bit longer since I decided to make the career change. It’s always interesting thinking about the events that set you on your current path.
Also I started an internship! I’ll go more into that later, but it’s very exciting!
Background Knowledge: Where I was with MOOCs Before This Coursera Course
Prior to recently, any Coursera course I was interested in wasn’t available while I was available for it. That has all changed. As anyone who has read my blog before knows…
…I haven’t had a great deal of love for MOOCs and other online learning modules such as Treehouse, Udacity, Udemy, Codecademy, and the likes, because I continuously felt like everything was dumbed down to make it accessible to everyone including people who may not be able to continue grasping the content once they got tougher or had to apply it to any independent project because of all the hand-holding. That is, they intentionally avoided causing situations where people would think, failed to teach them any actual skills and instead set people up to be great typists, or were structured so bizarrely that the independent work paired with the content was inappropriate either due to providing no challenge and just regurgitating what was just learned or due to not working on content recently learned to help solidify student independence.
So between slow pacing, bad pedagogy, and redundancy, I inevitably said books were the way to go and abandoned everything else.
I’m not taking that back, by the way, I still think books are amazing and so much more efficient than certain MOOCs. I even continued to find them better than the MIT opencourseware, but that might have been due to a number of MIT’s classes I was interested in required fancy hardware I didn’t have access to, so I had to walk away with my head hung in shame.
The Course: Fundamentals of Computing
I had asked a friend about her recommendations for basic CS books to read up on. While she has an undergrad degree from University of Waterloo, she’s generally very supportive of my independent-study approach to my career change. That said, she did think that basic CS such as algorithms, data structures, etc was best handled through a class of some sort and recommended the Fundamentals of Computing path from Rice University on Coursera.
Dictionaries, tuples, etc were new, but not so novel I couldn’t read briefly about them and apply them, so so far this hasn’t been an issue. If you have a fairly solid background in another language, I encourage you to do the same.
I hadn’t very high hopes after my previous encounter with MOOCs, and after the first week being incredibly easy and simple (much like the first week of class in undergrad where you get a syllabus and rules handed to you), I still believed this might be the case. Then came week two.
I had used the Coursera forums to set up a study group with a couple people in my area, and while working on the project spent some quality time in a Starbucks with my classmates. I legitimately felt like I was back in college again. I was thinking about problems that were challenging to me, collaborating with my classmates, and as is my favorite part of programming, celebrating resolving puzzles and testing to make sure it still functions in fringe cases and bug free.
The setup was very typical of MOOCs, but also included some elements often neglected. All three of the classes have the same basic requirements.
Weekly video lectures, around an hour in total.
Homework (some basic coding questions, math questions, etc)
Mini-projects (make a program! This week, we made 2048)
The weekly video lectures are well done. In most MOOCs like Treehouse, these are usually high quality though sometimes redundant. From MIT’s Open Courseware, they were slow and involved a lot of the professor stumbling in the middle of a lecture hall and not the best sound quality or video quality. Here, there is minimal wasted time (and any waste is usually entertaining, nerdy jokes), easy to view in double time, and the lectures are concise but give you the necessary information interlaced with Udacity style mini-quizzes. The professors know what they want to tell you, and they tell you it concisely.
Homework is beneficial but not excessive. It reviews concepts or has you review math that you likely haven’t done in over a decade if you’re the same age as most MOOC users, and helps you get in the right mindset for the mini-projects.
Mini-projects can be simplistic depending on whether or not you’re trying to program without eating lunch (whoops!), but they’re challenging enough that you feel as though you’d applying your learned skills in a unique problem that you need to solve. I currently feel like there’s a bit too much hand-holding, but part of machine grading is that you need certain structural elements present in order to assess whether or not it meets the requirements, so to some extent this is unavoidable in some of the classes, especially when trying to accommodate so many mooching students.
MOOCs have an important place in the accessibility of education, in my opinion, but a lot of them have a long way to go to being actually beneficial. Fundamentals of Computing from Rice University is an example of the practice done very well without dumbing everything down.
I have to say I currently love it. I’m not sure if it’s because the forums are so active with students collaborating or study groups make me happy, but I’m pretty certain it’s because I’m learning a lot and enjoying it.
On top of that, it wasn’t responsive, so when I’d pull it up on my cell phone thinking about adding AI to add some actual element of interest and challenge to it, I’d remember I couldn’t actually dink around with the 1024px background image at all in a reasonable manner on my cell. The reasonable, time-sensitive solution would be to grab my laptop, but instead I decided to ignore time-sensitive solutions and instead update my website that no one but I use at this point.
White and grey is apparently the color scheme I was rolling with, and there’s clearly no reason to change that. Ever. Grey and white has, as described above, has the artistic influence of staring at a lightbulb. Clearly I should have it infect every portion of my website.
Consequently, I spent some quality time with photoshop to turn the green/black scheme to white/grey. It’s simple, elegant, not green.
Next, I used the width() and height() methods to query the image, setting the page to make this query whenever a resize occurs. I then set the resulting size of the table and individual cells to be dependent on this height and width based on the proportion of the board it occupies.
One mistake I had made during this process was at one point I set the “height” CSS attribute for the image to 100% as well (rather than just “width”), which resulted in image warping and strange overlays at small sizes. Most modern smart phones won’t get to that size, but I figured it’d be best to just avoid that all together. Learning is fun!
Here’s a jsfiddle to see how it works and the actual code. Feel free to resize the “results” section to see the army of ships move about. All your guesses will be correct, sure, but it’ll take you 49 turns to defeat me! Bwahahaha. Ha. …Ha.
The Results: It’s Prettier, Hooray!
It’s not hideous! It’s responsive! A resounding success!
Oh yeah, now I can dink around with it on my cell phone while contemplating adding features to actually make it interesting and perhaps even enjoyable to play. Maybe even clicking guesses instead of typing them! Perhaps a slightly stupid AI to compete with! The possibilities.
More importantly, though, I’ve made it so my site overall flows together a lot better. The Great Dalmuti has even been contained to the confines of the wrapper div, which is always a nice perk since it looks less ridiculous on larger screens where you have 12 tiny cards sprawled across the monitor in one and a half rows. Don’t get me wrong, lots of UI improvements need to happen on both ends, but it does mesh in with the rest of the site better, and who doesn’t want that?! Hooray. Meshing!
Other Notes & Personal Progress
Then, naturally, I’m not paying for the certificate either since given the current attitude towards non-traditional education from businesses, I don’t think it actually has any value in a 1st world country. Not to mention I’m just there to leech knowledge. I won’t go into a long rant about the problems in traditional education with my former teacher hat on, but suffice it to say I think non-traditional education is a good use of resources and a good source of independent growth if you’re remotely disciplined.
I’m currently organizing a Seattle area (Eastside) study group if anyone would like to join us.
Shoulder still recovering. Still have zero sense of body awareness. One day, I will be body aware, just you wait!
When I am able to coerce my friends to play this game, we all wear different hats to indicate our position in society, because unlike public schools you are allowed to wear hats in my home, and at times it is required like a construction site. Only, instead of building apartment complexes, we’re building camaraderie? Clearly, my preference is to give the dudes in our group the pinkest, prettiest hats I can knowing that society typically doesn’t approve of them embracing their love of lightish red and wanting to give them an opportunity where they can excuse their pink-embrace as the whims of a game addict while their hearts palpitate in an elation they had never previously knew possible from headwear.
Consequently, when I threw together cards based on a stick person I was able to create using arial font, they all had different hats to help simulate this very important part of the Dalmuti experience. My only regret is that the 12 and 11 needed far more different hats than I provided due to a lack of inspiration in the last 5 minutes of my 30 minute hat making adventure. Which is why those will not be cards I show you intentionally. Instead, have an apple merchant:
She has large feathers in her luxurious purple cap and has done well in an apple-deprived market. Apple pies, apple crisps, and apple cider are the mainstays in the realm, and she is rolling in apple dough so much her feathers are bigger than her arms. Life is good for the apple merchant.
Totally did not make her an apple merchant because apples are easily distinguishable at small sizes. It was definitely a lore thing. Definitely. Same with this carrot guy. Lore.
A man with small feathers to signify his small wealth in comparison to the other merchants, especially that darn apple merchant. There was a time in his life where he spent day in and day out trying to convince the members of the realm that orange is the new red, but after being threatened with incarceration by the Great Dalmuti himself, he resigned to his fewer boxes of unwanted carrots and accepted his lot in life. After all, he could be a peon.
Look at that well-developed story line. It makes you want to play a card game with robots because your friends won’t play with you, doesn’t it?
On a more technical note, this was fun to practice for some of the different things I’ve learned and a nice break from my behavior tracker app I’m working on. I added some changes from my original based on suggestions from friends and spouse (ex. delayed listing of what the script in the browser has played rather than it showing as it loads which is instantaneously from a person’s perspective). There are still some aspects of the game I need to implement (wild cards, revolution, greater revolution, taxes after the 1st play through), I want to make a much better UI, and I need to refractor my code a bit more since in some places I’m pretty sure it’s a bit awkwardly put together. I’m also likely going to put together a multiplayer version using me some node and socketIO, but that’s for later because if I could get friends to play with me in the first place I wouldn’t have needed to make a computer version.
Hello neglected blog! I’ve missed you and your beautiful blue-ish pages. I’m sorry it’s been so long since I’ve interacted with you (and my faithful 15). I am drowning in the sea of AngularJS as I dig around the MEAN stack.
And I do mean sea. As anyone who has attempted to read AngularJS’s docs can tell you, the experience is special in the way you describe a friend you personally love but are very aware that anyone who hasn’t spent the time getting to know them will need to invest a large amount of time disliking them to find the love. With AngularJS docs, as you stumble upon the first page that you’re almost 100% certain any other documentation page for such a large scale project would include the information you’re looking for about the module you want to implement to make your HTML page not look like, well, this:
When you navigate to that page in the Angular docs, it starts to answer the question, letting you step into the sea a few inches, feeling the sand between your toes, certain this is the relief your mess was looking for. Then, as you inch in further, suddenly you realize the sea was not a sea but instead a decapitated kraken in a kiddy pool who wants nothing, as it is mindless and headless, and instead will grab you by the ankles and throw you about the bouncy edges of its plastic entrapment until you resign, regretting your trip to the sea, and crawl away onto the dried out, dying lawn.
Which then leaves me digging around blogs. The bad thing about bloggers (such as myself), is often we don’t update for years in a row. So while we had a solution that would have worked a few versions ago, we don’t have a great one for the moment – or even a mediocre one. So essentially it’s like looking for the sea and finding a puddle. Sometimes this puddle can offer a bit of relief, but more likely than not if you try to drink from it you’re going to get a disease (in my case, looking at other blogs in hopes for a bit more detail) that will result in hours wasted and no actual relief.
Consequently, Google frequently leads to this:
xkcd reading. Wait, no. StackOverflow. I’m pretty certain DenverCoder9 moved on, tried something else, and succeeded. (Un)fortunately, I am the embodiment of perseverance (read: stubborn), so…
Unrelated, I’ve interacted with some dev bootcamps & their former students lately out of curiosity (or more realistically wondering if they had a magical instructional model that the internet and bookstores did not), and decided against pursuing it any further, at least not for the foreseeable future. Maybe I’ll write a post about that later once I’ve finished finding some body of water of AngularJS knowledge that won’t beat me senseless in a kiddy pool, act as a massive time sink without much gain, or simply fade into nothingness.
In summary, AngularJS docs are my nemesis and why I’ve been a negligent blogger. Google overlords, you have failed me 😥 If anyone happens to know a resource to find information on modules that isn’t painfully out of date, I would LOVE a link. Love. Like I would marry that link, eagerly wake up to see it every morning by my side, and grow old with it.
You heard me, for realsies. I even got to self-create security violations, but thankfully as the app works now it doesn’t include usernames. Unless you’re capable of inferring. Then, yeah, definitely an issue.
I love you, internet, you’re a great outlet for all of my weird.
But first? Fries. Three nights in a row, my husband has eaten out for dinner due to working crazy hours recently (poor, handsome bastard). Since he knows the secret to a happy marriage is food, he brought me home left over fries. Now, I love fries. When I was a kid and I got fries from McDonald’s, I would happily eat those hot, salty, death sticks as soon as I could get my fingers on them.
I ate them before my cheeseburger. Not because I didn’t love the hot, cheesy, non-compostable burger as much as the death sticks, but because the death sticks would gradually develop a weird texture and consistency as they grew cold. This is especially true with fries that will actually decompose over time such as those that you get from a sit down restaurant. That crispy, crunchy, delicious starchy stick just turns into a cold, lumpy, limp, soft wad. It’s like coal in your stocking on Christmas. Complete disappointment unless you happen to live in a town running on coal power that is running low, and for Christmas you want to give everyone around you warmth again.
So I tried a few solutions. One: microwave. BAD idea. Ten times as soggy. Two: oven. Took way too long. Still quite soggy. Three: Toaster oven. Still soggy, but warm fast. This may have been improved if I could cook directly on the toaster rack without complete and utter fear of causing a small fire. This may have been a fear exacerbated by the quantity of “in case of fire!” signs all over my toaster oven, I admit, but also fries slide through thin cracks quite easily so it may also just be a common sense thing that I wish didn’t exist.
I tried to think of other food gifts that came home as bad as fries. Don’t get me wrong, anything that is a starch to which you add sauce isn’t great (burgers, sandwiches, etc), but a quick run in the toaster oven can fix all of those. Fries though, too thin to be toaster ovened without aluminum foil. Tis truly a shame. If anyone has a leftover fry solution, let me know, cause I have quite a bit left.
(Side note: Dear Husband, if you happen to read this, please don’t take this to mean that I do not appreciate the lumpy food gift, but rather that I am desperately seeking a way to improve my enjoyment of the lumpy food gift as google has not provided an answer that works with the cookware we currently own. This was a pretty close answer though.)
Now onto the programming portion of our lecture. A couple months ago I followed a django tutorial that told me I made a web app, and once I finished the site I had loaded congratulated me for my amazing endurance for all of the 5 minutes it took, but I knew the truth. I knew I had accomplished nothing. When I attempted to make my own web app at that point, my brain laughed at me and called me names, so I knew I had more work ahead of me.
I have an idea for a program I want to make for some of my old teacher buddies to make life a bit easier, and while I have an idea of the kinds of data I need and some of the objects, I decided it’d probably be better to start with something a little simpler. There were a good dozen plus websites going through MEAN stack tutorials creating a to-do list (the “Hello World” of web dev), and a few making chat programs. I decided to be awkward and make a chat program where you talk to yourself and no one else. Why? It felt right and had the kind of functionality I knew would be a good stepping stone into the future. It also allowed some really awkward test cycles where I posed as Batman and used the classic trilogy throat-tearing voice every time I posted a test. It made the whole experience feel way more epic.
Here’s a link to the outcome. More importantly, here’s a link to all my testing posts. It gets weird in all the right ways with Batman, Joker, and Robin being the stars of my tester accounts. This page would look a lot less awkward if I tagged the users who post, but since, again, my intent is to only see MY posts alone when I sign in, I don’t see this as an issue.
I think my next step will be to start working a bit more on the app I’d like to build for my teacher friends. I’ll need to plan out what it needs to do and how it will work a bit more first so I can get my MVC on.
Now, I know the posts about me programming are a bit dull since I’m still very much a beginner, but since I didn’t have any activities scheduled this weekend and no work stuff to take care of, I felt like I was finally able to make some significant growth in my programming powers. Admittedly, compared to anyone who is even remotely competent, I’m still a babbling baby, but still, it’s pretty cool to go back to something I made about a month ago from going along with a webmonkey post to going through and making it my own AND more easy to read, change, and follow along with. I think the combination of those two things are something I really love about coding. You can look up just about anything online (at least for the kinds of problems my beginner butt is running into), and then you can recreate bits of what you find with other knowledge you have to make them more simplistic or elegant.
CS vocabulary has been a bit new to me. There are a lot of words I know in completely different contexts that have a very different definition in CS. I’ve been trying to track new words I learn as I read about them and trying to see if I can understand them without my brain hurting while looking it up. Sometimes I’m completely able to get it, and other times I sort of brain fart and feel like a toddler again. So, for example, I read an article about a person who was working as a recruiter for a company. This company was concerned about gender/racial bias interfering with its interview process, so together with the recruiter decided to do the programming portion of the interview with the candidates completely anonymously online. Aside from written language (which one might argue could give some of this information away), he never saw or spoke with the candidates. He gave them a refactoring challenge where they were to identify code smells. When I read through the rest of the article, I was completely and utterly confused about exactly what it was he was having them do, but from what I could guess at the time he was having them look for hints of something being inefficient or problematic in the code then restructuring it. Thanks to some quality time with my overlord Google, this turned out to mostly seem accurate.
Refactoring is when you alter the internal structure of the code without changing its external behavior. When I wrote the first draft of my slideshow code I hadn’t any experience with objects or events, so when the site I followed along with pointed out different events, I just sort of rolled with it without really fully understanding what was going on beyond that when something was clicked, I told it to execute a function. I also used global variables quite liberally, because that was the only way I really knew how to get some of the work done that I needed. Even after I switched out all my functions to be methods instead, this hasn’t really changed too terribly much if I’m honest, but the beginning value of the variables is all easily accessible at the beginning of the method object.
Now, with the original script I had made a slight change to it. I had added a while loop to create the imageArray since typing them in individual was not on my future desires list. At the time I felt slightly successful being able to make that change, but ultimately I had mostly ended up with code very similar to the article as I wrote it after reading what needed to be done, and then I compared to what they had with functionality. Not a great strategy, but again, the event handlers were a bit over my head at the time.
When I went through it to refactor, I renamed some variables to names that made more sense to me. I added comments. I restructured it to have the functions sorted as methods in objects and all the variables within objects as well. None of what I did was really ground breaking, and a lot of it was work I honestly will probably change again as I continue learning in the next few weeks, but it helped me practice the skills I have learned and apply them, which is always helpful for retaining information and being able to use those skills creatively in the future.
You can go to my GitHub account to check out the code and the revision in a Gist.