Theme:
24 hour time picker
Meuon 2026-01-20 5766
After playing with the bloat of timepicker-ui (awesome, does everything, ph@t) and others, going to invest some cold weather computer time into making my own simple variant.... cuz this can't be that hard, can it? Yeah yeah, I know, it's a maze of twisty javascript and ui passages, all alike. Cranking up some music, mild tea for a change of flavor/caffiene and we'll see what comes out the other side. #javascript #time #html #ui
24 hour time picker purgatory
Meuon 2026-01-15 5765
Dealing with a UI in the medical world where the time really really needs to be in 24 hour format. Wish it was an html option, like "type=time24" but instead it's become a dive into the heavy over complicated world of JavaScript frameworks for what is a very simple single page internal use application/web page that currently has no javascript and minimal CSS. #html #time #javascript
Github Ghosts
Meuon 2026-01-14 5764
Pretty sure I had deleted my github account years ago. Found it. 7 fallow projects, last one updated 2020. Regained access. Deleted the org, account and all again. Making a note of it here. #github
Attacked = Good?
Meuon 2026-01-12 5763
The good thing about having a server under some very consistent heavy attack is that you have a good test case for tuning up the counter defenses. Just "iptables -F" and watch it all work again. And again.. And again. I wouldn't call it "smart" or "intelligent" but "elegantly effective simple" seems to be working very well. Someone really wants this system. They've been at it for a few weeks from the same IP ranges, probably because of it handling some VPN and VoIP traffic from "interesting" places. Overseas, not Minneapolis MN. Other similar servers are getting the usual random smear of attempts. #apt
Perl Joy.
Meuon 2026-01-12 5762
Updating some 10+ year old PERL code today. It takes a while to get my head in that groove. Considered rewriting it, but there are things about parsing eclectic rubbish with regex and magic strings like $_ that just seem to be best done with perl. My brain finally got in the groove and whispered "hello old friend". It was nice to find some joy in the day. #perl
Oops.
Meuon 2026-01-06 5761
Woke up about 3am to get some sysadmin work done. Nothing works. Debug the network and upstream internet for 10 minutes before I realize I let my laptop go to sleep with the VPN on... and it dones't always like that. "killall openvpn". Fixed. Stopped cussing the local ISP that also sometimes does 3am maintenance. Laughing... at least the coffee is good.
Therapy coding
Meuon 2025-12-24 5760
Nancy has been out and the cats have not bothered me. Music playing and no interruptions for a few hours to work on code. Got a thing done from start to finish, it works and I'm proud of it. It's quite the mood improver. Feels good to do a thing in toto.
Freeradius and Raritan
Meuon 2025-12-21 5759
Freeradius had good docs and examples. The Raritan KVMs did the basics well: IP address, shared secret via the web gui. Then create a Group with the perms for your users. The secret ingredient was adding the users group to radius. I did it in sites-available/default adding: update reply {&Filter-Id = "Raritan:G{Techs}"} in the post-auth section. Your needs/usage will vary. #freeradius #raritan
Asus Duo Doer for Debian
Meuon 2025-12-15 5758
Crude. First Python "App" Ever. Works.
Controls an Asus DUO (loving this Laptop).
 #!/usr/bin/env python3
import subprocess
import tkinter as tk
from tkinter import ttk
# main window
root = tk.Tk()

def trackpadon():
print('Trackpad ON')
subprocess.run(["xinput","-enable","ASUS Zenbook Duo Keyboard Touchpad"])
subprocess.run(["xinput","-enable","Primax Electronics Ltd. ASUS Zenbook Duo Keyboard Touchpad"])

def trackpadoff():
print('Trackpad OFF')
subprocess.run(["xinput","-disable","ASUS Zenbook Duo Keyboard Touchpad"])
subprocess.run(["xinput","-disable","Primax Electronics Ltd. ASUS Zenbook Duo Keyboard Touchpad"])

def screenone():
print('SCREEN ONE')
subprocess.run(["xrandr","--output","eDP-1","--auto"])
subprocess.run(["xrandr","--output", "eDP-2","--off"])
subprocess.run(["xrandr","--output", "HDMI-1","--off"])

def screentwo():
print('SCREEN TWO')
subprocess.run(["xrandr","--output","eDP-2","--auto", "--below", "eDP-1"])

