summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.DS_Storebin10244 -> 8196 bytes
-rw-r--r--.vscode/settings.json3
-rw-r--r--CSS/.DS_Storebin6148 -> 0 bytes
-rw-r--r--Schoolproject/.DS_Storebin6148 -> 0 bytes
-rwxr-xr-xSchoolproject/CSS/main.css109
-rwxr-xr-xSchoolproject/Declan'sPage.html65
-rwxr-xr-xSchoolproject/JS/sidenav.js11
-rwxr-xr-xSchoolproject/Jacob'sPage.html51
-rwxr-xr-xSchoolproject/Jason'sPage.html38
-rwxr-xr-xSchoolproject/Nick'sPage.html56
-rwxr-xr-xSchoolproject/images/constitution.jpgbin1240227 -> 0 bytes
-rwxr-xr-xSchoolproject/images/pixeltrump.gifbin498329 -> 0 bytes
-rwxr-xr-xSchoolproject/images/presidents.pngbin1105201 -> 0 bytes
-rwxr-xr-xSchoolproject/index.html39
-rw-r--r--articles/.DS_Storebin6148 -> 0 bytes
-rwxr-xr-xarticles/RpiRockyLinuxServer/index.html192
-rw-r--r--articles/articleMaker.tarbin4096 -> 0 bytes
-rw-r--r--articles/index.html26
-rw-r--r--articles/rss.xml204
-rwxr-xr-xdb.py22
-rw-r--r--fonts/IBMPlexMono-Regular.ttfbin112140 -> 0 bytes
-rwxr-xr-xindex.html36
-rwxr-xr-xloadarticle.py34
-rwxr-xr-xmain.py73
-rwxr-xr-xrobots.txt8
-rwxr-xr-xstatic/404.md4
-rwxr-xr-xstatic/README.md (renamed from README.md)0
-rwxr-xr-xstatic/articles/rpilinuxserver/__pycache__/dbbak.cpython-310.pycbin0 -> 471 bytes
-rwxr-xr-xstatic/articles/rpilinuxserver/dbbak.py8
-rwxr-xr-x[-rw-r--r--]static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.15.13PM.png (renamed from articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.15.13 PM.png)bin17415 -> 17415 bytes
-rwxr-xr-x[-rw-r--r--]static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.18.39PM.png (renamed from articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.18.39 PM.png)bin21318 -> 21318 bytes
-rwxr-xr-x[-rw-r--r--]static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.23.20PM.png (renamed from articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.23.20 PM.png)bin70360 -> 70360 bytes
-rwxr-xr-x[-rw-r--r--]static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.56.21PM.png (renamed from articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.56.21 PM.png)bin79823 -> 79823 bytes
-rwxr-xr-x[-rw-r--r--]static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.58.29PM.png (renamed from articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.58.29 PM.png)bin66928 -> 66928 bytes
-rwxr-xr-x[-rw-r--r--]static/articles/rpilinuxserver/rpilinuxserver.md (renamed from articles/RpiRockyLinuxServer/rpi4rockylinuxwebserver.md)212
-rwxr-xr-xstatic/business_card13
-rwxr-xr-x[-rw-r--r--]static/css/main.css (renamed from CSS/main.css)14
-rwxr-xr-x[-rw-r--r--]static/favicon.ico (renamed from favicon.ico)bin15406 -> 15406 bytes
-rwxr-xr-xstatic/home.md23
-rwxr-xr-xstatic/images/LOGO_21x127.png (renamed from images/LOGO_21x127.png)bin1218 -> 1218 bytes
-rwxr-xr-xstatic/images/LOGO_21x127.svg (renamed from images/LOGO_21x127.svg)0
-rwxr-xr-xstatic/images/LOGO_Transparent.png (renamed from images/LOGO_Transparent.png)bin800 -> 800 bytes
-rwxr-xr-xstatic/images/LOGO_Transparent.svg (renamed from images/LOGO_Transparent.svg)0
-rwxr-xr-xstatic/images/SideFlareGreen.svg (renamed from images/SideFlareGreen.svg)0
-rwxr-xr-xstatic/images/SideFlarePurple.svg (renamed from images/SideFlarePurple.svg)0
-rwxr-xr-x[-rw-r--r--]static/images/favicon.xcf (renamed from images/favicon.xcf)bin102074 -> 102074 bytes
-rwxr-xr-xstatic/images/menu.svg (renamed from images/menu.svg)0
-rwxr-xr-xstatic/images/wave.svg (renamed from images/wave.svg)0
-rwxr-xr-xstatic/robots.txt6
-rwxr-xr-xstatic/rss.xml23
-rwxr-xr-xstatic/testpage.html75
-rwxr-xr-xtemplate.html19
-rwxr-xr-xtemplates/404.html (renamed from 404.html)0
-rwxr-xr-xtemplates/articletemplate.html23
-rwxr-xr-xtemplates/template.html25
-rwxr-xr-xtestPage.html99
56 files changed, 465 insertions, 1046 deletions
diff --git a/.DS_Store b/.DS_Store
index 006e5e3..1c5c448 100644
--- a/.DS_Store
+++ b/.DS_Store
Binary files differ
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 4c08140..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "livePreview.defaultPreviewPath": "/articles/index.html"
-} \ No newline at end of file
diff --git a/CSS/.DS_Store b/CSS/.DS_Store
deleted file mode 100644
index 0bb201a..0000000
--- a/CSS/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/Schoolproject/.DS_Store b/Schoolproject/.DS_Store
deleted file mode 100644
index c78d5e7..0000000
--- a/Schoolproject/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/Schoolproject/CSS/main.css b/Schoolproject/CSS/main.css
deleted file mode 100755
index df97597..0000000
--- a/Schoolproject/CSS/main.css
+++ /dev/null
@@ -1,109 +0,0 @@
-body{
- background-image: url("../images/constitution.jpg");
- background-color: #cccccc;
- height: 500px;
- background-position: center;
- background-repeat: no-repeat;
- background-size: fill;
- background-attachment: fixed;
- position: relative;
-}
-h1{color:black;}
-h2{color:black;}
-h3{color:black;}
-h4{color:black;}
-h5{color:black;}
-p{color:black;font-size:20px;font-family:Arial;}
-td{color:black;font-size:20px;font-family:Arial;}
-a{color:black;}
-li{color:black;font-size:20px;font-family:Arial;}
-h1.white{color:white;}
-h2.white{color:white;}
-h3.white{color:white;}
-h4.white{color:white;}
-h5.white{color:white;}
-table{border-spacing: 5px;}
-p.white{color:white;text-indent: 50px;font-size:20px;font-family:Arial;}
-a.white{color:white;}
-li.white{color:white;}
-p.big{color:black;line-height: 2;text-indent: 50px;font-size:20px;font-family:Arial;}
-span.nav_button{font-size:30px;cursor:pointer;color:white;}
-img.logo{width:113.66px;height:120px;}
-img.computer{height:200px;width:200px;}
-img.work_computer{height:250px;width:200px;}
-marquee{color:white;}
-img.HundOS{height:113px;width:200px;}
-img.hound{height:169px;width:300px;}
-div.container {
- width: 100%;
- transition: margin-left .5s;
-}
-img.ac{width:500px;height:302.2px;}
-img.sr{width:500px;height:342.2px;}
-img.cb{width:500px;height:293.6px;}
-img.mm{width:500px;height:296px;}
-img.Presidents{width:500px;height:900px;}
-img.jb{width:500px;height:334.4px;}
-img.bill{width:500px;height:696px;}
-#main {
- transition: margin-left .5s;
-}
-header, footer {
- padding: 1em;
- color: white;
- clear: left;
-}
-main {
- transition: margin-left .5s;
- padding: 16px;
- margin-left:100px;
- margin-right:100px;
- background-color:white;
-}
-.button1 {
- background-color: white;
- color: black;
- border: 2px solid #555555;
-}
-
-.button1:hover {
- background-color: #555555;
- color: white;
-}
-.sidenav {
- height: 100%;
- width: 0;
- position: fixed;
- z-index: 1;
- top: 0;
- left: 0;
- background-color: #111;
- overflow-x: hidden;
- transition: 0.5s;
- padding-top: 60px;
-}
-.sidenav a {
- padding: 8px 8px 8px 32px;
- text-decoration: none;
- font-size: 25px;
- color: #818181;
- display: block;
- transition: 0.3s;
-}
-.sidenav a:hover, .offcanvas a:focus{
- color: #f1f1f1;
-}
-.sidenav p {
- text-decoration: none;
- font-size: 15px;
- color: #818181;
- display: block;
- transition: 0.3s;
-}
-.sidenav .closebtn {
- position: absolute;
- top: 0;
- right: 25px;
- font-size: 25px;
- margin-left: 50px;
-}
diff --git a/Schoolproject/Declan'sPage.html b/Schoolproject/Declan'sPage.html
deleted file mode 100755
index 44be78c..0000000
--- a/Schoolproject/Declan'sPage.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>Paraphrasing of the US Constitution, How A Bill Becomes A Law, and Election Basics</title>
-<link rel="stylesheet" href="CSS/main.css">
-<script src="JS/sidenav.js"></script>
-</head>
-<body>
-<div id="main">
-<div class="container">
-<header><span class="nav_button" onclick="openNav()">&#9776;</span><center><h1 class="white">Paraphrasing of the US Constitution, How A Bill Becomes A Law, and Election Basics</h1></center></header>
- <div id="mySidenav" class="sidenav">
-<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
-<a href="index.html">Home</a>
-<a href="#">Paraphrasing of the US Constitution, How A Bill Becomes A Law, and Election Basics</a>
-<a href="Jason'sPage.html">The three branches and important people from each</a>
-<a href="Nick'sPage.html">Checks and Balances, Supremacy Clause, Bicameral legislature, Marbury Vs Madison, and the history of each</a>
-<a href="Jacob'sPage.html">The Articles of Confederation & Shays' Rebellion</a>
-</div>
-<main>
-<center><h2>Paraphrasing of the U.S. Constitution</h2></center>
-<p><mark><b>Article 1: </b></mark>
-<b>Section 1:</b> Congress has the power to create laws, and is divided into the House of Representatives and the Senate.
-<b>Section 2:</b> Representatives in the House of Representatives will be voted on every 2 years. Representatives must be 25 years old and needs to be a citizen for at least seven years. They must live in the state they were elected in. States can have different taxes and representatives, both of which are decided upon by state population. For every 30,000 people there is one representative, however, slaves count as ⅗ of a person. When a legislator is too sick to work, the governor of that state will hold an election to fill in the position. Representatives can impeach other government officials.
-<b>Section 3:</b> Every state will have two senators in the US Senate. They will all meet directly after the first election. During that meeting, the senators will divide into three groups; those that leave in 2 years, those that leave in 4 years, and those that live in 6 years. If a senator is too sick to serve, then the state governor chooses another senator until the next election. Senators must be at least 30 years old and be a citizen for at least 9 years and must live in the state they were elected in. The vice president will be the president of the senate. The senate will hold an impeachment trial for any official that has been impeached by the house. If they are guilty they are removed from office and can not work fo the US ever again.
-<b>Section 4:</b> The date, time, and how the election works will be decided by states when they elect their senators and representatives, but so can congress. The places that senators and representatives cannot be changed. Congress must meet at least every year.
-<b>Section 5:</b> The representatives of each state will decide how many representatives will be in their state. Members of the house can be punished if they don’t show up enough for voting on bills. The house may fire a member with a ⅔ majority.
-<b>Section 6:</b> Senators and representatives will be paid for their work. The money will be from the US Bank. they cannot be arrested during the meeting of congress and when they are going to or from congress.They can be arrested for murder, assault, treason, or public indecency. Nobody in congress may have a second job in the government while in office.
-<b>Section 7:</b> All bills on taxes will start in the house and will then go to the senate, who will decide to pass, change, or reject them. If all of congress passes a bill, it will go to the president. If he signs it, it becomes a law. If he will send it back and give reasons why. But if both the house and the senate still pass the bill with a ⅔ majority, they override the president and the bill becomes a law.
-<b>Section 8:</b> congress can tax imports to the US. Congress also controls the national budget. All taxes will be the same in the US. Congress can get loans from the US. Congress controls trade with foreign powers. Congress can make laws about getting citizenship and people in debt. Congress controls how money is made and designed and may pass laws about counterfeit money. Congress can make laws about the postal service. Congress can make laws about patents. Congress can declare war on foreign powers and makes rules about POWs, and finances all branches of the military, and will set up the national guard. Congress can decide on where the capital of the US will be and will get 10 square miles in all directions from the neighboring state(s). Congress has the power to make laws for the US.
-<b>Section 9:</b> Congress cannot control immigration to the US until 1808, but can charge ten dollars to enter the US. All people being arrested must be given a reason for their arrest, and nobody can be punished for breaking a law before the law was made. State tax will be decided by the state’s population. Congress cannot pass laws favoring any state. The senate must approve the money being made in mints, and must record how much money they spend.
-<b>Section 10:</b> No individual state can have international relations of any kind. No state can have their own money or hire foreign soldiers. State may not make their own taxes without congress’ permission.
-<mark><br><b>Article 2 (FINALLY)</b></mark>
-<b>Section 1:</b> The executive power is given to the president of the US. He will have 4 year terms. The vice president will also be chosen for a 4 year term. For the presidential election, states will choose the amount of electors they have, but the number of electors must be the same as all the state’s senators and representatives, but no congressman can be an elector. In every state, every citizen that lives there will get one vote to vote for their prefered candidate, and when a candidate wins by popular vote in a state, all the electors vote for that candidate. Once a majority of the electors have voted for one candidate, then that candidate becomes the president and the second runner will become the vice president. If there is a tie, the house will vote on the president. If they end in a tie, then the senate will decide, and if there is a tie then, the current vice president will break the tie. In order to be a president, you must be born in the US, be at least 35, and have been a US citizen for 14 years. If the president dies, then the vice president takes over. If the vice president then dies, then congress will choose someone to be president until the deceased president’s term is over. The president will be paid a fixed amount of money every year of his term and may not receive any monetary gifts from the US. When the president is sworn in he will take an oath.
-<b>Section 2:</b> The president shall have power over all branches of the military. He also can pick cabinet members to advise him on what to do for things like farming, defense, health, money and trade. The president can also get people out of jail for commiting crimes, but not a former government official that broke a law and went to jail. The president can make treaties, name ambassadors, pick cabinet members, and name supreme court justices as long as congress agrees by a ⅔ vote. Congress can also assign the president to fill less important positions. The president can also fill out government positions if congress is not in session, but then must be approved by congress when they meet again.
-<b>Section 3:</b> The president can tell congress about important things going on in the country so they can pass bills about those issues. When there is a very important matter to vote on, the president can tell congress to vote on it. If congress doesn’t agree then the president can dismiss congress until they agree on the issue. He can meet with ambassadors from other countries even if he doesn’t agree with them.
-<b>Section 4:</b> The president, vice president, cabinet members, or other people who work for the government will be removed from office if they are found guilty in a trial involving a criminal offense.
-<mark><br><b>Article 3</b></mark>
-<b>Section 1:</b> The judge power of the US will be in one supreme court, but less important courts will also be set up. All judges can hold office as long as they want, as long as they behave. They will be paid a fixed amount of money for as long as they are a judge.
-<b>Section 2:</b> Judges will hear all cases of law. They can be about US laws, the constitution, or treaties. They deal with cases about ambassadors, or representatives of other countries, hear all cases from the navy and on international waters. They can deal with cases between states and other states, and they can deal with state vs person cases, and cases between people from different states. For ambassadors in court, the supreme court will decide, but for all other cases, the lower courts will decide unless they reach the supreme court. All criminal cases will be heard by a jury in the state where the crime occured.
-<b>Section 3:</b> Treason is helping an enemy in a war against the US, or working with US enemies or helping them. Nobody can be tried for any crime unless you have 2 witnesses against you. Congress has the ability to decide the punishment for treason.
-<mark><br><b>Article 4:</b> </mark>
-<b>Section 1:</b> Marriage, land sales, and decisions about the parent of a child will be given to the states.
-<b>Section 2:</b> Every citizen of every state will be treated equally. Fugitives who commited a crime in one state and left will be sent back there for trial. If slaves escape to another state, will be returned to their owner.
-<b>Section 3:</b> New states will be added to congress, but no new state can be formed from an old state. No states can merge to make a new state. Congress has the final say of what happens to the land in the US.
-<b>Section 4:</b> The US will allow every state to set up a state government run by the people of that state. The US government can protect the state government if the state wishes.
-<mark><br><b>Article 5:</b></mark> when there is a ⅔ majority in congress or if ⅔ of the congressmen of each state recommend so, a law can be changed in the constitution if it is necessary. When the amendment is approved by ¾ of every state’s legislature, the amendment will be added to the constitution. No state can lose their votes in the senate unless the state allows it.
-<mark><br><b>Article 6:</b></mark>
-<b>Section 1:</b> The constitution must be followed by everyone in the US and is the highest code of laws. All judges must make sure they follow all the constitution’s amendments and, if necessary, any state laws. All federal and state government workers must swear to support the constitution. Nobody can be kept from a government job because of their religion.
-<mark><br><b>Article 7:</b></mark> Nine States need to vote in favor of ratification to establishment of this Constitution.</p>
-<center><img src="https://static1.squarespace.com/static/54cbccf5e4b09f43359ade79/t/595ac2942994ca89478191fc/1499120290997/" alt="Constitution" class="ac"></center>
-<hr>
-<center><h2>How A Bill Becomes A Law</h2></center>
-<p>First, a bill must actually be made, either by someone from a town/city, from one of the houses of congress, or from the Executive Branch (see Executive Branch for more on the topic). Then, the bill must be introduced into the House of Representatives. If it passes, it then goes on to a committee, then it goes to Rules Committee, where it is then where the schedule is made for the debate. Then the House of Representatives debates on the bill. If passed, it moves to the Senate, where a senator presents the bill, and, if the committee majority votes for the bill, it goes to the whole Senate. After successful debate, the bill is potentially amended (basically meaning it gets altered based on the values of the Senate.) and if changes occurred, both houses make changes until they both agree. Eventually, the President, the one and only Donald Trump gets to decide on it. His decision is what makes or breaks a bill, because if he rejects it, it goes all the way back to a committee and hardly any persevere long enough to make it back to the president.</p>
-<center><img src="http://files.ctctcdn.com/c4ef8d94101/a075f21f-b619-4076-8fa5-9e03cce520c2.jpg" alt="bill" class="bill"></center>
-<hr>
-<center><h2>Election Basics</h2></center>
-<p>For a presidential election, every state votes on two candidates and the candidate who wins in that state by a majority wins that state. Every state has at least three electors, who will then all vote for the candidate who won their state. The number of electors in a state is the same as the number of congressmen that state. Once one candidate gets to 270(out of 538) electors they win because that is a 51% majority. However, for all Congress or state government elections are by popular vote in one state.</p>
-<center><img src="https://i2.wp.com/fortmyersbeach.news/wp-content/uploads/2017/03/March-7-Election-Basics.jpg?fit=291%2C160&ssl=1" alt="vote"></center>
-<hr>
-</main>
-</div>
-</div>
-</body>
-</html>
diff --git a/Schoolproject/JS/sidenav.js b/Schoolproject/JS/sidenav.js
deleted file mode 100755
index 76fecd7..0000000
--- a/Schoolproject/JS/sidenav.js
+++ /dev/null
@@ -1,11 +0,0 @@
-function openNav() {
- document.getElementById("mySidenav").style.width = "250px";
- document.getElementById("main").style.marginLeft = "250px";
- <!--document.body.style.backgroundColor = "rgba(0,0,0,0.4)";-->
-}
-
-function closeNav() {
- document.getElementById("mySidenav").style.width = "0";
- document.getElementById("main").style.marginLeft= "0";
- <!--document.body.style.backgroundColor = "black";-->
-} \ No newline at end of file
diff --git a/Schoolproject/Jacob'sPage.html b/Schoolproject/Jacob'sPage.html
deleted file mode 100755
index ec2cffc..0000000
--- a/Schoolproject/Jacob'sPage.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>The Articles of Confederation and Shays' Rebellion</title>
-<link rel="stylesheet" href="CSS/main.css">
-<script src="JS/sidenav.js"></script>
-</head>
-<body>
-<div id="main">
-<div class="container">
-<header><span class="nav_button" onclick="openNav()">&#9776;</span><center><h1 class="white">The Articles of Confederation and Shays' Rebellion</h1></center></header>
- <div id="mySidenav" class="sidenav">
-<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
-<a href="index.html">Home</a>
-<a href="Declan'sPage.html">Paraphrasing of the US Constitution, How A Bill Becomes A Law, and Election Basics</a>
-<a href="Jason'sPage.html">The three branches and important people from each</a>
-<a href="Nick'sPage.html">Checks and Balances, Supremacy Clause, Bicameral legislature, Marbury Vs Madison, and the history of each</a>
-<a href="#">The Articles of Confederation & Shays' Rebellion</a>
-</div>
-<main>
-<center><h2>The Articles of Confederation</h2></center>
-<h3>Reasons it didn't work</h3>
-<ol>
-<li>States want more votes not 1 state 1 vote</li>
-<li>The federal government had to ask for troops from the states</li>
-<li>States make their own currency and cause inflation</li>
-<li>States don’t trade with each other</li>
-<li>States have debts from revolution</li>
-<li>Congress needed 9 of 13 states to pass any laws</li>
-<li>The federal government couldn’t collect taxes to fund its operations</li>
-<li>The Articles of Confederation were practically impossible to amend.</li>
-</ol>
-<p>(1) The Articles of Confederation allow for one state one vote. All large states wanted more than one vote because of their population. Also they wanted more power than the small states.
-(2) The federal government had no army, so it had to ask the states for troops. This would make it hard for the U.S. to round up troops to fight in wars or to push the British of the continent.<br>
-(3) There were no laws against the states making their own currency. This was the answer the states the came up with for their debts. They also printed large amounts of their currency making it worthless.<br>
-(4) Because states could make their own currency, interstate trade was difficult. If you wanted something from another state you had to deal with currency conversion and inflation of the other currency.<br>
-(5) All the states had debts for the Revolutionary war. This was to pay of the soldiers and other war expenses. This leads to the next issue.<br>
-(6) this made it very difficult to pass any legislation that would affect all 13 states, since neither the north or the south had a majority. <br>
-(7) The federal government could not tax U.S. citizens, so it needed voluntary taxes from the states.<br>
-(8) The Articles required all 13 states to allow any amendment. Since there were rivalries between the states, mostly the north and south, that rule made the Articles of Confederation impossible to amend.</p>
-<center><img src="https://images.fineartamerica.com/images/artworkimages/mediumlarge/1/drafting-the-articles-of-confederation-lanjee-chee.jpg" alt="articles of confederation" class="ac"></center>
-<hr>
-<center><h2>Shays' Rebellion</h2></center>
-<p>A tax protest by western Massachusetts farmers in 1786 and 1787 showed the central government could not stop rebellion. The state militia was used because there was no federal army to stop the rebellion. These events scared Founders like George Washington, James Madison and Alexander Hamilton to the point where delegates from five states met at Annapolis, Maryland in September 1786 to discuss changing the Articles of Confederation. The group recommended that a meeting of all 13 states the following May in Philadelphia. The Constitutional Convention of 1787 ended the Articles of Confederation.</p>
-<center><img src="https://upload.wikimedia.org/wikipedia/commons/b/b9/Daniel_Shays_and_Job_Shattuck.jpg" alt="shays' rebellion" class="sr">
-<hr>
-</main>
-</div>
-</div>
-</body>
-</html>
diff --git a/Schoolproject/Jason'sPage.html b/Schoolproject/Jason'sPage.html
deleted file mode 100755
index ce164e7..0000000
--- a/Schoolproject/Jason'sPage.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>The Three Branches of Government and Important People from Each</title>
-<link rel="stylesheet" href="CSS/main.css">
-<script src="JS/sidenav.js"></script>
-</head>
-<body>
-<div id="main">
-<div class="container">
-<header><span class="nav_button" onclick="openNav()">&#9776;</span><center><h1 class="white">The Three Branches of Government and Important People from Each</h1></center></header>
- <div id="mySidenav" class="sidenav">
-<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
-<a href="index.html">Home</a>
-<a href="Declan'sPage.html">Paraphrasing of the US Constitution, How A Bill Becomes A Law, and Election Basics</a>
-<a href="#">The three branches and important people from each</a>
-<a href="Nick'sPage.html">Checks and Balances, Supremacy Clause, Bicameral legislature, Marbury Vs Madison, and the history of each</a>
-<a href="Jacob'sPage.html">The Articles of Confederation & Shays' Rebellion</a>
-</div>
-<main>
-<center><h2>Branches of Government</h2></center>
-<h3>The Executive Branch</h3>
-<p>The Executive Branch is the branch of Government where the President works. But, not only does the President,for example Donald Trump, work in the Executive branch, but other important people like the Secretary of Defence, Energy, and other people that oversee and advise changes on the qualities of different side categories the President must acknowledge.</p>
-<center><img src="images/presidents.png" alt="Presidents" class="Presidents"></center>
-<hr>
-<h3>The Judicial Branch</h3>
-<p>The Judicial Branch of Government are the ones who are responsible for the overseeing and operating of the Federal, or Supreme Court. The Supreme Court is made up of 9 members currently- John Roberts, the Chief Justice, and 8 other associate justices such as Stephen Breyer and Clarence Thomas.</p>
-<center><img src="http://www.3branchesofgovernment.com/wp-content/uploads/2013/03/bigstock-Us-Supreme-Court-1113564.jpg" alt="Judicial Branch" class="jb"></center>
-<hr>
-<h3>The Legislative Branch</h3>
-<p>The Legislative branch of Government is the branch of Government that is responsible for the revising and approval of bills to be signed by the President. There are two houses to the Legislative Branch- The Senate and the House of Representatives. Each state has 2 Senators no matter the population, but the state’s population does determine the amount of Representatives it has. A bill,to become a law, has to pass through both houses in order to advance to the President. Each senator serves for at least 6 years, but some are elected at different times so that there are elections more often. Representatives, however, serve only 2 years, Some people from the Senate are the Vice President, Mike Pence, President of the Senate, and an example of a senator is John Cornyn. Some people from the House of representatives are the Speaker, the leader of the House, Paul Ryan, and an example of a representative is Mike Rogers.</p>
-<center><img src="https://portal.ehawaii.gov/assets/images/fed-government/legislative.jpg" alt="The Legislative Branch"></center>
-<hr>
-</main>
-</div>
-</div>
-</body>
-</html>
diff --git a/Schoolproject/Nick'sPage.html b/Schoolproject/Nick'sPage.html
deleted file mode 100755
index 581d01d..0000000
--- a/Schoolproject/Nick'sPage.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>Checks and Balances, Supremacy Clause, Bicameral legislature, Marbury Vs Madison, and the history of each.</title>
-<link rel="stylesheet" href="CSS/main.css">
-<script src="JS/sidenav.js"></script>
-</head>
-<body>
-<div id="main">
-<div class="container">
-<header><span class="nav_button" onclick="openNav()">&#9776;</span><center><h1 class="white">Checks and Balances, Supremacy Clause, Bicameral legislature, Marbury Vs Madison, and the history of each.</h1></center></header>
- <div id="mySidenav" class="sidenav">
-<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
-<a href="index.html">Home</a>
-<a href="Declan'sPage.html">Paraphrasing of the US Constitution, How A Bill Becomes A Law, and Election Basics</a>
-<a href="Jason'sPage.html">The three branches and important people from each</a>
-<a href="#">Checks and Balances, Supremacy Clause, Bicameral legislature, Marbury Vs Madison, and the history of each</a>
-<a href="Jacob'sPage.html">The Articles of Confederation & Shays' Rebellion</a>
-</div>
-<main>
-<center><h2>Checks and Balances</h2></center>
-<p>Check and balances is a system used in the government to create shared powers. This allows a government to not be ruled by one power, but multiple.
-Check and Balances in the U.S work in a way where there are three powers that can’t do certain things without the agreement of the other. The three branches Executive,Judicial, and Legislative have certain powers over others. This creates a system of checks and balances in the government that lets decision be made and have them checked by other branches and create a balanced government. </p>
-<h3>History</h3>
-<p>The framers were the first to create the system we now know as checks and balances. James Madison being known as the one to put the most effort into this idea. This system was created, because of problems seen in the past were one person can become too powerful.The most know quote was said by james Madison in the federalist papers “If men were angels, no government would be necessary.” The same paper goes on to explain the government must control itself with the 3 branches looking lover each other.</p>
-<center><img src="https://s3-eu-west-1.amazonaws.com/tutor2u-media/subjects/politics/branches-of-govt.png?mtime=20151001082236" alt="Checks and Balances" class="cb"></center>
-<h3>Links</h3>
-<a href="http://www.history.com/topics/checks-and-balances" target="_blank">Link1</a>
-<a href="https://www.britannica.com/topic/checks-and-balances" target="_blank">Link2</a>
-<hr>
-<center><h2>Supremacy Clause</h2></center>
-<p>The supremacy clause was made to deal with any problems between national and local governments. The best way to put it would be “both governments could be allowed to act without mutual interference, but one government's acts could be given primacy over the other's acts in the event of actual conflict.”-Heritage guide to the Constitution. This means that if local and federal governments interfere with each other the federal government would have more of a say. </p>
-<h3>History</h3>
-<p>The supremacy clause is in article VI of the constitution. The supremacy clause was controversial, because it gave more power to the federal government rather the state government. James Madison and other people wanted to give the federal government the power to veto state laws. The Supremacy law was finally passed as a way to fix any controversy between two laws made on similar subjects by federal and local governments.</p>
-<h3>Links</h3>
-<a href="http://www.heritage.org/constitution/#!/articles/6/essays/133/supremacy-clause" target="_blank">Link</a>
-<hr>
-<center><h2>Bicameral legislature</h2></center>
-<p>Bicameral Legislature is a body of government that has two legislative house. The reason for this is to represent the citizens and the country. It also allows the states to be more involved in the central government.</p>
-<center><img src="http://ushistoryvocab.weebly.com/uploads/1/2/2/9/12292797/342847425.jpg" alt="Bicameral legislature"></center>
-<h3>Links</h3>
-<a href="https://www.britannica.com/topic/bicameral-system" target="_blank">Link</a>
-<hr>
-<center><h2>Marbury Vs Madison</h2></center>
-<p>Marbury Vs Madison was a case in the supreme court that was decided by John Marshall in 1803. This case started the idea that the supreme court can declare laws passed by government unconstitutional this is called judicial review. </p>
-<h3>The case</h3>
-<p>The case brought up to the supreme court was between William Marbury and James Madison. When Madison and the new president Thomas Jefferson were wrong to prevent Marbury from becoming justice of peace for Washington County in the District of Columbia. Even though the supreme court could not force them to allow Marbury to become justice of peace. This lead to Marbury never going to office after it was said the judges had no right to decide, because it conflicts with the constitution.</p>
-<center><img src="http://s3.thingpic.com/images/Ek/nkspkZi8Zr3q3P7bjX1G6rZt.jpeg" alt="Marbury Vs Madison" class="mm"></center>
-<h3>Links</h3>
-<a href="https://www.history.com/this-day-in-history/marbury-v-madison-establishes-judicial-review" target="_blank">Link</a>
-<hr>
-</main>
-</div>
-</div>
-</body>
-</html>
diff --git a/Schoolproject/images/constitution.jpg b/Schoolproject/images/constitution.jpg
deleted file mode 100755
index 6977abd..0000000
--- a/Schoolproject/images/constitution.jpg
+++ /dev/null
Binary files differ
diff --git a/Schoolproject/images/pixeltrump.gif b/Schoolproject/images/pixeltrump.gif
deleted file mode 100755
index 386ffcb..0000000
--- a/Schoolproject/images/pixeltrump.gif
+++ /dev/null
Binary files differ
diff --git a/Schoolproject/images/presidents.png b/Schoolproject/images/presidents.png
deleted file mode 100755
index fe1eb97..0000000
--- a/Schoolproject/images/presidents.png
+++ /dev/null
Binary files differ
diff --git a/Schoolproject/index.html b/Schoolproject/index.html
deleted file mode 100755
index c031556..0000000
--- a/Schoolproject/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<title>Home</title>
-<link rel="stylesheet" href="CSS/main.css">
-<script src="JS/sidenav.js"></script>
-</head>
-<body>
-<div id="main">
-<div class="container">
-<header><span class="nav_button" onclick="openNav()">&#9776;</span><center><h1 class="white">Home</h1></center></header>
- <div id="mySidenav" class="sidenav">
-<a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
-<a href="index.html">Home</a>
-<a href="Declan'sPage.html">Paraphrasing of the US Constitution, How A Bill Becomes A Law, and Election Basics</a>
-<a href="Jason'sPage.html">The three branches and important people from each</a>
-<a href="Nick'sPage.html">Checks and Balances, Supremacy Clause, Bicameral legislature, Marbury Vs Madison, and the history of each</a>
-<a href="Jacob'sPage.html">The Articles of Confederation & Shays' Rebellion</a>
-</div>
-<main>
-<table>
-<tr>
-<td>Nicholas Torrillo</td>
-<td>Jason Kirk</td>
-<td>Jacob McDonnell</td>
-<td>Declan Lees</td>
-</tr>
-<tr>
-<td>-Checks and Balances<br>-Supremacy Clause<br>-Bicameral legislature<br>-Marbury Vs Madison<br>-The History of Each</td>
-<td>-The Three Branches<br>-Important People from Each Branch</td>
-<td>-The Articles of Confederation<br>-Shays' Rebellion</td>
-<td>-Paraphrasing of the U.S. Constitution<br>-How A Bill Becomes A Law<br>-Election Basics</td>
-</table>
-<!--<center><img src="images/pixeltrump.gif" alt="pixel trump gif"></center>-->
-</main>
-</div>
-</div>
-</body>
-</html>
diff --git a/articles/.DS_Store b/articles/.DS_Store
deleted file mode 100644
index a5b33a5..0000000
--- a/articles/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/articles/RpiRockyLinuxServer/index.html b/articles/RpiRockyLinuxServer/index.html
deleted file mode 100755
index edf6b5b..0000000
--- a/articles/RpiRockyLinuxServer/index.html
+++ /dev/null
@@ -1,192 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Raspberry Pi Rocky Linux Webserver</title>
- <link href="../../CSS/main.css" rel="stylesheet" type="text/css">
- <link href="favicon.ico" rel="icon" sizes="any">
- <meta name="description" content="A tutorial on setting up a webserver on a Raspberry Pi with Rocky Linux 8"/>
- <meta name="author" content="Jacob McDonnell"/>
- <meta name="keywords" content="rocky,rocky linux,linux,raspberry pi,webserver,nginx,certbot,website"/>
- </head>
- <body>
- <ul class="topBar">
- <li class="topLink"><a href="https://jacobmcdonnell.com/">home</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/articles">articles</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/articles/rss.xml">rss feed</a></li>
- </ul>
- <div class="main">
- <p>&nbsp;</p>
- <h1 id='hosting-a-website-on-the-raspberry-pi-with-rocky-linux'>Hosting a Website on the Raspberry Pi with Rocky Linux</h1>
- <a href="rpi4rockylinuxwebserver.md">Markdown File Download</a>
- <p>First Download Rocky Linux for the Raspberry Pi 3 &amp; 4 from <a href='https://rockylinux.org/alternative-images'>their website</a>.</p>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.15.13 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.15.13 PM"></center>
- <p>Next you want to burn this image to the sd card that you are going to use. Now start up the Raspberry Pi and login with the default user <code>rocky</code> and the password is <code>rockylinux</code>. </p>
- <p>To make the image take up the whole drive, run:</p>
- <pre><code class='language-shell'>sudo rootfs-expand
- </code></pre>
- <p>Now, you should create a new user:</p>
- <pre><code class='language-shell'>sudo useradd -m -g users -G wheel userName
-sudo passwd username
- </code></pre>
- <p>Next, we should delete the default user so logout and login to your new user:</p>
- <pre><code class='language-shell'>sudo userdel rocky
- </code></pre>
- <p>&nbsp;</p>
- <hr />
- <h2 id='setting-a-static-ip-address'>Setting a static IP address </h2>
- <p>The easiest way is to run:</p>
- <pre><code class='language-shell'>sudo nmtui
- </code></pre>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.18.39 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.18.39 PM"></center>
- <p>Select <strong>Edit</strong> a connection and select your network interface. </p>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.23.20 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.23.20 PM"></center>
- <p>Select <strong>Show</strong> for <strong>IPv4 CONFIGURATION</strong> and enter the IP you want to set. Then select <strong>OK</strong> at the bottom, and quit the program.</p>
- <h2 id='securing-the-pi'>Securing the PI</h2>
- <h3 id='ssh-key-authorization'>SSH Key Authorization</h3>
- <p>The best way to secure the pi is to use an SSH key to login instead of a password. First you want to generate an SSH key by running on your computer:</p>
- <pre><code class='language-shell'>ssh-keygen -t rsa
- </code></pre>
- <p>Next, to copy your SSH key to your server, run:</p>
- <pre><code class='language-shell'>ssh-copy-id -i ~/.ssh/mykey user@host
- </code></pre>
- <p>To test that it works, run:</p>
- <pre><code class='language-shell'>ssh -i ~/.ssh/mykey user@host
- </code></pre>
- <p>If it worked, you should be able to connect without needing a password.</p>
- <p>To force an SSH key to login, edit <code>/etc/ssh/sshd_config</code> using nano or vim.</p>
- <p>Change <code>PermitRootLogin yes</code> to <code>PermitRootLogin no</code> and <code>PasswordAuthentication yes</code> to <code>PasswordAuthentication no</code>.</p>
- <h3 id='setting-up-fail2ban'>Setting up fail2ban</h3>
- <p>First start and enable firewalld to run at boot:</p>
- <pre><code class='language-shell'>sudo systemctl start firewalld
-sudo systemctl enable firewalld
- </code></pre>
- <p>Now, enable the EPEL repository for Rocky Linux and install fail2ban:</p>
- <pre><code class='language-shell'>sudo dnf install epel-release -y
-sudo dnf install fail2ban fail2ban-firewalld -y
- </code></pre>
- <p>Start and enable fail2ban to run at boot:</p>
- <pre><code class='language-shell'>sudo systemctl start fail2ban
-sudo systemctl enable fail2ban
- </code></pre>
- <p>Now, we have to make fail2ban work with firewalld, run:</p>
- <pre><code class='language-shell'>sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
-sudo systemctl restart fail2ban
- </code></pre>
- <p>To create an SSH jail, edit the ssh config file with vim or nano:</p>
- <pre><code class='language-shell'>sudo nano /etc/fail2ban/jail.d/sshd.local
- </code></pre>
- <p>Paste the following into the file and change the values as you see fit:</p>
- <pre><code>[sshd]
-enabled = true
-bantime = 1d
-maxretry = 3
- </code></pre>
- <p>Save and close the file and restart fail2ban:</p>
- <pre><code class='language-shell'>sudo systemctl restart fail2ban
- </code></pre>
- <h2 id='setting-up-dynamic-dns-with-google-domains'>Setting up Dynamic DNS with Google Domains</h2>
- <h3 id='configuring-google-domains'>Configuring Google Domains</h3>
- <p>First, on <a href='https://domains.google.com/'>Domains.google.com</a> go the DNS page for your domain. Scroll down and click on <strong>Show advanced settings</strong>, Click <strong>Manage dynamic DNS</strong>, and then click <strong>Create new record</strong>. Enter your subdomain or leave it black for the domain itself. Finally, click Save.</p>
- <h3 id='installing-ddclient'>Installing ddclient</h3>
- <p>To install ddclient you need to enable the PowerTools Repo for the perl dependency.</p>
- <p>First, install <code>dnf-plugins-core</code>:</p>
- <pre><code class='language-shell'>sudo dnf -y install dnf-plugins-core
-sudo dnf upgrade
- </code></pre>
- <p>Next, enable PowerTools:</p>
- <pre><code class='language-shell'>sudo dnf config-manager --set-enabled powertools
- </code></pre>
- <p>Then, you can install ddclient:</p>
- <pre><code class='language-shell'>sudo dnf install ddclient
- </code></pre>
- <p>Now, we want to edit the config file for ddclient:</p>
- <pre><code class='language-shell'>sudo nano /etc/ddclient.conf
- </code></pre>
- <p>You&#39;ll want to look for where it says <code>protocol=dyndns2</code>, and enter your information:</p>
- <pre><code>##
-## nsupdate.info IPV4(https://www.nsupdate.info)
-##
-protocol=dyndns2
-use=web, web=http://ipv4.nsupdate.info/myip
-server=domains.google.com
-login=username
-password=password
-domain.tld
- </code></pre>
- <p>Wait about 5 minutes and on the Google Domains website, under Dynamic DNS you should see your IP address under <strong>Data</strong>.</p>
- <h2 id='setting-up-nginx-and-lets-encrypt'>Setting up NGINX and Let&#39;s Encrypt</h2>
- <h3 id='installing-nginx'>Installing NGINX</h3>
- <p>First, install nginx Webserver:</p>
- <pre><code class='language-shell'>sudo dnf install nginx
- </code></pre>
- <p>Next, start and enable nginx to run at boot:</p>
- <pre><code class='language-shell'>sudo systemctl start nginx
-sudo systemctl enable nginx
- </code></pre>
- <p>Then, check the status to see if it is running:</p>
- <pre><code class='language-shell'>sudo systemctl status nginx
- </code></pre>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.56.21 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.56.21 PM"></center>
- <p>Now, we have to allow HTTP traffic through the firewall:</p>
- <pre><code class='language-shell'>sudo firewall-cmd --add-service=http --permanent
-sudo firewall-cmd --add-service=https --permanent
-sudo firewall-cmd --reload
- </code></pre>
- <p>In a web browser, go to the local ip of the server and you should see the nginx welcome page.</p>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.58.29 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.58.29 PM"></center>
- <h3 id='configuring-nginx'>Configuring NGINX</h3>
- <p>First, make your folder for the website, this is where your website will live:</p>
- <pre><code class='language-shell'>sudo mkdir -p /var/www/websiteName
- </code></pre>
- <p>Next, we need to set the proper permissions to make sure everything works:</p>
- <pre><code class='language-shell'>sudo chown -R nginx /var/www/websiteName
-sudo chmod -R 755 /var/www/websiteName
- </code></pre>
- <p>Now, we will create the config file for website:</p>
- <pre><code class='language-shell'>sudo nano /etc/nginx/conf.d/websiteName.conf
- </code></pre>
- <p>and paste the following into the file:</p>
- <pre><code>server {
- listen 80;
- server_name domain.tld www.domain.tld;
- root /var/www/websiteName;
- index index.php index.html index.htm;
- access_log /var/log/nginx/websiteName.access.log;
- error_log /var/log/nginx/websiteName.error.log;
-}
- </code></pre>
- <p>Now, confirm that the nginx configuration is ok:</p>
- <pre><code class='language-shell'>sudo nginx -t
- </code></pre>
- <p>Restart nginx:</p>
- <pre><code class='language-shell'>sudo systemctl restart nginx
-sudo systemctl status nginx
- </code></pre>
- <p>Next, set SELinux to permissive mode:</p>
- <pre><code class='language-shell'>sudo setenforce permissive
-sudo getenforce
- </code></pre>
- <p>Now, we will need to set SELinux to permissive mode permanently:</p>
- <pre><code class='language-shell'>sudo sed -i --follow-symlinks &#39;s/SELINUX=enforcing/SELINUX=permissive/g&#39; /etc/sysconfig/selinux
- </code></pre>
- <h3 id='installing-and-running-certbot'>Installing and Running Certbot</h3>
- <p>To install Certbot run:</p>
- <pre><code class='language-shell'>sudo dnf install certbot python3-certbot-nginx
- </code></pre>
- <p>To get SSL certificates for your websites run:</p>
- <pre><code class='language-shell'>sudo certbot --nginx
- </code></pre>
- <p>Answer the prompts that show up on screen as you wish.</p>
- <p>To configure auto renewal of the SSL certificate run:</p>
- <pre><code class='language-shell'>crontab -e
- </code></pre>
- <p>and add the following line:</p>
- <pre><code>0 12 * * * /usr/bin/certbot renew --quiet
- </code></pre>
- <p>This will check everyday at noon to see if the certificate will expire in the next month, if so it will renew the certificate.</p>
- <p>Now your website should be operational. </p><br>
- </div>
- </body>
-</html>
diff --git a/articles/articleMaker.tar b/articles/articleMaker.tar
deleted file mode 100644
index 6ad885d..0000000
--- a/articles/articleMaker.tar
+++ /dev/null
Binary files differ
diff --git a/articles/index.html b/articles/index.html
deleted file mode 100644
index 3d1abc7..0000000
--- a/articles/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Jacob McDonnell</title>
- <meta name="description" content="This is the page where I host my articles."/>
- <link href="../CSS/main.css" rel="stylesheet" type="text/css">
- <link href="favicon.ico" rel="icon" sizes="any">
- </head>
- <body>
- <ul class="topBar">
- <li class="topLink"><a href="https://jacobmcdonnell.com/">home</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/articles">articles</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/articles/rss.xml">rss feed</a></li>
- </ul>
- <div class="main">
- <div class="article">
- <a href="RpiRockyLinuxServer">
- <h2>Hosting a Website on the Raspberry Pi with Rocky Linux</h2>
- <p>2/19/22<br>A tutorial on setting up a webserver on a Raspberry Pi with Rocky Linux 8</p>
- </a>
- </div>
- </div>
- </body>
-</html>
diff --git a/articles/rss.xml b/articles/rss.xml
deleted file mode 100644
index e280062..0000000
--- a/articles/rss.xml
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
-
-<channel>
-<title>Jacob McDonnell</title>
-<description>Articles from Jacob McDonnell.</description>
-<language>en-us</language>
-<link>https://jacobmcdonnell.com/rss.xml</link>
-<atom:link href="https://jacobmcdonnell.com/rss.xml" rel="self" type="application/rss+xml" />
-<image>
-<title>Jacob McDonnell</title>
-<url>https://jacobmcdonnell.com/favicon.ico</url>
-<link>https://jacobmcdonnell.com/rss.xml</link>
-</image>
-
-<!-- LB -->
-
-
-
-
-
-
-
-<item>
-<title>Hosting a Website on the Raspberry Pi with Rocky Linux</title>
-<guid>https://jacobmcdonnell.com/articles/RpiRockyLinuxServer/</guid>
-<link>https://jacobmcdonnell.com/articles/RpiRockyLinuxServer/</link>
-<pubDate>Sun, 19 Feb 2022 15:00:00 -0500</pubDate>
-<description><![CDATA[
- <p>First Download Rocky Linux for the Raspberry Pi 3 &amp; 4 from <a href='https://rockylinux.org/alternative-images'>their website</a>.</p>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.15.13 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.15.13 PM"></center>
- <p>Next you want to burn this image to the sd card that you are going to use. Now start up the Raspberry Pi and login with the default user <code>rocky</code> and the password is <code>rockylinux</code>. </p>
- <p>To make the image take up the whole drive, run:</p>
- <pre><code class='language-shell' lang='shell'>sudo rootfs-expand
- </code></pre>
- <p>Now, you should create a new user:</p>
- <pre><code class='language-shell' lang='shell'>sudo useradd -m -g users -G wheel userName
-sudo passwd username
- </code></pre>
- <p>Next, we should delete the default user so logout and login to your new user:</p>
- <pre><code class='language-shell' lang='shell'>sudo userdel rocky
- </code></pre>
- <p>&nbsp;</p>
- <hr />
- <h2 id='setting-a-static-ip-address'>Setting a static IP address </h2>
- <p>The easiest way is to run:</p>
- <pre><code class='language-shell' lang='shell'>sudo nmtui
- </code></pre>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.18.39 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.18.39 PM"></center>
- <p>Select <strong>Edit</strong> a connection and select your network interface. </p>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.23.20 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.23.20 PM"></center>
- <p>Select <strong>Show</strong> for <strong>IPv4 CONFIGURATION</strong> and enter the IP you want to set. Then select <strong>OK</strong> at the bottom, and quit the program.</p>
- <h2 id='securing-the-pi'>Securing the PI</h2>
- <h3 id='ssh-key-authorization'>SSH Key Authorization</h3>
- <p>The best way to secure the pi is to use an SSH key to login instead of a password. First you want to generate an SSH key by running on your computer:</p>
- <pre><code class='language-shell' lang='shell'>ssh-keygen -t rsa
- </code></pre>
- <p>Next, to copy your SSH key to your server, run:</p>
- <pre><code class='language-shell' lang='shell'>ssh-copy-id -i ~/.ssh/mykey user@host
- </code></pre>
- <p>To test that it works, run:</p>
- <pre><code class='language-shell' lang='shell'>ssh -i ~/.ssh/mykey user@host
- </code></pre>
- <p>If it worked, you should be able to connect without needing a password.</p>
- <p>To force an SSH key to login, edit <code>/etc/ssh/sshd_config</code> using nano or vim.</p>
- <p>Change <code>PermitRootLogin yes</code> to <code>PermitRootLogin no</code> and <code>PasswordAuthentication yes</code> to <code>PasswordAuthentication no</code>.</p>
- <h3 id='setting-up-fail2ban'>Setting up fail2ban</h3>
- <p>First start and enable firewalld to run at boot:</p>
- <pre><code class='language-shell' lang='shell'>sudo systemctl start firewalld
-sudo systemctl enable firewalld
- </code></pre>
- <p>Now, enable the EPEL repository for Rocky Linux and install fail2ban:</p>
- <pre><code class='language-shell' lang='shell'>sudo dnf install epel-release -y
-sudo dnf install fail2ban fail2ban-firewalld -y
- </code></pre>
- <p>Start and enable fail2ban to run at boot:</p>
- <pre><code class='language-shell' lang='shell'>sudo systemctl start fail2ban
-sudo systemctl enable fail2ban
- </code></pre>
- <p>Now, we have to make fail2ban work with firewalld, run:</p>
- <pre><code class='language-shell' lang='shell'>sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
-sudo systemctl restart fail2ban
- </code></pre>
- <p>To create an SSH jail, edit the ssh config file with vim or nano:</p>
- <pre><code class='language-shell' lang='shell'>sudo nano /etc/fail2ban/jail.d/sshd.local
- </code></pre>
- <p>Paste the following into the file and change the values as you see fit:</p>
- <pre><code>[sshd]
-enabled = true
-bantime = 1d
-maxretry = 3
- </code></pre>
- <p>Save and close the file and restart fail2ban:</p>
- <pre><code class='language-shell' lang='shell'>sudo systemctl restart fail2ban
- </code></pre>
- <h2 id='setting-up-dynamic-dns-with-google-domains'>Setting up Dynamic DNS with Google Domains</h2>
- <h3 id='configuring-google-domains'>Configuring Google Domains</h3>
- <p>First, on <a href='https://domains.google.com/'>Domains.google.com</a> go the DNS page for your domain. Scroll down and click on <strong>Show advanced settings</strong>, Click <strong>Manage dynamic DNS</strong>, and then click <strong>Create new record</strong>. Enter your subdomain or leave it black for the domain itself. Finally, click Save.</p>
- <h3 id='installing-ddclient'>Installing ddclient</h3>
- <p>To install ddclient you need to enable the PowerTools Repo for the perl dependency.</p>
- <p>First, install <code>dnf-plugins-core</code>:</p>
- <pre><code class='language-shell' lang='shell'>sudo dnf -y install dnf-plugins-core
-sudo dnf upgrade
- </code></pre>
- <p>Next, enable PowerTools:</p>
- <pre><code class='language-shell' lang='shell'>sudo dnf config-manager --set-enabled powertools
- </code></pre>
- <p>Then, you can install ddclient:</p>
- <pre><code class='language-shell' lang='shell'>sudo dnf install ddclient
- </code></pre>
- <p>Now, we want to edit the config file for ddclient:</p>
- <pre><code class='language-shell' lang='shell'>sudo nano /etc/ddclient.conf
- </code></pre>
- <p>You&#39;ll want to look for where it says <code>protocol=dyndns2</code>, and enter your information:</p>
- <pre><code>##
-## nsupdate.info IPV4(https://www.nsupdate.info)
-##
-protocol=dyndns2
-use=web, web=http://ipv4.nsupdate.info/myip
-server=domains.google.com
-login=username
-password=password
-domain.tld
- </code></pre>
- <p>Wait about 5 minutes and on the Google Domains website, under Dynamic DNS you should see your IP address under <strong>Data</strong>.</p>
- <h2 id='setting-up-nginx-and-lets-encrypt'>Setting up NGINX and Let&#39;s Encrypt</h2>
- <h3 id='installing-nginx'>Installing NGINX</h3>
- <p>First, install nginx Webserver:</p>
- <pre><code class='language-shell' lang='shell'>sudo dnf install nginx
- </code></pre>
- <p>Next, start and enable nginx to run at boot:</p>
- <pre><code class='language-shell' lang='shell'>sudo systemctl start nginx
-sudo systemctl enable nginx
- </code></pre>
- <p>Then, check the status to see if it is running:</p>
- <pre><code class='language-shell' lang='shell'>sudo systemctl status nginx
- </code></pre>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.56.21 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.56.21 PM"></center>
- <p>Now, we have to allow HTTP traffic through the firewall:</p>
- <pre><code class='language-shell' lang='shell'>sudo firewall-cmd --add-service=http --permanent
-sudo firewall-cmd --add-service=https --permanent
-sudo firewall-cmd --reload
- </code></pre>
- <p>In a web browser, go to the local ip of the server and you should see the nginx welcome page.</p>
- <center><img class="imgs" src="img/Screen Shot 2022-02-19 at 2.58.29 PM.png" referrerpolicy="no-referrer" alt="Screen Shot 2022-02-19 at 2.58.29 PM"></center>
- <h3 id='configuring-nginx'>Configuring NGINX</h3>
- <p>First, make your folder for the website, this is where your website will live:</p>
- <pre><code class='language-shell' lang='shell'>sudo mkdir -p /var/www/websiteName
- </code></pre>
- <p>Next, we need to set the proper permissions to make sure everything works:</p>
- <pre><code class='language-shell' lang='shell'>sudo chown -R nginx /var/www/websiteName
-sudo chmod -R 755 /var/www/websiteName
- </code></pre>
- <p>Now, we will create the config file for website:</p>
- <pre><code class='language-shell' lang='shell'>sudo nano /etc/nginx/conf.d/websiteName.conf
- </code></pre>
- <p>and paste the following into the file:</p>
- <pre><code>server {
- listen 80;
- server_name domain.tld www.domain.tld;
- root /var/www/websiteName;
- index index.php index.html index.htm;
- access_log /var/log/nginx/websiteName.access.log;
- error_log /var/log/nginx/websiteName.error.log;
-}
- </code></pre>
- <p>Now, confirm that the nginx configuration is ok:</p>
- <pre><code class='language-shell' lang='shell'>sudo nginx -t
- </code></pre>
- <p>Restart nginx:</p>
- <pre><code class='language-shell' lang='shell'>sudo systemctl restart nginx
-sudo systemctl status nginx
- </code></pre>
- <p>Next, set SELinux to permissive mode:</p>
- <pre><code class='language-shell' lang='shell'>sudo setenforce permissive
-sudo getenforce
- </code></pre>
- <p>Now, we will need to set SELinux to permissive mode permanently:</p>
- <pre><code class='language-shell' lang='shell'>sudo sed -i --follow-symlinks &#39;s/SELINUX=enforcing/SELINUX=permissive/g&#39; /etc/sysconfig/selinux
- </code></pre>
- <h3 id='installing-and-running-certbot'>Installing and Running Certbot</h3>
- <p>To install Certbot run:</p>
- <pre><code class='language-shell' lang='shell'>sudo dnf install certbot python3-certbot-nginx
- </code></pre>
- <p>To get SSL certificates for your websites run:</p>
- <pre><code class='language-shell' lang='shell'>sudo certbot --nginx
- </code></pre>
- <p>Answer the prompts that show up on screen as you wish.</p>
- <p>To configure auto renewal of the SSL certificate run:</p>
- <pre><code class='language-shell' lang='shell'>crontab -e
- </code></pre>
- <p>and add the following line:</p>
- <pre><code>0 12 * * * /usr/bin/certbot renew --quiet
- </code></pre>
- <p>This will check everyday at noon to see if the certificate will expire in the next month, if so it will renew the certificate.</p>
- <p>Now your website should be operational. </p><br>
-]]></description>
-</item>
-
-
-
-</channel>
-
-</rss>
diff --git a/db.py b/db.py
new file mode 100755
index 0000000..ea42c73
--- /dev/null
+++ b/db.py
@@ -0,0 +1,22 @@
+import redis
+
+class DB:
+ def __init__(self, host='localhost', port=6379):
+ self.db = redis.Redis(host=host, port=port, decode_responses=True)
+
+ def add_article(r, article):
+ r.db.hset(f"articles:{article['url']}", mapping=article)
+
+ def get_article(r, name):
+ return r.db.hgetall(f"articles:{name}")
+
+ def get_all_articles(r):
+ keys = r.get_all_articles_keys()
+ return [r.db.hgetall(key) for key in keys]
+
+ def get_all_articles_keys(r):
+ return [key for key in r.db.scan_iter(f"articles:*")]
+
+ def get_all_keys(r):
+ return [key for key in r.db.scan_iter("*")]
+
diff --git a/fonts/IBMPlexMono-Regular.ttf b/fonts/IBMPlexMono-Regular.ttf
deleted file mode 100644
index 90325c8..0000000
--- a/fonts/IBMPlexMono-Regular.ttf
+++ /dev/null
Binary files differ
diff --git a/index.html b/index.html
deleted file mode 100755
index 4b99370..0000000
--- a/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Jacob McDonnell</title>
- <meta name="description" content="This is the personal website for the real Jacob McDonnell.
- Feel free to look around, you might find something interesting."/>
- <meta name="author" content="Jacob McDonnell"/>
- <meta name="keywords" content="Jacob,McDonnell,Jacob McDonnell,jacob,mcdonnell,jacob mcdonnell"/>
- <link href="CSS/main.css" rel="stylesheet" type="text/css">
- <link href="favicon.ico" rel="icon" sizes="any">
- </head>
- <body>
- <ul class="topBar">
- <li class="topLink"><a href="https://jacobmcdonnell.com/">home</a></li>
- <li class="topLink"><a href="https://github.com/JacobMcDonnell">github</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/articles">articles</a></li>
- </ul>
- <div class="main">
- <h2>About</h2>
- <p>I'm Jacob McDonnell. I have been interested in computers since I was young.
- My father has been in the technology field since before I was born, so I guess that interest came from him.
- <br><br> My interests, with respect to computers, are programming, UNIX/Plan9, and electronics/hardware.
- I know how to program in Java thanks to a high school course, and I like the language for somethings.
- Currently, I am learning the Go programming language with the hope to replace Java for a nice compiled single binary file. I would like to write my own unix-like operating system one day.
- In my free time I like to play basketball, row, practice German and Russian, and play guitar. <br><br>
- I do not know what I will do with this website just yet, maybe I will write articles about projects that I am
- working on.</p>
- <h2>Projects</h2>
- <p><a href="https://github.com/JacobMcDonnell/jed">Jed</a> is my own version of ed, currently written in java.</p>
- <p><a href="https://github.com/JacobMcDonnell/ticalcprograms">Ticalcprograms</a> are a set of
- small programs written in C for the TI-84 Plus CE graphing calculator.</p>
- </div>
- </body>
-</html>
diff --git a/loadarticle.py b/loadarticle.py
new file mode 100755
index 0000000..451ddd6
--- /dev/null
+++ b/loadarticle.py
@@ -0,0 +1,34 @@
+import db
+import sys
+import datetime
+
+path = input("Enter path to db entry backup: ")
+sys.path.append(path)
+import dbbak
+
+r = db.DB()
+r.add_article(dbbak.db_entry)
+print(r.get_all_keys())
+print(r.get_article(dbbak.db_entry['url']))
+
+def gen_item(article):
+ date = article["date"].split("/")
+ date = datetime.date(int(date[2]), int(date[0]), int(date[1]))
+ item = [ '<item>', f'<title>{article["title"]}</title>', f'<guid>https://jacobmcdonnell.com/articles/article["url"]/</guid>', f'<link>https://jacobmcdonnell.com/articles/article["url"]/</link>', f'<pubDate>{date.strftime("%d %b %Y")} 00:00:00 -0500</pubDate>', '<description><![CDATA[', article["desc"],']]></description>', '</item>' ]
+ return "\n".join(item)
+
+def gen_rss():
+ rss = ['<?xml version="1.0" encoding="utf-8"?>', '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">', '<channel>', '<title>Jacob McDonnell</title>', '<description>Articles from Jacob McDonnell.</description>', '<language>en-us</language>', '<link>https://jacobmcdonnell.com/rss.xml</link>', '<atom:link href="https://jacobmcdonnell.com/rss.xml" rel="self" type="application/rss+xml" />', '<image>', '<title>Jacob McDonnell</title>', '<url>https://jacobmcdonnell.com/favicon.ico</url>', '<link>https://jacobmcdonnell.com/rss.xml</link>', '</image>' ]
+ articles = sorted(r.get_all_articles(), reverse=True, key=lambda d: d['id'])
+ for article in articles:
+ rss.append(gen_item(article))
+ rss.append("</channel></rss>")
+ rss = "\n".join(rss)
+ file = open("static/rss.xml", "w")
+ file.write(rss)
+ file.close()
+
+rss = input("Do you want to generate a new rss file? [y or n]: ")
+if rss == 'y':
+ gen_rss()
+
diff --git a/main.py b/main.py
new file mode 100755
index 0000000..7c530fc
--- /dev/null
+++ b/main.py
@@ -0,0 +1,73 @@
+from flask import Flask, render_template, send_file
+from markdown import markdown
+from db import DB
+
+app = Flask(__name__)
+r = DB()
+
+@app.route('/')
+def home():
+ return render_template("template.html", body=markdown(read_file("static/home.md")))
+
+@app.route('/articles/<site>/')
+def load_article(site):
+ '''Capture a given article page and load it'''
+ article = r.get_article(site)
+ body = markdown(read_file(article["file"]))
+ return render_template("articletemplate.html", body=body)
+
+@app.route('/articles/<article>/img/<image>')
+def get_article_images(article, image):
+ '''Capture a url for an image in an article and return the file'''
+ return send_file(f"static/articles/{article}/img/{image}", mimetype='image/png')
+
+@app.route('/articles/')
+def articles_page():
+ '''Render the main articles page'''
+ articles = sorted(r.get_all_articles(), reverse=True, key=lambda d: d['id'])
+ html = ['<div class="article">']
+ for article in articles:
+ html.append(f'<a href="{article["url"]}"><h2>{article["title"]}</h2><p>{article["date"]}<br>{article["desc"]}</p>')
+ html.append("</div>")
+ return render_template("articletemplate.html", body="".join(html))
+
+@app.route("/card")
+def get_card():
+ return send_file("static/business_card")
+
+@app.route("/rss.xml")
+@app.route("/rss")
+def get_rss():
+ return send_file("static/rss.xml")
+
+@app.route('/css/<file>')
+def get_css(file):
+ return send_file(f"static/css/{file}", mimetype='text/css')
+
+@app.route('/favicon.ico')
+def get_favicon():
+ return send_file("static/favicon.ico", mimetype='image/ico')
+
+@app.route('/robots.txt')
+def get_robots():
+ return send_file("static/robots.txt", mimetype='text/text')
+
+@app.route("/testpage")
+def test_page():
+ return render_template("template.html", body=read_file("static/testpage.html"))
+
+@app.errorhandler(404)
+@app.errorhandler(500)
+def page_not_found(e):
+ return render_template('template.html', body=markdown(read_file("static/404.md")))
+
+def read_file(file):
+ '''Read a given html file and return string'''
+ file = open(file, "r")
+ body = file.read()
+ file.close()
+ return body
+
+if __name__ == "__main__":
+ app.run(host="0.0.0.0")
+
diff --git a/robots.txt b/robots.txt
deleted file mode 100755
index 8cd68bd..0000000
--- a/robots.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-User-agent: *
-Disallow: /CSS
-Disallow: /JS
-Disallow: /Schoolproject
-Disallow: /images
-Disallow: /404.html
-Disallow: /template.html
-Disallow: /testPage.html
diff --git a/static/404.md b/static/404.md
new file mode 100755
index 0000000..39aa110
--- /dev/null
+++ b/static/404.md
@@ -0,0 +1,4 @@
+<center>
+# 404 Page Not Found
+Maybe you want to go to one of the pages in nav bar instead.
+</center>
diff --git a/README.md b/static/README.md
index 997cafb..997cafb 100755
--- a/README.md
+++ b/static/README.md
diff --git a/static/articles/rpilinuxserver/__pycache__/dbbak.cpython-310.pyc b/static/articles/rpilinuxserver/__pycache__/dbbak.cpython-310.pyc
new file mode 100755
index 0000000..2b2ab9d
--- /dev/null
+++ b/static/articles/rpilinuxserver/__pycache__/dbbak.cpython-310.pyc
Binary files differ
diff --git a/static/articles/rpilinuxserver/dbbak.py b/static/articles/rpilinuxserver/dbbak.py
new file mode 100755
index 0000000..900780d
--- /dev/null
+++ b/static/articles/rpilinuxserver/dbbak.py
@@ -0,0 +1,8 @@
+db_entry = {
+ "title": "Hosting a Website on the Raspberry Pi with Rocky Linux",
+ "date": "02/19/2022",
+ "file": "static/articles/rpilinuxserver/rpilinuxserver.md",
+ "desc": "A tutorial on setting up a webserver on a Raspberry Pi with Rocky Linux 8",
+ "url": "rpilinuxserver",
+ "id": 1
+}
diff --git a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.15.13 PM.png b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.15.13PM.png
index 34b57f4..34b57f4 100644..100755
--- a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.15.13 PM.png
+++ b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.15.13PM.png
Binary files differ
diff --git a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.18.39 PM.png b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.18.39PM.png
index 6ef28ff..6ef28ff 100644..100755
--- a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.18.39 PM.png
+++ b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.18.39PM.png
Binary files differ
diff --git a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.23.20 PM.png b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.23.20PM.png
index cbc9b47..cbc9b47 100644..100755
--- a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.23.20 PM.png
+++ b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.23.20PM.png
Binary files differ
diff --git a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.56.21 PM.png b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.56.21PM.png
index 2482da0..2482da0 100644..100755
--- a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.56.21 PM.png
+++ b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.56.21PM.png
Binary files differ
diff --git a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.58.29 PM.png b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.58.29PM.png
index c952586..c952586 100644..100755
--- a/articles/RpiRockyLinuxServer/img/Screen Shot 2022-02-19 at 2.58.29 PM.png
+++ b/static/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.58.29PM.png
Binary files differ
diff --git a/articles/RpiRockyLinuxServer/rpi4rockylinuxwebserver.md b/static/articles/rpilinuxserver/rpilinuxserver.md
index fa93505..e89ff5e 100644..100755
--- a/articles/RpiRockyLinuxServer/rpi4rockylinuxwebserver.md
+++ b/static/articles/rpilinuxserver/rpilinuxserver.md
@@ -1,165 +1,193 @@
# Hosting a Website on the Raspberry Pi with Rocky Linux
-First Download Rocky Linux for the Raspberry Pi 3 & 4 from [their website](https://rockylinux.org/alternative-images).![Screen Shot 2022-02-19 at 2.15.13 PM](img/Screen Shot 2022-02-19 at 2.15.13 PM.png)
+First Download Rocky Linux for the Raspberry Pi 3 & 4 from
+[their website](https://rockylinux.org/alternative-images).
-Next you want to burn this image to the sd card that you are going to use. Now start up the Raspberry Pi and login with the default user `rocky` and the password is `rockylinux`.
+<center>
+![Screen Shot 2022-02-19 at 2.15.13 PM](/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.15.13PM.png)
+</center>
+
+Next you want to burn this image to the sd card that you are going to use. Now
+start up the Raspberry Pi and login with the default user `rocky` and the
+password is `rockylinux`.
To make the image take up the whole drive, run:
-```sh
+<pre><code>
sudo rootfs-expand
-```
+</pre></code>
Now, you should create a new user:
-```sh
+<pre><code>
sudo useradd -m -g users -G wheel userName
sudo passwd username
-```
+</pre></code>
Next, we should delete the default user so logout and login to your new user:
-```sh
+<pre><code>
sudo userdel rocky
-```
+</pre></code>
***
-## Setting a static IP address
+## Setting a static IP address
The easiest way is to run:
-```shell
+<pre><code>
sudo nmtui
-```
+</pre></code>
-![Screen Shot 2022-02-19 at 2.18.39 PM](img/Screen Shot 2022-02-19 at 2.18.39 PM.png)
+<center>
+![Screen Shot 2022-02-19 at 2.18.39 PM](/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.18.39PM.png)
+</center>
-Select **Edit** a connection and select your network interface.
+Select **Edit** a connection and select your network interface.
-![Screen Shot 2022-02-19 at 2.23.20 PM](img/Screen Shot 2022-02-19 at 2.23.20 PM.png)
+<center>
+![Screen Shot 2022-02-19 at 2.23.20 PM](/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.23.20PM.png)
+</center>
-Select **Show** for **IPv4 CONFIGURATION** and enter the IP you want to set. Then select **OK** at the bottom, and quit the program.
+Select **Show** for **IPv4 CONFIGURATION** and enter the IP you want to set.
+Then select **OK** at the bottom, and quit the program.
## Securing the PI
### SSH Key Authorization
-The best way to secure the pi is to use an SSH key to login instead of a password. First you want to generate an SSH key by running on your computer:
+The best way to secure the pi is to use an SSH key to login instead of a
+password. First you want to generate an SSH key by running on your computer:
-```sh
+<pre><code>
ssh-keygen -t rsa
-```
+</pre></code>
Next, to copy your SSH key to your server, run:
-```sh
+<pre><code>
ssh-copy-id -i ~/.ssh/mykey user@host
-```
+</pre></code>
To test that it works, run:
-```sh
+<pre><code>
ssh -i ~/.ssh/mykey user@host
-```
+</pre></code>
If it worked, you should be able to connect without needing a password.
To force an SSH key to login, edit `/etc/ssh/sshd_config` using nano or vim.
-Change `PermitRootLogin yes` to `PermitRootLogin no` and `PasswordAuthentication yes` to `PasswordAuthentication no`.
+Change
+
+<pre><code>
+PermitRootLogin yes
+PasswordAuthentication yes
+</code></pre>
+to
+<pre><code>
+PermitRootLogin no
+PasswordAuthentication no
+</pre></code>
### Setting up fail2ban
First start and enable firewalld to run at boot:
-```sh
+<pre><code>
sudo systemctl start firewalld
sudo systemctl enable firewalld
-```
+</pre></code>
Now, enable the EPEL repository for Rocky Linux and install fail2ban:
-```sh
+<pre><code>
sudo dnf install epel-release -y
sudo dnf install fail2ban fail2ban-firewalld -y
-```
+</pre></code>
Start and enable fail2ban to run at boot:
-```sh
+<pre><code>
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
-```
+</pre></code>
Now, we have to make fail2ban work with firewalld, run:
-```sh
+<pre><code>
sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
sudo systemctl restart fail2ban
-```
+</pre></code>
To create an SSH jail, edit the ssh config file with nano or vim:
-```sh
+<pre><code>
sudo nano /etc/fail2ban/jail.d/sshd.local
-```
+</pre></code>
Paste the following into the file and change the values as you see fit:
-```
+<pre><code>
[sshd]
enabled = true
bantime = 1d
maxretry = 3
-```
+</pre></code>
Save and close the file and restart fail2ban:
-```sh
+<pre><code>
sudo systemctl restart fail2ban
-```
+</pre></code>
## Setting up Dynamic DNS with Google Domains
### Configuring Google Domains
-First, on [Domains.google.com](https://domains.google.com/) go the DNS page for your domain. Scroll down and click on **Show advanced settings**, Click **Manage dynamic DNS**, and then click **Create new record**. Enter your subdomain or leave it black for the domain itself. Finally, click Save.
+First, on [Domains.google.com](https://domains.google.com/) go the DNS page for
+your domain. Scroll down and click on **Show advanced settings**, Click **Manage
+dynamic DNS**, and then click **Create new record**. Enter your subdomain or
+leave it black for the domain itself. Finally, click Save.
### Installing ddclient
-To install ddclient you need to enable the PowerTools Repo for the perl dependency.
+To install ddclient you need to enable the PowerTools Repo for the perl
+dependency.
First, install `dnf-plugins-core`:
-```sh
+<pre><code>
sudo dnf -y install dnf-plugins-core
sudo dnf upgrade
-```
+</pre></code>
Next, enable PowerTools:
-```sh
+<pre><code>
sudo dnf config-manager --set-enabled powertools
-```
+</pre></code>
Then, you can install ddclient:
-```sh
+<pre><code>
sudo dnf install ddclient
-```
+</pre></code>
Now, we want to edit the config file for ddclient:
-```sh
+<pre><code>
sudo nano /etc/ddclient.conf
-```
+</pre></code>
-You'll want to look for where it says `protocol=dyndns2`, and enter your information:
+You'll want to look for where it says `protocol=dyndns2`, and enter your
+information:
-```
+<pre><code>
##
## nsupdate.info IPV4(https://www.nsupdate.info)
##
@@ -169,9 +197,10 @@ server=domains.google.com
login=username
password=password
domain.tld
-```
+</pre></code>
-Wait about 5 minutes and on the Google Domains website, under Dynamic DNS you should see your IP address under **Data**.
+Wait about 5 minutes and on the Google Domains website, under Dynamic DNS you
+should see your IP address under **Data**.
## Setting up NGINX and Let's Encrypt
@@ -179,61 +208,66 @@ Wait about 5 minutes and on the Google Domains website, under Dynamic DNS you sh
First, install nginx Webserver:
-```sh
+<pre><code>
sudo dnf install nginx
-```
+</pre></code>
Next, start and enable nginx to run at boot:
-```sh
+<pre><code>
sudo systemctl start nginx
sudo systemctl enable nginx
-```
+</pre></code>
Then, check the status to see if it is running:
-```sh
+<pre><code>
sudo systemctl status nginx
-```
+</pre></code>
-![Screen Shot 2022-02-19 at 2.56.21 PM](img/Screen Shot 2022-02-19 at 2.56.21 PM.png)
+<center>
+![Screen Shot 2022-02-19 at 2.56.21 PM](/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.56.21PM.png)
+</center>
Now, we have to allow HTTP traffic through the firewall:
-```sh
+<pre><code>
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
-```
+</pre></code>
-In a web browser, go to the local ip of the server and you should see the nginx welcome page.
+In a web browser, go to the local ip of the server and you should see the nginx
+welcome page.
-![Screen Shot 2022-02-19 at 2.58.29 PM](img/Screen Shot 2022-02-19 at 2.58.29 PM.png)
+<center>
+![Screen Shot 2022-02-19 at 2.58.29 PM](/articles/rpilinuxserver/img/ScreenShot2022-02-19at2.58.29PM.png)
+</center>
### Configuring NGINX
First, make your folder for the website, this is where your website will live:
-```sh
+<pre><code>
sudo mkdir -p /var/www/websiteName
-```
+</pre></code>
Next, we need to set the proper permissions to make sure everything works:
-```sh
+<pre><code>
sudo chown -R nginx /var/www/websiteName
sudo chmod -R 755 /var/www/websiteName
-```
+</pre></code>
Now, we will create the config file for website:
-```sh
+<pre><code>
sudo nano /etc/nginx/conf.d/websiteName.conf
-```
+</pre></code>
and paste the following into the file:
-```
+<pre><code>
server {
listen 80;
server_name domain.tld www.domain.tld;
@@ -242,62 +276,64 @@ server {
access_log /var/log/nginx/websiteName.access.log;
error_log /var/log/nginx/websiteName.error.log;
}
-```
+</pre></code>
Now, confirm that the nginx configuration is ok:
-```sh
+<pre><code>
sudo nginx -t
-```
+</pre></code>
Restart nginx:
-```sh
+<pre><code>
sudo systemctl restart nginx
sudo systemctl status nginx
-```
+</pre></code>
Next, set SELinux to permissive mode:
-```sh
+<pre><code>
sudo setenforce permissive
sudo getenforce
-```
+</pre></code>
Now, we will need to set SELinux to permissive mode permanently:
-```sh
+<pre><code>
sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
-```
+</pre></code>
### Installing and Running Certbot
To install Certbot run:
-```sh
+<pre><code>
sudo dnf install certbot python3-certbot-nginx
-```
+</pre></code>
To get SSL certificates for your websites run:
-```sh
+<pre><code>
sudo certbot --nginx
-```
+</pre></code>
Answer the prompts that show up on screen as you wish.
To configure auto renewal of the SSL certificate run:
-```sh
+<pre><code>
crontab -e
-```
+</pre></code>
and add the following line:
-```
+<pre><code>
0 12 * * * /usr/bin/certbot renew --quiet
-```
+</pre></code>
+
+This will check everyday at noon to see if the certificate will expire in the
+next month, if so it will renew the certificate.
-This will check everyday at noon to see if the certificate will expire in the next month, if so it will renew the certificate.
+Now your website should be operational.
-Now your website should be operational.
diff --git a/static/business_card b/static/business_card
new file mode 100755
index 0000000..1f838b9
--- /dev/null
+++ b/static/business_card
@@ -0,0 +1,13 @@
+╭──────────────────────────────────────────────────────────────╮
+│ │
+│ Jacob McDonnell │
+│ │
+│ Email: jacob@jacobmcdonnell.com │
+│ Web: https://jacobmcdonnell.com/ │
+│ │
+│ GitHub: https://github.com/JacobMcDonnell │
+│ LinkedIn: https://linkedin.com/JacobMcDonnell │
+│ │
+│ Card: curl -sL https://jacobmcdonnell.com/card │
+│ │
+╰──────────────────────────────────────────────────────────────╯
diff --git a/CSS/main.css b/static/css/main.css
index e75c336..445f082 100644..100755
--- a/CSS/main.css
+++ b/static/css/main.css
@@ -133,6 +133,16 @@ div.article a{
text-decoration:none;
display:block;
}
-img.imgs {
+
+/* Highlighting of article title */
+/* div.article{ */
+/* padding: 0.625rem; */
+/* } */
+
+/* div.article a:hover{ */
+/* background-color:var(--color-2); */
+/* } */
+
+img {
width:75%;
-} \ No newline at end of file
+}
diff --git a/favicon.ico b/static/favicon.ico
index 2224936..2224936 100644..100755
--- a/favicon.ico
+++ b/static/favicon.ico
Binary files differ
diff --git a/static/home.md b/static/home.md
new file mode 100755
index 0000000..69e7533
--- /dev/null
+++ b/static/home.md
@@ -0,0 +1,23 @@
+## About
+I'm Jacob McDonnell. I have been interested in computers since I was young.
+My father has been in the technology field since before I was born, so I guess
+that interest came from him.
+
+My interests, with respect to computers, are programming, UNIX/Plan9, and
+electronics/hardware. I know how to program in Java thanks to a high school
+course, and I like the language for somethings. Currently, I am learning the
+Go programming language with the hope to replace Java for a nice compiled
+single binary file. I would like to write my own unix-like operating system one
+day. In my free time I like to play basketball, row, practice German and
+Russian, and play guitar.
+
+I do not know what I will do with this website just yet, maybe I will write
+articles about projects that I am working on.
+
+## Projects
+[This Website](https://github.com/JacobMcDonnell/JacobMcDonnell.com) is written
+in Python using Flask.
+
+[Jed](https://github.com/JacobMcDonnell/jed) is my own version of ed, currently
+written in java.
+
diff --git a/images/LOGO_21x127.png b/static/images/LOGO_21x127.png
index 22e3daf..22e3daf 100755
--- a/images/LOGO_21x127.png
+++ b/static/images/LOGO_21x127.png
Binary files differ
diff --git a/images/LOGO_21x127.svg b/static/images/LOGO_21x127.svg
index c888b2f..c888b2f 100755
--- a/images/LOGO_21x127.svg
+++ b/static/images/LOGO_21x127.svg
diff --git a/images/LOGO_Transparent.png b/static/images/LOGO_Transparent.png
index 43e6e4f..43e6e4f 100755
--- a/images/LOGO_Transparent.png
+++ b/static/images/LOGO_Transparent.png
Binary files differ
diff --git a/images/LOGO_Transparent.svg b/static/images/LOGO_Transparent.svg
index c4eb9c6..c4eb9c6 100755
--- a/images/LOGO_Transparent.svg
+++ b/static/images/LOGO_Transparent.svg
diff --git a/images/SideFlareGreen.svg b/static/images/SideFlareGreen.svg
index 130f9f1..130f9f1 100755
--- a/images/SideFlareGreen.svg
+++ b/static/images/SideFlareGreen.svg
diff --git a/images/SideFlarePurple.svg b/static/images/SideFlarePurple.svg
index 2249c62..2249c62 100755
--- a/images/SideFlarePurple.svg
+++ b/static/images/SideFlarePurple.svg
diff --git a/images/favicon.xcf b/static/images/favicon.xcf
index 344fd42..344fd42 100644..100755
--- a/images/favicon.xcf
+++ b/static/images/favicon.xcf
Binary files differ
diff --git a/images/menu.svg b/static/images/menu.svg
index 7f1a394..7f1a394 100755
--- a/images/menu.svg
+++ b/static/images/menu.svg
diff --git a/images/wave.svg b/static/images/wave.svg
index 130f9f1..130f9f1 100755
--- a/images/wave.svg
+++ b/static/images/wave.svg
diff --git a/static/robots.txt b/static/robots.txt
new file mode 100755
index 0000000..14067d6
--- /dev/null
+++ b/static/robots.txt
@@ -0,0 +1,6 @@
+User-agent: *
+Disallow: /css
+Disallow: /images
+Disallow: /404.html
+Disallow: /testPage
+
diff --git a/static/rss.xml b/static/rss.xml
new file mode 100755
index 0000000..badc2e5
--- /dev/null
+++ b/static/rss.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+<channel>
+<title>Jacob McDonnell</title>
+<description>Articles from Jacob McDonnell.</description>
+<language>en-us</language>
+<link>https://jacobmcdonnell.com/rss.xml</link>
+<atom:link href="https://jacobmcdonnell.com/rss.xml" rel="self" type="application/rss+xml" />
+<image>
+<title>Jacob McDonnell</title>
+<url>https://jacobmcdonnell.com/favicon.ico</url>
+<link>https://jacobmcdonnell.com/rss.xml</link>
+</image>
+<item>
+<title>Hosting a Website on the Raspberry Pi with Rocky Linux</title>
+<guid>https://jacobmcdonnell.com/articles/article["url"]/</guid>
+<link>https://jacobmcdonnell.com/articles/article["url"]/</link>
+<pubDate>19 Feb 2022 00:00:00 -0500</pubDate>
+<description><![CDATA[
+A tutorial on setting up a webserver on a Raspberry Pi with Rocky Linux 8
+]]></description>
+</item>
+</channel></rss> \ No newline at end of file
diff --git a/static/testpage.html b/static/testpage.html
new file mode 100755
index 0000000..382cbf2
--- /dev/null
+++ b/static/testpage.html
@@ -0,0 +1,75 @@
+<h2><a name="projects">Projects</a></h2>
+<p><a href="https://github.com/JacobMcDonnell/jed">Jed</a> is my own version of jed, currently written in java.</p>
+<p><a href="https://github.com/JacobMcDonnell/ticalcprograms">Ticalcprograms</a> are a set of small programs written in C for the TI-84 Pluse CE graphing calculator.</p>
+<h2><a name="about">About</a></h2>
+<p>I'm Jacob McDonnell. I have been interested in computers since I was young. My father has been in the technology field since before I was born, so I guess that interest came from him. <br><br> My interests, with respect to computers, are programming, UNIX/Plan9, and electronics/hardware. I know how to program in Java thanks to a high school course, and I like the language for somethings. Currently I am learning the C programming language with the hopes to write my own operating system one day. In my free time I like to play basketball, row, practice German and Russian, and play guitar. <br><br> I do not know what I will do with this website just yet, maybe I will write articles about projects that I am working on.</p>
+<pre>
+<code lang="c">
+#include &lt;stdio.h&gt;
+
+int
+main(void) {
+printf("hello world\n");
+return 0;
+}
+</code>
+</pre>
+<hr>
+<h1 id='jed---jacobs-ed'>JED - Jacob&#39;s ed</h1>
+<p>Jed is a line mode text editor written in Java. It is similar to ed but not a clone, infact the commands are changed. It currently works but has much room for improvement.</p>
+<h2 id='commands'>Commands</h2>
+<pre><code>
+Jed commands:
+
+q: quits.
+
+w: writes the file.
+
+w: filename: writes with inputted name.
+
+o: filename: opens the file.
+
+a: appends user input to the end of the file.
+
+A: appends user input after the current line.
+
+p: prints the file.
+
+n: prints the file with line numbers.
+
+c: deletes and changes the current line.
+
+d: deletes the current line.
+
+Any integer: changes to that line number.
+
+g/expression/: finds and prints the expression.
+
+%s/expression/newExpression/: replaces an expression
+with new user input through the whole file.
+
+zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
+
+&lt;integer, integer&gt;: prefix works with d
+and s/ex/nex/ for a range of line.
+
+s/expression/newExpression/: replaces an
+expression with new user input in the current line.
+
+h: prints the commands and their description.
+</code></pre>
+<h2 id='building-jed'>Building Jed</h2>
+<pre><code>
+make
+sudo cp jed /usr/bin/jed &amp;&amp; sudo cp jed.jar /usr/bin/jed.jar
+</code></pre>
+<h2 id='todo'>TODO</h2>
+<ul>
+<li>Add Regex support</li>
+<li>check and rewrite poorly written functions</li>
+</ul>
+<hr>
+<h1>Test of Equations</h1>
+<!-- this is code exported from Typora for an equation -->
+<center><div contenteditable="false" spellcheck="false" class="mathjax-block md-end-block md-math-block md-rawblock" id="mathjax-n14" cid="n14" mdtype="math_block" data-math-tag-before="0" data-math-tag-after="0" data-math-labels="[]"><div class="md-rawblock-container md-math-container" tabindex="-1"><mjx-container class="MathJax" jax="SVG" display="true" style="position: relative;"><svg xmlns="http://www.w3.org/2000/svg" width="32.746ex" height="6.373ex" role="img" focusable="false" viewBox="0 -1571 14473.6 2816.9" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" style="vertical-align: -2.819ex;"><defs><path id="MJX-1-TEX-LO-2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path><path id="MJX-1-TEX-I-1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path><path id="MJX-1-TEX-N-3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path><path id="MJX-1-TEX-N-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path id="MJX-1-TEX-N-221E" d="M55 217Q55 305 111 373T254 442Q342 442 419 381Q457 350 493 303L507 284L514 294Q618 442 747 442Q833 442 888 374T944 214Q944 128 889 59T743 -11Q657 -11 580 50Q542 81 506 128L492 147L485 137Q381 -11 252 -11Q166 -11 111 57T55 217ZM907 217Q907 285 869 341T761 397Q740 397 720 392T682 378T648 359T619 335T594 310T574 285T559 263T548 246L543 238L574 198Q605 158 622 138T664 94T714 61T765 51Q827 51 867 100T907 217ZM92 214Q92 145 131 89T239 33Q357 33 456 193L425 233Q364 312 334 337Q285 380 233 380Q171 380 132 331T92 214Z"></path><path id="MJX-1-TEX-I-1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path id="MJX-1-TEX-I-1D459" d="M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z"></path><path id="MJX-1-TEX-N-28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path><path id="MJX-1-TEX-N-29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path><path id="MJX-1-TEX-N-6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z"></path><path id="MJX-1-TEX-N-69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z"></path><path id="MJX-1-TEX-N-6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z"></path><path id="MJX-1-TEX-I-1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z"></path><path id="MJX-1-TEX-N-2192" d="M56 237T56 250T70 270H835Q719 357 692 493Q692 494 692 496T691 499Q691 511 708 511H711Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H70Q56 237 56 250Z"></path><path id="MJX-1-TEX-LO-222B" d="M114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798Z"></path><path id="MJX-1-TEX-I-1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="munderover"><g data-mml-node="mo"><use data-c="2211" xlink:href="#MJX-1-TEX-LO-2211"></use></g><g data-mml-node="TeXAtom" transform="translate(58,-1087.9) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="1D45B" xlink:href="#MJX-1-TEX-I-1D45B"></use></g><g data-mml-node="mo" transform="translate(600,0)"><use data-c="3D" xlink:href="#MJX-1-TEX-N-3D"></use></g><g data-mml-node="mn" transform="translate(1378,0)"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g></g><g data-mml-node="TeXAtom" transform="translate(368.4,1150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="221E" xlink:href="#MJX-1-TEX-N-221E"></use></g></g></g><g data-mml-node="mfrac" transform="translate(1610.7,0)"><g data-mml-node="mn" transform="translate(1380,676)"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g><g data-mml-node="mrow" transform="translate(220,-710)"><g data-mml-node="mi"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mi" transform="translate(572,0)"><use data-c="1D459" xlink:href="#MJX-1-TEX-I-1D459"></use></g><g data-mml-node="mi" transform="translate(870,0)"><use data-c="1D45B" xlink:href="#MJX-1-TEX-I-1D45B"></use></g><g data-mml-node="mo" transform="translate(1470,0)"><use data-c="28" xlink:href="#MJX-1-TEX-N-28"></use></g><g data-mml-node="mi" transform="translate(1859,0)"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mo" transform="translate(2431,0)"><use data-c="29" xlink:href="#MJX-1-TEX-N-29"></use></g></g><rect width="3020" height="60" x="120" y="220"></rect></g><g data-mml-node="mo" transform="translate(5148.4,0)"><use data-c="3D" xlink:href="#MJX-1-TEX-N-3D"></use></g><g data-mml-node="munder" transform="translate(6204.2,0)"><g data-mml-node="mo" transform="translate(281,0)"><use data-c="6C" xlink:href="#MJX-1-TEX-N-6C"></use><use data-c="69" xlink:href="#MJX-1-TEX-N-69" transform="translate(278,0)"></use><use data-c="6D" xlink:href="#MJX-1-TEX-N-6D" transform="translate(556,0)"></use></g><g data-mml-node="TeXAtom" transform="translate(0,-650) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="1D445" xlink:href="#MJX-1-TEX-I-1D445"></use></g><g data-mml-node="mo" transform="translate(759,0)"><use data-c="2192" xlink:href="#MJX-1-TEX-N-2192"></use></g><g data-mml-node="mi" transform="translate(1759,0)"><use data-c="221E" xlink:href="#MJX-1-TEX-N-221E"></use></g></g></g><g data-mml-node="msubsup" transform="translate(8321.8,0)"><g data-mml-node="mo" transform="translate(0 1)"><use data-c="222B" xlink:href="#MJX-1-TEX-LO-222B"></use></g><g data-mml-node="TeXAtom" transform="translate(1046.4,1088.1) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="1D445" xlink:href="#MJX-1-TEX-I-1D445"></use></g></g><g data-mml-node="TeXAtom" transform="translate(589,-896.4) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mn"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g></g></g><g data-mml-node="mfrac" transform="translate(10121.6,0)"><g data-mml-node="mn" transform="translate(1380,676)"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g><g data-mml-node="mrow" transform="translate(220,-710)"><g data-mml-node="mi"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mi" transform="translate(572,0)"><use data-c="1D459" xlink:href="#MJX-1-TEX-I-1D459"></use></g><g data-mml-node="mi" transform="translate(870,0)"><use data-c="1D45B" xlink:href="#MJX-1-TEX-I-1D45B"></use></g><g data-mml-node="mo" transform="translate(1470,0)"><use data-c="28" xlink:href="#MJX-1-TEX-N-28"></use></g><g data-mml-node="mi" transform="translate(1859,0)"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mo" transform="translate(2431,0)"><use data-c="29" xlink:href="#MJX-1-TEX-N-29"></use></g></g><rect width="3020" height="60" x="120" y="220"></rect></g><g data-mml-node="mi" transform="translate(13381.6,0)"><use data-c="1D451" xlink:href="#MJX-1-TEX-I-1D451"></use></g><g data-mml-node="mi" transform="translate(13901.6,0)"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g></g></g></svg></mjx-container></div></div></center>
+<br><br>
diff --git a/template.html b/template.html
deleted file mode 100755
index 4150317..0000000
--- a/template.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Jacob McDonnell</title>
- <link href="CSS/main.css" rel="stylesheet" type="text/css">
- <link href="favicon.ico" rel="icon" sizes="any">
- </head>
- <body>
- <ul class="topBar">
- <li class="topLink"><a href="https://jacobmcdonnell.com/">home</a></li>
- <li class="topLink"><a href="https://github.com/JacobMcDonnell">github</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/articles">articles</a></li>
- </ul>
- <div class="main">
- </div>
- </body>
-</html>
diff --git a/404.html b/templates/404.html
index 66918f5..66918f5 100755
--- a/404.html
+++ b/templates/404.html
diff --git a/templates/articletemplate.html b/templates/articletemplate.html
new file mode 100755
index 0000000..4ba1204
--- /dev/null
+++ b/templates/articletemplate.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Raspberry Pi Rocky Linux Webserver</title>
+ <link href="/css/main.css" rel="stylesheet" type="text/css">
+ <link href="/favicon.ico" rel="icon" sizes="any">
+ <meta name="description" content="A tutorial on setting up a webserver on a Raspberry Pi with Rocky Linux 8"/>
+ <meta name="author" content="Jacob McDonnell"/>
+ <meta name="keywords" content="rocky,rocky linux,linux,raspberry pi,webserver,nginx,certbot,website"/>
+ </head>
+ <body>
+ <ul class="topBar">
+ <li class="topLink"><a href="/">home</a></li>
+ <li class="topLink"><a href="/articles">articles</a></li>
+ <li class="topLink"><a href="/rss">rss feed</a></li>
+ </ul>
+ <div class="main">
+ {{body|safe}}
+ </div>
+ </body>
+</html>
diff --git a/templates/template.html b/templates/template.html
new file mode 100755
index 0000000..a4e8c28
--- /dev/null
+++ b/templates/template.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta http-equiv="Cache-control" content="public">
+ <meta name="description" content="This is the personal website for the real Jacob McDonnell.
+ Feel free to look around, you might find something interesting."/>
+ <meta name="author" content="Jacob McDonnell"/>
+ <meta name="keywords" content="Jacob,McDonnell,Jacob McDonnell,jacob,mcdonnell,jacob mcdonnell"/>
+ <title>Jacob McDonnell</title>
+ <link href="/css/main.css" rel="stylesheet" type="text/css">
+ <link href="/favicon.ico" rel="icon" sizes="any">
+ </head>
+ <body>
+ <ul class="topBar">
+ <li class="topLink"><a href="/">home</a></li>
+ <li class="topLink"><a href="https://github.com/JacobMcDonnell">github</a></li>
+ <li class="topLink"><a href="/articles">articles</a></li>
+ </ul>
+ <div class="main">
+ {{body|safe}}
+ </div>
+ </body>
+</html>
diff --git a/testPage.html b/testPage.html
deleted file mode 100755
index fac740e..0000000
--- a/testPage.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Jacob McDonnell</title>
- <meta name="description" content="This is the personal website for the real Jacob McDonnell. Feel free to look around, you might find something interesting."/>
- <meta name="author" content="Jacob McDonnell"/>
- <meta name="keywords" content="Jacob,McDonnell,Jacob McDonnell,jacob,mcdonnell,jacob mcdonnell"/>
- <link href="CSS/main.css" rel="stylesheet" type="text/css">
- <link href="favicon.ico" rel="icon" sizes="any">
- </head>
- <body>
- <script>hljs.highlightAll();</script>
- <ul class="topBar">
- <li class="topLink"><a href="https://jacobmcdonnell.com/">home</a></li>
- <li class="topLink"><a href="https://github.com/JacobMcDonnell">github</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/#projects">projects</a></li>
- <li class="topLink"><a href="https://jacobmcdonnell.com/#about">about</a></li>
- </ul>
- <div class="main">
- <h2><a name="projects">Projects</a></h2>
- <p><a href="https://github.com/JacobMcDonnell/jed">Jed</a> is my own version of jed, currently written in java.</p>
- <p><a href="https://github.com/JacobMcDonnell/ticalcprograms">Ticalcprograms</a> are a set of small programs written in C for the TI-84 Pluse CE graphing calculator.</p>
- <h2><a name="about">About</a></h2>
- <p>I'm Jacob McDonnell. I have been interested in computers since I was young. My father has been in the technology field since before I was born, so I guess that interest came from him. <br><br> My interests, with respect to computers, are programming, UNIX/Plan9, and electronics/hardware. I know how to program in Java thanks to a high school course, and I like the language for somethings. Currently I am learning the C programming language with the hopes to write my own operating system one day. In my free time I like to play basketball, row, practice German and Russian, and play guitar. <br><br> I do not know what I will do with this website just yet, maybe I will write articles about projects that I am working on.</p>
- <pre>
- <code lang="c">
-#include &lt;stdio.h&gt;
-
-int
-main(void) {
- printf("hello world\n");
- return 0;
-}
- </code>
- </pre>
- <hr>
- <h1 id='jed---jacobs-ed'>JED - Jacob&#39;s ed</h1>
- <p>Jed is a line mode text editor written in Java. It is similar to ed but not a clone, infact the commands are changed. It currently works but has much room for improvement.</p>
- <h2 id='commands'>Commands</h2>
- <pre><code>
-Jed commands:
-
-q: quits.
-
-w: writes the file.
-
-w: filename: writes with inputted name.
-
-o: filename: opens the file.
-
-a: appends user input to the end of the file.
-
-A: appends user input after the current line.
-
-p: prints the file.
-
-n: prints the file with line numbers.
-
-c: deletes and changes the current line.
-
-d: deletes the current line.
-
-Any integer: changes to that line number.
-
-g/expression/: finds and prints the expression.
-
-%s/expression/newExpression/: replaces an expression
-with new user input through the whole file.
-
-zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
-
-&lt;integer, integer&gt;: prefix works with d
-and s/ex/nex/ for a range of line.
-
-s/expression/newExpression/: replaces an
-expression with new user input in the current line.
-
-h: prints the commands and their description.
- </code></pre>
- <h2 id='building-jed'>Building Jed</h2>
- <pre><code>
-make
-sudo cp jed /usr/bin/jed &amp;&amp; sudo cp jed.jar /usr/bin/jed.jar
- </code></pre>
- <h2 id='todo'>TODO</h2>
- <ul>
- <li>Add Regex support</li>
- <li>check and rewrite poorly written functions</li>
- </ul>
- <hr>
- <h1>Test of Equations</h1>
- <!-- this is code exported from Typora for an equation -->
- <center><div contenteditable="false" spellcheck="false" class="mathjax-block md-end-block md-math-block md-rawblock" id="mathjax-n14" cid="n14" mdtype="math_block" data-math-tag-before="0" data-math-tag-after="0" data-math-labels="[]"><div class="md-rawblock-container md-math-container" tabindex="-1"><mjx-container class="MathJax" jax="SVG" display="true" style="position: relative;"><svg xmlns="http://www.w3.org/2000/svg" width="32.746ex" height="6.373ex" role="img" focusable="false" viewBox="0 -1571 14473.6 2816.9" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" style="vertical-align: -2.819ex;"><defs><path id="MJX-1-TEX-LO-2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path><path id="MJX-1-TEX-I-1D45B" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path><path id="MJX-1-TEX-N-3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path><path id="MJX-1-TEX-N-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path id="MJX-1-TEX-N-221E" d="M55 217Q55 305 111 373T254 442Q342 442 419 381Q457 350 493 303L507 284L514 294Q618 442 747 442Q833 442 888 374T944 214Q944 128 889 59T743 -11Q657 -11 580 50Q542 81 506 128L492 147L485 137Q381 -11 252 -11Q166 -11 111 57T55 217ZM907 217Q907 285 869 341T761 397Q740 397 720 392T682 378T648 359T619 335T594 310T574 285T559 263T548 246L543 238L574 198Q605 158 622 138T664 94T714 61T765 51Q827 51 867 100T907 217ZM92 214Q92 145 131 89T239 33Q357 33 456 193L425 233Q364 312 334 337Q285 380 233 380Q171 380 132 331T92 214Z"></path><path id="MJX-1-TEX-I-1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path id="MJX-1-TEX-I-1D459" d="M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z"></path><path id="MJX-1-TEX-N-28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path><path id="MJX-1-TEX-N-29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path><path id="MJX-1-TEX-N-6C" d="M42 46H56Q95 46 103 60V68Q103 77 103 91T103 124T104 167T104 217T104 272T104 329Q104 366 104 407T104 482T104 542T103 586T103 603Q100 622 89 628T44 637H26V660Q26 683 28 683L38 684Q48 685 67 686T104 688Q121 689 141 690T171 693T182 694H185V379Q185 62 186 60Q190 52 198 49Q219 46 247 46H263V0H255L232 1Q209 2 183 2T145 3T107 3T57 1L34 0H26V46H42Z"></path><path id="MJX-1-TEX-N-69" d="M69 609Q69 637 87 653T131 669Q154 667 171 652T188 609Q188 579 171 564T129 549Q104 549 87 564T69 609ZM247 0Q232 3 143 3Q132 3 106 3T56 1L34 0H26V46H42Q70 46 91 49Q100 53 102 60T104 102V205V293Q104 345 102 359T88 378Q74 385 41 385H30V408Q30 431 32 431L42 432Q52 433 70 434T106 436Q123 437 142 438T171 441T182 442H185V62Q190 52 197 50T232 46H255V0H247Z"></path><path id="MJX-1-TEX-N-6D" d="M41 46H55Q94 46 102 60V68Q102 77 102 91T102 122T103 161T103 203Q103 234 103 269T102 328V351Q99 370 88 376T43 385H25V408Q25 431 27 431L37 432Q47 433 65 434T102 436Q119 437 138 438T167 441T178 442H181V402Q181 364 182 364T187 369T199 384T218 402T247 421T285 437Q305 442 336 442Q351 442 364 440T387 434T406 426T421 417T432 406T441 395T448 384T452 374T455 366L457 361L460 365Q463 369 466 373T475 384T488 397T503 410T523 422T546 432T572 439T603 442Q729 442 740 329Q741 322 741 190V104Q741 66 743 59T754 49Q775 46 803 46H819V0H811L788 1Q764 2 737 2T699 3Q596 3 587 0H579V46H595Q656 46 656 62Q657 64 657 200Q656 335 655 343Q649 371 635 385T611 402T585 404Q540 404 506 370Q479 343 472 315T464 232V168V108Q464 78 465 68T468 55T477 49Q498 46 526 46H542V0H534L510 1Q487 2 460 2T422 3Q319 3 310 0H302V46H318Q379 46 379 62Q380 64 380 200Q379 335 378 343Q372 371 358 385T334 402T308 404Q263 404 229 370Q202 343 195 315T187 232V168V108Q187 78 188 68T191 55T200 49Q221 46 249 46H265V0H257L234 1Q210 2 183 2T145 3Q42 3 33 0H25V46H41Z"></path><path id="MJX-1-TEX-I-1D445" d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z"></path><path id="MJX-1-TEX-N-2192" d="M56 237T56 250T70 270H835Q719 357 692 493Q692 494 692 496T691 499Q691 511 708 511H711Q720 511 723 510T729 506T732 497T735 481T743 456Q765 389 816 336T935 261Q944 258 944 250Q944 244 939 241T915 231T877 212Q836 186 806 152T761 85T740 35T732 4Q730 -6 727 -8T711 -11Q691 -11 691 0Q691 7 696 25Q728 151 835 230H70Q56 237 56 250Z"></path><path id="MJX-1-TEX-LO-222B" d="M114 -798Q132 -824 165 -824H167Q195 -824 223 -764T275 -600T320 -391T362 -164Q365 -143 367 -133Q439 292 523 655T645 1127Q651 1145 655 1157T672 1201T699 1257T733 1306T777 1346T828 1360Q884 1360 912 1325T944 1245Q944 1220 932 1205T909 1186T887 1183Q866 1183 849 1198T832 1239Q832 1287 885 1296L882 1300Q879 1303 874 1307T866 1313Q851 1323 833 1323Q819 1323 807 1311T775 1255T736 1139T689 936T633 628Q574 293 510 -5T410 -437T355 -629Q278 -862 165 -862Q125 -862 92 -831T55 -746Q55 -711 74 -698T112 -685Q133 -685 150 -700T167 -741Q167 -789 114 -798Z"></path><path id="MJX-1-TEX-I-1D451" d="M366 683Q367 683 438 688T511 694Q523 694 523 686Q523 679 450 384T375 83T374 68Q374 26 402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487H491Q506 153 506 145Q506 140 503 129Q490 79 473 48T445 8T417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157Q33 205 53 255T101 341Q148 398 195 420T280 442Q336 442 364 400Q369 394 369 396Q370 400 396 505T424 616Q424 629 417 632T378 637H357Q351 643 351 645T353 664Q358 683 366 683ZM352 326Q329 405 277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q233 26 290 98L298 109L352 326Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="munderover"><g data-mml-node="mo"><use data-c="2211" xlink:href="#MJX-1-TEX-LO-2211"></use></g><g data-mml-node="TeXAtom" transform="translate(58,-1087.9) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="1D45B" xlink:href="#MJX-1-TEX-I-1D45B"></use></g><g data-mml-node="mo" transform="translate(600,0)"><use data-c="3D" xlink:href="#MJX-1-TEX-N-3D"></use></g><g data-mml-node="mn" transform="translate(1378,0)"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g></g><g data-mml-node="TeXAtom" transform="translate(368.4,1150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="221E" xlink:href="#MJX-1-TEX-N-221E"></use></g></g></g><g data-mml-node="mfrac" transform="translate(1610.7,0)"><g data-mml-node="mn" transform="translate(1380,676)"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g><g data-mml-node="mrow" transform="translate(220,-710)"><g data-mml-node="mi"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mi" transform="translate(572,0)"><use data-c="1D459" xlink:href="#MJX-1-TEX-I-1D459"></use></g><g data-mml-node="mi" transform="translate(870,0)"><use data-c="1D45B" xlink:href="#MJX-1-TEX-I-1D45B"></use></g><g data-mml-node="mo" transform="translate(1470,0)"><use data-c="28" xlink:href="#MJX-1-TEX-N-28"></use></g><g data-mml-node="mi" transform="translate(1859,0)"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mo" transform="translate(2431,0)"><use data-c="29" xlink:href="#MJX-1-TEX-N-29"></use></g></g><rect width="3020" height="60" x="120" y="220"></rect></g><g data-mml-node="mo" transform="translate(5148.4,0)"><use data-c="3D" xlink:href="#MJX-1-TEX-N-3D"></use></g><g data-mml-node="munder" transform="translate(6204.2,0)"><g data-mml-node="mo" transform="translate(281,0)"><use data-c="6C" xlink:href="#MJX-1-TEX-N-6C"></use><use data-c="69" xlink:href="#MJX-1-TEX-N-69" transform="translate(278,0)"></use><use data-c="6D" xlink:href="#MJX-1-TEX-N-6D" transform="translate(556,0)"></use></g><g data-mml-node="TeXAtom" transform="translate(0,-650) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="1D445" xlink:href="#MJX-1-TEX-I-1D445"></use></g><g data-mml-node="mo" transform="translate(759,0)"><use data-c="2192" xlink:href="#MJX-1-TEX-N-2192"></use></g><g data-mml-node="mi" transform="translate(1759,0)"><use data-c="221E" xlink:href="#MJX-1-TEX-N-221E"></use></g></g></g><g data-mml-node="msubsup" transform="translate(8321.8,0)"><g data-mml-node="mo" transform="translate(0 1)"><use data-c="222B" xlink:href="#MJX-1-TEX-LO-222B"></use></g><g data-mml-node="TeXAtom" transform="translate(1046.4,1088.1) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="1D445" xlink:href="#MJX-1-TEX-I-1D445"></use></g></g><g data-mml-node="TeXAtom" transform="translate(589,-896.4) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mn"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g></g></g><g data-mml-node="mfrac" transform="translate(10121.6,0)"><g data-mml-node="mn" transform="translate(1380,676)"><use data-c="31" xlink:href="#MJX-1-TEX-N-31"></use></g><g data-mml-node="mrow" transform="translate(220,-710)"><g data-mml-node="mi"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mi" transform="translate(572,0)"><use data-c="1D459" xlink:href="#MJX-1-TEX-I-1D459"></use></g><g data-mml-node="mi" transform="translate(870,0)"><use data-c="1D45B" xlink:href="#MJX-1-TEX-I-1D45B"></use></g><g data-mml-node="mo" transform="translate(1470,0)"><use data-c="28" xlink:href="#MJX-1-TEX-N-28"></use></g><g data-mml-node="mi" transform="translate(1859,0)"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="mo" transform="translate(2431,0)"><use data-c="29" xlink:href="#MJX-1-TEX-N-29"></use></g></g><rect width="3020" height="60" x="120" y="220"></rect></g><g data-mml-node="mi" transform="translate(13381.6,0)"><use data-c="1D451" xlink:href="#MJX-1-TEX-I-1D451"></use></g><g data-mml-node="mi" transform="translate(13901.6,0)"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g></g></g></svg></mjx-container></div></div></center>
- <br><br>
- </div>
- </body>
-</html>