<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>热爱生活与梦想</title><link>https://lisenhui.cn/</link><description>Recent content on 热爱生活与梦想</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 19 Feb 2026 20:31:07 +0800</lastBuildDate><atom:link href="https://lisenhui.cn/rss.xml" rel="self" type="application/rss+xml"/><item><title>迁移LeanCloud的Waline评论数据到TiDB/Neon</title><link>https://lisenhui.cn/tech/migrate-waline-into-tidb-neon.html</link><pubDate>Thu, 19 Feb 2026 20:31:07 +0800</pubDate><guid>https://lisenhui.cn/tech/migrate-waline-into-tidb-neon.html</guid><description>&lt;p&gt;1月份月底时收到了&lt;code&gt;LeanCloud&lt;/code&gt;的邮件通知，标题中的停止两个字是非常的亮眼，看来在国内做公开的开放服务实属不容易，真是感叹呀。鄙人的博客从建设以来就是选用它作为站点评论数据的存储，而如今收到这则通知，除了要重新选择数据存储方式外，更多是让自己回想起过往建设博客的种种记忆。&lt;/p&gt;
&lt;div class="note info "&gt;
 &lt;p&gt;
&lt;a href="https://docs.leancloud.app/sdk/announcements/sunset-announcement/" title="关于 LeanCloud 停止对外提供服务的通知" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 关于 LeanCloud 停止对外提供服务的通知
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;正式停止服务时间：自本公告发布之日起满一年，即2027 年 1 月 12 日。&lt;/p&gt;
&lt;p&gt;届时，平台将正式关闭所有面向公众的服务，包括应用访问、数据读写、API 调用、控制台使用等。&lt;/p&gt;
&lt;p&gt;根据《个人信息保护法》及相关法律法规，服务停止后，我们将依法对平台内留存的所有用户数据进行永久性销毁或匿名化处理，数据一旦销毁将无法恢复。&lt;/p&gt;

&lt;/div&gt;</description></item><item><title>25年江浙地区暑假自驾游之感慨</title><link>https://lisenhui.cn/life/25y-summer-self-driving-family-tarvel-around-zj.html</link><pubDate>Sat, 16 Aug 2025 16:12:26 +0800</pubDate><guid>https://lisenhui.cn/life/25y-summer-self-driving-family-tarvel-around-zj.html</guid><description>&lt;p&gt;暑期这漫长的假期对于小朋友来说，既是一件开心又煎熬的事，7、8月份正值一年当中最热的时候，更多的时间里只能是待在室内，时间长了也许就会有些厌烦。看着家里的小伙天天“无聊”发呆的模样，便决定抽出时间带他在江浙一带来场自驾旅游。于是“勤劳”的老爸开始着手规划自驾游的出行计划，包括路线、时间、吃住等安排都统统考虑进去，还提前准备好路上的干粮和矿泉水。很快就到了出发的日子，一家人坐上车地满心欢喜地朝目的地赶去。&lt;/p&gt;</description></item><item><title>使用阿里云灵码继续完成构建 SSL 证书管理器</title><link>https://lisenhui.cn/tech/use-aliyun-lingma-continue-build-ssl-manager.html</link><pubDate>Sat, 07 Jun 2025 19:47:35 +0800</pubDate><guid>https://lisenhui.cn/tech/use-aliyun-lingma-continue-build-ssl-manager.html</guid><description>&lt;p&gt;继常见的&lt;code&gt;编码IDE&lt;/code&gt;插件形式支持外，阿里云通义灵码在今年6月发布了全新的&lt;code&gt;独立IDE&lt;/code&gt;版本，虽然当前灵码IDE还只是个预览版本，但是其中新增加了&lt;code&gt;NES&lt;/code&gt;（行间编辑预测和&lt;code&gt;Inline Chat&lt;/code&gt;（行间对话）的能力，正好是自己构建&lt;code&gt;SSL&lt;/code&gt;证书管理器时所需要的，所以决定尝试下使用灵码来继续完成构建&lt;code&gt;SSL&lt;/code&gt;证书管理器的剩余需求。&lt;/p&gt;



 &lt;div class="post-alert-info"&gt;
 &lt;div class="post-alert-title"&gt;
 &lt;i class="fa-solid fa-circle-info"&gt;&lt;/i&gt;
 &lt;span&gt;
 
 信息
 
 &lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="post-alert-content"&gt;
 &lt;p&gt;与其他试用 AI 编码体验形式不同，当前项目是个人实际的需求，对于灵码IDE的测试更有意义，也是深入了解 AI 编码能力的边界。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/div&gt;</description></item><item><title>亲手给儿子做的棒棒糖摩天轮六一礼物</title><link>https://lisenhui.cn/life/handmade-lollipop-ferris-wheel-gift-for-myson.html</link><pubDate>Tue, 03 Jun 2025 19:53:34 +0800</pubDate><guid>https://lisenhui.cn/life/handmade-lollipop-ferris-wheel-gift-for-myson.html</guid><description>&lt;p&gt;又是到了一年一度的“6.1”儿童节，家里的小伙子老早就已经在畅想着过节收礼物啦，并在家里的白板上画上了他自己设计的日历记录，每天起床最快速的事情就是划掉那一个又一个的圈圈。只不过今年的老天爷并没有给“好脸色”，那天正好是下起了大雨，所有外出的计划节奏都被打乱啦，只好是在家里呆着，为了不让那小伙子“失望”，便把手机里吃灰的收藏记录拿出来，准确给他复刻一个&lt;strong&gt;棒棒糖大风车&lt;/strong&gt;，还好算是没有翻车的窘境，在此分享下这份不一样的节日快乐。&lt;/p&gt;</description></item><item><title>使用腾讯云 CodeBuddy 构建 SSL 证书管理器</title><link>https://lisenhui.cn/tech/use-tencent-codebuddy-build-ssl-manager.html</link><pubDate>Fri, 30 May 2025 09:32:22 +0800</pubDate><guid>https://lisenhui.cn/tech/use-tencent-codebuddy-build-ssl-manager.html</guid><description>&lt;p&gt;从腾讯云的官微上了解到&lt;code&gt;CodeBuddy&lt;/code&gt;这款代码编程助手，起初以为只是的一种提供对话式 AI 编码提示的工具，但通过深入了解后发现其实它里面还自带了&lt;code&gt;Craft&lt;/code&gt;智能体，能够帮助你构建完整的软件工程项目。搜罗了众多网友的种草体验后，决定还是要亲测下它的实际使用（交付能力）效果。正好此前想做个 SSL 证书管理工具，来管理自己手里头不同域名的 SSL 证书运维，接下来一起看看个人的实测结果究竟如何。&lt;/p&gt;



 &lt;div class="post-alert-note"&gt;
 &lt;div class="post-alert-title"&gt;
 &lt;i class="fa-solid fa-bell"&gt;&lt;/i&gt;
 &lt;span&gt;
 
 注意
 
 &lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="post-alert-content"&gt;
 &lt;p&gt;还是有些高估自己的学习能力，本想可以一天完成的编码工作，但实践下来后发现还是得分开完成，下面记录的前半部分功能交付，欢迎持续关注。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/div&gt;</description></item><item><title>修复代码块默认高度相关缺陷</title><link>https://lisenhui.cn/blog/fixed-codeblock-default-height.html</link><pubDate>Fri, 28 Feb 2025 17:18:41 +0800</pubDate><guid>https://lisenhui.cn/blog/fixed-codeblock-default-height.html</guid><description>&lt;p&gt;对于上个月&lt;code&gt;Hugo NexT&lt;/code&gt;最新的&lt;code&gt;V4.7.2&lt;/code&gt;版本发布后，便是收到了不少用户使用的反馈，其中一点便是与代码块显示需要折叠的问题
