重新分享我的 RSS 文章订阅

2015-08-23 • 博客记录 • #rss

由于最近犯懒严重,所以这玩意儿也很久没更新了……

之前我曾在博客分享过我的 Star 文章订阅,坚持了一段时间之后,就开始用 kindle 读 RSS 了,所以就没法去 Tiny Tiny RSS 给喜欢的文章加 Star。不过最近我发现,用 kindle 读 RSS 的效率实在是比不上用手机 App 读,于是又切换回了 Tiny Tiny RSS。

这次把 Tiny Tiny RSS 重新配置了一遍,然后改用“Publish”功能取代之前用的“Star”功能,并且加了一些 Article Nots,这样订阅就会变得更加像“分享”一些。

RSS 地址:http://share.best33.com/feed/people/oott123.rss

我是如何搭建一个低成本的 Minecraft 小型服务器的

2015-06-30 • Linux 笔记 • #minecraft

注目:本人不接受任何的免费的技术咨询指导,提问请先发红包!

自己有个小型的 Minecraft 服务器,为了节约成本以及管理方便,做了一整套自动化的管理方案。整套方案代码量近万行,同时很多东西都写死在了代码里,想开源但是很多东西目前还不完善,根本没法拿出手……所以写了个思路整理,若有需要的朋友可以参考着搭一个。

一、 服务端的选用

没啥好说的,由于需要 mod ,用的 KCauldron-1.7.10, mod 都是自己打的, Forge + LiteModLoader ,大概十几个 mod 。

插件用了一个非正版验证插件,配合宏与按键绑定(Marcos and key bind)进行自动登录。

二、 ISP 的选择

ISP 使用青云。由于服务器在线人数常年在 5 人以下,故选用青云可以随时开关实例,节约运行成本。

青云关机的话,公网 IP 和硬盘也收费,故使用 API 将 ip 释放,仅保留硬盘扣费。

三、 如何开启服务器

由于公网 IP 变动和服务器常年关闭,在另外一台服务器上搭建了一个 HTTP 服务,并自己写了个启动器。

当启动器启动的时候调用那个服务去开启服务器、下发公网 IP 并写入 servers.dat,避免动态域名解析被缓存的问题。

开启服务器后,利用 Telegram bot API ,在群里进行通知服务器的新 IP。

利用 mc 协议检查十分钟没人登录后,服务器自行关闭。

四、 如何管理 mc 服务

使用 supervisord 进行自启动。

需要控制台时,利用 supervisorctl fg minecraft 来调用控制台。

在 Windows 下使用 boot2docker 搭建 docker 开发环境

2015-06-03 • Linux 笔记 • #windows #docker

很久以前研究过一会儿 docker ,当时觉得只是一个轻量级的虚拟机包装而已,没觉得有多大用。

最近发现这玩意还蛮好玩的,但是又懒得翻以前的虚拟机了,于是发现一个叫 boot2docker - 国内下载(via DaoCloud) 的东西。官方宣称是“It runs completely from RAM, weighs ~27MB and boots in ~5s (YMMV).”。

下载回来的安装包有 100 多 MB,当时在想说好的 27MB 呢,结果发现包里有个 VirtualBox 和一个 msysgit ……简直坑。

如果你的机器上没有这俩玩意,那就放心大胆的直接安装吧。它会帮你把各种琐事配置好,官方的指导文档里也写的十分详细。

如果你的系统里有 VirtualBox 了,那也就直接安装,它会自动识别系统上的 vbox 的,不过你最好先测试一下你的 Host-only 网卡是否正常。

那么重点来了:如果你的系统里有 msysgit,并且还有其它的 GNU 工具链,比如我这种装了 Gow 的人,那么其实这个玩意是有坑的。

要说这个坑,首先要谈一谈 boot2docker 的工作原理。 boot2docker 由 VirualBox 里的一个叫 boot2docker 的虚拟机、一个用来管理 Virual Box 里的虚拟机的工具 boot2docker.exe 和 docker 本体 docker.exe 组成。

当你执行 sh start.sh 的时候,它首先调用 boot2docker init 来创建这个虚拟机(如果已经存在则跳过);其次将该虚拟机启动;最后使用 boot2docker ip 来获取虚拟机的 ip 地址并设置环境变量。

boot2docker ip 这个命令,是调用系统中的 ssh 来获取 ip 地址的。它在 init 的时候,将虚拟机的 22 端口转发到宿主机的 2022 端口,并运行 ssh -p 2022 docker@localhost ip addr show dev eth1 来获取 ip 地址(详细的命令可运行 boot2doker -v ip 来显示)。而 Gow 里的 ssh 指令,则是调用了 PuTTY 的 plink.exe

那么问题来了:plink.exe 根本不支持 -p 语法,也不支持它所使用的 -o 等参数。

所以,如果你装了 Gow,请一定把 msys git 的路径加到 PATH 的最前方……起码是在 Gow 的前面,这样就不会被坑了。

处理完这些乱七八糟的事情之后,运行 boot2docker status 即可看到你的虚拟机的当前状态。下次使用时,只需执行 sh start.sh 即可自动配置好环境变量并且开启 git bash。在这个 git bash 里,你就可以执行你的 docker 指令了~

如果不想用 git bash,那么执行 boot2docker shellinit ,也可以看到应设置的环境变量,如:

export DOCKER_HOST=tcp://192.168.111.222:2376
export DOCKER_CERT_PATH='C:\Users\oott123\.boot2docker\certs\boot2docker-vm'
export DOCKER_TLS_VERIFY=1

此时,用 set 将这些环境变量设置好,即可在 cmd 中使用 docker 来管理 docker 容器了,如:

set DOCKER_HOST=tcp://192.168.111.222:2376
set DOCKER_CERT_PATH=C:\Users\oott123\.boot2docker\certs\boot2docker-vm
set DOCKER_TLS_VERIFY=1

试试 docker info 能不能显示出虚拟机的信息来吧。

Tiny Tiny RSS 推送到 kindle

2015-05-30 • Web 万象 • #rss #kindle #ttrss #推送

前方高能预警:以下内容本人仅照原样提供,不对其有任何支持!伸手党速速退散,折腾指数五颗星!

前方预警:如果你没有 kindle 或者不打算用 kindle 看 RSS,以下内容对你而言并无作用。

很久以前折腾了一个 Calibre 的自定义脚本,用这个脚本可以将 tiny tiny rss 中的内容推送到 kindle 上实现 kindle 的 rss 阅读。

kindle 上的阅读体验

不过在最新的 ttrss 上,我发现它已经没法实现分类阅读了,估计是 api 有所改动,毕竟写了也有好几个月了,懒得调整了……

先放上脚本链接,包含 recipe 文件和推送脚本,后者需要 mailgun 账户。

如果你用的是 Linux VPS,那么只要按照calibre 官网上所述的安装方法安装好 calibre,最后将 recipe 文件和 push.sh 放到 VPS 上,修改一些变量就能用了。

如果你用的是 Windows (自己的电脑或者 VPS 都好),那打开 calibre,点新闻抓取,高级,自己添加一个 recipe,将我的 recipe 文件粘贴进去,最后设置登录用户名为: username;http://<ttrss-url>;test,密码为 ttrss 的密码,然后设置自动抓取推送即可。

最后说一句,对此脚本不负任何责任,这玩意需要自己慢慢折腾,我之前没写折腾笔记所以现在懒得写 step-by-step 了……

SyntaxHighlighter 的正确使用姿势 - InstantClick 哭晕在厕所

2015-03-05 • 博客记录 • #instantclick #syntaxhighlighter

今天闲得无聊,让 InstantClick 支持了 SynatxHighlighter,并且对 Typecho 动了些手脚,使得在 Markdown 渲染的时候无需手动指定就可自动识别代码语言并渲染高亮。

看起来逼格很高的两个事情,其实只需要简单的几个操作。

InstantClick 不支持 SynatxHighlighter ,是因为后者是监听 document.ready 事件的。这种动态渲染的插件,大多和 InstantClick 不兼容。解决方法和在 使用 InstantClick 时 piwik 、 MathJax 的配置 文中描述的一样,只需要加入一段渲染的代码就完工了:

InstantClick.on('change', function() {
    SyntaxHighlighter.highlight();
});

值得一提的是,我之前一直在试着加 SyntaxHighlighter.all() 发现没有用,后来读源码才发现, SyntaxHighlighter.all() 这个函数依然是监听 document.ready 事件,并在监听后调用 SyntaxHighlighter.highlight() 的,所以应该直接调用后者。

另外,SyntaxHighlighter 在换页后似乎无法 Autoload 对应的 Brush,所以需要在页面中预先用 script 标签加载所有的 brush。

至于 Markdown 渲染的时候加入自动识别,其实也就是加了个简单的正则。是在 /var/MarkdownExtraExtended.php 文件中,修改 _doCodeBlocks_callback 函数如下:

<?php
    protected function _doCodeBlocks_callback($matches) {
            $codeblock = $this->unhashHTMLBlocks($matches[1]);

            $codeblock = $this->outdent($codeblock);
            $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);

            # trim leading newlines and trailing newlines
            $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
            $codeRegexs = array(
                    'php' => '#\\?php#',
                    'html' => '#\(html|body|head|title|h1|div|p|?xml)#',
                    'js' => '#var|function \(|window\.|document\.|innerHTML#',
                    'bash' => '#curl|wget|sh|^\#!|service .* start|yum install|clone |cd #',
                    'sql' => '#SELECT|UPDATE|DELETE|WHERE#',
                    'python' => '#if.*:|def .*\(#',
                    'css' => '#background-color|font-family|margin|padding#',
            );
            $brush = 'text';
            foreach ($codeRegexs as $lang => $reg) {
                    if(preg_match($reg, $codeblock)){
                            $brush = $lang;
                            break;
                    }
            }
            $codeblock = "<pre class='brush: $brush'>$codeblock\n</pre>";
            return "\n\n".$this->hashBlock($codeblock)."\n\n";
    }

好了,从此告别手动指定语言,走向新时代啦~

友情链接