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