聚合文章列表
16 浏览

如何实现安卓消息推送

最近突然对安卓消息推送的原理感兴趣,找了不少资料,实现了一个包括服务端和客户端的简单Demo。在具体实现的时候踩了不少坑,这里做一下笔记,防止以后忘记。安卓消息推送的实现方案有下面几种:MQTT协议实现XMPP协议实现C2DM云端推送功能(google官方提供,系统内置,但是国内用不了……)中国统一推送(工信部牵头成立,但是目前只是开了几次会议,并没有什么实际的接口出来,不过以后应该会是中国境内的首选方案)我这里选择了MQTT协议去实现。MQTT协议MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。本协议运行在TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。它有以下特点:使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。消息传输不需要知道负载内容。提供三种等级的服务质量

消息系统 2017-12-16 发布
22 浏览

如何在 Angular 初始化前,呼叫 API 取得設定檔

有時候我們希望能在應用程式執行前先取得設定檔,然後應用程式再根據設定檔去做對應的動作,AngularCLI專案有準備environment設定檔讓我們使用,但有些情況我們希望從遠端,例如透過呼叫API的方式,取得設定值,這時候開怎麼做呢?RouterResolver如果有使用路由模組,可以藉由實作一個Resolver,讓使用者在進入該路由所導向的頁面前,先執行該Resolver內的resolve()方法,這裡就可以使用HttpClient呼叫API,接著你就可以取得你想要的設定值做處理。相關使用方法請參考CK’sNotepad-AngularRouterResolve。但這方法必須要設定每個路由都要執行該Resolver,然後在每個路由頁面都要寫取得該設定值的動作,而且這樣做會每切換一次路由,就呼叫一次API。我們希望能在應用程式層級,只做一次取得遠端設定檔的作業就好,該怎麼做呢?APP_INITIALIZERAngular提供了用於配置系統初始化相關作業的T

JavaScript 2017-12-15 发布
14 浏览

javascript设计模式——享元模式

