我工作中接触到的所有的IT知识所形成的思维导图,掌握和需要去掌握的,留此存照,会根据知识的更新持续更新。

图片太大,如果100%,页面无法显示. 100%图可以通过以下方式查看:图片上,右键,查看图片,可以单独看到,并能放大缩小~~

Continue reading »

 

手机开发java程序时中,很多场合需要动态图片,比如在程序必须等待的时候,一个循环转圈的圆比起没有任何提示和动静,给用户的使用体验要好很多。 本文的说的方法主要应用LWUIT类库来绘制界面的j2me程序1

准备工作

本文假设读者已经配置好j2me能够建立一个能够正常工作的J2me的工程。如果对此不熟悉,请参考how-to-setup-development-environment-4-j2me+eclipse

Continue reading »

 

[Programming] learning-cpp – Tao of Programmer

作者:fangzhzh
声明:允许未经作者的同意进行非商业目的的转载,但必须保证原文完整性
本文永久链接地址:http://www.fangzhzh.info/2010/7/learning-cpp



learning cpp series

Why this series should be given birth to.

Thousands and thousands articles and books are there involving in c++ language. So why I want write this series about c++.

In my option, the best way to confirm that you have mastered some knowledge is you can teach that to others clearly in your tone. So this series is my teaching plan. Forthmore, notes are good for memory.

how will this series flow

Followed with process of reading The C++ Programming Language1, I will develop articles from problems about some obscure language detail and thoughtss when resolving some test from this book.

I will focus on many conceptual points.

what will be covered

The series will focus on C++, yet not limite in c++, also on compiling, debugging, assembler, Operating System, etc.

post list

learning-cpp-series-overview

1.the c++ programming language wiki, the c++ programming language homepage.


 

[Programming] 如何用c程序计算出char类型在你机器上的最大最小值

作者:fangzhzh
声明:允许未经作者的同意进行非商业目的的转载,但必须保证原文完整性
本文永久链接地址:http://fangzhzh.info/blog/2010/5/how-to-calc-maximum-and-minimum-of-char-using-c-function

显而易见,char是8位,一个字节。《c++ Primer》1上是这么说的“char类型保证了有足够的空间,能够存储机器基本字符集中任意字符相应的数值,因此,char类型通常是单个机器字节”,2^8=128,所以其取值范围应该就是-128~127. c标准里有相应的常量来表示CHAR_MAX 127 ,CHAR_MIN -128。

但是,如何使用c程序来得到这个最大最小值呢?

下面记录下我实验的过程。

我想法如下:
char范围是127--128。所以char变量c自加,直到127时,c+1就变成了-128,这样就会c>c+1,而之前都是c<c+1。所以,写个for循环。

version1 程序是这么写的:

char c;
for(c=0; c < c+1; c++)
printf("the maxest char is %d", c);

问题:结果是个死循环,gdb跟进去后,发现c是127时,c+1是128,然后是-128和-127。永远c < c+1。
原因:隐形类型转换的问题。
上边程序添上如下两句后,

printf("c bits%d, c+1 bits%d",sizeof(c), sizeof(c+1));

输出:
c bits 1, c+1 bits 4.
原来c+1,char强制类型转换为int( 这里涉及到隐形的类型转换的问题,不懂的,可以查阅相关知识)。

version2 程序:

for(c=0; c<++c;);

找出最大值和最小值,本代码基于这样一种假设,<号的求值顺序是先左后右。取c值127,++c,取c值-128。
结果这个循环一次没有成功。
原因:C语言中只有四个运算服(&&、||、?:和,)存在规定的求值顺序。运算符&&和||首先对左侧操作数求值,只在需要时才对右侧操作数求值。运算符?:有三个操作数:在a?b:c中,操作数a首先被求值,根据a的值再求操作数b或c的值。而逗号运算符,首先对左侧操作数求值,然后该值被“丢弃”,再对右侧操作数求值。
所以,上边那个程序,也不对,没有保证”<”左边一定会优先于右边取值。

version3:

char c, d;
for(c=0, d=1; ++c < ++d;);
printf("char min:%d max:%d", d, c);

此方法应该可以适用于所有c的内置类型。

1.. 豆瓣介绍亚马逊介绍

 

