# Some Nerdy Stuff

## July 13, 2013

### Kings and Legends Combine Optimization

Filed under: Uncategorized — aaronls @ 8:48 pm

Often when combining cards, I want to know how many cards are most efficient for combining.

Sometimes you might be close to the last tier and you want to use all your cards to get 80-100% chance because you want to almost guarantee success.  Other times when combining lower cards you just want to minimize losses.  Is it more wasteful to use 4 cards for a 60% chance or 5 cards for a 80% chance?  There is no clear choice especially when the probabilities for combining one tier of cards is different than probabilities at higher tiers.

Let’s consider 5 attempts:

4 cards with 60% success rate: 5 attempts x 4 cards consumed == 20 consumed.  Out of 5 attempts 60% succeed, so that gives an average of 3 cards.  So it cost us 20 cards to make 3 cards of a higher tier.  That’s 20/3 == 6.66 cards per higher tier card.

5 cards with 80% success rate: 5 x 5 == 25 consumed.  Out of 5 attempts 80% success, so we get 4 cards.  25/4==6.25

So using 5 cards will give us an average of 6.25 cards consumed per higher tier card.  This is a lower cost than the 6.66 when using 4 cards per combine, so using 5 is more efficient.

To simplify this calculation, you can just take the number of cards and divide by the success rate(as a decimal).  So 5 at 80% == 5/ 0.8 == 6.25.  And we see 4 at 60% == 4/0.6 == 6.66. If combining 6 cards gives 100%, then 6/1.0 == 6 which is a lower cost than the 6.25.  So don’t forget to do the calculation for the 100% case as well, as it might be the most efficient.

Conclusion:

So in conclusion it’s easy to calculate the average cost where N is the number of cards being combined, P is the success % as a decimal, and C is the average cost per successful combined.

N / P = C

Just add one card at a time, and perform this calculation for each probability, and whichever cost is lower is the best choice.

Note: This logic doesn’t apply to blacksmith enchanting, because failure doesn’t just cost you the gems you used in the attempt, it can also cost you the previous upgrade since failure can result in a downgrade.  This makes it more challenging to optimize.  It seems better to aim for much higher success rate on the enchants to avoid a downgrade, except the first one since there is no chance of downgrade.

Advertisements

## May 23, 2012

### Cloud Compatibility API’s

Filed under: Uncategorized — Tags: — aaronls @ 7:35 pm

IMO cloud services are just services.  There is nothing cloud about them.  From an end user perspective, whether or not the service is hosted on a dedicated server or on a cloud, there is little difference.  I usually have the same amount of vendor lockin.  Your use of these services are so small, you probably cannot differentiate between one service that is not scalable, versus the other which is.  Only customers who have huge spikes in usage would really be concerned with the benefits of a cloud host.  So really many of the uses of “cloud” to me are pretty silly.  Anyhow, I use three “cloud” services.  A password manager, a bookmark manager, and an email account.

My business relationship with the hosts of these services falls into three categories:

1) I get the service for free, they get ad revenue.

2) I get the service for free, what they get IDK(I have never seen them display an ad to me).

3) I made a one time payment for a tool which saves data to a cloud service.

#1 is the only service I am still happy with.  The other two have no real financial motivation to keeping legacy users happy, and therefore have been on a downward usability spiral.

What frustrates me is the effort I must make to migrate to another service, and that none that I have found are as good as the other services used to be.  Should I want to implement the pieces which are broken, I really can’t because there is no layer that I can wedge my own functionality in.  The whole stack, from client to server, is proprietary and has no interoperability layers.  Even if I write my own solution, I need a host for some executable code.  This rules out shared web hosts, leaving only cloud computing hosts like Amazon or a dedicated host.  The former leaves you somewhat locked in to their architecture, and the latter is far to expensive to use as a personal service.  Steps can be taken to layer your architecture to make it more portable to other cloud computing systems, but this is not a trivial process and many solutions have drawbacks.

I see two alternative or possibly interworking solutions to these problems.

1) Standardized data storage API which various hosts supply.  Imagine being able to go to DropBox, or SkyDrive, or your data storage paltform of choice, purchase space, then point all your cloud services at them saying “Store my data there”.  In combination with this, some standardized APIs that allow you to setup cross provider redundancy/sync.  Clients would be able to automatically failover to the other service whenever one is down.  You would be protected from vendor lockin, or any of the many unfortunate things that can happen to your data when you really on a single company for that data.  Additionally, these providers should offer a reduced redundancy pricing option, where they do not backup your data, and instead you depend upon the redundancy offered across the multiple providers.

Everything from password managers to bookmark managers would utilize web APIs to persist your data to the storage providers which you have purchased space with.  Whether or not the data is encrypted before it is stored in the storage service is up to the author of the tool.  The problem with services like dropbox is that you usually must take steps to encrypt your data if you want it protected in the case they have a malicious employee or are compromised by a hacker.

2) Aside from the standardized storage API, the services/clients that utilize this API, should share some standardized file formats or APIs.  Perhaps even the service software should be open source.  Consider subversion for example.  It is free and open source, yet there are lots of service host making money off of it.  How?  Well hosting your own subversion server is usually cheaper if you rent shared hosting for it.  You can instead purchase hosting from a variety of providers.

The important thing is if you want to utilize your own systems to host the service, you have that option.  If you want to switch to a different service, you have that option.  Your data is stored with the storage providers, not with the service application host.  Why are you paying the service application host?  Because they are providing the compute hardware.  They installed the server software and configured it.  They did all those little things that they are good at doing, and can do quickly and inexpensively, which would instead take you hours upon hours to do yourself.   They monitor the systems.  They can setup the system to notify you if one of your redundant storage providers goes down(meaning you are still online with your remaining storage providers).

For performance reasons, service providers could offer both the application hosting and storage hosting(similar to Amazon) yet still have redundant failover and vendor flexibility because both services interact through a standardized API.

There may be services and APIs like this already.  If there are, or if there ever was, the key will be lots of developers creating various services or clients that make use of these APIs.  Initially people would probably install open source services and storage providers on their own hardware, but as hosting companies see an opportunity to make money, they will install the services themselves and begin offering shared or cloud hosting options that expose these APIs.

