Gmail, Google maps, Market: move to SD card

Dear Google,

please make it possible to use move to SD card for Gmail, Maps, and Market.

Kind regards,

a sad HTC Desire user who is always low on phone memory, even with not many apps installed.

Posted in smartphone | Tagged , , , , , , , , | 2 Comments

Using virt-manager on MacOSX with Dvorak keyboard layout

I have a hosted Ubuntu machine that runs KVM for virtualisation. I just created a new VM, and wanted to use virt-manager to get a graphical VNC connection to the machine.

So, I did the following on my macbook with Dvorak keyboard layout:

ssh -X kvm-host.mydomain.nl
sudo virt-manager -c qemu:///system

I double-clicked the new VM, and got the graphical screen with the login prompt. However, when I started typing my username, I quickly noticed that the letters that appeared in no way corresponded to the keyboard layout I use, Dvorak. It wasn’t even a Dvorak/Qwerty juxtaposition, but was utterly unusable. For example, the 8 key produced an Enter character.

Google helped me find a blog post which described the same issue. So I ran virsh edit my-vm-name and added keymap=’en-us’ to the <graphics> tag, restarted my vm, and restarted libvirt on the host. That improved things already – the 8 key produced an 8. But now I was stuck with Dvorak vs Qwerty problems.

Some more searching found me a blog post which contains a Dvorak keymap file for qemu. I put that in /usr/share/qemu/keymaps/en-dv and changed en-us to en-dv in the <graphics> tag.

I think it’s great that people write down problems like these and the solutions they found! Makes it much easier for others to solve similar problems. Hopefully, one day, someone will find this blog post and fix their problem because of it 🙂

Posted in sysadmin | Tagged , , , , , , , , | 1 Comment

Deleting spam with postfix and SpamAssassin

For years, I’ve been using mutt as my main mail program. I love being able to use mutt in screen and thereby having access to my email from anywhere, with just ssh or PuTTY. Back when I first created this setup, all opensource webmail software then available was still very poor in functionality, which I why I didn’t use webmail for the “access from anywhere” part.

I have a hosted machine, and the MX records of my domains point to it. My mail is being handled by postfix, and spamfiltered by SpamAssassin. Procmail helps me sort mail into different folders upon arrival.

This setup has some disadvantages. Some spam leaks through, which is annoying – since I only receive a few emails every day, a relatively large portion of the mail I see is spam. Also, turning off or reinstalling my hosted machine means emails don’t arrive.

I recently got a smartphone, and wanted to be able to use it to read my email. I briefly considered installing dovecot on my hosted machine to provide IMAP, but decided to try Google Apps instead.

I followed the Google Apps setup document, and set the MX records of one of my domains to Google’s mailservers. That worked fine. Since the free version of Google Apps doesn’t support more than one domain, I then configured postfix on my hosted machine to forward mail sent to my other domains to gmail.

This turned out to have one big disadvantage: with that setup, all spam received by my hosted machine is sent to Google anyway. Sure, SpamAssassin puts spam score headers in the message, but the message is sent to Google whether it’s spam or not. This results in my hosted machine sending 90% spam and 10% real mail to Google.

I was afraid that Google might start seeing my hosted machine’s IP address as evil because of the relatively large amounts of spam, so I looked for a way to prevent most or all of the spam from being forwarded to Google.

This is what I found: http://www.akadia.com/services/postfix_spamassassin.html

See the section called “Create your own Content Filter“. This was exactly what I was looking for.

Steps 1, 3, 4 and 5 worked fine on my Ubuntu server, although there is a typo in the first step (“filer” instead of “filter”). Oh, and I decided to use /var/spamchk as sideline dir, so I created that dir and chowned it to the filter user. I changed the script in step 2 to the following:

#!/bin/sh
# -----------------------------------------------------------------
# File:        spamchk
#
# Purpose:     SPAMASSASIN shell-based filter
#
# Location:    /usr/local/bin
#
# Usage:       Call this script from master.cf (Postfix)
#
# Certified:   Ubuntu Linux, Spamassassin 3.3.x, Postfix 2.7.x
# -----------------------------------------------------------------
# Variables
SENDMAIL="/usr/sbin/sendmail -i"
EGREP=/bin/egrep
TMPFILE=/tmp/spamchk.$$
SIDELINE_DIR=/var/spamchk
# Number of *'s in X-Spam-level header needed to sideline message:
# (Eg. Score of 5.5 = "*****" )
SPAMLIMIT=10
# Clean up when done or when aborting.
trap "rm -f $TMPFILE" 0 1 2 3 15
# Pipe message to spamc and store in $TMPFILE
cat | /usr/bin/spamc -u filter | sed 's/^\.$/../' > $TMPFILE
# Are there more than $SPAMLIMIT stars in X-Spam-Level header?
if $EGREP -q "^X-Spam-Level: \*{$SPAMLIMIT,}" < $TMPFILE
then
  # Option 1: Move high scoring messages to sideline dir so
  # a human can look at them later:
  mv $TMPFILE $SIDELINE_DIR/`date +%Y-%m-%d_%R`-$$
  # Option 2: Divert to an alternate e-mail address:
  # $SENDMAIL xyz@xxxx.xx < $TMPFILE
  # Option 3: Delete the message
  # rm -f $TMPFILE
