`
文章列表
CLI启动 有种流行的做法是把cli和实现分离,比如grunt-cli和grunt。hexo也是采取这种方式,hexo-cli专门处理命令行,hexo才是具体的实现。可以像bash一样执行hexo-cli的命令 启动脚本 #!/usr/bin/env node 'use strict'; require('../lib')(); 搜索路径,初始化Hexo 上面的脚本,实际上执行的是lib/index.js,核心代码如下。为了方便阅读,省略了与流程无关的代码: findPkg(cwd, args).then(function(path){ if(!pat ...
基本流程 首先需要登录微信公众号管理后台,配置允许跳转的域名。该域名必须是2级域名,不支持1级域名。所以数量有限,需要规划好。比如配置了a.exmaple.com为跳转域名,就无法再跳转到b.example.com了。如果这里配置错误的话 ...
获取真实frame 在不用Masonry时,frame在创建UIView时就已经确定,例如: CGRect frame = CGRectMake(0, 0, 375, 200); UIView *view = [[UIView alloc] initWithFrame:frame]; 或者 UIView *view = [[UIView alloc] init]; view.frame = CGRectMake(0, 0, 375, 200); 但是使用Masonry时,坐标是根据约束计算得到的。在init方法里,view的frame是(0, 0, 0, 0),这不是view ...
MJRefresh是流行的下拉刷新控件,前段时间为了修复一个BUG,读了它的源码,本文总结一下实现的原理 下拉刷新的基本原理 大部分的下拉刷新控件,都是用contentInset实现的。默认情况下,如果一个UIScrollView的左上角在导航栏的正下方,那么它的contentInset是64,而contentOffset是-64。继续下拉的话,contentOffset就会越来越小,如果上滑,contentOffset就会增大,直到左上角达到屏幕的左上角时,contentOffset刚好为0 默认情况下,如果下拉一个UIScrollView,在松手之后,会弹回初始的位置(导航栏下方)。 ...
最近流行的一种界面效果,是瀑布流的header固定,也叫sticky header或者parallax。对于UITableView,可以比较方便地让table header固定,但是对于UICollectionView,原生的iOS API比较难以实现。本文推荐一个开源组件,专门用于实现这种效果 ...
被遗忘的Logrotate
什么是emoji emoji在诞生之初有多种标准,所以早期兼容性是个问题。但是现在已经标准化了,是unicode的一部分。可以认为,跟字母、汉字一样,emoji就是unicode中一个普通的字符 但是emoji通过utf-8编码后,每个字符占4个字节,属于宽字符。而老版本的mysql只支持一个字符占3个字节,所以老版本的mysql是无法存储emoji的。新版本的mysql增加了字符集utf8mb4,可以支持单字符最多占4个字节。utf8mb4是utf8的超集,可以无需修改地支持原来的utf8字符 要让mysql存储emoji,需要满足2个条件: 1、mysql的charset设置 ...
微信打开的网页,屏蔽了app store地址 如果是在微信对话中发送app store的链接,点击就可以直接从微信里跳转到app store的下载页面 但是如果是在网页里放app store的下载链接,不管是长码,短码, 通过 <a href=""> 或是 location.href = ""; 都不行 解决的办法: 1、把APP上到应用宝,然后放应用宝提供的地址,则会判断机型自动跳转 2、提示用户“在浏览器中打开” 3、把链接转换成二维码,通过“扫描图中二维码”的功能,也可以正常跳转 ...
今天把一个站点重新部署了一下,目录结构调整比较大,发现了几个问题,本文总结一下 首先页面里的URL,和硬盘的路径有对应关系,主要是文件服务器在解析URL的时候,会跟硬盘上的目录结构对应起来找实体文件。但是URL和硬盘路径不完全一样。比如本地路径,如果是/,那么会从硬盘的根目录开始找;而URL的/,只会到虚拟主机的根目录,不会到真的根目录 引用资源尽量使用相对路径 在html页面里引用资源如css,javascript的时候,最好用相对路径。比如下面的目录结构: a/ 1.html javascripts/ 1.js 在html里最好写成./javascri ...

html5跨域方法

从html5开始,可以通过在响应头里增加Access-Control-Allow-Origin,实现跨域请求 node的代码:   res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Credentials', true); res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'); res.setHeader('Access-Control-Allow-He ...
最近做性能优化,发现“查询用户评论”这个接口特别慢 首先对接口进行了测量,由于这个接口需要查询用户的昵称和头像,需要关联到accounts表,而accounts表里的数据比较多,所以接口的查询速度比较慢。因此我们采取的优化,是把accounts中的数据缓存到redis里,部署后接口的查询速度提升了80% 接下来发现,虽然接口查询速度提升了,可是在APP上的表现还是不好,loading还是要转圈很久。于是接下来在app里打断点,发现其实从发出http请求,到拿到响应,只需要0.3s,这个速度已经很快了,那么问题就是出在本地处理上。检查发现,我们使用的下拉刷新组件MJRefresh,为了显示lo ...
最近发现一个问题,同样一个视频,在深圳可以打开,在南京地区的android可以打开,南京地区的iPhone无法打开 我们的视频都是通过CDN下发的,把链接改成资源实际所在的地址,绕开CDN,就都可以正常访问了,所以定位出是CDN的问题。可能是深圳的CDN节点是好的,南京的android设备和iOS设备访问了不同的节点,而iOS节点有错误 联系了CDN提供商,对方的技术人员也没有定位出问题,最后检查发现,资源的content-type没有设置,是默认的plain/text,改成video/mp4就可以了 这个问题比较特殊,虽然修改了content-type以后解决了,但是至今也不知道为什么个 ...
APP开发常有这种界面:顶部是一个表头,下面是一个UITableView 如果不使用headerView,而是上面一个自定义的UIView,下面是UITableView的话,则表头会固定,即滚动UITableView时,上方的view会固定不动,不会跟着滚动 如果希望表头不固定,需要使用headerView来实现,类似: tableView.tableHeaderView = [self buildTableHeaderView]; 但是,一个常见的错误是,UITableViewDelegate有2个方法: - (CGFloat)tableView:(UITableVie ...
xcode有个BUG,截止到6.3.1还没有修复 当打ipa包,需要支持iOS7的设备时,xcode不会把Images.xcassets里的.jpg图片正确打包。现象是在iOS8上可以正确显示的图片,在iOS7上会显示白屏,并且console报错:Unable to create unsliced image from csi bitmap data,解决办法是使用.png图片,或者把.jpg图片的扩展名改成.png
上一篇博客总结了iOS屏幕适配的若干技巧,本文再补充几点别的方面 设计图 一般会先由美工做出界面的设计图,然后开发再去实现。上一篇博客说的主要是,开发怎么实现的问题。实际上从设计图这个环节,就需要开始考虑界面适配的问题。主要是2点: 1、出几张图 如果以iPhone6为基准出设计图的话,一般很难完美地适配到iPhone4,5和6P上,因为屏幕尺寸差异很大。一般在6上摆得很紧凑好看,在4和5上就会摆不下(溢出屏幕),在6P上则会有比较大的空隙 通常有几种办法: 设计元素的位置和大小,不用具体的数值,而是使用百分比,这样在每种屏幕上会适配。但是通常这只是理想情况,因为4种屏幕的宽高比都不 ...
Global site tag (gtag.js) - Google Analytics