Eve online

It is ridiculous for a game like Eve Online to sport the kind of limitations in the UI that it currently has. I’m running the Crucible expansion, and even though some things have been fixed, some limitations are blatantly stupid.

For example, I am led to believe I’m flying a complex ship in space that can warp and can guide missiles and can do a ton of shit, but I can’t customize the chat window so I can put REDS at the top. Just plain dumb. Who are they kidding with this? “Promoting pvp by hiding REDS in local”. Puhleeeze. Also, the overview settings are overly complex for no reason. You have hundreds of settings all in a 2 level list. It takes ages to configure, leads to stupid bugs like showing pilots in red because of sec status, even though they are blue based on alliance. It is just dumb, adds unnecessary complexity to the game and does nothing for players.

There’s also arcane mechanics meant to allow grieving of players. The can flipping mechanics in high-sec, or the fact that DED are in real space and any yahoo that can probe can come and salvage your mission. Or the endless streams of contract exploits in market hubs. How exactly does CCP expect to increase the number of players if any noob can fall prey to jerks?

Oh, and exactly how does it help not allowing add-ons to the UI? It would be such a simple thing to allow people to customize the UI via plugins. You can then incorporate the good ones in the main ui as time goes by.

Eve is a wonderful game but they are NEVER going to succeed if they don’t cater more to casual players. High-sec needs an overhaul to make it friendlier for noobs and casuals. Low sec needs to be tweaked just a bit, by moving to it the current high-sec mechanics and making it truly a pvp school. And 0.0 needs to be made the end-game goal towards which each player has to aim. which it isn’t right now because of the endless sov warfare and politics.

Converting from FAT/FAT32 to NTFS

Ever wondered what to do if you want to copy a file with a size > 4GB to your computer, and some strange error about the destination filesystem being read-only pops up? That’s because FAT32 does not allow files with sizes > 4GB. But NTFS does. And here’s how you can convert the filesystem to NTFS:

http://www.cknow.com/cms/articles/why-cant-i-copy-a-large-file-despite-having-larger-free-space.html
You can use a Windows Command Prompt command to convert a FAT volume to NTFS. Open a Command Prompt window (Start | type CMD and Enter into the search dialog to open a window). To see the full syntax of the command and to verify that the command is present in your version of Windows type (no quotes) “CONVERT /?” at the command prompt and hit Enter. This should give you the help and if it comes up you have the command available to use. The command to convert any drive from FAT to NTFS would then be: CONVERT d: /FS:NTFS where d: is the drive letter of the disk/volume you wish to convert. If you want to watch the details add a /V (for verbose) to the command. Also, to enable all users to access the drive, just in case you might want to also add /NoSecurity to the command line. These latter two are optional and usually not needed.
Also, this procedure does not erase the disk so files should be safe. As in all things computer, having a backup of important files is critical no matter what and I’d be careful if the disk is almost full as FAT and NTFS disks likely have different sector sizes and therefore hold different amounts of information.

The simplest java build system

You use it like this:


paul@blueknife:~/apps/sandbox/gen$ java -cp .. Build "lib/jdom-1.1.1.jar:lib/velocity-1.7.jar:lib/velocity-1.7-dep.jar" bin src

It will iterate the src and the bin (output) folder, it will figure out which java files changed, and it will compile them. Game over. I can script my build in bash really easy with this, cause all I really need now is to jar up the bin folder and deploy the jar somewhere.

import javax.tools.*;
import javax.tools.JavaFileObject.Kind;
import java.io.*;
import java.util.*;

public class Build
{
    public static void main(String[] args) throws IOException
    {
        if(args.length!=3)
        {
            System.out.println("Build $lib $dest $src");
            System.exit(-1);
        }

        String classpath = args[0];
        String dest = args[1];
        String src = args[2];

        List<File> files = new ArrayList<>();
        getChangedFiles(files, dest, src);

        if(files.size()==0)
        {
            System.out.println("no files changed");
            System.exit(0);
        }

        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();

        StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);

        List<String> options = new ArrayList<>();
        options.add("-d");
        options.add(dest);
        options.add("-classpath");
        options.add(classpath);

        Iterable<? extends JavaFileObject> compilationUnits2 =
        fileManager.getJavaFileObjects(files.toArray(new File[]{}));
        compiler.getTask(null, fileManager, diagnostics, options, null, compilationUnits2).call();

        fileManager.close();

        List<Diagnostic<? extends JavaFileObject>> all=diagnostics.getDiagnostics();
        for(Diagnostic<? extends JavaFileObject> d:all)
        {
            System.err.println(d.toString());
        }
    }

    public static void getChangedFiles(List<File> files, String dest, String src)
    {
        File[] filesHere = new File(src).listFiles();
        for(int i=0;i<filesHere.length;i++)
        {
            File thisFile = filesHere[i];

            //System.out.println(thisFile+":"+thisFile.getName());
            if(thisFile.isFile() &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; thisFile.getName().endsWith(".java"))
            {
                File destFile = new File(dest+File.separator+thisFile.getName().substring(0, thisFile.getName().length()-5)+".class");

                if(!destFile.exists() || (destFile.isFile() &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; destFile.lastModified()<thisFile.lastModified()))
                {
                    System.out.println(thisFile);
                    files.add(thisFile);
                }
            }

            if(thisFile.isDirectory())
            {
                getChangedFiles(files, dest+File.separator+thisFile.getName(), src+File.separator+thisFile.getName());
            }
        }
    }
}

and here’s my build script for this project


#!/bin/bash
NAME=gen-1.0
JAR=$NAME.jar
CLASSPATH=lib/velocity-1.7-dep.jar:lib/velocity-1.7.jar:lib/jdom-1.1.1.jar

echo "compiling $NAME"
java -cp .. Build "$CLASSPATH" bin src
echo "updating $JAR"
jar cf $JAR -C bin/ .
echo "copying $JAR"
cp $JAR ../lib/gen/

Julie

Julie is 1 year old today. It was like yesterday that we woke up on the first day with Julie by our side. Strike that; I mean Julie was somewhere in the NICU, N was in the maternity ward resting and I was struggling at home to pick up some clothes for both of them. I think the day it felt more like birthday for Julie was the day they let us out of NICU and we took Julie home.

In eve news, WN appeared in PB/Fade today. Mostly Harmless struck a deal with DRF to get out of the way… and were promptly reset by Goons and FCON and TEST. I don’t expect with WN and probably shadow on the way to PB/Fade for PB/Fade to last through next week. Good thing my stuff is in RQH and ready to move out. I wondr what Vauzen will decide to do with the Corp… Personally I’d rather go to goons then move somewhere else in the universe.

Eve 0.0 space, military situation – an oppinion

…and so it begins for Pure Blind; I was logged in on Tuesday on my FCON toon and there was a big bash in D2. Ewoks + NC. were trying to take D2 but their fleet was kinda weak and they took a beating. Ewoks already took 2 systems abandoned by WI in PureBlind. This will give them a base for staging attacks on other systems around here.

Seen this garbage on evenews24.com. I have to put this one as a propaganda war meant to seed doubt in PB/Fade; even if there is probably some truth to it.

But let me give you my opinion based on Tuesday’s battle in D2. I’ve seen about 30 goons on list and about 10 TEST. This is not by mistake, they are supporting us in defending PB but probably not for the right reasons. All the alliances in PB/Fade are on the weak side; which means goons can control them more easily. What I want to say by this is that if PB/Fade starts to fail, they will probably offer all alliances the deal they gave WI… form a corp in Goons out of your more Pvp toons, bring the whole coffer with that corp, including supers and get on with your life. The carebears and the independents are left behind; and are easily crushed. What this does for goons is thicken their ranks. They are 7000 strong right now. With 7000 like-minded players you can do a lot of damage to any attack.

Goons are not really defending our territory, they are just delaying the Ewoks/NC. attack on deklein. I venture a guess that the war between Goons/Test vs Ewoks/NC. will be fought in PB/Fade and not in Deklein. If Ewoks/NC. will take PB/Fade fast, I don’t think Deklein will be defended. By the way, Ewoks and NC. seem to be alone in this whole thing, as the DRF are fighting something else in the south. Somebody said on an eve podcast that fighting on 2 fronts is a big no-no in war theory. However, they are very powerful and can do it for now.

So what is about to happen in the future? Oh, juicy juicy future…

Goons are exposed in Dek on 2 fronts…. they can be attacked from both Branch and from PB/Fade if PB/Fade falls. However, by taking WI systems this week, they have secured a connection to Fountain and TEST which seem to be their principal allies right now. Can Goon/Test fight the full force of the coalition that took down the north? Probably not; but the simple fact that the DRF have stopped at their doorstep means that they are not sure how big the goon super fleet is. Goons have already ack that the DRF have too many caps/supers, and that they are ramping up their own super fleet; but you can also view that mail as troll just to invite them to attack deklein and fall in their prey. How are goons ramping up their supr fleet? Well, there’s a lot of ways, but the simplest way to it would be to rent them from the old NC. You can probably assume Morsus Mihi and RAGE have probably a sizable fleet of supers, that is still in the north. What would be the point to move them all to Delve where they are doing a lot of gang warfare and whatnot, but are not trying to gain systems. If I were NC, I’d park my supers somewhere safe between Goon and TEST and let Goons use them. Now this would actually be hard if the reset between goons and NC was for reals, but the way it was done, I assume it was not.

What is the strategy of Ewoks/NC. in PB/Fade? Well, they probably were “given” PB / Fade by DRF. They just have to go down here and conquer it; which they are trying right now. They got a lot of the tech moons in here, but they have to really take the whole region if they want to live peacefully and exploit those moons. Otherwise, I can see Goons/ TEST / FCON take potshots at any pos and gang them at any opportunity. Why isn’t the whole DRF here? Hard to say, unless Goons have showed their hand to Shadow and White Noise, and they are afraid to attack. Also, if they don’t show presence in the south, Stainwagon will attack there pronto. This is what fighting on 2 fronts will do, you have to keep presence on both fronts. And Eve changing how the jumb bridges work did not help them. And will they ever attack? I think the more they wait, the less likely an attack will be. What will happen to PB/Fade in this case? I don’t think Ewoks/NC. have the necessary force to take the regions. They might have to rent PL or bring in Raiden to wipe us out. It’s a buffer region, and Goons and TEST will do whatever in their power for PB/Fade not to fall or else they will be vulnerable on 2 fronts to the DRF attack.

I’m tired and the influence map does not load, so I’ll finish here.

Edit: It looks like such a smart move now that TEST evacuated the north and moved into Fountain after IT collapsed; did they actually know something about the future DRF invasion?

iphone tracker, some comments

Started another post to have a place to put my thoughts on the iphone location tracker.

  • The data is sparse. There are days missing and there are clearly locations missing. Once you see the data by-date, you’ll notice that the data is missing portions of your trips. This means that the logging of location data is only happening in certain situations; I assume this is happening when location services is enabled by an app (I use waze frequently) and the gps is unavailable. The consolidated file contains location for both wifi signals and cell tower triangulation. It does not contain a log of GPS. This doesn’t mean that doesn’t exist, maybe it’s in one of the other files in the backup… although the fact that it wasn’t found until now would suggest that such a log doesn’t exist. However, I should probably do a scan in the backup folder for any other files that are sqlite databases.
  • Some people claim that the data only contains the exact location of the cell towers. This is false. I have literally thousands of points, that have nothing in common with the 2-3 towers we have in Brampton. There is clearly triangulation going on with different outcomes… as per the horizontal accuracy field in the table. This field’s value varies greatly, from hundreds of meters to a few kilometers. In my script I decided to ignore points with accuracy of more than 1000m, which reduced the data set from 4400 point for about 500.
  • The data might not be copied to the computer on purpose. I’m assuming that if some developer logs the data on the device, it doesn’t log it in a temporary file, it uses a database; and the backup process blindly copies the database to the syncing computer. There’s also the STOOPID clause: Apple can’t be this stupid to open itself up to such controversy.
  • The danger of having this data on the computer is that malicious software will try to copy it. That is if the data had any value, which most people think it doesn’t. It might not have value for 3rd parties. It has a lot of value for my friends/family/enemies. The mere existence of this data can open the owner to legal disclosure. This can be both good and bad. Ie, you can prove with this data that you weren’t in a place or somebody else can prove that you were at a certain point in time. So for people that say existence of this data has no consequences; they are wrong… it can have very real consequences. The point is it’s up to anybody and everybody to decide if this is valuable and if it should continue, not for Apple. It would be interesting to know for how long did hackers know of the existence of this data before it was disclosed.

