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