else
$SENDMAIL "$@" < $TMPFILE
fi
# Postfix returns the exit status of the Postfix sendmail command.
exit $?

I followed these steps and got what I wanted: 90% of the spam my mailserver receives has a score of 10+, and that’s now stored on my server instead of forwarded to Google!

Posted in sysadmin | Tagged , , , , , , | Leave a comment

Recipe: guild master’s pie

And now for something completely different.

I have played a lot of World of Warcraft over the past years. During The Burning Crusade, I was Guild Master of a raiding guild. We had a raiding schedule of 4 evenings per week, where we did 25-person events from 20:00 until midnight.

Being the Guild Master, there was often much to do before each raid started. This meant that I needed to make a fast meal between arriving home from work and 20:00. I don’t like to order food, and I actually like to cook, so I needed to come up with a few meals that require little preparation time.

This is one such recipe. It takes about 10-15 minutes of actual work to prepare (excluding the waiting time for defrosting), plus 30-35 minutes in the oven.

Ingredients (for 2-4 people)

  • 450 grams of spinach (frozen)
  • 2-3 eggs
  • 200 grams of mild grated cheese
  • 100-150 grams of diced bacon
  • 1 pack of puff pastry (400 – 500 grams)
  • 3 cloves of garlic
  • Herbs: oregano, basil, some mix of italian herbs
  • Optional: sesame seeds (to sprinkle on top)

Preparation

1. Defrost the puff pastry and the spinach.

2. Pre-heat the oven to 225 degrees.

3. Bake the bacon lightly. It should not become too crunchy.

4. Finely chop or press the garlic.

5. Stir in the spinach, grated cheese, eggs, and bacon. Add the herbs and garlic. Stir some more.

6. Grease up the oven dish and line it with puff pastry. Keep enough puff pastry to cover the top later on.

7. Put the mixture of spinach and other ingredients in the oven dish.

8. Cover the top of the mixture with puff pastry.

9. Optionally, smear the top with a tiny bit of water or milk, and sprinkle the sesame seeds on top.

10. Oven-cook for 30-35 minutes.

11. When the inside of the dish is solid and no longer liquid, the guild master spinach pie is ready for consumption.

12. Profit!

Posted in recipes | Tagged , , , , , , | Leave a comment

Irssi tricks: ignores and hilights

I like the IRC client irssi a lot. I’ve been using it for many years now, and have learned many tricks about it. In these irssi blog entries, I’ll be sharing some tricks with you.

The /ignore command is quite powerful and can be used to remove lots of unwanted lines. If there is someone you don’t want to see in your channel, you can use it like this:

/ignore *!username@host.example.com ALL

to ignore all messages from this person, on channels and in private, as well as things like joins and topic changes.

But it gets better. If other people are talking to this person in the channel, using the standard “Nickname: text here” structure, you can ignore this as well:

/ignore -replies *!username@host.example.com ALL

Some channels have people who use expressions like “lol” and “rofl” a lot, including many variations like “lawl” and “rulf”. I don’t like it when such expressions appear as the only word on a line, and this ignore helps me avoid seeing them:

/ignore -regexp -pattern ^l[aoeui]+w?lz?|r[aoeui]+[lfk][lfk]z?$

With the -regexp flag, you indicate that this hilight is a regular expression. With regexps, you can match very specific strings. As you can see, you can just go wild with such regular expressions.

Sometimes, you’re on a channel with a lot of activity. All the joins, parts, and modes can really pollute the window. You can hide those lines with this command:

/ignore #channel JOINS PARTS QUITS TOPICS MODES
The irssi activity bar

The irssi activity bar

You might also not want that channel to show up in your activity bar. You can accomplish that with:

/set activity_hide_targets #channel #channel2 #channel3

Actually, why would you want a channel to show up in your activity bar when someone parts it? Or voices someone? I have the following setting in my irssi:

/set activity_hide_level QUITS JOINS PARTS KICKS MODES TOPIC NICKS

To get a list of all the existing message levels, type this:

/help levels

