小编gpa*_*nda的帖子

使用 Plotly Python API 生成静态 HTML 仪表板 - 控制元素布局

我正在研究华丽而强大的 Plotly Python API,其目标是生成静态 html 仪表板。

这提出了两个问题:

  1. 为了生成 html,我看到以下示例。图表似乎是通过 URL 嵌入的。自从plotly 开源以来,这个 URL 嵌入实现仍然适用吗?现在有其他方法可以将绘图发送到静态 html 吗?

  2. 如何控制绘图/仪表板元素的布局?例如,在 Bokeh 中,我们可以执行以下操作:

    bar = Bar(<define bar plot>) line = Line(<define line plot>) donut = Donut(<define donut chart>) bar_line_panel = hplot(bar, line) final_layout = vplot(bar_line_panel, donut) output_file('foo.html') show(final_layout)

渲染的 html 文件将包含圆环图上方彼此相邻的折线图和条形图。plotly 中是否有类似的功能,或者是否需要模板和 html/css 争论来指定绘图元素的布局,如本所示?

感谢您抽出时间,非常期待在 Plotly 中创建一些交互式可视化!

data-visualization python-3.x plotly

7
推荐指数
0
解决办法
1891
查看次数

通过 HTTP 中间件验证 WebSocket 连接 - Golang

问题陈述:

我正在尝试使用 Golang 中的基本中间件来保护 websocket 升级程序 http 端点,因为WebSocket 协议不处理授权或身份验证

社区建议

  1. 有些人建议,尽管含糊不清,“我建议使用应用程序的代码来验证升级握手,以验证 HTTP 请求。”
  2. 还有人建议“连接后,客户端需要发送用户名和密码,需要由服务器检查。如果不匹配,请关闭连接”,但这似乎不习惯。

战略:

到目前为止,我失败的策略是尝试上面的社区策略 1,以确保X-Api-Key通过中间件使用自定义标头升级连接,并且只升级使用匹配密钥启动对话的客户端。

下面的代码the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header在服务器端产生。

问:

我想寻求帮助理解:

  • 如果我对策略 1 的看法有缺陷,我该如何改进它?似乎GET通过 http发送初始身份验证,随后通过方案的升级请求ws被服务器拒绝。
  • 如果策略 2 可行,如何实施?

想法和建议、示例、要点表示赞赏,如果我能进一步澄清或重述,请提供建议。

server.go:

package main

import (
    "flag"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

func main() {
    var addr = flag.String("addr", "localhost:8080", "http service address")
    flag.Parse()

    http.Handle("/ws", Middleware(
        http.HandlerFunc(wsHandler),
        authMiddleware,
    ))
    log.Printf("listening …
Run Code Online (Sandbox Code Playgroud)

authentication http go websocket

6
推荐指数
1
解决办法
6032
查看次数

子匹配中的正则表达式替换

给定一个字符串(日志文件中的一行):

Date=2017-06-29 03:10:01.140 -700 PDT,clientDataRate="12.0,18.0,24.0,36.0,48.0,54.0",host=superawesomehost.foo,foo=bar
Run Code Online (Sandbox Code Playgroud)

我想用一个空格替换逗号,但只能在双引号内。

想要的结果:

Date=2017-06-29 03:10:01.140 -700 PDT,clientDataRate="12.0 18.0 24.0 36.0 48.0 54.0",host=superawesomehost.foo,foo=bar
Run Code Online (Sandbox Code Playgroud)

我已经开始使用正则表达式和 ReplaceAllString 的基本组合,但我很快意识到我不明白如何实现实现这一点所需的匹配组 (?)。

package main

import (
    "fmt"
    "log"
    "regexp"
)

func main() {
    logLine := "Date=2017-06-29 03:10:01.140 -700 PDT,clientDataRate=\"12.0,18.0,24.0,36.0,48.0,54.0\",host=superawesomehost.foo,foo=bar"
    fmt.Println("logLine:        ", logLine)

    reg, err := regexp.Compile("[^A-Za-z0-9=\"-:]+")
        if err != nil {
                log.Fatal(err)
        }

    repairedLogLine := reg.ReplaceAllString(logLine, ",")
    fmt.Println("repairedLogLine:", repairedLogLine )   
}
Run Code Online (Sandbox Code Playgroud)

非常感谢所有帮助。

regex go

2
推荐指数
1
解决办法
697
查看次数

在Golang中为switch中的类型实现逻辑OR

我有一个[]interface{}迭代,并检查交换机中每个元素的类型.我想为几种数字类型添加一个'catch-all'的情况,即int || float32 || float64.

我们似乎能够检查一个元素是否是一个单独的不同类型,但我无法弄清楚用||(或)检查多个类型的语法.

这可能吗?我试过的(游乐场):

package main

import (
    "fmt"
)

func main() {

    things := []interface{}{"foo", 12, 4.5, true}

    for _, thing := range things {

        switch t := thing.(type) {

        // How can we implement logical OR for types to implement a catch-all for numerics?
        // Throws error: "type <type> is not an expression"
        // case ( int || float64 ) :
        //  fmt.Printf("Thing %v is a 'numeric' …
Run Code Online (Sandbox Code Playgroud)

types interface go

-1
推荐指数
2
解决办法
2694
查看次数