CWYAlpha

Just another WordPress.com site

Archive for 四月 2012

Thought this was cool: C++ namespace的用法

leave a comment »

//namesp.h
namespace pers{
    const int LEN = 40;
    struct Person{
        char fname[LEN];
        char lname[LEN];
    };
    void getPerson(Person &);
    void showPerson(const Person &);
}

namespace debts{
    using namespace pers;
    struct Debt{
        Person name;
        double amount;
    };
    void getDebt(Debt &);
    void showDebt(const Debt &);
    double sumDebts(const Debt ar[], int n);
}

第二个文件:

//namesp.cpp
#include <iostream>
#include "namesp.h"

namespace pers{
    using std::cout;
    using std::cin;
    void getPerson(Person &rp){
        cout<<"Enter first name: ";
        cin>>rp.fname;
        cout<<"Enter last name: ";
        cin>>rp.lname;
    }
    
    void showPerson(const Person &rp){
        cout<<rp.lname<<", "<< rp.fname;
    }
}


namespace debts{
    using std::cout;
    using std::cin;
    using std::endl;
    
    void getDebt(Debt & rd){
        getPerson(rd.name);
        cout<< "Enter debt: ";
        cin>>rd.amount;
    }
    
    void showDebt(const Debt &rd){
        showPerson(rd.name);
        cout<<": $"<<rd.amount<<endl;
    }
    
    double sumDebts(const Debt ar[], int n){
        double total  = 0;
        for(int i = 0; i < n; i++){
            total += ar[i].amount;
        }
        
        return total;
    }
}

第三个文件:

//namessp.cpp
#include <iostream>
#include "namesp.h"

void other (void);
void another(void);

int main(void)
{
    using debts::Debt;
    using debts::showDebt;
    Debt golf = { {"Benny","Goatsniff"},120.0};
    showDebt(golf);
    other();
    another();
    
    return 0;
}


void other(void)
{
    using std::cout;
    using std::endl;
    
    using namespace debts;
    Person dg = {"Doodle", "Glister"};
    showPerson(dg);
    cout<<endl;
    Debt zippy[3];
    int i;
    
    for(i = 0; i < 3; i++){
        getDebt(zippy[i]);
    }
    
    for(i = 0; i < 3; i++){
        showDebt(zippy[i]);
    }
    
    cout<<"Total  debt: $" <<sumDebts(zippy,3)<<endl;
    return;
}

void another(void){
    using pers::Person;
    
    Person collector = {"Milo", "Rightshift"};
    pers::showPerson(collector);
    std::cout<<std::endl;
}

C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型 的函数 提供函数原型;并将函数 定义放在一个独立的源代码当中.头文件和源代码文件一起定义和实现了用户定义的类型 及其使用方式.最后,将main()和其他这些函数的函数放在第三个文件中.

本文链接

from 博客园_业精于勤,荒于嬉;行成于思,毁于随: http://www.cnblogs.com/hnrainll/archive/2012/04/27/2474215.html

Written by cwyalpha

四月 27, 2012 at 3:08 下午

发表在 Uncategorized

Thought this was cool: 版本控制入门简介

leave a comment »

版本控制已经出现有些年头了。然而,我还是会被人问起一些,诸如版本控制是什么或者它是如何工作的,这样基础的问题。本文会概括地解释版本控制解决的重要问题,本文使用的场景针对的是源代码版本控制。
目前有很多不同类型的版本控制系统(Version Control System, VCS)。一些VCS,比如SubversionCVS,以中央仓库(repository)为中心进行架构。此外,还有分布式的VCS(Distributed VCS,DVCS), GitMercurial 是两个新近出现的DVCS。然而,在上述两种类型的环境中,通常会有一个“指定的”中央仓库。对应地,比如一个Subversion服务器或者一个GitHub仓库。下面会基于这个场景进行图示说明。那么让我们开始吧。

在开发者拷贝到本机之前,服务器需要创建一个仓库。创建初始仓库会由于产品不同而有所差别。从现在起,你所要知道的就是,在服务器上有一个初始空间。我把这个版本称作版本“A”。

现在,每个开发者(开发者1和开发者2)都会拷贝版本“A”到他们本地电脑。再一次地,从服务器拷贝的过程会由于产品不同采用的技术会有所差别。

每个开发者会在他们的本地拷贝上进行开发。他们的本地拷贝基于版本“A”。然而,由于他们应该不会做同样的开发,因而他们的版本会有所差别。因此,会有2个以上的版本会同时被创建,比如版本“B”和版本“C”。


