2023-08-26-go项目传递bool类型的命令行参数flag时需要留意的

一 这里命令行参数解析使用的是第三方包 go-flags

github地址 https://github.com/jessevdk/go-flags

在README.md文件中,有部分关于bool类型的说明

var opts struct {
    // Slice of bool will append 'true' each time the option
    // is encountered (can be set multiple times, like -vvv)
    Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"`
}

This specifies one option with a short name -v and a long name –verbose. When either -v or –verbose is found on the command line, a ‘true’ value will be appended to the Verbose field. e.g. when specifying -vvv, the resulting value of Verbose will be {[true, true, true]}.

【只要在命令行中找到 -v 或–verbose,那么,参数对应的值就是 true】

【如果需要设置false,则 去掉 -v 或–verbose 就好】

// Make some fake arguments to parse.
args := []string{
    "-vv",
}

fmt.Printf("Verbosity: %vn", opts.Verbose)

// Output: Verbosity: [true true]

二 在 vscode中的具体使用

  • launch.json 中设置

    "configurations": [
        {
            "name": "lobby_server",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/cmd/lobby_server",
            "args": [
                "--debug",//bool flag只要设置 short或long,值就是true
                "--lobby_config_file","lobby_8101.toml",
            ]
        },

main.go 文件

import(
"github.com/jessevdk/go-flags"
)

// 命令行参数
type CmdParams struct {
    Debug             bool   `short:"d" long:"debug" description:"是否debug"`
    Lobby_config_file string `short:"l" long:"lobby_config_file" description:"大厅配置文件"`
}

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
    }()

    //解析参数
    var cmd_params CmdParams
    if _, err := flags.Parse(&cmd_params); err != nil {
        panic("Parse err:" + err.Error())
    }

    if !cmd_params.Debug {
        xdebug.Set_release()
    }

    //...
}

三 调试跟踪代码

具体可详细查看 函数 parseOption

func (p *Parser) parseOption(s *parseState, name string, option *Option, canarg bool, argument *string) (err error) {
    if !option.canArgument() {//bool类型 不能带参数
        if argument != nil {
            return newErrorf(ErrNoArgumentForBool, "bool flag `%s' cannot have an argument", option)
        }

        err = option.set(nil)
    } else if argument != nil || (canarg && !s.eof()) {
    //...
    }
    //....
}   

func (option *Option) canArgument() bool {
    if u := option.isUnmarshaler(); u != nil {
        return true
    }

    return !option.isBool()
}

//运行参数是否是bool类型
func (option *Option) isBool() bool {
    tp := option.value.Type()

    for {
        switch tp.Kind() {
        case reflect.Slice, reflect.Ptr:
            tp = tp.Elem()
        case reflect.Bool:
            return true
        case reflect.Func:
            return tp.NumIn() == 0
        default:
            return false
        }
    }
}

–the end

2023-08-14-借用gofox项目代码整理了一个go管理后端

一 感谢 gofox 项目无私的贡献

技术栈 beego + layui + mysql https://github.com/pzhen/gofox

二 我自己管理后端的界面

三 这两个月的业余时间,都在整理两个Go开发的telegram机器人游戏,一直缺少一个管理后端,可以直观展示游戏数据。找来找去,感觉gofox看起来比较简洁清晰。

这个管理后端的整理,对于beego的路由树也加深了一些认知。

–the end

2023-09-22-关于telegram应用中的端对端加密etee

这两天在了解关于端对端加密[End-to-end encryption,简称 E2EE]的信息,偶尔搜索到的。 如果需要使用Telegram端对端加密聊天功能,必须额外开启才行【只有手机端Android/iOS才支持】。

一 端到端加密的Telegram如何在俄乌战争中“异军突起” https://www.51cto.com/article/708030.html

杜罗夫的这一说法遭到网络安全专家质疑。据长期从事安全研究的鲁那·山特维克(Runa Sandvik)称,Telegram并非对所有数据端到端加密,而且加密选项并非默认功能,需要用户手动开启。

WhatsApp和Signal所有的聊天记录和通话都默认使用端到端加密。Telegram对通话进行端对端加密,但只有开启加密功能的用户才能享受聊天记录加密。

EFF密码学家乔恩·卡拉斯(Jon Callas)表示,Telegram内的关键组成部分——大型群聊,并没有端到端的安全保障。

