Luckily for my children, their dad is a computer nerd. I loaded up my database with data from scrollmapper to get the book, chapter, and verse bindings. Then I proceeded to calculate the total number of verse in the 66 books of the canon of Scripture – 31,102. To make it as easy as possible, the plan would have to have an equal amount of verses for each day. (Sadly, 31,102 does not reduce into 365 or 366 rounded segments.) I was able to get all the verses into a yearly plan by having the first 77 days with 86 verses and the remainder of the year at 85 verses a day (77*86)+(288*85)=31,102.
Even with the reduced number, it seemed 86 or 85 verses a day might be too much for a 7 year old to read in one sitting. Therefore, I split the reading into two sections – morning and evening portions. The morning will have 43 verses and the evening will have the remainder. Thus, if a child cannot read all 86 verses in one sitting, they have opportunity to break it up in the day. Based upon my youngest’s reading speed, it will take him approximately 45 minutes a day to complete this reading plan.
Because this will appear to be a very difficult task for my children – to read the Bible from cover to cover in a year, we are offering them 10 € per month of completed reading. Hopefully this will help them conquer bigger tasks in the future.
The generated plans and code (for leap and non-leap years) are available at https://gist.github.com/andrewwippler/b0977ef9d8c8c79483ef9110f3cb53ae
Traefik ships with SNI, allowing me to snoop the connection and prevent unauthorized access to my file server. (One must have the correct hostname to see my shared photos.) My first action was to replace my edge nginx reverse proxy with traefik. If this was a success, then I would move onto replacing nginx in my k8s cluster. I was surprized that after zero OS tuning changes, traefik was able to serve pages faster for my k8s cluster. I initially thought that traefik would perform marginally slower than nginx due to additional HostSNI checks, but that was totally disproved by the first page load.
After switching to traefik inside my k8s cluster, performance improved even more. However, a new problem emerged: I was getting the IPs of my internal traffic logged instead of the real origin IP. While I would not normally care, malicious bots were attempting to brute force my WordPress installations, and I need to block their IPs.
I was able to get the X-Forwarded-For header populated with the true ip by enabling the Proxy Protocol on my edge traefik, setting externalTrafficPolicy: Local on my traefik k8s service, and finally telling traefik to accept the proxyProtocol information from the edge server.
# Edge Router providers.yaml
...
tcp:
routers:
to-web:
service: web
rule: HostSNIRegexp(`www.andrewwippler.com`, `andrewwippler.com`, ...)
entryPoints:
- web
to-websecure:
service: websecure
rule: HostSNIRegexp(`www.andrewwippler.com`, `andrewwippler.com`, ...)
entryPoints:
- websecure
tls:
passthrough: true
services:
web:
loadBalancer:
proxyProtocol:
version: 2
servers:
- ...
websecure:
loadBalancer:
proxyProtocol:
version: 2
servers:
- ...
...
# traefik k8s deployment and service
# missing service account definition and CRDs
apiVersion: apps/v1
kind: Deployment
metadata:
name: traefik
spec:
replicas: 3 #<-- one for each of my nodes, for failover
strategy: #<-- forces k8s to update pods on configuration change
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
selector:
matchLabels:
app: traefik
template:
metadata:
labels:
app: traefik
spec:
affinity: #<-- one replica per node
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- traefik
topologyKey: "kubernetes.io/hostname"
serviceAccountName: traefik-ingress-controller
containers:
- name: traefik
image: traefik:v2.10.3
args:
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.websecure.http.tls
- --entrypoints.websecure.http3
- --experimental.http3=true
- --providers.kubernetesingress
- --providers.kubernetescrd
- --log.level=DEBUG
- --entrypoints.web.http.redirections.entrypoint.scheme=https
- --entrypoints.web.http.redirections.entrypoint.to=websecure
# - --accesslog
- --entryPoints.web.proxyProtocol.trustedIPs=127.0.0.1/32,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 #<-- local CIDRs
- --entryPoints.websecure.proxyProtocol.trustedIPs=127.0.0.1/32,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 #<-- local CIDRs
ports:
- name: web
containerPort: 80
- name: websecure
containerPort: 443
---
apiVersion: v1
kind: Service
metadata:
name: traefik
spec:
type: NodePort
selector:
app: traefik
ports:
- protocol: TCP
port: 80
name: web
targetPort: 80
- protocol: TCP
port: 443
name: websecure
targetPort: 443
externalTrafficPolicy: Local # <--- changed
]]>I was surprised at the results from the Church of Jesus Christ (LDS, Mormonism) and popular writings concerning Allah. They both came to the same conclusions that one must be performers of an action in order to know for certain they have been forgiven. For the mormon, one must keep the commandments of God, and for the Islamic worshipper of Allah, one must follow the four R’s. A logical flaw is present in both of these conclusions – humans are not able to repeatedly reproduce perfect outcomes.
For example, If I were to present a list of 10 questions and to a person for 1 minute. Then if I were to request that same person to fill in the answers on a new paper with only the questions, the person might get it correct on the first try. Now, if I were to repeat this process to the same person – showing 10 new questions and answers – eventually, the person will miss a question. It may not be immediate. It may take days before the person gets a question wrong. However, that person will get a question wrong – not because the person is uneducated or lacks memorizing ability, but because he is a human.
One of my favorite hobbies is computer science. I read a lot of technical papers and designs. Still, with all the advancements that have been made, computer bugs find a way to exist. Even with the best error correction mechanisms in place, humans find a way to create flawed computer code that does not work. It is not because they lack intelligence in organizing words and characters into computer instructions, but because humans lack the ability of perfection.
All humans are flawed humans. At the risk of losing credibility, I must also admit that I have the capacity to be wrong. I am flawed. In Bible terms, this is called being a sinner. As a sinner, I have sin and this sin causes me to be imperfect. At one point in my life, I asked the right question – how do you repent from sin? – to the right person. The answer I was given was to place my trust in Jesus – to believe that Jesus is real, that He died on a cross for my sin, and that Jesus rose again on the third day. The Bible supports this fact: those who put their trust in Jesus are given forgiveness of past, present, and future sin.
It has now been over 20 years since I placed my trust in Jesus. Each day, I live in the reality of grace, with absolute knowledge that my sins have been forgiven.
]]>These questions are difficult to answer through legal matters. Consider the following paragraph:
# Sheep: The Domesticated Mammal
Sheep have been domesticated by humans since Creation. They have been bred for their wool, milk, and meat. Specialized breeds Despite their seemingly simple appearance, sheep have a lot of interesting physical characteristics, a unique relationship with humans, and a crucial role in agriculture that make them an important part of human life and civilization.
## Physical Characteristics of Sheep
Sheep are mammals that belong to the Bovidae family, which includes cows, goats, and antelopes. They are herbivores and have four-chambered stomachs that allow them to digest tough plant material efficiently. Sheep have thick woolly coats that can be white, brown, black, or gray. The wool serves as insulation and protects them from the elements. Sheep are social animals and prefer to live in groups called flocks. They have excellent hearing and can detect sounds up to 10 times better than humans. This heightened sense of hearing helps them stay alert to potential predators.
## Sheep and Humans
Sheep have played an important role in human civilization for thousands of years. They were one of the first animals to be domesticated, and their wool, meat, and milk have been used for various purposes. Sheep have also been used for their skin, which can be made into leather. The wool from sheep has been used for clothing, blankets, and carpets. In some cultures, sheep are also used for religious ceremonies.
The relationship between sheep and humans is unique. Farmers have developed a deep understanding of their sheep's behavior and needs, and shepherds have been known to develop close bonds with their flocks. Sheep are also used in therapy programs to provide comfort and companionship to people in need. Their gentle nature and calming presence have been shown to have a positive effect on mental health.
## Sheep in Agriculture
Sheep are an important part of agriculture. They are raised for their wool, meat, and milk. Sheep farming is a major industry in many countries, and the demand for sheep products continues to grow. Sheep are also used for grazing and can help control weeds and keep the grass short. They are often used to maintain grasslands and prevent soil erosion. Additionally, sheep are known for their ability to convert low-quality forage into high-quality meat and wool, making them a valuable resource for farmers and communities.
## Conclusion
In conclusion, sheep are fascinating creatures that have played an integral role in human life and civilization. Their physical characteristics, unique relationship with humans, and crucial role in agriculture make them an important part of our world. As we continue to rely on sheep for their wool, meat, and milk, it's important that we treat them with the respect and care that they deserve. By doing so, we can ensure that these gentle creatures continue to thrive and contribute to our society for years to come.
This article was solely developed through the Notion AI engine. (At first, I did not like the generated paragraph about sheep. I requested the engine to make it longer, which is the version posted above.)
Now consider this different paragraph about sheep:
Sheep have been domesticated by humans since the Fall of Man, with Abel offering a lamb of his fold to God in Genesis 4. Specialized breeds, such as the California Variegated Mutant or Finnish Landrace, display mutant-like qualities or produce more young than average. Nevertheless, all sheep today are primarily raised for their wool, milk, and meat. Despite looking seemingly simple, sheep have a lot of interesting physical characteristics, a unique relationship with humans, and a crucial role in agriculture which makes them an important part of human life and civilization.
Sheep are mammals that belong to the same animal family as cows, goats, and antelopes. Sheep are plant eaters and have four-chambered stomachs. Sheep are social animals and live in flocks, which sometimes makes them an easy target for predators. However, sheep have excellent hearing which helps them stay alert to potential predators. Sheep come in a variety of colors, such as white, brown, black, or gray. The thick, woolly coat serves the sheep by insulating it from the elements, which is why humans have used it for various purposes.
Over time, farmers have developed a deep understanding of their sheep's behavior and needs, which has bonded shepherds with their flocks. Scripture records that David, as a young shepherd boy, fought both a lion and a bear to rescue his sheep. Some have begun using sheep in therapy programs because their gentle nature and calming presence have been proven to have a positive effect on mental health.
The demand for sheep products continues to grow, including their physical presence in a field. Sheep have an immense desire to eat, which helps control weeds and keep grass short. Sheep are rented out to maintain grasslands in some areas. Additionally, sheep are known for their ability to convert low-quality forage into high-quality meat and wool, making them a valuable resource for farmers and communities.
Sheep share an important part of our world. When we treat them with care, we can ensure that these gentle creatures continue to thrive and contribute to our society for years to come.
I produced this second article using a summarization technique after reading the first one. These words were formed from using a combination of editing the underlying text and inserting my narrative. Could that mean I co-authored the text with AI? I am certain that I could fool people into thinking the second article is my original content; however, I would be in a difficult spot if I were to be asked to produce sources of the claims. (Although, I did do a little research which uncovered mutant sheep.)
Who is the author of a published work that is generated by AI? It is an AI program. Proper attribution to the rightful author should be mandated everywhere. Until that time comes, one can spot AI generated content through its lack of sources cited and repeated textual patterns.
]]>My k8s cluster hosts websites, internal applications, and personal projects. While many choose to host their services on cloud services, I find it easier (and cheaper) to run it in a controlled home cluster. This week I was able to troubleshoot why some services were sluggish and crashing. After deploying prometheus and grafana a month ago, I was able to determine that my cluster was maxed out. I added another node to the cluster and performance improved. On a side note, I do not understand why people want to purchase barebone Intel NUCs when one can get everything included in a Dell Optiplex 5050 micro form factor.
My theme from 2015 was based on bootstrap 4 and had a few Admin UI bugs. The errors were only visible to me, so I have been putting it off for quite a while. This took me a morning to clean up with TailwindCSS. There are still a few UI features missing on the frontend due to a problem with my build and deployment process. I hope this new tech debt does not stay on the list for very long.
I have been using GnuCash since 2014, and I have found that it is a perfect program for dual-entry accounting. However, it requires that I use a computer and the program to add or remove purchases. The reporting features are also lacking functionality; however, the program has been working flawlessly. It has been on my list to revisit how I do finances to see if a web-based solution would be better. Considering I now have multiple currencies, I need a program that could do both USD and Euro. GnuCash already has this feature and I found the new Alpha Vantage API to be quite buggy.
Considering I have been a longtime user of GnuCash, my file had some corrupted entries. GnuCash did not have any friendly warnings that would hint at the solution. I could not save the file in SQLite or in MySQL to use the Python library piecash.
I looked at Firefly-iii and considered migrating to that – it had multi-currency support as well. The rules feature meant I could create a webhook that updates transactions from USD to Euro against the public trading exchange rate for that day. At first, this program looked promising.
I was able to export my files to simple CSVs and attempt to import and map them to appropriate fields. However, account splits did not export very well. I had to spend 4 hours manually importing my splits into Firefly-iii. Then I tried importing new CSVs from my bank into Firefly-iii and I found that I would have to spend several minutes creating rules in Firefly-iii. At this point, I realized that these rules were already programmed into GnuCash. If Firefly-iii existed in 2014, I think I would have begun my personal finance with it, but the work required now to migrate to this solution is, in my opinion, not worth it for me.
In GnuCash, I can import CSV, QFX, and QIF. I can map the transactions quickly and easily. Since 2014, GnuCash has been training on my data to give me a personalized experience, which has kept me on this program. It has served my financial banking needs, but now I realized I had to figure out the corruption problem.
Tech dept often snowballs into bigger problems. I was facing the largest snowball in existence. How am I supposed to find this transaction_id that the GnuCash error was telling me? I cannot save the file as SQLite to use the piecash python library to find it. It seemed hopeless.
Then I realized I am a forgetful nerd.
In my attempt to create a clean, XML export to CSV of GnuCash, I came across a PHP GnuCash XML library. I then created a script which outputted all of the information I needed for exporting GnuCash XML to CSV. The odd transactions, which had errors, were searchable in the CSV my script created. I was able to find and fix my GnuCash transactions. Then, I was able to successfully save my GnuCash file in SQLite.
I still laugh at the GnuCash error: Transaction description cannot be null. My faulty transactions had the string “null” in them. Once I removed the string, saving worked.
The processing of my personal tech debt is down to two items: 1.) Fixing the CSS bugs in my new website theme. 2.) Creating scripts to extend GnuCash functionality through the SQL backend. I think I can work on some of these next month 🙂
]]>Over the years, I have collected over a thousand notes and jots from various sources, which I have been storing in Speaker Illustrations. However, the time has come to add features (such as attaching images or videos) and I am not very proficient in Rails to make such a change. I have re-written Speaker Illustrations in JavaScript using React and Nextjs, with an API provided by AdonisJS. I have called it Speaker Windows because an illustration is just a window for people to look through to understand your meaning.
Anyone can host their own copy of Speaker Windows, but I know how most who would benefit from this service are inept to install software on a server. Therefore, I have designed the application with multi-user auth. Anyone can register for an account on my publicly hosted instance.
The new features have yet to be added, but the project is now at the same functionality as my old implementation. Currently, I am satisfied with the rewrite and am happy with using NextJS and AdonisJS in future personal projects, such as a shopping list app to replace our use of Google Keep. (There are rumors Google Keep is being axed.)
]]>It is proud to assume that you have all of the right answers to everything. To make such a claim is to decree that you are like God: all-knowing and perfect in every way. However, any human cannot make such a claim. Humans are notorious for failure.
Did Edison invent the lightbulb on the first try?
Did all the Apollo missions succeed without incident?
How many attempts did it take Spacex engineers to land a rocket? Was it 1?
How many answers did you get wrong on all of the tests you took in school? Was it 0?
As a human, I understand my faults. Compared to a Holy God, I can never be perfect. Thankfully, this God offers forgiveness of sin through placing one’s trust in His substitutionary death on the cross. Oh, what freedom I experienced when I trusted Christ!
Now, as I have been a Christian for over two decades, it disturbs me at the audacity of some who claim the inability to change their opinions. Our sacred text shows a few examples of the opposite. Job had an idea of God, but when he saw Him, Job’s lifestyle changed (Job 42:5-6). Paul admonished the reduction of one’s liberty to maintain the edification of one another (Romans 14:19-21). Even the early church demonstrated the necessity of change to minister to the needs of those who were experiencing poverty from becoming a Christian (Acts 4:32-35).
Christianity is not a list of stubborn rules which are unmovable. Instead, it is a journey leading one “to be conformed to the image of his Son” (Romans 8:29), and it is built upon continual scrutiny of one’s decisions (Romans 12:2). Change (or demonstration of critical thinking as to why one is not changing) is an indicator of one’s belief in God. “We have always done it this way” is not acceptable thinking in Christianity. Change must be performed when necessitated.
What will cause you to change from your position? What evidence is required for you to stay with your current thinking? Defining these should be a requirement for any individual desiring to hold a position of ministry.
]]>Anyway, I said all of that to say this: I know where both of these locations are:
I can be excited for both the US and Finnish teams.
]]>If I were a more regular user of Twitter, I think I would use this extension: https://github.com/insin/tweak-new-twitter
I might even install it for the few times a month I click on a Twitter link.
]]>This is a Chromebook.
Google apps are loaded by default.
This includes Google drive.
I just prefer the web experience over the native file explorer.
]]>The past few months I have noticed a personal, increased social media presence. I would have my app open 7 or 8 times a day, and because of the algorithms to keep me in the app longer, this would equate to 4 or 5 hours a day. I was managing to keep my studies, work, and family life balanced so I do not feel as if I have somehow lost that time or that I am wrong for spending that spare time on social media. It is just that 4 or 5 hours can be a bit excessive for a single particular hobby.
One of the items I have learned through osmosis is that having regularly scheduled checkpoints to evaluate my personal life is important. Just like the feedback loop in software engineering presents a better product, a feedback loop in daily life is just as important. Software engineering says the feedback loop should be the shortest possible to completion; however, my feedback loop is every 3 months. This gives me enough time to cycle through and evaluate how I am doing without changing too rapidly. This last iteration, ending in September, allowed me to gather the data to know I was spending about 24 hours a week on social media.
This current iteration was filled with thoughts of, “I know I need to do something, but what!?” However, when Elon Musk bought Twitter, everyone scrambled off of it to their own respective platforms. It was then I remembered that a solution exists in the form of RSS. The content I want to view and consume is retrieved without the help of a company’s algorithm of keeping me on their platform.
I settled for Yarr as my feed reader and RSS-Bridge for middleware when RSS feeds were not available. I am hosting these apps in my Kubernetes homelab and am using Github OAuth for authentication. While I have only tested this option for several weeks now, it seems to have kept me out of the algorithm octopus. Preliminary observations have shown 3-5 more hours for other hobbies – such as sleep, books, video games, blog posts, and other silly stuff that is interesting to me alone.
]]>somesite.com,<plaintext_username>,<hashed_password>
I can assume my data has been leaked. I am a LastPass user; however, I do not think this is good reason for my departure from LastPass.
This is not the first time a hacker was able to get this sort of information from LastPass. I was also a LastPass user during that time and my passwords were never compromised after than hack. The Zero-knowledge password storing employed by LastPass seems to have worked in the past, and I anticipate it being sufficient again.
As a safety precaution, I went ahead and changed my financial passwords, but other than that step, is there anything else that needs to be done? Perhaps I will change my Master password once more. If LastPass gets hacked again, at least all my SHAs will be different.
]]>He, unworthily,
Received punishment for sin.
God the Son had died.
Three days have now passed.
And Jesus did not stay dead
He came back to life.
It was His power.
Without the help of others.
Life came back to Him.
By resurrection,
Jesus says, “Place trust in me.”
“I make all things new.”
This event declares
And even more loudly proclaims
Flawless victory.
If one considers the previous paragraph to be accurate in its message, then one should not settle for a single verse to explain a complex doctrine, such as salvation.
]]>I was interested in asking the ChatGPT to clarify the love quality found in John 3:16.
Love is an emotion that is, in Christian circles, attributed to different levels or types of love. One can have a love for a sports team, a love for a spouse, and a love for chocolate. However, these types of love vary based on each object and the love holder.
In English, we would use the same word for love to describe the varying emotion, but in other languages, the varying degrees are expressed in different word choices. It is common for Bible preachers to equate Greek word choices with varying forms of love, such as in the dialog between Peter and Jesus in John 21. (Although Carson has made good dialog into overthrowing this perceived relation.1)
My recent study of the Greek text in John 3:16 revealed a language barrier between what is written in Greek and what is translated into English. When written, love was given a form without English verb equivalency. It is translated in the English past tense, which offers a sense of something performed in previous times, but does not apply to today. However, as John wrote in Greek, the phrasal action exists in an eternal state.
Perhaps ChatGPT could describe this immeasurable amount of love:
The response is what you would expect of popular psychology, being there for a person regardless of the circumstance. The fallacy of this thought is easily identified in a situation where the one you love has escaped from prison. In that instance, supporting them would require you to harbor a known fugitive – an act punishable by US law. It is also impossible to be supportive of everyone’s actions at all times. Can immeasurable love be shown to groups that have contrary opinions? However, this type of love is expressed in John 3:16.
God’s love is an immeasurable amount of love, which has lasting effects that continually build up. The potency by which God shows His love is presented through its conceptualization and increasing exponential power, which began in eternity past. In essence, God’s love will continually build upon the foundation until the recipient has no more room to receive it. At this point, God’s love is exponentially more.
The very nature of God’s love felt for the world is signified by this thought: God expressed it in giving the most prized possession He had – His only begotten Son. The power and intensity by which God loves are based on the virtue of Jesus Christ.
God so loved; therefore, He gave.
1 D. A. Carson, Exegetical Fallacies, 2nd ed. (Grand Rapids, MI: Baker Books, 2013). 51-53.
]]>For now, I want to experiment and see how a “status” post format works.
]]>