diff options
-rw-r--r-- | dst/SPO notes.html | 132 | ||||
-rw-r--r-- | dst/ase.html | 300 | ||||
-rw-r--r-- | dst/game.html | 8 | ||||
-rw-r--r-- | dst/index.html | 10 | ||||
-rw-r--r-- | dst/sitemap.xml | 8 | ||||
-rw-r--r-- | dst/styles/style.css | 5 | ||||
-rw-r--r-- | src/_footer.html | 4 | ||||
-rw-r--r-- | src/_header.html | 2 | ||||
-rw-r--r-- | src/styles/style.css | 5 |
9 files changed, 238 insertions, 236 deletions
diff --git a/dst/SPO notes.html b/dst/SPO notes.html index 178a9cb..cbffc3e 100644 --- a/dst/SPO notes.html +++ b/dst/SPO notes.html @@ -3,12 +3,12 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> -<title>Exam — adamski.wtf</title> +<title>Exam — adast.xyz</title> <link rel="icon" type="image/png" href="favicon.png"> <link rel="stylesheet" href="styles/style.css"> -<p class="header"><a href="/">adamski.wtf</a></p> -<h1 id="Exam">Exam</h1> +<p class="header"><a href="/">adast.xyz</a></p> +<h1 id="exam">Exam</h1> <ul> <li>15 minute video presentation</li> @@ -16,7 +16,7 @@ <li>Chosen subject appears on digital exam</li> </ul> -<h1 id="Language%20processors">Language processors</h1> +<h1 id="language-processors">Language processors</h1> <p>Most important problem in computing : increasing programmer productivity to improve speed of software release.</p> @@ -36,7 +36,7 @@ to improve speed of software release.</p> <p>You can gain deeper understanding of programming through learning about compilers.</p> -<h2 id="Programming%20languages">Programming languages</h2> +<h2 id="programming-languages">Programming languages</h2> <ul> <li>Set of rules to tell a computer what operations to perform</li> @@ -45,11 +45,11 @@ to improve speed of software release.</p> <li>Symbols, words, rules of grammar, rules of semantics</li> </ul> -<h3 id="Why%20are%20there%20so%20many%20programming%20languages?">Why are there so many programming languages?</h3> +<h3 id="why-are-there-so-many-programming-languages">Why are there so many programming languages?</h3> <p>Programming has evolved over time because different programming languages can be desinged for different types of programs.</p> -<h3 id="Types%20of%20programming%20languages">Types of programming languages</h3> +<h3 id="types-of-programming-languages">Types of programming languages</h3> <ul> <li>Low level - high level 1st-2nd gen</li> @@ -65,7 +65,7 @@ to improve speed of software release.</p> <p>We are in the “multi-paradigm era”, Anders Hejlsberg says languages in of the future will be a mix of all existing paradigms.</p> -<h3 id="What%20is%20a%20good%20language?">What is a good language?</h3> +<h3 id="what-is-a-good-language">What is a good language?</h3> <ul> <li>Formerly: run-time performance</li> @@ -93,13 +93,13 @@ to improve speed of software release.</p> - Type rules - Semantics</p> -<h3 id="Does%20syntax%20matter?">Does syntax matter?</h3> +<h3 id="does-syntax-matter">Does syntax matter?</h3> <p>Syntax is the visible part of the language. The paradigm is the next most visible. Most invisible part is the language semantics. But clear semantics usually means simple and efficient implementations.</p> <p>Yes. Syntax matters. </p> -<h2 id="Language%20Processors">Language Processors</h2> +<h2 id="language-processors-1">Language Processors</h2> <ul> <li>Text Editors / IDEs</li> @@ -111,11 +111,11 @@ to improve speed of software release.</p> <li>Interpreters</li> </ul> -<h3 id="Interpreters">Interpreters</h3> +<h3 id="interpreters">Interpreters</h3> <p>Take source code and input and produces output. For example, web browser.</p> -<h3 id="Compilation">Compilation</h3> +<h3 id="compilation">Compilation</h3> <p>A 2-step process. Source program is inputted to compiler and a new program target program is outputted from the compiler. However this is much more complicated. Lexical-, syntax-, semantic analysis, code generation (IL)?. Sometimes you may generate high-level code. For example, taking source and converting it to C code.</p> @@ -126,7 +126,7 @@ to improve speed of software release.</p> <p>Symbol tables can be accessed from several phases.</p> -<h3 id="Compiler%20design">Compiler design</h3> +<h3 id="compiler-design">Compiler design</h3> <p>Compiler design is strong affected and strong affects programming language design. Advantages of good compiler: easier to learn, read, understand. Fewer bugs. More reliable. More diagnostic messages and tools.</p> @@ -151,11 +151,11 @@ to improve speed of software release.</p> <li>Code-generation tools</li> </ul> -<h1 id="Programming%20language%20evolution%20and%20tombstone%20diagrams">Programming language evolution and tombstone diagrams</h1> +<h1 id="programming-language-evolution-and-tombstone-diagrams">Programming language evolution and tombstone diagrams</h1> <p>Most new languages are invented out of frustration. When a new language is created it tends to be because it would be an improvement over some existing language. For example, Fortran was invented to improve programmer productivity.</p> -<h2 id="Programming%20language%20design">Programming language design</h2> +<h2 id="programming-language-design">Programming language design</h2> <ol> <li>Create ideas @@ -173,7 +173,7 @@ to improve speed of software release.</p> <p>The programming language critera table can be used to generate ideas for or evaluate a language’s design. Reusability and relocatability of code has become a more and more important criteria over time. </p> -<h2 id="Programming%20language%20history">Programming language history</h2> +<h2 id="programming-language-history">Programming language history</h2> <p>40-50s: Assembly languages made programming more readable more usable. Came with a compiler that could translate assembly to machine operations.</p> @@ -189,7 +189,7 @@ to improve speed of software release.</p> <p>10s: Multi-paradigm (OO + FP)</p> -<h2 id="Tombstone%20diagrams%20-%20gravstens%20diagramer">Tombstone diagrams - gravstens diagramer</h2> +<h2 id="tombstone-diagrams---gravstens-diagramer">Tombstone diagrams - gravstens diagramer</h2> <p>A notation consisting of puzzle pieces that can be used to reason about language processors and programs.</p> @@ -210,9 +210,9 @@ to improve speed of software release.</p> <p>Bootstrapping can be used as a way to generate more efficient compilers.</p> -<h1 id="The%20ac%20language%20and%20compiler">The ac language and compiler</h1> +<h1 id="the-ac-language-and-compiler">The ac language and compiler</h1> -<h2 id="Phases%20of%20a%20compiler">Phases of a compiler</h2> +<h2 id="phases-of-a-compiler">Phases of a compiler</h2> <p>Phases: - Syntax analysis -> Error reports | AST @@ -239,7 +239,7 @@ to improve speed of software release.</p> <p>Modern compilers all make use of symbol tables. This can generally be used in any phase of compilation but it is now best practice to only access it from type checker / contextual analysis.</p> -<h2 id="Phases%20of%20a%20simple%20compiler">Phases of a simple compiler</h2> +<h2 id="phases-of-a-simple-compiler">Phases of a simple compiler</h2> <ul> <li>Syntax analysis @@ -273,7 +273,7 @@ to improve speed of software release.</p> <p>Code generation: formulation of target-machine instructions that represent the semantics of the source program.</p> -<h2 id="The%20ac%20language%20(adding%20calculator)">The ac language (adding calculator)</h2> +<h2 id="the-ac-language-adding-calculator">The ac language (adding calculator)</h2> <p>A simple language for arithmetic. Monolithic scope, meaning a variable can only be declared once. Target of translation: dc (desk calculator)</p> @@ -286,7 +286,7 @@ b = a + 3.2 p b // print b </code></pre> -<h3 id="Formal%20definition%20of%20ac">Formal definition of ac</h3> +<h3 id="formal-definition-of-ac">Formal definition of ac</h3> <ul> <li>Syntax specification @@ -301,17 +301,17 @@ p b // print b </ul></li> </ul> -<h2 id="Context%20free%20grammar%20(CFG)">Context free grammar (CFG)</h2> +<h2 id="context-free-grammar-cfg">Context free grammar (CFG)</h2> <p>A set of production rules for a language. Two types of symbols: terminals and non-terminals. Terminals cannot be rewritten (id, num, etc). Non-terminals are rules like (prog, scope, etc).</p> <p>A syntax tree / parse tree can be used to show the production rules of some source code in a tree structure.</p> -<h2 id="Regular%20expressions%20(RE)">Regular expressions (RE)</h2> +<h2 id="regular-expressions-re">Regular expressions (RE)</h2> <p>For specifying tokens. For example: id, num, “+”, “-”, etc.</p> -<h1 id="Language%20specifications">Language specifications</h1> +<h1 id="language-specifications">Language specifications</h1> <p>A communication device between people who need a common understanding of the programming language or PL. For example, the language desinger, implementor, user, etc.</p> @@ -334,7 +334,7 @@ p b // print b - Semantics (dynamic semantics) - Informal or formal</p> -<h2 id="Syntax%20terminology">Syntax terminology</h2> +<h2 id="syntax-terminology">Syntax terminology</h2> <ul> <li>Sentence: string of characters over some alphabet</li> @@ -343,14 +343,14 @@ p b // print b <li>Token: a category of lexemes (e.g. identifier)</li> </ul> -<h2 id="Formal%20definition%20of%20languages">Formal definition of languages</h2> +<h2 id="formal-definition-of-languages">Formal definition of languages</h2> <ul> <li>Generators: a device that generates senteces of a language.</li> <li>Recognizer: reads input strings over the alphabet and decides whether the input strings belong to the language.</li> </ul> -<h2 id="Syntax%20specification">Syntax specification</h2> +<h2 id="syntax-specification">Syntax specification</h2> <p>Syntax is specified suing a CFG. - a finite set of terminals (tokens) @@ -372,7 +372,7 @@ N ::= a | B | ... <p>In BNF, syntactic lists are described using recursion.</p> -<h2 id="Derivations">Derivations</h2> +<h2 id="derivations">Derivations</h2> <p>This is where you take some source code and you step through the CFG with it to see which rules are rewritten to deeper rules, until you get the end result. This can also be represented as a parse tree.</p> @@ -380,7 +380,7 @@ N ::= a | B | ... <p>Leftmost derivation always choses the leftmost possible non-terminal and vice-versa for rightmost derivation.</p> -<h2 id="Ambiguity%20in%20grammars">Ambiguity in grammars</h2> +<h2 id="ambiguity-in-grammars">Ambiguity in grammars</h2> <p>A grammar is ambiguous if a string (sentence) can be defined by more than one different parse trees. Ususally ambiguity is undesirable and CFGs are rewritten to disallow this behaviour. This rewritting process can be done systematically.</p> @@ -391,7 +391,7 @@ N ::= a | B | ... <li>Ambiguity in grammars is an undecidable property.</li> </ul> -<h2 id="EBNF">EBNF</h2> +<h2 id="ebnf">EBNF</h2> <p>A non-standardised extension to BNF notation.</p> @@ -403,9 +403,9 @@ N ::= a | B | ... <p>EBNF can also be rewritten to standard BNF fairly easily.</p> -<h1 id="Context%20free%20grammars">Context free grammars</h1> +<h1 id="context-free-grammars">Context free grammars</h1> -<h2 id="Properties%20of%20grammars%20(non-terminals)">Properties of grammars (non-terminals)</h2> +<h2 id="properties-of-grammars-non-terminals">Properties of grammars (non-terminals)</h2> <ul> <li>Left-recursive: <code>N ::= N ...</code></li> @@ -414,7 +414,7 @@ N ::= a | B | ... <li>Useless: if a non-terminal can never produce a string of terminal symbols.</li> </ul> -<h2 id="Grammar%20transformations">Grammar transformations</h2> +<h2 id="grammar-transformations">Grammar transformations</h2> <ul> <li>Left factorization: <code>X Y | X Z</code> is transformed to <code>X (Y | Z)</code></li> @@ -422,7 +422,7 @@ N ::= a | B | ... <li>Substitution of non-terminals: for clearer CFGs </li> </ul> -<h2 id="From%20tokens%20to%20parse%20tree">From tokens to parse tree</h2> +<h2 id="from-tokens-to-parse-tree">From tokens to parse tree</h2> <p>Parsing is finding the structure in a stream of tokens. This is done by the parser.</p> @@ -430,15 +430,15 @@ N ::= a | B | ... - top-down (Leftmost derivation / LL), constructed in pre-order. - bottom-up (Rightmost derivation in reverse / LR), constructed in post-order.</p> -<h2 id="First%20sets">First sets</h2> +<h2 id="first-sets">First sets</h2> <p>The set of all terminal symbols, in order, derived from a sentence S. The empty string λ is never included.</p> -<h2 id="Follow%20sets">Follow sets</h2> +<h2 id="follow-sets">Follow sets</h2> <p>The set of terminals that can follow a non-terminal A, where the EOF symbol is $.</p> -<h2 id="LL(1)%20grammars">LL(1) grammars</h2> +<h2 id="ll1-grammars">LL(1) grammars</h2> <ul> <li>Cannot be left-recursive.</li> @@ -447,7 +447,7 @@ N ::= a | B | ... <li>λ-free grammars are very easy as you only need to check for the first set.</li> </ul> -<h2 id="LR%20grammars">LR grammars</h2> +<h2 id="lr-grammars">LR grammars</h2> <ul> <li>Can be parsed using an LR algorithm.</li> @@ -456,9 +456,9 @@ N ::= a | B | ... <li>LR parsing methods are the most commonly used for automatic tools today.</li> </ul> -<h1 id="Lexical%20analysis">Lexical analysis</h1> +<h1 id="lexical-analysis">Lexical analysis</h1> -<h2 id="Developing%20a%20scanner">Developing a scanner</h2> +<h2 id="developing-a-scanner">Developing a scanner</h2> <p>The scanner/lexer is what reads through source code character by character and divides them into lexemes and tokens. This includes whitespace which can have meaning for languages like Python. </p> @@ -466,7 +466,7 @@ N ::= a | B | ... <p>How do we know how to implement a scanner? Read the language specification. Included in the specification is typically tokens/lexemes as regular expressions and reserved words.</p> -<h3 id="Lexical%20elements">Lexical elements</h3> +<h3 id="lexical-elements">Lexical elements</h3> <ul> <li>Character set (ASCII vs Unicode)</li> @@ -485,11 +485,11 @@ N ::= a | B | ... <p>The audience of your PL matters for lexical design, for example if target audience are C programmers they will prefer curly braces over begin-end keywords. It is a good idea to keep your design simple though. </p> -<h3 id="Regular%20grammars&#47;expressions">Regular grammars/expressions</h3> +<h3 id="regular-grammarsexpressions">Regular grammars/expressions</h3> <p>It is generally better to use regular expressions instead of production rules where possible. Regular expressions are typically easy to implement. REs can be implemented by finite state machines (FSM). These automatas can then be easily implemented in code and as such make the job of implementing a scanner/lexer a little easier. </p> -<h3 id="Implement%20a%20scanner%20based%20on%20RE%20by%20hand">Implement a scanner based on RE by hand</h3> +<h3 id="implement-a-scanner-based-on-re-by-hand">Implement a scanner based on RE by hand</h3> <ol> <li><p>Express the ‘lexical’ grammar as RE. Sometimes it is easier to start with (E)BNF and do the necessary transformations.</p></li> @@ -504,18 +504,18 @@ N ::= a | B | ... <li>Most compilers are developed using a generated scanner.</li> </ul> -<h2 id="Generating%20scanners">Generating scanners</h2> +<h2 id="generating-scanners">Generating scanners</h2> <p>Something about REs and the different types of FAs are equivalent. There is an algorithm for transforming NDFA with epsilon into DFAs. DFAs are easily implementable by computers.</p> <p>A scanner generator a program that takes tokens as REs and will generate a scanner based on a FAs in whatever language. JLex/Lex/CSharpLex are tools for generating a scanner that recognizes tokens.</p> -<h2 id="Performance%20considerations">Performance considerations</h2> +<h2 id="performance-considerations">Performance considerations</h2> <p>Performance of scanners is important for production compilers. Size of scanner sometimes matters. Note: modern scanners use explicit control, not table, because bigger tables may perform worse on modern architectures.</p> -<h1 id="Top%20down%20parsing">Top down parsing</h1> +<h1 id="top-down-parsing">Top down parsing</h1> <p>The job of the syntax analysis, is to read to source text and determine it’s phase structure. This can be used to construct the AST. The input to the scanner is the stream of characters which output a stream of tokens to the parser or reports errors. The parser produces the AST or reports errors again.</p> @@ -532,7 +532,7 @@ The cat sees a rat <p>This is equivalent to the parse tree that would be produced from the sentence. So Top down is a straight-forward parsing algorithm. The parse structure corresponds to the set of procedures. </p> -<h2 id="Recursive%20decent%20parsing">Recursive decent parsing</h2> +<h2 id="recursive-decent-parsing">Recursive decent parsing</h2> <p>Each non-terminal will have a parse method. There will also need to be a method that asks for the next token. This function will either return the this token or give an error in the event of an unexepected token.</p> @@ -546,7 +546,7 @@ The cat sees a rat <p>This is a little more involved when there are alternatives. This can be implemented using if-elseif or a switch structure that checks for the alternatives.</p> -<h2 id="Algo%20to%20convert%20EBNF%20into%20a%20RD%20parser">Algo to convert EBNF into a RD parser</h2> +<h2 id="algo-to-convert-ebnf-into-a-rd-parser">Algo to convert EBNF into a RD parser</h2> <p>Foreach non-terminal in the grammar, create a parse method. Parsing a terminal just uses the ‘accept’ method. Parsing of non-terminals is just method calls to those non-terminal’s parse methods in order. If there are repetitions, (0 .. more) you use a while loop. As long as the current token is in the first set, you keep parsing it. Use a switch case of if-else for alternatives. </p> @@ -554,21 +554,21 @@ The cat sees a rat <p>If we want the parser to return an AST each of the parse methods should return their little bit of the AST instead of void. (Think of our visitor methods).</p> -<h2 id="The%20visitor%20pattern%20(briefly)">The visitor pattern (briefly)</h2> +<h2 id="the-visitor-pattern-briefly">The visitor pattern (briefly)</h2> <p>For OOP the visitor pattern enbales the definition of a new operator on an object structure without changing classes of the objects.</p> -<h2 id="LL(1)%20grammars-2">LL(1) grammars</h2> +<h2 id="ll1-grammars-1">LL(1) grammars</h2> <p>A grammar which can be parsed with a top-down parse with a lookahead (in the input stream of tokens) of one token.</p> <p>Lecture 7 @ 32:00 for formal definition of LL(1) grammar.</p> -<h3 id="Table-driven%20LL(1)%20parsers">Table-driven LL(1) parsers</h3> +<h3 id="table-driven-ll1-parsers">Table-driven LL(1) parsers</h3> <p>A table is generated that simulates the way the regular parser’s stack works. This presumably doesn’t consume as much memory as a traditional parser’s stack. The table is constructed with non-terminals and the lookahead terminals. The table tells which rule to use in the grammar. 49:00 Lecture 7. ANTLR an example of a Java parser generator, that allows LL(*) grammars and is table-driven.</p> -<h1 id="Bottom%20up%20parsing">Bottom up parsing</h1> +<h1 id="bottom-up-parsing">Bottom up parsing</h1> <p>LR languages are more powerful than LL. - LR(0), SLR(1), LALR(1), LR(k) grammars. @@ -588,7 +588,7 @@ The cat sees a rat <p>There are tools that can automate generating the bottom up parser. 50:00 Lecture 8.</p> -<h2 id="Terminology%2015:00%20Lecture%208">Terminology 15:00 Lecture 8</h2> +<h2 id="terminology-1500-lecture-8">Terminology 15:00 Lecture 8</h2> <ul> <li>A reduction transforms <code>uwv to uAv</code> if <code>A -> w</code> is a production.</li> @@ -596,7 +596,7 @@ The cat sees a rat <li>Handle (informally: a production than can be used in reverse without getting stuck).</li> </ul> -<h2 id="The%20shift%20reduce%20process%2018:00%20Lecture%208">The shift reduce process 18:00 Lecture 8</h2> +<h2 id="the-shift-reduce-process-1800-lecture-8">The shift reduce process 18:00 Lecture 8</h2> <p>This is how bottom up parser work. They have a stack and a table of operations. This can also be represented as a knitting game.</p> @@ -613,36 +613,36 @@ If there is an empty state in the lookup table, we know we have an error.</p> <p>How is the parse table built? The table is coded as a DFA (28:00 Lecture 8).</p> -<h3 id="LR(0)%20conflicts">LR(0) conflicts</h3> +<h3 id="lr0-conflicts">LR(0) conflicts</h3> <p>This algo doesn’t always work. A LR(0) conflict is a situation (DFA state) in which there is more than one possible action for the algo. There are two kinds of conflicts: - Shift-reduce: can’t decide between shift or reduce. - Reduce-reduce: can’t decide between two or more reductions for different grammar rules.</p> -<h3 id="The%20shift-reduce%20problem">The shift-reduce problem</h3> +<h3 id="the-shift-reduce-problem">The shift-reduce problem</h3> <p>This is when you can either shift or reduce. This is a sign that the grammar is not LR(0). There are tools that can be used to input a grammar and output what kind of grammar it is.</p> -<h2 id="LR(0)%20vs%20SLR(1)">LR(0) vs SLR(1)</h2> +<h2 id="lr0-vs-slr1">LR(0) vs SLR(1)</h2> <p>SLR(1) looks at the symbol after the handle (follow set). This means fewer reduce-actoins and therefore removes a lot of potential conflicts.</p> -<h2 id="LR(1)">LR(1)</h2> +<h2 id="lr1">LR(1)</h2> <p>While SLR just uses the follow set for each production. LR(1) looks at the follow set for each handle. This gives even more reductions. LR(1) parse tables are very big. Expensive but almost all common languages are LR(1).</p> -<h2 id="LALR(1)">LALR(1)</h2> +<h2 id="lalr1">LALR(1)</h2> <p>A variant of LR(1) that gives smaller parse tables. This is done by combining some states in the parse tree. In practice most practical languages are LALR(1).</p> -<h2 id="Parser%20conflict%20resolution">Parser conflict resolution</h2> +<h2 id="parser-conflict-resolution">Parser conflict resolution</h2> <p>Parsing conflicts are commonly caused by ambiguous grammars. In practice, these ambiguities are solved using a resolution rule however this may or may not do what you want (fx: dangling-else).</p> <p>Parsing conflicts must be fixed. You cannot rely on the resolution rule.</p> -<h1 id="Abstract%20syntax%20trees%20(AST)">Abstract syntax trees (AST)</h1> +<h1 id="abstract-syntax-trees-ast">Abstract syntax trees (AST)</h1> <p>Like a parse tree but with some details omitted.</p> @@ -653,18 +653,18 @@ Synthesized and inherited attributes.</p> <p>It should be possible to unparse an AST (reconstruct the source from an AST).</p> -<h2 id="Single-pass%20vs%20multi-pass%20compilers">Single-pass vs multi-pass compilers</h2> +<h2 id="single-pass-vs-multi-pass-compilers">Single-pass vs multi-pass compilers</h2> <p>Single-pass makes a single pass over source text, parsing, analyzing, and generating code all at once. This means that the contextual analyzer and code generator are called from the parser implementation.</p> <p>Multi-pass makes several passes over the program. This is the modern approach. The output of a preceeding phase is stored in a data structure and used by subsequent phases. This is more readable and maintainable as the code is more broken down into independant modules.</p> -<h2 id="Visitor%20pattern">Visitor pattern</h2> +<h2 id="visitor-pattern">Visitor pattern</h2> <p>35:00 Lecture 9. </p> -<h2 id="Contextual%20analysis">Contextual analysis</h2> +<h2 id="contextual-analysis">Contextual analysis</h2> <p>Identification and type checking are combined into a depth-first traversal of the AST.</p> -<p class="footer"><a href="/">adamski.wtf</a></p> +<p class="footer"><a href="/">adast.xyz</a></p> </html> diff --git a/dst/ase.html b/dst/ase.html index 9d6df59..4a0f2e1 100644 --- a/dst/ase.html +++ b/dst/ase.html @@ -3,14 +3,14 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> -<title>Q1. Software Process Model - Waterfall — adamski.wtf</title> +<title>Q1. Software Process Model - Waterfall — adast.xyz</title> <link rel="icon" type="image/png" href="favicon.png"> <link rel="stylesheet" href="styles/style.css"> -<p class="header"><a href="/">adamski.wtf</a></p> -<h1 id="Q1.%20Software%20Process%20Model%20-%20Waterfall">Q1. Software Process Model - Waterfall</h1> +<p class="header"><a href="/">adast.xyz</a></p> +<h1 id="q1.-software-process-model---waterfall">Q1. Software Process Model - Waterfall</h1> -<h2 id="What%20is%20software%20engineering%20a%20response%20to?">What is software engineering a response to?</h2> +<h2 id="what-is-software-engineering-a-response-to">What is software engineering a response to?</h2> <ul> <li>Increasing system complexity.</li> @@ -22,46 +22,46 @@ This is because different types of software require different approaches.</p> <p>There are cases where software projects or software can fail.</p> -<h3 id="Increasing%20system%20complexity">Increasing system complexity</h3> +<h3 id="increasing-system-complexity">Increasing system complexity</h3> <p>As new software technology helps us to build bigger, more complicated systems, the requirements change.</p> <p>Systems need to be developed and delivered faster meaning more complicated systems are required. This means more requirements for the systems.</p> -<h3 id="Failure%20to%20use%20software%20engineering%20methods">Failure to use software engineering methods</h3> +<h3 id="failure-to-use-software-engineering-methods">Failure to use software engineering methods</h3> <p>It is easy to develop programs without using software engineering techniques… BUT This can result in more expensive software development and less reliable, readable systems. To solve this issue, more education and training is required on these techniques.</p> -<h2 id="Software%20engineering%20process%20activities">Software engineering process activities</h2> +<h2 id="software-engineering-process-activities">Software engineering process activities</h2> -<h3 id="Software%20specification">Software specification</h3> +<h3 id="software-specification">Software specification</h3> <p>This is where the clients and the developers define the software that should be produced. This is where the software is limited in terms of what is should be.</p> -<h3 id="Software%20development">Software development</h3> +<h3 id="software-development">Software development</h3> <p>This is where the software is designed and programmed.</p> -<h3 id="Software%20validation">Software validation</h3> +<h3 id="software-validation">Software validation</h3> <p>This step ensures that the software does what the client requested.</p> -<h3 id="Software%20evolution">Software evolution</h3> +<h3 id="software-evolution">Software evolution</h3> <p>When software is modified to meet client’s or the market’s new requirements.</p> -<h2 id="What%20is%20a%20software%20process%20model">What is a software process model</h2> +<h2 id="what-is-a-software-process-model">What is a software process model</h2> <p>A software process model is a set or related activities that leads to a software product. An abstract descriptions of high level software processes. These can be used to explain different approaches to software development. These can be interpreted as frameworks that can be expanded and personalized to create more specific software engineering processes.</p> -<h3 id="Waterfall%20model">Waterfall model</h3> +<h3 id="waterfall-model">Waterfall model</h3> <p>The model takes the fundamental software process activities. Seperate process phases: @@ -70,19 +70,19 @@ Seperate process phases: - Implementation - Test</p> -<h3 id="Incremental&#47;iterative%20development">Incremental/iterative development</h3> +<h3 id="incrementaliterative-development">Incremental/iterative development</h3> <p>This approach combines the activities with specification, development and validation. The system is developed in a series of versions (increments) Each version adds some functionality on top of the previous version.</p> -<h3 id="Integration%20and%20configuration">Integration and configuration</h3> +<h3 id="integration-and-configuration">Integration and configuration</h3> <p>This approach depends on the availability of reusable components or systems. The systemdevelopment process focuses on configuring these components to be used in new contexts and integrate them with the system. This lets you reuse code from previous projects and save time and money.</p> -<h2 id="Waterfall%20model-2">Waterfall model</h2> +<h2 id="waterfall-model-1">Waterfall model</h2> <p>Activities are done in a sequence. Handover of workproducts between phases and milestones are used to monitor progress. @@ -90,77 +90,77 @@ Waterfall model is an example of a plan-driven process. You are supposed to have all of the process activities and phases planned out before you start development. The phases in the model directly reflect the fundamental development activities.</p> -<h3 id="Requirements%20analysis%20and%20definition">Requirements analysis and definition</h3> +<h3 id="requirements-analysis-and-definition">Requirements analysis and definition</h3> <p>The systems services, limits and goal and made concrete through consulting with the users. They are then defined in detail and are used as the system specification.</p> -<h3 id="System%20and%20software%20design">System and software design</h3> +<h3 id="system-and-software-design">System and software design</h3> <p>The overall system architecture is established in this phase. Identify and describe the fundamental system abstractions and their relations (UML)</p> -<h3 id="Implementation%20and%20unit%20testing">Implementation and unit testing</h3> +<h3 id="implementation-and-unit-testing">Implementation and unit testing</h3> <p>The design is implemented in the indivivual program parts. The design is tested to verify that it meets the specification.</p> -<h3 id="Integration%20and%20system%20testing">Integration and system testing</h3> +<h3 id="integration-and-system-testing">Integration and system testing</h3> <p>The individual program parts are integrated and the whole system it tested. The software is delivered to the client.</p> -<h3 id="Operation%20and%20maintenance">Operation and maintenance</h3> +<h3 id="operation-and-maintenance">Operation and maintenance</h3> <p>The system is now installed and in use. The system is maintained to any issuse that weren’t found earlier. The system is improved over time.</p> -<h2 id="When%20should%20you%20consider%20using%20waterfall?">When should you consider using waterfall?</h2> +<h2 id="when-should-you-consider-using-waterfall">When should you consider using waterfall?</h2> <p>For software that needs to be flexible while it is being developed.</p> -<h3 id="Embedded%20systems">Embedded systems</h3> +<h3 id="embedded-systems">Embedded systems</h3> <p>The software must interface with hardware. In this case the hardware is not flexible, thus the software must be.</p> -<h3 id="Critical%20systems">Critical systems</h3> +<h3 id="critical-systems">Critical systems</h3> <p>When total security is a requirement of the specification and design. These systems must have finite specifications and design documents.</p> -<h3 id="Large%20software%20systems">Large software systems</h3> +<h3 id="large-software-systems">Large software systems</h3> <p>Part of a larger system being developed by several parties. This makes finite specifications extremely necessary.</p> -<h2 id="How%20can%20I%20decide%20on%20waterfall?%20-%20analyse%20home%20ground">How can I decide on waterfall? - analyse home ground</h2> +<h2 id="how-can-i-decide-on-waterfall---analyse-home-ground">How can I decide on waterfall? - analyse home ground</h2> <p>When one phase ends another begins. Steps come ordered and don’t allow for going back and redoing parts. (waterfall flows only down) When the requirements are mostly unchanging.</p> -<h3 id="Plan%20driven%20versus%20agile%20processes?">Plan driven versus agile processes?</h3> +<h3 id="plan-driven-versus-agile-processes">Plan driven versus agile processes?</h3> <p>Activities in sequence versus all activities at the same time. Agile development is very flexible and the requirements may be constantly changing. </p> -<h2 id="Incremental%20model">Incremental model</h2> +<h2 id="incremental-model">Incremental model</h2> <p>You can iterate within increments and the increments can be planned. You work within fixed time slots and update the project backlog continuously. Incremental is an agile process, where you end with multiple versions that you can show the clients as the project progresses. This allows for the client to come with feedback along the way.</p> -<h2 id="Integration%20and%20configuration-2">Integration and configuration</h2> +<h2 id="integration-and-configuration-1">Integration and configuration</h2> <p>Development risk is reduced by reuse but there is the risk of not being able to make the desired changes at all or in the time frame. Most projects have some level of code reuse. This is often informal. This reuse requires looking for the existing code, changing them to meet the requirements and integrating them with the new code.</p> -<h1 id="Q2.%20Software%20Process%20Model%20-%20Incremental&#47;iterative">Q2. Software Process Model - Incremental/iterative</h1> +<h1 id="q2.-software-process-model---incrementaliterative">Q2. Software Process Model - Incremental/iterative</h1> <p>The incremental development is based on the idea that: 1. Develop in prototypes. @@ -169,29 +169,29 @@ This reuse requires looking for the existing code, changing them to meet the req <p>Incremental development is the most common approach to developing applications and software. </p> -<h2 id="Can%20it%20be%20both%20plandriven%20and%20agile?">Can it be both plandriven and agile?</h2> +<h2 id="can-it-be-both-plandriven-and-agile">Can it be both plandriven and agile?</h2> <p>Yes, it can be either one or a mix of both.</p> -<h3 id="Plan-driven%20approach">Plan-driven approach</h3> +<h3 id="plan-driven-approach">Plan-driven approach</h3> <p>Identify the system increments in advance. A predictable waterfall plan is split into parts.</p> -<h3 id="Agile%20approach">Agile approach</h3> +<h3 id="agile-approach">Agile approach</h3> <p>The early increments are identified. The later increments depend on progress and the clients priorities. You work in fixed timeframes and update the full project backlog as you go.</p> -<h3 id="Agile-manifest%20(balance&#47;mix)">Agile-manifest (balance/mix)</h3> +<h3 id="agile-manifest-balancemix">Agile-manifest (balance/mix)</h3> <p>Focus on the individuals and teamwork rather than the processes and tools. Good software comes before comprehensive documentation. Work with the client instead of using contract work. Deal with changes instead of sticking to the plan.</p> -<h2 id="What%20are%20advantages%20of%20incremental?">What are advantages of incremental?</h2> +<h2 id="what-are-advantages-of-incremental">What are advantages of incremental?</h2> <ol> <li><p>Development costs are reduced @@ -202,7 +202,7 @@ The clients can comment on demonstrations of the different versions and see the New features can be made available even if they are not fully completed.</p></li> </ol> -<h2 id="What%20disadvantages%20are%20there?">What disadvantages are there?</h2> +<h2 id="what-disadvantages-are-there">What disadvantages are there?</h2> <ol> <li><p>The project is not visible @@ -217,29 +217,29 @@ Responsibility of the different teams needs to be clear with respect to this arc This has to be done in advance.</p></li> </ol> -<h1 id="Q3.%20Software%20Process%20Model%20-%20Integration%20and%20configuration">Q3. Software Process Model - Integration and configuration</h1> +<h1 id="q3.-software-process-model---integration-and-configuration">Q3. Software Process Model - Integration and configuration</h1> -<h2 id="What%20are%20the%20phases?">What are the phases?</h2> +<h2 id="what-are-the-phases">What are the phases?</h2> -<h3 id="Requirements%20specification">Requirements specification</h3> +<h3 id="requirements-specification">Requirements specification</h3> <p>The inital requirements are suggested They don’t need to be developed in more detail. They should include short descriptions of important requirements and desired functionality.</p> -<h3 id="Software%20discovery%20and%20evaluation">Software discovery and evaluation</h3> +<h3 id="software-discovery-and-evaluation">Software discovery and evaluation</h3> <p>With the overview of the requirements, components are searched for that provide the necessary functionality.</p> -<h3 id="Requirements%20refinement">Requirements refinement</h3> +<h3 id="requirements-refinement">Requirements refinement</h3> <p>The requirements are polished with the knowledge of the reusable components that were found.</p> -<h3 id="Application%20system%20configuration">Application system configuration</h3> +<h3 id="application-system-configuration">Application system configuration</h3> <p>If an application that meets the requirements is available, it is configured for use in the new system.</p> -<h2 id="Advantages&#47;disadvantages">Advantages/disadvantages</h2> +<h2 id="advantagesdisadvantages">Advantages/disadvantages</h2> <p>This model reduces the amount of software that must be developed. This in turn, reduces the costs and risks.</p> @@ -247,11 +247,11 @@ This in turn, reduces the costs and risks.</p> <p>You usually don’t have control of the software that is being reused. This can include for example how and when new version are released and how the functionality is changed.</p> -<h1 id="Q4.%20Comparison%20of%20plandriven%20and%20agile%20including%20Homeground">Q4. Comparison of plandriven and agile including Homeground</h1> +<h1 id="q4.-comparison-of-plandriven-and-agile-including-homeground">Q4. Comparison of plandriven and agile including Homeground</h1> -<h2 id="What%20is%20the%20difference%20between%20plandriven%20and%20agile?">What is the difference between plandriven and agile?</h2> +<h2 id="what-is-the-difference-between-plandriven-and-agile">What is the difference between plandriven and agile?</h2> -<h3 id="Plandriven">Plandriven</h3> +<h3 id="plandriven">Plandriven</h3> <p>Plandriven means the desired result can be predicted. Plandriven = waterfall. @@ -260,7 +260,7 @@ A project plan is created that registers the work that needs to done, who should Managers use this plan to support project decisions and as a way to measure progress. This is a traditional approach to software development.</p> -<h3 id="Agile">Agile</h3> +<h3 id="agile">Agile</h3> <p>Agile expects changes and frequent user inspection to get the best results. Agile = Iterative, more detailed Scrum and XP @@ -268,56 +268,56 @@ Agile methods are iterative, the software is developed and delivered in stages. These versions are not planned in advance but are chosen underway. Decisions on what should be included in a version depend on the clients priorities.</p> -<h2 id="How%20does%20B%C3%B6hm&#47;Turner%20define%20primary%20factors?">How does Böhm/Turner define primary factors?</h2> +<h2 id="how-does-bhmturner-define-primary-factors">How does Böhm/Turner define primary factors?</h2> -<h3 id="Application">Application</h3> +<h3 id="application">Application</h3> -<h4 id="Agile-2">Agile</h4> +<h4 id="agile-1">Agile</h4> <p>Goal: to handle changes in the project. Small teams. Environment is turbulent and fast-paced, project focused.</p> -<h4 id="Plandriven-2">Plandriven</h4> +<h4 id="plandriven-1">Plandriven</h4> <p>Goal: predictability, stability and security. Larger teams and projects. Environment: stable, few changes, organisation focused.</p> -<h3 id="Management%20(onsite,%20qualitative%20control,%20tacit%20knowledge)">Management (onsite, qualitative control, tacit knowledge)</h3> +<h3 id="management-onsite-qualitative-control-tacit-knowledge">Management (onsite, qualitative control, tacit knowledge)</h3> -<h4 id="Agile-3">Agile</h4> +<h4 id="agile-2">Agile</h4> <p>Customer relations: dedicated clients on site, focused on prioritised changes Planning and control: qualitative control. Who and how doensn’t matter as long as it gets done. Communications: Tacit knowledge. People do things without needing much explanation or discussion.</p> -<h4 id="Plan-driven">Plan-driven</h4> +<h4 id="plan-driven">Plan-driven</h4> <p>Customer relations: More formal and infrequent. Focused on contract decisions. Planning and control: Documented plans, quantitative control. It is important to know who does what. Communications: Explicit. Plans must be discussed and verbalized and shared with the others.</p> -<h3 id="Technical">Technical</h3> +<h3 id="technical">Technical</h3> -<h4 id="Agile-4">Agile</h4> +<h4 id="agile-3">Agile</h4> <p>Requirements: can withstand unpredictability. Development: simple design, small increments, refactoring is assumed to be cheap. Test: Test cases define the requirements.</p> -<h4 id="Plan-driven-2">Plan-driven</h4> +<h4 id="plan-driven-1">Plan-driven</h4> <p>Requirements: Formal project, user interface, quality, predictable requirements. Development: Comprehensive design, larger intervals, refactoring is costly. Test: Documented testplans and procedures.</p> -<h3 id="People">People</h3> +<h3 id="people">People</h3> <p>Cockburn characteristics can describe a programmers personality. One type may be more favourable than another depending on agile/plan-driven approach. </p> -<h2 id="5%20axis%20on%20the%20Home%20Ground%20Decision%20tool">5 axis on the Home Ground Decision tool</h2> +<h2 id="5-axis-on-the-home-ground-decision-tool">5 axis on the Home Ground Decision tool</h2> <ul> <li>Criticality: impact of defects</li> @@ -327,7 +327,7 @@ One type may be more favourable than another depending on agile/plan-driven <li>Size: # of personnel</li> </ul> -<h2 id="What%20is%20continuous%20integration%20and%20how%20does%20it%20relate%20to%20agile?">What is continuous integration and how does it relate to agile?</h2> +<h2 id="what-is-continuous-integration-and-how-does-it-relate-to-agile">What is continuous integration and how does it relate to agile?</h2> <p>As soon as the work on a task is complete, it is integrated into the whole system. After such integration, all the unit tests must pass. @@ -335,7 +335,7 @@ Continuous integration uses tools to automate the process. Depends on unit tests. Does NOT remove the need for tests.</p> -<h2 id="Prototype%20development">Prototype development</h2> +<h2 id="prototype-development">Prototype development</h2> <ul> <li>Prototype plan: establish objectives</li> @@ -344,7 +344,7 @@ Does NOT remove the need for tests.</p> <li>Evaluation report</li> </ul> -<h1 id="Q5.%20Key%20features%20of%20SCRUM">Q5. Key features of SCRUM</h1> +<h1 id="q5.-key-features-of-scrum">Q5. Key features of SCRUM</h1> <p>Openness of all work. Respect each other. @@ -356,7 +356,7 @@ Duty to the common goal.</p> 5 events. 3 artifacts.</p> -<h2 id="Assets">Assets</h2> +<h2 id="assets">Assets</h2> <ul> <li>Scrum board</li> @@ -364,13 +364,13 @@ Duty to the common goal.</p> <li>Sprint burndown</li> </ul> -<h2 id="Three%20pillars">Three pillars</h2> +<h2 id="three-pillars">Three pillars</h2> <p>Transparency: Everyone knows what needs to be done and who is doing what. Inspect: Keep an eye on where we are heading (daily meetings). Adapt: Change if it is necessary.</p> -<h2 id="Core%20values">Core values</h2> +<h2 id="core-values">Core values</h2> <p>Commitment: to reach the sprint goal. Focus: on what needs to be done in the sprint. @@ -378,13 +378,13 @@ Openness: Communication is key, don’t hide issuse. Respect: for each other Courage: to do the right thing</p> -<h2 id="Typical%20errors">Typical errors</h2> +<h2 id="typical-errors">Typical errors</h2> <p>Scrum master is a manager. No communication with the client. New tasks are added to the sprint backlog in the middle of a sprint.</p> -<h2 id="Daily%20SCRUM">Daily SCRUM</h2> +<h2 id="daily-scrum">Daily SCRUM</h2> <p>Inspect progress towards the sprint goal. Adjust the backlog accordingly. @@ -392,13 +392,13 @@ Update (how far are we?) Short meeting (15 min) Tell the others if you need help.</p> -<h2 id="Sprint%20planning">Sprint planning</h2> +<h2 id="sprint-planning">Sprint planning</h2> <p>Work together with the whole SCRUM team for sprints. Look in the backlog. Make a sprint backlog. (this can’t be changed from the outside)</p> -<h2 id="Sprint%20review">Sprint review</h2> +<h2 id="sprint-review">Sprint review</h2> <p>Check development status. Sprint review max 4 hours with sprints of 4 weeks. @@ -407,15 +407,15 @@ Only talk about what has been done. Dialogue, no presentation. Update the backlog.</p> -<h2 id="Sprint%20retrospective">Sprint retrospective</h2> +<h2 id="sprint-retrospective">Sprint retrospective</h2> <p>For increasing quality and effictivity. What went well/bad? How can this be improved for the future?</p> -<h2 id="Roles">Roles</h2> +<h2 id="roles">Roles</h2> -<h3 id="Product%20owner">Product owner</h3> +<h3 id="product-owner">Product owner</h3> <p>Stakeholder contact Updates/prioritises the product backlog @@ -423,21 +423,21 @@ Can be a person dedicated to the client The goal is the maximise product value Can delegate but is responsible</p> -<h3 id="SCRUM%20master">SCRUM master</h3> +<h3 id="scrum-master">SCRUM master</h3> <p>Ensure everyone is keeping in-line with SCRUM Not the management leader Ensure the team is effective Deal with the teams blockages</p> -<h3 id="Developers">Developers</h3> +<h3 id="developers">Developers</h3> <p>They own the backlog Programmers, UI, UX and so on</p> -<h1 id="Q6.%20Key%20features%20of%20XP%20-%20eXtreme%20Programming">Q6. Key features of XP - eXtreme Programming</h1> +<h1 id="q6.-key-features-of-xp---extreme-programming">Q6. Key features of XP - eXtreme Programming</h1> -<h2 id="What%20is%20XP?">What is XP?</h2> +<h2 id="what-is-xp">What is XP?</h2> <p>An agile, incremental development method with focus on: - Collaboration @@ -450,7 +450,7 @@ In XP, the customer is a member of the dev team and is responsible for bringing <p>Pair programming: developers work in pairs, checking each other’s work to ensure quality.</p> -<h2 id="Qualities%20of%20XP%20that%20fit%20to%20SCRUM">Qualities of XP that fit to SCRUM</h2> +<h2 id="qualities-of-xp-that-fit-to-scrum">Qualities of XP that fit to SCRUM</h2> <p>Pair-programming. Writing unittests before the code (with the help of TDD). @@ -459,30 +459,30 @@ Refactor as often as possible. Collective ownership of code. Customer on-site, user stories, planning game, …</p> -<h3 id="What%20does%20XP%20and%20SCRUM%20have%20in%20common?">What does XP and SCRUM have in common?</h3> +<h3 id="what-does-xp-and-scrum-have-in-common">What does XP and SCRUM have in common?</h3> <p>Work should be done incrementally/iteratively. Teamwork, transparency, communication and prioritisation are crucial. Requirements are broken down into bite-size pieces. There is overlap with the roles. (XP client and SCRUM’s product owner)</p> -<h2 id="What%20values%20are%20XP%20based%20on%20according%20to%20Larman?">What values are XP based on according to Larman?</h2> +<h2 id="what-values-are-xp-based-on-according-to-larman">What values are XP based on according to Larman?</h2> <p>Communication, simplicity, feedback, courage.</p> -<h3 id="Communication">Communication</h3> +<h3 id="communication">Communication</h3> <p>Pair programming Customer on-site Acceptance test Daily standup (short meetings)</p> -<h3 id="Simplicity">Simplicity</h3> +<h3 id="simplicity">Simplicity</h3> <p>Teams implement exactly what was asked for. Nothing more. Strive for simple designs and quality code.</p> -<h3 id="Feedback">Feedback</h3> +<h3 id="feedback">Feedback</h3> <p>Early and frequent feedback is crucial. Feedback can come from unittests, team members and the client. @@ -490,27 +490,27 @@ Continuous integration. Acceptance test that the client performs. Short sprints.</p> -<h3 id="Courage">Courage</h3> +<h3 id="courage">Courage</h3> <p>Developers should be honest. Don’t make excuses for issuse. Don’t be afraid to make big changes.</p> -<h2 id="How%20is%20XP%20extreme?">How is XP extreme?</h2> +<h2 id="how-is-xp-extreme">How is XP extreme?</h2> <p>E.g. If tests are good, do them all the time. Takes all good things, and places them at the core of the process.</p> -<h2 id="Name%20some%20key%20practices%20in%20XP?">Name some key practices in XP?</h2> +<h2 id="name-some-key-practices-in-xp">Name some key practices in XP?</h2> <p>Unit test, pair review, customer on-site, continuous integration, testing, early test, unit test, TDD.</p> -<h2 id="What%20is%20a%20user%20story?">What is a user story?</h2> +<h2 id="what-is-a-user-story">What is a user story?</h2> <p>Brief feature request, a promise for conversation. Written on a card with criteria for confirmation on the back.</p> -<h2 id="Story%20maps%20-%20User%20story%20mapping">Story maps - User story mapping</h2> +<h2 id="story-maps---user-story-mapping">Story maps - User story mapping</h2> <p>To see the bigger picture of the user stories. To understand how things are now and to imagine how they could be. @@ -533,28 +533,28 @@ Visualize the stories you tell about your software.</p> <p>Story map process has 4 levels</p> -<h2 id="What%20is%20the%20format%20a%20user%20story?">What is the format a user story?</h2> +<h2 id="what-is-the-format-a-user-story">What is the format a user story?</h2> <p>“As a <user> I want <feature> so that <why>”. Who, what, why.</p> -<h2 id="How%20does%20XP%20describe%20Lifecycle%20for%20a%20System?">How does XP describe Lifecycle for a System?</h2> +<h2 id="how-does-xp-describe-lifecycle-for-a-system">How does XP describe Lifecycle for a System?</h2> <p>Exploration, planning, iterations to first release, productionizing, maintenance.</p> -<h2 id="What%20is%20the%20iteration%20called%20in%20XP?">What is the iteration called in XP?</h2> +<h2 id="what-is-the-iteration-called-in-xp">What is the iteration called in XP?</h2> <p>Iteration</p> -<h1 id="Q7.%20Product%20Planning:%20Requirements%20Elicitation,%20Product%20Vision,%20Product%20Roadmap">Q7. Product Planning: Requirements Elicitation, Product Vision, Product Roadmap</h1> +<h1 id="q7.-product-planning-requirements-elicitation-product-vision-product-roadmap">Q7. Product Planning: Requirements Elicitation, Product Vision, Product Roadmap</h1> -<h2 id="What%20main%20requirement%20activities%20are%20there?">What main requirement activities are there?</h2> +<h2 id="what-main-requirement-activities-are-there">What main requirement activities are there?</h2> <p>Elicitation and analysis of needs. Specification of requirements. Validation of requirements.</p> -<h2 id="Elicitation%20and%20analysis%20of%20needs">Elicitation and analysis of needs</h2> +<h2 id="elicitation-and-analysis-of-needs">Elicitation and analysis of needs</h2> <p>There are two fundamental approaches to Requirement Elicitation: 1. Interview, where people talk about what they are doing. @@ -563,14 +563,14 @@ Validation of requirements.</p> <p>Use a mix of interview and observation to gather information. This can be used to find the requirements that form the basis of further discussion.</p> -<h2 id="Requirement%20specification">Requirement specification</h2> +<h2 id="requirement-specification">Requirement specification</h2> <p>Is a process in which you write down user and system requirements into a document. Ideally, these requirements should be clear, consistent, complete and easy to understand. User requirements should be written in natural language and supplemented with dialogue and tables in the document. System requirements can also be written in natural language, but other notations, graphs, maths, etc can also be used. (state machines, automata)</p> -<h2 id="Requirement%20validation">Requirement validation</h2> +<h2 id="requirement-validation">Requirement validation</h2> <p>Is the process of controlling of ensuring that the system requirements will are really what the client wants. There are different checks that can be used to validate the requirements.</p> @@ -589,7 +589,7 @@ Using knowledge on existing systems, control the requirements to ensure that the You should be able to create tests that verify whether or not a requirement is met.</p></li> </ol> -<h2 id="Requirement%20validation%20techniques">Requirement validation techniques</h2> +<h2 id="requirement-validation-techniques">Requirement validation techniques</h2> <ol> <li><p>Requirement reviews @@ -601,7 +601,7 @@ Tests can be designed along with requirements instead of after the fact. If it is difficult to design tests for a requirement, that can mean the requirement is unrealistic.</p></li> </ol> -<h2 id="What%20are%20the%20steps%20in%20elicitation?">What are the steps in elicitation?</h2> +<h2 id="what-are-the-steps-in-elicitation">What are the steps in elicitation?</h2> <ol> <li><p>Discovery & Classification @@ -615,87 +615,87 @@ Prioritize the most important requirements, through negotiation, discussions, co Here the requirements are documented.</p></li> </ol> -<h2 id="Why%20is%20it%20difficult%20to%20elicit%20requirements?">Why is it difficult to elicit requirements?</h2> +<h2 id="why-is-it-difficult-to-elicit-requirements">Why is it difficult to elicit requirements?</h2> <p>Many stakeholders with conflicting needs. Stakeholders speak their own “language”. Lack of communication because things are assumed to be “obvious”.</p> -<h2 id="What%20is%20a%20recognized%20way%20to%20communicate%20requirements?">What is a recognized way to communicate requirements?</h2> +<h2 id="what-is-a-recognized-way-to-communicate-requirements">What is a recognized way to communicate requirements?</h2> <p>Stories, Scenarios.</p> -<h2 id="How%20are%20requirements%20documented%20in%20Waterfall%20and%20in%20SCRUM,%20in%20Product%20Planning?">How are requirements documented in Waterfall and in SCRUM, in Product Planning?</h2> +<h2 id="how-are-requirements-documented-in-waterfall-and-in-scrum-in-product-planning">How are requirements documented in Waterfall and in SCRUM, in Product Planning?</h2> <p>Waterfall: Verify the requirement specificatino with strict change management. SCRUM: Product vision and product backlog, are discussed and updated every sprint. Product Planning: Product vision, release plans and/or product roadmaps. XP: User Stories.</p> -<h2 id="How%20are%20requirements%20negotiated%20with%20stakeholders%20in%20Waterfall%20and%20SCRUM?">How are requirements negotiated with stakeholders in Waterfall and SCRUM?</h2> +<h2 id="how-are-requirements-negotiated-with-stakeholders-in-waterfall-and-scrum">How are requirements negotiated with stakeholders in Waterfall and SCRUM?</h2> <p>Waterfall: Be up front in the requirements phase - state it now or it will be difficult later on. SCRUM: Ongoing refinement of product backlog with stakeholders, say what is most important now, we will continue. XP: Customer on-site.</p> -<h1 id="Q8.%20Product%20Refinement%20and%20Forecasting:%20User%20story%20mapping,%20personas,%20stakeholders,%20product%20backlog">Q8. Product Refinement and Forecasting: User story mapping, personas, stakeholders, product backlog</h1> +<h1 id="q8.-product-refinement-and-forecasting-user-story-mapping-personas-stakeholders-product-backlog">Q8. Product Refinement and Forecasting: User story mapping, personas, stakeholders, product backlog</h1> -<h2 id="What%20is%20a%20persona?">What is a persona?</h2> +<h2 id="what-is-a-persona">What is a persona?</h2> <p>User personas are a useful technique to describe users of your product. A fictional character with a name, picture, relevant characteristics, behavior, opinions and a goal. Different people can have different goals. Understand a personas goal is useful for creating a product that is meaningful to the users.</p> -<h2 id="What%20is%20a%20user%20story?-2">What is a user story?</h2> +<h2 id="what-is-a-user-story-1">What is a user story?</h2> <p>Short description on a type of user, a goal and a reason.</p> -<h2 id="Where%20do%20we%20use%20the%20terms:%20Product%20Feature,%20Epic,%20User%20story?">Where do we use the terms: Product Feature, Epic, User story?</h2> +<h2 id="where-do-we-use-the-terms-product-feature-epic-user-story">Where do we use the terms: Product Feature, Epic, User story?</h2> <p>Product Feature: Corresponds to an Epic. Epic: A collection of related user stories. User story: Breakdown of an Epic. </p> -<h2 id="What%20is%20a%20user%20journey?">What is a user journey?</h2> +<h2 id="what-is-a-user-journey">What is a user journey?</h2> <p>The experiences a person has, when interacting with the software.</p> -<h2 id="What%20are%20the%20key%20characteristics%20of%20a%20product%20backlog?">What are the key characteristics of a product backlog?</h2> +<h2 id="what-are-the-key-characteristics-of-a-product-backlog">What are the key characteristics of a product backlog?</h2> <p>This is to do list of items a SCRUM team must tackle. - Software requirements. - User stories. - Descriptions of supplementary tasks that are needed, such as architecture definition or user documentation.</p> -<h1 id="Q9.%20Risk%20Management">Q9. Risk Management</h1> +<h1 id="q9.-risk-management">Q9. Risk Management</h1> <p>A risk is a potential problem. The possibility of loss or damage. Risk Management: project leaders must evaluate the risks that can affect a project, monitor them, and handle them when problems arrise.</p> -<h2 id="Example%20of%20risk%20categories">Example of risk categories</h2> +<h2 id="example-of-risk-categories">Example of risk categories</h2> <ol> <li>Uncertainty, project, technical, business.</li> <li>Keyperson from team dies, a supplier is not delivering as promissed.</li> </ol> -<h2 id="Categories%20of%20risk">Categories of risk</h2> +<h2 id="categories-of-risk">Categories of risk</h2> -<h3 id="Project%20risks">Project risks</h3> +<h3 id="project-risks">Project risks</h3> <p>Risks that threaten the project plan. Time will be wasted and costs will rise.</p> -<h3 id="Technical%20risks">Technical risks</h3> +<h3 id="technical-risks">Technical risks</h3> <p>Architectural design. Arrises because problems can be harder to solve than expected. Vagueness in the specification. Project gets older and starts to decay.</p> -<h3 id="Business%20risks">Business risks</h3> +<h3 id="business-risks">Business risks</h3> <p>Market risk. What if no one uses the product? Strategic risk. We don’t need that new component after all. @@ -703,14 +703,14 @@ Sales risk. How the fuck do we sell this?! Management risk. The top management don’t support the project anymore. Budget risks. Budget or personnel is lost.</p> -<h2 id="How%20do%20you%20do%20risk%20analysis?">How do you do risk analysis?</h2> +<h2 id="how-do-you-do-risk-analysis">How do you do risk analysis?</h2> <p>Risk analysis and management are actions, that help a software team understand and handle uncertainty. It is a good idea to identify risks. Evaluate the probability of risks. Estimate the impact of a risk and form a reaction plan for if the risk actually happens.</p> -<h2 id="Identify%20risks%20and%20calculate%20risk%20exposure%20and%20describe%20consequence.">Identify risks and calculate risk exposure and describe consequence.</h2> +<h2 id="identify-risks-and-calculate-risk-exposure-and-describe-consequence.">Identify risks and calculate risk exposure and describe consequence.</h2> <p>Risk exposure = probability * loss, describe consequence. Probability < 100%. If p = 100% then it’s an issue.</p> @@ -720,64 +720,64 @@ Deal with the risks above the line, accept the ones below.</p> <p>Establish for each risk above the cut-line (RMMM: Risk Mitigation, monitor, management)</p> -<h3 id="Mitigate">Mitigate</h3> +<h3 id="mitigate">Mitigate</h3> <p>We want to prevent the risk from becoming an issue. We can reduce the probability. Or try to reduce the associated loss. Risk exposure = probability * loss.</p> -<h3 id="Manage">Manage</h3> +<h3 id="manage">Manage</h3> <p>For when a risk has become a loss, try to minimize the loss. This assumes the mitigation activity was unsuccessful. This is done by the project leader.</p> -<h3 id="Monitor">Monitor</h3> +<h3 id="monitor">Monitor</h3> <p>Observe how risks change over time. How the probabilities, loss, or the environment, change over time.</p> -<h2 id="How%20are%20risk%20management%20part%20of%20project%20management">How are risk management part of project management</h2> +<h2 id="how-are-risk-management-part-of-project-management">How are risk management part of project management</h2> -<h3 id="Waterfall%20&#47;%20plan-driven">Waterfall / plan-driven</h3> +<h3 id="waterfall-plan-driven">Waterfall / plan-driven</h3> <p>Risk and risk plans are part of the plans in project management. Development of others plans to contribute to identification of risk. It is planned.</p> -<h3 id="Agile%20-%20inspect%20and%20adapt%20is%20reduction%20to%20produce%20the%20right%20product">Agile - inspect and adapt is reduction to produce the right product</h3> +<h3 id="agile---inspect-and-adapt-is-reduction-to-produce-the-right-product">Agile - inspect and adapt is reduction to produce the right product</h3> <p>Daily SCRUM: Do you have any impediments? Sprint review: Inspects risk related to product and stakeholder. Sprint retrospective: Adresses risks related to how the team works.</p> -<h2 id="What%20are%20B%C3%B6hms%20primary%20risks?">What are Böhms primary risks?</h2> +<h2 id="what-are-bhms-primary-risks">What are Böhms primary risks?</h2> <p>Personal shortcomings, unrealistic schedule, wrong function…</p> -<h1 id="Q10.%20How%20is%20quality%20defined?">Q10. How is quality defined?</h1> +<h1 id="q10.-how-is-quality-defined">Q10. How is quality defined?</h1> -<h2 id="Software%20quality%20attributes">Software quality attributes</h2> +<h2 id="software-quality-attributes">Software quality attributes</h2> -<h3 id="Nonfunctional%20requirements">Nonfunctional requirements</h3> +<h3 id="nonfunctional-requirements">Nonfunctional requirements</h3> <p>Safety, security, reliability, complexity, adaptability, testability, understandability, efficiency, usability, etc…</p> -<h3 id="Functional%20requirements">Functional requirements</h3> +<h3 id="functional-requirements">Functional requirements</h3> <ul> <li>Requirement Specification (waterfall)</li> <li>Product backlog and User Stories (agile)</li> </ul> -<h2 id="What%20is%20quality?">What is quality?</h2> +<h2 id="what-is-quality">What is quality?</h2> <p>Quality is evaluated aesthetically, symbolically and functionally Quality can be either objective or subjective. Quality may not always be obvious.</p> -<h2 id="Definition%20of%20quality">Definition of quality</h2> +<h2 id="definition-of-quality">Definition of quality</h2> <p>Quality is a reflection of one or more peoples evaluation of the compliance of a product or service with their expectations. Quality can be broken into three types of categories: @@ -790,7 +790,7 @@ Quality consists of: - Quality assurance: plan or design processes to prevent bad quality. - Quality control: track that work products meet quality standards.</p> -<h2 id="Why%20invest%20or%20pay%20for%20Quality%20Management?">Why invest or pay for Quality Management?</h2> +<h2 id="why-invest-or-pay-for-quality-management">Why invest or pay for Quality Management?</h2> <p>Cost of not doing it is bad quality - fixing errors.</p> @@ -805,30 +805,30 @@ Quality consists of: <p>Quality Management reduces these costs significantly.</p> -<h2 id="Validation%20(fit%20for%20use)">Validation (fit for use)</h2> +<h2 id="validation-fit-for-use">Validation (fit for use)</h2> <p>Are we building a system that is fit for use? Compliance with the users expectations and experiences?</p> -<h2 id="Verification%20(requirement%20specification%20being%20met)">Verification (requirement specification being met)</h2> +<h2 id="verification-requirement-specification-being-met">Verification (requirement specification being met)</h2> <p>Do we pass all tests and requirements? Are we building a system with all the requirements implemented? Unit/integration tests</p> -<h2 id="Techniques%20for%20verification%20and%20validation">Techniques for verification and validation</h2> +<h2 id="techniques-for-verification-and-validation">Techniques for verification and validation</h2> <p>Testing: of programmes and prototypes. Review: of specifications, documentation and programs.</p> -<h2 id="Is%20it%20verification%20or%20validation?">Is it verification or validation?</h2> +<h2 id="is-it-verification-or-validation">Is it verification or validation?</h2> <p>A user must participate in order to validate. Verification focuses on the compliance to the specifications and a client usually doensn’t participate.</p> -<h2 id="V-model">V-model</h2> +<h2 id="v-model">V-model</h2> -<h1 id="Q11.%20Test%20and%20review">Q11. Test and review</h1> +<h1 id="q11.-test-and-review">Q11. Test and review</h1> <p>Tests are a set of practices that support verification and validation. The purpose is to ensure a program does what it is supposed to, and to discover errors before delivery. @@ -836,12 +836,12 @@ This is done by making sure the progrm meets the requirements and by finding inc Verification: Unit test, component test. Validation: prototype test, user acceptance test.</p> -<h2 id="What%20is%20peer%20review?">What is peer review?</h2> +<h2 id="what-is-peer-review">What is peer review?</h2> <p>Evaluation of work of one or more people with similar skills (peers). Mostly in the form of documents but can also be analysis of code.</p> -<h2 id="What%20is%20the%20difference%20between%20review%20and%20test?">What is the difference between review and test?</h2> +<h2 id="what-is-the-difference-between-review-and-test">What is the difference between review and test?</h2> <p>Review is static, and there is no interaction between errors found in review. Tests are dynamic and errors can come as side-affects of an initial errors. @@ -851,19 +851,19 @@ Inspections can control compliance with a specifications but not with the client (Unless the user participates in the review. Prototypes are preferred for user participation) Inspecions cannot control non-functional properties such as performance, usability, etc.</p> -<h2 id="When%20is%20review%20good?">When is review good?</h2> +<h2 id="when-is-review-good">When is review good?</h2> <p>For documents, designs, architectures, plans, etc.</p> -<h2 id="When%20is%20test%20good?">When is test good?</h2> +<h2 id="when-is-test-good">When is test good?</h2> <p>For functionality and dynamic use of the program.</p> -<h2 id="What%20is%20the%20V-Model">What is the V-Model</h2> +<h2 id="what-is-the-v-model">What is the V-Model</h2> <p>A model that shows the connection between tests at different levels and primary activities that drive the tests.</p> -<h2 id="Name%20tests%20at%20different%20levels:">Name tests at different levels:</h2> +<h2 id="name-tests-at-different-levels">Name tests at different levels:</h2> <p>Unit test, component test, integration test, system test, user acceptance test.</p> @@ -871,14 +871,14 @@ Inspecions cannot control non-functional properties such as performance, usabili Integration test: confirm that interfaces are compatible and work as expected. Acceptance test: validate fit for use, exploratory test.</p> -<h2 id="When%20is%20test%20done?">When is test done?</h2> +<h2 id="when-is-test-done">When is test done?</h2> <p>Plan driven: in the end (often a dedicated test-team aspart of QA) Agile: all the time (test competence on the team, accept criteria on story, automated test, TDD)</p> -<h1 id="Q12.%20Configuration%20Management%20and%20DevOps">Q12. Configuration Management and DevOps</h1> +<h1 id="q12.-configuration-management-and-devops">Q12. Configuration Management and DevOps</h1> -<h2 id="What%20is%20DevOps,%20how%20can%20you%20define%20it?">What is DevOps, how can you define it?</h2> +<h2 id="what-is-devops-how-can-you-define-it">What is DevOps, how can you define it?</h2> <p>DevOps is a method for both development and operation. DevOps is a development method for IT systems that connects different activities in projects. @@ -889,7 +889,7 @@ It is also defined by The Three Ways: 2. Feedback. 3. Continuous Learning.</p> -<h2 id="What%20is%20the%20purpose%20of%20Continuous%20Integration?">What is the purpose of Continuous Integration?</h2> +<h2 id="what-is-the-purpose-of-continuous-integration">What is the purpose of Continuous Integration?</h2> <p>When the code is checked, it is automatically integrated with the system. Speed up the rate of delivery and run tests constantly. @@ -897,24 +897,24 @@ Bsed on tools to automate the process. Depends on a suite of unit tests. Does NOT eliminate the need for testers.</p> -<h2 id="What%20is%20the%20purpose%20of%20Continuous%20Testing?">What is the purpose of Continuous Testing?</h2> +<h2 id="what-is-the-purpose-of-continuous-testing">What is the purpose of Continuous Testing?</h2> <p>Continuous Testing in DevOps is a type of software test that involves testing at all stages of a develoments lifecycle. The goal is the continuously evaluate the quality of the software.</p> -<h2 id="What%20is%20the%20purpose%20of%20Continuous%20Delivery%20and%20Deployment?">What is the purpose of Continuous Delivery and Deployment?</h2> +<h2 id="what-is-the-purpose-of-continuous-delivery-and-deployment">What is the purpose of Continuous Delivery and Deployment?</h2> -<h3 id="Continuous%20Delivery">Continuous Delivery</h3> +<h3 id="continuous-delivery">Continuous Delivery</h3> <p>Ensure that code can be implemented securely. Ensure that the business and service application function as expected and deliver every change to production.</p> -<h3 id="Continous%20Deployment">Continous Deployment</h3> +<h3 id="continous-deployment">Continous Deployment</h3> <p>Ensure that tests are automated and that every change is automatically implemented in production. Makes the development and release process faster and more robust.</p> <p>Automated access to well defined environments. Tools like Docker for containerization or Virtual Machines.</p> -<p class="footer"><a href="/">adamski.wtf</a></p> +<p class="footer"><a href="/">adast.xyz</a></p> </html> diff --git a/dst/game.html b/dst/game.html index e4c461e..7452dbd 100644 --- a/dst/game.html +++ b/dst/game.html @@ -3,14 +3,14 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> -<title>My game — adamski.wtf</title> +<title>My game — adast.xyz</title> <link rel="icon" type="image/png" href="favicon.png"> <link rel="stylesheet" href="styles/style.css"> -<p class="header"><a href="/">adamski.wtf</a></p> +<p class="header"><a href="/">adast.xyz</a></p> <p class="note">May 7, 2021</p> -<h1 id="My%20game">My game</h1> +<h1 id="my-game">My game</h1> <p>Aftershock (working title) is a multiplayer old-school arena shooter being made in Unity. It’s a hobby project that I have been working on since 2016. It started as a <em>warmup</em> project before jumping into developing an MMO, but I have since learned how much work goes into making just a multiplayer fps. Especially as a solo project. </p> @@ -31,5 +31,5 @@ <p><a href="https://www.youtube.com/c/rizen1">Gameplay clips</a><br/> <a href="https://trello.com/b/ycQyrouQ">Follow my progress</a></p> -<p class="footer"><a href="/">adamski.wtf</a></p> +<p class="footer"><a href="/">adast.xyz</a></p> </html> diff --git a/dst/index.html b/dst/index.html index ade208f..775bf02 100644 --- a/dst/index.html +++ b/dst/index.html @@ -3,26 +3,26 @@ <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> -<title>adamski.wtf</title> +<title>adast.xyz</title> <link rel="icon" type="image/png" href="favicon.png"> <link rel="stylesheet" href="styles/style.css"> -<p class="header"><a href="/">adamski.wtf</a></p> +<p class="header"><a href="/">adast.xyz</a></p> <p>Hello there!</p> <p>My name is Adam and I am a computer nerd studying at Aalborg University. I am interested in space, game dev, sailing and the outdoors.</p> <p>I’m currently working as a student developer at E-Komplet and I work on my multiplayer old-school arena shooter in my free time. I occasionally post videos of my game along with other stuff <a href="https://youtube.com/c/rizen1">here</a>.</p> -<h2 id="Posts">Posts</h2> +<h2 id="posts">Posts</h2> <p><a href="game.html">Project Aftershock // Rizen’s Arena</a></p> -<h2 id="Links">Links</h2> +<h2 id="links">Links</h2> <p><a href="https://github.com/adamstuck">Github</a><br/> <a href="https://youtube.com/c/rizen1">Youtube</a><br/> <a href="https://steamcommunity.com/id/rizen1/">Steam</a><br/> <a href="https://www.twitch.tv/rizen1337">Twitch</a></p> -<p class="footer"><a href="/">adamski.wtf</a></p> +<p class="footer"><a href="/">adast.xyz</a></p> </html> diff --git a/dst/sitemap.xml b/dst/sitemap.xml index 26d4261..cf45a8f 100644 --- a/dst/sitemap.xml +++ b/dst/sitemap.xml @@ -4,8 +4,8 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> -<url><loc>https://adamski.wtf/SPO notes.html</loc><lastmod>2022-02-17</lastmod><priority>1.0</priority></url> -<url><loc>https://adamski.wtf/game.html</loc><lastmod>2022-02-17</lastmod><priority>1.0</priority></url> -<url><loc>https://adamski.wtf/index.html</loc><lastmod>2022-02-17</lastmod><priority>1.0</priority></url> -<url><loc>https://adamski.wtf/ase.html</loc><lastmod>2022-02-17</lastmod><priority>1.0</priority></url> +<url><loc>https://adast.xyz/SPO notes.html</loc><lastmod>2022-04-23</lastmod><priority>1.0</priority></url> +<url><loc>https://adast.xyz/game.html</loc><lastmod>2022-04-23</lastmod><priority>1.0</priority></url> +<url><loc>https://adast.xyz/index.html</loc><lastmod>2022-04-23</lastmod><priority>1.0</priority></url> +<url><loc>https://adast.xyz/ase.html</loc><lastmod>2022-04-23</lastmod><priority>1.0</priority></url> </urlset> diff --git a/dst/styles/style.css b/dst/styles/style.css index 557c0ca..762c7c2 100644 --- a/dst/styles/style.css +++ b/dst/styles/style.css @@ -8,7 +8,7 @@ body { font: 1.0em/1.5 'Open Sans', sans-serif; -webkit-text-size-adjust: 100%; scrollbar-color: #454a4d #202324; - margin-top: 0; + margin: 0em 1em; } @@ -70,6 +70,7 @@ blockquote { } .footer { margin-top: 2em; + margin-bottom: 4em; } .note { margin: 0; @@ -88,4 +89,4 @@ blockquote { border-color: #fda; padding: 0.5em 1em; text-decoration: none; -} */
\ No newline at end of file +} */ diff --git a/src/_footer.html b/src/_footer.html index 8e0463b..5fcef8b 100644 --- a/src/_footer.html +++ b/src/_footer.html @@ -1,2 +1,2 @@ -<p class="footer"><a href="/">adamski.wtf</a></p> -</html>
\ No newline at end of file +<p class="footer"><a href="/">adast.xyz</a></p> +</html> diff --git a/src/_header.html b/src/_header.html index fe44db9..4308285 100644 --- a/src/_header.html +++ b/src/_header.html @@ -7,4 +7,4 @@ <link rel="icon" type="image/png" href="favicon.png"> <link rel="stylesheet" href="styles/style.css"> -<p class="header"><a href="/">adamski.wtf</a></p>
\ No newline at end of file +<p class="header"><a href="/">adast.xyz</a></p> diff --git a/src/styles/style.css b/src/styles/style.css index 557c0ca..762c7c2 100644 --- a/src/styles/style.css +++ b/src/styles/style.css @@ -8,7 +8,7 @@ body { font: 1.0em/1.5 'Open Sans', sans-serif; -webkit-text-size-adjust: 100%; scrollbar-color: #454a4d #202324; - margin-top: 0; + margin: 0em 1em; } @@ -70,6 +70,7 @@ blockquote { } .footer { margin-top: 2em; + margin-bottom: 4em; } .note { margin: 0; @@ -88,4 +89,4 @@ blockquote { border-color: #fda; padding: 0.5em 1em; text-decoration: none; -} */
\ No newline at end of file +} */ |