[{"content":"Back in January 2021 I wrote about a new project: I was going to ditch WordPress and build my own \u0026ldquo;serverless\u0026rdquo; blogging software. WordPress was running on an EC2 instance, burning CPU cycles around the clock to serve a blog that, by my own admission, mostly gets visited by bots. I figured I could do better with Lambda and friends, only pay for what I actually used, and have a fun project to keep my skills current along the way.\nThen, true to form, I disappeared for five years.\nIn my defense, I did eventually come back around to it. But the first thing I had to admit was that the 2021 plan was over-engineered. I was about to go write a whole application — functions, an API, a database, the works — to serve what is, when you get right down to it, a stack of HTML files that changes a couple of times a decade. There are no comments here. There are no logins. There\u0026rsquo;s nothing dynamic to speak of. Building custom software for that is like installing a freight elevator to move a single box of books.\nThe honest answer was a static site generator. My posts are just text and a few photos, so I write them in Markdown and a tool called Hugo renders them into plain HTML. Those files go into an S3 bucket, and CloudFront sits in front to handle HTTPS and caching. That is serverless — there\u0026rsquo;s no server to patch, no database to back up, it scales to zero, and it costs me well under a dollar a month (most of which is the DNS zone I was already paying for). As a bonus, the thing that always nagged me about running WordPress — the steady drip of security updates and plugin vulnerabilities — simply goes away. There\u0026rsquo;s nothing to exploit in a static file.\nThe whole thing is wired up so that publishing is now just git push. My content lives in a GitHub repo; pushing to it kicks off a pipeline that runs Hugo and copies the result to S3. All my old WordPress URLs redirect to the new ones, so nothing should break if you followed a link here from somewhere.\nHere\u0026rsquo;s the part that made it genuinely a \u0026ldquo;keep my skills current\u0026rdquo; project, just not in the way I expected back in 2021. I didn\u0026rsquo;t really build this by hand. I used Claude Code, an AI coding agent, and mostly just described what I wanted: static files on S3, CloudFront in front, content as Markdown in GitHub, and a pipeline to build and publish it. It poked around my old WordPress site, asked me a handful of genuinely good questions — which generator, how to manage the infrastructure, whether to migrate my old posts or start fresh — and then went and did the work. It pulled every old post out of WordPress and converted it to Markdown, wrote all of the infrastructure as code, stood it up in AWS, and handled the migration. It even caught a busted code snippet in my old kinetic watch charger post, where an #include \u0026lt;Servo.h\u0026gt; had quietly lost the \u0026lt;Servo.h\u0026gt; part years ago because it looked like an HTML tag. My job was mostly to review, approve, and click a single button to connect it to GitHub.\nFull disclosure: it drafted this post too. I\u0026rsquo;m editing and second-guessing it before it goes live, which feels like the right division of labor.\nIt\u0026rsquo;s a little surreal. The version of me writing that 2021 post wanted a project to keep up with where technology was heading. It turns out where it was heading was \u0026ldquo;describe the thing you want and review what an agent builds.\u0026rdquo; The blogging software I was fretting about writing already existed, and most of what was left was plumbing that a machine was happy to handle.\nIf you\u0026rsquo;re reading this, it means the new setup works. I won\u0026rsquo;t promise the next post will come any sooner than this one did — but at least now there\u0026rsquo;s no idle server sitting around waiting for it. 🙂\n","permalink":"https://kj6lnh.org/blogging-software-five-years-later/","summary":"\u003cp\u003eBack in \u003ca href=\"/new-project-blogging-software/\"\u003eJanuary 2021\u003c/a\u003e I wrote about a new project: I was going to ditch WordPress and build my own \u0026ldquo;serverless\u0026rdquo; blogging software. WordPress was running on an EC2 instance, burning CPU cycles around the clock to serve a blog that, by my own admission, mostly gets visited by bots. I figured I could do better with Lambda and friends, only pay for what I actually used, and have a fun project to keep my skills current along the way.\u003c/p\u003e","title":"The Blogging Software Project, Five Years Later"},{"content":"This site is a personal blog. It is a static website with no comment system, no contact forms, no accounts, no advertising, and no analytics or tracking scripts.\nInformation collected. This site does not ask you for, or store, any personal information. No cookies are set by this site.\nServer logs. The site is served from Amazon Web Services (Amazon S3 and Amazon CloudFront). As with any website, the hosting infrastructure may record standard technical request data (such as IP address, requested URL, and timestamp) for security and operational purposes. This data is handled by AWS under their privacy practices and is not used by the site owner to identify individual visitors.\nThird-party links. Posts may link to other websites. Those sites have their own privacy policies, which are not covered here.\nContact. Questions about this policy can be sent to the site owner.\n","permalink":"https://kj6lnh.org/privacy-policy/","summary":"\u003cp\u003eThis site is a personal blog. It is a static website with no comment system, no\ncontact forms, no accounts, no advertising, and no analytics or tracking scripts.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInformation collected.\u003c/strong\u003e This site does not ask you for, or store, any personal\ninformation. No cookies are set by this site.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eServer logs.\u003c/strong\u003e The site is served from Amazon Web Services (Amazon S3 and\nAmazon CloudFront). As with any website, the hosting infrastructure may record\nstandard technical request data (such as IP address, requested URL, and\ntimestamp) for security and operational purposes. This data is handled by AWS\nunder their privacy practices and is not used by the site owner to identify\nindividual visitors.\u003c/p\u003e","title":"Privacy Policy"},{"content":"I’ve been away from the blog for some time now. Was doing the side-gig startup thing for a while. That didn’t work out and ended up getting a little burned out for a while, so I was more focused on hiking since then. Now, I’m ready for another project. Don’t care to do anything that requires a business plan, this is more for fun, keep some skills current, and do something that’ll help me out a little.\nAt the time of this writing (January 2021), I’m hosting this blog using WordPress on an Amazon EC2 instance. WordPress is pretty popular software that requires some kind of persistent service running. I haven’t looked at statistics, but I doubt this blog gets any kind of traffic other than bots, given that I rarely post anything. That’s a lot of idle CPU time. While the smallest EC2 instances aren’t very expensive, I can probably do better.\nI work with Amazon Web Services a lot at my day job. EC2 (virtual servers) is just one of hundreds of services they offer. Many of these services offer on-demand compute, storage, and data services. Used together, this is known as “serverless” architecture. For example, Lambda is a Functions as a Service (FaaS) offering that allows you to run a small piece of code. As soon as it’s done running, you’re not charged for it until the next time it runs. The service provider manages provisioning resources, starating it up, and releaseing the resources when done. This really brings down the cost of running a low traffic site like this one.\nWordPress isn’t designed to work in that way though. I’ve seen a couple of blogs describing ways to coax WordPress to run this way, but it seems pretty brittle and unmaintainable to me. So, if not WordPress, what? I searched around for a while looking for something that was built like this, but came up with nothing. So sounds like it could be a fun project.\nI’ll plan to post more once I get a little further along.\n","permalink":"https://kj6lnh.org/new-project-blogging-software/","summary":"\u003cp\u003eI’ve been away from the blog for some time now. Was doing the side-gig startup thing for a while. That didn’t work out and ended up getting a little burned out for a while, so I was more focused on hiking since then. Now, I’m ready for another project. Don’t care to do anything that requires a business plan, this is more for fun, keep some skills current, and do something that’ll help me out a little.\u003c/p\u003e","title":"New Project – Blogging Software"},{"content":"I’ve had some bad luck with computer hard drives over the last year. First, the hard drive in my home server failed. Then the hard drive on my laptop failed several months later. The backups for each had stopped working a while ago. I was able to recover some files using ddrescue. This is actually a really cool tool for doing a byte-for-byte copy of another disk, skipping over errors and going back to retry them later. Unfortunately for me, this was not only extremely time consuming (both times, I spent over a week on this process), but the blocks that couldn’t be recovered caused a lot of files to be irretrievable. \u0026lt;sarcasm\u0026gt;I had a lot of fun with the debugfs command trying to get some files recovered.\u0026lt;/sarcasm\u0026gt;\nBut, this post isn’t about trying to rescue data from a failed drive. This post is about making sure that’s not necessary because you had a good backup plan. I will be discussing the steps I have taken to implement backups from the various Windows and Linux machines on my network to my home Linux server as well as off-site backups in case your particular disaster isn’t limited to just your hard drive. You wouldn’t want to lose all those family photos, would you? Lucky for me, my wife keeps most of those on her computer.\nLet’s start with the home server. I’m backing up every machine on my network here, so the server needs a lot of space. I ended up getting 2x 4TB drives and installing them in a RAID-1 setup (the drives are mirror copies of each other). This gives me a total capacity of 4TB and ensures that a single drive failure would not be disastrous. I can just keep running on one drive until I can install a replacement. Don’t wait too long on that replacement though. I’m not going to go over this process here as there are many guides for doing so already. The server is set up as a Samba file server for Windows to use and ssh for Linux to use.\nFor Windows backups, I went with SyncBack Free. It’s fairly easy to use. I followed the steps in this guide to set it up to backup the Windows profile directory and the ProgramData directory. You need to create two separate backup profiles to do both. Point the backup target to the backup directory on the file server.\nThere were a number of files and directories that couldn’t be backed up. I went through the error log and excluded those files (they’re mostly automatically generated files that don’t really need to be backed up) so that the backup would show as successful. Finally, create a schedule for both profiles to run automatically each night. Make sure your computer will be turned on at the time it’s scheduled to run.\nNext, I turned to the Linux backups. For this, I opted to use duplicity. It supports encryption, full, and incremental backups. I have it encrypting the backups on the way to the file server over sftp. I set up a schedule in cron to do an incremental backup 6 days a week. On the 7th day, it does a full backup and removes the backups from 3 weeks ago. Here’s what the crontab looks like:\n0 23 * * 1,2,3,4,5,6 duplicity incremental --exclude-filelist exclude.list --encrypt-key \u0026lt;PGP Key ID\u0026gt; --ssh-options=\u0026#34;-oIdentityFile=\u0026lt;path to ssh key\u0026gt;\u0026#34; /home/\u0026lt;my user id\u0026gt; sftp://\u0026lt;my user id\u0026gt;@\u0026lt;fileserver\u0026gt;//mnt/backups/\u0026lt;name of system being backed up\u0026gt; 2\u0026gt;\u0026amp;1 0 23 * * 7 duplicity full --exclude-filelist exclude.list --encrypt-key \u0026lt;PGP Key ID\u0026gt; --ssh-options=\u0026#34;-oIdentityFile=\u0026lt;path to ssh key\u0026gt;\u0026#34; /home/\u0026lt;my user id\u0026gt; sftp://\u0026lt;my user id\u0026gt;@\u0026lt;fileserver\u0026gt;//mnt/backups/\u0026lt;name of system being backed up\u0026gt; 2\u0026gt;\u0026amp;1 \u0026amp;\u0026amp; duplicity remove-all-but-n-full 3 --force --ssh-options=\u0026#34;-oIdentityFile=\u0026lt;path to ssh key\u0026gt;\u0026#34; sftp://\u0026lt;my user id\u0026gt;@\u0026lt;fileserver\u0026gt;//mnt/backups/\u0026lt;name of system being backed up\u0026gt; 2\u0026gt;\u0026amp;1 The first line runs at 11pm Monday – Saturday and runs the incremental backup. The second line runs at 11pm on Sundays to do the full backup and remove backups older than 3 weeks. One thing to note when running this in cron: the SSH key and the PGP key should either have no passphrase or you will have to set some environment variables that contain the passphrase. Keep the PGP private key backed up separately as you will need this in order to decrypt the backup in the event you need to do a restore.\nFinally, I’m storing my backups off-site. After some research, I settled on CrashPlan. For $5/month (with 1 year purchase, $6/month on a month-to-month plan), you get unlimited storage. For $12.50/month, you can avoid all of the mess above and get unlimited storage for up to 10 computers all through CrashPlan’s interface. There’s a 30 day free trial. You need to use the Java interface to configure CrashPlan. If your file server is headless, use the instructions here. You can throttle the upload so you don’t saturate your upstream and make it difficult to use the Internet until your backup is complete.\nHope this helps anyone looking to do something similar. If not, at least I have some documentation on this process for myself 🙂\n","permalink":"https://kj6lnh.org/robust-offsite-backups-for-home-network/","summary":"\u003cp\u003eI’ve had some bad luck with computer hard drives over the last year. First, the hard drive in my home server failed. Then the hard drive on my laptop failed several months later. The backups for each had stopped working a while ago. I was able to recover some files using \u003ca href=\"https://www.gnu.org/software/ddrescue/\" target=\"_blank\"\u003eddrescue\u003c/a\u003e. This is actually a really cool tool for doing a byte-for-byte copy of another disk, skipping over errors and going back to retry them later. Unfortunately for me, this was not only extremely time consuming (both times, I spent over a week on this process), but the blocks that couldn’t be recovered caused a lot of files to be irretrievable. \u0026lt;sarcasm\u0026gt;I had a lot of fun with the \u003ca href=\"http://linux.die.net/man/8/debugfs\" target=\"_blank\"\u003edebugfs\u003c/a\u003e command trying to get some files recovered.\u0026lt;/sarcasm\u0026gt;\u003c/p\u003e","title":"Robust Offsite Backups For Home Network"},{"content":"Seen a few articles about people controlling their radios remotely lately and thought what most others were doing was a bit too complicated. It could be done a lot easier, at least in my opinion of what’s easier.\nFirst, rig control. Linux has the hamlib libraries that can control many different radios. I had built a simple CI-V serial interface for my ICOM IC-706 a while back. It’s not perfect, but can be made to work at 300 baud. The rigctl command line program is pretty simple to use. The manual page for it has all of the commands listed. Many don’t apply for my particular radio, but I can switch frequency, mode, memory channel, and a few other key operating parameters. I can read all of those parameters as well to make sure I’m where I think I am.\nSecond, the sound card interface. I got a Signalink USB a few months ago with the appropriate cable to hook to the back of the IC-706. Experimented around a bit with the levels and VOX control settings to come up with something that seemed to work well for me. This also keys up the transmitter so it’s nearly plug and play.\nThird, I need a way to get my voice to the radio and get the audio back to my remote location. I see many people using Skype for this, which seems to be overkill to me. I thought there must be some easy point-to-point VoIP program I could use on my home network and potentially route outside the network if I wanted. I found a program called Linphone in the Debian repositories and it was really easy to set up. No need to set up an account or anything like that and it has a smart phone client as well. Installed it on my radio computer and on my laptop, set up the radio computer to automatically answer and use the Signalink USB for audio, then call it from the laptop. That’s all the setup that was needed. Some quick testing and I was able to get two way communication going.\nFinal test was checking into a net. My local simplex net tonight was run by an operator that I usually have trouble hearing and I had my squelch set too high, so he was cutting in and out pretty bad. That’s one of the settings that aren’t available through the CI-V interface on the IC-706, so I quickly ran into the shack and turned that down a little. I was able to hear him better after that, but I had already missed my turn by then. I switched over to the repeater net a few minutes later and confirmed my check in over there, no problems at all.\nNot bad for a couple of hours of tinkering. Most articles I read include installing Ham Radio Deluxe, two Skype accounts, and remote desktop control software. Compare with rigctl, Linphone with no accounts needed, and simple SSH. I think it’s easier anyway.\n","permalink":"https://kj6lnh.org/remote-control-for-radio/","summary":"\u003cp\u003eSeen a few articles about people controlling their radios remotely lately and thought what most others were doing was a bit too complicated. It could be done a lot easier, at least in my opinion of what’s easier.\u003c/p\u003e\n\u003cp\u003eFirst, rig control. Linux has the hamlib libraries that can control many different radios. I had built a simple CI-V serial interface for my ICOM IC-706 a while back. It’s not perfect, but can be made to work at 300 baud. The rigctl command line program is pretty simple to use. The manual page for it has all of the commands listed. Many don’t apply for my particular radio, but I can switch frequency, mode, memory channel, and a few other key operating parameters. I can read all of those parameters as well to make sure I’m where I think I am.\u003c/p\u003e","title":"Remote Control For Radio"},{"content":"When Carrie and I got married, she gave me a very nice watch as a wedding present. It’s a kinetic watch (i.e. it is wound up by movement). I haven’t used it since the band broke a long time ago. Finally got the band fixed, but since it hasn’t been used, it’s not wound up at all right now. I can either wear a watch that’s one right twice per day for a while until it’s wound up, or I could put the continuous rotation servo I got a while ago to good use.\nJust needed to wire up power, ground, and data lines between the servo and an Arduino and write the following sketch:\n#include \u0026lt;Servo.h\u0026gt; Servo myServo; int waittime = 1000; // Let each rotation happen for 1 second void setup() { myServo.attach(7); } void loop() { myServo.writeMicroseconds(1700); // rotate counter-clockwise delay(waittime); myServo.writeMicroseconds(1300); // rotate clockwise delay(waittime); } Uploaded the sketch to the Arduino and the servo started spinning. Just needed to connect the watch to the servo (scotch tape is quick and dirty) and plug the whole thing into a USB battery. Seems to be working pretty well.\n","permalink":"https://kj6lnh.org/kinetic-watch-charger/","summary":"\u003cp\u003eWhen Carrie and I got married, she gave me a very nice watch as a wedding present. It’s a kinetic watch (i.e. it is wound up by movement). I haven’t used it since the band broke a long time ago. Finally got the band fixed, but since it hasn’t been used, it’s not wound up at all right now. I can either wear a watch that’s one right twice per day for a while until it’s wound up, or I could put the \u003ca href=\"http://learn.parallax.com/KickStart/900-00008\" target=\"_blank\" title=\"Parallax Continuous Rotation Servo\"\u003econtinuous rotation servo\u003c/a\u003e I got a while ago to good use.\u003c/p\u003e","title":"Kinetic Watch Charger"},{"content":"Haven’t had much time for any projects over the last year or so. Having a new baby in the house tends to do that. Now that she is a little older and on a good schedule, I might be able to get a little time to work on some projects.\nMy wife drives a 2005 Honda Pilot. Recently, we discovered that the rear vents for the second row of seats were not blowing any air. Of course, this makes the kids uncomfortable and Kimberly kept complaining that her back was sweaty. I hadn’t really looked into it too much so Carrie did some searching and came across this blog. The short version is that the screen over the blower gets clogged with dust and a thermal fuse goes open circuit permanently.\nThe rear vents in question\nI took the pictures as I was putting everything back together (didn’t think to take them as I was taking everything apart). Everything is hidden behind the kick panel at the bottom of the center console on the driver’s side. Slide the seat all the way back to expose the entire panel.\nKick panel at the bottom of the center console, driver’s side\nAs in most automotive panels where you don’t see any obvious screws, this is held in place by clips that just need to be popped out. I was able to slide my fingers underneath against the floor and it popped out after pulling for a bit. This exposes the blower, relay and transistor assembly.\nLeft to right: Blower intake (grey), relay (black), transistor assembly (brown)\nIf you’ve never gone in here before, you’ll probably see a ton of dust covering the blower intake. The picture shows what it looks like when it is clean. You can take a vaccum to it from here, but I opted to remove the intake screen to get it really clean. You can see two screws in the picture that you need to remove. There is also one hidden under the upper panel at the top of the screen. This also helps to see if the blower is moving or not.\nBlower exposed\nOn the right hand side of the above picture, you’ll see a circular brown assembly with the wires disconnected. There’s a release at the bottom of the plug that has to be pressed to remove the plug. There are two screws on either side of the plug to be removed. Then you need to rotate the assembly clockwise while pressing on the black tab at the bottom. There are notches in the assembly that need to line up with the black tabs holding the assembly in place in order to pull the assembly out. Remove the top of the assembly to expose the circuit board.\nCircuit board with thermal fuse desoldered\nWith the assembly oriented as shown above, remove the screw on the right to separate the circuit board from the heat sink. At the top and bottom of the picture, the two solder points closest to the right edge connect to a thermal fuse on the other side of the circuit board. Before I went any further, I wanted to be sure that the thermal fuse was the issue. I soldered a jumper wire between the two solder points mentioned and plugged it in for a quick test. The blower sprung to life, so I was certain that the fuse was permanently blown.\nThe offending thermal fuse\nI desoldered the thermal fuse and removed it. It sits on the oposite side of the circuit board mounted right above the transistor. Be ready to deal with some thermal grease. The fuse is rated at 133 degrees Celcius, 2 amps. I went to the local Fry’s to find a replacement. The closest I could find was 117 degrees at 15 amps. I bit overkill on the amps (and added some bulk to the fuse making it nearly impossible to reinstall correctly. For anyone else doing this, I would recommend something like this instead.\nBefore putting the assembly back together, I cleaned off the old thermal grease and applied new grease (also got the cheap Thermaltake grease meant for computer CPUs so it should hold up well). As they say in the manuals, installation is the reverse of the removal. After putting everything back together, we now have a lot of air moving into the second row seats again. Better than when we bought the car in 2010.\n","permalink":"https://kj6lnh.org/fixing-inoperative-rear-vent-in-honda-pilot/","summary":"\u003cp\u003eHaven’t had much time for any projects over the last year or so. Having a new baby in the house tends to do that. Now that she is a little older and on a good schedule, I might be able to get a little time to work on some projects.\u003c/p\u003e\n\u003cp\u003eMy wife drives a 2005 Honda Pilot. Recently, we discovered that the rear vents for the second row of seats were not blowing any air. Of course, this makes the kids uncomfortable and Kimberly kept complaining that her back was sweaty. I hadn’t really looked into it too much so Carrie did some searching and came across \u003ca href=\"http://www.themafamily.net/2011/11/22/fixing-my-pilots-rear-heater-vents\" target=\"_blank\"\u003ethis blog\u003c/a\u003e. The short version is that the screen over the blower gets clogged with dust and a thermal fuse goes open circuit permanently.\u003c/p\u003e","title":"Fixing Inoperative Rear Vent in Honda Pilot"},{"content":"In my last posting, I turned a Raspberry Pi into a media center PC. One of the things I left undone before declaring the project a success was to set up some kind of hardware based remote control. I was only able to control the PC using the web interface or the XBMC app on Android and the iPad. I originally wanted to build some kind of remote control that didn’t require me to have my phone next to me and unlock the screen every time I wanted to pause the show. I really don’t need another remote control in the living room. I already have one for the TV, one for the Blue Ray, and one for U-Verse. Fortunately, the U-Verse remote is actually a 4-in-1 universal remote. A quick Google found the manual, so I programmed one of the slots with a Sony DVD player code. It had enough of the buttons defined to be usable.\nThe more interesting part is getting the IR code into the Raspberry Pi. There are instructions out there on the XBMC wiki for putting together an IR receiver. It’s basically a receiver on a chip with three leads: ground, power, and digital output. The digital output is suitable for the GPIO pins provided by the Raspberry Pi. The header also provides 3.3 VDC and ground connections. This was easy enough to hook up using an old CD-ROM drive audio cable. On one end, I moved one of the three wires so that all three were next to each other (default is 2 populated, one blank, and one populated on the 4-pin connector). On the other end, I just removed the connector by pulling the pins soldered to the wires out of the housing. I then just plugged the individual pins into the appropriate pins on the Raspberry Pi header. Following the instructions on the XBMC wiki, it was pretty quick to teach the Raspberry Pi the codes for the different buttons on the remote. Now it’s easy to pause a show just by pressing a hardware button on an existing remote. Total cost: $4.50 for the IR Reciever chip from Radio Shack.\n","permalink":"https://kj6lnh.org/ir-remote-control-for-rasbmc-media-center/","summary":"\u003cp\u003eIn my \u003ca href=\"https://www.kj6lnh.org/2013/12/raspberry-pi-set-top-box/\" title=\"Raspberry Pi Set Top Box\"\u003elast posting\u003c/a\u003e, I turned a Raspberry Pi into a media center PC. One of the things I left undone before declaring the project a success was to set up some kind of hardware based remote control. I was only able to control the PC using the web interface or the XBMC app on Android and the iPad. I originally wanted to build some kind of remote control that didn’t require me to have my phone next to me and unlock the screen every time I wanted to pause the show. I really don’t need another remote control in the living room. I already have one for the TV, one for the Blue Ray, and one for U-Verse. Fortunately, the U-Verse remote is actually a 4-in-1 universal remote. A quick Google found the manual, so I programmed one of the slots with a Sony DVD player code. It had enough of the buttons defined to be usable.\u003c/p\u003e","title":"IR Remote Control for RasBMC Media Center"},{"content":"For a while now, I’ve been using DLNA to push video to my TV from my computer. The biggest problem I’ve had with that is that is my Sony TV is very picky about the video format. I’ve been stuck experimenting with options to pass to ffmpeg to convert the video from whatever format the file is in and the format that the TV likes, MPEG2. Among the many problems include poor resolution, out of sync audio, and no audio at all. I had been using MiniDLNA on my Debian box as the server for the content. It’s pretty simplistic. It’s little more than a file server that implements the DLNA protocol. I found another DLNA server, Serviio, that will do some conversion on the fly. This worked better. No need to convert video formats or worry if the TV would not even see the file. The biggest problem occurs whenever I pause a video. When I resume, the TV thinks the DLNA server has gone away. So basically, no pause, fast forward, or rewind. I’d consider that a show stopper. Several times, I have resorted to connecting my laptop to the TV using HDMI and playing the videos that way.\nThat brought a thought to my mind. Obviously, Linux has no problem playing the videos. Maybe I can build a cheap set-top box, throw Linux on it, and connect it to the TV. I tried a project like this many years ago. I had gotten a mini-ITX form factor computer from a friend. It was basically a 5″ x 5″ x 12″ enclosure. It was non-functional, so my friend just gave it to me. It wasn’t too difficult to determine that the problem was a few bad capacitors on the motherboard. Replacing them was fairly simple and I had a functional system to throw Linux and MythTV on. This worked fairly well, until the motherboard died again. The biggest downside was that the RCA connection left the user interface barely readable, but the video looked fine.\nSo, back to present day, I’m looking for something that will talk to the TV over HDMI and won’t break the bank. Enter the Raspberry Pi.It’s a $35 single board computer with video and sound both output via HDMI. All I need is an old cell phone charger for power, HDMI cable, SD card, and a USB WiFi adapter. I already had all of that except for the WiFi adapter. I ordered a Raspberry Pi and a “WiPi” USB WiFi adapter for just over $50 with shipping and tax.\nOn the software side, I found RaspBMC. It’s a Raspbian based Linux distribution (itself derived from Debian) set up expressly for running XBMC (a Linux media player). Installation was pretty simple. Just have to execute the provided python script to load the bootstrap program to the SD card, then plug it into the Raspberry Pi and boot from it. From there, it downloads and configured itself. The entire process was very painless.\nThe final hurtle was to figure out a way to control it. My first plan was to use Synergy. It allows you to use the keyboard and mouse of one computer on another computer over the network. Works on Windows, Mac and Linux under X. I got the server installed on my laptop and the client installed on the Raspberry Pi. Unfortunately, I discovered that XBMC doesn’t run under X. I did find that there is a remote control app on Android and IOS. It works over the network connection, so I installed it on my phone. After pointing it at the RaspBMC install, it worked beautifully with almost no latency. Maybe a future project will be to build a hardware remote for it.\n","permalink":"https://kj6lnh.org/raspberry-pi-set-top-box/","summary":"\u003cp\u003eFor a while now, I’ve been using DLNA to push video to my TV from my computer. The biggest problem I’ve had with that is that is my Sony TV is very picky about the video format. I’ve been stuck experimenting with options to pass to ffmpeg to convert the video from whatever format the file is in and the format that the TV likes, MPEG2. Among the many problems include poor resolution, out of sync audio, and no audio at all. I had been using \u003ca href=\"http://sourceforge.net/projects/minidlna/\" target=\"_blank\"\u003eMiniDLNA\u003c/a\u003e on my Debian box as the server for the content. It’s pretty simplistic. It’s little more than a file server that implements the DLNA protocol. I found another DLNA server, \u003ca href=\"http://serviio.org/\" target=\"_blank\"\u003eServiio\u003c/a\u003e, that will do some conversion on the fly. This worked better. No need to convert video formats or worry if the TV would not even see the file. The biggest problem occurs whenever I pause a video. When I resume, the TV thinks the DLNA server has gone away. So basically, no pause, fast forward, or rewind. I’d consider that a show stopper. Several times, I have resorted to connecting my laptop to the TV using HDMI and playing the videos that way.\u003c/p\u003e","title":"Raspberry Pi Set Top Box"},{"content":"Today was RACES Exercise with Simulated Traffic 13-11. In the exercise, we were supposed to call up a net, contact as many other stations as possible using both voice and digital modes (QSO party style), and send a list of all of our contacts back to net control via voice or digital. In East Contra Costa County, things didn’t exactly go as planned.\nThe net was called up by John KN6SQ with Lou N6VV co-located on top of the hill at Willow Pass that separates Central and East county. It’s a decent location that can hear most of East county. Initially, I was the only one that checked in. It wasn’t until the county emergency notification system was activated that others got on the radio and checked into the net. I think we had a total of 6 stations. We usually have a few more than that for these exercises.\nAfter a while, John was getting us ready for the QSO party activity. He called for participants to come back to him. I gave a call back as did one other station, but it would seem he didn’t hear us. I’m not sure why (too many other radios in the background or the volume was turned down maybe), but after trying to call him back a couple of times, I gave up. I waited around a while to see if he would come back, but he never did. I dug out his phone number and gave him a call. Turns out, he had thought everyone had left, so he gave his status to the county Office of Emergency Services (OES) and was instructed to shut down the net if there were no longer any participants, so he did.\nA bit disappointing, but this is why we train, to figure out where communications breakdowns happen and what we can do to mitigate them so they aren’t a problem in an emergency. Will be interesting to hear the debrief next week from East county operators and to hear how things went in other sections of the county.\n","permalink":"https://kj6lnh.org/november-2013-races-exercise/","summary":"\u003cp\u003eToday was \u003ca href=\"http://www.coco-races.org/training/quarterly-exercise-rest-1311/\" target=\"_blank\" title=\"RACES Exercise with Simulated Traffic 13-11\"\u003eRACES Exercise with Simulated Traffic 13-11\u003c/a\u003e. In the exercise, we were supposed to call up a net, contact as many other stations as possible using both voice and digital modes (QSO party style), and send a list of all of our contacts back to net control via voice or digital. In East Contra Costa County, things didn’t exactly go as planned.\u003c/p\u003e\n\u003cp\u003eThe net was called up by John KN6SQ with Lou N6VV co-located on top of the hill at Willow Pass that separates Central and East county. It’s a decent location that can hear most of East county. Initially, I was the only one that checked in. It wasn’t until the county emergency notification system was activated that others got on the radio and checked into the net. I think we had a total of 6 stations. We usually have a few more than that for these exercises.\u003c/p\u003e","title":"November 2013 RACES Exercise"},{"content":"I finally started a blog. I’m going to chronicle my exploration of amateur (ham) radio and electronics. So, let’s get to the first post.\nFor the first post, I decided to go after something simple. My daughter has an Elmo guitar, the volume of which is, shall we say, earsplitting. I’ve been threatening to wire a potentiometer into the thing so it isn’t so loud. (for those that don’t know, a potentiometer resists the flow of electricity and has a knob to change the amount of resistance).\nHere, we see the speaker. I’m just going to clip one of the wires off and wire that to one side of the potentiometer.\nThis is the potentiometer. It’s a 50k ohm audio taper. In hindsight, a 10k ohm would probably have been better, but this was the only audio taper I had.The shaft is also a couple of inches longer than I would have liked.\nHere, I’ve wired two of the terminals of the potentiometer, one to the wire that was clipped off and one to the speaker.\nNow to make a place for the shaft of the potentiometer. A clamp, a block of wood, and a drill made quick work of it. Well, would have if I picked the right size drill bit the first time around.\nFinally, put it all together. Yes, it’s ugly, but it’s functional.\nWhat I would do next time: either get a better potentiometer and put a knob on it, or better yet, determine what value resistor would give a good volume and just use that. The latter has the advantage that the kid won’t go turning it back up to 11.\n","permalink":"https://kj6lnh.org/turning-the-volume-down/","summary":"\u003cp\u003eI finally started a blog. I’m going to chronicle my exploration of amateur (ham) radio and electronics. So, let’s get to the first post.\u003c/p\u003e\n\u003cp\u003eFor the first post, I decided to go after something simple. My daughter has an Elmo guitar, the volume of which is, shall we say, earsplitting. I’ve been threatening to wire a potentiometer into the thing so it isn’t so loud. (for those that don’t know, a potentiometer resists the flow of electricity and has a knob to change the amount of resistance).\u003c/p\u003e","title":"Turning the Volume Down"},{"content":"My name is Mike and I’m from California. I’m a data warehouse programmer by trade. I’ve been an amateur radio operator since 2010 and currently hold a general class license. I’m a member of Contra Costa County ACS and participate in a few public service events each year.. I’ve been interested in electronics since I was a kid, but I’m just starting to get into building electronics from scratch.\n","permalink":"https://kj6lnh.org/about/","summary":"\u003cp\u003eMy name is Mike and I’m from California. I’m a data warehouse programmer by trade. I’ve been an amateur radio operator since 2010 and currently hold a general class license. I’m a member of \u003ca href=\"http://www.cocoacs.org/\"\u003eContra Costa County ACS\u003c/a\u003e and participate in a few public service events each year.. I’ve been interested in electronics since I was a kid, but I’m just starting to get into building electronics from scratch.\u003c/p\u003e","title":"About"}]