分类 未分类 下的文章

2020-2-26
腾讯物联网支持的:
序号|模组商|模组型号|通信制式
--|--
1|乐鑫|ESP8266|Wi-Fi
2|中移|M5310-A|NB-IoT
3|中移|M5311|NB-IoT
4|中移|M6315|2G
5|中移|M8321|4G
6|中移|ML302|LTE Cat.1
7|有方|N10|2G
8|有方|N21|NB-IoT
9|有方|N58|NB-IoT
10|有方|N720|4G
11|移柯|L206D|2G
12|移柯|L501C|LTE Cat.1
13|移柯|L620C|NB-IoT
14|广和通|L610|LTE Cat.1
15|高新兴|ME3616|NB-IoT

华为Hilink模组
RTL8710BX, WIFI
Hi3861, WIFI
MT7682M, WIFI
ESP8266EX, WIFI
RDA5981, WIFI

flowchart LR 债券---利率债 & 信用债 利率债---国债 & 地方政府债 & 央行票据 & 国家开发银行等政策性银行金融债 & 铁总等政府支持机构的债券 信用债---中期票据 & 短期融资券 & 企业债 & 公司债

MarkdownParse, 在标准markdown之外支持目录、公式和Mermaid图表, Mermaid支持流程图、时序图、甘特图、类图、Git图、实体关系图、用户体验图。
这个插件据说是和Typora的Markdown语法完全兼容的。这儿是MarkdownParse使用手册。这儿是meimaid官方使用手册

最近使用发现的问题: 对表格支持不好
一般表格我倾向于最简单写法:

A|B|C
--|--
1|2|3

现在我使用MarkdownParse就无法显示:
A|B|C
--|--
1|2|3

表头分割线必须写成和列数一模一样的方式才能正常显示:

A|B|C
--|--|--
1|2|3

如下:

A B C
1 2 3

目前是阿里云的“X享主机-X3(云)”, 一年88元,150M网页+8G流量+20M Mysql,PHP主机。不过得益于Typecho的精简,目前网页空间几乎没用,数据库用了不到10%。理论上这辈子似乎也够用了;-P
西部数码,一年68元,买3年送2年,相当于40.8一年。150M网页+15G流量+30M数据库,但似乎是Windows,也没有说是不是php,但其不建议php使用windows,而建议使用linux。
小鸟云, 共享主机原价84现在一年42元,Windows系统,支持php/asp/.net,2G网页+不限流量+100M Mysql。
阿里云的共享云虚机,现在最便宜的优惠后的价格是119每年,2G网页+40G流量+500M Mysql,支持Php。不过其原价是298一年,搞不好续费的时候又给你整什么幺蛾子。

知乎: 机器学习(非传统统计方法如回归)在量化金融方面有哪些应用?
知乎: 深度学习做股票预测靠谱吗?
里面高票回答有个叫张趔趄的回答比较认可: 市场其实是 归纳+演绎+博弈, 机器学习基于历史, 只能做归纳, 只能作为工具.
里面又提到了用LSTM模型做情感分析, 这个应该可以看做市场上的情感蔓延到什么程度.

MicroPython ,是在单片机上运行Python. 在W601上试过, 对于非实时的应用非常方便好玩, 然而对于实时应用简直就是一团糟.简单的IO输出操作, 操作时间竟然增加了至少3个数量级! 快速的键盘扫描,与自定义协议的IC适配等都无能为力.
Espruino,没有用过不好评价, 淘宝一查价格奇高无比, 300+, 跟10块钱的ESP8266模块完全没法比.
NodeOS, 这个设想上酷毙了的项目居然三年前就停止开发了...
Chrome OS
FydeOS, 国产版Chrome OS.

官方原文: 【插件开发】使用 Python 扩展 UiBot 的功能

主要步骤

  1. uibot安装目录下面的extend\python中放置xxx.py文件即可在uibot中使用import xxx引入定义的函数使用.
  2. 官方包在安装目录的lib\site-packages下, 如果不够用就需要自己复制粘贴过来. 当然更棒的方法是用pip直接装到这个目录下, 加上--target=即可:
    Pip install gooey --target="D:\myprog\UiBot Creator Community 5.5.0 (x64)\lib\site-packages"

    两者传参和返回值的测试

  3. 所以如果在py中定义了新的函数, 或者修改了形参数量需要在uibot中调用, 则需要重启creator. 因为py中def的函数名和形参是在启动creator的时候加载的, 然而函数体是实时从py函数体中调用的.
  4. py返回值中, int/float/string/list/dict/tuple类型都能正确识别,请知tuple是被当做list识别的. 但type类型不能识别, 所以不能return type(1), 需要转为string: str()
  5. py形参中, 从uibot串入的int/float/str/list/dict都能正确识别.
  6. py中的print并不能输出到uibot的输出窗口.
  7. python的内置库和第三方库都是不能直接'import'的, 需要写个py中转一下

