云麓漫钞

「自己所選擇的,就是你宇宙的真實」


  • Home

  • Archives

  • Categories

  • Tags

《富爸爸,穷爸爸》读后感

Posted on 2016-03-24 | In cn , personal |

不知不觉间已经慢慢走近了30岁的大关了,自己心理或多或少地也开始慢慢有了压力,工作的压力,家庭的压力,而各种压力其实归根到底都是一句“有钱就好了”。所以接着上周试用Kindle Unlimited之机,我把很多年前就听说过的《富爸爸,穷爸爸》花了一天读完。诚然这是一本畅销书:字里行间透露出对财富的重视读着不免觉得有点俗;里面说的道理读过后也许会觉得也没什么了不起的;作者自己的致富例子你也可以用一句“呵自吹自擂罢了”一口带过。可是读完后静心想想,书里的一些想法确实对自己有了新的启发。

对于我自己来说,感触最大的就是“人应该区分清楚自己的职业和自己的事业”。出来工作一年多了,其实很多发现自己作为一个初级工程师,参加一个产品的开发,而能够产生影响的方面其实很有限。你没有办法直接了解客户的需要,因为这是产品经理的工作。你没有办法决定技术的选型,因为这是项目架构师的工作。即使你有个非常合理的想法希望在项目里面推广,而且你也说服了团队里的所有资深工程师,你也未必能够成功:因为项目有着自己technical debt,而实现你的想法也许需要投资很多的时间人力资源,而可能是你的团队没有办法做到的。从某个程度上来说,工程师也不过是个士兵。指挥官下令冲锋时你只能埋下头向前跑。举起枪发现没有校准,向前冲了发现方向不对,战局不利然后被大部分放弃,这一切一切你都只能抱怨却又无法改变。而即使胜利了,你又获得了什么?

想到这里我已经明白了,为公司工作只是我的一个职业,为生计所迫也并无他法。可是这终究不是我自己真正的追求。那我自己到底想追求什么?其实我现在也并不知道。但是我明白,为了能够做我自己自己的事业,我至少应该为起步进行准备:资金,知识,技术和团队。这也是书中所说的:学会理财和能力积累。明白了道理就自然会为了需要而奋斗。被困在自己的职业里为他人的事业工作,一步步慢慢地腐烂并被淘汰,实在是一件很可怕的事情。

书中给我的另外一个启发就是,人必须全面。我其实心里也明白自己常陷于职业程序员的一个常见思想误区:为了进步我只能在技术上一直精益求精。在技术上有自己的追求,本应不是坏事。然而过于专注在一个点的结果就是紧盯着细节,却忘记了大局。首先技术成长不过是职业发展中的一个方面;其次是职业发展也只是人生中的一个重要方面。回想起这些年读过的硅谷轶事,大多是天才怪客的成功史,宣扬的观念都是只要技术好nerd也能成功。可是工作之后发现,软件工程不过也是和人打交道的社会工程。聪明很重要,但是这并不完全是工作中的所有要素。相反,因为优秀的工程师往往左脑发达,导致其实工作上非常的egocentric,这样的人往往很难合作。学会从自己专注的领域走出来,学学没难度的理财,练练没意思的人际交往,听听没逻辑的人的想法,自己的心象风景其实会大有不同。

How to Print Rust Structs/Enums

Posted on 2015-10-08 | In cn , dev |

在Rust中定义结构体(struct)或枚举(enum)类型时,可以在定义前加上属性#[derive(Debug)]。这样可以让编译器为该类型自动派生(derive)出std::fmt::Debug trait的实现。然后在打印时使用{:?}则可以打印出变量类型的数据表示。

注意的是,如果你希望用{}打印结构体或者枚举变量,你还是需要为其实现std::fmt::Display trait。

另外,如果你的结构体中还包含了别的结构体,你可能还是需要自己实现std::fmt::Debug trait来达到自己希望的打印效果。例如在下例(Rust Playground传送门)中,Deep(Structure(7))会打印出Deep(Structure(7)),而Flat(Structure(7))则会通过自定义的实现打出Structure(7)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use std::fmt;
#[derive(Debug)]
struct Structure(i32);
#[derive(Debug)]
struct Deep(Structure);
struct Flat(Structure);
impl fmt::Debug for Flat {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
Flat(Structure(num)) => write!(f, "Structure({})", num),
}
}
}
fn main() {
println!("Structure {:?}: ", Structure(3));
println!("Deep {:?}: ", Deep(Structure(7)));
println!("Flat {:?}: ", Flat(Structure(7)));
}

