Coder Social home page Coder Social logo

blog's Introduction

主页

简介

这是一个 github 的 issue + Project 博客。hexo太麻烦了,越来越懒,再一个评论插件真的没github自带的好用。

分类

博客主要的用途是笔记,以下多数是笔记,方便自己查阅的

次要

一些乱七八糟的东西

  • Book(游戏性是什么,反脆弱(笔记还没写 。。))

  • 日记(很久前的东西了)

  • 科普(电脑问题,博客)

能不能后浪就不知道了,反正先看书,边看边浪吧

强推也谈钱,也大真的是我引路人,追是追不上了,就好好稳稳前行吧

  • 《搞定 I 》(重点,这本需要尽快提上日程)
  • 《富爸爸穷爸爸》(ed)
  • 《小狗钱钱/财务自由之路》
  • 《解读基金:我的投资观与实践》
  • 《指数基金投资指南》
  • 《傻瓜式投资》(ed)
  • 《逃不开的经济周期》
  • 《穷查理宝典》
  • 《反脆弱:从不确定性中获益》(纳西姆·尼古拉斯·塔勒布)(ing)
  • 《黑天鹅》(纳西姆·尼古拉斯·塔勒布)
  • 《软技能》
  • 《彼得林奇的成功投资》

……(还有很多很多,看不完的感觉啊,捂脸)

2018书单

2018干货整理

更新书单和买书经验谈


blog's People

Contributors

zakariyya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

tongwoojun

blog's Issues

Markdown折叠内容语法

在看racaljk的GitHub上看到这个readme,才知道原来还可以这么玩,这也是H5的语法
参考 racaljk/yvm

<details>
<summary>Title</summary>

content!!!
</details>

eg:

## collapsible markdown?

<details>
<summary>CLICK ME</summary>

** <summary>标签与正文间要空一行 **
</details>

这是一个折叠列表

没想到在这里面的支持这么丑

Title1

content!!!===

Title2

content!!!***

Title3

content!!!+++

基于Ubuntu搭建FTP

安装并启动 FTP 服务

安装 VSFTPD

使用 apt-get 安装 [vsftpd]:

sudo apt-get install vsftpd -y

vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其官网介绍,它可能是 UNIX-like 系统下最安全和快速的 FTP 服务器软件。

启动 VSFTPD

安装完成后 VSFTPD 会自动启动,通过 netstat 命令可以看到系统已经[监听了 21 端口]:

sudo netstat -nltp | grep 21

如果没有启动,可以手动开启 VSFTPD 服务:

sudo systemctl start vsftpd.service

FTP 协议默认使用 21 端口作为服务端口

配置用户访问目录

新建用户主目录

sudo mkdir /home/uftp

执行完后,在这里 /home/uftp [?] 就能看到新建的文件夹 uftp 了。
创建登录欢迎文件:

sudo touch /home/uftp/welcome.txt

方便用户登录后可以看到欢迎信息,并且确定用户确实登录到了主目录上。
用户的主目录是用户通过 FTP 登录后看到的根目录

新建用户 uftp 并设置密码
创建一个用户 uftp :

sudo useradd -d /home/uftp -s /bin/bash uftp

为用户 uftp 设置密码 :

sudo passwd uftp

删除掉 pam.d 中 vsftpd,因为该配置文件会导致使用用户名登录 ftp 失败:

sudo rm /etc/pam.d/vsftpd

为了方便后面的实验步骤,不建议使用其它的用户名
请记住设置的密码以用于后续步骤

限制该用户仅能通过 FTP 访问

限制用户 uftp 只能通过 FTP 访问服务器,而不能直接登录服务器:

sudo usermod -s /sbin/nologin uftp

修改 vsftpd 配置

sudo chmod a+w /etc/vsftpd.conf

修改 /etc/vsftpd.conf 文件中的配置(直接将如下配置添加到配置文件最下方):

  • 限制用户对主目录以外目录访问
chroot_local_user=YES
  • 指定一个 userlist 存放允许访问 ftp 的用户列表
userlist_deny=NO
userlist_enable=YES
  • 记录允许访问 ftp 用户列表
userlist_file=/etc/vsftpd.user_list
  • 不配置可能导致莫名的530问题
seccomp_sandbox=NO
  • 允许文件上传
write_enable=YES
  • 使用utf8编码
utf8_filesystem=YES

新建文件 /etc/vsftpd.user_list,用于存放允许访问 ftp 的用户:

sudo touch /etc/vsftpd.user_list
sudo chmod a+w /etc/vsftpd.user_list

修改 /etc/vsftpd.user_list ,加入刚刚创建的用户:
示例代码:

/etc/vsftpd.user_list
uftp

设置访问权限
设置主目录访问权限(只读):

sudo chmod a-w /home/uftp

新建公共目录,并设置权限(读写):

sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public

重启vsftpd 服务:

sudo systemctl restart vsftpd.service

访问 FTP 服务

FTP 服务已安装并配置完成,下面我们来使用该 FTP 服务

访问 FTP 服务

根据你个人的工作环境,选择一种方式来访问已经搭建的 FTP 服务

通过 FTP 客户端工具访问

FTP 客户端工具众多,下面推荐两个常用的:

  • FileZilla - 跨平台的 FTP 客户端,支持 Windows 和 Mac
  • WinSCP - Windows 下的 FTP 和 SFTP 连接客户端
  1. 下载和安装 FTP 客户端后,使用下面的凭据进行连接即可:
[主机]:
<你的 CVM IP 地址>
用户:

输入密码后,如果能够正常连接,那么大功告成,你可以开始使用属于你自己的 FTP 服务器了!
接下来,请上传任意一张图片到你的 FTP 服务器上的 uftp 的 public 目录下,然后,就可以在 /home/uftp/public 中看到了。

  1. 通过 Windows 资源管理器访问
    Windows 用户可以复制下面的[链接]到资源管理器的地址栏访问:
ftp://uftp:你的密码@<你的 CVM IP 地址>

如果你申请了域名,可以将Ip 地址替换为对应的域名作为访问凭据,可以将链接中的 Ip 地址替换为对应的域名访问 FTP 服务

解决CentOS(6和7版本),-etc-sysconfig-下没有iptables的问题

date: 2017.05.23 22:38

一、Centos 6版本解决办法:

  1. 任意运行一条iptables防火墙规则配置命令:

iptables -P OUTPUT ACCEPT

  1. 对iptables服务进行保存:

service iptables save

  1. 重启iptables服务:

service iptables restart

二、Centos 7版本解决办法:

  1. 停止并屏蔽firewalld服务

systemctl stop firewalld
systemctl mask firewalld

  1. 安装iptables-services软件包

yum install iptables-services

  1. 在引导时启用iptables服务

systemctl enable iptables

  1. 启动iptables服务

systemctl start iptables

  1. 保存防火墙规则

service iptables save

/usr/libexec/iptables/iptables.init save

另外:管理iptables服务

systemctl [stop|start|restart] iptables


注:原文摘自==>解决CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题

《游戏性是什么》10. 难易度平衡设计与效率预测

date: 2016-06-10

人专注于游戏中的机制,与游戏设计者之间有什么关系?而这又与人类自身的何种特性息息相关?

——《游戏性是什么》第10章

平衡设计,大致有以下2点:

  • 静态(固定型)平衡设计

  • 动态(变动型)平衡设计

静态平衡设计

是指游戏制作完成时,平衡设计就固定了。大多数小游戏都这样,如大众熟知《雷电2》、上篇文尾提到的《僵尸危机3》

在游戏中的平衡设计为

难度从一开始就故意降低了。

利用跷跷板模式,系统通过调整阻力点,是游戏保持了平衡状态。

利用这种平衡设计,可以给玩家带来“命悬一线的关头躲过了敌人的攻击”的快感。

而并非为了配合玩家的技能而变更游戏的难度。

每一关的难度都被固定了。

动态平衡设计

分以下两种类型:

  • 任意的负荷可变型平衡设计: 玩家可以任意地对平衡进行改动。
  • 隐藏反馈型平衡设计: 游戏自动调整平衡。游戏利用程序实时解析游戏中玩家的技能,自动,调整游戏的难易度,以匹配玩家技能水平。

隐藏反馈型平衡设计,可以以《山脊赛车》为例。排名越靠后,车辆的控制会变得更加容易。

这是为了保持败者玩家动机的一种设计方法。

隐匿在游戏内部,对玩家来说是不可见的。

效率预估型的平衡设计

以《超级马里奥兄弟》中的“ B dash ”为例,按住B键进行移动操作可以进行更加告诉的移动。

灵活使用可以在难度较高的关卡中巧妙避开敌人。

并为快速通关发挥巨大作用。由于在短时间内通关得分比较高,所以也被视为一种高效率的游戏方式。

另一方面,角色触碰到敌人的风险也增加了,这实际上是将难易度的设定托付给了玩家的判断。

玩家在游戏设计者所赋予的幅度之内,根据自己的情况权衡风险与效率(所需时间)。

为了实现这种机制,设计者还需要设计出“ game over ”之类的“危机”供玩家权衡。

危机

一般的游戏中,当难度超过技能时,游戏会陷入停滞状态。

通常是“回到起点”“装备减少”“重玩依旧无法通过某个场景”等情况。

将因玩家的抉择而使游戏进入停滞状态的状况称之为“危机”。

所谓危机,对于玩家来说就是强制性地花费“时间”成本。



风险与时间成本的权衡

风险和时间成本,一般是为反比关系。要是将风险规避到最小,就需要花费很高的时间成本。

如上所述,危机机制的设计,是为了实现玩家的风险和时间成本的权衡。因此玩家有必要在下面两个选项中预估出哪一种平衡最合适。

  • 抑制陷入危机的风险,接受时间成本的增加

  • 接受陷入危机的风险,谋求时间成本的减少

当玩家选择风险更高的方式高效达成目标时,看起来为什么会很开心?其实是:

“平衡难易度”的行为,正是创造出对于玩家自身而言挑战难度最恰当的机制。

在认为到危机的风险程度增加的同时,预估处当前技能能够跨越这个危机,在短时间内能达成通关目标,便是玩家活用了以往游戏经历中的风险控制经验。

每次游戏时平衡风险与效率的经验积累,可以成为下一次游戏时的参考与指导。

小结:

  • 游戏平衡设计,分为“静态(固定型)平衡设计”,“动态(变动型)平衡设计”“效率预估型平衡设计”3种。

  • 效率预估,依照自身技能,在“高风险短时间”和“低风险长时间”中做出恰当的判断行为。

“你学习的时候要是有玩游戏那股冲劲和认真就好喽”
……



摘自《游戏性是什么》第10章(难易度平衡设计与效率预测)喜欢这本书,

其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

搭建个人Leanote云笔记

下载启动 MongoDB

Leanote 依赖 MongoDB 作为数据存储,下面开始安装 MongoDB:

下载 MongoDB

进入 /home 目录,并下载 MongoDB:

cd /home

下载源码:

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz

解压缩源码包:

tar -xzvf mongodb-linux-x86_64-3.0.1.tgz

创建用于存储的文件夹目录

mkdir -p /data/db

配置 MongoDB 的环境变量

编辑 /etc/profile,在文件末尾追加以下配置:

示例代码:/etc/profile
export PATH=$PATH:/home/mongodb-linux-x86_64-3.0.1/bin

并执行以下命令,使环境变量生效。

source /etc/profile

启动 MongoDB(启动需要 3 ~ 5 分钟,耐心等待):

mongod --bind_ip localhost --port 27017 --dbpath /data/db/ --logpath=/var/log/mongod.log --fork

安装 Leanote

Leanote 是一款 Linux 下开源的软件,下面开始安装 Leanote:

下载 Leanote

先进入 /home 目录

cd /home

下载 Leanote 源码

wget https://iweb.dl.sourceforge.net/project/leanote-bin/2.4/leanote-linux-amd64-v2.4.bin.tar.gz

解开压缩包

tar -zxvf leanote-linux-amd64-v2.4.bin.tar.gz

编辑 Leanote 配置文件

编辑文件 app.conf,在文件中找到 app.secret= 项,并修改为如下内容:

app.secret=qcloud666

初始化数据库

导入初始化数据

mongorestore -h localhost -d leanote --dir /home/leanote/mongodb_backup/leanote_install_data/

启动 Leanote 服务

nohup /bin/bash /home/leanote/bin/run.sh >> /var/log/leanote.log 2>&1 &

准备域名和证书

如果 ping 命令返回的信息中含有你设置的解析的 IP 地址,说明解析成功。

注意替换下面命令中的 www.yourmpdomain.com 为你自己的注册的域名

访问 Leanote 云笔记本

通过 ip 访问笔记本
通过访问 http://<你的 CVM IP 地址>:9000 就可以了使用自己的笔记本。

  • 初始化账户: admin
  • 初始化密码: abc123
  • 请务必修改密码已确保使用安全!

通过域名访问笔记本
如果你申请了域名,可以将 Ip 地址替换为对应的域名作为访问凭据,如:http://www.yourmpdomain.com:9000 , 注:请将 www.yourmpdomain.com 替换为你申请的域名。

shadowsocks搭建过程(客户端)

这里着重介绍 macOS上的配置

链接扩展
shadowsocks
shadowsocks-windows
shadowsocks-libev
v2ray
vultr

一些通用的配置

服务器

填IP和域名都可以,不过shadowsocks服务器域名的解析应该用的是本地的DNS(毕竟还没有连上代理),所以尽量填IP吧。

端口

服务器端如果是自己搭的,尽量把端口设置为80或443这种常用端口,因为有的网络环境会限制一些端口,8080,25这种非HTTP端口也可以。

算法&密码

现在所有平台的客户端都支持AEAD加密算法,推荐AEAD。另外shadowsocks基本上没有什么多用户的概念,如果是多人使用多个密码的话一般就是开多个端口,每个端口设置一个密码。

全局 & 自动代理

全局代理指全局的SOCKS代理,所有流量都走代理端口。

自动代理一般使用PAC文件,黑名单指在黑名单内域名走代理,不在黑名单内的不走代理;

白名单相反,只有在白名单内的域名不走代理。如果代理流量有限制,最好使用黑名单,不限制流量的话,白名单更好一些。

黑名单一般都是用著名的gfwlist,白名单个人推荐这个

Android、Windows、OpenWrt/LEDE端

参考这篇

macOS端

github上的GUI版本不怎么能满足我的使用需求,所以我用的是shadowocks-libev。

安装shadowsocks-libev

使用homebrew安装即可,没必要手动编译源码。没安装 homebrew 的用户,需要先到 App Store 下载 Xcode,之后在终端运行:

local$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

其实就是运行一个ruby脚本。用homebrew来管理macOS上的命令行工具是不错的选择,软件包更新也跟得上。安装好homebrew后就可以安装shadowsocks-libev:

local$ brew update    #更新homebrew软件源
local$ brew install shadowsocks-libev

开机自动启动

安装之后我们会看到终端中提示这样的信息:

To have launchd start shadowsocks-libev now and restart at login:
  brew services start shadowsocks-libev
Or, if you don't want/need a background service you can just run:
  /usr/local/opt/shadowsocks-libev/bin/ss-local -c /usr/local/etc/shadowsocks-libev.json

这是告诉我们开机自动运行shadowsocks的方法,和手动运行的方法。开机自动运行使用的是homebrew提供的服务,相当于执行了下面的命令:

local$ ss-local -c /usr/local/etc/shadowsocks-libev.json

ss-local是shadowsocks-libev中的客户端命令。可以看出,homebrew安装shadowsocks时
在/usr/local/etc/路径下建立了配置文件,供开机启动shadowsocks服务用。
使用vim或是文本编辑器都可以,这可是macOS,不是没有GUI的Linux VPS了

{
    "server":"server_ip",
    "server_port":8088,
    "local_port":1080,
    "password":"password",
    "timeout":5,
    "method":"chacha20-ietf-poly1305",
    "mode":"tcp_and_udp"
}

同服务器上的配置文件基本一至,不过多了一个local_port,
这是因为上面说的本地要开一个端口用于把流量转发到shadowsocks服务器,
所以要显式地写明端口,如果不写会默认1080端口。之后就可以启用shadowsocks的homebrew服务:

local$ brew services start shadowsocks-libev

可以看到成功的提示信息。

全局代理

本地开启socks代理,在系统设置里填上端口就可以使用全局代理。

白名单

当然,平时我们不会使用全局代理的,所以接下来要配置上面提到过的PAC自动代理。

首先下载域名白名单
要使用的是里面的PAC文件。

如果本地代理端口不是默认的1080,下好的PAC文件还需要编辑一下脚本上使用的socks端口:

var proxy = new Array( "SOCKS5 127.0.0.1:port;")

将代理端口改为我们上面设置的本地端口。

因为10.12开始macOS不允许使用本地文件路么作为PAC文件路径,
所以要把PAC文件放在网络环境下才可以正常使用,使用macOS自带的网页服务器即可。

将PAC文件复制到/Library/WebServer/Documents/目录下,之后启用网页服务:

local$ sudo apachectl start

输入密码后,在浏览器中输入http://localhost可以看到It works!字样即为启动成功,

接着在网络设置中自动代理的地址填写白名单的地址即可。

代理切换

可以在网络设置添加一个网络位置,通过切换网络位置来切换代理方式,不过在切换网络位置的时候会断开wifi,显得不够优雅。使用networksetup命令来切换代理,这个命令实际上就相当于我们有网络没置中进行的设置的命令行形式。

# 打开PAC
local$ networksetup -setautoproxyurl Wi-Fi http://127.0.0.1:80/whitelist.pac

# 关闭PAC
local$ networksetup -setautoproxystate Wi-Fi off

# 打开socks
local$ networksetup -setsocksfirewallproxy Wi-Fi localhost 1080 on

# 关闭socks
local$ networksetup -setsocksfirewallproxy Wi-Fi localhost 1080 off

应该一下子就能看明白怎么使用,其中Wi-Fi是网络接口的服务名称,如果用的是wifi就不用改了,可以在网络设置右边看到各个接口的名称,PAC文件的位置和socks端口对应修改就好了。

可以把这几个命令写成脚本,因为我也使用Alfred,所以就写了个Alfred的workflow,用Alfred的可以直接下载使用。更改网络设置需要root权限,所以会提示输入密码。

文章摘自shino.space

ubuntu修改SSH端口

date: 2016.09.11 21:25

修改 /etc/ssh/sshd_config,在 Port 22 下添加你的端口

Port 22

Port YOUR_PORT

修改/etc/ssh/ssh_config,在Host *下添加你的端口

Host *
Port 22
Port YOUR_PORT
\#   ForwardAgent no

重启ssh

service ssh restart

再ssh连接新的端口,成功连接后再修改上面的配置把22端口注释掉
再在本机~/.ssh/下新建一个config文件,文件内容为:

Host YOUR_HOST
    User YOUR_USER_NAME
    Port YOUR_NEW_PORT

这样下次连接就只需要ssh YOUR_HOST就ok了。

修改ssh默认端口后git的一些远程操作会失败,解决办法也是修改config文件:

Host github.com
HostName github.com
Port 22
Host bitbucket.org
HostName bitbucket.org
Port 22

原文摘自“阿小信的博客


中午朋友说我服务器被人攻击,还成功登录了。丫的,密码设linux就是在作死啊……

v2ray搭建启动

v2ray-core
v2ray官网
白话文教程:源码项目名:https://github.com/toutyrater/v2ray-guide
V2Ray一键安装脚本
shadowsocks客户端

本文转载自233boy的V2Ray一键安装脚本

更新日志
2018-01-28
第一个完善版本发布…
2018-5-2
支持 HTTP/2 … 懒得发一个版本就在这里写一下
2018-5-26
支持 Socks5 …
2019-1-5
v3 版本,更加好用了。新年快乐!

温馨提示

  • 特么这个脚本没有挖矿,没有挖矿,没有挖矿。 我很抱歉……认真的开了个玩笑
  • 脚本是开源的,开源地址: https://github.com/233boy/v2ray

安装或卸载

  • 要求:Ubuntu 16+ / Debian 8+ / CentOS 7+ 系统
  • 推荐使用 Debian 9 系统,脚本会自动启用 BBR 优化。
  • 备注:不推荐使用 Debian 8 系统,因为 Caddy 申请证书可能会出现一些莫名其妙的问题
  • 强烈推荐使用 搬瓦工VPS,稳定,快速,针对**线路专门优化,完全无须担心跑路,服务好,30天退款保证。
  • 使用 root 用户输入下面命令安装或卸载