Unfortunately it is something I really don’t have time to work on, or else it would probably be something I’d be very interested in prototyping and thinking about some of the grittier details.

## February 1, 2012

### Stop The Hate

Filed under: Uncategorized — aaronls @ 1:38 am

I really deplore people forwarding bogus hoax emails and reposts on facebook that spread lies, particularly those that are designed to incite hatred. In this case someone, who I had previously had considerable respect for, was reposting this hoax:

http://www.snopes.com/rumors/lapelpin.asp

Except instead of it being about a US lapel pin, it was rewritten to be about an Australian flag lapel pin, taking place in Australia. Basically someone took this hoax email, reworked it, to appeal to Australian bigots, and tagged on the typical “Repost if you agree” bullshit:

http://www.hoax-slayer.com/australian-flag-muslim-women-lapel-pin.shtml

There is a reason these kinds of things have to be reposted for them to be seen by anyone, and that’s because they are false. If they were true, then some reporter at a major news network would have jumped on such a story, and you could easily link to the article instead of copying/pasting the entirety of the article.

Anyhow, I linked several articles detailing actual true incidents where Muslims have risked their lives to help westerners and non-Muslims. There are many good people among Muslims, and while we may have differences of opinions and considerable clash between our cultures, we should not let this descend into spreading dirty lies about one another that do nothing but foster hatred. I went on to craft my own response into the torrent of bullshit that was unfolding. I think it is time that someone actively highlight the good qualities of Muslims, and speak out against the lies that are being spread about them. Here was my response:

Everyone on both sides has contributed fuel to today’s conflicts. If you look back at the west’s involvement and the Soviet Union’s involvement, both supplied weapons to opposing sides. The US has been involved in supporting groups that later turned out to be extremist groups. Israel and the surrounding Arab nations have taken very aggressive actions against one another many times. It is easy for any Arab, Israeli, American, Australian, etc. to pick and choose any of these incidences as a way to justify their indiscriminate hate or violence against the other side. Until everyone decides to stop being such whiny fucking babies about the past, history will perpetually repeat itself, and undeserving innocent people will be caught in the crossfire.

1) Stop being such whiny fucking babies and get over the past.
2) Stop being so gullible and falling for every bogus email you get forwarded or reposted on your wall. Read some legitimate news sources.
3) Stop grouping people together by region, country, religion etc. and say they are all guilty of something. It is unfair to the non-aggressors among them. Just like the fictional story about the checkout girl and the Muslim woman, the woman unjustly grouped all Australians together and accused them of bombings. In the same respect, we should not group all Muslims together and try to spread propaganda that paints them as hateful people in this way.

Groups like Al Qaeda and INDIVIDUAL extremists are where our focus should be. The members CHOOSE to be a part of these groups, and therefore it is legitimate to say that they are our enemy, because they have essentially declared themselves our enemy.

Someone born into a certain religion and region however, didn’t choose to be born there or raised that way. Nor do they necessarily agree with the actions of their neighbors.

You might say that they should choose not to be Muslims just because some other Muslims are terrorists. But that would be like telling a Christian that they shouldn’t be Christians because some priests got caught molesting children. Muslim terrorists are not true Muslims, as their actions violate the Qaran. Many Muslims have spoken out against the beheadings and suicide bombings on westerners.

If we make generalizations and try to say all Muslim people of “such and such” region are terrible, then there will be those among them who have been unfairly grouped into this judgement that we have made. We take an aggressive stance towards all of them, then we are victimizing those who did not deserve our aggression and hate.

If a Muslims hates you when you’ve done nothing wrong, then you’re are naturally going to hate them back, because you feel they’ve unjustly judged you. If in turn though, you hate all Muslims instead of that particular person, then you are no better than them. It is thanks to the ignorance of these types of people on both sides that fuels this conflicts for decades. THE DIFFERENCE BETWEEN AN IGNORANT PERSON AND NOT BEING IGNORANT, IS THE PERSON WHO IS NOT IGNORANT JUDGES PEOPLE AS INDIVIDUALS INSTEAD OF MAKING GENERALIZATIONS.

This growing hatred turns into violence on both sides. I see videos of deployed military treating locals with kindness, and then I’ve seen videos of them doing some cruel things to undeserving people. The worst I’ve seen is people on highways randomly and intentionally being shot by western contractors for sport. I’ve watched some terrible things. For every video, surely there are many more incidents that have never seen the light of day. Beyond those deliberate incidents, there are many accidental killings of civilians. Just like in law enforcement, a hand in a pocket my be interpreted as dangerous and a cop tazes someone, a similar moment of miscommunication across language barriers can end in civilian blood shed. Such unintentional incidents are unfortunate for both the civilians and the military personnel. I don’t want to paint these military personnel involved in these accidents as bad people. My point is that if you imagine some foreigner coming into your country, and unjustly killing someone you loved, either intentionally or accidentally, surely you would seek revenge regardless of the circumstances. If we try to defend these violent incidents, then we all look guilty. In the case of accidents, I am not saying we should throw those military personnel under the bus. They were doing their job, perhaps in some cases they exercised poor judgement, but in the end they did not intend for innocent people to die. We should at least show some sympathy and regret for those who were harmed in these mistakes. On the other hand, if someone intentionally harms innocent civilians, then in my opinion they are not representing the values of the military and country they serve, and we should condemn their actions.

One could try to compare and say that Muslims have killed far more people than vice versa. This might be true, but that still is flawed justification for judging all Muslims based on the actions on a fraction of there population.

I for one would not live in Afghanistan for example, not out of fear of the Muslim people of as a whole, but for fear of the extremists and militants among them. My hope is that we do not let ourselves migrate into becoming so hateful of Muslim people, that they would fear living among us.

The wife of the terrorist who led the attacks in Mumbai had actually ratted him out to the FBI as a terrorist long before the attacks occurred. The FBI unfortunately didn’t listen to her. But my point is that Muslims will even betray their own family when they realize that one among them is planning to hurt people.

Not only that, but the Muslim clerics in Mumbai refused to bury the terrorists.

We should give each Muslim individual an opportunity to prove themselves as good people. Let us not prematurely pass judgement on them. In this, we can find more allies who will further our cause for peace, and push back against extremism.

