文档库 最新最全的文档下载
当前位置:文档库 › X_现状_未来

X_现状_未来

X_现状_未来
X_现状_未来

X windows图形系统——现在和将来

fykcee1@https://www.wendangku.net/doc/b010618327.html,原文

目录

X导航 (一些笔记 ) (2)

Xserver的职责 (2)

一般客户端的职责 (2)

特殊客户端——窗口管理器的职责 (2)

X协议分类 (2)

Xlib的覆盖面 (2)

Xlib清空请求队列(到 server端)的时机 (3)

属性(property) (3)

窗口的特性 (3)

窗口的层次 (4)

窗口的映射 (4)

图形上下文的三个方面 (4)

可绘对象(drawable: window & pixmap) (5)

三类错误事件(Error Event) (5)

错误事件结构体 ( 错误发生时刻的相关上下文环境) (5)

GUI设计中的三要素 (5)

编写一个X 程序的四个步骤 (5)

创建X 程序的一般过程 (5)

一个简单的X 程序( 模板) (6)

Some Tips (9)

Q & A (9)

一些详细的规范(PDF 下载) (9)

X各个部分简介 (PDF下载 ) (10)

X的未来 (10)

XGL (10)

OpenGL家族 (https://www.wendangku.net/doc/b010618327.html,) (10)

GL 3草案 (10)

OpenGL ES (10)

OpenVG (10)

OpenMAX (11)

glFX (11)

COLLADA (11)

新的驱动 (11)

讨论:X 真的优秀么? (11)

X作太多工作(人机外设的管理 (DISPLAY)、绘制及相应数据管理、事件分发)? (11)

X并没有很好划分 Client-Server? (11)

YY(无责任灌水) (11)

X导航(一些笔记)

这些笔记来自O'Reilly出版的《The Definitive Guides to the X Window Systems, Vol 1 - Xlib Programming Manual》, 1992年第三版 (By Laxxuss)

Xserver的职责

允许多个客户端访问显示资源(display = screen + mouse + keyboard)

解释来自客户端的网络消息

把用户的输入通过网络消息传给客户端

二维绘制

维护一些数据结构 (windows, cursors, fonts, 图形相关上下文Graphics Context——客户端通过资源ID来共享前述资源)

一般客户端的职责

响应相应的事件(输入事件、与其他程序的交互事件)

特殊客户端——窗口管理器的职责

管理有限的UI资源(显示(display)、屏幕空间、颜色表)

屏幕上窗口的布局(用户请求(hint) + 窗口布局政策)

移动窗口和改变窗口的大小

控制屏幕上的窗口栈

X协议分类

请求:xlib->server (e.g.绘制线、查询窗口大小、改变颜色表中的某个单元的颜色)。大多数Xlib例程产生请求(除了如Regions和资源管理)。

响应:server->xlib,响应相关请求。需要获得响应的xlib例程发出的请求被称为round ?trip(往返) request(对性能造成影响)。

事件:server->xlib,在xlib中事件保存为队列。客户指定服务器送来事件的范围。

错误:server->xlib,通知客户端前一请求是无效,类似事件,但是由Xlib指定的句柄处理(默认是打印错误消息)。

Xlib的覆盖面

颜色管理:绘制用的颜色模式(解释)之间的切换

指针管理(Cursors):鼠标图样的改变

数据管理:数据和窗口或者数字联系的机制

显示(Display)的连接:(通过网络)程序连接/断开一个显示(Display)

获取显示(Display)和服务端相关信息:提供服务端的实现和其相连的显示(Display) 的信息 绘图:绘制/填充点、线、矩形、多边形和弧的函数

错误处理只有keyboard和mouse事件传播。事件掩码是每个客户端独有:一些挂接错误处理句柄的函数

事件处理:获取来自用户、其他程序、服务端的事件

扩展:获知服务端的扩展以及这些扩展的用法

字体:列出可用的字体、载入字体以及找出其相应的字符

几何:操作和转换几何相关的

图形上下文:设置对绘制请求的解释(绘制的方式,如填充还是勾画、线的形状...)

对主机访问的控制:控制来自网络其他机器对服务端的访问

图像:获取/显示/操纵屏幕图像

客户端之间的通信:

国际化:独立于语言的输入和文本渲染处理函数

键盘:改变键盘输入处理方式(包括键盘映射)

指针设备(鼠标):改变指针输入处理方式

区域(Regions)操作:对多边形区域(Region)作数学操作

资源管理:方便管理用户设置和命令行参数

屏幕保护:设置屏幕保护期间显示的内容

文本:渲染文本和相关文本渲染的几何信息(大小...)

用户设置:设置/获取键盘连击相关设置

窗口属性(Attribute):获取/设置窗口的当前特质(属性)

窗口生命周期:窗口创建和消亡的函数

窗口管理:在屏幕上操作窗口——改变大小、可见性、窗口栈

Xlib清空请求队列(到server端)的时机

1.调用需要立即响应的函数(名中含Query、Fetch、Get的例程)

2.调用读取某个事件的例程,而此时队列中没有匹配事件

3.调用XFlush、XSync ()

属性(property)

一个和窗口相联的信息包(用于客户端之间的交流),含有一个字符串名和数字ID(atom)

窗口管理器(windows manager)和客户端的大部分通信通过窗口属性(其余通过事件)

窗口的特性

父窗口——每个窗口在创建时就指定了父窗口(root窗口——无父窗口,Xserver启动时创建,覆盖整个屏幕)

窗口配置(configure)包括:

1.不计边框的窗口高度和宽度(以像素计)

1.窗口的边框(宽度可变,0代表边框不可见)

2.窗口相对的位置(不计边框)

3.同一父窗口的窗口间,栈中的顺序

窗口的几何特性——窗口配置的中窗口的高度、宽度和窗口的位置

depth & visual:depth——像素值的位数,visual——像素值如何转换成输出颜色

窗口的类别:

1.输入输出

2.仅输入(透明无边界,不能有输入输出类别的窗口作为子窗口,常用来改变鼠标外形)

窗口的一组属性(Attributes):

1.窗口边界和背景使用的颜色或者模式(Pattern)

2.改变窗口大小时窗口内其他内容的重定位

3.窗口内容何时自动保存?(当窗口被覆盖之后又“曝光”(exposure))

4.接收哪些事件,哪些事件不向祖先窗口提交?

5.是否允许不通知窗口管理器来显示、移动、改变本窗口大小

6.使用哪种颜色表来解释像素值

7.鼠标在此窗口中时应该如何显示

窗口的层次

每个屏幕(screen)对应一个root window(撑满整个屏幕)

root window的直接子window成为顶级(toplevel)窗口,由窗口管理器所管理

toplevel窗口的子窗口可用作实现比如按钮,滚动条之类1

子窗口可以部分或全部置于父窗口之外,但是子窗口只能向其和父窗口交集区域输出/获取输入 子窗口总是在父窗口的上面

窗口的映射

窗口必须被映射——通过 XmapWindow()(或其他相关例程:XMapSubwindows()),窗口符合以下几点才可见:只有keyboard和mouse事件传播。事件掩码是每个客户端独有

1.该窗口的所有祖先窗口被映射

2.不能被其他可见的兄弟窗口或者祖先的兄弟窗口覆盖(通过XCirculateSubwindows(),

XConfigureWindow(), 和 XrestackWindows()调整栈中的顺序)

3.相应的请求缓冲被清空(到server)

4.顶级窗口的初次映射是个特例——因为需要窗口管理器“领养"之。更复杂的情形:客户必

须等待一个“曝光”事件窗口才可见

图形上下文的三个方面

1.位掩码(plane mask)

2.剪切掩码(clip mask)

3.逻辑函数

1事实上,GTK+中,接受事件的控件分配被这样一个子窗口,而只用来显示的控件使用其直接父控件的窗口的一部分

可绘对象(drawable: window & pixmap)

三类错误事件(Error Event)

1.检查返回值来侦测错误和进行相应处理(修改请求的参数再试),比如检测XOpenDisplay()成功否

2.协议错误——编程失误引起,由XErrorHandler处理(例外:对于返回状态代码过程的则通过检测状态代码来处理),通过XSetErrorHandler ()添加一个自定义的句柄

3.致命系统错误——(X服务器崩溃、网络失败...),由XIOErrorHandler处理,通过XSetIOErrorHandler ()添加一个自定义的句柄

错误事件结构体 (错误发生时刻的相关上下文环境)

错误事件只发给XErrorHandler处理

int type;

Display *display;/* 发生错误的Display */

XID resourceid;/* 资源ID */

unsigned long serial;/* 失败请求的序列号*/

unsigned char error_code;/* 错误代码*/

unsigned char request_code;/* 失败请求的主操作码*/

unsigned char minor_code;/* 指示扩展,若此请求不使用扩展为0 */

其中error_code可由XGetErrorT ext()或XGetErrorDatabaseT ext()来解读

GUI设计中的三要素

1.窗口的层次关系

2.选择需要处理的事件

3.事件处理(主要是简单的键盘和鼠标事件)

编写一个X程序的四个步骤

1.连接到X服务端(即选择显示(display),因为一个X服务端对应一个显示(display))

2.客户端之间的通信(和窗口管理器协作)

3.处理曝光事件

4.处理改变窗口大小事件(改变给定窗口中子窗口及其他图形内容的尺寸和位置)

创建X程序的一般过程

1.向X server创建一个连接,失败退出

2.获取物理屏幕的信息,从而计算窗口大小

3.创建窗口

4.设置合适的属性(properties),从而和窗口管理器通信

5.选择关注的事件

6.载入字体,用来打印文字

7.创建一个图形上下文(GC),来控制绘图请求的行为

8.通过映射窗口来显示之

9.循环处理事件

10.响应曝光(expose)事件,调用相应例程来绘制图形和文字

11.获取配置更改通知(ConfigureNotify)事件,其新的大小信息在事件结构体中

12.响应其他事件

13.退出——释放相关资源,关闭显示并退出

14.其他需要的步骤:

1.从配置文件/命令行参数获取用户自定义信息

2.处理颜色

一个简单的X程序(模板)

//Xlib include files

#include

#include

#include

#include

#include

//Bitmap data for icon

#include "bitmaps/icon_bitmap"

#define BITMAPDEPTH 1

//布尔值,window足够大么->否则显示一条合适的信息

#define TOO_SMALL 0

#define BIG_ENOUGH 1

//这两个参数是几乎所有Xlib例程都需要的,故申明为全局比较简单;如果有其他源文件,这两个变量需要申明为'extern'

Display *display;/* 关于服务端及其屏幕的信息的结构体,仅由XOpenDisplay ()填充*/

int screen_num;

static char *progname;

void load_font (XFontStruct **);

/* ... */

void main (int argc, char **argv)

{

Window win;/* Window ID,其值由XCreateWindow ()或者XCreateSimpleWindow ()例程返回*/

unsigned int width, height;/* Window size */

int x = 0, y = 0;/* Window position */

unsigned int border_width = 4;/* Border four pixels wide */

unsigned int display_width, display_height;

Pixmap icon_pixmap;/* 位图资源ID */

char *display_name = NULL; /* Server to connect to,为NULL则由环境变量DISPLAY 指示,格式:host:server.screen */

Screen *screen_ptr;

progname = argv[0];

//连接到服务器

if ((display = XOpenDisplay(display_name)) == NULL) {

(void) fprintf(stderr, "%s: cannot connect to X server %s\n",progname, XDisplayName (display_name));

exit( ?1 );

}

screen_num = DefaultScreen (display);/* screen_num允许的值0 ~ ScreenCount (display) - 1 */

screen_ptr = DefaultScreenOfDisplay (display);

//获取窗口信息

unsigned int display_width = DisplayWidth (display, screen_num);

unsigned int display_height = DisplayHeight(display, screen_num);

//创建窗口

width = display_width/3, height = display_height/4;

win = XCreateSimpleWindow (display, RootWindow (display, screen_num),

x, y, width, height, border_width,

BlackPixel (display, screen_num) /* border pixel value */,

WhitePixel (display, screen_num) /* background pixel value */);

//窗口栏上的图标

#define icon_bitmap_width 20

#define icon_bitmap_height 20

static char icon_bitmap_bits[] = {

0x60, 0x00, 0x01, 0xb0, 0x00, 0x07, 0x0c, 0x03, 0x00, 0x04, 0x04, 0x00,

0xc2, 0x18, 0x00, 0x03, 0x30, 0x00, 0x01, 0x60, 0x00, 0xf1, 0xdf, 0x00,

0xc1, 0xf0, 0x01, 0x82, 0x01, 0x00, 0x02, 0x03, 0x00, 0x02, 0x0c, 0x00,

0x02, 0x38, 0x00, 0x04, 0x60, 0x00, 0x04, 0xe0, 0x00, 0x04, 0x38, 0x00,

0x84, 0x06, 0x00, 0x14, 0x14, 0x00, 0x0c, 0x34, 0x00, 0x00, 0x00, 0x00};

icon_pixmap = XCreateBitmapFromData (display, win, icon_bitmap_bits,

icon_bitmap_width, icon_bitmap_height);

//和窗口管理器通信

char *window_name = "Basic Window Program";

char *icon_name = "basicwin";

XWMHints *wm_hints;

XClassHint *class_hints;

XTextProperty windowName, iconName;

XSizeHints *size_hints;/* 结构体:告诉window管理器顶级窗口最佳大小及大小增量*/ if (!(size_hints = XAllocSizeHints ())) {

fprintf (stderr, "%s: failure allocating memory", progname);

exit (0);

}

if (!(wm_hints = XAllocWMHints ())) {

fprintf(stderr, "%s: failure allocating memory", progname);

exit(0);

}

if (!(class_hints = XAllocClassHint ())) {

fprintf(stderr, "%s: failure allocating memory", progname);

exit (0);

}

//优先级:user(USPosition | USSize) > 窗口管理器 > 应用程序

size_hints?>flags = PPosition | PSize | PMinSize;

size_hints?>min_width = 300;

size_hints?>min_height = 200;

//设置XTextProperty结构体

if (XStringListToTextProperty (&window_name, 1, &windowName) == 0) {

fprintf (stderr, "%s: structure allocation for windowName failed.\n", progname);

exit (-1);

}

if (XStringListToTextProperty (&icon_name, 1, &iconName) == 0) {

fprintf (stderr, "%s: structure allocation for iconName failed.\n", progname);

exit (-1);

}

//程序是否在窗口第一次映射时显示一个图标/或者是正常的显示

wm_hints?>initial_state = NormalState;

//程序需要键盘输入么

wm_hints?>input = True;

wm_hints?>icon_pixmap = icon_pixmap;

wm_hints?>flags = StateHint | IconPixmapHint | InputHint;

//以下提供给窗口管理器关于本程序的信息

class_hints?>res_name = progname;

class_hints?>res_class = "Basicwin";

XSetWMProperties(display, win, &windowName, &iconName,

argv, argc, size_hints, wm_hints, class_hints);

//选择需要接受的事件, StructureNotifyMask相当于选择了CirculateNotify、ConfigureNotify、 DestroyNotify、GravityNotify、MapNotify、ReparentNotify和UnmapNotify

XSelectInput (display, win,

ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask);

//创建服务器资源(至此,已经创建了一个window和icon pixmap两个资源

GC gc; /* ID of graphics context */

XFontStruct *font_info;/* Structure containing font information */

/* load_font:载入一个字体资源 */

load_font (&font_info);

/* get_GC:创建一个图形上下完资源(用来绘制字体和图形) */

//映射窗口

XMapWindow(display, win);

//清空请求缓冲->如果需要周期性绘制则需要调用XFlush ()

//建立起事件处理循环

XEvent report; /* Structure for event information */

int window_size = BIG_ENOUGH;

while (1) {

XNextEvent (display, &report);

switch (report.type) {

case Expose:

//绘制窗口优化:如非连续的Expose事件中最后一个,则不处理之/是否确定最小绘制区

if (report.xexpose.count != 0) break;

if (window_size == TOO_SMALL) TooSmall(win, gc, font_info);

else {

place_text(win, gc, font_info, width, height);

place_graphics(win, gc, width, height);

}

break;

case ConfigureNotify:

//处理窗口大小改变事件

width = report.xconfigure.width;

height = report.xconfigure.height;

if ((width < size_hints?>min_width) || (height < size_hints?>min_height))

window_size = TOO_SMALL;

else

window_size = BIG_ENOUGH;

break;

case ButtonPress:

case KeyPress:

//离开程序

XUnloadFont(display, font_info?>fid);

XFreeGC(display, gc);

XCloseDisplay(display);

exit(1);

default:

break;

}

}

}

void load_font (XFontStruct **font_info)

{

char *fontname = "9x15";

if ((*font_info = XLoadQueryFont(display,fontname)) == NULL) {

(void) fprintf( stderr, "Basic: Cannot open 9x15 font\n");

exit( ?1 );

}

}

/* ... */

Some Tips

?X服务器不会自动维护窗口中可见内容,对一个不可见或者没有映射的窗口进行图形操作没有效果。当窗口被覆盖之后曝光,可见内容就会丢弃。通过指定"后台支持"(backing store,开销较大),或者重绘来维持窗口内容。只有keyboard和mouse事件传播。事件掩码是每个客户端独有

?只有keyboard和mouse相关事件(沿着窗口层次向上)传播。事件掩码是每个客户端独有。Q & A

为什么GUI的基元是窗口?

为了提高屏幕的利用虑,把屏幕划分为窗口来使用,故而

窗口属于谁?

窗口是全局的,通过窗口的ID可以引用窗口,故窗口不是特定地属于某个客户端 事件如何被分发处理?

服务端:X发送相关事件给在窗口的事件掩码中有标记的客户端,对键盘和鼠标相关事件可能还要向其父窗口传递

客户端:通过某ID窗口的事件掩码选择关心的事件,从事件队列中获取事件分发到合适的代码

中来处理

事件的结构体中的两个最主要成员:1)事件发生的窗口 2)事件类型

