2005/11/30

感谢Yskin

我非常感谢Yskin,他来信指出了我的Blog在IE下的乱码的问题并且给出了正确的解决方法。非常感谢!

刚看了你的Blog,在你的 个人资料里找到了你的email地址。
你的这篇文章,在IE里无法显示,我觉得是由于模板里,title标签在前的问题。正确的应该是这样:

<$BlogMetaData$>

<title><$BlogPageTitle$></title>

请参考这篇文章

现在已经解决了这个问题。几乎不用IE,所以没有注意到原来Blog在IE下一直是乱码。呵呵!

--
爱别人,爱自己!

通过CMWAP上IM

这几天试着用手机玩了玩QQ、MSN。感觉很不错,我觉得肯定是今后的一个方向,觉得有应用的市场。不过不爽的就是这些即时通信软件必须通过CMNET来 进行来接,而不能使用CMWAP。而后者可以20元包月不限流量,有没有什么办法可以让QQ通过CMWAP接入了。答案是肯定的。一个偶然的机会,我发现 SisQQ竟然通过CMWAP登录了。后来关机重起后却又不行了。原来要用CMWAP方式登录的话,必须要走一些弯路:
1:首先用CMNET方式登录,登录后立即退出
2:再用CMWAP方式登录,出现连接失败错误信息,没关系,退出QQ
3:再次用CMWAP登录,OK,登录成功!哈哈。以后就可以一直登录在线了。

可惜我不怎么用QQ,我经常上的时MSN。然后我用同样的方法来操作AgileMessage,呵呵,结果证明经验主义总是不可靠的。不知道谁有手机上可以上MSN的软件。不要CMNET方式的。

--
爱别人,爱自己!

2005/11/25

Gtalk专题

Gtalk技术开发

Java开源类库Smack简单教程
  1. Smack Overview
  2. Getting stared with Smack
  3. Messaging using Chat and GroupChat
  4. 待续

设立Gtalk专题

Blogger没有栏目分类,对一些有系统性的连续性的文章来说,这确实是个问题。会给读者的阅读和理解造成很大的困难。所以把这些系列内容归类,按照逻 辑上的先后顺序把分散在整个Blog中的文章链接起来,就是建立一个目录列表。从这个思路出发,建立了一个Gtalk专题。现在的主要测重点是怎样利用 Java开发关于Gtalk的应用,而这方面的技术我主要集中于Smack这个开源类库。所以现在这个专题里面的主要内容都是关于Smack开发的。以后 可能会越来越多的考虑一下Gtalk的应用问题。
专题就从Gtalk开始吧,以后肯定会越来越多!

BTW:空间问题
前一段时间DreamHost的777 Promotion Code有效的时候,自己没法支付;现在可以支付了,但777 Code确实效了,这两个造成的差距确实有点大(10$与25$的差别),看来如意的事情总是很少^_^,不过相对于国内的空间来说是很超值。现在需要的 是能有个好的理由来说服自己买这个空间,你给出个点子!嘿嘿!

2005/11/24

Messaging using Chat and GroupChat

接上 Getting stared with Smack
及时通讯的核心是收发信息。Smack提供两个类Chat、GroupChat来完成这项工作。
  • # org.jivesoftware.smack.Chat -- 两人交谈
  • # org.jivesoftware.smack.GroupChat -- 加入聊天室同多个人进行交谈
这两个类都使用org.jivesoftware.smack.packet.Message包类(Packet Class)来收发消息。在某些时候,你可能想不通过这两个类,而是直接收发消息。

