Oh Winlogon, Where Are Thou?

I logged into my “before to this point” trustworthy Windows 2012 R2 Server that I have nicknamed Sierra, it told me that I didn’t have rights to the D: drive as the domain administrator. Okay, so I can fix that by getting to the console, brought it up on TeamViewer, and it was a featureless black box. Nothing to connect to, nothing to command, “Send Control-Alt-Delete” did absolutely nothing.

So next stop, plug into the actual VGA console on the server and plug in a USB keyboard and mouse. I verified that the keyboard was alive, it toggled Caps Lock and Num Lock properly, tried Control-Alt-Delete, Control-Alt-Backspace, and Control-Alt-Esc. Nothing. Featureless. Except the local console was a dark blue screen and the monitor was not in sleep mode. It was registering a video signal, nothing but a blue screen. Heh, not a BSOD, that would have been something ROTFL.

I tried to connect to the file shares on the server, that wasn’t a problem, so I knew the server was at least alive. The front panel didn’t show any alerts, so the CPU, RAM, and Array were also just fine. The only problem was, no ability to logon to Windows!

I was able to remotely connect to Event Viewer from the Primary Domain Controller, which helped. There was an error, Winlogon recorded an error event type 6000, with the error: “The winlogon notification subscriber <SessionEnv> was unavailable to handle a notification event.” and then that started a Google search for ways to correct it. Every response was the same, reboot. I really can’t do that, the server has thousands of files open, there has to be another way.

I then connected remotely to services.msc to the troubled server. Nothing there looked promising, no references to Winlogon or any of that. Then it occurred to me that Sysinternals tools might be useful. I ran pslist \\ip-of-server and scanned the output. I spotted winlogon running, noted its PID, and then tried pskill \\ip-of-server winlogon to no positive effect, but I had the PID, so I tried that too. The moment I issued the command, Windows restarted winlogon, I peeked around the corner at the server console and there it was, the time and the entreaty to press Control-Alt-Delete. I don’t know what caused winlogon to crap out on me, but at least the fix was easy. I got logged into the shell on the server, and it is running idle, nice and normal.

So if you have a server like I do, and end up with a mystery blue screen and no way to login, look into downloading the pstools kit from Sysinternals. It saved my day!

Heartstopper Ramble

I wrote this comment to a Facebook post in the group Heartstopper Netflix. I was on a roll and couldn’t stop.

Here it is for my blog readers to enjoy. And yes, I really have left this blog go to seed. It would be good for me to write in it more.

Here’s the comment…

I’m a 46 year old gay man, 25 years partnered and I welcome you to our wonderful world.

This group is an oasis of the coolest most understanding and kind human beings on Facebook. Maybe the show drew us together. Maybe it was fate.

Heartstopper touches us all. For me, I see myself as Nick and Charlie, a mix of both, and I also feel parental too. I feel supportive and protective over them, and every episode I fall apart watching them, all of them.

I only wish that people feel the openness and magic of this wonderful work, so they can explore themselves, reinvent themselves, and feel brave enough to stick out your chin and declare your truth.

The narrative of Heartstopper is the gift, for me, a story that shows that there can be love. It can start with ardor, agape ardor, affection, infatuation, crushing, all of it.

But more, there is no instance at all of overwhelming sexuality. It redefines being gay for me, yes, at 46, that I can feel love and it doesn’t have to start with fumbling libido racing to win everything. I can be gay and like someone, and feel that grow into romantic affection.

The lack of tedious tropes and the blazing honesty of this work is a lighthouse for all LGBTQIA+ human beings to steer towards a safe harbor we never noticed before.

In a world where awful seems broadcast, there is this island of hopeful wonderfulness, in all of you. Heartstopper gave us a lot, so so much. It gave us a narrative, it provided us new permissions we never dared afford ourselves, and it created a fandom that quite literally carved a platform of awesomeness out of the tempest that surrounds all of us, that seems endless. This is a safe place. To feel our truth, to feel like all of this isn’t a waste heap.

I love Heartstopper. I love it’s message, and I love what it is doing to all of us. Every one of us. Changing us. Helping us. And the more I think upon it, maturing us. Maturing me. At 46 and giving myself permission to feel something I never dared feel before.

I feel brand new again. And I feel like my old Daddy self as well.

