meet ephemeral!

published 17 Feb 2016

Hi everyone, I’m Ephemeral! I’ve been with osu! for a while now (since 2009) and have been ambling about behind the scenes for nearly as long, helping stuff get done and the like. Some things have recently come to bear, and I’ve been asked to help bring some clarity to the matter.

As many of you are probably aware, things have been particularly rocky in the community over the past week or so. A number of fairly big changes were added, then removed, then readjusted and proposed again, then removed again.. A mess and a half, to say the least. Everything went belly-up for a little while, and we’re only now just starting to get our head wrapped around things again.

During this whole fiasco, one of the biggest issues expressed by the community is the lack of transparency in how “staff” decisions are made and affect the game. This is something that as a team, we typically struggle with. Most of our major discussions happen behind closed doors, a product of years of tradition dating back to the very first years of the game, when the community was far, far smaller.

For the longest time, the community was small enough that any concerns would trickle through the engaged user-base and ultimately end up being noticed by someone involved who could do something about it. Over the years, osu!’s community has grown above and beyond our wildest expectations, and it is entirely fair to say that we have dropped the ball on adjusting our decision-making practices to account for this.

So, going forward, we aim to be entirely transparent with our thought processes leading up to the big decisions that impact everyone in the community.

What better place to start than with the issues of the past week?

With that in mind, we have constructed a unified timeline of the decisions pre-dating the infamous “Mapset and Spread” restructure that sent the community into a furore, as well as the “Ranking Criteria Council” concept (which has been met with similar levels of disdain).

It is our hope that by placing the events leading up to the birth of these decisions into the public view, we can work together to find out the best way of moving forward from here, and to make sure that something like this does not happen again.

We have suspended all movement in the Ranking Criteria changes for (at very least) the remainder of the week, and will use this time to gather your feedback and our thoughts on how we may best proceed from now on.


For Those Wondering How Osunext Is Coming

published 09 Feb 2016

For those wondering how “osu!next” is coming along, here’s some of the progress we’ve been making. It may look like very basic stuff, but let me give you an idea of what is going on here:

We’ve been working to clean up the osu! codebase so it is easier to follow and contribute to. The existing framework means visual objects inside other objects (for things like scrollable views) have been limited in how they can be transformed. Movement has been easy, but anything beyond that requires quite convoluted code.

This video is an early preview of a drawable class inside another drawable class inside a third drawable class. Each can have transformations applied to them, which affect all of their children (movement, two-dimensional scale, rotation, colour and alpha).

Input is also masked correctly to only propagate downwards to the correct objects. You might notice that the boxes themselves aren’t masked to their parents yet; this is something we are still working on.

I coded up this example in a few minutes just to show what we’re up to behind the scenes. The whole class is under 100 lines for this demo, and about half of that will be unnecessary once we finish correcting the viewport implementation (so children can set their own coordinate system independent of the parent).

Yes, the “osu!next” design is still yet to take shape, but once we get the basics down things will be really really fast to actually implement. We’ve been holding off until the framework is ready to accept lots of new pieces entering it at a rapid pace.

This is the culmination of an effort over the last year, recently brought up-to-date by smoogipooo TVO and myself. It’s been a struggle to keep it merged alongside the constantly changing mainstream branch, but we are currently mending it with the aim of merging it into CE in the coming weeks. Stay tuned!



published 04 Feb 2016

It has been a while since I’ve posted on general osu! progress, so here’s a cumulative update for January! It’s safe to say we’re making good progress in a lot of areas, though personally I still want to see more happen faster.

Infrastructure Improvements

There has been a pretty large spike in concurrent users over the last couple of months. In order to keep things working smoothly with the increased demand, I’ve begun to add additional servers where they didn’t exist before. The first of these to be introduced was a dedicated score submission server, decoupling it from the main private API backend server (previously handled score retrieval as well). Deployment of specific web-based tasks has always been quite modular, so adding new servers fortunately comes with little overhead, apart from the added cost. Work continues this week as I prepare servers for the added load caused by Chinese New Year.

