docker详细的基础用法

1、docker安装 debian7安装docker 参考地址:http://www.webmaster.me/server/installing-docker-on-debian- wheezy-in-60-seconds.html echo deb http://get.docker.io/ubuntu docker main | sudo tee/etc/apt/sources.list.d/docker.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 sudo apt-get update sudo apt-get install -y lxc-docker #四行命令,Docker就安装好了。下面创建一个ubuntu虚拟系统: docker pull ubuntu #此处是从官网拉取名为ubuntu的image,也可手动在 https://index.docker.io上搜索想要的镜像。 docker run -i -t ubuntu /bin/bash #创建一个容器,-t是临时终端。 ubuntu12.04、windows、macOS安装docker 参考docker中文文档http://www.widuu.com/docker/ 2、docker使用过程实践 2.1 在测试机启动容器,安装ssh docker run -i -t ubuntu /bin/bash #此方式运行的容器,退出后容器就会 关闭。 apt-get install openssh-server #安装ssh #需要修改/etc/sshd/sshd_config文件中内容 PermitRootLogin yes UsePAM no 2.2 启动ssh,容器以后台方式运行 docker run -d -p 50001:22 <容器id> /usr/sbin/sshd-D #容器id可通过 docker ps-a查看,最上面的为最新的。 2.3 通过ssh连接到容器安装软件 ssh root@127.0.0.1-p 50001 #连上后想装什么就装什么,可使用exit退出容器,但后台还会运行。 2.4 服务安装完成后,停止容器。 docker stop <容器id> #停止运行的容器 2.5 把容器提交生成最新的镜像 […]

龙生   06 Jul 2016
View Details

EPON与GPON的介绍及主要区别比较[图]

