crontab 定时任务

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

分 时 日 月 星期 要运行的命令

向cron进程提交一个crontab文件之前,首先要设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$HOME目录下的. profile文件,在其中加入这样一行

然后保存并退出。不妨创建一个名为 cron的文件,其中是用户名,例如, davecron。在该文件中加入如下的内容。

保存并退出。注意前面5个域用空格分隔。

在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为cron命令的参数

现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。

使用-l参数列出crontab文件

可以使用这种方法在$HOME目录中对crontab文件做一备份

这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。

如果希望添加、删除或编辑crontab文件中的条目,而EDITOR环境变量又设置为vi,那么就可以用vi来编辑crontab文件

保存并退出。

阅读全文

Ubuntu 上安装 Weblate

首先安装必要的依赖:

然后就到了安装 Weblate 的步骤,pip 是 python 世界的 Composer,requirements.txt 就是 composer.json

创建数据库。官方文档没说 charset 的设置,而 Weblate 在创建表的时候是不指定 charset 的,很有可能表创建好的时候charset 是 lantin1 导致翻译中文的时候,中文进不了库,特别坑

weblate/settings_example.py 其实就是 app/config/parameters.yml.dist

设置一下数据库

以及 Time zone 设置,这就不多说了。

接下来是 UWSGI 的设置。UWSGI 是类似 PHP-FPM 的服务,设置也差不多:

Nginx 的设置,完全官网配置:

创建数据库表结构,类似 doctrine:schema:create 命令;然后还需要初始化一下 locales,相当于导入默认语言分类数据到库

这也是比较坑的一点,官网文档也没说,虽然不知道这个 Whoosh 目录是干嘛的,而且看上去不太可能这么蠢Weblate 不会自动创建,但是 Weblate 就真的等着你去创建这个目录。

这个时候,就可以启动 weblate 项目了,当然,一定要注意文件权限的问题!!

如果不出意外,访问 localhost 应该可以看到 Weblate 的界面了:

screenshot weblate

然后咱们去后台创建翻译项目。不过目前后台还没有帐号呢,我们先来创建一个超级帐号:

输入完帐号、密码、邮箱后,登录到后台。

按照官方文档的指导,点击 project 后点右上角的新增按钮。不用多说了,输入内容一看就明白。

阅读全文

LearnOpenGL中文教程

Attention

由于网站的改版,本教程现在迁移至:https://learnopengl-cn.github.io/。 这个网站仍然会有无规律的更新,但是大体上是不再维护了。如果要阅读最新版本的教程,还请访问以上地址。

This site has been moved to https://learnopengl-cn.github.io/.

欢迎来到OpenGL的世界。这个工程只是我(JoeyDeVries)的一次小小的尝试,希望能够建立起一个完善的OpenGL教学平台。无论你学习OpenGL是为了学业,找工作,或仅仅是因为兴趣,这个网站都将能够教会你现代(Core-profile) OpenGL的基础,中级,以及高级知识。LearnOpenGL的目标是使用易于理解的形式,使用清晰的例子,展现现代OpenGL的所有知识点,与此同时为以后的学习提供有用的参考。

Image of smiling textured containers in OpenGL

在互联网上,关于学习OpenGL的有成千上万的文档与资源,然而其中大部分的资源仅仅讨论了OpenGL的立即渲染模式(Immediate Mode,通常会说旧OpenGL),亦或是不完整,缺少适当的文档,或仅仅不适合你的口味。所以我的目标是提供一个既完整,又易懂的平台供人们学习。

阅读全文

OpenGL ES, 初学者的自我总结

学习 OpenGL ES 一段时间了,深知这个过程的不容易

尤其是入门,OpenGL 到底好在哪里?什么是渲染管线?什么是状态机?纹理是不是就是图片?深度测试,模版测试又是什么鬼?…

OpenGL 有太多太多的东西需要学习。我最初接触 OpenGL,就是想借助它,实现美图秀秀里的一些功能。然而,不知道看了多少教程,实现了多少个旋转立方体,困惑了多少次,放弃了多少回…

慢慢地,似乎找到了一些门路…

于是,这系列的文章应运而生。

这系列文章主要是个人学习过程中的一些总结,因为本人也是初学者,所以会从初学者角度,介绍 OpenGL ES 图像处理最直接的一些知识。

利用 OpenGL ES,学习如何在 iOS 平台上进行图像处理,实现各种效果。

这,就是我想学到的,也是想分享给大家的。

PS:时间允许的话,希望能保证一个星期输出一篇文章,鞭策自己~

敬请期待

PS:这里将罗列个人学习过程中,认为好的一些书籍,教程,Demo等。

该系列的文章中,一些阐述,配图,可能是从其它文章或者书籍中摘录整理的。为保证阅读以及书写方便,这部分出处说明统一放到学习资料里。

本人也处于学习阶段,精力有限,难免引用前人优秀教程。如果对您造成不必要的麻烦,请及时告知。

OpenGL ES 2.0 API 快速参考卡片

红宝书:OpenGL Programming Guide

蓝宝书:OpenGL Superbible

阅读全文

OpenGL 图形库的使用(下)

我们在OpenGL中大量使用缓冲来储存数据已经有很长时间了。操作缓冲其实还有更有意思的方式,而且使用纹理将大量数据传入着色器也有更有趣的方法。这一节中,我们将讨论一些更有意思的缓冲函数,以及我们该如何使用纹理对象来储存大量的数据(纹理的部分还没有完成)。

OpenGL中的缓冲只是一个管理特定内存块的对象,没有其它更多的功能了。在我们将它绑定到一个缓冲目标(Buffer Target)时,我们才赋予了其意义。当我们绑定一个缓冲到GL_ARRAY_BUFFER时,它就是一个顶点数组缓冲,但我们也可以很容易地将其绑定到GL_ELEMENT_ARRAY_BUFFER。OpenGL内部会为每个目标储存一个缓冲,并且会根据目标的不同,以不同的方式处理缓冲。

到目前为止,我们一直是调用glBufferData函数来填充缓冲对象所管理的内存,这个函数会分配一块内存,并将数据添加到这块内存中。如果我们将它的data参数设置为NULL,那么这个函数将只会分配内存,但不进行填充。这在我们需要预留(Reserve)特定大小的内存,之后回到这个缓冲一点一点填充的时候会很有用。

除了使用一次函数调用填充整个缓冲之外,我们也可以使用glBufferSubData,填充缓冲的特定区域。这个函数需要一个缓冲目标、一个偏移量、数据的大小和数据本身作为它的参数。这个函数不同的地方在于,我们可以提供一个偏移量,指定从何处开始填充这个缓冲。这能够让我们插入或者更新缓冲内存的某一部分。要注意的是,缓冲需要有足够的已分配内存,所以对一个缓冲调用glBufferSubData之前必须要先调用glBufferData

阅读全文