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