This show makes me cry. It feels good. Somewhere between a blessing, a benediction, a baptism, and a cleansing.

It’s making me a better gay man. It’s making me a better human being.

Kludgey

This post was written on Mastodon so it has an informal writing style with jargon and a manner for a specific audience. All the spelling and grammatical errors are intended.


I love creating my own problems and then finding a rabbit hole and chasing it until I have a geek solution that is likely foolish. If I load too many tabs on my Macbook, it gets sluggish. So, can I start xQuartz? Sure! Update however…

Okay, that done, can I SSH with the -X flag to my little Raspberry Pi? Yes! Sluggish. Wah.

How about to my “Security” laptop, running Linux? Yes. Sluggish still.

Google Search, find x2go, install it. MUCH BETTER.

So I’m using x2go, running Firefox-esr and connected to my not-work-tabs, including this one. Not seamless, but it works acceptably well enough.

Sitting here, marveling at all this exceptionally complicated computing technology before me, everything has “multiple cores” yet you really couldn’t tell. So instead of running everything from one single computer, we’ve got serious work stuff on one, then a remote desktop window to another running “fluffy stuff”, and then playing Spotify from my !@#$ iPhone. HAHAHAHAHAHA.

Shitty apps, each written by devs that believe that their app is the “King Of The Realm” and you can malloc() forever without having to fret over anything at all. Leaks? Who cares! Look how pretty it is! So, multiple computers, multiple OSes, failures aren’t less, but they are spread out so they don’t block real work quite as badly.

Of course, there is also I/O Blocking to contend with. When the filesystem is doing anything, everything stops. Because I/O is super smexy.

So we contend with shitty development choices by simply throwing entire chunks of technology at the problem. Two laptops, a Raspberry Pi, an iPhone, and an iPad. Each device is good at individual things, but no, we can’t do everything on one single device. Watch that device just chug right to the fucking ground. Ah well. The modern response is “throw a hypervisor on it” and that, wow, what a great way to make an even bigger mess of things.

Bullshit hypervisors make for hilarious blown-out-afternoons. So, Windows 10 on an HP Elitebook laptop, install Hyper-V from the OS, and the Radeon display driver commits hairy suicide. Not only does the driver break, but it cannot be “upgraded” or “fixed”, the only thing you can do, is remove HyperV and… poof, uh, there was a problem? No! No problem! So, you shrug and chuckle and look at the icon for VirtualBox. Yeah, hey buddy…

There are some situations where I start thinking that I should buy a cheap $200 Chromebook just for some things. More technology. SMH. Of course.

Two days ago I remembered the glory-promise of X-Windows and SSH tunnels, with the Display being sent elsewhere. Oh my god, the promise of that… so glittering. So… disappointing.

Oh it works. But it’s like watching slugs have a romantic dinner. Maybe I should just read a book while you request that website, hmmm?

Obviously you turn to Google, the eminent sage and eternal junkie for answers. Ah yes, X-Windows over SSH is a ping/pong nightmare, half the traffic is consumed by just making sure that all the lower layers are functioning properly, constantly. Fine. But then you spot things like x2go, give that a shot, eh… it’s somewhat better.

In the end, the promise bends to tools you already have. Like TeamViewer connected to Windows 10 on a different laptop.

Heh, assuming TeamViewer stays functional that is.

Technology is bittersweet. We have such command of so many wonders. I can’t shake the feeling that it’s all an immense house-of-cards. I suppose I’ve seen too much, I know too much, “I’ve seen things you people wouldn’t believe” kind of running through my head. Like looking at Layer 1 connections secured by… chewed bubble gum.

And all the various cheats and hacks, because you naturally want something, but you can’t get it because the people who provide the thing, won’t provide the tools for the extra things you want. They aren’t going to write the code, their codebase is secret, you can’t submit code yourself, and so you just sit there, google searching and finding kludgy-as-fuck solutions to your headaches.

Yeah, that’s fine, be a prat. I’ve got a python script that scrapes your shit and does what I wanted to do.

Case in point, Signal. I love Signal. I will always love Signal. But I want to search on metadata within the Signal app. No. Like the soup nazi, no metadata for you! Only search on stuff in primary stream. Fuuuuuuuu.

