Failing In So Many Ways

Icon

Liang Nuren – Failing In So Many Ways

Gallente is better at brawling

Sebastian Cane from Eve-O writes [eveonline.com]:
You think hybrids where buffed greatly? Fly an AC-Boat like a Blasterboat, and then you see a real close-combat performance how it should be. Try it out. You will understand why i´m stating that the Minmatar should be made the new close combat race. Aside from the fact that their weapons have more range they already are. And they are the only ones you can make this style of fighting work outside of a few niches.

Heh, I’ve done it many times. Here’s the most recent example:

Last night I spotted a Myrm in Egghelende and Tomin and I went to kill it. We did. Then I was sitting my GCC off at a belt in Egg because Amamake was pretty quiet, and I spied a Thorax at a belt. I figured I had two choices – warp in at zero and have the best opportunity for a tackle or warp in at range as my vagacane might demand. I was greedy for a kill (it was waaaay too fucking quiet) and I warped in at zero. Lo and behold, the Thorax was at zero as well and scrammed+webbed+pointed me straight away.

Its not that big of a deal though, and the first thing I did was prime gunes, point, and put my drones on him. Then I zoomed in on his ship and matched transversals while overheating for my 770 overheated DPS (my skills – 784 max). Tomin arrived shortly thereafter but had the foresight to warp in at a bit of range – and it wasn’t terribly long after that he saw a Cane + Drake on scan. I overheated everything but the neuts didn’t cap the Thorax out before the Drake and Cane landed and point+scram+webbed me again.

The Cane started lighting me up and both of them launched ECM drones at Tomin. I finished off the Thorax before turning my attention to the Hurricane. His shields went down fast, and his armor faster still.. but I still only got him to half armor before I went down in a blazing ball of fire. They instascooped my wreck and fled the field when Tomin came back in to try to finish the (very) damaged Cane off.

The entire fight took place within 3-5km and my two utility highs did absolutely nothing for me.

Here’s my loss mail: http://kb.heretic-army.biz/?a=kill_detail&kll_id=60520 [heretic-army.biz]

Here’s the fit:

[Hurricane, Vagacane]
Gyrostabilizer II
Gyrostabilizer II
Gyrostabilizer II
Tracking Enhancer II
Tracking Enhancer II
Damage Control II

Y-T8 Overcharged Hydrocarbon Microwarpdrive
Large Shield Extender II
Large Shield Extender II
Warp Disruptor II

425mm AutoCannon II, Republic Fleet EMP M
425mm AutoCannon II, Republic Fleet EMP M
425mm AutoCannon II, Republic Fleet EMP M
425mm AutoCannon II, Republic Fleet EMP M
425mm AutoCannon II, Republic Fleet EMP M
425mm AutoCannon II, Republic Fleet EMP M
Medium Energy Neutralizer II
Medium Energy Neutralizer II

Medium Core Defence Field Extender I
Medium Core Defence Field Extender I
Medium Core Defence Field Extender I
Hobgoblin II x5

Vital Stats (my skills):

  • 50k EHP
  • Overheated DPS: 770 @ 1.9+20

Here’s a similar Brutix fit that I wish I’d been in:

[Brutix, Shield Gank Brutix]
Magnetic Field Stabilizer II
Magnetic Field Stabilizer II
Magnetic Field Stabilizer II
Tracking Enhancer II
Damage Control II

Y-T8 Overcharged Hydrocarbon Microwarpdrive
Large Shield Extender II
Invulnerability Field II
Warp Scrambler II

Heavy Neutron Blaster II, Void M
Heavy Neutron Blaster II, Void M
Heavy Neutron Blaster II, Void M
Heavy Neutron Blaster II, Void M
Heavy Neutron Blaster II, Void M
Heavy Neutron Blaster II, Void M
Heavy Neutron Blaster II, Void M

Medium Core Defence Field Extender I
Medium Core Defence Field Extender I
Medium Core Defence Field Extender I
Hammerhead II x5

Vital stats (My skills):

  • 55k EHP
  • Overheated DPS: 969 @ 2.6+8.1

So here’s the skinny:

  • The Brutix does 28% more DPS
  • The Brutix has 11% more EHP
  • The Brutix tracks better, and would have applied DPS to the Thorax better.
  • The Brutix actually has better ranges for the fight took place in.
  • I have every reason to believe I would have killed both the Thorax and Hurricane with a Brutix instead of the Cane.

Long and short? Minnies lack the things that really matters in a brawl – DPS and Tank.

Advertisements

Filed under: Eve, Gaming, , , ,

Dates and Regular Expressions

Suppose you need to parse dates out of a file, and for some reason you can’t use strptime.  Maybe there can be new lines in the middle of your date format, or maybe there’s some other noise or oddity which makes life difficult.  Maybe you expect your date format to look something like this: YYYY-MM-DD, but you don’t know what the separators are or even if all the components are even going to be on the same line.

Example line:

2011:
12-   25 |" some other "|" text that "| might be formatted a bit
|" weird "|and,maybe,even,"embeds
 fields in a",line|

Now I know, you’re going to say that things like that could never ever happen.  And you’re wrong – I’ve personally seen production code from another company output something eerily similar to the above statement.  But at any rate – your problem is that you need to parse that 2011-12-25 out and a regular expression looks mighty tempting.  Maybe you’ll whip up some kind of fancy line parser that understands the gibberish above – but at some point you’re going to have to do some surgery to extract that malformed date expression.  Maybe you’ll do something like this (perl): qr/(\d{4})[\s:\-\/]+(\d{2})[\s:\-\/]+(\d{2})/.  Now your date is “$1-$2-$3” provided it actually matched anything (and yes, I tested it).

But really, we’re only interested in things between April and June of and between 2009 and 2021 so we’ll just put a bit of date filtering into the regular expression: qr/(20[012]\d)[\s:\-\/]+(0[456])[\s:\-\/]+([0123][0-9])/.  But now it we need to make sure that it doesn’t accept April 39th, so we’ll need to modify the regular expression just a bit more.

