yányào.com

looking a wood sprite in the forest

Recent posts

May 15, 2020
MastodonMastodon 长毛象1 – 基于 rubyonrails/reactjs/nodejs 开发的分布式 & 去中心化 twiter clone。利用空闲时间在 aws lightsail 上开了个实例把服务跑了起来 一开始走了些弯路,因为选机房和省钱的缘故,重建了若干次操作系统,最后的选择是 tokyo+cloudflare,没错我又套了 cdn,实在是海外线路到北京联通不稳定 安装步骤没有使用 docker 而是参考文档从源码安装2,原因和解决方案如下: 机器用 $3.5/mo 512mem 最便宜的那档消费降级(512M 内存重启会拉垮弱鸡,服务已迁移到 oraclecloud),出于 net/io 性能考虑就不使 docker 啦 内存问题,RAILS_ENV=production bundle exec rake mastodon:setup 这一步骤执行到 rails assets:precompile, 不管是在 docker 里跑还是直接运行都会报 swap 分区不足,找到两个方案来解决: # create swapfile <https://linuxize.com/post/create-a-linux-swap-file/> $ sudo fallocate -l 2G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile # verify active $ sudo swapon --show # optional: low value is better for production $ sudo sysctl vm.…
May 9, 2020
Gitlab Repogitlab 里面已经有十来个 group,几百个 project,虽然不一定会每个项目都参与, 但是为了快速同步代码,又捡起了 android 开发常用的 repo 命令来管理多项目代码。 这里使用了 gitlab graphql 接口来遍历项目生成分组的 manifest 文件 #!/usr/bin/env python import argparse import json import os import urllib2 GITLAB_HOST = "gitlab.mydomain.com" GITLAB_SSH_URL = "ssh://git@" + GITLAB_HOST GITLAB_GRAPHQL_URL = "https://" + GITLAB_HOST + "/api/graphql" GITLAB_TOKEN = "" GITLAB_GROUP = [""] BLACK_LIST = ("",) # 以上配置修改为自己的设定 template = """<?xml version="1.0" encoding="UTF-8"?> <!-- autogen by gen.py, do not edit this file --> <manifest> <remote name="origin" fetch="{ssh_url}" /> <default revision="master" remote="origin" sync-c="true" sync-j="4" /> {content} </manifest>""" def write_file(content, filename="default.…
May 7, 2020
Dash Replacement with tmux通过 tmux 快捷集成替换 dash.app 查询开发文档 $ brew install dasht $ dasht-docsets | tr 'A-Z' 'a-z' go javascript python_3 rust tornado # tmux.conf quick start bind -n S-up command-prompt -p 'docset:' "splitw -h -fb -l 80 dasht '%%'" …
May 7, 2020
Cloudflare Gost从清明节开始,稳定运行好几年的 ss 服务器终于阵亡了,所有端口全挂。一直蹭公司的 vpn 查资料也挺到了五一,实在拖延够够的就再另外开了一台机器中转过去迁移数据,不过嘛年纪大了又开始犯懒,企图拯救获得资格认证的机器,通过一番网上冲浪学习到了目前(实测可用)能满足我需求的方案。简单来说就是:cloudflare[后文简称为 cf] + websockets over gost,实际的客户端通过 cdn 代理再接入服务 有几个需要注意的地方: gost 启动时绑定的 localhost 不直接对外访问,走了 caddy 的转发,而这一步和 cf 的 ssl 证书配置会造成不停的重定向跳转,需要将 cf 加密模式配置为 flexible 然后修改 caddy 的域名配置为 http://domain.com https://domain.com { … } 阻止 cf 和 caddy 之间的 http -> https gost 服务端监听 ws 协议,本地的 gost 客户端转发 wss 协议连接 cf_domain:443 需要鉴权的方案使用 socks5+wss://username:password@domain:port android 客户端的设置,因为使用了 ws 协议,所以需要将域名写入到插件的配置里,直接用域名变量无法解析 具体配置参考官方文档,一切浪费的时间都是源于没认真仔细看文档 https://github.com/haoel/haoel.github.io https://github.com/ginuerzh/gost https://github.com/xausky/ShadowsocksGostPlugin update 2021-03-01 由于 shawdowsocks 的 android 客户端升级导致插件不可用,另外部署了 brook wsserver 给手机使用…
Jan 13, 2017
webpack resolve local module最近的项目刚开始,设计的目录层级有点深 经常会在好几层本地路径之间互相引用 import Image from '../../../../components/image' 这层层叠叠的路径写起来实在丑陋 不由得想起 Python 从项目根目录引用模块 然后研究了一下 Node.js 里的几种简易实现 干脆利落的软连接: ln -s node_modules src 修改环境变量: NODE_PATH=. node app 从本地目录安装: // package.json // 需要运行 npm install { "name": "baz", "dependencies": { "foo": "file: ./src", } } 另外还有些修改 global,或者引入其他 require 实现的方法就不再一一列出了 最终选择的是修改 webpack 配置 // webpack.config.js resolve: { modulesDirectories: [__dirname, 'node_modules'], } https://gist.github.com/branneman/8048520 http://stackoverflow.com/questions/10860244/how-to-make-the-require-in-node-js-to-be-always-relative-to-the-root-folder-of-t/41078266#41078266 https://webpack.github.io/docs/configuration.html#resolve-modulesdirectories…
Oct 25, 2016
Leonard Cohen - you want it darker年度最佳 you want it darker 循环听了好几天 干净低沉的嗓音加配乐 愈发担心以后听不到了怎么办 😢~…
Jun 15, 2016
web audio照文档撸了一下 AudioContext 可视化音频 桌面浏览器上 Safari 9, Chrome stable 绘制正常 移动端只有微信的 webview 能工作, 纯玩票叻 ref: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no"> <title>AV</title> </head> <body> <canvas id="vis"></canvas> <audio id="av" src="YOUR_AUDIO_FILE"></audio> <script src="index.js"></script> </body> </html> window.AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext; window.onload = function(){ var canvas = document.getElementById('vis'); var canvasCtx = canvas.getContext('2d'); var isPlaying = true; var audio = document.getElementById('av'); var audioCtx = new AudioContext(); var analyser = audioCtx.…
Apr 26, 2016
move to caddy去年用 Hexo 搭建的日志已经好几个月没更新了,最近休假有点空闲就继续更新吧。 先从 Github 迁移回自己的 Linode,然后安装一个 Caddyserver1 来渲染 markdown Caddy is a unique web server with a modern feature set. Think nginx or Apache, but written in Go. With Caddy, you can serve your websites over HTTP/2. It can act as a reverse proxy and load balancer. Front your PHP apps with it. You can even deploy your site with git push. Cool, right?2 Download and install systemd wget -O 'caddy.…
Dec 22, 2015
mongodb backup有台机器准备2月份下架 记一个 mongodb 备份小脚本 :) #!/bin/bash # vim: set et sw=2 ts=2 sts=2 ff=unix fenc=utf8: MONGO_DATABASE="_name_" MONGO_HOST="_ip_" MONGO_PORT="_prot_" TIMESTAMP=`date +%Y-%m-%dT%H:%M:%S` MONGODUMP_PATH="/usr/bin/mongodump" BACKUPS_DIR="/data/dumps/" BACKUP_NAME="$MONGO_DATABASE-$TIMESTAMP" while test $# -gt 0 do case "$1" in -m) echo "backup mongthly and clear week_dir" #rm $BACKUPS_DIR"week/*" find $BACKUPS_DIR"week" -type f -name '*.tgz' -delete tar -czPf $BACKUPS_DIR"month/"$BACKUP_NAME.tgz $BACKUPS_DIR$MONGO_DATABASE ;; -w) echo "backup weekly" echo "tar -czPf $BACKUPS_DIR"week/"$BACKUP_NAME.tgz $BACKUPS_DIR$MONGO_DATABASE" ;; -d) echo "just dump" $MONGODUMP_PATH -d $MONGO_DATABASE --out $BACKUPS_DIR ;; *) echo "do nothing" ;; esac shift done # crontab -e 10 3 * * * /bin/bash $HOME/bin/mongobackup.…
Dec 14, 2015
let's encryptLet’s Encrypt 已经公开测试,不需要再提交测试域名表单,直接就能申请 小项目以后都能用这玩意开 https 不用花钱买证书哦啦啦 照 文档 做一遍给域名签上证书还挺简单的 # 获取项目代码 git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt # 安装依赖 ./letsencrypt-auto # 获取证书 ./letsencrypt-auto certonly --standalone -d www.example.com -d example.com # 配置 nginx server { listen 443 ; ssl on; ssl_certificate_key /etc/letsencrypt/live/youdomain/privkey.pem; ssl_certificate /etc/letsencrypt/live/youdomain/fullchain.pem; } 需要注意的是 dnspod 等国内服务解析域名有问题 我这里直接切回 domains.google.com 就行了 使用 standalone 模式需要先停掉默认的 nginx 文档里提到可以使用 webroot 模式不用停 但我创建验证文件失败了 :( 默认90天过期,建议 crontab 定时更新 ###Update 使用 acme.sh An ACME protocol client written purely in Shell (Unix shell) language.…