自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 Hugo教程#5遍历页面

前面几期视频学习了一些布局和模板语法,其实Hugo的最终用法就是来写个人博客,需要遍历出所有的博客来呈现在网站的主页,Markdown文件都会创建一个页面,所以只需要把每个页面的地址遍历出来就行了

2022-12-17 10:17:34 249

原创 Hugo教程#4基础布局

前几期学习了布局,本期学习一下布局更多的用法,比如partial和block,其中partial可以吧每个布局引用,block可作为布局的扩展

2022-12-17 10:16:55 303

原创 Hugo教程#3单页面布局

上集我们学习了如何创建一个index的布局,那么是不是所有的页面都要创建一个布局,那肯定不是的,那样的话实在太麻烦,因为只显对应页面的markdown里面的内容,所以创建一个single.html布局就可以了,所有的页面都可以使用这个布局

2022-12-17 10:16:47 310

原创 Hugo教程#2布局

从本集开始,就开始和布局打交道了,所以我们需要学习Hugo的模板语法,其实也刚开始一步一步来,不需要一次学一堆

2022-12-17 10:15:54 566

原创 Hugo教程#1配置开发环境

前段时间我把我的博客的生成器从Jekyll换到了Gatsby后来发现并不好用,又想回到Jekyll,最后由于ruby的gem安装老是出错,所以我试了一下Hugo

2022-12-17 10:15:23 844

原创 解决Debian网速慢问题(Ubuntu、Linux Mint等衍生版)

最近在我的笔记本上换了Debian,装上驱动后发现网速很慢,后来换了Ubuntu,Ubuntu自带了网卡驱动,测试了一下网速发现网速还是很慢,只要是基于Debian的系统,或者基于Ubuntu的Mint也是慢。上找到了解决方法,其实内核5.15这个版本有问题,我升级到了5.17后发现好了点,不过网速还是慢,所以我将内核直接升级到6.0,测试了一下网速发现网速是可以跑满了。进入到6.0后最上面有4个deb文件是amd64的,其他处理器可以在下面找到,下载下来后全部安装后重启就可以了。进入到Ubuntu的。

2022-10-07 16:48:25 1863

原创 如何使用Gatsby创建自己的博客

每个markdown文件的前几行都会有用3个横杠抱起来的内容,这个就是Front-matter格式,博客的信息都会从这里获取,title是博客的标题,date是发布时间,description是描述,其中时间必须遵守正确的格式。如果需要没有自己的域名就把仓库设置为这个格式,注意的是GitHub的用户名而不是昵称,如果有自己域名那就让域名解析CNAME到这个地址中,并且在项目的static目录下创建CNAME文件,填入你的域名。在创建项目时后面跟着一个github地址,这个是gatsby官方的一个博客模板。

2022-10-07 16:47:07 627

原创 Netty手写RPC框架

首发于Enaium的个人博客协议就用上篇文章的协议public class Message implements Serializable { private final long order; public Message(long order) { this.order = order; } public long getOrder() { return order; }}只不过Message加了个Order熟悉,

2022-03-14 15:19:06 1081

原创 Netty自定义协议

首发于Enaium的个人博客先写一个Messsage类,解码的时候将要把ByteBuf解码为Messagepublic class Message implements Serializable { private final String data; public Message(String data) { this.data = data; } @Override public String toString() { r

2022-03-12 19:54:33 4327

原创 Token+Redis登录认证

首发于Enaium的个人博客首先需要了解一下大概的步骤登录生成一个Token存入Redis有效期为30分钟,返回到前端之后前端每次请求,带上登录时返回的Token服务器判断前端带来的Token是否在Redis服务器中存在放行并且重置Token有效期,不存在拦截一个简简单单的登录请求@RequestMapping("/login")@ResponseBodypublic Result<String> login(@RequestBody UserDTO userDTO) {

2022-03-10 19:44:11 3108

原创 实现JPanel切换

首发于Enaium的个人博客public static void main(String[] args) { JFrame jFrame = new JFrame("Test"); jFrame.setSize(500, 500); jFrame.setLocationRelativeTo(jFrame.getOwner()); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.setLay

2022-02-28 17:21:12 702

原创 Netty Http服务器接收请求

首发于Enaium的个人博客public class Server { public static void main(String[] args) { EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); try { serverBootstrap.g

2021-07-19 16:03:56 490

原创 Java实现Autowired自动注入

首发于Enaium的个人博客继续使用上个文章的类容器创建一个注解@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface Autowired {}遍历所有字段包括私有的private void autowired() { for (Map.Entry<Class<?>, Object> classObjectEntry : classes.entry

2021-07-16 21:43:01 2107

原创 Java实现一个类容器

首发于Enaium的个人博客新建2个类public class Test1 {}public class Test2 { public void render() { System.out.println("Test2"); }}public class ClassContainer { private final HashMap<Class<?>, Object> classes = new HashMap<>

2021-07-16 21:38:22 197

原创 Java遍历类路径所有类

首发于Enaium的个人博客public class WalkClasspathAllClasses { public static void main(String[] args) throws URISyntaxException, IOException { List<URL> urls = new ArrayList<>(); //获取Classpath if (WalkClasspathAllClasses.cla

2021-07-16 13:37:25 393

原创 [ASM教程]#6树API

首发于Enaium的个人博客使用树API来生成一个类public static void main(String[] args) { ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); ClassNode classNode = new ClassNode(); classNode.visit(V1_8, ACC_PUBLIC, "cn/enaium/learn/asm/learn6/Lear

2021-07-16 13:36:30 271

原创 120行代码手写一个简单的MyBatis实现简单的CRUD

首发于Enaium的个人博客不用XML只用注解首先需要创建6个注解SQL用于输入SQL语句@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface SQL { String[] value();}用来表示这个方法是Update@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @inter

2021-04-21 22:14:38 181

原创 详细介绍如何发布到Maven中央仓库

首发于Enaium的个人博客注册账户https://issues.sonatype.org发布问题(创建新的工程)https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134摘要:项目名称Group Id:组名 这里要用自己的域名的话一定要保证有域名的所有全,后面会让你添加dns记录来验证Project URL仓库地址SCM URL git地址之后创建等待回复 会让你添加DNS记录添

2021-04-15 12:48:08 324

原创 [ASM教程]#5字符串混淆

首发于Enaium的个人博客测试类,需要混淆这里所有的字符串,上一期我们学习了如果插入一个常量,那么拦截插入常量的时候判断是不是字符串,如果是就混淆它。public class Learn5Test { private final String name = "Enaium"; private Learn5Test() { render(name); } private void render() { System.out.print

2021-03-19 20:23:07 346

原创 [ASM教程]#4创建对象和数组

首发于Enaium的个人博客这期我们要创建一个对象和数组。MethodVisitor methodVisitor = classWriter.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);methodVisitor.visitTypeInsn(NEW, "java/lang/String");//插入一个对象,操作码是NEW,类型是String。methodVisitor.visitLdcInsn("Enaium");//插入

2021-03-19 20:22:33 651

原创 [ASM教程]#3增加移除类成员

首发于Enaium的个人博客可以委托一个ClassWriter。public class MyClassVisitor extends ClassVisitor { public MyClassVisitor(ClassWriter classWriter) { super(ASM5, classWriter); }}这样就可以把读取到的类转换为二进制文件了。ClassReader classReader = new ClassReader(Learn3Test

2021-03-19 20:21:49 220

原创 [ASM教程]#2生成类

首发于Enaium的个人博客public class Learn2 { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); classWri

2021-03-19 20:21:15 188

原创 [ASM教程]#1分析类

首发于Enaium的个人博客ASM是一种通用Java字节码操作和分析框架,它可以用于修改现有的class文件或动态生成class文件。直接进入主题,分析这个类。public class Learn1Test { public boolean aBoolean = false; public void render() { System.out.println("Hello ASM"); }}先创建一个MyClassVisitor类,继承ClassVis

2021-03-19 20:20:44 245

原创 自写一个EventBus

首发于Enaium的个人博客EventBus,什么是EventBus。EventBus是事件发布-订阅总线,简单来说监听一个事件,一个方法订阅这个事件,如果事件调用,那么订阅了这个事件的方法也会跟着调用,这就是EventBus。创建一个注解,用于订阅事件,名字可以随便起,当然也可以叫Subscribe,我这里叫Event。@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Event {

2021-02-23 22:34:23 365 1

原创 [BlocklyNukkit入门]#8高级窗口

首发于Enaium的个人博客manager.newCommand("test", "test", function (sender, args) { var test = window.getCustomWindowBuilder("Title");//创建一个高级窗口 test.buildLabel("Label");//创建一个标签,参数1标题 test.buildInput("Input", "Input");//创建一个输入框,参数1标题,参数2提示 test.b

2021-01-13 11:23:22 201

原创 [BlocklyNukkit入门]#7选择窗口

首发于Enaium的个人博客manager.newCommand("test", "test", function (sender, args) { var test = window.getModalWindowBuilder("Test", "Select");//创建选择窗口 test.setButton1("A");//设置按钮1 test.setButton2("B");//设置按钮2 test.showToPlayer(sender, "Call");//显

2021-01-13 11:22:32 178

原创 [BlocklyNukkit入门]#6简单窗口

首发于Enaium的个人博客manager.newCommand("pa", "pa", function (sender, args) { var pa = window.getSimpleWindowBuilder("Pa", "选择一个玩家");//创建一个简单的窗口 //遍历全服玩家 onlines = Java.type("cn.nukkit.Server").getInstance().getOnlinePlayers().values().toArray();

2021-01-13 11:21:58 170

原创 [BlocklyNukkit入门]#5自定义物品

首发于Enaium的个人博客自定义物品创建一个木棍item = blockitem.buildItem(280, 0, 1);设置名字item.setCustomName("棍");设置信息,用分号隔开换行blockitem.setItemLore(item, "第一行;第二行;第三行;第四行");添加有序合成添加有序合成,设置G为橡木原木的键,G就代表原木.参数1用字符串数组类型,3个字符串代表合成台的3行,每一行有3个物品,用键来代表,空格代表没物品.参数2是合成后的物品.

2021-01-13 11:21:22 279

原创 [BlocklyNukkit入门]#4创建命令

首发于Enaium的个人博客创建一个命令manager.newCommand("shout", "喊话", function (sender, args) { });Python可以吧function改为方法名 比如manager.createCommand("shout", u"喊话", "myCallBack")def myCallBack(sender, args): pass遍历全服玩家alllist = Java.type("cn.nukkit.Server").ge

2021-01-13 11:20:49 288

原创 [BlocklyNukkit入门]#3玩家进服欢迎

首发于Enaium的个人博客进服欢迎我们可以在bn的文档里查到PlayerJoinEvent玩家进入服务器的事件 这样我们就可以很“方便”的编写插件了JavaScriptfunction PlayerJoinEvent(e) { e.getPlayer().sendMessage("欢迎" + e.getPlayer().getName() + "进入服务器!JavaScript");}Pythondef PlayerJoinEvent(e): e.getPlayer().

2020-10-07 20:28:35 303

原创 [BlocklyNukkit入门]#2HelloWorld

首发于Enaium的个人博客编写插件BlocklyNukkit以下简称bnbn支持JavaScript、Python和Lua等脚本语言 也有图形编辑器JavaScriptlogger.info("Hello JavaScript!");Python注意! 如果有汉字等特殊字符要加上# -*- encoding: utf-8 -*-注释print u"Hello Python!"Lualogger:info("Hello Lua!")使用插件放入文件夹./plugin/Bloc

2020-10-07 20:27:20 346

原创 [BlocklyNukkit入门]#1配置开发环境

首发于Enaium的个人博客配置Nukkit这里用PowerNukkit举例下载好之后用java -jar nukkit.jar运行客户端 语言选自选如果没正版把server.properties里的xbox-auth=on改成xbox-auth=off配置BlocklyNukkit下载BlocklyNukkit放到./plugins文件夹里面完成...

2020-10-07 20:25:35 685

原创 [Jekyll入门]#4条件、循环

首发于Enaium的个人博客条件循环

2020-10-07 20:23:43 171

原创 [Jekyll入门]#3布局

首发于Enaium的个人博客布局自定义创建_layouts目录创建布局post.html布局使用布局在布局中也能使用其他布局默认布局所有布局都会使用一个default的布局

2020-10-07 20:22:00 191

原创 [Jekyll入门]#2配置、帖子、页面

首发于Enaium的个人博客配置title: Myblog #标题email: Myblog@example.com #邮箱description: >- #说明 This is my blog.baseurl: "" #仓库名 比如 myblogurl: "" #域名twitter_username: Myblog #推特github_username: Myblog #github# Build settingstheme: minima #主题plugins: #

2020-10-07 20:21:29 213

原创 [Jekyll入门]#1配置开发环境

首发于Enaium的个人博客安装RubyRubyInstaller安装Jekylljekyll new myblogcd myblogjekyll serve预览http://127.0.0.1:4000/

2020-10-07 20:20:54 205 1

原创 Java插件化开发

首发于Enaium的个人博客在java程序开发过程中. 可能需要加载插件的功能. 所以要动态加载Jar文件来实现插件的加载.我这边用了Kotlin一. 创建接口interface PluginInitializer { fun onInitialize()//插件初始化}二. 加载插件加载的插件可能会抛出什么异常所以要用tryprivate val file = Fil...

2020-05-04 09:50:33 709

原创 使用 SpringBoot+Vue 实现留言版

首发于Enaium的个人博客完成源码一.新建Vue项目和SpringBoot项目新建Vue项目新建文件夹SpringBoot-Vue-MessageBoard创建Vue项目使用vue ui命令(需要vue 3.0选择刚才的目录名字为Vue创建后V还是小写 创建后可以改为大写取消git初始化手动配置取消打开创建项目,不保存预设新建SpringBoot项目...

2020-04-20 19:57:06 3166

原创 [全民写端]#12绘制ClickGUI

首发于Enaium的个人博客一. 先复制进去FontUtilsFontUtilspackage cn.enaium.coreium.utils;import net.minecraft.client.Minecraft;import net.minecraft.client.gui.FontRenderer;import net.minecraft.util.StringUtils...

2020-03-22 16:59:53 730

原创 [全民写端]#11绘制主菜单

首发于Enaium的个人博客一. 搜索GuiMainMenu这个类二. 删除drawScreen方法内所有三. 删除无用方法(显示为灰色的方法)四. 在drawScreen方法绘制public void drawScreen(int mouseX, int mouseY, float partialTicks){ //获取屏幕长和高 ScaledResoluti...

2020-03-22 16:59:09 323

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除