Compare commits
	
		
			94 Commits
		
	
	
		
			905501c4ac
			...
			dev
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f8d2e3ea08 | |||
| 6a367bebec | |||
| 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 | 
| @@ -25,7 +25,7 @@ cd www | |||||||
|  |  | ||||||
| Then in a web browser, navigate to `localhost:8080`. | Then in a web browser, navigate to `localhost:8080`. | ||||||
|  |  | ||||||
| ## TODO | ## TODO Items | ||||||
|  |  | ||||||
| All goals are currently completed. | 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"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Who Am I?</h1> | 			<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" > | 			<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> | 		</div> | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 text"> | 			<div class="col-12 header"> | ||||||
| 				<p> | 				<p> | ||||||
| 					Hi there! My name is Chad, I'm the primary content creator | 					Hi there! My name is Chad, I'm the primary content creator | ||||||
| 					behind Hyperling and HyperVegan. Thank you for your interest! | 					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 | 					planted at least one fruit tree or had a small square foot | ||||||
| 					garden. We would be in paradise! | 					garden. We would be in paradise! | ||||||
| 				</p> | 				</p> | ||||||
| 				<!-- TBD change this to 'Coding, videos, and art' :) --> |  | ||||||
| 				<p> | 				<p> | ||||||
| 					Coding and videos aren't my only hobbies, I'm also big into | 					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 | 					health. I see it as humanity's most important asset and take a | ||||||
| @@ -51,7 +53,6 @@ | |||||||
| 				</p> | 				</p> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "subpages/about/notice.php"; | 	include "subpages/about/notice.php"; | ||||||
| 	include "subpages/about/health.php"; | 	include "subpages/about/health.php"; | ||||||
|   | |||||||
							
								
								
									
										286
									
								
								pages/apps.php
									
									
									
									
									
								
							
							
						
						
									
										286
									
								
								pages/apps.php
									
									
									
									
									
								
							| @@ -1,10 +1,288 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Synonym for home page. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Synonym for home page. */ | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Apps"; | 		$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"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Contact</h1> | 			<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" > | 			<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> | 		</div> | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 title center"> | 			<div class="col-12 header center"> | ||||||
