数量级:
——————–
K = Kilo(千)
M = Mega(兆)
G = Giga(吉,千兆)
T = Tera(太)
P = Peta(拍)
E = Exa(艾)
Z = Zetta(泽它,皆)
Y = Yotta(尧)
B = Bronto
N = Nona
D = Dogga

计量单位:
——————–
b = Bit(位,比特) 计算机存储最小单位
B = Byte(字节) 它是计算机存储的基本单位. 1字节=8位,1个英文字符是1个字节(1B),1个GBK编码的汉字为2个字节(2B)。
Kb = KiloBit(千位,千比特)
KB = KiloByte(千字节)
Mb = MegaBit(兆位,兆比特)
MB = MegaByte(兆字节)
GB = GigaByte(吉字节,千兆字节)
TB = TeraByte(太字节)
PB = PetaByte(拍字节)
EB = ExaByte(艾字节)
ZB = ZettaByte(泽它字节,皆字节)
YB = YottaByte(尧字节)
BB = BrontoByte
NB = NonaByte
DB = DoggaByte

单位换算:
——————–
KB = 2^10 Bytes = 1,024 Bytes
MB = 2^20 Bytes = 1,048,576 Bytes
GB = 2^30 Bytes = 1,073,741,824 Bytes
TB = 2^40 Bytes = 1,099,511,627,776 Bytes
PB = 2^50 Bytes = 1,125,899,906,842,624 Bytes
EB = 2^60 Bytes = 1,152,921,504,606,846,976 Bytes
ZB = 2^70 Bytes = 1,180,591,620,717,411,303,424 Bytes
YB = 2^80 Bytes = 1,208,925,819,614,629,174,706,176 Bytes
BB = 2^90 Bytes = 1,237,940,039,285,380,274,899,124,224 Bytes
NB = 2^100 Bytes = 1,267,650,600,228,229,401,496,703,205,376 Bytes
DB = 2^110 Bytes = 1,298,074,214,633,706,907,132,624,082,305,024 Bytes

岁月如梭,人事易变!生活总会遇到无法预知的问题,面对不同的压力!结婚生子、买房还贷、工作升职等等,每个人都会经历!再多的困难都无法阻挡,披荆斩棘,努力前行,追寻明天光明的太阳!

想起多年前开始使用QQ空间的时候,设置了一个副标题,在此贴出来继续勉励自己:

Keep a simple dream and follow it with no doubt.

同事说,在台北部署一个项目时遇到一个ClassNotFound的问题,而开发环境就不会发生,问我可能的原因,我想可能是环境classpath没有包含jar或者有class重复之类的问题。 他检查了一下,除了开发环境是简体系统,部署环境是繁体系统之外,所有配置设定都一样。当时想java的项目,跟简体繁体应该没关系吧,应该还是其他地方的问题,但因为自己有事情忙没有帮他看这个问题。

第二天他告诉我找到原因了:ClassNotFound的问题是那个类初始化的时候会加载国际化内容,而项目中有配置简体国际化,但繁体的国际化没配置,导致读取国际化失败,类加载失败。添加了繁体国际化就解决了!

不管程序设计上是否有问题,单从找问题的思路上,我也犯了错误。因为一般情况遇到ClassNotFound的问题都是classpath的问题,在此遇到这样的问题,习惯性的认为就是这样的原因造成。没有更进一步思考发生错误可能的原因还有其他情况,比如类加载失败等; 另外是当得知只存在简体繁体OS之差的情况,没有从这个关键点去思考,没有去想程序逻辑是否跟系统的语言版本有关系。 看来以后遇到问题的时候,还要对问题进行深入的了解,了解问题本质以及尽可能多的原因。另外程序运行会存在依赖关系,在问题模拟时,存在任何差异都应该要引起注意,多思考一下这样的差异是否和程序逻辑有关系。

说到找问题,程序员往往都会犯一个错误:对自己写的程序盲目自信!觉得自己写的代码绝无BUG,出了问题,简单检查一下程序说没问题,就开始怀疑是不是framework有问题?更有甚者会怀疑JDK有bug,OS有bug。 当然也不是framework、JDK、OS就不可能有问题,要明白framework、JDK、OS都是经过长时间的验证,且大家都在使用,其他人都没有遇到问题,让你发现问题的几率还是很小的。项目实践证明,绝大多数问题都是程序逻辑的问题,framework的问题很难遇到,JDK、OS的问题几乎是没有!

租房的地方比较旧的安置房小区,房东安装的电灯都是挂丝的,之前已经换过多次节能灯,用不了多久就烧了!这次两个房间都烧了,去五金店买已经买不到挂丝的节能灯了,老板说现在都不用挂丝了,挂丝太危险,金属暴露在外,用摧丝的都包在塑料壳内,更安全!好吧!于是我买了两个节能灯和两个节能灯头!