So I have a group chat, it’s all my friends, in Signal, and we use it as a blazing-bright thread, it connects us all, geographically spread throughout the United States. It made the COVID-19 Pandemic less lonely. It was a community of dear friends and we could be together without risk.

So, I journal, have an app for that, but obviously Signal doesn’t work with the journal app, so I can’t just hoover all the Signal content into the journaling software. Sometimes I forget to review everything we said in Signal, so the date-of-chat just slides off primary display. You could scroll, but wouldn’t it be nice to search on metadata? Like take me to the first thing shared on Sep 01, 2021? That would be nifty! NO. NO SOUP FOR YOU.

So, no metadata searching. Fine. So, enter the raw kludgy “fuck it, this is also a solution, damn you all” solution. Can’t search on metadata, but just on raw data, so, lets add the data markers we want to the stream! At 6am, write the date into the stream, every day. Then you can use the tools in the app to search on what was shared, and since the metadata you want is “shared”, now you can search on it! Well, okay! “Sep 01, 2021” look! YAY! That’s what I wanted!

Obviously this creates a “Forking House Of Mirrors”… one bullshit kludgy solution leads to a new problem. I don’t want to wake up at 6am to put the date into Signal stream. OK. Lets automate that. Enter Signal-CLI. shakes head fine. So, lets try to connect to the service, that was a hard climb. Okay, now it’s as group, what groups are there? No groups. What? No. Send something to someone, then ask again. Okay. <<send>> how about now? OH YES, THIS GROUP!? You need a special hex code for this.

If you have this hex code, you’d think you could use that without having to ask going forward. No. New install? You can’t just simply use what you know to peek around the corner, no. You need to run around Robin Hoods Barn all over again, and now you can use it! HUZZAH. FUUUUUUUUUUU.

So, finally, we can send signal data from the CLI. Next, lets figure out the date commands picky-picky formatting rules. How to get Sep 01, 2021?

We’ve got that! YAY! Okay, so lets write a Bash script! Get the date, and at 6am write it out to the Signal group. Write script, change mode on script so it can execute, plumb the foggy memories you have of crontab, and boom. Failure.

FUUUUUUUUUUU

Ah yes, cardinal sin, I didn’t explicitly declare the specific paths to signal-cli, echo, mv, fuck, any command at all. Call the script yourself, works, cron calls? Lost. Fixup. Dive into vim. Find your cheatsheet. Gah.

Finally, good god watch it work. 6am every day, a machine you “rescued from the landfill” with some half-forgotten linux distro you can’t remember is actually working and that’s fine. Now, when it’s Sep 03, 2021, you can search on Sep 01, 2021, to get back and manually journal what you remember telling people, because there it is. Click-drag.

All because metadata isn’t searchable. I got what I wanted. Everyone can benefit from it too. But it is complete mess.

This is why entire afternoons are incinerated on the pyre of “Fuck, I wanted XYZ, but the devs don’t speak English, their angel investors aren’t interested, and nobody but me would ever want this feature… so… fuuuuuuuuuuu”

I suppose I could attempt to ask for whatever it is I think would be good, but devs live on the moon, or as much as would be useful, they do. So no. We don’t tell devs anything. We just muck about, finding fragments on GitHub, trying not to get sick that Microsoft owns them now.

So you find gists, you find forked projects, you find python code fragments. The dependencies aren’t circular-misadventures-into-the-fog, you try to remember basic linux stuff because you haven’t had to screw around with any of it for decades and crontab went off to the same Elysium Fields that Trigonometry went off to…

Google Fu. Another worrisome “house of cards” right there too, but lets not look too closely at it, lest it collapse. Or sell our identity to Belorussians.

It doesn’t take much at all. Fragile houses of cards built on other fragile houses of cards. People mobbing on top, like hapless Eloi sitting down at the picnic tables and never having a single bright shiny thought in their pretty little heads because food is always right there, on the table, same time every day. Meanwhile, underneath, the Morlocks are banging on pipes, and every once in a while grabbing an Eloi for a snack.

That’s the Internet. Humanity on top of the Internet. The rot in Layer 8.

And all you really do is shrug. You hope for a better world. Every once in a really long while you stumble blindly over something truly elegant. It’s like tripping over Rivendell and spotting an Elf walking along a curated beautiful path of perfectly carved scrollwork.

And it’s only momentary. The pile of constantly shifting wreckage we call the modern world continues to shudder and throb. It all works, and you marvel that these people manage to continue to live in all of this… wreckage.

VAR Blues

I had to step away from the VAR I was using at work because of a recent change they had instituted with my business account. For years, I had enjoyed a classic relationship of having a single VAR Account Executive assigned to my account, where the AE would learn from me and get to know me, and I would get to know them as well. It was a very successful working relationship, and had been the way of things for six years. Around two months ago, the company made a change. They moved my business account from the structure that I was familiar with over to a team-based structure, and billed the benefits to include “There will always be an AE to work on your account” as a value-added proposition. I was worried that the change would instead eliminate the engagement, the learning, and the developing relationship between customer and reseller.

This new structure included a single shared email address that many people had access to, the AE’s assigned to the “Pod” and the “Pod Manager” who also kept a view on the shared mailbox. I was supposed to send every correspondence to this shared address. At first, I enjoyed the value proposition that there would always be someone to get my messages and to execute my requests. Although, to be brutally honest, access to my Account Executive was never really a problem, so this value proposition was actually a “solution in search of a problem” that I didn’t have. It wasn’t until much later, in the retrospective analysis, that I came to realize this as more significant than I considered it at first.

It was after this, when the rest of the feature set for this new structure started to appear. I’m certain that the VAR thought that all of these things were only enhancing value for customers, but really every step just led me further away from where I was most comfortable. I wasn’t able to “get to know” my team of Account Executives, they remain faceless, voiceless text in email. This lack of humanity was at first not considered to be an issue, but later on became significantly problematic. The disconnection accelerated as we progressed. I was no longer handing work to an Account Executive, asking them for advice and tips, and there was a significant amount of value that I was suddenly unable to access. I had come into the arrangement with a habit of asking my Account Executive to send me quotes on various items, and they would seek the best fitting item that suited my preferences and hand me a quote for the recommended items that best fit my needs and, during pandemic, had a better chance of being in stock. This habit was broken by the new way of doing things. I was no longer able to reach out to an Account Executive to get advice, to have their vantage point much closer to the manufacturers and distributors that we all were using to acquire technology, now I was supposed to simply go on the VAR website, find what I wanted, do my own shopping, and then assemble my own quotes. This feeling of being cut loose became pervasive because it was just another touted feature, considered by the VAR to be part of the “Value Added”, and quickly included not only writing my own quotes, but submitting my own orders as well.

The loss of engagement, the anonymity of the Account Executives involved, and how I was supposed to move all of my previous activities to self-directed work, ostensibly leveraged on the VAR website, all touted as “value added” components were actually just the opposite for me. It wasn’t until I started actually living in this new environment, doing my tasks this new way, that I realized just how much I had missed the old way that I used to do things. The value proposition was always above board, nobody was intentionally being manipulative or malicious, but the result was cold, impersonal, and made me feel like there was an erosion of all the value that at one point was part of my “value added” experience with my VAR.

Whenever there is a change, items can be lost in translation, they can get missed, I do not fault anyone for missing say one or two small things as the customer and the Account Executive in the VAR start to grow together and establish a working relationship together. I didn’t want to, at the time, hold people’s feet to the fire, but that’s exactly what I ended up having to do. I maintain a strict three-strikes policy when it comes to faults, if it’s awful, and you did it three times, that means that it isn’t a mistake, it isn’t overlooking something, it’s part of the design.

The first fault was completely missing the deadline on renewal of security software that my company depends upon to protect us all online. Thankfully, the manufacturer has a very gracious fifteen day grace period, where deadlines are much softer than how they actually sound. The fault resolved, and we moved forward. The second fault came shortly after the first one, and again, the same manufacturer. Missing the renewal of contractual agreements that enable me as a customer to approach the manufacturer’s technical support center if I have any questions or problems. It was addressed and we landed on our feet, but again, we had to sag backwards into the fifteen-day grace period. The third strike was one of tragic poor communication, and one of the most egregious failures I’ve ever witnessed. This failure also coincided with a new Account Executive team member whom I had never communicated with before.