但卡拉斯也表示,在不考虑技术安全保护的情况下,参与大型群聊在网络上暴露的风险会增加。“有句老话说,三个人无法保守秘密,除非其中两个人死了。”他解释说,随着群聊规模扩大,可能泄密的风险也会随之增加。

二 Telegram的安全和隐私设置 https://www.telegramos.org/jiaocheng/153.html

- 端到端加密不是 Telegram 中的默认选项
    - 根据撰写本文时Telegram 的隐私政策,这些数据不用于广告目的。然而,正如我们从经验中得知的那样,政策可能会发生变化。

- Telegram 的 iOS、Android 和 macOS 应用程序中提供了秘密聊天功能。网页版和 Windows 应用不支持密聊;他们无法确保在设备上安全存储聊天内容。

- 电报Telegram推荐隐私设置

    为了不与所有 5 亿以上的 Telegram 用户分享不必要的细节,请适当配置您的个人资料隐私。为此,请通过 Telegram 的隐私设置,更改设置值——默认情况下,所有人都可以使用所有选项和数据。我们推荐以下内容:

    电话号码 → 谁可以看到我的电话号码-没有人。
    电话号码 → 谁可以通过我的号码找到我-我的联系人。
    Last Seen & Online → 谁可以看到我的时间戳-没有人。
    个人资料照片 → 谁可以看到我的个人资料照片-我的联系人。
    通话 → 谁可以给我打电话-我的联系人(或任何人,如果您愿意)。
    Calls→ Peer-to-peer —我的联系人(或没有人,如果您不想与聊天伙伴共享您的 IP 地址)。
    转发消息 → 谁可以在转发我的消息时向我的帐户添加链接-我的联系人。
    群组和频道 → 谁可以添加我-我的联系人。

–the end

2024-07-25-blackjack中的庄家爆牌率计算

一 近期看Blackjack游戏比较多,所以,想知道当dealer明牌为某张时,爆牌的概率大体情况

  • 运行环境:vscode/windows
  • 运行条件:
  • 开启10个goroutine,每个goroutine循环10000次,也就是一共运行10万次 每循环1次就是,牌靴中有4副牌[去掉大小鬼,每副牌52张],dealer明牌为指定的牌

从结果来看

1 dealer明牌为2,3,4,5,6时爆牌率逐渐提高
可以化简记忆为,依次递增2%:
明牌为2,35%爆牌率,
明牌为3,37%爆牌率,
明牌为4,39%爆牌率,
明牌为5,41%爆牌率,
明牌为6,43%爆牌率,

2 从7开始,爆牌率可以简化记忆为逐渐递减,也是2%
明牌为7,26%爆牌率,
明牌为8,24%爆牌率,
明牌为9,22%爆牌率,
明牌为10,J,Q,K,20%爆牌率,
明牌为A,10%爆牌率,

3 从7开始,可以简化理解为在底牌中出现10的概率大约为35%,
所以,
当明牌为7时,组成17的概率大约为35%,
当明牌为8时,组成18的概率大约为35%,
当明牌为9时,组成19的概率大约为35%,
当明牌为10,J,Q,K[在Blackjack中它们权重一样]时,组成20的概率大约为35%,
当明牌为A时,组成21的概率大约为35%,

运行结果:

Blackjack,4副牌[4*52=208张],dealer明牌为♦2,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 14080 14.08%
18 13525 13.53%
19 13048 13.05%
20 12321 12.32%
21 11810 11.81%
22 14988 14.99% 35.22%
23 6220 6.22%
24 5518 5.52%
25 4681 4.68%
26 3809 3.81%

Blackjack,4副牌[4*52=208张],dealer明牌为♦3,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 13395 13.40%
18 13175 13.18%
19 12622 12.62%
20 11932 11.93%
21 11535 11.54%
22 9646 9.65% 37.34%
23 14194 14.19%
24 5287 5.29%
25 4460 4.46%
26 3754 3.75%

Blackjack,4副牌[4*52=208张],dealer明牌为♦4,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 13051 13.05%
18 12493 12.49%
19 12053 12.05%
20 11706 11.71%
21 11092 11.09%
22 9604 9.60% 39.61%
23 8814 8.81%
24 13113 13.11%
25 4486 4.49%
26 3588 3.59%

