2016: 我的浏览器 A - Z

2016-12-21 • Web 万象 • #浏览器 #我的浏览器a-z

A: https://aoishi.[REMOVED] 自己服务器的管理面板
B: http://bbs.i-cassell-you.com/forum.php 还是卡院
C: http://civitas.soobb.com/ 多少年没上了……
D: https://www.dnspod.cn/ DNSPod 有几个域名在上面
E: http://easy-admin.[REMOVED] ???已经是我记不起来的东西了
F: http://fiddle.jshell.net/ 呃……其实我用得不是很多
G: https://gitlab.com/ Ainou 的代码托管在那,所以经常去
H: http://hicivitas.com/ 以前兼职公司的官网
I: http://www.ip138.com/ …………大概是经常看自己 ip
J: http://jd.com/ 已经不怎么上淘宝了,狗东比较舒服
K: http://kuler.adobe.com/ 一个配色工具,可能是因为在收藏夹吧,平时不怎么用
L: http://logcg.com/ 这是谁的博客啊……完全不记得访问过了
M: https://mp.weixin.qq.com/ 微信公众平台……嗯最近可能是上得比较多
N: http://notes.jetienne.com/ 这又是谁的博客了……不记得了
O: http://openshift.redhat.com/ 我感觉今年我应该没上过
P: http://piao-tech.blogspot.com/ 怎么越来越离谱了
Q: http://qzone.qq.com/ ……啥。。
R: http://redis.io/ 嗯……倒是经常去查文档
S: https://suiyu.xyz/ 偶尔会写日记
T: http://tower.im/ 好用的团队协作工具呢……不过现在也不怎么用了
U: http://upyun.com/ 偶尔会上去配一下 CDN
V: https://v2ex.com/ 毫无悬念
W: http://weibo.com/ 其实我最近比较少上了……
X: http://xiumima.com/ 呃……社工库么
Y: http://yeah.net/ 偶尔会上网易邮箱看看
Z: https://zhihu.com/ 知乎倒是常去看的

总之,通过浏览器,可以看出一个趋势:我使用浏览器浏览不同的 web 网站的时间越来越少了——大部分网站我根本想不起来。而更多的时间,可能花在了刷手机上。移动互联网近年来确实是势不可挡,我也不得不沦陷了。

唯一不变的,大概是 Web 的信仰——以及,今年我还在坚持使用 Firefox 浏览大部分网页。

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 了……

Firefox 35 下可用的 pentadactyl

2014-12-09 • Web 万象 • #firefox #pentadactyl

pentadactyl 是一个以类 vim 方式操作 Firefox 的插件。

由于某些原因,pentadactyl 并未停止开发,但火狐附加组件页面和官方每日构建页面都停止了更新,导致火狐新版无法支持 。

于是我自己构建了一个版本,是文章发布时的最新源码构建的。放在了百度网盘,需要的人自取。

构建其实也很简单,以 CentOS 为例,假设你安装了 epel ,然后:

yum install mercurial zip make # 安装hg,zip,gmake等依赖
hg clone http://dactyl.googlecode.com/hg/ dactyl # 将 dactyl 的源码克隆到本地
cd dactyl/
make -C pentadactyl xpi # 制作 pentadactyl 的 xpi 文件

然后你会在 downloads 文件夹下发现构建好的 xpi 文件。直接用火狐安装即可。

更新:Firefox 35 可用的版本已经传到了百度网盘

gulp.js - stream 驱动的自动构建工具

2014-06-30 • Web 万象 • #gulp #coffee #jade #stylus

最近心情不太好,开始有点自暴自弃。所幸能够写点代码分分心……

开始接触一些前端的项目,就尝试着用一些看起来很 cool 的技术/工具。初步选定的工具包括 jade 、 stylus 和 coffee 。

可是做预编译实在是一个很麻烦的事情,直到我遇见了 gulp.js

gulp.js 是一个简洁明快的自动构建工具,官方文档也异常简洁清晰。主打“stream”式构建,配置文件写起来也是不太复杂。这里针对自己用到的一些插件做简单的介绍。

gulp-concat 是一个将多个文件合并到一起的插件。

gulp-clean 用来清理目标目录中的文件。

gulp-stylusgulp-coffeegulp-jade用来预编译我的代码。

想要达到的效果是:

  1. 将一些静态文件复制到发布目录;
  2. 将框架的 css 与自己的 stylus 编译成的 css 合并;
  3. 将框架的 js 与自己的 coffee 合并;
  4. 将 jade 编译为 html 文件。

目录结构如下:

public/ 存放发布文件
src/ 存放源文件

实现思路:

清理发布目录

var clean = require('gulp-clean');
gulp.task('clean', function () {
    return gulp.src('public').pipe(clean());
});

几乎是最简单的任务。将发布目录整个的删掉。