Some(notice I say some and not all) Muslim nations are dealing with the same issues western countries have experienced in the past such as extremism, political freedom, women’s rights, etc. It was not too long ago that the prominent belief was that a good wife kept her mouth shut, pleased her man, dressed appropriately, cooked dinner, and made babies. America employed military tactics during the revolution that were considered cowardly and dishonorable. For us to judge Muslim society based on these attributes, is somewhat of a double standard. I’m not condoning any of these things, but I am saying we should not use them as an excuse for hate.

These differences between our more progressive societies, and the less progressive societies of some Muslim nations will be a natural fuel for indifference. They will feel we are trying to corrupt their society with our western influence. While we will see ourselves as trying to fix their society with our influence. They will see us as arrogant and entitled. We will see them as ignorant and barbaric. This is unfortunate, but is a natural clash of cultures.

We do not need to throw more fuel on the fire with blatant bigotry.

Peaceful people on both sides must call for restraint, sense, and condemn hatred and bigotry

## October 28, 2011

### Dynamic MVC Indexes and Handling Lists: Plus Displaying Navigation Properties as Links

Filed under: Uncategorized — aaronls @ 6:05 pm

I wanted to make my Index pages more dynamic and not require me to touch/rescaffold them every time my model changed.

To accomplish this I first Edit the Index page to display a template specialized for handling a list of items.  In this case, I am saying “Take the current model(which happens to be a list of Employees) and display it, oh by the way, use the Summary.cshtml template to do so”

```@model IEnumerable<MyApp.Models.Employees>
@{
ViewBag.Title = "Employees";
}
<h2>Employees</h2>

@Html.DisplayForModel("Summary")```

The Summary template is similar in concept to what was fleshed out here:

http://haacked.com/archive/2010/05/05/asp-net-mvc-tabular-display-template.aspx

However, I took a couple steps to simplify the code.  One issue others had was the m[0] code breaks if presented with an empty list.  Others addressed this differently, but trying their approaches I found that the metadata they retrieved was the DynamicProxy of the model in one case versus the model class itself.  For me, maybe because of my usage of Data annotations, I found that the header fields of the table were in a different order than the data rows, and thus mislabled the data.  So instead, I simply check for empty (Model.Count == 0) and don’t display anything.  I would recommend instead displaying a useful message for this case, such as “No Employees have been entered into the system.”

Rather than trying to pull the meta data out of the generic IList, I just created two more simple templates that handle the header and data rows.  This allows the engine to do its magic in creating the Metadata.

Please forgive the lack of formatting, as the leading spaces are being stripped by the code tags for some reason.  Just copy and paste then Ctrl+K Ctrl+F to format it in Visual studio.  All of these files go in Shared DisplayTemplates as mentioned in the linked article above.

Summary.cshtml:

```@functions{
//this was copied from MVC framework source code
bool ShouldShow(ModelMetadata metadata)
{
return metadata.ShowForDisplay
&& metadata.ModelType != typeof(System.Data.EntityState)
//  && !metadata.IsComplexType
&& !ViewData.TemplateInfo.Visited(metadata);
}
}

@model System.Collections.IList
@if (Model == null || Model.Count == 0)
{
<text>@ViewData.ModelMetadata.NullDisplayText</text>
} else {
<table cellpadding="0" cellspacing="0" border="0">
@Html.DisplayFor(m => m[0], "SummaryHeader")

@foreach (var item in Model)
{
@Html.DisplayFor(m => item, "SummaryItem")
}
</table>
}```

SummaryHeader.cshtml:

```@functions{
//this was copied from MVC framework source code
bool ShouldShow(ModelMetadata metadata)
{
return metadata.ShowForDisplay
&& metadata.ModelType != typeof(System.Data.EntityState)
//  && !metadata.IsComplexType
&& !ViewData.TemplateInfo.Visited(metadata);
}
}

@if (Model == null) {
<text>@ViewData.ModelMetadata.NullDisplayText</text>
}
else {
<tr>
@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm)))
{
<th>
<span>@prop.GetDisplayName()</span>
</th>
}
</tr>```

SummaryItem:

```@functions{
//this was copied from MVC framework source code
bool ShouldShow(ModelMetadata metadata)
{
return metadata.ShowForDisplay
&& metadata.ModelType != typeof(System.Data.EntityState)
//  && !metadata.IsComplexType
&& !ViewData.TemplateInfo.Visited(metadata);
}
}

@if (Model == null) {
<text>@ViewData.ModelMetadata.NullDisplayText</text>
}
else {
<tr>
@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm)))
{
<td>
<span>
@Html.Display(prop.PropertyName)
</span>
</td>
}
</tr>
}```

That function at the top could be factored out, but I’ve had limited success with the techniques I’ve seen suggested so far.

Notice that I do not exclude ComplexTypes(such as navigation properties) because the Object template will simply display the SimpleDisplayText for these, which is exactly what I want.  So if I had a Supervisor navigation property on Employee, then it would get displayed, and the value displayed would be the SimpleDisplayText value.  Usually this is a realy long string that is the name of the generated DynmicProxy class, but if you override ToString() in the referenced class, in this case whatever Supervisor is, such that it returns something meaningful, then you get a meaningful display of your navigation properties.

```public override string ToString()
{
return this.FirstName + " " + this.LastName;
}```

If you want them displayed differently, you can always apply a UIHint data annotation attribute to the navigation property.  I like them to display them as links to the details page of the related entity.

FKLink.cshtml:

```@if (Model == null)
{
<text>@ViewData.ModelMetadata.NullDisplayText</text>
}
else
{
@Html.ActionLink(
@ViewData.ModelMetadata.SimpleDisplayText,  //display text for link
"Details",
@ViewData.ModelMetadata.ModelType.Name, //controller
new
{
id = Model.Key
},
null)
}```

This requires every model have property called Key which returns the value of its primary key such as in these two examples, depending on your preferred naming convention:

```    [ScaffoldColumn(false)]
public int Key { get { return EmployeeKey; } }
[Key]
public int EmployeeKey { get; set; }```

```    [ScaffoldColumn(false)]
public int Key { get { return EmployeeId; } }
public int EmployeeId { get; set; }```

To take advantage of the FKLink template, you could use some of the template helpers like DisplayForModel, but I just add a UIHint to the navigation property which basically says “Anytime you encounter this property, use the FKLink template to display it”:

```
class Employee{

.......

public int SupervisorKey { get; set; }
[ForeignKey("SupervisorKey ")]
[UIHint("FKLink")]
public virtual Supervisor Supervisor { get; set; }</pre>
}```

## September 3, 2011

### My Continued Obsession with SSD Prices

Filed under: Uncategorized — aaronls @ 8:59 pm

Finally SSD prices have started dropping again.  A year ago prices were at \$1.56 /GB, and expected to see 25nm production in place by the end of 2010.  Now some SSD’s can be seen at around \$1.16/GB.  This is a mere 25% price drop, and I would have hoped that they would be closer to 40% price drop by now.  The fact that flash memory is used by mobile phones, tablets, and netbooks means that there is probably a greater demand for flash memory which may have been contributing to the slow decrease in SSD prices.

## January 11, 2011

### Bill Zeller

Filed under: Uncategorized — Tags: — aaronls @ 1:48 am

These words below are those of a man who fought to be a good and functioning person of this society, but ultimately lost a battle against memories that he could not forget and profoundly effected every aspect of his life. If you look around the net you will find lots of people with accounts of him simply being a wonderful and outgoing person, you might see photos of him smiling with others, you might find the many photos he has taken himself(some of which are quite beautiful), and you might read about how he used his skills as a computer scientist to try and help as many people as he possibly could. Ultimately though, you could be the strongest person in the world, but if you are dealt a weight heavier than any man could ever carry, then you will inevitably collapse. Many might compare their own life to his and call him a wuss because you are still here and he is not, but they cannot fathom every minute of his life and be sure he had the same experiences and turning points in his life as he did theirs, such that they could make such judgements.  I post this because I think he would have wanted as many people to read this as possible, and I think there is some good in bringing some awareness about the burdens some people silently carry. Although it is very long and I was tempted to skip paragraphs, I read every word of it. For someone who clearly put such a huge effort into trying to make others happy and use his skills to the benefit of others, despite the sadness he carried, I felt the least I could do was read what he had to say.

http://1000memories.com/billzeller/memories

http://www.flickr.com/photos/bz/4107098331/in/photostream/#/photos/bz/4107098331/in/photostream/lightbox/

The following was written by Bill Zeller and taken from http://documents.from.bz/note.txt
____________________________

I have the urge to declare my sanity and justify my actions, but I
assume I’ll never be able to convince anyone that this was the right
decision. Maybe it’s true that anyone who does this is insane by
definition, but I can at least explain my reasoning. I considered not
writing any of this because of how personal it is, but I like tying up
loose ends and don’t want people to wonder why I did this. Since I’ve
never spoken to anyone about what happened to me, people would likely
draw the wrong conclusions.

My first memories as a child are of being raped, repeatedly. This has
affected every aspect of my life. This darkness, which is the only way I
can describe it, has followed me like a fog, but at times intensified
and overwhelmed me, usually triggered by a distinct situation. In
kindergarten I couldn’t use the bathroom and would stand petrified
whenever I needed to, which started a trend of awkward and unexplained
social behavior. The damage that was done to my body still prevents me
from using the bathroom normally, but now it’s less of a physical
impediment than a daily reminder of what was done to me.

This darkness followed me as I grew up. I remember spending hours
playing with legos, having my world consist of me and a box of cold,
plastic blocks. Just waiting for everything to end. It’s the same thing
I do now, but instead of legos it’s surfing the web or reading or
listening to a baseball game. Most of my life has been spent feeling
dead inside, waiting for my body to catch up.

At times growing up I would feel inconsolable rage, but I never
connected this to what happened until puberty. I was able to keep the
darkness at bay for a few hours at a time by doing things that required
intense concentration, but it would always come back. Programming
appealed to me for this reason. I was never particularly fond of
computers or mathematically inclined, but the temporary peace it would
provide was like a drug. But the darkness always returned and built up
something like a tolerance, because programming has become less and less
of a refuge.

The darkness is with me nearly every time I wake up. I feel like a grime
is covering me. I feel like I’m trapped in a contimated body that no
amount of washing will clean. Whenever I think about what happened I
feel manic and itchy and can’t concentrate on anything else. It
manifests itself in hours of eating or staying up for days at a time or
sleeping for sixteen hours straight or week long programming binges or
constantly going to the gym. I’m exhausted from feeling like this every
hour of every day.

Three to four nights a week I have nightmares about what happened. It
makes me avoid sleep and constantly tired, because sleeping with what
feels like hours of nightmares is not restful. I wake up sweaty and
furious. I’m reminded every morning of what was done to me and the
control it has over my life.

I’ve never been able to stop thinking about what happened to me and this
hampered my social interactions. I would be angry and lost in thought
and then be interrupted by someone saying “Hi” or making small talk,
unable to understand why I seemed cold and distant. I walked around,
viewing the outside world from a distant portal behind my eyes, unable
to perform normal human niceties. I wondered what it would be like to
take to other people without what happened constantly on my mind, and I
wondered if other people had similar experiences that they were better
able to mask.

Alcohol was also something that let me escape the darkness. It would
always find me later, though, and it was always angry that I managed to
escape and it made me pay. Many of the irresponsible things I did were
the result of the darkness. Obviously I’m responsible for every decision
and action, including this one, but there are reasons why things happen
the way they do.

Alcohol and other drugs provided a way to ignore the realities of my
situation. It was easy to spend the night drinking and forget that I had
no future to look forward to. I never liked what alcohol did to me, but
it was better than facing my existence honestly. I haven’t touched
alcohol or any other drug in over seven months (and no drugs or alcohol
will be involved when I do this) and this has forced me to evaluate my
life in an honest and clear way. There’s no future here. The darkness
will always be with me.

I used to think if I solved some problem or achieved some goal, maybe he
would leave. It was comforting to identify tangible issues as the source
of my problems instead of something that I’ll never be able to change. I
thought that if I got into to a good college, or a good grad school, or
lost weight, or went to the gym nearly every day for a year, or created
programs that millions of people used, or spent a summer or California
or New York or published papers that I was proud of, then maybe I would
feel some peace and not be constantly haunted and unhappy. But nothing I
did made a dent in how depressed I was on a daily basis and nothing was
in any way fulfilling. I’m not sure why I ever thought that would change
anything.

I didn’t realize how deep a hold he had on me and my life until my
first relationship. I stupidly assumed that no matter how the darkness
affected me personally, my romantic relationships would somehow be
separated and protected. Growing up I viewed my future relationships as
a possible escape from this thing that haunts me every day, but I began
to realize how entangled it was with every aspect of my life and how it
is never going to release me. Instead of being an escape, relationships
and romantic contact with other people only intensified everything about
him that I couldn’t stand. I will never be able to have a relationship
in which he is not the focus, affecting every aspect of my romantic
interactions.

Relationships always started out fine and I’d be able to ignore him for
a few weeks. But as we got closer emotionally the darkness would return
and every night it’d be me, her and the darkness in a black and gruesome
threesome. He would surround me and penetrate me and the more we did the
more intense it became. It made me hate being touched, because as long
as we were separated I could view her like an outsider viewing something
good and kind and untainted. Once we touched, the darkness would
envelope her too and take her over and the evil inside me would surround
her. I always felt like I was infecting anyone I was with.

Relationships didn’t work. No one I dated was the right match, and I
thought that maybe if I found the right person it would overwhelm him.
Part of me knew that finding the right person wouldn’t help, so I became
interested in girls who obviously had no interest in me. For a while I
thought I was gay. I convinced myself that it wasn’t the darkness at
all, but rather my orientation, because this would give me control over
why things didn’t feel “right”. The fact that the darkness affected
sexual matters most intensely made this idea make some sense and I
convinced myself of this for a number of years, starting in college
after my first relationship ended. I told people I was gay (at Trinity,
not at Princeton), even though I wasn’t attracted to men and kept
finding myself interested in girls. Because if being gay wasn’t the
answer, then what was? People thought I was avoiding my orientation, but
I was actually avoiding the truth, which is that while I’m straight, I
will never be content with anyone. I know now that the darkness will
never leave.

Last spring I met someone who was unlike anyone else I’d ever met.
Someone who showed me just how well two people could get along and how
much I could care about another human being. Someone I know I could be
with and love for the rest of my life, if I weren’t so fucked up.
Amazingly, she liked me. She liked the shell of the man the darkness had
left behind. But it didn’t matter because I couldn’t be alone with her.
It was never just the two of us, it was always the three of us: her, me
and the darkness. The closer we got, the more intensely I’d feel the
darkness, like some evil mirror of my emotions. All the closeness we had
and I loved was complemented by agony that I couldn’t stand, from him. I
realized that I would never be able to give her, or anyone, all of me or
only me. She could never have me without the darkness and evil inside
me. I could never have just her, without the darkness being a part of
all of our interactions. I will never be able to be at peace or content
or in a healthy relationship. I realized the futility of the romantic
part of my life. If I had never met her, I would have realized this as
soon as I met someone else who I meshed similarly well with. It’s likely
that things wouldn’t have worked out with her and we would have broken
up (with our relationship ending, like the majority of relationships do)
even if I didn’t have this problem, since we only dated for a short
time. But I will face exactly the same problems with the darkness with
anyone else. Despite my hopes, love and compatability is not enough.
Nothing is enough. There’s no way I can fix this or even push the
darkness down far enough to make a relationship or any type of intimacy
feasible.

So I watched as things fell apart between us. I had put an explicit time
limit on our relationship, since I knew it couldn’t last because of the
darkness and didn’t want to hold her back, and this caused a variety of
problems. She was put in an unnatural situation that she never should
have been a part of. It must have been very hard for her, not knowing
what was actually going on with me, but this is not something I’ve ever
been able to talk about with anyone. Losing her was very hard for me as
well. Not because of her (I got over our relationship relatively
quickly), but because of the realization that I would never have another
relationship and because it signified the last true, exclusive personal
connection I could ever have. This wasn’t apparent to other people,
because I could never talk about the real reasons for my sadness. I was
very sad in the summer and fall, but it was not because of her, it was
because I will never escape the darkness with anyone. She was so loving
and kind to me and gave me everything I could have asked for under the
circumstances. I’ll never forget how much happiness she brought me in
those briefs moments when I could ignore the darkness. I had originally
planned to kill myself last winter but never got around to it. (Parts of
this letter were written over a year ago, other parts days before doing
this.) It was wrong of me to involve myself in her life if this were a
possibility and I should have just left her alone, even though we only
dated for a few months and things ended a long time ago. She’s just one
more person in a long list of people I’ve hurt.

I could spend pages talking about the other relationships I’ve had that
were ruined because of my problems and my confusion related to the
darkness. I’ve hurt so many great people because of who I am and my
inability to experience what needs to be experienced. All I can say is
that I tried to be honest with people about what I thought was true.

I’ve spent my life hurting people. Today will be the last time.

I’ve told different people a lot of things, but I’ve never told anyone
about what happened to me, ever, for obvious reasons. It took me a while
to realize that no matter how close you are to someone or how much they
claim to love you, people simply cannot keep secrets. I learned this a
few years ago when I thought I was gay and told people. The more harmful
the secret, the juicier the gossip and the more likely you are to be
betrayed. People don’t care about their word or what they’ve promised,
they just do whatever the fuck they want and justify it later. It feels
incredibly lonely to realize you can never share something with someone
and have it be between just the two of you. I don’t blame anyone in
particular, I guess it’s just how people are. Even if I felt like this
is something I could have shared, I have no interest in being part of a
friendship or relationship where the other person views me as the
damaged and contaminated person that I am. So even if I were able to
trust someone, I probably would not have told them about what happened
to me. At this point I simply don’t care who knows.

I feel an evil inside me. An evil that makes me want to end life. I need
to stop this. I need to make sure I don’t kill someone, which is not
something that can be easily undone. I don’t know if this is related to
what happened to me or something different. I recognize the irony of
killing myself to prevent myself from killing someone else, but this
decision should indicate what I’m capable of.

So I’ve realized I will never escape the darkness or misery associated
with it and I have a responsibility to stop myself from physically
harming others.

