将 1.47G 的Docker镜像压缩到 600M

抛开场景聊需求都是耍流氓

在目前网络环境这么好的情况下,大文件传输似乎已经没有什么问题了,动辄上G的文件传起来也不在话下,在这个场景下,再大的镜像体积,看起来也没什么问题。我这个镜像体积也不算过分,但是需要通过微信传输 – SVN推送 – SVN下载 – 镜像推送 – K8S 部署这几个步骤,一整套下来也确实挺浪费时间的,而且都是通过公网传输,在没有办法改变流程的情况下(客户要求,无解),尽量缩小镜像体积,会提高很大的效率。

早期的镜像

最早的镜像和最新的镜像体积差别,<none>是不断更新过程中被覆盖的

file

可以先用 docker history 命令看下镜像的构建步骤,可以简单理解成构建了多少层,这是原来刚开始构建镜像的时候写的Dockerfile,在构建过程中,步骤达到了30+,很多RUN操作虽然不会增加体积,但是无形中增加了很多镜像的 layer ,积少成多,会影响构建的效率。

另外还有几十甚至是几百兆的体积增加,最好都尽量避免掉

早期镜像的history

file

现在的镜像

优化之后的镜像history

file

优化方法

由于 Docker 镜像构建,就像它的名字[……]

继续阅读

用 IPv6 远程访问家庭网络设备

不要折腾

最为一个新手,最近搞了一台J4125的机器,装了一个iStoreOS,来体验了一下所谓的轻NAS,里面放一些个人网站、Jellyfin、备份和私人ChatGPT服务,感觉还是非常不错,机器性能也还过得去,但是外网访问是个问题,还没有公网IP,所以有诸多不便,单纯Web服务的话,可以考虑FRP内网穿透,但是对于文件和媒体服务,对FRP的带宽要求就显得高了,所以就另寻蹊径了,看看能不能用IPv6。

抛开环境谈配置都是耍流氓

电信 F450G ZTE的光猫
TP-LINK XDR5430 路由器,升级官方系统到最新版,含防火墙开关
J4125 小主机

一开始比较当心会搞坏网络影响家人上网,所有没有将小主机作为软路由或者旁路由,仅仅作为一个普通的小主机,iStoreOS称为轻NAS

搞定光猫

很久之前通过网上的一些方法,搞到了超管密码,但是后来好像被远程关闭了(光猫是可以被远程控制的,尴尬不尴尬),找密码的办法是(仅在网上的那些192.168.1.1后面加各种后缀无效可尝试,谁不想简单点呢):

  1. 准备好你的网络宽带账号、密码、宽带识别码(LOID )等信息

  2. 拔掉光信号线,捅 R[……]

    继续阅读

是什么让国内开发者如此傲慢

为什么有这个标题

在规划客户需求的时候,看到了一个叫 AIChatWeb 的 开源 软件,为什么有删除线呢,因为我也不知道它到底是不是开源的。我习惯性的看了仓库中的README,这个软件是根据 https://github.com/Yidadaa/ChatGPT-Next-Web 这个项目延伸的,开发出了一个SpringBoot的后台,和一个Vue的前端,来管理页面title、api key以及销售套餐之类的项目。

我大概看了下之后,下意识的认为这个项目前后台都开源,并且在README中也找到了后台地址,但是是一个空仓库,在部署完demo后,发现这个项目功能上还是基本吻合的,准备做二次开发,所以我就加群准备问下如何获得源码以及费用问题(实际上我这是个赚钱的项目,是做好了付费的准备,无非多赚少赚的问题):“你好,想请问这个项目的后端模块是否开源或者是付费获得”,没想到却得到一些“没有开源计划”、“编外人员开源有什么好处”、“白嫖用户洗洗睡吧”、“先买pro版再提问”之类的傲慢回复,所以然后就没有然后了,我就离开了。

然后一直到现在,在GITHUB仓库中,仍然没有明确表示后台不开源,也仍[……]

继续阅读

应该给文心一言以及中国IT技术更多的鼓励

近日,百度开了“文心一言”的发布会,这是一款基于自然语言处理技术的语言模型,与其他知名的语言模型产品如OpenAI的GPT系列以及百度自己的ERNIE等相似。但是,与这些产品相比,文心一言受到了很多批评和质疑。在此,我们应该给这个新兴的产品更多的鼓励,让它有机会展示其潜力。

