Thursday, December 15, 2016

Back to teaching but part time mind you

So I'm just back to teaching part time at USTP which is formerly MUST. I've been asked to teach Object Oriented Programming. And this is what I've noticed.

Starting with the OOP syllabus, I noticed:
  • It's outdated as fuck. For example, it still mentions "Java applets". Yes, that's 1998 for you.
  • The syllabus reads like it's a Java 101 class instead of purely OOP class. 
Aside from the syllabus, the lab setup is wrong.
  • "Standalone Lab" which translates to "Computer Lab WITH NO Internet". Yes, we're back to 1998 again. All Java programming to date requires Internet access. Heck, ALL programming activity requires Internet access.
  • This assumption of using IDEs (Netbeans, in this case) at the start. I disagree with this. IDEs hide or automates the actual process of programming. Not understanding the actual process doesn't make for good devs or programmers.
This complaints are besides the point, what I really found was a wide, gaping disconnect on how OOP is seen in the industry and in academia. This could also be true for other IT related subjects.

We need to find a way to close the gap because if not we are condeming a generation of students, workers to "Hello sir, may I take your order?"

And that is just fucked up.

Thursday, October 27, 2016

SimpleDictDiffer.py when deepdiff is too much

Working with Python for the past 3 months coming from Java has been interesting (grossly understated).

Anyhow, I found myself needing a way to find the stuff (not just difference) between two dictionaries and a quick google led me to deepdiff by Sep Dehpour. It was good but found it a tad overkill for what I was doing. So another round of google and stackoverflow allowed me to cobble together this:

class SimpleDictDiffer(object):
    """
    Calculate the difference between two dictionaries as:
    (1) items added
    (2) items removed
    (3) keys same in both but changed values
    (4) keys same in both and unchanged values
    """

    def __init__(self, first_dict, second_dict):
        self.current_dict, self.past_dict = first_dict, second_dict
        self.set_current, self.set_past = set(first_dict.keys()), set(second_dict.keys())
        self.intersect = self.set_current.intersection(self.set_past)

    def added(self):
        return self.set_current - self.intersect

    def removed(self):
        return self.set_past - self.intersect

    def changed(self):
        return set(o for o in self.intersect if self.past_dict[o] != self.current_dict[o])

    def unchanged(self):
        return set(o for o in self.intersect if self.past_dict[o] == self.current_dict[o])

A github gist for this is also available.



Thursday, September 22, 2016

Flask on Windows and the case of the Pip install failing

At work I have a Mac and back home I have a Linux (Fedora) and Windows 10 machines. I started a Flask project on the Mac and then put it in a Github repo which I then cloned on my Windows 10 machine. And this is where I encountered the problem of pip failing to install the modules. I tried two variations to the call:
  1. > pip install -r requirements.txt
  2. > python -m pip install -r requirements.txt
This is with Python 3 and both will spit out a "Permission Denied" error relating to your appdata/Temp folder. The contents of my requirements.txt is pretty tame.

Here's a partial.

Flask==0.11.1
Flask-RESTful==0.3.5
Flask-Webpack==0.1.0
get==0.0.0
itsdangerous==0.24

It fails right on the get module. It say something like it can access the temp folder on your Windows machine which put me on a wild goose chase because the error isn't fucking related to permissions. I figured out the fix after watching the temp folder while pip attempted to install the modules.

Apparently, the Windows pip version does something really weird with the setup.py and/or egginfo where it attempts a build on a empty setup folder for the get module causing the error. The fix is to just change the version. In this case for get==0.0.0 to get==0.0.20.

The pip install command should go off with no problems now.