Welcome to my homepage

Best Viewed Without Eyes

Daily recap - 2022/08/02

Jack shit going on. Back to work this week after a week off. My nephew came to visit and I took some time off so we could do fun stuff. We went up to the top of Pikes Peak, walked around some downtown spots, ate out a bunch, saw Nope, played video games at home and in arcades, and just had a good time. The best part though, was sleeping in. Good fucking christ do I miss sleeping in. Not until like, noon - which I could definitely do - but like, just 10am. There's nothing stopping me from doing that now, other than the fact that I'd only have an hour between jobs, which is a pretty big deterrent. Ugh. Maybe one day I'll be able to just work one job 🤞

Daily recap - 2022/07/20

Day job, night job. Food between. Nothing special happened today. But night job lately... Oh boy.

I've been tasked with building something to let people see when there have been changes made to a website. A new page, a change to a page, whatever. That sounds easy, right? Just scrape some pages, save the text, and the next time you scrape the page, compare the new text with the last bit of text we saved, and if there are differences, save those. Easy peasy, right? Fucking wrong!!

First off, scraping a site - by which I mean using some code to "look at" the homepage, grab the content and save it, extract any links in that content, figure out if we should follow any of those links, then follow them and start the whole "extract content, find links, follow" process until there's nothing else to "look at," is no easy task. It sounds simple, but it's really not. One way we can do this is to grab a page and try to extract links with regular expressions. That's a bad idea for a number of reasons that need no explanation. Another better option we have is to use a library, like Cheerio, that does all that hard work for us and let's us do something like $('a[href]') to pull all the links out of a page, but we still need to figure out if they're links we should follow. And if humans had anything to with the composition of a page, there's a good chance you'll encounter some dumb shit that makes no sense and needs a special exception in your code. Broken HTML? Guaranteed. Links with href values that make no sense, but a browser can somehow understand? Sure. Links with no href when the HTML loads, but they get populated by some Javascript after the fact. That wouldn't surprise me one fucking bit. All this is to say absolutely nothing of the fact that a lot of sites, especially larger ones, have protections in place to prevent bots from doing exactly the thing I'm trying to do.

Okay, so "scraping" a site is out of the question. Well, you know what most sites (though, not the bigger ones, strangely enough) have? Sitemaps! Boom!! We'll just grab the sitemaps, which tell us exactly which pages exist on the site, and grab the content on those pages. Easy enough. Oh, except some sitemaps contain URLs that aren't valid. https://somedomain.com /a-page.html is not a valid URL, unless I missed the announcement from ICANN that "dot-com-space" is a new TLD. I guess technically https://somedomain.com/./a-page.html is a valid URL, but like, what? Slash-dot-slash? Was this website built by Fatboy Slim? Oh, and these sites will also block us if we scrape pages too quickly. OH! Some sites have thousands - or hundreds of thousands - of pages. So even with a one second delay between scraping pages, it'll still take a stupid amount of time to scrape an entire site.

Oh, you know what?! robots.txt tells us pages we're not allowed to scrape, and also (I learned during all of this) how long we should wait between scraping pages. Let's look at the robots.txt and make sure (a) we're not scraping stuff we shouldn't and (b) we're not scraping a site too quickly. Of course, any jackass would realize that robots.txt probably isn't telling them what not to scrape or how long to wait 100% of the time, but I'm a special kind of jackass, and that did not occur to me. Not every robots tells you how long to wait, or what you're not allowed to scan. Cool, cool, cool, cool.

So here I am. Waiting sometimes 4 days for a site to finish being scraped (I'm not sure how long it actually took because I killed the process after 4 days) and learning about all the ways people can supremely fuck up something as simple as a sitemap. Seriously?! SLASH-DOT-SLASH?! WHAT THE FUCKING FUCK?!. I'm pretty sure the only way to get this thing to run in any sort of timely fashion is to completely rewrite it so it can be distributed across a fuckton of servers and processes... And a lot more infrastructure.

Daily recap - 2022/07/16

Nothing happened today. Saturday errands, then hanging out writing #code. Code writing went well, but Github is still being a fucking asshole.

I'm not sure what the problem is, but I've got a test that consistently fails at this one spot in their "Actions," but it runs just fine on my machine. Ugh. It's gotta be something with how I've got the action configured, or maybe the code is legitimately broken, or maybe it's something else, but I'm having a hell of a time figuring out which of those things it is.

One very interesting thing - during my last session of test debugging, I realized my local Redis version didn't match the version in my workflow config, so I updated the workflow config to match... And the fucking tests PASSED! Literally all I did was change the Redis version in my workflow config, commit that, and boom, I got the green check. "No fucking way" I thought, and I was right! Because on the next commit where I just removed some caveman debugging, the goddamn tests failed. Ugh.

No clue what the problem is, but I've decided I'm not too bothered by it. The tests pass for me (classic "it works on my machine 🤷‍♂️") so I'm not going to lose any time trying to figure out why Github hates me so much. I can still write code and run tests, so suck it, Github... Suck it dry.

Weird car in Colorado Springs

Lauren and I were out running our Saturday morning errands, and we pulled into Ace to discover this beast.

The owner wasn't around so I couldn't find out anything about it, but just look at this thing! It looks completely custom, and completely bonkers. I wish I could've talked to the person that built it and taken a ride... It is probably one of the scariest and most fun things in the world.

Daily recap - 2022/07/07

Found this today after thinking "So many song lyrics are just nonsense, I bet I could use GPT3 to generate lyrics" and then thinking "I bet someone else has already done this." Not great, but also, not the worst. https://www.jarvis-lyrics.com/

Finally finished helping my friend get some servers moved around. The database was the worst. Some bullshit with needing permissions just right because computers are stupid... Anyway, it's done now. Hopefully I won't have to fuck with it ever again.

Daily recap - 2022/07/05

Nothing today. I'm exhausted. Went to bed too late last night. But yesterday, holy shit.

A dude across the street blew up his hand! Like, people-looking-in-the-street-for-parts-of-it blew it up. Of course I helped look, who could resist?! I saw what people said was part of a thumb. A girl pushed it around on the pavement with her foot. I assume it was a part of something because someone quickly came and collected it in a bag of ice and rushed it off to the hospital. And then there was a fist fight at the same house. Nobody called the cops (good). I'm pretty sure the sun hadn't even set.

After that crazy shit, nothing eventful. Friends, fireworks, beer, food (so. much. food! ribs, chicken, coleslaw, mac-n-cheese, potato salad, baked beans, potato wedges, candied bacon, and more stuff that I'm forgetting - Lauren fired up the grill at 10AM) music, lasers -- one of our friends is a DJ and he setup some speakers and a laser projector on our house -- it was pretty rad.

The neighbors seemed to enjoy it, and one guy even came over and thanked us for the entertainment. The fireworks in the street, that have happened the past two years, pretty much stopped after that dude fucked himself up, but there was still a great show in the park and literally all around us in the neighborhoods. Overall not a bad night. For me, anyway. I'm sure that dude with the messed up hand has different feelings.

Daily recap - 2022/06/26

Doing this early today because instead of spending my whole damn day in my office, I'm going to setup the HTPC and hang out in the living room.

Today was good. Talked to both parents for a little while and got some another Indieweb feature - Webmentions - implemented on this dumb thing.

My new keyboard (Keychron K8 with hot-swappable keys) arrived yesterday, and I'm quite pleased with it. It feels a bit quieter than my previous keyboard, though that could be due to the desk mat that I also purchased. Regardless, it's nice to have function keys and number keys and to have the arrow keys back in a place that makes more sense... Now I just need to learn some new muscle memory for those things since I got so used to where they were on my last one. This week will have more typos than usual, I'm guessing.

We also got 3 new pieces of furniture - a credenza for the dining room, an entertainment/tv stand thing for the living room, and the bonus piece, a VHS/CD cabinet that Lauren is using to store her video stuff - for the price of 2! When we were picking up one piece, the seller offered us another one for free. Not too bad at all.

Back to the grind tomorrow. And then only a week until we get a fireworks show on our street.

Daily recap - 2022/06/24

Well, this happened. Can't say I'm surprised after the leak a while back, but it's still pretty amazing.

Nobody was stopping people from not getting abortions, so I don't understand what the problem was. What is the deal with these fucking people? Why do they want to impose their beliefs on everyone? Why do they think that making someone have a kid they don't want (for whatever reason) is going to be a good thing for the kid or the person that's gotta raise the thing? Why do they want to give everybody guns? Why do they get elected in the first place? What the fucking fuck is going on?!

In the car today I heard the president on the radio saying "Roe is on the ballot in November. You've gotta elect people that will..." blah blah blah. Dude, we elected you!! What are you doing? There's no shortage of democrats in power, and there's a democrat in the fucking white house! Executive order that shit or something, I don't know. The last dude didn't seem to have a problem doing that, why can't you?

Anyway, nothing happened for me today. Errands and yard work tomorrow. Might be picking up a couple bits of furniture I found on Facebook... We're at least gonna go take a look at 'em.

Daily recap - 2022/06/23

Another (almost) week of work, another week of nothing really exciting. We went to a Rockies game on Sunday for Fathers Day with Lauren's uncle, and that was pretty fun. Expensive as all fuck, but fun.

I'm beginning to regret this whole "daily recap" thing, since most of the time it's just me talking about what I had for dinner and absolutely nothing else... Whatever.

Daily recap - 2022/06/17

Day work and night work, all the same. Got the carpets cleaned today and Dexter hasn't thrown up on them yet. I wonder if we'll make it to 24 hours. I think last time we made it to like, 16 hours before he puked on the carpet. I'd say more than 50% of our house is tile or hard wood, and he goes to the end of a carpeted hallway with no exit (in other words, he never goes outside that way) and pukes, shits, or makes some godawful mess that is super fun to clean out of the carpet. He's fucking cute, though.

As a result of getting the carpet cleaned, we spent the afternoon outside and the evenings in our offices, because we can't put the furniture back yet. Fun.

Update on my whining last night about Apple making shitty software. I discovered today that Podcasts.app (yes, I use it -- the app I purchased started acting wonky, so I had to do something!) also can't seem to remember the window size or position. Fucking ridiculous.

I got my site updated tonight! Running the newest PHP and CakePHP. I'm pretty happy. Wasn't as bad as I thought it'd be.

Daily recap - 2022/06/16

I decided to investigate why the hell News.app on my desktop can't seem to remember the window size. It's a brand new computer that I've not had a chance to fuck up that bad, right?

Turns out it's not me, it's just Apple making shitty software (I said to no ones surprise). I found this post on the Apple forums and the "solution" is to uncheck a setting in the system prefs, but that only works if you quit the app. If you close the window without quitting it, no good - it resets back to a small, perfectly centered window. Apple, seriously, what the fuck?

This reminds me of a post by Benjamin Mayo about how shitty Apple (News, Music, etc) services are.

They are built to a passing grade, but nothing more.

That pretty much sums it up. Apple makes wonderful hardware, but more and more, their software and services are less impressive. News is a fucking catalyst app, which probably doesn't help anything, but isn't Messages also a catalyst app? It can remember where I place, and how I size, the window, so why can't News? Music is such garbage, that I try not to use it, and I fucking pay for it! Podcasts, while not a service, is still some in-house Apple software, is so shitty that I spent money on an app.

But like I said, their hardware is top notch, and while they can't seem to figure out how to make a decent RSS reader (which is all News.app really needs to be, right?), they do a pretty good job on the OS, too. Certainly the most attractive and easy-to-use *nixish desktop I've ever used.

Daily recap - 2022/06/15

Nothing doing today. Work in the day, work in the night, dinner in between. Last night was fun... Kinda. I spent some time upgrading a CakePHP 3.8 app to 4.3 and what a fucking nightmare that was. But now it's done and I just need to make a new server and deploy it. Yeah, make a new server because that's probably easier than upgrading the current one. I've had enough upgrading bullshit for a while.

Daily recap - 2022/06/13

Boring day. Exhausting day. I was up until three in the fucking morning yesterday (today) for some dumb reason. We had people over for some drinks and grilling out, and it was fun. So much fun that I didn't realize it was almost 3AM when I cracked my last beer. I was wide awake! Not so much this morning when the alarm went off, though. Jesus, it was awful. I think I'm gonna turn in early tonight, try to catch up on some sleep.

Daily Recap - 2022/06/06

Monday. Nothing fun. Work was uneventful, day and night. Finally got a side client project off my plate, and that made me happy.

It was kinda rainy today, kinda sunny, too. It was weird. We thought it was gonna hail, it didn’t

I missed the WWDC keynote because I didn’t configure some shit right. It’s on my “watch later” list on YouTube.

I put a bid on a smart sensor for the EcoBee on the electronic bay because EcoBee won’t sell you just one. I hope I win. It’ll be nice to have more accurate temperature readings for the HVAC.

I had an idea for a social network (I know) and jotted it down in my notes. Probably gonna forget about it immediately.

Posted this from my phone!

Goodbye, Hackintosh

In November 2021 I built my first (and last) Hackintosh. It was a fun process, and having MacOS running on my own hardware was very fun, but I've had my fill. Problems with updates, fucking with plist files, keeping up to date with OpenCore changes, losing whole weekends to OS upgrades, having to fight to get features back after OS upgrades, the fact that I never got the mic/headphone combo jack on the front panel to work... It's worse than running fucking Linux!

Anyway, today I wiped the old bastard and I'm installing Windows 11 on it at this very moment. The plan is to put it in the living room and turn it into a media center/gaming PC. It's nice to have it off my desk -- the Mac Studio is about 1/5 the size of the Hackintosh, so I've got loads of free space now :-)

As part of the decommissioning process, I wanted to put the original WiFi card back into the machine, which required taking it completely apart, which was as shitty as I remembered. Somehow I managed to make it so the fan light doesn't come on anymore, which is more annoying than anything, especially since I took the video card out and unplugged a few cables at least 3 times trying to get the fucking thing working. I did make one fun discovery, that explains why the machine had problems converting a gigantic video file -- turns out, I'm not great at applying thermal paste. I should've been a bit more liberal with it, it would seem.

Daily recap - 2022/06/02

Nothing happening today other than the fucking problem at the day job... I thought we had it figured out, and then today, after a lot of testing, QA managed to break it again. Glad they did, because I don't want it to get out to customers all fucked up, but jesus fucking christ, I wish we would've chosen a better/easier way to do this.

Daily recap - 2022/06/01

I took a little time and setup my new machine today. Then I realized that the usb-c -> displayport cable I bought was useless because my KVM has the displayport cables built in, so I need another usb-c -> displayport adapter plug (like I have for my work laptop). Something else cool is that the usb 3 ports don't put out enough power - even on a powered usb hub - to run my keyboard. Webcam works fine, mouse works fine, keyboard, not so much. Now I get to take my changes buying some no-name cables and a usb hub from that bald bastard, and hope they don't burn down my house. Yay.

I think I finally got that fucking thing with my day job figured out. Weeks on this fucking thing. WEEKS! We'll see what QA says tomorrow. I do not have high hopes.

Nothing else worth reporting. Regular stuff, really.

Daily recap - 2022/05/31

I got through a super stupid thing at work today. A thing I'd been fucking with for like, 3 weeks, I finally figured it out... I think. We'll see tomorrow when QA gets their hands on it and tells me it's still wrong. Oh well. 🤞

In other news, my new computer arrived today! Very exciting stuff. And it was basically free (if you don't count the time I worked while on "vacation" to finish a project) since it was a bonus from my night gig. Not too shabby, eh? It's a Mac Studio with the M1 Max processor just a smidge better than the base model, 32GB of memory, and a 1TB drive. Pumped to get into it and start using it. Then I'll need to figure out a way to put my current machine downstairs so I can use it for video games, and things that aren't accessible from the Roku.

We went to Costco tonight to pick up some shit and, as usual, we left with way more than we planned on. We got a new trash can, which is fucking great. The old one was a terrible design, and it looked kinda shitty. It's weird being a grown up and getting excited about something as mundane as a new trashcan. Damn weird.

Daily recap - 2022/05/30

Today was a holiday, so no work, and that's fun. I had a nice sleep in - didn't get up until 10 - and that's nothing to complain about.

There was a couple things I wanted to do today that I didn't get to because we were out of the house, but it's nothing that can't wait another day.

We went to a friends house for a little Memorial Day cookout. Ribs, brisket, flan... It was good.

Daily recap - 2022/05/28

Doing it early today because there's not dick happening. Today was housework day, so we spent the first half of the day doing that -- dusting, vacuuming, washing bathrooms, mopping, washing windows, etc, etc -- and the second half of the day will be spent doing nothing. Well, almost nothing ;-)

I made some changes to my website -- added a bookmarklet so I can easily share stuff from other websites, tweaked some styles, and other little bits and pieces. Nothing super exciting for anybody but me, and even for me, I'd say it's only mildly exciting. Fun, though.

Ooh, one more actual fun thing for me is that my new computer (Mac Studio!!) is in the country. The less exciting part is that it'll be here Tuesday, which means it'll sit on my desk, in the box, until Saturday when I've got time to sit down and get it all setup.

Daily recap - 2022/05/23

Monday. Rainy and dreary, which I don't actually mind. Work was meh. More time spent staring at the screen and in calls trying to figure out this one dumb fucking problem, but I think it's finally sorted... I hope, anyway. Night work is more exciting because I'm getting to write code, but I really don't feel like doing anything tonight.

I've got jury duty tomorrow. I'm "on call" which means I don't have to show up at 8AM (thank christ) but I do have to call in at 11:30AM to see if they need me to come in at all. Fingers crossed they do not.

We went to Cost Plus World Market (awful name) and picked up a few things that Lauren ordered, and more than a few snacks that I spotted while we were in there., so that was fun. Afterwards we went out to a 50's diner-style joint for dinner called Gunther Toody's. The food is good enough, but we really went for the cherry soda -- they add the cherry flavor to the soda and it's just so fucking good, that I'm happy to put up with a kinda soggy burger and fries soaked in cheese that I did not order, just to get that stupid soda. They've also got some really great appetizer chips that are somehow crunchy and soft, and they're served fresh out of the fryer. Good shit, man.

Daily recap - 2022/05/19

I'm trying something new. I'm going to see how long I can sustain summarizing my day every day. Get ready to be bored.

Today was good. The day job was good - getting agency plan shit done, fighting stupid bugs - and night job was meh. Not meh because of the work really, but meh because it's something dumb that I fucked up when I wrote the code originally, so now I've gotta go back and fix my fuckups.

The single sunflower that was growing (from probably 15 seeds I collected from my dad's house in TN and planted here) in the raised garden in our back yard got all fucked up somehow, and it's probably dead, which was a bit of a letdown, and none of the other seeds I planted have sprouted yet, which is also a bit of a letdown. I hope at least the wildflower seeds Lauren threw down come up. I'm so sick of looking at that fucking pit in the back yard. I'm not sure if I'll try planting more sunflower seeds.

We had spaghetti for dinner and it was fucking delicious, as usual. I'm pretty sure putting Lauren's sauce on a bowl of dog shit would make it edible. I'm looking forward to throwing some of it in my chili. Oh yeah, I'm gonna make some chili because it's supposed to FUCKING SNOW TOMORROW. May 20, 2022, there is goddamn fucking SNOW on the forecast for Colorado Springs. Fucking lovely. I shouldn't complain because we definitely need the water, but why not rain?

I took Lauren to yoga after work, then came back home and watched a nerdy video about the first digital video camera to use mp4. Well, watched about 30 minutes of it, then I went back to retrieve Lauren from yoga. Then it was night-work time.

Nothing else really to talk about. We're gonna go see the Bob's Burgers movie in a week, so I'm excited about that.

Look at what I've done now

After switching from Spotify to Apple Music, I found one thing I actually missed from Spotify, and that was podcast playlists. The Apple Podcasts app is not great, so I use Downcast, which is much better, but has its own issues. For some reason when I search through old episodes of a podcast, Downcast will crash about half of the time. After I restart it, my playlists will have vanished, but the search feature works just fine. If I quit the app and restart it again everything is great... for a while. Then I search again, and the whole process starts over. It's frustrating enough that it prompted me to build Podmix.

Podmix is a service that lets you create playlists of podcast episodes and listen to them (a) in the browser with the integrated player (b) in an MP3 player with an M3U playlist or (c) in a podcatcher with an RSS feed. You can also "Favorite" playlists for easy access.

Truncate text in the middle with CSS

I had an idea tonight about being able to truncate text in the middle with CSS and a little bit of "extra" markup. This is what I came up with.

Wanna see a demo? Copy this code into HTML file, crack it open in a browser, and you'll see something like "Lorem ipsum dolor sit ...neque vitae turpis" and resize the browser to see it change :-)

Obviously the extra content isn't ideal, and there's probably a better/more efficient way to do this, but the idea struck me, so this happened.

<style type="text/css">
  .top {
    display: flex;
    flex-direction: row;
    max-width: 80%;
    margin: 30px auto;
  }

  .trunc {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: '';
  }

  .trunc:first-child {
    width: 70%;
  }

  .trunc:last-child {
    text-overflow: ellipsis;
    direction: rtl;
    width: 30%;
  }
</style>
<div class="top">
  <div class="trunc">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Ut vehicula lobortis euismod. Maecenas condimentum,
    sem sit amet consectetur convallis, quam tellus
    tincidunt nisl, ut posuere lectus neque vitae turpis.
  </div>
  <div class="trunc">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Ut vehicula lobortis euismod. Maecenas condimentum,
    sem sit amet consectetur convallis, quam tellus
    tincidunt nisl, ut posuere lectus neque vitae turpis.
  </div>
</div>

Always use the right node version

Do you switch between versions of nodejs for different projects, and sometimes (a lot of the times) you forget to actually switch the version? Well, I've got a solution for you!... If you use zsh and nvm, anyway.

Drop this snippet in your .zshrc and you're good to go! All it does right now is check for a .nvmrc file in the same directory, and if that exists, then it'll run nvm use, which will attempt to switch to the version specified by the .nvmrc file. If you don't have the right version installed, it'll whine and you'll need to install it manually, but I hope to automate that soon enough, and I figure that's better than nothing.

Now you just need to add .nvmrc files to all your repos. Fun, right?

function set_node_version() {
    if [ -f "$PWD/.nvmrc" ]; then
        nvm use
    fi
}

add-zsh-hook chpwd set_node_version

Another Twitter script

I have over 500 "interests" according to Twitter, and I'd rather not. So I made this script that will go through and uncheck all your interests. Go to your interests settings page, paste the script below into your console, run it, and wait. There's a 2 second delay between unchecking interests because if it goes any faster than that the API craps out after a while and it doesn't recover for about 10 minutes.

const checks = $0.querySelectorAll('input[type="checkbox"][checked]');
let current = 0;

console.info('Total: ' + checks.length);

const uncheckIt = () => {
  const item = checks.item(current)

  console.log('Item', item);

  if (item) {
    item.previousSibling.click();
  }

  current++;

  if (current < checks.length) {
    setTimeout(() => { uncheckIt(); }, 2000);
  } else {
    console.info('Done!!!');
  }
}

uncheckIt();

A whole new blog thing

On a suggestion from my lovely and amazingly talented wife, and an idea I'd been kicking around for a while, I decided to build this monstrosity. We both thought it would be nice to have a place like Facebook or Twitter or whatever, but that's just for you. I realize I just described a blog, and I suppose I could've just installed Wordpress with bunch of plugins to do what we wanted, but where's the fun in that?

For fucks sake, really? Another blog?!

Yes, this is more blog software. Some very simple blog software. You can make posts, and you can attach files (think pictures and videos) to those posts. You write your posts in Markdown, and there's some basic privacy (public/private, allow comments or not) features, too. You can also import your data from Facebook, Twitter, and Instagram! The main difference between this and any other blog software, as far as I know anyway, is the feed.

The feed!

You can add your "friends" (websites) and, if they have an RSS feed, it'll be pulled in and displayed on your "feed" page, kinda like Facebook, but more like an RSS reader, because that's all it really is :-) Nothing really fancy, but a nice way to keep up to date with all your friends from one easy place, just like Facebook. There's no way to "like" things that show up on your feed, but you can share them very easily.

What else?

Hell, I don't know 🤷‍♂️ There's still a lot of features I want to add... Hashtags would be cool, email notifications could be helpful, a password reset UI, a setup process. I still haven't thought of a good name for it yet. And while currently it's locked up in a private repo, I'll be flipping that switch to public as soon as I'm comfortable I haven't committed anything too embarrassing.

Retweeted @kntoukakis

RT @kntoukakis: Very interesting article for websites that offer software downloads. Even established small software businesses would need…