Excel中如何使用多选框

 

详见附件

Posted in Uncategorized.

WOPI中对docx”抱歉 无法打开此文档进行编辑”

 

WOPI server及host都配置安装完成后,发现pptx\xlsx均可正常查看编辑,但docx只能查看不能编辑,最终发现这个解释:

 

http://stackoverflow.com/questions/17065029/can-i-just-use-office-web-apps-server

You can write your own server that implements WOPI protocol, this will support PPTX/XSLX in view/edit mode, DOCX/PDF in view mode only. WOPI server is pretty simple to implement.

To edit word docs you need to implement Cobalt or FSSHTTP/FSSHTTPB protocol.

 

实际上,我们从discovery文件中也能看到这个要求:

image

找到原因就好说了,以.net为例,你可以引用官方的cobalt dll或者使用这个实现

https://github.com/marx-yu/WopiHost

 

一个好消息是新版的不需要cobalt了   

https://blogs.office.com/2016/05/04/office-online-server-now-available/

Posted in Uncategorized.

使用数据来挑选空气净化器

市场上的空气净化器种类繁多, 怎样挑选一个性价比最高的呢?  

由于空气净化器的CADR值较为重要, 那我们完全可以通过价格与CADR值的比较来进行评价, 因此根据这个思路我们只要爬上一些数据就可以了。

最终我写了个小爬虫从京东爬到了约200件商品, 结果如下:

image

 

完整数据下载

从数据上看, 小米还是值得买的, 所以最终我选择了小米pro

Posted in Uncategorized.

停电后自动发送通知

 

      由于一旦公司停电需要采取一些措施, 故需要在停电后可以及时通知到相关人员, 开始还想着服务器是不是可以自带UPS供电的检测, 结果发现木有这种功能。 忽然想到停电时机房由于UPS所以可以继续工作几个小时, 而机房外的设备则都会关机, 那是不是可以通过在机房不断检测机房外的设备是否存活来指示是否停电了呢?

      既然有了方案,接下来就是实现了,因为有一些简单逻辑判断, 所以就不直接写脚本了, 而使用了node.js, 源码如下:

/************使用submail发送短信,请提前在submail申请短信服务,相关配置项Start*********************/
var projectIdPowercut = "11"; //templateId
var projectIdPoweron = "11"; //templateId
var appId = "11";
var appKey = "11";
/************使用submail发送短信,请提前在submail申请短信服务,相关配置项End**********************/
//需要定期ping的服务器,通过ping结果来判断是否已经停电
var serverAddresses = ['172.16.227.1'];
//通知短信接收人
var smsReceiver = ["131111111","181111111"];
//每10分钟检测一次
var detectPeriod = 1000 * 60 * 10;
//var detectPeriod = 1000 * 5;
var ping = require('ping');
var request = require('request');
//通过该变量保证每次停电只发送一次短信
var isAliveInlast = true;
function doPing() {
    serverAddresses.forEach(function (host) {
        ping.sys.probe(host, function (isAlive) {
            var msg = isAlive ? 'host ' + host + ' is alive' : 'host ' + host + ' is dead';
            console.log(msg);
            if (!isAlive) {
                if (isAliveInlast) {
                    sendPowerCut(msg);
                }
                isAliveInlast = false;
            } else {
                if (!isAliveInlast) {
                    sendPowerOn(msg);
                }
                isAliveInlast = true;
            }
            setTimeout(doPing, detectPeriod)
        });
    });
}
function sendPowerCut(msg) {
    sendSMS(msg,projectIdPowercut);
}
function sendPowerOn(msg) {
    sendSMS(msg,projectIdPoweron);
}
function sendSMS(msg,pjId) {
    console.log("send msg:" + msg);
    var sendSmsOptions = {
        strictSSL:false,
        url: "https://api.submail.cn/message/multixsend",
        method: "post",
        json: true,
        body: {
            appid: appId,
            signature: appKey,
            project: pjId,
            multi: buildMultipleNums(),
        }
    };
    request(sendSmsOptions, function (err, response, body) {
        if (err) {
            console.log("SMS send failuer:" + err);
        } else {
            console.log("Send sunccess, response:" + body);
        }
    });
}
function buildMultipleNums() {
    return smsReceiver.map(x => {
        return {
            "to": x
        };
    });
}
doPing();

      你需要将这段脚本运行在一台有UPS供电的机器上(当然,建议使用pm2运行,做到开机自动后台启动),同时配置一台机房外的设备地址,例如可以使用一台路由器的Ip。

       发送短信使用的是submail, 直接将相关参数修改即可。

Posted in Uncategorized.

说说“X”AAS

 

      伴随着“云”服务的不断深入,软件架构领域也衍生了许多”X”AAS, 我们这里暂且做一个汇总分析。

IAAS

IAAS(Infrastructure-as-a-Service)基础设施即服务,这个是云服务厂商提供的最粗粒度的服务,消费者从云服务商的手中购买的是虚拟机,例如亚马逊的ec2,阿里云的ecs等,它极大减轻了用户在服务器硬件上的投入、后期运维的投入、以及网络环境的投入。

 

PAAS

PAAS(Plartform-as-a-Service)平台即服务,IAAS对用户可以认为只是提供了一个操作系统,但PAAS的话可以认为服务商给你提供好了web容器,也就是说程序员只需要将你的程序按照平台要求提供相应的运行环境要求并上传代码即可,PAAS服务商会自动将你的代码部署并运行。

 

CAAS

CAAS(container as a service)容器即服务,这里所说的容器为一个专有名词,指的是Docker技术中的容器,亦即Container, 在Docker技术中,Container可理解为一种很轻量级的虚机镜像,因为轻量级,所以一般会将相应的应用程序一起部署到Container中,对消费者提供的是各种Container镜像,例如mysql 的container,tomcat的container等,消费者可以忽略程序运行的基础环境准备,而仅关注与业务程序的研发。

SAAS

SAAS(Software-as-a-Service)软件即服务,SAAS是最常见的一种服务,譬如云盘、WebEx等, 可简单理解为通过浏览器即可进行接入使用的服务就是SAAS。

 

 

BAAS

BaaS(Backend as a Service)后端即服务,简而言之,就是通过云平台提供API的方式提供了许多服务,常见的有:

1. 全文检索

2. 消息推送、短信发送、邮件发送

3. 数据/文件存储

4. 后台任务

5. 在云服务上运行客户端的代码

6. 数据统计分析、日志

可以看出多数功能都是比较基础的,这也是应该的,平台也只能提供这些基础功能,把软件开发中的这些基础工作的开发时间、乃至后期运维的精力节省出来, 投入更多时间到具体业务上, 这也是软件开发团队所期望的事情。

目前这块的服务提供商业比较多,包括亚马逊、阿里云以及许多其他厂商。

FAAS

FAAS(Functions as a Service)函数即服务,这个可以按照字面意思理解,也就是说每个函数就是一个服务,当然一般也是通过http请求的方式来访问,想象一下我们一般在软件开发过程中所做的事情不就还函数调用吗? 所以采用FAAS的话,我想可能真的可以只是将函数部署到相关平台,由客户端发起函数调用、组合,应该是可以把运维人员解放出来,大家也不需要关系CPU、内存、网络之类的硬件环境了, 这其中以AWS Lambda为典型提供商,阿里云的函数计算也将计划于2016年底前推出。

       可以看出,这几个词汇从上往下,云服务的粒度是越来越细, 从早期的虚机服务,到后边的函数级的服务, 很难想象, 未来还会出现怎样的云服务。

       当然,粗或细粒度的云服务无好坏之分,需要哪个完全取决于你的应用及架构设计,不同粒度的云服务各有其应用场景, 实际情况下还是根据需要选择为好。

        这也带出了架构领域很火的一个词:Serverless, 从这几个名词看出,早期我们使用云服务厂商提供的虚机也就算是上了云,减少了我们本地发服务器,但到了现在的FAAS, 可能我们服务端连虚机都不需要了, 只需要将我们的业务函数提交到云服务平台即可,完全做到了无服务器。

Posted in Uncategorized.