解惑

解己之惑,解人之惑

分类:Web (第3页共5页)

互联网观察

展望3D的互联网

昨天在我的名字起源中提到过VRML,结果今天很巧的看到KESO的日志中提到一个3D的虚拟社区,赶紧注册了一个用户,可惜到后来才发现这个社区原来是需要另外安装客户端的。

借这个机会展望一下我心目中的3D的互联网吧。
首先我想每个人应该有一个自己静态的IP,至少是可以很容易的获得,就像现在的域名一样。
然后就是一个简单通用的3D的语言,就像现在的HTML一样,VRML可能是一个候选。
还有就是需要3D的电脑设备了,记得在一部科幻电影中(可能是黑客帝国)看到过一个场面,就是一个人戴上一个手套以后,就在电脑上操作互联网,展现在用户前的不是屏幕,而是一个虚拟的3D的空间,用户通过拉伸、滑动、交换等等方法可以操作那些虚拟的3D对象。
剩下的就是想像力了,像现在的互联网一样,每个人可以拥有一个属于自己的虚拟空间,我们暂且称之为“虚拟人”,虚拟人可以在自己的空间中写日志,讨论问题,购物,就和现在的互联网一样,不同的是,这些信息主要保存在你自己的空间中,当然,如果你加入某些社区,这些社区也会保存一份同样的信息。
这样,每个人可能会拥有两个空间,一个是现实空间,一个是虚拟空间,在现实中,你可能一穷二白,但是在虚拟空间中,你可能很富有。当然,两个空间的财富可能可以进行交换。
梦想中的这个3D的互联网应该是囊括了现在互联网的功能,搜索、BBS、网络游戏、购物、交友、共享照片、Blog等等。

百度特立独行?

昨天晚上看到一个比较有意思的插件:Landing sites,但是它不支持百度,看了下源代码,要支持百度很简单,加一个搜索引擎的定义就行了:
            ‘baidu.com’ => ‘wd’,
然后试了下,结果发现页面上显示的查询的关键字显示为乱码,研究了下,发现百度很奇怪的把URL中的中文使用GB2312编码,而不是现在通用的而且是URL编码标准的UTF-8,例如搜索“mockejb 框架”,谷歌的编码为:mockejb+%E6%A1%86%E6%9E%B6,而百度的编码为:mockejb+%BF%F2%BC%DC
百度是为了特立独行还是想表明自己是支持国家标准的民族企业?
本来想修改代码对百度的进行特殊处理,代码中使用urldecode进行解码,但是没有办法指定解码的编码方式,暂时就那么的了,问题应该不大,虽然我的blog来自百度的搜索很多

2007年4月23日更新:
呵呵,TrackBack真的很有用,到我的一个TrackBack的BLOG,我看了下,他又找到了别人的解决百度的编码问题的blog

谷歌比百度更诚实

试了下谷歌和百度收录我的BLOG的情况,发现谷歌更加的诚实一些,而百度差不多有20倍的夸大。百度的结果中翻到17页的时候,搜索结果就变成186了,而不是原来的4890项。不过谷歌也并非没有缺点,就是太不稳定,昨天好像还收录了205个,今天就变成155了。
不过也许我不应该说百度的坏话,因为很奇怪的是,我现在访问量的15%都是百度过来的,比谷歌还多,谷歌只有不到13%,但是我的这个应该属于技术性的站点,按照以前的讨论,应该是谷歌更有优势。

Post和Get

又是一个朋友的问题,他有一个form,method是get,action里面带了参数,例如:
<form action="test.do?p1=1" method="GET">
<input type="text" size="10" value="2" name="p2">
<input type=submit value="Submit">
</form>

在服务器端,提交以后的信息里面参数p1的值没有了!
如果把method修改为POST方式就没有问题了;
又或者把form里面的那个input输入框去掉,那么p1也有值了。
很奇怪吧。
目前还不清楚是浏览器导致这种问题还是有规范约定这种处理方式。我的感觉是有规范进行这种约定,然后浏览器就把form的内容转换为一个URL,例如例子的情况,浏览器就把请求的   URL转换为test.do?p2=2了,忽略了action原先带的参数p1。而如果是POST方式,那么浏览器就不用做转换,直接提交了。
没有办法,我们只能接受这个事实。
阅读全文

首页符合XHTML1.0标准

经过很多的修改和尝试,首页终于符合XHTML1.0标准了,修改如下:

  • 最多的问题集中在我对img标签的使用,竟然必须要有alt属性才行,后来都加上了。
  • 海明威主题输出的那个设计者信息的URL有问题,写的是href.=,这个不符合,修改functions.php,作者好像对这个信息有点不想让人修改的意思,因为他是把那个链接用一个字符一个字符拼起来的,拼的过程中出了点小错误,多加了一个.号。
  • 修改dropcap.php,也就是那个首字下沉的插件,有两个问题,一个是有个bug,把</p>多输出了一次,第二就是在一个页面上多次需要首字下沉的时候,他使用的是id的方式,但是一个页面上是不能存在多个元素使用同一个ID的,修改为class的方式。
  • 随机日志的插件也有问题,它的链接中的title默认是输出文章内容摘要的,但是摘要可能有换行,这样就有问题了,关掉链接中的输出摘要它又把摘要显示在链接后面,去掉那些代码。

阅读全文

WordPress要符合XHTML标准好困难

昨天晚上在看网站重构那本书,也就想看看这个站是否符合XHTML标准,经过一个多小时的修改,最终放弃了,因为我使用了很多插件,而这些插件很多是不符合XHTML标准的,我修改完我自己的那些页面,发现依然不行,而且XHTML的标准似乎确实有点高。
感兴趣的可以自己试试是否符合:http://validator.w3.org
看到很多网站都宣示自己符合XHTML标准,但是很怀疑是否真的符合。

使用Google还是百度

我是完全的一边倒的支持google的,但是很奇怪,我老婆无论我怎么说都坚持用百度,不是因为别的,就是百度好用!不用奇怪,我老婆搜索的内容基本上都是娱乐相关的内容,在这方面,我必须承认百度确实比google的搜索结果好很多。但是我搜索的都是技术的内容,而且往往要搜索英文的内容,这个就完全不是百度的强项了。如果你是想找乐子,呵呵,用百度吧,如果是其它的,google是最好的选择。

IE的并发连接请求限制导致的问题

公司的产品导入了AJAX,但是后来发现一个严重的问题,就是在IE下,首页切换到其它页面比较困难,特别是首页还有一个下拉列表,选择不同的值会将首页的那些AJAX区域重新加载,如果其中几个比较慢(服务器端返回比较慢,因为有些存在性能问题,数据量大了以后查询特别慢),那么切换的时候要等很长时间,所以表面上看上去就是IE死掉了,但是在FireFox下没有这个问题。后来查证是IE下有两个并发连接请求的限制,每个AJAX请求也都算一个请求。后来的解决办法就是将AJAX请求排队,一个执行完了才能执行另外一个,这样无论怎么切换都是马上响应的,这个修改只对IE有效,FF下就不进行限制。
阅读全文

gmail不能发送包含bat文件的压缩包

呵呵,今天给一个朋友发送javazip_src_0.8alpha.zip作为demo,结果gmail说包含可执行文件,不让发送,感觉这个限制比较傻。

使用google xslt包实现一个简单的在线rss阅读器

这个只是我试验google xslt的功能的一个小demo,很简单,另外使用到了XHConn。

HTML:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<HTML>
<HEAD>
<TITLE>Google Ajaxslt rss reader demo</TITLE>
<script type=”text/javascript” src=”XHConn.js”></script>
<script src=”misc.js” type=”text/javascript”></script>
<script src=”dom.js” type=”text/javascript”></script>
<script src=”xpath.js” type=”text/javascript”></script>
<script src=”xslt.js” type=”text/javascript”></script>
<script type=”text/javascript”>
var _rssxslt=”<xsl:stylesheet><xsl:template match=\”/\”>”;
_rssxslt+=”<xsl:apply-templates select=\”rss/channel/item\”/>”;
_rssxslt+=”</xsl:template>”;
_rssxslt+=”<xsl:template match=\”rss/channel/item\”>”;
_rssxslt+=”<xsl:element name=\”a\”><xsl:attribute name=\”href\”><xsl:value-of select=\”link\”/></xsl:attribute>”;
_rssxslt+=”<xsl:value-of select=\”title\”/>”;
_rssxslt+=”</xsl:element>”;
_rssxslt+=”<br/>”;
_rssxslt+=”<xsl:value-of select=\”description\”/>”;
_rssxslt+=”<br/>”;
_rssxslt+=”</xsl:template>”;
_rssxslt+=”</xsl:stylesheet>”;
var myConn;
  function read()  {
    el('htmldisplay').innerHTML = “Reading”;
    myConn = new XHConn();
   
    if (!myConn) alert(“XMLHTTP not available. Try a newer/better browser.”);
   
    var fnWhenDone = function (oXML) {
    //logging__=false;
    var html = xsltProcess(xmlParse(oXML.responseText), xmlParse(_rssxslt));
    el('htmldisplay').innerHTML = html;
   };
    myConn.connect(“rssReader”, “POST”, “param=”+el('url').value, fnWhenDone);
  }
 
</script>
</HEAD>

<BODY>
<h1>Google Ajaxslt rss reader demo</h1>
<div id=”sample”>
Sample:
<ul>
<li>http://www.javaresearch.org/rss/RSS2_article.xml
<li>http://www.nytimes.com/services/xml/rss/nyt/AsiaPacific.xml
</ul>
</div>
Log:
<div id=”log”></div>
<br />
<br />

RSS feed: <input type=”text” id='url' size=80 value='http://www.javaresearch.org/rss/RSS2_article.xml'><INPUT id='readbutton' TYPE=”button” value=”Read” onclick=”read()” />
<div id=”htmldisplay”></div>
</BODY>
</HTML>

AJAX据说可以读取外部的数据,但是我试验了一下好像不行,XMLHttpRequest打开的链接不能是以http开头的外部链接,不得以写了一个servlet:
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RssReaderServlet extends HttpServlet {
  public void init() throws ServletException {
  }

  public void service(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType(“text/xml”);
    response.setHeader(“Cache-Control”, “no-cache”);
    OutputStream pw = response.getOutputStream();
    URL url = new URL(request.getParameter(“param”));
    URLConnection connection = url.openConnection();
    BufferedInputStream reader = new BufferedInputStream(connection
        .getInputStream());
    int length = 0;
    byte[] buffer = new byte[1024];
    length = reader.read(buffer);
    while (length != -1) {
      pw.write(buffer, 0, length);
      length = reader.read(buffer);
    }
    pw.flush();
  }

}

web.xml里面的片段
  <servlet>
    <servlet-class>org.jr.ajax.RssReaderServlet</servlet-class>
    <servlet-name>rssReader</servlet-name>
  </servlet>
  <servlet-mapping>
    <servlet-name>rssReader</servlet-name>
    <url-pattern>/rssReader</url-pattern>
  </servlet-mapping>

更早的文章 更新的文章

© 2024 解惑

本主题由Anders Noren提供向上 ↑