再见Windows

August 31, 2010

类别 我的日记

这里的 Windows 是指 Microsoft 的那个 Windows。在领略了 Ubuntu 的桌面效果后,早就想把 Windows 弃用了,但考虑到有很多的资料不便移植,所以一直用盗版的 Windows 7。

前几由于安装了最新的 Mysql(5.5.5)和PHP(5.3.3),导致我电脑上的 Apache 出了问题:PHP一旦操作 Mysql 就会出现“无法显示该网页“,什么错误代码都没有。正是这个问题,让我下载了N个版本的 Mysql,但都没能解决。终于,在我一遍又一遍的配置 Mysql 服务时,一不小心,之前的所有数据都被我彻底删除了。虽然用数据恢复工具把数据都恢复了,但是数据库的目录结构没有保存下来,真后悔自己习惯按“Shift+Delete“......

我把所有问题都归就于无辜的 Windows 上。这下没什么可顾虑的了,对于我这样不喜欢玩游戏的电脑用户,真不知道 Ubuntu 不能满足我的什么需求?于是带着懊恼,彻底删除了 Windows 7,安装了“向往已久”的 Ubuntu 桌面版。我并不熟悉 Ubuntu 的操作,一些配置,一边上网查找资料,就这样开始了我的 Ubuntu 之旅。

附:PHP操作Mysql时提示“无法显示该网页”的解决方法

最后证实,并非 Windows 的问题,而是 Mysql 5.0 以上的 lib(libmysql.dll) 文件导致的。重新下载了 Mysql 5.0.* 的 lib 文件,重启 Apache 后恢复正常。

{ 9 条评论 }

与谷歌对话第二期

August 10, 2010

类别 我的日记

再次收到了来自谷歌网站管理员支持论坛小组成员的邀请,将于下周与谷歌员工进行电话访谈交流。

谷歌网站管理员支持论坛近日又进行了一次“超级用户”的评选,此次评选出3位站长朋友,这是自上次以来谷歌管理员支持论坛第一次搞的活动。

此前,可能由于“谷歌退出中国”的影响,官方论坛不仅冷清,而且还很混乱,里面充斥着各种各样的商业广告以及垃圾信息,此次活动可能是谷歌欲再次开展在华业务的信号,毕竟由于中国人口众多,不可忽视。

此次对话,我暂定于16日进行,主要讨论如何加强谷歌员工与超级用户之间的交流以及作为超级用户的感受和需求。

同时,也欢迎大家在评论中留下你们的问题,我将会在电话交流中向谷歌员工提出。

{ 12 条评论 }

Windows 7 操作系统在刚开机时,CPU 使用率高达 100%,持续将近 2 分钟左右,2 分钟的等待是漫长的。

Windows 7 可以说是“新一代的 Windows 操作系统”,其中有很多以前想都不敢去想的效果和功能,所以不论从速度还是性能方面,应该都会比 Windows XP 好很多,不然仅仅靠优美的水晶外观很难征服用户。

但 Win 7 刚开机时 CPU 使用率一直在 100%,大概持续将近 2 分钟之长,这就很不正常了。

中毒的情况在我身上可以排除,从我接触电脑以来,无论是公司还是个人,我使用的电脑从来没有中过病毒。那究竟什么样的程序会抢占 2 分钟之长的时间才可以完成加载呢?打开“任务管理器”发现有两个名为 svchost.exe 的进程,分别把 100% 的资源用尽了。

网上有的资料说是因为 Windows Updates 服务,是由于 Windows Update 服务下载/安装失败而导致更新服务反复重试造成的。我也试过这样做,但是没有任何改观。不过这个解决方法给了我很大的启示:svchost.exe 进程简单的说就是一个提供网络连接的接口,可能是由于很多个服务同时去试着连接网络而使得 CPUT 使用率增高到 100%。

那就从 Windows 的服务中入手吧,要想找到进行所对应的服务很简单。只需要打开“Windows 任务管理器”转到“进程”选项卡,选中需要查看服务的进程,然后点击鼠标右键,选择最下面的“转到服务(S)”,便会转到“服务”选项卡,并且默认选中 svchost.exe 进程所使用的服务。(见下图)

通过Windows 任务管理器来查看进行所使用的服务

