今日(きょう)(さわ)がしく(たわむ)れ生きる人々の漫画映画(まんがえいが)

LibGDX?

安装

一些兼容配置

(写作时的 LibGDX 版本为 1.9.10.1)

Android

IntelliJ

我使用的是 IntelliJ ,针对 Android 平台有一个选项可能需要更改:

-> 左上角 File -> Langauges & Frameworks -> Android (experimental) -> Gradle -> Only sync the active variant

Only sync the active variant 这个选项取消勾选。

Android SDK 31

https://stackoverflow.com/questions/68387270/android-studio-error-installed-build-tools-revision-31-0-0-is-corrupted

我用的是 ArchLinux-CN 源的 SDK,安装在 /opt/android-sdk 目录下,可以这样解决 dx 程序缺失的问题:

$ sudo ln -s /opt/android-sdk/build-tools/31/d8 /opt/android-sdk/build-tools/31/dx
$ sudo ln -s /opt/android-sdk/build-tools/31/lib/d8.jar /opt/android-sdk/build-tools/31/lib/dx.jar
兼容 Java 8

Java 8 太好用了,而且很多库也放弃了对更老的 JDK 的兼容,但是 Android 应用还是要兼容一下老设备。可以在 android/build.gradle 里加上兼容选项:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

(和 defaultConfig 这类的并列。)

HTML

FreeType

https://github.com/intrigus/gdx-freetype-gwt

使用上面的库来兼容 HTML。现在的 LibGDX 版本已经是 1.10.0 了,上面这个库还没有相应的版本。我暂时用的是 1.9.10.1 版本,有问题再来记录。

JDK 8

https://stackoverflow.com/questions/55847497/how-do-i-troubleshoot-inconsistency-detected-dl-lookup-c-111-java-result-12

LibGDX 似乎只兼容 JDK 8 (JDK 16 不行,JDK 11 没法编译)。安装 OpenJDK-8 再到 File -> Project Structure -> Project -> Project SDK 里把 JDK 版本改过来。

Pleroma 使用 Postfix 提供邮件服务

Pleroma 的邮件的配置有很多方案。 [1] 其中最通用的是 SMTP 以及 Sendmail 。就我们用到的功能而言,其实这两个没有什么区别:

SMTP

Sendmail

Pleroma
↓ (SMTP)
邮件提供商
↓
收件者
Pleroma
↓
Postfix/Sendmail
↓ (SMTP)
邮件提供商
↓
收件者

但总之,毕竟 postfix 在其它服务(如 mastodon, php 相关的 flarum 或者 wordpress)里都可以用,所以还是介绍一下 postfix 的配置。

阅读更多…

尝试 Ink - 用来写剧情脚本的语言

了解了一下 Inkle 出品的 ink ,但是初步试起来有一点问题,主要是文本本身的结构太多变,然后就没法本地化。(这也许也能解释为什么 Inkle 的游戏大多都没有本地化……)

本来有点想法是自己再设计一种简单的语法的,但明显自己水平不够嘛。这里尝试汇总一下一些常用的语法,把一些没必要的语法过滤掉,顺便看看能不能弄出一套 gettext 比较好处理的规范来。

(参考的是 这里 ,不知道哪里还有更详细的语法标准……)

(说实话有一点点在写汇编的感觉。非常不满的就是它虽然是“脚本”语言但是基本的程序语言的功能都好像要用汇编的方式来手动实现。看它用户手册你会发现一大半内容都是放在 “advanced” 的范畴里的,其中就包括一些非常基础的东西(比如一种会返回到调用位置的函数,真是太高级了;看我们函数还可以递归呢)。)

阅读更多…

[搬运] The Quiet World

原文链接(已失效): https://www.douban.com/note/513339436/

The Quiet World

Jeffrey McDaniel

Ent译:

为了让人们能够更多地
彼此凝视对方的眼睛
同时也让喑人惬意,
政府决定为每人分配
每天一百六十七字
的配额,不多不少。
电话响起时,我拿到耳边
却不说哈罗。在餐馆里
我指着菜单上的鸡汤面条。
我对新的生活颇为适应。
夜里,我给遥远的爱人打电话,
骄傲地宣称只用了五十九字
将余下的全都留给你。
当她没有回答时,
我知道她已将词语用尽
因此我缓慢地低声细语
我爱你,三十二次,三十三次
然后,我们只是占用着线路
听着彼此的呼吸。


——

很久没有翻诗了,随便挑一首捡起来。

Blender 笔记

Blender 版本 2.91.2

基本操作

视角操作

数字小键盘

数字小键盘的按键和其它按键可能有不同的功能。基本都是对视角的调整。

大概是这个样子的

7

8

9

4

5

6

1

2

3

0

.

  • . : 将视角缩放、移动到所已选择的物体上

  • 0 : 移动到场景里的摄像头的视角

  • 1, 3, 7, 9 : 分别对应左视图、正视图、俯视图、右视图;(想象把小键盘旋转至 7 在上方会更容易记忆)

  • 5 : 切换透视投影和垂直投影

  • 8, 2, 4, 6 : 前后左右对视角角度微调

  • +, - : 缩放微调

鼠标操作

/images/blender-view-buttons.png
  • 那个 XYZ 的地方可以使用鼠标拖拽,也可以点击对应的轴

  • 放大镜、手状图标可以拖拽放大缩小、平移视角

  • 放映机图标是视角变为场景摄像头视角

  • 那九个格子的图标是透视投影和垂直投影的切换

鼠标中键:

  • 滚动 : 放大缩小

  • 拖拽 : 旋转视角

  • Shift+拖拽 : 平移视角

  • Ctrl+拖拽 : 放大缩小

基本界面交互

  • Ctrl+Space : 最大化当前鼠标所在面板,或是取消最大化(回到原来界面)

  • 拖拽面板边框 : 看拖拽的方向可能是分一个新的面板出来,或是把一个面板删除掉

  • 右键点击面板边框 : 菜单:分一个新的面板出来,或是把一个面板删除掉

  • Ctrl+PageUp/PageDown : 切换预设面板布局(也在窗口最上方的一栏上有)

Pie menu 操作

一般 pie menu 由快捷键触发:

  • 按住快捷键不松手,移动鼠标到某个选项,松开快捷键自动选中

  • 也可以按快捷键松手,鼠标点击选项

  • 鼠标右键取消

Layout 预设布局

  • t : 打开/关闭工具栏(包括对物体移动、旋转、缩放等操作)

  • Shift+Space : 在当前鼠标位置打开一个工具栏;也可以按住不放,把鼠标移动到打开的工具栏的某个选项上,再松开键盘按键,自动选中该选项;

  • n : 打开一个比较细致的参数设定栏

Cursor 相关:

Cursor 是新物体放置的中心点。

  • Shift+RightClick : 设置 cursor

  • Shift+s : Cursor 的一些操作的菜单,例如重设 cursor 到原点

  • n : 在打开的栏里的 View 里的 3D Cursor 里定量设置

  • z : 打开一个 pie menu 设置显示样式(线框、渲染、实体等等)

物体操作

选择:

  • a : 全选

  • Alt+a : 取消全选

  • 默认左键拖拽矩形选框选择

  • b : 矩形选框,左键拖拽选框选择,中键拖拽选框取消选择

  • c : 刷子选择,左键拖拽,选中刷到的物体,同样中键会取消刷到的物体

  • Shift+LeftClick : 选中没有选中的物体,取消选中选中的物体

  • 左上角的 Select 选单

物体查看:

  • 右上角 Wireframe 等

物体移动:(也可以在 t 工具栏里找)

  • g : 平移,按 g 以后可以配合 x, y, z, Shift+x, Shift+y, Shift+z 快捷键限制平移方向

  • r : 旋转

  • s : 缩放

  • Alt+g, Alt+r, Alt+s : 还原物体最初的对应设置

  • 可以在 3D Viewport 的上方找到更改旋转、缩放中心点的选项,例如可以设置成 3D Cursor(图为默认的 Active Element 选项)

    /images/blender-transform-pivot-button.png
  • 可以在 3D Viewport 的上方找到更改旋转、缩放坐标系的选项,例如可以设置成 Local,按物体本身的上下左右来移动;快捷键可以连按两次相应的轴,如 x x, y y, z z

  • 3D Viewport 的上方还有 Snap 工具,可以用来对齐等等,快捷键是 Shift+Tab

  • 在拖拽时按 Shift 可以减慢移动速度

添加物体:

  • Shift+a : 添加物体

删除物体:

  • Delete

  • x

隐藏物体:

  • Shift+h : Alt+h 取消

物体集合(Collection):

  • 右键菜单 -> Move to Collection -> New Collection -> 名字 -> Enter 两次

  • Outliner 面板里快捷键 c 创建, x 删除

编辑物体

Object Mode

  • Tab : Edit Mode

  • Ctrl+Tab : 在 active 物体为 armature 时进入 Pose Mode;否则会弹出菜单

  • Ctrl+j : 合并物体

Edit Mode

  • p : 分离物体

  • 1, 2, 3 : 切换选择模式(顶点、棱边、面),可与 Shift 联用

  • Alt+Shift+LeftClick : 选中一圈的点/棱边/面

  • e : Extrude,右键取消,但仍会生成重叠的面,需要按 Ctrl+z 来完全取消

  • Ctrl+r : Loop cut,鼠标滚轮可以增加切割数量

  • Ctrl+b : Bevel, Ctrl+Shift+b : 只在顶点处生成圆滑处理;可以使用鼠标滚轮

    也可以使用 Bevel 的 Modifier

  • k : Knife,右键完全取消, e 取消当前跟随着鼠标的连线, SpaceEnter 确认

  • Bisect : 似乎没有快捷键

Shading

基本上就是各种连线。

  • Shift+LeftClick : 选中多个

  • f : 自动连接选中的两个节点

  • Ctrl+x : 删除并自动重连

  • Alt+LeftMouseDrag : 移走并自动重连

  • Ctrl+LeftMouseDrag : 移除被鼠标切过的线

  • u 或者上方 UV 选单 : 选择 unwrapping 算法

  • Voronoi Texture 很漂亮

Render

  • F12 : 渲染图片

  • Ctrl+F12 : 渲染动画

  • Ctrl+v : 渲染范围选框,使用 Ctrl+Alt+v 取消

  • F11 : 显示图片渲染结果

  • Ctrl+F11 : 显示动画渲染结果

  • Cycles 引擎的取样少了的话,可以使用 Denoising 减少噪声

Rigging

  • Ctrl+p : 设置 active 的物体为所有选中物体的 parent, Alt+p 取消

    当选中 armature/bone 的时候会有不同的选项

  • 可以安装 Rigify 插件来自动生成一个人体骨架

Pose Mode 里:

  • m : 移动选中部分 armature 到某一 layer

Weight & Vertex Groups

  • 同时选中物体以及其关联 armature ,将物体设为 active 物体,按 Ctrl+Tab 可以出选单,可以选择进入 Weight Paint 模式,Weight Paint 模式里可以 Ctrl+LeftClick 选中对应 armature

Animation

Timeline 面板

  • i : 对选中的物体插入 keyframe,在弹出菜单里选择 keyframe 记录的数据

  • v : 改变选中的 keyframe 点的插值方法

还有两个面板是 Dope Sheet 和 Graph Editor

  • Ctrl+Shift+m : Graph Editor 里的曲线的 modifiers

Sculpt Mode

  • f : 笔刷大小, Shift+f 笔刷强度

  • x : draw

  • c : clay : flattening

  • l : layout

  • i : inflate

  • Shift+s : smooth

  • p : pinch

  • g : grab

  • k : snake hook

  • m : mask, Alt+m to remove, Ctrl+i to invert mask

  • 可以从普通的大致模型增加面数后再开始 sculpt,可以在 Sculpt Mode 按 n 在 Tool -> Remesh 里找到相关工具;也可以使用 Dyntopo (在 Remesh 上方)

Org Mode 笔记

Org mode 是好文明,但是我每次都是学到一半就停下来了。现在做点笔记。

快捷键

  • C-c C-t : TODO 相关,在普通条目与 TODODONE 状态中切换, DONE 时会自动添加上 CLOSED 的时间;

  • M-Shift-RET : 在下方添加同级的 TODO 条项,添加后在进行其它编辑之前可以按 TAB 调整条目级别;

  • C-c C-o : 打开超链接;

  • C-c C-l : 插入链接,可以手动输入,也可以预先在另外一个文件里通过 org-store-link 保存一个指向该文件该行的连接,再回到 org 文件里 C-c C-lorg-store-link 默认没有快捷键,可以在配置文件里配置一个(例中为 C-c l ):

    (define-key global-map "\C-cl" 'org-store-link)
    
  • Shift-TAB : 缩起所有项目至一级标题,或展示所有标题但缩起内容,或展示所有;

文件格式

  • [[link][description]] : 超链接的格式;显示出来只会有下划线的 description ,但是可以把光标放到链接最后,按删除键,整个 [[link][description]] 就会显示出来;

  • * title : 条目/标题,二级、三级等的条目分别 ** title*** title 以此类推;

  • ** TODO something to do : 待做事项,还没做,这是个标题所以可以有一级二级等的分别(按星号的多少);

  • *** DONE something done : 待做事项(?,已做事项);一般是:

    *** DONE something done
        CLOSED: [2021-03-29 Mon 14:03]
    
  • 普通文本 : 就随便起一段放着就行;

R语言笔记

R语言笔记。(我讨厌脚本语言。:(

差不多是数据分析的常用语言之一?

语法简介

语句

一句一行,可以用 ; 在同一行中分隔多句。 # 后跟注释。

标识符

以字母开始,可以跟有 [A-Za-z0-9_.] 等。

数据

以向量为基础,如 1 会被理解成一维向量。

字面常量与数据构造

  • T, TRUE, F, FALSE

  • 向量: c(1, 2, 3), 1:3

  • 数字: 0xff

  • 字符串: "string", 'string'

  • data frame:

    data.frame('Col1Name'=col1Data, 'Col2Name'=col2Data, ...)
    

计算操作

  • 加减乘除不用说了,会自动增大数据精度,但不是无限精度;

  • %% 取余。

  • >=, ==, !=

  • &, |, &&, ||

向量/矩阵操作

下标从 1 开始,用 [index] 取下标。下标可以使用向量,如 x[1:3, c(1, 3)]

从向量创建矩阵 :默认一列一列地复制到里面去。

data frame

可以取列的下标,如 x["Col1Name"].

可以用 $ 符号,如 x$Col1Name.

赋值语法

var1 = 1
var2 <- 2
3 -> var3

流程语法

  • for loop:

    for (i in 1:100) {
      print(i)
    }
    
  • if:

    if (cond1) {
      print('do something
    }
    

函数定义

全部是通过匿名函数定义的。

func = function(arg1, arg2) {
  return(returnedValue)
}

全局函数

  • is.integer(x)

  • is.numeric(x)

  • as.integer(x)

  • c(x, y) : concatenate 连接得到向量

  • print(x)

  • matrix(x [, nrow = 3 [, ncol = 3]] [, byrow = T])

  • typeof(object)

  • power.sum(x, power)

    这个似乎有点东西。取得是向量里面的每个数据的类型。

  • class(object)

  • sum(object)

  • getwd() : get working directory

  • setwd(str)

  • read.csv(name)

  • head(data)

  • plot(x, y, type='o')

  • install.packages('ggplot2')

  • library(ggplot2)

  • curve(x^2) : 是的,就是这个屁语法。

    正经一点的话比如 curve(func, fromX, toX, n = pointNumber, xlab = label, ylab = ylabel, main = graphName) ,里面的 func 需要是能够处理向量参数的函数,不能的话可以套一层 Vectorize (见下)。

  • with(data, boxplot(col1)) : 再来一个屁语法。等效 boxplot(data$col1)

  • Vectorize(func) : 不懂为什么这个函数就首字母大写了。接收一个只能处理单值的函数,返回对应的能够接收向量参数的函数。返回的函数会把原来的函数应用到向量的每一个分量上。

所有函数都是全局函数

恩,所以不列举了。

(那个所谓的 . 看似是面对对象或者是命名空间,但它只是装饰啊(不,应该说点本身是名字的一部分,和对象啊对象的成员啊一点关系没有。))

特定功能代码集合

查看帮助文档

? barplot

读取CSV

data = read.table("data.csv", header=TRUE, sep="\t", fileEncoding="UTF-8")

保存输出图表为PDF格式

pdf(paste(col, ".hist.pdf", sep=""))
hist(data[[col]], main=col, xlab=col, ylab="Frequency")
dev.off()

就,R个操作系统吧,有各个“设备”的驱动。大概是按设备管理的思路来的。

绘画图表

天哪

柱形图

barplot(height, width, main="title", xlab="...", ylab="...")

直方图

hist(data, breaks=width, probability=TRUE, col=rainbow(20))

箱型图

boxplot(data, names=c("", ""))

散点图

plot(x, y)
plot(x, y, pch=16, col=ifelse(x==1, "RED", "BLUE")

绘画数学图形

curve(sin(x))
x = seq(0, 10, 0.01)
y = sin(x)
z = cos(x)
matplot(x, cbind(y, z), type="l")
func = function(x) {
    if(x <= 0.5) {
        return(0)
    } else {
        return(1)
    }
}
plot(Vectorize(func), 0, 1, n = 10001)

积分

integration = integrate(vectorizedFunc, from, to, subdivistions = 100000)
print(integration$value)
print(integration$abs.error)

随机以及抽样

rnorm(10, mean=0, sd=1)
runif(10, min=5, max=10)
sample(1:10, size=5, replace=TRUE)
sample(c(TRUE, FALSE), size=10, prob=c(0.7, 0.3), replace=TRUE)

Rstudio

  • R console:

  • R script: 可以与 console 同步,也可以部分执行;

  • R markdown: 略?