My friends are sometimes a bit creative with my nickname, Garion. To make sure that their creative versions are hilighted properly, I’ve done this:

/hilight -regexp ga+ri+o+n+
/hilight -regexp gaa+r(k|tj)e+
Gaaarioooon

This interesting version of my nickname hilights as well.

So, if someone calls me Gaaaarioon or gaaartjeeee, it will still hilight properly.

Hilighted text, by default, appears as a purple/red/pink (depending on your terminal and colour perception) number in your activity bar. I like to have different subjects trigger different hilight colours in my activity bar, for example:

/hilight -full -color %G -actcolor %Y tea

The -full flag makes sure that only the full word “tea” causes a hilight, and “steam” does not, even though it contains “tea”. The -color %G flag makes sure that the nickname of the hilighter is shown in green, instead of the default yellow. This flag also causes the activity number in your statusbar to turn green. The -actcolor %Y flag overrides this green-ness, and turns the activity number yellow instead.

I don’t think there is a way to manipulate the contents of messages themselves via built-in irssi commands. For example, you might want to remove “lol” from the end of sentences, or replace “god” by “flying spaghetti monster”.

If you want to modify messages, one option is to use Wouter Coekaerts‘s script trigger.pl, also available from the Irssi script archive.

Stay tuned for more irssi tricks!

Posted in irssi | Tagged , , , | 17 Comments

AJIP 5: Two hands from a cash game

This will be a shorter blog than usual. Maybe that will lead to some more feedback than the walls of text I usually produce 😉

Last night, more $0.02/$0.05 cash game with $12.50 max buy-in at PokerStars. A friend, who is a good poker player, had given me the advice to play more than 1 table at the same time, so I would play more hands per hour. This would be good to gain more experience faster. I decided to try to play 2 tables at the same time.

One table turned out to be relatively boring. Not many raises, some tight players, and my stack went up slowly on that table. I’ll show you 2 hands from the other table.

The other table was a 6-handed table with some loose players and some multitablers. I stole a few pots, won a few showdowns, and was up from $12.50 to $14.40 when this happened.

I had pocket eights in the big blind. The under the gun 16-table multitabler folded. The guy who was second to act limped in. He had been limping in about half the pots (his VPIP/PFR was about 50/8), and seemed to be a calling station. Let’s call him Steve. Steve’s stack was very small: only $2.65.

The small blind completed his blind, and I raised to $0.30, 6 times the big blind. If I took the pot right there, that would be fine. I wanted to get heads-up against Steve, and hoped to get a good flop, preferably with an 8. That way, I might be able to get him all-in. Steve called me, and the small blind folded.

The flop was 874 with 2 Spades. Excellent! If Steve had something like QQ, JJ, TT, or 99, he would probably call some bets of mine. With two face cards, who knows, he could call as well. I was a bit afraid of the two spades though, so I bet out $0.50 into the $0.65 pot. No reason to let him draw to his Spade flush for free, if he had two Spades in his hand. So I bet here to both protect my hand and to get more money into the pot, because I was confident I had the best hand. Steve called my bet.

The turn was the 5 of Diamonds. No flush (yet). Of course there are some straight possibilities, but would Steve really have called my 6x BB raise with 96 or 63?

I bet again, this time $1.00 with a $1.65 pot. Steve had only $1.85 at this time, so if he called here, it was very likely that all his money would go into the pot. Steve raised me all-in to $1.85. I was pretty confident that he had an overpair. I called his raise.

The river was the 10 of Clubs. Our hole cards were shown, and his cards were the 3 and 6 of Spades. He won the $5.35 pot.

After the flop, he had both flush and straight draws, so it was logical that he called my flop bet. On the turn, he had his straight, so of course he went all-in on my bet.

Was his call of my pre-flop raise any good? Should I have folded the hand at any point? I’m not sure if this was just bad luck, or if I played badly.

About 20 minutes later, I played another hand against Steve, again from the big blind. I was down to a $10 stack, and Steve’s stack was $8. Steve limped in after the under the gun player folded, and the small blind called. He was another limper, and clearly a friend of Steve’s, as they were talking to each other in Dutch, in the chat box. I raised to $0.25 this time. Steve called, and the small blind called too.

At the same time I played this hand, I also played a “big” hand on the other table. This caused a bit of stress to me, because you don’t have much thinking time on these low stakes tables.

The flop was not bad: AJ3. I figured that I had the best hand. I did not think Steve would have limped in with AK, but an Ace plus a smaller card would be possible.

The small blind checked, and I bet $0.55 into this $0.75 pot. Steve called, and the small blind folded.

