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