The final Ruby assignment likely will also be due on December 7, so budget your time accordingly.
assert
and retract
is certainly fair game. If you feel like taking on a beast, you might try monads in Haskell.
If you want to do something in Ruby, ok the topic with me first, to be sure it won't be something we'll be covering.
If you want to work with a language that's new to you, there are thousands to choose from! You'll probably want to choose a language that has an implementation available for your machine or is installed on lectura so that you can experiment with it. A language with a REPL makes experimentation easier, of course.
Slide 27 in the intro set lists a number of prominent languages. Here are some others that immediately come to mind:
Elixir Elm F# Groovy io MATLAB OCaml R Tcl
If you want to look into Goaldi, the Icon-derived language created by Dr. Proebsting and Gregg Townsend that's mentioned on slide 27, start here.
Lots more choices, maybe too many, can be found on Wikipedia's List of programming languages page.
Some older languages have quite a few features that are fairly different from what we commonly see today and might present some low hanging fruit. COBOL, Forth, MUMPS, and (my favorite old language) SNOBOL4 come to mind.
In elementary school you might have written a report on "The Civil War". By the time you got to college you probably realized that "The Civil War" was a hopelessly big topic to cover in a single report. But maybe "The Battle of Picacho Peak" would have been about the right size.
Similarly here, the task is not to cover a full language but just one single aspect or element of a language.
Here are some seven-minute topic ideas:
Functors or monoids in Haskell
Ruby's ObjectSpace
Contrast regular expressions in Java vs. Ruby
Explore some elements of Ruby regular expressions that we didn't talk about
method_missing
in Ruby
List comprehensions in Haskell or Python
Higher-order predicates in Prolog
"Globals" in MUMPS
PICTURE in COBOL
Lambda expression support in Java 8
java.util.stream
Prototypes in JavaScript
Ruby's (I've seen enough of these to last a lifetime, so this topic is specifically banned!)
Control structures in Bash
Arrays in Bash
Sigils in Perl
Typeless-ness in BCPL
Pattern matching in SNOBOL4
"Magic methods" in Python
Channels in Go
Homoiconicity in Lisp
PHP arrays
String scanning in Icon
Stack-based programming in PostScript or Forth
Using C's Matrix
classsizeof
to explore the language
Fun with the C preprocessor (beyond what's covered in 352)
Type hints in Python (PEP 484)
Void-safety in Eiffel
Operator overloading in Python
NumPy's excellent usage of of Python's operator overloading
Operator precedence and associativity in Racket
Macros in Racket (Scheme) or Common Lisp
...more topic ideas may appear here!...
Be sure that your topic is language-centric rather than library-centric. NumPy is a fascinating library but just talking about some of its many functions
would be library-centric, not language centric. On the other hand, digging into how something like a[:,:-3,:]
works would be very
language-centric.
One way to look for topic ideas is to browse tables of contents of books on Safari. For high-bandwith browsing, go to the science library.
Think of your goal as being technical entertainment. Your challenge is to find some interesting thing for which you think you can create material that will hold a classmate's attention for seven minutes.
You can make any assumptions you want about your audience. For example, you might assume that your audience is your 372 classmates, implying that they know Python, Java, Haskell, Prolog and, by the end, Ruby. If you want to talk about the C preprocessor, you should probably assume the audience knows some C.
It's fine to use examples you discover on the web and in books; just take a moment to verbally cite the source, like the author's name, the name of the book, or the website. It's fine to watch videos to help find a topic or learn more about your topic.
You don't need to get your topic approved in advance but I'll be happy to offer advice on your ideas, or help you find an idea.
If your language has a REPL, your video might just be a screen recording of you demonstrating a feature and narrating what you're doing.
If you're inclined to write slides with PowerPoint, Keynote, or whatever, and record a presentation, perhaps even projected on a screen in a classroom, that's fine.
You can work with pencil and paper, writing out examples by hand, as one might when working on an Elmo, and shoot video with a cell phone.
Any mix of the above modes or additional modes is fine.
I don't expect you to spend time editing video to make it perfect, or anywhere near perfect. You're certainly free to do some video editing if you want, but I'm fine with a single "take", just like my wretched catch-up videos. (Ketchup videos might be better, huh?!)
It's fine to run a little past seven minutes, but keep it under eight minutes. If you're significantly under seven minutes there will be a proportional deduction in your grade. I'll stop watching at eight minutes.
video.txt
using
/cs/www/classes/cs372/fall22/av/turnin
. Just run that script in whatever directory your video.txt
resides, like this:
% ls -l video.txt -rw------- 1 whm root 188 Oct 27 21:37 video.txt % /cs/www/classes/cs372/fall22/av/turnin ======== contents of av.20221027.213807.tz ======== -rw------- whm/root 188 2022-10-27 21:37 video.txt ======== running turnin ======== Turning in: av.20221027.213807.tz -- ok All done.The file you're turning in,
video.txt
, should be structured as follows:
First line: A title for your video
Second line: The URL for your video
Third line: "Post: yes
" or "Post: no
"
Following lines: Any sort of comments or observations you'd like to make, if any.
Here's a sample video.txt
:
% cat video.txt The Amazing Haskellon Explores Monads https://www.yootube.com/watch?v=xZZhFlIl0Zo234 Post: yes At first I was worried about being able to fill seven minutes but soon I was fighting to keep it under eight minutes! I spent a whole day on this thing!
I'll collect the URLs for the videos that have "Post: yes
" and post that list on Piazza.
I'll use exactly the title you specify. If you want your name or a pseudonym shown, include it in the title,
maybe with "... by John Smith" or "Fun with <class 'slice'>", for example.
Specifying "Post: yes"
earns you a five-point bonus. You can remain anonymous, except to those who might recognize your voice, for example.
I don't expect you to achieve full understanding of your topic; you just need to know enough to fill seven minutes. It's fine to point out some things that you were unable to figure out.
If you have a disability that makes this assignment difficult for you, please let me know; we'll work out an accommodation.