On the turn, a harmless card appeared: the 7 of Clubs. I still thought I had the best hand, and bet $1.50 into the $1.85 pot. Steve raised me to $3.00. I guess I should’ve seen the warnings signs of this raise, but I thought he was just being annoying. He could easily have AJ, A7, A3, JJ, 77 or 33 and be way ahead. Or even T9 of Spades, with a flush draw and a gutshot straight draw. But I didn’t think of this, and I called his raise.

The river was the 2 of Clubs. I had decided to slow down, because I didn’t want to lose almost my entire stack in case he did have a better hand than I, so I checked. He bet $1.05 into a $7.85 pot. Such a small bet screams “call me!” and players usually bet such a small amount when they are sure they have the best hand. That was another warning sign that I was beat, and I should have folded. However, I went all-in for $3.06. Steve called.

Care to guess what Steve had?

Needless to say, I lost this $18.30 pot. I had 2 chances to fold this hand: on the turn and on the river.

I still think the first hand was just unlucky. It was a good example of a hand where I could have won a big pot if my opponent had a higher pair. However, the second hand was clearly bad. Lesson learned: at these low stakes, don’t play huge pots with 1 pair. Just be more patient, and win a big pot with trips, a straight or a flush.

Posted in A Journey Into Poker | Tagged , , , , , | 1 Comment

AJIP 4: $12.50 buy-in cash game at PokerStars

The titles of my blog entries were getting a bit long, so I’ve shortened “A Journey Into Poker” into “AJIP”. I wonder how long it will take before googling for “AJIP” has my blog on the first page 🙂

Last night, I played a session of about 140 hands on PokerStars. I had noticed that the low stakes games on Full Tilt Poker that I had played were generally filled with multitables, who play rather tight. It’s pretty boring to play at such tables, and the money doesn’t change hands that much. So, I decided to go for a 6-handed table on PokerStars with $0.02 / $0.05 blinds. I was surprised that I could buy in for $12.50 (250 times the big blind) – on Full Tilt, you can buy in for 100 times the big blind, or $5.00.

On PokerStars, you can hide yourself from the “Find Player” feature, and all players at my table had done that, so I couldn’t find out whether any were multitabling. That’s annoying, because it makes it harder to know whether a player who takes some time before betting is thinking about the hand, or just busy at some other table.

After some hands, I noticed that the players to my left and right were playing very tight. 2 seats to my right was a player who was very agressive, and to his right, a player who liked to limp in. Let’s call this player Limpy. Limping in is generally considered a bad play. In most of the cases, it’s better to either raise the bet, or fold your hand. Limpy was limping in at least half of the pots.

Last week, on Full Tilt, I had been playing very, very aggressively, hoping to bluff out the multitabling players. This often worked in the smaller pots, but I lost a few bigger pots that way when they actually had good cards. Afterwards, I realised that this is exactly how these players make their money: they just wait until they have a good hand, and try to win a big pot. I had played along nicely, being a fish they could take money from. I was determined to play less aggressively, by re-raising fewer pre-flop raises, folding more crappy hands, and trying to bluff less often.

I got a bit confused initially though, trying to win money from the player who limped in often. He tended to call my pre-flop raises. So I decided to experiment a bit with limping in as well. That didn’t produce great results.

Additionally, these players to my right were calling a lot of bets. I found it hard to bluff them away. For example, on hand 13, holding 94 in the big blind, I checked after Limpy limped in. On the flop, turn and river, we both checked each time. I was afraid to bet anything. He turned out to have K7 of spades, so he won the $0.12 pot on the river. Since he did not have an Ace, maybe I could’ve bluffed him out by betting on the flop and river, but why take the risk? It was a tiny pot anyway.

On hand 30, I had my first real hand: pocket queens, under the gun. I raised to my usual $0.17. Limpy called, and everyone else folded. The flop came 732 rainbow, and I bet $0.30 into the $0.41 pot. Limpy called. The turn was a 5, and I bet $0.80 into the $1.01 pot. Limpy re-raised me to $1.60. I guess I should have folded then, but I called the extra $0.80. On the river, another 5, I checked, and he went all-in for $1.49. A week ago, I would probably have called that river bet, but I had noticed that Limpy played rather honestly, so I believed that he had something. I decided to fold, and he showed pocket fives.

I wasn’t sure how to play hands like this, against opponents that limp and call a lot. On hand 40, I was on the cutoff, and since I had been quiet for a while, I raised it to $0.17. The small blind, a player who limped occasionally and called many bets, called, and the rest folded. On the AK5 flop, my opponent checked, and so did I. The same happened on the turn and river. Do you agree with my play here? What do you think the opponent had? What would you have done differently?

