Your career suffers when you use drugs

The previous post, which contains source code that many readers can’t understand, was a follow-up to this post where I responded to a couple of search strings that brought readers here; one of which asked about your career while using meth.

It occurred to me that I have shared source code before, and that code was (mostly) good. Thus the reason for the last post was to demonstrate that I also wrote some really bad code. But that wasn’t the end of it… there is no history of my worst code because it was so bad, it didn’t even compile.

If you find yourself in the situation where you ask if it is possible that you can still have a good career while using drugs, you are in some really deep shit. It means that you have a problem, and you know you have a problem, but you do not want to stop using drugs.

This backs up what I’ve been saying for years: Addiction is not a disease, it is a choice. You don’t continue using because of any disease, you continue using because you want to. And if you do that despite all kind of bad things happening, you deserve what you get. However, the other people in your life do not deserve it. (And besides the fact that the drugs were not giving me anything good anymore, that was the motivation for me to quit – the other people in my life. I stopped for them, not for me.)

Posted in Addiction, Methamphetamine, Recovery | Tagged | Leave a comment

An example of madness. Some c# code I wrote a few years ago when I was ridiculously high.

I’m not posting this to my programming blog because it’s an example of really really bad code.

It seems that one fine morning while tweaking on having my source code all be perfectly formatted, I created this monstrosity. It compiles to a console application that’s included in my solution, one that searches back a couple of directories and formats all the source code files that it finds according to my drug-induced maniacal specifications. That is, it modifies hundreds of my source code files in parallel in a few milliseconds. By some miracle it works. Had it failed, the results would have been spectacular.

(Here’s the kicker… It doesn’t really format anything. The tool I used for formatting code inserted blank lines and omitted blank lines where I wanted extra whitespace. So all this does is insert and remove empty lines. So it parses files and determines where to insert and where to delete lines. That’s why it had the potential, if my calculations while coding when I was super-high, of deleting source code and making the files useless. But somehow it worked as intended.)

I can’t even understand this code while I am clean and sober (and sane).

There are some ridiculously long logic statements in this code. Also check out my essay-style comments. As I recall, I was explaining the code to the voices in my head.

The main file:

using System;
using System.IO;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace FormatCSFiles
{
    /// <summary>Some quick 'n dirty CS code formatting.</summary>
    /// <remarks>Because the RegionErate Addin that I use to sort my code into regions does some screwy
    /// things with blank lines, and I am obsessively fussy about my code format. This processes all CS
    /// files in the solution in parallel and fixes what it can. This is not an extension. I don't know
    /// how to write one. This processes <b>files</b>, so save all before running this in the debugger,
    /// or wave your latest changes goodbye.</remarks>
    internal class Program : Romy.Core.Console.ConsoleApplicationBase
    {
        [STAThread, SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
        private static void Main()
        {
            var program = new Program();
            program.InitializeConsoleApplication();

            /* I'm being lazy and assuming this project is always in a child directory of my solution and processing the parent directory
             * (+ all the parent's siblings, as well as children, which includes this file). i.e. 4 levels up from the Debug directory. */
            var directory = Environment.GetCommandLineArgs()[0];

            for (var i = 0; i < 4; i++)
            {
                directory = Path.GetDirectoryName(directory);
            }

            LogInfo("FormatCSFiles\tProcessing the .CS files in \"{0}\" and its subdirectories.", directory);

            var files = Directory.GetFiles(directory, "*.cs", SearchOption.AllDirectories).Where(
                f => !Path.GetFileName(f).StartsWith("TemporaryGeneratedFile"));

            Parallel.ForEach(files, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount * 2 }, f => ProcessFile(directory, f));

            LogInfo("FormatCSFiles\tDone processing the .CS files in \"{0}\" and its subdirectories.", directory);
        }

        private static string Pad(string textToPad, int length)
        {
            var builder = new StringBuilder();
            builder.Append(textToPad);
            while (builder.Length < length)
            {
                builder.Append(' ');
            }
            return builder.ToString();
        }

        // My one and only failed attempt at reducing the code complexity made it even more complex.
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
        private static void ProcessFile(string directory, string filename)
        {
            try
            {
                var formattedThreadId = Thread.CurrentThread.ManagedThreadId.ToString().PadLeft(2, '0');
                var formattedFilename = filename.Substring(directory.Length + 1);
                LogInfo(Pad(string.Format("Thread {0}", formattedThreadId), "FormatCSFiles".Length) + string.Format("\tProcessing \"{0}\"", formattedFilename));

                var lines = File.ReadAllLines(filename, Encoding.Default).ToList();

                for (var i = lines.Count - 1; i >= 0; i--)
                {
                    var results = new AnalysisResults();
                    var line = lines[i].Trim();

                    if (i < lines.Count - 1)
                    {
                        var nextLine = lines[i + 1].Trim();
                        var lineIsEmpty = string.IsNullOrEmpty(line);
                        var nextLineIsEmpty = string.IsNullOrEmpty(nextLine);
                        var lineAfterNext = i < lines.Count - 2 ? lines[i + 2].Trim() : string.Empty;

                        results.RemoveNext = (!lineIsEmpty && line.StartsWith("[STAThread") && nextLineIsEmpty) || // Remove blank line below STAThread attribute.
                            // Remove a blank line between a property getter and setter.
                            (!lineIsEmpty && nextLineIsEmpty && line.StartsWith("get") && i < lines.Count + 2 && !string.IsNullOrEmpty(lineAfterNext) &&
                            (lineAfterNext.StartsWith("set") || lineAfterNext.StartsWith("private set") || lineAfterNext.StartsWith("protected set") ||
                            lineAfterNext.StartsWith("internal set") || lineAfterNext.StartsWith("public set"))) ||
                            (!lineIsEmpty && line.StartsWith("[") && nextLineIsEmpty && !string.IsNullOrEmpty(lineAfterNext)) ||
                            (!lineIsEmpty && line.StartsWith("{") && nextLineIsEmpty) ||
                            (!lineIsEmpty && line.StartsWith("[STAThread]") && nextLineIsEmpty);

                        if (!results.RemoveNext)
                        {
                            results.RemoveCurrent = (lineIsEmpty && nextLineIsEmpty) ||      // Remove extra blank line.
                                (i == 0 && lineIsEmpty) ||                                   // Remove empty first line.
                                (lineIsEmpty && !nextLineIsEmpty && nextLine.EndsWith("}")) || // Remove blank line before closing brace.
                                (lineIsEmpty && !nextLineIsEmpty && nextLine.StartsWith("static void Main("));

                            if (!results.RemoveCurrent)
                            {
                                results.InsertNext = (!lineIsEmpty && nextLine.StartsWith("static") && !nextLine.StartsWith("static void Main(") && nextLine.EndsWith("()")) || // Add a blank line before a static constructor.
                                    ((line.EndsWith("}") || line.EndsWith(";")) && nextLine.StartsWith("[")) || // Insert blank lines between consecutively declared structs. (Regionerate removed them.)
                                    (line.EndsWith(";") && (nextLine.StartsWith("public") || nextLine.StartsWith("private") ||
                                    nextLine.StartsWith("internal") || nextLine.StartsWith("protected") || nextLine.StartsWith("~"))) || // Insert blank lines between class-level fields.
                                    (!lineIsEmpty && line.StartsWith("#endregion") && !nextLineIsEmpty &&
                                    !nextLine.StartsWith("{") && !nextLine.StartsWith("}")) || // Insert a blank line between two subregions and anything else that doesn't start with an opening brace.
                                    (!lineIsEmpty && !nextLineIsEmpty && line.StartsWith("}") && (nextLine.StartsWith("#endregion") || nextLine.StartsWith("#endif"))) || // Insert a blank line between a closing brace and an #endregion or #endif.
                                    (!lineIsEmpty && line.StartsWith("#region") && !nextLineIsEmpty && nextLine.StartsWith("[")) || // Insert a blank line between an #endregion and an attribute.
                                    (!lineIsEmpty && (line.StartsWith("#region") || line.StartsWith("#if")) && !nextLineIsEmpty) || // Add blank line after #region or #pragma or #if.
                                    (!nextLine.StartsWith("private set") &&
                                    line.EndsWith("}") && !line.StartsWith("///") &&
                                    (nextLine.StartsWith("public") || nextLine.StartsWith("internal") || nextLine.StartsWith("private") ||
                                    nextLine.StartsWith("protected") || nextLine.StartsWith("///") || nextLine.StartsWith("async"))) || // Insert a line between a closing brace and a method declaration.
                                    (!lineIsEmpty && !nextLineIsEmpty && nextLine.Length > 1 && line.Length > 2 &&
                                    line.Contains('{') && line.EndsWith("}") && !line.StartsWith("get {") && !line.StartsWith("catch") &&
                                    !line.StartsWith("try") && !line.StartsWith("finally")) ||                                         // Insert a blank line between properties declared in an interface.
                                    (!lineIsEmpty && line.Length > 1 && !line.StartsWith("///") && (nextLine.StartsWith("///") || nextLine.StartsWith("/*"))) || // Insert a blank line between a field and method declaration.
                                    (!lineIsEmpty && !nextLineIsEmpty && line.StartsWith("using") && nextLine.StartsWith("namespace")) || // Add a blank line between a using clause and namespace name
                                    (!lineIsEmpty && !nextLineIsEmpty && line.StartsWith("private") && nextLine.StartsWith("#endregion") ||
                                    !lineIsEmpty && !nextLineIsEmpty && nextLine.StartsWith("#endregion"));

                                if (!results.InsertNext)
                                {
                                    if (!lineIsEmpty && line.EndsWith("</summary>") && !nextLineIsEmpty && nextLine.EndsWith(";") && !nextLine.StartsWith("event") && !string.IsNullOrEmpty(lines[i + 2].Trim()))
                                    {
                                        /* If a field declaration has a summary XML comment, add a blank
                                         * line after it as well. It makes the code easier to follow. */
                                        results.InsertAfterNext = true;
                                    }
                                    else if (!lineIsEmpty && line.EndsWith("{") && !nextLineIsEmpty && nextLine.Equals("}"))
                                    {
                                        // I hate javascript style braces. Just because.
                                        lines[i] += nextLine;

                                        results.RemoveNext = true;
                                    }
                                }
                            }
                        }

                        if (results.RemoveCurrent)
                            lines.RemoveAt(i);
                        else if (results.RemoveNext)
                            lines.RemoveAt(i + 1);
                        else if (results.InsertNext)
                            lines.Insert(i + 1, string.Empty);
                        else if (results.InsertAfterNext)
                            lines.Insert(i + 2, string.Empty);
                    }
                }

                /* It seems that using any encoding other than Encoding.UTF8, including my failed attempts
                 * to detect it, end up encoding the text in such a way that the hidden unicode characters
                 * that Regionerate uses in its region names, get scrambled. */
                File.WriteAllLines(filename, lines, Encoding.UTF8);
                LogInfo(Pad(string.Format("Thread {0}", formattedThreadId), "FormatCSFiles".Length) + string.Format("\tSaved \"{0}\"", formattedFilename));
            }
            catch (Exception ex) { LogError(ex); }
        }

        private class AnalysisResults
        {
            public bool InsertAfterNext { get; set; }

            public bool InsertNext { get; set; }

            public bool RemoveCurrent { get; set; }

            public bool RemoveNext { get; set; }
        }
    }
}

And my base console application class that it derived from (which isn’t too bad).

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;

namespace Romy.Core.Console
{
    /// <summary>A base console type that enables some logging methods. Logs
    /// via TraceListener, to both the console and a file.</summary><remarks>
    /// See Zipper\Program.cs or FormatCSFiles\Program.cs for examples.</remarks>
    public class ConsoleApplicationBase
    {
        private string logFilename;

        /// <summary>Delete the file or directory specified,
        /// without throwing an exception on failure.</summary>
        public static bool DeleteFileSystemObject(string path)
        {
            try
            {
                /* File.Exists seems to return true for directories,
                 * so always check with Directory.Exists first... */
                if (Directory.Exists(path))
                {
                    var info = new DirectoryInfo(path);

                    // If path == current directory, change the current directory.
                    if (string.Compare(Directory.GetCurrentDirectory(), path, StringComparison.InvariantCultureIgnoreCase) == 0 && Directory.Exists(Path.GetDirectoryName(path)))
                        Directory.SetCurrentDirectory(Path.GetDirectoryName(path));

                    // Try to silently delete readonly/hidden directories.
                    if ((info.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly || (info.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                        info.Attributes = FileAttributes.Directory & FileAttributes.Archive;

                    Directory.Delete(path, true);
                }
                else if (File.Exists(path))
                {
                    // Try to silently delete readonly/hidden files.
                    if ((File.GetAttributes(path) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly || (File.GetAttributes(path) & FileAttributes.Hidden) == FileAttributes.Hidden)
                        File.SetAttributes(path, FileAttributes.Normal);

                    File.Delete(path);
                }
                return true;
            }
            catch (IOException) { }
            catch (UnauthorizedAccessException) { }
            catch (Exception ex) { LogError(ex); }
            return false;
        }

        public static void LogError(Exception ex)
        {
            LogInfo("Error: {0}", ex.Message);
        }

        public static void LogError(string message)
        {
            LogInfo(message);
        }

        public static void LogInfo(IEnumerable<string> lines)
        {
            foreach (var line in lines)
            {
                Trace.WriteLine(line);
            }
        }

        public static void LogInfo(string format, params object[] args)
        {
            var formattedDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff\t");
            Trace.WriteLine(formattedDate + (args.Length > 0 ? string.Format(format, args) : format));
        }

        /// <summary>This must be the first method called from Main,
        /// to be able to use the logging helper methods.</summary>
        public void InitializeConsoleApplication()
        {
            /* I prefer removing the parameters from Main and using this technique. It is always
             * consistent; the path to this exe is the first argument, and subsequent arguments
             * were passed by the user. */
            var args = Environment.GetCommandLineArgs();

            logFilename = Path.ChangeExtension(args[0], ".log");

            InitializeTraceListeners(logFilename);
        }

        private static void InitializeTraceListeners(string logFilename)
        {
            DeleteFileSystemObject(logFilename);

            Trace.Listeners.Clear();

            TextWriterTraceListener logFileTraceListener = new TextWriterTraceListener(logFilename);
            logFileTraceListener.Name = "FileLogger";

            ConsoleTraceListener consoleTraceListener = new ConsoleTraceListener(false);
            consoleTraceListener.Name = "ConsoleLogger";

            Trace.Listeners.Add(logFileTraceListener);
            Trace.Listeners.Add(consoleTraceListener);
            Trace.AutoFlush = true;
        }
    }
}
Posted in Methamphetamine, Programming | Tagged , | Leave a comment

On practicing powerlessness

Just a quick one today. When I did that outpatient program a few months ago, whenever I mentioned all the things at home that were wrong and were out of my control, the therapist who ran the group session said that I wasn’t “practicing powerlessness”.

How the fuck do you practice powerlessness? Practicing is active.  Being powerless is passive. One cannot actively do something passive. It’s one of those recovery jargon answers that I learned to hate.

It follows from the 1st step: Admission that we were powerless over our addiction – that our lives had become unmanageable.

Except I was never powerless over my addiction. Never. After I became addicted, I chose to continue using despite the horrendous consequences, because the drugs were still giving me something that I thought I needed. I wasn’t powerless when I got in my car, drove a few blocks, called the dealer and waited an hour for him to show up and give me some substandard crystal meth. I wasn’t powerless when I built a trust relationship with that dealer, so that I could talk him into selling me thousands worth on credit. And I certainly wasn’t powerless when I decided that the drugs were no longer giving me anything that I wanted or needed, and that it was time to stop.

A week from tomorrow I will be 23 months clean, then a month after that, two years. I did not fucking get here by being powerless.

On my old blog, I wrote a series debunking the 12 steps, or maybe not debunking but writing in detail why and how I disagreed with them, starting at step one. I only got to around step 8 before giving up, because they get more nonsensical and idiotic as they progress. Each step requires belief in the foundation set by the steps before it, and that foundation is built on shaky, credulous ground.

I’ve never bothered to republish those posts here, because I’m not so passionate about them anymore. Nobody is forcing me to attend 12 step bunk anymore, and I am better off without it.

Posted in Addiction, Methamphetamine, Recovery | Tagged , , | Leave a comment

Malice in Blunderland

Time for another rerun. The post that follows was originally published on my old blog on 2nd December 2013, just two months after I cleaned up. In cleaning up, I took my ex back, with her then four-month old daughter. This was my reflection back on the past, that rabbit hole that I’d been down, to which I referred as blunderland, not wonderland. The malice is what you find there, when you enter that world of hurt of drug addiction and all the evil people who are involved with and exploit addicts.


Lately I suffer with two issues. Headaches are the one I’ve had for a while, so I‘m kind of getting used to them, although it can be most unpleasant to have headaches for days at a time, to wake up with them three or four times during the night, take headache pills and then still wake up in the morning with my head throbbing as if it were encased in a vice. As if that’s not bad enough, lately I often (and by often I mean one or twice a month) dream of meth. I never dream of using it, but I dream of seeing it… mountains of the stuff… and sometimes I dream that I have used. With that in mind, and by that I mean that on some subconscious level I surely do want to use, I have to remind myself how unpleasant life became on meth.

Such a reminder can not be done without at bare minimum a cursory glance over time’s shoulder at where I ended up, but that is all I will allow myself to afford today, because this post is not about the worst of it. Instead this is about the big picture; about the fact that the overall experience of using meth for a prolonged period is a bad experience. One cannot glorify the use of drugs if one acknowledges that the overall experience is something best avoided.

Having said that, I did end up losing my house, my car, and almost all my possessions. I did end up living in a single room apartment with my son and my girlfriend as well as a drug dealer, with whom she was sleeping in front of me. Worst of all, I allowed that to happen. I saw it coming for over a year; I warned her months before every possession was lost; I assumed that she had the same sense of responsibility as myself and convinced myself that she needed to be taught a lesson. Even though I knew she was cheating on me, I was convinced that she did not realize what she was doing and that before it got to the point of no return (which it of course did get to) that she would stop. Of course it didn’t stop, and instead she would later argue that I knew what was happening so I was equally responsible. Even today, she takes no responsibility, no accountability for anything that happened. She won’t even talk about it, and does what all liars do and turns it onto me. As always, if I force the issue into a conversation she says things along the lines of my having to get over it and focus on the future (but I can’t do that because you have to acknowledge the past before you can move on), and threatens to leave saying “This isn’t working out”. I do take responsibility, but it should not be my burden alone. The guilt due to allowing it to happen is almost too much already, without having to take all the responsibility myself.

So much for a cursory glance! Anyway, those are the issues I still have on my mind now, but they were not my intended subject for this post.

An old school friend made a comment to one of my first posts, complimenting me on having climbed out of that rabbit hole. But I did go back down there for a while, before climbing out again for good. What I want to remind myself (and anybody else who pays attention) today, is that Wonderland isn’t all it’s cracked up to be.

I prefer the name I came up with just a couple of days ago as my thoughts wondered and tried to escape the headache’s vice-like grip: Blunderland, although I used to have a different name for it. When Megan and I were first together, I used to have a silly joke I repeated every now and then – every time I returned from the dealer with a gram or two of meth, I would tell her, “I’ve bought tickets to Lanny Loond, but they’re one-way.” I liked to think that she caught the joke, but she probably didn’t. Of course lanny loond is a spoonerism for loony-land, and I was trying to make light of the fact that maybe we would not make it back. And we nearly didn’t.

Blunderland is more appropriate a name, because when  you use, everything becomes a blunder, and this is not inconsequential, especially at work. You see, you are not alone in Blunderland. There are other paths there besides the rabbit hole (of drugs). Through the looking glass is another way, and there are plenty of blunderland citizens who are there because of their conceit, or their greed, or maybe just because they are mean and evil.

Blunderland is very real, because as much as it is a state of mind, it is also very much here on Earth. There are plenty of other drug users and abusers who will rob you blind, but most drug addicts are just victims. It is the people who don’t use drugs who are really dangerous.

There are always people who love to be mean, who love to fire you from your job, and when you use drugs, you give them an opportunity to do what they love doing. I once even had the misfortune to cross paths with an incompetent company director. People like him will always need scapegoats, and when you use drugs, you provide them.

But the most evil people I ever crossed paths with were people who bought and sold stolen goods, from drug addicts who were also thieves. They were the worst because they were not using drugs. They were of sound mind, not desperate victims as so many addicts are. They knew very well that the people they dealt with were using and selling drugs as well as robbing people, and they did not care.

When you use drugs, you drop off of the normal sub-culture of society that most of us form part of, and you become a denizen of Blunderland, a sub-culture that is best left to the books and blogs that describe places that do not or should not exist. And there is much malice in Blunderland.

Clarification: In case anyone else misreads this as blaming Megan for my issues, I suggest you read it again and see that I am blaming myself for not stopping her from doing any of the many things that she directly did herself, such as letting strange people into the house while I was at work, selling my possessions while I wasn’t around, renting out the garage to two different people (at the same time), not paying the rent that I gave her in cash, and many other things. As for my headaches, I’m waiting for my new spectacles (that do not tint in the sun) to arrive at the optometrist and I’ll see if they make any difference, and if not, I’m going to a doctor.

When you read this, don’t read too much into the emotional scars of having lived through such an experience; don’t blame her or me, or me for blaming her, or whatever, because that is not the point. Everybody who uses has a similar story.

Posted in Addiction, Methamphetamine, Recovery | Tagged , , | Leave a comment

More odd searches that found their way here

I’m having a mini crisis with self-confidence… not a big deal but it happens to me now and then. I’ve suffered with a lack of self-confidence since I was a child – back then I called it shyness. But whatever it is, it rears its ugly head from time to time, and lately that means my writing doesn’t have the usual conviction or passion behind it. Since I feel like writing anyway, I’m tackling an easy subject, a snarky response to some search strings that brought readers here…

Meth promiscuity paranoia

Now that’s easy… just like most meth addicts.

I suppose you got here because of the last time I responded to a search string (which was also the first time I did so on this blog. Funny how these things work.)

I’ve no idea if the person is asking whether meth makes people promiscuous, or paranoid, or both, but it doesn’t really matter because meth can definitely make you paranoid and can lead to promiscuity. It doesn’t make you promiscuous… no drug makes you take your clothes off and fuck some other random person or some other junkie or some dealer. You do that all on your own. It’s a choice just like the choice to use drugs. (You don’t get to duck on the responsibility for your actions just because you’re high. If that were the case, almost every criminal could be let off because they were high.) But meth does make you horny. Don’t blame the drug for your lack of self-control, or your partner’s lack of control, or your paranoia about your partner’s control. It’s your lack of self control that got you addicted and in your predicament to begin with. For more that actually answers the question without the sarcasm, see the post I linked to above.

Do meth have a good career?

My grammar am more better than yours.

Probably not. Meth doesn’t turn you into a monkey/donkey. It just makes you high. So if you have a high IQ, it doesn’t suddenly drop because you’re high on speed. If you have a good career and are clever, you can still work and be clever while you’re using meth. But keep in mind that the meth high is not conducive to excellent performance at work.

When you use, you stay awake for days and nights on end. The drug makes you feel awake and alert, but in reality, except for those first couple of minutes after a hit where you’re bouncing off the walls like a Gummy Bear, most of the time you are slower than normal. This is a natural consequence of sleep deprivation. You simply can’t perform well after being awake for more than a day or two.

Furthermore, meth makes you tweak. While tweaking, you become abnormally fascinated, obsessed with performing simple repetitive tasks. You get stuck doing them actually. Sometimes you can get stuck repeating something over and over for hours. And even when you work on complex, intellectually challenging tasks that require abstract thinking and high intellect, you won’t use your high intellect. No, you’ll just turn everything into simple, repetitive tasks. You’ll get stuck on a complex problem, and continue working on it at a frantic pace, making zero progress for hours, maybe even days. In short, you will find ways to fuck things up on meth, ways that would normally never happen.

Yah, I wrote some good source code when I was on meth, and came up with some clever programming solutions to complex problems. And I posted some of that code here. But so what? I don’t still have the bad code that I wrote on meth. That shit didn’t even compile.

Posted in Addiction, Methamphetamine, Recovery | Tagged , , , | Leave a comment

A little play on words challenge

Just a quick one this morning and then I must get to work… It always surprises me when I write something that I think is good, then it doesn’t get many views. It shouldn’t though, as there aren’t many people reading this anyway.

I thought yesterday’s post was really good – not the topic so much, but the words used to write it. I have this thing about alliteration (and overuse it almost as much as parenthesis) so I was especially pleased with the phrase “startled me out of my stupor with an acutely arbitrary question” because it contains both alliteration and an oxymoron.

So as I drove to work this morning, I wondered if I could come up with another. Then straight away I came up with one better:

I used to be fighting fit but now I’m fighting fat.

Yah, it’s not that great, I know. But I like it. I’m not going to try to build a topic to go around it, so I’ll just leave it at that. I like it because it is an example of alliteration, an oxymoron and a pun. (Although it isn’t an oxymoron and a pun at once, since the pun’s other meaning removes the oxymoron.)

So for the 10 or so people who actually read this… I’d love to see your contributions in the comments. My requirement is, write a sentence where two or more of the words form at least:

  1. Alliteration
  2. An oxymoron
  3. A pun

To be clear, those three are the minimum requirements. It doesn’t have to end there. If you can come up with anything clever that includes other kinds of word-play, please feel free to share.

(Honestly, I don’t know if this is a difficult challenge. I came up with my example right away, but the pun was a fluke. I think that the pun requirement makes it harder, since oxymorons are easy, and so is alliteration, as are puns generally, but all three at once is a stretch. But it’s also fun… in my opinion word-plays are better when done using a combination of stylistic or literary devices because not every reader always catches them all.)

Posted in Humour | Tagged , , , , | 1 Comment

An amusing anecdote about a girl whose strange belief sparked my interest in the psychology of belief in the unbelievable

I’ve been interested in the psychology of belief for a few years now, and only recently remembered the person who got me started on this strange fascination.

It was a time when I was not at my best… Around July 2009 I was a meth addict in a dark place at the end of a very long road that had spiraled downhill to get there. I’d lost my car, my house and nearly everything except my job, and was staying illegally in a single room with my one-year-old son and my girlfriend, and the dealer that she ended up sleeping with in front of me.

I’d lost all my friends and had nobody to turn to, so I went to a local internet cafe in Muizenberg to research rehabs as well as try to come up with a plan to get first my son, then myself, out of there. The plan didn’t come straight away because it’s difficult to do anything when you are high all the time, paranoid, sometimes delusional, always edgy, and have voices in your head day and night. But that’s not what I’m writing about this evening. The point of this introduction is simply to set the tone. That’s who I was; unstable, delusional and desperate as well as unsociable and intentionally unapproachable, trying against all odds to get my shit together.

So there I was, trying but mostly failing to wade through the quagmire of voices in my muddy mind, when inexplicably a twenty-something girl who worked at the internet cafe approached me and startled me out of my stupor with an acutely arbitrary question, “Excuse me, are you Jewish?”.

I get that a lot. Actually it’s a family thing. Maybe because of the schnoz? Muizenberg is a traditionally Jewish area; up here where I stay in a suburb of Johannesburg it’s even more so. (Here I get approached by Jewish addicts who think I look Jewish and so they figure they’ll get sympathy and money from me.)

Normally when I tell people that I am not Jewish, they politely go away. But not this girl. She was different. She insisted that I must be Jewish… That somehow I’d lost track of my true heritage. It didn’t matter what I said to discourage her.

At that point, though I’d rejected my Roman Catholic upbringing, I didn’t yet call myself an atheist. I explained to her that I used to be Catholic, that my whole family was Catholic,  going back as far back as I knew. She took that as a sign, a sign that I was truly meant to be Jewish! To her it meant that somebody in my distant past had been Jewish, and that my rejection of Catholicism was a sign that I knew it on some lower (instinctual?) level, so I was supposed to be Jewish. That is, contradicting her somehow confirmed her belief. She told me all about a website, some sort of forum I could join where I’d be able to find out about my Jewish roots. (I forget the details. This was years ago and I was very high. It’s a wonder I remember this at all.)

Thus I bemusingly came to understand her obsession. It was about “returning to Israel”. (Somewhere that she had never been.) That was the end goal… to go back to the promised land, not only her but all Jews. And into this group, for whatever reason, she had included me, a complete stranger of whom she knew nothing. She projected her fantasy onto me, and had constructed a narrative explaining who I was and where I came from, and she believed it sincerely. What fascinated me was not so much the details or even the subject of her obsession, but that she could project it onto me, a complete stranger. And she made it fit. It didn’t matter that I wasn’t Jewish – the narrative with fabricated details of my past such that I somehow “didn’t know I was really Jewish” fixed it up. Her dedication to her bizarre belief was not unlike that of people who believe in conspiracy theories, and people who think that vaccines cause autism, and other science deniers as well as crackpots. (Her obsession didn’t involve God, oddly enough. It was about being Jewish, about a sense of belonging, and it seemed that her sense of self was either absent or somehow damaged, replaced with a need to be part of something else, something bigger and more important.)

What also amazed me was that as high as I was, as mentally fucked up as I was, my mind was still less screwed up than that of this strange girl. I tried everything to make her leave me alone. (Without being impolite, because she was otherwise a nice girl. I didn’t want to be mean to her.) I even told her all about my situation at the time, my addiction, and details I haven’t written here that would be enough to scare off almost anybody. Almost anybody, but not her. All I got from her was respect and admiration. (And loads of clingy conversation. Sometimes I think that I’m a magnet for weirdos.) She seemed to think that because I was trying to get help, I was OK, and going back to the land of my ancestors with her and all the other Jews would fix all my problems. Even admitting to her that I’d had several hits before walking there, and that I was high at that moment in time, did not deter her.

At the very least, they (the internet cafe staff) could have watched me a little more closely. After all, they knew I was an addict because I told her, and addicts do crazy things… I was struggling financially, which happens when you spend all your money on crystal meth, and had found a way of cheating their system to get internet access for free. (Suspend the process of their kiosk software that monitors the time, then resume it just before leaving. So pay for a couple of minutes access when you have been there for a couple of hours.) Actually I found how to game the system by accident one day (and couldn’t resist taking advantage after that) when there was a problem with their software. It was a Windows XP system, where the kiosk internet cafe software ran full-screen and prevented visual access to the desktop, while the underlying system remained permanently connected to the internet, with an admin user logged in. (The software didn’t capture the Ctrl+Shift+Escape key combination which allowed opening a task manager and killing the kiosk process, which I did the first time. Thereafter I used Process Explorer to suspend the time logging process and would resume the process just 5 minutes before finishing.) But I digress… In the end I had to avoid going there when she was working – luckily they worked in shifts so it was a simple matter of only going there when she wasn’t on shift.

I don’t know what was wrong with that girl. I know that she wasn’t using drugs. (Trust me, one addict can spot another from a long way away.) Maybe it was some kind of mental illness – I’ll never know; but she seemed quite normal apart from her strange and obsessive belief. And I don’t know why she included me in her delusional fantasy, but ever since then, I have been fascinated with people who believe in the unbelievable. This was the spark that kindled the fire of interest for me, interest in why people who are otherwise rational choose to believe in nonsense, and that fire has spread as fires do. So thank you, strange and curious girl whose name I have long since forgotten, for inspiring this fascinating interest. I hope that one day you find what you are looking for in your promised land…

Posted in Addiction, Humour, Methamphetamine, Recovery, Skepticism | Tagged , , | Leave a comment