tech/faith: tools for running an in-person conference

Within my church organization, I’ve been asked to help organize and run activities for the youth in our area. The biggest activity is what we call “stake youth conference”, which is basically 3 days with 250 youth, age 14-18. It’s not a small task.

As we approached this year’s youth conference, one of our big challenges is in managing the information for all this. We need information for planning, ordering, assignments, medical, legal, and other needs. Having good information is very helpful, and missing or incorrect information really slows things down. In the last few years, here is how our Stake has managed information for youth conference. We are far from perfect, but perhaps there is something here that could help you. And maybe you can leave a comment that would be helpful for us.

Part of our approach here is to use functionally-effective but cost-effective tools. For much of this, we used products from Google. Part of what I like about the Google Workspace suite (Google Sheets, Docs, Drive, etc), is that each document is hosted online and shared in real-time, instead of needing to email around attachments and having to synchronize edits. The other nice thing about Google Workspace suite is that it versions all the changes, so if somebody deletes a paragraph or cell by accident, it can be recovered via Version History.

Spreadsheets as Databases

Yes, we are using spreadsheets as a database. For the level of info we are tracking and the people involved, this works fine. A couple of the things I was careful about was making sure that the Readers was limited only to the need-to-know, and the Editors was limited only with the need-to-change. For example, the centralized attendance sheet (automatically fed by the attendance form) was editable only by me, and I was just correcting errors.

Initial Planning

This took the form of a Google Sheet. We called it the “master sheet”, as it either held data or pointed to where data was held.

We created a spreadsheet with the following tabs:
• Role Assignments for each member of the leadership committee
• Schedule for the 3 days of conferences
• Registration dashboard
• Expenses (planned and actual)
• Volunteer needs (role and quantity)
• Ward focal points (name, email, phone)
• Class topics / teachers / locations
• Service projects: locations, size, liaison, requirements, waivers
• Meals (time, menu, cost)
• Equipment to bring / set up for each venue (shade tents, watercoolers, etc)
• Packing list for youth (sunscreen, water bottles, etc)

Initial Communication

We created a website with Google Sites. On this website was links to the registration forms, a high-level overview of the activities (no place names or times listed), and the email address of one of the Stake leaders to answer questions. This was all on one page. We also bought a helpful domain name from GoDaddy that would forward to the Google Site so we could give an easy-to-remember pointer to the youth and parents via the ward leaders. Because we have a Spanish branch in our Stake, we used Google Translate to have a 2nd page that was a Spanish translation of the main page, specifically for the parents in that branch (all the youth are English-proficient). We were being careful not to post any personal youth information or specific times+locations on the website, for privacy reasons and to not enable any lurkers to just show up.

Registration

Of course we need to figure out who is planning to attend, and what their characteristics are. The way we chose to do this was with a Google Form. Because the data entered in the form (responses) was pushed into a spreadsheet visible only to the stake leaders (write-only, not readable), we could put the link to the form on our website for the parents to find easily. We did verify that all registrants were actual members.

For the data that we need, we worked to consolidate all of it to a single form. This form was intended to be filled out by parents.

In previous years, we had a separate “Honor Code” form we asked both the youth and their parents to fill out. This year we consolidated down the Honor Code points to a core set, primarily pointing to the FSY booklet, and asked the parents to check the boxes.

Regarding late registration, we didn’t turn anyone away. And yes, there was a good-sized handful of youth that were registering late, even up until the day before conference started. Our intention was that we “want to make room for everyone who wants to attend”, even if it means more work for the leaders. Some were move-ins, some were guests, and some were regular members who simply forgot to register before the publicized deadline. Even though we had a publicized deadline of 6 weeks before the conference, about 1/3 of the final attendee count missed the deadline. The planned registration period ran for 4 weeks.

Guests

Early on our Stake decided to open up attendance to friends of youth. There wasn’t a pre-set limit because we didn’t expect a lot, and we would cover the costs of the guests just like they were a member. We felt that the missionary value was worth it. And we encouraged each ward to have at least one non-member friend to attend. So our registration form had a spot for guests to register. After we received a registration from a guest, we would go back to the ward to find out who the member-friend is, so we could make an effort to pair them together during assigned activities. In 2022, we ended up with 10 non-member guests, and want to see more in the future.

Ward Focal Points & Ward Reports

As we collected registration responses automatically into a Google Sheet from the Google Form, we wanted to share the registrants with the ward leaders so they could (a) see who was missing, and (b) that registrants were eligible (age, ward membership, etc). To help do that, we created a Google Sheet for each ward. But this sheet was not editable by the ward, instead it was a single query formula into the main registration responses that showed only those from their ward, and only selected fields (name, age, etc) that were pertinent to registration. Because it was a query and not a copy of data, this means it was live, so as soon as someone new registered, their ward report spreadsheet would get automatically updated. This saved a lot of emails regarding “can you send me the latest list”.

So then we asked each ward for a focal point to review this ward report of their registrants, and specifically to help chase down the youth/parents that weren’t registered yet but that were eligible and likely to attend. Of course there were some folks on family vacations, summer jobs, etc., but we wanted to make sure every eligible youth had the opportunity. Since the ward leaders know their youth the best, they did well in that role. We created a sheet for each ward that would query just their ward’s youth from the master response sheet. It worked well.

We asked the ward leaders to pick a focal point. The focal point should know the youth in the ward, and have good follow-up skills.

Church Permission Form

Since youth conference is a multi-day event that has more activities (and thus risks) than a usual weekly youth night, we use the church headquarter’s full-page Medical and Permission form, and require one to be filled out for each attending youth.

An artist friend has access to the Adobe Suite, so using the PDF editor there we were able to modify the headquarter’s PDF form to fill in the top section with the activity details, and then save that as a new template. This avoids requiring parents to fill in that common part.

In years past, we’ve shared this modified PDF with parents, asked them to print at home, and then fill it in with a pen and give to their ward leaders, that I can then pick up a hardcopy for each youth. It has been difficult to execute this. At my employer they use a tool named HelloSign for managing online signatures of documents. Since they trust it, and it comes from the same parent company as dropbox.com, we decided to use it. Here’s how it works:

Using the modified PDF mentioned above, it gets loaded into their tool as a template using their web site tool. Then for each field that I want the parent to fill out, using their tool I graphically draw a box around the area of the PDF that would otherwise be written on with a pen. Do this for all the fields, and give each field a name. Then for the signature line, draw a special box around that with their tool. Save this template. Now, for each registrant that I receive a registration form for, I go back into their tool, select the template, type in the name and email address of the parent (which we ask for in our Google form), and then hit the send button. The system will sent a link to the parent’s inbox. When the parent clicks on that link, they will see the template with all the fields on the PDF that they can type in to, to provide the medical information. And they can also draw on the screen of their phone (or similar for a PC) to provide their signature. That all gets captured in a document that gets sent to me. If they don’t do this submission, the parent will get a couple email nag notes. I can also go into the tool and manually send the parent a nag note whenever I want. And the tool shows which parents haven’t responded yet.

This gets the church permission form into a totally online format. No hardcopy collection needed, but the softcopy looks like the hardcopy. I ended up printing each softcopy at home, and putting them into a binder that I could give to our nurse, so that we’d know the medical details in case anyone got hurt or sick.

HelloSign has a 30-day free trial so you can see if it works for you. We used the monthly plan at $20/month, and we kept it active from the opening of registration until the end of the conference.

From what I can tell, there may be an option to automatically pre-fill the document-for-signing to the parent with personalized data, though it may take some extra software and a higher-priced subscription tier, and maybe writing some custom code. If that was the case, then it may be possible for the attendance form to ask for those questions in the Google Form, and then the modified PDF could be pre-filled with all the medical and personal data, and needs to be only e-signed by the parent. That would be the perfect solution, but for now we have the decent solution. This year I ended up reading through all the HelloSign submissions and manually copying-and-pasting the allergies + medical needs back into our centralized attendance sheet. The personalization described above would get us out from doing that as well as making it easier for the parents. Something to investigate for next time.

Third-Party Waivers

A couple of our third-party partners required their own waivers for their venues/activities. One was a ropes course, and the other was for a service project. They had their own system for collecting these waivers. Luckily, they could be filled out online by parents, AND these partners were able to periodically provide the list of all the waivers they had received from our group. This made it pretty easy to determine which waivers were missing, so the ward focal points could go a chase those down.

There was a lot of chasing down. The parents did pretty good on filling out the attendance form, but each additional form we asked for had lower and lower submission rates. So we learned the hard way to minimize the number of forms.

In the centralized attendance response Google Sheet, we added columns to put a simple “Y” for each waiver that the partner confirmed as received. Anything without a “Y” needed to be chased down by the ward focal points.

Volunteer Signups

There were two groups of signups we asked for. One was for food contributions of snack items (i.e., diced fresh fruit), and the other was for ward leaders to attend shifts as helpers/chaperones. We used a SignupGenius for both. Although the ads on SignupGenius can be annoying, we stayed with their free tier of service.

We did not put the links to the SignupGenius on the website, since it listed the times and locations of the conference. These links to the signups were distributed via email to parents and ward leaders.

T-Shirts

We have a tradition of getting a t-shirt for each youth, that has a custom print. For the design, we use the church’s base design, and then add a small customization, such as our stake name and year. Typically a youth is capable of designing that. We’ve established a relationship with a local screen printer who can order the blank shirts (large lead time needed because of supply chain issues) and paint the design on the fabric.

On our attendance form, we ask for the desired t-shirt size. We order a few extra for the Stake Presidency plus late registrants. We ended up paying about $10/shirt.

Special Food Needs

There may be youth with special food needs such as allergies (nuts was a common one) and preferences (vegetarian). I manually copied-and-pasted these non-blank values from the submitted medical forms into our centralized attendance sheet. Then I created another Google sheet that queried for non-empty values to give a count/description to our food helpers.

Given a Google Sheet that serves to collect responses from a Google Form, it is possible to manually append columns on the far right that will co-exist with the cells that are filled in by the form submissions. This is where I put these extra fields: church permission form flag, waiver flag, food needs, medical needs.

Medical Needs

Similar to the special food needs, there was a surprising amount of youth with needs that were both physical (i.e., recently broken bones) and mental (i.e., panic attacks, autism). In reading through these, it became apparent that there are a few youth that would not respond as expected to discipline if needed. I also manually copied-and-pasted these from the submitted medical forms into our centralized attendance sheet.

I also printed all the Church Permission & Medical forms, sorted them by ward, and then sorted each ward by name, and put it in a binder. This we would take with us on activities, so if anyone got hurt, we would be able to quickly look up any allergies or issues.

Name Badges / Lanyards

Each year we’ve had a personalized badge and lanyard for each attendee. It made them feel official, it served as a visual proof of check-in, it included on the back generic schedule information, and the front had not only their name but also their personal assignments for classes and service project.

Avery is the company known for printing badges on the perforated card stock, which you can then tear along the lines and put into a badge holder. I like having the large 4×3 inch format instead of the smaller ID badge size 3×2 inch format. Avery uses 4-digit codes for each of their templates, I like 5392.

To support all that card stock, Avery has a pretty good app for doing a “mail merge” for printing out the personalized data on those cards. It is called “Avery Design & Print”, and from their home page can be accessed via the Templates menu. You’ll want to create an account, since it’s a web-based app and you’ll be able to save your work online using that account.

Basically I created a spreadsheet that had the personalized data fields: firstname, lastname, ward, class names and times, and any other info we wanted. Then you export that as a CSV file. Next, go into the Avery Design & Print web tool and start a new project. Do the “Import Data Mail Merge” to upload your CSV file, then you can add the data fields to a sample card. Then add any static text, graphics, and do any formatting and layout and graphics you want. It even supports text rotation and opacity, in addition to font types and sizes. You can also get a PDF preview of what they all look like, and send it to your printer. It’s a surprisingly good web tool, I recommend it.

The first year I bought the Avery card stock and tried to print this mail merge on my home laser printer, the first couple sheets came out OK, then the following ones had problems with the toner coming off the paper in flakes. What I ended up doing was skipping the Avery perforated card stock and just printing on regular plain white everyday paper. However, this loses the perforations for separating the pieces. To get around that, I found a PDF file from Avery that prints a thin line on the whole sheet that shows where the perforations would normally go. So I print all the mail merge badges once, then stick those papers back in the printer’s input paper tray to print again to get the lines on them. Then I borrowed the guillotine paper cutter from the ward library (the one with the big cutting arm on the edge of a hard slab) and simply cut along the lines. Tada!

To complete the package, I created another Avery Design & Print project using the same 5392 template, but instead of having a bunch of personalized data via the Mail Merge, I just use static data so each card looks exactly the same: this is where we put the schedule and other general information. Do the same double-print to get the lines printed for cutting, and insert this in the badge holder facing the opposite side out, so now the badge holder has a front with the personalized info, and a back with the general info.

Regarding the clear vinyl badge holders, I got these ones from Amazon (250 for $40). For the lanyards, it is possible to get ones custom printed, but I found these ones from Amazon in a generic color that worked fine and were much less expensive (50 for $17 = 250 for $85).

I did feel a bit bad for using Avery’s tools without buying anything from them.

Pre-Conference Communications

So before the conference started, we needed to communicate out to the participants their assignments for the activities when they were split up. Instead of manually sending out 250 emails, since we had the information in spreadsheets, this is what a mail merge would be good for. But not just creating a personalized document that could be saved and printed, but actually emailed. After doing some hunting around I found that OpenOffice could do that. They have a help document that describes how to do it:
Creating Mail Merge Documents From Text/CSV or Spreadsheets. It’s not trivial to set up, but if you can get it working, it is a huge time saver. It creates the email body, and actually sends the email, all in one automated step. So sending to 250 recipients is as easy as sending to 2 recipients. It differs from a regular document-generation only mail-merge in that you also configured your outgoing SMTP server. There are instructions for doing that via Gmail. To the recipient it appears to come from your personal Gmail account.

In-Conference Communications

The challenge here is that when sending communications to the youth, our experience is that the youth don’t look at their email inbox. Sending emails is supported, it’s easy, but most of the youth don’t see it. It’s not uncommon to get an email bounce from a youth saying that their inbox is full. Instead their focus is on social apps and texting. Last year we used Remind to try to send messages to the youth, because it is the app used by our county school system, so the youth are familiar with it and generally have it already installed. However, Remind requires the recipient to manually opt-in, and after repeated requests we got only about half of the youth to join our Remind group. And in the free tier of Remind, outbound messages are limited to 160 characters, and group size is limited to 150 members (we expect ~250 conference attendees). So this year we gave up on Remind, and I went looking for a group-texting system that doesn’t require opt-in.

What I found is Textedly. I tried the free trial, and although it was a bit expensive, it gave us the function I was looking for. The original goal was to both email and send SMS messages to parents and youth each day, describing what was going to happen the next day and what they needed to do to prepare.

In the registration form, we asked for the preferred email address and cell phone number for a parent, and the same for a youth (all the youth had an email address, and almost all had cell numbers). So that gave us our recipient list. With some queries and a little bit of manual effort I was able to get a list of all the email addresses for parents and youth in a single spreadsheet column, and I could copy-and-paste that into my Gmail client, and send a daily email address from my personal Gmail account. (Yes, apparently Gmail will let you send an email to 400+ recipients. The reason I didn’t use the church’s LCR tool for mass emailing is that it doesn’t let us filter out the non-attendees, especially the under-14 youth.) Some additional queries and manual work and I was able to build a separate spreadsheet of our SMS recipients (parents + youth) based on registration data. This sheet included their name, “parent” or “youth” designator, and cell phone number. I was able to upload this sheet as a CSV file to Textedly. Because I had a parent/youth designator on each person, I could select to send a message to all or to just youth or just parents. Sending an outbound message is called a “campaign” in Textedly, probably because most of their customers use it for marketing.

One of things about Textedly is that normally a message (costing 1 credit) is limited to 160 characters. The biggest message you can send is 3×160 characters for 3 credits. However, the nice but somewhat hidden thing is that if you include an image in your message, then it becomes an MMS and you can send a message up to 1600 characters at a cost of 3 credits. I just included a small image of the conference logo, and then was able to include the full information I wanted to send, same full content as went out in the email. 400 recipients at 3 credits for each day’s communication got to be expensive, so I switched to sending text messages only to the youth, but emailed both the youth and parents. When I did that, in the last text to the parents I said “keep an eye on your email inbox”. I ended up spending $56 for a month of service and the message credits included in that tier, and another $20 for additional message credits. All in all, it worked pretty well. It included a STOP handler, and you could see any text replies. They did require our organization name to be at the beginning of the outbound message so it was more clear who it was from, but that ate into our character count. Being able to effectively reach the youth where they are was worthwhile to us. This worked pretty well. Unless I find a better solution, I plan on doing the same next time.

Conclusion

Yup, it’s a boat load of work. And with the right tools it’s still a lot of work. But I can’t imagine how hard it would be without the right tools.

Do you have any suggestions for better ways to do this? If so, please leave a comment!

life: the epic road trip (v2)

Gluttons for punishment, or doing all the fun over again from 9 years ago: I don’t know which. But had another wonderful 3 week road trip this summer.

Stats:

  • duration: 21 consecutive days
  • driving distance: 6890 miles
  • total hours driving: 120
  • average mpg: 25.5
  • gas consumed: 270 gallons (generally around $4.50/gal)

Monuments / Parks / Museums / highlights visited:

  • Big Pencil: Wytheville, VA
  • New River Gorge National Park: Glen Jean, WV
  • Cathedral Falls: Gauley Bridge, WV
  • Sternwheel Regatta (just missed it): Charleston, WV
  • Blenko Glass Factory: Milton, WV
  • Mammoth Cave National Park: KY
  • Moonlite BBQ: Owensboro, KY
  • City Museum: St Louis, MO
  • Badlands National Park: SD
  • Mount Rushmore National Memorial: Keystone, SD
  • Devils Tower National Monument: Sundance, WY
  • Glacier National Park: Kalispell, MT
  • Garden of One Thousand Buddhas: Arlee, MT
  • family reunion: Kamiah, ID
  • Utah Olympic Park: Park City, UT
  • Caputo’s Market and Deli: Salt Lake City, UT
  • Little Wild Horse slot canyon: Green River, UT
  • Goblin Valley State Park: Green River, UT
  • Silverton, CO
  • Georgia O’Keefe Museum: Santa Fe, NM
  • Meow Wolf Museum: Santa Fe, NM
  • Route 66 Midpoint: Adrian, TX
  • Parlor Doughnuts, Nashville TN
New River George
City Museum, St Louis (yes, that is a slide coming out of a dinosaur butt)
Glacier National Park
Little Wild Horse Slot Canyon
Meow Wolf, Santa Fe

faith: perfection and temples

Marcel is a member of the Church of Jesus Christ of Latter-Day Saints. This is an address he gave in a congregation on February 27th, 2022.

Is it reasonable to expect to understand all things about the gospel right now? I don’t think so. We operate a lot on faith, which is less than a perfect knowledge. Even if you don’t understand something, or even don’t like something, do you trust God? Can you really move forward in the darkness with the Lord’s guidance?

The church is led by Christ. But it is administered by people.

In case you didn’t notice, the people in the church are imperfect. This includes your quorum and class members. And your leaders, including us on the stand. And you.

Leaders and members are not the only places where we expect perfection. In what other ways?

  • Temple recommend, keeping commandments
  • Callings: serving and being served
  • Policy (for example, masks and activities during Covid)
  • Body image, job title, house (can’t come to dinner at my house unless spotless), family (We Don’t Talk About Bruno)
  • Marriage
  • Be alike, that we should compare our characteristics and situations to others and find sameness

Yes, we strive to do our best in these areas, but should we really expect perfection? No.

A wise person said that all frustration comes from un-met expectations. Think about when you’ve been frustrated, I bet it was caused by un-met expectations. Frustration leads to anger. Disappointment leads to doubt. We, even in the church, have too much anger and too much doubt.

My favorite BYU Devotional is the one by Brad Wilcox on Grace. Look it up now, and watch it with your family. That is your assignment for today. Go to YouTube and search “Brad Wilcox Grace”. He uses the metaphor of piano lessons: what the Lord requires of us is not perfection, but practice, practice, practice. Wherever you happen to be in the gospel, work on doing your best, and work on taking steps of forward progress. That is what we are asked to do. God will meet you where you are today, wherever you are, and encourage you and help you to make improvements. Perfection does not exist in mortality, so let go of the idea of finding it here. It is an unreasonable expectation. It will not be met. Expecting it to be met will cause frustration. Ups and downs and imperfections are normal. You are in good company with all of humanity.

I’ve heard it said that in church we are a bunch of amateurs practicing on each other. And with our families, we are a bunch of amateurs practicing on each other, at really close range. Don’t expect perfection from people. So be patient with others and don’t expect perfection from them. And the hard part, be patient with and don’t expect perfection from yourself, because you’re a person too.

God is not setting us up to fail. He is letting us learn by having experiences in an imperfect world that teach us things we can learn in no other way.

God is not setting us up to be loved less. He is letting us have opportunities to develop more Christ-like love for others.

What we learn and how well we love is up to us.

I have 5 kids. I’m amazed at how different they are from each other, coming from the same parents, growing up in literally the same house. I love them all. Isn’t it similar that all of us, God’s children, coming from the same heavenly parents, are different and unique. Don’t be frustrated by your uniqueness, because it is a gift from heavenly parents. Your uniqueness is a blessing from God to serve those around you in a way that nobody else can. And to see the world in a way that nobody else does. Belonging and fitting in doesn’t mean we have to all be the same.

If we look at the temple recommend questions it’s not about perfection, but about making forward progress. Three of the recommend questions specifically use the word “strive”. The Miriam Webster dictionary defines strive as “to devote serious effort or energy: endeavor”. It’s not about binary success or failure, it’s about serious effort and energy. If the temple let in only people who were perfect and fully successful, nobody would be there.

So when we think about our efforts in the gospel, in our qualification for the temple, it’s not about perfection now. As Elder Jeffrey R Holland taught in the October 2017 general conference, be ye therefore perfect, eventually. We are now in the Telestial kingdom. The Lord would never give us a commandment He knew we could not keep here. If we continually press forward, then somewhere in eternity our refinement will be finished and complete. But right now, not yet.

Why do we need the temple? Our Stake President has said being a good person isn’t enough. Covenants and Ordinances, including those in the temple, bind us to Christ. As evidence, that is why we have proxy ordinances in the temple, to bind families together, and to bind us all to Christ, even those people that are already good.

The atoning help of Jesus Christ is not something you reach after you have endured to the end. He is not waiting at the finish line. His atoning help is for you right now, wherever you are at. He is with you every step of the way and will help us get to the finish line. Just reach out your hand, right now, and take His. You are loved now.

If we inspect our spiritual foundation, it should include principles like these:

Matthew 22:36 – Master, which is the great commandment in the law? Jesus said unto him, Thou shalt love the Lord thy God with all thy heart, and with all thy soul, and with all thy mind. This is the first and great commandment. And the second is like unto it, Thou shalt love thy neighbour as thyself. On these two commandments hang all the law and the prophets. [Note that last sentence – this is a foundational element.]

You existed as a spirit before you were born on earth. And you will continue to exist after your earthly death.

You are a child of a Heavenly Father and Heavenly Mother and they love you perfectly. They love you not because of what you do or don’t do, but because you are theirs and will always be theirs.

God listens to your prayers. Every single prayer from every single person in its entirety.

The Church of Jesus Christ is being restored on the earth.

There is a plan.

There is a way for you to return to God and your family.

The Holy Ghost testifies of truth, and you can receive personal revelation.

You have a purpose and are of divine worth.

Jesus Christ has already paid the price for your mistakes and shortcomings. You can be forgiven and redeemed.

God wants us to receive all that He has and all that He is. All of it.

Brothers and sisters, you are awesome. No matter how you feel about yourself, you really are awesome. You have more talents and you have more potential than you think. You have infinite worth. You are the leaders of tomorrow and today. What you contribute, even when it is imperfect, makes a difference.

Get a temple recommend. Go to the temple, participate in covenants and ordinances for yourself and as a proxy for others that didn’t get a chance. The temple is not the end, it is the means. For an hour or two, step out of the world and into the kingdom of God. Find peace. Find answers. Find belonging. Find a greater purpose. See the ordinances that are done for every person that ever lived, one at a time, by name, because they matter, and you matter. When you look at life, remember that you can do this. You belong.

This I say in the name of our foundation, Jesus Christ, amen.

faith: death

Marcel is a member of the Church of Jesus Christ of Latter-Day Saints. This is an address he gave at a funeral of an elderly friend on June 18th, 2021. Personal information has been removed out of respect for the family.

We met at church. There is a program at church where we are all asked to look after each other, by assignment, and I was assigned to her. Somehow, we clicked. She did most of the talking, and I did most of the listening. 

It may seem unfair that she left us and had to go through all those health issues, and it isn’t what we want. I hear you. So how do we reconcile those feelings? If I may, I’d like to step back and think about the bigger picture, and the context.

Things are not always what they first seem. But when viewed in a larger context, we can understand the purposes beyond what is immediately visible. At work when my manager asks me to do something which on the surface doesn’t make sense, at least from what I can see at that moment, I need to dig into it and understand it more. There always is a good reason. When I understand the context, even when the assignment doesn’t change, then it’s easier for me to get on board. Similarly, in my personal life, when I understand the context in which things happen, especially for the bad things, it brings me patience, peace and hope. Or in other words, to get on board with God.

The first step to viewing the larger context is to understand what the real goal is. My own kids may think that my goals for them are to have a clean room and good grades. But as a parent, my real goal is above having clean rooms and good grades. 

It is for them to grow up to become their best selves, to realize the great potential they have, and for them to have everything I had and more, and to feel loved and to give love to others. Those are my top-level goals. Other parents here today, I think you want the same for your kids. 

I believe God wants the same for us: to become our best selves, to realize our tremendous potential, to have everything, and specifically to have love. This is demonstrated when God says (Moses 1:39) “Behold this is my work and my glory: to bring to pass the immortality and eternal life of man.” We are His children, we are His purpose, and He loves us perfectly.

We believe that as individual spirits, we existed long before we were born on earth. Back then we were in the presence of God as spiritual infants, where we could grow and learn. Which we did. But we could only go so far without the unique experiences and challenges of having a physical body, where we would learn great lessons from difficulty, including pain, disappointment, and loss. When difficulty is self-inflicted via a bad decision, we can learn a lesson from that experience too. 

Because it is in those difficulties that we can finally develop an appreciation for truth, health, joy, and love. And in particular to develop compassion and understanding. We learn the most when things are rough. This is illustrated when God spoke to a prophet that was going through a lot of difficulty caused by things outside of his control:

D&C 122: “And if thou shouldst be cast into the pit, or into the hands of murderers, and the sentence of death passed upon thee; if thou be cast into the deep; if the billowing surge conspire against thee; if fierce winds become thine enemy; if the heavens gather blackness, and all the elements combine to hedge up the way; and above all, if the very jaws of hell shall gape open the mouth wide after thee, know thou, my son, that all these things shall give thee experience, and shall be for thy good. The Son of Man hath descended below them all. Art thou greater than he?”

Here’s what that means: How much better will we be able to teach and serve and love, to have insights, compassion, understanding and empathy because of our difficulties here on earth. These experiences make us better people. It is how we grow and progress. Christ felt the pains of all people across all time, and we shouldn’t think ourselves exempt from difficulty.

The purpose of this mortal life on earth is to learn and do. It is not the end. It is a step in our eternal progression. And to progress, we must both enter this phase and leave it. Otherwise our progress stops. Although at this point, this earthly life is all we know, it is not all there is. 

Death is a separation of the spirit from the body. We lay the body down in the ground but the spirit continues. It continues to learn and to serve. Lying in this casket is her body, not her spirit.

Eventually with Christ’s return, the spirit and the body will be reunited, the same spirit with a perfected eternal physical body, without the flaws of mortality. Never to experience death, sickness, or fatigue. No more stenosis, no more iron deficit, no more blood pressure problems. No more cancer. No more birth defects. No more chemical imbalances of addiction or depression. No more diabetes. No more achy joints. No more hair loss. This is what we call the resurrection.

The reason we call Christ our Savior is that what He did enabled for us two saving things:

(1) to be resurrected, meaning that after our death on earth that later our spirit will be reunited with our body in its perfect and complete form. In summary, to make our bodies perfect. 

(2) to be cleansed from the bad choices we’ve made and the spiritual damage we’ve received. In summary, to make our spirits perfect. 

With this perfection in both body and spirit, we can live with God. Christ enables us to be saved from permanent physical death (resurrection), and to be saved from spiritual death (separation from God). And in order to enable this for us, Christ paid an infinite cost in His pain and physical death in Gethsemane and on the cross. And He did it because he loved us. And in doing so He learned our pains, so that He understands us perfectly. 

So you may ask: where is her spirit now? We believe that she is in a place called the Spirit World, as an active and aware spirit, there to await the 2nd coming of Christ and resurrection of our bodies. While there, there is work to do. She can serve and teach and invite other spirits there to accept Christ. And she can also see us here and cheer us on. I suspect she is here right now, watching and listening. And I suspect that on occasion she’ll have a role as a heaven-sent angel to provide us protection or inspiration. And she’ll do well in that role because she knows us and loves us.

She still is, but she’s not here. At least not here that we can see and interact with. So I talk about her in the present tense, not the past tense. Is, not was. And I encourage you to do the same. 

Yes, we are separated from her for a time, and we’ll miss her during this separation. But the separation is temporary. It is not permanent. 

I remember as an 8 year old hiking the Grand Canyon. From the upper rim to Havasupi Falls on the floor of the canyon. ½ mile of elevation change straight down, 12 miles of distance including switchbacks. And then repeat on the way out, but all uphill. Even though I was exhausted, when I took off my backpack, I felt so lightweight like I could fly. It was a remarkable feeling. I was unburdened. 

But being temporarily burdened made me physically stronger, tired, and taught me appreciation of freedom from burdens.

In the time I’ve known her, she’s had a lot of medical issues. So much pain for so long. It must have been a heavy burden. I think she feels unburdened now, and it must feel remarkable, like she can fly.

I can only imagine her joy at being reunited with her husband and them having a chance to catch up with each other.

I’ve told my wife that for my funeral I want there to be a party. A chance to remember the good things, and to laugh at the rest. To not be sad about my progression. Everything is going to be more than OK. 

My goal is to have lived a good life, to make the most of the short time that we have on earth. To prepare myself for the next step. To recognize that this experience is temporary, and that death is an expected and necessary gateway to achieve something greater than we can even imagine. I think she has done that.

This is what I wish for her, as written in Mathew 25:21, and adjusted for gender: “Her lord said unto her, Well done, thou good and faithful servant: thou hast been faithful over a few things, I will make thee ruler over many things: enter thou into the joy of thy lord.”

faith: our foundation

Marcel is a member of the Church of Jesus Christ of Latter-Day Saints. This is an address to the congregation he gave in the local Young Single Adult branch on October 17th, 2021.

In the recent General Conference, President Nelson started his remarks with a video about the foundation of the Salt Lake Temple. It is a massive structure, built from heavy materials such as granite. He said, “If we examine the foundation closely, we can see the effects of erosion, gaps in the original stonework, and varying stages of stability in the masonry.” Of course, he is using this as a metaphor for our spiritual foundation. As we have graduated from primary, the youth program, and moved away from families, are we having any erosion, gaps, or instability in our faith? If you were to really inspect yourself, how is your foundation doing?

Let’s backup for a moment. What is our foundation in? Jesus Christ and His gospel.

What isn’t a foundation? Carpet, painted walls, furniture, appliances. Even important items like the plumbing and HVAC are not the foundation. Even the load-bearing walls aren’t the foundation.

Each of those things can fail and get replaced without affecting the foundation. However, the inverse is not true. If the foundation fails, it can affect all the things above it. Walls start to crack. Pipes can get pulled apart. Floors can sag.

The foundation is designed to last a very long time. The things above the foundation are not. Walls get repainted different colors. Appliances get replaced every few years. Changing tastes and styles may trigger different fixtures and furniture. Even walls can get moved, bathrooms can get a makeover. But the foundation remains still and stable.

The policies of the church are not the foundation, any more than the appliances in our house and paint on the walls are not the foundation. Most of the handbook is being rewritten. Sunday worship was reduced from 3 hours to 2 hours. Wording in temple ordinances has been updated. Home teaching was replaced by ministering. Priesthood quorums have been combined. We just went through a period where most of our Sunday worship and instruction and partaking of the sacrament was in our homes instead of church buildings. Things that have never happened before. These are not the foundation. These are adjustments to our living spaces as our needs change. But the foundation remains constant.

One purpose of a foundation is to transfer the load of the structure to the ground. If we are to think of ourselves as the structure, and Jesus Christ as the foundation, what loads can we transfer from ourselves to Jesus Christ? The load of being imperfect. The load of loneliness. The load of sickness. The load of worry. The load of not knowing what to do.

Another purpose of a foundation is to anchor a structure against natural forces, such as wind, earthquakes, and frost heaves.

A frost heave is when it gets so cold outside that the water in the soil freezes, and then the soil expands as that water freezes, causing the soil to lift upward (heave). The frost line is the depth in the soil at which water in the soil doesn’t freeze during the winter. In North Carolina the average frost line is about 10 inches deep. In Wisconsin, where it is colder in winter, the average frost line is about 65 inches (5 ½ feet) deep. The foundation must be built below that frost line so it doesn’t get heaved up during the winter freezes. To be stable, the foundation needs to go below the reach of external influences. It needs to be based on things that are unchanging and stable.

Here’s the question: Is your faith, your participation in the gospel, based on things that are unchanging and stable?

When someone in church hurts us or offends us, or we hear something that we don’t understand or don’t like, that is not a failure in the foundation. It is a broken doorknob, a hole in the drywall, or a dented appliance. It still hurts, and it still needs repair, but it is not a failure in the foundation.

We don’t often see the foundation itself. It is out of sight and out of mind. So sometimes we get fixated on the things we can see, that are on the surface. In my home recently, a crack appeared in the drywall above a door frame. I could spackle and paint over it which may make me feel better, but really what is needed is to go back to the source of the problem and address it there, settling in the structure that may need some reinforcement.

The house I live in, we have been there 20 years, and it is 30 years old. I need to expect, and budget for, failures in the appliances. My fridge stopped working this week. I replaced all the plumbing last year, which involved ripping up the walls and ceiling. We replaced both HVAC units several years ago, in the same year, that was financially painful. We are on our 3rd dishwasher. I’m currently spackling and repainting walls damaged by my kids as they grew up in this house. It is unwanted effort and expense, but that is what happens as it ages. There is no way around that. How is it with our own faith, that as we age, things you’ve done before no longer work. You need to make adjustments and fixes to your life to get things working well again. That change should be expected. It is not an indication of failure, it is the effect of time and experience, of usage and growth.

This phase of your life has a massive amount of change. Over a 4 year time period, in the latter half of my college experience, I:

  • Got baptized.
  • Got married, after waiting a year to get married in the temple.
  • Graduated from college.
  • Moved across the country, far away from family.
  • Started with an employer that I was with for 24 years.
  • Bought our first (non-inherited) car.
  • Bought a house.
  • Had a baby (well, not me personally, my wife).

If that isn’t massive change, I don’t know what is. That massive change set the course of my life. It was a remodel and addition of epic proportions. But it was based on the same foundation. My foundation was able to bear the load of all these new things placed upon it. But I also needed to choose these additions to fit with the foundation. In choosing an employer and location, I needed to choose something that would be compatible with my family and my principles. Our house and car were fixer-uppers, not big and fancy like my parent’s house and car. The fitment between the house and the foundation matters.

I have family members that have struggled with their spiritual house and because of that are not currently active in church. Most of it seems to be concern about church policies. They are still good people and I continue to love them. I wonder if they have gotten too fixated on one part of the house and forgotten about the other parts, including the foundation.

Let’s use math as a metaphor for a moment. If I asked how many of you could do basic addition and subtraction, I think all of you would raise your hand. If I asked how many of you could do basic algebra, I’d still have most of you. But if I asked how many could do calculus, I think I’d have only a few. Let’s say I come across a calculus problem, and I currently can’t do it. I may recognize that I need to study and practice to learn how to solve that math problem that I currently don’t understand. Or I may need to get help, find a tutor or office hours. Or maybe for the time being I just let it go and that there are other priorities, calculus is not for now. Just because you don’t know how to do one part of something does not mean you give up on doing the other parts you already do know. Even though I don’t know calculus, I still use math for baking in the kitchen, for planning time for my day, for saving for that dream vacation.

Back to our house metaphor, if I get frustrated that the dishwasher is bad, I don’t bulldoze my house. If for some reason I’m not able to fix the dishwasher, then I work around it by washing dishes in the sink by hand. Or I start using paper plates. And that’s OK. I can still enjoy the rest of the kitchen, a comfy bed, a clean bathroom, and a relaxing family room. No house I’ve lived in has been perfect, there always is a long list of things that need to get fixed and improved. And I don’t have the resources to get all those things done at once, so I accept and live with the imperfections. It’s OK to have an imperfect house. It’s OK for you to be imperfect. It’s OK for your faith to be imperfect. When things are imperfect you don’t have to bail.

When I get frustrated with imperfect things, I ask myself “where else would I go?” I don’t see any place better. My family members that are not currently active, they haven’t gone someplace else. They hold on to what they learned in Primary and youth programs. They still believe in these fundamentals. Their frustrations are with the implementations of it. They still have a foundation.

A wise person said that all frustration comes from unmet expectations. Think about that. So when you get frustrated, inspect your expectation. Ask yourself if your expectation is appropriate. I’m frustrated that I don’t have 6-pack abs like I did when I was 20 and worked out every day. I’m 55 and don’t work out every day. My life is different than when I was 20. My body is different. And that’s OK. I shouldn’t expect to have 6-pack abs at this point. When I get frustrated, I need to check my expectations. Is it reasonable to expect to understand all things about the gospel right now? I don’t think so. We operate a lot on faith, which is less than a perfect knowledge. Even if you don’t understand something, or even don’t like something, do you trust God?

In case you didn’t notice, the people in the church are imperfect. This includes your quorum and class members. And your leaders, including us on the stand. And you. I’ve heard it said that in church we are a bunch of amateurs practicing on each other. And with our families and roommates, we are a bunch of amateurs practicing on each other, at really close range. Don’t expect perfection from people. So be patient with others. And the hard part, be patient with yourself, because you’re a person too.

So when President Nelson talks about foundations, why is it connected to temples? He said, “The temple lies at the center of strengthening our faith and spiritual fortitude because the Savior and His doctrine are the very heart of the temple. Everything taught in the temple, through instruction and through the Spirit, increases our understanding of Jesus Christ. His essential ordinances bind us to Him through sacred priesthood covenants. Then, as we keep our covenants, He endows us with His healing, strengthening power.”

The base of our foundation is Jesus Christ. What do you do to connect yourself with Him and to build upon Him? To integrate tightly and attach firmly, like a house on a foundation?

If we inspect our spiritual foundation, it should include this:

  • In Matthew 22:36 a person asks: Master, which is the great commandment in the law?
    Jesus said unto him, Thou shalt love the Lord thy God with all thy heart, and with all thy soul, and with all thy mind. And the second is like unto it, Thou shalt love thy neighbour as thyself. On these two commandments hang all the law and the prophets.
    [Look at that last sentence, this is a foundational element.]
  • You existed as a spirit before you were born on earth. And you will continue to exist after your earthly death.
  • You are a child of heavenly parents and they love you perfectly. They love you not because of what you do or don’t do, but because you are theirs and will always be theirs.
  • God listens to your prayers. Every single prayer from every single person in its entirety.
  • The Church of Jesus Christ is being restored on the earth.
  • There is a way for you to return to God and your family.
  • There is a plan.
  • The Holy Ghost testifies of truth, and you can receive personal revelation.
  • You have a purpose and are of divine worth.
  • Jesus Christ has already paid the price for your mistakes and shortcomings. You can be forgiven and redeemed.
  • God wants us to receive all that He has and all that He is. All of it.

Brothers and sisters, you are awesome. No matter how you feel about yourself, you are awesome. You have talents and you have potential. You have infinite worth. You are the leaders of tomorrow. What you contribute matters. Mistakes are the stepping stones as we progress in our potential, and unfortunately they are an integral part of how we learn. A life well lived is not a lack of mistakes.

The atoning help of Jesus Christ is not something you reach after you have endured to the end. He is not waiting at the finish line. His atoning help is for you right now, wherever you are at. He is with you every step of the way. Just reach out your hand, right now, and take His.

The power of your membership in the church comes from covenants and ordinances. Other churches have good people and good principles, but they don’t have the same covenants and ordinances, those that are found in the temple. This is why the temple is important. You have a role and a purpose in this.

Get a temple recommend. Go to the temple, participate in covenants and ordinances for yourself and as a proxy for others that didn’t get a chance. The temple is not the end, it is the means. For an hour or two, step out of the world and into the kingdom of God. Find peace. Find answers. Find belonging. Find a greater purpose. See the ordinances that are done for every person that ever lived, one at a time, by name, because they matter, just like you matter. When you look at life, remember that you can do this. You belong.

This I say in the name of our foundation, Jesus Christ, amen.

tech: the [ultimate] home server on the cheap

After having a couple Raspberry Pi’s doing miscellaneous things, and working my way up to a Plex server where I needed real storage and video transcoding crunching power, it was time to do something real. But I didn’t want to spend a lot of money. Here’s what I did.

Hardware

I wanted a decent machine that had more horsepower than a Pi, a 64-bit CPU, space for multiple mass storage 3.5″ internal drives, was relatively quiet, and relatively inexpensive. A used PC tower would fit this bill nicely. After some hunting around on Newegg for refurbished systems, I settled on a Dell Optiplex 790 mini tower. For $168 I got a machine with space for 4 hard drives (2×3.5 + 2×5.25), a 2nd-gen Core i5 at 3.10GHz, 8GB RAM, 4 internal SATA ports, and gigabit ethernet. It did come with a single 500GB drive with a fresh copy of Windows 10 Pro preinstalled, but I replaced that with a used 2TB disk I had laying around the house upon which I installed Ubuntu 20.04 LTS to make this a headless server (no monitor/keyboard attached, just sshd).

For mass data storage I bought two Seagate Ironwolf 8TB NAS drives at $200 each. The NAS drives are designed to be on consistently and accumulate a lot of spin time, as opposed to a generic PC disk that are expected to be powered off when not in use.

Then I did some re-arranging of the hard drives.

First, take the OS disk that is in the bracket at the bottom of the case, and mount it in the 5.25 bay right below the DVD drive using a 5.25-to-3.25 adapter like this one. Now the two drive brackets at the bottom of the case are empty, which I’ll get to in a minute.

Second, pull out the DVD drive that came with that refurbished PC. Replace it with a bracket for $20 that will allow a random 3.5″ internal drive to slide in to a hot-swap SATA slot. That way I can use other various internal-style drives on-demand without having to open the case. Useful for wiping that stack of hard disks from previous PCs that I’ve been meaning to do. Ubuntu includes support for NTFS filesystems, so a simple mount command can make Windows data available here to migrate in to my mass storage disks. To bring the inserted drive online without a reboot you can use the command “/usr/bin/rescan-scsi-bus.sh” as root from the sg3-utils package via “apt install”. But to do so, I believe this bracket needs to have been powered on at boot time.

Third, now that the two hard disk brackets are open at the bottom of the case, that is where I want my two mass storage drives to go. I plan to run them in a mirrored configuration, to protect against drive failure. So I aim to put the two Ironwolf drives there. But Dell uses a blue plastic caddy tray to hold the disks here instead of old-school screws, and only one caddy is present. No worries, I can get another one just like it from Newegg marketplace for $12.

For the SATA cables, I attach the OS disk to SATA port 1 on the motherboard, the two mass storage Ironwolf drives to SATA port 2 and 3 on the motherboard, and the hot-swap bracket to SATA port 4. That way when I use the hot-swap drive and power it on and off using the built-in switch on the front of it, it will get assigned the /dev/sdd device name at the end of the list, and not impact the sda assignment for the OS disk or the sdb/sdc assignment for the mass storage disks.

After I unboxed the refurbished Dell upon arrival, it wouldn’t boot up to the POST / BIOS menu. I was worried I was going to have to return it as being DOA. As a bit of a wild guess I started re-seating the internal components, and after re-seating the RAM DIMMs, it finally booted. Easy enough for a $168 server.

Operating System

It’s got to be Linux. It’s what I’m familiar with, is highly configurable, and has lots of network application software. For the sake of ease, I chose Ubuntu 64-bit server 20.04 LTS so that I can have some stability without having to do major upgrades. Running “apt update + apt upgrade” is pretty darn easy. Download the ISO from the web site (“Manual server installation”), write it to a USB thumb drive with Etcher, boot the PC from the thumb drive via the BIOS menu, install to the OS hard disk, and in short order I’ve got Ubuntu up and running. During installation, select the “Minimal installation” because you don’t need a lot of user apps and graphics for a headless server. Create a login id and don’t forget the password.

Now for the mass storage drives. I’d like them to be mirrored, so in case one drive has a catastrophic failure, my data is still intact. I’ve heard lots of good things about ZFS, so let’s give that a try. It’s powerful but can be simple. And it helps that Ubuntu has support for ZFS and instructions for setting it up. I create a mirrored pool with sdb and sdc, use the “lsblk” command to verify the device names, looking for the ~8TB devices:

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 55.4M 1 loop /snap/core18/1944
loop2 7:2 0 55.4M 1 loop /snap/core18/1932
loop3 7:3 0 69.8M 1 loop /snap/lxd/19032
loop4 7:4 0 31.1M 1 loop /snap/snapd/10707
loop5 7:5 0 31.1M 1 loop /snap/snapd/10492
loop6 7:6 0 69.9M 1 loop /snap/lxd/19188
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 500M 0 part
├─sda2 8:2 0 465.3G 0 part
└─sda3 8:3 0 1.4T 0 part /
sdb 8:16 0 7.3T 0 disk
├─sdb1 8:17 0 7.3T 0 part
└─sdb9 8:25 0 8M 0 part
sdc 8:32 0 7.3T 0 disk
├─sdc1 8:33 0 7.3T 0 part
└─sdc9 8:41 0 8M 0 part
$ apt install zfsutils-linux
$ [...commands I forgot to write down to create the pool and mount points]
$ zpool status
pool: pool0
state: ONLINE
scan: scrub repaired 0B in 0 days 02:05:31 with 0 errors on Sun Jan 10 02:29:33 2021
config:
NAME        STATE     READ WRITE CKSUM
pool0       ONLINE       0     0     0
  mirror-0  ONLINE       0     0     0
    sdb     ONLINE       0     0     0
    sdc     ONLINE       0     0     0
errors: No known data errors
$

Now I create the ZFS datasets, all under the /data mount point. Here is how it looks when done:

$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool0 1.73T 5.31T 104K /data
pool0/logs 2.08M 5.31T 2.08M /data/logs
pool0/plex 1.73T 5.31T 1.73T /data/plex
pool0/preserve 376M 5.31T 376M /data/preserve
pool0/smbshare 36.7M 5.31T 36.7M /data/smbshare
marcelk@filesvr:~$

Applications

Now what server applications to install and use? This is where it gets to be fun.

Plex

First, the main driver for this server is for Plex. I started off playing with Plex server on the family Windows PC for music with their free license to try it out. But I waited until Plex had a sale on their Lifetime Plex Pass, had a good experience and am ready to move up. So, start with installing Plex from the official repository via apt, and I can automatically get updates too, which seem to come out every couple of weeks. Then I shutdown the trial one on the Windows PC, and move all my content over into the usual Plex naming scheme for directories and files and for extras.

Why Plex? For starters, for music management. Instead of using a subscription service where I can pick any song and stream it, I have pretty specific tastes. I like to buy MP3s online and stick with those. I buy only a couple new songs a month that I like, which is much less money than a subscription service. And I’ve ripped my old collection of audio CDs. My main use case is that I don’t stream music to my phone to play, but I’d rather download the whole library and play locally, so that I don’t incur cell data usage when in my car or otherwise out-and-about. (I get by on 1GB of cell data a month, pre-pandemic.) Rip your CDs into the lossless FLAC format, and Plex will automatically compress it down to the desired bit rate in an MP3 file for local synchronization to your portable device. And with Google discontinuing Google Play Music, where I had uploaded my MP3 library for syncing back to my phone, and liked it, I wanted to exit cloud-based providers and just manage it myself. Plex offers a pretty good system for managing your music on a local server, and syncing to devices. I hadn’t really thought much about ripping movies to host in Plex, but after a trial that looks to work pretty good too. So might as well get a Blu-ray drive for the family PC where I can run MakeMKV in Windows to rip DVDs and Blu-ray discs and host those in Plex too. A ripped DVD is about 5GB, and a ripped Blu-ray is about 30GB. So in 1TB I can fit about 166 DVDs or 33 Blu-rays. I can run the Plex app on my Roku to watch these movies on my big screen TV in HD, or on any other local device using the Plex app, or on a PC using the browser interface. Because my TV’s old-school physical Blu-ray disc player does such a good job automatically up-sampling a DVD (480p) to HD (1080p), it’s still best to use the DVD discs on that big screen. But on a phone or tablet, the lack of upsampling is not very noticeable.

And I should mention since I don’t have cable TV, I’d like to be able to record over-the-air TV with an antenna and have it appear in Plex as a recorded TV show. That is pretty easy to do with a device like the HDHomeRun Connect Duo for $100. In retrospect, since I have stations in my area broadcasting in ATSC 3.0, I should have upgraded to the HDHomeRun Connect 4K for another $100 more. Once I have the Plex server up and running, it is really easy to get the Plex server to send commands to the Connect Duo to have it record shows based on the schedule I set up in Plex, copy the show from the Connect Duo stream and store it on Plex, and play it back on-demand in Plex. It’s a DVR!

And as I digitize some old family photo albums with a flatbed scanner, I can host those in Plex also. (My phone camera photos have been going into Google Photos, but maybe I’ll export them down to my Plex server too.) So I’m using Plex for music, playlists, movies and other shows from discs, recorded TV shows, live TV, and some photos.

Plex does have the capability to enable remote access to your server, to allow your phone or other devices to reach your Plex server on your home network from the outside. I did not enable that, because I don’t want to have any possibility of a connection being initiated from the outside to be able to reach inside my home network. That is what my firewall is for (accept established+related, otherwise drop). Yes, Plex will say that their solution is good, but all software has bugs. Here’s a recent one. You may be willing to take the risk to get the benefit, but I’m not, and instead will use Plex’s sync capability so I can play music and pre-selected video content while away from home, instead of making it reachable from the Internet for streaming.

httpd: nginx

Next, of course I’ll need a general purpose web server for whatever documents I want to have available on my home network. Nothing fancy, perhaps a home page with pointers to other places, such as the webgui admin consoles for my devices. For that I’ll choose nginx. And I’ll use the default index.html in /var/www/html for now, and let it appear on port 80. I don’t really care about SSL inside my home network, so I won’t bother to set up port 443 service and certificates. Since the Plex server runs its web interface on port 32400, might as well as add that as a first link in the index.html file on my new home page.

I do have a collection of product manual PDFs that I’ve collected, so I don’t need to keep the paper copies around. Let’s upload those to the /data/preserve/Manuals directory, and add a location stanza to the /etc/nginx/sites-available/default

    location /manuals/ {
            alias /data/preserve/Manuals/;
            autoindex on;
            autoindex_exact_size off;
    }

WiFi AP Manager

I use WiFi access points in Ubiquity’s Unifi product line. They require a manager application (controller) for configuration, reports, and software updates. It is not small. I had been running that controller on a Pi 3, would be nice to consolidate it on this server. I install that application from their repository so I continue to easily get updates via apt. They seem to update every couple of months. I export the controller’s config to a file, copy that file from the Pi 3 to my new server, import it into the new controller, and shutdown the old controller on the Pi 3. This webgui runs over https on port 8443, might as well add that as another link in the index.html on my nginx home page.

Unfortunately, the Unifi manager requires Java 8. Yes, version 8. It’s a good app with a bad pre-req. So amend the instructions to include this:

# apt install openjdk-8-jre-headless
# apt-mark hold openjdk-11-*
# apt install unifi
# service unifi start

mDNS / Avahi

This is something you need to install, but it will “configure” itself via the applications that use it. Avahi provides an implementation of multicast DNS (mDNS) and DNS Service Discovery (DNS-SD), perhaps better known as Bonjour or Rendezvous or zeroconf. The avahi-daemon is probably already installed, and there really isn’t any config you need to do. Want to use the avahi client to see what services are on your LAN? (Use ctl-C to stop after a while, it will keep listening forever)

$ avahi-browse --all --no-db-lookup
$ avahi-browse --all --resolve
  • _googlecast._tcp: devices that can you can Google-cast to
  • _ipp._tcp: CUPS printer (Internet Printing Protocol)
  • _afpovertcp._tcp: Apple File Sharing / AFP server
  • _smb._tcp: Samba server or Windows file sharing

Windows File Sharing: Samba

Yes, there is a family / gaming PC running Windows 10, so some kind of Windows file sharing (SMB) is needed. And honestly, MacOS seems to play decently with SMB, so it is a good lowest-common-denominator. And heck, the Linux SMB client works too. Follow these instructions to get Samba server set up. I use pretty much the default config, and edit /etc/samba/smb.conf to add the following shares. The first is just a general scratch space that is readable and writable by everyone (easier than a USB stick), and the other two are simply read-only raw access to the ripped movies (mkv) and music (mp3) files.

[share]
comment = Shareable Space
path = /data/smbshare
browseable = yes
read only = no
guest ok = yes
create mask = 0666
directory mask = 0777
[music]
comment = Music MP3s
path = /data/plex/Media/Music
browseable = yes
read only = yes
guest ok = yes
[movies]
comment = Movie Discs
path = /data/plex/Media/Movies
browseable = yes
read only = yes
guest ok = yes

Apple file sharing / AFP / netatalk

My spouse is an Apple fan: a big iMac desktop, iPhone, a couple iPads, AppleTV, you get the idea. Would be nice to provide Apple file shares for her, especially when backed by the same common storage as Samba for cross-platform sharing. I could set my server up to also act as a Time Machine backup server for her too, but she has enough local USB drives to handle that. Netatalk will give me the Apple File Protocol (AFP) server on Linux.

$ sudo apt install netatalk

Then edit /etc/netatalk/afp.conf. Here is what mine looks like, I didn’t bother to enable Time Machine. And note that the “mimic model” value will make my server appear on my wife’s client as an icon of a rack-mounted Mac, using the name in the “zeroconf name” setting. (Hmm, this feels similar to the Samba configuration.)

[Global]
; Global server settings
uam list = uams_guest.so, uams_dhx.so, uams_dhx2.so
guest account = nobody
mimic model = RackMac
zeroconf name = file server
; log level = default:debug
[Share]
path = /data/smbshare
case sensitive = yes
read only = no
file perm = 0666
directory perm = 777
[Plex Music files]
path = /data/plex/Media/Music
case sensitive = yes
read only = yes
[Plex Movie files]
path = /data/plex/Media/Movies
case sensitive = yes
read only = yes

Logging

And since we have plenty of storage here, might as well set up a logging server so all my logs are centrally located. So rsyslogd will take care of that for me.

UPS / Battery Backup

I have a UPS (battery backup) connected to my broadband modem, firewall, and one WiFi AP. So in the event of a power loss, I’ll still have internet+WiFi for a bit, at least for about 6 hours until the battery runs out. Since this server is physically located right there, it would be nice to integrate my server to the UPS, so I can automatically gracefully shutdown my server when the power is out for more than 60 seconds. I have an APC BackUps 1500, and attached the cable that came with it to a USB port on my server. Here is the config I use for that:

# apt install apcupsd
# vi /etc/apcupsd/apcupsd.conf
  UPSNAME 1500
  UPSCABLE usb
  UPSTYPE usb
  DEVICE
  TIMEOUT 60
    
# apcaccess status

Printer Server

Because my family laser printer is located elsewhere, out of reach for a USB cable, I have a Raspberry Pi with Ubuntu acting as a print server for all my machines. CUPS is the way to do it. I can print from Windows, MacOS, Linux, iOS, and Android. I still find it pretty cool to print to paper from my phone, I’m old school.

DHCP with static assignments

This part may be a case of me being a neat freak. I currently have 41 devices on my home network, all of them set up for getting an IP address dynamically instead of statically. So if something goes wonky and I see an IP address behaving weird, I’d like to know what device it maps to. For the router I use (a Mikrotik hEX, which is awesomely configurable and performant for my 1GB fiber ISP) I can show the list of active DHCP leases, and convert each one to a static IP address over DHCP based on its MAC address. And I can put each one within a chosen range. The current ranges I have are for local network infrastructure (i.e., router, smart switches, WiFi access points), server / PCs / printers (including Chromebooks and laptops), media devices (Chromecasts, Rokus, etc), and smartphones / tablets. Every once in a while I’ll look to make sure the list of dynamically assigned IP addresses outside my static ranges is empty.

Cleanup

With Ubuntu installed to bare metal instead of as a virtual image, I don’t need cloud-init running, and the messages get a little bit annoying. So remove it.

Assuming you’d like to get access to a shell prompt on this server remotely within your LAN without a physical console, apt install sshd . I also like to add to /etc/ssh/sshd_config the line PermitRootLogin no just for safety, which means you’ll need to ssh in as a regular user before doing an su or sudo, no direct login as root.

If you are like me and running it as a headless server without a monitor/keyboard/mouse attached, you can disable the graphical UI (X windows) and get the resource savings for that. But since you’d still like to login on the rare occasion with a monitor/keyboard in case the network is inoperative, you can enable a getty (text-only) login prompt on /dev/console. Me being old school, I also like to the see the boot progress on the console, in case anything goes wrong.

# systemctl get-default
graphical.target
# systemctl set-default multi-user
Created symlink /etc/systemd/system/default.target → /lib/systemd/system/multi-user.target.
# systemctl get-default
multi-user.target

Then edit /etc/default/grub and make the following changes, then run update-grub and reboot:

GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_TERMINAL=console
GRUB_GFXMODE=1920x1080

tech: software development principles

After working on a project for a while with Agile and analyzing why some things went wrong, I came up with the following guidelines for our team. I printed them out and posted it on my cube wall so I would see it multiple times daily. I see these as supplements to or applications of the Agile principles. I don’t think these are unique to our project, so I’ll share them with anyone who can get value from them.

Here is my list:

Context is everything. If you understand the context, you will naturally choose the right solution. If you don’t understand the context, you’ll be making a decision blindly or with improper assumptions. In these very complex environments, making good decisions is critical. Understand the context, which likely means you need to talk to more people than usual.

The goals should be clear. If they aren’t, ask. I want my team to understand what the high-level goals are, and how the work they do on a daily or hourly basis helps the team to achieve those high-level goals, and why that work is important to the team. If you can’t answer that positively, then either you don’t understand the goals, you don’t understand the task, or you’re working on the wrong thing. It’s totally cool to raise your hand and say “Help me understand the goals.” It shows that you care and that you are a team player. The only stupid question is the one that is not asked, especially when the answer matters to you.

Prioritize. And revisit the priorities. Start with the understanding that you can’t complete everything that is desired. Work on the most important things first. Front-load the risky items so you have time to deal with unexpected bad outcomes. Priorities will help you decide what to leave undone, as you will have to leave some things undone. Revisit the priorities periodically to check if they need to be adjusted, especially due to new information.

Work on the right thing at the right time. This is a big one. If we start with the assumption that there will always be more work to do than time allows, we can’t do it all. And human nature makes it too easy for urgent things to displace the truly important things. So pick the right thing that is most important at that moment. And the right thing will vary based on a lot of factors. It varies over time, usually a lot. Every day when I arrive at work, I ask myself the question “What do I need to be working on today?” and re-evaluate.

On average, go at a sustainable pace. There will be peaks and valleys in workload, but getting burned out is bad for everyone: the employee, the employer, and the customer. An unsustainable pace for too long will increase technical mistakes and increase technical debt. Push back if an unsustainable pace is creating a bubble that will collapse.

Play the long game. Battles will come and go, but this is about winning the war. Don’t mistake a battle for the war. This means we may need to take some hits in the short term in order to succeed in the long term. A few customers simply aren’t going to work out, it’s OK to let them go elsewhere.

Understand the “iron triangle”. For a product that is considered mature and customers have high reliance on working properly (i.e., bank transfer), quality needs to be there. In the iron triangle, the 3 vertexes are resources (including time and people), content, and quality. If  you move one vertex, the other two will also need to change. If you choose to increase the quality, it may take more resources and/or less content. In my current position, we generally have flexibility for time, but generally not flexibility for quality. If you have a product where time-to-market is important and shortened, then quality and/or content may need to be lessened.

Have a constant sense of urgency. But don’t go so fast that you make mistakes or take shortcuts. Most of my coding mistakes are when I am trying to hurry. And fixing those mistakes slows down me and others. Remember the classic horror movie scene where the guy with the chainsaw is very slowly lumbering toward the victim, but the victim is either screaming and holding still, or trying to run away so frantically that they are tripping over themselves and still going to get caught by the slowpoke lumbering murderer? Honestly, if they would just calm down and walk away at a decent pace everything would be fine.  Sometimes you need to slow down to go faster.

Too much communication is better than too little. As developers, we may not be the best communicators. But communication is essential to a team functioning properly, so we can all do the right thing at the right time. The team’s goals are bigger than what any one person can do. When in doubt if you should let someone know about something, always let them know. Cross-training and occasional role shadowing can be really helpful.

Think hard. And ask for advice. Challenge yourself to come up with a better plan, even after you’ve come up with a good plan. Benefit from the knowledge and diversity of those around you. There is value in personal interactions. Don’t be a heads-down soloist.

Exercise due diligence, but don’t spin your wheels. Before you go to someone to ask them a question, do some homework. But don’t spend so much time doing homework research that you don’t get the job done in a reasonable time. If you get stuck, back up and take a look at it, and if you still can’t figure it out, then go ask for help. Asking for help is totally OK. You would gladly provide help to someone if asked, right? This is a team, not an set of isolated individuals. Instead of brute forcing something, try to work smarter and efficiently.

Always keep it simple. Complexity is our #1 enemy. We must be diligently fighting this enemy wherever it silently creeps in. It is much easier to achieve the *-abilities (maintainability, usability, etc.) when the thing is simple. Its corollary: pre-optimization is the root of evil. For example, realize that if you want to cache that data, you now need to manage the cache and deal with synchronization. Keep it simple, and then optimize only what the data tells you is actually needed – it’s likely a lot less than you expect. Just because you can create something doesn’t mean you should.

Build for elegance and craftsmanship and simplicity. Then it becomes stable, fast, intuitive, etc., and most importantly, predictable. In our organization, the goal is to not finish quickly, the goal is to finish at a good place. If you need more than one attempt to finish at a good place, do it. Obviously, if you can finish at a good place quickly, that would be nice, but quick is not the primary goal.

Do the right thing, even when it takes more time than the easy thing. In the best case, not doing the right thing creates debt. It is better to do a few things well than a lot of things poorly.

Obey the model. Perfectly. Models exist to provide rules of operation. Where rules exist, assumptions get made. When the model is deviated from, even in small amounts, assumptions get broken, unexpected behavior occurs, and complexity ensues. And stuff breaks.

Make the best customer experience. Don’t trade “what is best for the customer” with “what is easy for us”. Pleasing the customer over the long term is your revenue source.

Break up the large stories into digestible-size pieces. If the size of the story is too big, you won’t get it done, and it will just keep rolling over iterations. The way to eat an elephant is one bite at a time, properly swallowing between each bite, pacing yourself.

Any task which is more than trivially repeated, especially if accuracy is important, and can be reasonably automated, must be automated. The only way to scale without a huge increase in human resource cost and human errors is to automate. This also frees you up from the mundane to focus on high-value items. In the long run, the investment will not only be worth it, it will be necessary.

When it can be done reasonably, write tests to go with your code. I’m not suggesting about going crazy with unit tests, in my experience that’s not what usually breaks. With solid developers, it’s the integration function that cuts across components is the more frequent issue. But those are also generally the hardest to automate testing for. But if you can automate integration testing, then you can run it frequently and inexpensively, which will yield great payoffs in bug finding and QA cost savings. Scale!

Don’t let “perfect” get in the way of “done”. It is human nature to want to get something perfect before sharing it. (I live with visual artists.) Left unchecked, I think it also is human nature to want to endlessly tweak things, which ultimately probably don’t make meaningful differences. So sometimes we need to call it and get it out the door. Development that we do that doesn’t get used doesn’t realize its value. There absolutely will be times where your code doesn’t need to be perfect. For example, perhaps the primary business goal is speed-to-market, and the product is expected to remain pliable so customer feedback can guide its future direction, and it is understood to not be mission-critical for the customer. So don’t invest time in becoming perfect because the product is expected to change, and you’ll end up changing that code anyway. “Doing the right thing at the right time” can mean that you are building things to be good enough, not perfect. (Rules, including the ones here, should always be interpreted with an “as reasonable” clause.)

Test your code before you merge it. Have proven confidence that it works instead of expecting QA to catch basic problems. We currently have a dedicated QA team. But don’t get lazy and expect them to catch issues in your code. The QA team finding a problem in your code should be an exception and not the rule. The QA team is generally better at finding edge cases and interesting integration scenarios. But you as the developer should do enough testing of your own code in your development environment before you git commit + push that you have confidence in your code because you saw it actually do the right thing, not because you are arrogant.

Be totally honest. If there is something not right that is lurking below the surface, bring it to the surface so it can be seen and resolved. Otherwise it may come back and bite us at a bad time as a costly surprise. If something isn’t right, do or say something. And not just “Hey, someone needs to do something about this.” Instead, ask yourself “what am I (not someone else) going to do about it?”

Sense and respond. Once you are on a path, consistently look around and see what is going on. And compare that to your decision to originally get on this path, because you may find that at this new point that another path makes more sense because now you have new information. If a change makes sense, then change. As the saying goes, “the first step in getting out of a hole is to put down the shovel”.

Everything that does something for you also does something to you. (I came up with this quote.) That cool third-party library that helps you get something done easier, will also place limitations on you. Or that business partnership that that you outsource to can become a dependency over which you don’t have control. Be careful.

When something is intended for production, get it to be correct before the launch. It gets way more difficult afterwards. Once a customer starts to rely on something, even though it was a temporary hack, it becomes very difficult to pull it back. It will be a better experience for everyone to do it correctly before production. An uncooperative cat is hard to get back into the bag, and injuries are usually involved.

Don’t accumulate technical debt. Time-slice in debt reduction. If you aren’t making explicit debt payments in each release, you’re probably accumulating debt. Just like in the financial world, debt is a burden.

We’re not paid to know everything, we’re paid to figure things out. It’s not reasonable to expect a developer to know everything. It would certainly be cool if we did, but in today’s complex world that is pragmatically impossible. However, our value as developers is to efficiently figure things out and then translate that understanding into an implemented deliverable.

It is not an admission of failure to ask someone a question, and you will not be looked down upon. I want folks to be committed to the team (not just to themselves), and have empathy for others that is a source of helping. If someone comes to you with a reasonable question, would you be offended or look down on them? Of course not. So they shouldn’t do the same to you. You can also think about it this way: You are a member of a team. The goal is not only for the individual to succeed, but also for the team to succeed. If you have more to do than one person can handle and get overwhelmed, ask for help. Asking for help is not a sign of your weakness or failure, it is a sign of you caring for the success of the team.

That’s my list for now. There probably will be updates as new lessons are learned and articulated.

tech: Google Play store updates and Android foreground notifications

In the office we’re working on an Android app which isn’t your usual app: we work with a handset OEM to get it pre-loaded on their handsets in the system partition. At the time it required system permissions and had a foreground notification.

The slow rate of ROM OTA updates from OEMs being what they are, we wanted a faster way to deploy updates to our app, so the obvious choice is to also publish our app into the Play store and let Android’s Play services automatically update it from there. Except for one problem: when we published APK updates to the Play store, the handsets would never automatically download the update and install it. Try as we might to debug that, we couldn’t figure out why our app wasn’t getting updated by Play Services like all the other apps. We even got Google to investigate a bit, but never got a solution. So we ended up building a service into our app that would monitor for an updated version being available (via separate metadata that we uploaded to a server) that would then notify the user of the update being available, and then expecting the user to manually click on that to download the update. Yuck.

Fast forward a while, and we rewrite our app so it no longer needs Android system permissions. And Android provides new APIs so we don’t need to use a foreground notification. It still is signed by the same key. As soon as we publish the 2nd version without the foreground notification to the Play store, we notice that the Play services update is working.

So that leads us to believe that when an Android app has a foreground notification running, Play services won’t update it automatically, because it is still running and Play services doesn’t want to update a running app. I don’t expect many developers are using long-running foreground notifications, but FYI for those that are.

While that foreground notification is present, your app is running, and it looks like Play services won’t upgrade your app while it is running in the foreground.

life: the epic road trip

Stats:

  • duration: 23 consecutive days
  • driving distance: 6747 miles
  • longest single day: 856 miles, 15 hours driving (not including breaks)
  • total hours driving: 112
  • average mpg: 29.1
  • gas consumed: 321 gallons
  • number of kids upon departure: 5
  • number of kids upon return: 3 (2 left at college)
  • family groups visited: 9

Monuments / Parks / Museums visited:

  • Frazier History Museum: Louisville KY
  • Gateway Arch: St Louis MO
  • Keeper of the Plains plaza: Wichita KS
  • Mesa Verde National Park: Cortez CO
  • Canyon De Chelly National Monument: Chinle AZ
  • Inter-Tribal Indian Ceremonial: Gallup NM
  • Petrified Forest National Park: Holbrook AZ
  • Meteor Crater: Winslow AZ
  • Historic Route 66: Winona & Williams AZ
  • Grand Canyon National Park: Grand Canyon AZ
  • Cedar Breaks National Monument & Brian Head Mountain: Brian Head UT
  • Bryce Canyon National Park: Bryce Canyon UT
  • Capital Reef National Park: Torrey UT
  • Goblin Valley State Park + Little Wild Horse slot canyon: Hanksville UT
  • Arches National Park: Moab UT
  • Colorado River rafting: Moab UT
  • Mountain biking + horse ride: Moab UT
  • Mormon Tabernacle Choir broadcast: Salt Lake City UT
  • Field Museum: Chicago IL

My favorite moments:

  • Standing at the top of Brian Head peak, 11307 ft elevation, 53 degrees fahrenheit on a sunny August day (not including a significant wind chill), able to see for 100+ miles in every direction.
  • Hiking across amazing landscapes.
  • Laying on a blanket on a cloudless moonless night in Arches NP looking at the stars.
  • Enjoying the dry air (low humidity). It really does make a difference.
  • Driving on a section of historic Route 66 while the kids watched Pixar’s “Cars” movie, and in the end credits the song “Route 66” played while we were driving through “don’t-forget” Winona Arizona.

We flew my oldest daughter home from college so she could do the trip with us. I’m thinking it may be the last time we have all the kids together for a big trip like this. Even after being in the minivan for 3 and a half weeks, at the end I told my wife that I could keep going if there was no need for me to have a job and earn money. The kids did really well. It was work, but it was fun, and we saw amazing sights, and I got to spend quality time with my family.

The following pictures were taken with my phone, and are untouched.

Near the peak of Brian Head mountain
Sunset clouds over the resort at Brian Head
Waiting for dinner to be served at a restaurant after a day of driving and hiking.

life: going to college with financial responsibility

Now that my second child is on their way to college, I think my wife and I have narrowed in on an approach to higher education that is sustainable. Here are the principles we’ve been teaching and doing with our children.

Go to a school that is affordable.

It would be great fun to drive a Ferrari 458. Really great fun. But until I win the lottery, it’s just not realistic to own a $250,000 car. Instead I drive a low-end Acura. The Ferrari is literally 10 times the cost of my Acura. Does that make it 10 times better to drive during my daily commute? The Acura serves me very well. There are way better things to spend my limited money on. The same concept applies to schools. Is the small class size and name and some extra networking opportunities really 10 times better than a qualified school with in-state tuition? Perhaps better, but 10 times better? I think you have better things to spend your limited money on. If you can get scholarships or tuition reduction, then go for it. If your money is unlimited, then go for it. Want to take out loans for the expensive school? Read the next item.

Do not go into debt.

I hear people talking about exiting school with a degree and 50 or 100 or 200 thousand dollars in debt. I find that crazy. It’s a mortgage that you can’t live in that will take 30 years to pay off. Do you really want to burden your existing or future family with that much debt? It does not have to be that way. Pay as you go. If you need to take a semester or a year off of school to earn money to carry you through the next period, do that. There is absolutely no shame in that. You need to go at the right pace so you exit school with zero debt. And don’t go into a crazy-expensive private school – there is no shame in a public university.