[Programming] c/c++学习笔记 – Tao of Programmer

作者:fangzhzh
声明:允许未经作者的同意进行非商业目的的转载,但必须保证原文完整性
本文永久链接地址:http://www.fangzhzh.info/2010/7/c-programming-notes

在8、9年与c/c++斯磨的过程中,多多少少有一些笔记,有一些感悟,有一些技巧。

以前一直没有记录下来,皆是源于对新知识的饥饿感,远远胜过了要对已学过东西进行反刍的想法。

皆因缺乏系统的学习方法和明确的学习方向,所以尽管多年来我一直在programming field的孜孜不倦的狩猎,结果却是没有在任何涉及的领域被称作牛人。但是最少,现在我也算是一个程序开发百事通,学c/c++没我python好,学python的没有我perl好,学windows的没有我linux好,。

随着知识网和知识系统的逐渐建立,任何新的东西几乎总能将其归到知识体系的某一个分类里,那么现在再也不用无目的的去狩猎新的知识来满足好奇心、虚荣心,和克服未知的恐惧感了。那么现在现在最必要的工作就是对已有、已掌握的知识的反刍。原因很明显,广泛的知识面,只有在你精通了一门知识之后才尤为可贵;否则百事通在行家看来,其实就是个“百事不通”。

这个系列就是记录下c/c++的相关学习笔记。

如何用程序计算出char类型在你机器上的最大最小值

the c++ programming language 学习笔记

learning cpp series – overview


 




[Fangzhzh]程序员能力矩阵及自我分析

作者:fangzhzh
声明:允许未经作者的同意进行非商业目的的转载,但必须保证原文完整性

程序员能力矩阵的翻译版本原文

注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次
n的知识。

Continue reading »

 




[Linux]如何man c++标准库函数

作者:fangzhzh
声明:允许未经作者的同意进行非商业目的的转载,但必须保证原文完整性

man c++标准库函数
GNU GCC 提供了一份关于 MAN 格式的 C++ 标准库的文档,可以在其镜像点
http://gcc.gnu.org/mirrors.html) 中下载。具体的路径
是:libstdc++/doxygen/libstdc++-man-xxxxxx.tar.bz2,可找一个最新日
期的下载。展开包之后将 man/man3 中的所有文件拷贝到系统上已经存在的一个 man/man3 目录中即可使用。

可首先 man C++Intro 阅读 Introduction to the GNU libstdc++-v3 man pages。

对于 cout,你需要知道它是 std::ostream 类的一个对象,所以应该 man
std::ostream。

 

老代码Uva或者二进制不能连接,解决问题看这里:http://sourceforge.net/forum/forum.php?thread_id=2055268&forum_id=76439

针对这个问题的解答,我摘录到这里

Almost all past binaries and source code are not compatible with the version 12 simulator. This problem is caused by overflow of an array that keeps heterogeneous player types. If you want to run old binaries that cannot deal with the number of player types correctly, you need to change the following parameters in ~/.rcssserver/player.conf.

player::player_types = 7 (default : 18)
player::pt_max = 3 (default : 1)
player::allow_mult_default_type = true default : false)

翻译为:

几乎所有过去的二进制可执行文件和源代码和版本12的模拟器不兼容。 这个问题是有一个保存异构球员类型的数组越界所引起的。如果你想要与你运行那些不能正确处理队员类型数目的二进制文件,你需要修改~/.rcssserver/player.conf(即主目录下隐藏文件夹rcssserver下的player.conf)的如下参数

player::player_types = 7 (default : 18)
player::pt_max = 3 (default : 1)
player::allow_mult_default_type = true default : false)

下边我需要看下,如何将自己的代码成为能够正确处理队员类型数目的代码呢?

加油

呵呵,二十分钟之后,我又看到这篇

https://sourceforge.net/forum/forum.php?thread_id=1962875&forum_id=76439

原来改变代码到可以到新server下,更加简单,不用修改~/.rcssserver/player.conf文件,

If you use the UvA base code, you need to change the following value in SoccerTypes.h and compile the code again.

old: #define MAX_HETERO_PLAYERS 7 /*!< Maximum number of hetero players*/

new: #define MAX_HETERO_PLAYERS 18 /*!< Maximum number of hetero players*/