一些详细的规范(PDF下载)

原书( The Definitive Guides to the X Window Systems, Vol 1 - Xlib Programming Manual)第三版

Xlib手册(X Version 11, Release 6.9/7.0)

ICCCM (Inter-Client Communication Conventions Manual) v2.1

X协议(X Version 11, Release 6.7 DRAFT)

X会话管理库(X Session Management Library) v1.0

X各个部分简介(PDF下载)

?X窗口协议及构架

?X 窗口系统核心协议

?窗口管理器

?X显示管理器(X display manager)

?X会话管理器

?X 选择模型

?X焦点模型(网页)

?x11颜色命名规范

X的未来

XGL

The State of Linux Graphics (Jon Smirl)(PDF)

XGL (PDF)

EGL(位于窗口系统和OpenGL ES/OpenVG等的一层)(PDF)

1.提供创建可供客户APIs绘制和共享的渲染表面(windows,pbuffers,pixmaps)的机制

2.为客户端API提供创建和管理图形上下文(Graphics contexts)的方法

3.提供同步客户端API和平台原生渲染API的方式

OpenGL家族(https://www.wendangku.net/doc/b010618327.html,)

GL 3草案

OpenGL ES

OpenVG

硬件加速矢量绘图接口(Flash、svg...)

新闻:OpenVG加速 webkit渲染

开源实现:shivaVG

OpenVG vs cairo:

1.OpenVG不支持字体或者文本渲染

2.OpenVG可以成为cairo的一个后端

3.OpenVG更像硬件的抽象状态机(更底层)

OpenMAX

1.硬件加速的全面的流媒体编码器

2.程序的可移植性

开源实现:Bellagio(整合层)

OpenMAX vs gstreamer:

1.通过OpenMAX 的IL(整合)层可以被gstreamer整合

2.OpenMAX的AL(应用)层和gstreamer竞争。

glFX

运行时刻的特效框架。(特效由COLLADA FX格式所描述)

COLLADA

基于XML,3D内容交换规范

新的驱动

当前DRM 的内存管理(PDF)

新的内存管理模型

Gallium(镓 )3D驱动模型(odp演示文件)

新闻:mesa的采用Gallium驱动模型的cell平台驱动(The Mesa Cell driver is part of the Gallium3D architecture. T ungsten Graphics is leading the project. T wo phases are planned. First, to implement the framework for parallel rasterization using the Cell SPEs, including texture mapping. Second, to implement a full-featured OpenGL driver with support for GLSL, etc. )

讨论:X真的优秀么?

X作太多工作(人机外设的管理(DISPLAY)、绘制及相应数据管理、事件分发)?

主要是现代的绘制工作已经太复杂了,X继续支持绘制工作和已有的OpenGL之流冗余,而且也做不好。

X并没有很好划分Client-Server?

将获取的事件发给客户端处理,有以下几个缺点(看上去有点像AJAX于传统动态网页技术的PK): 受到网络延时的影响,使得程序响应度下降

事件(服务端)和事件处理的句柄(客户端)在X所处的层次上属于紧耦合,当前的划分对性能(包括网络传输)和模块化不利

界面逻辑分布在服务端和客户端之间(某种意义上,不符合界面和程序核分离的原则)YY(无责任灌水)

X不受欢迎?

Android平台未见 X?

Max OS X平台 X不是原生配置?

当前Linux下的GUI除了编写上的困难(包括跨环境),其他还有一些缺点:

安全性,例如

?焦点安全(依赖窗口管理器)(例如在用户输入敏感数据(如密码)时,一个突然弹出的

窗口可能获取当前用户的焦点而导致用户敏感数据外泄(如果用户不十分小心)

?对事件源和路径的认证和控制(比如区分用户触发的事件和程序制造的事件,从而确保

用户界面用户的意图)

?...

使用性,例如用户在顶级窗口之间的操作(回想GIMP...)

思路:

类基于富功能web浏览器的桌面环境(提供界面服务器而非XServer)

UI操作的模式(类比启发)

交互系统由硬件——软件——用户构成

硬件(CPU等)用户

执行线(CPU的执行入口,i.e. CPU的核2)鼠标指针数3

进程窗口4(工作流程)

当前进程获得焦点的窗口

进程间的通信窗口间操作

进程调度任务栏(或者火狐之类的标签栏)

进程抢占焦点抢占

缓存机制历史记录(最近文档)

......

2这个核不支持类超线程的技术

3即多点触摸技术,参见https://www.wendangku.net/doc/b010618327.html,/wiki/Development/Documentation/MPX

4这里的窗口都指通常称的窗口(不严格的说,就是顶级窗口),下同

现金流估值

多年来,金融分析师已经使用了许多不同的公式计算公司的内在价值。但最好的系统,根据华伦巴菲特,就是由约翰伯尔威廉姆斯75年前。在她的1938本书的投资价值的理论,威廉姆斯写道,“任何股票,债券或企业今天的现金流入与流出的决定在一个合适的利率,可以预计于资产的剩余寿命期间发生的折扣。“我们把它称之为贴现现金流模型,因为那就是思想的本质:今天的价值就是未来现金流量,折现到现在的通过适当的因素。 诀窍就是牵制的号码。我们应该未来一段时间多久要瞧?我们如何计算未来的现金流?什么就是“适当的”贴现率? 数学练习,巴菲特告诉我们,非常类似于债券的估值。债券有一个票面利率与到期日期,与她们一起决定其未来的现金流。如果您把所有的债券息票与再除以规定的利率(利率债券将到期),今天您会有债券的价格。当然,一个企业,我们没有票面利率的工作。因此,我们使用所谓的“所有者收益。因此,确定一个企业的价值,我们计算所有盈利的业务将产生一定时期进入未来,允许一个合理的增长速度,再打折,总回本。 在理论上很简单,但它确实提高物流的几个实际问题。 ?所有者收益就是什么”,“我怎么确定呢? ?到未来,我究竟该如何瞧呢? ?合理的增长率就是多少?

我应该用什么?折扣率? 让我们把她们一次。 ?您如何确定一个公司的所有者的收益?使用最新的年度报告(网络上),把最近一年公司的净收入,加回折旧与摊销的非现金费用,然后减去公司的资本支出为一年。这会给您老板的收入。 ?到多远的未来您应该估计现金流?没有一个答案。这通常取决于您有多自信在您能力决定一个公司的增长速度。在华伦巴菲特的方式,我们使用了10年的模式,但我们还包括一个5年与10年的预测,投资者可能会信心不足7年的模型。 您应该使用什么?增长率计算未来的现金流?这就是一个更复杂的,因为实际上有两个率的考虑,与几个变量。 第一速度就是已知的,当然,作为第一阶段增长率。它就是基于一个假设:您瞧的就是公司有足够的实力在一开始就吸引了您的注意力,并可能会用更一般的品质比别人做的更好。投资者面临的问题就是,多久,依旧如此?这就就是为什么我建议您做三套时间的预测。 您怎么确定第一阶段的速率?开始最简单,最好的方法就是以历史增长率(例如,在过去的三到五年的所有者收益平均增长),并假定未来的增长将就是相似的。您也可以检查了解管理层认为公司未来增长的年度报告。或者您可以考虑独立的分析等服务的价值线投资调查,并使用她们

web前端毕业设计论文

2015版 毕业论文 题目:响应式企业网站设计与实现 学生姓名:罗智刚学号:1202012132 专业班级:B12计算机科学与技术2班 指导教师:李莉 企业导师:林志宏 二级学院:电气与信息工程学院

摘要 在信息高速发展的这个时代,网络作为现今最为方便快捷的媒介也越来越被人们接受,并且融入我们的生活。在2015年时,随着HTML5在国内的兴起,也在不断的推进着信息时代的发展,网站也逐渐脱离了传统的枯燥页面风格,如今的HTML5比起以前的HTML来说,更容易维护和管理,而且还能实现跨平台开发,减少开发成本。 本论文主要围绕写意集团的HTML5响应式网站为开发主题,用到的也是最必备的三个技能元素,在布局页面时,用HTML将元素进行定义,布局基础布局;css对展示的HTML元素布局进行定位渲染,然后利用Javascript或者jQuery实现相应的效果和交互。虽然这么看起来很简单,但这里需要认真了解的东西很多。在开发前,需要对这些概念弄清楚,在开发过程中还要考虑兼容,性能等各种问题。 分析并解决实现中的若干技术问题:介绍企业官网个性化页面的背景及HTML5响应式布局的一般原理;阐述整个企业官网的结构及工作原理;分析 实现中的难点和重点; 关键词:HTML5; CSS3; 响应式; javascript; 网站美化; 交互设计

abstract In this era of rapid development of information and network as the most convenient media now increasingly being accepted and integrated into our lives. In 2015, with the rise of HTML5 in the country, has also been advancing the development of the information age, the site is also moving away from the traditional boring page style, and now HTML5 compared to the previous HTML is easier to maintain and management, but also to achieve cross-platform development, reduce development costs. This paper mainly around Freehand Group HTML5 Responsive website development topics, used in the three most essential elements of skill, in the layout of the page, using HTML to define the elements, layout basic layout; css to display HTML elements positioning layout rendering, then use Javascript or jQuery to achieve the appropriate effects and interactions. Although such looks very simple, but here need to understand a lot of serious things. Before development, the need to clarify these concepts in the development process, but

中国城市发展现状及展望

中国城市发展现状及展望 打开中国的政区地图,全国现有设市城市655个。按照行政区划,其中地级及以上城市287个(包括4个直辖市和15个副省级城市),县级城市368个(包括63个省辖的县级市)。此外,有建制镇19 234个。以不重复计算为原则,这655个城市的行政区域土地面积为521.6万平方公里,占国土总面积的54.3%。《2008年国土资源公报》指出,全国的城乡居民点及独立工矿用地为26.6万平方公里,占国土总面积的2.8%。《2007年城市、县城和村镇建设统计公报》显示,全国655个城市的城区建成区面积为3.5万平方公里,全国的县城镇和同类居民点建成区面积为1.4万平方公里,其余建制镇建成区面积为2.84万平方公里;城区、县城镇和其余建制镇合计,共有建成区面积7.74万平方公里。由此可知,中国的城镇建成区占国土总面积的0.8%,中国的乡村和独立工矿用地占国土面积的2.0%。 从现实的国情出发,按照行政许可,这655个城市市长的服务和管理,应能统筹城乡。为了协调城乡空间布局,改善人居环境,促进城乡经济社会全面协调可持续发展,由地方人民政府组织编制的城乡规划,应包括城镇体系规划、城市规划、镇规划、乡规划和村庄规划。以往那种就城市论城市、就乡村论乡村的规划管理制度和建设实施模式,已不能适应当前经济社会发展的需要。 30年来,我国城市数量的发展变化可分为3个阶段:一是较快发展阶段,城市数量由1978年的193个上升到1982年的245个,平均每年增加13个;二是快速增长阶段,1996年城市总数达到666个,平均每年增加30个;三是平稳调整阶段,1997年的城市总数为668个,之后至2008年末,全国共有城市655个。近年来城市数量逐渐减少的主要原因,是部分地级及以上城市进行了“撤(县级)市设(市辖)区”的行政区划调整。 未来的发展趋势是,由于量大面广,我国广大中小城市和建制镇的人口总量仍将继续高于大城市和特大城市;同时,地处经济发达地区的各大城市也将继续成为乡村人口向城镇转移的主要接纳地。城市作为相对独立的经济发展单元,其“撤县设区”、“撤乡设镇”和“乡镇合并”等行政区划调整仍将继续,县级市的数量还会减少,部分县级市将有可能“升格”为省辖市。在某种程度上,这一调整反映出地方中心城市“做大做强”的强烈意愿,以及由上一级行政单位统一协调区域城乡发展、争取优质资源的态势。 2 中国的城镇化 中国的城镇化(又称城市化),是指在工业化推动下,通过城镇数量增加和城镇规模扩大,所导致的乡村人口向城镇集聚的过程.中国的城镇化长期滞后于世界的平均水平,但可以预计,在2020—2030年期间,中国的城镇化进程将会跟上世界的步伐。与此同时,中国持续、高速的经济增长和大量、广泛的人口流动,正在模糊经典的西方城市化概念,重

浅析淘宝网的发展现状和未来发展模式

浅析淘宝网的发展现状和未来发展模式 摘要:2008年以来,受到全球金融危机蔓延深化的影响,我国多数行业都受到了不同程度的冲击。但包括网络零售的电子商务行业发展却一路繁荣,成为危机背景下经济增长的一个亮点。本文以淘宝网为例,运用SWOT分析法,浅析目前淘宝网的发展面临的优势,劣势,机会和威胁,而后提出我们对于淘宝未来发展的应对之策。 关键词:淘宝网,网络购物,C2C模式, 一.引言 在国内C2C网络购物网站中,以淘宝网发展最为迅猛,《2009年上半年中国网络购物市场发展报告》显示,2009年上半年网络购物交易规模达到1034.6亿元,其 中,淘宝网交易额达到827.6亿元,占据整体市场份额的80%,位居第二的是拍拍网,市场份额占整体市场份额的8.1%。可以看出,淘宝网的运营模式可以代表国内C2C网购市场的一个重要发展方向,因此研究淘宝网的运营模式对准确把C2C电子商务现状和走势,解决C2C电子商务今后发展急需解决的突出问题,具有现实意义。 二.电子商务的内涵 电子商务:从广义上说,是指以电子设备为媒介进行的商务活动;从狭义上说,是指以计算机网络为基础所进行的各种商务活动,包括商品和服务的提供者、广告、消费者、中介商等有关各方行为的总和。报告中的电子商务是指狭义上的。 三.网络购物概念 网络购物:借助网络实现商品或服务从商家/卖家转移到个人用户(消费者)的过程在整个过程中的资金流,物流和信息流,其中任何一个环节有网络的参与,都称之为网络购物。 网络购物分类见下图: 四.淘宝的市 场份额 目前,我国网 民的大部分网购 商品网络购物交易 集中于平台式购物 网站,,而其首选购物网站则是淘宝网。淘宝网用户市场份额达84.6,处于绝对领先地位。

《web前端开发基础》作业考核试题题库大全(精品文档)

《web前端开发基础》作业考核试题题库大 全 《web前端开发基础》这门课是非常重要的,尤其是对于计算机专业的同学们来说,下面带来的《web前端开发基础》作业考核试题题库大全一起看看! 一、单选题共20题,40分 1 2分 浮动会让元素塌陷。即被浮动元素的父元素不具有高度。例如一个父元素包含了浮动元素,它将塌陷具有零高度。你可以按以下()方法处理。 A在浮动元素后加个div设置clear: both; height:0,overflow:hidden B使用clearfix; C设置父元素浮动; D以上方法均可 2 2分 在CSS中,关于BOX的margin属性的叙述正确的是()。 A边距margin只能取一个值 Bmargin属性的参数有margin-left、margin-right、

margin-top、 margin-bottom Cmargin属性的值不可为auto Dmargin属性的参数值不能全部设置成0px 3 2分 下列( )HTML属性可用来定义内联样式。 Afont Bclass Cstyles Dstyle 4 2分 要将某div设置为漂浮于页面之上,以下能做到得是:Aposition:absolute; Bposition:relative Cposition:fixed Dposition:static 5 2分 下列()工具可以方便地选择连续的、颜色相似的区域。 A魔棒工具

B矩形选框工具 C椭圆选框工具 D磁性套索工具 6 2分 给一个盒子设置左右填充分别为10px和20px后,如果要求盒子在页面中占的总宽度不变,那么应该让盒子的宽度减少()像素。 A10px B20px C30px D不需减少 7 2分 在客户端网页脚本语言中最为通用的是( )。 AVB BJavaScript CPerl DASP 8 2分 下列( )标签里包含的内容可以显示在页面上。

中国路灯现状与未来发展分析

中国路灯现状与未来发展分析 一、目前全国公路的分布与建设 据“中华人民共和国交通运输部《09年公路水路交通运输行业发展统计公报》”数据统计,2009年底,全国公路总里程达386.08万公里,按公路技术等级分,各等级公路里程分别为:高速公路6.51万公里,一级公路5.95万公里,二级公路30.07万公里,三级公路37.90万公里,四级公路225.20万公里,等外公路80.46万公里。 公路桥梁、隧道总量继续增加。2009年底,全国公路桥梁达62.19万座、2726.06万米,全国公路隧道为6139处、394.20万米,是世界上公路隧道最多的国家。 二、我国公路未来5年的发展 1、公路公路建设方面 我国现在在二级以上的公路建设(不包括高速公路)投入发展规划,每年约以12万公里的速度递增,未来5年将增加60万公里的公路交通枢纽。 2、高速公路建设方面 关于高速公路的网点建设方面,《国家高速公路网规划》已经国务院审议通过,规划的出台标志着中国高速公路发展进入了新的历史阶段。据中国交通部部长张春贤表示,中国国家高速公路规划网络是一项庞大的工程,未来30年静态

投资两万亿元人民币,这个投资的力度随计划建设的进度而变化。2010年前,每年的年均投资大约在1400到1500亿元人民币,每年增加3000公里左右。2010年以后到2020年之间,年均投资大约在1000亿元人民币,每年增加2000公里左右。至2015年,我国高速公路将增加1万公里,总长度预计达到7.51万公里。 3、隧道建设方面 随着公路网点的建设,我国未来五年在隧道建设方面预计将会增加300公里。 三、我国路灯的分布与发展 中国在2006年具有1500万盏路灯,并以每年20%的速度增长,也就是每年新增的路灯数也有300万盏。至2010年,中国路灯的现存数量已经达到2700万盏。 在桥梁、隧道灯方面,按照《公路隧道设计规范》的设计标准,隧道照明每10米按装一盏照明灯具(两边共2盏),目前我国现存隧道灯数量达到624万盏。 在未来5年的道路建设发展规划和发展速度计算,我国将新增道路照明灯具共1500万盏(按照年增加300万盏计算),隧道灯将增加6万盏(按照总长增加300公里计算)。 四、关于路灯方面节能减排的发展思路 近年来,随着我国城市建设规模的不断扩大和建设水平的不断提高,作为城市建设的一项重要内容,城市道路照明、

股票的内在价值是指股票未来现金流入的现值

股票的内在价值是指股票未来现金流入的现值。它是股票的真实价值,也叫理论价值。股票的未来现金流入包括两部分:每期预期股利出售时得到的收入。股票的内在价值由一系列股利和将来出售时售价的现值所构成。 股票内在价值的计算方法模型有: A.现金流贴现模型 B.内部收益率模型 C.零增长模型 D.不变增长模型 E.市盈率估价模型 股票内在价值的计算方法 (一)贴现现金流模型 贴现现金流模型(基本模型 贴现现金流模型是运用收入的资本化定价方法来决定普通股票的内在价值的。按照收入的资本化定价方法,任何资产的内在价值是由拥有这种资产的投资者在未来时期中所接受的现金流决定的。一种资产的内在价值等于预期现金流的贴现值。 1、现金流模型的一般公式如下: (Dt:在未来时期以现金形式表示的每股股票的股利k:在一定风险程度下现金流的合适的贴现率V:股票的内在价值)净现值等于内在价值与成本之差,即NPV=V-P其中:P在t=0时购买股票的成本 如果NPV>0,意味着所有预期的现金流入的现值之和大于投资成本,即这种股票价格被低估,因此购买这种股票可行。如果NPV<0,意味着所有预期的现金流入的现值之和小于投资成本,即这种股票价格被高估,因此不可购买这种股票。通常可用资本资产定价模型(CAPM)证券市场线来计算各证券的预期收益率。并将此预期收益率作为计算内在价值的贴现率。 1、内部收益率 内部收益率就是使投资净现值等于零的贴现率。 (Dt:在未来时期以现金形式表示的每股股票的股利k*:内部收益率P:股票买入价) 由此方程可以解出内部收益率k*。 (二)零增长模型 1、假定股利增长率等于0,即Dt=D0(1+g)tt=1,2,┅┅,则由现金流模型的一般公式得:P=D0/k

2、内部收益率k*=D0/P (三)不变增长模型 1.公式 假定股利永远按不变的增长率g增长,则现金流模型的一般公式得: 2.内部收益率 8

2018前端面试题及答案汇总HTML

2018前端面试题及答案汇总 1、什么是盒子模型? 在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域。4个部分一起构成了css中元素的盒模型。 2、行内元素有哪些?块级元素有哪些?空(void)元素有那些? 行内元素:a、b、span、img、input、strong、select、label、em、button、textar ea 块级元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote 空元素:即系没有内容的HTML元素,例如:br、meta、hr、link、input、img 3、CSS实现垂直水平居中 一道经典的问题,实现方法有很多种,以下是其中一种实现: HTML结构:

CSS: .wrapper{position:relative;} .content{ background-color:#6699FF; width:200px;

height:200px; position: absolute; //父元素需要相对定位 top: 50%; left: 50%; margin-top:-100px ; //二分之一的height,width margin-left: -100px; } 4、简述一下src与href的区别 href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。 src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src 资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将j s脚本放在底部而不是头部。 5、什么是CSS Hack? 一般来说是针对不同的浏览器写不同的CSS,就是CSS Hack。 IE浏览器Hack一般又分为三种,条件Hack、属性级Hack、选择符Hack(详细参考C SS文档:css文档)。例如: // 1、条件Hack