logo

开发与日志

  • Published on
    On a test OMV 4.x system with the flashmemory plugin installed, this is all I did to upgrade it to OMV 5.x (as root):
  • Published on
    ## 关于备案 我不是很想把域名签到国内来 虽然我的网站上肯定不会有什么有问题的内容
  • Published on
    ## UniClownTheWorld V4.2 ### TAG 这次的修改理念主要是加入TAG 给所有的POST和CASE打上标签 同一个内容可以包含多种标签 更方便内容的跨CASE联系 例如不同平台的同一部作品 或者说同一部作品的不同系列 在本次的更新上 1. 可以方便的管理标签 2. 展示标签 3. 点击标签显示对应的内容 4. 标签云效果 ### CASE 强化TAG理念的同时,CASE的概念被削弱了 按照之前我的想法,我发布的所有内容都会有一定的分类 而分类之上也有分类 以CASE来管理POST 可能是一部作品,POST是不同时间这对部作品的想法 可能是一次活动,POST是整个活动过程的记录 我们以游戏中的任务作类比 任务本身是CASE 而完成任务中的一切是POST 如果要给中文的话,我不会给『分类』 而是给『案件』、『事件』 应该是一个动态的概念 DO SOMETHING 有一种可完成的感觉 起一种XXX发布了XXX活动、事件的感觉 相当于新闻类和小说类的区别 经过上述的整理 我觉得CASE就应该改成动宾短语或者祈使句的形式 像是『来玩精灵宝可梦吧』『观看四月是你的谎言』『这周末去烧烤』 这样的短句 并不是对某样事物的描述,而是对某件行动的总结 因此不存在父子级的CASE 像是『看电影』->『看肖申克的救赎』 就没有这种加分类的必要了,直接所有CASE都是细分的 所有事件都在同一个池子中,按照时间顺序排列,以TAG做分类管理 为此,我们需要重构CASE 1. 标题title 2. 发起时间,应该是生效时间,区别于created_at,就相当于活动的开始时间 3. 结束时间,与发起相对应 4. 状态,未开始,已开始,已完成等 5. 图片 不用,但需要LOGO字段,通过方法获取POST的图片,以第一个POST的第一张图片为LOGO(需要字段) ~~是否需要?可以做方法获取所有POST的图片,但是CASE仍然需要一个版图,这个问题和正文相挂钩~~ 6. content 不需要,看情况置顶一个POST。~~展示CONTENT的地方会同时展示POST?~~,~~是否需要正文,正文一般会写一些起因经过,但是这和post的功能重合,或者说应该用post来写,所有没有必要呢~~ 7. 类型(公开程度) 8. tag,不需要字段
  • Published on
    ## UCTW V4.1 ### wxbot Python项目 连接微信 接收、记录并转发微信信息 ### akagi/dorothy 接受和处理微信信息 #### niuniu 收到『牛牛』信息,自动发牌 #### 德州扑克 1. 报名 1.确认当前没有游戏进程时,可以开始报名 2.当前游戏人数为两人,且离上次报名有30秒时自动开始游戏 3.报名时,确认已经是好友,如果不是好友,不能报名 2. 发牌 1.拆出一副新牌 2.向每个选手发送两张底牌,发送好友信息 3.在群里发三张公共牌 3. 如果接受到继续发牌,且在游戏进程中,则继续发一张牌,如果发了三张牌则直接开牌 4. 如果接受到开牌,且在游戏进程中,则进行开牌 5. 在群里公布每个人的底牌 ### TODO 1. 架上微信机器人 2. 调试收发API 3. 机器人调用AKAGI API 4. AKAGI调用机器人API
  • Published on
    ## UCTW V4.0 服务器做了一次迁移,从heroku搬到了GCP 老是坐在heroku也不是办法,虽然部署还算方便,也是免费的机房 但是总想试着部署到自己的服务器上,方便今后的扩展 GCP有一年免费和300美金赠送,而且速度快的可怕 搬迁过程中遇到了很多问题 还好都有解决方法 这里汇总一下内容 方便下次迁移 ### 数据库的迁移 heroku线上使用的是postgres GCP上我打算使用mysql 1. 首先从heroku备份数据库 `heroku pg:backups:capture` 2. 下载最新的备份latest.dump `heroku pg:backups:download` 3. 将备份还原到本地pg数据库中 `pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump` 4. 用本地pg数据库导出sql `pg_dump -U myuser -s mydb --inserts --format p -f pg.sql ` 5. [pg2mysql](http://www.lightbox.ca/pg2mysql.php)将pg.sql的语句转化为Mysql的语句获得mysql.sql 6. 服务器执行 `rake db:migrate RAILS_ENV=production` 7. 删除mysql.sql中的数据迁移表,然后导入 8. 配置 数据库 自动备份 [详见](y.oschina.net/u/231017/blog/186447) 其实6、7两步是可以简化的,直接导入mysql.sql到mysql中就可以了,不需要rails去建立数据库 ### ROR的部署 采用的是nginx+unicorn的配置 #### 编译静态文件 `$ RAILS_ENV=production rake assets:clean` `$ RAILS_ENV=production rake assets:precompile` #### 配置文件unicorn.rb ```ruby module Rails class <<self def root File.expand_path(__FILE__).split('/')[0..-3].join('/') end end end worker_processes 4 working_directory Rails.root listen "#{Rails.root}/tmp/sockets/socket", :backlog => 64 timeout 30 pid "#{Rails.root}/tmp/pids/unicorn.pid" stderr_path "#{Rails.root}/log/unicorn.log" stdout_path "#{Rails.root}/log/unicorn.log" # combine Ruby 2.0.0dev or REE with "preload_app true" for memory savings # http://rubyenterpriseedition.com/faq.html#adapt_apps_for_cow preload_app true GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true check_client_connection false before_fork do |server, worker| # the following is highly recomended for Rails + "preload_app true" # as there's no need for the master process to hold a connection defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if File.exists?(old_pid) && old_pid != server.pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end # Throttle the master from forking too quickly by sleeping. Due # to the implementation of standard Unix signal handlers, this # helps (but does not completely) prevent identical, repeated signals # from being lost when the receiving process is busy. sleep 1 end after_fork do |server, worker| # the following is *required* for Rails + "preload_app true", defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection # if preload_app is true, then you may also want to check and # restart any other shared sockets/descriptors such as Memcached, # and Redis. TokyoCabinet file handles are safe to reuse # between any number of forked children (assuming your kernel # correctly implements pread()/pwrite() system calls) end ``` #### unicorn的运行方法 `unicorn_rails -c /path/to/app/config/unicorn.rb -D -E production` #### unicorn的热部署 ```bash sudo kill -USR2 `cat path/to/app/tmp/pids/unicorn.pid` ``` 因为unicorn的设置中有多个进程,所以需要多次执行此操作 #### nginx的配置文件 ``` upstream app{ server unix:///path/to/app/tmp/sockets/socket; } server { listen 80; server_name app; root path/to/app/public; try_files $uri/index.html $uri.html $uri @app; location ~ ^/(assets)/ { expires max; add_header Cache-Control public; } location ~ .*\.(php|sql|asp)?$ { deny all; } location @app { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } access_log logs/app.log; } ``` ### 安装mysql、php、phpmysql https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04 ### 搜索引擎优化 添加了sitemap 通过/sitemap.xml访问 添加了百度的统计api ### TODO 1. 数据库的备份到网盘 2. wechat中的投票项目 3. 与微信项目的联动
  • Published on
    ## UCTW V3.2 只给了一个小版本号,都感觉有点不值 实际上已经可以升到4.0的版本号了 系统进行了大整改 因为技术上的飞跃 导致了以前改别人的东西变成了做自己的东西 所有想法都可以凭自己的双手实现 所以这个周末我光是集中于开发就已经乐在其中了 ### Akagi Blog 以Akagi命名的网站即现在的blog系统与其他项目分离 作为YggDraSil数据系统的一个应用 目前包含正常的文章浏览和案件浏览 以及仅限于本人的登录和发布功能 反正没有人会评论,所以干脆取消了其他人的发布功能 今后依然会集中于整合微博模块 ### Cpanel 将案件的管理移到后台 管理案件的从属关系和内容 今后将管理整个YggDraSil的数据系统 ### 微信机器人42 开发字典功能 能够存储关键字和对应的内容 两者皆为post类型 通过 post.answers 和 post.keyword 互相调用 42发出post请求包含keyword rails接收以后返回包含answers的json 从而实现字典功能 提醒功能是否可以用定时发送请求实现? ### 匿名揭示板 通过微信登录的匿名揭示板 分类为case类型 帖子和回复为post类型 可以通过机器人发送通知?
  • Published on
    ##UCTW V3.1 Todo 1.将Bar页面设置成主页,遍历所有更新的条目 2.检查所有的登陆动作,保证登陆后可以插入数据库 3.优化编辑框,应该有移动端适应的编辑框 4.闲谈本身不应该是闲谈,而是对应的一个子条目 5.关于时间,一个月以前,改成准确时间
  • Published on
    #UCTWV 3.0.0.1 1.优化了移动端显示效果 2.post显示10条/页 3.bar页面中case分页5条/页,每条case显示3条最新post 4.在发布和更新post时,更新case,使bar页面中case可以按更新逻辑排序
  • Published on
    再下次更新中加入 ``` <meta name="viewport" content="width=device-width, initial-scale=1"> ``` 以适配移动端显示效果
  • Published on
    调试了一整天 终于成功上线了 一个小问题折腾的我一头雾水 放弃了再床上躺了一会儿 才想到了解决办法 定义此版本号为 UCTWV3.0.0.0 BAR页面 最新的事件更新 Cases页面 所有事件以树状图展示 并可以创建子事件 事件创建可以输入bangumi的链接 导入bangumi的信息 用户页面 显示所有的post