immortal session cookie in Chrome

March 3, 2016

It’s very interesting, we set a session cookie for users who logged in system, and we expect after he/she close browser the cookie will be deleted, that’s for security consideration. But I found even I closed Chrome, when I open it again, the session cookie is still there! That’s the reason. I have modified setting to my default, but “Continue where you left off” is very useful sometimes.

cookies domain

March 3, 2016

There are some RFCs about HTTP state management: RFC2109, RFC2965, RFC6265. My environment is Chrome Version 47.0.2526.106 (64-bit), I use tornado set cookies. As the RFC content, if you provide domain field in Set-Cookie, you should keep a dot at the beginning of domain name, if you forget, the http client should help you. You can ignore domain field, then the domain value will be set as same as request host. ... Read more

Some critical changlog of wechat mp

March 3, 2016

UPDATE: I found use snsapi_base can get user’s union id, but you can’t get it directly like before. Few weeks ago, I was developing wechat web app, I found I can get user’s union id directly via get access token interface, but yesterday, I found this interface didn’t provide union id unless you use snsapi_userinfo as the scope value. So I changed scope, use snsapi_userinfo, you will get a warning when you’re authorizing on web app no matter whether you subscribed the account or not. ... Read more

Ubuntu Open file limit

February 23, 2016

UPDATE:If you run supervisor as root, just set minfds to right value (32K or 64K), supervisor will increase hard limit value if current value is not enough and run as root, it’s the simplest way! Several days ago, my elasticsearch came across Too Many Open files error, the straight forward way is modify ulimit conf, but today I came across this error again, so I walk a wrong way before. ... Read more

mobile website development

February 21, 2016

以iPhone 6(使用Chrome developer tools)作为参考效果调试界面,iPhone 6竖屏css宽度750px,根据lib-flexible框架计算html font-size为750/10=75px。 px单位与rem换算方法:例如某按钮宽度为150px,则在iPhone 6效果下的rem尺寸为html像素尺寸除以根元素font-size大小,即150/75=2rem。 图片如何自适应?设置到div的background-image中,设置background-size为100%,再调整div的尺寸,即div在不同设备下尺寸变化,背景图全部填充div也会因此而变化。 「像素」「渲染像素」以及「物理像素」是什么东西?它们有什么联系? rem 产生的小数像素问题 从网易与淘宝的font-size思考前端设计稿与工作流 lib-flexible github iconfont.cn SASS(use scss!) material design front-end library 论material design网格规范设计和前端手机rem尺寸如何配合 微信调试 https://github.com/amfe/article/issues/17

region

November 30, 2015

