From e9cdec6482af59958c4975536d374e12d1af8bfe Mon Sep 17 00:00:00 2001 From: jrtechs Date: Thu, 4 Oct 2018 20:41:45 -0400 Subject: [PATCH 1/8] Created initial content for the new post on 3 ways to calculate the fibonacci sequence. --- .../posts/programming/EverythingFibonacci.md | 58 ++++++++++++++++++ .../programming/media/fibonacci/FibPower.png | Bin 0 -> 38946 bytes .../media/fibonacci/FibPowerBigPicture.png | Bin 0 -> 31615 bytes .../programming/media/fibonacci/Iterative.png | Bin 0 -> 26913 bytes .../media/fibonacci/RecursiveDefinition.png | Bin 0 -> 19811 bytes 5 files changed, 58 insertions(+) create mode 100644 blogContent/posts/programming/EverythingFibonacci.md create mode 100644 blogContent/posts/programming/media/fibonacci/FibPower.png create mode 100644 blogContent/posts/programming/media/fibonacci/FibPowerBigPicture.png create mode 100644 blogContent/posts/programming/media/fibonacci/Iterative.png create mode 100644 blogContent/posts/programming/media/fibonacci/RecursiveDefinition.png diff --git a/blogContent/posts/programming/EverythingFibonacci.md b/blogContent/posts/programming/EverythingFibonacci.md new file mode 100644 index 0000000..9f17782 --- /dev/null +++ b/blogContent/posts/programming/EverythingFibonacci.md @@ -0,0 +1,58 @@ + + + + +```Python +def fib(n): + if n == 0 or n == 1: + return n + return fib(n-1) + fib(n-2) +``` + +![Recursive Definition](media/fibonacci/RecursiveDefinition.png) + + +```Python +def fibHelper(n, a, b): + if n == 0: + return a + elif n == 1: + return b + return fibHelper(n-1, b, a+b) + + +def fibIterative(n): + return fibHelper(n, 0, 1) +``` + +![Iterative Performance](media/fibonacci/Iterative.png) + + +```Python +def multiply(a,b): + product = [0,0,0] + product[0] = a[0]*b[0] + a[1]*b[1] + product[1] = a[0]*b[1] + a[1]*b[2] + product[2] = a[1]*b[1] + a[2]*b[2] + return product + + +def power(l, k): + if k == 1: + return l + temp = power(l, k//2) + if k%2 == 0: + return multiply(temp, temp) + else: + return multiply(l, multiply(temp, temp)) + + +def fibPower(n): + l = [1,1,0] + return power(l, n)[1] +``` + +![FibPower Performance](media/fibonacci/FibPower.png) + + +![FibPower Performance](media/fibonacci/FibPowerBigPicture.png) \ No newline at end of file diff --git a/blogContent/posts/programming/media/fibonacci/FibPower.png b/blogContent/posts/programming/media/fibonacci/FibPower.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4a8e409cee13dd7ee18eb69772da0ee78c9fcd GIT binary patch literal 38946 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 literal 0 HcmV?d00001 diff --git a/blogContent/posts/programming/media/fibonacci/FibPowerBigPicture.png b/blogContent/posts/programming/media/fibonacci/FibPowerBigPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..53b0b3145a9d28f51f515a05b91dcb6ba53b9073 GIT binary patch literal 31615 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 literal 0 HcmV?d00001 diff --git a/blogContent/posts/programming/media/fibonacci/Iterative.png b/blogContent/posts/programming/media/fibonacci/Iterative.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a4ef090f58cfe5ef2e518e6f6ded3757b38239 GIT binary patch literal 26913 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�WV*^{H4eZ09-{yCAtkzup#QVpa`9S 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 literal 0 HcmV?d00001 diff --git a/blogContent/posts/programming/media/fibonacci/RecursiveDefinition.png b/blogContent/posts/programming/media/fibonacci/RecursiveDefinition.png new file mode 100644 index 0000000000000000000000000000000000000000..ef37256f81fdcbf57f40d93d0674470d619d2bc3 GIT binary patch literal 19811 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 jN&GiC Date: Fri, 5 Oct 2018 14:51:42 -0400 Subject: [PATCH 2/8] Finished first draft of the Fibonacci blog post. --- .../posts/programming/EverythingFibonacci.md | 104 +++++++++++++++++- .../media/fibonacci/FibonacciMatrix.png | Bin 0 -> 62460 bytes 2 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 blogContent/posts/programming/media/fibonacci/FibonacciMatrix.png diff --git a/blogContent/posts/programming/EverythingFibonacci.md b/blogContent/posts/programming/EverythingFibonacci.md index 9f17782..3ecb4a9 100644 --- a/blogContent/posts/programming/EverythingFibonacci.md +++ b/blogContent/posts/programming/EverythingFibonacci.md @@ -1,6 +1,17 @@ +If you have ever taken a computer science class you probably +know what the fibonacci sequence is and how to calculate it. +For those who don't know: [Fibonacci](https://en.wikipedia.org/wiki/Fibonacci) +is a sequence of numbers starting with 0,1 whose next number is the sum +of the two previous numbers. After having multiple of my CS classes +give lectures and multiple homeworks on the Fibonacci sequence; I decided +that it would be a good idea to write a blog post going over +the 4 main ways of calculating the nth term of the Fibonacci sequence +and proving their time complexities both mathematically and empirically. +# Slow Recursive Definition - +By the definition of the Fibonacci sequence, it is natural to write it as +a recursive definition. ```Python def fib(n): @@ -9,9 +20,42 @@ def fib(n): return fib(n-1) + fib(n-2) ``` +#### Time Complexity + +Observing that each call has two recursive calls we can place an upper bound on this +function as O(2^n). However, if we solve this recurrence we can compute the exact value +and place a tight bound for time complexity. + +We can write a recurrence for the number of times fib is called: +```angular2html +T(1) = 1 +T(n) = T(n-1) + T(n-2) +a^n = a^{n-1} + a^{n-2} +a^2 = a + 1 +a = \frac{1 + sqrt(5)}{2} + +T(n) = \frac{1 + sqrt(5)}{2}^n + \frac{1 1 sqrt(5}{2}^n + +O(1.618^n) +``` + + +#### Measured Performance + +Here is a graph of the actual performance that I observed for this algorithm. ![Recursive Definition](media/fibonacci/RecursiveDefinition.png) + + +# Accumulation Solution + +The problem with the previous recursive solution is that you had to recalculate certain +terms of fibonacci a ton of times. A summation variable would help us avoid this problem. +You could write this using a simple loop, however, it is still possible to do this with +recursion. + + ```Python def fibHelper(n, a, b): if n == 0: @@ -25,9 +69,41 @@ def fibIterative(n): return fibHelper(n, 0, 1) ``` +In this code example fibHelper is a method which accumulates the previous two terms. +The fibIterative is a wrapper method which sets the two initial terms equal to 0 and 1 +representing the fibonacci sequence. + +Proof in latex that fibHelper + +proof in latex that fib iterative = fib + + +#### Time Complexity + +proof in latex for time complexity + +#### Measured Performance + +Notice how much faster this solution is compared to the original recursive solution for +Fibonacci. Also, I only measured going out to 500 because beyond that I hit the maximum +number of recursive calls for my installation of Python. + ![Iterative Performance](media/fibonacci/Iterative.png) + +# Matrix Solution + +We can actually get better than linear time for performance while calculating +the Fibonacci sequence recursively. + +![Inductive Proof of Fibonacci Matrix](media/fibonacci/FibonacciMatrix.png) + +Without any other tricks, raising a matrix to a power n times would not get +us better than linear performance. However, if we use the [Exponentiation by Squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring) +method, we can expect to see logarithmic time. + + ```Python def multiply(a,b): product = [0,0,0] @@ -52,7 +128,31 @@ def fibPower(n): return power(l, n)[1] ``` +#### Time Complexity + +latex proof for 9lg(n) performance + + +#### Measured Performance ![FibPower Performance](media/fibonacci/FibPower.png) +As expected by our mathmatical calcuations, the algorthem appears to be running in +logarithmic time. + +#### Measured Performance With Large Numbers +![FibPower Performance](media/fibonacci/FibPowerBigPicture.png) + +When calculating the fibonacci term for extremely large numbers dispite having a polynomial +time complexity, the space required to compute Fibonacci grows exponentially. Since our +performance is only pseudo-polynomial we see a degrade in our performance when calculating +large terms of the fibonacci sequence. + +The one amazing thing to point out here is that despite calculating the 10,000 term of Fibonacci, +this algorithm is nearly 400 times faster than the recursive algorithm when it was calculating +the 30th term of Fibonacci. + + +# Closed Form Definition +It is actually possible to calculate Fibonacci in constant time using a closed form definition. -![FibPower Performance](media/fibonacci/FibPowerBigPicture.png) \ No newline at end of file +latex proof of closed form definition \ No newline at end of file diff --git a/blogContent/posts/programming/media/fibonacci/FibonacciMatrix.png b/blogContent/posts/programming/media/fibonacci/FibonacciMatrix.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d6014f58a69f76509d6610345f3fae79f87027 GIT binary patch literal 62460 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 z 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

l zTL*r_^_4sYICO4s&KECB??*9e3j_2A&jZq*_vwm#B<;#)-qWA%uarkdM&hx57kU~( za2v?w=#ps(VN=A zvcfRh-aL2M*MUfmwV^7+#_7tHuAc^D?*Y@p>am!70$42IC14Ph`*NTeu2PjxrSpC`RH_gThg@TSvD zPo$u~1WxB_2#F99Ifq&nP#pJi+qVrPKiD+B#ioRaFW8Q+4rG6vQp)~S5VzP7M|=J? zk;QK7!bNzMn<-5uzV1g~+D`uzDWJljZSwH*yA5Wd-Z`4(I!`WLdzo&k?q>MNQFuQ$ zdZ)yWatd5^h26Q%n>V*XGa@Ed3CPq{xTIkwwyn+9C=QSvR^e1aH=4G-jj-K0IKGqE zdaMb}Q^O-lO)-i!2|#=D6sNp!rnkE5*=hoOv0nS2nLQ4^U%o;6cMz^2V;Iba^zsfO z4vmh!g@9q(yh!kHu8cwmuEWxIGvsHR6QZ>RM)v2ts4#Y|_hhXniLcylBWBCfS`}G3 zac=NVpKhh<165`wpgN3+7F?z{W7s{ruUp`f-Ol@AkWdSd9L>@Y>3FNUo|%`~?)zKj)XkV;E)f8Y@!?xXdRTTjliM zt<;whVRgyv)LRGoLPuoBi!#^y*!3TM&}Sw~gx(Gowv@6Y&GeTQ)X!C6V#w{hnpe9` zK|xV?#BFa6)1f#t2oe)1sCdNt#A%A7hZOX?NS$U@N4;XB8{yxhA+)vCyZR(MhGWJ- zhcx)a9z>5{Vxz^x6dumBwD$i5qpGZ_pMZy>2_LLF$nHN8^T)6n7kYJfF9sY`++euS z3m_=fPD-H216p=(n`izNFKef34rs*uaaGNPe4|;JW_!UrmMkU z*j&49EPZ{$n=4Z*AyDWXj287?)&P_+^*j1X$z)YOulrR$tS*+nlBNy0pkq18p^~e*gdg literal 0 HcmV?d00001 From 5a2828c4dfd66e75de899080e461c3d482f152a0 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Fri, 5 Oct 2018 21:47:25 -0400 Subject: [PATCH 3/8] Added a very basic latex support for blog posts using pandoc. --- README.md | 3 +++ admin.js | 2 +- admin/admin.js | 1 + admin/category/addCategory.js | 2 +- admin/downloads/manageDownloads.js | 2 +- admin/login/login.js | 6 +++-- admin/posts/newPost.js | 2 +- ...ngFibonacci.md => everything-fibonacci.md} | 0 includes/html/contact.html | 2 ++ includes/html/header.html | 5 ++++ package.json | 2 +- posts/singlePost.js | 21 +++++++++++---- utils/markdownToHTML.js | 26 +++++++++++++++++++ utils/sql.js | 8 +++--- 14 files changed, 66 insertions(+), 16 deletions(-) rename blogContent/posts/programming/{EverythingFibonacci.md => everything-fibonacci.md} (100%) create mode 100644 utils/markdownToHTML.js diff --git a/README.md b/README.md index 1ca66b0..2ca504d 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,9 @@ npm install memory-cache --save npm install request npm install nodemailer npm install nodemailer-smtp-transport + + +npm install node-pandoc ``` diff --git a/admin.js b/admin.js index 574263a..ff986e5 100644 --- a/admin.js +++ b/admin.js @@ -67,7 +67,7 @@ app.use(function(request, result) const file = "./admin/admin.js"; Promise.all([includes.printAdminHeader(), - require(file).main(filename, request), + require(file).main(request), includes.printFooter()]).then(function(content) { result.write(content.join('')); diff --git a/admin/admin.js b/admin/admin.js index 57fe199..967086a 100644 --- a/admin/admin.js +++ b/admin/admin.js @@ -22,6 +22,7 @@ module.exports= { utils.getPostData(request).then(function (postData) { + console.log(postData); Promise.all([require("./posts/newPost.js").main(postData), require("./category/addCategory.js").main(postData), require("./posts/editPost.js").main(postData), diff --git a/admin/category/addCategory.js b/admin/category/addCategory.js index 3dfbfc5..d05fac9 100644 --- a/admin/category/addCategory.js +++ b/admin/category/addCategory.js @@ -81,7 +81,7 @@ module.exports= { return new Promise(function(resolve, reject) { - Promise.all([utils.include("./admin/addCategory.html"), + Promise.all([utils.include("./admin/category/addCategory.html"), printCategories(), processPost(postData)]).then(function(html) { diff --git a/admin/downloads/manageDownloads.js b/admin/downloads/manageDownloads.js index be0e02b..84ef742 100644 --- a/admin/downloads/manageDownloads.js +++ b/admin/downloads/manageDownloads.js @@ -57,7 +57,7 @@ const addDownload = function(postData) return new Promise(function(resolve, reject) { Promise.all([addDownloadPostData(postData), - utils.include("./admin/addDownload.html")]).then(function(html) + utils.include("./admin/downloads/addDownload.html")]).then(function(html) { resolve("

" + html.join('') + "
"); }).catch(function(error) diff --git a/admin/login/login.js b/admin/login/login.js index 1521579..71aafd9 100644 --- a/admin/login/login.js +++ b/admin/login/login.js @@ -22,6 +22,7 @@ const processLogin = function(request) return sql.checkLogin(postData); }).then(function(loginResult) { + if(loginResult.pass) { request.session.user = loginResult.user; @@ -30,7 +31,8 @@ const processLogin = function(request) } else { - resolve(""); + console.log("password incorrect"); + resolve("Password incorrect"); } }).catch(function(err) { @@ -52,7 +54,7 @@ module.exports= { return new Promise(function(resolve, reject) { - Promise.all([utils.include('./admin/login.html'), + Promise.all([utils.include("./admin/login/login.html"), require("../../sidebar/sidebar.js").main(), processLogin(request)]).then(function(html) { diff --git a/admin/posts/newPost.js b/admin/posts/newPost.js index 787eb0b..f0d2cc5 100644 --- a/admin/posts/newPost.js +++ b/admin/posts/newPost.js @@ -55,7 +55,7 @@ module.exports= { return new Promise(function(resolve, reject) { - Promise.all([utils.include("./admin/newPost.html"), processPost(postData)]).then(function(html) + Promise.all([utils.include("./admin/posts/newPost.html"), processPost(postData)]).then(function(html) { resolve(html.join('')); }).catch(function(error) diff --git a/blogContent/posts/programming/EverythingFibonacci.md b/blogContent/posts/programming/everything-fibonacci.md similarity index 100% rename from blogContent/posts/programming/EverythingFibonacci.md rename to blogContent/posts/programming/everything-fibonacci.md diff --git a/includes/html/contact.html b/includes/html/contact.html index 12f5f3c..9efa102 100644 --- a/includes/html/contact.html +++ b/includes/html/contact.html @@ -51,6 +51,8 @@ +
+
diff --git a/includes/html/header.html b/includes/html/header.html index 873c01d..db302d4 100644 --- a/includes/html/header.html +++ b/includes/html/header.html @@ -25,6 +25,11 @@ } p{font-size:18px;} + + + + + diff --git a/package.json b/package.json index 03375c9..802a1d6 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "highlight": "^0.2.4", "highlight.js": "^9.12.0", "markdown": "^0.5.0", - "markdown-to-html": "^0.0.13", "memory-cache": "^0.2.0", "mysql": "^2.16.0", + "node-pandoc": "^0.3.0", "nodemailer": "^4.6.8", "nodemailer-smtp-transport": "^2.7.4", "promise": "^8.0.1", diff --git a/posts/singlePost.js b/posts/singlePost.js index d31b557..04dc292 100644 --- a/posts/singlePost.js +++ b/posts/singlePost.js @@ -5,6 +5,8 @@ const sql = require('../utils/sql'); const Remarkable = require('remarkable'); const hljs = require('highlight.js'); +const pandoc = require('../utils/markdownToHTML.js'); + const md = new Remarkable( { @@ -143,13 +145,22 @@ module.exports= var markDown = utils.getFileContents(pathName).toString(); markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" + category[0].url + "/media/"); - html += md.render(markDown); + //html += md.render(markDown); + + pandoc.convertToHTML(markDown).then(function(result) + { + html +=result; + + html = html.split("").join(""); + html += "

"; - html = html.split("").join(""); - html += "

"; + resolve(htmlHead + html); + }).catch(function(error) + { + reject(error); + }) - resolve(htmlHead + html); }); } catch(ex) diff --git a/utils/markdownToHTML.js b/utils/markdownToHTML.js new file mode 100644 index 0000000..f2c9567 --- /dev/null +++ b/utils/markdownToHTML.js @@ -0,0 +1,26 @@ +const pandoc = require('node-pandoc'); +// const args = '-t html5'; + +const args = '-S --base-header-level=1 --toc --toc-depth=6 -N --normalize -s --mathjax -t html5'; + +console.log(""); +module.exports= + { + convertToHTML: function(markdownContents) + { + return new Promise(function(resolve, reject) + { + // Set your callback function + callback = function (err, result) + { + if (err) + { + reject(err); + } + resolve(result); + }; + console.log(markdownContents); + pandoc(markdownContents, args, callback); + }); + }, + } diff --git a/utils/sql.js b/utils/sql.js index 336fe97..fb86cf5 100644 --- a/utils/sql.js +++ b/utils/sql.js @@ -268,16 +268,16 @@ module.exports= if(post.username && post.password) { - var cleanName = sanitizer.sanitize(post.username); - var cleanPassword = sanitizer.sanitize(post.password); + const cleanName = sanitizer.sanitize(post.username); + const cleanPassword = sanitizer.sanitize(post.password); - var getSalt = "select * from users where user_name='" + + const getSalt = "select * from users where user_name='" + cleanName + "'"; fetch(getSalt).then(function(saltResult) { if(saltResult.length == 1) { - var hashedPassword = crypto.createHash('sha256') + const hashedPassword = crypto.createHash('sha256') .update(cleanPassword + saltResult[0].salt) .digest('hex'); if(saltResult[0].password === hashedPassword) From a0bb869642e723c481118c5372b13905e4bba502 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Fri, 5 Oct 2018 21:59:15 -0400 Subject: [PATCH 4/8] Updated blog posts to look better with the new pandocs parser which creates a index list at the top of the blog post. --- .../posts/java/gremlin-in-10-minutes.md | 24 +++++----- .../java/top-three-recommended-java-ides.md | 16 +++---- blogContent/posts/other/why-do-i-blog.md | 19 ++++---- .../posts/programming/c-to-c++-tutorial.md | 32 ++++++------- .../posts/projects/steam-friends-graph.md | 14 +++--- .../web-development/history-of-jrtechs.md | 13 ++---- .../node-website-optimization.md | 46 +++++++++---------- 7 files changed, 80 insertions(+), 84 deletions(-) diff --git a/blogContent/posts/java/gremlin-in-10-minutes.md b/blogContent/posts/java/gremlin-in-10-minutes.md index bb484b2..ed696d1 100644 --- a/blogContent/posts/java/gremlin-in-10-minutes.md +++ b/blogContent/posts/java/gremlin-in-10-minutes.md @@ -1,4 +1,4 @@ -## What is Gremlin? +# What is Gremlin? Gremlin is a graph traversal language: think of Gremlin as the SQL for graph databases. Gremlin is not a graph database server, it is a language; but, there is a Gremlin Server and a Gremlin Console available for @@ -7,7 +7,7 @@ like [Titan](https://www.digitalocean.com/community/tutorials/how-to-set-up-the- and [HBase](https://docs.janusgraph.org/latest/hbase.html). -## Graph Data Base Basics +# Graph Data Base Basics A graph database is based on graph theory. A graph is composed of nodes, edges, and properties. A key object/component in a graph database is stored as a node. Nodes are connected via edges representing @@ -54,11 +54,11 @@ gremlin> g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, ``` -## Gremlin Syntax +# Gremlin Syntax Now that you have your gremlin server and console set up, you are ready to start executing Gremlin queries. -### Adding a Vertex +## Adding a Vertex In Gremlin nodes are referred to as "Vertexes". To add a node/vertex to the graph, you simply use the command addV() on your graph traversal source. For consistency, most people @@ -70,7 +70,7 @@ EX: g.addV('student').property('name', 'Jeffery').property('GPA', 4.0); ``` -### Updating a Property +## Updating a Property Unlike SQL, you are not limited to a specific schema in a graph database. If you want to add or change a property on a vertex or edge, you simply use the property command again. @@ -81,7 +81,7 @@ You can replace "g.V(1)" with a command to select a specific vertex or edge. g.V(1).property('name', 'Jeffery R'); ``` -### Selection +## Selection Selecting nodes and edges is the most complicated part of Gremlin. The concept is not particularly hard, but, there are dozens of ways to do graph traversals and selections. I will cover the most common aways to traverse a graph. @@ -111,7 +111,7 @@ g.V().hasLabel('student').order().by('gpa', decr).value('name') ``` -### Adding Edges +## Adding Edges The easiest way (my opinion) to add edges in Gremlin is by using aliasing. In this example we select two nodes and assign them a name: in this case it is "a", and "b". @@ -124,14 +124,14 @@ g.V(0).as('a').V(1).as('b').addE('knows') ``` -## Using Gremlin with Java +# Using Gremlin with Java Now that you know the basic syntax of Gremlin, you are ready to use it somewhere other than the Gremlin console. If you are trying to use Gremlin with Java, there is a great Maven dependency for TinkerPop and Gremlin. If you want to quickly connect to your Gremlin server with Java, make sure your server is set up exactly as it was before this tutorial started discussing Gremlin syntax. -#### Maven dependency for Java: +## Maven dependency for Java: ```html @@ -187,7 +187,7 @@ public class GraphConnection } ``` -#### Basic GraphConnection.java Usage: +## Basic GraphConnection.java Usage: ```java RemoteConnection con = new RemoteConnection() String query = "g.V().hasLabel('player')" + @@ -201,7 +201,7 @@ String query = "g.V().hasLabel('player')" + this.con.queryGraph(query); ``` -#### Overly complex usage with a lambda statement +## Overly complex usage with a lambda statement ```java /** * Fetches the list of a player's friends. @@ -255,7 +255,7 @@ I highly suggest that you look at the tutorial [SQL 2 Gremlin](http://sql2gremli If you plan on deploying this to production, it is recommended that you use HBase for a persistent back end storage server. -## Resources +# Resources - [SQL 2 Gremlin](http://sql2gremlin.com/) - [Practical Gremlin](http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html) diff --git a/blogContent/posts/java/top-three-recommended-java-ides.md b/blogContent/posts/java/top-three-recommended-java-ides.md index 1c106ee..5f4c2cb 100644 --- a/blogContent/posts/java/top-three-recommended-java-ides.md +++ b/blogContent/posts/java/top-three-recommended-java-ides.md @@ -7,8 +7,8 @@ highlighting which makes the code easier to read and error highlighting which makes finding that missing semi colon easier. Here is a list of three IDEs that work well for me. -NetBeans --------- +# NetBeans + NetBeans is the most productive IDE for large java projects. NetBeans is great at detecting errors in your code. You can also have multiple projects open in @@ -19,8 +19,8 @@ JavaScript and C/C++. ![NetBeans IDE](media/2a20326e77c3f67aa3753401ba4bc612.png) -Eclipse -------- +# Eclipse + Eclipse is a very popular programming IDE; however, it is harder to use than NetBeans. The largest benefit of Eclipse is that it has tons of templates for @@ -28,8 +28,8 @@ you to use. Eclipse also has a better GUI creation tool than NetBeans has. ![Eclipse](media/f5cb2682e219549cb07acd1d01c2ccb1.png) -JCreator --------- +# JCreator + I want to warn you that this is a old IDE. You hate yourself if you decide to use this program. The only reason I am putting this on my list is because I @@ -43,8 +43,8 @@ Science students who have to memorize/learn what certain errors mean. ![JCreator](media/c1e712bdead908ebd72921ec2d1cbd5e.png) -Intellij --------- +# Intellij + \*Update 2018 diff --git a/blogContent/posts/other/why-do-i-blog.md b/blogContent/posts/other/why-do-i-blog.md index cbdaeb7..879ebfe 100644 --- a/blogContent/posts/other/why-do-i-blog.md +++ b/blogContent/posts/other/why-do-i-blog.md @@ -5,8 +5,8 @@ Different people may have different takes on this. There is an incentive to start a website in the hopes that it will become popular and make add revenue. However, I argue that there is a intrinsic value to a personal blog. -Organize Your thoughts ----------------------- +# Organize Your thoughts + Being able to clearly articulate your ideas is beneficial. Having time to brew over topics in a blog posts helps that process. Even though I worked with both @@ -14,22 +14,22 @@ Nodejs and PHP, I might not be able to a convincingly debate with somebody why one is the better platform. Writing a blog posts allows me to fully flesh out my own ideas. -Learn ------ +# Learn + When writing a blog post, you want to be complete. If there are any gaps in my knowledge, I will look that information up. This is a great learning opportunity; like taking notes in a class. -Stand Out ---------- +# Stand Out + Out of everyone who uses the internet, only 1% of them contributes additional content. Blogging can make you stand out in a competitive economy when looking for jobs. -Relax ------ +# Relax + This may not be true of some bigger blogs, but, writing blog posts is very relaxing. It gives you time to slow down relax and reflect. There are dozens of @@ -39,8 +39,7 @@ There are already millions of tutorials on the internet, I just want to share my experience on topics that interest me. In this way writing blogs are relaxing and don’t feel like work. -Become A Better Blogger ------------------------ +# Become A Better Blogger There is no way to become better at something other than doing it a lot. Since starting this website when I was middle school, my writing skills have increased diff --git a/blogContent/posts/programming/c-to-c++-tutorial.md b/blogContent/posts/programming/c-to-c++-tutorial.md index 8cef1b6..0d0bcb0 100644 --- a/blogContent/posts/programming/c-to-c++-tutorial.md +++ b/blogContent/posts/programming/c-to-c++-tutorial.md @@ -4,7 +4,7 @@ enable people to use this as a quick reference to quickly jump into C++. This po that you have prior knowledge of both C and object oriented-programming concepts. Each topic is quickly covered in a code snippet and some additional explanation is provided if necessary. -## Input/Output +# Input/Output Input and output in C++ is easy, you use "cout" and "cin". When printing with "cout", you separate what your printing with "<<"; "endl" prints a new line. @@ -39,7 +39,7 @@ g++ helloWorld.cpp -o hello ``` -## Namespaces +# Namespaces Name spaces are used to enable you to have multiple functions/methods called the same thing and not conflict with one another. You use "namespacename::function/variable" @@ -90,7 +90,7 @@ int main() ``` -## Global Variable +# Global Variable Global variables are similar to C, however, you can now reference a global members with the "::" accessor. @@ -112,7 +112,7 @@ int main () } ``` -## Multiple Names for a Variable/Aliasing +# Multiple Names for a Variable/Aliasing This is NOT simply a pointer. In the following example pi, and x now are treated as the same exact variable. You cannot later change the pointer destination for x. @@ -128,7 +128,7 @@ cout << "pi: " << pi << " x: " << x << endl; // prints pi: 2.1 x: 2.1 ``` -## Passing Variables by Reference +# Passing Variables by Reference In C, everything was passed by value; C++ allows us to pass variables by reference. This is very powerful, in languages like Java, only Objects are passed by reference. C++ lets you decide exactly @@ -178,7 +178,7 @@ int main() ``` -## Functions Returning Variables References +# Functions Returning Variables References A function can return a value reference which can be treated as a variable. In the following example, a function returns the reference to the variable which is the smallest. @@ -211,7 +211,7 @@ int main () ``` -## Inline +# Inline Inline can be used to replace a function which contains very simple logic -- no for loops, etc. Like a macro, this will be inserted everywhere the code is used; a @@ -237,7 +237,7 @@ int main() } ``` -## Exceptions +# Exceptions Exceptions might help you stop segmentation faulting. The important thing to notice is that you can throw about any type in a try block. @@ -263,7 +263,7 @@ catch(int result) ``` -## Default Parameters for Functions +# Default Parameters for Functions This is exactly like default parameters in Python. If a function is called without the parameter, it is assumed to be that value. @@ -284,7 +284,7 @@ int main() ``` -## Function Overloading +# Function Overloading Like Java and Python, you can overload methods in C++. Not only can you overload the methods, but, the return type of the methods which are overloaded don't have to match. @@ -315,7 +315,7 @@ int main() ``` -## Operator Overloading +# Operator Overloading You can redefine basic operators like (+,/,-,<<,>>, +=) for certain data types by using operator overloading. @@ -367,7 +367,7 @@ int main () } ``` -## Functions with Generic Parameter Types +# Functions with Generic Parameter Types In C++ you can use a template class to create a method which has generic return and parameter types. @@ -400,7 +400,7 @@ type1 maximum (type1 a, type2 b) ``` -## Replacement for malloc and free +# Replacement for malloc and free Malloc and free still exists in C++, however, people typically use "new" and "delete" instead because it is cleaner. @@ -416,7 +416,7 @@ delete i; ``` -## Struct Functions +# Struct Functions You can now add functions to structs. @@ -655,7 +655,7 @@ int Cat::fly() } ``` -## Strings +# Strings Since C++ has classes, you can work with strings in a pleasant way. @@ -806,7 +806,7 @@ int main() } ``` -## Resources +# Resources You now know enough C++ to start programming with it. If you want to take your skills to the next level, I would recommend start working on a few projects in C++ and get diff --git a/blogContent/posts/projects/steam-friends-graph.md b/blogContent/posts/projects/steam-friends-graph.md index 351cf60..d96d6ab 100644 --- a/blogContent/posts/projects/steam-friends-graph.md +++ b/blogContent/posts/projects/steam-friends-graph.md @@ -1,11 +1,11 @@ -### Links +# Links - [GitHub](https://github.com/jrtechs/SteamFriendsGraph) - [Live Site](http://steam.jrtechs.net/) -### Project Description +# Project Description This project utilizes the steam API and graph databases to create friend graphs for clients in a web browser. Currently there are two types of graphs available: @@ -15,7 +15,7 @@ web browser. Currently there are two types of graphs available: This graph will only display your friends; however, it will draw edges between your friends’ if they are friends with each other. -### Motivation +# Motivation While learning about graph databases I thought that it would be awesome to create a massive graph database with steam friends in it. After a quick google search, I realized that some other people have @@ -29,7 +29,7 @@ in the future. ![Lucid chart diagram](media/steam/diagram.png) -### Technical Details +# Technical Details At the core of this project there is a java backend and a JavaScript frontend. I needed a backend for this project because you cannot distribute your steam API key, plus, this allows me to cache everything @@ -47,7 +47,7 @@ start applying a force to shake the graph until all the nodes are added to the g ![Steam friends graph](media/steam/jrtechs1.png) - ### Uses of Friends Graph Data Base +# Uses of Friends Graph Data Base There are tons of [academic papers](http://infolab.stanford.edu/~ullman/mmds/ch10.pdf) written on the usages of friends’ graphs. What you may be able to do with friends @@ -67,7 +67,7 @@ already does this to a certain extent when they recommend you games that are pop ![Steam friends graph](media/steam/ben2.png) -### Hosting the Project +# Hosting the Project Hosting the front end of this project is easy, it is just thrown on an apache server. The backend is trickier since it needs to run both a java app and a gremlin server. Currently I am hosting this @@ -76,7 +76,7 @@ loads it uses around 2 GB of ram and saturates my CPU. ![Steam friends graph](media/steam/jrtechs2.png) -### Future Plans for the Project +# Future Plans for the Project In the future I would love to add more graphs to this website. Instead of just displaying graphs it would also be cool to create pages which tries to identify friends’ groups, people you may know, and best diff --git a/blogContent/posts/web-development/history-of-jrtechs.md b/blogContent/posts/web-development/history-of-jrtechs.md index b774e89..2804fd6 100644 --- a/blogContent/posts/web-development/history-of-jrtechs.md +++ b/blogContent/posts/web-development/history-of-jrtechs.md @@ -1,5 +1,4 @@ -Original Site -------------- +# Original Site Jrtechs initially started as a static HTML site that I created early 2014 to build my HTML skills. I initially chose the name Jrtech, but that name was taken @@ -13,21 +12,19 @@ was working on. ![Original edgy site](media/fbd5a1128549b4feb5bafe3595ac1989.png) -Move to WordPress ------------------ +# Move to WordPress In 2015 I moved my website to the cloud and started a WordPress site. The website was focused on turorial like blog posts. ![Initial wordpress theme](media/4fcc3a9fe52f7b2e8bc1bfb164846073.png) -New Theme ---------- +# New Theme ![Second wordpress theme](media/55ad5b49fe28c6374968b0f8a5b3e48b.png) -Rebirth in Nodejs ------------------ +# Rebirth in Nodejs + If you want to read about why I created a new content management system and left WordPress read diff --git a/blogContent/posts/web-development/node-website-optimization.md b/blogContent/posts/web-development/node-website-optimization.md index 9416a01..cac48d5 100644 --- a/blogContent/posts/web-development/node-website-optimization.md +++ b/blogContent/posts/web-development/node-website-optimization.md @@ -5,7 +5,7 @@ done automatically. If you like to build stuff from scratch like me, there is a ton of work required to optimize a website. This post will cover the 8 things that I did to decrease the load time of this blog written in node by two seconds. -#### Final Results +# Final Results ![Final Website Speed Test](media/websiteOptimization/finalResults.png) @@ -17,8 +17,8 @@ waterfall for my home page, most of the time is a result of the youtube embedded videos loading. -1: Optimize Images ------------------- +# Optimize Images + Since images are the largest portion of a website's size, optimizing and reducing the size of images will decrease load time. In a perfect web @@ -72,8 +72,8 @@ The goal of this script is to make most of the images under 100kb for the web. It is ok to have a few images above 100kb; however, you should really avoid having images above 200kb. -2: Take advantage of Async calls --------------------------------- +# Take advantage of Async calls + One of the largest benefits of Node is its Async abilities: code is executed in a multi-threaded fashion. This can become a "callback hell" if not @@ -152,8 +152,8 @@ main: function(requestURL) } ``` -3: Client-Side Caching ----------------------- +# Client-Side Caching + Client-side caching is where the client's web browser stores static content they download from your website. For example, if a client caches a CSS style sheet, @@ -175,7 +175,7 @@ fast and I'm not worried about hash collisions for this application. You can do this in NGINX if you use it to serve static files, but, you can also do it directly in Node. -#### Caching CSS +## Caching CSS ```javascript var eTag = crypto.createHash('md5').update(content).digest('hex'); @@ -186,7 +186,7 @@ result.write(content); result.end(); ``` -#### Caching Images +## Caching Images ```javascript var eTag = crypto.createHash('md5').update(content).digest('hex'); @@ -197,15 +197,15 @@ result.write(content); result.end(); ``` -4: Server-Side Caching ----------------------- +# Server-Side Caching + Even with the best async server, there are still ways to improve performance. If you cache all the static pages that you generate in a HashMap, you can quickly access it for the next web user without ever having to query the database or do file IO. -#### Ex: +## Ex: ```javascript const cache = require('memory-cache'); @@ -247,8 +247,8 @@ server's cache. ![Server Cache Example](media/websiteOptimization/serverCache.png) -5: Enable Compression ---------------------- +# Enable Compression + Compressing content before it is transferred over the internet can significantly decrease the loading time of your website. The only trade off from this approach @@ -258,7 +258,7 @@ performance gains. Using Gzip on CSS and HTML can reduce the size by 60-70%. If you are running an NGINX server, you can enable Gzip there. There is also a simple node module which will use Gzip compression on an Express app. -#### Gzip on Express App +## Gzip on Express App ```bash npm install compression @@ -269,8 +269,8 @@ var compression = require('compression') app.use(compression()); ``` -6: Remove Unused CSS Definitions --------------------------------- +# Remove Unused CSS Definitions + If you use a CSS library like Bootstrap or W3-CSS, you will have a ton of css classes which go unused. The standard BootStrap CSS file is around 210kb. After @@ -316,8 +316,8 @@ You don't have to use this through the command line, you can run this directly in your node app to make it automated. Check out their [documentation](https://www.purgecss.com/) to learn more. -7: Minify CSS and Javascript ----------------------------- +# Minify CSS and Javascript + This is the easiest thing you can do to reduce the size of your website. You just run your CSS and JavaScript through a program which strips out all @@ -332,8 +332,8 @@ Ex of Minified CSS: There are Node libraries which can minify CSS and Javascript, however, if you are lazy, just use a website like [this](https://cssminifier.com/). -8: Keep Minimal JavaScript --------------------------- +# Keep Minimal JavaScript + Ignoring the gross amount of Node dependencies you have, it is critical to minimize the amount of dependencies the client needs. I completely removed @@ -364,8 +364,8 @@ most cases people don't full take advantage of Google Analytics, a simple backend analytics service would work just as good while saving the client load time. -Resources ---------- +# Resources + - [Pingdom Speed Test](https://tools.pingdom.com/) From 66d0c02f59be0ac8fd2f7e4043f139fd53873ea9 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sat, 6 Oct 2018 15:47:04 -0400 Subject: [PATCH 5/8] Finished first complete draft of the fibonacci post complete with mathy latex proofs. --- .../headerImages/ConstantTimeComplexity.png | Bin 0 -> 44746 bytes .../posts/programming/everything-fibonacci.md | 307 ++++++++++++++++-- .../media/fibonacci/FibonacciMatrix.png | Bin 62460 -> 0 bytes utils/markdownToHTML.js | 1 - 4 files changed, 271 insertions(+), 37 deletions(-) create mode 100644 blogContent/headerImages/ConstantTimeComplexity.png delete mode 100644 blogContent/posts/programming/media/fibonacci/FibonacciMatrix.png diff --git a/blogContent/headerImages/ConstantTimeComplexity.png b/blogContent/headerImages/ConstantTimeComplexity.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ae1bf989ec41c09182e59cfffbaa8f7d0944d9 GIT binary patch literal 44746 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 literal 0 HcmV?d00001 diff --git a/blogContent/posts/programming/everything-fibonacci.md b/blogContent/posts/programming/everything-fibonacci.md index 3ecb4a9..a34f14d 100644 --- a/blogContent/posts/programming/everything-fibonacci.md +++ b/blogContent/posts/programming/everything-fibonacci.md @@ -3,14 +3,16 @@ know what the fibonacci sequence is and how to calculate it. For those who don't know: [Fibonacci](https://en.wikipedia.org/wiki/Fibonacci) is a sequence of numbers starting with 0,1 whose next number is the sum of the two previous numbers. After having multiple of my CS classes -give lectures and multiple homeworks on the Fibonacci sequence; I decided -that it would be a good idea to write a blog post going over -the 4 main ways of calculating the nth term of the Fibonacci sequence -and proving their time complexities both mathematically and empirically. +gave lectures and multiple homework on the Fibonacci sequence; I decided +that it would be a great idea to write a blog post going over +the 4 main ways of calculating the nth term of the Fibonacci sequence. +In addition to providing python code for calculating the nth perm of the sequence, a proof for their validity +and analysis of their time complexities both mathematically and empirically will +be examined. # Slow Recursive Definition -By the definition of the Fibonacci sequence, it is natural to write it as +By the definition of the Fibonacci sequence, it is the most natural to write it as a recursive definition. ```Python @@ -20,29 +22,38 @@ def fib(n): return fib(n-1) + fib(n-2) ``` -#### Time Complexity +##Time Complexity Observing that each call has two recursive calls we can place an upper bound on this -function as O(2^n). However, if we solve this recurrence we can compute the exact value +function as $O(2^n)$. However, if we solve this recurrence we can compute the exact value and place a tight bound for time complexity. We can write a recurrence for the number of times fib is called: -```angular2html -T(1) = 1 -T(n) = T(n-1) + T(n-2) -a^n = a^{n-1} + a^{n-2} -a^2 = a + 1 -a = \frac{1 + sqrt(5)}{2} -T(n) = \frac{1 + sqrt(5)}{2}^n + \frac{1 1 sqrt(5}{2}^n +$$ + F(0) = 0\\ + F(1) = 1\\ + F(n) = F(n-1) + F(n-2)\\ +$$ -O(1.618^n) -``` +Next we replace each instance of F(n) with $a^n$ since we want to solve for the roots since that +will allow us to put a tight asymptotic limit on the growth. + +$$ + a^n = a^{n-1} + a^{n-2}\\ + \frac{a^n}{a^{n-2}} = \frac{a^{n-1} + a^{n-2}}{a^{n-2}}\\ + a^2 = a + 1\\ + a = \frac{1 + sqrt(5)}{2}\\ +$$ + +From this calculation we can conclude that F(n) $\in \Theta 1.681^n$ -#### Measured Performance -Here is a graph of the actual performance that I observed for this algorithm. +## Measured Performance + +Here is a graph of the actual performance that I observed from this recursive definition of Fibonacci. + ![Recursive Definition](media/fibonacci/RecursiveDefinition.png) @@ -73,20 +84,84 @@ In this code example fibHelper is a method which accumulates the previous two te The fibIterative is a wrapper method which sets the two initial terms equal to 0 and 1 representing the fibonacci sequence. -Proof in latex that fibHelper +## Proof for Fib Helper +**Lemma:** For any n $\epsilon$ N if n $>$ 1 then + $fibHelper(n, a, b) = fibHelper(n - 1, a, b) + fibHelper(n - 2, a, b)$. + +**Proof via Induction** + +Base Case: n = 2: +$$ + LHS = fibHelper(2, a, b)\\ + = fibHelper(1, b, a + b) = a + b\\ + RHS = fibHelper(2 -1, a, b) + fibHelper(2-2, a, b)\\ + = a + b\\ +$$ + +Inductive Step: + +Assume proposition is true for all n and show n+1 follows. + +$$ + RHS=fibHelper(n+1;a,b)\\ + = fibHelper(n;b,a+b)\\ + =fibHelper(n-1;b,a+b) + fibHelper(n-2;b,a+b)\\ + =fibHelper(n;a,b) + fibHelper(n-1;a,b)\\ + =LHS\\ +$$ + +$\Box$ + +## Proof That fibIterative = Fib -proof in latex that fib iterative = fib +**Lemma:** For any n $\in$ N, $fib(n)$ = $fibIterative(n, 0, 1)$ + +**Proof via Strong Induction** +Base Case: n = 0: +$$ + fibIterative(0, 0, 0) = 0\\ + = fib(0) +$$ -#### Time Complexity +Base Case: n = 1: +$$ + fibIterative(1, 0, 0) = 1\\ + = fib(1) +$$ -proof in latex for time complexity +Inductive Step: -#### Measured Performance +Assume proposition is true for all n and show n+1 follows. + +$$ + fib(n+1) = fib(n) + fib(n-1)\\ + = fibHelper(n, 0, 1) + fibHelper(n+1, 0 ,1) \quad\text{I.H}\\ + = fibHelper(n+1, 0, 1) \quad\text{from result in previous proof}\\ +$$ + +$\Box$ + + +## Time Complexity + +Suppose that we wish to solve for time complexity in terms of the number of additions needed to be +computed. By observing the algorithm for fibHelper we can see that we perform one addition every time +which we have a recursive call. We can now form a recurrence for time complexity and solve for it. + +$$ + T(0) = 0\\ + T(1) = 0\\ + T(n) = 1 + T(n-1)\\ + T(n) = n-1\\ +$$ + +From this recurrence we can say that fibHelper $\in \Theta(n)$. + +## Measured Performance Notice how much faster this solution is compared to the original recursive solution for -Fibonacci. Also, I only measured going out to 500 because beyond that I hit the maximum -number of recursive calls for my installation of Python. +Fibonacci. ![Iterative Performance](media/fibonacci/Iterative.png) @@ -95,13 +170,23 @@ number of recursive calls for my installation of Python. # Matrix Solution We can actually get better than linear time for performance while calculating -the Fibonacci sequence recursively. - -![Inductive Proof of Fibonacci Matrix](media/fibonacci/FibonacciMatrix.png) +the Fibonacci sequence recursively using this fact: + +$$ +\begin{bmatrix} +1 & 1\\ +1 & 0 +\end{bmatrix}^n = +\begin{bmatrix} +F_{n+1} & F_n\\ +F_n & F{n-1} +\end{bmatrix}^n +$$ Without any other tricks, raising a matrix to a power n times would not get us better than linear performance. However, if we use the [Exponentiation by Squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring) -method, we can expect to see logarithmic time. +method, we can expect to see logarithmic time. Since two spots in the matrix are always equal, +I represented the matrix as an array with only three elements. ```Python @@ -128,17 +213,112 @@ def fibPower(n): return power(l, n)[1] ``` -#### Time Complexity - -latex proof for 9lg(n) performance +## Time Complexity + +For this algorythem lets solve for the time complexity as the number of additions and multiplications. + +Since we are always multiplying two 2x2 matrices, that is constant time. + +$$ + T_{multiply} = 9 +$$ + +Solving for the time complexity of fib power is slightly more complicated. +$$ + T_{power}(1) = 0\\ + T_{power}(n) = T(\left\lfloor\dfrac{n}{2}\right\rfloor) + T_{multiply}\\ + = T(\left\lfloor\dfrac{n}{2}\right\rfloor) + 9\\ + = T(\left\lfloor\dfrac{n}{2*2}\right\rfloor) + 9 + 9\\ + = T(\left\lfloor\dfrac{n}{2*2*2}\right\rfloor) + 9+ 9 + 9\\ + T_{power}(n) = T(\left\lfloor\dfrac{n}{2^k}\right\rfloor) + 9k\\ +$$ + +let $k=k_0$ such that $\left\lfloor\dfrac{n}{2^{k_0}}\right\rfloor = 1$ + +$$ + \left\lfloor\dfrac{n}{2^{k_0}}\right\rfloor = 1 \rightarrow 1 \leq \frac{n}{2^{k_0}} < 2\\ + \rightarrow 2^{k_0} \leq n < 2^{k_0 +1}\\ + \rightarrow k_0 \leq lg(n) < k_0+1\\ + \rightarrow k_0 = \left\lfloor lg(n)\right\rfloor\\ + T_{power}(n) = T(1) + 9*\left\lfloor lg(n)\right\rfloor\\ + T_{power}(n) = 9*\left\lfloor\ lg(n)\right\rfloor\\ + T_{fibPower}(n) = T_{power}(n)\\ +$$ + + + + +## Inductive Proof for Matrix Method + +**Lemma:** For any n $\epsilon$ N if n $>$ 0 then + $$ + \begin{bmatrix} + 1 & 1\\ + 1 & 0 + \end{bmatrix}^n = + \begin{bmatrix} + F_{n+1} & F_n\\ + F_n & F{n-1} + \end{bmatrix}^n + $$ + +Let + +$$ +A= +\begin{bmatrix} +1 & 1\\ +1 & 0 +\end{bmatrix}^n +$$ + +**Base Case:** n = 1 +$$ +A^1= +\begin{bmatrix} +1 & 1\\ +1 & 0 +\end{bmatrix}^n = +\begin{bmatrix} +F_{2} & F_2\\ +F_2 & F_{0} +\end{bmatrix}^n +$$ + +**Inductive Step:** Assume proposition is true for n, show n+1 follows +$$ +A^{n+1}= +\begin{bmatrix} +1 & 1\\ +1 & 0 +\end{bmatrix} +\begin{bmatrix} +F_{n+1} & F_n\\ +F_n & F{n-1} +\end{bmatrix}^n\\ += \begin{bmatrix} +F_{n+1} + F_n & F_n + F_{n-1}\\ +F_{n+1} & F_{n} +\end{bmatrix}\\ += \begin{bmatrix} +F_{n+2} & F_{n+1}\\ +F_{n+1} & F_{n} +\end{bmatrix}\\ +$$ + +$\Box$ + + +## Measured Performance -#### Measured Performance ![FibPower Performance](media/fibonacci/FibPower.png) + As expected by our mathmatical calcuations, the algorthem appears to be running in logarithmic time. -#### Measured Performance With Large Numbers +## Measured Performance With Large Numbers + ![FibPower Performance](media/fibonacci/FibPowerBigPicture.png) When calculating the fibonacci term for extremely large numbers dispite having a polynomial @@ -153,6 +333,61 @@ the 30th term of Fibonacci. # Closed Form Definition -It is actually possible to calculate Fibonacci in constant time using a closed form definition. +It is actually possible to calculate Fibonacci in constant time using Binet's Formula. + +$$ + F_n = \frac{(\frac{1+\sqrt{5}}{2})^n-(\frac{1-\sqrt{5}}{2})^n}{\sqrt{5}} +$$ + +```Python +def fibClosedFormula(n): + p = ((1+ math.sqrt(5))/2)**n + v = ((1-math.sqrt(5))/2)**n + return (p-v)/math.sqrt(5) +``` + +## Derivation of Formula + +Similar to when we were calculating for the time complexity, we want to start by finding the +two roots of the equation. + +$$ + a^n = a^{n-1} + a^{n-2}\\ + \frac{a^n}{a^{n-2}} = \frac{a^{n-1} + a^{n-2}}{a^{n-2}}\\ + a^2 = a + 1\\ + 0 = a^2 - a - 1\\ + a = \frac{1 \pm sqrt(5)}{2}\\ +$$ + +Since there are two roots to the equation, the solution of $F_n$ is going to be +a linear combination of the two roots. + + +$$ + F_n = c_1(\frac{1 + \sqrt{5}}{2})^n + c_2(\frac{1 - \sqrt{5}}{2})^n +$$ + +Fact: $F_1$ = 1 + +$$ + F_1 = 1\\ + = c_1(\frac{1 + \sqrt{5}}{2}) + c_2(\frac{1 - \sqrt{5}}{2})\\ + = \frac{c_1}{2} + \frac{c_2}{2} + \frac{c_1\sqrt{5}}{2} - \frac{c_2\sqrt{5}}{2}\\ +$$ + +Let $c_1 = \frac{1}{\sqrt{5}}$, +Let $c_2 = \frac{-1}{\sqrt{5}}$ + +$$ + F_n = \frac{1}{\sqrt(5)}((\frac{1+\sqrt{5}}{2})^n-(\frac{1-\sqrt{5}}{2})^n)\\ + = \frac{(\frac{1+\sqrt{5}}{2})^n-(\frac{1-\sqrt{5}}{2})^n}{\sqrt{5}} +$$ + +## Time Complexity + + +Since we managed to find the closed form of the fibonacci sequence we can expect to see constant performance. + +## Measured Performance -latex proof of closed form definition \ No newline at end of file +![FibPower Performance](media/fibonacci/ConstantTimeComplexity.png) \ No newline at end of file diff --git a/blogContent/posts/programming/media/fibonacci/FibonacciMatrix.png b/blogContent/posts/programming/media/fibonacci/FibonacciMatrix.png deleted file mode 100644 index f0d6014f58a69f76509d6610345f3fae79f87027..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62460 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 z 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

l zTL*r_^_4sYICO4s&KECB??*9e3j_2A&jZq*_vwm#B<;#)-qWA%uarkdM&hx57kU~( za2v?w=#ps(VN=A zvcfRh-aL2M*MUfmwV^7+#_7tHuAc^D?*Y@p>am!70$42IC14Ph`*NTeu2PjxrSpC`RH_gThg@TSvD zPo$u~1WxB_2#F99Ifq&nP#pJi+qVrPKiD+B#ioRaFW8Q+4rG6vQp)~S5VzP7M|=J? zk;QK7!bNzMn<-5uzV1g~+D`uzDWJljZSwH*yA5Wd-Z`4(I!`WLdzo&k?q>MNQFuQ$ zdZ)yWatd5^h26Q%n>V*XGa@Ed3CPq{xTIkwwyn+9C=QSvR^e1aH=4G-jj-K0IKGqE zdaMb}Q^O-lO)-i!2|#=D6sNp!rnkE5*=hoOv0nS2nLQ4^U%o;6cMz^2V;Iba^zsfO z4vmh!g@9q(yh!kHu8cwmuEWxIGvsHR6QZ>RM)v2ts4#Y|_hhXniLcylBWBCfS`}G3 zac=NVpKhh<165`wpgN3+7F?z{W7s{ruUp`f-Ol@AkWdSd9L>@Y>3FNUo|%`~?)zKj)XkV;E)f8Y@!?xXdRTTjliM zt<;whVRgyv)LRGoLPuoBi!#^y*!3TM&}Sw~gx(Gowv@6Y&GeTQ)X!C6V#w{hnpe9` zK|xV?#BFa6)1f#t2oe)1sCdNt#A%A7hZOX?NS$U@N4;XB8{yxhA+)vCyZR(MhGWJ- zhcx)a9z>5{Vxz^x6dumBwD$i5qpGZ_pMZy>2_LLF$nHN8^T)6n7kYJfF9sY`++euS z3m_=fPD-H216p=(n`izNFKef34rs*uaaGNPe4|;JW_!UrmMkU z*j&49EPZ{$n=4Z*AyDWXj287?)&P_+^*j1X$z)YOulrR$tS*+nlBNy0pkq18p^~e*gdg diff --git a/utils/markdownToHTML.js b/utils/markdownToHTML.js index f2c9567..d9e134a 100644 --- a/utils/markdownToHTML.js +++ b/utils/markdownToHTML.js @@ -19,7 +19,6 @@ module.exports= } resolve(result); }; - console.log(markdownContents); pandoc(markdownContents, args, callback); }); }, From a35cdaadd8919e4245ab2b828b949ff1b24caf6a Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sun, 7 Oct 2018 11:24:01 -0400 Subject: [PATCH 6/8] Unified how blog posts were rendered between the preview post and full render. --- .../fibonacci/ConstantTimeComplexity.png | Bin 0 -> 38655 bytes posts/singlePost.js | 149 +----------------- utils/markdownToHTML.js | 118 +++++++++++++- 3 files changed, 114 insertions(+), 153 deletions(-) create mode 100644 blogContent/posts/programming/media/fibonacci/ConstantTimeComplexity.png diff --git a/blogContent/posts/programming/media/fibonacci/ConstantTimeComplexity.png b/blogContent/posts/programming/media/fibonacci/ConstantTimeComplexity.png new file mode 100644 index 0000000000000000000000000000000000000000..2c781f42c2c8c96cb30e57c8657b0501772389f2 GIT binary patch literal 38655 zcmeFYWmwd26fHW0bV|1f0@B@rC?Q?a2-4Cm9ny``k^<7*-QCjN-5}lP9slQ?d%oNc z=kvYuJkH2G@67M_#@>7FwbleH$Vs515TigK5Om28qDl}5oHhgkvx0;G-YK)QSO+ig z_U|M=B7uiHl3@_|8`L*=v z$IT1GljD@1GMD}bsNYKiN_+82k}kuuZ?s^jpPaPdNgMHxPh)~n)X<$kcuQhEDU z)G+uR)_112>Tt*~&!4~h`tH(_{p#^Cp)Ot&c6N*AXW!MCpo@jcQr#KNTjSy6vs9`N zQPkgp{yiAw#-~VLyo5f=RnThxd-G$vcj&+WeR%c%zxDsgmB=vPM^{)6&IlSDl&P(+ ze~0B)y@Y`c9-^f#M9_lLf| zKF2BTCRde2e#iWcy*>K6h6d?K;m6vKN=iy5Lp95u4Cti13U&?-G4)>$>6vsIuLGJs zs;Ww%5-|UJXZOPOH7~FF?fuyZ$wLzX9-buRcSc5rxbVN5&82it%OfwK|8sviZ_Q@C zB-r@3pMm%50U-hgY0%EjmyNBhsfNeaZ*U3hMkuMyYsjR+o}@Uma-E&QI6uCB|5d2b z=*$+!q!ob2p!$ND8Dn^OI4B}Q+{h@a+<30il-GU>?d!qJHzuv>&&Nwm30&rJc2Adw z^K6!LoP()vNRW|{)tlY+9Hfcv%bCqhGM_@cexd zF{kblpwAkZkkQf6{@aO(kA@~D(;DkXM-f3mNJc|#zKE-K3+?Cza(>22n{3#fzsj2;mVE-)^ zYO%}8%CN++!9i3nH$;ZKU|>Lne2BOo;g^Vx5$Jl-7#>Xh^ZVN~ zzCKwc62zZqNA0!FO!o= zukY@r?+CrTp0tYNpXUE0E^}|@=H-cqh8y28rViMETBrdP0U~|8=fxNvs zT7-eXz`!7(p!hU2G}xt-ma=|`@(T+KbG>T$+y)Dd#%tYp7TxAP`9Nqy2hCA|%bvTw z3BVu=nVC`F3HdyctJpg@C~9h&S1!cI zM?@UHmEEySV8=WNl|OGl9bd1EOraH*1pCMPl9fZ77Ln{d{*k zLCAw2deCjxL?PLX6EkH7Z1!6+q(bh5cUQ+f$$a+E-GWCzfMrc#(JIq_2ENf|trK|= zTw{N_q-QKkI<`qBg&$8xM<;>J0AV=wO=y$b)!NN=TF-iBipqw|M&NQXQDTeb>-ivmrBTR%r9T=DKyW-hfv6A zo91OKyDU7Up)5i|-)-gP2 zA*!Ey2^|~T5grOkayxqI>&Xp`@Kq~U<-nhrpIf1$#f?WVUhGRza%hW+{uV+2&l7rv zc-q&ZvzOkIiK-vVH5aALV(KoZT})`Wcy_%ki5A`fPaSnY0S){T6flsreti{MZSdi$!YkDvCo( z>M9C5qV~_^F0fJb`p~W9W|1DYanT;Jc~)BiJx~)p{|#sN9ca2FV(#I;0-=)k?ca1b zC8NHpI2!~oeE+wNDA0-jkY&hc{nh>%-li!GtJX7sp`{WfcIyso661esz-5BQ5>g|SugJQ0^)gL zSbINIw8nrYjvGg!>E;H`FU-GyOM1mKc=EL@P{(OqI@LD?e~H-@GBrv3=zPo7Sh`AG z9H&}!p$ZNcj4FYR$Ngy!5;F2PUtc&dHyco20PeN0sz@skJX2lN;`Sgz-v+ zN1kO98Hhe_m1o+^o_9=JLrH;ZIxf$8BFH)b&cY@m3tw1RaGj>$wSg#S%d|l+yWSIN zu+|xzz-#;R`Sa&7TmXJ_mm3X~>UW`Zc6GJQ&JqFikXzU&6m9f>54v~`@=8mw#&hI* zK;~w=j;4H>aclU~H}_VveV}+`&Fl##o?7zyE*U|n9W$=*6&0@Bj!Y6P%ZSPmPA5B z>$D$v6L@pB4F>^0X=Qsmu%!7GC7M=VTwnj??d4%8l|%$ICquAsaC~joyD6!t;J$tP zmcZ{wkA?s@RiaxWI1)(V8PpX@K=tMgna>Nl8u?T~q9)f1AJu}cY}q7Gn}Wr?p1Qia zY@D1V6cw?-k|thuP`%vqURsI^dODD83sa}u!(X08z#p3Snf&fd$%ySZ> zgIAlAl{Qxjd+^M^5A%YbUsEG3F)`%e;DFzJVQ~=zbb2A5^9h)kV9aM!2>8G+fCC8# z5Fxqw`98ky7wzyQBqR(C4PP)Z$<`eXu(XIuNulVtY{qWgBY_nUX5Yl{2SN7J#J1{+ zL!01C>hw0Q0^&{39q>}H76)Qn2at*YKq`OF&h$8mSGTv-w!aDs3quj*T>`j`{{RxP zuI@7b)xHBi0Ic-p8JU@7w(H`Z-QDkS#i(g%4f>*9LA(nK86mA;e@@pzS=RPTS_0&9 z%qRX&U^n4By9KiP1=^c9jSfa;U&YP}bNOFmFZ3Pctp$bhNiy1HNQ=pvgJ}jydKZeb`~3)GE442Gt#lR z_~~YEEGtxV85X3weom*?jgv&h-kKG)a|K?E40);$;%JiTIito=Qz7JG;F&xs8pD*5&1vr5*s- zmhGDEmjkBmt6xjV%A%v7pu}+byjV$bS`sleeGOtBicnTN0^uO_PR9{ZQO`-=xZ>Jx z4Sti$@s-QzFfVBe0B83d2>I*nw5T38 z@o3<6o?jbXb^lW0T5lFC1IC4wsi1h%I5*4)(!Fu{8 zVkz$yDaru)^-er$FN2j^@xg#LmLW# zuLlZKPWw~nkB^UzQ@8{KRLsnB8UU^ax3|CR?CD`J|9Uw03?Nwm3byAoi|_$t{l8S0|eI1U6hbLLcgP2w>S)ti@BsKicABALI+qHoG-v0xX64Qe0#+3nIB<@|Z zKLp2YZQ{05Mf~CU_fHee<=S1b2!ail@S@1hhF?s=NU#*PAK5%)G>T_L`nHMg;NR9nYbnqeHT8dEkb8K3b@&1$e*AuiB0}wue&z=U_EBdy1gJ$LP-;F+ytl&TM z>sIS^AS^gef66T^>;x@(@WuYL!AR;Gh>Vdx$owT|P1m=#?QLzV0rSB@z3dwt8lJ_M zf6V-nipRge!#nf7I5gv9M`f5(>1k2(;`L?l$J<%k4N{{yZ(4n1)APKx(53g}i$~4m ztNndRwJL?3x@?0ItdY$zb9H{vk%V(cC3HxfdcQ^Z=tPGuzcdLa=UU(@ATBCvsPfbf z?ROg+1sOFfkw7;G?RNF`^<%OLc6WFGd?}_q6ptVco-9yX&x+S+Z}&$XEl^{zn5)c_ z`+nAr%JK`e4Hd>i@AUL2#UshX6A}{mKOwf_}C)u21l`G+GkQ}_3FVkaOz-Z_qy6IY;R0* z5_mPl29hbiKnI^BUyNr)lf1S!!~qCy)opUSHTh;?*I%ZextHI)G!sQmNj^B)gL^mu z1Pqdox7*zfRp$V5d~uw?;*Wvrvs^37CZm^1KU9WR_jY(Gz6Ir;3f*x%v$l}!e5iT0 zl9~73s_wGRk@j@43{8-NEF|anXjV#~v92%!MbxX5pevT^dj8l|f2k>*=hNL_;`;Te zAx&yy0pg=jwLHU7)SmrcJ4&$f&-?hYAl|lc_opL>w;er`&BOIiWKtaiNzeb(MN@qp zX+h;L+LUwoI32{Bq!RWmWpRHH_EkMz^T@}@$>dc4G|W(5b!>W`ooSW7uwM_m{6nmR z`%19ph&qJ9oVBz|$TGxD5O*Nf%jXu}G z{}W+s>(R`DhsdnspP7PBAwvw`fWS`SbaCmgO0}Xbhs;b6Q!~b#SAAV+PS|pwRybpi zodGWh0zqJF(dB(~^c?9yWdb=78brO0=UE&*FTY(Lgd|cI2I5{Dnt~NP2lo%EMQ_w; z)|er)pjyyY)D9ctuP>$z!$9z5cS4VZn9+s07yB?)+fo4A9L$GaNF#lBt3XVyVGAKR z>t9(ni;VRm4KY$i=or^nUNLy$eMxx9k1nVCx;;I{2me?M_tpJb4+jJi4vA5nT=7lm zV`^r`u0s2V9wlY_Y^nmI+NFH4M?Bp~C&jT9^*j><3r{L%&eybB68-< zwk5DC*DSq%t){4{k~xLH%hN3I^%*#CNSAi)Zjl&%4ddY{)Fgl7M;9rPT3NRLeor31 zZ_TY8`(-GxEq>8H^9WO0(jpA9q`8)UMTxX1(|_%NoSf||YUI*!l#{Q`WqNJaeDnJ& zdY%=@lL$usZqa8an~%~EZzqZ-bRA~&sat0 ztOkZ3DolR)I|~>T@-a+B(GXA^)_dQNnK@k9cAxiRL0UtvF21Fxwx(_f9tiau&?;)_ z{p(UBjudu|k07#C%SedzHL~kyiZLf^PB{?BIF+xhQ?7MIF-LafuC2gqQK`y-Gf2-W=3(bGhz=VG8v zn@}ub=HooU7Q|$%l-Z_ix@t$$x8ZC136?xz*z;z=?{gbHEoEHT2$_Bj?>(%LX3}mx zu{iV2Qu5_Mfq3PYwEq=5TfG`St>S|#QO~Ls&96HP^&xL_TNp?$=8Sbs)PrcX$sFkD z3c7;_{Nv`xC)c&VB743`!wiSqn;Hg*74wZJZ)$qbk-d`TmAD3Xbs*L6FGsbqd3U#D z)6x)4wv}j7*VMAE9bGId8rSx($%|k=pUHepR9uZ-+kU^O=|Cn>gy8hEg2V!|gt^Y0 zr9Mr#-kD!xBhldYIwLTWLn`0wKC_{QSATt7ePYL{hDID|2h+Vtt3JE)mjPYSINUZS9efN5*CQW}L9b zOIH1M9%U?e0piIunvN^amHzgx9A@-zY%!{O98?lFI_pwET21bhe%KaWAQ)B|!jeV`7^sU?Nt)8fpJgL;{)&}8}juu+X>Yb(V48Mtc_T(XY z@r;{&3*$2OR1sA@*0rHP1oiW};5mVRS<5~qy(c`O?Nu~~HeXjPYlu?CygQGWVx0)` z$*uZ}mA^J)248GwN#&T{TIgdu3ijI(B~;T$J}1|8gzp(gWvkEO(Mg-3SZqwua>ShE zdim%^hYmUE+_A#PyoF{>HhTEuM+c0j*=V0&UmvSmQfW^)aY-ZeTg1B6AL-~$lDP0N zEaAtY$P|Yin6&I{1|NCQ_SQxZnvAs>dWwH*D}Rnv@v)!n%H>>0h{b__F*A;=!+aSe z-w;3*kCOP1EIJkPj}eH;C#C}14x?>-u|(KhjPb_|ej@1kU#a|+Wk0*lEvZ57SR4cw z-uA_^-S_tUICxv;D78^`mh>z9(HddvyV=Gs?wB{IZhe~)Jk&4+9n~;-XSiBsKPX$g zNeOO@qQ9=6Gg$D3sH7TbimJKa4?Ls(Nn*b+I=>yjWx^g>dijALvJ#8@K>V=!_UVPw zy{CxP?DG z%Xq_={2Q?!^=6U;ek3c0WZ1p02oS~5VEDI7${QH|m;B-EgSBjx#4wLm7`003-vDMR z!m)Y1U89-07!{6u)}b{Yg%z*lJ(iz{U&Cn4!rhsqnHYJriw>HBr42#G&^M7ow8bk` zho zf=Lb!+nMjnE*xkgvOjfP`W?_bi+B}_&{+8zMmV__9)fnT_HFb{(;uEzGCi1Lkmj3B zPqsl}!(yS;uGfq(*qyd<8u;?VG#x!(97NU?~xZjJiZi6S0>!}7ha zY}@K6XB?hV&p%qrBE-(KfQTr6$_m}OFMx<$1dEks5ED{5E?$p!BsD0eR|n&1by?dK zj|nf*dOZ(YYQK~M4GUtJ8CQB#gSdmX_&a6A@gNK@*$aQZhKoB&5dd$r?r*CcPaTxl z<qKFGWGu*`2+nk8#4zWl&K*W-oxd(p0lPU`w#8dvbX59aqL zCW-HXR8tR*@TtuWCeb5&0f7mLVWdqCMH+WB<*NUYRh&8R(+j!aiitCW?D?|22cDyI zn2{J*VYb|9Glyjuj+)o_Uu@a6FJta%Z_73p_>$@T{DYaa9oGGenVhaDzfIUnFceXE z$$E5kBp$W@^la7w(i*19PjIDn_F{uV-sp9>it3SUTWmWDybG^>+|A>b&DcJxFh4G& z)MDBNH%4W;;mFJsFIC+U9-vjw{pncPqw*0tf`P$G=T+xm=tQ6LUAL6v7kpaq9EWx+Zr^MCPsaX0N9Z z-Qi7(%o%?9WsEyZx!})i*ahMV^pmpbLT-8wa z&Ldg6i$>5J8U#_k9tNP*{bq|q*`n3~D%}kv+YnYs)KqZ#O)bRhLi<`DrdS2qe6Ozq^!-^Nui4@G>aJK12568t2Ek zq&8hSr=$dqr2if5UZUb`fL;1t`A_$w)0GsL?KFEzAA0W>D^Pslf*szBS+NtTqaR7H zjwTZ0P18a_6hQA@o~o=<`|+l+)Z>T@+L(hYvRDa*gI*j{((L{xcP8EHz(YJFVc1H8 zA7>Uz1S^J-03t)ag!cfu$aG7}vP6IY62@?+HngphVE*JA+JrHXjn*v?xqv|1WYmMw zyIl+NrukUfvmaar|Bz&6W4$l&0fA z3YWU+zB~&|dOtpbvFk|Oc-L#0VDBUkX+;!>E<3sN6L(?@lN}Us72#VTJ3Kl0{)0_Y@>Kt4-1hhFoQN+)sL2(t!oHc_GenAnI)PFfGQsfr!dunH|YpW?}W&IsgBa57FO%~DvFsu+O$S2iE%Hyh(fuxKvAxi-dDw}=P#BlE>-Q( zQBOMqW`7_#IK7q9A@Y3cgGugV%&(xS`Tbltl{1z@NQk~OV?MxPT8DynGq;ul%!#wDst@26JUW10k&h62GH^|J{)~f+#W}`C4ATONNeT@yzuE z-TA4Ln2sbK&BHdXabs() z*d$*v)i*+bgRh>AnumATKuR^cRAzswLNem2R4 zV$x!EuV>247QX4rt}qyv2zZ;bIZs{H8_pr8&Fq){!+tcV5YHf?3{wk%ALLq|L)eQKh+(zm4+lJ<7Vbi#W=Lho@rYu%h5#-pwy%cn?-N85GlsQ9Qj4&^SXu35lA%QKlm)b zloo!s_@~g8BhPll4cPQm)G~SmNCSLZt=Rf19xrv^b({af829XZj|gr0w;*?GA2<@u zr&W~jN1bRI`B(SSN!4mc-cV|N5q5l3SK&A?1Lz zUt4u1wOo6DXtwAS4pwtPFRDUdLS1fV6^#q?tx&wO&zjWx z0wE_Uo!8`#8xT*S%;BHifEy@$6NMoO3#9)1e*5o^|73a9lF|ilDPJVWNzGfy^cP4~ znjKnOq|^QjN}#Ti%Y8j@GQS~D+Fxq+{9_7FZ4|$vuQMNyXC;v0|JRHPVE-5kL`PE4 z#qI3v0?rEL&FVe-l7%E6K+s*^IpusrzKpw1MytD7W7)Q2x?DxqpeR7C6?(ij@bmL) zZEJ%81U|3(^$F8-iEazI$L%>(?nFQ%^tPO@o~+Z2qJ}cV!0lq=;2`?(BkpjTu&#-$ zhzJaj$q)d;@9gZn5=@)=*3@*7AkT4s3MygR*x9|av0+{ExLV}DvIZ8Qs|9;ZcX#)d zt*rpS{NA6B%QIa|Vqt%Z*HQ`wfUK&(p07x9*vh40N3Wzp=Bi~soP+U5l#Pi_(1W{dwz_u11%$lYWMh6<}2%qzUF!md5F)_ve*^9uUI76retzQE z*lFF*IkHIs945n`feJfQZiISyv>2*UVf^~adbycwJX^NoV73C--Mlvk;@5pKg<659 z?|0#BgA>b9-8Q+!d^P&%>1plVQ3IP^J3Mg6Y5S+)0w+fl^=fOEyWqnRTbR2WfzDiv zx3D{YAZS>tmoy71Hg1@HW&tVBF|d8Eo8kTUdF~ad7R`v-30Nf96Sv`|z0!^H_RON0 zJey^IL0lEWUw|}2@oHw7)Cb*%^Kp(nM23PIH17Z%)krYE$K|swq$&rC^KiA?1K4|D z9z=sW+Mt?ibTkgI#)Z00Kiw@qb%PZ<1#UnpMn<%fmPh^oG@=ancTv=OyJJ~UyUodp zFXmeHyj6$S)19uNv9UgwKg1jO<2pM#SAd4{UQ`qwsue(ea6n-ZGd8Aytbnl;G;+y7 zvlS+pZdXTy!k&WojOyM_OD+;b8#O?%X*_91CFHgsbiLT~uUT?M1tLs4urbb{2=kdm zQcJ$eYO@PG&0D9-XI%;P$P04y!p!z04lK&4P@s}3oi_dcNjtCcj}!G@G-l}-oPNed z;^ra}iM(k!5vbbLtK1 z=oI^q2^FjgQZ3_YUJbS6hkkDKH&&QL%mCquSKDf&gC4I~m5(&| z7{%EkW>f%0!axLB>99cG2Lovq_Iw5|tm$AW8C5z%S}PmA6Ed8Vyz+Zmul?6s;0_~j z6ja5r+1%dl_`=yfGEy>p=;`U%J6zn-AoKO>CDZi4ljWE2k`n8bJ4b#p!8dPWxqv%i zrq-59-@t$}>3etFLgCs( zP9+}Jy3rR6lTdEcQssJKc7K-k)LHMiZ-umFrd9eG2ACpZN(SO@x))RrWQX6|X6+^q z0eX;7V_ddH@uOAizSgjQ=X{y7UdQX?K{_8m+{3}am3e-p)=zCB^9n=zR^a<7rKgEg z2o01Us7S?frE8WnR0G4;VHBL+!_L!`<2ikwoQt0FCAEW=l%B0il z8|j01_ecb`_Dt&3S-<@*aC_a5Q7_(^jiaV{P4>MCMAg9jJPFX5`S|!8tw#F#zO{Hg zq=nu5-^uSf+htH$SNHKRL7`U7QGi{~a(PWnAV~cwEam9Jsr?@xokTRaB68-pS|!Yy z37Q3hN3OCma@)O!Q%FzSXB0@aSrMSUYAM!8(pUR4yRx44JDE+k&;1VT$RcL9Md|P{5K%&?8V?!+r{nslJx;E%sVG*ll#p}tD@V52_bZ@ zwDph{hoUYDn*}M!ESQGjpG(uSgoM8q$TwDlXvLErnVYNLUSa+Bi6H=2L|tz={e= zc+A~&p@uIJhw*3NJOydmox|(7;i1`d#1(ry{^5tgy2+Q4b%%(o9yc~3e$`*k9{ zwE7fIhJw`UP0{em^lkDGV|P9r=mJZG{*35b-uKm`@2$b4h`;@6n~RW2QEoBz zXh#o`hu7KhX$pZ_Oe1@trM`k8YlyQ~;OmBqX#uy^#lE8eE=+U`AJA6M7V1-L zo6c&ml{15k1k(z|1iLwD`jh!8A7o@YqveHyffIZ%fejAA>T&D9s9yS3L)hs^8&tB- zz~}NoN~*n}q&Xy0B2s@inGaZJxdrbIDxBBDc}iW*jG^8KV2hIY{P_haZAcI#RMd|D zH)Cuf#@ns!ZG)~5Jm{AOI*t)=!SJAJ`~Z%UjF*qT z`(N~Do)<&Ne``=$uq5*H`J5}gHAtKqwB*Ei}J&bsA78t#dARW z)xtd1X4c4eU}j*nDVB(}yd7_ebjBM%@e*_~;7cDIYQq>2|EUunfAm3I5+{JN1Z3LX zXPdxl*8{v#7saPGV+`AP)8vxY-A8?z8Y-<^reoBNS4(bC>l^|)u^)h0z&8J%hgT;@ zva9z8RT-Fgp?2MK0LnT8&`C;7$7#-wmvuFu)`OLwCaG3R z<{JcnVcUQgjn!&_H;nuZF@suhVMUEffhr}igk_3{xBuiYDRsND$|}Tys1|DnCngdL zKAew(pE4;lZw;puOhtyyz0Uf2U;TE0Xb%o_j-f6_MV5I1+Py%J8RnY z4g&x_-;YQX(nw)%G_NQbAD@0Ezhp#j>T=P;!NeSFKC(fi4QS`mam`Dkq30E~^!een zh8V_k@1?Kj`1$tP$^!|!r(QEGINzfHw#ygrv+>O zT{bBJm*pj6CGu-r$!%nNRZ8y}pxIcfy$1Me-Z(m8LNnLv8zZ2t`+-9HIsH>L%ikL& zX$;^2)5o8#OMV{o9LR@(B?U$tHgT+;Zy`V^jRbx5o`Xt7Wd;fyu-+j-psZJNgBTAI z=B^*hWlsJSuYub;Zs7d@!jRP*(}Y|>8xW)03ZJ^xD|D6Fm|oVlwG=!FBm^X{(L>4g zzb9HwF%btx{>-Tnwb}~b4v{rTuNOtsRRThL=N{Z?NPr~(ARM4Eol81>OnCi%z+StE zmaTv=@?rah&WsHT;P!Sl_kEy5YuIz01!rOwYpJ)6vh$T6b#YASIb57SY~wpwRZN@4 zzSvKyJ^%WnP5FJCpzlD(-!_@=&x~!WrtRL%Ha!66k4Z&HtV}X-+`T)7+CV-uc|}I* zXQI`QD%j_=0~t@2e%qX}F8Sn}$c0IbA=JtP#OaTdLC(k9TA1&d^Ef}>9HBzIO)_1% zoM{v@u}@|cxJP!rfWEaVW9To-oo3a#LAy*QOoR@7E0=wC*K=ygc3o96k#j^hCf85q zs!FD2Ri00QcQNJJ{_D4&=NINrch7AGTWWaVVXl|cIqz31csJrztM(r4LK(1=4EIvG zvcAbnk}!aSOU{KE`>B>KT_dGtu7NR2FJO~{<}cUg_LqoDavPT^dWMhYG-~a!FWo($ z66dY&L;CdTA>v~1$Pi450N=Y9ZybE`rBp5L;P-iI0LRqVyhMVyHQ1F7Fv!E zG2cWuKe1IccH!FiaWeb|>8-YzNI`PS@9LgqXVD^RU>ZYYPV}6WCv<)ouLAfI3x5Sc zksaNjGR9!nA2fcU_I$6L4a_sTip|5pyd!Bj*o^zg-GQ@3T(KRbvLKHmxxxBOL_l`| zs}NtyzW+#eV8^6RU`IR(>uQGwZ_21^xaCxjNh_Tc66TSgj%S>}eua%TpE?&N4zN#<;Qp>Ahn@^avbJI6PbKQOKzsqX~tvm;;coK<`3?X4|Wd?12BzxpQ z`*v-0a=#BX%=>!RU!gh5zWa!dr%>=kDcPzu|9t=OQd2=Se8f}s8AQ;@n$96y@ICR$ zQ7&iLkCB5YOTdIrNL8l|`zXfPXqh8iSr<(DR+A5hEKvnyrth3371c7j-mY_-XkAQ$p@e}MSTSSSdc_wCx}QX?_^LGAe#sup`TT~!23 zLr_VBVk4mJA@S>$s#R(kP&v4`)m`2?0y5O>l^x%zpDRC=*acV0`kXy8rV1C+vF1l5 z(^mX5+R2U~79G?U;l*_Rmnt7gPM74jS-=w5h&$#H86dS%AZ?!J$# zd}RAEutMaEcUCN?wvuQK=ig@3KIscF6MSr)6q){9Cv7jt$%~Zf>Y5J5NGHu5TNEGW zRGjQ>aq!x(QDn^2zA?^ASp5r3<0-1%bU%HHv-@jRzX3ZBAk@yk^vK#y&@(VHmUOr1 zM?oMX;uireC|=@*S{rE7r|0JQcPValzes`n52!fX8m`AHa{_tVtgbugejm^_#!myzb<2zp_~<0mx&|JlX`Rd7zo*;u+$ruJmS^W5KUHe&cy8Kc?8h5aw|M z;*Tv|)@C?5ciNz+e_K#$GxPQR$SRVJ6OaqPnRu@VlkKo%XwoE&e?gGql#+*wn*H+jDkjmN=t#3q1fsJ)281C1! z>B;_$`~7Ef`9G-^K_jio1(8rKko97mH_X+9U}-5e==Z@|l2A9DRPSrHlqzMaj;v86 zDVj>YirNjk_SEKLd}|GBQ#+0HSMwb$cjJ6O(#)($Lw$6Qo)s0Xy12CWFKEIrniL20 zmik8GU&QZJ^=@2s$~($VSAK!fWW(EW`irAzo0phQDH1B-L93Lh=$=7p6kxjphqldU z1v@UQj+Y-rx%ETqV)WF5Oqz@=h{J*IV&xx4=)?H*H&w6@Rh#SpB%>EQzsuP;{-G?$ zeGavBlu3Ja&1AWi>5qtIJ!@nH;)A%Nj~rF&e3wpaQ{SsrU9u0BcE+rVuW2n>wrdRS zG**HB8XA+5+E3SMc7}*t@@A%G5ixl}2OA7*A$1Pq?{WSYs1?HlHEvvXo%XqVA_nLqod zlr<7+j^Ke)f_M~f|B*PD>M5u_L>NuPL0A|Vf1&&)@E5TD)ooxk+N3NLupc4CG00wr46ZXh_%c8>+yA3Ksd79#>9@Pb935;Zl$JnUlVg@*! zSzIo;-qybWrueX}y6=V!prYn6akUo?9EIbj64)w-! ztgbH4d~+&v>K9@2@YDp>I=)59U8x7DZGo4u!J4$fa&~4`LjkqwdAY0SdQ{OJVpKd zJuJj=7+5bH4*lYfk5M7cZf?)l5>Gg!2d$QwR=oz4jQp3$o5FzDYg09?M@eF&fYS$~ zcApg&KQln#yfiwGNG^AapgJuNZtB?J4gz_s;CYrLmq7e_sD-Dp>&|U(K@jS;J-oDF zsv-pnc&sINS}f7zIEhXTor_)R_*%qL_Se3lLsfM}%a1xpG?)c|-TyJo|ieNdwO|oj0Q4pgIMpEbf;%HZq||s+)BHI3Mm3j{Gk#K$%&$jUd|`XXV9E zQ7{wps9=H}9`HMKbm^!a-w1K}1v=}8@YQP7o^t+`(sWu%VB}^)94X{O01|b2o5=Na zN6n<$$pUbjDhDL7>)t(j@_18c>1qf+*~`R!^7EgO%WU~z;?f=$SoJ6BHH-z z0>YZ^-=f8gXxrnePo{Hy1OC7V43j*< zEBZ+9_U63}K-7c-MFeL()Bqdl~ZD#|t94W@sLh`5HF2jdf|~7gAm7W(-7~l!HIo z51=eRyhip12=COX>->YG(EW?~t>4qHjcS=*GYA5Y8IT-j_Bm^Ftk3$9jlj=yC^XIB z#{-e$z%TBUeMGoNN})d@`xuj;;sbiKKVW1{ny&A@*K`ko4+MCcn$!8-8qnD%2RIh- zD8Fbio!IA`aiXLkiOdt$m0}W3>+Aj#oH$nX zbTzWyo4cJ2zr%}BSK1B4wd7k&-(a6gw7juF1fLQx@Q$I5OlPn9n0FHgq zxi*2Fv@I}vfx}A9R+CsH&tq+pwLZ45HS)5h(z3r#a}BWO*Zb3_K=iDwsKJ~Xi72eO z%S;5(c6yWv2Lma<$kw~6%YJZyY3(*30zY^p#M-d>F&2}(2Ot(jD!D%}Ri=XlI9^Wa zZa8I!uM`}KNsxjOfU9`-Pk{YUo2Fo*1IUYO#6fa!Nz2Ss^XI8%2bbc@Lsjs4gfKj*5}G11V>&eu06du1&#SxjgF z3i8*5GodkF93}I(|D>q?j}YbFb(xC-_GEzioGk}5K0Ie-%3u(BQmz#fs zp?VMCoi(q&56$2XFa(XSS7m$MWF*c*kbYt`z%idAxXU_Kp zRL~`5m_VeECqZi(zSRkUnjCbG4=^Brf0fkkE%H+RUWK3y7&0lfw%dLbhWzjk{mkMr z@3>VD>Vg0Pt=HfGp75gN)3w*-kq~1({~_G9ld(6EPV!HMrB@^+yjZpCR z&|n*T!*n;N?ei1ZZ3)>AqiJ{4HF>q%In}=n#6Ur0^sH1f*X3R`2yohm=c$9U3+czc z(4#Mo*Sz`}^YacBMT&lv#;LWV$wFYFv5xwA@Qk3rJ~9SFBf;#lF8@mbTlNz8o0gC5 zlac|Ws_rvMTeew`=N$cv_qt7qnp8p~oLmDZ)|^Xyj z$%xG?EB$fPc-~#~h;hbaxN=xBVsLgU_*>_eNYew4)aZF5Um1%a|BSIL=k0@ylVf{; z$-B|fNn{h0^Mw0HwtI)n!L@bSMP!QIb)!?CE6ZI>-}@En=rx&dkEuE=XICM}1V6$P z>Tx0t*Poft4hSDKxYWKZjb<=I6L)u74G`<0PGb_abwO{8u@jsaFULDZye(jJ6a7@v zG~L2G{+p7dXtTZ<+~_^|a&iMkoiFb32w|9sgroW8ttOMmDqY83?q}Y9>JR->`fdS6 z=6MNQbuy$o^Tv4f%dWNYw3nS>xFqjoo=)7{<6P@zhg61fcTP51#uQXPg_af{U7z$( zezk?0z(V|qi#+PPk`=Swvu~t+e)GEGYFEnk8NC_WcYzPsfBeL1=I3fX9Xn9G8g&Ak zqJ|BmUCGDnLeiU5Za&hJ0`~w44&v=v7MsZRUFEl#n|qtzPm$uI8)6wO1=ED&b)(=lbdDannIX@A~5$voS z?fJ>tcXU2^ShL*T5iXO zuUyB?x8k~f3Pl>oT!@nJN~lzb$XGHfGi6B1R5B--$(X5gJ?Q)X>s#lX@2qpav(B;J zwcdBXd+*==4bO8A*L~gBJzf#%z7{ur6>Th)L0Hz!6Lg#R_uZ&Apu70n4 zx8bGiwx2GNg4EOPo#OlK#Vq*W+PmyJ{#Km*`5eo2F_VJ=>l~PjOULuR=ZA?;&P_ka z`M_M=M0MG=xT}i3RNhtcsL+LWKfb7S-5M$3*+;TRx8E*%5q|X|2ti@m-A5l*?bvTt z|Ne%c>kqYQQ&(4N?>_mjQBN*LzUC4#KeUI*RI9kVUa64o&!xHD7To7#!!&iT4~nuc z$!O|+rOOQH1ob+&qGT%d1eN=T#=vzETKiRGlKirTHjFx}zek;38+r}`^X z7_Sy4Q|#{5a}IT#*P@^McJ&PV)95;HIk}^&etw&(l;G+Rvdeq$bKmJ-XT=V0%p1Ss zq%>`A;ojTE>ATd{HBr7SbN>e3sTE09(@O&D*5>my@4fxc?T4I~bGdrYFuGgH#QsRV z=Px>7KdTY@y}edVw^EjF<+JSNA8>X zCXs>e=IUzYyCRngpLX}(>d{{RxH07V32S<>q^bd(k>`B(a($%})?dAx4+l>_#XS{clL`oJv|%yjau||V*)*A*ecCzE%fUfF zqJiV!68rv82o5{jfGeDH($l?QL5&-sXcO46{U>7cdOTPF@Nfmi+>^; z-?S>s>RifATEljEgBmXCoMds<`eSi6$E{XayN;woo5Xz68kRq+Z>$NQIKbrAnVrI% zKDhSI!I5=UlBoxsoVRMd3~uufgi$@QDwg}7a>>jAk%=D$dn0z5jvKWUX}o5T*m7`U zwCF=1_2duTbvLQ&TJ$sP3|F%zZeIDo>{}(b-&lV5N+}zCo!g9z1_dh_?W})Yk__Ts zzRP}Yck@?AcFha)@420FxvY=(dCm1F)2Z{h+HvGa#)=uI&$`vN=oY!l?%DP<<*TsZ z_6ZK%&BE>ls<)503lHjl(KtwRrQmT$fc<#Nsz-04OYiu79^mTz&aWuNC`EOx?tGJM z6Vvz3n~7oHdh|F3^w$L(W|GR>`$6w>NBfvWk=5>7GwoR|ZTeU1!u?}pFZmyNDe#KV zsrJL^%s;u4U2VrQqT>q6Hqm%1+uxnBUzSz&aOfxhp|el>>$@z^ome$oI?no=ll>>d zKBlkzu4MsNLIAra4~ow96uw>K^U`95wchmT?xd2;cz1>-cR(wesy#jXK2iK6B(lVExc*NVBR{H*(LC<%Fd$Xra zM!fd99G14@F$jBmlUnCh@#V6Q&MT?1^@$Pw%I$^uj$(p z%IN7HFBxvD{?EB*n)LXyy;$RJW|Z;xPns?lOpw0aA)UTytZ~GDf5iA< zfq+&|uk6A@QF#$O&y%OU;xhELJzeFbsbDQ$8r6Et$zA<@?fdhqB?0xkY1z5XHQNMr z6+|j_JW9^w8)qCJatlO<(qs1%Zlaxu@G?Fe$B?*{<42ZCVlASoSJy_#^`qUz4QlvB}fW4 zI%N9(Fno1oux+hq1iQMH$=R2Tj);2-vT9Gg>(QagR593?_ymob9)c{ls4UG_m0V)H z;-0RyM6XlXN~yf~9^>7%HoIKK{bh>Z*`&TXSE(J0bPEgpZ9my$JzRAl*yb~TYujVq zhTPVD2(5yf1a$;0I5x#Q2yjx8+opAAx}2J-y36C2syFS3c&a9W3$CIyhV2K5F z=;ey;80!8^ z$w$diu*jq11>6Q_)_0VNO=iY(VKY&BgcPEW+o>MVaXI?{<`u4w9Cl{#nRZ`Qow50u zC3ol4JvxGYF3#AB-yi%?(jccFvZsMj|0p%x*r|^_FT!h2)os+AvRK`GG0c z_6>zTk?upI@7y#VZms*u?%R87{odw0&jN`(zmqz4C5d=`+XvXHy&!o)B3Au|s%*Rg z!wv5TB`5mt@QiqM{8nD`u1qBV^}3lmQRAK~I8t|GeLQ;e;?Vdh9)wc<&Zqq1HU`<7 zV`HCcPXyBu!!A4u{ZAOK?8%0uabI(pZsagtMSj;D-av(a!~)`#@(CO zZp$z6p=6iwY{Mc};{CR!{&LWyM6Zxs)w|N-Ub6y6~cP^Ax(Z_U2{YW zt)Q;yNky|-W3^MkhTQ>aJ?@}kV~XmIC9GdmK6vSKUSUa?DU&BA847pscO$hHqB!~ za5LLHd{;xe$wf27M%71W&MfV8@jr*%@{T9|?26lu2Rrq<*7;QSu27zl!%wop&&f#q z(%I8?6t*4bWOMPK@Vd>dUO6m#a>ZFEva=08yp!J}{w(Fo?j!dlxTqgx{91YSkBXb~ z^VH3vNlQNd+S)iVcB()p)=k5}vj+S1d9PWFIA`@Aje-OHPp}sr22Q1pnK7ZulH0IA zQDmU&l?D1Cw$pUv^YYrHJ}sW8@&7;;%~dlt!}pW=B3~8qYjln4hA4Yv1(=>h>6hf< z#(rz36K)Cfop_t+wy7}7@QgiW&+d2JPNMsm$V!&ot6Th-FR}f_z*Xv`$T(Jg`wW?- zGMQ-&smrd^ZcyesVKpho@!ou8vEr%57g>-mQc$>Wf^&IMXQ*(^cL`;i@W-YI)0Htg z#|n>aITZeui?&LyG*YBydAr4tjSPA*mZr>-MSQ$G-@TomZThjdh8}lpc-T(*ok(Kd zAD$WJKYN^3z{41Qc$fHd;N07HHpf+^ubS%>2k%|o`pMV!qAP9YGT!c9-y`{NIhzyK zuQg2zjfuk&rElqKAGza%V5zNdbKwRV{h9zgwx1I>uwP?d^)&Y9%AC$P$f_ds-Qrj4 zhsoB)C&}yA=N7Xhp5OF~f4RJU{oUo0r#jykzhAPwaM`x?uU9gdS`Jqg2KxtT-l!}c zN&aomyW`E9A-K`ujxh-m2|izWx&7sF2DP&ej>d?`kh!ta9cq+HSUy9{uFh z9rnB?1IGDZ5>v{EQS6SpurxU_%j{ESA-(&c=KAgFRN2Sb4V&GY9$XP=(aX6Wmn9UV zx0boOK0E*PErlE5O9nW(TJJu&aIdXn(ANL*4=(I~BV5&;!NK*SyT54&OgVJ)Zr2_i zvMp?#{?ZNAAMba(+u9=7&0g4CQQ6V2*?Vi<+`9^qd_+p zPxt<4yP5HRmRTy(HL&XZO5}+V5hZRP69;n3$Kr7;?>^?>_GtDiGHn)L{j-sjJ+-;l zj>zs&S-qr7p5C|33G7}}$N3zrg?DTXIyzMPak{#)Fk#q`kee(x$kzO%Sx3J`edo)9 zDD_>&-xAtf8@K;@;KcL9{6}QnX2XxO7NesBAHR3a%O6@W%s-7dr4^c=A0AbrkF{L> zQl?i3b|GF)pNYy!QnI{N`xIH)H8;tzEe6)2bpxvn8RtjMT7lnIMjf;>2eprj13_u) z*-&V*EJK5B{_gWE9QolBnpuce|ES1Zk$Va)um z+FtB)MjV1hL|*US(Tz10l7vtQdQ(aWh~DdV?cx*_75(`sY9%N!*Gf~Jz@+5dW54aY ztuzs>fnJGJzw+5qZR5l1C`v23S3ONk&DPK~8@`xz`(cB*cHHg46%eZNj`97nr|m_2 zyn>>l=j3eAR?TEEc-HQ+$?NI*nssF>7@RMie%lgOaBChB+0Da&dwuspFcbuAaq|yr zAMLru5)cqTboM~gDGC86ZNr8Q{Nm!w=gyt8xpD=@gX+bL3oYNPz{-MN$>HP2OPb#} zUYr~Lg)DnVBUY z8k(4t-en`Yqx+bs+MwvdoRgE|0madkbe{X||IAJ#I3yYs-dq8x!5for@(r1soSi+P z-0IK)rnsO|$hLedgR^I2hWb*f=m0z)j8q*OA7{s{-y)~4rY7*N)7EI@MIh zpIf(YvtX$UyFifhIEDY`<=sAh=gzxMO*)2`TRM93Z2I+JR#)fqB~Q_$el}kH-+aT) zR^HWTR|_=DY`A>wd{Xk<+2biyC$OSN9gP?#LdVN~uq8tBcF$1WGKw3I%+T%ZIWKOCj@EGlXVg+SHT`Y(n??i27btEiJ9VF-=X)14;D{&-aI&W6(Uw zAvY(f35V0)wJh(|k2TR})^toy%Xfa78JX80l?+BZ7c?YIAofHQEazsYhu^LDqfj6% z#}K7y6xjA3k7K*;M~sC@!&hfG=^WValp`Yq!_xu?;kIS3%TQL0+D+|G)ue zUS5W$iC-npe&qLg^8DoUGydBDAeo)3GNUI=%+p?@>D| zA)LoEH}GLIPHe7kYHKJZdBQ6$CPw_J<@2mF+{A1u^k2t~!HO1;lH!17l)ReSKN+qd zU)qD?E$qU(Y11Y&tnhE#sQAr%2Uoy9{|E?P%w^-{g?Iu58{60kJWEKsRvJSb3>^8Q zkf9-)d-v|~uU~)Q4v|fRN*J!Y^0AI!AQA38e*E~NCA}hWQ7NCr|j=+uJD=vD_JngT7pzASD_V zc&s2TBgY@@x=vameE``Qdk>wMJ`PPBC3+vDZifaiP z5ni5e-03t{t67&D-hVIFh=!7p+IpifkaoK5jkRcN!->7?{{+)rep^-CH+-pnbaGu1 z6@%IeLB@e^#$EGj$`+yzH|RpREN$1-t`A}Cr3V!i+e&=7NrwzX(r&oB2i&{2VQ1vK z%1X(H+a;l#3)!d@q+^80{XTul-}g0j}o7y5B}vu&Iz`HpAwOCcHlfXHgvXngh<=Y^1hy!R&qQONLQZ}7z1J^JvwI&K+(`tVhttF za9bYQ}3|IrIc_47e~&EtlgV{KUd#IuvGFJsnQuV3%TnH_IDbLq{yxhDP5hMg-k zfvqw%yl0bE>};@`;&RDRrJ-=v7A||+GgU8vM~Gbih*w;f zZ39h|tWP`)TR4O?%_Zpf~eQki1~(8L+#c-;`+4au1LlY$jKt{I`-;! zm<1%#9y|RyvLN)fL?X1pD$>!5e96djCFL<^yV#tJMU3mR0CLk6&X@nVl=0Z1XA1<> z+kK^)-TeIgG7LqU97lH!sGVi0u3yPYGs*unawXENucOdf#b2e-h(|9-(~|?)gG_7J zTJ@e(<+k*d)}`><`5X1~(Ke2*o&TIj{*ME6v$Nog+()W!tLVj3hN=wTNnf1EPpUqP?mP9_+8D?mk9zr*w z!+75cinouCdv5ODw^Kb^FZb3}lCzT69Ss4>P5u;i4ysLlIwls5lZWFyfW|Y4?c34y z=L5O8oY7Cm(&S`QS!89P@Qc5u{2z9uUJN`1(3@nmv$MNsfZmB=2uqqk6P|qXpE~VP zga^oJu*wTI2A8X9Yde(AA)?+TE&XL`v6DKwffh-f%5-{t~ z%~Lw_dxVH)lSR8?>%w!idv&cK2+e|M(;$p>I?tu}2Q5EDcYN5-b*8ZH`E!kkr1&_S zEm}k_PC$U=OU~MGjkw{?V1xEjKG)Ta1^6g8q%hORVq@957eAGCAg+lAy6#~|>SX)I z{r77u+;t`F0~^xu*cE0s(13)&Z_{J@0`ePbWoeLG#-CmCwSp^%upx>#cX!rLZfY|F zpPUu39&H7s3!lI_Ur8SyynFX9G$7}1q^Oe;dF%3~hnsW}VV6SocCaDWtehQk;ics8 z0vZ{>%*o#^D;K*N2xk+)#7TIkZ4RSnDe@36-D%x?r@t}1k=)IUA#w8A>M(3N*}2J% z2I!&Bji=`t;knpcy;|b7WZAq5JXFxh?=RiQwD=8GS?$gNd$`$;Xu z84>c#BMefmkyY2L*E$JVMl=p4k9Ehg{oI=QQ=A+^)fx9m8QrVaZ^qa!G{Crd2Rjr(?ZNMn-35j_AwF*ol_h z}pZHbKU{&0Cny}z_>kxMD1-j@fl z<5mcgnwy&=$w`oPTKtb zWtI}+%PmC`R$}s?wEx&;>f8)EU^Q}S`{^4OCJWS7omru&p>h99ay}VWfzc9^=(S*i z%D;yP6*_z?Uvz!@FHC@66osG%i(f{D8=-Fl8i}zX?_3-Cam%mk`*%ZV<8#V7?0EI+ zRWdFJ;|Pqfv5YIAWlB`}i8LoN=Z3e=GI#m*-bJpVJ;wX`P&6IK!!z@%d-kT`dfQB0 zEEcw0K5=6Yq7ywljZq0$3b>B7JFP;{jVtEe!o7+nzrJ1*Pa{ss1Ml6BOe@IQP0+(+ENbvBhh;IIeu zvXM<20nI@0=x(@;vnT{MjHJ9Vv9ZiZc}aeJx&LczpEhKysUS`4V~~qHgR*>g*oSr# z?LyXDr5+@i9iLJ8SQosXm>=bj`h(jCsdvWNT)TE{-KI^n6qS=F-I2xOG2ikFzJI@< zy874c!;tO8APnd!7dflNuEws8jg1}S4Sevx0@($2ld;qB;|#C06SVFejoOdIofB`- zrE2@GJ8;um93RJ*VAd&aSpLXiN#srAz65hHo;Z)M*}>&I$yHcb7!Vxng~S|}NTv?J zYN35Dr+9FmWAUQf#76P3oS7UZ-uLbFfQ+!#D=L68_N~`xi%L&~?IycXYsN`YQE?mR zs-a)MBpL@hJE;>ibOyz>6VmeSKi8KSqm!qS*UrYq4TC8-S&==Ees*+b`WCkcON#8O))os)|ni8xS={{92c&=U88_tEWf*M&CLu^^or5ymO0j*?BBuZo>5s z2Ll5Gr=-Pdxv8J)$*dK8lZEdOCPxe*d2Q$!O*k4?YYYKhlKy=9{Q2U~kL%zEje2Tg z;p`|j<9%8=Gr!77azG}I+`H#d9xP@uH}l)hxf#9mG3r7WM4A!KIDt?wP{7wtyFoLO!3I?wn8=QaDFQb<=&D5&SI z=}HPPgGwQN--{4HIDB|HM(h+h0}KIrfMg|Uf~2G=_7q@N>>X(OXzTAk&mLLd8*u-= zV2Ov9SLCy2RBP6(F(zH&5a4F!!UV3Em>4&8i#d%4`YF|Ct#*{CQ%{Rz>JpqFEmf*h zl7`b-Pi`@8_yG%^`V1YP((jsA>{m>^9q0(j-Tk7)j=e^ip8``Xv-hmMm(O*rjNL#HEuWJcIvd+C zP=rVZkQTn-YkdLdc7;bOE%l7lo83)Z81t7$dcI41&^!=f9;wyaWTl)?yQw&!6mC~ zUTs`~ER`9`@Q^r=M*@J@=kVdfOniJWndDf29I-?Si;Jm&44@tJMoP+d3Ykr_A8Ott zhbD6S7O7ll`z(l3IqT(2>(dhd_ zwmU2MiC3Hw0ZuGD5BY3geB`;s9zG8|eR$`Ar6wL$Q499P-IFClKD@X@7v4GPdF=f{ z5MIp#ggWKt)?OjqzutTxj~waJLP$7pcLj%JdB2CxLRt{fVqBnDX`6kH=3jrdbG)GR z?-pRkFH5+q%4Eo_P=dh&lxzM|f?xS1Kr>(4VHn`pOuXLz;qE!VuC9|vno@=L#> zpS0_I6cQtci++DW%%P&qgWMX0F{1)S<&woff~y4Q82|d~YZ?x(g&@6_e1Fa2S<$1U zq+Aj`pS3E?zc^#@Ab;VCRcCRhO@2`>P zR&>usTBfXZb4SwrVpnyxf3BolaDO4>_9YkdH-h3KC+D&FFiOPRA_Oy=SROCF&L+1= zt!(kMBgtudU-}zaH?iT|SWbHS{OcNFagI92!11pq_w4o89bSK*cJ|9`56k|qsc49G zLmYMX>}G@s&4x2DyhQvP;TC#u`QW9uJL)n~2?JJ?laoUPeiK^Xh|emGZ~OQV^$@^; zF|`&X+CWTsMjV5H4xK*Dx%=`@C>b#-g-TE(Y~JY;o0wSgXQt}UQ*2*2Dg0<2poveT zQjzpc18VOU7i?3*se;riy&C9iH~#&r6Jw5w$gm4$=Iaoj89Mc_Ti)W3;lS>e2aEz+-`dl28;Gv@sZ+Pa5&g+uy}FagN!ShQlTk%L+*$b` zERg@~NFYf;OwG)U5JdtlE&zO7nP`p>=kSpu`MGmrVlxQvi(y)-Q_QQ_U4pf}^sWA` zwd$tBh*iE$2?(=saot8NX^d8R3MI07xvQ&d4s=xD--mgI;eCl=M)9K9*~rLfIRgWk zUO~0b4W^dh7{a<4Oq8c^e4U-1L@pjfM@UkPf4Ps2US73Ef{H@i=x|5r`n`Mk01%?L zoEAj^Rk-lj*P>ocDdvoV$`3pcUhmqyTVTtU6@Up#qmBi)4h%Fu!(HnQSBu5*pQ;Nz z99=77Hk#eiuBIxT_F?6Lv-Nk+JBX0|SF@+T8@9)XMup$EZNY)s5c2fbQCS$CknIFRK!;^ALT_{R6D%|EW zV?Q%H=vw;xiHk$MP(7S5?tGDmm{^jeL7g5(1gYv-Qsqf6008taAO2E!emsmn@V(0E z(`VCi|05(1C<#&w6~+jYi$ln~vV;T-4SZ=o^EK5H4;8LVti-Azc?l*r96omJ0CpWd zjxi~;K}R>15D57OKR?zC1~%B~=IV-i>55uU`kq@B-NR1Fcv&zH-Cfqada}*-zcP$r zdT18%&QxNUYl$HclnjTl7g{pEf#hOkL|p3nQ1@od`HCH`<;nw;Q1wqGnve;?@^is` zrltT@C)pIyW@rcUZ4cEX6@C4?D2*+nkil>pkKOkkCYU;K<7A6kA&lSQb^Tp#Kt_x~ ztARoRS%b(4A)GVB8r$VOwF6&Ufrtg-7)xW~_9MPvz&R9SGhH10sY>)6u+N6Z#;7T% z)h)p&1pD5EberLJMN+yP@B2aurO+&(qD%sA_Qn`6@;`Sujti4KOw+)b4KVeNM`2+) zBj>GlerO?UM&Q*Qy(aNP|6P#$4FSpHcF^<5t;LkG0@N_?VxtoAjqI!a`*U4pi$Z`( zhUet0g^fA@sFDn2c=l`qY_a$m)B`ZTj3^%P2OSkRD_f0PoVTAJln=DPC z27=EG8#ms1fA8T#Zdg4so5lE@|GJ+IFV{oMi%ei_m^yEH5r7$qKi)}PO=YMb)N|D0 zTi0D7S<&KuYn|Re;oYvA>0hppG*Pwutk^{8gg`cz+TnipxBo0ch{xdZ{H5kXVJGXG|_Yoew1w=lS}Om_XBkEm?Re{WbtZx zmPOzex~*8iWlchC0!}H_irk{Ixq?Ig+v&1hoV)*RiCXM4-=u{pm(K9U8r7P%)$_Yw z;Fvgm+J=4sGc6}CLRdr-^A`@Vi~RJ(Y7_In5dpk^{9jKl3{UHB5o#aF>h&fd(!im1{`5GW7&abQa6S${wiD3a?jheqGHc_^}c5*dt zX$b%F#f0u19qyAc8#0GGODTUJ3l;fDY}UrWqpf|LEj!{C7!QANq~fD-z?=Xbop+KX z_eY^0(ax)o$BXfV7N~7nN(RM?5n6n{hmY{za4jAeE_~II;cu{}1zL?({Jq5(Gak=F zSfgz5$)XIV$o^ULfspPZ7A!n}q{VmZ$h#)N`{ysW_x}zF0uUupG~?NQ+0Dy~7R9C; zNKoq?m673iq8JQQo8Y?atAE3e!qC4f{r`PTGMEvK)TZK*G%IGUoXfY1zGAcBpagpV z|BFGI6PGJP#0FjmwPu3e0-pjo0rEnCP=S>kjruetl^l97$C-(GV^G6b!E&nUIGx!U zvg%B^&pSW4CYJJ$PV;{gsu2;?p#a~3iA1_hLs^coZt6nC5X}P41YbOaftLFst3x*G zpsZI2SPvr)26jdbv}tME1;^5XHV|_3GG@o8W@~r>F_%N!oqZ)`Kz+ zY-{T3A~G^g?{Pscpc1PNm%?E}&KglHNE+dqN%{mcIR1Fgt&k8-%9W8S#ID#W3~P6} z0cmWxNN522tgPZE-{>bIenGF~}xe!%v-<_2ZYa$FJSz#^_@o>=31 z@Y%Cx7;u);Y=T*|mF-LTrKPp*pnnelPrB9}{iH+M+7CEcd3nhcEkvW<;rKA<&fC64IOZ0~Uv( z9jQZH?*2sWPD6h~T}TlzK!v`~^XHpZ(-refH*OVmn6Ivw%4TOd-u<5-B(}7QCY_l00~@p5!2|y`}Y#&-~4x&Cg2qL)r`e@&Sx+u z4+d$ZoTDN8S@q=n%f;QT8c1G|sB014&~gVb(lfqRbn(^^$ISH?XMTXVO7ixiAD(}4 zRM)HguUoSuhx(i6M8osaXPw&?@hf@>J&`ZF9rwRRvrrx9CLs#!lZ>e%`AAr>h^vLg5%_h)gZv?;#d1l_cf+70(7>YZ1WmM`LhE^ z$4>j_^Y<)9)*pqM*JFyOg+Mih_bGlLX-T0VvqfTQKU~a#Vd3pE?U4}?BpU-Ve0#c} zpa9eZG7WwC4GQurG7kQ9hRr$(QvH0;1<9~yl=BEOjepT1u_7jy!Vfb-3i&QBaxj>< zaST9nA|axxc218W+q{Zb>A{W_wY9a-Ada6HBeJwWPf$w;Rm3dM`U6pF`<{Q^7pty4 zS3*`Ev!vTZD9p?MWy~Ve@|D>RE>!*L?Cd54a~4Q!ri^`pZD1b$uks5)JpetH0`SWd ziMV#cLEHkM5?AZ%M?m8sQ@KF`%C=O(^!HJRH(w5tU`S!S@B&NXxYGZq;1Xk9^aB~) z(2s}K#+XlQx8YJQJH~_}`M-b%m*%v9kk%C7Oi`X;1-*!F<;u!&4tDl}#>VVs6R_wO zLYjXmo|MGvWwRqr1Dr-i1oAo!?IQ>SDjV&|2Le&@oR{OnnGbLdOzQj#0g$F+KK+Vu zzIe8GW%4~p3Gd&(pUi)U5Hx~@r>K!&O6$o%aRRmjT!RZOaz;@T1ru5osns8$`ANzr z3=A|XQbyYVAyvsvJepjKVj`HP@+h)UTA`Z@a^`Y+dTI)|Dc+S5N~RK__P&B($CZ3O zvDcRrWKo**eR~F>Sf;M1i}j297thXTR;e34&qnc#eNN%K!Sm&nnGb((IRV>NnpZt$ z1G={f047TBgra*w?)S4~`(b18ITS5OeR2rThYmzD*85@xqCnW_o}YNaZqn>BeSTkp z#!3U1-%&O_HCv2Oi`{Q%_*6wpYfH%;ZmHwAd;b0?_^g$-Rlopw79e)Tr6<+YsBS3; z`jFMl46l_0G1|JnwRSK3_-6GAE?x4seprvW=J~cIM5Oa{rtQW>KAyinzs3Vzho9>}AU6c{&X{1j!&ALU z9ltuuaWVufDDmSHlOybLF@w8=kGROlYj*wPi~!)koh_o!CQw=hxZ~f0gC!VoY+M1p zIglqmKstE~wG+Z9`3S^#7&9bxUoPzpm9)J7Wo&2B*&XdYwQ)Z`hA)F$fTXofVE32< zrl_tL6Y~?6Rv5Kv2^%ZZ(2b|dg}CVHLT=~9T>sWJamb*mYMNR(uzbp;@=?IZ zHD1OiRo6mRR(&g^t;@P(^hSoGE_=iO)DnH7b}*lF8t8TCedXJl&X z0W!fBllUv8Y9Muhd|Zg{-@kt!keK4tt7$A8%sG%Nx4Cr5Jt}G=j6SLFzOlr@q(?D4 zEiDcCg8lE#V94W%v%ySFhoHqC5*qp*Fxy6;r2pXGrx5RB>%Sha z`N@o^6y96s+0&=;wwEq-f;7p2ge^89;gl`*S`^4%|2%pm3PD&k5X{u%YGw75{fKKtg zqT(L15ow!Nw?{H|$KT&Vo+Kk9^W}|W`uEPxBT)86UAjC$C;i?dJht+u``kBxl8j=+ zGjOpa&VPMfcbY|(lv|6ct5pd{hC@`>AMAQmoP9~x!h54PjbuD{`KPF3X0SI)Wk+M8pjKLL}|OhdcBfP4(cvZ-k_(wDsAuOduy| zW!jo;{cxLC)66W2;$P^+=;M9()Ttn(8H!i?8p6LLF{Gm$IdOs`AUAgnCpY)8Yu7UW zNx|sam#L{ixpPx-W*qW=VxprD0vuhBVyc8i&E}{!;{=)esQZ+AGp`@uuJ67ap%G^W z4q@4896IFT!*bXdMTPHh_ezLNuP;`qG z*W$grw@G!zy0BLF$}C7W#m&w7gIAm&z5glQ+TeiLEd}fqwZNX99{<2V_vGYlW)%$$ zoLD7?Pn@tW4z2FUy4XQOA#)8V(9Uwbn7B-lXoD_esK8QdtVn@p9!MiUqdmbQ_fBx8k z?#!7pM~~av?}A#l4U93nwsKeT-XqG&QzKP-t3Q5xI&px5La0)xOC;>r>YxjVgrL80 zc{B`bms3zY@(K-IgO#tJ7#Fv-th_wvQS@8(fs&Yh6uk1FA?zO%RJ*xE+fEoZ9F}5P zvqP^)4(1!bD=RB_X#IA@_U+rzr?X|u;>F{My2j#SMX?JO7IZ)`>au;cUYV{y7e;lG z!CnmYeHtFVgbV^W7`cQ}m+fwmm~}sx?B?uh$$=6KbEcPYo#N&ejX1smY;RqUw zS)TA*)e4Dzc`GYn;PQq>M%71awssW|uu zeNEXMpzVOYre0EOA&C{Da_Ur6u&Z@Kt;Ll#>;&YHC)a#1wypwjDDn5Y+ej{+^tC`ug?iyg&85`;s~k^9Kb5IShln(26Qcyd8In zP1}CL&>?UPN_J-|Lau`%Z33#(;&U#mAFnIE>GJ?3gPRERupqXY;2DzGhJoP%mTDvm zGbtYth#%fO@(|t9Wy`9gj&Z!v=3rwBfBjlL_6nwGU>f_F{>MPvK}*ZVpR{rovS^$E zk>}8b3yHQs8h~1D=7UW-gr^?4cUVPN_YS&CfK|MC15W5zkDi{MFZfPx95hdz0s-pK zdu&{EXB46=rESPIntY)-XN8H$EMFsTDu6Ibax>4VOSO_{2m`HepR@Cue*#fvL}K*o zV!{27U$d{OG=iPV|KrDxUuZ}whi~Xit=DG_IvSPkxF*#ZnGrL#hxFy2{lmYuhFTBn_UJo8+GD| z+&94-dh9J0RGZCoh>gD;7#IlDPwd{b=N07v1-oI5=;EtZHjVtdryxL?l%h;mks}_k*92ISG7nx>8wQ9>~1@ zpf_$lMz|bCf$*5f%g@_cGP_RPo2Qd7tERLKF0eWN^QdG#?FzV_yqJtj;8y)>WW@Uw z&Vh-8lqwR!!XOO10eHtoDk3-VNslenvzXr^mG%E}w_|ez5ih?lttnZdJ z-xNipQJFMucdg2un#75ctNA5*d)^0=*vvGgWCDBjYLe5+kHyJEB z2d`VVR=Ab;tzMdkpn4lBYNvH{3O|2lMTA}BV~}G{t~NO>?PgdQPxSGy+YlJvJd6qF z>rk(2aT=jV!z2T?0H~&bP=%zylpsbM9J{qVJmLt~(3SMl`SGVuYJ>yNn5J&l>1-nP+8mu?k>sSk&!Hg$3#WB@cJ@Z6?JtFtif)* z$e5VrxWqzO2=dt6X&H^-{g2KdeFA2B02B)b-aX61j(Z&m6hxZ7gkoV~u?>NPx`u`^ zsJw)UudDlr<%E)w0!9qrDLk#UKBLk5IIn)l`RSAkH#1 zHPsfiU!h?THnoxsuiFl^wXH)A^*Or)c_In<(EApx}RF zL!lrY@b#y?l7eBODRa`NsfS0#MX=8$u=}J zY?h{cOff%!mAthJ=^9uS>K}YS)WPaTd>Vf+`f)gOl;oRB9VkvQP&EK8;UU|Uk$qM|yN zCH=9MO0z$WZ<3BMu!g^F{?XnZ;pAj}@>-H(y|t<7<(8L@gDcP|&*XC?YM59U-)9OfMEdEAH&+w@%U^*K18qP7-(SAdTRjAo(v| zym*jv6Yd;Q2A`Rh-v)kuius2}*Aag>ObjI0eQQ!jeP;J2V%|nili&fk02SJ*@c={! z^APk)3MTmMf;~mGi7aI_jG>cR00W>~C( zN_jxP$kyg_nOuVIZdwW%kVkx-0_%13z0$5Yt4uwry"; - - var html = "

"; - - //image - if(!(post.picture_url === "n/a")) - { - html +="\"\""; - } - - html += "
"; - //title - html += "

" + post.name + "

"; - //date - html += "
" + - post.published.toDateString() + "
"; - html +="
"; - - html += "
"; - - try - { - sql.getCategory(post.category_id).then(function(category) - { - var pathName = "blogContent/posts/" + category[0].url + "/" - + post.url + ".md"; - var markDown = utils.getFileContents(pathName).toString(); - - markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" - + category[0].url + "/media/"); - var htmlPost = md.render(markDown).split("

"); - - for(var i = 0; i < 3; i++) - { - html+= "

" + htmlPost[i]; - } - - html = html.split("").join(""); - - html += "

\n" + - "

\n" + - "
\n"; - - html += "


"; - - resolve(html) - }).catch(function(error) - { - reject(error); - }); - } - catch(ex) - { - reject(ex); - } - }); + return postGenerator.generateBlogPost(post, 3); }, /** @@ -117,56 +24,6 @@ module.exports= */ renderPost: function(post) { - return new Promise(function (resolve, reject) - { - var htmlHead = "
"; - //image - if(!(post.picture_url === "n/a")) - { - htmlHead +="\"\""; - } - - htmlHead += "
"; - //title - htmlHead += "

" + post.name + "

"; - //date - htmlHead += "
" + - post.published.toDateString() + "
"; - htmlHead +="
"; - - var html = "
"; - try - { - sql.getCategory(post.category_id).then(function(category) - { - const pathName = "blogContent/posts/" + category[0].url + "/" - + post.url + ".md"; - var markDown = utils.getFileContents(pathName).toString(); - markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" - + category[0].url + "/media/"); - //html += md.render(markDown); - - pandoc.convertToHTML(markDown).then(function(result) - { - html +=result; - - html = html.split("").join(""); - html += "


"; - - resolve(htmlHead + html); - }).catch(function(error) - { - reject(error); - }) - - }); - } - catch(ex) - { - reject(ex); - } - }); + return postGenerator.generateBlogPost(post, -1); } }; \ No newline at end of file diff --git a/utils/markdownToHTML.js b/utils/markdownToHTML.js index d9e134a..60ee0a0 100644 --- a/utils/markdownToHTML.js +++ b/utils/markdownToHTML.js @@ -1,25 +1,129 @@ const pandoc = require('node-pandoc'); -// const args = '-t html5'; -const args = '-S --base-header-level=1 --toc --toc-depth=6 -N --normalize -s --mathjax -t html5'; +const utils = require('../utils/utils.js'); + +const sql = require('../utils/sql'); + +const argsFull = '-S --base-header-level=1 --toc --toc-depth=3 -N --normalize -s --mathjax -t html5'; +const argsPreview = '-S --normalize -s --mathjax -t html5'; + -console.log(""); module.exports= { - convertToHTML: function(markdownContents) + + generateBlogPost: function(post, blocks) + { + return new Promise(function(resolve, reject) + { + Promise.all([module.exports.generateBlogPostHeader(post), + module.exports.generateBlogPostBody(post, blocks), + module.exports.generateBlogPostFooter()]).then(function(content) + { + resolve(content.join('')); + }) + }); + }, + + generateBlogPostHeader: function(post) + { + + var htmlHead = "
"; + //image + if(!(post.picture_url === "n/a")) + { + htmlHead +="\"\""; + } + + htmlHead += "
"; + //title + htmlHead += "

