ESP8266 Dev Board 电路图

NodeMCU 引脚对应图


NodeMCU引脚对应图

js拦截页面跳转并获取目标地址

  1. navigation.onnavigate = function () {
  2. // 这里可以获取到最终跳转到的url
  3. var url = arguments[0].destination.url;
  4. console.log('url: ', url);
  5. return window.event.returnValue = false;
  6. }

windows 10 注册表修改

  1. win+r 输入 regedit
  2. 在导航中输入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
  3. 右键 > 新建: AssumeUDPEncapsulationContextOnSendRule 类型选择 DWORD (32 位)值(D)
  4. 然后双击 AssumeUDPEncapsulationContextOnSendRule数值数据(V) 中输入 2
  5. 重启

关于Chrome跨域The request client is not a secure context and the resource is in more-private address space loca相关提示的解决

最近想使用serve 配置一个本地的 chrome 脚本注入功能, 没想到浏览器提示:

Access to script at ‘http://localhost:85/index.js‘ from origin ‘http://www.xxx.com‘ has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space local.

貌似是chrome有设置, 在地址栏中输入:
chrome://flags/#block-insecure-private-network-requests

然后选Disabled ,relaunch 后就能恢复正常了, 根据翻译:

block-insecure-private-network-requests
防止非安全上下文向更私密的IP地址发出子资源请求。如果1)IP1是本地主机,而IP2不是,或者2)IP1是私有的,而IP2是公共的,则IP地址IP1比IP2更私有。这是全面实施CORS-RFC1918的第一步:https://wicg.github.io/cors-rfc1918–Mac、Windows、Linux、Chrome OS、Android、Fuchsia
阻止不安全的专用网络请求

应该是处于安全考虑, 禁止向私有地址请求和发生数据

直播服务器搭建方法

直播服务器搭建流程

  1. 服务器上安装node-media-server
  2. 本地安装ffmpeg
  3. 测试推流
  4. 浏览器查看直播内容

1. 安装node-media-server

  1. ## 在服务器上启动node-media-server 服务
  2. docker run --name nms -d -p 1935:1935 -p 8000:8000 -p 8443:8443 illuspas/node-media-server

2. 本地安装 ffmpeg

  1. 下载解压对应版本的ffmpeg到本地: https://github.com/BtbN/FFmpeg-Builds/releases
  2. 添加环境变量

3. 测试推流

  1. ## 在本地找到视频文件目录, 执行推流命令
  2. ffmpeg -re -i hello.mp4 -c copy -f flv rtmp://localhost/live/hello

4. 浏览器查看直播

使用NodePlayer.js 播放直播内容: https://github.com/illuspas/NodePlayer.js

  1. <canvas id="video" width="640" height="480" data-url="ws://localhost:8000/live/hello"></canvas>
  2. <input type="button" onclick="play()" value="play">
  3. <script src="NodePlayer.js"></script>
  4. <script>
  5. function play() {
  6. var url = document.getElementById("video").dataset.url;
  7. var np = new Module.NodePlayer();
  8. np.setPlayView('video');
  9. np.setScaleMode(1);
  10. np.on('start', () => {
  11. Module.print('NodePlayer on start');
  12. });
  13. np.on('close', () => {
  14. Module.print('NodePlayer on close');
  15. });
  16. np.on('error', (err) => {
  17. Module.print('NodePlayer on error', err);
  18. });
  19. // np.enableVideo(true);
  20. // np.enableAudio(true);
  21. np.start(url);
  22. }
  23. </script>

相关下载

  1. node-media-server: https://github.com/illuspas/Node-Media-Server
  2. ffmpeg: https://github.com/BtbN/FFmpeg-Builds/releases
  3. NodePlayer: https://github.com/illuspas/NodePlayer.js

Espruino单片机上的javascript

  话说一直想用javascript语法写单片机程序, 因为我本身是web开发出身, 太熟悉js语法了, 以至于看到c 或 python都感觉很别扭, 于是就在网上找到了这个espruino, espruino是一个固件, 可以让esp8266等芯片支持使用js语法编程, 大大减少了web人员学习单片机开发的成本, 甚至可以让本身会js的人直接上手, 了解基础api后, 就可以直接开发自己的单片机项目了, 这里是官网: https://www.espruino.com/ , Espruino文档: http://www.espruino.com/Reference#software

  但是, 官网提供的开发工具用着很不习惯, 而且代码都在一个文件中, 很不方便管理.

  于是我就自己根据espruino的aip, 自己写了个命令行工具, 可以使用自己熟练的ide, 然后配合命令行工具进行开发, 执行的时候就像nodejs一样方便, 目前这个命令行工具叫espjs, 文档地址: https://www.kancloud.cn/shuai/espjs

espjs开源地址 github: https://github.com/zhaishuaigan/espjs
espjs国内下载: https://fetch.ngapp.net/soft/espjs/espjs-latest.zip

  这里简单说明一下使用方法:

  1. 将此压缩包里面的文件放到不包含空格和中文的目录中. 如 c:\espruino-tools
  2. 配置系统环境变量path, 添加 c:\espruino-tools
  3. 进入项目目录, 在目录的地址栏输入 cmd, 进入命令行.
  4. 输入espjs flash esp01s 烧写espruino固件
  5. 输入espjs upload 上传当前目录中的代码到设备

然后设备就开始运行代码了, 之后修改代码只需要执行upload 即可更新代码,
实例可参考 demo 目录下的文件
index.js 或 main.js 会被当做入口文件加载执行

