博客重生

Featured

07年的时候注册了一个域名shuaiqixiaozi.com,开始写博客,在网上搜索博客方面的东西,学习,与其他博客建立关系,基本上了解到大多数写博客就是为了访问量,为了PageRank,为了ads赚点钱。看各种文章并照着做,发的日志很多都是网上有的东西,甚至直接照搬过来的东西,然后还SEO优化,不到一个月,我博客的PR就升到2了,然后也放些广告什么的,网游充值提成什么的,以及淘宝网购提成。

但毕竟对这些不感兴趣,现在回过头来看,以前那博客简直就是一坨屎。上面的东西都是为了别人用谷歌、百度能搜索到你的博客,其实并没有真正写博客的习惯,经常很长时间一点内容都没有,要写也不知写啥,有东西也没想到要写到博客上。
后来博客改用WordPress,没再弄过广告什么的了,PR降到0,然后又回升到PR3,那时候还看到别的网站上显示我博客网站价值有十多万RMB,也不知道他那个价是怎么估的。

10年的时候决定把博客域名换成zi-jin.com,但搜索引擎们还是一直收录原来那个,而不管新的这个,由于zi-jin.com和shuaiqixiaozi.com显示的内容始终是一模一样的,估计还以为zi-jin.com是抄袭的然后惩罚(确实有这个机制)。
换了zi-jin.com之后,准备做一个技术博客,但也是没写什么,顶多就是偶尔把自己做的一些东西发上来。现在感觉这博客这么多年都扮演着一个鸡肋角色。还每年要花我那么多钱……

早些天因为准备做sowicm.com我的个人主页,规划结果是以后我做的东西都放到sowicm.com,那zi-jin.com连它最后一点作用都失去了……于是不得不重新为博客定位了,定位的结果是从面对搜索引擎改向面对圈子,比如朋友圈子、技术圈子,最好能形成一批固定的读者。并且用博客代替以前的QQ空间,逐步把QQ空间的日志都迁移过来。并养成写博客的好习惯,哈哈。
然后现在第一步,非常重要的工作,就是建立一套优秀的Categories

中南大学全自动选课软件

云计算版首次发布,尚处于测试阶段,请选课的时候使用此软件的同时像平时一样手动选课,以免因软件问题导致你耽误了时间。

下载地址:
中南大学全自动选课软件 – 云计算标准版 最新版:0.5.2.1版 (4/19/2012 13:47)
(适合个人使用)
http://www.box.com/s/0adb1b87c86617b3e01d

中南大学全自动选课软件 – 云计算高级版 最新版: 0.4.2.1版
(能同时帮100个人选课而速度和标准版差不多,但一个人用的话可能标准版表现更好)
http://www.box.com/s/9ca653d0ceb561d3619c
两个版本可以同时用,还可以加上传统的手工选课。

PS: 非云计算版(老版本)在高峰期能在3秒内完成选课,非高峰期半秒不到。云计算版代码全部重写,尚未测试。

关于UI版:
此类软件明显控制台版比UI版好用,原因嘛……控制台版双击就能开始工作,UI版每次运行还要输入(什么?不要每次运行都输入?那还要UI版干嘛。。。。。。)
所以说谁有兴趣的话可以做一个UI软件来和用户交互生成txt文本供我的选课软件使用。( 但我还是觉得直接改文本方便得多嘛 )

熬夜克星

还在为常常下定决心要12点前睡觉但又总是做不到而烦恼吗?这个小工具说不定能帮到你哦,哈哈。

功能

熬夜克星会在每天晚上11点半提醒你去睡觉,并在12点强制将计算机进入休眠状态。并且早上8点前想尝试开机都会自动休眠。

注意事项:

需要打开休眠功能。
方法:开始菜单->附件->命令提示符 输入:powercfg -hibernate on  若不成功请自行百度(培养你自行解决问题的能力,哈哈)

FAQ

