odoo china baidu maps api

odoo原生内置google maps,导致中国大部分区域不仅无法正常使用,用户浏览器一直加载到超时还拖慢了网站整体

相关源码:

可见针对联系人扩展了静态地图和外链地图两个接口,其参数都是通过模块自身的国家、邮编、城市、街道等地址相关字段构成

了解上诉原理之后,参照百度地图开放平台API,梳理出相近接口的参数异同点后,完全可以改造成具有中国特色的odoo maps

核心代码:

最后顺便将其整合到odoo开源模块Website China Features里,有需要可直接从官方应用市场下载使用
https://apps.odoo.com/apps/modules/9.0/website_china_features/

odoo disabled website homepage

odoo有些模块包含website功能,这就依赖了website这个重量级模块
很多时候仅仅想用其核心功能,并不想因此造成首页变成企业网站

odoo muilt domain dbfilter many to one config and code

odoo支持dbfilter配置用于实现多域名对应多账套,dbfilter是一个python标准正则字符串,并支持特殊的%h、%d这两个动态参数

根据源代码剖析(odoo8、odoo9)
openerp/http.py

由此可见,绝大部分有规律的映射需求都可以得到满足。惟有那些情况特殊,完全没有规则可言的:比如SEO需要、历史数据库命名混乱、甚至多个一级域名只对一个数据库的需求就悲剧了

这里举一个理想的openerp-server.conf扩展配置特例

首先新增支持%m特别参数,用来开启域名数据库映射复杂模式
其次新增支持dbfilter_前缀的域名映射独立配置指定数据库名称(www-zhunlian-net、www-higk-com)
最后迫不得已新增插入两行精炼的源代码

注:一个域名必备的.号在正则表达式领域可用于匹配任意字符,所以域名全称作为正则也可以根据需要匹配出一组数据库列表,如域名renjie.me可同时匹配出数据库名为renjie.me、renjie-me、renjie@me等等相似名称的数据库

python ldap userPassword salt sha md5 encrypt

odoo自带的auth_ldap模块虽然实现了ldap统一账户的验证,但如果用户一旦修改密码就变成同名的本地用户。这是因为odoo默认先验证本地res.users信息,如果没有记录,或者有记录但密码字段为空才会去ldap服务器验证

根据其原理,可以在修改密码的时候对接上ldap的密码信息就完美了,但用modify指令写入的userPassword值是原文存储,即明文直接写入在服务器也是明文,这就需要在请求端预先加密成ldap标准的密文格式

网上看到有很多php的实现都是要写点代码什么的,照葫芦折腾几下才发现python的passlib库居然有现成拿来即用的函数

以此类推

其中ldap_bcrypt,ldap_bsdi_crypt,ldap_des_crypt,ldap_hex_md5,ldap_hex_sha1,ldap_md5,ldap_md5_crypt,ldap_pbkdf2_sha1,ldap_pbkdf2_sha256,ldap_pbkdf2_sha512,ldap_plaintext,ldap_salted_md5,ldap_salted_sha1,ldap_sha1,ldap_sha1_crypt,ldap_sha256_crypt,ldap_sha512_crypt等都是ldap加密相关的兄弟函数,可谓是应有尽有非常丰富,看来在odoo端直接集成phpLDAPadmin里各种类型的加密密码更新都是易事了

centos install flash player projector content debugger

众所周知,Adobe Flash Player 11.2将是支持Linux平台的最后一个版本,不过Google Chrome自带的Flash Player Plugin版本不受这个限制,但Adobe将继续为Flash Player 11.2 for Linux提供安全更新

Flash基础环境除了依附浏览器的Plugin版本外,还有一种Projector版本,即独立播放器程序。虽然插件版已经支持64位系统了,但播放器版本官方始终只提供32位程序包下载

下载地址(含debug版本)
http://www.adobe.com/support/flashplayer/debug_downloads.html

Linux Help(2011年11月版本)
https://helpx.adobe.com/flash-player/release-note/readme-flash-player-linux.html

文档目前只有FP9和FP10的依赖库列表说明,最新也是最后版本的FP11详情很遗憾还未更新
为了避免安装不必要的32位旧依赖库,可以通过启动时缺少库提示来按需安装,如:

由于每个人的基础环境异同需要补上的32位库也不尽相同,记得上回安装Android SDK时大规模安装过一次,可能有些依赖相同的都省了,本次最终更新列表如下:

yum完上述i686基础依赖库,剩下的就是运行时报错的解决了,相关过程如下

GTK默认加载adwaita主题警告:

GTK默认加载PackageKit模块提示:

GTK默认加载libcanberra模块提示:

运行时闪退:

运行时无声:

折腾完毕之后运行flashplayer或flashplayerdebugger一切顺利

freeswitch http https ws wss nginx domain default port config

现代H5浏览器产业链越来越丰富,http+websocket+webrtc+sip组合已经是一种非常成熟的web原生音视频通讯解决方案

FreeSWITCH是一个开源的电话软交换平台,早在SIP年代就非常有名,自从支持WebSocket传输sip信令后与Web结合玩法多了许多

WebRTC提供了音视频通讯的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台,但就是没有信令协议部分

Chrome、Firefox等浏览器为了从保护用户隐私绝对安全角度考虑,纷纷提高了Web原生应用访问摄像头、麦克风的门槛:如不是用https、wss安全协议则会有各种警告及确认甚至直接拒绝

WS、WSS其实就是HTTP、HTTPS的WebSocket协议名称,其使用方式及默认端口都完全一致

综上所述,如果都用同一个域名地址承载web sip相关服务方便用户使用,就需要在nginx上做一些优雅的配置

其对应freeswitch相关端口配置片断如下

注:
sip和rtp端口不经nginx直连,但需要防火墙做相应的白名单
ws5066端口和wss7443端口间接通过nginx的http端口和https端口反向代理提供服务
nginx默认的http80端口和https443端口又用来提供webrtc前端相关资源访问

阿里云ecs部署freeswitch默认event socket listen port 8021 ipv6问题

阿里云ecs服务器目前还不支持ipv6
freeswitch默认event_socket模块配置
/etc/freeswitch/autoload_configs/event_socket.conf.xml

里的<param name=”listen-ip” value=”::”/>是ipv6地址的表现形式,其等同于ipv4的0.0.0.0
这就造成服务启动后,由于无法绑定ipv6地址,也就不能通过fs_cli命令行进行控制台管理了
这就解释了同样的配置在本机一切正常,部署到阿里云上就无法管理

知道原理解决起来就简单了,将listen-ip的value根据实际需要改成127.0.0.1、0.0.0.0或内外网卡的ipv4地址即可

odoo addons xml develop debug auto update

odoo以开发者模式运行的话,能自动检测所有的addons目录的代码变动情况自动进行reload
这个机制对于python代码来说是够用的,但是对csv安全规则、xml数据及视图模版来说还需要更新模块才能使其生效

今天由于逐个测试安全规则条目,不断的手工更新模块不胜其烦,只好深入研究一下

odoo9开始已经将开发者模式依赖的pyinotify替换为watchdog,可能是后者的应用范围更广把,不仅提供python库,还附带shell工具

那就学习下这个叫watchmedo的命令行工具吧

看到auto-restart参数后真是让人眼前一亮,根据提示继续学习二级参数

真是太强大了,本以为还要写点小代码什么的,没想到几个选项就可以灵活组合出一个小型的监控工具

-R是目录递归监控
-p是文件模式匹配,主要是排除前端资源和pyc
-d是指定监控目录
–是watchmedo与odoo各自的命令行参数分割线

至此odoo的模块开发效率又提高了一个层次:)

centos odoo decoder jpeg not available

云服务器上传jpg图片提示IOError错误

初步判断是python pil库依赖的底层jpeg lib问题
但是本机正常无法重现,于是检查环境

对比了下发现服务器环境没有libjpeg-turbo-devel.x86_64立马补装一个,重启odoo服务错误依旧,于是继续更新Pillow库

重启odoo服务问题解决
最后回顾了下odoo requirements.txt:
odoo8 Pillow==2.5.1
odoo9 Pillow==2.7.0
其实所谓更新无非是重新安装编译一下Pillow库,没想到直接升级到3.1.0版本,希望没有什么副作用:)

odoo Many2one field create use custom view open

odoo联系人相关的信息全部存储在res.partner对象里,包括供应商、客户、员工等个人及公司相关的信息都可以归纳入内

二次开发经常会直接关联该对象可以少造很多轮子,但由于其新建联系人的默认视图view_partner_form是一个非常重且包含好多类型设置又被各种业务模块继承扩展过的大视图,这就需要为不同的应用场景开发对应业务信息的轻量级自定义视图

最开始我是从继承res.partner并重写其@api.model的fields_view_get方法来完成的

使用很简单view context新增一个view_name属性指定自定义视图名称即可

当后来对其它对象也有同样需求的时候就基本确定我悲剧的造了一个小轮子
因为这个需求是非常合理,如果要一个个对象去继承重写是非常不实现的,至少也要在共同的父类上做对接
根据这个思路从openerp.osv.Model一直寻找到openerp.models.Model的fields_view_get父级方法,其中有一段代码让人眼前一亮

这不就是传说中解决分类自选视图的相关代码:类型、模块名、视图ID确定一个视图
马上删除之前所有相关代码,view context按如下规则修改直接应用

至此,对odoo一切都是models的理念又有了进一步的理解