《Auguries of innocence》天真的寓言
作者简介这首诗是英国诗人威廉·布莱克最负盛名的作品。本·琼生在评价同时代的威廉·莎士比亚时曾说:他不属于一个时代,而属于所有的世纪。后世证明,此言未虚,莎士比亚确实是说不尽的。英国文学史上另一个威廉在世时及死后多年却远没有这么幸运。这位不朽的诗人就是威廉·布莱克。或许布莱克在天国会感谢周作人的,因为是周作人1919年第一个把他领到了中国。布莱克是一个“远离尘世”的疯狂天才,让人们不禁联想到另一位19世纪伟大的疯狂天才——梵高。威廉·布莱克(William Blake),英国第一位重要的浪漫主义诗人、版画家,英国文学史上最重要的伟大诗人之一。早期作品简洁明快,中后期作品趋向玄妙深沉,充满神秘色彩。他一生中与妻子相依为命,以绘画和雕版的劳酬过着简单平静的创作生活。后来诗人叶芝等人重编了他的诗集,时至今日,诸多评论家将布莱克列为英国文学史上与乔叟、斯宾塞、莎士比亚、弥尔顿、华兹华斯齐名的最伟大的六位诗人之一。由于他的画作在文艺复兴以后,开启了不重形似而重精神力量的创作新路,他又被赞誉为“英国艺术方面最重要的人物之一”。 作品全文To see a World in a Grain...
创建脚本实现使用SWD接口快速烧写GD32系列MCU程序
GD32 系列 MCU 支持通过串行调试接口(SWD)来烧写程序,GD 官网提供 GigaDevice GD-Link Programmer 软件实现这种烧写方式。通过创建脚本调用该软件的相关工具可以避免在连续烧写时反复点击图形化界面,提高烧写效率。 从官网下载 GigaDevice GD-Link Programmer 软件 准备一个支持 SWD 的烧写器,比如 GD-Link、CMSIS-DAP 等 参考 Doc 目录下的 GigaDevice GD-Link Console User Manual.pdf 文档,创建 .gdlink 文件和 .bat 脚本,方法如下: (1)创建一个 .gdlink 后缀名的文件,内容如下 12345Connecteraseload application.hexrq 命令 描述 Connect 连接MCU erase 擦除整片 Flash,该命令可省略,省略时只会擦除必要部分的 Flash load application.hex 下载 application.hex 文件到 Flash,此...
修改Windows系统hosts文件加速访问github
由于 DNS 污染,国内访问 Github 速度非常慢甚至完全无法访问,通过修改 Windows 本地的 hosts 文件可以解决这个问题。 根据 https://www.itdog.cn/ping/github.com 的检测结果,选择响应时间较快的解析IP,如: 响应IP IP位置 20.27.177.113 日本/东京/microsoft.com 20.200.245.247 韩国/首尔/microsoft.com 20.205.243.166 新加坡/microsoft.com 4.237.22.38 澳大利亚/新南威尔士州/悉尼/microsoft.com 20.26.156.215 英国/伦敦/microsoft.com 140.82.121.4 德国/黑森/法兰克福/github.com 20.87.245.0 南非/豪登/约翰内斯堡/microsoft.com ...
使用微博免费搭建个人图床
登录网页版 微博 后,点击进入 微相册 点击 我的相册->我的专辑 创建新专辑,上传照片(注:微博不支持 .png 格式照片,上传的 .png 格式照片会自动转为 .jpg 格式) 为了方便批量上传和管理微相册照片,推荐安装 微博图床 插件,该插件是上传图片到微相册并生成外链的 Chrome 浏览器扩展,功能简介如下: 支持点选、拖拽、粘贴以及页面右键菜单上传图片到微博并同步到微相册 支持拖拽上传文件夹中的图片文件 支持 JPEG、PNG、GIF 三种图片格式 支持 SVG、BMP、WebP、ico 有损转换为 PNG 支持把 HTML5 视频的当前帧上传为 JPG 图像 支持查看上传记录,简单的浏览及删除操作 支持生成 URL、HTML、UBB、Markdown 四种格式 支持单条、多条模式的复制操作 支持选择协议(http、https 和相对协议) 支持三种固定裁剪尺寸和用户自定义尺寸 支持使用微博账号和密码自动登录 支持微博图片水印功能 支持自定义生成的图片链接 由于微博开启了“图片防盗链”,因此直接访问图床图片会显示“403 Forbidden”,但是可以...
解决谷歌浏览器提示“此扩展程序已停用,因为它已不再受支持”
从2025年7月12日开始出现谷歌 Chrome 浏览器禁用多个扩展程序的情况,被禁用的扩展程序全部都是基于 Manifest V2 协议开发的,按照谷歌要求开发者必须将其迁移到 V3 协议,如果扩展程序并未完成迁移或者部分扩展程序已经停止更新,则这些扩展程序无法在 Chrome v138.0 及后续版本中使用,暂时可以通过实验性选项临时恢复这些扩展程序的运行。 Chrome 138 是最后一个完全支持 V2 协议的版本,从 139 版本开始,V2 扩展被默认禁用,且无法通过实验性标志恢复。因此本文所述方法仅适用于 138 及以下版本的 Chrome。 打开Chrome浏览器进行如下设置后重启浏览器即可生效: 地址栏输入 chrome://flags/#temporary-unexpire-flags-m137,将 Temporarily unexpire M137 flags. 设置为 Enabled 地址栏输入 chrome://flags/#extension-manifest-v2-deprecation-warning,将 Exten...
【贴吧神贴】雪后初晴,说说自己走出阴霾的那几年
原贴链接: 雪后初晴,说说自己走出阴霾的那几年 前情故事: 【贴吧神贴】过去12个清明了,今年却没能去看她 本文完全保留了原贴内容,为提升阅读体验,使用AI对文章进行了重新排版以及添段落标题 八年的迷茫与停滞有人说,人生就像一座巨大的迷宫,充满了无尽的变化和色彩。可我却身处一条看不见尽头的走廊,两边是无数扇虚掩着的门,走廊是冷寂的白,门缝里是冷漠的黑,我没有勇气推开任何一扇,只能顺着走廊走下去,这一走就是八年。 亲情絮语与往事回响2020 年 3 月,第一波 yq 消散,世界又恢复了忙碌。我准备回西安上班,临行的前两天,打算去看一趟外爷外奶奶。出门前,我妈说:“给你外爷买只鸡吧,前两天你奶奶给我打电话说你外爷想吃鸡肉。”于是我便出门前往市场。一大早的太阳并不是很耀眼,小县城的市场还是熙熙攘攘,喇叭里的吆喝声此起彼伏。这么多年来,市场里修好坑坑洼洼的路,整顿规划了以前随处就摆的地摊,还起了一座服装商城,但逛市场的人从来都没有变过。我随便找了家看上去还不错的鸡肉店。“老板,鸡怎么卖?”“十三块一斤。”“嗯…… 拿这个吧。”“好嘞,七斤二两…… 九十三块二,给九十三就行。...
【贴吧神贴】过去12个清明了,今年却没能去看她
原贴链接: 过去12个清明了,今年却没能去看她 后续故事: 【贴吧神贴】雪后初晴,说说自己走出阴霾的那几年 本文完全保留了原贴内容,为提升阅读体验,使用AI对文章进行了重新排版以及添段落标题 半生感慨与农村童年想想自己这半生,经历大起大落,本以为自己是个主角,至少是个悲情戏里的主角,到头来发现无非还是个碌碌无为的路人甲。说说背景先,鼠鼠西北人,从小在农村长大,在农村上的小学,那所小学离家很远,大概得有四五公里吧,每天天不亮就起床出发了,中午一般不回家,每天上学书包里会带张奶奶烙的饼,我这个大孙儿,带一瓶水,记得装水的瓶子还是非常可乐瓶,水喝完了就去学校外面的水渠里灌水,虽然看上去有些混浊,但那时候哪有这些讲究,能解渴就行。有时候嘴馋了,就到学校门口小卖部,用瓶子换零食吃,一个瓶子卖一毛钱,在小卖部可以等价交换,回家后再和奶奶说瓶子丢了,被同学偷走了,这时候奶奶就会骂骂咧咧的再给我找个瓶子。那时候还用的第四版人民币,还有二毛和二块钱,那时候小学还是要交书本费的,我清楚记得三年级我爸带我去报名,和老师聊天说书本费二十七块五,他面色一滞,听到老师夸我学习好,又像是很大度的...
C语言volatile关键字详解
在 C 语言里,volatile属于类型修饰符,其主要功能是告知编译器某个变量可能会以不可预知的方式被修改。这些不可预知的修改来源多样,像硬件、中断服务程序或者其他线程都可能进行修改。使用volatile的目的在于防止编译器对该变量的访问实施优化,以此保证每次对变量的读写操作都是直接针对内存进行的,否则编译器可能会把变量的值缓存到寄存器中。 使用场景 访问硬件寄存器在进行嵌入式系统编程时,常常需要对硬件寄存器进行直接访问,而这些寄存器的值可能会因为硬件状态的改变而发生变化。 12345// 定义一个指向硬件寄存器的指针volatile unsigned int* const UART_STATUS = (volatile unsigned int*)0x40000000; // 读取寄存器的值,每次都会直接从内存读取unsigned int status = *UART_STATUS; 在中断服务程序(ISR)中使用全局变量当中断发生时,会对全局变量的值进行修改,此时就需要用volatile来确保主程序能够正确感知到这种变化。 12345678910111213...
C语言数组名和数组名取地址的区别
定义以下数组 1int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; a 和 &a 的值在数值上确实是相同的,但它们的类型和含义有本质区别。 a含义:a 是数组名,代表数组首元素的地址,也就是&a[0]。类型:int*(指向 int 的指针)。数值:数组第一个元素的地址。 &a含义:&a 是整个数组的地址,通过取址运算符 & 显式获取。类型:int (*)[10](指向包含 10 个 int 的数组的指针)。数值:与 &a[0] 相同,即数组的起始地址。 那么 a+1 和 &a+1 的值相等吗? 当对指针进行加法运算时,偏移量是由指针的类型决定的。由于 a 的类型是int*,因此 a+1 会偏移 1*sizeof(int) 字节,即指向下一个元素。由于 &a 的类型是int (*)[10],因此 &a+1 会偏移 1*sizeof(int[10]) 字节,即指向数组末尾后的位置。