2021年4月

最终还是要靠FastLED啊, 直接做好了Nodemcu的兼容.
FastLED的文档写得也很全面.
编译的时候有点儿问题, 不知道影响不影响.

In file included from D:\r\arduino\test2\FastLED_Blink\FastLED_Blink.ino:2:0:

C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:14:21: note: #pragma message: FastLED version 3.004.000

 #    pragma message "FastLED version 3.004.000"

                     ^

In file included from C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:65:0,

                 from D:\r\arduino\test2\FastLED_Blink\FastLED_Blink.ino:2:

C:\Program Files (x86)\Arduino\libraries\FastLED\src/fastspi.h:140:23: note: #pragma message: No hardware SPI pins defined.  All SPI access will default to bitbanged output

 #      pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"

                       ^

Executable segment sizes:


IROM   : 230192          - code in flash         (default or ICACHE_FLASH_ATTR) 


IRAM   : 27012   / 32768 - code in IRAM          (ICACHE_RAM_ATTR, ISRs...) 


DATA   : 1248  )         - initialized variables (global, static) in RAM/HEAP 


RODATA : 692   ) / 81920 - constants             (global, static) in RAM/HEAP 


BSS    : 25000 )         - zeroed variables      (global, static) in RAM/HEAP 


项目使用了 259144 字节,占用了 (24%) 程序存储空间。最大为 1044464 字节。
全局变量使用了26940字节,(32%)的动态内存,余留54980字节局部变量。最大为81920字节。

除了宗教和神棍, 现代人类其实创建了很多事物用于预测. 其中最准确的预测还是要回到数据上来.
对于经济的预测, 人类创造的就是金融证券市场. 似乎哪儿说的, 股市对经济有4~6个月的预测提前期.
金融证券, 股市期货事实上是把投资者的分析结果, 量化为股票和期货的价格, 从而形成对经济的量化的预测.
目前看到人类基因组学, 宏基因组学等逐渐从实验室转向了键盘上的数据分析, 以实现对人类健康的精确预测.
人类基因组是3T的数据, 肠道微生物宏基因组是3T*10K的动态变化数据, 这些数据量无疑及其庞大的. 如何发分析, 如何用大数据分析, 机器学习分析, 人工智能分析, 可能是人类健康预测的发展方向.
更不用说天气预报基于了更多的数据进行预测, 使用超级计算机运算才得出几乎很准确的预测结果了.
精准的数据量化分析, 运用各种工具, 提出新的指标, 是经济金融预测, 健康预测未来的发展方向, 也可能是其他需要预测的学科的发展方向.

Creator 版本6.0.1

2024/1/8 在最新的文档中介绍了对目标的选择和目标选择器的使用
https://documents.laiye.com/rpa-guide/docs/DevGuideD1/Chapt3-Target
直接用命令里的获取目标只适合目标的名称不会变化的. 如果目标的名称会变, 就只能用目标选择器去拆解目标.
按官方文章给出的方法, 可变目标名称一个是将aaname改为*, 但会增加错选的概率. 另一个是通过目标选择器(UI分析器)选择上级的不变目标, 再用获取子元素的命令获取子元素, 再从子元素中找到想要的目标.

Creator 研究版本: 5.5.0

对Chrome浏览器的选择

鼠标点击目标为例,

一个典型的选择器

  {
    wnd: [
      { cls: "Chrome_WidgetWin_1", title: "*", app: "chrome" },
      { cls: "Chrome_RenderWidgetHostHWND", title: "Chrome Legacy Window" },
    ],
    html: [{ tag: "SPAN", parentid: "body", aaname: "idarc", idx: 0 }],
  }

wnd应为window的缩写, 对于Chrome的窗口的选择代码死树是固定的.
html因为对具体页面的选择.
tag: 为选择文本的标签名
parentid: 上级中最近一个有id的标签的id. 这儿正好是body, 但不是指body标签.
aaname: 标签内的文字. 不加通配符是需要精确匹配的. 另外试过是支持*?通配符, 用法和正则一样. 其他正则符号似乎就不支持了.
idx: index的简称, 在parentid的标签内可能有出现了多个tag, 其中的文字也是相同的, 这个idx是第几个的意思. 从0开始计数.
如果tag能定位, 则不需要parentid, 其他的键也类似.

点击table内的一个单元格

    html: [
      { tag: "TABLE", parentid: "J_Reviews" },
      { tag: "TD", tableRow: "2", tableCol: "3" },
    ]

html数组中的值是依次缩小搜索范围的.
定位某一个单元格TD, 出现了两个新的键名: tableRowtableCol, 分别是行数和列数. 这儿注意, 行数和列数是从1开始数的.

点击一个图片

    html: [
      {
        tag: "IMG",
        parentid: "J_Reviews",
        "css-selector":
          "body>div>div>div>div>div>div>div>div>div>div>table>tbody>tr>td>div>div>div>ul>li>img",
        src:
          "//img.alicdn.com/bao/uploaded/i4/O1CN012qd0b21L8NLDRJi8f_!!0-rat*",
      },
    ]

这儿出现了另两个新键名:
css-selector: css选择器. 但是这个里面没有出现id和class的选择器. 试了一下, class选择器.似乎是不支持的.
src: 可以写入src. 其中似乎可以使用*通配符.

内嵌与chrome中的目标选择器JSON生成工具

参考: https://zhuanlan.zhihu.com/p/90916040?from_voters_page=true
位置在F12->Elements,然后点击中间Styles菜单行最后的>>,选择UiBot.
用Chrome自己的选择器选择目标后, 再点击Uibot中的生成选择器生成选择器(CSS selector)生成选择器JSON代码.
普通选择器样式:

{
    "html": {
        "tagName": "P",
        "attrMap": {
            "tag": "P",
            "isleaf": "1"
        },
        "index": 24
    },
    "wnd": [
        {
            "app": "chrome",
            "cls": "Chrome_WidgetWin_1",
            "title": "*"
        },
        {
            "cls": "Chrome_RenderWidgetHostHWND",
            "title": "Chrome Legacy Window"
        }
    ]
}

CSS选择器样式:

{
    "html": {
        "tagName": "p",
        "attrMap": {
            "css-selector": "body>div>div>main>div>article>div>div>p"
        },
        "index": 34
    },
    "wnd": [
        {
            "app": "chrome",
            "cls": "Chrome_WidgetWin_1",
            "title": "*"
        },
        {
            "cls": "Chrome_RenderWidgetHostHWND",
            "title": "Chrome Legacy Window"
        }
    ]
}

常见问题

  1. 被操作软件不支持特别大量数据导出(如超过10000条). 解决: 发现这个最大值, 并分批处理.
  2. 被操作网站元素变化, 主要有不同权限登录的账号的内容层级不同/网站加密导致每天随机生成一些内容反爬. 解决: 使用目标账号进行操作, 并剔除随机内容.
  3. 异常定位: Creator软件报错的代码位置不是真实的错误代码位置. 解决: 关键位置进行LOG跟踪
  4. 内存问题: 浏览器或目标软件长期运行(如超过两三天)导致内存溢出报错. 解决: 定时清空内存或者重启.
  5. 测试不足(权限问题). 尤其对于不同的账号操作不同的数据, 都可能由于账号权限不同, 目标数据读写权限不同导致报错. 解决: 最好使用所有目标账号对所有目标数据全部测试一遍.

巴比伦河

在巴比伦河边上
我们坐在地上
噢,我们就哭了起来
我们想起了锡安啊

恶徒们!
把我们囚禁
逼我们歌唱
在这陌生的土地
我们怎能再把主的歌唱?

我们口中的言语
我们心里的冥想
今夜,在您的注视下
就请您收下吧

在巴比伦河边上
我们坐在地上
噢,我们就哭了起来
我们想起了锡安啊

后记:
我觉得默认翻译的不好,比如把Zion翻译成家乡。这其中确有思乡之情,却又不仅仅是普通的思乡之情而已。要说比较接近的情感,可能更接近南朝后主李煜的《虞美人》中的“一江春水向东流”的情感,是国破人虏阶下囚的情感;巴比伦之囚40多年,囚于其中,永不知归,是在绝望中忧伤、绝望中思乡吧!
所以这不仅仅是思乡之情,还有家国之情、民族之情,还有我们不甚熟悉的宗教之情。

这是首小时候就熟悉的歌,听上去欢快明亮动感,20多年后的今天,长大了才知道,这竟是一首忧伤的歌。现在了解了犹太人的巴比伦之囚,看过《黑客帝国》知道了锡安,才了解了歌词背后的意义。原来,旋律的欢乐是为侵略和奴隶主假装出来的欢乐,而用他们听不懂的语言,才直白地向自己的主说出心里的痛苦。

附录:原版歌词和默认翻译。
By the rivers of Babylon, there we sat down
来到巴比伦河边,我们坐在你身旁
ye-eah we wept, when we remembered Zion.
耶,我们哭泣又悲伤,当我们想起了家乡
By the rivers of Babylon, there we sat down
来到巴比伦河边,我们坐在你身旁
ye-eah we wept, when we remembered Zion.
耶,我们哭泣又悲伤,当我们想起了家乡
When the wicked Carried us away in captivity
当邪恶的人把我们抓走囚禁
Required from us a song
还强迫我们把歌唱
Now how shall we sing the lord's song in a strange land
我们怎能在他乡唱得出圣歌
When the wicked Carried us away in captivity
当邪恶的人把我们抓走囚禁
Requiering of us a song
还强迫我们把歌唱
Now how shall we sing the lord's song in a strange land
我们怎能在他乡唱得出圣歌
Let the words of our mouth and the meditations of our heart
在陌生的异国他乡让我们心里的话儿和期望
be acceptable in thy sight here tonight
在今夜向你倾叙
Let the words of our mouth and the meditation of our hearts
让我们心里的话儿和期望在今夜向你倾叙
be acceptable in thy sight here tonight
在今夜向你倾叙
By the rivers of Babylon, there we sat down
来到巴比伦河边,我们坐在你身旁
ye-eah we wept, when we remembered Zion.
耶,我们哭泣又悲伤,当我们想起了家乡
By the rivers of Babylon, there we sat down
来到巴比伦河边,我们坐在你身旁
ye-eah we wept, when we remembered Zion.
耶,我们哭泣又悲伤,当我们想起了家乡
By the rivers of Babylon (dark tears of Babylon)
来到了巴比伦河边(哭泣的巴比伦)
there we sat down (You got to sing a song)
我们坐了下来(你要唱一首歌)
ye-eah we wept, (Sing a song of love)
我们哭泣(吟唱着一首爱的歌)
when we remember Zion. (Yeah yeah yeah yeah yeah)
当我们想起家乡(是啊~~)
By the rivers of Babylon (Rough bits of Babylon)
来到巴比伦河边(来到巴比伦河边)
there we sat down (You hear the people cry)
我们坐了下来(你听到人们哭泣)
ye-eah we wept, (They need their God)
我们哭泣(他们需要上帝)
when we remember Zion. (Ooh, have the power)
当我们想起巴比伦(噢我们就得到力量)