Compare commits
	
		
			146 Commits
		
	
	
		
			e141347222
			...
			2.0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8a8845d898 | |||
| 65be246673 | |||
| eabf56ed93 | |||
| d55b13ecbf | |||
| cc8a7710a1 | |||
| ad83090b05 | |||
| 684c237ac1 | |||
| 23c0090a47 | |||
| e57ec6de50 | |||
| c790dd6736 | |||
| 6e3666cea2 | |||
| 7379df38de | |||
| 2a915fec69 | |||
| fa0e9907ee | |||
| 2c3b5056ae | |||
| f5e0c39458 | |||
| 645093da36 | |||
| f57583b1a9 | |||
| 51b2ebf8e6 | |||
| 5a6d91296d | |||
| 5306cb78d3 | |||
| 749a018a6e | |||
| f212c41734 | |||
| cba46bfc23 | |||
| b734be4054 | |||
| 45915d2914 | |||
| 1fa30724d2 | |||
| 6def1a3007 | |||
| ed7c2b8b29 | |||
| 3fcd6af3a9 | |||
| 8507cbd189 | |||
| 8207702442 | |||
| 0ec47180e2 | |||
| c28f7a92d9 | |||
| 2d270542f0 | |||
| ba0cfe8b56 | |||
| fa8eef51ff | |||
| 730940b003 | |||
| 58fab1850b | |||
| a5b6227fef | |||
| 999a919a7f | |||
| 9afec80742 | |||
| 550485093c | |||
| 3a736dec82 | |||
| 15bbb2e33e | |||
| c2193c9651 | |||
| e0ae65304d | |||
| 3273fb62c8 | |||
| 0d3822258f | |||
| 825bf62851 | |||
| 46e357d2bb | |||
| 8f24d80e8d | |||
| c6289be09c | |||
| 24af65bfeb | |||
| c479aa5b73 | |||
| 1cec38a99e | |||
| a8b60b5662 | |||
| 3053b941d7 | |||
| 63da008d41 | |||
| 41dd1719ac | |||
| 692b6523a1 | |||
| 8699e8094d | |||
| 3429ffc4f6 | |||
| fa07738520 | |||
| 06b35c2091 | |||
| 7e1162ae39 | |||
| 930364f8d1 | |||
| e9831646a7 | |||
| f01f8e5e82 | |||
| 363242a4d5 | |||
| 214ac0d594 | |||
| 7ce1c5216f | |||
| c7c3485896 | |||
| 06c0a5ae46 | |||
| fa37d4d0ee | |||
| 5cbe5372ea | |||
| e9743ad37c | |||
| d2aac5eedf | |||
| 9b7bed3573 | |||
| 506f9a2502 | |||
| 905501c4ac | |||
| a6359112b4 | |||
| 282b1e8264 | |||
| 9ff726d8b9 | |||
| f0a92d7abc | |||
| d4e085e184 | |||
| 6f8223e1f6 | |||
| 0c054e0aef | |||
| db19170ffc | |||
| bd37fe8d18 | |||
| ddd89c84a2 | |||
| 05b37d775f | |||
| 37a5dc23f1 | |||
| da530eebfb | |||
| 21fc20b10f | |||
| 286c92dd0d | |||
| 4cca435148 | |||
| e5542ed8bb | |||
| 98e52e6833 | |||
| 7077426610 | |||
| 68fb297cb0 | |||
| efbc9fc6db | |||
| d809533280 | |||
| ee367f9b3f | |||
| d673eb2f6a | |||
| afac80d543 | |||
| f090607f67 | |||
| 1dccb10a45 | |||
| 6f7934f8ff | |||
| 998f5ed338 | |||
| 71cdccbeae | |||
| 2fb438b199 | |||
| 7eda07995f | |||
| e7c4296724 | |||
| 369d8a736e | |||
| 073377532e | |||
| 18cd38b194 | |||
| aa20bd67ee | |||
| b4d9bae246 | |||
| fcb091a164 | |||
| 55742e50db | |||
| e13a1633dd | |||
| add3a2865c | |||
| 6fd8525dad | |||
| c7f4613d22 | |||
| c6fd3f4786 | |||
| 474c258a83 | |||
| b35856fa88 | |||
| 290f1524a2 | |||
| fb0ff39013 | |||
| 79c6a34e38 | |||
| a26081d13f | |||
| 7ccb7e2ac7 | |||
| dc7fd3f834 | |||
| a3b8025876 | |||
| 6876cd34b7 | |||
| 60f9241fbd | |||
| 698e2aa680 | |||
| ff10025e05 | |||
| 72b1afdedd | |||
| 00660cef98 | |||
| fc129124b8 | |||
| 805b4ef8e0 | |||
| f7b60e0944 | |||
| f598d8f401 | |||
| 78ab7735d7 | 
| @@ -25,7 +25,7 @@ cd www | ||||
|  | ||||
| Then in a web browser, navigate to `localhost:8080`. | ||||
|  | ||||
| ## TODO | ||||
| ## TODO Items | ||||
|  | ||||
| All goals are currently completed. | ||||
|  | ||||
|   | ||||
							
								
								
									
										66
									
								
								cronjob.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										66
									
								
								cronjob.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| #!/usr/bin/env bash | ||||
