Skip navigation

Some background:
I played poker pretty much full time from 2007-2009. I played about 3 million hands, mostly cash games, over 10,000 tournaments, and had done a great deal of analysis on my play. At the end of 2009, even though I was doing better than ever in poker, I felt like the game had become a job.

After doing research and speaking with a bunch of botters I knew it was possible to be fairly profitable. Already, many of the highest performing low-stakes SNG players on Sharkscope were bots. My long term goal was to build a self-improving botting system that could take on any poker game of any type.

Having spent such an immense amount of time analyzing the game and my play, I felt like utilizing all the information to write an AI would be the best use of that knowledge. I spent a good chunk of 2010 both writing an AI and setting up a botting system that would use that AI to play real money games online. I basically had my bots play until Poker Black Friday. In that time hundreds of thousands of SNGs and over 10 million hands were played.

So how does a bot work?
You must completely automate everything a human would do. Open the client, log in, pick the games using the filters and clicking through the results. Approve or close popups. Join games. Play games. Leave games. Close client.

Botting undetected:
Unfortunately most poker sites terms of service disallowed the use of bots with confiscation of funds and account closure as penalties for violation. The biggest and best sites to play on had these terms, so the first order of business is how to play and not get caught.

There were a number of mechanisms sites employed to enforce these terms including:
Resizing tables
Different images for the same cards (although inperceptible to humans)
Pop-up boxes with a human asking a simple question
Scanning running software
Tracking mouse clicks
Checks for non-human play schedules

Also, when pokertableratings started getting popular and allowing the purchasing of hand histories, players themselves were finding and reporting bots by auditing play stats.

After looking at what tools were currently available I ended up choosing a piece of open source software called OpenHoldem and forking it for my own purposes. OpenHoldem had a tool called a TableMap that allowed you to capture images and text from a poker table and translate them into variables that could be used for the logic. Since this software couldn’t be made visible to the poker clients being used, I ran poker clients in a headless virtual machine and output the display to a separate computer. Within the virtual machine I used software to place tables at specific resolutions and locations on the screen. A friend helped me write a program that turned the graphic windows from the virtual machine’s output into their own separate windows that OpenHoldem could lock to and use the appropriate table map for. Since only the graphic display is being output from the virtual machine, there isn’t even a remote desktop client such as VNC or Teamviewer running within.

So far this solves poker clients detecting running software and the resizing of tables. For images being slightly different, I just had to make very robust table map sets where they could account for a certain degree of error and utilize fuzzy fonts. For pop-ups and captchas I had alerts pop-up when there was a certain degree of deviation and I could manually take over for a minute to correct the issue. For the first few months I was always within range of a computer that would give an alert so I could respond to an anomaly. After an account had successfully solved a captcha the risk was lowered and I could feel safe going out to dinner or taking a nap without having to actively monitor play.

The same program that generated the graphic display windows for tables from the virtual machine would accept incoming clicks from OpenHoldem for when an action needed to be done and then would convey those clicks into the virtual machine. Since there were regions where buttons existed, using certain distribution rules, the location on the button could be randomly clicked so as to emulate human clicking behavior.

As far as bots not being caught for their measurably similar behavior, I gave them different personalities. Logic was slightly tweaked for more/less aggressive play in certain areas or overall. For example I could just slightly increase the aggression factor for a player and across every possible scenario they would take the slightly more aggressive approach. I could pick just a few stats such as call preflop raise and 3bet post-flop and tweak them by a percentage. In many cases, this made the bot play less optimally, but different enough to be unique. If a bot unexpectedly performed better in certain areas, I could figure out why and use that for future builds.

Running multiple accounts:
The most obvious advantage of a bot playing is that it can play endlessly at its most optimal settings. You couldn’t have a single account play forever because that would be impossible for a human to do and the most obvious red flag of botting. So creating multiple accounts across multiple sites was the best way to get the most of the bots and cover multiple stakes. I set up different VPNs in the same general area as where the account owner’s location claimed to be.

At first I never had any of the bots on the same site and stake play at the same time since I figured it would be sub-optimal to ever have them potentially play against each other. Later I realized that could be a flag and I started semi-randomizing when they would activate and play.