通过Windows 任务管理器来查看进行所使用的服务

此时,你便可以根据“Windows 任务管理器”中的分析情况,把服务设置为“手动启动”,这样开机 CPU 占用 100% 的问题便可以解决了。

注意,执行服务的设置时,仔细看“服务管理器”中对服务的详细描述,一定要谨慎操作。

{ 13 条评论 }

茉莉龙珠绿茶

July 16, 2010

类别 我的日记

我的木子茶业-茉莉龙珠

今天一大早,我便收到了EMS寄来的快件:茶,是一包 100% 福建原产的“茉莉龙珠”绿荼。

这是 我的木子茶叶 的馆主送给我的。

我不是一个懂得品茶的人,对于我来说,茶水除了比白开水好喝外,没有什么特别之处。但我很喜欢茶的香味,所以也会经常喝茶,但喝的是那种5元一盒的茉莉花茶,与 Yuan 送给我的茉莉花茶是没得比的(要100多呢,肯定没得比了...)。

赶紧打开泡一杯来尝尝。第一次看到做工如此好的茶,外形圆紧,白毫显露,形似珍珠(这些形容词是抄包装上的,但确实圆圆的、一粒粒的像珍珠一样)。取茶数粒放入杯中,倒入开水后,杯中的茶渐渐下沉并舒展开来,一股淡而雅的茉莉花香四溢开来;饮后满口清香,甚是回味。

{ 9 条评论 }

新的博客主题

July 04, 2010

类别 维护手册

前段时间,为了考验一下自己的对 Java 技术的了解,便用 Java EE 写了一个博客程序,其中用的样式就是现在博客使用的样式,这个样式是我从 Matt Cutts 的博客下扒下来的,此乃使用的是“照猫画虎”之术。对于我来说“照猫画虎”甚是简单,但自己做一个不错的主题,比登天还要难。

Java EE 版的博客完成后,发现代码甚是凌乱,虽然在其中用到了一些 MVC 的框架,但感觉与 Model 2 还相差甚远。

想要使用新的博客程序,但考虑到环境的搭建和在使用中可能会出现各种各样未知的问题,毕竟是一个很不成熟的程序,于是便放弃了使用。

又想要使现在的博客换个样子,于是便采用了这套新的主题。之前的 js 代码甚是混乱,所以把 js 的代码也换了。

评论部分也有了小小的改变,采用返回 json 格式信息的方法来判断和显示评论的发表情况。

{ 16 条评论 }

EL自定义函数

June 22, 2010

类别 IT知识堂

JSP 标准标记库 (JSTL) 是自定义标记库的集合,它将许多 JSP 应用程序通用的核心功能封装为简单的标记,但有时候仍然无法满足我们的需求,这时候就要用到 EL 的自定义函数了。

创建 EL 自定义函数只需简单 3 步就可以轻松完成了。

1、新建一个类:

package me.zhangqian.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public final class DateTimeFormat {

	private static SimpleDateFormat format;
	
	/**
	 * 将日期和时间格式化为字符串
	 * @param date 需要格式化的日期和时间
	 * @param pattern 日期和时间的格式
	 * @return 格式化后的字符串
	 */
	public static String date2str(Date date, String pattern) {
		if (date == null) date = new Date();
		format = new SimpleDateFormat(pattern, Locale.US);
		return format.format(date);
	}
}

2、在/WEB-INF目录下新建一个 tld 文件:

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
 <tlib-version>1.0</tlib-version>
 <short-name>format</short-name>
 <function>
 	<description>格式化日期和时间</description>
 	<name>date2str</name>
 	<function-class>me.zhangqian.util.DateTimeFormat</function-class>
 	<!-- 方法 -->
 	<function-signature>
 		java.lang.String date2str(java.util.Date, java.lang.String)
 	</function-signature>
 </function>
</taglib>

3、将 tld 文件引入到要使用的 jsp 页面,并进行使用:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>
<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ taglib prefix="format" uri="/WEB-INF/datetimeformat.tld" %>
<c:set var="date" value="<%= new java.util.Date()%>"/>
${format:date2str(date,'MMMM dd, yyyy')}

{ 3 条评论 }

借钱很难

June 18, 2010

类别 我的日记

