整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

从技术视角看西安一码通(系列)


西安一码通“崩”过2次,网上“声讨”声一片,这可能是个综合性问题。单纯从技术角度来说,可见技术在关键时刻的作用,作为同行,个人深感压力巨大,责任巨大。

截止博客发表日期,网上关于为什么会“崩溃”的解释很多,其中有一篇汇集了众多“技术大咖”的讨论结果,就个人浅见,这些讨论恨不得把所有的应对大数据、高流量的技术都加进去。

不妨带着你们,单纯从技术视角,一步一步来“猜测”这个二维码背后的故事。这里会持续更新,看看我们最终能了解到什么层面。

结论

不妨用平和的心态从技术视角来一步一步了解一码通。

我的一码通

使用“草料二维码”扫描【我的一码通】后,解析出来的是个登录界面:

网址如下:

https://data.xa.gov.cn/ptrace/view/login.html?
code=902068esc6a7cde2dfa2979d731c3544b04cc1c516b0c04
dfpdff0ac6237ss30995b7f29fa2de3e3fc14a3


网址信息

从网址可以得到以下信息:

1) 二维码信息

二维码表包含的信息做了安全防护,我们访问后的链接是:防疫人员的登录界面。

https://data.xa.gov.cn/ptrace/view/login.html

毫无疑问,背后做了【认证和鉴权】。这个界面网址.cn结尾,表明政府部门,从网页下方可看到具体部门。

可以推测:在【认证】和【鉴权】模块,需要有一个【防疫监督员】的角色。

试想一下,那么多核酸监测点,每个采集核酸“拭子”的“点位”都需要分配一个【防疫监督员】的账号,光是账号分配管理,就是个“艰巨”的工作。

2)code参数

code=902168esc6a7cde2dffda2979d73fdac35554b04cc1c516b0c04dfpdff0ac6237ss30995b7f29fa2de3e3fc14a0

PS: code已做部分修改

后台通过这个code参数,应该可以解析“我”的这些信息:

  • 基本信息

idCard(gender、birthDay、age)、name

  • 位置信息

打开二维码的时候的位置信息(经纬度)

  • 时间信息

当前“亮码”的时间

认真看一下这个code,前面是数字,这个数字不知道是否有特殊的含义,

【902168】,不过从设计角度考虑,这个code是应该有一定的【编写规则的】,通过code可能会允许很直白的看到一些可以公示出来的一些信息。不妨猜测一下,这个code是一个序号,笔者多次扫描,发现未发生变化,可见是个固定的值,具体含义暂不清楚。

3)参与方多

每个人的一码通数据,最终要到上一级部门、各市的数据会到省、到国家,如果可能的话,部分数据可能还会和国际接轨(个人推测)

从技术角度来看,涉及部门多,单位多意味着数据交互方多。一旦交互方面比较多,会极大增加沟通成本。

举个简单的例子:

公司:A

部门1-市级:G1

部门2-省级:G2

部门3-国家级 G3

公司:B

公司A有一个个自研产品,内部迭代到了v3.5,除了第三方的SDK之外,不涉及太多和三方的对接,这样的产品单纯从和外界互动的角度来衡量“复杂性”是简单很多的;

假如现在A中标需要开发这个【一码通】产品,那么数据流向和互动会复杂一些:

现在需要和G1对接,部分数据要从G1获取;然后数据->G1 ;

G1-> G2,G2-> G3。数据量会从小到大,背后还需要大数据相关部门参与。

由于时间紧迫,A需要和B合作才能快速推出部分功能,数据流向可能会增加:

B -> G1。A->B  B->A等


大体这样一想,数据流复杂了,业务自然就复杂了,对技术的要求会高很多,具体要求是什么,还有待根据新闻和个人思考进一步剖析。

4)更多网址信息

通过1)二维码信息,我们已经知道【我的一码通】背后是一个网址:

https://data.xa.gov.cn/ptrace/view/login.html

这个网址携带了一个包含【个人信息的】”code“参数,这个参数包含了你相关的信息。

继续"研究下"这个网址,去掉:login.html后会发现进入到了一个功能很多的界面:

https://data.xa.gov.cn/ptrace/view/



回头来看,【我的电子码】只是众多功能中”微小“的一个。所以,如果你觉得"一码通"是个很"简单"的业务,那可能就有点小瞧了。

5)发现Nginx

