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