Play went on. I decided to fold hands like Q2 suited and A4 offsuit in early positions, because I knew it was likely that at least one of the calling stations would call my raise, and I didn’t want to play these hands out of position. When the flop came AA8 after I folded A4, my first thought was “damn!”, but when I thought about it a bit more, I wasn’t unhappy about the fold. You see, I would probably not have won a big pot there. Who is going to bet with two Aces on the flop? And if I do bet out big and get called, it’s probably a hand like an Ace with a higher kicker, or a full house, so I lose a big pot. I think that fold was fine.

Another strange hand was 59. I had 76 in the small blind. All players except for the cutoff limped in. I decided to see a flop and hope to win a big pot if I flopped something big, so I completed the blind. The flop was K72 rainbow. I had to act first, so I checked, as did everyone else. The turn was a 5. I estimated that my hand was probably best or second-best, and decided to bet $0.15 into the $0.25 pot. One of the calling stations called, and the river was a 10. We showed it down, and my opponent showed 96. I find that a bit of a strange call, but I guess he was hoping for an 8. An expensive 8 that is, costing him 60% of the pot.

On hand 72, I had QT on the button. As usual, Limpy limped in, this time from under the gun. I raised to $0.20, the small blind called, and the big blind (the same opponent as in hand 59) re-raised to $0.35, with only a $1.84 stack remaining! I was unsure what exactly that means, and since I was getting pretty good pot odds, I decided to call. I also called to find out what this person had. The flop was Q75, and my opponent went all-in. I guess that means my opponent had AA, KK, QQ, or AQ. I hadn’t seen any bluffs from this player yet. Lesson learned: if a calling station re-raises you, they have a good hand. A really good hand.

By hand 100, I had figured out how to punish Limpy’s limping. About half of the time, when he limped in, I would raise him, and hope to get heads-up with him. If that happened, I would bet on the flop, hoping that he didn’t hit it. I had seen that he played honestly, so he usually folded to a flop bet if he hadn’t hit his flop. This worked whenever he didn’t have a hand, or when he did, but I also had a hand. It only failed if he hit the flop, and I didn’t. In that case, I lost a pre-flop raise, and a flop bet of 2/3rd of the pot. Since you only hit the flop about 1/3rd of the time with 2 non-paired cards in your hand, this strategy gave me positive results.

When I started doing this, I started understanding the importance of position. On hand 99, I had AT in the small blind. Limpy limped in, and I raised to $0.20. Limpy called, and the rest folded. The flop was 592, and I was first to act. He probably missed this flop, and betting here will probably get him to lay down his hand. I bet $0.30, and he folded. I knew that he rarely bluff re-raised, so if he re-raised here, I would have had an easy fold.

But what if I had been on the button? He would have had to act first, and if he had had a good hand that beat mine (for example, QQ, JJ, 95, 99, 55), he would have bet. I could have folded without putting more money in the pot. Compare this to the sitation where I had to act first, bet $0.30, and folded to a re-raise, and you see that for situations like this, having position means that you lose less money in losing situations.

Now, this isn’t exactly brain surgery, and I had already read and heard lots about position, but reading about it, and experiencing plus understanding it, are two different things. I played around with this a bit more, and managed to win more of Limpy’s money. Very valuable, this session!

I wonder if I took the position thing too far, occasionally. On hand 100, I had pocket sevens on the button. One player limped in, I raised to $0.25, Limpy called in the big blind, and the player who limped also called. The flop was KJ9, and after 2 checks, I bet $0.60 into the $0.77 pot. Too risky? Excellent play? I’m not sure, but fortunately they both folded. I would have gone out to a raise or a call plus a bet on a later street. What do you think about this play?

Hand 107 was one that I’m not too happy about. I was under the gun, and since I had not raised for a while, I decided to go for a $0.20 raise. Limpy called (he sure does that a lot!). The flop was 4AT and I bet $0.35 in a $0.47 pot, called by Limpy. The turn brought the third club. Now, I was afraid of the flush, and of Limpy having an Ace and a 3, 4, or 9 or higher, so I checked on the turn. Limpy checked as well. On the river, I checked, Limpy bet $0.75, and I thought that there were not many hands of him that I could beat. So I folded. Unsatisfactory. How was my play here?

After 110 hands, my stack was still around $12.50, the maximum buy-in. So, I had not earned any money yet, but I had learned some useful things. I found it curious that all the other players had stacks between $2 and $8. I wonder what they’re thinking, sitting down at a $0.02/$0.05 table, with only 40 times the big blind, while there is a guy with 250 times the big blind there.

