XiangXiChen's Blog

A Programmer's Blog

关于模型显示方式的一些想法

2013-05-20 | Comments

  • 桌面应用 比较有名的模型软件有Autodesk Navisworks,该款软件能够高效的浏览大数据模型,并且也提供了BIM相关的一些功能,在桌面应用的领域可以算是一个顶级的软件, 当然价格也相当昂贵了。

  • Web应用
  • Cloud应用

引用

C++ -- char VS signed char VS unsigned char

2013-04-24 | Comments

学习中……

WHAT
char:字符类型,但是不确定是有符号还是无符号类型,由编译器相关的。
signed char:有符号字符类型。一个字节大小,范围:-128 至 127
unsigned char:无符号字符类型。一个字节大小,范围:0 至 255

IDIOMS

  • 务必显式指定char类型的符号,因为char类型的符号是不确定的,在跨平台的应用中,直接使用char类型的程序容易出错。

PROBLEM

  • 为什么signed char的范围是-128至127?
    由于有符号char的0有两种方法:负零(1000 0000)和正零(0000 0000)。但是零并没有正负之分,所以把负零(1000 0000)定义为-128,因此signed char的范围为-128至127。

引用
1. http://www.cnblogs.com/chenleiustc/archive/2011/04/09/2010647.html

C++ -- About Return Type

2013-04-24 | Comments

学习中……

PROBLEMS
1.类成员函数的返回值。
//返回类成员变量的类型为类对象 class AClass{
public:
std::string getFeild(){ return mField; }
const std::string& getFeildBetter(){ return mField; }
private:
std::string mField;
}
void fun(const char* str); void main(){
AClass a; fun(a.getFeild().c_str());//Bad, Might be Crash fun(a.getFeildBetter().c_str());//No problem. }


引用

Read <<Linux-and-the-Unix-Philosophy>>

2013-04-23 | Comments

学习中……

读后感
读完该书,我发现了我有NIH综合症,理解了“小即使美”,明白软件系统的发展其实和人类的3个生长阶段差不多。虽然我并不是同意所有的观点,但是从中学到了不少东西,让我更加深入了解软件开发过程。

要点

  • NIH综合症
    看到这个词,让我很惊讶,这不是在说我吗?不可能,他又不认识我。看来得NIH综合症的人不少呀!
    细想一下,NIH综合征确实要不得,首先自己不是绝顶聪明的人,自己做出来的东西很难超越其他人的东西,既然这样,那何必要自己重新做一遍呢!倒不如直接使用已有的东西,从中学习和研究,并且找到改良的地方,来满足自己的需求。直到你有足够的经验,了解前人遇到的困难,能够“取其精华,去其糟粕”,这时候再提出自己的方案,这样不是更好吗。

  • 小即是美
    我很同意这个观点,但是怎么样的大小才算”小”?这个比较难把握。
    小的尺度很难把握,但是我们却可以通过这样的方法来保证我们的程序尽可能小:一个程序只做一件事情,一个功能只做一件事情,一个类只做一件事情,一个函数只做一件事情。

  • 一个程序只做好一件事情
    “一个程序只做好一件事情“应该是”小即是美“的一种具体做法了。很同意这种原则。
  • 尽快建立原型
    尽快建立原型确实好处多多,因为它可以直观的验证你的想法,并且其他人也可以直观的看到你的想法。
    这里有一个问题:是不是所有的程序都能快速的建立原型?如果不可以的话,有什么好办法?
    对于有些比较难的功能(特别是那些前瞻性的,研究性质的功能),想要快速建立原型,有时候是不大可能完成的,面对这样的功能,你只能“慢慢”来了。
  • 人类创造的“三个系统”
    人类的系统设计可以类比人的三个生命阶段:未成年,成年和老年。
  • 可移植性比高性能的优先级更高
    作者提出的观点是:机器的性能越来越高,同时机器的更新换代越越来越快,如果你的程序的移植性很差,那么你的程序将无法存活下来,相反,如果你的程序移植性很高,虽然性能差一些,但是在新的机器中可以袮补你目前的低性能。
  • 采用纯文本文件来存储数据
    这个观点是基于“可移植性优先级更高”的原则提出来的,文本文件的性能会比较差,但是移植性是一级棒的。
  • 充分利用软件的杠杆效应
    该原则说的就是我们应该避免NIH综合症,尽可能的使用已经存在的程序。同时你也应该允许其他人使用你的程序来发挥杠杆效应。
  • 使用shell脚本来提高杠杆效应和可移植性
  • 避免强制性的用户界面
    我无法理解该原则,对于一个普通用户来说,谁会去学习这么多的命令呀,谁又能记住那么多命令。不怪的Unix和Linux的普通用户的数量远远比不上Windows。
  • 让每一个程序都成为过滤器
  • 允许用户定制环境
  • 尽量是操作系统内核小而轻量化
  • 使用小写字母并尽量简单
    我不同意,该原则已经不大适用了,我觉得应该是该大写的就大写,该长的就长,不要吝啬那几个字母。
  • 保护树木
  • 沉默是金
    这是我无法忍受的原则。你的沉默就以为着我的痛苦,往往我需要痛苦的研究你为什么这么沉默。
  • 并行思考
  • 各部分之和大于整体
  • 寻求90%的解决方案
  • 更坏就是更好
  • 层次化思考

引用
1. <<Linux/Unix 设计思想>>

C++11 -- decltype

2013-04-16 | Comments

学习中……

WHAT
decltype用于缀取一个表达式的类型,并且通过decltype获取到的类型可以用于声明变量。decltype的语法如下:
unary-expression
...
decltype(unary-expression)
decltype(type-id)
typedef decltype(unary-expression) temp
...


下面是从文档Decltype and auto中摘取出来的,关于decltype更加详细的描述:
1. If e is a name of a variable in namespace or local scope, a static member variable, or a formal parameter of a function, decltype(e) is the declared type for that variable or formal parameter. Particularly, decltype(e) results in a reference type only if the variable or formal parameter is declared as a reference type.

2. If e is an invocation of a function or operator, either user-defined or built-in, decltype(e) is the declared return type of that function. The standard text does not list the prototypes of all built-in operators. For the operators and expressions whose prototypes are not listed, the declared type is a reference type whenever the return type of the operator is specified to be an lvalue.

3.decltype does not evaluate its argument expression.

4. The decltype taking a type parameter is an identity function: decltype(T) is equal to T for any type expression T.

HOW
auto x = 4;//x是类型int
decltype(x) y = x;//相当于auto y = x;或者int y = x;

auto add(int x, int y) ->decltype(x + y);//很有意思的用法


IDIOMS

PROBLEMS


引用
1. http://www.stroustrup.com/C++11FAQ.html#decltype
2. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf
3. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf
4.http://cpp-next.com/archive/2011/04/appearing-and-disappearing-consts-in-c/