def screenthree():
print('SCREEN THREE')
subprocess.run(["xrandr","--output","eDP-1","--auto"])
subprocess.run(["xrandr","--output","eDP-2","--auto", "--below", "eDP-1"])
subprocess.run(["xrandr","--output","HDMI-1","--auto", "--above", "eDP-1"])

def screenhdmionly():
print('HDMI ONly')
subprocess.run(["xrandr","--output", "eDP-2","--off"])
subprocess.run(["xrandr","--output", "eDP-1","--off"])
subprocess.run(["xrandr","--output","HDMI-1","--auto"])

def screenhdmione():
print('HDMI and Top One')
subprocess.run(["xrandr","--output", "eDP-2","--off"])
subprocess.run(["xrandr","--output", "eDP-1","--auto"])
subprocess.run(["xrandr","--output","HDMI-1","--auto"])

root.geometry('300x500')
root.resizable(False, False)
root.title('ASUS Doer')

# exit button
screen_trackpadon = ttk.Button(
root,
text='Trackpad ON',
command=lambda: trackpadon()
)
screen_trackpadoff = ttk.Button(
root,
text='Trackpad OFF',
command=lambda: trackpadoff()
)

screen_one = ttk.Button(
root,
text='ONE screens',
command=lambda: screenone()
)

screen_two = ttk.Button(
root,
text='TWO screens',
command=lambda: screentwo()
)

screen_three = ttk.Button(
root,
text='THREE screens',
command=lambda: screenthree()
)

screen_hdmionly = ttk.Button(
root,
text='HDMI Only',
command=lambda: screenhdmionly()
)

screen_hdmione = ttk.Button(
root,
text='HDMI and One',
command=lambda: screenhdmione()
)


# exit button
exit_button = ttk.Button(
root,
text='Exit',
command=lambda: root.quit()
)

screen_trackpadon.pack(
ipadx=5,
ipady=5,
expand=True
)
screen_trackpadoff.pack(
ipadx=5,
ipady=5,
expand=True
)
screen_one.pack(
ipadx=5,
ipady=5,
expand=True
)
screen_two.pack(
ipadx=5,
ipady=5,
expand=True
)
screen_three.pack(
ipadx=5,
ipady=5,
expand=True
)

screen_hdmione.pack(
ipadx=5,
ipady=5,
expand=True
)

screen_hdmionly.pack(
ipadx=5,
ipady=5,
expand=True
)

exit_button.pack(
ipadx=5,
ipady=5,
expand=True
)
root.mainloop()

VNC autolaunch on Windows 11
Meuon 2025-12-15 5757
Went nuts trying to get Windows 11 to launch a TightVNC viewer session from a link like vnc://127.0.0.1:5900 Ended up creating a "helper" that makes a file that downloads so you can tell the browsers (Edge/Firefox and Chrome) to "Always open files of this type" which launches TightVNC. It works, but wish I could just add VNC to the "Applications" part of the browser easily. https://geeklabs.com/app.php/blog/5756 #tightvnc #win11
VNC Helper for Windows 11
Meuon 2025-12-15 5756

Need to make a Window 11 system understand how to launch VNC for a url like: vnc://[ip]:[port] URL? Pass it to this like: https://geeklabs.com/vnc.php?url=vnc://127.0.0.1:5900

TightVNC from: https://www.tightvnc.com/ is a bit cruder that RemoteRipple. you trigger it to launch from the system with IP address and port as displayed in a web UI.

“VNC Helper” creats a config file that TightVNC can use. Your web browser should ask you if you want to open or download the file when you click that button. Click Open with TightVNC or any other VNC Viewer that will work with that simple file format. Suggested to check the box for “Always open files of this type”.

MS-Edge browser and Chrome: open the download file list and choose to open the file created and downloaded. While viewing that download list: right click on the file that downloaded and choose: “Always open Files of this type” and it will autoload / start TightVNC or other properly associated VNC viewer when you click that button and it downloads.

 
<?php
// Minimal VNC url to .vnc parser example
// Please add your own input detainting and other sanity checks.
$url = $_REQUEST['url'] ;
$parts = preg_split("/\:/", $url);
if($parts[0] == 'vnc') {
$ip = $parts[1] ;
$port = $parts[2] ;
$strip = array('/\//');
$ip = preg_replace($strip, '', $ip);
} else {
print "needs: ?url=vnc://ip:port" ; die ;
} ;
if($port> 1000 or empty($port)) {
$port = "5900" ;
} ;
if(!empty($ip)) {
$file = "[connection]\nhost=$ip\nport=$port\n" ;
if (strlen($file) < 100 ) { die ; } ; //minimal sanity/safety check
$ctype = "application/vnc";
$filename = "$ip.$port.vnc" ;
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"" . $filename . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . strlen($file));
print "$file\n" ;
exit;
} ;


