Compare commits
	
		
			107 Commits
		
	
	
		
			286c92dd0d
			...
			prod
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 219236f167 | |||
| 2feb3e88cc | |||
| a1a02500e4 | |||
| 5d9f57fec4 | |||
| 30a8041fa8 | |||
| ff1cf74a00 | |||
| 5ad44a8056 | |||
| b5ea457491 | |||
| eaf8d2e0bb | |||
| 616663ffe0 | |||
| 1cd182b3a9 | |||
| ccd4f4d051 | |||
| 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 | 
| @@ -25,7 +25,7 @@ cd www | ||||
|  | ||||
| Then in a web browser, navigate to `localhost:8080`. | ||||
|  | ||||
| ## TODO | ||||
| ## TODO Items | ||||
|  | ||||
| All goals are currently completed. | ||||
|  | ||||
|   | ||||
							
								
								
									
										68
									
								
								check_git.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										68
									
								
								check_git.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| #!/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 { | ||||
| 	# Not much to do, run.sh and main.js automatically uses the latest files. | ||||
| 	rm -v files/photos/index.html | ||||
| 	# TBD/TODO: Call check_photos.sh once it has been pulled from run.sh. | ||||
| 	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 | ||||
							
								
								
									
										46
									
								
								check_photos.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								check_photos.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| #!/usr/bin/env bash | ||||
| # 2025-10-15 Hyperling | ||||
| # Create script which does the photo checking so that it can be called by | ||||
| #  scripts other than just run.sh, such as if it needs used in check_git.sh. | ||||
|  | ||||
| ## Setup ## | ||||
|  | ||||
| DIR="$(dirname -- "${BASH_SOURCE[0]}")" | ||||
| PROG="$(basename -- "${BASH_SOURCE[0]}")" | ||||
| cd $DIR | ||||
| DIR="`pwd`" | ||||
| NAME="'$PROG'" | ||||
|  | ||||
| function log { | ||||
| 	echo -e "`date` : $NAME - $1" | ||||
| } | ||||
|  | ||||
| ## Parameters ## | ||||
|  | ||||
| ports="$1" | ||||
|  | ||||
| ## Main ## | ||||
|  | ||||
| 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." | ||||
|  | ||||
| exit 0 | ||||
| @@ -5,15 +5,18 @@ | ||||
| 	} | ||||
| 	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" alt=""> | ||||
| 				<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! | ||||
| @@ -26,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 | ||||
| @@ -51,7 +53,6 @@ | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "subpages/about/notice.php"; | ||||
| 	include "subpages/about/health.php"; | ||||
|   | ||||
							
								
								
									
										286
									
								
								pages/apps.php
									
									
									
									
									
								
							
							
						
						
									
										286
									
								
								pages/apps.php
									
									
									
									
									
								
							| @@ -1,10 +1,288 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Synonym for home page. | ||||
| --> | ||||
| <?php | ||||
| 	/* Synonym for home page. */ | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Apps"; | ||||
| 	} | ||||
| 	include "home.php"; | ||||
| 	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"; | ||||
| ?> | ||||
|   | ||||
							
								
								
									
										8
									
								
								pages/books.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								pages/books.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	/* Alias for where Books menu item should go. */ | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Books"; | ||||
| 	} | ||||
| 	include "media.php"; | ||||
| ?> | ||||
| @@ -5,21 +5,28 @@ | ||||
| 	} | ||||
| 	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" alt=""> | ||||
| 				<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> | ||||
| @@ -42,7 +49,6 @@ | ||||
| 				</li></ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -5,12 +5,8 @@ | ||||
| 	} | ||||
| 	include "helpers/body_open.php"; | ||||
| ?> | ||||
|  | ||||
| 		<div class="row"> | ||||
| 			<h1 class="col-12 title">Current Diet</h1> | ||||
| 			<div class="col-12 header center" > | ||||
| 				<img src="/files/media/icons/tbd.jpg" alt="Image TBD"> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| @@ -208,7 +204,6 @@ | ||||
| 				</ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -1,8 +1,6 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Alias for the support page with a more common name. | ||||
| --> | ||||
| <?php | ||||
| 	/* Alias for the support page with a more common name. */ | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Donate"; | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										85
									
								
								pages/freedom.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										85
									
								
								pages/freedom.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| #!/usr/bin/php | ||||