家里盖房子,工程现急用钱(问我要3000元),我也仅剩2000元了。亲戚们没有去指望,父亲住院时就没人愿意借给我钱,现在父亲不在了,更没有什么感情了;所以只好向关系好点的朋友开口了,给的答复却都一样“没钱!”

确实,对于像我这个年纪的人,即使已经工作了,大多也是赚多少花多少,根本不会有存款。很少会有人像我这样,为了省钱走半小时以上的路程去上班,为了省钱从来不吃早饭,为了省钱每吨饭除了4.5块的面还是4.5块的面,甚至为了省钱把烟也戒了。

朋友们向我借钱时,我总是傻乎乎的报一下我的家底,对方如果给我一个还钱的期限(如:我肯某某某的时候还你钱),尽管这个还钱的期限没有任何意义,我便会把钱借出去,半年、一年也要不回来。在现在急需用钱的这种情况下,还是一而再再而三的拖延下去。人家说没钱还,我也不能硬要,只好自己厚着脸皮去借钱了。

别人向我借钱就特别容易,我向别人借钱就如此难...?

最后,感谢一下我的好朋友刘晨军、郭伟,谢谢你们对我的关心和帮助。

{ 9 条评论 }

没错,我的博客启用了新的域名:zhangqian.me

为什么选择.me域名?me就是我,而且.me域名是一种新推出的域名,所以资源非常多,更重要的是价格也比较合适,godaddy 的注册价格是$8.99/首年,折合人民币60元左右。查了一下万网的注册价格为 320元/年。

第一次在 godaddy 购买域名,是通过 alipay 支付的,从购买到解析没有遇到什么问题。现在已经把旧的域名做了301重定向,在谷歌网站管理员工具中也做了相应的调整,应该很快谷歌中就会重新索引,之前的域名 xixuyishi.com 还将继续使用。

望交换了友情链接的朋友对链接更新一下。

{ 8 条评论 }

可能遇到此问题的朋友并不多,我是这么认为的。

前几个月我就发现我的电脑中不可以使用搜索功能,由于没有对搜索功能有太大的需求,在Google中查找了很久后没找到答案,类似的问题也不多,我便以为可能是电脑一时的问题,或者Win7的搜索就有Bug,于是便放弃了。但随着电脑中的学习资料的增加,想要找特定的资料时由于文件名的命名都是以01、02这样的数字开头的,这样之前使用按文件名排序的功能也无法将同类的资料很好的排列出来了。只好再继续搜索解决方法了,最后终于找到了解决方法。但是通过一个非常不“主流”的关键字找不到,所以特写此文,希望可以帮到有需要的朋友:)

主要是对注册表的修复,所以直接上附件了:修复Windows 7搜索功能

如果不想下载附件的朋友可以继续往下看,下面有注册表的修改方法。

感兴趣?马上浏览全文...

{ 3 条评论 }

通过JAVA抓取页面时,有些页面会返回401(Unauthorized)响应状态码和www-authenticate响应头来要求客户端进行身份认证。这种认证有两种方式:BASIC和DIGEST,BASIC验证要求客户端对用户名和密码进行BASE64编码后传送给服务器。DIGEST的认证方式的细节比较复杂,会经过一系列的加密,所以很难被破译。

JAVA提供一个用于启用身份认证的类,可以支持HTTP协议中的多个认证方式,这个类是java.net.Authenticator,使用方法如下:

package com.xixuyishi;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;

public class RunHttpSpnego {

	static final String kuser = "username"; // 用户名
	static final String kpass = "password"; // 密码
	static class MyAuthenticator extends Authenticator {
		
		@Override
		public PasswordAuthentication getPasswordAuthentication() {
			return (new PasswordAuthentication(kuser, kpass.toCharArray()));
		}
	}

	public static void main(String[] args) throws Exception {
		Authenticator.setDefault(new MyAuthenticator());
		URL url = new URL(args[0]);
		InputStream ins = url.openConnection().getInputStream();
		BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
		String str;
		while ((str = reader.readLine()) != null)
			System.out.println(str);
	}
}

只需要创建一个继续自Authenticator的类,并且重写其中的getPasswordAuthentication()方法,将用户名和密码放入方法中,这样在需要使用身份认证的地方实现这个类就可以了。

{ 1 条评论 }