ORACLE_DBENABLED=true
/etc/oratab:
XE:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server:Y
Latency in MMOGs
2007-06-28"Ping" has, in the MMOG context, two meanings. The operating system ping command sends and receives ICMP echo packets, while the MMOG might just send an ACK command through a pre-existing TCP stream. When you ICMP echo ping someone, the response you get comes from the operating system network stack. When you pseudo-ping a MMOG server over TCP, you have to wait until the server goes through the TCP streams it's receiving, handles the ACK message, and queues a response on the TCP stream. These two pings have obviously very different characteristics. I'll disregard the UDP and hybrid UDP/TCP options here, because their characteristics aren't too dissimilar from TCP when we're talking about the difference of ICMP ping and app level ping. Only ICMP pings can be compared across board, different games give completely different application level ping results.
In a MMOG, you need to create a virtual environment by keeping track of these things on the server side: player location, map characteristics (which impede the player's movement,) AI-controlled mob locations, player-placed process marker locations (piles, projects, harvesters), event trap locations (portals, traps) and so forth. When the player's client sends requests for, say, movement, we need to make sure that the movement isn't impeded by the map, by a dynamic item on the map, by a flag (dead) or a dynamic process (getting tired.) All of the things I mentioned take up memory space on the server.
When we make the decision to grant a player's request for movement, we need to consider the factors I mentioned, but since considering a factor takes a certain number of nanoseconds, we generally try to only consider those factors which can be easily estimated to be relevant. For example, we can be pretty sure that we don't have to care what someone is doing in city A when we're considering the movements of people in city B. The tricky part about this is we don't want the time that is taken by these calculations to grow either in a linear or exponential fashion when the number of players and items active grow when new players buy the game and log in.
The reason you hear about how MMOG operators buy gajillion servers to run their games is because of the three nasty units which haunt the nightmares of programmers everywhere: milliseconds, microseconds and nanoseconds.
1 second = 1 000 milliseconds = 1 000 000 microseconds = 1 000 000 000 nanoseconds.
It takes about 5 milliseconds to read data from an internal 10KRPM SCSI disk to RAM, and about 50 nanoseconds to read data from RAM.
If a player action causes you to read stuff from the disk, that player action has just taken as much time as 100,000 player actions which only touch the RAM would have taken. Ideally, you'd like to run all of your simulations with just the commands and data which can fit into the processor cache, but people rarely manage that. The UltraSparc T2 line looks interesting from a MMOG latency perspective, though.
So, let's get back on track: when you're making the decision on whether to grant or deny a player's movement request, you only want to consider the minimum amount of factors and you want to be able to locate all of the factors in main memory. Developers have created many different ways to ease the task of deciding which facts you want to account for and how to locate those facts. The most common of these is breaking the virtual environment up to cells and storing pointers to all facts in that cell in a easily accessible manner. Then you just make sure you handle the event where people leave cells and join neighboring cells. Another way is to have two layers of cells, the static ones I just mentioned and dynamic ones to accomodate, say, a larger battle. In reality, things are much more complicated than this, but I don't have time to go into more detail.
In any case, from what I have read, it looks like the XXX developers were, for whatever reason, and I'm not judging them here, unable to realistically test their decision-making trees with simulated traffic before launch. At this point, they must be refining their algorithms and considering, for example, whether their hardware architecture would handle some of the FP math better through integer math simulations. I'm just guessing here, of course.
Apachefest
2007-06-24Maybe during the summer I'll have the time to put ActiveMQ through a little stress test.
Robert McNamara: The Fog Of War
2007-06-20HBR: Moments of Truth
2007-06-19The articles are often interesting, but the topic is seldom presented from the European point of view, never mind from the Scandinavian point of view. The Nokia articles are formulaic, and I suppose to the triumph of the Nokia PR department, I never feel that I have any kind of an emotional bond to the issues or people.
Imagine my surprise when in the very first article of an issue, Olli-Pekka Kallasvuo shows a kind of an insight into the Finnish culture. The contrast to the next part of the article, written by the American CEO of the private defense industry company Blackwater, couldn't be starker.
--- /home/mikael/bin/aws.orig 2007-06-10 02:45:37.000000000 +0300
+++ /home/mikael/bin/aws 2007-07-10 04:12:31.000000000 +0300
@@ -500,7 +500,10 @@
}
}
- my $data = "$verb\n\n\n$expires\n/$name";
+ my($content_type) = `file -bi "$file"` if $isPUTobj;
+ chomp($content_type) if $isPUTobj;
+
+ my $data = "$verb\n\n$content_type\n$expires\n/$name";
my($sig, $awskey) = sign($data);
my $url = "https://s3.amazonaws.com/$name?AWSAccessKeyId=@{[encode_url($awskey)]}&Expires=$expires&Signature=@{[encode_url($sig)]}";
@@ -508,6 +511,8 @@
$content = "--upload-file @{[cq($file)]}" if $isPUTobj;
$content = "--output @{[cq($file)]}" if $verb eq GET && $file;
+ $content .= " --header 'Content-Type: $content_type' " if $content_type;
+
my $content_length = "--header 'Content-Length: $length'" if $length;
if ($isGETobj)
Update: and here's the patch for a slightly more recent version.
--- aws.tim 2007-08-19 23:03:08.000000000 +0300
+++ aws.gumi2 2007-09-01 17:32:42.000000000 +0300
@@ -517,13 +517,16 @@
}
my $header = join("\n", map {s/^(.*?):\s*/\L$1:/s; $_} @header) . "\n" if @header;
- my $data = "$verb\n\n\n$expires\n$header/$name";
+ my($content_type) = $isPUTobj ? `file -bi "$file"` : "";
+ chomp($content_type) if $content_type;
+ my $data = "$verb\n\n$content_type\n$expires\n$header/$name";
my($sig, $awskey) = sign($data);
my $url = "https://s3.amazonaws.com/$name?AWSAccessKeyId=@{[encode_url($awskey)]}&Expires=$expires&Signature=@{[encode_url($sig)]}";
my($content);
$content = "--upload-file @{[cq($file)]}" if $isPUTobj;
$content = "--output @{[cq($file)]}" if $verb eq GET && $file;
+ $content .= " --header 'Content-Type: $content_type' " if $content_type;
my $content_length = "--header 'Content-Length: $length'" if $length;
JavaOne: Enterprise Javabeans 3.1 Technology
2007-06-18Too bad Sun didn't just make these generally available. Now you have to register to their SDN and I can't embed the presentation here, without any hoops to jump through.
Ohjelmiston koodi muodostuu suuresta joukosta abstrakteja konsepteja jotka on konkretisoitu paperille matemaattisen kaavan muotoon. Toisin kuin fysiikassa ja matematiikassa, ohjelmistokehityksessä käsiteltävät abstraktit konseptit ovat kuitenkin hyvin läheisessä suhteessa ihmisten ajatuksiin ja tulkintoihin, joiden suhteiden toisiinsa odotetaan muuttuvan, eikä tulkintojen "oikeutta" voida mitata itsenäisesti.
Viime vuosikymmeninä tietokoneiden teho oli suurin haaste. Ohjelmistokehittäjät keskittyivät muokkaamaan ongelman muotoon, jossa tietokone pystyi kaikkine rajoituksineen ymmärtämään ja käsittelemään sen. Nykypäivänä tietokoneet ovat niin paljon nopeampia, että ollaan edetty paljon vaikeamman ongelman ratkaisemiseen: kuinka voidaan rakentaa laajempia ohjelmistoja, sekä niin että ne voivat tehdä enemmän että niin että niiden ylläpitoikä on pidempi. Sen sijaan, että ongelma pitää selittää tietokoneelle, se pitää pukea sellaiseen muotoon että sekä tietokone että toiset ihmiset ymmärtävät sen samanaikaisesti.
Jotkut ovat kokeilleet sitä, että ylläpidetään samaan aikaan erillistä ongelmakuvausta tietokoneelle, ja erillistä ihmisille, mutta se ei ole vielä toiminut, sillä kuvaukset väistämättä poikkeavat toisistaan oleellisesti. Kohtuullisesti toimivassa nykymallissa itse kuvaus siitä mitä tehdään jaetaan tietokoneen ja ihmisen välillä, mutta ihmisille kirjoitetaan väliin lyhyitä kommentteja siitä, miksi ongelma ratkaistaan niin, ja mikä ratkaisun laajempi merkitys on.
Ohjelmiston koodi saadaan taivutettua tulevaisuuden tarpeisiin sitä paremmin, mitä enemmän sen rakennukseen valittu tapa abstrahoida ongelma muistuttaa tulevaisuuden tulkintoja. Käytännössä menestyneet tavat abstrahoida kokonaisia ongelmia ovat keskittyneet siihen, että kokonainen ongelma jaetaan sellaisiin palasiin, jotka muodostuvat alakäsitteistä jotka muuttuvat samassa prosessissa tai saman yhteisön sisällä tapahtuvien muutosten muovaamina.
Esimerkiksi monien ohjelmistojen pitää käsitellä raha-asioita. Valuutat, tilitapahtumat ja valuuttasummat voivat tällöin muodostaa oman yksikkönsä. Tällöin, kun Suomi siirtyy Euroon, voidaan olla aika varmoja siitä, että sovelluksen muuntamiseen vaadittu työmäärä voidaan selvittää tutkimalla pelkästään tätä yksikköä, eikä koko sovellusta tarvitse käydä läpi. Raha-asiat ovat kuitenkin varsin helppo esimerkki, sillä useimmat käsitteet eivät ole käytössä yhtä laajalti ja yksiselitteisesti kuin raha ja vaihdannan välineet. Useimmat konseptit ovat vähemmän mietittyjä ja niistä on eri ihmisten ja organisaatioiden välillä eri tulkintoja.
Lomakkeet joissa on tekstikenttiä ovat tyypillinen tapa hallita ihmisten toiminnan tuottamaa tietoa, jonka hallinnassa pitää olla tarkkana. Sovelluksen ratkaisemasta ongelmasta riippumattomien yleisten haasteiden selvittäminen itse ei ole enää kovinkaan usein tarpeen, vaan löytyy valmiita runkoja (framework) jotka muotoilevat ongelman ja tarjoavat siihen kokonaisratkaisun tavalla, joka jättää auki mahdollisuuden luoda itse esimerkiksi ilmaisukykyisempiä sovelluskohtaisia kenttiä lomakkeeseen.

I've been contemplating for a while how well a more energy efficient computer lab solution would fit our customers' needs.
Let's face it: off-the-shelf computers are becoming much more powerful than necessary. Five or ten customers could well share a single modern computer, since most of the time computers just sit idle, eating electricity and waiting for you to press a key.
We'd just need a off-the-shelf solution to achieve this, since developing such a solution from scratch would eat away its savings, and more.
The solution I've been concentrating on is the Sun Ray technology from Sun Microsystems.
You replace your
with a
.The Sun Ray client connects to your monitor, mouse, USB and Ethernet, and lets you run 10 lab desktop sessions on one computer. It's stateless, all the processing happens on the other end. If the Sun Ray desktop client breaks, you just replace it, and you're back up and running where you were before the break.
The software that runs on the computer that powers the 10 desktop sessions is in the process of being open sourced. It runs on Windows, Linux and Solaris.
For security, you can have most of the applications that are delivered to the Sun Ray client and on the user's screen run on Windows, but some of the security sensitive applications like the web browser or email, can actually run on a Linux or Solaris computer.
To take the idea further, this makes it possible for a department to set up (or rent) machines to run a certain application just for their users, without it affecting the whole IT setup like business units delivering specific applications directly would today. If they start to use the application more, and it slows down, the department can very easily just have more machines run the application, and spread the load.
This way departments can dynamically scale their investment, if some application feels more or less important at some point of time, or there is a budget crunch.
...
"I’m working on a glossary to help people translate aspirational tech-talk into real-world expectations, but here’s the transcript of an IM conversation with a sterling example of the tech tribe, whom I dearly love.
AVC - (presenting plan and budget) Can you do this?
AB - Absolutely
AVC - Can you get it done by the due date?
AB - Yep
AVC - Can we get it done using this budget?
AB - Yes, could do
AVC - Can you get it done in this time *and* with this budget
AB - If you can get someone to work for free
AVC - So you can’t do this by yourself?
AB - Yes, I can
AVC - But not by the due date…
AB - I could…
AVC - But not with the other stuff you’re doing?
AB - Yes
AVC - Meaning no, you can’t get it done and do your other work too….
AB - Not without help
AVC - Which costs money
AB - Normally
AVC - So this current plan of you doing this by yourself by this date and with this budget won’t work
AB - Not without divine intervention
AVC - So when you said “absolutely”, you meant “absolutely not”?
AB - Absolutely"
"Checking Java Programs" and "Facelets"
2007-06-12Douglas Crockford onnistuu kuvaamaan asian tavalla, joka sopii sekä asiakkaille, projektipäälliköille että ohjelmistokehittäjille.
iPod/MP4: http://us.dl1.yimg.com/download.yahoo.com/dl/ydn/yui/theater/crockford-quality.m4v.
Anna-Riitta Wallin (lainsäädäntöneuvos, ylijohtaja, Oikeusministeriö)
Kimmo Hakonen (lainsäädäntöneuvos, poliisijohtaja, Sisäministeriö)
Raila Kangasperko (hallitusneuvos, Työministeriö)
Mikael Kiviniemi (neuvotteleva virkamies, VAHTIn puheenjohtaja, Valtiovarainministeriö)
Timo Koskinen (lakimies, SAK)
Pauliina Juntunen (lakimies, STTK)
Paula Ilveskivi (lakimies, Akava)
Mikko Nyyssölä (asiantuntija, Elinkeinoelämän keskusliitto)
Juhapekka Ristola (viestintäneuvos, Liikenne- ja viestintäministeriö)
Jussi Mäkinen (neuvotteleva virkamies, Liikenne- ja viestintäministeriö)
http://www.mintc.fi/oliver/upl758-LVM29_2007.pdf
Analyysia työpäivän jälkeen, mutta maistiaiseksi...
1.5 Keskeiset ehdotukset
Esityksessä ehdotetaan muutoksia sähköisen viestinnän tietosuojalakiin. Ehdotuksella esitetään laajennettavaksi yhteisötilaajien oikeuksia käsitellä tunnistamistietoja väärinkäytöstilanteissa.
Sääntelyä ehdotetaan muutettavaksi siten, että yhteisötilaajalla olisi tietyin edellytyksin oikeus käsitellä sähköisen viestinnän tunnistamistietoja viestintäverkkonsa tai palvelunsa sekä maksullisten tietoyhteiskunnan palvelujen luvattoman käytön ja käytöstä aiheutuvien kustannusten sekä yrityssalaisuuden oikeudettoman paljastamisen selvittämiseksi.
Ehdotettu tunnistamistietojen käsittelyoikeus liittyy yhteisötilaajien viestintäverkkojen ja viestintäpalvelujen käytön turvaamiseen ja viestintäverkon kautta tapahtuneen elinkeinotoiminnan kannalta keskeisen yrityssalaisuuden paljastamisen selvittämiseen.
Ehdotetun sääntelyn mukaan ensisijaisena keinona viestintäverkon ja viestintäpalvelun käytön asianmukaisuuden turvaamisessa olisi verkkojen ja palvelujen käyttäjille annetut ohjeet ja niiden noudattamisen automaattisesti tapahtuva seuranta.
Sääntelyssä edellytettäisiin, että verkon ja palveluiden suunniteltu käyttö sekä yrityssalaisuuksien suoja on järjestetty asianmukaisin tietoturva- ja käyttäjähallintotoimenpitein.
Ehdotetut tunnistamistietojen käsittelyoikeudet eivät oikeuttaisi yhteisötilaajia saamaan tietoa viestien sisällöistä.
Tunnistamistietojen käsittelyllä yhteisötilaaja ei saisi selville muiden kuin omien viestintäpalveluidensa kautta lähetettyjen ja vastaanotettujen viestien tunnistamistiedot.
Kaupallisesti tarjolla olevien sähköposti-, verkkopankki- tai muiden teknisesti suojattujen palveluiden käytöstä tunnistamistiedot paljastaisivat vain palvelun käytön ajankohdan ja keston.
Työnantaja-asemassa olevan yhteisötilaajan tulisi ottaa tunnistamistietojen käsittelyyn liittyvät asiat yhteistoimintamenettelyssä käsiteltäviksi ja tiedottaa niistä työntekijöille.
Ehdotettujen muutosten mahdollistamaa tunnistamistietojen käsittelyä valvoisi tietosuojavaltuutettu.
Another exhausting yet exhilarating day!
2007-06-05A West Wing day!