继续从网址入手,去掉/view之后发现:

https://data.xa.gov.cn/ptrace/

这说明背后用到了Nginx,且Nginx的版本是:1.16.1。从官网看最新版本是1.21.5。

可以推测,前端可能使用Nginx部署的,至于是否使用了Nginx来做负载,暂未看出"蛛丝马迹"。

后文

后续如何,请听下回分解……

者: 俊欣

来源:关于数据分析与可视化

今天小编来为大家安利另外一个用于绘制可视化图表的Python框架,名叫Dash,建立在FlaskPlotly.js以及React.js的基础之上,在创建之出的目的是为了帮助前端知识匮乏的数据分析人员,以纯Python编程的方式快速制作出交互特性强的数据可视化大屏,在经过多年的迭代发展,如今不仅仅可以用来开发在线数据可视化作品,即便是轻量级的数据仪表盘、BI应用甚至是博客或者是常规的网站都随处可见Dash框架的影子,今天小编就先来介绍一下该框架的一些基础知识,并且来制作一个简单的数据可视化大屏。

Dash框架中的两个基本概念

我们先来了解一下Dash框架中的两个基本概念

  • Layout
  • Callbacks

Layout顾名思义就是用来设计可视化大屏的外观和布局,添加一些例如下拉框、单选框、复选框、输入框、文本框、滑动条等组件,其中Dash框架对HTML标签也进行了进一步的封装,使得我们直接可以通过Python代码来生成和设计每一个网页所需要的元素,例如

<div>
    <h1>Hello World!!</h1>
    <div>
        <p>Dash converts Python classes into HTML</p>
    </div>
</div>

我们转化成DashPython结构就是

html.Div([
    html.H1('Hello Dash'),
    html.Div([
        html.P('Dash converts Python classes into HTML'),
    ])
])

Callbacks也就是回调函数,基本上是以装饰器的形式来体现的,实现前后端异步通信的交互,例如我们在点击按钮或者下拉框之后出现的功能就是通过回调函数来实现的。

安装和导入模块

在导入模块之前,我们先用pip命令来进行安装,

! pip install dash   
! pip install dash-html-components
! pip install dash-core-components                           
! pip install plotly

然后我们导入这些刚刚安装完的模块,其中dash-html-components用来生成HTML标签,dash-core-components模块用来生成例如下拉框、输入框等组件,这里我们还需要用到plotly模块,因为我们需要用到的数据来自该模块,里面是一众互联网公司过去一段时间中股价的走势

import dash
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objects as go
import plotly.express as px

读取数据并且绘制折线图

那么我们读取数据并且用plotly来绘制折线图,代码如下

app = dash.Dash()   #实例化Dash
df = px.data.stocks() #读取股票数据 

def stock_prices():
    # 绘制折线图
    fig = go.Figure([go.Scatter(x=df['date'], y=df['AAPL'],
                                line=dict(color='firebrick', width=4), name='Apple')
                     ])
    fig.update_layout(title='股价随着时间的变幻',
                      xaxis_title='日期',
                      yaxis_title='价格'
                      )
    return fig
    
app.layout = html.Div(id='parent', children=[
    html.H1(id='H1', children='Dash 案例一', style={'textAlign': 'center',
                                                 'marginTop': 40, 'marginBottom': 40}),
    dcc.Graph(id='line_plot', figure=stock_prices())
])

if __name__ == '__main__':
    app.run_server()

我们点击运行之后会按照提示将url复制到浏览器当中便可以看到出来的结果了,如下所示

从代码的逻辑上来看,我们通过Dash框架中的Div方法来进行页面的布局,其中有参数id来指定网页中的元素,以及style参数来进行样式的设计,最后我们将会指出来的图表放在dcc.Graph()函数当中。

添置一个下拉框

然后我们再添置一个下拉框,当我们点击这个下拉框的时候,可是根据我们的选择展示不同公司的股价,代码如下

dcc.Dropdown(id='dropdown',
             options=[
                 {'label': '谷歌', 'value': 'GOOG'},
                 {'label': '苹果', 'value': 'AAPL'},
                 {'label': '亚马逊', 'value': 'AMZN'},
             ],
             value='GOOG'),

output

options参数中的label对应的是下拉框中的各个标签,而value对应的是DataFrame当中的列名

df.head()

output

添加回调函数

