diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..85ed632 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +public/ +old-site/ +src/ +opencodetmp/ \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0897a54 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ + +publish: build + ./push-site.sh + +build: + ./convert.sh \ No newline at end of file diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000..c2497fe --- /dev/null +++ b/changelog.txt @@ -0,0 +1,11 @@ +2025-02-25 made public (v1.0.1) +- forked from https://github.com/oskarwickstrom/monospace-web +- bash script to build HTML & PDF from markdown +- css & js: + - added clickable/linkable heading anchors + - added code blocks + - added blockquotes + - added (product) cards + - grid changes + - added new hr style + - added dark mode toggle & related image color adjustments diff --git a/content/blog/Sun-Ultra-98-Build.md b/content/blog/Sun-Ultra-98-Build.md new file mode 100644 index 0000000..12e895e --- /dev/null +++ b/content/blog/Sun-Ultra-98-Build.md @@ -0,0 +1,63 @@ +--- +title: Sun Ultra 98 Build +subtitle: Building my linux workstation +author: Eric Taylor +lang: en +toc: true +enable-response: true +--- +## Specs + +- MB: Gigabyte Vision D-P Motherboard B550 +- CPU: AMD Ryzen 7 3800X 8 Core 16 Thread +- RAM: 64GB System Memory 2x32GB DDR4-3200 PC4-25600 2Rx8 ECC +- GPU: Radeon Pro WX 9100 (Vega 64) 16 GB HBM2 Memory +- STORAGE: 1TB SK Hynix Gold NVMe M.2 +- PS: EVGA P6 850 watt 80+ Platinum +- CASE: Sun Microsystems Ultra 27 +- [Kingwin USB ](https://www.amazon.com/dp/B01K0RPTN0?psc=1&ref=ppx_yo2ov_dt_b_product_details)Other: Kingwin USB hub/media reader on the front panel +- 4 port Intel NIC +- OS: Fedora Workstation + +> Inspiration for this build came from [Sun Ultra 24 - Reborn](http://mroach.com/2020/08/sun-ultra-24-reborn/) + +## Exterior + +[![Case Exterior](./../files/img/sun_ultra98_10_thumb.png)](./../files/img/sun_ultra98_10.jpg) + +[![Front IO](./../files/img/sun_ultra98_09_thumb.png)](./../files/img/sun_ultra98_09.jpg) + +[![Rear IO](./../files/img/sun_ultra98_07_thumb.png)](./../files/img/sun_ultra98_07.jpg) + +Got the case real cheap it is a little scuffed up but otherwise in good shape. I may try and touch up the scratched paint someday if I can get a good color match. + + +## Desktop + +[![Desktop](./../files/img/sun_ultra98_06_thumb.png)](./../files/img/sun_ultra98_06.png) + +[![Visual Studio Workspace](./../files/img/sun_ultra98_05_thumb.png)](./../files/img/sun_ultra98_05.png) + + +## Interior + +[![Case Interior](./../files/img/sun_ultra98_04_thumb.png)](./../files/img/sun_ultra98_04.jpg) + +[![Heatsink and RAM](./../files/img/sun_ultra98_08_thumb.png)](./../files/img/sun_ultra98_08.jpg) + +[![Wire Harness](./../files/img/sun_ultra98_03_thumb.png)](./../files/img/sun_ultra98_03.jpg) + +The case was really easy to build in however I did run into a few sags: + +1. Most of the cables for the front panel didn’t reach their location on the motherboard necessitating the use of extensions. +2. Front panel power connector required a custom pinout adapter. +3. No place to hide cables. + +[![CPU Heatsink and Powersupply](./../files/img/sun_ultra98_02_thumb.png)](./../files/img/sun_ultra98_02.jpg) + +[![Front Fan](./../files/img/sun_ultra98_01_thumb.png)](./../files/img/sun_ultra98_01.jpg) + +I didn't have the correct size fan for the front so I just zip tied it on. + +For a workstation motherboard I am a little disappointed that there isn’t more PCIE slots. With a video card an and NIC I have only 1 slot left at the bottom of the case. + diff --git a/content/blog/georgia-aquarium-video.md b/content/blog/georgia-aquarium-video.md new file mode 100644 index 0000000..0f164a9 --- /dev/null +++ b/content/blog/georgia-aquarium-video.md @@ -0,0 +1,12 @@ +--- +title: EricTaylor.me/Blog +subtitle: Georgia Aquarium Visit +author: Eric Taylor +lang: en +toc: false +--- + + + + +I made this video when I visited the Georgia Aquarium in the fall of 2024. diff --git a/content/blog/index.md b/content/blog/index.md new file mode 100644 index 0000000..0dcea8a --- /dev/null +++ b/content/blog/index.md @@ -0,0 +1,33 @@ +--- +title: EricTaylor.me/Blog +subtitle: Random musings. +author: Eric Taylor +lang: en +toc: false +--- +1 bit computer clipart + +## Highligted + +None. + +## Notes + +- [Quotes](quotes.html) +- [The Rules to Live By](rules-to-live-by.html) +- [Living as a Citizen of Heaven](living-as-a-citizen-of-heaven.html) +- [Trading Everything for Christ](trading-everything-for-christ.html) +- [The Blessing of suffering](the-blessing-of-suffering.html) +- [Maintaining an unwavering joy](maintaining-an-unwavering-joy.html) +- [Sun Ultra 98 Build](Sun-Ultra-98-Build.html) + +## Video + +- [Georgia Aquarium](georgia-aquarium-video.html) + + +## Test + +- [Lorem ipsum](lorem-ipsum.html) + + diff --git a/content/blog/living-as-a-citizen-of-heaven.md b/content/blog/living-as-a-citizen-of-heaven.md new file mode 100644 index 0000000..b03681f --- /dev/null +++ b/content/blog/living-as-a-citizen-of-heaven.md @@ -0,0 +1,62 @@ +--- +title: Living as a Citizen of Heaven +subtitle: Hope and freedom comes from being a citizen of heaven +author: Eric Taylor +lang: en +toc: true +enable-response: true +--- + +> Brethren, be followers together of me, and mark them which walk so as ye have us for an ensample.(For many walk, of whom I have told you often, and now tell you even weeping, that they are the enemies of the cross of Christ: Whose end is destruction, whose [God](https://christiananswers.net/dictionary/god.html) is their [belly](https://christiananswers.net/dictionary/belly.html), and whose glory is in their shame, who mind earthly things.) For our [conversation](https://christiananswers.net/dictionary/conversation.html) is in heaven; from whence also we look for the [Saviour](https://christiananswers.net/dictionary/savior.html), the [Lord](https://christiananswers.net/dictionary/lord.html) [Jesus Christ](https://christiananswers.net/jesus/home.html): Who shall change our vile body, that it may be fashioned like unto his glorious body, according to the working whereby he is able even to subdue all things unto himself. [Philippians 3:17-21 KJV](https://christiananswers.net/bible/phil3.html#17) + +Philippians 3 continues to challenge us to re-evaluate our priorities, shifting our focus from earthly pursuits to a heavenly perspective. It’s a call to live as citizens of a different kingdom, impacting how we follow, what we admire, and where we place our hope. + +## **Follow Heavenly-Minded Examples** + +Paul urges the Philippians, “Be followers of me, and look to those who walk as we do” (Philippians 3:17). This isn’t about blind obedience, but about observing those who are intentionally living out their faith. It's about identifying those whose lives reflect the character of Christ and intentionally learning from them. + +Paul emphasizes that “walk” refers to the *pattern* of your life, your habits, your values, and your daily choices. Just as we need leaders to follow, we also have a responsibility to *be* godly examples to others. + +## **Avoid Following Earthly Examples** + +However, not everyone is worthy of imitation. Paul warns about those who are “enemies of the cross of Christ” (Philippians 3:18), people whose lives are defined by self-indulgence and shame. It’s a stark reminder to be discerning about who we allow to influence us. + +How do we identify these dangerous influences? Paul points to several key characteristics: + +* **Living against God’s law:** They disregard biblical principles and prioritize their own desires. +* **Prioritizing earthly things:** Their focus is solely on material possessions, pleasure, and self-gratification. +* **Boasting in shameful things:** They celebrate behaviors that should bring them shame. + +The law, Paul explains, serves three vital purposes: it restrains evil, reveals God’s will, and exposes our own sinfulness. We must be wary of those who flaunt their disobedience and disregard God’s standards. Beware of false prophets and teachers who disguise themselves as sheep in wolves clothing! + +Paul illustrates this with a powerful analogy: “Whose god is their belly, and whose glory is in their shame” (Philippians 3:19). Their appetites, desires, and self-worship become their ultimate priority. + +Remember, as Romans 6:1-4 reminds us, if we’ve died to sin, we shouldn’t continue living in it. We are called to “walk in newness of life” and 1 John 2:15 warns us not to love the world or the things in it. + +> What shall we say then? Shall we continue in sin, that grace may abound? God forbid. How shall we, that are dead to sin, live any longer therein? Know ye not, that so many of us as were baptized into Jesus Christ were baptized into his death? Therefore we are buried with him by baptism into death: that like as Christ was raised up from the dead by the glory of the Father, even so we also should walk in newness of life. +[Romans 6:1-4 KJV](https://christiananswers.net/bible/rom6.html#1) + +## **Have a Heavenly-Minded Hope** + +Ultimately, our true home isn’t on earth; it’s in heaven. Paul declares, “For our citizenship is in heaven, from where we eagerly await a Savior, the Lord Jesus Christ” (Philippians 3:20). + + +> For our conversation is in heaven; from whence also we look for the _Saviour_, the Lord Jesus Christ: Who shall change our vile body, that it may be fashioned like unto his glorious body, according to the working whereby he is able even to subdue all things unto himself. +[Philippians 3:20-21 KJV](https://christiananswers.net/bible/phil3.html#20) + +This heavenly perspective transforms our lives. We are merely “passing through” this world, and our hope is rooted in the promise of a future resurrection and a glorified body, fashioned like Christ’s (Philippians 3:21). + + +> These all died in faith, not having received the promises, but having seen them afar off, and were persuaded of them, and embraced them, and confessed that they were strangers and pilgrims on the earth. For they that say such things declare plainly that they seek a country. And truly, if they had been mindful of that country from whence they came out, they might have had opportunity to have returned. But now they desire a better country, that is, an heavenly: wherefore God is not ashamed to be called their God: for he hath prepared for them a city. +[Hebrews 11:13-16 KJV](https://christiananswers.net/bible/heb11.html#13) + +Hebrews 11:13-16 beautifully portrays this reality: the patriarchs of faith “died in faith, not having received the promises, but having seen them afar off.” They recognized they were strangers and pilgrims on earth, seeking a better country – a heavenly one. + +This hope compels us to shift our priorities. Instead of laying up treasures on earth, we should focus on storing up eternal rewards in heaven (1 Peter 1:4). + +> To an inheritance incorruptible, and undefiled, and that fadeth not away, reserved in heaven for you, +[1 Peter 1:4 KJV](https://christiananswers.net/bible/1pet1.html#4) + +Our earthly bodies are temporary and imperfect. But the promise of a glorified body—one that reflects the perfection and glory of Christ—should inspire us to live with a heavenly mindset, eagerly awaiting the return of our Savior. + + diff --git a/content/blog/lorem-ipsum.md b/content/blog/lorem-ipsum.md new file mode 100644 index 0000000..03cdce4 --- /dev/null +++ b/content/blog/lorem-ipsum.md @@ -0,0 +1,20 @@ +--- +title: Lorem ipsum +subtitle: Lorem ipsum dolor sit amet, consectetur adipiscing elit. +author: John Doe +lang: en +toc: false +--- + + + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque quis sagittis diam. Nunc nec nisi venenatis, varius ipsum sed, interdum ex. Nullam lacinia ex at sapien maximus mattis. Donec felis leo, viverra sit amet augue at, convallis laoreet ex. Cras luctus lacinia mi vitae tincidunt. Duis pellentesque consequat sapien a gravida. Donec tincidunt diam turpis, nec imperdiet est faucibus at. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; + +Phasellus posuere, magna ut vulputate tincidunt, ipsum libero euismod mi, sit amet tincidunt risus sem in tellus. Quisque vestibulum sem sed orci rutrum euismod euismod sit amet velit. Phasellus pharetra dui eget metus pellentesque, vitae blandit leo tempus. Pellentesque commodo a magna vitae maximus. Aliquam hendrerit justo quis metus sollicitudin, ut tempus sapien tincidunt. Nam vitae mollis nunc, non iaculis neque. Cras ornare velit nec eros faucibus rhoncus. Praesent porttitor lectus lectus, nec luctus lectus sagittis sit amet. Fusce ultrices tincidunt commodo. + +Fusce pulvinar sit amet neque sit amet ultrices. Sed facilisis non dui a consectetur. Cras vitae sem nisi. Nunc at tortor eu leo facilisis ultrices et eget lorem. Sed et odio nunc. Quisque mattis congue porta. Integer aliquet eleifend urna, eget molestie justo fermentum a. Phasellus ut efficitur tellus. Nulla posuere nisi vitae nisl dapibus mollis. + +Integer condimentum libero ut ligula tempus dictum. Pellentesque dignissim mauris eget sapien consequat bibendum. Integer interdum risus nec quam egestas, id consequat arcu rutrum. Quisque viverra arcu ex, ut varius neque volutpat ut. Quisque et mattis nulla. Suspendisse congue orci id velit tincidunt rhoncus. Sed luctus odio nec augue vulputate, sit amet hendrerit lacus commodo. Duis auctor nisi orci, ut suscipit ipsum aliquet id. Etiam elementum orci sed augue iaculis, vitae condimentum justo pellentesque. Morbi eget tortor ullamcorper, eleifend tellus non, iaculis sapien. Aenean pellentesque laoreet ante, eu suscipit nisi imperdiet sit amet. Ut non dapibus tellus, posuere dignissim lacus. Aliquam aliquet malesuada porttitor. Maecenas tincidunt id ante at ultricies. + +Fusce id libero vel diam faucibus congue. Cras sed molestie leo. Cras lobortis blandit orci dignissim pulvinar. Morbi ut fermentum erat. Suspendisse varius est lacinia mauris lacinia pellentesque. Duis non purus suscipit, dapibus ante ut, finibus metus. Nam dictum placerat suscipit. Suspendisse sapien ex, rutrum ut efficitur sed, suscipit ut justo. Donec venenatis libero vitae lobortis tristique. Aliquam ultricies mi consequat lectus rhoncus vestibulum. Curabitur consectetur in sem id tempor. Fusce eget ex mauris. Nunc porta porta arcu, vitae viverra ante gravida ut. Maecenas luctus condimentum nisi a cursus. Aenean blandit dolor vel velit rhoncus, vitae consectetur sem tincidunt. In ac tortor sit amet justo eleifend tincidunt eget quis justo. \ No newline at end of file diff --git a/content/blog/maintaining-an-unwavering-joy.md b/content/blog/maintaining-an-unwavering-joy.md new file mode 100644 index 0000000..bf76925 --- /dev/null +++ b/content/blog/maintaining-an-unwavering-joy.md @@ -0,0 +1,67 @@ +--- +title: Maintaining an Unwavering Joy +subtitle: maintain joy in a world filled with hardship and uncertainty +author: Eric Taylor +lang: en +toc: true +enable-response: true +--- + +> Rejoice in the Lord alway: and again I say, Rejoice. Let your moderation be known unto all men. The Lord is at hand. Be careful for nothing; but in every thing by prayer and supplication with thanksgiving let your requests be made known unto God. And the peace of God, which passeth all understanding, shall keep your hearts and minds through Christ Jesus. +> [Philippians 4:4-7 KJV](http://christiananswers.net/bible/phili4.html#4) + +How do we maintain joy in a world filled with hardship and uncertainty? Paul offers a powerful path to unwavering joy in Philippians 4:4-7 – a joy rooted not in our circumstances, but in our relationship with Christ. + +# **The Idea:** + +Because we are in Christ, we seek to be shaped by the gospel and not by the world. So when trials and hardships come, we can stand firm and maintain our joy. + +## **How Can We Do This?** + +### **1. Rejoice in the Lord (v4)** + +Paul doesn’t just *suggest* we rejoice, he *commands* it – “Rejoice in the Lord alway: and again I say, Rejoice.” This isn’t a superficial happiness, but a deep-seated joy planted in our union with Christ. + +![unshakeable-joy](./../files/img/unshakeable-joy.png) + +* **Don't let your joy be shaken:** Our joy shouldn't be dependent on external circumstances. +* **Rejoice always!:** Even in the hard times, find comfort in your faith. +* **Overflowing Joy:** Be so filled with joy that it excites and encourages others. +* **Don't let sin steal your joy:** Sin diminishes our connection to God and drains our joy. +* **Don't let good things distract you:** Even positive things can become idols if they pull our focus away from God. + +### **2. Work at Being Gentle (v5)** + +Gentleness, or moderation, is a hallmark of a Christ-follower. It’s about acting with kindness and humility, even when wronged. + +* [Philippians 2:3-5](https://christiananswers.net/bible/phil2.html#3) & [1 Peter 2:21](https://christiananswers.net/bible/1pet2.html#21) call us to follow the example of Christ, who humbled himself. +* **We are not called to seek revenge:** Respond to injustice with grace and forgiveness. +* **Check yourself:** Knowing that God is near should motivate us to live with gentleness and humility. + +### **3. Overcome Anxiety Through Prayer (v6-7)** + +#### Anxiety is a common struggle, but Paul offers a powerful solution: prayer. + +* **Don't be anxious:** Worry is a sign of distrust in God's provision. +* **Be careful for nothing:** It's okay to have genuine concern, but not crippling worry. +* **Don't live as if there is no God:** Our faith should shape how we approach life’s challenges. +* **The pagans and atheists live this way:** They have no hope or assurance beyond this life. + +#### Instead of succumbing to anxiety, Paul encourages us to: + +* **Present our requests to God in prayer.** +* **Approach Him with thankful hearts,** not just demanding requests. +* **Rejoice even when our prayers aren’t answered the way we want,** trusting in His sovereignty and perfect knowledge. + +> “Therefore I tell you, do not worry about your life, what you will eat or drink, or about your body, what you will wear. Isn’t there more to life than food and more to the body than clothing? Look at the birds in the sky: They do not sow, or reap, or gather into barns, yet your heavenly Father feeds them. Aren’t you more valuable than they are? [Matthew 6:25‭-‬26 NET](https://christiananswers.net/bible/mat6.html#5) + +> And which of you by worrying can add even one hour to his life? [Matthew 6:27 NET](https://christiananswers.net/bible/mat6.html#27) + +## And the promise? + +**“And the peace of God, which passeth all understanding, shall keep your hearts and minds through Christ Jesus.”** + +This peace isn't a fleeting emotion; it's a deep-seated assurance that transcends logic and reason. It’s a peace the world knows nothing about. + +**Our greatest need has already been met.** Through Christ, we have peace with God, and that peace can guard our hearts and minds, enabling us to maintain unwavering joy even in the midst of life’s challenges. + diff --git a/content/blog/quotes.md b/content/blog/quotes.md new file mode 100644 index 0000000..d6b727d --- /dev/null +++ b/content/blog/quotes.md @@ -0,0 +1,68 @@ +--- +title: Quotes +subtitle: Some quotes have collected. +author: Eric Taylor +lang: en +toc: false +enable-response: false +--- + +
+paper clips +

