• ¯\(°_o)/¯ I DUNNO LOL (unregistered)
    result = remoteCon.sendCmd("ls -l %BlobProfileDirectory%/BlobConfig.Config >/dev/null");
    FTFY. If the file is found it returns a null string, if there is an error, you'll get the error string from stderr!

    Now you just have to pray that a failed connection or some other problem returns something other than a null string...

    TRRWTF of Lovecraftian proportions is mixing Unix commands and SMB mounts... oh the horror!

  • danishdane (unregistered) in reply to faoileag
    faoileag:
    The only problem is: somtimes I can't just simply follow the steps from a solution found on the net - I have to translate menu items, error messages etc first.
    If German localizations are anything like Danish, there's also the added complexity of your OS-localization containing a good proportion of words and terms that aren't actually used (or are only used in a different context) outside that particular localization. Half the time I don't understand what a localized OS is trying to tell me in my own language.
  • fjf (unregistered) in reply to Martin
    faoileag:
    I currently have the pleasure of having to use localised versions (german) of the two OS I have to deal with at work, and I can't say I like it. The reason is simple: if I need to look something up, doing so in English means I have a much higher chance of finding what I'm looking for. So I use English in all my search queries on google, and I use Google's UK version to boot.

    The only problem is: somtimes I can't just simply follow the steps from a solution found on the net - I have to translate menu items, error messages etc first. That's unnecessary friction and extra work I can do without.

    Martin:
    OS localization is a nightmare.

    When googling any error, you need to translate it back to english, which is sometimes really hard

    TRWTF is OSes where you can't change the localization easily.

    Run in your preferred locale normally, and when you need to do what either of you described, just "LC_ALL=C my_command". And I'm sure for those keyboard-allergic ones, there's also some clicky-click way to do the same.

  • fjf (unregistered) in reply to danishdane
    danishdane:
    faoileag:
    The only problem is: somtimes I can't just simply follow the steps from a solution found on the net - I have to translate menu items, error messages etc first.
    If German localizations are anything like Danish, there's also the added complexity of your OS-localization containing a good proportion of words and terms that aren't actually used (or are only used in a different context) outside that particular localization. Half the time I don't understand what a localized OS is trying to tell me in my own language.
    That's easy: Split the incomprehensible expression into words, translate each word literally into English, understand the English phrase, translate it back into your language. Works also for botched movie dubs. (In German, The Simpsons translations are particularly notorious.)
  • faoileag (unregistered) in reply to ¯\(°_o)/¯ I DUNNO LOL
    ¯\(°_o)/¯ I DUNNO LOL:
    result = remoteCon.sendCmd("ls -l %BlobProfileDirectory%/BlobConfig.Config >/dev/null");
    FTFY. If the file is found it returns a null string, if there is an error, you'll get the error string from stderr!
    Valid solution, but can be improved:

    ls -l foobar.cfg | awk '{print "found the config file!";}'

    Then you'll get "found the config file!" if the file has been found, and the ls error msg in case it hasn't.

    In the given scenario, you would put "found the config file!" into a string which you can then use in assembling the shell command and also when you check for the result.

  • faoileag (unregistered) in reply to danishdane
    danishdane:
    Half the time I don't understand what a localized OS is trying to tell me in my own language.
    Full ack. I have come across situations like that as well and its definitely a WTF in its own right! :-)
  • Herr Otto Flick (unregistered) in reply to Steve The Cynic
    Steve The Cynic:
    Oh, and this might well be a function of libc's perror() function rather than ls itself. That said, my FreeBSD box that I'm using right now doesn't have localised output from ls, nor from perror.

    Because you're English and never set the locale?

    $ ls -l total 6 -rw-r--r-- 1 tom tom 747 19 Apr 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 9 May 14:44 ffmpeg

    $ LANG=ja_JP.UTF-8 ls -l total 6 -rw-r--r-- 1 tom tom 747 4月 19 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 5月 9 14:44 ffmpeg

    $ LANG=de_DE.UTF-8 ls -l total 6 -rw-r--r-- 1 tom tom 747 19 Apr 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 9 Mai 14:44 ffmpeg

    $ LANG=ru_RU.UTF-8 ls -l total 6 -rw-r--r-- 1 tom tom 747 19 апр 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 9 май 14:44 ffmpeg

    $ uname -sr FreeBSD 9.1-STABLE

  • Bananafish (unregistered) in reply to Chuck Ritter
    Chuck Ritter:
    PlanB:
    I have to admit: Ididn't test it.

    Will testing for the output beginning with "ls:" do the trick?

    Maybe it will; maybe not. What would work, however, is to do something that reads the machine-readable output from ls. You see, there is this thing called a 'return code' which will be 0 for most command when all goes well. When ls encounters this error, it returns 2. SSH is then kind enough to pass this value back to you by returning the same code.

    The system command here is SSH, which will return 0 if it connects, no matter what the status of the remote command. Two options: 1- Use File.Exists(), or 2- Copy the file every time

    TRWTF: 50 people trying to find a workaround for this code disaster.

  • faoileag (unregistered) in reply to Bananafish
    Bananafish:
    TRWTF: 50 people trying to find a workaround for this code disaster.
    I wouldn't see this as a WTF. More as a mental exercise: "Given the requirement 1 (get the file's status via remotely called shell command) and requirement 2 (locale on remote system might not be english) how would you fix the problem?"

    And looking at the various proposed solutions and the flaws pointed out in them, it seems to be an exercise well worth undertaking! :-)

  • golddog (unregistered) in reply to faoileag
    faoileag:
    Bananafish:
    TRWTF: 50 people trying to find a workaround for this code disaster.
    I wouldn't see this as a WTF. More as a mental exercise: "Given the requirement 1 (get the file's status via remotely called shell command) and requirement 2 (locale on remote system might not be english) how would you fix the problem?"

    And looking at the various proposed solutions and the flaws pointed out in them, it seems to be an exercise well worth undertaking! :-)

    But isn't this a bit of "requirements defining the implementation"?

    The requirement is to check if the config file exists. No reason for that to say implementation must use a shell command.

  • (cs) in reply to Herr Otto Flick
    Herr Otto Flick:
    Steve The Cynic:
    Oh, and this might well be a function of libc's perror() function rather than ls itself. That said, my FreeBSD box that I'm using right now doesn't have localised output from ls, nor from perror.

    Because you're English and never set the locale?

    $ ls -l total 6 -rw-r--r-- 1 tom tom 747 19 Apr 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 9 May 14:44 ffmpeg

    $ LANG=ja_JP.UTF-8 ls -l total 6 -rw-r--r-- 1 tom tom 747 4月 19 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 5月 9 14:44 ffmpeg

    $ LANG=de_DE.UTF-8 ls -l total 6 -rw-r--r-- 1 tom tom 747 19 Apr 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 9 Mai 14:44 ffmpeg

    $ LANG=ru_RU.UTF-8 ls -l total 6 -rw-r--r-- 1 tom tom 747 19 апр 15:18 build-ffmpeg.sh drwxr-xr-x 17 tom tom 76 9 май 14:44 ffmpeg

    $ uname -sr FreeBSD 9.1-STABLE

    Yup, I did that sort of thing. For comprehensible reasons (my company's product lives partly in kernel space) my system is on 8.2. I have the machine set in French to help remind me of the written language of my chosen country of residence, and ls / perror resolutely print in English anyway.

    Addendum (2013-05-13 10:28): Hmm. OK, I looked at the output of various things on this:

    ls itself localises based on the value of $LANG. Cool.

    When ls is given a name that doesn't exist, its error message is written in English. All the time.

    Back in the day, IBM tools that ran on PCs always used to prefix any error message with a message-specific code (and Visual C++ still does, whence all those C#### error codes...). The justification for this is that while the text of the message is locale-dependent, the code is not. If your compiler / other tool gets itself in a twiddle about the desired language, you can still look for familiar error codes, and you can write detection scripts that parse out the code to find out what happened. If ls / perror printed their messages with such a code, the WTF could be mitigated slightly, because the error code for "No such file or directory" would be an invariant.

    Doing it that way is still a WTF, but less so than we originally thought.

  • faoileag (unregistered) in reply to golddog
    golddog:
    faoileag:
    Bananafish:
    TRWTF: 50 people trying to find a workaround for this code disaster.
    I wouldn't see this as a WTF. More as a mental exercise: "Given the requirement 1 (get the file's status via remotely called shell command) and requirement 2 (locale on remote system might not be english) how would you fix the problem?"

    But isn't this a bit of "requirements defining the implementation"?

    The requirement is to check if the config file exists. No reason for that to say implementation must use a shell command.

    Well, I was thinking in the context of todays WTF. Which was relying on an english string to determine the outcome of an operation. And in that context seeing the exercise as "Leaving the rest of the code as it is, how would you fix the problem with the language-dependancy?"

  • (cs) in reply to golddog
    golddog:
    faoileag:
    Bananafish:
    TRWTF: 50 people trying to find a workaround for this code disaster.
    I wouldn't see this as a WTF. More as a mental exercise: "Given the requirement 1 (get the file's status via remotely called shell command) and requirement 2 (locale on remote system might not be english) how would you fix the problem?"

    And looking at the various proposed solutions and the flaws pointed out in them, it seems to be an exercise well worth undertaking! :-)

    But isn't this a bit of "requirements defining the implementation"?

    The requirement is to check if the config file exists. No reason for that to say implementation must use a shell command.

    In fact, something like File.Exists would be a perfectly serviceable solution, because the file in question is NOT on a remote machine. It's on the local filesystem of the local machine (the one called "localhost"), and yet the chosen solution is to analyse the textual output of using ssh to launch a shell command whose output is not a universally stable representation of the answer to the question.

  • asdf (unregistered)

    Lorne please never write an article again. Thanks

  • (cs) in reply to danishdane
    danishdane:
    Half the time I don't understand what a localized OS is trying to tell me in my own language.
    That's OK, don't feel too bad. It's a bit like that for English speakers trying to understand what an OS localised into English is saying. Unclear error messages are unclear in any language.
  • fjf (unregistered) in reply to Bananafish
    Bananafish:
    Chuck Ritter:
    What would work, however, is to do something that reads the machine-readable output from ls. You see, there is this thing called a 'return code' which will be 0 for most command when all goes well. When ls encounters this error, it returns 2. SSH is then kind enough to pass this value back to you by returning the same code.
    The system command here is SSH, which will return 0 if it connects, no matter what the status of the remote command. Two options: 1- Use File.Exists(), or 2- Copy the file every time
    3. Get a better ssh client:
    % ssh localhost true; echo $?
    0
    % ssh localhost false; echo $?
    1
  • fjf (unregistered) in reply to faoileag
    faoileag:
    Bananafish:
    TRWTF: 50 people trying to find a workaround for this code disaster.
    I wouldn't see this as a WTF. More as a mental exercise: "Given the requirement 1 (get the file's status via remotely called shell command) and requirement 2 (locale on remote system might not be english) how would you fix the problem?"
    If those requirements were sane (#1 isn't, #2 should be irrelevant) and if you have a broken ssh client (see above), then FFS just echo the exit status from ls in the ssh command line, discarding stdout/stderr, then read back the exit status. But never try to interpret a message meant for humans as a machine-parsable text, that's just bound for WTF.
  • Ironside (unregistered) in reply to JonnyBravo
    JonnyBravo:
    This is unreadable before coffee.

    The real wtfs are that a site called the thedailywtf.com is not daily, and that it's been running 9 years without any advancement in the art of writing.

    dick troll is dick

  • Sk2 (unregistered)

    That was terribly written. Someone needs to pick up a copy of the elements of style and learn the difference between writing for a technical audience and creative writing.

  • (cs) in reply to Bananafish
    Bananafish:
    The system command here is SSH, which will return 0 if it connects, no matter what the status of the remote command. Two options: 1- Use File.Exists(), or 2- Copy the file every time
    From the FreeBSD ssh manpage:
    ssh exits with the exit status of the remote command or with 255 if an error occurred.
    The 255 case refers to an error connecting / authenticating / etc. rather than an error reported by the target program.
  • (cs) in reply to faoileag
    faoileag:
    They are not really that much a stickler for french, are they? "Sorry, we can't use that OS because it doesn't speak french"?? I shudder at the thought...
    That's "je frémis à la pensée" to you. You're allowed to also shudder at the thought after that as long as you shuddered slightly more in French than you do in English.

    Unfortunately the parts of Bill 101 which would involve you being put in stocks and forced to wear a sign that said "ANGLOPHONE" around your neck while passing school children pelt you with manure were overruled by those weasels in the Supreme Court who are obviously trying to destroy Québécois culture.

  • Tzafrir Cohen (unregistered) in reply to Steve The Cynic
    Steve The Cynic:
    In fact, something like File.Exists would be a perfectly serviceable solution, because the file in question is NOT on a remote machine. It's on the local filesystem of the local machine (the one called "localhost"), and yet the chosen solution is to analyse the textual output of using ssh to launch a shell command whose output is not a universally stable representation of the answer to the question.

    The file is on a local machine. But is it accessed as the same user? SSH is one way to get an authenticated connection to a different user. If they use a "control socket" (RTFM ssh), new connections are almost as cheap as running a new local process.

    In shell programming, the equivalent of File.Exists() is test -e.

  • Joe (unregistered) in reply to Steve The Cynic
    Steve The Cynic:
    It's on the local filesystem of the local machine (the one called "localhost"), and yet the chosen solution is to analyse the textual output of using ssh to launch a shell command whose output is not a universally stable representation of the answer to the question.
    One should not assume that the machine called "localhost" is in fact the same as the system you're running on.

    As the victim of a rather liberal policy on what names are acceptable to pass as the DHCP hostname option, I can tell you that having that assumption violated causes all kinds of interesting behaviors on a wide variety of systems in a wide variety of locations.

    It's especially Interesting when the DNS servers have decided to cache that wrong information for several hours after the offending sysadmin has been corrected. And more Interesting when the aforementioned sysadmin has distributed VM images containing this tweak to many users. (Lather, rinse, repeat until the DNS admins get a clue)

  • I will burn in Hell (unregistered)

    public void ConfigFileExistsOrCreate() { String result = null; remoteCon = SSHConnection("localhost"); faultString = remoteCon.sendCmd("ls -l /random_foo_bar/BlobConfig.Config"); result = remoteCon.sendCmd("ls -l %BlobProfileDirectory%/BlobConfig.Config");

    if (result.equals(faultString))
    {
    	String fileContents = "smb://GlobalShared/UniversalBlobConfig.config";
    	remoteCon.putFile("BlobConfig.Config", fileContents, FileType.Link)
    }
    else
    {
    	// no-op! File exists!
    }
    

    }

  • Svensson (unregistered) in reply to RonBeck62
    RonBeck62:

    Kio? Mi pensis, ke li aludis al Esperanto.

    Nah - English is ahead of Esperanto by more than a billion speakers. Plus, in spite of all the letters in use in Europe at the time, Zamenhof had to make up two more that aren't on my keyboard.

    b.t.w. For an amusing look at machine translation, paste that exact phrase into google translate. :)

  • AnonymouseUser (unregistered)
    Because hundreds of years earlier, French became one of the national languages of Switzerland: written, spoken, and more pertinently (and much later) available to select as a localizational language in Linux.

    Which Sep had done.

    Probably this was against company policy.
  • Bananas (unregistered)

    The Daily WTF: the Memento edition.

  • The Sauce (unregistered)

    TRWTF is that this is the most readable Lorne Kates article so far.

  • (cs) in reply to Lorne Kates
    Lorne Kates:
    Ariol:
    Why not just "LANG=C ls -l GlobalShared/BlobConfig.Config" or "LANG=EN_US ls -l GlobalShared/BlobConfig.Config"....?

    Why not use File.Exists()?!?

    That would be too easy.

    Also, this article gave me a headache. Isn't it the code that should do this, and not the writing style?

  • Ken B (unregistered) in reply to Cyt
    Cyt:
    We all know how this will be fixed: Adding tests for each possible translation of that string...
    No, you check for success by looking for "-rw-r--r--" instead.
  • Peter (unregistered) in reply to asdf
    asdf:
    Lorne please never write an article again. Thanks
    Lorne, I enjoyed the entertainingly different style of writing in this article. Thanks (but please don't do it too often!).
  • (cs) in reply to Peter
    Peter:
    asdf:
    Lorne please never write an article again. Thanks
    Lorne, I enjoyed the entertainingly different style of writing in this article. Thanks (but please don't do it too often!).
    Ladies and gentlemen: feedback from the Internet.

    (Thanks and don't worry)

  • (cs) in reply to Jim the Tool
    Jim the Tool:
    Yes. This is the real WTF in this scenario. But in the Switzerland situation generally, the real WTF is Google going, "oh, you're in Geneva, that's in Switzerland right? Now what do they speak in Switzerland, ah, German!" And then giving you all the pages in German. (They also do this in various other bi/multi-lingual countries. The fact that my browser says "en, en-us" is apparently less meaningful than that I'm in a "German" (or in other cases, "Dutch" - Belgium) speaking country.
    My GMail account still redirects through google.co.jp whenever I log in/out, since I happened to be living in Japan at the time I created it. Fortunately, they don't still give me all my pages in Japanese - way too much work to read.

    For more language fun, when I lived over there, I bought a computer (with Japanese keyboard layout) and installed the US version of WinXP on it. Since I had the US operating system installed, my computer was happy to assume that the keyboard was using the US layout. Not a problem for me since I touch type and thus never actually look at the keyboard anyway, but it was rather confusing to anyone else who tried to use my computer and wondered why the punctuation marks they typed didn't match up to the ones printed on the keyboard.

  • WC (unregistered) in reply to RonBeck62

    I think Esperanto is a lot less kludgy than English. :)

  • WC (unregistered) in reply to Svensson
    Svensson:
    RonBeck62:

    Kio? Mi pensis, ke li aludis al Esperanto.

    b.t.w. For an amusing look at machine translation, paste that exact phrase into google translate. :)

    haha WTF.

  • (cs)

    TRWTF is the French definition of "genius":

    [image]
  • JJ (unregistered) in reply to Lorne Kates
    Lorne Kates:
    Ariol:
    Why not just "LANG=C ls -l GlobalShared/BlobConfig.Config" or "LANG=EN_US ls -l GlobalShared/BlobConfig.Config"....?

    Why not use File.Exists()?!?

    What an clever idea!

  • anonymous (unregistered)

    TRWTF are native English speakers that think their language should be the one and only language, just because "our economy is better, we have more nukes and we rulez!"

    Prepotent a-holes. For most of them, it might come as a surprise that such "worldwide English importance" dates from very recent times (WWII). Before that and for a long time, it was shudder ... French.

    If the point is speaking a single, very simple language that most people can learn with little to no trouble, let's start speaking Esperanto!

  • ¯\(°_o)/¯ I DUNNO LOL (unregistered) in reply to WC
    WC:
    I think Esperanto is a lot less kludgy than English. :)
    Oh it's kludgy alright, you just have to know where to look.
  • (cs) in reply to anonymous
    anonymous:
    TRWTF are native English speakers that think their language should be the one and only language, just because "our economy is better, we have more nukes and we rulez!"

    Prepotent a-holes. For most of them, it might come as a surprise that such "worldwide English importance" dates from very recent times (WWII). Before that and for a long time, it was shudder ... French.

    If the point is speaking a single, very simple language that most people can learn with little to no trouble, let's start speaking Esperanto!

    English über alles!

  • Kiliko (unregistered) in reply to Svensson

    You are right! I think we should all use the most spoken language in the world by far! It's the best for everyone.

    So now everyone forgets their silly language and speak Chinese!

    Seriously, I have seen many chauvinists, but never something so arrogant (and wrong) than English-speaking persons on this subject...

    If we want to speak a universal language (Better late than never), we should really avoid ALL natural languages (French, Chinese, English...) beceause they ALL have a stupid grammar with a lot of exceptions. Every new regular language have a grammar more logical, simple and easy to learn.

    And most important: They are neutral for everyone. Nearly nobody would want to speak the language of another country, because it would sound like being invaded by them and the sacrifice of a vast part of their culture.

  • (cs)

    Awesome. That read like a .net stack trace. Kuddos.

  • Ronald (unregistered) in reply to faoileag
    faoileag:
    anonymous_coder():
    faoileag:
    Honestly, I never figured out the reason for low-level commands like "ls" to be multilingual. Those who regularly work on the console usually have a decent enough command of English, and those who don't shouldn't perhaps work on the console.

    Try telling that to the Quebec government - that'll get you mired in bureaucratic hell for a good long time...

    They are not really that much a stickler for french, are they? "Sorry, we can't use that OS because it doesn't speak french"?? I shudder at the thought...

    No, this is typical FUD from the English minority in Quebec. The Quebec government does not prevent people from using an application (or OS) if it's not available in French.

    What happens is that if a company is owned by the Quebec government or wants to become a service provider to the Quebec government they have to obtain a certification from the French language protection agency (OQLF) that states that the company has made reasonable efforts to provide its end users with a French computing environment BY DEFAULT (servers are not considered) and that for products that are not available in French the vendor has been informed of the issue (which does not prevent the company from using the product).

    For companies that do not provide services to the government the only requirement is that if they put up a sign outside a French version of the text has to be present and has to be at least the same size as any other language on the sign (typically English).

    This is done to avoid recreating a situation like Montreal in the 1970s where the majority of the population was speaking French but all the signs and ads were in English to cater to preferences of the wealthy English minority or American tourists.

    To this day, 80% of Quebec citizens speak French and while the English minority is often making a lot of noise and FUD they have access to all public services in the language of their choice, which is not the case for most of the French Canadians in the rest of Canada.

  • ¯\(°_o)/¯ I DUNNO LOL (unregistered) in reply to Kiliko
    Kiliko:
    If we want to speak a universal language (Better late than never), we should really avoid ALL natural languages (French, Chinese, English...) beceause they ALL have a stupid grammar with a lot of exceptions.
    Actually, Japanese has a pretty decent grammar (though it's "backwards" like using an HP calculator), very regular verb conjugation (IIRC only 2 irregular verb forms, plus one class of differently conjugated verbs), and a low phoneme count as well. That low phoneme count, however, becomes a bit of a problem when half your language is import words from Chinese.
  • (cs) in reply to Ronald
    Ronald:
    To this day, 80% of Quebec citizens speak French and while the English minority is often making a lot of noise and FUD they have access to all public services in the language of their choice, which is not the case for most of the French Canadians in the rest of Canada.
    Well, the rest of Canada happens to include Alberta, most of which could be described as being like Texas but way colder. Their attitude to requests/demands from visiting Quebecois is… robust, and easy to guess from thinking about what a stereotypical might say in response to the same thing.

    The people of BC like to have AB as a buffer zone between themselves and the crazy easterners, so far as I can tell.

  • (cs)

    Languages, etc...

    Remember, the only languages that count are those with an army behind them.

    Esperanto, and Ebonics need not apply.

  • (cs)

    Why don't we stop using all software until it's all re-written in Haskell?

  • Ronald (unregistered) in reply to dkf
    dkf:
    Ronald:
    To this day, 80% of Quebec citizens speak French and while the English minority is often making a lot of noise and FUD they have access to all public services in the language of their choice, which is not the case for most of the French Canadians in the rest of Canada.
    Well, the rest of Canada happens to include Alberta, most of which could be described as being like Texas but way colder. Their attitude to requests/demands from visiting Quebecois is… robust, and easy to guess from thinking about what a stereotypical might say in response to the same thing.

    The people of BC like to have AB as a buffer zone between themselves and the crazy easterners, so far as I can tell.

    Funny that BC people talk about "crazy easterners" given that there are maybe 11 non-asian people left in BC.

  • Kev (unregistered) in reply to inori
    inori:
    For more language fun, when I lived over there, I bought a computer (with Japanese keyboard layout) and installed the US version of WinXP on it. Since I had the US operating system installed, my computer was happy to assume that the keyboard was using the US layout. Not a problem for me since I touch type and thus never actually look at the keyboard anyway, but it was rather confusing to anyone else who tried to use my computer and wondered why the punctuation marks they typed didn't match up to the ones printed on the keyboard.

    Try using one of the those pesky US keyboards when the OS language is set to proper-English (pretty much an essential in the UK as the £ symbol is missing on Yank keyboards) - that doesn't half confuse people (the missing Alt-Gr (needed for €) and weird return key simply add to the confusion)

  • old mysql user (unregistered) in reply to ¯\(°_o)/¯ I DUNNO LOL

    don't forget the lack of import words from tonal languages and having none in your own.

    captcha: cogo - the sum of cogito and ergo

Leave a comment on “The Impossible Blob”

Log In or post as a guest

Replying to comment #:

« Return to Article