How to List Your WordPress Posts by Category

There’s a nifty WordPress plugin called List Category Posts that makes it dead-simple to list all of the blog posts in a specific category of your blog.

Why is this useful? If you’ve been blogging for a while you’ve likely got a lot of valuable posts buried on your blog that aren’t easily accessible to new visitors. Most bloggers include a list of categories on the side of their blog, but if you’ve got a lot of items filed under a category it can take a while to peruse them all the posts. By creating a a list of posts sorted by category, you can point new visitors so they can get familiar with your site; it acts as a site map.

Your should create a blog post that lists all of your blog categories with a list of posts below them. Then include a link to it somewhere prominently on your site so new visitors can quickly scan your old posts.

You can see the list of posts I created for this blog here. And here’s what the post itself looks like:

The name attribute refers to the category name (make sure you put categories that have multiple words in quotes), numberposts specifies how many posts you want to be displayed for that category (-1 means list everything), and date tells it to display the post date next to the link.  You can see all the options on the plugin’s Other Notes page.

And the great thing about this is that it will update automatically as you add new posts.

To add a link to your side bar, go to Appearance > Editor > Sidebar and add a link to that blog post:


Enjoy!

Startup Blogs To Make You a Better Entrepreneur

As an aspiring startup founder, I’m always on the lookout for blogs that will help me become a more adept entrepreneur.  Fortunately for me and for the startup community there’s a lot of really talented entrepreneurs who write regularly about what they’ve learned so you can benefit from their experiences.

The following is a list of the best startup blogs that I’ve run across, which I thought I’d share in the hope that you find something new for your collection. In no particular order…

  1. Derek Sivers – Founder of CD Baby and several other companies, the word “wise” comes to mind. His post Let pedestrians define the walkways is always in the back of my head while I’m working on my startup.
  2. Gabriel Weinberg – Ballsy Philadelphia-based founder of Duck Duck Go, an inspirational (and quite successful) one-man search engine startup. Really nice guy too.
  3. IIlya Lichtenstein – Internet marketer who recently helped more than 150 startups with their marketing efforts and wrote about the lessons learned in a series of great blog posts.
  4. Jason Baptiste – Boston-based cofounder of PadPressed. His posts on startups are some of the best I’ve read. See, for example, If You Build It, They Won’t Come (something I’ve learned the hard way) and 16 Ways Your Startup Needs to be Getting Customers.
  5. Eric Ries – Eric has changed the way people approach building startups with the Lean Startup movement. He also coined the phrase Minimum Viable Product, which is now common lingo in the startup world.
  6. Ben Cashnocha – An all around brilliant guy, he writes on topics including entrepreneurship, travel, and philosophy.
  7. OnStartups – By Dharmesh Shah and others, it offers troves of invaluable advice for startup founders in posts that always seem to begin with a number.
  8. Jason Cohen – Another very successful startup founder who writes about how to do it well. Rich vs King: Why I Sold My Company and Why I feel like a fraud are great places to start.
  9. Paul Graham of Y Combinator fame — his essays are essential reading for startup founders.
  10. Rob Walling – Software by Rob is a new addition to the list. I recently read his new book Start Small, Stay Small and immediately identified with his approach. Highly recommended for anyone running or aspiring to run a small online business.
  11. Matt MaroonFormer poker player turned YC-backed startup founder of Blue Frog Gaming, Matt excels at seeing the big picture and articulating it for his readers (just not on HackerNews).
  12. Chris Dixon – Cofounder of Hunch and active angel investor who writes on investing, technology, social media, etc.
  13. Mixergy – An excellent series of interviews by Andrew Warner, who relentlessly pursues the execution details behind many successful startups.
  14. Sebastian Marshall – Sebastian offers practical advice drawn from a breadth of knowledge and experience on how to excel at just about anything. Here‘s an inspiring post from yesterday and here‘s a list of his top posts.
  15. Balsamiq Products Blog – The more I work on jMockups, the more impressed I am with Balsamiq’s incredible execution. Too bad I’m going to destroy them (just kidding… maybe). :)
  16. Steve Blank – Former Air Force officer turned Silicon Valley serial entrepreneur, Steve invented the Customer Development process which is the foundation of the Lean Startup movement.
  17. Patrick McKenzie – Of Bingo Card Creator and soon-t0-be Appointment Reminder fame, he inspired me to create Preceden, a web-based timeline tool.
  18. Spencer Fry – Creator of Carbonmade, a site for designers that lets you show off your portfolio, who writes about entrepreneurship, freemium, and more.
  19. Jacques Mattheij – A pillar of the HackerNews community and thought leader in earning money from web apps, Jacques’s blog is not one to miss.
  20. Daniel Tenner – Cofounder of Woobius, who puts things in perspective with posts like iPad: Apple for Mom and The questionable value of the real time web.
  21. This Week in Startups with Jason Calacanis
  22. Furqan Nazeeri – Boston-based serial entrepreneur who writes about startups, venture capital, and entrepreneurship
  23. Seth Godin – Seth is a brilliant marketer and businessman who shares his seemingly endless supply of insights via his blog. He’s also got some great books including  Small is the New Big and The Purple Cow.
  24. Mark Suster at BothSidesOfTheTable – Musing of an entrepreneur turned venture capitalist. I came across his blog via his post How to Talk to Investors About Your Competitors.

