MIB275中控加焊USB接口&无线carplay
最终效果
无线carplay,手机和中控都不用插线了,上车自动连接,wifi互联投屏
carplay版高德地图,中控屏显示地图导航,手机显示简洁信息,可以随便放在挡风玻璃前当HUD用或者放在一边充电
手机越狱以后还可以直接在大屏上看视频啥的
动机我这辆车的中控主机型号是 MIB275,使用体验真的是一言难尽……优点是反应还算快,音质马马虎虎,但是除此之外,导航难看(刷高德定制版后是顺眼些了但是每次启动自动进入导航界面,而且要连手机热点才能用,还是很不爽),蓝牙音乐功能简陋(无法实现音乐列表和封面图),所以很长时间我都是使用carplay来进行导航和听音乐。但是这款主机只有前面板一个usb口(包括2020款的车,虽然升级的275C主机更大更漂亮,但是仍然只有前面一个usb口),使用时必须插根线,首先每次上车要先插线很麻烦,而且很容易车子震动大的时候连接断开,副驾拿东西操作空调切歌的时候也很容易碰到,一根线拖老远看着也很不爽。另外还有一个问题,carplay连接的时候蓝牙音乐就不能用了,所以我手机通过carplay导航的时候,老婆大人在副驾想听自己手机里的歌我还得把carp ...
JSONFormat4Flutter v0.9 更新说明
JSONFormat4Flutter 是一个通过输入 json 字符串,生成可以在 Flutter 项目中使用(其实不止)的 dart 语言实体类代码的 GUI 工具。初版编写于2018年1月,由于当时还没有好用的同类工具,所以按照个人的偏好和理解以相对简单粗暴的方式编写了该工具,代码质量惨不忍睹,万万没想到会持续更新到今天。。。
迁移到空安全参考 dart 2.9 打开空安全后全错了,有计划兼容嘛? #30,在 Flutter 升级到2.0之后,默认开启空安全语法检查(参考:迁移Flutter项目到空安全的血泪史),这个工具生成的 json 代码全部都报错了,主要问题如下:
实例的变量需要在声明时初始化,或者在类的构造方法中进行初始化;
类的工厂方法不允许返回 null;
复杂逻辑下的可达性分析和空安全类型提升并不完美(例如对数组字段生成的赋值代码,循环中的 list 对象逻辑上不会为 null,但是语法检查器还是会将其判定为不安全的)
例如:
针对第一个问题,修改后生成的代码所有字段的类型均设置为可空。为什么不是保持字段类型为非空呢,参考:Map 的索引操作符是可空的,由于 ...
迁移Flutter项目到空安全的血泪史——有血、有泪、有💩
2021年3月4日,Flutter正式发布2.0版本——这一天,我回想起了,被脱发支配的恐怖……发际线再次失守的屈辱……
升级后的错误修复如果升级后打开已有项目,还能够正常通过编译,那么恭喜你,这说明你拥有作为 IT 人的最强技能——强运,且敏捷属性点满自带回避 BUG 和异常的效果 👍
然而其实除非项目规模太小,就没引入几个依赖包,大概率此时会因为依赖冲突或者其他插件包内的错误导致编译失败的 😑 。比如我在做的公司项目,引入了接近 40 个依赖和插件,结果自然是原地爆炸 😒……下面就以我的情况为例,介绍一下几种常见情况的处理方法。
charts_flutter 与 flutter_localizations 冲突我的项目中使用了 charts_flutter 这个库用于图表的显示,升级 SDK 后执行 flutter pub get 安装依赖时第一个报出的错误就是:根据报错信息得知,charts_flutter 这个库指定了其引用的 intl 库版本小于 0.17.0,而更新后 flutter SDK 中引用的 intl 库版本正好就是 0.17.0,所以引发了冲突。碰 ...
记一个由护手霜引发的BUG
现象前段时间,忽然注意到在做的 Flutter 项目的日志收集系统中出现了几个异常的用户,他们的日志中出现了大量错误,报错数量多达几千甚至上万:
而且是同一个错误在一段时间内频繁触发,间隔不过十几毫秒:
其具体的错误堆栈信息为:
123456789101112131415161718192021222324252627│ ⛔ Null check operator used on a null value│ ⛔ #0 _AndroidMotionEventConverter.toAndroidMotionEvent.<anonymous closure> (package:flutter/src/services/platform_views.dart:601)│ ⛔ #1 MappedIterable.elementAt (dart:_internal/iterable.dart:374)│ ⛔ #2 ListIterator.moveNext (dart:_internal/iterable.dart:343)│ ⛔ #3 new ...
qrs_detector——Flutter应用中的心电心率识别
公司的纯 Flutter 应用近期要添加一个根据 BLE 心电设备采集到信息实时显示使用者心率的功能,简单研究后发现需要实现一个 QRS波检测算法,记录下研究和实现的过程。
window.onload = function () {
document.querySelectorAll('.hide_code').forEach(function (div) {
var is = div.querySelectorAll('i');
is[0].click();
});
}
DEMO效果演示
var bili1 = document.querySelector('#bili1');
var container = document.querySelector('#article-container');
bili1.height = (container.clientWidth * 3 / 4) + 'px';
前期调查
由于 App 已经实现了 ...
批量转换图片为webp格式
愈发感受 webp 格式的强大,在博客里大部分用例下使用 webp 可以使图片占用的空间降低一个数量级,所以目前所有的图片资源都要转成 webp 后使用,一个一个转换效率太低,于是写了个脚本,可以批量将本目录下的常见格式图片转换为 webp 格式。
1234567891011121314#!/usr/bin/env bash# 创建备份文件夹mkdir "bak"# 利用ls和正则获取当前目录下的所有图片路径存入数组images=$(ls *.{png,jpg})for image in $imagesdo # -q 90 指定转换质量,经试验这个值效果和压缩率都不错 cwebp $image -q 90 -o ${image%.*}.webp mv $image ./bak/$imagedone
不满新版深度终端的动画速度,动手修改编译一个版本
作为 Deepin Linux 的老用户,一直重度依赖老王的深度终端,尤其钟爱其系统级别随时可以一个快捷键从屏幕顶端呼出下拉式终端的所谓雷神模式。最近更新了新版终端,给雷神模式的显示加入了一个长得离谱的动画,非常不爽:目前终端的雷神模式动画有点太慢了吧 ,找到源码对应位置之后决定自己编译一个自用
var bili1 = document.querySelector('#bili1');
var container = document.querySelector('#article-container');
bili1.height = (container.clientWidth * 5 / 8) + 'px';
步骤(可选)安装虚拟机
因为不想在日常使用的机器上安装过多无用的开发依赖包,所以使用最新deepin镜像安装了一个全新的虚拟机,具体方法可以参考我之前的这篇建议Linux用户尝试下kvm虚拟机
下载源码新版本终端的源码位置在:linuxdeepin / deepin-terminal
查看当前系统的终端版本:
所以就 clone 这 ...
重译《百恋歌》
一首很喜欢的歌。但是不很满意所有现有的歌词翻译,这么多年了一直心存芥蒂。今次趁着想给博客撸一个歌词显示组件的功夫,终于决定试着自己翻一版 💩
注:点击下面的开关按钮可以控制对应歌词面板的显示与隐藏
.lrc {
height: 5em;
display: flex;
flex-direction: column;
align-items: center;
background: repeating-linear-gradient(45deg, black, transparent 100px);
border-radius: .5em;
}
.lrc_line {
display: block;
line-height: 1rem;
}
.lrc_line:empty:before {
content: "\200b"; // unicode zero widt ...
优雅地管理国际化资源——i18n-manager
项目开发中国际化多语言的需求非常常见,最近这两年工作项目中都是人工手动管理翻译文件的方式,感觉非常麻烦且容易出错。做 Android 开发的时候,Android Studio 中有一个非常好用的 Translations Editor,那么有没有一个类似的通用工具呢?然后,我找到了 i18n-manager 这个项目
使用方法
var bili1 = document.querySelector('#bili1');
var container = document.querySelector('#article-container');
bili1.height = (container.clientWidth * 5 / 8) + 'px';
下载下面是我加入了免费翻译 API 的版本:https://github.com/debuggerx01/i18n-manager/releases/tag/free_translateFeel free ~
这些年,我与Flutter……
2017年12月
为公司规划中的新项目调研跨平台方案可行性,在尝试了包括React Native、 ionic、 Cordova、 Cordova、 Weex 等在内几乎当时所有流行的方案之后,竟没有一个能够让人满意的。直到发现了当时还在 alpha 版的 Flutter,被其优秀的开发体验、精妙的架构设计和惊艳的流畅度表现所折服,于是开始正式研究该框架。
2018年1月
加入了当时(直至今日仍是)人数最多的 Flutter 技术交流群(Flutter 中文用户组 qq:482462550)。
发现当时没有用于将 json 解析生成数据类模板代码的工具,于是在GsonFormat的启发下,用3天时间撸出了JSONFormat4Flutter的第一版,并分享在交流群内供群友使用,获得了最初的好评。
该工具也成为了目前我 GitHub 上 Star 数最多的项目,虽然在易用性上我确实花了一些心思,但是就代码质量而言这就是一坨💩,能够获得这么多的关注更多的是因为当时没有更好的选择,俗话说“来的早不如来的巧”,这个工具就是出现的时机又早又巧,占了大便宜😂
2月
开始尝试编写公司项目 ...