webdancer's Blog
opengl配置
SC写了使用mingw时的opengl配置。由于我是使用VS,记录一下Windows7 下VS2010的opengl配置。由于图形学刚开始学,了解的不多。
1.安装Glut。GLUT是OpenGL应用工具包的缩写,英文全称为OpenGL Utility Toolkit,是一个和窗口系统无关的软件包,可以给我们的学习带来方便。当然,也可以选择不安装。
下载:http://www.opengl.org/resources/libraries/glut/glut37.zip
文件介绍:
glut.h -你需要在你的源代码中包含这个文件. 通常情况下, 这个文件应该放在你系统的包含目录下的 GL 文件夹中。
glut32.lib (微软版本) 和glut.lib (SGI windows版本) - 这个文件必须被连接到你的程序中, 确保它放在 LIB 目录中。
glut32.dll (Windows) 和 glut.dll (SGI Windows版本) - 根据你所使用的OpenGL选择一个, 如果你正在使用微软公司的版本, 那么你必须选择 glut32.dll. 你应该把DLL放置在你的系统文件夹中。
在我的机子里,具体为:
glut.h ---> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl
glut.dll,glut32.dll ---> C:\Windows\SysWOW64 (windows7 64位操作系统)
---> C:\Windows\System32 (windows7 32位操作系统)
glut.lib,glut32.lib ---> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
2.建立project。
注意:项目选择Win32控制台项目,文件的后缀为c。
试一下:
#include <gl\glut.h> #include <math.h> void dda(int x1,int y1,int x2,int y2){ int k,i; float x,y,dx,dy; k=abs(x2-x1); if(abs(y2-y1)>k) k=abs(y2-y1); dx=(float)(x2-x1)/k; dy=(float)(y2-y1)/k; x=(float)(x1); y=(float)(y1); for(i=0;i<k;i++){ //gl_point(int(x+0.5),int(y+0.5)); glBegin(GL_POINTS); glVertex2i((int)(x+0.5),(int)(y+0.5)); glEnd(); x+=dx; y+=dy; } } void printline(void){ glClearColor (1.0,1.0,1.0,0.0); glMatrixMode (GL_PROJECTION); gluOrtho2D (0.0,200.0,0.0,150.0); dda(15,15,300,300); glFlush(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("第一个OpenGL程序"); glutDisplayFunc(printline); glutMainLoop(); return 0; }
对于mingw感兴趣的,可以参考:http://scturtle.is-programmer.com/posts/24996.html
递归
对于递归算法,基本没有什么理解,但是有时候递归的用处还是很多的。记录几个例子。
1.用递归的方法,写函数itoa(n,s),将整数转为字符串。
int i; void itoa(int n,char s[]){ if(n/10) itoa(n/10,s); else{ i=0; if(n<0) s[i++]='-'; } s[i++]=n%10+'0'; s[i]='\0'; }
2.用递归方法,写函数reverse1(s),将字符串倒置。
void swap(char *i,char *j){ char tmp; tmp=*i; *i=*j; *j=tmp; } void reverse0(char s[],int i,int n){ int j; j=n-(i+1); if(i<j){ swap(&s[i],&s[j]); reverse0(s,++i,n); } } void reverse1(char s[]){ reverse0(s,0,strlen(s)); }
3.Fibonacci数列的递归实现。
int fibonacci(int n){ if(n<2) return n; else return fibonacci(n-1)+fibonacci(n-2); }
4.求最大公约数。
int gcd(int x,int y){ if(y==0) return x; else return gcd(y,x%y); }
递归:函数不断调用自身,直到遇到结束条件停止。
代码简洁,容易理解。但是,递归过程会消耗大量的栈空间,不适合嵌入式系统或者内核态编程。
云计算——中国IT的机遇与挑战
最近,上课老师提的最多的就是云计算与物联网了,接触“云计算”这个名词应该有很长的一段时间了,最初,是SC在我们班的班会上讲的。但是并没有什么特别的想法,对之也没什么了解。但是,最近感觉这个想法很有意思。
什么是云计算呢?现在,还没有什么统一的解释,大概为:用户通过简单的终端,就可以访问和使用由“云”提供的计算服务。这多云就是“数据云”和“应用云”,它有大型机构(google、MS .etc)提供。
我不想在这里讨论云计算的优缺点,只是想谈一下:我们中国在云计算的机遇和挑战。
在云计算的架构里面,数据和应用的提供时高度集聚的,“云”接受和处理的数据是巨大的,这里就要用到高性能的计算机,甚至是超级计算机。这样,我们国家在超级计算机方面的优势可以体现出来。我们的超算中心,可以扩容变成一个一个的巨大的“云朵”,来提供巨大的数据和应用处理、提供能力。当然,计算机基础科学的突破,虚拟化,并行运算等也是必需的,软件资源的提升对云来说就是大脑。
我们知道,在传统的PC产业里,由于用户习惯和市场垄断,wintel联盟应该是处于绝对的优势地位。但是,云计算的出现,使得终端的结构和功能变化的越来越大。在未来,像Chrome这样的浏览器就是OS,OS就是浏览器,将会日益普遍,终端更加的简单,便携。可能没来的终端完全不像我们想在所看到的,完全不像。终端的一致化我感觉应该是趋势,未来不管终端是什么,我们应该完全感觉不到这其中的差别,我们注意的知识数据和应用本身,用户有最低的学习成本。在这方面,我们要创新,不能跟着别人亦步亦趋。
总之,在云里的数据是每一个IT巨头抢夺的,也许国家也会加入进来。当巨大的信息汇聚成云是,也许世界上中重要的宝藏竟形成了。到底,我们中国人,能不能抓住机遇,牢牢地把自己的云保护起来,别让他跑走。
omg,看看自己的生活
-------------------------------送给过去和未来的自己--------------------------------------------
大学匆匆的已经过去了三年,自己也到了毕业班,不到一年就要毕业了,心里真是各种滋味。在这个时候应该停下来回顾一下自己的大学时光了,看一下过去的生活,总结一下,为今后做一下盘算。“凡事预则立,不预则废”,这时我们初中老师挂在嘴上的一句话,好像烙在了心底。
在大学之前对计算机真的是一无所知,高考之前甚至也没有进过网吧,不知道怎么就选了这个专业,有点鬼使神差吧!不过还是挺喜欢这个专业的,了解了以前从来不知道的工具。三年的时间了学了很多东西,要说理解的深刻的东西,真的不多。还是菜鸟一个。的确应该总结一下自己过去的学习生活,看一下过去的状态,看一下如何改进学习方式,看一下怎样安排剩下的一年,看一下大学来思想的转变。
1.目标。
进了大学以后,不知道多少人会怀揣着梦想,知道自己毕业后到底该干什么。反正我没有,反正我的的舍友也没有,每天晚上睡的很晚,起的很晚,生活也颓废了,我们甚至都不会聊这方面的东西。课前从不预习,上课的时候也是睡意阑珊,课后也不复习。考试也是临时抱佛脚,而且一般问题还不大。宽松的环境本来是培养兴趣的大好事,但是对我们这种从小学就在应试的高压下生活的真是伤不起呀!没有目标,缺少了方向,生活自然就颓废起来了。
2.生活。
大学生活是多姿多彩的,的确我们这里的生活也还high.与舍友的关系很和谐,与同学的关系也不错。隔三差五的就出去撮一顿,喝的也是不亦乐乎。遗憾的是没有学个吉他什么的,出去旅游的机会也很少,看过的毛片也不多,锻炼的不够,觉得挺可惜的。生活最重要的是一个宽容的心态,不要把物质的东西看的太重。
3.学习。
从一个刚上大学的时候几乎什么都不懂,到现在也是这个状态,可能是自己的学习的方法和态度出了问题。记得大一的时候有时还会去问老师问题,但是大二后就再也没出现过了。本来随着学习的逐步深入,应该更好地与老师交流的。这方面还是有很多东西要总结的。
(1)从小学接受的教育和学习习惯,使我养成了“被动的接受知识”的习惯,而且不善于思考。这对一个学习计算机的人来说可谓致命的。以前,也没有注意到,现在慢慢的发现了,知识绝不能浅尝辄止,囫囵吞枣。最近上嵌入式课程,觉得老师说的很对,很多东西不是你不知道,而是你不懂,懂得东西不需要太多,该懂得一定要懂了,不要放过。
(2)自己的性格问题。记得从小学时,老师就说我“一瓶子不满,半瓶子咣当”。这句话指出了我的一大缺点:容易骄傲和满足,做事马马虎虎,不仔细。
(3)学习不成体系,零零散散,重复学习。重复学习很是可怕,因为你的时间总是有限的。学习计算机的不能总是重复,因为这是一个迅速变化的知识门类,必须及时的充电。
(4)学校的教学问题,也是很大的原因。我们的学习氛围不是很好,导致了自己懒惰的状态,这是很可怕的。我觉得这就是中国大学的很大的问题:学生的活力。由于上大学之前,对计算机了解的很少,所以上大学后就有点不知所措了,再加上(1),自学能力差,这就造成了很大的问题。大一讲编程语言,老师就是空洞的讲JAVA的语法,对于一个连“程序概念”都知之甚少的人来说,只是被动的学习,老师还是满堂灌给你。很多的东西都不知道,这样就匆匆过了。讲数据结构,也是这样,对于程序了解不深,数据结构有什么用,就无从谈起了。
大学的时间也不多了,是时候做出一些改变了,重新开始,还得相信自己!
谈一下自己的未来的计划:
1.职业目标是成为一个搜索工程师。
2.生活目标是:短期能够学会一种乐器,长期就是美满的幸福生活,^_^。
3.学习目标:提高逻辑能力和动手能力,具体的学习目标最近还得仔细的想一下,什么是搜索要学的呢?
PPS for Linux 正式发布
如题,感觉现在Linux上的软件越来越来丰富。而且,许多的本地网络公司开始重视linux了。闲话不说了。
下载:http://www.ppstream.com/download.html
PPS Linux PC版本使用说明
软件版本:0.1.1678
* 安装需求:Ubuntu 8.04+, 只能用于x86 Linux个人电脑.
* 软件大小:1.5MB(deb包)
安装说明:
辅助软件:
安装PPS Linux版本前需要先安装以下辅助软件:
* QT库, 4.4.0及以上版本
* libFuse库, 2.7.2及以上版本
* Mplayer, 1.0rc2及以上版本
* MPlayer视频解码器: MPlayer Essential Codec Pack(http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2)
推荐使用apt-get方式安装: sudo apt-get install libqt4-core libqt4-dbus libqt4-gui libqt4-network libqt4-webkit libqt4-xml libfuse2 mplayer
c++容器
容器,顾名思义就是可以包含其他的对象。之前,接触过的类似容器的就是数组了。现在,接触一下容器,容器应该有很对好处。其中,很重要的一点就是容器有对应的迭代器,可以很容易的遍历。
在C++里用到的最多的应该就是Vector了。
vector<int> a; if(a.empty()){ for(int i=0;i<9;++i){ a.push_back(i); } } cout<<a[3]<<endl;
最好还是与迭代器一起用,这样的功能也是比较强的。
vector<int>::iterator iter; for(iter=a.begin();iter!=a.end();++iter){ cout<<*iter<<endl; }
使用迭代器可以很方便的遍历容器。特别是注意:迭代器的有效性,在操作时注意那些使迭代器失效的方法。我测试了一下:insert和erase方法竟然没有失效,也许是简单的原因吧!
iter=a.begin()+2; a.erase(iter); for(;iter!=a.end();++iter){ cout<<*iter<<endl; }
删除后,迭代器并没有失效呀!但是,安全期间还是给iterator重新赋值吧!详细:
http://hi.baidu.com/nxxch1989/blog/item/c0ffec220d5c285d9922ed7c.html
ubuntu下阅读源代码
最近做操作系统的实验,需要看一下系统的源码。但是以前也没有用过这样的工具,就从网上搜了一下。
1.sourece navigator 。好像是红帽出的一款工具,但是太复杂,不好上手,页面也不好看。
2.vim+插件的形式。vim以前也用过,觉得挺好,记录一下。vim+taglist+ctags,可以很好的实现。
ctags在ubuntu的软件仓库中有,可以直接装上。taglist好像没有,可以从vim的网站上下载,安装。这样可以基本满足了。但是,最好还是配上多窗口。在这里有详细的:http://www.vimer.cn/2009/10/%E6%8A%8Avim%E6%89%93%E9%80%A0%E6%88%90%E4%B8%80%E4%B8%AA%E7%9C%9F%E6%AD%A3%E7%9A%84ide2.html
c++学习笔记5
突然发现有一个很重要的地方,但是一直不太明白。那就是引用与指针的区别,对指针思考的比较多,但是引用确实想当然。我的最大特点就是:想当然,缺少思考。什么是引用呢?
int a=0;
int & ra=a;
引用就是对象的另一个名字,不引入新对象。
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
引用的使用场合:
1.参数传递,某些大型对象可以节省空间。
2.重载操作符时,应该使用引用。例如:[]。
当然,使用引用的地方,可以使用指针。不知道,大家怎么理解的。