Link
Search
Menu
Expand
Document
CS156
CS156
Topics
APIs
Agile
Agile: Acceptance Criteria
Agile: Estimates
Agile: Retros
Agile: Standups
Agile: Team Norms
Agile: User Stories
Ant
Ant: Comparing files
Ant: Properties
Antipatterns
Antipatterns: inheritance
Applications Programming
Bug Reports
CI
CSIL
CSIL: Java 11
CSIL: Mount CSIL drive Via MacOS
CSIL: Mount CSIL drive Via Windows
CSIL: Remote Host Id Changed
CSIL: Via MacOS
CSIL: browser from command line
CSIL: disk quota and file quota issues
CSIL: git configuration
CSIL: ssh port forwarding
CSIL: using public/private key
CSIL: via ssh from Linux
CSIL: via ssh from Windows
CSV files
Chromatic
Chromatic: Disable UI Review
Chromatic: Yellow Circle
Code Reviews
Code Reviews: Commented Out Code
Code Reviews: GitHub
Code Reviews: Reviewing a merged PR
Code Smells
Code Style
Code Style: astyle
Code Style: astyle
Codecov
Codecov: GitHub Actions
Codecov: Transfering Repos
Codecov: Troubleshooting
Conventions
Conventions: Branch Names
Conventions: Commit Messages
Conventions: Tags
Course Policies
Course Policies: Answer Keys
Data
Databases
Design Patterns
Design Patterns: Strategy
Docker
Dokku
Deploying a Simple App
Logging In
Deploying an App
Getting Started
Deploying an App from a private repo
Config Vars Frontend
Dokku: Deploy Problems
Dokku: Postgres Database: Backup/Restore
Dokku: Postgres Database: Command Line
Enabling HTTPS
Environment Variables
Logs
MongoDB Database
Postgres Database
Preparing Your App
Redeploy App
Staff Info
Enviroment Variables
Eslint
Formatting
Gauchospace
Gauchospace: Clickable URLs
Gauchospace: Defining Groups:
Git
git: .gitignore files
git: basic workflow
git: cherry-pick
git: clean
git: cloning your first repo
git: commit messages
git: configuration
git: copy branch to new repo
git: feature branch workflow
git: fixup commit
git: git/github troubleshooting
git: merge conflicts
git: overview
git: pair repo
git: pull rebase main
GitHub
Graphql: GitHub Explorer
Local Storage: Testing
github.com: creating private repos under an organization
github.ucsb.edu: creating private repos under an organization
github: GitHub Pages
github: REMOTE HOST IDENTIFICATION CHANGED
github: actions
github: actions self hosted runners
github: adding collaborators
github: api
github: issues
github: keyboard shortcuts
github: markdown
github: merging PRs
github: pro tips
github: pull requests
github: using ssh keys
github: verified badge on commits
github: wrong starter
Github Actions
Github Actions: Workflow 02
Github Actions: Workflow 04
Github Actions: Workflow 82
Gradescope
Gradescope: Organization Access
Gradescope: Pair/Group Submission
Gradescope: Regrade Requests
Gradescope: Student Self-Submission
Gradescope: Zip Submission
Gradle
Heroku
Heroku: Alternatives
Heroku: Billing and Quotas
Heroku: CLI
Heroku: Tips
Heroku: Troubleshooting
Independent Study
JEnv
JSON
JSON: Jackson
JUnit
JUnit: Hamcrest Matcher style
JUnit: Mocking System.out
Java
Java: == vs. .equals(), and hashCode()
Java: Annotations
Java: ArrayList to array
Java: Codacy
Java: Command Line Arguments
Java: Garbage Collection
Java: Garbage Collection: Under the Hood
Java: HttpURLConnection
Java: Installing
Java: JAR files
Java: JVM
Java: Lambda Expressions
Java: Overriding vs. Overloading
Java: Plaform Independent Newlines
Java: Sorting
Java: Streams in Java 8
Java: Unchecked Operations
Java: Versions
Java: Web Applications
Java: static analysis
JavaFX
javafx: XQuartz on Mac
JavaScript
JavaScript: Destructuring
Javadoc
Javadoc: Legacy Code Projects
javadoc: publishing to github pages from a private repo
javadoc: publishing to github pages from a private repo (the old way)
javadoc: publishing to github pages from a public repo
Kanban
Kanban: Add Column
Kanban: Change Default View
Legacy Code
Legacy Code: Courses Search
Legacy Code: Gauchoride
Legacy Code: Happy Cows
Legacy Code: Organic
Legacy Code: Projects
Legacy Code: Roles
Legacy Code: Setup
Legacy Code: Staff Epic Planning
Legacy Code: Terminal Windows
Liquibase
liquibase: Waiting for changelog lock
liquibase: adding a table
Local Storage
Log4J
Log4J: SparkJava
Log4J: Spring Boot
Lombok:
MacOS
MacOS: Common Errors
MacOS: Homebrew
Markdown
Maven
Maven: Adding custom jar dependency
Maven: Adding custom jar dependency
Maven: Convert Ant to Maven
Maven: FAQ
Maven: Hello World
Maven: Installing
Maven: Javadoc
Maven: Managing Versions
Maven: Plugins
Maven: Plugins
Maven: Pom.xml Order
Maven: Profiles
Maven: Skip Tests
Maven: Testing
Maven: Wrapper
Maven: Xlint options
Maven: vs Ant
MongoDB
MongoDB: New Database
MongoDB: SSL certificate
MongoDB: Spring Boot - Basic Collection
MongoDB: Spring Boot - Nested Document
MongoDB: Spring Properties
MongoDB: Staff Setup
MongoDB.com
Node
Node: Linux
Node: MacOS
Node: Windows
Node: npm
Node: nvm
Node: package-lock.json merge conflicts
OAuth
Google: Create Developer Project
Google: OAuth Consent Screen
OAuth: Authorizing GitHub Third Party Apps
OAuth: GitHub Setup
OAuth: Google Setup
OAuth: Troubleshooting
OOP
PIT Mutation Testing
Port Numbers
Publishing
Pull Requests
Pull Requests: Draft PRs
Pull Requests: Labels
Pull Requests: Simplifying
Pull Requests: Storybook Links
Pull Requests: excessive whitespace changes
Pull Requests: package-lock.json
Pull Requests: unwanted files
Pulse Secure
REST
React
React: Create React App
React: Introduction
React: Page Components
React: Patterns
React: Router
React: Spring Boot
React: Storybook
React: UseSWR
React: react-hook-form
Refactoring
Render
Deploying a public repo to Render
Deploying any repo to Render
Set Environment Variables
SQL
SQL: Liquibase
SQL: Postgres
SQL: Queries
Scrum
Selenium
Selenium: Driver Setup
Semantic Versioning
Slack
Sockets
Spring Boot
Spring Boot: Actuator
Spring Boot: Application Properties
Spring Boot: CSV
Spring Boot: ControllerAdvice
Spring Boot: Database
Spring Boot: Database Migrations
Spring Boot: Heroku
Spring Boot: Logging
Spring Boot: OAuth
Spring Boot: POST and CSRF
Spring Boot: Postgres
Spring Boot: Profiles
Spring Boot: RestTemplate
Spring Boot: SQL
Spring Boot: Secrets
Spring Boot: Security
Spring Boot: Sessions
Spring Boot: Testing
Spring Boot: VS Code
Spring/React
Spring/React: Basic CRUD operations
Spring/React: Directory Structure
Spring/React: Future Work
Spring/React: Github Actions
Spring/React: Migrating to Spring 3
Spring/React: Practices
Spring/React: Testing Pyramid
Spring/React: package-lock.json Merge Conflicts
Storybook
Mocking APIs
Setting up
Stryker
Stryker: Excluding Code
Stryker: console.log surviving mutants
Stryker: html attribute surviving mutants
Swagger
Swagger: SpringFox to Springdoc
Swing
Teamwork
Test Driven Development (TDD)
Testing
Testing: Articles
Testing: Coverage
Testing: Integration and End-to-End Testing
Testing: JUnit
Testing: Jacoco
Testing: Jacoco via Maven
Testing: Jest Testing
Testing: Maven Tips
Testing: Mocking
Testing: Pitest
Testing: Pyramid
Testing: React
Testing: Spring Boot HTMLUnit
Testing: npm test
Thymeleaf
Toasts
Toolchain
UCSB CS Github Linker
UML
Unix (and Linux)
User Stories
VS Code
vscode: CR/LF
vscode: Extensions
Vim
vim: basic eight
vim: customization
Webapps
Webapps vs. Websites
Windows
Windows: WSL
YAML
graphql
Past Offerings
Textbooks
HFJ3
HFJ3: Chapter 1
HFJ3: Chapter 2
HFJ3: Chapter 3
HFJ3: Chapter 4
HFJ3: Chapter 5
JN7
JN7: Chapter 1
JN8
JN8: Chapter 1
Tutorials
Student
Student: ex01
Student: ex02
Student: ex03
Student: ex04
Student: ex05
Student: ex06
Student: ex07
Student: ex08
Student: ex09
Student: ex10
Student: ex11
Student: ex12
Student: ex13
Student: ex14
Student: ex15
Student: ex16
Student: ex17
F24
github
S24
earlier offerings
cs156 docs repo
Canvas
Textbooks
JN8
JN8-Java in a Nutshell, 8th Edition
Table of contents
JN8: Chapter 1