Hand 115 was strange. A new player had just sat down to my right a few hands before, currently with a $2.92 stack. I picked up AKs on the button. Limpy limped, of course, and the new player raised to $0.15. I re-raised to $0.60, which was called by both Limpy and the new player. After the 9JQ flop, Limpy checked, and the new player went all-in. What does he have? QQ? JJ? KT? I couldn’t call here, so I folded. Limpy quickly called. Turns out that the new player had AT and Limpy Q7. The board ended up 9JQ8Q and Limpy won a big pot.

On hand 122 I got lucky. I had Q8s in second position, and the inexperienced player on my right (who had folded a hand just before that, when he could have checked) limped in. I bet an agressive raise to $0.20. The tight player behind me called, as did Limpy and the player to my right. The flop was 884. Great! Two players before me checked, and so did I, hoping that the player behind me would bet. He did not, unfortunately. The turn was the ten of clubs. I was planning on betting here, when the new player to my right bet $0.50 into the $0.85 pot. I raised to $1.40, Limpy called (!) and the new player folded. That left Limpy with just $0.69 so I put him all-in on the river, which he called. He had KT offsuit.

There, big(ish) pot won. The rest of the hands weren’t that special. I ended up with a couple of dollars “profit” for my session. This was a fun session, much less boring than playing between a bunch of multi-tables, with more action, bigger pots, and more chances of winning money. I’ll try this again, and see if I can win more by being a bit more agressive against players like Limpy, like I was in the last quarter of this session.

Posted in A Journey Into Poker | Tagged , , , , , | 4 Comments

AJIP 3: some useful basic concepts

Some people have told me that they don’t know enough about poker to be able to follow my “Journey into poker” articles. So, today, I’ll write an article aimed at people who haven’t played poker at all, or have played it a few times.

I am not going to spend much time on the rules. I’ll focus on Texas Hold’em, as that is the only game I currently play myself.

Each player gets 2 cards for himself, which he should not show to the other players. These are called the hole cards. After the hole cards have been dealt, there is a round of bidding. Then, 3 cards are dealt face-up in the middle of the table: the flop. After the flop, there is another round of bidding. Then, 1 card is dealt face-up: the turn, followed by another round of bidding. Finally, 1 last card is dealt face-up: the river, followed by the last round of bidding.

Each player’s 5-card poker hand consists of the 5 best cards from the combined 7 cards of the hole cards and the community cards. The winner gets all the money that was bet over the course of the hand, also called the pot.

To make sure there is always something in the pot, the 2 players to the left of the dealer are forced to deposit an initial bet: the small and the big blind.

A full explanation can be found on the Wikipedia page about Texas Hold’em. I usually play No-Limit Hold’em (NLHE), which means there are no maximum bets.

Over the past 3-4 years, I had played NLHE a couple of times, with the family. Just some friendly games. I’m pretty competitive, so I tried to win, but my brother usually won in the end. He was the only one who knew what he was doing, while the rest of us was just almost randomly betting.

Now that I have studied poker for a while, I have learned that there is much more depth to it than I originally thought. I’d like to share some of the first, basic concepts that I have learned.

Position

Position is where you are sitting, relative to the dealer. Except for the first round, the player to the left of the dealer is always first to act, and the dealer is last to act. That means that the dealer has much more information to act on. Generally, it’s always good to be in late position (you are the dealer, or just right of the dealer).

This is something that I read everywhere, but it took me a lot of hands to really start appreciating the importance of position. It is very important!

For example, if you are in an 8-person game, have A3 suited, and you are the first person to act after the blinds (also called under the gun), you should fold. There are 7 players after you who have unknown hands, and in the next bidding rounds, you will be one of the first players to act.

However, if you are the dealer (also called on the button) with the same A3 suited hand, and everyone before you has already folded, the situation is much different. Only 2 players have unknown hands, and in all consecutive bidding rounds, you will have the advantage of acting last. So, you should bet something here.

Stealing the blinds

Not this way.

That leads to the second thing I learned, which is called stealing the blinds. If you are on the button, and everyone folds to you, you are in a great position to steal the blinds, no matter what your hand is. You can (and often should) raise to 3 or 4 times the big blind, hoping that both blinds will fold as well.

So, what happens if you do that? If both blinds don’t have good hands (which is much more likely than them having good hands), and they fold, you win their blinds. If at least one of them has a good hand, you will end up playing the hand, but you will have the advantage of position.

Most of the time, even if the blinds have better hands than you, they will still fold. Imagine that you have J7 in the big blind, and everyone folds to the button. He bets 4 times the big blind, and the small blind folds. Are you going to put in an extra bet of 3 blinds to play this hand out of position? Generally not a good idea. So you fold. The button shows his “bluff”: he had 52.

