Lecture notes
Hosted at: | |||
---|---|---|---|
Available formats: |
|
||
Source code provided at https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures |
|||
Published under the terms of the Creative Commons Attribution 4.0 International Public License. |
Table of Contents
- Preface
- 113105 Software development 1
-
- Getting started
- Language Fundamentals
- Statements
- Objects and Classes
- Core Classes
- Arrays
- Inheritance
- Error Handling
- Working with Numbers
interface
definitions andabstract
Classes- Application deployment I
- Reading character streams
- Collections
- Appendix
-
- Examination bonus point projects
- Exercising past examinations
- Examination hints
- Past Software Development 1 examinations
-
- SD1 examination summer 2024
- SD1 examination winter 2023
- SD1 examination summer 2023
- Sd1 examination winter 2022
- SD1 examination winter 2021
- SD1 examination summer 2021
- SD1 examination winter 2020/1
- SD1 examination winter 2020/2
- SD1 examination summer 2020
- SD1 examination winter 2019
- SD1 examination summer 2019
- SE1 Klausur Winter 2018
- SE1 Klausur Sommer 2018
- Past Software Development 1 exam preparing tests
- Working with git
- Apache Maven
- List of Exercises
- Technical Documentation
- 113473 Database and application development
-
- Database features
- Selected database products overview
- JDBC: Accessing Relational Data
- JPA
- Project ideas
- List of Exercises
- Software defined Infrastructure
-
- UNIX / LINUX Basics
- Ubuntu / Debian Package management
- Cloud provider
- Getting started
- DNS
- LDAP
-
- Recommended Preparations
- Exercises
-
- Browse an existing LDAP Server
- Set up an OpenLdap server
- Populating your DIT.
- Testing a bind operation as non -
admin
user - Extending an existing entry
- Filter based search
- Accessing LDAP data by a mail client
- LDAP configuration
- LDAP based user login
- Backup and recovery / restore
- Accessing LDAP by a Java™ application.
- Apache web server
- File cloud
- Network file systems served by Samba
- Docker
- Icinga
- List of Exercises
- Persistence strategies and application development
- Bibliographic links
- Glossary
List of Figures
- 1. How much time to invest?
- 2. Recommended reading resources I
- 3. Recommended reading resources II
- 4. Your biggest enemies
- 5. German humour
- 6. 4 most imperative study objectives
- 7. Online tutorials
- 8. Unix and the terminal
- 9. Online programming, automated feedback
- 10. Online programming I
- 11. Online programming II
- 12. Openjdk source code repository
- 13. Java Visualizer
- 14. Live lecture additions
- 15. Remote lecture participation
- 16. Virtualbox / VMware player based virtual Linux image
- 17. Virtualbox™ settings
- 18. Intellij IDEA IDE
- 19. Embedded exercises
- 20. Using the exercises
- 21. HdM mail server
- 22. Configure MI VPN client access
- 23. MI Cloud server
- 24. MI File server
- 25. MI Git versioning server
- 26. Coached exercises
- 27. Bonus points
- 28. Seminar rules and bonus points
- 29. Presenting exercise solutions
- 30. Tuition attendance and exam results
- 31. Edit - compile - execute
- 32. Editing Java™ files
- 33. Defining class
HelloWorld
- 34. Compiling Java™ file
- 35. Command line Java™ file compilation
- 36. Java byte code file
HelloWorld.class
- 37. Source code vs. bytecode
- 38. Executing byte code file
HelloWorld.class
- 39. Command line byte code file
HelloWorld.class
execution - 40. Intellij IDEA requires a JDK™
- 41. Intellij IDEA installation
- 42. Idea »Ultimate« license types
- 43. Alternative: Using the HdM license server
- 44. Creating a new Java project
- 45. Getting first Java™ impressions
- 46. Manual calculation: Abacus
- 47. Mechanical calculation: Cash register
- 48. Electromechanical calculation: Zuse Z3
- 49. Vacuum Tube: Eniac
- 50. Transistor: Microprocessor ICs
- 51. Z80 8-bit data bus
- 52. Progress in hardware 1
- 53. Progress in hardware 2
- 54. Simple facts:
- 55. Unsigned 3 bit integer representation
- 56. Binary system addition
- 57. 3 bit two-complement representation
- 58. 3 bit two complement rationale: “Usual” addition
- 59. Signed 8 bit integer binary representation
- 60. 7-bit ASCII
- 61. 7-bit ASCII with even parity bit
- 62. Western European characters: ISO Latin 1 encoding
- 63. Unicode UTF-8 samples
- 64. Java types
- 65. Java primitive types, Part 1
- 66. Java primitive types, Part 2
- 67. Variables: Handles to memory
- 68. Variable declaration
- 69. Declare, assign and use
- 70. Combining declaration and initialization
- 71. Multiple variables of same type
- 72. Identifier in Java™:
- 73. Identifier name examples:
- 74. Java™ keywords.
- 75. Variable naming conventions
- 76. Constant variables
- 77. Case sensitivity
- 78. Define before use
- 79. Type safety
- 80. Compile time analysis
- 81. Forcing conversions
- 82. Watch out!
- 83. Casting long to int
- 84. Don't worry, be happy ...
- 85. ... and watch the outcome
- 86. From the report
- 87. Maximum and minimum values
- 88. Dynamic typing in PERL
- 89. Dynamic typing in PERL, part 2
- 90. Using final
- 91. Two categories of variables
- 92. Reference type examples
- 93.
float
anddouble
- 94. Four ways representing 35
- 95. Choose your output representation
- 96. Know your limits!
- 97. Literal examples
- 98.
int
literals - 99.
int
literals explained - 100. Java™ primitive literals
- 101. Java™
String
andnull
literals - 102. Just kidding ...
- 103. Strange things I
- 104. Strange things II
- 105. Arithmetic overflow pitfalls
- 106. Limited precision
- 107. Nearest
float
to 2.1 - 108.
FloatConverter
- 109. Widening from
byte
literal toshort
- 110. Narrowing from
int
literal tochar
variable - 111. A widening «ladder»
- 112. A narrowing «ladder»
- 113. The binary plus operator
- 114. Binary operator output type
- 115. Detecting arithmetic overflow (Java 8+)
- 116. Dividing by zero
- 117. Generic binary operator
- 118. The modulus operator
%
- 119. Binary operator type examples
- 120. No binary + operator yielding
byte
- 121.
int
expression assignment - 122. Constant expression assignment
- 123. The logical “and” operator
&
- 124. The
+=
operator - 125. The
&=
operator - 126. Arithmetic assignment operators
- 127. Logical assignment operators
- 128. Increment operator
++
- 129. Different range behaviour!
- 130. Cast required
- 131. Prefix and postfix notation
- 132. Operator examples
- 133. Java™ comment flavors
- 134. Inline comments
- 135. Javadoc™ comments
- 136. Statements: General syntax
- 137. Statement examples: Declaring and assigning variables
- 138. Expression vs. statement
- 139. Multiple statements per line
- 140. Debugging multiple statements per line
- 141. Blocks
- 142. Conditional block execution
- 143.
if
syntax - 144.
if
...else
- 145.
if ... else
syntax - 146. Best practices comparing for equality
- 147. Single statement branches
- 148. Nested
if ... else
- 149. Enhanced readability:
if ... else if ... else
- 150.
if ... else if ... else
syntax - 151. User input recipe
- 152. Using a
Scanner
class collecting user input. - 153. Converting numbers to day's names
- 154. Numbers to day's names: The hard way
- 155. Better: Using
switch
- 156.
switch
Syntax - 157. Switching on strings
- 158. Allowed types for
switch
statements - 159. Why loops?
- 160. Arbitrary number of repetitions
- 161. A
while
loop - 162. Combining increment and termination condition
- 163.
while
syntax - 164. Empty
while
body - 165. A
do ... while
loop - 166.
do ... while
syntax - 167. Frequent usage of
while
- 168. Replacing
while
byfor
- 169.
for
syntax - 170.
for
variable scope - 171.
for
variable scope equivalence - 172.
for
vs. while relationship - 173. Nested loops 1
- 174. Nested loops 2
- 175. Better readability:
row
andcolumn
in favour ofi
andj
- 176. Calculating values
- 177. Response to coding errors
- 178. Unit test concept
- 179. alarmClock(...) with errors
- 180. Testing alarmClock(...)
- 181. Testing alarmClock(...) details
- 182. Instances of a Class
- 183. General class structure
- 184. What's a class anyway?
- 185. Rectangle objects
- 186. A class describing rectangles
- 187. Rectangle class and instances
- 188. Generated diagrams
- 189. The
new
operator: Creating rectangle instances - 190. Syntax creating instances
- 191. Assigning attribute values to class instances
- 192. Instance memory representation
- 193. References and
null
- 194. Checking for object presence
- 195. Why packages ?
- 196. Rules and conventions
- 197. Fully qualified class name vs.
import
- 198. Don't be too lazy!
- 199. Special: Classes in package java.lang
- 200. Class, package and file system
- 201. Source hierarchy view
- 202. Object methods
- 203. Scaling a rectangle
- 204. Scaling method implementation
- 205. Scaling method signature
- 206. Using the
scale(...)
method - 207. Method definition syntax
- 208. A rectangle's perimeter
- 209.
getPerimeter()
method implementation - 210. Using
Rectangle
.getPerimeter()
- 211. Access control: Overall objectives
- 212. Example: Two ways implementing a day's time
- 213. Access violation
- 214. Access rules
- 215. “Tips on Choosing an Access Level”
- 216. Direct access vs. setter method
- 217. Why adding setter methods?
- 218. Implementation change: Minutes only, no hours
- 219. Defining type signatures
- 220. Type signature examples
- 221. Defining method signatures
- 222. Method signature examples
- 223. Method overloading: Same name, different signature
- 224. Overloading, alternate names
- 225. No overloading in »C«
- 226. »C« requires unique function names
- 227. No distinction on return type
- 228. Method signatures rationale
- 229. Method signatures rationale
- 230. Example: System.out.print(...)
- 231. Creating and initializing rectangles
- 232. Defining a constructor
- 233. Constructor syntax
- 234. Constructors
- 235. Multiple overloaded constructors
- 236. Constructor calls within constructor
- 237. Instances by overloaded constructors
- 238. No constructor vs. default constructor
- 239. Non - default constructor, but no default constructor
- 240.
Employee
example package hierarchy - 241.
Circle
and variable scopes - 242.
Documenting classes and methods
- 243.
Generated Javadoc
- 244.
Refactoring «r» ⇒ «radius»
- 245.
Scope assignment problem
- 246.
this
overriding method scope - 247. Why do we require an instance?
- 248. Solution: Replace instance method by class method using static
- 249. Club membership objectives
- 250. Step 1: Implementing club member names.
- 251. Showing membership info.
- 252. Step 2: Adding membership numbers.
- 253. Showing membership numbers.
- 254. Member creation steps
- 255. Accessing the club's overall member count?
- 256. Accessing the club's member count
- 257. Syntax accessing class members
- 258. static / non-static wrap up
- 259. Finally understanding
System.out.print(ln)
- 260. Newton's letter to Robert Hooke
- 261. Application execution prerequisites
- 262. Why Maven project management?
- 263. Example: Creating PDF using iText7
- 264. Maven iText library pom.xml definition
- 265. Itext transitive dependencies
- 266. Class location in iText library
- 267. Class location in iText library
- 268. Maven repositories
- 269. Maven archetypes
- 270. Project «lottery» depending on «helper»
- 271. Providing project «helper»
- 272. Install project «Common»
- 273.
helper-0.9.jar
archive content - 274. Consuming project «Lottery»
- 275. External libraries view
- 276. Using Helper.factorial(...) computing
- 277. Maven artifact dependency.
- 278. Using the MI Sd1 project template
- 279. CLI example
- 280. Supplementary MI Maven archetypes
- 281. CLI testing mi-maven-archetype-quickstart
- 282. CLI archetype details
- 283. Generated project layout
- 284. Maven compile
- 285. Compilation file view
- 286. Execution
- 287. Maven package
- 288. Executing Java™ archive
first-0.9.jar
- 289. Maven
javadoc:javadoc
- 290. Maven clean
- 291. Intellij IDEA Maven support
- 292. Adding MI Maven server
- 293. New MI archetype project
- 294.
pom.xml
content changes - 295. Intellij IDEA generating Javadoc™
- 296. Pascal's triangle representing binomial coefficients.
- 297. An implementation sketch for the exponential
- 298. Comparing exponential and approximation
- 299. Comparing sin(x) and its approximation.
- 300. Recommended reading
- 301. Test categories
- 302. Example: Computing prime numbers
- 303. Unit test principle
- 304. Test driven development
- 305. Steps in Unit Testing
- 306. Step 1 + 2: Specify method, write skeleton
- 307. Execution yet being flawed
- 308. Sample test data
- 309. Step 3: Junit based specification test
- 310. Junit skeleton test result (Maven CLI)
- 311. Junit skeleton test result (IDE)
- 312. Step 3: Providing more prime tests
- 313. Step 3: Prime mass testing
- 314. Step 4: Implement skeleton
- 315. Step 5: Testing our first implementation
- 316. Implementation observation
- 317. Changing the implementation
- 318. Regression test
- 319. Systematic error debugging
- 320. Error correction in detail
- 321. Available comparison methods
- 322. Caution comparing
float
/double
!! - 323. Weird arithmetics?
- 324. Limited representation precision
- 325. Solving the issue
- 326. The
@Test
annotation - 327. The
Assert
class - 328. Importing dependencies
- 329. Dependency archive content
- 330. Value vs. reference type variables
- 331. Different behaviour!
- 332. Value variable Details
- 333. Reference variable Details
- 334. Only «call-by-value» in Java™
- 335. «call-by-value» details
- 336. «call-by-reference» for objects?
- 337. «call-by-reference» details
- 338. No «call-by-reference» in Java™!
- 339. No «call-by-reference» details
- 340. C++ reference operator “&”
- 341. C++ offers «call-by-reference» by virtue of “&”
- 342. C++ «call-by-reference» details
- 343. Method calling
- 344. Three variable scopes
- 345. Scope lifetimes
- 346. Two runtime memory categories
- 347. Stack: Four operations
- 348. Example: Storing integer values
- 349. Method calling
- 350. Call stack trace
- 351. IDE debugger
- 352. Motivation
- 353. Weekly offered lectures
- 354. Weekly offered lectures by simple numbers
- 355. Weekdays
int
representation - 356. Weekly offered lectures using constants
- 357. Converting index values to day names
- 358. Providing lecture info
- 359. Sample lectures
- 360. Bogus index value
- 361. Pitfall: Method argument order mismatch
- 362. Enumeration by class instances
- 363. Class instance per enumeration value
- 364.
switch
no longer works - 365. Re-writing
getPrice()
- 366. Compile time argument mismatch error
- 367. Pitfall: Creating an undesired instance
- 368. Define a
private
Day
constructor - 369. Preventing undesired
Day
instance creation - 370. Adding a day name attribute
- 371.
enum
Day
replacingpublic class Day
- 372.
switch
statements working again - 373.
enum
constructor being implicitlyprivate
- 374. From
https://www.urbandictionary.com
- 375. Useful links
- 376. Initialize git project
- 377. Configure author related data.
- 378. Adding resources to project index and staging area
- 379. Committing change set
- 380. Project versioning status
- 381. Adding a comment
- 382. git diff tracing changes
- 383. Reverting individual file.
- 384. Compiling,
Math.class
andPrint.class
. - 385.
Math.class
,Print.class
and versioning. - 386. Show project's log
- 387. Switch to an older revision ...
- 388. ... and forth to current master's HEAD
- 389. Centralized remote repository
- 390. Step 1: Create remote repository
- 391. Step 2: Retrieve remote repository address
- 392. Step 2: Connect to remote repository
- 393. Step 3: Push local to remote
- 394. Step 3: Pull remote to local
- 395. Alternative: Create remote, then clone
- 396. Conflicting changes
- 397. Commit schedule
- 398. User B: git push fails
- 399. User B: git pull fails as well
- 400. Merge conflict details
- 401. Struggling for resolution
- 402. Merging
Print.java
manually - 403. Commit and push merge
- 404. Superclass
Object
- 405. String literals
- 406. OpenJDK String implementation
- 407. String copy constructor
- 408. Copy constructor and heap
- 409. Operator == and
equals()
- 410. Remarks
==
vs.equals()
- 411. Operator == and
equals()
implications - 412.
equals()
is being defined within respective class! - 413. Hashing principle
- 414. Quickly identify by “simple” value
- 415. Hashing in Java and
equals()
- 416.
Rectangle
equals(...)
andhashCode()
- 417.
Rectangle
hash values - 418.
Better
hashCode()
method - 419.
Math
.sin(double x)
- 420. Motivating Arrays
- 421. Per member repeating tasks
- 422. Example:
int
array of primes - 423. Loop prime values
- 424. Mind the limit!
- 425. Safer: Using
length
- 426. Even better: “for-each” style loop
- 427. Mind the limit, part two
- 428. Primitive data one step initialization
- 429. Reference data one step initialization
- 430. Array
- 431. Two syntax variants
- 432. Array instances are special!
- 433. Array creation details
- 434. Array parameter passing
- 435. Parameter passing details
- 436. Value and reference types
- 437.
Arrays
.toString(...)
andArrays
.sort(...)
- 438.
Arrays
.binarySearch(...)
- 439.
Arrays
.fill(...)
- 440.
Arrays
.copyOfRange(...)
- 441.
Arrays
.equals(...)
- 442. Lack of extendability
- 443. Extending an array
- 444. Extension result
- 445. Using
Arrays.copyOf()
- 446.
public static void main(String[] args)
- 447. Intellij IDEA run configuration
- 448. Intellij IDEA run configuration
- 449.
Creating executable jar
- 450.
Two-dimensional arrays
- 451.
Behind the scenes
- 452.
Memory allocation
- 453.
Static array initialization
- 454.
Static array initialization, variable lengths
- 455. Two Tic-tac-toe players fighting each other.
- 456. Two Tic-tac-toe players fighting each other.
- 457. Guess who's inheriting the money
- 458. Biology and inheritance
- 459. Duplicate code
- 460. Idea: Centralize common code
- 461. Common and specific properties
- 462. Basic shape inheritance
- 463. Inheritance
- 464. Implementing
Shape
hierarchy - 465. Creating instances
- 466.
Shape
constructor - 467. Creating
Rectangle
instances - 468.
Rectangle
constructor - 469.
Shape
.equals()
- 470.
Rectangle
.equals()
- 471. Printing a
Shape
's info - 472. Overwriting
toString()
- 473.
Shape
extendingObject
- 474. Logging
Rectangle
instances - 475. Override
toString()
in classRectangle
. - 476.
Rectangle
extendingShape
- 477. Implementing
Circle
.toString()
- 478.
Shape
andtoString()
- 479. Moving
Shape
instances - 480. Implementing
Shape
movements - 481. Fools are everywhere!
- 482. Solution: final prevents overriding
- 483. Calculating a shape's area
- 484. Desired: Polymorphic
getArea()
call - 485. Problems:
- 486.
abstract
methodgetArea()
- 487.
abstract
methodgetArea()
- 488. What's a “shape” anyway?
- 489. No instances of
abstract
classes. - 490. Mandatory
getArea()
implementation. - 491. Facts about
abstract
fields, methods and classes. - 492. Moving shapes
- 493.
protected
access - 494.
final
classes - 495.
final
classes rationale - 496. “Defeating” polymorphism
- 497. Defining
equals(...)
: Expectations - 498. Defining
equals(...)
ofShape
instances - 499. Comparing center coordinates
- 500. Implementing
Rectangle
.equals()
- 501. Implementing
Circle
.equals()
- 502. Testing equality of
Shape
objects - 503. Overriding Object.toString()
- 504. @Override: Easy compile time error detection
- 505. Compile- and runtime errors
- 506.
NullPointerException
(NPE for short) - 507.
NullPointerException
is a class - 508. Throwing an exception
- 509. Catching an exception by
try {...} catch {...}
- 510.
try {...} catch {...}
syntax - 511. Checked and unchecked exceptions
- 512. Checked and unchecked exceptions
- 513. Expected exceptions in Junit
- 514. Just
finally
, nocatch
- 515.
try-with-resources
(Java™ 7) - 516. Scanner implementing
AutoCloseable
- 517. No
close()
method in e.g.class
String - 518. Method
printStackTrace()
- 519. Ascending inheritance ordering
- 520. Descending inheritance ordering
- 521. Implementing
convert
- 522. Problem: “Silent” errors
- 523. Step 1: Find exception base class
- 524. Step 2: Derive
CardinalException
- 525. Step 3: Throwing
CardinalException
- 526. Step 4: Unit test throwing
CardinalException
- 527.
Stack
of integer values - 528. Java™ collection features
- 529. Behind the scenes
- 530. Boxing and unboxing
- 531. Boxing syntax comparison
- 532. Parsing
Integer
user input - 533. Parsing binary representation
- 534. Standard parse methods
- 535. Excerpt from
java.util.Locale
- 536.
Locale
properties - 537. Get a
NumberFormat
instance - 538. Create a custom formatter
- 539. Polymorphic number parsing
- 540. Limited
float
precision - 541. Limited
double
precision - 542. Using
BigDecimal
- 543. Chaining
BigDecimal
operations - 544.
BigDecimal
features - 545. Using
static double random()
- 546. Seeding a pseudo random generator
- 547. Interface examples
- 548. Observations
- 549. Writing strings to file
- 550. Using
Text2File
- 551. Possible
Text2File
errors: - 552. Employ “try-with-resources”
- 553.
interface
syntax - 554. The
AutoCloseable
promise - 555.
abstract
class replacement - 556.
interface
vs.abstract
class - 557.
interface
MyAutoCloseable
- 558. Extending
MyAutoCloseable
to flush - 559. Using
MyFlushable
- 560. Inheritance hierarchy
- 561. Upcoming topics
- 562. Interfaces implemented by class
String
- 563. The
Comparable
interface - 564. class
String
andComparable
- 565. Comparison examples
- 566. Ascending and descending names
- 567. API requirements
- 568. Sorting strings alphabetically
- 569. Situation dependent sorting criteria
- 570. Implementing flexible sorting
- 571.
Comparator
in action - 572.
Case insensitive sort
- 573.
Sort descending by lambda expression
- 574. What's the use of hashing anyway?
- 575. Account hierarchy
- 576. Students and lecturers
- 577. An array of strings
- 578. An associative array describing month lengths
- 579. Grouping towns by country names
- 580. Collaborative efforts
- 581. Project rules
- 582. Internal code documentation
- 583. Internal code documentation hints
- 584. Javadoc™ mismatches
- 585. (Automated) tests
- 586. Deployment and execution
- 587. Marking criteria
- 588. Sample forecast session
- 589. Sample forecast invocation
- 590. Underlying data provider
- 591.
cities.list.json.gz
providing cities - 592. ma/Copy URL result to file
- 593. Parse city data
- 594. Parse weather data
- 595. Requirements
- 596. Logging
- 597. Minimalist token scanner
- 598. Scanner output
-1.34 0.34 + sqrt
- 599. Adding error detection
- 600. Error message
- 601. Running the currency converter terminal application.
- 602. Exam training by Guacamole
- 603. Environment hints:
- 604. Preparing an examination
- 605. Generating Javadoc™.
- 606. Programming hints
- 607. The implement - test - implement cycle
- 608. Finishing the exam
- 609. Personal examination cheat sheets
- 610. Unit tests in examinations
- 611. Example interface definition
- 612. Corresponding test
- 613. Don't cheat!
- 614. Unit tests strategy in examinations
- 615. Steps creating a new project
- 616. Creating a project at MI gitlab
- 617. Cloning a git project
- 618. Enter project folder, add
Readme.md
- 619. Committing change set
- 620. Push to upstream repository
- 621. Inserting a Maven project
- 622. git status 1
- 623. Adding Maven files to repository
- 624. git status 2
- 625. Commit Maven project files
- 626. git status 3
- 627. Push to upstream again
- 628. Reverting changes
- 629. Pull changes from upstream
- 630. Maven: Recommended reading
- 631. What is Maven anyway?
- 632. Maven: Facts and benefits
- 633. Convention Over Configuration
- 634. Maven project layout
- 635. The project object model file
- 636. pom.xml characteristics
- 637. pom.xml vs. Makefile
- 638. «Hello, world» pom.xml
- 639. Executing «compile» phase
- 640. Examining the Java™ version culprit
- 641. Resolving encoding / Java™ version issues
- 642. POM inheritance
- 643. The Super POM
- 644. pom-4.0.0.xml content
- 645. Favour https in
~/.m2/settings.xml
- 646. Resolving to effective pom.xml
- 647. Plugin architecture
- 648. Sample plugins
- 649. Example: The
maven-javadoc-plugin
- 650. Adding test capabilities
- 651. Dependency listing
- 652. Absence of hamcrest in
pom.xml
- 653.
~/.m2/repository/junit/junit/4.12/junit-4.12.pom
- 654. Transitive dependencies
- 655. Oblivious to test implementation: TestNG
- 656. Phases
- 657. Maven lifecyles and phases
- 658. hooking into phase
- 659. Why XML based publishing?
- 660. XML features
- 661. Editors, compositors, designers ...
- 662. Promises in publishing
- 663. Publishing reality
- 664. Single source publishing
- 665. Separating Structure, content and format
- 666. Separating concerns
- 667. Content
- 668. Hierarchical structure
- 669. Hierarchical structure, XML source
- 670. Presentation
- 671. Example 1: HTML 5, pure structure
- 672. Example 2: TeX / LaTeX
- 673. Separating structure and presentation(s)
- 674. Sample technical document
- 675. Observations
- 676. Pros and cons of TeX / LaTeX
- 677. Tools of the trade
- 678. Inline formatting
- 679. Paragraphs
- 680. Lists
- 681. Tables
- 682. Images
- 683. Mathematical formulas
- 684. Cross references
- 685. Document sectioning
- 686. Modular document components
- 687. What is Docbook?
- 688. Authoring and publishing
- 689. Document representation
- 690. Software centric schema
- 691. Document targets
- 692. Docbook components
- 693. Target format overview
- 694. Tooling / Software
- 695. Different schema languages
- 696. Plain HTML
- 697. Web help
- 698. Eclipse help
- 699. Printed output
- 700. Paragraph
- 701. Itemized list
- 702. Ordered list
- 703. Glossary list
- 704. Nested lists
- 705. Reference
- 706. A table
- 707. A MathML equation
- 708. A TeX equation
- 709. Reference
- 710. Figure
- 711. Image map + calloutlist
- 712. Video
- 713. A warning
- 714. Reference
- 715. Recursive sections
- 716. Non-recursive sections
- 717. Two different link flavours
- 718. Choosing a top level element
- 719. Allowed 5.1 top level elements
- 720. Schematron on top of RelaxNG
- 721. Example:
xml:id
and permalink - 722. Using Display #Anchors
- 723. Considerations author based permalink
- 724. Schematron permalink rule
- 725. HTML customization overview
- 726. Target specific configuration
- 727. Link stability
- 728.
use.id.as.filename = 1
- 729. Parameter: use.id.as.filename
- 730. Customization parameter ulink.target
- 731.
callout.unicode
/callout.graphics
- 732. Links
- 733. Hooking into XSL
- 734. Categories
- 735. Example: videos
- 736. Links
- 737. Customize by CSS
- 738. Example CSS modifications
- 739. Styling the editor
- 740. Motivating modular documents
- 741. Monolithic document problems
- 742. Document decomposition
- 743. A monolithic document
- 744. Decomposing documents
- 745. XML grammar defining languages
- 746. Address list schema
- 747. Format conversion problem
- 748. XSL template rules
- 749. Example: Formatting
<title>
elements - 750. Basic FO introduction
- 751. XMLMind Editor
- 752. Oxygenxml Author
- 753. Vendor links
- 754. Inverse editing
- 755. Document representation
- 756. Components
- 757. BibTeX
- 758. Makeindex example
- 759. Makeindex work flow
- 760. Extension example: MusiXTeX
- 761. Flavours
- 762. Components
- 763. Editors
- 764. reveal.js authoring tools: Principle
- 765. reveal.js features #1 of 3
- 766. reveal.js features #2 of 3
- 767. reveal.js features #3 of 3
- 768. reveal.js observations
- 769. Authoring tool project goals
- 770. Principle
- 771. Required / to be acquired skills
- 772. Principle
- 773. Codingbat: Desired features
- 774. Desired features
- 775. CRUD operation
- 776. Query
- 777. Schema
- 778. Procedures / triggers
- 779. Transactions / recovery
- 780. Data access control
- 781. API support
- 782. Installing Docker
- 783. Why LDAP?
- 784. LDAP introduction
- 785. Running a Docker container
- 786. Using docker-compose
- 787. Installing Apache Directory Studio
- 788. Administrator access to your DIT
- 789. Administrator access to your server's data tree
- 790. Administrator access to your server's configuration
- 791. Terminology
- 792. Adding an entry
- 793. Adding a new attribute
- 794. Replacing an attribute value
- 795. Deleting an attribute entirely
- 796. Multi valued attributes
- 797. Set semantics of multivalued attributes
- 798. Deleting selected attribute values
- 799. Query scope
- 800. Query filter
- 801. Schema support
- 802. Implementations
- 803. Implementations
- 804. Exercises
- 805. Why MongoDB?
- 806. Running a Docker container
- 807. Using docker-compose
- 808. Manual user creation (mongo-init.js fail)
- 809. Log in as user explorer
- 810. Using IntelliJ
- 811. Idea show all databases
- 812. Terminology / Hierarchy
- 813. Adding a document
- 814. Updating attributes
- 815. Deleting a document
- 816. Deleting multiple documents
- 817. Multi valued attributes
- 818. Set semantics of multivalued attributes
- 819. Deleting selected attribute values
- 820. Deleting an attribute
- 821. Query filter
- 822. Schema validation support
- 823. Violating required field
- 824. Schema types
- 825. Enforcing unique keys
- 826. On the downside
- 827. Implementations
- 828. Implementations
- 829. Sharding rationale
- 830. Sharding rationale
- 831. Exercises
- 832. Prerequisite knowledge
- 833. Persistence [Bauer2015]
- 834. Java™ transient instances
- 835. RDBMS persistent records
- 836. Persisting transient
User
instances - 837. Observations
- 838. Networking between clients and database server
- 839. JDBC™ features
- 840. JDBC™ in a three-tier application
- 841. JDBC™ connecting application server and database.
- 842. JDBC™ connection parameter
- 843. Components of a JDBC™ URL
- 844. IETF Uniform Resource Identifier
- 845. URL examples
- 846. Sub protocol examples
- 847. No standard port assignments ...
- 848. ... but Postgresql made it into Linux
- 849. JDBC™ architecture
- 850.
DriverManager
: Bootstrapping connections - 851. Example: Mysql connection implementation
- 852. Driver libraries
- 853. Driver libraries by Maven
- 854. Driver unavailable
- 855.
Connection
interface - 856.
Statement
interface - 857. JDBC™ instances and relationships.
- 858. Important
Connection
methods - 859. Important
Statement
methods - 860. JDBC™ and threading.
- 861. JDBC™ connection pooling
- 862.
pom.xml
driver runtime scope - 863.
Person
table - 864. Objective: insert person record
- 865. JDBC™ backed data insert
- 866. Result
- 867. Two JDBC™ configurations
- 868. Figure 865, “JDBC™ backed data insert ” deficiencies
- 869. Why properties?
- 870.
message.properties
string externalization - 871. Properties code sketch
- 872. Intellij IDEA settings, preconditions
- 873. Database related unit test phases
- 874. Implementing unit tests
- 875. Spring is your friend
- 876. Project layout
- 877. Closing connections
- 878. Employ
AutoCloseable
- 879. Sniffing a JDBC™ connection by an intruder.
- 880. Setting up Wireshark
- 881. Capturing results
- 882. Mysql™ security
- 883. Mysql™ security
- 884. Assembling SQL
- 885. SQL injection principle
- 886. Preventing traffic tickets
- 887. Trouble at school
- 888. SQL injection impact
- 889. SQL injection relevance, [Clarke2009]
- 890. Handling injection attacks, part 1
- 891. Handling injection attacks, part 2
- 892. Input filtering
- 893. Validating user input prior to dynamically composing SQL statements.
- 894. Error message being presented to the user.
- 895. SQL statements in Java™ applications get parsed at the database server
- 896. Two questions
- 897. Addressing performance
- 898. Addressing performance mitigation
- 899. Restating the SQL injection problem
- 900. Solution: Use
java.sql.PreparedStatement
- 901.
PreparedStatement
principle. - 902. Three phases using parameterized queries
- 903.
PreparedStatement
example - 904. Injection attempt example
- 905. Limitation: No dynamic table support!
- 906. JDBC™ read and write
- 907. Server / client object's life cycle
- 908. JDBC™ record container
- 909. Reading data from a database server.
- 910. Names and birth dates of friends
- 911. Accessing friend's database records
- 912. Important
ResultSet
states - 913. JDBC™ to Java™ type conversions
- 914. Java™ to JDBC™ type conversions
- 915. Error prone type accessors!
- 916. Polymorphic accessor
- 917. Access by column name
- 918. Access by column index
- 919. Problem:
null
value ambiguity - 920. Resolving
null
value ambiguity - 921. Problem: Dynamic driver configuration
- 922. Shim driver (facade)
- 923. Users and groups
- 924. Isolation level
- 925. JDBC™ Isolation level
- 926. Setting the isolation level
- 927. Reasons for using Maven
- 928. Transitive dependencies
- 929. A basic
persistence.xml
JPA configuration file. - 930. JPA persistence provider
- 931. Mapping
hibintro.v1.model.User
instances to a database. - 932. A basic
User
class. - 933. Mapping properties to attributes.
- 934. Annotating integrity constraints
- 935. Database schema mapping instances of
hibintro.v1.model.User
. - 936. Loading a single object by a primary key value.
- 937. Retrieving
hibintro.v1.model.User
instances by HQL. - 938. Business rules for projects
- 939. Persistence related object states
- 940. Introducing inheritance mapping
- 941. Modelling payment.
- 942. A single relation mapping.
- 943. Mapping the inheritance hierarchy.
- 944. Inserting payment information
- 945. Figure subclasses
- 946. Joined subclass mapping.
- 947. Implementing
Object.equals(Object)
by natural keys - 948. JPA caches.
- 949. Common project steps #1/3
- 950. Common project steps #2/3
- 951. Common project steps #3/3
- 952. UNIX grep sample
- 953. Database grep requirements
- 954. Connection profile handling
- 955. Search level specification
- 956. Property based searches
- 957. Shell / Bash
- 958. Secure Shell
- 959. Working with files
- 960. Gathering network related information
- 961. Handle processes
- 962. vim text editor introduction
- 963. Creating a ssh public/private key pair
- 964. Configuration file permissions on windows network file systems
- 965. Resulting permissions and configuration test
- 966. Suggested readings:
- 967.
.deb
packages - 968. The dpkg command
- 969. The apt command
- 970. Rationale using PPA's
- 971. Create and publish a Hetzner account
- 972. Current server security flaws
- 973. Preliminary: Create an ssh key pair
- 974. Cleaning up!
- 975. Subdomain per group
- 976. Key file location
- 977. Querying DNS by zone transfer
- 978. Creating an
A
record - 979. Modify by delete/create
- 980. What's it all about?
- 981. Terraform resources
- 982. Hetzner API token
- 983. Minimal Terraform configuration
- 984. Terraform init
- 985. Terraform plan
- 986. Terraform apply
- 987. A word on storing secrets
- 988. Credentials by E-Mail
- 989. Problems: 😟
- 990. ssh access, firewall
- 991. ssh access, public key
- 992. Apply ssh key access
- 993. Output data details #1/2
- 994. Output data details #2/2
- 995. Problem 2: VCS and visible provider API token 😱
- 996. Solution by variable
- 997. Solution by file
- 998. Introduction and reference
- 999. In a nutshell
- 1000. Configuration options
- 1001. Terraform interface to Cloud Init
- 1002. »hello, world ...«
userData.yml
file - 1003. Using and debugging template files
- 1004. Template files demo
- 1005. Validation
- 1006. Watch out for your enemies!
- 1007. Problem: Duplicate
known_hosts
entry on re-creating server - 1008. Solution: Generating
known_hosts
... - 1009. ... and ssh wrapper
- 1010. Failsafe console login
- 1011. Avoiding Yaml parsing issues
- 1012. A volume: The easy way
- 1013. Volume details
- 1014. Providing a mount point's name
- 1015. Solution: Independent resource creation
- 1016. Private subnet overview
- 1017. Terraform subnet creation
- 1018. Gateway host
- 1019. intern host
- 1020. Lack of internet access
- 1021. Possible solutions
- 1022. http proxy apt-cacher-ng
- 1023. Cloud-init problem
- 1024. Service ready query script
- 1025. Terraform “service ready” dependency hook
- 1026. Bind server
ns1.sdi.hdm-stuttgart.cloud
- 1027. DNS provider
- 1028. Defining an “A” record
- 1029. Understanding web certificates
- 1030. Certificate trust level
- 1031. Certificates by Terraform
- 1032.
dns_challenge
provider - 1033. rfc2136 provider configuration
- 1034. Bind server logfile
- 1035. Terraform module Documentation
- 1036. Example: Creating
bin/ssh
andgen/known_hosts
- 1037. Local file generation by module
- 1038. Module implementation
- 1039. Careful: local vs. parent context
- 1040. Loop documentation
- 1041. Using count
- 1042. ssh-keygen generating an elliptic key
- 1043. Result of ssh-keygen execution
- 1044. Extended ACLs, ways too open
- 1045. Revoking permissions using setfacl
- 1046. Corrected permissions
- 1047. Logging in
- 1048. Documentation links
- 1049. DNS query commands
- 1050. DNS forward lookup
- 1051. Display A-record result only
- 1052. Important record types
- 1053. Name Servers: Query type
NS
- 1054. Recommended readings
- 1055. Openldap server documentation
- 1056. What is LDAP anyway?
- 1057. LDAP Server cli bind
- 1058. Document Information Tree (DIT)
- 1059. Relative and absolute DNs
- 1060. User example
- 1061. objectClass
- 1062. objectClass clarifications
- 1063. Augmenting
inetOrgPerson
byposixAccount
- 1064. Structural objectClass definitions
- 1065. Search scopes
- 1066. Predicate based queries
- 1067. LDAP bind types
- 1068. LDIF exchange format
- 1069. LDIF sample
- 1070. OpenLdap server architecture
- 1071. An example LDAP Tree
- 1072. External documentation
- 1073. URI to filesystem mapping
- 1074. Virtual hosting
- 1075. Implementing virtual hosting
- 1076. IP based virtual hosting
- 1077. IP based, pros / cons
- 1078. Name based virtual hosting
- 1079. Name based, pros / cons
- 1080. LDAP backed authentication
- 1081. PHP FPM server
- 1082. File services
- 1083. Customer demands
- 1084. Driving factors
- 1085. Selected cloud file services
- 1086. Selected self hosting products
- 1087. Nextcloud features
- 1088. Lightning integration
- 1089. Installation
- 1090. Docker hub
- 1091. Search images
- 1092. Pull image using CLI
- 1093. Pull Nextcloud image
- 1094. Nextcloud based on Alpine
- 1095. Inspect image
- 1096. Search an image's tags
- 1097. Nextcloud image by version
- 1098. List images by CLI
- 1099. Nextcloud latest image
- 1100. Duplicate Nextcloud images
- 1101. Maven ringing a bell?
- 1102. Un tag image by version
- 1103. Remove image by version
- 1104. Starting Nextcloud container
- 1105. List running containers
- 1106. Enter running container
- 1107. Remove container
- 1108. List volumes
- 1109. List orphaned volumes
- 1110. Remove volumes
List of Tables
- 1. 4 Byte Two's
complement representation of
int
values. - 2. Exercises in 113105 Software development 1
- 3. Exercises in Technical Documentation
- 4. Exercises in 113473 Database and application development
- 5. Exercises in Software defined Infrastructure
- 6. Exercises in Persistence strategies and application development