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