原创文章

使用systemd

systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序,现在已成为大多数发行版的标准配置。
历史上,Linux 的启动一直采用init用于管理进程和服务。这种方法有两个缺点:一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程;二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。因此Systemd应运而生,Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),为系统的启动和管理提供一套完整的解决方案。
根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。

创建配置文件

在[crayon-5adcff7626249062266409-i/]创建一个以[crayon-5adcff7626250187509639-i/]结尾的文件。例如[crayon-5adcff7626253029395273-i/][crayon-5adcff7626254133516839/](更多…)

Frank
原创文章

Padavan路由器安装Time Machine服务器

此前我的路由器一直使用OpenWrt。但是,近日在OpenWrt中继配置万能的过程中遇到了一系列问题后,了解到了Padavan这个固件。Padavan固件的功能十分强大,可以实现包括但不限于文件共享,Aria,Transmission,Web容器,Time Machine等强大功能。
源代码:padavan / rt-n56u — Bitbucket
论坛发布页:http://www.right.com.cn/forum/thread-161324-1-1.html

准备工作

  • 一台已经刷入Padavan固件的路由器,并妥善设置opt环境。设置opt环境请参考:像openwrt一样装更多的软件
  • 一块移动硬盘,格式化为ext4(虽然Padavan可以识别NTFS和exFAT分区,但是后期会引发一系列问题,所以请务必使用ext4)
  • 进入系统管理,修改管理员账号为[crayon-5adcff7626570801521230-i/]
(更多…)

Frank
原创文章

macOS High Sierra安装Caffe框架

英特尔杯人工智能挑战赛需要用到Caffe深度学习框架。Caffe框架在macOS上需要手动编译,然而官方的安装教程年久失修,并且编译过程中会遇到由不同版本或环境而引发的问题,我历时三天,踩了无数的坑之后,终于成功安装了Caffe框架。在此记录下安装的过程和遇到的错误,希望对你有所帮助。

系统环境及安装配置

  • Macbook Air 13' macOS High Sierra
  • Homebrew
  • Xcode
  • Miniconda Python2(Caffe建议使用Anaconda Python,另外我在尝试使用Python3编译Caffe时遇到了未知的错误,因此建议使用Python2.7)
  • openBLAS(Intel的MKL库会提供更高性能且更稳定的计算,在校学生可以通过这里申请:Intel® Math Kernel Library (Intel® MKL) | Intel® Software
  • CPU ONLY模式(MacBook Air没有NVIDIA GPU,因此使用CPU ONLY模式,不需要安装CUDA及cuDNN) (更多…)

Frank
原创文章

MySQL 权限管理

前段时间,我班有两个人的MySQL数据库被攻破,所有数据被清空。他们的MySQL实例有两个共同点:

  1. 暴露3306端口。
  2. 使用root用户登录且为弱密码。
MySQL的root用户权限过大,使用root登录是较危险的。因此我们应当避免在生产环境使用root登录,而是新建一个权限较小的用户,以确保安全。 (更多…)

Frank
原创文章

使用蓝图(Blueprint)组织Flask应用

在一些重量级Web框架中(如Laravel/Django),框架中已经预置了整个框架的目录结构,在没有特殊需求的情况下通常不会改变它。在Flask这类轻量级框架中,理论上你可以把一个项目的全部代码都放进一个.py文件中。然而一旦项目规模稍大,就会变得庞大而难以管理。这时,我们需要蓝图(Blueprint)来帮助我们管理代码结构。

蓝图

什么是蓝图

Flask用蓝图(blueprints) 的概念来在一个应用中或跨应用制作应用组件和支持通用的模式。蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。一个 Blueprint 对象与 Flask 应用对象的工作方式很像,但它确实不是一个应用,而是一个描述如何构建或扩展应用的蓝图 。
简而言之,我们可以将蓝图理解为Flask应用中的一个模块。(更多…)

Frank
原创文章

记第六届中国软件杯决赛

经过7月份的初赛,我们成功晋级了中国软件杯的决赛。9月4号,我们启程前往南京参加决赛。
关于比赛:大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办
我们的赛题:安全可靠赛题2:分布式爬虫系统 - 六届赛题 - 大学生软件设计大赛官方网站—中国软件杯全国大学生软件设计大赛组委会主办

第一天 签到

9月4号,正好是学校开学第一天,我们一大早出发前往南京。第一周的课就先翘为敬了。
我们的车次是刚上线运行不久的复兴号,有车载WiFi,看了下IP应该是移动的4G,速度很良心。而且小桌板比和谐号更大,简直是为了车上赶代码量身定制的(误。 (更多…)

Frank
原创文章

使用nginx unit部署微服务

前端时间,nginx发布了nginx unit。NGINX Unit 是一个动态的网络应用服务器,它被设计为可运行多种编程语言的。通过API可以轻巧,多面化的动态配置Unit。目前为止nginx unit支持php,python以及go。其他语言如java,javascript等语言尚未提供支持。
有了nginx unit,我们就可以不用配置繁琐的php-fpm和uwsgi,只需要一个json文件即可部署一个微服务。
NGINX Unit 现在是beta版本。你现在虽然可以使用它,但建议仅用于测试环境,不建议用于生产环境。
GitHub:https://github.com/nginx/unit/
中文文档:https://github.com/tuzimoe/unit/blob/master/README_zh-Hans.md
下面我们使用nginx unit部署一个django项目,以hyriamb/nem-downloader: django网易云音乐下载器,适用于新版api为例。(更多…)

Frank
原创文章

使用Jenkins持续集成Java应用

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件持续集成。 在这学期的软件工程课设中,我们使用Jenkins持续构建、测试及部署一个Spring Boot应用。

安装Jenkins

在安装之前请确保已经安装了JDK和maven。 安装Jenkins有两种方法,一种是从官网下载打包好的.war包;或通过apt等包管理器安装。我的系统是Debian8,安装过程参考这篇文章即可,本文不再赘述。 How To Install Jenkins on Ubuntu 16.04 | DigitalOcean (更多…)

Frank
原创文章

使用Laravel和jwt-auth编写API

JSON Web Token(JWT)是一个轻量级的认证规范,它允许用户和服务器之间传递安全可靠的信息。

在传统的web应用中,服务端成功的返回一个响应于两件事。其一是通过一种存储机制保存会话信息(Session)。每一个会话都有它独特的信息,常常是一个长的,随机化的字符串,它被用来让未来的请求检索信息。其次,包含在响应头里面的信息使客户端保存了一个Cookie。服务器自动的在每个子请求里面加上了会话ID,这使得服务器可以通过检索Session中的信息来辨别用户。 API应该被设计成无状态的。这意味着没有登录,注销的方法,也没有session和cookie。因此,我们引入jwt。
(更多…)

Frank
原创文章

Python异步任务队列

在开发的过程中,有时会需要用到类似下面的这些操作

  • 用户注册时发送认证邮件
  • 带有Web界面的爬虫
  • 定时计划任务
这些任务的共同特点是执行所需的时间较长,但是我们又不希望其阻塞后续的操作。因此我们将这些任务放进任务队列里来运行。Python常见的异步任务队列实现有功能较丰富的Celery和轻量级的RQ,本文以celery为例。Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统。 Celery经常和RabbitMQ同时提起,但实际上,RabbitMQ和celery并不是同一层面的东西。Celery需要存储介质来存储任务(称为broker),可选的broker有RabbitMQ, redis, mysql, mongodb等。 (更多…)

Frank