NO.

You have the date string you need with this regular expression qr/(\d{4})[\s:\-\/]+(\d{2})[\s:\-\/]+(\d{2})/ and its already hard enough to maintain.  Feed the parsed date into a date library and do your validation and range checking there.  Save yourself… save the world!  And most of all: save me from having to pick up the pieces when the target data of that horrific regular expression changes.

Filed under: Software Development, , , , ,

T1 Cruiser Roam

Despite Amamake being one of the busiest PVP systems in Eve [eve-online.com], it occasionally gets a bit slow.  Its times like this when roaming for PVP kills starts to look mighty appetizing – and so Jude [blog] was on vent asking whether anyone was down with a roam.  Of course, I’m a big fan of roams and I immediately said yes – and I had just the idea for what I’d want to bring.  I linked my Moa fit [EFT stats] in corp – the same Moa I’d put together for an abortive very late night T1 cruiser roam the previous week.  Everyone seemed pretty jazzed and only one person had to go to Rens to pick a ship up.

So after a few minutes, off we went.  I was a bit impatient (as usual) and lead the way with my Moa as scout.  First to Dal then to Hofjaldgund and both were clear.  Eszur wasn’t clear and while I was busy looking for the Drake in system, Jude lost his connection to both Vent and Eve (30-60 sec in).  I warp back the Hof gate and wait, and a new local enters system.  D-Scan tells me its a Stiletto and local tells me he’s with the Amarr Militia.  A few seconds later he’s on the gate with me and jumps through… and a few seconds after that an Amarr Militia Harbinger enters system.  He lands on the gate and tackles me as local literally floods with them (20+).  I tell everyone to GTFO the gate and jump through.

And the Stiletto is waiting on the other side.  And he tackles me, of course.  So now I’m pretty well resigned to losing my Moa before its even been properly blooded, but that’s what T1 cruiser roams are all about.  So I reapproach the gate and wait.  They all land on the gate and jump… I wait for most of them to tackle me to give them aggression before trying my luck at the other side.  I’m at half shields by the time I jump, and there’s still ~5 on the other side – including the Harbinger.  But apparently none of them had enough scan res to tackle me before I warp out and I’m away Scot-free.

But now we have a problem – Jude’s still disconnected and people are scattered from Eszur to Dal.  Jude calls for everyone to regroup in Amamake but I’m effectively cut off and elect to go on a bit of a solo roam.  I warp to Frerstorn, then to Ardar… and now I have a choice.  I can continue down the pipe we’re going down (Towards Caldari low sec) or I can make a swing through my old stomping grounds near Floseswin.  I go to Floseswin and find there’s actually people there – 5 or 6 of them… all in Electus Matari.

Now, for those who don’t know, Electus Matari [electusmatari.com] is a Minmatar role play alliance that operates out of Heimatar and Metropolis high sec.  When they make forays into low sec, they do it in overwhelming force — to the point that even Arkady Sadik (Alliance Leader) has called them “Electus Blobtari”.  I report my findings and we all agree to come have a pass at them… and then I warp around a bit and eventually decide that they’re all docked up – which is really no surprise for a massively carebear alliance like that.  So I warp directly to the Aset gate and a little lump settles firmly in my stomach as I check D-Scan:

  • Nighthawk
  • Scimitar
  • Naga
  • Naga
  • Rapier
Alright, well this could certainly be unpleasant.  I land on the gate, and they’re all there… at zero.  I start to do my usual force-aggression trick only to find I had clicked “auto jump” and I’m suddenly in Aset with the gate flashing behind me.  Its time to GTFO and I successfully make it to a station without getting tackled… and finally take another look at local.  10+ and D-Scan shows a heavy force – a pair of Tempests, battlecruisers, Command Ships, and more.  I wait it out for a while while everyone gets regrouped in Amamake and charges up the pipe to Floseswin.

But now we’ve got a problem – we’ve got T1 cruisers and we’re trying to go up against some pretty hefty firepower… and probably under sentry fire.  Of course, I chime in with something along the lines of “Well that’s the point of a T1 cruiser roam!”.  The fleet gets to Frerstorn and I make my way through Uisper to Floseswin, and then warp to the Aset gate as everyone arrives.  After a short discussion on vent, Jude comes up with a plan: we’ll warp to a safe spot and then to the gate at 70.  If they want to play, they’ll do it away from the gate.  Everyone jumps in and we all individually warp to the agreed destination.

And we see the strangest thing – the Electus Matari ships are on D-Scan… well away from the Aset gate.  Less than a minute later, they jump out into Ardar.  And now we’re trapped between their force in Aset and in Ardar.  After a couple more minutes of discussion, we decide we’re going to barrel into Ardar and see if we can take out the Nagas – they were at zero on the gate and are undoubtedly blaster fit.  So off we warp – Hahbs is the scout and I’m itching to get in and get a point myself.  We land, Hahbs jumps..

And they’re gone.

Booo!  So we continue the roam – off to Hado, and down the pipe to Egmar, Taff, and Evati.  Of course, its bone dry and even Evati looks pretty tame… at least until we get to the Todifraun gate.  On the gate’s a Tempest and Sleipnir – finally we’ve found some targets to kill.  Except they aren’t flashy and they’re on a gate… taking a BS + CS under sentry fire in T1 crusiers is just a bit much.  Most of us jump through, but Jude has to evade back into Evati.  As we jump through, I say in local “See you at planet 1”.  I dutifully warp to planet 1 at range (zero).

But they don’t come… and give Jude enough time to regroup with us in Todifraun.  But we’re really hot for the kills and it isn’t terribly long before D-Scan reveals the Tempest at the Ice Field.  Someone warps in at zero and behold the Tempest is right there.  We all warp in, and it isn’t very long before there’s a Tempest [killboard] and a Sleipnir [killboard] wreck in the belt with us and goodfights were being exchanged in local.  I’ve even got fraps of the fight – I’ll try to make a video out of it at some point.

