Skip to main content

· 2 min read

Title: 记录下自己经常上网查的命令。

Nginx

  • 查看是否还在运行

ps -ef|grep nginx

  • 重启

    1. 验证 nginx.conf 是否正确。 nginx -t
    2. 重启服务 nginx -s reload

macOS

安装 rvm

  1. 安装 rvm , 一个基于 ruby 的工具库?

    curl -L get.rvm.io | bash -s stable

  2. 安装好 rvm 之后

    source ~/.bashrc
    source ~/.bash_profile
  3. 测试安装是否正常

    rvm -v

  4. 查看当前 ruby 版本

    ruby -v

  5. 列出已知的 ruby 版本

    rvm list known

  6. 安装 ruby

    rvm install x.x.x

  7. 升级 gem

    sudo gem update --system

SSH

  1. 查看本地是否生成了 SSH

    ls -al ~/.ssh

  2. 生成新的 SSH key

    ssh-keygen -t rsa -C "i.zuucol@gmail.com"

  3. 查看公钥

    cat ~/.ssh/id_rsa.pub

提示安装文件损坏

sudo spctl --master-disable

cocoapod 更新

pod install --verbose --no-repo-update pod update --verbose --no-repo-update

Xcode 无法被检测到时

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

· 2 min read

Title: 大致就是项目做完没给钱,然后就开源了。

Github:fullstack 提交是 586fe8bea5d5a12406253994bb848c257109eb15

大致步骤

  1. 首先准备本地环境

    1. 安装 node 环境 brew install node
    2. 安装 yarn brew install yarn
  2. 去准备 api 参数

    1. 先去谷歌云平台 Google Cloud Platform 里面创建一个凭据,在 API和服务 里面的 凭据, 这时候会获得一个密钥,将其记作 GOOGLE_MAPS_KEY

    2. 然后到 API和服务 里面的 ,找的地图类别中的 Places API,将其启用,谷歌这边就算是完成了。

    3. 然后到 PLAID 上注册账号,这个网站应该是专门获取银行账户内信息的一个聚合平台。完成后找到 Node.js 选项,下面会有对应的信息

      {
      "ACCOUNTS_SECRET": "secret",
      "PLAID_CLIENT_ID": "xxxxxxxxxxxxxxxxxxxx",
      "PLAID_SECRET": "xxxxxxxxxxxxxxxxxxxx",
      "PLAID_PUBLIC_KEY": "xxxxxxxxxxxxxxxxxxxx",
      "PLAID_PRODUCTS": "transactions",
      "PLAID_COUNTRY_CODES": "US",
      "PLAID_ENV": "sandbox"
      }
  3. 填写参数

    1. GOOGLE_MAPS_KEY 替换到 /client/src/config/example.env.json 文件内。
    2. PLAID_PUBLIC_KEY 也替换到这个文件内。
    3. PLAID_CLIENT_IDPLAID_SECRETPLAID_PUBLIC_KEY 替换到 server/config/default.json 文件内。
  4. 然后启动本地的 mongo

    mongod --dbpath /Users/imagons/mongo/data

    这个只是我的启动方式。

  5. 进入到 server 目录, 然后执行 yarn installyarn watch

  6. 另起一个终端,然后进入到 client 目录,然后执行

    1. cp ./src/config/example.env.json ./src/config/development.env.json
    2. yarn install
    3. yarn start
  7. (这一步貌似不执行也能运行了)又再起一个终端,继续在 client 目录,执行 yarn gen:types:watch

注意事项

  • 如果遇到 npm 相关的问题,建议重装 node 环境。

  • 4000 的端口和 3000 的端口不要被占用。

· 4 min read

Title: Bilibili

P8

  • 使用字符串来导入类
__import__(name, globals=None, locals=None, fromlist=(), level=0)
  • config 的配置文件路径默认在根目录下,需要更改目录的话,要查看对应的Api文档。

P9

  • __name__ 函数调用的话,可以获取这个函数的名称。

P18

  • 怎么用父类去约束子类必须实现某方法,意指接口(interface)。
class Base(object):
def play():
raise NoImplementedError('必须实现该方法')
  • 顺带一提 P18 这一讲当中大概是 20 几分钟左右讲到的配置去做某事的思路对我启发蛮大。并且有助于理解 Django 的中间件。

  • 装饰器可以有多个,下面的会和被装饰的函数当成 inner 加入到上层的装饰器当中去。

  • endpoint 的意义目前理解为 id

P19

  • 利用 functools.wraps() 来帮助我们设置函数的元信息
import functools

def wapper(func):
@functools.wapper(func) # 保存元信息
def inner(*args, **kw):
return func(*args, **kw)
return inner

@wapper
def foo():
pass

print(foo.__name__)

'''
如果不设置元信息的话,会导致打印的是 inner
设置之后才可以确定是原先的函数
'''

P20

  • 闪现:类似于暂时存储部分内容的快照,取出来就没了。(阅后即焚)

    应用场景:对临时数据的操作,例如错误信息。

  • 请求扩展,指的是在请求之前和响应之前的监听,可以有多个监听,请求之前的监听是顺序执行,响应的是倒序执行。

    @app.before_request
    def before_request_1(*args, **kw):
    print("before_request_1 进来了")

    @app.before_request
    def before_request_2(*args, **kw):
    print("before_request_2 进来了")

    @app.after_request
    def after_request_1(response):
    print("after_request_1 走了")

    @app.after_request
    def after_request_2(response):
    print("after_request_2 走了")

    '''
    打印顺序为
    before_request_1 进来了
    before_request_2 进来了
    ...
    after_request_2 走了
    after_request_1 走了
    '''

    如果请求拦截之后,在他之后的请求就不会执行了,但响应的还是会继续执行。

  • 根据状态码定义错误信息

    @app.errorhandler(404)
    def error_404(args):
    return "404页面没找到"
  • before_first_request 第一个请求

    @app.before_first_request
    def first(*args, **kw):
    ## 连接数据库之类的
    pass