Security Audit Paperwork
Meuon 2025-12-07 5749
Doing some security audit paperwork with a client. It's not all bad, makes me question things and verify that we are doing what we say we are doing. I don't fluff or sugar coat much. Answering questions in a spreadsheet, stuffing lots of text into table cells, drives me nuts. WTF?!? The urge to create a buzzword and acronym spewing "CyberSecurity" company named "Magic Snake Oil" is strong. #cybersecurity
New rabbit hole: Python and tkinter
Meuon 2025-12-04 5748
Needed a little desktop thing, which may be sharable later. Started for Perl and WX Widgets.. Seems that world is fallow. Hadn't played with Python in a long time, it's time to re-explore. Python and tkinter looks like it will work. Need to add some regex (re). And off we go. I miss semicolons already. #python
Todays Languages
Meuon 2025-12-03 5747
Created some JavaScript today that I didn't hate (much), Had my thinking about what "languages" I used: just today. JavaScript, PHP, SQL (Mariadb), CSS, HTML, and edited a Bash/Shell script. Light day. No C, Expect scripts, Asterisk configs, Perl....
Donating w/OPM
Meuon 2025-12-02 5746
The people I do work for learn how much of what makes their systems work come from entities like LetsEncrypt.org and to support them. Two of my projects just made largish donations, and is still less than most commercial providers. Automatable wildcard certs via acme.sh and DNS validation also make the process easily repeatable. Those SSL/TLS certs also work for email, VoIP and VPN's, not just websites. Spread the love. #EFF #StartSSL #TLS
Donating with OPM
Meuon 2025-12-02 5745
I make sure the people I do work for know how much of what makes their systems work come from entities like LetsEncrypt.org and that we need to support them. Two of my projects just made largish donations, and it's still less than most commercial providers would charge. Automatable wildcard certs via acme.sh and DNS validation also make the process easily repeatable. Those SSL/TLS certs also work for email, VoIP and VPN's, not just websites. If your commercial projects leverage LetsEncrypt certs, please spread a little extra love. #EFF #StartSSL #TLS
The Linux way vs modern web advice
Meuon 2025-11-28 5744
Poor audio and missing audio driver issues on my new laptop (Asus Duo), searched the net for the solution and found all kinds of convoluted ways to "fix/solve..". They didn't smell right. The Linux way: "apt search cirrus" oh, there it is: "firmware-cirrus". "apt install firmware-cirrus" then reboot. dmesg no longer gives a long list of missing driver firmware and the sound quality got better. Too many newbies givong bad advice. Loudly. #debian #asus
Thanksgiving 2025
Meuon 2025-11-27 5743
Over the past few years Thanksgiving has become a very personal holiday. We (Nancy and I) have much to be thankful and grateful for. Life is good. It's also a time to reflect on the things we need to work on, not just ourselves, but our community and society in general. And we do. Thankful for our place in life where we we can afford to tweak the status quo with position, time and money. Time for a bigger hammer?
Asus Duo and Debian 13
Meuon 2025-11-25 5742
New Asus Duo (Dual Screen). Nicest laptop I've evar had. Ran Win11 for a couple of hours. Installed Linux. The dual screens were kinda funky during install, stretched as one desktop. Put the keyboard on USB, deteched, all was good. Rebooted. Screens woreked right. Setup bluetooth for keyboard and a couple of xrandr scripts to manage screensin different orientations. Everything works, sound, wifi, etc.. #debian13 #asus
Minty Fresh Laptop.
Meuon 2025-11-06 5741
Wife brought home her churches office laptop because some websites would not connect. 2011-ish Lenovo T420 with 8b ram. It was still on Linux Mint 19. Made a quick backup. Fresh Linux Mint 22.2 Install. Fresh installs of the apps they use (Zoom, Chrome..) and set web browser default pages. That T420 is a tank and still snappy to use with a great keyboard. #linuxmint