开发者1首先完成了她的工作并提交到服务器。服务器上的当前版本被更新成版本“B”。


开发者2现在完成了他的工作并试图提交到服务器。然而,这是服务器告知他基于开发的版本已经发生改变。这也是为什么采取版本控制的首要原因之一。这个特性是对网络共享代码然后由开发者手动更新的一个跨越式发展,这确保了之前的编辑没有被新的修改覆盖。


开发者2必须首先获得所有版本“B”的变化,并合并到他的修改中,然后才可以提交到服务器。这个过程听起来有些复杂。然而,大多数现代的版本控制系统十分
高级,能够自动在开发者的本地拷贝上完成合并。有几种情况会产生冲突(例如:开发者1和开发者2同时修改了同一个文件的同一行)。这就是一些VCS产品比
其他更高级的地方。不论如何完成合并,现在开发者2在他们的本地系统上同时混合了版本B和版本C。


现在开发者2可以提交他的版本到服务器。

这是一个版本控制的基础。通过注意观察图中服务器的连线可以发现版本控制的原理。服务器记录了所有先前的版本包括发生的变化,什么时候发生以及由谁进行修改。当需要进行代码回溯或者引入其他bug时,这个记录能够解除困境。
我希望本文能够为版本控制系统提供一个基础的介绍。如果你有任何疑问,请就你问题发表评论。

英文原文:greenmoonsoftware 编译:伯乐在线 – 唐尤华

本文链接

from 博客园_业精于勤,荒于嬉;行成于思,毁于随: http://www.cnblogs.com/hnrainll/archive/2012/04/27/2473945.html

Written by cwyalpha

四月 27, 2012 at 12:08 下午

发表在 Uncategorized

Thought this was cool: 搜狗发布号码通 带大量号码黑名单数据库 可拦截中介号码

leave a comment »

搜狗崭新上架一款号码辅助识别软件-号码通,通过抓取互联网中的公开电话信息,建立起海量号码数据库,让诈骗,中介,推销等骚扰号码无处遁形。同时,软件 还专门设计“标记”功能,每一个用户都可以对陌生的骚扰号码进行分类标记,充分利用智慧众包,让那些漏网的骚扰电话瞬间陷入人民战争的汪洋大海之中。

下载:搜狗号码通

乍看起来号码通这个防骚扰软件与搜狗常规的业务毫无关联,但据搜狗桌面事业部总经理杨洪涛表示,其实号码通与搜狗背后的强大的搜素引擎技术密不可分,正是 有了搜索技术的存在,才可以全面的对互联网上业已公开的电话信息进行分门别类的动态统计,并能够做到实时更新,为打造海量号码数据库铺垫了坚实的基础。据 透露,仅仅在软件上线初期,此数据库业已收集了超过800万条信息,并且仍在不断增长当中。当未知号码来电的时候,号码通软件能够提示出该号码的背景信 息。

除了利用搜索引擎技术收集海量号码信息之外,号码通创新设计的“标记Ta”功能利用广大用户的群体智慧,每次挂掉骚扰电话都可以干脆利落的“标记Ta”, 到底是无聊推销,还是无良中介,都可以分门别类的注明。同时每个用户对骚扰号码的评价将分享给其他用户,彻底摆脱接到骚扰电话后的自认倒霉的无奈,让层出 不穷的骚扰电话彻底歇菜。

号码通同时覆盖了安卓和iOS(囿于苹果接口限制,目前仅能在越狱手机上安装)两大平台,还集成了归属地显示,垃圾短信过滤和黑名单等实用功能,充分为用户的体验做了深度优化,界面简洁,功能纯粹,深刻诠释了“Less is more”的概念。

 


© 推荐 for 互联网的那点事, 2012. |
Permalink |
No comment |
Add to
del.icio.us

Post tags:

你可能也喜欢:


HT实验室: 搜狗输入板,小身材,大味道 (@tech2ipo)


搜狗浏览器1.4公测版发布 新增在线收藏 (@syncoo)


搜狗三重棋


搜狗浏览器发布1.3beta版 首创“全网加速”功能


搜狗浏览器1.1论坛预览版第四版发布 提供下载

无觅

Feed enhanced by Better Feed from Ozh

from 互联网的那点事: http://www.alibuybuy.com/posts/72752.html

Written by cwyalpha

四月 27, 2012 at 12:08 下午

发表在 Uncategorized

Thought this was cool: Quotes of the fucking day: 第三次工业革命

leave a comment »

Economist的这篇文章http://www.economist.com/node/21553017很有意思。

一句话点中3D打印的要害:

The geography of supply chains will change. An engineer working in the middle of a desert who finds he lacks a certain tool no longer has to have it delivered from the nearest city. He can simply download the design and print it.

关于制造业 vs 服务业:

They spend billions backing the new technologies which they, in their wisdom, think will prevail. And they cling to a romantic belief that manufacturing is superior to services, let alone finance.

The lines between manufacturing and services are blurring. Rolls-Royce no longer sells jet engines; it sells the hours that each engine is actually thrusting an aeroplane through the sky.

越来越喜欢读Economist了,语言简单明了,废话少。

第三次工业革命可能让tg有点吃惊,信息革命可不止是替代了邮局那么简单。

via

from hUrR DuRr: http://blog.est.im/archives/4604

Written by cwyalpha

四月 27, 2012 at 7:53 上午

发表在 Uncategorized

Thought this was cool: 如何制作chrome扩展程序

leave a comment »

简单实现了一个 chrome 的扩展,方法如下:

首先新建一个文件夹,用编辑器写一个文件名为 manifest.json 的文件:

{

  “name”: “抓猫!”,

  “version”: “1.0”,

  “description”: “你能抓住她吗?”,

  “browser_action”: {

  “default_icon”: “icons/icon_19.png”,

  “popup”: “files/game.html”

  },

  “icons”: {

    “16”: “icons/icon_16.png”,

    “19”: “icons/icon_19.png”,

    “32”: “icons/icon_32.png”,

    “48”: “icons/icon_48.png”,

    “128”: “icons/icon_128.png”

  }

}

这其中,如果需要多语言支持的话,可以添加default_locale,并将name&description字段修改为:

{

  “name”: “__MSG_name__”,

  “description”: “__MSG_description__”,

  “default_locale”: “zh_CN”

}

并在插件目录下添加 _locales 目录,内置语言文件,如图所示:

这其中 messages.json 内容如下:

{

  “name”: {“message”: “Catch Cat!”},

  “description”: {“message”: “Can you catch it ?”}

}

插件主程序完成后,直接编写插件所调用的html就可以了 “popup”: “files/game.html”

调试时,可以勾选chrome浏览器扩展程序里面的“开发人员模式”,载入正在开发的扩展程序即可。

开发完成后,使用浏览器打包扩展程序,就可以发给朋友们玩了。欢迎下载体验:

http://uicss.cn/test/catch-cat.crx

相关日志:


0

   

0

IT 牛人博客聚合网站(udpwork.com) 聚合
|
评论: 0
|
10000+ 本编程/Linux PDF/CHM 电子书下载

from IT牛人博客聚合网站: http://www.udpwork.com/item/7186.html

Written by cwyalpha

四月 27, 2012 at 7:53 上午

发表在 Uncategorized

Thought this was cool: 智能电视UI设计那些事儿

leave a comment »

随着国际市场上Google TV的发布和国内电视厂商纷纷推出定制Android TV的脚步,一时间智能电视平台成为了众多高科技企业争相抢占的新市场。较早的智能电视平台探索者有Google TV、Apple TV和Samsung Smart TV,还有传说中将要上市的iTV。 国外一些知名服务,如Youtube、Twitter、Netflix等,均在这些平台上发布了应用。国内电视厂商多使用Android平台,我们就来谈谈在Android TV上设计app的那些事儿。

智能电视的使用特点——距离远、光线暗、操作心态较被动


【图1】电视使用环境

TV的使用环境较为特殊。智能电视尺寸大都大于42寸,其使用环境应该在2.7-3.5米之间。所以虽然TV的显示屏面积远大于多数PC,但因其操作距离远,导致单屏展示的信息量比PC要少。


【图2】客厅灯光环境
如【图2】所示有很多用户在使用TV时身体后仰、灯光昏暗、有可能一手吃着零食一手拿着遥控器操作电视。这种”后仰“状态决定了 :


TV用户较为被动,与TV交互更多是作为信息的接受者,无法达到一种沉浸式的状态。

因此在TV的界面设计上最好让用户通过方向键和OK能够进行操作,并提供返回键,避免用户低头看遥控器寻找按键而打断操作的任务流。

【图3】TV平台上的app应用

通常用户对TV发出的声音并不会感到反感或干扰,因为TV上的频道和app多为“消费性”内容,且TV标配音响系统(音量是默认开启的)。所以在app设计中,可以使用声音作为帮助提示和操作反馈提示。

导航设计——遥控器和导航结构

说到TV的UI设计,就不得不从导航开始。如上文所述,TV用户较为被动,所以需要清晰高效的导航系统来帮助用户快速定位到想要看的内容。

导航方式与输入设备息息相关,智能电视最主要的输入设备还是遥控器,有时还辅以鼠标和键盘。下面的图例是Google TV和Apple TV的输入设备。


【图4】Google TV和apple TV的输入设备

从图中我们可以看出新的智能电视输入设备以十字方向键和OK键为核心,所以TV app的导航要基于上述方向键和OK键进行设计。


【图5】Xbox和PS3的导航界面

由于智能电视平台app较新,这里我们参考较为成熟的电视平台游戏系统来进行讨论,上图分别是XBOX和PS3的操作界面,这两款产品能被借鉴因为它们的操作方式和使用环境和智能电视系统较为一致。它们都用了十字导航的结构。这种结构的优点在于主导航和二级导航同时展开,并且与十字方向键完美契合,可以通过方向键在主导航和二级导航间快速切换。使用这种结构时,二级导航中的item只能进行单一操作,因为方向键受到了主导航占用。如果对二级导航中item进行多维操作,则需要确认展开下一级列表.


【图6】Google TV的导航界面

上图为Google TV的操作界面,它采用了左右分栏的模式,左边是导航,右边是一个二级内容的容器。这种结构的逻辑其实和前面所述的十字导航区别并不是很大,不同的是容器里面的信息更加扁平、直观和可视化,容器里面item操作的方向不会受到限制。但相应地,如果想把焦点从容器中移回到左侧导航需要更高的操作成本。

【图7】Samnsung SmartTV的导航界面
上图为最近发布的Samsung Smart TV,它采用了区块式的导航结构。这种结构中每个区块独立操作,信息组织更加扁平化,有的模块和widget概念比较相似,既是信息的呈现也可以作为操作的入口。不足之处是,各个模块中item的方向操作会有一定限制,不然会导致各个模块切换的操作成本增加。

 


【图8】Cover flow和list信息组织方式
另外还想介绍的两种信息展示方式,就是左图中的Cover Flow和右图中的List,这两种方式都采用了单方向导航。Cover Flow这种方式视觉冲击力较强,单屏信息承载有限,焦点的移动两种方式将在后文陈述; 右边这种列表方式视觉冲击力较弱,单屏信息量较大,但在TV平台处理List时候和PC上有所区别:TV app不需要滚动条,而且要控制List的长度,因为尽管遥控器方向键可以启用长按加速,不过始终无法达到像PC端鼠标拖拽滚动滑块控制浏览速度和定位的表现。

【图9】导航项的三种状态
在基于十字方向键上设计导航时,导航项一般存在三种状态,即“selected”,“focused”和“selected and focused“。导航上如果有类别项(category)和动作项(action)那么导航获得焦点时,焦点移动不会切换右边容器中内容。当导航上全部为类别项时,焦点可以和选中态一起移动,右边容器随焦点移动切换内容。

总而言之,导航设计原则如下:


导航设计的目标,是让用户快速定位,并且能够预测出操作结果。

 

焦点控制

导航架构完后,就是焦点移动的问题,下面几个图例简单介绍了一下在TV平台上焦点移动的问题。

【图10】导航焦点态响应面积
遥控器是所有电视标配,而智能电视一般还都支持鼠标和键盘操作,所以控件的状态和PC上有些类似。使用遥控器操作的时候,控件的状态相当于用TAB键浏览网页或者操作桌面软件即控件选中态切换,而使用鼠标操作的时候和PC端一样控件要有hover的状态。因为TV的操作距离非常远,而且TV的外接鼠标可能是空鼠等(其操作不像PC上鼠标一样容易),所以在设计TV控件时针对鼠标hover状态要增加其响应面积,方便用户操作。


【图11】焦点在列表中移动
上图左边示例是一个典型的Cover Flow式的导航,这种情况下页卡滚动,焦点却一直固定在中央。在单向列表或者导航时候,这种焦点固定的方式可以很好的避免当列表中项目较多时,导航焦点一直停留在列表底部也就是屏幕边角(用户视线长时间停留边角)而造成的疲劳。

上图右示例相反,页卡不动,焦点移动选择。在这种方式下,当焦点移动到列表最右端继续滚动时,最好采用翻页效果。这种效果一是解决了上述视线停留边角问题,二是可以和page controller控件结合在一起,让用户知道在列表中所处位置。


