Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

科学研究中阅读论文的方法

发表于 2018-12-20 | 更新于 2020-02-28

在科学研究的过程中,选题十分重要。因此在初步确定好选题方向后,应对该选题方向进行调研。调研的主要工作就是寻找该方向的论文,进行阅读、分析、总结,了解该方向的过去和现在,并预测未来可能的发展方向。对于刚上研究生的同学,该采用什么样的方法来整理选题方向上的论文,使之符合逻辑,并且条理清晰呢?偶尔拜读了Flood Sung写的文章”深度学习论文阅读路线图“,觉得深受启发,将其所提出的深度学习论文阅读路线图构建原则记录备忘一下。

路线图的构建原则

有以下四个原则:

  • 从整体到局部。即从Survey的文章,影响大局的文章到具体子问题子领域的文章。
  • 从过去到最前沿。即每个topic的文章是按照时间顺序排列的,这样大家就可以清楚的看到这个方向的研究发展脉络。
  • 从通用到应用。即有些深度学习的文章是面向深度学习通用理论,比如Resnet,可以用在任意的神经网络中,而有些文章则是具体应用,比如Image Caption。
  • 面向最前沿。收集的文章会有很多是最新的,甚至就是几天前出来的,这样能保证路线图是最新的。

每一种topic只选择最有代表性的几篇文章,比如深度增强学习(Deep Reinforcement Learning),这个领域现在有几十篇文章,但只选择几篇,要深入了解甚至做为自己的研究方向,还需要进一步的阅读该领域的文章。

参考链接

  1. 深度学习论文阅读路线图 Deep Learning Papers Reading Roadmap,by Flood Sung.
  2. Deep Learning Papers Reading Roadmap,by Flood Sung.
  3. 【How to read a paper】如何读论文,by 乾龙_Heron.

系统仿真中一些问题的思考

发表于 2018-12-18

系统仿真(system simulation)就是根据系统分析的目的,在分析系统各要素性质及其相互关系的基础上,建立能描述系统结构或行为过程的、且具有一定逻辑关系或数量关系的仿真模型,据此进行试验或定量分析,以获得正确决策所需的各种信息。

系统仿真与仿真游戏的区别

系统仿真与仿真游戏本质上没有区别,都是计算机程序对现实的模拟,所不同的是各自对仿真保真度(Simulation Fidelity)的要求不同。

仿真保真度(Simulation Fidelity)用于描述仿真精度,模拟真实对应物有多近似:

  • 低保真:对系统的最小模拟,接受输入产生输出
  • 中等保真:对刺激能自动响应,有限精度
  • 高保真:接近不可辨识或者尽可能地接近真实系统

通常系统仿真对仿真保真度的要求比仿真游戏要高。

计算步长与采样周期

采用计算机进行数值模拟或系统仿真时,经常需要采用数值解法求解模型方程。系统模型一般采用微分方程描述(也有其它形式),采用数值方法求解,就是采用迭代法逐步逼近。

计算步长

积分与微分是互逆。对一个曲线(包括直线)方程求积分,其实就是求曲线与横轴围成的面积。该面积可以用一系列间隔很小的面积块相加得到。这些小间隔的宽度就是计算步长。显然,纯粹从精度的角度考虑,步长越小越精确,因为近似面积更接近实际图形面积。

采样周期

采样周期是对一个实际信号测量时,相邻两次测量之间的时间间隔。有时候,采样周期和计算步长相似,但采样周期要考虑实际限制,且是时间单位,而计算步长不一定是时间单位,且相对自由些。两者在数值上没必然联系。对于同一问题,且都是时间量纲的话,采样周期大于等于计算步长,前者是后者的整数倍。

系统仿真包含系统模型求解,也就是在每个采样周期内,要解出模型方程。控制系统仿真时在采样周期内要解出两个模型方程:控制器模型和系统模型。

一个采样周期内可对系统模型迭代求解一次或多次。

计算步长和采样周期大小的选择

关于采样周期和计算步长的选择,一般考虑以下因素:

  • 从求解精度考虑,越小越好。

  • 从计算量考虑,越大越好。

采样周期与每秒帧数(Frames Per Second,FPS)

采样周期以秒为单位,则

$$FPS=\frac{1}{采样周期}$$

FPS是指每秒画面重绘的次数,用于衡量画面切换速度。FPS越大,则动画效果越平滑,当FPS小于20时,一般就能明显感受到画面的卡滞现象。