P22

  • 中间件的讲解 P22

P25

  • threading.local() 给每个线程开辟一个内存空间用以对应的线程执行相应操作。达到类似加锁的目的。

P36

  • 数据的链接池库采用 DBUtils ,但如果使用的是 PooledDB 模式的话,其中有个参数需要注意 maxshared : 链接池中最多共享的链接数量。0 为全部共享,但这个值设置的时候是由 creatorthreadsafety 来判别的,也就是说设置后不一定会生效。

· 3 min read

Title: 高等院校测绘工程系列教材

1. 天文测量简介

  • 宇宙的”宙”指的是时间

  • 米(m),1791年为海平面上地球赤道到北极点距离的千万分之一作为 1 米,1983 年改为光在真空中的 1/299792458s 的时间间隔所经路程的长度作为 1 米。

  • 随后引入天文单位,AU(Astronomical Unit)日地距离

1AU=1.4959787×1011m 1 AU = 1.495 978 7\times10 ^{11} m

但这个天文单位还是太小,于是引入了光年ly(Light Year),1 光年约等于 9.46 万亿千米。

1ly=63240AU 1 ly = 63 240 AU
  • 质量的天文单位是太阳质量

  • 地球自转

  1. 恒星日 地球上某点与恒星的周期间隔 真正自转周期 23h56m4s
  2. 太阳日 地球上某点与太阳的周期间隔 昼夜交替周期 24h
  3. 太阴日 地球上某点与月球的周期间隔 潮汐变化周期 24h50m
  • 开普勒三大定律
  1. 所有行星轨道的形状是一个椭圆,太阳位于椭圆的一个焦点上。
  2. 在相等的时间间隔内,行星与太阳的连线所扫过的面积相等。
  3. 行星运动周期的平方与椭圆长半轴的立方成正比。
  • 星等 理解为就是亮度

星等越大亮度越小,连续的星等其亮度成几何级数,而且又 1 等星的亮度正好是 6 等星的 100 倍,1500=2.512\sqrt[5]100 = 2.512,这个数为星等比。目前照相的方式可看到 23 等的暗星。

  1. 北极星 2.12 等
  2. 牛郎星 0.89 等
  3. 月亮 -12.5 等
  4. 太阳 -27 等

2. 天球坐标系及各坐标系间关系

  • 坐标系这块过于数学化,认输!

3. 时间系统及其换算

  • 首先定义时间(时刻、历元)和(时间间隔),我们通常使用到的是后者。

  • 时间的基本单位

  1. 地球自转 1×1081 \times 10^{-8}
  2. 行星绕太阳的公转
  3. 原子的谐波振荡 1×10131 \times 10^{-13}

· 3 min read

Title: 旅行者一号

环境

  1. 地理位置转空间坐标的规则
  2. 星系规模的随机算法
  3. 飞船的飞行时间计算
  4. 遭遇当前星系时某星的引力弹弓时间确定

地理位置转空间坐标的规则

假定以目前地球为例,每个人的坐标是球上的某个点,那么得出来将会是一个点化的世界地图,这就看起来很不合适,所以应当保持其真正的地理坐标?

简单点,以平行宇宙来算和固定的星系来确定。更加具有真实性和科幻性。

TODO

  • 平行宇宙的数量
  • 有哪些固定的星系

星系规模的随机算法

飞船的飞行时间计算

需要收集资料

  1. 星系之间的距离
  2. 飞船的速度
  3. 时间的缩减方式(以天为基准
    1. 速度增加?
    2. 距离缩短?

TODO

  • 固定星系之间的距离
  • 飞船的速度
  • 缩减方式
  • 黑洞位置的设置

遭遇当前星系时某星的引力弹弓时间确定

  1. 以天为单位,一天最多两次,通知用户操作
  2. 数量,依据当前旅行者弹弓次数

TODO

  • 旅行者弹弓次数

玩家信息

  1. 创建
    1. 基于地理坐标去生成星系图谱所在位置
    2. 用户名
  2. 修改
    1. 用户名
    2. 地理位置(暂且不做)
  3. 查询
    1. 设计查询方案(暂且不做)

星球玩法

  1. 收集
    1. 采矿
    2. 冶炼
    3. 制作
  2. 剧情
    1. 人物剧情
    2. 星球剧情
    3. 历史剧情
  3. 操作方式
    1. 点为主

TODO

  • 原始掉落飞行器所携带信息清单
  • 修复飞行器所需物资精简以及清单
  • 火箭所需物资清单
  • 飞行器所携带信息限制
  • 剧情的分配

飞行途中

  1. 引力弹弓时通知玩家找寻最佳时机
  2. 拍照?

由于飞行器是不能直接创造出来。 如果需要添加飞行器功能,类似AI,需要在星球的收集过程中添加上去。

TODO

  • 拍照功能确定如何做?
  • 通知后的操作方式
  • 操作时间限制