CSM X Ballot

I really should post here more. But you know how it is, when you don’t have anything in particular to say.

 

Anyhoo, The election is here, and I thought it would be worth name checking a few people who you should consider having on your ballot. Of course, the first person should be me, Steve Ronuken. I’d be an idiot to say otherwise. But if you decide that you prefer someone else, just stick me somewhere lower down. Every little helps.

I’m not going to be listing positions on the ballot (other than me first πŸ˜‰ ), because you should vote for people who you think will represent your space and play style best. So someone in Wormholes should probably have Corbexxx second on the list, where as someone in Low should have Sugar Kyle. I’m going to keep the blurbs pretty short, but I do suggest looking them up some more in other media. Shamelessly lifted from Sugar’s blog:

Steve Ronuken

Vote for me, please πŸ™‚ This term’s been great for getting stuff out to the third-party community, then onto everyone else. And industry is in a healthier (if not perfect) place than it used to be. More to do though. Next term, I’m expecting to see more coming out for CREST, which can be a real game changer.

Sugar Kyle

As has been stated by pretty much every other candidate, Sugar’s been doing a wonderful job on CSM 9. Approachable, diligent, and a hard worker. She’s not one for drama either, which I’m a fan of. While she’s spending her time mostly in lowsec, she’s got a good head on her shoulders, and a good understanding of other spaces.

Corbexxx

Not the most prolific writer, but a good communicator, and always going to the wider community for feedback and research.

Bam Stroker

Some people talk about helping the community. Bam’s involved in it. Just look at Eve Down Under. I think he’s going to be useful. Sure, he’s in PL, but you can’t have everything.

Jayne Fillon

NPSI is important. Jayne’s been a good representative for it. He’s a touch abrasive, but a chunk of that comes from not suffering fools gladly. NPSI leads to better player retention, as it draws people into wider social groups, and more activities.

Ashterothi

Another candidate with good lowsec (FW in this case) experience. And has just branched into wormholes πŸ™‚ Which is handy, for an alternate viewpoint. And Lore!

Psianh Auvyander

Psianh’s a mercenary. And a trainer of mercenaries. I think that brings a useful perspective.

Cagali Cagali

BNI Education, Recruiting and HR. Newbies are important. CagaliΒ² has to work with them on a regular basis. And a degree of nullsec experience is handy, from the non-incumbent perspective.

 

 

I have this terrible feeling I’m missing someone. Anyway, go vote (when it opens). You don’t need to fill in all the positions, but do at least 5.

CREST market data

