Dec
28
作者:Chatterley  |  标签:  |  分类:未分类

下载地址:main.cpp
修改扩展名为cpp。
前提:修改main.cpp里面的main方法

  1. 1
  2. 2
  1. char image[30] = "image1.jpg"; //你要添加水印图片
  2. char waterImage[30] = "wm1.png";//你的水印图

在linux下执行
>g++ -o main main.cpp -lgd -ljpeg
>./main

推荐(0)
收藏
Nov
25
作者:Chatterley  |  标签:  |  分类:编程

一篇详细讲述autoconf和automake的好文章。
原文地址:http://www.ibm.com/developerworks/cn/linux/l-makefile/

推荐(0)
收藏
Nov
20
作者:Chatterley  |  标签:  |  分类:未分类

1. 原声明:int *(*a[5])(int, char*);
变量名为a,直接用一个新别名pFun替换a就可以了:
typedef int *(*pFun)(int, char*);
原声明的最简化版:
pFun a[5];

2. 原声明:void (*b[10]) (void (*)());
变量名为b,先替换右边部分括号里的,pFunParam为别名一:
typedef void (*pFunParam)();
再替换左边的变量b,pFunx为别名二:
typedef void (*pFunx)(pFunParam);
原声明的最简化版:
pFunx b[10];

3. 原声明:doube(*)() (*e)[9];
变量名为e,先替换左边部分,pFuny为别名一:
typedef double(*pFuny)();
再替换右边的变量e,pFunParamy为别名二
typedef pFuny (*pFunParamy)[9];
原声明的最简化版:
pFunParamy e;

理解复杂声明可用的“右左法则”:从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个声明分析完。举例:
int (*func)(int *p);
首先找到变量名func,外面有一对圆括号,而且左边是一个*号,这说明func是一个指针;然后跳出这个圆括号,先看右边,又遇到圆括号,这说明 (*func)是一个函数,所以func是一个指向这类函数的指针,即函数指针,这类函数具有int*类型的形参,返回值类型是int。
int (*func[5])(int *);
func右边是一个[]运算符,说明func是具有5个元素的数组;func的左边有一个*,说明func的元素是指针(注意这里的*不是修饰 func,而是修饰func[5]的,原因是[]运算符优先级比*高,func先跟[]结合)。跳出这个括号,看右边,又遇到圆括号,说明func数组的元素是函数类型的指针,它指向的函数具有int*类型的形参,返回值类型为int。

摘自:http://faq.csdn.net/read/217385.html

推荐(0)
收藏
Nov
18
作者:Chatterley  |  标签:  |  分类:未分类

输入s为石头,x为剪刀,p是布,机器随机生成石头剪刀布。进行比较,看谁先赢3次就OVER
代码如下:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <time.h>
  4.  
  5. using namespace std;
  6.  
  7. #define WINSCORE 3
  8.  
  9. // Function PickRandomOption
  10. // * Returns a random character between 's', 'x', and 'p'
  11. char PickRandomOption (void)
  12. {
  13. char option;
  14. srand ( time (NULL) ); // (re)initialize random number generator
  15. int value = rand()%3; // Generate random number between 0 and 2
  16.  
  17. switch (value) {
  18. case 0: option='s'; break;
  19. case 1: option='x'; break;
  20. case 2: option='p'; break;
  21. }
  22. return option;
  23. }
  24.  
  25. // Function WhoWins
  26. // * check which of the characters passed wins.
  27. // return values:
  28. // 0= tie, 1=the first, 2=the second, -1=error
  29. int WhoWins (char a, char b)
  30. {
  31. switch (a)
  32. {
  33. case 's':
  34. if (b=='x') return 1;
  35. else if (b=='p') return 2;
  36. else return 0;
  37. case 'x':
  38. if (b=='p') return 1;
  39. else if (b=='s') return 2;
  40. else return 0;
  41. case 'p':
  42. if (b=='s') return 1;
  43. else if (b=='x') return 2;
  44. else return 0;
  45. default:
  46. return -1;
  47. }
  48. }
  49.  
  50. main ()
  51. {
  52. char you, me;
  53. int mypoints=0;
  54. int yourpoints=0;
  55. int winner;
  56.  
  57. do {
  58. //prompt user.
  59. cout << "\nEnter s, x or p ";
  60. cout <> you;
  61.  
  62. //decide computer's option and say it
  63. me = PickRandomOption();
  64. cout << "I say: " << me << "\n";
  65.  
  66. // check who is the winner
  67. winner = WhoWins (you,me);
  68.  
  69. // show appropiate message:
  70. if (winner==0) cout << "Tied\n";
  71. else if (winner==1) { cout << "You win\n"; yourpoints++; }
  72. else if (winner==2) { cout << "I win\n"; mypoints++; }
  73. else cout << "Sorry. You entered an Invalid option\n";
  74.  
  75. // show current scoreboard.
  76. cout << "POINTS: You:" << yourpoints;
  77. cout << " Me:" << mypoints << "\n";
  78.  
  79. } while (yourpoints<WINSCORE && mypointsmypoints) cout << "You win the competition!\n";
  80. else cout << "I win the competition!\n";
  81. return 0;
  82. }
