Ionic 3: ionic start -n … if you use spaces in the project name, npm dependencies will not install

Just a warning for those migrating to or starting to develop with Ionic 3 framework, if you create a new project with illegal characters in a package.json “name”, npm dependencies will not install.

You might encounter an error right away when performing “ionic serve” or “ionic cordova run” like:

Error: Cannot find module '@ionic/app-scripts'

The error/warning is hidden in Ionic 3 CLI with the spinner unless you specified “–verbose” with “ionic start”.

You will have to fix the name in package.json in the project folder (e.g. replace spaces with dashes) and re-“npm install”.

This didn’t happen in prior versions of Ionic as it kept the package.json “name” to something like ionic-hello-world.

*    *    *

Take a break from work and enjoy a game at GameSlush.com.

Apache to Nginx transition on WordPress – don’t forget the permalinks

After having transitioned from Apache to Nginx as the web service for this blog, I noticed an immediate drop-off from search engine traffic to links outside of the index page. Just attributing it to blind bad luck for a few days, I later realized that permalinks were broken because I didn’t correctly translate the rewrite rules from the Apache configuration to Nginx.

Apache config for WordPress permalinks:

  Options FollowSymLinks
  Options SymLinksIfOwnerMatch
  RewriteEngine On
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]

Correct equivalent Nginx config:

  location / {
    index index.php;
    try_files $uri $uri/ /index.php?$args;
  }

For a minute I thought search engines were blacklisting me for unpopular opinions on this blog.  Don’t attribute to malice what can be attributed to (my own) stupidity.

*     *     *

If you’re looking for a cheap alternative to home security that costs literally one-twentieth of what most security companies charge, try out Simple Home Monitor for free.

Is PokerStars “The Deal” a zero-sum game?

In reality, the short answer to this question is no, “The Deal” is not a zero-sum game. Let’s take a closer look at it.

“The Deal” is a zero-sum game in a similar way you’d consider taking odds behind the pass line bet in Craps as “zero-sum”.  In order to get to that bet, you must take a losing proposition (i.e. the original pass line bet).

PokerStars Keith over at 2+2 says:

The Deal is a zero-sum game with all entry fees going back into the prize pool. In other words, the house does not rake this game. The prize pool is allocated as follows:

  • For every 7 StarsCoin used to play The Deal, we add $0.028 to the progressive jackpot – 77% goes into the current jackpot and 23% is set aside for future jackpots.
  • The rest is distributed to players in the form of regular prizes.
  • Each jackpot starts from $25,000.

This is accurate only if the 23% allocated for future jackpots is eventually paid out in full.

If we remove the $0.028 per 7 StarsCoin from the bet, assuming that the house pays it out fully in their progressive jackpots, the expected value of the remaining payouts is roughly $0.042 per 7 StarsCoin (in fact it shows it is slightly advantageous to bet 7 StarsCoin than 70 StarsCoin):

Hands Probability 7 SC Paytable 7 SC Modified EV ($0.042 w/o JP) 70 SC Paytable 70 SC Modified EV ($0.42 w/o JP)
Royal flush 4 1.5391E-06 805.5657 0.00123983 805.5657 0.00123983
Straight flush 36 1.3852E-05 250 0.00346292 806 0.01115845
Four of a kind 624 0.0002401 30 0.00720288 300 0.07202881
Full house 3,744 0.00144058 5 0.00720288 75 0.10804322
Flush 5,108 0.0019654 1 0.0019654 25 0.04913504
Straight 10,200 0.00392465 0.5 0.00196232 10 0.03924647
Three of a kind 54,912 0.02112845 0.25 0.00528211 3 0.06338535
Two pair 123,552 0.04753902 0.07 0.00332773 0.7 0.03327731
Pair 1,098,240 0.42256903 0.02 0.00845138 0.1 0.0422569
Ace High 502,860 0.19348509 0.01 0.00193485 0 0
Total 0.04203231 0.41977138

Again, this assumes that the jackpot wheel is evenly distributed, with a two-sevenths chance of winning $500, and a one-seventh chance of winning $1,000, $2,000, $3,000, $4,000 and $5,000 each.  There is no reason to doubt the validity of that distribution based on PokerStars’ claim the game has a zero house edge and the calculations above demonstrate that.

Referring back to my prior posts, Does PokerStars manually control when the Big Deal jackpot is won? and The expected value of playing The Deal at PokerStars, I still claim that “The Deal” is a bad deal for the player and a good deal for the house.

“The Deal” stands to benefit the house in the long run even though the rest of the payouts have zero house edge. This is assuming a fair probability of hitting the jackpot. The benefit to the house is exacerbated with a controlled or unevenly weighted jackpot probability.

  • Higher jackpots encourage players to play more raked hands of poker, their main source of revenue, in order to earn StarsCoin to put towards “The Deal”. This is like having to take the pass line bet in order to get to the 0% house edge odds bet in Craps.
  • A jackpot is replenished to only $25,000 using 23% of the $0.028 collected per $0.07 attempt at “The Deal”.
    • For PokerStars to not pay out of its own pocket to reseed the jackpot, it requires 25,000 ÷ $0.028 × 0.23 = 3,881,988 losing attempts at “The Deal” at 7 StarsCoin to ensure they do not dip into the red.
    • 3,881,988 attempts at 7 StarsCoin equates to a jackpot of more than $83,695. The jackpot right now stands at $475,000 at the time of this article. Safe to say PokerStars can replenish the next $25,000 jackpot reseeds for a while with the backup money they have accumulated.
    • If the actual odds of striking the jackpot are true at 5,197,920 to 1, then it follows that on average ((5,197,920 – 3,881,988) × $0.028 × 0.23) $8,474 of reseed money per jackpot paid out will never go back to the players unless at some point in time when “The Deal” is retired, the entire backup fund is put into the last progressive jackpot.

Will PokerStars redistribute their ever growing backup fund?  If they do, then it is a zero-sum game as they have promised.  If they don’t, then it is one very deceptive way of padding their profits. In either scenario, they will still achieve their likely desired effect of encouraging players to come back every day for a shot at the $1-$2 scraps of a 50% jackpot share, and for the players to play more raked hands in order to get more StarsCoin chasing a “Bad Deal”.

*     *     *

There are no bad deals at GameSlush.com (apart from the bad deals you might get playing a card game there).

Does PokerStars manually control when the Big Deal jackpot is won?

(Update: the jackpot as of 12:30 GMT Friday,  January 27 is now over $470,000. Given that there now have been roughly 21.8 million losing entries, if the odds of the hitting the jackpot are truly 1 in 5,197,920, meaning that the jackpot wheel is fair, neither predetermined or unevenly weighted, we should have expected the jackpot to be hit 4 times by now. Stated in different terms, the probability of NOT hitting the jackpot after 21.8 million tries is roughly 1.5%. So in true PokerStars fashion, after just about one month since the introduction of “The Deal”, we are supposedly already hitting 66 to 1 long shots.)

Right after publishing the article on the expected value of The Deal, the jackpot has vaulted beyond the break-even point of $272,000 (at the time of writing this article, it stands at $307,000).

There is nothing in their rules stating the probability of spinning the jackpot, so far all we know it could be completely fixed.  But just to gauge the unlikelihood if the original assumption that every spot on the wheel has equal probability of getting hit, the odds of winning the jackpot per 7 StarsCoin is still 1 in 5,197,920.

For the current jackpot to be reached, given that 77% of $0.028 goes towards the progressive jackpot per 7 StarsCoin entry, there have been approximately at least 13,000,000 losing entries at the time of writing this article. This is well beyond the 5,197,920 expected average. (It should be noted there is no difference between entering with 70 StarsCoin versus playing 7 StarsCoin ten times in terms of probability of hitting the jackpot since adding the 36 straight flush possibilities in the 70 StarsCoin case increases the likelihood of a jackpot spin exactly ten times).

I suppose the jackpot could theoretically grow forever but the unlikelihood already of having a jackpot beyond the break-even point makes me wonder if the jackpot is manually controlled to encourage more people to spend their rakeback on a bad deal, since there is no indication anywhere on their Terms of Use or rules page denoting the exact probabilities of the wheel and the game itself.  Who knows, maybe the outcome of the cards in “The Deal” are controlled too.

*     *     *

If you don’t like a rigged game, perhaps you’d enjoy playing instead at GameSlush.com.

The expected value of playing The Deal at PokerStars

“The Deal” is a recently released promotion from PokerStars that allows you to gamble their rakeback currency, “StarsCoin”, for a crack at a progressive jackpot — a concept no different than traditional slot machines.

For the purposes of evaluating an exact EV, 1 StarsCoin (SC) is assumed to be equal to $0.01 (since in the VIP store you can redeem 1,000 StarsCoin for $10).  Also, it is assumed the jackpot wheel has equal probability of hitting any space, and thus you have a 1 out of 8 chance of winning the jackpot on any jackpot spin.

For a $25,000 jackpot, which the winning share takes $12,500, the expectation hovers around -34%:

Hands Probability 7 SC Paytable 7 SC EV 70 SC Paytable 70 SC EV
Royal flush 4 0.00000154 3,563* 0.00548625 3,563* 0.00548625
Straight flush 36 0.00001385 250 0.0034625 3,563 0.049340625
Four of a kind 624 0.0002401 30 0.007203 300 0.07203
Full house 3,744 0.00144058 5 0.0072029 75 0.1080435
Flush 5,108 0.0019654 1 0.0019654 25 0.049135
Straight 10,200 0.00392465 0.5 0.001962325 10 0.0392465
Three of a kind 54,912 0.02112845 0.25 0.005282113 3 0.06338535
Two pair 123,552 0.04753902 0.07 0.003327731 0.7 0.033277314
Pair 1,098,240 0.42256903 0.02 0.008451381 0.1 0.042256903
Ace High 502,860 0.19349 0.01 0.001934851 0 0
0.04627845   0.462201442
        66.11%   66.03%

For a $150,000 jackpot, which the winning share takes $75,000, the expectation hovers around -17%:

Hands Probability 7 SC Paytable 7 SC EV 70 SC Paytable 70 SC EV
Royal flush 4 0.00000154 11,375* 0.0175175 11,375* 0.0175175
Straight flush 36 0.00001385 250 0.0034625 11,375 0.15754375
Four of a kind 624 0.0002401 30 0.007203 300 0.07203
Full house 3,744 0.00144058 5 0.0072029 75 0.1080435
Flush 5,108 0.0019654 1 0.0019654 25 0.049135
Straight 10,200 0.00392465 0.5 0.001962325 10 0.0392465
Three of a kind 54,912 0.02112845 0.25 0.005282113 3 0.06338535
Two pair 123,552 0.04753902 0.07 0.003327731 0.7 0.033277314
Pair 1,098,240 0.42256903 0.02 0.008451381 0.1 0.042256903
Ace High 502,860 0.19349 0.01 0.001934851 0 0
0.0583097   0.582435817
        83.30%   83.21%

* based on 1/8 probability of hitting the jackpot, 1/4 of winning $500, 1/8 of winning $1,000, $2,000, $3,000, $4,000 or $5,000.