And two non-startup blogs that you might also like:

  1. Less Wrong – Less Wrong is about how to think better–a lot of it will make you go whoa. For example, check out Intellectual Hipsters and Meta-Contrarianism.
  2. David Mangold – Dave is a big picture, outside-of-the-box intellectual who writes about topics including evolution, astrobiology, metaphysics, and more.

Know of a blog that might make a good addition to this list? Let me know in the comments below.

Cheers!

Determining Your Values with Hypothetical Extremes

To be happy is an enormous achievement because it entails working very hard to learn what one needs to be happy and most people choose the incorrect things. – Marty

My great uncle and I have had a long running email conversation about life, philosophy,  happiness, and the like. One of the tenents of his philosophy, which is based heavily on the works of Ayn Rand and Nathanial Brandon, is that happiness is a consequence of living your life in a way that’s aligned with your values, which in turn should be based on your own rational self interest.

Determining your values can be a daunting task if you’ve never done it before but I highly encourage you to take some time and figure them out if you’re not sure. I came up a simple way of determining my values that works pretty well for me so I thought I’d share it with you all in case you’re having trouble:

1. Start by identifying one thing that you value. It doesn’t have to be the most important thing, but it should be something that you would say “Yeah, that’s important to me.”

2. Imagine a hypothetical life where that’s the only thing in your life. Would you be happy if that’s all you had?

3. If not, ask yourself why? What’s missing? Add that to your list of values and repeat these steps until you’ve got a life that you’d be happy with.

The list of things that make up this hypothetical world is what you value.

Here’s an example for me:

I enjoy making things. Would I be happy in a world where all I did was make things? No. It’s not enough to simply make something. It has to be something new and creative.

So I want to make new, creative things. Would I be happy in a world where that’s all I did? No. If I have someone telling me new, creative things I should make I wouldn’t be satisfied. I have to have the independence to make what I want.

So I want to make new, creative things (ie. innovate) without anyone dictating my actions or direction. Would I be happy in a world where I was an independent innovator? No. I could sit in a dimly lit room all day making cool things with legos, but I wouldn’t be happy. The things I build have to have some impact on the world.

So I want to be an independent innovator who creates things with impact. Would that be enough? What if I could change hundreds of lives but no one would ever know it was me? Recognition isn’t paramount, but I find that I would like some recognition for my work. I don’t want to be anonymous.

So I want to be a recognized independent innovator who creates things with impact. Getting there. Would it be enough to do this completely alone, without any friends or family? No. I want those things too.

So I want to be a recognized independent innovator who creates things with impact who also has a great family and friends. Yeah, that sounds pretty good to me. It’s not perfect: I could continue adding other things (physical and mental health, education, self improvement, integrity, etc), but you get the idea.

By following this simple little algorithm you can determine with high fidelity what your values are. It won’t tell you whether these things are in your own self interest (ie, you might imagine a world where you’ve got an endless supply of cocaine to get high on), but it will help you identify what’s important to you.

Give it a shot. See what you come up with.  Figure out how you’re going to get there, then do it.