| <?php | ||||
| 	/* Page to provide links for Freedom eBook. */ | ||||
| 	$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> | ||||
| 					Use the links 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"; | ||||
| ?> | ||||
| @@ -1,15 +1,12 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Page to provide ways people can support me. | ||||
| --> | ||||
| <?php | ||||
| 	$GLOBALS["ADVISORY"] = false; | ||||
| 	/* Page to provide ways people can support me. */ | ||||
| 	//$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> | ||||
| @@ -31,13 +28,31 @@ | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					Click the link below to download the 12-page PDF: | ||||
| 					Use the links 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: | ||||
| @@ -47,7 +62,7 @@ | ||||
| 						<a href="/files/media/documents/HyperlingsHealthProtocol.mp3" | ||||
| 							target="_blank" rel="noopener noreferrer" | ||||
| 						> | ||||
| 							[MP3] | Direct Download | ||||
| 							[MP3] | Download | ||||
| 						</a> | ||||
| 					</li> | ||||
| 					<li> | ||||
| @@ -91,7 +106,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"> | ||||
| 			<h2 class="col-12 title"><i class="purple">Latest Announcement</i></h2> | ||||
| 			<a href="/freedom/"> | ||||
| 				<div class="col-12 text"> | ||||
| 					<u class="orange">2024-03-07</u> | ||||
| 					<u class="orange">2025-09-28</u> | ||||
| 					<br> | ||||
| 					Find my free eBook, "Hyperling's Health Protocol", | ||||
| 					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> | ||||
| 	'; | ||||
| ?> | ||||
|   | ||||
| @@ -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,24 @@ | ||||
| #!/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="banner-top">Peace</div> | ||||
| 				<div class="banner-middle">Love</div> | ||||
| 				<div class="banner-bottom">Happiness</div> | ||||
| 			<div class="row"> | ||||
| 				<?php if ($show_pics) echo ' | ||||
| 				<div class="col-3 header center banner-image banner-image01"></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"></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"; | ||||
| 	/* */ | ||||
|   | ||||
| @@ -30,16 +30,16 @@ | ||||
| 			<?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 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" /> | ||||
| 		<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,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="/apps/">Apps</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/media/">Media</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/about/">About</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/contact/">Contact</a></li> | ||||
| 				<li class="col-2 menu-item"><a href="/support/">Support</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> | ||||
|   | ||||
| @@ -1,22 +1,23 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Landing page, keeping it apps and development projects like old WordPress site. | ||||
| --> | ||||
| <?php | ||||
| 	/* Landing page, keeping it apps and development projects like old WordPress site. */ | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Home"; | ||||
| 		$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" alt=""> | ||||
| 				<img src="/files/media/icons/home.jpg" alt="<<home.jpg>>"> | ||||
| 			</div> | ||||
| 			';?> | ||||
| 		</div> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-12 text"> | ||||
| 			<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 | ||||
| @@ -24,9 +25,8 @@ | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "subpages/home/apps.php"; | ||||
| 	include "subpages/home/announcements.php"; | ||||
|  | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -1,22 +1,23 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Page for my video links. | ||||
| --> | ||||
| <?php | ||||
| 	/* Page for my video links. */ | ||||
| 	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" alt=""> | ||||
| 				<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> | ||||
| @@ -32,9 +33,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> | ||||
|  | ||||
| @@ -105,7 +115,6 @@ | ||||
| 				</li></ul> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -41,7 +41,7 @@ function start_main_page { | ||||
| 	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 -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 | ||||
|   | ||||
| @@ -1,14 +1,11 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Lists of items which I'd like to share such as gear and frequently used apps. | ||||
| --> | ||||
| <?php | ||||
| 	/* Lists of items which I'd like to share such as gear and frequently used apps. */ | ||||
| 	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> | ||||
| @@ -68,7 +65,6 @@ | ||||
| 				</p> | ||||
| 			</div> | ||||
| 		</div> | ||||
|  | ||||
| <?php | ||||
| 	include "helpers/body_close.php"; | ||||
| ?> | ||||
|   | ||||
| @@ -1,19 +1,15 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Page for my resume and work skill links. | ||||
| --> | ||||
| <?php | ||||
| 	/* Page for my resume and work skill links. */ | ||||
| 	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" alt=""> <!-- 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"> | ||||
| @@ -21,25 +17,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"; | ||||
| ?> | ||||
|   | ||||
							
								
								
									
										108
									
								
								pages/subpages/home/announcements.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										108
									
								
								pages/subpages/home/announcements.php
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,108 @@ | ||||
| #!/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> | ||||
| 		</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,244 +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"> | ||||
| 				<a href="https://git.hyperling.com/me/flutter-expense-tracker/releases"> | ||||
| 					<figure> | ||||
| 						<img class="app-icon" loading="lazy" alt="" | ||||
| 							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="" | ||||
| 							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="" | ||||
| 							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="" | ||||
| 							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="" | ||||
| 							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="" | ||||
| 							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="obtainium"> | ||||
| 			<h4 class="col-12 header">Obtainium Configuration</h4> | ||||
| 		</div> | ||||
|  | ||||
| 		<div class="row text"> | ||||
| 			<div class="col-12 text"> | ||||
| 				<p> | ||||
| 					In order to have the correct version numbers in Obtainium: | ||||
| 				</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, <i>"Take first link"</i> works with pseudo versions. | ||||
| 				</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> | ||||
| @@ -50,7 +50,7 @@ | ||||
| 						<code>me@hyperling.com</code> | ||||
| 						<br> | ||||
| 						<br> | ||||
| 						<img src="/files/media/icons/zelle.png" alt=""> | ||||
| 						<img src="/files/media/icons/zelle.png" alt="<<zelle.png>>"> | ||||
| 					</div> | ||||
| 					<br> | ||||
|  | ||||
|   | ||||
| @@ -1,26 +1,26 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Page to provide ways people can support me. | ||||
| --> | ||||
| <?php | ||||
| 	/* Page to provide ways people can support me. */ | ||||
| 	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" alt=""> | ||||
| 				<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. | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| #!/usr/bin/php | ||||
| <!-- | ||||
| 	Old page for my video links. | ||||
| 	Deprecated 2024-03-06 for /media. | ||||
| --> | ||||
| <?php | ||||
| 	/* | ||||
| 		Old page for my video links. | ||||
| 		Deprecated 2024-03-06 for /media. | ||||
| 	*/ | ||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||
| 		$GLOBALS["HEADER_TITLE"] = "Videos"; | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										78
									
								
								run.sh
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								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 ## | ||||
|  | ||||
| @@ -26,6 +32,22 @@ function log { | ||||
| 	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 | ||||
| @@ -47,9 +69,6 @@ fi | ||||
|  | ||||
| ## Build Environment ## | ||||
|  | ||||
| # Ensure we are executing from this file's directory. | ||||
| cd $DIR | ||||
|  | ||||
| sudo="" | ||||
| if [[ -z $LOGNAME ]]; then | ||||
| 	LOGNAME="`whoami`" | ||||
| @@ -60,21 +79,29 @@ if [[ $LOGNAME != "root" ]]; then | ||||
| fi | ||||
|  | ||||
| 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" | ||||
| 	$sudo apt-get install -y 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. | ||||
| @@ -95,36 +122,27 @@ npm install | ||||
| log "Removing old index files." | ||||
| find files/photos/ -name "*".html -print -delete | ||||
| { | ||||
| 	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." | ||||
| 	check_main photos | ||||
| 	$DIR/check_photos.sh "$ports" | ||||
| } & | ||||
|  | ||||
| ## Main ## | ||||
|  | ||||
| log "Start check_git." | ||||
| while true; do | ||||
| 	check_main check_git | ||||
| 	$DIR/check_git.sh | ||||
| 	sleep 30 | ||||
| done & | ||||
|  | ||||
| log "Start website API." | ||||
| node ./main.js $ports | ||||
| status=$? | ||||
|  | ||||
| ## Finish ## | ||||
|  | ||||
| log "Kill spawned processes." | ||||
| pkill -eP $$ | ||||
|  | ||||
| log "Exiting with status '$status'." | ||||
| exit $status | ||||
|   | ||||
		Reference in New Issue
	
	Block a user