Author: Lisa

Information Overload

Again, I hear something in one of Trump’s rambles that I think is going to get lost in the rest of the rambling. He’s speaking at a rally for some mainstream Republican dude in Alabama who he evidently endorsed. Some significant portion of people at the rally boo the dude (some interviewees literally had no clue who the dude was, they were there to see Trump … which is a lot like a memorable advertising campaign where no one remembers the product). And somewhere in the middle of Trump’s thoughts about how [minorities? professional sports players? people who disagree with Trump?] should be fired for non-violent and fairly non-disruptive protests and using the same insult toward the leader of North Korea, there’s Trump’s musing on his support for the mainstream candidate at whose rally he was speaking: “And I might have made a mistake. And I’ll be honest, I might have made a mistake.”

Umm … I’m here to talk you into voting for this guy, but maybe you shouldn’t vote for him. But, hey, I’m here so heap praise on me.

And his musing on their close relationship: “I don’t know him. I met him once”. Which, yeah, since he said the same thing about Putin may indicate a deeper relationship. But I’m more included to believe he’s supporting some dude he literally met once, knows nothing about, and worse knows nothing about the guy’s beliefs. Essentially how he supports health care bills too — I didn’t read it, I have no idea what it does. But by all things holy, they need to pass it and I’m signing the thing.

Also of note – Trump could have been at home, spending the night getting ready to watch some games tomorrow. (1) He also could have been at home working on initiatives, spending time with family, or reading through his curated folder of articles fawning over him. But (2) how the hell much work is it to watch a few games? Back when Bush was constantly down in Texas clearing brush, I wondered how quickly the stuff grew … but I can at least concede that, provided brush is there, it is a time consuming task to remove it. Seriously, it isn’t like Trump has to prep snacks for the game. Clean the house. Fluff the cushions. Make a beer run. Back before we had a PVR scheduled to record the game, “prep” meant checking the TV listing to get the time and channel. Turning on the TV. Umm, keeping eyes open and in the general direction of the screen? Now that we’ve got a PVR, it’s just turning on the TV & connecting to the stream. No wonder Trump is constantly amazed at how difficult thorny political issues turn out to be — the man needs twelve hours to prepare to sit on his ass, have someone bring him food and drink, and stare at a TV. And let’s be honest, his whole life is preparation for staring at a TV.

My Area Of Expertise

Jimmy Kimmel had an interesting comment about his input into the healthcare debate:

“I never imagined I would get involved in something like this, this is not my area of expertise. My area of expertise is eating pizza, and that’s really about it. But we can’t let them do this to our children, our senior citizens, and our veterans, or to any of us.”

But let’s be honest here, there aren’t a lot of people whose area of expertise is the impact of public policy on health care. Kimmel does, however, have expertise in being a health care consumer dealing with a condition where there is no such thing as a rational actor: a parent trying to save their new baby.

Maybe Cassidy will claim he didn’t outright lie, as Kimmel asserts. But saying you have crafted a compassionate health care policy because a parent won’t have to watch their kid die for want of a life-saving surgery is disingenuous. Essentially any health care plan passes “the Kimmel test” unless it repeals the Emergency Medical and Treatment Labor Act (I believe the act scopes the ‘provide emergency care to anyone without considering ability to pay’ bit to facilities that accept Medicare, as it is the acceptance of Medicare funds that places the facility under federal purview … so the parent may need to go do a specific hospital, but they can find one). The hospital has to perform a medical screening, and they are not permitted to discharge the patient without stabilization (or the patient opting out of treatment, or if they are transferring to another facility better equipped to deal with the issue …. but I assume the accepting hospital assumes the same legal burden so the two end points are the condition is stabilized or the patient opts out of treatment.)

It’s an inefficient structure. My sister had a kidney stone. She could go into the hospital a few times a month in extreme pain, take up a doctor’s time, get doped up on some pain killer (which takes up even more of the doctor’s time because there are people who surf hospitals looking for Oxi), be handed a prescription she had no way of filling, and be on her way. Now if the stone ruptured something, surgical intervention may have been required to stabilize her ailment. But it didn’t, so they didn’t have to perform surgery to remove the kidney stone because the condition was stabilized by eliminating pain. It would have been cheaper to just remove the thing, but she couldn’t pay for that service.

Another facet of the long-standing federal law is that the hospital is not prevented from billing you for their services. If her kidney had ruptured and emergency surgery been required, she’d have been billed tens of thousands of dollars. If you don’t have anything to take, there’s a lien that sits on the record it expires. Or you have some assets and need to file bankruptcy to protect your car/home and clear the medical bills.

It’s not enough to say our health care system put a parent in the position of being unable to afford saving their kids life – it’s been that way since 1986. Our health care system shouldn’t make the parent bring their kid in every week to be stabilized until the situation becomes so dire that the underlying condition cannot be stabilized and actually needs to be resolved. Our health care system shouldn’t make a parent file bankruptcy to save their house and car from being liquidated to cover the lien from that hospital bill.

Baseball T-Shirt: Completed

I finished Anya’s baseball t-shirt!

I sketched a quick heart in Photoshop, and drew in two lines of baseball-style stitching. The image was printed on Transfer EZE ‘paper’ using our laser printer (which answered the question: can you laser print on this stuff?). I then took a little scrap of quilt batting and laid it on the shirt. Placed a scrap of white satin on top, then stuck the Transfer Eze print onto the satin. It adhered quite well to satin – was a little concerned!

Put it in a hoop and embroidered the red stitching to hold the whole thing in place. I then trimmed the satin about a quarter inch outside of the heart’s lines; the batting was trimmed to be about a quarter inch smaller than the satin. Finishing the project was just needle turn appliqueing the heart to the shirt (using what amounts to a really short satin stitch).

The quilt batting really enhances the stitch definition for the red lines, and it makes the whole design puff out a bit from the shirt.

PHP: Windows Authentication to MS SQL Database

I’ve encountered several people now how have followed “the directions” to allow their IIS-hosted PHP code to authenticate to a MS SQL server using Windows authentication … only to get an error indicating some unexpected ID is unable to log into the SQL server.

Create your application pool and add an identity. Turn off fastcgi.impersonate in your php.ini file. Create web site, use custom application pool … FAIL.

C:\Users\administrator.RUSHWORTH<%windir%\system32\inetsrv\appcmd.exe list config "Exchange Back End" /section:anonymousAuthentication
<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
  </security>
</system.webServer>

The web site still doesn’t pick up the user from the application pool. Click on Anonymous Authentication, then click “Edit” over in the actions pane. Change it to use the application pool identity here too (why wouldn’t it automatically do so when an identity is provided?? no idea!).

C:\Users\administrator.RUSHWORTH<%windir%\system32\inetsrv\appcmd.exe list config "Exchange Back End" /section:anonymousAuthentication
<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="" />
    </authentication>
  </security>
</system.webServer>

I’ve always seen the null string in userName, although I’ve read that the element may be omitted entirely. Once the site is actually using the pool identity, PHP can authenticate to SQL accounts using Windows authentication.

Baseball Shirt

Anya’s preschool class has “baseball day” on Friday, and they are to wear their baseball shirts. It’s an interesting assumption that everyone has a baseball shirt to wear. Three years ago, I happened across an Indians t-shirt on post-season clearance. It was a size too large, but she grows. Beyond my “you cannot go wrong with a 4$ t-shirt” purchase, we don’t have anything baseball related. I don’t particularly want to pay inflated MLB-licensed in-season (and the Indians are doing well) prices.

I picked up a bunch of blank t-shirts for embroidered designs, so I decided to make Anya a baseball themed shirt. She chose the green shirt, and I drew a heart and added baseball stitching. The black and white image was printed on this Transfer Eze paper that I love. Then I cut out a slightly larger heart of white satin and a same-sized heart from a very thin quilt batting. Laid out the t-shirt, centered the quilt backing, then affixed the Transfer Eze heart to the satin and laid it on top of the batting. Going with the quilting principal of working from the center out to avoid bubbles, I started with the red stitching. Now I’m using a satin stitch around the edge to needle turn appliqué the whole thing onto the t-shirt.

Precognition

how fucked up is our form of government when the passage of a bill rests on the author’s ability to craft perks for Alaska without specifically saying “Except for Alaska, which will get an extra fifty mill each year and the Department of Interior won’t accidentally lose all of their grant applications for the next three and a quarter years”?

Facebook’s Offensive Advertising Profiles

As a programmer, I assumed Facebook used some sort of statistical analysis to generate advertising categories based on user input rather than employing a marketing group. A statistical analysis of the phrases being typed is *generally* an accurate reflection of what people type, although I’ve encountered situations where their code does not appropriately weight adjectives (FB thought I was a Trump supporter because incompetent, misogynist, unqualified, etc didn’t clue them into my real beliefs). But I don’t think the listings causing an uproar this week were factually wrong.
 
Sure, the market segment name is offensive; but computers don’t natively identify human offense. I used to manage the spam filtering platform for a large company (back before hourly anti-spam definition updates were a thing). It is impossible to write every iteration of every potentially offensive string out there. We would get e-mails for \/|@GR@! As such, there isn’t a simple list of word combinations that shouldn’t appear in your marketing profiles. It would be quite limiting to avoid ‘kill’ or ‘hate’ in profiles too — a group of people who hate vegetables is a viable target market. Or those who make killer mods to their car.
 
FB’s failing, from a development standpoint, is not having a sufficiently robust set of heuristic principals against which target demo’s are analysed for non-publication. They may have considered the list would be self-pruning: no company is going to buy ads to target “kill all women”. Any advertising string that receives under some threshold of buys in a delta-time gets dropped. Lazy, but I’m a lazy programmer and could *totally* see myself going down that path. And spinning it as the most efficient mechanism at that. To me, this is the difference between a computer science major and an information sciences major. Computer science is about perfecting the algorithm to build categories from user input and optimizing the results by mining purchase data to determine which categories are worth retaining. Information science teaches you to consider the business impact of customers seeing the categories which emerge from user input. 
 
