Category Archives: JavaScript

Cool Characters for Facebook, Etc.

𝕃𝕠𝕠𝕜 𝕒𝕥 𝕨𝕙𝕒𝕥 𝕀 𝕔𝕒𝕟 𝕕𝕠!   Lᴏᴏᴋ ᴀᴛ ᴡʜᴀᴛ I ᴄᴀɴ ᴅᴏ!   Lоок дт шндт Ї cди dо!

I can make fancy characters to put in Facebook posts and other places where I’m limited to characters with no formatting options.

This is your basic set of alphanumeric characters: the capital letters A–Z, the lower-case letters a–z, and the digits 0–9. The conversions only work on alphanumeric characters.

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789

Most of the double struck letters are mathematical symbols, but they look cool.

𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ 𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫 𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡

With the conversion to small caps letters, only the lower-case letters get converted to small capital letters.

ABCDEFGHIJKLMNOPQRSTUVWXYZ ᴀʙᴄᴅᴇғɢʜɪᴊᴋʟᴍɴᴏᴘǫʀsᴛᴜᴠᴡxʏᴢ 0123456789

The fake Cyrillic writing is just what it says: fake Cyrillic writing. It doesn’t really mean anything in Russian, Ukrainian, or any other language.

ДBCDЄFБHЇJКLMИОPQЯЅTЦVШЖЏZ двcdєfgнїjкlмиоpqяšтцvшжуz 012З456789

Type your message in the box below and click the Convert My Message button. Your message will be converted to all three styles.


Double Struck:

Small Caps:

Fake Cyrillic:


The Navigator.Geolocation post has been moved to its own page in the Software Development » Web Development section. The original post has been expanded to include more information. You can find it here.

In the meantime, here’s where your browser thinks you are. Sometimes it takes a few seconds to return the geolocation information. Please be patient.

The geolocation information is calculated on YOUR device. IX23 does not have access to this information.

Converting Between Julian Dates and Gregorian Calendar Dates in Fortran (and JavaScript)

When looking through some of my old papers I found at my father’s house after he died, I found some old Fortran code for converting Gergorian calendar dates to and from Julian dates. I haven’t used Fortran since the 1970s, so the code looked a little strange.Some examples of Julian dates:

Julian Date Equivalent Gregorian Date
2369916.0 July 4, 1776 12:00:00.0 UT
2436911.509722 December 9, 1959 00:14:00.0 UT (the time of my birth)
2457533.5 May 25, 2016 00:00:00.0 UT

Julian dates are a continuous count of days since Greenwich Mean Noon on January 1, 4713 BCE. January 1, 4713 BCE is also known as -4712 January 1 when used for astronomical calculations. The apparent one year difference is due to there being no year 0—the day after December 31, 1 BCE was January 1, 1 CE. It makes adding and subtracting dates easier.

Greenwich Mean Noon is 12:00 noon UT (Universal Time). UT is a time standard based on Earth’s rotation. It is a modern continuation of Greenwich Mean Time (GMT), i.e., the mean solar time on the Prime Meridian at Greenwich, London, UK. In fact, the expression “Universal Time” is ambiguous when accuracy of better than a few seconds is required, as there are several versions of it, the most commonly used being Coordinated Universal Time (UTC) and UT1. All of these versions of UT, except for UTC, are based on Earth’s rotation relative to distant celestial objects (stars and quasars), but with a scaling factor and other adjustments to make them closer to solar time. UTC, on the other hand, is based on International Atomic Time, with leap seconds added to keep it within 0.9 second of UT1.

Continue reading

Truncating Numbers in JavaScript

I needed a function to truncate a number. Math.floor() worked … until I tried it on a negative number.

So I had to write my own truncate function. Even though I needed to truncate numbers to the integer portion only, I figured sooner or later I would need to truncate to a given number of decimal places. This function does that.

