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