apache 怎样禁止对某类型文件的web访问
遇到这个问题,可使用subphp来写规则,但是一般这个模块是没有的,另外一种思路是使用mod_rewrite来将此类型跳转到别的页面就可以了。
参见:http://blog.ureshika.com/archives/744.html
Continue reading apache 怎样禁止对某类型文件的web访问
遇到这个问题,可使用subphp来写规则,但是一般这个模块是没有的,另外一种思路是使用mod_rewrite来将此类型跳转到别的页面就可以了。
参见:http://blog.ureshika.com/archives/744.html
Continue reading apache 怎样禁止对某类型文件的web访问
shh管理,免费的有putty:
如何使用Putty远程(SSH)管理Linux VPS
http://www.u-ce.com/topics/lorem-ipsum-dolor-sit-amet-consectetur-adipiscing-elit.html
sftp可用filezilla
还有我常用的xshell和xftp.
Continue reading linux远程管理工具
html5计划上是可以录音和摄像的,见http://www.w3.org/TR/html-media-capture/
但这只是规划,还没有那个浏览器支持这个功能,而且api也可能会有很大改动。
另外google开源了webRTC,这个似乎比上面的api要实在些,起码chrome,firefox和opera是表明要支持的。
Continue reading html5 可以录音录像吗
转自:http://cloud.csdn.net/a/20120214/311806.html
导读:和许多新兴的网站一样,著名的轻博客服务Tumblr在急速发展中面临了系统架构的瓶颈。每天5亿次浏览量,峰值每秒4万次请求,每天3TB新的数据存储,超过1000台服务器,这样的情况下如何保证老系统平稳运行,平稳过渡到新的系统,Tumblr正面临巨大的挑战。近日,HighScalability网站的Todd Hoff采访了该公司的分布式系统工程师Blake Matheny,撰文系统介绍了网站的架构,内容很有价值。我们也非常希望国内的公司和团队多做类似分享,贡献于社区的同时,更能提升自身的江湖地位,对招聘、业务发展都好处多多。欢迎通过@CSDN云计算的微博向我们投稿。
以下为译文的第一部分。第二部分点这里。(括号内小号字为CSDN编辑所注):
Tumblr每月页面浏览量超过150亿次,已经成为火爆的博客社区。用户也许喜欢它的简约、美丽,对用户体验的强烈关注,或是友好而忙碌的沟通方式,总之,它深得人们的喜爱。
每月超过30%的增长当然不可能没有挑战,其中可靠性问题尤为艰巨。每天5亿次浏览量,峰值每秒4万次请求,每天3TB新的数据存储,并运行于超过1000台服务器上,所有这些帮助Tumblr实现巨大的经营规模。
创业公司迈向成功,都要迈过危险的迅速发展期这道门槛。寻找人才,不断改造基础架构,维护旧的架构,同时要面对逐月大增的流量,而且曾经只有4位工程师。这意味着必须艰难地选择应该做什么,不该做什么。这就是Tumblr的状况。好在现在已经有20位工程师了,可以有精力解决问题,并开发一些有意思的解决方案。
Tumblr最开始是非常典型的LAMP应用。目前正在向分布式服务模型演进,该模型基于Scala、HBase、Redis(著名开源K-V存储方案)、Kafka(Apache项目,出自LinkedIn的分布式发布-订阅消息系统)、Finagle(由Twitter开源的容错、协议中立的RPC系统),此外还有一个有趣的基于Cell的架构,用来支持Dashboard(CSDN注:Tumblr富有特色的用户界面,类似于微博的时间轴)。
Tumblr目前的最大问题是如何改造为一个大规模网站。系统架构正在从LAMP演进为最先进的技术组合,同时团队也要从小的创业型发展为全副武装、随时待命的正规开发团队,不断创造出新的功能和基础设施。下面就是Blake Matheny对Tumblr系统架构情况的介绍。
1. 相对其他社交网站而言,Tumblr有其独特的使用模式:
2. Tumblr目前运行在一个托管数据中心中,已在考虑地域上的分布性。
3. Tumblr作为一个平台,由两个组件构成:公共Tumblelogs和Dashboard
Tumblr最开始是托管在Rackspace上的,每个自定义域名的博客都有一个A记录。当2007年Rackspace无法满足其发展速度不得不迁移时,大量的用户都需要同时迁移。所以他们不得不将自定义域名保留在Rackspace,然后再使用HAProxy和Varnish路由到新的数据中心。类似这样的遗留问题很多。
开始的架构演进是典型的LAMP路线:
Dashboard采用了“扩散-收集”方式。当用户访问Dashboard时将显示事件,来自所关注的用户的事件是通过拉然后显示的。这样支撑了6个月。由于数据是按时间排序的,因此sharding模式不太管用。
由于招人和开发速度等原因,改为以JVM为中心。目标是将一切从PHP应用改为服务,使应用变成请求鉴别、呈现等诸多服务之上的薄层。
这其中,非常重要的是选用了Scala和Finagle。
之所以没有选择Node.js,是因为以JVM为基础更容易扩展。Node的发展为时尚短,缺乏标准、最佳实践以及大量久经测试的代码。而用Scala的话,可以使用所有Java代码。虽然其中并没有多少可扩展的东西,也无法解决5毫秒响应时间、49秒HA、4万每秒请求甚至有时每秒40万次请求的问题。但是,Java的生态链要大得多,有很多资源可以利用。
内部服务从C/libevent为基础正在转向Scala/Finagle为基础。
开始采用新的NoSQL存储方案如HBase和Redis。但大量数据仍然存储在大量分区的MySQL架构中,并没有用HBase代替MySQL。HBase主要支持短地址生产程序(数以十亿计)还有历史数据和分析,非常结实。此外,HBase也用于高写入需求场景,比如Dashboard刷新时一秒上百万的写入。之所以还没有替换HBase,是因为不能冒业务上风险,目前还是依靠人来负责更保险,先在一些小的、不那么关键的项目中应用,以获得经验。MySQL和时间序列数据sharding(分片)的问题在于,总有一个分片太热。另外,由于要在slave上插入并发,也会遇到读复制延迟问题。
此外,还开发了一个公用服务框架:
200台数据库服务器中,很多是为了提高可用性而设,使用的是常规硬件,但MTBF(平均故障间隔时间)极低。故障时,备用充足。
为了支持PHP应用有6个后端服务,并有一个小组专门开发后端服务。新服务的发布需要两到三周,包括Dashboard通知、Dashboard二级索引、短地址生成、处理透明分片的memcache代理。其中在MySQL分片上耗时很多。虽然在纽约本地非常热,但并没有使用MongoDB,他们认为MySQL的可扩展性足够了。
Gearman用于会长期运行无需人工干预的工作。
可用性是以达到范围(reach)衡量的。用户能够访问自定义域或者Dashboard吗?也会用错误率。
历史上总是解决那些最高优先级的问题,而现在会对故障模式系统地分析和解决,目的是从用户和应用的角度来定成功指标。(后一句原文似乎不全)
最开始Finagle是用于Actor模型的,但是后来放弃了。对于运行后无需人工干预的工作,使用任务队列。而且Twitter的util工具库中有Future实现,服务都是用Future(Scala中的无参数函数,在与函数关联的并行操作没有完成时,会阻塞调用方)实现的。当需要线程池的时候,就将Future传入Future池。一切都提交到Future池进行异步执行。
Scala提倡无共享状态。由于已经在Twitter生产环境中经过测试,Finagle这方面应该是没有问题的。使用Scala和Finagle中的结构需要避免可变状态,不使用长期运行的状态机。状态从数据库中拉出、使用再写回数据库。这样做的好处是,开发人员不需要操心线程和锁。
22台Redis服务器,每台的都有8-32个实例,因此线上同时使用了100多个Redis实例。
(先到这里吧,敬请期待下篇,包括如何用Kafaka、Scribe、Thrift实现内部活动流,Dashboard的Cell架构,开发流程和经验教训等精彩内容。)
翻译:包研,张志平,刘江;审校:刘江
---
内部的firehose(通信管道)
为Dashboard收件箱设计的Cell架构
在纽约启动运作
团队架构
软件部署
Func API可用于返回状态报告,报告哪些机器上有这些软件版本。
展望
招聘流程
经验及教训
翻译:包研,张志平
Continue reading 【转】Tumblr:150亿月浏览量背后的架构挑战
sina股票数据接口
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据
接口:http://hq.sinajs.cn/list=sh601006这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95,
15220, 26.96, 2008-01-11, 15:05:32";
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:”大秦铁路”,股票名字;
1:”27.55″,今日开盘价;
2:”27.25″,昨日收盘价;
3:”26.91″,当前价格;
4:”27.55″,今日最高价;
5:”26.20″,今日最低价;
6:”26.91″,竞买价,即“买一”报价;
7:”26.92″,竞卖价,即“卖一”报价;
8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
10:”4695″,“买一”申请4695股,即47手;
11:”26.91″,“买一”报价;
12:”57590″,“买二”
13:”26.90″,“买二”
14:”14700″,“买三”
15:”26.89″,“买三”
16:”14300″,“买四”
17:”26.88″,“买四”
18:”15100″,“买五”
19:”26.87″,“买五”
20:”3100″,“卖一”申报3100股,即31手;
21:”26.92″,“卖一”报价
(22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况”
30:”2008-01-11″,日期;
31:”15:05:32″,时间;
这个接口对于JavaScript程序非常方便,通常的使用方式为,静态或动态地在页面中插入:
<script src="http://hq.sinajs.cn/list=sh601006" type="text/javascript"><!--mce:0--></script>
<script type="text/javascript"><!--mce:1--></script>
这段代码输出大秦铁路(股票代码:601006)的当前股价
current price:14.20
如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL:
http://hq.sinajs.cn/list=sh601003,sh601001
但如果你要查询大盘指数,情况会有不同,比如查询上证综合指数(000001),使用如下URL:
http://hq.sinajs.cn/list=s_sh000001 服务器返回的数据为:
var hq_str_s_sh000001=”上证指数,3094.668,-128.073,-3.97,436653,5458126″;
数据含义分别为:指数名称,当前点数,当前价格,涨跌率,成交量(手),成交额(万元);
查询深圳成指的URL为:
http://hq.sinajs.cn/list=s_sz399001
对于股票的K线图,日线图等的获取可以通过请求http://image.sinajs.cn/…./…/*.gif此URL获取,其中*代表股票代码,详见如下:
查看日K线图:
http://image.sinajs.cn/newchart/daily/n/sh601006.gif
分时线的查询:
http://image.sinajs.cn/newchart/min/n/sh000001.gif
日K线查询:
http://image.sinajs.cn/newchart/daily/n/sh000001.gif
周K线查询:
http://image.sinajs.cn/newchart/weekly/n/sh000001.gif
月K线查询:
http://image.sinajs.cn/newchart/monthly/n/sh000001.gif
深成指:<script type="text/javascript" src="http://hq.sinajs.cn/list=sz399001" charset="gb2312"></script>
上证指:<script type="text/javascript" src="http://hq.sinajs.cn/list=sh000001" charset="gb2312"></script>
道琼斯:<script type="text/javascript" src="http://hq.sinajs.cn/list=int_dji" charset="gb2312"></script>
纳斯达克:<script type="text/javascript" src="http://hq.sinajs.cn/list=int_nasdaq" charset="gb2312"></script>
恒生指:<script type="text/javascript" src="http://hq.sinajs.cn/list=int_hangseng" charset="gb2312"></script>
日经指数:<script type="text/javascript" src="http://hq.sinajs.cn/list=int_nikkei" charset="gb2312"></script>
台湾加权:<script type="text/javascript" src="http://hq.sinajs.cn/list=b_TWSE" charset="gb2312"></script>
新加坡:<script type="text/javascript" src="http://hq.sinajs.cn/list=b_FSSTI" charset="gb2312"></script>
转自:http://nerrsoft.com/259.html
Continue reading 【转】调用Sina股票数据
之前使用wp-super-cache,后来改了服务器,问题就来了,要设置一大堆,很麻烦。
对于小站来说,如果经常换服务器,最好还是不要用wp-super-cache,后遗症较多。
比如我写个ajax请求,php返回后面加了wp-super-cache一段话,把json格式给破坏了。
怎么删除wp-super-cache还真是个学问:
见
我是直接删了文件的。后来发现控制面板插件页出现问题:
未启用: 在 wp-config.php 中需要 define('', true);
试试把define('WP_CACHE', true);
改为define('WP_CACHE', false);
还是不行。
偶然试试点击插件页的全部插件连接,竟然就好了,不得其解。
尝试其他的插件:
hyper cache+db cache reloaded fix http://help.laoxuehost.com/wp/wordpress-cache.html
效果不错。
注意,对于你不想缓存的页面,需要在hyver cache 配置中
Filters>拒绝的位址 中加入页面url,以此为开头的url将不会被缓存。例如/show/ 则www.ig2net.info/show/下所有页面不会缓存。
Continue reading wordpress 缓存插件
in Web / Web前端 on X-UA-Compatible
IE这个浏览器真是很头疼,有时你开发的网页,到稍微新一点的版本上就完全变了样。
对于IE8,它就使用了全新的渲染引擎,IE9更是变化大。
这里介绍使用X-UA-Compatible meta来让IE 跳转到某个版本来渲染。
方法1:
可使用meta 标签
<meta http-equiv="X-UA-Compatible" content="IE=8" />
方法2:
服务器返回头
X-UA-Compatible: IE=8;FF=3;OtherUA=4
其实X-UA-Compatible 虽不是个标准头,但是很多浏览器都支持它,然而最需要这个的恐怕是IE了,它的向前兼容性太差。
另外这样的写法:
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
则是让浏览器使用最新的可能版本渲染。
这里顺便提一下Acid2测试, acid主要测试浏览器符合w3c标准的程度,这篇文章介绍较好:
http://www.bobopo.com/article/code/acid_w3c.htm
参见:
http://www.alistapart.com/articles/beyonddoctype
http://www.456bereastreet.com/archive/201103/x-ua-compatible_and_html5/
http://wange.im/x-ua-compatible-ie9-to-ie7.html
Continue reading X-UA-Compatible, IE向前兼容性
我使用 https://bitbucket.org 时知道了mercurial, 发现之前使用过tortoiseHG的。
我使用eclipse插件mercurialeclipse,可从
http://code.google.com/a/eclipselabs.org/p/mercurialeclipse/ 这里找到updatesite,这里是最新的,较之javaforge要新。
windows上这个插件需要安装hg客户端,一般是tortoisehg。
入门文档可看http://mercurial.selenic.com/wiki/ChineseTutorial
然后看看http://www.cnblogs.com/meetrice/archive/2010/07/12/1775707.html 这个文章有图有真相,非常值得一读。
基本步骤是:
在https://bitbucket.org上建立仓库
将仓库clone到本地,创建本地仓库。
添加文件等,向本地仓库commit.(这个可多次执行)
向https://bitbucket.org push本地仓库的tag.(将上一步多次commit到本地的全部push到web)
在国内的网络环境下,访问https://bitbucket.org的资源库还是很需要耐心的。
我之前用svn时喜欢将所有项目提交到一个仓库中,但是在hg里面还没发现怎样达到这个目的。仍然需要每个项目建个仓库。每个仓库的目录和项目目录相同,这里也许是我还没搞明白吧。
Continue reading mercurial入门
in Web前端 on dreamweaver, photoshop
切片的经验:
先用参考线勾勒大体框架,在针对内部切片。注意应该从大到小的顺序来,例如,先将每个大部分切片划分,再对每个大部分划分里面的部分,这样每一部分的切片分割只会局限在这个部分以内,否则,一个切片影响整个划分,前面的功夫就会白做了。
ps切片用来切图还好,但是想通过它来直接生成div+css的html还是行不通的,因为ps虽然可以直接生成div的html,但是都是绝对定位,你最终还是要手写html来达到实际的效果。
基础课看看下面的教程:
网易公开课有这个教程:
http://tech.163.com/special/000915SN/Dreamweaver01.html
其中:
转么针对ps的:
http://tech.163.com/special/000915SN/pscs3n.html
可以看看
跟踪图像是用于dreamweaver设计网页时比对原图的功能:修改/页面属性/跟踪图像
ps中经常发现面板无法拖动,空白处点击一下右键就可以了,再点击一下右键又不能拖,如此切换。
还有这些值得一看:
Photoshop把PSD网站模板切图为XHTML+CSS的网页
http://www.missyuan.com/thread-378347-1-7.html
用photoshop設計網頁完全過程(这个是设计图,不是讲切片)
http://www.weekendhk.com/blog/index.php/35747/viewspace-41065.html
另外: 其实标准的网制作完成的工作实际是:psd to html,一般情况下,我们会拿到美工的psd,这时候不同的人会有不同的做法:
1.打开fireworks将图片切割导出为html。
2.直接在dreamweaver之类的工具去拖拉布局,导入相关的图片,flash资源。
3.先在ps中完成切图后,在文本编辑器中看着效果图一步步的制作。
以上是大多被采用的方法,但都不好:
第一种方法最为不好,这样的代码根本不具维护性和可读性。
第二种方法也不好,代码难免会有冗余,做出来的东西基本需要排查一遍。
第三种方法也不好,因为你需要看效果图一点点的拼,也就是说写html标签的时候,你在不断的假设这块要怎么去显示。
正确的做法是:
1.拿到psd后,先不要做别的,直接在文本编辑器中将网页的框架写出来,不要假设这块将来css要去怎么渲染,完全自然化的标签,不加任何的css。
2.写完之后在各个浏览器运行之后确保大体定位都没有问题。
3.书写总体css,这里的css只负责大块的定位及样式。
4.切出需要的图片资源,在写好的框架中一点点的去构造,不断的调试,最终为成品。
5.最后,为自己的代码添加注释,在css,html中都要合适的为自己的代码添加注释。
要想做出能灵活切换皮肤,让css主导表现,还有很多要注意的地方,但大体的流程就是这样的,当然我们一开始不能直接就做到先写html,但起码要有这个意识,循序渐进。。。
参见:
http://blog.ureshika.com/archives/711.html
Continue reading photoshop,dreamweaver 切片教程
记性不好,还是要烂笔头。
终止线程用什么方法最好:答案是使用共享变量在while中判断。
那么Thread提供的stop interrupt, ExecutorService提供的shutdown, shutdownAll不行吗?答案是不行。
解释:
stop方法是过时的
interrupt:如果线程中没有sleep 、wait、Condition、定时锁等应用, interrupt()方法是无法中断当前的线程的。
shutdown, shutdownAll:它试图终止线程的方法是通过调用Thread.interrupt()方法来实现的。
另外在使用共享变量时也要注意:
多个线程访问共享变量时无论读或者写都要保证同步。(参见 effective java item 66.)
参见:http://blog.ureshika.com/archives/152.html
http://www.blogjava.net/jinfeng_wang/archive/2008/04/27/196477.html
Continue reading thread stop interrupt, ExecutorService shutdown shutdownnow,怎样终止线程