首先,我们需要认识到,人工智能技术是一个复杂和不断发展的领域。一款新的语言模型需要不断地进行迭代和改进才能达到更好的表现。因此,我们不能期望一款新产品能够立刻和已有的产品媲美,需要给予它更多的时间和空间来成长和发展。

其次,我们应该注意到我们和美丽国IT技术之间的差距。虽然我们在人工智能领域的进步十分迅速,但与美丽国的科技巨头相比还有一定的差距。这主要是由于美丽国的科技公司拥有更为先进和成熟的研发和创新体系,以及更为完善的技术生态。因此,我们的科技企业需要更多地进行技术积累和创新投入,以便在全球市场上更好地竞争。

最后,我们需要认识到,IT技术不仅仅是一种商业竞争,更是全球社会的共同进步。作为全球最大的人口国家和第二大经济体,我们在科技创新方面发挥着越来越重要的作用。因此,我们需要给予我们的科技企业更多的支持和鼓励[……]

继续阅读

一个月备考软考中级软件设计师经验分享

场景

做IT的都有这样的思维:抛开场景聊方案,那就是耍流氓

报考软考的大多有2种场景,一是真心向上,想学习,顺便考个证书证明下自己,另外一种目的就是考证,为了各种补贴、职称、积分等,我就是属于后者,我考的是021地区2022年下半年的考试,上午题50分,下午题56分。

因为在021地区软考可以很方便的增加积分,并且软考是以考代评(也就是考上了,就拥有了中级职称的评比资格,只需要单位的聘书就是中级职称了)

以上并未认证过!

目标

我考的是中级软件设计师,因为我本身就是做了10年左右的Java后端开发,多少有些基础,另外如果想要高级职称的话,对中级职称的资格取得的时间是有要求的。

所以我的目标就是尽量让自己通过两门45分。

过程

了解软考

这次我是从8月份了解到软考并且决定参加考试,在开始的时候看了B站上几个视频,讲了软考的范围,时间,以及题型。看看跟自己是否对口再决定是否考试。

看视频

我看的是很久之前希赛王勇老师的视频,老师讲的很好,但是我认为不太适合我这种速通玩家,反而适合那种时间充裕,并且想学知识的同学。

老师每一章讲的都比较仔细,特别是算法那块,但是未必讲的越细,考题分数比例[……]

继续阅读

记一次错误集成Seata分布式事务组件的经历

先说结论,这是一个非常愚蠢的问题,一个错误的开始,怎么也不可能有正确的结果。

最近在研究SpringCloud,于是学习了一下Ruoyi Cloud版本,本来一切都很顺利,直到在集成Seata分布式任务的时候,使用 @GlobalTransactional 连用 @Transactional的时候,出现了问题,始终会报一个错误:

Could not register branch into global session xid = xxx status = Rollbacking while expecting Begin

