您正在查看: 软件开发 分类下的文章

安装 homebridge

说实在的,哪个土豪会只在一台机器上跑一个应用…
多个应用共用一台机器不是很正常吗?

node.js 一升级,homebridge 就挂了 23333333

那么,有没有什么办法能延续 homebridge 的寿命呢?

首先我们把锅烧热,新建一个目录(~/homebridge)
然后再在里面运行 npm init 初始化

接下来就是神奇的时刻了,这时候输入 npm install node@8
然后你就会惊奇地发现 node_modules 下面有个 node…

这时候再通过 npm i -S homebridge 安装 homebridge 和其他组件
这样再系统无论怎么升级都不会挂啦~

然后再在 package.json 添加一段

  "scripts": {
    "start": "homebridge"
  },

最后通过 npm run start 就能正常使用啦~
最后当然是写个 systemd service 调用 npm 启动啦

附上手游玩家氪金的悲惨故事:
视频:

战舰世界 自动签到

其实这个坑已经挖了很久了…

最早挖坑的时候主要是为了这个活动的自动签到,然而现在这个所谓永久活动也结束了…

最早用 Go 实现了验证码的自动识别,这回跟着 dalao 用 python 重写了一遍,然后修改了下验证码的学习算法,让获得的样本更准确(现在验证码识别率居然近似到 100% 了)

因为 python 的脚本改起来比较容易,如果有新活动的话加个配置就可以实现,目前主要签到的是陆海双雄的活动,等新活动出来加就是了

研究了下傻逼空中网的接口,现在签到的时候会自动检测是否已签到

用到了 PIL 来读取图片像素,然后用 requests 包发请求

来听歌吧~
君を繋ぐ空の星が 1つ音を立てても どれも同じ雨に濡れた夢ばかり 乾くだけの光 相手をなぞる 答えに疲れた 繰り返す日の無い夜明けに 崩れた朝 捕まえたdaydream 出遅れたストーリーと栄光が とこへ叫び唱えても 荒れたトンネル 声もくぐれない だからサイレンス 灯すためと 外とパズルのように ハマるピースが必要としても 影もない偽りと同じだ 捨て去られ並ぶだけの賞 箱の中に揃えた苛立ち 順番待ちさらし 誤魔化しのゴール Don't be above your daydream 角が取れたvision 君の夢が横で外れても 僕は歌い 橋をかけよう だからサイレンス 鳴らすためと どこまでも片側に沿ったリズム 過ぎた街並は終の愛と遠くへ 伝えれない歪みかけのイメージに 目が覚めた抵抗 型落ちの衝動 砕けたcry & dream 扉だけの理想 街が雑音に溺れはしゃいでも 僕は歌い 舵を捨てよう だからサイレンス 響くためと Don't be afraid daybreak has come Don't be afraid daybreak has come Don't be afraid daybreak has come Don't be afraid daybreak has come

当 贴吧签到助手 遇上 Go 语言

在贴吧签到助手正式出炉的 3 年后的这个夏天
在开发停止 2 年后的今天
终于有了一次重大更新

花了 2 天的时间,重写了相关代码
主要是针对 PHP 7.0 的兼容处理,使代码能在 PHP 7.0 下运行

其次,把签到部分改用 Go 语言实现,多线程签到实测高峰期 CPU 占用率约 0.3%,内存占用 4MB
可以大大减少签到对服务器资源的消耗,可以与其他服务同时部署

由于 3 年间百度登录接口变化,原有登录接口已被废弃无法使用,故本次重写了 BDUSS 的 Chrome 获取扩展
可以通过 https://api.ikk.me/reborn/proxy.htm 页面向扩展请求获取 Cookie

另外由于签到部分(Go)已经实现和主程序的分离,现在可以实现签到端与网页端分开部署。
个人建议将数据库放在签到端保障系统稳定,网页端通过远程连接到数据库进行管理操作。

目前新版正在进行封闭测试,两位数的用户可以在 2 分钟内完成所有用户签到
现在正在考虑进行更多用户的测试,如果我认识你,相信你已经收到邀请码了,如果没有,可以私下找我联系

New:加入 Telegram 群,不定期发送邀请

最后惯例送上歌曲一首
                    LOADING...                     STYX HELIX                     MYTH & ROID                     『Re:ゼロから始める異世界生活』エンディング・テーマ                     ◆◆◆                ◆◆◆         ◆◆◆  ◆◆◆                                         Oh, please don't let me die    
