Composer global config & private repositories

I’m using composer for what feels ages now. Composer is a great tool, and in my opinion everyone should use it.

That said, there are quite a few things about it not that well documented, in some cases because it is not that well organised, in others because it doesn’t mention everything.

For example, did you know that composer has a global configuration? And, do you actually know what you can configure there?
I knew it was there for a while, but i had not ever looked into what can be done with it.

Today i was looking for a way for the company i work for to add our private repository in a way that we don’t have to add it to every single composer.json file, but can configure the repository once and then just use it.

Googling for a solution actually led to a lot of places, but most of them just mentioned you can add it to your composer.json – so i decided to have a look what is actually in the global config:

composer config -g -l

the list of options configured then gave me a hint on what to google for, and i ended up with the right page in the composer manual:

i’m not sure why i didn’t find it before, maybe because with assuming the configs being in ~/.composer/ i was looking for configuration, not for the cli documentation

you can edit the global config by doing

git config -g -e

or, if you want to solve the same problem as i wanted to solve, you can simply use this command and it will add it to your config yourself:

composer config -g repositories.myrepository composer http://myrepositoryhost/

I guess if you are using composer in a company/private environment this is a quite useful information.

I might or might not make another post with a few more hints on the other options.

The current “You might not need jQuery” Hype..

lately i’ve seen a lot of people Tweet of Facebook about, infact, right now the github repository used to maintain that site is place three in the most trending repositories.

Now  i’m a bit surprised on how many people that i know are jumping on that train. I looked into what the website says, and i disagree with the basic idea of it.

First of all it asks you “What’s the oldest version of IE you need to support?”, and lets you chose between 8, 9 and 10. I was a bit surprised since it didn’t seem that long ago to me that people where requiring stuff to still run with IE6. Should that glorious implication be true, and the abominations named IE6 & IE7 have been purged from the net? Reality sais no. I went to Google Analytics and checked the stats for some sites i run, and while i have mostly users (Games, Coders and other  Nerds) on those sites that are prone to use a proper Browser (read: not IE), or at least have the latest version of it, i still found that more than 9% of the IE users on my site are using a pre-8 Version.

jQuery 1.* handles this fine for me, i don’t need to think about it. Now obviously i could say “i don’t care about those users” (and frankly, i don’t), but then i’m just running some small scale private sites there. If i was looking at it from a commercial aspect, especially with a target audience that is less tech-savvy than my users, i might not want to keep those customers out.

The other thing that this website is not talking about is maintainability. jQuery actually makes JavaScript code easier to read (just look at the examples that there are on the “you might not need jQuery” website),  and by that easier to maintain.

With literally thousands of extensions and plugins to jQuery you also have an amazing resource of Code, where you can save effort that you’d have to put into reinventing the wheel, and focus on those things that you need to get done. I personally don’t see a reason to build yet another solution for auto-complete, tooltips etc.

jQuery is less than 100kb in size which with modern broadband is nothing (not even on a mobile device), and you can load it through several CDN’s which make sure it will reach your user as fast as possible. You can use large browser-side cache times easy with it (in fact when you are using a CDN for it, chances are that your user is already having it in his cache), and if you use a gzip handler the size transfered shrinks to even less. So this can’t be the reason why the authors of that website don’t want us to us jQuery – which leads me to another thing the site doesn’t talk about:



What are you playing on the oculus rift…

So it has been a few month now that my Oculus Rift Dev Kit has arrived, and nowadays the most common question in context of the OR that i get is “What are you playing on the Oculus Rift?” I’m going to try to answer this in this Post.

First of all, i did not get the dev kit to spend playing stuff on it. I knew there wouldn’t be many games with support when i ordered it, and i’m not disappointed. And while i have actually played a few games & demos (more about those below) the main purpose of buying a Rift was to learn more about it. I’m a software developer, and even if building stuff for the Rift is not my Job, i wanted to learn more about this impressive technology. So about 70% of the time that i’ve spend with my Rift i did not play games.  That is why i bought a dev kit, and did not wait for a consumer device.