2010, 2011 & a $4K/month Challenge

A few months back with what seemed like two months of work left to do, I publicly committed myself to launching jMockups in four weeks. The number of things I wanted to get done prior to launching was daunting, but I desperately needed to get the product out there and in the hands of actual users to start collecting feedback.

How’d it go? I didn’t launch it in four weeks; I launched in less than three.

Public accountability is a powerful thing. Sebastian Marshal writes about his own experience:

If I hadn’t set this goal and been accountable publicly, to my friend and to everyone who reads here, I wouldn’t have done it in two weeks. Honestly – I’m pretty internally motivated, but I’ve had a lot of stuff going on the last two weeks, it wouldn’t have happened. But it did happen, largely because I was publicly accountable.

This productivity hack that works especially well for me. I’m an INTJ on the Meyers Briggs type indicator and one of our defining characteristics is the value we place on competence. By publicly committing myself to launch, I put my own competence on the line so I did what it took to meet the goal. Practically this meant postponing a lot of the things on my todo list until after the launch, working some long nights and weekends, and taking a week off of work.

Publicly committing myself worked well for me once, so I’m trying it again.

The Scene

I spent most of 2010 building. I launched Preceden in late January and continued working on it through May. In June I started working on jMockups and launched it in late October. My focus in 2010 (and largely 2009 and 2008) was on learning and building. I knew I eventually wanted to make money off of the apps, but money wasn’t my primary goal.

I’ll be with my current job until October 2012 so I can’t pursue this full time just yet. Because I have a day job I’ve never had to rely on my web app income to survive. It’s always been like Oh, I had another sign up. That’s nice. That’s got to change.

October 2010–a mere 21 months away–will approach fast. In order for web app development/entrepreneurship to be viable long term, I have to start making more money. My true passion lies in building things–not money–but without money I can’t spend my time building things.

The Goal

I don’t have exact numbers (which is part of the problem), but Preceden currently makes about $500/month and costs $70 to operate. jMockups makes $24/month (whohoo!) and costs about $200/month to operate (doh!). Taken together, I’m making about $250/month.

It’s not entirely fair to value the apps in terms of their current profits, but that’s obviously a big part of it. Preceden targets a small niche and has a small goal: be the best timeline tool. jMockups targets a large niche and has an ambitious goal: improve the way people design websites. Long term, jMockups has the potential to be a home run; Preceden doesn’t.

With that in mind:

My goal is to make $4,000 per month from Preceden and jMockups by the end of 2011.

That’s about 16x what they make now. If a public commitment isn’t scary, it’s probably not ambitious enough. And since this is terrifying, I figure it’s a good number to shoot for.

I’ll make monthly progress updates starting at the end of January.

The Plan

Preceden has a marketing problem. It’s is a quality tool that has a lot of happy users, but not enough people know about it. I need to get more people to the site and need more of them to convert to paying customers. My plan with Preceden is to start marketing it heavily (via things like AdWords), perform lots of A/B testing, and optimize the hell out of it by way of extensive analysis. If I can get Preceden to a point where outbound marketing has a measurable positive ROI, I’ll be in really good shape.

jMockups has a product problem. The tool is good, but not great. Trying to change the way people design websites is hard (I probably should have picked a more narrow niche to start with, but that’s another story). I’ve been adding two or three new features a week since it launched in October, but I haven’t spent much time on the other things it takes to create a successful web product. For example, there’s currently way too much friction from when a user arrives at the site and to when they create a mockup that they’re happy with. And it shows in the usage metrics (75% of new users create 1 mockup and never come back). In 2011, I’ll continue working on the product but I’ll place a stronger emphasis on usability, education, and building a community. The revenue should follow from doing these things well.

I have a sole founder problem. But not really. I like the independence of working alone, but having someone else to build with and bounce ideas off of would be great. I’m not going to spend a lot of time actively searching for a cofounder, but if the opportunity presents itself I’d definitely give it a shot. (Interested? Drop me a note: matthew.h.mazur@gmail.com)

###

So here’s to 2011. I don’t know how things are going to turn out, but hopefully with this public commitment they’ll turn out a little bit better than they otherwise would have.

Poker Bot Preflop Strategy Explained

This is post #19 in an ongoing series of articles about my work as a poker bot developer.

When I first attempted to build a poker bot, I tried long and hard to come up with a single algorithm that given your two hole cards and the situation would spit out call, raise, or fold for every situation that the bot could face. Turns out its not a trivial task. There are a lot of factors that should affect your decision: your hole cards, your image, your opponent’s style, your position, the stack sizes relative to the blinds, the recent hand history, the stack to pot ratio once the flop hits and, and the history so far in the hand (in the case of three and four bets). To quantify all of this information – let alone weigh it in an intelligent way – is difficult, to say the least. After several weeks of fruitless attempts, I abandoned it in favor of a simpler, albeit less elegant solution.

At its core, my solution boils down to conditional statements using a simplified version of the current situation. Consider this:

“If your effective stack sizes is 55 big blinds and you’re the small blind and you’re first to act and your opponent is loose aggressive and you have 8h 6h then you should raise three times the big blind.”

It would be impossible to enumerate every possible combination this way, but if you take some shortcuts, you reduce it to a manageable number of factors.

Stack Size

In order to work with stack sizes, I grouped them together based on the effective stack size (effective stack size uses the smaller of your and your opponent’s stack size because the rest is not in play):

0 – 10bb: Shortstacked

10 – 15bb: Danger Zone

15 – 22bb: Red

22 – 35bb: Orange

35 – 50bb: Yellow

50 – 75bb: Green

(The maximum effective stack size you can have on PokerStars’ Heads Up SNGs is 1500/20 = 75 bb.)

These groups were based on my observations watching the bot and on the postflop stack to pot ratios.

Previous Actions

Like stack sizes, it would be impossible to list out every possible combination of actions leading up to current situation, so I used a shorthand:

1 = You’re small blind

2 = You’re big blind

All previous actions are reduced to C (call) or R (raise) and the size of the raises are ignored completely.

Examples:

- You’re small blind and just dealt: 1

- You’re big blind and your opponent raises: 2R

- You’re small blind, you limp and your opponent raises: 1CR

- You’re big blind, your opponent raises, you three bet, and he four bets: 2RRR

Every preflop decision can be represented this way.

Hole Cards

It’s generally not a good idea to group holecards beyond the standard 9s 9h = 99, 9s 8h = 98o, etc. There are times when 88, 99, and TT should be treated the same and other times when TT should be treated differently, so it won’t do you much good to create a “Mid Pocket Pair” group and treat everything in it the same way.

That being said, specifying an action for all 169 simplified hole card combinations for every situation would would be a tedious task to do by hand. In an effort to manage it, I created a seperate program specifically for creating ranges and assigning actions to the holecards. I called it Range Maker:

(If you’ve seen ALL IN Expert, the poker calculator that I developed after the poker bot, Range Maker is where the idea came from.)

There are two versions of Range Maker shown in the screenshot above. Below the grid on the left is the older version; on the left is newer version. The grid serves both.

The older version lets me assign a fold, call, raise, or push action to every hole card combination in the selected range.

In the example below, orange represents call, maroon a 3x raise, cyan push, and gray/pink fold:

As time went on I expanded it to include additional options:

The numbers on the right represent the distribution of raise/call/fold for that color. The randomness was necessary to fool observant opponents and PokerStars security, in case that was something they looked at. The decision to push or raise 3x was later delegated to software, which figured out what the stack to pot ratio would be postflop if the opponent called and pushed if it was too high.

Here’s an example of what the range looks like for the small blind opening range vs an aggressive opponent when the stack size was in the red zone (15 – 22 bb):

And here’s the same spot vs a call station:

It took a long time to get these ranges down. I would sit there and watch the bot play for hours, making pages of notes on what I wanted to adjust when the session was over.

For those of you looking for a bit more, here are the range files I used with each version:

These include virtually every range I ever worked with, so if you want to use these you’ll have to spend some time analyzing them to pick out the gems.

Putting it All Together

Here’s roughly how it went in an actual game:

1. Analyze the current situation: hole cards, stack size, previous action, and opponent style and group them.

2. Look up the range based on these factors

3. Act

Example: PokerStars 25/50 blinds, you are small blind with 2100 chips, call station opponent is big blind with 900 and you’re dealt Ks 5h.

