古典吉他学习第五六节课总结

继续巩固打拨弦和开指练习,新增卡鲁里1至4型节奏练习,视奏《我怎能离开你》低音和高音版。 练习 打拨弦 2:1 90 100 110 1:1 60 70 开指 2:1 70 80 90 右手发音 2:1 60 70 80 视奏 我怎能离开你 低音高音版 四分音符 = 50 60 70  卡鲁里 1至4型 1:1 50 60 70 (一个音一拍)…

古典吉他学习第三四节课总结

左手按弦姿势尽量放松,不要突出压迫手腕,不要夹臂,手掌尽量贴近琴颈下方,手指按弦时第一关节与面板保持垂直。 左手打拨弦练习 训练左手独立性,灵活性,爆发性和准确性。手指自然弯曲状态下向手背方向拉伸,感觉到手背的筋的拉力。然后采用爆发力将手指打在琴弦上,打在琴弦上时手指是自然按弦的状态,而不是蛮力,关键点在于解除拉伸状态时的突然爆发力。手指打在琴弦上时,采用靠弦方式拨动琴弦,手指停留在下一根琴弦上,停留后使其处于放松状态。 左手开指 练习各个手指之间的展开度。 课后练习 打拨弦: 单指:1,2,3,4 双指:12,13,14,23,24,34 三指:123,124,134,234 四指:1234 开指: 12,13,14,23,24,34,右手采用靠弦方式。…

古典吉他学习第一二节课总结

姿势 面向观众,左腿踩脚蹬向前冲前方,右腿放松,放置琴于左腿之上,琴头与眉头基本持平,琴上桶突出处位于身体中央偏左位置,两肩放松。右手小臂置于琴下桶突出处。p指放于6弦上,位置在音控正中央处,i,m,a指分别放在3,2,1弦上。保持手指大关节(或手掌)方向与小臂一致,指甲方向大概指向上琴桶,方便发力,避免长时间弹琴产生病痛。手腕可根据个人手型,大小适当隆起,以便方便与拨弦。手腕内外扭曲,或向上向下弯曲。 靠弦发音 分解动作:1. 按弦 2. 拨弦 3. 还原 4. 放松 按弦将琴弦按下,手指肉按住,指甲即将触弦的状态,避免发出指甲打弦的声音。拨动琴弦,手指停留在下一根弦上,不要勾弦,手指拨弦方向基本上与琴弦垂直,让琴弦沿着指甲的坡度滑动。理论就是琴弦垂直面板震动,发出更饱满,有质感的声音。 合成动作:1,2,3,4步骤一气呵成。 练习 分解动作:2拍一个动作。 合成动作:4拍一个音。 熟练之后可减轻靠弦的力度,即发完音之后及时收住手指头。 注 对着镜子练习,清楚每一步做什么,做的是否正确。…

十二平均律基础知识

间隔半音数 间隔名 大致频率比 0 perfect unison 完全一度 1:1 1 minor second 小二度 16:15 2 major second 大二度 9:8 3 minor third 小三度 6:5 4 major third 大三度 5:4 5 perfect fourth 完全四度 4:3 6 augmented fourth 增四度diminished fifth 减五度 45:3264:45 7 perfect fifth 完全五度 3:2 8 minor sixth 小六度 8:5 9 major sixth 大六度 5:3 10 minor seventh 小七度 16:9 11 major seventh 大七度 15:8 12 perfect octave 完全八度 2:1…

sed命令详解