This has been out for a while, but I’ve now got something public ( https://www.fuzzwork.co.uk/market/viewer2/ ) out there, I thought I’d write some words.

Of all the things which have happened in my CSM term, the availability of ‘live’ market data is one of the ones I’m happiest about. It might not seem like a big step, but we now have access to data directly from Tranquility, in a way that has a very low cache time. (I’m expecting some future ones to be even smaller, but that’s more specific data) It’s been a long time coming, and is a step towards removing the ‘requirement’ for the grey area of cache scraping. (Along with the dgmExpressions table being added to the SDE). Grey areas are bad, because they lead people to push the boundaries, and I don’t want to see someone banned for that.

But enough electioneering (Vote for me! πŸ™‚ ), I thought I’d write a little about what it’s doing. I had help in the form of Capt Out’s Crest Explorer which gave me a head start, rather than needing to implement the core ‘Log into the SSO’ bit. After that, it’s just a matter of:

  • Grab the region list. (filtering out the Wormholes)
  • Grab the base market groups.
  • Wait for the user to click something
    • If it’s a market group, grab that specific group, and loop through it for direct children
    • If it’s an item, if a region is selected, grab buy and sell orders, before cramming them into tables
    • If it’s a region, grab the region data for where to get buy and sell order data

That’s pretty much it. There are some twiddly bits (like languages) but the rest of it is just AJAX calls, and looping through the result sets for display. I’d hope the code is fairly simple to understand (if you know any javascript/jquery) but if you have any questions, feel free to throw them my way.

https://github.com/fuzzysteve/CREST-Market-Viewer for the source. MIT licensed.

Why medical clone costs needed to go.

The short version:

It was a mechanic which discouraged people from actually flying ships. That is, discouraged them from playing the game.

The longer version:

While clone costs aren’t really high, until you start getting into the really high levels of SP, they form a mental block for people. ‘You’re flying a Rifter. Your Pod costs more than the ship’. You don’t get any benefit from upgrading your clone. You just don’t get smacked with a penalty.

It’s a tax on PvP, which gets worse the longer you play. The better you get, the more you lose when you die. Sure, you’ll find PvPers who say that they rarely lose their pod. You’ll find that these people spend the vast majority of their time in, probably, Lowsec. While it’s possible to lose a pod there, you have to be pretty bad to do so. Wormholes and null, however, are the land of bubbles. Pity the poor Sabre pilot, who is almost certain to lose his Pod, as he’s probably going to be inside his own bubble when he dies.

If there was actually a meaningful choice with Clone upgrades, that would be another matter. But there isn’t. You either upgrade your clone, or you’re an idiot (disclaimer: I miss Minmatar Battleship 5)

So, CCP removing medical clone levels is a good thing. They’ve stated that they’re not finished there, that the removal is a quality of life change, which opens up more possibilities for future changes. Sure, they could have waited. Some people have said they should have. I disagree. Removing a gangrenous limb, without having a prosthetic available, isn’t a mistake. Remove it now. Put something better in, when it’s ready.

Is it making Eve easier? A little. But if you’re really complaining about someone not needing to remember something before undocking, well, there’s nothing I can say which you’re going to listen to. Hardness, here, is nothing to do with skill. It’s just annoying crap.

Being Podded still has consequences. Death still matters. Someone with a full snake set isn’t going to brush off a death. But they got to make a choice there. They chose to risk the implants, and got a reward for it. Clone grade doesn’t really enter into the risk/reward there. You can choose to risk a skill. Your reward is, you pay a little less. Not really meaningful against the penalty of losing a great deal of skill points.

 

Oh, and yes, you’ll no longer be able to get someone to pod themselves down to no skills. My tear bucket is over there. Go fill it.

Eve Vegas

I know I’ve been light on posting. Sorry about that, I’ve just not had much to talk about that I can talk about publicly. At least, not that hasn’t been covered in detail by other people. Sugar Kyle has been great at this. Lots of writing. πŸ™‚

However, I’ve been poked by people that think I should be communicating more (Thanks Sugar) so I’m trying to pick my writing up again.

By now, you’ve probably read a bunch about Eve Vegas, and the shenanigans people got up to there. I enjoyed myself greatly there, and spent a fair quantity of time talking with people, getting a general feeling for how things are going down. With Phoebe, the general feel I got was resignation that, while the jump changes might impact on gameplay they liked, it was for the good of the game in general. While not the most upbeat feel, sometimes you just have to rip the plaster off.

For those that watched the stream, yes, they called my name for a prize. Unfortunately, I was in the roundtable room, where I thought I would be more useful (I caught the presentations later) so I didn’t hear. Oh well, didn’t want those headphones anyway πŸ˜‰

From a 3rd party dev standpoint, Foxfour’s presentation and roundtable didn’t really reveal particularly much. However, it did point to a renewed appetite within CCP for getting us the tools which we need, to be able to do stuff. While we don’t yet have a timescale for getting authenticated CREST on TQ, he announced that we should be getting it on SiSi in the nearish future, first as part of a trial much like the SSO trial, and then moving onto an automated version. And SSO on TQ, for most people, should be out very soon indeed. Just waiting on a few crossed i’s and dotted t’s.

Capt Out’s CREST presentation is worth a watch. you can find it on Youtube. It’s not a recording of the one from Eve Vegas, instead being a redone one, with better production values. The roundtable room wasn’t good for recordings.

One of the big things I came away with, from talking with people, was a reinforced understanding that Discoverability is one of Eve’s key weaknesses. From ‘how do I find a community to be part of’ to ‘How do I change my own market orders, without going via the order screen’. So many options, with google often being the easiest way to find an answer. The NPE talk from Rise did touch on this, but it’s a little more endemic than that. It’s something that CCP will need to focus on, over time. For both New players, and Veterans.

 

Oh, and I’m running for CSM X. And I’m calling it that for a host of good reasons, not just because it let me update the ‘Vote Steve Ronuken for CSM 9’ tshirt that I have, with a sharpie. It’s an early announcement, but I’m hoping that people read the minutes which should be out shortly, and think I’m doing what they voted for.

 

 

 

 

Zoom zoom πŸ˜‰

Updated Blueprint Details

I’ve been a trifle remiss in posting of late, especially with the big changes which have come out lately. Sorry about that.

However, I have kept on top of getting the SDE conversions out, including the blueprint details, yanked out of the new blueprints.yaml file, and shoved into appropriate database tables. The good news is, they’re a lot easier to work with than the old versions. The not so good news is, I’ve not been back porting them into MS SQL server, so that’s a step you’ll have to manage yourself (Should be pretty easy, tbh. If you have trouble, give me a yell, and I’ll write something up)

The Tables:

ramActivities

This isn’t actually a new table. it’s just handy for knowing which activity id is which actual activity. such as 1 is manufacturing.

industryActivity

If you need to know how long it takes to do something, this is your table. Blueprint type id,Β  activityid, time in seconds to do it. This is a time unmodified by TE, so you’ll be reducing it.

industryActivityMaterials

This is the core table for most of you good folk. blueprint type id, activity id, material id, quantity, and if it’s consumed. With the changes coming in phoebe, consume is deprecated. I’m leaving it in, set to 1 for everything, so things won’t break, but it’ll go away in time.

industryActivityProbabilities

For invention and reverse engineering. No longer do you need to create a table, CCP provide all the information.

industryActivityProducts

The outputs from a blueprints, with its various activities. Handy, when you want to be able to determine what is invented from what. Also includes the number of items created in a batch, or the number of runs from invention and reverse engineering.

industryActivityRaces

This one will be going away. Prephoebe, it let you know what you could reverse engineer from what, race wise. That’s no longer needed.

industryActivitySkills

The skills to do each activity.

industryBlueprints

I needed somewhere to keep the maxProductionLimit value. That’s what this table is for.

 

As you can see, everything is a lot simpler to query now, everything tied to the blueprint type id, rather than to the final product. In the examples below, I’m using expanded Cargohold IIs. 1320 is the blueprint, 1319 is the actual thing.

[lang=sql]
select typeName,materialTypeID,quantity
from industryActivityMaterials iam
join invTypes on (iam.materialTypeID=invTypes.typeID)
where activityid=1 and iam.typeid=1320
[/lang]
To make something.

[lang=sql]
select typename,materialTypeID,iam.quantity
from industryActivityMaterials iam
join industryActivityProducts iap on (iap.typeid=iam.typeid)
join invTypes on (iam.materialTypeID=invTypes.typeID)
where iam.activityid=8 and iap.activityid=8 and iap.producttypeid=1320
[/lang]
To invent the blueprint to make them. This gives the materials for the invention, but not the required blueprint. To get that, you could just pull iam.typeid.

 

 

The formulas for using all these figures have been drawn together by Qoi, in this forum post https://forums.eveonline.com/default.aspx?g=posts&t=362493 which is handy. The core one is:

quantity after adjustment= max(runs,ceil(round((quantity(1-(ME/100))(1/(100-facility bonus))(1-(team bonus 1/100))(1-(team bonus 2/100))),2)))

The round, in case you’re curious, is there to eliminate a pesky floating point rounding error, which leads to some materials being 1 too high.

Google Docs, the XML API, and the nightmare of importXML

I loathe importXML. Truly despise it.Β  Sure, it works for some things, but the moment that you want to get more than a single piece of XML data back from each call, it becomes a problem.

Sure, you can have an importxml call which has multiple attributes in the xpath entry, but that depends on the site never changing the order that comes back. Which isn’t the world’s best idea.

There is, however, a solution. It’s one that I’ve been looking at recently, when Mynnna linked a forum post to me about someone loading asset information into google docs. It’s a neat solution, especially because the asset api is a more complicated one, with nesting (Assets can exist within Assets).

That got me looking at other APIs, and led to the creation of a new github repository where I’m keeping the code of some new custom functions for loading data. I’m not using them myself, but that’s because I’m a bit of a database snob. I can do things there which would be an absolute PITA to do in a spreadsheet. However, I am a code junkie, so this lets me scratch that itch (I can do this better! Tada!)

 

I thought I’d explain a little of what goes into these functions, basing it off the simplest of them. The outpost loader function.

function loadOutposts(){
  var outposts= new Array();
  var url = "https://api.eveonline.com/eve/ConquerableStationList.xml.aspx";
  var parameters = {method : "get", payload : ""};
  var xmlFeed = UrlFetchApp.fetch(url, parameters).getContentText();
  var xml = XmlService.parse(xmlFeed);
  if(xml) {
    var rows=xml.getRootElement().getChild("result").getChild("rowset").getChildren("row");
    for(var i = 0; i < rows.length; i++) {
      outpost=[rows[i].getAttribute("stationID").getValue(),
                 rows[i].getAttribute("stationName").getValue(),
                 rows[i].getAttribute("stationTypeID").getValue(),
                 rows[i].getAttribute("solarSystemID").getValue(),
                 rows[i].getAttribute("corporationID").getValue(),
                 rows[i].getAttribute("corporationName").getValue()
                 ]
      outposts.push(outpost);
    }
  }
  return outposts;
}

If you want to have a function that returns a bunch of rows and columns, you have to build an array of data, and return that.

An array is a simple idea. It’s way of bundling up information. A single dimensional array is a list. A two-dimensional array is a table (like a spreadsheet). You can have more levels, which become somewhat harder to visualise (3 dimensional: a table where a cell can contain lists of data. and so on)

So you have to take the XML data, and format it into a 2 dimensional array. Thankfully, this works easily. Each row in the API, becomes a row in the array. You build a list, and add it to the bottom at the total array (known as a push)

Step one: get the XML. that’s what the UrlFetchApp.fetch line does. At this point, you just have a bunch of text, which happens to be XML.
Step two: turn the text into a data structure your code can deal with. That’s the XmlService.parse line. You now have a data structure that your code can access, and loop through.
Step three: Make sure it was actually XML you had. If the parser couldn’t handle it, it’d have made the xml variable false, so the if (xml) test would fail.
Step four: loop through it. We don’t care about anything but the rows, so we burrow down to that level, (the getChild and getChildren line). With that split off, we now have an array (a 1 dimensional list) of rows. The for loop iterates through that, with a counter that points to each entry. The address of the entry/
Step five: Create a list of data about each outpost. Because we’re working with a proper XML engine here, it’s case sensitive on attribute names, unlike importXML.
Step six: push the list of data about a specific outpost onto the bottom of the list of outposts
Step seven: Repeat steps five and six until it’s finished.
Step eight: Hand the array back, with a return statement.

That’s pretty much the core of all the functions. Some are a little more complex, because they’re turning typeids into typenames and so on. That’s done by generating an array where the address is the typeid, and the other entry is the name. You can see an example of that in the MarketOrders function, for stations and typeids. If you’re wondering why I’m adding a _ to it, it’s to make sure it’s treated as text, so no funny business with number comparison or arrays with holes happens.

For the Market Orders function, you’ll also notice it requires the moment.js library loaded. This is because the scripting engine behind google sheets handles dates very badly. moment.js makes it far easier to do something like add 90 days to a date.

Anyway, the required steps to get one of the scripts working (excluding anything like the moment.js library, and additional sheets, mentioned in the comments for specific scripts)

 

  • open up a new, or existing sheet.
  • Tools menu -> Script editor
  • If you haven’t done this before, for this sheet, it’ll ask you what you want to create a script for. pick ‘Blank Project’
  • Delete the text which it shows ( the function myFunction() { } stuff. )
  • paste in the text for the function of mine you want to add.
  • As long as there aren’t other specific steps, you’re now done. The Eve Central and outpost scripts don’t need anything else.

At this point, you can just use the functions in your regular sheets πŸ™‚

 

If there are any APIs you can’t get working, give me a yell, and I may be able to help.

Excel and the JSON CREST feeds

More and more things are being put into EVE’s new public CREST endpoints.

For people who do industry, the most important 2 which are now there, are Cost Indexes, and adjusted prices.

Now, I’m not much of one for using spreadsheets myself, preferring to code a custom solution, but I know there’s a large group of people who won’t live without them.

Lockefox has put together a solution for googledocs. I’ve not used it, but it probably works well. If you need it, go take a look.

That leaves Excel. It used to be that working with things in Excel was easier, as it had better handling for loading entire XML sheets, rather than single cells. Unfortunately, it has no native JSON support. Even if it did, it’s nested data, which makes it somewhat harder to pull out.

Looking at the cost indexes, first you have an array of solar systems, and within each of those, you have an array of cost indexes. So you have to manually flatten that 3d data structure, into a 2d one.

I spent some time working on this, and came up with: costIndexes

It’s a macro enabled Excel workbook built in excel 2010, which loads in the cost indexes. I leave price data as an exercise for the reader. It takes a while to work but that’s because it’s processing a relatively large file, and it probably isn’t the most efficient way of doing it.

Now, to explain how it works, it’ll be easier if you open up Visual basic, from the development ribbon (file->options->customize ribbon, tick the development tab)

It’s including 3 files from http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html. The JSON modules, the cJSONScript and cStringBuilder class modules

Then you have the following subroutine in the source for the workbook. Finally, you have a button which calls the Test() subroutine. All in all, it’s actually pretty simple (because the json parser makes it easy)

Long term, there are probably better ways to do it, using .net or similar. But it works.

Sub Test()
    Dim oHttp As Object
    Dim jsonText As String
    Dim jsonObj As Dictionary
    Dim jsonRows As Collection
    Dim jsonRow As Dictionary
    Dim costInex As Collection
    Dim ws As Worksheet
    Dim currentRow As Long
    Dim startColumn As Long
    Dim i As Long
    
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <> 0 Then
        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
        MsgBox "Error 0 has occured while creating a MSXML.XMLHTTPRequest object"
    End If
    On Error GoTo 0
    If oHttp Is Nothing Then
        MsgBox "For some reason I wasn't able to make a MSXML2.XMLHTTP object"
        Exit Sub
    End If
    
    oHttp.Open "GET", "https://public-crest.eveonline.com/industry/systems/", False
    oHttp.Send
    
    'Create a real JSON object
    jsonText = oHttp.responseText
    
    Set ws = Worksheets("CostIndexes")
    
    
    'Parse it
    Set jsonObj = JSON.parse(jsonText)
    
    'Get the rows collection
    Set jsonRows = jsonObj("items")
    
    'Set the starting row where to put the values
    currentRow = 1
    
    'First column where to put the values
    startColumn = 1 'A
    
    'Loop through all the values received
    For Each jsonRow In jsonRows
        currentRow = currentRow + 1
        ws.Cells(currentRow, startColumn).Value = jsonRow("solarSystem")("id")
        For Each costIndex In jsonRow("systemCostIndices")
            ws.Cells(currentRow, costIndex("activityID") + 1).Value = costIndex("costIndex")
        Next costIndex
    Next jsonRow
End Sub

Head Canon – Blueprints

ooo, fiction. Flee while you can! Head Canon – An explanation I’ve come up with, with no backing from the original material.

“Damn it.”

Steve unlocked the catches holding the blueprint cartridge into the console, before removing it, and using a can of compressed air to clean it and the slot. “I could have blown into it to dislodge any dust, but corrosion and electrical contacts are a bad mix. And this one isn’t cheap.”

Seating it back in place, then re-engaging the catches, he turned to his visitors. “And now we’d have to wait for the nanite control matrix to replicate in the blanks. Time consuming, but the access controls are weaker, which gives me a far better chance to splice in some upgrades. However, I have a few I prepared earlier. Always have a few ticking over, when I’m hooked up in the capsule.”

Steve grinned, the expression somewhat out of place. Like he was unused to controlling those muscles. “My staff normally takes care of shifting the blueprints around. Just plugging the right cartridge, in the right socket, so I can take it from there, at some range. Unfortunately I’ve heard that the CRC are going to be banning the channels needed for actual control, which is a pain, but that’s life. Guess they’re running into some intra-system bandwidth problems.”

Waving his guests on towards a different terminal he continued, “These cartridges contain a second generation control matrix. It’s stable enough, unlike the third gen. Stable enough to spawn copies from it, and not to degrade as it gets used. The third gens, well, they’re more limited. Can’t cause another matrix to organise, and each time you have them run a cycle, they get a little less stable. The longer you leave them hooked up to a second gen, the better they get. To a point.” He paused. “Nanite based construction isn’t as simple as a set of instructions, saying ‘put this here, and that there’. They’re closer to a neural pattern. Very complicated, and somewhat difficult to make. The original makers have the first generation copy, which can spawn the stable second gen copies. The ones generally known as Originals. It’s not a good name for them, but it’s good enough.”

He sighed. “If I had one of the first gen, I’d be set for life. Any length of life. But no. What I’m currently left with is what I do here.” He waves his hand round the lab. “Taking badly protected matrices, and trying to splice upgrade patterns into them. Those are stable, but they don’t always take well. Or connect to the wrong place. I’ve had a few blueprints for ships, which had a thruster where the Capsule should have gone. Had to junk those. You get a feel for it though. When to cut your losses, and move onto the next, or when you can fix it. They’re even less stable than the third generation, but the performance benefits are worth it, and I’m following guidelines laid down by better, well, more specialized minds than mine.”

“Oh, research? There’s some research you can do with the second gens. They’re stable enough to massage. Where you can find places to strip out wasted materials. Lighter support beams, for example. Or a power core that’s closer to the margin. Again, it’s more of an art than a science. And one that really needs a direct neural interface. Art, rather than science. And a great deal of simulation. Thankfully something I don’t need to do much these days. I have associates for that. It’s not a full-time job, with the required simulations, and stabilization time, but it takes more time that I want to put in. And I just don’t enjoy it.”

Steve turned back to his guests. “So.. This is where you’d be working, if you took me up on my offer. For your down time, I’d be providing plenty of entertainment. Holoreels a plenty,” He coughs, “Entertainers. good food. And all for the fairly short time you’d be working for me. And a wage you just can’t get planet side. What do you say?”

Finally, a CSM post

I kept meaning to write something, but there was always something new coming up. Or I was recovering from the night before.

Well, here it is. Thank you, to everyone that voted for me, and showed some faith in the system. I’ll try not to let you down. From the chat’s I’ve had with the other CSM members, I think we’ll do pretty well this year. They’re an engaging bunch, and opinionated. Which is always good.

You may have seen that we’ve decided not to elect any of the positions. This isn’t an attempt to get out of doing any work, or to stop Ali from getting the Chairman position. In part, it’s due to CCP saying that positions wouldn’t be elected until the summer summit, and also from the fact that we think we won’t actually need them.

The newcomers amongst us will still listen to the people who have been around before, and we’ll just designate people to do tasks as needed. The net effect is the same, with no e-peen waving required. Lets us get down to business.

Anyway, I’ve not yet had any serious conversations with CCP, and only just signed my NDA. The transition’s going fairly smoothly.

I’m not sure how often I’ll be blogging, mostly because the stuff I’m going to be most interested in will be behind NDA, or released on the forums shortly there after. But I’ll try to keep up.

In other news, I’ve added a CSM section to evebloggers.com, and you can find it in the navbar. Right now, it’s kind of sparse, because I had to add categorization for posts, and that requires reprocessing. Mostly I chose to do it with Mynnna’s as it had the fewest posts overall, so I could just dump them all, rather than everything past a certain date. I’ll get to the other people’s soon enough.

PSA – Surviving Fanfest

Surviving Fanfest isn’t particularly difficult. Staving off Icelandic Death Flu (also known as Con Crud) is a trifle more difficult. And not being lynched for poor hygiene appears to be difficult for some poor souls. So here’s a few basic guidelines.

If anything appears to be insultingly obvious, then it’s not directed at you.

 

Hygiene

A small refresher course:

  • Shower in the morning, using soap or shower gel. You won’t melt. The water can smell a bit, but it dissipates rapidly (and beats body odour hands down)
  • Apply antiperspirant after showering. Not deodorant. Antiperspirant helps stop the sweat which leads to BO. Deodorant just tries to cover it up (and either fails, or chokes anyone nearby)
  • Change your clothes at least once per day

Remember, the human nose is good at getting used to scents. Just because you can’t detect it, doesn’t mean other people can’t.

Health

This one’s less obvious to people who haven’t been to any large convention.

  • Eat. Ideally at least three meals, but at least a large breakfast and dinner. Snacking throughout the day isn’t a bad idea. Starving people have weak immune systems. Ideally you’re not eating things which are just sugar. Complex carbs, fats, and protein are what you want to go for. If you see them, protein barsΒ aren’t a bad idea.
  • Stay hydrated. You’re probably going to be drinking a lot of booze. Make sure you have water too. Having at least a water bottle with you is a very good idea. keep drinking throughout the day. Starting the day with at least a glass of water is good. (Your urine should be pale yellow or clear. Dark is a sign of dehydration, which is just asking for infection and discomfort)
  • Wash your hands. Soap and water.
  • Try to avoid touching your face. If you have to, your off-hand is probably the cleaner of the two (as you use your primary hand to touch things). You will fail to avoid touching your face.
  • Hand sanitizer (High alcohol based please. Anti-bac trends to tougher bacteria) as backup.
  • Fistbump beats a handshake. Not touching is better, but not always practical.
  • Consider extra vitamins. A healthy balanced diet means you don’t need this. Are you going to have such a diet at Fanfest?
  • No licking people.
  • Shower at night. Good way to get rid of anything you missed earlier. 2 showers are better than one. Go for the morning if you only go for one.

Scheduling

Plan which events you’re going to go to, in advance. That way you’re not running round like a headless chicken. The mobile schedule is a good way to plan, using the regular schedule to decide which to see for each bracket. Leaving gaps to go to places like the PvP room, or to eat, isn’t a bad idea, if there’s nothing on at a particular slot.