CS56—Advanced Applications Programming
A course taught by Phill Conrad in the Dept. of Computer Science at UC Santa Barbara
Older materials can be found at the 56wiki site.
This site is maintained in this github repo: https://github.com/ucsb-cs56/ucsb-cs56.github.io
Textbooks Used This Quarter
- Head First Java, 2nd Edition—Main textbook for learning Java
- Java in a Nutshell, 7th Edition—Supplemental text for updates to Java 6 thru Java 11
Other Textbooks
- Head First Design Patterns—Main textbook for learning Object-Oriented Programming
- Rational—A class for rational numbers, and starting point for learning Java, and the Java toolchain
- Rational: ex01—private data members, public constructors, integers from command line arguments, main methods, built in toString method, simple compilation/execution with javac/java
- Rational: ex02—toString method, public getters, simple build.xml file for Ant, mutiple classes with main() in a single project
- Rational: ex03—creating a jar file, automatic testing with junit, creating and publishing javadoc
- Rational: ex04—move source to /src and .class files to /build, adjustments to Ant build.xml, discuss immutable objects
- Rational: ex05—Addressing bugs with test-driven development (expose bug with test first, then make test pass to squash bug)
- Rational: ex06—understanding inheritance (from java.lang.Object), linking from our javadoc to Java standard libraries, negative rational numbers, multiplying rational numbers
- Rational: ex07—Exceptions, testing for Exceptions with JUnit
- Rational: ex08—functions (methods) to multiply two rational numbers
- Rational: ex09—== vs. .equals, hashCode()
- Rational: ex10—packages: edu.ucsb.cs56.pconrad.rational
- Rational: ex11—Using java arrays and java.util.ArrayList with Rational; running main() programs from a jar file; reading from file, constructing from string
- Rational: ex12—Converting from Ant to Maven, adding jacoco test case coverage
- Rational: ex13—Improved test case coverage
- Rational: ex14—Java Lambdas
- Rational: ex15—Sorting: Comparable, Comparators
- Agile—A Software Development Methodology
- Agile: Standups—A timeboxed standing meeting to help team make progress
- Agile: Team Norms—Groundrules set by a team that promote effective and harmonious teamwork and productivty
- Agile: User Stories—As a (who?) I can (what?) so that (why?)
- Ant—Apache Ant, a build tool for Java (similar to Make/Makefiles)
- Ant: Comparing files—Doing something like a unix 'diff -q' via Ant
- Ant: Properties—The variable like things in Ant files (but they aren't really variables)
- antipatterns—Things to avoid in your code
- Antipatterns: inheritance—When NOT to use inheritance
- Applications Programming—A compendium of knowledge and skills applications programmers (software developers) need
- Bug Reports—The typical format: STR, observed, desired
- CI: —Continuous Integration--automatically testing after every commit
- Code Smells—Common problems that arise in code
- Code Style—formatting, indenting, names, and much more
- Code Style: astyle—automatic code indenting tool available on CSIL
- Corgis—A collection of real-world datasets for programming exercises
- Course Policies—Explanations of why certain instructors do things they way they do them.
- Course Policies: Answer Keys—Why do you not provide answer keys for all your old exams?
- CSIL—Computer Science Instructional Lab machines
- CSIL: browser from command line—How to open a browser from the command line
- CSIL: disk quota and file quota issues—How to diagnose and fix
- CSIL: git configuration—Configuring your CSIL account to use git
- CSIL: Mount CSIL drive Via MacOS—Remotely Mount your CSIL drive to your MacOS system via cifs/smb using SAMBA
- CSIL: Remote Host Id Changed—The scary REMOTE HOST ID CHANGED message with mention of SOMETHING NASTY
- CSIL: ssh port forwarding—How to access webapps running on CSIL from your local machine
- CSIL: via ssh from Linux—Connecting via ssh from the command line
- CSIL: Via MacOS—Accessing CSIL from your MacOS system
- CSIL: via ssh from Windows—Connecting via PuTTY/XMing or MobaXterm
- CSV files—Comma Separated Value files, and processing them in Java
- Data—Various sources for datasets to build applications with
- Databases—SQL, Postgres, H2, etc
- Design Patterns—Various sources for datasets to build applications with
- Design Patterns: Strategy—Define multiple algorithms and let client application pass the algorithm to be used as a parameter.
- Eclipse—One of several choices for a Java IDE
- Enviroment Variables—Reading them from Java code
- Firebase—An interesting development platform
- Game Programming—How to make Java work for Games
- Gauchospace: Clickable URLs—In assignment submissions, urls should be clickable
- git and github—version control, source code configuration and project collaboration tools
- git: basic workflow—The basics: git add..., git commit..., git push ...
- git: cloning your first repo—A guide for those new to git
- git: commit messages—How to write clear and helpful commit messages
- git: feature branch workflow—One branch per feature/issue/story
- git: git/github troubleshooting—Various problems and their solution
- git: .gitignore files—What they are for and what to put in them
- git: merge conflicts—Not nearly as scary as you may have been told
- git: overview—An introduction. git vs. github.com vs. github.ucsb.edu, repos, etc.
- git: throwaway untracked files—how to clean up untracked files easily
- github: adding collaborators—giving individual users access to a private repo
- github: api—Java Api for Github
- github.com: creating private repos under an organization—for closed source class assignments
- github: issues—working with issues in github
- github: keyboard shortcuts—making the github web UI easier to use
- github: pro tips—A few extras to help you work with GitHub more effectively
- github: using ssh keys—generating public/private key pair, uploading public key to github
- github.ucsb.edu: creating private repos under an organization—for closed source class assignments
- github: verified badge on commits—adding extra security to your commit messages
- Gradescope—System for homework grading, feedback and submission
- Gradescope: Organization Access—How to enable access to organization repos
- Gradescope: Pair/Group Submission—Submitting on Gradescope as a pair or group
- Gradescope: Regrade Requests—What to do if you have questions about the grading of a problem (e.g. you think there was a grading error)
- Gradescope: Student Self-Submission—Scanning your assignment to PDF
- gradle—A build system (alternative to Ant or Maven) based on the groovy scripting language
- Heroku—A cloud computing platform
- Heroku: Troubleshooting—Solutions to common problems and errors
- IDEs for Java—Integrated Development Environments for Java (IntelliJ, Eclipse, Netbeans, etc.)
- Java—The language we are studying in CS56
- Java: Annotations—All about those funny @ things that precede methods
- Java: ArrayList to array—e.g. ArrayList<Integer> to int []
- Java: Codacy—A static analysis tool for Java
- Java: Command Line Arguments—how to the access contents of (String [] args)
- Java: == vs. .equals(), and hashCode()—the difference, and how to override .equals and .hashCode()
- Java: Garbage Collection—How and when does memory allocated on heap get reused?
- Java: Garbage Collection: Under the Hood—Can we peek under the hood at how garbage collection is done
- Java: HttpURLConnection—And HttpsURLConnection; a Java object for retrieving content from a URL
- Java: Installing—Installing Java 11
- Java: JAR files—Creating and using .jar files
- Java: JVM—The Java Virtual Machine
- Java: Lambda Expressions—Shorter, cleaner code using anonymous functions
- Java: Overriding vs. Overloading—The difference between these
- Java: Plaform Independent Newlines—\n isn't as portable as you might like
- Java: Sorting—Comparable, Comparators, and sorting ArrayLists and such
- Java: static analysis—Tools that analyze source code without running it
- Java: Streams in Java 8 —A whole new style of programming
- Java: Unchecked Operations—That message that says blah.java uses unchecked or unsafe operations. Recompile with -Xlint:unchecked for details.
- Java: Web Applications—Overview of various frameworks (Servlets, Spring, Apache Spark-Java)
- Javadoc—Documentation generator for java
- Javadoc: Legacy Code Projects—step-by-step instructions for javadoc for UCSB-CS56-Projects
- javadoc: publishing to github pages from a private repo (the old way)—step-by-step instructions
- javadoc: publishing to github pages from a private repo—step-by-step instructions
- javadoc: publishing to github pages from a public repo—step-by-step instructions
- javafx—replacement for swing, platform for Java GUI development
- javafx: XQuartz on Mac—when JavaFX doesn't work over X11 forwarding on Mac, how to fix it
- JDBC—Java Database Connectivity--a way to use SQL-based databases with Java
- Jekyll—Creating web sites (like this one) on github-pages using Markdown
- JSON: —JavaScript Object Notation
- JSON: Jackson—A Java Package for processing JSON
- JUnit—Unit testing framework for Java
- JUnit: Hamcrest Matcher style—A different style of writing assertions for Unit testing
- JUnit: Mocking System.out—How do you write a JUnit test for a method that uses System.out?
- Kanban: —visualization of work in progress
- Log4J: —A logging framework for java
- Log4J: SparkJava—Using Log4J with SparkJava
- Log4J: Spring Boot—Using Log4J with Spring Boot
- Lombok: —Automatic generation of getters/setters, etc.
- MacOS—Setting up an environment to do CS56 work on your own Mac (not ssh'ing into CSIL)
- MacOS: Homebrew—Package installer for Mac OS
- Markdown—A simplified syntax to create formatted documents
- Maven: Hello World—A relatively simple Hello World app with Maven
- Maven—A build tool for Java plus a package manager
- Maven: Adding custom jar dependency—Including a jar file that isn't available as a standard Maven dependency
- Maven: Convert Ant to Maven—replacing ant build.xml with maven pom.xml
- Maven: FAQ—Frequently Asked Questions
- Maven: Installing—on Windows, Mac, Linux
- Maven: Javadoc—Generating javadoc when using Maven
- Maven: Managing Versions—How do you get the right version for dependencies, plugins, etc.
- Maven: Pom.xml Order—In what order should the elements of a pom.xml appear
- Maven: Profiles—Making your pom.xml do different things on localhost vs heroku, for example
- Maven: Testing—Doing JUnit testing and other testing using mvn test, mvn verify, etc.
- Maven: Wrapper—The mvnw file that you see in some repos: what is it, and why do you need it
- Maven: Xlint options—For example, what to do when you get `Recompile with -Xlint:unchecked for details`
- MongoDB—A particular NoSQL database platform
- MongoDB: Mlab—A cloud provider of MongoDB databases with a free tier
- MongoDB: Spring Properties—How to set properties for connecting to MongoDB when using Spring
- OAuth: —The way we implement the 'login with Google, Facebook, or Github' thing you see on some websites
- OAuth: Authorizing GitHub Third Party Apps—Gradescope, and GitHub OAuth Apps you build yourself
- OAuth: GitHub Setup—Setting up a GitHub OAuth App to obtain client id and client secret
- OAuth: Google Setup—Setting up a Google OAuth App to obtain client id and client secret
- OOP—Object Oriented Programming
- Port Numbers—Those numbers such as 8080, 12345 that show up when doing networking things
- Postgres—An implementation of an SQL relational database, available on Heroku
- React—A front-end framework for webapps and native apps
- Refactoring—
- REST—RESTful APIs, etc (Representational State Transfer)
- Scrum—A Software Development Methodology
- Selenium—Remote Control of a Browser (e.g. for end-to-end testing of webapps, web scraping)
- Selenium: Driver Setup—Setting up your driver
- Semantic Versioning—A set of rules for assigning meaningful version numbers
- Slack—A chat-based communication tool for teams
- Sockets—An abstraction used in networking
- Spring Boot: —A Java web application framework
- Spring Boot: Actuator—Checking the endpoint mappings, health or other info about your Spring Boot app
- Spring Boot: Application Properties—Defining the application.properties
- Spring Boot: ControllerAdvice—A place to factor out common ExceptionHandler, ModelAttribute and InitBinder code across multiple controllers
- Spring Boot: CSV—Downloading and Uploading CSV files with Spring Boot
- Spring Boot: Database Migrations—When you need to make a change to your database schema for an app in progress
- Spring Boot: Heroku—Tips for running with Spring Boot applications on Heroku
- Spring Boot: Logging—How to write information to the log in Spring Boot
- Spring Boot: OAuth—How to implement OAuth for authentication in Spring Boot
- Spring Boot: POST and CSRF—If you get 403 forbidden messages when using POST
- Spring Boot: Postgres—Using Spring Boot with Postgres
- Spring Boot: RestTemplate—When you need to access other APIs from the backend of your Spring Boot Application
- Spring Boot: Secrets—Ways of keepings database credentials and OAuth client secrets out of Github
- Spring Boot: Security—Authentication, Authorization and other Security issues
- Spring Boot: Sessions—How to make the stateless HTTP protocol stateful
- Spring Boot: SQL—Working with SQL and Databases in Spring Boot
- Spring Boot: VS Code—Suggested VS Code extensions for working with Spring Boot
- SQL—SQL-based relational databases (sqlite3, Postgres, MySQL, etc.)
- Swing—A GUI Framework
- $T and $B—Using environment variables to make navigating a src tree less painful
- Teamwork—Practices for setting up a harmonious and productive team
- Test Driven Development (TDD)—General information about best practices
- Testing—Everything having to do with testing: Unit testing, Integration Testing, Test Coverage
- Testing: Integration Testing with Maven—When you want to run the integration tests
- Testing: Jacoco Reports—How to interpret the reports (red, yellow, green)
- Testing: Jacoco via Maven—Setting up Jacoco test coverage, using Maven
- Testing: Spring Boot HTMLUnit—Testing Spring Boot Webapps
- Thymeleaf—A Templating Engine for Spring Boot
- Toolchain—The set of tools you need for software dev in CS56
- Travis-CI—A continuous integration system (automated testing)
- UCSB CS Github Linker—A Tool for setting up your Github Account for your course
- UML—Unified Modeling Language: A graphical language for software design
- Unix (and Linux)—A variety of resources related to Unix and Linux, esp. command line tools
- Unix: Misc tools—Various useful command line tools you may not know about
- Unix: Search/Replace across multiple files—from the command line, using grep, sed, etc.
- User Stories: —As a (who?) I can (what?) so that (why?)
- vim—a widely used text editor among Unix users
- vim: basic eight—eight things you need to know how to do for your survival
- vim: customization—customizing vim for your purposes
- vscode—Visual Studio Code, a lightweight free editor from Microsoft with many IDE features
- Webapps—Basic concepts of web applications
- Webapps: Webapps vs. Websites (Static Web Sites/Pages)—What's the difference between a web app and a web site/page
- Windows—Setting up an environment to do CS56 work on your own Windows machine (not ssh'ing into CSIL)
- X11—Dealing with X11 DISPLAY issues
- YAML—An alternative to XML and JSON for representing structured data in a machine and human readable format
- Corgis—A collection of real-world datasets for programming exercises
- Exams—Past Exams
- Java: Tutorials—Online resources for learning Java
- Practicing Coding—Resources for practicing coding
- Spring Boot: Tutorials—Online resources for learning Spring Boot