bash <(curl -s -L https://git.io/v2ray.sh)

如果提示 curl: command not found ,那是因为你的 VPS 没装 Curl

  • ubuntu/debian 系统安装 Curl 方法: apt-get update -y && apt-get install curl -y
  • centos 系统安装 Curl 方法: yum update -y && yum install curl -y
    安装好 curl 之后就能安装脚本了

备注:安装完成后,输入 v2ray 即可管理 V2Ray。如果提示你的系统不支持此脚本,那么请尝试更换系统

下面是此脚本的概览

安装选项

........... V2Ray 一键安装脚本 & 管理脚本 by v2ray6.com ..........

帮助说明: https://v2ray6.com/post/1/

搭建教程: https://v2ray6.com/post/2/

 1. 安装

 2. 卸载

请选择 [1-2]:1

请选择 V2Ray 传输协议 [1-32]

  1. TCP
  2. TCP_HTTP
  3. WebSocket
  4. WebSocket + TLS
  5. HTTP/2
  6. mKCP
  7. mKCP_utp
  8. mKCP_srtp
  9. mKCP_wechat-video
 10. mKCP_dtls
 11. mKCP_wireguard
 12. QUIC
 13. QUIC_utp
 14. QUIC_srtp
 15. QUIC_wechat-video
 16. QUIC_dtls
 17. QUIC_wireguard
 18. TCP_dynamicPort
 19. TCP_HTTP_dynamicPort
 20. WebSocket_dynamicPort
 21. mKCP_dynamicPort
 22. mKCP_utp_dynamicPort
 23. mKCP_srtp_dynamicPort
 24. mKCP_wechat-video_dynamicPort
 25. mKCP_dtls_dynamicPort
 26. mKCP_wireguard_dynamicPort
 27. QUIC_dynamicPort
 28. QUIC_utp_dynamicPort
 29. QUIC_srtp_dynamicPort
 30. QUIC_wechat-video_dynamicPort
 31. QUIC_dtls_dynamicPort
 32. QUIC_wireguard_dynamicPort

备注1: 含有 [dynamicPort] 的即启用动态端口..
备注2: [utp | srtp | wechat-video | dtls | wireguard] 分别伪装成 [BT下载 | 视频通话 | 微信视频通话 | DTLS 1.2 数据包 | WireGuard 数据包]

(默认协议: TCP):


 V2Ray 传输协议 = TCP
----------------------------------------------------------------

请输入 V2Ray 端口 [1-65535]
(默认端口: 32645):32645


 V2Ray 端口 = 32645
----------------------------------------------------------------


是否开启广告拦截(会影响性能) [Y/N]
(默认 [N]):


 广告拦截 = 关闭
----------------------------------------------------------------


是否配置 Shadowsocks [Y/N]
(默认 [N]):

配置 Shadowsocks

是否配置 Shadowsocks [Y/N]
(默认 [N]): y

请输入 Shadowsocks 端口 [1-65535],不能和 V2Ray 端口相同
(默认端口: 21992): 21992


 Shadowsocks 端口 = 32645
----------------------------------------------------------------

请输入 Shadowsocks 密码
(默认密码: 233blog.com): 233blog.com


 Shadowsocks 密码 = 233blog.com
----------------------------------------------------------------

请选择 Shadowsocks 加密协议 [1-7]

 1. aes-128-cfb

 2. aes-256-cfb

 3. chacha20

 4. chacha20-ietf

 5. aes-128-gcm

 6. aes-256-gcm

 7. chacha20-ietf-poly1305

(默认加密协议: chacha20-ietf-poly1305):7


 Shadowsocks 加密协议 = chacha20-ietf-poly1305
----------------------------------------------------------------

按 Enter 回车键 继续....或按 Ctrl + C 取消.

安装完成

管理面板

........... V2Ray 管理脚本 v3.09 by v2ray6.com ..........

## V2Ray 版本: v4.18.0  /  V2Ray 状态: 正在运行 ##

帮助说明: https://v2ray6.com/post/1/

反馈问题: https://github.com/233boy/v2ray/issues

TG 群组: https://t.me/blog233

捐赠脚本作者: https://v2ray6.com/donate/

捐助 V2Ray: https://www.v2ray.com/chapter_00/02_donate.html

  1. 查看 V2Ray 配置

  2. 修改 V2Ray 配置

  3. 下载 V2Ray 配置 / 生成配置信息链接 / 生成二维码链接

  4. 查看 Shadowsocks 配置 / 生成二维码链接

  5. 修改 Shadowsocks 配置

  6. 查看 MTProto 配置 / 修改 MTProto 配置

  7. 查看 Socks5 配置 / 修改 Socks5 配置

  8. 启动 / 停止 / 重启 / 查看日志

  9. 更新 V2Ray / 更新 V2Ray 管理脚本

 10. 卸载 V2Ray

 11. 其他

温馨提示...如果你不想执行选项...按 Ctrl + C 即可退出
请选择菜单 [1-11]:

Telegram 专用代理

如果你在使用 Telegram 的话,你可以配置一个 Telegram 的专用代理,这样来,在某些情况下你就不需要再开一个代理软件了。
输入 v2ray tg 即可配置 TG 专用代理

配置 Telegram MTProto

请选择菜单 [1-11]:6


 大佬...你没有配置 Telegram MTProto ...不过现在想要配置的话也是可以的 ^_^


是否配置 Telegram MTProto [Y/N]
(默认 [N]): y


请输入 Telegram MTProto 端口 [1-65535],不能和 V2Ray 端口相同
(默认端口: 44832): 


 Telegram MTProto 端口 = 44832
----------------------------------------------------------------

按 Enter 回车键 继续....或按 Ctrl + C 取消.

Telegram MTProto 配置信息

---------- Telegram MTProto 配置信息 -------------

 主机 (Hostname) = 

 端口 (Port) = 

 密钥 (Secret) = 

 Telegram 代理配置链接 = 

快速管理

  • v2ray info 查看 V2Ray 配置信息
  • v2ray config 修改 V2Ray 配置
  • v2ray link 生成 V2Ray 配置文件链接
  • v2ray infolink 生成 V2Ray 配置信息链接
  • v2ray qr 生成 V2Ray 配置二维码链接
  • v2ray ss 修改 Shadowsocks 配置
  • v2ray ssinfo 查看 Shadowsocks 配置信息
  • v2ray ssqr 生成 Shadowsocks 配置二维码链接
  • v2ray status 查看 V2Ray 运行状态
  • v2ray start 启动 V2Ray
  • v2ray stop 停止 V2Ray
  • v2ray restart 重启 V2Ray
  • v2ray log 查看 V2Ray 运行日志
  • v2ray update 更新 V2Ray
  • v2ray update.sh 更新 V2Ray 管理脚本
  • v2ray uninstall 卸载 V2Ray

配置文件路径

  • V2Ray 配置文件路径:/etc/v2ray/config.json
  • Caddy 配置文件路径:/etc/caddy/Caddyfile
  • 脚本配置文件路径: /etc/v2ray/233blog_v2ray_backup.conf

警告,请不要修改脚本配置文件,免得出错。
如果你不是有特别的需求,也不要修改 V2Ray 配置文件
不过也没事,若你实在想要瞎折腾,出错了的话,你就卸载,然后重装,再出错 ,再卸载,再重装,重复到自己不再想折腾为止。。

WS+TLS / HTTP2

如果你使用了这两个协议,那么就会使用了脚本自带的 Caddy 集成。
不管如何,不建议直接去更改 Caddy 的配置:/etc/caddy/Caddyfile
如果你需要配置其他网站相关,请将网站的配置文件放到 /etc/caddy/sites 目录下,然后重启 Caddy 进程即可,脚本默认生成的 Caddy 的配置会加载 /etc/caddy/sites 这个目录下的所有配置文件。
所以,请将你的网站配置文件放到 /etc/caddy/sites 目录下,完完全全不需要去更改 /etc/caddy/Caddyfile
记得重启 Caddy 进程:service caddy restart

Caddy 插件相关

本脚本集成了 Caddy,但不集成任何 Caddy 插件,如果你需要安装某些 Caddy 插件,你可以使用官方的 Caddy 安装脚本来一键安装。
本人的脚本集成的 Caddy 的安装路径,跟 Caddy 官方的安装脚本是一致的。所以可以直接安装,不会有任何问题

举个例子,安装包含 filemanager 插件的 Caddy,执行如下命令即可

curl https://getcaddy.com | bash -s personal http.filemanager

你可以在 https://caddyserver.com/download 找到 Caddy 更多插件和安装命令。

备注

V2Ray 客户端配置文件 SOCKS 监听端口为 2333, HTTP 监听端口为 6666
可能某些 V2Ray 客户端的选项或描述略有不同,但事实上,此脚本显示的 V2Ray 配置信息已经足够详细,由于客户端的不同,请对号入座。

反馈问题

请先查阅:V2Ray 一键安装脚本疑问集合

任何有关于 V2Ray 的问题,请自行到 V2Ray 官方反馈。
目前只支持配置一个 V2Ray 账号…一个 Shadowsocks 账号。。不支持 SSR。。
使用国际大厂的 VPS,请自行在安全组 (防火墙) 开放端口和 UDP 协议 (如果你要使用含有 mKCP 的传输协议)

备份

为了避免由于不可抗拒的原因所造成本人主动删除脚本,所以建议请将本脚本 Fork 一份
备份地址: https://github.com/233boy/v2ray/fork
安装方法,确保你已经 Fork 了脚本,将 233boy 修改成你的 Github 用户名

git clone https://github.com/233boy/v2ray
cd v2ray
chmod +x install.sh
./install.sh local

如果提示 git 命令不可用,那就自己安装咯,不会安装啊?我也不知道啊。哈哈

及时更新脚本

为确保你能愉快使用,请留意使用 v2ray update.sh 命令来更新管理脚本。
脚本难免会有 BUG,所以建议有空就检查一下更新情况。

关注脚本最新动态

本人会在 本站 Telegram 公告频道 推送脚本最新动态相关,如果你使用 Telegram 的话,可以关注一下。
当然啦,你也可以加入 本站 Telegram 群组 来吹水。

资助 V2Ray

如果你觉得 V2Ray 很好用,能解决你的某些问题,请考虑 资助 V2Ray 发展 。

感谢

V2Ray: https://www.v2ray.com/

版权

此脚本使用 GPL v3 协议共享。

分享

如果觉得脚本好用,记得分享给你的其他小伙伴们哦~

其他

请勿违反国家法律法规,否则后果自负!
使用一键脚本并不会害了你,并且会让你节省大量的时间,工具从来都是为了更快的解决问题。

搭建Git服务器

下载安装 git

Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服务器。

安装依赖库和编译工具
为了后续安装能正常进行,我们先来安装一些相关依赖库和编译工具

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

安装编译工具

yum install gcc perl-ExtUtils-MakeMaker

下载 git

选一个目录,用来放下载下来的安装包,这里将安装包放在 /usr/local/src 目录里

cd /usr/local/src

到官网找一个新版稳定的源码包下载到 /usr/local/src 文件夹里

wget https://www.kernel.org/pub/software/scm/git/git-2.10.0.tar.gz

解压和编译

解压下载的源码包

tar -zvxf git-2.10.0.tar.gz

解压后进入 git-2.10.0 文件夹

cd git-2.10.0

执行编译

make all prefix=/usr/local/git

编译完成后, 安装到 /usr/local/git 目录下

make install prefix=/usr/local/git

配置环境变量

将 git 目录加入 PATH
将原来的 PATH 指向目录修改为现在的目录

echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc

生效环境变量

source /etc/bashrc

此时我们能查看 git 版本号,说明我们已经安装成功了。

git --version

创建 git 账号密码

为我们刚刚搭建好的 git 创建一个账号

useradd -m gituser

为这个账号设置密码

passwd gituser

控制台输入创建密码后,输入您自定义的密码,并二次确认。

初始化 git 仓库并配置用户权限

创建 git 仓库并初始化

我们创建 /data/repositories 目录用于存放 git 仓库

mkdir -p /data/repositories

创建好后,初始化这个仓库

cd /data/repositories/ && git init --bare test.git

配置用户权限

给 git 仓库目录设置用户和用户组并设置权限

chown -R gituser:gituser /data/repositories
chmod 755 /data/repositories

[查找 git-shell 所在目录] , 编辑 /etc/passwd 文件,将最后一行关于 gituser 的登录 shell 配置改为 git-shell 的目录如下

示例代码:/etc/passwd
gituser:x:500:500::/home/gituser:/usr/local/git/bin/git-shell

如果按照刚才的步骤执行, 这个位置应该是 /usr/local/git/bin/git-shell, 否则请通过 which git-shell 命令查看位置

安全目的, 限制 git 账号的 ssh 连接只能是登录 git-shell
使用搭建好的 Git 服务
克隆 test repo 到本地

cd ~ && git clone gituser@<您的 CVM IP 地址>:/data/repositories/test.git

恭喜,Git 服务器搭建完成, 从此以后你可以方便地将你的本地代码提交到 Git 服务器托管了

date: 2019-05-28 17:25:03
这部分是当初公司让我做 openstack、云概念的分享写的草稿,后来因为时间问题分享黄了。大部分内容是说给非技术人员听的


云计算 公有云 私有云 混合云

服务提供商的由来 云计算

资源的动态分配

云计算提出的愿景,是要构建一个自来水厂,而不需要每家每户打井取水,只要通过水管和电线便可享受专业的更高水平的水电服务,且按需付费,若短期突然要大量用水用电,也无需担心资源不足,用多用少可自主决定。

云计算服务提供商建设好大规模的IT基础设施,通过互联网(网线或无线)为企业提供服务器(虚拟机)、存储、应用程序等的租用,企业无需自己再建设IT基础设施,便可享受专业的更高水平的IT服务,且按需付费。

若短期内业务访问量暴增(如双11)需要更多的计算资源,也无需担心云计算服务提供商的资源不足,资源的租用可根据使用情况自动伸缩,企业只需按实际使用量付费即可。

这就是公有云,微软Azure、亚马逊AWS、阿里云、腾讯云便是公有云提供商,提供云计算服务。

公有云

公有云顾名思义,它是公开对外销售的。

任何人都可以租用他们的云服务,他们的规模可以做得非常大。亚马逊的AWS服务的年营收高达174.6亿美元,而且还在高速增长中。相应的,这些租用客户的数据存在公有云厂商的服务器上,就会存在着保密问题。

私有云

而私有云虽然也是云计算,但是私有云并不对外提供服务。

而是由私有云的所有者自己使用。一般来说,只有对保密性有很高要求,或者本身业务规模比较庞大的机构才会建设私有云。比如政府机构,大型企业集团等。比如我国各地纷纷建立的政务云就是典型的私有云产品。

混合云

私有云虽然安全,但是成本还是比较高。

于是另外一种综合了公有云与私有云优点的混合云业务发展起来了。比如铁道部的12306,在高峰时期会租用阿里云来提升自己对外服务的能力,这个时候的12306系统就是一个混合云。
混合云可以做到将保密的核心数据存放在私有云上,而将对外服务提供用户访问的部分放在公有云上。

比方

如果用住酒店来描述

  • 张三天天住家里,是私有云
  • 李四天天住酒店,一般住单间,心情好就换大套间,这叫公有云
  • 某一天张三家来了十来个客人,这是业务突增,家里睡不了那么多人,带着大家去酒店开房,这是私有云转公有云。
  • 然后王五比较牛叉,在酒店有个固定包间,不对外开放,这是托管型私有云(专有云)。包间就好比云数据中心的托管服务器

房间所以按租收费,随意调整大小弹性扩容

随着云计算的流行,很多本来通过互联网提供服务的东西都改名跟云扯上关系,如:

  • 网络硬盘改名为云盘
  • 网站主机改名为云主机
  • 流媒体改名为云播放
  • 以及什么云输入法
  • 云阅读
  • 云音乐

照这样说的话,一早就有的搜索引擎更加是云计算服务了。
发展趋势:趋向于基础功能免费、高级功能收费。

OpenStack历史

OpenStack 是NASARackspace合作研发的云计算软件,以Apache授权条款授权,并且是自由和开放源代码软件。

是一系列开源软件项目的组合,这些项目之间是松耦合关系,它们可以独立安装,启动,停止,只有在必要的时候才进行通讯。

  • 好处是安全性高,不会存在单点故障
  • 缺点是安装和配置比较复杂

OpenStack是基础设施即服务(IaaS)软件,让任何人都可以自行创建和提供云计算服务。
可以是我们以集中的方式有效的管理,CPU,硬盘,内存,网络等这些资源

我们把传统的资源管理方式比作为打井取水的话,那openstack就是自来水厂,让我们以按需的方式获取所需要的资源,而不是每家每户去打一口井,
当然自来水厂,想向每家每户提供自来水,都需要自来水管道一样,openstack它向用户提供计算机资源的基础,就是计算机网络,当然对于绝大公司来说,
目前的网络都不成问题。

OpenStack是什么?

OpenStack是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过web接口让最终用户部署资源。

OpenStack系统由几个关键服务组成,它们可以单独安装。这些服务根据你的云需求工作在一起。
这些服务包括计算服务、认证服务、网络服务、镜像服务、块存储服务、对象存储服务、计量服务、编排服务和数据库服务。可以独立安装这些服务、独自配置它们或者连接成一个整体。

OpenStack组件

OpenStack能做什么

Horizon(dashboard)

  • 用于管理Openstack各种服务的、基于web的管理接口
  • 通过图形界面实现创建用户、管理网络、启动实例等操作
    ### Nova
  • 在节点上用于管理虚拟机的服务
  • Nova是一个分布式的服务,能够与Keystone交互实现认证,与Glance交互实现镜像管理
  • Nova被设计成在标准硬件上能够进行水平扩展
  • 启动实例时,如果有需要则下载镜像
    ### Keystone
  • 为其他服务提供认证和授权的集中身份管理服务
  • 也提供了集中的目录服务
  • 支持多种身份认证模式,如果密码认证、令牌认证、以及AWS(亚马逊Web服务)登陆
  • 为用户和其他服务提供了SSO认证服务

Neutron

  • 一种软件定义网络服务
  • 用于创建网络、子网、路由器、管理浮动IP地址
  • 可以实现虚拟交换机、虚拟路由器
  • 可用于在项目中创建VPN

Cinder

  • 为虚拟机管理存储卷的服务
  • 为运行在Nova中的实例提供永久的块存储
  • 可以通过快照进行数据备份
  • 经常应用在实例存储环境中,如果数据库文件

Glance

  • 扮演虚拟机镜像注册的角色
  • 允许用户为直接存储拷贝服务器镜像
  • 这些镜像可以用于新建虚拟机的模板

扩展 - k8s & docker

docker(集群 swarm) -> k8s
Swarm模式概述

openstack & k8s

openstack 是一个云操作系统,
通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过web接口让最终用户部署资源。

简单理解:

  • 可以把它类比公有云,它将各种基础资源虚拟化,并提供简化的方式去管理。偏向IAAS服务
  • kubenretes 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。简单理解: 容器编排,管理多机的容器状态. 偏向PAAS服务

kubernetes & spring cloud

容器 & 虚拟机

命令行下安装 oracle 11gR2 数据库

date: 2019.01.17 15:36

Centos linux系统 命令行(静默)安装oracle 11gR2

参考

修改 hostname db / hosts文件

10.10.0.48   db

修改内核参数

/etc/sysctl.conf

#vim /etc/sysctl.conf  
net.ipv4.ip_local_port_range= 9000 65500 
fs.file-max = 6815744 
kernel.shmall = 10523004 
kernel.shmmax = 6465333657 
kernel.shmmni = 4096 
kernel.sem = 250 32000 100128 
net.core.rmem_default=262144 
net.core.wmem_default=262144 
net.core.rmem_max=4194304 
net.core.wmem_max=1048576 
fs.aio-max-nr = 1048576
# sysctl -p  #使配置生效

用户的限制文件/etc/security/limits.conf

oracle           soft    nproc           2047
oracle           hard    nproc           16384
oracle           soft    nofile          1024
oracle           hard    nofile          65536
oracle           soft    stack           10240

修改/etc/pam.d/login文件,增加如下:

session  required   /lib64/security/pam_limits.so  //64为系统,千万别写成/lib/security/pam_limits.so,否则导致无法登录
session  required   pam_limits.so

创建用户及组

//创建用户及组
# groupadd oinstall 
# groupadd dba
# useradd -g oinstall -G dba -d /home/u11 oracle
# passwd oracle

//创建安装目录
# mkdir -p /opt/app/oracle/product/11.2.0/db_1

//数据文件存放目录
# mkdir -p /opt/app/oracle/oradata

//数据恢复目录
# mkdir -p /opt/app/oracle/recovery_area

//数据库创建及使用过程中的日志目录
# mkdir -p /opt/app/oracle/oraInventory

####################

//修改安装目录权限
#chown -R oracle:oinstall /opt/app/oracle
#chmod 775 /opt/app/oracle

登录oracle用户,设置环境变量

#su - oracle

view .bash_profile //这里我修改为/etc/profile

export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin

export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64:/usr/local/lib64
export ORACLE_SID=cgw

//如果设置NLS_LANG,容易产生导入sql或dmp出错,因为其他环境下的不是utf8
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

//监听服务创建是为了后面静默安装用的
export DISPLAY=127.0.0.1:1.0 

使设置生效

source .bash_profile // 我为 /etc/profile

安装oracle

安装依赖包

# yum -y install gcc gcc-c++ make binutilscompat-libstdc++-33 elfutils-libelf elfutils-libelf-develglibc glibc-commonglibc-devel libaio libaio-devel libgcclibstdc++libstdc++-devel unixODBC unixODBC-devel ksh

# yum -y installbinutils compat-libstdc++-33 compat-libstdc++-33.i686 
elfutils-libelfelfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common 
glibc-devel glibc-devel.i686glibc-headers ksh libaio libaio.i686 libaio-devel 
libaio-devel.i686 libgcclibgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make 
sysstat unixODBC unixODBC-devel

解压安装包

unzip 两个包,在oracle用户下在 /home/u11 下面

数据库安装

路径: /databases/response

  • db_install.rsp 安装应答配置文件
  • dbca.rsp 创建数据库应答
  • netca.rsp 建立监听、本地服务名等网络设置应答

修改配置文件db_install.rsp,并安装

下面把主要修改的地方贴出来,具体详细文件,请查看另一篇文章:Oracle 11gR2 db_install.rsp详解

oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=db
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/opt/app/oracle/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1
ORACLE_BASE=/opt/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oinstall
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/opt/app/oracle/oradata
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/opt/app/oracle/recovery_data
DECLINE_SECURITY_UPDATES=true    //一定要设为true

报错:DISPLAY environment variable not set! Oracle Net Configuration Assistan .处理:export DISPLAY=127.0.0.1:1.0 (上面已经处理了)

登录oracle用户,执行安装

在解压路径下:/database/response路径下

./runInstaller -silent -responseFile /home/u11/database/response/db_install.rsp 
## 安装过程中,如果提示[WARNING]不必理会,此时安装程序仍在进行,如果出现[FATAL],则安装程序已经停止了。
## 打开另一个终端,执行命令
tail -100 f /u01/app/oracle/oraInventory/logs/installActions......log
 

## 可以实时跟踪查看安装日志,了解安装的进度。
## 当出现


  以下配置脚本需要以 "root" 用户的身份执行。
   #!/bin/sh
   #要运行的 Root 脚本

  /u01/app/oracle/oraInventory/orainstRoot.sh
  /u01/app/oracle/product/11.2.0/db_1/root.sh
  要执行配置脚本, 请执行以下操作:
     1. 打开一个终端窗口
     2. 以 "root" 身份登录
     3. 运行脚本
     4. 返回此窗口并按 "Enter" 键继续

  Successfully Setup Software.

 

## 出现这个的话,说明已安装成功,则需要按提示操作,操作完返回Enter成功

缺包

Error: libXext.so.6: cannot open shared object file: No such file or directory

yum install libXext.x86_64 libXrender.x86_64 libXtst.x86_64

静默安装Oracle 11g过程中提示:Exception in thread "main" java.lang.NoClassDefFoundError

https://my.oschina.net/siiiso/blog/809173

unset DISPLAY

配置监听配置文件 response/netca.rsp

  • 命令netca path:$ORACLE_HOME/bin
  • netca.rsp path: /home/u11/database/response/netca.rsp
netca -silent -responsefile response/netca.rsp

正在对命令行参数进行语法分析:
 参数"silent" = true
 参数"responsefile" = /home/oracle/response/netca.rsp
 完成对命令行参数进行语法分析。
 Oracle Net Services 配置:
 完成概要文件配置。
 Oracle Net 监听程序启动:
  正在运行监听程序控制:
    /opt/oracle/11.2.0/bin/lsnrctl start LISTENER
  监听程序控制完成。
  监听程序已成功启动。
 监听程序配置完成。
 成功完成 Oracle Net Services 配置

## 成功运行后,在/opt/oracle/11.2.0/network/admin目录下生成sqlnet.ora和listener.ora两个文件。
## 完成后通过命令“netstat -tlnp”可以查看到1521端口已开
tcp  0   0 :::1521        :::*      LISTEN      5477/tnslsnr

修改配置文件response/dbca.rsp,静默建立新库

 RESPONSEFILE_VERSION = "11.2.0"  ## 不能更改
 OPERATION_TYPE = "createDatabase"
 GDBNAME = "hello.dlxg.gov.cn"  ## 全局数据库的名字=SID+主机域名
 SID = "hello"    ## 对应的实例名字
 TEMPLATENAME = "General_Purpose.dbc" ## 建库用的模板文件
 DATAFILEDESTINATION = /opt/oracle/oradata ## 数据文件存放目录
 RECOVERYAREADESTINATION=/opt/oracle/recovery_data ## 恢复数据存放目录
 CHARACTERSET = "AL32UTF8"   ## 字符集,重要!!! 建库后一般不能更改,所以建库前要确定清楚。
 TOTALMEMORY = "5120"    ## oracle内存5120MB

配置完之后,执行命令

dbca -silent -responseFile /etc/dbca.rsp 
## 注意,这里我用的时候很奇怪,界面光标往回走的,我改用这个,这个就没有使用上面的配置文件
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbName test -sysPassword oracle -systemPassword oracl

1% 已完成
3% 已完成
11% 已完成
18% 已完成
26% 已完成
37% 已完成
正在创建并启动 Oracle 实例
40% 已完成
45% 已完成
50% 已完成
55% 已完成
56% 已完成
60% 已完成
62% 已完成
正在进行数据库创建
66% 已完成
70% 已完成
73% 已完成
85% 已完成
96% 已完成
100% 已完成
有关详细信息, 请参阅日志文件 "/u01/app/oracle/cfgtoollogs/dbca/wang/wang.log"。
 
查看日志文件
$ cat /u01/app/oracle/cfgtoollogs/dbca/wang/wang.log

ORA-12528: TNS Listener: all appropriate instances are blocking new connections. Instance “CLRExtProc”, status UNKNOWN

https://stackoverflow.com/questions/23743910/ora-12528-tns-listener-all-appropriate-instances-are-blocking-new-connections

set ORACLE_SID=<YOUR_SID> 
sqlplus "/as sysdba"
alter system disable restricted session;

eg : set ORACLE_SID=oracle

or maybe

shutdown abort;

or maybe

lsnrctl stop
lsnrctl start

登陆连接

  • sid:oracle
  • username: system
  • password: oracle

navicat connect oracle fail

TNS: no listen 什么鬼的没有监听到

找到 listener.ora,存放位置一般在

cd $ORACLE_HOME/network/admin ## 这个目录下
cp listener.ora listener.ora.bak
vim listener.ora

清空内容,复制下面内容

LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=sale-server)(PORT=1521))
      (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=sales.us.acme.com)
      (ORACLE_HOME=/oracle10g)
      (SID_NAME=sales))
    (SID_DESC=
      (SID_NAME=plsextproc)
      (ORACLE_HOME=/oracle10g)
      (PROGRAM=extproc)))

文件组成部分

  • listener的名称
  • listener接受连接的协议地址
  • 数据库服务名
  • Oracle8之后的版本有动态监听注册,可以不需要配置静态监听。但是Oracle官网说如果想要使用em需要配置静态监听
  • 控制参数

监听参数说明

协议地址部分

listener_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=hr-server)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)))
可选参数
QUEUESIZE:并发请求连接数
RECV_BUF_SIZE,SEND_BUF_SIZE
示例
listener_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=hr-server)(PORT=1521)(RECV_BUF_SIZE=11784)(SEND_BUF_SIZE=11280))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)(QUEUESIZE=20)))

静态监听部分

静态监听就是SID_LIST_xxx节点下的配置,最简单的配置如下

SID_LIST_listener_name=
(SID_LIST= 
(SID_DESC=...)
(SID_DESC=...))
可允许的参数
  • ENVS环境变量键值对
  • GLOBAL_DBNAME:对外提供的网络服务名
  • ORACLE_HOME
  • PROGRAM:用来标识服务可执行程序,最常用的PROGRAM=extproc
  • SID_NAME: Oracle System Identifier (SID)
  • SDU: session data unit
示例配置
SID_LIST_listener_name=
(SID_LIST= 
(SID_DESC=
(SDU=2085)
(GLOBAL_DBNAME=sales.us.acme.com)
(SID_NAME=sales)
(ORACLE_HOME=/usr/oracle)(ENVS="LD_LIBRARY_PATH=/private/xpm/lib:/private/mylibs,MYPATH=/usr/ucb:/usr/local/packages,APL_ENV_FILE=/apl/conf/env.txt")))

控制参数部分(基本不需要配置)

 - ADMIN_RESTRICTIONS_listener_name #主要用来保护lsnrctl命令下,对没有使用密码保护的listener的更改,设置了on之后,就不允许在命令行动态的更改参数配置,只有stop,start才行。
 - INBOUND_CONNECT_TIMEOUT_listener_name #连接超时
 - LOG_DIRECTORY_listener_name #日志路径
 - LOG_FILE_listener_name #日志名称
 - LOGGING_listener_name #是否记录日志
 - PASSWORDS_listener_name #listener的密码
 - SAVE_CONFIG_ON_STOP_listener_name # 关闭监听的时候是否保存配置
 - SSL_CLIENT_AUTHENTICATION #ssl认证

STARTUP_WAIT_TIME_listener_name
TRACE_DIRECTORY_listener_name
TRACE_FILE_listener_name
TRACE_FILELEN_listener_name
TRACE_FILENO_listener_name
TRACE_LEVEL_listener_name
TRACE_TIMESTAMP_listener_name
WALLET_LOCATION

Nginx 搭建文档 - Centos7

以Centos 7 为例

