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