OhMyPushBot ———— Telegram 推送 Bot

前几天做的小玩具

OhMyPushBot

Telegram 是个有趣的聊天工具,最好玩的就是它十分开放 Bot 系统。相比于微信公众号这种层层审核还一堆限制,或者 QQ、微信 机器人这种强行扒官方协议的灰色接口, Telegram 提供的 API 非常简单。你可以用 Bot 管理 Channel,制作好玩的 Bot,这一切只需要和 BotFather 聊聊天,就可以设置并创建一个Bot,完全不需要等待审核。

制作这个 Bot,最大的用处就是方便一些自动化脚本通知事件结束。一般的场景下,自动化脚本要发送通知,多数使用发送邮件的方案,但是发送邮件需要使用专用的工具。 而且一般的邮件需要自己检查邮件情况,早些年有过黑莓的PushMail服务,几百元一个月的服务费也不是一般人玩得起的。现在好了,Telegram 作为一个免费 IM 工具, 完善的客户端支持(Linux、Windows上都有,各大手机平台也都有),比较实时的推送速度,简直是事件通知最佳的选择。

几种报表SQL常用的时间分组写法

写了小一个月报表相关的SQL,把最容易忘的记下来

最近在公司的任务多数是写各种报表,SQL最长的格式化完了有30行,各种 JOIN 和 UNION ALL 拼 N 张表里的数据。其中最常用到的就是按照时间分组。

假设有如下表

员工名(VARCHAR) 交易金额(INT) 时间(DATETIME)
张三 66 2017-06-23 19:34:00
张三 166 2017-06-23 19:36:00
张三 566 2017-06-23 20:34:00
张三 934 2017-06-24 21:34:00
李四 661 2017-07-01 10:36:00
李四 83 2017-06-25 19:34:00
李四 23 2017-06-26 19:34:00

如果想查某个时间段里每个人的总交易金额报表,大概的 SQL 写完应该是这样的

SELECT `staff_name`,SUM(`money`),(DATE_FORMAT(`time`, '%Y-%m-%d')) AS date_char
FROM table_name
WHERE `time` >= "开始时间" AND `time` <= "结束时间"
GROUP BY staff_name,date_char

其中最重要的部分就是 date_char ,它决定了时间分组的粒度。

服务器 Docker 化笔记

五一期间折腾了一下服务器的 Docker 化,踩了好多的坑,写文记录下来。

起因

起因很简单,五一去玩了一圈,结果到处都是人,所以在家猫着总得折腾点什么。 在公司写东西日常使用 Docker,目前对 Docker 的操作也非常熟悉了,所以总想着把我的服务器 Docker 化

先说一下我的基础配置,Kimsufi 的 KS-7 主机,i3 处理器,8G 内存,2T 硬盘,100M 带宽。 内存很充裕,就可以放心的折腾 Docker 环境。事实上我最后弄完几个容器,实际服务器占用也就 500M - 700M 左右。

重装服务器

由于我的主机已经用了一阵,所以服务器里很多已经抛弃的东西,也有很多正在用的东西。首先要备份数据到其他地方,我还有其它的服务器,所以把有用的数据 rsync 送到别的服务器上。

Kimsufi 登入管理面板,重新安装最新版的 CentOS 7。配置 SSH Key,升级最新软件包和内核。Kimsufi 安装的时候要注意,一定要勾选 use distribution kernel 选项。 如果没有勾选这个选项,Kimsufi 会给你安装定制版的内核,我不太清楚定制版内核会带来什么优势,但是目前来看只会造成麻烦。所以一定要使用发行版自带的内核。

Alpine with CGO

今天折腾这个一天,记录下来免得未来踩坑

Alpine with CGO

Golang 很棒,静态编译十分方便。但是,它也不是 100% 静态编译的,因为它需要依赖glibc ( 标准C运行库 )。

而 Docker 最常用的 Apline 镜像,使用的是 musl 库,并不能愉快的运行 Go 程序

网上大部分教程都是教你,CGO_ENABLED=0 go build -a -installsuffix cgo,使用纯 Go 编译,不用 CGO 链接 glibc ,问题就可以解决了。

但是最麻烦的问题是,你需要引入 C/C++ 库的时候,你并不能禁用 CGO 。

幸好 Alpine 有包管理器,所以我们可以很愉快的安装所需要的库。(我之前尝试手动安装glic和libstdc++,很难弄)

解决Alpine缺少字体的问题

2019-02-11 农历己亥年上班第一天

好久没有写博客了,我这个博客是Hugo静态编译的,写一次还是蛮复杂的,而且上班以后基本没有什么值得写的东西,所以博客基本都在长草。

立一个FLAG,2019 博客不长草。

前言

我现在的这家公司基本都在用现代化的开发工具,所有程序写完都在docker环境下运行,我们公司dalao钦定的底包就是alpine。后续的问题都是Alpine没有自带默认字体造成的。如果你想快速知道怎么解决请直接看最后。

问题

我遇到的问题是这样的:

java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

Java报错

场景是公司买的快速开发框架jeeplus,自带一个数据导入功能,需要下载excel模板,当下载模板时触发NPE。