"My Story"It would be best to tell your own story:
how you came to love cryptos, why you found it hard tracking them,
what prompted you to implement this specific solution
So I was asked tell MY STORY (instead of posting a "buy my product"
only). This became real fun typing:
My nerdy software romance - an exciting, and mesmerizing plot, with surprising turn of events, no cliffhangers, but also a not too Happy End. More Nouvelle Vague than Hollywood, really *g*
...
SPREADSHEETS
I always loved the power of Excel spreadsheets - a few simple formulas chained after each other ... can calculate quite some complex questions. Great!
BITCOIN
So when I entered the bitcoin world, shortly after the last (ever?) rally in late 2013, I quickly used that talent for many things:
* Hardware profitability calculator sheets - turned out to be completely correct. But very wrong when BTC just never stopped falling in value (I actually sold my GPUs in the last possible second, early last summer).
* Trading logbooks - to understand better this mindbogglingly simplistic -but emotionally difficult- new task of TRADING. My highest early gain was more than 1000% sell over buy price - that's when I understood: Wow, here is how to make money (if I will ever get interested enough in money, that is). But man, I also lost sooooo much. And never again got over 10fold.
* Mining profitability sheets - in the end I had more or less replicated coinwarz, even with crossover-factors for all mining algorithms (Scrypt vs X11 vs ...).
* And sheets with all my 80+ wallets on 5 different computers, virtualboxes, and cloudmachines. "One day they will be valuable" - what a nonsense.
Bottomline: I have more than 10 different types of Excel sheets now, that I am using for cryptocurrencies. Very useful. And one of them evolved further:
GOOGLESHEETS
Then, for presenting a semi-scientific analysis (I could show that the richlist of a rather arbitrarily chosen coin ... follows a scale-free power law, in a large part), I chose GoogleSheets over Excel, mainly because I wanted to present it to our Facebook Group. At the end of that project, I had actually gotten some donations for it - but only very few. Cryptocurrencies are seemingly almost exclusively about TAKING from each other, very very seldom about GIVING, REWARDING, DONATING. Far from a better world, really, very far.
But I had learnt a big deal about GoogleSheets - they are not as advanced as Excel, but they live online - ideal for FB communication about data. And for most ideas so far I could at least write extensions in Javascript/GoogleAppsScript.
PORTFOLIO PIE CHART
In a small FB group, we were discussing the latest crypto technologies, and investment tipps. To simplify the communication, I came up with a pie chart visualisation of my portfolio. Showing only the relative amounts! That way, the very rich (approx 300times more money than me?) would look exactly like the very poor (me), and we could discuss strategies without envy or awkwardness (the otherwise unbridgeable divide between the ruthlessly rich and the heartbreakingly poor is a knockout argument against capitalism, actually - it's an antisocial system which we have to transcend eventually.).
Those pie charts really helped to understand each other better. One picture says it all. It didn't help me to loose money, though. (The tons of money that I lost in those months in that expert group, I still have not fully recovered *g*)
But the pie charts became the basis of the software system that is ready now.
LIVE UPDATE
To be able to calculate the total value of all my coins - yes, I was like Dagobert Duck playing coin rain in his vault. Only with a ridiculously smaller amount - ... I always wanted to have CURRENT PRICE DATA. Because most coins are loosing their value so quickly, that only with an automatic price update ... my spreadsheets would still make sense.
I found a superb library to parse JSON data, and started eating the API output of poloniex. Wow, this is so powerful. The internet has only really become useful when servers started to provide us with such structured data (and actually that only started to be relevant when ME began to parse that data :-) ). APIs are great, I want to work in that field!
Then I had to battle with countless problems, of course. A well known one: GoogleSheets are caching all their function results, so even if a price at an exchange changes dramatically, my sheet would show an old value. *Grmpf*. I found a workaround, a dummy parameter. Yiehah! (Skipping a lot of intermediate steps here).
SINGLE CELL UPDATES
In autumn, my sheet was not only ready and already very useful for myself - I had also put a lot of energy into it, to make it more easily accessible to other people (still, too idealistic I am). All cell types were coloured differently, external data different from locally calculated, and most importantly: "YOU ONLY EVER TOUCH THE ORANGE AND YELLOW CELLS" became a complete replacement of a 5 pages long manual.
I have been using it ever since, at least once a week - I wouldn't know how to trade without it actually. And two friends also used it. However, for some reason even that free/donationware version never really caught on. I don't understand humans well enough, I guess - or humans do not understand me well enough ;-) I probably need a good salesperson at my side! Send me your CV/successes.
BACKEND IDEA
With 15 coins the GoogleSheet became stuttering, some of the updates were either super slow, or failed completely. It was a combination of two things: The GoogleSheet server does not provide much CPU power, not much bandwidth or parallel webconnections - and poloniex was always sending data about all markets, even if I only wanted a single coin's price. Overload, laggy, not nice to use, really. And my future plans were to pull MORE data not less. No chance to continue with a GoogleSheet only.
Moreover, all the intelligence of my system had been completely embedded into the frontend, so there was no way of demanding money once the sheets were handed over (and as mentioned before, for me working on donation basis ... the average greedy cryptocoin person is not awakened enough, unfortunately.). So I had to come up with a serial code solution - if I wanted to afford to put more life time into it.
EARN MONEY
My hope is to sell it for very cheap to many many people, I prefer that to the other option of asking for a lot of money from a wealthy few. But I guess, at the beginning, I will have to take from the rich first? So please YOU WEALTHY ELITE (You can even donate anonymously, see the 3rd tab in the sheets): Please support this great programming project with 0.1% of what you own, or earn - that would help me to continue to improve the product, and offer it for a really low price. Be my patron please. If you want something in return, tell me - how could I help you?
The third option would actually be the fairest, but uncapitalistic: Take only a small fee from poor people, but take a 100 times higher price from richer people. Morally, it would make most sense, really. We have stopped to notice how much capitalism is preventing better or best ideas from at all getting into this (instead deteriorating) world ...
GOOD PRICE
If you have a good intuition for fair prices, please make a suggestion.
I need 5 prices: For 1day / 1week / 1month / 1quarter / 1year.
ASPECTS
* My rough idea was to ask a server by simply composing a URL which contains all the specifics of the question.
* I needed specific routines for each of the now 7 exchanges. One for getting, one for extracting from the JSON data.
* And I wanted to cache all API results, for a few second (No need to hammer the exchanges more often than every 30 seconds.).
* Cryptsy needed special treatment because it works with marketIDs instead of coin names.
* And Poloniex always delivers all market data, so it makes sense to cache it, for another coin.
* Django suggests a MVC (model, view, controller) approach, so I created my object models for Coins, and Markets.
* Plus I needed a customer database, for the authentication code system.
* And coinmarketcap can provide more than only price data - by the way a VERY useful extension: In a small table I can see if anything dramatic happened to any of my coins in the past hours, or days.
* A settings file distinguishes if the code is running on the dev system, or the production environment.
* There are maintenance and backup functions, and many tests to check the system.
* Finally, an elaborate form mechanism generates a new trial code when feeded with an email address.
Now that it is ready, it sounds so easy - but building all this organically, and testing it iteratively ... took months, part-time.
FRAMEWORK
I had to make a choice how to implement the server. I chose Django as the web framework, because Python is my favorite language. And Django has a very easy to use URL dispatcher, of which the manual page even mentions the excellent article
http://www.w3.org/Provider/Style/URI of the WWW mastermind TimBernersLee (I guess that citation convinced me most :-) )
A choice I have never regretted - Django is an amazing plattform to build the App intelligence without having to care too much about the lower levels of implementation. Most of the time that is :-).
WHOLE COLUMN UPDATES
Now with CMC + exchanges, I was pulling in external data into 50 cells in parallel. Even without having to parse JSON (as my server now provides primitive, but fast CSV), GoogleSheets was acheing. Hmmm. I redesigned, to now return whole columns. It's a pity really - because why update all those coins that are not critical right now? But the speeding up was dramatic when I started to return whole columns. A future upgrade would replace that by somehow updating only those cells that the cursor is hovering over, or clicking into!
BACKEND BLOCKING TO ASYNC
In December, I was ready to launch. All was working perfectly again, even after the migration to half frontend / half backend. It was working better than before - but honestly, only a little bit better. still, I proudly presented it to X, but in the first minutes he found my design problem: Not async but blocking. Ooops. For me that became not a few lines of code, but a whole conceptual upgrade of my programming abilities. Over decades, I had programmed tens of thousands of lines of code, but on single core processors, and without waiting for any data. Just waiting for number crunching (some of my science simulations were running days before they then returned one number, but with high accuracy).
Anyways, threaded / async programming had never been necessary for what I had built so far. Until now. I understood the principle, but had not a clue about how to implement it. So weeks of super-interesting learning started. By now, I have fully explored threading; it arrived in my repertoire late - but when needed. And it sped up the data access BIG time, most (whole column!) updates now need much less than a second. If not, the reason is usually poloniex ;-)
ASYNC NEEDS LOCKING
New abilities = new problems. The App server is providing my App to the WWW in a dozen independent worker processes. And ooops - suddenly there were some database objects doubled which should only ever exist once - of course, due to the -now async- concurrent access of several workers onto the same database. Such a problem is solved by an object called Lock - only the process that acquires the lock is getting access to the scarce resource.
In my webforum research about django database locking, postgreSQL had been suggested to be the much better choice than the default sqlite3, so I learnt how to install and configure postgreSQL on Linux and Windows, and migrated everything - only to find out, that new and different concurrency problems appeared. And that postgreSQL is up to 20 times slower than the primitive but lean sqlite3.
In the end, I created my own lock system, db-independent. And I hope sqlite3 simply keeps on scaling up with all the additional load to my server :-)
FINDING TESTERS
Of course, the above is only describing a tiny bit of what really happened from the very first idea "let's make a pie chart" to this fully working end user software. But perhaps you found it a bit interesting to read a nerd story? My honest hope is that I could: Seduce you into a free trial of my product. Send me your email address.
Because ... finding testers, buyers, even taking-it-for-free people seems to be a hundred times more difficult than any of the above challenges. And I don't understand why. I have helped lots of people on the internet, invested hundreds of hours into FB groups and BCT, donated tons of my time - but when it comes to me asking for 10 minutes of other people's time, I am given zero - that is actually a bit disappointing right now. Are most cryptocurrency people really as bad as their reputation? (*)
Please help me understand the phenomenon better, yes - but first please
* have at least tried out my product once,
* have pressed "update" a few times in it, and then
* have smiled at your thought of: "wow, this AltSheets AltFolio is a really useful software" ...
:-)
End-of-nerdstory,
about an altcoin trading helper software,
version v06, typed on 2015 March 4th & 5th & 6th.
Screenshots: http://altsheets.ddns.net/screenshots
Fanpage: https://www.facebook.com/altsheets
tipping: bitcoin:13YtgFiZvfeFSSqZv5qcUo2GHg8Cgjv3CJ
email: altsheets(plus)trial(at)gmail(dot)com---
(*) addendum "TRUST":
Very thankful for feedback: It was pointed out to me that TRUST could be an issue:
> The problem you have now is trust though,
> you are using "Alt Sheets Dev" as a user name,
> nobody wants to click anything by that,
> might be a trojan,
> might be someone shady trying to rip them off.
Of course, I hadn't though about that point yet - because I do trust myself, and fully. I will think about how to make this more transparent. However, right now I would actually not even know how to betray people with it. Why? It's your own copy of a GoogleSheet that you run. All the frontend code is accessible to you, you can check the code easily (MENU ... tools ... script editor). Please open it now, for a minute (I had even put some comments into that code.)
But I will take such doubts serious. Whoever has trust issues about this, and ideas: Please work together with me about it, so that I can find out how to make my customers feel safer. Thanks a 10^6 !
A new suggestion which solves it: ... is to simply use a fresh gmail account. The AltSheets AltFolio works with your own copy of my GoogleSheet, which lives in your own GoogleDrive - so if you want to be supercareful, just create a completely new googleaccount for that ... and even if I had malicious intentions, you should then be 100% safe.