Wednesday, February 09, 2005

Mapping Google

Mapping Google
By now, many of you will have gone and tried out the new Google Maps application. By and large, you have to admit that it's pretty damned slick for a DHTML web application -- even my wife was impressed, and that's not easy with geek toys. So, in the spirit of Google Suggest and GMail, I've decided to have a quick peek under the hood to figure out what makes it tick.

Not quite like GMail

The first thing I noticed is that it doesn't quite work like GMail. Whereas GMail uses XMLHttp to make calls back to the server, Google Maps uses a hidden IFrame. Each method has its benefits, as I'll discuss below, but this difference of approach does seem to imply that it may not be the same team doing the work.

The Graphics
Probably the most striking thing about Google Maps is the very impressive (for DHTML, anyway) graphics. Now, I'm sure that many of you old JavaScript hacks out there have known this sort of thing was possible for a long time, but it's very cool to see it (a) actually being used for something real, and (b) where normal users will see it.

For those to whom the implementation is less than obvious, here's a quick breakdown. The top and side bars are (more or less) simply HTML. The center pane with the map, however, is a different beast. First, let's address the map itself. It is broken up into a grid of 128x128 images (basically like an old tile-based scrolling console game). The dragging code is nothing new, but the cool trick here is that each of these images is absolutely positioned -- and the 'infinite' scrolling effect is achieved by picking up tiles that are off-screen on one end and placing them down on the other end. The effect is kind of like laying track for a train by picking up track from behind it.


Google map, with tiles outlined

The push-pins and info-popups are a different matter. Simply placing them is no big trick; an absolutely-positioned transparent GIF does the trick nicely. The shadows, however, are a different matter. They are PNGs with 8-bit alpha channels. Personally, I didn't even realize you could depend upon the browser to render these correctly, but apparently (at least with IE6 and Mozilla), you can. And they actually render pretty quickly -- for proof, check out the overlaid route image (at the end of the article), which is often as big as the entire map view.

The pushpin, with its two images outlined


Communicating with the Server
There are two ways in which Google Maps has to communicate with the server. The first is to get map images, and the second is to get search results. It turns out that getting map images is remarkably easy -- all you have to do is set an image tile's URL. Because the coordinate system is known and fixed (each tile represents a known area specified in longitude and latitude, at a given zoom level), the client has all the information it needs to set tile URLs. Each tile URL is of the following form:

  http://mt.google.com/mt?v=.1&x={x tile index}&{y tile index}=2&zoom={zoom level}

I'm not sure what the 'v' argument specifies, but it never seems to change. The others are fairly self-explanatory. One nice side effect of this is that the images have fixed URLs for a given chunk of the earth's surface, so they get cached. If you're doing most of your searches in one region, then the app can be quite snappy once everything gets cached.

Doing searches is another matter. Clearly, you can't 'submit' the entire page, because that would destroy your map and other context. Google's solution is to submit a hidden IFrame, then gather the search results from it. Let's say, for example, that you simply wanted to go to Atlanta. You type 'Atlanta' in the search area, and the following HTTP GET is made:

  http://maps.google.com/maps?
q=atlanta&z=13&sll=37.062500%2C-95.677068&
sspn=37.062500%2C80.511950&output=js
There are a couple of things to notice here. The 'question' is passed in the 'q' parameter (much like Google). The other arguments are 'z' for zoom, 'sll' for longitude & latitude (your current focus, I believe), and 'sspn' to specify the span/size of your viewing area. What's interesting is what comes back:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps - atlanta</title>
<script type="text/javascript">
//<![CDATA[
function load() {
if (window.parent && window.parent._load) {
window.parent._load({big chunk of XML}, window.document);
}
}
//]]>
</script>
</head>
<body onload="load()">
<input id="zoom" type="text" value=""/>
<input id="centerlat" type="text" value=""/>
<input id="centerlng" type="text" value=""/>
</body>
</html>

This HTML is loaded into the hidden IFrame which, when loaded, will punt a big chunk of XML back up to the outer frame's _load() function. This is kind of a cool trick, because it saves the outer frame from having to determine when the IFrame is done loading.