It is unlikely* for the jackpot to exceed $150,000, so under no realistic jackpot conditions is “The Deal” favorable to the player. In fact, the jackpot needs to grow over $272,000 for the EV to be positive(*Update: the jackpot as of 12:30 GMT Friday,  January 27 is now over $470,000. Given that there now have been roughly 21.8 million losing entries, if the odds of the hitting the jackpot are truly 1 in 5,197,920, meaning that the jackpot wheel is fair, neither predetermined or unevenly weighted, we should have expected the jackpot to be hit 4 times by now. I said it was “rare” for the jackpot to exceed the break-even point, but it is likely that my assumption of the probabilities of the jackpot wheel are incorrect, despite the wheel graphic showing a supposed one-eighth likelihood per section. See Does PokerStars manually control when the jackpot is won?)

If you play once exactly every 12 hours for the minimum, then you may end up with a better return only because you may get a share of 50% of the jackpot that is evenly divided among all non-winners of “The Deal” in the past 12 hours when a jackpot is won. Anecdotally, this amounts to about $1 every three days or so (thus, $1 every 42 StarsCoin, which puts the expectation now in favour of the player, at the expense of all other players that play more than 7 StarsCoin per 12 hours).

It is evident that this strategy heavily relies on fewer unique players putting in a lot of their StarsCoin into the progressive jackpot. If everyone were to follow this strategy of maximum 7 StarsCoin per 12 hours, “The Deal” is a huge losing proposition for all players, and a very well-obfuscated one that greatly increases PokerStars’ profit.

*     *     *

You may like playing at GameSlush.com instead, where you can lose fake money to the house and not real money.

Socket.io 1.4 to 1.7.2 temporary fix for #2405: Server socket id doesn’t match client’s socket id

If you’re affected by the major change outlined by this reported issue here’s a temporary fix you may want to try to get things working again without having to change all of your own code:

find . -name "socket.io.js" -exec sed -i -e 's/socket\.id \= self\.engine\.id;/socket\.id \= socket\.nsp \+ "\#" \+ self\.engine\.id;/' {} \;
find . -name "socket.io.js" -exec sed -i -e 's/this\.nsps\[nsp\]\.id \= this\.engine\.id;/this\.nsps\[nsp\]\.id \= nsp \+ "\#" \+ this\.engine\.id;/' {} \;
find . -name "socket.io.js.map" -exec sed -i -e 's/socket\.id \= self\.engine\.id;/socket\.id \= socket\.nsp \+ "\#" \+ self\.engine\.id;/' {} \;
find . -name "socket.io.js.map" -exec sed -i -e 's/this\.nsps\[nsp\]\.id \= this\.engine\.id;/this\.nsps\[nsp\]\.id \= nsp \+ "\#" \+ this\.engine\.id;/' {} \;
find . -name "socket.io.slim.js.map" -exec sed -i -e 's/socket\.id \= self\.engine\.id;/socket\.id \= socket\.nsp \+ "\#" \+ self\.engine\.id;/' {} \;
find . -name "socket.io.slim.js.map" -exec sed -i -e 's/this\.nsps\[nsp\]\.id \= this\.engine\.id;/this\.nsps\[nsp\]\.id \= nsp \+ "\#" \+ this\.engine\.id;/' {} \;
find . -name "socket.io.min.js" -exec sed -i -e 's/n\.id\=o\.engine\.id/n\.id\=n\.nsp\+"\#"\+o\.engine\.id/' {} \;
find . -name "socket.io.min.js" -exec sed -i -e 's/this\.nsps\[t\]\.id\=this\.engine\.id/this\.nsps\[t\]\.id\=t\+"\#"\+this\.engine\.id/' {} \;
find . -name "socket.io.slim.min.js" -exec sed -i -e 's/n\.id\=o\.engine\.id/n\.id\=n\.nsp\+"\#"\+o\.engine\.id/' {} \;
find . -name "socket.io.slim.min.js" -exec sed -i -e 's/this\.nsps\[t\]\.id\=this\.engine\.id/this\.nsps\[t\]\.id\=t\+"\#"\+this\.engine\.id/' {} \;
find . -name "manager.js" -exec sed -i -e 's/socket\.id \= self\.engine\.id;/socket\.id \= socket\.nsp \+ "\#" \+ self\.engine\.id;/' {} \;

