大象笔记

知者行之始,行者知之成

百度 OCR 文字识别 golang SDK

免费额度 目前使用的是个人认证: 通用文字识别(标准版) 1000次/月赠送 通用文字识别(标准含位置版) 1000次/月赠送 通用文字识别(高精度版)1000次/月赠送 通用文字识别(高精度含位置版)500次/月赠送 注意:需要手动去点击认领免费额度。 QPS 免费版的 QPS 为 2 付费版的 QPS 为 10 Go SDK 文字识别,官方没有提供 Golang 版本的 SDK。 找到一个三方的实现: https://github.com/chenqinghe/baidu-ai-go-sdk/tree/master/example/vision/ocr 但是示例代码有些问题,需要查 ...

阅读全文...

腾讯云服务器硬盘扩容,系统盘

需求 腾讯云服务器的系统盘扩容。 由于是赶上促销活动加注册新账号,享受的 1 折优惠,下单时无法增加系统盘的空间容量。 现在随着业务的上线,开始产生真实数据,担心空间不足,所有想看看有没有不宕机扩容的方案。 现有空间 $ df -h Filesystem Size Used Avail Use% Mounted on udev 7.8G 0 7.8G 0% /dev tmpfs 1.6G 35M 1.6G 3% /run /dev/vda1 50G 10G 38G 22% / tmpfs ...

阅读全文...

小米创业思考

近期读完最好的一本书,雷布斯的《小米创业思考》。虽然很多关于小米产品的桥段为人熟知,但依然有很多打动人心的小故事。我也因此续费了微信读书会员。 一些书摘: 商业的目的 商业的目的是什么,如何让商业实现最大化的现实意义?我的答案是:效率。它能给最多的人带来最大化的美好幸福感。小米自创立至今12年只干了一件事:用互联网的思维和方法,改造传统制造业,实践、丰富“互联网+制造”,推动商业社会的效率革命,以实现最大化的用户利益和社会经济运转效率。 发帖狂人 对这种最基础的社区推广方式,我早有经验,在卓越网的时候,我就认真琢磨过到各种论坛、社区发帖的方法,就是给自己定了一条硬性规定,每天发300个帖 ...

阅读全文...

Wi-Fi Direct 与 Wi-Fi ad-hoc 的区别

