木木(木木:一个视频舞女的身体日记)说:
如果你觉得我的乳房好看,那么我顺便也让你看看我的文章,如果你喜欢我的文章,我会感动地把乳房也送给你看(乳房与文章)
我说:
正经的时候,觉得木木是个有思想、有才华、有觉悟(我是舞女我是党员)、甚至有点儿小资的女人(当白毛女也能穿上GUCCI )。同样也生活在上海,从她的Blog里也能发现上海很多有趣的人、事或者地方,比如《你革你的命我色我的情》提到的福州路和我们的革命先辈们,所以我喜欢看木木的Blog。
不正经的时候,觉得木木的身材是不错,尤其是(oYo),至少拼得过那几位大姐(都是出来混的),那些照片也并不是很色情,点到为止,也很真实,所以我喜欢看木木的Blog。
看过很多日本AV女优的Blog(比如南波杏的Blog),网下,她们拍了很多18禁的AV和写真,但在网上,个人Blog中反而表现得很清纯,很少有暴露的图片,写的内容也是生活中一些琐事,比如看什么书、吃什么、去哪玩之类的。也许在网下,每个人都有许多不能做的事情、不能说的话吧,所以只好在虚拟的网络上完成心愿。那木木呢?和她们相反吗?网下,我们能找到那些AV女优的AV和写真集,那木木呢?将来能不能找到她的“清纯的”杂文集:)
作者:Andy(http://blog.xintiantang.com/andy),版权所有,转载请先联系我
这篇文章于2005/08/30 20:00开始,计划在一个月内完成,所以将会人工置顶。内容有点儿乱,先把想的和做的记下来,然后再慢慢整理。同时欢迎提出你的看法。更新记录:2005/08/30 20:00,2005/08/31 14:45,2005/08/31 21:21,2005/09/01 16:24,2005/09/01 21:53
对于普通用户来说,使用传统的桌面应用程序(可能采用不同语言和工具开发的)可能存在这样那样的限制,比如界面风格千变万化、操作习惯不统一、学习难度大、无法或很难和外部应用通信等。而传统的服务器端应用程序或网站也存在许多限制,比如网络连通可能出现问题、响应速度慢、不能保证服务器端始终可用、担心数据安全和个人隐私问题、不够灵活、使用不方便等。
而基于浏览器的桌面应用程序正是综合桌面应用程序和服务器端应用程序的功能产生的。它包含以下优点:
基于浏览器的桌面应用程序(Browser-based desktop application)的定义:一个包含嵌入式网站服务器(Embedded web server)的能够在浏览器内的客户端的独立运行(Stand alone)的应用程序。
我把基于浏览器的桌面应用程序(Browser-based desktop application)简称为BBDA。其实BBDA和AJAX技术一样,也是一个buzzword,而不是什么新技术,只不过把几种通用的软件或技术组合在一起而已。和传统的重量级的Portal系统不同的是,BBDA是轻量级网络应用(Light weight web application),XML(Feed / RSS / XML-RPC / SOAP)是联系各个服务或应用的纽带。
其实,BBDA很符合目前热炒的WebOS(基于网络浏览器的操作系统)的特性,这方面Google做了个最好的Demo:Google Desktop, 在GD中,一切内容的表现都是网页(虽然隐藏了浏览器),并且很容易和Google网站进行通信(比如同时搜索本地和搜索Web,利用Feed(RSS)或XML-PRC或SOAP之类的协议读新闻、邮件、天气预报、股票行情等,微软该称RSS为Feed好像很有道理吧?)。现在GDS(Google Desktop Search)只是GD的一个模块而已,百度的桌面搜索只是单纯地模仿了GDS,却没有猜到原来Google是要做GD,好傻的百度。Google这几年的收购和挖人活动(Google宽带, Google browser等),看来一切都是为了WebOS而努力。这里顺便说一下Yahoo刚收购的Konfabulator,Konfabulator和GD有很大不同,我觉得它只是包含许多小软件或和网站交互的工具,只是个玩具箱而已,要做WebOS靠这个可以吗?看来Yahoo的眼光似乎始终不如Google。找到这篇文章:GoogleOS? YahooOS? MozillaOS? WebOS? 居然和我的想法如此相似(写这个之前我绝对没看过这篇文章)!
由于我主要做Java开发,所以只列出可能涉及的Java软件包:Browser(IE/FireFox), JDK, Tomcat/Jetty, HSQLDB/Apache Derby, Hibernate, Spring, Groovy, DOM4J,Apache Http Client, Lucene, Struts/WebWork/JSF/Tapestry/Wicket/Flex&Laszlo(Flash RIA), DWR(AJAX), Apache Web Services(SOAP/XML-RPC), Apache POI(Word/Excel/ PDF), MP3 ID TAG 3 lib ,JPEG EXIF lib...
我的目的是组合几种通用的JAVA软件,用来进行快速的BBDA开发。对于开发者而言,只要选好合适的软件,并合理组合起来,完全可以达到或超过Ruby on rails的功能和开发效率。同时,对于普通用户而言,只要打开浏览器输入http://localhost就会进入Dashboard(ProtoPage是个很好的Prototype^_^),然后就可以管理日记(blog)、日历、通讯录、照片(flickr?)、音乐(itunes?)、文件、网摘(delicious?)、阅读订阅的RSS(bloglines?)、查看邮件(web mail)、新闻之类等,并可以进行搜索、共享、发布、与外部应用或网站同步等,构成一个完整的个人门户系统(Personal portal),XML(Feed / RSS / XML-RPC / SOAP)是联系各个服务或应用的纽带。。
画了个草图(持续修改中):
接下来我会发布一个开发BBDA的基础软件包(将会包含一个简单的相册的BBDA),下面是我对基础软件包的说明。
关于嵌入式网站服务器(Embedded web server):
我这几天试用了Jetty和Tomcat。总以为Jetty很小呢,最适合做BBDA呢,结果发现软件包也很大了,另外很多功能不如Tomcat,Tomcat Embed 5.5由于使用Ecipse JDT,现在已经很小了(3M左右),而且标准,所以选了Tomcat Embed(这里下载)。下面的代码是Tomcat Embed的启动程序。
Start.java:
package com.terac.tomcat;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Embedded;public class Start {
public static void main(String[] args) {
try {
String path = System.getProperty("SERVER_HOME");
if(path!=null&&!"".equals(path)){
int port = Integer.parseInt(System.getProperty("SERVER_PORT","8080"));
startTomcat(path,port);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void startTomcat(String path,int port) throws UnknownHostException,
LifecycleException {
System.setProperty("catalina.home", path);
Embedded embedded = new Embedded();
Engine engine = embedded.createEngine();
engine.setName("Engine");
Host host = embedded.createHost("localhost", "web");
Context rootContext = embedded.createContext("", "");
rootContext.setPrivileged(true);
host.addChild(rootContext);
engine.addChild(host);
engine.setDefaultHost("localhost");
embedded.addEngine(engine);
Connector connector = embedded.createConnector((InetAddress) null,port, false);
embedded.addConnector(connector);
embedded.start();
}
}start.bat:
@set classpath=./lib/所有的jar文件
@java -DSERVER_HOME=%cd% -DSERVER_PORT=80 -classpath %classpath% com.terac.tomcat.Start
关于嵌入式数据库(Embeded database):
Apache Derby虽然比HSQLDB强大,但还是太大了,尤其是当用到IBM的JDBC Driver时。所以只好选HSQLDB。下面的代码是在Web应用程序启动时启动HSQLDB服务器。
HSQLDBServletContextListener.java:
还未整理好
web.xml中需要加入listener:
com.terac.hsqldb.HSQLDBServletContextListener
关于全文检索引擎(Full text search engine):
Apache Lucene应用广泛,也足够强大,高亮显示(Highlighting)需要自己实现,自动摘要(autosummarize)需要Classifier4j 。下面是常用类的封装代码:
Indexer.java:
还未整理好
Searcher.java:
还未整理好 Highlighter.java:
还未整理好
关于Shell:
有些时候,用户不满足已经有的服务,需要更灵活的、或者定制的功能,一个简单的、易学的、解释性的、交互式的Shell就显得很必要,比如Windows提供的cmd或Linux里的bash。研究了一下,发现Groovy正好能满足需要,“for (ch in "Hello world!") {println ch}”,这个稍微复杂点儿的Hello world很好懂吧?
关于计划任务(Schedule Task):
Windows里有计划任务,Linux里有Cron job,这个对于WebOS也是必须的,比如定时检查邮件,定时抓新闻等等,Spring framework封装了好几种Time service,足够了。
关于对象关系映射工具(OR mapping tools):
Hibernate是最常用最强大的工具。下面是Hibernate Session的封装代码:
HibernateUtil.java:
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Session;
import net.sf.hibernate.cfg.Configuration;
import org.apache.log4j.Logger;public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
public static final ThreadLocal threadSession = new ThreadLocal();
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// We have to catch Throwable, otherwise we will miss
// NoClassDefFoundError and other subclasses of Error
log.error("Building SessionFactory failed.", ex);
throw new ExceptionInInitializerError(ex);
}
}
public static Session currentSession() throws HibernateException {
Session s = (Session) threadSession.get();
if (s == null) {
s = sessionFactory.openSession();
threadSession.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
关于模型-视图-控制框架(MVC framework):
现在的MVC framework太多了,传统的有Struts/WebWork,新的有JSF/Tapestry/Wicket/Flex&Laszlo(Flash RIA) ,Wicket网站列出了55种之多!我试过JSF,始终不能另我满意,正在尝试这个Wicket。
待续。。。
2. Four color palates were decided for new Beijing bus, and the monthly tickets to be accepted by 350 buses equipped with air-conditioners;
3. About 1 million scraps of broken porcelain, some of which may be up to 800 years old, unearthed recently from an enormous pit in downtown Beijing;
4. A big ceremony was held to celebrate the 40th anniversary of the founding of the Tibet Autonomous Region, September 1;
5. The funeral of Chinese actor Fu Biao is held today in Babaoshan memorial park.
RSS-feed.org is a beta site that lets you create a publicly accessible webpage that shows news from all your favourite news sources — as long as they have an RSS feed. Right now RSS-feed.
Larry Williams想去Google工作(详见Google jobs),他通过Google Jobs对Google的招聘职位统计了一下:
Programming languages
Skill | Count |
---|---|
Python | 98 |
C++ | 98 |
Java | 98 |
Perl | 73 |
Javascript | 45 |
PHP | 26 |
C# | 5 |
Ajax | 1 |
Ruby | 0 |
Operating systems
Skill | Count |
---|---|
Linux | 99 |
Windows | 53 |
Mac | 3 |
FreeBSD | 1 |
Solaris | 1 |
Other
Skill | Count |
---|---|
XML | 26 |
Struts | 2 |
看来在Google里,Python,C++,Java还是王者,Linux用得最多,XML也很广泛,Struts居然也有(Google Ad Sense好像是用这个的吧?)。
看了Google在Mountain View总部的Java Engineer职位,发现我也可以啊:),我也喜欢 ten other great reasons,Google比国内公司要实际多了,如果Google是中国公司的话,估计招聘职位要求是这样的:
记得曾经问Leader我们公司总部也在MV,那周围都有什么大公司啊?他说周围只有一家大公司,那家公司就是Google。。。
As we hinted yesterday, some changes have been afoot here at FeedBurner. It started with a new coffee maker that doesn't harm anyone pouring a cup of coffee before it's done brewing. This welcome enhancement was inevitably followed by thoughts of "Should we do for the site what we've done for the coffee?" We put our heads together, brought in some new and existing users to test our hunches, and a few weeks later we've got the redesigned FeedBurner application you can visit right now after you've logged in.
All of the changes have occurred below the “public surface” (what you see after signing in) — they are primarily changes to your feed configuration and account management experience. Our No. 1 goal was to make it easier to offer our publishers more new services and stats reporting tools in the coming months without further stretching the limits of socially appropriate vertical scrolling. So, instead of presenting all 15 of our services (and counting!) on one page, everything is now available from logically organized tabbed menus and sidebar. This is a more scalable solution and helps us keep up with our highly energetic Product Development and Engineering teams. See a service you want? Click its title, enter its options, and click its Activate button. It goes to work on your feed immediately. We have integrated the feed awareness and promotion capabilities into this management interface, and we have also tried to make solving feed problems easier with a new “Troubleshootize” feature for every feed you burn. We have simplified your account's My Feeds page to report circulation statistics at-a-glance and provide you with timely updates from FeedBurner headquarters.
The rest of the public website — outside of a signed-in user account — is unchanged. You can expect improvements there in the near term as we expand our services to reach new audiences and syndication markets. For now, all remains as it was.
One final note: there are no new publisher services effective with this launch — If you have a feed burned with us, it's completely unchanged. However, we hope future enhancements will be easier to apply.
For a quick guide to some of the key changes (and to help re-orient yourself), check out our redesign guide. Have comments for the design team? Send them in!