org.springframework.transaction.TransactionSystemException: JDBC commit failed; nested exception is java.sql.SQLException: io.seata.core.exception.RmTransactionException: 
Response[ TransactionException[Could not register branch into[......]

继续阅读

二代逸动XT车机免ROOT安装第三方软件教程(全网唯一)

不要折腾

18年的二代逸动XT,到手4年多,最近闲来无事想折腾一下它的车机,很早就知道这个车机能装第三方软件,但是一直都没尝试,所以……

如果说世间一切问题的起源都来自于 闲得蛋疼 + 吃饱了撑的 ,一点也没错,所以,不要折腾。

搜了一圈关键字,一篇都没有对标写二代逸动XT的,大部分都是2018+的逸动(二代逸动)以及长安其他车型,但是教程中,不是版本不匹配,就是步骤缺失,或者是步骤无效,所以这篇或许是全网唯一的逸动XT的车机教程,而且是保姆级的,而且几乎所有的教程都需要ROOT,而ROOT是有风险的,能不搞就别搞了,我用的还是ADB的方法。

我的车型 2018二代逸动XT 自动风潮版 ,理论上当年的逸动平台都是相同的车机,因为同年的逸动在内饰和系统上,都是非常相似,甚至是一个版本的(车机 NOT 行车电脑)。

一些问题

先说问题,先加深印象,在操作失败之后,再回过头看看

  1. 如果直接安装APP,U盘安装、adb安装、PC版的xx助手安装都会失败,底层应该是限制了,会提示xxx.ap is not auth,install failed!
  2. 高德地图升级失败,尝试过网上放出来的,3.2.8、3.2.9、4.3版本均已闪退告终,试了几次就放弃了
  3. 我这里 adb reboot 或者再adb shell里执行reboot now,都不会让车机重启,必须熄火10分钟左右才会彻底关机,没有找到好办法,带来的问题就是每次做测试都需要等很久
  4. 由于车机性能不高,安装这些软件其实并没有带来多少快感,且行且珍惜,还是那句话,不要折腾
  5. 不恢复出厂设置,只放到/system/app下等待重启安装,我只尝试过一次,当时qq音乐安装上了,猜测是com.tencent.xxxx这样的包是白名单,但是后来没有尝试,可以考虑将别的apk修改包名来达到这个效果,需要测试

准备工作:

  • 一根双公头的USB线
  • 一个充满电的笔记本电脑
  • 驱动管理软件 [下载地址在文末]
  • 下载好 adb 工具,和你想要的软件(apk)
  • 自己的手机

步骤

  1. 先把车机连上蓝牙,因为只有连上蓝牙才能在inCall里呼出拨号界面,输入 *#518200#* ,车机就会进入安卓原生界面。

  2. 在根菜单 安全 下,打开 允许安装未知来源的软件,返回

  3. 在根菜单 开发者选项下,打开 USB 调试,返回

  4. 在根菜单 主屏幕 中选择启动器为默认启动器

  5. 把连上蓝牙的手机拨一个错误的号码,为的是在车机上呼出拨号键盘(如果你有其他办法可以忽略)

  6. 输入 *#518121#*,此时会提示 操作成功,类似这样的提示

    在很多教程里,都会让下面在输入一个 *#518101#* 用于打开 ADB,而我这边测试下面是没反应的。而有另一个打开 ADB 的地方

  7. 把电脑用USB线连接车子左边那个USB口

    其实到这一步,幸运的可能已经能听到电脑提示接入新的硬件设备的声音了,但是我本身在折腾过程中,不是这么操作的。因为可能已经打开过 ADB 了

  8. 按住方向盘音乐界面,然后左下角回到主页,打开一个叫工程模式的APP,在左侧菜单 功能测试里打开系统ADB,并且关掉 小灯,然后左侧菜单拉到最下面 自动化测试,会看到一个叫 连接 ADB的按钮,点它!

    • 因为在第4步已经修改过启动器了,所以在音乐那边按主页按钮会回到安卓原生首页
    • 并且如果不关闭小灯,在自动化测试会因为背景光的问题,看不到连接ADB
    • 此时无论如何,电脑也应该识别到了新硬件了
    • tip:在拨号界面输入 #201301# 也可以进入工程模式

[……]

继续阅读

解析 HMDB 代谢物(Metabolite) 数据库并做本地化查询服务

背景介绍

本项目用于本地化查询、导出 HMDB 中的代谢物的信息。原始数据来自于:https://hmdb.ca/downloads (版本5.0,Data Set of All Metabolites),原始文件非常大,大约在 6G,先使用 Python 将原始代谢物的数据导入到 Mongo DB 中,然后再在Java项目中提供查询和导出。

解析代码

先要解决的一个问题就是如何读取一份超级大的XML文件,一次性读取到内存里显然不适合,虽然这次文件不大,只有6G,在生信分析的服务器动辄512G的内存前面来说就是弟弟,但必定开发还是在本地,而且保不齐后面文件还是会有更新

Python解析XML的库很多,用了 xml.etree.ElementTree 来处理,使用 iterparse 方法来迭代每一个标签,当遇到你需要处理的标签的时候,就来处理,并且使用了一个生成器(这里完全为了体验一下Python语法,也可以不用)

#!/usr/bin/python3

import xml.etree.ElementTree as ET
import psutil
import os
import xmltodict, json
from MongoDBUtil import MongoDBUtil

#这是原始xml里的namespace
namespace = '{http://www.hmdb.ca}';
def hmdbParse(filename, groupTag):
    '''
        增量解析 filename ,并且按groupTag作为一组,其实这里就是 metabolite 了
        使用了生成器,并且使用
    '''
    ET.register_namespace("xmlns","http://www.hmdb.ca")
    #迭代文件,增量
    doc = ET.iterparse(filename, ('start', 'end'))
    # Skip the root element
    next(doc)

    #循环读取解析器得到的结果
    for event, elem in doc:
        if event == 'end':
            #一旦是结束标签,并且是你想要的标签,就return出去
            if namespace+groupTag == elem.tag:
                yield elem
                #这里是把上一次的标签清空掉,这样就不会占用太多内存
                elem.clear()

if __name__ == "__main__":
    #xml文件地址,和需要解析的标签
    data = hmdbParse('hmdb_l30000.xml', 'metabolite')

    mongoUtil = MongoDBUtil(ip="127.0.0.1", db_name="bio_db", port="27017")
    insertBatch = []
    idx = 0
    for meta in data:
        #使用自带方法转换成xml字符串的字节流
        xmlstr_byte = ET.tostring(meta, encoding='utf8', method='xml')
        #转换成UTF8的xml字符
        xmlstr = str( xmlstr_byte,encoding = "utf8" ).replace("xmlns:","");
        #转成字典
        xmldict = xmltodict.parse(xmlstr) 
        accessionId = meta.findtext(namespace+"accession")

        #批量插入
        insertBatch.append(xmldict)
        idx+=1
        if(idx % 500 == 0):
            #500条插入一次
            mongoUtil.insert_many(collect_name="hmdb2210", documents=insertBatch)
            #插入后清理一下    
            insertBatch.clear()
            print("insert 500 data, clear")

    #如果循环执行完了,insertbatch中还有小于500的,那就执行完,因为我也不知道
    #怎么判断生成器是不是执行到了最后一个行
    if(len(insertBatch) < 500):
        mongoUtil.insert_many(collect_name="hmdb2210", documents=insertBatch)

    print('all data done.')

[……]

继续阅读

使用 leetdown 强制降级iPad mini2的一些问题

既然能看到这篇文章,说明leetdown的用法和场景就不用多说了,网上的教程很多,搜索关键字 leetdown、A7、iPad mini2 降级 就会有很多结果。

我手上有2台mini,都准备降级一下,但是经历了很多次失败,我也看到网上说的很多原因,大概整理了一下,先说结论,我是在M1的Mac Mini下成功的。

  • 网上成功率比较高的是 2.0.1a 版本
  • 如果持续的失败,尝试用爱思助手重新刷好系统,再次尝试(我就是这样成功的)
  • 不要使用usb扩展坞之类的,直接插电脑
  • 使用官方数据线,C口线在n次失败的过程中使用过,但最后成功是A口
  • 保持足够电量,至少20% (怀疑这是我失败多次的原因)
  • 关掉代理(网上看到的,感觉没有理论支撑,死马当活马医了)

下面看图说一下我的过程。准备软件 https://github.com/rA9stuff/LeetDown 和数据线,以及你准备复活的设备。

用爱思助手下载好10.3.3 的固件

插上线,信任电脑

此时leetdown会提示没有进入DFU模式,爱思助手也没显示

按住Home和关机键,大概5秒左右会黑屏,然后松开关键键(Home持续按),[……]

继续阅读

使用PaddleRec构建电影推荐系统

最近在学习智能推荐这块的内容,以前从来没有接触过,而且对数学、算法这类的知识是有所欠缺的,所以学习起来可能会费力些,所以就基于百度AI平台做一些demo

我理解的智能推荐

一共3个部分,分别是 用户信息、项目(Item)信息、用户和内容关联信息,拿常见的电影喜好预测来说,用户信息是网站用户,项目信息是电影,而内容关联信息是用户给电影的打分,通过把大量的用户特征+项目特征,和真实评分放到一起,可以通过一些模型来学习这些用户的喜好,其实就是把某一类用户的特征总结出来,发现他们喜欢什么类型的电影。

为什么选择PaddleRec

在算法和机器学习领域,我属于小白,而通过体验了一些关于机器学习的附带产品后,感觉百度AI还是非常不错的,例如它的图像处理等,而且主要是Ai Studio有一键部署的坏境和免费的GPU训练,并且也有很多前辈写好的代码和说明。

下面就把在AI Studio平台学习的过程分享出来,我在百度平台开源的项目地址在 https://aistudio.baidu.com/aistudio/projectdetail/4508155

项目概述

本项目的代码是基于 告别电影荒,手把手[……]

继续阅读