Terminator

Mini-project 3: TCP Chat Client

牧云@^-^@ 提交于 2021-02-03 09:06:12
2019/5/17 Mini-project 3: TCP Chat Client https://canvas.du.edu/courses/78542/assignments/585615 1/2 Mini-project 3: TCP Chat Client Due No Due Date Points 40 Overview This mini project exercises your TCP network programming skills to implement the client side protocols for a chat room. This TCP chat room contains three components (not because it's the best way to do it, but because it's relatively easy to keep the code separated this way). Component 1, which you do not need to implement (yet), is the chat server. This server handles messages from the other two components, and send messages as

Arduino通讯串口

我怕爱的太早我们不能终老 提交于 2021-02-01 01:48:28
串口是Arduino与其它设备进行通信的接口 所有的Arduino控制板有至少一个串口(又称作为UART或USART)。它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机进行通信。因此,如果你使用这些功能的同时你不能使用引脚0和1作为输入或输出 Arduino Mega 有三个额外的串口: Serial 1 使用 19(RX) 和 18(TX) , Serial 2 使用 17(RX) 和 16(TX) , Serial3 使用 15(RX) 和 14(TX); 若要使用这三个引脚与您的个人电脑通信,你需要一个额外的 USB 转串口适配器,因为这三个引脚没有连接到 Mega 上的 USB 转串口适配器, 若要用它们来与外部的 TTL 串口设备进行通信,将 TX 引脚连接到您的设备的 RX 引脚,将 RX 引脚连接到您的设备的 TX 引脚,将 GND 连接到您的设备的 GND, (不要直接将这些引脚直接连接到 RS232 串口 ; 他们的工作电压在 +/- 12V ,可能会损坏您的 Arduino 控制板。) Serial.begin(9600); //开启串行通信接口并设置通信波特率 if (Serial) //表示指定的串口是否准备好 比较囧的是,这个方法只适用于Leonardo和micro的Serial Arduino Mega 特有: if

redis源码之SDS

心不动则不痛 提交于 2020-12-17 00:56:53
#1:SDS介绍 我们在redis中执行命令 set key name 的时候,key和name都是字符串类型,而且字符串(string)在redis中是会经常用到的类型,那redis是如何保存字符串的呢?我们接下来往下看 众所周知,redis是c写的,在c中使用char来保存字符串,并且用\0作为字符串的结尾,但是redis不是这样保存的,redis是使用一种叫SDS的结构来保存字符串的。结构如下(redis3.2以前) struct sdshdr{ int len; int free; char buf[]; } 那么问题来了,redis为什么 会用SDS的结构,而不直接用c语言的字符串,我们来看看他们的区别 ###1:计算字符串长度的区别 对于c来说,计算字符串的长度的方式就是遍历,遇到\0就停止,所以复杂对是O(n),而SDS直接保存了字符串的长度,复杂度是O(1) ###2:保证二进制的安全 因为SDS并不是以\0为结尾的标志,自然就保证了二进制的安全 ###3:内存管理策略(预分配内存和惰性空间释放策略) redis是一个高速的缓存数据库,需要频繁的对字符串进行操作,如果内存分配错误,会导致很严重的后果,就算内存分配没问题,频繁的内存分配也是非常耗费时间的,所以这些都是应该去避免的 #####惰性空间释放策略 在SDS中首先用到了惰性空间释放策略

Redis字符串类型内部编码剖析

谁都会走 提交于 2020-12-16 10:42:11
概述 我们平时用 Redis都是处于用户层面,我们可能会不加思索地操作一个 key-value 对来方便地存取数据,感觉方便之至。但你知道这些数据在背后是如何存储以及编码的吗? 了解清楚了这个问题,将对我们更加高效地使用 Redis具有指导意义。本文开始我们将结合 Redis源码来逐个探讨Redis五大数据类型的内部编码机制。 实验环境:Redis 4.0.10 注: 本文首发于 My Personal Blog ,欢迎光临 小站 Redis数据类型内部编码概况 对于 Redis的常用 5 种数据类型(String、Hash、List、Set、sorted set),每种数据类型都提供了 最少两种 内部的编码格式,而且每个数据类型内部编码方式的选择 对用户是完全透明的 ,Redis会根据数据量自适应地选择较优化的内部编码格式。 如果想查看某个键的内部编码格式,可以使用 OBJECT ENCODING keyname 指令来进行,比如: 127.0.0.1:6379> 127.0.0.1:6379> set foo bar OK 127.0.0.1:6379> 127.0.0.1:6379> object encoding foo // 查看某个Redis键值的编码 "embstr" 127.0.0.1:6379> 127.0.0.1:6379> Redis

Python之Pandas:pandas.DataFrame.to_csv函数的简介、具体案例、使用方法详细攻略

你。 提交于 2020-10-29 10:22:26
Python之Pandas:pandas.DataFrame.to_csv函数的简介、具体案例、使用方法详细攻略 目录 pandas.DataFrame.to_csv函数的简介 pandas.to_csv()函数的具体案例 pandas.DataFrame.to_csv函数的简介 DataFrame. to_csv ( path_or_buf=None , sep=',' , na_rep='' , float_format=None , columns=None , header=True , index=True , index_label=None , mode='w' , encoding=None , compression='infer' , quoting=None , quotechar='"' , line_terminator=None , chunksize=None , date_format=None , doublequote=True , escapechar=None , decimal='.' , errors='strict' ) def to_csv Found at: pandas.core.generic def to_csv( self, path_or_buf:Optional[FilePathOrBuffer]=None, sep

Linux 终端最全推荐(建议收藏)

无人久伴 提交于 2020-10-14 21:26:29
本文来自网络整理,如有侵权,则可删除。 如果你跟我一样,整天要花大量的时间使用Linux命令行,而且正在寻找一些可替代系统自带的老旧且乏味的终端软件,那你真是找对了文章。我这里搜集了一些非常有趣的终端软件,可以用来替代debian系的Linux原生终端。 Tilda image 这是一款可配置的雷神之锤风格的终端工具,也就是说,当用户敲击配置好的热键(缺省是F1)时,这个终端会从屏幕的顶端滑出,就跟雷神之锤游戏中的效果一样。 它的安装方法: apt- get install tilda Tilda跟其它下拉风格的终端比起来有更丰富的自定义选项。包括: 高度自定义界面 设置Tilda主窗口的透明度。 独特的内置配色方案。 用户可以将命令行窗口蜕化成极简状态。 Yakuake image Yakuake最初的设计灵感来源就是雷神之锤的终端效果。它本质上就是一个基于KDE Konsole技术的下拉风格的终端。因为它是一个KDE应用,如果你想把它安装到GNOME桌面上,将会遇到一大堆的KDE系统包依赖。但如果你是一个KDE用户,Yakuake会让你相当满意。它的安装方法是: apt- get install yakuake Guake image 这是一个Gnome平台上的下拉式的终端工具。这款终端的目标就是提供一种快速终端访问方式,你只需要按动一个快捷键,就能让它从桌面上出现/消失

E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系

本小妞迷上赌 提交于 2020-08-17 09:21:10
安装terminator等一些软件等时候,遇到了这样等问题 leo@leo:~$ sudo apt-get install terminator [ sudo ] password for leo: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是 因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件 包尚未被创建或是它们已被从新到(Incoming)目录移出。 下列信息可能会对解决问题有所帮助: 下列软件包有未满足的依赖关系: terminator : 依赖: python -support (>= 0.90 . 0 ) 但是它将不会被安装 依赖: python - vte 但是它将不会被安装 推荐: python - gnome2 但是它将不会被安装 推荐: python - keybinder 但是它将不会被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。 leo@leo:~$ sudo apt-get install vim 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是

sscanf sscanf_s使用

佐手、 提交于 2020-05-08 21:15:25
#include<stdio.h> 定义函数 int sscanf (const char *str,const char * format,........); 函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。 返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。 返回0表示失败 否则,表示正确格式化数据的个数 例如:sscanf(str,"%d%d%s", &i,&i2, &s); 如果三个变成都读入成功会返回3。 如果只读入了第一个整数到i则会返回1。证明无法从str读入第二个整数。 main() { int i; unsigned int j; char input[ ]=”10 0x1b aaaaaaaa bbbbbbbb”; char s[5]; sscanf(input,”%d %x %5[a-z] %*s %f”,&i,&j,s,s); printf(“%d %d %s ”,i,j,s); } 执行 10 27 aaaaa 大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧。   1.

redis源码学习01:字符串sds

爷,独闯天下 提交于 2020-04-20 19:06:37
前言 本文是redis源码关于字符串处理的学习笔记,欢迎指正。 redis版本是5.0.5,redis的功能、用途及性能我就不做赘述了。 正文 进入正题,redis提供了自己的字符串存储及相关操作,源码文件在sds.h和sds.c里。 在学习代码的过程中发现redis使用了一个比较巧妙的设计,redis里存储字符串不是简单的使用C语言里的char *来存储,而是利用C语言指针可以加减运算的特性来封装字符串结构体。从而能够在常用的字符串处理函数里自动扩容;而且这个设计保证你在使用redis的字符串存函数同时也能使用全部的libc里的所有关于字符串的函数。 下面就来说说这个设计,首先看下一个宏定义: typedef char *sds; redis里给char *取了个别名sds,所以常用的跟字符串操作相关的函数也都是以sds开头如: void sdssetlen(sds s, size_t newlen); ​size_t sdslen(const sds s); 接下来看下存储字符串的结构体: /* Note: sdshdr5 is never used, we just access the flags byte directly. * However is here to document the layout of type 5 SDS strings. */ struct

π-calculus与资源模型设计

喜夏-厌秋 提交于 2020-04-09 20:12:16
众所周知我是π的支持者。原因很简单,就是π有着对『并发』概念的最小化完备表述。 对于程序员来说我不推荐系统学习各种进程演算或者进程代数,根本上这是基于符号重写的逻辑系统,跟编程的关系不大而且,对逻辑学基础的要求太高了。 但如果要一窥大师思想,我推荐阅读Robin Milner的图灵奖演讲: Elements of interaction ,这个网上一搜就有,而且很好读;而且我相信它里面把共享变量看作进程,把通讯拆成I和O两个部分的思想,都是大家可以看懂的,而且,是醍醐灌顶的。 本文是在实现RP协议的原型时的一个思考。RP协议是一个类似HTTP Restful的通讯协议,但是它不依赖HTTP,在一定程度上它更希望象网络文件系统那样完成通讯双方的交互,但操作语义上选择了Restful的资源模型,而不是文件系统的open/read/write/close流语义。 在π里,最基础的表达式之一是input prefix, c(x).P 这样一个形式,它的意思是 P 要等到channel c收到一个x消息才开始运行,这非常接近事件驱动模式,实际上,事件和消息并没有真正的区别,在数学上都一样。 但是这里需要注意的是,一旦x出现,这个表达式就被估值了,或者说,发生reduction,它就不再存在了,相当于一个数学表达式计算完了。 这和另一种情况不一样,就像一个库函数,或者一个服务点