导读:EPON和GPON各有千秋,从性能指标上GPON要优于EPON,但是EPON拥有了时间和成本上的优势,GPON正在迎头赶上,展望未来的宽带接入市场也许并非谁替代谁, 应该是共存互补。对于带宽、多业务,QoS和安全性要求较高以及ATM技术 作为骨干网的客户,GPON会更加适合。 什么是PON?宽带接入技术风起云涌,注定成为一块硝烟永远不会散去的战场。目前国内占主流仍然是ADSL技术,不过越来越多的设备厂商及运营商已经把目光投向了光网络接入技术。 铜价不断攀升,光缆价格不断下降,不断增长的IPTV, 视频游戏业务对带宽的巨大需求推动着FTTH的发展。由光缆取代铜缆及有线同轴电缆,电话,有线电视,宽带数据三网合一的美好前景变的清晰起来。 图一:PON 拓扑结构 PON(Passive Optical Network)无源光网络是实现FTTH光纤到户的主要技术,提供点到多点的光纤接入,如图一所示,它由局侧的OLT(光线路终端)、用户侧的ONU(光网络单元)以及ODN(光分配网络)组成。一般其下行采用TDM广播方式、上行采用TDMA(时分多址接入)方式,组成点到多点树形拓扑结构。PON作为光接入技术最大的亮点是“无源”,ODN中不含有任何有源电子器件及电子电源,全部由光分路器(Splitter)等无源器件组成,管理维护运营成本较低。 PON发展史 PON技术研究起源于1995年,1998年10月,ITU通过了FSAN组织(全业务接入网)所倡导的基于ATM的PON技术标准——G。983。也被称为BPON(BroadbandPON)。速率为155Mbps,可选择支持622Mbps速率。 EFMA(Ethernetin the First Mile Alliance,第一英里以太网联盟)于2000年底提出了Ethernet-PON(EPON)的概念,传输速率达1Gbps,链路层基于简单的Ethernet 装。 GPON(Gigabit-CapablePON)由FSAN组织于2002年9月提出,2003年3月ITU通过了G。984。1和G。984。2协议。G。984。1对GPON接入系统的总体特性进行了规定;G。984。2对GPON的ODN(Optical Distribution Network)物理媒质相关子层进行了规定;2004年6月ITU又通过了G。984。3,它对传输汇聚(TC)层的相关要求进行了规定。 EPON和GPON产品比较 EPON和GPON作为光网络接入的两个主力成员,各有千秋,互有竞争,互有补充,互有借鉴,下面在各个方面对它们作个比较: 速率 EPON提供固定上下行1。25Gbps,采用8b/10b线路编码,实际速率为1Gbps。 GPON支持多种速率等级,可以支持上下行不对称速率,下行2.5Gbps或1.25Gbps,上行1.25Gbps或622Mbps,根据实际需求来决定上下行速率,选择相对应光模块,提高光器件速率价格比。 本项结论:GPON优于EPON。 分路比 分路比即一个OLT端口(局端)带多少个ONU(用户端)。 EPON标准定义分路比1:32。 GPON标准定义分路比下列几种1:32;1:64;1:128 其实,技术上EPON系统也可以做到更高的分路比,如1:64,1:128,EPON的控制协议可以支持更多的ONU。分路比主要是受光模块性能指标的限制,大的分路比会造成光模块成本大幅度上升;另外,PON插入损失15~18dB,大的分路比会降低传输距离;过多的用户分享带宽也是大分路比的代价。 本项结论:GPON提供多选择性,但是成本上考虑优势并不明显最大传送距离GPON系统可支持的最大物理距离,当光分路比为1:16时,应支持20km的最大物理距离;当光分路比为1:32时,应支持10km的最大物理距离。EPON与此相同,本项结论:相等。 QOS(Quality of Service) EPON在MAC层Ethernet包头增加了64字节的MPCP多点控制协议 (multipointcontrolprotocol),MPCP通过消息、状态机和定时器来控制访问P2MP点到多点的拓扑结构,实现DBA动态带宽分配。MPCP涉及的内容包括ONU发送时隙的分配、ONU的自动发现和加入、向高层报告拥塞情况以便动态分配带宽。MPCP提供了对P2MP拓扑架构的基本支持,但是协议中并没有对业务的优先级进行分类处理,所有的业务随机的竞争着带宽,GPON则拥有更加完善的DBA,具有优秀QoS服务能力。 GPON将业务带宽分配方式分成4种类型,优先级从高到低分别是固定带宽(Fixed)、保证带宽(Assured)、非保证带宽(Non-Assured)和尽力而为带宽(BestEffort)。DBA又定义了业务容器(trafficcontainer,T-CONT)作为上行流量调度单位,每个T-CONT由Alloc-ID标识。每个T-CONT可包含一个或多个GEMPort-ID。T-CONT分为5种业务类型,不同类型的T-CONT具有不同的带宽分配方式,可以满足不同业务流对时延、抖动、丢包率等不同的QoS要求。T-CONT类型1的特点是固定带宽固定时隙,对应固定带宽(Fixed)分配,适合对时延敏感的业务,如话音业务;类型2的特点是固定带宽但时隙不确定,对应保证带宽(Assured)分配,适合对抖动要求不高的固定带宽业务,如视频点播业务;类型3的特点是有最小带宽保证又能够动态共享富余带宽,并有最大带宽的约束,对应非保证带宽(Non-Assured)分配,适合于有服务保证要求而又突发流量较大的业务,如下载业务;类型4的特点是尽力而为(BestEffort),无带宽保证,适合于时延和抖动要求不高的业务,如WEB浏览业务;类型5是组合类型,在分配完保证和非保证带宽后,额外的带宽需求尽力而为进行分配。 本项结论:GPON优于EPON 运营、维护OAM EPON没有对OAM进行过多的考虑,只是简单的定义了对ONT远端故障指示、环回和链路监测,并且是可选支持。 GPON在物理层定义了PLOAM(PhysicalLayerOAM),高层定义了OMCI(ONTManagementandControlInterface),在多个层面进行OAM管理。PLOAM用于实现数据加密、状态检测、误码监视等功能。OMCI信道协议用来管理高层定义的业务,包括ONU的功能参数集、T-CONT业务种类与数量、QoS参数,请求配置信息和性能统计,自动通知系统的运行事件,实现OLT对ONT的配置、故障诊断、性能和安全的管理。 本项结论:GPON优于EPON 链路层 装和多业务支持 如图二所示,EPON沿用了简单的以太网数据格式,只是在以太网包头增加了64字节的MPCP点到多点控制协议来实现EPON系统中的带宽分配,带宽轮讯,自动发现,测距等工作。对于数据业务以外的业务(如TDM同步业务)的支持没有作过多研究,很多EPON厂家开发了一些非标准的产品来解决这个问题,但是都不理想,很难满足电信级的QoS要求。 GPON基于完全新的传输融合(TC)层,该子层能够完成对高层多样性业务的适配,如图二所示,定义了ATM 装和GFP 装(通用成帧协议),可以选择二者之一进行业务 装。鉴于目前ATM应用并不普及,于是一种只支持GFP 装的GPON。lite设备应运而生,它把ATM从协议栈中去除以降低成本。 GFP是一种通用的适用于多种业务的链路层规程,ITU定义为G。7041。GPON中对GFP作了少量的修改,在GFP帧的头部引入了PortID,用于支持多端口复用;还引入了Frag(Fragment)分段指示以提高系统的有效带宽。并且只支持面向变长数据的数据处理模式而不支持面向数据块的数据透明处理模式,GPON具有强大的多业务承载能力。GPON的TC层本质上是同步的,使用了标准的8kHz(125μm)定长帧,这使GPON可以支持端到端的定时和其他准同步业务,特别是可以直接支持TDM业务,就是所谓的NativeTDM,GPON对TDM业务具备“天然”的支持。 本项结论:对多业务的支持GPON的TC层要比EPON的MPCP强大。 图二:GPON与EPON协议栈比较 网络层次GPONEPON L3ATMTDMIPTDMIP L2ETHERNETETHERNET WITH MPCP GFP L1PON-PHYPON-PHY 结语 EPON和GPON各有千秋,从性能指标上GPON要优于EPON,但是EPON拥有了时间和成本上的优势,GPON正在迎头赶上,展望未来的宽带接入市场也许并非谁替代谁,应该是共存互补。对于带宽、多业务,QoS和安全性要求较高以及ATM技术作为骨干网的客户,GPON会更加适合。而对于成本敏感,QoS,安全性要求不高的客户群,EPON成为主导。 编 辑:初夏 from:http://www.cctime.com/html/2015-4-20/2015420936287107.htm

龙生   04 Jul 2016
View Details

我从编程总结的 22 个经验

