开始准备找工
申请的暑期百度实习在第一轮网上笔试阶段就被默默的鄙视了,在我的意料之中,因为没怎么准备。我的首选职位是“软件研发工程师”,第二个是“图像内容分析”,按专业方向应该是这两个调换一下的,可是前者在上海,后者在北京,所以最近了。后来的笔试使我明白, 职位方向还是应该慎重的,没把握的方向加没有充分的准备,最终答题时必然很尴尬 。总的来说,题目难度比较适中,除几个没想法的题,其余的还算可以答答。第一个是关于多线程、多进程、异步、同步等概念的,非科班,理解不深,没有答。之前只用 Qt写过一个发送邮件的程序,比较简单的(只可以用非加密的发送端邮箱,如126、foxmail 等,gmail 不可以),才简单地了解了下异步同步,同时尝试了简单的多线程,以保证在发送时用户界面不假死。第二个是关于分布式检索系统设计的,对分布式完全小白,当然悲剧。。。剩下的就是算法设计分析和C++基础题了,问题不大。我想如果当时首选“图像内容分析”笔试结果应该会好些吧,至少自己一直接触着。
之前就看到过一个说法,写简历是一个很好的自我反省过程,果然如此。
一直以来,我对自己的职业兴趣没有自省过,可以夸张的说,只要有技术、有挑战的东西我都想学想做,狂热的了解学习各种技术就是一个证明。编程、学习WEB(HTML、ASP、PHP、CSS、JS)、学习Linux、学习PS、画画(大学之前)、平面设计、了解各个软件使用技巧。。。 。在填写简历的求职意向时,我才认识到自己的盲目技术流所带来的问题:精力分散,无效率地在给自己压力,一事无成。经过多方考虑,目前确定为方向为图形图像、数据分析检索,一则是由于专业方向是图形图像,二则是因为数学背景与数据打交道容易上手些,同时自己对这两个方面比较感兴趣。
研究生数学专科相比计算机好的一点是毕业无论文要求,两年毕业。第一学年上基础课,了解方向,如果不继续深造的话,第二常年开学初就得准备做工作了,给人一种刚入学就准备着毕业的感觉。在实验室的这两年(大四进的)我觉得自己成长了许多,不论对学术研究的认识,还是对生活的一些看法,很是感谢实验室的老师、同学和周围的朋友们。同时因为大四在实验室忙项目,整个大四生活基本泡汤了,有些遗憾。特别是分别前的那些时间,一些活动都没有及时参加。想想本科阶段也挺“完整”,参加过社团并参与活动策划(当时相当NEW),成功组织过兴趣小组(小新、丹青、老大、彬俊),考试99过,体育满绩过(超人吧,很伪),ACM过(每次只3题,一人一个球~ ;( ),毅行过,狂欢过,失落过、意外的生日(谢朋友们),与舍友矛盾又磨合过。。。,除没挂过科,没交女朋友之外。
我想接下来的几年,我应该会在 IT 行业技术方向发展,在研发部分呆着。暑假这段时间准备一边实习,一边补下基础知识,同时还得调研毕设相关。这就面试准备就如同考试复习,平时再怎么牛X的裸考也不一定比临时抱佛脚的好,何况平时一般的。定书单:
- C/C++基础: Effective C++ 和 More Effective C++
- 算法:算法导论 并行编程相关:不了解,求推荐,待选:推荐阅读的多核编程技术书籍 1.
- 面试相关:《编程之美》之类的
- 数学、图像相关:Pattern Recognition and Machine Learning
目前在看ME,虽然之前零星看过些,不过系统看果然不一样,结合整理笔记,感觉良好。时间不多了,希望能按排过来。
有想法的人
今天在98开怀看到了一个帖——《冯唐写给小外甥的信》,虽然内容长了点,还是坚持看完了。首先吸引我好奇心的是“冯唐”这个名字,这不是高中课本中王勃《滕王阁序》的冯唐嘛(本人历史了解甚少,惭愧);其次是“开怀”的帖,长的也不乏有趣的(如张飞的流水账)。后来看了新浪的访谈也知道这是他的笔名,也顺便了解了下冯唐。佩服他的风趣幽默而又真实的文笔和“折腾”的职业经历,勇于变化并追求自己想要的生活。在访谈中看到这句:
“也是提醒自己这个时间很容易过去,就是你90岁忽然会老下去,不要提40岁、50岁了,还要抓紧时间多做点正事。”
顿感时间经不起挥霍,该好好规划下才行。
附
杂 & exVim
杂
从大二接触 Linux (Ubuntu 7.10) 开始,也不知道自己有多少时间折腾进去了。首先是系统安装,包括 vm、vbox 中的安装,次数已经记不过来。有测试新版本的,有学习用的,也有体验新的安装方法的,更多无聊的时间是花在了显卡和字体的配置上了。然后是系统管理和服务器配置,bind (dns serer),dhcp,http,ftp,ssh,iptables 等。接着是 shell,vim 等,尤其是后者,不知道磨了多少时间。可能这些东西现在也没怎么用到,大部分时间在 XP 下呆着,不过当时尝试这些也不是为了学习,更多的是出于对技术的好奇和对开源的热情吧。使用 vim 可谓一波三折:
好奇》畏惧》决心》沮丧》平静》自信》再沮丧》再平静(KISS)》释然》感恩
这个过程同样也发生在我对学习、生活中一些事物的看法上。 努力追求最优的选择,蓦然回首,已经偏离目的地; 不断尝试以达到完美,疲惫思量,简单也是一种美。
exVim
这些天又再遇一年前尝试的 exVim,vim 编辑器的一个配置方案。当时使用 vim 的时间并不多,又急切地想体验下传说中 vim 的强大功能,所以选择直接使用别人的配置。之后的“沮丧”经历再次证明,急功近利的拿来主义是不可取的,特别是在当基础知识都没有掌握好时。在经历 N 次“无助”后,我放弃了所有之前的配置,从零开始!自己动手写配置,参考别人的配置,查 doc,不清楚的配置就不加。后来的配置是在使用需求中不断完美的,并尝试着尽可能使用 vim,于是 vim 取代了 editplus,成了我的主要文本编辑器。 然而,写代码我还是用 VC,目前还是觉得 VC 下的代码查看和调试比较方便,代码编辑 vim 的感觉倒是更好些,DIY 也容易些。正因为后者,我一直想着用 vim 来写代码,主要问题在于:tags 管理和代码的快速跳跃。后来尝试了一些 plug-ins,也基本解决了这些问题,但因精力和能力有限,也没有太在意,够用就行! 这些天重新测试了 exVim,因为带的插件基本用过,比较熟悉,很快就把自己的配置整合进来了。exVim 的特色:
- use one single file your_project.vimentry to access your project.
- update tags, IDs and other things you used in your project in one command.
- browse project files in project window.
- search files, tags, and words in source code by the builtin method.
- a powful way to filter search result.
- trace your code by jump stack.
- reading code easily by word highlight and macro highlight.
- view classes hierarchy pictures.
- compile project in vc/gcc and get error results from them directly through vim.
- enhanced quick-fix window.
- communicate with visual studio — get build errors, open files, add break point and send command make vs.net compiling current file.
其中大部分功能和插件是已有的,作者只是改进并集成在一起。很多好配置是按着作者的使用习惯的,可能你会觉得不顺手,不过资深 vimer 的习惯还是值得学习的 :P,特别是 mappings 的设计很赞、很顺手!也有一些可能令被 VC(with VA)惯坏的人不大习惯的配置,如 OmniComplete 的配置默认不开 dot, scope, - 的补全,作者解释他写的工程一般比较大,又有 template,补全不好用。《可爱的Python》中也介绍过不建议过于依赖自动补全功能,有些程序员都不看 doc 了,把补全的菜单项当 doc 了。这是一个很不好的习惯,因为一些时候光从命名是看不出函数或类的重要信息,如注意事项等。
经验分享
最后就简单分享下我的 exVim 熟悉过程。首先,尽可能查阅下官方的 help doc,写得比较详细、直白,力推!其次,如果遇到问题或者要添加新的功能,就按一般 vim 的方式配置,exVim 只是 vim 的一个配置方案,不是一个新软件。虽然 exVim 自带的插件已经比较全了,我还是再推荐两个,大家应该有听过,一个是 SuperTab ,另一个是 FSwitch 。前者提供更易用的补全操作,后者是 Alternate (exVim 包含)的加强版。 最后,再提醒下,如果要使用与 VC 结合的功能,需要安装 python 及相关模块,同时 gvim 也需要编译支持对应版本的python,最新的编译好的版本可以在 附 中的 找到 。如果使用时 python 提示 UnicodeEncodingError,是因为默认配置的vim encoding 为 cp936,而 python 的 sys.getdefaultencoding() 为 ‘ascii’,如果 str 中包含不能用 ‘ascii’ 表示的字符,如中文,就会提示这个错误了。解决方法为修改: . vimrc
set tenc=utf-8
vimfiles/plugin/visual_studio.py 在 import 代码段后添加
sys.setdefaultencoding('utf-8')
其它一些设置
let MRU_Max_Entries = 20
加一张查看 Ogre 源代码的快照 :D,正在查看哪些地方调用 Ogre::Root::initialise()
参考
- http://code.google.com/p/exvim/
- http://www.ex-dev.com/tools/exvim/documentation/
- http://www.gooli.org/blog/gvim-72-with-python-2526-support-windows-binaries/
万恶的光线跟踪
Python 快速入门
今天开始试着使用Python,之前也试着学习过,就是没用起来。介绍Python的文章都说Python是一个很简单的语言,但我就是感觉除C、C++(包括类C++的,如C#)外的语言老是把握不住,总感觉一直是门外汉,当然前者我也是门外汉,只是感觉好些。好开始“快速入门”了
下载安装
- python 2.6.5 —— 没有选择3.0,主要是大部分应用还没有过渡到3.0
- wxPython 2.8 —— python GUI 库,应该是跨平台GUI库wxWidgets(用起来像MFC)的python adapter吧。
- uliPad —— 跨平台编辑器(国人开发,ym),对python的支持很好,易用,本来想用vim的,但是用vimpdb调试时高亮不舒服,没配置好,不折腾了。
在wxPython 2.8下用uliPad时,提示找不到 comtypes module,好像是因为python 2.6中又不包含这个模块了,直接下一个好了。整个安装配置过程很流畅,只要下包,双击exe就好了。还是就是python的标准代码风格也太严格了,连多加几个空格或少了一个空行,都直接Warning 。快速入门图:
发布个人Wiki(杂记)
个人学习生活杂记,用来取缔原来 Notepad + DropBox 式的杂记方式。本地配置是:标准 TiddlyWiki + DropBox,有空就上传到上面的空间。
优点
- 不用 Web 服务器支持,也不用专用软件(DropBox 可选的),只要一个浏览器。
- 编辑配置简单,Simple Syntax + Simple MakeUp Language。
- 支持 Tag,这个是对于杂记管理很重要。
- 多种语言支持,有中文的。
缺点
Tiddly 密码传输是不加密的,可能是使用静态网页所致,不过问题不大。
如果你也有记杂记的习惯,不防试试,详细 Google 下:TiddlyWiki + GTD + DropBox
基于BillBoard的云绘制
终于把云画出来了,只是初步结果,静态的,简陋了点。还有很多工作要做,如细节调整(如加噪声)、穿云过渡、加速(如远处的云用Imposter)风的模拟、随时间的变化、光源影响、阴影(比较麻烦)。参照的是 RandomChao 的 Volumetric Clouds , 因为是 C# 说的,临时花一晚上学习了C#,直接从XNA 自带的 Tutorial 开始学,并按着做了个小游戏。有C++ 基础学习起来很快(其实只是看代码根本不用学,直接可以看,不清楚的地方F1就好了),同时也体会到 C++ 真难学啊!用 Ogre 改写算法倒是比较快(因为算法简单啦),花了一天多。主要的时间都是在调试了,尤其是写 Shader 时,HLSL 编译器有自动优化一些没用的 uniform 参数,如果你定义了这个的 uniform 参数,程序就直接 crash 了,相当无语 :( ,我想这是很多 Shader 新手都会遇到的问题,BT 的是错误很难发现。如果有时间就再试试其它考虑到物理模型的实现。
CMakefile for OGRE
有一段时间没写日志了,都有点不知道怎么开始了,汗!
Ogre v1.7.0出来了,暂时只提供原代码,同时代码管理上也转向使用CMake了(OpenCV2.0也转到用CMake)。 Ogre官方提供了一个CMakefile ,但没有说明清楚,试了下,不Work,所以自己去CMake官方查了下DOC,修改成自己想要的。刚学CMake,可能写的不好,所以没提交到Ogre官方Wiki,就拿出来分享下好了。如有什么问题和建议欢迎跟帖~
说明:
- 可能只适用了Ogre v1.7版本
- 需要先设置四个环境变量,供FindOGRE.cmake 文件查找Ogre用,下面是我的
OGRE_BUILD - D:\libs\Ogre\v1-7-0RC1\build
OGRE_HOME - %LIBS_DIR%\Ogre\v1-7-0RC1
OGRE_SOURCE - D:\libs\Ogre\v1-7-0RC1
OIS_HOME - D:\libs\Ogre\v1-7-0RC1\Dependencies\src\ois-1.2.0
- 下面是查找Ogre用的CMake文件,存放位置下面CMAKE_MODULE_PATH处设置
FindOGRE.cmake
FindOIS.cmake
FindPkgMacros.cmake
OgreConfigTargets.cmake
OgreFindFrameworks.cmake
OgreGetVersion.cmake
PreprocessorUtils.cmake
VisualStudioUserFile.vcproj.user.in # 需要修改,见下文
代码目录如下:
CMakeLists.txt
include/
*.h
src/
*.cpp
CMakeLists.txt文件
cmake_minimum_required(VERSION 2.6)
SET(PROJ_NAME Ogre_Project) # 工程名
PROJECT(${PROJ_NAME})
set(CMAKE_MODULE_PATH
$ENV{OGRE_BUILD}/sdk/CMake # Ogre cmake 路径
)
include(OgreConfigTargets)
FIND_PACKAGE(OpenGL)
FIND_PACKAGE(OGRE)
FIND_PACKAGE(OIS)
INCLUDE_DIRECTORIES(
${OpenGL_INCLUDE_DIR}
${OGRE_INCLUDE_DIRS}
${OIS_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/include
$ENV{OGRE_BUILD}/include
$ENV{OGRE_HOME}/Dependencies/include
$ENV{OGRE_HOME}/Samples/Common/include # source version
)
LINK_DIRECTORIES(
${OGRE_LIBRARIES}
)
FILE(GLOB SRCS src/*.cpp)
FILE(GLOB HDRS include/*.h)
ADD_EXECUTABLE(${PROJ_NAME}
WIN32 # SUBSYSTEM:WINDOWS
${SRCS}
${HDRS}
)
TARGET_LINK_LIBRARIES(${PROJ_NAME}
${OpenGL_LIBRARIES}
${OIS_LIBRARIES}
${OGRE_LIBRARIES}
)
set(OGRE_TEMPLATES_DIR"${CMAKE_MODULE_PATH}")
set(OGRE_WORK_DIR"$ENV{OGRE_BUILD}")
set(OGRE_BINARY_DIR"$ENV{OGRE_BUILD}")
#FIND_FILE( OLD_VCPROJ_USER_FILES
#*.user
#${CMAKE_CURRENT_BINARY_DIR}
#)
if (MSVC)
FILE( REMOVE ${PROJ_NAME}.vcproj.$ENV{USERDOMAIN}.$ENV{USERNAME}.user)
ogre_create_vcproj_userfile( ${PROJ_NAME} )
endif ()
修改VisualStudioUserFile.vcproj.user.in
生成vcproj.user文件的模板也要修改下,修改
Command="@OGRE_BINARY_DIR@/bin/$(ConfigurationName)/$(TargetFileName)"
为
Command=""
然后你只要用cmake-gui工具 configure generate 下就可以得到配置好的Ogre工程了。