The lack of experience and knowledge on both sides of the divide, again, became a problem that really got in the way. This new Account Executive asked me over several email exchanges questions that were too vague to answer because there wasn’t any included detail. IT is a detail-centric category. We thrive on details, we need exact details, like numbers, or topics, some way to clearly identify what it is that we are talking about. It doesn’t really work when people try to use vague communication styles packed with pronouns and references to unknown objects. Exchange after exchange in this manner became tedious and incredibly tiresome. After several iterations, where I had also started carbon-copying the Pod Manager, did the truth of the situation reveal itself. Once I learned what the object of the conversation was, I tracked it and realized that the subject work should have been completed months before when they had already invoiced my company for the work completed, invoiced and paid.

That was the last straw, the VAR relationship had a tragic and lethal attack right on that spot, right at that time. I began to pursue a kind of “re-entry to the VAR marketplace”, essentially shopping for a new VAR. I found one, chatted them up, had several fantastic meetings and the new VAR has more energy than I’ve seen from the previous one, more professionalism, and more effectiveness. Furthermore, I was also clear with the old VAR, telling them that it was unconscionable how things had unraveled between us, including the “Pod Manager” who never even once attempted to intervene. It was like complaining at a brick wall, for all that I got out of the subsequent correspondences.

The way I was treated was more educational than bothersome. It was a lesson for how important my companies account was to the old VAR, that during the COVID-19 Pandemic, our purchasing slowed because the supply channels also slowed. We wanted technology that was on extensive backorder, and so as our purchasing slowed and stopped, our value to the old VAR ebbed away. The group arrangement was a lesson in and of itself, we were too small, too insignificant to assign to a singular Account Executive, and so, we were effectively downsized as a customer.

We were expected to do all our own work, be our own VAR, as it were because we simply weren’t buying enough to be relevant to our previous VAR. This in itself carries a rather embarrassing knock-on side effect because we had ordered a particular kind of technology from a particular manufacturer and we had eleven items on extreme backorder with the VAR. The old VAR never valued our account, and this was proven out to us by the later revelation that the eleven items on extreme backorder actually slipped into “End Of Life” from the manufacturer. The VAR couldn’t be bothered to re-evaluate the old Open Orders unprompted, discover the EOL surprise themselves, and try saving face by explaining to us what had happened and offering alternatives. What had happened instead, was that the customer had started conversing with a new VAR, discovered the EOL condition, that highlighted just how little the prior VAR cared.

It didn’t matter what the old VAR even wanted to attempt in recovery efforts for the now fully dead business relationship because the single thing that they bring, their “Value Added Reseller” nature, was proven to be totally absentee. We didn’t buy technology for lack of funds, we didn’t buy technology because the people meant to handle the reselling never noticed that what they had already sold ceased to be for sale by the manufacturer!

So I walked away. I moved many orders from the old VAR, spec’ed them out with the new VAR, and actually ended up solving nearly all the seriously backordered gaps in our purchasing stream in one singular afternoon. I sometimes wonder, idly so, if the old VAR thinks about the suddenly cancelled orders, where we were waiting since April with extreme backorders, and then interest fades. Do they even care, do they even notice? They didn’t care enough to look at any old open orders, to even see that the item that we were waiting for shipping on was never ever going to ship because the manufacturer simply stopped selling it. Not having the attention to detail on historical items makes it not really any surprise that they kept on fumbling until the customer simply walked away.

I think that the critical lesson for me in all this drama with the two VARs has been the hidden value that engagement had throughout the entire experience. I never really had a visceral feeling for just how important the engagement was between myself and my VAR Account Executive until it was eroded almost completely. Once engagement disappeared, it was a game-changer for me because it illustrated just how important VAR Account Executives are in the process, how much I had come to rely on them. The VAR Account Executive sits in a very high place, able to see things that customers cannot. Their fingers on the pulse of international transport, distribution, and delivery. I only wish that my prior VAR had not allowed six years of solid, dependable positive experiences go down the drain like it did. I am far happier with my new VAR. With the right engagement between customer and Account Executive, I have already spent $25,000 with the new VAR! These dollar values are still small potatoes in comparison to other customers, but $25,000 is certainly more profit for the new VAR than for the old one who is just sitting on a pile of cancelled orders.

Shortcuts 4: Location Aware RTM

