Bit field
一般在C++代码里面遇到的基本类型bool, char, short, int, etc, 都是说占多少个字节, 也就是最少也是一个字节. 那有时候会不会1个字节就多余了, 或者说1个字节不单只可以表示true/false, 还可以表示更多的信息呢? 毕竟1个字节=8bits=2^8=256个状态.
Part 1
Bit field 貌似就是想充分利用内存. 下面是我看了参考(Reference那一节列了一些)之后做的实验:
#include <cstdio>
// 交通繁忙时间
enum CallTariff { tOffPeak, tMediumRate, tPeakTime } ;
// 账单
struct Bill
{
unsigned int iNameId; // 客户名
CallTariff eTariff;
};
struct BillVIP
{
unsigned int iNameId; // 客户名
bool isVIP ...
Volume Data Visualization
上周五Sq.B突然说起L.F到一个创业公司做Director of Engineer了,
http://www.datifex.com
为L.F高兴的同时, 这家公司很是吸引. 它的team介绍中很多都很牛的背景呢.
big data visualize ...
这年头连zf都在说大数据, 我不熟悉, 但好像他们的出发点都是怎么从大数据中获利, 例如怎么分析得到情报, 而visualization貌似可以帮到他们啊, 这就是需求? 有意思.
To read list:
http://cyrille.rossant.net/ 他写了两本书和很cool的project:
book Learning IPython for Interactive Computing and Data Visualization; 已下载pdf.
book IPython Interactive Computing and Visualization Cookbook;
vispy.org ...
阅读笔记 GLSL Cookbook - Chapter 1
[OpenGL 4.0 Shading Language Cookbook] - Chapter 1
Profiles: Core vs. Compatibility
OpenGL 3.0版本引入了deprecation model模型. 被标记为deprecated的函数或者功能, 意味着在将来的版本中会被removed去掉. 例如immdediate mode rendering使用的glBegin/glEnd在3.0版本中标记为deprecated而在3.1版本中被去掉.
为了backwoods compatibility后兼容, OpenGL 3.2版本引入了compatibility profiles的概念.
Core profile: 目标是某一个特定的版本, older features removed.
Compatibility profile: 为了后兼容, older features 还在的.
有些地方有full vs. forward compatible context这些概念, 听上去有点令人confusing. 跟上面的core/compatibility概念是有些不一样的 ...
more ...Mudbox - Sculpt Layer Group
下面的截图来自autodesk/mudbox features中视频:
Group的引入可能会有这两个用处:
+ 管理、组织organize layers, 如脸部的和身体上的可以分两个group来组织layers;
+ one group <> one blendshape in maya; 当然blendshape复杂很多, 只是最简单支持.
看到参与的功能暴露出来面对用户了, 感觉好像创造的生命一样, 希望它能健康(别crash 别hang), 能有用:-)
more ...Book - Everyday Probability and Statistics
那本[Naked Statistics]是流行书, 所以年初的时候买来看, 主要是讲日常生活中, 例如媒体, 那些统计学方面的概念可能会被误解or有意无意的用来误导大众.
也正是在看这书时候发现后几章的概念不懂, 想找本简单的书来学习一下, 于是就有了第二本[人人都来掷骰子], 跟前一本的区别是: 前几章讲了一些概率的基础, 后几章讲统计学的概念。每一章介绍一个概念, 不长, 可以一下看完. 而且一般的步骤是例子|概念|怎么算, 没有复杂的公式没有公式证明推导等. 15章后开始的样品空间, 还不是很清晰.
不过能在上几周断断续续地看完这本书还是满足:-) 特别是还在追这部美剧:
Person of Interest / 疑犯追凶;
这有一个问题就是我们还有多少隐私呢? 倒不是说zf监控了我们的信息, 而是我们在日常的网上购物/网上言论/网上账单等都把我们清清楚楚的记录了, 甚至比我们自己还记得清楚, 慢慢地可能比我们自己还了解我们自己了. so who care the privacy? 说真的, 我都不知道哪些属于隐私范围, 而另外即使知道了别人的隐私, 是否又等于侵犯了别人的隐私呢?
Algo - Check if a binary tree is mirror or symmetric
问题: 给出一个binary tree二叉树, 判断这个数是否关于根节点对称.
尝试在纸上画画形状, 例如:
这就引入一个问题, 问题中的对称是指结构上的对称就足够了, 还是还要加上node里面的值相等呢?
case 1: structure symmetric;
case 2: structure symmetric + value equal;
因为case 2是在case 1的基础上层进的, 所以并不矛盾, 先考虑case 1好了. 于是对着上面的图来写代码,
bool isSymmetricBinaryTree(Node *root)
{
// node without children
if (root->left == nullptr && root->right == nullptr)
return true;
//
if (root->left && root->right == nullptr)
return false ...
Algo - Detecting a Loop in a Singly Linked List
This is not the first time i see this algo problem, and i want to describe the details of how to solve it this time in case need to revisit it later.
首先想象一下一个list带loop/circle的形状.
最左边的最general, 但是一个node只有一个next指针, 只能指向一个后续node, 所以只有最后的情况才可能. 或者是这个list没有loop, 或者是这个list本身就是一个loop/closed circle.
假如一个node的定义是:
struct Node {
struct Node *next;
};
要形成一个loop, 某一个node的next指向已经visit过的node ...
more ...Difference between Parameter and Variabe and Argument
翻译过来的话, variable 是变量, parameter and argument 是参数的意思, 怎么区别使用呢?
int add(int a, int b) // (int a, int b)叫argument list, a/b是parameter.
{
int c = a + b; // c is variable.
return c;
}
int x = 1; // x对应自己的scope下的variables.
z = add(x, 2); // x/y作为函数参数时候就是arguments.
引用一下网上的解释:
more ...A parameter is a variable in a method ...
Mode Switch in Class Hierarchy
想象我们正在搞一个砌砖的程序, 是的, 码农只是其中一种称呼, 时不时也被称为搬砖的.
一开始, 我们只有不断在已有的基础上添加砖头的功能。
后来, 我们需要有移动某些砖块的功能。例如在最外表面的砖块都可以被移动。
再后来,我们需要敲掉某砖块的功能。
它们分别对应于add, move, delete这三种modes.
其中一种设计方法是
class Build
{
enum BuildMode {
Add,
Move,
Delete
};
BuildMode m_currentMode;
};
这方法是把所有mode的实现都放在同一个地方, 每次更新都要改这个地方Build的源代码实现. 但是假如在添加move, delete这新mode的时候, 我们不想or不能改已有的只有add mode的Build源码呢?
这是另一种设计方案
class Build
{
// care about the add mode only.
};
class BuildMove : public Build
{
bool onMouseEvent()
{
check if we will go ...
Char Array vs Char Pointer
刚才在阅读以下内容时候复习了一下这两个概念. Quick case: Char Pointer vs Char Array in C++, by Bartlomiej Filipek
// Test case of char array vs char pointer.
//
#include <iostream>
int main()
{
char strA[] = "char array!";
char *strP = "char array?";
std::cout << "sizeof(strA): " << sizeof(strA) << ", of: " << strA << ", addr: " << &strA << std::endl;
std::cout << "sizeof(strA): " << sizeof ...
Python Basis 基础笔记
新接触python programming, 记录一些基础.
Batteries Included. 立马就可以使用的. Installizaton
download 2.7 from python website and install at C:\Python27;
download Anaconda 2.1.0 install at E:\Anaconda;
看来两者并不冲突.
这是从Anaconda里面起来的Spyder IDE:
Variables and Data
A variable is a name that points to some specific data type. 不允许声明一个变量而没有=赋值.
contents = 6;
print ...
Name on a book
记录一次参与翻译一本外文书的过程, 过程有点累, 结果有点甜.
you know, it is funny that people do not care your name, until you are in trouble. -- 美剧<疑犯追凶>第一集里面的话, 类似而已哦.
去参与翻译一本书, 可以出现在书店书架上的, 还提到你的名字, 是不是很cool?
昨天看到email, 被告知我有份参与的书终于上架了, "在各大网店都有售。但是样书会比较慢" 里面上google一下,果然在amazon.cn等都找到了:
交互式程序设计(第2版)
~ Joshua Noble (作者), 毛顺兵 (译者), 张婷婷 (译者)
出版社: 机械工业出版社; (2014年8月15日)
语种: 简体中文
是的 ...
more ...conflict by duplicated variables
用多于一个变量来表示一个状态, 变量之间很容易不一致呢.
conflict
假如我们要描述以下这个状态:
在一次mouse click的picking中, 我们给出了pick的范围, 一个rectangle, 然后要标记是否只要pick一个物体object就够了, 还是pick所有在rectangel下面的物体.
当假如我们只要pick到一个物体就够了, 那可能在for里面, 一旦找到某一个物体有效, 我们就可以返回, 退出pick过程了. 也就是我们只要pick到第一个有效物体就ok了, 而不考虑这个pick到的物体是否距离mouse click的点最近.
那么, 要记录这个状态, 我们看下面的实现:
class XViewContext
{
public:
PickingResult pick(...);
void setPickSingle(bool b) { m_bPickSingle = b; };
bool pickSingle() const { return m_bPickSingle; };
private:
bool m_bPickSingle;
};
PickingResult XViewContext::pick(...)
{
...
if ( pickSingle() ) ...;
else ...;
}
在这实现中, 是否要pick单一个物体的状态作为data member inside ...
more ...Undo and Redo
Undo and Redo 已经遇到很多次了, 记录一下想法.
So we beat on, boats against the current, borne back ceaselessly into the past. -- The Great Gatsby
所以我们不停地往前划,逆流而上,回到无穷无尽的过去。《了不起的盖茨比》
一个程序假如连undo/redo都没有, 那基本上不是给人用的, 可能只能算是demo.
Undo/Redo
用windows/paint画图工具做例子就很直观啦.
case 1. 假如操作次序是: 画一笔A, 再画一笔B; undo 一次就是剩下A; undo 第二次就是空; redo 一次就是增加A; redo第二次就是恢复到A B; 这个case的特点是undo到底了,再redo到底. 没有undo的时候又夹着redo ...
more ...Position Transfromation from 2d world to window screen
工作中遇到一个问题, 坐标映射。A 2d world is rendering in a window, user can mouse click on the window, how to find the position at 2d world corresponding to this mouse positon?
Background背景
工作中遇到一个问题, 坐标映射。A 2d world is rendering in a window, user can mouse click on the window, how to ...
more ...why game developers keep getting laid off
翻译了一下why game developers keep getting laid off这个文章. 里面有些观点是挺有意思的.
引言
在Hacker News上看到此文, Why Game Developers Keep Getting Laid Off by Jason Schreier http://kotaku.com/why-game-developers-keep-getting-laid-off-1583192249 I enjoyed this article, thx. 稍微摘录和翻译一下.
Why does this happen so often?
... 为什么裁掉一些开发,几个月之后又要重新请人?这个想法好像有点傻啊。但是这种事情却常常发生。根据Sony的某前员工,其中的解释很简单:在开发的前期(游戏的概念和设计是在这期间完成),不需要那么多人,所以发行商就不养人。 ...
A deadline's ...
more ...build error from line ending
Build error, 具体是error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format怎么办呢?
故事的开端是checkin了一个.cpp,当然本地是build过的,但是server端那边反馈说build error, 具体是 error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format
怎么办呢?当然是查看一下到底是那个.cpp文件的line ending是什么东西,然后改成合适的就ok了.
下面截图显示改之前是CR+LF, 改之后是LF的 ...
more ...mesh history
做demo都只是对mesh做一次修改, 但是好像在一个成熟的程序里面往往是很多次修改的叠加.
引言
以前对mesh的修改都是例如 mesh.setVertexPosition( vertexID, newPos ); mesh.setVertexTC( tcID, newTC ); 这样直接改[1], 从读书时候到现在都是这么simple and naive:-) 而对于maya的case就没有这样简单了,例如去看maya>devkit>splitUV example [2], 套用上面直接修改的方法, 要split一个uv的话,那直接用MFnMesh加几个新uv, MFnMesh::setUV(new uv id, uv value) 就ok了, 可是故事没有这么简单....
Construction History and Tweak
直接摘抄两段来看看:
more ...All the operations that can be performed on a polygonal ...
algo - counting inversions
算法练习: counting inversions
Background
Given an array, say [1, 3, 5, 2, 4, 6], to count the inversions. What is an inversion ? if (i < j) but arr[i] > arr[j]. 例如上面的(3, 2), 3在2的前面, 但是3>2, 构成一个inversion. 这个例子中一共三个inversions(3, 2) (5, 2) (5, 4).
这个计算有什么用呢? 我是[Algorithms: Design and Analysis ...
more ...partio
本来是在找point clould读入的资信, 如point cloud to maya, 遇到partio这open souce project, 读读它的代码应该能学到东西, 于是故事就开始了.
引言
本来是在找point clould读入的资信, 如point cloud to maya, 遇到partio这open souce project from
Disney Animation, 读读它的代码应该能学到东西, 于是故事就开始了.
“The goal of Partio is to provide a unified interface akin to unified image libraries that makes it easier to load, save, and manipulate ...