iKoo's Dirty Life

这里只是我的后花园,无主题,纯粹随性而写。

December 19th, 2011

优酷广告那点儿事

4 Comments, Uncategorized, by Zen.

前言

写此篇博客的目的我实在受不了没完没了的关于优酷过滤完广告后黑屏提示的反馈。本想写到ChinaList项目Wiki里面的,想了想觉得放在那边有点不太合适,就放到这里了。
这篇博客的目标读者是使用了Adblock Plus并且订阅了(EasyList + ChinaList)/ ChinaList Lazy的Firefox用户。其他的,可以作为参考。这里不讨论是不是应该过滤广告这种口水话题。

原理

优酷通过flash的cookie文件Local Shared Object (via Wiki),存储是否播放过广告,如果没播放过就黑屏提示。但是早期优酷是蛮大方的,播放器是不会去检查用户是否播放广告的。抛开广告的事情,Flash的这个cookie文件,其实对特别在意隐私的用户是个很大的安全隐患。想查看cookie的内容,需要借助于第三方的工具,比如这个FlashCookiesView

由此就有两个解决方法,不让flash保持cookie或者使用不检查是否播放广告。

More

December 8th, 2011

Java读写Excel表格

No Comments, Uncategorized, by Zen.

最近一个项目中需要导出Excel格式的报表。Google了一下,发现比较热门的方案是JXLapache POI。简单看了下,JXL支持Excel,看起来比较轻量而且最后更新时间是2009年。最后还是决定用POI来解决,该项目支持所有MS文档格式。POI有几乎所有Apache项目的通病,jar包超大,还好这个没引用那一堆Apache项目的通用包,算是不幸中之大幸。POI项目文档还算比较详细,看完快速入门,基本使用应该就没什么问题了。

正常导出报表的场景就是从数据库读取数据,然后按照指定的格式生成报表。其中可能涉及到的就是插入/复制行,单元格设置公式计算这些典型应用。下面就按这个需求给出解决方案。思路就是,首先制定一个Excel模板文档,暂命名为TEMPLATE.xls;然后读取该文档,插入/复制一些数据进去,另存为新的报表文件。这样就不需要在写入数据的时候考虑繁琐的表格样式问题了。

More

December 7th, 2011

Socket 异步·终

No Comments, Uncategorized, by Zen.

前面几篇,我挑了几个自己在预研的时候用到的NIO框架写了一些demo。这里整理了下Java主流网络编程框架。做Java网络编程需要掌握一些基本的知识和技能:套接字编程、阻塞/非阻塞通信、创建HTTP服务器与客户程序、数据报文通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、JavaMail API、MVC设计模式、安全网络通信、CORBA和Web服务 等等。

More

September 28th, 2011

Socket 异步之 .NET

No Comments, Uncategorized, by Zen.

Socket 类为网络通信提供了一套丰富的方法和属性。Socket类允许您使用ProtocolType枚举中所列出的任何一种协议执行异步和同步数据传输。

Socket类对异步方法遵循.NET Framework命名模式。 例如,同步的Receive方法对应于异步的BeginReceiveEndReceive方法。

如果应用程序在执行期间只需要一个线程,请使用下面的方法,这些方法适用于同步操作模式。

  • 如果当前使用的是面向连接的协议(如TCP),则服务器可以使用Listen方法侦听连接。Accept方法处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的Socket。 可以使用此返回的 Socket 来调用 Send 或 Receive 方法。 如果要指定本地IP地址和端口号,请在调用 Listen方法之前先调用Bind方法。如果您希望基础服务提供程序为您分配可用端口,请使用端口号 0。 如果希望连接到侦听主机,请调用 Connect方法。若要进行数据通信,请调用SendReceive方法。
  • 如果当前使用的是无连接协议(如UDP),则根本不需要侦听连接。 调用ReceiveFrom方法可接受任何传入的数据报。 使用SendTo方法可将数据报发送到远程主机。

若要在执行过程中使用单独的线程处理通信,请使用下面的方法,这些方法适用于异步操作模式。

  • 如果当前使用的是面向连接的协议(如 TCP),则可使用 SocketBeginConnectEndConnect方法来连接侦听主机。 通过使用BeginSendEndSend方法,或者使用BeginReceiveEndReceive方法,可以进行异步数据通信。 可以使用BeginAcceptEndAccept处理传入的连接请求。
  • 如果您使用的是 UDP 等无连接协议,则可以使用BeginSendToEndSendTo来发送数据报,而使用BeginReceiveFromEndReceiveFrom来接收数据报。

如果对一个套接字执行多个异步操作,它们不一定按启动时的顺序完成。

当数据发送和数据接收完成之后,可使用Shutdown方法来禁用Socket。在调用 Shutdown 之后,可调用Close方法来释放与 Socket关联的所有资源。

通过Socket类,您可以使用SetSocketOption方法来配置Socket。可以使用GetSocketOption方法来检索这些设置。

如果要编写相对简单的应用程序,而且不需要最高的性能,则可以考虑使用,TcpClientUdpClientTcpListener,这些类为 Socket 通信提供了更简单、对用户更友好的接口。

More

September 23rd, 2011

目录文件监控之NIO2

No Comments, Uncategorized, by Zen.

前面介绍了基于了第三方的库JNotify等来实现对指定文件夹的监控。随着JDK 7的发布,这一切就显得非常简单了。虽然没有.NET那样有现成的类,但是有了机制之后,自己实现也是相当容易的。

定义一个文件监控接口

1
2
3
4
5
import java.io.File;
 
public interface FileChangeListener {
	void fileChanged(File file);
}

More