随便写写
  • 首页
  • 每日AI图
  • 归档
  • 分类
  • 标签
  • 专栏
    Spring AI 混淆技术研究笔记
  • 开源项目
    PageHelper mybatis-mapper tk-mapper
  • 关于
Spring AI ETL 流水线

Spring AI ETL 流水线

先纠正 Spring AI 使用本地 Ollama Embeddings 中的一个错误,当启动 Ollama 之后,Windows会有托盘图标,此时已经启动了 Ollama 的服务,访问 Embedding 时不需要运行 ollama run gemma ,只有访问 chat 时才需要启动一个大模型。 Spring AI 提供的 ETL 流水线比较全面,使用很简单。提取、转换和加载 (ET
2024-06-26
系列文章 > SpringAI
#SpringAI #ETL
Ollama 导入自定义模型

Ollama 导入自定义模型

在前面 Spring AI 使用本地 Ollama Embeddings 中查找 Embedding 模型的时候,首先看到了 mofanke/dmeta-embedding-zh 模型,这才发现 Ollama 中除了官方模型外还有用户自己上传的其他模型,搜索 dmeta-embedding-zh 找到了抱脸网上的对应模型: https://huggingface.co/DMetaSoul
2024-06-26
系列文章 > SpringAI
#SpringAI #Embeddings #Ollama
Spring AI 使用本地 Ollama Embeddings

Spring AI 使用本地 Ollama Embeddings

使用 OpenAI 的 Embeddings 接口是有费用的,如果想对大量文档进行测试,使用本地部署的 Embeddings 就能省去大量的费用,所以我们尝试使用本地的 Ollama Embeddings。 首先本地安装 Ollama: https://ollama.com/download 即使你电脑没有性能很强的显卡,仅仅依靠 CPU 也能运行一些参数量较小的模型。ollama 中下载量最多的
2024-06-26
系列文章 > SpringAI
#SpringAI #Embeddings #Ollama
Spring AI 连续对话

Spring AI 连续对话

在前面 Spring AI Chat 简单示例 中我们只调用了一次请求,返回了一个结果,我们见过的各种 chat 都是支持连续对话的,AI 需要记住我们的上下文才能让对话连贯起来,通过 API 调用的时候每次对话都是一次无状态的独立请求,想要实现连续对话就需要我们自己记住对话的历史,在每次调用 API 的时候将对话历史传递给 API。 本文就简单实现连续对话,并且引申一些相关的扩折或者优化。
2024-06-26
系列文章 > SpringAI
#SpringAI
Spring AI Function 的实现原理?

Spring AI Function 的实现原理?

在前面 Spring AI Chat 简单示例 中介绍了 Chat 中的 Function 用法,我很好奇这个 Function 是如何被调用的,就在下面代码中加了断点看执行: 执行过程中进入了这个方法,并且符合 Request 类型的参数,这是如何实现的?就像魔法一样神奇,这是 Spring AI 的功能还是 OpenAI 的功能?好奇心引导我必须深入看看。 跟踪代码 - 加日志先找了几个断点
2024-06-26
系列文章 > SpringAI
#AI #SpringAI #Function
Spring AI Embeddings 和 Vector 入门

Spring AI Embeddings 和 Vector 入门

在前面 Spring AI Chat 简单示例 中介绍了 Chat 的基本用法,本文在此基础(主要是pom.xml)上继续探索 Embedding 和 Vector。 官方文档: embeddings: https://docs.spring.io/spring-ai/reference/api/embeddings/openai-embeddings.html redis: https://
2024-06-26
系列文章 > SpringAI
#AI #SpringAI #Embeddings #Vector
Spring AI Chat 简单示例

Spring AI Chat 简单示例

官方文档地址: https://docs.spring.io/spring-ai/reference/index.html Spring AI 可以方便 Java 开发者在代码中集成 AI 的功能,通过 Spring 提供的抽象,可以方便的切换不同的AI提供商,Spring AI 是对 AI 的使用,并不涉及 AI 的训练。 特别注意: Spring AI 目前还很不稳定,官方文档还有大量错误,
2024-06-26
系列文章 > SpringAI
#AI #SpringAI
我做了个Hexo博客

我做了个Hexo博客

最近花了两个周末的时间边学变做Hexo博客,最终成品地址如下: https://blog.mybatis.io 下面先说说做博客的经过,想做Hexo博客一开始是因为看到了 hexo-theme-icarus 主题,这个主题样式如下: 首页 内容页 这个主题是不是真的好看?我总觉得我喜欢这个主题是因为和CSDN的样式很像,支持一栏、二栏、三栏,和CSDN确实很像: 我用Hexo做独立博客
2024-06-23
技术文章 > Hexo
(八)扩展yGuard实现签名

(八)扩展yGuard实现签名

前面铺垫了这么多,终于开始实现签名反篡改的功能了。 下载 yGuard 源码(https://github.com/yWorks/yGuard), 然后先修改一处错误,在 settings.gradle 中定义的项目名是错的(和github上的名字不一样,git clone 下载会使用 github 定义的名字yGuard,估计作者本地建的项目名是 yguard),将里面的 rootProject
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard #签名
(七)Ant扩展介绍

(七)Ant扩展介绍

ant 扩展官方文档:https://ant.apache.org/manual/develop.html Writing Your Own Task编写你自己的任务 1. 创建一个XXTask类创建一个Java类继承org.apache.tools.ant.Task ,实际上不继承也可以,定义一个 execute() 方法就可以,例如下面的例子: 12345public class MyTa
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard #Ant
(六)如何基于yGuard实现?

(六)如何基于yGuard实现?

确定参考 <adjust> 作为入口后,就需要详细了解这部分代码的逻辑。 需要看yguard源码了,你会如何阅读一个完全不了解的源码? 我通常的策略都是找一个目标,添加代码依赖,写好demo,debug跟踪代码看。如果漫无目的的看,很难串起来整个流程,范围太大也容易迷失。 先在配置中增加 <adjust> 配置: 123<adjust replacePathPolic
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard
(五)混淆后如何反篡改?

(五)混淆后如何反篡改?

有了上一节的基础工具后,接下来要考虑如何反篡改。 本文采用的是对混淆后的代码,针对某些关键包的字节码数据计算md5值,对所有类计算完成后对md5值进行排序,排序后拼接字符串再次计算md5值,最后通过私钥对md5进行RSA对称加密,加密后的内容要放到核心的jar包中。 程序在启动时,需要有一些入口点调用代码校验,代码校验时使用classloader搜索指定包中的所有class数据,对这些数据按照相同
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard #反篡改
(四)反篡改介绍

(四)反篡改介绍

先来看看AI的介绍,为了防止Java代码打包的JAR包被篡改,可以采取以下几种措施: 使用数字签名:可以使用Java的签名工具(如Jarsigner)对JAR包进行数字签名。签名可以确保JAR包的完整性和来源可信性。在验证JAR包时,可以使用Java的验证工具(如Jarsigner或Java Web Start)来验证签名。 使用加密技术:可以使用加密算法对JAR包进行加密,确保只有授权的用户
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard #反篡改
(三)多模块混淆

(三)多模块混淆

示例项目: https://github.com/abel533/yguard-modules-parent 假设有如下多模块项目: 1234module-parent├─module-a├─module-b└─module-c 在 混淆技术研究笔记(一)常见工具介绍 中提到,默认只能使用单模块混淆,每个模块构建时的上下文只有自己,无法对其他模块进行处理,虽然 <<inoutpa
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard
(二)yGuard入门

(二)yGuard入门

yGuard官方文档地址:https://yworks.github.io/yGuard/index.html yGuard官方文档包含了比较全面的内容,由于文档是英文的,而且文档翻译后的浏览效果不是特别好,所以看文档入门有点难度。 这个系列的重点是混淆,所以不会涉及yGuard中的shrink用法,主要是rename的用法。 本文使用的 maven-antrun-plugin 插件,插件的基本配
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard
(一)常见工具介绍

(一)常见工具介绍

混淆技术研究笔记包含多篇内容,记录了一次混淆的研究和应用的过程。 最近有一个 Java 的底层框架需要进行混淆(从原始的 Java 项目改造为了 Maven 多模块),而且要实现和该框架以前一样的混淆和反篡改功能(旧的打包配置我没权限看到),为了实现这些功能,开始了本系列的研究。 1. 常见工具介绍第一节先来点简单的内容,下面是通过 AI 生成的几款常见的混淆工具简介及对比。 ProGuard
2024-06-22
系列文章 > 混淆技术研究笔记
#混淆 #yGuard
避免啰嗦,不要多此一举!

避免啰嗦,不要多此一举!

看到一段代码,写的比较啰嗦就用GitHub Copilot简化了一下,简化结果很简单,复杂度从273%降低到13%(复杂度使用IDEA插件 Better Highlights )。代码行数从79行变成了29行,下面是原始代码: 1234567891011121314151617181920212223private static boolean comparelogic(String condit
2024-06-06
技术文章 > 编程技巧
#设计模式 #策略模式 #代码优化 #Java
Redis 异常三连环

Redis 异常三连环

本文针对一种特殊情况下的Reids连环异常,分别是下面三种异常: NullPointerException: Cannot read the array length because “arg” is null JedisDataException: ERR Protocol error: invalid bulk length JedisConnectionException: Unex
2024-06-04
技术文章 > 解决问题
#Java #异常 #Redis
谷歌 Colab:学习 Python 和大模型的利器

谷歌 Colab:学习 Python 和大模型的利器

简介谷歌 Colab,又称 Colaboratory,是一个基于 Jupyter 笔记本的免费在线平台,可让您在浏览器中编写和执行 Python 代码。它无需配置,即可轻松访问 GPU 和 TPU 等强大硬件,并支持丰富的文本、代码、图像、视频等格式,非常适合学习 Python 和大模型。 网址:https://colab.research.google.com/ 谷歌colab更简洁,打开
2024-03-18
技术文章 > 工具
编码技巧:多条件判断拼接字符串

编码技巧:多条件判断拼接字符串

在写代码业务逻辑的时候,有时候需求稍微变化一下都让代码变的很麻烦,如果只在现有代码基础上硬改,可能会让可读性降低,本文通过一个例子来演示字符串拼接的变化。 一开始的业务逻辑比较简单,是固定条件加一个需要判断再追加的条件: 123List<String> currentUserDeptIds = getCurrentUserDeptIds();return "forcetend
2024-03-15
技术文章 > 编程技巧
1234

搜索

Hexo Fluid
总访问量 次 总访客数 人