Lecture notes

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
Lecture related resources
Using the exercises
Common software development related resources
Coached exercises
Using plain Java
Play!
Hello, World and friends.
Simple calculations
A conditional
A loop
Using Maven and Intellij IDEA
Maven command line usage
Intellij IDEA on top of Maven
Examination hints.
Starting an exam
Implementing the project skeleton
Finish the exam
Language Fundamentals
Integer, ASCII and Unicode
Primitive types
Variables
Literals
Arithmetic limitations
Conversions
Operators and expressions
Arithmetic and logical operators
Assignment operators
Unary operators
Comments
Statements
The if conditional statement
if-then-else
Using else if
The switch statement
Loops
while
do ... while
for
Logic related external exercises
Using automated tests.
Objects and Classes
Working with objects
Packages
Object methods
Encapsulation and access control
Getter and setter methods
Signatures
Method overloading
Constructors
Scopes
Class members and methods
A mathematical table.
Interest calculations
Lotteries revisited
The greatest common divisor and the common multiple
Project dependencies and Maven
Building a library of mathematical functions.
Unit testing
Tests and implementation
Improving the algorithm
Helpful Junit methods
Technical details
Value types and reference types
Method calls, the details
Enumerations (enum).
Enumeration by integer representation
Enumeration by dedicated class
Defining a private constructor
enum replacing class
Using git
Working with git locally.
Shared development with centralized remote.
Conflicts
Core Classes
Objects, equals() and hash-values
Reconsidering System.out.format().
Using class Math
String exercises
Analyzing file pathnames
Arrays
java.util.Arrays helpers
Extending arrays
Storing integer values
Understanding static public int main(String[] args)
Multi-dimensional arrays
Tic-tac-toe
Tic-tac-toe using a two-dimensional array
Changing the game's internal representation
Tic-tac-toe, Computer vs. human
Providing statistical data
Prime numbers revisited
A simple algorithm
Improving performance
The median of a given sample.
Plotting functions
Inheritance
Overriding equals() and hashCode()
Overriding toString()
final methods
Abstract methods
Geometry classes reconsidered
protected access
final classes
The instanceof operator
The @Override annotation.
Error Handling
Checked vs unchecked exceptions
Exceptions and Junit
Variants
Class java.lang.Exception
Working with Numbers
Boxing and Unboxing
Number Parsing
Number Formatting
Working with Money
Generating Random Numbers
interface definitions and abstract Classes
Interfaces and sorting
A nonsense generator
An interface based plotter
Application deployment I
Preparations
Exercises
Part II, Exercises
Reading character streams
Preparations
Exercises
Collections
Preparations
Collections I, Exercises
A Set of Strings
A List of Strings
Defining a Coordinate class
A Set of Coordinate instances
Collections I, Exercises
Getting a Set of strings from a text file
Result string ordering
Sorting strings in an unusual way
Result string ordering
Collections III, Exercises
Collections IV, Exercises
Maps 1, Preparations
Exercises
Towns and country names
Creating an overview of grades
Appendix
Examination hints
Examination bonus point projects
Weather forecast
Reverse Polish notation (RPN) calculator
Currency converter, Summer 2017
An address database, Winter 2016
Poor man's UNIX grep, Summer 2016
Project Euler's sieve, Winter 2015
Working with git
Apache Maven
The project object model pom.xml
Plugins
Dependencies
Lifecycle, phases and goals
Past Software Development 1 examinations
SD1 examination summer 2020
SD1 examination winter 2019
SD1 examination summer 2019
SE1 Klausur Winter 2018
SE1 Klausur Sommer 2018
List of Exercises
Technical Documentation
Software independent considerations
General remarks
Common building blocks
Block level elements
Docbook
Target formats
Selected elements
Schematron
Customizing
Assemblies
Styling the editor application
Modular documents
RelaxNG Schema
Transforming documents
Target format HTML
Target format print
Software
Frontends
Backends
TeX / LaTeX
Docbook
Exercises
LaTeX
LaTeX hello,... world
Important elements
Macro
A complete document
Docbook
Possible projects
Representing and editing BiBTeX data
Codingbat reloaded
XML based exercise compilations
Past projects
List of Exercises
113473 Database and application development
Database features
Selected database products overview
Openldap
Installation
Features
Exercises
Mongodb
Installation
Features
Exercises
JDBC
UNIX to SQL to LDAP
Transactions in JDBC
Account Transfer using pessimistic concurrency control
Account Transfer using optimistic concurrency control
JPA
Configuring a Maven based Eclipse Java™ project with Hibernate
Creating a JPA configuration
A round trip working with objects
Persisting objects
Loading Objects by primary key
Loading objects by queries
Criteria based queries
Mapping single entities and database tables
Transient properties
Properties and NULL values
Defining keys
Composed keys
Indexes (non-unique)
Renaming tables and attributes
Changing the default type mapping
Object states and transitions
XML to JPA using JAXB
Inheritance
Single table per class hierarchy
Joined subclasses
Table per concrete class
Mapping related Components and entities
Primary keys revisited
Entity and value types
Mapping components
Caching
orphanRemoval vs. CascadeType.DELETE
List of Exercises
Software defined Infrastructure
UNIX / LINUX Basics
Prerequisites
Ubuntu / Debian Package management
Prerequisites
Getting started
Accessing your virtual machine
Global configurations
DNS
Preliminaries
Exercises
Querying DNS data.
Installing Bind
Reverse lookups
Forwarders
Mail exchange record
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
Filter based search
Extending an existing entry
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
Preliminaries
Exercises
First Steps
Virtual hosts
SSL / TLS Support
LDAP authentication
Mysql™ database administration
Providing WEB based user management to your LDAP Server
Publish your documentation
File cloud
Exercises
Network file systems served by Samba
Prerequisites
Samba server installation
Mail
Recommended Preparations
Exercises
Install and send to local Users
Authentication Setup and Virtual Users
TLS
Spam and Virus defense
Docker
Introduction
Managing images
Running container
Volumes
Exercises
The simple way: Using SQLite
The real McCoy: Using Mariadb
Icinga
Functional checks
SNMP based checks
ssh based checks
Persistence strategies and application development
Selected topics related to persistence in application development
Recommended reading
Getting started
Creating a Hibernate JPA project
Adding keys and AUTO_INCREMENT
Advocating simple key definitions
List of Exercises
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. 4 most imperative study objectives
6. Online tutorials
7. Unix and the terminal
8. Online programming, automated feedback
9. Online programming I
10. Online programming II
11. Java Visualizer
12. Live lecture additions
13. Intellij IDEA IDE (See installation details)
14. Virtualbox / VMware player based virtualized Linux image
15. Virtualbox™ settings
16. Embedded exercises
17. Using the exercises
18. HdM mail server
19. Configure MI VPN client access
20. MI Cloud server
21. E-examination resources
22. MI File server
23. MI Git versioning server
24. Coached exercises
25. Bonus points
26. Seminar rules / bonus points
27. Edit - compile - execute
28. Editing Java™ files
29. Defining class HelloWorld
30. Compiling Java™ file
31. Command line Java™ file compilation
32. Java byte code file HelloWorld.class
33. Source code vs. bytecode
34. Executing byte code file HelloWorld.class
35. Shell byte code file HelloWorld.class execution
36. JDK™ installation options
37. Downloading IntelliJ idea
38. Idea »Ultimate« license types
39. HdM license server
40. Using Maven
41. Maven archetypes
42. Supplementary MI Maven archetypes
43. CLI archetype test
44. CLI archetype details
45. Generated project layout
46. Maven compile
47. Compilation file view
48. Execution
49. Maven package
50. Executing Java™ archive first-0.9.jar
51. Maven javadoc:javadoc
52. Maven clean
53. Intellij IDEA Maven support
54. Intellij IDEA Maven archetype catalog plugin
55. Intellij IDEA MI archetype repository configuration
56. New MI archetype project
57. Selecting an archetype
58. Providing project identifier
59. Your project's root
60. pom.xml content changes
61. Intellij IDEA generating Javadoc
62. Preparing an examination
63. Generating Javadoc™.
64. Programming hints
65. The implement - test - implement cycle
66. Finishing the exam
67. Manual calculation: Abacus
68. Mechanical calculation: Cash register
69. Electromechanical calculation: Zuse Z3
70. Vacuum Tube: Eniac
71. Transistor: Microprocessor ICs
72. Z80 8-bit data bus
73. Progress in hardware
74. Simple facts:
75. Unsigned 3 bit integer representation
76. Binary system addition
77. 3 bit two-complement representation
78. 3 bit two complement rationale: Usual addition
79. Signed 8 bit integer binary representation
80. 7-bit ASCII
81. 7-bit ASCII with even parity bit
82. Western European characters: ISO Latin 1 encoding
83. Unicode UTF-8 samples
84. Java types
85. Java primitive types, Part 1
86. Java primitive types, Part 2
87. Variables: Handles to memory
88. Variable declaration
89. Declare, assign and use
90. Combining declaration and initialization
91. Multiple variables of same type
92. Identifier in Java™:
93. Identifier name examples:
94. Java™ keywords.
95. Variable naming conventions
96. Constant variables
97. Case sensitivity
98. Define before use
99. Type safety
100. Compile time analysis
101. Forcing conversions
102. Watch out!
103. Casting long to int
104. Don't worry, be happy ...
105. ... and watch the outcome
106. From the report
107. Maximum and minimum values
108. Dynamic typing in PERL
109. Dynamic typing in PERL, part 2
110. Using final
111. Two categories of variables
112. Reference type examples
113. float and double
114. Four ways representing 35
115. Choose your output representation
116. Know your limits!
117. Literal examples
118. int literals
119. int literals explained
120. Java™ primitive literals
121. JavaString and null literals
122. Just kidding ...
123. Strange things I
124. Strange things II
125. Arithmetic overflow pitfalls
126. Limited precision
127. Nearest float to 2.1
128. FloatConverter
129. Widening from byte literal to short
130. Narrowing from int literal to char variable
131. A widening «ladder»
132. A narrowing «ladder»
133. The binary plus operator
134. Binary operator output type
135. Detecting arithmetic overflow (Java 8+)
136. Dividing by zero
137. Generic binary operator
138. The modulus operator %
139. Binary operator type examples
140. No binary + operator yielding byte
141. int expression assignment
142. Constant expression assignment
143. The logical and operator &
144. The += operator
145. The &= operator
146. Assignment operators #1 / 2
147. Assignment operators #2 / 2
148. Increment operator ++
149. Prefix and postfix notation
150. Operator examples
151. Java™ comment flavors
152. Inline comments
153. Javadoc™ comments
154. Purposes of statements
155. Statements: General syntax
156. Statement examples: Declaring and assigning variables
157. Expression vs. statement
158. Multiple statements per line
159. Debugging multiple statements per line
160. Blocks
161. Conditional block execution
162. if syntax
163. if ... else
164. if ... else syntax
165. Best practices comparing for equality
166. Single statement branches
167. Aside: Corporate network security
168. Online banking
169. DNS Spoofing
170. Turn DNS name into IP address
171. SSL Certificate error
172. The Apple goto fail SSL bug
173. Static code analysis
174. Nested if ... else
175. Enhanced readability: if ... else if ... else
176. if ... else if ... else syntax
177. User input recipe
178. Using a Scanner class collecting user input.
179. Converting numbers to day's names
180. Numbers to day's names: The hard way
181. Better: Using switch
182. switch Syntax
183. Switching on strings
184. Why loops?
185. Arbitrary number of repetitions
186. A while loop
187. Combining increment and termination condition
188. while syntax
189. Empty while body
190. A do ... while loop
191. do ... while syntax
192. Frequent usage of while
193. Replacing while by for
194. for syntax
195. for variable scope
196. for variable scope equivalence
197. for vs. while relationship
198. Nested loops
199. Better readability: Use row and column in favour of i and j
200. Calculating values
201. Response to coding errors
202. Unit test concept
203. alarmClock(...) with errors
204. Testing alarmClock(...)
205. Testing alarmClock(...) details
206. Instances of a Class
207. General class structure
208. What's a class anyway?
209. Rectangle objects
210. A class describing rectangles
211. Rectangle class and instances
212. Generated diagrams
213. The new operator: Creating rectangle instances
214. Syntax creating instances
215. Assigning attribute values to class instances
216. Instance memory representation
217. References and null
218. Checking for object presence
219. Why packages ?
220. Rules and conventions
221. Fully qualified class name vs. import
222. Don't be too lazy!
223. Special: Classes in package java.lang
224. Class, package and file system
225. Source hierarchy view
226. Object methods
227. Scaling a rectangle
228. Scaling method implementation
229. Scaling method signature
230. Using the scale(...) method
231. Method definition syntax
232. A rectangle's perimeter
233. getPerimeter() method implementation
234. Using Rectangle.getPerimeter()
235. Access control: Overall objectives
236. Example: Implementing time and date
237. Access violation
238. Access rules
239. Tips on Choosing an Access Level
240. Direct access vs. setter method
241. Why adding setter methods?
242. Implementation by minutes only
243. Defining type signatures
244. Type signature examples
245. Defining method signatures
246. Method signature examples
247. Method overloading: Same name, different signature
248. Overloading, alternate names
249. No such concept in C
250. What about return type?
251. Method signatures rationale
252. Method signatures rationale
253. Example: System.out.print(...)
254. Creating and initializing rectangles
255. Defining a constructor
256. Constructor syntax
257. Constructors
258. Multiple overloaded constructors
259. Constructor calls within constructor
260. Instances by overloaded constructors
261. No constructor vs. default constructor
262. Non - default constructor, but no default constructor
263. Employee example package hierarchy
264. Circle and variable scopes
265. Documenting classes and methods
266. Generated Javadoc
267. Refactoring «r» ⇒ «radius»
268. Scope assignment problem
269. this overriding method scope
270. Club membership objectives
271. Implementing club members.
272. Showing membership info.
273. Implementing membership numbers.
274. Showing membership numbers.
275. Member creation steps
276. Accessing the club's overall member count?
277. Accessing the club's member count
278. Do we really require an instance?
279. static: Favour class method over instance method
280. Syntax accessing class members
281. static / non-static wrap up
282. Finally understanding System.out.print(ln)
283. Newton's letter to Robert Hooke
284. Project «lottery» depending on «helper»
285. Providing project «helper»
286. Install project «Helper»
287. helper-0.9.jar archive content
288. Consuming project «Lottery»
289. External libraries view
290. Using Helper.factorial(...) computing ( n k ) = n ! k ! ( n - k ) !
291. Maven artifact dependency.
292. Maven repositories
293. Pascal's triangle representing binomial coefficients.
294. An implementation sketch for the exponential
295. Comparing exponential and approximation
296. Comparing sin(x) and its approximation.
297. Recommended reading
298. Test categories
299. Example: Computing prime numbers
300. Unit test principle
301. Test driven development
302. Steps in Unit Testing
303. Step 1 + 2: Specify method, write skeleton
304. Execution yet being flawed
305. Sample test data
306. Step 3: Junit based specification test
307. Junit skeleton test result (Maven CLI)
308. Junit skeleton test result (IDE)
309. Step 3: Providing more prime tests
310. Step 3: Prime mass testing
311. Step 4: Implement skeleton
312. Step 5: Testing our first implementation
313. Implementation observation
314. Changing the implementation
315. Regression test
316. Systematic error debugging
317. Error correction in detail
318. Available comparison methods
319. Caution comparing float / double !!
320. Weird arithmetics?
321. Limited representation precision
322. Solving the issue
323. The @Test annotation
324. The Assert class
325. Importing dependencies
326. Dependency archive content
327. Value vs. reference type variables
328. Different behaviour!
329. Value variable Details
330. Reference variable Details
331. Only «call-by-value» in Java
332. «call-by-value» details
333. «call-by-reference» for objects?
334. «call-by-reference» details
335. No «call-by-reference» in Java™!
336. No «call-by-reference» details
337. C++ offers «call-by-reference» by virtue of &
338. C++ «call-by-reference» details
339. Method calling
340. Three variable scopes
341. Scope lifetimes
342. Two runtime memory categories
343. Stack: Four operations
344. Example: Storing integer values
345. Method calling
346. Call stack trace
347. IDE debugger
348. Motivation
349. Weekly offered lectures
350. Weekly offered lectures by simple numbers
351. Weekdays int representation
352. Weekly offered lectures using constants
353. Converting index values to day names
354. Providing lecture info
355. Sample lectures
356. Bogus index value
357. Pitfall: Method argument order mismatch
358. Enumeration by class instances
359. Class instance per enumeration value
360. switch no longer works
361. Re-writing getPrice()
362. Compile time argument mismatch error
363. Pitfall: Creating an undesired instance
364. Define a private Day constructor
365. Preventing undesired Day instance creation
366. Adding a day name attribute
367. enum Day replacing public class Day
368. switch statements working again
369. enum constructor being implicitly private
370. From https://www.urbandictionary.com
371. Useful links
372. Initialize git project
373. Configure author related data.
374. Adding resources to project index and staging area
375. Committing change set
376. Project versioning status
377. Adding a comment
378. git diff tracing changes
379. Reverting individual file.
380. Compiling, Math.class and Print.class.
381. Math.class, Print.class and versioning.
382. Show project's log
383. Switch to an older revision ...
384. ... and forth to current master's HEAD
385. Centralized remote repository
386. Step 1: Create remote repository
387. Step 2: Retrieve remote repository address
388. Step 2: Connect to remote repository
389. Step 3: Push local to remote
390. Step 3: Pull remote to local
391. Alternative: Create remote, then clone
392. Conflicting changes
393. Commit schedule
394. User B: git push fails
395. User B: git pull fails as well
396. Merge conflict details
397. Struggling for resolution
398. Merging Print.java manually
399. Commit and push merge
400. Superclass Object
401. String literals
402. OpenJDK String implementation
403. String copy constructor
404. Copy constructor and heap
405. Operator == and equals()
406. Remarks == vs. equals()
407. Hashing principle
408. Quickly identify by simple value
409. Hashing in Java and equals()
410. Rectangle equals(...) and hashCode()
411. Rectangle hash values
412. Better hashCode() method
413. Motivating Arrays
414. Per member repeating tasks
415. Example: int array of primes
416. Loop prime values
417. Mind the limit!
418. Safer: Using length
419. Even better: for-each style loop
420. Mind the limit, part two
421. One step initialization
422. Array
423. Two syntax variants
424. Array instances are special!
425. Array creation details
426. Array parameter passing
427. Parameter passing details
428. Value and reference types
429. Arrays.toString(...) and Arrays.sort(...)
430. Arrays.binarySearch(...)
431. Arrays.fill(...)
432. Arrays.copyOfRange(...)
433. Arrays.equals(...)
434. Lack of extendability
435. Extending an array
436. Extension result
437. Using Arrays.copyOf()
438. public static void main(String[] args)
439. Intellij IDEA run configuration
440. Intellij IDEA run configuration
441. Creating executable jar
442. Two-dimensional arrays
443. Behind the scenes
444. Memory allocation
445. Static array initialization
446. Static array initialization, variable lengths
447. Two Tic-tac-toe players fighting each other.
448. Two Tic-tac-toe players fighting each other.
449. Guess who's inheriting the money
450. Biology and inheritance
451. Duplicate code
452. Idea: Centralize common code
453. Common and specific properties
454. Basic shape inheritance
455. Inheritance
456. Implementing Shape hierarchy
457. Creating instances
458. Shape constructor
459. Creating Rectangle instances
460. Rectangle constructor
461. Shape.equals()
462. Rectangle.equals()
463. Shape log info
464. Overwriting toString()
465. Shape extending Object
466. Logging Rectangle instances
467. Override toString() again.
468. Rectangle extending Shape
469. Implementing Circle.toString()
470. Shape and toString()
471. Moving Shape instances
472. Implementing Shape movements
473. Fools are everywhere!
474. Solution: final prevents overriding
475. Calculating a shape's area
476. Desired: Polymorphic getArea() call
477. Problems:
478. abstract method getArea()
479. abstract method getArea()
480. What's a shape anyway?
481. No instances of abstract classes.
482. Mandatory getArea() implementation.
483. Facts about abstract fields, methods and classes.
484. Moving shapes
485. protected access
486. final classes
487. final classes rationale
488. Defeating polymorphism
489. Defining equals(...): Expectations
490. Defining equals(...) of Shape instances
491. Comparing center coordinates
492. Implementing Rectangle.equals()
493. Implementing Circle.equals()
494. Testing equality of Shape objects
495. Overriding Object.toString()
496. @Override: Easy compile time error detection
497. Compile- and runtime errors
498. NullPointerException (NPE for short)
499. NullPointerException is a class
500. Throwing an exception
501. Catching an exception by try {...} catch {...}
502. try {...} catch {...} syntax
503. Checked and unchecked exceptions
504. Checked and unchecked exceptions
505. Expected exceptions in Junit
506. Just finally, no catch
507. try-with-resources (Java™ 7)
508. Method printStackTrace()
509. Ascending inheritance ordering
510. Descending inheritance ordering
511. Implementing convert
512. Problem: Silent errors
513. Step 1: Find exception base class
514. Step 2: Derive CardinalException
515. Step 3: Throwing CardinalException
516. Step 4: Unit test throwing CardinalException
517. Stack of integer values
518. Java™ collection features
519. Behind the scenes
520. Boxing and unboxing
521. Boxing syntax comparison
522. Parsing Integer user input
523. Parsing binary representation
524. Standard parse methods
525. Excerpt from java.util.Locale
526. Locale properties
527. Get a NumberFormat instance
528. Create a custom formatter
529. Polymorphic number parsing
530. Limited float precision
531. Limited double precision
532. Using BigDecimal
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 and Comparable
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. Personal examination cheat sheets
570. Unit tests in examinations
571. Example interface definition
572. Corresponding test
573. Unit tests strategy in examinations
574. Collaborative efforts
575. Project rules
576. Internal code documentation
577. Internal code documentation hints
578. Javadoc™ mismatches
579. (Automated) tests
580. Deployment and execution
581. Marking criteria
582. Sample forecast session
583. Sample forecast invocation
584. Underlying data provider
585. cities.list.json.gz providing cities
586. ma/Copy URL result to file
587. Parse city data
588. Parse weather data
589. Requirements
590. Logging
591. Minimalist token scanner
592. Scanner output -1.34 0.34 + sqrt
593. Adding error detection
594. Error message
595. Running the currency converter terminal application.
596. Steps creating a new project
597. Creating a project at MI gitlab
598. Cloning a git project
599. Enter project folder, add Readme.md
600. Committing change set
601. Push to upstream repository
602. Inserting a Maven project
603. git status 1
604. Adding Maven files to repository
605. git status 2
606. Commit Maven project files
607. git status 3
608. Push to upstream again
609. Reverting changes
610. Pull changes from upstream
611. Maven: Recommended reading
612. What is Maven anyway?
613. Maven: Facts and benefits
614. Convention Over Configuration
615. Maven project layout
616. The project object model file
617. pom.xml characteristics
618. pom.xml vs. Makefile
619. «Hello, world» pom.xml
620. Executing «compile» phase
621. Examining the Java™ version culprit
622. Resolving encoding / Java™ version issues
623. POM inheritance
624. The Super POM
625. pom-4.0.0.xml content
626. Favour https in ~/.m2/settings.xml
627. Resolving to effective pom.xml
628. Plugin architecture
629. Sample plugins
630. Example: The maven-javadoc-plugin
631. Adding test capabilities
632. Dependency listing
633. Absence of hamcrest in pom.xml
634. ~/.m2/repository/junit/junit/4.12/junit-4.12.pom
635. Transitive dependencies
636. Oblivious to test implementation: TestNG
637. Phases
638. Maven lifecyles and phases
639. hooking into phase
640. Why XML based publishing?
641. XML features
642. Editors, compositors, designers ...
643. Promises in publishing
644. Publishing reality
645. Single source publishing
646. Separating Structure, content and format
647. Separating concerns
648. Content
649. Hierarchical structure
650. Hierarchical structure, XML source
651. Presentation
652. Example 1: HTML 5, pure structure
653. Example 2: TeX / LaTeX
654. Separating structure and presentation(s)
655. Sample technical document
656. Observations
657. Pros and cons of TeX / LaTeX
658. Tools of the trade
659. Inline formatting
660. Paragraphs
661. Lists
662. Tables
663. Images
664. Mathematical formulas
665. Cross references
666. Document sectioning
667. Modular document components
668. What is Docbook?
669. Authoring and publishing
670. Document representation
671. Software centric schema
672. Document targets
673. Docbook components
674. Target format overview
675. Tooling / Software
676. Different schema languages
677. Plain HTML
678. Web help
679. Eclipse help
680. Printed output
681. Paragraph
682. Itemized list
683. Ordered list
684. Glossary list
685. Nested lists
686. Reference
687. A table
688. A MathML equation
689. A TeX equation
690. Reference
691. Figure
692. Image map + calloutlist
693. Video
694. A warning
695. Reference
696. Recursive sections
697. Non-recursive sections
698. Two different link flavours
699. Choosing a top level element
700. Allowed 5.1 top level elements
701. Schematron on top of RelaxNG
702. Example: xml:id and permalink
703. Using Display #Anchors
704. Considerations author based permalink
705. Schematron permalink rule
706. HTML customization overview
707. Target specific configuration
708. Link stability
709. use.id.as.filename = 1
710. Parameter: use.id.as.filename
711. Customization parameter ulink.target
712. callout.unicode / callout.graphics
713. Links
714. Hooking into XSL
715. Categories
716. Example: videos
717. Links
718. Customize by CSS
719. Example CSS modifications
720. Styling the editor
721. Motivating modular documents
722. Monolithic document problems
723. Document decomposition
724. A monolithic document
725. Decomposing documents
726. XML grammar defining languages
727. Address list schema
728. Format conversion problem
729. XSL template rules
730. Example: Formatting <title> elements
731. Basic FO introduction
732. XMLMind Editor
733. Oxygenxml Author
734. Vendor links
735. Inverse editing
736. Document representation
737. Components
738. BibTeX
739. Makeindex example
740. Makeindex work flow
741. Extension example: MusiXTeX
742. Flavours
743. Components
744. Editors
745. Example BiBTeX data
746. BiBTeX: Tasks
747. Codingbat: Desired features
748. Desired features
749. CRUD operation
750. Query
751. Schema
752. Procedures / triggers
753. Transactions / recovery
754. Data access control
755. API support
756. Installing Docker
757. Why LDAP?
758. LDAP introduction
759. Running a Docker container
760. Using docker-compose
761. Installing Apache Directory Studio
762. Administrator access to your DIT
763. Administrator access to your server's configuration
764. Terminology
765. Adding an entry
766. Adding a new attribute
767. Replacing an attribute value
768. Deleting an attribute entirely
769. Multi valued attributes
770. Set semantics of multivalued attributes
771. Deleting selected attribute values
772. Query scope
773. Query filter
774. Schema support
775. Implementations
776. Implementations
777. Exercises
778. Why MongoDB?
779. Running a Docker container
780. Using docker-compose
781. Using IntelliJ
782. Idea show all databases
783. Terminology / Hierarchy
784. Adding an entry
785. Adding a new attribute
786. Multi valued attributes
787. Set semantics of multivalued attributes
788. Deleting selected attribute values
789. Deleting an attribute
790. Query filter
791. Schema validation support
792. Implementations
793. Implementations
794. Exercises
795. Optimistic concurrency control
796. Failure with optimistic transactions
797. Reasons for using Maven
798. Transitive dependencies
799. A basic persistence.xml JPA configuration file.
800. JPA persistence provider
801. Mapping hibintro.v1.model.User instances to a database.
802. A basic User class.
803. Mapping properties to attributes.
804. Annotating integrity constraints
805. Database schema mapping instances of hibintro.v1.model.User.
806. Loading a single object by a primary key value.
807. Retrieving hibintro.v1.model.User instances by HQL.
808. Business rules for projects
809. Persistence related object states
810. Introducing inheritance mapping
811. Modelling payment.
812. A single relation mapping.
813. Mapping the inheritance hierarchy.
814. Inserting payment information
815. Figure subclasses
816. Joined subclass mapping.
817. Implementing Object.equals(Object) by natural keys
818. JPA caches.
819. Shell / Bash
820. Secure Shell
821. Working with files
822. Gathering network related information
823. Handle processes
824. vim text editor introduction
825. Creating a ssh public/private key pair
826. Configuration file permissions on windows network file systems
827. Resulting permissions and configuration test
828. Suggested readings:
829. .deb packages
830. The dpkg command
831. The apt command
832. Rationale using PPA's
833. Result of ssh-keygen execution
834. Extended ACLs, ways too open
835. Revoking permissions using setfacl
836. Corrected permissions
837. Logging in
838. Documentation links
839. DNS query commands
840. DNS forward lookup
841. Display A-record result only
842. Important record types
843. Name Servers: Query type NS
844. Recommended readings
845. Openldap server documentation
846. What is LDAP anyway?
847. LDAP Server cli bind
848. Document Information Tree (DIT)
849. Relative and absolute DNs
850. User example
851. objectClass
852. objectClass clarifications
853. Augmenting inetOrgPerson by posixAccount
854. Structural objectClass definitions
855. Search scopes
856. Predicate based queries
857. LDAP bind types
858. LDIF exchange format
859. LDIF sample
860. OpenLdap server architecture
861. An example LDAP Tree
862. External documentation
863. URI to filesystem mapping
864. Virtual hosting
865. Implementing virtual hosting
866. IP based virtual hosting
867. IP based, pros / cons
868. Name based virtual hosting
869. Name based, pros / cons
870. LDAP backed authentication
871. PHP FPM server
872. File services
873. Customer demands
874. Driving factors
875. Selected cloud file services
876. Selected self hosting products
877. Nextcloud features
878. Lightning integration
879. Installation
880. Docker hub
881. Search images
882. Pull image using CLI
883. Pull Nextcloud image
884. Nextcloud based on Alpine
885. Inspect image
886. Search an image's tags
887. Nextcloud image by version
888. List images by CLI
889. Nextcloud latest image
890. Duplicate Nextcloud images
891. Maven ringing a bell?
892. Un tag image by version
893. Remove image by version
894. Starting Nextcloud container
895. List running containers
896. Enter running container
897. Remove container
898. List volumes
899. List orphaned volumes
900. Remove volumes