aaronbloomfield / pdr Goto Github PK
View Code? Open in Web Editor NEWA repo for a Program and Data Representation university-level course
License: Other
A repo for a Program and Data Representation university-level course
License: Other
This is in 11-heaps-huffman. The two diagrams (on slide 4-4) should be swapped (this makes it easier to explain, as tree that is filling in on the left sub-tree of the root would then be on the left side of the slide), and the next slide should indicate which of the previous two slides cases is which. This can't be done now because it would then conflict with the lecture recording.
this is for the slides as well as the lab; the diagrams used in the past (and the scanned weiss pages) can't be included in this repo
Indicate that they need to put in leading zeros, but put that in AFTER this semester's lab is done
to start on lab 1, they need to clone the git repo. but to see how to clone the git repo, they need to read the lab. so it's a bit of a cycle
this immediate problem can be solved by providing a link to lab 1 or tutorial 1 on github
but an overall introduction to git, and the git clone
and git pull
commands would help
gcc/g++ needs to be changed over for the second x86 lab and the C tutorial, apparently
a abbreviated one, and include (or link to) http://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf
From an anonymous feedback:
the test client doesn't support testing the
last()
method in List (to get a ListItr); that could be useful to have. A way of directly calling makeEmpty() from the test client would be nice as well.
The original link died (although the links to the tutorial are not consistent, and at least one of them point sto a new 64-bit tutorial). Either find the old version (internet archive?), ask to incldue it in the repo, or create one.
This is tutorial 03-04; the version online at http://www.ee.surrey.ac.uk/Teaching/Unix/ does not match the version in the repo (and the one in the repo has broken links)
The wikipedia link (either in the in-lab or post-lab) has 30 or so optimizations, but only a half dozen or so are relevant. Either point out the relevant ones when providing the link, or enter those directly into the lab document.
Many of the optimizations for pre-lab 9 (Collatz conjecture) are not really applicable (loop unrolling (they are doing recursion), dead code elimination (they should not have dead code)). Other, more applicable ones, should be inserted.
priority_queue should be named binary_heap, or similar
Some updates to the virtual box image and the page in the repo (the tutorial 1 page that describes how it was set up)
Huffman diagrams for the pre-lab and in-lab
it's only in some right now...
~/04-arrays-bigoh.html#/4/9
For Big Oh notation (f(n) = O(g(n)) I believe that to check, use f(n) <= c *g(N). However on the final piece of the slide, when comparing n^2 = O(n), shouldn't the explanation say "No matter what values for c and n0 we pick, n^2 > c * n" (rather than c * n^2 > n) because n^2 is f(n) not g(n)?
Also there is a closing parenthesis missing for O(g(n).
The Wikibook on bash doesn't much discuss the read command or the expr command, both important to lab6.
Possible solutions: change Wikibook or write a new tutorial.
Style guides are important to good software engineering at scale. They help programmers to produce shareable and less-buggy code, and they encourage programmers to think about language design and capabilities.
As far as I recall, style guides aren't covered in the UVA curriculum. They are a more software-engineering-oriented topic than many things in this course; however, I think they would fit in well in explaining some of the patterns (INCLUDE guards, file breakup, references v. const references v. pointers). Also (in my limited experience) there's more variety in C/C++ style guides than in Java, so covering them in 2150 could help.
Some examples:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.html
(I like the "don't use non-const references" rule.)
http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
"RTF (rich text format) is a file type that can be loaded up into your favorite word processing program. One you have run doxygen, the comments are formatted into a file called doc/rtf/refman.rtf -- try loading up that file. Note that a number of the fields in the file (such as "Title" and "Author") are not yet filled in -- this is addressed below."
The second sentence I assume should say 'Once' rather than 'One'.
TL;DR IBCM bits are numbered 0 to 15 from left to right; should be 15 down to 0.
The IBCM documentation uses a bit numbering convention where bits are numbered left-to-right. In all of the embedded documentation I've seen, however, a right-to-left convention is used.
According to the IBCM doucmentation,
0x1080 = 0b 0001 0000 1000 0000
would have bits 3 and 8 set and all others clear; bit 0 is the most-significant bit, and bit 15 is the least-significant. In the convention that ARM and Intel use in their documentation, bit 0 is the least significant, and bit 15 the most significant; the same convention is used in our school's CpE sequence.
This choice is not simply arbitrary; it has implications for the numeric interpretation. In a right-to-left numbering, bit 0 represents 2^0, bit 1 represents 2^1, etc. There's no such correspondence with a left-to-right numbering.
Proposal: revise the IBCM slide set, chapter, etc. so that students are used to seeing bits run from (N-1) down to 0. This is in keeping with conventions of professional documentation and the numeric meaning.
"// This method will compute the full distance of the cycle that starts
// at the 'start' parmater, goes to each of the cities in the dests
// vector IN ORDER, and ends back at the 'start' parameter."
The first use 'parmater' should be 'parameter'.
Sample commands include nonexistent --Wall flag; should be -Wall:
clang++ -O2 --Wall wordPuzzle.cpp timer.cpp hashTable.cpp
mention that they have to do an instruction creation; they can't have 10 successive load commands that were pre-computed. or perhaps have them accept the array base and size as input
The post-lab asks for big-Oh and big-Omega (and big-Theta), but should just ask for big-Theta
The shared folders description in "Tutorial 1: Introduction to UNIX: VirtualBox use" need updating. From a student (submitted via a support request ticket #1391 on Jan 22, 2014):
Submitted by ...
Course: CS 2150
Assignment:
Date submitted: 2014-01-22 08:45:26
Status: resolved
Date resolved: 2014-01-22 23:58:34
Owner: noneOriginal comments:
Professor Bloomfield,
As you said, there are 3 options to shuffle files between the host and the guest. Instead of trying to use an email client or Dropbox, I decided to go the shared folders route.
This was a bad idea. I first attempted it through the terminal commands, like you had provided. Unfortunately, this just didn't work out for me, so I decided to use the AutoMounter in Virtualbox.
Initially, I tried changing the default mounting location, but then I decided that didn't matter. If I was using the Automounter to avoid the terminal, why would I want to use more terminal to modify the Automounter? Also, it ended up being difficult and tedious.
So now we've decided to use the Automounter generically. This mounts the files into /media/ and appends a suffix of ''sf_'' to your folder name. Unfortunately, I was not able to access the shared folder due to permissions.
To get the permissions, I needed to run
sudo adduser student vboxsf
passwordThen logout, login.
I only mention this so that future students can use it, if you place it into the Tutorial 1: Introduction to UNIX: VirtualBox Use file.
Thanks,
....
Lots of people are trying to declare an int within a for loop, which is not compiling on the server; this should be mentioned in both tutorials
it's a bit out of date, and some are finding it confusing; from an anonymous feedback send on 1-16-15:
The introduction to UNIX tutorial seems to feel a bit out of date and seems to have some confusingly written parts (i.e. when explaining how to launch Emacs, "...the easy way is to load up a command shell (which you will need anyway), and enter 'emacs &' (note the 'x' at the beginning, and the ampersand ('&') at the end)." I was confused about the statement about the 'x' that wasn't there (simply 'emacs &', with no 'x' ended up being the correct command statement). Also, my Emacs already had colored font and line-number-mode enabled and didn't require M-x prompts. Also, at the end of the tutorial the link to the Emacs reference sheet doesn't load, and the file is not under the misc folder in Resources as described. These are just a few that stood out to me when I was going through the tutorial. Though in spite of this, I was still able to get through the tutorial without much trouble so I suppose it's somewhat trivial. Thanks in advance.
the weiss pages (and images) used in the past can't be included in this repo
Lab 5 Procedure Post-lab 1 says "You will be a brief lap report". I'm assuming 'be' is meant to be 'write'.
some of them (such as on graphs) need more online sources
Erebor is listed twice in the string array.
Typo in Lab 5: Trees, Procedure In-Lab Step 2: binarytree.cpp should be binarysearchtree.cpp
Include a slide or two in the x86 set showing how little-Endian is useful (i.e., that the address for a 1, 2, or 4 byte value can be the same)
include the x/x commands to examine data
update the x86 for the clang++ calling convention differences (maybe figure out how to make clang++ generate assembly like g++ does), or maybe resort back to g++
LLDB is better designed to work with the LLVM-based clang/clang++, and is (arguably) a more modern and complete debugger. Given that we've moved from gcc to clang, it seems sensible to also move from gdb to lldb. We can use this: http://lldb.llvm.org/lldb-gdb.html to help translate the tutorials. This move will also help students using OSX, as lldb (rather than gdb) is now the Apple standard.
in 02-lists.html, there are linked list diagrams for a stack, and there should be one for a queue; note that there is also a doubly linked list diagram in 01-cpp.html
an animation of how memory (registers and the stack) changes as the cpu progresses through a calling convention example would help them understand it better
The brl instruction should put PC+1 into the accumulator, but that is not consistent. This needs to be checked in the slides, the book, the online emulator, the C++ emulator, and the multiply.ibcm file.
Use the W3C link checker: http://validator.w3.org/checklink
The old tutorial (and solution) no longer compiles, and the Wikibooks tutorial also no longer works (it will not compile the Point.m class).
The problem seems to be that Objective C is so intertwined with the framework that the non-framework version is so old (mid 90's) that it just doesn't want to compile any more. So the solution is to install the framework and convert everything over to that.
In order to make it compile:
gnustep-devel
(and possibly gobjc
) package(s) need to be installedObject
changes to NSObject
in the source file#import <Foundation/Foundation.h>
changes to #import <objc/Object.h>
free
to dealloc
clang -I /usr/include/GNUstep linkedlist.m -lobjc -lgnustep-base
, which can be made easier if a Makefile is provided with the tutorial.However, this means that the wikibooks tutorial doesn't really apply, and a bunch of disclaimers will have to be included, as well as directions for how to properly format their code (the new #import
, dealloc
instead of free
, etc.). The options are:
Targeting this for spring 2015. Note that the submission system will have to have the compilation command re-enabled. And the lab10.md and labs/index.md page will need to be modified to re-enable that part of the tutorial.
From ticket # 1572:
I'm working on finishing up the prelab for lab8 right now and I was stuck for a while with an error ''Comma expected after operand 1'' when I was attempting to declare my array in the section .data fragment. I couldn't figure out why it wanted a comma when the slides syntax did not have it. Turns out nasm doesn't use DUP() for creating arrays. So a line of code like ''arr dd 2 dup(0)'' should use the ''times'' command ''arr times 2 dd 0.'' It didn't take that long to find the answer online but if other students are using the slides for help on the lab they may find this confusing as well.
See Everett's comments from #30. Requiring them to do a part on dynamic dispatch (it's currently in a list of 4, and they have to do 2) might be a good idea to help drive the point home. Targetting this for spring 2015.
There was much confusion (in the spring of 2014) about how cin handles input, and how it tokenizes input; this should be better explained. Either use the while (cin.good()) or breaking on Control-D, but not both. Likely, cin.good() is easier to explain and easier for them to use.
doxygen -g
)There should be more esoteric languages!
gdb is for g++, and there is a debugger designed for clang++
"// The Mouth of Sauroun! (prints out info on the created 'world')"
Gorthaur the Cruel would most definitely be displeased with the misspelling of his title on Line 17 of the middleearth.cpp file.
they work fine, but only if certain other methods work (such as makeEmpty()) -- so explain how to solve issues when they don't work, and what methods are required to work perfectly for the provided methods to work
Running the command given in the tutorial to install Dropbox gives unmet python dependencies.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.