From 35b07333c9da90c9303c53946738250672d6eabb Mon Sep 17 00:00:00 2001 From: thomasabishop Date: Fri, 29 Apr 2022 07:30:47 +0100 Subject: [PATCH] Last Sync: 2022-04-29 07:30:47 --- Programming_Languages/NodeJS/Middlewear.md | 56 +++++++++++++++------ pdf/Algorithmic_complexity.pdf | Bin 549310 -> 549310 bytes pdf/Arrays.pdf | Bin 83599 -> 83599 bytes pdf/Assembly_programs.pdf | Bin 58049 -> 58049 bytes pdf/Atomic_and_molecular_sentences.pdf | Bin 97737 -> 97737 bytes pdf/Axioms_of_set_theory.pdf | Bin 66749 -> 66749 bytes pdf/Basic_database_concepts.pdf | Bin 99218 -> 99218 bytes pdf/Basic_properties_of_sets.pdf | Bin 128524 -> 128524 bytes pdf/Biconditional_Elimination.pdf | Bin 39042 -> 39042 bytes pdf/Biconditional_Introduction.pdf | Bin 35537 -> 35537 bytes pdf/Binary_arithmetic.pdf | Bin 149838 -> 149838 bytes pdf/Binary_arithmetic_with_circuits.pdf | Bin 357156 -> 357156 bytes pdf/Bits,_bytes,_nibbles.pdf | Bin 51186 -> 51186 bytes pdf/Compile_from_source.pdf | Bin 49795 -> 49795 bytes pdf/Conditional_Elimination.pdf | Bin 43232 -> 43232 bytes pdf/Conditional_Introduction.pdf | Bin 74250 -> 74250 bytes pdf/Conjunction_Elimination.pdf | Bin 47565 -> 47565 bytes pdf/Conjunction_Introduction.pdf | Bin 45840 -> 45840 bytes pdf/Defining_a_computer.pdf | Bin 731550 -> 731550 bytes pdf/Design_features_of_language.pdf | Bin 60132 -> 60132 bytes pdf/Disjunction_Elimination.pdf | Bin 91007 -> 91007 bytes pdf/Disjunction_Introduction.pdf | Bin 54596 -> 54596 bytes pdf/HTTP_request_types.pdf | Bin 46765 -> 46765 bytes pdf/Indeterminacy.pdf | Bin 112534 -> 112534 bytes pdf/Law_of_the_Excluded_Middle.pdf | Bin 35622 -> 35622 bytes pdf/Logic_circuits.pdf | Bin 157687 -> 157687 bytes pdf/Logic_gates.pdf | Bin 407144 -> 407144 bytes pdf/Logical_possibility_and_necessity.pdf | Bin 122811 -> 122811 bytes pdf/Lovelace_quote.pdf | Bin 31770 -> 31770 bytes pdf/Morphology.pdf | Bin 77311 -> 77311 bytes pdf/Negation_Elimination.pdf | Bin 44476 -> 44476 bytes pdf/Negation_Introduction.pdf | Bin 44871 -> 44871 bytes pdf/Object_language_and_meta-language.pdf | Bin 131464 -> 131464 bytes pdf/Package_management_in_Arch.pdf | Bin 71061 -> 71061 bytes pdf/Primary_key.pdf | Bin 80548 -> 80548 bytes pdf/Queue.pdf | Bin 154497 -> 154498 bytes pdf/RESTful_APIs.pdf | Bin 105744 -> 105744 bytes pdf/Recursion.pdf | Bin 176160 -> 176160 bytes pdf/Reiteration.pdf | Bin 53262 -> 53262 bytes pdf/SQL_syntax.pdf | Bin 559941 -> 559941 bytes pdf/Semantic_versioning.pdf | Bin 118251 -> 118251 bytes pdf/Soundness.pdf | Bin 98882 -> 98882 bytes pdf/Stacks.pdf | Bin 151942 -> 151942 bytes pdf/Syllogism.pdf | Bin 79914 -> 79914 bytes pdf/The_Pragmatic_Programmer_1999.pdf | Bin 169339 -> 169339 bytes pdf/The_binary_number_system.pdf | Bin 146858 -> 146858 bytes pdf/Theorems_and_empty_sets.pdf | Bin 75643 -> 75643 bytes pdf/Turing_machines.pdf | Bin 102880 -> 102880 bytes pdf/User_management.pdf | Bin 74126 -> 74126 bytes pdf/Von_Neumann_architecture.pdf | Bin 239665 -> 239665 bytes pdf/Why_computers_use_binary.pdf | Bin 144674 -> 144674 bytes 51 files changed, 41 insertions(+), 15 deletions(-) diff --git a/Programming_Languages/NodeJS/Middlewear.md b/Programming_Languages/NodeJS/Middlewear.md index e44575c..b365a02 100644 --- a/Programming_Languages/NodeJS/Middlewear.md +++ b/Programming_Languages/NodeJS/Middlewear.md @@ -3,23 +3,23 @@ tags: - Programming_Languages - backend - node-js - - middlewear + - middleware --- -## What is middlewear? +## What is middleware? * Anything that terminates the `req, res` cycle counts as middleware. It is basically anything that acts as an intermediary once the request is received but before the resource is sent. A good example would be the `app.use(express.json()` or `app.use(bodyParser.json)` functions we call in order to be able to parse JSON that is sent from the client. -* You will most likely have multiple middlewear functions running at once. We call this intermediary part of the cycle the **request processing pipeline**. -* Generally all middlewear will be added as a property on the Express `app` instance with the `app.use(...)` syntax. +* You will most likely have multiple middleware functions running at once. We call this intermediary part of the cycle the **request processing pipeline**. +* Generally all middleware will be added as a property on the Express `app` instance with the `app.use(...)` syntax. -## Creating custom middlewear functions +## Creating custom middleware functions ### Basic schema ````js app.use((req, res, next) => { - // do some middlewear + // do some middleware next() }) @@ -27,7 +27,7 @@ app.use((req, res, next) => { ### `next` -The `next` parameter is key, it allows Express to move onto the next middlewear function once the custom middlewear executes. Without it, the request processing pipeline will get blocked. Middlewear functions are basically asynchronous requests and as such they use a similar syntax as Promises (e.g `then`) for sequencing processes. +The `next` parameter is key, it allows Express to move onto the next middleware function once the custom middleware executes. Without it, the request processing pipeline will get blocked. middleware functions are basically asynchronous requests and as such they use a similar syntax as Promises (e.g `then`) for sequencing processes. ### Example of sequence @@ -53,9 +53,9 @@ Do process B... ```` > - > It makes more sense of course to define our middlewear within a function and then pass it as an argument to `app.use()` + > It makes more sense of course to define our middleware within a function and then pass it as an argument to `app.use()` -## Useful built-in middlewear +## Useful built-in middleware ### `express.static()` @@ -71,17 +71,17 @@ We can expose this to express with `app.use(static('public'))`. Then if we navig > > `app.use(express.urlencoded())` -Generally we handle the data of API requests via a JSON body and the `express.json()` middlewear. However, in cases where the data is sent from the client in the form of `key=value&key=value` appendages to the request URL, `urlencoded` allows us to parse them. +Generally we handle the data of API requests via a JSON body and the `express.json()` middleware. However, in cases where the data is sent from the client in the form of `key=value&key=value` appendages to the request URL, `urlencoded` allows us to parse them. -## Third-party middlewear +## Third-party middleware ### Helmet -Helmet is middlewear that makes it easier to set HTTP headers. +Helmet is middleware that makes it easier to set HTTP headers. ### Morgan -Morgan is middlewear that is used to log HTTP requests to the Express instance. +Morgan is middleware that is used to log HTTP requests to the Express instance. ```js app.use(morgan('dev')) ``` @@ -94,8 +94,34 @@ This uses the `tiny` default which logs the bare minimum giving us: request type It defaults to logging on the console but can also be configured to write to a log file. -## Including middlewear based on environment +## Including middleware based on environment With a full-scale Node application you will typically run three environments: * Development * Testing -* Production \ No newline at end of file +* Production + +We will not want to run certain types of middleware in all environments. For example, it would be costly to run logging in the app's production environment. It would make more sense to run this only in development. + +### Accessing current Node environment + We can control which middleware we run via the Node envrionment variables: `process.env` (see for instance [ports](./Ports.md)). + +To determine the current environment we can use the variable `process.env.NODE_ENV`. This works globally regardless of the kind of Node app we are building. But in Express, there is a built in method for retrieving the current envrionment: `app.get('env')`. + +If you haven't manually set up your environments Node will return `undefined` but express defaults to `development`. + +```js + +console.log(process.env.NODE_ENV); // undefined +console.log(app.get("env")); // development + +``` + +### +We can set Morgan to run only in development with: + +```js +if (app.get("env")) { + app.use(morgan("common")); + console.log('Morgan enabled') +} +``` diff --git a/pdf/Algorithmic_complexity.pdf b/pdf/Algorithmic_complexity.pdf index 5648cbd9a1bf5d241b115f43cc9f6c73f8199e46..e16e237854a1d38c6baecb1c2b9ef70436246890 100644 GIT binary patch delta 1757 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 diff --git a/pdf/Arrays.pdf b/pdf/Arrays.pdf index 2970104b1b448dc31a25ad46036bbc57b6cd66ab..0f8adaf5810d419b961c635ea960fb312f0f6152 100644 GIT binary patch delta 105 zcmeD0W$o`}ZP>zSV#{J_U~W9!!j@4U%-SAp%P7g=Y~f<;YH4O*VQFb%?r7%fYGC5z aXauAToz09)49uPF6l@47nZDhX@df}`)*0yl delta 105 zcmeD0W$o`}ZP>zSV#{J-U|}%b!j@4U%-SAp%P7g=>}KZVXy9yMWMbiF>SAPU=;&f% bU}|jQX5eh-WN2VvY^PvDNXhi=u8cPTPWl;} diff --git a/pdf/Assembly_programs.pdf b/pdf/Assembly_programs.pdf index 21cd0487eeec4fbe31eec0cc62da5b2788bfb1c2..330ef7bcc08dcf84115f8f60f24633a9b2d6a2f9 100644 GIT binary patch delta 103 zcmX?jl=eCs#KEOH*fOI|Um8N+xqY+5rITu^%u1 delta 103 zcmX?jl=%WED( delta 111 zcmX^4oAu;x)`l&Nilyup1{MYehGx?>N*QHfobBGFjIr#_CT=D!u4cxTE+z(!7G@?u ebp~c`hK4SdMlNoaE|z9?3O0n4On+U&cn<)oX&rw6 diff --git a/pdf/Axioms_of_set_theory.pdf b/pdf/Axioms_of_set_theory.pdf index ee0aaa5058af03d8e043820deb4f624c2bf8144c..42376da8e8594e0c03b59794a9ba7e064d4e8ac1 100644 GIT binary patch delta 105 zcmdnn$+EYTWrNW#HcJC@V*}&K7QbYn%+1libUB?}ogE#`Esb4_%uI~Uj9pwToLwx9 a42)ddEX_=v3{5QU6l@47nSPp?@e=@6k{r|k delta 105 zcmdnn$+EYTWrNW#HVXp_0|S%E7QbYn%+1libUB^fOpT3=3@uGfOw3%|j4hp diff --git a/pdf/Biconditional_Elimination.pdf b/pdf/Biconditional_Elimination.pdf index abd7af3ad6c1afee4c8c74b76a7d65a773a035ec..3ee8beeccc9856f6ecbe1102018c005524972879 100644 GIT binary patch delta 106 zcmZqL$keovX~UF>?3M=R#s-GQlV?wqfw4F5o4B3T*~rP#(8<-s(bCY(!o>=p(V1_p-alV?wqfw4F5o4B3T+0wwk%+Oo b)Y8q;#nsKk&CSBq*iONQkdnzerk?@;e5D>D diff --git a/pdf/Biconditional_Introduction.pdf b/pdf/Biconditional_Introduction.pdf index fb200820478be7b033366ed1a6010fdd31c64223..be86a9def3de4a9e0c0cd1ce9dd4e029602047ea 100644 GIT binary patch delta 106 zcmcaOmFePCrVU9g?3M=R#s-EalQUanVC>C3E#9ooPR8cO&W6TjE=ER{j)n%VCWg+g a28Nb~1}4T9mPT%tb_zCxluVZD+719Fvm2=Z delta 106 zcmcaOmFePCrVU9g>=p(V1_p)}lQUanVC>C3E#9oomS$$=&d!FeM$WEACI(K1hOTC& aE(T^!PNvS5&Q8V_b_zCxluVZD+719dvm93d diff --git a/pdf/Binary_arithmetic.pdf b/pdf/Binary_arithmetic.pdf index 504d3a5db2d4dd3d69aa6ac0b0f3735e602a23ae..23e04f294a37ac9fa0fea698c6567717dadf7151 100644 GIT binary patch delta 135 zcmX>%iSyhf&W0AoEldqInwAFU#s8HGDK3d6sR|k{Rz?O!Mg}HE z5GC7J+Awi*JG(kMx>=fAnwwa-TDllpS~|KKy1JRT8W@{cnwh(qIoT=L5K^-JyE{`j FBLHFOB0T^A delta 135 zcmX>%iSyhf&W0AoEldqInid8Y1_mZ(+6IQ|1_tVyT>8HGDK3d6sR|k{Rz?O!Mg}HE z5GC7J+Awi*J6kxrxf(hYCx;Z*Jn;MzBn%XJY5K^-JyE{`j FBLG-zA_)Kh diff --git a/pdf/Binary_arithmetic_with_circuits.pdf b/pdf/Binary_arithmetic_with_circuits.pdf index 86ec6d44b040619816e0d49f8616a5963cb9b136..42550075ec60dfd009229b0abf6b1bfc26198ead 100644 GIT binary patch delta 120 zcmZ4TOmxXJ(S{br7N!>F7M3lnVQK7^2Ij^F#^%#w(^zF-ob3&1tg773#%89@rbb3) o#x8CKhAx&CCXQ}K7Osw_j>eYeE{2BAb_zCxlx%-d$ZEp~0LP0T5&!@I delta 120 zcmZ4TOmxXJ(S{br7N!>F7M3lnVQK6Z1{MYeCKl6U(^zF-ob3&1tg773t|o@Armp6W o7Dko^mZmNSrp{(gW@fGyPL7s_CT38HGDK3d6sR|k{Rz?O!Mg}HEP$io+ y4(?}lb~1H!bhUIfGIn(}HMTT0GjK6>v2e9?aW!{zGc&a?wo|Ynq-3(z@e=@K3?ozk delta 129 zcmey=&-|&MdBeX0S{4Qt1_maU+6IQ|1_tVyT>8HGDK3d6sR|k{Rz?O!Mg}HEP$io+ x4(?}lwlp<0Gca*;b22t{b2D-?b2c@1Hgq&MG63=&jhu|^6l@47nXGmE1OQM!BHjQ1 diff --git a/pdf/Compile_from_source.pdf b/pdf/Compile_from_source.pdf index e5f9d093874429ebe2231a8241386d268a19873e..d2eeab24f4e95c0b7584beac721a900aea40134f 100644 GIT binary patch delta 127 zcmZo}Wo~X|-r&DS%hJHy*ucQ!@)UH)Bh4CnIB17c&_Ep^1y7v6G>plcB4dk&Bt3 btA&Y+vAMIOv7wozlbwPMAtjU5SL_4;|Gge{ delta 106 zcmaEGk?FxjrVXDLvRfEf7#J8@O#Zb{2FBhjyXZKpv#Ysc1dc1d;%0}BHKL(A#=BpGF3ob3-K8QIyL-HgnPjf^eKOiV0I%pEN( fjh#(h4Gqj)oXlMfE!>Pu?G$VXDVeUV$ao(BT)-Qf diff --git a/pdf/Conjunction_Elimination.pdf b/pdf/Conjunction_Elimination.pdf index 0a86827d75d2130579007648a9d3b7bc034d5a3c..84ccaa01747c64d6b223e0caab7b5207017163c9 100644 GIT binary patch delta 105 zcmX^6nd$6jrVT4Lv0ECL8ygs!OxwEmGtD~u*p{t9T ZiJO6uB~Y=UiKDBXf(;=hlSOy#007Tb9q<4E delta 105 zcmX^6nd$6jrVT4Lv0E5e7#J8COkTf92F6}|X%m~Xi?OMRi-oI`sfDYdvw^9Fxuc7v afw_s1shNeFk+G41oq`P^C6h&W?f?MFxgEp+ diff --git a/pdf/Conjunction_Introduction.pdf b/pdf/Conjunction_Introduction.pdf index f4c98c95200a0806d7bcd87e8d626365c6436555..00239275e19324d2357701097902c8f011675a57 100644 GIT binary patch delta 106 zcmbR6jA_C%rVWm3*ewmrjSURVCwr`sfw4DduUW4if=49yNXlZO_?(AZ0 aWaRAXVs7kW;9}rtYNudBNXg`gO*;T?YaLDi delta 106 zcmbR6jA_C%rVWm3*ewh!3=E76Cwr`sfw4DduUW}+J}WMSas?B-}>X5r>yWMF7) aXy9mUVr1g%YVK<2W~X37NXg`gO*;T*avdZ9 diff --git a/pdf/Defining_a_computer.pdf b/pdf/Defining_a_computer.pdf index 45211717373a2d13834e594c9f51ff3b31eeb88e..3b898cf7ba8e391531aaac9dfc5cd5750c0d621e 100644 GIT binary patch delta 132 zcmbPtS!dp5orV_17N!>F7M2#)7Pc1l7LFFq7OpMaLNe@@2Ij^F#+K71Ww_y-?KU#p zU%8#loL!yF%-swOoh*$_TntQ%TujVeogAG_T`bKV9Zihv6l@47*F7M2#)7Pc1l7LFFq7OpMaLNe?Y1{MYerUug`Ww_y-?KU#p zU%8##oQxbTj10`3%q?9E4PDILjEzlP&0P)6P0Y>Q3`|Yz6l@47*ZxcQZ0GH!?ACv~)BzGBdNVurM@tb#}9Gb#*gvv{SGlq+~M7s|Nrviz3DV diff --git a/pdf/Disjunction_Elimination.pdf b/pdf/Disjunction_Elimination.pdf index 58cb7e2ace76f6e74fc1998a930b3e1d29e27828..afefb99a6ec1741c6b1d156093541cd1473df189 100644 GIT binary patch delta 111 zcmex=jP?I9)`l&NyQ0}G4a|)V3@xW0jAoR9akf8+W=v;ub~H1xFf}xGb9FXxbaZnu fH8C|XcQi6Kv@kX^wlp>M8i delta 106 zcmX@IiuuSY<_(9=uv-{d7#J9tPCj`?2FBj}=8P@7v!#iJqq&8vfw8l*o1w9>p_{R* bv!SzvsjH)jg^7!yo1KCUAtjS@uG|0s@U$Nw diff --git a/pdf/HTTP_request_types.pdf b/pdf/HTTP_request_types.pdf index 6b24f2a5c13072eacddcdb5d1f3378be5001da84..500ea48ccc579e7e99be9205306d100dfb3a8046 100644 GIT binary patch delta 106 zcmZ4cmTB!L!2FBj}aos#NX9HtLBR4}MGeZ{(H%C`jV>4GX bLo-WPH%9|AS7S>{Cp!fjLP{oI+IkxR7u+A+ delta 106 zcmZ4cmTB!Og^_x2FBj}aos#NXBQ`PM+0L6R|^*lV`EnfBV%J@ b6C+nA15;yDGYcbELpuc>|$c( gVqs=sYGQ0^RY2fN=V5eY1NXhoTZHyd@01C<-qW}N^ delta 112 zcmbRCo^9HDwuUW?W^33j3@i)`jLfFnu3?mcakeL{VSLT$Y-(<5Y3A%|?qpzKXlUwY gYG&eMXk=(^WMOJ#WMpjQYNudBNXhoTZHyd@0QIsQ`2YX_ diff --git a/pdf/Law_of_the_Excluded_Middle.pdf b/pdf/Law_of_the_Excluded_Middle.pdf index 471ff7c4639e561cba7c38ec748103090ce0e5b2..0931b83735401a5836e6cc14051401cc8fdba863 100644 GIT binary patch delta 106 zcmZ2BjcM65rVYj|?3M=R#s)@4ldW20VC>DYEhkx>olRZboD57Y%-k%Uot&LqO`Qx) aOf1Zd4NZ-W44q9)?G$VXDVdzvwHE*t?;I@v delta 106 zcmZ2BjcM65rVYj|>=p(V1_nkJldW20VC>DYEhkx>O-&6QU5yRR3`{LtO)M=;oSY0@ a&0UNg4b4nUO`T1h>=bMWDVdzvwHE*b#vAbf diff --git a/pdf/Logic_circuits.pdf b/pdf/Logic_circuits.pdf index 275ba4632e2acb954222ada47bfbab2fef9a8d6a..a16e16aba751dc581db70e67b53a8dd68bc20e12 100644 GIT binary patch delta 154 zcmexxu~V>dA*3XhOW!9o XFTEr~!N}NfI-?tt=JuCqOni(0+ao9x delta 154 zcmexxA0q(q4Jc#) diff --git a/pdf/Logic_gates.pdf b/pdf/Logic_gates.pdf index 501c409b4d6eb0b7fc09dba531faf83ba64ecb37..f5d998de1cbcacb59856bef4192f8e4cf3dfd07b 100644 GIT binary patch delta 122 zcmaFyM&iXAiG~)&7N!>F7M2#)Eo_Av?3M=R#s(&a(F7M2#)Eo_Av>=p(V1_q`^(}u-fXy#~O;bP!y>1uA|3RGk1WZ`UVU}WaxYU*OAU_(gB_SN?o1sDO_ CJ0qC@ diff --git a/pdf/Lovelace_quote.pdf b/pdf/Lovelace_quote.pdf index bc34dcdf71fe4242038327baf368f69070bd0561..77b026b225ee36b925718fa5dd91dfb68795ff33 100644 GIT binary patch delta 129 zcmbRBgK^dm#tjB#T9yXp#s(&a+6IQ|1_tVyT>8HGDK3d6sR|k{Rz?O!Mg}HEP$iqA y%I>f@yBJznI+`0;nwdEnnY&py8#|jhT39-pSs1!Fn>!nr+9}u&QZl)+dLaPUC?UlF delta 129 zcmbRBgK^dm#tjB#S{4Qt1_q|a+6IQ|1_tVyT>8HGDK3d6sR|k{Rz?O!Mg}HEP$iqA y%I>f@o0*z88abPoI+{3}n47q|n3)-vIU5^T7#X-Z8af(U*eTc$QZl)+dLaPGMIm1R diff --git a/pdf/Morphology.pdf b/pdf/Morphology.pdf index f538501e1aeba4fe22b8e94095323163df2c40eb..fa0e03868ab2a42a6fdf8767a4e60892616c1a1a 100644 GIT binary patch delta 111 zcmex=o8|v)mWC~iGga9w4a|)V3=O6)P-T>Xakd{;WmIQ(HZ(LdurzjdGIF+badUPv fa5OY^HZ`;~H*m7BFm^RHvs17kq-46TF5@Kt(l{K< delta 111 zcmex=o8|v)mWC~iGga9w3@i)`42`BQP-T>Xakd{;WmIQ(cD68cF*USwHZ*WCGdDJ{ fFfnqna5XnHb~1E!H8Zeqwo|Ynq-46TF5@Kt%!nMU diff --git a/pdf/Negation_Elimination.pdf b/pdf/Negation_Elimination.pdf index 42fcc9ff8150ca4574939f02b705b41db97ef066..46e2f011f19af70a47bb723b7fb6876328ac6e3e 100644 GIT binary patch delta 106 zcmdmUn`zH&rVXE$v0ECL8ygszO#Zb@2FBhjyL>IHv#E=jrIE3-p}B#jsiB#(xwE5@ av!$uCo12-TAy9{#oq`P^C6jsAt_J|&)E(^r delta 106 zcmdmUn`zH&rVXE$v0E5e7#J8EPX4t_2FBhjyL>IHvw@MJqk*Hdp{0eZsfCN7qmzZX brG=@hi-ozVo1>$%v7LeqAtjS}*RBTu>H;21 diff --git a/pdf/Negation_Introduction.pdf b/pdf/Negation_Introduction.pdf index f7157c7986e73af4c527678aa3f5a04f74c8615d..46d728d36f579b786dba3b161429f11fe35aeb86 100644 GIT binary patch delta 129 zcmX?pkLmb5rVZRHwJZ(HjSY-UwG9l_4Gh#Zx%7SWQ(O{DQWZ2@tc(ndj0{YSph`BI yu2f-lHZ*fFcXKtcFn2aHGBY)Eb8~VrHFq>}GPSgHax`!?w^Ohoq-64(b*ll&`XTNB delta 129 zcmX?pkLmb5rVZRHwJZ!Q3=E8ov<(c^4Gh#Zx%7SWQ(O{DQWZ2@tc(ndj0{YSph`BI xu2f-lcC<8cH8*iJc6M}gGH`M;H*q#Muyl2^bh89X89SNUDcBHFGI`Fr)d1HbB1QlJ diff --git a/pdf/Object_language_and_meta-language.pdf b/pdf/Object_language_and_meta-language.pdf index e0c89c8c2df7501f2b6a9c69366e95b2781a9ec9..4a2c645502b9cf1f5bbfbdf9c71822ef72c993c0 100644 GIT binary patch delta 132 zcmeBZ=IChVXxPGN{Y}f#z}(ot$W+_FP~E^lU6V`SH$TNCu_RSN!^O(Tz{tqJ#0aWn zd+ImFtDH`524=3NPA+C{j)rFDmToQ<24)6^PL`%7Zboiy28MPDHjV_8Y^`D9VFUmn C1tD1g delta 132 zcmeBZ=IChVXxPGN{Y}flz{0@5*ht&JP~E^lU6V`SH$TNCu_RSN!^O(Tz{tqJ#0aWn zd+ImFtDH_QmadkjX0C2VE*8el2BzjF=H{l(29Bn#1}1J!7Up&eHjV_8Y^`D9VFUmi C10hWS diff --git a/pdf/Package_management_in_Arch.pdf b/pdf/Package_management_in_Arch.pdf index fa71f2ec11498e4e4d122069b62a7c6500410c8c..69b921abfe1df99051446b9bf5092340444d58ac 100644 GIT binary patch delta 133 zcmbQbnq}&0mWC~iJ-k|$2Ij^FhKAY(hUx|e>Y7~ozWFIGi6yBD8ZK5w21Z5(CPq*t z+qdyDo@H}3Ha0gkFfes9b9QmGFg7uBGcb2GH*s~duy8bRadI)SQ?MbVWco1?#`6H} C&mo}z delta 133 zcmbQbnq}&0mWC~iJ-k{L1{MYeh9=quhUx|e>Y7~ozWFIGi6yBD8ZK5w21Z5(CPq*t z+qdyDo@H}3G%$B{G&eACb9OXwHFq(0GB7i8Gc++WGqkX9HnecDQ?MbVWco1?#`6H` Ct|4Op diff --git a/pdf/Primary_key.pdf b/pdf/Primary_key.pdf index d8b627ae38647f732988920e615c5ea58953aabb..1c4c92acebe0c32e438cc547466e60d5391d9c10 100644 GIT binary patch delta 111 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 E0Dtl#t^fc4 diff --git a/pdf/Recursion.pdf b/pdf/Recursion.pdf index 5d898ca209964f3d27793db4e7f69cadbddcc6af..576d0ce762c18ac9618039114e51d6a920f740e0 100644 GIT binary patch delta 114 zcmZ4RfNQ}6u7(!IElgz#*)0vsjSUP;r`IlIl7VryFIdQQn#bA5#L&sY(%IS4(7@Qt j!r9!##nHss#M#)%+|=C7z|h=I!G@5M?d#St6)^$;ejOh& delta 114 zcmZ4RfNQ}6u7(!IElgz#*)0q#3=9m+rq?cHl7VryFIdQQn#b9~)X>bx(bCew&A`dr j$->CV)Y#F~z|GRsz|z9W(ZbM9!G@5M?d#St6)^$;b=V&S diff --git a/pdf/Reiteration.pdf b/pdf/Reiteration.pdf index 335ab9a6c9787a1ae3d57c07be2342738d26c7b0..6e71e9ca11d5436d615d41a0cd81e12c8433cbeb 100644 GIT binary patch delta 106 zcmeBMz}&Zhc?0`Nc1r_uV*?|z$$TeeVC>C?Cm*vqTbMXmSUMS+nVVWTI~$moJGz(| aI2srmnHZb7nz}lh*(ul%QZhOG{B{5x#2j@1 delta 106 zcmeBMz}&Zhc?0`Nb_)Xw0|R5@$$TeeVC>C?Cm*vq8@d{}85vrb7`hl6TL3vuh8Cs< ZW+rZKrl#g521d?y3O0n4Ob$Q49RLiq91Q>f diff --git a/pdf/SQL_syntax.pdf b/pdf/SQL_syntax.pdf index ae870341940024ce0d3ed11c652ec5d3b1df7433..cca60e7445fe4728237f699475652ace7934604d 100644 GIT binary patch delta 148 zcmX>)P3h<~rG^&97N!>F7M2#)7Pc1lEgS_+T9yXp#s&tK+6IQ|1_tVyT>8HGDK3d6 zsR|k{Rz?O!Mg}HEP$k=EHF5N_I=ebKJG(eJ8(TUWIa^p7xHy?xxH%b^nK@Y)S~|Kp Rnc6AX5K^)|r-S1r69CdfCqV!J delta 148 zcmX>)P3h<~rG^&97N!>F7M2#)7Pc1lEgS_+S{4Qt1_p+P+6IQ|1_tVyT>8HGDK3d6 zsR|k{Rz?O!Mg}HEP$k=EHF5N_Iy)N}x;VO-nVB1yIvE=pnmAh;8@m{rT3R|88#%f- R8QUq?5K^)|r-S1r69A$zCQASS diff --git a/pdf/Semantic_versioning.pdf b/pdf/Semantic_versioning.pdf index e3f266d644ab119d95da4641194b78e5408e6812..dc9551d3a795d6220f42e04d6e4576045a2218f6 100644 GIT binary patch delta 134 zcmaDooBj1{_J%Et_YZ1W8kid!7@KGt7^)i>sB3cR`{t*(B$lKqXt-Dz85kKEm>5Bo zZ09`0Si$A&Xzb$bRU}R}xWa#Q7}Xg8 D*()PR delta 134 zcmaDooBj1{_J%Et_YZ1W7+4q>m>6pt7^)i>sB3cR`{t*(B$lKqXt-Dz85kKEm>5Bo zZ09`0Si$9NZt3i1=ImzRXldkXX6a^ZXl&|YXlmf%W?^bz;c8@Pr(i=!$@U{>7}Xg8 D&le*M diff --git a/pdf/Soundness.pdf b/pdf/Soundness.pdf index 5508a51a50cff68089b94a47385311f9fdf3cca6..b2125b09ca335fafc98b1dabb6b0ea60a8de878b 100644 GIT binary patch delta 133 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 delta 111 zcmZ4Wfo0VPmWC~i$Mo4P3@i)`j7_JX)n}A}akhWZXH;c(b~LasHZpQ?buu(DH!(19 fH8F6sa5gn@v@|y|H83!AwNtPmq-1)8IpZY&$fX>- diff --git a/pdf/The_Pragmatic_Programmer_1999.pdf b/pdf/The_Pragmatic_Programmer_1999.pdf index df84952d04124693dccacc6ea64ee912e4f3b01b..21ef6afc156e68892c73206c1688597d1d16f462 100644 GIT binary patch delta 114 zcmeypitG0(u7(!IEldlW*ewmrjSY-Vr>|&Yl7VrypKfCM%kS)DVCiDwWN2>eW?^h@ iXyRgKWN7B<;%4b+VC-t)Z0TmFU_(gBcJ9ec1xx_HJ|9j1 delta 114 zcmeypitG0(u7(!IEldlW*ewh!3=B+6rmtvXl7VrypKfCM%kOMp;_B$^=4xSTY~*U{ iY-HeUW@=z$=4N1G;biG*;NobfU_(gBcJ9ec1xx_Hz8^jS diff --git a/pdf/The_binary_number_system.pdf b/pdf/The_binary_number_system.pdf index 4040676f6dabd758eb214b38cb3a946504ef2ed6..5eabdfde13b1d78ea86f67b8920bc4864d00c6c0 100644 GIT binary patch delta 136 zcmZ4Wn`6~)j)oS-Elf4~T9yXp#s(%v+6IQ|1_tVyT>8HGDK3d6sR|k{Rz?O!MnE~J zlI_d%nPPdI&D=~34IGV4EDa2e3|!4E9o>wKoK4&;-5f2Q-3$%Q>=bMWDcSC3!<51Z E0I$L!8HGDK3d6sR|k{Rz?O!Mg}HE zP$k=!=`+RhIGegznmf4~SU5Rbn3%gcn;Td}_#8=E@17?_zDm{~fTTRL01 fI9r-p8XB2cxEdH4xVaix*eTc$QZjwE8sh^1x`7=C delta 111 zcmex;j^+0`mWC~i8FK6v1{MYe#^%%W}_#J3AQ~8#@~qyEz&-n;Dv# e0$FaZ&Td9VX2!0@=Elx;3O0n4OrNdB_y7RF#T`5V diff --git a/pdf/Turing_machines.pdf b/pdf/Turing_machines.pdf index e71cbf8f62680f25606d1aae1bd7e5943f0b286d..3bb68b8562c519feedaaa1f3ad67d47530f3cd97 100644 GIT binary patch delta 134 zcmaE`nC-!0wuUW?^V+p64a|)VOpLV+4Al(`)HS*Eee+XX5=&AQG+eBV42+BnOpKsP zwx4Kcyu#t^W?<;*;^^#V;p}AMYG&c)>;%+qWZ>p%VPbA>;$~>4U_(gB_WKhU85sfQ CdLxto delta 134 zcmaE`nC-!0wuUW?^V+p63@i)`Oii^74Al(`)HS*Eee+XX5=&AQG+eBV42+BnOpKsP zwx4Kcyu#sZW@ce->Ei5YYH8%^0^~Wm8k!imxVV}bn>#vNy1CgY*bq{({r&_-Mn(YR C4I{b$ diff --git a/pdf/User_management.pdf b/pdf/User_management.pdf index 8540ada4e39a252e67e1efb19d318c90c7d5705a..acabab48ef6ac636302a6a9131d585fda4887a4c 100644 GIT binary patch delta 133 zcmeA>%+hz5rC|$WkEE8Rfw{4Pp^>(Mp}K*Ax+a&tZ+?nPVo9okhKrSvfsv7ci4j!E z_HB}k``Mh`OiY{%%-o!voSlLC3`|`dEsYHv4IN!9T`YhC&UOkmgp^F*p}=?z01LPw A$^ZZW delta 133 zcmeA>%+hz5rC|$WkEE7`frWvAp{cfkp}K*Ax+a&tZ+?nPVo9okhKrSvfsv7ci4j!E z_HB}k``MgL&5TUk%w3$!j9e@oE!~_=T}|999Ze044UCNqO{&R~{-akl5oV3y!>wzPD1H8r*{a5gkE kH8C|ev~Y5BGc$K`b~CaxbaQrbvs17kq-6W?Wz1QO09zd%)c^nh delta 116 zcmdmZfp6mlzJ?aY7N#xCPBYjo3@i)`OwFcy&R~{-akl5oV3y!>HghzwurzlwHZrs{ kGP5u?aWXY=v@kHUbhR)uF?2R`u~V=iq-6W?Wz1QO06_B|4FCWD diff --git a/pdf/Why_computers_use_binary.pdf b/pdf/Why_computers_use_binary.pdf index 7897e476810b4ded634bcbe4297bcaa69a4bf472..0e87d03fb07f21e950e68940f3346ddb01cd9faf 100644 GIT binary patch delta 114 zcmZ4Vieu3$j)oS-Elidg?3M=R#s(%P(;YOJWMG`_$r?N&V iZYHkI76ztfhGtGihGwS522OSgHiVRH|8LBs%m@IRUK{2B delta 114 zcmZ4Vieu3$j)oS-Elidg>=p(V1_q|)(;YOJWMG`_$r?HV*^JQM>h*Y h3sXZkLt{5%3qvC}3o{opb2|kaLQ1y(H)c|11OS}v91s8i