<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Luckyion的专栏]]></title><description><![CDATA[在这里分享编程的乐趣，探索编程世界的奥秘]]></description><link>https://blog.youkuaiyun.com/alinvince</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; alinvince]]></copyright><item><title><![CDATA[SeLinux简单总结 ]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/145905261</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/145905261</guid><author>alinvince</author><pubDate>Thu, 27 Feb 2025 15:25:10 +0800</pubDate><description><![CDATA[在系统启动过程中，当执行到restorecon这句的时候，我需要访问的/sys/class/xxx节点，有一定几率还是不存在，没有创建完成，因此在后面解决办法是不使用/sys/class/xxx节点，使用/proc/driver/xxx节点去设置type。MAC 的理论也很简单，任何进程想在 SELinux 系统上干任何事情，都必须在《安全策略文件》中赋予权限，凡是没有出现在安全策略文件中的权限，就不行。DAC的权限控制策略是非常简洁，行为是简单的RWX三种，主体也很简单的就能被分为UGO三类。]]></description><category></category></item><item><title><![CDATA[基于Kotlin Multiplatform实现静态文件服务器（五）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/141475632</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/141475632</guid><author>alinvince</author><pubDate>Fri, 23 Aug 2024 22:27:03 +0800</pubDate><description><![CDATA[Netty 是一个利用 Java 的高级网络的能力，隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。]]></description><category></category></item><item><title><![CDATA[基于Kotlin Multiplatform实现静态文件服务器（四）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/141475413</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/141475413</guid><author>alinvince</author><pubDate>Fri, 23 Aug 2024 22:00:12 +0800</pubDate><description><![CDATA[创建FileServerService，并声明为前台服务。声明前台服务，需要在AndroidManifest.xml中声明，并申请权限。在Android中，为了避免由于界面退出或锁屏后被系统杀死进程导致文件服务中断，使用前台服务实现。前台服务显示状态栏通知，让用户知道您的 应用正在前台执行任务并消耗系统资源。Android前台服务用于执行用户可察觉的操作。在JVM上，通过守护线程来启动文件服务。]]></description><category></category></item><item><title><![CDATA[基于Kotlin Multiplatform实现静态文件服务器（三）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/141303627</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/141303627</guid><author>alinvince</author><pubDate>Sun, 18 Aug 2024 22:00:56 +0800</pubDate><description><![CDATA[Expect 和 Actualexpect 关键字用于定义一个多平台通用的声明，即该声明在所有平台上都可用，并且需要在特定平台上实现。actual 关键字通常与 expect 关键字配合使用，用于定义多平台通用的接口和函数，从而允许在不同的平台上使用相同的 API。官方建议只对平台API使用expect/actual，否则使用普通接口。比如获取IPv4地址：这里使用的可能不是KMP的最佳实践，而是借鉴Android程序使用的MVVM模式。关于KMP项目的最佳实践，大家可以参考其他文档。如前小节图例，在And]]></description><category></category></item><item><title><![CDATA[基于Kotlin Multiplatform实现静态文件服务器（二）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/141305213</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/141305213</guid><author>alinvince</author><pubDate>Sun, 18 Aug 2024 21:19:37 +0800</pubDate><description><![CDATA[是Google 为Android开发推出的一种新型UI构建工具，它基于Kotlin语言，采用声明性的语法，使得UI构建更加简单、直观。与传统的XML布局不同，Jetpack Compose使用代码来描述UI，开发者可以直接在代码中设置UI元素的属性，而无需使用XML进行配置。它也可以被用来基于KMP实现跨平台的UI实现，以达到各平台UI一致。]]></description><category></category></item><item><title><![CDATA[基于Kotlin Multiplatform实现静态文件服务器（一）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/141288042</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/141288042</guid><author>alinvince</author><pubDate>Sat, 17 Aug 2024 22:43:29 +0800</pubDate><description><![CDATA[首次导入项目后，gradle会同步依赖项，如同步出现错误 ，可按需修改gradle国内资源代理。或连接Android手机，并开启开发者选项，开启USB调试并授权电脑调试（Android 14以上的设备，可以通过局域网进行调试）。安装JDK 14以上版本，或使用Android Studio 自带jre环境，但缺少package.jar，无法打包。选择 Android 虚拟机或已连接的可调式手机，然后单击运行，编译完成后，将在所选设备上运行该应用程序。在桌面上运行，需要手动设置运行配置或执行gradle命令。]]></description><category></category></item><item><title><![CDATA[使用iText实现将优快云博客保存为PDF文档]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/141286278</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/141286278</guid><author>alinvince</author><pubDate>Sat, 17 Aug 2024 21:50:21 +0800</pubDate><description><![CDATA[iText是著名的开放源码的站点sourceforge一个项目，是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档，而且可以将XML、Html文件转化为PDF文件。]]></description><category></category></item><item><title><![CDATA[Gerrit使用和配置]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/122143733</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/122143733</guid><author>alinvince</author><pubDate>Sat, 25 Dec 2021 15:23:25 +0800</pubDate><description><![CDATA[创建项目

本文是基于前一篇Windows10搭建Gerrit的后续，也是因为搭建完成后使用遇到的一些问题的记录。

在Gerrit首页，点击Project。



创建一个新的项目。



创建完成后，即可看到刚刚创建的项目。创建好项目，需要针对项目配置一些权限。



权限配置可以参考这篇文章gerrit用户管理及权限配置https://blog.51cto.com/nanfeibobo/2090000

下载项目

可以看到，此时项目创建完成后，却没有任何信息指向该项目怎么下载。

这是因为缺少...]]></description><category></category></item><item><title><![CDATA[Windows10 搭建Gerrit Code Review]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/119237498</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/119237498</guid><author>alinvince</author><pubDate>Sat, 25 Dec 2021 14:48:58 +0800</pubDate><description><![CDATA[准备资源

Apache2.4.43
	Gerrit2.14.22
	jre1.8.191
	Git 2.26.0.windows
软件安装

第一步，安装Apache2.4.43.

这里因为之前一直用小皮面板，因此直接使用小皮面板中的Apache，如果想自己安装，可参考网上相关教程。



第二步，安装Git，双击运行下载的.exe文件，非必要修改的话一路默认下一步即可。

第三步，安装Java环境，并配置环境变量。安装Java时，使用其默认安装配置即可。环境变量配置步骤为：计算机-》右键-》属性-》高]]></description><category></category></item><item><title><![CDATA[Android Studio 加载Android系统源码]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/119642171</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/119642171</guid><author>alinvince</author><pubDate>Thu, 12 Aug 2021 13:32:52 +0800</pubDate><description><![CDATA[Android系统源码比较庞大，如果涉及对系统源码的修改，较简单的可以直接在命令行完成修改，但是如果修改较多的情况下，使用命令行方式修改就局限性比较明显。

可以加载Android系统源码的工具较多，SourceInsight、Eclipse、VSCode等，但是对于做Android的同学来说，使用Android Studio还是比较熟悉的。

那接下来，我们了解一下如何通过Android Studio来加载Android系统源码。

1. 初始化编译环境 

...]]></description><category></category></item><item><title><![CDATA[使用JPress 源码搭建博客系统（二）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/119642137</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/119642137</guid><author>alinvince</author><pubDate>Thu, 12 Aug 2021 13:23:55 +0800</pubDate><description><![CDATA[1. 登录后台

通过上篇，我们已经使得JPress能够正常运行了，输入管理员账户、密码，即可进入后台管理页面。





大概翻看了一下，功能还真的不少。

2. 发布一篇文章

我们的目的是搭建一个博客系统，那么，我们先发布一篇博客看看情况。

在文章页卡下，有写文章。







3. 文章导入

怎奈人太懒了，之前看说明的时候，说可以导入文章，找了一下，在系统页卡的小工具中发现了。





那导入一个.md的试试呗。

点击第二个“Hexo/Jekyll/Markdown文章导入”



...]]></description><category></category></item><item><title><![CDATA[使用JPress 源码搭建博客系统（一）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/119642072</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/119642072</guid><author>alinvince</author><pubDate>Thu, 12 Aug 2021 13:21:20 +0800</pubDate><description><![CDATA[以前有了解过JFinal框架，今天突然想看看有没有什么新的东西。打开官网后看到了一个JPress，看到说类似于WordPress，所以想看看。

1. 源码下载

直接从JFinal主页直接点超链进入 ， 翻到最下面看到官网，然后直接下载源码。

这里我下载了一个jpress-4.0。

2. 导入IDEA

因做Android，所以在使用了Android Studio后，就一直未再使用过Eclipse，所以工具直接就选了现成的IDEA。

将jpress-4.0放到你想放项目的位置，然后直接使用IDEA打]]></description><category></category></item><item><title><![CDATA[MySql连接异常问题]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/119642002</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/119642002</guid><author>alinvince</author><pubDate>Thu, 12 Aug 2021 13:14:39 +0800</pubDate><description><![CDATA[在MySql安装好之后，命令行登录和使用一切正常，但是使用Web服务连接，报以下错误，无法使用


com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the]]></description><category></category></item><item><title><![CDATA[RPM RedHat 7.6 安装 MySql 8.0.21]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/119641908</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/119641908</guid><author>alinvince</author><pubDate>Thu, 12 Aug 2021 13:11:55 +0800</pubDate><description><![CDATA[1. 查看系统是否已经安装MySql


rpm -qa | grep -i mysql

2.如果有安装，需要将原本已安装的进行卸载，并删除其相关目录


rpm -e MySQL-xxx-

3.查询系统是否预装mariadb，因为会和MySql冲突

如果有，执行以下命令，如果没有，直接跳过


rpm -qa|grep mariadb

rpm -e --nodeps 文件名 

# 重启系统
reboot

4.下载MySql rpm 安装包


wget https://cdn.mysql...]]></description><category></category></item><item><title><![CDATA[JFinal 连接MySQL数据库【Maven】]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/119639392</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/119639392</guid><author>alinvince</author><pubDate>Thu, 12 Aug 2021 11:21:09 +0800</pubDate><description><![CDATA[1. 说明

JFinal中连接对应数据库时，只需在安装完成数据库后，配置对应的数据库信息和引入JDBC驱动包即可。

2. 引入JDBC驱动

在pom.xml中添加依赖


    &lt;!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;mysql&lt;/groupId&gt;
        &lt;artifa]]></description><category></category></item><item><title><![CDATA[Localhost无法写入Cookie]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/113062152</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/113062152</guid><author>alinvince</author><pubDate>Sat, 23 Jan 2021 21:04:52 +0800</pubDate><description><![CDATA[Localhost无法写入Cookie

最近在写一个博客，发现localhost调试时，Cookie一直为null。

后面找了相关资料发现，很多浏览器都无法使用localhost写入Cookie

在Google Chrome中，使用127.0.0.1，可以正常写入Cookie。
...]]></description><category></category></item><item><title><![CDATA[小狮子的Kotlin学习之路（十八）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/106447074</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/106447074</guid><author>alinvince</author><pubDate>Sat, 30 May 2020 21:14:05 +0800</pubDate><description><![CDATA[Kotlin协程基础

从这一篇开始，了解Kotlin的协程。

在这之前，需要先了解一下协程存在的意义。

协程并不是一个新的概念，它并不是 Kotlin 发明的。它们已经存在了几十年，并且在 Go 等其他一些编程语言中很受欢迎。协程是为了解决防止我们的应用程序被阻塞，从而达到不影响用户的体验。

解决应用程序阻塞的方式有很多，比如线程、响应式拓展、著名的Rx（如RxJava等），各有优缺点，尤其是RxJava等，学习成本比较高。Kotlin 编写异步代码的方式是使用协程，这是一种计算可被挂起的想法。即一]]></description><category></category></item><item><title><![CDATA[小狮子的Kotlin学习之路（十七）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/106315441</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/106315441</guid><author>alinvince</author><pubDate>Sun, 24 May 2020 16:44:08 +0800</pubDate><description><![CDATA[Kotlin语法糖

很多人会把Kotlin里面的很多语法，都称作Kotlin语法糖，而我更倾向于把Kotlin标准库的几个非常常用且非常有用的高阶函数称作语法糖，各有所爱哈，不喜勿喷~~

而我所说的就是let,with,run,apply,also。

语法糖（一） let。


@kotlin.internal.InlineOnly
public inline fun &lt;T, R&gt; T.let(block: (T) -&gt; R): R {
    contract {
        ]]></description><category></category></item><item><title><![CDATA[小狮子的Kotlin学习之路（十六）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/106305139</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/106305139</guid><author>alinvince</author><pubDate>Sat, 23 May 2020 21:15:03 +0800</pubDate><description><![CDATA[函数类型与Lambda表达式

在Kotlin高阶函数中，涉及到了两个比较重要的概念，那就是Kotlin的函数类型与Lambda表达式。

其实，Lambda表达式是函数类型的一个实例。

怎么说呢，Kotlin中把类似的声明(T) -&gt; R称作函数类型。具体点的比如(Int) -&gt; String，就是说这里的参数是一个函数类型，函数的入参为Int类型，返回值是String类型。

另外，如果函数类型有多个入参，比如（A, B） -&gt; C。

如果没有参数的函数类型，则表示为() -&gt]]></description><category></category></item><item><title><![CDATA[小狮子的Kotlin学习之路（十五）]]></title><link>https://blog.youkuaiyun.com/alinvince/article/details/106300449</link><guid>https://blog.youkuaiyun.com/alinvince/article/details/106300449</guid><author>alinvince</author><pubDate>Sat, 23 May 2020 16:38:51 +0800</pubDate><description><![CDATA[Kotlin高阶函数

最近因为工作原因，一直没有时间写博客，距离上一篇已经过去好久了，遵从遗忘曲线，我都不记得之前写了些什么+_+，于是花了一些时间把前面的翻看了一下~~

接下来，要学习的是高阶函数了。

在Kotlin中，函数是第一位的，官方所说的“头等的”。和通常的理解不太一样的是，在Kotlin中函数不仅可以作为变量，而且可以作为参数或返回值。

而以上所说的作为变量、参数和返回值，就是高阶函数的特点。

直接搬来官方的示例：


    fun &lt;T, R&gt; Collection&l]]></description><category></category></item></channel></rss>