使用NVM管理Node.js

Posted on 2014-05-17 | In cn , dev |

安装NVM

curl https://raw.github.com/creationix/nvm/master/install.sh | sh

使用Node.js

nvm install 0.10.28
nvm use 0.10.28
nvm alias default 0.10.28

使所有用户共用同一个Node.js版本

n=$(which node);
n=${n%/bin/node};
chmod -R 755 $n/bin/*;
sudo cp -r $n/{bin,lib,share} /usr/local

NVM默认把Node.js安装到用户的Home目录下。为了使所有用户都能使用同一份Node.js的,上述命令会把当前激活的Node.js复制到/usr/local/bin目录下,并把权限设置成所有用户都能访问。如果你之后激活了另外一个版本(nvm use vXX.XX.XX)并向让它成为全局的Node.js版本,那只需要重新执行一遍上面的命令。

EOF


Reference

  • How To Install Node.js with NVM (Node Version Manager) on a VPS

如何在VS2012中创建XNA项目

Posted on 2013-09-14 | In cn , dev |

XNA是渣软已经官方宣布死亡的一套游戏开发工具,正因为如此官方只支持到VS2010,如果想用更先进的VS2012来开发XNA程序的话,就必须又折腾一番,真是够了……

  • 你必须先安装VS2010(Orz),从节省时间考虑就装个C# Express好了
  • 安装最新的Windows Marketplace Client
  • 安装XNA Game Studio 4.0
  • 将XNA的扩展文件夹从VS2010的路径拷贝到VS2012,如
1
xcopy /e "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\XNA Game Studio 4.0" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\XNA Game Studio 4.0"
  • 打开扩展文件夹里的extension.vsixmanifest,将里面的Version改成11
  • 刷新一下VS
1
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" /setup
  • 到%LocalAppData%\Microsoft\VisualStudio\11.0\Extensions目录下,把extensionSdks.en-US.cache和extensions.en-US.cache这样的缓存文件删除,不然新建项目时XNA扩展会无法加载。

这里有个小trick,当VS挂掉而你想知道为什么时,使用下面的命令启动VS

1
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" /log

这样的话VS就会生成debug log到%AppData%\Microsoft\VisualStudio\11.0\ActivityLog.xml了。

EOF


Reference

  • How to install XNA game studio on Visual Studio 2012?
  • How to install the XNA Game Studio 4.0 in Windows 8?
  • How to work around a possible XNA Game Studio or Windows Phone SDK install failure on Windows 8

iTunes乱码处理

Posted on 2011-11-19 | In cn , misc |

使用Mac时一個很头疼的问题就是mp3导入iTunes时的各种乱码。搜索后并没有发现很好的解决方法,所以就还是按在Ubuntu时的方式来料理了。不知道大家有没有更简单的方式。

首先是安装Mutagen

1
pip install mutagen

使用方法时配合find命令即可,我比较喜欢的方式是:

1
find . -iname "*.mp3" -execdir mid3iconv -e gbk --remove-v1 {} \;

效果是转换当前目录及子目录下的所有mp3标签为Unicode编码,并同时填满ID3v2, APEv2标签。

-e gbk 参数只针对gbk编码,其他编码的文件则相应修改,如 -e big5 或者 -e gb18030。

--remove-v1 参数则删除ID3v1标签,因为ID3v1不支持中文Unicode 编码Orz……所以如果播放器只支持ID3v1标签的话就会遇到问题——一片空白,这也是我还没想到解决办法的地方。不过就iTunes来说这样就足够了。


EDIT1(May 30, 2014 12:42:34):

在OS X Mavericks下曾经遇到过dyld: Library not loaded: /usr/local/homebrew/homebrew/opt/readline/lib/libreadline.6.2.dylib这样的问题,我解决的方法是用下面的命令重新安装readline:

1
brew install --build-from-source readline
某雲

某雲

5 posts
6 categories
7 tags
RSS
GitHub Twitter
© 2011 - 2018 某雲
Powered by Hexo
Theme - NexT.Muse