Software Development: Web and Cloud Development - Year 3
Academic Year 2016/17 - Class Log.
Tues 13 Sep 2016: Welcome! Well... almost. Today's class cancelled (see my email to your group). First class is this Thursday, Sept 15th at 4:00pm in the UNUM lab. See you then.
Thurs 15 Sep 2016: Kick-off class, with Paul doing way too much talking. Everyone needs to install the latest Python 3 on their laptop. This module is 50% CA, and 50% final exam. There will be three to four CA activites between now and the end of Feb 2017. The technologies we'll use this year will include (but are not limited to): Python, Flask, Jinja2, MySQL, and MongoDB. We'll also use the PythonAnywhere cloud-hosting service.
Fri 16 Sep 2016: Started learning Python. Used the IDLE shell (which comes with Python), and created two small programs: hello.py and odds.py (both are included with today's transcript: see your college email). We learned about some of the Python built-in functions (BIFs) including: print, len, dir, help, and type. We also introduced the notion of Python's "batteries included" philosophy, looking at the datetime module (see the transcript for examples). We also played a bit with lists (which we'll return to - in detail - in a later class).
Tues 20 Sep 2016: Amended the odds.py code to wait a random amount of time for five iterations. Learned about the range BIF for generating ranges of numbers, as well as the START:STOP:STEP notation (with a minus STEP reversing the order). Finished off the class with a bit of a sing-song... well, we generated the lyrics to the Beer Song.
Wed 21 Sep 2016: After introducting the four built-in data structures, we started to explore what lists have to offer. See today's transcript for more.
Fri 23 Sep 2016: Continued our explorations with lists, playing with vowels as well as the list built-in methods. Mentioned the "collections" module, too. More lists next week.
Tues 27 Sep 2016: We all tried not to panic while we worked on the "Don't panic!" exercise.
Wed 28 Sep 2016: Making the case for dictionaries (as lists aren't a good one-size-fits-all data structure). As well as creating and populating a dictionary with data, we also sorted one by-key as well as by-value. See today's transcript for details (paying particular attention to the "person3" and "temps" dictionaries).
Fri 30 Sep 2016: Continued looking at data structures, with an emphasis on dictionaries (and frequency counts). When Paul tried to create a really-big list, he managed to crash IDLE (whoops!).
Tues 4 Oct 2016: Finished off our discussion of dictionaries with a look at using collections. Counter for frequency counts. Then we looked at tuples (pronounced "tuple") as well as sets, which both have very specific uses but are still really useful. Paul managed to crash IDLE again...
Wed 5 Oct 2016: Grad Ireland is on in Dublin, so class was cancelled.
Fri 7 Oct 2016: Had our first look at comprehensions. See today's transcript.
Tues 11 Oct 2016: Revised all that we've looked at to date by watching The Beaz...
Wed 12 Oct 2016: Created our first Python functions in preparation for using Flask to build our first webapp.
Fri 14 Oct 2016: We created our first Python webapp (thanks to Flask and six lines of code).
Tues 18 Oct 2016: Added a few extra URLs to our webapp, checked that it worked correctly (locally), then uploaded our webapp (as it is) to PythonAnywhere. Next step: world domination.
Wed 19 Oct 2016: Used Jinja2 to create templates of HTML.
Fri 21 Oct 2016: We learned how to receive data from the web browser using the request object (as provided by Flask). All of the details received from the browser was saved to a text-file. We also voted - by a sizeable majority - to wait until next Tuesday at 3:00pm for details of the first assignment.
Tues 25 Oct 2016: The description for the first assignment was discussed and distributed, together with a few hint PNGs and a link to a GIT tutorial (which you are all going to use with all of your software development projects going forward).
Wed 26 Oct 2016: Continued to work on the assignment. See emails from me for some useful hints.
Fri 28 Oct 2016: As the long weekend approaches, the numbers have fallen off a little. Work on the assignment continues.
Tues 8 Nov 2016: The deadline for the first assignment has been extended until this day week - end-of-day, Tuesday 15th November 2016
Wed 9 Nov 2016: Discussed the importance of using sessions instead of global variables for storing state in a webapp. Work continues on the assignment.
Fri 11 Nov 2016: Deadline is next Tuesday 15th - we are nearly there, folks!
Wed 16 Nov 2016: Looked at the word_utils.py and data_utils.py modules which underpin Paul's version of the word game webapp.
Fri 18 Nov 2016: Worked through the rest of Paul's word game code.
Tues 22 Nov 2016: This class started out with so much promise, then quickly descended into chaos. Paul blames evil-twin God for messing with people's Python setups behind their backs. We did manage to solve the problem of multiple submits (thanks to Lucas and Mark [forever]), and we discussed the race condition which exists in the current data_utils.py code. We think we can fix this with a database, so we need to install MySQL (or MariaDB) to see. In other news, Paul talked about two backup disasters which are burned into his memory (see earlier reference to evil-twin God). We also introduced the MVC pattern and related it to webapps: M: Model (the data), V: View (the HTML templates), and C: Controller (the logic/code our webapp users).
Wed 23 Nov 2016: With MySQL/MariaDB installed (or so Paul thought), we started by creating a database, then a 'wordgameuser' user to work with our webapp's data. This worked well for some, but not others. Friday's class is going to go much smoother.
Fri 25 Nov 2016: Success! We connected to our newly created database, created a table, inserted some data, then ran some queries. How cool is that?
Tues 29 Nov 2016: We installed mysql-connector-python as well as the DBcm module to enable our Python programs to "talk" to our MySQL/MariaDB backend databases. We then created two small programs to show DBcm in action. Unlike last Tuesday's class, everything worked today (so - hopefully - everyone is in good shape to proceed).
Wed 30 Nov 2016: Learned about Python's namedtuples, then we fixed the race condition with the leaderboard code... or did we? The code appears to work, but the webapp crashes? Why is this?
Fri 02 Dec 2016: Jerry won the prize (Whoo! Hoo!). We no longer have a race condition as the use of MySQL removes the possibility of it happening. We adjusted data_utils.py to return the data in the correct order and in the right type. All that's required now is to upload the updated webapp to PythonAnywhere.
Tues 06 Dec 2016: Results from Assignment #1 distributed. Assignment #2 is on - due this comoing Friday by 2:00pm.
Wed 07 Dec 2016: Assignment #2 is ongoing.
Fri 09 Dec 2016: Assignment #2 is concluded.
Tues 13 Dec 2016: We looked at Jupyter Notebook (which is cool).
Wed 14 Dec 2016: We built a Twitter-killer in 48 lines of code (plus a few HTML templates).
Fri 16 Dec 2016: Methinks it's Christmas.
Tues 10 January 2017: We reviewed 2016, then played the word association game. This lead onto a discussion of database design for non-tabular (unstructured) data.
Wed 11 Jan 2017: Took our first look at MongoDB, then... played with Unicorns. Read (or work through) The Little Mongo Book (pages 1-14) before Friday's class.
Fri 13 Jan 2017: We used pymongo to get most of the data from the norms JSON file into MongoDB. About 800 documents were invalid, however.
Tues 17 January 2017: Assignment #3 distributed - combining Python3, Flask, MongoDB, and JSON. Due 5:00pm, Tuesday, February 2017.
Web 18 January 2017: Assignment #3 continues...
Fri 20 Jan 2017: Trying not to get depressed today, while everyone else works on Assignment #3...
Tues 24 January 2017: Assignment #3 continues...
Web 25 January 2017: Assignment #3 continues...
Tues 31 January 2017: Assignment #3 continues...
Web 01 February 2017: Assignment #3 continues... and the deadline approaches. Due by end-of-day next Tuesday.
Fri 03 February 2017: Assignment #3 is drawing to a close. Deadline Tuesday at 5:00pm.
Tues 07 February 2017: Assignment #3 concludes. Regular class tomorrow (Wed), then the final assignment is scheduled to begin on Friday.
Web 08 February 2017: We talked about CRUD and MVC, then looked at a past paper (check your email for more of the same).
Fri 10 February 2017: Assignment #4 distributed: working with Flask-Diamond.
Tues 14 February 2017: Assignment #4 ongoing. Remember: you have to demo working systems to me during our scheduled classes.
Web 15 February 2017: At this stage, about 50% of the class have completed Assignment #4. There are nine (9) days laft. Due date: Feb 24 2017.
Fri 17 February 2017: Classes "unofficially" come to an end today, with next week dedicated to study prior to the upcoming exams. Assignment #4 is still active and is due Feb 24th. I'll be in the lab for our remaining scheduled classes next week.
Tues 21 February 2017: Reading week (as exams are next week). Final bunch of assignment submissions being reviewed today (as well as tomorrow, Wednesday, and Friday).
Web 22 February 2017: Deadline for demoing of final CA is this Friday, February 24th, at 2:00pm. No later.
Fri 24 Feb 2017: Demo deadline day: assignment 4 concludes. This class also concludes this module.
Return to the Courses page.