• Chinese Three-Novel Problem

    I just finished one of my Christmas gifts, the Chinese sci-fi novel The Three-Body Problem, by Liu Cixin and translated by Ken Liu. It’s basically a “firstĀ  contact” thriller, with an enemy alien invasion looming, a secret society helping the invaders, and the governments of the world secretly planning together for war against both the aliens and the secret society, all set against the backdrop of the Cultural Revolution and its aftermath.

    The novel suffers from both stilted dialogue and “stilted” plot turns; some of these may be the effects of translation, or even just its essential Chinese-ness, but it’s also true that the author and translator are both in the “hard sci-fi” camp, which is not known for its Literature-With-A-Capital-L virtues. Anyway, the ideas are big and the action moves at a page-turning pace — it’s definitely a good read.

    My biggest problem with this book is that it’s the first of a trilogy, and now I have to read the others to find out how it all ends.


  • Administrative Editorializing

    “I woke the President to tell him we were under attack by the Russians!

    Do you know how stupid that makes me look?!!”

    War Games

    I moderate comments here: if you’ve never had a comment approved, all your comments go into a holding tank until I either approve or trash them, though once your first comment has been approved your subsequent comments are all automatically approved. It usually doesn’t matter much, since I don’t get many legitimate comments and have only one commenter, but that’s the way I like it because it blocks comment spam.

    The other thing about comments is that I get an email every time one is posted. This is on my “extra” email account, which doesn’t get much use, especially after I unsubscribed from a mailing list I was on. Then this afternoon my phone dinged a few times, and when I looked I had 22 messages, all from this site and saying I had comments in moderation…

    My site hadn’t gone viral, it was all just robo-spam: gibberish with a couple of websites thrown in, that kind of thing. I dealt with that set of comments by trashing them, and then a few hours later I got more, which I also dealt with. I noticed, though, that despite different names and email addresses, they were all coming from two internet addresses. I blacklisted those addresses, so now the comments go straight to trash, and I don’t get email notifications.

    I just checked the comment trash here, and it had a ton of spam comments. I guess I’ll have to check and empty the trash every so often until this entity gets tired of sending them, but as far as I’m concerned it’s problem solved.

    By the way, the offending internet addresses are assigned to a Russian ISP.

    UPDATE: The spam continued for about 12 more hours then stopped.


  • That Was Easy

    Lately I’ve been getting rid of the books I no longer want, by sticking them in a nearby Little Free Library, butĀ  the truth is that I no longer want them because I’m tired of re-re-reading them, and I really need some new books. Christmas is coming, so I updated my Amazon Wish List, and our recent Philly visit for Ben’s birthday included a bit of “one for you and one for me” Christmas shopping at Penn Books. In each situation I looked through the books I’d be likely to enjoy, and one in particular kept coming up: Ready Player One by Ernest Cline, but I decided against getting it in both cases.

    Yesterday found me walking past the Little Free Library, and I took a look inside to see how my books were doing — most had been taken, though a few were surprisingly still there — and what do I see but a copy of Ready Player One? So, on the way back from my walk I stopped again at the library, and, in a first for me, I took the book home.

    Bottom line: I think I’ll push myself and finish it, but I am really glad I didn’t pay money for this book, or talk a friend or relative into buying it for me. The protagonist is annoying and unlikeable (this may be on purpose though, since he’s a maladjusted 13-year-old at the start of the story), the premise is hackneyed, and — this is a pet peeve of mine — the cultural references are basically our own recent past because, while the story occurs about 50 years into the future, the people there are conveniently obsessed with 80’s electronics, video games, and pop trivia. Lazy…

    When I’m done with it — and this might not mean actually getting to the end, just to the point where I get sick of reading it — this book is going straight back to the free library.


  • Chill

    I busted out the “to-do list” thing again, mainly just writing my lists into a text file and checking off the items as I go. That gets me through the more energetic part of the day — one morning I cleaned the bathroom and the brewing equipment, another day I did the bills and similar, and today I did a bit of overdue yardwork before lunch — leaving me a more guilt-free evening for computer play. (We’ve been running and lifting when we get up, so that’s already covered.)

    Anyway, today’s chore was yardwork: there were a bunch of wildflowers — weeds, really — in the front yard that needed to be cut down. I went out to deal with them, and it was freezing out. Two minutes into the job and it’s blowing a hard bitter bluster, and another five minutes brought snow, which started as flurries but soon looked like a real snowstorm coming down, or rather sideways, in all that wind. Cutting the wildflowers was barely a half-hour’s work, and I much prefer cooler weather for outdoor work, but this was brutal, and as soon as I was done the snow stopped.

    The rest of the day was spent indoors, guilt-free.

     


  • Winterizing

    I got in a towpath ride this afternoon, and one on Friday as well. Both of them were short versions — now that the day ends earlier, I really have to get myself out earlier in the day — and both of them involved at least a little bit of snow. I felt pretty good on each, not too cold except my face at the very start. It really feels like winter is here, and I think I’m ready.


  • That Fit Feeling

    We did a run this morning and some errands later, so there was no bike ride for me today — maybe tomorrow, when the weather will be better, if a bit colder than today. Meantime, we hit the weights yesterday, including squats…

    I woke up this morning sore, mostly my biceps and upper back: recovery, prostaglandins, the usual fallout I guess. I also have been finding myself needing a bit more sleep in general lately — I’ve also been a bit of a night owl recently though, and that may be why mornings are drifting later, but I suspect that it’s my typical reaction to heavier exercise: I need a lot more sleep.

    By the way, WXPN is playing their entire song library, from A to Z. They’re deep into the L’s right now, and I’m jamming out to Gary Wright’s “Love is Alive,” super loud — the truth is, I’ve had it cranked since “Louie Louie.” My soul’s like a wheel that’s turning…

    Now they’re playing “Love Is All Around” by the Troggs.


  • An Old Standard

    Here’s a little something about last Sunday’s ride:

     

    Me, Renee, Scott, and a few friends of Renee from the Poconos, good people and a good ride. We followed a pretty old-school route, except a few choices just towards the last singletrack. One take-away: dropping the seat while riding through the rock gardens made all the difference.

    I’ve been doing yoga, running, and lifting this week, but that was the last time I rode. It’s been cold and wet, but tomorrow may be nice.


  • A Cone At Home

    I had a problem to solve at work last year, basically to make a cone out of bent tubes, to form a cone-shaped “throat opening” in a wall made of vertical tubes. The task needed a bit of iterative trial-and-error to solve for each tube, which quickly becomes tedious when there are maybe a dozen tubes that have to be looked at — half a day’s work — for any given throat configuration, and there were a bunch of configurations we wanted to explore.

    You can read about it here, but after that first day of tedium I decided to see if I could automate the process. I wrote a short C program, including set of vector functions and a root-finding function (using the Bisection Algorithm, which is supposedly slow but fast enough for my purpose — more important to me was that it’s pretty robust, and guaranteed to work in my situation), to find the necessary workpoints and design requirements for an individual tube in the cone. I then wrote another program to generate the input data for each individual tube, based on the tube, wall and cone parameters. I could give the “cone_maker” program the tube OD, bend radius and minimum allowed straight between bends (tube parameters), the number of tubes and tube spacing on the wall (wall parameters), and the cone inner and outer diameter (cone parameters), and pipe the results through my original “throat tube calculator” program, to get the data I needed. The programming took about two days, maybe a total of four actual hours of programming time, and it ran — flawlessly — in seconds.

    Unfortunately, to use the program I had to go through a whole rigmarole, running it on my SDF free shell account and accessing it on my phone via ssh, since we had no real resources for running or compiling programs at work. The process was faster, but still very tedious — you try typing dozens of numbers into and reading the results off a tiny phone screen — but it got the job done.

    The program did what it needed to, and it looked like I wouldn’t ever need to use it anymore, but I started thinking about program improvements to make the tube design process easier. You can read about these changes here, but what I decided to do was add new output options to the throat tube bend calculator: one option that produces AutoCAD commands to draw the “skeleton” of the tubes, and another to create a lisp file (AutoCAD uses lisp as its scripting language) to make a 3D model of the cone tubes. This took more work than it needed to because checking the results had to be done at work, while coding had to be done at home, but within days I had the program output running smoothly. I then armored the programs and turned them into a CGI script, and made a web page to access it.

    Tubes
    Throat Calculator Outputs in AutoCAD

    Here’s the calculator web page, and the results can be seen to the left. I had absolutely no use for the calculator anymore, but it sure was fun to play with.

    Fast forward to now, and I thought it would be fun to play with again — unfortunately, I don’t have AutoCAD at home, and am not likely to get it anytime soon, but I do have a program called FreeCAD. Now FreeCAD does not use the same things AutoCAD does, but it does have a built-in scripting language: Python.

    Python has been on my radar for a while, and with my recent QGIS forays (QGIS also uses Python as a scripting language) I’ve been motivated to learn a bit more about it. Then I happened to see my version of FreeCAD get auto-updated the other day, and thought it would be nice to play with, and maybe pick up on some Python on the way….

    bent tubes
    Python-generated quadrant of the cone.

    So I rewrote my cone maker & tube calculator programs in Python script. Much (but not all) of the vector stuff is available in a library, and so are root-finding algorithms — just for laughs I used Brent’s Algorithm, a faster version of Bisection — and Python code is naturally more compact-looking than C, so the final program looked really nice, and much shorter than my original C programs. In terms of running, there seemed to be a lag at first (probably importing all the libraries I called for), but the output just about spit itself out.

    Once I got the program to produce correct numerical output, I moved it into FreeCAD and started figuring out how to create the tubes. This took a bit of research, and a bit of trial and error, but the whole learning process took less than a day and then it was running beautifully — you can see the results to the right, and the full throat below.

    cone made of tubes
    An isometric view of the full cone.

  • Scenes From The Urban Jungle

    I caught a bit of nature drama in the front yard earlier today: I walked out onto the front porch just in time to see a huge bird rocket by into the neighbor’s bushes. Out of the bush shot a little gray bird — across the street, into and through another bush, chirping as it flew, with a hawk in hot pursuit. The hawk basically got stuck or slowed down in the second bush and the little bird got away, and the hawk flew to a tree branch and landed, looking pissed.

    Meanwhile, a yellow cat was slinking along the neighbor’s house, like it was creeping up on the birds, until it got a good look at that hawk and just froze, and stayed that way — “don’t eat me I’m a statue!” — until the hawk flew off, then made itself scarce pronto. (There was a whole lot of commotion heard, but not seen, among the crows as well.)

    I’m pretty sure that that hawk is a regular, or some group of hawks are regulars in our neighborhood, since I saw one in the persimmon tree in the backyard about two weeks ago, and it stands to reason: there are purposely a whole lot of native plants nearby, and water, which attracts the native herbivores (not to mention all the squirrels our neighbor feeds), so the next step up the food chain is a pretty logical one. We’ve heard owls recently too, over near First Avenue after dark, which is where we see a lot of skunks — I’m pretty sure owls are among the few things that hunt skunks — and I haven’t seen any but there’s rumors of coyotes and bobcats down by the river, which is why the beavers, who made a comeback a few years ago, have become rare again.

    It’s a jungle out there.


  • Learning QGIS

    So what else have I been up to lately? I decided to look a bit more closely at QGIS, the open-source GIS program, and so I found a group of online courses on using it. They’re free, and you kind of get what you pay for here, but they’ve been an eye-opener into QGIS and its capabilities — it’s a much more powerful program than I realized, and with the ability to run R, GRASS and Python scripts, as well as automating tasks (and linking them together like unix pipelines), it’s got almost limitless expandability. I’m working through the third course (of five) right now, and when I’m done with these I may start looking into possibly going further.