msgbartop
用铅笔写日记,记录那最原始的美丽
msgbarbottom

ghs.google.com偷偷正常拉

一直都不知道,或者说没有留意到这个变化。因为现在用的都是 vw-in-f121.google.com (74.125.113.121) 来代替的。

也不去关注这个了。知道今天朋友说起,用blogspot做了个博客,用自己的域名解析上去了。

起初,我坚信不可能的。然而我试了一下,真的可以访问。

如图:

上面 赫赫的显示着 ghs.google.com ,我还是不敢确信,也许是人家网站服务器在国外,故而可以访问。

于是 自己ping了一下,也成功了。如图:

至此,我有理由说,ghs.google.com 在大陆被解封。 下次被GFWed的时间不祥。

Ubuntu 9.04 快要来了,兴奋呀

从几周前ubuntu 官网 (http://www.ubuntu.com) 放出的web 倒计时开始,再到昨天放出的RC (发布候选版),让我们感觉到ubuntu 9.04离我们越来越近了,呵呵

我认为ubuntu之所以成为最流行的linux 发行版之一,和它的易用性是分不开的。一般来讲,在我们的印象中,unix 和 linux 这种 类unix (Unix Like) 系统 向来是跑在大型机上的.我们这些低端用户只能装个windows 系统用用。就算勉强要用话,估计也会被这类系统的 繁多的 命令,或者 终端呀,控制台之类的东西 吓退,不要说灵活应用,就连上手都很难迅速OK.如果一定要坚持用的话,而装好后使用的频率又不高或者几乎不用的话,那么很容易被人认为是装 B,呵呵 ==!!

而且我们接触电脑 大都是在win 95时代以后,对GUI (图形用户界面) 产生了很大的依赖性,就算你以前用过DOS (磁盘操作系统),或者熟练于 命令行模式,但是现在也不太现实,呵呵

而微软公司的政策原因,再加上自己的版权意识的慢慢 树立,找到一个能够替代windows 系统的要求便产生了。

这时候,一个几乎和windows 一样易用、方便、并且没有版权问题的 免费的系统 出现了---ubuntu 系统来到了。

很兴奋,也很焦急。

等待中.....

Google App Engine(谷歌应用程序引擎) JAVA 试用手册

就在前天吧,谷歌应用程序引擎(简称GAE)继python后,开放了对Java的支持.让人兴奋不已

比较Java是当今最流行的高级语言,在TIOBE的编程语言榜单上,JAVA已经蝉联了十几个月的冠军,这一点是毋庸置疑的。

相关链接: 4月编程语言排行榜

由于这个功能是刚刚开放的,所以用句通俗的话来讲,现在还在内测阶段。所以 必须向 谷歌申请,才能开通。

这个在你用 谷歌帐号 登录 GAE 时候 会发现,在页面上方会有黄色的提示。 只要点击 "sign me " 按钮就可以了。注意这个是有名额限制的,前1万名申请者才有资格开通,所以要抓紧呀

下面是引用GAE官方博客的声明:

we're giving the first 10,000 interested developers an early look at Java language support

之后,在你的注册邮箱里收到一封开通的通知,如图

至此,你的 GAE 就开始可以跑 JAVA 程序了,哈哈

要想你开发出的程序能在GAE上运行,首先得安装App Engine Java software development kit (SDK)

下面提供两种方法:

1.到这个地址:http://code.google.com/appengine/downloads.html 下载×××.msi 的安装包,安装即可。然后可以利用它自带的相关工具开发。这个方法,对于我这个酷爱绿色软件的人 不太适用。

2.安装 Google Plugin for Eclipse,这个我比较推荐,毕竟我们开发Java 大多用的都是这款开源的IDE。

下载地址是针对eclipse的两个版本,大家可以自行下载,

  • The Google Plugin for Eclipse, for Eclipse 3.3 (Europa):
    http://dl.google.com/eclipse/plugin/3.3
  • The Google Plugin for Eclipse, for Eclipse 3.4 (Ganymede):
    http://dl.google.com/eclipse/plugin/3.4

因为我的版本是 基于3.4.2的Ganymede,所以选择后者,打开eclipse-->help--->software update--->add site 输入地址,

再刷新一下,就可以看到谷歌GAE的插件了,如图

点击 Update 即可。 默认安装完毕后重启eclipse.

再打开eclipse 时候,会发现面板上多了一些图标,这些就是GAE的按钮。如图

点击 蓝色 小"g" 图标 创建 Web 应用 项目,这个就是 能在GAE上运行的程序的雏形。呵呵

新建项目的结构大体是:

ProjectName/
  src/
    ...Java source code...
    META-INF/
      ...other configuration...
  war/
    ...JSPs, images, data files...
    WEB-INF/
      ...app configuration...
      lib/
        ...JARs for libraries...
      classes/
        ...compiled classes...

其实如果你经常做JSP的项目会发现和它一样,只不过Webcontent 被改名为 War 了

如图:

现在我们要做的就是 像平时一样,写好自己的程序就可以了。

不过有一点要注意的是,在war/WEB-INF下有个 appengine-web.xml,它是和将来程序在GAE上的具体设置有密切关系的,

主要是这两点:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>你的GEA ID名称</application>
    <version>程序的版本号</version>
</appengine-web-app>

更多的设置,比如 静态文件 和 资源文件,以及 是否开启session,ssl安全浏览 等,可以到下面这个地址去查看
URL:http://code.google.com/intl/zh-CN/appengine/docs/java/config/appconfig.html

这是我 appengine-web.xml 的设置情况(仅供参考),如图


在编写java 类是要用到GAE提供的包,如
package packageName;

import java.io.IOException;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

这些,大家可以参考GAE的api文档,在此不再多说

关于JSP页面,也与一般的web project 没两样,不过如果eclipse默认用的是JRE的话,是会报错的,
所以请确保eclipse的JRE System library是 JDK.

还有就是数据库,GAE提供两种类型的数据库访问,1 是  Java Data Objects (JDO),2 是  Java Persistence API (JPA).
具体信息可以参见:SUN的 技术文档
或 GAE文档 地址:http://code.google.com/intl/zh-CN/appengine/docs/java/datastore/usingjdo.html

想要实现对数据库的访问,得设置---位于src/META-INF目录下的 jdoconfig.xml文件.

具体内容如下:
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

    <persistence-manager-factory name="transactions-optional">
        <property name="javax.jdo.PersistenceManagerFactoryClass"
            value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
        <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
        <property name="javax.jdo.option.NontransactionalRead" value="true"/>
        <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
        <property name="javax.jdo.option.RetainValues" value="true"/>
        <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
    </persistence-manager-factory>
</jdoconfig>

在类里实现对数据库的列名声明方法简称POJOs(Plain Old Java Objects) 代码编写如下:

package packageName;

import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.users.User;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Greeting {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private User author;

    @Persistent
    private String content;

    @Persistent
    private Date date;

更多数据库语法,参见 http://code.google.com/intl/zh-CN/appengine/docs/java/datastore/dataclasses.html

而后,是数据在数据库里的物理,永久写入:

见实例代码:

package packageName;

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;

public final class PMF {
    private static final PersistenceManagerFactory pmfInstance =
        JDOHelper.getPersistenceManagerFactory("transactions-optional");

    private PMF() {}

    public static PersistenceManagerFactory get() {
        return pmfInstance;
    }
}

新建一个操作类,导入上面的相关类:
以日期为例,写入数据库

Date date = new Date();
        Greeting greeting = new Greeting(user, content, date);  // user,content 假设上面已定义

        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.makePersistent(greeting);  //待jsp 页面传入
        } finally {
            pm.close();
        }

在JSP页面的调用方法实现:
局部代码:
<%
    PersistenceManager pm = PMF.get().getPersistenceManager();
    String query = "select from " + Greeting.class.getName();
    List<Greeting> greetings = (List<Greeting>) pm.newQuery(query).execute();
    if (greetings.isEmpty()) {
%>
<p>目前无消息</p>
<%
    } else {
        for (Greeting g : greetings) {
            if (g.getAuthor() == null) {
%>
<p>匿名人士写道:</p>
<%
            } else {
%>
<p><b><%= g.getAuthor().getNickname() %></b> 写道:</p>
<%
            }
%>
<blockquote><%= g.getContent() %></blockquote>
<%
        }
    }
    pm.close();
%>

这样,一个GAE 程序访问数据库 操作的过程就完成了。 JDO操作数据库语句 叫做 JDOQL (和T-SQl 等差不多).

具体介绍见:http://code.google.com/intl/zh-CN/appengine/docs/java/datastore/queriesandindexes.html

接下来就是 静态文件 的问题,这个应该不成问题,所谓 静态文件 就是一些 无需改变的,如 图片,CSS样式表 等
而关于 静态文件 等的 声明在 appengine-web.xml 里面有详细说明,本人不再多说.

至此,一个 GAE JAVA 项目就算是完成了,待写好代码,测试完毕后,就可以通过 eclipse 的插件 上传到 GAE 服务器运行了了。

点击那个 蓝色小引擎 的图标 即可,如图:


至此,我们对 GAE JAVA 的第一次接触 到此结束了。

这是我上传的一个留言板测试页面,大家可以去看看, http://xia-zhengxin.appspot.com

PS:我发现了一个问题,貌似 GAE 对 中文的支持好像不太好,我在本地的中文字符,上传后都会变成了乱码。可能是还有什么没有设置好吧
但是 我的pageEncoding 和 charset 都改成了 gbk 或 utf-8,好像都不太有用。

现在问题得到了解决:

详见:http://www.jxva.com/blog/personal-diary/change-the-google-app-engine's-javac-compiler-encoding.html

原因是因为调用了系统默认的编码格式,而windows的默认字符编码不是 utf-8,所以导致中文变乱码了,呵呵

下载上面地址 人家提供的反编译好的application.class 文件,覆盖原来的,就OK了

不同的是:此人用的是SDK, 而我们用的是 plugin ,路径可能不一样。插件路径如下:

Eclipse路径\plugins\com.google.appengine.eclipse.sdkbundle_1.2.0.v200904062334\appengine-java-sdk-1.2.0\lib\appengine-tools-api.jar

				
				

			

Google App Engine开始支持java啦

这个崭新的LOGO漂亮吧,哈哈

自Python后,谷歌终于提供了对其他语言的支持,估计以后会越来越多。

让这个强大的功能可以被我们更好,更广泛的利用,不至于荒废了。话说 python没学过.

先申请开通了,稍后再写出攻略,呵呵

官方通知:http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html

谷歌音乐 上线啦

最近听说google 开通了在线音乐服务,但是不知道究竟是怎么个样子。最近看到国内各大新闻都在关注这件事情 前几天在cnbeta 上看到说正式上线了,一直没用过。 因为对于我这个只喜欢在本地硬盘上用播放器听歌的人来说,的确没什么诱惑力 不过,在谷歌之前,在线音乐&下载 貌似一直是 百度 的天下,这次不知道谷歌是不是要抢夺地盘啊,我本人也是百度mp3 的用户,也会经常搜索一些 或 下载 音乐. 于是,今天特地去用了下谷歌的这个新产品. 打开谷歌首页,发现 谷歌音乐 已经成为谷歌首推的服务 出现在了 下方 如图:

呵呵,看来谷歌对 这个是抱有了很大信心呀 点开之后,进入了 谷歌音乐的 页面,一个鲜明的logo 出现在 上方,我们可以清楚的看到 "测试"的字样

如图:

一看之下,发现内容还挺丰富的,有排行榜之类的

我试着搜索了一位歌手的名字,系统自动罗列出了他自出道以来的 所有发行的歌曲.

给人感觉很不错。 随机点了一首歌曲

便跳出网页播放器了,不过,在播放之前,用户得先同意一个协议,才能继续

如图:

这个 可能是 涉及到版权问题,同意便是. 毕竟人家提供的是正版的音乐试听

播放速度貌似也不错,如果觉得歌曲不错,还可以下载到本地。

如图:

看看 文件大小,果真是正版的音乐呀,和我们从CD里面提取出来的 分毫不差

哈哈,以后再也不用 花冤枉钱去买 周董的 专辑啦.

_________________________________________

相关链接:
谷歌签约四大唱片公司 将发布音乐搜索正式版