As parents, we will match whatever you can get.

I can help because it is expensive, but I want you to have financial skin in the game. So we will do a 1-for-1 match of whatever income or cost offset you can get. Get a job and earn some money, and we’ll kick in a matching amount. Play video games and hang with your friends and earn nothing, and we’ll kick in nothing. Now do you have motivation to put it in that scholarship application? My first daughter is earning money to cover her living expenses, and we pay for her tuition, these being roughly equal. I like that arrangement, as she gets quicker feedback on managing her living expenses, those being more variable than her tuition expenses – she learns budgeting and balance.

As parents, we will cover your first semester or year expenses while you get your feet under you.

It can be a tough transition from high school to college. When you get to college you are going to need to apply yourself at a substantially different level than that last year of high school where you breezed through your classes and had a case of senioritis. Although ultimately I want you to be financially responsible for your education, more importantly I want you to be successful in your education. In the beginning I want the transition to college to be successful. I don’t want the first year or semester to be a failure when you combine tougher school with a job, which may also be the first time you’ve done this combination. So focus on school for the first semester or year, figure it out, and I will cover your tuition and living expenses. I’m not going to cover your playing expenses: learn to be frugal and figure that out on your own.

Although we are helping financially, you are responsible for getting the bills paid.

Is tuition or rent or meal plan payment due? I’ll transfer my contribution to your bank account. But you need to go to the tuition office and write the check or set up the draft, make sure the funds are in the account, and keep track of the due date and get it in on time. That’s just part of being an adult. And you’ll be doing these kinds of things the rest of your life, so you better know how to do it now, because they are really important.

I don’t want to sound judgmental, but having parents pay for everything and the kids not having any responsibility was not how we wanted to do it. I love my kids and I want to help them grow, be responsible, and independent. This is part of our path in getting there.

food: the North Carolina Historic Barbecue Trail

I stopped by a recommended BBQ restaurant recently (Hersey’s in Graham NC), and noticed a plaque on the wall. Part of the plaque reads:

NCBS (the North Carolina Barbecue Society) has designed a barbecue trail from Eastern North Carolina to Tennessee. The trail will meander across the state with stops at 24 NCBS Historic Barbecue Pits. These pits were carefully and selectively chosen by the NCBS board as representatives of the distinctive methods and barbecue cooking styles that have made North Carolina the Barbecue Capital of the World. Each NCBS Historic Barbecue Pit still cooks the old fashioned pit cooked method. And each NCBS Historic Barbecue Pit will proudly display a specially designed emblem depicting old style barbecue cooking that is part of the tradition, heritage and culture that NCBS seeks to preserve.

This is for real. And when I got home I looked it up. Yup, there is a map that meanders through the state, with a cluster of sites in the center of the state. Time for a road trip!

life: visiting Disney World?

My family visited Disney World over the Christmas holiday. Yes, this is the absolute peak season for visitors. So I went bracing myself for an hour in every line all day long. Right before leaving we talked to a neighbor who recommended a service named RideMax. He told me you feed it a list of things you want to see at the park, and it optimizes a plan for what to see when. I said we’d give it a try.

So we did give it try. We spent a 4 days at the parks, and we never spent more than 15 minutes in a line. Again, this was during the peak season. The wait times we saw posted as we walked by other rides were between 30 and 120 minutes, most were an hour or more. We paid $15 for our RideMax subscription, but I would have paid $100 for it with the value we got out of it with 8 people for 4 days. We were totally sold on how it works. I assume it sends us to where the crowds aren’t. We wandered off the plan once, and paid for it with a 90 minute line – we learned to stay on the plan. We got to see everything we wanted to, it just gave us an order and a time for each. We even got done with our plan a bit early. We were able to modify our plan from our iPhone.

If you’re going to one of the Disney parks during a congested time, I highly recommend RideMax. Personally, I won’t go without it.

life: family guidelines

Several months ago my wife and I were lamenting some of the things we saw weren’t going well in our family. So after some long talks, we came up with a set of guidelines for our family that really hits the nail on the head (at least for the issues our family is struggling with). There are three parts:

Love, Respect, Kindness. The bickering, mean voices, not sharing, and general selfishness are things we do not want in our home. It really sucks the spirit out when these things are going on. And it’s not right to be nice to strangers and mean to your own family. Close quarters does uncover the flaws in people, but we are all flawed and we need to deal with it. The attitude we have can make all the difference.

Do Your Duty. It’s not fair to have 5 capable people making a mess of the house and not cleaning up after themselves, leaving mommy to do it all. Do your homework before your recreation. Many hands make a light and even load.

Play Together. We need to have fun, and we need to do some of it together instead of in isolation. We need to budget time and money for family activities, and do things we can all participate in, whether it is a trip somewhere for a couple days, a handful of milkshakes, or a board game on a Sunday afternoon. We need to have positive interaction together and build memories.

I share this in the hope that someone else might benefit from what we’ve learned, and to see if there are suggestions from others.

life: extending the life of a household water heater

My home has a gas-powered hot water heater located in the walk-up attic (3rd floor). I’d like to give the architect a dope-slap for doing that. Especially when the master bath directly below the water heater takes the longest to receive the hot water. But the real reason why the attic location is an issue is because there have been four incidents where the water heater has leaked which ended up sending water spilling down the lower two floors. If only they could have put it in the garage. Sigh.

Anyway, one of the leaking incidents occurred recently. I just woke up the kids for school. I’m standing in their bedroom on the 2nd floor and asking myself, “why do I hear water running above me?” So I grab a flashlight and dash upstairs to the attic. There is water flowing out of the top of the water heater and down the sides, as if it has ruptured. At least the water heater is surrounded by a drip pan which drains outside the house. The drip pan was full to the brim, and just a little bit had spilled out. I quickly shut off the inlet valve on the water heater and the pan continued to drain. It looked like less than half a gallon had spilled outside of the pan, I consider myself very lucky. Time to call for a replacement water heater. I also take note to make sure the drain on the outside of the house for the drip pan is free of debris that may interfere with draining.

Since the water heater is in an attic closet bounded by the A-frame roof, there is limited height. It turns out that my water heater is a few inches shorter than the typical short model, so it is a bit of a specialty product that the typical big-box retailers don’t carry. So I need to call a real plumber. Although the plumber did a first-class job and was done within 4 hours of when I called them, it also cost me $1100. Ouch.

So while the plumber was working, I was my usual inquisitive self and was asking questions. And I had done some research on the net before calling the plumber. The typical lifespan of a water heater is about 8 years. Mine had died at about the 9 year mark, so it wasn’t out of bounds. The most common cause of water heater death is a build-up of sediment at the bottom of the tank. This sediment is present in the water supply, and simply settles while in the heater. There is a relatively easy way to flush out the sediment, which until then I had never heard of. Here is what the plumber told me:

The water heater should have on it what looks like a spigot near the bottom where you can attach a garden hose, just like the hose bib on the outside of your house you use to wash your car and water your garden. And once a year, you should do just that – a power flush. Get a garden hose (make sure it doesn’t leak before you do this), connect it to the spigot on the water heater, run the hose to a safe location (ie, a bath tub or out a window to outside), open the spigot on the heater and let the water blast though the hose for about 5 minutes. The water will be hot, so be careful that the hose and water output doesn’t hurt anyone or anything. Do not shutoff the inlet of the water heater, you want the water to blast out of the garden hose at pressure instead of simply (partially) draining the tank without pressure. The reason you want it to be pressurized is because of what is behind the spigot – a tube that causes the water flow to stir up the sediment on the bottom of the tank so it can be flushed out the spigot. When the 5 minutes are up, close the spigot (make sure it is fully closed), and remove the garden hose. Be careful of hot water that may still be in the garden hose while you are removing it.

You should do this once a year. I got a Sharpie pen and wrote on my new water heater “flush on March 15”. Had I known about this earlier, I would have done it and would expect a longer lifetime of my water heater. The plumber said that it should be possible to get several more years than average from a water heater that is well-maintained.

life: advice for the new father

After having significantly more kids than the average family (well, I didn’t give birth to them, but I did cut the cord), to say that I have learned some things is a vast understatement. Some of these things took a long time to learn, even as late as the last kid. For the men out there that are a first-time dad, here are some of the lessons I learned.

  • Having kids is the most wonderful thing that can happen to you (outside of getting married to a wonderful woman, of course). Having kids will also be the most stressful and trying thing that can happen to you, which hopefully is unlike what happens being married to a wonderful woman. Let me be blunt: having kids will force you to give up selfishness. You are going to have to put more things than you are used to of your own desire on the back burner. Prepare yourself for doing that, and do it willingly, and do it out of love for your family. Guys typically aren’t naturally good at this. You aren’t supposed to completely sacrifice yourself, especially in a passive-aggressive manner, but you are going to need to give up things. If you can be selfless, and do it for the right reason, you will be amazed at the happiness it brings to you and your family. Not giving yourself to your family is going to put your wife through the wringer, don’t do that to her.
  • If you wife has a vaginal birth (not a C-section), you are going to need to give her time to heal before being physically intimate again. Being intimate will happen again, especially if you do the bullet above. However, recognize that pushing a small watermelon through your pelvis is going to do some damage. If you listen to the OB, they will probably give you an estimate on how long your wife will need to heal after birth. I suggest that you double it. Putting your wife in pain for your satisfaction is not consistent with the spirit of physical intimacy, no matter that you are not used to waiting that long. Be patient and deal with it. If men were the ones to get pregnant and give birth, we would go extinct as a species.
  • I was talking to a guy several years ago, and he said, “When I have kids, I will work at my employer as long as possible every day so I can afford to buy my kids all the stuff I didn’t have.” My response was, “Dude, kids (well, the small ones until we teach them otherwise) don’t care about objects. What they want is your time. They are happy playing with a big cardboard box, and they want you to get on the floor and play with them and read them stories. They don’t need things, they want you.” The best present you can give your kids is yourself when they ask for it. That doesn’t always correspond to when you want, or what you expect. When you depart from this mortal life, your family is the only thing you can take with you. The sad thing is that at some point your kids will probably stop asking to play with you.
  • It is so easy for your wife to get completely consumed with being a mom. With a newborn, there is not a full night’s sleep and there are no vacation days.
    • You have to give her a break. When you come home from work, take over the kids and let your wife do something of her own choosing for a couple hours. It doesn’t matter if you had a hard day at work and need some break time, she started when she woke up in the morning and won’t finish until she goes to bed, and likely there will be middle-of-the-night fulfillments. That’s more than your 8.5 hours.
    • The rule is “when the baby sleeps, mommy sleeps.” Baby naps are not always to be used for mom to catch up on chores. Mommy needs to catch up on sleep so she can be a functioning person. When she is caught up on sleep, then she can catch up on chores.
    • Don’t forget that your wife is still your wife and not just a mom. It is very easy for both parents to become parents and forget to be spouses. Find someone you trust to be a babysitter earlier than you think. Go out for a short date and talk about things other than just the kids. The intention is for the kids to grow up and leave the house, but your wife should stay with you.
    • The house is going to be a mess. Just expect it. Instead of being part of the problem, be part of the solution. You will need to own more chores. There is no sharing equally and keeping track of points. You need to jump in and do as much as you can, independent of what your wife may or may not have done.
  • If your wife is breast feeding instead of using formula, her breasts will get bigger. However, they also become very tender, especially at the start of nursing. Treat her carefully. The skin will toughen up over a few weeks to handle the nursing. They will return to usual size after nursing stops. Also, when a baby is breast feeding, the poop actually isn’t too bad. It’s when you go to formula or solid foods that it turns into the classic stinky mess.
  • Be patient. Take a deep breath and don’t have a temper. Kids will throw enough temper tantrums, you don’t need the parents doing it too. Just let the unimportant things go. Yes, having kids will dramatically alter your perspective on what is important. Lack of patience is one of the easiest ways to mess up a family.
  • Jump in and be willing to figure it out. Every child is different, and every parenting situation is different. Figure out what works for you and your family. Experiment. What works for child #1 may not work for child #2, even if they are twins. You’ll find lots of things that don’t work, followed by an “aha!” moment.
  • The What to Expect When You’re Expecting and What to Expect the First Year are good books that dads should follow along in as their wife reads. At lot of stuff that seems weird actually is quite normal. And the only way to learn it is by experience.
  • Kids don’t actually cost very much money, except perhaps in healthcare. If you can get hand-me-down clothes or go to Goodwill (they destroy clothes anyway), it’s really not bad. They don’t eat much, don’t need expensive toys, can travel in your lap on airplanes, etc. Don’t bother buying them nice new expensive things, because when they are little they don’t care. It’s later when they need car insurance and college tuition that it starts to hurt your wallet.
  • Kids are amazingly resilient. They bounce good. Typically the parents need to take a deep breath instead of panicking.

I hope you find this useful. Having kids is a trip. I didn’t think it would be so before it happened, but my life would be so empty if I lost my kids. My life is way more complicated now with kids, but I’ve grown to prefer it that way – it’s more fulfilling.

life: confessions of a LASIK patient

It’s not something I was originally looking to do. We had been using our pre-tax health savings account for the kids’ braces, and miscalculated the payment schedule, so we are at the end of the year with $2000 of unused money in that account. Use it or lose it. (I checked, when unused the money reverts back to the employer, not the government.) So my wife said “Aha! I want to get LASIK.” The procedure costs about $2200 per eye, so our health savings account would cover about half of the total cost. Our assumption is that it is better to spend another $2000 on something you want rather than throw the original $2000 away (we may need to rethink that one). She went in for a consultation, and discovered that she isn’t a good candidate because her cornea is too thin for the procedure. For her vision to get corrected, they were recommending a corneal implant, but it would be twice the cost and it sounded more risky. So she nixed the idea of corrective surgery. So she says to me, “Hey honey, how about if you take a look at LASIK?” I’m a bit uncomfortable with the idea of getting corrective surgery, since my career is sitting in front of a computer screen all day, and my contacts and glasses work fine, I’m worried about long-term complications. Losing my eyes would lose my career. Since getting an initial consultation has no cost and no commitment, might as well give that a shot. So I make an appointment.

After a number of tests, the doctor tells me I’m a good candidate. My uncorrected vision is 20/200 in one eye, and a bit worse in the other eye. However, with my glasses I can see 20/15. I do have some astigmatism that make my contacts more like 20/20. One of the doctor office people goes into detail explaining the procedure and such. Later I ask a friend at church who is an eye surgeon in the military about the procedure and the equipment that this office uses, he says he has performed about 60 of these procedures on patients, and had it performed on himself about 2 years ago, and he feels confident with it. He recognizes the equipment at this clinic (VISX Star S4 IR Laser / iLASIK / WaveScan / CustomVue) and says it is widely used and pretty much state of the art. So I’m thinking that if a doctor in this field would do it to themself, that is basically the ultimate test of confidence.

The office has an appointment open for the following week to perform the procedure, so I take it.

I’m asked to not wear my soft contacts for a week before the procedure. I’m told it has something to do with affecting the shape of the cornea, and they want it to be stable for the procedure. So I wear my glasses for a week (even during a touch football game that week).

There are two lasers that will be used for the procedure. The first, the intralase, creates the corneal flap. The second, the excimer laser, reshapes the cornea after the flap has been peeled back.

On the day of the procedure I show up at the office at 8am. No need for fasting, since there is no general anesthesia. They take me into a room for another test, they kind where you sit in a chair and put your chin and forehead in front of a machine that looks in your eye. It’s a scanner that measures my eye so that the excimer laser knows what to do. The office’s brochure says “…the VISX WaveScan creates a WavePrint map, which reveals the way your entire optical system processes light. This creates a personalized fingerprint of your vision…allowing each of your eyes to be treated for their unique imperfections.” Relax and look at the red dot.

Then I’m taken to a waiting room. I’m given an optional Valium dose and some consent / waiver papers to sign. I read the papers and I see a few things that surprise me. First is verbage about getting one eye done at a time, therefore if something goes wrong, at least you still have one good eye. So it asks for me to write a short explanation why I want to have both eyes treated at the same time, as if doing so is a bit unusual. Funny, I don’t remember the doctor explaining that as an option, but my memory isn’t perfect. Second, there is some verbage explaining the risks of the procedure which includes terms like “potential catastrophic loss of vision”. That gives me pause. I had asked before quite a bit about the risks and the answers all sounded reasonable. So I assume this verbage is the cover-your-butt legalese (“you acknowledged that it was possible for this to go wrong”) and sign it. They give me several doses of anti-bacterial drops and a dose of numbing drops.

I am given a surgical cap to match my street clothes and proceed to the intralase room. The intralase system shines a laser to create small air bubbles in the cornea. Once the bubbles are there, the corneal flap can be peeled back without the need for a cutting knife. The staff tells me that the nice thing about the air bubble approach is that if the doctor doesn’t like how the air bubbles have formed, the rest of the procedure can be aborted and the air bubbles will dissipate on their own within a day or so. I lie down on a table (reclined chair, actually) and am given more numbing drops. They then bring out a device that looks like a small magnifying glass with the handle. The lens of the magnifying-glass thing is small enough fit on the surface of my eye, which is what they do. It doesn’t hurt, and I can see through it. Then I hear the doctor tell the technician, “Apply suction.” Then I feel this magnifying glass thing start sucking itself firmly onto my eye, and the vision in that eye goes dark. It’s hard to describe other than being visually numb in that eye. But the eye isn’t entirely physically numb, I feel the suction. The suction was a bit uncomfortable, even for someone used to contact lenses. Then a good-sized machine is placed over me that looks like a digital camera that is 3 feet wide, with the lens right over my suctioned eye. This is the intralase laser. Then the lens of the intralase laser then is slowly lowered until it makes contact with and is lined up to the magnifying glass on my eye. But then it keeps going, pushing down on my eye and creating pressure. It creates quite a bit of pressure, or in technical terms, it squishes the heck out of my eye. Since I’m laying on a table, I’ve got nowhere to back up. I let out a gentle verbal “aaaaaah” to let the staff know I’m uncomfortable (although not in significant pain) and the doctor says “Yes, the pressure may be uncomfortable, it won’t last long.” After about 30 seconds of squishing the machine lets up. The pressure was such a distraction I didn’t even notice the intralse laser working. They release the suction on the magnifying glass thing and I let out a sigh of relief. They repeat the process on the other eye.

After the intralase is done with the second eye I can see, my vision is like looking through glasses that have been smeared with Vaseline. I assume I’m looking through all the air bubbles that were just created. They lead me down the hall to the room with the excimer laser. I lie down on the table (reclined chair). They place a shield over one eye and start working on the other. They start by taping back my upper and lower lid. They then place what looks like a round grommet in the eye, I’m assuming it is to prevent the lids from interfering with the corneal area. About 2 feet in front of my face is the excimer laser system, it has an illuminated white circle and a flashing red dot in the middle. It’s kind of like an electronic Cyclops. I can see the doctor gently poking around in my eye with a small instrument. After a few moments of that, the Cyclops becomes more blurry that it was originally. I assume at this point that the corneal flap has been peeled back. They ask me to focus on the red blinking light. Another few moments and then I can hear the staff saying words like “acquiring…verifying…25 seconds…” Then I can hear them counting down and the laser is making a loud clicking noise. Midway through this there is a difference in how focused that the Cyclops appears. The clicking stops and then the doctor does some more gentle poking around in my eye with an instrument. In a moment the Cyclops comes into better focus, and I assume the corneal flap has been placed back. The grommet is removed, the tape is removed, and they move to the other eye. After the numbing drops I received earlier, and squishing of the intralase system, I don’t really feel a thing during this entire excimer process. As far as the discomfort goes, if you can survive the intralase process, you are home free. The tape removal (with a couple of my eyebrow hairs) is what hurts the most in the excimer room.

Then I am led to a regular exam room and the doctor uses a regular non-invasive microscope to look at how the corneal flap is resting. He says “Perfect.” And I’m done. They lead me out to the waiting room for my wife to take me home. Since the air bubbles are still present, my vision is too cloudy to drive myself, and there is a bit of discomfort in my eyes. It feels best to leave them closed. But I can open them enough to dial my cell phone. They give me a packet that includes two kinds of medicated drops, and a package of lubricating drops. There is more stuff in the packet which I’ll describe below.

My wife takes me home. I can see a bit, but I prefer not to keep my eyes open. I lie down in bed to just rest, turn on my iPod, and the Valium in my system helps me take a 2 hour nap. I’m supposed to take the medicated drops every 2 hours, so I do that after I wake up. The drops don’t hurt. I get a bite to eat. Now my eyes are starting to hurt, as the numbing drops wear off, and I definitely prefer to keep my eyes closed. I lie back down in bed and put my iPod back on. I take another unanticipated 2 hour nap, I’m assuming it’s the Valium still in my system. My eyes feel like there is some sand in them but not scratchy. More drops, this time I stay awake through the podcast I was listening to earlier. About 6 hours after the surgery, the discomfort starts to get better. Keep putting in drops every 2 hours. I still prefer to keep them closed, and I figure out part of it is light sensitivity. If I cover my head with a blanket so it is dark, I can open them longer than in the light. Still hurts a bit.

Some friends come over that evening to check on me. I can see them and walk around the house by myself, although there is still some cloudiness. One of them says, “Wow, I was expecting to see you with giant bandages on your head, and instead no bandages and you can even see me.” Considering that 8 hours earlier my eye was peeled open and shot with a laser, it is pretty amazing. I get a good night rest, even with the day naps. For the first week, I need to wear sports goggles while sleeping at night. I assume it is for side sleepers so the pillow doesn’t put pressure on the eye, or to prevent you from rubbing your eye and displace the corneal flap.

The next day the sandy discomfort is gone. I can see with good focus but with what I’d call a “halo effect”. Any areas of high contrast appear to have a fuzzy halo around the bright part. It’s almost like I have my glasses with a little bit of fog. I go to the doctor’s office for a followup visit. The vision in both eyes is checked with the usual chart and I can see 20/15 in both eyes, even though I still have the halo effect. I ask the doctor about the halo effect, and he says it is normal and will probably take about 3 months to clear up. I work at home using my laptop most of this day. I’m back in the office the next day.

A few days later, the cloudiness has cleared up but the halo effect is still there. I’m starting to get used to the halo a bit. The halo does cause some difficulty for night driving, but it is manageable if I am careful where to look and concentrate. I also have an increased need to wear sunglasses in daylight.

It feels quite weird to not take my contacts out at night and instead go to bed with clear vision and wake up with clear vision. I do feel a tiny bit of pressure around my eye, but perhaps that is from the cold I have. A week after the procedure I should be able to graduate from the medicated eye drops, but I’m told I should use the lubricating eye drops for at least a couple more months. So far so good. I’ll consider it a real success when the halo effect goes away and I don’t need eye drops anymore.

In retrospect, there wasn’t much pain or discomfort.

You might want to take a look at Wikipedia, they have a pretty good article on the subject.

I’ll post followup comments here.

fun: recipe for cinnamon rolls

Almost as good as that expensive store in the mall, which I won’t name. These are less expensive and you don’t need to stop eating at one. There is a recipe in our house that I’ve been playing with. So far, everyone loves these and they are reasonably easy, especially if you have a bread machine.

I have noticed that there is a difference between butter and margarine. Using butter in the bread dough gives it a delicate texture without being crusty greasy that margarine does. But using margarine in the filling and frosting makes it more sweet than butter. So I selected margarine and butter in specific places below. Or if you want you can go all butter.

Plan ahead to take the margarine and butter (all 3 sticks) and cream cheese out of the fridge in plenty of time to warm to room temperature before using.

BTW, “tsp” means teaspoon and “tbsp” means tablespoon. Read carefully.

Bread machine dough:

  • 1 cup water
  • 4 cups bread flour
  • 1/3 cup sugar
  • 1 3/4 tsp salt
  • 1 stick butter (room temperature, slightly mushy)
  • 1/4 cup dry milk
  • 2 eggs
  • 2 tsp yeast

If you are not letting this sit uncooked for a long time, you can substitute the water and dry milk for 1 cup of regular (wet) milk, if that is easier for you.

Dump all the above items at once into the bread machine and run the dough cycle (mix and knead, not bake). Prepare a flat surface like a clean countertop where you can roll the dough. You’ll want to flour-dust the surface so the dough doesn’t stick to it. Take the dough out of the machine and roll it out. Aim for a rolled-out rectangle of bread dough that is approximately 12″ x 24″. It’s OK if it isn’t a perfect rectangle.

Filling:
Take a 1/2 stick of margarine or butter (room temperature, slightly mushy) and evenly spread it across the entire dough surface using a spatula or similar. Go all the way to the edges. In a bowl mix 2 cups brown sugar and 3 tbsp cinnamon (ground). Brown sugar works much better than white granulated sugar, and common ground cinnamon is fine. Use a fork to mix them together in the bowl and break up the brown sugar lumps by squishing them. Dump the mixture on the buttered dough surface and evenly spread it around the entire surface with a spatula or similar, all the way to the edges.

Roll up the dough, using the long side of the rectangle: the roll should be 24″ long when complete. Keep the roll reasonably tight instead of saggy. When done, you should have a roll that is 24″ long and about 3″ in diameter. Using a steak knife or other good cutting instrument that cuts without too much squishing or ripping, gently cut the roll into pieces about 1 3/4 inches wide. You may wish to discard the two end pieces you cut from the roll, because they are uneven, but only if you are a perfectionist. Otherwise dunk them in cinnamon sugar and put them in the baking pan too. I would recommend a spray of Pam on the baking pan, even though there are already 2 1/2 sticks of butter present. Gently place all the cut pieces into a baking pan on their flat cut side. When placing in the pan, try to avoid letting the cinnamon sugar filling fall out. The rolls should be spaced out in the pan. It should fill about a 9×9 pans plus a 9×13 pan. Give the dough time to rise, so that the rolls in the pan are starting to touch each other. Placing the pans in a 150 degree oven may help the rising process if you are in a hurry. Cover the pan while rising to keep the dough from prematurely drying.

If the rolls fail to rise, then the filling will run out and pool on the bottom of the pan during cooking. If this happens, take the rolls out of the pan quickly after they are done cooking, then the pooled filling while it is still soft can be scraped off the bottom of the pan and mushed on the top of the rolls. If the pooled filling cools in the pan, then it acts like dried epoxy. It’s better to budget at least a couple hours for rising so you don’t get pooled filling.

Bake the rolls at about 385 degrees until the the bread dough on top starts to show a bit of toasty brown. You don’t want them to overcook, as the bread could turn dry. You want them to stay a bit moist, with a very slight hint of dough. Take them out of the oven to cool a bit. Let them cool inside the cooking pans, they will soak up some of the melted filling. While they are cooling, work on the frosting.

Frosting:

  • 4 oz of cream cheese (room temperature, half of a standard 8 oz package)
  • 1 stick of margarine/butter
  • 1 1/2 cup powdered sugar
  • 1 tsp vanilla extract
  • 1/8 tsp salt

Put all these ingredients into a bowl and blend with a motorized mixer until it changes from dusty clumpy to smooth moist frosting. You might want to add a bit more vanilla extract for some more flavor.

After the rolls go from hot to warm, apply the frosting. If you put the frosting on while hot, the frosting will melt completely, which probably isn’t what you want. Eat them soon after applying the frosting, while they are still warm. All of them, which is why some friends or neighbors should be present or within delivery distance. This ain’t health food, it’s happy food.

personal finance: credit bureau freeze

Be careful of how much debt you carry. A mortgage is OK, but creditors will generally give you a bigger loan than you can really afford. An automobile loan is OK, but recognize that an automobile can depreciate faster than you can pay the loan – it sure isn’t an investment, it’s pure expense. One credit card is OK for purchase convenience, not carrying a balance. If you have all three of these, you don’t need any more. I’m tired of getting pre-approved offers in the mail literally twice a week all year long.

Also be careful of how much personally identifiable information you disclose. If a web site asks for my birthday for marketing purposes, I won’t give it. If they require it, I will give a fake one. If you’ve talked to anyone hit by identity theft, you don’t want to experience it yourself.

For these purposes, I have asked the credit bureaus to freeze my personal information so it isn’t disclosed to lenders. Since lenders need to know my credit worthiness before approving credit, this means no credit can be opened in my name. Right now I have all the credit I need and don’t need more. This also prevents someone else from obtaining credit in my name without my approval, i.e. identity theft. If I do need to get more credit, I can unfreeze just long enough for the new lender to approve me, then it goes back to a frozen state.

Clark Howard has some good pointers on how to freeze your credit information. You need to do it with each of the three credit reporting bureaus. All it takes is a letter and $10 for each one. Clark even provides the form letter. My requests were processed in about one week. Frankly, I recommend everyone do this. Recognize that the credit bureaus are in the business of selling your credit information to lenders, and lenders are in the business of getting interest and fees from you. Nobody is in business for you except yourself.

You also are entitled to a yearly credit report for free. Get your free report each year to make sure it is accurate. Then when you need credit, there won’t be any surprises. Start with the US Federal Trade Commision web site to make sure you go to the right site that offers the free credit report (there are copycats/imposters out there that may require costs).

Keep your finances in order and you’ll avoid a lot of pain.

cars: replacing the dash lights in a Honda Odyssey