iphone tracker / export, 2nd version

Now with added bacon :)

Will do folders named after the dates of the locations, also put the number of points in each folder.

Uses the sqlite jdbc driver from here.

You’ll still have to run the script from here to get the name of the consolidated db file. The backup of your iphone is in c:\Users\\Roaming\Apple Computer\MobyleSync\Backup on windows.


package com.ikarsoft.iphone;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.*;
import java.io.*;

public class Export
{
public static void main(String[] args) throws Exception
{
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:consolidated.sqlite");
Statement stat = conn.createStatement();

// date is based in 2001-01-01
final double offset = 31*365.25*24*60*60*1000;

SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd");

Map<String, List<Location>> byDate = new TreeMap<String, List<Location>>();

ResultSet rs = stat.executeQuery("select * from CellLocation;");
while (rs.next())
{
int acc = rs.getInt("HorizontalAccuracy");

if(acc<1000)
{
// in millis
double timestamp = offset + rs.getFloat("timestamp")*1000;
Date when = new Date((long)timestamp);

Location loc = new Location();

loc.setLatitude(rs.getFloat("Latitude"));
loc.setLongitude(rs.getFloat("Longitude"));
loc.setTimestamp(when);
loc.setId(rs.getRow());

String date = date_format.format(when);
if(byDate.get(date)==null)
{
byDate.put(date, new ArrayList<Location>());
}
byDate.get(date).add(loc);
}
}

PrintWriter out = new PrintWriter(new FileWriter("celllocation.kml"));

out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"+
"<Document>");

SimpleDateFormat name_format = new SimpleDateFormat("yyyy-MM-dd', 'E");

for(String date:byDate.keySet())
{
List<Location> list = byDate.get(date);
Date timestamp = list.get(0).getTimestamp();

out.print("<Folder><name>");
out.print(name_format.format(timestamp));
out.print(" (");
out.print(list.size());
out.print(") ");
out.println("</name>");

System.out.println(date);

for(Location loc:list)
{
loc.toXML(out);

System.out.println("\t"+loc.toString());
}

out.println("</Folder>");
}

out.println("</Document></kml>");
out.close();

rs.close();
conn.close();
}

public static class Location
{
private float latitude;
private float longitude;
private Date timestamp;
private int id;

public static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'z'Z");

public float getLatitude(){return latitude;}
public void setLatitude(float latitude){this.latitude = latitude;}
public float getLongitude(){return longitude;}
public void setLongitude(float longitude){this.longitude = longitude;}
public Date getTimestamp(){return timestamp;}
public void setTimestamp(Date timestamp){this.timestamp = timestamp;}
public int getId(){return id;}
public void setId(int id){this.id = id;}

public String toString()
{
StringBuilder b = new StringBuilder();
b.append("Location id=");
b.append(getId());
b.append(" long=");
b.append(getLongitude());
b.append(" lat=");
b.append(getLatitude());
b.append(" when=");
b.append(timestamp.toString());

return b.toString();
}

public void toXML(PrintWriter out)
{
out.println("<Placemark id=\""+getId()+"\">");
out.println("<name>"+getId()+"</name>");
out.println("<Point>");
out.print("<TimeStamp><when>");
out.print(FORMAT.format(getTimestamp()));
out.println("</when></TimeStamp>");
out.print("<coordinates>");
out.print(getLongitude());
out.print(",");
out.print(getLatitude());
out.print("</coordinates>");
out.println("</Point>");

out.println("</Placemark>");
}
}
}

iphone tracker

Playing around with the iphone location database:

package com.ikarsoft.iphone;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
import java.io.*;

public class Export
{
    public static void main(String[] args) throws Exception
	{
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:consolidated.sqlite");
        Statement stat = conn.createStatement();

        // date is based in 2001-01-01
        final double offset = 31*365.25*24*60*60*1000;

        PrintWriter out = new PrintWriter(new FileWriter("celllocation.kml"));

        out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n"+
                "<Document>");