While adding items to my shopping list this morning to Remember The Milk, my favorite To-Do App, it occurred to me that I could maybe make a Shortcut which leveraged Location Services and RTM together. Often times I’m moving from place to place, especially on Saturdays to do grocery shopping. RTM is very nice to use, but it is slightly annoying to have to navigate to specific lists when you get to a new place. RTM does have a Nearby option, but I haven’t really noticed it until right before I started with this Shortcut, so this could just be extra-on-top of what RTM could already do.

This Shortcut begins with the Location object from the Location group.

I looked at all the output from Location and for my needs, Street seemed to be the most useful.

I used the If object from the Scripting group. Chained together, one inside the next.

If Street contains your home street, then Open RTM from the Apps group with the “View Today” object.

If Street contains your work street, open RTM from the Apps group with the SmartList “Today At Work” (I created this SmartList, it’s all the tasks in the Work context, due Today.)

This theme keeps going, I go to Costco, the street there is Century Ave and my local Meijer is on Gull Road in Kalamazoo Township, near where I live.

Each time I call this Shortcut, it will poll Location Services, then figure out where I am and then open RTM right where I want to be.

Shortcuts 3: Coffee Timers

Every morning I prepare my coffee using my grinder and AeroPress. Usually I resort to using Google Home to provide me two timers, a twenty second timer for the grind, and a thirty second timer for the brewing. Most mornings the Google Home is fine, but sometimes the Google Home gets profoundly hard of hearing, or won’t stop the alarm, a whole host of irritating behaviors. So I thought, maybe I could get a Shortcut to do this task for me, some tapping and a convenient run of the single-shot iOS timer per task. Here’s how I got it to work:

I created a new Shortcut, starts with “Show Alert” from the Scripting Group. The phone waits until I measure out my coffee beans to grind. Once this alert gets a tap, it calls Clock from the Apps Group, runs a timer for 20 seconds, then opens the Clock app, which shows the time count down there, and the script itself waits 20 seconds for the timer to expire before moving forward.

The next task is to “Ask for Input” from the Scripting group, “Ready to Brew?”, when the tap is Yes, which is the default, the Shortcut returns control back to Shortcuts app, then opens Clock again. This was oddly necessary because without Shortcuts getting a shot at the foreground, it just wandered off, functionless.

The next task is to start the Clock timer for 30 seconds. If the user taps anything but Yes to “Ready to Brew” the Shortcut ends.

I already used this particular Shortcut this morning and it worked delightfully well! I didn’t have to have a screaming match with Google Home, and the phone behaved pretty much as I wanted it to.

iOS Shortcuts 2: Automation

On the heels of the first foray into Shortcuts with iOS, I happened to stumble across a suggestion in Shortcuts Gallery, that seemed to suggest that the phone could perform functions if it discovered itself in a particular environmental situation. Specifically, When AndysiPhone connects to “Mazda” and pointing to Bluetooth connections themselves. I poked around in this suggestion to learn there was an entire “Automation” section that I had completely glanced over.

I lease my Mazda CX-5, best car I’ve ever owned, by the way, and so I have a strict limit on the miles for the vehicle. Every morning when I use the car, I record the mileage so I can track it. Originally this was on pen-and-paper, but then I moved it into a text file, and after that, to Google Sheets. Then I discovered the Notes widget in IFTTT, and for the longest time I would call on the Notes widget in IFTTT, type in the mileage, and then hand it to IFTTT to add the mileage I entered, along with the date and time, to my Google Sheets. This worked well, when I had the presence of mind to remember to fire off the IFTTT widget, that is. Then after I had my first foray into Shortcuts, I discovered that my phone could recognize when it connected to my Mazda’s Bluetooth system. That event is the perfect trigger to ask for mileage! I knew that IFTTT was still good to help me automate Google Sheets, but I had to reconfigure how IFTTT worked so it would work with Shortcuts and not IFTTT’s own Notes widget. Here’s how I did it:

In the Automation section of Shortcuts, I created this. If the “When” section is met, the “Do” section executes. In this case, it’s a Shortcut.

The Shortcut begins with a “Ask for Input” from the Scripting group. Ask for a Number, because all I care about is mileage, and I only want a handy number entry pad.

Next I went to IFTTT, created a WebHook which is linked to my Google Sheets Mileage Intake Log. The WebHook is called “mileage_log”, and the key is a private string that you get from the WebHooks documentation in IFTTT. The Text object lets me configure the URL with the mileage added after “?value1=” at the end of the URL.

Then I set a variable based on the text in the Text Object, so it can be used as a variable moving forward.

Next is to grab the “URL” object from the Web group. I feed it the variable from above, which is really just making my phone emit a WebHook call to IFTTT with my mileage in it.

Next I use “Get Contents of URL” from the Web group to fetch the response from the WebHook call. I’m looking for “Congratulations” in the response from IFTTT.

The Text object is set to get this response from IFTTT, and there is a trick here, you need to set the type of the data for the Text object as Text, not URL, or anything else, it takes a long tap to find this hidden setting. Tricky…

I next used the If object from Scripting group. Here is where the trick gets you. If you don’t change the type of data that If receives, you will only get “If there is something” vs. “If there is nothing” and that’s it. What you want is “If A contains B” and the only way to get “contains” is if the input data is text! So here is where we evaluate the IFTTT WebHook response, find the “Congratulations” in the output, and then using the “Show Notification” from the Scripting group, I pop up a little alert showing “Success!”, then the If ends, and the Shortcut ends.

So now I won’t have to remember to hit a IFTTT Widget button when I start my car in the morning. The Bluetooth itself will be enough for my phone to notice and ask me for my mileage, and then pass everything to IFTTT, so it can add a timestamp, and pass that onto Google Sheets.

iOS Shortcuts

Apple’s Hidden Pot Of Gold

Two days ago I found myself hip deep in IFTTT settings, in their Button Widgets trying to find a way to make individual posts to my work log in my journal software, Bear.app.

I keep two tracks of logs, and they both share similar structures. I have a Personal Log, and a Work Log. They look like this in Bear.app: “August 7, 2021 – Personal Log” and then have space below where I journal my day. Usually I find myself forgetting to actually write anything and so I have days that go by where there is nothing in there. Sometimes I’ll turn to my Signal app, try to scroll back and see what I was posting to all my friends in our group Signal chat, and use that to help me remember. I’ve been wanting, for the longest time, a way to press a button and enter quickly some commentary, and then have it associated with a timestamp for me and added to my Bear log.

This all started with IFTTT. I know that Bear.app doesn’t have any connectivity to IFTTT, but Remember The Milk does, so I thought I could use IFTTT to write journal entries into RTM, and then at least I’d have them captured so I could eventually copy and paste them into Bear.app. It wasn’t elegant, but it was a workaround that could work. As I was looking around Google seeing how other people did things like this, I started noticing some references to Shortcuts. I had always thought of Shortcuts as this kind of Siri-linked simple tinker toy thing, Apple’s way of getting Siri to be more than it is. How wrong I was!

Turns out that Shortcuts has it’s own programming language, access to a shocking amount of iOS functionality that I previously never thought Apple would willfully reveal to end users, in the iOS platform, and the answer to this particular need of mine. This is how I did it.

It all starts inside the Shortcuts app. Older versions of iOS didn’t include this by default, but since iOS 13, I think, Shortcuts has been a stock app preloaded on every iOS device. Tap on Shortcuts, then create a new Shotcut, and here’s the screen shots:

The first item was to “Get A Variable” from the Scripting group. This lets you pick “Current Date” and if you press there, you can pick the format of the timestamp. I wanted a simple short time-only stamp, so setting Date to None was the key.

The “Text” object was next, from the Documents group. I don’t know why I needed it, but I think it draws the variable into the scope of the rest of the project.

Then “Ask for Input” from the Scripting group presents a small dialog box so you can type in whatever entry you like.

Next I created a new Text object, with the text I entered from the Scripting object. This is how I introduced a hyphen between the time entry and the text entry, formatted the way I wanted in my Bear journal entry.

Some apps have Shortcut-enabled controls provided to the system, in this case, Bear definitely has a lot of controls available. I was gratified to see an append-to-note function, so I added it to my Shortcut. This particular control creates a Bear entry for the entire day, gives it a special name, “Work Log Inbound” so that when I am in Bear, I can just copy and paste items from the Inbound daily item into my real work log bear entry, then throw away the “Work Log Inbound” entry.

