From 66d0c02f59be0ac8fd2f7e4043f139fd53873ea9 Mon Sep 17 00:00:00 2001 From: jrtechs Date: Sat, 6 Oct 2018 15:47:04 -0400 Subject: [PATCH 1/3] 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 2/3] 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 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"; - - 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 3/3] 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)