Monthly Archives: October 2018

Where do we go from here?

It’s been three weeks since my last post regarding Cube Tutor and I’m writing this post today to collect my thoughts on where we’re at and to look at a potential route forward. Firstly I want to say thank you to everyone who reached out to me with a Tweet or Email. The sheer volume of messages was a little overwhelming but it was important for me to take the time to listen and give everyone who reached out a personal response. I’ve still got a few to get through so please hang tight.

What really surprised me was the sheer number of people who just wanted to say ‘thanks’. I hadn’t anticipated the love and strength of feeling towards the site and it’s easy to forget when you are sat behind a keyboard, staring at a screen that there and there are thousands of people out there who are enjoying this thing you created, and in many cases making real life connections and friendships through their love of cube. Friendships that may not have happened without Cube Tutor. It was humbling to hear so many stories along those lines and it gave me a renewed sense of energy and urgency to find a way out of this.

There were many other common themes in these messages so I’m going to start out by touching on a few of those. First things first let’s address a bug that I get scores of messages about every week..

I can’t login / the login page redirects somewhere else. Help!

This is a known issue and it is very frustrating that I am unable to fix it because I cannot build and deploy a new version of the code. Thankfully the fix is very simple from your end, just clear your cookies for cubetutor.com and you will be able to log in once more. This problem is down to a quirk in the ‘Remember Me’ cookie and as soon as I’m unable to rebuild and deploy the codebase, it will be the first thing I fix.

Is Cube Tutor dead?

No. Although there are challenges, there is absolutely no reason why the site couldn’t exist as-is for a few years more. I will continue to add new sets, promos and other cards as they are released, as I have from the beginning. The fact is that in order for it to continue to be useful, it needs to be maintained and updated and right now that is a challenge.

Can I buy / have Cube Tutor?

I received many offers along these lines. This is a community that I am extremely proud of, having built it up from scratch and simply passing that honour and responsibility on to someone else is not a decision that I would ever make lightly. If I felt that it was in the best interest of Cube Tutor to pass on the torch to someone else who came to me with a well thought out and considered plan for it’s revival then I would give that serious consideration. At the time of writing this post I have no plans to pass control of Cube Tutor to anyone else but I am by no means ruling this out.

Why don’t you just open source Cube Tutor?

I am not philosophically or commercially opposed to Open Source software, quite the opposite however I don’t see the value in open sourcing the codebase as it stands. Tapestry is interwoven into the fabric of Cube Tutor and trying to remove it would be like trying to surgically remove a human skeleton. It simply isn’t possible. In addition the work required to host, document and open up the codebase makes it a costly exercise that I simply do not think is worthwhile at this stage. This isn’t the end of the open source discussion though.. read on for more.

I’m a developer. How can I help?

It’s no surprise that there are a lot of talented developers in the Magic player base and I had many enthusiastic requests from people wanting to get involved in some way. One of my main challenges when it comes to working out a future for Cube Tutor is time. With another job and a family, the number of hours that I have available is not what it once was. The idea that I could somehow spread the load and give the community more ownership of Cube Tutor and it’s development is an appealing one.

Of course working collaboratively would not be without it’s challenges. For starters you have to make sure that everyone is on the same page when it comes to design principles and coding standards then you have the challenge of being on the other side of the world from people you are working with. You have to deal with the fact that people potentially have competing ideas about the best way to solve a problem and if you’re not careful you end up with a house of cards.

All of that said I think that if we can leverage the combined effort of the community to find a way forward for Cube Tutor then it’s definitely something that I want to explore. I have a plan.

The Plan

I don’t want to give up working on Cube Tutor. I don’t want to pass on the torch and leave it all behind me for someone else. I want to see Cube Tutor grow into the platform that I have always dreamed it could be, and I need to be able to do that in a way that I can fit into my life.

Before I can work on the future I need to deal with the present and there are two things which require my immediate attention.

Step 1Update the Patreon page to reflect reality. Right now I am not working on Cube Tutor 1-2 days a week as my Patreon goals would indicate. The ‘part time’ and ‘full time’ goals will be removed. Cube Tutor still has a hefty monthly bill of running costs I and really appreciate the contribution that the Champion community are able to make, to cover those. Any money above and beyond those costs will either be reinvested into Cube Tutor via development effort or kept by as a ‘rainy day’ fund to cover server costs for a while, beyond Patreon support. The Champion Program will be unaffected and anyone who is still able to offer $5 a month will continue to receive those bonuses. At the time of publishing this article, this step should be complete.