I’m just a broken, miserable shell of a human being. Being molested has
defined me as a person and shaped me as a human being and it has made me
the monster I am and there’s nothing I can do to escape it. I don’t know
any other existence. I don’t know what life feels like where I’m apart
from any of this. I actively despise the person I am. I just feel
fundamentally broken, almost non-human. I feel like an animal that woke
up one day in a human body, trying to make sense of a foreign world,
living among creatures it doesn’t understand and can’t connect with.

I have accepted that the darkness will never allow me to be in a
relationship. I will never go to sleep with someone in my arms, feeling
the comfort of their hands around me. I will never know what
uncontimated intimacy is like. I will never have an exclusive bond with
someone, someone who can be the recipient of all the love I have to
give. I will never have children, and I wanted to be a father so badly.
I think I would have made a good dad. And even if I had fought through
the darkness and married and had children all while being unable to feel
intimacy, I could have never done that if suicide were a possibility. I
did try to minimize pain, although I know that this decision will hurt
many of you. If this hurts you, I hope that you can at least forget
about me quickly.

There’s no point in identifying who molested me, so I’m just going to
leave it at that. I doubt the word of a dead guy with no evidence about
something that happened over twenty years ago would have much sway.

You may wonder why I didn’t just talk to a professional about this. I’ve
seen a number of doctors since I was a teenager to talk about other
issues and I’m positive that another doctor would not have helped. I was
never given one piece of actionable advice, ever. More than a few spent
a large part of the session reading their notes to remember who I was.
And I have no interest in talking about being raped as a child, both
because I know it wouldn’t help and because I have no confidence it
would remain secret. I know the legal and practical limits of
doctor/patient confidentiality, growing up in a house where we’d hear
stories about the various mental illnesses of famous people, stories
that were passed down through generations. All it takes is one doctor
who thinks my story is interesting enough to share or a doctor who
thinks it’s her right or responsibility to contact the authorities and
have me identify the molestor (justifying her decision by telling
herself that someone else might be in danger). All it takes is a single
doctor who violates my trust, just like the “friends” who I told I was
gay did, and everything would be made public and I’d be forced to live
in a world where people would know how fucked up I am. And yes, I
realize this indicates that I have severe trust issues, but they’re
based on a large number of experiences with people who have shown a
profound disrepect for their word and the privacy of others.

People say suicide is selfish. I think it’s selfish to ask people to
continue living painful and miserable lives, just so you possibly won’t
feel sad for a week or two. Suicide may be a permanent solution to a
temporary problem, but it’s also a permanent solution to a ~23 year-old
problem that grows more intense and overwhelming every day.

Some people are just dealt bad hands in this life. I know many people
have it worse than I do, and maybe I’m just not a strong person, but I
really did try to deal with this. I’ve tried to deal with this every day
for the last 23 years and I just can’t fucking take it anymore.

I often wonder what life must be like for other people. People who
can feel the love from others and give it back unadulterated, people who
can experience sex as an intimate and joyous experience, people who can
experience the colors and happenings of this world without constant
misery. I wonder who I’d be if things had been different or if I were a
stronger person. It sounds pretty great.

I’m prepared for death. I’m prepared for the pain and I am ready to no
longer exist. Thanks to the strictness of New Jersey gun laws this will
probably be much more painful than it needs to be, but what can you do.
My only fear at this point is messing something up and surviving.

I’d also like to address my family, if you can call them that. I despise
everything they stand for and I truly hate them, in a non-emotional,
dispassionate and what I believe is a healthy way. The world will be a
better place when they’re dead–one with less hatred and intolerance.

If you’re unfamiliar with the situation, my parents are fundamentalist
Christians who kicked me out of their house and cut me off financially
when I was 19 because I refused to attend seven hours of church a week.

They live in a black and white reality they’ve constructed for
themselves. They partition the world into good and evil and survive
by hating everything they fear or misunderstand and calling it love.
They don’t understand that good and decent people exist all around us,
“saved” or not, and that evil and cruel people occupy a large percentage
of their church. They take advantage of people looking for hope by
teaching them to practice the same hatred they practice.

A random example:

“I am personally convinced that if a Muslim truly believes and obeys the
Koran, he will be a terrorist.” – George Zeller, August 24, 2010.

If you choose to follow a religion where, for example, devout Catholics
who are trying to be good people are all going to Hell but child
molestors go to Heaven (as long as they were “saved” at some point),
that’s your choice, but it’s fucked up. Maybe a God who operates by
those rules does exist. If so, fuck Him.

Their church was always more important than the members of their family
and they happily sacrificed whatever necessary in order to satisfy
their contrived beliefs about who they should be.

I grew up in a house where love was proxied through a God I could never
believe in. A house where the love of music with any sort of a beat was
literally beaten out of me. A house full of hatred and intolerance, run
by two people who were experts at appearing kind and warm when others
were around. Parents who tell an eight year old that his grandmother is
going to Hell because she’s Catholic. Parents who claim not to be racist
but then talk about the horrors of miscegenation. I could list hundreds
of other examples, but it’s tiring.

Since being kicked out, I’ve interacted with them in relatively normal
ways. I talk to them on the phone like nothing happened. I’m not sure
why. Maybe because I like pretending I have a family. Maybe I like
having people I can talk to about what’s been going on in my life.
Whatever the reason, it’s not real and it feels like a sham. I should
have never allowed this reconnection to happen.

I wrote the above a while ago, and I do feel like that much of the time.
At other times, though, I feel less hateful. I know my parents honestly
believe the crap they believe in. I know that my mom, at least, loved me
very much and tried her best. One reason I put this off for so long is
because I know how much pain it will cause her. She has been sad since
she found out I wasn’t “saved”, since she believes I’m going to Hell,
which is not a sadness for which I am responsible. That was never going
to change, and presumably she believes the state of my physical body is
much less important than the state of my soul. Still, I cannot
intellectually justify this decision, knowing how much it will hurt her.
Maybe my ability to take my own life, knowing how much pain it will
cause, shows that I am a monster who doesn’t deserve to live. All I know
is that I can’t deal with this pain any longer and I’m am truly sorry I
couldn’t wait until my family and everyone I knew died so this could be
done without hurting anyone. For years I’ve wished that I’d be hit by a
bus or die while saving a baby from drowning so my death might be more
acceptable, but I was never so lucky.