Well now that we had the kills and loot, we continued our trek down the pipe towards Caldari low sec.  As we get to the out gate in Otosela, our scout reports a Myrm jumping into us.  I end up using my ECM drones at this point – though the killmail [killboard] shows I probably shouldn’t have wasted them.  While we’re waiting out GCCs, Hahbs runs across a large gang with T3s and BCs heading up the pipe towards us. We elect to head back to Amamake and in fact make our way all the way to Dal without further incident.  Sadly.

But what kind of T1 cruiser roam doesn’t end in fire, right?  So I suggest hitting up Auga because there’s always someone there.  Everyone except FatGuyInACoat agrees and I lead the charge to Auga… and find nothing – turns out PL seems to have utterly crushed  the Minnie militia.  I guess that speaks mightily to the pluckiness of the Heretics for surviving living in the same system with PL?  At any rate, Hahbs suggested Houla and I scout the way.  Nothing all the way there – though once in Houla I see a Binger on D-Scan at the 24th Imperial station.  So I decide I’m gonna bait him and hang around in the belt near the station… for minutes.  Nothing.  Finally in desperation I warp to the station at 100, and back to the belt and we give him 30 seconds to show before we head home in disgust.

Lo and behold, he warps in at 30 and I’m off to the races to get a point on him – and I succeed.  He’s laying pretty heavily into me while my corp mates warp the ~65 AU to help me out – and by the time they land I’m in half armor.  I burn off and warp away at something less than half armor.  About the time I land at my destination (~10 AU or so?) there’s a second binger on the field and everyone’s trying to overload and get the Binger kill before we all get smoked by the second Binger at range.

So I warp back and the Binger is in low armor – I manage to finish him off [killboard] with the Moa and head for the tackle on the other Binger.  Turns out that Jude’s in half structure and Hahbs is dead [killboard] and Valleria’s in an Omen in structure… and I just tackled a Binger by myself.  I try to leave gracefully but end up getting burned down [killboard] at ~22-23km out.  Ah, now that is how you’re supposed to end a T1 cruiser roam!

Total kills:

  • Tempest
  • Sleipnir
  • Myrmidon
  • Harbinger

Total losses:

  • Thorax
  • Moa

Overall, I’d call it a successful and fun roam!  Hell, with loot it was even profitable!

Filed under: Eve, Gaming, , ,

Persistent Configurations

Persistent Configuration is the idea of keeping track of a configuration change between restarts of an application.  Things that might be configured are things like window locations and what theme you’re using.  The obvious way to store this information is via a flat file – like an ini or pickle file.

Here’s what you might expect to see:

import pickle, time

def log_call(fn):
    def _decorator(*args, **kw):
        print "%.02f: %s Called" % (time.time(), fn.__name__)
        val = fn(*args, **kw)
        print "%.02f: %s Finished" % (time.time(), fn.__name__)
        return val
    return _decorator

class App:
    def __init__(self):
        self.option_filename = "filename.opt"
        self.load_options()

    @log_call
    def initialize_options(self):
        self.options = {}

        for x in range(100000):
            self.options["Option %d" % x] = "Value %d" % x

    @log_call
    def load_options(self):
        try:
            with open(self.option_filename, 'r') as fp:
                self.options = pickle.load(fp)
        except Exception, e:
            self.initialize_options()

    @log_call
    def save_options(self):
        with open(self.option_filename, 'w') as fp:
            pickle.dump(self.options, fp)

app = App()
app.save_options()

It even works as expected:

$ python options.py
1323829572.75: load_options Called
1323829572.75: initialize_options Called
1323829572.89: initialize_options Finished
1323829572.89: load_options Finished
1323829572.89: save_options Called
1323829573.60: save_options Finished
$ wc -l filename.opt
400001 filename.opt

Now, that looks like a totally reasonable way to do things and its just a few lines of code to save and load your configuration.  But what happens if someone does this to you:

$ python options.py
1323829586.04: load_options Called
1323829586.81: load_options Finished
1323829586.81: save_options Called
^CTraceback (most recent call last):
File “options.py”, line 38, in <module>

KeyboardInterrupt
$ wc -l filename.opt
186599 filename.opt

$ python options.py
1323831195.15: load_options Called
1323831195.50: initialize_options Called
1323831195.64: initialize_options Finished
1323831195.64: load_options Finished
1323831195.64: save_options Called
1323831196.35: save_options Finished
$ wc -l filename.opt
400001 filename.opt

Well, it looks like we lost our configuration file and had to rebuild it from scratch.  While that can be merely inconvenient when dealing with user preferences and application options, it can be really devastating if you’re keeping track of something that’s really important.  From here we should probably improve our infrastructure by writing first to a tmp file, fsync(), make sure you can read the new version, and finally replace the old version.  And then we need to remember not to forget proper exception handling!  Oh my, what a headache!

On the flip side, we could just use something that’s designed to do exactly what we want.  What we’re really after here is the ability to Atomically change an attribute or option, maintain file Consistency and integrity no matter what, and have Durability such that once we’ve updated the option we know it isn’t gonna be switching back because we forgot to fsync()!  If we stop and think about it, the design requirements are almost exactly ACID [Wikipedia].  Fortunately, not all databases are heavy weight, and we can use something like SQLite.  And Python (as well as many other popular languages — like HTML5) have it built right in.

import sqlite3

class App:
    def __init__(self):
        self.option_filename = "filename.db"
        try:
            self.conn = sqlite3.connect(self.option_filename)
        except Exception, e:
            print "Unable to open options db ", e

    def initialize_options(self):
        with self.conn:
            self.conn.execute("create table options (key text, value text, primary key(key))")
            for x in range(100000):
                self.set_option("Option %d" % x, "Value %d" % x) # executemany would be better here

    def get_option(self, option_name):
        with self.conn:
            value = self.conn.execute("select value from options where key = ?").fetchone()[0]
        return value

    def set_option(self, option_name, value):
        with self.conn:
            self.conn.execute("update options set value - ? where key = ?")