最近在调研基于局域网的语音对讲方案。看到 Android 官方文档提到了 Wi-Fi Direct,于是收集了一下相关的资料。 Wi-Fi Direct Wi-Fi Direct (也被称为 WiFi peer-to-peer 或者 WiFi P2P) ,可以简单理解为对标蓝牙的技术规范,也是用于快速发现附近的设备,进行数据交互。但是传输距离上要优于蓝牙。本质上是 WiFi 产业链图谋完全取代蓝牙技术。 使用 Wi-Fi Direct 则无需连接到网络 (Network) 或热点 (hotspot),即可建立设备间的通信连接。 两台设备可以直接建立 TCP/IP 链接,而不需要 AP (介绍在 ...

阅读全文...

网站被人用 sqlmap 工具恶意扫描

今天偶然发现网站上几个文章的阅读量异常,几个小众的内容阅读量惊人。 怀疑是被恶意扫描了,于是查看了一下 Nginx access log 中的 IP 统计。 access.log IP 统计 今天的访问记录: $ awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10 47121 103.148.58.45 804 66.249.79.239 540 66.249.79.241 422 209.159.145.46 422 162.241.123. ...

阅读全文...

经典蓝牙接口规范 HFP HSP A2DP 的区别

Profile 可以理解为接口规范。 经典蓝牙 Profiles 包括 HFP, HSP, A2DP, AVRCP, PBAP, MAP 等。 HFP HFP 英文全称是 Hands-Free Profile。 定义了与 Hands-Free 设备通信的最小功能集。 Hands-Free 设备举例: 车载控制屏: 例如,在开车时使用中控屏连接手机拨打电话,整个通话过程就是基于 HFP。 头戴式耳机 补充: 音频通过同步的 SCO 通道传输 独立的数据通道用于控制音频流 音频延迟在 20 ~ 30 毫秒 支持的音频编码:CVSD,mSBC AT 指令可以用于控制手机 HSP HSP 的 ...

阅读全文...

Android API 无法获取蓝牙 BLE Attribute Handle 值

最近写了一个 Android APP 用于快速配置蓝牙网关(已上架 Google Play),但是基本功能完成后, 发现无法获取指定特性 (characteristic) / 描述符 (descriptor) 的 handle 值。 handle 存在的意义 Handle 的全称是 Attribute Handle。 在用 Android API 实现这个 BLE 扫描 APP 的过程中,我发现无论是服务,还是特性、描述符其 UUID 都是可能重复的。 举个例子,如果一个蓝牙设备包含两个电池模块,则存在两个相同服务的 UUID 是合理的。 那么用 UUID 来标识一个服务/特性/描述符就不合理 ...

阅读全文...

Material dialogs MaterialAlertDialogBuilder 中添加文本编辑框

setView 官方 Material Design 3 的文档中并没有详细的 MaterialAlertDialogBuilder 使用说明。 https://github.com/material-components/material-components-android/blob/master/docs/components/Dialog.md 找不到如何在里面添加文本编辑框。 但是在接口文档中可以看到有一个 setView 的方法 https://developer.android.com/reference/com/google/android/material/dialog/Ma ...

阅读全文...

BLE Indications 与 Notifications 的区别

BLE 的一个特性可能包含五种 property: Read Write Write No Response Notify Indicate Notify 和 Indicate 都是订阅蓝牙设备的推送消息。 但是 Indications 与 Notifications 有什么需求呢? indication (指示、标示) 需要客户端收到消息后,进行回应。类似 TCP。 notification (通知,通告,告示) 不需要客户端的回应。类似 UDP。例如,BLE 语音对讲服务基本都是用的 notification。 补充 由于 indication 需要应答,所以相对而言,效率会低一 ...

阅读全文...

Android RecyclerView Adapter ViewHolder 中获取 Activity

之前记录过如何在 Fragment 中获取父级 Activity,这次发现需要在 RecyclerView Adapter ViewHolder 中获取 Activity。 简单来说,就是: get Context from the view 例如,ViewHolder 中包含一个 text view 用来显示姓名,可以借此获取 context,从而得到 Activity. (binding.name.context as ItemDetailHostActivity).stopSomething() 实际应用场景 例如,在各种嵌套的 RecyclerView Adapter 中想访 ...

阅读全文...

拔牙记,第二颗智齿报废

最近一周左下侧智齿发炎,牙龈都肿了,吃饭都困难,晚上回到家状态就跟发烧一样。 赶紧去门口黑心药店买了盒甲硝唑,先消炎消肿,再去拔牙,担心没消肿医生不给拔牙。 同时,在手机微信上预约烟台开发区口腔医院的挂号,可能预约的晚,周末基本没啥号。于是约了周一上午的副主任医师的号。 拔牙过程折磨人 距离第一次拔牙好多年,我印象中很简单,就直接用钳子硬拔下来。 但这次各种磨,各种薅,取出来的牙碎片有近 10 块。 这次多了个助理,全程抽血水,体验好很多,但是依旧起身吐了两次。 历时一个多小时,才处理完。感觉过程无比漫长,而且有点呼吸困难。 麻药劲太大 拔完牙,半边脸都是麻的。。。拿纸杯喝水,感觉嘴唇左边一半 ...

阅读全文...

Android RecyclerView 嵌套显示 BLE 蓝牙 Service 的 Characteristic 子项

例如,外层 RecyclerView 显示的是一个 BLE 蓝牙设备的 Service 列表; 内存嵌套的 RecyclerView 显示的各个 Service 所包含的 Characteristic 特性列表。 点击展开 Service,显示其所包含的特性。 RecyclerView 嵌套 首先在父级 RecyclerView 的 Item Layout 中定义一个子 RecyclerView 控件 嵌套的 RecyclerViewAdapter 绑定逻辑,在父级 RecyclerViewAdapter 的 onBindViewHolder 中实现 item:BluetoothGattC ...

阅读全文...