以下所列是我在这些年来软件开发工作过程中受到的启发,还有总结而来的好经验。 开发 从小事做起,然后再扩展 无论是创建一个新的系统,还是在现有的系统中添加新的功能,我总是从一个简单到几乎没有任何所需功能的版本开始,然后再一步一步地解决问题,直到满意为止。我从来没有妄想过能够一步登天。相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中。 我很喜欢 John Gall 的这句话: “复杂系统总是源于简单系统的演化。” 2. 一次只做一件事 当我们在开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键。换言之,就是使用短迭代。必须确保这个问题解决之后,再转移到另一个问题上。这适用于向下提交。如果在你添加新功能之前需要先重构代码,那么先提交重构,然后再添加新的功能。 3. 尽早地添加日志和错误处理 在开发新系统时,我做的第一件事就是添加日志和错误处理,因为这两者从一开始就非常有用。对系统来说它比一大把代码更有用,你需要一些了解程序状态的方法。如果系统不能照常工作,那么你就需要知道程序中发生了什么——这是日志的作用。错误处理也是如此——错误和异常越早处理越好。 4. 每一行新代码必须至少执行一次 在你真正完成一个功能之前,你必须对它进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。不过,不管怎么说,每一行新代码必须至少执行一次。 一般,我们想触发某种条件很难。但幸运的是,我们可以作弊。例如,数据的错误处理可以通过临时拼写错一个列名来触发。或者,一个if语句可以暂时颠倒过来(从 if error 变成 if not error),这样来触发那些平时很难触发的条件,这样只是为了确定代码是否正常运行和它会出现什么结果。 有时,我发现有一些行代码永远都不会被运行。当我们做代码检查是它看起来没有什么问题,但就是不工作。你要避免这样的尴尬状况,如果你想你的每一行新代码都会被执行。 5. 在整体测试之前先进行模块测试 先进行部分模块测试可以节省时间。通常说来,我们在整合不同的模块时也会出现问题,例如模块之间的接口不匹配。但是如果我们能够信任各个组件的话,那么跟踪集成问题就会变得简单得多。 6. 所有事情所花费的时间总是比你预期的要长 特别是在编程中,即使一切进展顺利,我们也很难对功能所需的时间做出正确的预算。并且,开发软件时碰到各种意想不到的问题是非常常见的。一个简单的合并操作会导致一系列小bug,一次框架升级意味着一些函数必须改变或者一些API不按照你想象的那样工作。 Hofstadter Law( 霍夫施塔特定律)其实道出了真谛:做事所花费的时间总是比你预期的要长,即使你在预期中已经考虑了 Hofstadter Law( 霍夫施塔特定律)。 7. 先了解现有的代码 大多数的编码都需要以某种方式改变现有的代码。即使是新功能,也需要适应现有的程序。所以,在你加进去新的内容前,首先需要了解当前的解决方案。否则,你一不小心就很有可能会打破现有的功能。这意味着,阅读代码和编写代码都是必要的技能。这也是为什么看似微小的变化仍可能需要很长时间才能解决的原因之一,因为你首先必须了解上下文。 8. 阅读和运行代码 幸运的是,对于理解代码,我们有两种互补的方法。你可以阅读代码,也可以运行代码。运行代码的确是个非常棒的好方法。所以,请确保充分利用这两种方法。 故障排除 9. Bug 总是难免的 我不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么努力,bug总是难免的(BUG的定义基本上是:“我们没有想到”)。最好能够做成可以快速故障排除、修复bug和部署修复的系统。 10. 解决故障报告 每个开发人员都应该花时间去处理来自客户的故障报告,并修复bug。这能让你更好地理解客户的意图,明白如何使用系统,知道排除故障的难易程度,了解系统的设计情况。这也是为自己的开发成果负责的好方法。不要错过这些好处。 11. 重现问题 修复bug的第一步就是重现问题。然后你得确保修复之后,问题能够彻彻底底地消失。这样一个简单的规则,可以确保你不会误将非问题当作是问题,并确保解决方案真的能够奏效。 12. 修复已知错误,然后再看看有没有其他不对的地方 有时候,可能同时存在着几个不同的问题。它们之间的互相作用,可能会让你毫无头绪,束手无策。不要纠结于搞清楚发生了什么,先去解决所有已知的问题,然后再看看还有什么不对的地方。 13. 没有巧合 在测试和故障排除时,不要相信会出现什么巧合。就像你改变了定时器的值,那么就会改变系统重启的频率。所以一切都并非是巧合。添加新功能,另一个不相干的功能变慢了?这绝对不是巧合。相反,是你应该仔细调查的内容。 14. 关联时间戳 在故障排除时,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。 合作 15. 面对面的交流最有效 当我们需要讨论如何解决问题时,那么面对面的交流比视频、打电话和电子邮件都要好。我经常在与同事讨论完后发现一个令人兴奋的更好的方案。 16. 小黄鸭调试法 遇到你绞尽脑汁也解决不了的问题时,不妨找一个同事,然后将问题解释给他们听。很多时候,当你在叙述时,即使你的同事一言不发,你可能也会突然灵光乍现找到问题的关键。听起来像魔法,但是这经常起作用。详情看这篇文章:《小黄鸭调试法,每个程序员都要知道的》 17. 问问题 阅读和运行代码往往非常有助于指出代码的目的和它的工作原理。但是如果你有机会咨询那些更为了解的人(例如原来的程序员),那么千万不要错过。继续问他们具体的问题、后续的问题,这几分钟内给你的信息可能是你需要花费好几天才能获得的。 18. 共享荣誉 不要贪图荣誉,该是谁的就是谁的。例如:“Marcus 想出了这个主意……”(如果真是他想的话),而不要说“我们想出的……”。大胆的说出那些帮助过你或者贡献过力量的人的名字。 其他 19. 动手去做 如果你不知道某种编程语言功能的工作原理,那么不妨写一个小程序来理解它是如何工作的。这同样适用于测试你正在开发的系统。如果我将参数设置为-1,会发生什么?当我在重启系统时,如果服务当掉,会发生什么?以此来研究它的工作原理。经常做这些会帮你发现bug,在此同时也会加深你的系统工作的了解。 20. 带着问题睡觉 如果你正在解决一个很难的问题,那么不妨带着问题睡觉。有科学研究表明,这样做虽然你表明上并没有在主动思考,但你的潜意思却这么做了。其结果就是,第二天再去研究问题,解决方案已经呼之欲出了。 21. 改变/跳槽 不要害怕角色变化。和不同的人共事,开发不同的产品,感受不同的公司文化是非常有意思的。在我看来,太多的人只是被动地呆在同样的地方年复一年的工作,只有在被迫的情况下才去改变。 22. 活到老学到老 软件行业的一大魅力就是我们随时有机会可以学到新的东西。你可以尝试不同的编程语言和工具,阅读软件开发的书籍,接受MOOC课程。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。 […]