I have a 2000 Honda Odyssey, and although it has been a wonderful vehicle, it is at the age where the dash lights are starting to burn out. So my clock backlight has failed, along with the lighting of several buttons on the dash. When I went to get parts at the dealer to replace the clock backlight, it turns out that the person in front of me in line at the parts department was there for exactly the same reason for the same model. It’s relatively easy to do, if you know where to start. That’s what I’ll explain here. I started taking the dash apart to access the clock backlight, but you’ll get to the other lights along the way (except the instrument cluster).

First, the bad news. The clock doesn’t pop out forward from the dash. It pops out backwards behind the dash. So don’t try to pop out the clock from the front of the dash, you’ll just end up damaging the dash. This means to access the clock you need to take out 3 large pieces of the dash. The good news is that most everything just pops out. What doesn’t pop out is held in only with standard screws. Once you understand how it works, you’ll say “ah, that wasn’t so bad.”

wedge

The first two major parts of the dash just pop off. It’s not difficult, but it’s not obvious what to do. I started prying next to the steering column and gently worked my way across. I started at similar points on both sides. Then you can slip your fingers behind and gently work it until it pops completely loose. For the prying I used a plastic/vinyl flat tool that happened to come from my kitchen. I would recommend against a hard tool like a screwdriver because you’ll leave marks. The plastic kitchen tool I used left no marks.

right_cables

Once you’ve popped it loose, don’t try pulling on the fascia to get it completely away from the dash. Each piece of fascia has switches with wiring that goes behind the dash – those wires are still connected. The wiring for each of these switches can be disconnected from the switch, and once that is done then you can move the fascia all the way away from the dash. Each wiring connector has a tab that locks it onto the switch, so don’t try disconnecting the wiring by force. Instead you’ll need to find the tab for each connector, depress the tab (they do take a bit of effort), and then the connector should slide off with an unforced pull or a little bit of wiggling. DO NOT pull by the wires; instead you should be pulling by the block connector while depressing the tab. Some wires have more slack than others, so you may find that a certain order of disconnecting/reconnecting is needed.

For the right fascia around the stereo, the shortest wires are for the interior light switch and the fog lights (if installed) – do those two first. Then you’ll have more slack for disconnecting the three wire groups for the climate controls. My van does not have the satellite navigation.

Here is a picture that shows the back of the right fascia, so you can see where the wires connect to.

facia

For the left fascia around the sliding door buttons, the wires were about equal length so just do them in the order that you can reach.

Now the bottom half of the dash on both sides is removed.

left_screws

right_screws

Next comes the top half of the dash. This is all one piece. It is held in by screws along the bottom, and tabs across the top. Get a phillips screwdriver and remove the screws (don’t lose them). Then gently work the top half of the dash out. It is not connected to the instrument cluster (speedometer, etc.), just the border.

clock_cables

Again, be careful of the wires for the clock and hazard blinkers – you must disconnect the wires using the tabs before pulling the fascia all the way away from the dash. Once you’ve gotten this far then you have completed disassembly.

clock_rear

Now that you can access the rear of the clock, the bulb comes out with a quarter turn of a screwdriver. It looks to be the size of an LED, but I think it is a regular but very small bulb. You can also verify it is burned out by using a multimeter to test for continuity. Put the new bulb in (should cost about $3 at the dealer). While you are there, check the rest of the bulbs in the switches and the climate controls. I think there are two different kinds of bulbs: the common one is for backlighting, and the other is for “on” indicators such as the cruise control and fog lights.

For the top half of the dash, position it in the correct place, reconnect the wires, pop it in, and replace the screws. Do the same thing for the left and right fascia, except that there aren’t any screws. Just remember to reconnect all the wires, or some things will stop functioning.

You’re all done! See, that wasn’t so bad. Don’t you feel proud that you didn’t pay the dealer $90 in labor?

mosquito bites: getting rid of the itch

I live in an area where mosquitoes are common. You don’t want to be outside at dusk without repellent, or you will get eaten up. And I hate mosquito bites and the itches. A bite will bother me for 2-3 days. I am better at dealing with pain than itches. Thank goodness for DEET to keep the nasty critters away. In the event that repellent doesn’t work or I didn’t put it on, there is another alternative: After Bite.

After Bite is a liquid that you put directly on the bite after it has occurred. It reduces the itching. In my opinion, it really reduces the itching, depending how soon you put it on. If I notice an itch coming on within a few minutes after getting bit, and I put on a couple applications of After Bite, the itching generally goes away in less than an hour, and the swelling also goes down. This all may sound like a TV infomercial, but the stuff really does work for me, seriously. Of course, don’t scratch the bite area even with this treatment.

From what I can tell, the active ingredient is ammonia, it’s not an anti-histamine like Benadryl or an anti-inflammatory like Cortaid. I don’t think it smells as bad as repellent, and I wouldn’t have guessed that ammonia would have this effect, I can just say that it works for me. I have found After Bite at Eckerd and Target, so I would assume you should be able to find it at similar retailers. In the stores it’s generally located next to the repellents.

Hmm, maybe the dad in My Big Fat Greek Wedding was on to something with the Windex…

tips: the “newspaper” test for decision making

Have a decision to make at the office, and it isn’t obvious what to choose? Usually we look for positive confirmation using tools such as rationalization. But it can be often helpful to try negative confirmation. This approach can open up a whole new world of insight.

Use this handy little tool that I call the newspaper test. First, make a tentative choice, then think of the worst case scenario for that choice, then plug into this template:

  • Headline: [worst case scenario]. [the choice]. What were they thinking?

Let me give you an example:

  • Headline: Lost all the source code for the product, release date delayed indefinitely. They never got around to putting it into the repository before a hard drive crashed. What were they thinking?

The second stage of this test is to pretend that the above item is printed in a newspaper that your coworkers, management, and competition read. Now put yourselves in their shoes, and ponder on how they might react to such a published item. For example, think about what the newspaper article would infer about your decision and what the consequence might be. For example:

  • Infers: ouch.
  • Consequence: Marcel, call for you on line 2 from the VP. She doesn’t sound happy. Do you have your financial affairs in order?

Now the nice thing about this tool is that it works on a range of data. Let’s try another example:

  • Headline: Lurking bug found minutes before they started manufacturing. They ran the testcases just one more time to be sure. What were they thinking?
  • Infers: awesome. This is a person that makes sure things are right and is constantly thinking about customer satisfaction.
  • Consequences: Marcel, this poster-mounted award check for you doesn’t fit through your doorway by myself. Can you give me a hand?

And as an added bonus, this tool also works for personal situations outside of the office. For example:

  • Headline: Mayhem. Father lets 3-year old play inside car with the keys left in ignition. What where they thinking?
  • Infers: typical male.
  • Consequences: Sir, I’m glad nobody was hurt, but I’m still not clear on why we need to dispatch three tow trucks and a crane to your house.

So, the next time you are wondering what choice to make, give this tool a try!

life: Forgiveness

[Note: the following post discusses some Christian principles and has religious references. I have respect for other beliefs and don’t want to offend anyone. If you are offended by Christian references, then you might consider skipping this post.]

Why would anyone want forgiveness?

I found myself each week in a meeting where tucked away on a shelf, not quite out of sight, was a plaque for someone I had known. The person had since moved out of our area, and for whatever reason, I suppose the plaque didn’t get to them in time before their departure. So there it stayed on the shelf. One time long ago I was with this person, just the two of us riding in a car. And there in the car was this uncomfortable silence that I wanted to fill. Not being a conversationalist, I always struggled to fill that silence that bothered me. During one such uncomfortable silence I scraped around in my brain for something to say, and out it came. As soon as it left my mouth I realized I had just inserted my foot, a confidence betrayed. I definitely didn’t have any intention to hurt, but I expected it would. It took a while to realize what I had done, the person never said anything, but I felt awful. That had been several years ago. Everytime I saw that plaque I was reminded of that experience in the car. It was haunting me. I wanted to make that feeling go away. I wanted to be forgiven.

Being human, each of us is going to screw something up, miss opportunities, and hurt people. It is inevitable. It is part of who we are, and part of life. As much as we want it to go away, it will be there, whether we try to ignore it or not.

What does it mean to get forgiveness?

There is a difference between forgiving someone for a wrong commited, versus that person reaping the consequences of their actions. For that person who breaks the law, the victim can forgive, but the perpetrator may still go to jail.

Even after a wrong has been committed, it usually isn’t possible to undo the wrong. Thefts may be returned, but it is not so easy to mend a broken trust, restore virtue or reputation. When I see a person who has just been caught in the wrong, I think “what is done is done. The question is: what are you going to do now?”

Seeking forgiveness is more than just saying you are sorry. Giving forgiveness is more than saying, “yeah, OK”.

How does forgiveness work?

I see it as two kinds of forgiveness: from the victim and from the Lord. I believe it is more than just confession, more than just accepting Christ as your savior. Both kinds have common elements, as described by Richard G Scott:

  • Remorse: honestly recognize that what you did was wrong. Feel remorse for what you did, not just for getting caught.
  • Abandonment: have a permanent resolve to not repeat the mistake. And don’t do it again.
  • Confession: own up to what you have done. You can’t hide it.
  • Restitution: fix what you can. It’s not always possible to put things back in their original condition, but do what is possible.
  • Obedience in all things: you need to get everything straightened out. You can’t relent on one topic, but still harbor ill will on another topic.
  • Recognition of the Savior: this is a time when you should draw closer to Christ. Forgiveness comes because of Christ. Remember the price He paid for this opportunity, and at least feel gratitude for that. Mistakes separate us from God, and repentence and forgiveness is how we get back in His presence.

For what can I be forgiven of?

To quote from an article by Spencer W Kimball:

A young woman approached me in a city far from my home and came under some pressure from her husband. She admitted to me that she had committed adultery. She was a bit hard and unyielding, and finally said: “I know what I have done. I have read the scriptures, and I know the consequences. I know that I am damned and can never be forgiven, and therefore why should I try now to repent?”

My reply to her was: “My dear sister, you do not know the scriptures. You do not know the power of God nor his goodness. You can be forgiven for this terrible sin, but it will take much sincere repentance to accomplish it.”

Then I quoted to her the cry of her Lord:

“Can a woman forget her suckling child, that she should not have compassion on the son of her womb? yea, they may forget, yet will I not forget thee.” (Isa. 49:15.)

I reminded her of the Lord’s words in our dispensation to the effect that whoever repents and obeys God’s commandments will be forgiven. (See D&C 1:32.) My visitor looked bewildered but seemed to be yearning as though she wanted to believe it. I continued: “For all but the unpardonable sin forgiveness eventually will come to that transgressor who repents sorely enough, long enough, sincerely enough.”

She remonstrated again, though she was beginning to yield. She wanted so much to believe it. She said she had known all her life that adultery was unforgivable. And I turned again to the scriptures and read to her the oft-repeated statement of Jesus:

“All manner of sin and blasphemy shall be forgiven unto men: but the blasphemy against the Holy Ghost shall not be forgiven unto men.

“And whosoever speaketh a word against the Son of man, it shall be forgiven him: but whosoever speaketh against the Holy Ghost, it shall not be forgiven him, neither in this world, neither in the world to come.” (Matt. 12:31–32.)

She had forgotten that scripture. Her eyes lighted up. She reacted joyously to it, and asked, “Is that really true? Can I really be forgiven?”

Realizing that hope is the first requirement, I continued by reading many scriptures to her, to build up the hope that was now awakened within her.

How great the joy to feel and know that God will forgive sinners! Jesus declared in his Sermon on the Mount: “Your heavenly Father will also forgive you.” (Matt. 6:14.) This is on certain conditions, of course.

In modern revelation the Lord has said to his prophet: “Behold, he who has repented of his sins, the same is forgiven, and I, the Lord, remember them no more.” (D&C 58:42.) Our Lord gave the same word through the prophet Jeremiah: “For I will forgive their iniquity, and I will remember their sin no more.” (Jer. 31:34.) How gracious is the Lord!

On the occasion I am recalling, this woman, who was basically good, straightened up and looked me in the eye, and in her voice was a new power and resoluteness as she said: “Thank you, thank you! I believe you. I shall really repent and wash my filthy garments in the blood of the Lamb and obtain that forgiveness.”

Not long ago, she returned to my office a new person bright of eye, light of step, full of hope as she declared to me that, since that memorable day when hope had seen a star and had clung to it, she had never reverted to her sin nor any approaches to it.

It is important in all of this to forgive yourself. It is all too common that we seek forgiveness from the Lord, from the person we hurt, but fail to forgive ourselves. We should not forget the mistake that we made, so we can learn from it and not repeat the mistake, but we should not continue to punish ourselves after we have repented. To fail to forgive yourself is to mock the atonement of Christ. If Christ can atone for you because He loves you, and He can forgive your mistakes, you can forgive yourself.

So looking at that plaque on the shelf each week motivated me to do something. One night lying in bed I struggled to go to sleep, I was feeling compelled by a strong force to make it right, and do it now. So I resolved the next day to follow through. A search on the net turned up the person’s phone number in their new city. It had been several years, but I wanted a clear conscience. I picked up the phone and called. The person answered. Then a remarkable thing happened. He laughed when I announced my name. He said, “Just last night my wife and I were talking and somehow the conversation turned to you, the guy who lived down the street. I had forgotten your name, but my wife remembered it. Had you called before yesterday, I wouldn’t remember you.” Then I sheepishly started into my apology for what happened those years ago. He said, “I honestly don’t know what you are talking about. I don’t remember anything you offended me about.”

Giving Forgiveness

Not only will we find ourselves on the giving end of offense, but we will also be on the receiving side too. It is so easy to take that hurt that was inflicted upon you, keep it bottled up inside, constantly stirring and churning, until it ripens into bitterness and hatred and malice. It can be an acid that eats away at your character. It is playing out the victim to the nth degree. It almost seems human nature to do so. But what good does that do? It only hurts yourself. It doesn’t right the wrong. I have seen people who have been offended withdraw from the very things that they need the most because that other person is there, the one who hurt them once. Doing so serves only to punish yourself, not the other person. It doesn’t matter if that other person hurt you with intention or not.

The remarkable thing about receiving offense is that you will receive as much as you choose. This is a bold statement but I believe it to be true. You have control about how much offense you will receive. You can play as the fatally wounded animal, or it can be water rolling off a duck’s back. Sometimes from my children I hear about how a sibling did something wrong and “he/she made me mad”. I stop them right there and make a correction. No, they did not make you mad, you chose to be mad. You can choose how you react to any situation. If you find yourself mad, it is because you chose it. I’m not saying it is easy, it is difficult to control those feelings, but this is a true concept.

I guarantee that there will be frequent opportunities to receive offense. What you do in each of those opportunities is your choice.

At our core each of us wants peace. It is only through receiving and giving forgiveness that we can receive that peace.

The atonement is infinite. You can be forgiven and you can forgive. It isn’t easy, but it definitely is possible. If there is something you need to do, do it now.