摘要: 太不容易了! 想要访问opencv的官网貌似要FQ才行。下载了opencv3.2版本,发现cmake在download opencv_ffmpeg.dll的地方超时了. 于是搜索一番,发现很多编译opencv3.1版本的,然后也提供opencv_ffmpeg.dll的下载,于是又去官网下载了3.1版 阅读全文
posted @ 2017-03-21 22:52 丹西 阅读(1773) 评论(0) 推荐(0) 编辑
摘要: 当我刷到动态规划这一章的时候,突然想起以前的部门研发比武,就是一道需要运用动态规划思想来处理的题目,团灭了99%的人,而我也是这99%中的一员,哈哈,只怪出题的人太狠了。 以下的代码是汽车车间装配时间最短的代码习题,懒于整理,折叠起来: #include <iostream> #include <v 阅读全文
posted @ 2017-03-20 22:11 丹西 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 近期遇到一个自定义报文传输性能问题,解决过程中借助了ethtool这个工具,因此发掘一下与此工具相关的网卡的一些特性。 ethtool 常用命令如下,比如对eth0的操作: 我这里主要想发掘一下ethtool -k 相关的内容,以下命令在ubuntu 14.04上亲测: 1、rx-checksumm 阅读全文
posted @ 2017-03-20 22:02 丹西 阅读(40083) 评论(1) 推荐(0) 编辑
摘要: 红黑树是满足如下条件的二叉搜索树。 1、每个节点要么是红色的,要么是黑色的。 2、根节点是黑色。 3、每个叶子节点是黑色的。 4、如果一个节点是红色的,那么它的2个子节点是黑色的。 5、对每个节点,从它到它的后代叶子节点的简单路径上,均包含相同数目的黑色节点。 练习完这些代码,我感觉我把stl的rb 阅读全文
posted @ 2017-03-12 18:02 丹西 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 看到二叉搜索树,就会回想到当年在大学课堂学习数据结构的情景,真的是悠悠岁月,欲说当年好困惑。 二叉树的可以参考的资料繁多,这里就不多说了,非要说的话,请看算法导论第12章吧。 下面是代码,包含了一点点C++11的特性。 1、二叉树遍历,没有比递归实现更优雅简洁直观的了,非要说非递归就是好的话我也赞成 阅读全文
posted @ 2017-03-11 23:27 丹西 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 最近遇到一个使用aarch64_be-gcc编译的ssh服务器出现不能通过ssh1协议使用密钥+passphrase不能正常登陆的问题。 (⊙o⊙)…不要奇怪为啥还在用SSH1,我也在奇怪。。 一顿捣鼓(重现问题),发现是64位的ssh-keygen生成的密钥的不能使用设置passphrase解密, 阅读全文
posted @ 2017-03-01 23:40 丹西 阅读(427) 评论(0) 推荐(0) 编辑
摘要: 理解了基数排序,也就理解了桶排序。 桶排序就是基数排序的一种优化,从MSD开始,即取最高位来排一次序,如果最高位没有重复(意味着没有冲突需要处理),是算法的最佳状态,O(n)。 如果有冲突,就将冲突的元素存放到对应的桶里(代码就是一个链表或者数组或者stl容器),然后对每个桶进行一次插入排序,平均情 阅读全文
posted @ 2017-03-01 22:20 丹西 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 计数,基数的中文读音都一样,这翻译的人还嫌我们计算机不够乱,真的想吐槽。 不管了,毕竟代码还是不一样的。 1、计数排序(counter sort): 通过一个上限来统计集合里的数值(或者其他非数值类型映射的数值),并累计比小于自己(包括)的数值的统计的个数,从而形成排序的索引(也就是前面有多少个小于 阅读全文
posted @ 2017-02-28 21:27 丹西 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 囧,道理很简单,实践起来却没那么简单。因为编程语言的语言元素跟算法描述数据结构并不完全一致。 经过迭代(此处省略800字),补充上对于归并排序对于小数组采用插入排序的代码。 首先是插入排序: 然后是普通的归并排序: 归并排序中的小数组采用插入排序: 测试函数: 阅读全文
posted @ 2017-02-26 23:56 丹西 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 这个算是捏软柿子了哇。 不过用模板来实现也是非常有趣。 快排的核心就是: 1、在数组中选择一个参考值X,再设置2个索引,一个用来记录比这个X小的位置i,一个用来记录比这个X大的位置j 2、比如是升序排序,就把大的值交换到小的值的位置,小的值交换到大的值的位置,如果是降序,就相反的交换,总而言之,就是 阅读全文
posted @ 2017-02-25 02:50 丹西 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 这两年一直埋首在C相关的代码中,都快忘记自己曾经热爱并赖以南征北战过的C++了,而且C++11出来那么久了,瞄了几眼,没练过都不敢说自己会C++了, 正好很多基础算法没正经的学习过,打算逐个(算法导论里的)用C++完成一遍好好练练手。(其实没那么多时间,能写几个就写几个啦,加之水平有限) 结果呢,一 阅读全文
posted @ 2017-02-24 22:49 丹西 阅读(404) 评论(0) 推荐(0) 编辑
摘要: ftrace 简介 ftrace 的作用是帮助开发人员了解 Linux 内核的运行时行为,以便进行故障调试或性能分析。 最早 ftrace 是一个 function tracer,仅能够记录内核的函数调用流程。如今 ftrace 已经成为一个 framework,采用 plugin 的方式支持开发人 阅读全文
posted @ 2017-02-19 23:30 丹西 阅读(18230) 评论(0) 推荐(1) 编辑
摘要: 一、简介 SystemTap是一个诊断Linux系统性能或功能问题的开源软件。它使得对运行时的Linux系统进行诊断调式变得更容易、更简单。有了它,开发者或调试人员不再需要重编译、安装新内核、重启动等烦人的步骤。 为了诊断系统问题或性能,开发者或调试人员只需要写一些脚本,然后通过SystemTap提 阅读全文
posted @ 2017-02-19 23:28 丹西 阅读(1964) 评论(0) 推荐(0) 编辑
摘要: 每个公司都会有自己代码风格或者编程规范,都旨在防范编程语言的一些陷阱或者提高代码效率,还有就是保持一致编码风格来提高代码可读性,方便code review; 或者说代码的一种美学,比如python也就有pep8约定,还有一些精致编码来表示你是否Pythonic。 DPDK也有自己的编码风格,看完颇有 阅读全文
posted @ 2017-02-18 11:00 丹西 阅读(1229) 评论(0) 推荐(0) 编辑
摘要: 很早之前就因为nosql就听说了redis,直到去年才真正去了解,只能说相见恨晚。 因为数据库相关,我以为这应该是个庞然大物,万万没想到,源码不到2M,所以,我不知道该说啥了。。。 还是来点靠谱的: 按照redis作者的排位,从上到下,性能是递减的,也就是evport>epoll>kqueue>se 阅读全文
posted @ 2017-02-16 01:25 丹西 阅读(689) 评论(0) 推荐(0) 编辑
摘要: Python有自带的洗牌算法函数shuffle(). 自己也通过学习也琢磨了一下它的实现,然后给出一个时间复杂度O(n),空间复杂度O(4)的例子: 执行结果: 后面再琢磨能不能降低一下时间复杂度。 比如洗4副牌,可以开4个线程同时洗,通过并行提高性能。 也可以一个线程洗,每次以4张或者更大数目切牌 阅读全文
posted @ 2017-02-14 12:30 丹西 阅读(1083) 评论(0) 推荐(0) 编辑
摘要: 路由策略的基础知识 定义 路由策略(Routing Policy)作用于路由,主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径。 目的 路由器在发布、接收和引入路由信息时,根据实际组网需要实施一些策略,以便对路由信息进行过滤和改变路由信息的属性,如: 阅读全文
posted @ 2017-02-13 23:46 丹西 阅读(2209) 评论(0) 推荐(0) 编辑
摘要: 编译 python2.7.11 arm64 编译 libffi-3.2.1 arm64 编译 zlib-1.2.8 arm64 编译 glib-2.46.2 arm64 编译 libaio-0.3.110 arm64 编译 openssl-1.0.1s arm4 编译 ncurses-6.0 arm 阅读全文
posted @ 2017-02-09 16:15 丹西 阅读(5665) 评论(0) 推荐(0) 编辑
摘要: 1 #!/usr/bin/python 2 3 import os 4 import struct 5 import fcntl 6 import binascii 7 8 TUNSETIFF = 0x400454ca 9 IFF_TAP = 0x0002 10 11 fd = os.open("/dev/net/tun", os.O_RDWR) 12 ifs = f... 阅读全文
posted @ 2017-02-08 12:32 丹西 阅读(1157) 评论(1) 推荐(0) 编辑
摘要: 1 import socket 2 import sys 3 import time 4 import struct 5 6 HOST, PORT = "10.60.66.66", 10086 7 8 def make_forward_iphdr(source_ip = '1.0.0.1', dest_ip = '2.0.0.2', proto = socket.IPPROT... 阅读全文
posted @ 2017-02-08 12:27 丹西 阅读(4586) 评论(0) 推荐(1) 编辑
摘要: 我们开发的网络,出于保密,只能叫XXX网络,或者我更倾向于称之为WTF-network 由于经常处于封闭的环境,刚一接触新一点的世界,总是有那么一点猝不及防。最近发现配置的静态路由经常消失,经发现是networkmanager在删除无效路由: 1、暴露了俺们对它的无知; 2、未出于安全考虑,共享使用 阅读全文
posted @ 2017-02-08 12:25 丹西 阅读(1503) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 4 #define MAX_PRIO 10000 5 #define BITS_PER_LONG 32 6 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 7 8 #define BIT(nr) (1UL > (nr & (BITS_P... 阅读全文
posted @ 2017-02-06 13:33 丹西 阅读(1585) 评论(0) 推荐(0) 编辑
摘要: 前年一时脑热(理想很丰满,现实很骨感),写了这个最短路径优先的低效版本,且留着回忆吧。 spf.h spf.c 阅读全文
posted @ 2017-02-06 13:30 丹西 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 这个代码是我上个公司工作项目的里面内存管理(基于伙伴算法)的一个简化又简化的版本。 因为没有内存边界检查; 因为没有内存使用统计; 因为没有考虑线程安全; 因为没有内存分配操作的具体文件位置信息; 因为没有考虑内存的浪费; 因为特别简单。。。所以也有一些用处,我定义了最小的内存为8字节,因此可以将任 阅读全文
posted @ 2017-02-06 13:26 丹西 阅读(1390) 评论(0) 推荐(0) 编辑
摘要: 这些字符代码是以前写的,源于很久很久以前的一个VC++项目,在当时的部门编程比赛里因为用了项目代码的xsplit函数,万万没想到,那个做了几年的项目里面居然有坑。。xsplit函数居然不能split连续2个空格,囧,领导说,你要是用ruby你就满分了,让我与满分失之交臂,当时没有人得满分,因此记忆深 阅读全文
posted @ 2017-02-06 13:21 丹西 阅读(968) 评论(0) 推荐(0) 编辑
摘要: BGP的核心就是交换路由,所以关键的部分还是在路由的更新与撤销上面,这之间包含了繁杂的属性,community等等可以称之为业务逻辑的处理过程,不做详述。 bgp_read函数是路由更新的事件处理函数,在收到BGP_MSG_UPDATE消息的时候开始调用bgp_update_receive函数处理。 阅读全文
posted @ 2017-02-03 21:16 丹西 阅读(3911) 评论(0) 推荐(0) 编辑
摘要: bgp使用tcp连接,每个bgp实例自身是peer的一个tcp server端,同时也是peer的tcp client端。 1、在bgp_create之后都建立自己的socket服务端开始监听179端口: bgp_socket里完成server socket的创建与监听。 2、在bgp_start函 阅读全文
posted @ 2017-01-26 11:12 丹西 阅读(2119) 评论(0) 推荐(0) 编辑
摘要: 创建完bgp peer之后,就要bgp start了,不然费那么大劲创建出来不做事情就销毁了,就很尴尬了。 那么对等体一旦start起来,就会进入各自的状态,在不同的状态下处理各自的事件消息。 下面列举一些状态和事件的集合: 全局变量FSM定义了状态机每个状态下的动作执行之后的下一个状态: 限于篇幅 阅读全文
posted @ 2017-01-25 11:22 丹西 阅读(2429) 评论(0) 推荐(0) 编辑
摘要: 现有的路由协议都是通过分布式协议逐个配置协商运行的,协议协议,一个就不需要协议咯,至少2个才能够协议着做事情嘛,不过呢,这样就出现网元过多配置困难的问题,对网管软件要求也越来越高, SDN或许可能改变这个局面,但不管软件如何定义,报文还是在一个一个网络节点传输的,所以我们看到quagga这样多的传统 阅读全文
posted @ 2017-01-24 22:40 丹西 阅读(1433) 评论(0) 推荐(0) 编辑
摘要: quagga支持BGP-4,BGP-4+协议,支持多协议(mpls,isis,ospf等等)以及单播,组播路由的导入和分发。 具体的协议,这里就不附录了,网络上有很多资料,或者RFC。 协议源码的学习基于前几章的quagga源码分析,所以刚接触的朋友最好浏览一下quagga的通用框架以及通用路由处理 阅读全文
posted @ 2017-01-23 14:57 丹西 阅读(3338) 评论(0) 推荐(0) 编辑