Skip to main content
Recent Posts
Theme development / Re: CSS/JS Minimize Changes (playing)
Last post by Spuds -
I should have noted in the above post, that if you use a custom theme that does NOT have its own Theme.php file .... Then doing the steps outlined above will enable the new behavior on your custom theme as well (since if it doe NOT have its own Theme.php file, then its using the default one)
Support / Re: Questions about Gravatar
Last post by Steeley -
Quote from: Spuds –
 A hash is a hexadecimal representation of the email address which simply makes it compliant with web requests.   For example is represented as n3d99ef7fedf0fe77dd3171b3dfd03c`

Just some additional info if anyone is not familiar with hashing - as Spuds said it's a hex representation of a string, 32 hex characters in this case.  "Checksum" is an early version of 'hashing', typically used as "version control" to verify that the hashed object hasn't been changed since it was "authenticated". However, an 8-bit checksum isn't very reliable, as the possible hashes are limited, and the odds having two strings (or files, whatever), with the same checksum are fairly high. Sixteen-bit checksums are better, 32-bit better still.

For the record, I actually did see a file that was edited/updated, and both the original and the edited file had the exact same 32-bit checksum (termed "collision"). Trust me, it blew us all away.. so much for version control with CS-32... 

MD5 uses a more complex hash algorithm and the probability of two different hashed objects producing the same hash, and then observed and compared by the same entity, is almost infinitely small. BUT if MD5 isn't sufficiently "secure", well then there's SHA-256, 64-hex bit. However, it takes much longer to produce a SHA-256 hash as an MD5 hash. This becomes an issue when what you are hashing is a large digital object (say, a 10 Terrabyte hard disk..). Do you really need that degree of "integrity verification"? The number of possible values that can be returned by a a 256-bit hash (64 hex) function, for instance, is estimated at roughly the same as the number of unique atoms in the universe. The odds of two random events producing the exact same object1 (resulting in the same hash value) is greater than the odds of duplicating hash values on different objects. 

Hashing is not encryption as some associate it with, in that reversing the hash (decrypting) into the original string or file is almost impossible. This makes transmitting hash representations themselves very secure. If you receive "3d99ef7fedf0fe77dd3171b3dfd03c` there's virtually no way you're going to be able to reverse it directly into So, you get 3d99ef7fedf0fe77dd3171b3dfd03c, that's cool, but you have no way of knowing if it's a representation of a jpg of an elephant, a digital master of Pink Floyd's "Umaguma", or a nuclear launch code.
I have a computer forensics certification, and used to be licensed to testify as an expert witness in court.  I used MD5 hashing extensively, taking a hash of a file,  hard-drive, etc, and then imaging that file, hard drive, and hashing that. If the image has the same hash value as the original hard drive, I can be absolutely certain they are identical, and I can then work with the image and "prove" that whatever I discover in the image is also contained in the original. If anyone changes so much as a bit in the original (or the image) after it has been hashed, it will produce a different MD5 hash value and is evidence the original object "has been tampered with" since it was hashed.  And if I wanted even more certainty in insuring transmission or transfer integrity, I'd hash the hash and transfer that separately so that the recipient can confirm the hash itself received separately wasn't corrupted during transmission or transfer.

1See "Quantum Entanglement"

All that said, my absolute favorite hash is "corned beef".
Theme development / CSS/JS Minimize Changes (playing)
Last post by Spuds -
ElkArte can minimize and combine CSS and JS files to save on data requests and size.  That is nothing new, its been available since 1.0.

In 2.0 I made changes and you now have the option to minimize and NOT combine -or- minimize and combine the files.  In addition 2.0 will also minimize the inline JS and CSS.  There can be some debate on whether to combine or not, but if your server is running http2 then you are best not combining (IMO)

Another change is that it does a true defer on the JS that has been set as deferred.  In 1.0/1.1 defer simply means the script is added at the end of the html.  With defer, parsing finishes like when we put the script at the end of the body tag, but overall the script execution finishes before, because the script has been downloaded in parallel with the HTML parsing.  So basically it will be somewhat more performant but not as in OMG.  And no you can not simply defer everything.

Thinking that some may want to play with this (on 1.1) and see if they get any improvements, here you go!  (not this will NOT combine, only minimize) Starting with how to do this on the default theme. 

  • Save your existing  /themes/default/Theme.php  in case things go wrong and you tank your site:fire::firefighter:
  • In the admin panel Configuration -> Features and Options -> General ... Turn off  Minify Javascript and CSS files  Save then Clear Hive Cache
  • Place the 3 attached files in your /themes/default folder
  • Go back to admin panel Configuration -> Features and Options -> General ... Turn On Minify Javascript and CSS files

    Simple enough, test things out and make sure nothing breaks (addons especially) ... clear your browser cache just in case as well.

    Now if you are running a custom theme, AND that theme has its own Theme.php file in its theme directory then ask for some help ;) ... its very easy to do, BUT you need to determine what changes were made in the custom Theme.php file and that will be theme dependant.  You will also be adding the attached files to your custom theme directory.
Support / Re: Questions about Gravatar
Last post by Ruth -
Thank you very much; Spuds! :smiley:

I translated it this way now:

Code: [Select]
$txt['gravatar'] = 'Gravatare';
$txt['avatar_gravatar_enabled'] = 'Aktiviere Gravatare';
$txt['gravatar_rating'] = 'Gravatar-Rating';
$txt['gravatar_default'] = 'Angezeigte Grafiken, wenn einer E-Mail-Adresse kein Gravatar zugeordnet ist:';
$txt['gravatar_none'] = 'Standard Gravatar-Logo';
$txt['gravatar_identicon'] = 'Geometrische Muster, basierend auf dem E-Mail-Hash';
$txt['gravatar_monsterid'] = 'Generierte "Monster" mit verschiedenen Farben, Gesichtern, etc.';
$txt['gravatar_wavatar'] = 'Generierte Gesichter mit verschiedenen Eigenschaften und Hintergründen';
$txt['gravatar_retro'] = 'Awesome-generierte 8-bit "Pixel-Gesichter" im Stil von Video-Spielen';
$txt['gravatar_robohash'] = 'Generierte "Roboter" mit verschiedenen Farben, Gesichtern, etc.';
Support / Re: Questions about Gravatar
Last post by Spuds -
Gravatar is a service that allows you to associate an image/avatar with your email address, and then use that on sites that support Gravatar (its very popular)

If a user does not have a Gravatar, and they still choose Gravatar from the Forum Profile "Personalized Picture" area, then ElkArte will request an image from the Gravatar service. 