推荐(0)
收藏
Nov
17
作者:Chatterley  |  分类:未分类

1到100随机生成一个数字,通过输入来比较数字大小,知道猜中为止,代码如下:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <limits>
  4. #include <time.h>
  5. using namespace std;
  6. // Define the greatest possible value:
  7. #define MAX_RANGE 100
  8.  
  9. main ()
  10. {
  11. int counter=0;
  12. long value,input;
  13.  
  14. srand ( time (NULL) ); // Initialize random generator
  15. value = rand()%MAX_RANGE+1; // Get random between 1 and MAX_RANGE
  16.  
  17. time_t start, submit;
  18. double duration;
  19.  
  20. start = time(NULL);
  21.  
  22. cout << "\nInsert a value between 1 and " << MAX_RANGE <> input)) { // Get user input
  23. cin.clear();
  24. cin.ignore(numeric_limits ::max(), '\n');
  25. cout <input) // is value grater than the input?
  26. cout << "Value is greater than " << input;
  27. else if (value<input) // if not, is it less?
  28. cout << "Value is less than " << input;
  29. else { // else it is the correct number!
  30. cout << "That's right! Value was " << input;
  31. cout << "\nYou have needed " << counter <<" attempts.\n";
  32. }
  33.  
  34. submit = time(NULL);
  35. duration = submit - start;
  36. cout << "\nthinking time:" << duration << " secords. Try again:";
  37.  
  38.  
  39. } while (value!=input);
  40.  
  41. return 0;
  42. }
推荐(0)
收藏
Nov
13
作者:Chatterley  |  标签:  |  分类:PHP

在PHP操作底层资源的时候往往会出现冲突的时候,例如调用linux命令来执行资源占用的时候。如果有人操作,那么就会导致失败。例如A正在执行命令,那么B执行命令的时候如果没有判断执行命令是否成功,则会和你系统(写入数据库)不一致。在写入数据库和执行资源这2部分如何使用事务管理呢?很少有语言层面上提供事务,一般是数据库提供事务处理。那么我们可以变相的事务处理,利用资源只能一个占用,就是同步执行。可以采用如下方法:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  1. function mutex_init()
  2. {
  3. global $use_flock, $mutex;
  4. $mutex_filename = FILEDIR . '/mutex.lock';
  5. $sem_id = 220;
  6.  
  7. if(function_exists('sem_get'))
  8. $use_flock = false;
  9. else
  10. $use_flock = true;
  11.  
  12. if ($use_flock)
  13. $mutex = fopen($mutex_filename, 'w');
  14. else
  15. $mutex = sem_get($sem_id, 1, 0644 | IPC_CREAT, 1);
  16. }
  17.  
  18. function writers_entry() {
  19. global $use_flock, $mutex;
  20.  
  21. if ($use_flock)
  22. flock($mutex, LOCK_EX);
  23. else
  24. sem_acquire($mutex);
  25. }
  26.  
  27. function writers_exit() {
  28. global $use_flock, $mutex;
  29.  
  30. if ($use_flock)
  31. flock($mutex, LOCK_UN);
  32. else
  33. sem_release($mutex);
  34. }

那么就可以在系统初始化使用mutex_init(),然后在执行事务入口使用writers_entry(),出口使用writers_exit()
使用代码记得定义FILEDIR(锁文件路径)

推荐(0)
收藏
Sep
28

需要php4才能编译的。如果是php5将会报告错误。

推荐(0)
收藏
Sep
27
作者:Chatterley  |  分类:未分类

Indri Search Engine 是Lemur Toolkit下的一个子集。