Step 2 – Resuscitate the current application. It’s simply not practical to be unable to make any changes to the codebase. I need to fix that damn login bug! I am working on getting Tapestry upgraded to 5.4 but another option would be to change build servers. If anyone out there is a Tapestry specialist who would like to offer up some help then please do send me an email: ben@cubetutor.com. In progress!

Step 3 – The Future

So let’s start by quickly reiterating the current situation.

  • The current web application is built on a dead framework. Right now I’m of the opinion that any significant effort to rework the current codebase is wasted. The framework is dead, running on an antique infrastructure and it was never really built with the requirements of the modern day internet in mind.

  • I don’t have the resources to rebuild Cube Tutor from scratch on a new framework. I don’t have the luxury of the time that I enjoyed in 2014-15 where I spent every day thrashing out reams and reams of code.

  • Cube Tutor has an incredibly rich and valuable dataset. 5 years worth of data is a lot! Want to know the card that is most commonly picked after picking Serum Visions? Sure! Where does Llanowar Elves sit in the overall draft ranking? No problem! Which cards are most commonly listed in a cube alongside Umezawa’s Jitte? So much data.

  • Cube Tutor is blessed with an active and passionate community of developers. Many of whom would love to be involved in Cube Tutor’s development and future success.

  • The current site is still very useful as-is. This was really highlighted to me in the feedback, however I know there is much to be done to make it as useful as it can be.

With all of that in mind I propose that the next phase of Cube Tutor’s development should be to build a new API.

What is an API?

API stands for Application Programming Interface and it is a set of tools that a developer could use to programmatically interact with an application in order to build their own application on top of the data and functions that are offered. Typically an API exposes a similar set of functions to those available through routes that a regular user would use to interact with the application (a website or app) but in a more formal way that a developer armed with a programming language can parse quickly and easily.

What could this mean for Cube Tutor?

If I could expose the core functionality of Cube Tutor (List Management, Drafting etc) through an API then third party developers could come along and fill in the holes of what is offered by the website. We all know that the experience on mobile isn’t currently ideal but if a talented iOS/Android developer wants to solve that then awesome, come along and use the API! Got a cool idea for some new Analysis charts? Use the API and build them! Want to do something fancy with list comparison? No problem – use the API.

Why is this a neat solution?

Well first and foremost it would allow me to continue to work on Cube Tutor in small incremental chunks by building features into the API one at a time. This API would be a brand new application meaning it could be built to 2018 standards in a way that hopefully won’t suffer from the same pitfalls that the web application has. I’d also be totally up for the idea of open sourcing this platform and taking help from the community to build and maintain it.

Developers could get involved in one of two ways, either by contributing directly to the development of the API platform or by offering to build an application that would use the API and thereby driving some of it’s requirements.

In time, the website itself could be rebuilt to use this new API in a new web technology in the same collaborative way.

Importantly this provides a path forward for Cube Tutor that could truly see it expand and fulfil it’s potential whilst leveraging the vast amount of data in the application, and experience and enthusiasm of it’s community of developers.

I would love to hear your thoughts on this idea and in particular from anyone who would like to get involved as a third party API user. I’d also like to stress that nothing is set in stone yet so if you have another idea or suggestion then please don’t hesitate to get in touch.

As ever, I am available via email: ben@cubetutor.com

That’s all for now. Happy Cubing!

– Ben

Advertisements

The CubeTutor Controversy

I am writing this blog post in response to a podcast that was put out a few days ago about Cube Tutor and some of the issues surrounding it’s current state of development.

http://solelysingleton.libsyn.com/season-3-episode-1-the-cube-tutor-controvesy

I would like to thank Brad and Eric for producing this episode. They approached a topic that they have all the right in the world to be screaming and shouting mad about with a mature, level-headed, clear and polite tone. As you can probably imagine it was a really difficult thing for me to listen to, to hear the state of Cube Tutor laid out plain by two of it’s longest running supporters, who in spite of everything still continue to support the site financially through Patreon. They presented the information in a clear, factual manner and I have no issue to raise with any of the points that were made. They are right about everything – I haven’t kept up my end of the bargain and I have been woefully inadequate about offering any sort of communication, and for that I am truly sorry to all of you.

So how did I get here?

If you aren’t interested in the history of Cube Tutor then feel free to skip to the section: What went wrong?

Back in 2013 I was a developer at a large and successful software house. The job was good and looking back I have no complaints about it but it didn’t excite me, it didn’t give me a reason to get out of bed and throw myself into the day. I’d been a Magic player on and off for over 10 years and around that time I was really getting in to cube and was keen to build my own. In my spare time I started to develop Cube Tutor, really just for my own needs initially.  As it grew and became more feature rich I put it out online and a couple of friends started tinkering around with it. From there I put a post on MTGSalvation inviting others to try it out and many people did.

Around autumn 2013 I realised that I had something with Cube Tutor. People were really engaging with it and it was making me very happy to be able to work on a site that I loved in my free time. I was approached by a potential business partner about the possibility of building Cube Tutor into something that could support me financially and the idea sounded like a dream. I’d grown somewhat tired of my job and the idea of working on something that I loved full time was hugely appealing. I handed in my notice and threw myself into it.

The first six months or so of 2014 were great! I was waking up every day, motivated to work hard on a site that I loved, to build it into something even bigger. Whilst I wasn’t getting paid to do anything at the time, I was able to support myself through some savings and with the promise of building this thing into a viable business I was happily working away.

I don’t really remember when it happened but it gradually became apparent that the business partner I had hoped to work with clearly didn’t have the same vision as me and simply wasn’t interested in pursuing our idea. Looking back I was probably a little naïve and for whatever reason it just didn’t come together. My savings were starting to run a little low and in the face of mounting running costs it became clear that continuing to offer Cube Tutor as a completely free service was no longer going to work. I could either go back to work and ask my users for a little help with the server costs and keep it ticking over or I could throw myself into this even further, work on my passion project and try and make something of it. There was no choice for me, I wanted to make a success of this.

I embarked on the Cube Tutor Champion program. This was a way for you guys to support Cube Tutor financially on the promise of some extra features for your account but more importantly to take the financial pressure off and allow me to actually work on improving the site. All in all I was working on this for the best part of a year before it would see the light of day but when it finally launched it felt great. Not only did people engage with it but I quickly achieved my second tier commitment on Patreon which allowed me to work part time on the site, as my job.

By the time the program launched, I was in quite a bad place financially. Having taken 18 months without pay, coupled with the thousands of dollars I’d spent on server costs, I really needed to get some income. It is really only with the support of a very loving and understanding wife that I managed to get to the stage where I could even launch the Champion Program and for that I am very lucky. Thank You.

However even with the overwhelming support from the community, it just wasn’t enough to keep me going and I had to take on another job. I was offered an opportunity that would fit very well alongside my 1-2 day a week commitment on Cube Tutor and it is a job that I continue to this day, part time. I am also very thankful for that opportunity as not many traditional jobs would be so accommodating and understanding of the time that I needed to spend working on Cube Tutor.

Along with the launch of the Champion Program came a flurry of feature requests from users who knew what they wanted out of the site and for the first few months up until October 2015 things were going great. I was putting out regular releases, resolving feature requests and generally keeping up with my Patreon promise. The feedback I was getting around this time was along the lines of “these features are great, but when are you going to tackle one of the bigger ones, like getting the site working on mobile?”. Back in the beginning I’d never imagined that I’d be at the stage where people would be using CT the way that they are and it hadn’t really been built with mobile devices in mind. This was a huge undertaking. I went back to my Patreon supporters and said, “OK I can do this but I’m no longer going to be able to keep up with 1-2 Feature Releases a month, this is 6 months of hard work on it’s own”. You guys were very supportive and said, “Hey, great! Go for it!”. I set off to build a mobile UI on top of Cube Tutor.

In a lot of ways I think this was a turning point as I’d gone from my familiar territory of churning out small releases and bug fixes into something much bigger. Even in the days when I was developing the Champion Program I was still putting out regular releases. This was the start of the decline in my communication, something which there is just no excuse for. Nonetheless I did work hard during those six months and came out the other end with a mobile UI for drafting, something which I offered up for Beta Testing in the Summer of 2016. The feedback was generally very positive and I went back into development with a view to completing the work and getting it released.

What went wrong?

Then a bomb hit. I’m going to talk a little technically over the next couple of paragraphs, but I think it’s important to be as clear as I can about what happened. I learned overnight that Apache Tapestry, the framework that Cube Tutor was built on had come to the end of it’s life and the founder of that framework would no longer be supporting it. This shouldn’t have come as a surprise to me, Tapestry was a framework from an older time. It hadn’t really been built with mobile in mind and eschewed the current industry trend of running scripting languages on the client and the server. It was a slow moving relic that didn’t really belong in 2016. I had only chosen Tapestry in the first place because it was quick to develop on and familiar and I didn’t think this project would ever see the light of day anyway. If there is one decision I could change in all of this it would be that one, of course hindsight is 20/20.

