作者归档

Android Studio …aapt.exe” finished with non-zero…解决

升级Android Studio为2.2.2之后,旧项目编译出错,Android编译时出现如下错误

Error:Execution failed for task ':app:processAndroid360XmDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Develop\Android\sdk\build-tools\21.0.0\aapt.exe'' finished with non-zero exit value -1073741819

搜索良久,很多做法都试了不好使,偶然间发现有人说可能使用JDK8的缘故,果断切JDK7尝试,尝试结果是根本切不回去,Android Studio 2.2.2提示使用JDK 8或者更新的版本。 查看更多...

sudo * 提示 command not found 解决

linux下经常遇到使用非root用户安装软件,使用sudo时提示找不到命令。

比如使用nodejs时候,出现

sudo: node: command not found
sudo: npm: command not found

很多文章说export临时修改环境变量或者直接sudo后chown指定命令所在文件夹的所有者,但是我们通常是在非root用户下使用,所以只需在root用户下增加部分软连接即可 查看更多...

iScroll5实现卡片左右滑动及动态加载

iScroll5是在iScroll4的基础重构而来,使用时发现网上大部分例子都是基于iScroll4,在iScroll5上面并不适用,比如横向滚动、当前索引、元素对齐等,这些不在赘述,有需求可以考虑去看看源码(重构过的源码看起来清爽很多)。

因为自己需要一个卡片左右滑动的效果,同时还希望有边界对齐的能力,不清楚这个效果有没有类似实现,大概看了下,新版iScroll也不是很大,就直接拿来用了,效果如下图所示:

iscroll5-1
查看更多...

安卓Adapter中getView方法重复执行及索引错位问题解决

Android开发中,经常会用到ListView,当然,也会用到Adapter为ListView绑定数据。通常,我们采用继承BaseAdapter并实现getView等方法的方式为ListView渲染数据,ListView中每个元素都会去调用getView做渲染。但是,如果ListView要展示数据非常庞大,创建成百上千个View是不可取的,于是乎,Android为我们提供了一套Recycler机制,可以重复利用已创建的View,降低对象开销。

原理如下:

在一个完整的ListView第一次出现时,每个Item都是null的,getView的时候会跑到需要inflate一个Item的代码段,假设整个view只能最多显示10个item,那么当滑动到第11个Item的时候,第一个item会放入"recycler",如果第11个Item和放入"Recycler"的item的view一致,那么就会使用"Recycler"里面的Item来显示,从而不用再重复inflate一次。

图示如下:

adapter-recycler
查看更多...

微信小程序之我见

近几天,互联网圈子里炒得最火的,无非是微信推出的"小程序",虽然还只是内测,但已经被iOS、android、产品、运营、后端、以及刚入门的前端仔等行外人士炒成神了,相比近两年html5热潮,真是有过之而无不及。一直没闲下来,今天总算抽出些时间,稍微发表下个人见解。

"小程序是一种不需要下载安装即可使用的应用,它实现了应用'触手可及'的梦想,用户扫一扫或者搜一下即可打开应用。也体现了'用完即走'的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。"

这里想法美好,但现实很骨感,正如人所说,国内企业做产品,不会愿意用户用完即走,这应该是个解决不了的痛点,所以,上述iOS、android的同学可以洗洗睡了,因为这玩意真抢不了你们什么,真有时间关注行外技术,倒不如去了解下hybird开发或者React Native之类。

至于产品、运营,这些人本身就很少懂技术,就像当年把webapp或是其他称作h5,以致于现在h5在国内成为一个神一样的名词,但国际上却不通用,所以,对于产品、运营的热捧,实在是听听就好,不必当真。说什么和原生一样的体验,有什么用么? 查看更多...

为什么建议不要使用「h5」这个简称?

最近发现好多人喜欢将 HTML5 说成 h5,甚至是代指移动端的 Web 页面或者 Web App。虽然说起来朗朗上口,但是小编真的不建议这样来使用。

