Two years ago, I picked up a bunch of ArtBin 9101AB boxes for 9$ each in a pre-Christmas sale. They stack nicely, and I use them to store zippers, fold over elastic, sewing feet, beads … all sorts of craft supplies. I’m trying to use them to store my embroidery thread. I have a lot — a whole rainbow of colors, plus another box with grays, browns, and ‘special’ thread (metallic, glow in the dark). But the little bobbin cards aren’t quite big enough. It’s still an improvement over random skeins of thread, and unused portions can be wrapped around the bobbin card to ensure you know exactly which light blue that bit is. Hopefully I’ll come up with something that keeps these things upright … other than stuffing the box so there’s nowhere for them to move đ
Author: Lisa
Linux – Finding “Missing” Disk Space
You can have ‘stuff’ in a folder, mount a partition to that folder, and have disk space used for which you cannot account. Using a tool like df, you will see that 10GB of your 10GB disk is used, but using du the individual folders only account for 5GB.
Rather than randomly umounting partitions to see if there’s anything in the mount point folder, you can bind mount root to another location and check the disk utilization on the new mount.
[root@fedora123 ~]# mount -o bind / /mnt/fakeout/
[root@fedora123 ~]# du -sh `ls /mnt/fakeout | grep -v mnt`
0 bin
0 boot
280K ca
8.0K cacert.pem
4.0K careq.pem
0 certs
0 crl
0 dev
44M etc
52K home
0 index.txt
0 lib
0 lib64
0 media
0 newcerts
0 openhab
724K opt
4.0K private
0 proc
847M root
0 run
0 sbin
227M srv
0 sys
4.0K tmp
3.0G usr
4.0K var
[root@fedora123 ~]# umount fakeout
Vegetated medians
I thought the wildflower “gardens” in highway medians were a brilliant idea — aesthetically pleasing and low maintenance. Hadn’t even considered them as a food source for animals.
GPO Changes Not Reflected On Computer
A year or three ago, we had set up a group policy to display logon information in the Windows welcome screen — last logon time, information about any bad passwords since your last successful logon. It’s nice, but you are unable to log in if the information is unavailable. So we disabled the setting (just clearing a GPO setting doesn’t always remove the config from anywhere it’s already set … you’ve got to change to the desired setting). Aaaaand … one server still shows the logon info. Or, more accurately, fails to display it and prevents the domain account from logging on. Luckily it’s a member computer and we can just log in with local accounts.
I thought about just editing the local computer policy (which would have priority anyway) to disable the logon info, but the computer policy could not be opened. It threw a strange access denied error. I could edit the local user policy. Just not the computer policy.
It seems that the local computer policy got corrupted. After deleting registry.pol from c:\Windows\System32\GroupPolicy\Machine … I am able to modify the local computer security policy. GPO settings from the domain are also applied as expected. WooHoo! I can sign in using domain IDs again!
New Embroidery Project
I finally got larger blank t-shirts for Anya. Anya and I will spend an hour or two in the evening relaxing and embroidering the shirts. About nine shirt-sized images fit on a 8.5″x11″ sheet of dissolving, printable transfer paper. I’ll create a single image and arrange all of the embroidery patterns to fill the page (needs to be black lines on a white background as the printout is fuzzy, and color or gray-scale makes a big mess). Cut out one image, stick it onto a shirt, add a hoop (I love Darice’s spring tension hoops!), and go.
I taught Anya to back-stitching along lines last year, and I taught her how to make a satin stitch today. She’s working on a cute little owl. I’m working on this hand embroidery pattern from Urban Threads. Should be finished tomorrow too!
Sparse Checkout With Git
I’ve encountered a few repositories that are huge. Unwieldy huge, and stuffed with files that aren’t relevant to what I need. The straight-forward solution is to use multiple repositories — that’s what I do at work with my code samples. There’s a different repo for each language because the PHP developers really don’t care what the C# code looks like. The Java developers don’t need a copy of the Python code. But there are advantages to having a single repository that may preclude you from taking the simple solution. Git sub-modules are an interesting approach — combining multiple repositories into a single functional unit. But that’s a pretty big change to an existing repo. And, if you participate in open source projects, it may not be your decision anyway.
There’s another option for selectively cloning when you’re working with a large repo — an option that doesn’t require any changes to the repository. An end user can perform a sparse checkout — essentially use a filter like .gitignore to select or deselect certain files/folders from being pulled into the local working directory. The file is named sparse-checkout and is located in .git\info — unlike a .gitignore file which indicates what shouldn’t get included, sparse-checking controls what is included (if you want an entire repo except one folder, use !path/to/folder/**)
The sparse-checkout file used to get just the core components of Scott’s OpenHAB helper libraries plus the OpenWeatherMap community scripts is:
.github/** Core/** Community/OpenWeatherMap/**
To use sparse checkout, set the core.sparseCheckout config value to true. You can add sparse checkout to a repo you’ve already cloned and use
git read-tree -mu HEAD
to “clean up” unwanted files. Or you can set up sparse checkout before you clone the repo
D:\tmp>mkdir ljrtest D:\tmp>cd ljrtest D:\tmp\ljrtest>git init Initialized empty Git repository in D:/tmp/ljrtest/.git/ D:\tmp\ljrtest>git remote add origin https://github.com/openhab-scripters/openhab-helper-libraries D:\tmp\ljrtest>git config core.sparseCheckout true D:\tmp\ljrtest>copy ..\sparse-checkout .git\info\ 1 file(s) copied. D:\tmp\ljrtest>git pull origin master remote: Enumerating objects: 3591, done. remote: Total 3591 (delta 0), reused 0 (delta 0), pack-reused 3591R ), 7.00 MiB | 6.95 MiB/s Receiving objects: 100% (3591/3591), 9.26 MiB | 7.22 MiB/s, done. Resolving deltas: 100% (1786/1786), done. From https://github.com/openhab-scripters/openhab-helper-libraries * branch master -> FETCH_HEAD * [new branch] master -> origin/master D:\tmp\ljrtest>dir Volume in drive D is DATA Volume Serial Number is D8E9-3B61 Directory of D:\tmp\ljrtest 07/03/2019 09:07 AM <DIR> . 07/03/2019 09:07 AM <DIR> .. 07/03/2019 09:07 AM <DIR> .github 07/03/2019 09:07 AM <DIR> Community 07/03/2019 09:07 AM <DIR> Core 0 File(s) 0 bytes 5 Dir(s) 386,515,042,304 bytes free D:\tmp\ljrtest>dir .\Community Volume in drive D is DATA Volume Serial Number is D8E9-3B61 Directory of D:\tmp\ljrtest\Community 07/03/2019 09:07 AM <DIR> . 07/03/2019 09:07 AM <DIR> .. 07/03/2019 09:07 AM <DIR> OpenWeatherMap 0 File(s) 0 bytes 3 Dir(s) 386,515,042,304 bytes free
Using sparse checkout, no one else has to do anything. Configure your client to get the files you want, and you’re set.
Two Approaches to Using PIP Through an Integrated Authenticated Proxy
The proxy at work uses integrated authentication. While BASIC auth prompts happily let you use a proxy of http://uid:pass@proxy:port, ours does not. There are two ways I’ve managed to use pip to install packages.
Proxied Proxy
The easiest approach is to use something that can handle the authenticated proxy, like Fiddler, as an intermediary. I do the same thing with perl’s PPM, docker pull … basically anywhere I’ve got to use a proxy that wants to pass through a proxy username.
Select Tools => Options to open the configuration dialog. Make sure you are handling SSL traffic — if not, check the box to “Capture HTTPS CONNECTs, “Decrypt HTTPS traffic”, and “Ignore server certificate errors” (it’s only unsafe if you don’t understand what you’re doing … don’t log into your bank account bouncing traffic through this config!)

On the “Connections” tab, check the port on which Fiddler is listening. If you cannot install Fiddler on the same box where you want to use pip, you’ll need to check off “Allow remote computers to connect” (and you won’t use localhost as the proxy hostname). Click OK, start capturing traffic (F12), and we’re ready to go.

Use the PIP command line to install the package but proxy the request through your Fiddler instance. In this example, Fiddler is installed on the local box and uses port 8888.
pip –trusted-host pypi.org –trusted-host files.pythonhosted.org –proxy http://localhost:8888 install SomePackage
This is nice because pip will automatically resolve dependencies. Not great if you’re not allowed to install your own software and cannot get Fiddler installed.
Dependency Nighmare
Back in the early days of Linux (think waaaay before package managers working against online repositories), we called this “dependency hell” — navigating dependency chains to get all of the required “stuff” on the box so you can install the thing you actually wanted.
Make a folder for all these wheels we’re going to end up downloading so it’s easy to clean up once we’re done. Search PyPi for the package you want. On the package page, select ‘Download Files’ and then download the whl

Use “pip install something.whl” to attempt installing it. If you’re lucky, you’ve got all the dependencies and the package will install. If you don’t have all of the dependencies, you’ll get an error telling you the first missing one. Go back to the pypi website & get that. Use “pip install somethingelse.whl” to install it and maybe get a dependency error here too. Once you get a dependency installed, try the package you want again. Got another error? Start downloading and installing again. Eventually, though, you’ll get all of the dependencies satisfied and be able to install the package you actually want.
Adding Python to Fedora Alternatives
Gimp installed Python 2.7). Which, of course, took over my system so nothing was using Python 3 anymore. We’ve used ‘alternatives’ to manage the Java installation, and I thought that might be a good solution in case I ever need to use Python 2
Add both Python versions to alternatives:
[lisa@fedora ~]# sudo alternatives –install /usr/bin/python python /usr/bin/python3.7 1
[lisa@fedora ~]# sudo alternatives –install /usr/bin/python python /usr/bin/python2.7 2
Select which one you want to use:
[lisa@fedora ~]# sudo alternatives –config python
There are 2 programs which provide ‘python’.
Selection Command
———————————————–
1 /usr/bin/python3.7
+ 2 /usr/bin/python2.7
Enter to keep the current selection[+], or type selection number: 1
And, of course, repeat the process for PIP:
[lisa@fedora ~]# sudo alternatives –install /usr/bin/pip pip /usr/bin/pip2.7 2
[lisa@fedora ~]# sudo alternatives –install /usr/bin/pip pip /usr/bin/pip3.7 1
[lisa@fedora ~]# sudo alternatives –config pip
Did you know ⌠you can add a âShare to Teamsâ button to your web content?
If you can add script tags to the page head, you can add a âShare to Teamsâ button on your web site. This can be used to allow employees to share internal sites to Teams, but it can also be used on public sites to allow visitors to post links to their Teams organization.
How? There are two steps â add â<script async defer src=”https://teams.microsoft.com/share/launcher.js” ></script>â in HEAD. The post that is made to Teams is *prettier* if you have meta properties for title, description, and image within the linked page.
Then add a div with class âteams-share-buttonâ. The âdata-hrefâ value is the URL to be shared. If you donât want a page preview to render, you can set âdata-previewâ to false.
Sample page content:
<head>
<title>Teams Share Test</title>
<meta property="og:title" content="Lisa Rushworth Home Page">
<meta property="og:description" content="Lisa Rushworth's Home Page">
<meta property="og:image" content="https://www.rushworth.us/lisa/RedR.png" />
<script async defer src="https://teams.microsoft.com/share/launcher.js" ></script>
</head>
<body bgcolor="black" text="white">
<div class="content">
<P>Here is the really cool information contained on this web site. It is so interesting that you want to share it to Teams.</P>
<P>Click the Teams button at the bottom and you'll see a form that allows you to share the URL as a thread in a Teams channel.</P>
</div>
<div class="teams-share-button" data-href="https://www.rushworth.us/lisa/teamstest.php" data-preview="true">
</div>
</body>
Visitors will see a small Teams logo in the teams-share-button div. To share the URL in Teams, they just need to click on the Teams logo.

A new window will load. If the user is not logged into the Team web site, they will be prompted to log in. Once logged in, the share dialogue will be displayed. If your site has title, description, and icon meta tags, a preview card will be included at the bottom.

Click in the âShare toâ field and type a Team or Channel name â Teams and Channels from the userâs organization will be displayed.

The user can add text to the thread. Click âShareâ to share the link to the selected Teams channel.

A confirmation page will be displayed.

In Teams, a new thread will be created. This is the thread for my shared URL.

The URL used in the teams-share-button DIV doesn’t have to match the page on which it is used — I can add a ‘share to Teams’ button that posts any URL to Teams.
Did you know ⌠you can customize Teams channel notifications?
Microsoft has created additional notification options in Microsoft Teams â and you can now customize those settings for individual channels to ensure youâre getting notifications when and were you want to see them.
To access your general notification settings, click on your avatar in the upper right-hand corner of the Teams window. Select âSettingsâ.

Click on âNotificationsâ. You will be presented with a long list of activities and can select the type of notification you wish to receive for each activity. Notice âShow only in feedâ is now an option â this means new activity will appear in the âActivityâ section of Teams but not display the big purple notification box (a.k.a. âthe bannerâ) in the lower right-hand corner of your screen.

You can also customize notifications for individual channels â maybe you want a banner notification for a really important channel, or you donât want to be notified about every reply to a message. Click the ellipsis next to the channel name and select âChannel notificationsâ

Here you can customize the notification you will receive for channel posts and at-mentions (youâll still get notified about Team or individual at-mentions). You can also un-check the âInclude all repliesâ box to get notified about new threads.

All of the channels that you followed previously will use your Teams-wide notification settings. Channels that you weren’t following will have notifications off. Newly created channels will have new post notifications turned off and channel mentions set to âOnly show in feedâ.
** If you still see âFollowâ and not âChannel Notificationsâ, click on your avatar in the upper right-hand corner of the Teams app and select âCheck for updatesâ. Once the updates have been applied, click the tip to ârefreshâ Teams.


