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