对于 XaaS 的一路演进,可以简单归纳为:
- 有了 IaaS,客户不用关注物理机器,只需关注基础架构及应用程序。
- 有了 PaaS,客户不用关注基础架构,只需关注应用程序。
- 有了 FaaS,客户只需关注功能和数据。
参考链接
- 深入高可用系统原理与设计,by thebyte.
对于 XaaS 的一路演进,可以简单归纳为:
最近拿到一个VC6 MFC编写的遗留程序源代码,需要将其升级到最新的Windows系统,记录一下升级过程。
程序是从Main(WinMain)开始和结束。 但是在Main(WinMain)开始之前会对全局的变量或者对象进行初始化。
故在MFC中,通过全局类(theApp) 的初始化, 进入theApp的构造函数,根据类的规则,初始子类的构造函数,必须先要运行父类的构造函数。 在这过程把包含WinMain的文件连接了进来。 这样就隐藏了WinMain函数。
在WinMain函数中调用了AfxWinMain函数,在AfxWinMain函数中通过调用InitInstance函数完成了窗口的设计 窗口的注册 窗口的创建 窗口的显示和更新。然后在AfxWinMain中调用了Run方法,完成消息循环。
遗留程序依赖 MFC 扩展库BCGControlBar,因此需要安装和配置 BCGControlBar,否则编译链接出错。例如:
BCGCBProInc.h : No such s file or dictionary. 解决方案:安装BGB界面库
BCGControlBar是一个基于MFC的扩展库,您可以通过完全的用户化操作构成一些类似于Microsoft Office 2000/XP/2003和Microsoft Visual Studio.NET的应用程序(用户工具栏、菜单、键盘等等)。BCGControlBar库包含了大约150多个经过精心设计,测试和具有完备文档的MFC扩展类。这些都可以很容易的应用于您的应用程序,节省大量的开发和调试时间。
在编译之前,要先设置其附加包含目录和附加库目录。
vc6.0在其tools>>options>>directoris下进行设置。在show directories for选择include files,添加BCGControlBar安装目录下的BCGCBPro目录。
然后再选择show directories for下的Library files并添加BCGControlBar安装目录下的bin目录。
层叠样式表(Cascading Style Sheets,缩写为 CSS)是一种样式表语言,用来描述 HTML 或 XML(包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言)文档的呈现方式。CSS 描述了在屏幕、纸质、音频等其他媒体上的元素应该如何被渲染的问题。
通常在开始一个新的项目之前,应对CSS进行重置,建立一个基线,以便使网页在不同浏览器上有一致的显示。
记录计算机科学中一些关键术语的解释,方便以后教学。
请参考Understanding Concurrency, Parallelism and JS
在使用 Linux 系统的过程中,默认有一个即时通讯软件开机自启动,想将该应用禁掉,不让其自启动。在 Linux 系统中,设置一个应用自启动的地方很多,遍布整个 Linux 启动流程。因此,首先了解 Linux 启动流程,再说明设置或禁用应用自启动的方法。
Linux 开机启动流程如下:
1 | 1.1 POST(Power On Self Test) 加电自检 |
1 | 2.1 Stage1 |
1 | 3.1 /boot/kernel and Kernel parameter |
1 | 4.1 /sbin/init |
从 Linux 开机流程可知,设置应用自启动主要在 Linux 启动流程的第四阶段。如果是服务或其他非 GUI 应用,可在 4.1 阶段设置开机自启动。如果是 GUI 应用,应在 4.2 阶段设置开机自启动。
费曼学习法是由著名物理学家、诺贝尔物理学奖得主理 查德·费曼提出的。其核心就是: 通过简短的语言,向别人清楚地解说一件事,来检验自己是否真的弄懂了这件事。
费曼学习法通过“ 以教促学”的方式让人在短时间内掌握知识,并且快速吸收信息。
费曼学习法可以简化为四个单词: concept(概念)、Teach(教给别人)、Review(评价)、Simplify(简化)。具体操作可概括四个步骤:
选择目标的选择很简单,就是确定你要学什么,或要干什么。在这里比如学习一门技术、学习一个科学领域、学习一门语言、学习一个概念等,都可以称作目标。
但如果想制定非常棒的目标,还可以学习一下 SMART 原则:Specific 具体、Measurable 可测量、Attainable 可实现、Relevant 相关性、Time—based 时效性。也就是说计划要具体、可测量、坚持即可实现、对你有意义并且要在一定的期限内完成。
创造一个场景,在这个场景中将自己学到的知识讲授给 “别人”。在这个过程中会遇到很多问题,比如说不清楚,讲不明白,自己也模棱两可等,那就说明这些知识点并没有熟练掌握。尝试教授和发现薄弱点就是这一步的重点。
在第二步中遇到了问题,那么就需要进入第三步 —— 纠错学习。无论是在教授的过程中说错的、说不清楚的、模棱两可的都需要在这一步中进行强化。反复查询资料、学习、强化记忆,然后再重复第二步进行验证,直到可以顺利的教授相应的知识。
这一步是对上面学习的内容进行提炼、简化,去掉非必要的,多余的信息,并且能够用自己的语言通俗易懂的表达出来,而不是照本宣科。
AI工具可以工作效率,快速交付成果,值得使用。下面记录一下常用的AI工具。
ChatGPT,全称聊天生成预训练转换器(英语:Chat Generative Pre-trained Transformer),是OpenAI开发的人工智能聊天机器人程序,于2022年12月推出。该程序使用基于GPT-3.5、GPT-4、GPT-4o架构的大型语言模型并以强化学习训练。ChatGPT目前仍以文字方式交互,而除了可以用人类自然对话方式来交互,还可以用于甚为复杂的语言工作,包括自动生成文本、自动问答、自动摘要等多种任务。如:在自动文本生成方面,ChatGPT可以根据输入的文本自动生成类似的文本(剧本、歌曲、企划等),在自动问答方面,ChatGPT可以根据输入的问题自动生成答案。还有编写和调试计算机程序的能力。
DALL-E是一个可以通过文本描述生成图像的人工智能程序,于2021年1月5日由OpenAI发布。
DALL-E通过120亿参数版本的GPT-3 Transformer模型来理解自然语言输入(例如“五边形形状的绿色皮革钱包”或“一只悲伤水豚的等距视图”)并生成相应的图片。它既可以生成现实的对象(例如“带有蓝色草莓图像的彩色玻璃窗”),也能够生成现实中不存在的对象(例如“具有豪猪纹理的立方体”)。
Stable Diffusion是2022年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像,尽管它也可以应用于其他任务,如内补绘制、外补绘制,以及在提示词指导下产生图生图的转变。
使用日志是回溯问题发现问题的重要方法,是服务器端应用运维的基础设施。下面研究一下常用的Nodejs 日志库。
最近需要在Nodejs平台上使用UDP协议接收JSON数据,于是研究一下。
1 | /** |
1 | /** |
应公司要求编写了一个流量转发加消息格式转换的程序,但是老是报错。于是使用 wireshark 抓包保存成 pcap 文件,然后想通过流量回放复现程序报错原因。下面研究一下流量回放的方法。
tcpreplay是一款强大的网络数据包重放工具,它可以将捕获到的网络流量(通常是pcap格式的文件)重新重放到网络中,实现对网络通信的重现。这在网络故障排查、安全测试、性能测试、开发调试等场景下具有广泛的应用。同时,tcpreplay不仅仅能重放TCP协议报文,它支持重放所有协议报文,同时支持IPv4和IPv6协议栈,不要被命名误导了,类比tcpdump的命名,tcpdump也能抓取所有协议报文而不仅仅是TCP。
TCPReplay包含几个核心组件和功能:
在进行重放之前,最好能预先确认是将整个pcap文件重放,还是有选择性的筛选特定报文再重放。
具体步骤如下:
1 | tcpdump -i eth0 -nn host 192.168.1.8 and \( tcp port 80 or icmp \) -v -w client.pcap |
1 | tcprewrite --infile=client.pcap --outfile=client_fix.pcap --fixcsum |
校验和(checksum)是通过对数据进行计算得到的一个数值,发送方和接收方会对相同的数据计算出相同的校验和。如果接收方计算出的校验和与发送方提供的校验和不一致,就说明数据在传输过程中发生了错误,接收方会丢弃该数据包,比如不做csum更新的话,对端收到重放包,校验不对,是不会正常响应的,直接丢弃掉:
1 | tcpreplay -v -t -i eth0 client_fix.pcap #-v参数可以看到重放的每一帧的细节;-t参数尽可能快的重放数据包 |
具体步骤如下:
Wireshark直接输入过滤表达式后,在左上角选项栏点击 文件(File)–> 导出特定分组(Export Specified Packets)即可。
1 | tcprewrite --infile=client_src.pcap --outfile=client_src_rewrite.pcap -S 0.0.0.0/0:192.168.1.12 -D 0.0.0.0/0:192.168.1.72 --enet-smac=00:50:56:81:8e:44 --enet-dmac=00:50:56:81:be:58 |