Arch Linux 下的 QQ 解决方案

AUTHOR: Locez
VERSION: 4
UPDATE: 2015-08-31

##QQ 6.3 由于版本低,已不能登录,以下教程已不适用,有想要折腾 wine QQ 的仅供参考

Linux 上面玩 QQ 一直都是一个问题。Wine 算是一个解决方案,但是也有不少人失败了。由于 QQ 的特殊性,采取了一系列的保护措施,导致 QQ 这个 Windows 程序非常复杂,因此 Wine 在运行 QQ 时表现差强人意。本文将要安装的是 QQ6.3 ,更高的版本除非对 QQ 做出修改,否则很难安装成功,即使成功了,问题也挺多的(笔者已试验过 QQ7.4 安装)。写这个的目的主要是方便有人遇到问题截图提问,毕竟 Linux 的普及工作还得靠大家,对于日常聊天还是建议使用手机QQ 。

本文环境:

  • Arch Linux (其他发行版仅供参考)
  • KDE4 & LXDE & GNOME (其它请自测)

准备工具


  - Wine
  - winetricks

简介


  • Wine 是一个在类 Unix 系统中运行 Microsoft Windows 程序的软件, Wine 的全称是 Wine Is Not Emulator 意为 Wine 不是一个模拟器,它通过 API 转换技术做出 Linux 上对应于 Windows 的函数,从而调用 DLL 运行 Windows 程序。
  • winetricks 是一个 script ,可以用来下载和安装各种在 Wine 运行时需要的部分 DLL 和框架。如 .NETVisual C++ runtime library 或微软和其他公司的闭源程序,使用 winetricks 你可以快速安装某些常用的Windows程序。

Read More

CodinGame-Tron Battle

IDE CodinGame

在viz的叙说下玩了一下,写了一段烂代码,但是还是有点用途的,至少不会马上就挂啊!!

Tron Battle,需要Player编写一段程序来移动,有点类似于贪吃蛇,不可以碰墙,也不可以碰自己,只能往空位的地方走,最大的不同在于Player是自己编写程序来进行移动,并且每次都有判断时限哦(100ms=0.1s),否则就TimeOut了,我这代码也会TimeOut,具体的有的地方还可以改进!这游戏如果可以的话应该是可以进行攻击以及防御的,根据对方的路线限制其行动。这样说来这其实应该和AI(人工智能)能扯上关系,有兴趣的可以去玩玩哦。

地址:www.codingame.com

上不去的可以试下翻墙!

下面贴上自己的Java版代码,写的不好,判断什么都是最简单的,实在没有时间想复杂的了!

Read More

JNI-Java Native Interface

Java提供了JNI机制,用来弥补与平台无关的特性,可以使用C/C++编写本地代码生成动态连接库交由Java调用。

首先创建一个NativeHelloWorld.java文件,包含以下内容;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//java本地方法要由native声明
public class NativeHelloWorld{
//使用静态加载块加载dll
static{
System.loadLibrary( " NativeHelloWorld " );
}
//native声明的start方法,交由c/c++实现,因此无需包含方法体;
native void start(String s);
public static void main(String[] args)
{
//实例化对象并调用start方法;
new NativeHelloWorld().start( " I am loaded by Native code of c++ " );
}
}

Read More

URLClassLoader加载类

ClassLoader提供了一个URLClassLoader实现类,该类是系统类加载器和扩展类加载器的父类。
URLClassLoader可以从本地二进制文件加载类,也可以从远程主机获取二进制文件加载类。

构造器

1
2
3
URLClassLoader(URL[] urls):使用parent(父类)加载器创建一个ClassLoader对象,该对象将从urls所指定的系列路径查询并获取类。

URKClassLoader(URL[] urls,ClassLoader paremt):使用指定父类加载器创建一个ClassLoader对象。

Read More

数字转换成人民币大写读法

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
//汉字数字
public static String[] han={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
//单位
public static String[] unit={"元","十","百","千"};
//单位
public static String[] xunit={"角","分"};
//分割整数与小数部分,返回字符串数组
public static String[] divide(double num)
{
long zheng = (long)num;
long xiao = Math.round((num-zheng)*100);
if(xiao!=0)
{
return new String[]{zheng+"",xiao+""};
}
else
{
return new String[]{zheng+"",null};
}
}
//转换成汉字,4位数
public static String toHan(double number)
{
//使用divide方法得到分割后的整数与小数部分
String[] arr=Convert.divide(number);
//整数部分
String numStr=arr[0];
//小数部分
String xiaoStr=arr[1];
String result="";
//大写字符串长度
int numlen=numStr.length();
for (int i=0;i<numlen;i++)
{
//在ASCII码中,字符串数字的ASCII码-48得到相应的数字ASCII码
//String.charAt(int num)方法得到指定位置的字符值
int num=numStr.charAt(i)-48;
//数字不为0,则添加单位,否则不添加
if(num!=0)
{
result+=han[num]+unit[numlen-1-i];
}
else
{
result+=han[num];
}
}
//若存在小数部分则进行处理
if(xiaoStr!=null)
{
for (int i=0;i<2;i++)
{
int num=xiaoStr.charAt(i)-48;
result+=han[num]+xunit[i];
}
}
return result;
}

public static void main(String[] args)
{
System.out.println(toHan(6521.1));
}
}
/*运行结果输出如下:
陆千伍百贰十壹元壹角零分
*/

按字节截子字符串

/*刚刚测试的时候发现java在Linux与windows下一个中文字符所代表的字节不相同,此处是在Linux下测试的,以下作为字节参考:

——–windows Linux
—-中文 2 3
—-英文 1 1 */

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
//Substr类

public class Substr
{
//sub方法
public static String sub(String s,int start,int end)
{
//把字符串s转换成字节数组
byte[] arr=s.getBytes();
//定义一个字节数组subs,用来接收子字符串
byte[] subs=new byte[arr.length];
//使用循环,令subs字节数组接收子字节
for(int i=start,j=0;i<=end;i++)
{
subs[j]=arr[i];
j++;
}
//使用subs直接用String构造函数返回子字符串
String substring = new String(subs);
return substring;
}

public static void main(String [] args)
{
String s="hello我是子字符串word";
System.out.println(s);
System.out.println("子字符串:");
System.out.println(Substr.sub(s,5,22));
}
}
/*运行输出如下:
hello我是子字符串word
子字符串:
我是子字符串*/

画圆

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

//Circle类

public class Circle

{
public static void main(String[] args)
{
//圆的半径
int r = 6;
//y为纵坐标变量
for(int y=0;y<=2*r;y=y+2)
{
//求出1/2弦长
long x=Math.round(Math.sqrt(r*r-(r-y)*(r-y)));
//输出*号
for(int i=0;i<=2*r;i++)
{
//i为横坐标
if(i==r-x||i==r+x)
{
System.out.print("*");
}
else
{
System.out.print(" ");
}
}
//转行
System.out.println("");
}
}

}