app = App()

Now what happens if someone ^Cs your application while its writing its option files?  Well, they lose the updates to the options that haven’t already been written yet – and that’s a totally acceptable state of affairs.

Filed under: Software Development, , ,

Pair Programming, Code Reviews, and Data Warehousing

Code Reviewing

Code reviewing [Wikipedia] is the concept of having some form of peer review of finished code in order to ensure that it does what its supposed to do and that the approach taken to solve the problem was a good one.  There are two really common forms of code review – the formal code review and the lightweight code review.  A formal code review involves a thorough review and understanding of every line of code, frequently by everyone on a team.  Obviously, this is a very heavy process and formal code reviews are considered too time intensive for anything but the most sensitive code; they are considered almost antiquated these days.  Lightweight code reviews tend to be more informal and involve shorter looks at smaller blocks of code – but the danger is that the code review can be meaningless because of “rubber stamping”.  Both formal and informal code reviews have been shown to decrease the defect rate and improve knowledge transfer within a team.

Pair Programming

Pair programming [Wikipedia] is the concept of having two (or more) developers work on the same piece of code at the same time at the same work station.  In a very real way, pair programming is “on the fly” code reviewing – as such it also lowers the defect rate and it improves knowledge transfer.  It’s generally accepted that two programmers get a single piece of work done faster than one, but not twice as fast.  There is a net productivity loss when pair programming, and its hoped that the benefits make up for it.  I’ve personally seen it work a variety of ways, from Driver/Navigator to Test Ping Pong.  In all cases, both parties are expected to fully understand the overall design and code being written.

Data Warehousing

Data Warehousing [Wikipedia] is a branch of computing which involves the creation and care of large stores of data for the purpose of answering questions.  For instance, it is useful to know how many people clicked on a particular ad banner, or how many RC Helicopters were sold at Best Buys in Ohio.  For the Eve readers, killboards are examples of either Data Marts or Data Warehouses – depending on who you ask.  The discipline is closely related to data mining [Wikipedia], which often makes use of a data warehouse.

Most data warehousing is done via Extract, Transform, Load [Wikipedia] processes in databases like  PostgreSQLOracle, and MySQL, though certainly most serious data warehousing is done with a combination of technologies involving  Distributed File Systems [Wikipedia] and Map/Reduce.  To give you some idea of the scales involved in data warehousing: the largest single instance databases in the world weigh in at over 2 PB and data is amazingly scarce about larger data stores.  I’d estimate some of the larger data warehouses in the world weigh in at hundreds of PB now.  Personally, I’ve worked with data warehouses on 500GB and processing millions of facts per day to 150TB+ and processing up to trillions of facts per day.  I’d say your average data warehousing company isn’t likely to see more than 75GB of data per day and will store something on the order of 500GB-2TB.

The Dilemma

The internet debates over pair programming vs code reviews seem to be endless, but most of the teams I’ve encountered practicing some form of XP have a fairly strong preference for pair programming over code reviews.  The argument tends to go that what is really important is the second set of eyes on the code.  Furthermore, pair programming naturally avoids the danger of “rubber stamp” code reviews because its much harder when your reviewer is helping write the code.  These are absolutely valid observations and I’m a big fan of pair programming.

However, I feel like the right answer for a data warehousing team is not to pick one – but to pick both when possible. While this does mean that the process is very slightly heavier, I want to point out that the cost of failure is much higher.  A friend of mine points out that when most SAAS developers make a mistake, they fix it and bounce a web server – but when I make a mistake, we spend three weeks (re)migrating data.  Ultimately what everyone involved  – from product managers to the developers – wants is for the team to deliver results in a timely manner… and really, three weeks is a hell of a delay because you didn’t spend 20 minutes doing a code review.

So please consider the cost of failure when you’re considering whether you should do pair programming or code reviews.

Filed under: Data Warehousing, Databases, Software Development, , , ,

The Case for Gallente

Hybrids have recently been boosted, and we’re still seeing large parts of the community upset that it wasn’t enough.  The primary comparisons are all Gallente vs Minmatar – though in a lot of ways that seems to not highlight the issues very well.  Let’s take a deeper look at some of the situations.

Deimos vs Vagabond

Here’s a fairly standard Vagabond fitting.  There’s always differences of opinion on 2 Gyro/2 TE/DC vs 3 Gyro/1 TE/DC vs 3 Gyro/2 TE.  I elected to go with the one that has the most DPS because its the one that’s relevant to the discussion.

[Vagabond, Std 220 Vaga]
Gyrostabilizer II
Gyrostabilizer II
Gyrostabilizer II
Tracking Enhancer II
Tracking Enhancer II

Y-T8 Overcharged Hydrocarbon I Microwarpdrive
Warp Disruptor II
Large Shield Extender II
Large Shield Extender II

220mm Vulcan AutoCannon II, Republic Fleet EMP M
220mm Vulcan AutoCannon II, Republic Fleet EMP M
220mm Vulcan AutoCannon II, Republic Fleet EMP M
220mm Vulcan AutoCannon II, Republic Fleet EMP M
220mm Vulcan AutoCannon II, Republic Fleet EMP M
Medium Unstable Power Fluctuator I

Medium Core Defence Field Extender I
Medium Core Defence Field Extender I

Warrior II x5

Here’s some of the associated vital stats:

  • 30.5k EHP
  • MWD on: 2484 m/s, 8.2 sec align (3539 overheated)
  • RF EMP: 555 DPS @ 1.8+27 (359DPS @ 22km)
  • Barrage: 459 DPS @ 3.5+41(391 DPS @ 22km)

I don’t think anyone doubts the fate of a Vagabond that stray within range of a typical Deimos – and most people don’t doubt the fate of a Deimos that’s caught at range from a Vagabond.  But what happens if you try to fit a Deimos like a Vagabond and compete for its role?

[Deimos, Nano Blaster Deimos]
Magnetic Field Stabilizer II
Magnetic Field Stabilizer II
Magnetic Field Stabilizer II
Tracking Enhancer II
Tracking Enhancer II
Damage Control II

Y-T8 Overcharged Hydrocarbon I Microwarpdrive
Large Shield Extender II
Warp Disruptor II

Heavy Neutron Blaster II, Caldari Navy Antimatter Charge M
Heavy Neutron Blaster II, Caldari Navy Antimatter Charge M
Heavy Neutron Blaster II, Caldari Navy Antimatter Charge M
Heavy Neutron Blaster II, Caldari Navy Antimatter Charge M
Heavy Neutron Blaster II, Caldari Navy Antimatter Charge M
Small ‘Gremlin’ Power Core Disruptor I

Medium Core Defence Field Extender I
Medium Core Defence Field Extender I

Hammerhead II x5

Here’s some vital stats:

  • 28.2k EHP
  • MWD on: 1741 m/s, 8.5 sec align (2481 overheated)
  • FN AM: 802 DPS @ 2.9+15 (320 @ 22km)
  • Null: 671 DPS @ 7.3+19 (452DPS @ 22km)

There’s a couple of really interesting things to note here:

  • A Deimos is approximately as agile as a Vagabond.  This really serves two purposes – to run down really fast ships (Vagabonds, for example) or to stay away from slower ships.
  • The Deimos outdamages the Vagabond out to 27km.  Depending on exact fits, this will range from 24-30km.
  • A Null Deimos will always outdamage a RF EMP Vagabond – at every range.
  • A Null Deimos will always outdamage a Vagabond under 18km.  Oddly, the same critical point exists for both RF EMP and Barrage.

Now, a lot of this was always true – the damage application has always been pretty decent from a Null Deimos.  The DPS and fittings increases didn’t hurt, but this particular fit didn’t benefit much from it.  What really changed is the ability to fit a nos/neut to preference while simultaneously being 5% faster and 10% more agile – this makes it quite a bit stronger in the nano HAC category.  So the net effect is the Vagabond – perhaps the most iconic Minmatar ship – is pushed even further from the actual battlefield.

The conclusion here shouldn’t be that the Deimos is a superior Nano HAC or that the Vagabond is a useless ship post patch.  the Vaga still has far better shield EHP and its still much faster.  What should be concluded is that the traditional Minmatar kiting niche is being dramatically eroded.  Lets look at some other examples – this time from ships which are ostensibly competing for the same niche.

Rupture vs Thorax

The Rupture’s a great ship, and the projectile boost put the endless debates over the Thorax vs Rupture being better quite firmly to rest.  But maybe its time to do some reevaluation?  Lets first take a look at the traditional Minmatar role – kiting.  Here’s a somewhat standard kiting Rupture fit – I’m never going to please everyone, but I elected to go with the neuting variant since its far more common:

[Rupture, FW Shield Rupture (T2)]
Gyrostabilizer II
Gyrostabilizer II
Gyrostabilizer II
Tracking Enhancer II
Damage Control II

Y-T8 Overcharged Hydrocarbon I Microwarpdrive
Large Shield Extender II
Warp Disruptor II

425mm AutoCannon II, Barrage M
425mm AutoCannon II, Barrage M
425mm AutoCannon II, Barrage M
425mm AutoCannon II, Barrage M
Medium ‘Gremlin’ Power Core Disruptor I
Small ‘Gremlin’ Power Core Disruptor I

Medium Core Defence Field Extender I
Medium Core Defence Field Extender I
Medium Core Defence Field Extender I

Warrior II x5
Warrior II x1

Here’s some of the associated vital stats:

  • 21.0k EHP
  • MWD on: 1591 m/s, 8.8 sec align (2267 overheated)
  • RF EMP: 478 DPS @ 1.7+16 (169 DPS @ 22km)
  • Barrage: 397 DPS @ 3.5+41(254 DPS @ 22km)

Now we bring on a similar Thorax, competing for the same kiting role.

[Thorax, Kiting Thorax]
Magnetic Field Stabilizer II
Magnetic Field Stabilizer II
Tracking Enhancer II
Tracking Enhancer II
Damage Control II

Y-T8 Overcharged Hydrocarbon I Microwarpdrive
Large F-S9 Regolith Shield Induction
Warp Disruptor II

Heavy Neutron Blaster II, Null M
Heavy Neutron Blaster II, Null M
Heavy Neutron Blaster II, Null M
Heavy Neutron Blaster II, Null M
Heavy Neutron Blaster II, Null M

Medium Core Defence Field Extender I
Medium Core Defence Field Extender I
Medium Ancillary Current Router I

Hammerhead II x5

Here’s some of the associated vital stats:

  • 19.3k EHP
  • MWD on: 1521 m/s, 8.9 sec align (2169 overheated)
  • FN AM: 617 DPS @ 2.9+10 (192 DPS @ 22km)
  • Null: 397 DPS @ 7.3+13 (268 DPS @ 22km)

Its pretty obvious at a glance that the Thorax is simply a better kiting ship.  It trades ~1.7k EHP and fixed kin/thm damage types for a lot more damage both up close and noticeably more damage at range.  We can’t even take refuge in the fact that the Rupture is Minmatar and therefore faster – because its not noticeably faster.  It just doesn’t have the speed to prevent a Thorax from closing and killing it and nor does it have the ability to project more damage at range.  Its just flat inferior at this role.

However, there were two prongs to the Rupture’s dominance.  This one’s going to be even more difficult to please everyone because everyone fits the ships differently.   While I think the 2 Gyro fit is actually more common and probably has superior overall PVP performance, it doesn’t perform as well in a 1v1 comparison with a Thorax (as we’ll go over later).  I elected to go with this one just so I could ensure that people don’t think I’m stacking the deck against the Rupture:

[Rupture, 1600 Plate 220s]
1600mm Reinforced Rolled Tungsten Plates I
Energized Adaptive Nano Membrane II
Energized Adaptive Nano Membrane II
Damage Control II
Gyrostabilizer II

Y-T8 Overcharged Hydrocarbon I Microwarpdrive
Warp Scrambler II
Stasis Webifier II

220mm Vulcan AutoCannon II, Republic Fleet Phased Plasma M
220mm Vulcan AutoCannon II, Republic Fleet Phased Plasma M
220mm Vulcan AutoCannon II, Republic Fleet Phased Plasma M
220mm Vulcan AutoCannon II, Republic Fleet Phased Plasma M
Small Nosferatu II
Small Nosferatu II

Medium Trimark Armor Pump I
Medium Trimark Armor Pump I
Medium Trimark Armor Pump I

Hobgoblin II x5
Hobgoblin II x1

Here’s some of the associated vital stats:

  • 40.9k EHP
  • MWD on: 1236m/s, 10.3 sec align (1748 overheated)
  • RF Fusion: 383 DPS @ 1.4 + 11 (0.1518 rad/s)
  • Hail: 415 DPS @ 1.4+11 (0.10626 rad/s)

Here’s the equivalent 800mm/Ion Thorax fit.  We could potentially drop down to a 1600 plate + Electrons, but IMO this just isn’t as viable due to power grid constraints.  Its worth noting that it both is faster and tracks better than the above Rupture.  It will control the fight, as much a scrammed slug fest like this can be controlled.  Its also worth noting that the ship is more expensive because of CPU limitations and Meta 4 mods.

[Thorax, 800 Ions]
800mm Reinforced Rolled Tungsten Plates I
Energized Adaptive Nano Membrane II
Energized Adaptive Nano Membrane II
Damage Control II
Magnetic Field Stabilizer II

Y-T8 Overcharged Hydrocarbon I Microwarpdrive
Faint Epsilon Warp Scrambler I
Fleeting Propulsion Inhibitor I

Heavy Ion Blaster II, Void M
Heavy Ion Blaster II, Void M
Heavy Ion Blaster II, Void M
Heavy Ion Blaster II, Void M
Heavy Ion Blaster II, Void M

Medium Trimark Armor Pump I
Medium Trimark Armor Pump I
Medium Trimark Armor Pump I

Hammerhead II x5

Here’s some of the associated vital stats:

  • 29.9k EHP
  • MWD on: 1253 m/s, 9.6 sec align (2169 overheated)
  • FN AM: 520 DPS @ 1.9+5 (0.165 rad/s)
  • Void M: 562 DPS @ 2.8+2.5 (0.12375 rad/s)

The Simple Case: Damage Drones

I know that there’s going to be people that are going to point out that Hail outdamages Fusion, so I’ll just address these things up front.  The new tracking boost means that the Ions actually track 10% better than the 220mm ACs.  From there, I’m going to say that I know that Void tends not to hit targets its own size very well and I’m something of a traditionalist so I’m simply going to rule both Void and Hail out.  If anything, its more reasonable for the Thorax to sport Void than the Rupture to sport Hail.  I think there’d be a lot of squawking over that approach to a comparison though – and I don’t (yet?) buy it in either case.

At any rate, I think its pretty obvious that the Rupture isn’t going to be controlling the fight and the Thorax has significantly better tracking for more applied DPS.  If we ignore this, the Thorax does 309 Thermal DPS + 211 Kinetic.  The Rupture does 99 Thermal + 237 Explosive + 47 Kin.  Eff HP after damage type is accounted for is 27263 (Thorax) vs 40215 (Rupture).  Times to Kill are relatively easy to calculate from there – despite the dramatically different hitpoints, its only 6 seconds apart (77 sec TTK Thorax, 71 TTK Rupture).  Replacing the 2nd EANM on the Rupture with a Gyro is actually a terrible idea and lowers the TTK difference to about 2 seconds.

Both of these fights are very close – certainly close enough that I am not totally comfortable making admittedly EFT/Theorycraft assertions about the victor in the average case.

The Hard Case: ECM Drones

If the Thorax goes for ECM drones, its DPS drops to 361 and TTK the Rupture increases to 110 seconds.  The Rupture’s expected DPS drops to 272 (including drones) and its associated TTK (on average) increases to 100 seconds.   Each ECM drone has ~700 EHP with regards to Fusion so I’d expect each drone to take 4.4 seconds (2 shots) to kill for a total of 22 seconds.  Remember that the Rupture has a base TTK the Thorax of 71 seconds, so the ECM drones need to delay or mitigate almost 40 seconds of damage.

The Rupture is now faced with two options – to shoot the drones or not to shoot the drones.  If the Rupture ignores the drones and focuses solely on the Thorax, it has a 51.9% chance of winning a duel to the death but only a 13.5% chance to actually get the kill.  If the Rupture shoots the drones, he has a 45% chance of avoiding being jammed to death.  The lesson here is that ECM drones are extremely powerful.

Conclusions

The overall conclusion?  Well, to me it seems that the hybrid boost was pretty conservative but may just have been enough to provide a relatively balanced game.  The Hybrid boosts really opened up a lot of fitting options, and the ships themselves are feeling much more mobile.  They’re going to be a lot stronger in small gang PVP, and I think we may start seeing them pushed out of their traditional niches.  There’s a lot of inertia behind this particular train, so I think we’re in for some exciting and fun pew pew times until people learn the new limitations.

Filed under: Eve, Gaming, , , ,

Losing Ships in Amamake

Well, time has passed and I’ve PVP’ed and I’ve lost yet more ships – again primarily to me Failing In So Many Ways.

So for my first loss, a Harpy.  I’m poking around at a belt in Amamake during the early hours of Frigfry Friday and I’m duking it out with a Hookbill when a Rupture shows up.  This being Frig fry Friday, we both tackle the Rupture.  I reload to Void S and the Rupture starts to go down fast.  I’m thoroughly tackled in return, but he’s still going down way faster than I am.  That’s when the Falcon and pair of Oracles show up at ~50km.  I don’t last long after that.

2011.12.02 07:16:00

Victim: Liang Nuren
Corp: Perkone
Alliance: Unknown
Faction: Unknown
Destroyed: Harpy
System: Amamake
Security: 0.4
Damage Taken: 4747

Involved parties:

Name: Sinful Justification
Security: -9.60
Corp: The Yaar Offices of Pointe Webb and Podemall
Alliance: None
Faction: Gallente Federation
Ship: Caldari Navy Hookbill
Weapon: Balmer Series Tracking Disruptor I
Damage Done: 2224

Name: Aguilarr Cokey
Security: 3.00
Corp: The Exploration Company
Alliance: Ravensgaard
Faction: None
Ship: Oracle
Weapon: Oracle
Damage Done: 1664

Name: Hegg Master (laid the final blow)
Security: -1.70
Corp: The Griffin Nest Builder
Alliance: None
Faction: None
Ship: Oracle
Weapon: Mega Pulse Laser II
Damage Done: 677

Name: Peek-A Boo
Security: 0.10
Corp: Brutor Tribe
Alliance: None
Faction: None
Ship: Rupture
Weapon: Rupture
Damage Done: 166

Name: Angel Depredator / Archangels
Damage Done: 16

Name: Starion Azriel
Security: 1.40
Corp: The Exploration Company
Alliance: Ravensgaard
Faction: None
Ship: Rook
Weapon: BZ-5 Neutralizing Spatial Destabilizer ECM
Damage Done: 0

Destroyed items:

Cold-Gas Arcjet Thrusters
Small Capacitor Booster II
Small Anti-EM Screen Reinforcer I, Qty: 2
Beta Reactor Control: Capacitor Power Relay I (Cargo)
Void S, Qty: 414 (Cargo)
Null S, Qty: 650 (Cargo)
Light Neutron Blaster II, Qty: 3
Navy Cap Booster 200

Dropped items:

Fleeting Progressive Warp Scrambler I
Magnetic Field Stabilizer II, Qty: 2
Void S, Qty: 284
Federation Navy Antimatter Charge S, Qty: 1252 (Cargo)
Light Neutron Blaster II
Medium C5-L Emergency Shield Overload I
Navy Cap Booster 200, Qty: 16 (Cargo)

So everyone bands together and we devise a devious plan to kill them.  Get a warp in on the Rook and nuke him – and then work the oracles over.  About the only ship I realistically have is my solo PVP proteus so I take it in.  Deimos, Proteus, and a whole bunch of other stuff land on zero of the Rook.  We get him down to armor but by and large he’s got 7 people jammed out of the fight – including me.  It takes them a while but the Rook eventually kites far enough that the Oracles are able to apply some DPS to my Proteus.  Even more time passes and eventually I die in a ball of fire next to my ex-corpmate’s Deimos.  Turns out I lost Gallente Offensive Subsystems 5 – along with a bunch of faction mods – in that loss.

2011.12.02 07:37:00

Victim: Liang Nuren
Corp: Perkone
Alliance: Unknown
Faction: Unknown
Destroyed: Proteus
System: Amamake
Security: 0.4
Damage Taken: 14888

Involved parties:

Name: Hegg Master (laid the final blow)
Security: -1.70
Corp: The Griffin Nest Builder
Alliance: None
Faction: None
Ship: Oracle
Weapon: Mega Pulse Laser II
Damage Done: 7905

Name: Starion Azriel
Security: 1.40
Corp: The Exploration Company
Alliance: Ravensgaard
Faction: None
Ship: Rook
Weapon: Caldari Navy Thunderbolt Heavy Missile
Damage Done: 3599

Name: Aguilarr Cokey
Security: 3.00
Corp: The Exploration Company
Alliance: Ravensgaard
Faction: None
Ship: Oracle
Weapon: Oracle
Damage Done: 3384

Name: Peek-A Boo
Security: 0.10
Corp: Brutor Tribe
Alliance: None
Faction: None
Ship: Rupture
Weapon: Warp Disruptor II
Damage Done: 0

Destroyed items:

Medium Auxiliary Nano Pump I, Qty: 2
Proteus Engineering – Power Core Multiplier
Covert Ops Cloaking Device II
Proteus Defensive – Nanobot Injector
Proteus Propulsion – Interdiction Nullifier
10MN Afterburner II
Federation Navy Antimatter Charge M, Qty: 184
Proteus Electronics – Friction Extension Processor
Null M, Qty: 860 (Cargo)
Proteus Offensive – Covert Reconfiguration
Medium Nanobot Accelerator I
Heavy Neutron Blaster II, Qty: 3
Imperial Navy Energized Adaptive Nano Membrane
Federation Navy Magnetic Field Stabilizer
Medium Armor Repairer II

Dropped items:

Cap Booster 800, Qty: 6 (Cargo)
Cap Booster 800
Shadow Serpentis Magnetic Field Stabilizer
Shadow Serpentis Warp Scrambler
Federation Navy Antimatter Charge M, Qty: 2005 (Cargo)
Medium Capacitor Booster II
Federation Navy Antimatter Charge M, Qty: 46
Damage Control II
Heavy Neutron Blaster II, Qty: 2
Void M, Qty: 810 (Cargo)
Medium Armor Repairer II

By now I’ve actually caved in and joined Hahbs in Heretic Army.  Someone calls out that there’s some frig at the top belt.  I remember responding with “Its probably bait.  I’m warping to zero.”  Oh man – the fight that followed was AWESOME.  Their frigate was indeed bait, and I sprung the trap.  The killboards say that they had:

  • 1 Thrasher
  • 2 Hawks
  • 1 Hound
  • 2 Ishkurs
  • 1 Jaguar
  • 1 Retribution
  • 1 Malediction
  • 1 Kestrel

We had:

  • Harpy (Me)
  • Comet (Hahbs)
  • Slicer (Mattnova)
  • Slicer (Valleria)
  • Slicer (Hilda)

On the face of it, that’s a pretty stupid way to engage – but engage we did.  From my perspective, it looked like an all out frig brawl at zero in Amamake 3-1.  I got a few killing blows, top damage, pod kills, etc.  Meanwhile I get primaried but my active tank holds up pretty well against the damage.  I eventually do go down after having taken almost 7000 raw damage.  A quick look at the numbers suggests the active tank held for 13k EHP – which is not bad for a meta fit Harpy!  🙂

Here’s the actual lossmail:

2011.12.03 08:30:00

Victim: Liang Nuren
Corp: Heretic Army
Alliance: Unknown
Faction: Unknown
Destroyed: Harpy
System: Amamake
Security: 0.4
Damage Taken: 6764

Involved parties:

Name: Fletcher dale
Security: -9.80
Corp: Sub Par.
Alliance: None
Faction: None
Ship: Hawk
Weapon: Rocket Launcher II
Damage Done: 2656

Name: Sungwukong
Security: -2.70
Corp: Sub Par.
Alliance: None
Faction: None
Ship: Capsule
Weapon: Phased Weapon Navigation Array Generation Extron
Damage Done: 1109

Name: Rosk Volutar
Security: 4.80
Corp: Sub Par.
Alliance: None
Faction: None
Ship: Unknown
Weapon: ‘Malkuth’ Rocket Launcher I
Damage Done: 1052

Name: Blacky Sheaperd
Security: 2.00
Corp: Sub Par.
Alliance: None
Faction: None
Ship: Rifter
Weapon: Rifter
Damage Done: 1015

Name: Certain Risk (laid the final blow)
Security: 2.70
Corp: Sub Par.
Alliance: None
Faction: None
Ship: Retribution
Weapon: Medium Pulse Laser II
Damage Done: 932

Name: WookieBomb
Security: 0.60
Corp: Sub Par.
Alliance: None
Faction: None
Ship: Malediction
Weapon: Warp Disruptor II
Damage Done: 0

Destroyed items:

Cold-Gas Arcjet Thrusters
Small Capacitor Booster II
Small Anti-EM Screen Reinforcer I, Qty: 2
Magnetic Field Stabilizer II, Qty: 2
Federation Navy Antimatter Charge S, Qty: 904 (Cargo)
Null S, Qty: 1000 (Cargo)
Light Neutron Blaster II, Qty: 3
Federation Navy Antimatter Charge S, Qty: 62
Navy Cap Booster 400 (Cargo)
Modulated Strip Miner II (Cargo)

Dropped items:

Survey Scanner II (Cargo)
Fleeting Progressive Warp Scrambler I
Navy Cap Booster 400
Void S, Qty: 976 (Cargo)
Expanded Cargohold II (Cargo)
Light Neutron Blaster II
Federation Navy Antimatter Charge S, Qty: 62
Medium C5-L Emergency Shield Overload I

But the fight’s not over – no sooner than we finish that skirmish than a Hurricane warps in.  Of course, we tackle that since we lost a Slicer and my Harpy and in comes an Abaddon and Domi.  I ask on vent if anyone has a ship I can borrow – anything will do because I can literally fly it all, and Ahrieman has a Cyclone.  So I take it.

Turns out that the Domi and Abaddon lock me up straight away and they’re just applying too much DPS for me to pull range with the AB.  So, I get right up on the Abaddon’s face and overload the shield booster.  I take 33k damage before going down in yet another blazing ball of flame.  From the looks of it I took 23.7k shield damage and the active tank held out for 72k EHP.  The fight escalated from there to be pretty wild indeed – 4-5 battleships and a similar amount of HACs and Recons and Logis.  We did hold the field in the end so it was actually ISK positive even for me. 🙂

The lossmail:

2011.12.03 08:35

Victim: Liang Nuren
Corp: Heretic Army
Alliance: None
Faction: None
Destroyed: Cyclone
System: Amamake
Security: 0.4
Damage Taken: 32879

Involved parties:

Name: smiling assassin (laid the final blow)
Security: 0.7
Corp: Berserker Corp
Alliance: None
Faction: None
Ship: Abaddon
Weapon: Mega Pulse Laser II
Damage Done: 20064

Name: Viper Serenity2
Security: 0.8
Corp: Ray of Matar Assembly
Alliance: None
Faction: None
Ship: Dominix
Weapon: Ogre II
Damage Done: 12815

Destroyed items:

Republic Fleet Phased Plasma M, Qty: 250
220mm Vulcan AutoCannon II, Qty: 4
Invulnerability Field II
Y-S8 Hydrocarbon Afterburners
Faint Epsilon Warp Scrambler I
Medium Electrochemical Capacitor Booster I
Co-Processor II
Standard Blue Pill Booster (Cargo)
Torrent Assault Missile, Qty: 340 (Cargo)
Republic Fleet Phased Plasma M, Qty: 210 (Cargo)
Medium Core Defence Capacitor Safeguard I, Qty: 2
Medium Core Defence Operational Solidifier I
Warrior II, Qty: 8 (Drone Bay)

Dropped items:

220mm Vulcan AutoCannon II
Republic Fleet Phased Plasma M, Qty: 402
X-Large C5-L Emergency Shield Overload I
Gyrostabilizer II
Damage Control II
Cap Booster 800, Qty: 11 (Cargo)
Barrage M, Qty: 1000 (Cargo)

All things considered, I’ve been really enjoying myself out here in Amamake – despite my recent losses.  Basilisk, Harpy, Proteus, Harpy, Cyclone – I’ve lost more in the last two weeks than in the previous year.

But such is life.

Filed under: Eve, Gaming, , , ,