个人工作之中经常使用sed,但是比较简单的命令,并没有仔细的研究过sed详细用法,所以参考man手册进行了详细的整理。 sed是一个流式文本编辑器,可用来过滤和转换文本。基本用法如下: [source,shell] ---- sed [OPTION]... {script-only-if-no-other-script} [input-file]... ---- 其中的“[OPTION]”是可选的命令行参数,“{script-only-if-no-other-script}”是要执行的sed命令(如果没有用-e或-f指定别的命令的话,否则会视为输入文件路径),“[input-file]”是输入文件的路径。 sed的命令格式为:[地址]命令。地址是可选的,根据具体的命令而定。如‘/^hostname/aip=8.8.8.8’,‘p’等,地址格式和具体的命令可参下文。 == 选项及其含义 -n:: --quiet:: --silent:: 禁用自动打印模式空间,也就是禁止打印匹配的内容 -e script, --expression=script:: 添加要执行的sed命令 -f script-file, --file=script-file:: 将文件中的内容添加到要执行的命令中 --follow-symlinks:: 在in-place(如下)模式下,追踪符号链接 -i[SUFFIX], --in-place[=SUFFIX]:: 对文件进行直接更改,如果提供了SUFFIX,会使用SUFFIX作为扩展名进行备份 -l N, --line-length=N:: 指定行的长度 --posix:: 禁用所有的GNU扩展 -E, -r, --regexp-extended:: 在命令中使用posix扩展正则表达式(考虑到兼容性,应使用-E) -s, --separate:: 将各个文件单独对待,而不是一个长的连续的文本流。 --sandbox:: 在沙箱模式下运行 -u, --unbuffered:: 每次加载较小数量的数据,并加快刷新输入缓存的频率。 -z, --null-data:: 采用NUL字符(ascii 0)分割行 --help:: 显示帮助信息 --version:: 打印版本信息 如果没有指定-e,--expression,-f或--file选项,那么第一个非选项参数(及位置参数)将被作为命令来对待,剩下的所有参数都将作为文件名处理,如果没有指定文件名,则在标准输出中读取数据。 == 命令列表 === 无地址命令 : label:: *b*和*t*的标号 #comment:: 注释持续到换行符(或-e参数的结尾) }:: {}区块的闭合括号 === 0或1个地址的命令…

malloc分配不同大小内存的效率

分别对64B,1K, 4K, 16K, 256K, 4M, 64M,512M,2G大小进行测试,测试程序如下: [source,c] ---- #include #include #include #include long long count = 0; void alarm_handler(int sig) { printf("%lld\n", count); count = 0; alarm(1); } int main() { signal(SIGALRM, alarm_handler); alarm(1); while(1) { void *data = malloc(8589934592); if (!data) printf("alloc error\n"); free(data); count++; } } ---- 机器配置: 内存:8GB,1600MHz CPU:Intel Core I5,2 Core,4 Thread,2500MHz 测试时机器内存占用(足够各个大小): [source,shell] ---- blue@debian:/tmp$ free -g total used free shared buff/cache available Mem: 7…

timescaledb性能测试

link:https://github.com/timescale/timescaledb[timescaledb]是postgresql数据库的一个插件,通过hypertable实现对时间序列数据库进行分块,通过把大表分为多个小表的方式,新的数据总是插入到最新的块上,由于进行了分块,使得索引数据变小,保持索引一直处于内存当中,不用去磁盘交换数据,因此加快了数据的插入速度。timescaledb官方提供了数据库性能测试工具和数据,可参考link:https://github.com/timescale/benchmark-postgres[benchmark-postgres]。 官方也有link:https://blog.timescale.com/timescaledb-vs-6a696248104e[测试报告],随着数据量的增加,数据插入的性能一直处于稳定状态,而相比之下,postgresql则表现为指数级下降。 本测试采用官方提供的数据和程序,测试环境为阿里云ecs.g5.large云服务器,具体配置如下: * 2核cpu * 8GB内存 * 两块100GB ssd云盘,1800 IOPS * 系统为Debian 9.2 ## 测试步骤: 分别挂在两块ssd云盘到/data和/data1。 安装postgresql-9.6,安装timescaledb扩展。修改配置,修改配置: ```ini shared_preload_libraries = 'timescaledb' data_directory = ‘/data/pgdb’ shared_buffers = 2GB ``` 保存后重启postgresql。具体步骤参考相应的文档。 下载官方提供的link:https://timescaledata.blob.core.windows.net/datasets/benchmark_postgres.tar.bz2[数据]并解压到/data1目录下,cpu-data.csv中包含1亿条数据,每条数据格式如下: ```shell 2016-01-03 23:59:30+00,host_1999,80.6521114433705,60.9865370795396,38.7496729040943,11.5620089238801,47.2124408432341,82.4793308352443,41.6463534391737,85.2477509705689,53.843722695106,52.3795963946359 ``` 下载测试程序,安装go环境,并编译3个程序,并将测试程序拷贝到/data1目录下。 创建benchmark数据,并初始化cpu_ts和cpu_pg表: ```shell postgres@debian:/data1$ psql -c 'CREATE DATABASE benchmark;' postgres@debian:/data1$ psql -d benchmark benchmark-setup-timescaledb.sql postgres@debian:/data1$ psql -d benchmark benchmark-setup-postgresql.sql ``` 分别想cpu_pg和cpu_ts数据库插入数据: ``` postgres@debian:/data1$ ./copy --db-name=benchmark --table=cpu_pg --verbose --reporting-period=30s --file=cpu-data.csv --connection='host=localhost user=postgres password=postgres' postgres@debian:/data1$ ./copy…