gulp.src用于读取源文件,这里读取的是public目录;然后将其 pipe 到 gulp-clean 插件,将其清理掉。

处理静态文件

gulp.task('static', function () {
    gulp.src('src/img/**')
        .pipe(gulp.dest('public/img/'));
    gulp.src('src/fonts/**')
        .pipe(gulp.dest('public/fonts/'));
});

和上面的范例类似,只不过用的是gulp.dest,用于将 pipe 过来的文件发布到 public 目录。

注意这里的路径是 src/img/** ,表示对 img 目录下的文件进行递归处理。

构建 jade

var jade = require('gulp-jade');
gulp.task('html', function () {
    return gulp.src(['src/jade/**/*.jade', '!src/jade/partial/**'])
        .pipe(jade())
        .pipe(gulp.dest('public/'));
});

这里只是换用了gulp-jade插件而已。

需要注意的是,这次的路径传入进来的是个数组;数组会如同你想象的那样,将数组中的元素挨个匹配;!开头的表示去除src/jade/partial目录下的所有 *.jade 文件;**/*.jade则表示该目录下递归中所有的 jade 文件。

这里将 gulp 链 return 回去,是为了在处理依赖的时候,能够正确确定函数处理进度,以保证运行顺序。

合并 js 和 css

var concat = require('gulp-concat');
//合并 css
gulp.task('css', function () {
    return gulp.src('src/css/*.css')
        .pipe(concat('0.css'))
        .pipe(gulp.dest('.tmp/css/'));
});
//处理 js
gulp.task('js', function () {
    //加载jquery、modernizr、foundation、vue
    return gulp.src([
        'src/js/vendor/jquery.js',
        'src/js/vendor/modernizr.js',
        'src/js/foundation.min.js',
        'src/js/vendor/vue.min.js'
    ])
        .pipe(concat('0.js'))
        .pipe(gulp.dest('.tmp/js/'));
});

这里用到的是gulp-concat插件。它能把多个文件合并成为同一个。

这里将输出送到了 .tmp 目录下,是为了后续能够处理它。

编译 stylus 和 coffee

var stylus = require('gulp-stylus');
var coffee = require('gulp-coffee');
//stylus 编译
gulp.task('stylus', function () {
    return gulp.src('src/styl/**/*.styl')
        .pipe(stylus())
        .pipe(concat('1.css'))
        .pipe(gulp.dest('.tmp/css/'));
})
//处理 coffee
gulp.task('coffee', function () {
    return gulp.src('src/coffee/**/*.coffee')
        .pipe(coffee({
            bare: true
        }).on('error', gutil.log))
        .pipe(concat('1.js'))
        .pipe(gulp.dest('.tmp/js'));
});

这里依然将输出送到了 .tmp 下。接下来要将 .tmp 下的文件合并为真正能够使用的 css 和 js 文件。

合并临时 css 与 js 文件

gulp.task('concat-css', ['css', 'stylus'], function () {
    return gulp.src('.tmp/css/*')
        .pipe(concat('common.css'))
        .pipe(gulp.dest('public/css'));
});
gulp.task('concat-js', ['js', 'coffee'], function () {
    return gulp.src('.tmp/js/*')
        .pipe(concat('common.js'))
        .pipe(gulp.dest('public/js'));
});

这里用到的是 deps 也就是“依赖”语法。task 的第二个参数是一个数组。在执行这个任务时,会自动执行数组中的任务;并且,当且仅当数组中所有任务执行完毕后,才会执行后面的 function 中的任务。

这里的应用就是,在先合并好了框架的 css 和自己写的 stylus 编译完成之后,再将临时文件中的两组文件合并起来。

清理临时文件

gulp.task('concat-and-clean', ['concat-css', 'concat-js'], function () {
    return gulp.src('.tmp').pipe(clean());
});

这里则是用到了刚刚提到的 gulp=clean 插件和 deps 语法。

默认动作

gulp.task('default', ['concat-and-clean', 'html', 'static']);

在命令行下,执行 gulp 时,则会自动执行 default 任务。这里定义的 default 任务没有事实上的动作;它只是同时执行上面所述的几个任务,然后自己退出。

监视改动

gulp.task('watch', ['default'], function () {
    //js
    gulp.watch('src/coffee/**', ['concat-js']);
    //css
    gulp.watch('src/styl/**', ['concat-css']);
    //html
    gulp.watch('src/jade/**', ['html']);
    //静态
    gulp.watch('src/img/**', ['static']);
})

gulp.watch 能够监视指定文件的改动,并启动任务;也就是说,当src/coffee/中的文件改动时,gulp 会自动执行 concat-js 任务。

然后我们只需要在命令行中输入 gulp watch ,gulp 将会自动跑一轮 default 任务,然后监视我们的源文件;当发现文件变动时,将自动执行编译。

至此,我的 gulpfile.js 就编写完毕了。Enjoy it!

Goodbye , LastPass . Hello , KeePass !

2014-03-05 • Web 万象 • #keepass #lastpass

一直以来我都高度依赖 LastPass ,由于自己的分级密码策略,我实在是记不住哪些网站用了哪些密码。好在有了 LastPass ,让我的生命中少了一大堆烦恼。

随着审美观的提高,我不断发现 LastPass 的致命软肋。如,密码数据库保存在服务器上;又如,连接经常不够稳定;再如,保存密码流程真真是二逼兮兮的。直到我发现了 KeePass ,这一切都不再烦恼。

KeePass 是一个优秀的开源密码管理方案。由于其并不把数据存放在服务器上,因此一切关于网站会不会一直存活下去的担心皆可避免;另外由于其开源的特性,让你的选择不只有一种——光是 iOS 客户端就有长长的一串。

这里我选用的是官方的 KeePass 2.25 。在 KeePass 里很容易把 LastPass 的数据导入进来,只需点击文件->导入->LastPass CSV,即可导入 LastPass 导出的 csv 文件了。

KeePass丰富的导入功能

在这张图里也可以看到,KeePass 能够导入各种各样的格式。

导入之后,就可以开始使用 KeePass 了。这里顺便介绍一些实用的插件。

首先是配合 FireFox 使用的 KeeFox 。在 Mozilla 扩展中心下载 KeeFox 之后,关闭 KeePass ,根据提示选择安装路径,即可安装 KeePass 插件。这时启动 KeePass ,右键点击你存放密码的目录,选择 Set as KeeFox start group ,就算配置完成了。之后直接在 Firefox 中就能享受到 KeePass 的贴心了。

然后是 KeeOtp 。这款插件支持将 Google 二次验证导入 KeePass 中,这样就不需要去找手机了,同时手机丢失了也不怕, KeePass 里还有备份。插件的用法很简单,右键点击条目选择 Timed One Time Password ,复制粘贴网页中的密钥,就能成功设置了。

另外给出几个小提示。

其一是自动登录 KeePass 的方法。 KeePass 确实够好用,可是问题是每次都输入长长的密码实在是很不环保啊!KeePass 提供了-pw:123456这样的命令行参数,但是把密码写到命令行里恐怕和没有密码没区别。解决的方法,是使用内置的{PASSWORD_ENC}功能和-pw-enc命令行。根据官方说明,{PASSWORD_ENC}是一种只限当前用户使用的加密功能,也只有 KeePass 能够解密,所以可以安心使用。

具体的方法是,创建一个条目,用户名随意,密码写成你的 KeePass 的密码,在编辑->自动输入中选择“替代默认规则”并写入规则:{PASSWORD_ENC}确定保存。然后在 KeePass 目录下新建一个文件,叫 start.bat ,用记事本打开,输入:start KeePass.exe "(KeePass数据库目录)" -pw-enc:。此时将光标放到最后,切换到 KeePass 里,右键刚刚的条目,选择“自动输入”。然后……你就可以看到你的记事本里的字符在疯狂的跳动,大概十多秒的样子输入了一大堆 Base64 编码的玩意。现在,可以保存关闭了,下次双击 start.bat 就可以自动登录了。至于安全性嘛……总之不能和便利性同在。

KeePass密码加密

其二是自动保存的触发器。点击“工具->触发器”,左下角的“工具”中粘贴下面的脚本即可:

<?xml version="1.0" encoding="utf-8"?>
<TriggerCollection xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Triggers>
        <Trigger>
            <Guid>EXkzOtjQEEqLvtvmzbDD+Q==</Guid>
            <Name>自动存盘</Name>
            <Comments>via http://best33.com</Comments>
            <Events>
                <Event>
                    <TypeGuid>jRLUmvLLT/eo78/arGJomQ==</TypeGuid>
                    <Parameters />
                </Event>
            </Events>
            <Conditions>
                <Condition>
                    <TypeGuid>08r67ygqRkqZkNhl/OAW7Q==</TypeGuid>
                    <Parameters />
                    <Negate>false</Negate>
                </Condition>
            </Conditions>
            <Actions>
                <Action>
                    <TypeGuid>9VdhS/hMQV2pE3o5zRDwvQ==</TypeGuid>
                    <Parameters />
                </Action>
            </Actions>
        </Trigger>
    </Triggers>
</TriggerCollection>

其三是自动同步。这个嘛比较简单,数据文件放到 OneDrive/DropBox/Google Drive 里就好了。为什么是这三个网盘呢?因为 KeePass2Android 只支持这三个网盘……

当然了,你有自己的 FTP/WebDav 服务器啥的也是可以直接用 KeePass 打开的,只不过存盘太慢了……所以还是用同步盘吧XD。

友情链接