| # 2025-10-14 Hyperling | ||||
| # Copied cronjob.sh from env-docker/Config/Hugo-Example/files/ to use for this | ||||
| #  project so that docker container can do periodic git pulls rather than having | ||||
| #  to reload /rebuild the container each time a release is pushed out. | ||||
|  | ||||
| ## Setup ## | ||||
|  | ||||
| DIR="$(dirname -- "${BASH_SOURCE[0]}")" | ||||
| PROG="$(basename -- "${BASH_SOURCE[0]}")" | ||||
| cd $DIR | ||||
| DIR="`pwd`" | ||||
| NAME="'$PROG'" | ||||
|  | ||||
| function log { | ||||
| 	echo -e "`date` : $NAME - $1" | ||||
| } | ||||
|  | ||||
| function kill-project { | ||||
| 	# Kill node.js which will complete run.sh and restart any Docker containers. | ||||
| 	# This is more intended towards Development and Stage sites since Production | ||||
| 	#  will only see git changes when a pull request is manually completed. | ||||
| 	log "Stopping continuous processes!" | ||||
| 	pkill node | ||||
| } | ||||
|  | ||||
| function reload-project { | ||||
| 	# Nothing to do, run.sh and main.js automatically uses the latest files. | ||||
| 	log "Project reloaded successfully!" | ||||
| } | ||||
|  | ||||
| ## Main ## | ||||
|  | ||||
| # Pull any updates, and if the project is already up to date, exit successfully. | ||||
| output="`git pull`" | ||||
| git_status="$?" | ||||
|  | ||||
| echo "$output" | grep -v "up to date" | ||||
| grep_status="$?" | ||||
|  | ||||
| log "Pull status is '$git_status', checking for changes is '$grep_status'." | ||||
|  | ||||
| # Check whether the continuously running jobs have been updated. | ||||
| echo "$output" | grep "main.js" | ||||
| main_changed="$?" | ||||
| echo "$output" | grep "run.sh" | ||||
| run_changed="$?" | ||||
|  | ||||
| # Determine where we've landed and whether we need to do anything. | ||||
| if [[ $git_status != 0 ]]; then | ||||
| 	log "*** ERROR: Git reported a failure! ***" | ||||
| 	exit 1 | ||||
| elif [[ $git_status == 0 && ($main_changed == 0 || $run_changed == 0) ]]; then | ||||
| 	log "Either main ('$main_changed'), or run ('$run_changed') were changed!" | ||||
| 	kill-project | ||||
| elif [[ $git_status == 0 && $grep_status == 0 ]]; then | ||||
| 	reload-project | ||||
| elif [[ $git_status == 0 && $grep_status != 0 ]]; then | ||||
| 	log "Nothing to do. '$output'" | ||||
| else | ||||
| 	log "*** WARNING: Unknown Situation ***" | ||||
| fi | ||||
|  | ||||
| ## Success! ## | ||||
|  | ||||
| exit 0 | ||||
| @@ -1,3 +1,9 @@ | ||||
| # Hyperling.com - files/photos/ | ||||
|  | ||||
| Used by `http://localhost:8080/photos` to build albums for sharing. | ||||
| ## index.html | ||||
|  | ||||
| Used by `http://localhost:8080/photos` to build and show list of albums. | ||||
|  | ||||
| ## all.html | ||||
|  | ||||
| Used by `http://localhost:8080/photos-all` to show all albums at once. | ||||
|   | ||||
							
								
								
									
										20
									
								
								main.js
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								main.js
									
									
									
									
									
								
							| @@ -104,7 +104,14 @@ async function main() { | ||||
| 			</url> | ||||
| 	`; | ||||
| 	let sitemap_html = ` | ||||
| 		<html><body> | ||||
| 		<!DOCTYPE html> | ||||
| 		<html lang="en"> | ||||
| 		<head> | ||||
| 			<title> | ||||
| 				Sitemap for Hyperling | ||||
| 			</title> | ||||
| 		</head> | ||||
| 		<body> | ||||
| 			<strong>Special Pages</strong> | ||||
| 			<ul> | ||||
| 				<li> | ||||
| @@ -134,6 +141,7 @@ async function main() { | ||||
| 	/* AUTOMATIC METHOD BASED ON OBJECT/ARRAY OF WEB SCRIPTS | ||||
| 	// Creates routes with the URL of the key and location of the value. | ||||
| 	*/ | ||||
| 	// TBD/TODO would be great to log this as "DATE: ADDRESS hit ROUTER requesting RESOURCE" | ||||
| 	for (let key in pages) { | ||||
| 		console.log(" * Creating router for", key); | ||||
| 		router.get("/" + key, function (req,res) { | ||||
| @@ -175,6 +183,7 @@ async function main() { | ||||
| 	`; | ||||
|  | ||||
| 	// Provide sitemap.xml file for "SEO". | ||||
| 	// TBD/TODO would be great to log this as "DATE: ADDRESS hit ROUTER requesting RESOURCE" | ||||
| 	console.log(" * Creating router for sitemap.xml"); | ||||
| 	router.get('/sitemap.xml', function (req, res) { | ||||
| 		console.log("sitemap.xml being provided to", req.socket.remoteAddress) | ||||
| @@ -183,6 +192,7 @@ async function main() { | ||||
| 	}); | ||||
|  | ||||
| 	// Provide human-usable sitemap links. | ||||
| 	// TBD/TODO would be great to log this as "DATE: ADDRESS hit ROUTER requesting RESOURCE" | ||||
| 	console.log(" * Creating router for sitemap*"); | ||||
| 	router.get('/sitemap*', function (req, res) { | ||||
| 		console.log("sitemap.html being provided to", req.socket.remoteAddress) | ||||
| @@ -190,6 +200,7 @@ async function main() { | ||||
| 	}); | ||||
|  | ||||
| 	// Return a resource from the files folder. | ||||
| 	// TBD/TODO would be great to log this as "DATE: ADDRESS hit ROUTER requesting RESOURCE" | ||||
| 	console.log(" * Creating router for files"); | ||||
| 	router.get('/files*', function (req, res) { | ||||
| 		console.log("file response to", req.socket.remoteAddress, "asking for", req.url) | ||||
| @@ -205,7 +216,8 @@ async function main() { | ||||
| 			case "apk": | ||||
| 				mime = "application/vnd.android.package-archive"; | ||||
| 				break; | ||||
| 			case "jpg" || "jpeg": | ||||
| 			case "jpg": | ||||
| 			case "jpeg": | ||||
| 				mime = "image/jpeg"; | ||||
| 				break; | ||||
| 			case "png": | ||||
| @@ -217,7 +229,9 @@ async function main() { | ||||
| 			case "zip": | ||||
| 				mime = "application/zip"; | ||||
| 				break; | ||||
| 			case "txt" || "csv" || "md": | ||||
| 			case "md": | ||||
| 			case "txt": | ||||
| 			case "csv": | ||||
| 				mime = "text/*"; | ||||
| 				break; | ||||
| 			default: | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "dependencies": { | ||||
|     "express": ">=4.18.1" | ||||
|     "express": ">=4.18.1 < 5.0.0" | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "start": "./run.sh" | ||||
|   | ||||
| @@ -1,16 +1,22 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "About"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Who Am I?</h1> | ||||
| 			<?php if (isset($GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 				&& !$GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 			echo ' | ||||
| 			<div class="col-12 header center" > | ||||
| 				<img src="/files/media/icons/about.jpg"> | ||||
| 				<img src="/files/media/icons/about.jpg" alt="<<about.jpg>>"> | ||||
| 			</div> | ||||
| 			';?> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 			<div class="col-12 header"> | ||||
| 				<p> | ||||
| 					Hi there! My name is Chad, I'm the primary content creator | ||||
| 					behind Hyperling and HyperVegan. Thank you for your interest! | ||||
| @@ -23,7 +29,6 @@ | ||||
| 					planted at least one fruit tree or had a small square foot | ||||
| 					garden. We would be in paradise! | ||||
| 				</p> | ||||
| 				<!-- TBD change this to 'Coding, videos, and art' :) --> | ||||
| 				<p> | ||||
| 					Coding and videos aren't my only hobbies, I'm also big into | ||||
| 					health. I see it as humanity's most important asset and take a | ||||
| @@ -48,7 +53,6 @@ | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "subpages/about/notice.php"; | ||||
| 	include "subpages/about/health.php"; | ||||
|   | ||||
							
								
								
									
										290
									
								
								pages/apps.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										290
									
								
								pages/apps.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,290 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Synonym for home page. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Apps"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
| 		<div class="row" id="experience"> | ||||
| 			<h2 class="col-12 title">My Profession</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 header"> | ||||
| 				<p> | ||||
| 					I'm a professional software engineer who's been playing with | ||||
| 					Linux system administration from a young age. | ||||
| 					Much of my career	has focused on back-end / database systems | ||||
| 					and optimizing workflows. | ||||
| 					I feel that I specialize in building systems with "no sharp | ||||
| 					edges", meaning that I test rigorously to ensure there aren't any | ||||
| 					ways the user can hurt themselves or the system. | ||||
| 					In my free time I enjoy learning new | ||||
| 					languages and writing apps for Android. | ||||
| 				</p> | ||||
| 				<!--<p><a href="/resume/">My resume can be found here</a>.</p>--> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row" id="obtainium"> | ||||
| 			<h4 class="col-12 header">Obtainium Configuration</h4> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row text"> | ||||
| 			<div class="col-6 text"> | ||||
| 				<strong>Automatic Import</strong> | ||||
| 				<p> | ||||
| 					This JSON file will add all of my apps for you in its own | ||||
| 					convenient group: | ||||
| 				</p> | ||||
| 				<ul class="indent"><li> | ||||
| 					<a href="https://git.hyperling.com/me/env-obtainium-hyperling/src/branch/main/obtainium-export.json" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					> | ||||
| 						[obtainium-export.json] | Hyperling's Apps | ||||
| 					</a> | ||||
| 				</li></ul> | ||||
| 				<p> | ||||
| 					Then if you only want to keep a subset of the apps you may either | ||||
| 					mark the unwanted ones as Track Only or delete them from the app. | ||||
| 				</p> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-6 text"> | ||||
| 				<strong>Manual Imports</strong> | ||||
| 				<p> | ||||
| 					If you decide to add the apps 1-by-1 based on the URLs in the | ||||
| 					section below, here is how to show the correct version numbers: | ||||
| 				</p> | ||||
| 				<ul> | ||||
| 					<li>Enable <i>"Sort by only the last segment of the link"</i>.</li> | ||||
| 					<li> | ||||
| 						Set the <i>"Version string extraction RegEx"</i> field to: | ||||
| 						<code>[0-9\.]+[0-9]+</code> | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 				<p> | ||||
| 					Otherwise, using <i>"Take first link"</i> ensures you get the | ||||
| 					proper update but will show pseudo versions. | ||||
| 				</p> | ||||
| 			</div> | ||||
|  | ||||
| 			<!-- | ||||
| 				TBD/TODO, if adding this section, make it something that's | ||||
| 			 	minimized by default and can be expanded open. Otherwise too big. | ||||
| 			<div class="col-12 text"> | ||||
| 				<strong>Confused?</strong> | ||||
| 				<p> | ||||
| 					Obtainium is a wonderful app for managing your APKs and sharing | ||||
| 					the configuration across your devices or with other people. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					It is not my project, but I highly recommend using it. | ||||
| 					<a href="TBD/TODO" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					>Find its APK here (TBD/TODO!)</a> and | ||||
| 					<a>its documentation here</a>. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 			--> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row" id="android"> | ||||
| 			<h3 class="col-12 header">Android Apps</h3> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row center text"> | ||||
|  | ||||
| 			<div class="col-12 text border" id="expense"> | ||||
| 				<a href="https://git.hyperling.com/me/flutter-expense-tracker/releases"> | ||||
| 					<figure> | ||||
| 						<img class="app-icon" loading="lazy" alt="<<expense.png>>" | ||||
| 							src="/files/media/icons/expense.png" | ||||
| 						> | ||||
| 						<figcaption> | ||||
| 							Recurring Expense Tracker | ||||
| 						</figcaption> | ||||
| 					</figure> | ||||
| 				</a> | ||||
| 				<p> | ||||
| 					Keep track of repeating expenses and | ||||
| 					view projections of their effect on your finances. | ||||
| 					First app written with Flutter. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					<!--[<s><a>F-Droid</a></s>]--> | ||||
| 					[<a href="https://git.hyperling.com/me/flutter-expense-tracker/" | ||||
| 						target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 					[<a href="https://git.hyperling.com/me/flutter-expense-tracker/releases" | ||||
| 						target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 				</p> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="tictactoe"> | ||||
| 				<a href="https://git.hyperling.com/me/android-tictactoe/releases"> | ||||
| 					<figure> | ||||
| 						<img class="app-icon" loading="lazy" alt="<<tictactoe.png>>" | ||||
| 							src="/files/media/icons/tictactoe.png" | ||||
| 						> | ||||
| 						<figcaption> | ||||
| 							Tic-Tac-Toe | ||||
| 						</figcaption> | ||||
| 					</figure> | ||||
| 				</a> | ||||
| 				<p> | ||||
| 					Play against a friend or a range of AIs. | ||||
| 					Written to practice Kotlin/Compose. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					<!--[<s><a>F-Droid</a></s>]--> | ||||
| 					[<a href="https://git.hyperling.com/me/android-tictactoe/" | ||||
| 						target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 					[<a href="https://git.hyperling.com/me/android-tictactoe/releases" | ||||
| 						target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 				</p> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="ctfu"> | ||||
| 				<a href="https://git.hyperling.com/me/android-carb-up/releases" | ||||
| 					target="_blank" rel="noopener noreferrer"> | ||||
| 					<figure> | ||||
| 						<img class="app-icon" loading="lazy" alt="<<ctfu.png>>" | ||||
| 							src="/files/media/icons/ctfu.png" | ||||
| 						> | ||||
| 						<figcaption> | ||||
| 							Carb Up! BETA | ||||
| 						</figcaption> | ||||
| 					</figure> | ||||
| 				</a> | ||||
| 				<p> | ||||
| 					Calculate cost-effective foods on a High Carb Low Fat lifestyle. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					<!--[<a href="https://play.google.com/store/apps/details?id=com.hyperling.carbupbeta" | ||||
| 						target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 					[<a href="https://git.hyperling.com/me/android-carb-up/" | ||||
| 						target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 					[<a href="https://git.hyperling.com/me/android-carb-up/releases" | ||||
| 						target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 				</p> | ||||
| 				<!--<p> | ||||
| 					<s> | ||||
| 						[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 					</s> | ||||
| 				</p>--> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="timer"> | ||||
| 				<a href="https://git.hyperling.com/me/android-infinite-timer/releases" | ||||
| 					target="_blank" rel="noopener noreferrer" | ||||
| 				> | ||||
| 					<figure> | ||||
| 						<img class="app-icon" loading="lazy" alt="<<infinitetimer.png>>" | ||||
| 							src="/files/media/icons/infinitetimer.png" | ||||
| 						> | ||||
| 						<figcaption> | ||||
| 							Infinite Timer | ||||
| 						</figcaption> | ||||
| 					</figure> | ||||
| 				</a> | ||||
| 				<p> | ||||
| 					Play a notification at your chosen interval. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					<!--[<a href="https://play.google.com/store/apps/details?id=com.hyperling.apps.infinitetimer" | ||||
| 						target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 					[<a href="https://git.hyperling.com/me/android-infinite-timer/" | ||||
| 						target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 					[<a href="https://git.hyperling.com/me/android-infinite-timer/releases" | ||||
| 						target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 				</p> | ||||
| 				<!--<p> | ||||
| 					<s> | ||||
| 						[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 					</s> | ||||
| 				</p>--> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="sleep"> | ||||
| 				<a href="https://git.hyperling.com/me/android-45-minute-rule/releases" | ||||
| 					target="_blank" rel="noopener noreferrer"> | ||||
| 					<figure> | ||||
| 						<img class="app-icon" loading="lazy" alt="<<t45mr.png>>" | ||||
| 							src="/files/media/icons/t45mr.png" | ||||
| 						> | ||||
| 						<figcaption> | ||||
| 							45 Minute Rule | ||||
| 						</figcaption> | ||||
| 					</figure> | ||||
| 				</a> | ||||
| 				<p> | ||||
| 					Determine a good bedtime for waking during light sleep. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					<!--[<a href="https://play.google.com/store/apps/details?id=com.hyperling.apps.the45minuterule" | ||||
| 						target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 					[<a href="https://git.hyperling.com/me/android-45-minute-rule/" | ||||
| 						target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 					[<a href="https://git.hyperling.com/me/android-45-minute-rule/releases" | ||||
| 						target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 				</p> | ||||
| 				<!--<p> | ||||
| 					<s> | ||||
| 						[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 					</s> | ||||
| 				</p>--> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="games"> | ||||
| 				<a href="https://git.hyperling.com/me/android-hypergames/releases" | ||||
| 					target="_blank" rel="noopener noreferrer" | ||||
| 				> | ||||
| 					<figure> | ||||
| 						<img class="app-icon" loading="lazy" alt="<<hypergames.png>>" | ||||
| 							src="/files/media/icons/hypergames.png" | ||||
| 						> | ||||
| 						<figcaption> | ||||
| 								HyperGames | ||||
| 						</figcaption> | ||||
| 					</figure> | ||||
| 				</a> | ||||
| 				<p> | ||||
| 					Started as a fun project for learning. | ||||
| 					Playable but unfinished. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					<!--[<a href="https://play.google.com/store/apps/details?id=apps.hyperling.com.platformer" | ||||
| 						target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 					[<a href="https://git.hyperling.com/me/android-hypergames/" | ||||
| 						target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 					[<a href="https://git.hyperling.com/me/android-hypergames/releases" | ||||
| 						target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 				</p> | ||||
| 				<!-- | ||||
| 				<p> | ||||
| 					<s> | ||||
| 						[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 					</s> | ||||
| 				</p> | ||||
| 				--> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row" id="other"> | ||||
| 			<h3 class="col-12 header">Other Programs</h3> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					For a full list of software including my Ansible automation, | ||||
| 					Docker setup, source code for this website, and other | ||||
| 					fun/random toys, check out | ||||
| 					<a href="https://git.hyperling.com/me" target="_blank">My Projects</a>. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
							
								
								
									
										10
									
								
								pages/books.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								pages/books.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Alias for where Books menu item should go. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Books"; | ||||
| 	} | ||||
| 	include "media.php"; | ||||
| ?> | ||||
| @@ -1,22 +1,32 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Contact"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Contact</h1> | ||||
| 			<?php if (isset($GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 				&& !$GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 			echo ' | ||||
| 			<div class="col-12 header center" > | ||||
| 				<img src="/files/media/icons/contact.jpg"> | ||||
| 				<img src="/files/media/icons/contact.jpg" alt="<<contact.jpg>>"> | ||||
| 			</div> | ||||
| 			';?> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 title center"> | ||||
| 			<div class="col-12 header center"> | ||||
| 				<p> | ||||
| 					Timely responses are not guarenteed, as I spend a majority of | ||||
| 					my time offline and enjoy traveling in reception-free zones. | ||||
| 					Timely responses are not guarenteed, as I spend a large amount of | ||||
| 					time offline and enjoy traveling in reception-free zones. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h2 class="col-12 header">Methods</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| @@ -39,7 +49,6 @@ | ||||
| 				</li></ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
							
								
								
									
										209
									
								
								pages/diet.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										209
									
								
								pages/diet.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,209 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Diet"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Current Diet</h1> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					My diet is 100% vegan and focuses on a high carb low fat | ||||
| 					macronutrient ratio from whole foods. I consume as many raw meals | ||||
| 					as possible and prefer to cook for myself. | ||||
| 					<!--Purchase priorities are 1) Non-GMO, 2) Local, 3) Organic.--> | ||||
| 				</p> | ||||
| 				<!-- -- > | ||||
| 				<p> | ||||
| 					I generally water fast until the sensation of an empty stomach | ||||
| 					actually turns to hunger, then eat a raw fruit meal. If it's date | ||||
| 					season or other high calorie fruit is readily available, the | ||||
| 					whole day may be fruit, otherwise I make 1 large cooked meal such | ||||
| 					as rice with veggies to cover the rest of the day's needs. | ||||
| 				</p> | ||||
| 				<!-- --> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h2 class="col-12 header" id="faves">Favorites</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<strong>Fruit</strong> | ||||
| 				<ol> | ||||
| 					<li>Soursop</li> | ||||
| 					<li>Durian</li> | ||||
| 					<li>Pawpaw</li> | ||||
| 					<li>Mamey Sapote</li> | ||||
| 				</ol> | ||||
| 				<p>Notable Mentions</p> | ||||
| 				<ul> | ||||
| 					<li>Dates</li> | ||||
| 					<li>Longans</li> | ||||
| 					<li>Cherimoya</li> | ||||
| 					<li>Persimmons</li> | ||||
| 					<li>Peaches & Nectarines</li> | ||||
| 					<li>Fresh Coconut</li> | ||||
| 					<li>Mango</li> | ||||
| 				</ul> | ||||
| 				<!-- -- > | ||||
| 				<strong>Cooked</strong> | ||||
| 				<ol> | ||||
| 					<li></li> | ||||
| 					<li></li> | ||||
| 					<li></li> | ||||
| 				</ol> | ||||
| 				<!-- --> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h2 class="col-12 header" id="staples">Staples</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<strong>Raw</strong> | ||||
| 				<ul> | ||||
| 					<li>Dates (Khadrawi, Barhi, Medjool)</li> | ||||
| 					<li>Bananas</li> | ||||
| 					<li>Apples (Autumn Crisp, Cosmic Crisp, Pink Lady, Granny Smith, Gala, Fuji)</li> | ||||
| 					<li>Dried Mango (Natural Grocer's brand) | ||||
| 						<ul><li> | ||||
| 							This is best consumed rehydrated. The nectar is amazing!! | ||||
| 						</li></ul> | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 				<strong>Cooked</strong> | ||||
| 				<ul> | ||||
| 					<li>Rice</li> | ||||
| 					<li>Sweet Potato</li> | ||||
| 					<li>Zucchini & Yellow Squash</li> | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h2 class="col-12 header" id="avoid">Allergies / Aversions</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					I've found that my body doesn't tolerate many foods found in modern diets. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					Basically, if you wouldn't feed it to a dog or rabbit, I probably avoid it too. | ||||
| 				</p> | ||||
| 				<strong>High Reactivity</strong> | ||||
| 				<p> | ||||
| 					These are a quick "no". I'll smell the dish, but not eat! | ||||
| 				</p> | ||||
| 				<ul> | ||||
| 					<li>Alliums (garlic, onions) | ||||
| 						<!-- -- > | ||||
| 						<ul><li> | ||||
| 							Headaches, migraines, nightmares, night terrors, poor digestion. | ||||
| 						</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Caffeine (coffee, chocolate, cacao, cocoa) | ||||
| 						<!-- -- > | ||||
| 						<ul><li> | ||||
| 							Headaches, intense sweating, jitters, anxiety, awful digestion. | ||||
| 						</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Grapes | ||||
| 						<!-- -- > | ||||
| 						<ul><li>Terrible digestion.</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Tropical Nuts (peanuts, cashews, brazil nuts, etc) | ||||
| 						<!-- -- > | ||||
| 						<ul> | ||||
| 							<li>Terrible digestion, lethargy, headaches.</li> | ||||
| 						</ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Drugs & Alcohol | ||||
| 						<!-- -- > | ||||
| 						<ul><li> | ||||
| 							People know me as the sober kid. I used cannabis on and off | ||||
| 							until 2024 but was over recreational drugs by 2012. Now | ||||
| 							that I'm happy I no longer need an escape. :) | ||||
| 						</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 				<strong>Medium Reactivity</strong> | ||||
| 				<p> | ||||
| 					I normally avoid these and only have them as rare exceptions. | ||||
| 				</p> | ||||
| 				<ul> | ||||
| 					<li>Nightshades (tomato, peppers, potato, eggplant, tobacco, datura) | ||||
| 						<!-- -- > | ||||
| 						<ul> | ||||
| 							<li>Mucous and lymph for days, poor digestion.</li> | ||||
| 							<li>If cooked at a high enough temperature, like fries, | ||||
| 								they become tolerable as long as theyre not overly oily. | ||||
| 							</li> | ||||
| 						</ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Cinnamon | ||||
| 						<!-- -- > | ||||
| 						<ul><li>Intense sweating, overheating.</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 				<strong>Lower Reactivity</strong> | ||||
| 				<p> | ||||
| 					I may have these from time to time, but in very small amounts. | ||||
| 				</p> | ||||
| 				<ul> | ||||
| 					<li>Fatty Nuts & Seeds (almonds, walnuts, pecans, sunflower seeds, etc) | ||||
| 						<!-- -- > | ||||
| 						<ul><li>Poor digestion, lethargy, </li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<!-- -- > | ||||
| 					<li>Quinoa | ||||
| 						<!-- -- > | ||||
| 						<ul><li>I want to love it, it just doesn't do anything!</li></ul> | ||||
| 						-- > | ||||
| 					</li> | ||||
| 					<!-- --> | ||||
| 					<li>Storebought/Pasteurized Juices | ||||
| 						<!-- -- > | ||||
| 						<ul><li>.</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Tea (including herbal) | ||||
| 						<!-- -- > | ||||
| 						<ul><li>Needs to be comsumed with a meal, otherwise body may try to process it as one and leads to horrible digestion.</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Legumes (beans, peas) | ||||
| 						<!-- -- > | ||||
| 						<ul><li>If not properly stored and cooked they cause me havoc.</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Oily Meals | ||||
| 						<!-- -- > | ||||
| 						<ul><li></li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 					<li>Empty Calories (donuts, cake, corn/potato chips, etc) | ||||
| 						<!-- -- > | ||||
| 						<ul><li>I want to love it, it just doesn't do anything!</li></ul> | ||||
| 						<!-- --> | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
| @@ -3,5 +3,8 @@ | ||||
| 	Alias for the support page with a more common name. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Donate"; | ||||
| 	} | ||||
| 	include "support.php"; | ||||
| ?> | ||||
|   | ||||
							
								
								
									
										87
									
								
								pages/freedom.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										87
									
								
								pages/freedom.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Page to provide links for Freedom eBook. | ||||
| --> | ||||
| <?php | ||||
| 	$GLOBALS["ADVISORY"] = false; | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Freedom"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Voluntary Sovereignty</h1> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 header"> | ||||
| 				<p> | ||||
| 					Short eBook and printable booklet succintly covering Morality | ||||
| 					and Sovereignty. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					Also covers topics such as police encounters | ||||
| 					and provides resources for further education. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					Click the link below to download the 4-page PDF: | ||||
| 				</p> | ||||
| 				<ul class="indent"> | ||||
| 					<li> | ||||
| 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/latest/VoluntarySovereignty.pdf" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[PDF] | eBook | ||||
| 						</a> | ||||
| 					</li> | ||||
| 					<li> | ||||
| 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/latest/VoluntarySovereignty-booklet-default.pdf" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[PDF] | Booklet | ||||
| 						</a> | ||||
| 					</li> | ||||
| 					<li> | ||||
| 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/latest/VoluntarySovereignty-booklet-rotated.pdf" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[PDF] | Booklet (Duplex Rotations) | ||||
| 						</a> | ||||
| 					</li> | ||||
| 				</ul> | ||||
|  | ||||
| 				<p> | ||||
| 					Curious how I made it? Check out its Git repository: | ||||
| 				</p> | ||||
| 				<ul class="indent"> | ||||
| 					<li> | ||||
| 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[CODE] | Source Code | ||||
| 						</a> | ||||
| 					</li> | ||||
| 				</ul> | ||||
|  | ||||
| 				<p> | ||||
| 					Here is the video it was announced in: | ||||
| 				</p> | ||||
| 				<ul class="indent"> | ||||
| 					<li> | ||||
| 						<a href="https://odysee.com/@HyperVegan:2/20251003-Announcements:0" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[Odysee] | HyperVegan: "Announcements: Skipped Midfest, Voluntary Sovereignty eBook, CheapRVLiving Interview" | ||||
| 						</a> | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
| @@ -3,10 +3,12 @@ | ||||
| 	Page to provide ways people can support me. | ||||
| --> | ||||
| <?php | ||||
| 	$GLOBALS["ADVISORY"] = false; | ||||
| 	//$GLOBALS["ADVISORY"] = false; | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Health"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">My Health Protocol</h1> | ||||
| 		</div> | ||||
| @@ -28,13 +30,31 @@ | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					Click the link below to download the 12-page PDF: | ||||
| 					Click the link below to download the 10-page PDF: | ||||
| 				</p> | ||||
| 				<ul class="indent"><li> | ||||
| 					<a href="/files/media/documents/HyperlingsHealthProtocol.pdf"> | ||||
| 						[PDF] | Direct Download | ||||
| 					</a> | ||||
| 				</li></ul> | ||||
| 				<ul class="indent"> | ||||
| 					<li> | ||||
| 						<a href="https://git.hyperling.com/me/ebook-health-protocol/releases/download/latest/HyperlingsHealthProtocol.pdf" | ||||
| 							target="_blank" rel="noopener noreferrer"> | ||||
| 							[PDF] | eBook | ||||
| 						</a> | ||||
| 					</li> | ||||
| 					<li> | ||||
| 					<a href="https://git.hyperling.com/me/ebook-health-protocol/releases/download/latest/HyperlingsHealthProtocol-booklet-default.pdf" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[PDF] | Booklet | ||||
| 						</a> | ||||
| 					</li> | ||||
| 					<li> | ||||
| 					<a href="https://git.hyperling.com/me/ebook-health-protocol/releases/download/latest/HyperlingsHealthProtocol-booklet-rotated.pdf" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[PDF] | Booklet (Duplex Rotations) | ||||
| 						</a> | ||||
| 					</li> | ||||
|  | ||||
| 				</ul> | ||||
|  | ||||
| 				<p> | ||||
| 					There is also a 30 minute audio version which can be found here: | ||||
| @@ -44,7 +64,7 @@ | ||||
| 						<a href="/files/media/documents/HyperlingsHealthProtocol.mp3" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[MP3] | Direct Download | ||||
| 							[MP3] | Download | ||||
| 						</a> | ||||
| 					</li> | ||||
| 					<li> | ||||
| @@ -88,7 +108,6 @@ | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -1,26 +1,21 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	$show_advisory = true; | ||||
| 	if ($show_advisory) echo ' | ||||
| 		<div class="row"> | ||||
| 			<p><!-- Gap Area --></p> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row center" id="advisory"> | ||||
| 			<div class="col-12 title"> | ||||
| 				<i><h2>Announcements</h2></i> | ||||
| 			</div> | ||||
| 			<a href="/health/"> | ||||
| 		<div class="row center title" id="advisory"> | ||||
| 			<i><h2 class="col-12 title">Latest Announcement</h2></i> | ||||
| 			<a href="/freedom/"> | ||||
| 				<div class="col-12 text"> | ||||
| 					<u class="orange">2024-03-07</u> | ||||
| 					<br/> | ||||
| 					Find my free eBook, "Hyperling's Health Protocol", | ||||
| 					<u class="orange">2025-09-28</u> | ||||
| 					<br> | ||||
| 					I wrote another short free eBook, "Voluntary Sovereignty", check it out | ||||
| 					<u class="orange">here</u>! | ||||
| 				</div> | ||||
| 			</a> | ||||
| 			<!--<div class="col-12 text"> | ||||
| 				<u>2024-03-31</u> | ||||
| 				<br/> | ||||
| 				There's a | ||||
| 				<a href="/home/#tictactoe">new app</a> | ||||
| 				in town, | ||||
| 				<a href="/files/apks/TicTacToe.apk">Tic-Tac-Toe</a>! | ||||
| 			</div>--> | ||||
| 		</div> | ||||
| 	'; | ||||
| ?> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /*** Logo In Header ***/ | ||||
| 			/*** Logo In Header ***/ | ||||
|  | ||||
| 			/* Shared Attributes */ | ||||
| 			.banner-top, .banner-middle, .banner-bottom { | ||||
| @@ -21,3 +21,16 @@ | ||||
| 			.banner-bottom { | ||||
| 				background-color: #33CC33; | ||||
| 			} | ||||
|  | ||||
| 			.banner-image { | ||||
| 				background-repeat: no-repeat; | ||||
|  | ||||
| 				background-position: center, center; | ||||
| 				height: 237px; /* 69*3[banner stripes] + 15*2[padding top+bot] */ | ||||
| 			} | ||||
| 			.banner-image01 { | ||||
| 				background-image: url("/files/media/icons/home.jpg"); | ||||
| 			} | ||||
| 			.banner-image02 { | ||||
| 				background-image: url("/files/media/icons/contact.jpg"); | ||||
| 			} | ||||
|   | ||||
| @@ -1,8 +1,32 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	// Dynamic testing of whether new images around the banner is wanted. | ||||
| 	if (!isset($GLOBALS["SHOW_BANNER_PICS"])) { | ||||
| 		$GLOBALS["SHOW_BANNER_PICS"] = true; | ||||
| 	} | ||||
| 	$show_pics = $GLOBALS["SHOW_BANNER_PICS"]; | ||||
| 	$banner_width = $show_pics ? 6 : 12; | ||||
| ?> | ||||
| 		<a href='/about/'> | ||||
| 			<div class="row col-12 header"> | ||||
| 			<div class="row"> | ||||
| 			<?php if ($show_pics) echo ' | ||||
| 			<div class="col-3 header center banner-image banner-image01"> | ||||
| 				<!-<img src="/files/media/icons/home.jpg" | ||||
| 					alt="<<banner01.jpg>>" | ||||
| 				>--> | ||||
| 			</div> | ||||
| 			';?> | ||||
| 			<div class="col-<?php echo "$banner_width"; ?> header"> | ||||
| 				<div class="banner-top">Peace</div> | ||||
| 				<div class="banner-middle">Love</div> | ||||
| 				<div class="banner-bottom">Happiness</div> | ||||
| 			</div> | ||||
| 			<?php if ($show_pics) echo ' | ||||
| 			<div class="col-3 header center banner-image banner-image02"> | ||||
| 				<!--<img src="/files/media/icons/contact.jpg" | ||||
| 					alt="<<banner02.jpg>>" | ||||
| 				>--> | ||||
| 			</div> | ||||
| 			';?> | ||||
| 			</div> | ||||
| 		</a> | ||||
|   | ||||
| @@ -2,6 +2,5 @@ | ||||
| <?php | ||||
| 	include "footer.php" | ||||
| ?> | ||||
|  | ||||
| 	</body> | ||||
| </html> | ||||
|   | ||||
| @@ -2,14 +2,15 @@ | ||||
| <?php | ||||
| 	include "header.php"; | ||||
| ?> | ||||
|  | ||||
| 	<body> | ||||
|  | ||||
| <?php | ||||
| 	include "banner.php"; | ||||
| 	include "menu.php"; | ||||
|  | ||||
| 	/* 2025-01-29 Disable advisory now that Books is explicitly a menu item. * / | ||||
| 	/* | ||||
| 		2025-01-29 Disable advisory now that Books is explicitly a menu item. | ||||
| 		2025-10-03 Re-enable advisory for new eBook. | ||||
| 	*/ | ||||
| 	if (!isset($GLOBALS["ADVISORY"]) || $GLOBALS["ADVISORY"] !== false) | ||||
| 		include "advisory.php"; | ||||
| 	/* */ | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /*** Dark Theme ***/ | ||||
| 			/*** Dark Theme ***/ | ||||
| 			body { | ||||
| 				background-color: #444444; | ||||
| 			} | ||||
|   | ||||
							
								
								
									
										34
									
								
								pages/helpers/font.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								pages/helpers/font.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| 			/*** Fonts and text sizes. ***/ | ||||
|  | ||||
| 			/* For debugging anything which does not have a font size yet. * / | ||||
| 			* { | ||||
| 				color: cyan; | ||||
| 				font-size: xx-large; | ||||
| 			} | ||||
| 			/* */ | ||||
|  | ||||
| 			p,li,code,a,pre { | ||||
| 				font-size: medium; | ||||
| 			} | ||||
|  | ||||
| 			b,figcaption { | ||||
| 				font-size: large; | ||||
| 				font-weight: bold; | ||||
| 			} | ||||
|  | ||||
| 			strong,img { | ||||
| 				font-size: larger; | ||||
| 				font-weight: bolder; | ||||
| 			} | ||||
|  | ||||
| 			h6,h5 { | ||||
| 				font-size: larger; | ||||
| 			} | ||||
|  | ||||
| 			h4,h3 { | ||||
| 				font-size: x-large; | ||||
| 			} | ||||
|  | ||||
| 			h2,h1 { | ||||
| 				font-size: xx-large; | ||||
| 			} | ||||
| @@ -8,19 +8,19 @@ | ||||
|  | ||||
| 		<div class="row" id="footer"> | ||||
| 			<div class="col-12 title center"> | ||||
| 				Have a Health or Freedom related project which could use my help? | ||||
| 				<a href="mailto:me@hyperling.com">Please let me know</a>! | ||||
| 				<p> | ||||
| 					Have a Health or Freedom related project which could use my help? | ||||
| 					<a href="mailto:me@hyperling.com">Please let me know</a>! | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<!--<div class="col-3"></div>--> | ||||
| 			<h6 class="col-6 center"> | ||||
| 		<div class="row center"> | ||||
| 			<div class="col-6"> | ||||
| 				<a href="https://git.hyperling.com/me/nodejs-website/src/branch/main/LICENSE" | ||||
| 					target="_blank" rel="noopener noreferrer" | ||||
| 				>This website is free software! Click here to learn more.</a> | ||||
| 			</h6> | ||||
| 			<h6 class="col-6 center"> | ||||
| 			</div> | ||||
| 			<div class="col-6"> | ||||
| 				<a href="/sitemap/">Full Site Map</a> | ||||
| 			</h6> | ||||
| 			<!--<div class="col-3"></div>--> | ||||
| 			</div> | ||||
| 		</div> | ||||
|   | ||||
| @@ -1,22 +1,45 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = ""; | ||||
| 	} else { | ||||
| 		$GLOBALS["HEADER_TITLE"] = ": " . $GLOBALS["HEADER_TITLE"]; | ||||
| 	} | ||||
| ?> | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <html lang="en"> | ||||
| 	<head> | ||||
| 		<title>Hyperling</title> | ||||
| 		<title>Hyperling<?php echo($GLOBALS["HEADER_TITLE"]); ?></title> | ||||
| 		<link rel="icon" sizes="32x32" | ||||
| 			href="/files/media/icons/favicon.ico" | ||||
| 		/> | ||||
| 		> | ||||
| 		<link rel="icon" sizes="192x192" | ||||
| 			href="/files/media/icons/favicon.ico" | ||||
| 		/> | ||||
| 		> | ||||
| 		<!-- CSS --> | ||||
| 		<style> | ||||
| 			<?php include "main.css"; ?> | ||||
| 		</style> | ||||
| 		<style> | ||||
| 			<?php include "font.css"; ?> | ||||
| 		</style> | ||||
| 		<style> | ||||
| 			<?php include "dark.css"; ?> | ||||
| 		</style> | ||||
| 		<style> | ||||
| 			<?php include "banner.css"; ?> | ||||
| 		</style> | ||||
|  | ||||
| 		<meta property="og:title" content="Hyperling"/> | ||||
| 		<meta property="og:description" content="Apps, eBooks, media, and other resources from the brands Hyperling and HyperVegan."/> | ||||
| 		<meta property="og:site_name" content="Hyperling"/> | ||||
| 		<meta property="og:url" content="https://hyperling.com/"/> | ||||
| 		<meta property="og:type" content="website"/> | ||||
| 		<meta property="og:image" content="https://hyperling.com/files/media/icons/home.jpg"/> | ||||
| 		<meta name="referrer" content="same-origin"/> | ||||
|  | ||||
| 		<meta name="twitter:card" content="summary_large_image" /> | ||||
| 		<meta name="twitter:title" content="Hyperling" /> | ||||
| 		<meta name="twitter:description" content="Apps, eBooks, media, and other resources from the brands Hyperling and HyperVegan." /> | ||||
| 		<meta name="twitter:image" content="https://hyperling.com/files/media/icons/home.jpg" /> | ||||
| 	</head> | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| /*** 2022-09-14 CSS for the website. ***/ | ||||
| 			/*** 2022-09-14 CSS for the website. ***/ | ||||
| 			/* https://www.w3schools.com/Css/css_rwd_grid.asp */ | ||||
|  | ||||
| 			/* Enable dynamic stuffs, makes the element think its entire size includes padding. */ | ||||
| @@ -137,3 +137,8 @@ | ||||
| 				margin-right: auto; | ||||
| 				padding: 5px; | ||||
| 			} | ||||
|  | ||||
| 			.app-icon { | ||||
| 				width: 25%; | ||||
| 				height: 25%; | ||||
| 			} | ||||
|   | ||||
| @@ -1,12 +1,19 @@ | ||||
| #!/usr/bin/php | ||||
| 		<div class="row header menu"> | ||||
| 			<ul class="menu-list"> | ||||
| 				<li class="col-1"></li> | ||||
| 				<li class="col-2 menu-item"><a href="/home/">Android Apps</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/media/">Books / Socials</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/about/">About Me</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/contact/">Contact Details</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/support/">Support / Donate</a></li> | ||||
| 				<li class="col-1"></li> | ||||
| 				<li class="col-3 menu-item"><a href="/">Home</a></li> | ||||
| 				<li class="col-3 menu-item"><a href="/about/">About</a></li> | ||||
| 				<li class="col-3 menu-item"><a href="/contact/">Contact</a></li> | ||||
| 				<li class="col-3 menu-item"><a href="/support/">Support</a></li> | ||||
| 			</ul> | ||||
| 			<ul class="menu-list"> | ||||
| 				<li class="col-3 menu-item"><a href="/apps/">Apps</a></li> | ||||
| 				<li class="col-3 menu-item"><a href="/books/">Books</a></li> | ||||
| 				<li class="col-3 menu-item"> | ||||
| 					<a href="https://odysee.com/@HyperVegan:2" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					>Videos</a> | ||||
| 				</li> | ||||
| 				<li class="col-3 menu-item"><a href="/photos/">Photos</a></li> | ||||
| 			</ul> | ||||
| 		</div> | ||||
|   | ||||
| @@ -3,17 +3,23 @@ | ||||
| 	Landing page, keeping it apps and development projects like old WordPress site. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Announcements"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Welcome!</h1> | ||||
| 			<?php if (isset($GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 				&& !$GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 			echo ' | ||||
| 			<div class="col-12 header center" > | ||||
| 				<img src="/files/media/icons/home.jpg"> | ||||
| 				<img src="/files/media/icons/home.jpg" alt="<<home.jpg>>"> | ||||
| 			</div> | ||||
| 			';?> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text center"> | ||||
| 			<div class="col-12 header center"> | ||||
| 				<p> | ||||
| 					Thank you for visiting my site! My goal is to make the world a | ||||
| 					better place. Hopefully you find content here which helps empower | ||||
| @@ -21,9 +27,8 @@ | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "subpages/home/apps.php"; | ||||
| 	include "subpages/home/announcements.php"; | ||||
|  | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
| cd `dirname $0` | ||||
|  | ||||
| # Create the necessary HTML components for a web page. | ||||
| ./helpers/body_open.php | ||||
| ./helpers/body_open.php | sed -e 's/Hyperling/Hyperling: Journey/' | ||||
|  | ||||
| #Content for this page | ||||
| cat << EOF | ||||
|   | ||||
| @@ -1,37 +0,0 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Lists of items which I'd like to share such as gear and frequently used apps. | ||||
| --> | ||||
| <?php | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Lists</h1> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<h3 class="col-6 header">Gear</h3> | ||||
|  | ||||
| 			<h3 class="col-6 header">Apps</h3> | ||||
|  | ||||
| 			<!-- Gear --> | ||||
| 			<div class="col-6 text"> | ||||
| 				<p> | ||||
| 					Gear that I find critical to my life. | ||||
| 				</p> | ||||
| 				<ul class="indent"> | ||||
| 					<li><a href="TBD">Sleeping Bag</a></li> | ||||
| 				</ul> | ||||
| 			</div> | ||||
|  | ||||
| 			<!-- Apps --> | ||||
| 			<div class="col-6 text"> | ||||
| 				<p> | ||||
| 					Apps that I use frequently on a degoogled Android phone. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
| @@ -3,17 +3,23 @@ | ||||
| 	Page for my video links. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Media"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Media</h1> | ||||
| 			<!--<?php if (isset($GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 				&& !$GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 			echo ' | ||||
| 			<div class="col-12 header center" > | ||||
| 				<img src="/files/media/icons/videos.jpg"> | ||||
| 				<img src="/files/media/icons/videos.jpg" alt="<<videos.jpg>>"> | ||||
| 			</div> | ||||
| 			';?>--> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text center"> | ||||
| 			<div class="col-12 header center"> | ||||
| 				<p> | ||||
| 					My written works, social platforms, and photos can be found here. | ||||
| 				</p> | ||||
| @@ -29,9 +35,18 @@ | ||||
| 				<p> | ||||
| 					I enjoy writing! Find my free eBooks below. | ||||
| 				</p> | ||||
| 				<ul class="indent"><li> | ||||
| 					<a href="/health/">My Health Protocol</a> | ||||
| 				</li></ul> | ||||
| 				<ul class="indent"> | ||||
| 					<li> | ||||
| 						2025-09-28: <a href="/freedom/">Voluntary Sovereignty</a> | | ||||
| 						Existing in a statist society with the least amount of friction. | ||||
| 					</li> | ||||
| 					<li><p><!-- Small Gap --></p></li> | ||||
| 					<li> | ||||
| 						2024-03-07: <a href="/health/">Hyperling's Health Protocol</a> | | ||||
| 						Health is a lifestyle, not a diet. Align yourself with Nature | ||||
| 						to receive its blessings. | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| @@ -102,7 +117,6 @@ | ||||
| 				</li></ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
							
								
								
									
										20
									
								
								pages/photos-all.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								pages/photos-all.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| #!/bin/bash | ||||
| # Alias for new All Photos feed. | ||||
|  | ||||
| # Move to main directory. | ||||
| DIR=`dirname $0` | ||||
| cd $DIR/.. | ||||
|  | ||||
| # Locations of photo scripts. | ||||
| photos_all=./files/photos/all.html | ||||
| photos=./pages/photos.sh | ||||
|  | ||||
| # If the all script does not exist,call the generator and ignore its output. | ||||
| if [[ ! -e $photos_all ]]; then | ||||
| 	$photos > /dev/null | ||||
| fi | ||||
|  | ||||
| ## Main ## | ||||
| cat $photos_all | ||||
|  | ||||
| exit 0 | ||||
							
								
								
									
										398
									
								
								pages/photos.sh
									
									
									
									
									
								
							
							
						
						
									
										398
									
								
								pages/photos.sh
									
									
									
									
									
								
							| @@ -2,12 +2,11 @@ | ||||
| # 2024-01-21 Hyperling | ||||
| # Transition away from PhotoPrism. Helps to save system resources and downsize. | ||||
|  | ||||
| # Static Variables | ||||
| ## Static Variables ## | ||||
| DIR=`dirname $0` | ||||
| header="<html>\n\t<header>\n\t\t<title>ALBUM</title>\n\t</header>\n\t<body>" | ||||
| footer="\n\t</body>\n</html>" | ||||
| a="a target='_blank' rel='noopener noreferrer'" | ||||
|  | ||||
| # Functions | ||||
| ## Functions ## | ||||
| function remove_problem_strings { | ||||
| 	file="$1" | ||||
| 	sed -i -e 's/#!\/usr\/bin\/php//g' $file | ||||
| @@ -20,6 +19,7 @@ cd $DIR/.. | ||||
| HELPER_DIR=./pages/helpers | ||||
| PHOTOS_DIR=./files/photos | ||||
| mainpage=$PHOTOS_DIR/index.html | ||||
| allpage=$PHOTOS_DIR/all.html | ||||
|  | ||||
| # Use the cached version if available. | ||||
| if [[ -e $mainpage ]]; then | ||||
| @@ -28,146 +28,278 @@ if [[ -e $mainpage ]]; then | ||||
| 	exit 0 | ||||
| fi | ||||
|  | ||||
| # Create the necessary HTML components for a web page. | ||||
| $HELPER_DIR/body_open.php > $mainpage | ||||
| echo "" >> $mainpage | ||||
| ## Start the main /photos/ page. ## | ||||
| function start_main_page { | ||||
| 	# Create the necessary HTML components for a web page. | ||||
| 	$HELPER_DIR/body_open.php > $mainpage | ||||
| 	sed -i -e 's/Hyperling/Hyperling: Photos/' $mainpage | ||||
| 	echo "" >> $mainpage | ||||
|  | ||||
| # Give the page a description. | ||||
| echo -e "\t\t<div class='row'>" >> $mainpage | ||||
| echo -e "\t\t\t<h1 class='col-12 title'>Albums</h1>" >> $mainpage | ||||
| echo -e "\t\t</div>" >> $mainpage | ||||
|  | ||||
| echo -e "\t\t<div class='row'>" >> $mainpage | ||||
| echo -e "\t\t\t<div class='col-12 text'>" >> $mainpage | ||||
| echo -en "\t\t\t\t<p>You may click on an album name to " >> $mainpage | ||||
| echo -en "view all of its files, or click on a specific image to bring up the " >> $mainpage | ||||
| echo -en "full resolution. On the album pages you may also click an image or " >> $mainpage | ||||
| echo -e "video name to pull up the full resolution for download.</p>" >> $mainpage | ||||
| echo -e "\t\t\t</div>" >> $mainpage | ||||
| echo -e "\t\t</div>" >> $mainpage | ||||
|  | ||||
| # Display the album names descending. | ||||
| ls $PHOTOS_DIR/ | sort -r | while read album; do | ||||
| 	# Skip files, only read directories. | ||||
| 	if [[ ! -d $PHOTOS_DIR/$album ]]; then | ||||
| 		continue | ||||
| 	fi | ||||
|  | ||||
| 	# Clean album name. | ||||
| 	album_name=${album} | ||||
| 	album_name=${album_name//_/ } | ||||
| 	album_name=${album_name//-/ } | ||||
| 	# Give the page a description. | ||||
| 	echo -e "\t\t<div class='row'>" >> $mainpage | ||||
| 	echo -en "\t\t\t<h2 class='col-12 title'>" >> $mainpage | ||||
| 	echo -en "<a href='/files/photos/$album/index.html' " >> $mainpage | ||||
| 	echo -e "target='_blank' rel='noopener noreferrer'>$album_name</a></h2>" >> $mainpage | ||||
| 	echo -e "\t\t\t<h1 class='col-12 title'>Albums</h1>" >> $mainpage | ||||
| 	echo -e "\t\t</div>" >> $mainpage | ||||
|  | ||||
| 	# Catch all the upcoming photo records. | ||||
| 	echo -e "\t\t<div class='row'>\n\t\t\t<div class='col-12 text'>" >> $mainpage | ||||
|  | ||||
| 	# Create index page for each photo ALBUM based on its contents. | ||||
| 	page="" | ||||
| 	subpage="$PHOTOS_DIR/$album/index.html" | ||||
| 	$HELPER_DIR/body_open.php > $subpage | ||||
|  | ||||
| 	# Add a back button | ||||
| 	echo -en "\n\t\t<div class='row'>\n\t\t\t<a href='/photos'>" >> $subpage | ||||
| 	echo -e "<h3 class='col-12 title'>Back</h3></a>\n\t\t</div>" >> $subpage | ||||
|  | ||||
| 	# Build the ALBUM page. | ||||
| 	echo -e "\t\t<div class='row'>" >> $subpage | ||||
| 	echo -e "\t\t\t<h1 class='col-12 title'>$album_name</h1>" >> $subpage | ||||
| 	echo -e "\t\t</div>" >> $subpage | ||||
|  | ||||
| 	ls $PHOTOS_DIR/$album/* | sort | while read photo; do | ||||
| 		# Do not include the index page. | ||||
| 		if [[ $photo == *"index.html" ]]; then | ||||
| 			continue | ||||
| 		fi | ||||
|  | ||||
| 		# Clean filename to be a little more presentable. | ||||
| 		# Going with CAPSLOCK. ;) | ||||
| 		typeset -u filename | ||||
| 		filename="`basename $photo`" | ||||
| 		# Remove extension. | ||||
| 		filename="${filename%%.*}" | ||||
| 		# Remove special characters for spaces. | ||||
| 		filename="${filename//_/ }" | ||||
| 		filename="${filename//-/ }" | ||||
|  | ||||
| 		if [[ $photo == *"/README.md" || $photo == *"/README.txt" ]]; then | ||||
| 			# If there is a README, show it on the PHOTOS page without a link. | ||||
| 			echo -e "\t\t\t\t<p>`cat $photo`</p>" >> $mainpage | ||||
| 		else | ||||
| 			# Otherwise put in the PHOTOS page list. | ||||
| 			echo -en "\t\t\t\t<li class='indent'><a href=/$photo target='_blank' " >> $mainpage | ||||
| 			echo -en "rel='noopener noreferrer'>$filename" >> $mainpage | ||||
| 			if [[ $photo == *".mp4" ]]; then | ||||
| 				echo -en " [VIDEO]" >> $mainpage | ||||
| 			fi | ||||
| 			echo -e "</a></li>" >> $mainpage | ||||
| 		fi | ||||
|  | ||||
| 		## Put in the subpage HTML ## | ||||
| 		# Set the count if this is the first loop. | ||||
| 		if [[ -z $count ]]; then | ||||
| 			count=0 | ||||
| 		fi | ||||
| 		# Add a row for the next 2 images. | ||||
| 		if (( $count % 2 == 0 )); then | ||||
| 			echo -e "\t\t<div class='row text'>" >> $subpage | ||||
| 		fi | ||||
| 		# Add the container for the image and its text. | ||||
| 		echo -e "\t\t\t<div class='col-6 center'>" >> $subpage | ||||
| 		echo -en "\t\t\t\t<a href=/$photo target='_blank' " >> $subpage | ||||
| 		echo -e "rel='noopener noreferrer'>" >> $subpage | ||||
| 		# Determine what type of media it is, and how to display it. | ||||
| 		if [[ $photo == *".mp4" ]]; then | ||||
| 			echo -e "\t\t\t\t\t<video width='320px' controls>" >> $subpage | ||||
| 			echo -e "\t\t\t\t\t\t<source src='/$photo' type=video/mp4>" >> $subpage | ||||
| 			echo -e "\t\t\t\t\t\tYour browser does not support videos." >> $subpage | ||||
| 			echo -e "\t\t\t\t\t</video>" >> $subpage | ||||
| 		elif [[ $photo == *".md" || $photo == *".txt" ]]; then | ||||
| 			echo -e "\t\t\t\t\t<p>`cat $photo`</p>" >> $subpage | ||||
| 		else | ||||
| 			echo -e "\t\t\t\t\t<img src='/$photo'/>" >> $subpage | ||||
| 		fi | ||||
| 		# Check if it needs an extra descriptive detail. | ||||
| 		echo -en "\t\t\t\t\t<p>$filename" >> $subpage | ||||
| 		if [[ $photo == *".mp4" ]]; then | ||||
| 			echo -en " [VIDEO]" >> $subpage | ||||
| 		fi | ||||
| 		# Close the image description and its link. | ||||
| 		echo -e "</p>\n\t\t\t\t</a>\n\t\t\t</div>" >> $subpage | ||||
| 		# Close the row after an odd count. | ||||
| 		if (( $count % 2 == 1 )); then | ||||
| 			echo -e "\t\t</div>" >> $subpage | ||||
| 		fi | ||||
| 		count=$(( count + 1 )) | ||||
| 	done | ||||
| 	echo -e "\t\t</div>" >> $subpage | ||||
|  | ||||
| 	# End album listings on PHOTOS page. | ||||
| 	echo -e "\t\t<div class='row'>" >> $mainpage | ||||
| 	echo -e "\t\t\t<div class='col-12 header'>" >> $mainpage | ||||
| 	echo -en "\t\t\t\t<p>You may click on an album name to " >> $mainpage | ||||
| 	echo -en "view all of its files, or click on a specific image to bring up the " >> $mainpage | ||||
| 	echo -en "full resolution. On the album pages you may also click an image or " >> $mainpage | ||||
| 	echo -e "video name to pull up the full resolution for download.</p>" >> $mainpage | ||||
| 	echo -e "\t\t\t</div>" >> $mainpage | ||||
| 	echo -e "\t\t</div>" >> $mainpage | ||||
|  | ||||
| 	# Add a final back button | ||||
| 	echo -en "\n\t\t<div class='row'>\n\t\t\t<a href='/photos'>" >> $subpage | ||||
| 	echo -e "<h3 class='col-12 title'>Back</h3></a>\n\t\t</div>" >> $subpage | ||||
| 	echo -e "\t\t<div class='row'>" >> $mainpage | ||||
| 	echo -e "\t\t\t<$a href='/photos-all'" >> $mainpage | ||||
| 	echo -e "\t\t\t\tclass='col-12 header'>Click Here for the Full Photo Feed" >> $mainpage | ||||
| 	echo -e "\t\t\t</a>" >> $mainpage | ||||
| 	echo -e "\t\t</div>" >> $mainpage | ||||
| } | ||||
|  | ||||
| 	# Close out the ALBUM's page. | ||||
| 	$HELPER_DIR/body_close.php >> $subpage | ||||
| 	echo "<!-- Built on `date`. -->" >> $subpage | ||||
| ## Close out the main page after the sub pages are done being added. ## | ||||
| function end_main_page { | ||||
| 	# Finish the main /photos/ page. | ||||
| 	$HELPER_DIR/body_close.php >> $mainpage | ||||
| 	echo "<!-- Built on `date`. -->" >> $mainpage | ||||
| 	remove_problem_strings $mainpage | ||||
| } | ||||
|  | ||||
| 	remove_problem_strings $subpage | ||||
| done | ||||
| ## Create the album pages. ## | ||||
| function build_album_pages { | ||||
| 	# Display the album names descending. | ||||
| 	ls $PHOTOS_DIR/ | sort -r | while read album; do | ||||
| 		# Skip files, only read directories. | ||||
| 		if [[ ! -d "$PHOTOS_DIR/$album" || "$album" == "all" ]]; then | ||||
| 			continue | ||||
| 		fi | ||||
|  | ||||
| # Finish the web page. | ||||
| $HELPER_DIR/body_close.php >> $mainpage | ||||
| echo "<!-- Built on `date`. -->" >> $mainpage | ||||
| 		# Clean album name. | ||||
| 		album_name=${album} | ||||
| 		album_name=${album_name//_/ } | ||||
| 		album_name=${album_name//-/ } | ||||
| 		echo -e "\t\t<div class='row'>" >> $mainpage | ||||
| 		echo -en "\t\t\t<h2 class='col-12 title'>" >> $mainpage | ||||
| 		echo -en "<$a href='/files/photos/$album/index.html'>" >> $mainpage | ||||
| 		echo -e "$album_name</a></h2>" >> $mainpage | ||||
| 		echo -e "\t\t</div>" >> $mainpage | ||||
|  | ||||
| remove_problem_strings $mainpage | ||||
| 		# Catch all the upcoming photo records. | ||||
| 		echo -e "\t\t<div class='row'>\n\t\t\t<div class='col-12 text'>" >> $mainpage | ||||
|  | ||||
| 		# Create index page for each photo ALBUM based on its contents. | ||||
| 		page="" | ||||
| 		subpage="$PHOTOS_DIR/$album/index.html" | ||||
| 		$HELPER_DIR/body_open.php > $subpage | ||||
| 		sed -i -e "s/Hyperling/Hyperling: $album_name/" $subpage | ||||
| 		echo "" >> $subpage | ||||
|  | ||||
| 		# Add a back button | ||||
| 		echo -en "\n\t\t<div class='row'>\n\t\t\t<a href='/photos'>" >> $subpage | ||||
| 		echo -e "<h3 class='col-12 title'>Back</h3></a>\n\t\t</div>" >> $subpage | ||||
|  | ||||
| 		# Build the ALBUM page. | ||||
| 		echo -e "\t\t<div class='row'>" >> $subpage | ||||
| 		echo -e "\t\t\t<h1 class='col-12 title'>$album_name</h1>" >> $subpage | ||||
| 		echo -e "\t\t</div>" >> $subpage | ||||
|  | ||||
| 		ls $PHOTOS_DIR/$album/* | sort | while read photo; do | ||||
| 			# Do not include the index page. | ||||
| 			if [[ $photo == *"index.html" ]]; then | ||||
| 				continue | ||||
| 			fi | ||||
|  | ||||
| 			# Clean filename to be a little more presentable. | ||||
| 			# Going with CAPSLOCK. ;) | ||||
| 			typeset -u filename | ||||
| 			filename="`basename $photo`" | ||||
| 			# Remove extension. | ||||
| 			filename="${filename%%.*}" | ||||
| 			# Remove special characters for spaces. | ||||
| 			filename="${filename//_/ }" | ||||
| 			filename="${filename//-/ }" | ||||
|  | ||||
| 			if [[ $photo == *"/README.md" || $photo == *"/README.txt" ]]; then | ||||
| 				# If there is a README, show it on the PHOTOS page without a link. | ||||
| 				echo -e "\t\t\t\t<p>`cat $photo`</p>" >> $mainpage | ||||
| 			else | ||||
| 				# Otherwise put in the PHOTOS page list. | ||||
| 				echo -en "\t\t\t\t<li class='indent'><$a href='/$photo'>$filename" >> $mainpage | ||||
| 				if [[ $photo == *".mp4" ]]; then | ||||
| 					echo -en " [VIDEO]" >> $mainpage | ||||
| 				fi | ||||
| 				echo -e "</a></li>" >> $mainpage | ||||
| 			fi | ||||
|  | ||||
| 			## Put in the subpage HTML ## | ||||
| 			new_row="\t\t<div class='row text'>" | ||||
| 			# Set the count and start a row if this is the first loop. | ||||
| 			if [[ -z $count ]]; then | ||||
| 				count=0 | ||||
| 				echo -e "$newrow" >> $subpage | ||||
| 			# Else check if we need to start a new one for the next 2 images. | ||||
| 			elif (( $count % 2 == 0 )); then | ||||
| 				echo -e "\t\t</div>" >> $subpage | ||||
| 				echo -e "$newrow" >> $subpage | ||||
| 			fi | ||||
| 			# Add the container for the image and its text. | ||||
| 			echo -e "\t\t\t<div class='col-6 center'>" >> $subpage | ||||
| 			echo -en "\t\t\t\t<$a href='/$photo'>" >> $subpage | ||||
| 			# Determine what type of media it is, and how to display it. | ||||
| 			if [[ $photo == *".mp4" ]]; then | ||||
| 				echo -e "\t\t\t\t\t<video width='320px' controls>" >> $subpage | ||||
| 				echo -e "\t\t\t\t\t\t<source src='/$photo' type=video/mp4>" >> $subpage | ||||
| 				echo -e "\t\t\t\t\t\tYour browser does not support videos." >> $subpage | ||||
| 				echo -e "\t\t\t\t\t</video>" >> $subpage | ||||
| 			elif [[ $photo == *".md" || $photo == *".txt" ]]; then | ||||
| 				echo -e "\t\t\t\t\t<p>`cat $photo`</p>" >> $subpage | ||||
| 			else | ||||
| 				echo -e "\t\t\t\t\t<img src='/$photo' alt=''>" >> $subpage | ||||
| 			fi | ||||
| 			# Check if it needs an extra descriptive detail. | ||||
| 			echo -en "\t\t\t\t\t<p>$filename" >> $subpage | ||||
| 			if [[ $photo == *".mp4" ]]; then | ||||
| 				echo -en " [VIDEO]" >> $subpage | ||||
| 			fi | ||||
| 			# Close the image description and its link. | ||||
| 			echo -e "</p>\n\t\t\t\t</a>\n\t\t\t</div>" >> $subpage | ||||
| 			count=$(( count + 1 )) | ||||
| 		done | ||||
| 		echo -e "\t\t</div>" >> $subpage | ||||
|  | ||||
| 		# End album listings on PHOTOS page. | ||||
| 		echo -e "\t\t\t</div>" >> $mainpage | ||||
| 		echo -e "\t\t</div>" >> $mainpage | ||||
|  | ||||
| 		# Add a final back button | ||||
| 		echo -en "\n\t\t<div class='row'>\n\t\t\t<a href='/photos'>" >> $subpage | ||||
| 		echo -e "<h3 class='col-12 title'>Back</h3></a>\n\t\t</div>" >> $subpage | ||||
|  | ||||
| 		# Close out the ALBUM's page. | ||||
| 		$HELPER_DIR/body_close.php >> $subpage | ||||
| 		echo "<!-- Built on `date`. -->" >> $subpage | ||||
| 		remove_problem_strings $subpage | ||||
| 	done | ||||
| } | ||||
|  | ||||
| ## Create an ALL page. ## | ||||
| function build_all_page { | ||||
| 	# - Shows all photos in descending order, as an overall feed. | ||||
| 	# - Four images wide. | ||||
| 	# - Has 2 URLs below the image. One to the album, and one to the image. | ||||
| 	# - Image is a URL to itself as with other pages. | ||||
| 	# - Images are shown at maximum 500px or so vertical for quick scrolling. | ||||
|  | ||||
| 	# Create/overwrite file. | ||||
| 	$HELPER_DIR/body_open.php > $allpage | ||||
| 	sed -i -e 's/Hyperling/Hyperling: All Photos/' $allpage | ||||
| 	echo "" >> $allpage | ||||
|  | ||||
| 	# Add header. | ||||
| 	echo -e "\t\t<div class='row'>" >> $allpage | ||||
| 	echo -e "\t\t\t<h1 class='col-12 title'>All Photo Feed</h1>" >> $allpage | ||||
| 	echo -e "\t\t</div>" >> $allpage | ||||
|  | ||||
| 	# Add images to the page | ||||
| 	find $PHOTOS_DIR/ ! -name "*".html | sort -r | while read media_file; do | ||||
| 		if [[ -d $media_file | ||||
| 			|| "$media_file" == *"/photos/README.md" | ||||
| 		]]; then | ||||
| 			continue | ||||
| 		fi | ||||
|  | ||||
| 		# Remove the initial '.' from the URI. | ||||
| 		media_uri="${media_file//\.\//\/}" | ||||
|  | ||||
| 		# Path to the image home. | ||||
| 		dir_uri="`dirname $media_uri`" | ||||
|  | ||||
| 		# Prepare variables which will be used throughout the loop. | ||||
| 		media_name="`basename $media_uri`" | ||||
| 		dir_name="`basename $dir_uri`" | ||||
|  | ||||
| 		# This must be after the dir_name has been pulled. | ||||
| 		dir_uri="$dir_uri/index.html" | ||||
|  | ||||
| 		# Do not show the file extension for the filename. | ||||
| 		media_name="${media_name%%.*}" | ||||
|  | ||||
| 		# Change underscores and dashes to be spaces for better overflow. | ||||
| 		media_name="${media_name//_/ }" | ||||
| 		media_name="${media_name//-/ }" | ||||
| 		dir_name="${dir_name//_/ }" | ||||
| 		dir_name="${dir_name//-/ }" | ||||
|  | ||||
| 		media="<img src='$media_uri' alt='' style='width:100%'>" | ||||
|  | ||||
| 		# Determine how to show the file. | ||||
| 		if [[ $media_uri == *".mp4" ]]; then | ||||
| 			media="<video controls style='width:100%'>" | ||||
| 			media="${media}<source src='$media_uri' type=video/mp4>" | ||||
| 			media="${media}Your browser does not support videos." | ||||
| 			media="${media}</video>" | ||||
| 			media_name="$media_name [VIDEO]" | ||||
| 		elif [[ $media_uri == *".md" || $media_uri == *".txt" ]]; then | ||||
| 			media="<p>`cat $media_file`</p>" | ||||
| 		fi | ||||
|  | ||||
| 		# Add a row if count has reset. | ||||
| 		if [[ -z $count ]]; then | ||||
| 			count=0 | ||||
| 		fi | ||||
| 		if [[ $count == 0 ]]; then | ||||
| 			echo -e "\t\t</div>" >> $allpage | ||||
| 			echo -e "\t\t<div class='row text'>" >> $allpage | ||||
| 		fi | ||||
|  | ||||
| 		# Add a column. | ||||
| 		echo -e "\t\t\t<div class=col-3>" >> $allpage | ||||
|  | ||||
| 		# Add the image. | ||||
| 		echo -e "\t\t\t\t<div class=center>" >> $allpage | ||||
| 		echo -e "\t\t\t\t\t<$a href='$media_uri'>$media</a>" >> $allpage | ||||
| 		echo -e "\t\t\t\t</div>" >> $allpage | ||||
|  | ||||
| 		# Add the URLs. | ||||
| 		echo -e "\t\t\t\t<div class=center>" >> $allpage | ||||
| 		echo -e "\t\t\t\t\t<p><$a href='$dir_uri'>$dir_name</a></p>" >> $allpage | ||||
| 		echo -e "\t\t\t\t</div>" >> $allpage | ||||
| 		echo -e "\t\t\t\t<div class=center>" >> $allpage | ||||
| 		echo -e "\t\t\t\t\t<p><$a href='$media_uri'>$media_name</a></p>" >> $allpage | ||||
| 		echo -e "\t\t\t\t</div>" >> $allpage | ||||
|  | ||||
| 		# Close the column. | ||||
| 		echo -e "\t\t\t</div>" >> $allpage | ||||
|  | ||||
| 		# Close the row and reset the the count if full. | ||||
| 		if [[ $count == 3 ]]; then | ||||
| 			echo -e "\t\t</div>" >> $allpage | ||||
| 			count=0 | ||||
| 		else | ||||
| 			count=$(( count + 1 )) | ||||
| 		fi | ||||
| 	done | ||||
|  | ||||
| 	# Add a final back button. | ||||
| 	echo -en "\n\t\t<div class='row'>\n\t\t\t<a href='/photos'>" >> $allpage | ||||
| 	echo -e "<h3 class='col-12 title'>Back</h3></a>\n\t\t</div>" >> $allpage | ||||
|  | ||||
| 	# Finish the ALL page. | ||||
| 	$HELPER_DIR/body_close.php >> $allpage | ||||
| 	echo "<!-- Built on `date`. -->" >> $allpage | ||||
| 	remove_problem_strings $allpage | ||||
| } | ||||
|  | ||||
| ## Main ## | ||||
| beg_time="$SECONDS" | ||||
|  | ||||
| start_main_page | ||||
| build_album_pages | ||||
| build_all_page | ||||
| end_main_page | ||||
|  | ||||
| end_time="$SECONDS" | ||||
| time="$(( $end_time - $beg_time ))" | ||||
| echo "<!-- Script took '$time' seconds to process. -->" >> $mainpage | ||||
|  | ||||
| cat $mainpage | ||||
| exit 0 | ||||
|   | ||||
							
								
								
									
										72
									
								
								pages/resources.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										72
									
								
								pages/resources.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Lists of items which I'd like to share such as gear and frequently used apps. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Resources"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Lists of Resources</h1> | ||||
| 		</div> | ||||
|  | ||||
| 		<!-- Books --> | ||||
| 		<div class="row text" id="books"> | ||||
| 			<h3 class="col-3"> | ||||
| 				Books | ||||
| 			</h3> | ||||
| 			<div class="col-9"> | ||||
| 				<p> | ||||
| 					TBD/TODO: Berk list description goes here! | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					Another line fortesting. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					Yet another line fortesting. | ||||
| 				</p> | ||||
| 				<ul> | ||||
| 					<li> | ||||
| 						The Peaceful Warrior | ||||
| 					</li> | ||||
| 					<li> | ||||
| 						TBD: Name of book on healing through breathing and posture. | ||||
| 					</li> | ||||
| 					<li> | ||||
| 						The Untethered Soul / Living Untethered | ||||
| 					</li> | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<!-- Apps --> | ||||
| 		<div class="row text" id="apps"> | ||||
| 			<h3 class="col-3"> | ||||
| 				<a target='_blank' rel='noopener noreferrer' | ||||
| 					href="https://git.hyperling.com/me/env-obtainium"> | ||||
| 					Apps (Repo TBD/TODO) | ||||
| 				</a> | ||||
| 			</h3> | ||||
| 			<div class="col-9"> | ||||
| 				<p> | ||||
| 					Obtaiumiun config for apps that I use on a degoogled Android phone. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<!-- Gear --> | ||||
| 		<div class="row text" id="gear"> | ||||
| 			<h3 class="col-3"> | ||||
| 				Gear | ||||
| 			</h3> | ||||
| 			<div class="col-9"> | ||||
| 				<p> | ||||
| 					Important gear I recommend. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
| @@ -3,14 +3,15 @@ | ||||
| 	Page for my resume and work skill links. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Resume"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Resume</h1> | ||||
| 			<div class="col-12 header center" > | ||||
| 				<img src="/files/media/icons/home.jpg"> <!-- TBD use a new photo --> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<h2 class="col-12 title center">Current Status : Traveling Full Time</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| @@ -18,25 +19,15 @@ | ||||
| 				<p> | ||||
| 					Interested in hiring me? View my resume below! | ||||
| 				</p> | ||||
| 				<ul class="indent"><li> | ||||
| 				<!--<ul class="indent"><li>--> | ||||
| 					<a href="https://hyperling.com/files/media/documents/Resume.pdf" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					> | ||||
| 						[PDF] | Direct Download | ||||
| 					</a> | ||||
| 				</li></ul> | ||||
| 				<!-- For those sneaky folks who look at source code. ;) | ||||
| 				<ul class="indent"><li> | ||||
| 					<a href="https://hyperling.com/files/media/documents/resume.md" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					> | ||||
| 						[Markdown] | Direct Download | ||||
| 					</a> | ||||
| 				</li></ul> | ||||
| 				--> | ||||
| 				<!--</li></ul>--> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -12,12 +12,14 @@ | ||||
| 					I have not been sick since I cleaned up my lifestyle in 2014. No | ||||
| 					colds, flus, fevers, etc. My suggestions for accomplishing this | ||||
| 					are simple. Consistently: | ||||
| 				</p> | ||||
| 					<ul class="indent"> | ||||
| 						<li>eat enough clean food,</li> | ||||
| 						<li>drink enough clean water,</li> | ||||
| 						<li>get enough good sleep, and</li> | ||||
| 						<li>enjoy a low-stress life.</li> | ||||
| 					</ul> | ||||
| 				<p> | ||||
| 					Unfortunately our society today has many different views on how | ||||
| 					to do these things, most of which I would say do not work. A | ||||
| 					quick list of my protocol without getting too into the weeds can | ||||
|   | ||||
							
								
								
									
										109
									
								
								pages/subpages/home/announcements.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										109
									
								
								pages/subpages/home/announcements.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	$long = true; | ||||
| ?> | ||||
| 		<div class="row" id="obtainium"> | ||||
| 			<h2 class="col-12 header">Announcements</h2> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<strong><a href="/freedom/">2025-09-28</a></strong> | ||||
| 				<p> | ||||
| 					I wrote another short free eBook, "Voluntary Sovereignty", check it out | ||||
| 					<a href="/freedom/">here</a>! | ||||
| 				</p> | ||||
| 				<?php	if ($long) echo " | ||||
| 				<p> | ||||
| 					It discusses how to live in order to create a truly free society, | ||||
| 					as well as how to conduct oneself in today's authoritarian system. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					Learn what your rights are and how to avoid being harassed by | ||||
| 					order followers while living how you were meant to be on the Earth. | ||||
| 				</p> | ||||
| 				";?> | ||||
| 				<p> | ||||
| 					<a href="https://odysee.com/@HyperVegan:2/20251003-Announcements:0" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					>Watch the announcement here | (HyperVegan: "Announcements: Skipped Midfest, Voluntary Sovereignty eBook, CheapRVLiving Interview")</a> | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<strong><a href="/apps/#expense">2025-03-27</a></strong> | ||||
| 				<p> | ||||
| 					My new Android app | ||||
| 					<a href="/apps/#expense">"Expense Tracker"</a> | ||||
| 					has been completed! | ||||
| 				</p> | ||||
| 				<?php	if ($long) echo " | ||||
| 				<p> | ||||
| 					It allows for tracking recurring expenses against income and static assets, | ||||
| 					helping plan for financial planning and savings goals. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					This is my first app developed using the Flutter framework. | ||||
| 				</p> | ||||
| 				";?> | ||||
| 				<p> | ||||
| 					<a href="https://odysee.com/@HyperVegan:2/20250402-HyperVegan-ExpenseTrackerApp:4" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					>Watch the announcement here | (HyperVegan: "Expense Tracker App")</a> | ||||
| 				</p> | ||||
| 			</div> | ||||
| 			</a> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<strong><a href="/health/">2024-03-07</a></strong> | ||||
| 				<p> | ||||
| 					Find my free eBook, "Hyperling's Health Protocol", | ||||
| 					<a href="/health/">here</a>! | ||||
| 				</p> | ||||
| 				<?php	if ($long) echo " | ||||
| 				<p> | ||||
| 					It contains a summary of my favorite and most useful lifestyle advice. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					These range across the basics of food / water / sleep / exercise | ||||
| 					as well as less discussed topics of environment and positivity. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					Reverse chronic disease and live your life full of energy and abundance! | ||||
| 				</p> | ||||
| 				";?> | ||||
| 				<p> | ||||
| 					<a href="https://odysee.com/@HyperVegan:2/20240306_MyHealthProtocol-Book:9" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					>Watch the announcement here | (HyperVegan: "My Health Protocol | eBook")</a> | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<strong><a href="/apps/#tictactoe">2024-03-31</a></strong> | ||||
| 				<p> | ||||
| 					There's a new app in town, | ||||
| 					<a href="/apps/#tictactoe">Tic-Tac-Toe</a>! | ||||
| 				</p> | ||||
| 				<?php	if ($long) echo " | ||||
| 				<p> | ||||
| 					This was written to learn Kotlin style Android programming. | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					It allows playing against a range of automated opponents, | ||||
| 					as well as a local human player! | ||||
| 				</p> | ||||
| 				";?> | ||||
| 				<p> | ||||
| 					<a href="https://odysee.com/@HyperVegan:2/20240401_NewYearNewApp:1" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					>Watch the announcement here | (HyperVegan: "New Year, New App")</a> | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
| @@ -1,222 +0,0 @@ | ||||
| #!/usr/bin/php | ||||
| 		<div class="row" id="experience"> | ||||
| 			<h2 class="col-12 header">My Profession</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					I'm a professional software engineer who's been playing with | ||||
| 					Linux system administration from a young age. Much of my career | ||||
| 					has focused on back-end / database systems and optimizing | ||||
| 					workflows. In my free time I enjoy learning new languages and | ||||
| 					writing apps for Android. | ||||
| 				</p> | ||||
| 				<!--<p><a href="/resume/">My resume can be found here</a>.</p>--> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row" id="programs"> | ||||
| 			<h2 class="col-12 header">Public Programs</h2> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					Please feel welcome to use any of my free software below. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row" id="android"> | ||||
| 			<h3 class="col-12 header">Android Apps</h3> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row center text"> | ||||
|  | ||||
| 			<div class="col-12 text border" id="expense"> | ||||
| 				<figure> | ||||
| 					<a href="https://git.hyperling.com/me/flutter-expense-tracker/releases"> | ||||
| 						<img loading="lazy" width="25%" height="25%" alt="expense_image" | ||||
| 							src="/files/media/icons/expense.png" | ||||
| 						/> | ||||
| 						<figcaption> | ||||
| 							<p>Recurring Expense Tracker</p> | ||||
| 						</a> | ||||
| 						<p> | ||||
| 							Keep track of repeating expenses and | ||||
| 							view projections of their effect on your finances. | ||||
| 							First app written with Flutter. | ||||
| 						</p> | ||||
| 						<p> | ||||
| 							<!--[<s><a>F-Droid</a></s>]--> | ||||
| 							[<a href="https://git.hyperling.com/me/flutter-expense-tracker/" | ||||
| 								target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 							[<a href="https://git.hyperling.com/me/flutter-expense-tracker/releases" | ||||
| 								target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 						</p> | ||||
| 					</figcaption> | ||||
| 				</figure> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="tictactoe"> | ||||
| 				<figure> | ||||
| 					<a href="https://git.hyperling.com/me/android-tictactoe/releases"> | ||||
| 						<img loading="lazy" width="25%" height="25%" alt="tictactoe_image" | ||||
| 							src="/files/media/icons/tictactoe.png" | ||||
| 						/> | ||||
| 						<figcaption> | ||||
| 							<p>Tic-Tac-Toe</p> | ||||
| 						</a> | ||||
| 						<p> | ||||
| 							Play against a friend or a range of AIs. | ||||
| 							Written to practice Kotlin/Compose. | ||||
| 						</p> | ||||
| 						<p> | ||||
| 							<!--[<s><a>F-Droid</a></s>]--> | ||||
| 							[<a href="https://git.hyperling.com/me/android-tictactoe/" | ||||
| 								target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 							[<a href="https://git.hyperling.com/me/android-tictactoe/releases" | ||||
| 								target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 						</p> | ||||
| 					</figcaption> | ||||
| 				</figure> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="ctfu"> | ||||
| 				<figure> | ||||
| 					<a href="https://git.hyperling.com/me/android-carb-up/releases" | ||||
| 						target="_blank" rel="noopener noreferrer"> | ||||
| 						<img loading="lazy" width="25%" height="25%" alt="ctfu_image" | ||||
| 							src="/files/media/icons/ctfu.png" | ||||
| 						/> | ||||
| 						<figcaption> | ||||
| 							<p>Carb Up! BETA</p> | ||||
| 						</a> | ||||
| 						<p> | ||||
| 							Calculate cost-effective foods on a High Carb Low Fat lifestyle. | ||||
| 						</p> | ||||
| 						<p> | ||||
| 							<!--[<a href="https://play.google.com/store/apps/details?id=com.hyperling.carbupbeta" | ||||
| 								target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 							[<a href="https://git.hyperling.com/me/android-carb-up/" | ||||
| 								target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 							[<a href="https://git.hyperling.com/me/android-carb-up/releases" | ||||
| 								target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 						</p> | ||||
| 						<!--<p> | ||||
| 							<s> | ||||
| 								[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 							</s> | ||||
| 						</p>--> | ||||
| 					</figcaption> | ||||
| 				</figure> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="timer"> | ||||
| 				<figure> | ||||
| 					<a href="https://git.hyperling.com/me/android-infinite-timer/releases" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					> | ||||
| 						<img loading="lazy" width="25%" height="25%" alt="infinitetimer_image" | ||||
| 							src="/files/media/icons/infinitetimer.png" | ||||
| 						/> | ||||
| 						<figcaption> | ||||
| 							<p>Infinite Timer</p> | ||||
| 						</a> | ||||
| 						<p> | ||||
| 							Play a notification at your chosen interval. | ||||
| 						</p> | ||||
| 						<p> | ||||
| 							<!--[<a href="https://play.google.com/store/apps/details?id=com.hyperling.apps.infinitetimer" | ||||
| 								target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 							[<a href="https://git.hyperling.com/me/android-infinite-timer/" | ||||
| 								target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 							[<a href="https://git.hyperling.com/me/android-infinite-timer/releases" | ||||
| 								target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 						</p> | ||||
| 						<!--<p> | ||||
| 							<s> | ||||
| 								[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 							</s> | ||||
| 						</p>--> | ||||
| 					</figcaption> | ||||
| 				</figure> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="sleep"> | ||||
| 				<figure> | ||||
| 					<a href="https://git.hyperling.com/me/android-45-minute-rule/releases" | ||||
| 						target="_blank" rel="noopener noreferrer"> | ||||
| 						<img loading="lazy" width="25%" height="25%" alt="45minuterule" | ||||
| 							src="/files/media/icons/t45mr.png" | ||||
| 						/> | ||||
| 						<figcaption> | ||||
| 							<p>45 Minute Rule</p> | ||||
| 						</a> | ||||
| 						<p> | ||||
| 							Determine a good bedtime for waking during light sleep. | ||||
| 						</p> | ||||
| 						<p> | ||||
| 							<!--[<a href="https://play.google.com/store/apps/details?id=com.hyperling.apps.the45minuterule" | ||||
| 								target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 							[<a href="https://git.hyperling.com/me/android-45-minute-rule/" | ||||
| 								target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 							[<a href="https://git.hyperling.com/me/android-45-minute-rule/releases" | ||||
| 								target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 						</p> | ||||
| 						<!--<p> | ||||
| 							<s> | ||||
| 								[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 							</s> | ||||
| 						</p>--> | ||||
| 					</figcaption> | ||||
| 				</figure> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-12 text border" id="games"> | ||||
| 				<figure> | ||||
| 					<a href="https://git.hyperling.com/me/android-hypergames/releases" | ||||
| 						target="_blank" rel="noopener noreferrer" | ||||
| 					> | ||||
| 						<img loading="lazy" width="25%" height="25%" alt="hypergames_image" | ||||
| 							src="/files/media/icons/hypergames.png" | ||||
| 						/> | ||||
| 						<figcaption> | ||||
| 							<p> | ||||
| 								HyperGames | ||||
| 							</p> | ||||
| 						</a> | ||||
| 						<p> | ||||
| 							Started as a fun project for learning. | ||||
| 							Playable but unfinished. | ||||
| 						</p> | ||||
| 						<p> | ||||
| 							<!--[<a href="https://play.google.com/store/apps/details?id=apps.hyperling.com.platformer" | ||||
| 								target="_blank" rel="noopener noreferrer">Play Store</a>]--> | ||||
| 							[<a href="https://git.hyperling.com/me/android-hypergames/" | ||||
| 								target="_blank" rel="noopener noreferrer">Source Code</a>] | ||||
| 							[<a href="https://git.hyperling.com/me/android-hypergames/releases" | ||||
| 								target="_blank" rel="noopener noreferrer">APKs / Obtainium URL</a>] | ||||
| 						</p> | ||||
| 						<!--<p> | ||||
| 							<s> | ||||
| 								[<a target="_blank" rel="noopener noreferrer">F-Droid</a>] | ||||
| 							</s>--> | ||||
| 						</p> | ||||
| 					</figcaption> | ||||
| 				</figure> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row" id="other"> | ||||
| 			<h3 class="col-12 header">Other Programs</h3> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					For a full list of software including my Ansible automation, | ||||
| 					Docker setup, source code for this website, and other | ||||
| 					fun/random toys, check out | ||||
| 					<a href="https://git.hyperling.com/me" target="_blank">My Projects</a>. | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
| @@ -7,65 +7,66 @@ | ||||
| 		<div class="row text"> | ||||
|  | ||||
| 			<div class="col-4 center border"> | ||||
| 				<h3 class="title spacing">Preference 1 - Private Crypto</h3> | ||||
| 				<p>Send me any type of coin.</p> | ||||
| 				<strong class="spacing">Preference 1 - Private Crypto</strong> | ||||
| 				<p>Send any type of coin.</p> | ||||
| 				<div class="header"> | ||||
| 					<!-- https://trocador.app/en/anonpayurlgenerator --> | ||||
| 					<iframe src="https://trocador.app/anonpay/?ticker_to=xmr&network_to=Mainnet&address=4ATk6owoMki46CuVfyAHS57FB5deqVFudTsaifQC1cfmcaQemgPEftcjZcW9DmcyfrfdRjxHQ9m4JAVSorYTgm6h8JnT7ao&donation=True&amount=1337.0&name=Chad&description=Support+Chad+%40+Hyperling&email=me@hyperling,com&ticker_from=doge&network_from=Mainnet&buttonbgcolor=663399&textcolor=cccccc&bgcolor=" width="310" height="350" style="border:0" scrolling="no"></iframe> | ||||
| 					<iframe src="https://trocador.app/anonpay/?ticker_to=xmr&network_to=Mainnet&address=4ATk6owoMki46CuVfyAHS57FB5deqVFudTsaifQC1cfmcaQemgPEftcjZcW9DmcyfrfdRjxHQ9m4JAVSorYTgm6h8JnT7ao&donation=True&amount=1337.0&name=Chad&description=Support+Chad+%40+Hyperling&email=me@hyperling,com&ticker_from=doge&network_from=Mainnet&buttonbgcolor=663399&textcolor=cccccc&bgcolor=" width="310" height="350" style="border:0; overflow:hidden;"></iframe> | ||||
| 				</div> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-4 center border"> | ||||
| 				<h3 class="title spacing">Preference 2 - Public Crypto</h3> | ||||
| 				<p>Donate directly to my addresses.</p> | ||||
| 				<strong class="spacing">Preference 2 - Public Crypto</strong> | ||||
| 				<p>Donate directly to an address.</p> | ||||
| 				<div class="header"> | ||||
| 					<br/> | ||||
| 					<br> | ||||
|  | ||||
| 					<strong><code>XMR | Monero</code></strong> | ||||
| 					<div class="code"><code>4ATk6owoMki46CuVfyAHS57FB5deqVFudTsaifQC1cfmcaQemgPEftcjZcW9DmcyfrfdRjxHQ9m4JAVSorYTgm6h8JnT7ao</code></div> | ||||
| 					<br/> | ||||
| 					<br> | ||||
|  | ||||
| 					<strong><code>BTC | Bitcoin</code></strong> | ||||
| 					<div class="code"><kbd>bc1qsfe8dkvry3d34kztz449gkq67wq8fu2nkgfkh0</kbd></div> | ||||
| 					<br/> | ||||
| 					<div class="code"><code>bc1qsfe8dkvry3d34kztz449gkq67wq8fu2nkgfkh0</code></div> | ||||
| 					<br> | ||||
|  | ||||
| 					<strong><code>LTC | Litecoin</code></strong> | ||||
| 					<div class="code"><code>ltc1qavmpu5d6ljntxsd6jj548m4yys83zwscl0dzkx</code></div> | ||||
| 					<br/> | ||||
| 					<br> | ||||
|  | ||||
| 					<strong><code>LBC | Odysee's Coin</code></strong> | ||||
| 					<div class="code"><code>bDWP6qZajtm9Q9EkryKTorRwKFd5eDbPJj</code></div> | ||||
| 					<br/> | ||||
| 					<br> | ||||
| 				</div> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-4 center border"> | ||||
| 				<h3 class="title spacing">Preference 3 - Public USD</h3> | ||||
| 				<strong class="spacing">Preference 3 - Public USD</strong> | ||||
| 				<p>Send USD to a fiat-based account.</p> | ||||
| 				<div class="header"> | ||||
| 					<br/> | ||||
| 					<br> | ||||
|  | ||||
| 					<strong><code>Zelle</code></strong> | ||||
| 					<div class="code"> | ||||
| 						<kbd>me@hyperling.com</kbd> | ||||
| 						<br/> | ||||
| 						<br/> | ||||
| 						<img src="/files/media/icons/zelle.png"> | ||||
| 						<code>me@hyperling.com</code> | ||||
| 						<br> | ||||
| 						<br> | ||||
| 						<img src="/files/media/icons/zelle.png" alt="<<zelle.png>>"> | ||||
| 					</div> | ||||
| 					<br/> | ||||
| 					<br> | ||||
|  | ||||
| 					<strong><code>Venmo</code></strong> | ||||
| 					<div class="code"> | ||||
| 						<kbd> | ||||
| 						<code> | ||||
| 							@HyperVegan | ||||
| 							<br/> | ||||
| 							<br/> | ||||
| 							<kbd>[<a href="https://account.venmo.com/u/HyperVegan" | ||||
| 							<br> | ||||
| 							<br> | ||||
| 							<code>[<a href="https://account.venmo.com/u/HyperVegan" | ||||
| 								target="_blank" rel="noopener noreferrer" | ||||
| 							>Account Page</a>] | ||||
| 						</kbd> | ||||
| 							</code> | ||||
| 						</code> | ||||
| 					</div> | ||||
| 					<br/> | ||||
| 					<br> | ||||
| 				</div> | ||||
| 			</div> | ||||
|  | ||||
|   | ||||
| @@ -3,21 +3,26 @@ | ||||
| 	Page to provide ways people can support me. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Support"; | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Support</h1> | ||||
| 			<?php if (isset($GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 				&& !$GLOBALS["SHOW_BANNER_PICS"]) | ||||
| 			echo ' | ||||
| 			<div class="col-12 header center" > | ||||
| 				<img src="/files/media/icons/support.jpg"> | ||||
| 				<img src="/files/media/icons/support.jpg" alt="<<support.jpg>>"> | ||||
| 			</div> | ||||
| 			<div class="col-12 text center"> | ||||
| 			';?> | ||||
| 			<div class="col-12 header center"> | ||||
| 				<p> | ||||
| 					Anything is very much appreciated!! Thank you for considering me! | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "subpages/support/donate.php"; | ||||
| 	// 2025-01-04 Not really looking for this type of thing. | ||||
|   | ||||
| @@ -4,26 +4,33 @@ | ||||
| cd `dirname $0` | ||||
|  | ||||
| # Create the necessary HTML components for a web page. | ||||
| ./helpers/body_open.php | ||||
| echo -e "\t\t<h1>This is a web page written in BASH!!!</h1>" | ||||
| ./helpers/body_open.php | sed -e 's/Hyperling/Hyperling: Test Page!/' | ||||
| echo -e "\t\t<div class='row'>" | ||||
| echo -e "\t\t\t<h1 class='col-12 title'>This is a web page written in BASH!!!</h1>" | ||||
|  | ||||
| cat << EOF | ||||
| 		<p> | ||||
| 			Look at all the fancy things we can do! | ||||
| 		</p> | ||||
| 		<h2>Current Time</h2> | ||||
| 		<p>  | ||||
| 			We can use the date command to spit out the time! | ||||
| 		</p> | ||||
| 		<p>  | ||||
| 			`date` | ||||
| 		</p> | ||||
| 			<p class="col-12 text"> | ||||
| 				Look at all the fancy things we can do! | ||||
| 			</p> | ||||
|  | ||||
| 			<h2 class="col-12 header">Current Time</h2> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					We can use the date command to spit out the time! | ||||
| 				</p> | ||||
| 				<p> | ||||
| 					`date` | ||||
| 				</p> | ||||
| 			</div> | ||||
| EOF | ||||
|  | ||||
| # Create a subsection | ||||
| echo -e "\t\t<h2>Server Neofetch</h2>" | ||||
| echo -e "\t\t<p>" | ||||
| neofetch --stdout | ||||
| echo -e "\t\t</p>" | ||||
| echo -e "\t\t\t<h2 class='col-12 header'>Server Neofetch</h2>" | ||||
| echo -en "\t\t\t<p class='col-12 text'>" | ||||
| #neofetch --stdout | sed -e 's/\n/<br>/g' | ||||
| echo -n "jk lol" | ||||
| echo -e "</p>" | ||||
| echo -e "\t\t</div>" | ||||
|  | ||||
| # Finish the web page | ||||
| ./helpers/body_close.php | ||||
|   | ||||
| @@ -4,5 +4,8 @@ | ||||
| 	Deprecated 2024-03-06 for /media. | ||||
| --> | ||||
| <?php | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Videos"; | ||||
| 	} | ||||
| 	include "media.php"; | ||||
| ?> | ||||
|   | ||||
							
								
								
									
										109
									
								
								run.sh
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								run.sh
									
									
									
									
									
								
							| @@ -4,8 +4,14 @@ | ||||
|  | ||||
| ## Setup ## | ||||
|  | ||||
| DIR=`dirname $0` | ||||
| PROG=`basename $0` | ||||
| DIR="$(dirname -- "${BASH_SOURCE[0]}")" | ||||
| PROG="$(basename -- "${BASH_SOURCE[0]}")" | ||||
|  | ||||
| # Ensure we are executing from this file's directory. | ||||
| cd $DIR | ||||
| DIR="`pwd`" | ||||
| NAME="'$DIR/$PROG'" | ||||
| echo $NAME | ||||
|  | ||||
| ## Functions ## | ||||
|  | ||||
| @@ -21,6 +27,27 @@ function usage { | ||||
| 	exit $1 | ||||
| } | ||||
|  | ||||
| function log { | ||||
| 	message="$1" | ||||
| 	echo -e "`date` - $message" | ||||
| } | ||||
|  | ||||
| log "Local process information:" | ||||
| ps $$ | ||||
| function check_main { | ||||
| 	if [[ -z "$1" ]]; then | ||||
| 		echo "ERROR: Subprocess name was not provided. $1" | ||||
| 		exit 0 | ||||
| 	fi | ||||
| 	log "Subprocess '$1' checking if main process is still running..." | ||||
| 	ps $$ >/dev/null | ||||
| 	status=$? | ||||
| 	if [[ $status != 0 ]]; then | ||||
| 		log "Process '$$' not found, '$1' from '$DIR/$PROG' exiting." | ||||
| 		exit 0 | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| ## Parameters ## | ||||
|  | ||||
| while getopts ':p:h' opt; do | ||||
| @@ -36,33 +63,49 @@ while getopts ':p:h' opt; do | ||||
| 	esac | ||||
| done | ||||
|  | ||||
| if [[ -z $ports ]]; then | ||||
| 	ports=8080 | ||||
| fi | ||||
|  | ||||
| ## Build Environment ## | ||||
|  | ||||
| # Ensure we are executing from this file's directory. | ||||
| cd $DIR | ||||
|  | ||||
| sudo="" | ||||
| if [[ -z $LOGNAME ]]; then | ||||
| 	LOGNAME="`whoami`" | ||||
| fi | ||||
| if [[ $LOGNAME != "root" ]]; then | ||||
| 	echo "`date` - Using sudo since user is '$LOGNAME'." | ||||
| 	log "Using sudo since user is '$LOGNAME'." | ||||
| 	sudo="sudo" | ||||
| fi | ||||
|  | ||||
| echo "`date` - Check if any system dependencies need installed." | ||||
| log "Check if any system dependencies need installed." | ||||
| progs="" | ||||
| if [[ ! `which php` ]]; then | ||||
| 	echo "- Installing PHP" | ||||
| 	$sudo apt-get install -y php-cli | ||||
| 	progs="$progs php-cli" | ||||
| fi | ||||
| if [[ ! `which node` ]]; then | ||||
| 	echo "- Installing Node" | ||||
| 	$sudo apt-get install -y nodejs | ||||
| 	progs="$progs nodejs" | ||||
| fi | ||||
| if [[ ! `which npm` ]]; then | ||||
| 	echo "- Installing NPM" | ||||
| 	$sudo apt-get install -y npm | ||||
| 	progs="$progs npm" | ||||
| fi | ||||
| if [[ ! `which curl` ]]; then | ||||
| 	echo "- Installing Curl" | ||||
| 	progs="$progs curl" | ||||
| fi | ||||
| if [[ ! `which ps` ]]; then | ||||
| 	echo "- Installing PS" | ||||
| 	progs="$progs procps" | ||||
| fi | ||||
| if [[ -n "$progs" ]]; then | ||||
| 	$sudo apt-get install -y $progs | ||||
| fi | ||||
|  | ||||
| # Directories and allowed page types are executable, others are not. | ||||
| echo "`date` - Fix any strange file permissions." | ||||
| log "Fix any strange file permissions." | ||||
| find ./pages/ | while read file; do | ||||
| 	if [[ $file == *".php" || $file == *".sh" || -d $file ]]; then | ||||
| 		mode=755 | ||||
| @@ -72,16 +115,54 @@ find ./pages/ | while read file; do | ||||
| 	chmod -c $mode $file | ||||
| done | ||||
|  | ||||
| echo "`date` - Check if any node modules need updated/installed." | ||||
| log "Check if any node modules need updated/installed." | ||||
| npm install | ||||
|  | ||||
| # Reset generated index files. | ||||
| log "Removing old index files." | ||||
| find files/photos/ -name "*".html -print -delete | ||||
| { | ||||
| 	check_main photos | ||||
| 	count=1 | ||||
| 	http_code=0 | ||||
| 	port="${ports%% *}" | ||||
| 	photos_uri=":$port/photos/" | ||||
| 	beg_time="$SECONDS" | ||||
| 	while [[ $http_code != "200" ]]; do | ||||
| 		log "Sleeping for '$count' while waiting for $photos_uri to come up." | ||||
| 		sleep $count | ||||
| 		log "Checking if $photos_uri is available." | ||||
| 		http_code="`curl --silent --fail -w '\n%{http_code}' localhost$photos_uri | tail -n 1`" | ||||
| 		log "Check for $photos_uri responded with '$http_code'." | ||||
| 		if (( $count >= 10 )); then | ||||
| 			log "Giving up on loading $photos_uri after '$count' attempts." | ||||
| 			break | ||||
| 		else | ||||
| 			count=$(( count + 1 )) | ||||
| 		fi | ||||
| 	done | ||||
| 	end_time="$SECONDS" | ||||
| 	time="$(( $end_time - $beg_time ))" | ||||
| 	log "Finished checking for /photos/ after '$time' seconds." | ||||
| } & | ||||
|  | ||||
| ## Main ## | ||||
|  | ||||
| echo "`date` - Start website API." | ||||
| log "Start local cronjob." | ||||
| while true; do | ||||
| 	check_main cronjob | ||||
| 	$DIR/cronjob.sh | ||||
| 	sleep 30 | ||||
| done & | ||||
|  | ||||
| log "Start website API." | ||||
| node ./main.js $ports | ||||
| status=$? | ||||
|  | ||||
| ## Finish ## | ||||
|  | ||||
| echo "`date` - Exiting with status '$status'." | ||||
| log "Kill spawned processes." | ||||
| pkill -eP $$ | ||||
|  | ||||
| log "Exiting with status '$status'." | ||||
| exit $status | ||||
|   | ||||
		Reference in New Issue
	
	Block a user