朝花夕拾

放牛娃的夏天@!@...

之前文章( 树莓派 + HP LaserJet CP1025 网络打印服务器方案 )提到过树莓派通过安装CUPS配置局域网共享打印机,但是对于CP1025这款打印机,当时的方案并不理想,存在官方驱动打印色彩偏差过大,发送打印机任务后打印机响应缓慢,http打印机虽然打印速度快,但是打印时没有任务队列等问题。经过一段时间总结经验,整理了一下几种方案。

阅读全文 »

前言

stm32f103c8t6的uart本身不支持7位数据位和2位停止位模式,所以需要基于8位数据位1位停止位工作模式,通过代码,将发送的数据最后一位变更成停止位来模拟7位数据位和2位停止位。

阅读全文 »

得益于欧盟的数字市场法案,windows11设备设置区域属于欧盟地区系统允许小组件以默认浏览器启动,同时允许用户卸载自带的edge浏览器。全新安装的windows11,直接选择欧盟区域即可。而对于已经安装好的windows11,需要重新触发OOBE,再选择欧盟区域。

本文讲述的是已经使用一段时间的windows系统利用系统自带的sysprep.exe触发OOBE修改设备设置区域

  1. 按下 “Windows + R” 打开运行窗口,输入 “%WINDIR%\system32\sysprep\sysprep.exe”

  2. 系统清理操作选择“进入系统全新体验(OOBE)”,不用勾选“通用”,关机选项选择“重新启动”,点击确定按钮。

  3. 电脑会重启,然后进入到OOBE界面。区域选择欧盟区域的国家。

  4. 用户账户页面通过”Shift + F10” 打开命令提示符,输入”start ms-cxh:localonly”,创建一个本地账户(该账户后面可删)

  5. 其它根据自己喜好,正常完成配置,进入桌面。

  6. 退出刚才创建的账户,登录原来的主账户。进入 设置——账户——其它账户,可以将第4步创建的账户删除。

  7. 根据自己喜好,配置 设置——时间和语言内的”语言和区域”与”日期和时间”

至此,edge浏览器已经可以删除,桌面小组件将以默认的浏览器被打开。

stm32f407对外高速传输的方法有usb、spi。但是usb通讯需要软件实现usb协议栈,太耗费计算资源了。而SPI是一个功能完整的硬件外设,使用DMA进行收发基本不占用cpu计算资源。

FT4222H是一款采用紧凑型32引脚QFN封装的高速/全速USB2.0至四路SPI/I2C器件控制器。四线SPI模式下传输速率高达53.8Mbps

f407虽然不支持4线spi,但是和ft4222h组合,最大40MHz SPI时钟频率,可以轻松实现和电脑之间高速数据传输。

阅读全文 »

前言

一直想用自己的域名做一个dns服务器。adguard dns的自定义域名需要企业版,cloudflare zero的dns也不支持自定义域名。网上虽然很多使用cloudflare worker搭建的dns服务器,也可以自定义域名。但这里有个问题,cfworker搭建的dns服务器,客户端发起dns查询,worker请求上游dns服务器,上游dns服务器会根据worker的ip地址返回最优ip。这样的结果对于客户端来说并不是最优解。后来了解到有些dns支持edns_client_subnet参数,doh请求的时候edns_client_subnet设置成客户端的ip地址,那么上游dns服务器就会根据这个地址来返回最优ip。原理有了,接下来就是实现!

阅读全文 »

MessagePack 是一种高效的二进制序列化格式。它允许你在像JSON这样的多种语言之间交换数据。但它更快,更小。小整数被编码成单个字节,典型的短字符串除了字符串本身外,只需要一个额外的字节。
MessagePack-CSharp是MessagePack的C#语言实现,它比MsgPack-Cli快10倍,支持LZ4压缩。本文将探索用MessagePack替代.net System.Text.Json,提高API效率。

阅读全文 »

起因

WinFormsApp1和WinFormsApp2都是Windows应用程序(WinExe),WinFormsApp2引用了WinFormsApp1。当发布WinFormsApp2时,会提示“未能找到元数据文件”xxxx\xxxx\WinFormsApp1.dll””。如果在项目属性中将WinFormsApp1输出类型改为类库(Library)则WinFormsApp2可以正确发布。缺点是每次发布或者调试WinFormsApp1都需要将输出类型改回WinExe。

阅读全文 »

思路一:创建新的窗口,在新窗口内生成div内容进行打印

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>打印指定区域</title>
</head>
<body>

<div>
<button onclick="printDiv()">打印指定内容</button>
</div>

<div id="printArea">
<h2>这是需要打印的内容</h2>
<p>这里的内容将会被打印。</p >
</div>

<div>
<p>这里是不会被打印的内容。</p >
</div>

<script>
function printDiv() {
var divContent = document.getElementById("printArea").innerHTML;
var newWindow = window.open('', '', 'width=800,height=600');
newWindow.document.write('<html><head><title>打印</title></head><body>');
newWindow.document.write(divContent);
newWindow.document.write('</body></html>');
newWindow.document.close();
newWindow.print();
}
</script>

</body>
</html>

思路二:隐藏非打印区域

阅读全文 »

创建脚本文件 /vmfs/volumes/datastore1/shutdown.sh

/vmfs/volumes/datastore1/shutdown.sh
1
2
#!/bin/sh
/sbin/shutdown.sh && /sbin/poweroff

设置执行权限

1
chmod +x /vmfs/volumes/datastore1/shutdown.sh

编辑 /var/spool/cron/crontabs/root 文件,添加定时任务

/var/spool/cron/crontabs/root
1
0 22 * * * /vmfs/volumes/datastore1/shutdown.sh

重启crond

1
kill $(cat /var/run/crond.pid); crond

rm 命令

rm 是Linux下最常用的删除文件/文件夹的命令。

  • -i删除前逐一询问确认
  • -f使原档案属性设为唯读,直接删除,无需逐一确认。
  • -r将目录及以下之档案亦逐一删除

删除一般文件:

1
rm test.txt

删除一个目录

1
rm -rf dirname
阅读全文 »
0%