scary, me

You are now dreaming lucidly.

(no subject)
scary, me
Saw The Wind Rises yesterday.

I really, really want Miyazaki to do the next Way Things Work disc.

The film was full of callbacks to his other work--I mean, more than the usual reuse of character design, there were individual frames that were "shot" just like old ones.

And the script was tripe. Pity.

This entry was originally posted at Please comment there using OpenID.

(no subject)
scary, me
I slept a lot today.

I avoided coding until pretty late in the day. When I did code, it went well.

I still feel blank.

This entry was originally posted at Please comment there using OpenID.

(no subject)
scary, me
birthday was today. I celebrated by going to dinner with a friend and coding moar. Was nice

This entry was originally posted at Please comment there using OpenID.

scary, me
I was very depressed this morning, and am less so now.

I essentially gave myself permission to do whatever I wanted today, as long as I was doing something, so naturally I defaulted to coding on LiSE. I've nearly got the map editor working again.

I also told myself to do routine, and for the most part did not. Actually I have not had many days where routine was actually routine in the sense of getting done without effort. But I have no other word for that particular sequence of actions.

I want to chat with my friends more, but am uncertain whether this is due to being lonely, or out of some sense of obligation, as if I think I ought to feel lonely.

This entry was originally posted at Please comment there using OpenID.

"Porting" igraph to Kivy
scary, me
Technically, I did change the code! So it's a port. A very small one.

I'm using Kivy to ease the process of making a user interface for LiSE. As a bonus, or possibly the main benefit I forget, Kivy works on Android and iOS devices. All you have to do is compile a Python distribution with the modules you need, for the device of interest. But a lot of Python modules are written in C, and therefore need to be recompiled. The cross-compilation toolkit for Kivy, creatively named python-for-android, comes with a decent-sized menu of "recipes" for cross-compiling various libraries in languages not-entirely-Python. They're just shell scripts with a certain API. That API is not hard to grasp, or wouldn't be if it weren't so miserably documented.

Every recipe has, in effect, a header section where you declare variables in a certain naming scheme. Here's the header I wrote for igraph, the library I'm using for the pathfinding and world model:

DEPS_igraph=(c_igraph python)
BUILD_igraph=$BUILD_PATH/igraph/$(get_directory $URL_igraph)

BUILD_foo and RECIPE_foo are always more or less the same, usually only changing the name of the package where it appears. VERSION_foo should probably conform to whatever version identification scheme the package uses. DEPS_foo is a list of other recipes, which will be built in order prior to building this one. URL_foo is where to get the package--I'm pretty sure only one file is permitted here, but the script (responsible for managing the builds) seems pretty amiable about unpacking whatever archive format you give it. At last, MD5_foo is what you get from the shell command md5sum python-igraph-0.6.5.tar.gz or whatever your archive is named.

The remainder of the script is a series of function definitions, of which three are mandatory: prebuild_foo, build_foo, and postbuild_foo. All must return true, but there doesn't seem to be any other checking done to make sure your script is well behaved. I elected to be polite and put calls to patch in the prebuild function. It would also be nice to define shouldbuild_foo, which must also return true, but if it exports the environment variable DO_BUILD=0, none of the functions beyond itself and the prebuild will be executed.

The build function will look very similar to whatever you have to do on the shell to build your package locally, with a few additions. You should begin by changing to the directory $BUILD_foo that you helped to define in the header, and when it comes time to actually compile, run the special command push_arm to make your x86 computer pretend it is an ARM computer. pop_arm at the end to be polite; a few packages need to compile stuff to run on the build machine and not the host.

To run, you have to supply the path to the Android NDK, and it will look up its specialized versions of common build tools there. But it won't alias them. It will just add them to the PATH, and define some environment variables pointing to the NDK's versions of certain common build tools.

  • make becomes $MAKE

  • ld becomes $LD

  • cc becomes $CC

  • c++ becomes $CXX

  • ar becomes $AR

  • ranlib becomes $RANLIB

  • strip becomes $STRIP

  • python becomes $HOSTPYTHON (do make sure to depend on it)

  • pip becomes $PIP

You can define CFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS like you normally do, but keep in mind that it's been preset to what's in the NDK, and some other recipe might want to use it. Put it back the way it was when you're done.

Many configure scripts let you specify a prefix. This may actually be set for you in the environment, but if it doesn't work out, install things into $BUILD_PATH/python-install.

I ran into some unusual difficulties when it came to linking. Android has a version of the standard libstdc++, but it's pared down, and doesn't have everything igraph needs. I didn't have to build my own or anything--the NDK provides a bigger version under the sources/cxx-stl/gnu-libstdc++ directory. But I had to include that version explicitly at every step of the compilation.

It took a very long time to diagnose that problem, because I had been abusing the CPPFLAGS and LDFLAGS and so forth--really just defining my own when I didn't need to, but that was enough to prevent python-for-android from linking my libraries together at the end. Statically. It does this automatically, but I guess something in those flags will disable that feature, and the run-time linker on Android isn't clever enough to cope. It remained under the impression that I had not installed the non-Python portion of igraph, and I spent some days believing that I could change its mind.

The library f2c, included in igraph, has include directives for a header file fpu_control.h that doesn't exist on Android, and to all appearances isn't needed. Simply commenting those parts out, as well as the bits that depended on the parts, turned out to make it work fine.

This entry was originally posted at Please comment there using OpenID.

oh hi
scary, me
Semester's over.

My routine sort of fell thru around the half way point. Need to reinstate that.

Here is the fruit of my senior project. It will be difficult to appreciate unless you're savvy to Python or at least half as freaked out about the artistic potential of computer games as I, in which case check the readme. It's pretty technical, on account of it's the senior project for a computer science degree and I needed to show off my majesty. Still, maybe you can tell what I'm going for.

My grades otherwise weren't very good. I got obsessed.

I'll have to take a physics course over the summer and then I'm done. Well, I guess people will expect me to attend some kind of ceremony? But my understanding is most graduates there just wear silly hats and take a paper from a guy so whatever.

This entry was originally posted at Please comment there using OpenID.

evening review
scary, me
Pretty good day at work. Mostly I did research on how to diagram our database. I understand the nature of a "degree" better now. Later in the day I got a different research assignment, to the effect of explaining the concept of database "cubes" to my boss--as near as I can tell, these are tables that contain your whole database, which you don't query directly. Instead you have your software run every possible query ahead of time, and then call up the right one.

I used a new technique for keeping myself on task. It's a new way of taking notes, not on the content of the task, but on the process of it. I drew three columns on paper, labeled them Input|Process|Output, filled in the first and last of them based on the specification of the work to be done, and filled in the middle as I made decisions about how to go about it. This is my first time using this approach, so I can't quite tell if it worked, but it kind of felt like it did.

I got a haircut after work. Then I went home and flaked out. That's not terrible, I just wish I'd done something enjoyable at least.

This entry was originally posted at Please comment there using OpenID.

(no subject)
scary, me
Hi, internet.

I'm not feeling well lately. I doubt I have any very compelling reason for feeling this way. The stresses I am reacting to are ordinary, and I know how to deal with them generally. I need to refine my approach a bit, and I'm having trouble with that, because I'm not feeling well, and planning for the future is difficult.

It may be difficult because I haven't examined the present closely enough. To examine the present I need to examine my feelings, since they are rather directly relevant to my plans. If I don't take account of the way I feel, I'll do things like set unrealistic objectives that seem realistic under the assumption that all my emotional problems are taken care of.

Any amount of self-reflection upon my emotional problems is going to sound very similar to self-pity. Maybe it is self-pity. I'm not sure. Is it always called "pity" when you try to empathize with sorrow, your own or someone else's, and want to make it better? Is that condescending? Regardless, this is what I need to do. It will probably sound bad, even to myself. So I shouldn't dwell on it any longer than useful, and I shouldn't try to share it with people who aren't already interested in it.

The people who are interested in my self-pity--who empathize with it--are they pitying me as well? Is that bad? It's not pleasant. Should I appreciate the concern anyway? I don't know.


I'm feeling disappointed in myself. Not for any particular failure. There are a few that I can point to, but they're either recoverable, or they're old news. It's stupid to be disappointed that I didn't put enough effort into high school, or I shut myself off from my would-be friends. I don't even remember those experiences very well.

What to do about sorrow that is caused by things that do not warrant sorrow? My therapist has done plenty to persuade me to stop beating myself up, which is good for damage control, but doesn't seem to make the feeling that's already present go away. That requires "expression," which is what you call it when you do something that the emotion provokes, thereby putting the "emotional energy" into the action.

I don't know what emotional energy is. I don't know how it behaves in myself or others. I treat it as a kind of desire: a person who is angry wants to break something or hurt someone, although it's a vague desire that might be satisfied by doing anything that kind of feels like breaking something. The intensity of the emotion is determined by how much energy it has, I think. Intensity manifests by impairing a person in every aspect apart from what the emotion "wants", and in making the desire more "desperate," causing the person to take more risks and unseemly actions to fulfill the desire.

I guess that's a decent model. I don't know whether it corresponds to physical reality, or how, but it's got enough variables that I can probably map them each to something tangible, if and as I find it.

So. Despite knowing that I can deal with all of my present problems, and can't deal with my past ones, I persist in feeling something that wants me to deal with my past problems, and not with my present ones. Sometimes it feels like sorrow, sometimes fatigue, sometimes panic. Is it all the same emotion? Well, emotions aren't clearly delineated in any model that I know of, so I'll assume it's all one emotion for simplicity's sake.

I can focus on the present for brief periods. Usually I do it by writing posts like this one. Lately it's been mostly on paper in private. I haven't shared most of that stuff because it wouldn't make sense to other people, much of it deals with work and might be confidential, much deals with school and thus only of interest to those who want to help with that. And because I like the idea of having some amount of organized thought that's just for me and not for you. I write it by hand so that there's an obvious physical distinction between that stuff and the blog.

When I'm doing work apart from writing about the present, I get focused on the work to the exclusion of everything else. Classic monofocus. This is rarely very helpful, because I'm unlikely to have a thorough understanding of just what I'm supposed to do. Without looking outside of the task I'm locked onto, in order to check if that's what I want to be doing, monofocus makes me very efficient at doing the wrong thing. It helps somewhat to keep detailed notes as I go, thus taking myself out of the task for just long enough to describe it.

If I want to focus on the present more, I'll have to devote time specifically to that task. It's inconvenient. I'd prefer to learn how to do it all in my head on the fly. But that won't happen soon, if ever.

To do that is to act against the desires of this emotion I am having trouble with. It happens that acting against my emotions is obviously good for me in this case, but it makes the emotion feel worse. I might get a nice glow off a job well done, but these emotions don't cancel one another out. Productivity doesn't extinguish sorrow. Doesn't even obscure it.

Productivity can distract me from my sorrow, but that makes both emotions harder to deal with. I have to make the productivity interesting, rather than merely... productive, in order to make it distract myself and others; and I have to keep my point-of-focus moving, to prevent it from settling anywhere the sorrow might turn out to hide.

It hides everywhere.

I need to express that sorrow somehow. I don't know how that works. I've seen some things that people do to express their sorrow, crying at funerals, setting stuff on fire, that kind of thing, and none of it really appealed to me or my sorrow. The only way that did appeal was to fix whatever the sorrow is about, and that's no longer possible. Ships have sailed.

Maybe I could fix something like the problems that the sorrow is about? What would that be?

  • Find someone with problems similar to the ones I regret. Help them.
  • Work like a historian to establish the relation that my old problems have to my new ones. Now the new problems contain the old ones, perhaps mutated.
  • Talk about it a lot and hope my id is fooled.
  • Write a story where a character solves the problem that I missed the chance to solve. (more generally, art therapy)
  • Cry. This has never worked very well for me. When I did it I got stuck in a feedback loop and cried about crying, which was pretty useless and demeaning.
  • Punch something?

This entry was originally posted at Please comment there using OpenID.

The Blog
scary, me
I haven't posted in a while. Not for lack of things to say, but for ack of interest in saying them in the way I like to say things.

I like to write stuff I like to read. That's a high bar. I end up including far deeper analysis than is necessary or useful, because that way I can jam in lots of dependant clauses. Maybe I get better analysis, too. I don't know.

If I want to use this blog as a journal, I need to get cozy with writing low-content entries. Most will be along the lines of "here's what I did today." This might be useful information, and besides, it may be my only way of remembering a given day. My memory for mundane details isn't very good.

If I can't remember what happened on a given day--did it really happen? Theoretically, perhaps it did, but I won't be able to theorize without the memory to do it on.

So perhaps I can put up with those memories being a little bit vague, if it means I can have them at all. I don't like existential ambiguity.

This entry was originally posted at Please comment there using OpenID.

scary, me
I lack motivation.

To get motivation, I need to form an emotional association between what I want and what I need to get it.

To form an emotional association, I need to go about doing one thing in a way that evokes the emotions of another thing. To form an association with something I want, I need to find bits of what I want that evoke an immediate, visceral emotional reaction, and insinuate them into whatever I need to do.

I am not in the habit of finding the visceral bits of things. I'll need to practice.

To viscerate something is to find the visceral bits of it.

To enviscerate something is to insinuate those visceral bits into it.

This entry was originally posted at Please comment there using OpenID.


Log in