“allow to do” something, “remind to do” something

To say that something “allows to do something” is not the usual form in English. In my experience, this appears to be a common mistake of non-native English speakers, since a similar construction does occur in some other languages, such as Spanish (permitir hacerlo and not permitir haciéndolo)

Much more common is adding the somebody to the expression. “Allows you to do something” or “Allows many people to do something”. Or use a gerund (doing) instead of an infinitive (to do): “Allows doing something”.

A similar construction that’s potentially problematic is the form “remind to do something” (such as “This program reminds to eat right every day”). The verb remind in English always requires saying which person is being reminded. This is also unlike other languages. For instance, in Spanish using the verb recordar: Esta aplicación recuerda comer bien. Incidentally, the verb recordar also means “to remember”. But the verb remember means something slightly different: “I remember to eat well” means “I remind myself to eat well”. Saying “This program remembers to eat right” would mean “This program reminds itself to eat right”, so the meaning would be different.

Accordingly the correct form is “This program reminds you (or me, or people) to eat right every day.”

Don’t confuse “setup” with “set up”, or “shutdown” with “shut down”

“Setup” and “shutdown” are nouns. “Set up” and “shut down” are verbs, or more precisely, phrasal verbs. But frequently, these verbs in particular, and perhaps any verb with the same base and participle form (such as “put”, “set”, “read”, and others), are incorrectly compounded into one word:

  • *”Things were setup in some way” (say “things were set up” instead).
  • *”I’ll shutdown the computer” (say “I’ll shut down the computer”).

They should only be compounded when used as nouns:

  • “It was all a setup.”
  • “The recent shutdown of operations”.

Note that we don’t say *”all firedup” or *”they’ve takenover the land”, so we shouldn’t say *”I’ll shutdown the computer” or *”things were setup in some way”.

CBOR C# library released

I have released version a new CBOR library in C#.

Source code repository: https://github.com/peteroupc/CBOR Download: https://github.com/peteroupc/CBOR/releases


A C# implementation of Concise Binary Object Representation (RFC 7049). CBOR is a general-purpose binary data format designed by Carsten Bormann, and its data model “is an extended version of the JSON data model”, supporting many more types of data than JSON. “CBOR was inspired by MessagePack”, but “is not intended as a version of or replacement for MessagePack.”

LESS CSS functions for beautiful Web typography

I’ve put together a set of LESS CSS functions for enabling beautiful typography in Web pages. It defines a set of common fonts used on the Web for sans-serif, serif, and monospaced styles, and sets font features as appropriate for a beautiful look. The functions are released to the Public Domain under CC0: http://creativecommons.org/publicdomain/zero/1.0/

I use this library to help generate the style sheet now used in my site, The Ultimate Pokémon Center.

Link: https://gist.github.com/peteroupc/7121453

The unofficial term “generation”

I’ve eliminated the Pokémon term “generation” from UPC’s Web pages (as in “generation 2″, “generation 5″, and so on), mostly because it’s still a rather unofficial term. At most, official sources speak of “the next generation” or “a new generation” of Pokémon rather than classify Pokémon titles based on their release cycles. However, many people find this term useful when talking about the Pokémon series, so I define it here for convenience.

Generation 1: Has 151 Pokémon, began with Pokémon Red Version and Pokémon Blue Version/Pocket Monsters Green. Began in Japan in 1995, in North America in 1998, and in Europe in 1999.

Generation 2: Has 251 Pokémon, began with Pokémon Gold Version and Pokémon Silver Version. Began in Japan in 1999, in North America in 2000.

Generation 3: Has 386 Pokémon, began with Pokémon Ruby Version and Pokémon Sapphire Version. Began in Japan in 2002, in North America in 2003.

Generation 4: Has 493 Pokémon, began with Pokémon Diamond Version and Pokémon Pearl Version. Began in Japan in 2006, in North America in 2007.

Generation 5: Has 649 Pokémon, began with Pokémon Black Version and Pokémon White Version. Began in Japan in 2010, in North America in 2011.

Generation 6: Will begin with Pokémon X and Pokémon Y in 2013.

The problem with “status problems”

Last night I modified my site to get rid of the word “status problems”. Why, do you ask?

  • Because it’s ambiguous and can mean different things to different people. For instance, do status problems include confusion? I don’t think so, but the Black/White official guide and some sites do think so.
  • Because there are many terms to describe status problems, with no correct answer: “status conditions”, “status ailments”, “status problems”, “major status ailments”, “non-volatile status ailments”, and so on.

As a result, my battle system pages no longer include the term “status problems”. (The Pokemon Mystery Dungeon pages will still use that term, though.)

Example with the Ability Marvel Scale:

  • Old: This Pokémon’s Defense is multiplied by 1.5 if it has a status problem.
  • New: This Pokémon’s Defense is multiplied by 1.5 if it’s poisoned, burned, paralyzed, frozen, or asleep.

How to convert to a Binary Coded Decimal

This is how you can convert a number to a binary coded decimal (BCD), a number where each decimal digit occupies a single nibble, or half-byte, of data.

  • If the value is less than 0 or greater than 99999999, the value won’t fit in four bytes. More formally, if the value is less than 0 or is 10^(n*2) or greater, where n is the number of bytes, the value won’t fit in n bytes.
  • For each byte:
    • Set that byte to the remainder of the value-divided-by-10 to the byte. (This will place the last digit in the low nibble [half-byte] of the current byte.)
    • Divide the value by 10.
    • Add 16 times the remainder of the value-divided-by-10 to the byte. (This will place the now-last digit in the high nibble of the current byte.)
    • Divide the value by 10.

(One optimization is to set every byte to 0 beforehand — which is implicitly done by C#, Java, and other languages when they allocate a new array — and to stop iterating when the value reaches 0. Also, if available, some compilers or assemblers offer a divide/remainder routine that allows retrieving the quotient and remainder in one division step. These optimizations are not usually necessary though.)

Articles and pages by the owner of The Ultimate Pokemon Center