如果你用的是Uva代码,你需要把SoccerType.h文件按下免提是修改,然后编译代码。

old: #define MAX_HETERO_PLAYERS 7 /*!< Maximum number of hetero players*/

new: #define MAX_HETERO_PLAYERS 18 /*!< Maximum number of hetero players*/

哈哈,可以玩了

 

librcssclangparser.so.2: cannot open shared object file:

这个是我在编译rcssserver12.1 的时候,遇到的—只有在suse系统上遇到过。

suse10就是因为这个原因被我判刑,换成SUSE11.

可是今天装好11,也出现这个问题。

google下,只有一个日文的相关,其他都没有什么用。

lingoes下,找到一段内容,具体内容不说,只说解决办法:
编辑 /etc/ld.so.conf文件,
加入/usr/local/lib
然后,sudo ldconfig

同时我也在重新编译rcssserver 12.1,在ldconfig和rcssserver的sudo make install 完成后,rcssserver就工作正常。
两个都完成server才工作正常,因此我不能说就是那个ldconfig所做的,但是作为一个可能性,也是另一种思路嘛。

 

用了一段FC9开发robocup,可是问题太大了。
gcc 4.3,直接导致几乎所有uva带教练的的代码都不能编译通过,修改了一些#include 的问题后,又出现队员要么上不去server,要么上去就段错误。能不错时候没有。gdb调试已经找到哪里代码出错,但是原因,找不到。郁闷

于是想换平台算了。
在网上查了下,看看哪个linux版本对程序员开发比较好。看到一篇博客说,suse professional比较好用,想起那次参加比赛的时候,平台就是suse的,于是下个SUSE 9 professional的来装下。

SUSE yast you好像没有很好用,就下载了apt,网上说怎么下载、安装、使用的比较多,不多说了。

说说eclipse。eclipse我已经用着顺手了,感觉比kdevelop好用些。我在linxue enterprise 4里用kdevelop遇到一个bug,郁闷死我。bug就是当你拷贝一个文件A(工程内文件)的内容复制到另一个文件B,当你回到你拷贝出的那个文件A时,突然发现你复制的那段文字,消失了!!!也就是不知道为什么变成了剪切。可让我吃了大苦头,很多时候编译错误,找来找去才发现某个文件少内容,细想不该啊,于是补充。 多次出现我才总结出这个bug来。

eclipse现在最新是3.4,代码为ganymede。cdt 5.0,java 要求1.5以上(后来才知道)。

一看,捡着最新的下载下来了,可是一运行发现报错,一抽,SUSE 9下java是1.4,郁闷了。

于是又下了eclipse 3.4,代码Europa, cdt 4.0 ,java 1.4以上。
配置好,想这在路径下放个eclipse的快捷方式。
咱总不能把整个eclipse文件夹全部放到/bin/ 或者/usr/bin/里去啊,这多变态。
$ sudo ln -s $ECLIPSE_HOME/eclipse /bin/eclipse
可是会报错,好像是什么共享库不能加载之类的。
google下,找到了下边是怎样搞的步骤,老外就是牛人多啊。

Then Eclipse:
Extract the eclipse download and move to opt.

tar xzf wtp-all-in-one-sdk-1.0-linux-gtk.tar.gz
sudo mv eclipse /opt/eclipse cd /opt sudo chown -R root:root eclipse
sudo chmod -R +r eclipse
sudo chmod +x `sudo find eclipse -type d`

Then create an eclipse executable in your path

sudo touch /usr/bin/eclipse
sudo chmod 755 /usr/bin/eclipse
sudoedit /usr/bin/eclipse
With this contents

#!/bin/sh
#export MOZILLA_FIVE_HOME=”/usr/lib/mozilla/”
export ECLIPSE_HOME=”/opt/eclipse”

$ECLIPSE_HOME/eclipse &
Then create a gnome menu item

sudoedit /usr/share/applications/eclipse.desktop
With this contents

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true
Configure
You now have a working eclipse. But run this command first to initialise the set up.

/opt/eclipse/eclipse -clean
Then from here on you can run from the menu item applications/programming/eclipse

\

© 2012 Tao of Programmer Suffusion theme by Sayontan Sinha