There are ad demo’s for all sorts of other offensive groups, so it isn’t like the algorithm unfairly targeted a specific group. Facebook makes money from selling advertisements to companies based on what FB users talk about. It isn’t a specific attempt to profit by advertising to hate groups; it’s an attempt to profit by dynamically creating marketing demographic categories and sorting people into their bins.
This isn’t limited to Facebook either – any scenario where it is possible to make money but costs nothing to create entries for sale … someone will write an algorithm to create passive income. Why WOULDN’T they? You can sell shirts on Amazon. Amazon’s Marketplace Web Service allows resellers to automate product listings. Custom write some code to insert random (adjectives | nouns | verbs) into a template string then throw together a PNG of the logo superimposed on a product. Have a production facility with an API to order, make the product once it has been ordered, and you’ve got passive income. And people did. I’m sure some were wary programmers – a sufficiently paranoid person might even have a human approve the new list of phrases. Someone less paranoid might make a banned word list (or even a banned word list and source one’s words from a dictionary and look for the banned words in the definition too). But a poorly conceived implementation will just glom words together and assume something stupid/offensive just won’t sell. Works that way sometimes. Bad publicity sinks the company other times.
 
The only thing that really offends me about this story is that unpleasant people are partaking in unpleasant conversations. Which isn’t news, nor is it really FB’s fault beyond creating a platform to facilitate the discussion. Possibly some unpleasant companies are targeting their ads to these individuals … although that’s not entirely FB’s fault either. Buy an ad in Breitbart and you can target a bunch of white supremacists too. Not creating a marketing demographic for them doesn’t make the belief disappear. 

Basic Security Or Paranoia

We have Amazon’s smart speakers, so I don’t know if this is true for Google or Apple digital assistants. But the Alexa series of speakers has a default wake word and several non-default options you can elect to use instead. Never use the default — that’s a good general security maxim. We had other factors in our wake word decision – a friend of Scott’s has a daughter whose name is quite close to Alexa and I foresaw the speaker going crazy if they’d speak of her. But the fact is, day 0 of the device … I expected advertisers to incorporate “Alexa, give me more info on product XYZ” in their ads. Aaaand now we have South Park season 21’s first episode.

This is just goofy stuff – maybe words you don’t want replaying at inopportune moments, maybe an alarm way too early in the morning for you. Remember TV commercials that asked kids to hold the telephone handset up to the screen and then played DTMF to ring the order hotline? Alexa, call 800-###-####. Hell, they could order Amazon products on your credit card. Something like ShopSafe (a unique card number with a low limit that actually rejects purchases over that limit) can be tied to your account. It’s extra work to keep updating the card on your account, but I’d rather Alexa buy 12$ of something I didn’t want than 250$. Then our speakers do not have unfettered access to my credit card – there’s a pin required to make purchases. I’m sure that won’t stop your kid who overhears the code from using it, but it prevents television programs, radio shows, and party-goers from buying random junk as a joke.

Checking Supported TLS Versions and Ciphers

There have been a number of ssl vulnerabilities (and deprecated ciphers that should be unavailable, especially when transiting particularly sensitive information). On Linux distributions, nmap includes a script that enumerates ssl versions and, per version, the supported ciphers.

[lisa@linuxbox ~]# nmap -P0 -p 25 –script +ssl-enum-ciphers myhost.domain.ccTLD

Starting Nmap 7.40 ( https://nmap.org ) at 2017-10-13 11:36 EDT
Nmap scan report for myhost.domain.ccTLD (#.#.#.#)
Host is up (0.00012s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
25/tcp open smtp
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) – A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) – A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) – A
| compressors:
| NULL
| cipher preference: server
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) – A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) – A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) – A
| compressors:
| NULL
| cipher preference: server
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) – A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (rsa 2048) – A
| TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (dh 2048) – A
| TLS_DHE_RSA_WITH_AES_256_CCM_8 (dh 2048) – A
| TLS_DHE_RSA_WITH_AES_256_CCM (dh 2048) – A
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) – A
| TLS_DHE_RSA_WITH_AES_128_CCM_8 (dh 2048) – A
| TLS_DHE_RSA_WITH_AES_128_CCM (dh 2048) – A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) – A
| TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 (rsa 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 (dh 2048) – A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) – A
| TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 (rsa 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 (dh 2048) – A
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) – A
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) – A
| TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) – A
| TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) – A
| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) – A
| TLS_RSA_WITH_AES_256_CCM_8 (rsa 2048) – A
| TLS_RSA_WITH_AES_256_CCM (rsa 2048) – A
| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) – A
| TLS_RSA_WITH_AES_128_CCM_8 (rsa 2048) – A
| TLS_RSA_WITH_AES_128_CCM (rsa 2048) – A
| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 (rsa 2048) – A
| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 (rsa 2048) – A
| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) – A
| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) – A
| compressors:
| NULL
| cipher preference: server
|_ least strength: A

Nmap done: 1 IP address (1 host up) scanned in 144.67 seconds