霖博客

生活如此多娇

下载七牛云空间所有文件

由于七牛空间自带的域名不支持 https, 因此打算放弃七牛静态空间托管加速。 那么问题来了,如何把之前存在七牛空间中的文件迁移出来呢? 两年前博客搬家时发现一个七牛管理工具,但是貌似现在已经不能用了。 不过没有什么问题可以难倒一个 Java Coder. 翻了一下七牛开发者文档,果然找到了 Java 的 SDK, 只需几行代码就可以把所有文件都下载下来,哈哈。
Read the full story

自己实现一个 Mini MVC 框架

上回说到自己实现一个 Mini IoC 容器,有了一个依赖注入的容器,如果不尝试用于 Web 应用那岂不是没什么用。因此我们可以试着在 Mini IoC 的基础上,实现一个 Spring MVC Style 的简单 MVC 框架。 同样,先给出我们希望怎么使用这个的框架的代码,然后再一步步实现我们想要的写法:

用法

@Controller
public class UserController {
    private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
    @Resource
    private UserService userService;

    @URL(value = {"/", "/index"}, method = {HttpMethod.GET, HttpMethod.POST})
    public String list(Map<String, Object> map) {
        map.put("userList", userService.listUsers());
        return "list";
    }

    @URL("home")
    public String home() {
        return "forward:/";
    }

    @URL(value = "/add", method = HttpMethod.GET)
    public String addPage() {
        return "add";
    }

    @URL(value = "/add", method = HttpMethod.POST)
    public String addUser(Map<String, String> map, @Param("name") String name) {
        //String name = map.get("name");  // map 里有所有参数 或者从方法中标有 @Param 的参数获取
        String email = map.get("email");
        String note = map.get("note");
        if (name == null || email == null) {
            map.put("error", "用户名及电子邮件是必填项");  // map 还充当返回结果的 Model 的角色
            return "add";
        }
        User user = new User().setName(name).setEmail(email).setNote(note);
        userService.saveUser(user);
        return "redirect:/";
    }
     // ... 
}
Read the full story

自己实现一个 Mini IoC 容器

前言

IoC(Inversion of Control,控制反转)将对象的生成、设置等行为交给容器来完成,而不是由开发者自己编写 new, setXxx 等语句控制。其中最常见的实现方式是 Spring 的依赖注入(Dependency Injection, DI),如有个类 A, 其中一个字段是 B(带有注解 @Resource 或 @AutoWired ),那么容器会自动先查找一个 B 再注入到 A 的这个字段中(查找过程中可能会发现 B 也需要注入一个 C, 这些容器都会帮你完成)。 通常控制反转和依赖注入可以等同起来,我这里用 IoC 这个名称是因为它看起来比较好看——以上是我随便说的,说错了请指正…… 于是我们可以自己实现一个 IoC 容器吗?虽然 Spring 已经做得足够好了,但我就是闲得蛋疼(并不闲,每天加班到九点)特别想自己试试怎么实现可以吗?——当然可以,毕竟我还是一个爱学习的好孩子。
Read the full story

各平台桌面提示通知

背景

每天上班都是一整天坐在工位盯着电脑,时间长了眼睛都要瞎了……

需求

每隔一段时间提醒下自己休息一下眼睛,放松一下,上个厕所走动一下~

实现

隔一段时间干某事,这个好办,*nix 下使用 crontab 即可,Windows 貌似也可以通过计划任务实现。 然而提醒功能该怎么办呢?
Read the full story

通过 Nginx 实现在手机上播放电脑中的视频

这两天在学校看剧,由于是 BT 资源,就把整个剧集下载了,但是坐着看看累了,想躺着看。立即想到在电脑上搭建个 Web 服务器,然后开热点,用手机连接热点,打开视频播放。 涉及到:
  • Nginx 的安装与基本配置
  • 符号链接
  • Nginx 打开目录索引(支持中文名)
  • Nginx 403 Forbidden 权限问题
  • 本地可以访问,其他机器不能访问
Read the full story

Nginx 简单使用

安装

sudo apt install nginx-full 如果之前安装过 apache2, 建议先卸载掉…… 如果没有意外的话,打开 http://localhost/ 就可以看到默认欢迎页了。

配置

安装后配置文件都在 /etc/nginx 下。打开 nginx.conf 可以看到,会把 conf.d 文件夹下所有的 *.conf 文件都包含进来。因此我们可以把自定义配置文件放在 conf.d 目录下。 这里假设我们需要配置一个域名:youthlin.local, 于是我在 conf.d 目录下新建一个文件 youthlin.local.conf, 文件名任意,conf 结尾就行。然后键入内容:
Read the full story

使用 JS 预览 Markdown

一直使用「马克飞象」写 Markdown, 后来发现了个 Showndown.js 可以渲染 Markdown, 于是就搜了下用法做出了初版一个小网页用来给自己渲染 Markdown 玩玩。不过,后来发现几个瑕疵点,换行对中文不友好,设为 GitHub Flavour 后行尾俩空格就应该是换行,但是这一行有中文的话就不会识别,因此最后找了个替代: marked.js. (还支持代码高亮哦) 贴出代码:
Read the full story