Rough Book

random musings of just another computer nerd

Category: Nerdy Stuff

Ethical egoism is harmful

**Note**: *This is a rambling argument against ethical egoism; I’m saying that it doesn’t make sense to reject altruism, especially using evolution as an argument, and in fact, evolution can be used to explain how altruism can be evolved. I’m not talking about possible solutions or theories of socio-economic organization. Obviously, philosophy informs those ideologies and the rejection of ethical egoism has implications in that regard. But that’s another topic.*

I can’t believe that ethical egoism is even considered to be a valid moral-framework. It essentially legitimizes being a selfish asshole who has no regard for the feelings of others; a narcissistic psychopath would be the supreme ethical-egoist. This is absolute nonsense. It is argued that altruism doesn’t “make sense” because looking out for another person when it’s not even in your interest doesn’t jive with “natural selection” (something right libertarians are in _love_ with). That’s still generally true; evolution is ruthless competition — the amoral laws of nature or the “law of the jungle”. But there is also emergent complexity.

When you start dealing with agents that not just aware of themselves, but also _other_ agents like them, then they must necessarily be aware of the consequences of their actions, on such agents. This was a foregone conclusion, I think, once sexual reproduction evolved. At some point, a creature would evolve that needs to be aware of opposite sex, and needs to be able to maximize its chances of reproducing with that opposite sex. That requires an internal cognitive framework (or at least embedding so that we don’t have to quibble about sentience) that can represent an “other”. Naturally, this will give rise to cooperation, because even by chance two agents can discover that their chances of success at gathering resources (food; i.e., energy) is maximized if they work together. From here it’s not too difficult to see how packs, herds, and flocks evolved. Once the brain already has a sense of the opposite sex, it’s not hard to extend that to other members — I would argue that that would have necessarily evolved at the same time as awareness of the opposite sex because agents usually have to compete with members of their own sex for access to the opposite. Hence again, even by chance, it is possible for agents to discover that by working collectively, their chances for success are maximized. This is especially observed in pack animals from wolves, and in primates, especially in us.

If early humans only looked out for themselves, we would have gone extinct. This is because by himself or herself, a single human-being is not a formidable predator; we don’t have big, sharp, teeth or claws. We aren’t especially hardy either; we don’t have fur and we are comparatively frail when compared to other predators that occupy the same niche. This is true for many primates as well. But what maximized the chance of not just group, but _individual_ success and survival, is working together _as_ a group. To do that necessarily _requires_ altruism, since the agent _must_ be able to balance individual needs against the overall well-being of the group. For example, when a group is attacked, healthier individuals will protect the injured, old, and young — this puts them at more risk, but they do it regardless because group survival is only guaranteed by the protection of those who cannot protect themselves. With humans this reaches a different stage. No longer guided by the blind evolution, our sentience lets us explore the solution space of social-organization even further. Our sense of _self_ , our metacognition, lets us _question_ norms and wonder about _other_ social arrangements.

But that one can explore this solution space means that one will encounter both _bad_ and _good_ solutions. Ethical egoism is bad solution. That it has been conceived of, doesn’t give it any validity. Individuals purely acting in their own self-interest may lead to a functional society, but it is not one that is necessarily equal (it is highly improbable+ that it would be); where the rights of a percentage are not being continually oppressed — disregard of the rights or feelings of others necessarily leads to that. As human beings, our chances of survival are maximized by having concern _about_ our fellow humans. In these times, we’re talking about the survival of human civilization itself.

Ethical egoism as a moral framework should be rejected.

+*I have this intuition about a game-theoretic agent-based framework that could perhaps provide evidence for this. I would need to use an inequality measure of some sort and then run thousands of simulations to get a distribution of values for the coefficient, and the parameters (types of cost-functions, basically) that produce those values. I haven’t fully thought it through because I have other stuff to work on, but it’s an experiment I’d like to try one day.*

Sci-Fi Fever Dreams

Yesterday when I finally fell asleep, I was running a fever of 102.5 (it broke last night and I feel much better today – I think I’m over whatever I got). I then had a dream I was in a TV show – something like Stranger Things. At least that’s how it started out. Something weird was going on at some house where there was a hole to a parallel dimension and a team of investigators had shown up to check it out. I was part of this team. For whatever reason I had a sweet pair of polarized sunglasses with me. Don’t know where I got them from, but they looked really cool and they most definitely didn’t belong in the 80’s. Everyone kept talking about how cool my shades were and I agreed; they were cool.

We were looking at the lawn where there was a burn mark due to the paranormal occurrences at this house, when I noticed that I would see a strange pattern on the lawn only when I wore the shades. No one else could see it. I lent my sunglasses to the other investigators and then they could see the pattern too. When they wondered why, I said “Well, my glasses are from 2016” (as if that would explain everything). They laughed because it was only 1986. I think at that point I realized that I had somehow time-traveled to 1986 and ended up as part of this team. Anyway, I then realized that the pattern I was seeing on the lawn was basically a series of gears; kind of like what you would see in a clock. Furthermore, the gears were moving. That’s when I realized that what I was looking at was time itself! The glasses helped me view the entire dimension of time using this metaphor. But not just view it…