dev
先说结果,如果你需要构建一个中国大陆地区的省市区数据库,请只参考这里:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/,目前没有比这里更加准确的数据了,但若你又和某些电商网站集成了订单信息,那很可能还会遇到问题,可以看后面。 region问题说大不大说小不小,如果你需要精确的规划物流(或者以后有可能的话)从而降低配送成本,那么region的问题就躲不过。 我国的行政规划编码挺简单,具体编码规则不谈(如果想了解请搜索相关GB开头的文件),某GB文件提到规则中的一条就是作废了的code不会再被是使用,也许有这一条规则就够用一阵子了。行政规划结构很清晰——三级结构,第一层是省及直辖市,第二层一般是“市”、“县”或“xxx市”这样的,第三级是“区”。但根据精简行政规划或者发展的需要,有些地区没有第三级,例如广东省中山市,这样的情况不算多但若要构建一个精确的region表的话,这点知识必不可少。 如果你是一个电商网站,用户只能在你的网站下单,那没问题,但这个时代如果你做的稍微大一些的话,势必要和其他电商网站或平台集成,简单说就是在人家那里开了个店,订单会被导入到你的系统中去(如果不需要导入到你的系统中的话可以不用往下看了,你基本不会遇到region的问题)很可惜现在大家都在拼命收集数据,会员啊、订单啊、用户的个人隐私啊等等,怎么能错过订单这么重要的信息,既然如此,别的平台的订单信息势必会导入到自己系统中来,其中订单中的一个重要的信息就是收货地址。 此时就会遇到一个问题,其他平台的region和我们用的是一样的吗?基本是不一样的,好的developer也许会找一份统计局的数据,但一般的也就从网上搜一个出来,搜到哪个格式看着顺眼的就拿来用了,不对比的话你还看不出大的疏漏,因为省区市的数据变化都不太大。 每年统计局都会更新这个库(除了数据的格式乱七八糟外都还好),有的时候你能看到一次新发布,有的时候你看到的是更新原来的发布时间,但变动都不大,可能有某几个市改名啦、合并啦、降级到区啦、区升级到市啦等等。就是因为改动不会很大所以从网上随便找来一个数据库还真的可以用一阵子,出来混早晚是要还的。 就是由于很多标准不统一,你用A版本的region,我用B版本的,他用C版本的,到底以谁的为准?一般情况下谁都不会改自己的region,因为有历史数据的负担,所以region的集成方式是“不集成”,也就是说直接拼好省市区和详细地址,这样看起来是没问题的,用起来可能也凑合,但这些数据就不再是格式化的了,起码不是符合规范的了,因为有的数据在你这边可能不存在,等你需要用这些数据的时候会很痛苦。 我遇到的问题是,已有系统中的region不知道是哪个版本,和X猫等平台集成的订单没有格式化的省市区数据。更新自己平台的region数据库工作量并不算大,抓取最新数据按照三级的结构存储好,再和已有数据对比,新增、删除(标记删除)、改名就好了,这里用的主键是code,code的编码很简单,前两位是省,中间两位是市,最后的是区,如果是省,那么后面的市区位置都是0,因为我们知道用过的code不会被重新使用,所以可以用作主键。 这样可以解决自己数据与最新数据不一致的问题,但仍无法解决多平台region不一致问题,除了大家使用统一标准外没有轻松解决的办法,这里只能吐槽X宝的网站和手机版,他们使用的region都是不一样的,更有甚者手机版的每个城市下面都能找到一个万能的区——“其他区”,PC版的还好,看起来准确,不过因为他们有对地址更加精细的管理,会添加一些本身并不存在区以方便用户的地址添加?例如某些工业园区、开发区、新区等等,最终的解决只能是我们处理这样的地址,看是归到某个区下还是怎样,总之这样的处理规则很多,一切都是为了数据的真实性。 希望有能力可以让这个世界变得更加美好一点的企业能从这些方面出发做一点让人感受得到的改进,有一批人会感受到专业和幸福。

push notification

October 30, 2015

最近App工作接近尾声,还有几个接口没有完成,其中之一就是需要在某些事件发生的时候通知App的后台,继而由App后台通知App,比如“订单即将被关闭,请尽快付款”、“优惠券即将到期”这样的消息。因为这些消息最终是要在用户的App上出现的,一般的做法是以Push notification的形式出现,主流平台android和iOS都是在屏幕最上方出现一些提示,点击后可以进入App的某个地方。 既然这样我们就直接集成第三方平台发送相应的消息好了,不过App做得实在很遗憾,用户点击消息后总会进入到App的消息中心,再点击某条消息才能看到具体内容,这样做可能是比较快,但体验不太好,至少和现有的主流App做法都不太一样,像上个时代的做法。 以上是背景,基于此我们希望能够把App作为推送会员消息的渠道,因为短信渠道现在变得越来越不可用,仅限于发送验证码等transactional消息,其实以上说的消息都是transactional消息,区别于marketing消息,这些消息一般是由用户自主激活的或满足一定条件触发,最终是区别于用户的,一般不是群发性的,例如营销类信息就属于marketing。将用户的App作为消息推送渠道的前提是能够较准确地获取这个用户的App渠道是否可用,如果不可用还是得选择短信等。 对于不同手机平台使用的技术差不多,但机制不太一样,不过这是有原因的。例如iOS上的推送机制:设备连接APNs,商户后端推送消息给APNs,再由APNs推送到最终用户的设备上;但android在国内不大一样,由于某些特殊的原因,android的GCM服务(类似APNs)无法使用,继而诞生了很多第三方推送服务商,这些服务商一方面做android的推送,另一方面也接管了到APNs的这块,其实接管APNs这块也不错,因为向APNs推送也并不容易实现——socket长连接,二进制消息等都增加了用户的开发成本,对于一般规模的App开发,使用第三方消息服务商几乎是没得选。 iOS的推送:在成功推送到APNs时服务商得不到任何响应,也不保证给你送达,用户不在线可以给你保留一段时间等用户上线了再推送,但长时间不在线的话推送消息也会被删除。除非消息格式有错等语法性的错误会得到响应,再就是如果APNs发现用户设备上没有这个App(被用户删除或被用户禁用了推送)会将该设备的ID记录下来,服务商可以通过APNs提供的反馈接口得到这些信息,也就是说只有再次给App推送消息后才有可能知道这条渠道还是不是可用。 android的推送:目前第三方服务商的做法是做出SDK,让开发App的人集成到App中,这个App安装到系统中后会出现一个Push Service在运行,当然不知道他们哪里来的智慧,如果多个App都用了某一家提供商,并不会启动多个Push Service,一般是一两个,这一两个服务所有App,从而实现了他们所描绘的多App共享长连接很省电什么的。某个设备后台的Push Service会自动和服务商的后端连接,等有消息过来时这些Service会知道该送给哪个App,到了具体的App再由用户的代码处理。由于机制的作用,android的消息服务商是可以实时知道某条消息能不能推送到设备上的,但这毕竟是一个不太常用的功能,所以服务商们一般不会公开这种API,我们用的这家在邮件中才告诉我们是有类似的API,但是VIP级别的,详情需要联系商务部门了解。

exception in python

April 19, 2015

My colleague remembered that if you pass some kwargs to an Exception subclass e.g. class MyException(Exception): pass, you will get a composed message when you catch the exception and call e.message. Unitil we got nothing from one place which it should display exception’s message, python language part is implemented by C, so we downloaded python source code(2.7.9), and find these lines. static int BaseException_init(PyBaseExceptionObject *self, PyObject *args, PyObject *kwds) { if (! ... Read more

traps of jushita

January 5, 2015

dev
2015年1月7日:后来和客服沟通,说是应用需要先上线,即便你还没有开始开发,这点虽然有点怪怪的,但只有这样才能申请到同步服务。应用上线挺简单,创建完应用只是第一步,完善基本信息后点下一步即可进入安全扫描阶段,再提交,瞬间说审核通过,这就上线运行了。 2015年1月9日:商家后台应用有web和客户端两种架构方式,就是你做出一个web应用,一般就是用web的架构方式,用户登陆、授权后,你能拿到用户session,然后就可以用了,和大多数oauth的方式一样,客户端类似。但有一点需要注意,商家后台应用拿到用户的session和refresh token后,文档记载session有效期1年,但这个refresh token无用,只能等session到期后重新授权。 今天开始全面接触聚石塔,就是天猫的云平台,上面服务众多,全都能收费,第一次听说了API调用也是可以收费的。下面记录一些可能成为坑的东西,希望有人看到后可以小心躲避。 创建应用要先报备 说明书要按照模版写,模板有下载,看说明就能找到,其中里面有个架构图,这个要仔细画,基本思想(阿里思想)就是把你所有的业务系统都放到ECS上,如果在ECS外出现了一个你们自己的平台,他们就怀疑你用ECS做了一个代理来调用API,因为收费API只能是塔内调用,其他没有遇到特别的,时间大概是3天出结果。 创建应用 报备通过就可以创建应用了,创建成功后可以去买ECS和RDS等服务,别的服务暂时没用到,这两个服务都是绑定应用的,所以要先有应用。ECS的配置可选的比较少,我在北京,但机房目前只有杭州,所以你写了你的位置也没用,据说杭州那个机房是6线接入,出口质量和淘宝一样,但拿到ECS后ping了一下,31ms左右,第二天ping到了70ms左右,虽然ping不代表什么,但总感觉怪怪的。。。价格和阿里云的ECS相比有些贵。 ECS 管理终端有个密码,要改的话记得改完重启机器,否则不生效,而且重启后自己再用管理终端连接一下看看是不是生效了。 他们把10和172.16网段都用了,自己要用内网的话可以考虑多租几个ECS实例,但想玩LXC的话,可以考虑用192.168网段。 DNS不要换别的,就用ECS配置好的,据说改了影响内部访问和RDS通信,我改成114dns后直接无法使用。 我买的是最便宜的ECS,但不知道为何没有SWAP分区,512Mb内存在起了LXC后又编译了一个东西就超了,那里怎么都不行,于是加了SWAP,可以。 RDS 我想用聚石塔的推送服务,就是可以把订单、商品等数据推送到买的RDS中,但今天申请的时候对方说应用未上线,不能申请。。。我就是需要这些数据才能开发应用,这不就变成死锁了? 真正开始做了,发现API用起来也不那么爽,这个具体看个人的感觉了,但比拍拍强了不少。 目前就遇到这些坑,欢迎更新坑们。

© 2018 | Follow on Twitter | Hucore theme & Hugo