Two Spaces After the Period, or One?

Two Spaces After the Period, or One?

I keep running into this debate on the internet, so here are my two cents on the subject.  To preface this, I’m an editor myself, and have been running the web site at SCIFI.radio for twelve years and have written or edited about three million words or so just on that one site alone.

So here it is:

If you are writing in a word processor, or on Facebook, and you don’t add that extra space, you’ll get auto-kerned to 1.5 spaces after the period.

If you do add that extra space, it’ll delete the extra space and auto-kern it back to 1.5 spaces after the period.

If, however, you are working in a fixed pitch font — as you would if you were working on a typewriter, or writing programming code in a code editor — suddenly that extra space becomes important for legibility. It is important to remember that while two spaces were important for the typewriter era, there are still applications where it matters, and the more writing you do the more likely you are to encounter them.

The obvious answer is, always add two spaces after the period. Depending on where you’re typing, it will always come out correctly if you do that. In particular, your fixed pitch text will always be properly legible (not to say that using a single space after a period will make it illegible, but legibility will be enhanced if you use two, which was the original reason for using two in the first place).

Both the Chicago Manual of Style and the Associated Press Stylebook say to use one space, but this is because kerned fonts are the rule now, rather than the exception. Nearly all presentation formats now auto-kern it to 1.5 spaces after the period regardless, and of course their rationale does not take into account writing text for fixed font environments.

Editors who claim they have to hand edit manuscripts to change them to conform to either two space after the period or one space after the period are lying to you, by the way. There’s this thing called “global search and replace”. It only takes a moment, and the computer does the rest.  If you encounter an editor who makes a fuss about this, pull your manuscript from their hands and run away.  Who knows what else they’re lying to you about?

By the way, web sites that tell you that Microsoft Word treats the double-space as an error are lying as well.  I’ve tested this myself, and it’s untrue.

-30-

Two Spaces After the Period, or One?

Why is WordPress Showing the Number 3 After the Menu Items?

It’s that horrible “Three Bug” in WordPress menu systems. Most people are just unprepared for something so simple in normal daily use as a WordPress site admin to break in such a bizarre way.  It turns out that this bug in WordPress is easily solved. I’m not sure exactly what causes it, but I do know what makes it go away, and it’s simple:

Your theme is trying to use a font that hasn’t been loaded yet.

To fix this, you’ll have to identify what font it is, then add a preload statement to your site’s header.  In my case, I use Divi, so here’s what mine looks like:

<!-- Preloading font to fix menu icon flashing 3 -->
<link rel="preload" href="/wp-content/themes/Divi/core/admin/fonts/modules.ttf" as="font" type="font/ttf" crossorigin="anonymous">
<!-- Preloading font to fix menu icon flashing - end -->

You’ll have to have a theme that allows for special code to be inserted into your page header. The Divi theme does this natively, but for other themes you may have to add a header/footer insertion plugin.

I did the above fix, and SHAZAM! Problem solved.

-30-

Two Spaces After the Period, or One?

Statements About Questions Are Not Questions

Here’s a pet peeve of mine: the use of a question mark when you are actually making a statement about your query or curiosity.

For example, I wonder if it will rain tomorrow. Note the lack of a question mark.

Most would write, “I wonder if it will rain tomorrow?” This isn’t a question, it’s a statement.  I wonder if it will rain tomorrow.

If I’m asking a question, I would frame it this way:

“I wonder, will it rain tomorrow?”

I’ve asked an actual question, and therefore I use a question mark. So why does this bother me so much?

Because it’s a sign of intellectual laziness, not of just one person, which is bad enough on its own, but of English speakers as a whole. If people keep doing it, it will become part of the definition of the language to do this, but it flies in the face of logic. The fact that this is a happening isn’t so bad on its own, but it is symptomatic of larger flaws in our society, a sort of erosion of the principles of reason in what we sometimes tout as the Age of Reason.

When I told a friend about my concerns, she said, “My English teacher insisted that was a question and needed the ? mark.”

I replied that her English teacher was quite wrong, and here is why:

The sentence structure belies that. If you replace the object, subject and conjunction but retain the grammatical structure of the sentence, you can derive something like, “I depend on it to rain.” It’s still not a question, and the sentence structure is not a question. There’s no querant in either case. Simply stating “I wonder” does not make it a question, any more than using any other verb in that sentence structure. It’s a statement about wondering, not a question in and of itself.

The word “wonder”, in this case, is a subjunctive verb. The English subjunctive is a special, relatively rare verb form that expresses something desired or imagined. We use the subjunctive mainly when talking about events that are not certain to happen. For example, we use the subjunctive when talking about events that somebody wants to happen, or anticipates will happen.

Statements do not get question marks, therefore the sentence “I wonder if it will rain tomorrow” does not get one. Q.E.D.

The counterpoint to this is that there is a difference between expository writing and dramatic writing. The question mark indicates the tone of the speaking character’s voice, because the character does indeed intend it to be a question.  My friend Joseph Ksander commented:

“This is not a spoken english problem, but a written one. ‘I wonder if it will rain tomorrow’ is in the first person, and has narrative value. And one would argue that the tone of the statement is interrogative (it absolutely is). So when writing, especially in narrative, we are allowed a certain amount (quite a lot) of poetic license to give words and phrases meaning beyond the literal. By giving ‘I wonder if it will rain tomorrow?’ an interrogative mark, we give the reader a hint of how it would sound coming out of a character’s mouth. It has the feeling of a question, and writing is at least as concerned with creating feeling as it is with conveying meaning.”

There is, as Joe points out, a difference between the written word and the spoken word, and using the written word to illuminate the spoken word.

I doubt that my words will have much of an affect. One can only hope that reasonable voices are occasionally heard, but Joe is right, it all depends on context.

I wonder what will happen.

-30-
Forcing Centovacast to Use LetsEncrypt Certificates for SSL

Forcing Centovacast to Use LetsEncrypt Certificates for SSL

Starting with What Made Sense

So the Krypton Radio web site has to go full SSL now because most modern web browsers (read “Google Chrome”) won’t let people visit without warning them that your web site will slay your children in their sleep if you don’t have an SSL certificate on it.

This is frankly just Google messing with our heads, for the most part. A site that does not handle money shouldn’t have to worry about this. All the monetary things we need to do are handled by external sites that actually are secure. But I digress.

So our first assumption was that we could just buy a cert from secureserver.net, install it on Centova, Icecast and our main web server and we were probably good to go.

And then everything collapsed.

What We Did First

I went to create our private key and Certificate Signing Request. After a few tries, I finally was able to use CPanel to generate this, adding in wildcard domains for every domain we wanted to cover. This is a completely legal thing, and you can buy one certificate to handle as many domains as you want.

If you actually buy it through CPanel, though, you can’t. It’s one domain per cert, and $30 per cert. Buying it through your registrar, though, is a lot cheaper.  If you own ten domains, you can easily spend a bundle doing this, and there’s literally no reason for it. Shall we spend 10% of the cost Cpanel wants us to spend?

Yes. Yes we shall.

Mind you, the only reason we’re doing that is that when we started all this there was no such things as Let’s Encrypt, which is a free secure certificate signing company.

The only catch to certificates you get from Let’s Encrypt is that the certificates expire after 90 days, so it’s kind of a problem if you want to use them with a mail server. Every three months your users will have to accept a new SSL certificate to get their email, and trust me, it wigs them out. Most people can barely operate the send button.

That Utterly Failed

No matter what we did with the certificates supplied to us by secureserver.net, Centovacast hated them. The installation script provided by Centova (your installation will tell you that the script lives at /usr/local/centovacast/sbin/setssl) just barfs on it every time.

The instructions provided by Centova say to get Apache credentials. This is wrong. You need credentials for something, but whatever it is, it wants a .pem file, and whatever is supposed to be IN that .pem file isn’t documented.

If you can get a .pem file, great – otherwise, you’ll have to do a massive workaround.

The Icecast Connection

So that’s when we figured out that Icecast, the Centova main panel , and WordPress all needed to be set up with certificates, and that not all of them were going to be able to use the same ones.

Here’s the instructions I found on how to do that for Icecast.

Note with particular attention that they’re talking about putting the private key, the public key, and the authority chain all in one file. I found a BBS topic on how this should be done, specifically with Let’s Encrypt.

The authority chain from LetsEncrypt comes in in the chain.pem file as created by the Centova LetsEncrypt utility, and that’s stored in /usr/local/centovacast/etc/ssl/certs, and then from there there are directories corresponding to each domain. The fact that they bother to identify files by domain name teases the fact that may be possible to run Centovacast from more than one valid domain so long as the server answers to multiple domains.

To inspect the certificates being managed by CPanel, you need to log into your WHM panel and go to:

Home » SSL/TLS » SSL Storage Manager

The Centovacast Connection

I never got the certs I bought working with Centovacast, and self-signing isn’t an option, so I went ahead and asked the Centova Utility  at /usr/local/centovacast/sbin/setssl to create the certs for me using Let’s Encrypt.

To do that, you need to set up a directory alias on a web server on the same domain as Centovacast to serve up the validation files Let’s Encrypt needs to prove that you’re who you say you are.

The instructions say to use a specific block of code to define the directory alias that points to where those validation files are held on the server, but it says nothing about where in your Apache file to put them.

You’re going to need to set up your aliased directory so that the same domain that handles your Centova server is being served as a regular domain or subdomain on port 80, which is the standard port for serving web pages.

In my case, I had a subdirectory called ‘station’. I had to create a server alias so that that subdomain was included in the list of other servers my main vhost listing handles for me, so that my Centovacast subdomain and my main one are really being handled by the same vhost. This saved me from having to set up a complete separate vhost just to handle this one fricking problem.

It also gives the incorrect code to insert in the first place. Forget what they say in their article. Here’s the correct code:

Alias /.well-known/acme-challenge /usr/local/centovacast/etc/ssl/acme-challenges

<Directory “/usr/local/centovacast/etc/ssl/acme-challenges”>
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
Require all granted

# Apache 2.x
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>

# Apache 2.4
<IfModule mod_authz_core.c>
Order allow,deny
Require all granted
</IfModule>
</Directory>

Big question: Regarding the ‘setssl’ utility, why put broken code in a utility, and then write documentation that pretends it works? Again?

Centova is notorious for this.

When we fixed all of the above basic configuration with the Apache server to satisfy the needs of LetsEncrypt, we found that the setssl script was changing permissions on the target file folder such that it would return a 403 error.

That’s right, the Centova utility script that installs the certificate intentionally breaks the process so that it can’t finish.

Insert the change in the chmod instruction that alters it from 750 to 755.

For some reason this bug has been in there forever, and Centova’s never fixed it. They say the answer to this problem is to make the user that the Apache server runs under a member of the ‘centovacast’ group, but in my experience this didn’t work and I got a 403 error no matter what I did later.

Anyway, here’s the code to modify:

if [ ! -e “$challengepath” ]; then
mkdir -p “$challengepath”
fi

chown root.centovacast “$challengepath”
chmod 0755 “$challengepath”

testcontent=”test-$(date +%s).$$”
testfilename=”${testcontent}.txt”
echo “$testcontent” > “$challengepath/$testfilename”

#(In later versions of the code, these two lines are missing entirely. If they’re present, make the change to the chmod parameter as shown).chown root.centovacast “$challengepath/$testfilename”
chmod 0755 “$challengepath/$testfilename”

Once I patched my copy, I set the file permissions on it so that future Centova updates couldn’t revert my changes, like they did the last three times.

You’re Not Out of the Woods Yet

It’s not enough to get Centova itself running on an SSL certificate. Now you have to get IceCast itself working with SSL, which for some reason is a separate task, and any attempt to link to an unsecured stream from a secured site will make web browsers claim your site is not secure, thereby defeating the whole point of having a certificate in the first place.

So the trick here is, you will probably have to create a new listen socket beyond your default. Centova, by default, set you up on port 8000. I had to create a new secure port, so I moved it well up out of the way, on port 8080. All the mount points are available on both ports, but you can’t have one port be both secured and unsecured.

Your Icecast config isn’t called icecast.xml in a Centova installation. It’s called server.conf, and it’s also in a nonstandard location, which is /usr/local/var/vhosts/<your station name>/etc/server.conf.

Here are the listen socket sections from my server.conf.  It’s the top one you’re looking at. The bottom one is the default definition, and the top one is the secure one. Centova does not support the direct creation of secure listen sockets, so you have to hack this by hand.

<listen-socket>
<port>8080</port>
<ssl>1</ssl>
</listen-socket>

<listen-socket>
<port>8000</port>
</listen-socket>