I find it funny when people come to me who have tried my (or someone else’s) oculus rift, try to explain to me that the oculus sucks because of its low resolution, or that the screen-door effect makes it unusable.
Guys, seriously, if you care about resolution, wait for the consumer version, that is the one build for you. The dev kit is so developers have something they can work with, while the consumer device is still in development. The idea is that the Oculus Ready Games will be there, and ready to play shortly before the consumer version is out.

Enough of the ranting, as i already mentioned, not all of the time i’ve spend with theOculus was learning, and i actually want to answer the original question as well.

A note on motion sickness: a lot of people have reported problems with motion sickness (or just feeling bad when under the Rift), some after a very short amount of time, others after an hour or so. Personally i got lucky, i’ve had the rift on for 3 hours and more consecutive, and did not have any problems. Some of the demos, when badly calibrated, feel a bit weird to me, but nothing made me feel sick. I tried a few things out with people who tried my Rift, and reactions where quite differently. One thing quite a few people agreed upon is that games in which you sit in a cockpit, while sitting in your chair in RL work the best and are the most harmless sickness wise, while the worst thing is if your screen is lagging and if the control direction is off a tiny bit. 

EVE: Valkyrie – I bought my Devkit after i had a chance to try out EVE: Valkyrie at the EVE Online Fanfest in Reykjavik. I blogged about that in April. So this was the first impression i got of the oculus rift (which back then was the same model as my dev kit model), and i must say, so far this was the best integrated, most fun game i’ve played on it. I’m hoping that CCP will invite EVE Players who own an Oculus to an Alpha at some point.

War Thunder: probably the game that i’ve played most on the oculus yet. War Thunders integration is sort-of working. It is huge fun to step in a plane (especially with a HOTAS system, i wouldn’t want to fly it with mouse and keyboard while under the Rift).
That said, it still has a lot of Problems: the Menu’s to get to a game are HUGE, and by that i mean you have to put your neck back and far up to see the top of the menu. The advantage of that is that all items in the menu are actually readable (if you look in that direction), but it is not really compfortable. The second problem is that when flying, you don’t get the messages that are usually at the bottom of your screen (who killed who etc.), the chat (which is rarely used for anything important), and worst – your speed, altitude and ammo information.
In those planes that have a cockpit (some planes don’t have one yet) you can at least try to read it from the instruments in the cockpit (which means you need to know how to read those), and i guess that will be a viable option with the higher resolution of the consumer version. But in total this puts you in a huge disadvantage over others.
Last, the oculus view seems to drift, after a round or two i usually have my center-view somewhere to the left of from where it started – not a real problem, i can use the coolie hat on my joystick to manually move my view direction a bit – but annoying.
Still it is fun to play with a rift, and i’m looking forward to see Gajin improve its support.

Team Fortress 2 – Probably the only released game with a good and enjoyable support of the Rift. I don’t like TF2 as a game too much, so i haven’t played it a lot, but the implementation of the Rift support is mostly solid (tutorials font size is unreadable on dev kit, but consumer should be ok), and no one of the people who tried it with my rift had any complaints.

VTFNecropolis - thats a demo based on UDK, which is basically one map of some fine first person shooter gameplay. I like to use VTFnecropolis as one of the demonstrations i’m using if someone wants to try out the Rift – it is a beautiful looking level, you can have some action with the bots, and its timing / calibration seems to work ok for most people. But in the end its a one-level-demo nothing you want to play over and over again

Tuscany Demo  - probably the most common known Oculus demo, a map in unity with a house on it that you can walk around and have a look. I don’t find it too impressive, but in demonstrations its a must since everybody has heard about it, and since most people seem to enjoy it. Also quite well adjusted in timing/calibration.

Ocean Rift – another demo, which puts you on the floor of the ocean, you can walk around and look at a few fishes, sharks etc. very nicely done, bit boring after a while, but a good one to start a demonstration with, since it does not overburden the first-time-rifter with stuff like taking care of controlling much etc.

Museum of the Microstar – yet another demo, this one puts you in a fictive museum over the history of power sources from fossil fuel to a micro star. While the idea is great, and it gives a few nice other use cases of the oculus (visiting museums, educational software etc). This one is one of those that gave most people sickness problems. The timing is not exactly right, and if you fall down (which happens) you end up totally screwing over the calibration.

