- Really great smoothie with blueberries and yogurt.
- Really great al pastor chicken. The recipe has been perfected. It's all random.
- Mowing the lawn, small bites, always leave wanting more.
Sunday, August 16, 2026
2026.08.016
Saturday, June 28, 2025
AutoHotkey 2
Recently decided to make use of the CAPS LOCK key to avoid having to move my hands to the arrow keys when I needed arrow key stuff. After a bunch of googling came across https://www.autohotkey.com/
My goal here was to have CAPS LOCK function normally if you press and release it, but if you press and hold, it should act as a modifier. I didn't see this as a pre-canned example, and after much questionable AI, decided to just code it from scratch. OK, AI helped a bit, but was really bad at hallucinations.
I decided on using ijkl for the navigation but I'm thinking now that maybe vim navigation is better. I'm having to stretch to get the end key while editing so that's probably a good thing to do as well. Home and end. And maybe that makes more sense with H being home, and ; being end since they are around the navigation. A work in progress I guess.
Here's what I ended up with:
#Requires AutoHotkey v2.0
#Include "C:\Users\nik\Documents\AutoHotkey\TapHoldManager\AHK v2\Lib\TapHoldManager.ahk"
#SingleInstance
capsHeld := false
;
; We got a Caps Lock
; If holding it, just set global flag
; If tapping it, send CapsLock on or off which toggles it
;
CapsLockHandler(isHold, taps, state) {
Global capsHeld
if isHold {
if (capsHeld = true) {
capsHeld := false
} else {
capsHeld := true
}
} else {
Send("{Blind}{CapsLock}")
}
}
thm := TapHoldManager()
thm.Add("CapsLock", CapsLockHandler)
;
; Handle keypress
;
*j:: {
if capsHeld {
Send("{Left}")
} else {
Send("{Blind}j")
}
}
*k:: {
if capsHeld {
Send("{Down}")
} else {
Send("{Blind}k")
}
}
*l:: {
if capsHeld {
Send("{Right}")
} else {
Send("{Blind}l")
}
}
*i:: {
if capsHeld {
Send("{Up}")
} else {
Send("{Blind}i")
}
}
; removeTooltip() {
; ToolTip
; }
; ToolTip("CapsLock released")
; SetTimer(removeTooltip, -1000)
The ToolTip things being me adding in debugging messages.
Monday, March 31, 2025
Automated Installs, the old fashioned way
I've used TheForeman and Canonical MaaS (and have heard of Cobbler), and while they can and do work, they can be a bit fiddly to understand, and if something goes wrong everything is so abstracted it can be hard to understand how things should be working and what you need to do to fix things.
So, I decided to take a step back and look at how you would configure automated installs the old fashioned way, by hand. This gives a better understanding on what's going off under the hood and helps debug things if you're having a problem with your pre-packaged bare metal deploy automation.
DHCP
First things, I'm using ISC DHCPD (I guess about time I swapped to something newer), and have a host entry like:
host rockytest {
hardware ethernet AB:CD:EF:D4:A2:BB;
fixed-address 192.168.2.64;
next-server 192.168.2.1;
filename "rhel8/redhat/EFI/BOOT/BOOTX64.EFI";
}
TFTP
So, create a custom local override /etc/systemd/system/tftp.service by doing systemctl edit --full tftp, and add in "-v" to the tftp invocation so that things look like:
[Unit]Description=Tftp ServerRequires=tftp.socketDocumentation=man:in.tftpd[Service]ExecStart=/usr/sbin/in.tftpd -v -s /var/lib/tftpbootStandardInput=socket[Install]Also=tftp.socket
RRQ from ::ffff:192.168.2.64 filename rhel8/redhat/EFI/BOOT/BOOTX64.EFI
Configs, configs, and more configs.
rhel8/redhat/EFI/BOOT:BOOTX64.EFI grub.cfg grubx64.efi README.mdrhel8/images/pxeboot:initrd.img README.md vmlinuz
iPXE
Sunday, March 30, 2025
Verizon FIOS and IPv6
tl;dr - if you want to run IPv6 on an internal network with an internal router behind a FIOS G1100 router, you must carve up a different /64 network from the /64 the FIOS gives you on the LAN interface, and then also update the FIOS G1100 route table to have a static route to this different /64 network, passing it to the "WAN" interface of your internal router which is really just connected to the LAN interface of the FIOS G1100 router.
IPv6, it's been around for a while. Verizon supports it and if I look at my Verizon Fios-G1100 router, I can also turn on IPv6:
and Verizon gives me a /56 network. Fun Fact! That /56 network gives me 4,722,366,482,869,645,213,696 possible IP addresses. The number is four sextillion, seven hundred and twenty-two quintillion, three hundred and sixty-six quadrillion, four hundred and eighty-two trillion, eight hundred and sixty-nine billion, six hundred and forty-five million, two hundred and thirteen thousand and six hundred and ninety-six. That's a lot of IP addresses.
What's interesting is the Fios-G1100 is configured to act as a DHCP server and so gives out a /64 address on the LAN:
This /64 turns gives me 18,446,744,073,709,551,616 IP addresses which is only eighteen quintillion, four hundred forty-six quadrillion, seven hundred forty-four trillion, seventy-three billion, seven hundred nine million, five hundred fifty-one thousand, six hundred and sixteen.
So I have a singular Linux router behind my Fios-G1100 so I can have more options with experimenting with stuff, and on the Linux router on my public interface, I see:
3: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 1c:1b:0d:03:bb:ec brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global noprefixroute enp0s31f6
valid_lft forever preferred_lft forever
inet6 2600:1234:5678:abcd:1e1b:dff:fe03:bbec/64 scope global
valid_lft 1258sec preferred_lft 1258sec
inet6 fe80::1e1b:dff:fe03:bbec/64 scope link
valid_lft forever preferred_lft forever
So it gives me out a singular /64, which is fine here. A bit strange that to Verizon I have a singular machine on my network. With the IPv4, I'm running NAT so get 192.168.1.2 here, with the Verizon router being 192.168.1.1. With IPv6, I get a public IP on the /64 network carved out from the /56 network. So that's one /64 network out of 255 possible in the /56. What was the challenge for me was that internally I wanted to have the /64 network available to all my boxes being my Linux router. That didn't work as I wanted to have the same 2600:1234:5678:abcd::/64 network on my LAN side of the Linux router that was the same as the /64 network on the WAN side of my Linux router, using the same /64 network assigned on the LAN side of the FIOS router. That confused routing of various things on the Linux side after setting up IP forwarding.
Here's how I was trying to define the LAN interface, which is wrong:
2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 1c:1b:0d:03:bb:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.2.1/24 brd 192.168.2.255 scope global noprefixroute enp8s0
valid_lft forever preferred_lft forever
inet6 2600:1234:5678:abcd:1e1b:dff:fe03:bbee/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::1e1b:dff:fe03:bbee/64 scope link
valid_lft forever preferred_lft forever
The solution, as I stumbled across it, is to actually carve up a different /64 network for my internal Linux router LAN address and then configure the FIOS router to have a static route to that network:
2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 1c:1b:0d:03:bb:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.2.1/24 brd 192.168.2.255 scope global noprefixroute enp8s0
valid_lft forever preferred_lft forever
inet6 2600:1234:5678:abce:1e1b:dff:fe03:bbee/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::1e1b:dff:fe03:bbee/64 scope link
valid_lft forever preferred_lft forever
I add a route entry with a Destination network of 2600:1234:5678:abce::/64 being sent to the Gateway of 2600:1234:5678:abcd::/64, which is the Verizon FIOS assigned LAN address that I am using for the WAN address on my Linux router. This makes sure that any packets that I have sent out that get returned to the FIOS router, it knows to just pass them off to my Linux router, which can then send them to my devices on my local IPv6 network.
Thursday, July 4, 2024
Cloud-init and the curse of the YAML (and a potential solution! or at least idea)
I recently took up cloud-init professionally as part of exploring modern(?) alternatives to kickstart for the on-premises private cloud. All worked fine, is all viable, after I actually figured out where to put the config entries...
Cloud-init has a couple of config files:
metadata:
#cloud-config
instance-id: test
hostname: test.localhost
network:
version: 2
ethernets:
eth0:
match:
name: eth*
etc. etc. etc.
user-data:
users:
- name: cloud-user
ssh_authorized_keys:
- ssh-rsa [our public key] root@our-bastion.localhost
sudo: ALL=(ALL) NOPASSWD:ALL
etc. etc. etc.
All looks good, looks reasonable. The challenge in getting this far was that in reading the docs it was not apparent at the time what config entries go in which file. For example, if I put things for the network in the user-data file it was parsed correctly and I could see the YAML was loaded correctly into the various python dictionaries in the code, but then later on it was just ignored. The docs note in vague ways that the metadata is for the environment and the user-data is specifics for this particular system. Which was what got me into trouble initially putting the network information in the user-data, IDK.
Looking at the code, using YAML for configuration and the easy way it's parsed and loaded into a dictionary is very powerful for adding configuration information to your software. The downside is if you name something slightly wrong or if you put something not quite in the right location, things will just be silently ignored.
There are a couple of schools of thought here, and I've seen both professionally. One is that you should code things explicitly to look for the commands / statements and if there is something not explicitly recognized then you flag as an error. This style of coding is a bit of a challenge to modify, and in one particular case I've needed to extend multiple code locations so that a new argument/statement is a) parsed correctly (in one module), b) consumed correctly (in a different module), and then c) acted upon in a third module. A lot of work for just adding a similar statement, but it does mean if there's something not quite right, we will notice it right away. At the expense of making the code harder to work with and extend.
The second school of thought is that as configuration information is consumed, you only look for and act upon things you know you are looking for and acting on. This code is trivial to extend, you just add something to the "act upon" section and consume whatever it is you're looking for. The downside here is that if you add some configuration that's not quite right, likely it will just be ignored since nothing is looking for it.
This is the approach that cloud-init takes, and for good reason as there are multiple / modularized consumers all looking at the same dictionary and so any extension should be able to just consume whatever configuration it thinks it needs.
So this left me thinking, is there a way that we can have a central YAML file that is loaded into a python dictionary and that some overseer can look at the end and make sure that everything you specified was actually used? I think YES, based on a quick subclass of dict:
class NewDict(dict):def __init__(self, *args, **kwargs):super(NewDict, self).__init__(*args, **kwargs)self._used_flags = {key: False for key in self.keys()}
def set_used(self, key, used_arg = True):# print(f"(Setting used flag for {key} to {used_arg})")if key in self:self._used_flags[key] = used_argdef is_used(self, key):_used_flags = self._used_flags.get(key,False) # print(f"(Getting used flag for {key} - it is {_used_flags})")return(_used_flags)
Time to start blogging again.
After a brief vacation, time to start brain dumping on this blog again. Who knows maybe I will tweet again too.
Thursday, January 16, 2020
Lost In Translation
Great, sustainable denim, I'm all in!
Special waterless washing. Awesome. (Hopefully they are not washing in gasoline or something like that.)
Hmm, hold on, if this is waterless, why does the water need to be recycled? There is no water, what's to recycle?
Natural drying, air drying, I get it, nice. But, why are these being dried if they are not even wet due to being waterless.
I think what might be going on here is it's "water" "less", as in using less water. Maybe that's OK with water, but can you imagine meatless hamburgers? There's still meat in them, but less meat so that means more vegan. Meat-"less". Or how about homeless? You're not without a house, you just downsized to a smaller house, less house, less home, homeless.
We're onto you marketing people!
Wednesday, December 25, 2019
Bash batch. Converting .avi to .mp4 for import to Davinci Resolve
Formatting and readability is a bit fugly on the command line but this does it nicely. As a bonus it sees if things are converted already and don't do a conversion.
$ for filename in *.AVI; do filepart=${filename%%.AVI}; if [ ! -e ${filepart}.mp4 ] ; then echo ffmpeg -i ${filepart}.avi ${filepart}.mp4; fi; done | sh -x
Wednesday, November 27, 2019
Telephones
An old boss of mine had an amusing anecdote about somebody years ago saying that with the enormous growth of telephones in the US everybody would be employed as a telephone operator. The amusing part of my boss' anecdote was that this person was actually right. Since we type in phone numbers when we want to talk to somebody, we are in effect working as a phone operator.
Of course in good old 2019, we pretty much have contact apps universally available so we aren't likely to have to type in phone numbers any more. Unless it's from the menu of the new restaurant that opened and we want to get takeout.
Friday, November 1, 2019
Statistics, lies, whatever.
But, if we have a sample of drivers, one rates at a 2, three rate at a 10, the average rating is 3.2. This would mean that the three scoring at 10, or 75% of the drivers are above average. Waaaaay above average.
What am I missing here?
On Poverty
US culture based on Protestant ethics. European roots were later changed by various world wars to be more supportive of welfare whereas US was largely unaffected by those wars so the ethics lived on.
Professor Elizabeth Anderson notes:
“You know,” she says, “America was so dominantly Protestant for such a long time. We have a substantial number of Catholics but the culture was really shaped by Protestants – in term of their total cultural domination of the United States at its founding, and really continuing.”
One aspect of this, she highlights, is the adoption of a Protestant work ethic as a core value in society. This has a positive side – in honouring human labour – but it also has a negative side.
“There is a profound suspicion of anyone who is poor, and a consequent raising to the highest priority imposing incredibly humiliating, harsh conditions on access to welfare benefits on the assumption you’re some kind of grifter, or you’re trying to cheat the system.
“There is no appreciation for the existence of structural poverty, poverty that is not the fault of your own but because the economy maybe is in recession or, in a notorious Irish case, the potato crop fails.”
Saturday, October 12, 2019
Energy
Say what?
Edit: Interesting somewhat related article I was directed to. https://slatestarcodex.com/2017/06/21/against-murderism/
Friday, October 11, 2019
Maintenance?
Thursday, October 10, 2019
Smart coral polyps?
But the researchers found that in 38 percent of the impacted colonies, the polyps had devised a survival strategy: shrinking their dimensions, partly abandoning their original skeleton, and gradually, over a period of several years, growing back and starting a new skeleton.
Should I actually read that as the polyps that did not shrink died off whereas those that were able to shrink survived and were able to survive and grow back over a period of years? Some polyps shrink due to the problems, some just die off? Guess which ones we see around after a longer period of time?
This is just like the cats that died when exposed to sunlight. Those all died off and were not able to reproduce and we are not aware of them at all since all we have left are cats that are OK with sunlight.
Friday, September 27, 2019
Never good at lisp
something(somethingelse(trythis(internalpart(updateothers(runstuff)))))
I can see a similar thing happening sometimes with Python where it's easy to keep wrapping object calls together and you end up with hard to decipher code:
something(parameter).object(otherthing(innerpart).state(optionalrewind))
There are some people who talk in similar ways at work and use parenthetical sub clauses before getting to the actual point and I have a hard time following what the actual point is:
We need to figure out, and not necessarily now, but at some point in the near future perhaps when we can get a consensus or when the time is right but not just because we want to be opportunistic agnostic, what, or perhaps even first why or maybe the rationale behind this and related activities that you and according to at least a couple of other people although this is just third party because I haven't heard directly from them but I have been able to glean by reading between the lines of interactions, our next steps should be.
Parsing that out, the real meat of the sentence is (in bold):
We need to figure out, and not necessarily now, but at some point in the near future perhaps when we can get a consensus or when the time is right but not just because we want to be opportunistic agnostic, what, or perhaps even first why or maybe the rationale behind this and related activities that you and according to at least a couple of other people although this is just third party because I haven't heard directly from them but I have been able to glean by reading between the lines of interactions, our next steps should be.
I think as a consumer or target of the conversation I would like to hear the bold part first and can then get the rest of the sentence after. Or perhaps the rest of the sentence is background and I should get that first. But I have a heck of a time trying to keep the idea in my head when it's at the beginning, middle, and end, of a bunch of parenthetical remarks.
My point of this whole post (irony, I'm only getting to it now), is that I have a heck of a time reading and understanding news headlines that seem to string together everything into one sentence
[something...] according to police reports via court order leaked by the assistant to the then deputy director who had been allegedly deposed by the now acting associate vice president under executive approval as reported to news personnel by an anonymous tip said the ex chief after hearing reports of this on Thursday from his staff.
What is there some sort of rationing on periods and capital letters that we could not break this up in to digestible sentences?
Saturday, September 14, 2019
Well done!
(python) x=np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]])
when you go to print it out you see:
(python) x
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12],
[13, 14, 15]])
What is really great here is that as the numbers increase in length, the output is shifted so all the columns line up. Yes, this isn't rocket science genius, but it goes a long way to making things readable and understandable. In the "computer" world often we just print things out and leave it up to the person to mentally align and figure things out. I find that people who often do that sort of messy output are people I have to remind that the computer actually works for us, not the other way around. If we take 10 minutes to make the computer do a bit more work (ex. line up the columns) then it has made things (in this case comprehension) easier for us. Let the tool do the work for you!
Friday, September 6, 2019
Jumping to conclusions, part 1
Karen Jennings had once been a manager at McDonalds. Walking home a little the worse for drink, she fell into a creek and broke her back. The doctor prescribed painkillers to ease her through the pain of recovery.and then goes on to talk about the spiral of addiction.
So, leaping to conclusions here, it's almost like that second sentence, "the little worse for drink", which is perhaps just glossed over as accidental, could actual be contributing to the condition, namely that Ms. Jennings might have other issues contributing to addiction.
We will see how the book progresses, but I've always wondered why some individuals can apparently safely take opioids and not spiral into addiction. What percentage of the patients is that, do 50% not become addicted? 75%, 90%?
Another article I have read in the past was related to a study of rats where in a controlled environment rats could self medicate by pressing a button to receive something (cocaine, opioids?) and they rapidly became addicted. However, the article continued, the rats were in a cage with nothing but the button. Other rats in a similar experiment were in a cage with rich rat entertainment, wheels, things to play with, etc. They found those rats occasionally pressed the button to medicate, but not to the level of addiction that the isolated rats did. The premise of the article was that addiction isn't fully the chemical itself but also the environment. They drew parallels with the Vietnam war where there was a lot of drug use when in Vietnam due to needing to mentally escape the horrific situation, however when those soldiers returned back to the US, the drug use mostly dried up since they were back in a normal environment.
In Ms. Jenning's case when she was walking home "the little worse for drink" (kudos for not driving BTW) I have to wonder if she was also not in a bad place to start with that also "fed" into the addiction.
Anyway, good read so far, on page 1. We will see where the book goes.
[Edit *2019-05-14*]
Became curious about why some people become addicted to alcohol and not others. Google was challenging because a lot of the answers were about dangers of addiction and how to detect, why it is bad, etc. But I was looking for scientific reasons...
Found this - https://www.healthline.com/health-news/lateral-habenula-responsible-for-alcholism-040814#3
which incidentally had this gem:
“Whether one is going to use drugs or not is a choice based on what the alternative reinforcers are,” he said. “If you have nothing else to do and life is not very pleasant, if you are a social creature—for example, a rat, and you are solo-housed in a boring environment as rats are generally housed for experiments, in that setting it is very easy to get animals to self-administer drugs. If one has them in an enriched environment in which they can socialize, have sex, groom, all those things that rats like to do, then it’s much more difficult to get them to self-administer drugs. It’s much more difficult to induce something that looks like an animal model of addiction.”It’s a fair bet that if humans were forced to live in the same conditions as the rats in Taha’s experiment—alone, in a tiny cage, with nothing to do—and given unlimited access to drugs, they might pass the time by using drugs, too.They note that genetics may be involved namely that the inability of the lateral habenula region to respond to negative outcomes (painful stimulus for example) prevents us from avoiding those actions in the future. In rat simulations they artificially damaged the lateral habenula in some rats and noticed that they did not avoid actions which later had negative outcomes.
Alcohol use is interesting as 'small' use has small euphoric effects and a small (non-existent?) negative effect, so continued/occasional use (which we note as not being an alcoholic) is not an issue. If occasional 'large' use has a large negative effect but this negative effect does not cause us to avoid these large use activities in the future then this pattern could be repeated (also necessitating larger use due to tolerances increasing) then this is what we are calling alcoholism.
It's quite interesting that even in this "modern age"(!!!) we cannot have these conversations without dragging in stigma or perceptions of mental weakness. "Why isn't he trying harder, he's just giving up too easy, he is too weak" type observations.
Go and read the healthline article, it's really good.
On the American Overdose book thread, unfortunately it's just a continuation of stories of addiction, how lives were ruined, how bad corporations took advantage of the situation to make lots of money. There are occasional glimpses of questions as to why only certain regions were being hit by this (which may play into the conditions paragraph as noted by the Healthline article). But otherwise it's just a "this is terrible and unacceptable" type book. As with people with similar attitudes (serial complainers) I often find this tiresome. Slightly less worse are people who try to do something about it but unfortunately have not taken the time to really understand the issue and so solutions are just random and amount almost to a cargo cult type response.
Monday, March 4, 2019
Disk Performance
Looked around at a bunch of perf benchmark tools and settled on CrystalDiskMark 6.0.1 (although I downloaded and installed from the Microsoft Store - quick/easy install (free)).
Ran on the old Synology DS215J and on the new Synology DS1819+
Results from a CIFS mount of a folder.
DS215J:

