使用Power BI做地图可视化数据
参考https://zhuanlan.zhihu.com/p/612916407
上文中说的很好了, 还有GIF动画演示. 针对其中缺少的部分:
- 一个是地图权限设置, 在
文件>选项和设置>选项>全局>安全性>地图和着色地图视觉对象>使用地图和着色地图视觉对象
上打钩. 如果没有显示则需要重启Power BI - 中国地图JSON转换后的, 可以直接这儿下载使用 不需要在转换了: China_topo.zip
参考https://zhuanlan.zhihu.com/p/612916407
上文中说的很好了, 还有GIF动画演示. 针对其中缺少的部分:
文件>选项和设置>选项>全局>安全性>地图和着色地图视觉对象>使用地图和着色地图视觉对象
上打钩. 如果没有显示则需要重启Power BI人类亮视觉主要依靠集中在黄斑区域的视锥细胞, 按其感受波长的长度分为L/M/S型, 其敏感波长和数量占比是: 参考
视锥细胞类型 | 敏感波长 | 敏感色 | 数量占比 |
---|---|---|---|
S型 | 437nm | 蓝色 | 2% |
M型 | 533nm | 绿色32% | |
L型 | 564nm | 黄绿色 | 64% |
哈哈, 想不到吧, L型看到的564nm其实是黄绿色!可是大多数文章都将L型视锥细胞敏感波长说成是红色! 如下图, 正好处在黄色和绿色的边界.
从波长上看, M和L只差了31nm, 其实是距离很近的. 而S型和和M型相差96nm. 从生物演化角度, M型也是从L型演化出来的.
色盲最多的也是红绿色盲, 也就是红绿无法分辨. 我猜测是L和M细胞缺少分化这一步导致的.
还有就是, S型细胞出奇的少, 不知这和蓝光容易损害黄斑区是否有一定关系,也就是不清楚对蓝光敏感的细胞容易受损还是不敏感的容易受损.
显示器颜色的红绿蓝, 我测试了一下我的手机屏幕, 峰值分别为458/522/620nm. 其中蓝色和绿色间隔64nm, 绿色和红色间隔98nm.
这个奇怪的是和视锥细胞敏感色并不一致.
LED | 波长 | 与视杆细胞敏感波长距离 |
---|---|---|
蓝 | 458nm | +21nm |
绿 | 522nm | -11nm |
红 | 620nm | +56nm |
参考: https://www.kxting.com/article/20221114/949298.html
由国际照明委员会(EIC)定义,选择红色(波长λ=700.00nm),绿色(波长λ=546.1nm),蓝色(波长λ=438.8nm)三种单色光作为表色系统的三基色。其中R(red)、G(Green)、B(Blue)分别是红绿蓝的英文首字母。
三原色|波长|与视杆细胞敏感波长距离
--|--|
B | 439nm |+2nm
G | 546nm |+13nm
R | 700nm |+136nm
可见也是有很大差异.
这个标准三原色, 经过人的视锥细胞, 是否能看到所有的色彩(380~780nm)呢? 这就和色度图联系起来了, 参考https://www.jianshu.com/p/213e4500dbea
色度图只有x,y两个坐标, 怎么对应RGB三个值? 那当然就是相当于把亮度取消了. 怎么取消? 把RGB值归一化处理, 让R+G+B=1就可以了,也即是只表示一个颜色中RGB分别所占的比例, 而不考虑其强度.
要让RGB对应可见光380~780nm的所有颜色, 数学上可能,实际上不可能, 为什么? 因为需要R是负值, 用r/g的平面图表示如下:
为了在图上再次归一化, 也就是x,y坐标取值在0~1之间, CIE发明了x/y/z和RGB的换算关系, 这样就把上面的马蹄挤到了1x1的方框里,就得到了经典的马蹄图CIE1931
马蹄的上沿一圈就是光谱的波长, 当然不是均衡分布的. RGB三个波长组成的三角, 就是显示器能显示的范围了. 嗯, 这个图要在显示器上显示, 我想一定是失真的了.
至于为什么用视锥细胞的敏感波长反而不能组合出完整的色彩感受, 还需要进一步的研究.
先看个例子:
#include <stdio.h>
int main()
{
char c = 0xff;
if(c == 0xff){
printf("true");
}else{
printf("false");
}
return 0;
}
你觉得是打印true还是false? 结果出乎意料是false!
因为c赋值为0xff之后, c的值就会变为-1. -1当然就不等于255了.
另外, c要和255比较, 估计还需要升位到int才行, 因为char类型装不下255, unsignd char装不下-1, 就得升到int才能比较.
length取值最好为int. 原因是很多第三方返回length的函数都是使用int, 如uart读取. 虽然有时候你觉得char就够用了, 但为了避免反复的类型转换, 还是统一int比较好.
length常常用来确定数组的长度, 此时表示length的变量会被用作数组下标, 而数组下标不能为char.
除非内存真的要非常节约...
字符串多选择char类型, 指针是char , 数组是char string[]. 因为标准库中字符串的处理函数都是char的.
而二进制(16进制)缓存,也就是buffer, 最好使用unsigned char类型. 原因是buffer的值常常表示十六进制也就是0x, 在进行比较的时候会出现被赋值的变量不等于赋值的常量的情况, 如char c = 0xff
,而比较时c != 0xff
, 因为已经溢出为-1了.
转载自stack overflow
There seem to be a few though I've never used them.
bpt https://github.com/vector-of-bool/dds
conan https://conan.io/
poac https://github.com/poacpm/poac
spack https://spack.io
buckaroo http://buckaroo.pm
There seem to be a few though I've never used them.
bpt https://github.com/vector-of-bool/dds
conan https://conan.io/
poac https://github.com/poacpm/poac
spack https://spack.io
buckaroo http://buckaroo.pm
国内默认服务器一般是"cn.pool.ntp.org", 然而稳定性不好, 也许用的人太多? ntp.aliyun.com相对更稳定.
ntp端口号是123
,看起来跟假的一样...
linux下使用ntpdate -q cn.ntp.org.cn
测试
使用空白模板登入, 发现就是一个web版本的vscode!
居然也带了terminal, 那就意味着操作系统!
查看一下这个系统的配置:
MemTotal: 4020176 kB
MemFree: 138564 kB
MemAvailable: 2357852 kB
Buffers: 353748 kB
Cached: 1967260 kB
Filesystem Size Used Avail Use% Mounted on
overlay 32G 13G 18G 41% /
tmpfs 64M 0 64M 0% /dev
shm 64M 8.0K 64M 1% /dev/shm
/dev/root 29G 21G 8.1G 73% /usr/sbin/docker-init
/dev/sda1 16G 288K 15G 1% /tmp
/dev/loop3 32G 13G 18G 41% /workspaces
从上面可以看出来是docker容器, 这儿有一篇文章讲如何修改默认的软件:https://blog.csdn.net/boling_cavalry/article/details/125110236
根目录下有bl2028n_sdk_release
和qcloud-iot-bk-wifi
两个目录, 编译是在qcloud-iot-bk-wifi
中进行
编译命令
visudo
,打开的文件中,在root ALL=(ALL:ALL) ALL
下仿照写一行,如我的用户名是rnd:root ALL=(ALL:ALL) ALL
rnd ALL=(ALL:ALL) ALL
root@ubuntu-bl2028n:/media/sf_share/qcloud-iot-bk-wifi# make -j4
make: Warning: File '/media/sf_share/bl2028n_sdk_release/.config' has modification time 2.1 s in the future
LD ../out/beken2028n.elf
arm-none-eabi-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found
compilation terminated.
../bl2028n_sdk_release/application.mk:336: recipe for target 'application' failed
make: *** [application] Error 1
原因是gcc-arm-none-eabi-5_4-2016q3\lib\gcc\arm-none-eabi\5.4.1\liblto_plugin.so
文件和so.0
文件时链接到liblto_plugin.so.0.0.0
文件上的,所以给liblto_plugin.so.0.0.0
复制两份改成上面的liblto_plugin.so
和liblto_plugin.so.0
文件名。
然后在系统启动文件/etc/profile
中加入:
export ARM_GCC_TOOLCHAIN="/media/sf_share/gcc-arm-none-eabi-5_4-2016q3/bin/"
export PATH="$PATH:$ARM_GCC_TOOLCHAIN"
no such file or ...
,需要安装支持软件,安装前先update:apt-get update
apt-get install gcc-multilib g++-multilib
CentOS:
dnf install glibc-devel.i686
dnf比yum先进, 建议改用
qcloud-iot-bk-wifi
目录,运行make clean
,在运行make -j8
(8是虚拟机的CPU核心数)进行编译;out
目录中,烧录all***.bin
文件。烧录方式是打开bk_writer_V1.63.exe文件,选择bl2028n,选择固件,点击烧录即可。GND-TXD1-RXD1
上来烧录。docker安装起来比虚拟机快很多.
可以先安装docker desktop, 然后取一个镜像, 并运行容器, 我还是用之前腾讯给的esp编译的centos 8镜像, 在windows命令行下:
# 获取镜像
docker pull hubertxxu/esp8266_build:0.1
# 下一句设置共享目录
docker run --name esp -v path/to/host/folder:/path/to/container/folder -dt hubertxxu/esp8266_build:0.1
# 进入docker bash环境
docker exec -it esp bash
# 安装32位兼容包(等同于ubuntu的gcc-multilib)
dnf install glibc-devel.i686
# 跟ubuntu一样, 修改环境变量 `~`目录下的`.bashrc`增加ARM_GCC_TOOLCHAIN和PATH, 运行即可. 注意,和上面ubuntu不同的是修改`/etc/profile`没有作用
使用共享文件夹的方式编译会发现速度极慢, 大约会慢100倍. 所以需要提速.
经过测试, 将arm toolchain和源码复制到虚拟机自己的文件夹,而不是用共享文件夹编译的话速度就非常快.
如果为了自动化, 你需要编辑.bashrc或者其他脚本文件来实现.
我在hub.docker.com上创建了docker编译镜像, 获取: docker pull darceye/bl2028n_buildenv:v0.0.1
, 安装好了环境, 并做了加速,将sdk已经复制到docker中.
为便于编译, 在host主机(以windows为例,嗯如果本身是linux也不用这么麻烦了)建立一个blq.bat
文件:
@echo off
set bl2028n_build_docker=your_container_name
if "%1" == "build" (
docker cp ./bl2028n_qcloud_sdk/qcloud-iot-bk-wifi %bl2028n_build_docker%:/home/bl2028n/bl_sdk/
docker exec -it esp bash -c " cd /home/bl2028n/ && ./bl2028nmake"
docker cp %bl2028n_build_docker%:/home/bl2028n/bl_sdk/out/all_2M.1220.bin ./build/bl2028n_FW.bin
)
if "%1" == "init" (
docker start %bl2028n_build_docker%
)
if "%1" == "docker" (
docker exec -it %bl2028n_build_docker% bash
)
if "%1" == "" (
echo BLQ: Frossky BL2028N Qcloud C building Tool. Ver1.0-20230619
echo Usage^:
echo blq: show this help.
echo blq init: init docker container
echo blq docker: into docker env
echo blq build: build firmware into `build/` folder
)
@echo on
将相关sdk放在bl2028n_qcloud_sdk/
目录中, 就可以按上面的提示进行自动编译, 并将编译后bin文件复制到build/
中.
有2个教程,官方的:http://wx.shenzhen.cmbchina.com/EasyRegister/,和知乎的https://zhuanlan.zhihu.com/p/564548847
这儿需要重点说的是:
根据B站Up主阿甘学长冲冲冲
的视频整理如下:
问:你听说过麦肯锡了解行业的方法吗?作为小白,你能帮我介绍一下这个方法吗?
问:我想了解最近比较火的xx
行业,根据各项调查、行业报告、新闻研究论文,帮我整理出关于该行业的100个关键词,同时根据关键词的关联性的强弱进行分类,分为5-8个类别进行展示。
问:以上100个关键词,都用一句话帮我解释清楚”xxxx”
关键词,我理解不了,帮我举几个例子来
问:目前,在xx
行业的公司中,头部玩家有哪些?他们的优劣势分别是什么?
家里一台买了快9年的小米电视2,卡在LOGO画面十几分钟进不去. 我又出差在外, 最近几天回不去, 家里老人没电视看还挺急. 于是在小米官网申请售后服务.
先走标准的网上申请,步骤如下:
服务中心
(mi.com/service),点击申请售后
快速申请
和填写申请单
两个选项, 进入快速申请,发现都是在小米商城买的产品,通过天猫旗舰店买的不在这儿. 然后退出重新选择填写申请单
有发票
和无发票
, 有发票的话要填写年月日和上传发票照片.确认选择
, 会根据SN码显示产品图片和完整名称配置, 此时选择服务类型
为维修
或者安装
维修
后, 要求文字描述产品问题, 上传机器图片(单张不超过3MB。请注意拍摄画质尽量清晰,突出机器故障问题。非必填)
,选择服务方式
, 但只有一项为到家服务(审核通过后,工程师上门为您服务)
选择到家方式
,只有预约到家(预约工程师,上门为您服务)
可选. 上门地址
列出过往收货地址供选择,预期上门时间
选择日期和时间段. 日期只能从第二天开始选,可选15天. 时间段分为9:00-12:00
,12:00-15:00
, 15:00-18:00
和18:00以后
四个时间段.商品已过三包期限,请联系客服处理
. 且只能点确定
, 也没有其他链接.网上维修到此为止, 于是拨打小米400电话400-100-5678, 下面是电话受理过程
挂断电话, 在网站服务中心->申请售后
按钮下面一行有小米客服
的按钮
小米客服24小时在线咨询
, 小米服务微博
, 小米服务微信
, 商城客服微信
, 下面又根据产品不同列出了小米售后, 金融售后, 移动售后,游戏售后4个400热线电话, 全部注明服务时间, 还不太一致, 有8:00-18:00, 也有别的, 大致上都是工作时间.人工服务
, 回复:若需要小米商城人工客服:
【在线客服】请直接跳转(24小时);
【热线客服】400-100-5678(工作时间每天8:00-18:00、电视线路每天8:00-21:00)
查看相关知识点:
在线客服
四个字可以点击, 点击后, 对话如下:客服: 您好,欢迎来到小米商城,我是米小粒,很高兴为您服务,为了避免您重复陈述问题,我先看下之前的记录,请您稍等~
客服: 您好
我: 小米电视2过保了怎么维修?
客服: 您好,非常抱歉给您添麻烦了。由于您购买的产品已经停止生产超过了五年,生产商也已停止了相关物料生产,可能无法再提供相应的维修备件支持;所以售后维修换料服务,需要视目前的物料库存情况而定;
客服: 考虑您的实际需求,我们可以安排一个收费的上门检测调试服务,如果能通过调试解决最好,但如果需要备件,我们可以尽量协调,但不能保证一定能寻找到相关备件,您看您需要安排吗?
我: 好的,需要怎么收费?
客服: 您好,维修请点击【https://m.mi.com/t/q4xXyV】,通过【我要维修】--【商品申请】--通过搜索/分类选择商品--填写信息--提交服务单,您看可以么
客服: 您不方便申请的话,这边也是可以帮您申请的呢
客服: 如果咱们是主要部件(显示屏、背光组件、逻辑组件、高频调谐器)出现质量问题在3年质保期内是免费维修,如不是主要部件需要收取对应费用(包含上门检测费50元+远程费(往返距离≤30km免费。超出30公里的路程×1元/公里;超400公里的路程按400公里的费用收取)+如涉及维修需要再收取物料费+维修人工费;具体费用师傅会给您检测后告知您的~
我: 服务单提交不了呢(发送提交不了的截图)
客服: 客服这边帮您申请下呢
我: 好吧,申请一下吧
客服: 您提供下姓名电话地址
我: **
客服: 是什么问题需要售后呢
客服: 为了给您更好的服务体验,需要与您核实记录下购买渠道(比如:商城、有品、京东、淘宝、小米小店、小米之家、线下实体店等),谢谢您的配合
我: 电视开机卡在LOGO屏幕10分钟不能进入主界面
我: 小米天猫旗舰店购买
客服: 好的 您稍等 这边帮您申请呢
我: 好的
客服: AS230515166*****
客服: 帮您申请好了,这个是您的售后服务单号
客服: 咱们师傅一般在接了您单子后两个小时左右联系您协商上门时间的,具体的上门时间到时咱们和师傅说一下就可以了,一般网点是上午9点-下午6点上班的您保持电话通畅,会尽快联系您沟通下的
客服: 请问还有什么其他的问题可以为您效劳的吗
我: 没有了,谢谢
客服: 您太客气了,很荣幸为您服务呢~
客服: 麻烦您右上角点击退出对话进行评价,4-5只米兔是满意,1-3只米兔是不满意,期待您的满意,祝您生活甜如蜜,开心永常伴。
这儿单说《周易》。
最近看到一句话,又是出自易经:君子藏器于身,待时而动。不免又翻原文看了看,找南怀瑾的《易经杂说》读了读。这次倒是发现了易经是个怎么回事。易经基本是作者们的观念集合,就跟孔子写的《论语》,老子写的《道德经》其实没两样。因为易经有很多作者,所以也有很多观念,各个还不同。每个作者都是在前一位作者语言的基础上借题发挥。为啥,因为前一位都比当前作者的名气大,名气不大也留不了文字在易经上面啊。这儿有个词叫“托古”,就是借古人的名气说自己想说的话,因为中国人尊重先人和古人,自己说话没那么大影响力的时候就特别喜欢托古。所以易经就是一层一层的借题发挥、托古作文。
想了想,其实也不只是中国人喜欢借题发挥。基督教编圣经,就非把犹太教的圣经编在前面,伊斯兰教也是。佛教也是装了不少印度教的思想和故事。
为什么易经是六书之一?因为里面有孔夫子借题发挥的部分。自然是要好好读读。
易经的卦,本来是占卜来用的。64卦也就是2的6次方,只不过是从0~63的一组随机数而已。对着这一组随机数挨个讲出一些天纲人常的道理来,使人在迷茫的时候有个方向。人在不知道怎么办的时候,至少得有一个方向坚持去做,做了就有一个结果,无论是好是坏。好结果可以继续,坏结果可以调整,大不了再卜一卦。而不做就不会有任何结果。所以占卜给出一个方向,坚持去做总有结果。那么究竟给什么方向,讲什么道理呢?毕竟是占卜结论随机的。所以,讲的道理近乎真理,给的方向总能给出解释。并且最早在乌龟壳上占卜,写个字费劲,言简意赅到可以借题随意发挥。这就奠定了易经的最早作者版本。这儿,按照传说,六十四卦的符号是伏羲所做,卦辞是周文王姬昌所撰。伏羲据百度所说,是公元前7774年生,姬昌是1152年生,中间差了6000多年。我大胆猜测,说伏羲作八卦八成也是姬昌托古。
后来,64条道理不足以说明思想了,姬昌的儿子周公姬旦(跟鸡蛋发音一样)