请不要让我就此离去    
                          Waiting for your touch
      等待与你再度相触
    →Ah~                 ~Ah↗     →Ah~     ~Ah↘                                 No, don't give up on life    
请不要放弃生的希望    
                          This endless dead end
      即使面对这无尽的死亡结局
                                        狂つた「時計」    
镌刻生命的时针    
                             刻む「命」
         疯狂旋转
                      こぼれてく  記憶の「砂」
缓缓溢出的  记忆之沙
                    芽生えた   想いまで
渐渐萌生的  心中思念
                             「ねえ」
         「呐」
                        こんなに  呆気なく
    为什么会  这么轻易
                        ▼         ▼                             消     『就       え      让     て      其     し      随     ま      风   う      而 の      散』                                         『 I wish I was there. 』
 我多希望我曾能伴你而行
                    Oh, please don't let me die    
请不要让我就此离去    
                          Waiting for your touch
      等待与你再度相触
                    二度となにも、  失くさぬように
为了不会再度   失去所有的一切
                    私を「忘れて」                始・め・て →→→    ←←←『Restart!』←←← 请忘记我的存在  再度踏上征程                     No, don't give up on life    
请不要放弃生的希望    
                          This endless dead end
      即使面对这无尽的死亡结局
                    君を砕く、  この「悲しみ」が
愿那些使你  感到无限挫败的伤痛
                    > いつか <          
 终有一天          
      『終わり』ますように
       会迎来它们的终结
                    For now I'll see you off →
在此目送你的离去
                    ●●● My time is spinning around ●●●
●●● 我的世界里时间开始回转 ●●●
                                        ●●● Your deep black eyes ●●●
●●●   你深邃的眼瞳   ●●●
                                        ●●● I forgot what time it is ●●●
●●● 让我忘记了时间的含义 ●●●
                                        ●●● And our memories are gone…? ●●●
●●● 但为何我们的回忆也化为虚无? ●●●
                                        ✿❀ 甘い「香り」放つ ❀✿    
追寻着散发出香甜气息之物    
                        ▷ 追憶と  いう名の罠↙ ◁
     即使知晓其为陷阱
                    → 誘われ、         
  仍被其诱惑        
          囚われ ←
          被其囚禁  
                        「なぜ...」
    「为何...」
                          抗うもせずまた…
      还未有丝毫反抗…
                        ▽         ▽                             溺     『就       れ      又     て      沉     し      溺     ま      于   う      其 の      中』                                         『 I wish you were here. 』
 我多希望你曾在此处
                    >>> Oh, never close your eyes    
  请不要闭上双眼    
                          Searching for a true fate <<<
      努力寻求那真实的命运
                     どこか消えた、  あの「ぬくもり」を
那些所谓的温暖  究竟消失在了何处
                    追いかけ、  続・け・て →→→          ↘ 見失う ↙    ←←←『Restart!』←←← 在不停的追寻中迷失方向 于是再度踏上征程                     >>> So, let us try again    
  就此踏上时间的回溯    
                          From the very first time <<<
      重新点亮遥远的生命之花
                    「きっと、きっと」  そうやって『今』も
「一定一定」   会再度为你付出一切
                    ○ 虚しい        
 描绘着       
        「輪」を描いてる ●
         虚幻的命运之轮
                    For now, see you again
为在此时 再度与你相逢
                    ...fading in      淡入                                         淡出      fading out...                                         ...fading in      淡入                                         淡出      fading out...                                         SAVING...                                         『 I wish we were there. 』
 我多希望我们曾在那里
                    あの日々には        
过往的时光        
        戻れない ×←←←
      已无法挽回
                    「時」は強く  哀しく強く
时间如此强大  强大到令人伤悲
                       ただ ただ 進んで →→→→→→  ゆ・く・だ・け   ←←←『Restart!』←←← 但是坚持着继续前进 就可以再度踏上征程                     >>> No, don't give up on life    
  请不要放弃生的希望    
                          This endless dead end <<<
      即使面对这无尽的死亡结局
                     振り返らない、  そんな「強さ」を
不再回头的   这份强大
                    > 誰も <      
无论是谁      
                          『皆』演じている
       都是虚伪的吧
                    For now I'll see you off →
此刻目送你的离去
                    And we'll die ←←←      
以生命的枯萎      
                          Waiting for a new day →
      触及崭新的从前
                    二度と…
为了我们能够再一次…
                    And we'll start →→→      
