ECShop动静分离transport.js get jsonp跨域对接

ECShop transport.js定义了Ajax Transport

其中run方法实现了类似jQuery $.ajax的功能但缺少了对jsonp方式的支持

可以在第一个get方法判断入口前新增下列代码:

巧妙的将原来ajax get方法对接上jquery script jsonp实现
排除一些自制的特殊调用:比如callback的第二个参数以及this的深度使用
其它上层Ajax.call相关调用就不用一一更新了

Linux下反编译flash swf文件查看actionscript代码

今天有个需求参照物的关键代码封装在swf里
想了解下实现才想起来本地没有相应的反编译软件

虽说现在flash反编译软件多如牛毛,但支持多平台又免费开源的并不多
还好优秀软件不在多,让我发现了JPEXS Free Flash Decompiler

源码库:
https://github.com/jindrapetrik/jpexs-decompiler

官网:
https://www.free-decompiler.com/flash/
This product is completely FREE with no hidden fees. No premium version exists. No trial limitations. You get one version with all features included. No ads anywhere. You can look in app source code. That is fair, seriously. Don’t you think?

GitHub上可以看到,该软件更新维护非常活跃,今天下载的最新7.1.2版本是月初发布的,非常新鲜,就是国内下载好慢,最后去掉https后快了一些
http://www.free-decompiler.com/flash/download/ffdec_7.1.2.zip

Linux下依赖几乎没,就是对最新java1.8以上的版本要求稍稍高了些
下载完解压到/opt/ffdec,然后运行目录下的ffdec.sh即可,真正的开箱即用

JPEXS Free Flash Decompiler

原本以为就一命令行,没想到全程GUI操作还自带中文语言包切换下即可
那ActionScript都省的导出另外看,直接当作Linux下简易IDE,其基本的Run、Debug功能都集成好了

Odoo8、9打印中文字体配置分析详解

源码路径odoo/openerp/report/render/rml2pdf/customfonts.py

可见对于windows、mac及linux大部分发行版的默认系统字体路径都做了比较全面的配置

接着根据正则*.[Tt][Tt][FfCc]对所有配置路径下的文件扩展名做字体匹配以生成odoo可供配置选择的字体列表

一般Linux下使用最多的开源中文字体是文泉译系列,简称wqy,Centos下yum search wqy相关英文描述(中文笔者补充):

wqy-microhei-fonts.noarch : Compact Chinese fonts derived from Droid
文泉驿微米黑是一个”自由字体”。该字体包含了所有常用简体中文、繁体中文所需要的汉字(最新版本包含超过20932个汉字,完整覆盖GB2312/Big5以及GBK标准字符集)。该字体同时还包含了日文、韩文和其他几十种语言符号。以外,该字体还包含了高质量的Droid Sans拉丁符号和Droid Sans Mono等宽字体,并内置Hinting和Kerning信息。微米黑字体文件极小,特别使用于便携式电脑设备

wqy-unibit-fonts.noarch : WenQuanYi Unibit Bitmap Font
文泉驿Unibit是一款等宽的点阵字体,该字体包含了46,000多个unicode符号,超过27,000多个符合国家标准的汉字点阵字型,是已知的开源字体当中包含符号最完整的字体之一

wqy-zenhei-fonts.noarch : WenQuanYi Zen Hei CJK Font
黑体由于笔画略宽,显示对比度比宋体大,所以越来越得到桌面用户的青睐。文泉驿正黑体正是为这种目的设计的一款开源字体

据上描述可直接根据需要yum install对应的字体名称即可快速安装
当然也可以直接去文泉译官网http://wenq.org/获取最新版本及其它类型中文字体,如文泉驿点阵宋体

然后以优秀的文泉驿微米黑字体为例:

最后一行是字体文件物理位置,很不幸用了独立子目录wqy-microhei,这在官方配置列表里是没有的,不过好在扩展名正则已经支持ttc字体了,之前只有ttf字体才可匹配到,所以很多老教程都是直接在源码里加路径加扩展名匹配来解决

那不改源码最简单的方法就是从配置里与系统最低耦合的~/.fonts用户目录来存放可识别字体:

最后重启odoo,设置-配置-常规设置-报表字体-重载字体,字体下拉里就可以直接选择或者搜索到WenQuanYi Micro Hei选择并应用生效后即可完美使用中文打印各种报表了

nginx log.io websocket config

将nginx部署到log.io前端后发现功能虽然正常,但控制台有错误记录

接着就是刷屏式的如下请求了

猜测肯定遇到降级处理了,找到了其依赖的socket.io源码确认果然如此

那问题基本归根与nginx对于websocket这种新协议的代理问题,简单优化配置如下

可见不用新开端口服务,直接在现有的http端口通道上进行改造即可
同时附上websocket握手协议的相关记录以方便日后进行深入研究

 

首次ionic build android下载repo1.maven.org/maven2资源卡死

原来ionic platform add android时
只自动创建了gradle wrapper及配置(gradle-wrapper.properties)
首次构建时在根据其distributionUrl项指定的Gradle版本地址进行下载安装

开始一切都很顺利,遇到什么下载什么
直到bcprov-jdk15on-1.48.jar时就卡死了,几个小时什么提示都没也不退出
wget重现一下发现刚开始下载很顺利,然后越来越慢,最后超时重试
不过由于默认会不断重试,最终还是成功下载回来的
以前还真没有遇到过一个仓库大部分可以顺利下载小部分艰难下载的情况
也许是刚好遇到网络不顺畅导致的假象?

还好开源中国提供了http://maven.oschina.net/content/groups/public/镜像

测试一切良好

