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