Interesting Links for 25-06-2017

Sunday, June 25th, 2017 12:00 pm

Two By Tuur

Sunday, June 25th, 2017 12:16 am
jazzy_dave: (Default)
[personal profile] jazzy_dave
A couple of modern classical pieces to end the night -

Erkki Sven-Tüür - Passion (1993)

Erkki-Sven Tüür- Illuminatio (Viola Concerto)
jazzy_dave: (bookish)
[personal profile] jazzy_dave

Hunter S.Thompson - "The Proud Highway: 1955-67, Saga of a Desperate Southern Gentleman" (Bloomsbury)

This is the fist installation of the Fear and Loathing Letters and hence is known as volume one.

I read a majority of this book during my travels over the last six months and often people around me thought I was crazy because of how often I would laugh out loud at his writings. It reminds me of the best of Spike Milligan's humour in many ways.

It was pure Hunter, same style of writing as his journalism, but with a more personal feel and added insights to what was going on in his life. I also felt like it took forever to finish, but I tried to view it as a marathon, not a sprint.

Interesting Links for 24-06-2017

Saturday, June 24th, 2017 12:00 pm

Technomancer tools: Tiddlywiki

Friday, June 23rd, 2017 06:28 am
[syndicated profile] ash_feed

I've been promising myself that I'd do a series of articles about tools that I've incorporated into my exocortex over the years, and now's as good a time as any to start.  Rather than jump right into the crunchy stuff I thought I'd start with something that's fairly simple to use, straightforward, and endlessly useful for many purposes - a wiki.

Usually, when somebody brings up the topic of wikis one either immediately thinks of Wikipedia or one of the godsawful corporate wikis that one might be forced to use on a daily basis.  And you're not that off the mark, because ultimately they're websites that let one or more people create, modify, and delete articles about just about anything one might be inclined to by using only a web browser.  Usually you need to set up or be given an account to log into them because wiki spam is to this day a horrendous problem to fight (I've had to do it as parts of previous jobs, and I wouldn't wish it on my worst enemy).  If you've been around a while, when you think of having a wiki you might think of setting up something like WikiWikiWeb or Mediawiki, which also means setting up a server, a database, web server software, the wiki software, configuring everything... and unless you have a big, important project that necessitates it, it's kind of overkill and you go right back to a text file on your desktop.  And I don't blame you.

There are other options out there that require much less in the way of overhead that are also nicer than the ubiquitous notes.txt file.  For the past couple of years (since 2012.ev at least) I've been using a personal wiki called Tiddlywiki for most of my projects which requires just a fairly modern web browser (if you're using Internet Explorer you need to be running IE 10 or later) and some room on your desktop for another file.

Tiddlywiki is a fully featured personal wiki that is implemented as a self-modifying HTML page.  All you need to do is download and save it somewhere; your desktop is perfectly fine.  Downloading it is little more than saving the page while viewing the website - control+S, alt+F and save, command+S, what have you.  That's all it takes.  This gives you the full Tiddlywiki package with all the documentation.  Backing up a Tiddlywiki is as easy as copying it to a flash drive or a storage provider like Dropbox and setting up a new one is really no different.  Here's the neat thing about Tiddlywiki: It doesn't need a database of any kind because the page rewrites itself.  When you save a copy by clicking the checkmark icon in the upper-right corner (when you edit a tiddler it'll turn bright red) your browser will ask you where to save it to and what name to give it.  I like to add numbers to the filename that increase monotonically (00, 01, 02, and so forth).  Now, the gotcha: Later on, when you go back to open your wiki, you want to open the latest copy of the file because that's where all of your changes are.  I do not recommend saving over your original file over and over because some operating systems don't handle this well and will corrupt the file.  Just save sequentially.  My workflow goes like this:

  • Do stuff.
  • Save Tiddlywiki with the next higher number in the filename.
  • Finish doing stuff.
  • Rename wiki.html wiki.html.old
  • Rename wiki.html.highest-number wiki.html
  • Copy wiki.html into project directory.
  • Commit changes, including new version of wiki.html.

As for what I use Tiddlywiki for, I've lost count of the number of instances I have.  For every major software development project I have on deck I have a Tiddlywiki checked into version control along with the source code.  I also use it at work to make notes on everything I have to do, because every time I start a new job I have to learn whole environments from scratch as well as whatever technologies I've never seen before.  I've been using a Tiddlywiki to organize my exocortex project since I don't know when, from weird ideas to links to things that I want to check out to documentation on every construct and bot I have to checklists for upgrade and maintenance procedures (it worked at NASA).

Creating new entries on the wiki, called tiddlers is done by clicking the plus button in the toolbar on the right-hand side.  The page will alter to show a blank entry.  Yay.  Enter a title and start typing in it.  If you decide to use the tagging functionality to further organize your data (and if you do, please use a consistent and sane tagging system to save your sanity!) enter your tags one at a time in the "tag name" field, clicking the "add" button after each one.  Click the checkmark icon at the top of the tiddler and the editor will turn into a box containing you notes.  Now click the checkmark icon on the toolbar at the far right, and your browser will ask you where to save the file.  Pick a location and save it.

This is all well and good but there's a lot more that we can do with text - bold, italic, hyperlinks to websites, even links to other tiddlers.  Go back to the tiddler you just created and click the pencil icon to edit it again.  Marking up text is as easy as highlighting it with the mouse (click and drag) and clicking one of the boxes on the tiddler's toolbar, Bold, Italic, Strikethrough, Underline, and so forth.  To add a link to another tiddler in your wiki, highlight the text and click on the button that looks like chain links.  It'll open a popup that says "Create wikitext link" with a little searchbox.  Type a few letters of the title of the tiddler you want to link to and as you type it'll show you a list of possible tiddlers you mean.  Click on one of them and you'll see the highlight change into wiki markup: [[This is your test link|HelloThere]]