+

+
+"Forgiveness is an act of the will, and the will can function regardless of the temperature of the heart."
+– [Corrie Ten Boom](https://en.wikipedia.org/wiki/Corrie_ten_Boom) + +"Worrying is carrying tomorrow's load with today's strength- carrying two days at once. It is moving into tomorrow ahead of time. Worrying doesn't empty tomorrow of its sorrow, it empties today of its strength."
+– [Corrie Ten Boom](https://en.wikipedia.org/wiki/Corrie_ten_Boom) + +“The world is a book and those who do not travel read only one page.”
+– [St. Augustine](https://en.wikipedia.org/wiki/Augustine_of_Hippo) + +"When the truth offends, we lie and lie until we can no longer remember it is even there. But it is...still there. Every lie we tell incurs a debt to the truth. Sooner or later, that debt is paid."
+— [Valery Legasov](https://en.wikipedia.org/wiki/Valery_Legasov), Chernobyl, Miniseries: Open Wide, O Earth + + “Twenty years from now you will be more disappointed by the things you didn’t do than by the ones you did do. So throw off the bowlines, sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover.”
+– [Mark Twain](https://en.wikipedia.org/wiki/Mark_Twain) + +Globe Clipart + + "What is morally wrong can never be advantageous, even when it enables you to make some gain that you believe to be to your advantage. The mere act of believing that some wrongful course of action constitutes an advantage is pernicious."
+— [Cicero](https://en.wikipedia.org/wiki/Cicero) + + "There is all the difference in the world between treating people equally and attempting to make them equal."
+— [F.A. Hayek](https://en.wikipedia.org/wiki/Friedrich_Hayek) + +"In the absence of any other proof, the thumb alone would convince me of God's existence."
+— [Isaac Newton](https://en.wikipedia.org/wiki/Isaac_Newton) + +
+"Atheism is so senseless. When I look at the solar system, I see the earth at the right distance from the sun to receive the proper amounts of heat and light. This did not happen by chance."
+— [Isaac Newton](https://en.wikipedia.org/wiki/Isaac_Newton) + +Saturn +
+ + "The heavens declare the glory of God; and the firmament sheweth his handywork. Day unto day uttereth speech, and night unto night sheweth knowledge. There is no speech nor language, where their voice is not heard."
+[Psalm 19:1-3](https://christiananswers.net/bible/psa19.html#1) + + "What is the cost of lies? It's not that we'll mistake them for the truth. The real danger is that if we hear enough lies, then we no longer recognize the truth at all. What can we do then? What else is left but to abandon even the hope of truth, and content ourselves instead with stories? In these stories, it doesn't matter who the heroes are. All we want to know is: who is to blame?"
+— [Valery Legasov](https://en.wikipedia.org/wiki/Valery_Legasov), Chernobyl, Miniseries: Open Wide, O Earth + +"The beauty of a living thing is not the atoms that go into it, but the way those atoms are put together." + +Atom clipart + +"Everything is negotiable. Except physics."
+— Rands + +"You can never learn that Christ is all you need, until Christ is all you have."
+– [Corrie Ten Boom](https://en.wikipedia.org/wiki/Corrie_ten_Boom) + +"Tact is the art of making a point without making an enemy."
+— [Isaac Newton](https://en.wikipedia.org/wiki/Isaac_Newton) + +"I can calculate the motion of heavenly bodies, but not the madness of people."
+— [Isaac Newton](https://en.wikipedia.org/wiki/Isaac_Newton) diff --git a/content/blog/rules-to-live-by.md b/content/blog/rules-to-live-by.md new file mode 100644 index 0000000..6842638 --- /dev/null +++ b/content/blog/rules-to-live-by.md @@ -0,0 +1,83 @@ +--- +title: The Rules +subtitle: Rules to live by. +author: Eric Taylor +lang: en +toc: false +enable-response: false +--- + +Ruler Clipart + +- First of all, love the Lord God with your whole heart, your whole soul, and your whole strength. +- Then, love your neighbor as yourself. +- Do not murder. +- Do not commit adultery. +- Do not steal. +- Do not covet. +- Do not bear false witness. +- Honor all people. +- Do not do to another what you would not have done to yourself. +- Deny oneself in order to follow Christ. +- Chastise the body. +- Do not become attached to pleasures. +- Love fasting. +- Relieve the poor. +- Clothe the naked. +- Visit the sick. +- Bury the dead. +- Be a help in times of trouble. +- Console the sorrowing. +- Be a stranger to the world's ways. +- Prefer nothing more than the love of Christ. +- Do not give way to anger. +- Do not nurse a grudge. +- Do not entertain deceit in your heart. +- Do not give a false peace. +- Do not forsake charity. +- Do not swear, for fear of perjuring yourself. +- Utter only truth from heart and mouth. +- Do not return evil for evil. +- Do no wrong to anyone, and bear patiently wrongs done to yourself. +- Love your enemies. +- Do not curse those who curse you, but rather bless them. +- Bear persecution for justice's sake. +- Be not proud. +- Be not addicted to wine. +- Be not a great eater. +- Be not drowsy. +- Be not lazy. +- Be not a grumbler. +- Be not a detractor. +- Put your hope in God. +- Attribute to God, and not to self, whatever good you see in yourself. +- Recognize always that evil is your own doing, and to impute it to yourself. +- Fear the Day of Judgment. +- Be in dread of hell. +- Desire eternal life with all the passion of the spirit. +- Keep death daily before your eyes. +- Keep constant guard over the actions of your life. +- Know for certain that God sees you everywhere. +- When wrongful thoughts come into your heart, dash them against Christ immediately. +- Disclose wrongful thoughts to your spiritual mentor. +- Guard your tongue against evil and depraved speech. +- Do not love much talking. +- Speak no useless words or words that move to laughter. +- Do not love much or boisterous laughter. +- Listen willingly to holy reading. +- Devote yourself frequently to prayer. +- Daily in your prayers, with tears and sighs, confess your past sins to God, and amend them for the future. +- Fulfill not the desires of the flesh; hate your own will. +- Obey in all things the commands of those whom God has placed in authority over you even though they (which God forbid) should act otherwise, mindful of the Lord's precept, "Do what they say, but not what they do." +- Do not wish to be called holy before one is holy; but first to be holy, that you may be truly so called. +- Fulfill God's commandments daily in your deeds. +- Love chastity. +- Hate no one. +- Be not jealous, nor harbor envy. +- Do not love quarreling. +- Shun arrogance. +- Respect your seniors. +- Love your juniors. +- Pray for your enemies in the love of Christ. +- Make peace with your adversary before the sun sets. +- Never despair of God's mercy. diff --git a/content/blog/the-blessing-of-suffering.md b/content/blog/the-blessing-of-suffering.md new file mode 100644 index 0000000..8e8ffdf --- /dev/null +++ b/content/blog/the-blessing-of-suffering.md @@ -0,0 +1,63 @@ +--- +title: The Blessing of Suffering +subtitle: Finding Joy in Trials for Christ +author: Eric Taylor +lang: en +toc: true +enable-response: true +--- + +As Christians, we often talk about blessing, joy, and peace. But what about suffering? Is it possible for suffering to *be* a blessing? The Bible says yes. Today we’ll explore how suffering for Christ isn’t something to fear, but something to *rejoice* in. + +![job-suffering](./../files/img/job-suffering.png) + +## **A Call to Holiness** + + > But as he which hath called you is holy, so be ye holy in all manner of conversation; Because it is written, Be ye holy; for I am holy. [1 Peter 1:15-16](https://christiananswers.net/bible/1pet1.html#15) + +1 Peter 1:15-16, a clear call to holiness: “But as he which hath called you is holy, so be ye holy in all manner of conversation.” God calls us to live differently, to be set apart, and that difference will inevitably attract attention – and sometimes, persecution. + +## **Christian Suffering: Not a Surprise, But an Expectation** + +1 Peter 4:12-14 is a powerful passage that directly addresses the topic of suffering: + +> “Beloved, think it not strange concerning the fiery trial which is to try you, as though some strange thing happened unto you: But rejoice, inasmuch as ye are partakers of Christ's sufferings; that, when his glory shall be revealed, ye may be glad also with exceeding joy. If ye be reproached for the name of Christ, happy are ye; for the spirit of glory and of God resteth upon you…” [1 Peter 4:12-14 KJV](https://christiananswers.net/bible/1pet4.html#12) + +Peter doesn't tell us to *seek* out suffering, but he urges us not to be surprised when it comes. He reminds us that suffering is *normal* for those who follow Christ. We will look different to the world around us, and that difference will attract opposition. In fact, it’s a better sign to be persecuted than to blend in seamlessly! + +## **Our Response to Christian Suffering** + +How should we respond when suffering comes? There are two paths we can take: + +### **Negative Response: Don't Be Afraid** + +Peter starts by telling us *not* to be surprised (v. 12). This isn't a random event; it’s part of God’s plan and a test of our faith. All believers will experience persecution, and sometimes, hatred. + +### **Positive Response: Rejoice!** + +This might sound counterintuitive, but rejoicing in suffering isn't about enjoying the pain. It's about finding joy in the fact that God is working *in* us and *through* us, even in the midst of difficulty. It’s about recognizing that we are partakers of Christ’s sufferings and that His glory will be revealed. + +## **Fiery Trials: Refining Our Faith** + +
+Slag Pot +

Just as a furnace refines precious metals, suffering purifies our faith. The slag , the impurities, get scraped away, leaving behind a stronger, more refined believer. Think of the parable of the soils (Matthew 13). Only the seed that falls on good soil, often after facing hardship, will produce a harvest. +

+
+ + +[Malachi 3:2-3](https://christiananswers.net/bible/mal3.html#2) beautifully illustrates this: “For he is like a refiner's fire, and like fullers' soap: And he shall sit as a refiner and purifier of silver: and he shall purify the sons of Levi, and purge them as gold and silver, that they may offer unto the Lord an offering in righteousness.” + +## **Why Rejoice?** + +* **Proof of Belonging:** Suffering demonstrates that we truly belong to Him. +* **Genuine Faith:** When endured, our faith is proven genuine. +* **Future Glory:** We rejoice knowing that when His glory is revealed, we will share in that joy. +* **Exaltation:** This isn’t just happiness; it’s a joyous leaping for joy! + +### **Another Reason for Rejoicing: Bearing His Name** + +We rejoice because we bear His name. The Holy Spirit rests upon us, providing peace that surpasses understanding. All the fruit of the Spirit: love, joy, peace, patience, kindness, goodness, faithfulness, gentleness, and self-control are available to us to use in order to help us endure. Think of Stephen, who faced martyrdom with grace and forgiveness. + +Don't be surprised if persecution doesn't happen. If you're blending in perfectly with the world, you might be missing out on the blessing of sharing in Christ’s sufferings. + diff --git a/content/blog/trading-everything-for-christ.md b/content/blog/trading-everything-for-christ.md new file mode 100644 index 0000000..aa7d872 --- /dev/null +++ b/content/blog/trading-everything-for-christ.md @@ -0,0 +1,64 @@ +--- +title: Trading Everything for Christ +subtitle: A Race Worth Running +author: Eric Taylor +lang: en +toc: true +enable-response: true +--- + +> But what things were gain to me, those I counted loss for Christ. Yea doubtless, and I count all things but loss for the excellency of the knowledge of Christ Jesus my Lord: for whom I have suffered the loss of all things, and do count them but dung, that I may win Christ, And be found in him, not having mine own righteousness, which is of the law, but that which is through the faith of Christ, the righteousness which is of God by faith: That I may know him, and the power of his resurrection, and the fellowship of his sufferings, being made conformable unto his death; If by any means I might attain unto the resurrection of the dead. Not as though I had already attained, either were already perfect: but I follow after, if that I may apprehend that for which also I am apprehended of Christ Jesus. Brethren, I count not myself to have apprehended: but this one thing I do, forgetting those things which are behind, and reaching forth unto those things which are before, I press toward the mark for the prize of the high calling of God in Christ Jesus. Let us therefore, as many as be perfect, be thus minded: and if in any thing ye be otherwise minded, God shall reveal even this unto you. +[Philippians 3:7‭-‬15 KJV](https://christiananswers.net/bible/phil3.html#7) + +Philippians 3 paints a powerful picture of a life completely surrendered to Christ. Paul, once a highly respected Pharisee, considered everything he had achieved – his lineage, his religious zeal, his status – as utterly worthless compared to knowing Christ. This isn’t a dismissal of good works, but a radical reordering of priorities. It begs the question: what do *we* consider gain, and are we willing to count it all as loss for the sake of Christ? + +## **Acknowledging We Haven't Arrived** + +Paul doesn't present himself as having *arrived* at perfection. In fact, he explicitly states in verse 12, “Not as though I had already attained, either were already perfect…” This is a humbling truth for any believer. We often fall into the trap of comparing ourselves to others or dwelling on past successes, forgetting that our standard is a *perfect* God. + +Think about it – the more we learn about Christ, the more we realize how far we still have to go. It's like John 15:8, where Jesus tells his disciples they will bear *more* fruit when they truly abide in Him. Everything we’ve done, all the “good” we've accomplished, pales in comparison to the surpassing greatness of knowing Christ. It’s not about earning salvation, but about recognizing that *everything* is a gift earned by Him. + +## **Continue Striving Toward the Goal** + +If we haven’t arrived, what do we do? We *press on*. Paul uses vivid language – “I follow after…forgetting those things which are behind, and reaching forth unto those things which are before.” (Philippians 3:13-14) He wasn’t casually strolling; he was *running* a race, fiercely pursuing a prize. + +This pursuit isn’t about willpower or self-improvement. It’s about responding to the fact that Christ *laid hold* of us, and now we make Him the relentless pursuit of our lives. He saved us for a purpose, and that purpose fuels our growth and conformity to His image (1 Timothy 2:11). + +## **What Distracts Us From the Race?** + +The challenge is, the race is littered with distractions. We’re tempted to look back: + +* **Past Failures and Sins:** Dwelling on what we've done wrong can paralyze us. +* **Past Regrets:** “What ifs” steal our joy and focus. +* **Past Successes:** We can become complacent, resting on former glories. + +Remember the proverb: "If you chase two rabbits, you will not catch either.” We must fix our eyes on the prize and resist the urge to look backward. + +Hebrews 12:1-2 beautifully illustrates this: "…let us run with patience the race that is set before us, looking unto Jesus..." It’s a challenging race, full of trials and hardships, but the reward is infinitely worth it. + +> Wherefore seeing we also are compassed about with so great a cloud of witnesses, let us lay aside every weight, and the sin which doth so easily beset us, and let us run with patience the race that is set before us, Looking unto Jesus the author and finisher of our faith; who for the joy that was set before him endured the cross, despising the shame, and is set down at the right hand of the throne of God. [Hebrews 12:1‭-‬2 KJV](https://christiananswers.net/bible/heb12.html#1) + +## **Christ: The Ultimate Prize** + +What *is* the prize? It’s not simply heaven, although that is a glorious promise. It’s Christ Himself. Paul longed to *behold* Him, to *be like* Him, to *know* Him (1 Timothy 4:7). + +Ephesians 4:12-13 speaks of believers maturing to "the measure of the stature of the fullness of Christ." We aren't called to simply *walk* toward the prize, but to *run* with all our strength! + +## **Following Heavenly Examples** + +Paul encourages those who are “perfect” (mature) to be “thus minded” and calls on God to reveal even further truth to those who disagree (Philippians 3:15). This highlights the importance of godly leadership and following the example of those who are further along in their faith. + +It's a powerful reminder that life *is* a race, and Christ is the prize. God will redirect us if our eyes wander, keeping us aligned with His purpose. We don't need to add our own works or follow false teachings – His Word is complete. + +## **Are *You* Running?** + +![runner-running-on-track](./../files/img/runner-running-on-track.png) + + + +Are you truly running this race? It requires a radical reordering of priorities. You can't run if you don't treasure Christ above all else. He demands perfection, not as a standard to *achieve* for salvation, but as a goal to *pursue* in gratitude for it. + +What changes need to be made in your life so you can run faster, with greater focus and unwavering devotion? + +**Life is a race Christ is the prize.** + diff --git a/content/files/css/index.css b/content/files/css/index.css new file mode 100644 index 0000000..3cb168e --- /dev/null +++ b/content/files/css/index.css @@ -0,0 +1,822 @@ +/* ========================================================================== + Fonts + ========================================================================== */ + +@import url('https://fonts.cdnfonts.com/css/jetbrains-mono-2'); + +/* ========================================================================== + Berkeley Mono™ + © Copyright 2025, U.S. Graphics, LLC. + Licensed under SKU LT-02 to Eric Taylor (Taylor IT Solutions LLC) + https://usgraphics.com/products/berkeley-mono + ========================================================================== */ + +@font-face { + font-family: 'Berkeley Mono'; + src: url('http://erictaylor.me/files/font/BerkeleyMono-Regular.woff2') format('woff2'), + url('http://erictaylor.me/files/font/BerkeleyMono-Regular.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Berkeley Mono'; + src: url('http://erictaylor.me/files/font/BerkeleyMono-Bold.woff2') format('woff2'), + url('http://erictaylor.me/files/font/BerkeleyMono-Bold.woff') format('woff'); + font-weight: bold; + font-style: normal; +} + +@font-face { + font-family: 'Berkeley Mono'; + src: url('http://erictaylor.me/files/font/BerkeleyMono-Italic.woff2') format('woff2'), + url('http://erictaylor.me/files/font/BerkeleyMono-Italic.woff') format('woff'); + font-weight: normal; + font-style: italic; +} + +/* ========================================================================== + Base & Variables + ========================================================================== */ + +@font-face { + font-family: 'Berkeley Mono'; + src: url('http://erictaylor.me/files/font/BerkeleyMono-BoldItalic.woff2') format('woff2'), + url('http://erictaylor.me/files/font/BerkeleyMono-BoldItalic.woff') format('woff'); + font-weight: bold; + font-style: italic; +} + +:root { + --font-family: "Berkeley Mono", "JetBrains Mono", "Cascadia Code", "Fira Code", "Source Code Pro", + Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --line-height: 1.20rem; + --border-thickness: 2px; + --text-color: #000; + --text-color-alt: #666; + --background-color: #fff; + --background-color-alt: #eee; + + --font-weight-normal: 500; + --font-weight-medium: 600; + --font-weight-bold: 800; + + font-family: var(--font-family); + font-optical-sizing: auto; + font-weight: var(--font-weight-normal); + font-style: normal; + font-variant-numeric: tabular-nums lining-nums; + font-size: 16px; +} + +@media (prefers-color-scheme: dark) { + :root { + --text-color: #fff; + --text-color-alt: #aaa; + --background-color: #000; + --background-color-alt: #222; + } +} + +[data-theme="dark"] { + --text-color: #fff; + --text-color-alt: #aaa; + --background-color: #000; + --background-color-alt: #222; +} + +[data-theme="light"] { + --text-color: #000; + --text-color-alt: #666; + --background-color: #fff; + --background-color-alt: #eee; +} + +* { + box-sizing: border-box; +} + +*+* { + margin-top: var(--line-height); +} + +.theme-toggle { + cursor: pointer; + display: inline-flex; + align-items: center; + vertical-align: middle; + width: 1.5ch; + height: 1.5ch; + margin: 0 0 0 0; +} + +.theme-toggle svg { + width: 100%; + height: 100%; + fill: var(--text-color); +} + +.theme-toggle:hover svg { + fill: var(--text-color-alt); +} + +/* ========================================================================== + Layout & Grid + ========================================================================== */ + +html { + display: flex; + width: 100%; + margin: 0; + padding: 0; + flex-direction: column; + align-items: center; + background: var(--background-color); + color: var(--text-color); +} + +body { + position: relative; + width: 100%; + margin: 0; + padding: var(--line-height) 2ch; + max-width: calc(min(80ch, round(down, 100%, 1ch))); + line-height: var(--line-height); + overflow-x: hidden; +} + +@media screen and (max-width: 480px) { + :root { + font-size: 14px; + } + + body { + padding: var(--line-height) 1ch; + } +} + +@media print { + .page, .page-break { break-after: page; } +} + +/* Override universal margins for grid */ +.grid { + margin-top: 0; +} + +.grid>* { + margin-top: 0; +} + +/* Fix grid spacing */ +.grid { + --grid-cells: 0; + display: flex; + gap: 1ch; + width: calc(round(down, 100%, (1ch * var(--grid-cells)) - (1ch * var(--grid-cells) - 1))); + margin-bottom: var(--line-height); +} + +.grid>*, +.grid>input { + flex: 0 0 calc(round(down, (100% - (1ch * (var(--grid-cells) - 1))) / var(--grid-cells), 1ch)); +} + +.grid:has(> :last-child:nth-child(1)) { + --grid-cells: 1; +} + +.grid:has(> :last-child:nth-child(2)) { + --grid-cells: 2; +} + +.grid:has(> :last-child:nth-child(3)) { + --grid-cells: 3; +} + +.grid:has(> :last-child:nth-child(4)) { + --grid-cells: 4; +} + +.grid:has(> :last-child:nth-child(5)) { + --grid-cells: 5; +} + +.grid:has(> :last-child:nth-child(6)) { + --grid-cells: 6; +} + +.grid:has(> :last-child:nth-child(7)) { + --grid-cells: 7; +} + +.grid:has(> :last-child:nth-child(8)) { + --grid-cells: 8; +} + +.grid:has(> :last-child:nth-child(9)) { + --grid-cells: 9; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: var(--font-weight-bold); + margin: calc(var(--line-height) * 2) 0 var(--line-height); + line-height: var(--line-height); +} + +h1 { + font-size: 2rem; + line-height: calc(2 * var(--line-height)); + margin-bottom: calc(var(--line-height) * 2); + text-transform: uppercase; +} + +h2 { + font-size: 1rem; + text-transform: uppercase; +} + +.header-anchor { + opacity: 0; + text-decoration: none; + margin-left: 1ch; + font-weight: normal; +} + +h1:hover .header-anchor, +h2:hover .header-anchor, +h3:hover .header-anchor, +h4:hover .header-anchor, +h5:hover .header-anchor, +h6:hover .header-anchor { + opacity: 1; +} + +hr { + position: relative; + display: block; + height: var(--line-height); + margin: calc(var(--line-height) * 1.5) 0; + border: none; + color: var(--text-color); +} + +hr:after { + display: block; + content: ""; + position: absolute; + top: calc(var(--line-height) / 2 - var(--border-thickness)); + left: 0; + width: 100%; + border-top: calc(var(--border-thickness) * 3) double var(--text-color); + height: 0; +} + +hr.thin { + position: relative; + height: var(--line-height); + margin: var(--line-height) 0; +} + +hr.thin:after { + display: block; + content: ""; + position: absolute; + top: calc(var(--line-height) / 2); + left: 0; + width: 100%; + border-top: var(--border-thickness) solid var(--text-color-alt); + height: 0; +} + +p { + word-break: break-word; + word-wrap: break-word; + hyphens: auto; + margin-bottom: var(--line-height); +} + +strong { + font-weight: var(--font-weight-bold); +} + +em { + font-style: italic; +} + +a { + text-decoration-thickness: var(--border-thickness); +} + +a:link, +a:visited { + color: var(--text-color); +} + +sub { + position: relative; + display: inline-block; + margin: 0; + vertical-align: sub; + line-height: 0; + width: calc(1ch / 0.75); + font-size: .75rem; +} + +/* ========================================================================== + Components + ========================================================================== */ + + +/* Tables */ +table { + position: relative; + top: calc(var(--line-height) / 2); + width: calc(round(down, 100%, 1ch)); + border-collapse: collapse; + margin: 0 0 calc(var(--line-height) * 2); +} + +th, +td { + border: var(--border-thickness) solid var(--text-color); + padding: + calc((var(--line-height) / 2)) calc(1ch - var(--border-thickness) / 2) calc((var(--line-height) / 2) - (var(--border-thickness))); + line-height: var(--line-height); + vertical-align: top; + text-align: left; +} + +table tbody tr:first-child>* { + padding-top: calc((var(--line-height) / 2) - var(--border-thickness)); +} + +th { + font-weight: var(--font-weight-bold); +} + +/* Forms */ +input, +button, +textarea { + border: var(--border-thickness) solid var(--text-color); + padding: calc(var(--line-height) / 2 - var(--border-thickness)) calc(1ch - var(--border-thickness)); + margin: 0; + font: inherit; + font-weight: inherit; + height: calc(var(--line-height) * 2); + width: auto; + overflow: visible; + background: var(--background-color); + color: var(--text-color); + line-height: normal; + -webkit-font-smoothing: inherit; + -moz-osx-font-smoothing: inherit; + -webkit-appearance: none; +} + +input[type=checkbox], +input[type=radio] { + display: inline-grid; + place-content: center; + vertical-align: top; + width: 2ch; + height: var(--line-height); + cursor: pointer; +} + +input[type=checkbox]:checked:before, +input[type=radio]:checked:before { + content: ""; + width: 1ch; + height: calc(var(--line-height) / 2); + background: var(--text-color); +} + +input[type=radio], +input[type=radio]:before { + border-radius: 100%; +} + +button:focus, +input:focus { + --border-thickness: 3px; + outline: none; +} + +input { + width: calc(round(down, 100%, 1ch)); +} + +::placeholder { + color: var(--text-color-alt); + opacity: 1; +} + +::-ms-input-placeholder { + color: var(--text-color-alt); +} + +button::-moz-focus-inner { + padding: 0; + border: 0; +} + +button { + text-transform: uppercase; + font-weight: var(--font-weight-medium); + cursor: pointer; +} + +button:hover { + background: var(--background-color-alt); +} + +button:active { + transform: translate(2px, 2px); +} + +label { + display: block; + width: calc(round(down, 100%, 1ch)); + height: auto; + line-height: var(--line-height); + font-weight: var(--font-weight-medium); + margin: 0; +} + +label input { + width: 100%; +} + +.tree, .tree ul { + position: relative; + padding-left: 0; + list-style-type: none; + line-height: var(--line-height); +} +.tree ul { + margin: 0; +} +.tree ul li { + position: relative; + padding-left: 1.5ch; + margin-left: calc(1.5ch - var(--border-thickness)); + border-left: var(--border-thickness) solid var(--text-color); +} +.tree ul li:before { + position: absolute; + display: block; + top: calc(var(--line-height) / 2); + left: 0; + content: ""; + width: 1ch; + border-bottom: var(--border-thickness) solid var(--text-color); +} +.tree ul li:last-child { + border-left: none; + padding-left: calc(1.5ch + var(--border-thickness)); +} +.tree ul li:last-child:after { + position: absolute; + display: block; + top: 0; + left: 0; + content: ""; + height: calc(var(--line-height) / 2); + border-left: var(--border-thickness) solid var(--text-color); +} + +/* Code Blocks */ +pre { + white-space: pre; + overflow-x: auto; + margin: var(--line-height) 0; + overflow-y: hidden; +} + +pre, +code { + font-family: var(--font-family); +} + +code { + font-weight: var(--font-weight-medium); +} + +code:not(pre code) { + background: var(--background-color-alt); + padding: 0 0.5ch; + border-radius: 2px; + font-size: 0.95em; + white-space: nowrap; +} + +pre code { + display: block; + padding: calc(var(--line-height) / 2) 2ch; + background: var(--background-color-alt); + border-radius: 2px; + overflow-x: auto; + line-height: var(--line-height); + margin: 0; +} + +pre code::-webkit-scrollbar { + height: calc(var(--line-height) / 2); +} + +pre code::-webkit-scrollbar-thumb { + background: var(--text-color-alt); + border-radius: 2px; +} + +pre code::-webkit-scrollbar-track { + background: transparent; +} + +/* Lists */ +ul, +ol { + padding: 0; + margin: 0 0 var(--line-height); +} + +ul { + list-style-type: square; + padding: 0 0 0 2ch; +} + +ol { + list-style-type: none; + counter-reset: item; + padding: 0; +} + +ol ul, +ol ol, +ul ol, +ul ul { + padding: 0 0 0 3ch; + margin: 0; +} + +ol li:before { + content: counters(item, ".") ". "; + counter-increment: item; + font-weight: var(--font-weight-medium); +} + +li { + margin: 0; + padding: 0; +} + +li::marker { + line-height: 0; +} + +/* Blockquotes */ +blockquote { + margin: var(--line-height) 3ch; + padding-left: 2ch; + border-left: var(--border-thickness) solid var(--text-color); + color: var(--text-color-alt); +} + +blockquote p { + margin: 0; +} + +blockquote+blockquote { + margin-top: 0; +} + +/* Details */ +details { + border: var(--border-thickness) solid var(--text-color); + padding: calc(var(--line-height) - var(--border-thickness)) 1ch; + margin-bottom: var(--line-height); +} + +summary { + font-weight: var(--font-weight-medium); + cursor: pointer; +} + +details[open] summary { + margin-bottom: var(--line-height); +} + +details ::marker { + display: inline-block; + content: '▶'; + margin: 0; +} + +details[open] ::marker { + content: '▼'; +} + +details :last-child { + margin-bottom: 0; +} + +/* Media */ +img, +video { + display: block; + width: 100%; + object-fit: contain; + overflow: hidden; +} + +img { + font-style: italic; + color: var(--text-color-alt); +} + +figure { + margin: calc(var(--line-height) * 2) 3ch; + overflow-x: auto; + overflow-y: hidden; +} + +figcaption { + display: block; + font-style: italic; + margin-top: var(--line-height); +} + +/* ========================================================================== + Utilities + ========================================================================== */ + +.width-min { + width: 0%; +} + +.width-auto { + width: 100%; +} + +.header { + margin-bottom: calc(var(--line-height) * 2); +} + +.header h1 { + margin: 0; +} + +.header tr td:last-child { + text-align: right; +} + + +/* ========================================================================== + Debug + ========================================================================== */ + +.debug .debug-grid { + --color: color-mix(in srgb, var(--text-color) 10%, var(--background-color) 90%); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1; + background-image: + repeating-linear-gradient(var(--color) 0 1px, transparent 1px 100%), + repeating-linear-gradient(90deg, var(--color) 0 1px, transparent 1px 100%); + background-size: 1ch var(--line-height); + margin: 0; +} + +.debug .off-grid { + background: rgba(255, 0, 0, 0.1); +} + +.debug-toggle-label { + text-align: right; +} + + +/* ========================================================================== + Miscellaneous + ========================================================================== */ + +/* Product Cards */ +.product-card { + display: flex; + flex-direction: column; +} + +.product-card > *:not(nav) { + flex: 1 0 auto; +} + +.product-card nav { + display: flex; + gap: 1ch; + align-items: stretch; + margin-top: auto; +} + +.product-card nav a { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: calc(var(--line-height) / 4) 0; + background: var(--background-color-alt); + text-decoration: none; + min-height: calc(var(--line-height) * 1.5); + margin-top: 0; +} + +.product-card nav a:hover { + background: var(--text-color); + color: var(--background-color); +} + +.product-card { + border: var(--border-thickness) solid var(--text-color); + padding: calc(var(--line-height) - var(--border-thickness)) 1ch; + width: 100%; + margin-top: var(--line-height); +} + +.product-card img, .product-card video { + margin: 0 -1ch; + width: calc(100% + 2ch); + max-height: calc(var(--line-height) * 8); + object-fit: cover; +} + +.product-card h3 { + margin-top: var(--line-height); + margin-bottom: 0; + font-weight: var(--font-weight-bold); +} + +.product-card p { + color: var(--text-color-alt); + margin-bottom: var(--line-height); +} + +.product-card table { + font-size: 0.9em; + margin-bottom: var(--line-height); +} + +/* Override the universal margin for nav elements and their children */ +nav, +nav + *, +nav > *, +nav > * + * { + margin-top: 0; +} + +/* Also override for nav when it's inside a product-card */ +.product-card nav { + margin-top: auto; /* This pushes the nav to the bottom while removing the default margin */ +} + +/* Ensure nav children (links/buttons) don't have top margin */ +.product-card nav > * { + margin-top: 0; +} + + +/* Transformations */ +.rotate-90 { + transform: rotate(90deg); + transform-origin: center center; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +/* theme-aware images */ +.theme-aware-image { + filter: none; +} + +[data-theme="dark"] .theme-aware-image:not(.no-invert) { + filter: invert(1) hue-rotate(180deg); +} + +/* Optional: Add specific adjustments for certain images if needed */ +[data-theme="dark"] .theme-aware-image.adjust-contrast { + filter: invert(1) hue-rotate(180deg) contrast(0.8); +} diff --git a/content/files/css/reset.css b/content/files/css/reset.css new file mode 100644 index 0000000..aabd759 --- /dev/null +++ b/content/files/css/reset.css @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + /*margin: 0;*/ + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/content/files/eric-taylor.asc b/content/files/eric-taylor.asc new file mode 100644 index 0000000..6d05dfc --- /dev/null +++ b/content/files/eric-taylor.asc @@ -0,0 +1,13 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEYPuwoBYJKwYBBAHaRw8BAQdA0o4SMwujFo4me0pY/KZwsl8OapGixHt7JeSk +q3EY6bK0EzxlcmljQHRheWxvcnMubGlmZT6IiwQQFggAMwIZAQUCYPuwoAIbAwQL +CQgHBhUICQoLAgMWAgEWIQSOLnHXzCf2q8YL9YDnB41H4BDimAAKCRDnB41H4BDi +mKGKAQCB7x/JKdvB86WYXSHllbPHe8F9BythI7kCsfSctX5JOAEAuYLXle9eVq0T +7pzroQio0UxSd3nMbwNpn6lsjXBQfA+4OARg+7CgEgorBgEEAZdVAQUBAQdAJtEu +vle4g4RvUz8hVKGccuxe4yDN7s33mFehysaK0DYDAQgHiHgEGBYIACAFAmD7sKAC +GwwWIQSOLnHXzCf2q8YL9YDnB41H4BDimAAKCRDnB41H4BDimALWAPsFBaBRyXL+ +Ezrx3gUOJWyNFyDBPaW5tL6FqZdwY3ORCQD6Ajww2CwOUIFlbB6JJImc/TLe5GA6 +VgO+I+9vbeMEmwE= +=RgtN +-----END PGP PUBLIC KEY BLOCK----- diff --git a/content/files/img/1_atom.png b/content/files/img/1_atom.png new file mode 100644 index 0000000..8ac7dfd Binary files /dev/null and b/content/files/img/1_atom.png differ diff --git a/content/files/img/1_clipart.png b/content/files/img/1_clipart.png new file mode 100644 index 0000000..85877db Binary files /dev/null and b/content/files/img/1_clipart.png differ diff --git a/content/files/img/1_saturn.png b/content/files/img/1_saturn.png new file mode 100644 index 0000000..1a8ca30 Binary files /dev/null and b/content/files/img/1_saturn.png differ diff --git a/content/files/img/1bit_pc_setup_back_in_the_90s_by_r2dj78_dez6o8k-pre.jpg b/content/files/img/1bit_pc_setup_back_in_the_90s_by_r2dj78_dez6o8k-pre.jpg new file mode 100644 index 0000000..0fd9fc7 Binary files /dev/null and b/content/files/img/1bit_pc_setup_back_in_the_90s_by_r2dj78_dez6o8k-pre.jpg differ diff --git a/content/files/img/2_macintosh.png b/content/files/img/2_macintosh.png new file mode 100644 index 0000000..b1a87c6 Binary files /dev/null and b/content/files/img/2_macintosh.png differ diff --git a/content/files/img/2_mail_compose.png b/content/files/img/2_mail_compose.png new file mode 100644 index 0000000..1d825ed Binary files /dev/null and b/content/files/img/2_mail_compose.png differ diff --git a/content/files/img/2_small_speech.png b/content/files/img/2_small_speech.png new file mode 100644 index 0000000..1add65a Binary files /dev/null and b/content/files/img/2_small_speech.png differ diff --git a/content/files/img/3_compact.png b/content/files/img/3_compact.png new file mode 100644 index 0000000..3466c61 Binary files /dev/null and b/content/files/img/3_compact.png differ diff --git a/content/files/img/4_clockman.png b/content/files/img/4_clockman.png new file mode 100644 index 0000000..f6df190 Binary files /dev/null and b/content/files/img/4_clockman.png differ diff --git a/content/files/img/4_shoe.png b/content/files/img/4_shoe.png new file mode 100644 index 0000000..55500db Binary files /dev/null and b/content/files/img/4_shoe.png differ diff --git a/content/files/img/5_globe.png b/content/files/img/5_globe.png new file mode 100644 index 0000000..ff761e3 Binary files /dev/null and b/content/files/img/5_globe.png differ diff --git a/content/files/img/5_ruler.png b/content/files/img/5_ruler.png new file mode 100644 index 0000000..eddb929 Binary files /dev/null and b/content/files/img/5_ruler.png differ diff --git a/content/files/img/apple-touch-icon.png b/content/files/img/apple-touch-icon.png new file mode 100644 index 0000000..ecbc1d0 Binary files /dev/null and b/content/files/img/apple-touch-icon.png differ diff --git a/content/files/img/eric-jaime.gif b/content/files/img/eric-jaime.gif new file mode 100644 index 0000000..6ff7b16 Binary files /dev/null and b/content/files/img/eric-jaime.gif differ diff --git a/content/files/img/favicon-96x96.png b/content/files/img/favicon-96x96.png new file mode 100644 index 0000000..0cb9d1e Binary files /dev/null and b/content/files/img/favicon-96x96.png differ diff --git a/content/files/img/favicon.ico b/content/files/img/favicon.ico new file mode 100644 index 0000000..f86985e Binary files /dev/null and b/content/files/img/favicon.ico differ diff --git a/content/files/img/favicon.svg b/content/files/img/favicon.svg new file mode 100644 index 0000000..8cdf5df --- /dev/null +++ b/content/files/img/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/content/files/img/job-suffering.png b/content/files/img/job-suffering.png new file mode 100644 index 0000000..1c01c6b Binary files /dev/null and b/content/files/img/job-suffering.png differ diff --git a/content/files/img/mail-message-new.svg b/content/files/img/mail-message-new.svg new file mode 100644 index 0000000..da7fc91 --- /dev/null +++ b/content/files/img/mail-message-new.svg @@ -0,0 +1,65 @@ + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/content/files/img/mail-unread.svg b/content/files/img/mail-unread.svg new file mode 100644 index 0000000..12a1c4c --- /dev/null +++ b/content/files/img/mail-unread.svg @@ -0,0 +1,69 @@ + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/content/files/img/mitch_murder_section_6_fanart_by_r2dj78_dfr5tyh-fullview.png b/content/files/img/mitch_murder_section_6_fanart_by_r2dj78_dfr5tyh-fullview.png new file mode 100644 index 0000000..7150276 Binary files /dev/null and b/content/files/img/mitch_murder_section_6_fanart_by_r2dj78_dfr5tyh-fullview.png differ diff --git a/content/files/img/portrait.gif b/content/files/img/portrait.gif new file mode 100644 index 0000000..77c3a0a Binary files /dev/null and b/content/files/img/portrait.gif differ diff --git a/content/files/img/runner-running-on-track.png b/content/files/img/runner-running-on-track.png new file mode 100644 index 0000000..e9e4498 Binary files /dev/null and b/content/files/img/runner-running-on-track.png differ diff --git a/content/files/img/sig/kitsune-sig.gif b/content/files/img/sig/kitsune-sig.gif new file mode 100644 index 0000000..c7f7af5 Binary files /dev/null and b/content/files/img/sig/kitsune-sig.gif differ diff --git a/content/files/img/sig/sig0003.gif b/content/files/img/sig/sig0003.gif new file mode 100644 index 0000000..f86606a Binary files /dev/null and b/content/files/img/sig/sig0003.gif differ diff --git a/content/files/img/site.webmanifest b/content/files/img/site.webmanifest new file mode 100644 index 0000000..195b636 --- /dev/null +++ b/content/files/img/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "EricTaylor.Me", + "short_name": "ET", + "icons": [ + { + "src": "http://erictaylor.me/files/img/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "http://erictaylor.me/files/img/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#000", + "display": "standalone" +} diff --git a/content/files/img/slag-pot.png b/content/files/img/slag-pot.png new file mode 100644 index 0000000..9807343 Binary files /dev/null and b/content/files/img/slag-pot.png differ diff --git a/content/files/img/sun_ultra98_01.jpg b/content/files/img/sun_ultra98_01.jpg new file mode 100644 index 0000000..c9b3f02 Binary files /dev/null and b/content/files/img/sun_ultra98_01.jpg differ diff --git a/content/files/img/sun_ultra98_01_thumb.png b/content/files/img/sun_ultra98_01_thumb.png new file mode 100644 index 0000000..5be83aa Binary files /dev/null and b/content/files/img/sun_ultra98_01_thumb.png differ diff --git a/content/files/img/sun_ultra98_02.jpg b/content/files/img/sun_ultra98_02.jpg new file mode 100644 index 0000000..a0afcfd Binary files /dev/null and b/content/files/img/sun_ultra98_02.jpg differ diff --git a/content/files/img/sun_ultra98_02_thumb.png b/content/files/img/sun_ultra98_02_thumb.png new file mode 100644 index 0000000..e4e7f25 Binary files /dev/null and b/content/files/img/sun_ultra98_02_thumb.png differ diff --git a/content/files/img/sun_ultra98_03.jpg b/content/files/img/sun_ultra98_03.jpg new file mode 100644 index 0000000..0606658 Binary files /dev/null and b/content/files/img/sun_ultra98_03.jpg differ diff --git a/content/files/img/sun_ultra98_03_thumb.png b/content/files/img/sun_ultra98_03_thumb.png new file mode 100644 index 0000000..255f3c8 Binary files /dev/null and b/content/files/img/sun_ultra98_03_thumb.png differ diff --git a/content/files/img/sun_ultra98_04.jpg b/content/files/img/sun_ultra98_04.jpg new file mode 100644 index 0000000..d598491 Binary files /dev/null and b/content/files/img/sun_ultra98_04.jpg differ diff --git a/content/files/img/sun_ultra98_04_thumb.png b/content/files/img/sun_ultra98_04_thumb.png new file mode 100644 index 0000000..a5e7362 Binary files /dev/null and b/content/files/img/sun_ultra98_04_thumb.png differ diff --git a/content/files/img/sun_ultra98_05.png b/content/files/img/sun_ultra98_05.png new file mode 100644 index 0000000..8f86158 Binary files /dev/null and b/content/files/img/sun_ultra98_05.png differ diff --git a/content/files/img/sun_ultra98_05_thumb.png b/content/files/img/sun_ultra98_05_thumb.png new file mode 100644 index 0000000..be89698 Binary files /dev/null and b/content/files/img/sun_ultra98_05_thumb.png differ diff --git a/content/files/img/sun_ultra98_06.png b/content/files/img/sun_ultra98_06.png new file mode 100644 index 0000000..e0f10f9 Binary files /dev/null and b/content/files/img/sun_ultra98_06.png differ diff --git a/content/files/img/sun_ultra98_06_thumb.png b/content/files/img/sun_ultra98_06_thumb.png new file mode 100644 index 0000000..2b06b69 Binary files /dev/null and b/content/files/img/sun_ultra98_06_thumb.png differ diff --git a/content/files/img/sun_ultra98_07.jpg b/content/files/img/sun_ultra98_07.jpg new file mode 100644 index 0000000..dc54d96 Binary files /dev/null and b/content/files/img/sun_ultra98_07.jpg differ diff --git a/content/files/img/sun_ultra98_07_thumb.png b/content/files/img/sun_ultra98_07_thumb.png new file mode 100644 index 0000000..124c59e Binary files /dev/null and b/content/files/img/sun_ultra98_07_thumb.png differ diff --git a/content/files/img/sun_ultra98_08.jpg b/content/files/img/sun_ultra98_08.jpg new file mode 100644 index 0000000..2cbd4aa Binary files /dev/null and b/content/files/img/sun_ultra98_08.jpg differ diff --git a/content/files/img/sun_ultra98_08_thumb.png b/content/files/img/sun_ultra98_08_thumb.png new file mode 100644 index 0000000..a538d91 Binary files /dev/null and b/content/files/img/sun_ultra98_08_thumb.png differ diff --git a/content/files/img/sun_ultra98_09.jpg b/content/files/img/sun_ultra98_09.jpg new file mode 100644 index 0000000..3471ac4 Binary files /dev/null and b/content/files/img/sun_ultra98_09.jpg differ diff --git a/content/files/img/sun_ultra98_09_thumb.png b/content/files/img/sun_ultra98_09_thumb.png new file mode 100644 index 0000000..559b171 Binary files /dev/null and b/content/files/img/sun_ultra98_09_thumb.png differ diff --git a/content/files/img/sun_ultra98_10.jpg b/content/files/img/sun_ultra98_10.jpg new file mode 100644 index 0000000..c198c01 Binary files /dev/null and b/content/files/img/sun_ultra98_10.jpg differ diff --git a/content/files/img/sun_ultra98_10_thumb.png b/content/files/img/sun_ultra98_10_thumb.png new file mode 100644 index 0000000..279b168 Binary files /dev/null and b/content/files/img/sun_ultra98_10_thumb.png differ diff --git a/content/files/img/unshakeable-joy.png b/content/files/img/unshakeable-joy.png new file mode 100644 index 0000000..15f19d8 Binary files /dev/null and b/content/files/img/unshakeable-joy.png differ diff --git a/content/files/img/web-app-manifest-192x192.png b/content/files/img/web-app-manifest-192x192.png new file mode 100644 index 0000000..9314c1c Binary files /dev/null and b/content/files/img/web-app-manifest-192x192.png differ diff --git a/content/files/img/web-app-manifest-512x512.png b/content/files/img/web-app-manifest-512x512.png new file mode 100644 index 0000000..31a11b7 Binary files /dev/null and b/content/files/img/web-app-manifest-512x512.png differ diff --git a/content/files/js/index.js b/content/files/js/index.js new file mode 100644 index 0000000..4379fc2 --- /dev/null +++ b/content/files/js/index.js @@ -0,0 +1,120 @@ +function gridCellDimensions() { + const element = document.createElement("div"); + element.style.position = "fixed"; + element.style.height = "var(--line-height)"; + element.style.width = "1ch"; + document.body.appendChild(element); + const rect = element.getBoundingClientRect(); + document.body.removeChild(element); + return { width: rect.width, height: rect.height }; +} + +// Add padding to each media to maintain grid. +function adjustMediaPadding() { + const cell = gridCellDimensions(); + + function setHeightFromRatio(media, ratio) { + const rect = media.getBoundingClientRect(); + const realHeight = rect.width / ratio; + const diff = cell.height - (realHeight % cell.height); + media.style.setProperty("padding-bottom", `${diff}px`); + } + + function setFallbackHeight(media) { + const rect = media.getBoundingClientRect(); + const height = Math.round((rect.width / 2) / cell.height) * cell.height; + media.style.setProperty("height", `${height}px`); + } + + function onMediaLoaded(media) { + var width, height; + switch (media.tagName) { + case "IMG": + width = media.naturalWidth; + height = media.naturalHeight; + break; + case "VIDEO": + width = media.videoWidth; + height = media.videoHeight; + break; + } + if (width > 0 && height > 0) { + setHeightFromRatio(media, width / height); + } else { + setFallbackHeight(media); + } + } + + const medias = document.querySelectorAll("img, video"); + for (media of medias) { + switch (media.tagName) { + case "IMG": + if (media.complete) { + onMediaLoaded(media); + } else { + media.addEventListener("load", () => onMediaLoaded(media)); + media.addEventListener("error", function() { + setFallbackHeight(media); + }); + } + break; + case "VIDEO": + switch (media.readyState) { + case HTMLMediaElement.HAVE_CURRENT_DATA: + case HTMLMediaElement.HAVE_FUTURE_DATA: + case HTMLMediaElement.HAVE_ENOUGH_DATA: + onMediaLoaded(media); + break; + default: + media.addEventListener("loadeddata", () => onMediaLoaded(media)); + media.addEventListener("error", function() { + setFallbackHeight(media); + }); + break; + } + break; + } + } +} + +adjustMediaPadding(); +window.addEventListener("load", adjustMediaPadding); +window.addEventListener("resize", adjustMediaPadding); + +function checkOffsets() { + const ignoredTagNames = new Set([ + "THEAD", + "TBODY", + "TFOOT", + "TR", + "TD", + "TH", + ]); + const cell = gridCellDimensions(); + const elements = document.querySelectorAll("body :not(.debug-grid, .debug-toggle)"); + for (const element of elements) { + if (ignoredTagNames.has(element.tagName)) { + continue; + } + const rect = element.getBoundingClientRect(); + if (rect.width === 0 && rect.height === 0) { + continue; + } + const top = rect.top + window.scrollY; + const left = rect.left + window.scrollX; + const offset = top % (cell.height / 2); + if(offset > 0) { + element.classList.add("off-grid"); + console.error("Incorrect vertical offset for", element, "with remainder", top % cell.height, "when expecting divisible by", cell.height / 2); + } else { + element.classList.remove("off-grid"); + } + } +} + +const debugToggle = document.querySelector(".debug-toggle"); +function onDebugToggle() { + document.body.classList.toggle("debug", debugToggle.checked); +} +debugToggle.addEventListener("change", onDebugToggle); +onDebugToggle(); diff --git a/content/index.md b/content/index.md new file mode 100644 index 0000000..00fc60b --- /dev/null +++ b/content/index.md @@ -0,0 +1,71 @@ +--- +title: EricTaylor.Me +subtitle: My little corner of the web. +author: Eric Taylor +author-url: "https://erictaylor.me" +lang: en +toc-title: Contents +--- + +
+Black and whilte portrait of Eric Taylor dithered in 1bit +
+## Pages +
+[PORTFOLOIO](http://portfolio.erictaylor.me) | +[BLOG](blog/index.html) +
+ +## About + +| Personal Information | | +| ------------------------- | ------------------------------------------------------------ | +| Name | Eric Taylor | +| Occupation | Information Technology Consultant at [Taylor IT Solutions](https://taylorit.solutions/), Farm Manager at [Willow and Lily Farm](https://willowandlilyfarm.com/) | +| Previous
Occupations | Photographer, CNC Programmer, Manufacturing Engineer, Software Engineer, Information Systems Administrator, Graphics Designer, Web Developer | +| Previous
Employers | [Westport Yachts](https://westportyachts.com/), [Ocotillo Lumber](https://ocotillolumberllc.com/), [Freeform Print Marketing Solutions](https://crispimg.com/), Grand View Photography [Faith Church](https://faithchurchaz.org/), [Christian Answers Network](https://christiananswers.net/) | + +## Contact + +| Contact | | +| ------- | ------------------------------------------------------------ | +| Email | eric@taylors.life | +| Chat | [DeltaChat](https://i.delta.chat/#329DD536FC9FD4EDF12823C4CB0D4BE83CEFBA28&a=eric%40taylors.life&n=&i=9betCFV95BH&s=W3cKJjkopPQ) | +| Call | +One . Four Eight Oh . Five Seven Seven . One One Nine One | + + +`curl -sL https://erictaylor.me/files/eric-taylor.asc | gpg --import` + +
+PGP PUBLIC KEY +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mDMEYPuwoBYJKwYBBAHaRw8BAQdA0o4SMwujFo4me0pY/KZwsl8OapGixHt7JeSk +q3EY6bK0EzxlcmljQHRheWxvcnMubGlmZT6IiwQQFggAMwIZAQUCYPuwoAIbAwQL +CQgHBhUICQoLAgMWAgEWIQSOLnHXzCf2q8YL9YDnB41H4BDimAAKCRDnB41H4BDi +mKGKAQCB7x/JKdvB86WYXSHllbPHe8F9BythI7kCsfSctX5JOAEAuYLXle9eVq0T +7pzroQio0UxSd3nMbwNpn6lsjXBQfA+4OARg+7CgEgorBgEEAZdVAQUBAQdAJtEu +vle4g4RvUz8hVKGccuxe4yDN7s33mFehysaK0DYDAQgHiHgEGBYIACAFAmD7sKAC +GwwWIQSOLnHXzCf2q8YL9YDnB41H4BDimAAKCRDnB41H4BDimALWAPsFBaBRyXL+ +Ezrx3gUOJWyNFyDBPaW5tL6FqZdwY3ORCQD6Ajww2CwOUIFlbB6JJImc/TLe5GA6 +VgO+I+9vbeMEmwE= +=RgtN + +-----END PGP PUBLIC KEY BLOCK----- +``` +
+ + +
+ + +## Links + +* [Photography Portfolio](http://portfolio.erictaylor.me) +* [Personal Blog](blog/index.html) +* [Family Blog](https://taylors.life) +* [Taylor IT Solutions](http://taylorit.solutions) +* [Willow and Lily Farm](http://willowandlilyfarm.com) +* [S/V Coconutz](http://svcoconutz.com) + diff --git a/convert.sh b/convert.sh new file mode 100644 index 0000000..8c3fa2e --- /dev/null +++ b/convert.sh @@ -0,0 +1,308 @@ +#!/bin/bash + +# Configuration +VERSION="1.0.1" +SOURCE_DIR="content" +OUTPUT_DIR="public" +TEMPLATE="template.html" +CSS_FILES=( + "files/css/reset.css" + "files/css/index.css" +) + +# Add supported document formats +SUPPORTED_FORMATS=( + "*.md" # Markdown + "*.markdown" + "*.mdx" + "*.org" # Org mode + "*.rst" # reStructuredText + "*.txt" # Plain text + "*.tex" # LaTeX + "*.wiki" # MediaWiki markup + "*.dokuwiki" # DokuWiki markup + "*.textile" # Textile + "*.asciidoc" # AsciiDoc +) + +# Color definitions +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Add after VERSION declaration +PDF_OUTPUT=false + + +# Error handling function +error() { + echo -e "${RED}Error: $1${NC}" >&2 + exit 1 +} + +# Warning function +warning() { + echo -e "${YELLOW}Warning: $1${NC}" >&2 +} + +# Success function +success() { + echo -e "${GREEN}$1${NC}" +} + +# Info function +info() { + [ "$VERBOSE" = true ] && echo -e "${BLUE}$1${NC}" +} + +# Help function +show_help() { + cat << EOF +$(basename "$0") v$VERSION +Convert documents to HTML or PDF using pandoc. + +Usage: $(basename "$0") [OPTIONS] + +Options: + -h, --help Show this help message + -v, --version Show version information + -s, --source DIR Source directory (default: $SOURCE_DIR) + -o, --output DIR Output directory (default: $OUTPUT_DIR) + -t, --template FILE Template file (default: $TEMPLATE) + -l, --list-formats List supported file formats + --verbose Enable verbose output + --clean Remove output directory before starting + --pdf Generate PDF instead of HTML output + +Examples: + $(basename "$0") # Use default settings (HTML output) + $(basename "$0") --pdf # Generate PDF output + $(basename "$0") -s content -o dist # Use custom directories + $(basename "$0") --clean # Clean build + +Supported formats: + ${SUPPORTED_FORMATS[@]/#/ } + +For more information, visit: https://pandoc.org/MANUAL.html +EOF +} + +# Version function +show_version() { + echo "$(basename "$0") version $VERSION" +} + +# List supported formats +list_formats() { + echo "Supported input formats:" + for format in "${SUPPORTED_FORMATS[@]}"; do + echo " $format" + done +} + +# Check if pandoc is installed before continuing +if ! command -v pandoc >/dev/null 2>&1; then + error "Pandoc is required but not installed. Please install pandoc." +fi + +# Function to create CSS arguments array +create_css_args() { + local source_file="$1" + local source_dir="$2" + + # Calculate relative path from the HTML file to the root + local rel_path="${source_file#"$source_dir"/}" + local dir_depth + dir_depth=$(echo "$rel_path" | tr -cd '/' | wc -c) + local path_prefix="" + + # Add "../" for each directory level + for ((i=0; i $target_dir/$dir_path/$output_filename" + return 0 +} + +# Parse command line arguments +VERBOSE=false +CLEAN=false + +while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + show_help + exit 0 + ;; + -v|--version) + show_version + exit 0 + ;; + -s|--source) + SOURCE_DIR="$2" + shift 2 + ;; + -o|--output) + OUTPUT_DIR="$2" + shift 2 + ;; + -t|--template) + TEMPLATE="$2" + shift 2 + ;; + -l|--list-formats) + list_formats + exit 0 + ;; + --verbose) + VERBOSE=true + shift + ;; + --clean) + CLEAN=true + shift + ;; + --pdf) + PDF_OUTPUT=true + shift + ;; + *) + echo "Unknown option: $1" + echo "Use --help for usage information" + exit 1 + ;; + esac +done + +# Add after parsing arguments +if [ "$PDF_OUTPUT" = true ]; then + if ! command -v xelatex >/dev/null 2>&1; then + error "PDF generation requires xelatex. Please install texlive-xelatex package." + fi +fi + +# Create find command pattern for supported formats +FIND_PATTERN=() +for format in "${SUPPORTED_FORMATS[@]}"; do + FIND_PATTERN+=(-o -name "$format") +done +# Remove the first -o since we don't need it for the first pattern +FIND_PATTERN=("${FIND_PATTERN[@]:1}") + +# Update error checks +if [ "$PDF_OUTPUT" = false ] && [ ! -f "$TEMPLATE" ]; then + error "Template file $TEMPLATE not found!" +fi + +if [ ! -d "$SOURCE_DIR" ]; then + error "Source directory $SOURCE_DIR not found!" +fi + +# Clean up old build if requested +if [ "$CLEAN" = true ]; then + echo "Cleaning up old build directory..." + rm -rf "$OUTPUT_DIR" +fi + +# Create output directory +mkdir -p "$OUTPUT_DIR" + +# Copy all files from source directory if it exists +[ "$VERBOSE" = true ] && info "Copying assets..." +if [ -d "$SOURCE_DIR/files" ]; then + cp -r "$SOURCE_DIR/files" "$OUTPUT_DIR/" + info "Copied files directory and its contents" +else + warning "files directory not found in source" +fi + +# Find and process all supported files +[ "$VERBOSE" = true ] && info "Processing files..." +if find "$SOURCE_DIR" -type f \( "${FIND_PATTERN[@]}" \) | while read -r file; do + process_file "$file" "$SOURCE_DIR" "$OUTPUT_DIR" || exit 1 +done; then + # Remove any hidden files (except .htaccess) + find "$OUTPUT_DIR/" -type f -name '.*' ! -name ".htaccess" -delete + success "Conversion complete! Output in $OUTPUT_DIR/" + exit 0 +else + error "Conversion failed!" +fi diff --git a/license b/license new file mode 100644 index 0000000..a1f5e4a --- /dev/null +++ b/license @@ -0,0 +1,19 @@ +Website content Copyright 2024 Eric Taylor + +This is my personal website and blog. All original content including blog posts, articles, and creative works are copyright Eric Taylor unless otherwise noted. + +## License for Website Content +- All original website content (blog posts, articles, creative works) are copyright Eric Taylor +- Some content may be shared under different licenses as noted in individual posts +- Please contact me for permission to republish or redistribute content + +## Site Generator License +This website is built using a static site generator based on the Monospace Web project by Oskar Wickström. The site generator framework is licensed under the MIT license: + +The Monospace Web - Copyright (c) Oskar Wickström + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/notes.md b/notes.md new file mode 100644 index 0000000..65279e6 --- /dev/null +++ b/notes.md @@ -0,0 +1,46 @@ + +# Sizes + +Max Width = 720px +Standard Img Width = 672px + +# Snippets + +## Snippet Image in grid + +
+<++> +

+

+
+ +## Snippet reply by e-mail + + [Reply via E-mail](mailto:eric@taylors.life?subject=<++>) +## Inline Form reply by e-mail + +

Reply to this! (Via Email)

+
+ + + +
+ +
+ +
+ + + +## Header + +--- +title: <++> +subtitle: <++> +author: Eric Taylor +lang: en +toc: true +enable-response: true +--- + +<++> diff --git a/pull-site.sh b/pull-site.sh new file mode 100644 index 0000000..3544103 --- /dev/null +++ b/pull-site.sh @@ -0,0 +1 @@ +rsync -chavzP root@taylors.life:/var/www/erictaylor/ /home/eric/Documents/www/erictaylor.me/public/ diff --git a/push-site.sh b/push-site.sh new file mode 100644 index 0000000..b00ebd6 --- /dev/null +++ b/push-site.sh @@ -0,0 +1 @@ +rsync -chavzP --stats /home/eric/Documents/www/erictaylor.me/public/* root@taylors.life:/var/www/erictaylor/ diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..652d279 --- /dev/null +++ b/readme.txt @@ -0,0 +1,22 @@ +# www.erictaylor.me +Personal Website for Eric Taylor + +This is my personal website built with a simple Pandoc-based static site generator. The site features my blog posts, thoughts, and various projects. + +## Technology Stack +- Built with Pandoc for markdown to HTML conversion +- Static site generation using bash scripts +- Custom CSS styling +- Minimal, fast-loading design + +## Site Structure +- `content/` - All markdown content and static files +- `content/blog/` - Blog posts +- `content/files/` - CSS, JavaScript, images, and other assets + +## Building the Site +1. Install pandoc +2. Run `./convert.sh` to generate the static site +3. Deploy the generated files to your web host + +This site is based on the Monospace Web project by Oskar Wickström, but has been customized and adapted for my personal use. diff --git a/template.html b/template.html new file mode 100644 index 0000000..a07e3e9 --- /dev/null +++ b/template.html @@ -0,0 +1,132 @@ + + + + + + +$for(author-meta)$ + +$endfor$ +$if(date-meta)$ + +$endif$ +$if(keywords)$ + +$endif$ +$if(description-meta)$ + +$endif$ + + + + + + $if(title-prefix)$$title-prefix$ – $endif$$pagetitle$ +$for(css)$ + +$endfor$ +$for(header-includes)$ + $header-includes$ +$endfor$ +$if(math)$ + $math$ +$endif$ + + +$for(include-before)$ +$include-before$ +$endfor$ + + + + + + + + + + +
+

$title$

+ $subtitle$ +
Version$version$
Updated
+$if(abstract)$ +
+
$abstract-title$
+$abstract$ +
+$endif$ +$if(toc)$ + +$endif$ +$body$ +$for(include-after)$ +$include-after$ +$endfor$ +$if(enable-response)$ +

Reply to this! (Via Email)

+
+ + + +
+ +
+ +
+ +$endif$ + + + + + +
+ Home • + Blog • + 爪闩ㄒ尺工乂 • + ©Copyright $year$ • + + + + + +
+ + + + diff --git a/watch-and-run.sh b/watch-and-run.sh new file mode 100644 index 0000000..1d81596 --- /dev/null +++ b/watch-and-run.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Configuration +FILE_TO_WATCH="content/index.md" # Replace with the file you want to monitor +SCRIPT_TO_RUN="convert.sh" # Replace with the script you want to run + +# Check if the files exist +if [ ! -f "$FILE_TO_WATCH" ]; then + echo "Error: File '$FILE_TO_WATCH' not found." + exit 1 +fi + +if [ ! -x "$SCRIPT_TO_RUN" ]; then + echo "Error: Script '$SCRIPT_TO_RUN' is not executable." + exit 1 +fi + +# Use inotifywait to monitor the file for changes +while inotifywait -q -e modify "$FILE_TO_WATCH"; do + echo "File '$FILE_TO_WATCH' has been modified. Running '$SCRIPT_TO_RUN'..." + $SCRIPT_TO_RUN +done