Eve blog with topics on anti-piracy, industry, and anything I think might make Eve a better place.
Wednesday, February 27, 2019
An Exercise In Optimization
A quick example to share. I was working on a segment of code last week that was taking a long time to run; on the order of 5+ minutes for something that seemed like it should be much quicker. The code made sense when looked at, but it definitely felt as though this one might be worth spending time to optimize.
Upon closer inspection, I realized that a key index was missing from the database lookup. This code has recently changed from processing a flat file to pulling information from a Sqlite database. The table it was having to query was large, and the column it was querying against wasn't part of an index. Upon adding the index, the run time of the code dropped from over 5 minutes down to 31 seconds.
All done! Or not. Once you are there, it's worth making sure you are not overlooking other possible issues. I realized it was also querying one other table that, although it was smaller, was suffering from the same issue. After adding an appropriate index for that table as well, the run time had dropped to 15 seconds.
But that's not all! Upon a closer review of the code, I realized it was repeatedly looking up data with the same parameters in a lot of cases, so I added an in memory cache to cache that data as needed throughout the processing. This dropped the total run time down to 5 seconds.
And then I realized I had also left out from the caching another lookup that was only needed when populating the cache. After moving that last lookup to the code that utilized the cache, the run time had dropped again down to 14 milliseconds.
From 5+ minutes to 14 milliseconds.
I wasn't aware I could make it that fast, but by being mindful of what seems reasonable and being careful in my review of how the processing was operating (and not exclusively looking at just the database or just one segment of code), I was able to dramatically improve it. Sometimes optimization can be very worthwhile. Just use your best judgement on where it seems worthwhile, and where it would just complicate the code.
Tuesday, February 19, 2019
Lost in a Wormhole
The blackness of space ravages my mind.
It has been almost a year since that fateful day. I had found new wealth in shipping goods between regions -- my small contribution to serving the people of the Empire. I finally had the resources to buy the finer ships of the galaxy, including the largest freighters to support my trading federation. But I wasn't content. Null space was a mess, overrun by savages lacking any code of conduct. High security space was a bore. And with pirates as active as ever in high security shipping lanes, my freighters were locked up in space port with most of my shipments still using the sexy but limited deep space transports.
That is when I saw the shimmer. It drew me in a first glance. It drew me in with a dance of colors that ebbed and flowed that seemed somehow both random and orderly at the same time. It was like no wormhole I had encountered before. On any other day I might have turned away to avoid the unseen dangers, but this was no ordinary day. Dissatisfied with known space and mesmerized by the wormhole to worlds unknown, I charged forth with all the bluster of a drunk sailor on a mission.
That was almost a year ago. I've seen amazing worlds and unbelievable stellar phenomena, but I am lost among the stars. I yearn to go home without any idea how to get there. At my wits end, coasting on the fumes of a starving fusion reactor, I suddely saw something familiar. A glimmer of light. And a glimmer of hope. First, a moment of disbelief. Then, of heighened excitement, as I burst from my chair and spilt my drink. The way home! That's it! Then, finally, a feeling of dread. What husk of a shell of what was already a decaying Empire would I find when I get back? Would anything be the same? Would anything be left worth returning home for?
My sudden dread came about so suddenly as to leave me in shock. At that moment, I remembered the Mystic who spoke to me many years ago. Such an odd encounter at the time. "Heart and mind", she told me. Alone, the heart can leave you in chaos, and the mind can make you cold. Only together can they find balance, and lead you out of the dark. "You will find yourself in the dark one day", she said. "Let your heart be the Captain, and your mind the Navigator."
I think I understand now. My heart yearns to reconnect with my people. To try to make things right. My mind can help me get there, and keep me steady on the journey. It's time. I'm going home.
Sunday, April 8, 2018
Handling EVE ESI Authentication with Spring Boot
With ESI, they expect your application to be a web application, whether it is one or not. If it's not, things get more complicated. The problem stems from their new flow where you are supposed to redirect to them for EVE sign on and then they redirect back to you with a code you use to obtain access to restricted data. This is problematic if your application isn't a web application.
If you are using Java, this problem happens to be an ideal use for Spring Boot. With Spring Boot, configuration is mostly a breeze and an application server like Tomcat can be easily embedded in your Spring Boot application to handle the redirect and callback.
First, a quick overview of the steps you need to take, then below I provide an example Controller class for a Spring Boot application that can handle all of this.
- Determine your IP address, pick a port, choose a callback request mapping, and build the URL for your application from all that. (example: http://[your IP]:[port]/[request mapping]). It is recommended you use https, but doing so will require additional setup I'm not going into here.
- Register your application at the EVE Developers Site, using the URL from the previous step as your application callback URL.
- Access your router and forward TCP for your port to the machine that will be running your application.
- Create your Spring Boot application. Maven dependencies provided below the Controller example should you find it helpful.
- Run your application. Following the controller flow intended for the example, you would have an index page with a link to your /launchSignOn page. Clicking that should redirect to EVE where you sign in. Following that, it should redirect back to your application, where your application then takes the code sent back, makes a post request to get an access token (which includes a refresh token you will want), and makes a request to get character info, and then do whatever. If you are just trying to get a refresh token and character ID for a different application, it can just display the fresh token and character ID on the screen for your to copy down.
Example Spring Boot Controller
@Controller
public class SampleController {
// these variables could come from a properties file or elsewhere, shown here as constants
// just for the sake of this example
private static final String SCOPE = "esi-markets.read_character_orders.v1"; // example
private static final String MY_CLIENT_URL = "?/eveCallback"; // callback URL for your application
private static final String MY_CLIENT_ID = "?"; // client ID for your registered EVE application
private static final String MY_SECRET_KEY = "?"; // secret key for your registered EVE application
private static final String STATE = "?"; // your application state, if any
private static final String MY_REFRESH_TOKEN = "?"; // saved after first sign in for subsequent use
/**
* A start page, should you want one. It could have links to /launchSignOn and /testRefreshToken
*
* @return view page reference
*/
@RequestMapping(value="/", method=RequestMethod.GET)
public String startPage() {
return "index";
}
/**
* Begin authentication process. This will redirect to EVE sign on which will later redirect back
* to /eveCallback. The redirect URL you here should be the same as the one you entered for your
* registered EVE application, and it should point to your callback request mapping.
*
* @return redirect URL to EVE sign on
*/
@RequestMapping(value="/launchSignOn", method=RequestMethod.GET)
public String launchSignOn() {
return "redirect:https://login.eveonline.com/oauth/authorize"
+ "?response_type=code"
+ "&redirect_uri=" + MY_CLIENT_URL
+ "&client_id=" + MY_CLIENT_ID
+ "&scope=" + SCOPE
+ "&state=" + STATE;
}
/**
* EVE sign on should redirect back to here. Now you can send a post request to get an
* access token (which also includes a refresh token you probably will want to save), and if needed,
* you can make a request to obtain character details as well (in particular, you will probably
* want the character ID).
*
* @param model
* @param code the code you need to request an access token
* @param state your appliction state info, should match what you originally sent in the redirect
*
* @return view page reference, which could display info you want to see about the token or character.
*/
@RequestMapping(value="/eveCallback", method=RequestMethod.GET)
public String catchCallback(ModelMap model, @RequestParam String code, @RequestParam String state) {
// do something with your state if needed
MoxyJsonConfig moxyJsonConfig = new MoxyJsonConfig();
ContextResolver<MoxyJsonConfig> jsonConfigResolver = moxyJsonConfig.resolver();
Feature basicAuth = HttpAuthenticationFeature.basic(MY_CLIENT_ID, MY_SECRET_KEY);
Client client = ClientBuilder.newBuilder()
.register(basicAuth)
.register(jsonConfigResolver)
.build();
MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("grant_type", "authorization_code");
formData.add("code", code);
AccessToken accessToken = client.target("https://login.eveonline.com/oauth/token")
.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.form(formData), new GenericType<AccessToken>(){});
Feature bearerAuth = OAuth2ClientSupport.feature(accessToken.getAccess_token());
client = ClientBuilder.newBuilder()
.register(bearerAuth)
.register(jsonConfigResolver)
.build();
EveCharacter character = client.target("https://login.eveonline.com/oauth/verify")
.request(MediaType.APPLICATION_JSON_TYPE)
.get(new GenericType<EveCharacter>(){});
model.put("accessToken", accessToken);
model.put("character", character);
return "showTokenAndCharacterId";
}
/**
* Uses a previously stored refresh token to obtain a new access token and character information.
*
* @param model
*
* @return view page reference, could display whatever info you want to see about token or character.
*/
@RequestMapping(value="/testRefreshToken", method=RequestMethod.GET)
public String testRefreshToken(ModelMap model) {
final MoxyJsonConfig moxyJsonConfig = new MoxyJsonConfig();
final ContextResolver<MoxyJsonConfig> jsonConfigResolver = moxyJsonConfig.resolver();
Feature basicAuth = HttpAuthenticationFeature.basic(MY_CLIENT_ID, MY_SECRET_KEY);
Client client = ClientBuilder.newBuilder()
.register(basicAuth)
.register(jsonConfigResolver)
.build();
MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("grant_type", "refresh_token");
formData.add("refresh_token", MY_REFRESH_TOKEN);
AccessToken accessToken = client.target("https://login.eveonline.com/oauth/token")
.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.form(formData), new GenericType<AccessToken>(){});
Feature bearerAuth = OAuth2ClientSupport.feature(accessToken.getAccess_token());
client = ClientBuilder.newBuilder()
.register(bearerAuth)
.register(jsonConfigResolver)
.build();
EveCharacter character = client.target("https://login.eveonline.com/oauth/verify")
.request(MediaType.APPLICATION_JSON_TYPE)
.get(new GenericType<EveCharacter>(){});
model.put("accessToken", accessToken);
model.put("character", character);
return "showTokenAndCharacterId";
}
}
Example Maven Dependencies
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId> <!-- only needed if using JSP -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.26</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.26</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.security</groupId>
<artifactId>oauth2-client</artifactId>
<version>2.26</version>
</dependency>
</dependencies>
Monday, March 26, 2018
Calling EVE OpenAPI with Java
import java.util.List;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
/**
* Example of calling the EVE OpenAPI using Jersey 2.26. Specific Jersey components needed
* include jersey-client 2.26, jersey-hk2 2.26, and jersey-media-moxy 2.26.
*/
public class EveOpenAPIExample {
// variable names need to match names from the EVE OpenAPI
private static class Region {
private String region_id;
private String name;
private List<String> constellations;
private String description;
public String getRegion_id() {
return region_id;
}
public void setRegion_id(String region_id) {
this.region_id = region_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getConstellations() {
return constellations;
}
public void setConstellations(List<String> constellations) {
this.constellations = constellations;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
public static void main(String[] args) {
// setup the service information we will need for the example
final String target = "https://esi.tech.ccp.is/latest/";
final String path = "universe/regions/{regionid}/";
final String regionId = "10000002";
final String dataSource = "tranquility";
// create the client configured to use MOXy for JSON binding
final MoxyJsonConfig moxyJsonConfig = new MoxyJsonConfig();
final ContextResolver jsonConfigResolver = moxyJsonConfig.resolver();
Client client = ClientBuilder.newBuilder()
.register(jsonConfigResolver).build();
// execute example call on EVE OpenAPI to read information on a region
Region region = client.target(target)
.path(path)
.resolveTemplate("regionid", regionId)
.queryParam("datasource", dataSource)
.request(MediaType.APPLICATION_JSON_TYPE)
.get(new GenericType<Region>(){});
// utilize the data
System.out.println("Read information for region " + region.getName());
System.exit(0);
}
}
Monday, March 12, 2018
Planetary Interaction Tables
If you haven't tried it, Planetary Interaction is a great way to supplement your income, produce supplies you may need, and add some variety to your Eve experience. The key thing you need to know is what supplies can be created and what the "recipes" are for each. There are some great pages made by others that provide this information, but in my effort to host more of this information myself as well, I've provided some recipe tables here.
To find planets you are interested in close to the area you want to operate in, try using the Dotlan Planet Range tool.
| 1st Level Refined | Raw Resource | Barren | Gas | Ice | Lava | Oceanic | Plasma | Storm | Temp. |
|---|---|---|---|---|---|---|---|---|---|
| Bacteria | Micro Organisms | X | X | X | X | ||||
| Biofuels | Carbon Compounds | X | X | X | |||||
| Biomass | Planktic Colonies | X | X | ||||||
| Chiral Structures | Non-CS Crystals | X | X | ||||||
| Electrolytes | Ionic Solutions | X | X | ||||||
| Industrial Fibers | Autotrophs | X | |||||||
| Oxidizing Compound | Reactive Gas | X | |||||||
| Oxygen | Noble Gas | X | X | X | |||||
| Plasmoids | Suspended Plasma | X | X | X | |||||
| Precious Metals | Noble Metals | X | X | ||||||
| Proteins | Complex Organisms | X | X | ||||||
| Reactive Metals | Base Metals | X | X | X | X | X | |||
| Silicon | Felsic Magma | X | |||||||
| Toxic Metals | Heavy Metals | X | X | X | |||||
| Water | Aqueous Liquids | X | X | X | X | X | X |
| 2nd Level Refined | 1st Level Refined | 1st Level Refined | |
|---|---|---|---|
| Biocells | Biofuels | + | Precious Metals |
| Construction Blocks | Reactive Metals | + | Toxic Metals |
| Consumer Electronics | Toxic Metals | + | Chiral Structures |
| Coolant | Water | + | Electrolytes |
| Enriched Uranium | Toxic Metals | + | Precious Metals |
| Fertilizer | Proteins | + | Bacteria |
| Gen Enhanced Livestock | Proteins | + | Biomass |
| Livestock | Biofuels | + | Proteins |
| Mechanical Parts | Reactive Metals | + | Precious Metals |
| Microfiber Shielding | Industrial Fibers | + | Silicon |
| Miniature Electronics | Silicon | + | Chiral Structures |
| Nanites | Reactive Metals | + | Bacteria |
| Oxides | Oxygen | + | Oxidizing Compound |
| Polyaramids | Industrial Fibers | + | Oxidizing Compound |
| Polytextiles | Industrial Fibers | + | Biofuels |
| Rocket Fuel | Electrolytes | + | Plasmoids |
| Silicate Glass | Silicon | + | Oxidizing Compound |
| Superconductors | Water | + | Plasmoids |
| Supertensile Plastics | Oxygen | + | Biomass |
| Synthetic Oil | Electrolytes | + | Oxygen |
| Test Cultures | Water | + | Bacteria |
| Transmitter | Chiral Structures | + | Plasmoids |
| Viral Agent | Bacteria | + | Biomass |
| Water-Cooled CPU | Water | + | Reactive Metals |
| 3rd Level Refined | 2nd Level Refined | 2nd Level Refined | 2nd Level Refined | ||
|---|---|---|---|---|---|
| Biotech Research Reports | Construction Blocks | + | Livestock | + | Nanites |
| Camera Drones | Rocket Fuel | + | Silicate Glass | ||
| Condensates | Coolant | + | Oxides | ||
| Cryoprotectant Solution | Fertilizer | + | Synthetic Oil | + | Test Cultures |
| Data Chips | Microfiber Shielding | + | Supertensile Plastics | ||
| Gel-Matrix Biopaste | Biocells | + | Oxides | + | Superconductors |
| Guidance Systems | Transmitter | + | Water-Cooled CPU | ||
| Hazmat Detection Systems | Polytextiles | + | Transmitter | + | Viral Agent |
| Hermetic Membranes | Gen. Enhanced Livestock | + | Polyaramids | ||
| High-Tech Transmitters | Polyaramids | + | Transmitter | ||
| Industrial Explosives | Fertilizer | + | Polytextiles | ||
| Neocoms | Biocells | + | Silicate Glass | ||
| Nuclear Reactors | Enriched Uranium | + | Microfiber Shielding | ||
| Planetary Vehicles | Mechanical Parts | + | Miniature Electronics | + | Supertensile Plastics |
| Robotics | Consumer Electronics | + | Mechanical Parts | ||
| Smarfab Units | Construction Blocks | + | Miniature Electronics | + | |
| Supercomputers | Consumer Electronics | + | Coolant | + | Water-Cooled CPU |
| Synthetic Synapses | Supertensile Plastics | + | Test Cultures | ||
| Transcranial Microcontrollers | Biocells | + | Nanites | ||
| Ukomi Super Conductors | Superconductors | + | Synthetic Oil | ||
| Vaccines | Livestock | + | Viral Agent |
| 4th Level Refined | 3rd Level Refined | 3rd Level Refined | Misc. Refined (Level) | ||
|---|---|---|---|---|---|
| Broadcast Node | Data Chips | + | High-Tech Transmitters | + | Neocoms (3rd) |
| Integrity Response Drones | Gel-Matrix Biopaste | + | Hazmat Detection Systems | + | Planetary Vehicles (3rd) |
| Nano-Factory | Industrial Explosives | + | Ukomi Super Conductors | + | Reactive Metals (1st) |
| Organic Mortar Applicators | Condensates | + | Robotics | + | Bacteria (1st) |
| Recursive Computing Module | Guidance Systems | + | Synthetic Synapses | + | Transcranial Microcontrollers (3rd) |
| Self-Harmonizing Power Core | Camera Drones | + | Hermetic Membranes | + | Nuclear Reactors (3rd) |
| Sterile Conduits | Smartfab Units | + | Vaccines | + | Water (1st) |
| Wetware Mainframe | Biotech Research Reports | + | Cryoprotectant Solution | + | Supercomputers (3rd) |
Sunday, February 4, 2018
New Reference Category
Note that if you click the category from the side bar, it will not show all posts. You will have to click the link to view older posts to see the older ones. I'm trying to figure out how to show them all on the same page without that additional hassle, but so far I haven't figured out how. If necessary, I will just go back and repost all the old posts so that they appear in the same date range and will all appear together, but I'm going to spend a little more time researching first to see if I can fix it without such a hackish workaround.
Also, don't forget that I also have a Tools and Programming category that can also be useful, though those aren't necessarily needed on a regular basis, so most of them will most likely not also be included under Reference.
Monday, January 22, 2018
NPC Damage Types and Weaknesses
| NPC | Damage Type | Weakness Type | |||||||
| Faction | EM | Ki | Th | Ex | EM | Ki | Th | Ex | Ship Alias |
| Amarr | X | X | O | ||||||
| Angel | X | X | X | X | O | Gist | |||
| Blood Raider | X | X | O | Corp | |||||
| Caldari | X | X | O | ||||||
| Gallente | X | X | O | ||||||
| Gurista | X | X | O | ||||||
| Khanid | X | X | O | ||||||
| Minmatar | X | X | X | X | O | ||||
| Mordu | X | X | O | ||||||
| Rogue Drone | X | X | X | X | O | ||||
| Sansha | X | X | O | ||||||
| Serpentis | X | X | O | Core | |||||
Thursday, January 18, 2018
More Bacon
The Bacon is back.
I need a bit of a refresher, so my first few weeks might be light weight activity, and I'm not sure how much AG I'll be involved in, if any, but I just can't stay away from a game where I can fit and fly space ships. And I have some ideas on some new things I'd like to do. Real life often requires my attention and pulls me away from games, but I'm going to try to carve out a little time again for Eve, as it can be quite fun.
While I can't speak for how much or even if I will involve myself with AG again, I will as always remain NRDS in nullsec space. That's just how I roll. I want to remain careful that I don't attack anyone who is not actually interested in combat. For the sake of all capsuleers in Eve, commerce should remain unimpeded among non-warring factions. It just makes for a better game with happier, wealthier players who will in turn be able to buy more ships and fittings and be more inclined to engage in entertaining and mutually desired combat.
That said, I don't expect others to follow my ways. My only *real* beef remains with the true griefers who delight not in playing the game but in upsetting others and generally making Eve a less fun place to be. To all of those folks, I offer you my one finger salute, but with a genuine hope that you some day learn to be better people. To everyone else, I look forward to seeing you out among the stars again.
Fly with honor,
Scott Bacon
Wednesday, July 20, 2016
Buy One Month Get One Free
If you would like to see me back in action, shoot me an email or comment on this post and let me know! I do miss the action sometimes.
Scott Bacon
Loyal supporter of Silent Infinity and NRDS null space
Monday, April 4, 2016
In a Parallel Universe
It was my pleasure getting to share the wonderous universe of Eve with all of you during my time in Eve space. Despite it's flaws, it was a worthy adventure. It's biggest flaw, in my opinion, were the game mechanics that allowed some less savory inhabitants to feed off of negativity and the grief of others. Of course, I refer to the niche of gankers (a subgroup of gankers) who bring down the community not from their ganking, but from their intent to grief others -- those who feed their own pleasure through causing pain in others. But there were many good people as well, who thrived on the mutual joy of game play in both peace and conflict. It is that for which the game was intended. I will miss all of you good capsuleers who wished to share in positive mutual game play.
Alas, I am too busy in real life (RL) to continue with Eve at the time. We should all fight the good fight. The good fight in Eve is trying to find and support a balance of play that allows all capsuleers to enjoy the game not just in peace but in conflict. A worthy goal. And for the time being, the good fight in RL has me too busy to continue the good fight in Eve. I will leave my communication channels open while I am away, and I will always be with you in spirit.
Both friend and foe, I would humbly ask you to always seek ways to better your experiences, not just for yourself, but for everyone around you. Good luck to you all.
Scott Bacon
Thursday, December 10, 2015
Grid-Fu Just Got Ganked!
One thing that update doesn't talk about is how gankers would often attempt to use Grid-Fu, the intentional manipulation of Eve space grids, to their advantage. This will be a lot harder to do now.
Some organizations within Eve may have considered Grid-Fu to be a valid intelligence tactic to combat their opponents, but overall, I view the grid change as a very positive change. Not only were the smaller grids often just plain annoying, they also break game immersion. This is one of those less common cases where a gank is a good thing. Grid-Fu just got ganked!
Saturday, October 10, 2015
Ending High-Sec Freighter Ganking With 5 People
Now 5 is only an estimate, it could be a few more or less. But forget trying to field a fleet of 20+ logistics and electronic warfare ships to prevent freighter ganks. Stop trying to protect the freighters. All we need is a team willing to gank bumper ships. Without bumpers, gank fleets will find it nearly impossible to gank freighters.
The first defense of a bumper is to add tank, which is why a team of 1 or 2 isn't enough. I figure 5 should probably do it. And you don't even need to bother trying to sneak up on them. You can casually fly your fleet over towards the bumper. They will run, which is fine, as that stops the gank. Or they will stay, in which case, gank them! Either way, the freighter goes free.
This may eventually lead to gankers fielding anti-gank fleets to prevent the bumper ganks. While this would be an added challenge, it would also be hilarious to have the roles flipped in such a manner, so I would consider this a win regardless.
This may eventually lead to gankers attempting to gank the bumper gankers. This is okay too. It will divide the ganker fleets making it easier for other anti-gankers to pick them off or stop them with logi and ECM. And you can switch to using a neutral warp in to help protect the bumper gank fleet, just the way gankers use a neutral warp in to help protect the freighter gank fleet.
I have been supportive of this approach for a long time, and willing to participate in such a fleet. I would like the bears and white knights out there to think about it too. It's not for the faint of heart, but there are ways of managing the negative side effects that I am always happy to share with others. And there is nothing like using your opponents own tactics against them to give them the proverbial middle finger.
Saturday, August 29, 2015
Providence Under Fire
The intel and attack plan suggest that Goonswarm leadership was more interested in trolling, tear collecting, and causing economic loss to the region than in providing fun content for the Eve community. That is, unless that is what their members find to be fun, which I hope isn't the typical case. But this approach strengthens the apparent link between Goonswarm and high-sec ganking organizations like CODE.
Regardless, Providence forces were largely upstanding in character focusing on comradery and having fun, and most tried diligently to uphold NRDS policy even in the light of the ongoing attacks. I myself was in several fleets that allowed nuetrals to go about their way following verification that that were not on any region KOS lists. If you believe yourself to be a neutral and happened to be attacked by Providence defense forces, please do feel free to engage region diplomats on what happened. Accidents can happen and issues can only be addressed if the diplomats are aware of them.
Your friendly neighborhood null space continues to stand strong. While I would recommend increased caution for the time being until invasion forces fully retreat, Providence is generally a great place to dip your toes into null space. Just be sure if it's your first visit to check with diplomacy in advance to ensure you are not listed as KOS to the region, and to inquire about getting good standing if you expect to be staying for long. Also set the locals blue so you can more easily identify potential hostiles passing through. With that said, I personally welcome friendly visitors to the area. o/
Saturday, August 15, 2015
Anti-Gank: Josameto 8/2/2015
On August 2nd, ganker Rachel Ironhand was doing this to a Fenrir in Josameto using Hounds as the ganking ship. The bumper Machariel was piloted by Baby Gal. The Bowhead pilot and looter was Leah Azizora. They were also using Mobile Scan Inhibitors.
A few of us within the High-Sec Militia and the AG community responded. The freighter was almost gone when we got there, but we halted the Hound attack. In order to destroy the freighter, they had to bring in an expensive group of Talos ships despite the freighter being into low structure.
Afterwards, we prevented looting of the freighter and destroyed the Occactor loot ship. It ended when the ganker rage-killed the freighter wreck and left the area.
My thanks goes out to all who helped in preventing the gankers from completing this hyperdunk. Always keep an eye out for hyperdunking. Hopefully actions like these will discourage gankers from attempting future huperdunks.
A few of the relevant killmails --
Hound Gank Ships:
https://zkillboard.com/kill/48245337/
https://zkillboard.com/kill/48245371/
Talos Gank Ships:
https://zkillboard.com/kill/48245517/
https://zkillboard.com/kill/48245522/
https://zkillboard.com/kill/48245525/
Loot Ship:
https://zkillboard.com/kill/48245654/
Tuesday, July 21, 2015
Tools Review!
Here are the tools I've created in the past, and why:
- Eve To Local Time Tool -- many a time, I've seen an event come up in Eve - perhaps a reinforcement timer expiring or a scheduled fleet of some kind - and then people start trying to figure out what time that means for them in whatever local time they are in. A lot of folks, myself included, would probably find it convenient to copy the date/time from Eve into a converter that will convert it to your local time. That's what this tool does.
- Invention Calculator -- Other invention calculators exist on the Internet, but at the time of this ones writing, the others were all outdated and didn't reflect the most recent changes from CCP. This tool tells you your chance at a successful invention given your skills and components.
- Ship Scanning Tool -- When scanning a ship to determine it's fit, you don't really know which fittings will be returned. A scan usually doesn't show you all of them, but some seemingly random subset of them. This tool provides a way to copy and track repeated scans. It keeps a running list of everything scanned so far, and whether it represents the complete fit for the ship being scanned.
- Missile Damage Calculation Tool -- This tool attempts to calculate what percentage of missile damage will actually be applied to an enemy ship based on skills, fittings, missile type, and opponent ship type. Even better, it provides a graph for the damage percentage applied over a range of opponents ship speeds from 0 m/s up to the ships typical maximum speed.
Personally, I was thinking of further developing the Missile Damage Calculation Tool. Currently, it only has back-end data for a few PVE ships, and only for a couple of missile types. I was thinking of making it far more useful in general and for PVP, by adding player ship types to the ship list, adding in all the remaining missile types, and adding new inputs for the new new missile guidance modules.
Which of these would you like to see more fully developed, and in what ways? Do you have ideas for other tools that I might consider developing? Feel free to share your ideas.
Monday, July 20, 2015
Ganker Bumping Renamed Again!
Then at some point, Gorila decided to join CODE. This was highly obnoxious, so I decided to steal the original blog name I originally wanted from Gorila and renamed my blog to Ganker Bumping.
It's been that way for awhile, but I think it's time to leave that particular past in the past. While anti-ganking will always be a significant part of what I do in game and write about, and I don't intend to change the URL from what it has always been, this blog covers more than just anti-ganking. I think it's time to give this blog a name that more closely represents how my blog entries are meant to give Eve more of what it needs. Eve Needs Bacon.
Sunday, July 19, 2015
Eve To Local Time Tool
One annoying task every Eve player faces is having to figure out what the local time will be for some event in Eve. Provided here is a quick, simple tool for converting Eve times to local times.
Enter Eve time in format "yyyy.MM.dd HH:mm"
Eve Time: