在家里闲着实在憋屈。想接触下Python,用我弱弱的手机找了个《Python简明教程》大致地过了一遍。找了家网吧想下个Python安装程序练练手,结果发现Python.org居然被墙了!幸好前几天殷殷给了一个翻墙用的包GAppProxy,马上就派上用场了。翻将过去,就看到那两条亲密无间的“蛇”了。

  F**K!难道G*F*W连个编程语言都不放过?Python是个不和谐的语言?可能吧,上面的翻墙工具就是Python吐出来的。Python另一个被墙的理由就是Python.com了,这是一个不河蟹的网站,简直就是十分不和谐……

  附上GAppProxy.rar。加压后运行gui.exe,设置代理服务器为127.0.0.1:8000(端口可以自己设定)。

Tags: ,,.

  三年自然灾害时期,中国遭遇大灾,对外宣传却是“形势一片大好”。某国元首来中国访问,当然是会见最高首长,再去工厂、部队、农村等地访问一番。外交无小事,某省接到通知,各级政府做好充分准备,乡里大食堂的案板上,堆满作秀需要的菜码儿。重要人物总是在路上,元首一行不仅迟迟不到,而且传话说,要改道而行。新鲜的猪肉,经不起一拖再拖 ,处在变质的边缘。领导拍板,立即将大肉加上大料卤透,然手让农民们坐上拖拉机,快“机”加鞭,到元首要经过的公路边食用以此制造一种农民兄弟们过上“顿顿能吃肉,家家有余粮”的假象。于是,近百个精挑细选、根正苗红的农民兄弟,手持招待外宾用的青花细瓷碗,蹲在路边,看到元首车队离路边仅数十米之遥时,一基层领导大喝一声“吃”,近百号大汉“呼哧呼哧”,连肉带面,吃了一个底儿朝天。事后,农民兄弟们的家小,对外国元首和领导同志们甚是感激,这场戏的布置,让村里的老老小小都吃到了久违的猪肉。原因是,农民兄弟们为了让家小尝尝猪肉,边吃边把肉往口袋或衣袖里藏。
  
  长安街,似乎还“没几个人”知道,Google和Baidu也知不道。

Tags: .

  想一下,下面的代码片段会输出什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
class Test
{
public:
    void print() const
    {
        std::cout<<_int<<std::endl;
    }
private:
    static int _int;
};
int Test::_int = 0;
int
main(int argc, char **argv)
{
    Test TArray[10];
    TArray[100].print();
    return 0;
}

  May you note something, anyhow.

Tags: .

  这是一个类似gnome-terminal的“终端模拟器”,相比gnome-terminal,具有更快的启动速度,更少的资源占用,更强的可定制性。你可以从其官方网站下载源码编译安装,亦可以从你的发行版的源中直接安装。Debian中,可以执行以下命令

1
sudo apt-get install rxvt rxvt-unicode #rxvt-unicode是为了支持中文

  这样,RXVT就安装好了,默认的界面可能让人很不舒服,就需要一些简单的定制。在用户目录下建立.Xresources文件,然后写入下列配置行:

Tags: ,.

安装方法和其他插件一样,将NERDTree.vim文件放到.vim/puglin/下即可。用:NERDTree命令启动,建议映射成快捷键。该插件常用操作的一些命令如下:

  1. o 打开关闭文件或者目录
  2. t 在标签页中打开
  3. T 在后台标签页中打开
  4. ! 执行此文件
  5. p 到上层目录
  6. P 到根目录
  7. K 到第一个节点
  8. J 到最后一个节点
  9. u 打开上层目录
  10. m 显示文件系统菜单(添加、删除、移动操作)
  11. ? 帮助
  12. q 关闭

  另外一个插件是Calendar,顾名思义,是用来显示一个“日历”,但它的功能不限于此,还可以提供类似日记的功能。喜欢的话,你可以用它来记录一些笔记、备忘什么的。安装即使用方法同其他插件类似,自己摸索吧!截图改天再上。

Tags: .
1
2
3
4
5
6
7
8
9
10
11
12
13
void fun1(char * str) {}
void fun2(char ** str) {}
 
//~ int main(int argc, char ** argv)
int main(int argc, char * argv[])
{
	char str1[] = "Hello, Piggy!";
	char str2[][4] = "Hello, Piggy!";
	fun1(str1);
	fun2(str2);
	fun2(&str1);
	return 0;
}

  上面的snippet有错误吗?有几个?你能找出来并说出原因吗?4、5两行有区别吗?想一下,然后看gcc给出的错误信息,

Tags: .

  本程序利用PIC18单片机实现了对EEPROM的读写。应用背景是”汽车里程表”,简单介绍下程序功能和流程。
  单片机接受来自RA4管脚的计数脉冲信号,应用中这个脉冲信号通常由一个传感器来产生,计数脉冲被设定为上升沿触发。计数器溢出时,需要更新一个用于存储当前里程的RAM寄存器单元COUNT,可以理解为车轮转了一定圈数后,里程表的增加一定的里程数。
  RB0管脚用来接收一个外部中断信号,接收到中断信号后,在中断服务程序中将COUNT的值即当前里程数保存至EEPROM的00H单元。这样可以配合外部电路实现当单片机掉电时自动保存里程表数值的功能,即汽车熄火时保存里程表,以减少对EEPROM的读写次数。
  单片机启动时,首先应该到EEPROM的相应单元读取里程表的当前值,并在此基础上进行累加。
  程序中为了调试方便,还将COUNT的数值同步地通过8个LED以二进制形式较直观地显示了出来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LOOP	
 
	BCF	INTCON, T0IF 	; 清TMR0中断标志
	MOVLW	TMR0B 
	MOVWF	TMR0L 		; 装入计数初值 253
	BSF	T0CON, TMR0ON 	; 启动计数器
	TEST	
	BTFSS	INTCON, T0IF 	; 检测TMR0是否溢出
	GOTO	TEST
	INCF	COUNT, F 	; 计数加一
	MOVFF	COUNT, PORTD 	; 输出,显示
 
	GOTO	LOOP
 
WIRT_EE				; 写EEPROM
	BCF	EECON1, EEPGD
	BCF	EECON1, CFGS 	; 设定EECON1控制寄存器
	BSF	EECON1, WREN 	; EEPROM写使能
	BCF	INTCON, GIE 	; 写EEPROM时需要关闭一切中断
Tags: ,.

配置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: .