I mentioned before that there was some advantage to be had by using a hidden IFrame over making direct XMLHttp requests. One of these is that the IFrame's state affects the back button. So every time you do a search, it creates a new history entry. This creates an excellent user experience, because pressing the back button always takes you back to the last major action you performed (and the forward button works just as well).

Big Hunks of XML
Ok, so now the outer frame's code has a big chunk of XMl. What can it do with that? Well, it turns out that Google Maps depends upon two built-in browser components: XMLHttpRequest and XSLTProcessor. Oddly enough, even though it doesn't use XMLHttpRequest for making calls to the server, it _does_ use it for parsing XML. I'll get to the XSLT later.

Here's an example of the XML response that comes back from the 'Atlanta' request above:

<?xml version="1.0"?>
<page>
<title>atlanta</title>
<query>atlanta</query>
<center lat="33.748889" lng="-84.388056"/>
<span lat="0.089988" lng="0.108228"/>
<overlay panelStyle="/mapfiles/geocodepanel.xsl">
<location infoStyle="/mapfiles/geocodeinfo.xsl" id="A">
<point lat="33.748889" lng="-84.388056"/>
<icon class="noicon"/>
<info>
<title xml:space="preserve"></title>
<address>
<line>Atlanta, GA</line>
</address>
</info>
</location>
</overlay>
</page>

Nothing surprising here -- we have a title, query, center & span, and the location and name of the search result. For a slightly more interesting case, let's look at the response when searching for 'pizza in atlanta':

<?xml version="1.0" ?>
<page>
<title>pizza in atlanta</title>
<query>pizza in atlanta</query>
<center lat="33.748888" lng="-84.388056" />
<span lat="0.016622" lng="0.017714" />
<overlay panelStyle="/mapfiles/localpanel.xsl">
<location infoStyle="/mapfiles/localinfo.xsl" id="A">
<point lat="33.752099" lng="-84.391900" />
<icon image="/mapfiles/markerA.png" class="local" />
<info>
<title xml:space="preserve">Kentucky Fried Chicken/Taco Bell/<b>Pizza</b> Hut</title>
<address>
<line>87 Peachtree St SW</line>
<line>Atlanta, GA 30303</line>
</address>
<phone>(404) 658-1532</phone>
<distance>0.3 mi NW</distance>
<description>
<references count="9">
<reference>
<url>http://www.metroatlantayellowpages.com/pizzaatlanta.htm</url>
<domain>metroatlantayellowpages.com</domain>
<title xml:space="preserve">Atlanta<b>Pizza</b> Guide-Alphabetical Listings of Atlanta<b>...</b></title>
</reference>
</references>
</description>
<url>http://local.google.com/local?q=pizza&near=atlanta&amp;amp;amp;amp;amp;amp;latlng=33748889,-84388056,11825991348281990841</url>
</info>
</location>

{ lots more locations... }

</overlay>
</page>

Again, nothing too surprising when you think about the data that's going to show in the map pane. But how do the results get shown in the search result area to the right? This is where things get a little wacky. The JavaScript actually uses the XSLTProcessor component I mentioned earlier to apply an XSLT to the result XML. This generates HTML which is then shown in the right panel. We've come to expect this sort of thing on the server, but this is the first time I've ever seen it done on the client (I'm sure it saves Google lots of cycles, but personally I didn't even know XSLTProcessor existed!)

Driving Directions
There's one last case to discuss, and that's driving directions. This works just like other searches, including XSLT to show the results, with one exception: the result XML includes a <polyline> tag that two opaque values encoding the geometric route to be taken. This data appears to be base 64 encoded (or something similar, anyway). Remember the giant transparent PNG I mentioned earlier for rendering routes? This data is used to render that sucker. The data looks like this:
<polyline numLevels="4" zoomFactor="32">
<points>k`dmEv`naOdGC??EtD??@|DAxL??hEFjJ@ ...</points>
<levels>BBB???BB?BB??@??@?????BB??@?????@? ...</levels>
</polyline>
This polyline data is then used to request the route PNG from the server using a URL like so:
  http://www.google.com/maplinedraw?
width=324&height=564&amp;amp;amp;amp;amp;amp;path=sRS?k@fB@?}As@e@CGAIA}@BwCEu@Bs@?E_@cACS@a@PaC ...

The route overlay