| 				<p> | 				<p> | ||||||
| 					Timely responses are not guarenteed, as I spend a majority of | 					Timely responses are not guarenteed, as I spend a large amount of | ||||||
| 					my time offline and enjoy traveling in reception-free zones. | 					time offline and enjoy traveling in reception-free zones. | ||||||
| 				</p> | 				</p> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
|  | 		<div class="row"> | ||||||
|  | 			<h2 class="col-12 header">Methods</h2> | ||||||
|  | 		</div> | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 text"> | 			<div class="col-12 text"> | ||||||
| 				<p> | 				<p> | ||||||
| @@ -42,7 +49,6 @@ | |||||||
| 				</li></ul> | 				</li></ul> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "helpers/body_close.php"; | 	include "helpers/body_close.php"; | ||||||
| ?> | ?> | ||||||
|   | |||||||
| @@ -5,12 +5,8 @@ | |||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Current Diet</h1> | 			<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> | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 text"> | 			<div class="col-12 text"> | ||||||
| @@ -208,7 +204,6 @@ | |||||||
| 				</ul> | 				</ul> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "helpers/body_close.php"; | 	include "helpers/body_close.php"; | ||||||
| ?> | ?> | ||||||
|   | |||||||
| @@ -1,8 +1,6 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Alias for the support page with a more common name. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Alias for the support page with a more common name. */ | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Donate"; | 		$GLOBALS["HEADER_TITLE"] = "Donate"; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -1,15 +1,12 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Page to provide links for Freedom eBook. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Page to provide links for Freedom eBook. */ | ||||||
| 	$GLOBALS["ADVISORY"] = false; | 	$GLOBALS["ADVISORY"] = false; | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Freedom"; | 		$GLOBALS["HEADER_TITLE"] = "Freedom"; | ||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Voluntary Sovereignty</h1> | 			<h1 class="col-12 title">Voluntary Sovereignty</h1> | ||||||
| 		</div> | 		</div> | ||||||
| @@ -30,37 +27,28 @@ | |||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 text"> | 			<div class="col-12 text"> | ||||||
| 				<p> | 				<p> | ||||||
| 					Click the link below to download the 4-page PDF: | 					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/1.1.0/VoluntarySovereignty.pdf" |  | ||||||
| 						target="_blank" rel="noopener noreferrer"> |  | ||||||
| 						[PDF] | eBook Download |  | ||||||
| 					</a> |  | ||||||
| 				</li></ul> |  | ||||||
|  |  | ||||||
| 				<p> |  | ||||||
| 					There is also a printable booklet version which can be found here: |  | ||||||
| 				</p> | 				</p> | ||||||
| 				<ul class="indent"> | 				<ul class="indent"> | ||||||
| 					<li> | 					<li> | ||||||
| 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/1.1.0/VoluntarySovereignty-booklet-default.pdf" | 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/latest/VoluntarySovereignty.pdf" | ||||||
| 							target="_blank" rel="noopener noreferrer" | 							target="_blank" rel="noopener noreferrer" | ||||||
| 						> | 						> | ||||||
| 							[PDF] | Booklet Download | 							[PDF] | eBook | ||||||
| 						</a> | 						</a> | ||||||
| 					</li> | 					</li> | ||||||
| 				</ul> |  | ||||||
|  |  | ||||||
| 				<p> |  | ||||||
| 					This booklet version has every other page rotated which works better for some duplex printers: |  | ||||||
| 				</p> |  | ||||||
| 				<ul class="indent"> |  | ||||||
| 					<li> | 					<li> | ||||||
| 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/1.1.0/VoluntarySovereignty-booklet-rotated.pdf" | 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/latest/VoluntarySovereignty-booklet-default.pdf" | ||||||
| 							target="_blank" rel="noopener noreferrer" | 							target="_blank" rel="noopener noreferrer" | ||||||
| 						> | 						> | ||||||
| 							[PDF] | Booklet Download (Rotated) | 							[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> | 						</a> | ||||||
| 					</li> | 					</li> | ||||||
| 				</ul> | 				</ul> | ||||||
| @@ -68,16 +56,30 @@ | |||||||
| 				<p> | 				<p> | ||||||
| 					Curious how I made it? Check out its Git repository: | 					Curious how I made it? Check out its Git repository: | ||||||
| 				</p> | 				</p> | ||||||
| 				<ul class="indent"><li> | 				<ul class="indent"> | ||||||
|  | 					<li> | ||||||
| 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer" | 						<a href="https://git.hyperling.com/me/ebook-freedom-flyer" | ||||||
| 							target="_blank" rel="noopener noreferrer" | 							target="_blank" rel="noopener noreferrer" | ||||||
| 						> | 						> | ||||||
| 							[CODE] | Source Code | 							[CODE] | Source Code | ||||||
| 						</a> | 						</a> | ||||||
| 				</li></ul> | 					</li> | ||||||
| 			</div> | 				</ul> | ||||||
| 		</div> |  | ||||||
|  |  | ||||||
|  | 				<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 | <?php | ||||||
| 	include "helpers/body_close.php"; | 	include "helpers/body_close.php"; | ||||||
| ?> | ?> | ||||||
|   | |||||||
| @@ -1,15 +1,12 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Page to provide ways people can support me. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
| 	$GLOBALS["ADVISORY"] = false; | 	/* Page to provide ways people can support me. */ | ||||||
|  | 	//$GLOBALS["ADVISORY"] = false; | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Health"; | 		$GLOBALS["HEADER_TITLE"] = "Health"; | ||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">My Health Protocol</h1> | 			<h1 class="col-12 title">My Health Protocol</h1> | ||||||
| 		</div> | 		</div> | ||||||
| @@ -31,14 +28,31 @@ | |||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 text"> | 			<div class="col-12 text"> | ||||||
| 				<p> | 				<p> | ||||||
| 					Click the link below to download the 12-page PDF: | 					Use the links below to download the 10-page PDF: | ||||||
| 				</p> | 				</p> | ||||||
| 				<ul class="indent"><li> | 				<ul class="indent"> | ||||||
| 					<a href="/files/media/documents/HyperlingsHealthProtocol.pdf" | 					<li> | ||||||
|  | 						<a href="https://git.hyperling.com/me/ebook-health-protocol/releases/download/latest/HyperlingsHealthProtocol.pdf" | ||||||
| 							target="_blank" rel="noopener noreferrer"> | 							target="_blank" rel="noopener noreferrer"> | ||||||
| 						[PDF] | Direct Download | 							[PDF] | eBook | ||||||
| 						</a> | 						</a> | ||||||
| 				</li></ul> | 					</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> | 				<p> | ||||||
| 					There is also a 30 minute audio version which can be found here: | 					There is also a 30 minute audio version which can be found here: | ||||||
| @@ -48,7 +62,7 @@ | |||||||
| 						<a href="/files/media/documents/HyperlingsHealthProtocol.mp3" | 						<a href="/files/media/documents/HyperlingsHealthProtocol.mp3" | ||||||
| 							target="_blank" rel="noopener noreferrer" | 							target="_blank" rel="noopener noreferrer" | ||||||
| 						> | 						> | ||||||
| 							[MP3] | Direct Download | 							[MP3] | Download | ||||||
| 						</a> | 						</a> | ||||||
| 					</li> | 					</li> | ||||||
| 					<li> | 					<li> | ||||||
| @@ -92,7 +106,6 @@ | |||||||
| 				</ul> | 				</ul> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "helpers/body_close.php"; | 	include "helpers/body_close.php"; | ||||||
| ?> | ?> | ||||||
|   | |||||||
| @@ -1,12 +1,13 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
|  | <?php | ||||||
|  | 	$show_advisory = true; | ||||||
|  | 	if ($show_advisory) echo ' | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<p><!-- Gap Area --></p> | 			<p><!-- Gap Area --></p> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| 		<div class="row center" id="advisory"> | 		<div class="row center title" id="advisory"> | ||||||
| 			<div class="col-12 title"> | 			<h2 class="col-12 title"><i class="purple">Latest Announcement</i></h2> | ||||||
| 				<i><h2>Announcements</h2></i> |  | ||||||
| 			</div> |  | ||||||
| 			<a href="/freedom/"> | 			<a href="/freedom/"> | ||||||
| 				<div class="col-12 text"> | 				<div class="col-12 text"> | ||||||
| 					<u class="orange">2025-09-28</u> | 					<u class="orange">2025-09-28</u> | ||||||
| @@ -16,3 +17,5 @@ | |||||||
| 				</div> | 				</div> | ||||||
| 			</a> | 			</a> | ||||||
| 		</div> | 		</div> | ||||||
|  | 	'; | ||||||
|  | ?> | ||||||
|   | |||||||
| @@ -21,3 +21,16 @@ | |||||||
| 			.banner-bottom { | 			.banner-bottom { | ||||||
| 				background-color: #33CC33; | 				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 | #!/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/'> | 		<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"></div> | ||||||
|  | 				';?> | ||||||
|  | 				<div class="col-<?php echo "$banner_width"; ?> header"> | ||||||
| 					<div class="banner-top">Peace</div> | 					<div class="banner-top">Peace</div> | ||||||
| 					<div class="banner-middle">Love</div> | 					<div class="banner-middle">Love</div> | ||||||
| 					<div class="banner-bottom">Happiness</div> | 					<div class="banner-bottom">Happiness</div> | ||||||
| 				</div> | 				</div> | ||||||
|  | 				<?php if ($show_pics) echo ' | ||||||
|  | 				<div class="col-3 header center banner-image banner-image02"></div> | ||||||
|  | 				';?> | ||||||
|  | 			</div> | ||||||
| 		</a> | 		</a> | ||||||
|   | |||||||
| @@ -2,6 +2,5 @@ | |||||||
| <?php | <?php | ||||||
| 	include "footer.php" | 	include "footer.php" | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 	</body> | 	</body> | ||||||
| </html> | </html> | ||||||
|   | |||||||
| @@ -2,9 +2,7 @@ | |||||||
| <?php | <?php | ||||||
| 	include "header.php"; | 	include "header.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 	<body> | 	<body> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "banner.php"; | 	include "banner.php"; | ||||||
| 	include "menu.php"; | 	include "menu.php"; | ||||||
|   | |||||||
| @@ -30,16 +30,16 @@ | |||||||
| 			<?php include "banner.css"; ?> | 			<?php include "banner.css"; ?> | ||||||
| 		</style> | 		</style> | ||||||
|  |  | ||||||
| 		<meta property="og:title" content="Hyperling"/> | 		<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:description" content="Apps, eBooks, media, and other resources from the brands Hyperling and HyperVegan."> | ||||||
| 		<meta property="og:site_name" content="Hyperling"/> | 		<meta property="og:site_name" content="Hyperling"> | ||||||
| 		<meta property="og:url" content="https://hyperling.com/"/> | 		<meta property="og:url" content="https://hyperling.com/"> | ||||||
| 		<meta property="og:type" content="website"/> | 		<meta property="og:type" content="website"> | ||||||
| 		<meta property="og:image" content="https://hyperling.com/files/media/icons/home.jpg"/> | 		<meta property="og:image" content="https://hyperling.com/files/media/icons/home.jpg"> | ||||||
| 		<meta name="referrer" content="same-origin"/> | 		<meta name="referrer" content="same-origin"> | ||||||
|  |  | ||||||
| 		<meta name="twitter:card" content="summary_large_image" /> | 		<meta name="twitter:card" content="summary_large_image"> | ||||||
| 		<meta name="twitter:title" content="Hyperling" /> | 		<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: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:image" content="https://hyperling.com/files/media/icons/home.jpg"> | ||||||
| 	</head> | 	</head> | ||||||
|   | |||||||
| @@ -1,12 +1,35 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| 		<div class="row header menu"> | 		<div class="row header menu"> | ||||||
| 			<ul class="menu-list"> | 			<ul class="menu-list"> | ||||||
| 				<li class="col-1"></li> | 				<li class="col-3 menu-item"><a href="/">Home</a></li> | ||||||
| 				<li class="col-2 menu-item"><a href="/apps/">Apps</a></li> | 				<li class="col-3 menu-item"><a href="/about/">About</a></li> | ||||||
| 				<li class="col-2 menu-item"><a href="/media/">Media</a></li> | 				<li class="col-3 menu-item"><a href="/contact/">Contact</a></li> | ||||||
| 				<li class="col-2 menu-item"><a href="/about/">About</a></li> | 				<li class="col-3 menu-item"><a href="/support/">Support</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> |  | ||||||
| 			</ul> | 			</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> | ||||||
|  | 			<!-- | ||||||
|  | 			<ul class="menu-list"> | ||||||
|  | 				<li class="col-3 menu-item"></li> | ||||||
|  | 				<li class="col-3 menu-item"> | ||||||
|  | 					<a href="https://blog.hyperling.com" | ||||||
|  | 						target="_blank" rel="noopener noreferrer" | ||||||
|  | 					>Blog</a> | ||||||
|  | 				</li> | ||||||
|  | 				<li class="col-3 menu-item"> | ||||||
|  | 					<a href="https://recipes.hyperling.com" | ||||||
|  | 						target="_blank" rel="noopener noreferrer" | ||||||
|  | 					>Recipes</a> | ||||||
|  | 				</li> | ||||||
|  | 				<li class="col-3 menu-item"></li> | ||||||
|  | 			</ul> | ||||||
|  | 			--> | ||||||
| 		</div> | 		</div> | ||||||
|   | |||||||
| @@ -1,22 +1,23 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Landing page, keeping it apps and development projects like old WordPress site. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Landing page, keeping it apps and development projects like old WordPress site. */ | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Home"; | 		$GLOBALS["HEADER_TITLE"] = "Announcements"; | ||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Welcome!</h1> | 			<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" > | 			<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> | 		</div> | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 text"> | 			<div class="col-12 header center"> | ||||||
| 				<p> | 				<p> | ||||||
| 					Thank you for visiting my site! My goal is to make the world a | 					Thank you for visiting my site! My goal is to make the world a | ||||||
| 					better place. Hopefully you find content here which helps empower | 					better place. Hopefully you find content here which helps empower | ||||||
| @@ -24,9 +25,8 @@ | |||||||
| 				</p> | 				</p> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "subpages/home/apps.php"; | 	include "subpages/home/announcements.php"; | ||||||
|  |  | ||||||
| 	include "helpers/body_close.php"; | 	include "helpers/body_close.php"; | ||||||
| ?> | ?> | ||||||
|   | |||||||
| @@ -1,22 +1,23 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Page for my video links. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Page for my video links. */ | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Media"; | 		$GLOBALS["HEADER_TITLE"] = "Media"; | ||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Media</h1> | 			<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" > | 			<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> | 		</div> | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<div class="col-12 text center"> | 			<div class="col-12 header center"> | ||||||
| 				<p> | 				<p> | ||||||
| 					My written works, social platforms, and photos can be found here. | 					My written works, social platforms, and photos can be found here. | ||||||
| 				</p> | 				</p> | ||||||
| @@ -32,11 +33,18 @@ | |||||||
| 				<p> | 				<p> | ||||||
| 					I enjoy writing! Find my free eBooks below. | 					I enjoy writing! Find my free eBooks below. | ||||||
| 				</p> | 				</p> | ||||||
| 				<ul class="indent"><li> | 				<ul class="indent"> | ||||||
| 					2025-09-28: <a href="/freedom/">Voluntary Sovereignty</a> | 					<li> | ||||||
| 				</li><li> | 						2025-09-28: <a href="/freedom/">Voluntary Sovereignty</a> | | ||||||
| 					2024-03-07: <a href="/health/">My Health Protocol</a> | 						Existing in a statist society with the least amount of friction. | ||||||
| 				</li></ul> | 					</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> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| @@ -107,7 +115,6 @@ | |||||||
| 				</li></ul> | 				</li></ul> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "helpers/body_close.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>" >> $mainpage | ||||||
|  |  | ||||||
| 	echo -e "\t\t<div class='row'>" >> $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 "\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 "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 -en "full resolution. On the album pages you may also click an image or " >> $mainpage | ||||||
|   | |||||||
| @@ -1,14 +1,11 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Lists of items which I'd like to share such as gear and frequently used apps. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Lists of items which I'd like to share such as gear and frequently used apps. */ | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Resources"; | 		$GLOBALS["HEADER_TITLE"] = "Resources"; | ||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Lists of Resources</h1> | 			<h1 class="col-12 title">Lists of Resources</h1> | ||||||
| 		</div> | 		</div> | ||||||
| @@ -68,7 +65,6 @@ | |||||||
| 				</p> | 				</p> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "helpers/body_close.php"; | 	include "helpers/body_close.php"; | ||||||
| ?> | ?> | ||||||
|   | |||||||
| @@ -1,19 +1,15 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Page for my resume and work skill links. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Page for my resume and work skill links. */ | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Resume"; | 		$GLOBALS["HEADER_TITLE"] = "Resume"; | ||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Resume</h1> | 			<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> | 			<h2 class="col-12 title center">Current Status : Traveling Full Time</h2> | ||||||
| 		</div> | 		</div> | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| @@ -21,25 +17,15 @@ | |||||||
| 				<p> | 				<p> | ||||||
| 					Interested in hiring me? View my resume below! | 					Interested in hiring me? View my resume below! | ||||||
| 				</p> | 				</p> | ||||||
| 				<ul class="indent"><li> | 				<!--<ul class="indent"><li>--> | ||||||
| 					<a href="https://hyperling.com/files/media/documents/Resume.pdf" | 					<a href="https://hyperling.com/files/media/documents/Resume.pdf" | ||||||
| 						target="_blank" rel="noopener noreferrer" | 						target="_blank" rel="noopener noreferrer" | ||||||
| 					> | 					> | ||||||
| 						[PDF] | Direct Download | 						[PDF] | Direct Download | ||||||
| 					</a> | 					</a> | ||||||
| 				</li></ul> | 				<!--</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> |  | ||||||
| 				--> |  | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "helpers/body_close.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> | 						<code>me@hyperling.com</code> | ||||||
| 						<br> | 						<br> | ||||||
| 						<br> | 						<br> | ||||||
| 						<img src="/files/media/icons/zelle.png" alt=""> | 						<img src="/files/media/icons/zelle.png" alt="<<zelle.png>>"> | ||||||
| 					</div> | 					</div> | ||||||
| 					<br> | 					<br> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,26 +1,26 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- |  | ||||||
| 	Page to provide ways people can support me. |  | ||||||
| --> |  | ||||||
| <?php | <?php | ||||||
|  | 	/* Page to provide ways people can support me. */ | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Support"; | 		$GLOBALS["HEADER_TITLE"] = "Support"; | ||||||
| 	} | 	} | ||||||
| 	include "helpers/body_open.php"; | 	include "helpers/body_open.php"; | ||||||
| ?> | ?> | ||||||
|  |  | ||||||
| 		<div class="row"> | 		<div class="row"> | ||||||
| 			<h1 class="col-12 title">Support</h1> | 			<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" > | 			<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> | ||||||
| 			<div class="col-12 text center"> | 			';?> | ||||||
|  | 			<div class="col-12 header center"> | ||||||
| 				<p> | 				<p> | ||||||
| 					Anything is very much appreciated!! Thank you for considering me! | 					Anything is very much appreciated!! Thank you for considering me! | ||||||
| 				</p> | 				</p> | ||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
|  |  | ||||||
| <?php | <?php | ||||||
| 	include "subpages/support/donate.php"; | 	include "subpages/support/donate.php"; | ||||||
| 	// 2025-01-04 Not really looking for this type of thing. | 	// 2025-01-04 Not really looking for this type of thing. | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| #!/usr/bin/php | #!/usr/bin/php | ||||||
| <!-- | <?php | ||||||
|  | 	/* | ||||||
| 		Old page for my video links. | 		Old page for my video links. | ||||||
| 		Deprecated 2024-03-06 for /media. | 		Deprecated 2024-03-06 for /media. | ||||||
| --> | 	*/ | ||||||
| <?php |  | ||||||
| 	if (!isset($GLOBALS["HEADER_TITLE"])) { | 	if (!isset($GLOBALS["HEADER_TITLE"])) { | ||||||
| 		$GLOBALS["HEADER_TITLE"] = "Videos"; | 		$GLOBALS["HEADER_TITLE"] = "Videos"; | ||||||
| 	} | 	} | ||||||
|   | |||||||
							
								
								
									
										78
									
								
								run.sh
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								run.sh
									
									
									
									
									
								
							| @@ -4,8 +4,14 @@ | |||||||
|  |  | ||||||
| ## Setup ## | ## Setup ## | ||||||
|  |  | ||||||
| DIR=`dirname $0` | DIR="$(dirname -- "${BASH_SOURCE[0]}")" | ||||||
| PROG=`basename $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 ## | ## Functions ## | ||||||
|  |  | ||||||
| @@ -26,6 +32,22 @@ function log { | |||||||
| 	echo -e "`date` - $message" | 	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 ## | ## Parameters ## | ||||||
|  |  | ||||||
| while getopts ':p:h' opt; do | while getopts ':p:h' opt; do | ||||||
| @@ -47,9 +69,6 @@ fi | |||||||
|  |  | ||||||
| ## Build Environment ## | ## Build Environment ## | ||||||
|  |  | ||||||
| # Ensure we are executing from this file's directory. |  | ||||||
| cd $DIR |  | ||||||
|  |  | ||||||
| sudo="" | sudo="" | ||||||
| if [[ -z $LOGNAME ]]; then | if [[ -z $LOGNAME ]]; then | ||||||
| 	LOGNAME="`whoami`" | 	LOGNAME="`whoami`" | ||||||
| @@ -60,21 +79,29 @@ if [[ $LOGNAME != "root" ]]; then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| log "Check if any system dependencies need installed." | log "Check if any system dependencies need installed." | ||||||
|  | progs="" | ||||||
| if [[ ! `which php` ]]; then | if [[ ! `which php` ]]; then | ||||||
| 	echo "- Installing PHP" | 	echo "- Installing PHP" | ||||||
| 	$sudo apt-get install -y php-cli | 	progs="$progs php-cli" | ||||||
| fi | fi | ||||||
| if [[ ! `which node` ]]; then | if [[ ! `which node` ]]; then | ||||||
| 	echo "- Installing Node" | 	echo "- Installing Node" | ||||||
| 	$sudo apt-get install -y nodejs | 	progs="$progs nodejs" | ||||||
| fi | fi | ||||||
| if [[ ! `which npm` ]]; then | if [[ ! `which npm` ]]; then | ||||||
| 	echo "- Installing NPM" | 	echo "- Installing NPM" | ||||||
| 	$sudo apt-get install -y npm | 	progs="$progs npm" | ||||||
| fi | fi | ||||||
| if [[ ! `which curl` ]]; then | if [[ ! `which curl` ]]; then | ||||||
| 	echo "- Installing Curl" | 	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 | fi | ||||||
|  |  | ||||||
| # Directories and allowed page types are executable, others are not. | # Directories and allowed page types are executable, others are not. | ||||||
| @@ -95,36 +122,27 @@ npm install | |||||||
| log "Removing old index files." | log "Removing old index files." | ||||||
| find files/photos/ -name "*".html -print -delete | find files/photos/ -name "*".html -print -delete | ||||||
| { | { | ||||||
| 	count=1 | 	check_main photos | ||||||
| 	http_code=0 | 	$DIR/check_photos.sh "$ports" | ||||||
| 	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 ## | ## Main ## | ||||||
|  |  | ||||||
|  | log "Start check_git." | ||||||
|  | while true; do | ||||||
|  | 	check_main check_git | ||||||
|  | 	$DIR/check_git.sh | ||||||
|  | 	sleep 30 | ||||||
|  | done & | ||||||
|  |  | ||||||
| log "Start website API." | log "Start website API." | ||||||
| node ./main.js $ports | node ./main.js $ports | ||||||
| status=$? | status=$? | ||||||
|  |  | ||||||
| ## Finish ## | ## Finish ## | ||||||
|  |  | ||||||
|  | log "Kill spawned processes." | ||||||
|  | pkill -eP $$ | ||||||
|  |  | ||||||
| log "Exiting with status '$status'." | log "Exiting with status '$status'." | ||||||
| exit $status | exit $status | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user