Blackjack,4副牌[4*52=208张],dealer明牌为♦5,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 12060 12.06%
18 12282 12.28%
19 11925 11.92%
20 11230 11.23%
21 10865 10.87%
22 9374 9.37% 41.64%
23 8481 8.48%
24 7884 7.88%
25 12296 12.30%
26 3603 3.60%

Blackjack,4副牌[4*52=208张],dealer明牌为♦6,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 16433 16.43%
18 10605 10.61%
19 10739 10.74%
20 10221 10.22%
21 9754 9.75%
22 8676 8.68% 42.25%
23 8122 8.12%
24 7334 7.33%
25 6869 6.87%
26 11247 11.25%

Blackjack,4副牌[4*52=208张],dealer明牌为♦7,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 37073 37.07%
18 13765 13.76%
19 7774 7.77%
20 7897 7.90%
21 7345 7.34%
22 6493 6.49% 26.15%
23 5829 5.83%
24 5163 5.16%
25 4655 4.66%
26 4006 4.01%

Blackjack,4副牌[4*52=208张],dealer明牌为♦8,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 12997 13.00%
18 36034 36.03%
19 12830 12.83%
20 6834 6.83%
21 7020 7.02%
22 5981 5.98% 24.29%
23 5570 5.57%
24 4819 4.82%
25 4283 4.28%
26 3632 3.63%

Blackjack,4副牌[4*52=208张],dealer明牌为♦9,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 11934 11.93%
18 11922 11.92%
19 35246 35.25%
20 11901 11.90%
21 6170 6.17%
22 5660 5.66% 22.83%
23 5058 5.06%
24 4534 4.53%
25 4080 4.08%
26 3495 3.50%

Blackjack,4副牌[4*52=208张],dealer明牌为♦T,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 11146 11.15%
18 11242 11.24%
19 11150 11.15%
20 34278 34.28%
21 11245 11.24%
22 5084 5.08% 20.94%
23 4698 4.70%
24 4313 4.31%
25 3666 3.67%
26 3178 3.18%

Blackjack,4副牌[4*52=208张],dealer明牌为♦J,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 11205 11.21%
18 11132 11.13%
19 11190 11.19%
20 33963 33.96%
21 11192 11.19%
22 5175 5.17% 21.32%
23 4848 4.85%
24 4242 4.24%
25 3799 3.80%
26 3254 3.25%

Blackjack,4副牌[4*52=208张],dealer明牌为♦Q,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 11286 11.29%
18 11051 11.05%
19 11270 11.27%
20 34145 34.14%
21 11131 11.13%
22 5132 5.13% 21.12%
23 4702 4.70%
24 4327 4.33%
25 3790 3.79%
26 3166 3.17%

Blackjack,4副牌[4*52=208张],dealer明牌为♦K,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 11314 11.31%
18 11237 11.24%
19 11073 11.07%
20 34093 34.09%
21 11107 11.11%
22 5233 5.23% 21.18%
23 4649 4.65%
24 4246 4.25%
25 3781 3.78%
26 3267 3.27%

Blackjack,4副牌[4*52=208张],dealer明牌为♦A,总运行次数10w次

dealer停牌时点数 出现次数 百分比 爆牌率
17 12948 12.95%
18 13041 13.04%
19 13026 13.03%
20 13172 13.17%
21 36280 36.28%
22 3197 3.20% 11.53%
23 2765 2.77%
24 2237 2.24%
25 1839 1.84%
26 1495 1.49%

–the end

2024-07-27-网络上其他资料上的blackjack庄家爆牌率比较

这几天经常回顾默想Blackjack中庄家爆牌率,然后发现,上次的文章中缺少了明牌为A的爆牌率,所以又增加了A的情况,更新了文章。 还搜索了一下网络上关于Blackjack中庄家爆牌率的其他资讯。

发现还有两篇文章可以比对查看。

一 Blackjack Dealer Bust Percentages

https://www.liveabout.com/blackjack-dealer-bust-percentages-537109#:~:text=When%20the%20dealer%20is%20showing,Ace%2C%2010%2C%20and%209.

文章中的数据如下

Blackjack Dealer Bust Percentages
Dealer Card 2 3 4 5 6 7 8 9 10 Ace
Bust % 35% 37% 40% 42% 42% 26% 24% 23% 23% 17%
这个数据中A的爆牌率显示的是17%,个人观感,应该是有一点差错。

