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