        ResultSet rs = stat.executeQuery("select * from CellLocation;");
        while (rs.next())
		{
            int acc = rs.getInt("HorizontalAccuracy");

            if(acc<1000)
            {
                out.println("<Placemark id=\""+rs.getRow()+"\">");
                out.println("<name>"+rs.getRow()+"</name>");
                out.println("<Point>");
                out.print("<coordinates>");
                out.print(rs.getFloat("Longitude"));
                out.print(",");
                out.print(rs.getFloat("Latitude"));
                out.print("</coordinates>");

                // in millis
                double timestamp = offset + rs.getFloat("timestamp")*1000;

                System.out.print("row="+rs.getRow());
                System.out.print(","+new Date((long)timestamp).toString());
                System.out.print(","+rs.getFloat("Latitude"));
                System.out.print(","+rs.getFloat("Longitude"));
                System.out.println();

                out.println("</Point>");

                out.println("</Placemark>");
            }
        }

        out.println("</Document></kml>");
        out.close();

        rs.close();
        conn.close();
	}
}

If you don’t know what I’m talking about, look here: http://petewarden.github.com/iPhoneTracker/

Aim of script is to save in kml format for viewing in google earth. Having trouble with timestamp, it seems to come in bulk:

row=2,Thu Jun 24 09:15:17 EDT 2010,43.860096,-79.995895
row=3,Thu Jun 24 09:15:17 EDT 2010,43.857777,-79.98917
row=4,Thu Jun 24 09:15:17 EDT 2010,43.857777,-79.98917
row=5,Thu Jun 24 09:15:17 EDT 2010,43.863625,-80.00389
row=6,Thu Jun 24 09:15:17 EDT 2010,43.866024,-79.98754
row=7,Thu Jun 24 09:15:17 EDT 2010,43.87239,-79.981895
row=8,Thu Jun 24 09:15:17 EDT 2010,43.87126,-79.98052
row=9,Thu Jun 24 09:15:17 EDT 2010,43.87438,-79.97153
row=10,Thu Jun 24 10:09:54 EDT 2010,43.802258,-80.00936
row=11,Thu Jun 24 10:09:54 EDT 2010,43.808983,-80.01061

I’m assuming, there’s another +offset in the table but don’t know which one. Table for CellLocation looks like this:

CREATE TABLE CellLocation (MCC INTEGER, MNC INTEGER, LAC INTEGER, CI INTEGER, Timestamp FLOAT, Latitude FLOAT, Longitude FLOAT, HorizontalAccuracy FLOAT, Altitude FLOAT, VerticalAccuracy FLOAT, Speed FLOAT, Course FLOAT, Confidence INTEGER, PRIMARY KEY (MCC, MNC, LAC, CI))

iHerb.com – the coolest site for natural products [GEP704]

iherb.com + my coupon code: GEP704

Here’s a trick for one of the sites we shop at. You can use coupons on iherb to get discounts. Once you buy something, you get your own coupon that you can pass to other people to get $$$ into your iherb account. iherb has the biggest selection of natural product I’ve seen on the net. We recommend it primarily for the selection and second for the fact they ship to Canada at more than decent rates.

How do you use the coupon at iherb.com? Use GEP704 at checkout and SAVE $5 on your FIRST ORDER. The coupon has no expiration date! You’ll also get 2 different free samples with your order! For US orders above $40 you get FREE UPS shipping! For INTERNATIONAL orders valued up to $80 and weighing up to 3 pounds (1361 grams) shipping is a flat $4 by AirMail!

After purchase you’ll get your own code and you can use it to earn $ into your account as part of the referral program. Few sites have referral programs to match this one.

Darkmoon Cards

Here’s my attempt to summarize the darkmoon cards in Cataclysm

Earthquake – tank (+dodge, proc: +health) – deck: STONES
Hurricane – dps (+agi or +str, proc: +damage – nature) – deck: WINDS
Tsunami – healer (+int, proc: +spirit) – deck: WAVES
Volcano – dps (+mastery, proc: +damage – fire) – deck: EMBERS