<script>// <![CDATA[
function ccTruncate(number, places) {
    var shift = Math.pow(10, places);
    return ((number * shift) | 0) / shift;
// ]]></script>

If you find this useful, let me know in the comments below.

JavaScript Browser Properties

Originally published on May 25, 2016.

This post discusses some of the browser properties that can be found through JavaScript.

C = Google Chrome
S = Mozilla SeaMonkey 2.40

Property B Value
window.navigator S
Property B Value
navigator.userAgent CS
navigator.appName S
navigator.appCodeName S
navigator.appVersion S
navigator.buildID S
navigator.product S
navigator.productSub S
navigator.vendor S
navigator.vendorSub S
navigator.oscpu S
navigator.platform S
navigator.language S
navigator.languages S
navigator.doNotTrack S
navigator.cookieEnabled S
navigator.onLine S
navigator.battery S
navigator.mediaDevices S
navigator.geolocation S
navigator.mozApps S
navigator.mozContacts S
navigator.mimeTypes S
navigator.plugins S
navigator.getBattery S
navigator.vibrate S
navigator.javaEnabled S
navigator.getGamepads S
navigator.mozGetUserMedia S
navigator.sendBeacon S
navigator.registerProtocolHandler S
navigator.registerContentHandler S
navigator.taintEnabled S
Property B Value
screen.width S
screen.height S
screen.availWidth S
screen.availHeight S S
screen.left S
screen.availTop S
screen.availLeft S
screen.colorDepth S
screen.pixelDepth S
screen.mozOrientation S
screen.mozLockOrientation S
screen.mozUnlockOrientation S
Property B Value
location.href CS
location.hostname CS
location.pathname CS
location.protocol CS
Window Inner Width CS  pixels
Window Inner Height CS  pixels
window.innerHeight CS
document.documentElement.clientHeight CS
document.body.clientHeight CS
See also document.documentElement.clientHeight and window.innerHeight.
screen.colorDepth CS -bit
screen.pixelDepth CS -bit
screen.colorDepth CS -bit
Property B Value
document.lastModified CS
Property B Value

Window Object

<script>// <![CDATA[
// ]]></script>
<script>// <![CDATA[ for (x in window) {     document.write("<b>" + x + " :</b> " + window[x].toSource() + "
"); } // ]]></script>

Navigator Object

It is not necessary to specify window before the navigator object. Either window.navigator and navigator will produce the same result.

<script>// <![CDATA[
// ]]></script>
<script>// <![CDATA[
for (x in navigator) {
    document.write("<b>" + x + " :</b> " + navigator[x].toSource() + "
"); } // ]]></script>


It is not necessary to specify window before the navigator object. Either window.navigator and navigator will produce the same result.

123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789- ↩
<script>// <![CDATA[
// ]]></script>


getCurrentPosition : function getCurrentPosition() { [native code] }
watchPosition : function watchPosition() { [native code] }
clearWatch : function clearWatch() { [native code] }

<script>// <![CDATA[
if ("geolocation" in navigator) {
    /* Geolocation is available. */
    var latitude, longitude, accuracy;
    var options = {
        enableHighAccuracy: true,
        timeout: 5000,
        maximumAge: 0
    for (x in navigator.geolocation) {
            document.write("<b>" + x + " :</b> "
                + navigator.geolocation[x] + "<br />");
    function success(pos) {
        var crd = pos.coords;
        latitude = crd.latitude;
        longitude = crd.longitude;
        accuracy = crd.accuracy;
        var googleMapsLink = ""
            + latitude + "," + longitude + "&t=k&z=20";
        document.getElementById("geolocation-demo").innerHTML =
            "It looks like you are at "
            + latitude + " "
            + longitude + ", ±"
            + accuracy + " meters.<br />See it on <a href=\""
            + googleMapsLink + "\" target=\"_blank\">Google Maps</a>.<br />";
    function error(err) {
        document.getElementById("geolocation-demo").innerHTML =
            "ERROR(" + err.code + "): " + err.message + "<br />";
    navigator.geolocation.getCurrentPosition(success, error, options);
} else {
    /* Geolocation is not available. */
    document.getElementById("geolocation-demo").innerHTML =
        "Geolocation is not available.<br />";
// ]]></script>
<p id="geolocation-demo"></p>

Screen Object

<script>// <![CDATA[
for (x in screen) {
    document.write("<b>" + x + " :</b> " + screen[x].toSource() + "
"); } // ]]></script>p













Location Object

History Object

Document Object


<script>// <![CDATA[
// ]]></script>

document.head Object

<script>// <![CDATA[
// ]]></script>

Dump of document.head Object

<script>// <![CDATA[
for (x in document.head) {
    document.write("<b>" + x + ":</b> " + document.head[x].toSource() + "<br />");
// ]]></script>