月度归档:2013年10月

谈网站界面设计(UI设计)

来源:互联网

内容摘 要:

今日的网站已经不单单只是人们查询资料的工具,它已糅合了多种功能于一身,在网站为人们的学习、生活、工作、娱乐提供越来越重要的信息时,人们都它的要求也与日俱增,对界面的要求也不仅仅是停留在美观上。就此,本文在讨论一些基本的网页设计原理的同时还特别强调了UI在网页设计中的运用。

关键词: 网页 界面设计 UI 布局 色彩

绪 论

上世纪最伟大的发明莫过于互联网的发明,进入21世纪,互联网代表着一种崭新的信息交流方式,它使信息的传播突破了传统的政治、经济、地域及文化的阻隔,使信息传达的范围、速度与效率都产生了质的飞跃。如果把互联网比做一棵大树,那成千上万的网站则是组成这参天大树的枝条,而每个网站都是由诸多网页构成那么网页就是这参天大树上数不清的叶子,故网页是构成互联网的基本元素。我国这两年的网络发展非常快,每天都有数以千计的网站诞生,其中的网页数量更是成几何式的增长,然而关乎网站形象和浏览者用户体验的网站界面设计却不容乐观。除了一些大的专业网站在版面的编排上比较讲究之外,其他很少见到界面设计考究、美术创意优秀的中文网站。如何设计出美观(吸引受众眼球)的网页,如何用优秀的用户体验赢得受众的一次又一次的浏览仿佛一夜间就摆在了众设计师的案头。就此本文从以下几点讨论了关于网站界面设计所需要重视的问题。

一、认识UI

(一)什么是 UI :

      UI的本意是用户界面,是英文User和 interface的缩写。

(二)什么是 GUI:

     Graphics User Interface 图形用户界面,也就是我们今天要主要研究的东西。

(三)什么是用户界面设计:

在人和机器的互动过程中,最重要的一个方面就是我们所说的界面(。用户界面设计是屏幕产品的重要组成部分。大致界面可分为感觉(视觉、触觉、听觉等)和情感两个层次。界面设计是一个需要多方面专业知识的工作,认知心理学、设计学、语言学等在此都扮演着重要的角色。用户界面设计的三大原则是:置界面于用户的控制之下;减少用户的记忆负担;保持界面的一致性。从字面上看是用户与界面2个组成部分,但实际上还包括用户与界面之间的交互关系,所以这样可分为3个方向,他们分别是:用户研究、交互设计、界面设计。

1.用户研究

用户研究包含两个方面:一是可用性研究,研究如何提高产品的可用性,使得网站界面的设计更容易被人接受、使用和记忆;二是通过可用性的研究,发掘用户的潜在需求,为技术创新提供另外一条思路和方法。用户研究是站在人文学科的角度来研究产品,研究用户的需要,站在用户的角度介入到产品的开发和设计中。对于设计师来说就是研究如何使自己的网站页面更收浏览者的欢迎

用户研究通过对于用户的使用环境、浏览习惯等研究,使得在网站界面设计的前期能够把用户对于网站功能的期望、对设计和外观方面的要求融入到网站的开发与设计过程中去。

2.交互设计

这部分指人与机之间的交互工程,在过去交互设计也由程序员来做,其实程序员擅长编码,而不善于与最终用户交互。在使用网站的过程中最能给浏览者留下深刻印象的一定是网站的视觉因素,也就是我们所谈论的网站界面。所以,很多的网站虽然功能比较齐全,但是交互方面设计很粗糙,繁琐难用,使用困难。如何使浏览者在使用网站时可以轻松自如的找到自己想要的资源,如何轻松实现网站的功能,给浏览者以愉悦的心情,拉拢浏览者下一次的登陆,这些都需要在网站的交互设计上下足工夫。

3.界面设计

在漫长的软件发展中,界面设计工作一直没有被重视起来。做界面设计的人也被贬义的称为“美工”。其实网站界面设计就像工业产品中的工业造型设计一样,是产品的重要买点。一个友好美观的界面会给人带来舒适的视觉享受,拉近人与电脑的距离,为网站创造卖点。如果把网站比做一个人的话,网站的后台编程好比人的骨骼与肌肉,而界面则是者个人的外表,人人都喜欢美人,同样有着良好视觉感受的网站界面也是网站拉拢人气的关键所在。网站界面是网站灵魂的外在表现,忽略网站的界面设计最终会使你的网站输在起跑线上。界面设计不是单纯的美术绘画,他需要定位使用者、使用环境、使用方式并且为最终用户而设计,是纯粹的科学性的艺术设计。检验一个界面的标准即不是某个项目开发组领导的意见也不是项目成员投票的结果,而是最终用户的感受。

(四)界面构成要素

互联网与传统媒体最大的不同就在于除了文字和图像以外,还包含声音、视频和动画等新兴多媒体元素,增加了网页界面生动性的同时也使得网页设计者需要考虑更多页面元素合理性运用。

1.文字

从网页最初的纯文字界面发展至今,文字元素作为网站内容传达的主体,文字有着其他任何元素无法取代的重要作用。首先是文字信息符合人类的阅读习惯,其次因为文字所占存取空间小,节省了下载和浏览时间。网页中的文字主要包括标题、信息、文字链接等形式。文字作为占据页面重要比率的元素,同时又是信息重要载体,它的大小、字体、颜色和排布对页面整体设计影响极大。以文字排布为主的网页界面,只要文字排布得当,版面同样可以生动活泼,分类条例清晰,不会给人单调感觉。

2图形

在大多数网页中,图形占据了重要的位置,有的甚至是全部页面。图形往往能引起人们的注意,并激发阅读兴趣,合理的运用图形,可以生动直观、形象地表现设计主题。网页中常用的图形格式包括JPG、GIF和BMW。图形元素包括标题、背景、主图、链接图标四种。以图像作为标题和链接可以使网页具有更好的视觉效果,配合文字增强生动和形象性。主图与背景在装饰性上小有不同,背景是衬托主题,主图则是突出表现主题。主图是整个网页的视觉中心,它具有直观性强的特点,可以为单调的文字信息增强活力,不需要像文字那样去逐句阅读,可以不受文化水平的限制,能给人强烈的视觉信息。

3多媒体

随着网络硬件设备的日益完善,网页构成中的多媒体元素运用的也越来越多,主要包括音频、视频和动画。这些是界面构成中最吸引人的元素,好的多媒体元素不但可以增加网站的活力还可以有效的提高网站与浏览者之间的互动交流。

二、网站界面布局

网页设计源于平面设计但又与平面设计有所区别不同,相同的是在设计中多运用平面构成的基本原理,不同的是它的大小比较固定,传载的媒体只限于电子显示器(包括手机、PDA等),这样就为设计者提出了更为苛刻的要求。

(一)页面尺寸

由于网页的浏览多是基于显示器实现的,所以显示器的分辨率就决定了网页设计者设计网站页面的大小,目前比较流行的显示器的尺寸为

800*600、1024*768、1125*864、1280*720、1280*768、1280*960、1280*1024

而目前主流设计网站页面的大小一般为

600*300、760*420、995*436 

有效可视区域(单位:px)

屏幕

有效可视区域(单位:px)

屏幕

800

600

1024

768

1280

1024

IE6.0

779(+21)

432(+168)

1003(+21)

600(+168)

1259(+21)

856(+168)

IE7.0

779(+21)

452(+148)

1003(+21)

620(+148)

1259(+21)

876(+148)

Firefox2.0

783(+17)

417(+183)

1007(+17)

585(+183)

1263(+17)

841(+183)

Opera9.0

781(+19)

461(+139)

1005(+19)

629(+139)

1261(+19)

885(+139)

一般情况下宽度是一定的但页面的宽度则可以根据内容的多少而进行调整,但设计宽度始终要比显示器的实际大小窄20像素,这为的

是给右侧的滚动条留有一定的空间(见图1)

wps_clip_image-20275[3][1]

(图例1)

1. 最保守而最有兼容性的一屏大小是:779×432 

2. 最广泛的一屏大小是:1003×600 

3. 适合目前国内的情况,一屏大小是779×600 

(二)视觉顺序

网页是通过视觉元素的引人注目而实现信息内容的传达,为了使网页获得最大的视觉传达功能,使网络真正成为可读强性而且新颖的媒体,网页的设计必须适应人们视觉流向的心理和生理的特点,由此确定各种视觉构成元素之间的关系和秩序。因此,设计时应该研究各种视觉造型元素之间的距离、位置、面积和视觉流程的问题。

视觉流程的形成是由人类的视觉特性所决定的。因为人眼晶体结构的生理构造,只能产生一个焦点,而不能同时把视线停留在两处或两处以上的地方。人们在阅读一种信息时,视觉总有一种自然的流动习惯,先看什么,后看什么,再看什么。视觉流程往往会体现出比较明显的方向感,它无形中形成一种脉络,似乎有一条线、一股气贯穿其中,使整个版面的运动趋势有一个主旋律。心理学的研究表明,在一个平面上,上半部让人轻松和自在,下半部则让人稳定和压抑。同样,平面的左半部让人轻松和自在,右半部让人稳定和压抑。所以平面的视觉影响力上方强于下方,左侧强于右侧。这样平面的上部和中上部被称为“最佳视域”,也就是最优选的地方。

在网页设计中一些突出的信息,如主标题、每天更新的内容等通常都放在这个位置。当然视觉流程是一种感觉而非确切的数学公式,只要符合人们认识过程的心理顺序和思维发展的逻辑顺序,就可以更为灵活地运用。在网页设计中,灵活而合理地运用视觉流程和最佳视域,组织好自然流畅的视觉导向,直接影响到传播者传达信息的准确与有效性。所以在网页的编辑设计中,视觉导向是一个要点,网页的设计是一种创造,首先要立足信息的传达,但又要符合人们较为普遍的思维习惯,做到视觉流程自然、合理、畅快。成功的视觉流程安排,能使网页上的各种信息要素在一定空间内合理分布,能使页面上各信息要素的位置、间隙、大小保持一定的节奏感和美感。

wps_clip_image-21911[3][1]

(图例2 视觉顺序)

在布局设计中多使用平面的设计规律如“九分法”等 (见图2)

(三)布局步骤

1. 草图

这时设计师面对的是一张白纸,要做的就是简单的用画笔在纸上将创意的大致轮廓画在纸上,以便给以后的设计做大致的指导。

2. 粗略布局

将纸上的轮廓在电脑上体现出来,对画面进行分割,也可以用色块进行填充,确定好在什么地方布置什么栏目,他们的大小等。(见图例4)

wps_clip_image-30597[3][1]

(图例4)

3. 将布局细化

将粗略的布局进行细化,使色彩,LOGO,导航条等实现,一般用的工具多为PHOTOSHOP和FIREWORKS(见图例5)

wps_clip_image-4441[3][1]

(图例5)

4. 点、线、面的运用

在网页设计中同样离不开平面设计中最基本的点、线、面的运用

4.1点的运用

在内容繁杂的网页上为了可以让浏览者更轻松的找到自己想要的信息,点的引导作用必不可少(见图5)

wps_clip_image-10288[3][1]

(见图6)

4.2线的运用

线不但起到了页面的分割作用,很好的运用线条还使网页锦上添花(见图7)

wps_clip_image-19746[3][1]

(图例7)

5.布局的原则

屏幕布局因功能不同考虑的侧重点不同。各功能区要重点突出,功能明显。无论哪一种功能设计,其屏幕布局都应遵循如下五项原则:

平衡原则。注意屏幕上下左右平衡。不要堆挤数据,过分拥挤的显示也会产生视觉疲和接收错误。

预期原则。屏幕上所有对象,如窗口、按钮、菜单等处理应一致化,使对象的动作可预期。

经济原则。即在提供足够的信息量的同时还要注意简明,清昕。特别是媒体,要运用好媒体选择原则。

顺序原则。对象显示的顺序应依需要排列。通常应最先出现对话,然后通过对话将系统分段实现。

规则化。画面应对称,显示命令、对话及提示行在一个应用系统的设计中尽量统一规范。

三、 色彩在设计中的运用

(一)色彩的常识

最基本的有三种(红,黄,蓝),其它的色彩都可以由这三种色彩调和而成。我们称这三种色彩为“三原色”。 黑白灰属于非彩色系列。其它的色彩都属于彩色。任何一种彩色具备三个特征:明度、纯度和色相,其中非彩色只有明度属性。

明度,也叫亮度指的是色彩的明暗程度的大小,明度越大,色彩越发亮。比如一些购物,儿童类网站。用的是一些鲜亮的颜色,让人感觉绚丽多姿,生气勃勃。明度越低,颜色越暗。主要用于一些游戏类网站,充满神秘感;一些个人站长为了体现自身的个性,也可以运用一些暗色调来表达个人的一些孤僻,或者忧郁等性格。有明度差的色彩更容易调和。如紫色(#993399)跟黄色(#ffff00),暗红(#cc3300)跟草绿(#99cc00),暗蓝(#0066cc)跟橙色(#ff9933)等。

纯度,指色彩的鲜艳程度,纯度高的色彩纯,鲜亮。儿童、动漫、时尚、购物等多用亮色调,给人以活泼、明朗、大方特点,纯度底的色彩暗淡,含灰色。多用于艺术、科技等技术含量高的领域,给人以深远、稳重之感。

色相,指的是色彩的名称。这是色彩最基本的特征,是一种色彩区别于另一种色彩的最主要的因素。比如说红色,绿色,蓝色等等都代表了不同的色相。同一色相的色彩,调整一下亮度,或者纯度很容易搭配,比如,深红,暗暗,桃红等。

暖色,暖色跟黑色调和可以达到很好的效果。暖色一般应用于购物类网站,电子商务网站,儿童类网站等等,用以体现商品的琳琅满目,儿童类网站的活泼,温馨等等效果。

冷色,冷色一般跟白色调和可以达到一种很好的效果。冷色一般应用于一些高科技,游戏类网站,主要表达严肃,稳重等效果,绿色,蓝色,蓝紫色等等都属于冷色系列。

相近色:色环中相邻的三种颜色。相近色的搭配给人的视觉效果很舒适,很自然。所以相近色在网站设计中极为常用。

互补色,色环中相对的两种色彩。对互补色,调整一下补色的亮度,有时候是一种很好的搭配。

色彩均衡,网站让人看上去舒适,协调,除了文字,图片等内容的合理排版,色彩的均衡也是相当重要的一个部分。比如一个网站不可能单一的运用一种颜色,所以色彩的均衡问题是设计者必须要考虑的问题。色彩的均衡,包括色彩的位置,每种色彩所占的比例,面积等等。比如鲜艳明亮的色彩面积应小一点,让人感觉舒适,不刺眼。这就是一种均衡的色彩搭配。

(二)色彩的运用

蓝色是现代商务领域的流行色,也是最“安全”的WEB流行色。如果设计师对自己控制色彩的能力没有太大把握,那么使用蓝色是最好的选择。蓝色受设备偏色的影响最小。

红色既可以象征着热血、激情、冲动、勇气与力量也可以象征恐怖与暴力,在主要由红色构成的色彩中,有桃红色的浪漫与温馨,也有深红色的稳健与深沉,由于红色本身的亮度和饱和度都比较强,所以在与亮度和饱和度同样比较强的冷色(如蓝色绿色)相配时,中间最好能有一些过渡行的颜色。比如纯红与纯蓝搭配时可以在中间插入面积适中的白色,这样一来,页面中各视觉元素之间的冲突就不会那么强烈。

黄色是一种非常难以驾驭的颜色,同一种黄色与其他颜色搭配在不同的环境下表现出的视觉和心理效应往往会有很大差异,同样的黄色既可以在某个环境中表现出热情奔放的一面也可以在另一种环境中表现出阴险狡诈的一面。

绿色由于自身很难与其他颜色搭配,所以是网页设计中比较少用的颜色,在以绿色为主的优秀网页设计中大多会有橙色的参与。

橙色是朝阳的颜色也是柑橘的颜色,橙色象征着快乐、温馨、时尚和动感。橙色有红色热情奔放的特点,但又不像红色那么鲜艳和夺目;橙色有黄色敏快和爽朗的一面但又不像黄色那么容易产生平庸的感觉,大面积使用橙色的网页,可以让人感觉到扑面而来的温暖与活力。另一方面,网页设计师们越来越喜欢在白色、绿色、蓝色、灰色、黑色的网页中使用小巧而醒目的橙色元素,比如,橙色的小箭头、小按钮等元素,这种设计可以非常有效的吸引浏览者的注意力。

紫色与红色蓝色在色调上有着近似的关系,与黄色、绿色、橙色等可以形成鲜明的对比,深紫色适于表现幽雅、神秘、忧郁等主题,浅紫色则适于表现浪漫温馨等主题。

(三)确定网站的主题色

一个网站不可能单一的运用一种颜色,让人感觉单调,乏味;但是也不可能将所有的颜色都运用到网站中,让人感觉轻浮,花俏。一个网站必须有一种或两种主题色,不至于让客户迷失方向,也不到于单调,乏味。所以确定网站的主题色也是设计者必须考虑的问题之一。

一个页面尽量不要超过4种色彩,用太多的色彩让人没有方向,没有侧重。当主题色确定好以后,考虑其它配色时,一定要考虑其它配色与主题色的关系,要体现什么样的效果。另外哪种因素占主要地位,是明度,纯度还是色相。

(四)色彩的搭配

在学习了解了色彩的一些基本概念及色彩的一些搭配问题,具体运用到网页中,各要素的色彩又是如何搭配的呢?

1、网页标题

网页标题是网站的指航标,浏览者要在网页间跳转,要了解网站的结构,网站的内容,都必须通过导航或者页面中的一些小标题。所以我们可以使用稍微具有跳跃性的色彩,吸引浏览者的视线,让他们感觉网站清晰、明了,层次分明。想往哪里走都不会迷失方向。

2、网页链接

一个网站是由许多页面组成的,实现网页间相互跳转的就是网页的链接,所以文字与图片的链接是网站中不可缺少的一部分。这里特别指出文字的链接,因为链接区别于文字,所以链接的颜色不能跟文字的颜色一样。大多数浏览者不会花太多的时间用在寻找网站的链接上。设置了独特的链接颜色,让人感觉他的独特性,自然而然好奇心必然趋使他移动鼠标,点击鼠标。

3、网页文字

多数网站都会运用背景颜色,这就要求设计者考虑到背景颜色的用色,以及前景文字的搭配等问题。一般的网站侧重的是文字,所以背景可以选择纯度或者明度较低的色彩,文字用较为突出的亮色。让人一目了然。

4、网页标志

网页标志是宣传网站最重要的部分之一,所以这两个部分一定要在页面上突迎而出。怎样做到这一点呢?我们将LOGO和BANNER做的鲜亮一些,也就是色彩方面跟网页的主题色分离开来。有时候为了更突出,也可以使用与主题色相反的颜色。

5、网页的留白

中国的书法讲究留白,好的留白的运用可以带给浏览者对画面的联想,更为重要的一点就是,在网站使用中浏览者通常会划动鼠标来快速浏览页面,如果没有留白,浏览者很可能会误点链接,给浏览带来不便。

为了能让自己的网页设计得更靓丽、更舒适,为了增强你的页面的可阅读性,必须合理,恰当地运用与搭配页面各要素间的色彩!

综上所述,我们了解到网站的界面不单单是美工设计那么简单,它包括了心理学,生理学,平面构成,色彩构成等多方向的知识,只有了解并可以很好的运用这些知识,我们设计出的网站才能更好的为受众服务。

TeamViewer之修改id

 

怎么修改 TeamViewer ID 呢?按照下列的操作步骤,就能很简单的改变TeamViewer的id哦!

1. 开始 > 运行,录入%appdata%,删除TeamViewer的文件夹;

2. 开始 > 运行,录入regedit;   

删除 HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer

删除 HKEY_CURRENT_USER\SOFTWARE\TeamViewer

3. 开始 > 控制面板 > 系统 > 硬件 > 设备管理器 > 在网络适配器上单击右键 > 属性 > 高级 > Network Address;在数值栏随意输入一个12位数字。

4. 打开 TeamViewer,你会发现你的 TeamViewer ID 已改变。成功!

修改TeamViewer安装目录下的TeamViewer.ini文件, 讲nosave=1 修改成nosave=0,

重启TeamViewer就会发现原本很多灰色的地方都可以选择并且保存了.

WordPress投票插件Ludou Simple Vote

两个WordPress投票插件:Ludou Simple Vote 和 Digg顶踩投票插件,Ludou Simple Vote为露兜作品,Digg顶踩投票插件为仿制。

Ludou Simple Vote

Ludou Simple Vote使用WordPress的自定义栏目来记录投票得分,支持+1分,反对-1分,卸载该插件后将会自动删除插件创建的自定义栏目,不会给你的博客留下无用数据。这个插件使用cookie来实现简单的防作弊的功能,如果访客的浏览器关闭了cookie功能将无法投票,启动cookie后只能对同一篇文章投一次票。

 

在WordPress中实现简单的支持/反对投票插件,界面样式模仿Discuz!,使用WordPress的自定义栏目来记录投票得分。卸载该插件后将会自动删除插件创建的自定义栏目。

这个插件使用cookie来实现简单的防作弊的功能,如果访客的浏览器关闭了cookie功能将无法投票,启动cookie后在只能对同一篇文章投一次票。

使用说明

在后台启动该插件即可开始使用,打开博客的文章页,内容底部可看到投票按钮。

wpdaxue.com-201211122

如果你想在侧边栏或博客的其他地方显示投票排行榜,显示一个按投票得分排序的文章标题列表,可以使用以下代码:

<?php
    $hight_voting = $wpdb->get_results("SELECT post_title, ID
        FROM $wpdb->posts,$wpdb->postmeta
        WHERE meta_key = 'ludou_ratings_score'
        AND ID = post_id
        ORDER BY meta_value DESC
        LIMIT 10");
?>
<ul>
    <?php foreach($hight_voting as $vote_post) : ?>
    <li><a href="<?php echo get_permalink( $vote_post->ID ); ?>" title="<?php echo $vote_post->post_title; ?>"><?php echo $vote_post->post_title; ?></a></li>
    <?php endforeach; ?>
</ul>

有很多使用WordPress朋友不喜欢插件,因为他们认为插件会拖慢他们的博客。这个插件也确实在博客的头部加载了css和js,只有这样才能实现插件的功能,如果你不喜欢这些,可以用文本编辑器打开插件目录下的ludou_simplevote.php,删除第40行代码,然后将插件目录下的ludou_simplevote.css和 ludou_simplevote.js集成到你的主题即可。

http://wordpress.org/plugins/ludou-simple-vote/

 

  1. 下载插件,解压缩,你将会看到一个文件夹ludou-simple-vote,然后将其放置到插件目录下,插件目录通常是 wp-content/plugins/
  2. 在后台对应的插件管理页激活该插件 Ludou Simple Vote
  3. 完成
卸载插件
  1. 进入后台 -> 插件,停用 选择 Ludou Simple Vote
  2. 如果您打算不再使用该插件,您可以将wp-content/plugins/ludou-simple-vote/目录删除;

memcached-session-manager介绍

一些大型的web2.0的网站,在正式部署时一般是部署在不同故障域的多台应用服务器上,以j2ee应用为例,一般我们都会部署在 tomcat下,假如部署了10台tomcat服务器,那这10台tomcat可能是部署在不同的机器上,然后将应用程序copy到这10台 tomcat下,然后启动所有tomcat,一般来说这样做的目的是为了达到负载均衡以及避免单点故障,另外也考虑到国内网络环境的原因,避免跨网络运营 商访问而导致访问速度低下的问题,当然不要忘了坐镇这10台tomcat前端的还有我们的反向代理服务器,比如nginx. 对于这种分布式tomcat环境,如何保证session 的唯一性. 一般来说的大体的解决方案是自己通过编写一段代码或者通过配置tomcat的filter,将产生的session放到同一个内存数据库中,事实 上这确实可行的,Memcached_Session_Manager,简称msm,这就是一个用于解决分布式tomcat环境下session共享的问题的开源解决 方案。

项目地址:http://code.google.com/p/memcached-session-manager/

简介如下:

A tomcat high-availability solution that additionally stores sessions in a memcached compatible key-value store for session failover, while reading them from local memory for optimal performance (for sticky sessions). For non-sticky sessions the memcached compatible backend is used as session store (keeping a copy of the session in a secondary memcached node). "memcached compatible" here refers to the memcached protocol, therefore the backend can be any (if you like persistent) solution "speaking" memcached (e.g. memcachedb, membase etc.).

clip_image002

Features

  • Supports Tomcat 6 and Tomcat 7
  • Handles sticky or non-sticky sessions
  • No Single Point of Failure
  • Handles tomcat failover
  • Handles memcached failover
  • Comes with pluggable session serialization
  • Allows asynchronous session storage for faster response times
  • Sessions are only sent to memcached if they're actually modified
  • JMX management & monitoring

Which problem does the memcached-session-manager solve?

Imagine you have a web application with sticky sessions running on several tomcats and want to have some kind of session failover. You want to have a scalable solution for that – just add more servers to handle an increasing number of sessions. This can be handled by sessions that are stored for backup in memcached nodes: If a tomcat dies all other tomcats will take over the work of the lazy/dead one and fetch the sessions from the appropriate memcached node(s) and serve this session from thereon.

Wait. You're using non-sticky sessions? Since version 1.4.0 also non-sticky sessions are supported, with optional session locking for concurrent requests and without a single-point-of-failure (sessions are stored in a secondary memcached for backup).

How does it work?

(needs to be updated for non-sticky sessions)

The memcached session manager installed in a tomcat holds all sessions locally in the own jvm, just like the StandardManager does it as well.

Additionally, after a request was finished, the session (only if existing) is additionally sent to a memcached node for backup.

When the next request for this session has to be served, the session is locally available and can be used, after this second request is finished the session is updated in the memcached node.

Now imagine the tomcat dies.

The next request will be routed to another tomcat. This tomcat (in more detail the memcached session manager) is asked for a session he does not know. He will now lookup the session in the memcached node (based on an id that was appended to the sessionId when the session was created). He will fetch the session from memcached and store the session locally in its own jvm - he is responsible for that session from now on. After the tomcat served this request of course he also updates the session in the memcached node. You see tomcat failover is handled completely.

And that was only the first part of the story.

What else?

Also memcached node failover is implemented: if a memcached node is not available anymore the session will be moved to anoder node - also the sessionId will be modified and a new JSESSIONID cookie will be sent to the browser. As you are using sticky sessions make sure that the loadbalancer does use only the "plain" sessionId, without the suffix.

How does the sessionId look like?

The memcached session manager knows a list of memcached nodes (e.g. as n1.localhost:11211 n2.localhost:11212 that he references by the specified id (n1/n2). This id is encoded in the sessionId, so the sessionId might be 602F7397FBE4D9932E59A9D0E52FE178-n1.

What has been implemented/fixed with the latest releases?

Here's a complete list of changes.

Is there a demo somewhere?

You want to see it in action? There's a sample webapp on github that comes with two tomcats and a sample web application built with wicket. The tomcats are configured to store sessions in memcached using kryo as serialization strategy. Just check out the project, mvn install the sample webapp and start memcached and the configured tomcats. Start playing!

转:Android调试的几个命令实践

原文:http://www.cnblogs.com/qianxudetianxia/archive/2012/05/14/2497073.html

在Android的应用开发中,我们会用到各种代码调试;其实在Android的开发之后,我们可能会碰到一些随机的问题,如cpu过高,内存泄露等,我们无法简单的进行代码调试,我们需要一个系统日志等等,下面我把握工作中碰到的几个常用命令和方法给大家演示实践一下。

1.logcat命令
这个命令最简单常用,可查看帮助,我不多说,如果需要打印时间,加参数-v time

adb logcat -v time 

2.bugreport命令

这个命令也非常简单,但是在实际应用中非常有用,会有从开机之后详细的dumpsys,dumpstate和logcat信息,是一份完整的日志记录。对分析用户行为,异常信息,系统状态有很大的参考作用。一般我们会把bugreport导出到电脑上分析。

adb bugreport > xxx.log

我再次强调,bugreport里面包含丰富的系统和用户信息,它是其他很多命令输出的结果的记录,非常有用。

3.dumpsys命令

这个查看系统信息,用的还是比较多的.

image 

例如查看某个程序内存信息:

#查看应用com.tianxia.test的内存使用情况
adb shell dumpsys meminfo com.tianxia.test

效果图如下:

image

里面的信息很有价值,尤其对于分析内存泄露,内存溢出都有极大的作用。

4.top命令

这个查看cpu信息太方便了。

top -m 5 -t

我们看看效果图,其中按cpu大小列出5个进程列表。

image 

com.tianxia.test的cpu过高,会导致手机发烫。同时利用这个信息,可以监控应用cpu的使用,以调整优化代码。

5.配置文件local.prop

目前网上没有查到local.prop的配置使用,工作中本人只使用过如下:

log.tag.SQLiteStatements=VERBOSE log.tag.SQLiteTime=VERBOSE

把上述文本加到/data/local.prop中,如果没有这个文件自行创建。然后重启手机,就能看到每个应用详细的查询数据库的sql语句信息,对于调试数据库,分析和优化数据库sql异常非常有用。

6.分析手机发烫

下面我们来实践一个例子,手机发烫太厉害,怎么找出问题?

首先我们写一个程序com.tianxia.test,死循环,核心代码如下:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        while(true) {
            System.currentTimeMillis();
        }
    }

这个应用打开后会一直获取系统时间,因为在主线程,肯定导致应用ANR,也会一直浪费系统cpu,手机发热,我们运行它。

假设我们不知道上述代码,我们来找到这个问题:

(1).找到发烫的应用。

使用top命令:

top -m 5 –t
image 

一看是com.tianxia.test占用85%的cpu,原来是这家伙在捣鬼。进程ID是644,这个后面我们有用。

(2).分析发烫的应用进程在干嘛

需要用到linux下的strace命令,但是android是没有集成这个命令的,android版本的下载地址:

http://benno.id.au/android/strace

下载完成后,上传到手机中:

我们adb push strace /system/bin,在模拟器上是上传到/system/bin会报out of memory错误,我们也可以上传到/data目录下,如果没有执行权限,还需要chmod 777 strace.

strace命令有很多参数,直接执行strace会显示使用说明:

image 
其中-p参数输入的就是进程号,第一步中我们找到com.tianxia.test的进程ID是644,我们看看这个应用占用这么高的cpu在干嘛?

strace -p 644

输出如下:

image

它的系统调用一直是gettimeofday,一直输出这个,显然哪里一定进入死循环了,而且是获取时间的死循环,然后结合logcat和代码,定位这段代码(就是前面我们给出的那段代码了)解决这个bug。

7.采集手机的cpu运行情况.

有时使用日志我们很难针对性的获取我们想要的信息,我们可能需要写一些最简单的脚步放在手机里面执行。

如监控cpu占用的记录cpu_log.sh:

# !/system/bin/sh
#这个脚步比较粗糙,是这么个意思
file=/sdcard/cpu/cpu_info.log
rm $file
until [ 1 -gt 10000 ]
do
echo -e "\n\n\n\n\n---------------">>$file
date >> $file
top -m 5 -n 1 >> $file
sleep 3
done

每隔3s中就会把手机的cpu的信息写到sdcard的cpu目录下的cpu_info.log文件中,方便我们后续分析。

ps:使用方法是 push到data目录下,赋予可执行权限,在shell下执行即可。

8.采集某个应用的内存数据

这个实践和上面的脚本类似,只是命令不一样我另外单独列出来,因为这个有时候很有用。

比如,我们要采集com.tianxia.test的内存使用情况,分析它是不是会内存泄露,脚步类似:

# !/system/bin/sh
#这个脚步比较粗糙,是这么个意思
file=/sdcard/cpu/mem_info.log
rm $file
until [ 1 -gt 10000 ]
do
echo -e "\n\n\n\n\n---------------">>$file
date >> $file
dumpsys meminfo com.tianxia.test >> $file
sleep 3
done

使用方法也是一样。

9.小结

零零碎碎的一直没有时间整理,有常用的也有不常用的,算是一些小技巧,感觉网上这方面的分享比较少,有时和朋友们谈起这些调试方法,特别是龙哥,硬是要求我今天写出来与大家分享,只好献丑,说不定对于解决一些疑难杂症有奇效,呵呵,想到什么写什么吧,想到几个写几个,也是一个学习的记录。