在arch下mkisofs命令和genisoimage命令是一样的,mkisofs是genisoimage的一个链接

使用isolinux作为引导,需自行下载并放到iso根目录下,
需手动编写isolinux.cfg并放到isolinux下,具体参见其他可启动iso

最后使用如下命令:

1
mkisofs -o myiso.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table myiso

参数:

-o 将生成的iso文件

-b 引导程序(这里的路径是指iso的根目录,也就是相对于myiso这个目录)

-c 将boot.cat生成到isolinux下(boot.cat是自动生成的)

myiso 是要制作iso的目录,也是iso的根目录

其他参数请man mkisofs

阅读全文 »

打印乘法口诀和三角所用的算法跟java一样,直接上代码

打印乘法口诀:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
int main(void)
{
for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= i; ++j) {
printf("%d*%d=%d\t", j, i, i*j);
}
printf("\n");
}
return 0;
}

//执行结果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

三角,同时输出两个三角,一正一倒:

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
45
#include <stdio.h>
int main(void)
{
/* 正-倒
* 1-9
* 3-7
* 5-5
* 7-3
* 9-1 */
for (int i = 1; i <= 9; ++i) {
if ( i % 2 != 0) {
for (int j = 1; j <= (9-i)/2; ++j) {
printf("%c", ' ');
}
for (int j = 1; j <= i; ++j) {
printf("%c", '*');
}
for (int j = 1; j<=(9-i)/2; ++j) {
printf("%c", ' ');
}

printf("\t");

for (int j = 1; j<= (9-(10-i))/2; ++j) {
printf("%c", ' ');
}
for (int j = 1; j<= (10-i); ++j) {
printf("%c", '*');
}
for (int j = 1; j<= (9-(10-i))/2; ++j) {
printf("%c", ' ');
}

printf("\n");
}
}
return 0;
}

//执行结果:
* *********
*** *******
***** *****
******* ***
********* *

c语言没有string类型,字符串的处理使用的是char数组
c会默认在字符串的尾部增加一个'\0',也叫空字符(用来标记字符串的结束),所以字符串真正在内存中占用的字节数会比字符串的字符数多1.

strlen()

我们使用strlen()方法可以获取字符串的长度,也就是包含多少个字符数
然而获取到的这个字符数并不包含尾部被自动追加的'\0'空字符

sizeof

sizeof 这并不是一个方法,而是一个关键字,用来获得类型的大小,或某个量的大小,这里只讨论获取具体量的大小
sizeof获取的是c或者程序员为这个具体量分配了多大的空间(字节数)
以字符串,数组char举例:
声明了一个20大小的字符串:

1
2
char name[20];
name = jack;

那么sizeof name获得的大小就是20,而不是jack的字符数4,也不是真是占用内存的字节数5
strlen(name),方法获得的大小则是4,而不是5或者20

测试源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
#define TEST "i am jack"
int main(void)
{
char name[20];
printf("type your name:\n");
scanf("%s",name);
printf("name is :%s\n", name);
printf("sizeof name is : %ld\n", sizeof name);
printf("strlen name is : %ld\n", strlen(name));
printf("\n");
printf("sizeof TEST is : %ld\n", sizeof TEST);
printf("strlen TEST is : %ld\n", strlen(TEST));
return 0;
}

输出结果为:

阅读全文 »

bybrid-sleep

混合休眠模式:
是指电脑sleep(睡眠模式)和hibernate(休眠模式)同时进行,即把信息保存到内存的同时也写入到系统主分区的hiberfil.sys文件中

sleep

睡眠模式,linux下也叫挂起(suspend):
把信息到存到内存中,但不能断电,断电后数据丢失,恢复最快

hibernate

休眠模式:
把信息写入到文件中,也就是硬盘中,不会有断电丢失数据的问题,但恢复时最慢,和重新开机一样

对比图表:

duibi

参考此贴解决此问题。

退出eclipse,打开下面的文件

~/workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.android.ide.eclipse.ddms.prefs

粘贴下面的东西到打开的文件