To do this it uses a "hash" of the users email address.  A hash is a hexadecimal representation of the email address which simply makes it compliant with web requests.   For example is represented as n3d99ef7fedf0fe77dd3171b3dfd03c`

The image returned is unique, and which "type" of image it returns depends on which library you choose, none, identicon, retro, monster,  wavatar or robot.

Default/None is simply: default.jpg
The rest will be unique to the email address / hash and have a style based on the library chosen
Robot: robot.png Monster: monster.png Retro (like old arcade games) retro.png Wavatar: wavatar.png Identicon (like a QR code): identicon.png

As for the descriptions in the Admin.english.php file, those come straight from Gravatar's documentation  :smiley:  I tried to find some German translations and could only come up with some of them as Gravatars own translations are missing!
Code: [Select]
$txt['gravatar'] = 'Gravatars';
$txt['avatar_gravatar_enabled'] = 'Gravatar für Forenbenutzer aktivieren?';
$txt['gravatar_default'] = 'Standardbild, das angezeigt wird, wenn einer E-Mail-Adresse kein Gravatar zugeordnet ist';
$txt['gravatar_none'] = 'Standard des Gravatar-Logos';
$txt['gravatar_identicon'] = 'Ein geometrisches Muster basierend auf einem E-Mail-Hash';
$txt['gravatar_monsterid'] = 'Ein generiertes "Monster" mit verschiedenen Farben, Gesichtern, etc.';
$txt['gravatar_wavatar'] = 'Generierte Gesichter mit unterschiedlichen Eigenschaften und Hintergründen';
$txt['gravatar_retro'] = 'Fantastische generierte, 8-Bit-Videospiel-artige, verpixelte Gesichter';

Hope that helps.

Support / Re: Questions about Gravatar
Last post by Steeley -
I'll take a stab Ruth... please forgive me if I am not providing knowledge you don't already have..

Gravatar stands for Globally Recognized Avatar and is a profile picture assistant that, among other potential uses, allows you to have the same picture as your avatar on most websites on the internet

Here's some 8-Bit pixelated arcade examples:

I presume a library (local or web) to pick from (e.g. )
"Email hash" I suspect is doing an md5 hash (or similar) on the email to produce a unique identifier to associate with a gravatar (so that the same gravatar isn't used for multiple different emails, or, conversely, md5 hash on a part of the email that is uniquely common to all your emails [From: Address] so the same gravatar is always associated with the sender or member posting).

The latter used to be very popular, now maybe not so much?

I don't know if or how any of these are used with EA (anymore, if ever?) - that I'll defer to @Spuds (et. al.)
If they are supported as "web enabled", it's handy, as then storing unique avatars for every user in the local database isn't necessary 
Support / Questions about Gravatar
Last post by Ruth -

I would need help with this, because I don't know really, how this works and how the "gravatars" are looking - so I have problems with translation here:


Code: [Select]
$txt['gravatar'] = 'Gravatare';
$txt['avatar_gravatar_enabled'] = 'Aktiviere Gravatare';
$txt['gravatar_rating'] = 'Gravatar-Rating';
$txt['gravatar_default'] = 'Default image to show when an email address has no matching Gravatar';
$txt['gravatar_none'] = 'Default of the gravatar logo';
$txt['gravatar_identicon'] = 'A geometric pattern based on an email hash';
$txt['gravatar_monsterid'] = 'A generated "monster" with different colors, faces, etc';
$txt['gravatar_wavatar'] = 'Generated faces with differing features and backgrounds';
$txt['gravatar_retro'] = 'Awesome generated, 8-bit arcade-style pixelated faces';
$txt['gravatar_robohash'] = 'A generated robot with different colors, faces, etc';

Are there really "monsters" and "robots" to see?  :shocked: What is an "email hash"?  :embarrassed:  And this one I don't understand at all: "Awesome generated, 8-bit arcade-style pixelated faces". What does this mean?

Maybe someone can show me examples?

Is this the default gravatar?
Localization / Re: German language files (informal) for 1.1.9
Last post by Steeley -
Yes, English is tough to translate, Ruth.....

For example, the term "take out" has 3 different meanings:
It's very important to know which is actually meant

1 - prepared food you buy and eat somewhere else
2 - date
3 - kill someone.

And now that I think about it, the word "date" has 4 different meanings..

1 - a palm tree fruit
2 - a small, (hopefully) enjoyable, "get together"
3 - determine the age of something
4 - a particular day on a calendar

And "calendar" has 3 different meanings..

1 - a tabular register of days  in a week, month, or year
2 - an orderly list of scheduled activities
3 - a college or university catalog.

Quote from: Ruth – The worsest one is the help file. :rolleyes: Some strings there are really pointless. They explain nothing, they just repeat the same with a bit different words, what you read already, before you click on the question mark.

Yes, sometimes it is necessary to translate English into ... other English.

[BTW, I love the word "worsest" (which is not a real English word, but should be) as it's more clear than "worst" which when I hear it spoken I often confuse with German sausage - which I also love..]

Now, here's a photo of a fuel truck taken 50 years ago in Thailand


Do you know how the Thais say "Shell Oil" in Thai?

"Shell Oil"  :confounded:

Localization / Re: German language files (informal) for 1.1.9
Last post by Ruth -
Lol....okay, Jorin.

I just found a string, I was not sure at all, how to translate it:

Code: [Select]
$txt['upgrade_warning_already_done'] = 'You are already running <em>ElkArte %1$s</em> no upgrade is available!  You must <strong>delete</strong> the install directory and then proceed to <a href="%2$s">your forum</a>';

I did it this way:
Code: [Select]
$txt['upgrade_warning_already_done'] = 'Du verwendest bereits <em>ElkArte %1$s</em>, es ist kein Upgrade verfügbar! Du musst das Installationsverzeichnis <strong>löschen</strong> und dann mit <a href="%2$s">im Forum fortfahren.</a>';