Logo

site iconCoderDD | 程序猿DD

程序员、阿里云MVP、腾讯云TVP。openwrite 开发者。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

CoderDD | 程序猿DD RSS 预览

2.1K Star,一个帮你自动完成JavaDoc注释的IDEA插件

2023-09-04 01:30:38

大家好,我是TJ!有段时间没给大家推荐好用工具了,主要是最近工作摸鱼太厉害了,所以也没去探索和接触新东西。

前几天,TJ被领导喷了,原因是代码里注释太少,导致写的SDK在生成JavaDoc文档的时候,有价值的说明内容太少,以后维护不方便。于是马上着实去优化这个是,现在是AI时代了,肯定不能死做,第一反应就是去找找看是否有直接可以用的工具。

于是,我找到了这么个IDEA插件:Easy Javadoc

大家有需要的可以直接打开IDEA,在plugins市场里搜索,就能获得。

在安装完插件之后,您只需要记住下面这些快捷键,然后就可以去代码里自动生成了:

下面跟着动图演示,来体验一下该插件快速生成JavaDoc的能力:

可以看到,它的主要功能就是根据函数名称、参数名称等代码层面的信息,通过翻译,自动生成相关的中文注释。所以,虽然有插件的辅助,但开发者还是要有良好的编码习惯,写能让人看得懂的参数定义、方法定义。这样,后续的其他自动化生成工具就都能完美的用上,来提高我们的工作效率了。

由于该插件会用到翻译功能,所以各位用户还要去选择和配置一下你需要使用的翻译API,每个供应商每月都有免费额度,对于个人来说,都足够使用了,下面是主流的一些翻译API,需要的可以自取:

好了,今天的分享就到这里,感兴趣的可以根据下面相关链接了解更多内容:

欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!

Java 21 新特性:String Templates(字符串模版)

2023-09-02 05:07:51

在日常写Java的时候,对于字符串的操作是非常普遍的,其中最常见的就是对字符串的组织。也因为这个操作非常普遍,所以诞生了很多方案,总下来大概有这么几种:

  • 使用+拼接
  • 使用StringBufferSpringBuilder
  • String::format and String::formatted
  • 使用java.text.MessageFormat

下面,我们一起来学习一下Java 21中的新方案!如果您对于上面这些还不熟悉的话,建议可以先看一下这篇《Java自带的4种字符串组织和格式化方法》,了解以前的机制,这样与最新的处理方案做对比,理解会更深刻。

模版表达式

在Java 21中处理字符串的新方法称为:Template Expressions,即:模版表达式。

模版表达式是Java语言中的一种新表达式。它可以执行字符串插值,帮助开发人员通过编程的方式安全高效地组织字符串。此外,模板表达式不仅仅可以用于组织字符串,它还可以根据特定模型的规则将结构化文本转换为任何类型的对象。

下面通过一个简单的案例来认识一下它:

String blog = "blog.didispace.com";
String str = STR."My blog is \{blog}";

上述代码中的第2行就是一个模版表达式,其中主要包含三个部分:

  • 模版处理器:STR
  • 包含内嵌表达式(\{blog})的模版
  • 通过.把前面两部分组合起来,形式上类似方法调用

当模版表达式运行的时候,模版处理器会将模版内容与内嵌表达式的值组合起来,生成结果,所以上面案例中的字符串str在运行时的结果为:My blog is blog.didispace.com

多行模版表达式

还记得之前我们的Java新特性专栏中,介绍过Java 15中的文本块特性吗?类似下面这样的写法:

String html = """
<html>
<body>
<h1>Java 15 新特性:文本块 | 程序猿DD</h1>
<p>didispace.com</p>
</body>
</html>
""";

模版表达式也支持类似的多行字符串处理,所以开发者可以用它来方便的组织html、json、xml等字符串内容,比如下面这样:

var json = STR."""
{
"user": "\{name}",
"age: \{age}
}
""";

STR模版处理器

上面案例中我们所用的STR模版处理器中的内嵌表达式都采用了字符串内容,而实际上STR模版处理器还有更多的用途。

  1. 内嵌表达式中还可以之前数学运算,比如:
int x = 10, y = 20;
String s = STR."\{x} + \{y} = \{x + y}";

最终s字符串结果为:10 + 20 = 30

  1. 内嵌表达式中还可以调用方法,比如:
String s = STR."My blog is \{getMyBlog()}";

假设getMyBlog方法返回的内容为blog.didispace.com,那么最终s字符串结果为:My blog is blog.didispace.com

  1. 内嵌表达式中还可以访问对象的成员变量,比如:
User u = new User("didi", "blog.didispace.com"); // 构造函数参数为name属性和blog属性
String s = STR."\{u.name}的博客地地址为:+ \{u.blog}";

最终s字符串结果为:didi的博客地址为:blog.didispace.com

FMT模版处理器

除了STR模版处理器之外,Java中还提供了另外一个模版处理器:FMT。FMT模版处理器除了与STR模版处理器一样提供插值能力之外,还提供了左侧的格式化处理。下面通过例子来直接理解FMT的功能:

record Rectangle(String name, double width, double height) {
double area() {
return width * height;
}
}
Rectangle[] zone = new Rectangle[] {
new Rectangle("Alfa", 17.8, 31.4),
new Rectangle("Bravo", 9.6, 12.4),
new Rectangle("Charlie", 7.1, 11.23),
};
String table = STR."""
Description Width Height Area
\{zone[0].name} \{zone[0].width} \{zone[0].height} \{zone[0].area()}
\{zone[1].name} \{zone[1].width} \{zone[1].height} \{zone[1].area()}
\{zone[2].name} \{zone[2].width} \{zone[2].height} \{zone[2].area()}
Total \{zone[0].area() + zone[1].area() + zone[2].area()}
""";

上面这块是由STR模版处理器组织字符串表格数据,从模版表达式来看是非常整齐的,但是由于模版中内嵌表达式的值长短不一,最终输出结果很有可能差强人意,比如STR模版处理器处理后的结果是这样的:

Description  Width  Height  Area
Alfa 17.8 31.4 558.92
Bravo 9.6 12.4 119.03999999999999
Charlie 7.1 11.23 79.733
Total 757.693

为了解决这个问题,就可以采用FMT模版处理器,在每一列左侧定义格式

String table = FMT."""
Description Width Height Area
%-12s\{zone[0].name} %7.2f\{zone[0].width} %7.2f\{zone[0].height} %7.2f\{zone[0].area()}
%-12s\{zone[1].name} %7.2f\{zone[1].width} %7.2f\{zone[1].height} %7.2f\{zone[1].area()}
%-12s\{zone[2].name} %7.2f\{zone[2].width} %7.2f\{zone[2].height} %7.2f\{zone[2].area()}
\{" ".repeat(28)} Total %7.2f\{zone[0].area() + zone[1].area() + zone[2].area()}
""";

这样的结果将是如下这样,获得一个整齐的结果:

Description     Width    Height     Area
Alfa 17.80 31.40 558.92
Bravo 9.60 12.40 119.04
Charlie 7.10 11.23 79.73
Total 757.69

关于Java 21中推出的String Templates特性还有很多高级能力,比如:自定义模版处理器等。因为该特性还处于Preview阶段,所以DD也还没有深入研究,仅尝鲜了一下基本功能,如果您对其他高级能力感兴趣,也可以通过官网学习。等该功能正式发布之后,我会在 Java新特性专栏 中更新解读所有内容,欢迎关注与收藏。

14.4K Star,一款漂亮、快速、现代化的开源UI组件库

2023-08-24 04:06:42

大家好,我是TJ。

之前给大家推荐了很多后台模版,有读者希望推荐一些跟通用的好看组件,毕竟出了后台还有很多其他场景嘛。所以,今天继续给大家推荐一个广受好评的UI组件库:NextUI

NextUI

主要特性

NextUI的主要目标是简化开发流程,为增强的用户体验提供美观且适应性强的系统设计。

它有以下几点核心特性:

  • 可个性定制:NextUI提供了插件的模式来定制主题,你可以更改所有的语义标记以创建一个全新的主题
  • 性能优秀:构建在TailWind CSS之上,这意味着没有运行时样式,包中也没有不必要的类,所以性能极佳
  • 日间/夜间模式:支持自动模式识别,当检测到HTML主题变化时,NextUI会自动更改主题模式
  • 快速上手:NextUI是完全组件化的,以最大限度地减少学习曲线,并提供尽可能好的开发体验

组件预览

对于一款UI组件,是否好看是大家都特别关注的,下面就带大家一起来看看NextUI的一些常用组件效果。

Avatar

Accordion

Badge

Button

Card With Image

CheckBox

Dropdown

Input

ListBox

Popover

Skeleton

Table 1

Table 2

Tabs

由于篇幅有限,就挑选了一些常用的,还有很多其他的组件没有在这里展示,感兴趣的可以自行前往官网查看并体验动态效果。

最后,老规矩,奉上相关链接,感兴趣的可以直接去深入了解:

欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!

推荐一款免费好用的远程桌面:Getscreen

2023-08-18 04:03:15

因为平时有多台设备要用,所以远程桌面是我经常要使用的工具。

最近,TJ君也正好看到一款不错的远程桌面软件,马上拿出来推荐给大家,如果有需要的可以看看。

今天要推荐的远程桌面软件就是这款叫Getscreen的软件,推荐理由挺简单,就3点:

  1. 简单易用:只需要两步就能轻松连上远程桌面

第一步:在需要被远程连接的机器上下载它的Agent程序并启动,点击Send获得一个链接

第二步:在其他机器上打开浏览器,使用第一步中的链接,就能轻松连上远程桌面了

使用方法是不是非常简单呢?不需要任何技术知识。

如果你有很多设备的话,还可以下载它的Dashboard来管理你的设备,使用起来会更加流畅。

  1. 个人用户基本免费

Getscreen的付费机制也比较友好,对于免费用户,可以支持2个设备,相信大部分个人用户也基本够用了。

  1. 多平台支持:支持windows、macOS、Linux以及Android

对于windows、macOS、Linux比较常规了,但是还有个Android,TJ在想是不是也能用来控制手机?这个TJ还没尝试,感兴趣的小伙伴可以试试看。

最后,老规矩,奉上相关地址;

欢迎扫描下方二维码,关注公众号:TJ君,订阅每日推荐,获取更多好用效率工具!

Spring Boot通过企业邮箱发邮件被Gmail退回的问题解决方法

2023-08-17 17:07:59

这两天给我们开发的Chrome插件:Youtube中文配音增加了账户注册和登录功能,其中有一步是邮箱验证,所以这边会在Spring Boot后台给用户的邮箱发个验证信息。如果发邮件,之前的文章教程里就有,这里就不说了,着重说说这两天发现所有用Gmail注册的用户都被退件的问题。

报错现象

先来看看具体报错(如果您也碰到这种情况,那么可以看看后面的内容):

退信原因:发件人([email protected])域名的DNS记录未设置或设置错误导致对方拒收此邮件。
host gmail-smtp-in.l.google.com[142.251.10.26] said: 550-5.7.26 This mail is unauthenticated, which poses a security risk to the sender and Gmail users, and has been blocked. The sender must authenticate with at least one of SPF or DKIM. For this message, DKIM checks did not pass and SPF check for [mail.spring4all.com] did not pass with ip: [54.204.34.130]. The sender should visit https://support.google.com/mail/answer/81126#authentication for instructions on setting up authentication. k191-20020a636fc8000000b00565bcd33890si6279798pgc.848 - gsmtp (in reply to end of DATA command)
解决方案:请通知你的邮箱管理员为邮箱域名设置正确的DNS(SPF、DKIM、DMARC)记录。详细请见 http://service.exmail.qq.com/cgi-bin/help?subtype=1&&no=1000580&&id=20012

问题分析

从退信原因中Google给的链接内容非常多,大致内容就是Google针对垃圾邮件滥用邮箱等行为做的防护机制。所以,如果您要支持Gmail的话,就必须符合它所制定的身份配置要求,里面包含了:SPF配置、DKIM配置、ARC配置以及DMARC配置。

Google官方提供了一个工具:https://toolbox.googleapps.com/apps/checkmx/,可以用来检测你的一些列配置是否符合要求。您只需要输入你的邮箱域名,就可以看到如下的诊断结果:

那么多警告,显然是要慢慢解决才能不被拒收吧。。。不过那么多配置,是不是一下就晕了?

如果你懒得深入看的话,下面DD就讲一下比较快速的解决不被拒收的配置。

解决方案

不要看有那么多警告和配置内容,其实只需要把SPF配置完成,Gmail的发送就不成问题了。配置方法也很简单,就是在域名解析里加一条记录即可。

Gmail官网也给出了介绍:

但第一次也许你会跟我犯一样的错,就是直接用v=spf1 include:_spf.google.com ~all这个value了。。。其实应该要修改成你所用企业邮箱服务商的spf域名。

比如,DD这边用的是腾讯的企业邮箱,所以值要设置成:v=spf1 include:spf.mail.qq.com ~all。直观的讲,你的域名解析里需要有这样一条TXT记录:

SPF汇总

这边汇总一下,国内比较常用的企业邮箱SPF配置,如果您正好碰到类似问题,可以直接选取使用:

  • 腾讯企业邮箱:v=spf1 include:spf.mail.qq.com ~all
  • 阿里企业邮箱:v=spf1 include:spf.mxhichina.com -all
  • 网易企业邮箱:v=spf1 include:spf.163.com -all

今天的分享就到这里,希望对您有所收获!码字不易,欢迎关注、收藏、分享,支持一下。本文可以任意转载,但请注明原文链接 ^_^