iovxw

多种方式实现波浪动画

基础动画实现

当我知道有些动画效果是纯靠图片拼起来的时候我是绝望的,虽然的确很省计算资源,但是你们让高分屏往哪哭?

大部分动画效果,直接用相应图形库自带的函数就能解决

有些稍微麻烦一点的,就得手写了(当然还是不推荐,毕竟人家的函数一般都带各种加速)

这时候就体现出了一个 客户端/网页端 的前端稍微懂点数学是多么的重要

不过太高级的数学我也不会,只能讲点简单的,就是实现一个波浪动画

别在服务端储存用户密码了,来用 SRP 吧

只是介绍

新年第一篇文章就是从去年的草稿箱里发出来的,感觉真不怎么新……

当然这个协议也不新了,是 2000 年出的 RFC

不过现在都 2017 年了,还是有一大堆网站在用什么 md5 加盐(不,就算你用 SHA2XX 也不行),甚至连 bcrypt 和 Argon2 是啥都不知道,感觉真是悲伤(

所以,来看看 SRP 是个啥(如果你真的不知道 Argon2,还是先去看它吧):

学完了 Rust

算入门

实在受够了 Clojure 的内存占用, Go 又太丑, 决定该再找个语言用了

在用了一圈小众语言之后, 又被残酷的现实打击了, 没社区就得什么都自己来

自己造语言这个想法也很快放弃了, 至少现在还不行

而折中方案, 就是 Rust

bismuth —— 几何壁纸生成器

填坑好累

screenshot

含糖型 Brainfuck 解释器

断句有问题

其实标题应该是 《含糖型 Brainfuck | 的解释器》

不过因为不单单是个解释器还是个可视化和单步执行工具以及一个语法糖的实现

所以,嗯……标题就这样吧

修复 Linux GNOME 环境下非 GTK 窗口鼠标指针主题不统一问题

以后重装系统得清配置文件

~/.icons/default/index.theme 中的 Inherits 改过来就行了

如果没有就改 /usr/share/icons/default/index.theme,不过就是全局的了

本文完

原因估计是 GNOME 自带的鼠标主题设置没改这个文件,而非 GTK 程序都是靠这个读取鼠标主题的

自定义 Git commit 时间

拿来刷小绿点

在需要给 commit 指定时间的时候,可以用 --date 参数

支持的日期格式可以看:

http://stackoverflow.com/questions/19742345/what-is-the-format-for-date-parameter-of-git-commit

使用 'x days ago' 可以很方便的补上之前的小绿点(🙈这功能其实就是拿来干这种事的)

Shields.io —— 制作各种状态图标

嘛这篇文章其实是凑数的

在 github 上看见很多项目都有 IMG 这样的图标对不对?

嗯,这就是今天我在好不容易重新开始的 github 连击要断了于是急中生智水的这一篇博客中要介绍的东西:

http://shields.io

打开页面就能发现,各种例子相当全面,完全不用我介绍

于是这篇文章就结束了

一份 Minecraft InGameInfo Mod 配置文件

没错,这段时间我都在玩游戏

效果图:

https://img.vim-cn.com/f6/80f3ababde436eacbeaf0616cb42dc34f5fc2a.png

Ark —— Go 和 Rust 的结合体

只是没人用

编译器是用go和Rust写的,github在这里:https://github.com/ark-lang/ark

官网:http://ark-lang.org/

说是系统级编程语言,可以和C无缝交互

至于为什么说是go和rust的结合体

看下面的例子就知道了(https://github.com/ark-lang/ark-docs/blob/master/IDEAS.md

struct Bar {
    name: str;
}

struct Baz {
    name: str;
}

trait Foo {
    func fooBar();
}

impl Foo for Bar {
    func fooBar() {
        println("foobar method in foo for bar %s!", name);
    }
}

impl Foo for Baz {
    func fooBar() {
        println("foobar method in foo for baz %s!", name);
    }
}


// attributes look cool
// basically generics, we need to use
// them in this case instead of saying `value: Foo` as
// a param, because a trait does not have a constant
// size that is known at compile time, so the generic
// will basically compile down to [in this case] two
// functions one for Bar, and one for Baz, then it
// will know the size of the given value.
// this might be weird to understand but its 1am and im
// ill and tired. jah bless xx
func [T: Foo] callFooBar(value: T) {

}

func main() {
    // monomorphisation????
    baz: Baz = {
        name: "baz",
    };

    bar: Bar = {
        name: "bar",
    }

    callFooBar(baz);
    callFooBar(bar);
}