tyst08的专栏

种一棵树最好的时间是十年前,其次是现在
私信 关注
tyst08
码龄13年
  • 144,531
    被访问量
  • 89
    原创文章
  • 31,056
    作者排名
  • 646
    粉丝数量
  • 于 2008-01-18 加入CSDN
获得成就
  • 获得280次点赞
  • 内容获得108次评论
  • 获得1,122次收藏
荣誉勋章
兴趣领域
  • #算法
    #PyTorch
TA的专栏
  • GNSS
    28篇
  • PLC
    2篇
  • 嵌入式物联网
    3篇
  • 数据结构与算法
    16篇
  • Python
    3篇
  • 代码大全(Code Complete)
    35篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

PLC模拟器与KEPServer冲突解决

今天尝试用PLC模拟器,发现502端口被占用,提示如下图:于是用netstat命令查看端口被哪个进程占用了,发现是1656号进程。打开任务管理器,找到1656号进程,发现是server_runtime.exe。打开其所在位置,发现在KEPServer目录下,是KEPServer的一个进程。在任务管理器中结束该任务,发现很快它又自动启动了。在Windows的服务中将该服务的启动方式改为手动,然后停止,很快它还是会自动启动。最终解决方法是:如果不需要用KEPServer,可以将该服务禁用
原创
27阅读
0评论
0点赞
发布博客于 2 月前

施耐德M580系列CPU下装注意事项

最近在用施耐德M580系列的CPU eP582040,掉进了几个坑,记录一下下装时的注意事项,以免时间久了忘了在同一个坑里掉几次。初次下装的时候默认IP为10.10.xxx.xxx,其中xxx为CPU上标记的MAC地址的后2个字节,将电脑IP改为同一网段即可连接上。这个简单,无需多说。初次下装时程序中需要把CPU解锁安全,看到所有服务都已启用。如下图所示:注意修改完成后需要点击工具栏上的确认按钮,否则可能没保存上。如图:做这一步的目的是因为若CPU不解锁安全,会导致下装之后无法通过以太网口
原创
207阅读
2评论
0点赞
发布博客于 3 月前

Python贪吃蛇双人大战-魔法豆登场

Python贪吃蛇双人大战-魔法豆登场时隔两月之后,家里的小朋友再次对我之前改写的贪吃蛇游戏(过程可参考我之前写的 Python贪吃蛇双人大战 和 Python贪吃蛇双人大战-升级版,代码可以到此处下载)提出了新的需求(用户永远会有新需求)。还好,这回需求不多,就一个:要求增加魔法豆,要是蛇吃到了魔法豆,蛇身可以一次增加5格;魔法豆被吃后自动重新生成,且在屏幕上只出现2个魔法豆。为了满足小朋友的愿望,老父亲只好又拿起了两个月没看的代码(已经忘的差不多了)。分析了一下需求,并不复杂,很明显需要增加一个魔法
原创
394阅读
0评论
0点赞
发布博客于 8 月前

LeetCode全局变量问题 - 由构造二叉树发现的

LeetCode全局变量问题 - 由构造二叉树发现的今天有小伙伴(好基友)问了我一个问题,他在LeetCode刷到一道题,碰到一个问题一直没想通,也不知道怎么解决,于是过来让我一起看。为了说清楚这个问题,我们先看题目:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 /
原创
421阅读
0评论
2点赞
发布博客于 8 月前

GPS从入门到放弃(二十六) --- RTKLIB函数解析

GPS从入门到放弃(二十六) — RTKLIB函数解析为了贴合这个系列的标题“从入门到放弃”,在入门之后现在就要放弃此方向了。虽然感觉遗憾,暂时也没有办法。在此附上此系列最后一篇,希望能给大家一些帮助。此文中一些函数解析参考了 https://www.cnblogs.com/taqikema/p/8819798.html,在此表示感谢!文章目录GPS从入门到放弃(二十六) --- RTKLIB函数解析rtksvrthreadrtkpospntpossatpossephclkeph2clksatpose
原创
3109阅读
5评论
9点赞
发布博客于 9 月前

动态规划

动态规划动态规划是运筹学的一个分支,是一种求解多阶段决策过程最优化问题的数学方法。要搞清楚它,首先需要搞清楚几个基本概念。阶段:整个决策过程可以按某个(空间、时间或其它)标准分为多个步骤,每一步称为一个阶段。比如下棋,走一步就可以认为是一个阶段。状态:状态表示在每个阶段我们关注的决策相关的影响因素的情况。比如下棋到某一步时,此刻棋盘上所有棋子的位置就是此阶段的状态。状态通常可以用一个或多个变量来描述。决策:一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的一种选择行动方法称为决策。比如下棋到
原创
341阅读
0评论
1点赞
发布博客于 9 月前

UWB中TOF测距法的公式推导

UWB中TOF测距法的公式推导UWB常用测距方法有两种:飞行时间测距法(TOF)和到达时间差法(TDOA)。这里说一下TOF。网上很多地方都给了公式,但是缺了过程推导,这里补上,有像我一样纠结公式是怎么来的同学可以参考。TOF飞行时间法(Time of Flight,TOF)是一种双向测距技术,它通过测量UWB信号在基站与标签之间往返的飞行时间来计算距离。根据数学关系,一点到已知点的距离为常数,那么这点一定在以已知点为圆心,以该常数为半径的圆上。有两个已知点,就有两个交点。以三个已知点和距离作三个圆,
原创
1975阅读
13评论
3点赞
发布博客于 9 月前

排序算法-11-桶排序

桶排序前面介绍的计数排序、基数排序是两种线性时间(即时间复杂度为 O(n)O(n)O(n))的排序算法,这一篇介绍另外一种也是线性时间的排序方法:桶排序。原理桶排序的前提是要排序的元素呈均匀分布。其原理是先将要排序的元素分到有限数量的桶里,然后对每个桶里的元素分别排序,最后再按顺序输出。步骤如下:设置一定数量的空桶。把每个元素放到对应的桶去。因为是均匀分布,所以每个桶的元素数量都差不多。对每个不是空的桶进行桶内排序。桶内排序可以采用别的排序算法,如插入排序、计数排序等,可以根据实际情况需要进行
原创
146阅读
0评论
0点赞
发布博客于 9 月前

靠谱:保证实时的动态内存分配

