25 Feb 2011

10个完全免费的网页原型(线框图)工具[ZT]



网页的线框图是非常直观、但是也没什么技术上难点的东西。只需要你大概描出页面上需要的一些元素,比如头部、导航、页脚等等,最多再就是一些交互、内容区域什么的。

但这对于任何网络应用的开发都是非常重要的。

当然有很多种方法可以做这件事情,最简单的就是拿起纸和笔,但是在这篇文章中,我们要介绍的是一些非常高效好用的在线原型工具,并且他们完全免费。


Lumzy 快速原型工具


原文请见:http://goo.gl/uEfZy

使用Lumzy你可以为你的应用创建原型图,还能添加一些交互事件。有了它,你可以创建弹出框,交互的页面导航,添加外部链接等等。他对于团队协作设计和交流提供了一个很好的平台,而且他完全免费。

Lumzy快速原型工具


Mockup Builder 杀手级的原型工具


MockupBuilder最近才发布,很值得期待。他有非常多的功能:UI模型,交互的线框图,页面布局,客户端原型甚至站点地图和屏幕导航。


当然,对于与客户和团队成员交流也是非常强大的。并且,他全部免费。

Mockup Builder杀手级的原型工具


Tiggr协作制作原型图


Tiggr的思想是给你需要做成最终稿的所有资源。你可以设计很多的元素,然后分享,其他的协作用户会帮你制作相应HTML/CSS代码,以达到最快生成。花10秒钟注册,你就能享用这个免费的东东了。


Tiggr协作原型


Frame Box轻量级原型在线制作


FrameBox并没有多么特别的特色。你可以拖放、设置大小、复制粘贴这些UI组件,但是他的特色在于你可以非常轻松的通过它的拖拽很容易就完成你的原型制作。想要用这个轻量级的免费的工具,也需要注册一下。

Frame Box轻量级原型


SimpleDiagrams 免费版(Adobe Air App)


simplediagrams是一个非常小巧的Adobe Air程序,通过他你可以非常轻松的实现自己的想法。拖拽组件,添加图片或者便签,导出PNG图都是他的特色,通过添加一些小功能就能实现一个非常不错的原型图。

SimpleDiagrams


iPhone MockupiPhone原型制作


在iPhone Mockup里面你可以使用铅笔模式,也可以使用图表模式的编辑器。不管你选择什么,功能都是一样的,都可以很简单很方便的生成iPhone上的应用原型。你也可以分享给别人,就算你更改了设计,别人通过那个链接也一样可以看到。


iPhone Mockup


fluidIA


fluidIA是一个在线的但是可以下载的富用户界面原型设计工具。它基于面向对象的理念,可以让你快速完善。它设计的基本思想是团队中的任何成员,无论是设计师还是工程师都可以自由的设计自己的原型。最近fluidIA的更新稍微慢了点,但是它仍是一个非常优秀的线框图工具。

fluidIA


Pencil ProjectFireFox插件


Pencil Project是一个原型界面设计的Firefox插件,通过它内置的模板,你可以创建可链接的文档,并输出成为HTML文件、PNG、OpenOffice文档、Word文档、PDF。还有什么可说的呢?这么优秀的插件,是每个设计师和开发人员必备啊。

Pencil Project Editor Screenshot


CogToolWin MAC下应用程序


CogTool是一个强大原型生成工具,他与别的工具还有一些不同,他可以对你的设计自动根据人类认知模型进行评估。你可以通过一些图标啊按钮啊图片,生成一个描述,然后点击评估的按钮,他就会对你的设计进行人类认知模型的评估,他会告诉你一般人需要多久才能理解你的意图。CogTools有很多用户引导的文档,还有很多教程,论坛上也能让你很快的成长起来。


CogTool


Prototype Composer


Prototype Composer可以让你在真正的代码编写之前就看到网站是如何运行的。以前的那些无数的文字入口,复杂的数据结构以及技术含量不低的UML图,这个工具可以让你很方便的协作完成一个看起来能运行的程序。

社区版本是免费的,他可以让你以用户定义的一个项目做一个样例程序。

Prototype Composer


DUB – DENIM(跨平台应用程序)


DENIM是一个跨平台的桌面程序。他自己的介绍是为早期网站设计提供帮助的非正式工具。

他有很多理念来自于纸笔设计原型。你可以快速的画出草图,保证重要的功能优先。但是跟纸笔的草图不同的是,他还可以有交互和动画。

DENIM


python Bezier Curve Class

Bezier Curve:
Quadratic

Cubic

Quartic

为了学习Bezier曲线生成算法,分别用python和matlab写了遍计算过程.
Bezier曲线次数比控制点个数少1,所以对于高阶曲线没有一一对比,仅用2次曲线做了对比(2d和3d的情况)

用python的numpy和matplotlib这2个库.
验证只验证了2次曲线.分别用逐点计算(上面三个图)的方法和bezier类的方法作比较,
三维曲线需要用matplotlib的插件Axes3D.
效果图:(点击看大图)
前2个分别用逐点计算和推导,从第3个是用类直接生成,可以看出一模一样.
4,5是测试类的2个方法:单独加点和加点的list,最后一个是测试3D bezier曲线

matlab由于矩阵运算非常方便,没有构造类,直接用matrix计算,为了跟python比较.
略去了前2个,3-6跟python一样.
效果图:(点击看大图)

计算方法参考






参考网站
http://en.wikipedia.org/wiki/Bezier_Curve#Constructing_B.C3.A9zier_curves
http://www.ibiblio.org/e-notes/Splines/Bezier.htm

5 Feb 2011

Sikuli New AutoHotkey



项目主页Project Sikuli

What's SIKULI?

Sikuli is a visual technology to automate and test graphical user interfaces (GUI) using images (screenshots). Sikuli includes Sikuli Script, a visual scripting API for Jython, and Sikuli IDE, an integrated development environment for writing visual scripts with screenshots easily. Sikuli Script automates anything you see on the screen without internal API's support. You can programmatically control a web page, a Windows/Linux/Mac OS X desktop application, or even an iphone or android application running in a simulator or via VNC.

24 Jan 2011

OpenGL显示字符

假如要显示的文字全部是ASCII字符,则总共只有0到127这128种可能,因此可以预先把所有的字符分别装到对应的显示列表中,然后在需要时调用这些显示列表。
Windows系统中,可以使用wglUseFontBitmaps函数来批量的产生显示字符用的显示列表。函数有四个参数:

第一个参数是HDC,学过Windows GDI的朋友应该会熟悉这个。如果没有学过,那也没关系,只要知道调用wglGetCurrentDC函数,就可以得到一个HDC了。具体的情况可以看下面的代码。
第二个参数表示第一个要产生的字符,因为我们要产生0到127的字符的显示列表,所以这里填0。
第三个参数表示要产生字符的总个数,因为我们要产生0到127的字符的显示列表,总共有128个字符,所以这里填128。
第四个参数表示第一个字符所对应显示列表的编号。假如这里填1000,则第一个字符的绘制命令将被装到第1000号显示列表,第二个字符的绘制命令将被装到第1001号显示列表,依次类推。我们可以先用glGenLists申请128个连续的显示列表编号,然后把第一个显示列表编号填在这里。
还要说明一下,因为wglUseFontBitmaps是Windows系统特有的函数,所以在使用前需要加入头文件:#include 。
#include 
// ASCII字符总共只有0到127,一共128种字符
#define MAX_CHAR        128
void drawString(const char* str) {
    static int isFirstCall = 1;
    static GLuint lists;
    if( isFirstCall ) { // 如果是第一次调用,执行初始化
                         // 为每一个ASCII字符产生一个显示列表
         isFirstCall = 0;
         // 申请MAX_CHAR个连续的显示列表编号
         lists = glGenLists(MAX_CHAR);
         // 把每个字符的绘制命令都装到对应的显示列表中
         wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
     }
     // 调用每个字符对应的显示列表,绘制每个字符
    for(; *str!='\0'; ++str)
         glCallList(lists + *str);
}
显示列表一旦产生就一直存在(除非调用glDeleteLists销毁),所以我们只需要在第一次调用的时候初始化,以后就可以很方便的调用这些显示列表来绘制字符了。
绘制字符的时候,可以先用glColor*等指定颜色,然后用glRasterPos*指定位置,最后调用显示列表来绘制。

void display(void) {
     glClear(GL_COLOR_BUFFER_BIT);
     glColor3f(1.0f, 0.0f, 0.0f);
     glRasterPos2f(0.0f, 0.0f);
     drawString("Hello, World!");
     glutSwapBuffers();
}

字体修改
void selectFont(int size, int charset, const char* face) {
    HFONT hFont = CreateFontA(size, 0, 0, 0, FW_MEDIUM, 0, 0, 0,
        charset, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
        DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, face);
    HFONT hOldFont = (HFONT)SelectObject(wglGetCurrentDC(), hFont);
    DeleteObject(hOldFont);
}

调用
void display(void) {
    selectFont(48, ANSI_CHARSET, "Comic Sans MS");

    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1.0f, 0.0f, 0.0f);
    glRasterPos2f(0.0f, 0.0f);
    drawString("Hello, World!");

    glutSwapBuffers();
}

18 Jan 2011

外接液晶屏幕有水波纹【终极解决办法】

问题关键词:
笔记本外接显示器,一般是液晶显示器,出现水波纹,出现闪屏,并且,症状会在放电影的时候加重,颜色越深约明显。如果将笔记本电源拔掉,水波纹消失,一切回复正常。一旦插上电源,外接屏幕又开始闪屏。

此症状一般在大显示屏(20寸以上)会经常出现。

这个问题,至少在我周边两位同事都有同样的现象出现,并且,百思不得其解。

尝试了N多办法:换插线板;插在不同的插线板上;移走干扰设备;还订购了加粗了“VGA”线

正解是:将笔记本的三脚插头,接上一个“二脚转接头”,也就是将笔记本电源适配器的三脚插头变成二脚插头,再接到接线板上即可.

6 Jan 2011

VS2008 OpenGL 配置


方式一:----->
第一步,选择一个编译环境
现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev- C++等,它们都是支持OpenGL的。我选择Visual Studio 2008作为学习OpenGL的环境。
第二步,安装GLUT工具包
GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。
Windows环境下的GLUT下载地址:(大小约为150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
Windows 环境下安装GLUT的步骤:
1、将下载的压缩包解开,将得到5个文件
2、把glut.h复制到x:\Program Files\Microsoft\Visual Studio 9.0\VC\include\GL文件夹中,如果没有GL这个文件夹则可以自己新建一个。
3、把解压得到的glut.lib和glut32.lib放到静态函数库所在文件夹(即与include并排的lib文件夹下)。
4、把解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32 文件夹内。
第三步,建立一个OpenGL工程
选择 File->New->Project,然后选择Win32 Console Application,(不是 win32 application).选择一个名字,然后按OK。
在弹出的对话框左边点Application Settings,找到Empty project 并勾上,选择Finish。然后向该工程添加一个代码文件,取名为“OpenGL.c”,注意用.c来作为文件结尾。
搞定了,就跟平时的工程没什么两样的。

第一个OpenGL程序
一个简单的 OpenGL程序如下:(注意,如果需要编译并运行,需要正确安装 GLUT,安装方法如上所述)
#include 
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
    glFlush();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow(" 第一个OpenGL程序");
    glutDisplayFunc(&myDisplay);
    glutMainLoop();
    return 0;
}
该程序的作用是在一个黑色的窗口中央画一个白色的矩形。下面对各行语句进行说明。

首先,需要包含头文件#include ,这是GLUT的头文件。
本来OpenGL程序一般还要包含和,但GLUT的头文件中已经自动将这两个文件包含了,不必再次包含。

然后看main函数。
int main(int argc, char *argv[]),这个是带命令行参数的main函数,各位应该见过吧?没见过的同志们请多翻翻书,等弄明白了再往下看。
注意main函数中的各语句,除了最后的return之外,其余全部以glut开头。这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。
1、glutInit,对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句 glutInit(&argc, argv)就可以了。
2、 glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。更多信息,请自己Google。当然以后的教程也会有一些讲解。
3、glutInitWindowPosition,这个简单,设置窗口在屏幕中的位置。
4、 glutInitWindowSize,这个也简单,设置窗口的大小。
5、glutCreateWindow,根据前面设置的信息创建窗口。参数将被作为窗口的标题。注意:窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
6、 glutDisplayFunc,设置一个函数,当需要进行画图时,这个函数就会被调用。(这个说法不够准确,但准确的说法可能初学者不太好理解,暂时这样说吧)。
7、glutMainLoop,进行一个消息循环。(这个可能初学者也不太明白,现在只需要知道这个函数可以显示窗口,并且等待窗口关闭后才会返回,这就足够了。)

在glutDisplayFunc函数中,我们设置了“当需要画图时,请调用myDisplay函数”。于是myDisplay函数就用来画图。观察 myDisplay中的三个函数调用,发现它们都以gl开头。这种以gl开头的函数都是OpenGL的标准函数,下面对用到的函数进行介绍。
1、 glClear,清除。GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西,但这里不作介绍。
2、 glRectf,画一个矩形。四个参数分别表示了位于对角线上的两个点的横、纵坐标。
3、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。其作用跟fflush(stdout)类似。
===============================================================
这个时候会有一个控制台和一个窗口,如果不想让它显示这个控制台,则要以文件中加入
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
===============================================================
方式二:----->
1、建工程同一。
2、把所需要的头文件和.lib文件都放在工程下
3、在源文件中这样引用:
   #pragma comment( lib, "glut32.lib")
  
   #include "glut.h"
当然,想加入哪个lib或是.h就把它写在这里就OK了。

注:#pragma comment(lib,"glut32.lib")表示链接glut32.lib这个库。
和在工程设置里写上链入glut32.lib的效果一样,不过这种方法写的
程序别人在使用你的代码的时候就不用再设置工程settings了。

强烈推荐此法。