当FPS足够大(比如达到60),再增加帧数人眼也不会感受到明显的变化,反而相应地就要消耗更多资源(比如电影的胶片就需要更长了,或是电脑刷新画面需要消耗计算资源等等)。因此,选择一个适中的FPS即可。

NTSC标准的电视FPS是30,PAL标准的电视FPS是25,电影的FPS标准为24。

WebGL动画

WebGL是一种JavaScript API,用于在不使用插件的情况下在任何兼容的网页浏览器中呈现交互式2D和3D图形。但要产生WebGL动画,需要对运动的场景不停的采样,即不停地拍照。JavaScript的采样函数主要有setInterval方法和requestAnimationFrame方法。

setInterval方法

如果要设置特定的FPS(虽然严格来说,即使使用这种方法,JavaScript也不能保证帧数精确性),可以使用JavaScript DOM定义的方法:

1
setInterval(fn,mesc)

其中,fn是每过msec毫秒执行的函数,如果将fn定义为重绘画面的函数,就能实现动画效果。setInterval函数返回一个变量timer,如果需要停止重绘,需要使用clearInterval方法,并传入该变量timer。

requestAnimationFrame方法

大多数时候,我们并不在意多久重绘一次,这时候就适合用requestAnimationFrame方法了。它告诉浏览器在合适的时候调用指定函数,通常可能达到60FPS。

  • requestAnimationFrame同样有对应的cancelAnimationFrame取消动画
  • 和setInterval不同的是,由于requestAnimationFrame只请求一帧画面,因此,除了在init函数中需要调用,在被其调用的函数中需要再次调用requestAnimationFrame

使用stat.js记录FPS

stat.js是Three.js的作者Mr.Doob的另一个有用的JavaScript库。很多情况下,我们希望知道实时的FPS信息,从而更好地监测动画效果。这时候,stat.js就能提供一个很好的帮助,它占据屏幕中的一小块位置(如左上角),显示实时的FPS信息。

在HTML中引用stat.js:

1
<script type="text/javascript" src="//mrdoob.github.io/stats.js/build/stats.min.js"></script>

再使用如下代码监视实时FPS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var stats = new Stats();
stats.showPanel( 1 ); // 0: fps, 1: ms, 2: mb, 3+: custom
document.body.appendChild( stats.dom );

function animate() {

stats.begin();

// monitored code goes here

stats.end();

requestAnimationFrame( animate );

}

requestAnimationFrame( animate );

参考链接

  1. 计算步长和采样周期,by 王永林.
  2. 离散和连续模拟之间的实际区别是什么?,by UF Game.
  3. 系统仿真,by 百度百科.
  4. 开源的物理引擎,by M. Jones.
  5. 数值分析,by wikipedia.
  6. three.js 入门详解(二),by Levi.
  7. WebGL,by wikipedia.
  8. stats.js, by mydoob.
  9. 详解JavaScript中的Event Loop(事件循环)机制,by 暮雨清秋.

撰写学术论文的思考

发表于 2018-12-17 | 更新于 2019-01-17

迫于学业和工作的压力,撰写了不少的学术论文。但是并没有对如何撰写学术论文进行思考。看到清华大学的肖寒
博士在某个问题下的回答后,感觉茅塞顿开:

不过,一般注水的作者相对而言都是新手,因为比较有经验的研究者都知道:“论文的一切都在于贡献,不在于结果”

你的结果只是一个说明你贡献的例证,多那么点少那么点,大家看了毫无区别。你注水除了恶心我们这些后来实验的人,就没什么别的用处了。有那些疯狂调参和使劲弄技巧的时间,真不如拿来整理好你自己的思路,把论文的论述过程做到有理有据!因为 80.2 和 80.3 正常人都没法记住其间区别,但你循循善诱的精致论述会让所有人印象深刻。我希望新手不要本末倒置!

论文重在贡献,迫于学业和工作的压力造的注水论文实在无趣!

参考链接

  1. 看图说话的AI小朋友——图像标注趣谈(下), by 杜客.
  2. 从标题到写作流程:写好一篇论文的十条基本原则,by 机器之心.

node-gyp使用帮助

发表于 2018-12-16 | 更新于 2019-09-26

node-gyp是为了编译nodejs addon模块而构建的跨平台命令行工具。nodejs addon模块使用c++语言编写,在源代码级别进行分发,通过node-gyp实现跨平台的编译安装。

