微信小程序播放缓存的音频文件

很多时候我们都想把数据预先缓存到本地,节省带宽。但是最近在处理微信小程序播放缓存到本地的音频文件的时候,遇到一些小问题,然后对于安卓和IOS需要采用不同的播放策略。 首先,如果哪怕用audio标签来播放在线的音频文件,假如服务端没有实现断点续传,IOS是无法播放的,这个需要注意。 对于缓存在小程序的音频(wx.saveFile(OBJECT)保存的音频),IOS只能通过播放背景音乐的接口播放,其它播放方法都没有成功实践,而对于安卓,内部 audio 上下文 innerAudioContext 对象即可播放。给出代码: var res = wx.getSystemInfoSync() if (res.platform == 'ios') { this.

微信小程序录音与播放录音

小程序中提供了两种录音的API 旧版录音功能 首先启动录音,然后停止录音即可拉到音频的临时地址 启动录音: var that = this; wx.startRecord({ success: function (res) { // 调用了停止录音接口就会触发这个函数,res.tempFilePath为录音文件临时路径 var tempFilePath = res.tempFilePath that.setData({ src: tempFilePath }) }, fail: function (res) { //录音失败的处理函数 } }) 停止录音: wx.stopRecord() 播放录音: wx.

企业微信(服务商模式)oauth

概念 由于这种模式多了很多稀奇古怪的概念,首先我们来理一理这个概念。 三种token 企业接口的token 应用授权的token 服务商的token 参考文档:https://work.weixin.qq.com/api/doc#11791 各种ID CorpID:整个企业微信的ID SuiteID:服务商新建的每一个应用特有的ID Secret:服务商新建的每一个应用特有的Secret 构造登录URL 做过oauth的同学都知道,oauth登录的第一步是引导用户到第三方服务器,然后用户确认授权登录(或者静默授权)之后,跳转回自己的服务器,同时带上code这个参数值。 企业微信服务商构建url的文档地址在: https:

kubernetes

k8s拉取私有仓库镜像

首先k8s要主动拉取私有仓库则需要配置secret 只需要一条命令 kubectl create secret docker-registry {secret名字} --docker-server={仓库地址} --docker-username={你的账号} --docker-password={你的密码} --docker-email {你的邮箱} -n {命名空间} 当然在创建pod的yaml文件也需要指定secret,直接上例子 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app namespace: uread spec: replicas: 2 template:

kubernetes

安装kubernetes-dashboard管理k8s集群

首先我们知道k8s功能十分强大,但是我们要学习它很多命令其实还是不够友好,所以需要一个web ui控制台来管理。 安装仅需要两个yaml文件 安装前提是已经安装好k8s 编写文件a.yaml(10.104.241.122改成自己的k8s的ip) apiVersion: extensions/v1beta1 kind: Deployment metadata: # Keep the name in sync with image version and # gce/coreos/kube-manifests/addons/dashboard counterparts

kubernetes

在centos7上安装配置k8s集群

配置背景介绍 为什么要用kubernetes这么复杂的docker集群管理工具呢?一开始接触了docker内置的swarm,这个工具非常简单快捷的完成docker集群功能。但是在使用docker1.13内置的swarm做集群的时候遇到vip负载均衡没有正确映射端口到外网,或者出现地址被占用的情况,这对高可用性的需求是不利的,然而又没找到一个解决方案,只能转投k8s。 实验环境 腾讯云 centos7.3 64位 安装 yum-config-manager --add-repo https://docs.docker.com/v1.13/engine/installation/linux/repo_files/centos/docker.repo yum

生产环境docker历险记

首先感谢产品狗jinkey(https://jinkey.ai/)把他的服务器托付给我部署应用,下面讲一下最近在生产环境使用docker惊心动魄的经历。 docker是双面刃 你爱的人往往伤你最深,docker的环境隔离,快速交付,持续构建支持等优势往往让人爱不惜手,但是越依赖于docker的时候,你却会发现越来越无助,因为高级的资料真的不好找。 环境隔离分析 首先我们来看一下docker环境隔离的实现原理,其实本质是利用linux系统的进程命名空间隔离进程。本身linux系统只有一个命名空间,每个命名空间下面可以有很多进程树。但是当新建了一个命名空间之后,该命名空间下的进程不能知道其它命名空间的进程,所以达到了隔离进程的目的。但是注意命名空间同级进程可以知道命名空间下的进程,这也是我们在系统输入ps aux可以看到docker容器跑起来的进程。 参考:http://blog.csdn.net/tongtest/article/details/

chrome插件开发实践

首先我们来看一下chrome能做什么事情,其实主要的功能是往页面注入一段js代码,修改浏览器外观和获取浏览器内部信息。 chrome插件生命周期 浏览器打开时执行一次的js代码 每打开一个页面执行的js代码 点击浏览器上插件按钮,打开一个页面,执行的js代码 开发chrome插件的准备工作 一个文本编辑器即可 一个hello world工程 新建一个文本文件:manifest.json 内容如下: { "manifest_version": 2, "name": "优读Uread网页版插件", "version": "1.

Uread 自动化运维平台实践

首先技术并没有好坏之分,只能说一种技术在特定场景会优于另一种技术。 首先uread优读(http://aiuread.com/)作为一个还处于起步阶段的团队,那么没办法造出像大企业他们那种自动化运维平台,真实情况是连用OpenStack来管理应用都是一种高难度活。 第一阶段,单体应用,纯人力部署 团队一开始,反正后端就一个系统,然后又是用git作为团队内部的协作工具,部署理所当然是直接每次发布新版本,直接执行git pull,然后执行一个封装好kill进程,重启进程的shell脚本,接着更新版本流程完成。 第二阶段,服务拆分,交互遇到问题 随着功能越来越多,后端前端的同学也越来越多,以前一个工程囊括整个项目的做法的弊端开始显露出来。首先,由于工程膨胀,要一位新来的同学看懂整个工程会变得非常困难,并且提交代码的时候冲突会非常严重。现在微服务不是很流行么,所以团队也考虑是不是拆开成微服务呢。

IOT

微信IOT与airkiss3的wifi硬件操作实践

最近接触微信硬件平台开发,然后微信扫描连接wifi设备的开发流程只是很简单的,无奈文档实在不多,下面我写一下详细的成功的开发流程。 硬件准备 1台安卓机,1台装有微信的手机(安卓或者ios) 模拟设备制作 假如我们手头上没有wifi硬件设备,我们可以拿一台安卓机来模拟wifi硬件设备,当然要下载一个软件,链接是: http://iot.weixin.qq.com/wiki/doc/sdk/Airkiss3.0_SDK_for_android_20160113_165358.zip 当然这个安装包里面的apk不要直接安装,因为没法直接用来调试,下面会说如何修改源码编译出可用的app。 申请一个测试号

java

从0开始编写一个spring boot 应用

为什么要使用spring boot? 入门简单,无需编写大量的xml文件来配置应用 内置tomcat,可以生成直接运行的独立jar文件 简化了spring框架一些繁琐的开发方式,提供很多与第三方库的结合 使用eclipse新建一个spring boot工程 1.先在eclipse官网下载一个eclipse EE 2.new -> Maven Project 3.填写项目信息 ** 安装spring boot依赖 ** 在pom.xml文件添加一点点东西(保存的时候eclipse会自动下载依赖),整个文件如下: <project xmlns="http://maven.

docker容器编排实践

由于本人比较懒,对于整天配置环境感到无聊,用了docker之后,都是能上docker即上docker。但是以前docker在跨主机情况支持较弱,往往要用复杂的mesos或者k8s,反正配置一次我就怕了。忽然发现docker 1.12之后自带了swarm来实现容器编排。 下面记录一下,一次利用swarm来实现容器编排的过程,仅仅是记录过程。 实践环境 2台1核1G服务器,用的企鹅家的服务器。 操作系统:centos 7.2 64bit docker版本:1.12.6 安装docker 既然是docker容器编排,必定要安装docker啦(仅需两句命令即可安装)。 yum install epel-release -y

利用微信服务号oauth实现扫码登录

谁说管理后台就要用繁琐的帐号密码登录的? 写代码写了五年,写管理后台更是家常便饭。然后写多了之后,一是觉得常规的太没有味道了。第一步,输入帐号密码,第二步校验帐号密码是否正确。最多就加上验证码,防止恶意登录。 但是,最近发现越来越多网站都支持APP扫码登录了,那么我写的管理后台也可以采用高大上(简单粗暴)的扫码登录嘛。但是,我没理由去开发一个APP吧(其实我不会app开发)。这个时候,捡一个现成的app就好了嘛。但是现成app要开发帐号信息才行呀,符合这个要求的一个app就是微信。微信服务号提供oauth支持,可以根据openid唯一识别用户。 先放三张帅气的图片体现一下这种方法的优雅: 别扫这个二维码,因为地址是本地的,线上地址怎么可以放出来呢? 看起来还是挺顺眼和方便的对吧,【容我自傲一下,毕竟我是后台和运维出身】 如果没有权限的微信扫码是不让他登录的,多么完美!

日志

聊聊日志这件小事情

写应用不写日志,只会在撞板后也不知道为何撞板。线上的问题永远不会知道为何会发生,只会出现事故之后身处茫然之中。 哪怕用print也要输出关键数据 新手会经常在调试的时候使用print,不论这种方式的优劣,反正关键位置数据哪怕用print输出都比没有好。在linux系统,nohup启动进程的时候,可以把print输出的内容导到一个文件。只要有print,就多了一条路子来定位数据。 记录日志请用成熟的框架 真心不推荐用print来记录日志,为什么呢?因为成熟的框架往往可以设置日志的存储方式和随意控制存储哪种级别日志内容。 我们记录日志,大部分时候是不会翻阅的,但是我们很多时候又需要从日志挖掘一些数据。例如每天请求某个接口多少次,然后有哪些接口请求耗时超过1秒的等诸如此类。 如果日志需要用于分析,我们存在于文本,就需要编写繁琐的代码来获取结果。假如我们用了mysql或者mongodb等数据库存储日志,我们就可以简单调用API来统计数据。 我们再看看这些主流的日志框架(例如java的log4j,python的标准库logging),他们往往提供若干个记录日志的方法。例如debug,info,

从开发微信小程序看开发模式

不讨论微信小程序的商业价值,单纯从开发微信小程序来看,它的开发模式是很先进的。 1.一个页面一个文件夹 小程序每一个页面都由一个wxml(其实就是html),一个wxss(其实就是css)和一个js文件构成。并且页面之间样式和js都是隔离开的,而路由统一由根目录下的app.json配置而成。这样子的结构在后期是非常有利于维护的。 2.内置了常用组件 以前我们还没有使用vue等框架的时候,我们页面的组件都是一堆html片段构成的,看起来就繁杂。让我们看看下面这两幅图对比一下(都是为了实现进度条组件): 是不是小程序的开发方式看起来就是赏心悦目呢? 3.小程序本质 可以看成,VUE + 内置一堆JS方法 + 禁止使用JQUERY。而微信小程序的开发者工具可以看作配置好的vue开发环境,不得不吐槽一下前端的环境配置不是一般的难(这句话对于后端同学来说的)。 禁止jquery意思是微信小程序不允许直接操作dom,而修改页面的方式跟vue的API差不多,

谈谈技术选型的那些事情

不知道多少想进入互联网行业的创业者曾问我,我想做一个项目,我该用什么技术? 存在即合理,你所选择的所有技术本质上都可以完成任务,只是成本问题。 首先考虑的成本是学习成本,如果你说用这种技术很轻易可以实现功能,但是学习使用这种技术就需要几个月,等你团队成员学习完成,项目早就过了最佳时期。所以你明白外面为什么一堆企业在用PHP了,因为上手实在是快得没有朋友。 接着需要考虑的成本,就是找人的成本。试想想,你决定用C++来写一个后台管理系统,你确定能很低成本找到会这技能的同学吗?但是假如你采用了php这开发方案,外头随便一抓都是php,找人根本不愁(注意:我并没有对php有偏见)。 核心技术研发风险也是一个需要考虑的问题,假如你是要制作一只爬虫,我相信你在搜索引擎找到的大部分资料都是关于python的,如果你用其它语言来写爬虫也无可厚非,反正都是可以写出来,还是那句话,成本问题。 请用你的技术leader最熟悉的技术,要知道项目排期,