Lemur除了Indri外,还有语言模型和经典的语言模型部分。

Indri是搜索引擎,Lemur是基于Indri上的一个应用工具包。

推荐(0)
收藏
Jul
27

大家一定有想法,想把WPMU的模板上的导航添加外链,这个实现其实很简单。
这里吧链接分类名为navitems作为导航的链接,只需要在theme下添加如下的代码:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  1. /**
  2.  * 导航实现
  3.  *
  4.  * @param unknown_type $before
  5.  * @param unknown_type $after
  6.  */
  7. function itheme_nav($before = '', $after = ''){
  8. $nav_items = array(
  9. 'orderby' => 'name', 'order' => 'ASC',
  10. 'limit' => -1, 'category' => '',
  11. 'category_name' => 'navitems', 'hide_invisible' => 1,
  12. 'show_updated' => 0, 'include' => '',
  13. 'exclude' => '', 'search' => ''
  14. );
  15. $results = get_bookmarks($nav_items);
  16.  
  17. $output = '';
  18. if($results){
  19. foreach ( (array) $results as $row ) {
  20. $output .= $before;
  21. $the_link = '#';
  22. if ( !empty($row->link_url) )
  23. $the_link = clean_url($row->link_url);
  24. $rel = $row->link_rel;
  25. if ( '' != $rel )
  26. $rel = ' rel="' . $rel . '"';
  27.  
  28. $desc = $row->link_description;
  29. $name = $row->link_name;
  30. $title = $desc;
  31.  
  32. if ( '' != $title )
  33. $title = ' title="' . $title . '"';
  34.  
  35. $alt = ' alt="' . $name . '"';
  36.  
  37. $target = $row->link_target;
  38. if ( '' != $target )
  39. $target = ' target="' . $target . '"';
  40.  
  41. $output .= '<a href="' . $the_link . '">';
  42.  
  43. if ( $row->link_image != null && $show_images ) {
  44. if ( strpos($row->link_image, 'http') !== false )
  45. $output .= "<img src="\" alt="" />link_image\" $alt $title />";
  46. else // If it's a relative path
  47. $output .= "<img src="\" alt="" />link_image\" $alt $title />";
  48. } else {
  49. $output .= $name;
  50. }
  51.  
  52. $output .= '</a>';
  53.  
  54. $output .= "$after\n";
  55. }
  56. }
  57.  
  58. echo $output;
  59. }

那么在具体的header.php(各种模板位置不一)上,添加自己的导航显示:

  1. 1
  2. 2
  3. 3
  1. //......
  2. <?php itheme_nav( '<li>', '</li>')?>
  3. //......

具体的链接到WPMU后台去添加一个分类navitems,在这个分类下添加导航链接和打开的方式,这里就不具体介绍了。

推荐(1)
收藏
Jul
13
作者:Chatterley  |  标签:  |  分类:三五博客

三五博客速度比其他Wordpress快的理由:

1、一般情况下,个人托管Wordpress只是简单的把WordPress代码放到PHP空间而已,没有对代码进行优化。

2、Wordpress主机不提供额外内存给用户,即不提供APC、eAccelerator、xcache等PHP加速(占用内存)。

3、Wordpress主机顶多使用SuperCache,而三五博客不仅提供SuperCache,而且还提供Memcached缓存。

4、Wordpress主机还提供其他的主机服务,例如Drupal,导致争抢CPU资源和内存资源,三五博客服务器只提供博客服务,更专业;

5、Wordpress对于多语言的处理条目太多(上万条目),并且从硬盘读起,很耗时间、而三五博客是直接把多语言包常驻内存使用。速度更快。

6、Wordpress对于博客模板信息都是从硬盘读起,对于模板数量很大的情况下,很耗时间、而这些三五博客都是常驻内存处理。

还有其他很多的优化特性,不在此一一列举……

推荐(2)
收藏
得到OpenID
使用OpenID提供商
35OpenID 35OpenID MyOpenID MyOpenID Flickr Flickr
Google Google Yahoo Yahoo! AOL AOL
Blogger Blogger LiveJournal LiveJournal Verisign Verisign
ClaimID ClaimID Technorati Technorati Vidoop Vidoop
OpenID OpenID 帮助
您还没有登录,请登录后继续操作。
提示:您必需打开Cookie才能使用本系统
请输入您的 OpenID OpenID 登录:
例如:http://yourname.openid.35.com
close