二 Blackjack Odds and Probability

https://www.onlineblackjackrealmoney.org/strategy/blackjack-odds-probability

文章中的数据如下

Dealer Bust Out Rate
Dealer Card 2 3 4 5 6 7 8 9 10 Ace
Bust % 35.30% 37.56% 40.28% 42.89% 42.08% 25.99% 23.86% 23.34% 21.43% 11.65%
这个数据基本和我运算的结果一致

文章中还有一个数据值得一说,当前牌值点数,如果需要再次hit的时候,对应的爆牌率

Busting when Hitting
Cards 20 19 18 17 16 15 14 13 12
Bust % 92% 85% 77% 69% 62% 58% 56% 39% 31%
其实这个表值不需要记忆,可以推算出来,在Blackjack中的牌类型,A,2,3,,,,10,J,Q,K一共13张。
任意一种牌类型出现的概率就是1/13=7.69%
如果手里现在20点,那么只有拿到A才不会爆牌,所以,有12种牌类型会导致爆牌,12/13≈92%
如果手里现在19点,那么只有拿到A,2才不会爆牌,所以,有11种牌类型会导致爆牌,11/13≈85%
其他依次类推

可以简化记忆一下,每一种牌类型出现的概率为8,直接计算就好。
比如拿到16的爆牌率,就是6,7,8,9,T,J,Q,K 一共8张,则爆牌率就是64%。

–the end

2024-08-01-baccarat百家乐中闲家-庄家点数概率分布

一 百家乐中,庄家和闲家因为补牌规则不同,导致点数的分布也不是均匀和相同的

  • 运行环境:vscode/windows
  • 运行条件:
  • 开启10个goroutine,每个goroutine循环1000次,也就是一共运行1万次 每循环1次就是,牌靴中有8副牌[去掉大小鬼,每副牌52张]

从结果来看

1 闲家和庄家出现3的概率大致相同
2 庄家出现4,5的概率比闲家多
3 闲家出现0,1,2,6,7,8,9的概率比庄家多
4 庄家和闲家某一家中都是6,7,8,9出现的概率最多,4个点值相加的百分比基本上是50%

运行结果:

Baccarat,8副牌[8*52=416张],点数次数统计,总运行次数1w次

闲家点数 出现次数 百分比 总手数
0 75901 9.42% 806123
1 59721 7.41%
2 59952 7.44%
3 60278 7.48%
4 59643 7.40%
5 60464 7.50%
6 107392 13.32%
7 107987 13.40%
8 107258 13.31%
9 107527 13.34%

Baccarat,8副牌[8*52=416张],点数次数统计,总运行次数1w次

庄家点数 出现次数 百分比 总手数
0 71494 8.87% 806123
1 55995 6.95%
2 55501 6.88%
3 58516 7.26%
4 75231 9.33%
5 81077 10.06%
6 97617 12.11%
7 103665 12.86%
8 103138 12.79%
9 103889 12.89%

–the end

2024-08-29-baccarat百家乐大路图显示

一 因为需要测试同一靴牌,在不同下注策略的时候,盈利结果如何,所以增加大路图显示,方便比对

  • 可选显示节点序号
  • 大路图上不包含Tie[因为在测试多种不同的下注额策略的时候,Tie基本上不作为下注选项]
  • 使用的svg包[https://github.com/ajstarks/svgo]
  • 有长龙,单跳,双跳 特殊形态的简单检测
  • 以积分10为基准,下注额策略为斐波那契策略
  • 实际结果和预测的押注区吻合,则打对勾,否则,则叉叉
  • 节点右上角为下注额

–the end

2024-09-10-一个体验不错的加密货币博彩网站stake.com

一 推荐Chrome浏览器Sider插件

Sider是一个集成到Chrome/Edge浏览器中的插件,为您提供AI助理服务,可以无缝集成到您的日常工作流程中,使浏览、阅读和写作更加高效。

二 在Youtube上偶尔看到有Up主在stake.com上游戏

目前是没看到有对应的app,只能web在线游戏 关于stake.com简介,Sider给的答复:

Stake是一家澳大利亚-库拉索的在线赌场,由Medium Rare NV运营,持有库拉索的在线赌场许可证。
它主要接受加密货币进行游戏,用户可以在网站上直接购买加密资产。
竞技和大奖游戏、老虎机及现场直播赌场都是其提供的游戏类型。

个人体验的主要是 Baccarat和Blackjack。 网站上也有很多老虎机和轮盘。

网站有两个特别实用的工具,就是

2.1 个人资料-保险库

2.2 个人资料-统计数据

三 注册和充值提现

3.1 注册:

按照提示step by step 就好,很简单。关于个人真实信息,看起来并不太需要[有需要上传护照或身份证明的项,感觉上可以使用虚假资讯],使用gmail注册。

3.2 充值:

我使用ustd-trc20充值,2分钟就可以到账,出乎意外的快捷。

3.3 提现:

我使用ustd-trc20提现,1-2分钟就可以到账。

3.4 个人资料-设置-优惠-迎新优惠-代码:

这个是我在youtube上随便找的一个填的[也可以不填],估计也没有多少优惠,不确定。

–the end

2024-09-15-百家乐大路图中的列分布情况统计

一 百家乐大路图中的列分布情况统计

  • 运行环境:vscode/windows
  • 运行条件:
  • 开启10个goroutine,每个goroutine循环100次,也就是一共运行1000次,每循环1次就是,牌靴中有8副牌[去掉大小鬼,每副牌52张]

简单归纳为:1000靴牌,每靴牌中有8副扑克,统计列分布

列节点数 列数/总列数 百分比 说明
1 16346/32446 50.3791% 总手数63868[去掉和局的情况]
2 8294/32446 25.5625
3 3963/32446 12.2141%
4 1993/32446 6.1425%
5 912/32446 2.8108%
6 504/32446 1.5534%
7 211/32446 0.6503%
8 122/32446 0.3760%
9 42/32446 0.1294%
10 27/32446 0.0832%
11 16/32446 0.0493%
12 6/32446 0.0185%
13 5/32446 0.0154%
14 2/32446 0.0062%
15 1/32446 0.0031%
16 2/32446 0.0062%
从结果来看,大致可以归纳为
1 一列中有一颗的情况,有1/2的情况发生
2 一列中有两颗的情况,有1/4的情况发生
3 一列中有三颗的情况,有1/8的情况发生
4 一列中有四颗的情况,有1/16的情况发生
5 一列中有五颗的情况,有1/32的情况发生
...
n 一列中有n颗的情况,有1/(n的2次方)的情况发生

–the end

2024-10-04-使用cocoscreator2-4-12写了一个baccarat百家乐下注助手

记录一下整个过程

一 Go后端起源

最初是使用Go计算了一下百家乐的各种概率,然后想探索一下 下注区策略/下注额策略,或者可以找到一种更加接近盈利的办法。 根据计算的结果来看,下注额的策略,其实归根到底就是 倍投。但因为赌场限额的问题,所以,全局倍投肯定是行不通的。只能使用局部倍投。 至于下注区策略,无论怎么下注,排除掉和的样本,胜率都只是接近50%,想在下注区就战胜赌场,个人感觉是不太可能。

二 JavaScript前端[开发IDE:Cocos Creator],打包Android APK

过程中,使用的工具以及可能需要留意的地方

  • 2.1 工具Cocos Creator[官网 https://www.cocos.com/creator] ,编码语言JavaScript
    • Cocos Creator最新版本3.8.3,我使用的版本 2.4.12
    • 首先需求大致确定,然后开始规划布局/场景/视图,再就是编码
    • 区分 节点和脚本
    • Scene除非必要,尽量少一些
    • 资源需要预加载
  • 2.2 工具Visual Studio Code
    • 主要是脚本的编码和功能测试
    • 使用 Chrome浏览器调试
  • 2.3 工具Android Studio

    • 打包APK,这部分比较繁琐,安装NDK[Native Development Kit],ADK[Andorid Development Kit],JDK[Jave Development Kit],gradle等工具包。最好是有vpn,否则下载也许会有麻烦
    • 使用android模拟器查看日志

      1、打开夜神的安装目录:D:Program FilesNoxbin
      2、在安装目录空白处按住shift+鼠标右键,然后点击在“此处打开命令行”或者“在此处打开Powershell窗口”(win10)
      3、然后在命令行中输入命令 .nox_adb logcat > log.txt
      4、日志就会不断输出到log.txt