In addition to processing servers, I’ve also been expanding the download mirrors to make sure the osu! game client, updates and associated resources are streamed as fast as possible to the various regions of the world. More to come on this, since I find content distribution quite an interesting area to discuss!

Skin Preview

Now live on cutting-edge, skin gameplay preview has finally come back. Rather than a specifically crafted game mode, it will randomly choose a beatmap, set the mods to Autoplay and seek to an area of the beatmap where you can see some action. The options menu is now able to stay open in this mode, allowing you to make changes to the skin (and other settings) while instantly seeing how it affects gameplay.

New Interface Sounds

I mentioned these at the end of last year, but they are now added on cutting-edge. You can go check them out yourself. They are also all skinnable.

OWC Prizes

We got our workflow sorted for sending tournament prizes out. The main osu!store’s fulfillment centre is already under enough load, so we had to setup a second fulfillment centre specifically for handling these prizes. Everything is going smooth now, and all OWC 2015 prizes have now been sent out to the winning teams!

New osu!web releases

The new osu! website is slowly beginning to take form! The beatmap listing is now live (ignore the low quality thumbnails please), along with new sections on user profiles including history, beatmaps and achievements. Livestreams are also visible, though the design is in need of severe revision.

Progress on the new web is about 10,000x slower than I want it to be. I’m still trying to figure out how to improve this without sitting down and completing it myself. If you are someone that has seen the bounty system we are running but something is holding you back from contributing, please let me know so I can do everything in my power to help increase productivity on the project! I will be announcing many more bounties over the coming weeks, so keep an eye out here and on the github repo.

Reddit Presence

I threw some effort into trying to get some degree of order in /r/osugame (to the point I would be personally happy to return there). Things are looking good, with cheating reports separated into a new dedicated sub-reddit. There’s a lot of unique conversation, content and meta that doesn’t make it on the official osu! forums, so if you don’t already frequent that place, you may want to check the sub-reddit out once in a while and see if it’s something you want to follow along with!


Surface Book Battery Life

published 25 Jan 2016

I recently switched from a MacBook Air 11” (2013) to the new Surface Book (base specs). My reasoning was to extend my battery life while on the move, as the air was only netting me around 6 hours on Windows. The air did of course fare better on OS X (7-8 hours) but I would find myself in Remote Desktop all day long as I generally use windows exclusively these days for development.

The hardware is quite nice overall. I have some issues with quality control, but I’ll save that for another more general post. I’m making this entry specifically to touch on battery life, as I have put in a fair amount of time and research in to getting my setup perfect and thought it would be a waste not to summarise and share it. There seems to be a bit of false information out there on how good/bad the Surface Book battery life is - especially due to early reviews using different hardware from the final specs. Time to try and help clear things up.

I get between 9 and 14 hours on battery, depending on what I’m doing. If I was to leave the PC idle (wifi connected, 50% brightness) I can get 18 hours. I use connected standby and the Surface Book consumes around 0.9-1% per hour sleeping. These numbers are well within my expectations. That said, in order to achieve such battery life, you do need to be aware of a few basic points:

Connected Standby Low Power States

Update: As of the release of the February 17th Firmware updates, Hyper-V is no longer required for Connected Standby!

As of January 2016, in order to make connected standby actually enter low power states, you have to install the optional Hyper-V components. The reasoning behind this is yet unknown, but it’s the difference between 2800mW/h and 680mW/h usage when sleeping. Note that having wifi on or off does not seem to affect drain rate significantly.

In order to check that your system is correctly entering Connected Standby low power states, you can use the powercfg command.

  • First make sure your battery is already at 96% or less - the SB hides battery drain from 100 to 97% from the system, which will cause completely inaccurate results if included.
  • Make your system sleep for at least 30 minutes (less than 10 won’t display at all, less than 30 will be inaccurate).
  • Open an administrative command prompt (Win+X then A) and type powercfg /sleepstudy.
  • Open the generated html page in your browser of choice and compare to the following example:

For those wondering what it looks like when CS isn’t working correctly, here’s an example.

Inhibit Turbo Boost while on battery

I recommend disabling turbo boost while on battery by setting the maximum processor state to 99% in your power profile. While this will reduce the performance of some burst tasks, it will also limit the degree that run-away processes using high CPU for their lifetime can affect battery life, which can be a huge gain.

In order to change the processor state, you will need to alter your registry as it is hidden by default. Here’s a reg file that will do it for you (open it in a text editor if you’d rather make the change manually).

Hit the windows key and type “power plan” then open the “Edit Power Plan” settings panel. Click “Change advanced power settings” and alter your maximum processor state while on battery to 99%.

As a note, it is possible that for some workflows this will not be beneficial. Turbo Boost is implemented to be quite efficient, so you may want to consider not adjusting these settings if you are getting already getting ample battery life without overriding the defaults.

CPU Babysitting

Windows 10 has some issues which can result in high CPU usage. Make sure you keep a watch on CPU usage to make sure you don’t get any background tasks saturating your CPU. Here are some examples I have experienced which can result in high background usage:

  • Search indexing. If you have a lot of small files that change regularly in your user folder (node.js projects, cygwin installs, large git repositories), consider exluding them from indexing.
  • System and Compressed Memory. If this is high, you likely have a driver or software conflict. I experienced this after a bit too much experimentation with SB drivers; a fresh install of windows has since fixed it.
  • Service Host: Remote Procedure Call. I’ve found that some windows store apps can trigger a high CPU state that you can only recover from by closing the problematic apps. Let’s hope Microsoft addresses this one.

If you’re worried about background processes, power saver can help alleviate the load, but it is limited to certain services such as Windows Update. No harm in leaving it permanently on, though.

I use Rainmeter to watch over my CPU, as it gives me a quick glance of the processes using the most CPU time.

Display Brightness

Keep display brightness at 50% or less. Anything higher increases battery usage quite exponentially. I’d recommend turning off adaptive brightness and just adjusting yourself as you see fit.

Raw Energy Consumption

On top of this, I highly recommend an app like BatteryBar Pro (the free ‘basic’ version is fine) to watch your actual energy consumption. You don’t need to constantly be watching, but at least spend a few sessions understanding which of your tasks are using more power than others.


Advanced users may want to consider undervolting using Intel XTU, but I’m not going to go over that here as it requires special care with connected standby else your system will crash. I do run at -82mV and can attest that it reduces heat output significantly, but doesn’t really affect battery life in a meaningful way.


The Surface Book has a 68Wh battery, so if you want 10 hours you need to aim for 6800mW consumption or less. When doing menial tasks like web browsing, I usually hover around 4-5000mW; dev work is closer to 6-7000mW; burst CPU activity can hit as high as 20-30W.

While you can achieve high battery life with the SB, the out-of-box experience is absolutely horrible. Microsoft do still have some work to do:

  • Connected Standby should just work, even without Hyper-V enabled.
  • Connected Standby should be using far less power. The specs state devices must drain less than 5% per 16 hours, and they are yet to get anywhere close to that. Who knows if they can?
  • The Surface Book consumes power while completely off when connected to the keyboard dock. This is completely unacceptable. I’m not sure if it can be fixed with firmware updates, but let’s hope so.

Can I recommend this thing? I’m honestly not sure yet. I have a few other issues I haven’t mentioned here such as paint being scratched off the hinge, fan noise and speaker issues which I’m happy to live with but deserve consideration before making a purchase (these seem like quite common issues, looking around). I’ll write those up another time if I find time :).



published 11 Jan 2016

Welcome back everyone! I’ve had a bit of a break over the last two weeks. I should say “break”, because I’ve still been spending a minimum of 3-4 hours a day just keeping up with the day-to-day running of osu!. Going to take a moment to reflect on 2015 and figure out my intentions for 2016. Bear with me, as I am not one to plan ahead, so anything I say here is raw and volatile (as in I reserve the right to change my mind).