今天一早,架起桌子凳子忙活起来!准备好螺丝刀、钳子、刀子!爬到桌子上的凳子上,把天花板上的挂丝头拆掉,但原来留下的线很短,很难操作!必须另外找铜线延长。屋里找了半天没找到,后来想起凉衣服的线是电线,于是从上面取下一节,扒去塑料皮,再截断成10厘米一小段。用钳子把这段铜线和原来天花板露出的一点线拧起来转几圈,将起伸到摧丝塑料壳内,然后穿进扣控中,再用螺丝刀把扣控螺丝旋紧,最后塑料壳旋紧,这样摧丝口就换好了! 节能灯旋上接口即可,相当简单!

一切顺利完成,但这个过程还是挺难的,要一直举着手做事情,而且脚还不能动,弄出一身汗水! 不过打开电闸,打开开关,电灯亮起的那一刻还是相当有成就感!

今天收到spring推出spring io platform的邮件,它是一个基于maven(或Gradle)的依赖版本管理的定义,它定义了常用的企业开发所需的java库的依赖版本,使得开发者不再花心思研究各个java库相互依赖的版本,只需引用spring io platform的定义。特别是引用的java库要升级的时候,还需要所有相关的java库都要检查一下,往往需要漫长的验证过程才能最终确定一个可用的版本。 如果使用spring io platform,依赖的版本关系已经被验证测试过了,所以可以放心使用,升级也是简单升级spring io platform即可,它会升级所有相关依赖的java库。

公司中我也创建了一个类似spring io platform的版本依赖定义的项目,其他多个开发项目都在用。后续将考虑修改此依赖定义项目,先引入spring io platform,如果有特别需要的java库,再另外添加! 以后java库升级就不那么麻烦了!

<!-- import spring io platform definition -->
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>1.0.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

参考:Spring IO Platform Reference Guide

呵呵,这明显是标题党了,勿喷!

当今是互联网爆发的时代,所有行业都采用各种方式挤入互联网,不管餐饮小店还是小作坊,都知道要在互联网做宣传。互联网已经是新时代的广告平台!很多网站都是靠网络广告作为其主要收入来源。但要获得好的收入,首先网站的PV/UV量要比较高,才会有广告主找上门。或者你本身是需要做广告,通过广告提高网站PV量,从而提高销售额。提高了销售额,就提高了营收,也就可以提高网站的估值,最终把钱赚入腰包!

PV就是金钱,提高PV就是赚钱!

为了提高PV,是否只能做广告呢?当然不是,广告的目的是把你的信息发布到各个地方,让很多人看到,而新闻也有同样的作用!
新闻相对广告而言更具优势,因为广告是被动接收的,而新闻是人们主动要索取的信息。而且新闻具有广泛的传播平台,而且一段时间内还会成为大家的谈资,推广效果更好! 如果一个爆炸性的新闻中包含你的广告信息(当然是隐秘的间接的,比如公司名),传播不需要一分钱,能给你带来大量的PV,那是不是一件再好不过的事情呢?

然而,哪来这样爆炸性的新闻而其中又包含你的广告信息呢? 自己制造吧!如何制造呢?花钱吧!

  1. 花100万去做一个慈善,叫上各家媒体来做宣传;
  2. 或节省一点,花1万买上万个茶叶蛋声势浩大的在街上发放,表示你对白领吃不起茶叶蛋言论的不满,同时告之各路记者来采访;

但有没有不花钱的呢? 有!用你的声誉来制造新闻吧! 当然这些声誉损失不能影响你的未来发展,不然就得不偿失了!
比如你是某某集团网站的CEO,如果能够爆出和一个比自己小年龄相差很大的名气女神约会,而且是女神倒追你!这样的新闻是不是很爆炸啊!这个新闻足够大家谈论一段时间!而之前很大一部分人不知道某某集团的,开始访问你的网站,给你带来大量的PV,而其中一部分人会成为你的客户,给你带来不俗的交易量,让你赚取100万,1000万或更多,你是否会欣喜的接受呢? 你问女神愿意吗?女神说我会因此变得更有名气!

如果我再告诉你,互联网信息爆炸的今天,你的新闻很快就会被大家忘记!用你的声誉换100万,你是否愿意?
你问我愿意吗?我愿意但怕没有女神会愿意!

最后说明,此文纯属个人想法,切勿当真!

-- tablespace
CREATE tablespace MYPROJECT datafile 'D:\oracle\product\10.2.0\oratablespace\MYPROJECT.dbf'  SIZE 5m  autoextend ON NEXT  10m maxsize unlimited;

-- temporary tablespace
CREATE TEMPORARY tablespace MYPROJECT_TEMP tempfile 'D:\oracle\product\10.2.0\oratablespace\MYPROJECT_TEMP.dbf' SIZE 5m autoextend ON NEXT 10m maxsize unlimited;

-- USER SQL
CREATE USER MYUSER IDENTIFIED BY password
DEFAULT TABLESPACE "MYPROJECT"
TEMPORARY TABLESPACE "MYPROJECT_TEMP";

-- ROLES
GRANT "CONNECT","RESOURCE","DBA" TO MYUSER ;

-- SYSTEM PRIVILEGES

-- QUOTAS

整理一种Spring Security Web认证实现方案,其核心组件及认证过程说明如下:

实体设计说明:
1. Function,权限对象,和Role对象为多对多关系;
2. Role,角色对象,实现GrantedAuthority和ConfigAttribute接口;Autority和Attribute都返回RoleId;
3. User,用户对象,实现UserDetails接口,和Role对象为多对多关系;

服务设计说明:
1. FilterSecurityInterceptor继承AbstractSecurityInterceptor,需注入AccessDecisionManager、AuthenticationManager、SecurityMetadataSource;
2. SecurityMetadataSource需根据请求信息获得ConfigAttribute信息;具体实现类根据请求URI获得Function,再根据Functon获得ConfigAttribute(Role)列表;
3. AuthenticationManager需注入UserDetailsService,对提交信息进行认证,并获得UserDetails(User)的GrantedAuthority(Role)列表;
4. AccessDecisionManager实现类中decide方法,对以上获得的ConfigAttribute(Role)列表和GrantedAuthority(Role)列表进行对比,判断是否包含相同的项,若有则有权限,否则无权限;

一个可以抓图和录像的ActiveX控件,详情如下:

1. 网址:http://www.videocapx.com/

2. 其lite版包含大部分基本功能,售价99美元,standard版售价199美元( 1,236.32 人民币);

3. 其支持不同的视频编码和音频编码模式;使用视频MJPEG Compressor压缩模式,用200万高清摄像头录制10秒的影像录音文件大小大概为3M;

4. 此产品产商为欧洲产商,提供support网站进行支持;
其他联系方式:
Phone: 00387 30 513 858
Fax: 00387 30 513 858
Email: fathsoft@fathsoft.com

5. 产品特性如下:
1) Full access to all WDM-compatible devices
2) Support for multiple video inputs
3) Capture live video and audio
4) Text/Logo/Image overlay on video
5) Full multimedia player functionality
6) Capture live audio directly to MP3
7) Pause and resume capture without frame loss
8) Motion detection
9) Easily build video-surveillance , quality control or video-conferencing apps
10) Save video frames as JPG or PNG
11) Full access to RGB pixel data
12) Chroma-key effect (live or post-process)
13) Video-processing filters available
14) Resize, crop or zoom video
15) Samples with full source code included
16) Add video-capture to your web pages
17) Control PTZ camera, set brightness, saturation, hue, contrast
18) Draw graphics on video
19) Supports VC++, VB6, VB.NET, C#
20) Compatible with Windows 98, 2000, XP, Vista, Windows7 (32-bit and 64-bit)
21) Preview live video or playback video files to DeckLink card output
22) Video preview, capture and motion detection from IP/network cameras
23) Transfer video over network. Video-chat functionality.
24) Broadcast live video to Windows Media clients
25) Ti+A1:B25me Unlimited, Royalty-Free License

定义一个javascirpt方法,传入需要加载国际化消息key键数组,获得这些消息加载到页面中。

/*
 load i18n resource through javascript
 */

function loadi18n(keys) {
    if (keys == null || keys.length == 0) {
        return;
    }
    if(!window.i18n){var i18n = window.i18n = {}}
    jQuery(document).ready(function(){
        var method = keys.length > 20 ? "POST" : "GET";
        jQuery.ajax({
            url : context_path + "/js/resource",
            data:{"key[]":keys},
            type:method,
            cache:true,
            dataType:"script",
            success:function(data){}
        })}
    )
}

以下是一个Spring Controller根据传入key键返回国际化消息:

@RequestMapping(value = "/js/resource")
public void getMessages(@RequestParam(value = "key[]") String[] keys, HttpServletRequest request, HttpServletResponse response, Locale locale) {
    ResourceBundle resourceBundle = ResourceBundle.getBundle("message/messages", locale, JsI18nController.class.getClassLoader());
    response.setCharacterEncoding("utf-8");
    response.setContentType("application/javascript");
    StringBuilder contents = new StringBuilder();
    if (keys != null && keys.length > 0) {
        for (String key : keys) {
            String value = resourceBundle.getString(key);
            contents.append("i18n['" + key + "']=\"" + value + "\";");
        }
        try {
            response.getWriter().write(contents.toString());
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
        }
    }  
}

以下是javascript动态调用获取国际化例子:

loadi18n([ "sure.delete", "success.delete" ]);
loadi18n([ "failure.delete" ]); //根据需要可多次反复调用

function delUser(userId) {
    if (confirm(i18n['sure.delete'])) {
        // to delete the user
    }
}