&lt;a href="https://github.com/hugo-next/hugo-theme-next/issues/168" title="Issues#168" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Issues#168
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;。这点对于那些程序“猿”的博友们来说，或多或少是要在文章中嵌入大量的代码块，以便给读者展示具体功能实现过程。如果此时的代码块的篇幅比较大，那么文章里的其他非代码块的信息显示会被撑到很下面，对于读者的阅读体验就不那么的友好。这算是个比较普遍通用的需求，加上代码块在显示也有些重叠覆盖的问题，便打算是尽早的把它们给修复好。&lt;/p&gt;</description></item><item><title>HugoNexT4.7.2 新功能和升级提示</title><link>https://lisenhui.cn/blog/hugo-next-v472-features-and-tips.html</link><pubDate>Sat, 01 Feb 2025 21:19:03 +0800</pubDate><guid>https://lisenhui.cn/blog/hugo-next-v472-features-and-tips.html</guid><description>&lt;p&gt;真是人算不如天算呀，原来是计划在大年夜前发&lt;code&gt;Hugo NexT v4.7.2&lt;/code&gt;这个大版本的，可谁曾料想到身体遭受到一场突如其来的病毒感染，就连春节的气氛也是全被搅混无啦。由于此次版本发布发动的内容稍为有些多，在此写个升级的小提示分享下。这不趁着假期的小尾巴，赶紧是把剩余的工作给做完吧，为众多的&lt;code&gt;Hugo NexT&lt;/code&gt;粉丝送上一份迟到的新年“贺礼” &amp;#x1f381;。&lt;/p&gt;</description></item><item><title>改善代码块折叠和选中功能</title><link>https://lisenhui.cn/blog/improve-code-block-collapse-and-selected.html</link><pubDate>Sun, 19 Jan 2025 19:16:24 +0800</pubDate><guid>https://lisenhui.cn/blog/improve-code-block-collapse-and-selected.html</guid><description>&lt;p&gt;对于技术类的分享文章而言，或多或少会需要使用到代码块的功能，&lt;code&gt;Hugo NexT&lt;/code&gt;主题中默认也是支持代码块的展示，只不过无法支持代码块进行折叠和展开的操作，且在代码选中时的样式与背景也不太容易区分，同时也还发现其他的一些小问题，那么此刻便是把它们全都整合到一起进行优化。最后几乎都可以说是完全的重构，想了解的具体其原由请看下文。&lt;/p&gt;</description></item><item><title>支持Github风格的警告样式</title><link>https://lisenhui.cn/blog/support-github-style-alert.html</link><pubDate>Tue, 14 Jan 2025 20:14:41 +0800</pubDate><guid>https://lisenhui.cn/blog/support-github-style-alert.html</guid><description>&lt;p&gt;早期在&lt;code&gt;Hugo NexT&lt;/code&gt;主题中使用短代码方式实现过对不同类型消息的样式支持，只不过是使用时需要用户书写完整短代码不是很方便，同时输出的效果是独立的块占用空间比较大。后来发现Hugo框架在新版中支持了自定义 &lt;code&gt;blockquote&lt;/code&gt;的渲染方式，于是乎便有点有新的想法，让用户直接使用&lt;code&gt;Markdown&lt;/code&gt;语法来书写不同消息内容，输出的效果实现类似于&lt;code&gt;Github&lt;/code&gt;的警告样式，这样使用起来会更加方便。下面就来看看相关实现思路和使用方式吧。&lt;/p&gt;</description></item><item><title>新增音乐短代码功能支持</title><link>https://lisenhui.cn/blog/add-music-shortcode-support.html</link><pubDate>Mon, 06 Jan 2025 19:12:29 +0800</pubDate><guid>https://lisenhui.cn/blog/add-music-shortcode-support.html</guid><description>&lt;p&gt;文字描述是人类自我表达的一种方式，而音乐也是另一种表达的方式，给文章添加上音乐作为背景，或许更能让读者深切体会到作者的情境引起共鸣之意。通过 
&lt;a href="https://github.com/MoePlayer/APlayer" title="APlayer" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 APlayer
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt; 和 
&lt;a href="https://github.com/metowolf/MetingJS" title="MetingJS" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 MetingJS
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt; 库能够很轻松的实现在文章中内嵌音乐的播放功能，同时也支持多种音乐平台的音乐播放，下面就来看看具体的操作方法和实现效果吧。&lt;/p&gt;</description></item><item><title>给文章添加摘要和过期提示功能</title><link>https://lisenhui.cn/blog/add-post-summary-and-expired-tips.html</link><pubDate>Fri, 03 Jan 2025 20:10:50 +0800</pubDate><guid>https://lisenhui.cn/blog/add-post-summary-and-expired-tips.html</guid><description>&lt;p&gt;早期在&lt;code&gt;Hugo NexT&lt;/code&gt;主题的开发路线中就有考虑到要给文章的摘要和过期提示功能，但是由于个人的时间和精力有限，迟迟没有将这些功能上线。其实这两个功能的作用也算是比较实用，方便读者能够快速预览一些长文章的内容，同时对于“年限”较长的文章也是给到读者内容可能失效提醒。整体功能的实现并不算复杂，只不过要结合扩展性等方面的考虑，经过一番思索后便有初步的想法，同时在此记录下开发的过程。&lt;/p&gt;</description></item><item><title>回顾24年的过去总结</title><link>https://lisenhui.cn/life/24year-personal-summary.html</link><pubDate>Tue, 31 Dec 2024 19:04:54 +0800</pubDate><guid>https://lisenhui.cn/life/24year-personal-summary.html</guid><description>&lt;p&gt;上班时打开飞书软件第一眼便是看到那置顶位置处显眼的2024年度报告，信息化时代记忆似乎也变得简单起来，通过一份报告就能帮助人们回忆过起过往的事情，也是突然发现一年时间已然过去，岁月这把杀猪刀又是在自己身上留下“浓墨重彩”的一击。回望在2024年里发生的诸多事情，有很多值得回忆的，也有一些可以放下释然的，不管如何自己也是在这一年里成长和成熟了不少，稍加思索后还是觉得给自己交份答卷，好好总结下这即将过去的2024年时光。&lt;/p&gt;</description></item><item><title>修复Mathjax行内显示公式的问题</title><link>https://lisenhui.cn/blog/fixed-mathjax-inline-display.html</link><pubDate>Sun, 15 Dec 2024 20:22:35 +0800</pubDate><guid>https://lisenhui.cn/blog/fixed-mathjax-inline-display.html</guid><description>&lt;p&gt;
&lt;a href="https://github.com/hugo-next/hugo-theme-next" title="hugo-theme-next" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 &lt;code&gt;hugo-theme-next&lt;/code&gt;
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;的主题默认便是可支持使用&lt;code&gt;mathjax&lt;/code&gt;或&lt;code&gt;katex&lt;/code&gt;两种不同组件，通过它们来实现对数学公式的渲染输出显示。只不过自己对数学公式的使用了解的也比较少，测试时直接就是复用网上的文章来验证数学公式渲染是否正常。结果当遇到真正的数学“专家”用户时，便是暴露出在了无法在同行文字内显示数学公式的问题
&lt;a href="https://github.com/Hugo-next/Hugo-theme-next/issues/90" title="Issue#90" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Issue#90
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，趁此便是参考评论区大家提供的建议尝试修复这“千年老&amp;#x1f41b;”。&lt;/p&gt;</description></item><item><title>给Hugo文章增加阅读更多跳转的锚点定位功能</title><link>https://lisenhui.cn/blog/make-post-readmore-anchor-feature.html</link><pubDate>Sun, 08 Dec 2024 17:12:35 +0800</pubDate><guid>https://lisenhui.cn/blog/make-post-readmore-anchor-feature.html</guid><description>&lt;p&gt;早期在进行
&lt;a href="https://github.com/hugo-next/hugo-theme-next" title="hugo-theme-next" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 &lt;code&gt;hugo-theme-next&lt;/code&gt;
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;的主题开发时，但想着给首页跳转至文章内容阅读时，能够有个定位到文章后续内容的锚定点功能，而不至于说从头开始阅读影响体验。而恰巧官方在其
&lt;a href="https://github.com/gohugoio/hugo/releases/tag/v0.134.0" title="hugo-0.134.0-release" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 hugo-0.134.0-release
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;发布中新增加这个万众推崇功能的支持实现，为Hugo用户带来全新的体验值得点赞加赏。&lt;/p&gt;</description></item><item><title>Win10隐匿的VPN设置和L2TP连接常见错误</title><link>https://lisenhui.cn/tech/win10-vpn-deep-hide-settings.html</link><pubDate>Wed, 04 Dec 2024 18:46:05 +0800</pubDate><guid>https://lisenhui.cn/tech/win10-vpn-deep-hide-settings.html</guid><description>&lt;p&gt;近期在Windows10操作系统上配置VPN连接遇到了点“麻烦”，在明确VPN连接地址和认证信息都准确无误的情况下，还是不能无法正常连接VPN网络服务。但切换到另一台Windows11操作系统中配置VPN又是可以成功连接使用，还真是百思不得其解。而这又是工作电脑升级到Windows11操作系统的话估计比较麻烦，秉承不放弃的执着精神，一番倒腾后还好幸运的找到了“破解”之法，成功连接使用上了VPN网络服务。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;注：声明下此处的VPN网络服务，并非是大家眼中的科学上网，而是公司或其他组织特定的私域办公网络环境，为保证网络安全而启用的VPN网络服务。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Go语言中“糟糕”的日期时间格式化设计</title><link>https://lisenhui.cn/blog/golang-bad-design-for-datetime-format.html</link><pubDate>Sun, 01 Dec 2024 20:23:36 +0000</pubDate><guid>https://lisenhui.cn/blog/golang-bad-design-for-datetime-format.html</guid><description>&lt;p&gt;趁着周末的闲暇时间，着手对许久未更新维护的
&lt;a href="https://github.com/hugo-next/hugo-theme-next" title="hugo-theme-next" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 &lt;code&gt;hugo-theme-next&lt;/code&gt;
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;主题进行相关&lt;code&gt;Issues&lt;/code&gt;的修复和优化，其中有块与文章更新时间相关的问题：
&lt;a href="https://github.com/hugo-next/hugo-theme-next/issues/109" title="#109" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 #109
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，修复时正好发现配置文件中的日期时间格式化有点不宜理解，本来想对它做下调整改进，但却是结果遇到莫明奇妙的错误，深入了解一番才发现，这是Go语言的设计规范要求。好吧，也很是无奈啦。顺便也记录下对于Go语言中日期时间格式化的一些学习和理解，方便后续使用本主题用户阅读与参考。&lt;/p&gt;</description></item><item><title>DaoCloud道客提供的免费Docker镜像代理服务</title><link>https://lisenhui.cn/tech/daocloud-proxy-for-docker-images.html</link><pubDate>Mon, 18 Nov 2024 18:36:09 +0800</pubDate><guid>https://lisenhui.cn/tech/daocloud-proxy-for-docker-images.html</guid><description>&lt;p&gt;前段时间看到博友圈的小伙伴发表了篇名为：《
&lt;a href="https://wangyunzi.com/posts/147/" title="docker代理问题" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 docker代理问题
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;》的分享，里面详细记录她是如何通过Cloudfare路由功能实现代理Docker镜像的服务，想要自己倒腾的小伙伴可以参考一二。当时看到她这篇文章，就想起年初时自己为Docker镜像代理而烦恼的情境，后来借助Google成功解决这问题，不过与前面这位博友的方法不同，是抱了某厂商的大腿直接使用，并没有自己去搭建和管理代理服务。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;注：“博友”是自己给一群爱好写博客的朋友们所起的简写描述，大家可千万别误会为是那赌博的群体呀。😂&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>感谢万能淘宝让自己吃到喜欢的美食</title><link>https://lisenhui.cn/life/make-my-favourite-food-through-taobao.html</link><pubDate>Sat, 16 Nov 2024 20:02:35 +0800</pubDate><guid>https://lisenhui.cn/life/make-my-favourite-food-through-taobao.html</guid><description>&lt;p&gt;在客家人的餐桌上，很多食材都是可以用“酿”字来出炉，像酿豆腐、酿苦瓜、酿茄子等诸多美食，另外还有就是周一时自己突然嘴馋想吃的“酿粄”，不过其中有道关键的食材在菜场并没有见到过。于是想到那万能的淘宝网购，只是这菜名用普通话还真不知其称谓（学名），又是在度娘上面搜索一番，才知晓它的名字叫“荞头”，而且它的别称中尽是自己不认识的字，真是尴尬之至，原来一场美食旅行也可以让自己长了不少见识。&lt;/p&gt;</description></item><item><title>WSL运行时遇到未知异常错误无法使用</title><link>https://lisenhui.cn/tech/wsl-running-unknow-error.html</link><pubDate>Tue, 15 Oct 2024 19:08:29 +0800</pubDate><guid>https://lisenhui.cn/tech/wsl-running-unknow-error.html</guid><description>&lt;p&gt;现经常会使用&lt;code&gt;WSL&lt;/code&gt;服务在&lt;code&gt;Windows系统&lt;/code&gt;上搭环境进行新技术的探索，只是间隔了约2周时间没有用，结果今天临时想要验证某个服务时，发现&lt;code&gt;WSL&lt;/code&gt;服务无法正常使用，尝试强制停止&lt;code&gt;WSL&lt;/code&gt;进程，最后都把电脑重启好几次，但依旧很失望还是无法正常。着实也是把自己给惊到了，里面搭建的环境是否就全都作废丢失呢。最后在微软官方的帮助站点找到了解决办法，抱着活马当死马的心态尝试一把，庆幸是最终成功了。&lt;/p&gt;</description></item><item><title>隐藏的换行符导致Base64加密解密失败</title><link>https://lisenhui.cn/tech/use-printf-encry-base64.html</link><pubDate>Thu, 05 Sep 2024 20:53:53 +0800</pubDate><guid>https://lisenhui.cn/tech/use-printf-encry-base64.html</guid><description>&lt;p&gt;平日里偶尔会在调用API服务时，需要对用户与密码认证信息进行Base64加密处理，一般都用网上的在线工具进行直接操作获取。但是在客户现场环境中并没有互联网访问权限，便只能是寻求其他方法来实现Base64加密操作。起初是使用Python中的base64模块进行加密，只是操作起来较麻烦些，因为不同客户环境不一样而且也不能拷贝外部文件进去，只能是在Python交互模式下手工敲些代码。可是长久以往并不是办法，后来便发现了Linux系统其实大部都自带Base64的模块，于是便开始探索如何在Linux系统中使用Base64模块进行加解密的操作方式。&lt;/p&gt;</description></item><item><title>MySQL自带客户端直接免密登录操作</title><link>https://lisenhui.cn/tech/mysql-login-without-userpswd.html</link><pubDate>Fri, 30 Aug 2024 19:11:11 +0800</pubDate><guid>https://lisenhui.cn/tech/mysql-login-without-userpswd.html</guid><description>&lt;p&gt;如我们所熟悉的&lt;code&gt;MySQL&lt;/code&gt;服务有很多优秀的界面型客户端工具，可以非常方便我们轻松地操作数据库。但是在某些情况下，比如在服务器终端操作时，我们只能通过&lt;code&gt;MySQL&lt;/code&gt;提供的命令行操作，其中少不了的便是要输入用户和密码信息。而现在的安全要求对密码的策略也较为严格，导致我们设置的密码不仅长度长，而且还会比较复杂等，如果是要经常进行数据库访问操作的DBA或分析师来说，这无疑是个不好的交互体验。&lt;/p&gt;</description></item><item><title>Linux系统中删除目录软链接的注意项</title><link>https://lisenhui.cn/tech/delete-soft-link-on-linux.html</link><pubDate>Mon, 19 Aug 2024 20:19:51 +0800</pubDate><guid>https://lisenhui.cn/tech/delete-soft-link-on-linux.html</guid><description>&lt;p&gt;对于软链接的操作在Linux系统中还是较为常见，相当于是Windows系统中的快捷方式，平时经常会用它来做些类似&lt;code&gt;mv&lt;/code&gt;命令重命名的操作，让些烦乱的文件管理更加的清晰些，比如源文件目录或文件名称太过冗余，可通过创建软链接进行简化，同时也是省去了文件的搬迁，大大提升了操作的效率。&lt;/p&gt;</description></item><item><title>Java程序调用外网API时CA问题</title><link>https://lisenhui.cn/tech/java-security-cacerts-issue.html</link><pubDate>Tue, 13 Aug 2024 20:12:11 +0800</pubDate><guid>https://lisenhui.cn/tech/java-security-cacerts-issue.html</guid><description>&lt;p&gt;前面在配置一个Java应用程序的API调用功能，可当启用此功能参数后，发现API调用没能成功，跟进下后台的日志报错信息，找到如下三行关键栈日志：&lt;/p&gt;</description></item><item><title>如何不关机重启WSL2恢复虚拟服务</title><link>https://lisenhui.cn/tech/how-to-restart-wsl2.html</link><pubDate>Mon, 20 May 2024 19:16:16 +0800</pubDate><guid>https://lisenhui.cn/tech/how-to-restart-wsl2.html</guid><description>&lt;p&gt;对于Windows系统WSL技术较熟悉的小伙伴对于WSL和WSL2两个版本间的架构差异应该都比较了解，有不少人可能都会吐槽WSL2其实是一种倒退，只不过今天我们不讨论这点，而是来分享下在使用WSL2服务遇到的问题，及亲测有效的解决方案。&lt;/p&gt;</description></item><item><title>在Windows上安装Podman容器平台做虚拟化</title><link>https://lisenhui.cn/tech/install-podman-container-on-win.html</link><pubDate>Sun, 17 Mar 2024 20:33:22 +0800</pubDate><guid>https://lisenhui.cn/tech/install-podman-container-on-win.html</guid><description>&lt;p&gt;想起之前读大学的时候大家还在捣鼓如何在电脑上安装 &lt;code&gt;Windows+Linux&lt;/code&gt;双系统，而如今微软早已发布了WSL（Windows Subsystem for Linux）的方案让两套系统可直接同时运行，真可谓是实现了鱼和熊掌同时可”兼得“。当然今天我们的主角并不是 &lt;code&gt;WSL&lt;/code&gt;啦，只不过是需要基于此技术之上来进行操作，实现对我们想要使用的 &lt;code&gt;Podman&lt;/code&gt;容器化管理平台支持。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;注：如电脑上还没开启 &lt;code&gt;WSL&lt;/code&gt;功能的话，请自行搜索网上的教程启动，才能进行接下来的操作。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>记一次无法弹出移动硬盘的记录</title><link>https://lisenhui.cn/tech/unmountd-mobile-disk-log.html</link><pubDate>Sat, 02 Mar 2024 20:05:27 +0800</pubDate><guid>https://lisenhui.cn/tech/unmountd-mobile-disk-log.html</guid><description>&lt;p&gt;或许在当下云计算时代，已经很少有人会用到移动硬盘或U盘的经验，亦或者大多数人都没有弹出移动设备后再拨出的习惯。笔者因早年在使用U盘时经历过直接拨出U盘导致其报废的“惨痛”教训，因此对&lt;strong&gt;移出设备&lt;/strong&gt;的操作是铭记于心，万不敢直接拨插移动设备。但就是这个只需点击一次移出设备的操作，很多时候就会让我们有些烦恼，因为它有时候总喜欢和你对着干。这不今天就遇上一件无法解释的诡异现象:移动硬盘无法弹出，尝试过之前的各种妙招后仍是无济于事，最后也只是能祭出万能的&lt;strong&gt;关机大法&lt;/strong&gt;才算是得以解脱。&lt;/p&gt;</description></item><item><title>为友情链接添加自动检测脚本</title><link>https://lisenhui.cn/blog/add-friend-link-check-script.html</link><pubDate>Sun, 25 Feb 2024 10:13:53 +0800</pubDate><guid>https://lisenhui.cn/blog/add-friend-link-check-script.html</guid><description>&lt;p&gt;友情链接是博客的重要组成部之一，很多博主日常也会时常进行链接的交换，即是发展自己的互联网友人圈子，也算得上是为自己的博客引流。不过在如今信息大爆炸的时代，也渐渐有些博主实在“有些乏力”来维护自己的站点，其中的缘由可能有诸多，最终便是出现我们偶尔会遇到的情况，某个站点突然之间可能就无法访问。为此便有想法给自己的站点添加个友情链接检测脚本，剔除掉那些已经失效的友情链接，让用户访问时的跳转体验更好加。&lt;/p&gt;</description></item><item><title>重新激活Github的2FA认证</title><link>https://lisenhui.cn/tech/actived-github-2fa-auth.html</link><pubDate>Wed, 08 Nov 2023 20:37:20 +0800</pubDate><guid>https://lisenhui.cn/tech/actived-github-2fa-auth.html</guid><description>&lt;p&gt;近期有段时间没有登录 &lt;code&gt;GitHub&lt;/code&gt; 仓库站点，今天查看邮箱发现
&lt;a href="https://github.com/hugo-next/hugo-theme-next" title="hugo-theme-next" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 hugo-theme-next
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;项目上有新的 &lt;code&gt;PR&lt;/code&gt;进来，便想上来查看下具体情况。结果发现Github官方已经全面启用&lt;code&gt;2FA&lt;/code&gt;安全认证要求，只是之前自己“偷懒”并没有做这个功能的认证，原来还有可以使用密码方式绕过去的，但现在也关闭了此入口，难道真的要芭比Q啦。&lt;/p&gt;</description></item><item><title>Linux中使用tar压缩命令排除文件</title><link>https://lisenhui.cn/tech/linux-tar-command-excludes-from.html</link><pubDate>Sat, 28 Oct 2023 17:52:08 +0800</pubDate><guid>https://lisenhui.cn/tech/linux-tar-command-excludes-from.html</guid><description>&lt;p&gt;众所周知&lt;code&gt;tar&lt;/code&gt;命令是在&lt;code&gt;Linux&lt;/code&gt;系统中最为常用来解压缩文件的命令之一，之前大部分时候都直接用它来压缩备份或转移的文件内容，因此也未过多关注过它在压缩时的其它可选参数使用。但最近在转移文件遇到其占用空间比较大，考虑到里面有些内容并不是必须，于是想到如何来使用&lt;code&gt;tar&lt;/code&gt;命令参数来实现，经过多次尝试，找到了个解决办法——使用&lt;code&gt;exclude-from&lt;/code&gt;参数，可灵活控制不需要压缩文件，然后顺手做个记录分享。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;注：当排除的内容并不多时，也可以直接使用&lt;code&gt;exclude&lt;/code&gt;参数会更方便些。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>继续小米手环的健康生活之旅</title><link>https://lisenhui.cn/life/xiaomi-smart-band-8pro-experience.html</link><pubDate>Sat, 19 Aug 2023 16:19:37 +0800</pubDate><guid>https://lisenhui.cn/life/xiaomi-smart-band-8pro-experience.html</guid><description>&lt;p&gt;其实吧现在人的生活压力还是比较大的，借助智能穿戴设备来观察自己的健康状态也是不错的选择。鄙人也是从小米手环1代发布时便开始关注自己的运动量和睡眠状态，随着时间和技术的发展也经历过更新换代。因为会经常在外健走运动的习惯，但是手环一直都是要和手机连接才能记录（位置）数据，所以正在纠结是否要换个手表设置算啦，正巧看到了8月14日雷布斯的&lt;strong&gt;小米手环8Pro&lt;/strong&gt;发布会，而且还是现货出售，犹豫了片刻后便“冲动”的下了单😁。&lt;/p&gt;</description></item><item><title>一次意外的“坠机”引发了我对手机保护壳的深思</title><link>https://lisenhui.cn/life/did-your-phone-have-case-on.html</link><pubDate>Sat, 24 Jun 2023 16:10:42 +0800</pubDate><guid>https://lisenhui.cn/life/did-your-phone-have-case-on.html</guid><description>&lt;p&gt;原本是个开心的周末休息时光，但是手机的意外坠地带来的“伤痕”让我心情有点点不开心。曾经将它细心呵护保全一年多，没想到还是没有逃过磕碰的命运，都怪自己一时贪心想着拆卸下手机保护壳，好体验下手机真实的手感才会招此“横祸”。于是便写下此篇文章做个记录，及讨论下手机保护壳的必要性。先来提问下，你是否会时刻会你的手机戴上保护壳呢？&lt;/p&gt;</description></item><item><title>在JS中使用强大的CSS选择器来定位页面元素</title><link>https://lisenhui.cn/tech/use-powerful-css-selector-find-dom.html</link><pubDate>Sun, 23 Oct 2022 19:16:19 +0800</pubDate><guid>https://lisenhui.cn/tech/use-powerful-css-selector-find-dom.html</guid><description>&lt;p&gt;近期由于受到谷歌退出中国市场的影响，就连之前可以正常使用的翻译 API 也无法使用了。 无奈之下为不影响本站的加载速率，决定暂时关闭谷歌的在线翻译功能。&amp;#x1f643;&lt;/p&gt;
&lt;p&gt;接着就发生了奇怪的现象，重新生成站代码发布完成后，自测是没有问题的，但是有网友反馈说站点访问加载不出来内容。听完自己也甚是一惊，难道是服务器出问题啦？&lt;/p&gt;</description></item><item><title>结合 Github Action 实现自动上传 Algolia 索引</title><link>https://lisenhui.cn/tech/automatic-upload-algolia-index-with-action.html</link><pubDate>Tue, 04 Oct 2022 16:32:53 +0800</pubDate><guid>https://lisenhui.cn/tech/automatic-upload-algolia-index-with-action.html</guid><description>&lt;p&gt;起初本站的文章搜索功能使用是本地搜索支持，但后来发现有众多网友（包括 Hugo 官网文档搜索）都使用的是 
&lt;a href="https://www.algolia.com/" title="Algolia" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Algolia
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt; 在线搜索引擎，便顺手也给自己的站点移植到该搜索引擎上面。既然提到搜索引擎自然是少了索引文件的维护，接下来就给大家分享下结合 &lt;code&gt;Github Action&lt;/code&gt; 实现自动化的流程。&lt;/p&gt;</description></item><item><title>实现用户自定义主题深浅模式浏览站点</title><link>https://lisenhui.cn/tech/implement-custom-switch-theme-color.html</link><pubDate>Thu, 29 Sep 2022 21:35:25 +0800</pubDate><guid>https://lisenhui.cn/tech/implement-custom-switch-theme-color.html</guid><description>&lt;p&gt;如今大部的网站都实现了深浅主题2种不同模式的配色，比如说程序员大多喜欢深色模式，或许是需要长时间使用电脑，该模式能够一定程度上保护视力。从表面现象上来看，实现这一功能需要 &lt;code&gt;CSS&lt;/code&gt; 和 &lt;code&gt;JavaScript&lt;/code&gt; 两者搭配着一起使用，但当深入以后发现有些没料想的事情，且听我慢慢叙说。&lt;/p&gt;</description></item><item><title>Openresty+Github Action实现远程自动部署</title><link>https://lisenhui.cn/tech/use-openresty-ghaction-remote-deploy.html</link><pubDate>Sat, 17 Sep 2022 19:13:39 +0800</pubDate><guid>https://lisenhui.cn/tech/use-openresty-ghaction-remote-deploy.html</guid><description>&lt;p&gt;近期频发的收到云厂商关于服务器资源到期的提醒，当初为了躲避云厂商所谓的注册域名 IP 检测监控，无奈之下借着“新”用户的优惠政策，采购了一款最最实惠的云服务，周期为 1 年时间，如今也已是到了“寿终正寝”的时候啦， 因此不得已又要考虑给博客空间找新的部署服务器啦。后来得到热心朋友的资助，在其现有的云服务器上开辟了小空间提供给鄙人博客访问，真是感激万分呀！&lt;/p&gt;</description></item><item><title>使用自定义域名激活Vercel部署的Waline服务</title><link>https://lisenhui.cn/blog/use-custom-domain-active-vercel-waline.html</link><pubDate>Thu, 01 Sep 2022 21:23:03 +0800</pubDate><guid>https://lisenhui.cn/blog/use-custom-domain-active-vercel-waline.html</guid><description>&lt;p&gt;近期对于部分 Waline 评论插件的用户来说，或许是非常的困扰时期。先是服务商 LeanCloud 发布国内提供的服务，从8月份起需要绑定自有案例域名才能正常运行。而这两天 Vercel (Waline 官方提供的免费部署方案，也是大部用户的选择)旗下的 &lt;code&gt;vercel.app&lt;/code&gt; 域名又遭受 DNS 污染攻击，在国内无法直接访问此域名，导致众多 Waline 用户的服务直接陷入“宕机”状态，真可谓是雪上加霜。&lt;/p&gt;
&lt;p&gt;有句话说的好：“只要思想不滑坡，办法总比困难多”。接下来就是给大家分享下，如何通过自定义域名的方式来解决上面遇到的2个问题，此方法仅供各位网友参考参考。 &amp;#x1f604;&lt;/p&gt;</description></item><item><title>Github Action执行时遇到SSH key invalid format错误</title><link>https://lisenhui.cn/tech/github-action-ssh-key-invalid.html</link><pubDate>Thu, 11 Aug 2022 21:21:59 +0800</pubDate><guid>https://lisenhui.cn/tech/github-action-ssh-key-invalid.html</guid><description>&lt;p&gt;&lt;code&gt;Github Action&lt;/code&gt;是款非常不错的&lt;code&gt;CI/CD&lt;/code&gt;工具，自从它问世以来发展的速度真可谓是快，在 &lt;code&gt;Github&lt;/code&gt; 的官方市场中几乎能找到所有你想要使用的&lt;code&gt;Action&lt;/code&gt;脚本进行引用。本博客也是基于&lt;code&gt;Github Action&lt;/code&gt;进行远程部署的，与常规的&lt;code&gt;Github Pages&lt;/code&gt;服务不同，本站的静态文件是部署在国内某云厂商的静态服务器上面的，通过 
&lt;a href="https://github.com/tzzs/server-shell" title="tzzs/server-shell" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 tzzs/server-shell
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt; Action 集成，实现远程执行服务端的命令，来拉取最新生成的静态文件。&lt;/p&gt;</description></item><item><title>博客站点升级使用 Hugo NexT 最新主题</title><link>https://lisenhui.cn/blog/upgrade-blog-use-new-theme.html</link><pubDate>Sun, 07 Aug 2022 20:55:56 +0800</pubDate><guid>https://lisenhui.cn/blog/upgrade-blog-use-new-theme.html</guid><description>&lt;p&gt;时隔 2 年的时间后，如今又再一次开始折腾自己的博客站点，看来是自己有点太躁动啦&amp;#x1f602;。在上海疫情期间也真有点压抑的，为了消除这份不安的情绪，决定参考 
&lt;a href="https://theme-next.js.org/" title="Hexo NexT" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 &lt;strong&gt;Hexo NexT&lt;/strong&gt;
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;从零开始全面重构 &lt;code&gt;NexT&lt;/code&gt; 主题，也在独自奋斗的2个多月断断续续时间里完成主体功能所有移植工作（其实一直想有人参与进来共建，直接跑到人家 Hexo NexT 用户群“呼喊”，但也是没有浪花泛起，只好是自己继续独立前行）。 这不乘着周末的时间，把自己的站点也是升级到最新开发的主题，同时也是为后续想升级旧版本 &lt;code&gt;Hugo NexT&lt;/code&gt; 的用户打个样吧。&lt;/p&gt;</description></item><item><title>友情链接</title><link>https://lisenhui.cn/flinks.html</link><pubDate>Sun, 07 Aug 2022 19:12:52 +0800</pubDate><guid>https://lisenhui.cn/flinks.html</guid><description>&lt;p&gt;如想要交换友情链接，请将本站信息加入到你的站点友情链接中(可点击右上角图标直接复制)：&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-3"&gt;&lt;a class="lnlinks" href="#hl-0-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-4"&gt;&lt;a class="lnlinks" href="#hl-0-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;凡梦星尘空间站&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;desc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;再平凡的人也有属于他的梦想！&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;avatar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://lisenhui.github.io/imgs/avatar.png&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://lisenhui.cn&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;并在评论区留下你的站点信息，格式参考如上，我会尽快在第一时间回复并添加友链，谢谢支持！ &amp;#x2764;&amp;#xfe0f;&lt;/p&gt;</description></item><item><title>创建属于你自己的org永久域名</title><link>https://lisenhui.cn/tech/create-your-forever-org-domain.html</link><pubDate>Sat, 18 Jun 2022 20:39:58 +0800</pubDate><guid>https://lisenhui.cn/tech/create-your-forever-org-domain.html</guid><description>&lt;p&gt;或许你也曾想拥有一个属于自己的域名，但又苦于囊中羞涩无力购买，亦或是在国内域名生效前都要实名备案。那么今天就给你带来一个好消息，你可以申请注册一个属于自己的 org 域名，而且不需要花费任何的费用，也不用进行备案就能使用（仅限国外服务器），就问你心动了有没有 &amp;#x1f606;&lt;/p&gt;
&lt;div class="note info "&gt;
 注意： 这里注册的并不是一级域名，而是属于二级域名，要是介意不用往下细看了。
&lt;/div&gt;</description></item><item><title>让 Nginx 将 HTTP 请求转发到 HTTPS 安全模式</title><link>https://lisenhui.cn/blog/make-nginx-support-http-ssl-request.html</link><pubDate>Mon, 30 May 2022 15:55:03 +0800</pubDate><guid>https://lisenhui.cn/blog/make-nginx-support-http-ssl-request.html</guid><description>&lt;p&gt;在某次博主的交流讨论时，忽然间发现自己站点原定让 HTTP 转发 HTTPS 的支持功能，实际上并不没有生效。如果是直接输入域名访问的话，那么会出现 400 的错误页面。当初为了让全站支持 HTTPS 也是耗费了不少精力，没想到却是这个结果。&lt;/p&gt;</description></item><item><title>用unpkg替换jsdelivr作为本站CDN提供者</title><link>https://lisenhui.cn/blog/repleace-jsdelivr-with-unpkg-as-cdn-vender.html</link><pubDate>Fri, 20 May 2022 19:03:27 +0800</pubDate><guid>https://lisenhui.cn/blog/repleace-jsdelivr-with-unpkg-as-cdn-vender.html</guid><description>&lt;p&gt;前几天就有看到网友在讨论 &lt;code&gt;jsdelivr&lt;/code&gt; 服务被墙的消息，可能是刚开始的缘故吧，当时发现自己的站点倒还算是正常的，只也没坚挺几天也面临加载 &lt;code&gt;jsdelivr&lt;/code&gt; 资源的失败问题。一番排查下来，发现受影响的部分还是比较小的，至少当时站点的 CSS 文件没有托管到 CDN 上，只要更换受影响部分的 CDN 链接引用便是。&lt;/p&gt;</description></item><item><title>VirtualBox6.x版本CPU时钟Bug导致虚拟机无法开机</title><link>https://lisenhui.cn/tech/virtualbox6-cup-clock-not-started.html</link><pubDate>Thu, 21 Apr 2022 18:39:47 +0800</pubDate><guid>https://lisenhui.cn/tech/virtualbox6-cup-clock-not-started.html</guid><description>&lt;p&gt;下午在启动平时常用的虚拟环境时，发现进度条卡在中间老半天都不会动，情况不太正常，以前启动时间最多也就是 10 几分钟就能看到桌面。点击键盘的方向键看打印的日志，一直在重复如下图所示的 Bug 信息，即使后面等待了半个多小时进入系统后，这个日志信息也不断的在终端界面上输出。&lt;/p&gt;</description></item><item><title>使用Mobaxterm登录本地虚拟机很慢</title><link>https://lisenhui.cn/tech/sshlogin-localvm-slowly-mobaxterm.html</link><pubDate>Mon, 04 Apr 2022 11:53:34 +0800</pubDate><guid>https://lisenhui.cn/tech/sshlogin-localvm-slowly-mobaxterm.html</guid><description>&lt;p&gt;近期因本地虚拟机有问题但重新搭建了个新环境，结果在使用 MobaXterm 工具登录终端时发现每次都要等待个 4 ~ 5 秒才可以进入，操作检验不是很好，不明白为何本地环境连接会是这么的慢，所以还是得想办法分析下。&lt;/p&gt;
&lt;p&gt;看有些网友也有类似的困惑，提示说可能是 SSH 登录时要通过 DNS 来寻址的原因。参考文章上说法找到 &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; 把里面的 &lt;code&gt;UseDNS&lt;/code&gt; 配置项设置为 &lt;code&gt;no&lt;/code&gt;，但是发现其已经是关闭的状态。那会是什么原因引起呢？&lt;/p&gt;</description></item><item><title>TravisCI 远程部署站点服务</title><link>https://lisenhui.cn/tech/use-travisci-remote-deploy-site.html</link><pubDate>Tue, 22 Mar 2022 22:13:43 +0800</pubDate><guid>https://lisenhui.cn/tech/use-travisci-remote-deploy-site.html</guid><description>&lt;h2 id="背景"&gt;背景
&lt;a class="header-anchor" href="#%e8%83%8c%e6%99%af"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;之前一直都是将自己的博客站点托管在 &lt;code&gt;Github Pages&lt;/code&gt; 服务上面，但无奈国内的访问速度确实是让人堪忧，时不时还会出现打不开现象，确实影响到访问查看的体验。另外近期腾讯云的 ICP 备案又开始各种检查“臊”操作，一旦发现域名解析 IP 地址不是其云服务的话就会终止 ICP 备案，那后果可想而知肯定是域名会被终止访问引起一连串的不可预知问题（毕竟重走 ICP 审批流程也是非常的烦恼）。于是便只好订阅了腾讯云的轻服务产品，把站点静态内容托管在其上面。&lt;/p&gt;</description></item><item><title>使用Sublime Text搭建Hugo使用环境</title><link>https://lisenhui.cn/tech/use-sublime-txt-build-hugo-site.html</link><pubDate>Sat, 12 Feb 2022 16:32:10 +0800</pubDate><guid>https://lisenhui.cn/tech/use-sublime-txt-build-hugo-site.html</guid><description>&lt;p&gt;自从捣鼓 &lt;code&gt;Hugo&lt;/code&gt; 建站以来也有好长一段时间啦，但是之前的使用环境比较的 &lt;em&gt;“松散”&lt;/em&gt; ，比如编辑博客文章用的是 &lt;code&gt;Sublime Text&lt;/code&gt; 文本工具，再通过 &lt;code&gt;CMD&lt;/code&gt; 命令行工具调用 &lt;code&gt;Hugo&lt;/code&gt;执行本地预览，最后再
使用 &lt;code&gt;Git Extension&lt;/code&gt; 图形工具将博客文章发布到 &lt;code&gt;Github Pages&lt;/code&gt; 供网友们浏览。 从整个操作流程上来看还是可以的，只是在过程中要切换不同的工具操作，而恰好看到 &lt;code&gt;Hugo&lt;/code&gt; 官网上有个 &lt;code&gt;Sublime Text&lt;/code&gt; 的
&lt;a href="https://gohugo.io/tools/editors/#sublime-text" title="插件" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 &lt;strong&gt;插件&lt;/strong&gt;
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，于是乎有了重新整合 &lt;code&gt;Hugo&lt;/code&gt; 使用环境的想法，哈。&lt;/p&gt;</description></item><item><title>Sublime Text安装插件失败</title><link>https://lisenhui.cn/tech/use-sublime-txt-build-hugo-site.html</link><pubDate>Tue, 08 Feb 2022 12:31:13 +0800</pubDate><guid>https://lisenhui.cn/tech/use-sublime-txt-build-hugo-site.html</guid><description>&lt;p&gt;近期因公司之前分配的电脑出了点毛病，无奈只能重新换个新电脑，所以环境也得从头进行搭建。而一直使用的 &lt;code&gt;Sublime Text&lt;/code&gt; 是绿色版本，直接拷贝过来后启动，编辑等操作都是正常的，但在尝试安装新的插件时就遇了如下的问题。&lt;/p&gt;</description></item><item><title>优化Hugo Next主题的过程2</title><link>https://lisenhui.cn/blog/make-next-theme-pithy2.html</link><pubDate>Fri, 09 Jul 2021 17:53:06 +0800</pubDate><guid>https://lisenhui.cn/blog/make-next-theme-pithy2.html</guid><description>&lt;h2 id="背景"&gt;背景
&lt;a class="header-anchor" href="#%e8%83%8c%e6%99%af"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;自上次优化&lt;code&gt;NexT&lt;/code&gt;主题并分享到Github仓库中
&lt;a href="https://github.com/elkan1788/hugo-theme-next" title="hugo-theme-next" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 &lt;strong&gt;hugo-theme-next&lt;/strong&gt;
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;后，也是受到了不少&lt;code&gt;NexT&lt;/code&gt;主题喜爱者的使用和邮件反馈。于是决定还是要花点心思来维护它，便把自己之前一些想法也重新加入到&lt;code&gt;NexT&lt;/code&gt;主题中，同时对部分插件的功能做了更新。&lt;/p&gt;
&lt;p&gt;此次优化后发布的版本代号为&lt;code&gt;3.x&lt;/code&gt;，原因是整体结构和之前的变化较为大（主要是在配置方面的体现），为此也重写主题的相关介绍等信息，目前正在申请加入官方的主题列表中(
&lt;a href="https://deploy-preview-73--hugothemes.netlify.app/themes/hugo-theme-next/" title="点击预览" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 点击预览
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;)，欢迎大家的使用和反馈。&lt;/p&gt;</description></item><item><title>替换SpringBoot里的文件</title><link>https://lisenhui.cn/tech/replace-files-in-springboot.html</link><pubDate>Wed, 14 Apr 2021 17:43:20 +0800</pubDate><guid>https://lisenhui.cn/tech/replace-files-in-springboot.html</guid><description>&lt;p&gt;现在使用&lt;code&gt;Spring Boot&lt;/code&gt;架构的应用开发来说是非常的普遍，统一化的打包部署确实带来不少便利，但当遇到问题时也是会比较棘手。或许你会觉得很惊讶，但如果说这是产品部署运维过程中遇到的难题需要修改&lt;code&gt;Spring Boot&lt;/code&gt;应用程序，你就会觉得困难也是不奇怪的。本文就来分享下如何使用&lt;code&gt;jar&lt;/code&gt;命令应对线上部署产品时，要临时替换&lt;code&gt;Spring Boot&lt;/code&gt;应用中的Jar包的操作。&lt;/p&gt;</description></item><item><title>加入Istio官方翻译组织的历程记录</title><link>https://lisenhui.cn/tech/join-istio-translation-org.html</link><pubDate>Sat, 20 Mar 2021 11:48:53 +0800</pubDate><guid>https://lisenhui.cn/tech/join-istio-translation-org.html</guid><description>&lt;p&gt;作为曾经的程序猿，自己也一直“享受”着来自开源社区的那些无私分享。这些开源项目对自己的影响和启发还是很大的，之前就有想过如何去回馈开源社区，也开贡献过自己的一些项目，参与过一些开源项目，但都还是仅限国内的项目。不久前正好看到 Jimmy Song 在微信朋友圈发布
&lt;a href="https://mp.weixin.qq.com/s/fPvCU8Dj4c60QMmy_s9rmA" title="《Istio 官网翻译工作组成立暨志愿者招募》" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 《&lt;strong&gt;Istio 官网翻译工作组成立暨志愿者招募&lt;/strong&gt;》
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;的动态，没有任何的犹豫，下班后便联系 Jimmy 申请加入翻译工作，并在随后的时间完成自己的首次翻译，也成功被合并到了 Istio 官方仓库的主分支当中。如果你也有和我一样的想法，那么欢迎您也来一起加入，期待。&lt;/p&gt;</description></item><item><title>使用Github Action自动同步仓库到Gitee</title><link>https://lisenhui.cn/tech/add-sync-gitee-action.html</link><pubDate>Thu, 25 Feb 2021 12:52:25 +0800</pubDate><guid>https://lisenhui.cn/tech/add-sync-gitee-action.html</guid><description>&lt;h2 id="背景"&gt;背景
&lt;a class="header-anchor" href="#%e8%83%8c%e6%99%af"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;作为程序员出生的你，肯定知道备份的重要性。再说现在大环境背景下，美国的政治关系还是比较混乱的，而对于存放在Github上面的项目，也不再是技术自由的国度啦。所以说我们的代码还是有必要进行“双”备份的，接下来就是介绍下，如何使用Github上面的Action功能，将Github上面的代码同步备份到国内的Gitee仓库站点。&lt;/p&gt;</description></item><item><title>GitExtensions推送Github失败记录</title><link>https://lisenhui.cn/tech/git-extensions-push-fail.html</link><pubDate>Mon, 22 Feb 2021 15:42:39 +0800</pubDate><guid>https://lisenhui.cn/tech/git-extensions-push-fail.html</guid><description>&lt;h2 id="问题现身"&gt;问题现身
&lt;a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e7%8e%b0%e8%ba%ab"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;555~，今天体验了一把安装最新程序的“快感”！！！&lt;/p&gt;
&lt;p&gt;在使用Git Extensisons推送最新写的文章到Github时，遇到了个SSH KEY认证无效的莫名错误。事情的发生是这样的：今天在首次打开Git Extensions软件时，它非常友好的弹出更新提示窗口，然后就手不自觉的点击了下确认按钮。结果更新好后，在推送文章到Github时就发生了如下面一样神奇的错误阻拦：&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-3"&gt;&lt;a class="lnlinks" href="#hl-0-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-4"&gt;&lt;a class="lnlinks" href="#hl-0-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-5"&gt;&lt;a class="lnlinks" href="#hl-0-5"&gt;5&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-6"&gt;&lt;a class="lnlinks" href="#hl-0-6"&gt;6&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;FATAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;No&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;supported&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;authentication&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;available&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;publickey&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Please&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;make&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sure&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;have&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;correct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rights&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;repository&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Github个人信息卡片</title><link>https://lisenhui.cn/tech/github-personal-profile-card.html</link><pubDate>Sun, 24 Jan 2021 12:21:10 +0800</pubDate><guid>https://lisenhui.cn/tech/github-personal-profile-card.html</guid><description>&lt;p&gt;Github上总是会有一些新奇的东西出现，这不无意间又发现了个有趣的玩法，可以用它来作为你的个人开发者名信片展现。具体展现效果如下：&lt;/p&gt;
&lt;p&gt;&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/2021/01-24-elkan1788-profile-02.png!alias" alt="01-24-elkan1788-profile-02.png" title="01-24-elkan1788-profile-02.png" /&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;操作起来也不繁琐，类似以前的pages服务那样，只准备个特定的仓库就可以，具体操作如下：&lt;/p&gt;</description></item><item><title>优化Hugo Next主题的过程</title><link>https://lisenhui.cn/blog/make-next-theme-pithy.html</link><pubDate>Fri, 02 Oct 2020 10:32:51 +0000</pubDate><guid>https://lisenhui.cn/blog/make-next-theme-pithy.html</guid><description>&lt;h2 id="背景"&gt;背景
&lt;a class="header-anchor" href="#%e8%83%8c%e6%99%af"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;经过一番考虑还是把个人博客从Hexo引擎迁移到Hugo引擎，博客主题依旧还是沿用NexT。其实本来还担心又要折腾弄个全新的博客主题，后来Github上看到兰陵子分享的
&lt;a href="https://github.com/xtfly/hugo-theme-next" title="NexT" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 NexT
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;主题，就直接拿过来引用。但在部署后发现还是有些地方需要改善，在此记录下改造优化的过程。如果正好你也喜欢这个主题，那么欢迎拿去使用，也欢迎交流反馈。&lt;/p&gt;</description></item><item><title>安装CDH6过程中几个入坑记录</title><link>https://lisenhui.cn/tech/install-cdh-issues-notes.html</link><pubDate>Mon, 28 Sep 2020 17:02:33 +0000</pubDate><guid>https://lisenhui.cn/tech/install-cdh-issues-notes.html</guid><description>&lt;p&gt;其实CDH环境部署安装并非是什么难事，正所谓是熟能生巧嘛。但正好不巧的就是太久没有操作过，便是会遇到一些“奇奇怪怪”的问题，而后花费些功夫才能解决好，事后也就顺道把它们记录下来，避免以后再犯。&lt;/p&gt;</description></item><item><title>停止使用原中文域名公告</title><link>https://lisenhui.cn/blog/stop-use-chinese-domain-notice.html</link><pubDate>Thu, 17 Sep 2020 22:42:12 +0000</pubDate><guid>https://lisenhui.cn/blog/stop-use-chinese-domain-notice.html</guid><description>&lt;p&gt;从今天起正式启用&lt;code&gt;lisenhui.cn&lt;/code&gt;作为本博客空间唯一域名。&lt;/p&gt;
&lt;p&gt;早上的时候收到了域名服务商的通知短信，提示域名需要续费。才发现不知不觉中，原来工作后注册的第一个域名，已经陪伴自己走过了7个年头啦。当时也就是觉得中文域名比较特别，然后就自己的名字注册了&lt;code&gt;李森辉.cn&lt;/code&gt;的域名。&lt;/p&gt;</description></item><item><title>博客引擎迁移至Hugo计划</title><link>https://lisenhui.cn/blog/move-site-2-hugo-plan.html</link><pubDate>Sat, 15 Aug 2020 10:22:09 +0000</pubDate><guid>https://lisenhui.cn/blog/move-site-2-hugo-plan.html</guid><description>&lt;p&gt;近期发现自己的个人博客空间突然之间不能访问，一番查证后发现原来是之前使用的page服务商已经停止提供服务。无奈只好重新迁移回到Github Pages。但这就是又得到重新准备Hexo的相关开发环境，还得辛苦的调试才能成功。而恰好这时在网上有看到过Hugo静态站点引擎的文章，一款基于Go语言开发的极速框架，开发环境部署也简便快速。另外近期原有的域名也快到期了，正好就一起把博客空间整理整理吧。&lt;/p&gt;</description></item><item><title>在Linux上安装中文字体</title><link>https://lisenhui.cn/tech/install-linux-chinese-fonts.html</link><pubDate>Mon, 21 Oct 2019 19:04:51 +0000</pubDate><guid>https://lisenhui.cn/tech/install-linux-chinese-fonts.html</guid><description>&lt;h2 id="背景"&gt;背景
&lt;a class="header-anchor" href="#%e8%83%8c%e6%99%af"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;平时一般都很少在Linux服务机器上使用UI桌面，但也还是有机会遇到，这不今天便遇到Linux版本的火狐浏览器显示中文乱码。无论怎么调试浏览器的相关设置，都没有办法凑效，甚是有点郁闷。&lt;/p&gt;
&lt;p&gt;&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/2019/10-31-firefox-browser-err01.png!alias" alt="firefox-browser-err01.png" title="firefox-browser-err01.png" /&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/2019/10-31-firefox-browser-err02.png!alias" alt="firefox-browser-err02.png" title="firefox-browser-err02.png" /&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>本地部署Zeppelin集成Kylin制作数据分析</title><link>https://lisenhui.cn/tech/local-deploy-kylin-integrat-zeppelin.html</link><pubDate>Fri, 07 Jun 2019 21:40:46 +0800</pubDate><guid>https://lisenhui.cn/tech/local-deploy-kylin-integrat-zeppelin.html</guid><description>&lt;p&gt;通过&lt;code&gt;Kylin&lt;/code&gt;自带的简单图表展示来进行数据分析的你是否觉得还不够过瘾？想在酷炫的仪表盘上进行数据分析？今天就给大家带来一款上手较快，简单易用的数据驱动式Notebook工具——&lt;code&gt;Apache Zeppelin&lt;/code&gt;。将&lt;code&gt;Zeppelin&lt;/code&gt;与Kylin 集成后，你就可以通过它来定制你的数据可视化报告，更直观地体验&lt;code&gt;Kylin&lt;/code&gt;的分析“神”速啦～&lt;/p&gt;
&lt;p&gt;与&lt;code&gt;Kylin&lt;/code&gt;一样， Apache&lt;code&gt;Zeppelin&lt;/code&gt;也是 Apache 软件基金会的顶级项目，是一款基于Web的Notebook（类似于IPython的Notebook），支持友好交互式的数据分析体验，原生就支持Spark、Scala、SQL、Shell、Markdown等编程或脚本语言，可以访问其官方网站
&lt;a href="https://zeppelin.apache.org" title="Apache Zeppelin" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Apache Zeppelin
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;了解更多的信息。&lt;/p&gt;</description></item><item><title>本地搭建Kylin运行环境实践</title><link>https://lisenhui.cn/tech/practice-of-local-deploy-kylin.html</link><pubDate>Tue, 09 Apr 2019 18:38:36 +0800</pubDate><guid>https://lisenhui.cn/tech/practice-of-local-deploy-kylin.html</guid><description>&lt;p&gt;&lt;code&gt;Apache Kylin&lt;/code&gt;是运行在&lt;code&gt;Hadoop&lt;/code&gt;集群之上的&lt;code&gt;OLAP&lt;/code&gt;数据分析应用服务，在&lt;code&gt;Hadoop&lt;/code&gt;生态中，大家对它的认可度和赞誉都很高，全球有超过1000+企业都在使用“麒麟”（Apache Kylin）这只神兽。而&lt;code&gt;Hadoop&lt;/code&gt;集群的部署又并非易事，那这是否就阻碍了我们探究&lt;code&gt;Apache Kylin&lt;/code&gt;的步伐呢？答案是否定的，通过借助强大的虚拟技术，在自己本地就能体验到“麒麟”的魅力，那么接下来就让我们一起进入“麒麟”的数据世界。&lt;/p&gt;</description></item><item><title>不能在HDFS Data节点上创建临时文件</title><link>https://lisenhui.cn/tech/unable-create-tmp-file-in-hdfs-nodes.html</link><pubDate>Thu, 21 Mar 2019 19:04:51 +0000</pubDate><guid>https://lisenhui.cn/tech/unable-create-tmp-file-in-hdfs-nodes.html</guid><description>&lt;p&gt;在新创建的&lt;code&gt;Hadoop&lt;/code&gt;边缘节点上，尝试通过&lt;code&gt;Hive CLI&lt;/code&gt;模式进行数据插入操作，结果没有出现意想中的成功信息，反倒是捕获到如下的异常：&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt; 1&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt; 2&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-3"&gt;&lt;a class="lnlinks" href="#hl-0-3"&gt; 3&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-4"&gt;&lt;a class="lnlinks" href="#hl-0-4"&gt; 4&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-5"&gt;&lt;a class="lnlinks" href="#hl-0-5"&gt; 5&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-6"&gt;&lt;a class="lnlinks" href="#hl-0-6"&gt; 6&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-7"&gt;&lt;a class="lnlinks" href="#hl-0-7"&gt; 7&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-8"&gt;&lt;a class="lnlinks" href="#hl-0-8"&gt; 8&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-9"&gt;&lt;a class="lnlinks" href="#hl-0-9"&gt; 9&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-10"&gt;&lt;a class="lnlinks" href="#hl-0-10"&gt;10&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-11"&gt;&lt;a class="lnlinks" href="#hl-0-11"&gt;11&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-12"&gt;&lt;a class="lnlinks" href="#hl-0-12"&gt;12&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-13"&gt;&lt;a class="lnlinks" href="#hl-0-13"&gt;13&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-14"&gt;&lt;a class="lnlinks" href="#hl-0-14"&gt;14&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-15"&gt;&lt;a class="lnlinks" href="#hl-0-15"&gt;15&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-16"&gt;&lt;a class="lnlinks" href="#hl-0-16"&gt;16&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-17"&gt;&lt;a class="lnlinks" href="#hl-0-17"&gt;17&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;FAILED&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SemanticException&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;10293&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Unable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hive&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;kylin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;9c84de0a&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;fca2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;4d3c&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;8f72&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;47436a4adb83&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;_tmp_space&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Values__Tmp__Table__1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;data_file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;could&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;replicated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nodes&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;minReplication&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;There&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;datanode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;running&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;excluded&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;operation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hdfs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;blockmanagement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BlockManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;chooseTarget4NewBlock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BlockManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;1720&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hdfs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;namenode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FSNamesystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAdditionalBlock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FSNamesystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;3440&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hdfs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;namenode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;NameNodeRpcServer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addBlock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NameNodeRpcServer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;686&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hdfs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;namenode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AuthorizationProviderProxyClientProtocol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addBlock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AuthorizationProviderProxyClientProtocol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;217&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hdfs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;protocolPB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ClientNamenodeProtocolServerSideTranslatorPB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addBlock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientNamenodeProtocolServerSideTranslatorPB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;506&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hdfs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;proto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;callBlockingMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ClientNamenodeProtocolProtos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ipc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ProtobufRpcEngine$Server$ProtoBufRpcInvoker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ProtobufRpcEngine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;617&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ipc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;RPC$Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RPC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;1073&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ipc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Server$Handler$1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;2226&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ipc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Server$Handler$1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;2222&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AccessController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doPrivileged&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Native&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;javax&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doAs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;415&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UserGroupInformation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doAs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UserGroupInformation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;1917&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;apache&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hadoop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ipc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Server$Handler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;java&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;2220&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nl"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;no&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;permission&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Hive&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;working&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;kylin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>关于我</title><link>https://lisenhui.cn/about.html</link><pubDate>Tue, 05 Feb 2019 20:12:52 +0800</pubDate><guid>https://lisenhui.cn/about.html</guid><description>&lt;p&gt;&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/luxun-quotes.png!alias" alt="鲁迅名言" title="鲁迅名言" /&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;h2 id="关于站长"&gt;🙋‍♂️关于站长
&lt;a class="header-anchor" href="#%e5%85%b3%e4%ba%8e%e7%ab%99%e9%95%bf"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:18px;font-weight:bold;color:#fc6423;margin-right:3px;"&gt;崖&lt;/span&gt;是来自&lt;strong&gt;广东•梅州&lt;/strong&gt;的
&lt;a href="https://baike.baidu.com/item/%E5%AE%A2%E5%AE%B6/10249" title="客家人" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 客家人
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，一名追着80后尾巴共同成长的90后，现已经定居在&lt;strong&gt;上海&lt;/strong&gt;生活。&lt;/p&gt;
&lt;p&gt;全网唯一ID：凡梦星尘（elkan1788）&lt;/p&gt;
&lt;p&gt;与我联系：
&lt;a href="mailto:elkan1788@139.com" title="elkan1788@139.com" &gt;
 elkan1788@139.com
 
&lt;/a&gt;&lt;/p&gt;
&lt;blockquote class="blockquote-center"&gt;
 &lt;p&gt;文静的外表下藏有颗 &lt;strong&gt;叛逆&lt;/strong&gt; 的心，&lt;/p&gt;</description></item><item><title>Win10常用的快捷操作方式</title><link>https://lisenhui.cn/tech/win10-quick-operations.html</link><pubDate>Wed, 08 Aug 2018 12:54:53 +0000</pubDate><guid>https://lisenhui.cn/tech/win10-quick-operations.html</guid><description>&lt;p&gt;常言道“工欲善其事，必先利其器。”&lt;/p&gt;
&lt;p&gt;不过从&lt;code&gt;Mac&lt;/code&gt;再过渡回来到&lt;code&gt;Windows&lt;/code&gt;确实是有诸多的不习惯，但仍是要学会克服，无它，工作是生存的根本技能。于是从网络上扒了下关于&lt;code&gt;Win10&lt;/code&gt;快捷键的分布，还是挺有趣的。记录也下部分常用快捷键，如下：&lt;/p&gt;</description></item><item><title>Axure教程：动态面板内容超出界线显示</title><link>https://lisenhui.cn/tech/axure-lightbox-shade.html</link><pubDate>Mon, 12 Mar 2018 10:11:53 +0000</pubDate><guid>https://lisenhui.cn/tech/axure-lightbox-shade.html</guid><description>&lt;h1 id="问题"&gt;问题
&lt;a class="header-anchor" href="#%e9%97%ae%e9%a2%98"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;随着用户需求的不断更新，产品原型的设计也在不断迭代升级，那么是必会让整体的设计复杂增加，各中组件相互影响的因素就更多。这不现在就遇到在动态面板上显示一个隐藏的元件时，结果下拉的组件显示不完全了，真的好是郁闷，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/2018/03-12-axure-state-auto-display01.png!alias" alt="axure-state-auto-display01.png" title="axure-state-auto-display01.png" /&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>Axure教程：实现表格数据展示</title><link>https://lisenhui.cn/tech/axure-datalist-table.html</link><pubDate>Fri, 29 Dec 2017 18:45:03 +0000</pubDate><guid>https://lisenhui.cn/tech/axure-datalist-table.html</guid><description>&lt;p&gt;通常在系统管理后台中，使用列表（表格）形式展示数据是最为常见的方式。而在使用Axure设计产品原型时想实现这个数据列表却不太容易，或许常见的做法就是使用矩形拼凑起来，还有就是直接使用表格控件来布局。但是这都不太方便，首先就是布局麻烦，其次就是数据修改比较麻烦。接下来给大家介绍下如何使用表格+中继器控件实现数据列表。&lt;/p&gt;</description></item><item><title>Axure教程：实现动态的遮罩层</title><link>https://lisenhui.cn/tech/axure-lightbox-shade.html</link><pubDate>Fri, 15 Dec 2017 20:22:43 +0000</pubDate><guid>https://lisenhui.cn/tech/axure-lightbox-shade.html</guid><description>&lt;p&gt;今天在做产品原型设计时，遇到了个关于动态显现遮罩层的难点。&amp;ldquo;无奈&amp;quot;为追求高保真的效果，还是花了点心思做个原型实现。待做好回过头来看看的话，其实这个效果的难度也不大，只是看个人意愿是否想做而已。Axure本身就提供了模板的功能，也就是说只要实现一次但可以一劳永逸。下面就一起来看看这个遮罩层实现过程和效果吧。&lt;/p&gt;</description></item><item><title>Apache Nifi在Windows环境下搭建伪群集及证书登录</title><link>https://lisenhui.cn/tech/nifi-windows-local-cluster.html</link><pubDate>Thu, 26 Oct 2017 17:50:52 +0000</pubDate><guid>https://lisenhui.cn/tech/nifi-windows-local-cluster.html</guid><description>&lt;p&gt;前些时间做了关于&lt;code&gt;Apache Nifi&lt;/code&gt;分布式集群的搭建分享，但很多时候要搭建分布式集群机器资源是个问题，而现在的单机的配置还是相当不错的，故现在就做个关于Windows上搭建个伪分布式集群的分享，同时通过另外一种方式实现&lt;strong&gt;Apache Nifi&lt;/strong&gt;的授权认证。&lt;/p&gt;
&lt;h1 id="系统环境及软件版本"&gt;系统环境及软件版本
&lt;a class="header-anchor" href="#%e7%b3%bb%e7%bb%9f%e7%8e%af%e5%a2%83%e5%8f%8a%e8%bd%af%e4%bb%b6%e7%89%88%e6%9c%ac"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Windows8.1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JDK1.8.0_131&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nifi-1.4.0&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: center"&gt;Nifi安装目录&lt;/th&gt;
 &lt;th style="text-align: center"&gt;WEB端口&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;xxx\nifi-ncm&lt;/td&gt;
 &lt;td style="text-align: center"&gt;9443&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;xxx\nifi-cluster01&lt;/td&gt;
 &lt;td style="text-align: center"&gt;9444&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: center"&gt;xxx\nifi-cluster02&lt;/td&gt;
 &lt;td style="text-align: center"&gt;9445&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

 &lt;blockquote&gt;
 &lt;p&gt;(其它版本可参考此篇文章)
另在测试中发个问题，使用&lt;code&gt;Apache Nifi&lt;/code&gt;内嵌的&lt;code&gt;Zookeeper&lt;/code&gt;搭建伪集群里启动总是提示端口占用的问题，故放弃只采用了单结点启动。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Apache Nifi集群搭建及用kerberos实现用户认证</title><link>https://lisenhui.cn/tech/ninfi-cluster-deploy-with-kerberos.html</link><pubDate>Sun, 22 Oct 2017 11:42:29 +0000</pubDate><guid>https://lisenhui.cn/tech/ninfi-cluster-deploy-with-kerberos.html</guid><description>&lt;p&gt;最近这段时间在接触数据流式处理方面的事宜，用到了&lt;strong&gt;Apache NIFI&lt;/strong&gt;现把安装配置中学习的一些经验分享下。此篇文章主要是针对集群及用户权限方面，关于
&lt;a href="https://nifi.apache.org/" title="Apache NIFI" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Apache NIFI
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;的介绍就不做过多的说明，直接引用官方的首页的说明如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/2017/10-22-Apache-NiFi-01.png!alias" alt="NiFi-01.png" title="NiFi-01.png" /&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>关于Ambari中服务运行正常UI却显示服务停止的问题</title><link>https://lisenhui.cn/tech/ambari-monitor-status-issues.html</link><pubDate>Wed, 18 Oct 2017 16:13:36 +0000</pubDate><guid>https://lisenhui.cn/tech/ambari-monitor-status-issues.html</guid><description>&lt;p&gt;很多时候环境的维护的确是件头痛的事件，这不本来在Ambari的Dashboard页面显示正常服务的监控，实然间出现了个奇怪的现象： 在机器查询服务的运行进程是正常的，可偏偏Ambari的UI界面却显示状为停止，但端口检查又显示正常的。如下图：&lt;/p&gt;
&lt;p&gt;&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/2017/10-18-ambari-red.png!alias" alt="alert_stopped.png" title="alert_stopped.png" /&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>HiveServer2因JDBC版本引起的问题</title><link>https://lisenhui.cn/tech/hive2-jdbc-connector-issues.html</link><pubDate>Tue, 17 Oct 2017 17:33:04 +0000</pubDate><guid>https://lisenhui.cn/tech/hive2-jdbc-connector-issues.html</guid><description>&lt;p&gt;之前一直都是用&lt;code&gt;HDP&lt;/code&gt;来搭建和管理&lt;strong&gt;Hadoop&lt;/strong&gt;环境，在安装完成调试时也未曾出现过棘手的问题，但这次在&lt;code&gt;Centos6x&lt;/code&gt;系统上布署好后却是遇到奇怪的问题：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;表面上看来&lt;strong&gt;Hive&lt;/strong&gt;服务是正常运行的，进程运行正常，页面UI也正常，日志也没错误输出。简单的建表的语句都能执行，可偏偏在导入本地/&lt;strong&gt;HDFS&lt;/strong&gt;数据时，便就抛出异常啦。错误的堆栈信息如下：&lt;/p&gt;

 &lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax&lt;span class="p"&gt;;&lt;/span&gt; check the manual that corresponds to your MySQL server version &lt;span class="k"&gt;for&lt;/span&gt; the right syntax to use near &lt;span class="s1"&gt;&amp;#39;OPTION SQL_SELECT_LIMIT=DEFAULT&amp;#39;&lt;/span&gt; at line &lt;span class="m"&gt;1&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;


 &lt;blockquote&gt;
 &lt;p&gt;另外一个问题在使用&lt;strong&gt;Ambari&lt;/strong&gt;提供的&lt;code&gt;HiveView&lt;/code&gt; UI进行HDFS数据导入提示文件不存在，错误信息如下：&lt;/p&gt;

 &lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-1-1"&gt;&lt;a class="lnlinks" href="#hl-1-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;org.apache.hive.service.cli.HiveSQLException: Error &lt;span class="k"&gt;while&lt;/span&gt; compiling statement: FAILED: SemanticException Line 1:17 Invalid path &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;/tmp/xxx/xxxxx.csv&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;: No files matching path hdfs:/...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Azkaban所支持的Job类型及示例</title><link>https://lisenhui.cn/tech/azkaban-execute-jobs.html</link><pubDate>Sat, 09 Sep 2017 18:45:42 +0000</pubDate><guid>https://lisenhui.cn/tech/azkaban-execute-jobs.html</guid><description>&lt;p&gt;在官方文档的介绍中，了解到&lt;code&gt;Azkaban&lt;/code&gt;所支持的工作类型还是很丰富的，如：&lt;code&gt;Command&lt;/code&gt;，&lt;code&gt;HadoopShell&lt;/code&gt;，&lt;code&gt;Python&lt;/code&gt;，&lt;code&gt;Java&lt;/code&gt;，&lt;code&gt;Hive&lt;/code&gt;，&lt;code&gt;Pig&lt;/code&gt;等等。不过在此我们主要具体只来讲解下&lt;code&gt;Python&lt;/code&gt;与&lt;code&gt;Java&lt;/code&gt;的工作类型任务，其它工作类型的话，比如&lt;code&gt;Commnad&lt;/code&gt;，&lt;code&gt;Hive&lt;/code&gt;，&lt;code&gt;HadoopShell&lt;/code&gt;相对比较简单就不做详解，有需要的话可以自行实践一下。&lt;/p&gt;
&lt;p&gt;不管提交哪一种任务，&lt;code&gt;Azkaban&lt;/code&gt;默认都是通过上传压缩包来管理，那么在此建议大家养成一个习惯，不要所执行的文件(代码)打包到&lt;code&gt;Azkaban&lt;/code&gt;的工程包里面。这样带来的好处是显而易见的，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;工程创建的速度快，不需要上传执行部分文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;避免了修改&lt;code&gt;MySQL&lt;/code&gt;中的&lt;code&gt;max_allow_packet&lt;/code&gt;参数以解决工程文件上传失败的问题&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在分布式布署环境中，当执行Task免去了在不同节点中拷贝工程包的麻烦&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>定时调度任务器Azkaban安装</title><link>https://lisenhui.cn/tech/azkaban-install-use-share.html</link><pubDate>Fri, 08 Sep 2017 14:29:42 +0000</pubDate><guid>https://lisenhui.cn/tech/azkaban-install-use-share.html</guid><description>&lt;h1 id="背景与介绍"&gt;背景与介绍
&lt;a class="header-anchor" href="#%e8%83%8c%e6%99%af%e4%b8%8e%e4%bb%8b%e7%bb%8d"&gt;&lt;/a&gt;
&lt;/h1&gt;&lt;p&gt;在大数据繁杂的ETL或其它数据处理过程当中，有些任务是需要定时执行的，虽然Linux自带了&lt;code&gt;cron&lt;/code&gt;命令功能，但是仍不能满足最大的一点就是它不能提供集中式的管理和可视化的编辑。其实在大数据的生态当中已集成有个定时调度框架&lt;code&gt;Oozie&lt;/code&gt;，只是实践下来发现其学习成本不低，布署的过程也较复杂。在尝试过其它分布工调度框架后（如阿里的宙斯&lt;code&gt;Zeus&lt;/code&gt;），还是选择了社区较多人使用的&lt;code&gt;Azkaban&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Azkaban3&lt;/code&gt;相对于上个版本所做的更改还是比较大的，感兴趣的话可以到其官方网站
&lt;a href="https://azkaban.github.io/azkaban/docs/latest/" title="Azkaban" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Azkaban
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;了解下。接下来主要还是分享下&lt;code&gt;Azkaban3&lt;/code&gt;的安装布署，下面是&lt;code&gt;Azkaban3&lt;/code&gt;的系统架构设计图：&lt;/p&gt;
&lt;p&gt;&lt;div class="post-img-wrapper"&gt;
 &lt;div class="img-container"&gt;
 &lt;img src="https://lisenhui.cn/imgs/img-lazy-loading.gif" data-src="//imgs.lisenhui.cn/blog/2017/09-08-Azkaban-Install00.png!alias" alt="Azkaban-Install00" title="Azkaban-Install00" /&gt;
 &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;图中的3个组件便是&lt;code&gt;Azkaban3&lt;/code&gt;的重要组成部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MySQL关系数据存储数据&lt;/li&gt;
&lt;li&gt;Web Server GUI管理服务提供者&lt;/li&gt;
&lt;li&gt;Executor Server 分布式节点服务布署&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>使用Github，Travis CI自动布署Hexo博客到Coding，OSChina服务器</title><link>https://lisenhui.cn/tech/use-travis-ci-push-hexo-blog.html</link><pubDate>Sat, 19 Aug 2017 15:40:26 +0000</pubDate><guid>https://lisenhui.cn/tech/use-travis-ci-push-hexo-blog.html</guid><description>&lt;p&gt;通常我们都是在本地用&lt;code&gt;hexo deploy&lt;/code&gt;发布博客文章到远程的Pages服务器，可别忘记了我们是还需要提交代码的，所以是不是觉得有点麻烦还得分开两步进行操作。这时突然想起是否可用&lt;code&gt;Travis CI&lt;/code&gt;工具来完成这个布署的操作呢？答案是肯定的，整体的流程大致如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在本地(又或者Github网站)上编辑文章&lt;/li&gt;
&lt;li&gt;提交文章到Github服务器&lt;/li&gt;
&lt;li&gt;Travis CI收到通知，同步最新的Github代码，并执行用户自定义好的&lt;code&gt;Travis&lt;/code&gt;脚本生成静态博客&lt;/li&gt;
&lt;li&gt;最终再把生成好的博客推送到指定的Pages服务器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只是这其中有点比较麻烦的问题就是如何保护我们的私钥，还好&lt;code&gt;Travis CI&lt;/code&gt;已经为我们准备好啦，那么就开始我们的捣腾之旅吧。&lt;/p&gt;</description></item><item><title>pymssql连接azure云的MSSQL数据库</title><link>https://lisenhui.cn/tech/pymssql-azure-mssql-datasource-connect.html</link><pubDate>Thu, 17 Aug 2017 18:20:18 +0000</pubDate><guid>https://lisenhui.cn/tech/pymssql-azure-mssql-datasource-connect.html</guid><description>&lt;p&gt;码好代码在测试环境做好测试后，满怀信心的去布署上线到生产环境，结果就是一堆的异常，具体查看了后发现是连接数据库的问题，异常信息如下：&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-3"&gt;&lt;a class="lnlinks" href="#hl-0-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-4"&gt;&lt;a class="lnlinks" href="#hl-0-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;(&lt;/span&gt;40532, &lt;span class="s1"&gt;&amp;#39;Cannot open server &amp;#34;1433D&amp;#34; requested by the login. 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;The login failed.DB-Lib error message 20018, severity 20:\n
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;General SQL Server error: Check messages from the SQL Server\n
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>在Mac/Linux系统下安装pymssql模块</title><link>https://lisenhui.cn/tech/mac-install-pymssql-module.html</link><pubDate>Wed, 16 Aug 2017 13:50:55 +0000</pubDate><guid>https://lisenhui.cn/tech/mac-install-pymssql-module.html</guid><description>&lt;p&gt;在非&lt;code&gt;Windows&lt;/code&gt;环境下去访问，连接 MSSQL 数据，本身就是件苦差事来的。自写&lt;code&gt;Python&lt;/code&gt;程序以来在&lt;code&gt;ORM&lt;/code&gt;方面都是使用&lt;code&gt;pyxxx&lt;/code&gt;的模块，果不其然连接 MSSQL 也有个模块叫&lt;code&gt;pymssql&lt;/code&gt;，只是实际使用中并不是特别的顺利。如笔者所处的环境就是如此，开发环境为&lt;code&gt;OSX 10.11&lt;/code&gt;，发布环境为&lt;code&gt;CentOS 6.4&lt;/code&gt;，按官方的安装步骤实行下来，Linux 环境是&lt;code&gt;OK&lt;/code&gt;的，只是 Mac 环境下安装失败，错误的堆栈信息如下：&lt;/p&gt;</description></item><item><title>Hue中集成MySQL数据显示乱码</title><link>https://lisenhui.cn/tech/hue-rdbms-mysql-chinese.html</link><pubDate>Tue, 15 Aug 2017 15:13:39 +0000</pubDate><guid>https://lisenhui.cn/tech/hue-rdbms-mysql-chinese.html</guid><description>&lt;p&gt;Hue is a Web applications that enables you to easily interact with an Hadoop cluster. Hue applications let you browse HDFS, Jobs, run Hive, Pig and Cloudera Impala queries, manage the Hive Metastore, HBase, Sqoop, ZooKeeper, MapReduce jobs, and create and schedule worklows with Oozie.&lt;/p&gt;
&lt;p&gt;更加关于HUE的介绍及演示可访问其官方网站：
&lt;a href="http://gethue.com" title="http://gethue.com" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 http://gethue.com
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Python在命令行即时输出</title><link>https://lisenhui.cn/tech/python-output-conosle-intime.html</link><pubDate>Sun, 13 Aug 2017 14:19:14 +0000</pubDate><guid>https://lisenhui.cn/tech/python-output-conosle-intime.html</guid><description>&lt;p&gt;在程序遇到问题需要DEBUG时，通过会增加一些**&lt;code&gt;print&lt;/code&gt;**语句输出。于是乎按惯例也在&lt;code&gt;Python&lt;/code&gt;的代码中加入print调试，然后输入&lt;code&gt;python xxxx.py&lt;/code&gt;，满怀信心的期待着调试信息的满屏滚动，结果是过了好阵子才显示出来。为何会这样呢？&lt;/p&gt;
&lt;p&gt;根据网友建议增加个&lt;code&gt;-u&lt;/code&gt;参数就OK，后来查了下原因：&lt;code&gt;Python&lt;/code&gt;在默认情况会先把&lt;code&gt;print&lt;/code&gt;输出到缓冲中，待缓冲满或程序后才会输出。所以可以在运行&lt;code&gt;Python&lt;/code&gt;程序时加入此参数是非常的有用。&lt;/p&gt;</description></item><item><title>Python pip中国镜像服务器地址</title><link>https://lisenhui.cn/tech/python-pip-install-chinese-mirror.html</link><pubDate>Fri, 11 Aug 2017 14:17:01 +0000</pubDate><guid>https://lisenhui.cn/tech/python-pip-install-chinese-mirror.html</guid><description>&lt;p&gt;今天在安装一个&lt;code&gt;Python&lt;/code&gt;模块&amp;ndash;&amp;gt;&lt;code&gt;pymysql&lt;/code&gt;结果等待时间特别的长，最后超时失败啦，起初是以为是网络带宽问题，让IT调整后仍是失败，随后尝试查找国内的镜像，还有真人也遇到过相同的问题。镜像列表如下：&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-3"&gt;&lt;a class="lnlinks" href="#hl-0-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-4"&gt;&lt;a class="lnlinks" href="#hl-0-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-5"&gt;&lt;a class="lnlinks" href="#hl-0-5"&gt;5&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-6"&gt;&lt;a class="lnlinks" href="#hl-0-6"&gt;6&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;https://pypi.douban.com/simple/ 豆瓣
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://mirrors.aliyun.com/pypi/simple/ 阿里
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://pypi.hustunique.com/simple/ 华中理工大学
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://pypi.sdutlinux.org/simple/ 山东理工大学
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;https://pypi.tuna.tsinghua.edu.cn/simple 清华&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>使用Hexo重新构建个人博客站点</title><link>https://lisenhui.cn/tech/use-hexo-rebuild-blog-site.html</link><pubDate>Wed, 02 Aug 2017 16:04:35 +0000</pubDate><guid>https://lisenhui.cn/tech/use-hexo-rebuild-blog-site.html</guid><description>&lt;p&gt;其实在&lt;code&gt;Github Page&lt;/code&gt;上面也是混迹许久啦，虽然现在各种Blog网站层出不穷，但是作为IT界的程序猿还是喜欢自己动手捣鼓捣鼓，成功固然是欣喜失败也会不气妥。 &lt;code&gt;Github Page&lt;/code&gt;刚出道时使用的是&lt;code&gt;Jekyll&lt;/code&gt;，简单的解释其实就是一个静态化网站的工具，这不现在又兴起一个名为&lt;code&gt;Hexo&lt;/code&gt;(**&lt;code&gt;Nodejs&lt;/code&gt;**实现)的工具。两者的目标皆是一致的，只不过对比下来发现&lt;code&gt;Hexo&lt;/code&gt;上手确实要容易些，加者它能轻松的在本地实现调试，故有想法想再次折腾一翻，构建个&lt;code&gt;Hexo&lt;/code&gt;版本的个人博客。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;介绍另一款静态网站工具
&lt;a href="https://github.com/wendal/gor" title="Gor" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 &lt;code&gt;Gor&lt;/code&gt;
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;，它是鄙人一直崇拜的大拿
&lt;a href="http://wendal.net/" title="Wendal" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Wendal
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;的杰作，熟悉&lt;code&gt;GO&lt;/code&gt;语言的朋友有可以关注下。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Hexo blog Hello World</title><link>https://lisenhui.cn/tech/hexo-hello-world.html</link><pubDate>Mon, 31 Jul 2017 18:32:53 +0000</pubDate><guid>https://lisenhui.cn/tech/hexo-hello-world.html</guid><description>&lt;p&gt;Welcome to 
&lt;a href="https://hexo.io/" title="Hexo" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 Hexo
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;! This is your very first post. Check 
&lt;a href="https://hexo.io/docs/" title="documentation" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 documentation
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt; for more info. If you get any problems when using Hexo, you can find the answer in 
&lt;a href="https://hexo.io/docs/troubleshooting.html" title="troubleshooting" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 troubleshooting
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt; or you can ask me on 
&lt;a href="https://github.com/hexojs/hexo/issues" title="GitHub" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 GitHub
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>APIDoc自动生成接口文档</title><link>https://lisenhui.cn/tech/nodejs-apidoc-generator.html</link><pubDate>Tue, 18 Jul 2017 15:23:43 +0000</pubDate><guid>https://lisenhui.cn/tech/nodejs-apidoc-generator.html</guid><description>&lt;p&gt;对于项目开发常见的前后端分离模式来说，中间在后端完成接口开发交付对接时，前端人员往往苦于没有接口文档会经常&amp;quot;跑去&amp;quot;骚扰后端人员，真是苦不堪言哪。要是此时有个文档化的说明那就轻松多啦，现在后端流行的文档生成利器有&lt;code&gt;Swagger&lt;/code&gt;，它虽然方便，但是也有弊端得写在的后台的代码中，而且启动整个后台项目才能访问。或许有时还真不太方便的，另外就是项目初期要对接口做个规划也无法用这个方法，难道就没有别的办法了嘛？&lt;/p&gt;</description></item><item><title>Kylin集成Zeppelin展示数据</title><link>https://lisenhui.cn/tech/kylin-integrate-with-zeppelin.html</link><pubDate>Fri, 02 Jun 2017 18:03:23 +0000</pubDate><guid>https://lisenhui.cn/tech/kylin-integrate-with-zeppelin.html</guid><description>&lt;p&gt;实际上kylin自带的WEB UI已经集成了建议的图形报表，有常见的线形，柱形及饼图，用于数据的初步展示是完全够用的。如果要更加丰富的展示，那可以考虑使用别的工具，现在就试试官方推荐的Apache Zeppelin。&lt;/p&gt;</description></item><item><title>Sqoop工具导入数据到Hive小记</title><link>https://lisenhui.cn/tech/sqoop-import-data-to-hive.html</link><pubDate>Wed, 24 May 2017 20:18:53 +0000</pubDate><guid>https://lisenhui.cn/tech/sqoop-import-data-to-hive.html</guid><description>&lt;p&gt;最近正在捣鼓构建数据仓库的事宜，正好有部分维度表的数据需要来自于RDBMS的数据，在HADOOP环境最流行的莫过于Apache的Sqoop工具，按官方的文档操作下来也很顺畅的，不过当要应用到业务场景上时问题便出现了。&lt;/p&gt;</description></item><item><title>Supervisor介绍与使用</title><link>https://lisenhui.cn/tech/linux-daemon-supervisor.html</link><pubDate>Thu, 18 May 2017 07:10:23 +0000</pubDate><guid>https://lisenhui.cn/tech/linux-daemon-supervisor.html</guid><description>&lt;p&gt;很多时候我们自己开发的或别的服务都没有后台的守护进程，那么进程很容易就会被不小心的杀死，此时就需要有个程序去监控和维护这些程序服务。网上搜罗了一番后发现&lt;code&gt;Supervisor&lt;/code&gt;组件正好能实现我们想要的，同时还支持对这些程序的统一管理，Nice!&lt;/p&gt;</description></item><item><title>发布jar到Maven时遭遇gpg签名失败</title><link>https://lisenhui.cn/tech/maven-deploy-center-sign-failed.html</link><pubDate>Wed, 17 May 2017 17:02:23 +0000</pubDate><guid>https://lisenhui.cn/tech/maven-deploy-center-sign-failed.html</guid><description>&lt;p&gt;有许久没维护自己开源的项目了，此次在修复BUG发布时遭遇失败，检查后发现原因是因为gpg签名失败，没办法换了MAC电脑有些操作不熟悉是有点郁闷的。&lt;/p&gt;
&lt;p&gt;关于如何将自己的JAR共享到Maven中央仓库，网上有很多的资源，大家可以自行尝试一下，其实也不难的，完全没必要担心英语的问题。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;分享一个别人整理的GitBook: 
&lt;a href="https://skyao.gitbooks.io/leaning-maven/content/publish/central/" title="发布到中央仓库" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 发布到中央仓库
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Github push失败：Could not resolve hostname</title><link>https://lisenhui.cn/tech/github-push-failed.html</link><pubDate>Tue, 16 May 2017 10:21:43 +0000</pubDate><guid>https://lisenhui.cn/tech/github-push-failed.html</guid><description>&lt;p&gt;平时最常用的git push命令突然间居然不可以用（错误日志如下），脑子首先蹦出的想法就是：难道Github又被墙了么！以前出现过类似这样的现象，需要通过指定hosts来加速访问。&lt;/p&gt;
&lt;p&gt;git push 执行后返回的错误日志：&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt" id="hl-0-1"&gt;&lt;a class="lnlinks" href="#hl-0-1"&gt;1&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-2"&gt;&lt;a class="lnlinks" href="#hl-0-2"&gt;2&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-3"&gt;&lt;a class="lnlinks" href="#hl-0-3"&gt;3&lt;/a&gt;
&lt;/span&gt;&lt;span class="lnt" id="hl-0-4"&gt;&lt;a class="lnlinks" href="#hl-0-4"&gt;4&lt;/a&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh: Could not resolve hostname github.com:elkan1788: nodename nor servname provided, or not known
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fatal: Could not &lt;span class="nb"&gt;read&lt;/span&gt; from remote repository.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please make sure you have the correct access rights&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Zookeeper崩溃后无法加载事务日志</title><link>https://lisenhui.cn/tech/zookeeper-unload-data-exception.html</link><pubDate>Mon, 15 May 2017 12:34:21 +0000</pubDate><guid>https://lisenhui.cn/tech/zookeeper-unload-data-exception.html</guid><description>&lt;p&gt;今天在生产的HDP环境中，遇到一件非常诡异的事情。明明搭建了2台zookeeper集群，却是莫明其妙的不见了，而且HDP服务还不报错，认真的检查过环境还是没有找到异常的信息，真是说不明白了。&lt;/p&gt;
&lt;p&gt;言归正传， 还是说说后面遇的问题吧： 生产环境zookeeper崩溃，查看日志发现是磁盘空间已经写满。起初以为是很简单的操作，删除无用的日志文件释放磁盘空间（这是不得不吐槽下HDP的日志文件是超多的，奈何生产环境又不敢不预留长些的时间），然后重启zookeeper满心欢喜的等待着服务恢复正常。然而这次没有看到成功的提示，异常不断各服务连接zookeeper都失败了。这时真的是郁闷了，空间明明已经是充足的。异常信息如下：&lt;/p&gt;</description></item><item><title>离线安装HDP2.6(1)-Ambari Server</title><link>https://lisenhui.cn/tech/offline-install-hdp-ambari-notes.html</link><pubDate>Mon, 17 Apr 2017 19:52:31 +0000</pubDate><guid>https://lisenhui.cn/tech/offline-install-hdp-ambari-notes.html</guid><description>&lt;h2 id="1参考文档"&gt;1.参考文档
&lt;a class="header-anchor" href="#1%e5%8f%82%e8%80%83%e6%96%87%e6%a1%a3"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;FYI: 
&lt;a href="https://docs.hortonworks.com/HDPDocuments/Ambari-2.5.0.3/bk_ambari-installation/content/ch_Getting_Ready.html" title="HDP Install Documents" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 HDP Install Documents
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.0/bk_command-line-installation/content/prepare-environment.html#ref-2822d0e9-bd88-4714-910a-750c5b95a996" title="HDP Install Manual" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 HDP Install Manual
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Linux使用SSH免密码登录</title><link>https://lisenhui.cn/tech/ssh-login-without-password.html</link><pubDate>Sun, 29 May 2016 12:34:21 +0000</pubDate><guid>https://lisenhui.cn/tech/ssh-login-without-password.html</guid><description>&lt;p&gt;现在分布式集群非常的流行, 经常在不同的机器上面切换来回那是家常便饭. 如果每次切换都需要输入用户名与密码, 那就是要崩溃的节奏啊. 好在&lt;code&gt;SSH-KEY&lt;/code&gt;给我们提供了便利, 只要在&lt;code&gt;master&lt;/code&gt;生成一个&lt;code&gt;PUB_KEY&lt;/code&gt;, 然后拷贝到&lt;code&gt;clusters&lt;/code&gt;中, 以后便可以直接使用&lt;code&gt;ssh hostname&lt;/code&gt;即能快速,方便的切换到需要操作的机器上面.&lt;/p&gt;</description></item><item><title>Git 操作命令收集</title><link>https://lisenhui.cn/tech/git-commands-collect.html</link><pubDate>Fri, 29 Jan 2016 12:34:21 +0000</pubDate><guid>https://lisenhui.cn/tech/git-commands-collect.html</guid><description>&lt;p&gt;都说好性不如烂笔头, 一点也没有错呀. 虽然学习Git已经有1个多年头, 但是有些时候那比较少用的命令总是一时想不起来.所以还是决定把它写到blog里面, 不仅把经验分享出去, 而且也便于自己查找, 此博文会持续累加.&lt;/p&gt;</description></item><item><title>mpsdk4j的点滴记录--MPAccount</title><link>https://lisenhui.cn/tech/mpsdk4j-intro-mapaccount.html</link><pubDate>Sat, 23 Jan 2016 16:08:32 +0000</pubDate><guid>https://lisenhui.cn/tech/mpsdk4j-intro-mapaccount.html</guid><description>&lt;p&gt;&lt;code&gt;mpsdk4j&lt;/code&gt;是在实际的生产项目中抽离出来的开源分享项目,它的成长至今也算是有不少的经历吧, 最近一直忙于工作与生活上的事情疏忽了对它的关心. 自去年下决心对它重构并建立了QQ交流群(
&lt;a href="http://jq.qq.com/?_wv=1027&amp;amp;k=dPDLxk" title="486192816" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 486192816
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;)后, 逐渐的有不业界朋友前来关注, 在此非常感谢他们的支持. 都说用过方知其好, 可实际情况确不是这么乐观呀,在大家的使用过程中发现&lt;code&gt;mpsdk4j&lt;/code&gt;有不少欠缺与不足的地方. 之前一直想在元旦发布的2.b.1版本也拖延至今还没有交工, 在此对大家说声抱歉, 以后定会嘉勉.下面还是先进入此次的主题&amp;ndash;初识&lt;code&gt;mpsdk4j&lt;/code&gt;之&lt;code&gt;MPAccount&lt;/code&gt;. (注: 对于有微信开发基础与项目经验的可略过)&lt;/p&gt;</description></item><item><title>MapDB 同步读写示例</title><link>https://lisenhui.cn/tech/mapdb-write-read-sync.html</link><pubDate>Tue, 19 Jan 2016 21:11:20 +0000</pubDate><guid>https://lisenhui.cn/tech/mapdb-write-read-sync.html</guid><description>&lt;p&gt;MapDB 是一个快速、易用的嵌入式Java数据库引擎. 最主要的特点之一就是支持磁盘存储,直接把内存中的Hash Map同步写入到磁盘. 另外特别惊喜的是它支持ACID事务,MVCC隔离, 且有全职的开发者支持.&lt;/p&gt;
&lt;p&gt;看完官方的文档与示例后,基本上可以确定它符合业务场景的使用要求.另外发现官方正在重构3.x的版本, 但应该不会这么快发布吧.用google搜索了下关于MapDB的使用案例, 也不是很多. 可能是本来官方的文档就齐全有关吧,API也不复杂,跟着官方的文档走一遍就可以上手了.&lt;/p&gt;</description></item><item><title>Redis 安装与配置</title><link>https://lisenhui.cn/tech/redis-install-settings.html</link><pubDate>Mon, 29 Jun 2015 12:34:21 +0000</pubDate><guid>https://lisenhui.cn/tech/redis-install-settings.html</guid><description>&lt;p&gt;&lt;code&gt;Redis&lt;/code&gt; 是一款依据&lt;code&gt;BSD&lt;/code&gt;开源协议发行的高性能&lt;code&gt;Key-Value&lt;/code&gt;存储系统（&lt;code&gt;cache and store&lt;/code&gt;）。它通常被称为数据结构服务器，因为值（&lt;code&gt;value&lt;/code&gt;）可以是 字符串(&lt;code&gt;String&lt;/code&gt;), 哈希(&lt;code&gt;Map&lt;/code&gt;), 列表(&lt;code&gt;list&lt;/code&gt;), 集合(&lt;code&gt;sets&lt;/code&gt;) 和 有序集合(&lt;code&gt;sorted sets&lt;/code&gt;)等类型。&lt;code&gt;Redis&lt;/code&gt;的所有数据都是保存在内存中，然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”)；也可以把每一次数据变化都写入到一个&lt;code&gt;append only file&lt;/code&gt;(&lt;code&gt;aof&lt;/code&gt;)里面(这称为“全持久化模式”)。

&lt;a href="http://www.redis.cn/topics/introduction.html" title="更多介绍" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 更多介绍
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Nutz源码Jdoc在IDE中补全提示时出现乱码解决办法</title><link>https://lisenhui.cn/tech/nutz-jdoc-chinese.html</link><pubDate>Fri, 20 Apr 2012 19:11:20 +0000</pubDate><guid>https://lisenhui.cn/tech/nutz-jdoc-chinese.html</guid><description>&lt;p&gt;接触Nutz也有一段时间，随着对它使用的不断深入了解，才越发觉它的强悍与作者的设计巧妙，特别喜欢它那个JUnit测试报告，而且更新的速度也挺快的，到现在的1.b.44版本，ssh所拥有的功能可以说它也已经完全具备了。对于程序员来说学习一种新技术最快捷的办法就是Demo+API，这两样也是必备之需哪。Nutz在这方面做的也是相当的不错，比如在Demo方面有人贡献出了整个CMS的源码(非常感谢作者的分享哪，从里面学习了不少知识)，API方面提供了常见的CHM格式和JAR包。不过这个JAR的API在实现应用中却是出了点小问题，下面就来详细说说。&lt;/p&gt;</description></item><item><title>Java程序与RSR232串口通讯小练手</title><link>https://lisenhui.cn/tech/java-hard-rsr232.html</link><pubDate>Sat, 24 Mar 2012 22:21:20 +0000</pubDate><guid>https://lisenhui.cn/tech/java-hard-rsr232.html</guid><description>&lt;p&gt;一直以来都是在学习J2EE方面的应用系统开发，从未想过用JAVA来编写硬件交互程序，不过自己就是喜欢尝试一些未曾接触的新东西。在网上搜索了些资源，了解到JAVA写串口通讯的还是蛮多的，那么便着手准备开发调试环境。软件程序开发环境搭建不成问题，可这硬件环境就有点犯难啦。更何况自己用的是笔记本哪来的串口呀，再说要是真拿这串口硬件来自己也不会弄，随即想到了虚拟机，觉得这东西应该也有虚拟的吧，果真跟自己的猜测一样还真有这东西，顺便也下载了个串口小助手做为调试之用。&lt;/p&gt;</description></item><item><title>国内技术强强联手之Nutz+KindEditor+LHGDialog+My97DatePicker</title><link>https://lisenhui.cn/tech/nutz-ke-lhg-my97.html</link><pubDate>Fri, 13 Jan 2012 10:21:20 +0000</pubDate><guid>https://lisenhui.cn/tech/nutz-ke-lhg-my97.html</guid><description>&lt;p&gt;有段时间没关注过国内IT技术发展情况了，前些天在学习国内的一个开源技术&lt;code&gt;Nutz&lt;/code&gt;时想练个手，但一时又不知写些什么好，想了一会还是选择了自己的“老友”&lt;code&gt;KindEditor&lt;/code&gt;。对它虽不敢说是透彻的了解(个人的JS水平有限，呵~)，但至少也能很熟练的运用。官网很早便推出了大家期待已久的&lt;code&gt;KE4&lt;/code&gt;，不过我一起都没有更新，正好这次拿它来历练下，嘻~。可是想到前面写的那些&lt;code&gt;KE&lt;/code&gt;应用示例都是单调的，上次的那个还好有&lt;code&gt;EasyUI&lt;/code&gt;做衬托，不过这个UI框架对于小小于的练手项目来说还是庞大了点。于是又便开始寻思着找别的UI看看，突然间起了以前用过的&lt;code&gt;LHGDialog&lt;/code&gt;弹出窗口组件还蛮不错的，便去它官网逛了一圈。没有想到还真是让人喜出望外呀，&lt;code&gt;LHG&lt;/code&gt;现也更新为4的版本了，那效果的炫丽真是让人颇然心动。下面就先来欣赏下花费2个多小时的劳动成果吧（现在是真相时间），呵呵……&lt;/p&gt;</description></item><item><title>IP地址查询Web接口调用</title><link>https://lisenhui.cn/tech/whosip-tool.html</link><pubDate>Fri, 18 Nov 2011 10:21:20 +0000</pubDate><guid>https://lisenhui.cn/tech/whosip-tool.html</guid><description>&lt;p&gt;今天刚好有个站点上要用到一个IP地址显示的功能，随即便想想应该有免费的接口可用吧，百度一下找到了太平洋网站提供的API，那么接下来便是Code Time。&lt;/p&gt;
&lt;p&gt;看完了它的参数说明和调用方式后，选择了其中的jsFunction方式，现在把经验分享出来给大家参考，具体的代码和效果如下：：&lt;/p&gt;</description></item><item><title>JSP版本的KindEidtor在线编辑器第二季：Servlet+Struts2集成版</title><link>https://lisenhui.cn/tech/kindeditor-jsp-struts2-servlet.html</link><pubDate>Mon, 17 Oct 2011 22:10:20 +0000</pubDate><guid>https://lisenhui.cn/tech/kindeditor-jsp-struts2-servlet.html</guid><description>&lt;p&gt;前段时间我在论坛上发布了一篇名为
&lt;a href="http://elkan1788.github.io/OnlineEditor/2011-03-24/kindeditor-jsp-complete.html" title="《JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能)》" rel="noopener external nofollow noreferrer" target="_blank" class=" exturl"&gt;
 《JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能)》
 
 &lt;i class="fa fa-external-link-alt"&gt;&lt;/i&gt;
 
&lt;/a&gt;得到了大家的积极响应，不过令我觉得有点遗憾的是，有很多人都不是真的讨论技术问题，而是向我索取源码，说实在的自已的劳动成果就这样白白奉献出来，觉得有点对不起自己了，要知道我们国内的技术员都是没有金钱后盾啊。唉，最近都太忙了就没有怎么太在意这件事，今晚刚好有空过来看看。看了那么多人留下的印记后，觉得自己也应该要无私一下才是吧，咱老毛说的对：要像雷锋同志学习，呵呵…… 其实在上面我已经说过了，这个JAR里面的功能我只是把官网的JSP代码改编而已，废话就先不多说了，下面直接上码吧，可要接稳了哦。&lt;/p&gt;</description></item><item><title>MyEclipse6.5+ IDE汉化软件</title><link>https://lisenhui.cn/tech/myeclipse-chinese-tool.html</link><pubDate>Mon, 16 May 2011 13:28:20 +0000</pubDate><guid>https://lisenhui.cn/tech/myeclipse-chinese-tool.html</guid><description>&lt;p&gt;世界上的语言与文字都有千百万种，但始终还是觉得我们的方块汉字比较好看且比较有内涵。而在计算机领域一直都是被国外主宰，所以很多计算机上的程序都是英文版的，有时候用起来还真是不太方便的，于是便出现了一大批汉化版的程序，这些程序都受到了国人的偏爱。&lt;/p&gt;</description></item><item><title>开放JSP版KindEditor的附件JAR包源码</title><link>https://lisenhui.cn/tech/kindeditor-jsp-source.html</link><pubDate>Thu, 05 May 2011 09:32:12 +0000</pubDate><guid>https://lisenhui.cn/tech/kindeditor-jsp-source.html</guid><description>&lt;p&gt;3月份的时候写了个JSP版本的kindeditor编辑器的帖子，没有想到大家的响应会这么强烈。不过随着日月的增长，此版本的插件也就暴露出一些BUG，如：Struts2如何集成，web.xml文件中配置上传属性不便修改且繁琐，上传图片(附件)不能保存于其它盘…………。现在平时开发的项目中都是使用KE作为在线编辑器，为了能更好、更方便的使用此编辑器，在休息的时间对原先的代码进行重构再封装，除对上个版本出现的BUG进行外，还统一整体的命名规范，新增了一些功能。&lt;/p&gt;</description></item><item><title>JSP版的完善KindEditor在线编辑器(带附件上传与图片按日期分类管理功能)</title><link>https://lisenhui.cn/tech/kindeditor-jsp-complete.html</link><pubDate>Thu, 24 Mar 2011 21:17:53 +0000</pubDate><guid>https://lisenhui.cn/tech/kindeditor-jsp-complete.html</guid><description>&lt;p&gt;在此之前我一直都是在用FCKEditor在线编辑器，当然也有用过其它在线编辑器如eWebEditor,tinyMCE,CuteEditor，jHtmlArea等等，但在最终项目发布的时候并没有采用它们，因为它们要不是皮肤呆板，就是配置太烦琐，或是功能太少、浏览器兼容性不好等等。去年一个偶然的机会让我认识了KindEditor这款在线编辑器，正如它的名字那样这是款友好的编辑器，它不仅体积小配置简单，而且功能与皮肤也是令人相当的振憾。还有个很重要的因素，它是我们国人的开发的免费工具，从产品发布至今更新脚步未曾停止哦。下面就会大家介绍下经过我完善后的KindEditor吧。&lt;/p&gt;</description></item><item><title>关于Struts2与Jquery实现无刷新分页的不解问题</title><link>https://lisenhui.cn/tech/jquery-ajax-struts2.html</link><pubDate>Wed, 03 Nov 2010 00:00:00 +0000</pubDate><guid>https://lisenhui.cn/tech/jquery-ajax-struts2.html</guid><description>&lt;p&gt;我最近正在做一个无刷新的网站管理后台，并把它作为我的毕业设计主题，不过在代码实现上遇到了点小问题，想向大家请教一二。我的设计思路大概是这样的：将后台所生成的数据用JSON的格式输出，在前台借助JQUERY的AJAX功能将传过来的数据写出。这样的方式在实现数据的增、改、删功能上并不会很难，不过在数据的查询方面便麻烦了，如何实现数据的无刷新分页呢？我查阅网上一些网友的做法，不过普遍发现他们的代码有点繁琐也不符合我设计初衷。通过查看JQUERY的API我自己想出了一种可行的方案(目前已经实现部分功能)：在查询的页面中先创建一个无数据的表格样式，通过JQUERY的CLONE功 能在查询数据时复制这个表格的样式同时将后台传过的数据填充其中和移除那行无数据的样式表格。&lt;/p&gt;</description></item><item><title>JQuery+Strusts1.x实现Ajax无刷新登录</title><link>https://lisenhui.cn/tech/jquery-ajax-struts1.html</link><pubDate>Sun, 05 Sep 2010 10:11:53 +0000</pubDate><guid>https://lisenhui.cn/tech/jquery-ajax-struts1.html</guid><description>&lt;p&gt;在当今技术发展日益成熟，人们除了追求技术创新与发展外，更多也关注到了与用户交互的便利性方面上。当程序员还在为前后数据交互刷新问题困惑时，AJAX 问世了，它以方便快捷的优越性博得了广大程序员的追捧。经过几年的发展，它也渐渐成为我们开发中必不可少的一件利器，下面我就来讲个Struts1 &lt;code&gt;+&lt;/code&gt; Ajax的登录示例。&lt;/p&gt;</description></item></channel></rss>