I decided to say “Go back 10 seconds” while wearing the glasses, and I went back 10 seconds in time! So apparently that was how I had arrived in 1986, but I had forgotten that critical piece of information. I don’t recall what else I did with my new-found power but I vaguely remember time-traveling to 1991 and ending up in my old house in Darsait, Muscat as my younger self. So it appeared that the glasses had a sort of Quantum Leap-esque power too. Unfortunately at this point I either woke up or the dream transitioned into something else because I don’t remember what happened next.

My data-recovery story

I was looking through wayback machine at snapshots of my website, when I came across one from 2005. It reminded me of something I had almost forgotten. At some point in 2005, the network card in my FreeBSD server started to die. I got myself a new card and set about replacing the dying one. I can’t recall why anymore, but I guess I had needed to disconnect the hard-drive at some point. I remember that after I plugged it back in and booted up, I was greeted by a screenful of terrifying error-messages. Something horrible had happened to the drive that held my home directory, my website source-code, and my database. I had lost about 6 years worth of posts and images on my website. My first instinct was to power down the machine to prevent anything more being written to the drive, which I immediately did. After that I think I tried a bunch of disk-recovery tools to try and recover my data. But this was difficult because the filesystem was UFS. I can’t remember if there were any UFS recovery tools at the time, or if I tried them, but I remember having tried almost everything I could think of.

Out of desperation, I think I finally decided to use dd. I started dumping the data from the drive using the lowest size-setting possible in dd (I want to say it is a byte, but I don’t really remember). I then piped this into a perl script that would examine each byte, looking for magic numbers. The drive had been corrupted so badly that there wasn’t even any trace of a coherent filesystem anymore. I knew that the data I was getting were most-probably fragmented, but I didn’t care at this point. I would guess the file-type by looking for magic numbers, and then I would start dumping that data into a file until I found an ending marker, or if the file-type didn’t have one, until the start of another magic number. I remember having various settings in the script so that I could tune its behavior, especially when dealing with false positives. My priority was to retrieve my pictures, website, programming projects, and database. For my source-code I only had to look for ASCII data. For pictures I looked for file markers for JPG, PNG, and GIFs. The database was difficult though, because I was using MySQL. By sheer chance, I had decided to take a SQL dump of my website’s database the day before for backup purposes (ironically, on the very drive that would die the next day). This was ASCII data, and so it was one of the first things my script found.

I ran this script over a couple of hours I think, and then for most of the next day for good measure. Then I began the tedious process of sifting through these files, weeding out false positives. All said and done, I retrieved a good chunk of my data. I think I got back around 80% of my pictures, and almost all of my code and website source. It was a scary few days, but I’m glad that my desperation drove me to try something like this!

Doing front-end development IS such a pain

This is so true that it’s hilarious. And sad. Any time I try to do something a little nontrivial for the front-end, it goes downhill so quickly. It’s like you are at this bizarre Home Depot with a million tools and you aren’t quite sure what they do because the most of the instruction manuals are missing pages or are just completely absent. There are very few that are complete.

You went there trying to get some nails and a hammer to hang a picture at home. But the nails only come in package that includes a lava lamp, a sledgehammer that weighs 50 lbs, and 217 blocks of assorted shapes, sizes, and colors. You get a hammer that seems to be the most popular but then you read a blog post from a carpenter ninja rockstar who has come out with a new hammer-design (and a cool name: “Hamm.ür”) that everyone is raving about and is a huge improvement over the new one and has started a new company that is already building and selling it. Home Depot also just happens to have it. You decide to get the new one; the old one wasn’t that actively supported by the manufacturer anymore anyway. In fact, it was just made by one guy in his garage and no one had seen him in a year and he rarely answered his phone or responded to emails. The new hammer does also come in a package with other stuff but at this point you really just want to hang that picture because that thing has been sitting against the wall for months.

You get home and finally start to hammer in the nail but end up burning your house down because the hammer replaced the lava lamp’s power adapter with a bare copper wire that set your curtains on fire. When you complain that using bare copper is unsafe and that they shouldn’t come with hammers or replace power adapters in a lava lamp that you didn’t even want in the first place, because seriously why the hell does anyone sell lava lamps with nails, you get told “Stfu noob! Copper is like the second-best fucking conductor and it is cheaper than silver and bare copper is so much lighter than a whole stupid adapter; seriously weren’t you just complaining about not wanting extra shit with what you buy?”

Don’t use class literals as type-tokens

Generics were added to the Java language within J2SE 5.0, and there was much rejoicing. It was finally possible to deal with containers in a type-safe manner. Prior to the availability of generics, Java developers had to do things like this:

List people = new ArrayList();
people.add(new Person("Donkey Kong"));
people.add(new Person("Guybrush Threepwood"));

Person pirate = (Person) people.get(1);

This kind of code is very fragile since it is not easy to keep track what is inside a container. If at runtime, the object you retrieve is not of the type that you’re expecting, you can get a ClassCastException. It is also remarkably easy to pollute a container by shoving objects of different types inside there, which makes it even more difficult to keep track of the types of the objects inside. Workarounds included littering code with instanceof checks, or creating a wrapper class (for example a class called PeopleList that would delegate to an internal List instance) around the container so that you could have control over the types of objects being inserted.

When generics finally arrived, people were ecstatic because now you could do things like this:

List<Person> people = new ArrayList<Person>();
people.add(new Person("Donkey Kong"));
people.add(new Person("Guybrush Threepwood"));

Person pirate = people.get(1); //It just works!

This meant no-more ugly workarounds, which means that things are awesome! Right?

Read the rest of this entry »

Heroku template for Spring 4 app with Oracle Java 8 and Tomcat 7.0.54

I’ve been playing around with Heroku at work for the past week or two. Heroku is pretty awesome if you want to get an app up and running quickly. Heroku does support Java and they have a few Java templates. Their current offering for Java uses Spring 3 and Tomcat 7.0.54 with Java 7. However, the version of Spring is somewhat older and they also use OpenJDK’s Java instead of Oracle’s Java. I wanted to try out Java 8 and also use a newer version of Spring so I upgraded the existing template to support both of those (I used a forked version of a custom buildpack for Java 8). I also had to update Heroku’s Web Runner to use Tomcat 7.0.54 (I have a pull-request waiting but I’m not sure if/when it will get approved so I have an artifact on GitHub that Maven can pull).

You can check out the template here.

How I got a medal from the Army for writing code

In 2005 my National Guard unit was deployed to Iraq as part of Operation Iraqi Freedom. My MOS (Military Occupational Specialty) in the Army was 92A, which is basically a logistics and supplies specialist. My job was to order parts for mechanics, pick them up, return old parts, manage HAZMAT, dispatch/return vehicles from missions, and handle licenses. I also did a few other things that I don’t remember right now. Anyway, at the time, the heart of this system was a tool called ULLS-G (Unit Level Logistics System – Ground). I say “at the time”, because shortly after we came back, ULLS-G was replaced by SAMS-E (Standard Army Maintenance System – Enhanced), which incidentally uses Oracle as a back-end database. Compared to SAMS-E, ULLS-G was a dinosaur. I had used it quite a bit, of course, having been in the Army for about 4 years by the time I was deployed. It was a complete pain to use it. ULLS-G was a DOS application (yes, MS-DOS) and most of the computers I used it on at the armory were only running DOS (this was circa early 2000’s so it wasn’t too uncommon to still see DOS systems around). By the time I was deployed most computers were running WinXP/2K or something like that, and so you could run ULLS-G in “MS-DOS compatibility mode”.

Read the rest of this entry »

Comments were broken for a while

Commenting on this blog was disabled for a while… I think it was due to Akismet misbehaving or something. I’m not sure. Either way, you should be able to comment now. I will be slowly adding anti-spam stuff back in.

The image that lied about itself

A few weeks ago, I ran into a puzzling issue at work. Someone was uploading an image which made it past our file-size checks, but caused an OutOfMemoryError and a heap dump when the code attempted to resize it. The information we had from the heap-dump was that it was trying to allocate memory for an image whose resolution was 18,375×11,175. What didn’t make sense is how this image was even getting through our file-size checks, because there is no way we would ever let in an image of that size.

In the code, we have a global limit for the largest file we will accept. We also have a separate limit for image uploads. If the image is over this size, but under the global limit, we will resize the image to a smaller size. The strange part was that the large image was making it past the global check, which meant that the size of the incoming data was below the global limit, but above the image-size limit. How could this be?

On a hunch, I hypothesized that perhaps the entire image wasn’t making it through. Perhaps only a part of the image was making it through with its header left intact. In an image file, there is usually a header that conveys information about the file format, the color space, and the resolution of the image! I figured that even though the data are incomplete, enough information was present in the header to enable the resizing code to make sense of it. When it tries to allocate memory for this image, based on the resolution it gets from the header, it runs out of memory!

To verify this, I manually hex-edited a file that was of proper size to have a ridiculously-large resolution. I then uploaded this file and was able to witness the behavior happening even though the file was of the proper size! So what’s the lesson here? Don’t only rely on file-size limits for images; you have to look at the resolution as well!

All original content on these pages is fingerprinted and certified by Digiprove
%d bloggers like this: