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_ID、PLAID_SECRET、PLAID_PUBLIC_KEY 替换到 server/config/default.json 文件内。
  4. 然后启动本地的 mongo

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

    这个只是我的启动方式。

  5. 进入到 server 目录, 然后执行 yarn install 和 yarn 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 为全部共享,但这个值设置的时候是由 creator 的 threadsafety 来判别的,也就是说设置后不一定会生效。

· 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×10−81 \times 10^{-8}
  2. 行星绕太阳的公转
  3. 原子的谐波振荡 1×10−131 \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

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