Q:电脑进入休眠状态后我该做什么?
A:拔掉电脑插头,然后洗洗睡吧

Q:我正在用记事本写东西,刚到12点,屏幕就黑了,我没保存的文本还在吗?
A:进入了休眠状态,只要你系统不出故障,下次开机后会和你进入休眠状态前是一个样子,你可以先从 开始菜单->休眠 尝试一下休眠功能

下载地址:

AoYeKeXingA (257)

C++学习方法导论

转载请注明出处:转载自 至尊明帅的博客 原文地址:http://zi-jin.com/?p=10

很多同学都在为学C++而烦恼,现在我希望能提供一些帮助大家学C++的东西。

第一部分:准备工作

1.我不想一开始就介绍很多概念性的东西(但有一些是必须的),想先让大家亲自体验,然后引出概念。希望大家喜欢这种方式。

2.大家看到这篇文章前应该已经看过有关C++语言的书籍,如学校课本,本文并不是代替课本,或许只是引导你如何去看课本及其他书籍。

3.本文说的C++均指标准C++。(这句话是写给看得懂这句话的人看的,现在大家可以不用在此纠结。)

4.C++是一门语言,是人与机器的沟通方式。遵循C++语言规范写出来的东西叫代码,它必须经过编译器编译成机器能执行的指令。

5.其实如果你能把C++ Primer这本书看完,不需要任何其他资料就能了解整个C++语言了,但真的一开始就抱着那么大一本砖头书看也不知道好不好,反正我没试过,我觉得学习过程中还是要以培养兴趣为主。

6.如有任何疑问,欢迎在下面留言:http://zi-jin.com/archives/10#comment

第二部分:从大家都看过的一个C++程序说起:

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
int main()
{
    int a;
    cin >> a;
    cout << "received number is " << a;
    return 0;
}

1.“int”是什么?
int a;
表示声明(Declare)一个整数型变量(interger),其名称为“a”,就像数学里面“设长方形的长为a,宽为b”,值得注意的是你不能“设长方形的长为a,宽为a”。因为标识符(Identifier)在其作用域(Scope)内必须是唯一的,从其英文名可以看出,我们必须凭这个名字而找到准确的事物。
声明多个整数型变量时,可以写成:int a, b, c, d, e;
在C++中,你必须先声明一个变量,才能使用它。
这句话是什么意思?就是上面那个程序中,如果没有“int a;”这个语句,那编译时就会报错,通常的提示是:[未声明的标识符 'a'](error: ‘a’ was not declared in this scope)
解决方法?你是把int a;删掉了引起的这个问题,把它重新加上去呗……
除了int外,C++还有其他基本内置类型。下面都提一下:
bool 布尔型
其值为true或false,用来表示一个条件是否成立。比如我可以声明以下一组变量来简单的表示一个人的基本特征:bool bMale, bTall, bStrong, bHealthy, bMarried;

char 字符型
通常用单引号里面一个字符给它赋值(建议这么做),一个字符占一个字节。另外建议了解一下“转义符”(Escape)。如果你不知道为什么’\0′等于0的话那就是还不够了解。

wchar_t 宽字符型
通常用单引号里面一个字符或2个字符给它赋值(建议这么做),一个宽字符占2个字节。有很多人都不知道 wchar_t w = ‘ab’; 这样赋值。

short 短整形
一般占2个字节

int 整形
一般在多少位CPU上工作就占多少位。比如在32位机器上就占4个字节(8位为1字节)。建议不了解的同学搜索一下字、字节、位、双字等单位。

long 长整形
一般占4个字节

float 单精度浮点数
发现有很多同学学了很久C++还不知道如何用C++来表示整数之外的数……建议同学了解一下float在内存中是如何存储的(问搜索引擎)。

double 双精度浮点数
这个也用来表示浮点数,而且推荐使用这个,因为现在32位机器一般处理double比float更快。同样建议同学了解一下double在内存中是如何存储的。

long double 扩展进度浮点数
这个提供的精度一般没有必要,而且还需要承担额外的效率代价。