修改./platforms/android/build.gradle文件替换mavenCentral()为
maven { url “http://maven.oschina.net/content/groups/public/” }
后运行build可以顺利通过卡死点,不过不知道为什么,接下来的其它依赖总是下载推进几个就报Could not GET错误退出

要反复运行才可以抵达终点,难道是中国的镜像选择太少,大家一起用同一个服务器有些稳不住的缘故?

本机同时部署odoo8和odoo9等多套开发环境注意事项

自从odoo9正式发布后,odoo8就意味着迟早要跟odoo7一样进入历史
但在一段时间的过渡期内
开发者可能要维持两套版本环境方便快速调式自己的代码能否多版本兼容运行
特别是插件开发,经常一个修改就需要到两个系统更新应用测试
以下记载各个共存环节需要注意的事项

安装方式:
因为安装包是互斥冲突的,所以必须源码安装

依赖库:
相同部分(python)或特有部分(nodejs)可以全局安装,不同部分则用上篇python-virtualenv虚拟环境隔离

数据库:
最简单一个本机帐号同名的超级账户共享使用,odoo缺省配置就能连接上了
不过最好先安装8在安装9,因为9能认识8创建的数据库而忽略,但8不太认识9创建的数据库自动连接会报错
共存之后8的控制台会例行报如下警告,要洁癖只能分别配置两个数据库帐号

版本库:
odoo8和odoo9两目录分别clone对应官方git版本库的8.0和9.0分支,独立各自日常更新

插件库:
比较灵活,我的方式是与odoo目录同级,然后配置文件共同指向

配置文件:
启动时分别指定各自独立配置,各自用不同的端口

浏览器:
虽然分属不同的端口提供服务,但因为登录标识必须要写用户本地浏览器cookie如session_id,或者犹如website_lang网站默认语言这种个性化设置。但由于cookie只匹配域名及路径就是不区分端口,所以同一个浏览器只能固定某个版本调式,如果同时使用就会发生各种意想不到的混乱错误。
当然解决方案也很简单,就是将本机127.0.0.1多设置几个如localhost这种别名来给不同的odoo版本独立访问即可

 

用python-virtualenv统一管理odoo python依赖库

odoo有些python依赖库官方yum源里没有
或者有可能版本不兼容
这就需要根据版本指定安装,默认是安装到
/usr/lib/python2.7/site-packages/
主要是本机开发环境,各种基于python的系统部署一起
长期下来感觉又回到windows时代dll库混乱的悲剧
更何况odoo8和odoo9所依赖的库和版本都不尽相同
非常需要根据应用来独立管理所对应的依赖环境

安装python-virtualenv:

创建虚拟环境:

进入虚拟环境:

进入odoo目录直接安装:

也可以直接通过pip来安装(可用阿里云等提供的国内镜像快速下载):

可能会遇到一些库对virtualenv默认的setuptools的版本有要求,根据提示升级下(Centos目前yum源python-virtualenv-1.10.1-2自带的是0.9.8版本有些低):

同时附上pip、easy_install及setup.py安装获取依赖库的阿里云镜像源配置:

以后每次使用都要先通过source命令指定对应环境下的activate初始化进入
离开则直接使用deactivate命令即可回到原生环境
当然也可以通过修改odoo.py头直接指定虚拟环境的python路径来快捷运行:

 

Odoo Bootswatch Theme fonts.googleapis.com访问速度慢

Odoo8的website模块自带Bootswatch系列主题集
Odoo9则将其独立为一个theme_bootswatch主题,可见将来主题也跟应用一样市场化了

其中某些子主题依赖谷歌fonts.googleapis.com字体,国内用户全天候访问不一定友好,可以选用360网站卫士提供的CDN服务替换以达到安全或加速的效果

360网站卫士官方说明http://libs.useso.com/

主题路径
odoo8/addons/website/static/src/css/bootswatch
odoo9/addons/theme_bootswatch

全局搜索“fonts.googleapis.com”替换成“fonts.useso.com”即可解决不稳定问题
也可以举一反三直接在odoo主目录暴力搜索替换以解决其它第三方应用或主题可能存在同样的问题

如何提交应用和主题至Odoo Apps市场

首先得有一个Odoo官网帐号,注册
https://www.odoo.com/web/signup

登录并提交您的Git仓库地址
https://apps.odoo.com/apps/upload
如:

注意:
仓库根目录每一个应用或主题都分别对应一个子目录(多个应用和主题一起发布机制)
仓库地址末尾添加#分支名称来指定版本分支(#在URL里称为锚)
分支名称用于匹配模块的系列版本号(可多个不同版本用于对应的系统版本)

仓库管理
https://apps.odoo.com/apps/dashboard/repos
一个应用多个分支版本需要分别多次提交
每个新提交仓库默认Draft状态,需要点击Scan操作变成Active状态后
就可以在My Apps中看到自己新发布的应用了
后续应用更新先提交对应分支版本
然后My Repos中执行Scan操作即可同步市场

我想出售自己的模块?
可以在官方的的应用程序平台上出售自己的模块。只要在模块描述文件__openerp__.py里简单的增加价格和货币项{‘price’: 49.99, ‘currency’: ‘EUR’}就可以开始销售您的模块。目前支持的货币为欧元和美元。官方要求在应用程序平台上出售的模块都有一个适当的描述,完整的功能截图和整体美观大方的展示页。关于如何实现这一目标,请参考以下部分的更多信息。官方保留三无模块的下架权利

我的模块要卖多少钱?
不要担心您工作应得的价值!如果有人需要你模块的功能,他们将为它支付。在任何情况下,这会使他们节约所开发的时间,所以你不应该低估你的工作。官方认为100欧元是一个很好的起点:)

我的模块如何拥有一个友好的图标和描述
从8.0版本开始,模块图标可放置于模块文件夹/static/description/icon.png
相关截图在模块描述文件中定义,可多个

富文本HTML描述则来自于模块文件夹/static/description/index.html
建议参照这个官方模板
https://github.com/odoo/odoo/blob/master/addons/crm/static/description/index.html

我的模块文档如何展示?
模块文件夹/doc/index.rst文件会被自动加载为文档。它必须是一个有效的RST文件

我的模块收入如何得到?
您在官方平台上模块收入的70%将会给你。只要发给他们每售出模块和价格编号的单据。你可以在你的销售仪表盘中找到这些信息(https://apps.odoo.com/apps/dashboard/sales)。考虑到处理这些单据需要时间请理解官方只处理累计总额不少于400欧元的单据

我的代码仓库是私有的怎么办?
要在官方平台上发布您的模块,他们需要被允许从您的私有库中读取。如果您在GitHub上,只要简单授权online-odoo用户访问即可。如果不是,您将需要授权官方的public SSH key来代替。最后不要忘记使用SSH地址来注册您的仓库好让他们确定使用SSH协议

我还有其他问题?
请直接联系官方邮箱apps@odoo.com,据说他们将会竭诚为您服务。。。