Then finally, you’ll have to add a line in your server.conf file that loads the required SSL certificate. If you’re running your Icecast stream and your Centova server from the same domain, you can reuse the same bundle.pem file, but there’s literally nothing stopping you from making a separate one for each individual Centova virtual host and putting each bundle.pem file in a separate place.

The line for your server.conf file looks like this:

<ssl-certificate>/etc/icecast2/bundle.pem</ssl-certificate>

Last Step

Once this is done, you can go to the Centova interface and reload the server, and it will inhale the new settings. You can test them to make sure it worked by going to https://<yourdomain>:8080 and seeing if it loads. If it doesn’t, you’re still broken, but if it does, congratulations, you now have a secure stream on your internet radio station’s business end!

Except that that doesn’t quite do it.

So it’s /usr/local/letsencrypt/letsencrypt-auto renew,

then rebuild your Icecast PEM file, then use your modified setssl script:

/usr/local/centovacast/sbin/setssl letsencrypt <your domain name>

and then after all that, you have to both restart centova, and then stop your Icecast instance completely and restart it before Icecast will use the new certificate.

Now you’re done.

What a fricking ordeal.

Use Azuracast instead

To be honest, a much better idea is Azuracast, which does everything Centova does, plus a lot more, does not require a monthly license, is open source and is being actively maintained.  Centova is neither fully open source nor actively maintained.

Things I Learned About My Ender 3

Things I Learned About My Ender 3

I’m on an Ender 3 support group on Facebook, and nearly all the comments in this group asking for help are from people who did not follow the instructions when doing the setup on their Ender 3’s in the first place. Those who are meticulous about getting the frame absolutely square and the belts as tight as they can get them without binding everything up are getting superior results.

If you’ve just bought an Ender 3, there are a few things you’ll probably want to do or try at some point.

  1. Make sure your frame is square. I’m serious. 90% of the problems you’re likely to have with your prints will derive from not having properly assembled the gantry.

  2. Make sure your bowden tube is properly trimmed (and by this I mean trimmed off exactly square) and then fully inserted into your hot end.  This one error will make your life hell. If you don’t get this exactly right, you’ll get plastic plugs where your filament heats up and jams your bowden tube, requiring you to partially disassemble your hot end and possibly trim back your bowden tube to get past the clog. Having the bowden tube properly trimmed and properly inserted mostly stops this from happening. There are “fixes” to get around the clog problem, but in general they just add additional points of failure and rarely work as well as setting up your bowden tube properly in the first place.

  3. Replace the plastic extruder clamp with a metal one. Some printers have an extruder arm made entirely of plastic. They’re cheap, usually under $20, but the filament tends to saw through the plastic clamps over time. Sooner or later you’ll want to replace it. Newer ones have a brass liner in there that stops the filament from doing that.

  4. If your printer has to live inside, get a silent controller board. This makes your printer so quiet that you’ll have to do an eyeball check to see if it’s still even printing, it’s so quiet. They’re about $40. However, these silent boards can also prevent you from making linear advance calibrations that can improve the quality of your prints, so you may find yourself with a choice of quality versus machine noise while printing.

  5. Print a fan cowling for your CPU box to keep crap from falling into your controller box through the vent fan. Newer Ender 3’s have the vent on the bottom of the controller box, so it’s not a problem – but the older types have the slots on the top. It’s amazing how much crap can fall in there.

  6. Print a muffling fan cowling for your power supply box. This will drop the fan noise made by the machine by half. Be careful – doing a poor job reassembling your fan with its new housing can make it worse, not better.

  7. Order more bowden tube, and more nozzles, and more pneumatic clamps. These things wear out, and after about four to five months of use, they’ll start to screw up your prints. You do not want to be stuck without spare parts if you’re in the middle of a paying print job and something breaks.

  8. Get a glass build plate.  Go to your local dollar store, and buy a cheap 9×9 square picture frame. Take the glass out of it, and throw the rest of the frame away. The picture frame glass is a quarter the weight of the official Creality glass bed and causes far fewer problems with Y-axis ringing due to its much lower inertia. Alternatively, go to IKEA and get a 1′ mirror tile, then go to your local home improvement store and get a glass cutter so you can cut the mirror tile down to the size of your printer’s bed. If you’d rather use the Creality build plate, don’t be afraid to flip it over and use the untextured side. It’ll leave a mirror-smooth bottom surface on your parts!

  9. Don’t use tape on your print bed. Tape is a substitute for proper bed leveling, and solves problems that haven’t existed since the introduction of heated, adjustable beds. The only time you might want to use it is if you’re using something other than PLA in your printer that sticks like mad to your printing surface, such as PETG. The tape will let you remove the part without breaking your glass.

  10. If you’re having particular problems getting your PLA to stick to the build plate, try a fine mist of Aquanet. It’s cheap, and compared to fiddling with the bed leveling to get it precise to the last 0.01mm, it’s a fast solution that gets you on your way and printing parts again. Some purists think this is cheating, because you can resolve sticking issues with better bed leveling, but if you have to get the parts out the door, there’s nothing wrong with doing something quick that works so you can get on with your life.

    If it feels stupid, but it works, it’s not stupid.

  11. Buy eSun PLA+ filament for printing. It runs about 10° C hotter than the usual stuff, produces much more precise, clean prints, and costs exactly the same as whatever you’re using.

  12. Don’t grind your filament to death. One of the things that can happen if you try to drive your printer too fast, is that you can exceed the structural integrity of the filament as it passes by the gear in your extruder. If the extruder can’t feed the filament through the print head fast enough, it’ll start digging a hole in the side of the filament at the extruder head, and then you are basically and royally screwed, and your print has failed.

  13. If you think vibration damping is something you need, buy a $5 yogo mat, cut it into 1 foot squares, and put a stack of four or five squares under your printer. It will kill a lot of the noise and vibration your printer makes, and may well improve the quality of your prints.

  14. Make sure your belts are as tight as you can get them. Don’t worry, you won’t break them. Tight belts means more precise motion and better prints.

  15. Experiment with printing at stupidly thin layer heights. I started experimenting with 0.08mm layer heights, and people I show the prints to, even other 3d printer owners, are amazed that these are 3d printed objects.

  16. Special fan housings generally do very little, and on the whole don’t improve print quality enough to bother with. Minor tweaks in your slicer settings usually have a much broader effect.

  17. It is possible for an Ender 3 to not want to print because it’s too cold to start with. If your printer lives in the garage or workshop, as mine does, it’s probably not in a heated environment – and that means that it can get down to under 10°C and chill your temperature sensors to the point where the printer’s firmware thinks something must be broken, and you’ll get a MINTEMP error. You could have a bad thermister, or a bad connection trace to it on the motherboard, or a bad connector, but the first thing to try is just bringing the thing inside and letting it warm up a bit. I did this and once I got the temperature of the printer up above about 8°C, the printer realized its sensors weren’t broken, and it started right up.

  18. Get a Raspberry Pi and load it up with a webcam and Octoprint. Being able to run your printer without having to be in the same room with it is heaven. Being able to move your printer to your garage or workshop is even better.

  19. Having trouble with weird surface artifacts in your prints? Slow down. This is especially true of specialty filaments like silks or silk metallics. They are extremely sensitive to print speed, and what looks like a hopeless print may come out perfectly if you cut the print speed in half.

  20. Have to paint your prints, but don’t like the way the parts smell afterwards? Sometimes the client wants it painted, and it’ll smell bad for quite a while once you do. White vinegar will get the smell out of the painted surfaces while not endangering the finish. Be sure to rinse off the white vinegar, or your parts will smell like vinegar instead of paint.

  21. Don’t bother with vibration damping feet for your printer, or special angled mounting arms for your filament spools. By in large these do nothing but waste your time and materials. (If you need to make angled printer arms so that you can fit the spool and printer into a more compact space, that’s a different problem, and you should have no qualms about doing it.)

  22. Octoprint suddenly won’t connect to your 3d printer? It could be the USB voltage levels. What’s happening is that it matters what order you connect your printer to your Octoprint device. If you turn on your Raspberry Pi and plug it into your printer before your printer is powered up, the motherboard in the printer will draw just enough power to make the voltage levels required to detect your printer as a USB device too low to actually do the job. 

    The fix is to disconnect the USB cable, power on the Octopi and the printer separately, and once you’re sure the Octopi is booted, then and only then connect the USB cable between the Pi and the Printer. Now the Pi will be able to detect the printer as a USB device, and all will be well.

Check back here periodically. I’ll be updating this list of tips as I go, and you may find out something new you didn’t know before.

-30-