More Automation:
I set up a scheduling system where each bot had its own schedule (e.g. Mon-Thu 11:00AM-7PM with 15% variance). When a bot was set to play, its appropriate VPN was turned on, the virtual machine would boot, the clients would be opened and logged into using a separate script that was able to graphically interact with the virtual machine. Once everything was open a program like TableNinja could be used to register for games that were to pre-defined settings. For sites without TableNinja compatibility I had to write a set of scripts that would check the filters and scroll through to register for the appropriate games.

A forked version of the Table Map system with OpenHoldem was designed to assist with picking games. Going down the games in the lobby or opening up a game lobby the players could be scraped and checked against the database of players and hands to figure out how juicy the game was. I never had this actually stop a bot from joining a game, but I was collecting the data with the plan for better game selection in the future.

Stop losses was a pretty important feature that I built early on. I would have regular iterations of the logic system and sometimes there would be flaws that would make the bot unprofitable. It wasn’t always obvious in their play, but over hundreds of thousands of games the losses would prove otherwise. Essentially an account balance check was done at the beginning of play and then every time a new game was registered. If the balance was below the stop loss limit, it would stop registering for new games.

Actual AI:
So the high level logic was something along the lines of:
Evaluate current actions, current stack, potential effects of all available actions, pick the best one.

All knowledge on all the players would be taken into consideration from previous games by utilizing a database of hand histories. In a particular decision the main variables that influenced the decision were current bets by which players, stack sizes of all remaining players to act, the odds of all those players acting in which ways with what kinds of hands, ICM values, position.

For a simple example, if it was folded to on the button it would first evaluate the EV or raising. It first checked the call preflop raise rates of the blinds and overcall rate of the BB. That stat would be determined by any knowledge of those players from those positions at the current blinds. That stat gives a pretty good idea of what kinds of hands those would be, and then it can be calculated with the current hand and ICM equity values what the EV was. Next the EV of limping and folding would be evaluated in a similar fashion and the highest EV score would determine the action.

I build formulas to quickly evaluate all the major stats that would be used for measurement: PFR, CPR, 3Bet, 4Bet, CBet, etc. I would do some statistical analysis to build a dataset that I thought accurately reflected the stat using the variables I wanted. Then I would use symbolic regression with those variables to generate a reasonable formula. This was time consuming and required a lot of computing power. An example formula for cpfr looked like this: f(nplayersdealt,stackbbs,temppos) = (temppos)/(log((temppos)*((temppos)*(((stackbbs) + ((11.601799964904785)*((nplayersdealt)/((stackbbs) + (sin((((-5.0985198020935059)*(temppos)) – (nplayersdealt))/(nplayersdealt))))))) + (((mod((nplayersdealt) + (((nplayersdealt) + ((5.1521501541137695)*(temppos)))/(nplayersdealt)), -1.5626200437545776)) – (mod(nplayersdealt, log(nplayersdealt)))) – (nplayersdealt)))))). It took number of players in the hand, current stack size relative to big blind, and the current position relative to the dealer.

The formulas I was describing above were used to figure out the baseline adjustments of a particular stat based on the most important general knowledge factors. During actual gameplay there was another set of functions that ran in order to weight the stats based on the players’ known data. This was grabbed from my shared PostgreSQL database across the bots per poker room. There was also a level of confidence associated with each stat based on how much data I had for it for that particular player.

A major issue with this approach was dealing with heteroscedasticity with the initial analysis. I had way more data on how people play AA than anything else simply because it shows down more often since players are more likely to play it. It becomes increasingly difficult to find out how players play a hand like 22 in rare scenarios, even with millions of hands to analyze.

After awhile of accumulating data I felt that playing against an unknown was possibly the place where I felt most optimized. Not in the sense that I could play better against them than a known player, but relatively to someone else approaching an unknown. Using data I could figure out the distribution of common play tactics of an unknown. One tricky part was you couldn’t simply average the distributions by their likelihood of occurring. Playing sub-optimally against one type of strategy could have a far more negative impact than playing sub-optimally against another type. So in some instances it’s better to assume the player is going to be aggressive even if it’s actually more common for the player to be passive just because it’s less harmful against the passive players than it is when they’re aggressive.

Improvements were surprisingly slow and undoubtedly where my system needed the most work. After a bot was consistently beating a certain game, moving up in stakes usually didn’t go well. It would take quite some time of break even or even negative play before adjustment pushed it into the positive zone. I’d say it took well over half a million hands at each stake to get it where I wanted it to be. Utilizing a great deal of the incoming revenue as a research budget for higher stakes made it so there wasn’t very much profit, but kept progress up.

It was a fun project. My original long term goal was to build a self-improving NL cash game AI and I did spend quite some time building out logic systems for cash games. I figured building SNG bots would be much easier to make profitable, and then once they were running I’d switch over to cash games. I had many of my friends who were profitable at all different stakes and games send me collectively millions of hands to help me out. In exchange I could analyze their respective games and show them very specific instances where they could improve. Having the hole cards of many different profitable players helped immensely with finding core patterns that link to profitability.

To model some of the decision making I put all the players’ hand histories into separate databases so that only the knowledge that the player had on the opponents was available. A model I would put together on something as simple as preflop actions from a particular position I could compare with another player’s hand histories to see if they would take the same approach using the knowledge they uniquely had on their opponents.

This project helped me learn a lot about programming, statistics, and higher level mathematics. Poker AI specifically isn’t something I would ever get into again. For the amount of work that is required there are similar kinds of projects that can yield much higher gains. For example an automated financial trading system. I also can’t recommend that anyone else to get into poker botting beyond a hobbyist activity. The number of specialized areas that I needed to branch into in order to piece everything together was much greater than anticipated and often required me to reach out to those more proficient in those areas. Honestly, I think it’s something that a strong team should be assembled to pursue and then financially it’s likely not worth it compared to other ventures.

I wrote this up because some friends were interested in lucid dreaming and I figured I could share what I’ve learned.

Training to lucid dream is a lot of work, at least it was for me, but I think it’s worth it. Dreaming is something everyone does almost daily for their entire lives and it unlocks a vast new aspect to your life.

I got into it more than 10 years ago, but I’d say it took a solid three years before I was able to do so consistently. Even now, I think there’s still plenty of room for me to improve. When I first started learning I felt there were very few resources on the subject and I really had to experiment with a lot of strategies on my own to improve.

Step 1: Remembering your dreams
This is the starting point. If you don’t remember your dreams, you won’t even know if you’ve had lucid dreams or not. The best way I know of to start remembering your dreams is to write them down when you wake up. This is something extra to do in your daily routine and when you remember more and more details of your dreams it will take longer to do, so there is an immediate commitment involved.

My tip here is when you wake up, don’t move a single muscle. Just recall your dreams the best you can and then sit up and write them down. You’ll find that your ability to remember dreams more vividly increases quickly and soon you’ll be able to remember more of your dreams. If you’re sleeping 6-8 hours a night you’re probably have 3-4 dreams. There are also non-REM dreams which are more auditory than visual but seem more difficult to remember unless you’re waking up from them.

If for whatever reason you just can’t seem to remember your dreams, an effective yet unpleasant technique is to be waken up when you’re in the middle of REM sleep. You can have someone else do this, wear an EEG that’s programmed to trigger your alarm during REM, or just randomly have an alarm go off about an hour after you’ve fallen asleep and hope you’re in REM.

Step 2: Realize you’re dreaming
This was the most difficult step for me and I utilized a number of tricks I had read about online to help with it. I think this took at least a year before I had this step working consistently, but over that time period it became more and more frequent.

I’ve since read that you can use external stimuli when you’re in REM as your trigger. For example playing a song or a recording of your voice when the EEG you’re wearing knows you’ve gone into REM. I have never used this, but I can certainly see it working since external stimuli definitely affect your dreams.

I set a number of triggers while I was awake to be used while I was sleeping. I wore a watch and looked at it very frequently throughout the day. Every time I did, I would pause for a moment and think, “Am I dreaming?” When taking a similar action in a dream, I would realize that I am in fact dreaming and would go lucid. I also would reread my dream log on occasion and try to find similar illogical patterns that occurred. Recognizing nonsense would trigger a lucid dream for me as well. There are illogical things that help give away you’re in a dream pretty consistently such as looking at text, looking away, and back again with it being different. Same thing with clocks, textures, signs, etc.

Something else that works pretty well for me is if I’m sleep deprived I will immediately go into REM sleep, something called REM rebound. It’s pretty easy for me to go right into a lucid dream if I make that my intent while falling asleep.

Step 3: Staying asleep
Every time I realized I was dreaming I would wake up right away. This is pretty awful, especially if it’s in the middle of the night. One technique I remember reading about that worked pretty well was to start spinning. Just hold out your arms and start spinning around. The other thing that works for me is just freezing everything. I also have a particular place that I go to often when I first go lucid, but I’m not sure when I started using that. Something else that is pretty effective if you have some control of your environment is to generate a rope that’s attached to the ground and just grab onto it. Someone once told me they put their hand in their pocket and grab onto a rope in there that is anchored to the world which is the same concept. Another technique I’ve read about is to rub your hands together, but I haven’t tried it.

My tip on this step is just keep things simple. Don’t start trying to build worlds, summon creatures, and fly around quite yet. Anything that was exhilirating and would increase my heartrate substantially increased the difficulty of staying asleep. For example trying to have sex is incredibly difficult to stay asleep through.

I would say even after I became pretty good at staying asleep, the actual lucid dreams don’t seem to last very long. On average it feels like I’m lucid for approximately 5 minutes. Eventually it just kind of fades out while you shift out of REM and then when your next dream starts you’re back to square one. I’m sure the actual time into the dream that you go lucid has a large impact on the time you have. Something that helps make dreams seem to last for many times longer is letting yourself fall back into the dream. Go lucid, set up your scenario, forget that you’re dreaming, and then continue on. Sometime I will come into and out of lucidity a few times in the same dream when I feel the need to change the direction of events or redo something.

Step 4: Experiment
Fly, break physics, be in multiple places at once, try out synesthesia, go talk to yourself (this one is weird), try out some superpowers. Switch out body parts or body entirely. Build a house, city, world, solar system. Rewind time and do something different the second time. Visit places and events from earlier in your life. Make up a completely new life and set of places. Don’t exist at all and just watch time unfold.

One of the most difficult barriers to get over with experimentation in a dream is the logic bounds you have on how the universe works. For example, breaking physics was very difficult for me. If I throw a ball or launch myself at high speed, just suddenly stopping mid-air is pretty difficult to do because your brain wants to take physics into account. Anything that would cause you physical pain in reality such as shooting yourself in the foot is extremely difficult to deal with in a dream and takes some effort to get over. If you really want to break the limits of what you can do in your dreams I think you can systematically break down most of these mental constraints.

Early on I was so excited about lucid dreaming that I would go to sleep with a plan on what I wanted to do. One of my early projects was to build and visit a memory castle. A place I could walk around in and place items in different rooms. Awake I have a memory of this place I visited and can envision the different rooms housing different items that are associated with things I want to remember. Later on I more often went to sleep without any plans and discovered that my sleeping self has different and more simplistic desires.

There are a couple examples of things I’ve done while lucid dreaming that my awake self would consider a waste of a dream. I spent one dream stacking tuna cans higher and higher and needing to fly to continue stacking them. I tried reading a book out loud which was ridiculously difficult. I messed up pronunciations and would stutter, also many of the words I read weren’t real. I got half way down a page of a regular paperback-sized book before I woke up.

Just because you’re lucid dreaming doesn’t necessarily mean you have full control or complete understanding of what’s going on. Your subconscious is still going to render the majority of your surrounding environment including people and places. For better or for worse people may still say or do things that surprise you. You may wind up in places or meet someone you weren’t expecting to. There’s a city I’ve been building out for many years that I can go to if I ever want to remove myself from a scenario. I think it’s a good idea to have a safe and familiar place that you can always use as home base.

I’ve been a fan of Bitcoin since they were worth $0.06 and I still believe we’re only scratching the surface of cryptocurrencies’ potential value. I’ve been seeing a lot of forks of Bitcoin and alternative digital currencies pop up. One of those in particular that seemed quite novel at first and caught my eye was Ripple. It’s this awesome idea created by Ryan Fugger that allows people to create a network of trust with each other to issue credit. The project popped up somewhere around 2004. I know of a number of startups working off of a similar concept. So, I sat down one day to learn what Ripple and XRP were all about.

I’m smart and also being tech-savvy I didn’t think it would take long for me to wrap my head around. Well, after a few hours of research I found myself more confused than I had been before I started. Jaron wrote up a blog post on Coinsetter which I read through and then after a lengthy conversation with him I still felt like I was missing some kind of vital piece that was preventing my long-awaited epiphany.

To be completely honest, I was fairly anti-Ripple by this point. After spending hours on the Ripple site and reading through everything and coming away with more questions than answers I turned to Google. It seemed like many were like me looking for answers and not quite grasping it all. Many were angry and felt deceived because of what seems like the very poor way (on Ripple and OpenCoin Inc’s part) it was presented.

It’s easy to be skeptical of the concept, it’s even easier to get angry with the way it’s portrayed. Coming from the Bitcoin world where privacy and transparency of operation is highly valued and at first thinking Ripple has the same kind of attitude was the first issue I had to overcome. The first thing I look for, is this open source? According to the FAQ no one owns Ripple and it is open source. Great! Is this decentralized? It is? Fantastic!

Actually, as it turns out, Ripple is neither open sourced or decentralized. There are plans for it to be open sourced and decentralized, but obviously until the source code is out, there will always be a looming sense of anxiety on that part. There’s immediately a bad taste in your mouth that just gets worse the further you dig.

There could be legitimate reasons for keeping it closed source. If there are already a wide number of users transacting real-money currencies then perhaps a number of security audits and patches for potential exploits are necessary before it’s safe enough to open to the world.

If Ripple were a for-profit piece of software for OpenCoin, Inc to provide financial institutions a better way to make transactions with each other, I don’t see why Ripple would need to be open sourced or decentralized at all. Mostly though it seems like their business would be at risk if Ripple were open sourced and it could be forked to function in a more idealistic manner. Perhaps once OpenCoin, Inc feels there’s enough widespread use to diminish that risk they can open source it without fear. Although it still brings back the question of why bothering to open source it or announce it will be open sourced at all.

The next big hurdle for me was XRP. It’s another digital currency, native to Ripple and necessary for transactions. There was a finite amount of 100 billion of them created and a transaction requires 0.00001 XRP although it actually is divisible to the millionth. Each transaction destroys the XRP that was used to conduct it. That doesn’t seem so bad, with a single XRP you could do 100,000 transactions. You need 50 XRP in order to start using a Ripple wallet though; I don’t know why this is, I assume as some kind of mechanism to stop people from creating an egregious quantity of accounts.

So where does one get XRP? Well you can buy some on an exchange for whatever price they’re selling for. Also OpenCoin, Inc. gives a whole bunch away periodically. What’s OpenCoin, Inc? They’re a for-profit company that was given 80 billion of the 100 billion XRP, of which they’ve committed to give away 50 billion XRP although over what period of time or through which channels is unknown. It could be over the next century if that’s what it takes to maintain the value. They are NOT, open source digital cash, although they’re wrongly linked and credited in a number of sources. Where are the other 20 billion XRP? The original developers of Ripple kept them.

I certainly don’t have a problem with companies building products of value and making a lot of money off of them. It does seem like approaching Ripple and XRP with any thoughts of Bitcoin is a bad idea because it’s a different beast. Unfortunately I did go in thinking about Bitcoin and XRP comes off as far inferior. This may not be OpenCoin, Inc’s fault since it’s not as though they’re hiding the fact they’re a company with full intent to make money. I do feel that the way their product, Ripple, is presented is completely disingenuous and requires far too much digging to figure out the exact relationship.

