
因为oh-my-live2d官网崩了,所以需要自己私有托管一下live2d服务才能让博客网上的小埋复活。(bonus:可以借此尝试自己制作一个live2d形象)
更于9/25,拖着很久没搞,然后官网自己复活了,好好好,直接快进到customized live2d。
因为oh-my-live2d官网崩了,所以需要自己私有托管一下live2d服务才能让博客网上的小埋复活。(bonus:可以借此尝试自己制作一个live2d形象)
更于9/25,拖着很久没搞,然后官网自己复活了,好好好,直接快进到customized live2d。
此前并未读过否定的辩证法或肯定的辩证法相关书籍,故仅从本书中的阐释进行理解。
亲历疫情三年的我们是可以理解什么叫免疫学时代的。对于病毒的否定,带来的是滴水难漏的防控规章制度。而西方可能更多的转型成了肯定的辩证法,对于个人自由,生产发展的肯定,认为我们“能够做到”群体免疫,带来的是提前与病毒共存。不予置评哪者更先进,但确实在我这里反映了两种辩证法的区别。于作者看来新世纪为了进一步解放发展生产力,让人们自我驱动,自我剥削,是更高效的方式,所以会采取肯定的辩证法,告诉人们“你可以做到”,以看似更自由的形式,实现了无死角的剥削。而在这种肯定性中,人们会不自主地驱动自己,在过度的狂热中燃尽自身,即如今的倦怠社会。
在早些年,确实是很少感到书中所言的倦怠的,更多的不过是肉体的疲乏,那时候明确地知道,接下里睡一觉,一切都会重新焕发。
作为很早就习惯于游离于体系外的人,我确实信奉所谓的“人要自个成全自个”(我现在依然),我不想要让我的成功建立在既有的且不甚合理的体系之上,我从小到大所身处最久,影响最大的就是应试升学了。在这种情况下,我会在可支配时间里去寻找很多很多我认为有意思的多的事情。但无论如何我依然是在一个更大的体系中寻找自己的价值,无论是父母的支持,还是同好的一句评价“酷”,都给予了我足够的反馈。但其实再往后,这些反馈就很少再感受到过了。
曾经发过一段微博:
不知何时不会再为自己努力做的任何事情期待外界的反馈,人生的下半程终究是揭开帷幕了。
不会再期盼灯塔,混沌的湍流中,只管把浪花甩在身后。
就好像我真的只需要把握每个当下奋力拼搏,我就真的能超越过去的自己,能做到自己想做的事情。可能确实能做到,但关键是做到了然后呢,接着马不停蹄地寻找下一个目标吗?这种迷茫带来的倦怠于我而言是真正的倦怠。
其实再谈人在绩效社会中的异化,个人感觉其实早就脱离了书中所言的肯定性辩证法给人带来的影响了(或者单纯未曾浸润,毕竟是肯定性话语反弹体质)。因为我永远是自成一套体系标准。与其主动投入别的体系(当然啦,除非确实于我而言非常契合),我更希望能够在我自己的体系中创造价值。肯定是我跟我自己说“你可以在这一块做完美”,而不是别人告诉我这一点。如果能做到这样的,确实也不存在自我剥削。如果我在这一阶段创造的价值社会能接受,那便好,如果不能,那于我也无妨。热爱一样东西是活下去的必需品,既然它能让我心怀希望地面对每一天,我便已经很感激了。
再说说书里提到的“以动物性本能处理感官刺激”(可能是差不多意思?)。意思差不多就是人在面对生活中的各类刺激,可能是社交,或者遇到的各种酸甜苦辣,意外之类的,会一一做出反馈,“没有能力抵挡刺激的作用”。可能这在别人眼中,这会是一个非常积极,伶俐,自我敞开,活跃的人。我曾经确实会这么觉得,并且希望我也能像这样做一个积极回应世界的人(这块可能可以用八维的Se劣势解释)。在这方面做出过很多努力,比如养成发微博的习惯(我将其认定为疗程的一部分),比如在博客中形成自己的表达习惯,比如想办法把每一天的日程都安排得不重样,比如更多参与社交或辩论寻找那种即时应答,把注意力集中在对方说的每一个字眼和深层逻辑或情感上(我真的很少把注意力集中在即时的,他者的事情上,可以解释为什么我玩不好即时协作游戏,moba,csgo之类)。我让自己,无论对方说了什么,无论我是否已经听懂了对方的潜台词,都要即时给出反馈(为此还特意观察内化了很多人的回应方式)。这个要求可以同理推到很多其他事情上。出于这种自我鞭策,我确实逐渐习惯于高频次多冲突的对话(不是吵架),但也确实有很多个时刻感觉,我应该更多默默倾听但却出于表达的惯性没做到。
我感觉很多事情我不真正缺失,“观看的教育”也是,但问题就在于我总是希望成为一个各个功能都足够高没有明显短板的人。从mbti上看来就是从infj->enfj->estp->isfp->infj->entp->infp->?。从指标上来看总是在循环发展各种功能。。。其实到后来也明白了,很多功能就是存在根本性冲突,八面玲珑的性格也不应当被追求。做最自洽最舒服的自己是最重要的。
正好教师节回东校了,之前的历史和政治(班主任)老师都和我说现在东校管的不严了,也很少批评教育了,大部分时候都是鼓励,提供选择机会balabala,她们说但现在的孩子都变得比较内向没有个性,完全不像我们以前那样,越个约束,就越有野性(太贴切了)。我说这就是从否定的辩证法转向为肯定的辩证法呀!她们对视一眼发出惊叹的声音,看我的眼神简直了。。
此书已赠予lbl。
因为10/19有米羔sama的读书会所以准备再复习一下,看了b站上的解析视频。提到了批判的点
再次想起来韩炳哲在书的最后提到的神圣时间,或许这样的读书会于我而言就是这种神圣时间。有些时间是无意义的,可能是为了生产学术价值,可能是为了积累财富价值,在这些时间里,我们都像是“飞转的停滞状态”。飞转是因为价值的产生需要我们的劳动,停滞是因为我们在这种情况下感受不到时间与意义时空的存在。我们需要这样的小聚会,不再让课业或工作或炫耀的需求成为我们拿起一本书的理由。让书成为书,让读完感受到的迷茫或者感动成为这个小聚会的展品,让艺术性回归到生活,如此我们的生活便是神圣的。
尼采:当代人的心里都住着一个主人(语义上的好)一个奴隶(语义上的坏)。
我是不常驻于这个世界的过客,我是流动的,保持着流动的可能性会让我的心灵更接近自由。
抽象的东西无法解决现实的问题
禅无所谓工作或兴趣,只要某一项任务对于我的情绪有平稳的要求的话,那么可以用禅的心态。
最后的主题/解决的问题:如何过更好的生活?
因为之前使用gitalk评论系统在国内用不了了,所以尝试更换为一些国内可用的方案。其中一个是国内开发者开发@imaegoo搭建的Twikoo系统
> 拜一下,我的博客网也是改自他的魔改版hexo-icarus主题对,然后针对icarus系的主题,官网有提供详细例程
主要分为云函数部署部分和前端配置部分
归根结底就是为静态的博客网提供一个可以响应用户数据提交和显示的服务。
主要分为两块
那么首先就需要去mongodb申请一个数据库,依照这个例程: https://twikoo.js.org/mongodb-atlas.html
> 密码保密)随后huggingface的服务就通过这串链接字符串来与这个数据库交互
随后去huggingface开启云服务器: https://twikoo.js.org/backend.html#hugging-face-%E9%83%A8%E7%BD%B2
我的云仓库为: https://huggingface.co/spaces/CallMeChen/BlogComment
启动服务成功后可以看到如下log:
参照 https://www.anzifan.com/post/icarus_to_candy_2
访客还可以通过输入数字 QQ 邮箱地址,使用 QQ 头像发表评论。
添加图床方便上传图片(已解决)
10/20发现评论系统不能用了,发现是mongodb暂停了数据库服务,想起来它应该是每个月都需要自己connect一下(也算是释放不活跃用户的资源吧)。
每周维护的时候需要进到 https://cloud.mongodb.com/v2/6610ebcc85d7126b38c3837b#/overview connect一下随后发现huggingface的仓库一直卡在build,遂更换为Netlify云函数平台。
https://app.netlify.com/sites/admirable-sunburst-4762e3/configuration/general
1 | { |
此书来自糕的@名字待定读书沙龙,虽然刚被拉入未曾互动但能感觉到真的是非常有爱的群体(看到有金主群友赞助黑胶我都惊了…)。就像之前很喜欢辩论队,自由无用且有点攻击性(仅限辩论队)的灵魂因为非功利的原因聚在一起交流想法,美哉。虽然我大概率不属于这块料,文科这块。。(之前亲人知道我写过十几万字博客的时候都惊呆了,第一反应是我写这么多累不累。他们一致认为我这种超符合刻板印象的理工男要想憋这么多字出来是用掉了半条命的)但还是想写就写,也不会觉得假期了不写了就懈怠了还是怎么样,我只知道,想写的时候不写就会憋出内伤,不想写的时候硬挤就会人不人鬼不鬼。文学素养啥的不是很有所谓,有便多写些,没的话便也多写些。
封皮是一个ascii码拼的骷髅。。。
在看这本书的过程中,在不同的发展阶段,代入了不同的角色。
先是勃兰登堡,它这种极客改变世界的研究故事真的很能吸引我,人生在世,当以这种方式改变世界。无论世界是变得更好,还是更坏,留与后人品说,人生也因此是有趣的。读罢他的故事我才知道原来一个格式的背后可以历经如此多的血汗,光阴,阴谋。我原本以为不同格式只是对于数据的不同存储方式,看来是我想简单了,前人在这块的投入绝对不会比当下的人工智能板块少,我有点太把这些格式当作理应如此,理所当然了。
再然后就带入了那些早期互联网的用户们。互联网让一切可以数据化的东西,可以在世界各地风一般无阻碍地传播,这种近乎免费的数据载体让数据本身变成了及其廉价的东西。
之前提到过好几次,作为羽量级hifi发烧友,mp3是我早些年最最最熟知的电脑文件格式。互联网上各种海淘BT链接下载音乐于我而言还是不久的过去。我当时就特别特别不能理解我只是想听一首歌就需要付费这件事情。首先音乐它就存在网上,文件的复制分发并不产生多少花费,我为了能获取网上的这些资源也支付了宽带费用。当时确实是版权和法律意识不足。更朴素的观点是,我为了获得一份本就可以被无限拷贝的数字产品,花了真金白银,这不是傻吗?我可以理解上世纪唱片的繁荣,毕竟那个时代,你想听音乐,你就需要唱片这个音乐数据的载体,没得选。因此就像书里说的,你买唱片,基本上就是买了个唱片包装。这在我看来其实属于捆绑于音乐本身价值之上的强制消费。我也可以理解花几k rmb去听现场,因为音乐的现场传达的就是无可替代,无可复制的音乐体验。
但到了互联网这块,音乐载体本身的成本已经忽略不计了,可以说,一首音乐,一旦出了录音棚,就可以顷刻间拷贝个几百万份发送给需要它的人们。。那么人还会为了什么付费呢?不图音质,不图方便,那就只是为了情怀了吧。我们hifi发烧友确实是一群对音乐很有情怀的人,但很抱歉呐,我们的小钱钱都花在了mp3播放器和耳机上,用的也是比cd解析力更高的DSD音频格式。。。总之唱片应该确实是似了,作为一项娱乐方式的载体,它和磁带,黑胶一样,它有过辉煌,是几代人的青春,但不可避免的,随着科技的进步,它也正在被光速遗忘,人们只会记得它的继任者。
作为音乐的消费者的我们,大抵是舒服了,但于音乐产业呢?
首先的首先,就是我完全不会同情书中出现的唱片出版公司。一家企业,如果因为抱着过去的业务死啃,那会似也是必然的。好吧其实也是因为我本人对于这种专营娱乐的大公司天然不感冒,因为它们给人的感觉就是在帮助我们决定我们的娱乐方式,包括应该听什么音乐,怎么听。。当然这里也包括一些当代的游戏公司,不说是谁好吧。总之我认为,理想的音乐人和受众的关系之间,不应该夹着这么一个庞然大物,凌驾于两者之上。。。
诚然数字拷贝的传播是对于音乐人歌曲版权的侵犯,但版权存在的初衷是为了音乐创作者能得到应得的回馈,而不是为了给娱乐巨头输血,也不是为了给音乐的传播制造障碍,我们可以从书中看到,有些创作者在互联网浪潮中通过在线发表歌曲也获得了成功和财富。甚至在版权模糊的互联网上,有些歌大肆采样(当然很不推荐这样。。)其他歌曲也获得了成功。大概确实会有种礼崩乐坏之感,再也回不去了。
音乐制作人的饭碗能保住,这自然是很好的。但在音乐版权日渐消亡后,这些创作者还能保有之前那样的创作热情,获得大笔投资,产出金曲吗?这一点书中并没有提,但就我个人近些年的观感来说,总感觉不容乐观,采样歌,口水歌大行其道,绝对绝对无法和唱片产业鼎盛时代的音乐相提并论。。。正如勃兰登堡那个最终的辩护,如果没有专利法,就不会有他们夜以继日的奋斗,也不会有MP3格式的出现。正是知道前方会有桃源,人们才无悔全心全力付出。但互联网时代这一切的不可知性被放大到了离谱的程度,还有多少人愿意加入这场追梦呢?这是我长久以来迷茫的点
书中还有很多有趣的法律方面的讨论,
比如“法如何责众”,既然起诉社会上90%的人并不现实,那起诉1%的人然后让他们为剩下89%的人承担责任是道德的吗,或者说,这是法律该做的吗?
这本书看的周期拖的挺长的,最后2/3是9/1到徐家汇书院一口气看完的,书中提到的歌有些都很有意思,就是这么一点点在网易云里面搜,听着那时候的歌,一点点把这本书看完了,很有感觉!
感觉还有挺多想说的没说完,往后有新的感想再记在这。
先放两首诗
泰戈尔的《生如夏花》
我听见回声,
来自山谷和心间
以寂寞的镰刀收割空旷的灵魂
不断地重复决绝,
又重复幸福
终有绿洲摇曳在沙漠
我相信自己
生来如同璀璨的夏日之花
不凋不败,
妖冶如火
承受心跳的负荷和呼吸的累赘
乐此不疲
——
我听见音乐,
来自月光和胴体
辅极端的诱饵捕获飘渺的唯美
一生充盈着激烈,
又充盈着纯然
总有回忆贯穿于世间
我相信自己
死时如同静美的秋日落叶
不盛不乱,
姿态如烟
即便枯萎也保留丰肌清骨的傲然
玄之又玄
——
我听见爱情,
我相信爱情
爱情是一潭挣扎的蓝藻
如同一阵凄微的风
穿过我失血的静脉
驻守岁月的信念
——
我相信一切能够听见
甚至预见离散,
遇见另一个自己
而有些瞬间无法把握
任凭东走西顾,
逝去的必然不返
请看我头置簪花,
一路走来一路盛开
频频遗漏一些,
又深陷风霜雨雪的感动
——
般若波罗蜜,
一声一声
生如夏花之绚烂,
死如秋叶之静美
还在乎拥有什么
莎士比亚十四行诗其18
Shall I compare thee to a summer’s day?
Thou art more lovely and more temperate:
Rough winds do shake the darling buds of May,
And summer’s lease hath all too short a date:
——
Sometime too hot the eye of heaven shines,
And often is his gold complexion dimm’d;
And every fair from fair sometime declines,
By chance or nature’s changing course untrimm’d
——
But thy eternal summer shall not fade
Nor lose possession of that fair thou owest;
Nor shall Death brag thou wander’st in his shade,
When in eternal lines to time thou growest:
——
So long as men can breathe or eyes can see,
So long lives this and this gives life to thee
——
译:
可否把你比作夏天?
你比夏天更可爱温婉
烈风吹散了五月的花蕾
且相约有期,夏日苦短
有时盛夏之目光灼烤
金色的面容失去了光彩
一切美丽终将凋零
偶然,或自然规律的安排
可你的夏季永不衰败
天生丽质,娇颜不改
死的阴影也无法将你遮蔽
永恒的诗中你将常在
只要人呼吸,眼睛能阅读,
此诗长存,而你,青春永驻
Take a look at the differences between Microprocessor (in our personal computer or phone) and Microcontroller
### Von Neumann vs Harvard architecture efficiency: Harvard architecture can avoid the "Von Neumann bottleneck" > VERBOSE~ **Von Neumann bottleneck**: when the bandwidth between CPU and RAM is much lower than the speed at which a typical CPU can process data, because the shared bus for instructions and data can cause competition.In embedded system, harvard architecture is widely used.
Our board (STM32F103C8T6) use harvard architecture on physical level (refer to the block diagram in reference manual)
However, in the software level, we treat the instruction memory and data memory as a whole block of memory (therefore, it is more accurate to say that the stm32 uses a mixed Harvard and von Neumann architecture.).
In stm32, instruction memory, data memory, registers of peripherals/IO are all mapped to memory.
Table from https://embeddedsecurity.io/vendor-stm32const
If you want to save the limited RAM spaces (data memory) for other variables, you can use this keyword to store this variable in ROM (program memory). It’s important for harvard architecture.
volatile
This means two things:
- The compiler will not try to optimize the variable with
volatile
. See the two examples on slides.- Each time the program reads the
volatile
variable, the processor will not look into cached data memory, meaning that the program can always get the newest updated data in memory (which is very important when external hardware change the variable).However, this case is not relevant with STM32 MCU since it didn’t have cache.
const volatile
?const volatile char *a
declares a pointer pointing to a value that cannot be changed by the program through *a
, but the value of a can be changed (pointing to another value). *a = 0
is not allowed, a = &b
is allowed.Generally, we use const volatile
to declare pointers that points to hardware registers or memory-mapped Input ports(read only).
1 | // import header file for the board (containing the declaration of SFR) |
We need to use C code to set the value of SFR.
These are registers that are embedded in peripherals, used for configuration and control of peripherals.
VERBOSE~
If we want to get the status of a peripheral, we read the value of SFR.
If we want to send something to peripheral, we write value to SFR.
Let’s take timer as an example:
SFR in block diagram of timer:
SFR declaration in code:
We change operate with these registers through Bit Operation
.
All the modes of GPIO:
The whole block diagram:You may see an unfamiliar unit
Here.After we configured the GPIO to be input ports, the output driver is disabled (disconnected).
The input driver part is still enabled so that we can read the output status.
Can “generate” voltage higher than VDD
at IO pin.
Most common one.
- “0” in the Output register activates the N-MOS (LOW (0V) at IO pin) - “1” in the Output register activates the P-MOS (HIGH (VDD) at IO pin)Not covered.
Peripherals inform the processor through external interrupt.
We mainly deal with the interrupts from peripherals.
Each peripheral can have multiple interrupt sources, indicating different events.Through interrupt service routine (ISR)
#### Interrupt vectors Interrupt vectors are **addresses that inform the interrupt handler as to where to find the ISR**1 | | Vector Number | Interrupt Number | Description | Vector Address | |
This is an arbitrary IVT that depicts the pattern of IVT, for detailed IVT of STM32, please refer to the reference manual.
Let’s split Timer peripheral into 3 parts:
#### Blue part: Master/slave controller The master/slave unit provides the time-base unit with the **counting clock signal** (for example the CK_PSC signal, PSC here means that it's for the prescaler in time-base unit), as well as the counting direction (counting up/down) control signal. This unit mainly provides the **control signals** for the time-base unit. #### Yellow part: Time-base unit The main block of the programmable timer is a **16-bit** counter with its related auto-reload register. The counter can count up, down or both up and down. The counter clock can be divided by a **prescaler** (which is basically another counter). > On the reference manual there are many wave-forms for you to understand how these control registers take effects.The reset frequency of the counter is $$\frac{f_{input}}{(Prescaler+1)\times(Counter Period+1)}$$
The timer channels are the working elements of the timer.
They are the means by which a timer peripheral interacts with its external environment (through input capture or output compare).
Just refer to RC2_LCD. I think it’s not the focus of final exam.
IC is a peripheral that can monitor the input signal changes (pos/neg edge) independent of the processor (Core).
OC is a peripheral that can generate precise output signal independent of the processor (Core).
In STM32, it is embedded in timer peripheral (together with output compare).
You can consider IC as a timer value recorder. It will record the timer value each time the capture condition is met (you can see from the diagram, the timer value is from CNT counter
).
These conditions can be:
- rising edge
- falling edge
- both
With a prescaler, we trigger capture events every few edges.
Similar for interrupt, we can trigger an interrupt every few captures.
Note:
The IC does not capture the edge immediately when a rising or falling edge happened. The capture event needs to be sync with PB_clk.
Further more, the module will capture the timer counter value that is valid 2-3 PB_clk cycles after the capture event.
For detailed configuration, please refer to Reference Manual.pdf
on canvas, page 349-359, 382-385.
Just refer to RC2_Output_Campare and RC3_Lab4 for the concepts and PWM configuration.
Also, the solution of hw2 has been uploaded to canvas, please take a look.
以下为项目布局示意图
(左下角为深度相机)
以下为项目的架构图
具体解释一下这张图
首先用户佩戴 hololens,hololens 会先把可交互的物体(物体数据源于物体检测算法)渲染在 UI 上,之后用户基于这些视觉信息,给出交互指令。
随后系统会根据给到的指令和可交互物体的信息,规划机械臂的运动路径。
路径信息会首先传到数字孪生系统中。该系统中有三部分孪生,分别是人体(实时数据来自人体检测算法),环境(实时数据来自 hololens 的环境感知系统) 和 机械臂(来自于前面提到的路径信息)的孪生。
随后该 DT 系统会根据路径信息解算在机械臂运动过程中是否会发生碰撞。
代码仓库:
https://github.com/Chen-Yulin/Unity-Python-UDP-Communication
传输的数据为字符串:
1 | def SendData(self, strToSend): |
需要包含的信息:物体种类,物体的三轴方位,三轴旋转,三轴尺寸。
格式:
1 | {Object Detection} |
示例:
1 | {Object Detection} |
需要包含的信息:6 个 joint 角度(单位为度)
格式:
1 | {Current Joint} |
需要包含的信息:6 个 joint 角度(单位为度)
格式:
1 | {Target Joint} |