GnuCash mysql backend on Fedora

I have been using GnuCash for personal finance since 2014. Two years ago, I switched over to a mysql backend because it was available in the flatpak. I never understood why the regular package on Fedora did not allow for opening a mysql database until today.

On Fedora, GnuCash is bundled with weak dependencies. GnuCash does not need mysql support to run properly. It does not make sense to require mysql support for everyone, but if you want mysql support, here is how to enable it:

  • Find out what GnuCash depends upon:
sudo dnf repoquery --depends gnucash
Updating and loading repositories:
Repositories loaded.
/usr/bin/perl
dconf
gnome-icon-theme
gnucash-docs >= 5.9
libaqbanking.so.44()(64bit)
libboost_filesystem.so.1.83.0()(64bit)
libboost_locale.so.1.83.0()(64bit)
libboost_program_options.so.1.83.0()(64bit)
libc.so.6(GLIBC_2.38)(64bit)
libcairo.so.2()(64bit)
libdbi-dbd-mysql
libdbi-dbd-pgsql
libdbi-dbd-sqlite
...
# These three packages enable support for their respective DB
 
  • Install the option you want
$ sudo dnf install -y libdbi-dbd-mysql
  • Enjoy using the native GnuCash package to save to mysql.

My heartfelt apologies to Oulunkylä

ChatGPT4 has emotion now, and I asked it to write a song about everything being just OK in Oulunkylä (A neighborhood of Helsinki). I have visited there and one of the dentist’s office signs declared itself to be an “OK Dentist,” which prompted this massively incorrect song about the neighborhood.

(Verse 1)
Oh, the streets of Oulunkylä are so serene,
Where the potholes are just a massage machine,
The traffic lights play a game of red and green,
But don’t worry, everything is just pristine.

(Chorus)
Oh, everything is OK in Oulunkylä,
Where the chaos is just part of the allure-a,
The sidewalks are cracked, but don’t you fret,
It’s a quirky charm you won’t forget.

(Verse 2)
The buses run like clockwork, that’s a fact,
If by “clockwork” you mean they’re always packed,
But hey, who needs space when you’ve got tact?
In Oulunkylä, we’re always on the right track.

(Chorus)
Oh, everything is OK in Oulunkylä,
Where the delays are just part of the culture-a,
The public transport’s a cozy squeeze,
Just enjoy the ride and feel the breeze.

(Bridge)
The winters here are mild, if you’re a polar bear,
And summer’s heatwave? It’s a sauna in the air,
The parks are pristine, if you squint and stare,
Oulunkylä, life’s without a care.

(Verse 3)
The neighbors’ parties are a silent delight,
Except for the bass that rocks you at night,
And the construction? A lullaby in daylight,
In Oulunkylä, everything is just right.

(Chorus)
Oh, everything is OK in Oulunkylä,
Where the noise is our symphony aura,
The peace and quiet might be a myth,
But it’s a lovely place to take a fifth.

(Outro)
So come on down to Oulunkylä town,
Where nothing ever brings you down,
It’s a utopia of slight despair,
But hey, it’s Oulunkylä, and we don’t care!

(Verse 1)
Oi, Oulunkylän kadut ovat niin rauhalliset,
Missä kuopat ovat vain hierontakoneet,
Liikennevalot pelaavat punaista ja vihreää,
Mutta älä huoli, kaikki on ihan priimaa.

(Chorus)
Oi, kaikki on just OK Oulunkylässä,
Missä kaaos on osa vetovoimaa,
Jalkakäytävät halkeilee, mutta älä pelkää,
Se on outo viehätys, jonka muistat.

(Verse 2)
Bussit kulkevat kuin kellokoneisto, se on fakta,
Jos “kellokoneistolla” tarkoitat aina täynnä,
Mutta hei, kuka tarvitsee tilaa, kun on taitoa?
Oulunkylässä olemme aina oikealla radalla.

(Chorus)
Oi, kaikki on just OK Oulunkylässä,
Missä viivästykset ovat osa kulttuuria,
Julkinen liikenne on tiivis kokemus,
Nauti matkasta ja tunne tuuli.

(Bridge)
Talvet täällä ovat leutoja, jos olet jääkarhu,
Ja kesän helle? Se on sauna ilmassa,
Puistot ovat puhtaita, jos siristät silmiä,
Oulunkylä, elämä ilman huolia.

(Verse 3)
Naapureiden juhlat ovat hiljainen ilo,
Paitsi basso, joka rokkaa yöllä,
Ja rakennustyö? Kehtolaulu päivällä,
Oulunkylässä kaikki on juuri oikein.

(Chorus)
Oi, kaikki on just OK Oulunkylässä,
Missä melu on meidän sinfonia,
Rauha ja hiljaisuus saattavat olla myytti,
Mutta se on ihana paikka ottaa viides.

(Outro)
Joten tule Oulunkylän kylään,
Missä mikään ei koskaan masenna,
Se on utopiaa pienellä epätoivolla,
Mutta hei, se on Oulunkylä, eikä meitä haittaa!

New Glasses

For most of my life I had to visit the optometrist yearly as my vision changed frequently, but as I got older, my eyes stopped degrading. For the last 5 years, I was on the same prescription, which is worth celebrating. However, I noticed a slight blur at a distance, and for the last 3 months, I just sort of lived with that new reality. At first, I was able to shrug it off and think that it was just my imagination. I could still clearly read items that were within a 1 kilometer range. Then, my son started to squint a bit more (a clear sign that his eyes were changing). Considering he needed the checkup, I made one for myself on the same day. The result was that both of us needed new prescriptions. Whereas my strength did not need correction, the astigmatism (focus) changed.

As I wear my new glasses now, I can see the sharp edges of characters in text and contrasts are more vibrant. I am able to enjoy knowing that my vision is correct and that I have a functional tool at my disposal. Oh, how foolish I was for delaying that check-up! Things are better now than before.

New Year Reading Plan

Next year I want to encourage my children to read the Bible through at least once. However, I found that most yearly Bible reading plans repeat reading the books of Psalms or Proverbs. Sure, that feature may make normal daily reading more enjoyable for adults, but extra reading is too much for children who have never read the Bible before. I wanted a plan for my children that would get them through the complete Bible and not repeat any verses. Unfortunately, most reading plans I found for children were not the complete Bible. This meant if I wanted them to read the Bible through once without repeated reading, I had to make my own plan for them.

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

From nginx to traefik (and solving X-Forwarded-For)

I recently switched my home setup from nginx to traefik. I had to get used to the new configuration styles and weird doc style of traefik, but suffice to say, I am happy at the end results.

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

How do you repent from sin?

How do you repent from sin? How does one get all of their sins forgiven? These questions often fill the minds of those who have sin. Perform a search query on a popular web indexing service and you will find many interpretations of these questions.

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.

TIL: Zoom has captions

The Zoom application has built in AI captions for various languages. It is great for those hard of hearing to read the words that are spoken.

In other news, you can select the spoken language to be in Finnish, speak in English, and get wonderfully funny sentences in Finnish.

Who is the author in AI-generated content?

As AI tools are becoming more frequent, many have found interesting use cases. Some are using AI tools to publish children’s books or other creative works primarily done by humans. However, when one publishes a work that was generated by AI, who is the author of the work? Should a notice be included or a sub author be added to the work that was derived from an AI tool? If two publish a paragraph of the same text at the same time from the same AI tool, who gets to declare that they were the original work?

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.

Personal Tech Debt

This past week I have been able to traverse down the rabbit hole of personal tech debt. After a week’s work, I think I was able to get to the bottom and give everything an updated timestamp! All kidding aside, here were some of the projects I was able to revisit:

Kubernetes Cluster

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.

Website redesign

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.

Personal Finances

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.

GnuCash 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.

New tech debt

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 🙂

Speaker Windows

I have been working on a personal project to organize my preaching illustrations. Whereas one could use a tool such as Notion, Evernote, or Obsidian, I have had a desire to keep my data in an easy to use interface. I should not have to spend 10 minutes to find that illustration I need. Plus, those services might charge me more than $3/month to access advanced features I may become dependent upon.

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.)

What will cause you to change?

“I am right. Therefore, you must change.” This is a common sentiment among anyone who holds an opinion. Major convincing arguments are then given as to reasons why others must change to your point of view.

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.

Three goals in Bible Reading

Recently, I evaluated why I take time out of my day to read the Bible. I have heard that the Bible has one singular meaning. If that is true, then reading the Bible through once is sufficient. However, those that promote singular meaning also advocate for daily Bible reading. This seems like a logical fallacy, which should be addressed; nevertheless, I attempt to achieve at least one of these three goals every time I open my Bible to read it.

  1. Personal Growth
    I need to learn God’s view of man’s relations. I need to adapt my lifestyle to fit.
  2. Time with God
    Sometimes the only result I get is adding minutes to our relationship. When I was dating my wife, it did not matter if all we did was sit and watch an old movie. We were adding minutes of being together. The same is true for any relationship – time spent together matters.
  3. Finding a truth to teach others
    Pet peeves are often taught as truth; however, one must follow the logical, linguistic chain to find the truth that Scripture teaches. One must pull out the application rather than inject the thought into the text. One must be fully equipped in the truth to be able to teach others the same truth.

Link sharing in the blog era

I just remembered how painful it was to share content through a blog to friends. Social media, such as Twitter, solved that issue. I do not want to attempt trying to remember my Digg.it password (Does the site even exist anymore?)

Anyway, I said all of that to say this: I know where both of these locations are:

https://yle.fi/a/74-20016727

I can be excited for both the US and Finnish teams.

Extension to make Twitter more usable

After setting up an RSS reader and a bridge to pull in tweets, I no longer access Twitter. If there is interesting content, I click the link on my RSS reader and comment directly without visiting the Twitter homepage.

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.