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