Chat
一个Chat在两个用户之间创造一个新的消息线程。下面的代码段说明了如何进行创建Chat,并发送消息
// Assume we've created an XMPPConnection name "connection".
Chat newChat = connection.createChat("jsmith@jivesoftware.com");
newChat.sendMessage("Howdy!");
Chat.sendMessage(String)方法是一个快捷方法:它首先创建一个Message对象,然后设置消息体,最后发送消息。如果你想在发送消息前增加其他熟悉,你可以使用如下的代码段:
// Assume we've created an XMPPConnection name "connection".
Chat newChat = connection.createChat("jsmith@jivesoftware.com");
Message newMessage = newChat.createMessage();
newMessage.setBody("Howdy!");
message.setProperty("favoriteColor", "red");
newChat.sendMessage(newMessage);
Chat允许你很容易的侦听对方的回复。下面的代码段是一个应声虫,它回显对方输入的信息
// Assume we've created an XMPPConnection name "connection".
Chat newChat = connection.createChat("jsmith@jivesoftware.com");
newMessage.setBody("Hi, I'm an annoying parrot-bot! Type something back to me.");
while (true) {
// Wait for the next message the user types to us.
Message message = newChat.nextMessage();
// Send back the same text the other user sent us.
newChat.sendMessage(message.getBody());
使用Chat.nextMessage()方法来获取下一个Message,它会无限期的等,直到有下一个消息。还有别的方法可以为新消息指定一段特定的事件,也可以使用事件驱动模式,当消息来时通知你。

GroupChat
群组聊天允许你连接到聊天室,你可以和组内的人进行通信。在发送和接受消息前,你必须使用一个组名(昵称)来加入某个组。下面的代码段说明了如何加入组并发送消息:
// Assume we've created an XMPPConnection name "connection".
GroupChat newGroupChat = connection.createGroupChat("test@jivesoftware.com");
// Join the group chat using the nickname "jsmith".
newGroupChat.join("jsmith");
// Send a message to all the other people in the chat room.
newGroupChat.sendMessage("Howdy!");
一般来说,在组内收发消息和两人对话类似。并且提供了列出组内其他人的方法。

我的标签: , ,
--
爱别人,爱自己!

Getting stared with Smack

续上 Smack Overview
这个文档向你介绍一下Smack API以及它里面的重要类库和观念。

建立连接

XMPPConection用来同XMPP SERVER建立连接。创建SSL连接的话,需要使用SSLXMPPConection类。下面的代码说明了怎样建立连接
// Create a connection to the jabber.org server.
XMPPConnection conn1 = new XMPPConnection("jabber.org");

// Create a connection to the jabber.org server on a specific port.
XMPPConnection conn2 = new XMPPConnection("jabber.org", 5222);

// Create an SSL connection to jabber.org.
XMPPConnection connection = new SSLXMPPConnection("jabber.org");

一旦你建立了连接,你就可以通过XMPPConnection.login(String username, String password)方法,使用你的用户名和密码进行登录。登录成功后,可以创建Chat或GroupChat对象来和其他用户进行交流了。

好友列表

Roster 类可以用来跟踪每一个用户的状态。你可以把用户归入不同的组比如"Friends"或"Co-worker",也可以判定用户是否online或 offline。通过XMPPConnection.getRoster()能够获得好友列表,Roster类允许你遍历好友列表,弄清他们是什么名字, 属于那个组,是否在线等等。

读写消息包(Reading Or Writing Packet)


从客户端发向XMPP SERVER的消息成为包(Packet),通过XML格式发送。org.jivesoftware.smack.packet包包含了这些类,他封装了 XMPP允许的三个不同类型的基本包(message, presence, IQ)。类Chat和GroupChat提供了更高级别的结构,能够自动管理包(Packet)的创建和发送,当然你也能直接创建和发送包 (Packet)。下面的例子说明了如何改变自己的状态,让别人知道你出去钓鱼不在电脑前了。
// Create a new presence. Pass in false to indicate we're unavailable.
Presence presence = new Presence(Presence.Type.UNAVAILABLE);
presence.setStatus("Gone fishing");
// Send the packet (assume we have a XMPPConnection instance called "con").
con.sendPacket(presence);

Smack提供两种方式来读将要到来的包(Packet): PacketListener和PacketCollector。 两者都使用PacketFilter来决定该处理那种类型的包(Packet).PacketListener常常用在事件驱动的程序中;而 PacketCollector维护一个包(Packet)的结果队列,你可以在其上进行Polling和Blocking操作。当包(Packet)到 来时引发某些事件的时候,使用PacketListener最好不过;而PacketCollector常常用来等待某个特定的包(Packet)。这两 种对象都可以通过XMPPConnection的实例来创建。

2005/11/22

Smack Overview

翻译这个文档的主要原因是为了同Gtalk进行通信,利用Smack来实现自己的机器人等等服务。主要是没有接触其他的Jabber的Java类库,所以没有比较这些类库之间的差别。不过就这一段时间的使用,感觉Smack确实是简单易用!
现在开始Smack的Tut。如果你也对Smack感兴趣,或对与Gtalk通信感兴趣,你可以留言进行交流,或到我的Google论坛进行交流。

1:Smack是一个简单的,功能强大的类库。给用户发送信息只需三行代码便可完成
XMPPConnection connection = new XMPPConnection("jabber.org");
connection.login("mtucker", "password");
connection.createChat("jsmith@jivesoftware.com").sendMessage("Howdy!");
2:不会强迫你向其他类库那样,在信息包层面进行编码。它提供了更加智能化的类比如Chat和Groups,能使你的工作更富效率。
3:不需要你熟悉XMPP XML格式,甚至是XML格式。
4:易于实现机-机对话。
5:Apace License下的开源软件。你可以把它用于你的商业或非商业应用程序。

关于XMPP

怎样使用这个文档
这个文档假定你熟悉XMPP及时消息的主要特征。并热切的希望你能在阅读本文档的时候打开Java Doc API作为参考。
我的标签: , ,
--
爱别人,爱自己!

2005/11/17

不能访问,郁闷

BlogSpot北京又不能访问了,真是郁闷死了。如果说一直都不能访问的话,那倒没什么说的,但这么断断续续的,让人揪心。
真想买个域名,弄个空间,但是又舍不得离开这里。毕竟在这儿呆惯了,有种熟悉的感觉,特别是我觉得Blogger非常适合我。前几天看到Yahoo在搞域 名促销,想弄一个,但是又没有办法国际支付,真是郁闷。国内的不仅价格高,而且服务令人担心。如果谁有推荐的域名服务商,麻烦推荐一下。
不知道BlogSpot什么时候能回来?不过,我也的准备准备换地方了!

2005/11/10

Yahoo和Innereyes和我之痛

Yahoo在中国的就只有搜索了。
阿里巴巴在搜索领域既有决心更有信心,从今天起,在中国,雅虎就是搜索,搜索就是雅虎。
马云这么说。
不管是Yahoo中国卖给卖给马云了,还是马云被Yahoo收购了,但是有一点是肯定的,Yahoo不会放弃中国市场。所以我觉得Yahoo走的是曲线救国的路线,进入-退出-回归。之所以这样,除了资本的意志之外,我觉得可能是本地化工作上的问题,而这几乎全部是由中国的特殊国情造成的。
Yahoo很苦涩,有肉吃不上,只能流口水,这当然令人很难受。当然,这世上难受的、痛苦的人多了,不过最痛苦的莫过于这些,他们提供的服务总是被那些无聊的、自以为技术很高的人骚扰。InnerEyes就是诸多痛苦中的一个,他的服务器Down掉了,也不能提供免费Blog托管,至少现在是这样的。我痛恨这些所谓的Hacker,因为我认为 InnerEyes是个不错的公司,至少提供的服务不错。
不过话说回来,所有的这些痛苦都是别人的,对一个人来说,与他切身相关的才是他最痛苦的。我体会颇深呀!但不能说!^_^
--
爱别人,爱自己!

2005/11/09

不再维护WordPress

WordPress提供Blog托管服务的时候,我应该是最早得到邀请的人中 的一个。那时候Google的Blogger还不能在国内访问!尽管我的是通过Blogger的ftp服务器发布到免费空间上的,但是感觉总不是很好。更不幸 的是国庆长假归来就发现免费空间挂掉了,不过幸好没有几天Google的Blogger就可以在国内某些地方可以访问了,所以就不再继续维护 zhyfng's Blog了。今天把一些数据给导入我爱妞妞,不再继续zhyfng's Blog了。至于为什么,我觉得只有一句话就可以解释,那就是Blogger对我再合适不过了,我信赖它。具体的一些看法在这儿:为什么Blogger要好一些!

如果你想有自己的Blog的话,我建议你使用Blogger。BTW:到现在我还有个WordPress的邀请,如果有人需要的话,可以留言给你!

我的标签: , ,

用Java接受从Gtalk发出的信息

现在来看看怎样才能接受由Gtalk发出的信息呢? 在Smack�我现在知道有两种方式,可以获得Gtalk发出的信息

  • 使用chat的nextMessage方法,然后加工处理这个信息,将处理的结果使用sendMessage发送回去。
    Chat.setFilteredOnThreadID(false);
    while (true) {
    Message message = chat.nextMessage();
    chat.sendMessage(message.getBody());
    System.out.print (message.getBody());
    }
  • 使用PacketListener进行监听经过过滤后的Packets,当有新的Packet时候,就会调用processPacket来进行处理。你只需实现这个方法即可。
    Chat.setFilteredOnThreadID(false);
    GoogleTalkConnection con = new GoogleTalkConnection();
    con.login("iouniuniu", "me");
    PacketListener messageListener = new PacketListener() {
            public void processPacket(Packet packet) {
            Message message = (Message) packet;
            String body = message.getBody();
            handle(body);
        }
    };
    con.addPacketListener(messageListener, new PacketTypeFilter(   
                               Message.class));

但是如果要成功必须注意下面两个问题:

  • 必须设置Chat.setFilteredOnThreadID(false);
  • 对方必须是经过确认的好友。如果你把对方加入联系列表,但对方没有接受,可能不能收到信息

后�问题,现在仅仅是在代码上实现了怎么和Google Talk进行通信,具体的原理并不清楚。接下来的工作就是要慢慢的了解Smack的实现方法和Jabber的基本原理。要做到知其然,并且知其所以然。

Tags: Gtalk, Java, Smack



--
爱别人,爱自己!

Google生日

Google的生日日期好像是个问题,看来和人的生日一样,都是可以随便定的。呵呵 ^_^。

一说9月7日
根据Google官方的解释,诞生于1998年9月7日。但是在今年9月7日那天并没有庆祝7周岁的Logo。 很不幸的是Google的官方解释现在访问不到了,会出现这个错误Document Not Found Sorry, the document you requested is not available. You can return to the refering page, or You can visit the main page.不过还好,从下面这个图中能清楚地看见日期 Google Birthday

一说9月27日
在不是Google生日的今天,却在Google的主页上出现了庆祝7周岁的Logo。这与Google的官方解释差了20天。
Google Birthday

到底Google是那天生日呢?这其中有什么神秘呢?我不知道!你呢?
--
爱别人,爱自己!

2005/11/04

前移评论框

把Blogger的Comments评论框前移到每个页面中去,就像普通的Blog那样,发表评论的地方总是紧跟着文字的后面,效果如下。其实这个东西来自牢骚,还是牢骚,我仅仅增加了一个Word Verification。整个实现过程没有什么技术含量,但是要把这些代码从Blogger的页面代码里提出来确实是很不容易的一件事,它的源码太乱了。
还有一些小毛病,一个是如果你是Blogger用户,这样提交不会显示图片;另一个是发表评论后能直接跳转回来就会更好,这个简单JavaScript就应该能实现。
感谢GreGory,是他做了几乎全部的工作。
--
这两天有点忙!

2005/11/01

汗!给人指路

昨天晚上在师大的时候有个人问路,说化学楼在那儿,在印象中,化学楼好像在主楼所在的方向,我不是师大的,妞妞在师大,所以我对师大还是有点知道的。等碰 到了妞妞,才知道自己犯了个大错误,把方向给弄反了,真是太对不起问路的人了。记得以前找锦江之星的酒店时,我也问过一个人,也被别人指错方向了,当时心 里恨恨的骂了一顿那个糊涂蛋。哎!没想到不久之后,俺也成糊涂蛋了!我想昨天那个人也一定很郁闷,不过我也挺郁闷的,但还是人家来的更郁闷些!
看来以后不清楚的事情,一定要说不知道。这样安全很多!
╱◥█◣ *. ﹒.‧ ★﹒*
︱田︱田 ★‧
> > ● ‧. ﹒★.
╬╬╬╬╬ _/█__‧.
--
爱别人,爱自己!