Most recent posts

404 reporting

404 report

Scripted hacks

One of the widget plug-ins I use in this blog is one that gathers the URLs people use to access content here and that result in a 404 Not Found error. Those erroneous URLs get logged and, as admin, I can view them through the widget’s UI. The widget was written by an old mate, Scott Cate, for the GriffitiCMS blog engine (sorry, “CMS” engine), which is what I use here. He gave me the code a couple of years back and I’ve extended it a little to be able to clear the logs of the 404 errors. I do this perhaps once a week on average, because it just gets too depressing.

Here’s the latest report from the past week or so. As you can surmise, knowing that this blog is not WordPress, the 404 report is full of script kiddies trying their best to ferret out WordPress hackable security holes, by searching for the wp-admin folder among others. Either that or some PHP defect or other, which probably amounts to the same thing. (Aside: the first number in each line is the number of times the URL was accessed, the second is the numbers of distinct referral URLs. In this report, it so happens the referrals are other “not found” URLs.)

All I’ve got to say is: if you are running a WordPress site, just make sure it’s always patched, plug-ins and all. Your site is also being probed like mine and if there’s a flaw, it will be found with these automated scripts.

As I said, depressing.

Album cover for MetamorphosesNow playing:
Jarre, Jean Michel - C'est la vie
(from Metamorphoses)

404 report-banner

Updating to Macbook Air to macOS Sierra

Despite being, essentially, a Windows developer, I do own a Mac, specifically a mid-2013 MacBook Air. I use it … occasionally, let us say, mostly for iOS development. One day, there may be more to it, but that relaxed rationale is about it for now. Anyway, Apple just released macOS Sierra , the latest operating system for Macs (they’ve moved from the OS X name to macOS to match their taxonomy for iOS and watchOS). For my own purposes I wanted to quickly note how I did it, since every time I try this...


Making a stack persistent or immutable

A while ago I wrote a book on algorithms and data structures, in my case for Delphi. It’s still on sale , but regrettably somewhat out of date, given the changes to the language in the last 15 years (I’m thinking of the new support for generics in particular). While on my vacation over the last couple of weeks I started thinking about writing a new series of blog posts on data structures, and what easier than updating the book into a new generics-capable one? There was one drawback: I haven’t done...


Free open source comes with a cost

In my blog post “ Thoughts on open source ” I ended cryptically with But be aware that just because they’re “free” doesn’t mean that the cost to use them is zero. Let me expand a little on this with especial regard to JavaScript libraries. What exactly is a cost associated with an open source library? When is it not free? I’ll compare this with buying a library from a component vendor, such as DevExpress , the company I work for. For a kick-off, an open source library certainly does seem to be free...


My CST-01 lasted just over a year

Back in June 2015, I got my (replacement) CST-01, “the world’s thinnest watch”. I wrote about it at the time , mainly because of the stupendous crash-and-burn that the Kickstarter for it turned out to be. The watch is a lovely thing, to be sure. Well, I am sorry to report that, this weekend, after just 14 months of ownership, recharging every five to six weeks or so, the battery has now completely died. The watch only works if it’s plugged into the power charger. Unplug it, and the watch just shows...


Thoughts on open source

Waaaay back when (yes, it was eight years ago, an eternity in software development), I wrote a post on my old blog about using “ Code from the Internet ”. In those days, for me and my readers that meant finding some C# code from some blog post somewhere out there written by some Joe Blow and using it in your own app. These days however, if you’re doing any kind of web development, you’re going to be pretty well using a whole bunch of code from the internet, and in general from that internet outpost...


New theme for old blog

A while back, well after I’d purchased the current theme for this blog , I ran across another great responsive theme on someone else’s blog (unfortunately I never made a note of whose it was, so can’t credit them). The theme is called Selfy and I’d have to say it’s pretty clean and simple. So I bought it in order that I could change the admittedly awful self-designed theme on my old blog. I’m no designer is all I will say. OK, fine, the old theme was rank, and I don’t want to talk about it. Really...


Median stack mode: getting rid of people

Before we went away last week to Belgium, I was reading about a technique for removing people from your photos using Photoshop . I think I’d heard or read about it before way back when but had never really investigated the technique properly. This time though, I delved in deeper to see if I could do it myself. I suppose it was prompted by this short video that takes the technique to an extreme (notice how the shots with just the protagonist and no crowds are stationary/static so the technique can...


Calculating the date of Easter for a particular year

A long time ago, in a galaxy far, far away – OK, it was in London in 1993 – I added a DateEaster function to my personal Dates unit, written in Borland Pascal 7. So: 16-bit DOS for all you oldies. For a bit of fun, I shall present it here with some commentary. At the time I was really proud of this unit: the majority of it was written in assembly for speed reasons (it was used in a swaps trading app I was writing) and it could calculate things like days between two dates (including on a 360-day basis...


Using Node to run JavaScript from Sublime Text

A quick one, more for my benefit next time I have to set this up in the future. Sometimes, I’m writing some JavaScript that can be divorced from a web page. Maybe it’s a weird bit of code, maybe I’m experimenting with (say) functional programming, maybe it’s just a small self-contained function, but I’d really like to test it right there and then, rather than copy/paste it and use the developer tools in my browser. For Sublime Text, we can set up a “ build system ” to do this. First install node...