重新启程      
                          Waiting for a new day →
      面对崭新的一天
                    君と…
与你一起…
                    『 Oh, please don't let me die. 』
请 不 要 让 我 就 此 离 去 
                    消   请   え   不     な   要       い   就         で   此               消             ah…  失                                           - 終わり -

解决 Audio 元素 currentTime 属性不准确的问题

之前的 KK Player 有一个问题,就是在 Internet Explorer / Microsoft Edge 下如果拖动进度条播放时间会很诡异。
日前又发现 Firefox 下也有问题,点击跳转到 2 分钟,虽然显示是到了,但是实际上只有 1 分 50 秒多的样子

这个问题其实很早就知道了,只是当时以为是微软的 bug,然后加上 IE 用户不算多,就暂时放置了。

这个问题怎么看怎么像浏览器的问题,于是准备到 stackoverflow 提问的,偶然看到系统推荐的一条类似问题

大致解释下,MP3 是有损压缩格式,浏览器没办法根据时间找到对应的文件流位置(然而并不知道 Chrome 是怎么做到的),所以会出现如此鬼畜的时间。
解决办法只有换用 OGG 格式的无损音频

然而这下问题更大了,IE / Edge 压根不支持这格式… 可以点击这里查看 OGG 的浏览器兼容情况

根据浏览器兼容性报告,似乎只有 MP3 格式兼容性最好…
直到后来找到了 AAC 格式,兼容性报告在这里
而且 ACC 格式的 currentTime 也没有问题

于是目前就先用 ACC 格式存放歌曲,待浏览器兼容性改善再考虑用 OGG

新版 KK Player 测试中

Rally Go Round 作詞:LiSA·古屋真 作曲:じん 編曲:akkin 歌:LiSA TVアニメ「ニセコイ:」OPテーマ もう散々ぐるぐるしたじゃない?やるときやらなきゃ! いままでのダイナミックだって ダイナシだよ!? 精いっぱい純情かさねて ほらほら チェックメイト! …って言うところで キミは一歩踏んで 百歩下がる 素晴らしいコトバを授けよう。 “その目をしたキミに不可能などはない!” カラフルボードゲームは 本日も波瀾万丈 天使の弓 不敵な笑み 嵐が始まる 流星回転 ルーレット Rally Go Round ハート形の矢印で貫こう いま最強最大LOVEを込めた手のひらで 背中叩くから ありったけかっとばせ! 諸君のカクゴに見合う良い知らせ 待ってる 新記録の心拍数 乗り越え 見せてみてよ …ってば ちゃんと聞いてんの? アンラッキー何回ひいても ヤル気で満ちてりゃ ちょっとくらいのコースアウトなんか宝石だよ 「もう限界、あーもう、くじけたい」とかとか 同感だけど 昨日のピンチは 今日のジャンプ台で 100歩跳べる 時にはキミも思うだろう “繰り返しの日々に終わりはあるのかい?” それでも信じ続けた がんばるキミにちゃんと 今は知らない 予測できない イイコトが待ってる 天秤逆転 スマイリー・トラブルメイカー にらみ合ってた 昔のライバル 巻き込もう ほら全力疾走LOVE 射止める キミのコト いつも視てるから 目撃証言は お任せあれ GO! GO! GO FOR IT! GO FIGHT WIN! LET's GO! GET! GET! GET Ready? Ah YEAH!! GO! GO! GO FOR IT! GO FIGHT WIN! LET's GO! GET! GET! GET Ready? Da-Da-Da ダイスはすでに振られたよ 進み出したら待ったナシ キミは慎重!! その性格じゃ 鬼が出るか蛇が出るか Da-Da-Da ダッシュすれば勝利じゃない? 手の鳴る方へ かもんかもんかもんかもん!! 結果がなんだって キミ次第で ほら 最高のアドベンチャー まだまだいくよー! 想像通りに全然いかなくて 呆然とするほどゴールが遠く見えても 楽しんだ者勝ちのゲームなんだ いつも飛び出したそうにしてるキミの番 流星回転 ルーレット Rally Go Round ハート形の矢印で貫こう いま最強最大LOVEを込めた手のひらで 背中叩くから ありったけかっとばせ! 諸君が笑顔で語る良い知らせ 待ってる 未体験の達成感 目指してるキミでいてよ ほらチャンスだ ドリーマー! GO! GO! GO FOR IT! GO FIGHT WIN! LET's GO! GET! GET! GET Ready? Ah YEAH!! GO! GO! GO FOR IT! GO FIGHT WIN! LET's GO! GET! GET! GET Ready? Ah YEAH!! 经历了相当长时间的开发,KK-Player 的第一个测试版本终于出来了,可以在上面看到。

新版最重要的改动就是将歌词和播放器合并了,点击播放按钮歌词面板会自动展开来。

由于结构变化,原有 KK Lrc 的调用方式已经变动,所以以前的文章暂时无法显示歌词,正在慢慢改写中……
文章已经更新,如有个别文章有 bug 请回复反馈

另外歌词目前不支持 Offset 参数,所以个别歌曲可能歌词由过快或过慢现象,下个版本会修正这个问题

注:KK Player 禁止一切未经允许的使用以及二次开发,目前授权使用的网站如下:

  • ikk.me
  • nekosc.com
  • loacg.com
  • ikirby.me
  • kcwiki.moe
  • iwch.me
  • jclmiku.me

同步本地 / 服务器代码 - Git 篇

已经习惯用 Git 进行开发了,不得不说 Git 的确是个很好用的开发工具

有的时候经常会需要一边维护一个 Git 库,一边将代码部署到服务器上
例如团队共同进行开发,希望 commit 后自动部署到团队的测试服务器上,就可以采用下面的办法

首先先在服务器上创建一个 Git 库

git init --bare

然后打开 .git 文件夹,找到 hooks 文件夹,创建一个 post-receive 文件

#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

#exec git update-server-info

cd /var/www/buildbot.ikk.me/snapshot/KanColleTranslation/

env -i git pull

然后给这个文件赋予执行权限即可

由于我提前在网站上 git clone 过,于是直接 Pull 就行了
由于这是开放的库,就没有限制 .git 文件夹,如果需要限制可以在上面加 rm 命令,或是 nginx 屏蔽
当然想简单的话个人推荐把 git pull 换成 cp 简单粗暴

终极防跨站策略 Content-Security-Policy

听说 Discuz 又爆跨站漏洞了,唉……
不得不让我想起了 Content-Security-Policy 这一大神器

最早接触 Content-Security-Policy 还是在开发 Chrome 扩展程序的时候
Chrome 的安全性众所周知,开发的时候也遇到了各种坑,其中一个就是 Content-Security-Policy,不支持 HTML5 Import 标签就是这货导致的,于是 Polymer 被我搁(鸽)置了

Content-Security-Policy 可以保护网页,要求所引用资源必须来自指定的几个域,也可以要求禁用一些常用的、容易被 XSS 的特性
比如 Chrome Extensions 中就禁用了上下文的 Script 代码,所有 JavaScript 必须来源自 js 文件,不允许直接通过 script 标签运行

针对网络留言版、社区等网站,还允许禁用 html 标签的 onclick、onmouse*** 等在 html 中定义 js 事件,就算有 XSS 漏洞你也无能为力了 = =
PS:其实这样挺好的,当年 Flash 在 ActionScript 2.0 就是这种方式,在 ActionScript 3.0 已经全部换成监听器的设计了,这样看起代码来也清晰多了

如果你对 CSP 有兴趣,这里是一篇在 HTML5Rocks 上的文章,如有需要可供参考

AJAX Comment

因为新风格与 AjaxComments 插件不兼容,尝试修改未果,干脆自己动手做一个 AJAX 评论出来

新的评论插件大部分由 JavaScript 实现,并且效果很配这个风格。

在开发过程中,想实现 bootstrap 的弹窗效果,但是 bootstrap 的 Modal 实在太麻烦了,必须要先建好 div 才能用。
能不能实现类似贴吧签到助手那样的用法呢?答案当然是肯定的
最后结果已经放到GitHub上了:https://github.com/kookxiang/BootstrapModalHelper

用法很简单:

newBootstrapModal()
    .setTitle('系统消息')
    .setContent('您的账号在另一地点登录,您被迫下线。')
    .addContent('如果这不是您本人的操作,那么您的密码很可能已经泄露。建议您修改密码。')
    .addContent('如有疑问,请点击这里')
    .addButton('重新登陆', null, function(){
        window.open('http://aq.qq.com');
    })
    .addButton('确定', 'primary')
    .show();

把 QQ 密码发到评论框 把上面的代码复制到 F12 Console 里运行查看效果

现在试试评论吧 XD

KK LRC 新版开发笔记

  1. 首先改名叫 KK Player 了,现在歌词是可选部分
  2. 现在 HTML5 Audio 元素也有属于自己的界面了
  3. 重写歌词部分代码(进行中)
  4. 现在歌词将显示在 KK Player 的界面中,并可以自由关闭
  5. 使用 CSS3 Transform 替换原有滚动函数(Pending,见注1)
  6. 将音频下载转移到播放器右键菜单中(Pending)

注1:测试发现,CSS3 Transform 并不会触发浏览器重绘,可以提升效率,平滑滚动可以借助 CSS3 Transition,不再需要 JS 辅助,毕竟 Transition 是有硬件加速的嘛

注2:看上面的列表就知道,现在新版还没有做完,具体要做到啥时候我也不知道,现在暂时没有做下去的动力……除非我能找到一款好点的 JS 混淆器 23333

给 Typecho 添加双因素认证支持

不得不说双因素认证的确是一种保护账号安全的有效方法,Google、GitHub和众多网站纷纷支持双因素认证保护账号,这次我把双因素认证移植到了 typecho 上

首先不得不说下,typecho 并没有给登录预留插件接口,只有登录成功和登录失败的处理接口,登陆界面也没有可以插入的地方,所以这回直接对 Typecho 源代码下手了

首先下载修改后的 Typecho 分支:
https://github.com/kookxiang/typecho

然后执行 SQL:

ALTER TABLE `typecho_users` ADD COLUMN `twoFactorAuthKey` varchar(18) NOT NULL;

(本来可以放到 Typecho 更新程序中自动执行的,考虑到日后升级问题,就没有放过去)

登录到后台,点击控制台 个人设置,最下方可以看到“双因素认证”,有随机生成的一组 Key,手动添加到 Google Authenticator 或者 Authy 中就可以使用了。当然也可以通过二维码方式添加,不过考虑到 Google API 在国内的可用率还是建议开着梯子访问。

添加到手机之后将当前验证码填写到确认框中点击启用即可启用。此后每次登录后台不论密码是否正确都将要求输入动态密码(增加暴力破解难度)

如需取消,可以登录后台输入动态密码取消。
如果无法登录后台,可以到数据库中清空对应用户的 twoFactorAuthKey 字段

就是这样~
Why? キミに問いたい そのアツい情熱の進化 「ギミー!レボリューション」 作詞:こだまさおり 作曲:田淵智也 編曲:やしきん 歌:内田真礼 待って 違和感の理由 恋じゃまだ弱いな 100通りの好きが飽和しても なりたいのはオンリーワン 思わず成長してく この髪は卒業? キミがちゃんと振り向いてくれたら きっとそれが完成形 理屈じゃないとか どこかで読んだコトバより めえいっぱい(わあ)背伸びしたい(YES!!)はじめての挑戦かもね (Growing UP!! Next phase) Tell me why キミに問いたい そのアツい情熱の進化 そうキミがキミである 存在が語るミラクル(Uh, baby) ねえ、もっと知りたい この胸が高鳴る仕組み もはや恋さえ凌駕しちゃう アタラシイ革命の予感 今日もS.O.S 駆けつけて来てねヒーロー Rescue!! すー、はー、Check, Check, テス オーライ キミの言い分 なんかフに落ちちゃった いろんな自分 会えないままなんて ひとりぼっちと変わんないし 理解はあとから? メクルメイテどうしたらいい? エスコート(きゃ)お願いね(やった)ふたりならなんでもできそう (You are my HERO!!) Take me high キミと目指すの あの遥か情熱のパラダイス もうキミがキミでなきゃ この星がピンチなんだよ(Uh, baby) ねえ、いつか言わせて トキメキが生みだすコトバ それは愛ともリンクしちゃう オトナ未満わたしの革命 Wao!! GOGO!! どっち? Oh my god… OK! Come on! うん、行くよっ いつも今が最高でしょ Ready GO!! ねえ、教えて 聞かせて これからどうなるの? これ以上ないくらい トキメキが加速しちゃうよ (Growing UP!! Final phase) 目覚めてく わたし達だけのカタチ Tell me why キミに問いたい そのアツい情熱の進化 そうキミがキミである 存在が語るミラクル(Uh, baby) ねえ、もっと知りたい この胸が高鳴る仕組み もはや恋さえ凌駕しちゃう アタラシイ革命の予感 今日もS.O.S 駆けつけて来てねヒーロー Rescue!!

  1. 1
  2. 2
  3. 3