背景知识

node-gyp源于gyp。gyp是一个用来生成项目文件的工具,刚开始设计给chromium项目使用的。它可以从平台无关的配置生成平台相关的Visual Studio、Xcode、Makefile的项目文件,然后调用 vsbuild、xcode、gcc等编译平台来编译。这就不需要花额外的时间处理每个平台不同的项目配置以及项目之间的依赖关系。

nodejs addon模块采用源代码分发,安装需要根据不同平台采用合适的编译器编译安装,这就是node-gyp项目诞生的原由。

安装过程

安装node-gyp

在上线情况下,使用如下命令安装node-gyp:

1
$ npm install -g node-gyp

安装C++编译器

根据操作系统平台的不同,需安装对应的编译器,以方便node-gyp调用。以Windows平台为例,安装VC++编译器有两种方法:

  • 直接安装

    1
    2
    3
    // 以管理员身份打开cmd或powershell

    npm install --global --production windows-build-tools
  • 手动安装

    • 安装Visual C++构建环境: 使用Visual Studio Build Tools的Visual C++ build tools工作负载或者Visual Studio 2017 Community的Desktop development with C++工作负载。
    • 安装Python 2.7,不支持python3,然后运行npm config set python python2.7
    • 在cmd中运行npm config set msvs_version 2017

手动安装Visual C++构建环境的命令如下:

1
2
3
4
5
6
7
# 使用Visual Studio Build Tools的Visual C++ build tools工作负载,确保安装win10sdk,编译nodejs源码时需要

.\vs_buildtools__2041717674.1536666005.exe --layout d:\vc2017_offline --lang zh-CN --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended

# 使用Visual Studio 2017 Community的Desktop development with C++工作负载

.\vs_community__208176120.1522073957.exe --layout e:\vs2017_offline --lang zh-CN --add Microsoft.VisualStudio.Workload.CoreEditor --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended

node-gyp编译测试

以在Win10平台编译nodejs addon模块为例,在离线情况使用如下命令测试node-gyp是否工作正常:

1
2
3
node-gyp configure --nodedir=d:\node-v8.11.3

node-gyp build

参考链接

  1. node-gyp的作用是什么?,by zhihu.
  2. node-gyp, by nodejs
  3. Windows-Build-Tools, by felixrieseberg.
  4. Vistual Studio Community 2017 30天许可证过期,by 井底一蛤蟆.

树莓派使用lirc进行红外遥控测试

发表于 2018-12-15 | 更新于 2022-06-04

在树莓派上使用lirc进行红外遥控测试的步骤比较繁琐,记录一下以备忘。

背景知识

lirc库

LIRC (Linux Infrared remote control,Linux红外线遥控)是一个开放源代码的包。这个包可以让你的Linux系统能够接收及发送红外线信号。

Microsoft Windows上有个功能相同的软件叫WinLIRC。

利用LIRC和红外线接收器,你就几乎可以用所有的红外线遥控器(例如:电视遥控器)来控制你的计算机。举例来说,你可以用遥控器来控制DVD或音乐的播放。

lirc配置文件说明

  • /etc/lirc/lircd.conf为遥控器配置文件
  • /etc/lirc/lircmd.conf为lircmd配置文件,后者可以将遥控器用作鼠标。
  • /etc/lirc/lircrc为irexec配置文件,后者可以在收到遥控器信号号运行设定的程序。

制作遥控器配置文件

使用irrecord命令制作遥控器配置文件lircd.conf。

1
2
3
4
5
# 首先停止lirc服务
sudo service lirc stop

# 制作遥控器配置文件
irrecord -d /dev/lirc0 <model>.conf

测试过程

硬件

  • 树莓派3B+
  • 红外接收器
  • 红外遥控器
  • 杜邦线

接线

红外接收器都有三个引脚:VCC、GND、Data。其中:
VCC:连接5V的引脚
GND:连接接地的引脚
Data:连接GPIO23

lirc配置

  1. 安装lirc:

    1
    sudo apt-get install lirc -y
  2. 修改/etc/modules

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.

    i2c-dev
    # 添加如下代码
    lirc_dev
    lirc_rpi gpio_in_pin=23 gpio_out_pin=22
  3. 修改/etc/lirc/lirc_options.conf

    1
    2
    3
    # 修改如下两项
    driver = default
    device = /dev/lirc0
  4. 修改/boot/config.txt
    在/boot/config.txt文件中找到#dtoverlay=lirc-rpi,将其修改如下:

    1
    dtoverlay=lirc-rpi:gpio_in_pin=23,gpio_out_pin=22
  5. 重启测试

1
2
3
4
sudo init 6
# 查看lirc是否加载成功
lsmod | grep lirc
ls /dev/lirc0

参考链接

  1. LIRC,by wikipedia.
  2. 树莓派—红外遥控设置,by 逍遥游.
  3. 配置树莓派上的lirc(Raspbian, 2016),by Cnly.
  4. 上拉电阻和下拉电阻的作用,by Mike江.
  5. 上拉电阻和下拉电阻,by imzjy.
  6. Raspberry gPIo,by sparkfun.

飞行力学中坐标系定义

发表于 2018-12-10 | 更新于 2020-01-08

建立飞机的运动学模型的前提是建立合适的坐标系,在此基础上才能定义各种参数描述飞机的状态。下面介绍常用的坐标系及常用描述飞机状态的参数。

常用坐标系

地面固定坐标轴系($AX_gY_gZ_g$)

将地球视为椭球体,则地面固定坐标轴系定义为:

以椭球面上一点为坐标系原点$A$,$Z_g$轴与椭球法线重合,向下为正,$X_g$与$Y_g$轴位于过坐标原地的椭球切平面上,按右手法则建立,$X_g$轴与椭球短半轴重合(北向),$Y_g$轴与地球椭球的长半轴重合(东向)。

在研究坐标转换关系时,常使用飞机牵连铅垂地面固定坐标系$OX_gY_gZ_g$。其原点$O$位于飞机质心,三坐标轴平行于地面固定坐标轴系$AX_gY_gZ_g$的各个轴。飞机姿态——偏航、俯仰、滚转的定义即与飞机牵连铅垂地面固定坐标系有关。

机体坐标系(体轴系$OXYZ$)

机体坐标系定义为:

原点$O$位于质心,$O_X$平行于机身轴线或对称面机翼弦线指向前方(机头方向);$O_Y$垂直于对称面指向右翼;$O_Z$在飞机对称面内,垂直于$O_X$指向下方。符合右手系建立规定。

机体坐标系

图1 飞机牵连铅垂地面固定坐标系(OXgYgZg)与体轴系(OXYZ)

航迹坐标系($OX_kY_kZ_k$)

航迹坐标系定义:

原点$O$位于飞机质心,$OX_k$沿飞机速度方向;$OZ_k$在$OX_k$所在铅垂平面内,垂直于$OX_k$指向下方;$OY_k$垂直于$OX_k$、$OZ_k$ 所在平面指向右方;符合右手系建立规定。

航迹坐标系

图2 航迹坐标系(OXkYkZk)

气流坐标轴系(风轴系$OX_aY_aZ_a$)

气流坐标轴系又称速度坐标轴系,定义为:

原点$O$位于飞机质心,$OX_a$沿飞机速度方向;$OZ_a$在飞机对称面内,垂直于$OX_a$指向下方;$OY_a$垂直于$OX_a$、$OZ_a$ 所在平面指向右方;符合右手系建立规定。

气动力三个分量(升力、阻力、侧力)是根据风轴系定义的,其中升力与阻力分别沿$OZ_a$、$OX_a$的负向。

半机体坐标系($OX_iY_iZ_i$)

半机体坐标系定义为:

原点$O$位于质心,$OX_i$沿飞机速度向飞机对称面内投影方向;$OZ_i$在飞机对称面内,垂直于$OX_i$指向下方;$OY_i$垂直于$OX_i$、$OZ_i$ 所在平面指向右方;符合右手系建立规定。

半机体坐标

图3 风轴系(OXaYaZa)与半机体坐标系(OXiYiZi)

稳定性坐标系($OX_sY_sZ_s$)

稳定性坐标系定义为:

原点$O$位于质心,$OX_s$沿未受扰动的速度在对称面内的投影方向;$OY_s$在飞机对称面内,指向右;$OZ_s$对称平面内垂直于$OX_s$向下;符合右手系建立规定。

半机体坐标

图4 稳定性坐标系(OXsYsZs)

常用飞参

  • 机体坐标系相对于飞机牵连铅垂地面固定坐标系的夹角

    • 偏航角:机体坐标系$x$轴在水平面内投影与$x_g$的夹角,以$\psi$表示
    • 俯仰角:机体坐标系$x$轴与水平面的夹角,以$\theta$表示
    • 滚转角:过机体坐标系$x$轴的铅垂面与机体坐标系$z$轴的夹角,以$\phi$表示
  • 飞行速度矢量相对于体轴系的夹角

    • 迎角:速度矢量在飞机纵向对称面内投影与机体坐标系$x$轴夹角,以$\alpha$表示
    • 侧滑角:速度矢量与飞机纵向对称面的夹角,以$\beta$表示
  • 飞行速度矢量相对于地面的夹角

    • 爬升角:速度与地面水平面夹角,以$\gamma$表示
    • 航迹方位角:速度在地面水平面的投影与$x_g$夹角,以$\chi$表示

参考链接

  1. 无人机飞控通俗演义之 纷繁复杂的飞行力学, by 量子黑洞.
  2. 一起写飞行仿真之 六自由度动力学方程, by 量子黑洞.
  3. 飞行器飞行动力学(二)坐标系与夹角们, by 萝卜.
  4. Cesium中飞行器姿态控制,by jack huang.
  5. MathJax 支持的 Latex 符号总结(希腊字母和希伯来字母),by liyuanbhu
  6. 空间中三维矢量,by tina_ttl.
  7. JSBSim学习笔记(3)—— 基本概念,by 么的聊.

Debian系统安装NVIDIA驱动支持双显卡切换

发表于 2018-12-10

购买笔记本拥有Intel集成显卡和NVIDIA显卡,如何在Debian Linux下启用NVIDIA显卡是一个难题。幸运的是,通过bumblebee软件可在Linux下支持NVIDIA Optimus技术,实现Intel集成显卡和NVIDIA显卡之间的切换使用。

背景知识

NVIDIA Optimus

Optimus是NVIDIA针对笔记本电脑的显示切换技术。它可以实现笔记本电脑中独立显卡与主板内置显卡之间无缝、自动、实时的切换(用户无需重启或手动调整),从而实现能源的节约。

利用Optimus技术后,计算机的显示输出永远都只会通过集成式芯片组的显示核心。独立显卡的显示输出将会被废掉,有关的输出亦会发送到前者。由于显示输出的设备是固定的,所以黑屏现象将会被解决。额外的切换线路亦变得不需要,因为在不需要独立显示核心的时候,系统会索性断绝其电源供应。当系统的显示负载轻的时候,就会完全利用内置的显示核心。当负载增加后,系统就会打开独立显示核心作计算之用。协议分工方面由驱动程序负责,NVIDIA声称可以兼容所有的API。

Bumblebee

Bumblebee 致力于使 NVIDIA Optimus 在 GNU/Linux 系统上可用,实现两块不同的供电配置的显卡同时插入使用,共享同一个 framebuffer。

安装配置过程

禁止加载开源驱动nouveau

1
2
3
4
5
6
7
8
$ vi /etc/modprobe.d/nvidia-installer-disable-nouveau.conf

#上述文件不存在则新建,在文件中添加下面两行文字
blacklist nouveau
options nouveau modeset = 0

#系统重启后使用以下命令查看nouveau驱动是否被禁止
lsmod |grep -i nouveau

安装内核头文件

1
$ sudo apt-get install -y linux-headers-$(uname -r)

安装NVIDIA驱动

1
2
# 关于是否生存xorg.conf文件,选no
$ sudo apt-get install nvidia-driver nvidia-xconfig nvidia-kernel-dkms

安装双显卡切换解决方案包

1
$ apt-get install bumblebee-nvidia primus

添加当前用户到bumblebee用户组

1
$ adduser $USER bumblebee

修改bumblebee配置

1
2
3
4
5
6
7
8
9
10
11
12
$ vi /etc/bumeblebee/bumblebee.conf
: Driver=nvidia

#将/etc/bumeblebee/bumblebee.conf文件中的Driver=* 改成 =nvidia

$ vi /etc/bumblebee/xorg.conf.nvidia
:BusID "PCI:01:00:0"

#在/etc/bumblebee/xorg.conf.nvidia文件中,将Section“Device”部分添加PCI ID

# 可使用如下命令查看NVIDIA显卡的BUS ID
nvidia-xconfig --query-gpu-info | grep 'BusID : ' | cut -d ' ' -f6

重启进入桌面

如果无法进入桌面环境,则安装失败,进入高级修复使用如下命令进行清理。

1
$ sudo apt-get purge nvidia* bumblebee* prime*

bumblebee服务开机不会启动,设置开机启动即可。

1
$ update-rc.d -f bumblebee defaults

使用独显运行程序

bumblebee不能做到集显和独显之间自动切换,系统运行时默认使用集显,当你需要使用独显运行某个程序或者游戏的时候,终端执行如下命令即可:

1
2
$ optirum command #使用独显运行command程序
$ optirum -b primus command #使用独显运行command程序,提升性能

参考链接

  1. kali 在支持双显卡切换机器宏碁(Acer)V3下安装NVIDIA驱动, by 不梦君.
  2. Installing-Nvidia-drivers-on-Kali-Linux, by europa502.
  3. NVIDIA Optimus, by wikipedia.
  4. 在Ubuntu上安装和配置Nvidia Optimus驱动, by Linux中国.
  5. Bumblebee,by archlinux.

Linux图形界面基础知识

发表于 2018-12-09 | 更新于 2018-12-10

Linux初学者经常分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系。常常混淆概念,下面以易于理解的方式解释X,X11,XFREE,WM,KDE,GNOME等之间的关系。

Linux内核没有图形用户界面

与Windows操作系统内核集成图形用户界面不同,Linux内核没有图形用户界面,是一个基于命令行的操作系统。

linux和Xfree的关系就相当于当年的DOS和 WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样 XFree只是linux下的一个应用程序而已。不是系统的一部分,但是X的存在可以方便用户使用电脑。

WINDOWS95及以后的版本就不一样了,他们 的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形 界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一。

X是协议,不是具体的某个软件

X 是协议,就像HTTP协议,IP协议一样。一个基于X的应用程序需要运行并显示内容时他就联 接到X服务器,开始用X协议和服务器交谈。

比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程 序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的”画”的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由X服务器来完成的。

X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现 鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然 他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画–那是服务器的事情。

XFree86和Xorg是实现X协议的服务器程序

Xfree86就是这样一个去根据法规实现协议的 “交警”。他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务。当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由交通协管 员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议。

所以实现X协议的软件也并不只有 XFree86,XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务器软件。

X和X11R6的关系

X11R6 实际上是 X Protocol version 11 Release 6
(X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正。

不同版本的X协议是不能通信的。就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6。

X服务器和WM(window manager 窗口管理器)的关系

窗口管理器是一种X应用程序,它负责窗口最大化,最小化,移动,关闭窗口等。这些不是X服务器负责完成的。

KDE和GNOME

KDE 和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单, KDE是K Desktop Environment 的缩写。他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等。

GNOME是GNU Network Object Model Environment 的缩写。和KDE一样,也是一个功能强大的综合环境。

另外在其它UNIX系统中,常常使用CDE作为这样一个环境。

其它的小型窗口管理器有: window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器。

linux图形界面层次关系总结

linux本身–>X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)–>X应用程序。

Xfree86服务器的实现包括两个部分,一部分是和显卡直接打交道的低层,一部分是和X应用程序打交道的上层。

上层负责接收应用程序的请求和鼠标 键盘的动作。而和显卡直接打交道的底层负责指挥显卡生成图形,其实就是显卡驱动。上层接收到应用程序的请求后,将请求内容做适当处理,然后交给显卡驱动来 指挥 显卡完成画图的动作。

另外,上层的捕捉键盘和鼠标动作的部分会向应用程序提供鼠标和键盘的状态信息,应用程序接收到这些信息后决定是否再有相应的动作。

参考链接

  1. linux图形界面基本知识(X、X11、Xfree86、Xorg、GNOME、KDE), by huang_xw.

家用电器安全使用年限与折旧

发表于 2018-12-08

家用电器都有一定的安全使用年限,超过安全使用年限,家用电器因产品老化将产生如下问题,造成安全隐患:

  • 绝缘体老化,产生漏电,导致电磁污染
  • 元器件技术指标严重下降,导致有害物质泄漏,耗电量增加

那么家用电器的安全使用年限是多少呢?购买二手家用电器时如何折旧呢?

家用电器安全使用年限

有关家电安全使用年限的标准通则早已出台,但是针对不同产品的具体年限细则却迟迟未发布。原因主要在于不同产品的使用年限评估难度较大,不同地区的使用差异性也较大,因此就目前而言国内尚无明确的家电使用年限方面的规定,国际通行年限可作参考:

  • 电吹风:4年
  • 电热毯:6年
  • 电脑:6年
  • 吸尘器:8年
  • 煤气灶:8年
  • 电热水器:8年
  • 洗衣机:8年
  • 电视:8-10年
  • 空调:8-10年
  • 微波炉:10年
  • 电饭煲:10年
  • 电风扇:10年
  • 冰箱:12-16年

家用电器安全使用年限只是最高限定,如果在使用过程中不注意保养维护,也有可能缩减家用电器的使用寿命,这就要求用户在日常生活中需要注重维护保养,使家电处于良好的工作环境,确保家电安全“服役”。

家用电器老化特征

家用电器也有各自的老化特征,当出现以下老化特征时,建议及时保养或更换:

  1. 空调:如果使用多年的空调开始出现制冷或制热变慢,噪音过大,在开机时会出现霉味且出风伴有灰尘,流出黑水,那么用户就应该考虑更换一台新空调。老旧空调此时不仅耗费更多电量,出风还会带有细菌污垢,影响身体健康。

  2. 冰箱:平时运行良好的冰箱开始出现制冷效果差,噪音过大,甚至发生轻微颤动时,说明已经老化。若继续使用,耗电量将会加大,食物的储鲜功能也会退化,有时还会出现冰箱制冷剂泄露,污染食材环境的问题。

  3. 洗衣机:洗衣机使用超龄的现象在用户中最为常见,判断它已经超龄的方式也最为简单。通常来说,洗衣机出现渗水、漏水、漏电,噪音过大,衣物清洗不净等问题都是达到使用年限的表现,严重时甚至会发生爆炸事件。

  4. 电视机:虽然各种类型的平板、投影仪的市场占有率越来越高,但电视机仍然是每个家庭不可或缺的电器之一。日常使用电视时,屏幕色彩暗淡,画面模糊抖动,除了要考虑电视自身质量问题,还要查看电视使用时长是否已经超出使用年限。超龄服役的电视机除了耗电量增加外,自燃或爆炸事故也时有发生。

  5. 热水器:热水器超出使用年限后,在运行时会出现异常声音,安全装置也会发生功能异常问题,再加上内胆中日积月累的杂质污垢,不仅会污染水质,还可能因漏电对人体造成伤害。除此之外,超龄热水器还易出现漏水、保温性差以及因内部电器元件老化导致的短路、冒烟等故障。

一旦发现家中电器存在以上类似的老化特征时,最好提前更换产品,以免带来严重后果。据媒体公开报道,每年我国因家电触电伤亡人数超过1000人,因家电引起的火灾损失更加惊人,而这其中最典型的原因就是家电超龄“使用”。

家用电器折旧

家用电器折旧可简单按固定资产折旧方法中的直线法,根据家用电器安全使用年限逐年折旧。

固定资产折旧方法

固定资产折旧方法(Fixed-assets Depreciation Method),指将应提折旧总额在固定资产各使用期间进行分配时所采用的具体计算方法。折旧是指固定资产由于使用而逐渐磨损所减少的那部分价值。

固定资产的损耗有两种:

  • 有形损耗,也称作物质磨损,是由于使用而发生的机械磨损,以及由于自然力的作用所引起的自然损耗。
  • 无形损耗,也称精神磨损,是指科学进步以及劳动生产率提高等原因而引起的固定资产价值的损失。

一般情况下,当计算固定资产折旧时,要同时考虑这两种损耗。

固定资产折旧方法可分为三类:

直线法

直线法(straight-line method)根据固定资产在整个使用寿命中的磨损状态而确定的成本分配结构。直线法依据是,固定资产的使用强度比较平均,而且各期所取得的收入差距不大。在直线法下,折旧金额是时间的线性函数。

直线法折旧公式如下:

年折旧率 = (1 - 预计净残值率)÷ 预计使用寿命(年)× 100%

月折旧额 = 固定资产原价× 年折旧率 ÷ 12

其中,净残值是指预计固定资产清理报废时可收回的残值扣除清理费用后的数额。企业应根据固定资产的性质和使用方式,合理估计固定资产的净残值。

加速折旧法

加速折旧法也称为快速折旧法或递减折旧法。其特点是:在固定资产有效使用年限的前期多提折旧,后期则少提折旧。从而相对加快折旧的速度,以使固定资产成本在有效使用年限中加快得到补偿。在具体实务中,加速折旧方法又包括年数总和法和双倍余额递减法两种。

年数总和法计算公式如下:

年折旧率 = 尚可使用寿命/ 预计使用寿命的年数总和 × 100 %

月折旧额 = (固定资产原价 - 预计净残值 )× 年折旧率 ÷ 12

某设备预计使用5年,则预计使用寿命的年数总和为15(5+4+3+2+1)。第2年时尚可使用寿命为4,此年的年折旧率为4/15。

双倍余额递减法计算公式如下:

年折旧率 =2÷ 预计使用寿命(年)× 100%

月折旧额 = 固定资产净值 × 年折旧率 ÷ 12

产量法

产量法(production method)根据固定资产的产出量分配其成本的方法。产量法的依据是固定资产的使用寿命主要是受其使用量影响,其合理性取决于三个条件:

(1)固定资产的每期用量波动较大;

(2)固定资产使用期内的产出的每期用量波动较大;

(3)固定资产服务潜力的下降与其使用程序密切相关。

如果符合这三个条件,产量法是最符合配比原则的。反对产量法的人认为,估计固定资产的产出量比估计固定资产的使用年限更加困难,而且很难考虑功能损耗因素。

产量法计算公式如下:

单位工作量折旧额 = 固定资产原价 × ( 1 - 预计净残值率 )/ 预计总工作量

某项固定资产月折旧额 = 该项固定资产当月工作量 × 单位工作量折旧额

参考链接

  1. 家用电器的使用年限是多久?如何尽可能延长其寿命?,by 海尔智慧生活.
  2. 固定资产折旧方法,by 百度百科.

空战类游戏仿真的一些思考

发表于 2018-12-08 | 更新于 2018-12-18

空战类游戏仿真涉及飞机、导弹、诱饵弹三种关键元素。为了使游戏仿真接近真实,一方面要使飞机、导弹、诱饵弹的模型及其特效(如尾焰)尽量逼真,另一方面要使飞机、导弹、诱饵弹的运动控制模型尽量接近真实。飞机、导弹、诱饵弹的模型可以用3d建模软件构建,尾焰也可以用粒子系统进行模拟,但飞机、导弹、诱饵弹的运动控制模型比较复杂,是实现空战类游戏仿真的关键。下面分别介绍飞机、导弹、诱饵弹的建模仿真。

飞机的建模仿真

飞机的运动模型基于牛顿第二运动定律,即物体所受到的外力等于此物体的质量与加速度的乘积,而加速度与外力同方向。根据外部受力和力矩计算出各种惯性坐标系下的加速度和角加速度。将加速度和角加速度分别进行积分,则可以得出飞机在某个时间段内的速度变化量和角速度变化量,进一步积分便可得到位置变化量和角度的变化量,再通过积分过程中的坐标变换以及初始时刻的状态参数,便可获得任意时刻飞机的姿态、位置、速度等参数。

飞行员通过油门杆和操纵杆控制飞机的运动。油门杆决定飞机的推力,操纵杆则控制飞机的副翼、襟翼、尾翼,改变飞机所受合力矩,从而改变飞机姿态。飞行仿真采用同样原理,油门杆和操作杆的位移经过非线性函数变换改变飞机所受合力和合力矩,经飞机运动模型获得加速度和角加速度,再经积分获得任意时刻飞机的姿态、位置、速度等参数。

当使用键盘输入控制飞机时,应将键盘输入先虚拟成油门杆和操作杆。另外需要注意的是,油门杆不回中,操作杆则自动回中。

导弹的建模仿真

根据导弹的工作原理,导弹的建模仿真应分成三个方面:

  • 探测模型
  • 目标识别算法
  • 运动控制模型

诱饵弹的建模仿真

诱饵弹的运动模型比较简单,可运用牛顿第二运动定律分析得出。比较有难度的是诱饵弹的视觉特效建模。诱饵弹是一个变质量、不规则的发光体,如何3D建模有难度,不能像太阳一样直接用图片代替。

参考链接

  1. 无人机飞控通俗演义之 纷繁复杂的飞行力学, by 量子黑洞.
  2. 一起写飞行仿真之 六自由度动力学方程, by 量子黑洞.
  3. 飞行仿真–1.三维建模篇, by WFYX.
  4. 无人机飞控通俗演义之 无人机导航制导与控制, by WFYX.
  5. FLIGHTGEAR FLIGHT SIMULATOR, by flightgear.
上一页1…464748…53下一页

Jack Huang

528 日志
68 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse