Just realised a shortcoming of the new journal format. If I don't finish an entry and forget to use the -l feature to go back and edit the last one then I can't use the automated tools to go back in history and update things. I can manually go edit the files so it's not a big deal, but still I should probably go add a feature to edit previous entries as well as just the last entry. I can edit either by date, or maybe just a -g N where it goes back N days.
OK, so done with that. Turns out when I wrote the code I wasn't really just looking at the 'last' entry when I used the -l flag, what I'm really doing was looking at the zero element in the previous journal array. It was easy enough to add a new option in so that "-g N" will invoke the same code but with the zero element replaced with whatever -g is. So -g 0 gives us the last one, and -g 1 goes back one entry, etc, etc. I probably should put some bounds checking on that, but it's working well enough for now. The interesting test will be tomorrow since it's a new month. Will my design work as expected and not freak out when the month changes???
The other thing I don't have then is a way to regenerate prior month pages. If I did a -g 45 or something then generator only does the current month and last 30 days... so even a -g 2 isn't going to work when I cross the month (or year) boundary. Dammit. Guess I can go modify the month page generator to look at the month the file is we're editing is from rather than the month we're currently in. Probably should have done that in the beginning. Let's see how hard it is to pull the month out of the entry metadata.
Unrelated to code, I spent the morning yesterday cleaning up the down branches that were too big for the woman to drag off. Used a good 3/4 of a tank of gas in the chainsaw and all I got to show for it was this little amount of firewood. Lots of rotten branches, lots of stuff too small to be worth hauling, etc. I've run out of room in the woodshed and on my secondary wood holder so I had to start another one. Michael had dumped some old fence posts out back so I found the two best ones and used them to make the base of wood holder #6.
Last night we went to see Jeff Foxworthy and "Larry the cable guy" at DPAC with the woman's trainer and her husband. We got the tickets 6 months or so ago and I had sorta forgotten about it. The show was actually pretty good, both guys had updated material that was true to the original but fresh. I tried to class it up a bit by getting wine to go with my pretzel. Didn't really work...
I intended to install the HAM radio antenna on the truck, I had been thinking about how to route the antenna wire and wanted to see if it would work. It did, and then I just kept going routing the radio head, speaker, mic and eventually the power cables. Before too long I had the whole thing done. Well, mostly done.
First problem was that the GM battery setup is for a side terminal battery. No biggie, except by default they don't have a provision for adding anything onto the terminals. Aftermarket companies make side terminal adaptors that have extra bolts on them so you can add ring terminal connections to the battery. The local auto parts place had them, so it was an $11 fix to get my wires connected like I wanted them.
Second problem is attaching the speaker where I want it. I don't want to drill holes so I'm gong to use velcro again like I did in the 4runner. It worked well there and the speaker was vertically mounted on the glove box. Here I'm going to put it closer to me, actually horizontally mounted on the center console behind the arm rest. The truck is big enough that it actually works and is not in the way, and puts the sound in the center of the vehicle. I've got it run there, but have to find my velcro or order some.

I reused almost everything from the 4runner install including the mounting bracket. It works pretty well and doesn't bounce around too much. Best of all, no cutting anything. With the antenna mounted on the rear door and the radio itself up on the shelf under the rear seat I had enough cable I could remove the extension piece I had made up for the 4runner so there is actually less cable strung around.
My damn work AMEX was stolen. Charges at Target in Georgia and a gas station in CA were rejected, and even after I hit the "no, these aren't my charges" on the email they sent me which took me to a web site (so I know they knew) they _still_ let more charges go through today. The GA and CA charges were 'card present' so apparently someone cloned the cards, but the two they approved were online. Sigh. I'm cursed.
We've been having all sorts of visitors to the barn lately. Random cats, racoons, and the fox. Normally "our" cat ends up sleeping in the foam cooler house but the other night the woman noticed a possum coming out of there.
Gun related expenses for January were 300elow the 2015 monthly average. That's a good start, and I think next month and the subsequent months will be ever better.
This did show up yesterday, it's the Laserlyte Pro widget that works in most calibers and flashes a laser when the noise from the firing pin hitting a snap cap triggers it. This will let me practice some dry fire with the laser software with my actual gun with the actual sights and actual trigger. Not good for more than 1 shot at a time (having to manually cycle the action obviously) but it's something.
Long day at Fujitsu again today, with some drama in the morning (since I wasn't going to be here and everyone was freaking out thinking I was). On the upside, we went to a Persian place for lunch and I had a decent koobideh.
We have power once again! Wee! And heat. Heat is good.
Found a bug in my code. This is an update to see if it's fixed.
The storm last night was pretty unimpressive, but the whole town shut down anyway. I'm assuming things are going to get worse, but for now it's not even managed to get the entire pond iced over.
I've got the dynamic 30 day look-back working in dev, now need to see how it works in production. I was really worried about how long my inefficient find algorithm would work on a whole year's worth of data, but apparently it takes 0.035s of real time on my 2015 directory. Guess computers are faster these days, even a raspberry pi is enough to let you get a little lazy.
I figured out how to keep myself from looking at the laser when I'm doing the dry firing training. I found myself not looking at the sights but watching where the laser was hitting which is bad bad bad. Fancy new systems use IR lasers, I just stuck this piece of cardboard on the front of the pistol. I can see the sights, but not where the laser is hitting. Dorky, but it seems to work. It's just long enough to block the peripheral vision from my left eye. I had another one on there and just kept trimming until it was too short and then backed off 1/2" on this one. I can't practice drawing with that on there obviously but it's easy enough to do that as a separate session.

OK, so this entry looks a little different than usual. The date is in English instead of German, the time looks like a time stamp instead of just written out German.... and the page is being dynamically generated after every entry. After 17 years of manually updating the page each entry I've finally automated it. Not very lazy sysadmin like of me to wait that long.
Previously I had an alias I would change each month that would point to the current journal. I would just run that alias and at the top of the file add in what I wanted to say for the day along with the date stamp. I purposely put them in reverse order not because I couldn't figure out "vi + filename", but rather to make it easier to see the new stuff when browsing. I didn't want to have to scroll down all the time to make sure my new entries looked correct. Maybe there is some HTML thing I could do to make it go to the bottom of the page when loading? Never thought of that.
Now what I've done is broken each day into it's own file. When I run my editor now instead of just going to a static place it figures out the day and either creates the new entry if none exists or if it does exist it just adds another time stamp and sends me on my way. I've got an update only flag of -l which takes me to the last entry without changing it. That way I can go back and edit things or finish up when I make an entry and don't complete it. It's common enough that this feature was the first I added.
Once the editing is done, and aspell is run on the new file, I build a static page for the month which is what gets served up. I realise I could just do that dynamically but I don't want scripts running on my web server, especially ones I write.
I also want to make a "rolling 30 day page" which will have the last 30 or whatever entries on it so people don't have to click on the month anymore, they can just always click on the same "current journal" button and get the latest. That way if someone was not up to date when the month rotates they don't have to go back to the previous month and see what they missed.
Unrelated to the new code, I saw this on the shooters forum last night in the joke section and it actually made me laugh out loud. Not sure why.

This is a subsequent entry, and the first one that's running from the real production http area vs. running elsewhere and having the generated html copied over. Oy! Testing in production. Who does that???
What's really funky is that I can't see the other days in the file like I used to, so every time the editor fires up with stuff "missing" I get all freaked out. Fortunately it shouldn't last once I'm used to the new method.
Last of the first test run, then I'm going to run the publish script and see what happens! I've tested month roll-overs but not in production so this could break again in a few days.
I had lunch over at Biogen today and the have some fancy stuff in their little cafe. Bison sliders were damn good. They had a little bit of heat and the slaw wasn't overly coated in mayo or whatever goop they usually put in slaw.
I also finally remembered to turn off the solar roof in the Prius. Instead of the car being warm when I went outside today it was 30F as the sun was out and the little solar thingy was doing it's best to circulate in that outside cold air into the somewhat warm car. I guess it's not got a temperature probe on it to let it know it's too cold.... the human is the sensor and that's why they put in a switch.
The woman is worried about the cold and wind (had some snow/sleet coming down for a few minutes today) so she wanted to block off more of the run. It's ghetto as hell, but it might last the two days of cold weather we're supposed to have. I kept telling her that masking tape won't stick to damp wood, but she's convinced it will. The top and left side are held in by the grommets in the tarp over some nails I put in the 4x4 and header.

The laser tracking software had an update so I decided to try it again. One new feature is tracing what happens after the shot breaks. Instead of just a dot where it first hits, you get a dot and then the trace of where it move after before it shuts off. Since the gun is recoilless any movement is caused by the shooter, not recoil. This picture is a perfect example of bad trigger control. I'm trying to draw and fire 2 shots in 2 seconds at 10 yards. The first hit was on the right, then I pushed/twisted the gun left and then fired again, and continued pushing the gun left. There should be little to no blue trace since nothing is moving except my finger. In theory. This is pretty amazing really, shows you how important follow through is.

I went to Krav this morning because I hadn't gone all week. I was going to go Thursday but whatever I did to my back on the flight home was still causing me a lot of pain so I changed my mind. It's still bothering me today, but at least it's not bad enough to wake me up when I roll onto my back. Ouch.
Because the weather is going to suck the next few days (cold, rain, etc) the woman and I wanted to get outside a little. We went to Bond Lake in Cary and did the lake walk trail. It's 2 miles exactly, vs the Bass Lake trail in Holly Springs that turns out to be 2.02 miles. Does each city have to have a park with a lake and a 2 mile trail? Perfect hiking weather in any case, I think it was in the high 50s or maybe low 60s.
After the hike I got motivated to make some shelves for the workbench topper, and I had a piece of 1x6 in the barn that worked perfectly with the brackets mom gave me. The skill saw blade is about shot though, it's leaving lots of material behind on the cuts and ripping up the ends. Cutting through that rubber mat was likely the end of it.
Dinner last night was typical steak house fare, and I tried to mix it up by ordering the game hen, but alas they were out of hen. Sigh. The Fujitsu dude ordering wine for the table knew his stuff, there were many good bottles to sample from. I tried all 3. :)
In Dallas for a 2-day meeting with Fujitsu. I shouldn't really be here, but the guys from Fujitsu RTP wanted me here. I'm clearly the 10th or 11th wheel at this party at this point.
Enterprise was out of cars, but had a huge selection of vans to pick from. I grabbed one of the Transit minivans which has worked out well since I'm driving everyone around.
The woman sent me this from this morning. First the deer, now she's hand feeding the squirrels.
Not drinking soda is killing me. This meeting just goes on and on and on and I really want to fall asleep.
I'm not sure about these reading glasses. I can't use them with the computer as I would have to sit right on top of the monitor. They're OK for actual books, but again I have to hold the book so close. So far the only real use has been for things with tiny tiny print that I can't read from any distance close or far away, in which case at least I can hold stuff up to my face to see it.
The ridiculous taco holders that I got for giftmas were tested on Friday, and they do in fact hold tacos. If you try to move the plate they just fall over and dump everything out so I'm not quite sure what they're supposed to help with. Display of your tacos I guess.