What did we get done in 2015?

  • Moved over 75% users to the new GL/.NETv4 branch. There’s still a few yet to make the plunge for one reason or another, but we still have some improvements that are yet to go live in the performance and compatibility department over the coming months which should move this number closer to 100%.
  • Released the osu! “nono” keyboard and many other new merch items on the store. You will honestly never understand how much goes on behind the scenes to make the web store run and how much I’ve put into getting it going smoothly. That said, things are setup really nicely now and we have many new products coming this year for those waiting for the perfect item. We are looking at improving distribution to EU countries which currently get hit by some weird customs/taxing practices enforced by the governments over there.
  • The osu! tournament system got a lot of work. As a result, all the official tournaments ran smoother than ever. We introduced the first money prize pool for OWC 2015, along with the profile banner system. We’re constantly working to make tournaments as enjoyable as possible for both participants and viewers.
  • We began releasing osu! exclusive tracks courtesy of nekodex and cYsmix. Going forward you will likely see a lot more of this, too!
  • We announced the new osu! website. While it’s still not complete after a year of development, it is getting closer to being a stable and usable replacement for the old site.

I’ve probably missed a lot out from this list, but these were the things which stood out to me.

What are we doing in 2016?

Development & Contributions

Let me start by saying that I’m never satisfied with my own progress. I expected to get a lot more done in 2015. This can mostly be attributed to overheads in my own workflow which move my time away from writing code, including accounting, management of others, email/support communications, community management and infrastructure requirement changes (due to things like DDoS attacks).

I spent more money than before on hiring staff to try and get more development time into the game to make up for the deficit caused by me handling other issues, but even with low expectations this failed to meet my minimum expectations. I’ve learnt a lot in the process and will be aiming to change direction in 2016. My motto has always been to throw solutions until they work, which sometimes includes failing along the way.

At the end of the day, I don’t want to be in a position where I’m forced to manage people. When employing people on a part or full-time basis, unless they are extremely self-motivated driven people, you are forced to micro-manage. This is not something I want to do and thus I won’t be doing it anymore. I want people who are contributing to osu! to be doing it because they want to; because they are driven to do so.

What does this mean for 2016? The direction is to open-source everything and allow absolutely anyone an opportunity to contribute. I get a lot of emails from people asking for employment, and while I’d love to allow them the chance, the overheads that come with this are just not sustainable.

So, I want to get all existing developers working on a contractual basis fulfilling feature requests and bug fixes on per-issue (or per-hour where necessary to ensure their survival) basis, paying out roughly what you’d expect as a full-time contractor to make this a sustainable system.

Yes, I may be blocking some people who require job security from contributing, but it also weeds out those who don’t have the confidence, skill or motivation to contribute in a meaningful and consistent manner. In return, I promise that those who do meet the requirements and contribute on a regular basis will be amply rewarded.

Anti-cheat & Bans & Appeals

Some of you more active in certain parts of the community may have noticed over the recent months that we’ve been more agile in handling cheater reports. I’m constantly evaluating how we are combatting cheating and altering the strategy as required. We’ve lost some battles in 2015 and cheating efforts continue to grow in size but we have weeded out some long-term cheaters that were polluting the system.

I haven’t been too vocal about what I think of cheating/hacking because I believe that keeping these efforts private allow us to have the edge on users trying to abuse the system, but this year I am going to try making our efforts more public than ever, hopefully allowing others to contribute to the endless fight to keep osu! an enjoyable environment for legitimate users.

I’ve always been under the belief that cheaters are fine to exist as long as other users are not disrupted. Now before you attack me for this view, hear me out - If we were out to catch every last cheater, you’d see the following happen:

  • There would be a lot less time dedicated to actual development and improvement of the game itself.
  • We would be forced to introduce more intrusive measures to ensure we had full control of the situation.
  • It would push cheaters to resort to new methods, like hardware devices, which would be undetectable to us.