Stealing the blinds is also important. It’s a good source of income.

Continuation bet

I read the book Play Poker Like the Pros by Phil Hellmuth. There is a lot of useful information in it, and it’s a very good book for people who have just started playing poker. It really starts at the basics.

One of the realisations that this book gave me, is that you are not always betting money to win more money. During our family poker games, I usually did one of these three things when it was my turn: bet with a really good hand, bet as a pure bluff, or check.

Phil adds an extra option to this list. In several situations, he suggests to “bet on the flop to know where you’re at”. For example, let’s say that you have pocket Jacks. You decide to raise before the flop, and two players call your raise. The flop is Q-3-2. Now what? Does anyone have a Queen, and is your hand beaten? Or do you have the best hand?

A good way to find out whether you still have the best hand, is to bet in this situation. If an opponent folds to your bet, that’s great; if he calls, he probably has a weaker hand than you; and if he raises, he probably has a stronger hand (something like AQ comes to mind here). Such a bet like this, also called continuation bet, is used to gain information. You invest a small amount of money, to be able to make better decisions later on – usually for much more money.

Pot odds

No, not odd pots!

Imagine you have JJ, and the board is A 10 5 5 K. The only other player who is still in the hand, bets $10. You think that he is likely to have an Ace or King, but he could also be bluffing. Do you call this bet?

Wait a minute, you are probably thinking now. Some information is missing! How much money is in the pot?

Good question, because that heavily influences your decision. Let’s say there is 70$ in the pot. That means you can win $70 by risking 10$, or 7 to 1 odds in your favour. If you would play this hand 8 times, winning it once for $70, and losing it seven times for $10 each, you would end up with exactly zero money in the end. So, if you can win this more often than once every 8 hands, you would end up winning money in the long run.

This is called pot odds. If you think your chances of winning the pot are larger than the pot odds, you should call that bet. You will still lose some pots, of course, but in the long run, this is a winning play that gives you profit.

In the example above, another way of looking at it is this: if you think there is at least a 12.5% chance (1/8 times 100%) that your opponent is bluffing, you should call the $10 bet. Otherwise, you should fold.

Conclusion

With knowledge of basic concepts like this, you can turn your poker game from “I’ll just randomly bet and see what happens” to a bit more “I’ll choose to bet/fold/raise/check here, because this is my plan” style. If you are a beginner and want to read more about playing poker with a plan, there are a ton of books available; one other good starting point is Doyle Brunson‘s Super/System.

Good luck!

Posted in A Journey Into Poker | Tagged , , , , | 2 Comments

AJIP 2: play money tournaments

Playing for fake money (or Play Money, as they call it on PokerStars) is strange. Very strange. If there’s nothing valuable at stake, people gamble and bluff much more (I’m sure there must be scientific studies that prove this theory, but I’d say it’s quite clear that this is true by just thinking about it a bit).

Play money or real money?

I played a couple of Sit & Go tournaments for play money last week, just to see what I could learn from it. Some people warned me that this would give me bad habits, because play money play is so much different from real money play. Fair enough, I said, but I did it anyway.

When you create an account at PokerStars, you get 1000 play money. Whenever you run out of play money, you click a button, and receive 1000 fresh play money. You can “re-buy” up to 3 times per hour. This leads to people joining a ring game, and going all-in on the first hand they play, no matter what their cards are, in the hope they get lucky and increase their stack by at least 1000. Logical, since they can get free play money back if they lose. This makes the tables with low blinds very wild, because on almost every hand, someone goes all-in. Play money tournaments are similar, but different.

A Sit & Go tournament works like this. You register to the tournament, and pay an entry fee to participate (plus a small extra amount, which goes to the website). This entry fee is then used to create the prize pool. As soon as enough people have registered, the tournament starts. Each player gets $1500 in chips as starting stack. For example, there are 18-seat tournaments for 2000 play money entry fee. That means the prize pool is 36000, divided in this way:

  1. 14,400
  2. 10,800
  3. 7,200
  4. 3,600

So, you need to end up in the top 4 to win money; the other 14 players get nothing.

The all-in behaviour described above translates somewhat to play money tournaments. Players go all-in relatively often in the beginning, in the hope to double up their $1500 stack, and have a better chance of surviving until there are 4 players left.

Knowing that players gamble more at the start of a tournament, I decided to play some tournaments, with the following guidelines in mind:

  • Only play very strong hands (TT or higher pairs, AK, AQ) in the first half of the tournament
  • Go all-in pre-flop with those strong hands
  • Don’t bluff if there are 3 or more players in the hand