char型和各种整型前面可以加signed 或 unsigned 说明符
一般不加默认为signed
加unsigned就成了无符号型
有符号型可以表示的数据范围一般是 -2^(n-1) ~ 2^(n-1)-1
无符号型可以表示的数据范围一般是 0 ~ 2^n – 1
如 char 可以表示 -128~127
unsigned char 可以表示 0~255
特别说明:signed a; unsigned b; 一般分别等价于 signed int a; unsigned int b;

除了以上这些基本内置类型外,你还可以使用“typedef”来自定义类型,以及枚举类型(enum)、结构体(struct)、类(class)、联合(union)等

声明变量的格式一般为:
typename identifier [, identifier2, identifier3, ...];
声明时也可以给变量定义,如:
int a = 1, b = 2;

2.函数(function)是什么?
从其英文名可以看出函数其实是一个“功能”,它是用来被调用的,它能根据你提供给它的东西得到一个结果并告诉你、对你提供的东西进行诸多处理、或者只是你对一组常用的语句进行的“打包”。
函数包括参数(parameter)、函数体(function body)、返回类型(return type)。
其声明格式通常为:
return_type function_name(parameters);
声明不包括函数体,定义才包括函数体,定义格式通常为:
return_type function_name(parameters)
{
function_body
}
其中parameters的格式一般为parameter[, parameter2, parameter3, ...] *值得注意的是函数并不一定要有确切数目的参数,感兴趣的可以先自行搜索“C++ 不定参数”来了解
函数体是一个块(Block),块就是用一对花括号括起来的语句序列,可以为空,块就是一个作用域,块中还能有块。
参数就是你提供给它的东西,函数体就是它的实现过程,返回类型是指定它将返回什么类型的结果。
返回类型除了你声明时能用的类型外,还包括一个void类型,即表示不返回东西。
下面来看这样一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
void out(char *str)
{
    cout << str;
}
int main()
{
    out("I'm a parameter of function \"out\".");
    return 0;
}

如果窗口一闪而过,解决办法:
1.从Terminal或CMD中调用程序
2.在return 0; 的前面加一条 scanf(“%d”);
3.对于Windows系统,在return 0; 的前面加一条 system(“pause”);

上面这个例子如果不明白 \”out\” 是什么意思,请搜索“转义符”
如果不明白 char *str 是什么意思没关系,其实这是指针
你要明白的仅仅只是函数的格式以及调用

下面来介绍如何在一个函数func1中调用另一个函数func2的同时func2也调用func1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
void func1(bool bCallFunc2)
{
    if (bCallFunc2)
        func2(false);
    cout << "Func1\n";
}
void func2(bool bCallFunc1)
{
    if (bCallFunc1)
        func1(false);
    cout << "Func2\n";
}
int main()
{
    func1(true);
    func2(true);
    return 0;
}

这个是编译不过的,不管你如何调换func1和func2的顺序都没用。
解决方法是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
void func2(bool);
 
void func1(bool bCallFunc2)
{
    if (bCallFunc2)
        func2(false);
    cout << "Func1\n";
}
void func2(bool bCallFunc1)
{
    if (bCallFunc1)
        func1(false);
    cout << "Func2\n";
}
int main()
{
    func1(true);
    func2(true);
    return 0;
}

函数名和变量名一样也是标识符,也必须要先声明后引用,以上解决办法就是在func1和func2的定义之前加上func2的声明(上面已经介绍了函数声明的格式)

另外还有一个有趣的,那就是一个函数可以调用它自己,看例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
void func(int cnt)
{
    if (cnt <= 0)
        return;
    cout << "Called once\n";
    func(cnt - 1);
}
 
int main()
{
    func(10);
}

编译并运行后可以看到会输出10行”Called once”,学过循环控制语句的同学当然还知道其他方法实现这一点。但现在这里是介绍递归函数。通常利用循环控制语句执行效率要比递归函数高。