DS1819+:

OK, so way better caching on the random reads and writes. The sequential is about 30% better.
Disks behind the test are:
DS215J - 2 WD30EFRX-68EUZN0 - 3TB 5400RPM WD Red disks
DS1819+ - 2 WD40EFRX-68N32N0 - 4TB 5400RPM WD Red disks
Interesting to note the WD30EFRX has 147MB/s interface speeds, the WD40EFRX has 150MB. The 2GB model WD20EFAX has 180MB/s interface speed and 256MB cache whereas the other models have 64GB cache. Strange difference, 2GB model seems to be much better.
There are no real specs of I/O perf of these models but the assumption is newer ones have higher areal density so better (faster) I/O.
Group Consensus
Monday, March 5, 2018
Great Caesar!
Interesting that it came from a Tijuana restaurant. The guy who invented it was an Italian/American guy from California named Caesar Cardini. The restaurant was opened in Tijuana in the 1920s and was popular with people from California who would go there to eat and drink during Prohibition. That's a very interesting statement in these times; it would be like somebody today who would take a road trip to Mexico for the afternoon so they could eat tacos and legally smoke weed. People would assume they were a drug addict. I wonder if in the 1920s it was assumed people were alcoholics if they crossed the border just so they could go to a restaurant and have drinks? Different times.
You can actually buy Cardini dressing in the supermarket. I regularly get it; it's quite good.
Tuesday, November 21, 2017
Active evolution? Hardly
1 Minute - The amount of time, on average per night, that a group of modern Tanzanian hunter-gatherers were all asleep at the same time. Experts say the minuscule overlap supports the notion that humans evolved different sleep patterns as a way to ensure someone was up to alert others of nighttime threats, such as predators.
Pet peeve of mine, a lot of descriptions are like this where the implications are that the evolution was directed and intentional (as a way to ensure someone was up). In reality it's less glamorous. The humans who happened to be randomly de-synchronized in their sleep patterns didn't get eaten by tigers or murdered by bands of ruffians. The ones who all slept at the same time ended up dying and didn't pass on these 'sleep at the same time' genes to their offspring. That's the evolutionary pressure, not some sort of evolving different patterns as a way to ensure someone was up to alert others. That sounds so carefully planned out.
Really what we think happens is random mutations give a survival advantage.
Strange conventions
What are these metamaterials? They are substances that have ...
What's interesting here is that this conversational method "what are..." seems perfectly normal in a book, makes the language interesting like it's really a conversation, yet when I'm reading a book and I'm reading facts it's very strange to think of this as a conversation. What are metamaterials does absolutely nothing to tell me what they are, the sentence is pure throw away but yet it feels natural, even in written form.
I think this might be like when somebody calls you up and says "Hello, it's Joe", when we all know that I know it's Joe since the ID on the calls said so. But, if Joe started up right away with the talking, the conversation would be thrown off. Like I'm expecting an announcement of who it is. I wonder if younger kids start off phone calls this way or if they just launch into it since they never had a time before caller ID... (Plot twist, younger kids don't seem to call each other on the phone, they just text. Plus they don't announce who they are at the beginning of the text.)
Sunday, November 19, 2017
Planning Poker
Saturday, November 18, 2017
Monday, September 4, 2017
The Robots are Taking Over!
History suggests that the process is much more uneven than that. The ATM, for example, is a textbook example of a machine that was designed to replace human labor. First introduced around 1970, ATMs hit widespread adoption in the late 1990s. Today, there are more than 400,000 ATMs in the US. But, as economist James Bessen has shown, the number of bank tellers actually rose between 2000 and 2010. That's because even though the average number of tellers per branch fell, ATMs made it cheaper to open branches, so banks opened more of them. ... Taking a wider view, Bessen found that of the 271 occupations listed on the 1950 census only one - elevator operator - had been rendered obsolete by automation by 2010.
Monday, July 31, 2017
Follow-up: Perfect being the enemy of the good
The FDA wants to regulate nicotine levels to make them non addictive. Also they will start encouraging people to switch to less dangerous products such as e-cigarettes and smokeless tobacco.
People have noted that low nicotine products have been tried before and didn't make the market. I suspect that's because they tried going to 0 nicotine. Instead they should work like the patch and have different levels of nicotine. Note that e-cigarettes have varying levels of nicotine available. I suspect regular cigarettes have the levels of nicotine carefully set in order to satisfy the customer.
In some ways this is a bit like coffee and caffeine and such. We have regular coffee and we have decaf. I think if coffee caused cancer we would be having similar discussions. The only thing that's a bit strange is if we have cigarettes that have no nicotine, wouldn't smoking them still cause cancer, since it's not the nicotine that's cancerous, it's the smoking part.
Plus I don't think we've yet drawn a lot of light on the addictive qualities of caffeine. People need to get their fix in the morning, it's a stimulant, there are withdrawal symptoms, etc. Like drug use there's all sorts of paraphernalia for making coffee, etc. The similarities are quite close! Apparently the thing that gets us all up in arms is intoxication which is the only thing missing in the caffeine. Although I know some people who become somewhat aggressive after having a few cups of coffee, perhaps like a lighter version of somebody going nuts on crack.
Will be interesting to see how this all goes with the nicotine levels and harm reduction with other product uses. I think the tobacco companies will thrive and will adjust to this quite nicely. I think they've seen this coming for years (not that they are prescient but I think they have noticed rightly so that these other products are less harmful).
Friday, July 28, 2017
Follow-up: Tech Giants
There was recent concern about Artificial Intelligence causing widespread loss of jobs. A reader noted that there was a similar panic in the 1990's where people feared that computers would replace teachers in the classroom. Instead, the widespread use of technology in education has revitalized curriculum, teaching, and learning. Technology remains an important tool to advance and transform the nature of human work.
Perfect being the enemy of the good
Many scientists agree that moist, smokeless tobacco, including chewing and dipping tobacco, is significantly less harmful than cigarettes. But rather than encouraging the country’s 37 million smokers to switch to less-risky products, U.S. health officials have so far stuck with an abstinence-only message to the public.Online fact sheets published by the Centers for Disease Control, the Food and Drug Administration and the National Cancer Institute list multiple health risks associated with smokeless tobacco—including cancers of the mouth, esophagus, and pancreas—but give no indication it is less harmful than cigarettes. “There is no safe form of tobacco,” the cancer institute says on its website.
I think we have an all or nothing tendency which can be harmful. This is another case of the perfect being the enemy of the good.
Tuesday, July 25, 2017
The Robots!
A recent Oxford study predicted that 70 percent of US construction jobs will disappear in the coming decades.
Makes you wonder what construction jobs were like before large yellow metal machines were used to dig big holes and pour concrete.
Saturday, July 22, 2017
Paleo Mainfesto
Friday, July 21, 2017
Get Smart!
Get status of a drive:
smartctl -a /dev/sdaUSB connected drive:
smartctl -d sat,12 -a /dev/sdb
Run a quick test:
smartctl -d sat,12 -t short /dev/sdb
Run a more in-depth test:
smartctl -d sat,12 -t long /dev/sdb
Sunday, July 9, 2017
Your License Please!
Paraphrasing:
The pressure on legislature to license doesn't come from the public but the members of the occupation. (Milton Friedman). 55 years later two other commentators observe licensing having negative effect on employment (since it restricts access to the field). It's also the case that occupational licensing "widens the gap between rich and poor by squelching employment opportunities at the lower end of the socioeconomic scale, and by inflating the compensation of highly skilled professionals at the top of that scale." (The Captured Economy, How the Powerful Become Richer, Slow Down Growth, and Increase Inequality, by Brink Lindsey and Steven Teles).
No study has been done on degree to which occupational licensing has widened income inequality but we do know that since 1970, the share of workers subject to licensing has jumped from 10% to almost 30%. There are lots of occupations paying reasonably well which people at the low end might normally be able to fill with minimal on-the-job training, but they may be out of reach due to money and time required for the license - beauticians, manicurists, barbers, preschool teachers, athletic trainers, gambling dealers, bartenders, massage therapists, interior designers, and florists.
Those who defend licenses confuse it with branding, meaning branding makes us better-informed consumers. Private market already performs this in various ways, online evaluations for example. The advantage of branding is the market doesn't place restrictions on people's right to enter a field.
Studies of licensing show little connection between quality and licenses. Louisiana requires florists to be licensed which Texas doesn't. An experiment involving florists from both states revealed no difference between floral-arranging skills of the licensed professions vs. unlicensed. That's because licensing is mainly about barriers to entry, not enhancing skill.
I agree with this but I would be concerned about skills at the higher end professions. Licensing does force you to keep up with studies and updates that normally would languish. Also, some things might lack adequate oversight or market pressure to weed out inferior people (sounds like I don't believe in market efficiency in some fringe cases) whereas routine testing or re-licensing should help that. But I definitely do agree that there are some professions requiring licensing that are just way too much nanny state.
Also somewhat related from the Editorial Commentary by Thomas W. Hazlett
The Radio Act of 1927, the brainchild of then-secretary of commerce Herber Hoover, created a regulatory regime for carefully parceling out airwaves according to a "public interest" standard. It was said to be necessary to prevent chaos - "etheric bedlam."
In fact, it was not. Rather, it reflected Washington politics that favored incumbent interests - the first few visionaries who opened radio stations and enjoyed commercial success. The scheme hamstring competition and flummoxed innovators for generations"
Saturday, June 24, 2017
WeMo Insight
Can chart daily or hourly electricity use via export to Excel:

Give a good sense of if the fridge is behaving and consuming electricity normally.
http://www.belkin.com/us/p/P-F7C029/
The Elitech RC5 data logger is really great. The fridge has been on the fritz and so being able to see how the temperature has been going is really good.
Software is OK, works fine on Windows 10. Stopping recording data and starting recording again requires a strange process which isn't documented (well? at all?) but luckily Franklin (https://www.amazon.com/gp/pdp/profile/A2NA41EE5VUMY0/ref=cm_cr_dp_d_pdp?ie=UTF8) has the quick notes:
Quick start guide (since they didn't include one)
1) It will work plugged in to usb port or not, but your computer will heat it up, so don't measure temperature while it's plugged in
2) You have to hit the play button and HOLD IT DOWN for four seconds to start recording
3) You have to plug it into your computer, and use the software to stop recording. Click the stop recording button at the top right bar on the GUI
4) You can't start recording again, until you zero out the data. To do so go to the parameter set menu in the software, and click on the "Save Parameter" button. You don't have to change anything, but this will zero out the data set and allow you to log new data.
Step 4 for zeroing things out is important. I couldn't for the life of me figure out how to start recording again until I googled and found that step 4.
Data export goes nicely into Excel and you can then slice and dice. They produce a nice image for you:

Available on Amazon at https://www.amazon.com/Elitech-RC-5-Temperature-Recorder-Accuracy/dp/B00MQSCZF2
Sunday, April 2, 2017
Think of the children!
Saturday, April 1, 2017
Advanced Technology
Monday, September 5, 2016
The Rise and Fall of Violent Crime in America
I'm a sucker for fact based evidence and research. Great science, economics.
Great book about rise and fall of violent crime over the past hundred years or so. Reads somewhat like a college textbook. Lots of great references and end notes. Good fact based read.
Interesting takeaways:
Causes of drops in crime: Young men going off to war, correlation with alcohol abuse (higher abuse == higher violent crime). Unemployment does not correlate; it's not the case that when there's lots of work available that crime drops.
Longer term trends, crime dips 1935-64, rises 64-95, dips 95.
Rise in 64 attributed to increase in young men (baby boom) exceeding a tipping point, a systemic overload of the criminal justice system and police/courts, and a subculture of black youth violence - swagger as defense against violence - respect and preemptive theft to increase respect. Came from the southern redneck culture. See "The Code of the Street". Crack cocaine epidemic in the 80s also significant source of violent crime.
Social contagion - people commit crimes because their peers are doing it. Things exceed a tipping point.
Dip in 95 - Cocaine epidemic ran its course. Younger people saw negative effects on their older siblings, did not want the same fate. More cops and policing about yes but the clearance rates of reported crimes being solved actually went down. (But, total amount may have been better but % was worse; was not explored by the author). (Thought experiment - do we have the expectation that percentage remains fixed as number scale (from a social perspective)?)
Definition of culture - the collective programming of the human mind that distinguishes the members of one group or category of people from the others.
Sources of fear (say of flying or being a crime victim) - likelihood is important but that is tempered by unpredictability of something happening, the inability for us to take precautions, and potentially devastating consequences of the thing happening make all the difference.
Saturday, August 27, 2016
Windows 10 quirks, part 1
ASUS SBW-06D2X-U DVD/BD stopped working. Had been using this fine. Used it to install the computer in fact. Had been working fine under Windows 10 for a few months. Then mysteriously after a reboot, the device wouldn't show up. I'd plug it in, get the sound that the device was recognized successfully, but it wouldn't show up on the system. Looked in the Device Manager, it was seen there (after I elected to show hidden devices, ahem!), however, Windows said it wasn't attached. Strange. Googled some posts, lots of stuff about removing ATAPI drivers, IDE base, etc. Not for me since this is a USB device. I removed the device from device manager hoping that on next plug-in it would be recognized and new drivers would be installed. No dice, plugging in got me the same success sound but the device didn't show up. DANGIT! Googled some more and found posts (http://answers.microsoft.com/en-us/windows/forum/windows_10-hardware/asus-sbw-06d2x-u-will-not-work-in-windows-10/9865fa58-b14b-4670-94fd-a542cc270051?auth=1) saying that there was another device it was showing up as - INITIO combo device. On a whim, removed that device, unplugged and replugged in the device, and magic, it all works now. Yay.
So, strange that this was working, looks like a new(er?) windows device driver showed up and decided it was in control of this device and blocked the ASUS driver from owning the device.
Thursday, December 25, 2014
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>New Web Project</title>
</head>
<body>
<h1>New Web Project Page</h1>
Max Number:
<input id="maxnum" type="number" />
Seconds of delay:
<input id="delay" type="number" />
<br />
<button type="button" onclick="go()">
Go!
</button>
<button type="button" onclick="stop()">
Stop!
</button>
<p id="message1">
</p>
<p id="message2" style="font-size: 200px">
</p>
<script>
var interval;
function go() {
var maxnum = document.getElementById("maxnum").value;
var delay = document.getElementById("delay").value;
document.getElementById("message1").innerHTML = "you typed in maxnum=" + maxnum + " and delay=" + delay + "";
clearInterval(interval);
update();
interval = setInterval(function() {
update();
}, delay * 1000);
}
function stop() {
clearInterval(interval);
}
var prevnum = -1;
function update() {
var maxnum = document.getElementById("maxnum").value;
var number;
do {
number = Math.floor((Math.random() * maxnum) + 1);
} while (number == prevnum);
document.getElementById("message2").innerHTML = number;
// document.getElementById("message2").style.fontSize="xx-large";
prevnum = number;
}
</script>
</body>
</html>