I picked up a stripped lower as "insurance", just in case I want to build something up in the future. I still predict that prices will go crazy the closer we get to queen Hilary's coronation and will go absolutely ape shit after, so I will try to hedge against that buy buying the part they can easily ban. I don't plan on building this into anything, but it was sold as a stripped lower so I can build it into a pistol if I want to use the 556 SBR upper I have. The rest of the year will just be stockpiling ammo and mags.

I had intended to get this on Friday but ran out of time. Previously I emailed the shop and asked them what they had and they said the had Anderson lowers in stock. I wanted a Spike's just due to their name brand recognition (easier to resell) but they didn't have any. When I got there Saturday morning they had only 1 left... and it was a Spike's. Go figure. While waiting in line to do the paperwork the guy behind me (who's woman was buying a used S&W shield for only $350!) asked the shop droid if they had any lowers left and the droid said I got the last one. Beat that guy by seconds!
The weather today was fantastic, sunny and in the low 60s. The woman went to ride, and I decided to fire up the bike and go for a ride myself. I've been meaning to top of the tank and add the fuel stabiliser for winter storage so this was a good opportunity to do so. I stopped by the barn to take a few pictures, then returned my library book and put the bike up. Some cold actual winter weather is moving in so there won't be any more riding in the near future.
I forgot to post this earlier. The woman has pretty much got the deer to trust her.
We setup a spreadsheet with all of the household expenditures for 2015, and I went and created a section for myself as well. Now that I've rebuilt the arsenal and bought the truck, it should be easy to cut spending by a whole lot next year and get my spending back to less than 50%.
Of course the household expenses are going to go crazy in 2016 if we get to stay and have to put a roof on the house and get the siding repaired and painted. The instalment from the Shasta land sale should cover those... if they make it.
I sold off one of the extra shotguns and am not going to replace it with anything. I've picked up a $12 rail adaptor widget to stick on my turkey gun and will use that to mount the light and turn it into the home defence gun. Bad guys won't know they're being shot with a $200 shotgun instead of a $700 shotgun.
The woman has been working on this penguin puzzle for a long time now and finally finished it last night. It doesn't look especially hard, until you notice that mots of it almost the same shade of color and that it has zillions of really oddball pieces (triangles, crowns, birds, etc). I think she's going to start the mystery puzzle I got her next, or maybe one of the larger puzzles she got for giftmas.

