安装haxm遇到问题的解决
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
bcdedit /set hypervisorlaunchtype off
然后重启.
安装intel haxm
撤销上述命令的方式
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
bcdedit /set hypervisorlaunchtype auto dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
bcdedit /set hypervisorlaunchtype off
然后重启.
安装intel haxm
撤销上述命令的方式
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
bcdedit /set hypervisorlaunchtype auto 首先装一个必装插件: mechin3. 官网我死活找不到下载入口, 放在网盘上吧。
链接: https://pan.baidu.com/s/1Z1ncM-0G6VFIg3B-AK7LJg?pwd=y4k6 提取码: y4k6
以下根据视频https://www.bilibili.com/video/BV1JR4y1G76z?p=2&spm_id_from=pageDriver整理
blender严重依赖快捷键,并且最好时有全键盘,带有小键盘的那种。然而笔记本上没有,可以勾选编辑->偏好设置->输入->模拟键盘,用主键盘区的数字键替代小键盘.
重要操作步骤:
要先选中物体, 然后再进入点线面的编辑模式, 编辑模式是针对某一个物体编辑的,此时不能再选中其他物体编辑.
Undo操作记录步骤:
编辑->偏好设置->系统->撤销次数(32~256)
^=Ctrl, !=Alt, +=shift, &=连续按键 #=Win键s&x是在世界坐标上缩放, s&x&x是在物体坐标上缩放. 如果物体旋转过, 这两种方式肯定会有不同应用.| 快捷键 | 描述 |
|---|---|
| 中键 | 旋转视图 |
| +中键 | 移动视图 |
| !中键 | 吸附到前后左右等视图 |
| ` | 视图菜单 |
| 操作中&右键 | 取消操作 |
| +A | 创建物体菜单 |
| Tab | 切换物体模式/编辑模式中的点线面模式 |
| 1 | 前视图 |
| ^1 | 后视图 |
| 3 | 右侧视图 |
| ^3 | 左侧视图 |
| 5 | 切换正交视图 |
| 7 | 顶视图 |
| ^7 | 底视图 |
| Z | 切换渲染模式 |
| +Z | 线框视图, 线框视图下选择线,可以选择到背面被遮挡的部分 |
| !Z | 半透明视图 |
| .(小键盘) | 视图缩放到当前物体. 菜单:左上角->视图->框显所选 |
| /(小键盘) | 独立显示当前物体,菜单:左上角->视图->局部视图->切换到局部视图 |
| G | 抓取并移动, 注意在物模式下会移动原点,在编辑模式下则不会(原点不会选中) |
| 快捷键 | 描述 | 扩展支持 |
|---|---|---|
| R | 旋转Rotate | &X/Y/Z&角度数字 |
| S | 缩放Scale | &X/Y/Z&倍数数字 |
| +D | 复制物体 | &X/Y/Z |
| N | 查看物体变换属性是否已经应用 | |
| ^A | 确认物体形变为实际形变 | |
| +S | 将游标放回0点 | |
| +右键 | 3D游标放到鼠标处 | |
| ^P | 两物体建立父子关系一并移动 | |
| H | 隐藏物体 | |
| ^J | 联合两个物体为一组 |
| 快捷键 | 描述 | 扩展支持, 扩展含义 |
|---|---|---|
| I | 内插面 | |
| E | 挤压Extrude | |
| G | 抓取并移动 | &X/Y/Z, 沿轴向 |
| ^B | 倒角 | &滚轮, 平滑度 |
| +N | 修复面倒错 | |
| L | 选择相连所有面 | |
| F | 选择相连平面 | |
| ^+(Ctrl加) | 扩展选择相邻面(好像也是选择相连面) | |
| ^- | 缩回选择相邻面 |
放样: 选中两个面, 点右键->LoopTools->Loft
| 快捷键 | 描述 | 扩展支持, 扩展含义 |
|---|---|---|
| !左键 | 循环选择 | |
| ^左键 | 连续选择 | |
| +左键 | 取消选择 | |
| ^B | 倒角 | &滚轮, 平滑度; &C, 钳制重叠(不允许重叠) |
| ^R | 增加环绕边 | |
| P | 分离物件 | |
| !S | 沿法线缩放 | |
| A | 全选 | |
| M | 融合菜单, 其中按距离融合可以将重叠的的边融合在一起 | |
| X | 溶解菜单 | |
| ^E | 边菜单 | 可以标记锐边 |
| ^1(主键盘) | 转换为细分曲面 |
| 快捷键 | 描述 | 扩展支持, 扩展含义 |
|---|---|---|
| +^B | 倒角 | |
| ^B&V | 倒角 | |
| F | 闭合所有点为面 | |
| E | 挤出点为线 | |
| !E | 挤出菜单 | |
| B | 框选模式 | |
| K | 切线成点 | &左键&A(笔直切)&左键&C(切穿)&回车 |
| G | 平移(每次移动固定长度) | |
| G&G | 滑移(每次移动固定百分比) | |
| M | 合并,如可以将所有的点合并成1个点从而生成点 | |
| !M | 拆分 |
网格->对称注意: 点模式下合成的面, 如果不切换到面模式下就直接挤出为体,似乎这个体有点儿问题, 例如不能正确切分物体. 感觉是个Bug.
修改点:
N键调出属性菜单->平均倒角权重设置为1->选择倒角方式为权重将生成目标物体的镜像,注意需要把物体原点挪到世界原点
似乎是让实心物体变为薄壁结构
让物体沿曲线移动,就像套在曲线上一样
伪影问题, 此时应用布尔运算, 将物体上的顶点与边缘连接的线不垂直的,改为垂直. 方法是: 选择垂线的两个端点, 按J, 然后选中不垂直的造成伪影的线, 点击delete,选择融合边K将N-gon限制在很小区域,避免大面积着色不良.| 快捷键 | 描述 | 扩展支持 |
|---|---|---|
| +^B | bool命令菜单 | |
| ^- | 布尔减 |
用于复制修改器
^C->选择要复制的属性->确定物体模式选中物体->左上角“物体”下拉菜单->转换->曲线
辨别是曲线还是网格:网格的编辑模式有点线面,曲线没有。另外,左上角的菜单里面,如果是网格会显示网格菜单,如果是曲线会显示曲线菜单
曲线菜单(右下侧绿色两方点连一个曲线)->倒角->设置值
^1(主键盘)增加细分->在修改器中删除细分->按上一条的方法转换网格, 然后就会发现网格数减少| 快捷键 | 说明 |
|---|---|
| ^1(主键盘) | 设置细分1级 |
右上角4个小球右边的下拉箭头, 选中阴影和Cavity
中上方两个球->下拉菜单选择各自的原点
右下侧黄色方块带四个角的图标物体属性->视图显示->显示为选择线框
中上方吸铁石图标右侧的图标, 下拉->选择面和旋转对齐目标, 然后按G再按Ctrl就可以吸附到目标表面;
+新建^+选择相邻面指定按钮默认表(曲)面:原理化BSDF| 目标效果 | 基础色 | 金属度 | 糙度 |
|---|---|---|---|
| 金属 | 灰 | 1 | 0.3~0.4 |
默认表(曲)面:自发光(发射)| 目标效果 | 颜色 | 强度/力度 |
|---|---|---|
| 自发光 | 红/白 | 13 |
hdrihaven下载hdri, 现在更名为polyhaven了
all->overcast(阴天)搜索abandoned slip way下载4K(25M左右)或者8K(100M左右)图片, 真是大啊
世界属性地球图标表(曲)面->颜色旁点击第一个小球, 展开的菜单中选择环境纹理渲染属性小电视图标->胶片->勾选透明+A增加平面+A增加摄像机G移动位置0查看摄像机视角设置摄像机参数
G&Z&Z渲染属性去掉透明着色编辑器, 将物体改为世界环境node wrangler的插件anbandoned......hdr窗, 按^TZ可以旋转hdr,测试照明偏好设置->系统->Cycles渲染设备->CUDA选择GPUCyclesGPU计算, 如果GPU很弱那么还不如选择CPU采样->渲染->采样输入200光程->最多反弹次数设置按如下参数:| 总数 | 漫射 | 光泽 | 投射 | 体积(音量) | 透明 |
|---|---|---|---|---|---|
| 6 | 3 | 3 | 4 | 4 | 0 |
输出属性打印机照片图标格式选择分辨率输出文件格式改为tiff, 16位色深合成器选择节点^A菜单->滤镜->降噪降噪法向连接法向,降噪反照率连接反照率(本应还有其他降噪的, 如降噪图像要连接, 但是3.1里找不到了)^A->滤镜->辉光降噪与合成中间条斑改为雾晕3D视图, 选择实体视图渲染->渲染图像AudioRelay分为PC端和Android端, 可以将PC上的音频放到手机上, 非常适合我这种笔记本电脑音频损坏的~~
不依赖蓝牙, 而是靠网络实时传输, 据说比蓝牙实时性还好!
今年打算好好给公司的软件搭个架子,昨天设想了一下,应该包括三个层次:
| 层数 | 名称 | 作用 |
|---|---|---|
| 3 | 纯逻辑应用层 | 完全与硬件和操作系统无关的层,可实现应用的所有逻辑功能,不同功能之间应完全解耦、并充分可配置。并可编译为windows程序进行单元测试和系统测试。 |
| 2 | 中间层 | 与操作系统相关,可能与硬件无关的。对上提供标准接口,对下提供几种标准接入。(再想想) |
| 1 | 硬件适配层 | 硬件驱动,对硬件进行调用。接口标准化。需要在板上调试。在上层测试时被打桩stub的层。 |
在google搜索embedded software structure发现一篇文章https://www.ssla.co.uk/embedded-software-architecture/ 上来讲得就跟我想的一样;
顺便, 写文章的公司ssla是一家英国的硬件方案公司,提供嵌入式软硬件方案和硬件制造, 在限定时间内(6个月)完成硬件项目的服务.
另外, 关于软件架构这有一篇很好的文章https://blog.csdn.net/best_xiaolong/article/details/108480336
可以关注lua和python在嵌入式架构里的应用
阿里mpaas是阿里的移动开发平台
里面很多资料都有些过期, 尤其是ui库.
文档中提到的扩展ui库Mini-Antui变成了mini-Ali-Ui, 又不知没几天变成了Ant Design UI, npm简称antd-mini
mini-ali-ui的文档在此
FTM[参考文章]](https://www.sohu.com/a/445171044_120435367),据说能达到3cm精度. 但在网上看了些文章, 似乎只能达到1m精度, 并且在短距离测量(1m内)很不准确, 比如1m内可能会显示4m...
基于ESP32S2的定位文章
http://www.nongnu.org/lwip/2_1_x/index.html
https://beej.us/guide/bgnet/html/
问题: 如果tcp连接过程中网断了(网线拔出/路由器断电)怎么办?
回答: 参考https://stackoverflow.com/questions/14782143/linux-socket-how-to-detect-disconnected-network-in-a-client-program
总的来说, socket中的send和recv都不会关心网是不是断了. 正如前述参考回答中所说, tcp send只有在tcp连接没有正确建立或者缓冲溢出的时候才会明确报错, 否则它只会不断重试, 在linux上重试时间可能长达5分钟. 同样,recv如果不设置超时, 就会一直等待, 它也不知道网断了.
参考:
https://blog.csdn.net/qq_35787138/article/details/113923316
https://www.runoob.com/linux/linux-comm-nc.html
windows上的nc使用的是cygwin里带的
注意:windows上的nc.exe命令写端口号前面需要-p,如nc -l 9999在windows平台可写作nc -l -p 9999
nc -l 9999
nc localhost 999
nc www.baidu.com 80
输入命令回车即发送. HTTP是基于TCP的, 所以可以连接HTTP服务器, 再发送GET命令即可
nc -u -l 999
nc -u localhost 999
特别注意: 在Win10上通过cmd和bash使用nc, 都是tcp模式localhost连接可用, 而udp server/client localhost连接不可用. 一定要用wsl2的模式才行(ubuntu 18.04). 在不同主机上连接倒都没有问题
nc -b -u 192.168.1.255 9999
注意, windows版本的nc里面都没有-b选项.
由于ftp不止使用了1个端口,包括连接时候使用的控制端口和数据传输时候使用的数据端口. 并且ftp协议本身会发送ip地址和数据端口号(而不是用frp服务器的端口号),所以frp配置有些与众不同.
要点:
ftp服务器配置命令, 以pyftplib为例(如果需要服务器可写,再加上选项-w):
python -m pyftpdlib -r 3333-3334
frpc.ini配置:
[ftp_data1]
type =tcp
local_ip = 127.0.0.1
local_port = 3333
remote_port = 3333
[ftp_data2]
type =tcp
local_ip = 127.0.0.1
local_port = 3334
remote_port = 3334
[ftp_control]
type =tcp
local_ip = 127.0.0.1
local_port = 2121
remote_port = 3131 会开疯(封)了!
忽然想起这个命题, 在若干年以前, 军训的时候教官说我们班上40多人里必然有两个人同一天过生日, 还说没看过我们的生日, 感觉跟魔术一样. 让大家验证了一下, 居然有两组人的生日都在同一天. 而在之前公司里面20多个人, 也有同一天过生日的. 那么究竟一组人群里重复生日的概率是多少呢? 想验证一下.
用node.js来验证, 验证10万组:
const testTimes = 100000
const yearLength = 365
function main(){
var doubledBirthdaysArrayLengths = []
for(let i = 0; i < testTimes; i++){
doubledBirthdaysArrayLengths.push(doubledLength())
}
console.log("一组人群中有相同生日的概率是多少?")
console.log("有重复生日的人群的人数: ")
console.log(doubledBirthdaysArrayLengths)
console.log('生日重复的一组中最多人数: ', Math.max(...doubledBirthdaysArrayLengths))
console.log('生日重复的一组中最少人数: ', Math.min(...doubledBirthdaysArrayLengths))
console.log('生日重复的一组中平均人数: ', average(doubledBirthdaysArrayLengths))
distribute(doubledBirthdaysArrayLengths)
}
function distribute(arr){
let peopleNumsofGroups = [] //一组中的人数为数组下标, 数组值为此组人数出现的次数.
for(let i = 0; i < yearLength; i+=1){
peopleNumsofGroups.push(0)
}
for(let a of arr){
peopleNumsofGroups[a]++
}
// console.log('Distribute: ', days)
console.log('重复生日人群, 某一人数出现的次数:')
printArrayInTable(peopleNumsofGroups, 0)
let probes = [], sum = average(peopleNumsofGroups) * peopleNumsofGroups.length
for(let i = 0; i < yearLength; i+=1){
if(i == 0){
probes[i] = peopleNumsofGroups[i]/sum * 100
}else{
probes[i] = peopleNumsofGroups[i]/sum * 100 + probes[i - 1]
}
}
console.log('概率:')
printArrayInTable(probes, 2)
}
function printArrayInTable(arr, fixDigits){
console.log('\t[0]\t[1]\t[2]\t[3]\t[4]\t[5]\t[6]\t[7]\t[8]\t[9]')
for(let row = 0; row < yearLength / 10 + 1; row+=1){
let out = '[' + row + ']\t'
for(let col = 0; col < 10; col+=1){
let index = row*10 + col
if(index >= yearLength){
return
}
out += arr[row*10 + col].toFixed(fixDigits) + '\t'
}
console.log(out)
}
}
function average(arr){
let sum = 0
for(let a of arr){
sum += a
}
return sum / arr.length
}
function doubledLength(){
let birthdays = []
for(let i = 0; i < yearLength + 1; i+=1){
var birthday = parseInt(Math.random()*yearLength)
if(findDouble(birthday, birthdays)){
birthdays.push(birthday)
// console.log("birthdays: ", birthdays)
return birthdays.length
}
birthdays.push(birthday)
}
return birthdays.length
}
function findDouble(obj, arr){
for(let a of arr){
if(a == obj){
return true
}
}
return false
}
main()
输出结果如下:
一组人群中有相同生日的概率是多少?
有重复生日的人群的人数:
[
19, 22, 14, 3, 13, 25, 10, 24, 56, 5, 15, 27,
25, 18, 27, 19, 22, 38, 21, 41, 9, 13, 37, 36,
28, 25, 22, 29, 11, 23, 19, 14, 13, 16, 32, 26,
8, 19, 7, 36, 6, 22, 18, 23, 20, 33, 32, 21,
64, 22, 48, 43, 5, 16, 14, 7, 19, 32, 15, 16,
15, 33, 58, 19, 26, 18, 45, 31, 4, 5, 30, 26,
14, 19, 31, 14, 6, 9, 27, 12, 47, 51, 7, 21,
16, 42, 66, 15, 28, 32, 18, 10, 12, 14, 10, 16,
23, 15, 23, 8,
... 99900 more items
]
生日重复的一组中最多人数: 84
生日重复的一组中最少人数: 2
生日重复的一组中平均人数: 24.60991
重复生日人群, 某一人数出现的次数:
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
[0] 0 0 279 577 842 1006 1334 1520 1873 1949
[1] 2223 2441 2627 2684 2975 2878 3110 3148 3229 3227
[2] 3269 3199 3180 3195 2974 3076 3014 2846 2747 2650
[3] 2624 2440 2327 2111 2096 1863 1807 1647 1564 1399
[4] 1271 1162 1023 996 884 773 738 642 575 541
[5] 460 394 384 325 277 247 203 173 143 148
[6] 111 97 79 71 55 53 41 36 31 18
[7] 24 16 9 16 4 5 7 2 6 6
[8] 1 0 1 0 2 0 0 0 0 0
[9] 0 0 0 0 0 0 0 0 0 0
[10] 0 0 0 0 0 0 0 0 0 0
[11] 0 0 0 0 0 0 0 0 0 0
[12] 0 0 0 0 0 0 0 0 0 0
[13] 0 0 0 0 0 0 0 0 0 0
[14] 0 0 0 0 0 0 0 0 0 0
[15] 0 0 0 0 0 0 0 0 0 0
[16] 0 0 0 0 0 0 0 0 0 0
[17] 0 0 0 0 0 0 0 0 0 0
[18] 0 0 0 0 0 0 0 0 0 0
[19] 0 0 0 0 0 0 0 0 0 0
[20] 0 0 0 0 0 0 0 0 0 0
[21] 0 0 0 0 0 0 0 0 0 0
[22] 0 0 0 0 0 0 0 0 0 0
[23] 0 0 0 0 0 0 0 0 0 0
[24] 0 0 0 0 0 0 0 0 0 0
[25] 0 0 0 0 0 0 0 0 0 0
[26] 0 0 0 0 0 0 0 0 0 0
[27] 0 0 0 0 0 0 0 0 0 0
[28] 0 0 0 0 0 0 0 0 0 0
[29] 0 0 0 0 0 0 0 0 0 0
[30] 0 0 0 0 0 0 0 0 0 0
[31] 0 0 0 0 0 0 0 0 0 0
[32] 0 0 0 0 0 0 0 0 0 0
[33] 0 0 0 0 0 0 0 0 0 0
[34] 0 0 0 0 0 0 0 0 0 0
[35] 0 0 0 0 0 0 0 0 0 0
概率:
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
[0] 0.00 0.00 0.28 0.86 1.70 2.70 4.04 5.56 7.43 9.38
[1] 11.60 14.04 16.67 19.36 22.33 25.21 28.32 31.47 34.70 37.92
[2] 41.19 44.39 47.57 50.77 53.74 56.81 59.83 62.67 65.42 68.07
[3] 70.70 73.14 75.46 77.57 79.67 81.53 83.34 84.99 86.55 87.95
[4] 89.22 90.38 91.41 92.40 93.29 94.06 94.80 95.44 96.01 96.56
[5] 97.02 97.41 97.79 98.12 98.40 98.64 98.85 99.02 99.16 99.31
[6] 99.42 99.52 99.60 99.67 99.72 99.78 99.82 99.85 99.88 99.90
[7] 99.93 99.94 99.95 99.97 99.97 99.98 99.98 99.98 99.99 100.00
[8] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[9] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[10] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[11] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[12] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[13] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[14] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[15] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[16] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[17] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[18] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[19] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[20] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[21] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[22] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[23] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[24] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[25] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[26] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[27] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[28] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[29] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[30] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[31] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[32] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[33] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[34] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
[35] 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00 100.00
可以看到, 班上有40个人的时候, 有重复生日的概率已经高达90%左右了. 按中国班级的规定, 小学标准是45人,有94%的概率有两人同一天过生日. 初高中是50人, 概率则高达97%.如果把两个班放在一起, 概率就是100%了.