javascript设计模式——享元模式前面的话享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了。在javascript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事情。本文将详细介绍享元模式享元模式初识假设有个内衣工厂,目前的产品有50种男式内衣和50种女士内衣,为了推销产品,工厂决定生产一些塑料模特来穿上他们的内衣拍成广告照片。正常情况下需要50个男模特和50个女模特,然后让他们每人分别穿上一件内衣来拍照。不使用享元模式的情况下,在程序里也许会这样写:varModel=function(sex,underwear){this.sex=sex;this.underwear=underwear;};Model.prototype.takePhoto=function(){console.log(

JavaScript 2017-12-16 发布
AD 友情赞助
18 浏览

把DataTable转换为List

publicstaticListToList(thisDataTabledt){vardataColumn=dt.Columns.Cast().Select(c=>c.ColumnName).ToList();varproperties=typeof(T).GetProperties();stringcolumnName=string.Empty;returndt.AsEnumerable().Select(row=>{vart=Activator.CreateInstance();foreach(varpinproperties){columnName=p.Name;if(dataColumn.Contains(columnName)){if(!p.CanWrite)continue;objectvalue=row[columnName];Typetype=p.PropertyType;if(value!=DBNull.Valu

.Net 2017-12-15 发布
14 浏览

英伟达为机器学习应用开发人员推出低价AI显卡

PingWest品玩12月15日报道,在上周于加利福尼亚州长滩举行的年度“神经信息处理系统”大会上,英伟达公司首席执行长黄仁勋(JensenHuang)出乎意料地向参会者和媒体宣布,该公司将推出一款针对人工智能和机器学习开发者的新显卡。英伟达的TitanV显卡外观像游戏用传统显卡,但该新产品实际上能提供一种不同水平和类型的性能。TitanV采用之前仅供在服务器上设计中使用的NvidiaVolta架构,定价3,000美元。目标用户为机器学习应用开发人员。英伟达提供基于计算选项(而非游戏和渲染)的显卡时间早于其它科技公司,因而垄断了开发者周期。更多精彩请关注我们的微信公众号;PingWest品玩新闻线索请投稿至:wire@pingwest.com硅星人(ID:guixingren123)扫码关注硅星人公众号,为你讲述关于硅谷的一切

程序员 2017-12-15 发布
14 浏览

和程序员借钱,这回复绝了!原谅我只猜中了开头却没猜中结尾

借钱程序员A:哥们儿,有钱吗?程序员B:有程序员A:借我点呗?程序员B:啊?你说什么?程序员A:借我点呗?程序员B:不是,上一句?程序员A:有钱吗?程序员B:没有。程序员A:晕,程序重新请求一下,结果还不一样了!你TMD在逗我吗程序员找不女朋友的原因程序员问禅师:“大师,我身体健康,思想端正,各方面都不错,为何就是找不到女朋友呢?”禅师浅笑,答:“原因很简单,不过若想我告诉你,你需先写一段java代码。”青年略一沉吟,写完了。“再写一段C#”写完了,“再写一段php”写完了,“再写一段javascript”,写完了,“这就是原因”。你是真傻还是假傻啊为什么程序员苦逼某小偷潜入某IT公司欲行窃,没想到始终有人,他只好等啊等啊等,结果始终有一大拨人在加班。过了一个月,小偷终于逮到机会溜出来。同伙问:去哪了?小偷:在IT公司呆了一个月。同伙:收获不错吧?小偷苦笑:别TM提了,三十个大夜下来,我现在已经学会写程序了。熬夜蹲守眼已瞎程序员眼中的爱

程序员 2017-08-23 发布
AD 友情赞助
15 浏览

迄今为止见过最牛逼的程序员,48小时写完街头霸王,不愧代码之王

今天小编我逛论坛,看到了一位大佬程序员分享的游戏,使用JavaScript做的,大佬10小时就搞定了这个小游戏,不愧是前端领域的顶尖人物,抱着膜拜的心情,小编我也下载了一份源码进行学习运行,暂时没有发现一点BUG,只能说这位大牛对JavaScript了解的太深了,完全是我等小白不能企及的,顺便分享给头条上的小伙伴学习,大家一起进步,一起膜拜这位JavaScript大佬,废话不说直接上图。街头霸王大家应该都玩过吧,好吧截图示意下:

程序员 2017-12-19 发布
20 浏览

数人云|一文读懂企业如何落地微服务,循序渐进5步走

近来,企业转向微服务架构已经成为一个非常火热的话题,但是如何将微服务在企业中落地很多人不得其解,今天数人云带来的文章,就从循序渐进5步走的方法阐述企业级落地微服务的模式,同时也带来了向微服务转型从团队角度的一些思考。微服务架构(MSA)正在重塑企业IT生态系统,它最初只是一种机制,将大型单体应用程序分解为一组独立地、功能集中的应用程序,这些应用程序可以独立地设计、开发、测试和部署。MSA的早期采用者运用这种模式来实现其后端系统或业务逻辑,一旦他们实现了这些所谓的后端系统,就有了在整个董事会中实现相同模式的想法,本文主要讨论可以在微服务驱动的企业总可以使用的解决方案模式。企业向微服务转型的5步走如果从上往下看,企业IT系统看起来就如下图所示:如图所示,系统由水平和垂直的多层组成,业务逻辑将在后端系统中作为单片应用程序实现,并且将有像ERP、CRM等第三方系统,在后端系统之上,有一个集成层,将异构后端系统连接在一起,一旦这些服务被集成,就需要通过API管理层作为托管API公开为内部和外部用户的API,安全性和分析将在所有者三层中使用,

软件架构 2017-12-15 发布
15 浏览

给还在犹豫选择的你,微服务架构与整体架构的各自优势

微服务目前是软件开发的一种新趋势,我们所熟知的谷歌、亚马逊,Netflix等都在使用微服务架构。但微服务架构与整体架构的区别在哪?微服务架构又需要注意哪些运营成本?数人云今天给大家带来的文章将阐述这几个问题。本文我们将讨论微服务架构与整体架构的区别,为了清晰起见,本文假设:在此上下文中微服务的定义是需要服务之间的物理分离。微服务加固被认为是“恰当”的即:在没有/最小的RPC通信请求/服务之间的应答每个服务都封装了持久性每个服务都表示一个功能,没有“数据库服务”如果其中任何一个假设不存在,则结论可能就是无效的。MartinFowler在分享中强调了近年来“技术趋势”的一些方面:备受瞩目的是关于“微服务”的架构模型,属于的正是定义,以及通过对需求的仔细分析和项目的情况所产生的问题。当然,问题不在于用何种架构模式,而是在于为特定的场景提供解决方案,及应用时缺少匹配的需求。技术推动了微服务的快速落地,近年来出现的新兴技术往往都已经被微服务架构所采纳,比如:容器化(Docker,Kubernetes)函数式编程反应性

软件架构 2017-12-15 发布
AD 友情赞助
16 浏览

技术大咖说:从“菜鸟”码农到“资深”架构师

工作了挺久,发现有个挺有意思的现象,从程序员、高级程序员,到现在挂着架构师、专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了。这些疑问有些来自于跟小伙伴的交流,有些是我的自问自答,有些到现在也想不清楚,这篇文章就来写一写这些问题。如何更高效的学习?很多新人程序员一开始在学习上找不到方向,但我想在渡过了一段时间的新手期之后,这类问题大多都会变得不再那么明显,工作的方向也会逐渐变得清晰起来。但是没过多久,能了解到的资料就开始超过每天学习的能力,像是买了没看的书、收藏没读的贴、Mark了之后再也没有关注过的文章越积越多,更别提每天面对各种技术分享或者微博里的新鲜玩意了。大多数人每天能留给自己学习的时间有限,这个阶段如何提升学习效率就成了要解决的重点。说说自己提升学习效率的心得,非常简单:体系化的学习。我曾经很喜欢看一些博客或者是一些“看起来”比较通俗易懂的文章,每天在微博微信里刷到什么技术文章就Mark下来,基本上几分钟就能读完。可一段时间下来,虽然读了不少东西,但是还是有种在原地打转的状态,并

软件架构 2017-12-15 发布
15 浏览

企业微服务架构转型-技术平台(12.15)

前面有一篇文章谈了企业微服务架构中的中台,实际上在中台的下面应该还有一层技术平台。这篇重点谈下技术平台本身的构建策略和包括的内容。微服务架构强调将传统的单体应用打散为从数据库到中间件到部署包(前端+后端)完全独立的多个松耦合的微服务模块。简单来说仍然是传统的业务系统要实现业务组件化拆分。而传统业务系统包括了技术平台或组件+业务组件1+业务组件2+...+业务组件N我们再来简单举例说明下:采购系统=采购技术平台+招投标模块+采购订单管理模块+供应商管理模块库存系统=库存技术平台+出入库管理模块+台账模块+配送模块而这个时候采购技术平台和库存技术平台本身具有大量的重复内容,包括了常说的4A和工作流引擎,也包括了类似消息,缓存,日志处理,文件存储,短信邮件等各种技术模块。那么我们首先要考虑到的就是首先将传统业务系统中的技术平台部分剥离出去,统一下沉到公共的技术平台层构建,构建完成后再以能力开放接口的模式供上层业务模块调用。因此共性技术能力下沉到技术平台,使得传统业务系统

软件架构 2017-12-15 发布
17 浏览

05.haproxy+mysql负载均衡 整合 redis集群+ssm

05.haproxy+mysql负载均衡整合redis集群+ssm本篇重点讲解haproxy+mysql负载均衡,搭建完成后与之前搭建的redis+ssm进行整合(注:这里用到了两台mysql数据库,分别安装两台虚拟机上,已经成功实现主主复制,如果有需要,请查看我另外一篇博客:http://www.cnblogs.com/cuijiale/p/8039421.html)1、首先下载最新的的haproxy安装包:haproxy-1.7.9.tar.gz下载完成后cp到特定的目录下/usr/local2、安装haproxy解压“tar-zxvfhaproxy-1.7.9.tar.gz”在本目录,压缩完成后“cdhaproxy-1.7.9”执行安装命令“makeTARGET=linux3100CPU=x86_64PREFIX=/usr/local/haproxy-1.7.9”“makeinstallPREFIX=/usr/local/haproxy-1.7.9”3、安装完成后配置

MySQL 2017-12-15 发布
AD 友情赞助
17 浏览

SQL Server 全文搜索

SQLServer全文搜索SQLServer的全文搜索(Full-TextSearch)是基于分词的文本检索功能,依赖于全文索引。全文索引不同于传统的平衡树(B-Tree)索引和列存储索引,它是由数据表构成的,称作倒转索引(InvertIndex),存储分词和行的唯一键的映射关系。倒转索引是在创建全文索引或更新全文索引时,由SQLServer自动创建和维护的。全文索引主要包含三种分析器:分词器(WordBreaker)、词干分析器(stemmer)和同义词分析器。全文索引中存储的数据是分词及其位置等信息,分词是基于特定语言的语法规则,按照特定的符号寻找词语的边界,把文本分解为“单词”,每一个单词叫做一个分词(term);全文索引有时会提取分词的词干,把词干的多种派生形式存储为单一词干,这个过程叫做提取词干;根据用户提供的自定义同义词列表,把相关的单词转换为同义词,这个过程叫做提取同义词。生成全文索引是把用户表中的文本数据进行分词(Wordbreaker)和提取词干(Stemmer),并转换同义词(Thesaurus),过滤掉

SQL Server 2017-12-15 发布
16 浏览

Taffy Web开发,Python Flask实践详解

pipinstallflaskpipinstallflask-bootstrappipinstallflask-wtfpipinstallnosepipinstallnose-html-reporting其中nose-html-reporting是nose框架生成html报告插件,需要修改__init__.py编码方式为utf-8(示例路径为C:\Python27\Lib\site-packages\nose_html_reporting\__init__.py),在文件最上方import中添加reload(sys)sys.setdefaultencoding("utf-8")在文件最下方_format_output方法中修改returno.decode('latin-1')为returno.decode('utf-8')2.2下载Bootstrap1)从官网http://v3.bootcss.com/,下载最新Bootstrap版本2)这里我们从http://v3.bootcss.com/gett

CSS 2017-12-15 发布
21 浏览

Texture 布局篇

Texture拥有自己的一套成熟布局方案,虽然学习成本略高,但至少比原生的AutoLayout写起来舒服,重点是性能远好于AutoLayout,Texture文档上也指出了这套布局方案的的优点:Fast:AsfastasmanuallayoutcodeandsignificantlyfasterthanAutoLayoutAsynchronous&Concurrent:Layoutscanbecomputedonbackgroundthreadssouserinteractionsarenotinterrupted.Declarative:Layoutsaredeclaredwithimmutabledatastructures.Thismakeslayoutcodeeasiertodevelop,document,codereview,test,debug,profile,andmaintain.Cacheable:L

CSS 2017-12-15 发布
26 浏览

玩转npmscript自动化构建 支持ES6 支持POSTCSS(3)

本次更新大幅度精简了代码,修复了copy文件的bug,去掉了一些没用的npm包而且新增了浏览器热更新命令依然是1npminstall2npmrundev基本架构就是src是开发文件夹dist是生产文件夹package.json{"name":"npm","version":"1.0.0","description":"","main":"index.js","scripts":{"predev":"echo'开始创建并初始化'","css":"postcss-w./src/css/*.css-d./dist/css","js":"uglifyjs./dist/js/*.js-m-c-o./dist/js/main.js","ES6":"babel./src/js-d./dist/js-w","html_images_watch":"nodehtml_images_watch.js","dev":"nodecreate.js","httpserver":"cddist&&

CSS 2017-12-14 发布
15 浏览

移动端开发框架哪个好?jQuery/Vue/AngularJS有哪些区别和优缺点?

JS框架,我认为大体上可以分为两种。一种是类似jQuery/d3那样的,通过修改html的DOM结构来渲染UI的库。还有一种则是类似于AngularJS/ReactJS那样的,采用MVC分层的,通过Model来渲染ViewUI框架。性能比较jQuery基本都是浏览器原生操作,实计上h5的很多api都借鉴了jQuery,比如说在兼容IE6~IE7的蛮荒时代,HTML是没有按元素类选择器查找元素这类接口的,只有document.getElementById这一个常用的按ID取元素方法。varwrapper=document.getElementById('wrapper')
jQuery实现了一系列的按类/ID/元素名查找元素的引擎。//按ID名var$wrapper=$('#wrapper')//按类名var$wrapper=$('.article-title')不过随着浏览器的发展,浏览器本身也已经支持类选择器了://查找单个元素varwrapper=document.query

jQuery 2017-12-15 发布
19 浏览

【GISER&&Painter】WebGL渲染初体验(一)

基于上一篇OpenGL的渲染原理,这两周又陆续接触了一些关于WebGL绘图的一些内容,因为刚入门,很多东西又很晦涩,所以特意花了小半天的时间整理了一下,特此记录。一画布和画笔:创建Canvas&&获取WebGL的Context在开始WebGL的绘制故事之前,我们得先来认识一下Canvas,因为这玩意是我们之后绘图的基础底板:“Canvas元素创造了一个固定大小画布,并提供了一个或多个渲染上下文,用来绘制和处理要展示的内容”(摘自MDN)。按照定义,我们可以将其理解为渲染任务的中转站,因为最终绘图的输出是要将数据交给屏幕展示的,Canvas只是作为中间暂存待渲染数据的中转站,具有仿屏幕像素矩阵数据结构的一个容器,类似于中间缓存一类的概念。那为啥不直接在屏幕上输出画出来呢?之前听过这样一个解释,缓存的作用在于下一帧没有及时渲染出来的时候(渲染时间超出了人眼的感知帧率,一般24帧),上一帧的数据就能够替代下一帧,以此来保证过程的完整性。WebGL的API提供了能够在支持的浏览器中无插件地绘制交互式的2D/3D图像,而WebGL的渲染上

HTML5 2017-12-15 发布
23 浏览

Vue笔记系列(二)Vue.js渐进

Vue笔记系列1、Vue.js入门3、Vue.js进阶API以下会随用随记一些API,可能会不定期更新。Vue.component(id,[definition]).注册或获取全局组件。注册还会自动使用给定的id设置组件的名称。//注册组件,传入一个扩展过的构造器Vue.component('my-component',Vue.extend({/*...*/}))//注册组件,传入一个选项对象(自动调用Vue.extend)Vue.component('my-component',{/*...*/})//获取注册的组件(始终返回构造器)varMyComponent=Vue.component('my-component')Vue.extend(options).使用基础Vue构造器,创建一个“子类”。参数是一个包含组件选项的对象。注意:data选项是特例,在Vue.extend()中它必须是函数。<!--HTML--><divid="

vue.js 2017-12-15 发布
18 浏览

Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]

一点小遗憾对于Notadd我们本来期望它实现更多...尽管我们也尝试做了很多努力,但是由于PHP本身的局限,以及考虑到开发环境配置的复杂程度,最终使用了折中方案。接下来,我们谈谈整个技术选型历程,也供今后相关开发者做借鉴和参考:起因我们期望Notadd不仅能应用到web领域,在嵌入式开发领域也能有所应用,同时能够使用常用的websocket协议。Swooleswoole是我们考虑的首选方案,但从扩展性来说,难以符合我们模块化的要求,对HTTPS和HTTP2支持不够完善,同时,安装上也难倒一些phper。在ARM板的安装过于复杂。当然也有好的一点,2.0的自动异步对并发量有不少提升。workerman主要问题还在于workerman对HTTP2等协议支持不够完善,同时phpsocket.io只支持服务端模式运行,MQTT协议也没有相应的实现,而且以ThinkPHP开发者居多,成本较高。AmPHPamphp有着最全的协议支持,同时有各种非阻塞拓展,可以说是最符合要求的,但是

vue.js 2017-12-15 发布
AD 友情赞助