2017移动Web APP开发指南
进入2017年,移动开发中采用前端Web技术来取代原生App进行开发越来越风靡,这些得益于JS框架的发展,框架设计演变也更加偏向于移动端,在库体积、效果、性能都比原来版本有长足的进展。本文是对2017年移动WebApp开发库的总结,方便各位读者进行技术选型,同时提供示例来方便学习。文章目录JS框架2017年国内移动WebAPP开发中Vue可谓一枝独秀,可以看到很多公司基于Vue2.0制作了组件库并完成App的制作。Vue在入门学习曲线、库体积以及使用设计上相比React或Angular2都有优势,性能上也完全没有问题。如果你的移动WebAPP项目功能不太复杂,团队参与人数不多,那么使用Vue相关组件和库来进行技术栈构建是2017年最佳的选择。React在移动Web开发中推出了ReactNative解决方案,可惜这个方案因为原生编译的难度,目前仍然没有完全适应生产要求。在移动端直接使用React库需要配合其他UI组件库,例如Framework7。如果是单页应用场景,React还是有性能上的优势,但是工程维护比较困难,对项目成员对
CSS单位全解
对于网页布局的单位,只知道px是仅仅不够的,还需要知道其他几个比较常见的单位,特别是css3推出的一些新的度量单位。emem是一种相对单位,它相对于父元素的字体大小。em常用于存在缩放需求时使用,比如在多行文本段落中,如果行高设置为line-height:18px,如果文字的大小因为缩放发生改变,行高值是不会随之改变的,一直都是18px,如果将行高设置成一种相对值line-height:1.2em,那么此时的行高值就会随着字体的大小改变而变化。因为em是相对于父元素的字体大小,所以该单位存在明显的嵌套层级关系,浏览器默认的字体大小是16px,因此1em=16px,需要注意的是chrome浏览器能够显示的最小字体是12px,当字体大小设置小于12px字体将按照12px显示。SeethePenembyYeaseonZhang(@YeaseonZhang)onCodePen.remrem(rootem)是一种相对单位,和em不同点是rem
NSQ分布式消息队列
首发于苏依蜀黍de小木屋写文章登录NSQ分布式消息队列苏依5hoursagoArealtimedistributedmessagingplatform一.简介开源社区可选的队列一搜一大把,断断续续RabbitMQ/Celery/Kue都有用过,但或多或少,因为语言以及维护、可扩展性方面,都不是很令人满意。举例来说RabbitMQ语言不通,维护困难;Celery总有奇奇怪怪的问题(我姿势不对?);Kue依赖Redis就目前的使用来说,还是挺方便的,至少我的测试环境还没出个太大问题;唔,好像忘了kafka...(Java万年黑表示不想多说)想用NSQ的原因大概是:golang开发分布式设计部署简单客户端丰富http接口简单易用稳定性高?(官网文档写的,有待验证!)二.使用据说部署简单,怎么个简单法呢?看下面:#docker-compose.ymlversion:'3'services:nsqlookupd:image:nsqio/nsqcommand:/nsqlookupd#p
Celery 源码解析八:State 和 Result
Celery源码解析八:State和Result在前面几篇解析中,我们已经看过了Worker是如何运行的,Task是如何创建的,以及怎么被路由到Worker中,除了这些之外,我们还对流量限制,Worker控制和Task/Worker产生和处理Event进行了介绍。但这却不是全部,今天我将继续和大家一起来看看Celery的TaskResult和State相关的内容。TaskState在celery/celery/states.py中,可以看到Task的所有State至于如果想要看Task的状态转变,那我们就需要回顾一下Task从产生到完成的过程,如果是一个普通的Task的话,那么它的执行流程应该是:从Producer产生-①->MQ-②->Consumer接收-③->执行策略执行-④->执行完成那么这里的①②③④有没有设置状态,并且状态是啥,就是我们关注的重点了,ok,那我们就跟随之前的脚步快速得发掘一番:这个是同步发送消息的
Semtech推出全新工具 开发人员使用LoRaWAN协议体验改善
网关高性能模拟和混合信号半导体及先进算法领先供应商SemtechCorporation(Nasdaq:SMTC)今日宣布:推出集成了Semtech的LoRa®器件和无线射频技术(LoRa技术)的微微型(picocell)网关模拟器,其中包括Linux实用程序和Microsoft®Windows支持软件,并提供一个免费的、非商用的LoRaWANTM网络服务器演示平台。全新的工具将帮助低功耗广域网(LPWAN)应用开发人员快速地将其基于LoRa技术的物联网(IoT)产品创意形成样品并进行演示。基于LoRa的Picocell网关USB模拟器Semtech基于LoRa的picocell网关模拟器可以很容易地通过一个USB端口连接到一个基于Linux或Windows的处理器上,它们是LoRaWAN网关开发人员最常用的软件系统。WindowsGUI在不需要额外开发板的情况下可简化网络连接。该工具的目标是加速将物联网技术部署在下一代智能应用中的过程。在初始原型阶段之外,多家LoRa联盟(LoRaAllianceTM)会员可提供兼容的商用、可生产级
2018年即将到来的八大Web发展趋势
自网络出现以来,一直处于不断发展的状态。Mosaic和NetscapeNavigator在早期推广互联网方面功不可没。从那以后,每年都会出现一些新概念、新想法和新趋势,纵然其中有好有坏。从这些年来的变化和趋势中,我们能得到一个重要教训:成功往往是与把握变革的浪潮有关,而不会随之而来。您可以通过探索未来的趋势,并在他人之前将适用于您的东西结合在一起来实现这一点。以下是八项网络发展趋势,该趋势将2018年对整个行业产生巨大影响:改进在线支持连接用户比以往任何时候都显得更为重要。聊天机器人—那些通过文字或听觉方式与我们进行对话的计算机程序,允许网站有24/7的联系点,而不需要维持24小时的客户服务部门。聊天机器人的发展引发了一些问题,诸如回答常见问题、引导人们访问信息或页面甚至是如何完成交易等。随着消费者越来越适应聊天机器人的想法,也越来越懂得应该如何与他们交互,因此消费者对拥有聊天机器人的网站期望值将会有所增加。渐进式Web应用程序最近一项有关手机使用情况的研究发现,手机应用时间占移动媒体总时间的89%。这是有道理的,利用类
企业转型的必修课 2 | 钛坦白第63期
图片来源:视觉中国企业转型,有时候是企业为了寻找到新的经济增长点,优化资源的分配,提升自身价值,不得不做出的选择。企业转型也是国家经济发展的要求。早在十一届三中全会就提出了产业结构调整,在这30多年间不断强调深化产业结构改革,到今年10月的国务院常务会议,国家通过了《深化“互联网+先进制造业”发展工业互联网的指导意见》,提出要大力发展实体经济,加快转型升级。转型有时候还是持久战,比如万达从1993年到2016年经历了4次转型,从原本单一的地产企业转型到以服务业为主的全方位企业。苏宁作为零售业的巨头,从2009年就开始了漫长的转型之路。同时转型又是一项高风险的战略行为,需要企业经营者做长期的准备,进行更全面的考虑。在钛坦白第58期,我们邀请了万博新经济研究院院长滕泰、中搜网络董事长兼总裁陈沛,以及智慧云领导力发展机构创始合伙人、小村资本合伙人兼首席战略官陈雪频等三位钛客,深入解析企业在转型期应注意的事宜,解答企业经营者的疑惑(干货:http://www.tmtpost.com/tag/1508094)。在本期钛坦白,我们再次
MySQL迁移至SQLite
由于最近学习了Django,想着不然把自己的Blog从Typecho迁移到Django的框架中,其实上层差别不是特别大,一个是PHP一个是Python。下层的话,由于我初学Django基本的教程都是通过SQLite作为默认的数据库的。刚好我做Android开发的时候,其实数据库使用的就是SQLite。因此着手把数据库进行迁移下。遇到了一些坑,记录一下。网上很多SQLite转MySQL的教程,唯独没有MySQL转SQLite的方案。找了几个,大体上的方案都很类似。先将MySQL的DB转换成txt格式,通过批处理修改一下创建表的语法,然后在生成一个SQLite的数据库。实际操作起来不是特别方便,我选择了这个回答下面的方案。得益于dumblob这位开发者开源的这个项目,我在服务器端通过mysqldump和它的脚本生成了一个SQLite3的DB,将其考到本地。由于这个脚本只是生成表结构的,并没有将数据导入进来,所以下一步的计划是将数据导入到新生成的SQLite3DB中。在导入的过程中发现了,若按照正常的生成
Otter探索(一):canal基本概念
终于把otter同步跑起来了,感觉还是应该需要做一下小结,第一是防止自己忘记,第二是方便他人,因为才疏学浅,希望不对的地方大家予以指正。这篇主要是介绍一下Canal,因为Otter设计基于Canal开发的。工作原理这里我们主要引用官网介绍mysql主备复制实现从上层来看,复制分成三步:master将改变记录到二进制日志(binarylog)中(这些记录叫做二进制日志事件,binarylogevents,可以通过showbinlogevents进行查看);slave将master的binarylogevents拷贝到它的中继日志(relaylog);slave重做中继日志中的事件,将改变反映它自己的数据。canal的工作原理原理相对比较简单:canal模拟mysqlslave的交互协议,伪装自己为mysqlslave,向mysqlmaster发送dump协议mysqlmaster收到dump请求,开始推送binarylog给slave(也就是canal)canal解析binarylog对象(原始为
缺陷跟踪管理系统 OTRS
系统环境:Centos6.9mysql-server-5.1.73-3.el6_5.x86_64Httpd-2.2.15-29.el6.centos.x86_64Otrs-3.3.5-02.noarch.rpm下载地址:OTRS一、Mysqlinstallyum-yinstallmysql-server/etc/init.d/mysqldstartmysqladmin-urootpassword123mysql-uroot-pEnterpassword:>>输入刚才的设置的密码mysql>createuser'otrs'@'localhost'identifiedby'otrs';>>创建数据库用户otrsmysql>grantallonotrs.*to'otrs'@'localhost';>>授权otrs用户mysql>flushprivileges;>>最后刷新下数据库更改数据库开机自启动chkconfig
tsbatis-tools 批量Entity导出
tsbatis现在还在preview版本,大量的测试工作还没有完成,但是已经发现一个问题,就是每次写entity会很浪费时间,为了提高效率,我们开发了一个工具来解决这个问题。目前可以支持sqlite和mysql批量导出entity。TsBatis-Tools下载tsbatis-tools基于express开发,所以我们可以再github上面下载源码:https://github.com/wz2cool/tsbatis-tools运行运行程序也非常简单,和node程序运行一致。$npminstall$npmstart然后我们就可以打开http://localhost:3000访问即可。sqlite支持文件选择对于sqlite支持,我们需要填写sqlite文件所在地址即可。选择表我们选择那些表需要导出成为tsbatis的Entity,然后点击Export按钮即可。mysql支持链接地址对于mysql支持,我们需要填写mysql数据的链接信息。选择表这里选择表和上面sqlit
vue+webpack 升级后在原有项目上的适配问题
古人云:不作死就不会死本人的项目是vue+webpack,vue单文件中使用了Jade模板与less预编译器起因是因为谈论到Jade模板问题,Jade早已改名为Pug,并且发布了2.0版本,想着不如升级了吧,顺便把webpack与vue也一并升级了,事实证明,升级需谨慎==首先之前的版本如下:"vue":"2.4.2""webpack":"2.7.0"升级后的版本为:"vue":"2.5.7""webpack":"3.8.1"运行npmupdate,一切正常,然而运行vue项目就开始报错了//webpack报错(node:45948)DeprecationWarning:loaderUtils.parseQuery()receivedanon-stringvaluewhichcanbeproblematic,seehttps://github.com/webpack/loader-utils/issues/56parseQuery()wil
Vue2 源码漫游(二)
描述:在(一)中其实已经把Vue作为MVVM的框架中数据流相关跑了一遍。这一章我们先看mount这一步,这样Vue大的主线就基本跑通了。然后我们再去看compile,v-bind等功能性模块的处理。一、出发点path:platforms\web\entry-runtime-with-compiler.js这里对原本的公用$mount方法进行了代理.实际的直接方法是core/instance/lifecycle.js中的mountComponent方法。根据组件模板的不同形式这里出现了两个分支,一个核心:分支:1、组件参数中有render属性:执行mount.call(this,el,hydrating)2、组件参数中没有render属性:将template/el转换为render方法核心:Vue.prototype._render公共方法/*@flow*/importconfigfrom'core/config'import{warn,cached}from'core/util/index'import{mark
通过JS实现的密码加密
1、base64加密在页面中引入base64.js文件,调用方法为:
border属性的多方位应用和实现自适应三角形
border属性是在实际的应用中使用频率比较高的一个属性,除了作为边框使用,利用border属性的一些特征以及表现方式,可以在实现一些比较常见的效果(如等高布局,上下固定内容滚动布局和绘制CSS图标等),利用css3新增的属性值(如使用图片填充边框)可以实现一些更复杂的效果。本文不介绍border的属性的基本应用方法,将直接介绍如何通过border属性实现一些常见的效果。利用border画三角形和梯形等多边形在CSS中,常见的平面图形为矩形以及圆形。但是难免有些情景需要我们利用CSS去绘制三角形、梯形和平行四边形等。此时我们可以利用border在渲染时的一些表现特点来实现这些功能。以下讲解如何一步一步得到三角形。首先我们写一个div,样式如下.border{width:200px;height:100px;margin:0auto;border-top:40pxsolidred;border-bottom:40pxsolidgreen;border-left:40pxsolidyellow;b
2017 年 10 月:15 个有趣的 JS 和 CSS 库
{"debug":false,"apiRoot":"","paySDK":"https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs","wechatConfigAPI":"\u002Fapi\u002Fwechat\u002Fjssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":"2|6dca2cb9|55fe4ed80cac4a8e40ac498c54e718dd59fd01810bf81f940cfc1a8c5df91ddd5fab188a|1511426724","X-UDID":null,"Authorization":"oauthc3cef7c66a1843f8b3a9e6a1e3160e20"}}
WEB 前端菜鸟,感觉很迷茫,该怎么做?
前几天看到这样的问题先说问题吧:感觉前端涉及到的东西太多了,自己也很浮躁,看了挺多书,可是代码缺敲得却不多。技术菜,又什么都想学,比如现在纠结要不要先学scss或者php或者angularjs,backbone等框架,还是深入学习html5+css3?然后看了一些招聘要求发现又有一些坑要填,经常处于焦躁状态,感觉心好累,然后心一累,又知乎上看各种打鸡血的东西,这鸡血一打多,头脑就热起来了,就想毕业去北京闯一闯了,但又好担心去了找不到工作,想问下前辈们,要找到3000以上的前端工作的话,我得在哪方面多准备?计算机行业很多领域都符合82定律,也就是20%的东西的使用频率占到80%,所以很适合囫囵吞枣,因此我们的重点就是把这20%学起来,而首先要做的就是把这20%的东西找出来。在我看来前端这20%的东西大概就是常用的html标签,css的盒子模型,基本的原生js,以及熟练使用jquery,ajax,常见浏览器的兼容。拿下这些东西意义非凡,一方面证明你适合做前端这份工作,另一方面这些技能能让你找到一份工作。让你能够从容地去学习剩下的80%。总
Riot - 你的下一个框架
我为什么要用Riot优点明显,体积小,加载快,继承了react,Polymer等框架的优势,并简化他们,主要从以下几个方面考虑:1.自定义标签。Riot在所有浏览器上支持自定义标签,我们能将页面组件化,一个自定义标签结构如下所示:{item}
Acmecommunity
vue 项目中实用的小技巧
#在Vue项目中引入Bootstrap有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm安装时,可能会出现一系列的错误1、安装jQuerynpminstalljquery2、安装Bootstrapnpminstallbootstrap@3以上两步,也可以先在package.json配置文件中指定版本号,然后运行npminstall安装完了以后项目是跑不起来的,尽管二者都已经安装成功了,但还是会报错“Bootstrap'sJavaScriptrequiresjQuerynpm”,为了解决这个问题,可以在main.js入口文件中这样引入:import$from'jquery'window.jQuery=$require('bootstrap')接下来,为了能够使用Bootstrap的样式,可以在入口文件中引入bootstrap.css。这个跟引入ElementUI的方法一样import'bootst
HTML5原生拖拽/拖放⎡Drag & Drop⎦详解
前言拖放(drap&&drop)在我们平时的工作中,经常遇到。它表示:抓取对象以后拖放到另一个位置。目前,它是HTML5标准的一部分。我从几个方面学习并实践这个功能。拖放的流程对应的事件我们先看下拖放的流程:选中--->拖动--->释放然后,我们一步步看下这个过程中,会发生的事情。选中在HTML5标准中,为了使元素可拖动,把draggable属性设置为true。文本、图片和链接是默认可以拖放的,它们的draggable属性自动被设置成了true。图片和链接按住鼠标左键选中,就可以拖放。文本只有在被选中的情况下才能拖放。如果显示设置文本的draggable属性为true,按住鼠标左键也可以直接拖放。draggable属性:设置元素是否可拖动。语法: