这篇文章比较好
下面是debian/ubuntu上的配置

sudo apt install vsftpd
sudo service start vsftpd
sudo vim /etc/vsftpd.conf
sudo openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout /etc/vsftpd.pem -out /etc/vsftpd.pem

配置修改

# change to your port
listen_port=21

# enable TLS/SSL
ssl_enable=YES

# force client to use TLS when logging in
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

# specify SSL certificate/private key (Debian/Ubuntu)
# For CentOS/Fedora/RHEL, replace it with /etc/vsftpd/vsftpd.pem
rsa_cert_file=/etc/vsftpd.pem
rsa_private_key_file=/etc/vsftpd.pem

# define port range for passive mode connections
pasv_max_port=65535
pasv_min_port=64000

POE供电适合10BASE-T和100BASE-TX两种标准, 也就是10M和100M局域网. 这两种标准使用的双绞线,传输数据只是用了其中的1,2,3,6(白橙,橙, 白蓝,蓝)两对线, 还有两对4,5, 7,8 没有使用. POE使用4,5线传输正电压, 7,8线传输负电压.输出电压最大48v. 使用万用表测量电压即可.

适用于DOIT的ESP32 DEVKIT v1
pyesptool.exe --chip esp32 --port COM3 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 C:\r\arduino\arduino-1.6.8_1.5.4\hardware\espressif\esp32/tools/partitions/boot_app0.bin 0x1000 C:\r\arduino\arduino-1.6.8_1.5.4\hardware\espressif\esp32/tools/sdk/bin/bootloader.bin 0x10000 C:\r\arduino\dist/Blink.ino.bin 0x8000 C:\r\arduino\dist/Blink.ino.partitions.bin
esptool.py v2.1-beta1

支持flash为512KB, 1M, 2M, 4M.
4KB为1个扇区,也就是16进制的0x1000.

  1. 非OTA布局
    a) 前256KB烧写主程序+用户数据+用户参数, 主程序文件名eagle.flash.bin, 最大64KB, 用户参数占用最后4个扇区, 共16KB
    b) 后面的部分, 烧写主程序+用户数据+系统参数, 主程序文件名 eagle.irom0text.bin, 最大768KB, 默认200KB. 系统参数占用最后4个扇区, 共16KB.sdk提供. 依次为:
    b1) 初始化射频参数,1个扇区, esp_init_data_default.bin
    b2) 初始化系统参数,2个扇区, blnk.bin
    b3) bootloader, 1个扇区.

  2. OTA布局
    a) 可选前段是256KB, 512KB, 1MB, 后段至少要大于等于前段的大小.
    b) 前段包括启动程序+主程序+用户数据+用户参数(后两个扇区为云端KEY). 启动程序boot.bin为4KB, 主程序user1.bin, 用户参数4个扇区16KB的后两个扇区存储乐鑫云端KEY master_device_key.bin
    c) 后段包括预留区+主程序+用户数据+系统参数. 预留区4KB, 与启动程序的4KB对应, 主程序user2.bin,实际上是云端下载的缓存区, 事实上也不需要烧录. 系统参数与非OTA布局的相同.

  3. 布局文件的位置
    在ESP8266_NONOS_SDK/ld/eagle.app.v6.ld中的MEMORY字段.

  4. eagle.flash.bin和eagle.irom0text.bin的构成
    eagle.flash.bin是用于存储直接读取到程序内存运行的程序段和数据内存的数据段的.
    eagle.irom0text.bin是用于存储放在flash上, 不直接读取到内存中的程序段的.

程序内存:iram, internal ram, 通过ibus访问, 共32KB, 存放编译后的elf的TEXT字段
数据内存:dram, data ram, 通过 dbus访问, 可能是80kb或者96kb. 存放编译后的elf的data, rodata字段, 这部分字段可用约50kB. 其他的空间用于存放BBS, stack, heap.
FLASH存储: irom, 最大768KB, 存放编译后的elf的irom0.text字段, C源码函数前面有ICACHE_FLASH_ATTR前缀的就是说这个函数是放在irom中的. 另, 最大768KB的原因是, irom起始于256KB处, esp8266最大访问1MB程序段, 故1MB - 256KB = 768KB.
具体需要看(sdk中的eagle.app.v6.ld文件)[https://github.com/espressif/ESP8266_RTOS_SDK/blob/master/ld/eagle.app.v6.ld]对这几个存储的地址和大小的分配, 例如:

MEMORY
{
  dport0_0_seg :                        org = 0x3FF00000, len = 0x10
  dram0_0_seg :                         org = 0x3FFE8000, len = 0x18000
  iram1_0_seg :                         org = 0x40100000, len = 0x8000
  irom0_0_seg :                         org = 0x40220000, len = 0x5C000
}

  1. 编译术语
    BBS block started By Symbol. 存放未初始化的全局变量, 静态分配
    data 已经初始化的全局变量, 静态分配
    text 程序执行代码
    rodata 字符串与#define常量
    heap 堆,动态分配的内存段(malloc, free)
    stack 栈, 临时局部变量, 函数调用栈
    常量段, 编译器产生的数据

参考(ESP8266_NONOS_SDK开发包生成的镜像文件构建步骤分析)[http://blog.csdn.net/yannanxiu/article/details/51371798]
(bss,data,text,rodata,堆,栈,常量段)[http://blog.csdn.net/ouyang_linux007/article/details/7448814]

electrum 轻量级btc离线冷钱包
blackbird 自动化市场差价交易机器人
bitcoinjs-lib btc钱包基础库
EthList Eth学习阅读清单
gekko btc自动交易机器人(node编写)
ccxt 自动化交易工具(js/py)
BitcoinExchangeFH 自动化交易工具(js)
blockchain_guide 区块链技术指南(中文版)
XChange Java实现的多市场交易API
bitcoin-arbitrage btc机会发现,包含自动交易机器人
cpuminer cpu矿机
StockSharp 算法交易和量化交易机器人的开发工具
tribeca 高频交易平台
cointrol 交易机器人

在几个月没有更新系统之后,乐视的手机APP开始自行更新。先是日历里加上了特别low的贴片广告,然后桌面也加上了APP推荐,每点开一个文件夹下面就给你推荐8个应用,每次点开都不重样,每次点击都耗掉几十k流量,让人不胜其烦。好在可以在管家里关掉,只是不知管家那天也更新了。。。
乐视没钱以后,这是把手机系统更新卖给了广告联盟吗?!

找到(这篇文章)[https://blog.attachix.com/live-debugging-with-open-source-tools-programming-for-esp8266-part-4/],以及espressif的官方支持(esp-gdbstub)[https://github.com/espressif/esp-gdbstub]
(全部四篇文章)[https://blog.attachix.com/tag/esp8266/]

这篇文章介绍了加速度计、陀螺仪、地磁罗盘、GPS综合使用,保持飞行器稳定的方式,并且给出了一个IMU的概念(惯性导航单元 inertial measurement unit ),淘宝搜索IMU可以找到相应模块,50元左右。

传统py界面开发有pyqt,wxpython之类,没有深入,原因是看了开头是以函数调用来生成窗口,就觉得很麻烦。kivy看起来更加描述性,并且支持win,OSX,Linux,iOS,Android五大平台,甚至好过JS,JS的electron加cordova才相当于kivy。如果是这样,开发测试应用应该会比较快,唯二的可能的坑是,界面表现不丰富,比不上h5+css3,毕竟h5是标准;另外是插件不足,有的系统调用缺乏插件。kivy一个第三方库,试图同时做跨桌面移动5平台,还要做h5和css事情,怀疑精力能力都不足啊

其实有蛮多替代的,在bing搜索cmd alternative即可。我现在使用的是cmder,看起来比较简洁,主要空间用作显示,没有工具栏什么的。主要好处是什么?可以看utf-8(不太完美,中文字符和英文字符同宽,都重在一起了),还可以使用^c^v复制粘贴(win10才支持的),并且自带ssh,git
ssh远程连接的替代,Putty当然是最出名的,不过putty的配置很不好用,还有个选择是xshell,个人和家庭使用时免费的。

哦,居然有这么个东西,并且杀软完全不会查出来的。。。访问bing被劫持到baidu然后还加上劫持者自己的推广号码来赚钱。。。
解决方式:管理员运行cmd,输入
···
netsh winsock reset
···
然后重启即可

默认的用法有点儿麻烦. 分为等待deviceready->请求->开启->读取->处理这么四步.
最好是安装cordovarduino这个插件, 而不是cordova-plugin-serial. 后者的兼容性似乎有些问题. 除此之外, 这两个插件的用法是一样的.

var serialdata = ''
document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {
    requestSerial();
}

function requestSerial(){
    serial.requestPermission(function success(){
        openSerial()
    }, function error(){
    });
}

function openSerial(){
    serial.open({
        baudRate: 115200,
        sleepOnPause: false
    }, function success(){
        readSerial()
    }, function error(){
    });
}
function readSerial(){
    serial.registerReadCallback(
        processSerialData,
        function error(){
        });
}

function processSerialData(data){
    var view = new Uint8Array(data);
    //按utf8方式解码
    serialdata +=  decodeURIComponent(escape(String.fromCharCode.apply(null, view)))
}

在使用cordova的serial串口插件调试的时候,总是要在安装包和调试的时候连线, 接USB串口的时候又换设备, 是否能通过android手机的WIFI与之连接, 然后同时插上串口 OTG调试呢? 当然是可以的.
主要参考文章:run-install-debug-android-applications-over-wi-fi

  • 首先要通过几个命令,从USB线切换到串口上去, 此时应该连接好usb线, adb devices 可以发现当前的android设备

  • 设置调试接口:

    adb tcpip 5555

  • 查看手机ip, 按参考文章中的命令adb shell netcfg并没有成功, 不过你总可以通过其他方式(设置->WIFI->详情)得到ip的,比如ip 是192.168.1.8

  • 切换USB为WIFI连接调试

    adb connect 192.168.1.8:5555

如果输出connected to 192.168.1.8:5555 表示已经切换成功!
按照文章, 命令 adb -s :5555 usb 可以在切回来. 不过还没有尝试.

  • 此时, cordova内的webview可以通过chrome浏览器的chrome://inspect查看了! 还能调试哦!

  • 如果要通过cordova安装apk, 可以:
    cordova run android --target=192.168.1.8:5555

cordova中使用vue,主要是CSP(Content Security Policy)的问题. 最简单的应对是使用CSP版本的vue. 可惜只有1.x的vue才支持. 1.x的最后一个csp版本是1.0.28, 下载链接, 该版本github地址
另有一篇文章讲怎么使用非CSP版本的vue: building-a-mobile-app-with-cordova-vuejs
但我使用后发现并不奏效...罢了..

如果要使用vue2.x,根据官方的描述:

CSP environments

Some environments, such as Google Chrome Apps, enforce Content Security Policy (CSP), which prohibits the use of new Function() for evaluating expressions. The full build depends on this feature to compile templates, so is unusable in these environments.
On the other hand, the runtime-only build is fully CSP-compliant. When using the runtime-only build with Webpack + vue-loader or Browserify + vueify, your templates will be precompiled into render functions which work perfectly in CSP environments.

也就是说使用webpack编译过的.vue就可以自带CSP属性.