Up until this point Tapestry had a very active community of developers who were not only improving the framework but were producing plugins to extend it. I made heavy use of these plugins for many things including upload widgets, jQuery integration and server-push functionality that is leveraged heavily in drafting and grid drafting. This framework and it’s plugins were the foundation of Cube Tutor and without them being actively maintained, I just didn’t know whether I should continue with the mobile rewrite, for something that would probably need to be rewritten again in short order. I found myself trying to modernise something from a foundation that was never really modern in the first place and now wouldn’t even be maintained and current. The web development industry has moved quickly over the last ten years and without the support of something that would see Cube Tutor safely into the next ten, how could I continue with Tapestry? For a few months I was spinning. I was partly carrying on with the mobile work, partly prototyping other frameworks but mostly just lost and unsure what to do in the face of this problem.

In the middle of all of this, another problem struck. Not only was Cube Tutor built on a dying framework but it was also using a slightly outdated version of that framework. It was (and still is) running on the 5.3.X version of Tapestry due to it’s dependency on some of the previously mentioned plugins which aren’t compatible with with the latest 5.4.X release. Unfortunately the 5.3.X version of Tapestry is using an older version of Java, Java 7, another relic and my build server decided to stop supporting Java 7. This means that I couldn’t actually build the code base for release. In itself this problem is not insurmountable. I could change build servers, build the site locally or potentially look at modifying the Tapestry plugins myself to bring them in line with the 5.4 release of Tapestry and Java 8. However, coupled with everything else it felt like the final nail in the coffin of Cube Tutor on Tapestry.

I can’t exaggerate how much work it would be to go back to the beginning and rewrite Cube Tutor again on a new framework. I took the best part of two years working full time to get it to where it is now. With my other professional commitments and the prospect of starting a family soon I just simply couldn’t contemplate doing all of that work again, it wasn’t possible.

My biggest shame in all of this is the lack of transparency on the matter. I wish I’d had the courage to just say “look guys, here’s where I’m at” but I wasn’t used to that. I was used to solving problems and presenting nice completed work and improvements to the adoration of the community. Brad and Eric read out a PM conversation that I’d had with Brad last year where I talk of embarrassment and that’s the only justification I have. I don’t know what to do about this problem and have been struggling to see a way out of it for a long time now.

Where are we now?

Simply put I can’t currently update the site, other than the stuff I can change through the database like new cards, featured cubes and average cubes. My life is no longer full of the free time that I had the luxury of in 2014 and I simply cannot afford to go back to a position of Patreon-only income to support myself on Cube Tutor full time to rewrite the site and even if I could I now have other long term professional commitments to keep that have a demand on my time. All of that said, in order to keep Cube Tutor up I need to cover the running costs which are currently averaging around $700-750 a month. A combination of those three things has left me just treading water, spinning, not knowing what to do.

As for the money itself, I haven’t touched that in over a year. I have a separate account for all of Cube Tutor’s Patreon earnings and the extra money on top of what I have had to pay in costs and tax is for the most part just sitting there. Back when the Patreon started and I was still working on it actively I would withdraw the money regularly but I don’t feel like I have earnt it for a while now and so there is a small pot of money that has accumulated which could, at the very least cover the server costs for a little while if Patreon support dramatically reduced after this post as I expect it may.

So where does all of this leave Cube Tutor? Well the answer is still that I don’t know. Brad and Eric kept coming back to this point that I’d been mentioning “an upcoming blog post” for a long time without ever delivering on it and I guess I was putting it off until I could offer at least some sort of a light at the end of the tunnel but right now I just don’t know what that resolution is. All I want to do right now is be honest and open about the situation, something which I should have done a long time ago. It’s not fair on any of you guys and particularly those who are making decisions to support Cube Tutor based on my Patreon commitments.

The most important thing is that the information is finally out there and it’s a fundamental and somewhat cathartic step for me to take to write this. I’m treating this post as the first step back in the right direction towards working out a solution to the problem, in lieu of knowing what that solution actually is. Thank you again to Brad and Eric for being the catalyst. I’m sorry that things got so bad that you felt that you had to produce this podcast and I am sorry to everyone else for letting you down and not having the courage to write this off my own back a long time ago.

More than anything I love this site and this community and I am very proud of it but hand on heart I don’t know how I can find a way to continue with it in the face of the obstacles that I have in front of me. What’s my ideal solution? To find a way out of this where Cube Tutor remains the most awesome cube platform available on the web, something I can be proud of and that you guys will love once more.

I don’t really use Reddit a whole lot but as ever I am contactable via email: ben@cubetutor.com.

Ben