【图12】焦点移动路径
上图是从Google TV设计指南中截出来的一张图,提倡使用图中绿色的路径,避免使用红色的对角线方向路径:

1.  纯焦点移动路径最好平直且区域对齐,上图所示,如果从A沿绿线移动到B可以较好的被用户感知和理解;如果沿红线移动则不符合用户预期;
2.  高焦点移动要避免大范围转移,大范围转移的焦点会让用户感到焦点丢失;

最后,就是焦点和控件的关系。PC和移动设备上很多控件都具有很强的点击感,因此用户可以较清楚的区分控件和非控件元素。在TV平台上因为输入设备是基于遥控器设计,失去了控件常见的点击感觉,用户区分哪些元素是说明性的和哪些是控件会产生困难。 因此在TV平台上控件设计尽量可以达到

可视元素可获得焦点,提示和说明性元素,要在视觉上和空间位置上与控件做出明显的区分。

 

颜色和分辨率

【图13】颜色错误使用
针对TV显示器的本身特性,在进行UI的视觉层面的设计中需要注意以下几点:

1.   纯白(#FFFFFF)在电视会产生图像拖影,如需使用白色,可以用#F1F1F1(hex) 或者240/240/240(RGB)进行代替;
2.   高饱和度颜色会导致显示失真,并且在高饱和度颜色向低饱和度颜色过渡时会产生边缘模糊;
3.   大范围渐变会导致带状显示,无法平滑过渡;
4.   在界面边缘最好留出10%空隙,避免发生电视显示屏独有的“过扫描(踩边)”现象。

【图14】分辨率和色彩模式
现阶段智能电视有两种分辨率模式1920×1080和1280×720,也就是我们常说的1080p和720p,在进行UI设计时候应该:

1.   高分辨率设计,可以使用android 9-patch切图进行低分辨率适配,在测试的时候选择用低分辨率测试可以更好的发现问题;
2.   确保在TV所有显示模式下经过测试,都不会产生问题。

 

新的交互方式
最后想介绍一些TV平台上最近出现的交互方式:

【图15】TV平台新颖的交互方式
XBOX上已经出现了利用手势进行控制和语音控制导航。手势控制在XBOX的Kinect上已经取得了成功,但问题在于需要依赖三维摄像头这个目前还比较昂贵的设备,而二维摄像头所用手势操作,用户体验并未达到理想的效果。至于语音控制,现有设备基本上可以完全支持,在《乔布斯传》中乔布斯声称已经破解了智能电视密码,其核心就是语音控制。

另一个新颖的交互点则是Samsung Smart TV的密码输入模块。众所周知,文本输入一直是遥控器的一个梦靥。在PC和移动设备上所有的输入都是一步,及所选即所得。在TV上的输入总是“选择—确认”,打断了用户连续输入的“任务流“。而上图电视上的软键盘则建立了和遥控器九宫数字键的映射,按遥控器上的数字键就会把电视上的软件盘的字母输入到输入框中,这种做法在“独占性”的任务流中可以增加文本输入效率。

文章部分图文参考了Google TV 和Samsung Smart TV的设计指引,感兴趣的话可以点击以下链接进行扩展阅读。
Google TV Design Pattern

Samsung Smart TV User Experience Guidelines

 


© 推荐 for 互联网的那点事, 2012. |
Permalink |
No comment |
Add to
del.icio.us

Post tags: ,

你可能也喜欢:


MegaPhone通过智能手机让电视更具交互性 (@tech2ipo)


PlayJam在LG智能电视上植入游戏,游戏正进入所有平台 (@tech2ipo)


产品UI设计流程


社会化浏览器Nexus概念UI设计


解析应用程序UI设计的15项黄金法则

无觅

Feed enhanced by Better Feed from Ozh

from 互联网的那点事: http://www.alibuybuy.com/posts/72744.html

Written by cwyalpha

四月 26, 2012 at 4:39 下午

发表在 Uncategorized

Thought this was cool: 外国人的免疫系统落后中国人十年

leave a comment »

外国人的免疫系统落后中国人十年

来自广东省广州市的匿名人士对新闻:《卡巴斯基:苹果在安全方面落后微软十年》的评论
from cnBeta.com精彩优秀评论: http://www.cnbeta.com/articles/184435.htm

Written by cwyalpha

四月 26, 2012 at 3:38 下午

发表在 Uncategorized