分类目录归档:程序生活

Program Life – Web

欢迎使用“海蓝短信助手”- 用手机短息免费接收新浪微博信息

新浪微博API更改授权方式为Author2.0,该应用还是用的Auth1.0,目前应用不可用,近期会升级更新

 

欢迎使用海蓝短信助手: http://sms123.sinaapp.com/

1.当你关注的人有新微博,或你有新的@ 消息,新的评论,新的粉丝时,你的手机会立即收到一条短信,包括完整的微博内容

2.你可以添加特别好友,不需要在微博关注他/她,当他/她发表新微博时,会及时以手机短信的形式发送到你手机上

3.这一切都是免费的

首页如下:

使用微博账号授权登录以后,页面如下:

如果第一次使用或者想更新手机号,点击上面的绑定链接,如果已经绑定过想设置服务或者开通、暂停短信发送,点击下面的链接

绑定的页面设置如下:

继续阅读

html_select_time参数说明

html_select_time

Attribute Name Type Required Default Description
prefix string No Time_ what to prefix the var name with
time timestamp No current time what date/time to use
display_hours boolean No true whether or not to display hours
display_minutes boolean No true whether or not to display minutes
display_seconds boolean No true whether or not to display seconds
display_meridian boolean No true whether or not to display meridian (am/pm)
use_24_hours boolean No true whether or not to use 24 hour clock
minute_interval integer No 1 number interval in minute dropdown
second_interval integer No 1 number interval in second dropdown
field_array string No n/a outputs values to array of this name
all_extra string No null adds extra attributes to select/input tags if given
hour_extra string No null adds extra attributes to select/input tags if given
minute_extra string No null adds extra attributes to select/input tags if given
second_extra string No null adds extra attributes to select/input tags if given
meridian_extra string No null adds extra attributes to select/input tags if given

属性 类型 是否必须 缺省值 描述
prefix string No Time_ 变量名称前缀
time timestamp No UNIX时间戳或年-月-日 使用时间类型(data/time)
display_hours boolean No true 是否显示小时
display_minutes boolean No true 是否显示分钟
display_seconds boolean No true 是否显示秒
display_meridian boolean No true 是否显示正午界(上午/下午)
use_24_hours boolean No true 是否使用24小时制
minute_interval integer No 1 分钟下拉列表的间隔
second_interval integer No 1 秒钟下拉列表的间隔
field_array string No n/a 输出值到该值指定的数组
all_extra string No null 如果给定,为标签添加附加属性
hour_extra string No null 如果给定,为标签添加附加属性
minute_extra string No null 如果给定,为标签添加附加属性
second_extra string No null 如果给定,为标签添加附加属性
meridian_extra string No null 如果给定,为标签添加附加属性

 

html_select_time is a custom function that creates time dropdowns for you. It can display any or all of hour, minute, second and meridian.

自定义函数 html_select_time 用于创建时间下拉菜单. 它可以显示任意时分秒.

Example 8-12. html_select_time
例 8-12. html_select_time 函数演示

 

 

{html_select_time use_24_hours=true}


OUTPUT:

<select name="Time_Hour">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09" selected>09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
</select>
<select name="Time_Minute">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20" selected>20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Second">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23" selected>23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Meridian">
<option value="am" selected>AM</option>
<option value="pm">PM</option>
</select>

【转】Bitcoin P2P 货币:有史以来最危险的项目

Bitcoin(比特币) 是一种开源的 P2P 虚拟货币,无法跟踪,牢不可破。有人用它贩卖毒品,有人用它支持自己喜欢的内容,还有人用它来玩儿扑克。

这种货币可以影响政府,搅动经济,提供无法控制的全球走私交易。

美国互联网创业者和博客作者 Jason Calacanis 和 他的 LAUNCH 团队对 Bitcoin进行了调研,以下是调查结果。

图:bitcoin在Google 趋势中的走势

经过一个月的调查,LAUNCH 团队得出一下结论:

1. Bitcoin 的技术非常靠谱。
2. Bitcoin 无法停止,除非终端用户提出起诉。
3. Bitcoin 是有史以来最危险的开源项目。
4. Bitcoin 可能是自互联网以来最危险的科技项目。
5. Bitcoin 是科技自由主义者的一次政治声明。
6. Bitcoins 将改变世界,除非政府通过严厉的惩罚措施制止他们。

Bitcoin是什么?

Bitcoin是一种以文件形式存在的虚拟货币,存储在你的电脑上。使用者可以通过三种方法交换货币:

1. 通过在bitcoin.org直接下载的P2P软件
2. 通过 ClearCoin 等代管服务
3. 通过 bitcoin 货币交易中心

每用户可以把该货币转给他人,方法是在上次交易和下一位所有者的公开密钥上进行哈希(hash)签名,把相关信息添加在货币的尾部。接收方可以通过验证签名来验证所有权。

这种货币的好处:

a) 不会被冻结。
b) 无法跟踪。
c) 不用纳税。
d) 交易成本极低。

这里有一个简单的视频介绍:http://jc.is/jlcte0

Bitcoin的来历

Bitcoin通过复杂算法生成。到2140年之前总额只能达到2100万。你的桌面Bitcoin软件也可以制作Bitcoin,但以目前需要投入的电量和时间计算,制作成本高于其面值(笔记本需要5年时间才能制作一枚,目前交易价格为6.70美元)。

Bitcoins 的发明者

一个名叫 Satoshi Nakamoto 的人首先在《Bitcoin:一种点对点电子现金系统(Bitcoin: A Peer-to-Peer Electronic Cash System)》中提到了Bitcoin。此人已经离开该项目,目前该项目技术主管是 Gavin Andresen。

如何买卖Bitcoin?

目前 Paypal 和信用卡公司都宣布销售Bitcoin非法。理由很简单:PayPal 服务条款禁止“货币交易”。

CoinPal已经冻结了Bitcoin的交易。

这种货币越来越难以搞到,以至于你可以在现实生活中用它交换其他服务。比如有人表示他为别人编程,收到的报酬是Bitcoin。

现实生活中的Bitcoin

明年你就能在拉斯维加斯的赌场里看到人们用现金和赌币来购买和销售 Bitcoin 了。

地下毒品和 Bitcoin

上个月人们曾热议一个叫做 SilkRoadMarket 的毒品交易市场,里面有各种毒品。另外,既然 Bitcoin 无法跟踪,所以你买东西不用担心被抓。

预测

Launch相信政府在未来12-18个月内封杀 Bitcoin。此外,Bitcoin将会升值,很多人会使蜂拥而至,开始使用Bitcoin。

目前共有600万 Bitcoin,每个价值 6.70美元,总计 4000万美元。囤积行为会导致Bitcoin进一步升值。

会出现大量和 Bitcoin 相关的不测,比如你的笔记本崩溃了,而你没有备份你的 Bitcoin,或者你的笔记本被到了,或者存有 Bitcoin 的U盘不见了,那么你只能说破财免灾了。

99designs,eLance 和 oDesk 等网站开始接受 Bitcoin 支付,如果他们不接受,就会面临来自其他人的竞争。

底线:整个世界都将被 Bitcoin 颠覆,除非政府介入通过起诉的形式对其进行封杀。

这事儿会越来越有意思。走着瞧吧,各位。

via LAUNCH

转载请注明:文章来自36氪

通俗易懂讲解什么是 Bitcoin 虚拟货币

最近在Twitter上一个叫做“Bitcoin”的单词讨论的很热烈,我找了相关的资料,大致明白了Bitcoin是什么,全文转载如下:

Bitcoin 是最近热议的话题,不过中文资料非常少,这篇文章不会评论 Bitcoin 的意义和利弊,只希望以尽简单的方式介绍什么是 Bitcoin,让更多人了解到这个有趣且了不起的创意。同时我会不断修正或补充内容,尽量做到当有人问到“什么是Bitcoin”时,只需把这篇文章的 网址发给他就可以了。@ivarptr
初步认识 Bitcoin
    Bitcoin (为了便于书写和理解,下面如果是表示 “Bitcoin币”意思的地方我称呼其为“贝壳币”,取粤语相近的音译)是一种网络虚拟货币,跟腾讯公司的Q币类似,你可以使用贝壳币购买一些虚拟的物 品,比如网络游戏当中的衣服、帽子、装备等,只要有人接受,你也可以使用贝壳币购买现实生活当中的物品。跟Q币不同的是,贝壳币的发行、流通和管理权不属 于某一个人、组织、公司或者国家,或者换一句话说:它是平等地属于参与其中的每一个人。每个人只要有一台能接入互联网的计算机,然后通过运行一个自由的开 放源代码的软件都可以参与其中,所有参与的人当中不存在所谓的管理员、中心节点或者特权人员,是一个平等的点对点(P2P)的系统,统称 Bitcoin 系统。

为什么有人愿意使用贝壳币?
    Bitcoin 系统目前能保证如下几点:
    1、贝壳币在某一个时间点上总数量是确定的;
    2、贝壳币的数量以缓慢的速度增长,不会突然增加;
    3、贝壳币最终会增长到一个总量,不会无限增长;
    4、以上几个特征是由一个公认的数学公式来提供保证,不需要任何人、组织或国家来提供保证。
    5、贝壳币的流通不需中间机构,转账过程不受干预。
    从上面的特征可以看到贝壳币具有作为一般等价交换物的潜质,某些方面甚至比黄金更为理想。刚开始的时候贝壳币可能用于交换低价值的虚拟物品,后来有人为了 得到虚拟物品而在网上拍卖自己的现实物品(比如旧数码产品、球鞋等)以收取贝壳币,而另外一些人为了购买这些现实物品但手头上没有贝壳币,可能会使用现实 中的货币去兑换贝壳币,如此一来,贝壳币就开始流通,于是就开始拥有了“价值”。

贝壳币如何获得?
    只要有一台能接入互联网的计算机,从这个网站(http://www.bitcoin.org/) 下载 Bitcoin 程序,首次运行会产生一个数字账号,然后保持运行,这个程序就会一直不停地计算上面提到的数学公式所产生的一系列“数学题”,当你成功地计算完一道数学题 之后,就有可能得到一定数量的贝壳币,但并不是每次计算都一定能获得贝壳币,还要看你的计算是否首个完成以及对整个系统的贡献程度,这个“不劳动无收获, 一分耕耘并不一定有一分收获”的过程非常像挖金矿,所以挂机运行 Bitcoin 程序的过程被称为“挖金矿(mining)”,而 Bitcoin 程序自然被称为“挖矿机”或者“矿工(miner)”。
    挖金矿是人人机会平等的,然而收获却不是平均的,性能越好的计算机“解决数学问题”的速度越快,就越有机会获得贝壳币。那么什么样的计算机速度最快呢?超 级计算机?不是,是你用来玩3D游戏的显卡,现在中高档的显卡都带有GPU具有运算功能,一块高档显卡顶得上200台主流CPU的速度(具体原理这里有说 明:https://en.bitcoin.it/wiki/Why_a_GPU_mines_faster_than_a_CPU,各种显卡性能对比列表 https://en.bitcoin.it/wiki/Mining_hardware_comparison),所以参与挖金矿的人还得有一张中高档的显卡。
    另外随着参与的人数不断增加,其中有不少程序员还进行各种衍生品的开发,于是各种各样的矿工程序随之出现,比如有使用纯JavaScript实现的挖金矿程序(比如 http://bitp.it/),你可以把它挂在博客里,当读者们阅读你的文章时,他们的计算机会不知不觉地帮你挖金矿。

获取贝壳币的成本
    Bitcoin 系统会控制贝壳币的增长速度,现在整个系统大概保持每10分钟增加50个贝壳币的增长速度,这个速度并不会随着参与人数的增加而加快。也就是说,假设整个 Bitcoin 系统有100个人参与,那么平均每人一小时能获得 3 个贝壳币,同理假如有 10000 人参与,平均每人一小时只能获取 0.03 个贝壳币。而目前的情况是,使用普通计算机即使挖了一年时间,可能连1个贝壳币都获取不了(因为参与的人数很多),考虑到所消耗电能的成本,挂机挖矿行为 实在不值得推广。当迫切需要贝壳币时可能更多人宁愿使用现实货币去兑换而不会亲自去挖。
    更不幸的是获取贝壳币的成本将会越来越高,因为 Bitcoin 的数学公式确定每21万贝壳币增长速度就会减半,到 2140 年左右基本上就不增长,到时贝壳币总数量大概维持在  2000 万左右。目前总量为 600 万,见 http://blockexplorer.com/q/totalbc ,估计大部分都集中在创始者以及最先加入游戏的一批人手中。
    因为获取贝壳币的难度高,一些“矿场(mining pool)”网站就产生了,矿场的作用是集中零散的个人力量一起挖金矿,以增加获取贝壳币的机会。共同获得的贝壳币会根据其中每个人的贡献量平摊,一般矿场还会收取2%左右的佣金用于维持自身的运作。


贝壳币能买什么?
    这里有一个接受贝壳币支付的网站商店列表:https://en.bitcoin.it/wiki/Trade,可见现在已经可以用它来购买音乐、书籍、软件、服务等等,列表当中还有一些货币兑换网站,从中可以了解贝壳币跟美元等现实货币的汇率以及汇率走势等。

一些有趣的猜想
    因为贝壳币的流通不受控制,所以很明显各个国家不会让它进入市场,甚至会屏蔽它不让百姓访问,不过也正因为它不受控制的特点而可能得以长期在民间低调流 通;坚持天天挂机挖金矿的朋友可能会因为高昂的电费而最终放弃游戏;也有可能在若干年后,随着贝壳币的获取成本越来越高以及部分人囤积导致它升值几倍,某 些精英或者国家料到这种情况现在就已经开始投资挖矿;当然也有可能过了几年大家的热情消退了,没有人玩了,最终贝壳币变成一场闹剧。究竟将来如何没人能意 料得到,只知道越多人了解和参与将会使情况变得更加有趣。
    无论贝壳币前途如何,无可否认它是一个非常有趣并且了不起的创意,而且最起码它能带给人一些思考和谈资。

本文是基于 Bitcoin 官方英文文档以及个人粗略理解所得,可能其中有错误的地方,欢迎通过微博(@ivarptr)将指出错误。同时欢迎转载,转载本文时请保留本文链接地址:http://ivarptr.blogspot.com/2011/05/bitcoin.html
谢谢!

参考资料:
[1] Bitcoin 官方FAQ https://en.bitcoin.it/wiki/FAQ
[2] 云风博客:Bitcoin 的基本原理 http://blog.codingnow.com/2011/05/bitcoin.html
[3] 36氪:Bitcoin P2P 货币,有史以来最危险的项目:http://www.36kr.com/dangerous-bitcoin-p2p-currency/

其他中文资料汇集(仍添加中):
[1] 此物一出天下反:话说BitCoin http://www.lixiaolai.com/index.php/archives/10589.html (这个网站挂了javascript的挖矿机,可以参考一下)

【转】WordPress 向来自其他域的访客致欢迎词

全文转载自:http://wange.im/wordpress-say-hello-to-vistors.html

WordPress 上对来自其他域的访客显示欢迎词,这个效果我之前写过一篇类似的,《WordPress 高亮显示关键词及欢迎提示》, 之前这一篇是对特定访客显示欢迎词,也就是只对来自搜索引擎的访客显示欢迎提示词,而且对常用的搜索引擎还需要我手工添加进数组,并不是很全面,对百度、 Google、有道、必应这些之外的搜索引擎就无效了。而今天介绍的这个方法就很全面,不仅可以涵盖所有的搜索引擎,就连其他任何不加密的网站也都适用!

不信?可以先做个测试。如果我有在贵站留过言,或者你很给面子地给我做了一个友链的小盆友们,你们可以通过自己网站上任何一个可以通向本站的链接访问本站。进来之后,你看到了啥?右侧的那个浮动层瞧见没?就是这个了。再比如说通过我的 Twitter(@wange1228)的主页,上面有我博客的链接,点击进入我的网站后,如下图:

Twitter上的博客链接

从twitter来的欢迎词

现在应该明白我讲的是啥效果了吧,在道明方法之前,首先要感谢 illacrimo-plus 主题的作者,虽然我也不知道是谁。本文的方法就是从这个主题上扒下来的,方法如下:

1、把以下代码复制到 WordPress 主题的 functions.php 中:

function show_refer_in(){
$refer_info=$_SERVER['HTTP_REFERER'];
$ban_list=array($_SERVER["HTTP_HOST"]);
for($ii=0;$ii<count($ban_list);$ii++){
if(strpos($refer_info,$ban_list[$ii])){
return;
}
}
if($refer_info){
preg_match("/^(http:\/\/)?([^\/]+)/i",
$refer_info, $matches);
$host = $matches[2];
echo "<div id=\"hellobaby\">欢迎来自 ".$host." 的朋友!<br />推荐您 <b><a href=\"http://feed.wange.im\" target=\"_blank\">点击这里</a></b> 订阅我的博客 o(∩_∩)o<div class=\"closebox\"><a href=\"javascript:void(0)\" onclick=\"$('#hellobaby').slideUp('slow');$('.closebox').css('display','none');\" title=\"关闭\">×</a></div></div>";
}
}

2、在主题文件的任何部位调用以下函数,我建议是放在 footer.php 中:

<?php show_refer_in();?>

3、接下来样式部分仅供参考:

#hellobaby {
background:#000000;
border:1px solid #B3B3B3;
color:#FFFFFF;
font-size:14px;
opacity:0.7;
filter:alpha(opacity=70);
padding:10px;
position:absolute;
right:0;
top:250px;
}

基本完成了,本文提到的文法和 WordPress 高亮显示关键词及欢迎提示中的提示词部分有点重复,不过高亮显示关键词还是很有用的,所以两者我都用上了,感觉还不错,你说呢?

Update:经热烈讨论,同学们普遍反映,如果每次跳转过来都会有这个欢迎词,就会显得有些烦人,有些碍眼。感谢小邪,提供了记住 Cookies 的方法,8过很遗憾,居然在我这里测试会报错。所以我用了另一种折衷的办法,加了个判断,对所有留过言的朋友不显示该欢迎词,其实也是借用了 Cookies 的概念,现在要看这个效果的小盆友们,就要先清除浏览器缓存才行咯。感谢,也欢迎大家提出更多宝贵意见~

转载08年的一篇文章-满大街跑的都是月薪上万的小程序员

我住在海淀区,这里满大街跑的是月薪上万的小程序员儿,还有痛骂计算机专业无美女的项目经理,他们大脑袋、厚眼镜、因熬夜而布满血丝的眼睛,因不见阳光而 酷似吸血鬼的脸,穿一个星期不洗的T-SHIRT,很有很有味道的,他们供楼不供车,他们翻开报纸只盯住北边的楼盘,倒不是因为关心奥运村,实在是想离公 司近一些。我,衷心地喜欢着这个区。

  有女友去国贸那边应聘工作回来,一脸幸福状地向我描述,地铁站里全是帅哥,地面上更是临风玉树站成了森林,让她的小心灵经受了一次美的洗礼,她 晕乎乎地回来了,对那些西装革履、散发名贵男用香水味道、气宇轩昂的白领男人们再三再四地概叹:“F4那算个啥,肚里没货,只知卖相,看看人家,啊,那才 叫自信来源于知识,气质来源于财富……” 我打断她语无伦次的胡说八道,问她工作有戏没戏,她说,“凭我的英语水平,能没戏吗?!”

  过几日,女友去上班。再过几日,女友辞职。我问为个啥,她说,她是属于海淀区的好市民,与朝阳区那个高级白领集居地格格不入。

继续阅读

分布式版本控制系统 Mercurial

Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。相对于传统的版本控制,具有如下优点:

  • 更轻松的管理。
    传统的版本控制系统使用集中式的 repository,一些和 repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型,Mercurial 中就没有这样的困扰,每个用户管理自己的 repository,管理员只需协调同步这些repository。
  • 更健壮的系统。
    分布式系统比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。
  • 对网络的依赖性更低。
    由于同步可以放在任意时刻进行,Mercurial 甚至可以离线进行管理,只需在有网络连接时同步。

常用的上传下载协议以及Java实现

上传协议

1.HTTP协议

HTTP协议即Hypertext Transfer Protocol的缩写,这种协议是网上最常见的传输协议。

1.1 用Java实现通过HTTP协议来上传文件

方式一:使用Apache 开源上传软件包 fileupload,相关介绍及下载地址是http://commons.apache.org/fileupload/

核心示例代码:

File uploadPath = new File("D:\\temp");//上传文件目录
    if (!uploadPath.exists()) {
       uploadPath.mkdirs();
    }
    // 临时文件目录
    File tempPathFile = new File("d:\\temp\\buffer\\");
    if (!tempPathFile.exists()) {
       tempPathFile.mkdirs();
    }
    try {
       // Create a factory for disk-based file items
       DiskFileItemFactory factory = new DiskFileItemFactory();

       // Set factory constraints
       factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
       factory.setRepository(tempPathFile);//设置缓冲区目录

       // Create a new file upload handler
       ServletFileUpload upload = new ServletFileUpload(factory);

       // Set overall request size constraint
       upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB

       List<FileItem> items = upload.parseRequest(request);//得到所有的文件
       Iterator<FileItem> i = items.iterator();
       while (i.hasNext()) {
           FileItem fi = (FileItem) i.next();
           String fileName = fi.getName();
           if (fileName != null) {
       File fullFile = new File(fi.getName());
       File savedFile = new File(uploadPath, fullFile
              .getName());
       fi.write(savedFile);
           }
       }
       out.print("upload succeed");
    } catch (Exception e) {
       e.printStackTrace();
    }

方式二:使用jspSmartUpload组件

继续阅读

程序出错后,程序员给测试人员的20条高频回复

编者按:程序员和软件测试员之间的关系无须多言。这些经典回复是国外程序员总
结分享的,“全球通用”。

  20. "That’s weird…" 很奇怪……
  19. "It’s never done that before." 以前没这样过的。
  18. "It worked yesterday." 昨天还好好的。
  17. "How is that possible?" 那怎么可能?(怎么会出问题?)
  16. "It must be a hardware problem." 这一定是硬件问题。

  15. "What did you type in wrong to get it to crash?" 你输入什么东西后才崩
溃的?
  14. "There is something funky in your data." 你的数据有问题。
  13. "I haven’t touched that module in weeks!" 我好几个礼拜没动那个程序了

  12. "You must have the wrong version." 你一定在用错误的版本。
  11. "It’s just some unlucky coincidence." 这只是凑巧。

  10. "I can’t test everything!" 我无法测试所有东西。(我的机器环境下,无
法测试所有的可能情况。)

  09. "THIS can’t be the source of THAT." “这”不可能是问题的原因。
  08. "It works, but it hasn’t been tested." 程序能用,不过还没有测试。
  07. "Somebody must have changed my code." 一定有人改了我的代码。
  06. "Did you check for a virus on your system?" 你的电脑扫描病毒了么?

  05. "Even though it doesn’t work, how does it feel? 即便程序不行了,(你
觉得)程序写得如何?
  04. "You can’t use that version on your system." 你不能在你系统上使用那
个版本的程序。(程序版本和系统有冲突。)
  03. "Why do you want to do it that way?" 你怎么会想着那样操作啊?
  02. "Where were you when the program blew up?" 程序崩溃时,你在做什么呢?
(做了哪些操作?)

  第1条会是什么?猜猜看吧!

  01. "It works on my machine" 在我机器上好好的!!!(怎么在你那就出问题了
呢!!!)

960 Grid System 基本原理及使用方法

960-网格系统

关于CSS框架其实一直是一个比较热门且很有争议的话题,的确,国内的一些前端er们越来越关注CSS框架,并都开始尝试使用,觉得CSS框架能够 节省更多的开发时间,显著提高工作效率。当然,还有很多人持相反意见,认为CSS并没有这么高级以至于要涉及到框架!我记得在cnBeta上曾经有位程序 员讽刺道:”这年头,连CSS都有框架了?!”。今天暴风彬彬并不是要向大家介绍什么是CSS框架,也不会介绍各种CSS框架的优缺点。只是要讲解一下目 前在国外很热门的一个框架,严格讲是网格系统,那就是960 Grid System。通过这篇教程你会知道使用960框架之后,你的开发工作会更快的开展。
960 Grid System 基本原理

首先,你需要学习关于”如何让框架工作”。你可以通过自己的尝试来学习,不过我仍然会在这里为大家进行讲解,那就开始吧。

不要编辑960.css

先说一点需要注意的:不要编辑960.css文件,如果你修改了它,那么你今后将无法更新这个框架。

读取网格

在我们使用外部文件中的CSS代码之前,首先要在我们的HTML文件中调用它们。像这样调用:

<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/reset.css” />
<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/960.css” />
<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/960/text.css” />

当我们调用好它们以后,我们要调用自己的CSS文件了。例如,你也许会将你的CSS文件命名为style.css或site.css或者其它什么的。这样调用它:

<link rel=”stylesheet” type=”text/css” media=”all” href=”path/to/style.css” />

Containers(容器)

在960框架中,你可以选择两种类名为.container_12 和 .container_16的容器。这两种容器都是960px的宽度(这就是为什么叫做960 grid),但他们的不同之处是它们包含不同数量的列。顾名思义,.container_12的容器被分为12列,而 .container_16被分为16列。这两种960px宽的容器都是水平居中的。

Grids (网格)/ Columns(列)

你可以选择很多种不同的列宽组合,不过在这两种容器中是有所不同的。你可以通过打开960.css来了解这些宽度,但这对于设计一个网站并没有什么必要。在这里暴风彬彬将一个很有用的技巧让你使用框架更加容易。

例如:如果你想在你的容器中仅使用两列(分别是主内容区/侧边栏),你可以这样做:

<div class=”container_12″>
<div class=”grid_4″>sidebar</div>
<div class=”grid_8″>main content</div>
</div>

看到上面的代码你也许已经明白,不过我还是要讲一下。也就是说你在container_12这个容器中使用了grid_4和grid_8两列,4+8恰好等于12!明白了吗?使用网格系统的好处之一就是你不用去计算没列的宽度到底是多少,省去了很多运算。

下面让我们看看如何编写四列布局:

<div class=”container_12″>
<div class=”grid_2″>sidebar</div>
<div class=”grid_6″>main content</div>
<div class=”grid_2″>photo’s</div>
<div class=”grid_2″>advertisement</div>
</div>

正如你看到的,这个系统工作得很好。如果你尝试使用你的浏览器读取他的话,你会发现有一些不对劲的地方。不过不要紧,那正是我们下一个话题要讨论的。

Margins

默认情况下,每列之间都会存在一些margin。每个grid_(这里插入数值)类都有10px的左margin和右margin。也就是说两列之间的margin值是20px。

20px的margin能让布局保持应有的留白并看上去更平滑,这也是我喜欢960 grid System的原因之一。

在上面的例子中,我们将它使用浏览器读取时出现了一些问题,现在我们来修复它。

问题在于每个列都包含左margin和右margin,但是最左面的列不应该有左margin,最右面的列不应该有右margin。(够罗嗦!)下面是解决方法:

<div class=”container_12″>
<div class=”grid_2 alpha>sidebar</div>
<div class=”grid_6″>main content</div>
<div class=”grid_2″>photo’s</div>
<div class=”grid_2 omega>advertisement</div>
</div>

你仅需添加alpha类来去除左margin,添加omega类去除右margin。好了,现在我们的布局已经可以完美在浏览器中对齐了。(是的,包括IE6)

Styling(添加样式)

事实上,你已经掌握了如何使用960框架创建基本的网格布局了。不过你也许还想为自己的布局添加一些样式。

<div class=”container_12″>
<div id=”sidebar” class=”grid_2 alpha>sidebar</div>
<div id=”content” class=”grid_6″>main content</div>
<div id=”photos” class=”grid_2″>photo’s</div>
<div id=”advertisements” class=”grid_2 omega>advertisement</div>
</div>

由于CSS使用优先级的形式来觉得如何解释样式,而id要比class的优先级高。这样我们就可以在我们的独立CSS文件中以id选择符创建个性化的样式了。如果凑巧有的样式属性与960相同但值又不同,浏览器会优先选择你的CSS文件中的样式。当然,如果您感兴趣,也可以看看上面的实例添加样式后的实际效果。

我们做到了

这是这样!你已经掌握的如何使用960网格系统来创建兼容所有浏览器的布局。当你完全掌握熟练960系统之后,你会发现它为你节省了很多很多编写CSS的时间。


转自:http://blog.bingo929.com/960-css-framework-learn-the-basics.html