最后我们将下拉框和绘制折线图的函数给连接起来,我们点击下拉框选中不同的选项的时候,折线图也会相应的产生变化,

@app.callback(Output(component_id='bar_plot', component_property='figure'),
              [Input(component_id='dropdown', component_property='value')])
def graph_update(dropdown_value):
    print(dropdown_value)
    # Function for creating line chart showing Google stock prices over time
    fig = go.Figure([go.Scatter(x=df['date'], y=df['{}'.format(dropdown_value)],
                                line=dict(color='firebrick', width=4))
                     ])
    fig.update_layout(title='股价随着时间的变幻',
                      xaxis_title='日期',
                      yaxis_title='价格'
                      )
    return fig

我们看到callback()方法中指定输入和输出的媒介,其中Input参数,里面的component_id对应的是下拉框的id也就是dropdown,而Output参数,当中的component_id对应的是折线图的id也就是bar_plot,我们来看一下最后出来的结果如下

最后,全部的代码如下所示

日,多位自闭症孩子家长反映

他们付费为孩子报名了

机构的康复训练

但却突然收到停课通知

令人发愁

花费数万元在机构报课

如今说关就关?

家长们表示,他们大都在这家位于浦东南路的“康语星赋能启智中心”购买了100节课程的套餐,价值3万元左右,还有人花费了4、5万元。如今机构突然关门,却并没有向家长退款。

记者了解到,“康语星”是一家民办非企业单位,其法人代表表示:这家“康语星”是和“上海炬疗健康管理公司”合作开设的,根据双方约定,运营费用按比例分摊,收益也按比例分成;而和家长签定合同的也是“炬疗公司”。

但“炬疗”称,公司运营存在严重问题,资金无法继续到位,由此导致“康语星”无以为继。

记者还在现场遇到了几位机构的老师,他们想来拿些东西,却被物业阻止了。物业表示,该机构拖欠了房租,所以物品不能搬走。

据了解,老师们大部分是和“上海炬疗健康管理公司”签订的劳动合同。还有老师表示,员工们已经好几个月没有收到工资了,社保也是处于断缴的状态。

家长无奈

到底哪个部门可以介入?

记者查询发现,“康语星”是一家登记在长宁区民政局的民办非企业单位,主管单位是长宁区天山路街道,业务范围是为社区特殊儿童提供康复训练。

记者以家长身份联系了长宁区民政局,对方表示,已联系了天山街道,并建议家长找市监局或者直接起诉。

记者还注意到,浦东南路这家“康语星”是市残联指定的定点康复训练基地,孩子们在这里进行康复训练可以享受“阳光宝宝卡”报销补贴。

根据市残联的微信公众号上的介绍:对于部分“阳光宝宝卡”报销机构涉及的民办儿童康复机构,市残联会联合民政局、市场监管、区残联等多部门开展实地调查,调查内容包括场地课程、收费标准等多个项目。

那么,残联是否是“康语星”的监管单位呢?

对此,浦东新区残联表示:“我们没办法阻止机构的预付款行为,但是已经产生的康复训练费用,如果符合政策的可以报销。”

长宁区残联回复:“我们只是检查它是否在正规的康复(训练) 、能否开具发票等。”

家长:孩子有进步

但机构日常运营就有问题

几位家长告诉记者,在这里参加康复训练后,孩子有进步,这让她们感到十分欣慰。但机构老师的一番话,道出了机构难以持续维系的原因。

一位培训老师透露,“特殊儿童”的定位就决定了其不可能大规模招生,虽然采用了预付费模式,但是流动资金根本不够。

针对“预付费”问题,法律界人士表示:依据现有规定,培训机构预付卡不得一次性收取或以充值、次卡等形式变相收取时间跨度超过3个月或60课时的费用,且不得超过5千元。但是民办非企业的康复培训机构,却不在此列。

最新消息:已经启动调查

目前,“康语星”注册所在的长宁区民政局已经启动了对这家机构的调查。闵行区市场监管局也表示,已启动了相关工作,将对上海炬疗健康管理有限公司先行采取必要的限制措施。

特殊儿童的干预、康复,如果全部由政府部门来承担,很难做到全面、细致、丰富,也无法提供个性化的选择。民办非企业单位加入进来,是很必要的补充,也是家长们的期盼。但是如何监管这类机构,还需要进一步完善。

综合自新闻坊

来源: 上海新闻广播