README
author Christian Urban <christian.urban@kcl.ac.uk>
Fri, 28 Aug 2020 16:54:49 +0100
changeset 341 e9d5287c3107
parent 333 24bc76d97db2
child 396 3ffe978a5664
permissions -rw-r--r--
updated

Wartremover

./wartremover -traverser org.wartremover.warts.Return -traverser org.wartremover.warts.Var -traverser org.wartremover.warts.MutableDataStructures $i


compilation

git clone https://github.com/wartremover/wartremover.git
sbt "++ 2.13.1" core/assembly

======================
scalafix

https://scalacenter.github.io/scalafix/docs/users/installation.html
https://gabro.github.io/scalafix/docs/installation/cli.html


=====================
bash cheatsheet

https://devhints.io/bash
======================


./dff > sort | more
./dff | sort > d


Repeating commands for data in a file:

input="d"

while IFS= read -r file; do opendiff some_copy "$file"; done < "$input"

----------------------------

Decompilation 


java -jar procyon-decompiler-0.5.36.jar -jar templates1/drumb.jar -o out

-------------------------
~/pep-material/moss/mossnet -l java -b ../base.java *.java
-------------------------


Brain fuck optimizer

https://github.com/Dash-Lambda/Eso/blob/master/src/main/scala/interpreters/BFOptimized.scala

--------------------------

chowchingjimkcl

Assignment 6     3 (basic) 7 (main)
Assignment 7     4 (basic) 6 (main)
Assignment 8     4 (basic) 6 (main)
Assignment 9     4 (basic) 6 (main)
Assignment 10    10 (main)

48




-----------------------------
node
Welcome to Node.js v12.11.1.
Type ".help" for more information.
> "11" + 1
'111'
> "11" - 1
10
> 




scalac -Ydelambdafy:inline -d docdiff.jar docdiff.scala

gerp -h     // gerp without filename


given two lists, is one a sublist of the other except one
element

check Graham's Haskell book

five-in-a-row as a spiral
(Tic-Tac-Toe on steriods or Go for the weak mind)

----------
for serving locally a directory

python -m SimpleHTTPServer 8000
----------
CokeBottle cokeBottle = new CokeBottle();

joke from...

https://www.youtube.com/watch?v=9e_oEE72d3U
----------

---------------
Hepec...generating static pages
https://sake92.github.io/hepek/quick-start.html

==================================
Calling ediff from the command line


emacs --eval "(ediff-files \"k1502472/drumb.scala\" \"k1502752/drumb.scala\")"


deleting comments from scala files

find . -name '*.scala' -print0 | xargs -0 perl -n -p -0 -i.bak -e 's%/\*([^*].*?)?\*/%%gs;s%^([^\"\n\r]*(\"[^\"\n\r]*\"[^\"\n\r]*?)*?)//([^*\n\r].*)?$%$1%gm'


find . -name '*.scala' -print0 | sed -i.2 's|def ordered_moves(dim: Int, path: Path, x: Pos): List[Pos] = ..|//def ordered_moves(dim: Int, path: Path, x: Pos): List[Pos] = ..|g'


LC_ALL=C sed -i.2 -- 's|def ordered_moves(dim: Int, path: Path, x: Pos): List\[Pos\] = \.\.|//def ordered_moves(dim: Int, path: Path, x: Pos): List[Pos] = ..|g' k*/knight3.scala.bak

LC_ALL=C sed -i.2 -- 's|def first_closed_tour_heuristic(dim: Int, path: Path): Option\[Path\] = \.\.\.|//def first_closed_tour_heuristic(dim: Int, path: Path): Option[Path] = ...|g' k*/knight3.scala.bak

LC_ALL=C sed -i.2 -- 's|def first_tour_heuristic(dim: Int, path: Path): Option\[Path\] = \.\.\.|//def first_tour_heuristic(dim: Int, path: Path): Option[Path] = ...|g' k*/knight3.scala.bak

LC_ALL=C sed -i.2 -- 's|def nullable (r: Rexp) : Boolean = \.\.\.|//def nullable (r: Rexp) : Boolean = ...|g' k*/re.scala.bak

LC_ALL=C sed -i.2 -- 's|def der (c: Char, r: Rexp) : Rexp = \.\.\.|//def der (c: Char, r: Rexp) : Rexp = ...|g' k*/re.scala.bak

LC_ALL=C sed -i.2 -- 's|def simp(r: Rexp) : Rexp = \.\.\.|//def simp(r: Rexp) : Rexp = ...|g' k*/re.scala.bak

LC_ALL=C sed -i.2 -- 's|def ders (s: List[Char], r: Rexp) : Rexp = \.\.\.|//def ders (s: List[Char], r: Rexp) : Rexp = ...|g' k*/re.scala.bak

LC_ALL=C sed -i.2 -- 's|def matcher(r: Rexp, s: String): Boolean = \.\.\.|//def matcher(r: Rexp, s: String): Boolean = ...|g' k*/re.scala.bak

LC_ALL=C sed -i.2 -- 's|def replace(r: Rexp, s1: String, s2: String): String = \.\.\.|//def replace(r: Rexp, s1: String, s2: String): String = ...|g' k*/re.scala.bak

LC_ALL=C sed -i.2 -- 's|println(matcher(EVIL,|//println(matcher(EVIL,|g' k*/re.scala.bak

LC_ALL=C sed -i.2 -- 's|for (i <- 1 to 5000001 by 500000)|for (i <- 1 to 11 by 10)|g' k*/re.scala.bak









=========================
Admin atudd
=========================
Hi all,

As you will have heard from Chris, you've been appointed as TAs on 5CCS2PEP -- congrats.  We had a large number of high quality applicants.  It was quite a challenge to fit you to labs based on your own timetables, but we managed to figure out a schedule.

The module setup is very similar to last year, with the difference that there are now 5 C++ assignments and 5 Scala assignments, to balance things out.  Chris should have told you which sessions you're each covering.  The definitive schedule for the module is the timetable on timetables.kcl.ac.uk, but to summarise:
All the labs are in Bush House.  Most sessions have about 40 students, so there are two TAs.
Labs start in week 1 of term (the first lab is on Monday the 24th of September); there's a week off for reading week; then labs run until the end of term (last lab on Thursday the 13th of December).  If you're planning to skip part of the last week of term to get a cheap flight home, the best bet is to see if you can swap sessions with someone else for that week.
As the first lecture is on Friday, the first week of labs are pretty laid back.  A Java revision assignment has been set that you will have seen last year or the year before (Assignment 0).  This doesn't contribute towards the module marks; its main purpose is to get the students into the lab, to set themselves up ahead of assignment 1 -- this is released on Friday, and does count towards the module marks.  The to do list I've given them is:
Complete the Plagiarism and Collusion quiz.  They need to get 100% to do anything on this module.
Create an account on GitHub.com if they don't have one already.
Enter their GitHub username (e.g. SomeStudent) into the form linked to from the module KEATS page: in the section 'How this module works', click 'Register to submit work on this module via github.com'
Click the link to start assignment 0, and do some work on it.
Note the link to assignment 0 is set up so that if they haven't a GitHub username (step 3 above), they can't click the link to the assignment.  If you want to skip straight to it, here's the link:

https://classroom.github.com/a/xyDQjYoD

...but you could just as well look at your own assignment0 repository from last year/the year before, to see how you solved it.  Please don't give the students this direct link -- as the automated testing service is running their code on College machines, we need to ensure we only let the appropriate students access the resources for this modules.

I'll circulate the link to assignment 1 (for the second week of labs) and a model answer in due course.

Finally, as for some of you this is your first time at being a TA, here are a few helpful notes:
Being a good teacher in programming is about getting the students to think, and to become self-sufficient.  If they ask you a question, think about how you would find the answer out yourself.  If you would Google it, Google it with them.  If you'd get a piece of paper out and start sketching out ideas, encourage them to do that.
Don't give students the answers.  If they realise what the right way to do something is, you can agree, but otherwise, guide them in the right direction but don't just spell it out.  If they seem stuck, go back a few steps and cover the basics of the assignment.
Don't sit in the corner of the lab waiting for things to happen.  Walk around, ask people how they're getting on.  Some students are a bit shy to ask for help, we need to engage them with the course and help them get the most out of it.
As a TA, you're representing the department as a member of staff.  Don't make advances on the students.  Outside the lab, you're a student and it's none of our business; but for those hours there, you're staff.
If a student kicks off (I've never heard of this happening) we've got your back - come get a member of academic or office staff, you're paid to teach not do crowd control.  
We take attendance in labs.  Half way through, one of you should go to the departmental office (level 6) and pick up a barcode scanner.  There's a barcode to scan to denote the session -- you scan this once -- then scan the student cards of the students in the lab.  It's unfortunately important that we do this, as the UK Border Agency take a sample of attendance records for overseas students, and the College will lose its ability to sponsor overseas student visas if we aren't seen to be taking attendance.
If you're doing two consecutive sessions, classes finish at 5 to the hour and start again at 5 past.  Take a break.
If you're talking a lot, and need some water, don't forget about the cold water machines in the kitchens.
Our students sometimes say that the labs are noisy.  This is usually due to students who aren't taking the module sitting in the lab.  Politely ask them to be quiet or leave; there are other labs on campus and other study spaces.
Because I'm not in the labs, but you are, if there any snags please let me know.
I think that's it - I look forwards to working with you.

All the best,

Andrew