Clearing WordPress comments via a SQL Query

Ever have a drive-by comment spammer hit you and all a sudden you have thousands of word press comments, none of them worthwhile? If you decide that you want to declare WordPress bankruptcy and just delete all of them, you either will have a long time with the batch delete button or one simple SQL query (if you have access to the back end).

First, connect to your SQL database either via command prompt or a tool like MySql Workbench. In my case, I just ssh-ed on to the server and ran the command mysql -u <<UserName>>

After logging on I ran the command show databases; to see what databases were on my server (it had been a while since I had set up my blog) and then the command use <<database name>>; to select the proper database.

I would strongly recommend making a backup of your database before doing anything for the first time…

show tables; then listed all of the tables in the database, in my case I wanted <<wordpress prefix>>_comments. Next you run the query delete from <<wordpress prefix>>_comments where comment_approved=0;

It took a while to run but afterward, all the comments were cleaned up.

ohshit-docker (or helping a friend through some docker issues

The title is from the ohshitgit website that helps users through git related problems.
As a little bit of an introduction, it is helpful to sometimes think of docker as running containers in seperate “lightweight” VMs. This is not really the case,  but it is a helpful abstraction for this brief intro.
Just to be sure where we are at lets try running a couple of commands to be sure we are in a good state.
It is an easy thing to do after a while to have a large amount of wasted space due to old and intermedate images sitting arround but not being used. An easy quick way to clean that up is with the “docker system prune”. As the warning will tell you,

This will remove:
– all stopped containers
– all networks not used by at least one container
– all dangling images
– all dangling build cache

An -a added to the command will also prune any stopped and or unused images as well.
A good way to cut down on the need to do this is to include the –rm comand to your docker run commands.

In your case of wanting to set up a zoneminder server another feature of docker is important to remember. Docker containers by default are ephemeral, that is when they exit anything that was inside the container is gone. In your case, any configurations and data will have evaporated each time you restart your computer etc. This is less than desireable.

You said that you ran the command

docker run zoneminderhq/zoneminder:latest-ubuntu18.04

Lets break down what this exactly means… you are asking the docker daemon to run the image created by zoneminderhq named zoneminder with the tab “latest-ubuntu18.04”. If we go to the docker hub we can figure out what is actually in this image. and clicking on the dockerfile tab will show you what is in your container when it was built, command by command.
The issue with your set of commands as I was saying before is that you didn’t connect any ports to your local computer from the container and you didn’t mount in any folders to use as long term storage between container runs.

You more likely want to run something like is shown on the docker page:

docker run –rm -d -t -p 1080:80 \
-e TZ=’Europe/London’ \
-v ~/zoneminder/events:/var/cache/zoneminder/events \
-v ~/zoneminder/images:/var/cache/zoneminder/images \
-v ~/zoneminder/mysql:/var/lib/mysql \
-v ~/zoneminder/logs:/var/log/zm \
–shm-size=”512m” \
–name zoneminder \

Likely the first time you run you will need to also run before hand a script to create all the files…
mkdir ~zoneminder/
mkdir ~zoneminder/events
mkdir ~zoneminder/images
mkdir ~zoneminder/mysql
mkdir ~zoneminder/logs

So lets break down what the command is doing:

–rm cleanup any images after you exit from the container (I added this part)
-e is an environmental variable to pass into the container
-d run as detached (“daemon/service mode”)
-t allocate a psudo-tty (don’t worry about it right now)
-p expose port 80 on the container to your local port 1080
-v mount local folder to container folder
–shm sets the size of /dev/shm “tempfs”
–name an optional name (makes it easy to kill it when you want)
then the container name

By default if you don’t tell it otherwise you will start the ENTRYPOINT in the dockerfile, but if you had wanted to you could replace the -d with a -i and add to the end of the file bash and you would have a bash shell running inside the container.

You should now be able to go to http://localhost:8080/zm and see the zoneminder server.

Finally you decide that it is time to kill the container and walk away, just run the command

docker kill zoneminder


I originally shared this post on my github gist.

ELCA Lutheran Churches in the greater Des Moines IA Area

I have a friend who works in retail during the traditional Church hours. After some discussion I agreed to help her out and took a quick survey of all of the different ELCA Lutheran Churches in the Greater Des Moines Iowa Area (Ames, Huxley, Slater, Ankeny, Des Moines, West Des Moines etc.) By no means is this an exhaustive list, and as times and schedules change, I would recommend checking with the church or their website before trying to visit. (Sorry for the image, I just quick jotted this down using my new ebeam pen from Luidia)

ELCA Lutheran Churches of Des Moines IA

Ripping a CD to MP3 in Linux command prompt

More and more often computers don’t have CD drives. If you still have some “old fashioned” cds that you want to take with you on a trip, the linux shell can be a quick way to digitize them…

First off, if you don’t have the correct programs we will start there.

sudo apt-get install cdparanoia lame

then run the command cdparanoia -vsQ to make sure the disk and drive are working.

cdparanoia III release 10.2 (September 11, 2008)

Using cdda library version: 10.2
Using paranoia library version: 10.2
Checking /dev/cdrom for cdrom...
	Testing /dev/cdrom for SCSI/MMC interface
		SG_IO device: /dev/sr0

CDROM model sensed sensed: TSSTcorp CD/DVDW SH-S182D SB04 

Checking for SCSI emulation...
	Drive is ATAPI (using SG_IO host adaptor emulation)

Checking for MMC style command set...
	Drive is MMC style
	DMA scatter/gather table entries: 1
	table entry size: 131072 bytes
	maximum theoretical transfer: 55 sectors
	Setting default read size to 27 sectors (63504 bytes).

Verifying CDDA command set...
	Expected command set reads OK.

Attempting to set cdrom to full speed... 
	drive returned OK.

Table of contents (audio tracks only):
track        length               begin        copy pre ch
  1.    15485 [03:26.35]        0 [00:00.00]    no   no  2
  2.    20316 [04:30.66]    15485 [03:26.35]    no   no  2
  3.    23579 [05:14.29]    35801 [07:57.26]    no   no  2
  4.    17344 [03:51.19]    59380 [13:11.55]    no   no  2
  5.    13928 [03:05.53]    76724 [17:02.74]    no   no  2
  6.    14954 [03:19.29]    90652 [20:08.52]    no   no  2
  7.    18415 [04:05.40]   105606 [23:28.06]    no   no  2
  8.    13386 [02:58.36]   124021 [27:33.46]    no   no  2
  9.    17697 [03:55.72]   137407 [30:32.07]    no   no  2
 10.    22469 [04:59.44]   155104 [34:28.04]    no   no  2
 11.    16163 [03:35.38]   177573 [39:27.48]    no   no  2
 12.    15423 [03:25.48]   193736 [43:03.11]    no   no  2
 13.    18116 [04:01.41]   209159 [46:28.59]    no   no  2
 14.    20106 [04:28.06]   227275 [50:30.25]    no   no  2
 15.    18373 [04:04.73]   247381 [54:58.31]    no   no  2
 16.    26250 [05:50.00]   265754 [59:03.29]    no   no  2
 17.    15166 [03:22.16]   292004 [64:53.29]    no   no  2
 18.    18664 [04:08.64]   307170 [68:15.45]    no   no  2
TOTAL  325834 [72:24.34]    (audio only)

Then run cdparanoia -B to begin the rip (make sure you are in the folder you want to be in…

cdparanoia III release 10.2 (September 11, 2008)

Ripping from sector       0 (track  1 [0:00.00])
	  to sector  325833 (track 18 [4:08.63])

outputting to track01.cdda.wav

 (== PROGRESS == [                              | 015484 00 ] == :^D * ==)   

outputting to track02.cdda.wav

 (== PROGRESS == [                              | 035800 00 ] == :^D * ==)
outputting to track18.cdda.wav

 (== PROGRESS == [                              | 325833 00 ] == :^D * ==)   


After this finishes you will need to convert over to a more compact format (optional) like mp3.

for t in track*.wav; do lame $t; done

the end result will look something like

LAME 3.99.5 64bits (
LAME 3.99.5 64bits (
Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
Encoding track14.cdda.wav to track14.cdda.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
 Frame | CPU time/estim | REAL time/estim | play/CPU | ETA 
 14025/14025 (100%)| 0:05/ 0:05| 0:05/ 0:05| 61.562x| 0:00 
 kbps MS % long switch short %
 128.0 100.0 87.2 6.4 6.4
Writing LAME Tag...done
ReplayGain: -2.1dB

Congratulations! (Credit: most of these directions were inspired from article)



Christmas 2017


ChristmasLetter2017(pdf with photos) (evernote)

Wow! It is hard to believe that it has been yet another year, and 2017 is almost history. As usual, a lot has happened this year.

The most significant news of the year is that in May Jess accepted a new job as a Senior Quality Assurance Specialist at Kemin Industries in Des Moines for the Human Nutrition and Health division.  KH manufactures dietary supplements for things such as eye health, weight management, immune health, and brain health using natural materials like marigolds, mint, tea, potatoes, and algae.  At her new job, she is in charge of the supplier approval and environmental monitoring programs, is a member of the HACCP and the Food Safety team, and verifying labels and other documents.  She has enjoyed the new challenges and her great coworkers as a part of a very family oriented company.  Andy continues as a Senior Software Developer at Pioneer (now the Agriculture Division of Dow DuPont). While the merger of Dow and DuPont has closed, we are all still waiting to see what new opportunities this will bring.

This year was filled with many travels. We started by joining friends on a Western Caribbean Cruise aboard the Norwegian Getaway. Stops included Roatan Island in Honduras, Belize, Cozumel and Costa Maya, Mexico. It was fun visiting the Mayan Ruins of Tulum and Nim Li Punit, a Belize spice farm, as well as just relaxing on the beach. The trip was a change from our usual solo travels as we were a part of a group of friends as the trip was organized by one of our friends from marching band. Over the 4th of July weekend, we also took a short trip to Nashville where we toured the Country Music Hall of Fame, RCA Studio B and enjoyed great food and music. Finally, as part of the AΣK National Convention we traveled to Denver, CO. While Jess was in meetings, Andy toured the Coors Factory and met up with a coworker and his wife. Then we both visited Jess’ family and the Garden of the Gods. Finally, we are concluding our yearly travels with a trip to Memphis to celebrate the New Year and attend the Liberty Bowl to watch the Cyclones vs. the University of Memphis.

Jess and Andy have continued to be involved with many groups. Andy finished his term on the ISU Alumni Band board as a Director At Large and continues to serve as the President of the Central Iowa Linux Users Group. Jess still has one year remaining on the Council at Church. She also was rather busy with her baking at the Iowa State Fair where she received 11 ribbons for cakes/cupcakes, pies, and cookies including a 2nd place for monster cookies.  Unfortunately this year, none of Andy’s photos were accepted for the State Fair Photo Competition.

We hope that everyone had a great year and we look forward to the next adventure!

Merry Christmas,


Andy and Jess


In Support of net nutrality

With today being the “Save the internet day” (again), The following is a letter I sent to my congressional delegation:

Dear Sir:
I am writing out of concern and support for the FCC’s Open Internet Rules, a.k.a. Net Neutrality. As a Senior Software developer at a large Agricultural Company, owner of my own small Web Development business and the president of the Central Iowa Linux User’s Group I feel that this is an area that I am well acquainted with and would be more than happy to speak further with you or your staff in detail about.
I don’t want ISPs to have the power to block websites, slow them down, give some sites advantage over others, or split the Internet into “fast lanes” for companies that pay and “slow lanes” for the rest.
The current Internet environment that we all have enjoyed has developed and thrived because those above ideas have been prevented due to FCC regulations as well as a spirit of sharing and equality on the Internet.
Censorship by ISPs is a serious and looming problem, however. Comcast has throttled Netflix, AT&T has blocked facetime, Time Warner Cable has throttled the game League of Legends, and Verizon admitted that it will create fast lanes for sites that pay (and slow lanes for everyone else) if the FCC lifts the rules. These practices hurt consumers and businesses large and small especially in Rural and small communities as they often have fewer ISP choices to begin with.
Courts have made it clear that if the FCC ends Title II classification, the FCC must let ISP’s offer “fast lane” access to websites for a fee and Charman Pai has made clear that he intends to do exactly this.
If some companies can pay to make their sites load faster, it will help stifle startups and smaller businesses that can’t pay. This will kill the open market that has enabled millions of small businesses all to just further enrich a few cable giants.
Internet providers will be able to impose a private tax on every sector of the American economy.
Furthermore, under Chairman Pai’s plan ISPs will be able to make it more difficult to access political speech that they don’t like. They’ll be able to charge fees for website delivery that will make it harder for blogs, non-profits, artists, and others who can’t pay up to have their voices heard.
I am sending versions of this letter to the FCC’s open proceeding, but I am concerned that Chairman Pai (a former Verizon lawyer) has already made his plans and will ignore the concerns of myself and millions of other Americans. Therefore I urge you and the rest of the Iowa Delegation to publically support net neutrality based on Title II and denounce Chairman Pai’s plans.
Respectfully yours,

Andrew Denner

Visiting Rome


As part of our ongoing travel log here is a brief overview of some of the cool things we saw in Rome as well as some of the things we learned along the way.

Getting to our Air B&B:
As you exit the airport going towards the train station, one of the stalls that you can visit in the station will be a van service that will take you to where you need to go. It is much easier than trying to solve the situation of how to navigate the train with your luggage. Even money your air b&b host will use what’s app (everyone does). If you use the sim card (see the previous post), have google FI, or some other international coverage you should be fine.


After you get in, grab a slice of pizza and catch your breath. It was a long flight and you probably want to freshen up and perhaps catch a quick nap. If you planned ahead your Roma pass is probably ready to pick up. I would recommend taking at least one lap around town to see the sights on the hop on hop off bus. There is a nice audio tour (if your jack works) and the views are much better than the subway. After you have been around once, the subway will be faster and more direct. Trust google maps, it will tell you what routes to take, and when the next train/bus will be by. It may list multiple routes as possibilities, don’t worry just pick one.

Cool stuff you need to see:
The Vatican, they have a huge amount of history, you won’t see it all! On Wednesdays the pope has a talk (if he is in town) you can get tickets from the American Catholic Church (They don’t even care if you aren’t Catholic) They will ask for a small donation, don’t be a dick and give them something nice. It will be a big to do and it is worth it just to see the crazy crowd that the pope attracts, he is really a rock star. Be sure to get there early so that you can get a good seat. Also, enjoy watching the Swiss guard. They may wear funny costumes but they mean business.

St Peter's Square before the Pope's Speach

The Flavian Amphitheater (The Coliseum) and the forum:
This is a must see! Spring for the audio tour as there is a lot to learn here! As with the rest of the trip, be sure to lace up your walking shoes as there will be a lot of walking going on!

Flavian Amphitheatre Panarama

Getting a drink:
Be sure to pack a water bottle as it will be hot dry and dusty work walking around town. The good news is that there are potable water drinking fountains all around town on the street. If the fountain is running and there is not a sign telling you not to drink, and it doesn’t look too decorative it is safe to drink, just as people have been doing for thousands of years. The city of Rome has some of the best drinking water in the world, it is safe, don’t worry. The good news is if you don’t want to go this route, bottles of water can be had for not too much money.


The National Roman museum:
There are great statues on the first floor, but be sure not to miss the basement where a full history of Roman coins are on display in the numismatic exhibit from the dawn of time all the way to the euro. It is one of the first museum displays that I have ever seen built into a vault.


Catching a train:
Bad news, your American credit card probably won’t work in the automated machines. We have chip and signature instead of chip and pin like the rest of the world. You will have to wait in line to talk to a person. Take a number and be prepared for a long wait! Be sure to do this at least a day before you are trying to go anywhere since this will take a while.

Visiting the beach:
There are beaches accessible from the subway/train, you will have to pay a small fee to get in but it is worth it, be sure to pack a towel though as they are quite expensive there. After you get off the train station just ask at the ticket counter for lido and they will point you in the right direction. People have been coming to the beach here since the days of Rome and for a good reason. This is a great way to relax and unwind after several days of running around the country.


The joys of a server upgrade. 

After many years (too many) of sitting on the same old VPS at Linnode, I decided that it was time for a spring cleaning. I found a nice cheap VPS that was advertised on facebook for ~$10 a month (I know) for a not too bad amount of disk CPU and memory. The only drawback that I have really seen is that it only offers ipv4 addresses (what?! this is 2017) and it’s IP address is in a seedy neighborhood as apparently in a previous life it was an open proxy.


Now I just need to go through the process of migrating my web pages, databases and other files over and turn off the old VPS.

Thankfully I use CloudFlare so the lack of ipv6 and the crappy IP history does not bother me that much. Watch for future writeups on the migration process.

Slack vs IRC (or how I learned to stop worrying and lock the slack)

For many years the local Linux User’s group has had an IRC channel on Freenode (#cialug) and it has always had about the same small number of lurkers who occasionally go active to make a comment, i.e. “Good Morning LUG!”.
A new attendee of the Lug suggested slack as a possible avenue for communication. Reluctantly we stood up a channel and got to work inviting people to join. I also launched a Slack/IRC bridge to help keep the lug wide discussions from being a permanent netsplit.
So far I have the following observations about the current situation.

  1. Slack has a nice user interface, (yes I know that IRC is a communication standard, not a UI)
  2. Slack keeps a history of what has been said, unlike IRC where if you were not in the channel it is lost (both good and bad)
  3. with the IRC Slack bot, it is impossible to tell all who may be in the channel on the other side of the bridge
  4. Slack is an invite only system. (I need to get around to automating this process.) This kinda goes counter to the free and open environment that we try to foster.

Time will tell if this slack thing is a good idea. Stay tuned for updates.

My experience with Fi Customer Support

As a cool way to save money a while back, I switched my cell service over to project Fi, google’s cell phone service. As with all things in google’s semi permanent beta testing my experience has been that it is not always quite as smooth sailing as one of the main stream cell phone providers. The main reason this has been is because Fi is made up of Us Cellular, Sprint and Tmobile. Through vudu magic, your phone decides which network it needs to be on for the best signal etc. and then it will flip between them.
A while back I noticed that when I was on the US Cellular towers and my Internet was turned off (to save data costs), text messages would not go through. They would fail with the message “Message not sent, Tap to try again.” I also noticed that people would complain that my phone calls were showing up as “Unknown Caller.” This meant that most people would dodge my calls as they thought that I was a telemarketer.
Finally on a slow Saturday night, I dialed 611 (your cell phone company’s number). It was impressive being directly connected to a support technician. With his soothing Australian accent, he walked me through some initial tests to see if it was an easy solution. Unfortunately it was not, and he informed me that he would have to kick it up to the next tier of support, what would be a good time for them to contact me? We agreed for a time on Sunday at noon (the next day) central time.
It was about 1 PM the next day when a supervisor called me back to ask if it was alright to email me some debugging instructions. They involved me taking bug report snapshots in each cellular environments, emailing them to support and sending suggestion reports from the fi app with the hashtag #fisupport. It was all a bit more then what I would expect from a non technical user, however those users probably don’t use fi!
The support email replied thanking me for my report and that they were forwarding it on to the engineers for debugging. Unfortunately it has now been a week of crickets, on Wednesday I called 611 again and asked for an update, unfortunately they had none to give, but that they would email me when it was resolved.
Other than this one minor hiccup, fi has been great and if you want to try it out here is a referral link to take $20 off your service after 30 days