Apache中开启gzip压缩两种方法

归类于apache 参与评论

在Apache中开启gzip压缩方法为:
方法1.

在httpd.conf或者博客根目录的.htaccess文件中加入如下规则(Apache服务器需要支持mod_deflate)

<ifmodule mod_deflate.c>
AddOutputFilter DEFLATE html xml php js css
</ifmodule>

 

方法2.

<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/xml application/x-httpd-php application/x-javascript text/css
</ifmodule>

经过查看,主机的Apache支持mod_deflate(使用httpd -M查看是否有mod_deflate模块,或者查看你的httpd.conf文件中LoadModules有没有这个mod_deflate模块开启),直接复制粘贴以上的代码到httpd.conf文件的结尾,重新启动apache服务就可以实现gzip压缩了。

 

念情草狼 建议第一种方法,比较灵活!

,

apache开启gzip压缩 Linux

归类于Linux 参与评论

oadModule deflate_module modules/mod_deflate.so

 

<IfModule mod_deflate.c>

SetOutputFilter DEFLATE

DeflateCompressionLevel 9

AddOutputFilterByType DEFLATE text/html text/css image/gif image/jpeg image/png application/x-javascript

AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript

AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp

BrowserMatch ^Mozilla/4 gzip-only-text/html

BrowserMatch ^Mozilla/4.0[678] no-gzip

BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

</IfModule>

, , ,

对宝宝重要的头三年 你都做对了吗

归类于美文收集 参与评论

一个巧合的机会下,看到了一位朋友的一些收集。觉得非常有启发性。特意跟大家分享下。
以下是复制了一个早教工作者分享的关于现代父母早期教育中出现的问题和多数父母的误区:其中有一部分的错误我也在犯,庆幸的是自己及早的发现了这篇文章,正如作者问自己的,作为初为人母的我也更关心的是;“在孩子人生最重要的头三年,我做对了吗?在我的引导下,她能保持强烈的探索欲望吗,她的专注力有没有被破坏?她的学习能力强吗?遇到困难她是退缩不前还是自己找到解决问题的办法?她能始终保持自信、健康的心灵吗?” 我也希望把自己的孩子培养成具有坚强的意志、具有独立解决问题的能力,拥有良好的人际关系,具有良好的学习习惯,自信大方、善良勇敢、内心快乐,有爱心的人。事实上在孩子人生的头三年对他是至关重要的,无论是在免疫系统的发展完善方面、还是在人格的健全发展、智商和情商的全面发展方面,毫不夸张的说每一天对于宝宝来说都是很重要。文章有点长,有宝宝的爸爸妈妈可要耐心看文。

继续阅读

,

二种IE6显示PNG透明图片背景CSS方法

归类于CSS+HTML | 网站技术 参与评论

第一种,只通过CSS让IE6显示PNG透明背景:
1. 使用CSS滤镜写法,公式如下:

1
filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled='bEnabled' , sizingMethod='sSize' , src='sURL' )

<– 其中变量信息 –>
enabled= : true :滤镜激活。 false :滤镜被禁止。

sizingMethod= : crop :剪切图片以适应对象尺寸。 [即不平铺]
image : 默认值。增大或减小对象的尺寸边界以适应图片的尺寸。 [一般不采用]
scale : 缩放图片以适应对象的尺寸边界。 [即平铺]

src :使用绝对或相对 url 地址指定背景图像。假如忽略此参数,滤镜将不会作用。
2. 使用例子,兼容IE6、FF、OP等CSS写法:

1
2
3
4
5
6
7
8
9
10
/* 为保证PNG图片位置正确,使用绝对路径 */
#DIVname {
width: 300px;
height: 99px;
background: url('images/top.png') no-repeat top;
}
* html #DIVname {
background: none;
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', sizingMethod='corp', src='http://www.wdsxp.com/blog/template/flower/images/top.png');
}
1
2
3
4
5
6
7
8
/* 以下是简易写法 ,运用IE6的*独立识别特性 */
#DIVname {
width: 300px;
height: 99px;
background: url('images/top.png') no-repeat top;
*background: none;
*filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', sizingMethod='corp', src='template/flower/images/top.png');
}

3. 注意事项,使用以上CSS滤镜的DIV容器里的链接失效,解决方法是在a标签上面给予属性【 position:relative;】
==============以上效果在IE6不会出现短暂的灰色背景==================

 

第二种,使用 iepngfix 滤镜,此方法包含 iepngfix.htc、blank.gif、CSS :
1. 将 iepngfix.htc 和 blank.gif 2个文件上传到相应目录
2. 通过CSS编写PNG透明,以下写法兼容IE6、IE7、IE8、FF、OP :

1
2
3
4
5
6
7
/* 背景定义下加入 iepngfix.htc 链接 */
#DIVname {
width: 300px;
height: 99px;
background: url('images/top.png') no-repeat top;
behavior: url("template/flower/js/iepngfix.htc");
}

3. 注意事项,以上文件存放目录为:CSS–根目录,iepngfix.htc–js文件夹,blank.gif–images文件夹
点击这里下载文件 iepngfix

 

 

 

, ,

css鼠标样式

归类于CSS+HTML | 网站技术 参与评论

用css控制鼠标样式的语法如下:
<span style=”cursor:*”>文本或其它页面元素</span>
把 * 换成如下15个效果的一种:

下面是对这15种效果的解释。移动鼠标到解释上面,看看你的鼠标起了什么变化吧!
hand是手型
pointer也是手型,这里推荐使用这种,因为这可以在多种浏览器下使用。
crosshair是十字型
text是移动到文本上的那种效果
wait是等待的那种效果
default是默认效果
help是问号
e-resize是向右的箭头
ne-resize是向右上的箭头
n-resize是向上的箭头
nw-resize是向左上的箭头
w-resize是向左的箭头
sw-resize是左下的箭头
s-resize是向下的箭头
se-resize是向右下的箭头
auto是由系统自动给出效果

, , ,

Pphnow修改htdocs位置的方法

归类于随手记录 参与评论

1、找到“..\PHPnow-1.5.4\Apache-20\conf”里面的“httpd.conf”搜索“htdocs”修改为你要存放的路径(需要填写绝对路径,如:”E:/web/htdocs”);
2、找到 “..\PHPnow-1.5.4\Apache-20\conf\extra”里面的“httpd-vhosts.conf”搜索“htdocs”修改为你要存放的路径(需要填写绝对路径,如:E:/web/htdocs);

,

如何编写优质的需求文档

归类于网站运营 | 美文收集 参与评论

编写需求文档,在嵌入式开发领域是非常普遍的。需求文档被用来定义开发任务,协调大规模的研发计划。对于最终的产品,需求文档扮演着开发者行为和消费者行为之间沟通纽带的角色。当需求文档书写正确的时候,便可以发挥巨大的作用。然而,如果你在嵌入式开发领域工作的时间足够长,你就会很快发现,这个领域里不合格的需求文档实在是太多了。当你尝试对这些不合格的文档进行修复时,你又会很快发现,书写正确的需求文档绝非易事。在这里,我们提出一些建议,希望能将书写正确需求文档这件事情变得清晰一些。

从较高的层次来看,书写需求文档的目的就是要提供对所需行为的有效描述。该所需行为可用一个黑盒系统描述,并需要注意以下细节:

• 工程师可以根据系统所说进行实现

• 测试人员,在不与开发人员沟通的前提下,可以利用满足硬件要求的设备验证需求。

• 最终产生的成果满足终端用户的要求。


黑盒测试书写优质的需求文档: 

最基本的原则是:需求文档应当尽量简洁,用最易懂的描述来约束系统的预期行为。如果你遵循这个原则,剩下的那些重要因素(可测试性、避免过度设计等等)都将变得顺理成章。

列举一下更详细的规则,通常会更有帮助。下面是书写优质需求文档需要遵循的步骤:

1. 定义系统的边界。这也是黑盒系统所必要的。

2. 定义输入和输出。这也应当是你看待内部系统的唯一方式。

3. 用最易懂的方式描述系统的预期行为

4. 除了输入和输出之外,你的需求是不是还涉及了系统的其他部分?如果是,那么你的需求就设计过度了。重构需求,让它变得精简。

5. 你的需求是不是过于模棱两可?加入更多的限定规范。注意:有些模棱两可的描述并不是坏事,假设描述所包含的所有情况均可被接受,且测试的时候不需要附加的信息加以说明,那么就没关系。你不需要(也不应该)把系统的行为限制得过头。

6. 你的需求是否可测试?(这里指的是黑盒测试)如果不是,你最好返回到第4步。如果这种返工发生很多次,那就说明你的黑盒无法正确描述系统,或者你的测试工具不够优秀。无论是哪种情况,不可测试的需求文档几乎就是一文不值的。

7. 你的需求文档通俗易懂么?如果你的需求文档非常难以读懂,那就说明你写得不好,只能给那些照着你的需求负责实施的人带来无尽的痛苦。如果是这样,回到第3步。

8. 你是不是真的做到了第4步?你确认么?再检查一下。

例子:下面的例子,让我们描述一个自制的嵌入式设备的需求,这个设备能从弯曲传感器上读取弯曲的频率,并根据不同的频率值让一个LED闪烁。 显然,我们已经完成了步骤2和步骤3了!

• 输入:从弯曲传感器读取数据。

• 输出:LED。

但是我们跳过了步骤1:

• 在这个例子里,我们将把黑盒画到设备的微处理器上。

让我们继续往下进行,

第四步:除了输入和输出以外,我们是否还涉及了其他的系统边界?

• 微处理器并不关心从弯曲传感器读取什么样的数据,从处理器的角度来看,仅需要做的是测量ADC脚的电压而已。

• LED仅由数字输出脚控制。
下面,让我们来修正这个问题:

第0版本的需求:

1. 该设备应当根据ADC脚的不同频率的电压,来切换数字输出端的状态。

第五步: 需求写模棱两可么?

恩,我们的描述太模棱两可了.输出端切换的速度要多快? 跟电压的关系如何? 输入电压的范围是多少? 让我们加一些更细节的描述吧:
版本0.1
1. 输出端应当由一个自由活动的定时器进行控制

2. 自由运行定时器的频率最高不得高于每秒10次,不得低于每秒1次.

3. 自由运行定时器的触发频率应当在最高和最低值之间呈线性变化,并与ADC端的输入电压成正比.

4. ADC端的输入电压应当每100毫秒读取一次

5. 当ADC端的输入电压端被读入时,控制自由运行定时器周期时间的注册值也应当被更新.

6. ADC输入端的电压有效范围应当被控制在0到1伏之间.

第六步: 你的需求是可测试的么?

• 首先,自由运行的定时器在这里不需要提及. 因为对它基本上无法进行黑盒测试,它既不是输入也不是输出,而且跟这两者也没有什么联系。

让我们用“数字输出端变化的频率应控制在每秒10次和每秒1次之间”来代替自由运 行定时器的测试标准。

• 对于上述的第四条需求,可能需要一些小修改才能作为测试标准。让我们用“ADC端的输入电压应当保证在每100毫秒内至少被读取一次”来加以描述,这样的描述能让我们预期的测试行为显得更加通俗易懂。

• 需求的第五条也需要一些小修改。我们如何才能检测电压的输出范围是在0到1伏之间呢? 总不能给个2伏的电压,然后看看元器件有没有被烧毁吧?

那么,说“检验系统在ADC端输入电压为1到2伏之间的时候,工作是否正常”,这样就检验就容易多了。需求描述应当是“正面”的,应当描述设备“应该”的行为,而不是设备“不应该”的行为。否则的话,测试将会无法进行。

 

版本0.2

1. 数字输出端的切换频率应当控制在每秒10次到每秒1次之间

2. 数字输出端的切换频率应当在最大值和最小值之间呈线性变化,并与ADC端的输入电压成正比

3. ADC端的输入电压应当保证在每100毫秒内至少被读取一次

4. 检验当ADC端的输入电压范围在0到1伏之间的时候,系统工作是否正常

 

第七步:你的需求是否通俗易懂?

相比于我们原来的描述:“根据弯曲传感器的输出不同频率来控制LED闪烁”,我们上面的那些需求描述显得难以阅读和理解。 我发现,让需求文档变得通俗易懂,最简单办法莫过于,把过于细节的东西抽取出来,然后以条目的形式单独定义。

版本1

1. 弯曲传感器应当保证至少在100毫秒内读取一次数据(放到注释单独列出)

2. 切换LED的状态,使其与弯曲传感器的读数保持一致

3.当弯曲传感器的读数为1伏特时,LED状态切换的次数应当保持在平均一秒十次;当传感器的读数为0伏特时,LED的切换次数应保持在一秒1次。

 

定义:

• 弯曲传感器:输入电压位于ADC的X端。安全电压范围为0到1伏特(放到注释单独列出)

• LED状态:数字状态由Y端输出

这样就好多了(尽管还不完美)。这些需求通俗易懂,不涉及到系统内部实现,且易于测试。对于系统行为的限定也仅仅限于需要做什么,点到为止。(例如,对弯曲传感器的采样频率,在实现上也可以更高,只要不产生非预期行为,一切都可以)。

编写需求就仿佛是在大脑中构建软件的过程。因此要重于执行操作。

英文原文:How to write good requirements

前端技术:绝对排序来实现瀑布流的方式

归类于Javascript | 网站技术 参与评论

随着pinterest的走红,瀑布流式的布局被越来越多的网站所使用,这种布局确实有很多好处,图片列表页有很强大的视觉感染力,而且还提高了用户“发现好图”的效率。瀑布流的实现有很多种方式,之前淘宝UED有篇文章详细的介绍过各种方式的优劣。今天我们主要讨论一下绝对排序来实现瀑布流的方式 即 Pinterest 采用的方式。

先上Demo

瀑布流排序 : http://cued.xunlei.com/demos/publ/demo1.html

瀑布流+无限拖 http://cued.xunlei.com/demos/publ/demo2.html

首先说下瀑布流的排序算法,参考demo1,思路非常简单,我们把瀑布流拆成三个部分来看:容器、列、格子

  1.先计算当前屏幕最多能容纳几列瀑布,其值为 “向下取整(屏幕可见区域宽度/(格子宽度+间距))”;

2.为了保证容器的居中,将容器的宽度设置为 列数* (格子宽度+间距) – 间距,这里需要注意的是 当容器的宽度计算出来之后再显示,否则会造成页面宽度的抖动,影响体验。;

3.排序开始,先把前N(N为列数)个格子分别放到每一列中,然后每次寻找高度最小的一列,把格子放进去(left值为列序号*(格子宽度+间距),top值为 列高+间距),并刷新列的高度,遍历所有格子直到所有的格子都被排序。

最后将事件句柄绑定到window.onload和window.onresize上,一个瀑布流布局的页面就出来了。

这样的排序算法看起来很美好,可真正结合异步加载数据应用到页面里还要解决以下几个问题

1.当缩放浏览器窗口时会不断地触发事件,如果每次都响应的话会狂耗性能,需要在缩放动作结束后再执行重排方法。

2.页面滚动到底部请求数据成功之后只对新增的节点重排。

3.如果服务器无法给出图片高度,需要在图片加载完毕之后再进行重排。

第一个问题我是用setTimeout和clearTimeout来解决的,思路是窗口变化之后开始计时,如果窗口还在变换则从新开始计时,窗口不再变化则延时(很短的时间)触发重排事件。暂时只想到这个,这里应该还有更好的方法。

代码如下

var re;

window.onresize = function() {

clearTimeout(re);

re = setTimeout(resize,100);

};

第二个问题在于如果每次有新的数据加载,都要对整个容器内的节点进行重排,非常消耗性能。解决思路:

1.将列保存在全局数组中,每次重排或者新增格子之后更新数组的数据,这样下次执行排序算法的时候可以直接调用。

2.将新增格子保存在数组中作为参数传递给排序算法,仅对新格子进行遍历和操作。

第三个问题是如果服务器无法给出图片尺寸,那么必须在图片完全加载完毕之后才可进行排序(因为高度是实时获取的,图片不全高度有误差),这里没有什么好办法,只能遍历图片,每张图片加载成功后执行一个回调函数,将加载成功的图片数量+1,当加载成功的图片数量等于图片总数的时候执行排序方法。缺点是有一张图片加载不成共就无法看到所有的,真正项目中还是需要在异步加载数据的时候获取图片尺寸。

好了,以上就是在这次瀑布流实现过程中遇到的问题和解决方法,由一开始加载3-4屏就卡死到现在可以无限加载(ff,chrome),深感优化js的必要性和无限性。一点小心得写在这里权当抛砖引玉,大家对瀑布流实现的优化有什么见解欢迎一起交流讨论。

本文链接:http://www.yixieshi.com/ucd/10513.html

, , ,

招聘人才和应聘工作之感想

归类于随手记录 参与评论

经过这些时间招聘人才,之后和他们相处,发现很多其实都是人自身为了生存做的一些掩饰,大部分人在找工作,想以时间和能力换取生存必需品,但是在民营企业工作生存的法则是 能力、合作!

突然想到招聘人才和应聘工作其实很像谈恋爱,应聘者像男孩,招聘者像女孩,应聘者在发现招聘之后,用最好的,最华丽的一面,更有甚者采用各种手段得到招聘者的信赖,这样如期的进到招聘者企业工作,但是招聘者在和应聘者相处一段时间,发现原来应聘者所展描述的才能,合作都是虚幻之词,像女孩和男孩终于是男女朋友,发现这男孩或者这女孩怎么这么多缺点,开始闹分手一样,但是恋爱者之间有爱,有情,可以相互包容,但是企业尤其是中小型企业在花出钱财招到一个以为是人才的应聘者,发现不符合现实之后,肯定也是采取包容,最终发现培养的代价大于重新招聘一个人才之时,合作就会断裂。

本来很坦诚的一个关系,因为各种各自的需要开始使用各种理由来实现自己的想法,但是现实是很现实,在自己未达到某个阶段的时候,仍然需要提高自身能力和合作精神,在自身硬件达到一定水平,之后如果招聘者对于自己的定位底了,你可以继续选择,如果招聘者是真诚的,就应该给于应聘者应有的!但是这个社会(至少中国社会)完全不是这种所谓符合市场规则的游戏方式!

这两者的关系在现今环境中,这种模式会一直进行,所以在招聘者和应聘者都保留试用,两者都在观察看看是否都有当初见面之时,给与对方应有的承诺!合则合作,不合则重新寻找!比男女关系简单很多啊!

按照国际惯例,说句:祝愿世界和平!

高薪招聘IT人才,期待加入….

归类于随手记录 参与评论

招聘信息更新:2012年3月5日 16:52:32 

高级PHP程序员 (7K-10K)

1、三年以上PHP实际项目编程经验,精通PHP与Mysql;熟悉php的面向对象编程;熟悉HTTP协议;
2、拥有良好的代码习惯,要求结构清晰,命名规范,逻辑性强,代码冗余率低;
3、熟悉Linux操作系统,能够独自搭建开发及运行平台;
4、熟悉以下方面的优化技巧:数据负载、程序效率、web环境配置、大并发量应对等;
5、熟悉MYSQL数据库配置、维护、性能优化,具有MySQL索引优化、查询优化和存储优化经验方面的经验;了解MSSQL。

 

PHP程序员(4.5k-7k)

1、一年以上专职PHP+MYSQL实际开发经验。
2、精通PHP函数与类的设计,对新技术有较强的学习能力。
3、熟悉JavaScript、ajax。
网站美工 (3K-5K)

1、一年以上美工设计经验,美术及相关专业毕业,有良好的美术修养和审美观。
2、能独立完成整站页面的美工效果设计,具备门户网站美工设计能力,设计页面大气、美观。
3、具备较强的网页布局和颜色搭配能力,了解网页代码设计规则,能够与网页设计师配合完成的网页设计;

 

提供五险一金、带薪年假、提升空间大
上班地点:东莞(莞城区)
上班时间:40小时/每周
有薪国家法定假日,社会保险。

简历投递:santoliu@vip.qq.com

 

顶部