配置amule,
  首次打开amule,会提示添加默认server list,Cancel之,打开amule->preferences->general,Nick随便填一个[CHN][VeryCD]dutor之类的,connection里设定Download、Upload速率上限,TCP、UDP端口可以默认,不行的话就在ufw中allow这两个端口。关于server list,随网络不同供使用的server也不同,我现在是教育网,用的是一个叫做BYR eserver的,ed2k://|server|211.68.71.81|42422|/,即IP:211.68.71.81,端口:42422,填入Add server manually。
配置FireFox,
  about:config里面添加Boolean键,名:network.protocol-handler.external.ed2k,键值:true。添加String键,名network.protocol-handler.app.ed2k,键值:呃,你得看看你的ed2k程序的安装路径了,可以用whereis ed2k或者whereis ed2k.amule,我的是/usr/bin/ed2k,做键值添入即可。重启FireFox,这时候amule应该可以使用了。
  
  Sucks……没想到会写这么多……真失败……

Tags: ,.

  使用PIC18单片机的ADC转换模块对RA0口输入的模拟电压信号进行转换,然后通过PORTD端口输出,而这里与PORTD对应引脚相连接的是8个LED。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
list P = 18F452 ;指明单片机型号为PIC18F452
#include P18F452.INC ;包含一个头文件,其中定义了一些端口及一些特殊寄存器的地址
 
	org	0000h  	;PIC上电时从0000h单元开始执行
	goto	main  	;跳转到主程序
	ORG	0008H  	;中断向量入口
	BTFSS	PIR1, ADIF 	; AD转换完成中断
	RETFIE
	GOTO	AD_ISR
 
	ORG	0030H  	;主程序定位
MAIN
	CLRF	TRISD  	;设定D口方向为输出
	CLRF 	PORTD 	;设定C口方向为输出
	BSF 	TRISA, 0 	; 使用AN0输入
	MOVLW	81H 	;FOSC/32, AN0, 开启
	MOVWF	ADCON0
	MOVLW	0EH 	;左对齐,AN0为模拟输入
	MOVWF	ADCON1 	;VDD & VSS为参考电压
	BCF 	INTCON, TMR0IF
	BCF 	PIR1, ADIF 	;清AD中断标志位
	BSF 	PIE1, ADIE 	;开AD中断
	BSF 	INTCON, PEIE 	;开外围中断
	BSF  	NTCON, GIE 	;开总中断
	MOVLW 	C7H 	;TMR0 8位,分频比为1:256
	MOVWF	T0CON
LOOP
	CALL	DELAY
	BSF  	DCON0, GO 	;开启 A/D转换
	GOTO	LOOP
 
DELAY
 
	BTFSS  	NTCON, TMR0IF 	; 等待延时,采样保持
	GOTO  	DELAY
	BCF  	NTCON, TMR0IF
	RETURN
 
AD_ISR ;AD转换完成时调用的中断服务程序,将转换结果输出
	ORG 	0200H
	MOVFF	ADRESH, PORTD 	;显示转换结果
	BCF 	PIR1, ADIF 	;清AD中断标志位
	RETFIE
END 	;程序结束
Tags: ,.
  •   分别抛两次硬币,无非三种情况:两正、两反、一正一反。所以,一正一反的概率是三分之一。
      问题出在哪里?
  •   有10个小球,其中6黑4红。现任意取出3个,问全部是红球的概率。是\Large \frac{C_4^1 C_3^1 C_2^1}{C_{10}^3}还是\Large \frac{C_4^3}{C_{10}^3}
      答案是后者,因为三个球是一次性取出的,而\Large C_4^1 C_3^1 C_2^1是一个一个逐次取出的,在取球的过程中就将球给排序了。
      那么,再看另外一个问法,同样是一次性取出三个球,问一黑两红的概率。是\Large \frac{C_6^1 C_4^2 }{C_{10}^3}吗?是的,之所以能够先取一个黑球再取两个红球(或者相反),是因为取黑球和取红球之间是独立的。
      再看,如果我要问,至少有一个红球的概率呢?显然应该反求没有红球的概率,为\Large 1-\frac{C_6^3 }{C_{10}^3}=\frac{100}{120}。我是不是还可以这样考虑:先取一个红球,然后再随便取两个球,无论什么颜色,这样概率就是\Large \frac{C_4^1 C_9^2 }{C_{10}^3}有问题吗?当然!\Large \frac{C_4^1 C_9^2 }{C_{10}^3}=\frac {144}{120}!可是为什么呢?因为后面随便取的2个球可能包含红球,这样的话,就犯了第二个问题的错误了。
  •   再来一个复杂一点的。6双不同的手套,任取4只。问,只有一双配套的概率。
      思路是6双中取一双,然后再设法取两只来自不同的手套。一种方法是从剩下的5双重任取2双,再从中分别各取一只,结果就是\Large \frac{C_6^1 C_5^2 C_2^1 C_2^1}{C_{12}{4}}。另一种方法是从剩下的5双10只中任取1只,然后将与该只配套的手套扔掉,接着再从剩下的8只中再取1只,结果是\Large \frac{C_6^1 C_{10}^1 C_8^1}{C_{12}{4}}。呃,又不相等了……原因只在于这里的C_{10}^1 C_8^1又给两双手套排序了,而取手套本身(C_{12}^4)是无序的。

  •   不可能事件发生的概率为0,但概率为0的不一定是不可能时间;同样必然事件发生的概率是1,但概率为1的却不一定是必然事件。这里的不一定是针对连续型随机变量而言的。