" + post.name + "

"; + //date + htmlHead += "
" + + post.published.toDateString() + "
"; + htmlHead +="
" + "
"; + + return htmlHead; + }, + + + generateBlogPostBody: function(post, blocks) + { + return new Promise(function(resolve, reject) + { + sql.getCategory(post.category_id).then(function(category) + { + const pathName = "blogContent/posts/" + category[0].url + "/" + + post.url + ".md"; + var markDown = utils.getFileContents(pathName).toString(); + markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" + + category[0].url + "/media/"); + + module.exports.convertToHTML(markDown, 1).then(function(result) + { + + result = result.split("
").join("
"); + + if(blocks == -1) + resolve(result); + + var htmlBlocks = result.split("

"); + var html = ""; + for(var i = 0; i < blocks; i++) + { + html += "

" + htmlBlocks[i]; + } + + html += "

\n" + + "

\n" + + "
\n"; + + resolve(html); + + }).catch(function(error) + { + reject(error); + }) + + }); + }) + }, + + generateBlogPostFooter: function() + { + return "


"; + }, + + convertToHTML: function(markdownContents, type) { return new Promise(function(resolve, reject) { // Set your callback function - callback = function (err, result) + callback = function (err, html) { if (err) { reject(err); } - resolve(result); + + + html = html.split("").join(""); + + + resolve(html); }; - pandoc(markdownContents, args, callback); + if(type == -1) + { + pandoc(markdownContents, argsFull, callback); + } + else + { + pandoc(markdownContents, argsPreview, callback); + } }); }, } From ac8aca4f9da09d00b91ca8d2d2336ad9ac252fd7 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sun, 7 Oct 2018 11:46:17 -0400 Subject: [PATCH 7/8] Documented the new code and fixed a bug with the table of contents. --- posts/singlePost.js | 3 +- .../{markdownToHTML.js => renderBlogPost.js} | 44 +++++++++++++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) rename utils/{markdownToHTML.js => renderBlogPost.js} (74%) diff --git a/posts/singlePost.js b/posts/singlePost.js index 452fdc5..97ef5c7 100644 --- a/posts/singlePost.js +++ b/posts/singlePost.js @@ -1,5 +1,4 @@ -const postGenerator = require('../utils/markdownToHTML.js'); - +const postGenerator = require('../utils/renderBlogPost.js'); module.exports= diff --git a/utils/markdownToHTML.js b/utils/renderBlogPost.js similarity index 74% rename from utils/markdownToHTML.js rename to utils/renderBlogPost.js index 60ee0a0..45d3898 100644 --- a/utils/markdownToHTML.js +++ b/utils/renderBlogPost.js @@ -11,6 +11,15 @@ const argsPreview = '-S --normalize -s --mathjax -t html5'; module.exports= { + /** + * Renders the entire blog post based on the sql data pulled + * from the database. + * + * @param post sql data which has title, date, and header img location + * @param blocks number of blocks to display for a preview or -1 for + * all the blocks + * @returns {Promise} async call which renders the entire blog post. + */ generateBlogPost: function(post, blocks) { return new Promise(function(resolve, reject) @@ -20,13 +29,22 @@ module.exports= module.exports.generateBlogPostFooter()]).then(function(content) { resolve(content.join('')); + }).catch(function(error) + { + reject(error); }) }); }, + /** + * Renders the header of the blog post which contains the header image, and date + * published. + * + * @param post sql data + * @returns {string} + */ generateBlogPostHeader: function(post) { - var htmlHead = "
"; //image if(!(post.picture_url === "n/a")) @@ -47,6 +65,14 @@ module.exports= }, + /** + * Method which renders the body of the blog post. This is responsible for getting + * the contents of the markdown/latex file and rendering it into beautiful html. + * + * @param post + * @param blocks + * @returns {Promise} + */ generateBlogPostBody: function(post, blocks) { return new Promise(function(resolve, reject) @@ -59,7 +85,7 @@ module.exports= markDown = markDown.split("(media/").join("(" + "../blogContent/posts/" + category[0].url + "/media/"); - module.exports.convertToHTML(markDown, 1).then(function(result) + module.exports.convertToHTML(markDown, blocks).then(function(result) { result = result.split("
").join("
"); @@ -67,7 +93,7 @@ module.exports= if(blocks == -1) resolve(result); - var htmlBlocks = result.split("

"); + const htmlBlocks = result.split("

"); var html = ""; for(var i = 0; i < blocks; i++) { @@ -92,11 +118,23 @@ module.exports= }) }, + + /** Method to return the footer of the html blog post. + * + * @returns {string} + */ generateBlogPostFooter: function() { return "



"; }, + /** + * Converts markdown into html. + * + * @param markdownContents + * @param type + * @returns {Promise} + */ convertToHTML: function(markdownContents, type) { return new Promise(function(resolve, reject) From a021a08fbc02ff97b1485072e02163b1958dc7c4 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sun, 7 Oct 2018 12:26:58 -0400 Subject: [PATCH 8/8] Final updates and revisions to the fibonacci post. --- .../posts/programming/everything-fibonacci.md | 80 ++++++++++--------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/blogContent/posts/programming/everything-fibonacci.md b/blogContent/posts/programming/everything-fibonacci.md index a34f14d..2ff26eb 100644 --- a/blogContent/posts/programming/everything-fibonacci.md +++ b/blogContent/posts/programming/everything-fibonacci.md @@ -3,11 +3,11 @@ know what the fibonacci sequence is and how to calculate it. For those who don't know: [Fibonacci](https://en.wikipedia.org/wiki/Fibonacci) is a sequence of numbers starting with 0,1 whose next number is the sum of the two previous numbers. After having multiple of my CS classes -gave lectures and multiple homework on the Fibonacci sequence; I decided -that it would be a great idea to write a blog post going over +give lectures and homeworks on the Fibonacci sequence; I decided + to write a blog post going over the 4 main ways of calculating the nth term of the Fibonacci sequence. -In addition to providing python code for calculating the nth perm of the sequence, a proof for their validity -and analysis of their time complexities both mathematically and empirically will +In addition to providing the python code for calculating the nth perm of the sequence, a proof for their validity +and an analysis of their time complexities both mathematically and empirically will be examined. # Slow Recursive Definition @@ -25,28 +25,26 @@ def fib(n): ##Time Complexity Observing that each call has two recursive calls we can place an upper bound on this -function as $O(2^n)$. However, if we solve this recurrence we can compute the exact value -and place a tight bound for time complexity. +function as $O(2^n)$. However, if we solve this recurrence we can place a tight bound for time complexity. We can write a recurrence for the number of times fib is called: $$ - F(0) = 0\\ F(1) = 1\\ F(n) = F(n-1) + F(n-2)\\ $$ -Next we replace each instance of F(n) with $a^n$ since we want to solve for the roots since that -will allow us to put a tight asymptotic limit on the growth. +Next, we replace F(n) with $a^n$ since we want to find rate of exponential growth. $$ a^n = a^{n-1} + a^{n-2}\\ \frac{a^n}{a^{n-2}} = \frac{a^{n-1} + a^{n-2}}{a^{n-2}}\\ a^2 = a + 1\\ - a = \frac{1 + sqrt(5)}{2}\\ + a = \frac{1 \pm sqrt(5)}{2}\\ $$ -From this calculation we can conclude that F(n) $\in \Theta 1.681^n$ +From this calculation we can conclude that F(n) $\in \Theta 1.681^n$. We don't have to worry about +the negative root since it would not be asymptotically relevant by the definition of $\Theta$. @@ -57,14 +55,13 @@ Here is a graph of the actual performance that I observed from this recursive de ![Recursive Definition](media/fibonacci/RecursiveDefinition.png) - - # Accumulation Solution The problem with the previous recursive solution is that you had to recalculate certain terms of fibonacci a ton of times. A summation variable would help us avoid this problem. -You could write this using a simple loop, however, it is still possible to do this with -recursion. +You could write this solution using a simple loop or dynamic programming +, however, I chose to use recursion to demonstrate that it's recursion which made the first +problem slow. ```Python @@ -80,9 +77,11 @@ def fibIterative(n): return fibHelper(n, 0, 1) ``` -In this code example fibHelper is a method which accumulates the previous two terms. +In this code example, fibHelper is a method which accumulates the previous two terms. The fibIterative is a wrapper method which sets the two initial terms equal to 0 and 1 -representing the fibonacci sequence. +representing the fibonacci sequence. At first it may not be obvious that fibIterative(n) +is equivalent to fib(n). To demonstrate that these two are in fact equivalent, I broke this +into two inductive proofs. ## Proof for Fib Helper **Lemma:** For any n $\epsilon$ N if n $>$ 1 then @@ -90,7 +89,7 @@ representing the fibonacci sequence. **Proof via Induction** -Base Case: n = 2: +**Base Case**: n = 2: $$ LHS = fibHelper(2, a, b)\\ = fibHelper(1, b, a + b) = a + b\\ @@ -98,7 +97,7 @@ $$ = a + b\\ $$ -Inductive Step: +**Inductive Step:** Assume proposition is true for all n and show n+1 follows. @@ -118,19 +117,19 @@ $\Box$ **Proof via Strong Induction** -Base Case: n = 0: +**Base Case**: n = 0: $$ fibIterative(0, 0, 0) = 0\\ = fib(0) $$ -Base Case: n = 1: +**Base Case**: n = 1: $$ fibIterative(1, 0, 0) = 1\\ = fib(1) $$ -Inductive Step: +**Inductive Step:** Assume proposition is true for all n and show n+1 follows. @@ -145,9 +144,9 @@ $\Box$ ## Time Complexity -Suppose that we wish to solve for time complexity in terms of the number of additions needed to be -computed. By observing the algorithm for fibHelper we can see that we perform one addition every time -which we have a recursive call. We can now form a recurrence for time complexity and solve for it. +Suppose that we wish to solve for the time complexity in terms of the number of additions needed to be +computed. Based on fibHelper we can see that it performs one addition every recursive call. +We can now form a recurrence for time complexity. $$ T(0) = 0\\ @@ -169,8 +168,8 @@ Fibonacci. # Matrix Solution -We can actually get better than linear time for performance while calculating -the Fibonacci sequence recursively using this fact: +We can actually get better than linear for performance for Fibonacci while still using +recursion. However, to do so we need to know this fact: $$ \begin{bmatrix} @@ -183,10 +182,11 @@ F_n & F{n-1} \end{bmatrix}^n $$ -Without any other tricks, raising a matrix to a power n times would not get +Without any tricks, raising a matrix to a power n times would not get us better than linear performance. However, if we use the [Exponentiation by Squaring](https://en.wikipedia.org/wiki/Exponentiation_by_squaring) method, we can expect to see logarithmic time. Since two spots in the matrix are always equal, -I represented the matrix as an array with only three elements. +I represented the matrix as an array with only three elements to reduce the space and +computations required. ```Python @@ -216,9 +216,9 @@ def fibPower(n): ## Time Complexity -For this algorythem lets solve for the time complexity as the number of additions and multiplications. +For this algorithm, lets solve for the time complexity as the number of additions and multiplications required. -Since we are always multiplying two 2x2 matrices, that is constant time. +Since we are always multiplying two 2x2 matrices, that operation is constant time. $$ T_{multiply} = 9 @@ -246,11 +246,14 @@ $$ T_{fibPower}(n) = T_{power}(n)\\ $$ +Now we can state that $fibPower(n) \in \Theta(log(n))$. ## Inductive Proof for Matrix Method +I would like to now prove that this matrix identity is valid since it is not at first obvious. + **Lemma:** For any n $\epsilon$ N if n $>$ 0 then $$ \begin{bmatrix} @@ -314,20 +317,20 @@ $\Box$ ![FibPower Performance](media/fibonacci/FibPower.png) -As expected by our mathmatical calcuations, the algorthem appears to be running in +As expected by our mathematical calculations, the algorithm appears to be running in logarithmic time. ## Measured Performance With Large Numbers ![FibPower Performance](media/fibonacci/FibPowerBigPicture.png) -When calculating the fibonacci term for extremely large numbers dispite having a polynomial -time complexity, the space required to compute Fibonacci grows exponentially. Since our +When calculating the fibonacci term for extremely large numbers despite having a polynomial +time complexity, the space required to compute each Fibonacci term grows exponentially. Since our performance is only pseudo-polynomial we see a degrade in our performance when calculating large terms of the fibonacci sequence. The one amazing thing to point out here is that despite calculating the 10,000 term of Fibonacci, -this algorithm is nearly 400 times faster than the recursive algorithm when it was calculating +this algorithm is nearly 400 times faster than the recursive algorithm when calculating the 30th term of Fibonacci. @@ -346,10 +349,10 @@ def fibClosedFormula(n): return (p-v)/math.sqrt(5) ``` -## Derivation of Formula +## Derivation of Binet's Formula -Similar to when we were calculating for the time complexity, we want to start by finding the -two roots of the equation. +Similar to when we were calculating the time complexity of the basic recursive definition +, we want to start by finding the two roots of the equation in terms of exponents. $$ a^n = a^{n-1} + a^{n-2}\\ @@ -385,7 +388,6 @@ $$ ## Time Complexity - Since we managed to find the closed form of the fibonacci sequence we can expect to see constant performance. ## Measured Performance