You can create links to other websites the same way.  Type the word "Google" into your new tiddler, highlight it with the cursor, and hit the chainlink button.  Now type the URL to Google in that little search window:

Click on the arrow button next to the search window, it looks a little like the fast-forward button.  You'll see the highlight change into wiki markup again: [[Google|]]

Click the checkmark on the tiddler to save it again.  To close a tiddler, click the X icon at the top of a tiddler to get it out of your way.

I think I've given you enough information to get started with Tiddlywiki.  Just know that if you're not sure what something does, hover the mouse cursor over it for a few seconds and you'll see a popup describing it.  You can also access the online help built into Tiddlywiki by clicking the "Working with TiddlyWiki" link on the far right-hand side of the page and it'll open a tiddler containing links to parts of the documentation.  I strongly suggest starting with "The First Rule of Using TiddlyWiki" and wandering around in the wiki from there.  If it helps, remember that this is something that you can and should play around with.  There is nothing that says that you can't have a good time while learning something new, and in fact you absolutely should.  If you need it, I give you license to experiment with Tiddlywiki, make mistakes, and try new things with it.  The most that you'll lose is an afternoon while trying new things.

As it turns out there are quite a few fun things you can do with Tiddlywiki.  You can use it to

  • Keep a journal.
  • Keep notes for a big project you're working on, like a thesis.
  • Keep notes for a book you're writing (or write your book in it).
  • Keep track of all the API keys you use (I'm up to 320 these days).
  • Write a nonlinear story.
  • Write a game for people to play.
  • Keep track of the health and dietary requirements of your friends and family (literally a lifesaver in some cases).
  • Build an entire website with it by uploading it to a hosting provider.
    • People can download your entire website by saving the page.
    • People cannot edit your website because Tiddlywiki only lets you edit a local copy and not the one on the server!

I think I've given you enough to work with.  If you think Tiddlywiki will make a useful tool, by all means grab a copy and play around with it a little.  I think you might find it useful.

Interesting Links for 23-06-2017

Friday, June 23rd, 2017 12:00 pm
andrewducker: (Default)
[personal profile] andrewducker
marahmarie: my initials (MM) (Default)
[personal profile] marahmarie

In a weird twist, it's not HP recording your keystrokes on certain laptops - technically it's a Conexant audio driver that does the actual keystroke recording (it includes a debugging program that went a little haywire; whether that's by design or error is not yet known). HP has since released a security advisory that claims the driver's keystroke logging is "caused by a local debugging capability that was not disabled prior to product launch".

Because Conexant makes audio drivers for many computer brands, this privacy intrusion may ultimately affect many other computer, laptop and tablet makes and models, as well.

That means check your tablet, laptop or computer for this driver - no matter which make, model, device form factor or version of Windows you have.

You can follow these steps to find the Conexant audio driver on your device and to get a new HP driver without the keylogger in it:

  1. Using Cortana or a search tool like Everything, look for C:\Windows\System32\MicTray.exe or C:\Windows\System32\MicTray64.exe (you can right-click, copy and paste these words right from here into either one of those tools).
  2. If either file turns up, right click the computer taskbar, select Task Manager and look for either MicTray.exe or MicTray64.exe. If either of these turns up, right-click it and select End task.
  3. Go back to the file you found in C:\Windows\System32, right-click it and delete it.
  4. Install the latest HP driver from here. [ed. note: requires FTP to download]
  5. Now search your computer for C:\Users\Public\MicTray.log or check C:\Users\Public\ for the file; if it turns up, open it and check for login names, passwords, banking info, and so on, then change your passwords at the affected websites. 

Microsoft says in this advisory that "Windows Defender AV detects and removes this threat" but also warns "[d]oing so also disables the keyboard short cut that turns the microphone on and off."

Affected laptop models the public has been made aware of [list]:

HP EliteBook 820 G3 Notebook PC
HP EliteBook 828 G3 Notebook PC
HP EliteBook 840 G3 Notebook PC
HP EliteBook 848 G3 Notebook PC
HP EliteBook 850 G3 Notebook PC
HP ProBook 640 G2 Notebook PC
HP ProBook 650 G2 Notebook PC
HP ProBook 645 G2 Notebook PC
HP ProBook 655 G2 Notebook PC
HP ProBook 450 G3 Notebook PC
HP ProBook 430 G3 Notebook PC
HP ProBook 440 G3 Notebook PC
HP ProBook 446 G3 Notebook PC
HP ProBook 470 G3 Notebook PC
HP ProBook 455 G3 Notebook PC
HP EliteBook 725 G3 Notebook PC
HP EliteBook 745 G3 Notebook PC
HP EliteBook 755 G3 Notebook PC
HP EliteBook 1030 G1 Notebook PC
HP ZBook 15u G3 Mobile Workstation
HP Elite x2 1012 G1 Tablet
HP Elite x2 1012 G1 with Travel Keyboard
HP Elite x2 1012 G1 Advanced Keyboard
HP EliteBook Folio 1040 G3 Notebook PC
HP ZBook 17 G3 Mobile Workstation
HP ZBook 15 G3 Mobile Workstation
HP ZBook Studio G3 Mobile Workstation
HP EliteBook Folio G1 Notebook PC

Affected operating systems the public has been made aware of [list]:

Microsoft Windows 10 32
Microsoft Windows 10 64
Microsoft Windows 10 IOT Enterprise 32-Bit (x86)
Microsoft Windows 10 IOT Enterprise 64-Bit (x86)
Microsoft Windows 7 Enterprise 32 Edition
Microsoft Windows 7 Enterprise 64 Edition
Microsoft Windows 7 Home Basic 32 Edition
Microsoft Windows 7 Home Basic 64 Edition
Microsoft Windows 7 Home Premium 32 Edition
Microsoft Windows 7 Home Premium 64 Edition
Microsoft Windows 7 Professional 32 Edition
Microsoft Windows 7 Professional 64 Edition
Microsoft Windows 7 Starter 32 Edition
Microsoft Windows 7 Ultimate 32 Edition
Microsoft Windows 7 Ultimate 64 Edition
Microsoft Windows Embedded Standard 7 32
Microsoft Windows Embedded Standard 7E 32-Bit

I'm pretty sure merely having one of the operating systems listed above - by itself - isn't enough to predict "MicTray.exe" or "MicTray64.exe" will be found on your computer, but any make, model or type of computer - such as your tablet, laptop or computer tower - could have it, so it still doesn't hurt to check.

(no subject)

Thursday, June 22nd, 2017 09:39 pm
randomdreams: riding up mini slickrock (Default)
[personal profile] randomdreams
Nobody wanted to go riding at lunch today because everyone was tired and there was a lightning storm outside.
I rode over to Xilinx and rode with them instead.
We rode down to Niwot almost entirely offroad, because Bill has a brand new cyclecross bike. I was on my road race bike, sliding all over the place on the gravel and sand.
It was exhausting.
My coworkers DO all want to go out riding tomorrow, but I don't think I'll have time.

Pirate the bunny is so blind sometimes I feel like I need to hand-feed him to get him started on new food I put in his cage.

Monty got jumped by a posse of four chihuahuas today, all loose. We ran, because I don't want to have another chihuahua eaten.

My phone updated itself and has turned into Super Naggy Phone. "I see your battery is at 30%, would you like me to turn off Bluetooth?" Which gets really annoying when it tells me about six times a day that I have the ringtone silenced and might miss calls and would I like to change that. I'd like a NO FOREVER button.

We have milkweed growing like, well, weeds. We are cheering for monarch butterflies.
Some architecture at Regis University, mostly for [personal profile] basefinder
A sunset for [personal profile] elusis

I have a friend on G+ who is in an awful situation: a lesbian dying alone of lupus in her mother's basement in the deep south. She wants a lightsaber. I'm making the drive electronics for a lightsaber acting prop. This is a sample board for fitment purposes, to make sure that one channel of lighting works correctly with a control board someone else is doing, and also provides a one-shot-producing microcontroller using a hall effect sensor. The intent is that when a magnetic ring she wears gets close to the system, it detects the magnet, sends out a single pulse, and the control board handles sequencing and colors, then when her hand moves away it sends out a second pulse. (It's a silly way to handle off/on, in my opinion, but I'm working with someone else's design.) The whole works is a three channel, 1 amp per channel, LED driver with high efficiency, all designed to fit in (while not overheating) a 22mm in diameter cavity inside an aluminum lightsaber body.
I found an old body washer and bored it out to 22mm to make sure it slid snugly over the board.
The board is only about 1/3 loaded: one channel of LED driver and the microcontroller, and one big ol' coilcraft inductor to make sure it fits in the enclosure. It's missing two more drivers and another regulator to provide high efficiency power to the microcontroller. If I get the time I may port the code over to a TI microcontroller that uses 1/1000 the power of this one and costs 1/10 as much.

Lothian Transport are awesome

Thursday, June 22nd, 2017 09:11 pm
andrewducker: (Default)
[personal profile] andrewducker
At 2:06pm on Sunday I posted my feature request for the Lothian Transport app.

At 3:14pm the following afternoon I received an email saying
Sorry, street names and localities should have been added to the search screen before now. I’ve sent an update to the Google Play store just now so you should have an update available in the next few hours.
and about 45 minutes later my phone automatically updated to the latest version and I could see this:

I emailed back saying that this was awesome, but wondering why one of them just said "Edinburgh", and got this in response:
Unfortunately sometimes we can’t control what we get back from Google’s Places API. If Google decides that a place doesn’t need to have more than the town/city listed, then that’s all we get I’m afraid. We also mix in Foursquare and Google Geocoding data where appropriate as well.

It helps to include a bit more in your search, such as ‘Morrisons Granton’ or ‘Morrisons Ferry Road' rather than just ‘Morrisons’. The more you type in, the more accurate the results. It also takes into account your current location – typing in ‘Morrisons’ while you’re near Hyvots Bank will give you results geared towards South/West Edinburgh rather than North/East Edinburgh.

As to your other point (distance to search result) - at the moment, showing distance isn’t possible. We use Google Places to match search queries: that service is great because you can type in anything - ‘Morrisons’, ‘Tesco’, ‘pizza in Leith’ etc. and it comes back with accurate results. However, it doesn’t give the app the location of each place. Instead it gives the app a ‘Place ID’ - once you’ve tapped on a search result, the app sends the Place ID to Google which sends back the exact coordinate of the search result. If that changes in the future, we’ll be sure to include distance as part of the search result.

Which was a fascinating look at how their systems work in the background.

If only more places were so responsive to users taking an interest.

Interesting Links for 22-06-2017

Thursday, June 22nd, 2017 12:00 pm
marahmarie: my initials (MM) (Default)
[personal profile] marahmarie

Seriously, for the love of God, PCWorld has you do so much just to boot into Safe Mode and it's so unbelievably torturous and will so make you want to stab your eyes out with forks (they didn't even have the simple courtesy to turn their many needless steps into a perhaps easier-to-read list, instead pushing you through a gigantic wall of text that barely passes for a normal paragraph) using both hands at once I'm quoting it just for others to share in my sheer horror (emphasis mine, and oh, do I emphasize! [Bracketed step numbering like so] is also mine.):

Step 1: Enter Safe Mode

[in which I've scraped out two paragraphs of useless fluff you can google which has absolutely nothing to do with how to actually boot into Safe Mode]

Sadly, Microsoft has turned the process of booting into safe mode from a relatively easy process in Windows 7 and Windows 8 to one that is decidedly more complicated in Windows 10. [1] To boot into Windows Safe Mode, first click the Start Button in Windows 10 and select the Power button as if you were going to reboot, but don’t click anything. [2] Next hold down the Shift key and click Reboot. [3] When the full-screen menu appears, select Troubleshooting, then Advanced Options, then Startup Settings. [4] On the next window click the Restart button and wait for the next screen to appear [5] (just stick with us here, we know this is long) [ed. note: NO, really?]. [6] Next you will see a menu with numbered startup options; select number 4, which is Safe Mode [ed. note: Finally, yay! Oh, but wait...-->] . [7] Note that if you want to connect to any online scanners you’ll need to select option 5, which is Safe Mode with Networking.

Dear God.

My way, or the highway

Type "safe" into Cortana. Click on the first result; on the next screen hit the Restart Now button. After restarting, click Troubleshoot, then Advanced Options, then Startup Settings; on the next screen hit the Restart now button.

*drops mic forever* (this came in many words under PCWorld's version even once I had to edit shortly after posting for leaving most of the steps out*)

I could make my version even shorter, but it'd just be nitpicking.

Bold is used in my how-to to help the eye track better, so you stay more focused. And if your steps involve a computer re-start at any point, like these ones did? You need to ask your readers to bookmark the instruction page so they can find it again.

The thing is, if you're gearing words toward the computer-learning, don't use lots of words. You need a clear, short, simple, easy-to-follow framework, preferably in list form if it takes more than 2-3 steps. I struggled with just this issue in learning to write how-tos, and still feel some of them should be even shorter/more concise than they are.

Computer users often know what to look up if they don't understand why they're doing something, so simply tell them how and let them figure out "why" in Google or by asking you or others. You can also explain "why" before you start the actual how-to, but somehow separate it from the actual instructions to help minimize confusion.

And if there are multiple ways to do something, show the simplest way possible. Make it look easy; make it seem like fun! Or they'll never want to follow your steps again. Even I got a headache trying to envision how to perform all of PCWorld's steps: knowing the most complicated way to do something is far from knowing the one way that makes you look l33t even if you have no idea what you just did.

And I'm hoping no one says, "But what about people who disable Cortana?" Can't be done, for one thing. Even if people choose to keep Cortana "hidden", there are still easier ways; for instance, the latest version of Win 10 Pro allows you to find Safe Mode by looking in the taskbar tray for All Settings; from there just go to Updates & Security-->Recovery-->Advanced Startup and hit Restart now, then click Troubleshoot-->Advanced Options-->Startup Settings and hit the Restart button. That's it - for real.

*last paragraph also left steps out; now fixed

(no subject)

Wednesday, June 21st, 2017 11:10 am
gfish: (Default)
[personal profile] gfish
I'm reading Wittgenstein's On Certainty, and he mentioned that no one feels surprise when mathematics proves itself consistent. Except I do.

Basically every time I do some mental arithmetic, I do the problem multiple times, coming at it from different directions. For example, maybe I need to find half of 47. I'd immediately take half of 46 and add 0.5, getting 23.5. But then I'd also take half of 50 and subtract 1.5, also getting 23.5.

(Sidenote: I know not everyone does this, as demonstrated by how outraged people are over Common Core. It just makes plain good sense to me. Mathematics shouldn't be the blind application of fixed algorithms -- you need to choose the approach that works best for you. And to do that, you need to see the different options and really understand how they're all the same thing, fundamentally. But most people don't really understand that. They can only solve problems in a single way they memorized 30 years ago. Then they feel dumb when their kid asks for help with their homework, and lash out.)

In part I do this to provide to a checksum on the original answer, but also because I always feel a small thrill of surprise and delight. Math is internally consistent, and every problem has an infinite number of ways you can solve it. It's just so neat -- and also staggeringly impressive. Imagine writing an operating system with no bugs. Imagine being able to design a legal system without any need for judges, because there was a single, obvious, undeniable verdict for any case. Imagine a taxonomy with no edge cases, no "miscellaneous" categories.

Math is quite literally inhuman in its perfection.

Take that, Wittgenstein.

Interesting Links for 21-06-2017

Wednesday, June 21st, 2017 12:00 pm
andrewducker: (Default)
[personal profile] andrewducker

Democratic/left-leaning myopia, ftw

Wednesday, June 21st, 2017 02:32 am
marahmarie: my initials (MM) (Default)
[personal profile] marahmarie

In tonight's "myopia" series, I explain people not being able to see the forest for their own asses taking up the entire view. Another case in point: Us. Let's get our heads out of our asses and stop Republican gerrymandering (witness another House seat we should have easily won; we are screwed right through 2018, should this continue) and stop ogling Trump's supporters.

Y'all have damn short memories. I mean really damn short.

Do any of you all recall what it was like to support Bill Clinton after his first election? Any Bill supporters out there?

OK: *waves*...I was. He won with only 43% of the popular vote and the right insta-hated him. I cannot emphasize this enough: they hated him right out of the gate; he hadn't taken his first post-McDonald's jog around the White House before you could feel it in the air that they wanted him gone. You can quibble with me, but I followed Clinton's every word/move/bill/action/reaction almost as breathlessly as though he was the actual prophet selected to announce Jesus's return.

If y'all want to know why, it's because - and I've said this before - I have a strong weakness for the underdog as long as they - unlike Trump - seem honest, above-board and act well-intended enough (though having my political and social preferences also clearly helps).

Bill was the underdog, so Bill was my president, no ands, ifs, or buts. The only time I *ever* disagreed with him - for like a half a second - was after he signed off on NAFTA, and I'm still pissed about that, so yeah, I rather vehemently disagreed. But walk away? Oh hell, no. Back then I had two obsessions: the New York Knicks winning their championship that year (they got eliminated in the East Finals) and Bill Clinton becoming and staying president, and you'd easily pry either concept from my cold, dead hands before I gave them up without a fight.

Has it ever occurred to people that Trump's supporters simply feel the same way?

As a past True Believer, I can tell you you're not going to win the fight for 2018 or 2020 by winning them back, so quit it. Stop talking about their underemployed, opiate-and-Faux News-laden self-made hells on Earth. Stop interviewing them in their fucking trailers. Stop bemoaning their disappearing lung-cancer-causing mining jobs and stop doing summations of Why They Voted For Him that ignore the second most important part of why they did: mostly because they're racists - or the more well-heeled folks after big tax cuts and the hell with the rest of us - so again, mostly because they're racists.

The most important reason, though? They wanted a leader, and to their minds, they got one. Don't ask why; it's an irrational thing considering Trump is all smoke, mirrors and one too many Twitter rants. While edges of his base will peel away, the core will remain. Don't mess with it, let's just move on.

For success in 2018/2020 we need to stop finger-pointing, we need to stop ogling, we desperately need to redraw Republican-gerrymandered districts, and we need to stop being divisive. Oh, and you think that's just Faux News! Well, that's us, too. A house divided will always fall. Why are we doing this to ourselves?

  • Every time a progressive points at a Democrat and says: "not left-leaning enough" that's not only complete bullshit it's divisive.
  • Every time a Democrat blames something on "the Bernie bros" that's not only also complete bullshit it's divisive.
  • Every time Bernie gets mentioned, it's divisive. I hate to rip a page from Orangado's book here, but folks: Bernie lost; get over it.
  • Every time progressives single out publications for their hate - most recently, they went after The Washington Post for not feeling progressive enough, something I cannot forgive because it's my favorite newspaper - it's divisive.
  • Every time an (obviously) self-proclaimed "antifa" hits the streets to stand in opposition to Trumpsters, it's divisive; also, "antifa" are quite possibly just plain nuts.

If "antisoc" had hit the streets in protest every time Clinton supporters breathed in his direction they might arguably have been locked up (not to mention back then, no one would have dared. My, how times have changed). A really good argument can be made in either direction that Republicans/right-leaners/Trump in particular are fascist scumwads OR that Democrats/left-leaners/Clinton in particular are socialist scumwads. I'm entirely capable of agreeing with both arguments equally.

Did I mention I was so fucking mad about NAFTA I nearly turned Republican myself, and have considered myself "moderate" (with a few admittedly more liberal aspects) ever since? While I was never gonna give up on Bill, the entire Democratic Party could pretty much blow me at that point, and while I've recovered most of my left-leaning equilibrium since then, in some ways it still can. And I refuse to feel bad about this.

So stop being divisive, stop Republican gerrymandering, and quit with all the "why Trump's supporters support him" songs and dances. Because, nope. Really. It's not helping.

Historical myopia, ftw

Wednesday, June 21st, 2017 02:08 am
marahmarie: my initials (MM) (Default)
[personal profile] marahmarie

Forex: the idea that TV cultivates authoritarianism. Then explain 1930s-40s Germany - I don't think TV was that big a deal then - or North Korea: I doubt there's a TV set in many homes nor that its mostly starving population stays glued to it like our Faux News addicts do, many of them yelling at it day in and out (oh, and if this reminds you of a fake office holder, that's because it should: Faux News fosters not just division and acrimony, but successful presidential runs based on everyone - including the fake office holder - feeding off said division and acrimony).

marahmarie: my initials (MM) (Default)
[personal profile] marahmarie

Because his parents refused the autopsy and he's being buried tomorrow morning. While refusal to have an autopsy might be in keeping with the family's Judaism (even if the family hasn't yet publicly raised this as their particular objection) I'm still disgusted that his parents could not make an exception when no one even knows how - or why - their own son died.

Short of that, someone needs to introduce a bill - call it the Otto Warmbier Act - stating that in cases of potential murder (especially by an enemy or rogue state!) the family's wishes are automatically overridden regarding autopsies. Call it outrageous. Call it anti-religion (Muslims raise a similar objection) but let's keep some perspective here: any God who'd reject a spirit over how its body was handled after death isn't a God we should want to spend too much time shooting marbles with, anyhow.

ETA, 6-22-17: In light of my suggestion that a law should be passed preventing families from forbidding an autopsy being performed in certain circumstances (and while I was researching another aspect of this issue, entirely) I ran across an article on Judaism and autopsy which states, with emphasis mine:

In general, Jewish tradition forbids autopsies on the grounds that the body is sacred and should not be violated after death. However, autopsies are permitted in two specific cases:

  1. When the physician claims that it could provide new knowledge that would help cure others suffering from the same disease;
  2. When the law of the land requires it.

The normal stricture against autopsy would be overridden by the requirement to follow "the law of the land" so Warmbier's parents - if the law was in effect today - would be incapable of violating it without violating their own religious tenets.

Another article states autopsy is not forbidden if performing one prevents a possible "plague"; as I pointed out in comments, "botulism" counts, and since that's what North Korea claims put their son in a coma, the parents have little reason to forbid an autopsy, since no medical determination concerning botulism was made stateside before his death.

And though I'm having a hard time finding a more definitive-sounding source, this website on Islamic rulings doesn't rule out autopsy to determine the cause of death when a "crime" is suspected, so in their case, the law might not be needed.

Poems Of The Week

Monday, June 19th, 2017 11:51 pm
jazzy_dave: (jazzy drinker)
[personal profile] jazzy_dave
A couple of poems from the Beats

Hay For The Horses

Poem by Gary Snyder

He had driven half the night
From far down San Joaquin
Through Mariposa, up the
Dangerous Mountain roads,
And pulled in at eight a.m.
With his big truckload of hay
behind the barn.
With winch and ropes and hooks
We stacked the bales up clean
To splintery redwood rafters
High in the dark, flecks of alfalfa
Whirling through shingle-cracks of light,
Itch of haydust in the
sweaty shirt and shoes.
At lunchtime under Black oak
Out in the hot corral,
---The old mare nosing lunchpails,
Grasshoppers crackling in the weeds---
"I'm sixty-eight" he said,
"I first bucked hay when I was seventeen.
I thought, that day I started,
I sure would hate to do this all my life.
And dammit, that's just what
I've gone and done."

How To Meditate

Poem by Jack Kerouac

-lights out-
fall, hands a-clasped, into instantaneous
ecstasy like a shot of heroin or morphine,
the gland inside of my brain discharging
the good glad fluid (Holy Fluid) as
i hap-down and hold all my body parts
down to a deadstop trance-Healing
all my sicknesses-erasing all-not
even the shred of a 'I-hope-you' or a
Loony Balloon left in it, but the mind
blank, serene, thoughtless. When a thought
comes a-springing from afar with its held-
forth figure of image, you spoof it out,
you spuff it off, you fake it, and
it fades, and thought never comes-and
with joy you realize for the first time
'thinking's just like not thinking-
So I don't have to think

[syndicated profile] ash_feed

Quite a few years (and a couple of re-orgs) ago on the Zero State mailing list we were kicking around the idea of building an unhosted social network to keep in touch, which is to say, a socnet that was implemented only as a single file, with all of the JavaScript and CSS embedded at the end.  Some of the ideas included using a distributed hash table so each instance could find the others, as many crazy but feasible ways as possible to bootstrap a new member of the network into the DHT, and using using the browser's built-in local storage database to hold all of the information.  A lot of this stuff already exists, from the local storage functionality (which has been there, albeit silently, in every modern browser for years) to the DHT in JavaScript so I think that a fair amount of it would consist of tinker-toying it together.  However, and I must confess, the front-end stuff is well beyond me.  Not from lack of trying, mind you: The HTML5 and JavaScript classes I've taken over the years were largely toward the goal of making this happen.  However... I suck.  Web apps are not my thing, unfortunately.

Additionally, this was before I'd ever done any serious information architecture and communications stuff, so you will undoubtedly cringe upon reading some of my assumptions and JSON sketches.  Additionally, this was before I discovered PouchDB (which is basically CouchDB in the browser) so a few of my ideas really wouldn't wash today.  So, please consider these notes somewhat naive toward the goal of building the application.  Please don't facepalm too hard, you'll give yourself a concussion.  Maybe somebody will find them useful in their own work.

Eveyrbody saves a copy of the HTML page (with everything it needs to operate included in the file) and accesses it with a web browser.  Updates can come from downloading a new version from the Zero State website or Github.  Kind of like Tiddlywiki.

CouchDB is a distributed NoSQL database which stores JSON documents rather than information in rows and columns in tables.

Documents are managed with MVCC (Multi-Version Concurrency Control), and the network is designed for eventual consistency.

Automatic conflict resolution.

CouchDB nodes can connect to one another to replicate data very easily.

Designed to operate offline - do what you want with your local copy of the data, and when you reconnect it'll automatically resynch with the rest of the CouchDB network you set up.

Designed for ad-hoc connections - whatever connection it has, when it has it, it can use it to connect to the network.

Lightweight - the proof of concept Twitter-like app (Toast) supported thousands of transactions per second while running on an older Macbook Air.

Accessed in the fashion of a hash table, i.e. with key/value references.

Queries are done with JavaScript.

The API is bog-standard HTTP(S).

Can be interacted with using wget, curl, or a web browser.

Runs on everything from Windows to Android.

Because it includes its own HTTP(S) server, it is capable of hosting apps within the database itself, so you don't need an external framework (like PHP, Rails, or Django).

Apps are written in HTML5 and JavaScript, stored as documents in the database.

Apps are trivial to deploy.

Book is online, free to download and read, can be found on Github also:

We can conceivably use CouchDB to implement Network25 (and whatever other information storage solutions we will eventually want to use).

Installation can be a single installer for every platform - download this, double click on it, when it's ready it'll tell you.

Every document can have its own schema, which is simple to determine because it works just like a hash table (key/value).

Public profile document (gets replicated):

{ _id: "Bryce A. Lynch", _interests: ["long walks on the beach", "moonlit nights", "distributed systems"], _friends: ["friend", "friend", ...], _publickey: "<public key>", ... }

Private profile document (doesn't get replicated, stored on machine, optionally encrypted and must be unlocked with a passphrase when the Network25 app is started):

{ _id: "Bryce A. Lynch", _publickey: "<public key", _privatekey: "<you no can haz>", ... }

Dump the list of keys and sort through their associated values one at a time.

Because there is no central server - every client is also a server - this also means that we could, in theory, protect arbitrary volumes of data in a given Network25 user's account with public key crypto.

For every user of Network25, there is a document containing the public keys of that user's friends.
Documents can be encrypted to the public keys of only a subset of that user's friends, such that only their private keys can (automatically) decrypt them:

{ _id: "<SHA256 hash here>", _post: "<cyphertext here>", _encrypted: "yes", _authorized_accounts: ["<somebody>", "<somebody>", "<somebody>", "<somebody>", ...], }

problem: addressing

Practically everybody is behind at least one NATting firewall these days.

IP addresses are dynamic, so you can't count on a buddy being reachable at the same IP for very long.

Having the Network25 app post its current IP address somewhere (a field on a blog, to a mailing list, Tweet) or get a dynamic DNS hostname every time isn't really workable.  In fact, it outs the user in obvious ways, and not everyone is okay with that.

Pnother problem: Port forwarding.  There are some solutions to this, but not all of them work well, work at all, or are suitable.  Multiple layers of NAT make this solution suck.

Solution used by TorChat, which would probably work for us: Tor hidden service addresses

TorChat creates a unique hidden service address for you when you set it up.  when you add people to your buddy list, it stores <public key>.onion in the list, and it's up to you to set an alias ("qwertyuiopasdfgh.onion" == "Bryce A. Lynch") on it.

Network25 should be able to do the same thing.

The Zero State is talking about using Tor for general communications in the future, anyway, this would be a perfect time to start.

When the Network25 socnet software starts up, it looks to see if Tor is running, if it has any hidden services configured, and if any of those services correspond to a unique port that Network25 uses.

Shell/batch scripts FTW.

If not found, it tells the Tor daemon to create a hidden service descriptor, copies the public key/.onion hostname into the user's Network25 profile, and announces it to that person's friends so they know where to find them and can start synching databases.

The name of the hidden service is then added to a field in your profile document, so when people friend you on the network they know how to reach you:

{ _id: "Bryce A. Lynch", _interests: ["long walks on the beach", "moonlit nights", "massively distributed systems", "tor", "writing stuff about CouchApps in Tomboy"], _friends: ["friend", "friend", ...], _publickey: "<public key>", _toraddress: "qwertyuiopasdfgh.onion", ... }

This means that CouchDB (configured to use Tor rather than IP address/ports combos) knows how to reach your copy of the socnet software and sync its copies of users' databases (profile, timeline, forums/communities/mailing lists/distribution lists/news feeds).

This also helps authenticate users, in the same way that hidden services are authenticated (there is a corresponding private key which is never shared by Tor).  if the public key (.onion) and private key (on your box) don't match, then the service isn't trusted.

Because database creation in CouchDB is cheap, there is no reason why there can't be multiple databases in every user's profile

  • user profile
  • shared public forum (anologous to the Doctrine Zero mailing list)
  • specific forums (public or not) (anologous to zs-p2p, zs-arg mailing lists)
  • personal blog
  • blogs specific to the projects the user is working on (which themselves can have multiple people posting to them, because they're distributed)
  • private blogs/chat forums for specific people
  • blog/news feed/private messages from everyone the user has friended in Network25
    • database: amon_zero_public_feed
    • database: amon_zero_private_messages
    • database: amon_zero_philosophical_pontification
    • database: bryce_a_lynch_public_feed
    • database: bryce_a_lynch_project_byzantium
    • database: bryce_a_lynch_3d_printing
    • database: bryce_a_lynch_private_messages
    • database: zs_med_discussion
    • database: zs_game_plot

Restricted databases are only replicated by members that are part of that project or group.

A list of authorized users and their corresponding public keys are part of the database for every forum.

A majority of people in a private forum have to vote to include that person?

All messages are encrypted to the public keys of everyone authorized to participate in that form/replicate that database.

Private databases are only replicated by people they're shared with, i.e., a personal chat feed for one other person is only in two places in the Network25 socnet, your machine and theirs.

Consider making private databases purgeable, i.e., either or both people can have their copy of the socnet software dump the database so that there is no record of the discussion on either side.

This is where PKE or OTR would come into play - even if the database were recovered somehow, it should be difficult for the attacker to figure out what the cyphertext is.

I don't know how easy, or how safe implementing crypto at the level of a CouchApp is.

All of us are going to have running copies of the Tor Browser Bundle, and all of us are going to have copies of the CouchDB stack and Network25 app, so it would be possible to use a plugin for the TBB which implements the encryption/decryption/acquisition of a buddy's public key/addition of key to the user's profile database.

How much disk space will this take up?  I don't know yet.

Encryption/decryption of data before it enters/leaves the CouchApp?  Good question.  I don't have enough experience yet with CouchApps to say, but would love to talk to someone who does.

Couchdb listens on by default.  Configure Tor to expose port 5984/tcp on <foo>.onion.  Voila.

Creating new databases (even remotely) is as simple as making an HTTP request to localhost:5984 consisting of

PUT http://localhost:5984/<database>

Then documents can start being added to it.

The array "acl" has a couple of default values.  An an entry "all" mean that anyone can read and replicate it.  "private" means that only the author is allowed to access it; an empty entry means the same thing.


Every post and comment is stored as a separate document with the same schema.  The key "acl" is an array of usernames that are allowed to see the post.  By extension, this is also the list of nodes that are allowed to replicate this document.  The field "post" is an integer that increments with every blog post one makes.  This field is used to tie together a post and all comments that are tied to it.  The key "type" is the type of document, either "post" (a blog post) or "comment" (a comment on a blog post).

blog schema:

{ _id: "autogenerated", _rev: "autogenerated, too", acl: ["all", ], author: "me", content: "Contents of my blog post", post: 0, title: "Frist psot!", type: "post", }

Every bookmark one stores is kept as a separate document in a database.  All have the same schema.  The "acl" key works as defined earlier.  Eventually, I'd like to make a JavaScript bookmarklet that makes it much easier to store a bookmark in this database.  I'm not sure if bookmarks are going to be private only (i.e., personal) or what.

bookmarks schema:

{ { title: "", url: "", description: "", tags: ["", ], categories: ["", ], acl: ["all", ], date_added: ["YYYY/MM/DD", "HH:MM", "TZ"], date_modified: ["YYYY/MM/DD", "HH:MM", "TZ"], }, }

One possible Network25 document schema:

date_generated: "2012/12/04 00:00:00 ZST", user_profile { chosen_name: "bryce lynch", email_addresses: ["", "my.official.addr@zero.state"], websites: ["", ""], instant_messanger: [{ network: "Gchat", protocol: "XMPP", handle: "" }, { network: "Network25", protocol: "Toast", handle: "Bryce A. Lynch" }, { network: "zero.state", protocol: "XMPP", handle: "bryce.lynch@zero.state" } ], public_keys: ["PGP public key here", "another PGP public key here"], tor_addresses: ["something.onion", "something_else.onion"], aliases: ["Bryce", "The Doctor"], gender: "Androgynous", identification: "Organic sapient with semiautonomous software augmentations", location: "I am everywhere", interests: ["information security", "memetics", "programming", "python", "mesh networks", "tabletop RPGs", "Eclipse Phase"]; skillset: ["system administration", "network design", "system architecture", "penetration testing", "security research", ], projects: [{ name: "Network 25", position: "hacker" }, { name: "Zero State Hollywood Movie", position: "Consultant" }, { name: "ZS-Media", position: "Manager" }, { name: "ZS-p2p", position: "Consultant" } ], affiliations: ["HacDC", "Project Byzantium", "The Zero State", "Telecomix", "The Bavarian Illuminati"], friends: [{ name: "Amon Zero", local_name: "Amon", tor_addresses: ["something.onion", ], cached_profile_info: { local copy of user profile }, cached_profile_last_updated: "datestamp here", }, ], }

PouchDB is an extremely tiny implementation of much of the CouchDB API written in JavaScript and is designed to be embedded in web apps.  When you access CouchDB apps that use PouchDB, PouchDB transparently proxies requests and caches output from the Couch database.  Here's the nifty bit: If you go offline - your cellular reception tanks or you have to disconnect from the local wireless net, you can continue to interact with the web app in question as long as it's in your browser's cache because it has a snapshot of all of the relevant data inside of it.  When you go back online, PouchDB synchs up with the CouchDB instance elsewhere...

Try a federated model - hosts replicate to hosts which replicate to yet other hosts.

A number of hosts can be lost without damaging the entire network overmuch.  Every node that somebody posts from keeps a copy of its posts as well as any content that it's accessed so when new nodes appear they can get them up to speed in a fairly short time.

What's the upper limit on browser local storage?  We're going to max it out at some point.

Any network connection can be used - any port in a storm, you know?

Livejournal-like profile pages, with skillsets and interests and whatnot?

Personal blogs in addition to discussion forums and private messaging?

Status and reputation network?  Quantified prestige?

Direct messaging (person to person) encrypted with public key encryption for privacy.

Elliptic curve cryptography for both identification and encryption because it's much faster and easier to generate keys on limited processing power (like mobile devices, which have limited power)?

All network traffic is opportunistically encrypted by default.

Everything is encrypted to the user's public key before it hits persistent storage.

PGP-like web of trust which maintains not only buddy lists in the app but also defines which nodes to contact first for network updates?

Is as persistent as possible when advertising its location to make hooking into the network easier?  Every instance posts its contact info (network addressing information) to many different places to make it easy to find and dodge censorship.  Posts to Twitter, Tumblr, Pastebin, pads, vanishing message sites, SMS to friends, blog posts, network hubs like, XMPP chat rooms and account statuses on public servers, the global BitTorrent DHT, personal e-mails, whatever else to get its current network address out there for as many others in the network to find?  As difficult to cut off from the rest of the network as is possible.  Friends in the buddy list have personal lists of Internet resources they prefer to use to find their friends in the network.

Flood the local network looking for other instances?  BonjourLink-local XMPP chat?

Make use of the .well-known directories on websites somehow?

Write a plugin that users XMPP servers to circulate content?

Synchronize with local servers to back themselves up?  Say I have a server at home running a document database.  When I get home and access my local wireless, the Network25 app contacts the database server and dumps its contents to back itself up.  Conversely, new Network25 nodes can contact a database server (with permission) and bootstrap themselves by downloading all of the latest stuff to get themselves up to speed.

Book review: Darwin

Monday, June 19th, 2017 09:31 am
gfish: (Default)
[personal profile] gfish
Some scattered thoughts on Origin of Species and Descent of Man, which I listened and read over the last month.

I knew the basic story that Darwin, upon hearing that Wallace was about to publish something very similar, rushed Origin of Species into publications after sitting on it for years. Given that, I was surprised how openly this was acknowledged in the book itself, and how often and generously he credited Wallace's observations. It was still a bit hinky, using his famous naturalist connections to beat Wallace to publication, but it made me feel a lot more kindly towards him.

One thing that surprised me was the explicit uses of Lamarckian mechanisms. The common story puts Darwin as rejecting all that, but in fact he very frequently included it in lists of inherited traits upon which natural selection would work.

Darwin's understanding of inheritance is, of course, quite terrible. It makes me even more surprised that his ideas caught on at all at the time. There is no hint of thinking of genetics in a quantized manner (except, of course, for sex), which would fatally wound Darwinism from the very beginning. Analog traits just couldn't spread in the way needed. But I suppose the general lack of real genetic understanding prevented that flaw from being properly understood as well?

It's interesting to note that Mendel was publishing in the 1860s, but it was basically ignored by the scientific world, and Darwin never even became aware of it. It's not hard to imagine that evolutionary biology and genetics would have been fully accepted decades earlier if that synthesis had been made. And there was absolutely no good reason it didn't happen, just poor communication. Remember that whenever someone starts talking about "steam engine time" or similarly naive theories of history!

I thought it was fairly charming how Darwin often phrased sexual selection in terms of the appreciation of beauty. As in, at what level of development are animals advanced enough to appreciate beauty, and thus self-select for ornamentation?

Overall, I thought the first held up quite well. If you ignore everything it says about inheritance, it seemed decent as an intro to the concept of evolution. Descent of Man was a bit rockier, involving a lot of very uncomfortable "maybe humans are actually multiple species?" speculation. For his time, though, he still came across as a decent, humane guy. Someone I'd like to hang out with. And that's not an impression I often take away when reading the works of important scientists!