Running this as a bash script in the root folder of your projects that depend on socket.io-client will replace all instances in the socket.io-client code to use the naming convention prior to v1.4 (and thus maintain consistency across client and server): the namespace followed by # and then the engine id.

If you run the bash script and want to undo the above changes, you’ll have to reverse the sed regular expressions and rerun the script.

*     *     *

You may enjoy playing a game at GameSlush.com because it also uses socket.io.

CBC: Canada added 54,000 jobs last month. Reality: Canada lost nearly 100,000 productive jobs and replaced it with useless jobs

CBC recently published an intentionally vague article over the latest StatsCan report to paint a rosy economic picture for Canada and its government.

What the article ignores is the quality of the jobs over the quantity of the jobs created, instead touting the jobs and employment numbers designed to obfuscate the real facts.

Here are some tidbits from the actual StatsCan report summary that gives a more clear picture of Canada’s economic outlook:

From December 2015 to December 2016, employment increased by 2.0% in the service sector, while it declined by 1.6% in the goods-producing sector.

[…]

In 2016, employment in information, culture and recreation rose by 6.5% (+49,000) […] employment also increased in accommodation and food services (+2.6% or +31,000), construction (+2.0% or +27,000) and wholesale and retail trade (+1.4% or +38,000) […] There were more people employed in finance, insurance, real estate, rental and leasing (+3.5% or +39,000) in 2016. […] employment in natural resources fell 8.3% (-29,000) in 2016 […] In agriculture, employment was down by 4.7% (-14,000) […] The number of workers in manufacturing declined by 3.1% (-53,000).

And the least surprising statistic:

[…] the number of public sector employees increased by 2.0% (+71,000), driven by gains in public administration; information, culture and recreation; and health care and social assistance. The number of private sector employees rose by 1.9% (+222,000), with increases across a number of industries in the service sector.

What the state-run CBC fails to address that many sectors that actually contribute to real growth and wealth have lost a significant number of jobs, and are instead being replaced with service industry and public sector bureaucratic jobs (jobs that ultimately rely on taxpayers’ money to fund their salaries). The public sector and service industries produce no tangible, exportable goods or technology. Shuffling paper money around the country does not lead to true economic growth, contrary to Keynesian theory.

In summary, big government in Canada just got bigger in the past year and shows no signs of stopping.

*     *     *

If you want to support a dying sector in Canada, small-business and entrepreneurship (down 2.8% or 71,000 in 2016), you may want to hire me or visit GameSlush.com.

Bill C-16: a legal interpretation

An excellent take down of the legal aspects of Bill C-16 by D. Jared Brown highlights the totalitarian path Canada is heading towards by mandating compelled speech.

Merry Christmas, Canada.

*     *     *

If you don’t like the state pointing guns at you forcing to say what you may not believe in, you may like the lack of big government at GameSlush.com.

Is Facebook and “social media” contributing to the rise of social isolation?

A recent New York Times article has noted:

Since the 1980s, the percentage of American adults who say they’re lonely has doubled from 20 percent to 40 percent.

And the article concludes with a hypothesis:

A great paradox of our hyper-connected digital age is that we seem to be drifting apart. Increasingly, however, research confirms our deepest intuition: Human connection lies at the heart of human well-being.

Facebook and all its superficial interaction — the accumulation of “Likes”, “Friends” and vapid selfies — has had negative ramifications on real, personal interaction. Meaningful relationships require personal interaction, and happiness generally relies on having meaningful relationships. It is no wonder people are feeling lonelier and less happy despite being so-called “connected” by social media.

It is time to abandon Facebook, abandon the endless selfies, and go back to living in the moment with good company.  It is time to put down the smart phone and the anti-social media, and start talking face-to-face.

*     *     *

You can find good company and play a game with them at GameSlush.com.