3.“main”是什么?

4.“#include”是什么?“#include <iostream>”和“#include “iostream””有什么区别?

5.命名空间(namespace)是什么?“#include <iostream>”和“#include <iostream.h>”有什么区别?

6.“using namespace std”是什么?

7.“cin”和“cout”是什么?

第二部分:
1.作用域(Scope)

To be continued…

WordPress文章ID重复利用环保节约方案

写博客经常会删掉以前的一些日志,就浪费了很多ID。

于是提供重复利用文章ID的方法:

注意!写本文章时使用的WP版本为3.2.1

用文本编辑器打开 /wp-includes/post.php 文件,找到 wp_insert_post 函数(3.2.1版直接找到2584行),看到如下代码:

1
2
3
4
5
6
		if ( !empty($import_id) ) {
			$import_id = (int) $import_id;
			if ( ! $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE ID = %d", $import_id) ) ) {
				$data['ID'] = $import_id;
			}
		}

在下面添加一部分,变成:

1
2
3
4
5
6
7
8
9
10
11
12
13
		if ( !empty($import_id) ) {
			$import_id = (int) $import_id;
			if ( ! $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE ID = %d", $import_id) ) ) {
				$data['ID'] = $import_id;
			}
		}
                else
                {
                    $sowicm_pid = 1;
                    while ($wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE ID = %d", $sowicm_pid)))
                        ++$sowicm_pid;
		    $data['ID'] = $sowicm_pid;
                }

看,这篇文章的地址在经过这样修改之后就不是 http://zi-jin.com/archives/5xx 而是 http://zi-jin.com/archives/1 了。
Enjoy it!

【至尊沙漏】 – 闹铃闹钟软件 – 定时提醒 – 延时提醒 – 规律提醒 – 执行命令

至尊沙漏是一个提醒工具。
运行后只在托盘处显示一个图标:

SNAGHTMLeee17d

最新版本:1.1.2

更新日志:

1.1.2 更新:
    ·新增“下次启动时”(当次提醒)和“每次启动时”(规律提醒)2种提醒方式
    ·修正了自动运行的实例不播放声音的问题

1.1.1 更新:
    ·修正了更新数据库的问题

1.1.0 更新:
    ·加入了导入数据的功能
    ·3处细节调整
    ·修正了自动启动与手动启动的使用的数据不同的错误

Continue reading

WP-Download_Monitor – 如何新窗口打开下载链接

打开 hostname/wp-content/plugins/download-monitor/shortcodes.php 文件,找到

78
79
80
81
			if (empty($format) || $format=='0') {
				$format = '<a class="downloadlink" href="{url}" title="{version,"'.__("Version","wp-download_monitor").'", ""} '.__("downloaded","wp-download_monitor").' {hits} '.__("times","wp-download_monitor").'" >{title} ({hits})</a>';	
 
			}

将其修改成:

78
79
80
81
			if (empty($format) || $format=='0') {
				$format = '<a class="downloadlink" href="{url}" target="_blank" title="{version,"'.__("Version","wp-download_monitor").'", ""} '.__("downloaded","wp-download_monitor").' {hits} '.__("times","wp-download_monitor").'" >{title} ({hits})</a>';	
 
			}

同理,找到:

207
208
209
210
		if (empty($format) || $format=='0') {
			$format = '<a class="downloadlink" href="{url}" title="{version,"'.__("Version","wp-download_monitor").'", ""} '.__("downloaded","wp-download_monitor").' {hits} '.__("times","wp-download_monitor").'" >{title} ({hits})</a>';		
 
		}

改成:

207
208
209
210
		if (empty($format) || $format=='0') {
			$format = '<a class="downloadlink" href="{url}" target="_blank" title="{version,"'.__("Version","wp-download_monitor").'", ""} '.__("downloaded","wp-download_monitor").' {hits} '.__("times","wp-download_monitor").'" >{title} ({hits})</a>';		
 
		}