AaaaaAAaaaAAAaaAAAAaCULUS / AaaaaAAaaaAAAaaAAAAaAAAAA!!! for the Awesome  – i hope i spelled this one right. its an indygame (that you can get through Steam for example) and basically the sequel to “AaaaaAAaaaAAAaaAAAAaAAAAA a reckless disregard for gravity”. You are a base jumper who jumps from a high building and tries to make it safely to floor level while greeting your fans and giving your haters the finger. Certain Stunts give you more points. The game is quite fun, and the oculus makes it better – but for me the abstract graphics kinda don’t allow me to immerse into that world. Still one you want to try out (Google for AaaaaAAaaaAAAaaAAAAaCULUS to find the oculus ready demo).

Strike Suit Zero – to me the most awkward approach to VR with the Oculus. Its a third person giant-robots-in-space shooter. The awkward part? its 3rd person, which is a bit weird with a device like the oculus, and having to look towards your ship/robot to see the heads up display feels even more weird.
That said, its 3d effect is great. I hope they will implement a cockpit view or something else that allows for a first person view.

There are a few more demos i’ve shortly run (but that are too much to name now),
and there are a few games that don’t support the Oculus, but work with Stereoificator or Perception (dll injected opensource tools that add oculus support). I’m not going to go into detail what games i tried there (since those are multiplayer games and i don’t want to be banned from them, (to inject the dlls you have to disable / circumvent the hack protection of some games, since this is one of the vectors you could use to gain unfair advantages like seeing through walls etc.).

I hope i could give you a short overview (of games that i have played and) of the state of games / demos which are currently available for the Oculus Rift.

Personally i can see a lot of potential in this, and i’m looking forward to see the consumer version, and some of the games that are in development and have not yet released a demo.

PS: my own development is going forward, i’m having the right shaders and double cameras in my engine now (not using unity, but my own MonoGame based one), but its far from being something to show (the head tracking is not working yet, the engine is currently not rendering the skins of the objects within it (unrelated to rift), and the sizes (and the distance between the two eyes) are not correct yet (the getting the sizes right part is a bitch atm (since i have not cared about how much is a meter in my projections before), if you don’t it just looks weird)

Kingboard & TokuMX for MongoDB

EDIT: TokuMX v1.3.0 brought full MongoDB v2.4, so its not based on v2.2 anymore like claimed in this post.

When i started with Kingboard it was mostly to try out MongoDB, and to learn more on how NoSQL Databases could be used. A year later EVSCO started sponsoring the project – ever since it has slowly been growing. The Virtual Server that is running on has limited hard disk space. Lately Karbowiak has helped me to push about 8million api confirmed killmails into the MongoDB that it is running on. One of the results being that the harddisk usage of the Database (Killdata + EVE data + indexes) grew to above 60GB. MongoDB itself has been quite useful & stable for the killboard, but since it stores the documents uncompressed it actually wastes *a lot* of space.

Karbowiak and me have been talking about using TokuMX for a while now. TokuMX is a MongoDB fork by tokutek (they also have tokudb, a storage engine for mysql), which uses fractal tree indexes, compression and enables transactional safety for MongoDB, all in all, if you read their page (linked above) it reads to good to be true. Saving space + better performance + better features? Who wouldn’t love that.

There are a few obvious downsides to TokuMX, like very low adoption, an extreme small community and virtually no documentation / blogs on it (Besides a few guys celebrating its creation). Then there are some downsides that i will mention during this blogpost, which i found when actually fiddeling with it. One thing to note is that TokuMX is based on a 2.2 mongo version, and had some 2.4 features backported.

So i started to convert my MongoDB installation to TokuDB, basically the first step was Karbowiak adding another virtual harddisk, so i had enough space to make a mongodump of the database. Then i downloaded a tarball with the TokuMX binaries (didn’t feel like building it from source) and run the mongorestore that came with TokuMX (thats important, since TokuMX and MongoDB are not binary compatible). The import itself went quite quick, but building the indexes took several hours.

Once i was done with the import i started up the daemon, booted up the webserver and visited kingboard – or at least tried to. When the side hadn’t loaded after two minutes i started digging through logfiles. With MongoDB the “kills” side had been one of the fastest to load, and i didn’t see any reason why that should be different. After two more minutes the reason popped up in tokumx’s logfile, the count() done to get the total count of kills took over 4 minutes!

I ran to the IRC Channel of tokutec, hoping to get some help there (maybe i did something wrong). As i mentioned the community is extremly small, so i was out of luck, no one was awake to reply. So i fired up my browser, googled and started reading some of the sourcecode of TokuMX. Apparently MongoDB does a count() by answering it from the stats of the database – something TokuMX can’t do, since it doesn’t have accurate stats. So what TokuMX does instead is iterate over all entries, which with 8m entries will take a while. I worked arround it to get kingboard at least up and running, by calculating the total from some aggregated values that i was loading for the page anyways. (I’m not sure if that trick will work in all places though).

Once kingboard was running again, i decided to check the speed of which i can load mails into it from our message queue. Running 20 instances of the importer, it was about 26% faster (more mails per minute) than the same importers when they where writing to MongoDB.

Surfing arround a bit while the import was running, i noticed that:

  • most pages would load with no noteable speed difference to MongoDB.
  • those pages that did inline map/reduces felt alot slower. It turned out that during the import for whatever reason a few of my indexes where not imported. doing those in a running instance by .ensureIndex() took ages (complete night). Once those indexes where set it was faster than before, but still felt a bit slower than with MongoDB, i haven’t found why yet.
  • EDIT: not only the inline map/reduces are slower, it turns out that proper map/reduces are a lot slower as well – for example right now i have an map/reduce op running since 8 hours, which is in the emit phase, at about 38% now (thats with 900k documents to be mapped with an average of between 4 and 5 emits per document)
  • Skipping kills. if i want to go to page 300,000 on the kills i have to wait for some minutes. I haven’t looked at the source for this one yet, but i imagine its because of doing something similar as in the count(). MongoDB actually is quite slow there as well, but we are speaking 15 seconds to 4 minutes. Again, i haven’t looked at the source yet, and right now i don’t see a quick win here on how to fix this. (Turning of Pagination sounds like the wrong approach, but maybe paging by hours or days instead of 20 kills a page?) EDIT: i’ve talked to someone on IRC about it and apparently my hunch was right, skip i doing similar stuff like count there because TokuMX can’t do some optimizations MongoDB is doing here.
  • EDIT: even with an index on totalISKValue this takes ages:
    $data = Kill::find()->sort(array(“totalISKValue” => -1))->limit(12);
    EDIT (AGAIN): This was caused by twig doing a count() before looping on the list, which was basically just the cursor. Count’s default behaviour in MongoDB (and tokumx) is to count all elements and ignore the limit. (optional boolean parameter allows to reverse behaviour). So basically this problem was just a copy of the original count problem.
  • At one point during a huge update_stats (which did update stats for approx 1m kills, something that in normal circumstances shouldnt happen) the oom-killer of my host system actually killed TokuMX’s mongod instance. (have to look into settings for that, this is not a TokuMX issue)
  • i had a few times a MongoConnectionException “Failed to connect to: localhost:27017: Remote server has closed the connection”, and i’ve yet to figure out why.
  • The Data on Harddisk shrunk from about 63GB to 11GB.

As it seems its not having all indexes it should have yet, and there are a few other tweaks that i’m going to make in the next few days to work more nicely with TokuMX, however i’m really hoping more people adopt TokuMX so maybe it gets a bit more love to grow to the solution it could be.

Perry, the Experimental PHP Library for CREST

I’ve been working on a prototype of this for a while, but kept pushing it down in my priorities waiting for CCP to release more (especially the SSO that i’m waiting for so desperately).

A few days ago Wollari asked me if i was working on some Pheal/Crest thingie, so i decided to push this up in my Priorities, and spend most of today to finish a first prototype.

First of all, this is a Prototype, it supports most of the functionality of CREST that CCP has either made public (Tournament / Dust Districts) or published documentation for (Contacts). For more information look in the READMEwhich also comes with a short example (based on the Districts).

There are still a few quirks with it, also it lacks caching, logging, archiving, so there is still a lot work to be done – but then i figure CREST is not really public for us either – so this should give an opportunity for all those who want to get a first look at it, but don’t know where to start.

Sadly a lot of the work that went into it was intelligent guessing, since most parts of it are not documented (well most likely they are, but the documentation is not public / i’m to stupid to find it). Which brings up the next problem: To actually use the library you need to know a bit on how the CREST Representations look like, so (for now) you will have to look at it with a tool like Postman ( I’ll see in the next few days (i won’t whine if the CCP guys beat me and release some docs first) cook up a quick-n-dirty documentation to the Crest pages available.



not implemented

  • contacts write
  • anything not listed in implemented

Also you might find some files to access Thora, a Proxy for the old API,
which is mostly not working yet, so don’t use it.


The Name
Perry is named after Perry Rhodan, a long running sci-fi novella series from germany. Now you might ask yourself what that has to do with EVE, and i’ll answer you a plain: Nothing. BUT, the first two aliens that perry rhodan meets are Crest and Thora, of which Crest becomes sort of a Mentor to Perry (and after the death of crest, there are several iterations of Perrys Flaggship named CREST (CREST II, etc.). When i heard the name CREST for the new API last year i knew that i just had to call my lib Perry Blink

3rdPartyEVE Summer Cleaning

I did some End-Summer cleaning on, first of all i upgraded from bootstrap 2 to bootstrap 3, which most users probably will only notice through slight changes in the looks.

Second: there is now a Categories Menu at the top, which should make it easier to find stuff.

Third: i cleaned up projects by running an automated task to check if the url’s provided do still exist, and disabling those that are actually erroring out.

Project that have been disabled due to host not resolving or website unreachable:

  • EVEDrone
  • YaKB
  • decloaked

Projects that did not exist under the urls provided (404 etc)

  • jjEVE
  • Bitter Sea Trading
  • EONApp

Other Information did respond to a HEADERS request with a 500 error code, but since
a regular GET worked with my browser i ignore that for now, however that should be fixed.

EVE-Mogul gave an error once, but doing a second check it came up with a proper response, same goes for jEveAssets

(german) Ein offener Brief an unsere Frau Bundeskanzlerin.

Sehr geehrte Frau Bundeskanzlerin Merkel,
bitte treten Sie umgehend zurück.

Eine so eklatante Verletzung unserer Menschenrechte, und damit unserer im Grundgesetz der Bundesrepublik Deutschland als Grundrecht zugestanden Freiheiten, wie sie durch die sogenannten Partnerstaaten geschehen ist, ist sehr wohl mit der Stasi zu vergleichen. Nur weil Sie mit einer Kapitalistisch-Demokratischen Regierung mehr einverstanden sind als mit einer Sozialistischen, bedeutet das nicht das diese Mittel auf einmal Moralisch zu rechtfertigen sind.

Ob man in einem freien und guten Staat lebt hängt davon ab wie der Staat die Grund und Menschenrechte achtet, nicht von der Staatform ansich.

Ein “treuer Verbündeter” wie sie die USA nennen, hintergeht nicht unser Vertrauen, liest nicht unsere Post, und ignoriert nicht unsere Freiheit unter dem Vorwand die eigene schützen zu wollen.

Ich möcht Sie hier an Ihren Amtseid errinern “Ich schwöre, dass ich meine Kraft dem Wohle des deutschen Volkes widmen, seinen Nutzen mehren, Schaden von ihm wenden, das Grundgesetz und die Gesetze des Bundes wahren und verteidigen, meine Pflichten gewissenhaft erfüllen und Gerechtigkeit gegen jedermann üben werde. So wahr mir Gott helfe.”

Mal ernsthaft, glauben Sie wirklich Sie wenden Schaden von uns wenn Sie dieses Verbrechen gegen die Menschen verteidigen? Wie soll ich denn noch vertrauen in unsere Regierung haben? Glauben Sie nicht das fehlendes Vertrauen durch das Volk schadet?

Wenn Sie sich nicht mehr in der Lage fühlen unser Grundgesetz zu wahren und zu verteidigen, dann überlassen Sie Ihren Posten gefälligst jemandem der das kann.


Get every new post delivered to your Inbox.