1
2
3
4
5
6
7
8
9
10
ddms.logcat.auotmonitor.level=error  
ddms.logcat.automonitor=false
ddms.logcat.automonitor.userprompt=true
eclipse.preferences.version=1
logcat.view.colsize.Application=169
logcat.view.colsize.Level=54
logcat.view.colsize.PID=54
logcat.view.colsize.Tag=198
logcat.view.colsize.Text=619
logcat.view.colsize.Time=182

四个主角各自的作用:
vim:编辑器一枚
ycm:自动补全插件(也就是不用按ctrl+x ctrl+o来调用vim的omni全能补全)
eclim:让vim可以有部分eclipse的功能,也可以管理eclipse里的项目
javacomplete:一个java的补全插件(这里说的是增强版的)

各自网址:
ycm:https://github.com/Valloric/YouCompleteMe
eclim:http://eclim.org/
javacomplete:https://github.com/artur-shaik/vim-javacomplete2

这篇文章的主要目的不是如何安装和使用这些插件,而是解决eclim和javacomplete之间的冲突

在说冲突之前先说下eclim和javacomplete的生效条件:
eclim:编辑的java类型的文件必须是eclipse中的一个项目中的文件
javacomplete:只要是java类型的文件都可以补全

什么冲突呢?
ycm可以使用vim的omnifunc提供的数据来完成java的自动补全,主要依据在当前打开的java文件的buffer中,
执行:set omnifunc返回的结果来确认到底用eclim还是javacomplete提供的补全数据
冲突就是如果同时使用这两个插件,那么只要打开java类型的文件,那么就会被自动命令设置成javacomplete的
补全,即便是打开eclipse项目中的文件也不会是eclim的补全

解决方法:
判断打开的java文件是否是eclipse项目中的文件就行了,判断方法是调用eclim插件的一个方法,
当是项目文件时,就不设置javacomplete的补全,如果不是,就设置omnifunc为javacomplete的补全,
讲下面的东西粘贴到vimrc中,另外不要在其他地方设置java的omnifunc:

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
" vim-javacomplete2
" java的omni全能补全(insert模式下ctrl-x-ctrl-o调用),ycm将会自动调用
" 与eclim的自动补全冲突,所以先判断当前文件是否是项目文件
" 如果不是项目文件才使用vim-javacomplete2进行全能补全
function! IsProjectFile()
let projectName = eclim#project#util#GetCurrentProjectName()
if projectName == ''
setlocal omnifunc=javacomplete#Complete
endif
endfunction
autocmd FileType java call IsProjectFile()

" eclim/eclimd
" 需要自行安装,不在vim-plug插件管理器管理列表之中
" eclimd读取$ECLIPSE_HOME/configuration/config.ini
" 还读取~/eclimrc配置文件
" 日志级别,日志文件默认在workspace/eclimd.log
" 除了默认的info,还有trace,debug,warning,error,off
let g:EclimLogLevel = 'info'
" 设置浏览器,firefox,mozilla,opera,iexplore
let g:EclimBrowser = 'firefox'
" 让eclim配合ycm实现java等语言的自动补全
" 编辑的文件必须是eclipse的一个项目中的文件才会自动补全
" 这个变量的作用是(仅举例java文件):set omnifunc=eclim#java#complete#CodeComplete
let g:EclimCompletionMethod = 'omnifunc'

javacomplete和eclim都需要自己安装具体如何安装可以去上面提供的网址去查看和下载,
不会因为添加了这几行配置就可以实现java的补全了,本文中使用的插件管理器是:vim-plug

另外推荐一份vim的配置,使用简单,配置文件结构清晰,注释明了,很适合不熟悉vim配置的人入手学习: k-vim

再附上自己的一份配置,借鉴了上面的kvim,但后来觉得不舍和自己,就从零开始自己配置了: ri-vim

阅读全文 »

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
//打印正三角
public class helloworld {
public static void main(String[] args) {
String cell="*";
String space=" ";
for (int lines=1; lines<=9; lines++) {
// 只有偶数时才打印
if (lines%2==0) {
// 打印空格
for (int spaces=1; spaces<=(9-lines)/2; spaces++) {
System.out.print(space);
}
// 打印三角
for (int cells=1; cells<=lines; cells++) {
System.out.print(cell);
}
// 打印空格
for (int spaces=1; spaces<=(9-lines)/2; spaces++) {
System.out.print(space);
}
System.out.println("");
}
}
}
}
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
// 打印倒三角
public class helloworld {
public static void main(String[] args) {
String cell="*";
String space=" ";
for (int lines=9; lines>=1; lines--) {
// 只有偶数时才打印
if (lines%2==0) {
// 打印空格
for (int spaces=1; spaces<=(9-lines)/2; spaces++) {
System.out.print(space);
}
// 打印三角
for (int cells=1; cells<=lines; cells++) {
System.out.print(cell);
}
// 打印空格
for (int spaces=1; spaces<=(9-lines)/2; spaces++) {
System.out.print(space);
}
System.out.println("");
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
// 打印乘法口诀
public class helloworld {
public static void main(String[] args) {
for (int lines=1; lines<=9; lines++) {
for (int columns=1; columns<=lines; columns++) {
System.out.print(columns+"*"+lines+"="+columns*lines+"\t");
}
System.out.println();
}
}
}

附上图片:
正三角
倒三角
乘法口诀

新增第三种,推荐使用

第一种

可以提示上一条命令是否出错,如果出错,最左边绿色的笑脸就会变成红色的哭脸,可以显示当前所在路径,当切换到root用户时用户名变为红色,如图所示:

shell

使用方法,将下面的代码,复制粘贴到~/.bashrc中:

1
2
# bash prompt by listenerri
PS1="\$(if [[ \$? == 0 ]]; then echo \"\[\e[1;32m\] :)\"; else echo \"\[\e[1;31m\] :(\"; fi) $(if [[ ${EUID} == 0 ]]; then echo "\[\e[1;31m\]\u \[\e[1;32m\]\w \[\e[1;33m\]# > "; else echo "\[\e[1;36m\]\u \[\e[1;32m\]\w \[\e[1;33m\]$ > "; fi)\[\e[0m\]"

第二种

与第一种不同的是去掉了最右边的箭头,并且’$’和’#’号会随着用户名的颜色变化(root时为红色)

  • 新增提示git仓库分支名称:
  • 如果当前目录是git仓库的根目录,则以黄色的文字显示当前仓库的分支,否则不显示

如图所示:
prompt

阅读全文 »

例如VideoView获取视频总长度:
在视频播放前获取到的视频总长度都为-1
想要在视频播放前获取到总长度的话:

1
2
3
4
5
6
7
8
9
10
11
videoView.setOnPreparedListener(new MyOnPreparedListener());
private class MyOnPreparedListener implements OnPreparedListener{

@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub

video.getDuration();
}

}

用来测试的虚拟机是320*480像素mdpi的
总结了以下三种方法

(一)

1
2
3
4
Point point =new Point();
getWindowManager().getDefaultDisplay().getSize(point);
point.x;//(320)
point.y;//(480)

(二)

1
2
3
4
5
6
7
8
DisplayMetrics metrics=new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.widthPixels;//(320)
metrics.heightPixels;//(480)
metrics.xdpi;//(160.0)
metrics.ydpi;//(160.0)
metrics.density;//(1.0)
metrics.densityDpi;//(160)

(三)

1
2
3
4
5
6
7
DisplayMetrics metrics2=getResources().getDisplayMetrics();
metrics2.widthPixels;//(320)
metrics2.heightPixels;//(480)
metrics2.xdpi;//(160.0)
metrics2.ydpi;//(160.0)
metrics2.density;//(1.0)
metrics2.densityDpi;//(160)

当不是在activity中时,就不能直接用getWindowManager()等方法了,这时可以用Context.getSystemService(Context.WINDOW_SERVICE)方法,其他的类似