tcpdump使用方法介绍

tcpdump是一个网络抓包工具,依赖于libpcap实现。libpcap是一个网络抓包库,支持ether,fddi,tr,wlan,ip,ip6,arp,rarp,decnet,tcp和udp协议。 tcpdump的基本是用方法为: [source,shell] ---- tcpdump options expression ---- options指定程序运行选项,expression是一个逻辑表达式,只抓取满足expressionn表达式的包。例如`tcpdump -i eth0 tcp and host 192.168.1.101`抓取eth0接口到192.168.1.101主机的所有tcp包。`-i eth0`是运行选项,`tcp and host 192.168.1.101`是表达式,表示抓取所有到192.168.1.101主机的tcp包。tcpdump支持的详细参数可参考`man tcpdump`,表达式的详细信息可参考`man pcap-filter`。 == 常用的选项 -A:: 采用ASCII码打印出包内容,抓取网页时很方便。 -F file:: 使用file文件中的内容作为表达式,命令行中的表达式将被忽略。 -i interface:: 要抓取的网络接口,如果未指定,则使用序号最小的接口,如eth0。也可以使用any来使用任意接口。 -l:: 设置stdout的输出模式为行缓冲,当想一边抓包一遍查看数据的时候有用。如`tcpdump -l | tee dat`和`tcpdump -l dat & tail -f dat`。 -e:: 打印数据链路层包头。 -Q direction:: 设置要抓取发送还是接收的数据,可能的值为in,out和inout。 -r file:: 从文件中读取数据包(有tcpdump -w生成,或其他pcap兼容格式)。 -v:: -vv:: -vvv:: 打印详细信息。 -w file:: 将原始包信息输出到文件中,之后可以通过-r来打印。 -x:: 除了打印包头,同样以十六进制方式打印包内容,不包括链路层的包头。 -xx:: 除了打印包头,同样以十六进制方式打印包内容。 -X:: 除了打印包头,同样以十六进制和ASCII码方式打印包内容,不包括链路层的包头。 -XX:: 除了打印包头,同样以十六进制和ASCII码方式打印包内容。 == 表达式语法…

libvirt虚拟化开发简介

libvirt是一个虚拟化开发的工具库,提供了底层的kvm,xen,vmware esx等虚拟化的统一封装。可以通过libvirt提供的api对不同的底层实现进行同一的管理。除了原生的c api,还有c#, go, java, ocaml. perl, python, php, ruby的api,用户可自主选择自己熟悉的语言。 要使用libvirt首先要安装libvirtd,这是一个后台守护进程,负责管理虚拟机系统以及和客户端交互。libvirt还包含了virsh命令行工具,供用户通过shell手动管理。另外,还可以通过图形界面方式进行管理,该工具是virt-manager,如果您想要通过python的api进行开发,需要安装python3-libvirt或python-libvirt。在debian下,可通过下列指令安装这些包: apt-get install libvirt-daemon libvirt-daemon-system libvirt-clients python3-libvirt virt-manager 启动libvirtd: systemctl start libvirtd 接下来我们就可以通过virt-manager创建一个虚拟机。熟悉vmware或者virtualbox的同学,可以看到virt-manager和这些软件很类似,安装系统就不再介绍了。 系统安装完成之后,我们就可以通过virsh工具进行基本的操作了。运行virsh,回车,进入virsh的命令行,可通过help查看virsh支持的操作。 virsh # help Grouped commands: Domain Management (help keyword 'domain'): attach-device attach device from an XML file attach-disk attach disk device attach-interface attach network interface autostart autostart a domain blkdeviotune Set or query a block device I/O tuning parameters. blkiotune Get or set blkio parameters blockcommit…