龙生   04 Jul 2016
View Details

ReactJS的简单介绍和使用

一、React的家世背景 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。 Facebook的设计理念是独立、小巧、快速、创新,而React的特点也正说明了这一点。 二、React 更“轻”的MDV框架 先来说一下什么是MDV吧,MDV即Model Driven View,根据model动态生成view。MDV框架将程序员从传统手动渲染dom节点和事件绑定中解放了出来,大大提高了开发效率。 React更“轻”,这个"更"是有对比含义的,相对于AngularJs的双向数据流,ReactJs的单向数据流显然是更轻量级,而且React维护自己的VTree(虚拟Dom树),可以更快的渲染dom节点。据说,react渲染的界面,fps可以保持在60左右,这一点使得react特别适合于制作游戏。在react刚推出的时候,有测试指出react的性能要比angular高20%左右。 但是,AngularJs的数据交互可以双向进行,可以用于CURD,应用易于接受用户的自定义以及个人数据。当然, 毕竟 React是用于“render”的,view中最关键的是管理组件状态变化,而React在这一点上做的比AngularJs好很多。 在React中,对象的状态使用this.state表示,对象的初始状态设置使用getInitialState,设置状态使用setState,数据使用props管理,DOM操作和事件监听则类似于jquery。   三、使用React制作简易悬浮框 index.html

style.css

common.js (React创建组件)

在线演示 from:http://my.oschina.net/lonelydawn/blog/699696

龙生   02 Jul 2016
View Details

将 Chrome 变成开发利器,开发者们在用这些插件

Chrome 浏览器具有强大的跨平台能力以及丰富的扩展插件,一直是许多开发者的首要选择。而利用许多 Chrome 插件,开发者们在开发流程中能够极大地提高开发效率。我们就整理了十款开发者常用的 Chr Chrome 浏览器具有强大的跨平台能力以及丰富的扩展插件,一直是许多开发者的首要选择。而利用许多 Chrome 插件,开发者们在开发流程中能够极大地提高开发效率。我们就整理了十款开发者常用的 Chrome 插件推荐给大家,相信能够在你的开发中助你一臂之力。 1. 掘金 Chrome 插件:帮你发现干货 不管你是开发者、设计师还是产品经理,想必每天都需要阅读大量的行业相关文章,这就需要我们浏览大量的互联网站点去寻找我们需要的内容。抛开繁复的筛选成本不说,「比特级」的内容都会压得你喘不过气来。 掘金为了解决这个问题,开发了掘金 Chrome 插件,掘金 Chrome 插件聚合了国内外优质的互联网站点内容,在节省你的筛选成本的同时,帮你发现好内容。 2. Postman:强大的 API & HTTP 请求调试工具 相 信 Postman 对于掘金上的各位开发者来说,一定不会陌生,这是一款强大的 API & HTTP 请求调试工具,Postman 不仅可以调试简单的 HTML、CSS 以及脚本等简单的网页基本信息,这款 Chrome 插件甚至还能发送几乎所有的 HTTP 请求,可谓是 Web 开发者的一大利器。 3. BuiltWith Technology Profiler:你的网站,用了什么技术栈? 作为开发者,对于友商网站所使用的技术栈想必也充满了许多好奇心,有没有工具能够帮你完成这项工作呢?答案就是 Chrome 插件 BuiltWith Technology Profiler,它能够帮你分类呈现当前访问网站的技术栈组成,实乃探索友商之利器。 当然,同类产品中,你也可以使用 Wappalyzer 这一款 Chrome 插件。 4. Octotree:你的 GitHub 文档库 GitHub 现有的目录层级形式,在查看来自不同层级文件夹的文件的时候,显得似乎不是很方便,Octotree 这款 Chrome 插件能够让你通过文档库的方式管理、查看你的 GitHub 仓库,简单直观的同时,也方便你进行文件之间的跳转操作。 5. GitHub Awesome Complete:属于 GitHub 的 「Alfred」 在 GitHub 搜索仓库或者项目的时候,你会怎么做?相信大部分人的步骤都是一样的: 在搜索框输入关键字后按回车键 在搜索结果中找到相应结果,点击进入相应页面 有没有更简单快捷的操作方法?答案是 GitHub Awesome Complete 这款 Chrome […]

龙生   01 Jul 2016
View Details

HTML5 实现手机拍照上传

背景:移动端H5项目,需要实现调用手机拍照,并将图片压缩上传功能。 页面样式: 上传图片有原生的方法<input type="file" accept="image/*">,如果只想要拍照上传,不希望用户选择图片上传,可以通过添加capture属性,该属性值有camcorder/microphone/camera…,此处选择camera。PS:该属性存在浏览器兼容性问题,不是所有的浏览器都支持。

  因为原生file样式不满足要求,需要进行相应的处理,此时使用定位,在input上面放置我们想要的页面效果。然后当点击上面的元素,就可以触发我们的input进行图片上传。此时的问题是:当点击input上面的元素,需要事件穿透,即相当于点击input。则借助于css3心术新pointer-events。

  —-此时图片上传的样式已经处理好了—- 代码片段:

  图片压缩处理: 因为要做的是手机拍照上传,现在的手机拍照片都很大,比如小米4S,大小在3M以上,如果原图上传,太消耗用户流量,于是要解决图片压缩的问题。   通过change事件,监听图片上传,通过readerAsDataURL获取上传的图片。

    对上传的图片进行压缩,需要借助于canvas API,调用其中的canvas.toDataURL(type, encoderOptions); 将图片按照一定的压缩比进行压缩,得到base64编码。重点来了:压缩策略:先设置图片的最大宽度 or 最大高度,一般设置其中一个就可以了,因为所有的手机宽高比差别不是很大。然后设置图片的最大size,allowMaxSize,根据图片的实际大小和最大允许大小,设置相应的压缩比率。

  图片上传给服务器: 图片已经压缩完成了,但是压缩后的图片不是File,而是一个base64编码,于是乎两个选择:1、以String的形式将base64编码上传给服务器,服务器转存base64为img图片;2、前端将base64转为File图片类型,上传给服务器。 方法一:压缩之后直接上传base64给后台,实现简单。 方法二:前端自己转存base64位File图片,这个对于前端 压力比较大。原因:html5 canvas属于客户端API,没有权限去保存图片到硬盘,只有canvas.toDataURL()这一接口可导出画布的base64编码,以提供给服务器进行处理保存。所以如果要将base64编码转成图片需要借助于nodeJs。因为nodeJS有相关文件处理的API。

  Summary:如果使用nodeJS,需要单独部署nodeJS代码到服务器,整个逻辑会比较麻烦。综合比较两种方法,推荐使用第一种方法,直接传base64给服务器,后台处理相应的转化! 相关知识科普: 图像一般由两部分组成:一部分是数据本身,他记录了每个像素的颜色值,另一部分是文件头,这里记录着形如图像的宽度,高度等信息。 不同图片类型及适用场景: 不同图片类型: GIF:无损压缩,体积小,支持透明效果,缺点:色彩效果最低,用gif保存鲜艳的图片的话会让网站看上去非常可怕。 PNG:无损压缩,可渐变透明,缺点:不如JPG颜色丰富,同样的图片体积也比JPG略大。 JPG/JPEG:色彩还原性好,可以在照片不明显失真的情况下,大幅度压缩图片格式,所以体积不会很大。缺点:不支持透明 适用场景: 当图片色彩鲜艳,基本没有透明效果的时候,选择jpg/jpeg。 当图片色彩鲜艳,透明效果较多的情况下,选择png; 当图片色彩比较单一情况下,可以选择gif; toDataURL,查找原生压缩图片的方法。type支持image/webp格式

  Base64编码:将三个8Bit的字节转换为四个6Bit的字节。   参考资料: http://www.imys.net/20150916/webapp-input-use-camera.html http://www.oxxostudio.tw/articles/201409/pointer-events.html https://segmentfault.com/a/1190000005364299   from:http://my.oschina.net/zyxchuxin/blog/700381

龙生   01 Jul 2016
View Details

实战:上亿数据如何秒查?

最近在忙着优化集团公司的一个报表。优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查的质变。从修改SQL查询语句逻辑到决定创建存储过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助。   数据背景 首先,项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据累积很大。在项目的数据库中,大概上亿条数据的表有5个以上,千万级数据的表10个以上,百万级数据的表,很多… (历史问题,当初实施无人监管,无人监控数据库这块的性能问题。ps:我刚入职不久…) 不多说,直接贴西门子中国的开发人员在我司开发的SSRS报表中的SQL语句:

这个查询语句,实际上通过我的检测和调查,在B/S系统前端已无法查出结果,半小时,一小时 … 。因为我直接在SQL查询分析器查,半小时都没有结果。 (原因是里面对一张上亿级数据表和3张千万级数据表做全表扫描查询) 不由感慨,西门子中国的素质(或者说责任感)就这样? 下面说说我的分析和走的弯路(思维误区),希望对你也有警醒。   探索和误区 首先相关表的索引,没有建全的,把索引给建上。 索引这步完成后,发现情况还是一样,查询速度几乎没有改善。后来想起相关千万级数据以上的表,都还没有建立表分区。于是考虑建立表分区以及数据复制的方案。 这里有必要说明下:我司报表用的是一个专门的数据库服务器,数据从产线订阅而来。就是常说的“读写分离”。 如果直接在原表上建立表分区,你会发现执行表分区的事物会直接死锁。原因是:表分区操作本身会锁表,产线还在推数据过来,这样很容易“阻塞”,“死锁”。 我想好的方案是:建立一个新表(空表),在新表上建好表分区,然后复制数据过来。 正打算这么干。等等!我好像进入了一个严重的误区! 分析: 原SQL语句和业务需求,是对产线的数据做产品以及序列号的追溯,关键是查询条件里没有有规律的"条件"(如日期、编号),贸然做了表分区,在这里几乎没有意义!反而会降低查询性能! 好险!还是一步一步来,先做SQL语句分析。   一、对原SQL语句的分析 1、查询语句的where条件,有大量@var in … or (@var =") 的片段 2、where条件有like '%’+@var+’%' 3、where条件有 case … end 函数 4、多次连接同一表查询,另外使用本身已嵌套的视图表,是不是必须,是否可替代? 5、SQL语句有*号,视图中也有*号出现   二、优化设计 首先是用存储过程改写,好处是设计灵活。 核心思想是:用一个或多个查询条件(查询条件要求至少输入一个)得到临时表,每个查询条件如果查到集合,就更新这张临时表,最后汇总的时候,只需判断这个临时表是否有值。以此类推,可以建立多个临时表,将查询条件汇总。   这样做目前来看至少两点好处: 1、省去了对变量进行 =@var or (@var=")的判断; 2、抛弃sql拼接,提高代码可读性。   再有就是在书写存储过程,这个过程中要注意: 1、尽量想办法使用临时表扫描替代全表扫描; 2、抛弃in和not in语句,使用exists和not exists替代; 3、和客户确认,模糊查询是否有必要,如没有必要,去掉like语句; 4、注意建立适当的,符合场景的索引; 5、踩死 "*" 号; 6、避免在where条件中对字段进行函数操作; 7、对实时性要求不高的报表,允许脏读(with(nolock))。   三、存储过程 如果想参考优化设计片段的详细内容,请参阅SQL代码:

虽然牺牲了代码的可读性,但创造了性能价值。本人水平有限,还请各位不吝赐教! 最后,将SSRS报表替换成此存储过程后,SQL查询分析器是秒查的。B/S前端用时1~2秒!   四、总结 平常的你是否偶尔会因急于完成任务而书写一堆性能极低的SQL语句呢?写出可靠性能的SQL语句不难,难的是习惯。 本文的优化思想很简单,关键点是避免全表扫描 & 注重SQL语句写法 & 索引,另外,如果你查询的表有可能会在查询时段更新,而实际业务需求允许脏读,可加with(nolock)预防查询被更新事物阻塞。 作者:hangwei 出处:http://www.cnblogs.com/hangwei/ 关于作者:专注于微软平台项目的架构设计与开发、数据库调优等工作。如有问题或建议,请多多赐教!   from:http://www.oschina.net/news/74787/how-the-data-on-the-second-search

龙生   01 Jul 2016
View Details

六个藉藉无名但迅速崛起的Apache大数据项目

如今全球各地的无数企业组织在处理数据集,这些数据集是如此地庞大而复杂,以至于传统的数据处理应用软件再也无法支持经过优化的数据分析和洞察力获取。这是新一批大数据应用软件旨在解决的问题,而Apache软件基金会(ASF)最近将一批值得关注的开源大数据项目升级为Apache顶级项目。这意味着,这些项目将获得积极的开发和强有力的社区支持。 (图片来源:Creative Commons Zero) 大多数人已听说过Apache Spark,这种大数据处理框架拥有内置模块,可用于数据流、SQL、机器学习和图形处理。IBM及其他公司正在往Spark项目投入数十亿美元的开发资金,美国宇航局和SETI研究所在开展合作,利用Spark的机器学习能力,分析数TB的复杂的外太空无线信号,搜寻可能表明存在智能外星生命的模式。 然而,另外几个最近被提升为顶级项目的Apache大数据项目同样值得关注。实际上,其中一些打造的生态系统在活动和开发上可与Spark的生态系统相媲美。本文介绍了你应该知道的几个Apache大数据项目。 下面是六个迅速崛起的项目: Kylin Apache最近宣布,Kylin项目这个脱胎于eBay的开源大数据项目已被提升为顶级项目。Kylin是一个开源分布式分析引擎,旨在提供一种基于Apache Hadoop的SQL接口和多维分析(OLAP),支持极其庞大的数据集。它仍广泛用于eBay和另外几家组织。 Apache Kylin副总裁Luke Han说:“Apache Kylin的孵化之旅已证明了开源治理在Apache软件基金会(ASF)具有的价值,并证明了围绕该项目打造一个开源社区和生态系统的力量。我们的社区在与世界上最庞大的本地开发者社区积极互动,完全依照Apache之道。” 作为一种基于Hadoop的OLAP解决方案,Apache Kylin旨在填补大数据探索与人类使用之间的空白,“让分析员、最终用户、开发人员和数据爱好者能够对庞大数据集执行交互式分析,延迟低于1秒,”据开发人员声称。他们补充道:“Apache Kylin将商业智能(BI)带回給Apache Hadoop,发掘大数据的价值。” Lens Apache最近还宣布,Apache Lens这个开源大数据和分析工具由Apache孵化器提升为顶级项目(TLP)。据宣布声称:“Apache Lens是一种统一分析平台。它为统一视图的分析查询提供了一种最佳执行环境。Apache Lens旨在通过针对多个分层数据存储系统,提供单一的数据视图,从而消除数据分析孤岛。” “通过在数据基础上提供一种联机分析处理(OLAP)模型,Lens将Apach Hadoop和传统数据仓库无缝集成起来,好比是一个整体。它还为在系统中运行的查询提供了查询历史记录和分析统计功能,另外提供了查询生命周期管理。” Apache Lens的副总裁Amareshwari Sriramadasu 说:“在ASF孵化Apache Lens是个神奇的经历。Apache Lens着眼于最终用户,解决了大数据分析领域的一个非常关键的问题。它让业务用户、分析员、数据科学家、开发人员及其他用户能够轻松处理复杂的分析,不需要了解底层的数据布局。” Ignite Apache软件基金会还宣布Apache Ingite成为了一个顶级项目。这个开源项目旨在构建一种内存中数据架构(in-memory data fabric)。 据Apache社区的成员声称:“Apache Ignite是一种高性能、集成、分布式的内存中数据架构,针对大规模数据集可实现实时计算和处理,速度比基于磁盘或闪存的传统技术要快几个数量级。它旨在可以轻松支持成本合理、基于行业标准的硬件上的分布式大规模并行架构中的新旧应用程序。” Brooklyn Apache软件基金会宣布,Apache Brooklyn现在是个顶级项目(TLP),“这标志着该项目的社区和产品已在该基金会的精英管理流程和原则下得到了妥善治理。”Brooklyn是一种应用程序蓝图和管理平台,用于跨多个数据中心集成服务,并集成云端的众多软件。 据Brooklyn宣布声称:“由于现代应用程序由许多组件构成,微服务架构日前受到关注,部署应用程序和已部署应用程序的日常改进成了一个越来越难的问题。Apache Brooklyn的蓝图提供了一种清晰简洁的方式,可以在部署到公共云或私有基础设施之前,明确应用程序、组件、配置以及组件之间的关系。基于策略的管理建立在自主计算理论这个基础上,不断评估运行中的应用程序,并对它进行改动,让应用程序保持顺畅运行,并且针对成本和响应能力等度量指标进行优化。” Brooklyn现用于一些知名企业组织。云服务提供商Canopy和Virtustream已开发了基于Brooklyn的产品。IBM也广泛使用Apache Brooklyn,以便将大量的工作负载从AWS迁移到IBM Softlayer。 Apex 今年4月份,Apache软件基金会将Apex项目提升为顶级项目。它号称是“面向Apache Hadoop生态系统的一种大规模、高吞吐量、低延时、容错、统一的大数据数据流和批量处理平台。”Apex可与Apache Hadoop YARN协同运行,后者是一种适用于Hadoop集群的资源管理平台。 Tajo 最后,Apache Tajo是需要了解的另一个新的大数据项目,这是Apache Hadoop中一个先进的开源数据仓库系统。Apache声称,Tajo为Hadoop部署系统、第三方数据库和商用商业智能工具提供了快速获取更多信息的功能。 很显然,虽然Apache Spark吸引了大量眼球,但它不是Apache提供的唯一引人注目的大数据工具。今年,Apache可能会将更引人注目的大数据项目提升为顶级项目,这些项目将得益于经过优化的开发资源及更多优势。 原文标题:On the Rise: Six Unsung Apache Big Data Projects   from:http://developer.51cto.com/art/201606/513276.htm

龙生   30 Jun 2016
View Details

7 款顶级开源 BI(商务智能)软件和报表工具

在这个信息化时代,每分每秒都产生海量数据。在海量数据中,挖掘出有用的数据,并且能以较人性化、直观的方式展示这些数据,变得尤为重要。本文将介绍 7款顶级开源 BI(商务智能)软件和报表工具,用于商业数据的分析处理,希望对您有所帮助。 BIRT BIRT(Business Intelligence and Reporting Tools) 是由 IBM在 2004年开源的基于 Eclipse 的报表系统,它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。 获取地址:http://www.eclipse.org/birt/   Seal Report Seal Report 是一款生产报表和开放数据库看板框架,采用微软.Net框架,C# 编写。主要有以下它特性: 支持动态SQL 查询数据。 支持本地数据透视表,随意的修改表元素, 数据透视表会立即按照新的布置重新计算数据 。 支持通过HTML 5快速生成网页图表。 可生成层级导航及层级报表。 支持定时任务,可编写批处理,定时执行一些数据加载、数据处理、备份等操作。 较低的TCO(总拥有成本)。 提供Web报表服务。 获取地址:https://github.com/ariacom/Seal-Report/archive/master.zip   JasperReports JasperReports是一个采用Java开发的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表。 JasperReports 支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。 获取地址:http://community.jaspersoft.com/download   ReportServer ReportServer 是采用 Java 开发的 BI 平台,支持 Linux 、OS X、Windows三大平台,运行在 Apache Tomcat,Wildfly等应用服务器上,允许采用Excel、Word、多维OLAP展示报表信息。 获取地址:https://reportserver.net/en/download/   Pentaho Pentaho是一个以工作 流为核心的、强调面向解决方案而非工具组件的BI套件,整合了多个开源项目,目标是和商业BI相抗衡。它偏向于与业务流程相结合的BI解决方案,侧重于大 中型企业应用。它允许商业分析人员或开发人员创建报表,仪表盘,分析模型,商业规则和 BI 流程。 功能和特点 ◆ 工作流引擎:Shark and JaWE ◆ 数据库:Firebird RDBMS ◆ 集成管理和开发环境:Eclipse ◆ 报表工具:Eclipse BIRT ◆ ETL工具:Enhydra/Kettle ◆ OLAP Server:Mondrian ◆ OLAP展示:JPivot ◆ 数据挖掘组件:Weka ◆ 应用服务器和Portal服务器:JBoss ◆ 单点登陆服务及LDap认证:JOSSO ◆ […]

龙生   30 Jun 2016
View Details

10+ 最佳的 Node.js 教程结合实例

如果你正在找Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用、API服务编写、投票问卷应用、人物投票APP、社交授权、 Node.js on Raspberry Pi等等。 以下是Node.js入门的简单介绍,如果你对Node.js略有了解可以直接跳过此部分。 那什么是Node.js呢? Node.js是迄今运用最多的服务端JavaScript运行时环境,使用JavaScript开发跨平台的实时WEB应用。 Node.js基于Google的V8 JavaScript引擎。基于事件驱动,非阻塞的输入输出模型,这也使得其高效而轻量。 Node.js的强大之处在于其能力支持数据密级性的交互应用,因为这类应用的函数围绕着用户事件,数据I/O和数据流的处理。对于JSON的API,Node.js同样显得很神奇,它是单页WEB应用的心脏和灵魂。 Node.js的流行程度可以感觉得到,像eBay、target、City Group、Sony、Uber、LinkedIn、Medium、Netflix等等的大公司都有在他们的web项目中应用。 怎样学习Node.js呢? Node.js的开发者来自全球,他们用Node.js开发复杂交互的,数据密集型的WEB Apps和网站。同时网上有着大量的资源和教程教你怎样构建自己的Node.js应用。 我们不防看看Node.js大神针对Web Apps写的Node.js最佳指南。 我们所覆盖的指南将包括针对初学者的Node.js、中级指南,同时还有教你怎样构建复杂的Node.js项目。 对于完全的Node.js初学者,  在深入挖掘本文章后续提到的学习项目之前,一步步按照airpair.com上面入门指南的要点 或Node.js入门指南 之类的文章学习是不错的选择。Nodeschool.io是另一个比较好的网站,上面有着非常多的资料,可以学习基本的node.js及相关的技术。 通过Express框架和Socket.io构建即时通讯APP 将一个新技术学到一定高度的最好方式就是通过功能性的应用了。在这个指南中,你将学习使用Express框架和Socket.io构建即时通讯应用,这些技术可以使用基于事件的双向通信。在这个指南中,你还将使用JavaScript模板引擎Jade。 我们要介绍的指南由Krasimir Tsonev所撰写,发布在tutsplus.com上面,从node.js的环境搭建,使用Express框架的后端服务,到最后使用Jade模板引擎的前端UI开发,覆盖了所有前端到后端的方方面面。 你可以在后面这个链接中找到这篇指南:  即时通讯(Node.js Tutorial – Real Time Chat) . 使用Swagger创建Restful API 这个精心设计的教程解释了如何使用Swagger来创建Rest API,并且包括了Rest API应该支持的所有操作(CRUD,创建,查询,更新,删除)。这个例子是由来自scotch.io的Samuela Zara提供的,它实现了管理电影集合的Rest API。 Swagger是一个非常强大的框架来描述REST APIs,它提供了交互式的API文档编辑,客户端sdk生成以及发现服务。通过使用Swagger,你所书写的API将更容易被大家所理解并且使用。 在这个教程中,Samuela一开始先教会大家如何安装node.js的Swagger模块,然后介绍了Swagger提供的模拟模式。通过这个模式,API开发者可以先集中精神进行API本身的设计,而不用写一行的代码。当这个API结构被设计完成之后,教程开始带领大家具体实现获取电影,增加/修改电影以及删除电影的操作。 你可以通过Restful API in Node.js using Swagger这个链接来访问该教程。 在 Node.js 中使用 Nodal 建立 API Services 在大多数模块和框架之上,你就不会需要再建立任何简陋的 JavaScript/Node.js 项目。为了多平台(移动端,web,IOT)产品开发,面向服务的架构是关键的,而本教程就将带你更进一步。 在本教程中,Keith Horwood 利用 Nodal 框架在 Node.js 中来创建 API services,并让这一切看起来极其简单。Nodal 是一个可扩展的,以意见为依据的全服务框架,它帮助数据中心加快在 Node.js 基础上的API创建。 在本教程中,你将会在开发 MVC (模型,控制器和视图)之前安装 node.js 环境,安装 Nodal 和 postgreSQL。 你可以在这里找到本教程: 在 Node.js 中使用 Nodal 建立 API Services. Node.js Apps – 使用通行证进行社交认证 社交认证几乎随处可见,因为我们绝大多数人在Facebook […]

龙生   30 Jun 2016
View Details
1 263 264 265 414