With the flip-up rear sight on the SBR it's sorta hard to get to the charging handle. I asked one of the AR crazies in the office what he thought of several I picked out, and he actually had 2 of them. I pulled them out and brought them in so I could try them in the SBR and see which I liked the best. I like the badger and the BCM, didn't like the ambi twin grabber version in the middle. The BCM is expensive because you have to buy the whole unit, the badger is something you can add to your existing handle which is what I'll end up going with. I'll do both the SBR and the "real" rifle just to make them consistent.

Yesterday we went to see the Codex Leicester and some MC Escher prints and wood cuttings at the museum. My parents came along and we all went to dinner at a Thai place after. Everyone has been raving about the Thai place and I've not been, but now I have and I gotta say... it is pretty damn good. Not "good for NC" good but actually good. Mom ordered the dish I was going to get so I got something else and was able to try two things. Very happy now that we have a Thai place that I can approve of: Tom Yum Thai.
Bill's $30.8M book was interesting to a point, but not being able to read Italian and not being able to read in a mirror sorta put a damper on it.
Today's chores included caulking the coop roof, cutting firewood, cleaning out a clogged down spout, replacing the batteries in the weather station central radio (last 2 years apparently), clearing the driveway and finishing up the peg board and lights on my new loading bench "topper".
I wanted to create a 3 legged top for my loading bench so that I could hang some peg board on the back and add some lights, as well as have a shelf for some bins of misc crap that are currently in the closet. Dad and I went to Home Depot on Friday to get the materials and did most of the structure and today I did the finish work. The lights used to be on top of the bookcases in the downstairs living room in the Milpitas place and since the move they've just been in a box. They were using 20W halogen bulbs which get really, really hot. I went to order some LED replacements on Amazon but since I had to run errands today anyway I checked Walmart... and they had GE bulbs of the right type and everything for $8. Cheaper than amazon! They only had 3, but I only needed 3 so win all around for me.
It's hard to get an idea of just how bright they are (maybe too bright!) but you can see that at the same ambient light levels what the LEDs on does to the camera and the light levels on the wall.
Camera footage proving I really was working! I figured out that if I put a cinder block down in front of the woodpile and wedge a log under the edge of the pile and on top of the block like I'm trying to lever the pile over I can quickly cut up the wedged log. Way faster than how I was doing it and I didn't have to buy one of the fancy log holders. A good red neck can do anything with a cinder block.
The sad part of today... :(
Year 17 of the journal...
Survived New Years crap just fine, and it could almost be said that it was "fun". We had Kat and David and Jonathan and Blair over for heavy appetisers and games.
"Cards Against Humanity" was entertaining at times, but "Munchkin" was long. Neither Kristen nor I had ever played it and she was at first confused about all the "gamer slang" and stuff in it but in the end she ended up winning! The two good players duked it out and she just sorta quietly did her thing and no one paid as much attention as they should have and boom, she got to level 10 first. Crazy.