小编很早之前做过一个关于「h5 这个说法是否喜欢」的调查,总共有 552 位粉丝参与,最终结果是:有 16.7% 的人认为「很好」,37.5% 的认为「无所谓」,有 45.8% 的人认为「不喜欢」(投票数据的原始查看地址: http://vote.weibo.com/poll/2905710 )。那究竟为什么会有那么多人不喜欢「h5」这个简称呢?

「h5」这个简称非常不专业,容易造成误导。

与 JavaScript 被简称为「JS」不同,据小编了解到的情况,h5 这个说法目前只在中国大陆地区的程序员中使用,台湾、印度和美国等地区并没有这个简称,会造成国内外技术说法不一致。而更重要的一点是,JS 是一个指代清晰的简称,没有歧义,就指 JavaScript 这种程序语言。但 h5 却不是,至少 HTML 中还有个 h5 标签。 查看更多...

简易Express资源合并中间件http-concat

相信很多前端童鞋都见过一些网站有如下url输出js或者css

http://example.com/??script1.js,script2.js,build/script.js

http://example.com/??script1.js,script2.js,build/script.js?v=2016

http://example.com/??style1.css,style2.css,build/style.css

http://example.com/??style1.css,style2.css,build/style.css?v=2016

在以前,使用YUI、DOJO等企业前端库的时候,往往会用到类似功能,最近使用express,搜了下似乎没有类似中间件,索性自己写一个,参数形式参考了阿里的nginx-http-concat(似乎目前大部分有此类功能的网站都是采用阿里的nginx模块实现)。代码如下:
查看更多...

使用iptables限制访问网站指定端口

Linux用得比较少,所以对iptables也不是很熟悉,最近部署网站,因为对外的80端口是通过nginx转发,而内部程序都是类似8080、3000之类的端口,不做处理的情况下,很可能会看到如:地址www.poorren.com、地址www.poorren.com:8080同时可以访问的情况,这样对于SEO其实是很不利的,比如cnodejs.org,经常会搜到NodeJS相关文章,但是路径是cnodejs.org:8080,这样一来给用户带来不便,二来多个相同内容也一定程度上降低权重,所以,我们要禁止对带非80端口的路径进行访问。

看了相关文章,都是推荐iptables配置,尝试一番后解决了手头上问题,特记录一下,利人利己。

配置很简单,命令如下:

1、在tcp协议中,禁止所有的ip访问本机的8080端口。

iptables -I INPUT -p tcp --dport 8080 -j DROP

2、允许127.0.0.1访问本机的8080端口 查看更多...

Node应用的进程管理器之PM2

一直以来,没有机会在商业项目、网站上正式用起来NodeJS,说起来挺遗憾的,最近公司网站重构,同时为了配合做些SEO优化,经过一系列筛选后选择了使用NodeJS来支撑前端展现。

在刚接触NodeJS时,也像很多人一样,想问有没有针对NodeJS的热部署方案,后面发现windows下使用nodemon挺好用,但只是简单的自动重载,似乎放到网站上有些不够用,看到翻译后的express官网有介绍进程管理器StrongLoop Process Manager、PM2和Forever,StrongLoop Process Manager是IBM一家子公司维护的,不过国内没见太多人用,大部分都是选择Forever或者PM2(似乎现在PM2使用率更高),对比后选择了PM2。

PM2 是一个带有负载均衡功能的 Node 应用的进程管理器。使用它,可以充分利用CPU多核优势,让你的NodeJS程序完全应用服务器CPU,并且可以保证进程"永远在线",同时,可以实现0秒重载等。

PM2主要特性如下:

1、内建负载均衡(使用 Node cluster 集群模块)
2、后台运行
3、0 秒停机重载,因为带了有负载均衡功能,可以使用pm2 gracefulReload app来实现平滑重载
4、具有 Ubuntu 、CentOS等启动脚本,可以简单实现开机自动启动
5、停止不稳定的进程(避免无限循环) 查看更多...

我为什么选择Nunjucks作为NodeJS模板引擎

最近换了工作,在新的工作中,需要实现后端渲染,故而一改最初的纯html+js形式,选择页面框架、TDK及部分页面后端渲染,由于后台采用java开发,一开始曾考虑另起一个tomcat服务,用于渲染前端页面,而实际搭建完框架后发现,一年多不碰java(期间虽然用过Groovy、kotlin,但实际开发起来还是不如js来得畅快),已经对java的繁琐有些不耐烦,最后转而选择采用NodeJS做后端渲染,一来部分前端模板可以复用(后面发现复用其实是个很纠结的想法),二来做前端开发的兄弟也可以快速上手,相比他们并不懂的java来说,毕竟NodeJS更容易学习接受。

确定了适用NodeJS,下面就确定一下大概框架,采用了目前常见的组合——express+template,因为最初前端使用了所谓最快的模板引擎artTemplate,这里tempate想进行复用,就采用了服务器版artTemplate,实际测试发现并不符合我的需求,由于最近一年使用PHP的YII框架,其中模板layout可以使用block,很方便重写样式、脚本等部分,这里实测后发现,后端模板如果没有layout,基本和写纯静态无异了。 查看更多...