This turned out to be a great strategy for the first half of the tournaments. I simply folded almost every hand, and went all-in with the power hands. The worst odds I got on my all-in situations were about 50-50 (a pair against 2 higher non-paired cards). The other situations were much better for me, for example:

Or this one (I’m the player called “Hero”):

Sure, I lost some of these all-in situations, but I won the majority, and that’s a great way to increase your chances to win the tournament. In total, I played about 10 of these tournaments, winning half of them. If only those 14,400 were euros instead of play money…

Many of the players in play money tournaments exhibit one or more of the following characteristics:

  • Likes to gamble often.
  • Uses the minimum bet size.
  • Loves Aces.
  • Goes all-in with a bad hand.
  • Calls more often than he should.
  • Rarely bluffs.
  • Doesn’t know much about odds.
  • Underbets and overbets often.
  • Want to see many flops.
  • Folds often after the flop.

Some of these characteristics lead to strange situations. Once, I saw a hand (blinds were 10/20) with lots of raising pre-flop. 6 players were in the hand and the pot was 700 before the flop. After the flop, 1 player bet 20, and the other 5 folded. That made me blink a few times.

Many of these players love Aces. And what I mean by that is not pocket rockets, but a hand with one Ace and any other card. With such a hand, they raise, they go all-in, and they call almost every bet. If an Ace appears on the flop, even the most timid player will bet. So, if you see an Ace in the community cards, and someone bets, that person almost certainly has an Ace (or an even better hand, like trips).

What I’ve also seen is someone calling every bet on one hand with three Tens (where he should have bet more to win a bigger pot), and calling every bet on the next hand with AK and no pair (where he should have folded after the flop or turn, to limit his losses).

Many players seem to use a fit-or-fold strategy. They call the big blind to see the flop, and when they miss the flop, they fold when someone bets. This is very useful to know for later in the tournament, when there are only 2-3 players in the pot instead of 5-7, because then you can easily bluff the other player out of he hand. And if he does call your bluff, or even raise it, you know that he has a hand, and you can get away easily.

I found that it’s not easy to outplay these unpredictable opponents consistently. Is my opponent underbetting or overbetting? Did he just do an unreasonable call on my turn bet, and get very lucky on the river? All in all, my chosen strategy seems to work fine, at least for the first half of the tournament. After that, play turns a bit more normal, although still very loose, and you need to adapt to that by playing looser, and bluffing a bit more.

Next adventure: small stakes real money tournaments!

Posted in A Journey Into Poker | Tagged , , , , , , , , | 2 Comments

Unhelpful software error messages

There are few things that annoy me as much as error messages in software. Error messages are up there on the annoyance ladder, with wasps, vuvuzelas, and someone buying the last bottle of Yop right before you.

Error messages generally suck hairy donkey balls. Often, they fail to display the information you need to fix the problem. They are not helpful enough.

For example, imagine you’re playing around with rtorrent, and you want to move all completed torrents to a certain location. To do that, you put the following – rather complex! – line in .rtorrent.rc (line split for readability):

system.method.set_key = event.download.hash_done,
move_complete,
"execute=mv,-u,$d.get_base_path=,/torrents/finished/;
d.set_directory=/torrents/finished/"

You fire up rtorrent and download something. After that, you notice that the downloaded file has not been moved to the right location. So, you look at the log, and you see this error:

(18:05:34) Download event action failed: Bad return code.

Well, “thanks”, rtorrent. I already knew that something has failed. But could you please tell me the command you executed, which failed? And the error message that the command generated?

Error messages in Windows applications often seem to be of the type “something went wrong”, without explaining what went wrong or how to fix it. Take a look at this one, taken from The Daily WTF:

Which process? Which file? Which other process? Without this information, there’s not much the user can do.

I suspect that some of these unhelpful error messages are caused by the laziness of the software developer. I am a software developer myself, and during peer reviews, I’ve often seen error messages like “This package is not active” or “Component does not fit“. Not so helpful at all.

These two error messages could have been improved much, for example “Package <type> <id> is not active, but <state>.” or “Component <type> <id> (<description>) does not fit in package <type> <id> (<description>).

So, if you are a software developer, and you are writing an error message, try to make it as useful as possible. Imagine running your software and encountering the error you are currently pondering about. How would you go about fixing the error? Which information would you need to trace the problem and solve it?

Then, put that information in the error message. People who use your software will be less annoyed if your programs encounters an error, when they see that the error message is helpful. If you receive a bug report with an accurate, useful error message, you will be able to find the bug much faster. And you will thank yourself for being so smart, once you run into your own error some days, weeks or months after you’ve written it.

(While writing this, I found a blog post by Kevin Ertell which has a similar message.)

Posted in software, software development | Tagged , , , | Leave a comment