U盘做了Ubuntu系统启动盘之后,没法被Windows识别

一 使用U盘制作Ubuntu系统启动盘之后,安装完,然后用于Windows copy文件的时候,不被识别。

二 方法如下:【参看网络资料】

1.1、下载DiskGenius Version: 5.6.1.1580 工具

下载地址:https://www.diskgenius.com/dyna_download/?software=DGEng5611580_x64.zip

或 官网下载页 https://www.diskgenius.com/download.php

2.2、点击DiskGenius.exe,启动进程
2.3、在DiskGenius主界面,右键点击不被识别的U盘,Erase Sectors[清除扇区]

等待20分钟左右,直到完成清除

2.4、然后U盘就可以被格式化了

--the end

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: %v\n", 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

Inkscape1.3版本,svg转png在Ubuntu Server20.04遇到的问题

一 Inkscape程序

https://inkscape.org/

Inkscape是矢量图形编辑器,以自由软件许可发布与使用。该软件的开发目标是成为强大的绘图软件,且能完全遵循与支持XML、SVG及CSS等开放性的标准格式,而且是跨平台的应用程序,支持Windows、Mac OS X、Linux及类UNIX版等操作系统。[维基百科]

二 开发的后端go程序,需求svg转png,刚好选用Inkscape程序。在Windows10,Ubuntu桌面版[Ubuntu 22.04.2 LTS]运行都是ok的,但是 Ubuntu Server 上运行会出错。

glibmm-WARNING Failed to wrap object of type 'GtkRecentManager'

Ubuntu Server 版本

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:    20.04
Codename:   focal

Ubuntu Server 版本上安装的Inkscape版本是1.3的,错误和这个url地址错误一样 https://gitlab.com/inkscape/inbox/-/issues/6903

Version info
    Inkscape 1.3-dev (8a0d19d550, 2022-05-02, custom) Linux Mint 20
    Inkscape 1.2-beta (0d9a0fea06, 2022-04-08) Linux Mint 20

Doesn't occur in Inkscape 1.1.2 (ccedf6bf22, 2022-02-24) Linux Mint 20

根据这个帖子的内容,所以,卸载1.3新版本,改安装 1.1 版本。

apt purge inkscape  
apt list | grep inkscape 

查看可以安装的版本,选择1.1版本安装。

apt install inkscape=1:1.1+rc+202105240936+c4e8f9ed74~ubuntu20.04.1

安装完成,后端就可以正常从svg转到png了。

Inkscape也支持svg转pdf格式。

--the end

百家乐Baccarat庄闲和胜率统计

一 开发了一个Go程序,来统计百家乐游戏中的庄闲和胜率情况。

  • 运行环境:vscode/ubuntu,32G内存
  • 运行条件:
  • 开启50个goroutine,每个goroutine循环10000次,也就是一共循环50万次
  • 每循环1次就是,牌靴中有8副牌的游戏流程[去掉大小鬼,每副牌52张]
  • 运行时间:2023-07-18 20:06:55
  • 运行时长:6:47(6分47秒)
  • 运行结果:

二 运行结果说明:

图表上的总运行次数代表的是,洗牌之后,每次下发闲家庄家的牌[闲家2张,庄家2张],并完成补牌整个流程,最终获胜的某个下注区域,这样的流程。

看起来,百家乐其实是游戏中,少有的庄闲对赌中,庄家没有占据大优势的游戏类别之一。

为方便记忆,可以简单取整,庄家 46%胜率,闲家45%胜率,和9%胜率。

三 可以参考:

维基百科中的 百家乐词条

https://zh.m.wikipedia.org/zh-cn/%E7%99%BE%E5%AE%B6%E6%A8%82

词条中庄胜率45.8597%,闲家胜率44.6247%,和胜率9.5156%

--the end

德州扑克Texas Holdem中5张公共牌出现的牌型概率

大约2014左右开始接触德州扑克游戏,然后就一直很喜欢德州扑克游戏。还看了很多德州扑克主播的讲解,买了很多德州扑克方面的书籍来看。

最初是在pokerstars这个平台玩,后来转到gg poker,大约2020年左右,慢慢转到打奥马哈[Omaha],先玩的是4张奥马哈,近期基本只玩5张奥马哈。
让人不好意思承认的是,一直是个亏损玩家。XD

一 开发的go程序,用于计算德州扑克,奥马哈游戏中,公共的5张牌,出现的牌型概率,实际上,这个测试结果,适用于任何发的2张,3张,4张,5张牌

  • 运行环境:vscode/ubuntu,32G内存
  • 运行条件:
  • 开启50个goroutine,每个goroutine循环10000次,也就是一共运行50万次
  • 每循环1次就是,牌靴中有1副牌的游戏流程[去掉大小鬼,每副牌52张]
  • 运行时间:2023-07-18 20:16:37
  • 运行时长:2:04(2分4秒)
  • 运行结果:

程序输出的 svg图片

二 运行结果说明

个人觉得比较有用的,就是,5张公共牌中,有49.25%会出现至少一对,也就是,flop后,如果手上有top set的话,其实all in打光应该也是 正ev的。

希望对看到的人有一点帮助。

--the end

终极德州扑克Ultimate Texas Holdem,7张牌出现一对的概率

在youtube上常看一个华人朋友在美国赌场里玩这个终极德州扑克游戏,看的多了,总觉得有一个场景是值得深思一下的,所以,才就确认一下概率。

这是 youtube 用户 杨洋 https://www.youtube.com/@payme1314 的赌场视频。有兴趣的朋友可以看看。

一 开发的go程序,用于计算终极德州扑克,在最后一轮river圈下注play的时候,如果自己没有一对的情况下,是否应该下注

  • 运行环境:vscode/ubuntu,32G内存
  • 运行条件:
  • 开启50个goroutine,每个goroutine循环10000次,也就是一共运行50万次
  • 每循环1次就是,牌靴中有1副牌的游戏流程[去掉大小鬼,每副牌52张]
  • 运行时间:2023-07-18 20:35:31
  • 运行时长:3:19(3分19秒)
  • 运行结果:
msg="3,total_item_cnt:500000,牌张数:2, 牌型:至少一对,个数:29666,百分比:5.93"
msg="3,total_item_cnt:500000,牌张数:3, 牌型:至少一对,个数:86543,百分比:17.31"
msg="3,total_item_cnt:500000,牌张数:4, 牌型:至少一对,个数:161674,百分比:32.33"
msg="3,total_item_cnt:500000,牌张数:5, 牌型:至少一对,个数:246208,百分比:49.24"
msg="3,total_item_cnt:500000,牌张数:6, 牌型:至少一对,个数:327822,百分比:65.56"
msg="3,total_item_cnt:500000,牌张数:7, 牌型:至少一对,个数:394692,百分比:78.94"

二 运行结果解释

终极德州扑克是闲家和庄家对赌【和德州扑克 Texas Holdem不同,德州扑克是闲家之间的对赌】,和庄家比大小。庄家2张牌,闲家2张牌,5张公共牌。直到闲家三次下注结束,庄家才会亮牌,在此之前,庄家为暗牌。

终极德州扑克中,闲家会有三次下注机会

2.1 看到自己的2张牌,但没有看到公共牌的时候,pre flop 圈,可以下注3倍或4倍 ante 的筹码
2.2 看到3张公共牌了之后,flop圈,可以下注2倍的 ante筹码
2.3 看到所有5张公共牌之后,river圈,可以下注1倍的ante筹码,或者fold 放弃

这里要讨论的,就是 这个 river圈,第三次下注。

在闲家没有拿到任何对子,也没有比对子更大的牌型的情况下,是否应该下注1倍的ante筹码到play区,和庄家比大小。

根据程序运行10万次的结果,如果自己没有对子,庄家手里的2张牌和5张公共牌,组成对子的概率为78%。

在river圈,还没有下注play的时候,闲家在ante和blind位都会有1倍的筹码。

假设我们下注1倍的ante筹码在play位,
庄家2张牌+5张公共牌组合的最大牌型
闲家2张牌+5张公共牌组合的最大牌型 进行比较

来计算一下底池赔率,我们需要拿1倍的ante筹码下注到play区域,去赢取 play+ante+blind【如果在我们预设的场景下,庄家输了,说明庄家一定是 not qualify,在庄家not qualify的时候,不赔付ante区】,用1倍的筹码去赢取3倍的筹码,底池赔率就是25%

如果胜率大于底池赔率,则长期是 正ev
如果胜率小于底池赔率,则长期是 负ev

所以,闲家需要至少25%的胜率,才可以下注play区。现在来看,闲家胜率最大也就22%,所以,根据理论,
在终极德州扑克中,在river圈,当闲家没有拿到一对的时候,不应该选择下注,而应该fold。

P.S. 如果游戏规则为,没有这个qualify的限制,只要庄家输了,都会赔付ante区域的筹码,那么,闲家在river圈,任何情况下下注play区域都是正ev的。

三 网络上找到的规则链接,原地址

https://www.onlineunitedstatescasinos.com/games/casino-texas-holdem-poker/ultimate-texas-holdem/

--the end