注意事项:
1: 端口是自动选择的, 插上设备后会自动选择, 如果有多个设备, 可以使用port命令切换设备
2: 默认的波特率是115200, 如需修改请到config.json中修改
3: 如果要增加开发板支持, 请到config.json 的Flash字段追加
4: 模块不支持远程加载, 例如 require(“MQTT”) 会提示模块不存在, 解决方法是 手动下载mqtt模块(modules add MQTT), 然后使用 require(“modules/MQTT.min.js”) 进行引用.

docker容器不能启动的解决方法

因为系统异常退出, 导致容器不能启动, 提示下面错误:

  1. root@host:~# docker start gogs
  2. Error response from daemon: OCI runtime create failed: container with id exists: 1d8cac1e6ed19db70171786f102f66194d0b2fc5c9f8e6b58da73ae21b319dc8: unknown
  3. Error: failed to start containers: gogs

解决方法和步骤:

  1. 进入系统目录 cd /var/run/docker/runtime-runc/moby/
  2. 删除对应的id目录, 比如这里是 rm -rf 1d8cac1e6ed19db70171786f102f66194d0b2fc5c9f8e6b58da73ae21b319dc8

之后就可以成功 docker start gogs 了.

windows 10 无法连接samba的解决方法

1、首先按window+R键打开运行键入regedit 启动本地组策略编辑器。
2、进入地址计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\ParametersAllowInsecureGuestAuth设置为1
3、进入计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\LanmanWorkstation,将AllowInsecureGuestAuth设置为1

为什么程序员反对乱改需求

综合整理:程序员的那些事

为什么程序员/设计师怕改需求?网上有类似的段子,比如:「杀一个程序员不需要用枪,改三次需求就可以了。」

有网友在知乎上提问「如何向外行解释产品经理频繁更改需求为什么会令程序员烦恼?」。

某网友的回复:

你去饭店,坐下来。
“服务员,给我来份宫保鸡丁!”
“好嘞!”
——————这叫原始需求

大厨做到一半。
“服务员,菜里不要放肉。”
“不放肉怎么做啊?”
“不放肉就行了,其它按正常程序做,不就行了,难吗?”
“好的您稍等”
——————中途需求变更

厨房:
大厨:“你大爷,我肉都回锅了”
服务员:“顾客非要要求的嘛,你把肉挑出来不就行了吗”
大厨:“行你大爷”
然而还是一点点挑出来了
——————改动太大,部分重构

餐厅:
“服务员,菜里能给我加点腐竹吗?”
“行,这个应该简单。”
——————低估改动成本

厨房:
大厨:“你TMD,不知道腐竹得提前泡水?炒到一半才说?跟他说,想吃腐竹就多等半天”
服务员:“啊你怎么不早说?”
大厨:“早说你MLGB我怎么知道他要往宫保鸡丁里放腐竹”
然而还是去泡腐竹了
——————新需求引入了新研发成本

餐厅:
“服务员,还是把肉加回去吧”
“您不是刚说不要肉吗”
“现在又想要了”
“…好的您稍等”
——————某一功能点摇摆不定

厨房:
大厨:“日你啊,菜都炒过火了你让我放肉?还好肉我没扔”
服务员:“客户提的要求你日我干嘛?”
大厨:“你就不能拒绝他啊?啊?”
服务员:“人家是客户嘛。”
——————甲方是大爷

餐厅:
“服务员!服务员!”
“来了来了,你好?”
“怎么这么半天啊?”
“稍等我给您催催啊”
——————改动开始导致工期延误

厨房:
大厨:“催你M催,腐竹没泡好,我还得重新放油,他要想吃老的也行,没法保质保量”
——————开发者请求重新排期

餐厅:
服务员:“抱歉,加腐竹的话得多等半天,您别着急哈”
“我靠要等那么久?我现在就要吃,你们能快点吗?”
“行…您稍等”
——————甲方催活

厨房:
大厨:“我日他仙人板板,中途改需求又想按期交付,逗我玩呢?”
服务员:“那我问问,要不让他们换个菜?”
大厨:“再换我就死了”
——————开发者开始和中间人pk

餐厅:
“服务员,这样吧,腐竹不要了,换成蒜毫能快点吗?对了,顺便加点番茄酱”
——————因工期过长再次改动需求

厨房:
大厨:“我日了狗啊,你TM不知道蒜毫也得焯水啊?还有你让我怎么往热菜里放番茄酱啊??”
服务员:“焯水也比等腐竹强吧,番茄酱往里一倒不就行了吗?很难吗?”
大厨:“草。腐竹我还得接着泡,万一这孙子一会又想要了呢。”
——————频繁改动开始导致大量冗余

餐厅:
“服务员,菜里加茄丁了没有?我去其它饭店吃可都是有茄丁的”
“好好好您稍等您稍等”
——————奇葩需求

厨房:
大厨:“我去他二大爷他吃的是斯里兰卡三流技校炒的宫保鸡丁吗?宫保鸡丁里放茄丁??”
服务员:“茄丁抄好了扔里边不就行了吗?”
大厨:“那TM还能叫菜吗?哪个系的?”
服务员:“客户要,你就给炒了吧。”
大厨:“MB你顺道问问他腐竹还要不要,我这盆腐竹还占着地方呢不要我就扔了”
——————奇葩你也得做

餐厅:
“服务员,还要多久能好啊”
“很快,很快…”
“再给我来杯西瓜汁。”
“…好”
“我再等10分钟,还不好我就走了,反正还没给钱。”
“很快,很快…”
——————黑暗前的最后黎明

10分钟后
“咦,我上次吃的不是这个味啊?”
从厨房杀出来的大厨:“我TM就日了你的狗…”
——————最终决战

——————
你=客户
服务员=客户经理+产品经理
大厨=码农
请自行转换…
——————
注:以上场景已极度夸张,实际生产生活中码农和PM是和睦友好的相亲相爱的一家人
——————
注:对于做2C产品的公司,你=公司大boss