Akawa

ETY001的博客

这是我的Java作业,一个简单的拼图游戏,源文件从这里下载:点击这里下载源文件。由于是在ubuntu下压缩的,所以在windows下解压会有一个图片乱码,乱码的那张图片名称是“星座.jpg”(不含引号)。

下面直接贴代码:

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* Author:ETY001
* URI:https://akawa.ink
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Math;
import java.applet.Applet;

public class pintu extends Applet implements ActionListener
{
int EmptyRow = 0;//空白图横坐标
int EmptyCol = 0;//空白图纵坐标
JPanel up = new JPanel();//上部面板
JPanel down = new JPanel();//下部面板
JButton[][] btn = new JButton[5][5];//拼图按钮
int a[][] =new int[5][5];//记录是否重复随机数的数组
int m,n;//记录随机数
//JTextField tt = new JTextField(15);//调试使用

public void init()
{
//上部
ImageIcon oriPic = new ImageIcon("星座.jpg");
JLabel oriPicLabel = new JLabel("",oriPic,JLabel.CENTER);
JButton next = new JButton("下一局");
up.setLayout(new BorderLayout());
up.add(oriPicLabel,BorderLayout.WEST);
up.add(next,BorderLayout.CENTER);
next.addActionListener(this);

//下部
down.setLayout(new GridLayout(5,5));
for(int i=0;i<5;i++) //清空记录数组
{
for(int j=0;j<5;j++)
{
a[i][j]=0;
}
}
for(int i=0;i<5;i++)//产生随机的图片碎片
{
for(int j=0;j<5;j++)
{
m=(int)(Math.random() * 5);
n=(int)(Math.random() * 5);
while(a[m][n]==1)
{
m=(int)(Math.random() * 5);
n=(int)(Math.random() * 5);
}
a[m][n]=1;
if(m==0 && n==0)//记录初始时刻空白图片的位置
{
EmptyRow = i;
EmptyCol = j;
}
//注意原素材的10和11两张图片的扩展名是大写的,这也是两张图片导入失败的原因
btn[i][j] = new JButton(new ImageIcon(m+""+n+".jpg"));
down.add(btn[i][j]);
btn[i][j].setActionCommand(i+":"+j);
btn[i][j].addActionListener(this);
}
}

//全局面板
setLayout(new BorderLayout());
add(up,BorderLayout.NORTH);
add(down,BorderLayout.CENTER);
//add(tt,BorderLayout.SOUTH);//调试使用
setSize(275,360);
setVisible(true);
}

public void PicRepeat()
{
for(int i=0;i<5;i++) //清空记录数组
{
for(int j=0;j<5;j++)
{
a[i][j]=0;
}
}
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
m=(int)(Math.random() * 5);
n=(int)(Math.random() * 5);
while(a[m][n]==1)
{
m=(int)(Math.random() * 5);
n=(int)(Math.random() * 5);
}
a[m][n]=1;
if(m==0 && n==0)//记录初始时刻空白图片的位置
{
EmptyRow = i;
EmptyCol = j;
}
//更新按钮上的随机图片
btn[i][j].setIcon(new ImageIcon(m+""+n+".jpg"));
}
}
}

public void changePic(int clickRow,int clickCol,int emptyRow,int emptyCol)
{
if(Math.abs(clickRow-emptyRow)+Math.abs(clickCol-emptyCol)==1)
{
Icon tmp1 = btn[clickRow][clickCol].getIcon();
Icon tmp2 = btn[emptyRow][emptyCol].getIcon();
btn[clickRow][clickCol].setIcon(tmp2);
btn[emptyRow][emptyCol].setIcon(tmp1);
EmptyRow = clickRow;
EmptyCol = clickCol;
}
}

public void actionPerformed(ActionEvent e)
{
int row=0,col=0;
if (e.getActionCommand() == "下一局")
{
PicRepeat();
}
else
{
String[] tmp;
tmp = e.getActionCommand().split(":");
row = Integer.parseInt(tmp[0]);
col = Integer.parseInt(tmp[1]);
changePic(row,col,EmptyRow,EmptyCol);
}
//tt.setText(""+btn[row][col].getIcon());//调试使用
}
}

今天,访问我的博客的时候,发现博客打开后是空白页,什么都不显示,访问后台登录页面也是空白页,不知道哪个地方又出错了。

于是登录服务器的ssh,把wp-content目录重命名,然后再次访问后台登录页面,可以访问了,不过是英文界面,因为缺少了wp-content目录下的语言包的翻译,但是这个不影响我们操作。

初步断定是wp-content目录内的文件导致的问题,于是逐步缩小搜查范围,把wp-content的名字改回来,逐一把wp-content文件夹内的各个文件夹改名,

最后发现是我使用的D4主题出现了错误,遂进入后台把之前使用过的另一个主题启用,一切恢复正常~

最近在搞记事狗的QQ机器人,破解了源代码后进行修改,有时候一些提示的错误信息就是找不到,由于是在ubuntu下工作,所以就收集下关于搜索的命令,尤其是搜索内容为指定关键字的文件的路径地址。

whereis <程序名称>
查找软件的安装路径
-b 只查找二进制文件
-m 只查找帮助文件
-s 只查找源代码
-u 排除指定类型文件
-f 只显示文件名
-B <目录> 在指定目录下查找二进制文件
-M <目录> 在指定目录下查找帮助文件
-S <目录> 在指定目录下查找源代码

locate <文件名称>
在文件索引数据库中搜索文件
-d <数据库路径> 搜索指定数据库
updatedb
更新文件索引数据库

find [路径] <表达式>
查找文件
-name <表达式> 根据文件名查找文件
-iname <表达式> 根据文件名查找文件,忽略大小写
-path <表达式> 根据路径查找文件
-ipath <表达式> 根据路径查找文件,忽略大小写
-amin <分钟> 过去N分钟内访问过的文件
-atime <天数> 过去N天内访问过的文件
-cmin <分钟> 过去N分钟内修改过的文件
-ctime <天数> 过去N天内修改过的文件
-anewer <参照文件> 比参照文件更晚被读取过的文件
-cnewer <参照文件> 比参照文件更晚被修改过的文件
-size <大小> 根据文件大小查找文件,单位b c w k M G
-type <文件类型> 根据文件类型查找文件。b 块设备 c 字符设备 d 目录 p 管道文件 f 普通文件 l 链接 s 端口文件
-user <用户名> 按归属用户查找文件
-uid 按UID查找文件
-group <群组名> 按归属群组查找文件
-gid 按GID查找文件
-empty 查找空文件

grep <字符串>|”<正则表达式>” [文件名]
在文件中搜索内容

问题描述:
我有一个1千万行的querylog,每一个都有keyword,现在我想随机查找某个query是否存在。
用find命令来做。
解决方法:

1
find query.log | xargs grep "感冒" // 在query.log文件中查找“感冒”

Web前端开发是从网页制作演变而来的,名称上有很明显的时代特征。在互联网的演化进程中,网页制作是Web 1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以浏览为主。2005年以后,互联网进入Web 2.0时代,各种类似桌面软件的Web应用大量涌现,网站的前端由此发生了翻天覆地的变化。网页不再只是承载单一的文字和图片,各种富媒体让网页的内容更加生动,网页上软件化的交互形式为用户提供了更好的使用体验,这些都是基于前端技术实现的。

以前会Photoshop和Dreamweaver就可以制作网页,现在只掌握这些已经远远不够了。无论是开发难度上,还是开发方式上,现在的网页制作都更接近传统的网站后台开发,所以现在不再叫网页制作,而是叫Web前端开发。Web前端开发在产品开发环节中的作用变得越来越重要,而且需要专业的前端工程师才能做好,这方面的专业人才近两年来备受青睐。Web前端开发是一项很特殊的工作,涵盖的知识面非常广,既有具体的技术,又有抽象的理念。简单地说,它的主要职能就是把网站的界面更好地呈现给用户。

如何才能做得更好呢?

第一,必须掌握基本的Web前端开发技术,其中包括:CSS、HTML、DOM、BOM、Ajax、JavaScript等,在掌握这些技术的同时,还要清楚地了解它们在不同浏览器上的兼容情况、渲染原理和存在的Bug。
第二,在一名合格的前端工程师的知识结构中,网站性能优化、SEO和服务器端的基础知识也是必须掌握的。
第三,必须学会运用各种工具进行辅助开发。
第四,除了要掌握技术层面的知识,还要掌握理论层面的知识,包括代码的可维护性、组件的易用性、分层语义模板和浏览器分级支持,等等。

可见,看似简单的网页制作,如果要做得更好、更专业,真的是不简单。这就是前端开发的特点,也是让很多人困惑的原因。如此繁杂的知识体系让新手学习起来无从下手,对于老手来说,也时常不知道下一步该学什么。

目前市面上关于Web前端开发的书主要都是针对单一技术的,《编写高质量代码》与这些书有着本质的区别。它主要想实现两个目标:第一,为不太有经验的 Web前端开发工程师建立大局观,让他们真正了解和理解这个职业;第二,帮助有一定Web前端开发经验的工程师修炼内功,通过编写高质量的代码来提高前端代码的可维护性。这是很多前端开发工程师感兴趣的内容。

《编写高质量代码》的前两章讨论了网站重构和团队合作,这是很有必要的。网站重构的目的仅仅是为了让网页更符合Web标准吗?不是!重构的本质应该是构建一个前端灵活的MVC框架,即HTML作为信息模型(Model),CSS控制样式(View),JavaScript负责调度数据和实现某种展现逻辑(Controller)。同时,代码需要具有很好的复用性和可维护性。这是高效率、高质量开发以及协作开发的基础。建立了这种大局观后,学习具体技术的思路就更清晰了。

代码质量是前端开发中应该重点考虑的问题之一。例如,实现一个网站界面可能会有无数种方案,但有些方案的维护成本会比较高,有些方案会存在性能问题,而有些方案则更易于维护,而且性能也比较好。这里的关键影响因素就是代码质量。CSS、HTML、JavaScript这三种前端开发语言的特点是不同的,对代码质量的要求也不同,但它们之间又有着千丝万缕的联系。《编写高质量代码》中包含着很多开发的思想和经验,都是在长期的开发实践中积累下来的,不同水平的Web前端工程师都会从中获得启发。

图书封面:

今天遇到一个在新浪云平台搭建Wordpress的朋友,他也正好要用我写的Ntalker for Wordpress插件,但是有些问题存在,于是我就开始开始研究看看。经过分析,发现原来是缓存无法写入,导致的部分功能的丢失。这是新浪云平台官网原话:“SAE不允许写本地文件目录。由于SAE是分布式架构,每次的请求可能到达不同的机器,为了提升性能和安全,我们不允许对代码目录进行写操作。数据并不会永久地写到“本地”,而是通过以下两个方法写到临时存储或Storage/MC服务中:TmpFS,用于处理临时文件需求; Wrapper,让你只需要修改文件路径就可以将数据写入到Storage服务或者Memcache服务中。详细的说明请参照相关服务说明。”
下面是这次修改的主要方法的参照源。根据提示我选择了Memcache服务来代替原插件里的那个开源cache类。关于Memcache的使用方法如下:

服务概要

Memcache是SAE为开发者提供的分布式缓存服务,用来以共享的方式缓存用户的小数据。用户需要先在在线管理平台创建Memcache,然后通过标准的memcache*函数读写Memcache。

特别注意:

  1. SAE平台的Memcache技术指标和标准的Memcache相同,不适合存放大文件,特别是大于4M的数据
  2. SAE Memcache不需要用户调用memcache_connect函数,取而代之的,用户在get、set之前需要调用memcache_init函数

应用场景

因为SAE的Web Service是分布式环境,所以当用户需要共享的缓存某些key-value形式的小数据时,就需要用Memcache服务,这样可以快速进行数据响应,而且可以减轻后端存储的压力。

使用指南

例子:

appname: saetest
appversion: 1

开启Memcache

您需要先到SAE在线管理平台开通Memcache服务,在服务管理=>Memcache页面开通Memcache服务后,就可以通过在线管理平台的UI接口,测试Memcache读写情况,以确认开通成功。

关闭Memcache

在您不需要使用缓存服务时,也可以在在线管理平台禁用Memcache服务.禁用后,用户就不可以再使用分布式缓存服务。

特别注意:当禁用后,原有的缓存数据将全部被删除!

使用Memcache

Memcache服务目前提供以下接口:

memcache_init - 初始化MC链接
memcache_get - 获取MC数据
memcache_set - 存入MC数据
除memcache_init外,其他接口和php的memcahe模块保持一致.

需要注意的是, memcache_connect(),Memcache::connect()、memcache_pconnect()、Memcache::pconnect()、memcache_add_server() ,Memcache::addServer()等函数不建议使用。

使用示例:

$mmc=memcache_init();
if($mmc==false)
echo “mc init failed\n”;
else
{
memcache_set($mmc,”key”,”value”);
echo memcache_get($mmc,”key”);
}

经过今天下午一下午的研究,暂时解决了1.0版本的一些问题,并且发布了1.1版本,总算是能在明天返校前完成这个事情了~

由于我已经单独开了一个这个插件的页面用来记录这个插件的事情,所以就不再在这篇日志里多说什么了,请各位幻影移形到这里看看吧~希望能看到您的留言~~ Ntalker for Wordpress

从最初建立这个自己的个人博客的时候开始,就一直想着能够有这样一个版块,用来分享我自己做的小东西,或者是用来分享一些我的小想法,于是就有了DM实验室。然后博客建起来快一年了吧,一直都没有一个大众化的实际的小软件来填充。唯一做的一个小众网站程序自习室查询平台,还被学校暂时停用……

直到如今,已经是准大四的人了,才开始能找到一些时间写写自己喜欢的东西(之前的时间都投入到社团了),而Ntalker for Wordpress就是作为我的DM实验室的起航之作了,希望它能够好好的生存下去,希望他能够给大众带来实际的效益,希望我自己能再接再厉做出更好的东西!

由于之前一直都是想拿自己的VPS做记事狗QQ机器人的存放空间(这个机器人只能在win下运行),所以,最初安装VPS的操作系统的时候,选择的是win2003。经过这两个多月的使用,我实在是无法忍受win+apache这种不良的组合了,服务器软件总是出错,还是换回linux系统才是王道!

于是乎,今天早上9点,在VPS上的服务器软件又一次当掉的情况下,果断选择重装系统为Cent OS。经过两个半小时的折腾,终于是把一切都搞定了~现在服务器架设的环境是LNMP,终于用上了我一直梦想的ngix啦,哈哈~

下面总结一下:

1、我使用的是“LNMP一键安装包”,详细的安装教程,**请看这里:[http://lnmp.org/install.html](http://lnmp.org/install.html)**,我就不再多做阐述。
2、需要自己手动在nginx.conf中添加wordpress的rewrite规则。添加方法在这里:[http://bbs.vpser.net/viewthread.php?tid=2730&highlight=wordpress](http://bbs.vpser.net/viewthread.php?tid=2730&highlight=wordpress)。
3、我选择的VPS服务商提供给我的VPS的硬盘空间不是一个整块硬盘,意思就是说我的硬盘空间是20G,而实际是由两块10G的硬盘拼起来的,而VPS用户面板的重装系统按钮只能在一块上安装,这就导致我的另一块10G空间没有用了。我联系客服后,客服给出了教程,教程地址如下:[http://forum.xensystem.com/thread-50-1-1.html](http://forum.xensystem.com/thread-50-1-1.html)。这个教程可以帮你把另外的空间扩充到现在的空间上。这个教程很简单,不要看着那么多的命令就发怵,其实一步一步来做就可以了,只不过一些具体的硬盘空间数据不同罢了(也可能有些硬盘的标示不同,这个我觉得应该不是问题),这里我就提醒一句话,注意命令的大小写(有一个命令的参数是大写的L,还有linux是大小写敏感的,所以硬盘标示之类的大小写也要注意下~)。

最后,我再做个我的VPS的广告,我现在用的VPS是52元一个月的,就我现在使用的这三个月来看足够我个人使用了~如果你对于我的这款VPS感兴趣,可以来这里看看:http://www.domyself.me/archives/1427.html

这个页面是专门用来记录我开发的Ntalker for Wordpress插件的相关信息的。

Ntalker可以用来实现,使所有访问当前页面的用户进行及时聊天和互动。当前是1.1版本,只是实现了最基本的聊天功能,添加好友,列出好友列表等功能将会在稍候的版本中推出。

由于已经在Wordpress官网上上传了该插件,地址:http://wordpress.org/extend/plugins/ntalker-for-wordpress/,所以该页面以后主要用作插件信息反馈。欢迎各位使用过插件的亲们留下宝贵的意见。

============= Ntalker for Wordpress 1.1 新浪云平台特别版 =============

该版本针对新浪云平台研发,具体使用方法同普通版本一样,请参见:Ntalker for Wordpress
感谢您对于本插件的关注,如果您有好的建议或者想法,希望您能来 Ntalker for Wordpress 页面留言。如果您觉得这个插件很好用的话,恳请您能通过您的博客帮助推广,再次感谢!

++++++++++++++++++++++++++++++++++++++++++++++++++++

============= Ntalker for Wordpress 展望 =============

  • 1、预计在1.2版本中去掉该文件,实现在wp后台进行相关数据的配置。
  • 2、1.x系列版本将主要实现Ntalker的基础聊天功能,其余功能如加好友,改在线等状态这类附加功能,初步计划在2.x版本中加入,届时可以通过Ntalker for Wordpress插件把你的wp打造成一个小型的社区。2.x版本将会在wp数据库新建一个表来实现记录好友关系,我已经开始着手思考这个表的构造了,如果您有好的想法,还请您能在这里留言,我将会为此感激不尽!

++++++++++++++++++++++++++++++++++++++++++++++++++++

~~~~~~~~~~~~~~~ 感谢区 ~~~~~~~~~~~~~~~

感谢“鲁大Ubuntu群”里帮助我测试的同志们,感谢笨兔兔寒山烟雨的一直充当首测!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果各位有什么问题可以在这个页面留言。

===================下载区===================

Ntalker for Wordpress 1.1 新浪云平台特别版

今天终于是有时间可以给大家写一写我前段时间,更换域名商时出现的一些问题了。不过,现在已经木有火气了,更遗憾的是,和前域名商的QQ客服交流的记录基本上没有了,可惜了,不过网站的在线问答还是有的,现在我整理一下给大家看看,希望大家看后能有所收获。

我的前域名服务商是卓汇互联www.joz.cn),该网站办的第一件令人发指的事情就是,居然修改我的域名注册时的邮箱地址为他们的邮箱地址,这意味着,转移域名时的信件都将经过他们的邮箱,这也是为什么我在没有成功转移前,不敢写这篇文章的原因。并且,域名转出邮件(含有转移密码的那封)发送的失败率也太高了吧,我使用的是QQ邮箱,刚开始能接收到一封确认转移的邮件,之后含有转移密码的邮件就是收不到,经过多次和客服交涉,最后是客服把该邮件转发过来的。我很怀疑这是由于他们公司私自改动我的注册邮箱导致的。

第二件事情就是,当我收到域名转移信后,卓汇就停掉了我的域名解析。这是我非常想不明白的事情,我交了一年的费用,到期日是今年的9月24日,而我5月份开始办理转移手续,在我转移没有成功前,卓汇应该是应当承担我的域名解析的。下面是在线问答上的对话:

ETY001:我还有一个问题就是我在你们公司交了一年的费用,我现在转出域名了,但是离9月份到期时间还有3个多月,而你们已经把我的域名解析给删掉了,是不是应该给我退这将近4个月的款额?要不就继续解析我的域名。
JOZ客服:**尊敬的用户:**
** 您好,很高兴为您服务!**
** 在此告知您,您的域名转转出我司,域名到期时间不会减少。这个域名到期时间是 2011年9月24日,如果您在新服务商那边转入续费,到期时间是接2011年9月24日延长一年。**
** 域名注册费是ME注册局的域名登记费用,域名解析功能是我司提供,是免费的,凡是注册我司的域名,都免费提供解析功能,**
** 非常感谢您对我们的长久支持!**

对于该回答,我很是不解,就此事我咨询了我现在的域名商,我现在的域名商也是不解,并且对于他们的这个解释感到可笑。其实,正是因为我在转移域名前,搜集资料的时候,看到过说转移过程不影响域名解析,所以我才选择进行转移操作的。然后事实挺打击人的,这个事情导致了我的博客半个月无法访问。

第三件事情就是他们的服务态度,表面上看一般,实际很差。之所以这么说是因为他们的回复只是客套话而已,语气则并不像那些客套话那样好听,尤其他们的QQ客服给人的感觉是没有耐心。并且,在经过我1个多星期的“纠缠”后,他们的QQ客服貌似是把我拖黑了,对于此事我表示很无语……

总之,这次的转移之旅,其实始因就是因为在卓汇第二年续费需要230,而我的新域名商只需要150,为了省银子才不得不采取转移,没想到有了这么一大串的事情。大家就当作看个热闹,长个见识吧~

0%