
程序设计
奔跑吧猴哥
搬砖的。
展开
-
Ubuntu20.04配置(五)安装ROS2最新版本Foxy
原文:在Ubuntu 20.04中安装ROS2最新版本Foxy Fitzroy_大橙员-优快云博客_ubuntu20.04安装ros2ROS2 是新一代机器人操作系统。2020年6月5日,ROS2 的最新版本 Foxy Fitzroy 正式发布了, 支持到2023年的3月!ROS2 支持的平台Linux (Ubuntu Focal(20.04))macOSWindowsROS2 真正是跨平台了,ROS1 只支持 Linux。有大神说,不要搞 ROS1 了,直接上 ROS2 ~~安原创 2022-02-13 19:26:21 · 5314 阅读 · 0 评论 -
Ubuntu20.04配置(五)编译安装protobuf
原文:编译安装protobuf 详细步骤 Ubuntu - 简书需要工具:autoconf, automake, libtool, make, g++, unzip安装命令:sudo apt-get install autoconf automake libtool make g++ unzip安装步骤:下载源码 发布版地址 以c++为例,下载最新的发布版 protobuf-cpp-3.14.0.zipwget https://github.com/protocolbuffers/pro原创 2022-02-13 18:34:53 · 9613 阅读 · 0 评论 -
Ubuntu20.04配置(四)安装Docker
原文:ubuntu 20.04 LTS 安装docker - 进步号无人货运飞船 - 博客园2021年八月更新,移除了过时内容目录ubuntu 20.04 LTS 安装docker 零:卸载旧版本 一:设置仓库 更新 apt 包索引。 安装依赖包: 添加GPG密钥 添加软件源 二:安装 Docker Engine-Community 三:测试 四:免sudo运行&镜像加速 免sudo docker镜像加速 五:参原创 2022-02-13 14:37:20 · 4383 阅读 · 0 评论 -
Ubuntu20.04配置(三)安装GCC及OpenGL
sudo apt-get install build-essential libgl1-mesa-devsudo apt-get install freeglut3-devsudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev原创 2022-02-13 12:24:42 · 1103 阅读 · 0 评论 -
Ubuntu20.04配置(二)安装中文输入法
1.安装Fcitx输入框架相关的依赖库和框架都会自动安装上sudo apt install fcitx-binsudo apt-get install fcitx-table2.下载Linux版本搜狗输入法(搜狗输入法官网中根据自己情况选择32位和64位)然后进入相应的下载目录,进行安装(安装过程中如果有错,运行sudo apt --fix-broken install,删除安装,重新开始)sudo dpkg -i sougou的文件名.deb遇到 dpkg: err原创 2022-02-13 10:51:17 · 1102 阅读 · 0 评论 -
Ubuntu20.04配置(一)更换图内源
Ubuntu系统自带的源都是国外的网址,国内用户在使用的时候网速比较慢。一个软件的下载是十分痛苦的,这里讲解一下如何将国外源更换为国内源,让你的网速Biu.Biu.Biu1.备份原来的源sudo cp /etc/apt/sources.list /etc/apt/sources_init.list将以前的源备份一下,以防以后可以用的。2.更换源sudo gedit /etc/apt/sources.list使用gedit打开文档,将下边的阿里源复制进去,然后点击保存关闭。阿里源deb原创 2022-02-13 10:04:28 · 620 阅读 · 0 评论 -
自动驾驶开发入门(四)---浅谈Apollo Cyber RT 总体架构
以下是个人学习总结:图较大,请放大看。Cyber RT是一款功能完备的通信中间件。其架构可再细分成如下三层(个人思考,非官方说法):● 功能应用层,开发者主要面向Component组件编程。开发者从Component派生出一个子类,重写Proc函数,在其中完成业逻辑。这是最高层次的抽象。Proc作为回调函数在协程中执行。接受协程调度器的优先级调度,并且接收到的数据都是融合后的。● 数据融合层,底层数据在这里完成了融合,再根据优先级分发给应用层。协程调度框架在这里实现。对于上层应用和.原创 2021-09-16 15:45:24 · 2600 阅读 · 0 评论 -
自动驾驶开发入门(三)---浅谈Apollo Cyber RT中的Transport
Cyber的Transport为上层封装了底层数据传输的细节。上层主要使用Transport,Transmitter,Receiver三个类,其中Transport是工厂类,负责创建Transmitter、Receiver以及Dispatcher(上层不直接使用)。Transmitter和Receiver各有三个派生类,对应Cyber的三种数据传输方式 ,分别是进程内(Intra)、进程间(Shm)以及网络(RTPS)。每种消息(Channel或Topic)可以dag文件中配置数据传输方式(Optional原创 2021-09-16 14:13:21 · 6049 阅读 · 4 评论 -
自动驾驶开发入门(二)---浅谈Apollo Cyber RT中的协程
以下这些是个人对于协程的总结。先说一下协程的优点:●协程的最大的优势:协程切换开销远小于线程,进程切换。相比于线程,协程没有内核态的上下文切换,近乎可以无限并发。协程在用户态进程显式的调度,可以把异步操作转换为同步操作,也意味着不需要加锁,避免了加锁过程中不必要的开销。Golang为什么有这么强的并发能力,协程居功至伟。协程创建于用户空间,理论上可以创建的协程数量远大于线程。●引入协程库后,代码以顺序性书写,易于理解,而执行时则是异步调用,性能不减。使用协程需要注意的地方:●使...原创 2021-09-16 10:37:00 · 2277 阅读 · 0 评论 -
Visual C++ 中的命名返回值优化
多年来,Microsoft Visual C++编译器一直在努力寻求更新的技术与优化方式,以求最大可能地提高程序的性能。此文描述了Visual C++编译器在不同情况下,是怎样消除多余的复制构造函数和析构函数的。 通常来说,当方法返回对象的一个实例时,会创建一个临时对象,并原创 2011-07-07 16:50:19 · 912 阅读 · 0 评论 -
得到当前时间的几个函数
<br />asctime(将时间和日期以字符串格式表示) <br />相关函数 time,ctime,gmtime,localtime<br /> <br />表头文件 #include<time.h><br /> <br />定义函数 char * asctime(const struct tm *timeptr);<br /> <br />函数说明 asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果原创 2011-05-09 13:11:00 · 1182 阅读 · 0 评论 -
_tmain()和main()区别
<br />_tmain()是unicode版本的的main() <br />_tmain这个符号多见于VC++创建的控制台工程中,这个是为了保证移植unicode而加入的(一般_t、_T、T()这些东西都和unicode有关系),对于使用非unicode字符集的工程来说,实际上和main没有差别(其实就算是使用unicode字符集也未必有多大的差别)。<br />1。 main是C程序的函数,_tmain是main为了支持unicode所使用的main的别名<br />2。转载 2011-05-09 09:42:00 · 614 阅读 · 0 评论 -
贪心算法的详解
一、 贪心策略的定义【定义1】 贪心策略是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。 其实,从"贪心策略"一词我们便可以看出,贪心策略总是做出在当前看来是最优的选择,也就是说贪心策略并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解,而许多问题自身的特性决定了该题运用贪心策略可以得到最优解或较优解。 二、贪心算法的特点 通过上文的介绍,可能有人会问:贪心算法有什么样的特点呢?我认为,适用于贪心算法解决的问题应具有以下2个特点:1、贪心选择性质:原创 2011-05-11 13:37:00 · 2587 阅读 · 0 评论 -
0-1背包问题--动态规划解法
问题描述: 给定n种物品和一背包,物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品(物品不能分割),使得装入背包中物品的总价值最大? 抽象描述如下: x[n]:表示物品的选择,x[i]=1表示选择放进物品i到背包中。 问题分析: 1.抽象之后背包问题转换为找到一个最优的数组,x1,x2,.....,xn的0-1序列。 2.假设最优解的序列为x1,x2,.....,xn,能使背包容量C的总价值最大.原创 2011-05-11 10:25:00 · 1878 阅读 · 0 评论 -
算法分析与设计之五大常用算法
http://c.chinaitlab.com/special/algorithm/Index.html转载 2011-05-10 16:44:00 · 914 阅读 · 0 评论 -
C++new失败的处理
<br />我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定正确了。我经常看到类似这样的代码:<br /> int* p = new int[SIZE];<br /> if ( p == 0 ) // 检查 p 是否空指针<br /> retu转载 2011-04-19 09:47:00 · 1716 阅读 · 0 评论 -
C++构造函数中抛出的异常
<br />构造函数中抛出的异常<br /><br /> 1、标准C++中定义构造函数是一个对象构建自己,分配所需资源的地方,一旦构造函数执行完毕,则表明这个对象已经诞生了,有自己的行为和内部的运行状态,之后还有对象的消亡过程(析构函数的执行)。可谁能保证对象的构造过程一定能成功呢?说不定系统当前的某个资源不够,导致对象不能完全构建好自己(人都有畸形儿,更何况别的呢?朋友们!是吧!),因此通过什么方法来表明对象的构造失败了呢?C++程序员朋友们知道,C++中的构造函数是没有返回值的,所以不转载 2011-04-19 10:03:00 · 22454 阅读 · 2 评论 -
JAVA程序员看C#的精华与糟粕
<br />C#和java是号称90%的相同加上10%的不同。因此当时我学习C#,阅读两种代码完全没有什么阻碍。<br /><br />对C#了解得深入以后,来发表下对这两种语言各自特性的一些看法.<br /><br />比较起java和C#大相径庭的那10%,会发现C#五花八门的特性要多很多。比较知名的有:委托,属性,真正的泛型,索引器,类初始化器,分部类,操作符重载,struct,unsafe代码,IDisposable等,另外.net framework 3.5还加了一大串纯粹由编转载 2011-04-19 09:13:00 · 4113 阅读 · 0 评论 -
可重入函数与不可重入函数
主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是purecode(纯代码)可重入转载 2011-06-01 19:55:00 · 605 阅读 · 0 评论 -
可重入函数与线程安全函数
<br />可重入函数(reentrant function)与线程安全函数(thread-safe function)有时容易混淆,而且各种文档中的解释也不是很清楚,这里根据笔者的经验来说明一下。 <br /><br /> 线程安全函数<br />• 概念: <br />线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 <br />• 确保线程安全: <br />要确保函数线程安全,主要需要考虑的是线程之间的转载 2011-06-02 09:38:00 · 632 阅读 · 0 评论 -
简单问题(1)---数据类型转换的潜规则
最近做代码覆盖率检查时发现一个问题,请看以下代码,你能看出来吗?enum{ ETypeUnknow = 0, ETypeA, ETypeB, //...... ETypeZ, ETypeOne, ETypeTwo, ETypeThree, ETypeFour, ETypeFive, ETypeSix, ETypeSeven, ETypeEight, ETypeNine,};bool IsDigitType(unsigned int typ原创 2011-04-11 13:30:00 · 988 阅读 · 0 评论 -
什么样的测试用例是好的测试用例
1、用例覆盖程度 毫无疑问,这一点应该是最重要的,无需多说,覆盖率最大化是一套测试用例的最重要评价标准,如果漏测就杯具了。 2、用例是否已经达到工作量最小化 在满足用例覆盖程度最大化的前提下,应该尽量减小执行用例所需要的工作量。这些方面的方法有不少,如条件覆盖,分支覆盖,正转载 2011-07-28 10:55:30 · 3085 阅读 · 0 评论 -
软件质量六个要素
1. 功能性:软件所实现的功能满足用户需求的程度.功能性反映了所开发的软件满足用户称述的或蕴涵的需求的程度,即用户要求的功能是否全部实现了。 2. 可靠性:在规定的时间和条件下,软件所能维持其性能水平的程度。可靠性对某些软件是重要的质量要求,它除了反映软件满足用户需求正常运行转载 2011-07-28 11:02:05 · 9454 阅读 · 1 评论 -
Gerrit 系统的搭建
Gerrit 版本维护与代码评审系统的搭建。 最近在公司内部推广Gerrit,趟过不少坑,好记性不如烂笔头,先记下来。 注:本文是在Windows Server 2016下进行的验证,Linux平台大同小异。 准备工作:安装Git, 安装Java。 一、安装Apache 下载 Apache:https://www.apachehaus.com...原创 2018-03-02 14:14:03 · 2200 阅读 · 1 评论 -
synchronized
synchronized(b){...};的意思是定义一个同步块,使用b作为资源锁。b.wait();的意思是临时释放锁,并阻塞当前线程,好让其他使用同一把锁的线程有机会执行,在这里要用同一把锁的就是b线程本身.这个线程在执行到一定地方后用notify()通知wait的线程,锁已经用完,待notify()所在的同步块运行完之后,wait所在的线程就可以继续执行.原创 2014-11-03 12:04:38 · 1609 阅读 · 0 评论 -
Changes to the Meta-Object System in Qt 5
There are changes to the meta object-system in Qt 5, both under the hood and on the API side. Some of the changes are source incompatiblewith Qt 4. In this blog I’ll describe those changes and how t转载 2012-07-19 10:32:21 · 1537 阅读 · 0 评论 -
基于Qt/QML的微博客户端
我用Qt/QML开发了一个微博客户端,用到Qt C++/QML/Javascript目前实现了一些基本功能,可以访问新浪微博。目前测试过的平台包括诺基亚塞班3系列手机、Windows以及Linux!由于太多的朋友发邮件找我要源码,我不能一一回复,带来不便,请见谅。所以将源码上传到优快云方便大家下载。 源码下载1 优快云源原创 2011-04-11 14:04:00 · 2140 阅读 · 1 评论 -
Linux内核学习之list_entry --- 用C语言实现泛型编程
list_entry()宏#define list_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))ptr是指向list_head类型链表的指针,type为一个结构,而member为结构type中的一个域,类型为list_head,这个宏返回原创 2011-12-08 23:37:00 · 3769 阅读 · 0 评论 -
Windows Runtime(WinRT) 揭秘
微软以推出Windows 8为契机,以解决Windows长期存在的问题,并带来了新的用户界面,使得Windows更加安全和AppStore的商业模式。微软在Windows 8 里打造了第三个 XAML-based UI 系统, WPF只是一个供 .NET 这个圈子使用的XAML UI系统 Silverlight只是给浏览器使用的XAML UI系统,Windows Phone7将Silverligh转载 2011-11-22 16:49:15 · 1322 阅读 · 0 评论 -
单元测试代码覆盖率浅谈
在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代码。用代码覆盖率来衡量,有利也有有弊。本文我们就代码覆盖率展开讨论,也欢迎同学们踊跃评论。首先转载 2011-08-15 15:02:18 · 23808 阅读 · 0 评论 -
何时需要使用断言
1.可以在预计正常情况下程序不会到达的地方放置断言:ASSERT( FALSE );2.断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)3.使用断言测试方法执行的前置条件和后置条件4.转载 2011-08-15 11:53:41 · 2262 阅读 · 0 评论 -
单元测试是否必要?
Is Unit Testing worth the effort?Unit testing is a lot like going to the gym. You know it is good for you, all the arguments make sense,原创 2011-09-05 17:47:17 · 3349 阅读 · 0 评论 -
错误码、异常和断言
1. 为什么要用异常代替错误码?错误码的缺点:1) 默认是可以忽略的,因为调用函数时可以不处理其返回值,从而错误处理要依赖于程序员的主动性,而不是程序机制的要求; 2) 不能跨作用域传送,必须逐层向上转发,即使中间没有对错误码进行重新定义; 使用异常可以解转载 2011-09-05 16:58:17 · 1161 阅读 · 0 评论 -
Qt网站汇总
1.诺基亚Qt官网2.诺基亚Qt开发者3.Qt Centre4.QT CN原创 2011-09-02 14:51:05 · 733 阅读 · 0 评论 -
Qt Creator系列教程
Qt Creator系列教程转载 2011-09-02 14:39:04 · 1170 阅读 · 1 评论 -
简单问题(2)---数据类型转换的潜规则
接上篇 http://blog.youkuaiyun.com/deyili/archive/2011/04/11/6315327.aspxtype 是个 unsigned int, 根据数据类型提升规则(参见《C++ Primer》), type - ETypeOne 的结果也是个 unsigned int,也就是说恒大于0,同理type - ETypeNine。于是这两个比较就失去了意义。原创 2011-04-11 13:40:00 · 688 阅读 · 0 评论 -
C++为什么不用delete代替delete[]?
C++为什么不用delete代替delete[]?总结:一直想不通c++为什么多此一举,呵呵,前几天给Bjarne Stroustrup大师写了一份信,第二天就收到回复了,自己再仔细琢磨了一下,终于好像弄明白了:-)我的理解是这样的,无论new还是new[ ],C++的确知道返回的这个指针它指向多大的内存块,否则它就不可能正确地释放掉这块内存了。但是delete需要知道的不仅仅是指针指向多大的内存,而更重要的是要知道指针指向的数组中有多少个对象,知道了对象数量才能依次一一调用它们的析构函数。转载 2011-04-12 14:57:00 · 2308 阅读 · 0 评论 -
学.Net还是学Java
<br /> 因为.Net和Java是国内市场占有率最高的两门技术,对于准备学习编程语言的初学者来说,.Net和Java是初学者首先考虑的两门技术,因此很多人一遍遍的问“学.Net还是学Java”,社区中也每天都有“.Net控”在唱衰Java,也有“Java控”在唱衰.Net,一时间硝烟四起,让初学者更加迷惑。<br /> 做为一个.Net、Java、Delphi、Python、PHP等语言都进行过有一定复杂度的项目开发的人来说,我对任何一门语言都没有宗教式狂热崇拜,因此我也相对理性的对转载 2010-11-22 17:14:00 · 572 阅读 · 0 评论 -
Ruby快速入门(2)Array
Array(数组)是Ruby最生要的有序容器。>> animals = ['lions', 'tigers', 'bears']=> ["lions", "tigers", "bears"]>> puts animalslionstigersbears=> nil>> animals[0]=> "lions">> animals[2]=> "bears">> animals[10]=> nil>> animals[-1]=> "bears">> a原创 2011-01-12 14:22:00 · 706 阅读 · 0 评论 -
为谁写代码
<br />为人写代码(可读)<br />为测试写代码(可测试)<br />。。。。。。。。。。<br />为机器写代码(性能....)原创 2010-10-25 11:09:00 · 543 阅读 · 0 评论