To those of you who have shown me love, thank you for putting up with
all my shittiness and moodiness and arbitrariness. I was never the
person I wanted to be. Maybe without the darkness I would have been a
better person, maybe not. I did try to be a good person, but I realize I
never got very far.

I’m sorry for the pain this causes. I really do wish I had another
option. I hope this letter explains why I needed to do this. If you
can’t understand this decision, I hope you can at least forgive me.

Bill Zeller

Please save this letter and repost it if gets deleted. I don’t want
people to wonder why I did this. I disseminated it more widely than I
might have otherwise because I’m worried that my family might try to
restrict access to it. I don’t mind if this letter is made public. In
fact, I’d prefer it be made public to people being unable to read it and
drawing their own conclusions.

Feel free to republish this letter, but only if it is reproduced in its
entirety.

___________________________

## August 17, 2010

### Flash Triple Level Cell on 25nm Lithography Production This Year

Filed under: Uncategorized — aaronls @ 6:48 pm

Saw an article over at StorageReview.com today on an announcement indicating we will probably see a significant increase in Flash storage density by the end of the year due to the development of triple level cell technology (TLC) on 25nm Lithography.  This increases storage density by moving from 32nm to the smaller 25nm, and also increases the number of bits that can be stored from 2 to 3.  It is not clear whether TLC will be offered in SSD’s, as the TLC technology will decrease the write endurance of the flash.  It may only be suited for applications that are rarely written to but read from often, such as MP3 players.  Micron, Intel’s partner in this endeavor, has a short video on the new 25nm TLC flash.

On a side note I noticed there has been alot of dancing around of SSD prices on Newegg.  The WD SiliconEdge Blue 128GB drive was \$200, then the price jumped up quite high and there was no other SSD’s priced anywhere close to that low.  Later a 128GB Plextor drive showed up at around \$190 but then disappeared from that price point and the WD SiliconEdge Blue showed up again at around \$200.

I also found something that is almost a joke to me.  A \$30.00 Mail-In Rebate on a \$9,000 drive!  Wow, what a deal 🙂  I guess if you were corrupt and had purchasing power at the company you worked for, then you might favor the hardware with a mail-in rebate and then pocket the rebate 😦

## July 21, 2010

### SSD Price Drop – July 2010

Filed under: Uncategorized — aaronls @ 7:33 pm

I noticed about a week ago on Newegg there was a 128 GB SSD that was available for about \$220 with a rebate, which offered a cost per GB that was significantly lower than all the other SSDs at the time. I generally don’t take mail-in rebates into consideration though, because by the time you get done with the hassle of the rebate, and the potential lost/ignored rebates, it tends to not be worth it. Additionally, the drive had mediocre write performance.

However, this might have prompted Western Digital to undercut that price by offering the WD SiliconEdge Blue 128GB for \$200! Back in the beggining of April, all the SSDs I had looked at on Newegg were at least \$1.95/GB and many climbed in price up to as much as \$5/GB. Now, just three months later, the WD SiliconEdge Blue 128GB model is \$1.56/GB which represents a 20% drop in price. Additionally, the WD SiliconEdge Blue has had pretty good reviews and benchmarks, yet still undercuts many of the other drives by a significant margin.

The price wars in the SSD market will be interesting to watch unfold. HDD manufacturers are producing SSDs because SSDs could replace HDD’s, so they need to get into the SSD market, or else they might face potential face extinction or lose significant revenue if HDD sales drop as SSDs gain popularity and affordability. Then we also have memory manufacturers like SanDisk and OCZ that have been making flash memory for awhile, and so it’s a pretty natural for them to be involved in the SSD game. So now we have alot of manufacturers with an SSD product on the table all competing for the spotlight. This is going to make for some chaotic price wars. We can already see that some manufacturers are putting out drives with relatively lower performance, but for whatever reason they aren’t able to offer the product at a lower price point. Perhaps their competitors are actually selling their better performing drives at a loss in order to get a good base of customers familiar with their product and try to stand out among the crowd. Since SSDs will be new to most customers, the manufacturers may see this as an opportunity to solidify their place in the SSD marketplace by getting their products in the hands of as many customers as possible, even if it means taking a loss initially with the hope that the reputation they have built will mean more sales later. Especially since we will probably see SSD sales continue to pick up as they become more affordable and more consumers learn of the huge performance gains they offer above traditional HDDs.

Also, this competition is great because we are seeing manufacturers aggressively addressing issues with the product, because they don’t want to be that one manufacturer that everyone talks about as having “such and such” problem. I believe this is helping the technology mature more quickly than it did when it was a niche product.

It will be really interesting to watch SSD price trends and see if any manufacturers try to develop unique features to make themselves stand out. We’ve already seen some interesting products such as SSD’s mounted on PCI express cards.

Before I say good bye for now, I want to point out something you should consider when comparing drives based on \$/GB. Some manufacturers are doing something called over-provisioning. An SSD that is over provisioned might only have 100 GB available for storage, but actually contains 128 GB of flash storage. The purpose of over-provisioning is to improve the drive’s performance, reliability, and lifespan. Combined with wear leveling techniques the SSD is able to make use of the extra space to spread out the wear caused by writes to the drive. Additionally, as memory blocks go bad they can be replaced by blocks in the reserved space so that the drive continues to operate at the same capacity. Lastly, the drive is able to improve performance because it has more available blocks that it can pre-erase to ensure they are ready and available. There may be other benefits and storagesearch.com is a great resource if you are interested in the nitty gritty details.

Anyhow, my point being that you can’t always calculate an accurate \$/GB simply by it’s advertised capacity, as the total amount of flash storage it contains may actually be more than what is available. I think the reliability you get from over-provisioning is worth sacrificing a portion of your storage. I have found so far that the only way to know how much over-provisioning a drive has is to go to the manufacturer’s website and look at the specifications for the drive. Hopefully retailers like Newegg will start consistently advertising the over-provisioning in their listings.

## June 20, 2010

### Fixing Blurry Text When Using Samsung DLP TV Connected Via HDMI and Obtaining 1920×1080 Resolution

I have a Samsung DLP TV (HL50A650) and I had a difficult time getting it to display 1920×1080 resolution over the D-sub connector(VGA).  In Windows XP I was eventually able to accomplish this, but later when I upgraded to Windows 7 64bit I was no longer able to get the ATI driver to run my TV at a 1920×1080 resolution at the required 60hz.  As a matter of fact the manual indicates that resolution is supported over HDMI, and not over D-sub.

