[{"content":"去年第一次去日本去了镰仓，做了一次《青春猪头少年不会梦见兔女郎学姐》的圣地巡礼。今年的圣诞假期去了关西，就花了一天时间，在宇治一带做了京吹的巡礼。\n京阪六地藏车站外的人行道。\n妹子们上下学坐的京阪电车。\n京阪电车内部，经典的宇治绿。\n京阪宇治站的闸机。\n京阪宇治站宇治桥出口的超短扶梯。\n著名的宇治桥。\nうまくなりたい！\nTHE 久美子椅\n宇治商店街入口的鸟居。动画中的祭典就是在这条商店街上。\n宇治上神社。据说有着日本最老的神社本殿。\n宇治上神社本店外的小路。\n前往大吉山展望台的步道。\n传说中的大吉山展望台。\n换个角度拍一张。背景中的树比动画中长高了不少，这个角度已经看不到景色了。\n六地藏站内的京阪电车联动看板，不过已经看不到痛电车了。\n联动看板その２。\n大吉山登山步道入口处的劝退指示牌。夜间登山真的是漆黑一片。\n我们没有等到完全天黑，走之前照的最后一张夜景。\n京阿尼第一工作室，愿逝者安息。\n","permalink":"https://seewang.me/zh/chui-xiang-shang-di-yin-hao-sheng-di-xun-li/","summary":"\u003cp\u003e去年第一次去日本去了镰仓，做了一次\u003ca href=\"//seewang.me/zh/qing-chun-zhu-tou-shao-nian-bu-hui-meng-jian-tu-nv-lang-xue-jie-sheng-di-xun-li/\"\u003e《青春猪头少年不会梦见兔女郎学姐》的圣地巡礼\u003c/a\u003e。今年的圣诞假期去了关西，就花了一天时间，在宇治一带做了京吹的巡礼。\u003cbr\u003e\n\u003cimg loading=\"lazy\" src=\"/images/sound-euphonium/1-rokujizo-cross.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e京阪六地藏车站外的人行道。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/images/sound-euphonium/2-keihan-train.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e妹子们上下学坐的京阪电车。\u003c/p\u003e","title":"《吹响！上低音号》圣地巡礼"},{"content":"最近发现了一个 Go 写的 Webhook 库，一个json文件就能完成配置，用起来非常方便，于是就动手给博客服务器加上了自动部署的 webhook。\n下载 adnanh/webhook 就是上面说到的库了，Ubuntu 17.04 及之后的版本可以直接通过 apt install webhook, 而较老的版本或其他分支，可以直接在 Release 页面下载对应的预编译版本或者克隆下来从源码编译。\njson配置文件 首先创建一个 json 配置文件。\n[ { \u0026#34;id\u0026#34;: \u0026#34;deploy-repo\u0026#34;, \u0026#34;execute-command\u0026#34;: \u0026#34;/path/to/deploy.sh\u0026#34;, \u0026#34;response-message\u0026#34;: \u0026#34;Executing deploy script\u0026#34;, \u0026#34;trigger-rule\u0026#34;: { \u0026#34;and\u0026#34;: [{ \u0026#34;match\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;payload-hash-sha1\u0026#34;, \u0026#34;secret\u0026#34;: \u0026#34;my-secert\u0026#34;, \u0026#34;parameter\u0026#34;: { \u0026#34;source\u0026#34;: \u0026#34;header\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;X-Hub-Signature\u0026#34; } } }, { \u0026#34;match\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;value\u0026#34;, \u0026#34;value\u0026#34;: \u0026#34;refs/heads/master\u0026#34;, \u0026#34;parameter\u0026#34;: { \u0026#34;source\u0026#34;: \u0026#34;payload\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;ref\u0026#34; } } }] } } ] 自动部署脚本 接下来，我们需要创建对应的部署脚本。以 Laravel 项目为例：\n#!/bin/bash cd /path/to/repository git fetch -all git reset --hard origin/master git pull composer install --no-dev npm install npm run production php artisan route:cache php artisan config:cache 接下来运行下面的命令就可以启动 webhooks 了。\n/usr/bin/webhook -hooks /etc/hooks/hooks.json -hotreload 默认配置下，程序会运行一个 webserver 监听 9000 端口，并把 webhook 配置在 http://ip-of-server:9000/hooks/deploy-repo 下。\n这时我们直接访问上面的 URL 会显示：\nHook rules were not satisfied. 这表示 webhook 已经成功运行了，但是因为没有满足执行脚本的条件。\n配置 Github 仓库 接下来就要在 Github 中添加配置来自动访问 webhook。\n在想要自动部署的仓库中找到 Settings \u0026gt; Webhook \u0026gt; Add webhook，在 Payload URL 中填入上面的 URL, 在 Content Type 选择 application/json，在 secret 中填入上面 json 配置文件中的 secret，然后点击确认就好了。\n创建 webhook 服务 目前为止， webhook已经能实现所有功能了，但是现在我们的程序还只是在 SSH 上运行，因此我们用 systemd 起一个服务使其能在后台常驻运行。\n在 /etc/systemd/system 路径下，建立一个 webhook.service 的文件：\n[Unit] Description=Webhook [Service] ExecStart=/usr/bin/webhook -hooks /etc/hooks/hooks.json -hotreload [Install] WantedBy=multi-user.target 然后启动服务：\nsystemctl enable webhook.service systemctl start webhook.service 然后我们就可以通过 service webhook status 来确认服务是否成功启动了：\n● webhook.service - Webhooks Loaded: loaded (/etc/systemd/system/webhook.service; enabled; vendor preset: Active: active (running) since Tue 2019-03-12 11:18:36 CST; 3 days ago Main PID: 25652 (webhook) Tasks: 8 (limit: 1110) CGroup: /system.slice/webhook.service └─25652 /usr/bin/webhook -hooks /etc/hooks/hooks.json -hotreload 添加反向代理 毕竟直接用 IP + 端口访问有些丑陋，我们给我们的 webhook 加上反向代理，顺便加上 https。这一步其实和 webhook 无关，所以不详细说了，贴出我的 Nginx 的配置，仅供参考。\nserver { listen 80; server_name webhooks.seewang.me; return 301 https://webhooks.seewang.me$request_uri; } server { listen 443 ssl http2; server_name webhooks.seewang.me; ssl_certificate /etc/letsencrypt/live/seewang.me/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/seewang.me/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; location / { try_files $uri @proxy; } location @proxy { proxy_pass http://webhooks; proxy_pass_request_headers on; } } upstream webhooks { server 127.0.0.1:9000; } ","permalink":"https://seewang.me/zh/shi-yong-webhooks-zi-dong-bu-shu-dai-ma/","summary":"\u003cp\u003e最近发现了一个 Go 写的 Webhook 库，一个json文件就能完成配置，用起来非常方便，于是就动手给博客服务器加上了自动部署的 webhook。\u003c/p\u003e\n\u003ch3 id=\"下载\"\u003e下载\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/adnanh/webhook\"\u003eadnanh/webhook\u003c/a\u003e 就是上面说到的库了，Ubuntu 17.04 及之后的版本可以直接通过 \u003ccode\u003eapt install webhook\u003c/code\u003e, 而较老的版本或其他分支，可以直接在 \u003ca href=\"https://github.com/adnanh/webhook/releases\"\u003eRelease\u003c/a\u003e 页面下载对应的预编译版本或者克隆下来从源码编译。\u003c/p\u003e\n\u003ch3 id=\"json配置文件\"\u003ejson配置文件\u003c/h3\u003e\n\u003cp\u003e首先创建一个 json 配置文件。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;id\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;deploy-repo\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;execute-command\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;/path/to/deploy.sh\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;response-message\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Executing deploy script\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nt\"\u003e\u0026#34;trigger-rule\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"nt\"\u003e\u0026#34;and\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e[{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;match\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;payload-hash-sha1\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"nt\"\u003e\u0026#34;secret\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;my-secert\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"nt\"\u003e\u0026#34;parameter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nt\"\u003e\u0026#34;source\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;header\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;X-Hub-Signature\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e},\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nt\"\u003e\u0026#34;match\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"nt\"\u003e\u0026#34;type\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"nt\"\u003e\u0026#34;value\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;refs/heads/master\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"nt\"\u003e\u0026#34;parameter\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nt\"\u003e\u0026#34;source\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;payload\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                        \u003cspan class=\"nt\"\u003e\u0026#34;name\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ref\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"p\"\u003e}]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"搭建 webhooks 自动部署 Github 代码至自建 Linux 服务器"},{"content":"假期的时候去了日本，行程本来就打算去镰仓江之岛，于是正好借此机会圣地巡礼了一番。\n藤泽车站内的烘培店，麻衣想买奶油包被无视的那一家。\n镰仓高校前附近的江之电。咲太在 OP 中追电车就是在这。\n七里浜车站，动画中的学校就则这附近。\n七里浜车站内，咲太在这排自动售货机前打了就跑。\n七里浜海滩。大部分的海滩场景都发生在这里。\n江之岛商店街入口处的著名铜制鸟居。咲太和学妹约会地。\n江岛神社鸟居。\n江之岛桥下的海滩，学妹在这里交到了新朋友。现实中桥上并没有通往海滩的楼梯，所以想下桥需要一直往回走到桥头。\n江之岛上的远望平台，学妹篇最后的场景就发生在这里。\n往江之岛的路上，路边的翔子海报。\n江之岛地区的很多自动贩卖机上都有麻衣的广告。\n镰仓高校前的铁路交口。《灌篮高手》OP 中的著名场景取景地。\n","permalink":"https://seewang.me/zh/qing-chun-zhu-tou-shao-nian-bu-hui-meng-jian-tu-nv-lang-xue-jie-sheng-di-xun-li/","summary":"\u003cp\u003e假期的时候去了日本，行程本来就打算去镰仓江之岛，于是正好借此机会圣地巡礼了一番。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/images/bunny-girl-senpai/fujisawa-bakery.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e藤泽车站内的烘培店，麻衣想买奶油包被无视的那一家。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/images/bunny-girl-senpai/enoden.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e镰仓高校前附近的江之电。咲太在 OP 中追电车就是在这。\u003c/p\u003e","title":"《青春猪头少年不会梦见兔女郎学姐》圣地巡礼"},{"content":"Service worker 是一个在后台运行的脚本，主要用于浏览器和服务器之间的网络交互，从而实现一些新功能。而 Workbox 则是 Google 基于这项功能开发的一个库，使一些常用的功能做到了开箱即用。这两天研究了一番之后用他们给博客加上了缓存功能，于是写个文记录一番。\n首先，在页面的脚本里注册 serivce worker。\n//scripts.js if (\u0026#39;serviceWorker\u0026#39; in navigator) { window.addEventListener(\u0026#39;load\u0026#39;, function () { navigator.serviceWorker.register(\u0026#39;/sw.js\u0026#39;); }); } 由于 service worker 存在作用域，所以需要放在网站的根目录下。这里我用了 Nginx 的 alias 把 https://seewang.me/sw.js 解析回了 WordPress的主题文件夹下方便管理。\n#nginx配置文件 location = /sw.js { alias /path/to/wordpress/wp-content/themes/twentyfifteenone/js/sw.js; } 而在 sw.js 中就是 service worker的脚本内容了。首先从 CDN 引用 Wordbox，也可以下载下来从本地加载。\n//sw.js importScripts(\u0026#39;https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js\u0026#39;) 然后就是缓存逻辑\n//sw.js workbox.routing.registerRoute( /\\/(en|zh)\\/.+/, workbox.strategies.staleWhileRevalidate({ cacheName: \u0026#39;page-cache\u0026#39;, plugins: [new workbox.expiration.Plugin({ maxEntries: 200 })] }) ) workbox.routing.registerRoute函数里第一个参数为匹配资源的正则表达式，这里我匹配了除了主页以外的所有页面。而第二个参数则是缓存策略，这里的staleWhileRevalidate的策略是当需要请求资源时，有缓存则使用缓存，但同时异步请求资源并更新缓存，这样用户下次访问，就能看到最新的页面了。这样既能提高速度，又能保证资源更新。此外也有其他策略来满足不同场景\n部署之后测试一下\n使用前：\n使用后：\n","permalink":"https://seewang.me/zh/shi-yong-service-worker-he-worbox-huan-cun-ye-mian/","summary":"\u003cp\u003eService worker 是一个在后台运行的脚本，主要用于浏览器和服务器之间的网络交互，从而实现一些新功能。而 Workbox 则是 Google 基于这项功能开发的一个库，使一些常用的功能做到了开箱即用。这两天研究了一番之后用他们给博客加上了缓存功能，于是写个文记录一番。\u003c/p\u003e","title":"使用 service worker 和 Workbox 缓存页面"},{"content":"最近的正好腾讯云硬盘故障事件闹得沸沸扬扬，提醒了大家备份的重要性。借此机会，介绍一下本站的备份方案。\n本来在 WordPress 上备份数据库还是挺简单的，直接搜一搜插件就好了，但是我数据库里还有其他服务的表（并不推荐这么做。。。），因此选择了定时任务来进行这个操作\n环境 我的服务器环境如下，不同的环境可能细节会有不用，但大致思路是一样的：\nUbuntu 16.04 LTS x64 MySQL 5.7 为了简便，下文的命令默认具有管理员权限而省略 sudo\n备份数据库 在命令行中输入\ncrontab -e 然后在打开的文件末尾加入\n1 2 * * * mysqldump -u username -pPassword --all-databases \u0026gt; /path/to/$(date -I).sql 其中1 2 * * *表示在每天的2点01分执行之后的命令，而之后就是备份数据库的命令了。需要注意的是-p参数和之后的密码之间没有空格，而在输出的文件名中调用了date命令，从而可以在指定目录下得到以当前日期命名的文件。\n上传至 Google Drive 只有本地备份其实意义并不大，万一服务器一起挂了，备份也会跟着一起凉，因此需要上传至 Google Drive 从而实现多地备份。首先需要下载 Google Drive 的命令行工具\nhttps://github.com/prasmussen/gdrive\n在 Readme 中找到对应的地址下载就好了，以我的64位 Linux 为例\nwget https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA\u0026amp;export=download 移动下载好的文件到 /usr/bin/ 目录下并重命名为gdrive\nmv uc\\?id\\=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA /usr/bin/gdrive 给文件添加执行权限\nchmod +X /usr/bin/gdrive 用命令行登录 Google Drive\ngdrive about 程序会生成一段 URL 并要求输入一段验证码，把URL粘贴到浏览器中，在打开的页面登录 Google Drive 并把返回的验证码粘贴回命令行就可以了。\n在 Google Drive 中新建一个文件夹（比如 backups）用来存放备份文件，虽然命令行也能实现，但直接在网页中操作就好了。\n获取刚才新建的文件夹的Id，并复制下来。\ngdrive list Id Name Type ... 1_RcQkQzO4mn8NMjtkEOCqHIOd6QAMRou backups dir ... 然后再使用crontab -e命令，添加下面的定时任务，crontab的时间需要设置在备份的时间之后，并且路径要和备份存放的路径相同。\n11 2 * * * gdrive upload -r \u0026#34;/path/to/$(date -I).sql\u0026#34; -p 1_RcQkQzO4mn8NMjtkEOCqHIOd6QAMRou 保存退出就可以了\n总结 写了这么多其实一共只有两条命令\n通过 mysqldump 每天定时备份数据库 通过 prasmussen/gdrive 每天定时上传备份文件至 Google Drive 自动备份便大功告成了。\n这个方法的不足之处是每天都会上传一份新的文件到云盘之中，如果备份文件很大的话很快就会把云盘填满。\n目前我还是采用的手动删除，但如果你的数据更新不频繁（比如博客）的话，可以考虑调整备份频率来节省空间。\n","permalink":"https://seewang.me/zh/zi-dong-bei-fen-shu-ju-ku-zhi-google-drive/","summary":"\u003cp\u003e最近的正好腾讯云硬盘故障事件闹得沸沸扬扬，提醒了大家备份的重要性。借此机会，介绍一下本站的备份方案。\u003c/p\u003e\n\u003cp\u003e本来在 WordPress 上备份数据库还是挺简单的，直接搜一搜插件就好了，但是我数据库里还有其他服务的表（并不推荐这么做。。。），因此选择了定时任务来进行这个操作\u003c/p\u003e","title":"自动备份数据库至 Google Drive"},{"content":"因为 Larvel 开发方便， API 简洁，一直是我的主力 Web 开发框架。但其实 Laravel 的性能也就一般般，所以在布置 Laravel 应用到生产环境时，用下面这些优化技巧（大概）可以提升性能。这里以 Laravel 5.5+ (PHP \u0026gt;= 7.0.0) 为例，而 PHP7 以下还是直接升级 PHP 吧，效果会好很多。\n禁用未使用的服务 Laravel 本身提供了许多服务，但实际上大部分应用并不会全部用到。在 config/app.php. 的 providers 里，注释掉那些没有用到服务，它们就不会再被加载，从而提高速度了。\n缓存配置文件 用下面的 Artisan 命令可以缓存 config 文件夹里所有配置位置到缓存文件夹，减少运行时读取的文件数量。\nphp artisan config:cache 而当更新了配置文件的时候，要删除缓存才会生效。\nphp artisan config:clear 需要注意的是，当缓存了配置文件之后 env() 函数只会返回空值，所以要想使用缓存配置文件，要保证只在 config 文件夹下的配置文件中调用 env()，而在其他地方则用 config() 来获取配置信息。\n缓存路由 如果没有缓存路由，在应用的每个生命周期 Laravel 都要重新注册路由，而缓存路由则省去了这一步骤，因而大幅提高性能。\nphp artisan route:cache 同理，每次更新路由需要删除再重新缓存\nphp artisan route:clear 缓存路由并不支持匿名函数，需要在使用前把所有的匿名函数改为控制器函数的形式\n更改 Session Driver 和 Cache Driver 默认情况下， Laravel 的 Session Driver 和 Cache Driver 都是文件（file），如果你用了 Memcached 或者 Redis，可以改成相应的 Driver， 毕竟从内存中加载数据比读文件快多了。默认情况下只要改 .env的配置就可以了\nCACHE_DRIVER=redis SESSION_DRIVER=redis Composer 优化 Laravel 的 autoload 文件是由 composer 生成的，而 composer 本身也提供了优化命令\ncomposer dumpautoload --optimize 或者\ncomposer dumpautoload --classmap-authoritative PSR-0/4的命名规则下，我们只需要把文件放到指定的文件夹下，就可以用 use 关键字引用而不用像远古时期一样用 include() 引用，开发起来非常方便。但这样做的的效率却并没有直接读取指定文件 classmap 效率高。而这条命令会把 PSR-0/4 的 package 转换到类映射的格式，而无需再在文件系统中嗅探 PHP 类,从而提高加载速度。第二条命令也会进行转换，并且会使 autoloader 只从类映射中加载。\n参考文章：\n十个 Laravel 5 程序优化技巧，原文还有一些最佳实践和PHP相关的优化，感兴趣的话可以看一下。\nSimply Boost Laravel Performance In Production\n","permalink":"https://seewang.me/zh/laravel-56-you-hua/","summary":"\u003cp\u003e因为 Larvel 开发方便， API 简洁，一直是我的主力 Web 开发框架。但其实 Laravel 的性能也就一般般，所以在布置 Laravel 应用到生产环境时，用下面这些优化技巧（大概）可以提升性能。这里以 Laravel 5.5+ (PHP \u0026gt;= 7.0.0) 为例，而 PHP7 以下还是直接升级 PHP 吧，效果会好很多。\u003c/p\u003e","title":"Laravel 5.6 生产环境优化"},{"content":"最近遇到一个需要使用 SVG 并兼容 IE11 的场景，发现在 Chrome 下表现正常的代码在 IE 中却无法缩放，四处搜索一番最终发现了这个利用 position 和 padding 的解决方案。虽然需要根据每个SVG调整 padding 的数值，但好处是纯 CSS 实现，并且在 img 或 object 标签引用或直接内嵌 svg 代码的情况下都能使用，恰好符合我的需要。\n.svg-conatainer { display: inline-block; position: relative; width: 100%; padding-bottom: 100%; /*需要根据 SVG 的比例调整*/ vertical-align: middle; /* 也可以根据需要改成 top 或 bottom */ } svg { display: block; position: absolute; top: 0; left: 0; width: 100%; /* 只有在使用 img 标签引用的时候才需要 */ } 然后需要在 svg 标签中删除 width 和 height，加入 preserveAspectRatio 并确保有 viewBox 属性：\nsvg id=\u0026#34;IE\u0026#34; preserveAspectRatio=\u0026#34;xMinYMin meet\u0026#34; viewBox=\u0026#34;0 0 222.64 218.79\u0026#34;\u0026gt; 最终效果如下：\n","permalink":"https://seewang.me/zh/zai-xiang-ying-shi-bu-ju-zhong-qian-ru-svg/","summary":"\u003cp\u003e最近遇到一个需要使用 SVG 并兼容 IE11 的场景，发现在 Chrome 下表现正常的代码在 IE 中却无法缩放，四处搜索一番最终发现了这个利用 position 和 padding 的解决方案。虽然需要根据每个SVG调整 padding 的数值，但好处是纯 CSS 实现，并且在 img 或 object 标签引用或直接内嵌 svg 代码的情况下都能使用，恰好符合我的需要。\u003c/p\u003e","title":"在响应式布局中嵌入 SVG"},{"content":"搭独立博客似乎就是一个不断折腾的过程，那我就来聊聊折腾的结果，以供参考。\n服务器 网站的服务器用的是 DigitalOcean 乞丐版，目前是5刀一个月，1GB 内存，25GB 硬盘。刚开始搭博客的时候，5刀一个月的plan还只有 512MB 内存，经常会出现程序因为内存不足被杀掉的惨剧。最近DigitalOcean升级了配置到 1GB，就好了很多。\n服务器的系统 Ubuntu 16.04 LTS, 除了跑这个博客，还被用来跑一些杂七杂八的东西，比如翻墙和离线下番，提高了许多生活舒适度。\n软件 软件方面就很普通的选择了 LNMP，而平台则是用的 WordPress。其实之前也考虑过 Hexo 和 Jekyll 之类的静态博客，但这些平台上似乎并没有很好的多语言解决方案，只得放弃。\n主题则是简单地在官方的 Twentyfifteen 基础上略微修改, 加了一些自己想要的功能：\nHighlight.js代码高亮 剧透段落折叠 Algolia 搜索页 Medium 式的图片放大 具体可以看 GitHub仓库。\nWordPress 插件 选择 WordPress 的一大好处就是插件众多，非常方便，我用到的插件有这些：\nAkismet Anti-Spam\n反垃圾评论，从这个博客基本没有评论的结果来看，就知道它很好用 Cloudflare\n可以直接在后台进行一些 Cloudflare 的操作 Insert Headers and Footers\n用来加 Google 统计脚本 Jetpack by WordPress.com\n虽然提供了很多功能，但我真正用到的其实只有 Markdown 写作功能。 Polylang\n多语言支持，选择 WordPress 的重要原因，WPML 免费版 WP Super Cache\n缓存页面，可以提高博客速度 图床 图片上传可以算是 WordPress 的一大痛点，我在工作中经常不得不用已经深受其害，个人博客自然不想再用，所以外链图床就必不可少了。之前一直用的是 Flickr，功能、速度、体验都很棒，但是被国内墙了，只好放弃。之后干脆用了 Github Pages 的功能，直接建个仓库，把图片提交到gh-pages分支，就能在项目页面的地址上引用了。\n","permalink":"https://seewang.me/zh/bo-ke-jia-gou/","summary":"\u003cp\u003e搭独立博客似乎就是一个不断折腾的过程，那我就来聊聊折腾的结果，以供参考。\u003c/p\u003e\n\u003ch3 id=\"服务器\"\u003e服务器\u003c/h3\u003e\n\u003cp\u003e网站的服务器用的是 \u003ca href=\"https://m.do.co/c/50614500d0db\"\u003eDigitalOcean\u003c/a\u003e 乞丐版，目前是5刀一个月，1GB 内存，25GB 硬盘。刚开始搭博客的时候，5刀一个月的plan还只有 512MB 内存，经常会出现程序因为内存不足被杀掉的惨剧。最近DigitalOcean升级了配置到 1GB，就好了很多。\u003c/p\u003e","title":"聊聊博客架构"},{"content":" 这是一篇很久之前有幸看的到的直播文，女主大约和我同龄，读起来异常亲切，非常喜欢而收藏至今。\n原文大概出自天涯，但地址已不可考，网上只能找到各种转载且阅读体验比较差，于是我在这发出来，希望能有更多人喜欢。\n全文三万六千字，阅读时间大约为一个半小时。\n作者：离退休老萝莉\n我的故事只讲成败，不论正邪，那些义愤填膺的人不要恼不要急，别为了一个千里之外的故事，素不相识的陌生人白白耗光满满一管怒气，伤了身体。\n本帖纪念我与蜀黍的八年，谢谢你带我走过整个懵懂且美好的青春，我今年20岁整，蜀黍26岁，我们相识的那年，我12岁，他18岁。\n为星座爱好者补充：巨蟹妹，白羊叔。\n说来有些滑稽，我从小一直在城市里长大，只有春节才去乡下爷爷家拜年，但我这辈子最害怕的事情就是一个人过马路。因为小学六年级时，我的发小也是同班同学在斑马线上被一辆车子活活碾死。当时她离我只有三四米远，手里还捧着我借给她的小灵通。\n日期：2012-12-27 14:27:10\n那次车祸以后，我便非常害怕过马路，噩梦的内容也大致相同，总是发小被撞之前的笑脸，我很想告诉她不要过马路，但她只顾笑只顾说，根本不理会我的话，她一迈步我就被吓醒。\n日期：2012-12-27 14:29:05\n我从小内向，不对别人说自己的心事，所以连父母都不知道我心底的阴影。他们离婚以后，我被判给母亲，她工作很忙，根本没时间接送我上学放学。\n日期：2012-12-27 14:30:28\n我猜没多少人相信，让我单独穿过一个车流湍急的马路，就像趟过一条满是鳄鱼的河流，头昏脑胀，六神无主，汗流浃背，一口气提到嗓子眼，吐不出来也咽不下去，总是感觉会从空气里凭空冲出一辆车，把我撞倒并拖行，我的血肉会被轮子碾成浆糊，涂抹在几十米的马路上，路人会围过来看我，说我恶心，难看，甚至有人在我的尸体旁边呕吐。\n日期：2012-12-27 14:33:15\n所以，每次我都要在路边等很久，等到有人也要过马路时才跟着走，躲在对方的一侧，即使有车过来也要先撞死他。\n日期：2012-12-27 14:36:02\n初一下学期，我十二岁，走读。从家到学校那段路，算得上复杂，有施工工地，有商业区，最恐怖的是有两条宽阔且杂乱的大马路。而且，我爸爸妈妈从来没教我骑自行车，我当时还特别相信骑自行车会弄破处丨女丨膜。\n日期：2012-12-27 14:38:06\n幸好，我有一天抱到大腿。每天早上六点，小区里都有一个男生和我一起出门，走同一个路线。他会在面馆吃一碗雪菜面，要细面条，他还要买一杯豆浆和两个包子带走。而且，他和我是一个学校的。\n日期：2012-12-27 14:42:32\n他大约十七八岁的样子，大概是高中部的学长，但从来不穿校服。每天放学我在学校门口等半小时，等到高中部放学，等到他出来，才跟在他后面走，保持二十米的距离。他走路从来不东张西望，戴着耳机，用的是当时流行的CD机。扁圆的，我觉得那东西太特么高级了。\n日期：2012-12-27 14:45:17\n他一般不会在路上逗留，偶尔会在音像店转一圈。我不敢进去，只能在外面候着，听周截棍的双杰伦。我觉得自己做到天衣无缝，不会被他发现，对此沾沾自喜。\n日期：2012-12-27 14:48:08\n有一天，他走到路口时绿灯只剩几秒，他快步跑过去，我也赶紧跟着，但我腿短又背着特别重的双肩书包，跑得太慢。他过去了，我却被晾在路中间，一下子被车子包围了。我不会告诉你们，我居然被吓哭了。\n日期：2012-12-27 14:52:34\n下班高峰期的车子太多了，就像摩托车比赛开跑了似的。我就站在马路中间哭，不敢动一下。抹掉眼泪的时候，我看见他从马路对面跑过来，把我护在身后，揪着我的书包肩带，把完全丧失智商的我带了出去。\n日期：2012-12-27 14:56:18\n他对我说的第一句话就是:“你怎么这么胆小？”\n我当时才一米五出头，他大概一米七，低头弯腰问我时就像老师责备学生一样。\n日期：2012-12-27 14:58:15\n我该怎么回答，难道说我是胆小鬼，怕和发小一样被撞死？当时我对他毫无感激之情，反而很怨恨，我觉得他是故意冲过马路，故意把我丢在马路中间。我呸！\n日期：2012-12-27 15:03:45\n我哭得快岔气了，鼻涕都流下来了，行人看着我，或是好奇或是窃笑。他就站我旁边，手足无措的样子，只会说:“好了，别哭了，你别哭了。”\n可我就是那种别人越劝我越哭得猛的货色，我觉得我好委屈啊，我爸妈离婚不爱我了，每天作业那么多，唯一的好朋友还出车祸死了，现在还被一群傻逼围观，我的命咋就那么苦呢？\n日期：2012-12-27 15:09:25\n那天我才知道，他早就发现我的跟踪，只是不晓得我那么胆小。也从那天起，他每天带我上学放学，遇到他同学时他说我是邻居家的小孩子。\n日期：2012-12-27 15:14:03\n每天早上我们在面馆吃早饭，吃完以后还是会带一杯豆浆两个包子。我问他为什么吃那么多，他却只是笑，不告诉我。后来我长大了才知道，只有恋爱中的男生才会笑得那么好看。\n日期：2012-12-27 15:20:33\n他是学校开办的复读补习班的学生，在我家那个小区租了一间房子。他第一次高考给考砸了，只达到本二线，而他的目标是华东政法大学，所以他复读一年。他女朋友是本校高二的，初恋，他说很漂亮很可爱。我当时听了有点不高兴:说漂亮我没意见，难道还能比我可爱？我连丨内丨裤都是卡通的。\n日期：2012-12-27 15:25:50\n不久后的一个礼拜五，我在学校门口等到的是两个人，一个是他，另一个是一个穿着校服的女生，显然是他女友，高中部的学姐。她的头发很长，挑染一点点颜色，左手还戴了一条红色的编织腕带，和他右手的那个一样。可恶的是，她居然有可爱的HelloKitty发卡，老大姐装什么嫩嘛！\n日期：2012-12-27 15:33:25\n我当时听了很生气，你才是小孩呢，你全家都是小孩！可我没有敢说出来，只是木楞楞地看着他们。听说高中漂亮的学姐都是会抽烟喝酒，还纹身打架的，全部是黑社会。\n日期：2012-12-27 15:38:06\n那女孩说想去美食一条街吃麻辣烫，但我不喜欢她，我说我想回家写作业。我觉得这样可以把她赶走，可是最后小蜀黍他却对我说:“今天你一个人回家吧。”\n日期：2012-12-27 15:46:12\n我就气呼呼地走了，有什么了不起的，重色轻友的魂淡！你再也不可能进入我宝贵的好朋友名单了！我越走越委屈，可看到满大街的自行车摩托车汽车，我还是心里嘘嘘的，转身跑去学校附近的美食一条街了。\n日期：2012-12-27 15:51:15\n我在一家麻辣烫摊位找到他们俩。我把大书包摆在油腻的桌上，把身后仅有的十块钱钞票拿出来，说今天我请客。\n日期：2012-12-27 16:11:48\n他们两个都笑了，说四块钱一碗，十块钱不够。我觉得不能丢人，于是硬着头皮说:“我不吃，我看你们俩吃。”小蜀黍想阻拦，但我已经把钱给老板了。\n日期：2012-12-27 16:19:15\n小蜀黍说要给我买一份，我说不要！他又对女友说俩人匀一份给我，我说我更不要！最后，他们俩在我幽怨目光的注视下各吃了一碗麻辣烫！那个学姐只吃了半碗就吃不下去了！走的时候我还恋恋不舍地看了那半碗麻辣烫，好浪费啊，我能吃几口就好了……\n日期：2012-12-27 16:22:16\n多年以后，小蜀黍和我聊到那顿麻辣烫事件，他幽怨地说……那次他本来是要和女神合吃一份麻辣烫，感情的升华在此一举，却被我彻底地破坏了。\n日期：2012-12-27 16:31:30\n学姐姓秦，简称Q吧，从那以后我就特别关注她的动向，比如看到她体育课和别的男生打羽毛球，我就会偷偷向小蜀黍告状。而且添油加醋，现在想想……我当时那嘴脸真像美剧里那种心理阴暗的有雀斑的配角。小蜀黍却不生气，可他不生气，我就生气了。我觉得他们俩不是真爱。\n日期：2012-12-27 16:41:49\n可是我潜意识里又在模仿她，她把一缕头发扎在后面，又有披着的又有辫子，那段时间特流行内发型，我回家也对着镜子扎，可是当时我头发短，扎得不伦不类，像个洗锅刷子。我还特想学她穿漂亮的松糕底凉拖，可是我只穿了一天脚趾丫就磨破皮了，还被班主任批评。\n日期：2012-12-27 17:28:39\n期末考试前两个月，毕业班每个人都必须参加晚自习，但小蜀黍不太想去。他跟班主任说他有一个被家里宠坏的低能妹，小时候差点被人拐走，他必须送我回去。他还把班主任带到校门口参观低能妹，班主任大叔问我一个人能不能回家，小蜀黍对我使眼色，我果断说不能。\n日期：2012-12-27 17:49:58\n我每天傍晚去小蜀黍那边写作业，把最讨厌的英语写完，然后回家继续写。小蜀黍的英语很厉害，各种专业术语，有一次给我看英语试卷的作文，很惊讶地说“哇，你都会用虚拟语气了啊？”\n我虽然听不懂他在说什么，但感觉很厉害的样子。\n不过，他夸奖的那个句子被老师划了一个大大的叉，还说这是低级错误，我又跑去质问小蜀黍，小蜀黍说，等你长大就明白了。\n日期：2012-12-27 17:58:35\n再回到学姐Q那边。他很喜欢Q，我写作业时他就在旁边给Q写情书。我偷看过几次，非常肉麻，恶心得要命，什么“没有你的世界，我一无所有，有你的世界，我无所不有”。我还偷看了Q给他的回信，内容同样恶心，什么“我迷恋你的暖”。\n“暖”特么是个什么玩意儿？是一件大棉袄吗？！\n日期：2012-12-27 18:22:47\n那年高考貌似是在六月份，小蜀黍的考场在离我家很远的一个技校里面，而我们初中因为考场问题，全部放假。那天一大早，我在家看电视，新闻里满是高考的消息，我就特别想小蜀黍，很想见到他。于是我穿了新买的小裙子，拎了一个水壶和一袋小桔子就出门了，我一路走一边吃桔子，一直走到技校外面。\n日期：2012-12-27 18:30:27\n幸好高考期间交通管制得很严，一路都是交警指挥，对于步行的人而言交通状况真是非常棒。我在技校外面的一家小超市里买冷饮吃，非常巧地看见Q，我一时心虚没敢让她看见，感觉自己就是来偷汉子似的。到了快中午时她的小灵通，显然是小蜀黍打来的，她跑出去时我就在后面跟着，最后看见小蜀黍一出校门就抱了她一下，很开心的样子。\n日期：2012-12-27 18:32:22\n因为旁边有学生和家长，他们只是抱了一下就放开了，可是这一抱快把我伤心死了！小蜀黍你在高考啊，你怎么可以做出这样影响学习的事情？还有那个Q，你就是一个狐狸精，你存心害他，难道你想让他再复读一年吗？\n魂淡！\n日期：2012-12-27 18:51:26\n高考期间我再也没有去找小蜀黍，他也没工夫搭理我，就算有工夫，他也要搭理Q。高考结束以后，他终于出现了，春风得意，显然考得相当不错。\n不过当时才初一的我对高考什么的无感，我和他打冷战，我希望他意识到自己的错误，虽然我自己也说不清他错在那里。可惜，他根本没察觉我在生气，只是每天傍晚来接我放学。\n以前都是我等他，高考之后，终于是他等我了。\n日期：2012-12-27 18:56:28\n没过几天，学校里基本没高考生什么事情了，他把小区里那间房子退掉，整理东西准备回家。我当时还在生气，根本没意识到他要撤了，直到最后一天他在小区花园旁边说：“努努啊，以后我顶多再来填一次志愿，就不再回来了，可能以后再也见不到了。”\n不知道为什么，他最后一个字刚说完，我就哇地一声哭了，我甚至怀疑自己有没有听清楚他在说什么。\n日期：2012-12-27 19:13:59\n说实话，粑粑麻麻离婚以后，各自成家，虽然麻麻还是我的亲麻麻，但我感觉自己像是一个寄居在亲戚家的孩子。我觉得他比我粑粑更亲近，他长得不算帅，但笑起来特别温暖，每次过马路时我都特别特别希望他牵我的手，可是他没有，我也不敢。\n现在他要走了。\n日期：2012-12-27 19:22:08\n他离开以后我每天都很失落，一个人上学放学，一个人吃饭，经常迟到。过马路时还是很紧张，还是把别人挡在我前面，特别是那个绿灯不到十秒的宽阔路口，我恨死它了。\n班主任老师开班会时说有些同学不学好，玩早恋，我就一下子脸红了，赶紧把手伸进书包里看我那本带锁的日记本还在不在。\n暑假时我爸爸来接我，说要带我去杭州玩，我说我不去，我没告诉他们，我是在等小蜀黍，我怕他来报志愿时找我而我不在家。\n可惜，他一直没有来。\n日期：2012-12-27 19:35:03\n初二开学后，我还沉浸在对小蜀黍的思念里，但另一个人却不是这样。Q到了高三，成为最大的学姐，没有小蜀黍的存在，她的空闲时间多了。她在学校门口的奶茶店和男生打情骂俏，她在篮球场给别的男生抱外套，她还和追求她的男生在学校操场散步。\n有时她会和我说话，问我现在一个人回家还习惯不习惯，可那不是善意的，她显然是在调侃我戏弄我。\n我很想向她要小蜀黍的联系方式，可是我不好意思，于是我加了她的QQ，在她空间数百个留言里一一挑选，一个个地加，一个个地问，大半个月以后终于有人回复我：“hi，努努。”\n日期：2012-12-27 20:15:12\n接受好友请求并打开对话框　我激动得肝儿都颤了　就像苦大仇深的农家少女抱住拍马赶来的英雄　他只说了一句“努努？”\n我立马点开视频　他接受……然后我坐在电脑前面对着嚎啕大哭，虽然他那边没有摄像头。\n我就是这么擅长无实物表演。\n日期：2012-12-27 20:17:25\n我哭了好一会儿，直到他那边打字过来说：“好了好了，别哭了。”\n我记得当初他在斑马线的尽头对我说的第二句也是这个。\n我才不会管他，我要把他那半年逆流成河的悲伤全部哭出来，直到他接下来说了一句“我室友也在看着呢。”\n日期：2012-12-27 20:30:58\n我要了电话号码，抱着座机给他打长途，他没有去华东政法，而是被南京大学录取。他很不喜欢复读的那段日子，对于他而言，那是一段毫无意义的生命。我听了有些难过，难道我对他也是毫无意义的么？\n为了报复他这种不负责任的言论，我告诉他说，Q不守妇道，在学校里和其他男生走得近，还把具体的种种行为陈述出来。其实那些事情在现在看来都是小事，无非是大家处得好，一起跑步一起玩而已，但一旦被讲述出来，就是另一种意味了。\n有一部欧洲电影叫《赎罪》，我当时就有点像那个不懂事的小女孩。\n日期：2012-12-27 20:37:32\n小蜀黍一直听我告状，一言不发，最后他倒是没什么，我却又把自己说哭了。一方面我觉得小蜀黍好可怜啊，作为女主角我好心疼他啊，另一方面我突然意识到疏不间亲，万一小蜀黍觉得Q比我重要，到时候他会更加疏远我。\n更可怕的是，万一Q知道我说她坏话，说不定会喊人来打我。\n我觉得我太可怜了，那么善良那么深情，却可能像苦情剧里的女主角一样好心没好报。\n日期：2012-12-27 20:44:04\n小蜀黍却避开Q的话题，和我聊生活啊学习啊以及南京城里好玩的事情，最后我还要和他交换地址，要互相通信。写信，现在看来多文艺的事情啊……\n礼拜一上学的时候，我看见Q就吓得直躲，生怕小蜀黍出卖我，Q真的会找男生来揍我。幸好，Q好像什么都不知道，手上还戴着那条腕带，还和男生们嘻嘻哈哈。\n这让我更愤怒了———居然戴着小蜀黍的定情信物出轨！\n日期：2012-12-27 20:57:55\n小蜀黍和Q分手是在圣诞节前。他们狠狠地吵了一架，然后小蜀黍冷静下来觉得自己过分了，晚上和我打电话时问我关于Q的事情。我不但没有劝和，反而火上浇油，说她圣诞节收了男生的礼物，还有一大瓶五角星———这事是真的，但Q没告诉小蜀黍。\n于是他们俩再也不可能和好了。\n日期：2012-12-27 21:09:14\n本来我对Q是有愧疚的，但离开小蜀黍以后的Q越来越放浪，特别是她夏天穿了一件特别薄的衬衫，走路时故意昂首挺胸，我就一下子原谅自己了。当时我差不多刚开始发育，觉得女孩子那样走路简直太难看了，我不喜欢一个人就是这样一个不喜欢法。\n不过小蜀黍因为失败的初恋而备受打击，后来再也没联系Q，我觉得这是一个好现象，直到有一天我问他有没有喜欢哪个女生，他说有，叫吉安娜。\n吉，安，娜！\n我愤怒了，好歹Q比我认识小蜀黍更早，你吉安娜是什么玩意儿？\n日期：2012-12-27 21:15:28\n不过蜀黍这次去的是大城市，他在那里看中的女孩肯定比Q优秀许多，连名字都那么梦幻。一般名字起英文名的，她父母的文化水平都不会低，思想也比较领先，而这样的家庭通常都很富裕。这样的女孩又漂亮又有气质又见过世面，岂是我这种小城市土鳖能够匹敌的？\n那段时间我特别自卑，我做得最多的事情就是翻英汉字典，翻最后面的欧美人名，我偷偷地为自己起了一个洋气的英文名字：伊莎贝拉。\n日期：2012-12-27 21:22:26\n几年前说我肚子疼 来例假了 他说我太早熟了 直到我说我十六岁了他才吓一跳 直说时间过得太快 当时我觉得他像粑粑~一直把我当小孩子\n日期：2012-12-27 21:29:48\n继续播。\n我告诉蜀黍说，以后不要叫我努努了，叫我伊莎贝拉，蜀黍说：“啊？什么傻逼啦？”\n我顿时气得直跳脚，我辛辛苦苦那么久选出来的好名字怎么就被他糟蹋了？！\n魂淡！\n那段时间里，吉安娜三个字成为我心目中白富美的象征，我改了一个英文名叫rose，因为泰坦尼克的主角就叫这个。\n我生怕别人不知道，无论在那里写自己的名字，后面都要带一个小小的rose，现在想到自己曾经这样干，恨不得一头撞死。\n日期：2012-12-27 21:43:27\n我吃吉安娜的醋整整吃了一个学期，吃了整整一个学期，吃了一个整整的学期。\n终于有一天，小蜀黍终于告诉我，吉安娜不过是一个网络游戏里的虚拟人物，他失恋以后当了一段时间的宅男，整天玩游戏。我问他有没有女朋友，他就随口说出那个名字，以后就对我胡扯和吉安娜交往，这事儿成为他们寝室的一个笑料。\n我当时就震惊了，我这段时间一把辛酸泪竟然是这个结局？不知道怎么的，我一下子非常恼火，尖叫着把电话挂了。\n日期：2012-12-27 21:47:50\n当时中学已经有人跑出去上网打游戏，政教处老是开会批判那些坏学生，老师们把网游说得非常可怕“一碰就上瘾，一上瘾就花钱，一花钱就犯罪，一犯罪就枪毙”\n于是我对网游的印象非常差。\n每次我弹小蜀黍窗口，小蜀黍都会很生气，叫我不要烦他。可我就是要烦他，我继续抖当时很新鲜的抖窗口，然后他就咆哮了：“你再烦我我就隐身啦！”\n我觉得小蜀黍误入歧途了，我要挽救他。\n日期：2012-12-27 22:01:34\n我小时候特别不喜欢爸爸妈妈打牌打麻将，他们一上牌桌就像变了一个人，我说我想吃苹果，他们说自己拿了啃，我说我要削皮，他们说别削了，再烦就削你。\n小蜀黍沉迷网游，竟然为这事吼我，我就觉得特难过，感觉就像我爸爸在牌桌上吼我一样。\n日期：2012-12-27 22:16:31\n蜀黍那段时间迷恋魔兽，玩得很疯，包夜地玩，而我每次遇到什么少年网吧猝死之类的新闻，都会不辞辛劳地保存下来，然后打电话读给他听。\n终于有一天，他说不玩网游了，我以为自己终于成功地影响到蜀黍了，哪知道他说：他新交了一个女朋友，女朋友不喜欢他玩网游。\n我的心一下子就哇凉哇凉的，原来我对于蜀黍而言还是抵不过一个新认识的女朋友。\n日期：2012-12-27 22:38:36\n那个时候吧，我对男女之间的交往略懂了一些东西，身边的一些同学也开始恋爱了，还有人给我写小纸条，给我送小礼物，其中一个长得不错又学习挺好的男生深得我心。\n有一天他说要送我回去，我刚好在生蜀黍交女朋友那事的气，就答应了，说不定可以出现第二个人挤掉蜀黍在我心目中的位置。\n可是，那个小男生走到半途就不规矩了，硬是要拉我的手，我就很生气地甩开，扭头跑掉了。走着走着，我又开始想蜀黍，想他把我护在身后的样子，想他给我拎书包的样子，想他把手插在兜里，那个臂弯刚好像一个扶手的样子。\n日期：2012-12-27 22:48:27\n说实话，自从认识蜀黍以后，我再也没有梦到那个发小，倒是经常梦到我伸手抓住蜀黍臂弯的情景。那个臂弯非常有诱惑力，像是一个装满糖果的罐子，如果能把手伸进去，就像小时候揪着爸爸的胳膊一样，那该多幸福呀。\n我回家以后给蜀黍打电话，把小男生追求我的事情告诉他，一方面炫耀我也是美女了，另一方面是希望他会吃醋。他听了以后说：“一帮小屁孩，这么早谈恋爱干什么？第一次约会就动手动脚，以后还得了？”\n我像听了圣旨一样去告诉小男生：“我叔叔不许我和你在一起。”\n小男生吓得半死，从此以后整个初中都没人追我，因为我会告诉我叔叔。叔叔在孩子们眼里，比爸爸年轻，更爱揍人。\n日期：2012-12-27 23:08:35\n蜀黍的新女盆友Z是一个幼教专业的，也就是说，以后会是幼儿园老师。LZ当时最喜欢的女人不是我麻麻，而是幼儿园的陆老师，我小时候在幼儿园最会卖萌，连大班了去屙粑都要陆老师陪着，我一边拉，一边和她说话。\n说实话，我一开始对Z的印象还是不错的，直到有一天我看到Z的照片，一下子暴怒了。长头发，单眼皮，上嘴唇翘翘的，还有挺好看的卧蚕，这特么不就是照着Q的模样来找的么？\n再然后，我看到她在留言板里喊小蜀黍“老公”，我更加暴怒了！鹿死谁手尚是未定之事，岂容你抢先一步喊老公？\n日期：2012-12-28 09:11:46\n我在Z的空间里偷看她的照片，里面有好多可爱的东西，比如DIY手工艺品，还有在小黑板上的粉笔字作业，很娟秀。比如“春眠不觉晓，处处闻啼鸟，夜来风雨声，花落张X宁”。每首五言绝句都是这样的格式，张X宁是她的名字。我觉得“花落张X宁”的写法特梦幻，于是我也开始练习，开始偷偷学十字绣，但总是不伦不类。不愧是陆老师的同行。\n日期：2012-12-28 09:17:15\n有一天我给蜀黍打电话，旁边有女孩在说话，问他是谁的电话。蜀黍说是努努，那女孩就特高兴地说“给我接给我接”，然后就听见一个甜甜的声音说“喂？”\n喂你个头啊，我吓得差点挂电话好吗？我每天见你空间偷看一百次，你都不来回访我一次，跑堂狗！现在谁和你熟啊？\n日期：2012-12-28 09:23:45\nZ喂了好几下，我只感觉自己嘴巴直哆嗦，最后莫名其妙蹦出一句“阿姨好”。沉默好几秒……然后Z老师的热情降下去了，说“你好”。寒暄几句以后她就把电话给蜀黍，蜀黍又和我热聊好一会儿才挂了。我觉得我喊她阿姨是给她面子的，至少我暂时承认她和蜀黍是一对，难道这不是婆家人最大的恩赐么？\n日期：2012-12-28 09:40:20\n我觉得我有一个特别强大的技能，总是可以在极短的时间里让我不喜欢的人感受我的敌意，但这个技能的副作用也很可怕:我总是需要花很长的时间才能让我喜欢的人感受到我的善意。蜀黍郁闷地跟我说，“阿姨”这个称呼让Z有些不高兴，我也不乐意地辩解道:“她以后一辈子都要被人喊阿姨呢！”蜀黍说你又不是小孩子，我说难道我老了吗？我叫你蜀黍你就没生气！难道要我喊你蜀黍喊她姐姐，你们俩乱伦呐？！多年后，蜀黍质问这件事，我说“你和别人乱伦不可以，和我可以。”\n日期：2012-12-28 10:03:24\n那是未成年的撸主，撸主现在长大了，有自己的理想和想法，会温柔懂包容，用一句深奥的话讲:“我已经不是当年的我了”\n日期：2012-12-28 10:26:21\nZ最大的贡献是把蜀黍从网游的迷雾中拽出来，但她最大的缺点就是把蜀黍拖进经济泥潭里。她家算是比较阔绰的，撸主在用麻麻淘汰的老摩托V8,她已经开始用当时好流弊的侧滑手机……蜀黍经常给她买礼物，请吃饭，居然还有西餐！而我那么好养，一杯奶茶就给打发了！每个月总有那么一段时间，蜀黍说他在次泡面。钱呢？攒着陪Z去玩。Z其实花不了蜀黍多少钱，但是……美苏的军备竞赛中美国也没花苏联多少钱啊。\n日期：2012-12-28 10:44:12\n我每个月的生活费还算可以，麻麻和粑粑各给三百，我就想借钱给蜀黍，不让他饿着。可是蜀黍不愿意，我一提出来就被他拒绝了，而且不肯告诉我卡号。后来我想了一个好方法，把钱塞进信封寄去他宿舍，很开心地等他收到信的惊喜。可是，等了一个礼拜，我问他有没有收到信，蜀黍却说没有。我当时就哭了，那是我省吃俭用的四百块钱。蜀黍也急了，跑去学校传达室找信，可是最后什么都没找到，他说传达室仓库里堆了前后大半年积压着的信。\n日期：2012-12-28 10:58:26\n我难受得一整天都不想次饭，不是心疼那四百块钱，而是感觉自己期待落空了。到了第二天晚上，蜀黍说他找到那封信了，里面四百块钱还在。我就脑抽了一下，问他是不是联号的，他说是的，崭新的四张大票子。我哭得更厉害了，因为我给他寄的是三张红的和两张五十。但我没告诉他。\n日期：2012-12-28 11:09:46\n寒假时蜀黍回来了，还给我带了礼物，一大包董糖和一台文曲星电子词典。他比补习班时帅气，衣裳很得体，不像高中时那样拖沓。我站在他面前还是像一个小孩子，我一调皮时他就在我脑门上“嘟”一下，有点疼，可是好幸福呀！他想把那四百块钱给我，我不想要，他说我不要的话以后就不和我联系了，我只得收了下来。他只陪我一会儿就参加同学聚会去了，我也想去，但他说只能带女朋友去。\n日期：2012-12-28 11:45:07\n不要吵架嘛，喜欢撸主的肯定是好人，说撸主坏的也一定很善良……口是，如果撸主喜欢那么多年的蜀黍真的跟别人跑了，你们难道不嚼得撸主很可怜么？撸主还要念一遍英文版的佛语:“follow your heart”\n日期：2012-12-28 11:59:34\n我没能跟蜀黍去得了他的同学聚会，但他的话被我记下了，于是能和他去参加同学聚会成为我的一个梦想。那天我在家玩了一天的文曲星，用它做英语寒假作业，我觉得我一下子高端了，写一会儿作业就乐得在床上打滚。跨年的时候，蜀黍给我发了一条短信“宝贝又长大一岁啦”\n我开心死了 回短信说谢谢蜀黍！蜀黍新年快乐！可是蜀黍说“晕，发错了”\n然后又补了一个信息“努努新年快乐”一下子冷场了好么！我靠！\n日期：2012-12-28 12:42:22\n我初三时蜀黍已经大二了，尽管相隔的年级还是那么多，但我总有一种错觉，觉得自己离蜀黍越来越近，仿佛我一直在长大，而蜀黍还是那个十八岁的骚年。我平时学习吊儿郎当，但中考前每天晚上对着课本试卷撸到十二点，因为考取重点高中才有希望考取好的大学，当然，好的大学一定在南京。后来，我发现我错了。因为我赶不上蜀黍的步伐，时间大神给我加一岁时也给蜀黍加一岁。我考取大学时蜀黍已经毕业离开南京。\n日期：2012-12-28 13:01:16\n中考以后，我立马以高中女生自居，连读初二的表妹来找我玩时我都说她幼稚，表妹很委屈地说“你变了，你以前不是酱紫的”看她的台词就知道她有多幼稚了，我以前就是这个德性。我最开心的就是暑假蜀黍又要回来了，但蜀黍在扣扣上告诉我一个噩耗:他暑假在南京打工，不回来了！一个没有暑假作业的暑假难道只能这样度过么？我等了一学期却不能见到蜀黍？在家苦逼地生了一个礼拜闷气，我麻麻又老是气我，特别是中考成绩出来后老是遗憾我没有考取全市最好的那所国家级重点。拜托啊，以我平时那破成绩，没去倒数第一的那家就不错了。何况，我被排名第二的高中录取了，也是国家级重点。我对麻麻说，我要去南京舅外公家玩，麻麻不同意，经过一番斗争，麻麻终于同意了。\n日期：2012-12-28 13:16:35\n那是我第一次乘坐火车，印象里的火车应该还是黄飞鸿电影里的那种，呜呜咔嚓咔嚓咔嚓呜呜屁——不过火车开动以后才发现不是咔嚓，而是库冬库冬。夏天火车里气味不太好闻，铁轨接缝处的颠簸让我直犯恶心，我忍了几个小时，好几次差点吐出来。到了南京火车站，蜀黍在出口等着，和他一起的还有Z。蜀黍看见我时愣了一下，这是他第一次看见化过小妆的我，他一发愣，Z就伸手帮我把背包拎过去了。那一刻，我很喜欢Z。\n日期：2012-12-28 14:11:27\n抱歉，刚才看书复习趴床上睡着了。继续。蜀黍看我的眼神让我觉得自己已经完成蜕变，不再是小孩子了，不免有些洋洋得意。不过蜀黍叫Z拿一张面纸给他，又把我揪过去对我的脸一顿狠搓，面纸上除了汗水还有一团黑黑的污垢。我这才猛然想起来，我特么是用那种大粗红铅笔描出来的眉毛！火车上一出汗，我再抹两把，顿时变成花脸。Z在旁边笑，又掏出一张湿巾给我擦干净，我可以说我当时想到我爸爸妈妈了么？那是我第一次用湿巾，以至于后来东航的灰机上空姐给我发湿巾，我就会想起温柔的Z。\n日期：2012-12-28 14:54:48\nZ是南京城的人，晚上住在家，而蜀黍住在学校宿舍。不过那天Z向家里说谎，在外面过夜。我猜他们肯定经常出来住，否则撒谎时怎么那么行云流水，什么闺蜜失恋了，想自杀。以后我也可以那样做哟！晚上他们带我去吃肯德基，又去逛了夫子庙，然后去宾馆。三人间，前台看到蜀黍带俩女孩来开房，态度极其暧昧，反复地问我有没有身份证。蜀黍说带侄女出来旅游不行么？实在不行我们换一家。后来前台没较真，让我们进去了。\n日期：2012-12-28 15:18:09\n我们准备睡觉有那么一会儿的僵持，一张大床一张小床，该怎么睡？按照排列组合，有以下三种方法。一是蜀黍和Z睡，我一个人睡；二是Z和我睡，蜀黍一个人睡；三是我和蜀黍睡，Z一个人睡。显然，我在那一瞬间把三种情况都想到了。认真地想到了。\n日期：2012-12-28 15:36:06\n最后Z和我睡大床，蜀黍一个人睡小床。可我从小就一个人睡，连我麻麻想要一次亲子侍寝都被我一句“别闹了”赶出去！当时我的想法是:Z真不懂事，明明有家还不回去，我和蜀黍每人一张床该多好！不管怎样，我们就是那样睡了，我一趴床上就睡着，白天太累了。\n日期：2012-12-28 16:36:54\n虽然我有秒睡奇功，但秒醒也不赖。半夜睡得迷迷糊糊，忽然感觉席梦思吱呀晃了一下，我立即吓醒了，脑子里飞快地思考几个问题:我是谁，我在哪里，你们是什么人？然后我就听见蜀黍被惊醒，Z就没羞没臊地凑到蜀黍的床上，蜀黍说努努在，Z说没事，睡着了。他们一提到我，我就特紧张，这是我第一次在这种场合成为话题焦点。为了第一时间把自己撇清，我特脑残地想起电影里的桥段:假装打鼾！鼾声一响，万籁俱寂。我一直假装打鼾打到我鼻子都累了，他们还是没动静，我只能渐渐收声，可是直到我真的睡着，他们还是没动静……\n日期：2012-12-28 17:05:03\n第二天大清早，我一睁眼就去看我的旁边，看见Z还睡在我身边，蜀黍也还在呼呼。我竟然有种成功拯救世界的庆幸，当英雄好累啊。不过蜀黍起床洗漱时，Z竟然穿着睡裙跑过洗手间和蜀黍抱了一会儿，你们当我瞎么？洗手间门口墙壁上那么大一面穿衣镜！不过我当时才看清Z的身材，前凸后翘的样子，真让人看了害臊，完全不符合我对美的理解，简直是一个活的反面教材。但不知道为什么，我看着自己搓衣板一样的小身材，竟然有种自卑感。\n日期：2012-12-28 17:45:03\n我去舅外公家报到，吃完午饭呆一会儿就又跑出来了。蜀黍暑假给小孩子补习功课，还在新街口那边发传单，戴熊大头，然后带我去看他们的校园，特别是图书馆。Z还是和我们一起，她不猜忌，不记仇，温柔善良，过马路时会和蜀黍一起把我护在中间。当时我真心觉得他们俩应该在一起，差点告诉她我希望她真的变成阿姨，或者把蜀黍降级为哥哥。可惜，人生不如意事十有八九，当我愿意接受蜀黍不是我的这个事实，Z突然出现状况，她劈腿了。\n日期：2012-12-28 17:53:22\nZ的专业是三年制的，只上两年多就开始实习，然后毕业，工作，而蜀黍是四年制。Z实习时有人介绍男朋友给她，她竟然默认自己是单身，跑去赴约了。她和别人看上眼，开始搞暧昧，又不舍得丢掉蜀黍，于是保持一段脚踩两条船的状态。当蜀黍发现的时候，Z和小三已经在QQ聊天记录里出现挑逗的状况，学名叫文爱。蜀黍那颗心哦，被伤成一面筛子。\n日期：2012-12-28 18:18:47\n蜀黍和Z把事情摊开的时候，Z后悔得要命，在空间里疯狂地写SORRY SORRY SORRY，希望蜀黍跟她和好，并发誓再也不犯那样的傻。蜀黍是一个心软的家伙，他抑郁好多天，还和Z吵了好多次，心里堵得慌，最后选择征求我的意见。我和Z认识，对她印象不错，依照他的设想，应该是我劝他不要计较，和Z和好吧。可是，让蜀黍伤心的女人，我会这样纵容么？于是我尽可能地将惊诧的状态夸张到极限，说:“啊？！Z给你戴绿帽子啦？！”\n日期：2012-12-28 19:14:40\n绿帽子，这个算是感情问题里的死罪，只有没出息的男人才会判缓刑。蜀黍不是笨蛋，他肯定想过这三个字，却一直在逃避。一旦我把这个罪名扣到Z头上，她就再也翻不了身，她和蜀黍再也没有然后了。她干的事其实并非十恶不赦，充其量是不懂拒绝，自以为聪明，贪婪。但她错在惹我生气了，占着我的蜀黍居然还背叛他，这是对我的辜负。Z也没和那个小三在一起，后来就没听蜀黍再提起。偶尔她会在蜀黍扣扣空间的来访记录里出现，再后来我只有接触湿巾的时候才想到她给我擦汗的一幕。至少她会是一个好老师，温柔，勤快，漂亮，小孩子都喜欢她。就像陆老师一样。\n日期：2012-12-28 20:47:11\n此后很长一段时间，蜀黍一直单身。可能男生治愈痛苦和填补空虚的良药是电脑游戏，他没有告别魔兽世界，却又有了新宠，DOTA。\n我的日子却非常难熬，用一部国产电视剧的名字概括，“当青春期遭遇更年期”。我麻麻老是找我的茬，挑我的刺，我只要有一点让她看不顺眼，她就咆哮。而我十五六岁了，已经不是那个万事问麻麻的布娃娃，她一咆哮，我就怒吼。\n我觉得我是天底下最伤心的人，我就去找蜀黍倾诉，可是蜀黍根本不高兴认真听我说话，他一边敷衍我，一边对着室友吼“中路！中路！”\n用现在的眼光看，一个需要呵护，伤春悲秋的女孩子主动找你聊聊人生，你却把菊花献给基友。这样的蜀黍，本应活该当一辈子臭屌丝。\n日期：2012-12-28 21:37:27\n每次我受了麻麻的训斥，又在经济上受到威胁，只得打电话向蜀黍宣泄坏脾气。蜀黍总是一副没脾气的样子，说：“你知道吗？主动打电话给别人发脾气很不礼貌，至少你要等别人主动打给你的时候再发脾气。”\n我认为他是在暗示我滚蛋，于是我愤怒地挂了电话，哪知道他几秒后就回电话过来，说：“好了，这下你可以自由发挥了。”\n蜀黍是在给我省话费呢！\n有一次我对蜀黍说，我想和他一起玩dota。蜀黍非常坚决地拒绝，说那会影响我的学习。我就说，难道你不怕影响学习么？几次交锋之后，谁也不让步，我已经让同学帮我下载游戏，蜀黍听说以后捧着电话就把dota从电脑删除了。\n“你上大学之前，我们谁也不玩网游。”\n后来，我混进蜀黍的大学死党群，他们说，蜀黍卸载DOTA以后真的没有再玩过，但每次总是抱着宿舍楼床的铁梯子，眼巴巴地看着别人玩。偶尔还会非常热情地指导别人，别人怂恿他一起玩，他又一边嘿嘿一边摇头，最后，大家都拒绝他在旁边观战。\n日期：2012-12-28 23:31:28\n我和麻麻的斗争逐渐达到巅峰，最激烈的时候她差点揍我，万一她真的揍我，我可能会恶毒地将最能伤害她的话说出来。比如她失败的婚姻给我带来的痛苦。\n但是，蜀黍的遭遇提前终结我不懂事的叛逆期。\n蜀黍即将大学毕业时，他的母亲突然重病，他放下手里所有的事，但他的母亲还是不幸逝世了。刚好是周末，我和我麻麻说我去爸爸那边，特意摸到蜀黍家去探望，看见他穿着白孝服，腰里扎着草绳，手里还抱着一个竹棍，跪在母亲的牌位前面。\n虽然是葬礼，但来出席的客人却一边吃饭一边说笑，蜀黍就一个人默默地跪坐在那里，也不哭也不说话。等别人喊他去吃饭，他才吃力地爬起来，我没好意思在那里喊他蜀黍，而是喊了他的名字。\n他扭头看我，然后快步走过来，问我为什么来这里，有没有吃饭。他提着竹棍，白帽子歪着，看上去有些滑稽，可不知道怎么的，我一下子就觉得心疼了。\n蜀黍没有妈妈了。\n日期：2012-12-28 23:41:34\n蜀黍叫我去吃饭，我不想去，他就拿了一点零食给我，我揣在口袋里，和他躲到旁边聊天。他家是郊区的，屋后有一条挺干净的河，河岸有一块水泥板，就像一个小码头。\n那是我第一次看见他抽烟，很成熟的样子，不像我们班那些男生一样装腔作势。他问我一些乱七八糟的问题，无非是学习啊，心情啊，然后又问我和我麻麻还闹不闹了。一提到这事，我就特来火，于是滔滔不绝地说我麻麻有多可恶，这两天又干出什么虎毒食子的事情。\n蜀黍一直默默地听着，直到我说完，他才低声说了一句：“至少你还有妈妈呀。”\n他的眼泪一下子就滚落下来，毫无预兆地。\n我这才发现自己在不恰当的时间说了不恰当的话，但我不知道怎么安慰别人，只能像犯错的傻逼孩子一样坐旁边看着。那一刻，我才明白，蜀黍不是大英雄，他也是孩子。\n日期：2012-12-29 00:18:51\n那是我人生第一次守夜，给一个从未见过我的人守夜，但那是蜀黍的妈妈，我一点都没有害怕。夜里的蚊子特别多，蜀黍的爸爸给我拿了六神驱蚊水，叫我早点休息，还让蜀黍通知我父母一声。\n夜里蜀黍又抽烟了，点烟时我把烟夺过去，放在自己嘴里，还没装模作样地抽上一口，蜀黍就一把夺了过去。我被呛得直咳嗽，从没想到抽烟那么难受，我人生第一支烟，就是这么狼狈。\n后来我们小声聊天，蜀黍说他母亲很遗憾没能看到儿子结婚，还不知道儿媳妇长什么模样，我当时就特别想问他：这个时间这个地点看到，还算不算太晚？\n日期：2012-12-29 08:54:07\n那天黎明我睡在蜀黍的房间，墙上贴着巴蒂斯图塔的海报，书架上摆了各种类型的书，清新如《小王子》，晦涩如《发动机保养与维修》，搞笑的是居然有小学语文数学课本。房间里没有空调，但我太累了，也就迷迷糊糊地睡了。后来，蜀黍来给我赶蚊子，又掖好蚊帐，弄了一台落地风扇对着我吹。我半睡半醒，感觉自己忽然回到小时候，爸爸麻麻还没钱，还住在破房子里，爸爸夏天看我房间可有蚊子，冬天看我蹬不蹬被子。第二天醒来看见蜀黍，他眼睛红通通的，满身汗味，烟草味，以及稻草的气味。我特别想说，你妈妈不在了，我会一直陪着你。可是，我又觉得这个场合不适合搞那么矫情，于是我说我要回家了。蜀黍不方便离家，他让他堂妹开一辆小QQ送我回城里。他堂妹和我都不太有交流，问了我多大，送到哪里，就再也没话讲了，直到下车我才说“谢谢”，她说“你慢走”。拜拜。几年以后，我和蜀黍的关系发生质变，他堂妹才说，她早就看出我和蜀黍不是正常的男女关系，她当时一路都在思考一个重大的问题:如果她的猜想是真的，那她以后该叫我什么，妹妹还是嫂子？\n日期：2012-12-29 10:07:13\n此后一段时间，我与蜀黍联系得相当频繁，并且自以为是地认为自己应当是目前他生命里最亲密的女子。对的，“女子”，我在日记里就是这样自称的，因为我觉得“女孩”“女生”之类的词汇已经配不上我这样一个见证过生死离别的存在了；而“女人”又不太合适，每一笔画都透出一股风尘气。只要熬过这一年，我就可以拥有新的生活了，离开唠叨的麻麻，去向往的南京城，投奔亲爱的蜀黍。我会非常非常努力地学习，我会好好和麻麻相处，包容理解感恩。高三前的暑假我们提前补课，蜀黍也在到处找工作，我觉得离他更近了，因为我们都承受着生活的压力。但有一天，我突然发现他身边又有了一个新的女友，长得不算漂亮但不知道怎么的总有一股青楼气。我说出来具体如何描述，只能说参考翁虹和钟丽緹的表演。我问蜀黍喜欢她什么，蜀黍说，那个女孩向他主动示好很久，他没有接受，她听到他母亲去世，哭了很久。所以，蜀黍喜欢她的善良。原来我错在我不够善良，我没有哭。可是蜀黍，当你不是英雄的时候，努努怎么可以不坚强？\n日期：2012-12-29 10:25:14\n那段时间我实在无法想通，蜀黍怎么就一点都无视我的存在？我有一天晚上偷偷打电话给电台的情感热线，讲述我的痛苦，可惜女主播情商太低，说我讲得不清楚，急急忙忙地说“我们接下一位听众的电话”。傻逼，我说得文艺一点提升你们节目的档次，活该你干一辈子调解老婆偷汉子之类的破事情。不过，既然蜀黍说她善良那就算她善良吧，眼泪也是一种感性的投资。我没有去争吵，因为善良的对立面是邪恶。\n日期：2012-12-29 11:06:41\n在大多数高三学生面前，大学里的学霸都名不副实。我高三时玩命地学习，其实为什么，就是偶尔夜里下晚自习时会在楼道里遇到凌晨来上早自习的同学。那段时间我和蜀黍的交往最平淡，互相不打电话，只有经过复读补习班那栋小楼时会特别想他。给我写情书发短信送礼物的男生开始多了，对于他们，我只想说:同学，我们还是为中华之崛起而读书吧。我没有去追窥蜀黍和那个女孩的交往，蜀黍说她善良，就当她善良吧。善良的对立面是邪恶，我才没那么傻，毁自己的形象。不过，情人节之前，我忍不住向蜀黍打探他的情感问题。他有些苦恼，说那个女孩（赐名M）不愿意留在江苏，非要他一起回她的老家福建，他不知道如何是好。于是，我的毒舌发作了。\n日期：2012-12-29 12:07:12\nM是独生女，家里好像开一个小厂，这样的女孩通常不往外省嫁，尤其不会往我们这里嫁。想想我们这里真够衰的，闽越人说我们是北方侉子，三省说我们是南方蛮子。我就特认真地对蜀黍说:“挺好的啊，她家有钱，又是独苗，你当上门女婿也挺好。”蜀黍没说话，我怕自己弄巧成拙，赶紧补上一刀:“赶紧挑个日子嫁过去，这年头吃软饭又不丢人。”蜀黍那么一个死要面子的家伙，受到这样的刺激当然不愉快，但我很愉快就行了呀。\n日期：2012-12-29 12:43:33\nM不久以后就和蜀黍分手了，独自返回福建当乖乖女去了，但我好像没有什么愧疚感。所谓嫁鸡随鸡，嫁狗随狗，没听说娶鸡随鸡的。我不是说她是鸡，只是一个比方而已。他们俩的分手简直太平顺了，谁也不留恋谁，这让我更加觉得这样的恋爱早死早投胎。再后来，高考，我拼了。我不追求什么本一本二，只有一个终极目标，南京。蜀黍那段时间过得不太好，收入不高，工作量很大。不过每次我打电话给他，他还是耐心地接听，有时也会三心二意，但我很满足。至少他接我电话时是在努力工作，而不是打DOTA。挂电话时，他用很励志的语调说“加油加油”，而我同样用这样语调重重地“嗯！”\n日期：2012-12-29 13:11:50\n高考在即的时候，我突然变得特别焦虑，看书看不进去，拿到试卷就烦躁，明明很认真地盯着一道题思考很久，但几分钟以后才突然意识到自己其实是在发呆。因为考了一个很难看的分数，老师特意找我谈话，他试图用激将法，可我那么聪明，对这种疗法是完全免疫的。我打电话给蜀黍，说我很害怕高考，我不想考了，我考得不好的话就去纺织厂做女工算了。没想到，蜀黍第二天下午就出现在我们宿舍楼下。他带了很多零食，还有一个摸上去很舒服的蒙奇奇布偶。“考得不好就不好嘛，差一点的学校拿奖学金还容易一点”——我的小蜀黍安慰得真是一点斗志都没有啊。\n日期：2012-12-29 13:27:34\n我问他是不是专程回来陪我高考的，他愣了一下，说，不是，是我妈妈的周年祭。我就有些郁闷，难道不能哄我一下么？不过他本来就是这样一个诚实的人，更何况这一句话涉及他母亲。他接下来一句话也让我无语凝咽:“我会请我妈妈保佑你高考顺利的。”他一点都没调侃的意思，严肃得就像新闻联播主持人。这句莫名其妙的话在接下来几天都发挥稳定军心的作用，一想到我未来婆婆会保佑我，我就什么都不怕了。我已经假设我们的婆媳关系非常和睦了。\n日期：2012-12-29 13:52:07\n原本看上去很可怕的高考很快就过去了，一门又一门，我上午坐在考场写完试卷最后十几分钟就在遐想中午的王八汤我得多喝几口，这样的心态算得上轻松了。接下来就是捧着扬子晚报的高考标准答案估分，一切都如我心意，本一是跑不掉的了。后来填报志愿，终于圆我多年心愿，清一色的南京院校，南大必然排在第一位。当我告诉蜀黍我马上就要去南京了，说不定是他的学妹！蜀黍变学长，终于不差辈不乱伦了！但蜀黍先告诉我，上海一家公司挖他过去，月薪八千起，还有各种福利。魂淡！关我屁事啊！你个魂淡！我特么伤心欲绝！太魂淡了啊！\n日期：2012-12-29 14:14:53\n蜀黍似乎很珍惜这次机会，我直得把自己的心思藏起来，没告诉他我全部填报南京，也没告诉他我只是想离他近一点。他确定去上海时，我收到南师大的录取通知书，可我一点都不高兴，就像攻占一座早已坚壁清野的空城。那一段时间，我一直生闷气，对蜀黍的态度也很恶劣，他却傻傻分不清我为什么生气。居然有一次，他忽然问:“是不是和小男生谈恋爱了啊？”\n谈你个大头鬼啊！我忽然有种被侮辱的感觉，就像一个做妻子的忽然被老公问“肚子里这孩子是谁的啊？”\n日期：2012-12-29 15:00:51\n去南师大报到的那天，我麻麻想要送我，但我坚持一个人走。还是那列火车，连发车时间都是一样。火车到了扬州地界，蜀黍打电话过来，问我到哪里了。我没好气地说，江都。然后蜀黍给我讲了他第一次坐火车经过扬州时的趣事。有一个人在火车上打电话回家，不料接电话的不是他老婆，而是一个男人。他暴怒了，确定号码没按错后和那个男人吵了很久，全车厢都轰动了，最后蜀黍提醒他，是不是没拨区号？那男人这才红着脸说:噢，对不起对不起，打错了！我听了以后顿时开心了，正在笑的时候蜀黍说:“我在玄武湖这边等你呢”\n日期：2012-12-29 16:18:14\n那段时间的南京火车站，真的是人山人海，几乎每个人都大包小包的。我就背着一个双肩书包，拖着一只行李箱，跟随人群走出火车站。我打电话给蜀黍，却一直打不通，正在发呆时不锈钢栅栏另一侧伸来一只手，我像一条过小溪的鱼一样被拎到旁边。我一转头:“诶，蜀黍哎！”蜀黍帮我拿书包，拎箱子，挡住那些拉客的老大婶，还有缺六块钱回家的可怜人。那感觉，真像我粑粑送我去上学，不过当时我是哭着被我爸爸从他的破桑塔纳里拎出来丢进幼儿园的。到了南师大校园，他帮我签到，找宿舍，领被褥，还有铺床，挂蚊帐。下午五点就赶紧离开，去坐上海的动车。寝室晚上肯定要来一番茶话会的，她们问我那个帅哥是谁，我说:“我蜀黍。”他们很惊讶:“你叔叔那么年轻？长得不像啊。”我说:“还没过门的叔呢，过门就像了。”现在想想，我真是一个没羞没臊的家伙，可是这种感觉好爽啊，噢嚯嚯嚯嚯。\n日期：2012-12-29 17:25:24\n我一直是那种不太会打扮的人，曾经试着画过几次，都很失败，后来才明白，我学着化的那种妆，最适合中小学文娱汇演。寝室里有一个苏州籍女孩倩倩，很时尚，和她比，我们几个都是小村姑。她给大家的见面礼就是帮我们化妆，然后大家一起去校园里招摇过街。我拍照片发给蜀黍，蜀黍惊诧地说“是你？”\n“怎样？”\n蜀黍说:“真好看。”那天我乐得要命，晚上睡觉不舍得洗脸，最后倩倩明天再给我画，我才去洗脸了。没过几天，我作为学妹的春天来了。\n日期：2012-12-29 18:39:24\n目前为止，在这个世界上，与我最亲近的男人就是蜀黍了。亲近到什么地步呢？举个无节操的例子。开学后有段时间龙体欠佳，偶染贵恙:便秘。我在蹲马桶时发短信告诉蜀黍，我拉不出粑粑，很痛苦，蜀黍居然打电话过来陪我唠嗑，传授我五谷轮回大法。先是抱腿弯腰，把下巴抵在膝盖上，和他说一会儿话，突然听他说“坐直了，使劲屙！”噗通！啊……对不起，正在吃饭的同学受惊了。不过你们吃完饭以后可以去试试，技多不压身的。可是，偏偏有人试图挑战蜀黍的地位，不知道一个叫L的魂淡从哪里搞到我的个人信息，知道我是单亲家庭。他塞给我一张写得满满的信纸，上面说，他很心疼我，非常想照顾我，他觉得我缺乏父爱一定很没有安全感。我回复他说，你怎么知道我没安全感，你要当我后爹怎么着？我最讨厌别人太主观地判断我的内心世界，关键是都那么自以为是，特别是那种同情的目光，就像非要在伤疤上挖一个血口子，再给我抹药证明他们的善良。他说:“一般都是那样的。”我说:“你家俩爹，你心理最健全。”那倒霉孩子就委屈地走了，但不知道他又犯什么病，第二天又回来说，他知道我在考验他，他不会放弃的。学长哎，别闹了。\n日期：2012-12-29 19:59:10\n当我装作苦逼却又暗自窃喜地告诉蜀黍，“有学长开始追我啦”，我的潜台词很明显———我不是小孩子啦！有人打我主意啦！你快点阻止我啊！\n我还把整个事件的经过包括那封信的内容告诉他，蜀黍非常认真地听着，然后不假思索地回答：挺好的，这男生挺不错的，你也喜欢的话就考虑考虑呗。\n我有些郁闷，想早点终结这个话题，就说：“我还不想谈恋爱。”\n他想了一会儿，突然说：“你长这么大是不是还没谈过恋爱？哎呀，有个东西啊，在中学生那里是罪名，在大学生这里是遗憾，那就是早恋。你现在也这么大了，也该谈恋爱了嘛，现在没有太大压力，blablablablablablablablablablablablablablabla。”\n我没有预料是这样的结果，感觉非常窝火，一生气就说：“谈就谈！”\n当L再来约我，我没有拒绝，和他一起出去吃饭。他其实长得还不错，个子甚至比蜀黍高一点，但就是没有蜀黍那么让我心动。蜀黍走路的时候有点吊儿郎当的，晃啊晃的，特别像寻秦记里的那个嫪毐。我小时候有一段时间特别模仿他走路，然后被我麻麻骂，说像个没正形的小混混。\nL是同系学生会的小干部，在他看来我似乎只是一个初来乍到的小学妹，他可以帮助我进入学生会，见识大世面。事实上，这样的话让我非常反感，我不喜欢别人向我炫耀自己的能力，如果你真有能力，我自然看得出来。何况，我不一定稀罕。\n尽管我说我不想谈恋爱，但L还是坚持可以先从朋友做起，我看他自娱自乐得那么投入，有点不忍心点破。\nL就这样和我交往了一段时间，说不清是什么关系，他总是热衷于把他的朋友介绍给我，请我去吃饭，唱歌，或者参加社团活动。他的朋友们总是用那种“兄弟有一手”的目光看着他，而他回敬的是“承让承让”的笑容，我越来越不自在了。\n再一想到蜀黍，我就觉得他简直是天下最单纯的男人，每次他把我介绍给他的朋友们，都会说“这是我们家小屁孩”，然后他的朋友就很温和地笑，毫无邪念，虽然他们都看得出来我对蜀黍的依恋。\n那就是所谓的人以类聚。\n日期：2012-12-29 20:43:31\n大一初期，我比较热衷于参加社团活动，觉得那些就像偶像剧里一样，甚至期待自己像电影女主角一样成为校园红人。不过，两个月以后我就觉得腻味了，一点都不好玩。\n但L似乎有意把我们俩的关系潜移默化地衍伸为情侣，周围许多人都默认我和他是一对，只要大家结束社团活动去学校餐厅吃饭，我和他总是单独坐一个桌子。我特么恨死这种默契了，但我不知道怎么办，感觉自己像一个旱鸭子掉进水里的渔网里，挣脱不出来。\n有一次，我和L吵了起来，他从我的网络主页里看到蜀黍叫我努努，于是他也叫我努努。但我非常抵触这种称呼，他不足以让我崇拜和依赖，不足以居高临下地喊我的小名。这种被冒犯的滋味，就像被不喜欢的人袭胸了一样，我非常恼火地要求他停止这样的称呼。\nL在人人网，QQ空间里发神经，又是写状态，又是改签名，还写了日志，大概意思就是为什么最真的心碰不到最真的人，他不问他不能，拥在怀中直到它变冷。\n认识的人都来围观，弄得我非常没面子。\n最后闹崩了，L问我为什么那个人可以叫我努努，而他不可以。\n我当时就差点笑了，他为什么可以？他可是在我十二岁最无助的时候给我带路的男人呐！\n日期：2012-12-29 22:24:57\n让我觉得无法理喻的是，L竟然主动去加蜀黍的QQ，向蜀黍倾诉衷肠，但我个人觉得吧，那不过是一个自视甚高者的不甘心而已。他越是这样，越让我觉得这个人的占有欲大于感情，拿自己的私心来充当对我的感情。\n蜀黍不太了解内幕，他一边敷衍住L，一边打电话给我，询问到底怎么回事。\n我不知道该怎么说，扭扭捏捏说不出一个所以然，最后蜀黍干脆直接了当地问道：“你和他在一起玩，开心么？”\n我就像被老师提示“春眠不觉……嗯？”\n的傻学生，立即委屈地脱口而出：“我不开心，我一点都不开心！”\n于是蜀黍对L说：“你别搭理她了，她就一神经病，我认识东南大学的一个女生，和你同一届的，超级漂亮，校花，介绍给你。”\nL就说：“那么好啊？我可攀不上？”\n蜀黍就怒了：“校花你攀不上，我们家努努你就攀得上？什么意思啊你？以后你别指望和她交往了，她答应我都不答应！”\n蜀黍把聊天记录发给我时，我快给他跪下了。\n日期：2012-12-30 08:25:55\nL收获两个否定，而不是双重否定，当他发现希望渺茫时，果断选择放弃，转而追求倩倩。因为他在攻克闺蜜关的时候，倩倩曾经给予礼节性的鼓励，他觉得善解人意的倩倩才是他的菜，之前只是上错花轿了。但倩倩说，你很好，但我不吃努努的剩饭。虽然我对L不感兴趣，但他的行为或多或少让我对感情产生怀疑:连看上去那么死忠的追求都能一夜倒戈，那爱情显得多虚伪？我把心里的疑惑告诉蜀黍，蜀黍叫我不要想太多，有时这事就像幼儿园里的小孩子一样，他们想和你玩的时候给你饼干苹果，而你不想和他们玩，有的孩子会揪你辫子藏你的图书甚至把你的朋友拐走，有的孩子则坐地上哭，直到他找到别的玩伴。然后他又说:“如果遇到真心对你好的男生，就不要错过，不过尽量少花他的钱，小心吃了吐不出来。”我说:“那我更不高兴谈了，没钱。”蜀黍就说:“有困难，找蜀黍嘛。”\n日期：2012-12-30 10:00:31\n事实上，我和身边的同龄人一样，也喜欢又高又帅又阳光的男生，看到养眼的照片也会随手右键保存，然后犯花痴。但到了现实里，我还是与那些小男生交往不来，他们觉得我是可以轻易哄骗的小女生，而我觉得他们只是自负的小可怜。相比之下，蜀黍给予我的不只是爱护，还有尊重。大一下学期，我跑去上海找他，他特意请假带我出去玩，晚上还和他的朋友一起玩杀人游戏。晚上，我们去开房了。倩倩在我出发前对我进行站前辅导，她说男人开一张床的房间，说明心里打小算盘了。所以，当蜀黍对前台说开一个单人间，我紧张得快抽过去了。\n日期：2012-12-30 10:19:43\n在电梯里时，我一直低着头，假装在听歌，大气不敢出一口。我不知道会发生什么事情，我不知道自己期待哪一种，这次没有Z，只有我和蜀黍呀。早知道这样，我就该认真听倩倩的讲座，不至于现在那么慌乱。开门以后我发现，那是一个小小的房间，里面的床也是小小的，显得很温馨的样子。但我脑抽地问:“这么小的床怎么睡？”\n蜀黍也很惊讶:“你以为你是叶莉啊？这么大的床还不够你睡？”\n“叶莉谁啊？”\n我差点吼出来，感觉一个泼妇从丈夫的西装上找到一根女人的长发。蜀黍说:“姚明老婆。”我杵旁边不知道干什么，蜀黍帮我摆好行李，开了空调，连宾馆网络都给我联好了。我紧张得要命，天呐，我该表现得娇羞还是处乱不惊呢？不料，蜀黍说:“那你休息吧，我回去了，有事打我电话。”\n日期：2012-12-30 13:00:06\n我也不知道自己具体什么想法，只是突然很不喜欢被避嫌的感觉，于是抗议说我不习惯一个人住这里。蜀黍知道，我夜里一个人睡觉必定开灯，因为很害怕鬼压床。他犹豫半天才改变主意，帮我收好电脑，带我去改换房间。前台说:“我们的大床房空余，有八折促销。”蜀黍说“要标准间的，两张床。”前台就又瞟了我们俩一眼。离开前台走进电梯，我听见蜀黍长长地舒了一口气，显然和我一样憋气从头憋到尾。蜀黍啊，紧张害怕这种单纯的事情应该留给我来完成嘛。我和蜀黍每人睡一张床，我洗澡时蜀黍就在看电视，我出来时蜀黍都关灯钻他的被窝了。我其实没有希望发生什么事情，但又希望和蜀黍亲近一些，于是哼道:“有点冷。”蜀黍说“噢”，然后从储物柜里抱出一条棉被盖我身上。我躲在被窝里咬手指:早知道是这样，我大晚上的嚼那么多口香糖干嘛！蜀黍和我聊了一会儿就睡了，而我盯着床头的台灯发呆，底下的小盒子上印了好多让人脸红的图片。大概蜀黍真的不喜欢我吧，当时我有些难过。\n日期：2012-12-30 15:17:46\n一整夜，相安无事，没有发生什么意外的事情。次日上午我起床时，阳光已经把半透明的纱帘照得通亮，床头摆着豆浆和包子，蜀黍坐在床头看电视。平日我起床都会莫名其妙地坏脾气，揪头发摔枕头，但这次我的心情异常地好，悄悄地掀开被子，在他的后背捶了一下：“嘚！”他回头迷茫地瞟了我一会儿，意识到我是在吓唬他，这才拍着胸口假装很害怕：“哎呦妈呀，吓死我了！”然后我就扑到他后背上，像小时候和爸爸撒娇一样晃啊晃的，还傻笑。“你笑什么？”\n蜀黍问道。我摇头不说话，其实我心里是在想，如果昨夜真的发生那件既在意料之外又在设想之中的事情，那现在我们是否还能像现在这样亲昵，我又会不会心生悔意？兴许，一次无名无份的苟合，既终结年少的梦想，又毁了我对未来的憧憬。也是在这一天，我确定此生应当和谁一起走。蜀黍到门口帮我拿我的鞋子，看见里面的棉鞋垫被我踩得变形了，他伸手整理时发现鞋垫有些潮湿，于是，他脱下自己的皮鞋，把毛茸茸鞋垫取出来塞进我的靴子里。“我脚不臭哦。”他说。我嘴巴里还塞着满满一口肉包子，眼泪都差点流出来。\n日期：2012-12-30 16:53:20\n从情窦初开时起，我每次看着镜子里的自己，几乎都在数着时间，18减12，19减13，直到24减18，25减19。年年如此，乐此不疲。尽管答案永远不变，但我还是心怀期待，因为总有一天，我将长大成人，而蜀黍也还年轻。这么多年，一直风声鹤唳，最怕听到蜀黍恋爱的消息。那种一想起来就揪心的滋味，就像你们把藏满秘密的手机落在大街上，寝食难安。我从未正儿八经地谈过恋爱，但经历那么多年单调枯燥的煎熬，心理素质就这样练出来了。然而，蜀黍身边出现一个叫X的女孩，我竟然前所未有地绝望了，因为我感觉自己在她面前几乎还是一个小屁孩。那种差距就像《魂断蓝桥》和《海绵宝宝》。尤其，她不但拥有猫一般的优雅妩媚，而且非常冷静，这样的女孩通常在漂亮的皮毛下藏着爪子。\n日期：2012-12-30 17:52:07\n蜀黍的父皇在我们老家的运河边开了一个码头，专门装卸建材的，收入颇丰。我大一期末时，蜀黍在家里的资助下买了一台马六，一副青春少年样样红的模样，而X就在这个时候主动搭上蜀黍。我不是说X看中蜀黍的什么，只是说蜀黍当时的状态足以入X的法眼。在大多数人看来，他们很般配，一个青年俊才，一个是时尚佳人。但我很不喜欢，原因之一是我容不下这样一个后来居上者，原因之二便是老生常谈——我觉得X并没有那么喜欢蜀黍。第一次见到X，便是在蜀黍和朋友们的聚会上，蜀黍喝多了，开不了车，让X送我们回去。X开的是一辆两厢郑州日产，白色的，收拾得很干净。蜀黍被颠得难受时她第一反应是叫他不要吐在她的宝贝车上，我只得用外套垫在他面前。从那天起，我就不喜欢她。蜀黍和她确立关系时，我失魂落魄很久，不知道为什么，别人难过时会瘦，我却嗜睡贪吃，一个月胖了四五斤。X再见到我的时候，当着蜀黍的面对我说:“努努还没谈恋爱吧？我给你介绍一个男生吧，是帅哥噢。”蜀黍说:“她还小呢，急什么？”\nX却笑着说:“都十八岁了，哪里小了？你不会真把她当你家小侄女了吧？”\nX瞥我一眼，让我心慌了一下，但更多的是委屈，因为蜀黍这次没有维护我。\n日期：2012-12-30 20:35:21\nX说话很有技巧，她用那样的语气顶撞蜀黍，一来通过这种方式来宣示她对蜀黍的主导权，二来指桑骂槐。在另一个次元的世界，她兴许正捋袖叉腰指着我的鼻子骂道：“你这个小贱人，小鼻子小眼儿的居然跑来跟老娘抢男人，现在你瞪大狗眼瞧瞧，瞧瞧他到底是谁的！”\n蜀黍不说话，我也不好多话，毕竟那是他的女朋友，就算她把菜汤全部泼到我的头上，只要蜀黍不帮我，我就会默默地离开。\n那天我问蜀黍：“你以后会和她结婚吗？”\n蜀黍说：“我也不知道。如果可以，那再好不过。”\n蜀黍二十四岁了，该是谈婚论嫁的时候了，而我才十八岁，现在跳出来说那些不该说的话，除了当一个烦人的累赘，还能有什么作用？\n我忽然觉得自己是一个不受欢迎的人，决定给蜀黍自由，不再像小时候那样缠着黏着揪着拖着不放。整整一个月，我没有主动打电话给他，即使偶尔进他的空间偷窥，也要小心翼翼地删除来访痕迹。而X的微博，几乎每隔几天就更新她与蜀黍的生活照，在餐厅吃饭，在路上堵车，在外滩公园玩耍，在游艺场打电动。\n我害怕看到这些东西，X总是特意将@的一群好友里加上我的名字，还说“等你下次来上海，带你一起玩”。\n我不知道怎样回复，只得传一个捂嘴笑的表情，心里却翻江倒海地酸疼，像被人在心口剌了一道口子，倒上油盐酱醋和辣椒。\n但与蜀黍的通话已经保持那么多年，即使我打不过去，他也会打过来。X对此非常不爽，她最终将她那次所说的男生介绍给我，极其热情，热情得让外人都以为她是我亲姐。为了不让蜀黍为难，我只得顺从她的意思。\n那个男生叫Y吧，浙江人，也在南京上学，是X的一个闺蜜的表弟。他个头很高，也蛮帅，浓眉大眼，电话里的声音很温和。他来我学校找我，给我带了小礼物，然后喊我的小名：“努努。”\n我一向反感不熟悉的人喊我小名，但不知道怎么的，Y喊我努努的时候，我居然没有抵触。见面三四次以后，他试探着牵我的手，我也没有拒绝，任由他温暖的手拉着。当天晚上，X便在人人网和微博里大肆宣扬，恭喜我和Y喜结连理。\n蜀黍问我：“感觉怎样？”\n我说：“还行。”\n可我没告诉任何人，我其实心如死灰。\n日期：2012-12-30 21:37:49\n平心而论，Y非常擅长讨女生欢心，他会弹吉他，会唱歌，也会打篮球，虽然滥而不精，但至少可以装装样子。女生有时就是这样无脑，明明知道对方早已用这些烂俗的手段哄骗无数女生，当他抱着吉他非常投入地为你唱一首《温柔》，每一句歌词似乎都在控诉你对他薄情寡义的罪孽。\n于是，一点点地心动了。\n有一次他请我出去吃饭，Y神经质地买了一瓶葡萄酒，还有一瓶老酸奶，他往玻璃杯里倒一点酸奶，再倒一点酒，然后再倒一点酸奶，再一点酒，最后用筷子轻轻一搅，那些红色的液体在酸奶里被拉扯为一条条艳丽的带子，红白相间，就像阿尔卑斯的一种硬糖。\n当时的我，竟然被这种小小的伎俩迷惑住了。\n我一直以为葡萄酒的度数只是摆设，但那天在酸奶的辅助下，我竟然喝高了。我只觉得头晕目眩，胸口沉闷，眼皮特别特别地重，心里堵着许多话想要立即喊出来。但我极力控制自己，不能乱说话，千万不要说话，不要做那个丢人的酒鬼。\nY说要带我去看电影，但我看了一下时间，都十点了，我挣脱他的手，一个人晃悠悠回学校去了。走到宿舍楼前面的花坛，我忽然想起两年前蜀黍送我来开学，临走时在这个地方揉了一下我的头发，嘀咕道：“真快啊，认识你的时候还在读初一，现在都读大一了。”\n于是我一个人坐在花坛边上借着酒劲哭，刚好有树影挡着，我又不哭出声，只是想把堵着的泪水淌光，省得在室友面前丢人。但宿管阿姨刚好路过，问“同学你怎么了”，我抹了抹眼泪，说：“想家了。”\n日期：2012-12-30 23:24:47\n那段日子，我一直过着不人不鬼的日子，最大的梦想就是找一个人倾诉内心的秘密，但世界那么大，却没有一双愿意聆听的耳朵。有一夜，倩倩钻我被窝里来睡觉，半夜我做了一个噩梦，梦见自己在学骑自行车，蜀黍在后面扶着，我骑着骑着上了一个斜坡，回头一看发现蜀黍不见了，车子飞快地往下滑。\n我双腿猛地一蹬，就从噩梦里吓醒了，一身冷汗，倩倩转身把我抱住，像哄孩子一样拍着我的后背，然后她告诉我，我喊蜀黍了。\n不怕大家笑话，我初二暑假才学会骑自行车，一半是蜀黍教的，一半是自学，左脚脚踝的一块疤是当时磕出来的。\n虽然和Y交往好几个月，但我和他只是保持这层关系，几乎没有过分的身体接触。他有时想抱我，我也就让他抱了，但身体僵硬，神情麻木，一点都没有配合的欲望。Y对此极为不满，曾经问我是不是冷淡？\n“什么冷淡？”\n我故意问。\n他顿时无话可说了。\n人总是这样，口口声声都说要一个爱自己，对自己好的人，但一个自己喜欢的和喜欢自己的人出现，大家还是屁颠颠地跑向那个自己喜欢的人。这就叫犯贱，犯贱了就叫贱人，贱人最爱矫情。\n我终于决定强迫自己想通，对Y好一点，兴许有一天他真的会替代蜀黍，那不是皆大欢喜么？于是我精心打扮与Y约会，和平常的情侣一样外出游玩，拍大头贴，甚至把QQ换成一对情侣头像。\n我的转变让Y非常开心，那种受宠若惊的样子，让我觉得自己当初是以一个可怜虫的身份折磨另一个可怜虫。\n但他有一天突然说：“你也叫我蜀黍吧。”\n我突然暴怒了：“滚！”\n日期：2012-12-31 09:44:00\n我不是特别追求用彼此的称呼来证明两者亲疏，如果恋爱了，你要我叫你老公也好，亲爱的也行，宝贝达令都无所谓。虽然有点无趣，觉得像在陪小孩子玩过家家，但这点爱心和耐心我还是付得起的，只不过，不要强迫我喊你蜀黍。和蜀黍相识以来，我直呼他大名的次数绝对不超过十，感觉那是一种冒讳，一种犯上。蜀黍工作的第一个春节，我在南大街和他见面，扑上去喊了一声叔，他非常自然地轻“哎”一声，拔出两百块压岁钱塞我衣兜里。这个称呼对我而言，不是暧昧，不是撒娇，而是心底的一座靠山。Y并不了解这一点，他坚信他被我喊一声蜀黍就能取代蜀黍的地位，并且认为我和蜀黍之间的关系不过是小女孩的愚蠢和大男人的贪婪。当他歇斯底里地说蜀黍“王八蛋”，我只觉得一股热血直冲天灵盖，耳边嗡嗡地轰鸣着，抓起手边的一杯奶茶就摔了过去。那是我有生以来第一次在众目睽睽之下如此失态。Y也被我吓住了，随后一个礼拜，他都努力向我道歉，但若不是蜀黍和X约我们俩一起去苏州玩，我是绝对不会再和Y有任何来往。\n日期：2012-12-31 11:03:52\n苏州之行在我看来总有些诡异，X对我热情得让我有些难以消受，Y表面上对蜀黍尊敬有加，但我忘不掉他破口大骂的情景，而我在蜀黍面前的身份是另一个人的女朋友，他似乎刻意避嫌，不再像从前那样亲昵。我看见有趣的东西，再也不可以随口就喊蜀黍蜀黍过来看，只能一个人默默地看着，默默地走开。这种各怀鬼胎的气氛，呵呵呵呵。在寒山寺，X挽着蜀黍的胳膊走在前面，Y牵我的手，我有些不乐意。但X回头看我们一眼，对Y说了一句:“你照顾好努努，别把自己女朋友给走丢了。”于是我无法再拒绝，任由Y牵着手。我们去过拙政园，还有平江路猫空，在那里我给蜀黍写了一张明信片，一年后寄达。至于内容，暂时保密。当晚在一家餐厅吃饭，X突然说，她想去蜀黍家拜访。我愣了一下，没敢抬头看看蜀黍，埋头吃饭，把自己不喜欢吃的生姜末，蒜泥也咽了下去。\n日期：2012-12-31 11:41:34\n宾馆是X在网上预订的，两个房间，她和蜀黍一间，我和Y一间。我走进房间时脑子里一片空白，Y倒是殷勤地给我拿拖鞋，放背包，甚至给我调试浴室里的温水。此时我倒是有些释然，其实Y挺不错的，既然蜀黍已经有了未来，我就这样随波逐流算了。和谁睡，特么的不是睡。我不习惯和别人共处一室，虽然有些事情是早晚的，但拖延一分钟是一分钟，我对Y说，你先洗澡吧，我刷一会儿豆瓣。Y就很开心地去了，而我玩Y的电脑，登陆扣扣时发现Y的扣扣记录密码了，于是手贱点了登陆。和很多贱人一样，我喜欢偷窥别人的聊天记录，Y最近联系列表里有X。“生米煮成熟饭，什么事情都好办了啊”，X这样说。Y回复了一个害羞的表情。我默默地关了电脑，傻坐着听浴室里哗哗的水声。\n日期：2012-12-31 13:59:55\nY出来时催我去洗澡，说里面空气已经暖了，但这样的话在我看来显得可悲，我只是冷冷地看着他。他不知道发生什么事情，询问和安慰我的时候就想抱我，我觉得恶心，一把推开他，开门跑了出去。我头发散乱，没有穿拖鞋，袜子也脱掉一只，我不介意把事情弄得很难看。蜀黍出来开门看见我，先是愣了一下，而后把我拉进来问:“你怎么了？”\n我低头小声说“我想回学校”X听见声音跑了出来，问“Y人呢？”\n她穿着浴袍，头发湿漉漉的，显然刚洗完澡，连头发都没来得及梳烘。Y这时候敲门进来，他已经换了衣服，四个人站在房间门口，很多事情一目了然。Y辩解说“我没干什么啊……”蜀黍瞪了他一眼，又对X说“把我包拿过来，我再去开个单人间。”X有些不乐意，说“人家小情侣的事情，你插什么手？他们等会儿和好了，你该怎么做人？”\n蜀黍自己拿来皮包，说“那就不做人了。”\n日期：2012-12-31 16:26:50\nY或多或少伤了我的心，原本以为他至少对我不错，我也打算凑合凑合着在一起，就像电视里的人说的，“感情嘛，处着处着就有了”冬天里的刺猬就该团成一团，既保暖，又御敌，倘若有一只动物跑来用自己的体温焐着，八成是等刺猬惬意地舒展身体，然后攻击它柔软的腹部。我坐在单人间的椅子上，任凭蜀黍怎么问，都不肯告诉他到底什么事情，最后他只得无奈地离开了。蜀黍的个头不高，看上去也不强壮，但明眼的一看他的眼睛就知道是一个不好惹的人。以前曾经有高中部的学长在篮球场因一点摩擦大打出手，谁也拉不开，蜀黍过去呵斥一声，双方赶紧分开，向他控诉对方错在先。Y被蜀黍瞪了一眼，一整夜都没敢来敲门，只在凌晨三点多发来一条短信，大概内容是他不知道哪里冒犯我了，如果哪里错了，他向我道歉。我之所以不告诉蜀黍事情真相，是因为我一时不确定现在我和X在蜀黍的心里哪个更重要。她一定会说我的坏话，说得越多，总有一天输得越惨烈。\n日期：2012-12-31 18:22:36\n第二天早上，我尽量隐藏昨夜的不愉快，和他们一起出去吃早餐，就像什么事情都没有发生。早餐地点是一家红门黑匾的店，里面都是四人座的木桌，古色古香的样子。我特意点了四碗牛肉细面，多放香菜，虽然我不吃。蜀黍一落座，X就坐到他身边，而我坐在蜀黍的对面。他们俩互相很少说话，枯燥的一问一答，而我要么玩着手机，要么看窗外。面条上来，我拿起筷子便将香菜夹了往蜀黍碗里丢，旁若无人。X看了一会儿，幽幽地说“不吃香菜就让他们别放啊。”我说“过一下味儿，我一直这样，蜀黍知道的。”我抬眼一看蜀黍的大碗，里面的几片牛肉立即被他丢我碗里了。不是他有多疼我，而是很多年前我们就有这样的交换，何况，他讨厌吃这种牛肉，塞牙缝。X的脸色都变了，但我没有闹够呢，一筷子叉了小半碗面条对蜀黍说:“我嫌多，你要不要？”\n日期：2012-12-31 22:03:23\n在苏州的那一天，几乎所有事情我都与X对着干。她说要吃川味，好，一起去，到了那里我就干坐着。等X眉飞色舞地点了麻辣小龙虾之类的食物，我幽幽地补一句我最近不想吃辣，你们吃吧，我刚好减肥。蜀黍立即站起来说换一家，苏州嘛，X非常不高兴，但她不知道蜀黍果断地放弃川菜的原因。整个世界，整个人类，整个宇宙，只有蜀黍知道我特么一吃辣就犯痔疮，大姨妈和大姨夫一起来的时候就像不幸流产了似的。后来X又要提议去看电影，四个人大老远跑苏州来看电影，这不是闲得蛋疼么？里面一对一对的，我总不能甩开Y去坐在X和蜀黍中间，用恬不知耻的方式拆散一对恋人吧？那样一个汇聚人类高度精神文明的场所是不允许这样的事情发生的。我说：“咱们去看昆剧嘛！”X说：“那有什么好看的，依依呀呀难听死了。”蜀黍的脸一下子沉了下来，因为蜀黍的麻麻年轻的时候就是唱昆曲的，他电脑里至今保存着他麻麻在世时唱的一段昆曲。说实话，真不好听，当时她已经喊不上去，时常破音，然后把自己唱得笑场了。蜀黍坐在电脑前百听不厌地听那段录音，也会忍不住跟着笑，仿佛还是一个傻乎乎的孩子，最后用双手捂脸深吸一口气，我整颗心都酥软了。X就这样不知不觉地惹了祸。\n日期：2012-12-31 23:26:24\n那一段时间，我几乎都处于走高空钢丝绳的状态，战战兢兢，既不敢松懈，又不敢冒进。我不停地触碰X的底线，又徘徊在蜀黍的警觉范围以外，所有行为都要搞得X非常不爽，而蜀黍觉得这些都是稀疏平常的事情。比如微博里，突然贴出一张2006年春天我和蜀黍在狼山的合影，他二十岁，我才十四岁。我抱着他送的一只会跳舞的驴子，笑得口水横溢，而蜀黍偷偷地用手指在我脑袋后面竖起兔耳朵。这些不足为奇，于是我在照片底下补了一句自己都觉得莫名其妙的评论：“桃花依旧笑春风”。X那么聪明，至少会去查一下这句诗的涵义，然后引申，然后争吵，但蜀黍这么一个毫无浪漫主义气息的家伙是想不通这个也能成为争吵主题的。而让矛盾最为激化的事情，发生在十一长假，X提出要和蜀黍回家拜访，这是一个早已提过的行程。但蜀黍觉得暂时有些不妥，因为他家正在忙着装修，各种忙各种乱，连一个落脚的地方都没有。X在微博里@蜀黍了，“老公努力装修房子哦，我会赶着马车带着嫁妆去的！”蜀黍在外闯荡多年，我们那座城市早已大变样，蜀黍连去菜市场买招待工匠的菜都找不到菜市场，于是我爬上他的座驾充当向导和助理采购员。他买好菜以后，我提议说：“我跟你回家蹭顿饭呗，你爹上次叫我再去玩的。”上次是三年前。蜀黍爽快地答应，于是载着我回去了，他家满是油漆和木屑的气味，果然连一个坐下来聊天的地方都没有。蜀黍的爸爸一看见我就开心，蜀黍的堂妹也抱着孩子过来玩———对的，蜀黍的堂妹都结婚生孩子了，蜀黍还在打光棍。我拍了一张装修现场的照片，传到微博，内容就几个字“蜀黍家被洗劫了。”当然，坐标定位必须不能忘记的。\n日期：2013-01-01 10:34:24\n一个人的优点通常与致命弱点只有一纸之隔，优点沦陷失守，弱点便暴露无遗俊。就像一世睿智的人常常死于一次愚蠢，一世冷静的人常常败于一次失态。X终于按捺不住，与蜀黍大肆争吵起来，闹的动静非常大。每次蜀黍提及这事，我都尽量低调，劝他不要在意，过一段时间就好了，女人嘛，总有那么几天。X闹得最疯的时候，我对蜀黍说“你结婚时我送什么礼物给你呢？”\n蜀黍说“现在提这个干嘛，太早了吧？”\n我说“我怕到了那时候，我已经不能再去见你了”蜀黍沉默许久才说“不会的。”X不停地挑衅蜀黍的底线，我几乎从不掺和，只在耐心地等着。闹吧，闹吧，等蜀黍哪天不说话了，没耐性陪你闹了，你的末日就到了。\n日期：2013-01-01 11:38:21\n曾经累。现在很轻松。一个足够善良的女孩可以招安我，一个足够聪明的女孩可以驱逐我，我不欺善也不纵恶，就看她们自己选哪条路。\n日期：2013-01-01 11:53:27\n2011年的圣诞节，对于我和蜀黍而言，都是一个特别的日子。X为一点破事和蜀黍闹腾起来，我故作漫不经心地提起她和Y的聊天记录，蜀黍当即气得挂了电话，平安夜便与X分手。我也跟随脚步，和Y摊牌，他很平静地接受，问我以后会不会和蜀黍在一起。我笑着回应“是不是想说你可以接受我和任何人在一起，就是不甘心那个人是蜀黍？”\nY一下子脸红了，我知道，心思被点破的滋味很难受。可是，难道不被点破就等于不被戳穿么？平安夜时我对蜀黍说“咱们今天都是失恋狗哎，一起出来喝酒吧！”蜀黍说“不去。恋爱失败要守灵三天，守节三个月。”\n日期：2013-01-01 12:59:48\n大多数人都以为，蜀黍平时非常严肃，包括他的历届女友。但其实他可以有趣，也非常二，我自负地认为，那要取决于他在面对谁。有一次，我们在电话里讨论去哪里吃饭，我要去吃韩国烤肉，他要去火锅，最后他说“我们来猜拳吧，我说一个，你马上跟上，有本事你赢我。比如我说剪刀，你立即说锤子，你就赢了，咱们就去吃烤肉。”我说好的。“布！”他说完这个马上咋呼起来“快说锤子！”我心一慌，赶紧说“锤子”他就得意地笑了，而我开始质疑自己的智商。每当遇到这样的欢乐，我都会觉得，这个世界给我的一切都那么有价值，无论是幸福还是悲伤。\n日期：2013-01-01 15:12:47\n2012年，蜀黍虚岁都26岁了，几乎每隔一段时间就有人向他或者他的长辈介绍相亲。蜀黍漂泊久了也想安定下来，流露渴望成家的意思，而我掐指一算，不禁喜上眉梢，本人即将抵达法定婚龄了。从这一年起，我极力向蜀黍展示自己已经脱胎换骨了。当我坐在副驾座上，他探腰过来给我拉安全带，我推开他的手，说“我已经不是小女孩了啊”蜀黍鄙夷地说“怎么，在哪里捡到自己的小鸡鸡了？”\n平时和他聊天时，我也尽量玩一把理性，希望分担他在工作上的压力，听他倾诉各种各样的烦恼。他讨厌喝酒，又逃脱不了酒局，他很想戒烟，但遇到烦心事，一支烟又不自觉地叼到嘴边。“赶紧戒掉嘛，以后才能生出小帅哥小美女。”我说。蜀黍却不以为然“漂亮皮囊是非多，健康就行，我不在乎。”我在心底嘀咕“你不在乎，我在乎啊！”\n日期：2013-01-01 18:59:24\n那段时间，我一直努力向蜀黍坦白内心，但怎么也不知道如何开口，我就想着，不如再等等吧，这么多年都熬下来了。我拖到元宵节才回学校，蜀黍刚好去南京办理转户口的事情，顺路带我过去。一路上我叽叽喳喳，蜀黍却沉默不语，过长江大桥时堵车，等候的时候他突然开口说“这次我去相亲了。”我愣了一会儿，说“哦，然后呢？”\n蜀黍说“她是我爸年轻做泥瓦匠学徒时的师兄的女儿，小时候见过，比我小两岁。人挺不错的，性格开朗，长得也不错，”“那你喜不喜欢？”\n我用刘海儿挡住眼睛，不敢抬头看他。蜀黍说不错的人，那就是真不错了，他以前很少夸自己的女朋友。蜀黍说“无所谓喜不喜欢，我都晃荡这么多年，谈过那么多次，那女孩还没谈过恋爱，一张白纸，我哪有资格挑三拣四。”我想了一会儿，笑了起来:“哈哈哈，我和Y 谈过哦，我不单纯~”\n日期：2013-01-01 21:38:24\n那天我们在大桥上堵了四十多分钟，我感觉自己的心一直颤颤着，眼泪随时都会溢出来，我小心翼翼地稳住情绪，就像端着一只斟满得起了凸面的酒杯。委屈，迷茫，失落，孤单，这些情绪不停地踩踏着我的心口。我死皮赖脸地在缠了蜀黍这么多年，见证一个又一个女孩从他身边来了又走，现在终于无能为力，再也拖不住他了。车里的气氛很差，谁也不说话，直到中控台的播放器传来一首歌，蜀黍跟着哼了起来。“我对你有一点动心，却如此害怕看你的眼睛，有那么一点点动心，一点点迟疑，不敢相信我的情不自禁。”他哼到“我对你有一点动心，不知结果是悲还是喜”的时候，我突然鼓起勇气，扭头看着他，说“我也是。”他愣了一下，问“什么？”\n我的脸一下子烫了，掩饰道“我说我也会唱这歌。”“噢。”蜀黍似乎没有在意，打开车窗点了一支烟看着外面。我偷窥他的侧脸，心里不停地喊着“你再问我一遍吧！我重答一遍！”\n日期：2013-01-01 23:42:27\n2002年元宵节之后没几天，就是情人节。以往蜀黍和女友一起过节，我都没有过分妒忌，唯独这次，我寝食难安，却不敢主动联系蜀黍。这种滋味非常煎熬，很想大声表达所思所想，又怕自己根本登不上台面，被别人一句“大人的事情小屁孩搅和什么”给堵住，说出的话咽不回来，一辈子都不能再和蜀黍再有交集。情人节那天，寝室的女生还有其他几个同学一起组团出去玩，喝酒吃饭，然后去k歌。在包厢里，酒劲上来了，我抢了麦克风发疯，胡唱海唱，居然在《说谎》的伴奏下唱“你入学的小书包有人给你拿”。她们一开始笑成一团，直到我对着话筒嚎啕大哭，她们才上来掰开我的手指，夺走话筒。上一次我这样丢人地当众痛哭，发生在十二岁那年的一条马路中间。\n日期：2013-01-02 00:11:11\n那天是我有生以来醉得最厉害的一次，倩倩陪我睡在外面，整夜都在照顾我。不管怎样，情人节总算熬过去了，对于感情里的失败者而言，几乎所有喜庆的节日都是折磨。次日上午，我迷迷糊糊地醒了，头疼眼皮重，不愿意起床，于是闭着眼睛听电视机的声音。不一会儿，有人敲门，倩倩穿着拖鞋去开车，有人走了进来。“她怎么样了？”\n那人问道。我一下子完全苏醒了，被吓醒的，同时下意识地缩进被窝。但棉被被掀开，脸上的乱发也被拨开，我还是紧紧闭着眼睛装死。“起来，喝酒去。”蜀黍摸着我的额头，声音有些严厉。\n日期：2013-01-02 09:21:35\n为了避开两个城市的上班拥堵时间，天还没亮，蜀黍就开车从上海直扑南京，现在眼睛红红的，像一只大兔纸。他在旁边唠唠叨叨地数落我:“瞧瞧你，睡觉都不卸美瞳，梦里会情人怎么着？小孩子家居然宿醉，被你妈知道了，我怎么交代？”\n我不喜欢狼狈的时候被人看见，心情有些糟糕，顶嘴道“我成年了，宿醉就宿醉，关你什么事？”\n蜀黍瞪大眼睛惊诧地看着我，我一下子意识到自己说错话了，但蜀黍随后说“噢，我还以为和我有关系呢。”倩倩在蜀黍身后直对我跺脚，一副怒其不争的样子。\n日期：2013-01-02 09:55:14\n蜀黍给了倩倩三百块，倩倩把押金收据和钥匙给他了，拎包要走的时候还风情万种地说“老板真大方，有需要再联系啊，我留个小姐妹在这里伺候你。”蜀黍的脸一下子红了，钱包都哆嗦着掉地板上了，我和倩倩厚颜无耻地笑。“如果倩倩这样的女生喜欢你，你会接受吗？”\n我试探地问他。蜀黍想了一会儿，说“有点太小了吧？”\n“我比她大三个月。”我认真地补充。蜀黍看了我一会儿，说“还是小。”我顿时被踩到尾巴了，立即掏出身份证，指着出生年月日给他看，说“你看！成年了！再过几个月连法定婚龄都达到了，哪里小了？等我毕业了，别说谈恋爱结婚，就算生孩子也没问题啊！”\n日期：2013-01-02 14:58:20\n有时紧张的滋味会让人脸红身烫，但有的紧张会让人手脚冰凉，全身颤抖，尽管开着空调，裹着棉被，但我止不住地哆嗦。悉心隐忍那么多年，如今终于走到这一天，我不知道迎接我的是什么，他一点头，便有万千天使在云端吟唱，他一摇头，狰狞的地狱之门便会打开。蜀黍带我去吃饭，一边给我剥虾一边说“叔这个月算是白干了，年初假期拖了那么多天，昨天刚忙上了手，你这一闹，叔又翘班了，你知道我编的什么理由么？我跟老板说我堂兄结婚，老板说你堂兄去年不就结过婚了么？我特么说这是再婚。”我知道他在逗我，却怎么也笑不出来，问道“叔，我是不是特事儿妈，什么事情都特拖累你？”\n蜀黍没有回答我，许久以后才说道“如果不出意外，我很快就升职加薪了，但之前一段时间非常痛苦，你知道我怎么熬过来的么？”\n我摇头说不知道。蜀黍说“你上次在猫空说明信片寄给我公司地址了，一年以后才到，去年那段时间我被一个竞争机会的同事整得半死，经常想跳槽算了，但我怕走了以后收不到那张明信片，硬是扛了下来。”“蜀黍的好奇心真强呀。”我说。蜀黍看了我一眼，幽幽地说“如果只是好奇心，我大可直接问你写了什么，何必放弃那么多机会死撑？”\n日期：2013-01-02 18:11:08\n平时我对别人的话理解得很快，这次大脑却出现那么一瞬间的空白，半晌之后才领会他的意思，像打了鸡血般情绪亢奋。人生最大的惊喜，莫过于发现自己苦恋多年的人刚好也将你放在心里，你曾经幼稚的胡闹的不上路子的原本以为一厢情愿以为不得不石沉大海的心思都有了回应，像丢入水池的石块涤清污垢，闪闪发光。但蜀黍随后又说:“你年龄小，还在上学，以后的青春还很长，会遇到更好的人。等你长大了，独立了，不再需要别人的庇护，会忽然发现叔不再那么重要，另一个人成为你生命里更重要的人。”“什么样的人？”\n蜀黍说”更高，更帅”他停顿一下，又说“更年轻，让所有人都接受，对得起你的单纯。”\n日期：2013-01-03 03:24:04\n我当时最期待的事情，便是饭桌上有一杯烈酒，仰脖饮尽成一快，管他身后洪水滔天。我想恬不知耻地发酒疯，告诉他“我不需要什么更好的人，我已经遇到最好的人。”但我还是说不出口，我怕那不是蜀黍的理由，而是他的借口。 话一说出口，便不再是我自己的内心所想，而是“好啦好啦，你那么认真干嘛，我昨天喝醉了胡咧咧而已”。说完以后，看着蜀黍有些意外的表情，我恨不得扇自己几个耳光，叫你特么死要面子！可是，到底是退出来稳一稳，还是豁出去拼一拼，我总是无法抉择。直到蜀黍返回上海，我都无法表达解开内心的纠结。我在扣扣空间更新一首老歌，蜀黍还是少年时听过无数次哼唱过的歌，周杰伦的《开不了口》。可惜他已经很少玩访问空间这种幼稚游戏。 更让我痛苦的是，和蜀黍的交往出现八年来前所未有的瓶颈，他开始对我客气，而我开始对他谨慎。“蜀黍你在干什么呀。”“做表格呢”“噢，那你先忙着。”“嗯。”但我在心底千万次咆哮:“这特么不是标准答案！你应该说不忙，一点都不忙，我还是先和努努聊天陶冶一下情操吧！”那一段时间里，我差点悲观地误认为，我长达八年的苦恋就要这样不明不白地夭折在聊天记录里。 这是我认为的，最失败的一种失恋方式。\n日期：2013-01-03 09:43:43\n就像一句广告词说得那样，人总是有很多面。男人是这样，女人也是如此。大多数父母认为自己孩子“从来没谈过，很乖的”，却不知道他们/她们在情场早已摸爬滚打多年，在精神和肉体都拥有胜于蓝的战斗经验。于是，我非常想知道那个可能要做蜀黍的老婆的女人是什么样子，潜意识里期待她没有那么好。当如今的网络环境下，每个人都可以是福尔摩斯。姓名，出生年份，家乡，学校，只要具备这些，从网就会将一个人的生活状况双手奉上。我很快加上那个女孩的从网和扣扣，并且将她从2007到2012年的生活翻了一个底朝天。可惜，她确实像蜀黍说得那样，是一个历史几乎空白的宅姐。她非常迷恋谢耳朵，相册里满是谢耳朵的图片，却不知道谢耳朵的扮演者姓甚名谁。这样的女孩，通常活在另一个次元吧。我突然不知道怎么办才好，就像一个武装到牙齿还拎了火药桶准备决一死战的武士发现对方是一个可爱的盲姑娘，到底是手起刀落还是默默走开，一时没了主张。\n日期：2013-01-03 10:03:13\n那个女孩叫C吧。男生对另一个男生说“你真帅，我们做个朋友吧”，结果会很喜剧。但女生对女生说“求大胸姐姐疼爱”，却可以收获一段基情四射的百合之爱。C很单纯地把她的秘密告诉我，包括心烦的相亲。她其实对相亲很无感，不喜欢父母老是催婚恋的事情，她觉得二十四岁还有机会邂逅英俊潇洒多金的白马王子，而不是蜀黍这种来自乡下老家的泥瓦匠的儿子。我对她讲“童话和天方夜谭里，花匠木匠泥瓦匠的儿子才是主角。”她却说“我又不是生活在童话世界里”我说“那你生活在神话故事里么？”\n我不是向她推销蜀黍，只是习惯性地不喜欢别人说蜀黍坏话。\n日期：2013-01-03 10:57:47\nC眼里的蜀黍，不过是一个鸡肋，食之无味，弃之可惜。蜀黍眼里的C也差不多这样，没有情投意合，只有长辈们推崇的“合适”蜀黍过生日是按农历过的，3月11，我做好准备，在这一天向他摊牌。悲催的是，2012年的这一天刚好是愚人节。蜀黍告诉朋友们他今天过生日，不料大家看一下日历，都以一个“滚”打发他。\n日期：2013-01-03 11:22:28\n蜀黍在长宁区延长路租了房子，就在上海大学旁边，我们吃完饭一过去，他的室友全都犯LOL瘾了，跑去网吧撸噢撸了。蜀黍收拾房间，我就玩他的新电脑，发现一个很大的文件夹，里面都是各种软件的安装程序，还有两个爱情动作片，但照片只有一张。我大一时发给他的照片，倩倩给我化妆的那张。“哇靠！把我照片和这些东西放一起啊？”\n我脑抽地抗议道。一回头，蜀黍的脸红得像猴屁股。\n日期：2013-01-03 14:04:12\n倩倩和男朋友是异地恋，她经常叫我帮她拍照片，然后在扣扣上传给男朋友，甩几个字:“拿去撸吧！”于是我隐约猜想这么一回事，但蜀黍红着脸解释:“我把旧电脑里的重要文件打包转移到新电脑里来的，不是故意放在一起。”“这色情电影也是重要文件吗？”\n蜀黍低声说“不算重要吧，但这是问别人要的，弄没了就不知道到哪里下载了。”我在心底乐成傻逼了，一是因为蜀黍真的很呆呀，二是因为想到蜀黍认为我的照片很重要。那天晚上，我们躺在小客厅的沙发上看电视，他翻到茶几底下的一盒喜糖，就剥了一块水果糖吃了。我也翻了一下，发现要么是巧克力，要么是软糖。我问道“你那个糖什么味的？”\n他说“不知道，熟悉，又说不上来。”“我也想吃。”他伸舌头给我看，说“就这一块，要不我下楼去买？”\n我看了他一会儿，鼓起勇气说:“就要你嘴里这块。”\n日期：2013-01-03 15:11:27\n蜀黍一开始以为我开玩笑，继续看电视，直到我盯着他看了七八秒，他才意识到我是动真格的，一下子翻身坐起来。我伸手去抠他嘴巴，他一边躲让一边拒绝“别闹了，才抠过脚丫的，脏不脏？我现在下楼去买总行了吧？”\n听他这么一说，我翻身跪坐在沙发上，凑近他的嘴巴，说“给我吃。”我尽量摆出女王的架势，向他颐指气使地发布命令，但那颗小心脏啊，噗通噗通颠得我几乎窒息。不料，只见蜀黍喉结一动，咕咚一声，他居然把那块水果糖硬生生地咽下去了！然后张开嘴巴，狡黠一笑“没了！”我气得哑口无言，好不容易积攒出来这么一次勇气容易么？我踢了他一脚，气呼呼地回他的房间睡觉去了。我越想越委屈，感觉自己像在犯贱，这样不要脸了居然还是被拒绝，难道这就是热脸贴冷屁股？第二天一早，蜀黍送我去车站回南京，一路上两人都不说话，但我看得出蜀黍有心事。昨天我太主动，让他有心理压力了么？我特想笑着对他说“大家都成年人了，开个玩笑干嘛当真”，可是我终究不敢对他造次。即将进安检口的时候，蜀黍突然拉住我的胳膊，说:“今天我打电话回家把上次相亲那事了结掉，你也问一下你妈妈的意见，如果她同意，咱们就在一起吧。”我站他面前半天都没反应过来，我还没害臊，他倒是先红了脸。他把一个小东西往我口袋里一塞，说:“你先回学校吧，有事打电话给我。”我当时有些懵，心里一直嘀咕着“惦记这么多年的美事怎么在这么一个糟糕的破时间兑现了呢？”\n连一个扑入怀中撒娇庆祝的机会都没有。我背着旅行包，拿着车票独自登车，直到坐下来才记得他塞去我口袋里的东西，取出来一看，一大包各种口味的水果糖。\n日期：2013-01-03 15:36:19\n在回南京的路上，我还是对不久前发生的事情有种不确定的感觉，害怕他只是在一场追逐游戏里精疲力尽，实在躲不过去了才举起白旗，拿我妈妈的意见作为最后的缓兵计。我发短信问蜀黍:“你以前谈恋爱是怎样的，也要首先征求女孩父母的意见？”\n蜀黍说:“M是先斩后奏，其他的只斩不奏。”“那为什么单单要我回去问家里的意见？”\n蜀黍说“你和她们不一样。”“哪里不一样？”\n蜀黍过了很久都没动静，直到我一路睡到南京外围才摸出手机看到信息:“因为你最重要，所以不敢轻佻，不敢怠慢。”那一刻，我心底或是沉底多年不见天日的困惑，或是最近让我寝食难安的疑云，都化作一缕轻烟。这个短信是蜀黍送给我的一把万能钥匙。\n日期：2013-01-03 16:45:31\n尽管我之前和Y有过一段时间的情侣名分，但如今蜀黍一点头，我才首次领略到恋爱的美好，那种阴霾散尽，风和日丽的惬意充斥每一分每一秒。就像那只小兔纸一样，每天都想表达自己有多爱麻麻，它使劲张开胳膊，说“我爱你有这么多！”蜀黍向来不将情绪形于色，但他像那只兔麻麻一样，只是一个小小的举动，就可以让我明白，他可以爱我更多，比我把胳膊张到最大还要多。我打电话回家告诉麻麻:“我谈恋爱了。”麻麻问:“哪里的啊？人品怎样啊？怎么认识的啊？”\n我说“我十二岁就认识他了。”麻麻有些不高兴:“这么多年都没发生什么，现在突然找你谈，男孩子到了这个年龄杀熟最不靠谱了！”我提醒道:“妈，是我杀熟。”她又问:“你初中同学？”\n我委婉地说:“只是一个学校的，比我大六岁，怎么可能是同学？”\n我妈妈立即吼起来:“六岁！你不会是师生恋吧？”\n日期：2013-01-03 17:38:35\n我将蜀黍的情况告诉麻麻，但妈妈给予差评，可能因为对父亲的失望，她不太喜欢从农村走出来的男人——凤凰男，她用这个词来概括那个群体。我非常不能接受她的观念，于是她又换了一个角度，说:“你现在才大二，他都毕业几年了，等你大学毕业，再读个研，出来时刚好二十三四岁，他都三十多了。你指望他一直等你？”\n尽管我说研究生也可以结婚，甚至我可以放弃考研，但妈妈认为我那是幼稚不懂事，被一时的热情蒙蔽双眼，每一个失败的恋爱在开始时都那么狂热。最终我还是没能说服她。当蜀黍询问我妈妈的态度如何，我犹豫片刻后答道:“她答应了啊！”蜀黍也告诉我，他把相亲那事给了结了，他爸爸有些不高兴，问他是不是另外谈了女朋友。蜀黍说:“国庆节时就带她回去。”我问蜀黍:“为什么是国庆节？五一节不是马上就到了吗？”\n说完以后我就脸红了，哪有这么心急的小媳妇？但蜀黍平静地说:“等你满二十周岁嘛，二字开头，视觉冲击力可以小一点。”\n日期：2013-01-03 18:38:45\n随后几个月里，我和蜀黍相处得非常愉快，但一想到麻麻说的话，心里就会无比焦虑。特别是下半年进入大三，我就整天在想到底要不要考研，考与不考，都意味着不同的人生。唯一不会改变的是，永远不会为任何事情放弃与蜀黍一起走的决心。每当我情绪低落，蜀黍就会适时地让我开心起来。有一次我考试考砸了，明明很认真地复习，却差点不及格。心情糟糕透顶时蜀黍打来电话，无限同情地为我献歌一曲。“你的所得还那样少吗？你的付出还那么多吗？人生自古就有许多愁和苦，请你多一些快乐，少一些烦恼。”这是我第一次活活地被这首毫无笑点的歌给气笑了。九月底，蜀黍打来电话说:“国庆节有一个礼拜假期，你跟我回去呗，任务很重。”我心里想着以全新身份拜见婆家的时刻到了，但还是明知故问:“什么任务？”\n“第一，回家见我家老爹，以后就再也不用被相亲了，第二，我高中哥们儿结婚，你陪我一起去，这两年都是单枪匹马赴会，叔受够了！”我突然想起很久以前的一件事情，当年蜀黍不肯带我去参加同学聚会，说只有女朋友才可以带过去。这次我终于终结怨念，实现当年的愿望！画个勾勾！耶！\n日期：2013-01-03 19:17:33\n当蜀黍开车拐过他家旁边那个路口，立即看见他家一帮子人在门口候着，连那只卷毛的土狗都乐颠颠地站在路口。我吓得寒毛都竖了，我都来过两趟了，大家别客气啊！当我忐忑不安地从副驾座上走下来，他爸愣了好一会儿，他堂妹倒是很快接受这个残酷的现实，叫她的宝宝喊我“小舅妈”。虽然这个称呼比阿姨还要老气，但我还是愉快地答应了，咱们成年人就是心态好。由于以前就往他家跑过两趟，蜀黍的爸爸对我颇为了解，他说很久以前就琢磨过我和蜀黍的关系，但又想到我当时年龄太小，于是没有细想。蜀黍送我回家时，他爸爸又把我拉到旁边，认真地问:“你说实话，他不是请你回来糊弄我的吧？”\n我一乐就随口答道:“您想多了……”他高中同学的婚礼则简单许多，我只要扮演乖巧小妞就行了，他同学喊他玩炸金花，我就翻包数一千块钱给他，这种小老板娘的感觉太爽了。他哥们儿看我年龄小，有点不确定地问:“这小女孩谁啊？”\n蜀黍淡定地说:“鄙人贱内。”然后他又摆出一副大男子主义的架势，问我:“快说你是不是我的贱内。”我抱着他的胳膊可怜巴巴地抬眼看他:“奴家正是。”他那帮男女同学都会看着我笑，姐姐们会很温柔地摸我的长发。我喜欢蜀黍，喜欢蜀黍的家人，喜欢蜀黍的所有朋友。\n日期：2013-01-03 19:56:16\n在我们那座城市，冬至是一个很重要的节日，要敬祭祖宗。尽管即将面临各种课程和英语六级的考试，但我还是跑回家去了，因为我麻麻被邻居大婶大妈宣扬的世界末日停电三天多备蜡烛的谣言搅得心神不宁。也是在12月20日的晚上，我在洗澡时麻麻翻我手机，翻到我趴在蜀黍的后背上傻笑的自拍照，背景是濠河的一艘小艇，这样的亲昵绝不会是简单的朋友，何况蜀黍明显比我大。“不是说不谈了吗？怎么还在一起？你还是一个孩子，他那么大一个人怎么就不对你负责一点？”\n我妈说着说着就开始怀疑自己的教育，说对我的关心少，我才会这么不知道保护自己，说着说着直抹眼泪。如果是以前，我肯定会和她争吵，但我还是忍住了。我给她擦眼泪，说:“你又没见过他，怎么知道他是什么样儿的人，要不明天让他回来给你过目，你说不行就不行，怎样？”\n我麻麻想了想就同意了，而我打电话给远在上海的蜀黍，本来让他用“没放假”来堵一下，不料他非常镇定地说“行，我现在就回去。”当时晚上十点多。\n日期：2013-01-03 22:17:05\n尽管对蜀黍很有信心，但我对麻麻很不放心，怕她固执地对蜀黍怀有不好的印象，明天对蜀黍百般刁难。当夜我抱着枕头跑到麻麻床上，这是八九年来我第一次和她一起睡。我把我与蜀黍的八年交往历程讲述出来，告诉她那是一个带我穿越整个懵懂青春的兄长，一个对我百般呵护的蜀黍，一个可以随时向我提供庇护的靠山，一个我愿穷极此生跟随其步伐的爱人。麻麻一开始还与我争辩，但慢慢地她不说话了，默默地听着。最后，她说:“只要你过得好，不受委屈，那什么都好。我之所以那么担心，是怕你以后在娘家这里得不到支持，在婆家那边又得不到宠爱，到时候我万一不在人世了你就得一个人扛了呀。”我心头一动，伸手摸妈妈的脸，湿湿的满是泪水。我不知道该说什么，只能搂住麻麻，就像小时候她抚慰我一样。蜀黍在我家那个小区住了一年，轻车熟路地摸上门来。他穿着一件黑色大衣，里面是笔挺的西装，一副年少得志的模样。我开门看见他的那一瞬间，小心脏都要融化了，我的小蜀黍今天就要变成我们家的女婿了呀！蜀黍工作多年，待人接物的礼节滴水不漏，但这些并没有让他加分，麻麻的态度还是有些客套和冷淡。一顿午饭下来，她就问一些工作怎样，待遇如何，家有几丁几口之类的无聊问题。但最后麻麻忽然说:“我们家努努以后是要考研的，至少三四年才能出校门，你都这么二十六了，家里不急吗？”\n我笑容僵住了，因为这是我无法寻找到答案的问题。但蜀黍思索片刻，说:“急的是心愿，不是时间，如果努努想考研，我可以慢慢等。”麻麻不动声色地看我一眼，尽管没有什么表情，但我看得出来，麻麻的情绪非常好。那天饭后蜀黍就告辞了，我把他送到楼下，他上车前抱了我一下，叹息一声说:“哎，叔真想把自己冰冻起来，等你长大一点再醒过来。”我安慰他说:“蜀黍乖，我每天都吃多一点，长得快一点。”“饲料不要钱啊？”\n蜀黍白我一眼，傲然离去。当我心情忐忑地回到家里，麻麻正在吃蜀黍带来的橘子，她递给我半只，说:“还挺甜的，尝尝。”麻麻拍了拍我的肩膀，收拾餐桌去了，我嚼着橘瓣，内心豁然开朗，掏出手机给蜀黍发了一条短信:“蜀黍，从今天起，努努就是你家的小孩了。”\n日期：2013-01-03 23:21:19\n努努和蜀黍的八年抗战故事到了这里就要告一段落了，有人喜欢，也有人不喜欢，但无论无论，对大家而言这都是别人的故事，别人的故事永远是一出戏。事不关己，至多嗟叹，人走茶凉，看戏时的悲欢都不会被带走。只希望，有那么一瞬间，它曾经暖过你的心。完结！走你！\n","permalink":"https://seewang.me/zh/fu-he-luo-li/","summary":"\u003cblockquote\u003e\n\u003cp\u003e这是一篇很久之前有幸看的到的直播文，女主大约和我同龄，读起来异常亲切，非常喜欢而收藏至今。\u003c/p\u003e\n\u003cp\u003e原文大概出自天涯，但地址已不可考，网上只能找到各种转载且阅读体验比较差，于是我在这发出来，希望能有更多人喜欢。\u003c/p\u003e\n\u003cp\u003e全文三万六千字，阅读时间大约为一个半小时。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e作者：离退休老萝莉\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我的故事只讲成败，不论正邪，那些义愤填膺的人不要恼不要急，别为了一个千里之外的故事，素不相识的陌生人白白耗光满满一管怒气，伤了身体。\u003c/p\u003e\n\u003cp\u003e本帖纪念我与蜀黍的八年，谢谢你带我走过整个懵懂且美好的青春，我今年20岁整，蜀黍26岁，我们相识的那年，我12岁，他18岁。\u003c/p\u003e\n\u003cp\u003e为星座爱好者补充：巨蟹妹，白羊叔。\u003c/p\u003e","title":"[腹黑萝莉]我从十二岁开始破坏叔叔五次恋爱"},{"content":"想必大家都已经听说过了HTTP2的各好处，安全，性能，等等等等。。。\n而在Nginx上启用HTTP2又特别简单\n首先你得满足这些条件：\nNginx \u0026gt; 1.9.5 OpenSSL \u0026gt; 1.0.2 然后只要在服务器配置文件中的，把 http2 加在后面 listen 443 ssl就OK了\nserver { listen 80; server_name seewang.me www.seewang.me; return 301 https://seewang.me$request_uri; } server { listen 443 ssl http2; server_name seewang.me www.seewang.me; #rest of config... } 要验证HTTP2，可以在Chrome开发者工具中的网络选项卡,只要在下面的标题中右键，然后选中协议，就能看到使用的协议了\n","permalink":"https://seewang.me/zh/seewang-me-qi-yong-http2-la/","summary":"\u003cp\u003e想必大家都已经听说过了HTTP2的各好处，安全，性能，等等等等。。。\u003cbr\u003e\n而在Nginx上启用HTTP2又特别简单\u003c/p\u003e\n\u003cp\u003e首先你得满足这些条件：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eNginx \u0026gt; 1.9.5\nOpenSSL \u0026gt; 1.0.2\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e然后只要在服务器配置文件中的，把 \u003ccode\u003ehttp2\u003c/code\u003e 加在后面 \u003ccode\u003elisten 443 ssl\u003c/code\u003e就OK了\u003c/p\u003e","title":"为seewang.me启用HTTP2"},{"content":"刚架这个博客的时候就顺便弄了 SSL 证书,用的 StartCom，申请之后除了一年一续，也没去多管。前几天续了证书以后发现 Chrome 仍然不认，查了一下才知道原来 StartCom 作死，已经被 Chrome 和 Firefox 拉黑了。\n于是乎又是一番搜索，发现了现在用的 Let’s Encrypt。\n和 StartCom 不同的是，Let’s Encrypt 提供了一个可以在服务器上运行的程序，签发证书，自动配置 HTTPS（虽然并没有成功），方便了很多。\n根据官方文档，下下来跑一遍就可以了\nwget https://dl.eff.org/certbot-auto chmod a+x certbot-auto ./certbot-auto 但是并不认我Nginx的配置，于是只能先拿证书，再手动配置了。\n./certbot-auto certonly 过程中会提示输出域名和 wwwroot 地址等信息，一步一步来就可以了。具体可以参考官网（https://letsencrypt.org/）,总的来说还算是轻松愉快的。\n","permalink":"https://seewang.me/zh/mian-fei-ssl-zheng-shu/","summary":"\u003cp\u003e刚架这个博客的时候就顺便弄了 SSL 证书,用的 StartCom，申请之后除了一年一续，也没去多管。前几天续了证书以后发现 Chrome 仍然不认，查了一下才知道原来 StartCom 作死，已经被 Chrome 和 Firefox 拉黑了。\u003c/p\u003e","title":"免费SSL证书——Let’s Encrypt"},{"content":"11年夏，为了准备出国，新购入一台戴尔 XPS15 笔记本，一直使用至今。其间屏幕硬盘电池电源都未能经得住岁月的摧残纷纷罢工，但总归不是什么大问题，于是每次都是修修换换，便接着用了，不知不觉也已经整整5年了。\n不过当时的高端配置放在今日早已过时，于是便萌生了换新电脑的想法。\n自小学家里的586退役以后，家里一直都是用的笔记本电脑，虽然携带方便但是性能欠佳，正好最近生活还算稳定，我便将目标锁定在台式机。\n调查研究，购买组装，终于在今天彻底完工，也没有遇到很大的麻烦，总的来说算是一次很有意思的体验。\n","permalink":"https://seewang.me/zh/xindiannao/","summary":"\u003cp\u003e11年夏，为了准备出国，新购入一台戴尔 XPS15 笔记本，一直使用至今。其间屏幕硬盘电池电源都未能经得住岁月的摧残纷纷罢工，但总归不是什么大问题，于是每次都是修修换换，便接着用了，不知不觉也已经整整5年了。\u003c/p\u003e","title":"新电脑"},{"content":"这两天在用yum更新CentOS的时候，出现了软件包重复现错误。虽然已经不是第一次遇到这个问题，但距上次遇到时已经过了很久，早已忘记当时是如何解决的了，结果又花了好久才得以解决，这次吸取教训记下来，以免再忘。。。\n错误信息大致如下：\nError: Package: coreutils-8.4-8.fc13.i686 (@updates) Requires: coreutils-libs = 8.4-8.fc13 Removing: coreutils-libs-8.4-8.fc13.i686 (@updates) coreutils-libs = 8.4-8.fc13 Updated By: coreutils-libs-8.4-9.fc13.i686 (updates) coreutils-libs = 8.4-9.fc13 Available: coreutils-libs-8.4-6.fc13.i686 (fedora) coreutils-libs = 8.4-6.fc13 You could try using --skip-broken to work around the problem ** Found 8 pre-existing rpmdb problem(s), \u0026#39;yum check\u0026#39; output follows: 1:NetworkManager-glib-0.8.1-8.git20100831.fc13.i686 is a duplicate with 1:NetworkManager-glib-0.8.1-6.git20100831.fc13.i686 coreutils-8.4-9.fc13.i686 is a duplicate with coreutils-8.4-8.fc13.i686 coreutils-8.4-9.fc13.i686 has missing requires of coreutils-libs = (\u0026#39;0\u0026#39;, \u0026#39;8.4\u0026#39;, \u0026#39;9.fc13\u0026#39;) freetype-2.3.11-6.fc13.i686 is a duplicate with freetype-2.3.11-3.fc13.i686 1:java-1.6.0-openjdk-1.6.0.0-43.1.8.2.fc13.i686 is a duplicate with 1:java-1.6.0-openjdk-1.6.0.0-42.b18.fc13.i686 mysql-libs-5.1.51-2.fc13.i686 is a duplicate with mysql-libs-5.1.50-2.fc13.i686 poppler-0.12.4-6.fc13.i686 is a duplicate with poppler-0.12.4-5.fc13.i686 setroubleshoot-server-2.2.102-1.fc13.i686 is a duplicate with setroubleshoot-server-2.2.99-1.fc13.i686 解决方法是卸载错误的软件包，并重新更新\n#以grub2为例 rpm -qa |grep grub2 grub2-2.02-0.33.el7.centos.1.x86_64 grub2-tools-2.02-0.33.el7.centos.1.x86_64 rpm -e grub2-2.02-0.33.el7.centos.1.x86_64 yum update ","permalink":"https://seewang.me/zh/centos-gengxincuowu/","summary":"\u003cp\u003e这两天在用yum更新CentOS的时候，出现了软件包重复现错误。虽然已经不是第一次遇到这个问题，但距上次遇到时已经过了很久，早已忘记当时是如何解决的了，结果又花了好久才得以解决，这次吸取教训记下来，以免再忘。。。\u003c/p\u003e\n\u003cp\u003e错误信息大致如下：\u003c/p\u003e","title":"CentOS更新软件包重复错误"},{"content":"我写过的项目们…\nBuy All Steam Games 买下所有Steam游戏要花多少钱？ PHP, Laravel | Apr 2017 | Github Eden 简约WordPress主题。 PHP, WordPress | Nov 2015 | Github Userscripts 自用Userscripts Javascript | Sep 2015 |Github 2048 2048的Java命令行实现。 Java | July 2015 |Github Video Annotation System Video Annotation System 是一个用于标注视频片段，关键帧和物件的标注工具。悉尼大学IT项目。 Java, Spring | Oct 2014 |Github Othello 命令行黑白棋游戏。悉尼大学面向对象设计作业。 Java | May 2014 |Github 佛易 用于文字加密、解密的Chrome扩展。 JavaScript | Apr 2014 | Chrome商店 |Github jquery.totitlecase.js 将jQuery元素中的文本转化为标题大写。 JavaScript | Mar 2014 | Github 猜数字 文曲星猜数字游戏。 JavaScript | Mar 2013 | Github ","permalink":"https://seewang.me/zh/xiang-mu/","summary":"\u003cp\u003e我写过的项目们…\u003c/p\u003e\n\u003cdl\u003e\n\u003cdt\u003e\u003ca href=\"//steam.seewang.me/\" target=\"_blank\"\u003eBuy All Steam Games\u003c/a\u003e\u003c/dt\u003e\n\u003cdd\u003e买下所有Steam游戏要花多少钱？\u003cbr/\u003e\n\u003csmall\u003ePHP, Laravel | Apr 2017 | \u003ca href=\"https://github.com/cwang22/buy-all-steam-games\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003eEden\u003c/dt\u003e\n\u003cdd\u003e简约WordPress主题。\u003cbr/\u003e\n\u003csmall\u003ePHP, WordPress | Nov 2015 | \u003ca href=\"https://github.com/cwang22/eden\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003eUserscripts\u003c/dt\u003e\n\u003cdd\u003e自用Userscripts\u003cbr/\u003e\n\u003csmall\u003eJavascript | Sep 2015 |\u003ca href=\"https://github.com/cwang22/userscripts\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003e2048\u003c/dt\u003e\n\u003cdd\u003e2048的Java命令行实现。\u003cbr/\u003e\n\u003csmall\u003eJava | July 2015 |\u003ca href=\"https://github.com/cwang22/2048\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003eVideo Annotation System\u003c/dt\u003e\n\u003cdd\u003eVideo Annotation System 是一个用于标注视频片段，关键帧和物件的标注工具。悉尼大学IT项目。\u003cbr/\u003e\n\u003csmall\u003eJava, Spring | Oct 2014 |\u003ca href=\"https://github.com/cwang22/video-annotation-system\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003eOthello\u003c/dt\u003e\n\u003cdd\u003e命令行黑白棋游戏。悉尼大学面向对象设计作业。\u003cbr/\u003e\n\u003csmall\u003eJava | May 2014 |\u003ca href=\"https://github.com/cwang22/Othello\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003e佛易\u003c/dt\u003e\n\u003cdd\u003e用于文字加密、解密的Chrome扩展。\u003cbr/\u003e\n\u003csmall\u003eJavaScript | Apr 2014 | \u003ca href=\"https://chrome.google.com/webstore/detail/%E4%BD%9B%E6%98%93/adfkmmjgpnboalejngbodjhhhdabahhf\" target=\"_blank\"\u003eChrome商店\u003c/a\u003e |\u003ca href=\"https://github.com/cwang22/FoyueExtension\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003ejquery.totitlecase.js\u003c/dt\u003e\n\u003cdd\u003e将jQuery元素中的文本转化为标题大写。\u003cbr/\u003e\n\u003csmall\u003eJavaScript | Mar 2014 | \u003ca href=\"https://github.com/cwang22/jquery.totitlecase.js\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003cdt\u003e猜数字\u003c/dt\u003e\n\u003cdd\u003e文曲星猜数字游戏。\u003cbr/\u003e\n\u003csmall\u003eJavaScript | Mar 2013 | \u003ca href=\"https://github.com/cwang22/guessnumber\" target=\"_blank\"\u003eGithub\u003c/a\u003e\u003c/small\u003e\n\u003c/dd\u003e\n\u003c/dl\u003e","title":"项目"},{"content":"在 Linux 下最常用的文本编辑器莫过于 vim，而这篇文章就会介绍 vim 编辑器的使用方法。vi 是 Visual Interface 的缩写，而 vim (VI iMproved) 则是其增加版本。\n与其他编辑器不同，vim 编辑器拥有三种模式\n编辑模式（命令模式） 输入模式 末行模式 每种模式都有其各自的用途与操作方式。\n模式转换 编辑 -\u0026gt; 输入：\ni: 在当前光标所在字符前面，转换为输入模式\na: 在当前光标坐在字符后面，转换为输入模式\no: 在当前光标所在行的下方，新建一行，并转换为输入模式\nI: 在当前光标所在行首，转换为输入模式\nA: 在当前光标所在行尾，转换为输入模式\nO: 在当前光标所在行的上方，新建一行，并转换为输入模式\n输入-\u0026gt; 编辑：\nEsc\n编辑 -\u0026gt; 末行：\n:\n末行 -\u0026gt; 编辑\nEsc\n:q: 退出\n:q!: 不保存退出\n:w: 保存\n:w!: 强行保存(需要管理员)\n:wq或:x: 保存退出\n移动光标 逐字符移动\nh 左\nj 下\nk 上\nl 右\n前面加数字可以一次移动多个字符\n逐词移动 w 移至下个单词词首\ne 移至当前或下个单词词尾\nb 移至当前或上个单词词首\n前面也可以加数字可以一次移动多个单词\n行内移动 0 绝对行首\n^ 行首的第一个非空字符\n$ 绝对行尾\n行间移动 #G 跳到第#行\nG 最后一行\n翻屏 CTRL+f 向下翻屏\nCTRL+b 向下翻屏\nCTRL+d 向下翻半屏\nCTRL+u 向上翻半屏\n删除字符 x 删除光标所在处的字符\n#x 删除光标所在处后#个字符\n删除 d 可以和跳转命令组合使用\n#d跳转符: 一次删除#个跳转范围，例如：#dw, #de, #db\ndd 删除当前光标所在行\n#dd 删除#行\n末行模式下\n:START,ENDd 例如 10,20d\n删除起点终点间的行\n. 表示当前行\n$ 表示最后一行\n+# 向下的#行\n粘贴 p p 粘贴到下方一行或光标后方\nP 粘贴到上方一行或光标前方\n复制 y 用法与删除命令相同\n修改 c 删除内容，再转换为输入模式\n用法与删除命令相同\n替换 r R: 替换模式\n撤销 u 撤销上一次的编辑操作，可以连续使用撤销多次操作，vim 一般在内存缓冲区保存50次操作\n#u 撤销前#次的编辑操作\n重做（redo） CTRL+r 重复上一次操作 小数点(.)\n可视化模式(VISUAL) 选取字符以供编辑\nv按字符选取\nV按矩形块选取\n查找 /PATTERN\n?PATTERN\nn 下一个\nN 上一个\n查找并替换 在末行模式下使用s命令即可实现替换，其语法为\n:[range]:s/PATTERN/REPLACE/[flags] 其中，范围（range）和模式（flags）为可选，例如：\n:s/hello/world/ #将第一个 hello 替换为 world :10,20s/hello/world/g #将10到20行中的所有 hello 替换为 world ","permalink":"https://seewang.me/zh/linux-note-12/","summary":"\u003cp\u003e在 Linux 下最常用的文本编辑器莫过于 vim，而这篇文章就会介绍 vim 编辑器的使用方法。vi 是 Visual Interface 的缩写，而 vim (VI iMproved) 则是其增加版本。\u003c/p\u003e\n\u003cp\u003e与其他编辑器不同，vim 编辑器拥有三种模式\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e编辑模式（命令模式）\u003c/li\u003e\n\u003cli\u003e输入模式\u003c/li\u003e\n\u003cli\u003e末行模式\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e每种模式都有其各自的用途与操作方式。\u003c/p\u003e","title":"Linux学习笔记（十二）——vim编辑器详解"},{"content":"内部命令与外部命令 内部命令是 shell 程序的一部分，其中包含的是一些比较简单的 linux 系统命令，这些命令由shell程序识别并在 shell 程序内部完成运行，通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。内部命令是写在 bash 源码里面的，其执行速度比外部命令快，因为解析内部命令 shell不需要创建子进程。比如：exit, history, cd, echo等。 外部命令是 Linux 系统中的实用程序部分，因为实用程序的功能通常都比较强大，所以其包含的程序量也会很大，在系统加载时并不随系统一起被加载到内存中，而是在需要时才将其调用内存。通常外部命令的实体并不包含在 shell 中，但是其命令执行过程是由 shell 程序控制的。shell 程序管理外部命令执行的路径查找、加载存放，并控制命令的执行。外部命令是在 bash 之外额外安装的，通常放在/bin, /usr/bin, /sbin,/usr/sbin 等位置。 使用type命令可以区分内部命令\ntype cd cd is a shell builtin type -a ls ls is aliased to `ls --color=tty\u0026#39; ls is /bin/ls 可以看出，cd是内部命令而ls是外部命令。\n常用命令 ls: list cd 切换目录\n~: 切换到家目录，cd不加任何参数也可以实现相同的效果。\n~[USERNAME]: 切换到指定用户的家目录\n-:切换到上一次的目录\ntype 查看命令类型\nman 查看mannual\ninfo 在线文档\n/usr/share/doc 文档\ndate 日期\ncal 日历\nvim SPACE 下一屏\nENTER 下一行\nk 前一屏\nb 前一行\n/keyword 向后查找\n?keyword 向前查找\nn 下一个\nN 前一个\n","permalink":"https://seewang.me/zh/linux-bi-ji-1/","summary":"\u003ch3 id=\"内部命令与外部命令\"\u003e内部命令与外部命令\u003c/h3\u003e\n\u003cp\u003e内部命令是 shell 程序的一部分，其中包含的是一些比较简单的 linux 系统命令，这些命令由shell程序识别并在 shell 程序内部完成运行，通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。内部命令是写在 bash 源码里面的，其执行速度比外部命令快，因为解析内部命令 shell不需要创建子进程。比如：exit, history, cd, echo等。 外部命令是 Linux 系统中的实用程序部分，因为实用程序的功能通常都比较强大，所以其包含的程序量也会很大，在系统加载时并不随系统一起被加载到内存中，而是在需要时才将其调用内存。通常外部命令的实体并不包含在 shell 中，但是其命令执行过程是由 shell 程序控制的。shell 程序管理外部命令执行的路径查找、加载存放，并控制命令的执行。外部命令是在 bash 之外额外安装的，通常放在\u003ccode\u003e/bin\u003c/code\u003e, \u003ccode\u003e/usr/bin\u003c/code\u003e, \u003ccode\u003e/sbin\u003c/code\u003e,\u003ccode\u003e/usr/sbin\u003c/code\u003e 等位置。 使用\u003ccode\u003etype\u003c/code\u003e命令可以区分内部命令\u003c/p\u003e","title":"Linux学习笔记（一）：命令类型与常用命令"},{"content":"sed 是 Linux 下的一种流编辑器（Stream Editor），用以处理编辑输入流（文件、管道等）。在使用时，sed 将输入流逐行读进一个叫做模式空间的缓存区，进行编辑处理后再输出。\nsed 的命令语法如下\nsed [options] ‘AddressCommand’ FILE\n参数\n-n 静默模式，不显示模式空间中的内容\n-i 直接修改源文件\n-e SCRIPT 执行脚本，可以同时执行多个( -e SCRIPT -e SCRIPT …)\n-f /PATH/TO/SCRIPT/ 从文件读取脚本\n-r 使用扩展正则表达式 在引号间，可以使用以下定址来决定处理哪些行\nStartLine,Endline 从startLine到Endline之间的行数，$代表最后一行 /RegExp/ 成功匹配RegExp的行 /Pattern1/,/Pattern2/ 第一次匹配Pattern1开始到第一次匹配Pattern2间的行 LineNumber 指定行 StartLine,+N 从StartLine开始向后N行 在定址之后，便可以用命令来决定如何处理刚刚选定的行\nd: 删除符合条件的行\np: 显示符合条件的行\na \\string: 在符合条件的行后追加内容为 string 的新行\ni \\string: ~前\nr FILE 将指定文件的内容添加到符合条件的行后\nw FILE 将地址指定的行另存到指定文件中\ns/pattern/replacement 查找并替换，默认只替换每一行第一次被匹配到的字符串修饰符g: 全局替换i: 忽略大小写\n","permalink":"https://seewang.me/zh/linux-note-11/","summary":"\u003cp\u003esed 是 Linux 下的一种流编辑器（Stream Editor），用以处理编辑输入流（文件、管道等）。在使用时，sed 将输入流逐行读进一个叫做模式空间的缓存区，进行编辑处理后再输出。\u003cbr\u003e\nsed 的命令语法如下\u003cbr\u003e\nsed [options] ‘AddressCommand’ FILE\u003c/p\u003e","title":"Linux学习笔记（十一）——sed命令"},{"content":"Shell shell是指一种提供了访问操作系统内核服务界面的应用程序。Ken Thompson的sh是第一种Unix Shell，而Windows Explorer则是一个典型的图形界面Shell。而Shell脚本（shell script），是则是指为shell编写的脚本程序。\n和其他脚本程序一样，Shell脚本只许一个解释器就可以运行。在Linux下，默认安装了Shell解释器，而其中最为流行的就是bash。\n变量 bash中的变量分为以下几类:\n本地变量，作用域为整个bash进程，在脚本中可以直接使用等于号声明。\nVARNAME=VALUE 局部变量，作用域为当前代码段，需要使用local关键字声明。\nlocal VARNAME=VALUE 环境变量，作用域为当前shell进程及其子进程，需要使用export声明。\nexport VARNAME=VALUE 位置变量\n$0 #脚本的路径+文件名\r$1,$2,... #脚本的参数，当数字大于10时需要加大括号以免混淆（例如${10}）。\r$* #脚本的所有参数\r$# #脚本的参数个数 特殊变量\n$? #上一个命令的执行状态返回值 在shell中，程序执行可能有两类返回值，一是程序的执行结果，也就是平时执行各种命令所返回的数据。二则是程序状态返回代码。为从0到255的数字，其中：\n0：正确执行\n1-255：错误执行\n使用特殊变量就能得到上一条命令的状态返回值。\n脚本在执行时会启动一个子shell进程。命令行中启动的脚本会继承当前shell的环境变量,而系统自动执行脚本（非命令行启动）需要自我定义所需各环境变量。\n在脚本中使用${VARNAME}可以引用变量。在不引起混淆的情况下，大括号可以省略。\n条件判断 在shell中，条件测试可以使用下面的表达式来进行。\n[ expression ] #注意方括号和expression有一个空格\r[[ epxression ]] #注意方括号和expression有一个空格\rtest expression 条件测试的类型共有三种：整数测试，字符测试，文件测试。这里首先介绍最普遍的整数测试。\n整数测试用于测试两个整数之间的关系，与大部分编程语言不同的是，在shell脚本中需要在两个常量或者变量间使用不同操作符的，才可以进行整数测试。\n-eq #=\r-ne #!=\r-gt #\u0026gt;\r-lt #\u0026lt;\r-ge #\u0026gt;=\r-le #\u0026lt;= 逻辑关系 根据短路求值的原则，在逻辑运算符后侧的语句会根据前侧语句的真假而决定是否进行操作，因此使用逻辑运算符可以实现简单的条件判断。\n例如在使用逻辑与（AND）时,第一个条件为假时，第二条件不再判断;而第一个条件为真时，第二条件必须判断。逻辑或（OR）则反之。\n\u0026amp;\u0026amp; #逻辑与, AND\r|| #逻辑或, OR if语句 if CONDITION; then\rstatement\r...\relse\rstatement\r...\rfi 算术运算 在shell脚本中进行算术运算，可以使用以下几种方式：\nlet EXPRESSION\r$[EXPRESSION]\r$((EXPRESSION))\rexpr EXPRESSION\rC=`expr $A + $B` # 表达式各操作数字及运算符之间要有空格，并要使用命令引用 ","permalink":"https://seewang.me/zh/linux-note-10/","summary":"\u003ch3 id=\"shell\"\u003eShell\u003c/h3\u003e\n\u003cp\u003eshell是指一种提供了访问操作系统内核服务界面的应用程序。Ken Thompson的sh是第一种Unix Shell，而Windows Explorer则是一个典型的图形界面Shell。而Shell脚本（shell script），是则是指为shell编写的脚本程序。\u003c/p\u003e\n\u003cp\u003e和其他脚本程序一样，Shell脚本只许一个解释器就可以运行。在Linux下，默认安装了Shell解释器，而其中最为流行的就是bash。\u003c/p\u003e","title":"Linux学习笔记（十）——bash脚本编程：变量、条件判断、算数运算"},{"content":"grep grep是Global search regular expression(RE) and Print out the line的缩写，全面搜索匹配正则表达式的内容并输出。\ngrep家族包括了grep、egrep和fgrep三个命令。其中egrep和fgrep的命令只跟grep有很小的不同。egrep(Extended grep)是grep的扩展，支持更多的正则元字符，而 fgrep（Fixed grep或Fast grep）则把所有的字母都看作单词。\ngrep [OPTIONS] PATTERN [FILE…]\n常用参数\n-i 忽略大小写\n–color 匹配到的文字高亮显示\n-v 显示没有被匹配的行\n-o 只显示被匹配到的字符串\n正则表达式 默认情况下，grep所使用的正则表达式pattern为BRE(Basic Regular Expression)。因此，只在ERE中定义的元字符需要使用反斜线（\\）转义后才能使用，否则会被当做普通的字符来识别。或者直接使用egrep和grep -E来直接使用ERE。\n{} 重复次数 () 分组 重复一次或多次 ? 重复零次或多次 另外，与很多变成语言常用的perl字符集不同，Linux下的正则表达式支持POSIX字符集。因为字符集需要放在方括号里才会被识别，因此在使用时需要在外侧再加一层方括号。\nPOSIX 类 描述 [:alnum:] 字母和数字 [:alpha:] 字母 [:lower:] 小写字母 [:upper:] 大写字母 [:blank:] 空白字符（空格和制表符） [:space:] 所有空格符（空白字符、换行、回车） [:cntrl:] 不可打印的控制字符（退格、删除、警铃） [:digit:] 十进制数字 [:xdigit:] 十六进制数字 [:graph:] 可打印的非空白字符 [:punct:] 标点符号 ","permalink":"https://seewang.me/zh/linux-note-9/","summary":"\u003ch3 id=\"grep\"\u003egrep\u003c/h3\u003e\n\u003cp\u003egrep是Global search regular expression(RE) and Print out the line的缩写，全面搜索匹配正则表达式的内容并输出。\u003c/p\u003e\n\u003cp\u003egrep家族包括了grep、egrep和fgrep三个命令。其中egrep和fgrep的命令只跟grep有很小的不同。egrep(Extended grep)是grep的扩展，支持更多的正则元字符，而 fgrep（Fixed grep或Fast grep）则把所有的字母都看作单词。\u003c/p\u003e\n\u003cp\u003egrep [OPTIONS] PATTERN [FILE…]\u003cbr\u003e\n常用参数\u003cbr\u003e\n-i 忽略大小写\u003cbr\u003e\n–color 匹配到的文字高亮显示\u003cbr\u003e\n-v 显示没有被匹配的行\u003cbr\u003e\n-o 只显示被匹配到的字符串\u003c/p\u003e","title":"Linux学习笔记（九）——grep与正则表达式"},{"content":"计算机的五大部件分别是运算器、控制器（这两部分合称CPU）、存储器（RAM）输入设备和输出设备。\n而在CPU里有三种总线分别实现不同的功能。\n地址总线：内存寻址 数据总线：传输数据 控制总线：控制指令 这三种总线在机器内部这是复用的，因此就需要寄存器暂时储存数据和指令。\n寄存器：CPU暂时存储器 此外，就是I/O设备来实现数据的输入和输出了。\nINPUT设备 OUTPUT设备 在系统设定中\n默认输入设备为标准输入，用STDIN表示，描述符为0 默认输出设备为标准输出，用STDOUT表示，描述符为1 此外还有标准错误输出，用STDERR表示，描述符为2 对于一台计算机来说，默认的情况下：\n标准输入：键盘 标准输出和错误输出：显示器 I/O重定向 有时，默认的输入输出设备并不能满足我们的要求，这时，就要通过I/O重定向来改变默认的输入输出方式。\n输出重定向 ：覆盖输出，原有内容会被覆盖\n：追加输出，保留原有内容\n由于覆盖输出会抹去文件中所有的原本内容，因此十分危险，安全起见，可以使用set命令来开关覆盖输出\nset -C 禁止对已存在的文件使用覆盖输出重定向\nset+C 取消禁止\n2\u0026gt;：重定向覆盖错误输出输出\n2\u0026raquo;：重定向追加错误输出\n\u0026amp;\u0026gt;：重定向标准输出或错误输出至同一个文件\n输入重定向 \u0026lt;：输入重定向 \u0026laquo;：此处文档（Here Document），一种特殊的输入重定向，在\u0026laquo;后会跟一个标示符，当输入读取到标示符时会自动停止。 例如：\ncat \u0026lt;\u0026lt; EOF\r\u0026gt; \u0026gt; 1st line\r\u0026gt; \u0026gt; 2nd line\r\u0026gt; \u0026gt; 3rd line\r\u0026gt; \u0026gt; 4th line EOF\r\u0026gt; \u0026gt; EOF\r\u0026gt; 1st line\r\u0026gt; 2nd line\r\u0026gt; 3rd line\r\u0026gt; 4th line EOF 标示符可以是任何内容，通常会使用EOF(End of File)来作为标示符。在输入标示符时，前后不能有空格或者字符，如上的第4行中的EOF就被作为单纯的输入内容打印了出来。\n管道 |：管道，从前一个命令读取结果作为后一个命令的输出 tee：从标准输入读取，写入到标准输出，并保存到文件。同时实现管道和标准输出，就像一个T型的管道。 例如：\necho \u0026#34;Hello\u0026#34; | /tmp/hello.txt\recho \u0026#34;Hello\u0026#34; | tee /tmp/hello.txt ","permalink":"https://seewang.me/zh/linux-note-8/","summary":"\u003cp\u003e计算机的五大部件分别是运算器、控制器（这两部分合称CPU）、存储器（RAM）输入设备和输出设备。\u003c/p\u003e\n\u003cp\u003e而在CPU里有三种总线分别实现不同的功能。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e地址总线：内存寻址\u003c/li\u003e\n\u003cli\u003e数据总线：传输数据\u003c/li\u003e\n\u003cli\u003e控制总线：控制指令\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e这三种总线在机器内部这是复用的，因此就需要寄存器暂时储存数据和指令。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e寄存器：CPU暂时存储器\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e此外，就是I/O设备来实现数据的输入和输出了。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eINPUT设备\u003c/li\u003e\n\u003cli\u003eOUTPUT设备\u003c/li\u003e\n\u003c/ul\u003e","title":"Linux学习笔记（八）——管道和I/O重定向"},{"content":"某日在网上闲逛，看到食戟之灵中的各种美食的菜谱，而其中的夏里亚宾牛排盖饭的主要食材只需要牛排和洋葱，正好家里都有，工序又十分简单，于是便照着菜谱做了一份。\n家里没有梅子，因此米饭就只是单纯的米饭而已。因为懒，牛排也没有腌足半小时。\n味道还不错。\n","permalink":"https://seewang.me/zh/xialiyabin/","summary":"\u003cp\u003e某日在网上闲逛，看到食戟之灵中的各种美食的菜谱，而其中的夏里亚宾牛排盖饭的主要食材只需要牛排和洋葱，正好家里都有，工序又十分简单，于是便照着菜谱做了一份。\u003c/p\u003e","title":"《食戟之灵》夏里亚宾牛排盖饭"},{"content":"创建用户/组 useradd USERNAME\ngroupadd USERNAME\nuseradd [options] USERNAME\n-u UID\n-g GID 基本组\n-G GID 附加租\n-c ‘COMMENT’ 注释\n-d DIR 家目录\n-s SHELL shell路径\n-m 创建家目录\n-M 不创建家目录\nuserdel 删除用户\nid 查看用户属性信息\nfinger 查看用户账号信息\nusermod 修改用户属性信息\nchsh 修改用户shell(change shell)\nchfn 修改用户finger信息(change finger)\npasswd 密码管理\npwck 检查用户账号完整性\n组管理 groupadd\ngroupmod\ngroupdel\ngpasswd 为组设置密码\nnewgrp 登陆到一个新的组（临时切换基本组） –\u0026gt; exit\n/etc/login.defs 用户默认配置文件\n/etc/shells 当前系统可用的安全shell\n","permalink":"https://seewang.me/zh/linux-note-6/","summary":"\u003ch4 id=\"创建用户组\"\u003e创建用户/组\u003c/h4\u003e\n\u003cp\u003euseradd USERNAME\u003cbr\u003e\ngroupadd USERNAME\u003cbr\u003e\nuseradd [options] USERNAME\u003cbr\u003e\n-u UID\u003cbr\u003e\n-g GID 基本组\u003cbr\u003e\n-G GID 附加租\u003cbr\u003e\n-c ‘COMMENT’ 注释\u003cbr\u003e\n-d DIR 家目录\u003cbr\u003e\n-s SHELL shell路径\u003cbr\u003e\n-m 创建家目录\u003cbr\u003e\n-M 不创建家目录\u003c/p\u003e","title":"Linux学习笔记（六）——用户管理命令"},{"content":"权限类别 在之前的内容里已经提到，Linux的权限分为以下三种:\nr – read – 读取 w – write – 写入 x – execute – 执行 而每一个文件或者目录，又为三种用户类别设置了分别设置了权限:\nu – user – 属主 g – group – 属组 o – other – 其他用户 因此，就有了Linux下的9位一组的权限。\n权限管理 下面这些命令，可以实现对文件的权限管理操作，\nchown 改变属主 chwon是change owner的缩写，因为只有管理员才具有改变属主的权限，因此这条命令只能由管理员执行。\nchown USERNAME file1,…\n-R 递归调用，也修改目录内部的属主\n–reference=/path/to/somefile file1,.. 把文件的属主设置为与somefile相同（不再需要用户名）\nchmod 改变权限 chmod是change mode的缩写，可以改变文件和目录的权限，在参数中可以使用u, g, o指定具体的权限类别，此外还可以用a来代表所有用户。指定权限类别之后，可以使用等于号（=）指定具体权限，加减号（+-）增加或取消权限。\n例如:\nchmod ug=rx,o=w file1 会为属主和属组赋予读取和执行的权限，而为其他用户赋予写入的权限。因此这条命令执行以后，file1的权限就会变成r-xr-x-w-了\nchmod ug+w, o-w file1 会为属主和属组增加写入的权限，而为其他用户取消写入的权限。因此这条命令执行以后，file1的权限则会变成rwxrwx---\nchomd a=rw file1 会为所有用户赋予写入和读取权限，因此file1的权限会变成rw-rw-rw-\numask 遮罩码 创建新文件时，在未指定文件的权限的情况下，系统会为文件设置默认的权限，而默认权限则根据三位数字的遮罩码(umask)计算得出。\n文件默认权限为666减去遮罩码\n目录默认权限则为777减去遮罩码\n文件默认是不能具有执行权限的，如果遮罩码算得的结果中恰好具有执行权限，则系统将会自动将其权限加1。\n使用umask命令可以设置创建文件的默认权限，不带参数执行则会显示当前的umask\n用户登录 站在用户登录的角度来说，Shell的类型分为登录式Shell和非登录式Shell两种。\n登录式Shell包括：\n正常通过某终端登录 使用su - USERNAME切换进入的用户 使用su -l USERNAME切换进入的用户 而非登录式Shell包括:\n使用su USERNAME切换进入的用户 图形终端下打开的命令窗口 自动执行的Shell脚本 这两种Shell的差别体验在配置文件的加载方式上。\nbash的配置文件分别保存在以下位置\n全局配置\n/etc/profile\n/etc/profile.d/*.sh\n/etc/bashrc\n个人配置\n~/.bash_profile\n~/.bashrc\n其中配置文件根据保存的内容又分为：\nprofile类文件:\n设定环境变量 运行命令或脚本 bashrc类文件:\n设定本地变量 定义命令别名 对于登录式Shell读取配置文件的顺序为\n/etc/profile\r/etc/profile.d/*.sh\r~/.bash_profile\r~/.bashrc\r/etc/bashrc 而非登录式shell读取配置文件的顺序为\n~/.bashrc\r/etc/brshrc\r/etc/profile.d/*.sh 两者的区别就在于非登录式用户没有读取环境配置文件。\n","permalink":"https://seewang.me/zh/linux-note-7/","summary":"\u003ch3 id=\"权限类别\"\u003e权限类别\u003c/h3\u003e\n\u003cp\u003e在之前的内容里已经提到，Linux的权限分为以下三种:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003er – read – 读取\u003c/li\u003e\n\u003cli\u003ew – write – 写入\u003c/li\u003e\n\u003cli\u003ex – execute – 执行\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e而每一个文件或者目录，又为三种用户类别设置了分别设置了权限:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eu – user – 属主\u003c/li\u003e\n\u003cli\u003eg – group – 属组\u003c/li\u003e\n\u003cli\u003eo – other – 其他用户\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e因此，就有了Linux下的9位一组的权限。\u003c/p\u003e","title":"Linux学习笔记（七）——权限管理"},{"content":"权限 Linux为了保证安全，为每个文件设置了r、w、x这3种代表不同操作的权限,而对文件和目录，这三种权限的表现方式略有不同。\n对于文件来说，\nr代表可读，可以使用类似cat等命令查看命令内容；\nw代表可写，可以编辑或删除；\nx代表可执行，可以命令提示符下当做命令提交给内核运行；\n而对于目录来说，\nr表示可以对此目录ls以列出内部所有文件；\nw表示可以在此目录创建文件；\nx则表示可以使用cd切换进此目录，也可以使用ls -l查看内部文件的详细信息；\n这些3种权限合为一组，可以用8进制的数字表示出来：\n0 000 — 无权限\n1 001 –x 执行\n2 010 -w- 写\n3 011 -wx 写和执行\n4 100 r– 只读\n5 101 r-x 读和执行\n6 110 rw- 读写\n7 111 rwx 读写执行\n因此，下面这几组三位数字就代表了右边对应的权限：\n755: rwxr-xr-x\n640: rw-r—–\n660: rw-rw—-\n775: rwxrwxr-x\n有了这些数字，就使得修改权限等操作方便了许多。\n用户和组 有了权限之后，就要分配给不同的人来加以区分。而在Linux中，权限的主体分为用户和组(或者叫用户组)两种。用户自然顾名思义，而组则是一个或者多个用户的集合，共享着同样的权限。每个用户拥有自己独立的UID，而用户相关的信息会被储存在etc/passwd中。而相对应的，每个组有唯一的GID，信息则储存在etc/group之下。\n用户的类别被分为管理员和用户两种，其中用户又被分为系统用户和一般用户。管理员的UID固定为0，是系统的管理者，拥有各种操作的所有权限。而用户的UID可在1到65535中取值，在这其中，系统用户的UID为1到499，被操作系统预留用于执行各种命令和程序，而500到60000则是一般用户，一般可登陆的非管理员用户就是这种用户。\n与之相对的，组也有类似的结构，总体分为管理员组和用户组两种，其中用户组又分为系统组和一般组。创建用户时，如果没有为其执行其指定所属的组，系统会自动为其创建一个与用户名同名的组,这个组被叫做私有组或者基本组，而漠然组以外的其他组则被称为附加组。\n当我们访问时/etc/passwd时，就能看到用户的基本信息了，例如：\nseewang:x:1002:1002::/home/seewang:/bin/bash 在这个文件中，每一行代表一个用户，而不同信息的值则用分号隔开。每一列分别是：\naccount passwd UID GID comment HOME_DIR SHELL 而在储存组信息的etc/group中的内容也与之相似。\n影子口令 这些用户的基本信息，在很多情况都会用到，比如把相应的UID转化为用户名，这就要求etc/passwd能够被访问，而passwd中又同时储存了用户的密码，这就带来了许多安全问题。为了解决这个问题，现在大多数的Linux系统都采用了影子口令（shadow）来保证用户的密码安全。在启用了shadow之后，用户和组的密码将不再储存在原来的位置，而是在被加密之后，储存在etc/shadow和etc/gshadow之下。在上面的例子中，本应是密码的第二项中只有一个x,这就是启用shadow后的结果。\n加密方法 为了保护信息，加密是一种非常必要的手段。一般加密的方法分为下面几类：\n对称加密：加密和解密使用同一个密码\n公钥加密：每个密码成对出现，一个为私钥(secret key)，一个为公钥(public key)\n单向加密（散列加密）：提取数据特征码进行加密\n其中单项加密就是用来加密密码的方法。这种方法具有雪崩效应的特性，即在使用这种方法时，即使数据仅有少许不同，也会引发雪崩效应，使加密的结果完全不同。同时，这类方法又能定长输出，即而结果会以固定长度被输出。比较著名和常用的算法有：\nMD5: Message Digest 128位定长输出\nSHA1: Secure Hash Algorithm 160位定长输出\n","permalink":"https://seewang.me/zh/linux-note-5/","summary":"\u003ch3 id=\"权限\"\u003e权限\u003c/h3\u003e\n\u003cp\u003eLinux为了保证安全，为每个文件设置了r、w、x这3种代表不同操作的权限,而对文件和目录，这三种权限的表现方式略有不同。\u003c/p\u003e\n\u003cp\u003e对于文件来说，\u003cbr\u003e\nr代表可读，可以使用类似cat等命令查看命令内容；\u003cbr\u003e\nw代表可写，可以编辑或删除；\u003cbr\u003e\nx代表可执行，可以命令提示符下当做命令提交给内核运行；\u003c/p\u003e\n\u003cp\u003e而对于目录来说，\u003cbr\u003e\nr表示可以对此目录ls以列出内部所有文件；\u003cbr\u003e\nw表示可以在此目录创建文件；\u003cbr\u003e\nx则表示可以使用cd切换进此目录，也可以使用ls -l查看内部文件的详细信息；\u003c/p\u003e\n\u003cp\u003e这些3种权限合为一组，可以用8进制的数字表示出来：\u003c/p\u003e","title":"Linux学习笔记（五）：用户及权限"},{"content":"说起科幻，常常让人联想起类似浩瀚的宇宙，冰冷的机械之类的画面。因此当我某日在网上闲逛看到《自新世界》的介绍和下面这张封面图时，就无论如何也想不通为什么这部作品会被打上科幻的标签。看到普遍的评价还不错，于是我决定追一下这部2012年的老番。起初只是每天睡前一集慢慢地追，不过当追到动画后半剧情起飞以后，便一发不可收拾。于是在这个周末连续看了七八集之后终于补完全片。\n总的来说，整片一直处在一种压抑的氛围之下，却不断地讲述着各种奇特的故事，引人入胜，有着原作的三部获奖小说撑腰，本作内容充实逻辑缜密，虽说用了很大篇幅叙述了主人公们少年时代的事，却完全没有泳装回/学园祭回等等俗套情节，单凭这一点就甩开许多迎合主流的作品整条街。而剧情更是跌宕起伏，让人几乎没有时间思考。\n如果你还没看过《自新世界》，并且喜欢悬疑/科幻/剧情系的作品，那么这部动画十分值得一看。不过TV版貌似因为经费不足的原因前半段作画崩坏，因此最好尽量选择BD源。而且因为有悬疑/剧情的要素，如果被剧透会大大降低观看体验，因此如果喜欢看弹幕版的同学也最好在一周目关弹幕观看。（话说B站又是TV源又各种科普剧透弹幕，实在是不能看。。。）\n剧透内容点击展开\n故事以全篇早季的经历叙述，而这种设定给观众留下了丰富的想象空间。真里亚和守逃离镇子之后，便再也没有与早季相遇，因此便再也没有对两人的描述，取而代之的却是两人的尸骨被送回镇子、孩子被化鼠当做同类养大的冰冷事实，而中间发生的残酷故事却完全没有交代，全凭观众想象。即使是已经看完了全片，两人的境遇仍然让我不能释怀，只留下一种求不得的空虚感。而主人公们生活的反乌托邦社会也只是作为一种既定事实被慢慢铺开，科技的进步却摧毁了繁荣，而为了生存人类不得不时刻小心翼翼，让人痛恨却又无可奈何。\n总而言之，《自新世界》算是一部难得的冷门佳作，强力推荐。\n“对抗虚伪的神”——自新世界\n","permalink":"https://seewang.me/zh/shinsekai-yori/","summary":"\u003cp\u003e说起科幻，常常让人联想起类似浩瀚的宇宙，冰冷的机械之类的画面。因此当我某日在网上闲逛看到《自新世界》的介绍和下面这张封面图时，就无论如何也想不通为什么这部作品会被打上科幻的标签。看到普遍的评价还不错，于是我决定追一下这部2012年的老番。起初只是每天睡前一集慢慢地追，不过当追到动画后半剧情起飞以后，便一发不可收拾。于是在这个周末连续看了七八集之后终于补完全片。\u003c/p\u003e\n\u003cp\u003e总的来说，整片一直处在一种压抑的氛围之下，却不断地讲述着各种奇特的故事，引人入胜，有着原作的三部获奖小说撑腰，本作内容充实逻辑缜密，虽说用了很大篇幅叙述了主人公们少年时代的事，却完全没有泳装回/学园祭回等等俗套情节，单凭这一点就甩开许多迎合主流的作品整条街。而剧情更是跌宕起伏，让人几乎没有时间思考。\u003c/p\u003e","title":"《自新世界》——不一样的科幻"},{"content":"嘿，欢迎来到我的博客。\n90后程序员一枚，技术宅。\n生在东北，长在安徽，现居悉尼。\n没事的时候喜欢玩游戏，看动漫，以及其他各种有的没的。\n所以你会在这里看到以上各种话题，希望你能喜欢。\n","permalink":"https://seewang.me/zh/guan-yu-wo/","summary":"\u003cp\u003e嘿，欢迎来到我的博客。\u003c/p\u003e\n\u003cp\u003e90后程序员一枚，技术宅。\u003c/p\u003e\n\u003cp\u003e生在东北，长在安徽，现居悉尼。\u003c/p\u003e\n\u003cp\u003e没事的时候喜欢玩游戏，看动漫，以及其他各种有的没的。\u003c/p\u003e\n\u003cp\u003e所以你会在这里看到以上各种话题，希望你能喜欢。\u003c/p\u003e","title":"关于我"},{"content":"什么是bash 说到bash,就不得不提到shell。\n在Linux中，shell是直接和内核交互的最低层的应用程序从而实现用户和计算机交互。shell有很多种,而bash则是其中的一员。bash的功能相对气筒shell来说功能更为强大，又是开源软件，因此成为了大多数Linux系统的默认shell。\n当用户登录系统后，系统就为当前用户建立了一个进程用来运行bash,不用的用户之间互不影响。\nbash特性 作为一款功能强大的shell，bash提供了很多特性，可以大大简化我们的操作，其中大致包括：\n命令历史、命令补全 管道和重定向 命令别名 命令行编辑 命令行展开 文件名通配 变量 编程 命令行编辑 在bash的输入过程中，可以通过下面的命令实现命令行编辑：\nCTRL+A 跳转到行首\nCTRL+E 跳转到行尾\nCtrl+←/→ 跳转到上/下一个字段\nCTRL+U 删除光标到行首\nCTRL+K 删除光标到行尾\nCTRL+L 清屏\n命令历史 bash会自动记录执行过的命令保存在缓冲区中，直接使用上下箭头就可以查看。而在用户退出的时候，bash会将这些命令保存在~/.bash_history下，使用history命令就可以查看。\nhistory 查看命令历史\n常用参数：\n-c #清空历史\n-d [offset] [n] #删除offset位置的n条历史\n-w #写入缓存到历史文件\n此外也有一些使用技巧可以调用命令历史：\n!n #执行命令历史中的第n条命令\n!n #执行命令历史中的第n条命令\n!-n #执行命令历史中的倒数第n条命令\n!! #执行上一条命令\n![string] #执行命令历史中最近一个以string开头的命令\n!$ #引用前一个命令的最后一个参数,也可以按Esc再按.,又或者使用ALT+.，都可以实现相同的功能\n命令补全，路径补全 当在输入命令或者路径的时候，bash可以尝试补全命令或路径，当可能唯一的时候，按下Tab键就会自动补全，而当有多个可能的时候，连续按两次Tab则会打印出所有可能以给出建议。\n不过内部命令不能被自动补全，因为命令补全的机制是搜索PATH路径下的可执行文件，而内部命令已经直接储存在缓存中了。\n命令别名 bash提供了alias命令让用户可以为命令设置别名以方便操作。语法如下：\nalias CMDALIAS=’COMMAND [options] [arguments]’\n在shell中定义的别名仅在当前的shell的生命周期中有效，也不会影响到其他shell进程。而在bash的配置文件中定义别名可以实现永久和全局有效。\nalias #不带参数直接使用可以显示当前生效的所有别名\nalias [CMDALIAS] #取消别名\n命令替换 使用$(COMMAND)或者COMMAND（反引号）可以把命令中的某个子命令替换为执行过程。比如：\necho \u0026#34;current DIR is $(pwd)\u0026#34;\rcurrent DIR is /root 其中的pwd命令就被执行并输出了结果。\nbash中对不同的引号有不同的释义：\n单引号（’）：强引用，不进行变量替换；\n双引号（”）：弱引用，可以实现变量替换；\n反引号（`）：命令替换，和$(COMMAND)相同。\n因此，如果把上面例子中的双引号换成单引号，pwd命令就不会被执行了\necho \u0026#39;current DIR is $(pwd)\u0026#39;\rcurrent DIR is $(pwd) 文件名通配 和DOS下的文件名通配类似，比如\n*：任意长度的任意字符\n?：任意单个字符\n[]：匹配指定范围内的任意单个字符\n此外，还有可以用下面的表达式来匹配一些特定的字符\n[:space:]：空白字符\n[:punct:]：标点符号\n[:lower:]：小写字母\n[:upper:]: 大写字母\n[:alpha:]: 大小写字母\n[:digit:]: 数字\n[:alnum:]: 数字和大小写字母\n","permalink":"https://seewang.me/zh/linux-note-4/","summary":"\u003ch3 id=\"什么是bash\"\u003e什么是bash\u003c/h3\u003e\n\u003cp\u003e说到bash,就不得不提到shell。\u003cbr\u003e\n在Linux中，shell是直接和内核交互的最低层的应用程序从而实现用户和计算机交互。shell有很多种,而bash则是其中的一员。bash的功能相对气筒shell来说功能更为强大，又是开源软件，因此成为了大多数Linux系统的默认shell。\u003c/p\u003e\n\u003cp\u003e当用户登录系统后，系统就为当前用户建立了一个进程用来运行bash,不用的用户之间互不影响。\u003c/p\u003e\n\u003ch3 id=\"bash特性\"\u003ebash特性\u003c/h3\u003e\n\u003cp\u003e作为一款功能强大的shell，bash提供了很多特性，可以大大简化我们的操作，其中大致包括：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e命令历史、命令补全\u003c/li\u003e\n\u003cli\u003e管道和重定向\u003c/li\u003e\n\u003cli\u003e命令别名\u003c/li\u003e\n\u003cli\u003e命令行编辑\u003c/li\u003e\n\u003cli\u003e命令行展开\u003c/li\u003e\n\u003cli\u003e文件名通配\u003c/li\u003e\n\u003cli\u003e变量\u003c/li\u003e\n\u003cli\u003e编程\u003c/li\u003e\n\u003c/ol\u003e","title":"Linux学习笔记（四）：bash特性"},{"content":"博客搬了家后，我一直遇到这么一个问题，WordPress 不断提示有翻译需要更新，点了更新后提示更新成功，但返回 Dashboard 却仍然继续提示更新，无限循环，虽然没有什么影响，但作为一个半强迫症患者，天天对着一个小红点无疑是种折磨。\n因为在正常模式下没有给出错误信息，所以打开 debug 模式，再次进入到 updates 的页面，发现在页面上方打出的错误信息：\nWarning: scandir is disabled for security reason.... 可以得知scandir()函数由于安全原因被禁用了，所以无法完成更新。\n我的主机是 LNMP 环境,默认情况下 PHP 是禁用这个函数的。修复这个问题就很简单了，找到 php.ini，搜索 disable_functions， 删掉其中的scandir参数,保存后重启php-fpm,再回到博客的 updates 页面，重新更新一下就OK了。\n","permalink":"https://seewang.me/zh/wordpress-update/","summary":"\u003cp\u003e博客搬了家后，我一直遇到这么一个问题，WordPress 不断提示有翻译需要更新，点了更新后提示更新成功，但返回 Dashboard 却仍然继续提示更新，无限循环，虽然没有什么影响，但作为一个半强迫症患者，天天对着一个小红点无疑是种折磨。\u003c/p\u003e","title":"解决WordPress无限提示翻译更新"},{"content":"文件操作 关于文件操作，首先自然是文件的创建与删除，比较简单的是下面三个。\nmkdir 创建目录\nrmdir 删除目录\nrm 删除文件\nrm -r 可以用来删除非空目录，不过每删除一个文件都会询问是否删除，所以经常使用rm -rf来忽略提示，不过由于Linux下没有回收站，也不阻止用户删除重要文件，因此这个命令非常危险，需要慎用。\ntouch touch命令的本意是改变文件的timestamp,但如果路径下没找到目标文件，就会创建一个新文件了。\nnano/vi 这些两个都是文本编辑器命令，正常的用法是用该文本编辑器打开文件，如果没有目标文件，也会创建新文件。\ncp 复制文件 copy的缩写。可以复制一个文件到一个文件，也可以复制一个文件到一个目录。通常只有最后一个参数是复制目的地，而前面都是源。如果有多个源的话，那么目标就必须为目录了。\n常用参数：\n-r 递归复制一个目录\n-p 保留属主时间戳\n-d 保留所有属性\n-L 相当于–dereference，保持连接\n-P 相当于–no-dereference，忽略连接\n-a 归档存放 常用于备份\nmv 移动文件 move的缩写。和cp的用法类似\nmv -t 首先指定目标\ninstall 带属性复制 nstall和cp类似，也可以复制文件。但install可以更加明确地控制目标文件的属性。与copy不同的是，默认情况下install复制后的文件是具有执行权限的。\n常用参数：\n-d 创建目录\n-m 指定权限\n-t 首先指定目标,和mv -t类似\ncat 显示文件 cat是concatenate的缩写，用来链接并显示文件，在只传一个目标参数的情况下可以用来直接显示文件。\n常用参数：\n-n 显示行号\n-E 显示行结束符\n-v 显示其他的非打印字符\n-A 全部显示\n对于linux系统而言，行结束符是$,而对于windows,行结束符是$+换行符，所以很多Linux的文件在windows打开变成了一行。因此，用-E显示行结束符可以用来更加明确地区分这些文件。\nmore/less 分屏显示 用cat命令显示文件的话，会把文件的内容一次性的打印出来，如果文件很长的话，就需要再往回翻，因此就有了more和less。\n使用more命令可以一次显示一屏的内容，按空格键翻页，不过痛苦的是不支持回翻，因此就有人在more的基础上开发了less，除了more这功能之外，又增加了上下键滚屏的功能。因此一般直接使用less就好啦。此外还有most,似乎比less更强大一些。这三个命令有些容易混淆，让很多人摸不清头脑，于是…\nless is more, but more more than more is, so more is less less, so use more less if you want less more. (…) If less is more than more, most is more than less.\n—Slackware Linux Essentials\nhead 查看文件的首部\n查看文件的的前n行，默认n为10。\n常用参数：\n-n 指定n的值\n在Linux中还支持-[number] 来直接指定n的值，例如head -15就可以查看文件的前15行。\ntail 查看文件的尾部 和dead类似，查看文件的后n行。\n常用参数：\n-f 查看文件尾部并不退出，等待显示追加到文件的新内容，常用来检测日志。\ncut 分隔文本 常用参数：\n-d 指定分隔符，默认是空格\n-f 指定显示字段\n这两个命令配合使用可以起到很好的作用，比如：\ncut -d : -f1 /etc/passwd\rroot\rbin\rdaemon\radm\rlp\rsync\r...\rwww 在/etc/passwd储存着用户信息，字段之间用冒号隔开，而第一个字段就是用户名，因此上面的命令就能显示所有的用户名了。\njoin 合并文本 字面意思，好像用的不是很多\nsort 排序 将文本排序，默认的情况下，每一行会按照ASC码降序排序，即首先比较每行第一个字符，从小到大排序，如果相同，再比较第二个字符，以此类推。\n常用参数：\n-n 数值排序\n-r 降序\n-t 字段分隔符\n-k 选定字段\n-u 去除重复\nuniq 去重 去除重复的行，不过只有相邻的两行内容相同才会被判断为重复。\n常用参数：\n-d 只显示重复的行（一次）\n-D 显示所有重复的行（多次）\nwc 文本统计 wc, 当然不是Water Close的缩写，而是Word Count,也就是文本统计。\n常用参数：\n-l 统计行\n-w 统计单词\n-c 统计字符\ntr 字符替换 替换字符，据说配合输出输出重定向非常实用。\n常用参数:\n-d 删除字符集中的字符\n","permalink":"https://seewang.me/zh/linux-note-3/","summary":"\u003ch3 id=\"文件操作\"\u003e文件操作\u003c/h3\u003e\n\u003cp\u003e关于文件操作，首先自然是文件的创建与删除，比较简单的是下面三个。\u003c/p\u003e\n\u003cp\u003emkdir 创建目录\u003cbr\u003e\nrmdir 删除目录\u003cbr\u003e\nrm 删除文件\u003c/p\u003e\n\u003cp\u003erm -r 可以用来删除非空目录，不过每删除一个文件都会询问是否删除，所以经常使用rm -rf来忽略提示，不过由于Linux下没有回收站，也不阻止用户删除重要文件，因此这个命令非常危险，需要慎用。\u003c/p\u003e","title":"Linux学习笔记（三）：常用文件管理命令"},{"content":"一四年十月番《四月是你的谎言》在半年二十二话之后，终于在四月的前夕完结了。 古典音乐，校园恋爱，再加上明快的画风以及独特的叙事，撑起了《四月》，虽然中段剧情有些拖沓，加上悲剧的基调来的有些太过刻意，但《四月》仍不失为一部难得的良番。\n剧透内容点击展开\n耗费了无数的铺垫，作者终于在最终话写死了宫园薰。虽然早早地被剧透了漫画结局，但还是让我突然特别理解那些声称要给作者寄刀片的人的心情。\n总而言之，还是感谢这部作品为我带来的一个个美好的周五早晨。 标题是简贞的名句，图是最终话的一幕，有感而发。\n","permalink":"https://seewang.me/zh/shigasu/","summary":"\u003cp\u003e一四年十月番《四月是你的谎言》在半年二十二话之后，终于在四月的前夕完结了。 古典音乐，校园恋爱，再加上明快的画风以及独特的叙事，撑起了《四月》，虽然中段剧情有些拖沓，加上悲剧的基调来的有些太过刻意，但《四月》仍不失为一部难得的良番。\u003c/p\u003e","title":"《四月是你的谎言》——深情若是一桩悲剧，必定以死来句读"},{"content":"可执行文件格式 Windows与Linux使用了不同的可执行文件格式。Windows使用Portable Executable(PE)， 而Linux则使用Executable and Linkable Format(ELF)。\n根文件系统 虽然Linux有着众多发行版，但使用了同样的标准File Hierarchy System(FHS)，遵循着这个标准的规定，Linux有着相同的根文件系统目录，而不同的目录起着各自的作用。\n/boot 系统文件 /boot目录下储存了系统启动相关的文件，包括内核，initrd以及grub(bootloader)。\n# ls /boot\rconfig-2.6.18-194.el5xen grub initrd-2.6.18-194.el5xen.img message symvers-2.6.18-194.el5xen.gz System.map-2.6.18-194.el5xen vmlinuz-2.6.18-194.el5xen xen.gz-2.6.18-194.el5 xen-syms-2.6.18-194.el5 /dev 设备文件 Linux的核心思想为“一切接文件”，因此，系统的硬件设备在/dev下都有对应的文件。而设备又分为块设备与字符设备。\n块设备：随机访问的设备，按数据块访问，比如磁盘；\n字符设备：线性访问的设备，按字符为单位访问，比如键盘，鼠标，显示器；\n# ls /dev -l\rcrw------- 1 root root 5, 1 Mar 16 04:17 console\rlrwxrwxrwx 1 root root 11 Mar 16 04:05 core -\u0026gt; /proc/kcore\rdrwxr-xr-x 3 root root 60 Mar 16 04:05 disk\rcrw------- 1 root root 10, 63 Mar 16 04:05 evtchn\rlrwxrwxrwx 1 root root 3 Mar 16 04:05 fb -\u0026gt; fb0\rcrw------- 1 root root 29, 0 Mar 16 04:05 fb0\rlrwxrwxrwx 1 root root 13 Mar 16 04:05 fd -\u0026gt; /proc/self/fd\rcrw-rw-rw- 1 root root 1, 7 Mar 16 04:05 full\rprw------- 1 root root 0 Mar 16 04:17 initctl\rdrwxr-xr-x 2 root root 120 Mar 16 04:05 input\rcrw------- 1 root root 1, 11 Mar 16 04:05 kmsg\rsrw-rw-rw- 1 root root 0 Mar 16 04:05 log\r... 可以看到列出文件后，原来文件大小的位置显示了主设备号(Major)和次设备号(Minor)。\n/etc 配置文件 字面意思，大部分为纯文本格式。\n/home 用户的家目录 Linux下个各个用户都在/home下有自己的家目录，一般默认为/home/USERNAME。值得一提的是root用户，作为管理员，root用户的家目录在/root下。\n/lib 库文件 Linux下个各种库文件都是储存在这。\n静态库一般以.a为后缀名，而动态库则是.so(Shared Object）,对应Windows下的.dll。\n/media与/mnt 挂载点目录 /media一般用于挂载移动设备，/mnt一般用于挂载临时的文件系统\n/misc 杂项 用于放置一些不便归类的文件。\n/opt 可选目录 早期用于安装第三方程序，比如早期的Oracle都安装在这个目录下，不过现在约定俗成放在/usr/local/下，因此现在一般没什么用。\n/proc 内核映射文件 /proc其实是伪文件系统，目录下其实并没有文件，而是操作系统的内核映射文件，一般是内核的可调参数或者统计数据。\n/sys 跟硬件设备的相关的属性映射文件 同样是伪文件系统，通常用于实现硬件设备管理\n/tmp 临时文件 /var 可变的文件 /bin与/sbin 二进制可执行文件 这两个目录都用来储存可执行文件，不同的是/bin下一般是用户命令，而/sbin是管理命令\n# ls /bin\rarch dnsdomainname kbd_mode pgawk sync\rawk doexec keyctl ping tar\rbasename domainname kill ping6 taskset\rbash dumpkeys link ps touch\rcat echo ln pwd tracepath\rchgrp ed loadkeys raw ... 比如/bin下，就可以看到很多熟悉的命令。\n/usr 全局共享只读文件 usr是universal shared read-only的缩写，用来存放全局共享只读文件，/usr也下有/bin,/sbin,/lib等目录，与根目录下的不同，/usr下的对应目录并非面向系统，而是其他所有登陆用户。\n同时/usr/local则用来存放第三方软件，而其目录下的/usr/local/bin等目录，自然是面向第三方程序了。\n话说很长一段时间内，我都以为/usr的名字由来是用户user的缩写，而并不明白其中意义，了解这些知识，对理解Linux也会有些帮助吧。\n","permalink":"https://seewang.me/zh/linux-note-2/","summary":"\u003ch3 id=\"可执行文件格式\"\u003e可执行文件格式\u003c/h3\u003e\n\u003cp\u003eWindows与Linux使用了不同的可执行文件格式。Windows使用Portable Executable(PE)， 而Linux则使用Executable and Linkable Format(ELF)。\u003c/p\u003e\n\u003ch3 id=\"根文件系统\"\u003e根文件系统\u003c/h3\u003e\n\u003cp\u003e虽然Linux有着众多发行版，但使用了同样的标准File Hierarchy System(FHS)，遵循着这个标准的规定，Linux有着相同的根文件系统目录，而不同的目录起着各自的作用。\u003c/p\u003e","title":"Linux学习笔记（二）：根文件系统"},{"content":"刚续了域名，换了主机，来来回回折腾了一年，最后到头来还是用回WordPress。不过我美术功底有限，又懒得找主题买主题，于是暂时就默认主题了。还挺好看的不是么。\n之前用的Ghost和Jekyll都是直接用Markdown，十分方便，暂时还没找到可以再WordPress上直接用markdown写博的插件，之前的文章也没法方便的搬过来，有点小纠结。\n","permalink":"https://seewang.me/zh/huiguiwordpress/","summary":"\u003cp\u003e刚续了域名，换了主机，来来回回折腾了一年，最后到头来还是用回WordPress。不过我美术功底有限，又懒得找主题买主题，于是暂时就默认主题了。还挺好看的不是么。\u003c/p\u003e","title":"回归WordPress"},{"content":"很早就以前有了写这么个东西的想法，当时费尽心思总结自己，没发现什么长处，唯独有两个爱好，动漫和小说，就觉得有必要为自己做个总结。但当时懒，加上临近出国各种俗事缠身，也就不了了之。这会儿不想让自己闲下来，于是写写东西，只求流水账一般回顾这走过来的一路，顺便圆了之前的念头。因为从小学到现在读的小说一时半会无法梳理完整，只好先搁置一边，谈谈我这五年动漫路。\n最早接触动漫其实不只五年前，那时初中年少，身旁有一酷爱动漫的挚友，向我大力推荐。我这人一向安于随波逐流，便开始了我的动漫之路。从最开始的柯南，犬夜叉，我发现了这个世界的魅力，于是一发不可收拾。\n上了高中以后，总是在乎周围人的目光，总觉得看动漫是儿童才该有的爱好，却又不舍得放弃，只好藏着掖着，生怕同学朋友知道。这样一直到高三，学业压力所迫不得不选择离开，加上后来沉迷于魔兽世界，直到大二才从新拾起。这时也淡然了许多，不再关心别人的看法，自己高兴就好。曾经看过这么一句话：“没人瞧不起你，因为大家都很忙，没空瞧你”。这句话直到现在也被我引以为真理，也是我当时的写照。再加上当时大把大把的时间，于是我踏进ACG的世界，放肆的挥霍。\n这么一算，大概五年，也应了这个顺口的题目。 从初中到现在，人不可能不成长，动漫吸引我的地方也在变。最初的时候，我被动漫天马行空的想象力和表现力所折服，她独特的表现手法，是电视剧和电影所无法企及的。成熟一些之后，又被青涩的，乌托邦一样的校园爱情所吸引。而后，却是在追求那些激荡灵魂的故事，全世界起伏的巨大潮汐（笑）。\n我从来就不是一个能坚强到不哭的人，却也从来不是那么容易被狗血的情节所打动。这么些年来，动漫之外只有电影《唐山大地震》和小说《昆仑》让我眼眶湿润。但是在动漫上我却载了两次跟头。一次是《交响诗篇》。大概是初中的时候，现在回想，记得的剧情已经所剩无几，但清楚地记得看完结局后，让我嚎啕大哭。或许是当时幼稚，但那种感觉却没有因为时间而消逝。另一次是《Clannad》。大二熄灯后的寝室里，自己都没有意识到，闭上眼睛的时候已经流下了两行泪水。Clannad After Story的那篇花海，我这辈子都不会忘记。\n不知不觉，我对动漫的热情已经开始消散，原来能从早到晚连续的看一整天，现在却是完全无法投入，想的全是别的事。虽不知道我还能坚持多久，但至少不会忘记我曾经如此快乐。\n最后，这是大二时和基友聊天时，给出的我自己心中的动漫前三：\nClannad\n凉宫消失\n钢炼09\n","permalink":"https://seewang.me/zh/anime-road/","summary":"\u003cp\u003e很早就以前有了写这么个东西的想法，当时费尽心思总结自己，没发现什么长处，唯独有两个爱好，动漫和小说，就觉得有必要为自己做个总结。但当时懒，加上临近出国各种俗事缠身，也就不了了之。这会儿不想让自己闲下来，于是写写东西，只求流水账一般回顾这走过来的一路，顺便圆了之前的念头。因为从小学到现在读的小说一时半会无法梳理完整，只好先搁置一边，谈谈我这五年动漫路。\u003c/p\u003e\n\u003cp\u003e最早接触动漫其实不只五年前，那时初中年少，身旁有一酷爱动漫的挚友，向我大力推荐。我这人一向安于随波逐流，便开始了我的动漫之路。从最开始的柯南，犬夜叉，我发现了这个世界的魅力，于是一发不可收拾。\u003c/p\u003e","title":"五年动漫路"}]