In Summary
That's about it. I hope that demystifies this application a bit; the real magic, of course, is all the work going on to enable this on the back-end. The fact that Google's servers can handle all of these images requests, route finding, line drawing, searches and the like so quickly is the real magic. I also want to point out that their map renderer (or the one they purchased) works _much_ better than all the other ones I've seen on Mapquest, Mapblast, and the like. That alone makes it worth using, if only so you can actually _read_ the map!

I also think it bears noting that Google is pulling out all the stops to build rich web apps, no matter how weirdly they have to hack the browser to make them go. And I strongly believe that this is a trend that is here to stay -- XHTML Strict/CSS/etc be damned. At the end of the day, what really matters to users is compelling apps that let them get their work done quickly.

394 comments:

«Oldest   ‹Older   1 – 200 of 394   Newer›   Newest»
homeathouse said...

very well done. that about covers it--and clears a lot up. i'm always impressed with with the way Google handles things. of course, i just happened upon your post now--after looking at google maps behind the scenes for myself. have fun at Google. let us know what you've been up to

wow said...
This post has been removed by a blog administrator.
vipin said...

Once again it proves that 'Successful People do the SAME things Differently...'

Simply Great.

Brian said...

The 'v' is the version number of the api. It's starting value is 0.1 and it looks like they have not needed to iterate yet.

-b

costa rica said...

This blog is fantastic, is very interesting, I like the colors, are awesome. Keep it and show us more!!!! Do you wanto to see something more? Look... Glass Bongs and Bong featuring Herbal Smoke, water bongs, bongs online head shop, Marijuana Alternative,glass water bongs, Hashish, Ganja, homemade bongs, Smokeshop, cannibis, legal smoking alternatives for herbal highs and aphrodisia. http://www.headshopinternational.com

Jun said...
This post has been removed by the author.
Jun said...

Demo of Google Map API 2.0 and 2.x
Book Race on Google Map
Travel Guides on Google Map

mike said...

Very interesting, i think i will have to keep an eye on what google have to offer in the future!

Mike

Movie maniac said...

Thank you for info about Gmail

Yellowheels said...

Hi i have this project that i am working on at work and it has to to with google maps. Our google map that is on our site has a lot of markers but most of them are in seattle. Because we have so many of them they are slowing the load time down to the point where it is unbearable and I was wondering if there was a way that you know about or can figure out how to make it so that when you zoom into one region where the markers are you can have it so that everything that is not a part of that region will disapear not only to the eye but really disapear to the point where it won't take up all that extra space and the load time would be shorter.
I really need some help with this if you can please do.

Ben G. said...

Thanks for keeping the comment about glass bongs.

Adam said...

thanks

Gaurav said...
This post has been removed by a blog administrator.
Michael said...

I have a site up I am also trying to make my own googlemap using game maps. Check out mywebsite at http://stokescomp.googlepages.com/gmap
I have been succesful making one zoom layer so far.

. said...

This is really a great article!

mike said...

Hmmm, google maps - this blog has helped me to get my head around things - thanks!

apartments

S3 Technology Softwares said...
This post has been removed by the author.
S3 Technology Softwares said...

Nice Thanks !
HAve a look at my Blog
--- S3tech Blog ----

Moroccan Home Decor said...

Nice Entry!! Made things a lot clearer... That is pretty much the same explanations I got from the Dallas SEO company Optimizing my site

admin said...

Personally i like it, even if it is for a DHTML web app... a job well done i think.

Cheers,

ibiza

mike said...

I always found DHTML a bit restrictive, but this is ace! Nice one!

Cheers,
highs

TrueColorZ said...
This post has been removed by a blog administrator.
KLadofoRA said...

they develop it now more
they add some fillter as y write
منتديات

Blackpool Hotels said...

Wow Love The Blog Comment from: James FromBlackpool Hotels I must say Because we have so many of them they are slowing the load time down to the point where it is unbearable and I was wondering if there was a way that you know about or can figure out how to make it so that when you zoom my own googlemap using game maps.

netsurfmarketing said...

Hey awesome ideas and blog. Since you seem to have the inside scoop on Google maps perhaps you can help quell a debate.

We have a site http://www.netsurfmarketing.com. that is geo-targeting the keywords like Internet Marketing Vancouver . Our debate is that by adding a Google map to our site - or any site - will or won't affect the site ranking in Google.

Comments and ideas would be greatly appreciated as this is beginning to divide us into two camps.

dharma said...
This post has been removed by a blog administrator.
adil adil said...

thank you plog onwer
really this is nice a blog
sohbet
sohbet odasi

Can said...

Thanks..
Best regards

mirc
mircturk
forum

Lazereyes said...

Where exactly in google maps the XMLHttpRequest is done????

In a blog http://blog.grimpoteuthis.org/2005/02/mapping-google.html
by
Joel Webber ( Engineer, Google Web Toolkit ) says that

" even though it doesn't use XMLHttpRequest for making calls to the
server, it _does_ use it for parsing XML "

What does it mean exactly???? XMLHttpRequest for parsing XML??? I dont
understand.....

Runescape Cheats&amp;Tips said...

I think wow gold is better than world of warcraft gold i always Buy WoW gold with cheap wow gold so u Do u like play nba live with nba live 2008 can play wow gold also then Buy WoW gold need to world of warcraft gold u can go google排名 or cheap wow gold i think its google左侧排名

thekusursuz said...

mirc
sohbet
chat
thanks for artichle

Can said...

Thanks
Best regards
mirc
mirç
mırc
mırç
mircturk
turkmirc
mirc indir
mirc yukle
forum
forum
mirc
turkmirc
turkforum
sohbet

holsten said...

they develop it now more

than you

منتديات , العاب , بلوتوث , صور

Uğurcan said...

forum
forum

teşekkürler..

KuSuRSuZ said...

http://www.ircsohbet.com
thankx for artichle

KuSuRSuZ said...

mIRC
thanx

KuSuRSuZ said...

mIRC

xuefeng said...

Hello all guys cool blog

Just passing by and hope you have a nice day today

Mini StorageMini Storage
StorageStorage
迷你倉迷你倉
搜尋引擎最佳化搜尋引擎最佳化
香港之家香港之家
貨倉迷你倉
StorageStorage

Diana said...

Google Maps (for a time named Google Local) is a free web mapping service application and technology provided by Google that powers many map-based services including the Google Maps website, Google Ride Finder and embedded maps on third-party websites via the Google Maps API. sportsbook, It offers street maps, a route planner, and an urban business locator for numerous countries around the world. A related product is Google Earth, a standalone program for Microsoft Windows, Mac OS X and Linux which offers enhanced globe-viewing features. http://www.enterbet.com

Uğurcan said...

forum

thanks

Uğurcan said...

ceyiz evi

thanks..

ForumGezer said...

www.forumgezer.com

Emre said...

hikaye |
porno |
sex |
sex |
hikayeler |
porno hikaye |
sex |
porno |
bakire |
sex shop |
seks shop |
geciktirici |
penis büyütücü |
hikaye |
hikaye |
porno |
sex |
porno |
sex |
mirc |
mirc |
yüzük |
hikaye |
güzel sözler

ForumGezer said...

forum

talha said...

mirc
mırc
türkçe mirc
mirc indir

sohbet odaları
sohbet odaları

Emre said...

hikaye |
hikaye |
sex |
hikayetube.com |
porno |
mirc |
mirc |
yüzük |
hikaye |
elektronik sigara |
elektronik sigara |

Sigur Ros said...
This post has been removed by the author.
Sigur Ros said...

>güzel sözler

thanks

ahmet can said...

Thanks Best Regards
mirc
mirç
mırc
mırç
mircturk
turkmirc
turkiyemirc
mircturkiye
mirch
mırch
mirc indir
mirc yükle
mirc yukle
mırc indir
mırc yukle
mirc turkiye
turkiye mirc
turk mirc
mirc turk
türkçe mirc
türkce mirc
türkçe mırc
turkce mirc
turkçe mirc
turkçe mırc
turkce mirc
mirc chat
mirc sohbet
mirc ara
muhabbet
chat
blog
muhabbet
forum
forum
turkiyeforum
türk forum
mirc
mircturk
turkmirc
mirc indir
sohbet
chat
bedava sohbet
turksohbet
turkiye sohbet
sohbet odaları
bedava chat
chat odaları
türk chat
türkiye chat
turkada
turkmirc
mirc inndir
karar

Zets Directory said...

sex shop -
sex shop -

feromon -

Directory -

sex shop -

sex shop -

seks shop -

seks shop -

seks shop -

erotik shop -

erotik shop -

penis büyütücü -

penis büyütücü -

penis büyütücü -

erotik shop -

seks shop -

sex shop -
erotik shop -
erotik market -

vidrom.com -

video share -

file upload -
free file -

image upload -

erotik market -
erotic market -
erotik market -
erotik market -
erotic shop -
erotic shop -
erotic shop -

site ekle -

directory -

alışveriş -

12 taksit

feromon -
feromon -
Kozmetik
Shopseks.com
Hepzinde.com
penis büyütücü -
penis büyütücü -
virility pills -
elektronik sigara -
virility pills -
penis büyütücü -
penis büyütücüler -
bayan iç giyim -
virility pills -
elektronik sigara
feromon
bayan iç giyim
bayan iç giyim

Cyrus said...
This post has been removed by the author.
Steve said...

You know, I understood less than half of that. Still thought it was cool to see how Google maps is put together. We use it all the time now, instead of Yahoo, when we have some driving to do.

http://acnetreatments.blogster.com/touching_face_cause_pimples.html

Sevdaligeceler.Com said...

Adult Forum Sitesi
Yetiskin Forum
Adult Reklam Alınır
Fetish Forum
Full Filimler
Teen
oyun
Hikaye
Hardcore
Güzel Sözler
Pantyhouse
Mature
100mb Altı kota Dostu Filim
Lesbian
Party Voyeur
Asian
Shemale
Hentai
Lingerie

sexhikayeleri said...

thanks a lot

güzel sözler | hikaye | hikayeler | güzel hikayeler | anlamlı hikayeler | seks hikayeleri | sex hikayeleri | <film indir | film izle

Burda Herşey Bedava said...

Good jobs.Thanks.



Adult Forum Sitesi
Yetiskin Forum
Adult Reklam Alınır
Fetish Forum
Full Filimler
Teen
oyun
Hikaye
Hardcore
Güzel Sözler
Pantyhouse
Mature
100mb Altı kota Dostu Filim
Lesbian
Party Voyeur
Asian
Shemale
Hentai
Lingerie

Jeddahbikers said...

منتديات جده |
جده |
محمد
| انشر |
hguhf|
دليل جدة |
مقاطع فيديو
| منظمه |

العابي

君晓网络 said...

苏州市迅特升降机有限公司是中国升降机行业最好的升降机制造商;苏州市迅特升降台有限公司是中国升降台行业最好的升降台制造商;苏州市迅特升降平台有限公司是中国升降平台行业最好的升降平台制造商;苏州市迅特登车桥有限公司是中国登车桥行业最好的登车桥制造商。

kaan said...

http://www.diziozetleri.com/dizi-ozetleri-42

kaan said...

komik
komik resimler
komik fıkralar
komik sesler
bilmeceler
karikatür
komik yazı
komik haber
komik rüya
komik icat
komik video
fotomontaj

güzellik bilgileri
ilk yardım
kadın sağlığı
organ nakli
parazitler
sağlık
ağız sağlığı
aile planlaması
akupunktur
apseler ve iltihaplar
ayak sağlığı
cinsel hayat
cinsel ilişki
cinsel pozisyonlar
cinsel sağlık
çocuk sağlığı
gebelik
göz sağlığı
kanser
kızlık zarı
lazer epilasyon
memeler
tedavi
sağlıklı beslenme
stres
uyuşturucu


vBmaster.org seo yarışması

eren
eren bakıcı
Grup hepsi anket
Hepsi 1
Hepsi bir
grup hepsi

君晓网络 said...

苏州市迅特升降机有限公司是中国升降机行业最好的升降机制造商;苏州市迅特升降台有限公司是中国升降台行业最好的升降台制造商;苏州市迅特升降平台有限公司是中国升降平台行业最好的升降平台制造商;苏州市迅特登车桥有限公司是中国登车桥行业最好的登车桥制造商。
货架
超市货架
北京货架
南京货架
货架公司
货架厂
广州货架
北京货架公司
北京货架厂
仓储货架
苏州货架
托盘
托盘
塑料托盘
塑料托盘
木托盘
纸托盘
塑料托盘价格
置物架
仓储笼
仓储笼
钢制料箱
登高车
手推车
静音手推车
仓储设备
物流设备
工具柜
零件柜
工作台
工作桌
文件柜
文件柜
服装货架
仓库货架
角钢货架
轻型货架
中型货架
重型货架
货架
货架
托盘
塑料托盘
仓储笼
google排名

君晓网络 said...

苏州市迅特升降机有限公司是中国升降机行业最好的升降机制造商;苏州市迅特升降台有限公司是中国升降台行业最好的升降台制造商;苏州市迅特升降平台有限公司是中国升降平台行业最好的升降平台制造商;苏州市迅特登车桥有限公司是中国登车桥行业最好的登车桥制造商。
货架
超市货架
北京货架
南京货架
货架公司
货架厂
广州货架
北京货架公司
北京货架厂
仓储货架
苏州货架
托盘
托盘
塑料托盘
塑料托盘
木托盘
纸托盘
塑料托盘价格
置物架
仓储笼
仓储笼
钢制料箱
登高车
手推车
静音手推车
仓储设备
物流设备
工具柜
零件柜
工作台
工作桌
文件柜
文件柜
服装货架
仓库货架
角钢货架
轻型货架
中型货架
重型货架
货架
货架
托盘
塑料托盘
仓储笼
google排名
google左侧排名

tercumenette said...

nicepost

http://wardh.al-kaon.com said...

http://wardh.al-kaon.com/forumdisplay.php?f=1
http://wardh.al-kaon.com/forumdisplay.php?f=4
http://wardh.al-kaon.com/forumdisplay.php?f=8
http://wardh.al-kaon.com/forumdisplay.php?f=13
http://wardh.al-kaon.com/forumdisplay.php?f=17
http://wardh.al-kaon.com/forumdisplay.php?f=25
http://wardh.al-kaon.com/forumdisplay.php?f=30
http://wardh.al-kaon.com/
http://quraish.al-kaon.com/vb

übersetzungen said...
This post has been removed by the author.
übersetzungen said...
This post has been removed by the author.
übersetzungen said...
This post has been removed by the author.
übersetzungen said...
This post has been removed by the author.
merkaz said...

منتديات

ادما موقع عربي خليجي سعودي said...
This post has been removed by the author.
ادما موقع عربي خليجي سعودي said...

العاب فلاش تحميل افلام دردشة كتابية

zorakikocafansite said...

Your Tech Universe

ForumGezer said...

forum

http://wardh.al-kaon.com said...

منتدى وردة الكون ~>http://wardh.al-kaon.com/

PaSha said...

thanks

freya said...

If you look back at the last few months,wow goldwow goldwow goldwow goldwow goldwow goldwow goldwow goldwow goldwow gold you may have mixed feelings about some of the releases. world of warcraft goldworld of warcraft goldworld of warcraft goldwow goldwow goldUnbalanced trade removal; wow goldBounty Hunter and Clan Wars; wow goldwow goldLootShare; the Assist System; the Grand Exchange: these were all massive changes affecting a huge number of people. They were so big, in fact, and released in such a short period of time, world of warcraft goldthat we could not get everything right while also making every player happy. We certainly aimed to do so, but we still came some way short.world of warcraft goldworld of warcraft goldworld of warcraft goldworld of warcraft goldworld of warcraft goldwow goldworld of warcraft goldworld of warcraft goldworld of warcraft goldworld of warcraft goldworld of warcraft goldworld of warcraft goldworld of warcraft goldWe decided, soon after their release, that we could address many of your problems with them.eve online iskeve iskGuild Wars goldLOTRO goldLOTR goldHellgate London PalladiumHellgate online goldSilkroad goldLineage 2 adenaMaple Story Mesosmaplestory MesosEverQuest 2 goldeq2 platffxi gil Your feedback on the Forums has really helped, and we have even been able to consult you on a number of instances.eve online iskeve iskGuild Wars GoldLOTRO GoldLOTR GoldHellgate London PalladiumHellgate online goldSilkroad goldLineage 2 adenaMaple Story Mesosmaplestory MesosEverQuest 2 goldeq2 platffxi gilThis led to the 'Future Changes to Recent Updates' in January: a list of our proposed changes to our recent content.eve online isk