I was able to get the resolution from my computer at 1920×1080 with an HDMI cable, but the text was very blurry and jagged.  It was nearly unreadable and very hard on the eyes.  Other normally crisp graphics were also effected.  In actuality the problem was a Sharpness setting on the TV that needed to be turned down to around zero or close to it.  The extra sharpness post-processing was making the text and graphics jagged along the edge, and the mixing of adjacent colors made it appear blurry and jagged at the same time.  Note that this Sharpness setting is specific to the selected video source, so make sure you change your input source to the computer’s HDMI3/DVI input source(you did plug it into HDMI 3 right?) , and then hit Menu on your Samsung remote and turn the Sharpness all the way down.  Once I turned it down to 2, my image was perfect.  I actually first switched the Mode setting on that same first Menu screen to Movie, as I liked the colors there the most, but it will look really horrible until you turn the Sharpness setting down.  So it was really difficult to figure the problem out because there were multiple problems working against me when I first began.  I now sit about 5′ from my 50″ TV and enjoy a huge space for my applications, games, and movies at a 1920×1080 HD resolution.

What everyone was saying on the forums regarding the Samsung DLP models was that it wasn’t producing the graphics in a one to one pixel mapping.  Thus some pixels were being interpolated between a straddled pixel causing poor graphics quality.  This is not true however, at least for my model.  What was happening actually was the DLP TV was doing image processing based on it’s settings, and one of those settings was the Sharpness setting was jacked way up by default.  Note, the settings you get when you press the Menu button on the Samsung remote are specific to the currently selected source.  So normally Sharpness might be way down, but when I switched to the HDMI source, I found the Sharpness setting was jacked half way up to 50.  Normally Sharpness should be all the way down or very close to zero.  You would think, “Oh sharpness would make the image sharper and better, so that’s not the problem.”  But it is the problem!  The sharpness setting determines how much post-processing takes place, and normally if you have a quality image, you need no post processing, which is the case with an incoming computer signal.  When you add more sharpness to an already sharp image, then it starts turning smooth curves into jagged steps and it messes up the colors to add contrast to adjacent colors.  In a nutshell, use the Tools or Menu buttons on your Samsung remote to access the TV’s sharpness setting, and turn it all the way down(from 50 down to 1) and hopefully that will fix your blurriness problem.

Also see my article on troubleshooting Windows 7 display resolutions and the EDID setting, since it may be helpful if you have a similar TV hooked up to your computer.

## May 7, 2010

### Will External SSDs Bring Portable Applications to the Mainstream?

Filed under: Uncategorized — aaronls @ 11:52 am

As high-speed external SSDs become more affordable, I expect we will see portable applications becoming more mainstream. External SSDs can provide the portability, reliability, shock resistance, and speed that is needed to make portable applications more popular among the mainstream crowd.

As of right now users have the choice of a flash drive or an external HDD. Flash drives often have horrible write performance which results in sluggish portable application performance, and HDDs are more easily damaged by bumping or dropping. Additionally some external HDDs have problems with overheating due to poorly ventilated enclosures.  These problems have prevented portable applications from becoming mainstream, and even for power users there are only a handful of must-have applications that they use.  Usually the poor performance makes the portable application a last resort where it is a must-have application that you just don’t want to do without, like a password manager, or a browser configured for optimum security.

External SSDs connected over USB 3.0 or eSATA don’t have the same problems. SSDs produce almost no heat compared to HDDs, are extremely shock resistant, and often provide read/write performance that outpaces both HDDs and flash pen drives.  Drives like the
OCZ Enyo External USB 3.0 SSD will provide these key features, and hopefully the 64GB models will be under \$200.

There was a time when applications were heavily intertwined with the Operating System they were installed upon.  In Windows sometimes hundreds or thousands of registry settings would be written by a single application installation.  Over the years this has evolved and manifested itself in different ways as each newer version of an Operating System tightens security with new restrictions.  In Windows 7 various hacks are employed by the OS to allow legacy applications to continue to function, but the expected pattern is that the application installs to the Program Files folder, and only writes data to user folders such as Documents.

I expect the next logical step in this evolution will be driven by a demand for portable applications such that developers make applications portable by default.  This is in contrast to the current situation where most applications require a special build, platform, or hacks to get it to function as a portable application.  A portable application would not interact with the OS in any way during installation, and the files it writes out during installation are confined to a single folder.  Additionally, program data read and written during program execution would be confined to a user defined folder.  Such an application could still be installed to Program Files and user files pointed to the Documents folder, but now users also have the option of placing the application and data on a portable drive.

I think the portable SSD will bring a new drive for portable applications, and probably prompt desktop applications to adapt to allow for more reliable and user-friendly installation processes that are portable friendly.

We might even see improvements in virtual machines or bootable OS packages that make them more accessible to the lay user who wants to maximize the portability of their applications by also including the OS on their external SSD.  Properly implemented, this would allow someone the means to plugin an SSD to any computer hardware that is capable of supporting the bootable OS, regardless of what OS is currently installed on that hardware.

Of course similar flexibility could be accomplished by using portable apps that are compiled into cross-platform intermediate languages such as how Java or Flash is implemented.  Such languages generally require a runtime engine such as the Java Virtual Machine or Adobe AIR to be installed on the hosting OS.  Perhaps the key to solving this roadblock is to make the runtime engine portable as well, so that it can be loaded on demand from the portable media without installing on the host OS.  In this scenario, the runtime engine would almost act like a cross-platform bridge.  Of course the portable version of the runtime engine would be large and bloated as it would need to contain redundant builds for each target OS that is supported.

Buying a high performance SSD and enjoying the performance benefit of installing an application or game on that drive is one thing, but then being able to take that drive from your desktop, to your laptop, to a friends machine,  etc. and have access to that game or application on the road with the extra benefit of a high performance SSD would be awesome.  Now the only roadblock is when you plug that drive into a machine that doesn’t meet the system requirements of the game you have on the SSD 🙂

Regardless of what comes to light, I think we might see the availability of high performing reliable portable media in the form of portable SSDs become the driving force that brings portable applications to the mainstream.

Older Posts »