After a short while of using this shortcut, which works really well, I must admit, it struck me that sometimes, not all the time, but I would like to maybe share my journal entry in Signal, or maybe email it, so the “Copy to Clipboard” from the Sharing group works really well. I can just ignore it, but if I want to add my journal observation to Signal, it’s waiting for me in the clipboard.

The Shortcut in the first iteration left me in Bear app. I didn’t want that. I wanted a “quick journal entry and back to the home screen” turns out, this home screen is technically called “SpringBoard”. There used to be a “Exit to SpringBoard” control in the Beta version of Shortcuts, but Apple removed it. Someone figured out a hack. The trick is to create a Shortcut to open something innocuous, like Notes, then save it as a plist file, then change it textually to force it to work for SpringBoard. Right now in iOS 14.7.1 this works, but it might break if Apple decides to be grumpy about it.

I created a duplicate Shortcut to this, called it “Personal Log” and it pretty much follows along. But that was easy since my work log and my personal log are pretty much parallel with each other in Bear. One small thing to note, this is only for basic text, there are no frills or extra neat bits, it just bangs in text chunks by button, nothing more, nothing less.

Catching Up

Welcome to the end of July 2021! So much has happened, and most of it has passed without a blog entry. Life is a box of chocolates and sometimes you run into a really thick caramel and have to slow down.

COVID-19

shallow focus photography of microscope
Photo by Chokniti Khongchum on Pexels.com

In the time I’ve been away, I discovered that on Saint Patrick’s Day 2021, March 17th, that I had contracted COVID-19 when I could no longer smell or taste anything. My test came back positive, but I didn’t have a strong illness associated with it. Then my mind cast back to January 2020, and when I thought that I had Norovirus, but upon reflection I think it might have been COVID-19 as well, except in January of 2020, COVID kicked my ass. So perhaps it was, perhaps it wasn’t, I didn’t get tested at the time. Then we all got the happy news that we were invited to have our first vaccination series with the Pfizer mRNA vaccine. Mine was on 3/30, and then subsequently again on 4/20. Now I have at least one true COVID-19 infection, and the mRNA, so that puts me in a pretty strong resistant category.

Working From Home & Working In The Office

During the entire pandemic, the state of Michigan opened and closed. We played the flirt game with spikes and surges and it was very ugly for quite a while. Restaurants closed up left and right, the only real dining game in town was those joints that decided to adopt a strong take-out offering. I bounced from Home to the Office, and in one of those bounces, I contracted COVID-19 from my workplace. Since then, I have had weight issues which naturally led to hypertensive issues as well. Since April I think, I’ve been back in the office, and back in the swing of things. I still quarantine myself, I still mask, and I still have lots of hand sanitizer. COVID-19 has changed how I behave, it created a host of new habits and since they can only help me, I have kept them going. I don’t know if I will ever let go of them.

Noom

On April 16th, 2021 I started the Noom program. I started at 331.4 pounds, and now I’m down to 291.4 pounds, on the program, with a lifetime goal of 220 pounds. The program is very good, the educational components are really quite valuable and I’m almost done with the education parts. I don’t think that I’m ready to “be free of the program” as I think what I need most is the discipline that the app offers me, the rigorous control over my food intake, and being careful so as to not over-indulge and gain back the weight I have lost so far. I definitely think that Noom is a diet that everyone could really benefit from, I don’t feel deprived or starving, and I still am losing weight.

Crochet

person holding purple and white pen
Photo by Castorly Stock on Pexels.com

Over pandemic, I picked up a new hobby. Crochet, which is a style of working with yarn to make various fabrics and items. So far I’ve made many blankets, hats, gloves, and “Cat Pads” for donation to Kalamazoo Animal Rescue. I have discovered that Bernat Blanket, which is a 100% Polyester yarn works amazingly well for animal applications. The yarn is very strong, it can stand up to sanitization methods, and it doesn’t suffer when cats dig in with their claws. I started a WordPress.com blog Bluedepth’s Crochet and there I cover all the neat things that I’m exploring with the yarn arts.

One of the obvious and unfortunate things about yarn arts, and Crochet and Knitting is the gender issues that surround them. Both are seen as “women’s work” and so, much of the education and pattern supply is led by and for women. Obviously, there are some things that are unisex, and I do wish quite often that more people would try something like crochet or knitting, they may find something they truly love and celebrate as I do when I make something beautiful and it is instantly useful.