Edit yum's aliyun源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache #生成缓存

Yum command

yum update  ## Update all rpm packages
yum upgrade ## 大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级

Install some softs and the environment

mkdir app backup download logs work  # 这里是自己的习惯的目录结构
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim

yum list | grep gcc

Install nginx

link: https://nginx.org/en/download.html

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
  • create a file of nginx by yum in vim
vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
  • install
yum list | grep nginx
## You can find the nginx app

yum install nginx

Installed nginx

ngxin -v  # view the version
systemctl start nginx.service
systemctl restart nginx.servcice
systemctl reload nginx.service

查看nginx安装目录

rpm -ql nginx

安装目录

路径 类型 作用
/etc/logrotate.d/nginx 配置文件 Nginx日志轮转,用于logrotate服务的日志切割
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf
/etc/nginx/conf.d 目录、配置文件 Nginx主配置文件
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params 配置文件 cgi配置相关,fascgi配置
/etc/nginx/uwsgi_params
/etc/nginx/scgi_params
/etc/nginx/koi-utf 配置文件 编码转换映射转化文件
/etc/nginx/koi-win
/etc/nginx/win-utf
/etc/nginx/mime.types 配置文件 设置http协议的COntent-type与扩展名对应关系
路径 类型 作用
/usr/lib/systemd/system/nginx-debug.service 配置文件 用于配置出系统守护进程管理器管理方式
/usr/lib/systemd/system/nginx.service
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib64/nginx/modules 目录 Nginx模块目录
/etc/nginx/modules
/usr/sbin/nginx 命令 Nginx服务启动管理的终端命令
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.12.0 文件目录 Nginx的手册和帮助文件
/usr/share/doc/nginx-1.12.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/var/cache/nginx 目录 Nginx的缓存目录
/var/log/nginx 目录 Nginx的日志目录

reference

将Centos的yum源更换为国内的阿里云源
nginx: download
nginx: Linux packages

多个git账号的SSH key切换

摘自:多github帐号的SSH key切换

大纲

  1. 根据需要创建两个别名的ssh key
  2. 新密钥添加到SSH agent中
  3. 创建 config 配置文件
  4. 分别测试

细节

创建 ssh key 时起个名字

不要一路回车了,给这个文件起一个名字 不然默认的话就覆盖了之前生成的第一个

$ ssh-keygen -o -t rsa -b 4096 -C "[email protected]"

Generating public/private rsa key pair.

( 起个名字 ) Enter file in which to save the key (/c/Users/anan/.ssh/id_rsa): facebook 


Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in facebook.
Your public key has been saved in facebook.pub.
The key fingerprint is:
SHA256:fYY3j8+sQocxaCUw2O2AhknZhnww9RNo5dhaNUIDTs4 [email protected]
The key's randomart image is:
+---[RSA 4096]----+
| o+O+OOoo        |
|  **X=o*o..      |
|   =E *o +       |
|     o .+.o.     |
|    .  .S o+=    |
|          o+.+   |
|         . .. .  |
|          .  +   |
|           ...+  |
+----[SHA256]-----+

重复操作,分别创建了 facebookgoogle,得到四个文件

$ cd .ssh
$ ls

  google
  google.pub
  facebook
  facebook.pub

新密钥添加到SSH agent中

因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中:

ssh-add ~/.ssh/google(这是一个例子,不要**照抄)
ssh-add ~/.ssh/facebook(这是一个例子,不要**照抄)

如果出现 Could not open a connection to your authentication agent 的错误,就试着用以下命令:

ssh-agent bash
ssh-add ~/.ssh/google(这是一个例子,不要**照抄)

创建 config 配置文件

# 该文件用于配置私钥对应的服务器
# Default github user([email protected])

Host facebook.com
 HostName facebook.com
 User git
 IdentityFile C:/Users/Administrator/.ssh/facebook

# second user([email protected]) # 建一个github别名,新建的帐号使用这个别名做克隆和更新

Host google
 HostName google.com
 User git
 IdentityFile C:/Users/Administrator/.ssh/google

测试

$ ssh -T [email protected]
Hi anan! You've successfully authenticated, but GitHub does not provide shell access.

arch安装笔记

安装日志:arch安装 - 日志

——(2)为解决问题(不定期更新)

2015年1月29日

下午,心血来潮,决定试着在装一次arch。
基本装完界面后,找到竹子。在大神的帮助下,开始解决之前不能解决的问题以下的出现的问题,及解决办法:

Q:pacman -S sudo后,发现 sudo 不能用。出现提示:“不在SUDOERS文件中,此事将被报告。”

nano /etc/sudoers  找到 
## Same thing without a password#  %wheel ALL=(ALL) NOPASSWD:ALL

取消“ #  %wheel ALL=(ALL) NOPASSWD:ALL”前面的“#”。

%wheel:表示一个组的名称

前提是你必须在这个用户组,如果不是过不确定,那就改成“你的名字”

eg: “rabbit ALL=(ALL) NOPASSWD:ALL”  ,将“%wheel”改成“rabbit”,“%wheel”是一个用户组。

重启ARCH后不能上网

sudo dhcpcd wlp3s0   ##(wlp3s0是我的无线网卡)。

【前提是你在重启前安装了dialog,“pacman -S  dialog”】
若提示 NetworkManager的问题,意为“启动网络管理器”。则

sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager

Q:添加ARCHLINUXCN源
可参考 Archlinux CN 镜像源使用帮助Arch Linux 中文社区仓库 / 镜像加速源

nano /etc/pacman.conf
在 /etc/pacman.conf 文件末尾添加两行:

[archlinuxcn]
SigLevel = Optional TrustAll
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

然后请安装 archlinuxcn-keyring 包以导入 GPG key。
具体做法为:

pacman -Syu   (刷新源)
pacman -S archlinuxcn-keyring (安装archlinuxcn-keyring)

Q:安装YAOURT  (前提,建议先添加ARCHLINUXCN源)


sudo pacman -S yaourt

注: 若是找不到wine软件,则 nano /etc/pacman.conf 找到

Include = /etc/pacman.d/mirrorlist

取消注释,再刷新一下,如果想找软件,yaourt  描述如果想安装软件

yaourt -S 包名

记得“ yaourt -Syu ”一下

Q: 安装CHROME (前提,已安装YAOURT)

yaourt -S google-chrome

Q:安装搜狗输入法

yaourt sogou

安装过程中遇到编辑 ,回车忽略。一般来说,aur的内容不需要编辑。

然后安装“fcitx-qt5”和 kcm-fcitx(如果不是kde桌面,就不用安装kcm-fcitx)
**注:**记得卸载ibus 命令:

yaourt -Rscn ibus

附带依赖和配置文件,都删除


启动输入法:
记得安装“ ttf-dejavu
配置:参考“wiki.archlinux.org”,nano /.xprofile     文尾加入

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=”@im=fcitx”

重启电脑,完成

Q:安装WINE

yaourt -S wine-staging ##(听说目前的测试版比较稳定)

Q:安装WINEQQ(这里使用“百度  清风博主 WINEQQ”)参考“https://phpcj.org/wineqq/


第一步,安装wine
第二步,找到下载的安装包(tar.xz)的路径
终端使用“cd”一直不断进入到安装包所在的文件夹下,在该文件夹下输入:

tar xvf wineQQ8.1O17216.tar.xz -C ~/

*** 原文为:“~ $tar xvf wineQQ8.1O17216.tar.xz -C ~/” 中的“~$”为普通用户,“~#”为root下。***

Q: 安装深度影音,深度影院


yaourt deepin

在里面自己找,有music 、moive就是了。安装多个可以用空格隔开,如:1 3 5 52


深度影院安装后会出现打不开现象,终端执行:

deepin-movie

查看里面什么没有组建没安装,如“XXXX is not installed”下图:

google了一下这个module,加上了arch。然后搜到arch的仓库。
可得,执行

yaourt -S qt5-quickcontrols

Q:修改GNOME桌面的样式,3.18已经不支持修改CSS来更换


下载gnome-tweak-tools 优化工具,然后在“扩展-user them-启动”,重启优化工具,进入“外观-主题”选择你已经下载的主题

Q:字体好奇怪,装完了文泉驿字体也是好奇怪。


**nano /etc/pacman.conf **把下面的内容添加进去

[infinality-bundle]
SigLevel = Never
Server= http://bohoomil.com/repo/$arch

[infinality-bundle-multilib]
SigLevel = Never
Server= http://bohoomil.com/repo/multilib/$arch

[infinality-bundle-fonts]
SigLevel = Never
Server= http://bohoomil.com/repo/fonts

然后保存,并执行

sudo pacman -Syu infinality-bundle infinality-bundle-multilib ibfonts-meta-extended

因为是打补丁,所以会出现很多冲突,全部选择删除

Q:添加WIN7启动项


yaourt -S os-prober
sudo grub-mkconfig -o /boot/grub/grub.cfg

可能出现“无法获取某些文件”,便多重试几次,这个网站是外国的,网速连接慢……(竹子说他曾经重试了十次)


推荐将win下的字体复制到“.fonts”。路径为“/home/你的用户名/.fonts”,该文件夹默认隐藏(“.”就是隐藏的意思)然后刷新字体缓存,

sudo fc-cache -fsv

Q:GNOME3.18的桌面,将任务放到右上角(如UBUNTU一样)


yaourt topicon

安装后,重启一下优化工具,“扩展-User themes”的上面就会出现“topicons”选项,启动它。
然后,键盘“alt+f2” ,输入“r”,回车。
注:优化工具不会自动刷新的


Q:安装DEEPIN桌面环境(参考“ WIKI.ARCHLINUX.ORG ”)搜索“ DEEPIN DESKTOP ENVIRONMENT ”

pacman -S deepin deepin-extra

注:启动Deepin 桌面环境,使用登录管理器

deepin默认lightdm greeter是lightdm-deepin-greeter,可通过pacman安装,安装后需编辑lightdm.conf:

sudo nano /etc/lightdm/lightdm.conf

然后找到,并修改

[SeatDefaults]
…
greeter-session=lightdm-deepin-greeter

之后终端执行

systemctl enable lightdm -f

重启


在进入deepin桌面后,可能出现设置部分英文现象。
终端执行

nano ~/.pam_environment

en_US 改成 zh_CN
两行都要,然后注销

Q:安装ZSH

yaourt -S zsh oh-my-zsh-git

安装完毕后会有让你cp一个文件,复制一下哪个命令

cp /usr/share/oh-my-zsh/zshrc ~/.zshrc

然后输入“ chsh ”
输入密码
输入“ /bin/zsh ”


每次进入终端,输入zsh后,会出现“ ~ ” ,说明进入zsh了,双击tab可补全命令。

Q:删除base软件包组以外的所有软件包

参考网址

pacman -Rs $(comm -23 <(pacman -Qeq|sort) <((for i in $(pacman -Qqg base); do pactree -ul $i; done)|sort -u|cut -d ' ' -f 1))

帖子来源

Q:激活“ KEYBOARD SHORTCUTS ”(传说中的魔术键),参考“HTTPS://WIKI.ARCHLINUX.ORG/INDEX.PHP/KEYBOARD_SHORTCUTS”**

终端输入将临时启用

sysctl kernel.sysrq=1

或是

echo “1” > /proc/sys/kernel/sysrq

希望在系统启动时就开启,编辑“/etc/sysctl.d/99-sysctl.conf”文件

nano /etc/sysctl.d/99-sysctl.conf

文件中输入

kernel.sysrq = 1

保存

注: 记住这个激活命令的通用口诀是 “Reboot Even If System Utterly Broken” (或者”REISUB”)。

 最后更新于2016年3月15日

《游戏性是什么》9. 专注游戏的原因

date: 2016-06-08

在人专注于游戏的机制中,动机是重要的因素。那么,应该如何维持这种动机?这个领域目前有哪些先行研究?这些研究有该如何应用到游戏中?

——《游戏性是什么》第9章

游戏是符号化的现实世界

至此,已经从“身体”、“视角”、“世界”、“触觉”4个角度分析了认识如何认知“作为符号集合体的游戏”,优势如何进行游戏的。

可以说,这些与“游戏和认知之间的关系”密不可分。

因为人正是在对各种因素进行认知的基础上,才能够理解游戏、娱乐游戏的。

从之前的研究可以看到,“人与现实世界的关联方式”与“玩家与游戏内世界的关联方式”没有本质区别。

也就是说,我们可以认为游戏是符号化现实世界。

在理解了这一点之后,从本章开始将研究“游戏的基本构成要素”的相关问题。

刺激和反应

人在持续某种行为时,在作为行为结果的“报酬”以及行为本身之中,都会存在某种“动机”。

在工业革命之后,工厂劳动者增加了,但劳动积极性的下降和厌倦情绪的滋生等新的社会问题也随之出现,在这样的背景下,就出现了各种关于动机的研究。

其中,有个著名的古典研究,就是由“巴甫洛夫的狗”所代表的、从心理学中的行动主义方面所做的研究。

在这个试验中,人在给狗吃饵料的时候会晃动铃铛。此后,狗只要一听到铃铛声,就会开始流口水。

心理学领域一次研究为基础,探求出了人行动方面的相关机制,即人的行为被附加一些有利条件,积极性和持续性就会高涨,若给予惩罚,行动意愿就会降低。

因此就出现了这样的构想:如果能够灵活运用“糖和鞭子”,就有可能实现动机的维持与管理。

根据报酬和惩罚来控制行动等,都是证明这种构想的例证。这也可以说是“刺激和反应”机制的反复应用。

像老虎机等游戏机,以及赌博等都是“刺激和反应”机制的灵活运用。卡牌游戏中的扭蛋机制也是这个意思。

不过扭蛋并不属于实质性的报酬,从扭蛋中可能获得的稀有游戏物品才是报酬,在这一点上还是存在差异的。

然而,还是有意资额明知违反规则,确认会使用现金交易稀有物品的玩家。

基于“刺激和反应”机制所产生的快感,是在用户无意识间产生作用的,若长时间反复可能会产生依赖性,届时再中断这种机制,可能会产生一些不适应和副作用。沉迷游戏而导致睡眠不足、疲劳等症状的“游戏依存症”,也可以置于此种机制背景下来考察。

目标和评价

人都有“只要努力就能得到什么”的期待感。

实际上,当人获得与自身努力相符合的品附加和报酬时,人的行为就能够继续持续下去。

也就是说,当目标和评价之间的平衡处于比较恰当的状态时,动机会很高。想必很多人的日常感受也是如此。

很多游戏中也是如此,不断地重复问题的设定和解决。这些问题既不会太简单也不会太难。如果游戏能够在难度上保持适度的平衡性,就可以维持住玩家的动机。这种思考方式,与之后要说的“心流理论”是相联系的。

麦克利兰的成就动机理论

随着时代的发展,动机的心理学的研究也走向了更深的层次。美国心理学家 戴维·麦克利兰(David McClelland) 的研究就是其中之一。麦克利兰首先将人类的需求进行了分类 。

  • 成就需求:向特定目标努力,获得成功的需求。

  • 权力需求:影响及控制他人的需求。

  • 亲和需求:建立良好的人际关系的需求。

  • 回避需求:回避失败和困难的需求。

紧接着他揭示了这些需求对人的动机产生的影响,会根据个体及个体文化背景的差异而不同。
社交网络的“点赞”功能,就是满足亲和需求结构的典型例子。在 MMORPG(大型多人在线角色扮演游戏) 这种具有社会性的游戏中,权力需求会在玩家动机方面产生一定影响。
这是由于游戏角色的等级越高,装备越好,就越能在游戏内产生更高的社会影响力。

马洛斯的需求层析理论

亚伯拉罕·马洛斯(Abraham Maslow) 假定了“人类是想着自我实现的目标不断成长的生物”,所以他将人类的需求从低到高分为5个阶段,即

  • 自我实现需求

  • 自尊需求

  • 归属和爱的需求

  • 安全需求

  • 生理需求

这种模型的特征,就是一个人一旦满足了下层需求,对满足上层需求的渴望就会增加。如果目前层次的需求没有满足,那么其上层的需求就毫无意义。例如,对一个快饿死的人讲自尊和自我实现就没有任何意义。

这个理论模型,多被用来说明MMORPG内玩家的行动。刚开始接触游戏的玩家,由于尚不能在游戏内做出恰当的行动,所以经常不经意间就挂了。因此玩家最初的目的就是生存下来( 生理需求 ),接着才会有安稳地进行游戏的需求( 安全需求 )。

当玩家在某种程度上习惯了游戏之后,就该开始结交朋友、加入公会(归属和爱的需求)。



此后,积累了足够多经验的玩家之中,就会出现一个公会的领导者(自尊需求)。同时,一些玩家还会制作并发布新的道具或地图(自我实现需求)。

因此,将这些要素有意识地融入游戏中,就能够进一步地延长游戏的寿命。另外,也正由于很多游戏都能比现实社会更容易满足人类的这些需求,人才会专注,设置沉迷于游戏。实际上,很多的MMORPG的设计中都包括了比现实社会更加容易成长、成功和获得成就的机制。

另外,不少游戏中玩家可以在游戏内自己制作道具,或者将制作出的道具分享给大家。这样的功能也能够满足玩家的自我实现需求。

心流理论

至此提及的研究,艘说明了人沉迷于游戏的原因的一方面。但对于人“持续”地玩游戏的说明还很不足。因此,近些年来将“持续性”作为焦点的研究引起大家的关注。这就是米哈里·契克森米哈(Mihaly Csikszentmihalyi)的心流理论

“心流”是指一种让人感觉到全身心投入的专注状态,“心流”并不仅限于游戏,还可以是电影、慢跑、登山、学习、工作等。(难易度)和行为所需要的必要能力(技能)。随后,研究发现当能够两者之间较好地维持平衡时,人就能够体会到“心流”。另外还发现,当玩家技能偏低,游戏难度偏高时,玩家就会感到不安和担心;(自己能行吗?会不会失败?)而技能偏高,游戏难度偏低时,玩家就会感到厌倦和其他不安情绪(更想做一些其他的事情,一直做这种事情真的好吗?)

契克森米哈随后又指出了心流体验的3个必要条件。

  • 存在明确的目标
  • 对挑战难度的认知与对自身技能理解间的平衡
  • 能得到某种即时性反馈

由此可见,心流理论中含有被众多游戏开发者提及的“游戏平衡性”中的诸多要素。

游戏的特征之一,就是玩家可以能动性地参与。反过来,为了让人持续玩下去,游戏就必须持续引导人发挥能动性。但是,人的本性都是追求快乐,而回避麻烦。这正是所有的游戏设计师每天都要面对的窘境。究竟应该如何做,才能够完美地使游戏保持平衡?心流理论,就为回答这个问题提供了启示。

电影脚本中的心流理论

心流理论并不是从无到有产生的,而是整合现实世界固有的事物和现象,进而体系化、理论化。正因为如此,有许多的游戏设计者并不了解心流理论,只是用符合心流理论的自己的独特感觉去制作游戏。同样的现象并不仅限于游戏,也可以在电影脚本中见到。例如《第一滴血2》,电影情节略。

兰博面临的问题难度在逐渐增大。这其实是导演为了引导观众容易将自己的感情带入到兰博身上的一种手法。虽然当人们重新回顾的时候,会觉得剧情展开有些荒谬,不过即使这样,当主人公在棉铃持续不断的艰难险阻时,观众还是会不由自主地将自身情感代入到主人公身上。

游戏中的心流理论(PS:【原书说得确实有点详细、啰嗦,以下删改】)

每一部游戏都是从简单到困难,先是玩家(小白)虐电脑(菜鸟),到后来为打小怪,然后打BOSS。接着,拿装备、升级、打难度较大的小怪、再升级、打大BOSS。只是击败boss时的战斗**和方式都各不相同罢了。

如此,游戏的模式设计为,随剧情的发展,

难易度和技能两方面都在逐渐增长。

小结

  • 目前动机研究中,已经存在诸多先行课题。
  • 心流理论是解释人专注、沉迷于某项事物的理论,此理论可以应用于包括游戏在内的多种娱乐媒体上。

摘自《游戏性是什么》第9章(专注于游戏的原因)喜欢这本书,

其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

总结:记录《游戏性是什么》

date: 2016-06-13

——内容摘选自《游戏性是什么》各章节

游戏和身体

  • 人类通过  Hand Regard 对身体感觉进行后天学习。
  • 身体感觉可以通过再次关联学习进行修正和扩展。
  • 游戏的操作对象,就是人类通过再次关联学习扩展的身体。

游戏和视角

通过观察,人在行走时将脚向前迈出,中心也向前倾斜。当重心倾斜时,为了不让自己摔倒就必须用脚支撑,因此,人每次只能向前迈出一步。也就是说,“行走”并不是单纯地脚的移动,而是

向特定方向移动重心。

为了追随身体重心的移动,脚就应该移动。如此一来,行走的本质为“在特定时间目标方向移动重心”。

  • 大脑能够在各种不同的场景下设定视角,能够根据视觉信息重新学习视角。
  • 在设计包括镜头在内的玩家扩展身体(玩家操作的游戏角色)时,为了让玩家更容易掌握,应该尽量让操作感觉和操作结果接近。

游戏和世界

  • 我们身处的世界可以分为作用空间和非作用空间。
  • 根据身体功能的不同,作用空间意义也不同。
  • 玩家通过进行游戏,理解限制身体、作用空间和非作用空间的区别,以及作用空间的意义。

游戏和触觉

  • 游戏是视觉媒体、听觉媒体所综合出的“触觉媒体”。
  • 玩家在进行游戏的同时,会加深对整个世界的认知。

专注于游戏的原因

  • 游戏是符号化的现实世界
  • 麦克利兰的成就动机理论、马洛斯的需求层析理论融入游戏的设计机制
  • 目前动机研究中,已经存在诸多先行课题。
  • 心流理论是解释人专注、沉迷于某项事物的理论,此理论可以应用于包括游戏在内的多种娱乐媒体上。

难易度平衡设计与效率预测

  • 效率预估型的平衡设计
  • 风险与时间成本的权衡
  • 效率预估,依照自身技能,在“高风险短时间”和“低风险长时间”中做出恰当的判断行为。

游戏设计的机制

  • 游戏性,是为了引导玩家进行效率预估的一种设计机制。
  • 引导玩家进行效率预估,以便于玩家通过实际的身体/限制身体认知目标世界,达成自己所设定目标的设计机制(游戏性),称为“Ludo”。
  • Ludo结构图,是整体平衡与单体平衡相互影响的复合性“挂铃”结构。
  • Ludo同样可以应用在游戏之外的内容中。

叙事和Narreme

  • 故事类型化的方法和研究有多种,其中一些影响了电影脚本的创作。
  • 叙事是由故事和叙述构成的,讲述行为也成了分析的对象。
  • 将构成游戏叙事的基本要素成为 Narreme。
  • Ludo 和 Narreme 互相影响,共同构成游戏。

结构

  • 游戏身处游戏平台结构和商业结构之中,这两种结构对游戏设计产生了诸多影响。
  • 游戏以及与游戏相关的各种结构,都受到技术革新的巨大影响。
  • 影响游戏体验的外部因素是结构
  • 结构是“无需让人们意识到被规则和价值规训”的结构和“独立于人的主观意识,但会影响和引导人的行为”的构造。

总结:游戏性是什么

从一名对游戏体验本身感兴趣的玩家的角度看待

不将现实世界和游戏世界做区分思考,而是将游戏世界视为现实世界的延伸,并且从人类自身的性质出发来分析游戏的吸引力和游戏性。

糸川英夫曾在《世界玩具大图鉴》上发表过相关文章。其中他介绍了一个非常有名的实验,即“蚂蚁用25%的时间工作,用75%的时间玩耍”,他是这样说的:

蚂蚁的那些乍一看并没有什么意义的玩耍行为,实际上是在对未来的变化做准备,是在学习各种情况来临时的应对能力。

蚂蚁们碰触蚁后的腹部,实际上是为了记住蚁后的气味,无论蚂蚁离开巢穴多远,它们都能够循着蚁后的味道归巢。

环境的变化是我们所无法预料到的,而能否应对环境的变化,则是一个关系着我们生存的至关重要的问题。

虽然蚂蚁75%的时间都偏离了运送食物的初衷,但这些玩耍时间也是使它们能够生存下去的必要部分。

人类和蚂蚁可以说是一样的。

那些一天24小时都用在工作上,没有时间玩耍和休闲的人,可能无法良好地应对环境的改变,而那些拥有充分时间玩耍的人,则能够灵活地应对改变,还能够开拓出具有创造性的生活方式。

因此,与其说像蚂蚁一样工作,不如说像蚂蚁一样玩耍。

——《玩耍权的回归》,糸川英夫,《世界玩具大图鉴:增刊太阳生活》,平凡社,1982年.

如果如糸川先生所说,“玩耍”是为了提高适应未来能力的行为,那么我们所说的“游戏”可能还没达到“玩耍”的程度。因为在大多数人的理解之中,游戏和现实世界是完全分离开的。

若从现实世界和游戏世界的交融点——人的身体和认知等方面出发,以多个角度研究游戏。“动机”是本书最终的关键词,恰当的挑战和难度,才能维持人的动机。而游戏通常是能够提供恰当挑战和难度的最合适的形式。

不必再认为“游戏只有着能让人沉迷其中的特殊魔力”了。游戏,不过是利用了现实世界中人本身专注于某事的机制。若能理解这一点,就会发现,或许是游戏让我们发现了这种“专注机制”。

从开发者的角度来看待

首先,什么是游戏?
这里的“游戏”指电子游戏

游戏就是:一个玩家可以从作用空间中进行效率预估并且能达成目标的人工制作出来的环境。

而开发这种环境的行为被称为: ** 游戏设计 **。

若将游戏世界视为现实世界的扩展,那么

游戏是符号化的现实世界
而在游戏中玩家控制的角色就是玩家在游戏世界中的身体扩展。

而,**游戏性,是为了引导玩家进行效率预估的一种设计机制。**引导玩家进行效率预估,以便于玩家通过实际的身体/限制身体认知目标世界,达成自己所设定目标的设计机制(游戏性)。

效率预估,依照自身技能,在“高风险短时间”和“低风险长时间”中做出恰当的判断行为。

正好符合“恰当的挑战和难度,才能维持人的动机。而游戏通常是能够提供恰当挑战和难度的最合适的形式。

这一动机理论的说法。心流理论是解释人专注、沉迷于某项事物的理论,此理论可以应用于包括游戏在内的多种娱乐媒体上。

极端概括来说,游戏性(Ludo)是游戏独特的“构造”,给这个构造赋予意识就是叙事性(Narreme)

Narreme是叙事的基本构成要素,即能让人感知到某种故事的符号。

Narreme和Ludo的组合可以激发人的想像力,让玩家感受到游戏更深层次的意义。

在初步了解专注游戏的原因后,进一步阐释了人接触游戏直到沉迷于游戏的整个过程。

探究人与游戏之间的关系,也给了我们一个重新研究大脑与外部环境间关系的契机。即人作为人之前只拥有大脑,大脑从我们出生的瞬间开始,就以与包含身体在内的“外部环境”的交互为线索,通过Hand Regard等方式来学习以及成长。

之后,交互行为的经验,就会以故事的片段,即以叙事的形式铭刻在我们的记忆中。通过关联叙事性的片段,我们来理解“人生”这个故事。这些记忆也会成为一种指导,作为继续生存下去的基础。

如果像这样继续论述下去的话,自然就能遇到一个新的概念研究。那就是行为与记忆的关系。这确实和探求游戏性时所得到的Ludo与Narreme的关系是相同的。


可能有点枯燥,但这真能从开发者的角度来学习看待问题的方式。

喜欢《游戏性是什么》这本书,其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

arch安装-日志

时间:2015.12.21~23
21日跟着视频在虚拟机上尝试了几遍。

22日早上,算是准备充分了,准备用物理机,以下是装机过程:(是我装机过程,并非教程。有流水账之嫌)

cfdisk /dev/sda

选择了一个盘,write、quit    我选了sda8

mkfs.ext4 /dev/sda8
mount /dev/sda8 /mnt
ifconfig
dhcpcd eno16777736

然后就出事了
eno16777736……是什么鬼,视频里就是这么写的,我在虚拟机也这么用,没事啊。
于是上网找了下,原来是无线网卡。
这可是物理机,我得想办法连上家里的wifi(就是因为这个才没在学校装的)

iw dev  //识别无线网卡
wifi-menu wlp3s0

进入一个界面,在里面设置了wifi密码

dhcpcd wlp3s0

在里面设置联网的镜像

echo > /etc/pacman.d/mirrorlist
nano /etc/pacman.d/mirrorlist

Server=[http://mirrors.aliyun.com/archlinux/](http://mirrors.aliyun.com/archlinux/)$repo/os/$arch

ctrl+x  //保存
y  //确定
回车

pacstrap /mnt base base-devel  //安装基本工具

安装grub和一些基本配置

genfstab -U -p /mnt >> /mnt/etc/fstab
arch-chroot /mnt
nano /etc/locale.gen

会出现很多东西
找到“ #en_US.UTF-8 UTF-8 ”,删掉前面的“##”
然后找到“ #zh_CN.UTF-8 UTF-8 ”,删掉前面的“##”
同样X保存,y确定
回车

locale-gen  //生成中英文locale
echo Arch > /etc/hostname
passwd  //设置你root的密码
pacman -S grub
grub-install /dev/sda –recheck

若是错误了,试试这个,至于为什么,我不清楚,反正是在wiki上看到有关uefi安装的命令,然后就填上去,没想成了

grub-install –target=i386-pc –recheck –debug /dev/sda

grub-mkconfig -o /boot/grub/grub.cfg
pacman -Syu

useradd -m -s /bin/bash rabbit    //这里的rabbit是我添加的普通用户名
passwd rabbit                     //设置rabbit的密码

pacman -Syu net-tools
pacman -S dialog  //超级注意,把这个装上,重启后联网会方便很多。
pacman -S wpa_supplicant dialog  //超级超级注意,保证新系统可以联网。
pacman -S rp-pppoe  //装上,有线上网时可通过pppoe设置。
systemctl enable dhcpcd
pacman -S sudo  //装个sudo,以示纪念

安装图形界面

pacman -S gnome
pacman -S gdm
systemctl enable gdm -f

配置ARCHLINUXCN源
参考“https://lug.ustc.edu.cn/wiki/mirrors/help/archlinuxcn”,
https://www.archlinuxcn.org/archlinux-cn-repo-and-mirror/

nano /etc/pacman.conf
在 /etc/pacman.conf 文件末尾添加两行:

[archlinuxcn]
SigLevel = Optional TrustAll
Server = [https://mirrors.ustc.edu.cn/archlinuxcn/](https://mirrors.ustc.edu.cn/archlinuxcn/)$arch

然后安装** archlinuxcn-keyring **包以导入 GPG key
具体做法为:

pacman -Syu (刷新源)
pacman -S archlinuxcn-keyring(安装archlinuxcn-keyring)

安装YAOURT (前提,建议先添加ARCHLINUXCN源)

sudo pacman -S yaourt

若是找不到wine软件,则nano /etc/pacman.conf
取消注释,再刷新一下,就有了
如果想找软件,yaourt 描述如果想安装软件yaourt -S 包名记得“yaourt -Syu”一下

安装常用软件

pacman -S fcitx-im fcitx-sunpinyin fcitx-cloudpinyin fcitx-configtool  //输入法
pacman -S gstreamer ffmpeg smplayer  //播放器和解码器
pacman -S alsa-utils pulseaudio-alsa  //音频

安装网络管理器

pacman -S network-manager-applet
systemctl enable NetworkManager.service
systemctl start NetworkManager.service

自己加到用户组里

gpasswd -a yourname audio
gpasswd -a yourname video

字体

pacman -S wqy-microhei ttf-dejavu ttf-droid cantarell-fonts
pacman -S ttf-dejavu wqy-microhei

各项驱动和必要的软件

pacman -S texlive-most
yaourt -S acroread-fonts-systemwide
pacman -S wpa_supplicant dialog  //保证新系统可以联网。
pacman -S xf86-input-synaptics // 支持触摸屏、板
pacman -S libreoffice// 办公软件,语言包选101简体中文
pacman -S gnome-tweak-tool// 系统美化工具
pacman -S xfce4-terminal  //终端

好像差不多了

exit
umount -R /mnt
reboot

重启
重启后发现不能上网
查到的解释是:arch需要两次配置网络
在安装后,arch会把原来的配置关了还是怎么了,需要再开一次

systemctl enable dhcpcd  //设置开机启动
sudo dhcpcd wlp3s0  //wlp3s0 是我的网卡

大致搞完,收工。然而这个我弄了一整天。
我的装机就到这里了

重启后会出现些问题,部分问题解决办法查看“Arch安装-笔记

《游戏性是什么》6. 游戏和世界

date: 2016-06-06

游戏画面会随着游戏的进展实时变化。这时,玩家从游戏画面中能读取到怎样的信息呢?而这与人类在日常生活中认知世界的方式有何异同?

——《游戏性是什么》第6章

身体和世界之间的关系

本章将探讨人类身体与人类所处的世界之间的关系。

可被认知的世界是身体成立的必要条件

从 Hand Regard 、婴儿吮吸手指、翻身的时候,形成对自己身体的认知。

在“吊篮猫和自由移动的猫”的实验中,了解到我们的视觉和身体之间有着紧密的关系。视网膜中的视觉信息和身体获得的体感信息。只有在大脑中综合处理后,才能够让我们正确认识视觉信息的意义。

而我们的身体,存在与包围着我们的环境中,即存在于和世界的关联中。通过  Hand Regard 认知身体,无非是认知包围着我们身体的整个世界。

人类、狗和苍蝇的世界认知

德国的生物学家、哲学家乌克威尔(Jakob Johann Baron von Uexkull)的研究领域正是“身体和世界”之间的关系。乌克维尔认为,生物所处的世界分为作用空间(与生物相关的空间)和非作用空间(无生物不相关,或生物无意识到其关联的空间)。他还分别论述了人类、狗和苍蝇的身体和作用空间的关系。

例如一间客厅,对人类来说,椅子河水沙发都是用来坐的东西,桌子是用来摆放餐具等物品的空间,书架则是摆放书籍的收纳空间。

不过这些东西对狗来说就另当别论了。它们可能会认为椅子和沙发既可以坐着又可以睡觉的场所,而桌子和书架等物品,即使进入了它们的视网膜,它们也不会认为这些是和自己相关的空间。对苍蝇来说,它们则只能识别出天花板上的灯以及桌子上摆放的餐具。如果餐具里没有食物,它们甚至可能只把餐具当成是障碍物。

因此,不仅是人类,大多数的生命都是基于自己身体能如何作用于世界这一点来认知世界的。对于人和狗来说,二者使用桌子的能力不同。因此,二者对于桌子的意义(即作用空间的意义)的认识方式也不同。

游戏中作用空间和非作用空间的关系

将“身体与作用空间的关系”中的对象替换为游戏角色和游戏空间,来重新思考这个问题。与现实世界相比,游戏内的作用空间(游戏角色可以行动的空间领域)更加有限。另外,游戏中存在大量的按钮和开关。

而且在游戏中,作用空间和非作用空间通常也不一定是固定不变的。

在《超级马里奥》中,“砖块地面”为一种可以站立其上,也可以从下方跳跃将其破坏的作用空间。游戏中的敌方角色也是一种作用空间,敌方角色虽然危险,但是玩家可以用踩踏等方式打倒敌方角色并获得分数奖励。

另一方面,游戏背景中的图像,由于玩家无法直接使其移动,所以被认知为一种非作用空间。

另外,分数和剩余生命等也属于作用空间。

这些都会根据玩家的操作而变化,根据数值的不同,或增加剩余生命,或游戏结束。

因此,这些内容被认为是身体和世界之间的一种中介物。

另外游戏中隐藏砖块等非作用空间,会在游戏中因玩家的发现而转变成作用空间。

《俄罗斯方块》中的扩展身体到作用空间的转化

《俄罗斯方块》中处于下落过程的方块可以视为玩家在游戏中的扩展身体。

在这个方块彻底落下,不能在移动的瞬间,方块就变成不断累加的“地基”,这时方块作为扩展身体的功能也就消失了。

随后这个“地基”又变成了可以承接接下来要落下的方块的作用空间。

因此,有时候最着游戏的进行,扩展身体会转化为作用空间。

虽然都是一些富有戏剧性的变化,但玩家在那个变化的瞬间都能够进行恰当的理解。

规划游戏、身体和环境间的关系

整理下“身体”、“视觉”、“世界”的关系。

人类的大脑通过 Hand Regard 等方式进行后天的身体学习。为了顺利学习,身体所处的世界不可或缺。

除了现实世界的身体学习,人还可以精神体扩展到道具,甚至是虚拟世界中,进行后天的关联学习。

之前举了“逆转眼镜”的例子,其实对于那些能力不好的人来说,眼镜和隐形眼镜也可以称得上是他们身体的一部分。

对于工匠、钢琴家、足球选手来说,工具、钢琴、足球也可以称为是它们被扩展的身体。

我们身处的世界又能分为作用空间和非作用空间,以及作用空间对我们自身的意义。


20151103-21

即使在游戏世界里,我们也能够观察到上述关系。

游戏中的玩家角色,就是玩家通过图像、音乐和手柄震动等反馈,在大脑中获得的新的关联学习,即所谓的扩展身体。

不过,所谓的扩展身体的操作范围和现实人类自己的身体比起来,操作上受到极大的限制。

玩家通过多次反复进行游戏不断进步,以完成操作被限制的身体的关联学习。

另外,玩家在理解游戏内作用空间的意义的同时,通过限制身体理解作用空间因时因地变化的意义,可以对游戏世界产生更加深刻的认知。

这个认知,在游戏过程中会不断更新变化。

这种变化,则是根据游戏设计的引导而发生的。因此,可以说游戏设计的一个重要职责就是“规划身体和环境间的关系”。

另外,游戏中的虚拟身体和世界,与实际中身体及现实世界并非毫不相干。

无论对哪一边的身体或世界来说,人都是通过同样的机制来认知的。

这一点对游戏设计者来说也是十分重要的。

创作游戏,并非“创作出一个和现实世界完全不一样的新世界”。创作者需要理解现实世界人类身体的特征,理解世界与作用空间的特性及其相互关系,并在这些理解的基础上,设计出玩家易于理解的抽象化的身体和世界。

小结:

  • 我们身处的世界可以分为作用空间和非作用空间。
  • 根据身体功能的不同,作用空间意义也不同。
  • 玩家通过进行游戏,理解限制身体、作用空间和非作用空间的区别,以及作用空间的意义。
  • 游戏中身体和环境间的关系由游戏设计者规划设计。

摘自《游戏性是什么》第6章(游戏和世界),

作删改喜欢这本书,其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

使用ajax()方法加载服务器数据

date: 2017.06.16 21:01

使用 ajax() 方法是最底层、功能最强大的请求服务器数据的方法,它不仅可以获取服务器返回的数据,还能向服务器发送请求并传递数值,它的调用格式如下:

jQuery.ajax([settings])或$.ajax([settings])

其中参数settings为发送ajax请求时的配置对象,
在该对象中,
url表示服务器请求的路径,
data为请求时传递的数据,
dataType为服务器返回的数据类型,
success为请求成功的执行的回调函数,
type为发送数据请求的方式,默认为get

例如,点击页面中的“加载”按钮,调用ajax()方法向服务器请求加载一个txt文件,并将返回的文件中的内容显示在页面,如下图所示:

在浏览器中显示的效果:

从图中可以看出,当点击“加载”按钮时,调用$.ajax()
方法请求服务器中txt文件,当请求成功时调用success回调函数,获取传回的数据,并显示在页面中。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>使用ajax()方法加载服务器数据</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>    
    <body>
        <div id="divtest">
            <div class="title">
                <span class="fl">检测数字的奇偶性</span> 
                <span class="fr">
                    <input id="btnCheck" type="button" value="检测" />
                </span>
            </div>
            <ul>
               <li>请求输入一个数字 
                   <input id="txtNumber" type="text" size="12" />
               </li>
            </ul>
        </div>
        <script type="text/javascript">
            $(function () {
                $("#btnCheck").bind("click", function () {
                    $.ajax({
                        url:"http://www.imooc.com/data/check.php",
                        data: { num: $("#txtNumber").val() },
                        type:"GET",
                        success: function (data) {
                            $("ul").append("<li>你输入的<b>  "
                            + $("#txtNumber").val() + " </b>是<b> "
                            + data + " </b></li>");
                        }
                    });
                })
            });
        </script>
    </body>
</html>

success中的"result"的值是服务器处理后返回的值,返回值类型在dataType中定义了


success
类型:Function
请求成功后的回调函数。
参数:由服务器返回,并根据 dataType 参数进行处理后的数据;描述状态的字符串。
这是一个 Ajax 事件。

jQuery ajax - ajax() 方法

慕课网——jQuery基础(五)一Ajax应用与常用插件

Git Tag

基本 git tag 常用命令

查看tag列表

git tag # 展示出当前仓库所有的tag
git tag -l 'v1.0*' # 搜索并展示出v1.0开头的tag

增加(“打”)tag

git tag test # 创建轻量tag
git tag -a 'v1.0.0' -m "1.0.0版本" # 创建附注tag,参数a即annotated的缩写,指定Tag类型,后附Tag名。参数m指定Tag说明,说明信息会保存在Tag对象中。

切换tag

git checkout test # 切换到 test tag
git branch <branch name> <tag name> #在tag点上创建分支

查看某个tag信息

git show test # 查看test tag的版本信息

删除某个tag

git tag -d test # 删除test tag

给指定的commit打Tag

打Tag不必要在head之上,也可在之前的版本上打,这需要你知道某个提交对象的校验和(通过git log获取)。
注意:需要填写保存信息并输入:wq

git tag -a v1.0.1 sd74d5s7

tag推送远程仓库

通常的git push不会将Tag对象提交到git服务器

git push origin –-tags # 将本地所有Tag提交到远程仓库

重命名

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

仓库常用命令

查看远程仓库:$ git remote -v
添加远程仓库:$ git remote add [name] [url]
删除远程仓库:$ git remote rm [name]
修改远程仓库:$ git remote set-url --push [name][newUrl]
拉取远程仓库:$ git pull [remoteName] [localBranchName]
推送远程仓库:$ git push [remoteName] [localBranchName]

远程创建分支

git push origin 本地:远程     
git push origin test:test  //eg 注意,操作不当会覆盖掉远程现有分支 

《游戏性是什么》4. 游戏和身体

游戏中玩家操作的角色,对于玩家来说是一个什么样的存在?我们人类是怎么看待游戏内的世界和操作对象的?

——《游戏性是什么》第4章

玩家角色和玩家自身

着眼于“身体”,同时探讨玩家与游戏角色之间的关系。

游戏角色是玩家在游戏世界内所拥有的“身体”,它和我们在现实世界中所拥有的“身体”有什么相同之处,又有什么不同之处??

玩家操作的究竟是触控笔,还是游戏角色?

在这里,以任天堂DS平台上的冒险游戏《塞尔大传说:幻影沙漏》为例进行说明。

这款游戏的特点就是几乎所有操作是使用触控笔完成的。

在这款游戏中,玩家用触控笔点击地面,主角林克就会向着点击处移动。

那么问题来了,这个时候玩家所操作的究竟是触控笔还是林克?

下边这种观点比较妥当:

玩家操作触控笔,间接操作林克。

也就是,玩家用身体操作设备,使画面上的数据图形移动。

这种解释方式不仅限于游戏,电脑上的鼠标操作也符合这个道理。

身体的感觉是通过学习掌控的

首先,我们是如何认识自己的身体。

说到身体,一般人会认为身体就是从头到脚。

我们从各种各样的研究结果中可得知,这种感觉是我们在成长过程中,通过大脑后天学习获得的,并不是人与生俱来的本能。

考虑到这种学习机制时,最重要的是身体和大脑之间的3中信号,将这3中信号整合起来,大脑就能够识别身体的情况了。

  • 动作信号, 由大脑发出,经神经系统传达至身体各处,目的是只是身体的运动。

  • 体感信号, 基本上是指触觉。

    如果说动作信号是由大脑通过神经系统对外输出的信号的话,那么与之相对的则是对内输入的信息。

    也就是说,体感信号是通过神经系统返回大脑的信号。

  • 特殊感觉信号,指视觉、听觉、味觉等。

    体感是身体全方位所能接收到的感觉,而与之相对的,特殊感觉信号则是眼睛、耳朵、舌头等个别器官所能接收到的感觉。

    特殊感觉信号和体感信号一样,都是输入信号。

Hand Regard

具体看一下这3种信号的传递。

婴儿经常会注视、触摸自己的手,吮吸自己的手指。

此时,这3种信号是按照下方这样的次序传递的。

  • 大脑发出“吮吸手指”的动作信号。

  • 手指的触感等体感信号反馈到大脑。

  • 眼睛看到手指动作时的视觉信号,口中含这手指的味觉信号等特殊感觉信号反馈到大脑。

  • 动作信号、体感信号、特殊感觉信号三者在大脑中整合,婴儿形成了对身体的认识。

这种婴儿身体学习称为“手掌凝视(Hand Regard)”。

人成年后,对自己身体的认识已经形成了,

所以我们很难在体验到手掌凝视了,但是这种身体学习形式并不只限于婴儿身上发生。

幻肢痛就可以证明此理。

幻肢痛和镜盒治疗

因事故等原因而丧失四肢的患者,

会屡次产生四肢仿佛还在的错觉,而他们也能感觉到这些虚假肢体上的痛觉,这种痛觉叫做幻肢痛

为了帮助一位因事故失去双手,进而经受了10年幻肢痛困扰的患者祛除病痛,神经外科医生拉玛钱德朗通过研究,使用镜盒治疗治愈了这位患者的幻肢痛。

镜盒治疗 是一个构造极其简单的盒子。

镜盒治疗,就是在盒子正中间用一块镜子隔开,然后将两只手分别插进两边的孔洞内。

百度百科词条——镜盒治疗1
让我们以失去左手的患者为例。

他将实际存在的右手和自己假想中存在的左手,都伸进到盒子中。将两边分隔开的镜子会映出右手的影子。

随后,患者就会觉得镜中的右手的虚像,仿佛是自己的左手。也就是说,让此时患者可以感到自己的双手都伸进到盒子里。

紧接着,让患者做出双手握拳、松开的动作。

也就是对实际上存在的左手同样发出这种动作信号,所以他对左手的特殊感觉信号(这种情况下指视觉)就会反馈回了大脑。

不过虚假左手的体感信号(触觉)并没有反馈回去。
百度百科词条——镜盒治疗2


在镜盒治疗持续进行的过程中,幻肢痛逐步缓解,最终消失。

这其实是将3种信号反复重新匹配,使得患者的大脑对左手这一身体部位的认知进行了再学习的结果。

镜盒治疗的设备非常简单。

实际上笔者(渡边修司)也做一下,进行了数十分钟的尝试。

但经过几天之后,笔者的手产生了麻痹感。

这正是因为笔者两只手都是实际存在的。但大脑却进行了某只手缺失的身体认识再学习的缘故。

渡边修司 | Shuji Watanabe
日本立命馆大学教授,日本立命馆游戏研究中心运营委员,日本数字游戏学会研究委员,1997年,以《最终幻想7国际版》(原史克威尔公司)进军游戏业后,在多家游戏公司任职游戏策划、制作人等职务。

游戏中的身体感觉

整理一下镜盒治疗的中3个信号的流程

  • 大脑发出“将双手放入镜盒中,只让单侧的手进行动作”的动作信号。

  • 手的动作成为一种体感反馈给大脑。

  • 镜子中映出的影像成为一种特殊感觉反馈给大脑。

  • 动作信号、体感、特殊感觉在大脑内得到统一,并产生了新的感觉关联(身体健全者会有命名一只手没有动,却能感到两只手都在动的不协调感,而幻肢痛患者则感觉到他缺失那一只手)。


身体感觉就是以这种形式重新学习关联。

让我们将这种模型应用到触控笔操作的游戏中来看。

实际上,玩家在玩游戏时,往往都在进行身体感觉的再次关联学习。

  • 大脑发出“让触摸笔触碰特定地方”的动作信号。

  • 手的动作成为一种体感反馈给大脑。

  • 画面上角色的动作成为一种特殊体感反馈给大脑。

  • 动作信号、体感、特殊感觉在玩家的大脑中得到统一。


老玩家对于这种再次关联学习不会感到什么困难。

通过这种关联学习,玩家会将游戏中的角色当成自己身体的一部分,这样便可以自由自在地操作角色了。

这正是将游戏中的角色作为“自己身体的扩展部分”来进行再次关联学习。

身体和世界之间的相互作用

关于身体感觉的关联学习,也有将重点放在视觉层面上的实验。

“吊篮猫和自由移动猫”就是这种实验。这个实验能够让大家理解大脑是如何形成“看”这种行为。

在这个实验中,有两只从出生就一直被饲养在漆黑的环境之中,刚刚学会走路的小猫。

这两只小猫被一个像天秤一样的装置互相连在一起,一侧的小猫乘坐在吊篮里,另一侧的小猫可以自由自在地移动。

也就是说,这个装置中,坐在吊篮里的小猫会随这自由移动的小猫的行动而移动。

保持这种状态,将小猫放在内部描绘着条纹花样的圆筒中,暂时让它们习惯一下。

接着,将两只小猫从装置中取出,放在桌子上面。我们会发现,自由移动的猫不会踏出桌子外侧一步,而坐在吊篮理的猫咪并不能察觉到危险,所以它从桌子上掉下去。

这两只猫咪出现了不同的“主动的运动”和“被动的运动”。

虽然它们“看”的行为都是一样的,但是由于坐在吊篮中的猫没有机会学习到视觉的变化和运动之间的关联性,所以它不能察觉到从视觉信息的变化中所产生的危险。

因此,即使大脑可以主动让身体进行运动,但如果它不能将身体运动和世界之间的相互作用联系起来的话,就无法正确理解视觉信息。

这种“身体和世界之间的相互作用”并不仅仅是现实世界才能有的现象。

如之前所说的,大脑甚至能够将虚拟世界的数据,作为身体的扩展不分进行关联学习。

“最近沉迷于竞速游戏,身体经常毫不自觉地左右晃动”“当我被敌人击中的时,会喊出‘好痛!’”这些现象都是典型的例子。


这就是大脑对于身体进行再次关联学习后产生的现象。

游戏中的身体学习

—— 身体扩展关联学习”的相关内容

这里要举的例子是 超级马里奥64

超级马里奥64

发行时间:1996年

游戏平台:任天堂(简称64)

这是niendo64的首发游戏,游戏手柄增设了3D摇杆。
从这部作品开始,“马里奥”就变成了第三人称3D动作游戏。也成为了给之后的3D游戏带来巨大影响的里程碑游戏。

在作品真正的游戏开始之前准备一个学习关卡。

在这个关卡不会有敌人袭击,玩家可以自由地操作游戏角色进行练习。
此时,在跑动、跳跃、爬树等动作的时候,玩家就可以把手柄的操作和马里奥的动作在大脑里关联起来。这个过程就是大脑对游戏中身体的扩展部分进行再次关联学习。在经过多次是失败后,玩家就可以成为完美操作马里奥游戏的大师了。

这时,大脑和身体的关联学习就可以说是完成了。

战地3

同样的身体关联学习过程,也存在于“战地3”这样的第一人称游戏中。与《超级马里奥64》有所不同的是,第一人称视角下不存在玩家能够通过视觉观察到的“自己的投影对象”。但玩家可以通过画面中的胳膊、枪械以及手柄操作等动作信号和体感的反馈,切实感受到游戏世界中(被扩展的)身体的存在。随后玩家通过游戏,就可以进行身体的关联学习。

《俄罗斯方块》

也有一些游戏,并不存在明确的游戏角色,比如《俄罗斯方块》。当中,玩家能够操作的是下落的方块,即玩家将方块当成自己身体的扩展。紧接着,随着方块不断堆积,当方块落到相应位置无法操作时,玩家又失去了将这个方块当成自己身体扩展部分的认知,转而将这种认知切换到接下来要落下的方块上去。

这种类型的游戏通过让玩家反复进行身体关联学习的过程,就不会在身体扩展部分的切换中感到不自然。

小结:

  • 人类通过  Hand Regard 对身体感觉进行后天学习。

  • 身体感觉可以通过再次关联学习进行修正和扩展。

  • 游戏的操作对象,就是人类通过再次关联学习扩展的身体。

  • 游戏内的扩展身体会随着状况不同而发生各种各样的变化。

摘自《游戏性是什么》第4章(游戏和身体)喜欢这本书,

其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

常见视频格式

date: 2018-03-24 22:01:00

帧速率

我们看到的视频是由一帧帧的画面,也就是一张张的图片构成;

如果一秒钟跑过去的图片有24张,帧速率就是24帧/秒(fps);

只有8张,帧速率就是8帧/秒(fps)看起来就一卡一卡的

帧速率越大,画面就越流畅,当然大到一定程度,也不需要过大了,一方面肉眼也看不出有毛区别,另一方面电脑吃不消啊!

分辨率

我们所看到的图像都是由一个个的像素点构成的;

分辨率就是所显示图像的精密程度,也可以理解为像素点的多少。

在屏幕大小一定的情况下,分辨率越高,图像就会越清晰;在分辨率一定的情况下,屏幕越小,图像越清晰;

从前我们看到的电视都是标清,大致都是720x576的分辨率,长宽比一般是4:3;

如今我们看到的大部分都是16:9的电视和节目,分辨率为1920x1080;更大的分辨率就是4k。

1920*1080可以理解为,一个屏幕中,每行有1920个像素点,一共有1080行

了解更多

码率(比特率)

码率,又叫比特率,是指每秒钟视频或音频的数据量,一般用兆/秒或K/秒表示。

其他条件相同的情况下,码率越大,视频越清晰,但文件也越大;

另外,码率超过一定数值,对图像并没多大影响,还搞得电脑吃不消呀~


平常我们总在想,如何让视频文件更小,让视频更清晰呢?答案就在码率上,对码率进行处理,就叫做编码方式,一般有CBR/ABR/VBR三种方式。

编码方式 全称 意思 说人话
CBR constant bitrate 固定码率(比特率) 全片码率固定不变
ABR average bitrate 平均码率(比特率) 介于CBR和VBC的折中选择
VBR variable bitrate 可变码率(比特率) 全片码率根据画面丰富程度变化
  • CBR全称constant bitrate,意思是固定码率,就是在整个视频当中,码率固定不变;

  • VBR全称Variable Bitrate,意为可变码率。

    其实在视频当中,画面内容越丰富,所需码率越高,成像质量也会越好,画面内容不怎么丰富的地方用高码率就是浪费,

    所以可变码率根据画面内容的丰富程度自动调节,保证成像质量的同时,让文件变得更小。

    所以要让视频文件更小,内容更清晰,采用VBR的编码方式,并设定科学的数值,就是解决问题的关键。

  • ABR全称average bitrate ,意为平均码率,是一种介于CBR和VBR之间的折中方式。

格式

MPEG

1988年由众多世界知名公司组成的300多名成员成立了一个活动专家组,Moving Picture Experts Group

简称MPEG,他们制定提出不同标准,对图像进行压缩、编码,最终应用与不同领域。编码出来的视频就被称为MPEG格式,简称MPG

MPEG 正式审核程序是 Moving Picture Experts Group 的简称。
这个名字本来的含义是指一个研究视频和音频编码标准的“动态图像专家组”组织,
成立于1988年,致力开发视频、音频的压缩编码技术。

现在我们所说的MPEG泛指由该小组制定的一系列视频编码标准正式审核程序。
该小组于1988年组成,至今已经制定了
MPEG-1、MPEG-2、MPEG-3、MPEG-4、MPEG-7等多个标准,MPEG-21正在制定中。

MPEG是ISO和IEC的工作组,
它的官方头衔为:第一技术委员会第二十九子委员会第十一号工作组正式审核程序,
英文头衔为ISO/IEC JTC1/SC29 WG11。

MPEG大约每2-3个月举行一次会议,每次会议大约持续5天,在会议期间,
新的建议和技术细节先在小组中讨论,成熟后进入标准化的正式审核程序。
与MPEG工作组相关的其他几个视频标准化工作组包括ITU-T VCEG以及JVT。

另,常用的音频格式mp3,是MPEG-1 Layer 3的简称

编码格式 应用于
MPEG-1 VCD
MPEG-2 DVD
MPEG-4 家庭摄影录像、网络传播、视像电话、邮件
  • MPEG-1的编码用于老VCD

  • MPEG-2的编码用于DVD

  • 之后的MPEG-4被用于更多更广泛的平台,这里的MPEG-4就是传说中的MP4 :)

ITU

还有一个叫做国际电传视讯联盟(ITU)主导的另一套编码方式,称为H.26X系列

之后与MPEG合作弄出了 H.264 编码方式,成为如今最热门的编码方式。


flv

全称 flash video,广泛用于网络视频,体积小,易于传播,

遇到h.264的编码之后,生了个儿子 f4v ,有体积小、图像更清晰的特点。

其他格式

mov是由苹果公司开发出来的视频格式,wmv由微软开发出来。

rmvb

它的爸爸叫做就是rm格式,以前有个叫做 realplayer 的播放器,rm就是它们公司开发的视频格式,现在后边添个vb

意思就是variable bitrate,可变比特率。

总结

格式 老爸
最好最常用 MP4 MPG
质量高文件小 f4v flv
常用电影格式 rmvb rm
剪辑编辑常用 avi(适合编辑者进行再编辑)
其他 mov、wmv 苹果、微软

提示:

  1. 电视、电脑、手机都能打开的格式一般是MP4格式(除苹果手机外)

  2. 要视频更清晰、文件更小,需要采用VBR,并使用最新的编码技术和格式

  3. 上传网络生成的视频质量越高越好,视频网站会进行二次转码

  4. 平常下载的视频如今的主流播放器都能打开,因为都有编码器


关于视频格式,传统一般叫做封装格式,包括编码格式在内,并非本文说的如此简单。

这仅仅是科普,所没提到或者具体提到的avi、mkv,以及其他格式都属于封装格式的一种。

封装格式并非完全按照编码技术命名,编码技术也并非仅此而已。

shadowsocks搭建过程(服务端)

链接扩展
shadowsocks
shadowsocks-windows
shadowsocks-libev
v2ray
vultr

安装shadowsocks-libev

shadowsocks的服务端也分python版本、go版本以及C语言写的shadowsocks-libev,因为libev版更新快,而且C语言编写的运行效率更高些,所以采用libev版。

安装预编译包

在shadowsocks-libev的github项目上有release预编译版本,可以直接安装(以目前的3.1.3版本为例):

#下载预编译文件
wget https://github.com/shadowsocks/shadowsocks-libev/releases/download/v3.0.3/shadowsocks-libev-3.1.3.tar.gz
tar zxf shadowsocks-libev-3.0.3.tar.gz    #解压缩
cd shadowsocks    #进入项目文件夹
./configure    #配置安装
make
make install

编译源码安装

git clone https://github.com/shadowsocks/shadowsocks-libev.git #下载源码
cd shadowsocks-libev/    #进入项目目录
git submodule update --init    #下载git子模块
./autogen.sh    #生成配置文件
./configure    #配置编译环境
make     #编译
make install    #安装

这样就装好了,shadowsocks-libev中常用的命令有
ss-serverss-localss-redirss-tunnel等,
服务端只用ss-server。关于使用方法,可以man shadowsocks-libev或者man ss-server来查看,下面只会提到必要用法。

编辑配置文件

一般为了方便,会将shadowsocks设置的参数写成配置文件,配置文件为json格式,服务端可以使用的key如下:

key 说明
server 服务器IP
server_port 服务端口
password 密码
method 加密算法
timeout 超时
mode 代理协议

服务器IP如果设为0.0.0.0则绑定所有IP;代理协议指的是代理TCP还是UDP,
至于加密算法,3.0以上版本的shadowsocks目前支持18种算法,但推荐使用以下支持AEAD加密的:

  • chacha20-ietf-poly1305
  • aes-256-gcm
  • aes-192-gcm
  • aes-128-gcm

至于原因可以参考这篇文章这里以我常用的配置文件为例:

touch config.json    #新建文件
vim config.json    #编辑文件

config.json

{
    "server":"0.0.0.0",    //服务器IP,0.0.0.0代表绑定服务器的所有IP
    "server_port":8088,    //服务端口
    "password":"password",    //密码
    "timeout":"5",    //超时重连
    "method":"chacha20-ietf-poly1305",    //加密方式
    "mode":"tcp_and_udp"    //代理TCP和UDP
}

配置文件为json格式,//后为注释,方便说明加的,实际配置文件里不能写注释(看那个红色就知道不能加)。

这里用的是在移动设备上性能相对效好的chacha20-ietf-poly1305。

因为只有shadowsocks-libev更新了AEAD加密,所以为了兼容可以改为chacha20等非AEAD加密算法。

运行shadowsocks-libev

ss-server -c config.json

可以看到服务在前台运行,-c后面接配置文件。若要后台运行,可以加上-f参数,后面接一个pid文件名,运行后会生成这个pid文件,里面保存着这个后台ss-server进程的pid。

ss-server -c config.json -f proxy.pid

如果想开多个端口,可以使用多个配置文件+多个pid文件的方式来管理。这样服务端就完成了。

文章摘自shino.space

《游戏性是什么》5. 游戏和视角

date: 2016-06-05 18:55:56

让我们来思考下3D游戏中很容易成为玩家压力的镜头问题。为了实现舒适的游戏环境,游戏开发者如何惨淡经营?而镜头的问题,又和玩家身体指尖存在怎样的关系?

——《游戏性是什么》第5章

视角和视觉

上一章已经介绍了游戏角色是人身体的扩展部分。作为身体相关研究的第二章节,将通过游戏中必不可少的镜头问题,来研究视角的相关内容。

正确区分视角和视点

  • 视角:玩家角色眼睛,镜头的位置
  • 视点:玩家角色或镜头所有的对象

镜头的各种视角

回顾下上一章所提到的射击游戏的历史,在游戏刚诞生的一段时间内,被称为固定场景的镜头成为了主流。像 Breakout 和《太空**者》等,就是所谓的“单场景游戏”。这都是由于硬件的限制,无法实现场景的滚动。

随后不久,像《铁板阵》这种场景可以纵向滚动或者横向滚动的设计游戏出现了。这类游戏叫作平行场景游戏。在这类游戏中,镜头会从正上方或侧面一直追随角色的移动。

作为这种应用的例子,还存在一种位于角色斜上方的视角,叫作45度视角。

不过,当时基本没有什么人在意游戏的视角。这是由于玩家的操作和视角的移动毫无关系。

《超级马里奥64》的视角

在游戏视角方面,《超级马里奥64》是带来巨大改变的开山之作。在该作品中,玩家可以在3D世界中享受自由操作马里奥进行探索乐趣,这可以说是一部真正意义上的3D游戏,而且也是第一个将视角问题摆到开发者和玩家面前的游戏。

让我们看一下游戏中的具体内容吧。作品中,玩家可以操作“马里奥”和“快乐云”两个角色。由于角色的分开使用,所以画面场景出现了各种切换。

马里奥用3D摇杆操作,快乐云用C键操作(手柄右边的4个并列按钮)。也就是说玩家可以同时分别使用马里奥和快乐云两个视角

进行游戏。而且在很多情况下,这两个视角的移动是正好相反的。

例如当3D摇杆向右推时,马里奥就转向右方。然后镜头为了能照到马里奥的后脑勺,自动地移动到了左侧。这时的镜头移动,是为了能够让马里奥保持在画面**。也就是说,由于镜头向左移动,电视画面中的视点才能向右侧滚动。

接下来,思考下操作镜头的情况。按住C键的右侧,快乐云就向右移动了。快乐云以马里奥为中心进行圆周运动,当镜头右移时视点则向左滚动。也就是说,同样的向右操作,视角向右移动,而视点就向左移动了。

就像这样,玩家可以同时操作马里奥和快乐云,就可以根据不同状况切换游戏视角。当玩家控制马里奥时,3D摇杆向右推,游戏画面便向右移动。反过来当控制快乐云时,玩家按右侧C键,画面就会向右移动。当然,也有不少玩家觉得这种操作相当混乱。

《塞尔达传说:时之笛》中视角的修正方案

继《超级马里奥64》之后又一部划时代作品——《塞尔达传说:时之笛》。

该作品和《超级马里奥64》一样,也可以通过3D摇杆的操作改变主人公林克面向的方向。3D摇杆的操作和林克的朝向(画面的移动)是一致的。

另一方面,作品中代替快乐云角色是妖精“那比”。当玩家想要注视一个特定场所时,就可以通过操作移动那比,林克的目光会随那比移动,画面就会转过去。也就是说,作品中

通过操作视点(角色),就能让视角(镜头)发生移动。

即,我们普遍认为那比担任着GUI中光标的角色。当操作那比时,玩家的视点就转移到那比身上。在作品的镜头视角系统中。镜头移动时玩家并没有意识到镜头的存在,仅仅看到玩家角色和身为视点的那比。除此之外,《塞尔达传说:时之笛》中的系统也有很多类似的改良。

角色、镜头、视点

在玩家的视角问题上,我们可以从角色、镜头、视点这3个要素进行考察。

在《超级马里奥64》中,通过操作镜头移动视点,让玩家产生了些许不协调感。而《塞达传说:时之笛》中玩家可以直接操作视点,就消除了这种不协调感。

此外,在任天堂DS(NDS)平台上的《塞尔达传说:梦幻沙漏》中,所有操作都为触控笔操作。使用触控笔后,玩家不再通过按键操作林克,这就切换成操作视点的方式了。


人可以自由变换视角的位置

在第三人称的游戏中,镜头的位置经常被固定在游戏角色的斜后方(后视)。这种镜头多在强制滚动形式的游戏中使用,竞速游戏就是其中之一。让我们以街机体感游戏 **Rapid River **为例。

玩家横跨在机体上,通过滑动船桨型的控制器对象对橡皮艇进行操作。画面上的游戏角色也会乘坐在橡皮艇上,滑动着船桨。
这时,玩家的身体扩展到画面中游戏角色的身上,但实际上

玩家确实是从架空的斜后方视角

出发来观察整个画面的。这就好像是一种自己从自己后方进行观察丢份儿感觉。

说起视角,像《超级马里奥64》这种自己可以操作视角的3D动作游戏,也能让人在进行游戏时毫无违和感。这是由于镜头与游戏角色总能面向同一个方向,视角和视点的朝向也没有太大偏离。

因此,我们的大脑就能将视角从眼睛移动到别的地方去。

视角移动的实验

让我们用自己身体做个试验,来确认视角的移动。

首先,将指尖移到额头处,用一个对自己来说比较自然的方向,写下一个“了”字。

这时,在外人眼中,字看起来像是反了的“了”。这是因为书写者会从自己眼睛的位置(视角)出发去书写一个他所能看到的“了”字。(当然,试验中也有人写出正确方向的文字,但大多数人还是写出了镜像文字来)。

接下来,用指尖在自己后脑勺写出一个对自己来说方向自然的“了”字。这时,大多数人写出的字,对观察者来说朝向也是正确的。

这个实验结果带来的启发:将视角转移到自己身后方是一件很容易的事情。也就是说,后视的视角移动是相对简单的。

大脑能够学习新的视角

有些游戏中的镜头位置可以任意切换,《GT赛车》等竞速游戏就是典型的例子。

竞速游戏的玩家群体,有的喜欢驾驶员的视角(第一人称),有的则喜欢可以看到自己车辆的第三人称视角。因此这一作品中就设置了可以在第一人称视角和第三人称视角之间切换功能。

实际对比游戏的两种视角,会发现而这之间在操作体感上还是存在细微差异的。不过不论是哪种视角,玩家只需短暂的试玩就可以习惯整个操作。虽然第一人称视角为真正开车时的视角,不过正如我们前边所说的,被放置后方的第三人称视角,对人来说更熟悉。

第三人称视角,虽然并非游戏中担任玩家身体职务的角色(使难题在游戏中的扩展)的直接视角,但是我们的大脑却能学习到这个视角。这种现象就叫做“大脑的视角重新学习”。

逆转眼镜

“大脑的视角重新学习” 可以通过“逆转眼镜”实验来考察。逆转眼镜是一种特殊眼镜,可以使佩戴者视觉上的上下左右方向发生反转。实际上在右侧的物体,在逆转眼镜中为左侧。

虽然这种眼镜一开始会给佩者的生活带来各种障碍,不过一周后,佩戴者就能习惯了。随后当佩戴者摘掉眼镜后,反而需要再用一段时间来适应正常的方位。

佩戴逆转眼镜会给我们带来强烈的视角变化,但我们的大脑仍然能应对自如。

扩展身体和限制身体

暂且放下“视角”的话题,先介绍下“扩展身体”和“限制身体”的相关内容。

我们将游戏中玩家身体的扩展部分(游戏中玩家控制的角色)叫作扩展身体。当以玩家为中心时,我们使用“扩展身体”一词。

反过来,当以游戏中玩家控制的角色为中心时,该角色为“玩家身体中一部分的表现”。因此,当以游戏角色为中心时,可以用“限制身体”一词来表现游戏中的角色。

例如,《俄罗斯方块》中正在下落的方块就看作是扩展身体。这种说法是站在玩家的立场上。当站在方块的立场上,比如描述方块如何与其他游戏中的物体(比如墙壁等)等物体相互关联时,方块就是“玩家身体一部分的表现”,即限制身体。

简而言之,从玩家的角度看,游戏角色是扩展身体,从游戏的角度看,游戏角色就是限制身体。区别仅在于我们是从哪个角度来看的,其实所指的对象都是一样的。

行走和WASD键的相似性

现在,思考包括视角问题的身体感觉与用户界面之间的关系。首先,看一下以“战地”系列为代表的FPS(第一人称射击游戏)的相关操作。

FPS游戏的移动操作大多类似,键盘上的W键为前进,S键为后退,A、D分别左、右移动(这种组合键叫作WASD键),鼠标的移动则控制视角的移动。

虽然这种操作方法是FPS游戏中约定成俗的方式,不过,为什么用WASD键来控制角色行动,而用鼠标控制视角移动呢?

首先我们先考虑下人类的行走动作。,通过观察可以发现,人在行走时将脚向前迈出,中心也向前倾斜。当重心倾斜时,为了不让自己摔倒就必须用脚支撑,因此,人每次只能向前迈出一步。也就是说,“行走”并不是单纯地脚的移动,而是

向特定方向移动重心。

为了追随身体重心的移动,脚就应该移动。如此一来,行走的本质为“在特定时间目标方向移动重心”。

WASD键控制下的行走又是怎样的呢?那就是“在特定时间向目标方向按下按键”。也就是说,WASD键控制模式和人的行走模式相通。因此WASD键方的操作方式容易被大家认可。

视点和鼠标的相似性

鼠标是一种能够瞬间指定位置的设备。它和视点的移动拥有一样的特性。因此它比较适合用来完成“改变枪口朝向”等瞬间位置指定操作。

在前一章所述的《塞尔达传说:梦幻沙漏》中,玩家使用触控笔指定目标地点,这种方式也和视点移动(鼠标移动)有一样的操作感。

和感觉相互匹配的操作

看一例子——Oculus RiftOculus Rift为头戴显示器,是一种头戴式虚拟现实设备。其中内部配备了加速度传感器,能够匹配佩戴者头部运动,并在画面中呈现出来。当佩戴者低头时,游戏画面中的视角也随之向下运动。


Oculus Rift(图取自百度百科)


这个和人与生俱来所体验到的感觉完全一致的。

因此可以说,Oculus Rift中视角移动的操作非常易于学习。在原型阶段时,Oculus Rift在游戏开发者之间就具有很高的人气了,可以预见今后还会有许多相应的软件被开发出来。

在游戏开发中,

设计易于玩家掌握的视角扩展身体

是获得大多数玩家支持的重要条件。尽管大脑能够重新学习新的视角,但是我们不应该带给它过多的压力。我们有必要顾及游戏应和人类特性相匹配这一点。

小结

  • 游戏的视角操作,需要重点考虑镜头、玩家角色和视觉三个要素。

  • 大脑能够在各种不同的场景下设定视角,能够根据视觉信息重新学习视角。

  • 在设计包括镜头在内的玩家扩展身体(玩家操作的游戏角色)时,为了让玩家更容易掌握,应该尽量让操作感觉和操作结果接近。

摘自《游戏性是什么》第5章(游戏和视角)喜欢这本书,

其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

《游戏性是什么》7. 游戏和触觉

date: 2016-06-07

游戏有一个特征,就是玩家通过游戏手柄来操作。那么,这种操作有着怎样的意义?为了设计出简明易懂的操作方式,究竟应该考虑到哪些问题?

——《游戏性是什么》第7章

继“身体”、“视角”、“世界”后的最后要素——“触觉”

作为探求游戏和身体之间关系的最后一章,将从“触觉”的角度出发来研究这种关系。

之所以选取“触觉”这个角度,是因为在游戏中,玩家是通过操作手柄,能动地参与到游戏世界中。

随着技术的进步,游戏也变得越来越复杂。

如何设计出最适合玩家的手柄操作方式,就成为了一个重要问题。

这个问题不仅存在于游戏中,还存在与媒体、扩张现实等互动媒介的领域,在此将以游戏为中心对象来分析。

游戏是“触觉媒体”

以  Wii Fit 为例。该作品中,玩家根据游戏中的提示指令作出恰当的动作,已达成目标。和通常情况下使用游戏手柄操作的游戏不同,玩家是站在专用的Wii平衡板上操作的。也就是说,玩家通过脚这一全新的身体部位来参与游戏。

不了解Wii Fit 的旁观者,在不看游戏画面、只观察玩家的情况下,会怎么想?

恐怕他们只会觉得玩家站在一个奇怪的板子上,不停地伸胳膊抬腿。即使向他们解释说“这个人在玩游戏”,他们恐怕也无法理解。不过让他们结合影像和声音观察玩家的话,就能理解玩家根据游戏作出动作这件事了。(不理解Wii Fit 的可以想想游戏厅里的“跳舞毯”)

由此可知,以游戏为代表的交互型产品,很难和视觉、听觉、触觉脱离关系。从这个结论出发,媒体研究人——中岛诚一指出,交互媒体是“以视觉、听觉、触觉这3个维度传递信息的媒体”,即 触觉媒体 ,触觉媒体可以看作是包括听觉、视觉、视听觉在内的媒体。



回溯媒体史可知,媒体的普及源于报纸、书、杂志等 视觉媒体 。随后,收音机、电话、唱片等听觉媒体出现,最后进入了电视、电影、视频等视听觉媒体的全盛时代。而且之后还有着向游戏’媒体艺术等触觉媒体发展的趋势。

触觉媒体的三要素

中岛认为,触觉媒体包括以下3个要素。

  • 反应:大脑和大脑以外信息的循环速度。
  • 连接结构:不仅指数据间的结构,还包括与其他项目间的互联性。
  • GUI:视觉上的界面。

反应 ,指的是软件的操作性,以及该操作所产生的反应。也就是能否迅速通过显示器、扬声器等输出设备,将从输入设备导入玩家的操作回馈出来。

连接构造 ,指实现多样信息互连 的设计。能否迅速传递必要信息,并与大量相关信息建立互联,是评估连接构造优劣问题的重要标准。

GUI设计 ,是对于人机交互媒体来说最重要的一个项目。(GUI?不解释了)

游戏中的触觉媒体三要素

触觉媒体三要素,对游戏来说也同样适用。

反应迟钝会导致玩家无法尽兴。特别是在动作和格斗游戏中,反应迟钝是致命的问题。

连接构造对网络游戏来说则特别重要。这是由于如果不能够对构成游戏的各种符号群流畅互联的话。

玩家就无法在复杂的游戏世界中自由探索。

GUI设计,是可以左右玩家能否直观地理解游戏符号意义的重要要素。

如果没有适当的GUI设计,游戏就无法向玩家展示符号间的连接构造了。

功能可供性是什么

在触觉媒体的设计中,功能可供性与上述三要素同等重要。“功能可供性”,是从表示“提供”之意的“Afford”一词中再造出来的词。功能可供性由美国心理学詹姆斯·J.吉布森提出,表示人与自然间相互依存关系的相关概念。它被定义为“在学习过程中,人通过视觉来认知对象的性质和关系”。

例如在椅子普及的某地区,当人们看到一排椅子、板凳、沙发等形状类似于椅子的家具,即使不用重新学习,他们也可以知道这些东西是用来坐的。即某种特定形状可以提供“坐下”的行为暗示。而且,即使是岩石等天然形成的物体,如果形式跟椅子类似的话,他们也可能会有“坐下”的认知。

功能可供性,就是通过学习认知和解释某种形状,提供出这种形状所暗示“行为”的“价值”和“意义”。

游戏中功能可供性

美国认知心理学唐纳德·A,诺曼从设计者的角度,重新阐释了功能可供性的概念。他认为,优秀的设计,应该以符号明确展示对象的可供性。

日本媒体制作人兼研究者***(我打不出来),在游戏中指出这一点。举两个作为游戏中功能可供性的案例。

在《超级马里奥兄弟》中,从一开始马里奥就面朝右侧,即使没有具体的只是,马里奥也暗示了玩家“应该向右前进”。

在《勇者斗恶龙》中,“保存”功能被冠以了“复活咒语”的名称,而且密码的位数需要用“徘句”中的“五、七、五、七、三”来设定。

从如上列举的例子中可以发现,那些得到玩家支持的游戏在功能可供性方面的设计往往是非常优秀的。

竞速游戏和射击游戏,比起一般的游戏手柄,适用专用手柄玩起来更有身临其境的感觉。之所以会有这种效果,也就是游戏中匹配的专用界面可以直接提供“驾驶”和“射击”等行为的缘故。

游戏设计者,在手柄操作设计以及游戏世界两方面上,都必须构造易于玩家认知的功能可供性。

输入界面的可供性

第一人称视角下展开激烈动作的 FPS  游戏,有着一段PC游戏身份发展史。

最早的作品《德军总部3D》只能用键盘操作。

由于游戏没有纵向视角的变动。所以空间被设计得非常狭窄,若想变动横向视角的话,用左右方向键就可以了。

转动视角时,画面**下部的玩家角色头部的眼镜,会配合视角的变化左右移动。

此后,当鼠标成为了电脑的标配。

FPS游戏就确立了用 WASD 键控制行走,用鼠标控制准星的操作模式。

按住特定方向键的行为引发“向特定方向移动”的行为,同时操作鼠标来回移动的行为也引发了“眼睛环视四周”的行为。

人性化的游戏操作

在“触觉媒体”的应用上,最重要的是,设计要符合人的天性,比如大脑和身体之间的关系机制等性质。手握游戏手柄,头戴显示器等都会给玩家造成一定的符合,这就需要设计出能够抵消这种符合感的自然的界面。

比如移动的案件操作,能否考虑设计一种无需持续按住按键,只需在转向时按一下按键的模式?实际上《吃豆人》等早期的街机游戏就采用过这种操作模式。


Google_Pac-Man_banner


不过这并不是现在的主流,“持续按住特定方向键,控制角色向该方向移动”的操作方式,是多数游戏所采用的。

小结:

  • 游戏是视觉媒体、听觉媒体所综合出的“触觉媒体”。
  • 玩家在进行游戏的同时,会加深对整个世界的认知。
  • 输入设备的操作设计,应注重可供性。

摘自《游戏性是什么》第7章(游戏和触觉),部分删略,

喜欢这本书,其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

Update 与 Modify 两者区别

date: 2017-03-24 22:01:00

  • Update更强调时效性,侧重于新加的内容是近期才产生的。
  • Modify更偏向于调整和修改(措辞、语法、结构之类的润色)使内容更完善/完美之类的,对时效性之类的没有强调。

$(this)-id 和 $(this)-attr('id')

date: 2017.06.18 20:39:25

返回元素都是ID,但如果元素没有ID,$(this).id 会返回一个空字符串,
而 $(this).attr("id") 将返回undefined

<a class="btn btn-info  modifyuser" href="#"  id="${user.id }">
    <i class="icon-edit icon-white "></i>  
	修改                                            
</a>

js中:

$(".modifyuser").click(function(e){
	var m_id = $(this).attr('id');
	e.preventDefault();
})

当中的$(this).attr('id')。"this"是指为".modifyuser"所在的标签,
这个标签当中的属性:id 既$(".modifyuser").getAttribute('id')。


参考:this.id vs. $(this).attr('id')

Git 更改commit 作者信息

要更改的作者/提交者字段中显示的旧电子邮件地址,
希望将正确名称和电子邮件地址作提交

tag: git | github | commit | author | 作者

打开Git Bash

创建存储库的全新裸克隆:

git clone --bare https://github.com/user/repo.git
cd repo.git

复制并粘贴脚本,根据您收集的信息替换以下变量:

  • OLD_EMAIL
  • CORRECT_NAME
  • CORRECT_EMAIL
#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

按Enter键运行脚本。

查看新的Git历史记录是否有错误。

将更正的历史记录推送到GitHub

git push --force --tags origin 'refs/heads/*'

清理临时克隆:

cd ..
rm -rf repo.git


参考

常见版本号

date: 2019-03-01 10:28:00

版本号 版本 用途
BUILD-XXX 开发版 一般是开发团队内部使用
GA 稳定版 内部开发到一定阶段,各个模块集成后,经过全面测试发现没有问题,可对外发行了。
这时候叫GA(General Availability)。基本上可以使用
PRE(M1, M2) 里程碑版 由于GA还不属于公开发行版,里面还有些功能不完善或者bug,于是就有了milestone(里程碑版)。
milestone版主要修复了一些bug调整。一个GA后。一般会有很多个里程碑版。例如 M1 M2 M3……
RC 候选发布版 从BUILD后到GA在到M基本上系统就算是定型了,这时候系统就进入Release Candidate(候选发布版)。
该阶段的软件类似于最终发行前的一个观察期,该期间只对一些发现等级高的bug进行修复。
发布 RC1 RC2 等版本
SR 正式发布版 公开正式发布。正式发布版一般也有多个发布,例如 SR1 SR2 SR3 等等,
一般是用来修复大bug或者优化

常见数字版本号

软件版本号:2.0.2.RELEASE

  • 2:主版本号:当功能模块有较大更新或者整体架构发生变化时,主版本号会更新
  • 0:次版本号:表示只是局部的一些变动
  • 2:修改版本号:一般是bug的修复或者小的变动
  • RELEASE:希腊字母版本号,表示注明当前版本的软件处于哪个开发阶段

常见希腊字母,用于表示当前开发阶段

  • Base: 设计阶段,只有相应的设计没有具体功能实现
  • Alpha:软件的初级版本,内测版,存在较多bug
  • Bate:表示相对 alpha 有了很大进步,消除了严重的bug,还存在一些潜在的bug
  • Release:该版本表示最终版本。

《游戏性是什么》13. 结构

date: 2016-06-12

本章将回归到现实社会视角之中。现实社会的各种概念,对商业游戏开发有着怎样的影响?
回答这个问题的关键点,就是“结构”。

——《游戏性是什么》第13章

什么是结构

结构一词,原本是建筑学中的专业术语,意为“构造”。

之后,这一词也在计算机科学和电子工程等领域中使用,意为“设计**”。

相信不少人都听说过“CPU和PC的结构”这种说法吧。

现在这个词的意义又进一步扩展了,已经广泛应用于媒体论、经营学、哲学、法学等各领域。

在这其中,以社会学观点引起大家注目的,是美国学者劳伦斯·莱斯格关于互联网时代版权研究的《代码》。

莱斯格论述道,人的活动在无意间会收到很多因素的规制,如法律、习惯、市场和结构。

他在对社会上所存在的多样的结构样态进行解说的同时,指出其本质是为了让利用者遵守某种规范而设计阶段开始就被设计出来的一种系统。

另外,日本**家东浩纪认为,结构就是环境管理型权力

人在成长的过程中学习法律和社会习惯等,学习社会中行使权力的方式,以及社会所要求的举动、行为等。另一方面,在社会中特定的意图下,还存在着以一种无形的形态融入环境中、无意识间规制了人行为的“结构”。

举个例子,让我们来看下NHK征收视费的相关内容。

日本《放送法》第64条规定:“拥有能够收看协会节目的收视设备的人,必须与协会签订关于接收节目的相关合同。

不过,配置有不以收看节目为目的的收视设备、无线电广播(指传送语音以及其他无线电内容、但并不用于电视节目),或禁用于多工调频的收视设备的群体,则不受此限制。”

所以,如果是拥有电视但接收节目信号的目的并非收看节目,以及没有电视的情况下,以自己的意志不支付收视费的选择就能够合法化了。

不过,在出租公寓签订了优先电视等集体合同的情况下,有时管理公司会将集体合同中的租凭费追加到租金中。

在这种情况下,无论你是否拥有电视机,都不可回避支付收视费。这就是一个环境管理型权力的不错案例。

除此之外,还有像使用录音录像机器、DVD等私人录制设备录制的补偿金等,也都可以作为这种类型的例子。因为不管是不是对电视节目等进行录像和录音,消费者都必须支付这个费用。

经营学中的结构

近年来,在经营学中也出现了一个叫作商业结构的概念.

商业结构是为了让商务活动中的必要要素和抽象概念等结构得以体系化呈现的架构

在《商业·结构》这本书中,藤本隆宏、青岛矢一、武石彰将其定义为“商业过程中各种活动要素之间相互依存或者相互关联的固有方式”。

举个例子,如果游戏市场盗版猖獗,实体游戏业务发展就会艰难。而网络游戏则成为产业,取得巨大成功。

这就是因为网游采用了客户服务型的游戏结构,并遵从了以预付卡进行收费结算的商业习惯。这一连串的结构应该就是商业结构了。

信息社会论中的结构

在信息社会论中也应用了结构的概念。日本社会学家滨野智史在《结构的生态系统》一书中指出,结构是:

“无需让人们意识到被规则和价值规训”的结构和“独立于人的主观意识,但会影响和引导人的行为”的构造。

在这本书中,将关于结构的研究,推广到一个更加普及适化的层面。

举个例子,让我们比较一下快餐店和高级餐厅中的椅子。快餐店的椅子很小,而且很多都是塑料制成的。

而高级餐厅的椅子就很大,可以提供舒适的体验。快餐店的这种坚硬的、小号的椅子,有助于提升快餐店的餐位周转率。

接着举例。丰田汽车研发除了一项服务,就是可以自动从驾驶员呼出的气体中检测酒精含量,如果检测出了一定浓度的酒精含量,就无法发动车子。

假设这种服务,不仅限于丰田车,而是所有车都能装上,那么酒驾在理论上是不可能存在的了。

而且,当这项记述应用100年后,大家可能都会忘记应用这项技术的原因(完全消灭酒驾行为)了吧。根据滨野的观点,这也是结构。

游戏中的结构

至此,以对游戏进行符号学上的结构性分析为开端,继而研究了Ludo和故事性(Narreme)的相关内容。通过这些研究发现,游戏中存在由Ludo和Narreme相互补充所构成的结构。这可以说是从着眼于游戏自身构造而得到的结论。

另外,影响游戏的外部因素也很多。第一,游戏的运行环境,如以游戏机为首的硬件设备。屡次将游戏硬件设备称为游戏平台,这其实是指游戏软件的内容和形式是由游戏平台结构(设计**、标准)而定的意思。游戏是无法超越游戏机的技术规格的,这一点显而易见。

另外,游戏硬件设备是根据制造厂商的商业战略制作的。

也就是说,游戏无论是在技术上还是在商业上,都与各种平台紧密相关。而且,这点也给游戏设计自身带来了巨大的影响。

PONG的商业结构

结构给游戏设计带来了哪些影响?回到游戏历史中来考察这一点。

数字游戏的产业化是从街机游戏开始的。不过,师姐最初的商业数字游戏Computer Space却并没能取得商业上的成功。最早获得巨大成功的是在总结了Computer Space 的经验教训之后所制作的PONG(快速明白PONG)

区分出Computer Space和PONG的高下的,正是:

是否有意识地将商业结构结合到游戏设计之中

Computer Space是space war!快速了解space war!)的街机移植版。space war! 的硬件平台是小型计算机PDP-1,开发者也好,玩家也好,都是学生和研究者。

space war!相当于今天的免费软件,发布后出现了大量的复制和改良版本,之后它还作为PDP-1的demoSoft被捆绑发行。也就是说space war!中并不存杂直接商业结构。

Computer Space的开发制作欠缺深层次的商业结构分析,仅是比较忠实于原版的移植,但硬件平台已经变成街机。

其购买主力人群是酒馆老板,以期待能够赶超当时已经聚集大量人气的弹珠球。

不过,在研究室中具有人气的游戏,转移到娱乐场所时,却并没有聚集到多少人气。

再加上研究室和酒馆的定位不同,内容复杂的游戏并不适合客人投币来玩。

之后,该作品在开发续作时,开发者思考了游戏究竟应该具有什么样的内容,才能让客人乐在其中,也就是说,思考了商业结构。其思考结果得出如下几个要素:

  • 以赚钱为目的

  • 玩家是酒馆的客人

  • 和朋友们一起找乐子

  • game over时可以投币继续

  • 单手就能玩的简单操作

综合上述要素开发出的游戏是PONG,一部大为热卖的作品。

PONG的开发背景中,存在街机的商业结构,即厂商将游戏机卖给娱乐场所盈利,娱乐场所靠客人玩游戏投币盈利。

顺便说一下,布什内尔在开发PONG的时候成立了雅达利公司。而且这部作品的热卖使他成为了美国梦的代表者。

在这之后,雅达利公司改正了space war!中的缺点,发售了Asteroid快速了解Asteroid)。

据记录,Asteroid也获得了成功,还带来了闲暇时间社会人士大量出入娱乐场所进行游戏的社会现象。

游戏设计的激进化

由PONG中分析得出的街机游戏商业结构和游戏设计间的关系,成为了之后游戏的良好范。《打砖块》《太空**者》《吃豆人》等,全都是在这个商业结构的基础上设计的。

街机游戏的开发中,最重要的一点是“确保购买使用游戏机的店铺的利益”。

只有运营商得到了恰当的利益,游戏厂商才能的到新游戏作品的订单。

正因如此,游戏开发设计的相关人员有必要对店铺中玩家的行动和嗜好进行深层次的观察。

同时,关于投1枚游戏币可玩的最长时间,也就是游戏制作时有必要考虑的问题。因此在街机游戏的商业结构中,有着

游戏厂商:运营商:玩家

这种B2B2C模式的特征。

当时的街机游戏开发可以总结为“制作出让玩家愉快地进行游戏,引导玩家多次投币的装置”。

不过,这里也存在一种悖论,即需要承担“玩家熟练度上升,用1枚游戏币即可长时间玩游戏”的风险。

不过这种商业结构,逐渐给游戏设计带来了激进化问题。

对于运营商来说,如果玩家投1枚游戏币就能长时间玩耍,利益就无法增长。因此,游戏厂商就面临运营商提高游戏难度的压力。

不过仅仅提高游戏难度,又会让玩家敬而远之。因此到了80年代中期,游戏的设计方向转变为:

如何以吸引玩家的高难度挑战,来增加单位时间内游戏币的投入量(income)。

这个时期的代表作,可以以《魔界村》为例。利用点绘方式描绘出的美丽图像,以及十分具有震撼力的音效,都会引起大家的瞩目。

而且在游戏开始时会让玩家预览整个场景的结构,向玩家传达后续关卡的信息,设计者在唤起玩家挑战欲望这一点上下足了功夫。

平板电脑时代的结构

与商业结构相结合的游戏设计手法现在依然在应用。面向平板电脑的F2P(免费游戏)游戏《部落冲突》(这个就自行搜索了),就是一个很好的例子。

这个游戏的开发者,以战略要素为作品的基础,又推出了“table first stategy”(平板设备最优先战略),可以说在不断留意着平板电脑可用性的同时进行游戏开发。

特别是屏幕滚动功能、帧速率、手势控制、按键配置、点击时间的“舒适度”等,都是公司全员上下一起研究的,如果实在无法让玩家获得舒适感,就需要继续调整.

技术的进步与结构

在构成游戏的Ludo外部还存在各种各样的结构,都给游戏设计带来了很大的影响。在结构中,既有游戏平台(硬件)结构,也有更加外围的商业结构。

而且,还有一种能够给所有的这些都带来普遍影响的结构,就是以半导体和通信为代表的技术。

技术的进步催生了信的硬件(游戏平台结构)、新的商业模式(商业结构)和新的游戏(Ludo的结构)。

如果回溯从街机游戏到家用游戏机,以至于到社交游戏的变迁历程,就能明确感受到技术进步给游戏带来的影响

小结:

  • 虽然结构原本是建筑学中的专业术语,不过它逐渐在社会的各种领域中都得到了使用。

  • Computer Space失败了,而PONG却获得成功,出现这种差异的原因在于是否将商业结构结合到游戏开发中。

  • 游戏身处游戏平台结构和商业结构之中,这两种结构对游戏设计产生了诸多影响。

  • 游戏以及与游戏相关的各种结构,都受到技术革新的巨大影响。


至此,从“游戏”和“游戏性”两词“定义”的模糊性着手。为了独立研究“游戏性”的准确概念。以“人类是如何认识游戏的,又是如何进行游戏的”为线索,从“身体”“视觉”“世界”“触觉”四个角度进行探究。

前半部分从多个角度分析人对游戏的认识机制,也是为了方便理解人接触游戏直到沉迷于游戏这个过程。

后半部分,灵活运用了现在在各研究领域中都得到应用的一般性动机理论,分析了人沉迷游戏的过程。同时从游戏设计师的角度出发,研究了这种机制在游戏设计中的应用,其结构就是以游戏平衡性的形式呈现出来的。

在这些内容上,对游戏性的本质进行思考,终于接近了“Ludo”这个概念。(引导玩家进行效率预估的设计机制,以便于玩家通过实际身体/限制身体认知目标世界,以达成自己所设定的目标)。

极端概括来说,Ludo是游戏独特的“构造”,给这个构造赋予意识就是“Narreme”。Narreme是叙事的基本构成要素,即能让人感知到某种故事的符号。Narreme和Ludo的组合可以激发人的想像力,让玩家感受到游戏更深层次的意义。

影响游戏体验的外部因素是结构

探究人与游戏之间的关系,也给了我们一个重新研究大脑与外部环境间关系的契机。即人作为人之前只拥有大脑,大脑从我们出生的瞬间开始,就以与包含身体在内的“外部环境”的交互为线索,通过Hand Regard等方式来学习以及成长。

之后,交互行为的经验,就会以故事的片段,即Narreme的形式铭刻在我们的记忆中。通过关联Narreme的片段,我们来理解“人生”这个故事,这些记忆也会成为一种指导,作为继续生存下去的基础。如果像这样继续论述下去的话,自然就能遇到一个新的概念研究。那就是行为与记忆的关系。这确实和探求游戏性时所得到的Ludo与Narreme的关系是相同的。

摘自《游戏性是什么》第13章(结构)喜欢这本书,

其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

IaaS、SaaS 和 PaaS 的区别

date: 2018-08-01 14:49:18

  • IaaS是卖笔记本电脑的,
  • PaaS卖操作系统的(比如windows),
  • SaaS是卖应用程序的(比如Office等办公软件,普通小白用户能直接用的东西)

从售卖数量上来说,卖笔记本本身的IaaS大于卖电脑操作系统的PaaS,但是利润率正好反过来,卖操作系统的PaaS更赚钱,所以微软的头号摇钱树就是office;

一个行业刚兴起的时候,一般是卖硬件的最赚钱。打个比方,智能手机刚兴起的时候是苹果最赚钱,其次赚钱的是卖操作系统的,例如小米等,最不赚钱的是卖应用程序的比如腾讯;

但是随着时间推移和行业的发展,利润中心会逐步向后移,市场成熟后,利润都集中到应用程序(SaaS)上,因为应用程序才是普通用户最终接触到,直接能使用的。

大概是酱紫。

上面这个比喻使用和计算机领域相关的东西来比喻的,如果用日常生活中的东西来比喻的话:

  • IaaS是政府出租土地的,可以种地,可以盖楼,相当于出租资源;
  • PaaS是地产开发商,盖了楼卖毛坯房的,相当于有了应用的架子,但是并不能给最终用户使用;
  • SaaS是装修队,根据用户需求把房子装修出来给不同需求的人住,面向最终用户。

你也可以想象一下**地产的发展情况,20世纪时候成片出租土地最赚钱,21世纪初的时候是地产开放商最赚钱的时候,而现在房产泡沫没有之前那么繁荣了,利润点也就慢慢往诸如房产交易商、软装公司转移了~

原文来自 知乎

Hexo 搭建过程

Hexo的搭建

A fast, simple & powerful blog framework
一个快速、简洁、强大的静态博客框架。

根据以下官网wiki安装即可
Nodejs
Git
Hexo

安装Nodejs,git

hexo

安装/初始化 hexo

之后打开终端,使用npm安装hexo,需要root权限进行某些文件的写入

sudo npm install hexo-cli -g

博客初始化,hexo会初始化文件夹(没有会自己创建),博客所有内容将放在改文件夹中。
初始化完毕后,进入该文件夹中执行npm install对npm模块进行初始化安装

hexo init dirName #eg:hexo init H2O2
cd dirName
npm install #对dirName进行nodejs库的安装(用于后续插件安装)

之后打开刚才的文件夹,会看到这样的结构

.
├── _config.yml     //hexo配置文件
├── node_modules     //node.js运行库
├── package.json
├── scaffolds     //markdown模板
├── source     //资源文件夹
└── themes     //主题

试着运行

hexo s

用浏览器打开 http://localhost:4000

hexo编译的时候会出现报错:

eg:

{ [Error: Cannot find module './build/Release/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/default/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }
{ [Error: Cannot find module './build/Debug/DTraceProviderBindings'] code: 'MODULE_NOT_FOUND' }

这是模块报错,npm install 重装一遍

npm install hexo --no-optional

如果是墙的问题导致安装不成功,切换淘宝镜像源

npm install -g cnpm --registry=https://registry.npm.taobao.org
npm install hexo --no-optional

新建文章

hexo new '文章名称'

之后就会在 **source/_posts/**生成对应的md文件

---
title: test
date: 2016-03-05 14:56:52
tags:
---	

多标签的写法

tags:

- tag1
- tag2
- tag3

主题更换

hexo默认的主题是landscape,主题放在themes文件夹中,之后在hexo的配置文件_config.yml中将theme后的名称改成想更改的主题名称即可。主题的配置因主题而异,在主题中同样有一个_config.yml文件,是配置主题设置的,不要与hexo的配置文件弄混。

_config.yml配置文件

hexo的相关配置在这个文件中都可以配置,详细介绍一下

Docs
Source

## Site        #网站基本信息
title: Hexo        #网站名称
subtitle:        #副标题
description:        #描述,会被搜索引擎抓取,分享文章的时候也会显示
author: John Doe        #作者
language:        #语言
timezone:        #时区,留空为系统默认时区

# URL        #网站URL信息
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://yoursite.com        #网站URL
root: /        #网站根目录,如果整个博客是一个网站的子目录,需要将根目录改为子目录的名称
permalink: :year/:month/:day/:title/        #每篇文章的URL格式
permalink_defaults:        #默认URL格式

# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render:

# Writing
new_post_name: :title.md # File name of new posts        #默认新文章的名字
default_layout: post        #默认文章布局
titlecase: false # Transform title into titlecase
external_link: true # Open external links in new tab        #是否在新标签页打开链接
filename_case: 0
render_drafts: false
post_asset_folder: false
relative_link: false
future: true
highlight:        #代码高亮设置
  enable: true        #代码高亮开关
  line_number: true        #是否显示行号
  auto_detect: false        #是否自动判断语言
  tab_replace:        #用空格替换tab

# Category & Tag        #目录与标签设置
default_category: uncategorized
category_map:
tag_map:

# Date / Time format        #日期设置
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD        #日期格式
time_format: HH:mm:ss        #时间格式

# Pagination
## Set per_page to 0 to disable pagination
per_page: 10        #每页的文章数目
pagination_dir: page        #页面路径

# Extensions        #扩展配置,配置主题以及hexo插件信息
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: landscape        #主题名称

# Deployment        #发布相关配置,需要安装相应插件
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type:

生成网站文件

hexo g

之后会生成一个public文件夹,文件夹中的文件即为生成的网页文件。

将博客部署到github

按照github pages的说明配置,申请一个github帐号,之后新建项目,注意项目名称为用户名.github.io否则之后是无法访问的,一个账户只能建一个github pages。之后将之前的public文件夹里的内容都同步到这个项目的master分支,之后浏览器访问用户名.github.io就能看到hexo的博客界面了。

连接github同步可以直接使用git命令或者github客户端,但是这样都需要 hexo generate 之后再使用git,还是有些麻烦。hexo-deployer-git是hexo的一个插件,可以直接使用hexo命令在生成博客文件后部署到github上。
(此处关于github注册,连接,创建仓库不讲,自行搜索)

首先进入到博客文件夹,安装hexo-deployer-git

cd 博客文件夹
npm install hexo-deployer-git --save

然后在博客的配置文件_config.yml(注意是hexo工作目录,不是主题中的)中添加

deploy:
  type: git
  repo: [email protected]:Zakariyya/zakariyya.github.io.git # 这是我的仓库,请自行修改对应的
  branch: master  #博客生成网页推送的分支,请于源码(很多个.md文件)区分开

git地址在git主页中可以看到,注意选择ssh的地址

在本地生成ssh密钥(做连接github用)

这里只简单讲解ssh密钥,复杂配置自行搜索

git bash运行生成密钥对
ssh-keygen
  • windows用户:C:/用户/.ssh
  • linux用户:~/.ssh
    进入以上路径后可以看到id_rsaid_rsa.pub两个文件,分别是私钥和公钥,下面就不用多解释了。此时还没有know_hosts文件,使用ssh连接后才会生成。
读取生成密钥的公钥:id_rsa.pub

把显示出来的内容复制下来,然后到github的网页上,进入到设置界面,找到ssh key,新建一个key,那刚才的内容粘贴进去。
添加之后测试一下

第一次使用ssh连接github会有提示,输入yes即可,之后如果出现success的字样说明连接正常,ssh配置成功。
现在就可以使用hexo-deployer-git插件了,方法很简单,

hexo g  ##之后再使用
hexo deploy  ##就可以自动部署了。

hexo短命令

hexo支持短命令,使用起来不用输入太长的指令,只列出常用的:

hexo s    //相当于hexo server在本机预览网页
hexo g    //相当于hexo generate生成静态网页
hexo d    //相当于hexo deploy部署网页到服务器
hexo g -d    //hexo generate和hexo deploy的结合

至此博客已经可以使用了。

Jib构建 java镜像

参考
jib Official:GoogleContainerTools/jib
本文示例完整 demo github地址 github.com/moxingwang/…

想要了解并且使用jib,首先你得知道或者使用过docker,在这个基础上才能够明白jib是干什么得,解决了什么问题。

首先我们先看一个例子,如何将一个spring-boot项目简单容器化,如果你从未操作过,可以动手自己实现,或者仔细阅读这篇文章第一个 spring Boot 应用通过Docker 来实现构建、运行、发布。你可能发现如果需要把一个java项目容器化这是一个麻烦和相对复杂的过程,首先你需要编写dockerfile,然后在build dockefile,如过需要push到registries,还需要经过push操作。虽然build和push还是非常简单得。但是写一个dockerfile真的比较麻烦,学习成本也高,看看官网Dockerfile reference就不想学了。那么有没有简单得办法呢,记住几个简单得命令就可以运行了,如同

mvn spring-boot:run

这么简单得命令,这个时候jib出场了,他就是来完成这个伟大得使命。

如果你还没明白jib是用来做什么事情得,推荐你阅读谷歌开源Java镜像构建工具Jib的前半部分,或者阅读jib Official:GoogleContainerTools/jib
接下来主要介绍具体如何使用(maven的方式)。
将java项目容器化push到registries
jib的引入非常简单,已maven plugin的方式集成到项目中,只需要在你的项目中引入下面代码即可

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>0.9.6</version>
    <configuration>
        <from>
            <!--base image-->
            <image>openjdk:alpine</image>
        </from>
        <to>
            <!--<image>registry.cn-hangzhou.aliyuncs.com/m65536/jibtest</image>-->
            <!--目标镜像registry地址,为了方便测试,你需要换成自己的地址,如果你的网络不好,可以选用国内加速器,比如阿里云的-->
            <image>registry.hub.docker.com/moxingwang/jibtest</image>
        </to>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>

这只是一个最简单的配置,比如registry认证配置,jvm配置等等,可以参考github jib详细说明jib/jib-maven-plugin/

构建你的镜像

mvn compile jib:build

可能你刚刚运行玩这一步就出现错误,提示Unauthorized,不用担心,这个命令需要把构建出来的image commit并且push到你远程的registry(我这里是registry.hub.docker.com),你可以按照【常见错误1】的方法解决问题。
如果你的网速慢一点可能会在最后步骤'Finalizing...',不过没有关系,稍微多等一会就ok,直到'BUILD SUCCESS'出现。最终一个完整的java project被实例化成镜像并且push到了registry里。接下来你可以测试刚刚完成push的镜像。
打开hub.docker.com/,你会发现你的image已经构建成功。

docker使用镜像

docker run -it --rm -p8080:8080 registry.hub.docker.com/moxingwang/jibtest

一个spring-boot的image这样就被启动成功了。本文示例demo中集成了swagger-iu, 项目启动成功后我们可以通过http://localhost:8080/sw/swagger-ui.html访问,可以成功在浏览器打开swagger。

把镜像直接构建到本地docker中
使用这种构建方式,首先你要确保本已经安装docker并且环境变量都配置正确,因为这种方式jib依赖docker 命令执行,你还需要保证已经启动服务(在terminal中执行 docker --version 能够正确返回)。

mvn compile jib:dockerBuild

接下来直接操作,首先查看本地已有images

docker iamges

执行
mvn compile jib:dockerBuild

可以看到本地image已经build成功。可以直接启动使用

docker run -it --rm -p8080:8080 moxingwang/jibtest

启动成功后同样可以直接访问http://localhost:8080/sw/swagger-ui.htmlswagger页面。

常见错误

  1. Failed to execute goal com.google.cloud.tools:jib-maven-plugin:0.9.6:build (default-cli) on project jib: Build image failed, perhaps you should set a credential helper name with the configuration '' or set credentials for 'registry.hub.docker.com' in your Maven settings: Unauthorized for registry.hub.docker.com/moxingwang/jibtest: 401 Unauthorized

当你从私有的registries pull或者push的时候需要认证机制。阅读官方说明按照步骤操作即可。Authentication Methods
如果帮你本机已经按照docker,那么操作更简单,可以通过docker命令直接登陆registries,然后继续其他jib的操作。

registry.hub.docker.com

docker login --username=你的hub.docker的用户名 registry.hub.docker.com
registry.cn-hangzhou.aliyuncs.com
docker login --username=阿里云docker用户名 registry.cn-hangzhou.aliyuncs.com

作者:m65536
链接:https://juejin.im/post/5b4e9c316fb9a04fa01d39d6
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

《游戏性是什么》12. 叙事和Narreme

date: 2016-06-12

——《游戏性是什么》第12章

游戏中的叙事分析

游戏中的叙事研究是如何展开的?
早在20世纪70年代中期,游戏中就有了故事性要素,时至今日,游戏中的故事性要素更是取得了飞跃的发展,同是还向多方面进一步拓展。

在此背景下,诸多研究者开始致力于这个课题的研究,如:
丹麦游戏研究者杰斯帕·居尔,曾对叙事定义与游戏做了对照分析。他指出,游戏的叙事性,

会随叙事定义的不同、对象游戏的不同而变化。

而且他还指出,在分析游戏中的叙事时,还需比较故事中的时间与现实世界中的时间,并且也要考察玩游戏的时间。

从Ludo与效率预估中,时间分析也是一个重要的因素。因此,研究游戏的叙事和基本要素时,要重视时间这个要素。

另外,Tom Bissell 认为,在存在叙事要素的游戏中,都使用了两种类型的故事手法。根据Bissell的观点,一种是Framed(框架型叙事),即用过场动画和影像叙事,不允许玩家介入。

另一种是“未脚本化的、由玩家决定的……的部分”。Bissell将其成为Ludo叙事(ludonarrative)。

这里所使用的“ludo”只是单纯的前缀词,表示“游戏的”之意,与之前的Ludo不同。

Narreme

一个像Ludo一样的基础概念——Narreme,即“构筑故事性的基础构成要素”,这一概念是1969年由尤金·多尔夫曼提出的。

1974年,亨利·怀特曼进一步发展了此概念。

怀特曼从叙事的角度,对广告中宣传语进行了分析研究。

宣传语中会使用“不完整的语句” 之类的形式,名词和形容词、动词的使用并不鲜见。那么,宣传语是否也是叙事?

如果不是,叙事和非叙事的界限又是什么?怀特曼用Narreme框架对此进行了分析,用叙事构成要素的形式做了研究。

Narreme的研究现在被计算机科学研究者阿洛克·邦卡迪和罗赫略·E.卡多纳·里维拉进一步拓展。

他们指出,叙事就是由Narreme连锁构成的。

基本构成要素

“拥有表面性结构,能发挥所有故事性功能的最小单位”,即“故事中发挥功能的最小单位”

罗兰·巴特曾经论述道,叙事的最小单位是功能体

功能体分为两类,一类是作为叙事中的必要要素,起到连接作用的功能体。

另一类是起补充作用、填故事空间的功能体。

在影像理论中,Christian Merz 等人提出,叙事的基本结构就是通过连续拍摄得到的影像片段,即镜头。

不过,David Bordwell 则对此观点提出了异议、因为影像表现中存在这样的叙事:如果在一个镜头中有多个人登场并各自进行自身的表演,需要用一些更加细致的镜头组合来表现不同人物的台词和表演。

叙事就成为了镜头的核心导向。也就是说,构成叙事的基本要素不仅限于镜头等同一个单位,还应该会随着状况发生变化。

在现在的影像理论中研究趋势中,David Bordwell 的主张成为了主流。

那么,Narreme 在影像体验中究竟是什么?

承继前述 David Bordwell 和怀德曼 的观点,可以对其做出如下解释。

Narreme 是由登场人物、表情、事情、物品、台词、视觉效果、音响效果等影像要素以及这些要素的复合形式构成而成。

能够使故事得到客观阐释的最低限度要素

这个定义的根基中包括 David Bordwell 的一个观点,即影像体验也是一样的,是通过玩家进行阐释的。

不过还要加上一个条件,那就是在游戏中,玩家是作为主体介入游戏的。因此,游戏中的叙事,是玩家理解当前的剧情,再找到推进剧情的方式的形式,即玩家来推动游戏的叙事。

反过来说,只要这些故事阐释的不充分,原则上叙事在时间和空间上都无法进一步推进。

也就是说,对游戏中“叙述的基本构成要素”,可以做出如下定义。

向玩家阐释游戏角色、物体、空间设计、符号以及这些要素复合构成的故事性时间与空间,使得玩家能够向着下一个故事性的时间与空间推进的最低限度的要素。

另外,刚才行文中加入了“原则上”这个表述。这是因为有些游戏设计师可能在游戏设计中以 Ludo 的形式加入了“什么也不选择/无法选择”的选择项。

换句话说,就是在叙事过程中,

加入了可以实现交互性介入,但又对玩家的输入 “无反馈” 的设计。

这可以说是游戏设计师在整合 Ludo 和叙事的基础上,加入了自己的想法和理念。

《吃豆人》的 Narreme

至此,分别阐述了游戏的基本构成要素 Ludo 和叙事的基本构成要素 Narreme 。来分析 Narreme 在游戏中的作用。

尝试以 Ludo 为基准重新分析 《Pacman》 ,《Pacman》 中最基本的Ludo,是吃掉场景中亮点和回避敌方角色的结合。

《Pacman》中,以这个Ludo 为基础的同时,当角色吃掉较大的能量亮点时,就可以逆转与敌方的攻守形式,变成一种无视敌方角色,尽可能多地吃掉亮点的状态。这就是《Pacman》独特的效率预估模型。

当玩家操作吃豆人时,“想象成了一个生物角色”,才可以将亮点理解为“食物(豆)”进行游戏。所以他们才会自然地产生“大亮点代表更多食物,所以能提升能量”的关联想象。


  1. 这个是生物

  2. 所以会吃食物

  3. 吃到较大的食物,就可以提升能量


自然地产生这种关联想象,证实玩家可以融入《Pacman》世界的重要原因之一。另外,这也成为了让过去非街机游戏玩家的女性群体接触游戏的原动力。

虽然《Pacman》的角色和动作的关联并不是叙事,单玩家却可以根据角色和动作想象出“故事”。也就是说,无论是“角色”的外形还是“吃豆”的动作,可以说都让玩家容易理解 Ludo 意义的 Narreme。

在动作游戏的Narreme

书中举例《战国BASARA》、《北斗无双》两个游戏。不过我没玩过,简单说说就好了。

这类游戏中,通常通过角色的动作可以看出该动作的攻击程度,角色的扮相看出装备的强弱。

动作,eg:《街头霸王4》。扮相,eg:《红色警戒》中的坦克和士兵。

正因二者有着这样的区别,对玩家攻击的认识也产生了如下的差异。

  • 高频率轻量攻击、低频率重量攻击

这种差异是由于每个游戏的世界观不同而形成的,不过玩家却能通过游戏角色的外观、装备马上认识到这种差异。也就是说:

角色的外观和装备是构成游戏整体叙事的 Narreme 之一。

小结:

  • 故事类型化的方法和研究有多种,其中一些影响了电影脚本的创作。

  • 叙事是由故事和叙述构成的,讲述行为也成了分析的对象。

  • 将构成游戏叙事的基本要素成为 Narreme。

  • Ludo 和 Narreme 互相影响,共同构成游戏。


这一章真的很枯燥,看了好多遍才慢慢理解叙事和游戏性的关系。看不下去的话就别为难自己

摘自《游戏性是什么》第12章(叙事和Narreme)喜欢这本书,

其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

MinDoc搭建过程

日常启动:

cd /opt/mindoc
./mindoc_linux_amd64 &

参考

如果你的服务器上没有安装golang程序请手动设置一个环境变量如下:键名为 ZONEINFO,值为MinDoc根目录下的**/lib/time/zoneinfo.zip** 绝对路径。

eg:

vim /etc/profile

## MinDoc
export ZONEINF=/lib/time/zoneinfo.zip
export PATH=$ZONEINF:$PATH

如果下载的压缩包中不存在该文件,请从 https://github.com/lifei6671/mindoc/blob/master/lib/time/zoneinfo.zip?raw=true 下载

不会修改Linux 环境变量的请移步: http://jingyan.baidu.com/article/ea24bc399a73bcda62b33104.html

在某些低版本的linux上可能需要将glibc库升级到2.14版本。

第一步 下载可执行文件

请从 https://github.com/lifei6671/mindoc/releases 下载最新版的可执行文件,一般文件名为 mindoc_linux_amd.tar.gzmindoc_linux_amd64.zip

第二步 解压压缩包

请将刚才下载的文件解压,请执行如下命令解压:

tar -xzvf mindoc_linux_amd64.tar.gz

或

unzip mindoc_linux_amd64.zip

第三步 创建数据库

如果你使用的 mysql 数据库,请创建一个编码为utf8mb4格式的数据库,如果没有GUI管理工具,推荐用下面的脚本创建:

CREATE DATABASE mindoc_db  DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;

如果你使用的是 sqlite 数据库,请将 conf/app.conf 中的数据库配置成如下,系统会自动创建 sqlite 数据库文件:

db_adapter=sqlite3
db_database=mindoc_db

第四步 配置数据库

请将刚才解压目录下 conf/app.conf.example 重名为 app.conf

cp conf/app.conf.example conf/app.conf

同时配置如下节点:

#数据库配置
db_adapter=mysql
#mysql数据库的IP
db_host=127.0.0.1

#mysql数据库的端口号一般为3306
db_port=3306

#刚才创建的数据库的名称
db_database=mindoc_db

#访问数据库的账号和密码
db_username=root
db_password=123456

在 MinDoc 根目录下使用命令行执行如下命令,用于初始化数据库:

./mindoc_linux_amd64 install

稍等一分钟,程序会自动初始化数据库,并创建一个超级管理员账号:admin 密码:123456

第五步 启动程序

执行如下命令启动程序:

#修改可执行权限
chmod +x mindoc_linux_amd64

#启动程序
./mindoc_linux_amd64
此时访问 http://localhost:8181 就能访问 MinDoc 了。

第六步 配置代理

这一步可选,如果你不想用端口号访问 MinDoc 就需要配置一个代理了。

Nginx 代理的配置文件如下:

server {
	listen       80;

	#此处应该配置你的域名:
	server_name  webhook.iminho.me;

	charset utf-8;

	#此处配置你的访问日志,请手动创建该目录:
	access_log  /var/log/nginx/webhook.iminho.me/access.log;

	location / {
    try_files /_not_exists_ @backend;
	}

	# 这里为具体的服务代理配置
	location @backend {
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host            $http_host;
    proxy_set_header   X-Forwarded-Proto $scheme;

    #此处配置 MinDoc 程序的地址和端口号
    proxy_pass http://127.0.0.1:8181;
	}
}

Offline Installation Docker

Offline Installation Docker

download docker .tar.gz and follow the doucment

  1. Download the statis binary archive. Go to http://download.docker.com/linux/static/stabl
    (or change stable to edge or test), choose your hardware platform, and download the .taz file relating to the version of Docker CE you want to install.
  2. Extract the archive using the tar utility. The dockerd and docker binaries are ectracted.
tar zxvf /path/to/<FILE>.tar.gz
  1. Optional: Move the biaries to a directory on your executable path, such as ** /usr/bin/ ** . If you skip this step, you must provide the path to the executable when you invoke ** docker ** or ** dockerd ** commands.
sudo cp docker/* /usr/bin/
  1. Start the Docker daremon:
sudo dockerd &

If you need to start the daemon with additional options, modify the above command accordingly or create and edit the file ** /etc/docker/daemon.json ** to add the custom configuration options.

DockerHub sreach oracle

warning: Step1 is online , Step2 is offline install docker

Step 1 docker pull

docker pull wnameless/oracle-xe-11g

wnameless/oracle-xe-11g

Just being bored like this, here is "offline install "

Step 2 cloning the project wnameless/oracle-xe-11g on github

  1. find the file( ** dockerfile ** )location, exec command then waiting
docker build .
  1. start command (in github readme)
docker run -d -p 49161:1521 -e ORACLE_DISABLE_ASYNCH_IO=true wnameless/oracle-xe-11g

或者(参考dragonbest520这位大佬的回答)

docker run --name oracle11g -d -p 49161:22 -p 1522:1521 -p 49163:8080 -v /oracle11g-data/:/u01/app/oracle/oradata/oracle11g-data/ -e ORACLE_ALLOW_REMOTE=true --restart=always wnameless/oracle-xe-11g

By default, the password verification is disable(password never expired)
Connect database with following setting:

hostname: localhost
port: 49161
sid: xe
username: system
password: oracle

Step 3 copy the image with other PC

you can exec the Step1 and then save the image with other PC, copy into the target PC, save the image

docker images ## show the images list
docker save -o <save /path/file name.tar>  <image name> 

eg : docker save -o /opt/oracle.tar  wnameless/-oracle-xe-11g:v1

Target PC

docker load < /home/save.tar>

eg: docker load /opt/oracle.tar

docker command ** save ** and ** load ** ,
** export ** and ** import ** ,
save is used for image, no container.
export is used for container, no image.

Docker modify the default path

use yum install the docker ,the default path is: /var/lib/docker . In fact, we need custom path into save and install it.

在硬盘上开一个100g大小的空间,并格式化,参考命令:mkfs.ext4 /dev/sda2 ,然后挂载。如果不明白如何分区格式化并且挂载,请看考这里。这篇文章可以说是我见过关于初级磁盘管理最好的一篇文章了。
挂载之后复制文件夹/var/lib/docker/ 到挂载的位置,再软连接回去。(然后docker images就可以持久化放到硬盘里面了重启不会丢失)。参考操作如下:

查看docker的基本信息

docker info  #查看docker的基本信息

更改安装路径

停止docker服务

systemctl stop docker

备份原目录

cp -r /var/lib/docker  /data/app/docker
mv /var/lib/docker /var/lib/docker.bak
ln -s /data/app/docker /var/lib/docker

或者

cp -rf /var/lib/docker /mnt/
rm -rf /var/lib/docker
ln -s /mnt/docker /var/lib/docker

重启docker服务

systemctl start docker

查看docker信息

docker info

Docker 持久化

容器中数据持久化主要有两种方式:

  • 数据卷(Data Volumes)
  • 数据卷容器(Data Volumes Dontainers)

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,可以绕过UFS(Unix File System)。

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除
  • 一个容器可以挂载多个数据卷

注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount。

创建数据卷

示例:

docker run --name nginx-data -v /mydir nginx

执行如下命令即可查看容器构造的详情:

docker inspect 容器ID

由测试可知

  • Docker会自动生成一个目录作为挂载的目录。
  • 即使容器被删除,宿主机中的目录也不会被删除。
删除数据卷

数据卷是被设计来持久化数据的,因此,删除容器并不会删除数据卷。如果想要在删除容器时同时删除数据卷,可使用如下命令

docker rm -v 容器ID

这样既可在删除容器的同时也将数据卷删除。

挂载宿主机目录作为数据卷
docker run --name nginx-data2 -v /host-dir:/container-dir nginx

这样既可将宿主机的/host-dir路径加载到容器的/container-dir中。

需要注意的是:

  • 宿主机路径尽量设置绝对路径——如果使用相对路径会怎样?
  • 测试给答案
  • 如果宿主机路径不存在,Docker会自动创建
TIPS

Dockerfile暂时不支持这种形式。

挂载宿主机文件作为数据卷
docker run --name nginx-data3 -v /文件路径:/container路径 nginx

指定权限

默认情况下,挂载的权限是读写权限。也可使用:ro 参数指定只读权限。

示例

docker run --name nginx-data4 -v /host-dir:/container-dir:ro nginx

这样,在容器中就只能读取/container-dir中的文件,而不能修改了。

数据卷容器

如果有数据需要在多个容器之间共享,此时可考虑使用数据卷容器。

创建数据卷容器

docker run --name nginx-volume -v /data nginx

在其他容器中使用** -volumes-from ** 来挂载** nginx-volume ** 容器中的数据卷。

docker run --name v1 --volumes-from nginx-volume nginx
docker run --name v2 --volumes-from nginx-volume nginx

这样

  • v1、v2两个容器即可共享nginx-volume这个容器中的文件。
  • 即使nginx-volume停止,也不会有任何影响。

Tips / Reference: docker, 离线安装, centos, ubuntu, linux

sogou输入配置

date: 2016.09.07 21:39

参考“arch的wiki词条fctix

装完sogou后,装上“ fctix-im ”“ fctix-qt5 ”。

在~.xprofile,.bashrc,.zshrc里面都写上以下三行代码【这里的”~”是指“/home/用户名/”下的,之前弄成在”/”下了,怪不得一直找不到.xprofile文件】(手动滑稽~)

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=”@im=fcitx”


 

第二次装遇到最大的问题就是这个,哎~

arch打包sogou

date: 2016.03.04 21:39

几天前,搜狗输入法不知发什么疯了。尝试重装sogou的时候发现yaourt不到sogou。在竹子的帮助下,学会了打包。这以后应该会方便多了吧~

arch网站里面找到aur页面,搜sogou



 

点击“  Download snapshot  ”


下载后解压……

题外话:当时电脑还不能解压tar
yaourt -S file-roller   //这是gnome的归档管理器

安装上所有的依赖,可奇怪的还是不能用,双击解压包后鼠标一直转啊转,然后就没有然后了
解压命令:tar -xzvf 文件名
//文件名用tab补全,这样不容易出错

解压后,

makepkg     //打包
sudo pacman -U 文件名.tar   //安装

装好搜狗了。第二次重装系统的过程也是不顺利,输入法一直不听话……(干嘛?~我就要用搜狗,你管我啊~)
搜狗问题,见文《sogou输入配置

这篇的重点不是装搜狗,而是如何打包……

Java调用Python

date: 2018-07-12

祝,获得一项新技能

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Java 调用 Python
 * test for chengzhan
 * @author anan
 * Created on 2018/7/12.
 */

public class InvokeByRuntime {
  /**
   * @param args
   * @throws IOException
   * @throws InterruptedException
   */
  public static void main(String[] args) throws IOException, InterruptedException {
    System.out.println("-----------------");
    String exe = "python3"; // 执行命令
    String command = "./dtcTest.py"; //执行文件
    String num1 = "1"; // 入参
    String num2 = "2"; // 入参
    System.out.println("11111111111");
    String[] cmdArr = new String[] {exe, command, num1, num2};
    Process process;

    process = Runtime.getRuntime().exec(cmdArr); // 相当于在部署机中执行了:python3 ./dtcTest.py 1 2  返回的是输出结果

    InputStream is = process.getInputStream();  //输出内容以 “流” 形式存在
    String str;

    InputStreamReader dat=new InputStreamReader(is);
    BufferedReader bin=new BufferedReader(dat);
    while((str=bin.readLine())!=null){
      System.out.println(str);
    }
    process.waitFor();
  }
}

Git 仓库恢复

自建Git 数据库丢失

  1. 进入git的repository目录,将其中某个project,重命名为其它名字,比如 赚了100万.git 改名为 **赚了100万.git.11 **
  2. 打开gogs控制台,创建 赚了100万项目
  3. 删除目录中刚刚创建的 赚了100万.git ,将 赚了100万.git.11 再改为 赚了100万.git
  4. 在本地 clone 赚了100万.git,如果之前已经有了,可以跳过这一步
  5. 随意修改某一文件,提交到origin
  6. 刷新gogs控制台,你会发现一切又都回来了(如果你的项目很多的话,恩。。。写个for循环吧)

GIT拉出错误-远程对象已损坏

GIT pull error - remote object is corrupted

eg

Cloning into 'Allcloud'...
remote: Counting objects: 36, done.
remote: fatal: Out of memory, malloc failed (tried to allocate 185646833 bytes)
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header
$ git pull

remote: fatal: object 21f3981dd35fccd28febabd96f27241eea856c50 is corrupted
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

解决

Git indexing fails due to bad pack header

这确实可能是内存问题,并且要确保我们在这里不会丢失解决方案:

git config --global pack.windowMemory "100m"
git config --global pack.SizeLimit "100m" 
git config --global pack.threads "1"

有人说 git config --global pack.window "0" 也可以

原因

Git克隆在克隆存储库时压缩数据,

在接收数据/文件之前,它将压缩服务器内存上的数据。

如果服务器内存不足,则打包对象时会出现上述错误

您可以通过使git克隆存储库而不用以下方法打包服务器上的对象来解决此问题。

git config --global pack.window "0"


gogs: 如何恢复repository
GIT拉出错误-远程对象已损坏

Github 进行 fork 后与原仓库同步

问题场景

新公司要求所有的代码提交都要先通过自己的库提交到主repo上去,所以先在gitlab网页上fork出一个自己的库,在本地修改完代码后提交到远程自己库上,然后在gitlab网页上发起一个merge request请求,然后等待主repo主人review,同意之后合入。

问题是同时也有其他同学在主repo合入代码,所以我要定期和主repo保持同步。

开始我的想法

gitlab网页上提供了git pull这样的按钮,这样点一下就能让自己fork的库和原始库保持同步。然后自己在本地git pull,就能间接和原始的库保持同步。

但是我没找到这个按钮。但是我找到了下面这篇文章,照着操作之后,一步一步跟踪观察发现,每一步都能成功。

整体思路如下

  1. 在自己的本地添加主repo为上游代码库,注意只是配置原仓库的路径,并没有真正clone原仓库
  2. 然后将远程主repo同步到自己本地的机器
  3. 然后本地的机器再push到自己的远程的fork库
  4. 所有的操作都要在本地命令行完成

下面是我转载的,照着这个操作,完全没问题

我们在进行Github协同开发的时候,往往会去fork一个仓库到自己的Github中,过一段时间以后,原仓库可能会有各种提交以及修改,很可惜,Github本身并没有自动进行同步的机制,这个需要我们手动去执行,

现在我来演示一下如何进行自己的仓库和原仓库进行Gith同步的操作。

  1. 我使用终端 命令行的方式在Mac中来操作。首先在终端中配置原仓库的位置。进入项目目录,执行如下命令:查看你的远程仓库的路径。
$ git remote -v

origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
  1. 配置原仓库的路径:下面这步操作即添加主repo为上游代码库。
    注意一定要cd到你自己fork出来的库里面去,比如工程名叫 luoluo,那要先 cd 到 luoluo 中去,然后才能操作
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
  1. 再次查看远程目录的位置
$ git remote -v

origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY (fetch)
upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY (push)
  1. 抓取原仓库的修改文件
$ git fetch upstream

From https://github.com/Zakariyya/symphony
 * [new branch]          3.6.0-dev  -> upstream/3.6.0-dev
 * [new branch]          master     -> upstream/master
  1. 切换到master分支
$ git checkout master

Switched to branch 'master'
  1. 合并远程的master分支
    下面这行代码执行结束之后,本地代码会立刻和主库保持同步,非常神奇
$ git merge upstream/master

Updating a422352..5fdff0f
Fast-forward
 README				|	9 ------
 REAME.md			|   7 ++++
 2 files changed, 7 insertions(+), 9 deletons(-)
 delete mode 100644 REAME
 create mode 100644 README.md
  1. 此时,你的本地库已经和原仓库已经完全同步了。
    但是注意,此时只是你电脑上的本地库和远程的github原仓库同步了,你自己的github仓库还没有同步,
    此时需要使用 git push 命令把你本地的仓库提交到github中。

其实(4)(5)(6)可以合并成一条命令

git pull upstream master
  • 第一个参数pustream 表示远程主repo
  • 第二个参数master 表示自己fork库的master分支

这个是公司文档上写的,并不是从网上找来的
为了说清楚这个问题,亲自做了一张图

 __________________________________________________________________
 | gitlab                                                          |
 |                                                                 |
 |   __________                                     __________     |
 |  |          |         fork                      |          |    |
 |  | 主 repo  |---------------------------------> |  My repo |    |
 |  |__________|                                   |__________|    |
 |_______|____________________________________________| __ ^ ______|
         |                                            |    |
         |                                       Pull |    |
 _______ > __________________________________________ > __ | _________
 |                                                                    |
 | local                                                              |
 |                                                                    |
 |   __________                                       ______________  |
 |  |          |  git remote add upstream https://   |              | |
 |  | upstream | <-----------------------------------| Local master | |
 |  |__________|-----------------------------------> |______________| |
 |               git pull upstream master                             |
 |____________________________________________________________________|



参考:

软件为何会有那么多权限

date: 2018-07-03 14:42:18
行业内的变革并不是由于行业内的人来改变的,往往是由外来者来改变的。

这段是由oppo find X 和 vivo NEX 的弹出式摄像头引发的。

前些日子,find X 和 NEX 的用户发现,开启某些软件时候,摄像头会弹出并立马缩回:

  • QQ浏览器在启动时调用了前置摄像头
  • 百度输入法调用了麦克风
    这种未提醒使用者就调用了设备,涉及到隐私问题。

其实这几年社交,直播类的发展,渐渐减弱了人们面对摄像头的敏感度。
隐私问题严重性一直存在,大家都知道,只是无奈,不给权限就得不到该软件带来的便利。
加上隐私泄露带来的后果给受害者没有带来直接伤害,于是侥幸心理的人就多了起来。

这里有个值得关注的点

其实当开发者开发的一个日历软件,并不需要什么权限,可当它上架到各个软件市场的时候,这些软件市场会要求开发者:
程序必须用软件市场提供的市场专用的程序包进行二次封装。

当打开从软件市场上下载的程序,程序启动的画面中会出现几个小字:“XXX市场首发专版”,开发者们表示,这种软件二次封装包
里面,通常包含着各种各样的权限。

假如有机会的话,是可以到软件开发者自己的官方网站上下载的,一方面是权限的问题,另一方面是软件开发者在市场里面上架软件,每个市场是要分成的,一般是30-40%不等。

Ubuntu添加可信任根证书

date: 2018-09-19 16:38:13

文章引用自:Ubuntu添加可信任根证书

添加

Ubuntu下添加根证书非常简单, 只要将证书(扩展名为crt)复制到**/usr/local/share/ca-certificates**文件夹然后运行

update-ca-certificates

即可

[yaxin@ubox ~]$sudo cp xinmu.crt /usr/local/share/ca-certificates
[yaxin@ubox ~]$sudo update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.

删除

直接将**/usr/local/share/ca-certificates**对应的证书删除,然后执行

update-ca-certificates
[yaxin@ubox ~]$sudo rm -f /usr/local/share/ca-certificates/xinmu.crt
[yaxin@ubox ~]$sudo update-ca-certificates
Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.

注意: 这时候并不会提示1 removed, 但证书是已经被删除了的

原理

其实

update-ca-certificates

是一个shell脚本, 使用

which

找出

update-ca-certificates

的绝对路径,然后打开就可以查看其源码

[yaxin@ubox ~]$which update-ca-certificates
/usr/sbin/update-ca-certificates
[yaxin@ubox ~]$file /usr/sbin/update-ca-certificates
/usr/sbin/update-ca-certificates: POSIX shell script, ASCII text executable

通过阅读源码可以看出,

update-ca-certificates

命令的本质其实是将PEM格式的根证书内容附加到**/etc/ssl/certs/ca-certificates.crt**, 而**/etc/ssl/certs/ca-certificates.crt**中本身就包含了系统自带的各种可信根证书.

文章引用自:Ubuntu添加可信任根证书

CentOS RabbitMQ Server

首先需要安装erlang

参考:http://fedoraproject.org/wiki/EPEL/FAQ#howtouse

rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
yum install erlang

安装RabbitMQ

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm

yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm 

service rabbitmq-server start
service rabbitmq-server status

出现问题

Redirecting to /bin/systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-03-04 15:21:52 CST; 6s ago
 Main PID: 793 (beam.smp)
   Status: "Initialized"
   CGroup: /system.slice/rabbitmq-server.service
           ├─ 793 /usr/lib64/erlang/erts-5.10.4/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K true -- -root /usr/lib64/erlang ...
           ├─ 929 /usr/lib64/erlang/erts-5.10.4/bin/epmd -daemon
           ├─1061 inet_gethost 4
           └─1062 inet_gethost 4

Mar 04 15:21:48 anan rabbitmq-server[793]: RabbitMQ 3.6.6. Copyright (C) 2007-2016 Pivotal Software, Inc.
Mar 04 15:21:48 anan rabbitmq-server[793]: ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
Mar 04 15:21:48 anan rabbitmq-server[793]: ##  ##
Mar 04 15:21:48 anan rabbitmq-server[793]: ##########  Logs: /var/log/rabbitmq/[email protected]
Mar 04 15:21:48 anan rabbitmq-server[793]: ######  ##        /var/log/rabbitmq/[email protected]
Mar 04 15:21:48 anan rabbitmq-server[793]: ##########
Mar 04 15:21:48 anan rabbitmq-server[793]: Starting broker...
Mar 04 15:21:52 anan rabbitmq-server[793]: systemd unit for activation check: "rabbitmq-server.service"
Mar 04 15:21:52 anan systemd[1]: Started RabbitMQ broker.
Mar 04 15:21:52 anan rabbitmq-server[793]: completed with 0 plugins.

打开 /var/log/rabbitmq/[email protected]

[root@anan rabbitmq]# cat rabbit\@anan.log

=INFO REPORT==== 4-Mar-2019::15:21:48 ===
Starting RabbitMQ 3.6.6 on Erlang R16B03-1
Copyright (C) 2007-2016 Pivotal Software, Inc.
Licensed under the MPL.  See http://www.rabbitmq.com/

=INFO REPORT==== 4-Mar-2019::15:21:48 ===
node           : rabbit@anan
home dir       : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config (not found)
cookie hash    : 9csyWc/ryZpumbtCpBTFYg==
log            : /var/log/rabbitmq/[email protected]
sasl log       : /var/log/rabbitmq/[email protected]
database dir   : /var/lib/rabbitmq/mnesia/rabbit@anan

注意,这里出现config file(s) : /etc/rabbitmq/rabbitmq.config (not found)

这里显示的是没有找到配置文件,我们可以自己创建这个文件

cd /etc/rabbitmq/
vi rabbitmq.config
编辑内容如下
[{rabbit, [{loopback_users, []}]}].

后面的“.”是要的,不是写错
这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。

保存配置后重启服务
service rabbitmq-server stop
service rabbitmq-server start

开放 15672 端口

这里虚拟机操作,没有机子没装防火墙,固做记录未亲测

firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload 

# 直接关闭防火墙
service iptables stop

RabbitMQ无法访问Web管理页面

启动RabbitMQ后,没法访问Web管理页面,RabbitMQ安装后默认是不启动管理模块的,所以需要配置将管理模块启动

rabbitmqctl start_app
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl stop

设置 RabbitMQ 远程 IP 登陆 (以下操作不需要重启)

rabbitmq默认创建的用户guest,密码也是guest

  1. 创建一个 anan 的账号
rabbitmqctl add_user anan 123456
  1. 设置用户角色
rabbitmqctl set_user_tags anan  administrator
  1. 设置用户权限
rabbitmqctl set_permissions -p "/" anan ".*" ".*" ".*"
  1. 设置完成后可以查看当前用户和角色(需要开启服务)
rabbitmqctl list_users

访问: http://ip:15672


PPPOE上网

韶华易逝,望能有松的坚强,山的稳重


好吧~我承认这很**,现在才知道怎么越过学校上网客户端上网。因为之前总觉得这些客户端都很高大上的,管着几千几万学生。

几天前一网友得知我是用pppoe拨号,语音里大笑  “这很简单啊~自己弄去”

在学校开网以后会得到一个拨号器软件—— “蝴蝶” ,安装中还需依赖插件——“ winpcap ”,才能上网。

国内大部分高校均采用IEEE 802.1X认证方式对校内宽带接入进行认证,在802.1X认证下,一般的路由器无法使用。

笔者学校称之为 “ 蝴蝶 ”……类似的有安腾、安朗、锐捷……(某朋友竟然无聊到跟我争论广东地区只用“ 锐捷 ”……-_-||  ……)

@_@……我arch大法就这样复活了

pppoe-setup     //设置pppoe
输入账号、
网卡名字、
DNS、
密码、
0-2 (我设置“ 0 ”)、
y
pppoe-start    //启动
…Connected!【一般没说超时(timeout)就是好了】

看网上的说明,说是要装“ rp-pppoe ”,可是我装了也没什么用好像  -_-||
(呃,后来亲测还是要装的,不然连pppoe-setup都不能用——补充于20160515)

gnome下设置
“ 添加配置 ”
2016-04-07
2016-04-07-1
 
做以记录~

回调函数(callback)是什么?

date: 2017.08.31 17:44

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。

在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。

回答完毕。

发布于 2011-08-06

作者:常溪玲链接:https://www.zhihu.com/question/19801131/answer/13005983
来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


参考:
回调函数(callback)是什么?

mysql安装文档

安装

apt-get install software-properties-common
add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty universe'
sudo apt-get update
sudo apt install mysql-server

使用service 启动、关闭MySQL服务

service mysql start
service mysql stop
service mysql restart
使用ps -aux | grep mysql 查询是否启动成功

修改root权限

mysql -u root -p 
show databases;
use mysql;

两种

  1. 改表法
    可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -p 
use mysql; 
update user set host = '%' where user = 'root'; 
select host, user from user;
  1. 授权法
    赋予任何主机访问数据的权限 :
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION 

修改生效 :mysql>FLUSH PRIVILEGES

结果出现,就OK了:

+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| localhost | debian-sys-maint |
| localhost | mysql.session    |
| localhost | mysql.sys        |
+-----------+------------------+

无法远程连接MySQL服务器

要在Linux终端中测试远程MySQL连接:

mysql -u username -h 192.16.8.1.22 -p

或者通过WIndows的Telnet:

telnet 192.16.8.1.22 3306

如果在尝试连接到远程MySQL服务器时遇到错误

ERROR 2003 (HY000): Can't connect to MySQL server on '192.16.8.1.22' (111)

或者在Telnet中

Connecting To 192.16.8.1.22...Could not open connection to the host, on port 3306: Connect failed

检查防火墙

首先,如果ufw启用了防火墙,请确保您有MySQL规则

sudo ufw allow mysql

重启服务

sudo service ufw restart

检查MySQL配置

您可能需要bind-address在MySQL配置文件中 注释掉mysqld.cnf

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到行bind-address (CTRL+ W搜索)

/etc/mysql/mysql.conf.d/mysqld.cnf
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1

以上行告诉MySQL只接受本地连接。通过#在它之前添加来注释掉这一行。
重新启动MySQL服务以使更改生效。

sudo service mysql restart

谢谢吉内给的文档
参考:Can’t connect to MySQL server remotely on Ubuntu

《游戏性是什么》11. 游戏的设计机制

date: 2016-06-11

游戏趣味性的本质——“游戏性”的问题。

“游戏性”问题研究中,最重要的是之前提到的效率预估。在此,将“引导玩家进行效率预估的游戏设计机制”定义为“Ludo”,以便于对游戏性的相关内容进行研究。

——《游戏性是什么》第11章

游戏性与Ludo

“效率预估”是玩家根据自身技能,在“高风险短时间”和“低风险长时间”中做出最恰当选择的一种判断行为。

引导玩家进行效率预估的游戏设计机制,可以使更多的玩家在游戏中找到恰当的难易度平衡,从而持续玩家的动机。

反之,从玩家的角度来看,只有进行效率预估,才能在游戏中进入“心流”的专注状态,才会想继续玩下去。

从上述内容中可以看到“游戏性”定义的模糊轮廓:

游戏性,是为了引导玩家进行效率预估的一种设计机制。

结合之前关于身体性的相关研究,可以做出如下阐释:

游戏性,是为了引导玩家进行效率预估的一种设计机制,以便于玩家通过实际的身体 / 限制身体认知目标世界,达成自己所设定的目标。

将这种设计机制成为“Ludo”,这个名称源于拉丁语,“Ludus”,本意为“游戏,玩笑”。

很多游戏都是有多个Ludo组成的。多个Ludo相互结合构造出的平衡,会影响到每一个Ludo的平衡以及游戏的整体的平衡。个体Ludo的平衡可以使用跷跷板来表示,多个Ludo间的相互作用和平衡,可以想象,蕴含多级连杆力学平衡的育儿玩具“挂铃”。
这种“挂铃”是复合Ludo的示意图,称为Ludo结构图。

Ludo结构的画法

Ludo.jpg--画图真是不是我强项

游戏设计师需要将想要玩家发现的效率预估名称以标题的形式写在Ludo的最上部分。在曲线最下方写上玩家执行该Ludo所需要的时间。
接下来Ludo结构图,大部分游戏是由多个Ludo构成的。将这种结构用示意图来表示就是Ludo结构图。

Ludo结构图.jpg--凑合这看吧

这种包含关系的复杂结构中,最外侧的Ludo叫做“母Ludo”,内侧的Ludo叫做“子Ludo”。最外侧的“母Ludo”是达成目标所需时间最大的部分。

Ludo的有效性

简述Ludo的意义,Ludo是游戏设计师在思考游戏“难易度平衡模型”时的“设计图”。正因如此,它在游戏制作中会发挥其有效性。电影,动漫的脚本与最终作品往往有些差异,Ludo和最终游戏的呈现(画面构成和场景构成)也不一定是一致的。

当分析游戏作品时,将按照如下顺序进行:

  1. 分析者玩目标游戏
  2. 列举并分析自己从中所获得的效率预估
  3. 用Ludo的形式记述效率预估的引导形式

而游戏设计则依照:

  1. 以Ludo的形式记述引导玩家的效率预估
  2. 在Ludo的基础上,开发制作游戏
  3. 玩家去玩目标游戏

游戏设计相当于“撰写脚本、依据脚本制作电影”,游戏分析则相当于“观看电影,依照电影分析脚本”。两者的顺序正好相反。

超级马里奥的跳跃

eg:超级玛丽当中最基本的动作:跳

SuperMarioLudo.jpg--一回生二回熟,这张画得比较快

这里值得注意,Ludo引导的“效率预估”应由玩家自主发现。游戏设计师不能将目标和解决方案直接设计出来。但“Ludo”中要规划出具体方案,供玩家在效率预估是选择。

引导效率预估的机制设计——Ludo

公主二重唱--我儿时玩的打架游戏--为了截图专门下载来玩

像这样的画面,对老玩家而言一个再简单不过的局面,但对没有游戏经验的人,会首先进行可行性尝试。不过,光是看到“来回移动”就应该能够引发效率预估了,大多数人应该是如下:

  • 如果在间隙缩小时跳跃,应该能顺利通过(风险低)。但是必须等到恰当的时机。
  • 在间隙扩大时跳跃可能会失败(风险高),不过却能迅速行动(时间成本低)。

当然,仅这样,还不能引发效率预估,还需要另外的条件,即难易度对于玩家技能而言,已经上升到“危机”层次,这样才能引导玩家进行效率预估。当玩家被迫在风险和时间成本之间做出权衡时,就不得不做出一个对自己最恰当的决定。

不过当遵从自我决定的行为结果为“成功”时,就能够得到满足感、爽快感等直接关系到游戏趣味性的感觉。

Ludo唤起其他Ludo

就是一个Ludo引导另外一个Ludo。游戏设计师通过灵活运用Ludo的性质设计出作用空间,就可以引导玩家进行效率预估。

设计师料想之外的效率预估

游戏中具体设计的限制身体作用空间,会引导玩家进行效率预估。将这一过程称为Ludo。大多数玩家都在游戏设计师设定好的Ludo中找到问题的解决方案,推进游戏的进展。不过,当Ludo的引导不是特别恰当时,有时也会出现玩家技能的习得进展不按照游戏设计师预定的效率预估进行,引发了设计之外的效率预估。

例如,玩家为了验证“怎么才能最快死亡”的效率预估等就是这个情况。

这对于游戏设计师来说,是意料之外的游戏方式。不过,这也可以说是游戏本来就具备的游戏本质吧。

Ludo并不仅是引导玩家进行效率预估的机制。很多游戏中,玩家在自己尝试效率预估时,会发现一些独立的(游戏设计师料想之外的)效率预估机制。

因此,游戏中具有这样的一种可能性,即:

玩家发现游戏设计师料想之外的效率预估机制

引导效率预估的Ludo中诞生出新游戏

Ludo和效率预估之间有着密不可分的关系。换句话说,游戏就是

一个玩家可以从作用空间中进行效率预估并且能达成目标的人工制作出来的环境。

制作这种环境的行为就是游戏设计。

随着分析的深入,得出游戏设计的核心重点,即:

在限制身体和作用空间的何处,设置“引导玩家进行效率预估的机制==Ludo”

关于游戏之外的内容,如果能够在这一点上下功夫设计的话,和能够成为具有“游戏性”的作品。虽然不知道是否可以将这样的内容称为“游戏”,但这些具有“游戏性”设计的内容却是能像游戏一样,给人带来持久的乐趣。

小结:

  • 游戏性,是为了引导玩家进行效率预估的一种设计机制。
  • 引导玩家进行效率预估,以便于玩家通过实际的身体/限制身体认知目标世界,达成自己所设定目标的设计机制(游戏性),称为“Ludo”。
  • Ludo结构图,是整体平衡与单体平衡相互影响的复合性“挂铃”结构。
  • Ludo同样可以应用在游戏之外的内容中。

游戏就是:一个玩家可以从作用空间中进行效率预估并且能达成目标的人工制作出来的环境。加上游戏是符号化的现实世界。在初步了解专注游戏的原因和游戏性后,开始理解人接触游戏直到沉迷于游戏这个过程。

摘自《游戏性是什么》第11章(游戏设计的机制)喜欢这本书,

其中一边引导一边抛出问题和解释问题的方式很值得学习,作已记录。

基于Ubuntu搭建个人网盘

准备域名

域名注册

ping www.yourdomain.com
如果 ping 命令返回的信息中含有你设置的解析的 IP 地址,说明解析成功。

注意替换下面命令中的 www.yourdomain.com 为您自己的注册的域名

安装 Seafile 服务器

安装依赖环境

在 Debian/Ubuntu 系统下,可以使用以下命令安装 MySQL:

sudo apt-get update
sudo apt-get install mysql-server

使用以下命令安装 Python 相关依赖:

sudo apt-get install python2.7 python-setuptools python-imaging python-ldap python-mysqldb python-memcache python-urllib3

安装 MySQL 过程需要为 MySQL 的 root 用户设置新密码,请记住该[密码]以供后面步骤使用。

为 Seafile 创建一个用户

创建 Seafile 用户,使用它运行 Seafile 服务:

sudo useradd -m -s /bin/bash seafile

为该用户设置密码:

sudo passwd seafile

下载Seafile

切换到新用户,需要输入你刚才为seafile用户设置的密码:

su - seafile

切换目录:

cd ~

这里可以查看获取最新 Seafile 下载链接,参考以下命令进行下载。

wget http://seafile-downloads.oss-cn-shanghai.aliyuncs.com/seafile-server_6.1.1_i386.tar.gz

解压:

tar -xzf seafile-server_*
mv seafile-server-*/ seafile-server/

配置 Seafile

运行Seafile设置脚本,并回答预设问题:

cd seafile-server*
./setup-seafile-mysql.sh

执行过程输入参数如下:

其中:

  • [ This server's ip or domain ] 字段输入教程第一步申请的域名或者IP地址(<您的 CVM IP 地址>)。
  • mysql 的 [ root password ] 字段输入数据库密码。
  • 其他字段一路回车使用默认值。
[serve name] Seafile

What is the ip or domain of the server?
For example: www.mucompany.com, 192.168.1.101
[This server's ip or domain] www.qcloudlab.wang

Wheredo you want to put your seafile data?
Please use a volume with enough free space
[default "/opt/seafile/seafile-data"]

Which port do you want to use for the seafile fileserver?
[default "8082"]

------------------------------------------------------
Please choose a way to initialize seafile databases:
------------------------------------------------------

[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/sseafile/seahub databases

[1 ro 2] 1

What is the host of mysql server?
[default "localhost"]

What is the port of mysql server?
[default "3306"]

What is the password of the mysql root user?
[root password]

verifying password of user root ... done 

Enter the name for mysql user of seafile. It would be created if not exists.
[default "root"]

Enter the database name for ccnet-server:
[default "ccnet-db"]

Enter the database name for seafile-server:

启动 Seafile

./seafile.sh start
./seahub.sh start

执行过程输入参数如截图所示,其中 [ admin email ] 设置为您登录网盘的帐号,如 [email protected]

[ admin password ] 和 [ admin password again ] 设置为登录网盘的密码,如 admin_Password:

What is the email for the admin account?
[admin email] [email protected]

What is the password for the admin account?
[admin password]

Enter the password again:
[admin password again]

此时 Seafile 已经部署完成,登录的帐号密码是:启动 Seafile 步骤中设置的邮箱和密码。
可以通过 IP 访问网盘:http://<您的域名>:8000

arch分swap

date: 2016.03.06 19:30

安装gparted在硬盘里划出一定量的空间,并格式化为swap(linux-swap)

sudo swapon /dev/sda9    //把我的swap挂在上
sudo mv /etc/fstab /etc/fstab.bak && sudo genfstab / > /etc/fstab

注:若出现“ mv:无法获取’/etc/fstab’的文件状态(stat):没有那个文件或目录 ”,则直接执行“&&”后面的语句……若还是出现相关问题

yaourt -S arch-install-scripts

之后

genfstab -U -p / >> /etc/fstab
cat /etc/fstab

重启,出现开机错误(前提:我的boot不是单独分的)

 
在grub倒计时时按下e,进入编辑模式

倒数第三行,**rw后面,空格,写上  init=/bin/bash ** ,F10引导
nano /etc/fstab

然后把中间的两行gvf用#注释掉,留下一个“ / ”和最后一个swap

ctrl+alt+del  重启

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.