Posts under category 代码笔记

Matlab与BrainVision脑电信号录制软件的并口通信

Matlab中可以使用io64包向并口发送数据。
io64是一个可以用作并口通信的包,其使用方法在官网有清楚的介绍。此文写作时io64包的官网挂了,可以使用互联网档案馆-io64官网20180309002101归档

下文中BrainVision脑电信号记录软件简称为Recorder。

在Matlab通过io64与Recorder的通讯过程中,信号使用并口发送,程序向Recorder发送一次Marker的通信过程如下(由测试经验得出,无官方文档):

  1. 拉高并口电平,即发送数据信号,如代码io64(ioObj, address, singal);
  2. 等待一段时间,这段时间可能与Recorder刷新率有关;
  3. 拉低并口电平,即结束此次数据发送,代码io64(ioObj, address, 0);

Recorder记录到Marker的时间是接收到第一步程序发出的电信号的时间。发送的信号最大为8个比特位,即十进制数字区间[0, 255]。

第二步等待一段时间仅仅是为了确保Recorder成功接收到了信号,建议最短不要低于0.001(测试经验所得,无文档,可能与并口线长度等有关)。

第三步拉低电平是为了结束一次数据发送,理论上第一步与第三步之间的时间(即第二部的等待时间)可以很长,测试过程中等待2秒无异常。因此第三步拉低电平的信号可以在结束一个trial之后发送,以免影响到实验过程中trial的onset或者response时间。

如果不进行第三步拉低电平的操作,Recorder虽然能够正常显示下一次发送的Marker,但是在Marker日志中会出现伪信号导致的异常Marker。

综上,给出两个demo。由于第二种没有额外等待时间的影响,因此记录各时间节点时不需要花太多精力考虑时间误差的问题。

1. 发送信号结束后开始trial

address = hex2dec('D010');
ioObj = io64();
status = io64(ioObj);
    
for i = 0:1e10
    marker =  mod(i, 9) + 1;
    
    io64(ioObj, address, marker);
    WaitSecs(0.004);
    io64(ioObj, address, 0);

    % Trial start
    WaitSecs(2);
       
end

2. 拉高电平后开始trial,结束trial后拉低电平

address = hex2dec('D010');
ioObj = io64();
status = io64(ioObj);
    
for i = 0:1e10
    marker =  mod(i, 9) + 1;
    
    io64(ioObj, address, marker);

    % Trial start
    WaitSecs(2);

    io64(ioObj, address, 0);   
end

Typecho插件:AliOssForTypecho--使用AliyunOSS储存Typecho上传附件

2020年6月,本插件发布1.1.8版本。


2022年,humu更新插件,支持php8。有需要的朋友请到Github自取。


更新内容

此版本修复了以前版本的一些BUG,做了一些改善,主要有:

  1. 使用aliyun-oss-php-sdk Release 2.3.1开发;
  2. 不再为每个文件创建单独的文件夹;
  3. 检测已上传过的文件,若存在同名文件,则自动命名为 name(1).ext,name(2).ext...;
  4. 优化了上传失败后的逻辑,详细记录失败日志,在插件配置页面即可看到;
  5. 增加新功能,可自定义图片处理样式;

祝使用愉快~

插件信息

插件名:AliOssForTypecho
作者:droomo
当前版本:v1.1.8
更新时间:2020-06-27
下载地址:https://github.com/droomo/AliOssForTypecho/archive/v1.1.8.zip
百度网盘:https://pan.baidu.com/s/1JeyjeFLLEYd2G4pRcL_O7w 提取码:bum0
Github地址:https://github.com/droomo/AliOssForTypecho

使用方法

  1. 下载插件,若github地址打不开,可通过百度网盘下载;
  2. 解压插件,将解压后的文件夹重命名为AliOssForTypecho
  3. 替换原来插件。

使用截图

使用截图


另外针对评论中提议较多的做出一些解释:
Q: 为什么不根据文章id来归档?
A: 因为在上传附件时,插件并无法得到文章信息。根据日期归档是通常做法,与Wordpress保持一致。

- Read More -

并查集

在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个操作用于此数据结构:
Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。
Union:将两个子集合并成同一个集合。
引用自wikipedia并查集

- Read More -

给oj添加虚拟评测功能

前天写的刷题机器人就是做vjudge的副产品,只是把副产品提前做了罢了。
不知道是谁说的一句话,“游戏是推动计算机科学发展的一大动力”,这话还真有一定的道理。军用及高新技术产业推动专业计算机科学发展的话,游戏和娱乐就是推动民用计算机往前走的最大动力了。

- Read More -

广度优先搜索

广度优先搜索算法(英语:Breadth-First-Search,简称BFS),又称宽度优先搜索,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。[wikipedia]

关键词:广度优先搜索-广搜-宽搜-队列

- Read More -

深度优先搜索

深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。[wikipedia]

关键词:深度优先搜索-深搜-dfs-递归-回溯

- Read More -