从Uibot注入Python代码直接运行 (简版)

定义一个中转py,命名为run.py, 如下:

def e(func, runfunc):
    exec(func)
    return eval(runfunc)

第一个参数由exec()执行,没有返回值, 适合定义函数. 第二个参数由eval执行, 有返回值, 适合运行函数.

在uibot中直接运行python代码, 例如:

Import Run
Log.Info(Run.e("def add(a, b):\n  return a+b", "add(1,2)"))

将会返回3
这样就不需要对uibot开开关关的了, 可以直接调试. 另外也不需要再跑到extend\python中去更新py文件.

从Uibot注入Python代码直接运行 (强化版)

上面的简版无法从Uibot中读取变量, 下面这个版本则解决这个问题

# p = {   # params
#   g:{}, # eval(,g,)
#   l:{}, # eval(,,l)
#   f:['functionName1', 'functionName2'...], # function names from exec()
#}
def e(func, runfunc, p):
    exec(func)
    if 'g' in p:
        if 'f' in p:
            for fn in p['f']:
                p['g'][fn] = eval(fn)
        if 'l' in p:
            return eval(runfunc, p['g'], p['l'])
        return eval(runfunc, p['g'])
    return eval(runfunc)

解释: 增加了一个参数p, 用于给eval输入Uibot的变量. eval支持globals和locals变量的输入, 这儿都给用上了, 分别是p['g']p['l']. 按eval要求p['g']必须是一个dict,也即是{}
要注意的是, 输入的变量会冲掉以前的变量, 也就是在exec中定义的函数名也会被globals完全替代掉, 所以如果要用globals就必须重新在globals中引入函数名, 所以又增加了p['f']来输入函数名字符串的数组, 并将其用eval(fn)转换为真正的函数地址,输入给p['g']
必须要注意的是python的dict的子元素key的引用必须用数组形式加引号如p['f'], 这有时候显然不如js方便p.f
在uibot中直接运行python代码:

ret= Run.e('def add(a,b):\n return a+b', 'add(x,y)',{'f':['add'], 'g':{'x':1,'y':2}} )
Log.Info(ret)

显示-1

从Uibot注入Python代码直接运行 (强化版V2.0)

然而上面这样的调用方式还是很麻烦, 有没有更加简单的?
然而不管怎么试, 都没有办法做到直接在Uibot里面运行add(1,2)这样的形式, 从Python返回的函数指针到了Uibot里只被认作一个普通的python对象, 如果用Type查看, 居然还是String类型, 而不是function类型.
曲线救国的方式, 在res目录下新建三个文件, 分别是:
func.py

def add(a, b):
    return a + b

runfunc.py

add(a1, a2)

p.json

{
    "f": ["add"],
    "g": {"a1": 1, "a2":2},
    "l": {}
}

然后新建一个公共流程块命名为pub, 内容如下:

/*
语法糖, 可以让Uibot实时调用func.py中动态定义的函数, 如add, 形式为:
run.e("add", [1,2])
funcName: string,
funcParam: arr.
*/
Function e(sFuncName, arrFuncParam)
    Import run
    sFunc = File.Read(@res"func.py","auto")
    sRunFunc = sFuncName & "("
    dictP = {"f": [sFuncName],
    "g": {} }
    //组装成 funcName(a1,a2,a3...)这样的形式
    For i=1 To Len(arrFuncParam)
        sRunFunc = sRunFunc & 'a' &CStr(i)
        dictP['g']['a' &CStr(i)] = arrFuncParam[i-1]
        If Len(arrFuncParam) = i
            sRunFunc = sRunFunc & ')'
        Else
            sRunFunc = sRunFunc & ','
        End If
    Next
    Return Run.e(sFunc, sRunFunc, dictP )
End Function

/*
直接运行在func.py, runfunc.py p.json中定义的函数及参数
*/
Function py()
    Import run
    sFunc = File.Read(@res"func.py","auto")
    sRunFunc = File.Read(@res"runfunc.py","auto")
    dictP = JSON.Parse(File.Read(@res"p.json","auto"))
    Return Run.e(sFunc, sRunFunc, dictP )
End Function

这样在普通的流程块里就可以这样调用了:

pub.e("add",[1,2])

虽然和add(1,2)有些差距, 但怎么说都舒服多了不是. 也可以完全从文件调用:

pub.py()

Uibot和python怎么分工?

  • 我觉得Uibot对界面的处理使强项, 对逻辑处理就要差很多了, 这部分用python似乎更好.
  • 另外Python库很丰富, 可以扩展出很多应用.
  • Uibot对用户输入的界面也比较弱. Python中有一个Gooey看起来要好用的多.