
基础编程
文章平均质量分 51
HockerF
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
霍夫变换 原理分析
在以前做opencv的项目的时候, 经常用到霍夫变换, 霍夫变换是直线检测的一个很有用的工具,当然,也可以用来检测其他形状.之前不明白原理, 后面在网上找了很多资料, 根据自己的理解, 发现霍夫变换确实是一个很好的想法.下面进入正题:我们知道一个直线可以表示为 y=ax+b, 我们知道, 只要 a和b想等,那么就知道这是一条直线.通过简单的变换,我们可以将这个函数表示为 b=y-ax. 就是关于 a和b的函数. 这种将数据问题变换为参数问题的变换,就是霍夫变换.不管图像上的点是什么,只要两个点的原创 2021-01-11 15:11:53 · 2382 阅读 · 0 评论 -
sqlite3 c语言样例
下面的样例是来自 博客 的代码。不过博主主要是用得windows,我这里使用linux做基础来完成样例的说明。#include "sqlite3.h"#include <stdio.h>#include <stdlib.h>#include <string.h>int MyCallback(void *para, int nColumn, char **colValue, char **colName); //回调函数int main(int argc,原创 2020-07-28 16:23:37 · 465 阅读 · 0 评论 -
QT vs SDL
先说说两个项目的共同点:这两个项目都很有名,QT在以前就是嵌入式界面开发的牌面, SDL是游戏大佬的核心基础。两个项目都是开源的。都是跨平台的项目两个项目都是和图形界面 有关不同点:QT 偏向控制,实现界面操作SDL 偏向界面渲染,集成 opengl等库,支持2D,3D的渲染,多各种声音和图形等媒体有很好的支持。参考Qt5 vs SDL...原创 2020-07-06 08:57:59 · 3151 阅读 · 0 评论 -
python 处理连续的重复行
我在处理文本数据的时候,使用了系统命令grep进行检索文本内容,然后要将检索到内容的文本进行单独处理。可是有的文本由于有多个检索项,所以存在多行的情况,这时候,百度了下,发现代码太多,不是我想要的。于是写了一个简单的python 脚本,供大家参考import ostxt = 'temp.txt'txt2 = 'temp2.txt'fr = open(txt)fw = open(tx...原创 2020-03-31 11:17:22 · 880 阅读 · 0 评论 -
Package xproto , required by xau , not found
前面有一个博客介绍 opencv的编译,然后发现虽然编译通过,其实并不完美,比如没有gtk支持。其实我的电脑上是安装了gtk库的,但是在寻找gtk的时候,报错:Package 'xproto', required by 'xau', not found什么情况,我百度这个错误,各自感觉看不懂,重要的是没有说修复过程,$ sudo apt install libxproto-dev xpr...原创 2020-03-17 19:46:45 · 2122 阅读 · 11 评论 -
gdb调试
对于程序员来说,一谈起gdb,可能就联想起那个黑白界面,一顿紧张。其实没有那么必要,我们来想想,我们在调试的时候,需要哪些功能。第一 程序能够按照实际情况执行第二 程序能够在该停的地方停第三 能够查看程序的各种运行情况第四 程序能够实际情况动态改变一些参数,还能继续执行大概就根据这几点,我们就可以写一个很受欢迎的调试器无疑gdb也做到了,我就讲下为啥gdb那么经典:## 第一,运行...原创 2020-02-28 00:40:22 · 230 阅读 · 0 评论 -
程序管理
程序是事务处理的一种表达,然而目前程序主要是靠一大帮程序员进行维护,在程序运行期间基本是一程不变。特别是大到系统级别的程序,程序运行真正运行的代码往往只是程序运行的一小部分,也就是常规运行,很大一部分代码都是处理运行异常或者特殊情况。然而经常采用的时候,都是将整个程序全部加载进内存,这样在程序运行期间,程序在闲置了90%以上的代码在内存里面。整个程序加载过程也可能比较缓慢,程序的移植性也不好。...原创 2020-01-06 09:59:34 · 484 阅读 · 0 评论 -
mysql c语言 函数接口
应用程序可以使用下面的步骤与mysql数据库进行交互:使用 mysql_library_init 初始化客户端函数库,这个函数在 libmysqlclient c 语言链接库 和 libmysqld 嵌入式服务链接库,所以你使用的时候,需要使用-libmysqlclient 或者 -libmysqld进行编译。使用 mysql_init 函数初始化链接句柄,然后使用 mysql_real_c...翻译 2020-01-03 13:39:34 · 582 阅读 · 1 评论 -
underactuated 环境
最近通过博友了解到drake项目,当时只是看到一个类似ros的项目,有点感兴趣,看了下资料。后来,看到了基于drake开发的 [欠驱动机器人学-麻省理工学院开放课程-MIT 6.832: Underactuated Robotics(译) ]博客,这个名字非常吸引人,不过目前还不知道是不是我想的那样。于是我折腾了drake的环境 [drake环境搭建]。然后这里来折腾这个underactu...原创 2019-12-30 16:59:30 · 702 阅读 · 0 评论 -
python subprocess 运行命令
subprocess 中popen是启动子进程来运行的命令,也就是说,运行主进程下一条命令的时候可能popen中的命令还没有执行完成。我的业务里面,用到popen调用我编写好的程序,但是数据存在依赖关系,导致最后运行的数据结果出现较大的偏差。解决方法是, 使用wait函数来等待执行结束。比如这样:import subprocess# 准备命令列表 cmd_list# ... ......原创 2019-12-09 14:04:14 · 427 阅读 · 0 评论 -
python 下面 __FILE__, __LINE__, __FUNC__
在c语言中__FILE__, __LINE__, __FUNC__,这三个变量,用得好可以当作一个动态调试器,帮我们定位一些运行时错误,不管是调试还是运行日志的打印跟踪都非常有用。但是在python中,却没有提供这样的错误,报错都是使用的默认的报错堆栈来跟踪错误,对日志格式输出不够友好。气质python有堆栈管理的包 — inspect , 用起来也是挺方便的,我这里实现了__LINE__()...原创 2019-11-28 11:00:38 · 1658 阅读 · 0 评论 -
jump into scope of identifier with variably modified type
今天在运用goto的时候,遇到这个错误:jump into scope of identifier with variably modified typegoto语句一般少用,因为goto语句类似于汇编的jmp无条件跳转语句,在c语言中使用太多的goto,平白给自己的调试添加了汇编调试的难度。但goto语句在c语言中错误处理有很大的优势,可以减少很多代码量,大佬们多在用,所以大佬们也没有在...原创 2019-11-25 17:01:28 · 2246 阅读 · 2 评论 -
linux 终端的超级控制 - [BOSS API]
之前试过终端的输出控制,可以简单的控制光标,通过光标控制可以完成很多有趣的事情。最近在寻思 vim 怎么完成在终端上面来无影去无踪的, 后面发现折腾不起,百度搜索没有找到想要的东西,不知所以了。在看其他资料居然瞄到一眼,突然就发现一个好玩的东西,ncurses,恩恩,所有的奥秘都在这儿了。有其他事情,这里做一个笔记,下面是别人的程序,有点小问题,我做了下修改,可以运行了:/* c.c */...原创 2019-11-21 19:38:00 · 298 阅读 · 0 评论 -
获取硬盘序列号
static bool get_disk_serial(const char *disk_name, char* serial_no, int serial_no_len){ //参考的博客给了集中方法,我感觉ioctl贴近linux开发,最简单 int fd = open(disk_name, O_RDONLY); if (fd < 0){ printf...原创 2019-11-21 11:32:44 · 570 阅读 · 0 评论 -
linux c 加壳
软件加壳,主要目的是为了防止被破坏。我最近遇到一个linux c 的加壳需求。核心其实也非常简单,就是完成运行过程中,解壳完成后的源程序的代码重定位,让源代码正常的运行起来。现在比较出名的加壳工具还是成名已久的开源老将 – - – UPX,但是有个弊端就是,开源的,解壳工具基本上也是开源的,这样只是让我们自己的软件 加壳比不加壳 只是多了一层遮羞布。解决这个问题,我有两个方案,一个是将UPX...原创 2019-11-20 09:54:45 · 2979 阅读 · 0 评论 -
为啥是192.168
一个字,规定!!!ipv4一个有2322^{32}232个ip地址,这些ip地址做了一个规定:IP分类标志第一个网络地址段范围网络号占有字节网络号范围默认掩码私有ipA01-12611-126255.0.0.010.0.0.0-10.255.255.255B10128-1912128.0-191.255255.255.0.0172....原创 2019-11-06 10:37:02 · 357 阅读 · 0 评论 -
程序 格式
阅读性格式有,出名的json和xml,各有优势,这类格式,有一个优势,就是支持无限嵌套,很多大型程序都使用的xml做配置解析,如android;json的话很多都是小型的数据传输用到。一类如cfg和log的格式,这类格式在程序中经常用到,可以说是为了程序而生的。一类就是程序了,不是人看的,如protobuf, 解释出来也是在程序中运行。还有些特制的格式,如多媒体,程序,pdf,office...原创 2019-11-04 09:00:00 · 1051 阅读 · 0 评论 -
ImportError: No module named scapy.all
今天遇到:ImportError: No module named scapy.all遇到这个问题,我分析了一下,有两种情况,一种情况是确实没有安装scapy程序。在使用conda或者conda下的pip安装scapy后,使用sudo会遇到这个问题,我就是这种情况。在scapy使用网卡的时候,需要sudo权限,一般conda程序很少有这个需求,而scapy确实需要,所以scapy遇到这...原创 2019-10-29 16:53:00 · 8621 阅读 · 3 评论 -
python 调用c语言
现在网上还有很多是python2编写的程序,我一般都是用的python3,今天了解了下python调用c语言程序的方法。 推荐使用固定格式的方式调用,毕竟如果使用普通共享库的方式的话,c语言传参中的指针不好处理,有知道的伙伴可以给我推荐点资料,我也学学,毕...原创 2019-03-20 20:40:22 · 870 阅读 · 0 评论 -
linux c 获取消息队列的特定消息类型的数量
在 linux c中 如何获取消息队列的特定消息类型的数量,如果你有这种想法,那你的编程思想就得转换一下了。消息队列只是做进程之间传递消息的一种方法,你不应该将它拿来做状态记录。虽然我觉得消息队列应该有必要的状态查询,但是可能他们认为简单即美。所以我们在做消息传递的时候应该将消息做个记录,然后收到消息后,能有个回应,程序本身有一个消息的跟踪,这样来防止消息队列因为没有处理某类消息,而导致程序奔...原创 2019-08-21 16:20:22 · 907 阅读 · 0 评论 -
c++ 不定长消息的处理
在c++中,使用结构体来对地址上的数据进行标示,一般情况下,这给我们编程带来很大的变量,可以通过一个简单的机构处理千千万的数据。但是最近我遇到一个难题,在传输结构中,数据不定长。这样的数据就超出了一个结构体的处理范围了。大致是,我有个程序A,会输出随机的多个结果,将这些结果通过管道传递给另外一个程序B。在B中我们知道结果的结构但是目前还不知道结果的个数。这个时候我们可以在B中我们定义一个结...原创 2019-08-22 20:03:20 · 502 阅读 · 0 评论 -
消息队列的发送信号类型必须大于0
今天遇到一个坑,我将发送的消息的id设置为0了,发送不提示,我也没有检查errno,头疼,然后,就莫名的消息失踪。我做了一个10000次的循环,使用 ipcs−mipcs -mipcs−m 看了,该消息队列一个消息都没得。想起linux中0的特殊含义,终于知道0消息是无效的了。后来查了资料应证了一下,所以以后linux不要动0的幻想了。虽然浪费了一晚上,但还好,没有死磕。下班了。…...原创 2019-08-27 21:50:10 · 320 阅读 · 0 评论 -
TIME_WAIT状态
今天在调试一个服务器-客户端的架构,经常出现当结束一个程序的时候,出现TIME_WAIT的状态,于是查了下。首先这个状态是TCP网络保证全双工可靠通信的一个方式,如果没有处理,一般保持一到四分钟就会解除。然后还有点闲余时间,来复习下TCP:我们可以通过下面命令来统计我们当前主机的链接状态:$ netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a i...原创 2019-08-28 16:25:42 · 251 阅读 · 0 评论 -
c/c++的枚举类型 - enum 的编程bug
以前一直正常使用枚举类型,一直没有注意到枚举其实是有取值范围的,我以为枚举是无符号整数,今天才知道原来是有符号的。隐隐想起以前有学过,可能没有注意,就忘了。比如我定义下面枚举:enum demo_enum{ DEMO_NUM_MIN = 1, DEMO_NUM_MAX = 0x7fffffff, DEMO_OTHER,};导致编译出现下面问题:error: overflow i...原创 2019-08-28 17:03:29 · 518 阅读 · 0 评论 -
消息队列默认最大传递的数据是8k
又是一个坑,消息队列默认最大传递的数据是8k。虽然代码还没有出现错误,但是这个坑却存在,打算最大情况接近30K的数据用共享内存传递,如果报错 errno 会是 INVAL(无效消息)。其实可以通过修改/proc/sys/kernel/msgmax的值来调整最大的限制,但是这个不太推崇,还是让项目适应系统,而不是修改系统的默认值,比较容易影响到系统的稳定性。...原创 2019-08-28 19:52:10 · 671 阅读 · 0 评论 -
python怎么实现类似#define宏定义
我怎么了,怎么突然问出这个问题,一时还认真的点进了论坛。面壁思过一下:python是解释性语言,不需要编译, #define是预编译阶段起作用的, python没得必要在c语言中,#define在调试或者多平台兼容的时候很有用,特别是#define DEBUG 作为调试的情人是程序员绕不开的坎。而在python中可以使用全局变量来替代define,然后用if来做判断是否启动调试模式,后期如...原创 2019-08-30 11:06:35 · 28603 阅读 · 3 评论 -
命令行也可以带一点心情
在linux下经典的操作就是命令行操作。都是好的开头是成功的一半,我们重点来看看命令行的开头。其实在linux下,命令行的行头是一个全局变量 PS1 管理的,比如下面是我安装的Ubuntu的设置如下:命令是这样:$ echo $PS1\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\...原创 2019-09-06 10:22:10 · 432 阅读 · 0 评论 -
ipython 源码阅读
ipython是一个非常棒的工具, 即改进了python的命令行工具的代码输入不友好, 又给jupyter做了很好的铺垫。感觉jupyter的notebook用起对代码执行和展示都比较好,但是对代码的可阅读性大大降低。所以我想做一个插件,又有jupyter的执行方便,又保留python代码的可阅读性。ipython项目是一个很好的借鉴,于是来看了下ipython的源码,我在github上面的...原创 2019-09-19 19:55:16 · 798 阅读 · 3 评论 -
打印机语言 PCL
PCL目前比较流行的是点云[point cloud language]的缩写,由于前两年ADAS的兴起,激光雷达和毫米波雷达得到很大的发展,点云就是点阵雷达发展的副产物,相对来说不需要路面驾驶这么高的实时性。好了,我找了半天,总算找到正主,Printer Command Language (PCL)的开发文档。我找到了 pcl_xl_2_0_technical_reference_rev2_2....原创 2019-09-25 15:30:42 · 3336 阅读 · 0 评论 -
关于并行编程中的链表
在并发开发中,提到并行的使用链表来提高并行效率。由于是多个用户操作,链表得加锁,但是锁也是需要占用资源的。我们可以将所有的链表的操作封装为一个操作线程。使用消息队列来通知这个线程来完成对这个队列操作,减少队列中等待锁同步的协同时间。void* process_proc_message(void* arg){ int msqid; key_t key; int f...原创 2019-08-21 09:33:26 · 567 阅读 · 0 评论 -
markdown使用下使用mermaid做图
之前好像做过相关的笔记,但是一时不知道放到哪儿去了,这里再来快速的学习一下mermaid主页的展示图程序流程图graph TD; //TD表示上下结构,很好理解, T->top, D->down / B->bottom. 当然类似的还要, R->right, L->left . //所以组合有从上倒下,从下到上。 从左到右,从右到左。...原创 2019-08-19 21:54:05 · 3325 阅读 · 3 评论 -
并发开发
前两天陪一个小伙伴看并发编程的项目,这里总结一下。在long long ago的最开始,使用并发编程其实是解决低速的IO操作和高速的cpu运行速度不匹配的问题,再然后有了cpu出现多核的现象,有了并行思想就可以将多核cpu协同工作。再然后,出现了类似于我们现在网线一样的东西,并行程序能够让多台计算机进行协同工作完成复杂的任务。其实现在google的超大规模集群也是一个大型的并行程序在上面运行...原创 2019-08-19 21:08:54 · 219 阅读 · 0 评论 -
浏览器显示数学公式
如今浏览器的功能越来越强大, 可以说早都超过了浏览信息的基本功能了, 什么在线游戏,在线文档处理,在线图片处理, 在线代码编写,在线看视频啥的, 应有尽有。前两天再看一个关于数据公式的浏览器显示问题,其中MathML最为轻便小巧,功能也比较强大, 奈何MathML库处于安全等原因,不被最强大的chrome浏览器待见, 而MathML第三方库在chrome上的支持也不是很好。我当时想从svg上出...原创 2019-05-27 10:04:24 · 4373 阅读 · 0 评论 -
安装pytorch_geometric
前些时候了解了python下的 dgl库来进行图谱的计算, 最近看到pytorch_geometric 比dgl快很多。 于是打起了pytorch_geometric的注意, 然而pytorch_geometric 并没有dgl 安装这么方便。 大体思路就是 git源码, 编译源码, 安装, 测试。我来先吧坑填了第一个坑不填,会报如下错误:ImportError while importi...原创 2019-05-15 17:31:04 · 13042 阅读 · 36 评论 -
linux下的glib库
glib可以说是linux编程的一大特色,然而最近看到一个glib的程序,却不太熟悉,我感觉我还差得有点远,于是想看看。glib的官方文档里面的内容是比较全的,当然我们更喜欢看国语,比如这篇博客glib源码安装使用方法,虽然内容没太更新,但是简单看看思路,入门还是可以的。记得glib编译需要添加一个glib的安装路径喔,一般用pkg-config,比如:ab: ab.c gcc ab.c ...原创 2019-04-25 15:42:30 · 1476 阅读 · 0 评论 -
rsa openssl实现
折腾,今天本来信心满满的要给文件做个加密,以为很快,结果找的几个博客应该是版本比较老了,运行出叉子,硬是打算放弃了,后来后知后觉的在官网上找了一个demo,总算是勉强吧例子实现了。大概就是调用openssl的接口,总体来说还是比较简单。我分了三个部分生成4096位的密匙对(私密和公密)保存到本地文件中使用公密对文件进行加密使用私密对文件进行解密下面是我三个对应的代码:生成密匙对...原创 2019-04-03 20:42:03 · 1591 阅读 · 11 评论 -
c语言字符串换行分割
c语言基础库有字符串分割strtok,但是由于不可重入,很多都自己写,下面的代码实现类似和python 的split函数差不多, 只是我将分隔符定为换行符’\n’。代码如下:int split_line(const char *str, char ***str_lines, int *len){ char *s = "\n"; char *b_str = (char *)m...原创 2019-04-08 14:20:04 · 6137 阅读 · 0 评论 -
python opencv threshold函数的精度问题
在python中, opencv库用的numpy的结构体,在做数据处理的时候,为了归一化,往往是用的小数。opencv做图像处理有很大的优势,但是他的所有的函数都是建立在int数据集上,毕竟它的基础像素点都是整数。我在用threshold处理阀值的问题上遇到了问题,开始的时候将点转换为整数然后处理了再处理成小数,然而精度受到了很大的影响。_, img = cv2.threshold(img_...原创 2019-03-21 09:08:21 · 738 阅读 · 0 评论 -
判断两条直线的位置关系
最近在看任意两个多边形的交并比,原创 2019-03-07 09:53:31 · 3634 阅读 · 0 评论 -
python计算任意多边形面积
看了一些方法网上的资料,也自己倒腾了一些想法。 然后看到这个大神的博客(《计算任意多边形的面积》),我就服气了。我把代码转换为python:# 计算任意多边形的面积,顶点按照顺时针或者逆时针方向排列def compute_polygon_area(points): point_num = len(points) if(point_num < 3): return 0.0...原创 2019-03-05 18:02:57 · 12079 阅读 · 24 评论