Your effective size is 900/50 = 18 big blinds, putting you in the red zone and since you’re small blind and first to act, the previous action is simply “1”. Now with three layers of conditional statements (stack size, previous action, and opponent style) you can look up the range (see the screenshot above) and determine that K5o is 80% raise, 20% call, and 0% fold. Roll a die (in this case the random number generator) and pick an action based on that distribution.

Here’s the corresponding code for step 2:


'------------------------------------------------------------
'  Name    : PreflopActionFromFile
'  Purpose : Given a specific situation, this'll look up my range in
'            the Hero Ranges.txt file and see what I want to do with this hand
'------------------------------------------------------------
'
Public Function PreflopActionFromFile(sHoleCards As String, sRangeName As String) As String

 Dim sRangeFile_Old As String                ' old range file
 Dim sRangeFile_New As String                ' advanced ranging (mixed ranges)
 Dim sNewINIData As String                   ' data from the advanced file
 Dim iDataPos As Integer                     ' start of the distribution
 Dim sDistribution As String                 ' data from that file
 Dim sDistributionSplit() As String          ' split it up

 Dim sSimpleHand As String                   ' AA, AQs...
 Dim dRndNum As Double                       ' a random #
 Dim dRaisePerc As Double
 Dim dCallPerc As Double
 Dim sINIVal As String

 sSimpleHand = SimpleHand(sHoleCards)

 sRangeFile_Old = App.Path & "ResourcesHero Ranges.ini"
 sRangeFile_New = App.Path & "ResourcesHero Advanced.txt"
 sNewINIData = GetFromINI("Range Data", sRangeName, sRangeFile_New)

 If sNewINIData <> vbNullString Then
 ' There is an entry in the advanced range file

 iDataPos = InStr(sNewINIData, sSimpleHand)
 sDistribution = Mid(sNewINIData, iDataPos + Len(sSimpleHand) + Len(" ("), InStr(iDataPos, sNewINIData, ")") - iDataPos - Len(sSimpleHand) - Len(" ("))
 sDistributionSplit = Split(sDistribution, "/")

 ' Make an update
 Update "Mixed Distribution: " & sSimpleHand & " (" & sDistribution & ")", 2, eDecision

 dRndNum = Rnd
 dRaisePerc = Val(sDistributionSplit(0)) / 100
 dCallPerc = Val(sDistributionSplit(1)) / 100

 ' Make a decision...
 If dRndNum <= dRaisePerc Then
 PreflopActionFromFile = "R"
 ElseIf dRndNum <= (dRaisePerc + dCallPerc) Then
 PreflopActionFromFile = "C"
 Else
 PreflopActionFromFile = "F"
 End If

 Update "Action Chosen: " & PreflopActionFromFile, 3, eDecision

 Else

 Update "Hero Range: " & sRangeName, 1

 sINIVal = GetFromINI("Ranges", sRangeName & " (R)", sRangeFile_Old)
 If InStr(sINIVal, SimpleHand(sHoleCards)) > 0 Then
 PreflopActionFromFile = "R"
 Exit Function
 End If

 sINIVal = GetFromINI("Ranges", sRangeName & " (C)", sRangeFile_Old)
 If InStr(sINIVal, SimpleHand(sHoleCards)) > 0 Then
 PreflopActionFromFile = "C"
 Exit Function
 End If

 sINIVal = GetFromINI("Ranges", sRangeName & " (P)", sRangeFile_Old)
 If InStr(sINIVal, SimpleHand(sHoleCards)) > 0 Then
 PreflopActionFromFile = "P"
 Exit Function
 End If

 PreflopActionFromFile = "F"
 End If

End Function

Final Thoughts

This approach covered about 90% of all the preflop situations the bot faced in the course of a game, but about 10% had to be handled with special cases. Consider, for example, an opponent who pushes every time with 75bb. You can’t just treat this as a 2R situation and call with the standard range. There are also a lot of situations where you should shove simply based on its expected value, which you have to figure out in spots that warrant it (which require you to estimate your opponent’s raising and calling range).

If you’re an aspiring botter and have questions about any of this, feel free to shoot me an email. And good luck.

Matt