Anyway, back to XRP. If all they were used for was to facilitate transactions then the common analogy of postage stamps makes perfect sense. They are being traded for reasons other than that particular use and treated more like an altcoin (alternative cryptocurrency) of which it has all the necessary properties to be considered as. Also, it is the only currency that can truly be traded internally through Ripple. Everything else makes use of debt or IOUs through gateways. XRP having some kind of value and being able to trade with it internally as an intermediary to other currencies is certainly convenient. You can completely neglect this fact and use XRP for the purpose of building trust lines (12XRP) and making transactions by which the postage stamp analogy fits.

Another problem I had is talk about Ripple’s market cap. The market cap is not $43ojfgjdr0436 gazillion dollars or even close to that of Bitcoin. The vast, vast majority of XRP is owned by the original developers and OpenCoin, Inc. Of what is supposed to be given away, very little has been. It would be crazy to assume the market cap can be based on the total quantity of XRP when if even a fraction of what hasn’t been touched yet were to hit the open market the artificially high value would crash.

Needless to say one place I disagree with Jaron is his bullishness on XRP. Since OpenCoin, Inc. has a great deal of control over the value based on how quickly or slowly they release XRP into circulation you’re probably alright if you can figure out their best interests and predict their actions. It’s currently (and for the entire foreseeable future) at the mercy of their manipulation and does not provide a comforting feeling if that’s a currency you’re holding. I hold almost no value in XRP as an altcoin and can’t see a reason why I would use it beyond covering transactions and trust lines or using it as an intermediary between other currencies for the minimum amount of time necessary to complete a transaction.

The concept that may have taken the longest for me to wrap my head around, which I place much of the blame on the way Ripple is presented, is how it actually functions. After you have created a Ripple wallet at a Ripple client and have funded your account with some initial XRP you can start trusting other entities that also have Ripple wallets. In many cases you would trust a gateway the same way you may trust your bank or a Paypal account. For the ease of explanation let’s pretend your bank is a Ripple gateway.

You deposit $1000 into your bank and then you tell Ripple that you trust the bank for at least $1000. At your bank you would withdraw funds into Ripple and now you have $1000 on Ripple. So what has actually happened here? The $1000 is still actually being held by the bank, the bank owes you $1000 just as it did before, but now explicitly through Ripple. Let’s say you want to purchase some waffles and syrup with your money and need $400 to do so. Let’s also say the merchant holding the waffles and syrup uses a bank that is a Ripple gateway and that bank trusts the bank you use. You could transfer to the merchant $400 through Ripple which means that your bank owes you only $600 now, it owes the merchant’s bank $400 and the merchant’s bank owes the merchant $400. It would be expected that the banks settle the balance with each other periodically.

You can also trust friends and issue them credit lines. There are some benefits of trust networks between friends such as being able to make transactions without the direct knowledge of a gateway. Of course trust is a serious thing, and you shouldn’t be loaning people out more than what you trust them to pay back. Also the capability of moving money through your friends as opposed to through exchanges or gateways is a valuable feature when thinking about the rise of cryptocurrencies and heightened value on privacy.

So that doesn’t look too much different than how things work now with banks, checking, credit cards, etcetera. If all the major banks and financial institutions trusted each other it would be a very convenient and inexpensive way to transact. Imagine being able to bypass credit card payment gateways and deal directly with the providers. So, what are the issues a Ripple user faces?

There are a number of potential opportunities of exploitation or problems using the trust of others in a system that operates on debt. For example let’s say there’s a gateway operating that has accumulated a lot of user trust and accepts physical gold for Ripple gold. Other gateways trust this gateway and are willing to issue IOUs to their users if this gateway will issue them an IOU of gold they hold when their users make a transaction. What happens if the gateway decides to steal all the physical gold, or is robbed, or has been loaning out their gold and their customers default? The gateway would default on their IOUs to their Ripple users and to the other gateways. Gateways may be able to avoid this by not trusting each other and having intermediary parties with balances on both gateways handle the shift of IOUs, although this could leave those users open to theft from intentionally malicious users. So gateways may not trust each other or at least be willing to cover the IOUs that are defaulted on. It doesn’t help the direct users of the defaulted gateway or anyone that issued it trust.

Another issue I had trouble figuring out at first was getting your fiat or assets out of Ripple. With the way it’s designed it doesn’t seem like money is really ever supposed to leave Ripple. In a future where there are gateways for everything and everyone can transact using Ripple, then I don’t see that being a problem. In the meantime I would think you can just go to any of your trusted gateways and withdraw in a method they support the amount you’re good for through their trust. Even if they don’t owe you the full amount there may be other gateways that they trust and will issue them an IOU for the amount you’re withdrawing. It’s easy to predict situations where a lot of users may think they have more funds available to them than they actually do if they have IOUs and have issued lines of credit. If you have a dozen friends that collectively owe you $5000, it doesn’t mean your gateways trusts any of those people and will issue you IOUs or a withdrawal.

On the merchants page of Ripple’s site it compares to transactional fees of credit cards and Paypal which to me seem like deceiving comparisons. The transactional fees of Ripple may be negligible, but the fees on Ripple gateways which are inevitably what you’ll have to use and trust to properly make use of this system will undoubtedly charge fees that I can’t imagine would be much different than they are now. This would be a valid comparison if you could conduct all your transactions through Ripple.

From a software perspective, I’m not too keen on the way things are right now. Just because Ripple is supposed to act and function a certain way doesn’t mean it actually will. One great thing about open source software is being able to go through the code yourself and verify that it does in fact do what it’s supposed to. When going through Bitcoin one can appreciate the genius in the design and also see some of the places where it could use improvement. With Ripple all that’s available right now is the source of the Ripple client and some old work from Ryan Fugger.

I don’t feel negative about Ripple as I originally did, but there are quite a few misgivings I have about the project still. Most of these probably still root in how much different Ripple actually ended up being from first glance. My negative feelings are now placed on OpenCoin, Inc and XRP. The benefits Bitcoin gains from being open source and decentralized such as security, highly DDoS resistant, and less vulnerable to a 51% network attack are still possible for Ripple in the future and would make it far more appealing.

Most money is just quantities of debt owed by who to whom in databases these days. As for cryptocurrencies, I still feel much safer holding them myself than leaving them with a provider liable to being hacked. Until there are gateways that I trust and enough of them to increase convenience I don’t believe I’ll be using Ripple. OpenCoin, Inc does have venture backing from prestigious investors and overall it’s still a good idea so it still has a lot of potential to become a widely used system. The way XRP works and the way it’s distributed seems like the largest flaw. It will be extremely difficult to remove the negative association and it diverts the spotlight from the actual Ripple system and the great benefits it can bring.

A project that looks promising and could be used for the same purposes called Open Transactions is quickly rising up. It will be able to perform a lot of the same underlying features of Ripple without the use of XRP and it’s already open source. It’s probably not as far along as Ripple is, but I can see it quickly catching up and being heavily adopted once some decent clients are developed.

Of the progression of emotions towards understanding Ripple that Jaron referenced, I’m halfway through number 3; Acceptance. Ripple solves important problems, but I won’t know if it’s well designed until I see the source or a more formal specification on the protocol. The software idealist within me hopes that competition will drive forward better systems and open sourced will allow for superior products to be created. If I were to place a bet on the future my BTC would not be on Ripple.


I don’t have any cool graphs yet. I have been working a lot though. Completely different routine than normal for me. Instead of super long sessions with no breaks where I grind it out I’ve actually been taking a ton of breaks. It’s easy to get distracted here.

I’m staying on pace to meet the requirements I set down for myself for the 10th. I may actually be even a little ahead schedule, which is good because I know I’m going to want to crash badly one of these days. I’ve been averaging about 4.5 hours of sleep per 24 hours for the last 6 days. I’ll take any where from 90 minutes to 4 hours of sleep and get working again. My GitHub’s commits by time of day looks completely random.

Besides that my diet this past week has been: Oreos, Funyuns, Goldfish, Cheez-Its, Teddy Grahams-chocolate, Caffeinated Mio, Redbull, Kit Kats, and random nootropics. Also whatever Chase makes ^_^
Are there any slightly healthier foods that meet these requirements?
Don’t need to be refrigerated
Require no preparation or effort to eat
Are meant to be eaten in large quantities
Preferably won’t get my fingers messy since I’ll be at a keyboard

Almost forgot about this. In all the years, for all the blogs I’ve attempted, this is now the one I’ve gotten the furthest with.

Alright, I think I need to get some charts together for all these things I’m trying to track like sleep, work, etc. Might be easier to have something visual.

Yesterday I leveled up in programming. It’s basically one of those events where you just learned something new or understand a concept completely for the first time and now you’re just better. I had a similar experience when cooking something a couple weeks ago where I leveled up in cooking.

So, the goal. The plan is to go to Newport on the 10th. There are a number of things I need to get done before then in order for me to attend this little vacation. I’ve got 6 days left counting today. I’ve already been up all night working, so we’ll see how much longer I last today. I’m pretty sure I can get everything done, and if I don’t the feeling will be so much worse because I’ve given up on going to the lake twice already to work instead. I’ll have missed not only going to the lake those times but being able to go to Newport. It’s been crunch time for awhile, but now I’m really feeling the pressure with a deadline creeping up. The reward though should be enough motivation for me to pump through and get it done.

This is a pretty accurate depiction of the way I’ve thought the future will be like for awhile. It seems super creepy when seeing it in a video though.

Anyway, I’m on a roll. I worked today to 3:00AM, slept for 2 hours, worked about 12 hours after that. So 15 hours in which isn’t bad at all. I took another 90 minute sleep session and woke up at 10:00PM. I should be good to go til to 2:00PM at which point I’ll already have 14 hours in. I have a meeting at 2:30 so I won’t be able to go to bed, and then when I got home I’ll send off emails and then crash for probably a full sleep session. So the actual goal is to not deviate from that plan. weeeeeeee

I ended up opening a red bull at 6:00AM. I gave up and went to bed around 1:00PM. I felt as though I could probably stay up for the rest of the day without issue, but I wasn’t really going to be able to do any effective work until I got another wind. Figured I’d cut my losses and just go to bed. I got back up right before 6:00PM and that left enough hours in the day where I could still get the goal amount of hours I had originally set. People came over and I only ended up getting a couple more hours of actual work done. Good news is I get another stab at it for today.

It is now Friday a little after 1:00AM. A typical Friday night means a bunch of people coming over and hanging out which results in my productivity decreasing. So rather than let myself fall into a situation where I have a tough decision or need to execute willpower in order to continue being productive I have decided to work all day from now. This preemptively handles the situation.

I’m setting myself a goal to work for the next 16-18 hours. I’ve just slept for 90 minutes (42 minutes deep; 14 minutes REM) so I should be good to go. Goldfish and Ritz Bitz should hold me over until about noon when I’ll order some delivery. I’ll see if I can do it without caffeine, although I doubt it. Around 7:00PM my decision then becomes do I want to go to sleep or do I want to hang out instead of the a choice between working and hanging out.

I want to do some self-motivators to keep myself going for long sessions and maintain focus.

Set hour amount session goals.
At first it’ll be good just to have the structure and want to hit those goals. Once I’m hitting them no problem I’ll go back to just working until my productivity falls. I can post my goals here, maybe use some kind of check-in system to allow any followers to stay aware of how aligned I’m staying. Once my goals go public, faltering means embarrassment.

Caffeine and nootropics.
I have a cycle I go through with caffeine. Once I get to the point where I’m at 3 Red bulls or cups of coffee a day I quit for at least a few days so it can regain some potency.

Wear an EEG.
I can have the volume of my music directly related to how much I’m concentrating. That way I have real time feedback of my concentration levels and can keep myself focused.

Have my commit logs with timestamps published here.

Have degrading messages post on my twitter/facebook when I don’t meet goals I set out for myself. Also post the amount of active minutes I spent on twitter + facebook that day to show everyone how much extra time I could have put towards being productive and getting closer to those goals.