五一在家没有出门,研究了一下 TLSF 动态内存分配算法。缘起要说清楚TLSF,得从动态内存分配开始说起。动态内存分配是所有系统中都要考虑的问题,我们从学C语言开始就知道用的malloc函数就是用来申请动态内存的。其基本原理就是malloc时系统从堆中拿出一块内存分配给你用,用完之后通过free再还回去。这个过程有点像借钱,比如最近疫情手头紧,没钱吃饭了,于是找朋友malloc点钱去吃饭,比...
原创
218阅读
1评论
0点赞
发布博客于 10 月前

排序算法-10-基数排序

基数排序前面介绍的计数排序是一种线性时间(即时间复杂度为 O(n)O(n)O(n))的排序算法,这一篇介绍另外一种也是线性时间的排序方法:基数排序。原理基数排序最早是用于打孔卡片制表机上的算法,它可以给打孔的卡片进行排序。我们把打孔改为用数字表示,则它的基本思想是将整数按位数依次排序。步骤如下:统一数据长度为相同的位数,数位较短的数前面补零。按照个位数进行排序。按照十位数进行排序。...
原创
94阅读
0评论
0点赞
发布博客于 10 月前

排序算法-9-计数排序

计数排序前面已经介绍过的所有排序,包括插入排序、选择排序、冒泡排序、归并排序、鸡尾酒排序、希尔排序、快速排序和堆排序都是比较排序,因为在他们的排序过程中,都需要经过比较,比较元素的大小然后调整顺序。可以证明,在最坏情况下,任何比较排序都需要经过 Ω(nlog⁡n)\Omega(n \log n)Ω(nlogn) 次比较,所以比较排序的时间复杂度最好也就能到 O(nlog⁡n)O(n \log n...
原创
67阅读
0评论
0点赞
发布博客于 10 月前

STM32CubeIDE不支持生成Keil工程

STM32CubeIDE不支持生成Keil工程早闻ST官方出了新的IDE开发工具,因为之前的项目一直用Keil,也就没有去关注。最近新项目开工,决定用新的IDE试试。于是去官网下载了STM32CubeIDE 1.3.0,安装过程就不说了,一路默认即可,最好不要用中文路径。运行起来后,从Help菜单中可以看到版本号如下图:通过File菜单的New -> STM32 Project 即可新建...
原创
3582阅读
6评论
6点赞
发布博客于 10 月前

Python贪吃蛇双人大战-升级版

Python贪吃蛇双人大战-升级版在玩了几天贪吃蛇游戏之后,(代码可参考我之前写的 Python贪吃蛇双人大战),家里小朋友提出了新的需求(用户反馈)如下:豆子不能出现在豆子上。豆子不能出现在蛇身上。要显示得分,方便看出来谁的蛇比较长。如果蛇头撞到另一条蛇,自己挂掉,变成豆子蛇变成的豆子被吃了之后不重新生成燃烧自己身体可以加速,每次燃烧身体减少一格,速度提升至两倍趁着是周末,赶...
原创
765阅读
2评论
2点赞
发布博客于 10 月前

Python贪吃蛇双人大战

Python贪吃蛇双人大战原版和升级版,可配合博客阅读https://blog.csdn.net/tyst08/article/details/105521505,https://blog.csdn.net/tyst08/article/details/105620941。希望对大家有所帮助。
zip
发布资源于 10 月前

Python贪吃蛇双人大战

Python贪吃蛇双人大战晚上家里小朋友要玩贪吃蛇游戏,还要跟我对战,一时半会我没想到去哪里下这样一个游戏,忽然灵机一动,可以自己写一个,顺便还可以跟小朋友展示一下程序员的厉害,于是开工。原始版本这是一个很基础的程序,自然不用从头写,在网上随便一搜,找到有人共享的代码,链接如下:https://www.cnblogs.com/qiu2013/p/6087627.html,据说是来源于《Ras...
原创
5523阅读
4评论
23点赞
发布博客于 10 月前

GPS从入门到放弃(二十五) --- 卡尔曼滤波

GPS从入门到放弃(二十五) — 卡尔曼滤波概述单点定位的结果因为是单独一个点一个点进行的,所以连续起来看数据可能出现上串下跳的情况,事实上并不符合实际情况。为了解决这个问题,考虑到物体运动的连续性和运动变化的缓慢性,可以通过滤波器来平滑位置轨迹。滤波器的设计需要对物体的运动做一些理性的、常规的假设,比如要符合牛顿运动定律等。这里最常用的滤波器就是卡尔曼滤波器。卡尔曼滤波器用来解决用线性微...
原创
3371阅读
0评论
10点赞
发布博客于 10 月前

排序算法-8-堆排序

堆排序堆排序是利用堆(Heap)来进行排序的一种方法,在堆排序中,我们需要引入一种叫做“堆”的数据结构。堆一般可以看做是一棵完全二叉树,且堆中某个节点的值总是不大于或不小于其父节点的值,前者我们称之为最大堆,后者称之为最小堆。原理堆排序的思想是先用所有元素建立一个最大堆,然后每次取出最大的那个元素,并把剩下的元素再次调整为一个最大堆,如此循环。步骤如下:用所有元素建立一个最大堆。取出...
原创
290阅读
0评论
0点赞
发布博客于 11 月前

排序算法-7-快速排序

快速排序前面讲了插入排序、选择排序、冒泡排序、归并排序以及冒泡排序的改进版鸡尾酒排序和插入排序的改进版希尔排序,下面来说一种很常用的排序方法:快速排序。快速排序既然敢以快速命名,可以想见它的排序速度是很快的。事实也是如此,在实际应用中它的平均性能非常好,因此在一般情况下属于应用中的首选排序方式。原理快速排序与归并排序一样用了分治的思想。把一个要排序的数组按某个元素值(一般称作主元)进行划分...
原创
293阅读
0评论
0点赞
发布博客于 11 月前

排序算法-6-希尔排序

希尔排序(Shell Sort)希尔排序是对插入排序的一种优化。对插入排序不熟悉的同学可以参考插入排序一文。原理插入排序中每次比较之后只能将数据挨着移动一位,因此效率并不高。但是插入排序对于几乎已经排好序的数据操作时,效率是很高的。希尔排序的思想就是针对这两点做了优化,使每一次比较之后元素可以跨过多个数据移动,从而提高了整体效率。优化方式是对要排序的元素进行分组,然后在每个分组内进行插入排序...
原创
301阅读
0评论
0点赞
发布博客于 11 月前

GPS从入门到放弃(二十四) --- 精密单点定位

GPS从入门到放弃(二十四) — 精密单点定位精密单点定位(PPP: Precise point positioning),是一种全球精确定位服务。它利用预报的GPS卫星的精密星历或事后的精密星历作为已知坐标起算数据;同时利用某种方式得到的精密卫星钟差来替代用户GPS定位观测值方程中的卫星钟差参数;用户利用单台GPS双频接收机的观测数据进行静态定位可以达到毫米级的精度,进行实时动态定位可达到厘米...
原创
2574阅读
1评论
10点赞
发布博客于 11 月前

GPS从入门到放弃(二十三) --- 相位缠绕

GPS从入门到放弃(二十三) — 相位缠绕相位缠绕(Phase Wind-Up)是发射端与接收端之间的相对运动导致的载波相位变化。对 GPS 系统来说,因为 GPS 卫星发送的是右旋圆极化(RHCP: Right Hand Circularly Polarized)的信号,在这种情况下,接收机或者卫星天线的旋转会导致载波相位发生改变,这个值可能达到一个载波周期,我们把这种现象叫做相位缠绕。因为...
原创
2020阅读
1评论
5点赞
发布博客于 1 年前

RINEX格式介绍

RINEX格式介绍概述RINEX 是 Receiver Independent Exchange Format 的缩写,顾名思义,其是一种与接收机无关的数据交换格式。这种格式在GNSS领域中普遍采用,是一种标准数据格式。RINEX 格式采用文本文件(ASCII码)存储数据,数据记录格式与接收机的制造厂商和具体型号无关,这样可以方便数据的传递,使数据尽可能多被使用。目前 RINEX 数据格式...
原创
5158阅读
1评论
9点赞
发布博客于 1 年前

RINEX & RNXCMP.zip

1、RINEX标准最新版 V3.04 带书签。 2、RNXCMP windows版,包含 crx2rnx 和 rnx2crx 工具。
zip
发布资源于 1 年前

GPS从入门到放弃(二十二) --- 站点位移

GPS从入门到放弃(二十二) — 站点位移站点位移(Site Displacements)是固定在地球上的站点因为地球潮汐等因素影响跟随地球表面一起运动而造成的站点在地固坐标系(可参考坐标系一文)中的位移。虽然我们一般把地球看着一个固体,但它却不是一个刚体,而是也存在着形变。这个形变造成的站点位移我们一般可以忽略,在差分定位中可以基本消除,但在单点精密定位(PPP)中,则必须要考虑,因为站点位移...
原创
969阅读
1评论
0点赞
发布博客于 1 年前

GPS从入门到放弃(二十一) --- 地球自转参数

GPS从入门到放弃(二十一)— 地球自转参数地球自转参数(ERP: Earth rotation parameters)主要包括地球极点的位移和速率、UT1-UTC的时间差、以及由天文观测确定的一天的时间长度与 86400 秒之间的差值 LOD.地球自转参数可以从ftp服务站 ftp://cddis.nasa.gov/gnss/products/ 下载。IGS提供的ERP数据与精密星历数据放在...
原创
1101阅读
1评论
1点赞
发布博客于 1 年前

GPS从入门到放弃(二十) --- 天线偏移

GPS从入门到放弃(二十) — 天线偏移天线偏移(Antenna Offsets)是指天线相位中心与物体质心的偏移,此偏移会给卫星定位带来厘米级的误差。在一般定位中,此误差可以忽略,但在精密定位中,需要消除此误差的影响。质心的概念中学物理都学过,不多说。这里解释一下天线相位中心。天线所辐射出的电磁波在离开天线一定的距离后,其等相位面会近似为一个球面,该球面的球心即为该天线的等效相位中心,即天线...
原创
3219阅读
0评论
4点赞
发布博客于 1 年前

GPS从入门到放弃(十九) --- 精密星历

GPS从入门到放弃(十九) — 精密星历在目前的GPS系统中,除了卫星播发的广播星历之外,IGS组织(International GNSS Service)还提供精度更高的卫星星历,我们称之为精密星历。精密星历可以用于更高精度的定位需求,达到厘米级。当然可能会有相应的延时,实时定位精度可能会差一些。各大IGS分析中心(MIT、SIO、GFZ等)都会生产自己的精密产品如精密星历、精密钟差等,而...
原创
2706阅读
0评论
4点赞
发布博客于 1 年前

GPS从入门到放弃(十八) --- 多路径效应

GPS从入门到放弃(十八) — 精密星历在目前的GPS系统中,除了卫星播发的广播星历之外,IGS组织(International GNSS Service)还提供精度更高的卫星星历,我们称之为精密星历。精密星历可以用于更高精度的定位需求,达到厘米级。当然可能会有相应的延时,实时定位精度可能会差一些。各大IGS分析中心(MIT、SIO、GFZ等)都会生产自己的精密产品如精密星历、精密钟差等,而...
原创
1013阅读
0评论
0点赞
发布博客于 1 年前

GPS从入门到放弃(十七) --- 对流层延时

GPS从入门到放弃(十七) — 对流层延时对流层概念对流层(Troposphere)地球大气层靠近地面的一层。它同时是地球大气层里密度最高的一层,它蕴含了整个大气层约75%的质量,以及几乎所有的水蒸气及气溶胶。对流层的下界与地面相接,上界高度随地理纬度和季节而变化,在低纬度地区平均高度为1718公里,在中纬度地区平均为1012公里,在高维度地区平均为8~9公里,并且夏季高于冬季。卫星导航...
原创
3602阅读
0评论
11点赞
发布博客于 1 年前

GPS从入门到放弃(十六)--- 卫星时钟误差和卫星星历误差

GPS从入门到放弃(十六)— 卫星时钟误差和卫星星历误差卫星时钟误差GPS卫星时钟误差(简称卫星钟差)是指GPS卫星时钟与GPS标准时间之间的差值。尽管GPS卫星采用了高精度的原子钟来保证时钟的精度,具有比较长期的稳定性;但原子钟依然有频率偏移和老化的问题,导致它们与GPS标准时之间会存在一个差异。这个偏差是必须加以修正的。当然其他的GNSS系统如北斗也会有类似的问题,这里我们仅以GPS为例说...
原创
4353阅读
0评论
3点赞
发布博客于 1 年前

GPS从入门到放弃(十五)--- DCB差分码偏差

GPS从入门到放弃(十五)— DCB差分码偏差概念DCB(Differential Code Bias 差分码偏差)是全球卫星导航系统(GNSS)中,通过不同信号得到的观测值之间存在的系统性偏差。DCB是由卫星和接收机硬件延迟的影响造成的。一般来说接收机端的DCB可以跟接收机钟差一起解算,被接收机钟差所吸收;而卫星端的DCB在精密定位中必须得到补偿。DCB主要有两种,即相同频率不同码之间存...
原创
2976阅读
4评论
3点赞
发布博客于 1 年前

GPS从入门到放弃(十四) --- 电离层延时

GPS从入门到放弃(十四) — 电离层延时电离层概念电离层(Ionosphere)是地球大气的一个电离区域。它是受到太阳高能辐射以及宇宙线的激励而电离的大气高层。50千米以上的整个地球大气层都处于部分电离或完全电离的状态,电离层是部分电离的大气区域,完全电离的大气区域称磁层。电离层的范围从离地面约50公里开始一直伸展到约1000公里高度的地球高层大气空域。电离层的主要特性由电子密度、电子...
原创
3290阅读
6评论
7点赞
发布博客于 1 年前

GPS从入门到放弃(十三) --- 接收机自主完好性监测(RAIM)

GPS从入门到放弃(十三) — 接收机自主完好性监测(RAIM)接收机自主完好性监测(RAIM: Receiver Autonomous Integrity Monitoring)是根据用户接收机的冗余观测值监测用户定位结果的完好性,其目的是在导航过程中检测出发生故障的卫星,并保障导航定位精度。为了能进行接收机自主完好性监测,必须有冗余的观测量。一般来说,需要可见卫星数5颗以上才可进行完好性检...
原创
2407阅读
0评论
6点赞
发布博客于 1 年前

RTKLIB 中的 rtknavi 中的选项的传递过程

RTKLIB 中的 rtknavi 中的选项的传递过程最近看了一下RTKLIB的源码,追了一下其中的 rtknavi 中的选项是如何传递进去生效的。过程如下,以处理过程选项(PrcOpt:Process Options)为例。点击打开Options窗口时调用 TMainForm::BtnOptClick,从 TMainForm 的成员 PrcOpt 和 SolOpt 中 读取选项值到 TOp...
原创
808阅读
0评论
3点赞
发布博客于 1 年前

GPS从入门到放弃(十二) --- 多普勒定速

GPS从入门到放弃(十二) — 多普勒定速多普勒效应多普勒效应在我们日常生活中有很多,比如当一辆救护车迎面驶来的时候,听到声音比原来高;而车离去的时候声音的音高比原来低。这个效应是为纪念奥地利物理学家及数学家克里斯琴·约翰·多普勒(Christian Johann Doppler)而命名的,他于1842年首先提出了这一理论。据说是因为有一次一列火车从他身旁经过,他发现火车从远而近时汽笛声变响...
原创
1639阅读
4评论
1点赞
发布博客于 2 年前

GPS从入门到放弃(十一) --- 差分GPS

GPS从入门到放弃(十一) — 差分GPS原理差分GPS是一种通过消除或减小GPS测量误差从而提高GPS定位精度的方法。差分GPS消除或减小测量误差的基础原理是利用误差的相关性。以卫星时钟误差举例来说。如果我们已知一个接收机的实际精确位置,与它的测量得到的位置相减,即可得到误差项,这个误差项里就包含了卫星时钟误差。如果另一个接收机也在附近接收同样的卫星信号来定位,它就可以在计算时把这个误差项...
原创
2451阅读
0评论
2点赞
发布博客于 2 年前

BINEX格式介绍

BINEX格式介绍概述BINEX是"BINary EXchange"的缩写,是常用的一种数据交换格式,在GNSS研究中用得很多。BINEX被设计用来封装任意ASCII码形式的交换数据,比如 RINEX、IONEX、SP3、SINEX等。它有一些设计原则:任意两个BINEX文件必须可以用cat命令连接生成一个新的合法的BINEX文件每个BINEX文件由一条或多条BINEX记录组成每条B...
原创
1022阅读
1评论
0点赞
发布博客于 2 年前

GPS从入门到放弃(十) --- 定位方程解算和定位精度

GPS从入门到放弃(十) — 定位方程解算和定位精度上一篇伪距与载波相位中我们介绍了伪距的计算方法,也得到了包含 (x, y, z, δt)(x,\ y,\ z,\ \delta_t)(x, y, z, δt​) 四个未知数的GPS定位基本方程:(x−xs)2+(y−ys)2+(z−zs)2+c⋅δt=ρ−cI−cT−cϵ \sqrt...
原创
4987阅读
13评论
14点赞
发布博客于 2 年前

GPS从入门到放弃(九) --- 伪距与载波相位

GPS从入门到放弃(九) — 伪距与载波相位在第一篇GPS基础原理讲过GPS的基本原理,要实现定位,需要知道卫星的位置和卫星到接收机的距离。卫星位置我们根据导航电文可以推算出来(参考GPS卫星位置解算),剩下的就是距离了。GPS接收机对每颗卫星都可以产生两个基本距离测量值:伪距和载波相位,下面先分别说,再结合起来说。伪距(Pseudo Range)伪距就是接收机到卫星之间的大概距离。之所以...
原创
6015阅读
11评论
19点赞
发布博客于 2 年前

GPS从入门到放弃(八) --- GPS卫星速度解算

GPS从入门到放弃(八) — GPS卫星速度解算在阅读这一篇强烈建议先阅读GPS卫星位置解算。为了计算卫星速度,需要对卫星的位置求导。计算各参变量对时间的导数如下:M˙k=n\dot{M}_k = nM˙k​=nE˙k=M˙k1−ecos⁡Ek\dot{E}_k = \frac{\dot{M}_k}{1-e\cos E_k}E˙k​=1−ecosEk​M˙k​​ν˙k=1−e2E˙k1...
原创
2891阅读
0评论
5点赞
发布博客于 2 年前

GPS从入门到放弃(六) --- 开普勒轨道参数

GPS从入门到放弃(六) — 开普勒轨道参数开普勒轨道参数是用于描述卫星轨道的,GPS卫星的无摄椭圆轨道运动就是用开普勒轨道参数来描述。参考GPS导航电文,电文中的星历和历书都是用开普勒轨道参数来描述的。一套开普勒轨道参数包含6个参数:轨道升交点赤经、轨道倾角、近地点角距、长半径、偏心率和真近点角。轨道升交点赤经 Ω0\Omega_0Ω0​ (Longitude of Ascending ...
原创
3371阅读
0评论
9点赞
发布博客于 2 年前

GPS从入门到放弃(七) --- GPS卫星位置解算

GPS从入门到放弃(七) — GPS卫星位置解算上一篇讲了开普勒轨道参数,根据这些参数就可以确定卫星的位置,这一篇我们来实际计算一下。WGS-84基本参数首先给出几个WGS-84坐标系中的基本参数:a=6378137[m]a = 6378137[m]a=6378137[m] # 基准椭球体长半径f=1/298.257223563f = 1/298.257223563f=1/298.25...
原创
6802阅读
23评论
30点赞
发布博客于 2 年前

GPS从入门到放弃(五) --- GPS导航电文

GPS从入门到放弃(五) — GPS导航电文GPS的导航电文以帧的形式编排为比特流,每一帧为1500比特,这1500比特又分为5个子帧,每个子帧为300比特。每一子帧又分为10个字,每个字30为比特。发送时MSB在前。每一比特发送需要20ms,所以发送一帧需要30s。每周开始的时候(周六半夜12点/周日凌晨0点),不管之前数据发到哪个子帧,从第一子帧重新开始发;第四、五子帧从第一页开始发。对...
原创
4818阅读
0评论
10点赞
发布博客于 2 年前

GPS从入门到放弃(四) --- GPS信号结构

GPS从入门到放弃(四) — GPS信号结构GPS信号结构可以分为三层:载波伪码数据码载波载波是三层里的基础,伪码和数据码都是调制在载波上才能发送。GPS有两个载波频率,L1和L2,L1为1575.42MHz,L2为1227.60MHz。我们常用的主要是L1载波。根据频率,我们可以算出L1载波的波长:λ=cf=2.99792458×1081575.42×106≈0.190[m]\...
原创
3657阅读
0评论
6点赞
发布博客于 2 年前

GPS从入门到放弃(三) --- GPS坐标系

GPS从入门到放弃(三) — GPS坐标系定位就需要坐标,坐标当然是相对坐标系而言的,我们描述一个物体的位置,首先就需要建立坐标系。按大类来分,坐标系可以分为惯性坐标系和非惯性坐标系。惯性坐标系是在空间静止或者做匀速直线运动的坐标系,其他都是非惯性坐标系。GPS涉及到的坐标系大体有五个,在说这五大坐标系之前,我们需要先了解一些基本概念。基本概念地极:(Polar)地球自转轴与地球表面的...
原创
3763阅读
3评论
13点赞
发布博客于 2 年前

GPS从入门到放弃(二) --- GPS时间

GPS从入门到放弃(二) — GPS时间上一篇GPS基础原理中提到了一个钟差的概念,并没有细说。GPS涉及到的时间有不少,这一篇就详细讲一讲。时间是一个相对的概念,最简单的例子:你的手表的时间和我的手表的时间可能是不一样的,那不一样就会有问题,我说的8点上班和你认为的8点上班就不是同一个时刻了,于是你上班就可能会迟到。同理,GPS卫星的时间和接收机的时间也不一样,于是在利用时间来算距离的时候就...
原创
2795阅读
0评论
22点赞
发布博客于 2 年前

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。整个GPS系统分三大部分:地面站卫星接收机地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...
原创
5170阅读
4评论
26点赞
发布博客于 2 年前

Code Complete 代码大全 第二版

Code Complete 代码大全第二版,经典不容错过。每次重读都有新的体会,适合所有的程序员及软件项目管理人员一读。
pdf
发布资源于 5 年前

排序算法-5-鸡尾酒排序

鸡尾酒排序其实就是双向冒泡排序,它是冒泡排序的一种变形。 冒泡排序是不断往一个方法冒泡,鸡尾酒排序则是先向一个方向,然后向另一个方向,来回冒泡。 不多废话了,直接上代码:/* cocktail_sort * Principle: bidirection bubble sort. * swap the biggest element to the last,
原创
852阅读
0评论
0点赞
发布博客于 7 年前

排序算法-3-冒泡排序

冒泡排序是一种相当流行的容易想到的排序算法。它的原理是通过不断交换相邻的两个元素让小的元素越来越靠前,大的元素越来越靠后,就像轻的气泡往上浮一样。 要注意它与选择排序的区别,两者都会在内循环中把最小的元素找出来,但冒泡是通过不断交换相邻的元素,而选择是选出最小的然后跟最前面的交换;冒泡一次内循环之后除了找出来最小的元素以外,后面的元素也有可能变化,会消除一些逆序,而选择不会改变除了最小元
原创
468阅读
0评论
0点赞
发布博客于 7 年前

排序算法-4-归并排序

归并排序,是用分治法的一个典型的例子。把一个数组分成两个,分别排序那两个子数组,然后归并成一个数组,其技巧在于归并的过程。用代码实现如下:#include #include #define SIZE_ARRAY_1 5#define SIZE_ARRAY_2 6#define SIZE_ARRAY_3 20void merge_sort(int a[], int p, in
原创
418阅读
0评论
0点赞
发布博客于 8 年前

排序算法-2-选择排序

继续说排序。 这次说一个选择排序,也是非常容易想到的排序方法:每次选出最小的一个,放在最前面,然后在剩下的里面再选一个最小的,放在第二位,如此下去直到剩最后一个为止。用代码实现如下:#include #include #define SIZE_ARRAY_1 5#define SIZE_ARRAY_2 6#define SIZE_ARRAY_3 20void se
原创
455阅读
0评论
0点赞
发布博客于 8 年前

排序算法-1-插入排序

排序毫无疑问是算法中最基本的问题,插入排序更是其中常用的一种类型。 插入排序的思路非常容易理解,就像打扑克牌时一张一张摸牌,然后把牌从小到大排列在手里。手里的牌总是排好序的,每摸一张牌,就从大到小去比较,直到找到合适的位置把摸到的牌放进去。用代码实现如下:#include #include #define SIZE_ARRAY_1 5#define SIZE_ARRAY
原创
490阅读
0评论
0点赞
发布博客于 8 年前

最大的子序列和问题

最大的子序列和问题是一个很经典的问题,各种考试面试中也经常碰到。这问题的解决不难,关键是通过这个问题体会一些算法的思路,学习思考怎么解决问题。 问题是这样的:给定整数A1,A2,...,An(正负不限),Ai,...,Aj(1 最直接也最容易想到的办法(当然也就是最暴力的方法),就是求出所有子序列的和,然后找出最大的。按照这个思路写出的C++代码如下:int Method1
原创
469阅读
0评论
0点赞
发布博客于 8 年前

重温数据结构和算法

大学就学过数据结构和算法,然而一晃毕业多年,虽然一直做软件方面的工作,却很少用到算法,偶尔用到也是网上搜索一下完事,没有深钻。如今越来越觉得思维退化,反应下降,于是开始思索这个问题。    Pascal之父Nicklaus Wirth在多年前就提出了:程序=算法+数据结构。可见作为一名程序员,对算法和数据结构的理解和掌握应该是必备的内功心法之一。现在编程语言越来越高级,封装越来越好,程序员的进
原创
455阅读
0评论
0点赞
发布博客于 8 年前

代码大全学习-35-个人性格(Personal Character)

凡事俱在人为,程序员也是人,人的性格会对程序员的工作产生不同的影响。 很多人认为聪明是程序员的一大优势,其实不然,往往是聪明反被聪明误。因为现代软件的复杂性,再聪明的程序员也无法在脑子里同时理清所有的问题,所以真正牛X的程序员是那些认识到了自己的脑子容量有限,而采取了对应措施的人,比如降低软件复杂性。这也就是说好的程序员要谦虚,认识到自己的不足,这样才能进步,这道理在哪里都是一样有效。
原创
1247阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-34-自注释的代码(Self-Documenting Code)

说到注释,总是有争论要不要注释,有人喜欢尽可能多的注释,有人根本不写注释。作者的意见是适当的注释是需要的,但不要重复代码,不好的注释还不如不注释。总结性的,描述意图的注释是好的注释,它会告诉读者代码所没有提供的信息,是我们的目标。而另一大目标就是写出自注释的代码,无比清晰,根本不需要注释。这样可以大大节省读注释的时间,分析注释与代码是否一致的时间,从而提高效率。 具体的方法有很多,篇
原创
2093阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-33-布局和风格(Layout and Style)

说到布局和风格,首先要阐明的一点就是代码是写给人看的。自然,代码写出来是要给计算机去运行,但在编译器如此发达的现在,这个不是问题。问题是代码还要给人看,被人维护和修改的。一份代码被读的时间要远远超过它被写出来的时间。所以,可读性可维护性是写代码时必须要注意的,布局和风格就是讲怎样布局,采用什么样的风格使得代码更易读,更易理解。 用好的布局和风格写出来的代码视觉效果很好,可以很好的展示程序
原创
526阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-32-编程工具(Programming Tools)

编程工具多种多样,有很多是可以很好的提高效率的。一一介绍觉得没有必要,这里只是附上一个checklist,可以提个醒,看看有哪些是可以用而忘了用的。另外就是没有合适的工具时,别忘了考虑自己写个工具来用。Checklist: Programming ToolsDo you have an effective IDE?Does your IDE support outline view
原创
419阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-31-系统集成(Integration)

集成是把各个分散的软件部分合并成一个统一的系统的过程。好的集成方法能带来很多好处,比如便于诊断错误,提高代码质量,更可靠的预测,更好的用户关系,更高的士气等等;而坏的集成方法可能导致最后系统无法完成。 集成的方法可分为两大类,一类是先把所有的部分都准备好,然后一起集成;另一类是增量集成,也就是先搭个架子,然后一部分一部分往上加。第一类的问题在于一下子引入了太多的耦合,关系太复杂,出了问题
原创
491阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-30-构建管理(Managing Construction)

构建的管理基本可以分为代码的管理、配置的管理、进度的管理、质量的管理和人的管理。 代码的管理核心就是鼓励写出好的代码,不管用什么样的方式。可以制定代码标准,用版本控制的工具,可以用各种技巧比如结对编程,审阅,张贴好的代码示例等等。 配置的管理就是对变化的管理。各种各样的变化,需求的,设计的,代码的等等,怎么让它们的影响最小,保证项目可持续完工。方法很多,详细的可参考下面的che
原创
469阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-29-项目大小对软件开发的影响(How Program Size Affects Construction)

这一章内容很少,要说的核心就是一点:项目大小对软件开发的影响不是成比例的,写一个20K行的程序所花的时间远不止写一个2K的程序所花时间的10倍。项目越大,沟通成本越高,缺陷率越高,生产率越低,构建所占的时间比例越小,架构设计、系统测试等占的时间越多,文档化工作越多。
原创
357阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-28-代码调整策略和技巧(Code-Tuning Stategies and Techniques)

前面讲了重构,重构的目标是改善代码的可读性可维护性。这里讲的代码调整针对的主要目标是软件的性能。很多情况下,性能和可读性可维护性是相互矛盾的指标,所以在做代码调整之前,一定要想好它真的是需要的吗?提高软件的性能有很多种方法,列在下面的checklist中,代码调整是其他的方法都不行了才不得不用的方法。总之,慎用!Checklist: Code-Tuning StrategiesOvera
原创
730阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-27-重构(Refactoring)

重构是改变软件的内在结构从而让其更好理解更容易修改。在软件开发过程中随处可见它的身影。很多地方都可以用重构来改善,比如重复的代码,太长的函数,嵌套很深的循环等,下面是一个比较完整的list,需要重构的原因:Checklist: Reasons to RefactorCode is duplicatedA routine is too longA loop is too lon
原创
613阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-26-调试除错(Debugging)

调试,号称是软件开发过程中最耗时的工作,无数的开发人员在上面花费了无数的时间。毫无疑问,想办法提高调试的效率是非常有用的。那么关键在哪里呢?就是要用科学的方法。 相信所有的开发人员都有这样的经历:要改正一个缺陷,试试改掉这一句行不行,再试试改掉那一句行不行,试来试去,越改越多,最后自己都迷糊了,不知道改了些什么。也许一下子可以了,也许还是不行,还是不知道为什么行或者不行。这个过程会花费很
原创
905阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-25-开发人员测试(Developer Testing)

开发人员测试不同于测试人员测试,前者是白盒测试,后者是黑盒测试。开发人员测试主要包括单元测试,组件测试,集成测试等。不管哪一种,测试的目的都是为了发现缺陷。所以,既然测试,首先就要认为一定会发现缺陷,若是总想着找不到缺陷,就会真的找不到缺陷。测试这件事,要从一开始就考虑,像测试用例,早晚都是要写的,不如先写,想用就能用,还能更早发现需求是否有问题。 作者在书中通过一个例子详细的列出了各种
原创
1262阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-24-合作开发(Collaborative Construction)

这一章介绍了合作开发的一些常用方法。所有的合作开发都基于这样一个前提,即任何开发人员都有自己的盲点,大家的盲点不一样,所以合作起来就可以减少盲点,也就减少了开发缺陷出现的几率。合作开发的方法有很多,结对编程,正式审查(Formal Inspections),非正式审阅,读代码,读文档,几个人讨论等等,形式多样,不必拘泥。作者在书中重点讲了前面两种。 结对编程相信大家就算没用过也至少有所耳
原创
481阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-23-软件质量概述(The software-Quality Landscape)

软件质量可以分为两类,外部的和内部的。外部的软件质量是对用户来说的,包括正确,易用,高效,可靠,完整,适应各种环境,准确,健壮。内部的软件质量是用户不关心,只有程序员才关心的,包括可维护性,灵活性,可移植性,可重用性,可读性,可测试性,可理解性。当然,程序员不仅关心内部的质量,同时也关心外部的质量,而这内外的区分有时候也不是那么明显,因为内部质量可能会影响到外部质量。要注意的是列出来的这些指标有些
原创
772阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-22-常见的控制问题(General Control Issues)

这一章类似于这一部分的一个总结。阐述了控制流程中常见的问题。比如布尔表达式,深层的嵌套等。 布尔变量和布尔表达式是我们程序控制中不可或缺的组成部分。处理好它们,程序的控制流程会清晰明了,可读性,易用性都大大增加。具体说来,有下面这些值得注意: 用true和false,不要用1和0.用if(a>b),不要用if((a>b)=true)。 简化复杂的布尔表达式。可以增加
原创
480阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-21-表驱动方法(Table-Driven Methods)

表驱动方法是编程中很常用的一种方法。它的主要用途是简化复杂的逻辑判断,使程序简洁易懂,可读性,可维护性都大大提高。 用表的时候最主要考虑的是如何去访问表,一般来说,可以专门写一个函数来访问表,这样即使以后要改,也很方便。访问表的方法包括直接访问,索引访问,阶梯式访问等等。 直接访问是最简单最常用的方法。把需要处理的情况都列在一个表中,哪种情况来了,直接调用就好了。复杂一点的情况
原创
715阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-20-不常见的控制结构(Unusual Control Structures)

所谓不常见的控制结构,其实也不是那么不常见,只是相对顺序结构,条件结构,循环结构而言。主要有三种:多重返回,递归,goto。一个一个说。 多重返回其实还是蛮常见的,就是一个函数里有多个return语句。其目的主要是增强可读性。比如有时候一些错误处理检查条件嵌套太深,不如不满足条件就马上返回。还有一个好处是可以提高效率,比如有些函数得到结果了就可以马上返回,后面那些其他的情况都不用再处理。
原创
622阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-19-控制循环(Controlling Loops)

循环是相对来说复杂一些的控制结构。大体来说分为两类:For循环和While循环。像foreach之类的可以归到for类里,do-while之类的可以归到while循环类里。如何选择呢?一般来说,知道循环的次数,用for,否则用while。For循环相对来说比较简单些,所以尽量用它。 选好了之后,说说如何用。第一原则,简单!能写多简单就写多简单。简单才不容易出错,才易读,易维护。有了第一原
原创
1384阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-18-使用条件语句(Using Conditionals)

这一章依然比较简单。条件语句主要有两类,if-else,和switch-case。 总体的原则都是要提高可读性,降低犯错率,提高效率等。 对于if-else语句来说,要注意的有这么几条:一、先写正常情况下会发生的条件,这样读的人一看就知道正常情况下会怎么样,可以很容易的知道这段代码的功能,同时执行效率也会提高,因为正常的情况会是最可能发生的情况。二、把正常的情况放在if后面而不
原创
923阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-17-组织顺序排列的代码(Organizing Straight-Line Code)

从这一章开始学习语句(statement)级别的一些方法,注意事项。 这一章的内容相对来说很简单,以至于很少有书会专门提到这些。然而归纳总结一下还是能有所提高。 组织顺序排列的代码,核心问题就是一个,如何处理好各行语句之间的依赖关系。 如果依赖关系存在,必须要按某个顺序来组织语句,就要想办法让这种依赖关系表现得很明显,比如调整顺序,用合适的函数名,用合适的参数名等等。
原创
617阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-16-不常见的数据类型(Unusual Data Types)

所谓不常见的数据类型,就是在现代的面向对象的编程中不提倡从而不常见的类型。主要有三种:结构体(structure), 指针(pointer), 和全局变量。 结构体相对来说还是比较简单,它可以看做是只有公有成员变量的类。其主要用途就是把相关联的数据组织到一起,可以把大堆的数据分组;可以简化对一大块数据的操作,比如复制,交换;可以简化参数列表;从而简化了维护的工作。当然,也可以考虑用类来实
原创
612阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-15-基础数据类型(Fundamental Data Types)

这一章没什么好说的,需要注意的checklist里都列出来了,用的时候一条一条对着看就行了。Checklist: Fundamental Data TypesNumbers in General Does the code avoid magic numbers? Does the code anticipate divide-by-zero errors? Are
原创
322阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-14-变量名的力量(Power of Variables Names)

这一章对变量名的讲述是相当的具体,作为一本手册真是名符其实。我不想在这里再重复那些具体详细的方法,可以去翻书,或者按照后面附上的checklist一条一条去检查。这里主要讲讲为什么要有那么多方法。 原因就是增强程序的可读性,从而降低程序的复杂性。所有的总总方法都围绕这一目的展开。像变量名要能准确完整的描述这个变量表示的内容,要描述它是什么(what),而不是怎么做(how),越具体越好,
原创
989阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-13-如何使用变量(General Issue in Using Variables)

从这一章开始,将讲述变量有关的内容。这里所说的变量是广义的,包括系统自带的类型像整数,数组等,也包括各种自定义的对象。 这一章讲的是一些基本的用法,定义,初始化,生存范围,绑定时间等。 定义要注意的是一定要显式定义,有些语言支持隐式定义,像VB,最好不用,可能出错。 初始化是最容易出错的地方,有一些规则可以尽量减少出错的概率。一、定义的时候初始化。二、第一次使用之前初
原创
565阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-12-伪码编程(The Pseudocode Programming Process)

伪码编程的概念相信大家都知道,就是用伪代码,也就是描述性的语句来表示一个程序的实现过程。遗憾的是,包括我自己在内,用的人不多,就算是用,用得也不好。看完这一章之后觉得,以后还是要好好用这个工具。 伪码编程有很多好处,首先,它是用类似于自然语言的陈述,有利于我们理清思路,到底这个类,这个函数要干什么,怎样做。伪码不要用程序语言的语法,尽量要用自然语言,这样可以把它翻译成任何程序语言。伪码的
原创
1036阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-11-防御式编程(Defensive Programming)

防御式编程,顾名思义,就是保护自己不受其他人错误的影响,防御那些意料之外的错误。比如对一个函数来说,即使它被传递了一个错误的数据,它还是可以继续正常工作,哪怕这个错误数据是其它函数的错,好的程序永远不会输出垃圾信息。防御式编程帮助我们更容易发现错误,改正错误,当然,最好是一开始就不要引入错误,也就是可以利用一些方法,规则尽可能减少错误的产生。好了,下面说方法。 首先,要抵御外来的侵略,也
原创
978阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-10-高质量的函数(High-Quality Routines)

讲完了高质量的类,第七章就接着讲了高质量的函数。 要创建函数的原因像创建类的原因一样有很多:降低复杂性;引入便于理解的抽象;避免重复的代码;支持子类;隐藏顺序执行的过程;隐藏指针操作;增加可移植性;简化复杂的布尔逻辑;提高性能等等,最核心的也还是降低复杂性。有时候我们不要因为一个函数只有一行代码就不去创建它,有可能这一行代码会在很多地方重复使用,而万一哪一天你要改它,一个杯具就此产生。
原创
563阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-9-实现

接口设计好了,实现也不能含糊。下面就来讲实现相关的问题,包含,继承,成员变量和成员函数,构造函数等。 先说包含与继承。包含是“有”(has a)的关系,继承是“是”(is a)的关系。这还是很好区分的。包含也可以通过私有继承来实现,但这种方式应该是实在不得已才为之的,因为这样做会破坏封装,增加复杂性,不提倡。无论是包含还是继承,都要注意一个著名的数字7±2。这个数字号称是一个人能同时记住
原创
358阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-8-创建高质量的类

第六章是讲如何创建高质量的类。首先作者介绍了一下抽象数据类型ADT(Abstract Data Type)。一个ADT就是一些数据和对这些数据的操作的一个集合。在面向对象的程序语言中,可以用一个类来实现。当然,类比ADT多一些东西,像继承,多态等。面向对象的语言也会自动支持多个实例,用起来很方便。若是非面向对象的语言,那么实现ADT就要多考虑一下了。若是有多个实例,可能要在ADT的操作中增加一个I
原创
263阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-7-设计的实践

前面一节的启发主要专注于设计的属性,也就是最终的设计是什么样的,这一节的启发则专注于设计的实践,即通过怎样的步骤可以得到好的结果。同样是启发式,所以也有各种各样的方法。 1、迭代。一般来说第二次的设计都会比第一次的好,而且我们会从每一次设计中学到东西,从而提高整体的设计水平。 2、分而治之,各个击破(Divide and Conquer)。人脑的容量,处理能力都有限,对于大的问
原创
1175阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-6-启发式设计

各种启发式设计的方法:1、寻找真实世界中的对象 主要包括下面几个步骤: 确定对象以及它们的属性,包括方法和数据; 确定每个对象是干什么的; 确定每个对象可以对其他的对象做什么; 确定每个对象的哪些部分是公开的; 确定每个对象的接口。 这几个步骤不一定按这个顺序,可能是反复确认。2、形成一致的抽象(Form consist
原创
788阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-5-构建中的设计

第五章是讲构建中的设计 (Design in construction)。 第一节介绍了设计中面临的一些挑战。设计是一个"wicked"的问题,就是需要通过解决或者部分解决才能定义清楚的问题。作者特别举了Tacoma Narrows大桥的例子来说明,不等到这个桥被建好,并被风吹倒,设计者根本不会知道设计的时候还要考虑风的影响。设计也是一个"Sloopy"的过程,过程中会犯错,一个好的方案
原创
256阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-4-关键决定

第四章主要讲了在创建过程中关键的几个决定。 第一,选择编程语言。高级语言会带来更高的生产率和质量。不同的语言在表达概念方面有不同的特点,而Sapir-Whorf假说认为,人必须知道要表达的思想的词汇才能想到要表达的思想;如果不知道那些词汇,人就不能表达那个思想,甚至根本不会产生那个思想。所以多学几门编程语言没啥坏处,可以提供更广阔的视野,激发更多的好想法。 第二,编程约定。这一
原创
255阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-3-充分准备,降低风险

花了几天时间看完了第三章。从这一章用木匠的这条谚语——Measure Twice, Cut Once——作为标题,可以看出这一章的核心内容就是讲要做好充分的准备。而准备的终极目标就是降低风险。 首先当然是解释为什么。我相信有过软件开发经验的人都已经不再对此怀有疑问。作者在书中还是很认真地从逻辑,类比,以及用数据作出了解释。对此结论没有疑问的,可以略过。 有用的在后面,当我们忘了
原创
243阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-2-软件创建

看完了前两章。第一章主要在讲什么是软件创建(Construction)。第二章着重在讲如何通过一些比喻更好地理解软件开发。下面详细说。 软件开发主要包括的方面:1. 问题定义(Problem definition)2. 需求分析(Requirements development)3. 创建计划(Contruction planning)4. 总体设计(Softwa
原创
282阅读
0评论
0点赞
发布博客于 9 年前

代码大全学习-1-开始

所有的人都说这本书是一部经典,本着读书先读经典的原则,我优先选择了这本书作为构建知识体系的第一步。 按作者所说,这本书会缩小理论与实践的距离,很多问题理论上都已解决,只需要我们把它应用到实践中。 这本书是一个手册或者指南,能帮助我们创造高质量的软件,更快更好的完成工作,它提供了在软件开发过程中可能会遇到的各种问题的解决方法,以及若想深入研究的更多参考资料。 这本书甚至
原创
330阅读
0评论
0点赞
发布博客于 9 年前

建立自己的知识体系

作为一名程序员,长期以来我一直在思考究竟什么才是最重要的。最近终于有所感悟,觉得知识体系应该是最核心最本质的东西。    为了说清楚这个问题,用武侠小说里的武功来做个对比。绝世高手,一代宗师就是已经形成了自己的知识体系。而要练成绝世高手,必须要内外兼修。内就是内功,武侠里所说的内力,对应于基础原理性的东西,像编译原理,操作系统原理,数据结构,设计原则等等。外就是各种招式,比如各种各样的武林门派
原创
315阅读
0评论
1点赞
发布博客于 9 年前

博客开通

第一篇博客。记录一下初衷,免得时间长了忘了。都说好记性不如烂笔头,开通此博的主要目的是记录和分享一些自己学习的过程、收获、心得体会等等,留作以后自己回顾或给大家参考。Over!
原创
232阅读
1评论
0点赞
发布博客于 9 年前