Until now this approach has worked relatively well, although at time we have been too slow to respond to an obvious cheater. Going forward I want to ensure our response time to cheat reports is as close to zero as possible, to give cheaters the smallest publicity/exposure possible (after all, this is usually what they want). I have some ideas for new methods in this regards, but we’ll also be reaching out to the community for help - I’ve seen a lot of people that have already been able to help us catch people that we had no idea were cheating.

We still have some large areas to fix (such as spinner hacks), which I hope to attend to this year using replay analysis amongst other techniques, assuming no one beats me :).

As for ban/restriction appeals: the current system is completely unsustainable. We have 4-5 people working every day on handling appeals and even then we cannot keep up. On top of this, there are many cases where we make mistakes. People that cheat also excel at lying and making up stories, so it’s very hard to decide where to draw the line.

There’s also the recurring case of people getting denied appeals, then just using further hacks to bypass multi-account detection and come back up to 120 times on new accounts where they (usually) proceed to cheat again. It’s nigh-impossible to solve this with the current system. Ban appeals favour compulsive liars and make it hard for the actual honest users to return to the game.

Going forward, we need to automate this process. We need cheaters to be put in a state they are able to continue playing without disturbing the average user who does not want to be around cheaters. They need to be happy with the state of their account so they aren’t tempted to constantly make new accounts and pollute the system.

Having said all this, you’d think I have a solution all thought-out. I don’t. This is by far the hardest thing to manage in osu! - and I’d go as far as saying it’s the same issue plaguing every online game out there. No one has found a solution for this. Honestly there may be no perfect solution, but this is the problem which keeps me up at night. I still believe we can implement a system which adds incentive to not cheat which doesn’t need manual oversight from a team of paid staff.

I’m open to input as always.

At the end of the day, though…

A lot of people think I run osu! as a business. I do, but only to the extent that I pay taxes and keep accounts. That’s about as far as I take it - osu! to me is and has always been a project of mine. It started out as a hobby and has become something much larger. Just because osu! now has over 1 million unique users (playing each month), please don’t hold me to run it as if it was LoL, WoW or anything similar. Those companies make games to make money. I make games to provide entertainment. Please don’t assume I follow the same ideals or have the same goals as such companies.

Making money from osu! is a reality. We make enough to employ people to handle the osu! store, support tickets, develop features and run tournaments. We make enough to fund tournaments without additional sponsors, fund new merchandise development and help out users if support is required (for instance, I offer servers to people making services which are related to osu!). While I’d love to be transparent with the way we use money, I honestly have not done this because I don’t want to shift the focus. I don’t want to involve you all with the burdens of accounting. I want to keep osu! the same as it has always been: focused on the game, the players and the community.

Trust that I am trying my best to not waste your money. I invest every last bit back into osu!, pay myself just enough to survive and constantly review and adjust how we spend the money you support osu! with. I am extremely happy that I can run a service of this scale with no advertising, no crappy in-app purchases or DLC, all while keeping an uptime and update release cycle that exceeds all the major games out there.

In 2016 I hope to invest more money back to contributors via open-source. Once we have our ecosystem set up to accept contributions from anyone, this will remove the previous overheads which stopped me from paying out for smaller (possibly once-off) contributions and also remove overheads of contracts and employment while still allowing recurring contributors to make a living from helping out with osu!.

2016 will be the year the osu! client goes open source. Hopefully sooner rather than later.

2016 will also be the year of many many more osu! original track releases. We’re still working on the specifics of this but I’m super-excited and can’t wait to announce the artists we have on-board for releases this year. I want to make the music side of osu! sustainable, and give users more choice in the songs they can use to map (ie. we obtain the legal rights to map music for mapping, so you don’t have to).

Sorry if this post is a bit of a rant, but I wanted to share everything currently on my mind. I hope you can agree with the direction I’m taking things, but if not please be as vocal as you want!

Oh, and osu!next will happen this year. While 2015 was a realistic goal at first, I hope you can that in running and improving a service, deadlines sometimes get pushed only - not because we want to, but because we have to. More on osu!next in the coming blog posts, I’m sure.