Python包导入机制
本文的主要参考文献为python的官方文档,针对的python版本为3.14.2
首先一个语言的导入系统是很重要的,因为它决定了代码的模块化以及可复用性,一个好的模块系统可以让开发者更方便地组织和管理代码,提高代码的可维护性和可读性。而我之所以写这么一篇文章,就是因为一直被python的导入系统折磨,因此才下定决定来搞清楚python的模块系统与导入机制。
对于python来说,我们最常用的导入方式是使用import语句,但是其实除了import语句之外,还有很多其他的导入方式,比如importlib.import_module()以及内置的__import__()函数等。
而import语句主要做了两件事情:
搜索指定名称的模块(就是调用__import__())。
将搜索的结果绑定到一个local的名称上面。
Example
import spam会产生如下的字节码:
1spam = import('spam', globals(), locals(), [], 0)
import spam.ham会产生如下的字节码:
1spam = import('spam.ham', g ...
论文写作的一些技巧与经验
图片相关
这部分主要介绍在论文写作过程中,如何绘图、图片中使用的字体与字号、以及如何对图片进行后处理。
绘图
图片处理
使用PPT或者使用Visio绘图之后,可以将绘制的内容导出为pdf,而且可以导出指定页面, 但是还是存在一个问题,就是导出的pdf可能会存在大量的空白,这时候可以Tex Live自带的pdfcrop命令进行裁剪:
1pdfcrop input.pdf output.pdf
建议导出格式
虽然PPT可以将选中的内容直接导出为图片,但是当导出为svg格式时,其文字排版会出现问题,因此建议导出为pdf格式。而且latex原生就支持pdf格式的内容插入,如果是svg的话,还需要引入额外的宏包进行支持。
至于png格式,只建议在使用word的时候使用,这时候可以使用ghostscript或者convert将pdf转换为png格式。
pdf转png命令
使用Tex Live自带的ghostscript命令如下:
1gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pngalpha -r600 -sOutputFile=output-%03d.pn ...
Memory consistency model and Cache coherence
内存一致性模型与缓存一致性的关系
刚开始接触缓存一致性以及内存一致性模型的时候,时常会对其产生误解,对两者的概念比较模糊,在这里借用《A Primer on Memory Consistency and Cache Coherence》中的介绍来对其进行区分。
该书中使用SWMR(Single Writer Multiple Reader)不变量以及数据值(Data Value)不变量来定义缓存一致性,前者指的是对于同一时刻,同一个内存地址,要么只有一个核心对其拥有读写权限,要么有零个或者多个对于该地址只有只读权限。而后者则指的是,任何对于内存的修改都会被传播给其他副本,以至于副本保存的总是其最新的值。
而内存一致性(模型)则是定义在缓存一致性之上的,程序员需要依据内存一致性模型来编写出正确的多线程程序,而缓存一致性主要是为处理器流水线提供一个存储系统的抽象层,对于程序员来说时透明的,如下图所示:
Summary
Cache coherence于Memory consistency并不等效
Memory consistency的具体实现可以将Cache coherence作为一个 ...
SpinalHDL
SCALA语法介绍
SystemVerilog For Design
声明空间
在verilog中,reg 、wire、task、function等的定义都必须在module之内,这些声明都是局部的,因此只能在模块内部使用,无法跨模块使用。如果希望在多个模块中使用某个function,则需要在每一个模块内都重新定义。特别是使用user-defined type,需要在每一个模块内都重复进行typedef,非常的冗余,且容易出错。
为此system verilog拓展了声明空间。
package
package的定义
package是一个独立的声明空间,因此不能嵌入在module内部。
package是通过两个关键字进行定义的——package与endpackage。可综合的package可以包含如下的内容:
parameter和localparam定义的常数(在package中,两个是一样的,都不能在外部被修改)。
const定义的变量。
typedef定义的自定义类型。
automatic task和automatic function。
import导入其他package。
操作符重载。
package还可以包含全局变量声明、静态任务定义和静态函 ...
RL理论基础
强化学习基础
强化学习概述
强化学习(reinforcement learning,RL) 讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。如图 1.1 所示,强化学习由两部分组成:智能体和环境。在强化学习过程中,智能体与环境一直在交互。智能体在环境中获取某个状态后,它会利用该状态输出一个动作 (action),这个动作也称为决策(decision)。然后这个动作会在环境中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中获取奖励。
强化学习与监督学习
我们可以把强化学习与监督学习做一个对比。以图片分类为例,如图 1.2 所示,监督学习(supervised learning)假设我们有大量被标注的数据,比如汽车、飞机、椅子这些被标注的图片,这些图片都要满足独立同分布,即它们之间是没有关联关系的。假设我们训练一个分类器,比如神经网络。为了分辨输入的图片中是汽车还是飞机,在训练过程中,需要把正确的标签信息传递给神经网络。当神经网络做出错误的预测时,比如输入汽车的图片, ...
TLS握手流程
TLS握手过程
HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。
所以安全上存在以下三个风险:
窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
冒充风险,比如冒充淘宝网站,用户钱容易没。
HTTPS 在 HTTP 与 TCP 层之间加入了 TLS 协议,来解决上述的风险。
TLS 协议是如何解决 HTTP 的风险的呢?
信息加密:HTTP 交互信息是被加密的,第三方就无法被窃取。
校验机制:校验信息传输过程中是否有被第三方篡改过,如果被篡改过,则会有警告提示。
身份证书:证明淘宝是真的淘宝网。
上图简要概述来 TLS 的握手过程,其中每一个「框」都是一个记录(record),记录是 TLS 收发数据的基本单位,类似于 TCP 里的 segment。多个记录可以组合成一个 TCP 包发送,所以通常经过「四个消息」就可以完成 TLS 握手,也就是需要 2个 RTT 的时延,然后就可以在安全的通信环境里发送 HTTP 报文,实现 HTT ...
CRC校验详解
摘要
本文首先阐述了错误检测的目的以及纠错复杂度,然后以此引出了CRC背后的基础思想。为了能够充分理解CRC运算所基于的运算系统,本文还介绍了抽象代数中的相关概念(多项式环、素域、扩域)。然后描述了如何选取CRC的多项式。有了这些基本概念之后,本文介绍了三种CRC的实现,对于同一个CRC算法,其中SIMPLE于TABLE ALGORITHM所使用的寄存器初值是一样的,只是后者更高效一点,而DIRECT TABLE ALGORITHM则更高效,而且寄存器初值也与前两种不一样(通常CRC算法所说的初值就是指的这个算法的寄存器初值),因此需要进行初值转换。在此之后还介绍了一些决定CRC算法的其他参数,并且以此定义一个名为Rocksoft™的参数化模型,用以精确描述CRC算法。最后本文还包含了CRC算法的C实现。
本文很大程度上参考了A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS,在其中加入了一些自己的理解。因此非常感谢Ross N. Williams.大佬
错误检测的目的
发射机产生的数据,在经过带有噪声的信道之后,会被噪声所污染,从而导 ...
WaveDrom教程
WaveDrom 可以根据特定指令生成时序 / 波形图(SVG/PNG),并且也可以在浏览器中运行。同时也提供了在线编辑器和教程、教程 2。
信号(signal)
名称(name)和波形(wave)
绘制信号时,需要向 WaveDrom 传递键为 signal,值为 WaveLanes 的数组,WaveLane 一般至少需要包含两个属性:名称(name)和波形(wave),例如(在官方在线编辑器中打开):
1{ "signal" : [{ "name": "clk", "wave": "P..........." }] }
{ "signal" : [{ "name": "clk", "wave": "P..........." }] }
波形的名称将显示在波形左侧,波形由一个字符串指定,每个字符都代表了一个周期的波形,每个字符代表的意义如下:
符号
含义
样例
渲染结果
.
与上一周期状态相同
{ signal ...
计算机数值表示
计算机数值表示
符号定义
Symbol
Type
Meaning
Defineition
\(B2T_w\)
函数
Binary to two's complement
\(\vec{x} = [x_{w-1},x_{w-2},\cdots,x_0];\;B2T_w(\vec{x})=-x_{w-1}2^{w-1}+\sum\limits_{i=0}^{w-2}x_i2^i\)
\(B2U_w\)
函数
Binary to unsigned
\(\vec{x} = [x_{w-1},x_{w-2},\cdots,x_0];\;B2U_w(\vec{x})=\sum\limits_{i=0}^{w-1}x_i2^i\)
\(U2B_w\)
函数
Unsigned to binary
\(B2U_w\)的反函数
\(U2T_w\)
函数
Unsigned to two's complement
\[0\leq u\leq UMax_w;U2T_w(u)=B2T_w(U2B_w(u))=\begin{cases}u, u\leq TMax_w \\ u- ...