Tags: .
1
2
3
4
5
6
7
int
main()
{
	char * str = new char[32];
	str = "Hello, Piggy!";
	return 0;
}

这样是会内存泄漏的……而我一直都不知道……不过想来也自然,因为这样是允许的,char *str = “Hello, Piggy!”;,“程序中的字符串被存放在常量存储区”不要把这句话当成耳旁风,谨记。

Tags: ,,.

  对最简单的SDBMHash(char*)做了一个简单的测试。随机生成200个长度为31的字符串,利用SDBM得到一个Hash值,然后用直接取余法插入长度为113的HashSet,为简单起见,只是将HashSet对应的位置进行加一。

1
2
3
4
5
6
7
8
9
10
11
// SDBM Hash Function
unsigned int
SDBMHash (char *str)
{
    unsigned int hash = 0;
    while (*str)
      {
	  hash = (*str++) + (hash << 6) + (hash << 16) - hash;
      }
    return (hash & 0x7FFFFFFF);
}
Tags: ,.

  这里只给出一个简单的实现,具体原理参见Google、Baidu的各个角落及各大教材。做两点说明:
仅仅实现了必要的左旋、右旋处理,左平衡、右平衡操作,以及数据的插入操作,
不可重复插入数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef int Type; //~ 节点数据类型
typedef struct Node
{
	Type data;
	int bf;
	Node *left, *right;
	Node(){ bf = 0; left = right = 0; }
} AVLNode, *AVLTree; //~ 平衡树及其节点
 
void RRotate(AVLTree & T) //~ 右旋处理,T的左孩子成为新子树根
{
	AVLNode * tmp = T->left;
	T->left = tmp->right;
	tmp->right = T;
	T = tmp;
}
Tags: ,,.

  这个排序算法为什么被命名为Shell排序,我一直幻想着它可能最早被用以Shell脚本吧,Just Now我才知道,发明人叫做Donald Shell,居然有人叫自己壳?
  以前从来没有写过这个排序,事实证明,没写过基本等于没听说过、没学过。
  21行的小程序花了我将近一个小时来调试,对一个大小为9的逆序用gdb跟踪了程序整个的执行过程,发现两处错误,迭代变量j的类型习惯性地写成了size_t,导致死循环,以后凡是这种i,j,k,一律int。还有就是把最外层的while(step > 0)写成了while(size > 0),纯属自作自受。

Tags: ,.

  看Chris对内联的总结,说到内联函数在编译时会被放入”符号表”,想一探究竟,结果却发现另外一个问题,疑惑不解。

1
2
3
4
5
6
7
#include <stdio.h>
inline int add(int a, int b) { return a + b; }
int main()
{
	int n = add(1,2);
	return 0;
}
Tags: ,,.

网络

# ifconfig               # 查看所有网络接口的属性
# iptables -L            # 查看防火墙设置
# route -n               # 查看路由表
# netstat -lntp          # 查看所有监听端口
# netstat -antp          # 查看所有已经建立的连接
# netstat -s             # 查看网络统计信息
Tags: ,.

海明码的目的是能够纠正一位误码。假设信息码共有 n 位,海明码共有 h 位,那么总共的码长为 n + h 位。为能检测出 n + h 位编码中其中一位的错误,海明码必须能够表示至少 n + h + 1 种状态,其中 n + h 种表示 n + h 位编码中有一位错误,另外还需要一种来表示整个编码正确无误。则海明码的长度需要满足下列关系:

Tags: .
Page 2 of 20Prev12345678910Next...Last »