-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontent.json
1 lines (1 loc) · 410 KB
/
content.json
1
{"meta":{"title":"LittlePig.CN","subtitle":"someone's Blog","description":"记录 / 回忆 / 分享","author":"ZHZ","url":"http://littlepig.cn","root":"/"},"pages":[{"title":"","date":"2021-01-10T15:51:17.536Z","updated":"2019-08-07T03:28:57.000Z","comments":true,"path":"README.html","permalink":"http://littlepig.cn/README.html","excerpt":"","text":"http://littlepig.cnzhz 的个人主站点,采用 hexo 构建"},{"title":"关于","date":"2016-09-29T14:14:58.000Z","updated":"2019-08-06T15:07:24.000Z","comments":true,"path":"about/index.html","permalink":"http://littlepig.cn/about/index.html","excerpt":"","text":""},{"title":"分类","date":"2021-01-10T15:51:17.939Z","updated":"2019-08-03T15:11:12.000Z","comments":false,"path":"categories/index.html","permalink":"http://littlepig.cn/categories/index.html","excerpt":"","text":""},{"title":"标签","date":"2021-01-10T15:51:18.373Z","updated":"2019-08-03T15:11:02.000Z","comments":false,"path":"tags/index.html","permalink":"http://littlepig.cn/tags/index.html","excerpt":"","text":""}],"posts":[{"title":"X230 UEFI 模式下安装 Debian 需要将 BIOS 中 CSM 关闭","slug":"disable-csm-while-installing-debian-in-uefi-mode","date":"2021-03-22T16:00:00.000Z","updated":"2021-02-23T11:07:04.924Z","comments":true,"path":"posts/2021/03/23/disable-csm-while-installing-debian-in-uefi-mode/","link":"","permalink":"http://littlepig.cn/posts/2021/03/23/disable-csm-while-installing-debian-in-uefi-mode/","excerpt":"","text":"简而言之,需要在 BIOS 中将启动模式设置为 UEFI Only 的同时关闭 CSM ,否则安装优盘在启动菜单选择安装模式后就无响应了,安装完毕后再将 CSM 打开,否则如果有其它系统比如 Windows 就无法进入了。","categories":[{"name":"系统","slug":"系统","permalink":"http://littlepig.cn/categories/%E7%B3%BB%E7%BB%9F/"}],"tags":[{"name":"Linux Debian X230","slug":"Linux-Debian-X230","permalink":"http://littlepig.cn/tags/Linux-Debian-X230/"}]},{"title":"Debian 下安装 Postgresql","slug":"install-postgresql-on-debian","date":"2021-03-20T16:00:00.000Z","updated":"2021-03-21T03:39:30.699Z","comments":true,"path":"posts/2021/03/21/install-postgresql-on-debian/","link":"","permalink":"http://littlepig.cn/posts/2021/03/21/install-postgresql-on-debian/","excerpt":"","text":"配置安装源并安装1234sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -sudo apt-get updatesudo apt-get -y install postgresql postgresql-contrib 修改配置文件1sudo vim /etc/postgresql/11/main/postgresql.conf 添加 1listen_addresses = '*' 修改 data_directory 1data_directory = '/data/postgresql' 创建数据文件夹并设置属性1234mkdir /data/postgresqlchown postgres:postgres /data/postgresqlchmod 0750 /data/postgresqlmv /var/lib/postgresql/13/main/* /data/postgresql/ 启动1pg_ctlcluster 13 main start 或者 1/etc/init.d/postgresql restart 创建用户和数据库例如用户 zhz 和数据库 158.247 12sudo su - postgres -c "createuser zhz"sudo su - postgres -c "createdb 158.247" 进入 postgresql 控制台 1sudo -u postgres psql 输入如下指令对数据库授权 1grant all privileges on database 158.247 to zhz; 修改账户密码,默认 postgres 账户是无密码的,但是只允许本地访问,这里修改 zhz 的密码 1alter user zhz with password 'new-password'; 配置账户远程访问1sudo vim /etc/postgresql/13/main/pg_hba.conf 添加 1host 158.247 zhz 0.0.0.0/0 password 放开防火墙 1iptables -A INPUT -p tcp --dport 5432 -j ACCEPT 重启 1sudo service postgresql restart 之后即可使用数据库客户端工具访问该数据库。","categories":[{"name":"软件","slug":"软件","permalink":"http://littlepig.cn/categories/%E8%BD%AF%E4%BB%B6/"}],"tags":[{"name":"Linux Debian Postgresql","slug":"Linux-Debian-Postgresql","permalink":"http://littlepig.cn/tags/Linux-Debian-Postgresql/"}]},{"title":"MacOS 下 git 账户信息的保存和修改","slug":"git-passwd-manage-on-macos","date":"2021-02-14T16:00:00.000Z","updated":"2021-02-19T04:45:12.341Z","comments":true,"path":"posts/2021/02/15/git-passwd-manage-on-macos/","link":"","permalink":"http://littlepig.cn/posts/2021/02/15/git-passwd-manage-on-macos/","excerpt":"","text":"保存账户信息 在终端命令行中输入: 1git config --global credential.helper osxkeychain 然后在 git 操作中 只要输入一次账号名和密码 ,在之后的操作中 就不需要再次输入了。 修改或者删除账户信息 用钥匙串去更改用户名和密码: 应用程序 -> 实用工具 -> 钥匙串 -> 右上角搜索 git -> 双击登陆 -> 点击显示密码 -> 输入两次账户密码 -> 然后更改即可。","categories":[],"tags":[{"name":"git","slug":"git","permalink":"http://littlepig.cn/tags/git/"}]},{"title":"Visual Studio Code 下 PyLint 的启用","slug":"enable-pylint-on-vscode","date":"2021-02-12T16:00:00.000Z","updated":"2021-02-19T04:45:35.008Z","comments":true,"path":"posts/2021/02/13/enable-pylint-on-vscode/","link":"","permalink":"http://littlepig.cn/posts/2021/02/13/enable-pylint-on-vscode/","excerpt":"","text":"安装 pylint 1pip3 install pylint 在 .vscode 的 settings.json 中启用 1234"python.pythonPath": "/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8","python.linting.enabled": true,"python.linting.pylintEnabled": true,"python.linting.pylintUseMinimalCheckers": false, 注意大部分资料都只提到了 linting.enabled 选项,但其实后边两个才是重要的,开启 pylint 的同时取消默认的最简检测。","categories":[],"tags":[{"name":"python,pylint","slug":"python-pylint","permalink":"http://littlepig.cn/tags/python-pylint/"}]},{"title":"VCSA 日志清理及空间扩容","slug":"remove-logs-or-extend-disks-in-vcsa","date":"2020-09-07T06:30:50.000Z","updated":"2020-09-07T07:43:11.000Z","comments":true,"path":"posts/2020/09/07/remove-logs-or-extend-disks-in-vcsa/","link":"","permalink":"http://littlepig.cn/posts/2020/09/07/remove-logs-or-extend-disks-in-vcsa/","excerpt":"","text":"日志清理ssh 到 VCSA 上,输入 shell 进入控制台 1df -lh 查看空间大小,发现 /storage/archive 占据空间比较大,这里应该是备份日志的地方,里边文件不大但很多,查找并删除 30 天以前的日志 12cd /storage/archive/vpostgresfind * -mtime +30 -exec rm {} \\; 磁盘扩容首先对 VCSA 所在的虚拟机上的磁盘进行扩容,不同版本的 VCSA 磁盘对应的日志文件夹不同,可以先 SSH 进 VCSA 后查看,一般说来就是 VMDISK5/6/7 三个,扩容之后再在 VCSA 的 Shell 中执行如下命令: 1vpxd_servicecfg storage lvm autogrow 或者执行如下脚本应该也可 1/usr/lib/applmgmt/support/scripts/autogrow.sh 如果有服务已经终止,可以使用如下命令重启 1service-control --start --all","categories":[],"tags":[]},{"title":"Debian 下 Typora 通过 PicGo 使用 Gitee 做图床的配置","slug":"use-gitee-as-imagebed-by-picgo-in-typora-under-debian","date":"2020-08-30T02:30:50.000Z","updated":"2020-08-31T14:53:14.000Z","comments":true,"path":"posts/2020/08/30/use-gitee-as-imagebed-by-picgo-in-typora-under-debian/","link":"","permalink":"http://littlepig.cn/posts/2020/08/30/use-gitee-as-imagebed-by-picgo-in-typora-under-debian/","excerpt":"","text":"Windows 下的文章有很多,这里不再赘述,只简单说下 Debian 下的配置过程 Typora 配置自动上传图片在 Typora 的 preferences 中,选择使用 PicGo-Core 作为 uploader,点击 Download or Upgrade 自动下载 picgo 的二进制包,下载后的路径为 ~/.config/Typora/picgo/linux 安装 PicGo 的 Gitee 插件使用 PicGo 的 CLI 来安装插件 12cd ~/.config/Typora/picgo/linux ./picgo install gitee-uploader 配置 PicGo 的图床参数1./picgo set uploader 然后移动下方向键选择 gitee 进行配置 1234567? Choose a(n) uploader gitee? repo: yourid/assets #注意这里要为完整仓库路径,即包括前边的 yourid 部分? branch: master? token: #这里配置你的私人 token? path: images #仓库下的子文件夹? customPath: default? customUrl: () #这两个 custom 参数自动即可 生成的配置文件 config.json 在 ~/.picgo 文件夹下,但 PicGo 的默认的图床是 smms ,手工修改为 gitee 1vim ~/.picgo/config.json 修改完后的配置参数大体如下 12345678910111213141516{ "picBed": { "current": "gitee", "gitee": { "repo": "zhuhuaizhong/assets", "branch": "master", "token": "your token", "path": "images", "customPath": "default", "customUrl": "" } }, "picgoPlugins": { "picgo-plugin-gitee-uploader": true }} 上传图片操作Typora 提供了个 Test Uploader ,不过我的失败了,原因是没有找到上传的文件,可以用 picgo 命令自己测试下 1./picgo u someimage.png 如果返回了地址即表示上传成功。 回到 typora ,现在可以在 md 文档中粘贴图片了,可以看到即时的上传提示。 如果在配置页面同时也勾选了 Apply above rules to online images,则在 typora 中粘贴的网络图片也会自动上传并替换图片链接,当然,没有勾选的话,也可以在图片右键菜单中选择 Upload Image 进行手工上传,不过要注意的是,只有地址是 http:// 或者 https:// 开始的图片才能上传成功, http://// 这种也不行,否则会提示如下错误: 12345fail to parse result image path from: [PicGo INFO]: Before transform[PicGo INFO]: Transforming...[PicGo INFO]: Before upload[PicGo INFO]: Uploading...[PicGo SUCCESS]:","categories":[],"tags":[]},{"title":"Synology DSM 的 OpenVxN 自定义路由设定","slug":"route-control-of-openvxn-of-dsm","date":"2020-08-28T02:30:50.000Z","updated":"2020-08-27T10:46:15.000Z","comments":true,"path":"posts/2020/08/28/route-control-of-openvxn-of-dsm/","link":"","permalink":"http://littlepig.cn/posts/2020/08/28/route-control-of-openvxn-of-dsm/","excerpt":"","text":"这里的路由设定指的是 VxN 客户端的路由设定,只不过是连接 OpenVxN 服务器时自动从服务器获取的但应用在客户端路由规则,典型的应用场景就是希望连接上 OpenVxN 后只对内网网段走 VxN ,其它走原来链路,这样内网外网速度都得兼,当然,你可以在客户端自己通过命令设定路由规则,但显然没有这种方式方便而且便于分发。 步骤: 首先 SSH 到 DSM ,然后 1vim /var/packages/VPNCenter/etc/openvpn.conf 添加类似如下条目即可 12push "route 202.113.0.0 255.255.0.0".....","categories":[{"name":"服务","slug":"服务","permalink":"http://littlepig.cn/categories/%E6%9C%8D%E5%8A%A1/"}],"tags":[{"name":"DSM","slug":"DSM","permalink":"http://littlepig.cn/tags/DSM/"}]},{"title":"设置 Jupyter notebook 宽屏","slug":"jupyter-notebook-full-width","date":"2020-08-07T02:30:50.000Z","updated":"2020-08-07T02:37:11.000Z","comments":true,"path":"posts/2020/08/07/jupyter-notebook-full-width/","link":"","permalink":"http://littlepig.cn/posts/2020/08/07/jupyter-notebook-full-width/","excerpt":"","text":"Jupyter notebook 默认页面宽度过窄,浪费了左右两侧的宽屏空间,自定义宽度其实只需要放置一个 custom.css 即可。 1vim ~/.jupyter/custom/custom.css 添加如下内容,其中宽度根据自己喜好修改即可,然后重新启动 notebook 1.container { width:98% !important; }","categories":[],"tags":[]},{"title":"Debian 下控制台字体的设置","slug":"change-linux-console-font","date":"2020-07-30T02:30:50.000Z","updated":"2020-08-26T13:39:58.000Z","comments":true,"path":"posts/2020/07/30/change-linux-console-font/","link":"","permalink":"http://littlepig.cn/posts/2020/07/30/change-linux-console-font/","excerpt":"","text":"昨天升级了下 debian testing ,发现启动时的控制台字体越发小了,而且锯齿严重,看起来很不爽,于是自定义了下字体,注意这里的控制台指的是启动时图形界面显示之前的文字界面而不是启动后的终端,即 console 而不是 terminal 。 使用向导1sudo dpkg-reconfigure console-setup 在 console 的 encoding 选项中使用 UTF-8 ,在 character set 中选择 Guess optimal character set ,在 sonsole font 的选项中选择 TerminusBold 或者 TerminusBoldVGA ,在 font size 的选项中选择 8x16 ,然后重新登入即可。 直接修改配置文件1sudo vim /etc/default/console-setup 我的如下: 123456789101112# CONFIGURATION FILE FOR SETUPCON# Consult the console-setup(5) manual page.ACTIVE_CONSOLES="/dev/tty[1-6]"CHARMAP="UTF-8"CODESET="guess"FONTFACE="TerminusBoldVGA"FONTSIZE="8x16"VIDEOMODE=# The following is an example how to use a braille font# FONT='lat9w-08.psf.gz brl-8x8.psf' 可以使用 showconsolefont 命令来查看当前控制台字体样式","categories":[],"tags":[]},{"title":"在 Debian 下安装 fcitx5","slug":"install-fcitx5-on-debian-testing","date":"2020-07-01T02:30:50.000Z","updated":"2020-07-31T01:14:13.000Z","comments":true,"path":"posts/2020/07/01/install-fcitx5-on-debian-testing/","link":"","permalink":"http://littlepig.cn/posts/2020/07/01/install-fcitx5-on-debian-testing/","excerpt":"","text":"昨天升级了下 debian testing ,然后 fcitx 就挂了,表现在只有 WPS 中才可以 ctrl+space 打开并输入中文,其它一律无反应,提交了个 bug 后发现有 fcitx5 ,下一代 fcitx,不过都是在 Arch 上装的,尝试在 debian 上安装了下,没想到工作的还挺好。 卸载老版本 fcitx12sudo apt-get remove fcitxsudo apt-get autoremove 安装新版本1sudo apt-get install fcitx5 fcitx5-chinese-addons 一般说来应该还有两个包 fcitx5-qt 和 fcitx5-gtk ,但提示没找到。 修改配置文件注意:不要在开着 fcitx5 的时候修改,否则会被覆盖 1vim ~/.config/fcitx5/profile 加入如下内容(直接拷贝即可) 12345678910111213141516171819202122[Groups/0]# Group NameName=Default# LayoutDefault Layout=us# Default Input MethodDefaultIM=pinyin[Groups/0/Items/0]# NameName=keyboard-us# LayoutLayout=[Groups/0/Items/1]# NameName=pinyin# LayoutLayout=[GroupOrder]0=Default 找个简单的 UI1git clone https://github.com/iovxw/fcitx5-simple-theme.git ~/.local/share/fcitx5/themes/simple 1vim ~/.config/fcitx5/conf/classicui.conf 添加或者修改如下内容: 1234567891011121314151617181920212223242526272829303132333435363738394041424344# 垂直待选列表Vertical Candidate List=False# 界面字体Font="文泉驿微米黑 Regular 10"# 候选词数量PageSize=8# 外观Theme=simple# 联想数量#PredictionSize=10# 是否开启联想#Prediction=False# 是否开启云拼音#CloudPinyinEnabled=False# 云拼音候选词位置#CloudPinyinIndex=2# 双拼方案#ShuangpinProfile=Ziranma# 快捷键定义# 上一页#[PrevPage]#0=minus#1=Up# 下一页#[NextPage]#0=equal#1=Down# 上一个候选词#[PrevCandidate]#0=Shift+Tab# 下一个候选词#[NextCandidate]#0=Tab#[Fuzzy]# 模糊音#[Hotkey]# 繁简转换# 0=Control+Shift+F 设置为系统默认输入法在设置中找到 input-method ,将 fcitx5 设置为默认输入法 注销并重新登录即可","categories":[],"tags":[]},{"title":"给 jupyter notebook 添加自动补全","slug":"add-autocomplete-to-notebook","date":"2020-06-26T02:30:50.000Z","updated":"2020-08-26T13:39:19.000Z","comments":true,"path":"posts/2020/06/26/add-autocomplete-to-notebook/","link":"","permalink":"http://littlepig.cn/posts/2020/06/26/add-autocomplete-to-notebook/","excerpt":"","text":"停掉 notebook1234pip3 install jupyter_contrib_nbextensions -i https://pypi.python.org/simplejupyter contrib nbextension install --userpip3 install jupyter_nbextensions_configurator -i https://pypi.python.org/simplejupyter nbextensions_configurator enable --user 启动 notebook先不要打开文件,然后在顶部的 Nbextensions 标签中选中 Hinterland 即可。","categories":[{"name":"编程","slug":"编程","permalink":"http://littlepig.cn/categories/%E7%BC%96%E7%A8%8B/"}],"tags":[{"name":"python jupyter","slug":"python-jupyter","permalink":"http://littlepig.cn/tags/python-jupyter/"}]},{"title":"python 安装 openpyxl","slug":"pip-install-openpyxl","date":"2020-06-26T02:30:50.000Z","updated":"2020-08-26T13:41:44.000Z","comments":true,"path":"posts/2020/06/26/pip-install-openpyxl/","link":"","permalink":"http://littlepig.cn/posts/2020/06/26/pip-install-openpyxl/","excerpt":"","text":"pandas 写 excel 需要 openpyxl 的支持,直接 pip3 install openpyxl 提示未找到相应版本,只好到 https://pypi.python.org/pypi 去主动下载包,pip 支持直接安装 .tar.gz 和 .whl 的包,不过安装 openpyxl 过程中需要提前安装 jdcal 和 et_xmlfile 两个包,直接搜索下来三个包,依次 pip3 install 即可。","categories":[{"name":"编程","slug":"编程","permalink":"http://littlepig.cn/categories/%E7%BC%96%E7%A8%8B/"}],"tags":[{"name":"python","slug":"python","permalink":"http://littlepig.cn/tags/python/"}]},{"title":"让 gdb 显示数据值时不再截断","slug":"gdb-show-full-string","date":"2020-05-05T02:30:50.000Z","updated":"2020-05-06T10:50:19.000Z","comments":true,"path":"posts/2020/05/05/gdb-show-full-string/","link":"","permalink":"http://littlepig.cn/posts/2020/05/05/gdb-show-full-string/","excerpt":"","text":"gdb 在呈现数据时,默认最多显示 240 个字符(在我在 Linux 环境下是这样的,其它平台有说 200 的,有说其它长度的),后续数据会以省略号显示,这在观察字符串的值时非常不便,甚至会导致一些工具受影响,比如我在 Visual Studio Code 中使用 Debug Visuallizer 时就因为 json 字符串过长被省略导致不能可视化,经过摸索可行的方案如下: 直接执行设置指令如果你在 gdb 环境里,则可以直接执行如下命令 1set print elements 0 其中 0 可以改为你指定的长度,使用 0 表示不截断 解释参见:http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_57.html#IDX353 设置 gdb 的全局配置文件1sudo vim /etc/gdb/gdbinit 其中添加如下语句 1set print elements 0 使用自定的 .gdbinit 文件将上述指令添加到 .gdbinit 然后让 gdb 启动时自动设置也可,如果不能自动加载,则可以在 gdb 环境中使用如下指令加载 1source .gdbinit 或者启动 gdb 时加载 1gdb -command=.gdbinit 在 VS Code 的 Debug Console 中设置1-exec set print elements 0 在 launch.json 中设定示例参见: 1234567891011121314151617181920212223242526272829303132333435{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "g++ build and debug active file", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Enable full length display", "text": "set print elements 0", "ignoreFailures": true } ], "preLaunchTask": "g++ build active file", "miDebuggerPath": "/usr/bin/gdb" } ]}","categories":[{"name":"编程","slug":"编程","permalink":"http://littlepig.cn/categories/%E7%BC%96%E7%A8%8B/"}],"tags":[]},{"title":"解决 MacOS Visual Studio Code 不能调试的问题","slug":"macos-vs-code-cannot-debug","date":"2020-04-01T02:30:50.000Z","updated":"2020-04-02T10:24:11.000Z","comments":true,"path":"posts/2020/04/01/macos-vs-code-cannot-debug/","link":"","permalink":"http://littlepig.cn/posts/2020/04/01/macos-vs-code-cannot-debug/","excerpt":"","text":"最近发现 MacOS Catalina 的 Visual Studio Code 不能调试 C++ 了,翻遍了国内各种资料各种方法无效,不得已准备去啃官方网站的说明,发现这个 https://code.visualstudio.com/docs/cpp/launch-json-reference#_externalconsole ,原来 xcode 更新之后已经不提供 lldb-mi 了,所以 externalConsole 那个配置项即便为 True 也是无效的,仅仅能打开个 Terminal 但是无法执行程序,解决方法如下:安装 CodeLLDB 插件,然后使用其提供的 launch 配置文件即可。 附:tasks.json 和 launch.json tasks.json 12345678910111213141516171819202122232425262728{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "clang++ build active file", "command": "/usr/bin/clang++", "args": [ "-std=c++17", "-stdlib=libc++", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${workspaceFolder}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true } } ]} launch.json , 注意其中的 type 参数 1234567891011121314151617{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "clang++ - Build and debug active file", "type": "lldb", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": ["-arg1", "-arg2"], "cwd": "${workspaceFolder}", "preLaunchTask": "clang++ build active file" } ] }","categories":[{"name":"编程","slug":"编程","permalink":"http://littlepig.cn/categories/%E7%BC%96%E7%A8%8B/"}],"tags":[]},{"title":"VS Code Jupyter 提示 Jupyter Server Not Started","slug":"vscode-jupyter-kernel-not-found","date":"2020-04-01T02:30:50.000Z","updated":"2020-08-26T13:40:32.000Z","comments":true,"path":"posts/2020/04/01/vscode-jupyter-kernel-not-found/","link":"","permalink":"http://littlepig.cn/posts/2020/04/01/vscode-jupyter-kernel-not-found/","excerpt":"","text":"VS Code 支持编辑 Jupyter 的文件格式 ipynb ,并且提供方便的内核变量查看功能,不过部分机器上可能会出现 “Jupyter Server: Not Started” / “No Kernel” 的提示,经过实验有效的解决办法如下: 在系统中安装有 Python 解释器的前提下,双击左下角的选择使用的 Python 解释器,然后运行 Cell 看有没有效果,如果没有效果,按 F1 选择 “Select Interpreter to start Jupyter server” 然后选择要使用的解释器,再次运行某个 Cell 即可。","categories":[{"name":"编程","slug":"编程","permalink":"http://littlepig.cn/categories/%E7%BC%96%E7%A8%8B/"}],"tags":[]},{"title":"virtualenv 提示无法找到 pkg_resources","slug":"virtualenv-pkg-resources-not-found","date":"2020-01-30T02:30:50.000Z","updated":"2020-01-30T10:55:32.000Z","comments":true,"path":"posts/2020/01/30/virtualenv-pkg-resources-not-found/","link":"","permalink":"http://littlepig.cn/posts/2020/01/30/virtualenv-pkg-resources-not-found/","excerpt":"","text":"virualenv -p /usr/bin/python3.7 venv 在执行时提示 12....setuptools pkg_resources pip wheel failed with error code 1 仔细上翻你会发现更详细的信息 1Could not install packages due to an EnvironmentError: 404 Client Error: Not Found for url: https://pypi.tuna.tsinghua.edu.cn/simple/pkg-resources/ 应该是清华的源同步没有完全造成的,据说其他的源也都没有这个 pkg-resources ,只好修改配置使用官方源了 1vim ~/.config/pip/pip.conf 把原有 index-url 注释掉,添加一行保存即可 1index-url = http://e.pypi.python.org/simple","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"Epson L380 在 Debian 下的安装","slug":"install-epson-l380-driver-on-debian","date":"2020-01-12T02:30:50.000Z","updated":"2020-01-14T08:15:24.000Z","comments":true,"path":"posts/2020/01/12/install-epson-l380-driver-on-debian/","link":"","permalink":"http://littlepig.cn/posts/2020/01/12/install-epson-l380-driver-on-debian/","excerpt":"","text":"Epson 的官方英文网站提供了 L380 在 Linux 下的驱动,安装完毕后依旧不能使用,想尽了各种方式,最后成功了,然而也不知道到底是哪个步骤生效的,暂且做一记录吧 表现打印机无响应,关机开机后会打印英文乱码,但是能看到是 Espon L380 Series 的打印机名称。 安装打印管理器12sudo apt-get install cups cups-client ghostscriptsudo apt-get install system-config-printer 安装驱动到 http://download.ebz.epson.net/dsc/search/01/search/ 根据打印机型号搜索 Linux 下的驱动,使用 sudo dpkg -i xxxx.deb 安装。 启用打印机默认打印机状态是 disabled 状态,lpq 结果如下 L380 Series is not readyno entries 使用如下指令启用 1sudo cupsenable L380-Series 或者在 Start->System->Print Settings 双击打印机选择其中的 Enable 虽然打印机启用可以打印了,但是仍然打印的乱码 手工解压安装 ppd应该还是驱动的问题,难道没有安装好 1cd /usr/share/pdd 看到 epson-inkjet-printer-201601w/Epson 文件夹,里边应该是驱动文件,但是是 .gz 格式的,与网上说的 ppd 格式不一致,于是手工解压下 1gunzip Epson-L380_Series-epson-driver.ppd.gz 重新启动 cups 服务 1sudo systemctl restart cups.service 无效,尝试将 ppd 拷贝到 /usr/share/cups/model 1sudo cp Epson-L380_Series-epson-driver.ppd /usr/share/cups/model/ 再次重启 cups 服务。 如果仍然无效,继续进行下一步 更改打印机驱动登录 http://localhost:361 ,这是 cups 的管理界面,选择顶部的 Administrator(不是中间的 Administrtor 帮助) 进入打印机管理界面,然后 manage printers ,修改其中的 L380 Series 打印机中的驱动,依次尝试给出的列表中的 L380 Series 驱动,我貌似选择的最后一个,然后突然就可以正确打印了。","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"更改 Debian 的启动级别","slug":"change-run-level-on-debian","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-14T11:56:03.000Z","comments":true,"path":"posts/2020/01/11/change-run-level-on-debian/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/change-run-level-on-debian/","excerpt":"","text":"Debian 使用 systemd 替换了 init,以前使用 inittab 设定 run level 的方式在 Debian 8 及以后已经失效,新的知识点如下: 系统使用 /etc/systemd/system/default.target 来启动设定,这是一个符号连接,有可能存在也有可能不存在。 真正的启动配置在 /etc/systemd/system 和 /lib/systemd/system 两个文件夹下,其中第一个文件夹存放的是基本系统设定,第二个为发行版自行的设定。1234ls -l /etc/systemd/system/default.target> ... No such file or directoryls -l /lib/systemd/system/default.target> ... /lib/systemd/system/default.target -> graphical.target Debian 默认使用的是 graphical.target ,如果想以文本方式启动只需要将 default.target 指向 multi-user.target 即可。 12cd /etc/systemd/system/sudo ln -s /lib/systemd/system/multi-user.target default.target 不过并不建议直接进行手工设定,systemd 提供了更为直接的指令 1systemctl set-default multi-user.target 或者 1sudo set-default runlevel3.target","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"SSH 提示 diffie-hellman-group1-sha1","slug":"error-diffie-hellman-group1-sha1","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-12T02:05:03.000Z","comments":true,"path":"posts/2020/01/11/error-diffie-hellman-group1-sha1/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/error-diffie-hellman-group1-sha1/","excerpt":"","text":"当 SSH 到就版本的服务器时可能会碰到如下提示信息: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1 此时需要在服务器上进行设定才可以登入 当前用户生效1vim ~/.ssh/config 添加如下参数 12Host *KexAlgorithms +diffie-hellman-group1-sha1 针对所有用户1sudo vim /etc/ssh/ssh_config 末尾添加如下参数 1KexAlgorithms +diffie-hellman-group1-sha1","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"获取机器序列号","slug":"get-machine-serial-number","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-11T14:15:30.000Z","comments":true,"path":"posts/2020/01/11/get-machine-serial-number/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/get-machine-serial-number/","excerpt":"","text":"有时候需要获取机器序列号,即 BIOS 中的 Serial Number,既可以通过开机时进入 BIOS 中查看,也可以在操作系统中通过指令来查看 Windows1wmic bios get serialnumber Linux1dmidecode |grep Serial EXSI1esxcli hardware platform get","categories":[],"tags":[]},{"title":"Debian 英文界面下使用中文输入法","slug":"input-chinese-while-using-english-gui","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-11T15:35:47.000Z","comments":true,"path":"posts/2020/01/11/input-chinese-while-using-english-gui/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/input-chinese-while-using-english-gui/","excerpt":"","text":"Linux 使用中文环境多了有时候会发现部分不完整的翻译或者不准确的翻译实在是很让人不爽,于是便想切换到英文环境下去,但又需要保留中文输入法,毕竟很多地方还是需要录入中文的,Debian 下设置很简单。 重新配置 locales1sudo dpkg-reconfigure locales 选中 zh_CN.* 以及 en_US.UTF-8 选项,然后将 en_US.UTF-8 设置为缺省 locale 修改配置将 LC_CTYPE 参数设置为 zh_CN.UTF-81sudo vim /etc/default/locale 按照如下格式修改 12LANG=en_US.UTF-8LC_CTYPE=zh_CN.UTF-8 退出重新登录","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"Debian 下安装屏幕保护","slug":"install-screen-saver-on-debian","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-12T01:54:20.000Z","comments":true,"path":"posts/2020/01/11/install-screen-saver-on-debian/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/install-screen-saver-on-debian/","excerpt":"","text":"12345sudo apt-get install xscreensaversudo apt-get install xscreensaver-datasudo apt-get install xscreensaver-data-extra sudo apt-get install xscreensaver-glsudo apt-get install xscreensaver xscreensaver-data-extra xscreensaver-gl-extra","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"Mysql 命令行中文乱码","slug":"mysql-client-chinese-display-error","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-12T02:09:10.000Z","comments":true,"path":"posts/2020/01/11/mysql-client-chinese-display-error/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/mysql-client-chinese-display-error/","excerpt":"","text":"mysql 命令行下如果显示中文乱码或者不识别中文字段,可以在打开数据库后使用如下指令 1set names utf8;","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"MySQL创建数据库/用户以及授权","slug":"mysql-create-database-user-privileges","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-12T02:13:18.000Z","comments":true,"path":"posts/2020/01/11/mysql-create-database-user-privileges/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/mysql-create-database-user-privileges/","excerpt":"","text":"创建数据库 1create schema [数据库名称] default character set utf8 collate utf8_general_ci; 采用 create schema 和 create database 创建数据库的效果一样。 创建用户 1create user '[用户名称]'@'%' identified by '[用户密码]'; 密码8位以上,包括:大写字母、小写字母、数字、特殊字符 %:匹配所有主机,该地方还可以设置成 ‘localhost’,代表只能本地访问,例如 root 账户默认为 ‘localhost‘ 权限设定 1RANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON databasename.tablename TO 'username'@'host'; databasename.* 代表整个数据库 修改生效 1flush privileges ; 取消用户所有数据库(表)的所有权限 1revoke all on *.* from tester; 删除用户 1delete from mysql.user where user='tester'; 删除数据库 1drop database [schema名称|数据库名称];","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"UWSGI 提示 No Request Plugin","slug":"uwsgi-no-request-plugin","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-12T02:07:08.000Z","comments":true,"path":"posts/2020/01/11/uwsgi-no-request-plugin/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/uwsgi-no-request-plugin/","excerpt":"","text":"uwsgi 启动出错,无法响应请求 提示如下信息 !!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!!no request plugin is loaded, you will not be able to manage requests.you may need to install the package for your language of choice, or simply load it with –plugin.!!!!!!!!!!! END OF WARNING !!!!!!!!!! 解决方法 1sudo apt-get install uwsgi-plugin-python uwsgi-plugin-python3","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"Remmina 的服务器配置信息在哪里","slug":"where-is-the-remmina-connections-file","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-11T15:15:22.000Z","comments":true,"path":"posts/2020/01/11/where-is-the-remmina-connections-file/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/where-is-the-remmina-connections-file/","excerpt":"","text":"Remmina 是 Linux 下较为常用的服务器管理工具,支持 RDP / VNC / SSH / SFTP 等常用协议 安装1sudo apt-get install remmina remmina-plugins 配置文件Remmina 提供了简单的单服务器导出功能,但如果服务器数量较多,则必须使用直接拷贝配置文件的方式来进行备份,实在是不方便,配置文件所在路径可以尝试如下两个 12~/.remmina~/.local/share/remmina","categories":[{"name":"工具","slug":"工具","permalink":"http://littlepig.cn/categories/%E5%B7%A5%E5%85%B7/"}],"tags":[]},{"title":"X200 高版本 Windows 花屏","slug":"x200-flower-screen","date":"2020-01-11T02:30:50.000Z","updated":"2020-01-20T12:12:24.000Z","comments":true,"path":"posts/2020/01/11/x200-flower-screen/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/x200-flower-screen/","excerpt":"","text":"X200 ,其实不止 X200 ,以前的一些 Thinkpad 老型号都有此问题,就是安装新版本操作系统出现部分屏幕区域花屏现象,用鼠标滑动一下就消失,解决办法有下面几种方式: 关掉 BIOS 中的虚拟化F1 进入 BIOS 后 Disabled 掉 CPU VT-D 选项 关掉集中和独立显卡切换自动切换功能有些型号是双显卡,比如 T400,此时可以关掉显卡的自动切换功能试试 使用容量大小一样的双通道内存内存不一至容易出现此问题,去掉一条小的或者改为一样大的有可能解决此问题。 把容量大的内存插 0 号插槽,即 DIMM0据说是因为显存是从 DIMM0 分配的,如果 DIMM0 容量过小就容易花屏。","categories":[{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"}],"tags":[]},{"title":"A start/stop job is running for ....","slug":"a-start-stop-job-is-running-for","date":"2020-01-10T16:00:00.000Z","updated":"2020-01-11T04:02:05.000Z","comments":true,"path":"posts/2020/01/11/a-start-stop-job-is-running-for/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/a-start-stop-job-is-running-for/","excerpt":"","text":"开关机都变慢了,表现为卡在 A start/stop job is running … 上,此时可以首先尝试如下解决办法 1sudo vim /etc/systemd/system.conf 修改如下两个超时参数 12DefaultTimeoutStartSec=10sDefaultTimeoutStopSec=10s 重新加载 1systemctl daemon-reload","categories":[{"name":"系统","slug":"系统","permalink":"http://littlepig.cn/categories/%E7%B3%BB%E7%BB%9F/"}],"tags":[]},{"title":"A start job is running for raise network interface","slug":"a-start-job-is-running-for-raise-network-interface","date":"2020-01-10T16:00:00.000Z","updated":"2020-01-11T03:58:13.000Z","comments":true,"path":"posts/2020/01/11/a-start-job-is-running-for-raise-network-interface/","link":"","permalink":"http://littlepig.cn/posts/2020/01/11/a-start-job-is-running-for-raise-network-interface/","excerpt":"","text":"系统启动慢,提示 A start job is running for raise network interface … 原因在于系统启动时在不断尝试连接网络,如果网络无法连接,则直到 5 分钟后才会继续 解决办法,修改配置文件减少超时时间 1sudo vim /etc/systemd/system/network-online.target.wants/networking.service 调整如下参数的设置 1TimeoutStartSec=10sec","categories":[{"name":"系统","slug":"系统","permalink":"http://littlepig.cn/categories/%E7%B3%BB%E7%BB%9F/"}],"tags":[]},{"title":"Debian 禁用 IPV6","slug":"disable-ipv6-on-debian","date":"2020-01-09T16:00:00.000Z","updated":"2020-01-10T12:36:45.000Z","comments":true,"path":"posts/2020/01/10/disable-ipv6-on-debian/","link":"","permalink":"http://littlepig.cn/posts/2020/01/10/disable-ipv6-on-debian/","excerpt":"","text":"虽然 IPV6 是大势所趋,奈何部分程序对其支持并不好,所以大部分情形下需要将其禁用。 通过 sysctl 禁用 IPV61sudo vim /etc/sysctl.conf 在尾部添加如下代码 1234# IPv6 disablednet.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1 重载内核参数 1sudo sysctl -p 即可通过 ifconfig 看到 IPV6 地址已经不在 通过 GRUB 禁用 IPV61sudo vim /etc/default/grub 寻找 GRUB_CMDLINE_LINUX 或者 GRUB_CMDLINE_LINUX_DEFAULT 字样的设置项,在其后添加 ipv6.disable=1 字样。 1GRUB_CMDLINE_LINUX="ipv6.disable=1" 保存之后更新 GRUB 即可 1sudo update-grub2","categories":[{"name":"system","slug":"system","permalink":"http://littlepig.cn/categories/system/"}],"tags":[{"name":"IPV6","slug":"IPV6","permalink":"http://littlepig.cn/tags/IPV6/"}]},{"title":"Domain/Addon Domain/Sub Domain/Parked Domain 区别","slug":"domain-addon-sub-parked-difference","date":"2020-01-09T16:00:00.000Z","updated":"2020-01-10T12:25:56.000Z","comments":true,"path":"posts/2020/01/10/domain-addon-sub-parked-difference/","link":"","permalink":"http://littlepig.cn/posts/2020/01/10/domain-addon-sub-parked-difference/","excerpt":"","text":"主机的 cpanel 面板中域名通常有 Main Domain / Addon Domain / Sub Domain / Parked Domain 的选项,下面简单解释下区别。 Domain ,也即 Main Domain ,指的是申请空间时使用的域名,所有的服务都依托于此域名,故称为主域名,对应的网站主目录通常为 /public_html Sub Domain,子域,顾名思义,是 Main Domain 下的二级域名,如主域名为 a.com ,则 b.a.com 就是 Sub Domain ,Sub Domain 的主目录通常设置在主域名目录的下面,如 b.a.com 就可以设置为 /public_html/b ,当然,也可以设置为独立的文件夹。 Addon Domain ,附加域,指的是与 Main Domain 没有关系的其它域名,如果也想使用此空间来放置网站,则可以通过添加 Addon Domain 来实现一空间多站点,添加 Addon Domain 时网站目录通常单独指定一个文件夹,我习惯使用域名来建立文件夹,这样一目了然。添加 Addon Domain 时,部分 cpanel 通常也让设置一个主域名下的子域和其绑定,比如主域为 a.com ,添加一个 Addon Domain 例如 b.com ,添加时设定子域名为 b ,则既可以通过 b.com / www.b.com 来访问,也可以通过 b.a.com 来访问。 Parked Domain,停靠域,指将已有域名挂靠在已有网站上,换句话说,就是多个域名指向同一个网站,所以添加一个 Parked Domain 时,需要选择一个已有网站,通常是主域名来作为停靠对象。","categories":[{"name":"website","slug":"website","permalink":"http://littlepig.cn/categories/website/"}],"tags":[{"name":"domain","slug":"domain","permalink":"http://littlepig.cn/tags/domain/"}]},{"title":"重新安装 ifconfig","slug":"ifconfig-not-found","date":"2020-01-09T16:00:00.000Z","updated":"2020-01-10T12:29:33.000Z","comments":true,"path":"posts/2020/01/10/ifconfig-not-found/","link":"","permalink":"http://littlepig.cn/posts/2020/01/10/ifconfig-not-found/","excerpt":"","text":"ifconfig 已经不被新的 Debian 系统作为默认网络管理工具自带,如果需要,可以使用如下指令安装。 1sudo apt-get install net-tools","categories":[{"name":"server","slug":"server","permalink":"http://littlepig.cn/categories/server/"}],"tags":[{"name":"ifconfig","slug":"ifconfig","permalink":"http://littlepig.cn/tags/ifconfig/"}]},{"title":"为 Network Manager 安装各种类型 VPN 插件","slug":"install-vpn-plugins-for-network-manager","date":"2020-01-09T16:00:00.000Z","updated":"2020-01-10T11:56:00.000Z","comments":true,"path":"posts/2020/01/10/install-vpn-plugins-for-network-manager/","link":"","permalink":"http://littlepig.cn/posts/2020/01/10/install-vpn-plugins-for-network-manager/","excerpt":"","text":"1sudo apt-get install network-manager-pptp network-manager-pptp-gnome network-manager-vpnc network-manager-vpnc-gnome network-manager-ssh","categories":[{"name":"software","slug":"software","permalink":"http://littlepig.cn/categories/software/"}],"tags":[{"name":"vpn plugins","slug":"vpn-plugins","permalink":"http://littlepig.cn/tags/vpn-plugins/"}]},{"title":"Linux 下简单好用的电子邮件客户端","slug":"linux-mail-client","date":"2020-01-09T16:00:00.000Z","updated":"2020-01-19T10:06:22.000Z","comments":true,"path":"posts/2020/01/10/linux-mail-client/","link":"","permalink":"http://littlepig.cn/posts/2020/01/10/linux-mail-client/","excerpt":"","text":"一开始使用的 claws ,简洁如 Berky ,功能也够用,但是有几个 bug 不能忍,后转投 sylpheed ,除了搞不定 live和outlook,其它目前还比较满意。 12sudo apt-get install claws claws-mail-multi-notifiersudo apt-get install sylpheed","categories":[{"name":"software","slug":"software","permalink":"http://littlepig.cn/categories/software/"}],"tags":[{"name":"claws","slug":"claws","permalink":"http://littlepig.cn/tags/claws/"}]},{"title":"git-push-error-on-tuxera-ntfs","slug":"git-push-error-on-tuxera-ntfs","date":"2019-08-07T02:30:50.000Z","updated":"2020-01-11T04:36:53.000Z","comments":true,"path":"posts/2019/08/07/git-push-error-on-tuxera-ntfs/","link":"","permalink":"http://littlepig.cn/posts/2019/08/07/git-push-error-on-tuxera-ntfs/","excerpt":"","text":"现象git 在 push 到远程服务器时出错,提示类似如下信息: 123failed to read object *:Interrupted system call error: failed to push some refs to * 可以表现在直接 push 时,也可以表现在诸如 hexo deploy 等使用 git push 的脚本中。 分析无一例外都发生在如下条件下,MacOS 系统,使用了 NTFS 分区做存储,使用 TuxeraNTFS 做读写,所以,应该是一个 bug 吧 解决方案要么把要提交的文件夹移动到非 NTFS 分区,要么 git 时添加 –force 参数,类似如下格式 1git push origin +master --force","categories":[{"name":"工具","slug":"工具","permalink":"http://littlepig.cn/categories/%E5%B7%A5%E5%85%B7/"}],"tags":[{"name":"git","slug":"git","permalink":"http://littlepig.cn/tags/git/"}]},{"title":"Visual C++ 6.0 基础使用","slug":"vc6-how-to","date":"2017-10-29T16:00:00.000Z","updated":"2017-10-30T12:30:05.000Z","comments":true,"path":"posts/2017/10/30/vc6-how-to/","link":"","permalink":"http://littlepig.cn/posts/2017/10/30/vc6-how-to/","excerpt":"","text":"很久之间写的一篇文章,参见:VC6基础使用教程","categories":[],"tags":[{"name":"vc6","slug":"vc6","permalink":"http://littlepig.cn/tags/vc6/"}]},{"title":"Visual C++ 6.0 绿色安装版","slug":"vc6sp6","date":"2017-10-29T16:00:00.000Z","updated":"2017-10-30T12:32:57.000Z","comments":true,"path":"posts/2017/10/30/vc6sp6/","link":"","permalink":"http://littlepig.cn/posts/2017/10/30/vc6sp6/","excerpt":"","text":"更新了一下很久之前做的一个绿色安装版的 VC6 ,主要是提高了在 win7,win8,win8.1 及 win10 下的兼容性,个人觉得是互联网上能够找到的功能较为完整,兼容性最好的版本了。 下载链接:百度盘","categories":[],"tags":[{"name":"vc6","slug":"vc6","permalink":"http://littlepig.cn/tags/vc6/"},{"name":"c++","slug":"c","permalink":"http://littlepig.cn/tags/c/"}]},{"title":"DSM 下安装 Resilio Sync","slug":"install-resilio-sync-in-dsm","date":"2017-07-06T16:00:00.000Z","updated":"2017-07-07T08:57:37.000Z","comments":true,"path":"posts/2017/07/07/install-resilio-sync-in-dsm/","link":"","permalink":"http://littlepig.cn/posts/2017/07/07/install-resilio-sync-in-dsm/","excerpt":"","text":"Resilio Sync 是基于 bt 技术发展的软件,相比于网盘的好处就是不用担心资源被封锁,所以一些带有版权的资源往往通过这个软件发布,它有各种形式的客户端,群晖DSM上也不例外,这里记录下大体的安装步骤,其实官网上就有,只是不翻看不了而已。https://help.resilio.com/hc/en-us/articles/206664850 首先以管理员权限登录 DSM,进入套件中心,在设置对话框中修改软件来源为任意。 通过 https://www.synology.com/en-us/knowledgebase/DSM/tutorial/General/What_kind_of_CPU_does_my_NAS_have 查看自己 NAS 的 CPU 架构,如果是黑群晖或者虚拟出来的NAS,试试 x64,然后通过 https://help.resilio.com/hc/en-us/articles/206664850 给出的下载地址下载响应的安装包。 在套件中心中通过 手工安装 来安装下载的安装包。 从菜单中启动 resilio sync 的 WEB UI ,第一次启动需要设置一个管理用的账户和密码,并给自己的节点设定一个名字。 此时就可以通过添加别人共享的 key 来同步资源了,如果提示连接数为 0 或者找不到节点,请开启 NAS 的 ssh 并使用 ssh 客户端登录,用 sudo vim /etc/hosts 修改解析记录,添加如下行:54.230.143.112 config.getsync.com config.resilio.com 即可。","categories":[],"tags":[{"name":"synology","slug":"synology","permalink":"http://littlepig.cn/tags/synology/"},{"name":"dsm","slug":"dsm","permalink":"http://littlepig.cn/tags/dsm/"},{"name":"resilio sync","slug":"resilio-sync","permalink":"http://littlepig.cn/tags/resilio-sync/"},{"name":"bt","slug":"bt","permalink":"http://littlepig.cn/tags/bt/"}]},{"title":"Debian 下建立 nginx rtmp 直播服务","slug":"build-media-server","date":"2017-05-29T16:00:00.000Z","updated":"2019-08-08T10:06:12.000Z","comments":true,"path":"posts/2017/05/30/build-media-server/","link":"","permalink":"http://littlepig.cn/posts/2017/05/30/build-media-server/","excerpt":"","text":"突然就想搭个直播平台,虽然还没想到有什么用处,了解了下貌似 obs + nginx + rtmp + jwplayer 是最简单的方案了。 说明:我使用 debian 系统,直接 root 登录。 下载 nginx 源码使用 apt-get source nginx 未成功,不得已直接从 nginx 网站 下载源码 1wget http://nginx.org/download/nginx-1.13.1.tar.gz 下载 rtmp 源码rtmp 模块是非内置模块,所以必须单独下载 1wget https://github.com/arut/nginx-rtmp-module/archive/master.zip 解压源代码123apt-get install unziptar zxvf nginx-1.13.1.tar.gzunzip master.zip 安装编译环境1apt-get install build-essential 安装相应库文件1apt-get install libpcre3 libpcre3-dev libssl-dev 重新编译 Nginx由于我已经使用 apt-get install nginx-full 安装过 nginx,所以想保留原有设置只是新增 rtmp 模块,故先查看原有参数 1nginx -V 在末尾添加新参数然后编译安装 12345 cd nginx-1.13.1 ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6 --add-module=/root/nginx-rtmp-module-master makemake install 修改配置文件1vim /etc/nginx/nginx.conf 在末尾添加 rtmp 配置项,注意其中的 allow 选项,我设置为了任何人可以观看和发布 123456789101112rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; allow publish all; allow play all; } }} 安装 ffmpeg1234sh -c 'echo "deb http://www.deb-multimedia.org jessie main" >> /etc/apt/sources.list'apt-get updateapt-get install deb-multimedia-keyringapt-get install ffmpeg 重启 nginx注意如果开启了防火墙,请先添加规则允许 1935端口 1/etc/init.d/nginx restart 至此,服务器部分就搭建完毕,可以接收 rtmp 协议的推送和播放了,obs 可以作为推送端,vlc 可以作为播放器,如果想网页直接观看,则可以使用 jwplayer 作为前端,注意 jwplayer 在 safari 上可能会提示 media sources not exist,只需要安装并启用 falsh 即可。","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"media","slug":"media","permalink":"http://littlepig.cn/tags/media/"},{"name":"nginx","slug":"nginx","permalink":"http://littlepig.cn/tags/nginx/"},{"name":"rtmp","slug":"rtmp","permalink":"http://littlepig.cn/tags/rtmp/"}]},{"title":"URP综合教务系统外挂","slug":"urp-hack","date":"2017-03-07T16:00:00.000Z","updated":"2017-07-07T08:51:55.000Z","comments":true,"path":"posts/2017/03/08/urp-hack/","link":"","permalink":"http://littlepig.cn/posts/2017/03/08/urp-hack/","excerpt":"","text":"起因北京清元优软科技有限公司在 05 年开发的 URP 综合教务管理系统在很多高校都有使用,悲剧的是,除去教务管理人员,在普通学生和老师的眼里,落下的几乎都是”坏名声”!几乎每个学期开始和结束都会听到诸如“为毛手机查不了成绩”,“为啥打印没反应啊”,“成绩分析单咋没图了”等等的吐槽。 分析通过对 html 代码的分析,早期的前端设计和技术方案适应不了浏览器的高速发展是主因,因为没有服务器的管理权,直接修改源代码是不可行的,也不想利用系统漏洞,所以在思考、实验、排除了 n 种方案之后,使用 nginx 做反向代理 配合 substitute 组件调整代码是相对来说较为容易且可行的解决方案,主要解决三个问题,高速浏览器下超链接不跳转以及无法打印还有无法批量填充成绩。 方案以河北工业大学的为例,教务系统源站为 http://zhjw.hebut.edu.cn (暂称为 A ),我使用的反向代理站为 http://zhjw.scse.hebut.edu.cn (暂称为 B ),反向代理规则中指定了 .php 文件为 B 站本地解析,/assets 资源为 B 站本地资源,其他均为代理 A 站。对应的 nginx 配置文件如下 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122server { server_name zhjw.scse.hebut.edu.cn littledog.cn zhjw.hebut.edu.cn; listen 80; #开启页面压缩 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; #gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-JavaScript text/css application/xml text/javascript; gzip_vary off; gzip_disable "MSIE [1-6]\\."; #反向代理的默认设定 location / { index index.php index.html index.htm; root /data/www/zhjw.scse.hebut.edu.cn/htdocs; #反向代理设置 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; include fastcgi_params; proxy_pass http://zhjw.hebut.edu.cn/; #指定替换类型 subs_filter_types text/html text/css text/xml; #登录后起始页设定为本站 start.php subs_filter '<frame src="" id="mainF"' '<frame src="/start.php" id="mainF"' gi; #指定使用高速浏览模式,但貌似对360浏览器无效,360浏览器对于教育网网站总是启用兼容模式 subs_filter '<head>' '<head><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">' gi; #一些需要修改内容的页面装载 jquery,jqprint,printArea subs_filter '<link href="css/style.css" rel="stylesheet" type="text/css">' '<link href="css/style.css" rel="stylesheet" type="text/css"><script src="/assets/js/jquery-1.8.2.min.js"></script><script src="/assets/js/jquery.PrintArea.js"></script><script src="/assets/js/jquery.jqprint.js"></script>' gi; subs_filter '<link rel="stylesheet" type="text/css" href="styles.css">' '<link rel="stylesheet" type="text/css" href="styles.css"><script src="/assets/js/jquery-1.8.2.min.js"></script><script src="/assets/js/jquery.PrintArea.js"></script><script src="/assets/js/jquery.jqprint.js"></script>' gi; subs_filter '<link href="/css/newcss/project.css" rel="stylesheet" type="text/css">' '<link href="/css/newcss/project.css" rel="stylesheet" type="text/css"><script src="/assets/js/jquery-1.8.2.min.js"></script><script src="/assets/js/jquery.PrintArea.js"></script><script src="/assets/js/jquery.jqprint.js"></script>' gi; subs_filter '<link href="/css/style.css" rel="stylesheet" type="text/css">' '<link href="/css/style.css" rel="stylesheet" type="text/css"><script src="/assets/js/jquery-1.8.2.min.js"></script><script src="/assets/js/jquery.PrintArea.js"></script><script src="/assets/js/jquery.jqprint.js"></script>' gi; #学生中文成绩单打印页面添加高速打印功能 subs_filter '<form action="cj_zwcjd_all.jsp" method="post">' '<script>function webprint(){jQuery("table:first table:first").css("display","none");window.print();jQuery("table:first table:first").css("display","block");};jQuery(document).ready(function(){jQuery("table,tr,td").attr("align","center");jQuery("#report1 tr:first").css("height","50px");jQuery("#report1").css("width","720").css("margin-top","60").attr("cellpadding","5px");jQuery("table:first table:first a:last").after(" >> <a href=# onclick=webprint();return;>&#39640;&#36895;&#27983;&#35272;&#22120;&#25171;&#21360;<\\/a>");jQuery("div:contains(\\"- - -\\")").remove();});</script><form action="cj_zwcjd_all.jsp" method="post">' gi; #教学记录表页面添加高速打印功能并设定打印效果 subs_filter '//new jw080724hnn' 'function webprint(){jQuery("form").css("display","none");jQuery("table:eq(5)").css("display","none");window.print();/*jQuery("table:eq(4)").jqprint();*/jQuery("form").css("display","inline");jQuery("table:eq(5)").css("display","block");}jQuery(document).ready(function(){jQuery("#report1").css("width","1000");jQuery("form table:eq(1)").attr("width","1000").attr("align","center");/*jQuery("select:first").attr("onchange","cx();");*/jQuery("select:first").after("<button onclick=cx();>&#26597;&#35810;</button>");jQuery("form").css("display","inline");jQuery("table:eq(3)").remove();jQuery(".report1_6_1").text("");jQuery("tr[height=20]:lt(2)").remove();jQuery("table:eq(5) a:last").after(" >> <a href=# onclick=webprint();return;>&#39640;&#36895;&#27983;&#35272;&#22120;&#25171;&#21360;<\\/a>");jQuery("div:contains(\\"- - -\\")").remove();});' gi; #成绩分析页面添加高速打印功能并设定打印效果 subs_filter 'function report1_importExcel()' 'function webprint(){jQuery("table:first").css("display","none");window.print();jQuery("table:first").css("display","block");};jQuery(document).ready(function(){jQuery("table").attr("align","center");jQuery("tr[height=20]:last").remove();jQuery("tr[height=9]:last").remove();jQuery("#report1").css("width","640");jQuery("#report1_sub_8_1").css("width","640").css("border-right","1px solid");jQuery("img").css("width","638").css("height","160").css("border","1px solid");jQuery("#report1_sub_11_4").css("width","426");jQuery("#report1_sub_12_4").css("width","426");jQuery("#runqian_submit").after(" >> <a href=# onclick=webprint();return;>&#39640;&#36895;&#27983;&#35272;&#22120;&#25171;&#21360;<\\/a>");jQuery("div:contains(\\"- - -\\")").remove();});function report1_importExcel()' gi; #打印成绩单页面添加高速打印功能并设定打印效果 #subs_filter '<tr height="20" style="height:20px;">(.*)</tr>' '' gir; #subs_filter ' <td class="report1_1_1"></td>' '' gi; subs_filter 'function initialization(){' 'function webprint(){jQuery("form:first").css("display","none");jQuery("table:eq(2) table:first").css("display","none");window.print();jQuery("form:first").css("display","block");jQuery("table:eq(2) table:first").css("display","block");};jQuery(document).ready(function(){jQuery("tr[height=20]:lt(1)").remove();jQuery("table:first").attr("width","640");jQuery("#report1").css("width","640");jQuery("table:eq(2) a:last").after(" >> <a href=# onclick=webprint();return;>&#39640;&#36895;&#27983;&#35272;&#22120;&#25171;&#21360;<\\/a>");jQuery("div:contains(\\"- - -\\")").remove();});function initialization(){' gi; subs_filter onClick="getType() onClick="window.open('/reportFiles/cj/cj_kccj.jsp','','height=800,width=750,toolbar=no,resizable=yes,menubar=yes,scrollbars=yes') gi; #历年成绩查询并添加高速打印功能、设定打印效果 subs_filter '<form action="/reportFiles/cj/xs_kccjb.jsp"' '<script>function webprint(){jQuery("form:first").css("display","none");jQuery("table:lt(2)").css("display","none");window.print();jQuery("form:first").css("display","block");jQuery("table:lt(2)").css("display","block");};jQuery(document).ready(function(){jQuery("table").attr("width","640").attr("align","center");jQuery("#report1").css("width","640");jQuery("table:eq(1) a:last").after(" >> <a href=# onclick=webprint();return;>&#39640;&#36895;&#27983;&#35272;&#22120;&#25171;&#21360;<\\/a>");jQuery("div:contains(\\"- - -\\")").remove();});</script><form action="/reportFiles/cj/xs_kccjb.jsp"' gi; #教师课表、教室课表、班级课表添加高速打印功能并设定打印效果 subs_filter '<td colspan="9">&nbsp;<p align="center" class="td2 style5">' '<td colspan="9"><p align="center" class="td2 style5">' gi; subs_filter 'function printkb()' 'function webprint(){jQuery("table:eq(16)").jqprint();};jQuery(document).ready(function(){jQuery("#btprint").parent().attr("width","200");jQuery("#btprint").after(" >> <a href=# onclick=webprint();return;>&#39640;&#36895;&#27983;&#35272;&#22120;&#25171;&#21360;<\\/a>");jQuery("div:contains(\\"- - -\\")").remove();});function printkb()' gi; #登录成绩添加自动填充功能 subs_filter 'height="400"' 'height="100%"' gi; subs_filter '<table width="640"' '<table width="100%"' gi; subs_filter '<form name="CjlrmxFrom" method="post" action="cjlrmxAction.do?actionType=1">' '<script src="/assets/js/autoscore.js"></script><form name="CjlrmxFrom" method="post" action="cjlrmxAction.do?actionType=1"><table width="100%"><tr><td><textarea class="manuscript" id="ss" rows=5 cols=20 style="width:100%;"></textarea></td></tr><tr><td><button onclick="autoscore();return false;">&#33258;&#21160;&#22635;&#20805;&#25104;&#32489;</button>&nbsp;&nbsp;<button onclick="autoscorehelp();return false;">&#20351;&#29992;&#35828;&#26126;</button></td></tr><tr><td><div id="autoscoremsg" style="background:blue;color:white;padding:2px;2px;2px;2px;"></div></td></tr></table>' gi;} #一些静态资源比如jquery等不进行代理,使用本站提供,注意页面中一定使用 /assets/ 相对链接 location /assets/ { index index.php index.html; include fastcgi_params; root /data/www/zhjw.scse.hebut.edu.cn/htdocs/; } #网站主页替换为本站 login.php ,这样可以自定义登录外观,可不替换。 location =/ { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://zhjw.scse.hebut.edu.cn/login.php; } #顶部框架使用 top.php 替换 location /menu/top.jsp { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://zhjw.scse.hebut.edu.cn/top.php; } #左侧框架使用menu.php替换,根据不同角色切换为不同菜单。 location /menu/menu.jsp { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://zhjw.scse.hebut.edu.cn/menu.php; } #php 页面解析为本站解析 location ~ \\.php$ { include fastcgi_params; fastcgi_index index.php; #fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param SCRIPT_FILENAME /data/www/zhjw.scse.hebut.edu.cn/htdocs$fastcgi_script_name; }} 效果还不错,至少各种浏览器都能打开了,一些必须的页面也可以在高速浏览模式打印了,打印效果也基本满足要求,批量从 excel 中导入成绩也工作的很好。 [ 主界面效果](/media/urp1.jpg) 教学记录表打印效果","categories":[],"tags":[{"name":"urp","slug":"urp","permalink":"http://littlepig.cn/tags/urp/"},{"name":"hack","slug":"hack","permalink":"http://littlepig.cn/tags/hack/"}]},{"title":"Synology Video Station DTS 设置","slug":"synology-video-tation-dts","date":"2016-12-20T16:00:00.000Z","updated":"2017-05-10T05:38:01.000Z","comments":true,"path":"posts/2016/12/21/synology-video-tation-dts/","link":"","permalink":"http://littlepig.cn/posts/2016/12/21/synology-video-tation-dts/","excerpt":"","text":"因为版权原因,群晖的 Video Station 播放常见的 MKV 音频是无法播放的,需要在套件中心安装第三方插件解决问题 首先确认自己的NAS CPU型号,参见https://www.synology.com/zh-tw/knowledgebase/DSM/tutorial/General/What_kind_of_CPU_does_my_NAS_have 然后根据自己的 DSM 版本下载对应的套件https://guillaume.smaha.net/syno/ 更新说明参见:https://github.com/SynoCommunity/spksrc 然后在套件中心设置来源为任意,手工安装即可。","categories":[],"tags":[{"name":"synology","slug":"synology","permalink":"http://littlepig.cn/tags/synology/"},{"name":"DTS","slug":"DTS","permalink":"http://littlepig.cn/tags/DTS/"}]},{"title":"利用重新安装或者升级 macOS 解决系统无法启动问题","slug":"update-macos-with-data","date":"2016-11-03T16:00:00.000Z","updated":"2017-05-10T05:38:07.000Z","comments":true,"path":"posts/2016/11/04/update-macos-with-data/","link":"","permalink":"http://littlepig.cn/posts/2016/11/04/update-macos-with-data/","excerpt":"","text":"前因本来我的 EI Captitan 用的好好的,AppStroe 提示有系统更新,下载完重启,然后就悲剧了,主要表现为系统更新到约 99% 时进度条就不再前行,屏幕约5秒闪动一次,可以看见菊花在转,但系统无法进入到图形界面。网上搜索了很多办法均无效,猜测应该是补丁没有下载完整导致的,本来 timemachine 有备份,然而这几天偏偏 NAS 又坏了,屋漏偏遇连阴雨,只能重装系统了。 关键重新安装 macOS 是否能保留原有数据,经过这次实践,只要不主动抹除分区,那么就无须担心。 步骤下载系统安装包可以从网上下载带有引导的 DMG 镜像恢复到 U 盘启动安装,也可以从其他 macOS 系统的 AppStore 中下载安装 app ,鉴于安全因素,我选择后者,使用的是 sierra 的安装包,下载完毕之后会启动安装界面,command+q 关闭。 制作启动 U 盘网络上很多使用终端命令来制作启动 U 盘的,其实无需那么复杂,使用 DiskMaker X 这个程序更简单一些,参见 http://www.iplaysoft.com/macos-usb-install-drive.html 安装或者更新启动时按住 option ,选择启动 u 盘,然后直接安装即可,原有数据都在。","categories":[],"tags":[{"name":"macOS","slug":"macOS","permalink":"http://littlepig.cn/tags/macOS/"}]},{"title":"sentris VPS 搭建记录","slug":"install-shadowsocks-and-kcptun-on-sentris-vps","date":"2016-10-13T08:29:50.000Z","updated":"2017-05-10T05:28:01.000Z","comments":true,"path":"posts/2016/10/13/install-shadowsocks-and-kcptun-on-sentris-vps/","link":"","permalink":"http://littlepig.cn/posts/2016/10/13/install-shadowsocks-and-kcptun-on-sentris-vps/","excerpt":"前言有些场景需要临时且换下搜索引擎,以前一直使用 githubstudent developer pack 提供的优惠在 digitalocean 上搭建 shadowsocks,不过还没到期,digitalocean 提前把优惠结束了,可能受不了来自伟大祖国的压力了吧。修改 hosts 可行但又担心安全性,于是想找个便宜的 VPS,看到有人推荐 sentris,几美元就可以用三年,褒贬不一,由于本身需求不大,仅仅用下搜索引擎而已,且又如此便宜,便尝试了下,结果完全满足需求。","text":"前言有些场景需要临时且换下搜索引擎,以前一直使用 githubstudent developer pack 提供的优惠在 digitalocean 上搭建 shadowsocks,不过还没到期,digitalocean 提前把优惠结束了,可能受不了来自伟大祖国的压力了吧。修改 hosts 可行但又担心安全性,于是想找个便宜的 VPS,看到有人推荐 sentris,几美元就可以用三年,褒贬不一,由于本身需求不大,仅仅用下搜索引擎而已,且又如此便宜,便尝试了下,结果完全满足需求。 正文带有推荐的购买链接http://www.sentris.net/billing/aff.php?aff=396&pid=815 经过我的实验,如下参数搭建 shadowsocks 没有问题,没找到可用的优惠吗,总计 5.49 美元 1234567891011121314151617CPUs: 1Disk Size: 5Swap Size: 0Memory Size: 64 (need 128 or more for yum or apt-get)OS Template: Debian 7.0 32-bit MinimalBandwidth in MB: 250000No Refund/Changes: AgreeNo Spamming/Abuse: AgreeLogin Info: After payment I will find my IP and Password in welcome email or by login to our Client Area-Services-View Details on the product I orderedUpgrades: I selected correct options and I understand of the different pricing for upgrades via Addons and no changes can be made after orderNo Free Reinstall: I agree to pay $2 one time fee per reinstall via AddonsNo Backups: I know there is no backup options on this planNo IP Changes: I will never ask to change IP assigned to me and I will not ask for refund $5.49 USD------------------------------------------------------Sub Total: $5.49 USDCredit: $0.00 USDTotal: $5.49 USD 在 add to cart 后的结算页面可以直接输入账户参数,点击 proceed 直接建立账户并启动付款,当然,也可以提前 sign up 一个新账户。为了安全性,建议使用 paypal 绑定一个限额的信用卡来付款。 登录系统付款完毕后,你会在邮箱收到带有服务器 IP 地址以及登录账户和密码的邮件,使用 ssh 客户端比如 putty 等登录服务器。 安装 shadowsocks建议使用一键安装包,依次输入如下三条指令,然后依据提示输入 shadowsocks 的端口和密码即可。 123wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR.shchmod +x shadowsocksR.sh./shadowsocksR.sh 2>&1 | tee shadowsocksR.log 安装完成后,脚本会提示相关信息,记录下来: 123456789Congratulations, ShadowsocksR install completed!Server IP:your_server_ipServer Port:your_server_portPassword:your_passwordLocal IP:127.0.0.1Local Port:1080Protocol:originobfs:plainEncryption Method:aes-256-cfb shadowsocks 的控制脚本安装完成后,脚本 已将 ShadowsocksR 自动加入开机自启动。使用命令:启动:/etc/init.d/shadowsocks start停止:/etc/init.d/shadowsocks stop重启:/etc/init.d/shadowsocks restart状态:/etc/init.d/shadowsocks status配置文件路径:/etc/shadowsocks.json日志文件路径:/var/log/shadowsocks.log代码安装目录:/usr/local/shadowsocks iptables 设定看到网上有人提示流量计费不准,有可能被停止服务,所以准备开启 iptables ,相对来说安全一些。 查看当前iptables规则 1iptables -L 保存设定规则 1iptables-save > /etc/iptables.rules 修改保存的规则 1vim /etc/iptables.rules 在最后的 #complete 提示之前添加如下代码,只开启 22,80,3306,21,你设定的ss port(本例为8888)等必要的端口。 12345678910111213*filter-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT-A INPUT -p tcp -m tcp --dport 8888 -j ACCEPT-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p tcp --dport 3306 -j ACCEPT-A INPUT -p tcp --dport 21 -j ACCEPT-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT-A OUTPUT -p tcp -m tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT-A OUTPUT -p tcp -m tcp --sport 8888 -j ACCEPT-A OUTPUT -j ACCEPTCOMMIT 保存上述规则后立即应用 1iptables-restore /etc/iptables.rules 添加 iptables 的自启动 1vim /etc/network/if-pre-up.d/iptables 添加如下代码 123#!/bin/bashiptables -Fiptables-restore /etc/iptables.rules 赋予可执行权限,这样 iptables 开机就会应用设定的规则了。 1chmod +x /etc/network/if-pre-up.d/iptables 附 shadowsocks 客户端下载链接安装后按照上边记录的参数添加服务器,更新 PAC 规则,然后使用该服务器即可。 MAC: https://github.com/shadowsocks/shadowsocks-iOS/releasesWIN: https://github.com/shadowsocks/shadowsocks-windows/releases 实际使用效果北方联通,搜索点东西完全没有问题,youtube 看个视频缓冲会儿也没啥问题,不像有些人说的完全不可用,不过还得看用一段时间看看稳定性如何。 使用 Kcptun 加速访问如果觉得网速较慢,则可以尝试安装加速软件提速,只在服务器端安装的加速软件例如锐速等并不适用于基于 openvz 架构的 vps ,双侧的即服务器端客户端都需要安装软件的,可以试试 kcptun,经过我在 64M 的 VPS 测试安装之后的结果来看,看 720p 是妥妥的,出乎意料。 Kcptun 服务器端安装到网站查看最新版本1https://github.com/xtaci/kcptun/releases 其中 darwin 是给 macOS 用的,,debian 选择 linux 版本,根据自己系统选择是 386 还是 amd64 下载并解压1234mkdir kcptuncd kcptunwget https://github.com/xtaci/kcptun/releases/download/v20161009/kcptun-linux-386-20161009.tar.gztar zxvf kcptun-linux-386-20161009.tar.gz 解压之后会得到两个文件,一个是服务器端用的,一个是客户端用的,接下来我们创建配置文件。 1vim server-config.json 加入如下内容 123456789101112131415161718192021{ "listen": ":9999", "target": "127.0.0.1:8888", "key": "test", "crypt": "salsa20", "mode": "fast2", "mtu": 512, "sndwnd": 256, "rcvwnd": 1024, "datashard": 70, "parityshard": 30, "dscp": 46, "nocomp": false, "acknodelay": false, "nodelay": 0, "interval": 40, "resend": 0, "nc": 0, "sockbuf": 4194304, "keepalive": 10} 其中 listen 是要本地服务的端口,如果你设置了 iptables ,记得把它加入规则允许该端口数据通过。target 是要加速的本地服务的端口,这里就是 shadowsocks 的服务端口key 是 kcptun 的服务密钥,服务器端和客户端要一致crypt 选择了较为快速的 salsa20其他默认即可 接下来创建三个脚本用于方便的控制服务的启停。 启动脚本 1vim /root/kcptun/start.sh 内容如下 1234#!/bin/bashcd /root/kcptun/./server_linux_amd64 -c /root/kcptun/server-config.json > /dev/null 2>&1 &echo "Kcptun started." 停止脚本 1vim /root/kcptun/stop.sh 内容如下 12345678#!/bin/bashecho "Stopping Kcptun..."PID=`ps -ef | grep server_linux_amd64 | grep -v grep | awk '{print $2}'`if [ "" != "$PID" ]; then echo "killing $PID" kill -9 $PIDfiecho "Kcptun stoped." 重启脚本 1vim /root/kcptun/restart.sh 内容如下 12345#!/bin/bashcd /root/kcptun/sh stop.shecho "Restarting Kcptun..."sh start.sh 设置为可执行 1chmod a+x *.sh 设置服务开机启动,将如下代码加入 /etc/rc.local 的 exit 0 前面 1sh /root/kcptun/start.sh 好了,到此为止,服务器端搞定,执行 ./start.sh 启动吧。 Kcptun 客户端安装客户端其实刚才下载解压的文件中,以 client 开始的就是,不过我们大部分是在 Windows 或者 macOS 里安装,所以还得下载一下相应的版本 Windows 下有直接的图形化客户端可用,参见 https://git.oschina.net/ragnaroks/KcptunGUI/releases 这里重点说下 macOS 下的安装。 安装 homebrew1/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安装 wget1brew install wget 下载解压为 macOS 准备的包12wget https://github.com/xtaci/kcptun/releases/download/v20161009/kcptun-darwin-amd64-20161009.tar.gztar zxvf kcptun-darwin-amd64-20161009.tar.gz 创建配置文件1vim client-config.json 输入如下内容 1234567891011121314151617181920212223{ "localaddr": ":9999", "remoteaddr": "xx.xx.xx.xx:9999", "key": "test", "crypt": "salsa20", "mode": "fast2", "conn": 1, "autoexpire": 60, "mtu": 512, "sndwnd": 256, "rcvwnd": 1024, "datashard": 70, "parityshard": 30, "dscp": 46, "nocomp": false, "acknodelay": false, "nodelay": 0, "interval": 40, "resend": 0, "nc": 0, "sockbuf": 4194304, "keepalive": 10} 这里 localaddr 是本机服务端口,任选,为了好记可以选择和服务器一样的。remoteaddr 是 kcptun 服务器端的 IP 和端口key 和 crypt 同服务器 创建启动和关闭脚本1vim ~/Program/kcptun/start.sh 添加如下内容 1./client_darwin_amd64 -c ./client-config.json > /dev/null 2>&1 & 添加 shadowsocks 服务器新创建一个 shadowsocks server ,然后除去端口填写本地 kcptun 的服务端口之外,其他信息诸如密码、加密方式等,都填写 shadowsock server 的。然后切换到该服务器尝试下是否成功。 提示请遵守国家法规","categories":[],"tags":[{"name":"VPS","slug":"VPS","permalink":"http://littlepig.cn/tags/VPS/"},{"name":"sentris","slug":"sentris","permalink":"http://littlepig.cn/tags/sentris/"},{"name":"kcptun","slug":"kcptun","permalink":"http://littlepig.cn/tags/kcptun/"},{"name":"shadowsocks","slug":"shadowsocks","permalink":"http://littlepig.cn/tags/shadowsocks/"}]},{"title":"Hexo 搭建完毕","slug":"it-s-a-game","date":"2016-09-29T08:29:50.000Z","updated":"2016-11-05T01:33:58.000Z","comments":true,"path":"posts/2016/09/29/it-s-a-game/","link":"","permalink":"http://littlepig.cn/posts/2016/09/29/it-s-a-game/","excerpt":"","text":"静态博客网上资料很多,这里主要记录下自己搭建过程中遇到的问题: 绑定多个域名到多个网站首先在 github 创建自己的主站点仓库 username.github.io ,然后主域名解析使用 CNAME 类型指向该 url(两条CNAME类型记录 @和www) ,仓库主目录添加 CNAME 文件,内容为你要绑定的域名,然后更新 master 分支即可,网上教程很多。 其实其他的仓库也可以这样做,建立仓库后利用 settings 中的 automatic page generator 添加个页面 ,系统会自动创建 gh-pages 分支,然后手工添加 CNAME 文件,内容为你要绑定的域名,域名解析也是 CNAME 类型指向 username.github.io (和主站相同),然后更新 gh-pages 分支即可。 为什么 next 主题的边栏不显示即便在修改了配置文件,边栏在页面种也无法自动展开,原来,如果你文章本没有目录,那么边栏是不会自动显示的,只需要在文章中设置好了标题,则目录会自动生成,边栏也会自动显示。 Markdown 不能解析 # 为标题而是直接显示了Markdown的语法规定控制符和内容间应该有一个空格,所以,只需要多个空格就没问题了。","categories":[],"tags":[]},{"title":"Hello World","slug":"hello-world","date":"2016-09-28T16:00:00.000Z","updated":"2017-05-10T05:40:32.000Z","comments":true,"path":"posts/2016/09/29/hello-world/","link":"","permalink":"http://littlepig.cn/posts/2016/09/29/hello-world/","excerpt":"","text":"因为域名指向了教育网IP而被教育网主节点封了,也是没谁了,好在还有个 github ,于是挪这里来了, Hello 各位,好!","categories":[],"tags":[]},{"title":"Linux 下使用 sersync2 实现多服务器数据同步","slug":"linux-sersync2-rssync","date":"2016-06-06T07:24:18.000Z","updated":"2016-10-17T08:57:29.000Z","comments":true,"path":"posts/2016/06/06/linux-sersync2-rssync/","link":"","permalink":"http://littlepig.cn/posts/2016/06/06/linux-sersync2-rssync/","excerpt":"这是个好软件,多年前就一直在使用,只是最近需要重新配置,所以把过程记下来。","text":"这是个好软件,多年前就一直在使用,只是最近需要重新配置,所以把过程记下来。 服务器 A 为主服务器 192.168.1.2,B 为从服务器 192.168.1.3 双方均需要安装 rsync 且防火墙开启 873 端口,在 /etc/iptables.conf 添加如下规则: 1-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT 重启防火墙 1iptables-restore < /etc/iptables 安装 rsync 1apt-get install rsync 在 B 服务器上配置 rsync 服务 编辑 /etc/rsyncd.conf 12345678910111213141516171819202122uid=rootgid=root#最大连接数max connections=36000#默认为true,修改为no,增加对目录文件软连接的备份use chroot=no#定义日志存放位置log file=/data/log/rsync/rsyncd.log#忽略无关错误ignore errors = yes#设置rsync服务端文件为读写权限read only = no[www]#注释comment = web-root-dir#同步到B服务器的文件存放的路径path=/data/www/#仅允许A机器推送host allow = 192.168.1.2/24host deny = * 启动 rsyncd 服务 1rsync --daemon 将其加入 rc.local 实现自启 1/usr/bin/rsync --daemon 下面进入主机A的配置过程 防火墙配置同B 安装 inotify-tools 1apt-get install inotify-tools 建立 sersync2 配置文件 1vim /etc/sersync2.conf 加入如下内容 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657<?xml version="1.0" encoding="ISO-8859-1"?><head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/><fileSystem xfs="false"/><filter start="true"><exclude expression="(.*)\\.svn"></exclude><!-- <exclude expression="(.*)\\.gz"></exclude> --><!-- <exclude expression="^info/*"></exclude> --><!-- <exclude expression="^static/*"></exclude> --></filter><inotify><delete start="true"/><createFolder start="true"/><createFile start="false"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="true"/><modify start="false"/></inotify><sersync><!-- 下面是B机器的参数 --><localpath watch="/data/www"><remote ip="192.168.1.3" name="www" /><!--照葫芦画瓢可以依次添加其他--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="false" users="rsync" passwordfile="/etc/sersync2.pas"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync><failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync><plugin name="command"><param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix--><filter start="false"><include expression="(.*)\\.php"/><include expression="(.*)\\.sh"/></filter></plugin></head> 启动服务 1sersync2 -r -d -o /etc/sersync2.conf 加入 rc.local 实现自启 1/usr/bin/sersync2 -r -d -o /etc/sersync2.conf","categories":[],"tags":[]},{"title":"Debian 系统升级 PHP7","slug":"debian-upgrade-to-php7","date":"2016-05-18T14:11:50.000Z","updated":"2016-10-17T07:45:39.000Z","comments":true,"path":"posts/2016/05/18/debian-upgrade-to-php7/","link":"","permalink":"http://littlepig.cn/posts/2016/05/18/debian-upgrade-to-php7/","excerpt":"早就了解到 php7 的相关信息,一直再犹豫是不是升级已有的 LNMP 服务器,毕竟已经应用起来的服务,不小心挂了再恢复是很郁闷的。经过数星期的心理波动,终究斗不过不升级就不死心的强迫症,把手中的一台 debian 8 给搞定了,原来 php7 可以和原有的 php5 共存,即便升级不成功也无须担心。","text":"早就了解到 php7 的相关信息,一直再犹豫是不是升级已有的 LNMP 服务器,毕竟已经应用起来的服务,不小心挂了再恢复是很郁闷的。经过数星期的心理波动,终究斗不过不升级就不死心的强迫症,把手中的一台 debian 8 给搞定了,原来 php7 可以和原有的 php5 共存,即便升级不成功也无须担心。 添加源编辑 /etc/apt/sources.list 添加 dotdeb 的源,也可以使用 ustc 的镜像。 12deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all 安装 GNUPG KEY12wget https://www.dotdeb.org/dotdeb.gpg sudo apt-key add dotdeb.gpg sudo apt-get update 安装 php71sudo apt-get install php7.0-fpm php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli php7.0-curl 到此 php7 就已经安装完毕并启动了,由于我以前的 php5 使用的是 ip:port 的方式,而默认安装的 php7 使用的是 socket 的方式,所以二者并不冲突,php7 的安装目录是 /etc/php/7.0 ,启动脚本是 /etc/init.d/php7.0-fpm 。 测试找了个网站的 nginx.conf 修改了下把原来的 1fastcgi_pass 127.0.0.1:9000; 替换为了 1fastcgi_pass unix:/run/php/php7.0-fpm.sock; 经过 phpinfo() 测试,一切正常。","categories":[],"tags":[]},{"title":"解决 WIN10 2分钟后自动待机","slug":"windows-10-auto-sleep","date":"2016-05-18T10:05:09.000Z","updated":"2016-10-17T08:17:44.000Z","comments":true,"path":"posts/2016/05/18/windows-10-auto-sleep/","link":"","permalink":"http://littlepig.cn/posts/2016/05/18/windows-10-auto-sleep/","excerpt":"","text":"笔记本 T400,安装 WIN10 后,发现无论如何设置电源选项,只要休眠过一次,再次唤醒后总是2分钟后自动又待机。 经过搜索,原来这个两分钟是系统无人值守时的睡眠时间设定,主要用来对平板节电的,可是在笔记本上出现就是 BUG 了。 附解决办法: win+r ,输入 regedit 打开注册表编辑器 定位到节点 HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Power\\PowerSettings\\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 修改 attributes 键的值为 2 。 进入系统的高级电源设置,在 睡眠 选项中会出现 “无人参与系统睡眠超时”项,将默认的2分钟修改成你想要的时间即可。","categories":[],"tags":[]},{"title":"mac os 10.9 下的 gdb","slug":"mac-os-10-9-gdb","date":"2016-05-15T08:44:46.000Z","updated":"2016-10-31T08:35:48.000Z","comments":true,"path":"posts/2016/05/15/mac-os-10-9-gdb/","link":"","permalink":"http://littlepig.cn/posts/2016/05/15/mac-os-10-9-gdb/","excerpt":"","text":"突然想学学传说中的 gdb ,于是按照网上的教程用 brew 安装,结果没一个可用的源,后来才知道原来 mac os 安装 xcode 后内置的是 clang 和与其配套的 lldb ,g++ 只是对 clang 做的符号链接,而 gdb 却没有做,所以只需要自己手动添加一个即可。 1sudo ln -s /usr/bin/lldb /usr/bin/gdb","categories":[],"tags":[]},{"title":"Debian 下 MySQL 允许远程连接","slug":"debian-mysql-remote-access","date":"2016-05-05T01:25:53.000Z","updated":"2016-10-17T07:12:42.000Z","comments":true,"path":"posts/2016/05/05/debian-mysql-remote-access/","link":"","permalink":"http://littlepig.cn/posts/2016/05/05/debian-mysql-remote-access/","excerpt":"虽然安全性可能会有一些问题,但用诸如 navicat 等工具来管理数据库,比 phpmyadmin 或者 adminer 要方便的多,所以需要将 mysql 配置为允许远程访问的形式。","text":"虽然安全性可能会有一些问题,但用诸如 navicat 等工具来管理数据库,比 phpmyadmin 或者 adminer 要方便的多,所以需要将 mysql 配置为允许远程访问的形式。 防火墙开启 3306 端口1vim /etc/iptables.conf 添加规则 1-A INPUT -p tcp --dport 3306 -j ACCEPT 重启服务 1iptables-restore < /etc/iptables.conf 修改 mysql 的默认监听地址1vim /etc/mysql/my.cnf 注释掉 1bind-address = 127.0.0.1 或者改为 1bind-address = 0.0.0.0 修改root权限1mysql -u root -p 'yourpassword' 进入终端后输入 12GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword'; exit; 重启服务1/etc/init.d/mysql restart 一般情形经过上述四步就可以了,但偏偏我的仍然不行,在第三步中设置权限时总是提示:“Access denied for user ‘root’@’localhost’ (using password: YES)”,原因在于 debian 系统下 mysql 安装时设置的密码和我当前的root密码不一致导致的,安装时的密码被配置在了 /etc/mysql/debian.cnf 中,应该使用这个配置来登录 mysql 终端,然后再改掉 root 密码。 1mysql -u debian-sys-maint -p 'password in debian.cnf' 进入后: 123use mysql; update user set password=PASSWORD('your new root password') where user='root'; FLUSH PRIVILEGES; 这时重复第三步应该就没有问题了。远程使用 navicat 连接也正常了。","categories":[],"tags":[]},{"title":"VC6 Stack Allocations 引发的 ADO 问题","slug":"vc6-stack-allocations-ado2-excel","date":"2016-01-11T13:07:44.000Z","updated":"2016-10-17T08:28:48.000Z","comments":true,"path":"posts/2016/01/11/vc6-stack-allocations-ado2-excel/","link":"","permalink":"http://littlepig.cn/posts/2016/01/11/vc6-stack-allocations-ado2-excel/","excerpt":"","text":"在 VC6 下使用 ADO2 连接 Excel ,一直操作的很顺利,直到我把代码移植到一个早期的 MFC 程序上时,说什么也打不开 Excel 了,但是 Access 就没有问题,在排除了各种可能性之后,一筹莫展,于是只得用笨办法,看能运行的程序和该程序在设置上有什么不同,无意间发现不能运行的程序在 Project Settings 设置像中 Stack Allocations 处指定了 Reserve 为 0x5000000 ,而正常运行的程序则没有指定,想了想当初是因为栈空间不够大才手动设置的此项,于是去掉,竟然能顺利打开了,真是百思不得其解二者之间的联系,聊以记之,已示有同样问题之人。 附:栈空间不够大,所以当定义大数组的时候就会出现问题,比如类似 char a[1024000] 等用法都是不可取的,解决方案要么就是像图中增大栈空间,要么就是改为 char* a = new char[1024000] 的用法,后者更合适些,不会引发ADO的问题。","categories":[],"tags":[]},{"title":"Debian 下 PHP 连接 MS SQL Server","slug":"debian-php-ms-sql-server","date":"2015-11-14T13:37:18.000Z","updated":"2016-10-17T07:39:46.000Z","comments":true,"path":"posts/2015/11/14/debian-php-ms-sql-server/","link":"","permalink":"http://littlepig.cn/posts/2015/11/14/debian-php-ms-sql-server/","excerpt":"","text":"什么编译 unixODBC,编译 freeTDS,什么 sql.h 找不到 。。。折腾了一天之后,一条指令搞定了所有 1apt-get install libsybdb5 freetds-common php5-sybase 然后 adodb5 就可以使用了,Driver 使用 mssql 即可,注意 Server 要带端口,字段要使用名字的话必须 1$connuser->SetFetchMode(ADODB_FETCH_ASSOC); 示例 1234$conn = ADONewConnection("mssql");$conn->Connect($server, $user, $password, $database);$conn->SetFetchMode(ADODB_FETCH_ASSOC);","categories":[],"tags":[]},{"title":"W130S(D400) 黑群晖 4.3 升级 5.1","slug":"dsm-43-update-51","date":"2015-02-03T04:01:30.000Z","updated":"2016-10-31T11:56:16.000Z","comments":true,"path":"posts/2015/02/03/dsm-43-update-51/","link":"","permalink":"http://littlepig.cn/posts/2015/02/03/dsm-43-update-51/","excerpt":"","text":"Lenovo W130S (D400) DSM 4.3 的一块 1T 希捷盘 S.M.A.R.T 提示要挂了,于是换了一块 3T 的,正好趁机升级下系统 1)到 http://nanoboot.eu.org/ 下载 XPEnoboot 2)到 群晖网站下载官方固件 http://dl.synology.com/download/ 注意选择 XPEnoboot 支持的 DSM_DS3615xs_5022 3)备份你群晖的重要数据,导出系统配置 4)找个启动 U 盘,把 win32diskimager 及 1)下载的 XPEnoboot_DS3615xs_5.1-5022.img 放进去 5)使用你的 U 盘启动 W130S ,然后在 PE 中利用 win32diskimager 把 img 写到系统自带的 256M 闪存盘上,该盘为 SMI 芯片组,VID=090C, PID=1000 (慧荣主控) ,你也可以在写入之前利用 img 编辑工具如 WinImage 修改 img 其中的 syslinux.cfg 文件,把 VID ,PID 换成你的启动闪存盘对应的,我是进去系统后才换的。 Synoboot支持的U盘VID和PID如下:VID=F400, PID=F401 (Synology)VID=090C, PID=1000 (慧荣主控)VID=0781, PID=5571 (闪迪酷豆)VID=0EA0, PID=2168 (瀚邦主控) 6)拔掉你的启动 U 盘,使用内置闪存盘启动机器,选择 update 选项启动 7)在PC上使用群晖助手扫描,然后安装官方的 pat 文件 8)进入新系统,导入3)导出的系统配置,升级配套套件等。 我的 download station 的 pt 记录丢了(文件没丢,就是下载记录没了),photo 和 music 以及 movie 需要重新索引,除此之外,无异常。 因为一开始内置闪存盘的 VID 和 PID 和系统的对应不上,所以 file station 会列出你的内置闪存盘,此时正好可以修改覆盖其中 syslinux.cfg 的 VID和PID,再重启后就看不到内置闪存盘了。","categories":[],"tags":[]},{"title":"联想万全 T168 安装 Debian","slug":"debian-install-on-lenovo-t168","date":"2014-11-29T03:20:28.000Z","updated":"2016-10-17T07:05:57.000Z","comments":true,"path":"posts/2014/11/29/debian-install-on-lenovo-t168/","link":"","permalink":"http://littlepig.cn/posts/2014/11/29/debian-install-on-lenovo-t168/","excerpt":"","text":"万全 T168 是老型号服务器了,其本身带有 sata raid ,可惜的是,其驱动操作系统并不自带,所以要想重装系统,都得使用其随机附带的导航光盘启动,然后才能安装操作系统,光驱易坏,光盘易丢,前两天就碰见这么一台,老早之前的机器了,找导航光盘镜像网上又搜索不到,虽然在 raid 配置界面配置了 raid ,但 windows server 2003 和 debian 以及 exsi 都识别不出,即便安装到某个硬盘上也无法启动,着实折腾了一番,最终处理过程如下: 1)用 u 盘启动盘启动,进入 dos ,使用联想提供的 DOS 工具 multicfg 修改 BIOS 类型,然后装载默认 BIOS 设置,则可以禁用板载 raid。 下载:MULTICFG 命令:multicfg A 禁用阵列,multicfg B 启用阵列 2)安装 debian ,利用其提供的 soft raid 组建 raid,由于一知半解,一直以为 softraid 可以直接选择硬盘设备来组建,但总是不成功,后来将三个硬盘设备分别建立分区之后,选择三个分区就可以组建 raid 了(难道是我对 soft raid 理解错了?)。安装完毕后直接将 GRUB 安装在 /dev/md0 即可。","categories":[],"tags":[]},{"title":"有edu邮箱的学生或者教师的优惠礼包","slug":"github-digitocean-2014","date":"2014-10-17T08:17:14.000Z","updated":"2016-11-05T01:32:34.000Z","comments":true,"path":"posts/2014/10/17/github-digitocean-2014/","link":"","permalink":"http://littlepig.cn/posts/2014/10/17/github-digitocean-2014/","excerpt":"","text":"可以使用后缀为 .edu.cn 的邮箱注册一个 github 账号 https://github.com/join 然后到 https://education.github.com/pack 申领礼包 申领完成后礼包后通过点击 digitalOcean 右侧的申领连接得到 digitalOcean 的优惠码 到 digitocean 注册账号,可以使用我的推广链接注册(你会有$10) https://www.digitalocean.com/?refcode=15254de0400c 然后绑定信用卡(担心安全的话可以使用中银的信用卡虚拟一个额度较小的卡)或者通过 paypal 转入 $5 激活账号 登录后在优惠码填写处使用上述优惠码会有 $100 入账。 https://cloud.digitalocean.com/user_payment_profiles 然后创建 vps,选择便宜的 5 美元套餐,linux主机(比如ubuntu或者debian),地址选纽约,其他速度较慢。 然后邮箱中得到 IP 及 root 密码后远程 ssh 到主机,登录进去修改 root 密码,后续做什么就根据你需求了。 搭建V*N 什么的可自行搜索。 这样完成后账户中大约有 115 美元,每个月 5 美元,可以使用约23个月。","categories":[],"tags":[]},{"title":"MFC 单(多)文档程序的启动参数处理","slug":"mfc-singlemulti-document-program-with-start-parameter","date":"2014-08-12T12:25:58.000Z","updated":"2016-10-31T08:38:14.000Z","comments":true,"path":"posts/2014/08/12/mfc-singlemulti-document-program-with-start-parameter/","link":"","permalink":"http://littlepig.cn/posts/2014/08/12/mfc-singlemulti-document-program-with-start-parameter/","excerpt":"","text":"我的一个MFC单文档程序,启动时需要给定一个字符串参数来作为工作路径,从而连接相应路径下的数据库,在 App 类的 InitInstance 中通过 this->m_lpCmdLine 即可得到这个参数加以使用,但是 MFC 程序的 ProcessShellCommand(cmdInfo) 这个过程会返回 False,导致程序启动失败,弹出 “XXX不是一个合法路径” 的对话框,原因貌似也挺好理解,单文档程序往往将参数认为是该程序打开的文档名称,所以一旦你这个参数不是一个文件路径或者不是符合类型的文档,则 Doc 类处理不了,自然也就返回 False 了,想了想也没得到其他的好办法,只好暂时重载 Doc 类的 OnOpenDocument 方法,取消对文件的任何操作即可。 12345678910BOOL CIEDoc::OnOpenDocument(LPCTSTR lpszPathName){//注意:取消此处//if (!CDocument::OnOpenDocument(lpszPathName))// return FALSE;// TODO: Add your specialized creation code herereturn TRUE;} 可能我这种应用比较奇葩吧。","categories":[],"tags":[]},{"title":"MFC ActiveX Control 的方法调用失败","slug":"mfc-activex-control-function-call-failed","date":"2014-08-12T12:15:39.000Z","updated":"2016-11-05T01:32:56.000Z","comments":true,"path":"posts/2014/08/12/mfc-activex-control-function-call-failed/","link":"","permalink":"http://littlepig.cn/posts/2014/08/12/mfc-activex-control-function-call-failed/","excerpt":"","text":"使用 VC6 ,创建了个 ocx 控件,添加了个带参数的方法,但是 exe 程序死活调用不了这个方法,注册、创建对象等过程都没问题的,调用时 com exception 提示 致命错误,百思不得其解,误打误撞,知道了解决方案,需要在控件的ctrl类里重载 IsInvokeAllowed 方法返回 TRUE 即可。 .h 里添加 1BOOL IsInvokeAllowed (DISPID); .cpp 里添加 123456BOOL CNetworkCtrl::IsInvokeAllowed (DISPID) {// You can check to see if COleControl::m_bInitialized is FALSE // in your automation functions to limit access. return TRUE; } 参见:http://bbs.csdn.net/topics/390847591","categories":[],"tags":[]},{"title":"CHtmlView 中的 OnBeforeNavigate2 事件","slug":"chtmlview-onbeforenavigate2","date":"2014-08-12T11:58:45.000Z","updated":"2017-05-10T05:38:20.000Z","comments":true,"path":"posts/2014/08/12/chtmlview-onbeforenavigate2/","link":"","permalink":"http://littlepig.cn/posts/2014/08/12/chtmlview-onbeforenavigate2/","excerpt":"","text":"OnBeforeNavigate2 时间当转向新地址之前发生,在此之前用户可以通过各种条件限定来决定是否转向,但这个事件有一个特点就是:如果同一个页面中有 frame,iframe等,会多次激发这个事件,有些特定的场合可能需要判定是否是最上层页面激发的,此时就需要使用该事件的另外一种形式。 1BeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL,VARIANT* Flags, VARIANT* TargetFrameName,VARIANT* PostData, VARIANT* Headers, BOOL* Cancel) CHtmlView 中默认的 OnBeforeNavigate2 事件是不带 pDisp 参数的,因此不能直接从 VC 的 ClassWizard 下复写该事件,只能手工添加,在 .h 中照葫芦画瓢 1virtual void BeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel); 在 cpp 中添加 123456789101112131415161718192021222324void CIEView::BeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL,VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel){ CString strURL(URL->bstrVal) //do sth HRESULT hr; IUnknown* pUnkBrowser = NULL; IUnknown* pUnkDisp=NULL; hr = m_pBrowserApp->QueryInterface( IID_IUnknown,(void**)&pUnkBrowser); if ( SUCCEEDED(hr) ) { hr = pDisp->QueryInterface( IID_IUnknown, (void**)&pUnkDisp ); if ( SUCCEEDED(hr) ) { if ( pUnkBrowser == pUnkDisp ) { // 这是顶层框架窗口 //do sth } } } CHtmlView::BeforeNavigate2(pDisp, URL,Flags, TargetFrameName, PostData, Headers, Cancel);} 特此记之方便他人,免得走弯路。","categories":[],"tags":[{"name":"CHtmlView","slug":"CHtmlView","permalink":"http://littlepig.cn/tags/CHtmlView/"}]},{"title":"MySQL 主从同步配置 ","slug":"mysql-sync","date":"2014-02-23T02:28:52.000Z","updated":"2019-08-07T03:29:46.000Z","comments":true,"path":"posts/2014/02/23/mysql-sync/","link":"","permalink":"http://littlepig.cn/posts/2014/02/23/mysql-sync/","excerpt":"","text":"貌似很复杂的步骤,其实挺简单的,当然,没考虑安全性等其他因素,以操作简单功能实现为目标。 安装数据库,最好设置root密码相同,然后修改root可以从任意主机登录。 用ssh分别登录 master和slave主机, 1vim /etc/mysql/my.cnf 修改 123[mysqld]log-bin=mysql-bin //启用二进制日志server-id=125120 //服务器唯一ID,默认是1,可以取ip地址后两段 修改后重启 1/etc/init.d/mysql restart mysql -p 登录 master,然后输入 show master status; 查看log文件名称及Position 如果已有数据,在 slave 上先将 master 的数据库拷贝过来 1234567cd /var/lib/mysqlscp -rp root@host1:/var/lib/mysql/db1 ./....chown -R mysql.mysql * mysql -p 登录 salve ,设置同步参数 1234567stop slave;change master to master_host='masterip',master_user='root',master_password='rootpwd',master_log_file='mysql-bin.000001',master_log_pos=36622;start slave;show slave status; 测试是否生效","categories":[{"name":"服务","slug":"服务","permalink":"http://littlepig.cn/categories/%E6%9C%8D%E5%8A%A1/"}],"tags":[{"name":"mysql","slug":"mysql","permalink":"http://littlepig.cn/tags/mysql/"}]},{"title":"群晖 DSM 中 GitServer 的配置","slug":"synology-dsm-gitserver-configuration","date":"2014-01-13T11:44:04.000Z","updated":"2016-10-31T11:42:37.000Z","comments":true,"path":"posts/2014/01/13/synology-dsm-gitserver-configuration/","link":"","permalink":"http://littlepig.cn/posts/2014/01/13/synology-dsm-gitserver-configuration/","excerpt":"","text":"群晖中 GitServer 的信息很少,官网竟然都没有找到相关资料,只在内置的帮助中有一屏说明,也是无济于事,于是自己摸索了下。 准备工作: 因为我是个人使用 NAS,所以我把我自己的账号 zhz 加入了 Administrator 组,这样在一些目录权限上应该就没什么限制了。 1)安装 git server ,在 git server 的配置中勾选用户 zhz 以使用 git server 。 2)在 DSM “共享文件夹” 中新建一个叫做 repository 的目录,并给与 zhz 可读写的权限,可以设置为对没有权限的用户网络邻居中不可见。 3)通过网上邻居访问到 repository 目录,在其中新建你的项目目录,比如叫做 TestProj ,然后通过 tortoisegit 右键 “在此处创建版本库”,勾选 “制作纯版本库(没有工作区选项)”,好了,服务器端工作完成。 4)剩下的工作就和其他git server类似了,使用如下链接将空项目克隆到本地某个目录: ssh://[email protected]/volume1/repository/TestProj ,其中 volume1 是你建立 repository 文件夹时选择的卷,然后添加文件,提交到本地库,推送到远程 NAS 即可。 整个过程其实用不到 ssh 到 shell 中打命令,当然,如果你的项目权限控制比较严格可能就需要 ssh 进去修改库目录的权限什么之类的了。","categories":[],"tags":[{"name":"server","slug":"server","permalink":"http://littlepig.cn/tags/server/"},{"name":"synology","slug":"synology","permalink":"http://littlepig.cn/tags/synology/"},{"name":"git","slug":"git","permalink":"http://littlepig.cn/tags/git/"}]},{"title":"Lenovo D400 (W130S) 黑群晖 4.2 升级 4.3","slug":"d400-synology-4-2-update-to-4-3","date":"2014-01-13T10:28:01.000Z","updated":"2016-10-31T08:49:52.000Z","comments":true,"path":"posts/2014/01/13/d400-synology-4-2-update-to-4-3/","link":"","permalink":"http://littlepig.cn/posts/2014/01/13/d400-synology-4-2-update-to-4-3/","excerpt":"","text":"我的联想 W130S 自从上次稀里糊涂的安装好黑群晖 4.2 后,一直用的比较不爽,主要表现在没法认出插入的U盘或者移动硬盘,经常没事就硬盘损毁然后又修复(也不知道是真的还是假的,至少有这提示,原来的 windows home server 就没事),最郁闷的是没法安装 git server ,而作为半个码农表示没有代码的备份和版本管理是完全不可忍受的,SVN 使用又必须得联网不方便,于是今天把 DSM 4.2 升级为了 4.3 ,不仅 Git Server 可以安装了,U盘的问题也解决了,本篇日志小记过程。 大部分的步骤是按照黑群晖“官方”说明的中文翻译做的,参见 http://xpenology.com/forum/viewtopic.php?f=11&t=1705 准备工作1,得想法儿知道 W130 的 MAC 地址,翻遍了随机手册、机箱上的标签也没找到,如果安装有 WHS 进去用 ipconfig -all 看下即可,可是我的是没有修改过MAC的 DSM 4.2 ,即便显示出来 MAC地址 也是假的,没办法找了个启动 U 盘进 WINPE 加载网卡驱动才找到,记录下来。 准备工作2,备份DSM4.2的配置,在DSM的 “系统备份和还原” 里 “系统设置备份” 中备份下系统配置信息。如果觉得不放心,再把NAS的重要数据拷贝出来备份下。 按照提供的地址下载固件,只是下载太慢经常断掉,于是从某网盘里找到了下载链接(鉴于可能的版权问题,这里就不公开了,实在找不到可以通过邮件联系我)。 按照步骤用 HXD 修改序列号和MAC地址,很简单的,二者类似,前边是MAC地址或者序列号,紧接着后边一位是所谓的校验码,前边改了,算一下校验码,替换掉后边的一个字节即可,然后保存 img 文件。 下载个 win32 disk imager 地址在:http://sourceforge.net/projects/win32diskimager/ 将这个工具和修改好的 img 放入随便一个带 pe 的可启动 u 盘。 将启动u盘插入 w130s 的 usb 口,找个 usb 键盘,启动机器,按 F2 进入 CMOS ,修改为外部 USB 设备优先启动,内部 USB Flash Disk 其次,然后保存启动机器。 进入 pe 后启动 u 盘上的 disk imager 然后写改好的 img 到 w130s 自带的 256M Flash Disk 上,如果该闪存盘以前写过 4.2 ,则必须用分区工具比如 diskgenius 把原来分区依次删除,然后创建一个新分区并分配盘符,disk imager 才可以列出来该盘并写入,然后拔出可启动 u 盘,重启 NAS。 在笔记本上安装个群晖助手(可从群晖官网下载区随便选个型号找到),搜索下就可以找到启动的系统了,右键安装 XPEnology_trantor_v1.0_DSM_DS3612xs_3810.pat ,完成后会自动重启然后配置账号、ip等信息。 用 admin 账号登入 DSM 4.3 ,在 “系统备份和还原” 里恢复你保存的配置信息即可,原来的数据都在。 然后安装套件等一系列工作。","categories":[],"tags":[{"name":"d400","slug":"d400","permalink":"http://littlepig.cn/tags/d400/"},{"name":"w130s","slug":"w130s","permalink":"http://littlepig.cn/tags/w130s/"},{"name":"NAS","slug":"NAS","permalink":"http://littlepig.cn/tags/NAS/"},{"name":"synology","slug":"synology","permalink":"http://littlepig.cn/tags/synology/"}]},{"title":"Debian 下 IPV4 优先于 IPV6 的设定","slug":"debian-pv4-ipv6","date":"2013-10-07T10:00:23.000Z","updated":"2016-10-17T07:40:30.000Z","comments":true,"path":"posts/2013/10/07/debian-pv4-ipv6/","link":"","permalink":"http://littlepig.cn/posts/2013/10/07/debian-pv4-ipv6/","excerpt":"","text":"同时支持 IPV4 和 IPV6,但 IPV6 的解析非常慢,经常等半天没反应才切换到IPV4,debian 下如果需要IPV4优先的话,方法很简单 1vim /etc/gai.conf 去掉下面这句话的#即可。 1#precedence ::ffff:0:0/96 100","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"}]},{"title":"Debian下exim4的外发配置","slug":"debian-exim4-mail-for-internet","date":"2013-10-07T07:39:39.000Z","updated":"2016-10-17T07:04:38.000Z","comments":true,"path":"posts/2013/10/07/debian-exim4-mail-for-internet/","link":"","permalink":"http://littlepig.cn/posts/2013/10/07/debian-exim4-mail-for-internet/","excerpt":"","text":"debian 下安装了 wordpress ,发现用户注册收不到邮件,原来 debian 使用 exim4 代替了 sendmail ,而 exim4 默认是只能系统内部发送而不能对外发送的。 1vim /etc/exim4/update-exim4.conf.conf 将其中的 1“dc_eximconfig_configtype=local” 改为 1"dc_eximconfig_configtype=internet" 即可 1vim /etc/mailname 可以修改发信主机名,不过一定要使用实际的域名或者IP,否则可能被其他邮件系统过滤。","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"exim4","slug":"exim4","permalink":"http://littlepig.cn/tags/exim4/"},{"name":"mail","slug":"mail","permalink":"http://littlepig.cn/tags/mail/"},{"name":"sendmail","slug":"sendmail","permalink":"http://littlepig.cn/tags/sendmail/"}]},{"title":"关于 DNS 中的 non-authoritative answer","slug":"about-non-authoritative-answer","date":"2013-10-06T04:09:38.000Z","updated":"2019-08-07T09:50:16.000Z","comments":true,"path":"posts/2013/10/06/about-non-authoritative-answer/","link":"","permalink":"http://littlepig.cn/posts/2013/10/06/about-non-authoritative-answer/","excerpt":"","text":"自己配置的 DNS ,在使用 nslookup 时发现返回 non-authoritative answer ,搜索了下千篇一律都是如下解释 出现此提示表明该域名的解析是从 local DNS 的 cache 中直接读出来的,而不是 local DNS 向真正负责这个 域名 的 name server 问来的。 于是自己做个试验,新添加一条 A 记录,这时肯定不会缓存吧,第一次查询仍返回此信息,表明这种解释是不靠谱的。 靠谱的解释可能如下: non-authoritative answer 表明这台DNS所解析的域名是它通过递归查询得到的,而非他自己维护的域。","categories":[],"tags":[]},{"title":"解决 timthumb.php 不能找到图像错误","slug":"fix-error-on-timthumb","date":"2013-09-10T00:44:58.000Z","updated":"2016-10-31T11:31:17.000Z","comments":true,"path":"posts/2013/09/10/fix-error-on-timthumb/","link":"","permalink":"http://littlepig.cn/posts/2013/09/10/fix-error-on-timthumb/","excerpt":"timthumb.php 经常被用来生成缩略图,不过在某些系统上发现会出现如下错误 123# A TimThumb error has occuredThe following error(s) occured:* Could not find the internal image you specified. 尝试了很多办法无效,最后不得已用增加配置文件指定绝对路径的办法解决的。","text":"timthumb.php 经常被用来生成缩略图,不过在某些系统上发现会出现如下错误 123# A TimThumb error has occuredThe following error(s) occured:* Could not find the internal image you specified. 尝试了很多办法无效,最后不得已用增加配置文件指定绝对路径的办法解决的。 在 timthumb.php 同目录下增加 timthumb-config.php 内容如下 123456789<?php$_SERVER['DOCUMENT_ROOT'] = '/path/to/ur/root/path/';//If you get this error at only localhost you can use like that also.//if($_SERVER["HTTP_HOST"] == 'localhost'){//$_SERVER['DOCUMENT_ROOT'] = dirname( __FILE__ );//}?>","categories":[],"tags":[{"name":"timthumb","slug":"timthumb","permalink":"http://littlepig.cn/tags/timthumb/"}]},{"title":"IIS 下 Wordpress 上传中文文件","slug":"upload-file-with-chinese-in-wordpress-on-iis","date":"2013-09-10T00:35:14.000Z","updated":"2016-10-17T08:36:31.000Z","comments":true,"path":"posts/2013/09/10/upload-file-with-chinese-in-wordpress-on-iis/","link":"","permalink":"http://littlepig.cn/posts/2013/09/10/upload-file-with-chinese-in-wordpress-on-iis/","excerpt":"今日需要在 Server 2003 的 IIS 下部署一个 wordpress 网站,发现上传中文文件名的文件时保存下来的文件乱码,修改 wordpress 核心里的代码可以解决问题,不过这样就不能随意升级 wordpress 本身了。","text":"今日需要在 Server 2003 的 IIS 下部署一个 wordpress 网站,发现上传中文文件名的文件时保存下来的文件乱码,修改 wordpress 核心里的代码可以解决问题,不过这样就不能随意升级 wordpress 本身了。 修改 wp-admin/includes/file.php 12function wp_handle_upload( &$file, $overrides = false, $time = null ) { //$new_file = $uploads['path'] . "/$filename"; 找到上面的代码,替换成下面的。 1$new_file = $uploads['path'] . "/" . iconv("UTF-8","GB2312",$filename); 1return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' ); 找到上面的代码,替换成下面的。 1return apply_filters( 'wp_handle_upload', array( 'file' => $uploads['path'] . "/$filename", 'url' => $url, 'type' => $type ) , 'upload');","categories":[],"tags":[{"name":"IIS worpress upload","slug":"IIS-worpress-upload","permalink":"http://littlepig.cn/tags/IIS-worpress-upload/"}]},{"title":"Nginx 负载均衡中文件上传的配置","slug":"upload-solution-on-nginx-cluster","date":"2013-08-23T01:52:08.000Z","updated":"2017-05-10T05:40:06.000Z","comments":true,"path":"posts/2013/08/23/upload-solution-on-nginx-cluster/","link":"","permalink":"http://littlepig.cn/posts/2013/08/23/upload-solution-on-nginx-cluster/","excerpt":"","text":"LNMP 集群做了动静分离和负载均衡,session 使用了 memcache ,接下来的问题就是解决上传问题,想了想可能单独设立一台上传服务器是最佳方案了,考虑到上传操作的访问量比较小,所以直接使用静态内容服务器兼作上传服务器,这样做的好处就是,由于上传的内容均为静态内容,而访问静态内容 nginx 的负载均衡策略也会把其分配到该静态内容服务器上,所以就无需将上传到的内容拷贝到其他后台均衡服务器了,在使用 wordpress 的站点上试了下,工作良好。 下面是 nginx 中上传部分的配置,因为 wordpress 上传都是在后台 wp-admin 目录中的页面上进行的,所以只需要把 wp-admin 在 nginx 做负载均衡时解析到静态服务器即可,当然,这是一个懒办法,适合 wordpress 后台不需要大量访问的时候。 123456789location ~* ^/wp-admin/.*$ {proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://upload.cluster;}","categories":[],"tags":[{"name":"nginx","slug":"nginx","permalink":"http://littlepig.cn/tags/nginx/"},{"name":"cluster","slug":"cluster","permalink":"http://littlepig.cn/tags/cluster/"},{"name":"proxy","slug":"proxy","permalink":"http://littlepig.cn/tags/proxy/"},{"name":"upload","slug":"upload","permalink":"http://littlepig.cn/tags/upload/"}]},{"title":"MySQL 主从备份失败","slug":"mysql-master-slave-fix","date":"2013-08-23T01:42:23.000Z","updated":"2016-10-31T08:39:03.000Z","comments":true,"path":"posts/2013/08/23/mysql-master-slave-fix/","link":"","permalink":"http://littlepig.cn/posts/2013/08/23/mysql-master-slave-fix/","excerpt":"","text":"一个LNMP集群,MySQL做的主从同步,长时间没有启动了,今天在 exsi 上将其克隆到另外一台主机启动之后发现 slave 无法同步 master,在 slave 的 mysql 终端下 show slave status\\G 显示如下: Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' log file 显示应该为 mysql-bin.000128 ,跑到 master 上发现没有该 log 而是变成了 mysql-bin.000129,于是在 slave 上用如下语句进行了修复。 12345stop slave;change master to master_log_file='mysql-bin.000129';start slave;","categories":[],"tags":[{"name":"mysql cluster","slug":"mysql-cluster","permalink":"http://littlepig.cn/tags/mysql-cluster/"}]},{"title":"D400 (W130S) 安装 群晖系统","slug":"synology-on-d400","date":"2013-07-25T06:01:26.000Z","updated":"2017-05-10T13:44:53.000Z","comments":true,"path":"posts/2013/07/25/synology-on-d400/","link":"","permalink":"http://littlepig.cn/posts/2013/07/25/synology-on-d400/","excerpt":"原来 的 W130S (联想 D400 的定制版本)我升级为了 Server 2012 ,用着也一直挺顺利,挺方便。近几日翻看新闻了解到群晖的新版本已经有 Git Server 模块进入了 Beta ,想到 Server 2012 对照片的管理能力实在差,于是没经住诱惑尝试了下,不过由于是黑群晖,只到 4.2 版本,暂时没法使用 Git Server。","text":"原来 的 W130S (联想 D400 的定制版本)我升级为了 Server 2012 ,用着也一直挺顺利,挺方便。近几日翻看新闻了解到群晖的新版本已经有 Git Server 模块进入了 Beta ,想到 Server 2012 对照片的管理能力实在差,于是没经住诱惑尝试了下,不过由于是黑群晖,只到 4.2 版本,暂时没法使用 Git Server。 1)群晖官方网站有 Live Demo 可供尝试:http://www.synology.com/products/dsm_livedemo.php?lang=chs 2)淘宝一块供 D400 用的VGA显示输出板子,这样才能看到输出并调节 BIOS 的启动顺序,找一套 USB 接口的键盘鼠标方便操作。 3)下载群晖系统必须的系统镜像和软件,我的网盘里有 http://pan.baidu.com/share/link?shareid=501801&uk=1543778081 Win32 Disk Imager 用来将下边的启动镜像写入 u 盘或者 D400 自带的闪存盘Synoboo4.2ForD5100.img 此为系统启动镜像,可以启动基本的群晖系统供下边的群辉助手发现并使用。Synology Assistant 群辉助手,用来对群晖的 NAS 进行初始化和管理,群晖官方网站可下载。DS3612xs 3202 Repack.pat 破解后的群晖系统。 把原来NAS的数据想办法导出,因为安装过程会将数据盘也格式化,群晖数据盘是 EXT4 格式,所以以前的 NTFS 没法直接挂载使用。 网上大部分都是将 img 写入空白 u 盘来启动,可是我的 u 盘里已经有不少东西了,而且能够 pe 启动,所以不想再格式化,所以我将上述软件放到了 u 盘里,然后利用我的 u 盘启动将 img 写入了 W130S 自带的256M闪存里。 4)下面步骤很简单,但可能需要多次尝试 可启动u盘插入W130S,接好外接显示器和键盘鼠标,启动 W130S,开机时按 F2 进入 CMOS ,boot 菜单里调整为 All USB HDD 优先启动,内置 USB Disk 其次,SATA 数据盘再次,保存退出,重启进入 PE 。 运行 Disk Imager ,将Synoboo4.2ForD5100.img 写入系统自带的 256M 闪存,不要写错盘。 拔掉 U 盘,重启机器进入字符界面的 Linux 系统。 在 PC 上使用 Synology Assistant 会扫描到新的机器,然后点击右键安装,选择 DS3612xs 3202 Repack.pat ,设置网络信息,不使用 SHR ,安装完毕后会重启。 上述步骤我一开始卸载了NAS所有的数据盘,用自带的 256M 启动之后,直接写 pat ,但是提示无法写入成功,后来尝试了很多次,发现加载了数据盘才可以写入,也即写入是写到了第一个 SATA 盘上,与内置 256 M u盘上负责启动的系统没关系,不知道是不是可以这样理解。 5)再次使用 Synology Assistant 连接,然后使用 admin 及刚才设置的密码即可进入 DSM 的桌面,根据自己需要安装组件配置参数即可。 6)一些注意事项: 套件中心配置里可以选择使用 beta 测试版组件,很可以依然没有 git server ,官方说基于 4.3 才有此组件。 下载中心里如果玩 pt 的话, bt 设置里要去掉 DHT 网络,共享率设置为 100,并且做好 bt 端口的 upnp 设置。这样才能保证有上传,不会被 ban 掉。 不同用户的配置是不一样的,所以不建议使用 admin 账号来配置 Video Station ,Audio Station,Download Station 和 Photo Station,最好新建一个属于 admin 组的账号再次登陆进行配置。","categories":[],"tags":[{"name":"DSM","slug":"DSM","permalink":"http://littlepig.cn/tags/DSM/"},{"name":"D400","slug":"D400","permalink":"http://littlepig.cn/tags/D400/"},{"name":"W130S","slug":"W130S","permalink":"http://littlepig.cn/tags/W130S/"},{"name":"Synology","slug":"Synology","permalink":"http://littlepig.cn/tags/Synology/"}]},{"title":"Dell PowerEdge R720 安装 EXSI 5.1","slug":"install-exsi-5-1-on-dell-poweredge-r720","date":"2013-07-19T11:20:57.000Z","updated":"2017-05-10T05:39:30.000Z","comments":true,"path":"posts/2013/07/19/install-exsi-5-1-on-dell-poweredge-r720/","link":"","permalink":"http://littlepig.cn/posts/2013/07/19/install-exsi-5-1-on-dell-poweredge-r720/","excerpt":"据说(仅仅是据说,没亲自验证),由于 R720 网卡 exsi 5.1 默认不支持,所以安装起来会有些问题,不过 dell 官网提供了定制的 exsi 5.1 版本,亲自安装了下,没有问题。","text":"据说(仅仅是据说,没亲自验证),由于 R720 网卡 exsi 5.1 默认不支持,所以安装起来会有些问题,不过 dell 官网提供了定制的 exsi 5.1 版本,亲自安装了下,没有问题。 1)下载定制后的 iso: VMware-VMvisor-Installer-5.1.0-799733.x86_64-Dell_Customized_RecoveryCD_A00 http://www.dell.com/support/drivers/us/en/04/DriverDetails/Product/poweredge-r720?driverId=XWYR5&fileId=3005015335&osCode=XI51 2)刻盘光盘启动或者用可启动 u 盘直接加载 iso 均可,我使用后一种,使用的是 myfeng.cn 制作的启动 u 盘,只需要将 iso 放置在 u 盘的 MyImg 目录中即可在启动菜单中选择以 iso 文件启动,很方便。 3)启动机器,开机按 Ctrl+R 进入 raid 控制器,即 PERC H310 Mini BIOS Configuration Utility,然后ctrl+N选择 PD Mgmt ,将三个硬盘依次按 F2 改为 Raid Capable 模式,然后 ctrl+P 进入 Vd Mgmt ,F2 创建 Virtul Disk,Radi5 模式,依次点选三个硬盘加入,然后 OK,即可创建好 Raid5模式的磁盘,Esc 退出。 4)插好可启动 u 盘,开机按 F11 选择启动设备,选择 BIOS Boot Mode,然后光标移动到 Disk C 菜单,即可出现硬盘和u盘的启动选项,选择 u 盘启动,菜单中选择从本地镜像启动,找到 Dell 的 iso 回车即可进入 exsi 的安装过程。 注意的是如果安装完毕就直接进入 vCenter 管理 exsi 会有 parity check in progress-assert 的存储器警告,应该是 raid 控制器初始化硬盘还没有完成,这个时间很长,可能甚至需要一天。","categories":[],"tags":[{"name":"Dell","slug":"Dell","permalink":"http://littlepig.cn/tags/Dell/"},{"name":"PowerEdge","slug":"PowerEdge","permalink":"http://littlepig.cn/tags/PowerEdge/"},{"name":"R720","slug":"R720","permalink":"http://littlepig.cn/tags/R720/"},{"name":"EXSI","slug":"EXSI","permalink":"http://littlepig.cn/tags/EXSI/"}]},{"title":"窗前一棵银杏树","slug":"ginkgo-tree-front-of-the-window","date":"2013-06-21T06:46:20.000Z","updated":"2016-10-17T09:05:23.000Z","comments":true,"path":"posts/2013/06/21/ginkgo-tree-front-of-the-window/","link":"","permalink":"http://littlepig.cn/posts/2013/06/21/ginkgo-tree-front-of-the-window/","excerpt":"","text":"我书房卧室前有一棵生机勃勃的银杏树,那是隔墙邻居刘大爷在院子里种的。它高约两丈,宝 塔式的树冠大半高过围墙,恰好投入窗前我的视野。冬去春来,夏秋相继,其叶由嫩绿而至深绿,由金黄及至枯落。四季交替,景物各异,人之心境亦随之潜移默化。 春时,银杏树在和风细雨的沐浴中,不经意间,仿佛一夜变绿。清晨黄昏,总有几只鸟雀在枝丫间蹦来跳去,追逐嬉戏,啁啾鸣叫,相呼应和。这时,我便常常放下手中的书籍或停下手中的鼠标,拿起桌上的茶杯,一边品茶一边赏景。 夏时,工作之余,学习之后,邀一二棋友,坐在银杏树下的石凳上对弈切磋;或是在月朗风清的晚上伫立于窗前,看银杏树的逆光剪影。这时的银杏树便像一服清心醒脑的清凉剂,任是深怨浅恨、新忧旧愁都会随之淡然飘去。 秋时,银杏树的叶子逐渐变黄。天高云淡,在蓝天白云的衬托下,在方形窗格的剪裁中,这时的银杏树像一幅美妙绝伦的风景画悬挂于墙上。为了让这幅风景画定格永远,我举起数码相机,将之输入电脑,把它设置成我的“桌面”。 冬时,银杏树的叶子渐次枯落,在呼啸的寒风中,它像天女散花,又似蝴蝶飞舞,飘飘洒洒,无怨无悔。“一个人在一生中只要为社会贡献出自己的那份真、善、美,来去洒脱,无羁不恋,又有何怨悔可言呢?”我独自沉思,为飘落的银杏叶寻找着注脚。 工作之余,闲暇之时,我喜欢一个人独坐书房,或阅读书籍,或构思文章,或学习软件,或电脑设计……累时,便举头凝望窗前的银杏树。总之,只要我置身书房,面对银杏树,便觉得无限的充实。正因为如此,别人总觉得我神秘兮兮、孤傲怪怪的,甚至于连自己的妻子都不理解,送我一个“月子婆”的绰号,对此,我都一笑置之。 “吾生也有涯,而知也无涯”。对知识,我有一种飞蛾扑火式的激情;对交友,我有一种宁缺毋滥的标准。与其为交友而沉溺于棋牌酒席,言不由衷,迎合应酬,倒不如独坐书房,与窗前的银杏树对视默契为妙。于己有益,于人无碍,又何必在乎别人说什么呢? 窗前的银杏树,早晚陪伴着我,让我身心沉静,引我思绪飘逸,真是我的红尘知己。","categories":[],"tags":[]},{"title":"T400更换SSD硬盘克隆原系统记录","slug":"thinkpad-t400-ssd-ghost-original-os","date":"2013-06-03T00:42:22.000Z","updated":"2016-10-31T07:31:57.000Z","comments":true,"path":"posts/2013/06/03/thinkpad-t400-ssd-ghost-original-os/","link":"","permalink":"http://littlepig.cn/posts/2013/06/03/thinkpad-t400-ssd-ghost-original-os/","excerpt":"","text":"因为 T400 启动 VS2010 的时候实在慢的要死,一直犹豫不决是否换 SSD 试试,京东刚好在搞十年店庆,于是没仔细调研,搞了块金士顿120G回来,换的过程简单很,没做照片,以文字记之。 硬件安装: 1)T400 的硬盘在右下角,关机、切断电源、找一个一字改锥,从背面拧开唯一的一个螺丝即可将硬盘通过塑料卡片拉出。 2)T400 对硬盘的保护还是比较到位的,硬盘夹两侧有塑胶条,拆下,然后用十字改锥将硬盘盒四边四个固定硬盘的螺丝拆下即可将原来硬盘拿出。 3)原样上好新的SSD硬盘,拧好螺丝,上好塑料夹,塞回机器原位置,拧好固定螺丝。 4)原硬盘准备放置到光驱位,按下光驱位的金属弹片使其弹出,然后向外拉动将光驱拿出。 5)将买来的硬盘盒拆开包装,首先将规定螺丝向外稍微松开下,将拆卸下来的机械硬盘置入,并插入 SATA2接口,这个可能需要点力气,然后将硬盘托架提供的一块长条形的固定塑料塞入硬盘尾部的缝隙固定好硬盘,拧紧螺丝,插入光驱位。 系统恢复: 原有系统有两个,XP在C,Win7在D,不想重做,准备用克隆方式克隆回SSD,Ghost 11 以上的版本已经支持不修改分区格式克隆数据,所以只要提前分好区设置好4K对齐即可。 1)保证 CMOS 设置中 SATA工作模式为 AHCI,做个 U 盘启动盘(我使用的 Myfeng.cn 提供的,一直在用,不错)并在 CMOS 里设置 U 盘启动为第一顺序。 2)插入 U 盘启动系统,进入 PE 3)启动 Diskgenius ,可以看到SSD硬盘,在其上点击新建分区、主分区、大小为 50G,修改簇大小为 4096 (即所谓的4K对齐),同样的过程新建另外的主分区 D,也为 50G ,剩下的11G左右新建一个 Temp 分区,用来存放频繁临时操作的文件,不经常操作的就备份回原来机械硬盘了,新建完毕之后,保存修改,Diskgenius 会自动将其格式化。 4)将新建的三个分区右键设置卷标为 SSDXP、SSDWin7、SSDTemp,目的是为了和原来机械硬盘的分区区别开,这样克隆时不会选错。 5)关掉 Diskgenius,启动 ghost32 (一定要是 11版本之后的,不要使用 8.3、8.5等早期版本),选择 partition to partition 将源机械硬盘的 XP 克隆到 SSDXP,Win7克隆到 SSDWin7,整个过程花费约 半小时(我的数据基本上每个分区都在 40G 左右),然后重新进入 Diskgenius 将SSD分区卷标改回 SSDXP、SSDWin7(因为克隆会连卷标一起克隆)。 6)克隆的 Win7 可能无法启动,启动进入 XP 系统,然后启动 NTBOOTautofix v2.5.7 ,选择手动修复模式,只修复 SSDXP/SSDWin7 两个分区上的系统启动菜单。 7)在磁盘管理器里将原机械硬盘的C D盘符改为符合你需要的或者删除(暂时不要删除数据,等确认 SSD 什么没问题了,再根据需要将机械硬盘空间回收做他用),将 SSDWin7 改为 D 盘。 8)重启机器进入 Win7,根据需要做 7),Win7系统里 SSDWin7 为 C ,SSDXP 为 D,二者和XP系统中是相反的,没有问题。 9)一切搞定,测试下速度吧,反正我的是不怎么样,VS2010该慢还是慢,其他程序倒是稍微感觉快些,但没有想象的那么好。","categories":[],"tags":[{"name":"T400 SSD","slug":"T400-SSD","permalink":"http://littlepig.cn/tags/T400-SSD/"}]},{"title":"C++ 判断是否64位系统","slug":"is-64-os","date":"2013-05-26T00:24:02.000Z","updated":"2016-10-17T09:18:57.000Z","comments":true,"path":"posts/2013/05/26/is-64-os/","link":"","permalink":"http://littlepig.cn/posts/2013/05/26/is-64-os/","excerpt":"","text":"123456789101112BOOL _Is64OS(){ typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process; BOOL bIsWow64 = FALSE; fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle("kernel32"),"IsWow64Process"); if (NULL != fnIsWow64Process) { fnIsWow64Process(GetCurrentProcess(),&amp;bIsWow64); } return bIsWow64;}","categories":[],"tags":[{"name":"c++ 64","slug":"c-64","permalink":"http://littlepig.cn/tags/c-64/"}]},{"title":"绿色安装版 Visual C++ 6.0","slug":"visuall-c-6-0-win7-win8","date":"2013-05-11T02:21:42.000Z","updated":"2016-10-17T08:31:02.000Z","comments":true,"path":"posts/2013/05/11/visuall-c-6-0-win7-win8/","link":"","permalink":"http://littlepig.cn/posts/2013/05/11/visuall-c-6-0-win7-win8/","excerpt":"","text":"一直见到有人烦恼在 Windows 7 或者 Windows 8 下运行 Visual C++ 6.0 ,我想这主要得益于庞大的教育大军,几乎所有的国内高校计算机基础课程还在推荐 VC6 作为学习编程基础的软件,的确,启动运行速度快,体积小,人见人爱,我也一直在用,不过我不习惯 Win7和Win8,故在 XP 下没出现过很多的问题,看到不少同学都把精力浪费在了想法解决 VC6 的兼容性上,于是做个了小程序包装了个 VC6 的绿色安装版,在 Win7 64位平台上测试了下,没有问题,欢迎使用。 下载链接:http://w.scse.hebut.edu.cn/download/75/ 在做这个小工具过程中的总结如下: GetWindowsDirectory 函数在 64 位Win7/8 下得到的是 system32 目录,不过如果你是32位应用程序 DLL,你应该放置在 c:\\windows\\SysWOW64 目录 SHFileOperation 在 win7/8 下操作系统目录会出现权限问题,所以不能用来拷贝文件到系统目录,只好自己一个一个CopyFile了 注册表文件是 unicode 的,读写比较麻烦,尤其是在 ansi 里读。 通过添加资源的办法可以让 VC6 编写的程序原生具备提权功能,参见:http://jingyan.baidu.com/article/f0e83a25c2e78a22e5910137.html","categories":[],"tags":[{"name":"6.0","slug":"6-0","permalink":"http://littlepig.cn/tags/6-0/"},{"name":"c#","slug":"c","permalink":"http://littlepig.cn/tags/c/"},{"name":"VC6","slug":"VC6","permalink":"http://littlepig.cn/tags/VC6/"},{"name":"Visual","slug":"Visual","permalink":"http://littlepig.cn/tags/Visual/"},{"name":"Win7","slug":"Win7","permalink":"http://littlepig.cn/tags/Win7/"},{"name":"Win8","slug":"Win8","permalink":"http://littlepig.cn/tags/Win8/"}]},{"title":"XP 下的 VIA OHCI Compliant IEEE 1394 Host Controller","slug":"via-ohci-compliant-ieee-1394-host-controller-for-xp","date":"2013-03-19T04:14:31.000Z","updated":"2016-10-17T08:33:41.000Z","comments":true,"path":"posts/2013/03/19/via-ohci-compliant-ieee-1394-host-controller-for-xp/","link":"","permalink":"http://littlepig.cn/posts/2013/03/19/via-ohci-compliant-ieee-1394-host-controller-for-xp/","excerpt":"","text":"最近需要在 XP 系统下接 1394 接口的相机,T400 本上插入 1394 转接卡,提示正在安装 VIA OHCI Compliant IEEE 1394 Host Controller 驱动,只是安装后报错,打开设备管理器 1394 里的设备也是无效,后来查找资料了解到 VIA 1394 驱动早在 win98 的时候就已经内置在操作系统里了,为什么报错呢,可能是我 XP 用的系统是 ghost 版本的,给精简掉了吧,于是利用驱动精灵从别的正常的 XP 系统上备份了一份 1394 驱动,然后还原到 T400 上,可是仍然无效,设备管理器那里提示没有驱动文件,后来查找到是 system32\\drivers 里缺少 1394ohci.sys 文件,这个文件不太好找,不过仍然从微软官方网站得到了一个补丁包,http://support.microsoft.com/kb/952825 ,这个补丁安装完毕之后,仍然找不到这个文件,不过多了个 ohci1394.sys ,看着这个文件名,手痒痒就给拷贝了份改成了 1394ohci.sys,然后重新启动设备,竟然没问题了。吐!","categories":[],"tags":[{"name":"XP VIA OHCI IEEE 1394","slug":"XP-VIA-OHCI-IEEE-1394","permalink":"http://littlepig.cn/tags/XP-VIA-OHCI-IEEE-1394/"}]},{"title":"linux 中设备的分区格式化和加载","slug":"linux-fdisk-format-mount","date":"2013-01-26T12:50:06.000Z","updated":"2016-10-17T08:54:07.000Z","comments":true,"path":"posts/2013/01/26/linux-fdisk-format-mount/","link":"","permalink":"http://littlepig.cn/posts/2013/01/26/linux-fdisk-format-mount/","excerpt":"","text":"在 stacklab 申请了个 centos 测试玩,系统可以申请 volume 动态 attach 到虚拟机上,怎么用这个 volume 呢,attach 到系统的设备名为 /dev/vdc 。 1fdisk /dev/vdc a 可以添加分区,有主分区和扩展分区之分t 可以改变分区类型,通过输入分区类型 id 来设定,l 可以列出所有 id,比如 linux 是 83w 保存退出 如果你只建立了一个分区,此时会多出 /dev/vdc1 格式化分区 1mkfs.ext4 /dev/vdc1 加载分区 12mkdir /mnt/vdc1mount -t ext4 /dev/vdc1 /mnt/vdc1 如果想自动加载,可以编辑 /etc/fstab 1vim /etc/fstab 添加 1/dev/vdc1 /mnt/vdc1 ext4 default 0 0`","categories":[],"tags":[{"name":"fdisk","slug":"fdisk","permalink":"http://littlepig.cn/tags/fdisk/"},{"name":"mount","slug":"mount","permalink":"http://littlepig.cn/tags/mount/"}]},{"title":"debian 下 安装 mongodb","slug":"install-mongodb-on-debian","date":"2013-01-07T07:24:03.000Z","updated":"2016-10-17T09:16:32.000Z","comments":true,"path":"posts/2013/01/07/install-mongodb-on-debian/","link":"","permalink":"http://littlepig.cn/posts/2013/01/07/install-mongodb-on-debian/","excerpt":"mongodb 属于比较接近 SQL 的 NoSQL 产品,最近想了解下,于是做了个小的 mongodb 集群,安装配置在 debian 下简单的真是不值一提,这里权当做下记录好了。","text":"mongodb 属于比较接近 SQL 的 NoSQL 产品,最近想了解下,于是做了个小的 mongodb 集群,安装配置在 debian 下简单的真是不值一提,这里权当做下记录好了。 官方文档在此 http://cn.docs.mongodb.org/manual/tutorial/install-mongodb-on-debian/ 简单罗列如下 1sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 添加源 1vim /etc/apt/sources.list deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen 安装 12apt-get updateapt-get install mongodb-10gen 要做集群的话这样 1vim /etc/mongodb.conf 设置最后的 replSet = myserverdbset 然后 1/etc/init.d/mongodb restart 其她机器照葫芦画瓢做好上述工作 然后在任意一台机器上 1mongodb 进入mongo shell 1234567>config = {_id:"myserverdbset",members:[... {_id:0,host:'db.myserver.com:27017'},... {_id:1,host:'db1.myserver.com:27017'},... {_id:2,host:'db2.myserver.com:27017'}]... }>rs.initiate(config); 完成,提示集群一分钟内上线 查看状态可以使用 1>rs.status();","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"mongodb","slug":"mongodb","permalink":"http://littlepig.cn/tags/mongodb/"},{"name":"NoSQL","slug":"NoSQL","permalink":"http://littlepig.cn/tags/NoSQL/"}]},{"title":"SVN 转移到 Git","slug":"svn-to-git","date":"2013-01-06T01:26:51.000Z","updated":"2016-10-31T12:01:30.000Z","comments":true,"path":"posts/2013/01/06/svn-to-git/","link":"","permalink":"http://littlepig.cn/posts/2013/01/06/svn-to-git/","excerpt":"一直使用 SVN 来同步自己的代码,这样可以方便的保留历史记录,不过,有一点不方便的就是,提交时必须保证能连接到 SVN Server ,Git 就不必,可以本地提交,待到连网时再同步到 Git Server ,于是,这两天把自己的 SVN Server 更新成了 Git Server。","text":"一直使用 SVN 来同步自己的代码,这样可以方便的保留历史记录,不过,有一点不方便的就是,提交时必须保证能连接到 SVN Server ,Git 就不必,可以本地提交,待到连网时再同步到 Git Server ,于是,这两天把自己的 SVN Server 更新成了 Git Server。 我的 SVN Server 是安装在我的 NAS 的 Server 2012 上的,使用的是 VisualSVN Server,用起来极其方便,这次找来找去找到了一个支持 Windows 平台的 GitStack ,免费版本支持 2 个用户但不限定功能,这对个人用户足够了,到 http://gitstack.com/ 上下载,安装一路 Next 即可,需要注意的是,如果你的系统里有其他 Web Server ,比如 IIS 什么的,需要先停止掉,因为 GitStack 安装的 apache 默认会占据 80 端口 。安装完毕之后会进入web配置界面,简洁,基本上一眼就能看懂,需要注意的如下 1)如果你的服务器是公网,尽量禁止掉 Web 浏览仓库的功能,因为我发现这个 web 界面默认会列出来所有仓库的名称,虽然进入每个仓库需要账户,但是被人看见项目名称也不爽吧。 2)要在你的系统防火墙里允许 httpd.exe (就是gitstack 带的 apache )通过,否则 clone 或者 push 都会出现 401 error 。 3)每个仓库都要设置账户,这点和 visualsvn server 不同,visualsvn server 的账户是通用的,gitstack 每个仓库都必须单独指定访问账户及权限。 接下来把 svn 仓库转入 gitstack 稍微麻烦点,每个仓库都需要用 git 从 svn server 克隆出来处理之后再 push 进去,不过官方给了步骤,按部就班即可。参见 http://gitstack.com/migrate-from-svn-to-git/ git 客户端使用的还是那只乌龟的 TortoiseGit ,不过注意需要先安装 git 才可以。 补充: 用了一会,发现 git 不支持部分克隆(部分导出,或者说单独导出仓库的某个子目录),郁闷,这可是很有必要的功能啊,否则仓库数量就太多了。","categories":[],"tags":[{"name":"git","slug":"git","permalink":"http://littlepig.cn/tags/git/"},{"name":"gitstack","slug":"gitstack","permalink":"http://littlepig.cn/tags/gitstack/"},{"name":"svn","slug":"svn","permalink":"http://littlepig.cn/tags/svn/"},{"name":"tortoisegit","slug":"tortoisegit","permalink":"http://littlepig.cn/tags/tortoisegit/"},{"name":"visualsvn","slug":"visualsvn","permalink":"http://littlepig.cn/tags/visualsvn/"}]},{"title":"bootstrap 的 IE6 补丁","slug":"bootstrap-for-ie6","date":"2013-01-04T03:57:32.000Z","updated":"2016-11-05T01:30:50.000Z","comments":true,"path":"posts/2013/01/04/bootstrap-for-ie6/","link":"","permalink":"http://littlepig.cn/posts/2013/01/04/bootstrap-for-ie6/","excerpt":"","text":"空闲时间偶尔试了下 bootstrap ,挺好用,但是 IE6 下惨不忍睹,官方也没有计划修正,于是到处找 IE6 的补丁,github 上有两个,其中很早的一个经验证无效,ddouble 的 bsie 很是不错,美观性暂且不管,至少让页面那些什么 dropdown btn 之类的可用了,只是有一个小 bug ,在最新的 jquery 下 dorpdown btn 点击会引起 IE6 假死,作者提供的 1.7.2 版本没任何问题。这个问题已经提交给了作者,希望速速修正,这里表示感谢。 项目主页在 https://github.com/ddouble/bsie","categories":[],"tags":[{"name":"bootstrap","slug":"bootstrap","permalink":"http://littlepig.cn/tags/bootstrap/"},{"name":"ie6","slug":"ie6","permalink":"http://littlepig.cn/tags/ie6/"},{"name":"patch","slug":"patch","permalink":"http://littlepig.cn/tags/patch/"}]},{"title":"Debian 的常见配置汇总","slug":"debian-config","date":"2012-12-30T01:39:58.000Z","updated":"2016-10-17T07:03:33.000Z","comments":true,"path":"posts/2012/12/30/debian-config/","link":"","permalink":"http://littlepig.cn/posts/2012/12/30/debian-config/","excerpt":"虽然各种LINUX发行版都用过,不过感觉最方便易用的还是 debian ,稳定(版本更新周期长)、轻便(不加乱七八糟的东西)、高效(好用的包管理机制),不过自己懒,加之配置完就扔一边用去,不是天天接触,所以每次配置都习惯去 Internet 上搜,效率低,想想还是自己把过程记录下来比较好。","text":"虽然各种LINUX发行版都用过,不过感觉最方便易用的还是 debian ,稳定(版本更新周期长)、轻便(不加乱七八糟的东西)、高效(好用的包管理机制),不过自己懒,加之配置完就扔一边用去,不是天天接触,所以每次配置都习惯去 Internet 上搜,效率低,想想还是自己把过程记录下来比较好。 安装教育网内比较快的两个安装源是 debian.ustc.edu.cn (mirrors.ustc.edu.cn)和 mirrors.163.com,一种方式是下载 mini.iso (在 http://mirrors.ustc.edu.cn/debian/dists/squeeze/main/installer-amd64/current/images/netboot/ )利用光盘或者刻录到U盘启动系统, 还有另外一种安装方式是利用 GRUB4DOS ,从 http://mirrors.ustc.edu.cn/debian/dists/squeeze/main/installer-amd64/current/images/netboot/debian-installer/amd64/ 下载 linux和initrd.gz 到 c:\\debian 目录,然后在 menu.lst 里添加 123title debian installkernel (hd0,0)/debian/linux root=/dev/ram ramdisk_size=8192 devfs=mount,dallinitrd (hd0,0)/debian/initrd.gz 启动即可进入 debian 安装界面,从http://mirrors.ustc.edu.cn/debian 进行网络安装即可,基本系统大约 300M。 常用工具apt-get install vim screen ssh wget 修改终端字体个人比较喜欢把大小改为 12 1vim /etc/default/console-setup 更改 locale1dpkg-reconfigure locales 安装轻量级的 XFCEapt-get install xfce4apt-get install gdm 网络基本设置设置 ip 等信息1vim /etc/network/interfaces 设置 DNS 域名服务器1vim /etc/resolve.conf 设置机器名1vim /etc/hostname 设置 hosts1vim /etc/hosts 设置时间自动同步1vim /etc/default/rcS 将 UTC 改为 no 12apt-get install ntpdatentpdate pool.ntp.org 或者 1ntpdate time.edu.cn 1vim /etc/rc.local 将上述最后一条指令加入 exit 0 前面以便每次启动自动对时 配置透明网关(软路由)参见:Debian 下配置软路由(透明网关) 配置 DNS参见:Debian 下 Bind9 的基本配置 配置时间服务器配置 Samba配置 FTP参见:Debian 下 vsftpd 的安装配置 配置 LNMP参见:Debian 下 nginx + php-fpm 的安装配置 配置 MYSQLapt-get install mysql-server mysql-client vim /etc/mysql/my.cnf 如果需要外部访问,则注释掉 bind = 127.0.0.1 如果需要高访问量则调节 key_buffer_size = 512M 等参数 启动停止:/etc/init.d/mysql start|stop|restart 如果需要配置主从同步参见:MYSQL的主从同步","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"}]},{"title":"debian 下 tengine 的安装和使用","slug":"tengine-install","date":"2012-12-30T01:12:13.000Z","updated":"2019-08-07T03:41:10.000Z","comments":true,"path":"posts/2012/12/30/tengine-install/","link":"","permalink":"http://littlepig.cn/posts/2012/12/30/tengine-install/","excerpt":"","text":"tengine 是淘宝开源的 nginx 修改版本,添加了一些新的特性,官方网站在此 http://tengine.taobao.com ,我习惯使用 dotdeb 的 nginx ,因此按照 dotdeb 编译 nginx 的参数编译了下 tengine 代替 nginx . 安装编译环境1apt-get install build-essential 安装 dotdeb 的 nginx 可参考Debian 下 nginx + php-fpm 的安装配置 获取 tengine 的源代码12wget -c http://tengine.taobao.org/download/tengine-1.4.2.tar.gztar zxvf tengine-1.4.2.tar.gz 获取第三方模块nginx 第三方库可以从这个网址下载http://wiki.nginx.org/3rdPartyModules dotdeb 安装了几个第三方库,但是有一些我从这个页面上没有找到,所以只下载了其中的 5 个,放置在了 /root/modules 目录中,结构如下 nginx-auth-pam nginx-echo ginx-upstream-fair nginx-cache-purge nginx-http-substitution-filter 一些编译需要的附加模块编译 tengine 及 这5个第三方库需要一些附加库,依次安装 1234567apt-get install libpcre3-devapt-get install libssl-devapt-get install libxml2-devapt-get install libxslt1-devapt-get install libgd2-xpm-devapt-get install libgeoip-devapt-get install libpam-dev 这几个库不是很好找,我的 sources.list 是这样的 1234567891011deb http://mirrors.ustc.edu.cn/debian/ squeeze maindeb-src http://mirrors.ustc.edu.cn/debian/ squeeze maindeb http://security.debian.org/ squeeze/updates maindeb-src http://security.debian.org/ squeeze/updates maindeb http://mirrors.ustc.edu.cn/debian/ squeeze-updates maindeb-src http://mirrors.ustc.edu.cn/debian/ squeeze-updates maindeb http://packages.dotdeb.org squeeze all 开始编译123cd tengine-1.4.2`./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-file-aio --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_secure_link_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/root/modules/nginx-auth-pam --add-module=/root/modules/nginx-echo --add-module=/root/modules/nginx-upstream-fair --add-module=/root/modules/nginx-cache-purge --add-module=/root/modules/nginx-http-substitution-filter --with-http_upstream_check_module --with-http_concat_module --dso-path=/etc/nginx/modules 其中新加入的几个参数是 --with-http_upstream_check_module 是后端服务器主动健康检查模块 --with-http_concat_module 是 js,css等文件合并模块 --dso-path 指定动态 modules 所在目录,放置在 /etc/nginx/modules 1make 替换 nginx编译完成后,将 objs 中的 nginx 代替 dotdeb 中的即可。 12mv /usr/sbin/nginx /usr/sbin/nginx.before.tenginemv /root/tengine-1.4.2/objs/nginx /usr/sbin/ 其他使用方式和 dotdeb 一样 用 nginx -V 可以查看到 nginx 已经被替换为 tengine 。","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"nginx","slug":"nginx","permalink":"http://littlepig.cn/tags/nginx/"},{"name":"tengine","slug":"tengine","permalink":"http://littlepig.cn/tags/tengine/"}]},{"title":"nginx做反向代理网站提示被重置","slug":"site-blocked","date":"2012-12-28T13:19:53.000Z","updated":"2016-10-31T11:58:13.000Z","comments":true,"path":"posts/2012/12/28/site-blocked/","link":"","permalink":"http://littlepig.cn/posts/2012/12/28/site-blocked/","excerpt":"","text":"Exsi 中的两台虚拟机,Debian 系统,暂且称为 A 和 B ,均配置两块网卡,一内一外,不同之处是 A 同时做了个 DNS ,添加了一个内部使用的域 myserver.com,并配置为了透明代理做网关,内网地址为 192.168.1.1 ,B 用 nginx 做反向代理代理内部的其他 web server 对外提供服务,dns 设置为了 192.168.1.1 。 奇怪现象的产生是不定的,具体表现为 A 工作一直正常,B 代理的网站如果在内部机器上(比如 192.168.1.1 或者 .1.x )访问完全没有问题,同一个外部网段的机器访问也完全没有问题,但是其他网段就不一定了,有的能访问,有的会提示重置,ping B 什么的都是没有问题,只是访问 web service 会连接不上, lynx 会提示 cannot read document 。如果把 B 换个外网 IP,则偶尔会能正常工作一段时间,比如一天,或者一个小时,然后就连不上了,但这个 IP 放到其他服务器上是好好的,最初怀疑是上层路由器根据某种规则禁止掉了,但是又被否定了,因为同样的两外一台做反向代理的机器 C 就没有问题,这种困扰一直持续了好几周,尝试了各种办法都无法确认是哪的问题,你说 web service 的问题吧,没防火墙,没定规则,而且内网访问就没事,你说路由器的设置问题吧,怎么 C 就没事呢。 上周在视图修改 nginx 的反向代理配置的时候,眼光盯了下 upstream server 的配置语句,留意到都是使用的内网域名,即 xxx.myserver.com 的字样,记得网上大部分资料这部分都是直接提供的 ip 地址,当时还想呢,当内网机器数量比较多的时候,使用 ip 地址多不好记啊,弄个 DNS 用来解析内部域名多方便,所以才有了 A 这台 DNS,也正是这个原因,才把 B 的 DNS 设置为了 192.168.1.1 。想到 nginx 可能会使用反向解析,会不会是DNS的原因呢,于是尝试把 B 改为实际 DNS ,然后把 B 反向代理配置文件中的 xxx.myserver.com 都改为内网对应的 IP 地址 ,重启 nginx ,一切正常,不能访问的问题解决了。晕倒,难道是 A 做的 DNS 的问题?于是重新试验了下 A 的 DNS ,正向和反向工作均没有问题,这就奇了怪了。 头疼,反正问题解决了,先凑合用吧。","categories":[],"tags":[{"name":"nginx","slug":"nginx","permalink":"http://littlepig.cn/tags/nginx/"},{"name":"blocked","slug":"blocked","permalink":"http://littlepig.cn/tags/blocked/"}]},{"title":"Debian 下配置软路由(透明网关)","slug":"debian-router-gateway","date":"2012-12-21T05:21:38.000Z","updated":"2016-10-17T07:43:32.000Z","comments":true,"path":"posts/2012/12/21/debian-router-gateway/","link":"","permalink":"http://littlepig.cn/posts/2012/12/21/debian-router-gateway/","excerpt":"Debian做软路由的好处一是可以解决IP地址不足的问题,内网机器通过软路由共享一个公网IP连入 internet,另外就是软路由本身就是做防火墙,避免内网机器暴露。","text":"Debian做软路由的好处一是可以解决IP地址不足的问题,内网机器通过软路由共享一个公网IP连入 internet,另外就是软路由本身就是做防火墙,避免内网机器暴露。 其实这功能早在 n 年前就很成熟了,我印象中 99 年左右的 redhat 6 就已经支持的非常不错。 debian 下配置过程如下: 假如你的 debian 已经有了 eth0 并且配置了公网 IP 1vim /etc/network/interfaces 类似 eth0,添加 eth1 为内网ip: 192.168.1.1 ,修改 eth0 为外网ip 1vim /etc/sysctl.conf 去掉 net.ipv4.ip_forward=1 前面的 # 立即生效 1echo 1 > /proc/sys/net/ipv4/ip_forward 防火墙规则设定 1iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 重启网络 1/etc/init.d/networking restart 设置自启动 1vim /etc/rc.local 将上述最后两个步骤的指令添加到 exit 0 前面实现自启动 这样连接 eth1 的内网机器将网关设置为 192.168.1.1 即可通过该机连入 internet 。 上述指令我是在 exsi 的虚拟系统里做的,所以添加网卡啥的都简单的很,单网卡也可以用类似的方式,只不过不是 eth1 了。可上网搜索之。 刚记录完这篇,顺手搜了下,原来有更简单的 ,配置完了内外网ip之后 apt-get install ipmasq 即可,吐血!","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"gateway","slug":"gateway","permalink":"http://littlepig.cn/tags/gateway/"},{"name":"ipmasquerade","slug":"ipmasquerade","permalink":"http://littlepig.cn/tags/ipmasquerade/"},{"name":"router","slug":"router","permalink":"http://littlepig.cn/tags/router/"}]},{"title":"Debian 下 nginx + php-fpm 的安装配置","slug":"debian-nginx-php-fpm","date":"2012-12-21T01:57:52.000Z","updated":"2016-10-17T08:06:50.000Z","comments":true,"path":"posts/2012/12/21/debian-nginx-php-fpm/","link":"","permalink":"http://littlepig.cn/posts/2012/12/21/debian-nginx-php-fpm/","excerpt":"","text":"debian 下安装 LNMP 环境方便的很,只是自带的 nginx 版本比较低,故使用的是dotdeb的安装包。MySQL 用自带的即可,目前是 5.5","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"nginx","slug":"nginx","permalink":"http://littlepig.cn/tags/nginx/"},{"name":"cluster","slug":"cluster","permalink":"http://littlepig.cn/tags/cluster/"},{"name":"dotdeb","slug":"dotdeb","permalink":"http://littlepig.cn/tags/dotdeb/"},{"name":"php-fpm","slug":"php-fpm","permalink":"http://littlepig.cn/tags/php-fpm/"},{"name":"proxy","slug":"proxy","permalink":"http://littlepig.cn/tags/proxy/"}]},{"title":"Debian 下 Bind9 的基本配置","slug":"debian-bind9","date":"2012-12-21T01:52:28.000Z","updated":"2019-08-07T09:51:01.000Z","comments":true,"path":"posts/2012/12/21/debian-bind9/","link":"","permalink":"http://littlepig.cn/posts/2012/12/21/debian-bind9/","excerpt":"有时候给内网配置个DNS很方便,至少做起实验来可以随便搞域名不用担心冲突。","text":"有时候给内网配置个DNS很方便,至少做起实验来可以随便搞域名不用担心冲突。 安装1apt-get install bind9 添加转发DNS为你的实际DNS1vim /etc/bind/named.conf.options 1234567891011forwarders {202.113.112.55;202.113.112.45;222.222.222.222;8.8.8.8;}; 1vim /etc/bind/named.conf.local 添加配置域添加一个你自己的域及其反向域,比如我的是 myserver.com 12345678zone "1.168.192.in-addr.arpa" {type master;file "/var/lib/bind/192.168.1.hosts";};zone "myserver.com" {type master;file "/var/lib/bind/myserver.com.hosts";}; 然后配置该域记录 1vim /var/lib/bind/myserver.com.hosts 照葫芦画瓢,我的是这样的 12345678910111213141516171819202122232425262728293031$ttl 38400myserver.com. IN SOA dis. zhuhuaizhong.126.com. (134274971310800360060480038400 )myserver.com. IN NS dis.www.myserver.com. IN A 192.168.1.2www1.myserver.com. IN A 192.168.1.3www2.myserver.com. IN A 192.168.1.4www3.myserver.com. IN A 192.168.1.5db.myserver.com. IN A 192.168.1.6db1.myserver.com. IN A 192.168.1.7db2.myserver.com. IN A 192.168.1.8dbbak.myserver.com. IN A 192.168.1.9static.myserver.com. IN A 192.168.1.10staticbak.myserver.com. IN A 192.168.1.11mem.myserver.com. IN A 192.168.1.12dis.myserver.com. IN A 192.168.1.1hdmanager.myserver.com. IN A 192.168.1.20hdmaster.myserver.com. IN A 192.168.1.21hdslaver1.myserver.com. IN A 192.168.1.22hdslaver2.myserver.com. IN A 192.168.1.23hdslaver3.myserver.com. IN A 192.168.1.24hdslaver4.myserver.com. IN A 192.168.1.25hdslaver5.myserver.com. IN A 192.168.1.26hdslaver6.myserver.com. IN A 192.168.1.27hdslaver7.myserver.com. IN A 192.168.1.28hdslaver8.myserver.com. IN A 192.168.1.29hdbackup.myserver.com. IN A 192.168.1.30 配置反向域记录: 1vim /var/lib/bind/192.168.1.hosts 我的是这样的: 12345678910111213141516171819202122232425262728293031$ttl 38400@ IN SOA dis. zhuhuaizhong.126.com. (134274971310800360060480038400 )IN NS dis.1 PTR dis.myserver.com.2 PTR www.myserver.com.3 PTR www1.myserver.com.4 PTR www2.myserver.com.5 PTR www3.myserver.com.6 PTR db.myserver.com.7 PTR db1.myserver.com.8 PTR db2.myserver.com.9 PTR dbbak.myserver.com.10 PTR static.myserver.com.11 PTR staticbak.myserver.com.12 PTR mem.myserver.com.20 PTR hdmanager.myserver.com.21 PTR hdmaster.myserver.com.22 PTR hdslaver1.myserver.com.23 PTR hdslaver2.myserver.com.24 PTR hdslaver3.myserver.com.25 PTR hdslaver4.myserver.com.26 PTR hdslaver5.myserver.com.27 PTR hdslaver6.myserver.com.28 PTR hdslaver7.myserver.com.29 PTR hdslaver8.myserver.com.30 PTR hdbackup.myserver.com. 服务的启动停止:1/etc/init.d/bind9 start|stop|restart","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"bind9","slug":"bind9","permalink":"http://littlepig.cn/tags/bind9/"},{"name":"DNS","slug":"DNS","permalink":"http://littlepig.cn/tags/DNS/"},{"name":"domain","slug":"domain","permalink":"http://littlepig.cn/tags/domain/"}]},{"title":"htpasswd 脚本","slug":"htpasswd","date":"2012-12-19T06:52:40.000Z","updated":"2016-10-17T08:59:34.000Z","comments":true,"path":"posts/2012/12/19/htpasswd/","link":"","permalink":"http://littlepig.cn/posts/2012/12/19/htpasswd/","excerpt":"","text":"linux 下经常需要生成用 htpaswd 加密的账户数据,这个工具在 apache2-utils 里,可是现在大部分都用 nginx 了,于是从网上找了个编写的 shell 脚本来实现这个功能,输入用户名和密码并指定要存放的文件路径和名称即可。 原始脚本来自于 http://www.lnmp.org ,作者 licess ,在此表示感谢! 代码: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH`echo "====================================="echo "# A tool like htpasswd for Nginx #"echo "#-----------------------------------#"echo "# Author:Licess http://www.lnmp.org #"echo "====================================="#set UserNameusername=""read -p "Please input UserName:" usernameif [ "$username" = "" ]; thenecho "Error:UserName can't be NULL!"exit 1fiecho "==========================="echo "UserName was: $username"echo "==========================="#set passwordunpassword=""read -p "Please input the Password:" unpasswordif [ "$unpassword" = "" ]; thenecho "Error:Password can't be NULL!"exit 1fiecho "==========================="echo "Password was: $unpassword"echo "==========================="password=$(perl -e 'print crypt($ARGV[0], "pwdsalt")' $unpassword)#set htpasswd filehtfile=""read -p "Please input Auth filename with absorlute path:" htfileif [ "$htfile" = "" ]; thenecho "Error:Auth filename can't be NULL!"exit 1fiecho "==========================="echo "Auth File: $htfile"echo "==========================="get_char(){SAVEDSTTY=`stty -g`stty -echostty cbreakdd if=/dev/tty bs=1 count=1 2> /dev/nullstty -rawstty echostty $SAVEDSTTY}echo ""echo "Press any key to Creat...or Press Ctrl+c to cancel"char=`get_char`if [ ! -f $htfile.conf ]; thenecho "Create Auth file......"cat >$htfile<<eof$username:$passwordeofecho "Create Auth file successful,auth file path:$htfile."elseecho "File already exists,please run this script again."exit 1fi","categories":[],"tags":[{"name":"nginx","slug":"nginx","permalink":"http://littlepig.cn/tags/nginx/"},{"name":"htpasswd","slug":"htpasswd","permalink":"http://littlepig.cn/tags/htpasswd/"},{"name":"password","slug":"password","permalink":"http://littlepig.cn/tags/password/"}]},{"title":"Debian 下 vsftpd 的安装配置","slug":"install-vsftpd-in-debian","date":"2012-12-17T06:44:42.000Z","updated":"2016-10-17T09:18:35.000Z","comments":true,"path":"posts/2012/12/17/install-vsftpd-in-debian/","link":"","permalink":"http://littlepig.cn/posts/2012/12/17/install-vsftpd-in-debian/","excerpt":"一直使用 samba 来更新 debian 服务器上的 web 内容,主要是方便,尤其是拷贝和更新大容量内容的时候,但是在家里的时候连接教育网的服务器很慢,samba 操作起来停顿很多,影响效率,于是安装了个可以使用虚拟用户的 vsftpd 。","text":"一直使用 samba 来更新 debian 服务器上的 web 内容,主要是方便,尤其是拷贝和更新大容量内容的时候,但是在家里的时候连接教育网的服务器很慢,samba 操作起来停顿很多,影响效率,于是安装了个可以使用虚拟用户的 vsftpd 。 需求 用一个叫做 web 的用户登录 ftp 服务器,使其可以修改 web 根目录 /www 中的内容。 直接安装二进制包 1apt-get install vsftpd 修改配置文件 1vim /etc/vsftpd.conf 保证下边几个参数 12345678anonymous_enable=NOlocal_enable=YESguest_enable=YESguest_username=www-datauser_config_dir=/etc/vsftpd/user_conflocal_umask=022pam_service_name=vsftpd #这个参数在最后 上边参数开启了虚拟账户访问,并将该虚拟账户映射为实际账户 www-data ,www-data 一般只要安装了 web server 就存在,这样就可以避免再单独建立新账户了。 如果你的 web 根目录不是 /www ,那根据自己需要修改 /etc/passwd 中 www-data 的 home 目录,并利用 chown 设置属主为 www-data。 1chown -R www-data.www-data /www 在你的 mysql 服务器上的某个库里建立一个 nsftpdvu 的表,里边字段为 name和 passwd,插入一行记录,用户名为 web,密码自己设置好 安装认证模块 1apt-get install libpam-mysql 修改认证配置 1vim /etc/pam.d/vsftpd 把原有内容全部注释或者删掉,添加如下两行,其中的参数,比如mysql账户名密码及主机库名等根据自己 mysql 参数修改,crypt = 0 代表存储的是明文密码。 12auth required pam_mysql.so user=root passwd=urdbrootpwd host=urdbserver db=urdb table=vsftpdvu usercolumn=name passwdcolumn=passwd crypt=0account required pam_mysql.so user=root passwd=urdbrootpwd host=urdbserver db=urdb table=vsftpdvu usercolumn=name passwdcolumn=passwd crypt=0 接下来添加账户 web 的配置文件 12mkdir /etc/vsftpdmkdir /etc/vsftpd/user_conf 1vim /etc/vsftpd/user_conf/web 内容如下 12345678local_root=/wwwanon_world_readable_only=NOanon_umask=022write_enable=YESdownload_enable=YESanon_mkdir_write_enable=YESanon_upload_enable=YESanon_other_write_enable=YES 如果你需要添加其他账户,只需要在 vsftpdvu 表里添加账户名和密码,然后照葫芦画瓢在 /etc/vsftpd/user_conf 目录中再建立一个以账户名命名的配置文件即可。 重启vsftpd 1/etc/init.d/vsftpd restart 测试用 web 登录,一切正常 另:vsftpd.conf 中的 listen ipv6 选项我开启后,说什么也连不上 ftp ,注释掉就好了,难道不能两套同时监听? 另:如果提示 vsftpd: refusing to run with writable root inside chroot() 则需要使用如下命令将用户主目录的属性去掉可写 1chmod a-w /www","categories":[],"tags":[{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"vsftpd","slug":"vsftpd","permalink":"http://littlepig.cn/tags/vsftpd/"},{"name":"www","slug":"www","permalink":"http://littlepig.cn/tags/www/"}]},{"title":"Server 系统上 HP 打印机驱动的安装","slug":"install-hp-printer-driver-on-server-series","date":"2012-11-13T11:27:11.000Z","updated":"2016-10-17T09:13:25.000Z","comments":true,"path":"posts/2012/11/13/install-hp-printer-driver-on-server-series/","link":"","permalink":"http://littlepig.cn/posts/2012/11/13/install-hp-printer-driver-on-server-series/","excerpt":"","text":"很多打印服务器都是 Server 系列操作系统,但 HP 的打印机很多驱动官方都是不支持 Server 系列的,从 Server 2003 一直到 2012 都会提示 “产品类型与支持的产品类型列表不符” ,但其实就打印机驱动来说,这玩意应该没有多少和系统关联紧密的东西,理论上不应该不支持,把驱动文件从安装包中提取然后直接更新驱动应该就可以,不过国外的大神们给出了更简单的办法 当安装包显示 “产品类型与支持的产品类型列表不符” 时,按住 Ctrl+Shift 点击窗口中的 “取消” 即可继续安装!这丫的,靠!","categories":[],"tags":[{"name":"server","slug":"server","permalink":"http://littlepig.cn/tags/server/"},{"name":"driver","slug":"driver","permalink":"http://littlepig.cn/tags/driver/"},{"name":"hp","slug":"hp","permalink":"http://littlepig.cn/tags/hp/"},{"name":"printer","slug":"printer","permalink":"http://littlepig.cn/tags/printer/"}]},{"title":"D400 W130S 3T 硬盘的添加","slug":"d400-segate-3t","date":"2012-11-13T11:19:51.000Z","updated":"2017-05-10T05:38:37.000Z","comments":true,"path":"posts/2012/11/13/d400-segate-3t/","link":"","permalink":"http://littlepig.cn/posts/2012/11/13/d400-segate-3t/","excerpt":"W130S 上的 2T 硬盘快满了,于是购买了个希捷的 3T 盘,想扩容顺便把 Home Server 2003 升级成 Server 2012,没想到挂载过程费了些周折。","text":"W130S 上的 2T 硬盘快满了,于是购买了个希捷的 3T 盘,想扩容顺便把 Home Server 2003 升级成 Server 2012,没想到挂载过程费了些周折。 原来的 2T 是采用的存储池模式安装的,即2块硬盘混合组成了分区 C 和 D ,这样我就没有备份磁盘可用了,想加上 3T 后,3T 盘可以做数据存储存放影视歌曲什么的,重要数据就可以在前两个 1T 盘上做备份 。于是第一步就是想利用这个 3T 盘先把原来 2T 里的数据导出来作为备份,插入硬盘池后,Home Server 是 2003 版本的,只认出来 750G 左右的一个分区,这肯定不对,理论上 Server 2003 是支持大硬盘的,于是so了一番,发现网上的信息都是说应该找到一个 2T 的分区,然后还有一个 750 G 左右的分区,利用右键菜单转换成 GPT 分区格式就可以了,但是我这里根本就看不到那个 2T 的分区,尝试装希捷的大硬盘驱动吧,被告知不支持 2003 系统,难道这个Home Server 2003 不支持 GPT ? 正好手头有台 Win7 的机器,Win7 应该是支持 GPT 的,那就先到 Win7 上挂载上3T盘,大不了利用网络备份数据而已,手头有个 SATA 转 USB 的卡,于是用 USB 接到 Win7 上,发现也是仅仅发现 750G ,这就奇了怪了,难道这盘有硬件问题?有硬件问题也不会是容量变小啊,于是又跑到 Win8 和 Linux,Mac 系统上尝试挂载,结果都是只能发现 750G ,百思不得其解,看着看着转接卡,想难道是 USB 接口的原因?因为那个希捷的驱动貌似没有提到 USB 接口的硬盘是否支持,现在都是直接使用 SATA 接口,会不是是没考虑到这点呢,但是网上好多 USB 接口的 3T 的移动硬盘啊,人家怎么就能使用呢,先不管了,尝试下吧,于是打开机箱,连接上 sata 线,开机,果真 Win7 认出来了 2.97T,折腾了半天原来是这原因,分好区,格式化好,兴冲冲的连接到 NAS 上,丫显示 2.97T 好好的,刚才怎么就不认呢。 把 2T 数据备份好,用了大概半个晚上,第二天把3T盘拿出来到别的机器上测试,启动就扫描磁盘错误,扫出来大概 10 万个无效文件,NND,不知道什么原因,文件拷贝有问题,难道还是 home server 2003 的问题?不敢直接挂到 NAS 上备份了,用网络备份吧,百兆,每秒 10 兆左右的速度,2T 告诉我约 35 个小时,拷了 10 个小时,忍不了了,于是又挂到 NAS 上,硬盘直接烤,又是一个晚上,第二天做了下测试,备份的文件正常。 装好淘宝买的VGA输出卡,进BIOS设置外置USB光驱启动,光盘装 Server 2012 的过程就比较顺利了,只是 Server 2012 的管理模式变化比较大,需要好好适应下。 总结: 把新买的 3T 盘用 SATA 接口连接到某个 Win7 系统上分好区,然后挂载到 NAS 上就可以使用了,不要直接挂载到 NAS 上。","categories":[],"tags":[{"name":"3T","slug":"3T","permalink":"http://littlepig.cn/tags/3T/"},{"name":"d400","slug":"d400","permalink":"http://littlepig.cn/tags/d400/"},{"name":"server","slug":"server","permalink":"http://littlepig.cn/tags/server/"},{"name":"2012","slug":"2012","permalink":"http://littlepig.cn/tags/2012/"},{"name":"w130s","slug":"w130s","permalink":"http://littlepig.cn/tags/w130s/"}]},{"title":"XP 下安装 Media Player 10","slug":"xp-rollback-to-media-player-10","date":"2011-02-12T10:35:19.000Z","updated":"2016-10-17T08:24:58.000Z","comments":true,"path":"posts/2011/02/12/xp-rollback-to-media-player-10/","link":"","permalink":"http://littlepig.cn/posts/2011/02/12/xp-rollback-to-media-player-10/","excerpt":"","text":"系统用的深度的精简 XP SP3,本来带的是 Windows Media Player 10,一不小心给升级成了 11,实在看不惯 11 那副黑面孔,决定退回到 10 ,破费周折。 直接安装 Media Player 10 ,提示不兼容,无法安装,进程里结束掉 auhl.exe ,提示已经安装了高版本,仍旧无法安装。 用 360 软件管理卸载 media player 11 及其 runtime ,仍然不行。 在 添加/删除 程序里,添加/删除 windows 组件,取消掉 media player 的勾,还是无法安装! 又找了个方法,开始,运行 依次输入 12C:\\WINDOWS\\$NtUninstallWMFDist11$\\spuninst\\spuninst.exeC:\\WINDOWS\\$NtUninstallwmp11$\\spuninst\\spuninst.exe 在 添加/删除 程序里,添加/删除 windows 组件,打上 media player 的勾,这回貌似变回 10 版本了。 具体哪个生效的,不得而知!反正回到 10 了。","categories":[],"tags":[]},{"title":"Thinkpad 安装双系统过程","slug":"thinkpad-win7-xp-multi-os","date":"2011-02-12T10:32:11.000Z","updated":"2016-10-31T07:24:08.000Z","comments":true,"path":"posts/2011/02/12/thinkpad-win7-xp-multi-os/","link":"","permalink":"http://littlepig.cn/posts/2011/02/12/thinkpad-win7-xp-multi-os/","excerpt":"","text":"Thinkpad 新机器目前随机配的都是 Win7 系统了,可是很多时候都需要到 XP 下去工作,安装个双系统很有必要,正好最近同事有台 T410S 要这样做,于是做了下试验,成功实现了双系统,而且没有破坏原有系统和恢复分区! 原机情况如下: 硬盘被分了 C D E F 四个用户分区,还有一个系统启动区 SYSTEM_DRV ,以及著名的恢复分区 Lenovo_Recovery 。四个分区中 C 安装了 Win7 专业版,但并非活动主分区,活动主分区是 SYSTEM_DRV ,系统启动时如果发现系统有问题,则会自动进入修复过程。 手头有的东西:一个U盘启动盘,一张深度的最后一个版本的安装和克隆二合一盘。 进入 Win7 系统,在磁盘管理 里将 C 盘置为活动分区,这样可以避免开机自动进入修复过程。 进 BIOS ,将 SATA 硬盘设置为 COMPATIBLE 兼容模式,将显卡设置为集成显卡 INTEGERATED GRAPHICS,并将操作系统自动切换显卡 Switchable Graphics 设置为 DISABLE ,将 BOOT 选项里 USB 相关的选项用 F5/F6 置前。 用 U 盘启动盘启动机器,用 Ghost 将 C 盘做个备份到 F 盘。 由于 Win7 里没法直接安装 XP,所以转了个弯,这样做的: 将光盘上 XP 的 gho 文件恢复到 C 盘。 启动进入 XP ,只要能进入系统就行,不需要安装驱动什么的,然后点击光盘里的 安装 XP ,安装到 E 盘。 安装完毕之后启动菜单现在有两个 XP 了,C 盘一个 E 盘一个。 将备份的 Win7 的 gho 文件再恢复到 C 盘,这时候 E 盘的 XP 因为没有引导项会无法启动。 其实上边安装 XP 到 E 盘的步骤我觉得可以直接用 ghost 将 XP 的 gho 文件恢复到 E 盘就行,这样就不用备份和恢复 Win7 了。 用 NTBOOTautofix v2.0.2 修复启动菜单项,现在应该有两个或者三个启动项,进入 Win7 之后可以用 MSConfig 或者 BCDEdit 可以进行配置。 分别进入 Win7 和 XP 安装相应的驱动即可。 在 XP 下安装了 intel 的驱动之后,BIOS 里可以改回 ACHI 模式就不会蓝屏了。","categories":[],"tags":[]},{"title":"创维酷开电视进入工厂模式的尝试","slug":"skyword-factory-mode","date":"2010-06-10T12:37:58.000Z","updated":"2016-10-31T11:59:33.000Z","comments":true,"path":"posts/2010/06/10/skyword-factory-mode/","link":"","permalink":"http://littlepig.cn/posts/2010/06/10/skyword-factory-mode/","excerpt":"家里的创维酷开电视突然间怎么也没有信号了,而且怪异的是遥控器除了“菜单”键之外都不起作用,机器面板上的“菜单”键也是如此,其余的键倒还正常,颜色也怪怪的,貌似是亮度被调到了最大。自己折腾了半天确认无法修复,只好电话创维的维修中心上门检测,网上搜了搜,还挺贵,开机费就百十来块钱,不过没办法,虽说自己当年也是学电视、修电视的,可是这年代技术和器件更新太快,十几年不动的东西也早已经忘光了。","text":"家里的创维酷开电视突然间怎么也没有信号了,而且怪异的是遥控器除了“菜单”键之外都不起作用,机器面板上的“菜单”键也是如此,其余的键倒还正常,颜色也怪怪的,貌似是亮度被调到了最大。自己折腾了半天确认无法修复,只好电话创维的维修中心上门检测,网上搜了搜,还挺贵,开机费就百十来块钱,不过没办法,虽说自己当年也是学电视、修电视的,可是这年代技术和器件更新太快,十几年不动的东西也早已经忘光了。 师傅来了,年轻的一位,来了就按组合键,我的脑子就灵光一闪,多年来对电子产品的习惯发挥了作用,莫不是要初始化?恢复原始设置?只不过这位师傅折腾了半天也没进入菜单,左一个电话又一个电话的请教了几位也没结果,只好跟我说:主板的问题,换吧。 我问:多少? 答曰:最少估计也得700,而且要把板子退回工厂。心里一咯噔,这随便一修就千把来块,真抢钱啊。想了想,虽说看电视不多,那也不能就这么扔着个大块头当摆设啊,还没等我应答,师傅已经电话配件部门申请配件了,说明后天再来。 又琢磨了一下,不甘心才两年的电视就这么被。。况且,其他功能都正常啊,应该属于配置问题而不是器件问题,上网一搜关键字“创维酷开 恢复初始设置”,貌似没啥结果,看到另外一个关键词“工厂模式”,试试这个,信息还真不少,都是介绍各个型号进入工厂模式的方法,死马当活马医吧。 经过无数次试验:把音量键减小到0,按住机器右侧的“音量键-”,按遥控器上的“屏显”即可进入菜单,这个菜单是对一些常用参数进行设置的,比如颜色啊等,看到RGB的值都不太正常,就用遥控器上的左右键简单做了下调节,再开机,颜色没问题了,搞定,但是貌似菜单里说啥也没有初始化之类的字符串,于是按照说明按键盘上的 -/— 进入第二页,同样没有类似选项,不甘心随意乱按,当按到 6 的时候,屏幕上出现了 — 的输入提示,接下来按 789,误打误撞又进入了一个菜单,这才是真正的工厂模式菜单,不过还是没有类似“Reset”等的选项,无意中看到个EPROM,思考再三,决定清除一把,init…. 完毕之后,重启电视,一切OK,省了千把大元,电话告知为维修的师傅进入工厂模式的方法,估计其很郁闷,不仅还没收费呢,竟然还被用户自己折腾好了。 其实液晶电视只要不是太明显的器件毛病,大部分都可以通过恢复出厂模式修好。","categories":[],"tags":[]},{"title":"愚蠢的 route 批处理","slug":"stupid-route-bat","date":"2009-10-10T10:51:12.000Z","updated":"2016-10-31T12:01:12.000Z","comments":true,"path":"posts/2009/10/10/stupid-route-bat/","link":"","permalink":"http://littlepig.cn/posts/2009/10/10/stupid-route-bat/","excerpt":"在前几日的一片日志中,我提及了使用 route 指令修改路由表实现双线访问,参见 http://littlepig.cn/others/software/route-to-limit-vpn/ ,然而当我将其中的 route 指令放入批处理文件里,执行时却发现了莫名其妙的循环,即总是执行第一条指令,百思不得其解,因为单条指令执行是没有问题的啊,难道指令执行需要延时?也不至于啊,批处理不是多线程执行的,这其中到底有什么蹊跷呢?","text":"在前几日的一片日志中,我提及了使用 route 指令修改路由表实现双线访问,参见 http://littlepig.cn/others/software/route-to-limit-vpn/ ,然而当我将其中的 route 指令放入批处理文件里,执行时却发现了莫名其妙的循环,即总是执行第一条指令,百思不得其解,因为单条指令执行是没有问题的啊,难道指令执行需要延时?也不至于啊,批处理不是多线程执行的,这其中到底有什么蹊跷呢? Baidu 了 n 个帖子,终于在 CSDN 的一个问题里找到了答案 http://topic.csdn.net/t/20050111/10/3715498.html ,原因竟是如此的愚蠢,因为我把批处理的名字顺手就命名成了 route.bat ,这样,会造成批处理调用自身,故形成了循环!我 K ,困扰了我 n 天的问题,无语了!","categories":[],"tags":[{"name":"vpn","slug":"vpn","permalink":"http://littlepig.cn/tags/vpn/"}]},{"title":"再读 朱自清 匆匆","slug":"zhuziqing-congcon","date":"2009-10-07T09:10:52.000Z","updated":"2016-10-17T08:09:51.000Z","comments":true,"path":"posts/2009/10/07/zhuziqing-congcon/","link":"","permalink":"http://littlepig.cn/posts/2009/10/07/zhuziqing-congcon/","excerpt":"小时候课堂上老师点名背诵朱自清的《匆匆》,因准备许久,语调高昂,抑扬顿挫,一气呵成,不成想老师只是淡淡的一句:不错,坐下吧。没有夸奖,自然心中惆怅,回家闷闷不乐,母亲给做了爱吃的汤面,自然也就喜笑颜开,早已把课堂上的不快抛之脑后,屁颠屁颠的跟玩伴们玩弹弓,捕知了去了。。 时隔二十年之久,再读《匆匆》确是在如厕的时候,从书橱拿起了买了许久却从未翻开的《朱自清散文》,随手一翻,却正是此篇,匆匆过目之后却又几次翻回去反复斟酌,感慨时光如流水,字字皆能打动人心,方知当年老师只感叹却并不赞赏,莽撞少年,又何知青春不回,时光不再,眼见岁月扑面而来却又疾驰而去的苦恼与无奈呢,此时此刻,却又如何读得出抑扬顿挫,慷慨激昂?","text":"小时候课堂上老师点名背诵朱自清的《匆匆》,因准备许久,语调高昂,抑扬顿挫,一气呵成,不成想老师只是淡淡的一句:不错,坐下吧。没有夸奖,自然心中惆怅,回家闷闷不乐,母亲给做了爱吃的汤面,自然也就喜笑颜开,早已把课堂上的不快抛之脑后,屁颠屁颠的跟玩伴们玩弹弓,捕知了去了。。 时隔二十年之久,再读《匆匆》确是在如厕的时候,从书橱拿起了买了许久却从未翻开的《朱自清散文》,随手一翻,却正是此篇,匆匆过目之后却又几次翻回去反复斟酌,感慨时光如流水,字字皆能打动人心,方知当年老师只感叹却并不赞赏,莽撞少年,又何知青春不回,时光不再,眼见岁月扑面而来却又疾驰而去的苦恼与无奈呢,此时此刻,却又如何读得出抑扬顿挫,慷慨激昂? 原文 燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:现在又到了哪里呢? 我不知道他们给了我多少日子;但我的手确乎是渐渐空虚了。在默默里算着,八千多日子已经从我手中溜去;像针尖上一滴水滴在大海里,我的日子滴在时间的流里,没有声音,也没有影子。我不禁头涔涔而泪潸潸了。 去的尽管去了,来的尽管来着;去来的中间,又怎样地匆匆呢?早上我起来的时候,小屋里射进两三方斜斜的太阳。太阳他有脚啊,轻轻悄悄地挪移了;我也茫茫然跟着旋转。于是——洗手的时候,日子从水盆里过去;吃饭的时候,日子从饭碗里过去;默默时,便从凝然的双眼前过去。我觉察他去的匆匆了,伸出手遮挽时,他又从遮挽着的手边过去,天黑时,我躺在床上,他便伶伶俐俐地从我身上跨过,从我脚边飞去了。等我睁开眼和太阳再见,这算又溜走了一日。我掩着面叹息。但是新来的日子的影儿又开始在叹息里闪过了。 在逃去如飞的日子里,在千门万户的世界里的我能做些什么呢?只有徘徊罢了,只有匆匆罢了;在八千多日的匆匆里,除徘徊外,又剩些什么呢?过去的日子如轻烟,被微风吹散了,如薄雾,被初阳蒸融了;我留着些什么痕迹呢?我何曾留着像游丝样的痕迹呢?我赤裸裸来到这世界,转眼间也将赤裸裸的回去罢?但不能平的,为什么偏要白白走这一遭啊? 你聪明的,告诉我,我们的日子为什么一去不复返呢? 附译文朱纯深先生的版本 Rush (translated by Zhu Chunshen) Swallows may have gone, but there is a time of return; willow trees may have died back, but there is a time of regreening; peach blossoms may have fallen, but they will bloom again. Now, you the wise, tell me, why should our days leave us, never to return? — If they had been stolen by someone, who could it be? Where could he hide then? If they had made the escape themselves, then where could they stay at the moment? I do not know how many days I have been given to spend, but I do feel my hands are getting empty. Taking stock silently, I find that more than eight thousand days has already slid away from me. Like a drop of water from the point of a needle disappearing into the ocean, my days are dripping into the stream of time, soundless, traceless. Already sweat is starting on my forehead, and tears welling up in my eyes. Those that have gone have gone for good, those to come keep coming; yet in between, how swift is the shift, in such a rush? When I get up in the morning, the slanting sun marks its presence in my small room in two or three oblongs. The sun has feet, look, he is treading on, lightly and furtively; and I am caught, blankly, in his revolution. Thus — the day flows away through the sink when I wash my hands, wears off in the bowl when I eat my meal, passes away before my day-dreaming gaze as I reflect in silence. I can feel his haste now, so I reach out my hands to hold him back, but he keeps flowing past my withholding hands. In the evening, as I lie in bed, he strides over my body, glides past my feet, in his agile way. The moment I open my eyes and meet the sun again, one whole day has gone. I bury my face in my hands and heave a sigh. But the new day begins to flash past in the sigh. What can I do, in this bustling world, with my days flying in their escape? Nothing but to hesitate, to rush. What have I been doing in that eight-thousand-day rush, apart from hesitating? Those bygone days have been dispersed as smoke by a light wind, or evaporated as mist by the morning sun. What traces have I left behind me? Have I ever left behind any gossamer traces at all? I have come to this world, stark-naked; am I to go back, in a blink, in the same stark-nakedness? It is not fair though: why should I have made such a trip for nothing! You the wise, tell me, why should our days leave us, never to return? 28 March, 1922 张培基先生的版本 Transient Days (translated by Zhang Peiji) If swallows go away, they will come back again. If willows wither, they will turn green again. If peach blossoms fade, they will flower again. But, tell me, you the wise, why should our days go by never to return? Perhaps they have been stolen by someone. But who could it be and where could he hide them? Perhaps they have just run away by themselves. But where could they be at the present moment? I don’t know how many days I am entitled to altogether, but my quota of them is undoubtedly wearing away. Counting up silently, I find that more than 8,000 days have already slipped away through my fingers. Like a drop of water falling off a needle point into the ocean, my days are quietly dripping into the stream of time without leaving a trace. At the thought of this, sweat oozes from my forehead and tears trickle down my cheeks. What is gone is gone, what is to come keeps coming. How swift is the transition in between! When I get up in the morning, the slanting sun casts two or three squarish patches of light into my small room. The sun has feet too, edging away softly and stealthily. And, without knowing it, I am already caught in its revolution .Thus the day flows away through the sink when I wash my hands; vanishes in the rice bowl when I have my meal; passes away quietly before the fixed gaze of my eyes when I am lost in reverie. Aware of its fleeting presence, I reach out for it only to find it brushing past my out-stretched hands. In the evening, when I lie on my bed, it nimbly strides over my body and flits past my feet. By the time when I open my eyes to meet the sun again, another day is already gone. I heave a sign, my head buried in my hands. But, in the midst of my sighs, a new day is flashing past. Living in this world with its fleeting days and teeming millions, what can I do but waver and wander and live a transient life? What have I been doing during the 8,000 fleeting days except wavering and wandering? The bygone days, like wisps of smoke, have been dispersed by gentle winds, and, like thin mists, have been evaporated by the rising sun. What traces have I left behind? No, nothing, not even gossamer-like traces. I have come to this world stark naked, and in the twinkling of an eye, I am to go to back as stark naked as ever. However, I am taking it very much to heart: why should I be made to pass through this world for nothing at all? You the wise, would you tell me please: why should our days go by never to return? 张梦井的版本 Days Gone By (translated by Zhang Mengjing) When the swallows have gone, there is still time to return; when the poplar and willow trees have become withered, there is still time to see green; when the peach flowers have already faded, there is still time to blossom. But please tell me, the genius, why then have my days gone and never returned? If some people have stolen them, then who are they? And where are they hidden? If they have escaped by themselves, then where are they now? I don’t know how many days I have been given, but the in my hands are becoming numbered. Counting silently, eight thousand days have slipped by. Just like water drops a pinpoint dripping slowly into the vast ocean, my days been dripping into the river of time, quietly and invisibly. I can’t help dripping with sweat and weeping many tears. Although the goings have gone and the comings are constantly coming, how hurried is the time between? When I get up in the morning, I see two or three ribbons of light streaming into my room. The sun also has feet; it moves away on tiptoe and I follow it aimlessly. When I wash my hands, my days wash off into my basin; when I am eating, the days vanish from my bowl; and when I am sitting silently, my days pass by my gazing eyes. When I feel them go away so hurriedly, I reach out my hands only to hold them back before they are beyond my grasp. When it is dark, I lie upon my bed and watch days cleverly jump over my body or fly away from my feet. When I open my eyes to meet the sun again, another day has gone by. I cover my face and sigh, but the spark of a new day begins to flash away in my breath. In these swiftly escaping days, what can I do in this world amongst thousands of households? I can do nothing but hesitate and hurry. In these over eight thousand hurried days, what has been left to me besides hesitation? The past days like light smoke are blown away with the breeze or like a thin layer of mist evaporate with the morning sun. And what mark have I left in the world? When have I ever left a mark as tiny as a hairspring? I came to this world naked, soon I’ll leave here naked too. But, it’s unfair to me. . . why did I come to this world for nothing? You, the genius, please tell me why our days have gone by and have never returned?","categories":[],"tags":[]},{"title":"生命中的美好时刻","slug":"happy-moment-in-life","date":"2009-09-29T12:36:31.000Z","updated":"2016-10-17T09:00:01.000Z","comments":true,"path":"posts/2009/09/29/happy-moment-in-life/","link":"","permalink":"http://littlepig.cn/posts/2009/09/29/happy-moment-in-life/","excerpt":"无论你多么与众不同,生活中总有一些美好时刻能够打动你,看到下面这些文字,你是否也会微笑着从记忆中找出它们的影子呢","text":"无论你多么与众不同,生活中总有一些美好时刻能够打动你,看到下面这些文字,你是否也会微笑着从记忆中找出它们的影子呢 1.恋爱 2.笑得脸生疼 3.洗个热水澡 4.超市结帐不用排队 5.一个特殊的眼神 6.收到寄来的邮件 7.听到收音机播放最喜欢的歌 8.躺在床上听屋外的雨声 9.发现心仪的毛衣半价出售 10.一个长途电话 11.哈哈大笑 12.一次意外投缘的谈话 13.沙滩 14.在去年穿过的冬装外套里找到忘了在哪的钞票 15.自嘲 16.午夜煲电话粥数小时 17.毫无理由地大笑 18.有人告诉你你很好看 19.为心里的笑话而发笑 20.有许多朋友 21.第一次坠入情网 22.纯属偶然听到别人夸自己 23.一觉醒来发现还可以睡上几小时 24.初吻 25.结交新朋友或与老朋友在一起 26.深夜不眠与室友聊天 27.有人拨弄你的头发 28.甜美的好梦 29.和朋友结伴路上旅行 30.荡秋千 31.与喜欢的人相拥在沙发上看一部精彩电影 32.新买的歌碟里印有歌词,唱歌不觉得傻冒 33.去听一场真正不赖的音乐会 34.每次看到那个人心里七上八下的感觉 35.与一个可爱的陌生人目光相遇 36.赢得一场真正有竞争力的比赛 37.看到朋友脸上的笑容,听到朋友开怀的笑声 38.与很在乎的那个人牵手 39.碰到一个老朋友然后发现有些东西无论好坏从来不会改变 40.发现爱是没有条件的,比时间更经久 41.拥抱你所爱的人 42.观察某个人充满期待地打开你的礼物时的表情 43.看到日出 44.每天早晨起床感谢老天又赐予你美好的一天 45.拥有推心置腹的朋友可以哭诉(不哭也行)自己最隐秘的问题","categories":[],"tags":[]},{"title":"把脚给崴了","slug":"sprain-my-foot","date":"2009-09-26T16:10:18.000Z","updated":"2016-10-31T12:00:21.000Z","comments":true,"path":"posts/2009/09/27/sprain-my-foot/","link":"","permalink":"http://littlepig.cn/posts/2009/09/27/sprain-my-foot/","excerpt":"其实是上周末的事,只是现在越发的感觉疼,貌似不是我原来想象的那么容易恢复,其实按照自己的想法早就想多多活动了,只是又怕恢复不好容易复发,现在整个脚肿的让人不知所措,而且第一次知道原来不涂抹颜色也可以让自己的皮肉这么紫,真是悲凉!刚刚步入正轨的锻炼计划就此搁置,甚是无奈!","text":"其实是上周末的事,只是现在越发的感觉疼,貌似不是我原来想象的那么容易恢复,其实按照自己的想法早就想多多活动了,只是又怕恢复不好容易复发,现在整个脚肿的让人不知所措,而且第一次知道原来不涂抹颜色也可以让自己的皮肉这么紫,真是悲凉!刚刚步入正轨的锻炼计划就此搁置,甚是无奈! 已经记不清将近多长时间不打羽毛球了,其实我以前挺喜欢这个,记得上初中时候拿那种老式的木头拍子都快打烂了还玩的津津有味,于是一时兴起,没想到一个偏身接球,只觉得脚明显一歪,身子已经倒将下来,随即脚板一热,登时心里空荡荡的不舒服,头脑中随即意识到,这次是彻底完蛋,恐怕脚已伤了,过些时候必然要肿,只是当时一股拍球时的劲道还未消除,所以也即刻爬起身子,一拐一拐的坐到边上,心情已然坏到了极点。 小时候伤口不是涂红药水就是紫药水,邦迪贵的出奇,一般人用不起,我可以接受红药水,但确拒绝紫药水,因为一次擦伤,如任凭伤口自己长合,也许就两天的事,但涂抹上了紫药水,则一星期都磨磨唧唧,从此对其印象极坏,加之我倔崇尚自然的倔强,更是对医院与用药类似与生俱来的抵触,所以宁可挪动着上课、吃饭,这些日子恐怕就要这样过去了。。","categories":[],"tags":[]},{"title":"修改本地路由限制 VPN 应用范围","slug":"route-to-limit-vpn","date":"2009-09-25T13:10:00.000Z","updated":"2016-11-05T01:33:11.000Z","comments":true,"path":"posts/2009/09/25/route-to-limit-vpn/","link":"","permalink":"http://littlepig.cn/posts/2009/09/25/route-to-limit-vpn/","excerpt":"这是一个应该说还算常见的应用场景,家里的宽带是网通,学校里为了方便教师们在家访问学校资源方便,给开通了 VPN ,可是,一旦我连上了 VPN ,访问学校是快了,可是访问公网又慢了,一直傻傻以为 VPN 开启后会替换掉原来网络数据通道,所以怎么着也不能两全,其实根本不是那么回事,VPN 只不过建立了一条新通道,然后把默认路由给替换到了这条通道而已,原来的通道并没有被删掉,仍然可以使用,只不过不再是默认通道。","text":"这是一个应该说还算常见的应用场景,家里的宽带是网通,学校里为了方便教师们在家访问学校资源方便,给开通了 VPN ,可是,一旦我连上了 VPN ,访问学校是快了,可是访问公网又慢了,一直傻傻以为 VPN 开启后会替换掉原来网络数据通道,所以怎么着也不能两全,其实根本不是那么回事,VPN 只不过建立了一条新通道,然后把默认路由给替换到了这条通道而已,原来的通道并没有被删掉,仍然可以使用,只不过不再是默认通道。 解决办法很简单,就是自己设置一下路由表而已,我是网通,使用的无线路由。 首先在 VPN 未连接状态下在命令行窗口打入 route print 指令,查看当前的默认路由,及默认网关 Default GateWay ,记下来,比如我的是 192.168.1.1 然后连接 VPN ,再使用 route print 指令将 VPN 的默认路由记下来,比如 10.6.0.13 接下来,使用 route add 指令设置默认路由为原来的 192.168.1.1 1 route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 然后确定一下学校里网站的大体 IP 范围,将其路由指向 VPN 的 10.6.0.13 即可,比如我的 123 route add 202.113.0.0 mask 255.255.0.0 10.6.0.13 route add 219.243.0.0 mask 255.255.0.0 10.6.0.13 route add 10.0.0.0 mask 255.255.255.0 10.6.0.13 这样的话,访问学校内部的 202.113.* 219.243.* 10.* 等都会走 VPN ,而访问公网等都会走网通,实现了两种区域的快速访问。 上述指令可以做成一个批处理文件,在连接 VPN 之后点击一下即可,注意不要把批处理名字也写成 route ,那样就死循环了。 10月10日补: 经过几次试验之后发现每次登陆学校的 VPN 获取的缺省网关是变化的,这就导致批处理的效率大打折扣,不过 bat 指令可不是想象的那么简单,强大的很,下面的批处理从 route print 的输出里获取 Default Gateway 并传递给下面的 route add 指令。 12345678echo offfor /f "delims=: tokens=2" %%i in ('route print^|findstr /i /c:Default') do set gw=%%iecho "VPN Gateway Found:" %gw%route add 0.0.0.0 mask 0.0.0.0 192.168.1.1route add 202.113.0.0 mask 255.255.0.0 %gw%route add 219.243.0.0 mask 255.255.0.0 %gw%route add 10.0.0.0 mask 255.255.255.0 %gw%echo "Done"","categories":[],"tags":[]},{"title":"问题跟踪及Bug处理系统的比较 - Issue & Bug Tracking System","slug":"issue-bug-tracking-system","date":"2009-03-27T07:53:49.000Z","updated":"2016-10-17T09:19:16.000Z","comments":true,"path":"posts/2009/03/27/issue-bug-tracking-system/","link":"","permalink":"http://littlepig.cn/posts/2009/03/27/issue-bug-tracking-system/","excerpt":"","text":"构造一个良好的 BUG 跟踪处理系统可以有效的收集用户反馈,分析 Bug 来源,提高系统改进的效率。这里列举了不同类别事务及 BUG 跟踪系统的特点,诸如运行平台、版权、界面等,从不同角度辅助你准确找到适合自己项目的系统。 详细链接参看这里:http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems","categories":[],"tags":[{"name":"bug","slug":"bug","permalink":"http://littlepig.cn/tags/bug/"}]},{"title":"使用微波炉要防止突沸","slug":"avoid-ebullition-while-using-microwave-oven","date":"2009-03-24T00:12:20.000Z","updated":"2016-10-15T04:35:21.000Z","comments":true,"path":"posts/2009/03/24/avoid-ebullition-while-using-microwave-oven/","link":"","permalink":"http://littlepig.cn/posts/2009/03/24/avoid-ebullition-while-using-microwave-oven/","excerpt":"","text":"突沸是指加热后的液体在外部物质介入的情况下突然沸腾。在微波炉中加热纯水然后再添加其他物质比如糖、咖啡等很容易导致突沸从而引发事故,所以我们要尽量避免使用微波炉加热纯液体比如水、酒,封闭固体比如鸡蛋等。 这里转一篇解释性的文章,还算容易看懂。首先我们来了解一下微波炉的加热原理。微波炉,当然是用微波来加热物品的。为什么微波就能加热物品呢?我们先来看这样一个实验,将一块冰和一块干冰(固态二氧化碳)同时放在两个相同的微波炉里,使用相同的功率加热相同的时间。会发生什么结果呢?冰会化掉,而干冰则安然无恙,完好无损。 这个实验结果很让人惊奇!为什么同样加热,冰都融化了,而凝固点低得多的干冰怎么没液化甚至气化成平时的气态呢?这都是因为微波炉的加热原理。 我们来仔细了解一下冰和干冰的不同。冰的分子式是H2O,它的化学键是120度角的,H+和O-2的分布导致起电性是不均匀的。也就是说,它稍宏观的表现是一面是正电荷,而另一面则是负电荷。而干冰的分子式CO2中C和2个O则是排列在一条直线上。在稍宏观的表现则是没有电性的,任何方向都是平均的。这就导致了不同。微波炉将微波打到这些分子上。冰的分子,由于极性的不同,会被微波激荡的来回运动,运动,这就是温度。这样冰的温度就逐渐升高,甚至融化。而干冰,由于其分子根本就是没有极性的,所以微波的激荡也不可能引起其分子的运动,自然,温度也就不会上升,也就不会融化了。 水,自然也是可以加热的。我们知道,液体加热倒沸点就会沸腾。我们平时烧水,为什么不会爆炸?因为平时烧水,能量是靠热传递从下面给水的,在水中由于密度的差异,就会引起对流,水壶中的水时刻都是在运动的。由于加热,水的蒸发也在加剧,这也导致了水面局部的气流不稳。气流的不稳在局部就表现为局部气压的不稳。由于液体的沸点是和气压有关系的,所以在局部就有可能先达到当时气压的沸点,发生局部的沸腾。谚语讲“响水不开,开水不响”就是这个道理。 而在微波炉中,情况就不太一样了。前面,我们知道了微波的加热原理。那么好,平时足够水沸腾的能量输入给微波炉中平静的水后,会产生什么反应呢。理想的情况,水分子会在自己原来位置的附近剧烈的震动,而彼此之间的流动则要少好多。 这里,就要考虑温度的定义了。温度的定义是:物体内分子间平均动能的一种表现形式。那么我们就有疑问,这个平均动能,包括不包括分子震动的能量呢?如果定义为包括。那么这就是液体的例外情况了,达到沸点而不沸腾。而一旦有了杂质或者震动等破坏这个过稳定状态的时候,水就会突然的沸腾,就好比铁饼运动员旋转身体的时候看起来没什么,将铁饼投出去就是很大的速度和能量。这就是前面说的情况,这就是突沸。 能量在短时间内大量的释放,这是什么?就是爆炸的定义么。而水蒸气遇到皮肤液化放热的危害,想必大家也都知道了。 话继续说回来,如果温度的定义不包括分子震动的能量。那么这个现象就更好解释了。因为这个时候,虽然水里包含了这么多的能量,可是并没有达到沸点。能量全部在震动中,而不在彼此碰撞的运动中。这很危险,一点有一点风吹草动,哪怕是外界气流的变化都会突沸。因为气流的变化引起局部气压的变化,引起局部水沸点的变化,局部水沸腾,一下子就引得水运动起来,而继续的能量就会马上的一瞬间释放出来了。 知道了这些,我们也就知道了在生活中去怎样避免突沸了。尽量不要用微波炉加热比较纯净的水,如果真的需要可以加点杂质什么的,比如茶或者咖啡(哈哈,没有人这么冲咖啡和泡茶的吧)。还有,由于前面讲的微波炉加热原理。也尽量不要加热煮鸡蛋(爆炸),或者其他封闭容器内的东西,因为一般微波炉的加热是从内而外的(虽然一起震动,但外面稍微有热传递,将热量散出去)。","categories":[],"tags":[]},{"title":"[付费推介] 图片微利站 DreamsTime","slug":"dreamstime","date":"2009-03-16T13:03:42.000Z","updated":"2016-10-31T11:33:24.000Z","comments":true,"path":"posts/2009/03/16/dreamstime/","link":"","permalink":"http://littlepig.cn/posts/2009/03/16/dreamstime/","excerpt":"简言之:人民生活水平提高了,数码相机多了,相片多了,利用相片获益的机会也就多了,dreamstime.com 就是众多通过购买出售相片获益的网站之一,当然,还有很多其他类似的站点,比如 shareapic 以及本站曾经推介过另外一个站点 sharedimages 。dreamstime 的特点是门槛比较低,管理也比较规范。","text":"简言之:人民生活水平提高了,数码相机多了,相片多了,利用相片获益的机会也就多了,dreamstime.com 就是众多通过购买出售相片获益的网站之一,当然,还有很多其他类似的站点,比如 shareapic 以及本站曾经推介过另外一个站点 sharedimages 。dreamstime 的特点是门槛比较低,管理也比较规范。 简单介绍: [引用色影无忌论坛的slei色磊的帖子,本站不对其真实性负责] 一、如何将照片变成钱 许多朋友爱好摄影多年,尤其是数码普及后,手里存的照片成千上万,这些图片除了网上交流或余暇时自己欣赏回忆外,大部分时候都是静静的躺在电脑的硬盘里睡觉,这绝对算是一种资源的浪费。怎么让这些照片产生价值呢?怎么来以摄养摄呢?相信绝大多数摄影爱好者都对这方面很关心。俺在这里说说自己的经验,按照大家传统的想法,以摄养摄主要是参加影赛拿奖金,报刊杂志投稿拿稿费等,这些方式对一般的爱好者来说希望比较渺茫,最起码俺觉得俺没这个水平;在这里俺要介绍的是注册图片销售网站进行出租和销售。这里提到的网站不是国内的,是国外专业销售网站,人气很旺,服务也更加规范。俺喜欢在网上东游西窜,通过认真搜索与研究,去年在美国的Dreamstime网站开始了注册以及照片的出租和销售。Dreamstime是世界三大相关网站之一,人气很旺,优点是注册简单,不用传护照也不用测试注册人水平,图片审核较快,图片的出租及销售价格较高。俺水平有限,经过一年左右的时间,目前收入1000美元左右,网站里年收入1万美元以上的牛人还是有滴。 二、网站的运作 注册后,就可以上传图片了,每天上传图片的上限是100张(好像),可以一张一张的传, 也可以用FTP工组整组的传,每张图片上传后,会出现一个表格,需要写上照片的名称、照片的描述(不少于5个单词儿)、照片的关键字(不少于10个单词儿),选择照片的分类,还有一些是否出售版权方面的选项,再提交后,一张图片就算上传完成了。上传后的所有图片需要经过网站的编辑进行审核和挑选,一般1-3天左右,通过率一般在60%,视个人的水平而定;通过后的图片就放在网站的图片库供需要的人租用和购买了。需要注意的是,网站是英文界面,不懂英文的同学请抓紧时间学习或请别人帮忙。图片的尺寸不得小于2400X1600,大了不限。以3504X2336尺寸为例,上传后图片有四个尺寸可供租用,分别为800X533,2121X1414,2738X1825,3504X2336,租用费用分别为$1到$4,个人与网站格拿一半;这里说一下租用的概念,所谓租用就是租用人花钱租你的图片,这一张图片可以由多人乃至无数人租用,但版权还是您的。除了出租外,照片也可以进行有版权的销售,价格由自己决定,但最低不少于$350/张。 三、上传照片的注意事项 上传的图片首先所有权一定是自己的,其次图片质量最基本的要求就是焦点要实,曝光要准确,色彩要真实,躁点不能太大,不接受过分后期处理的片子及锐化太过的片子。如果图片中出现人物的面孔,需要提供相应人物的授权书(可在该网站下载),图片中不能出现诸如商标、品牌或者已经注册的图案等,如迪斯尼的卡通人物等,可用图片软件涂掉。 四、如何将钱拿到手以及将美元变成人民币 注册后,网站会给每个会员一个账户,每次的收入都会自动转入,每天看着他上涨还是很幸福滴,当账户里的钱超过$100后,你可以申请将之转出,俺建议大家将钱转入PAYPAL, 注意,大家在注册PAYPAL时,要去美国的PAYPAL网站,国内的贝宝是收不了美元滴。 至于如何从PAYPAL将美元转出,最正规的方法就是在PAYPAL 账户里添加双币信用卡,然后可以直接将美元转入你的信每ǎ比还诨褂泻芏嘀苯佑萌嗣癖沂展篜AYPAL美元的,就不一一细说了。 五、以上是俺的经验,可能也许弄不好大家伙早就知道了,早就进行了,不过没关系,俺这篇东西针对的就是那些还不知道滴。这种方式是一个细水长流的过程,不会一下就发了,但通过慢慢积累,也很可观,最起码对俺是,对非专业的摄影爱好者尤其适合,相当于有个小副业。通过这个帖子,一方面介绍俺的经验,毕竟好东西是要共享滴,另一方面也希望与同志们多进行这方面的交流,互通有无,哪位高人有更好的方式请千万告诉俺啊。 注:本站只负责推介,不对真实性和可操作性负责。虽然要像帖子里所说,赚个百儿八千的$并不现实,但至少这个网站提供了将个人图片“商业化”的这种机会,与其目的是赚大钱,倒不如说是玩玩机会更为合适,片子仍硬盘里也是仍,仍网站上也是仍,你说呢?当然,如果你喜欢拍艳照,那你最好还是存自个儿的盘里保险。 注册可以点击这里 http://www.dreamstime.com/res1305022 ,如果对英文不熟悉,可以百度或者谷歌 dreamstime 关键字,有一些网站提供了图文注册教程,只是可能有些老了,一些步骤已经改变了。","categories":[],"tags":[{"name":"dreamstime","slug":"dreamstime","permalink":"http://littlepig.cn/tags/dreamstime/"}]},{"title":"[付费推荐]无限容量免费图库 SharedImages.Org","slug":"sharedimages","date":"2009-03-11T10:25:19.000Z","updated":"2016-10-31T11:57:13.000Z","comments":true,"path":"posts/2009/03/11/sharedimages/","link":"","permalink":"http://littlepig.cn/posts/2009/03/11/sharedimages/","excerpt":"","text":"图片的存储、外链和访问一直是博客人所比较关心的问题,因为空间大小、流量限制等很多因素,图片的使用往往都小心翼翼,尤其是很多原创的数码图片由于体积关系更是无法直接展示,很多相册诸如 Flickr 等虽然可以外链但又有诸多限制,这里推荐的 SharedImages.Org 不仅提供了无限的存储空间和流量,更是可以利用其展示获取收入。 网站注册之后,即可利用其工具上传任意大小图片,并且支持成人内容,图片上传之后可以用它提供的 UBB 论坛代码和 HTML 网页代码直接插入到论坛、网站或者博客,只要别人点击图片你就可以获取收益,并且推广期间注册即送一美金。 本站推荐该站其实并非是为获取收益而推荐,该站的特色是可以直接利用其生成的 UBB 代码或者 HTML 代码来插入到帖子中,这对于论坛、博客的发帖都非常的方便,既减少了图片的空间占用,又减少了图片浏览的流量占用,而且该站服务稳定,倒闭的可能性很小,所以也不必担心图片丢失。本站的帖子 宽屏风光 即是基于该站生成的 HTML 代码。 下面简述一下使用流程,: 点击 这个链接 http://sharedimages.org/signup.php?ref=66178 打开注册页面进行注册,填写的信息很简单,就不截屏了,主要包括用户名,密码,电子邮件,以及协议的认同,注册成功之后,选择登录按钮进行登录,然后进行如下操作: 点击上侧 Members 菜单下的 Account Info 浏览自己的账户信息 点击 Payment Relations 中的 Set Payment Info 按钮设置你的收款账户,注意 Paypal 是 5$ 起付,Account Name 可以不填。 接下来就是上传图片操作了,选择 Create Album 可以新建一个相册,输入名称(Title),描述(Discription),选择等级Type(Not Safe For Work 为成人等级),可见性Accessbility(选择 Public ) ,点击 Create Album 添加好之后会进入添加图片界面 SharedImages允许同时上传多个文件,每张1.5M,每次10张,选择好之后即可耐心等待上传结果,速度还是比较快的。 上传之后,可以选中你要使用的图片前面的复选框,然后选择 Get Selected Code 功能用于获取显示图片的代码,SharedImages 的图片是放置在不同域名服务器上的,你需要选择你的代码生成的是哪个服务器上的图片,HotLinkImage.com 、PicFoco.com、CocoImage.com ,三者都差不多,然后选择你是粘贴 UBB 代码还是 HTML 代码,一般论坛支持 UBB 代码,而博客则使用 HTML 代码。 接下来就是发布你的代码了,将这些代码广为传播,浏览图片的人会被自动转到上述三个服务器上浏览图片,虽然观看图片时附加有一些广告代码出现,但还是可以接受的。 如果你注重收益,要注意如下规则:1000 points=1$,SharedImages 将浏览用户进行了分区规划,其中中国所在区级别最低,因而收入也就最低,因此如果想获取高收入,就需要到国外论坛去贴图。规则还说明:图片不要有侵权信息,不要有水印标记。 如果对英文不熟悉,你可以参考 英文网站常用词汇 ,如果对注册过程有疑问,可以参考 http://www.idcnpc.com/ad2/sharedimages/index.htm ,该页面图文并茂,作者花费了很大功夫推介,可惜有几个地方翻译的并不准确。","categories":[],"tags":[{"name":"sharedimages","slug":"sharedimages","permalink":"http://littlepig.cn/tags/sharedimages/"}]},{"title":"WordPress 修改常用函数","slug":"wordpress-common-function-list","date":"2009-03-11T05:11:41.000Z","updated":"2016-10-17T08:24:11.000Z","comments":true,"path":"posts/2009/03/11/wordpress-common-function-list/","link":"","permalink":"http://littlepig.cn/posts/2009/03/11/wordpress-common-function-list/","excerpt":"在配置 WordPress 的过程中,对模板的修改是避免不了的,每次都要 Google 一些函数的用法,比较繁琐,这里总结了一些常用的方便查询。","text":"在配置 WordPress 的过程中,对模板的修改是避免不了的,每次都要 Google 一些函数的用法,比较繁琐,这里总结了一些常用的方便查询。 基本条件判断is_home() : 是否为主页is_single() : 是否为内容页(Post)is_page() : 是否为内容页(Page)is_category() : 是否为Category/Archive页is_tag() : 是否为Tag存档页is_date() : 是否为指定日期存档页is_year() : 是否为指定年份存档页is_month() : 是否为指定月份存档页is_day() : 是否为指定日存档页is_time() : 是否为指定时间存档页is_archive() : 是否为存档页is_search() : 是否为搜索结果页is_404() : 是否为 ‘HTTP 404: Not Found’ 错误页is_paged() : 主页/Category/Archive页是否以多页显示 Header部分涉及的函数 : 博客名称(Title) : CSS文件路径 : PingBack Url : 模板文件路径 : WordPress版本 : Atom Url : RSS 2.o Url : 博客URL : 博客网页Html类型 : 博客网页编码 : 博客描述 : 内容页面的Title (Post/Page) 模板常用的PHP函数及命令 : 调用Header模板 : 调用Sidebar模板 : 调用Footer模板 : 显示内容(Post/Page) : 检查是否存在Post/Page : 如果存在Post/Page则予以显示 : While 结束 : If 结束 : 显示时间,时间格式由’字符串’参数决定 : 正文中的留言链接。如果使用 comments_popup_script() ,则留言会在新窗口中打开,反之,则在当前窗口打开 : 文章标题(Post/Page) : 内容页URL(Post/Page)","categories":[],"tags":[{"name":"function","slug":"function","permalink":"http://littlepig.cn/tags/function/"},{"name":"wordpress","slug":"wordpress","permalink":"http://littlepig.cn/tags/wordpress/"}]},{"title":"英文投稿信的几个模板","slug":"english-paper-template","date":"2009-03-10T15:53:49.000Z","updated":"2016-10-31T07:34:25.000Z","comments":true,"path":"posts/2009/03/10/english-paper-template/","link":"","permalink":"http://littlepig.cn/posts/2009/03/10/english-paper-template/","excerpt":"","text":"投稿信模版一 来源:http://forum.e2002.com/simple/index.php?t54758.html Dear XX (Editor):Here is our paper submitted to “(XX Journal)”.The Title: XXXXThe Authors: XXX XXX and XXX In this paper, we … The authors claim that none of the material in the paper has been published or is under consideration for publication elsewhere. The corresponding author is Dr. XXX and his address and other information is as following:Address: Department of XXX, XX University, …, P.R.ChinaE-mail: XXXXX@xxx.edu.cnTel: +86-xxx-xxxxxxxxFax: +86-xxx-xxxxxxxx Thank you very much for consideration! Sincerely Yours,Dr. xxx 投稿信模版二 来源:http://forum.e2002.com/simple/index.php?t48595.html Dear Prof. XXXXX,Here within enclosed is our paper for consideration to be published on “(Journal name)”. The further information about the paper is in the following:The Title: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXThe Authors: XXXXX XXXXX and XXXXXThe authors claim that none of the material in the paper has been published or is under consideration for publication elsewhere.I am the corresponding author and my address and other information is as follows,Address: Department of XXXXXXXXX, Tsinghua University,Beijing, 10084,P.R.ChinaE-mail: XXXXX@mail.tsinghua.edu.cnTel: 86-10-62785001Fax: 86-10-62785001 Thank you very much for consideration!Sincerely Yours,Dr. XXXXXXXXXXX 投稿信模版三 来源:http://forum.e2002.com/simple/index.php?t43261.html (1)Dear Mr. **1. The work described has not been submitted elsewhere for publication, in whole or in part, and all the authors listed have approved the manuscript that is enclosed.2. I have read and have abided by the statement of ethical standards for manuscripts submitted to Neuroscience. kind regards.Your sincerely,通讯作者 (2)Dear Dr. 主编name:We submit our manuscript entitled “ 文章title” to 杂志名for publication.接着简单介绍你文章的主要创新点和意义,不易过多,但要突出新意和关键点。All authors have seen the manuscript and approved to submit to your journal.Thank you very much for your attention and consideration. Sincerely yours,通讯作者 (3)Dear Dr. 主编name:We submit our manuscript entitled “文章title” to 杂志名for publication.接着简单介绍你文章的主要创新点和意义,不易过多,但要突出新意和关键点。All authors have seen the manuscript and approved to submit to your journal.Thank you very much for your attention and consideration. Sincerely yours,通讯作者 (4)Dr. ***Editor-in-Chief, ***(add address) January 22, 2003 Dear Dr. **, Enclosed herewith please find 3 copies of a MS by: ‘***. *** and ’ entitled: “*******”, which we would like to submit for publication in the ‘******’. Looking forward to your decision,With kind personal regards,Sincerely yours, (5)Dear Prof. Gil:This is a manuscript by ** and ** entitled “…….”. It is submitted to be considered for publication as a “…” in your journal. This paper is new. Neither the entire paper nor any part of its content has been published or has been accepted elsewhere. It is not being submitted to any other journal.We believe the paper may be of particular interest to the readers of your journal as it ……..Correspondence should be addressed to ** at the following address, phone and fax number, and email address:…Thanks very much for your attention to our paper.Sincerely yours,**投稿信模版四(case) 来源:http://forum.e2002.com/simple/index.php?t49205.html Case 1Dear Editor, We would like to submit the enclosed manuscript entitled “GDNF Acutely Modulates Neuronal Excitability and A-type Potassium Channels in Midbrain Dopaminergic Neurons”, which we wish to be considered for publication in Nature Neuroscience. GDNF has long been thought to be a potent neurotrophic factor for the survival of midbrain dopaminergic neurons, which are degenerated in Parkinson’s disease. In this paper, we report an unexpected, acute effect of GDNF on A-type potassium channels, leading to a potentiation of neuronal excitability, in the dopaminergic neurons in culture as well as in adult brain slices. Further, we show that GDNF regulates the K+ channels through a mechanism that involves activation of MAP kinase. Thus, this study has revealed, for the first time, an acute modulation of ion channels by GDNF. Our findings challenge the classic view of GDNF as a long-term survival factor for midbrain dopaminergic neurons, and suggest that the normal function of GDNF is to regulate neuronal excitability, and consequently dopamine release. These results may also have implications in the treatment of Parkinson’s disease. Due to a direct competition and conflict of interest, we request that Drs. XXX of Harvard Univ., and YY of Yale Univ. not be considered as reviewers. With thanks for your consideration, I am Sincerely yours, case2Dear Editor, We would like to submit the enclosed manuscript entitled “Ca2+-binding protein frequenin mediates GDNF-induced potentiation of Ca2+ channels and transmitter release”, which we wish to be considered for publication in Neuron. We believe that two aspects of this manuscript will make it interesting to general readers of Neuron. First, we report that GDNF has a long-term regulatory effect on neurotransmitter release at the neuromuscular synapses. This provides the first physiological evidence for a role of this new family of neurotrophic factors in functional synaptic transmission. Second, we show that the GDNF effect is mediated by enhancing the expression of the Ca2+-binding protein frequenin. Further, GDNF and frequenin facilitate synaptic transmission by enhancing Ca2+ channel activity, leading to an enhancement of Ca2+ influx. Thus, this study has identified, for the first time, a molecular target that mediates the long-term, synaptic action of a neurotrophic factor. Our findings may also have general implications in the cell biology of neurotransmitter release. Sincerely yours,Case 3 Sample Cover Letter[the example used is the IJEB]Dear Editor of the [please type in journal title or acronym]: Enclosed is a paper, entitled “Mobile Agents for Network Management.” Please accept it as a candidate for publication in the [journal title]. Below are our responses to your submission requirements. 1. Title and the central theme of the article. Paper title: “Mobile Agents for Network Management.” This study reviews the concepts of mobile agents and distributed network management system. It proposes a mobile agent-based implementation framework and creates a prototype system to demonstrate the superior performance of a mobile agent-based network over the conventional client-server architecture in a large network environment. 2. Which subject/theme of the Journal the material fits New enabling technologies (if no matching subject/theme, enter ‘Subject highly related to [subject of journal] but not listed by [please type in journal title or acronym]) 3. Why the material is important in its field and why the material should be published in [please type in journal title or acronym]? The necessity of having an effective computer network is rapidly growing alongside the implementation of information technology. Finding an appropriate network management system has become increasingly important today’s distributed environment. However, the conventional centralized architecture, which routinely requests the status information of local units by the central server, is not sufficient to manage the growing requests. Recently, a new framework that uses mobileagent technology to assist the distributed management has emerged. The mobile agent reduces network traffic, distributes management tasks, and improves operational performance. Given today’s bandwidth demand over the Internet, it is important for the [journal title/acronym] readers to understand this technology and its benefits. This study gives a real-life example of how to use mobile agents for distributed network management. It is the first in the literature that reports the analysis of network performance based on an operational prototype of mobile agent-based distributednetwork. We strongly believe the contribution of this study warrants its publication in the [journal title/acronym]. 4. Names, addresses, and email addresses of four expert referees. Prof. Dr. William GatesChair Professor of Information Technology321 Johnson HallPremier University Lancaster, NY 00012-6666, USAphone: +1-888-888-8888 - fax: +1-888-888-8886 e-mail: wgates@lancaster.eduExpertise: published a related paper (“TCP/IP and OSI: Four Strategies for Interconnection”) in CACM, 38(3), pp. 188-198.Relationship: I met Dr. Gate only once at a conference in 1999. I didn’t know him personally.Assoc Prof. Dr. John AdamsDirector of Network Research CenterCollege of Business Australian University123, Harbor Drive Sydney,Australia 56789phone: +61-8-8888-8888 - fax: +61-8-8888-8886e-mail: jadams@au.edu.auExpertise: published a related paper (“Creating Mobile Agents”) in IEEE TOSE, 18(8), pp. 88-98.Relationship: None. I have never met Dr. Adams.Assoc Prof. Dr. Chia-Ho ChenChair of MIS DepartmentCollege of ManagementOpen University888, Putong RoadKeelung, Taiwan 100phone: +886-2-8888-8888 - fax: +886-2-8888-8886e-mail: chchen@ou.edu.twExpertise: published a related paper (“Network Management for E-Commerce”) in IJ Electronic Business, 1(4), pp. 18-28.Relationship: Former professor, dissertation chairman.Mr. Frank YoungPartner, ABC Consulting888, Seashore HighwayWon Kok, KowloonHong Kongphone: +852-8888-8888 - fax: +852-8888-8886e-mail: fyoung@abcc.comExpertise: Mr. Young provides consulting services extensively to his clients regarding network management practices.Relationship: I have worked with Mr. Young in several consulting projects in the past three years. Finally, this paper is our original unpublished work and it has not been submitted to any other journal for reviews. Sincerely,Johnny Smith投稿信模版五 来源:http://forum.e2002.com/simple/index.php?t75827.html Dear Editor, Herewith we are very pleased to submit a manuscript entitled above to you for your kind considereation for publication in XXX(杂志名). We ensure you that this Ms has not been submitted elsewhere for consideration of publication.Thank you. Sincerely Yours XXX 投稿信模版六 来源:http://www.5ibio.com/html/biology/paper/20070414/11611.html Dear Dr.:Enclosed are three copies of a manuscript by Rose N .Dipaola,Donna A.Gallo,and Tom N.Roberts titled“Hepatitis C Virus Infection in Long-Term Transfusion Patients”.It is submitted to be considered for publication as a“Original Article” in your journal.This paper is~•Neither the entire paper nor any part of its content has been published or has been accepted elsewhere.It is not being submitted to any other journal.We believe the paper may be of particular interest to the readers of your journal because the study it reports stated the HCV infection rate among long-term transfusion patients is higher than that of the general population and of short-term transfusion patients. Correspondence and phone calls about the paper should be directed to Rose N.Dipaola at the following address,phone and fax number,and e-mail address:Rose N .Dipaola,MD Institute of Internal MedicineCleveland Clinic Foundation9500 Euclid Ave.Cleveland,OH44195,USATel:1-216-444-5360Fax:1-216-444-9580E-mail:dipao@cesmtp .ccf. OrgThanks very much for your attention to our paper.Sincerely yours,Rose N.Dipaola 投稿信模版七(一个老外写的) 来源:http://huagw.blog.hexun.com/3729659_d.html PLoS Genetics(PLoS遗传学期刊) I submit the accompanying manuscript entitled “Gain and loss of multiple genes during the evolution of Helicobacter pylori” by H. Gressmann et al. for publication in PLoS Genetics. This manuscript presents the global variability within H. pylori in terms of presence or absence of almost all the genes within the two currently available genome sequences. The strains tested are representative of the global genetic diversity within H. pylori and also represent the diverse populations that exist in that organism. Global analyses of genomic content are very rare indeed for bacterial species and are new for H. pylori. By including isolates from the most closely related species, H. acinonychis, as an outgroup, it was possible to deduce that most variable genes were probably present in the last common ancestor of H. pylori and have subsequently been lost in individual isolates. In some cases, the same genes were lost in phylogenetically distinct groupings, reflecting convergent evolution. However, the cag PAI was acquired later, after subpopulations had formed. These conclusions are important for concepts about changes in gene content within species and for the acquisition of pathogenicity islands. We also perform a head-to-head comparison of population structure indicated by whole genome microarrays versus that indicated by sequences of 7 housekeeping gene fragments. The comparison indicates that microarrays yield distorted population structures and are less suitable for this goal than simply sequencing 7 gene fragments. In order to be able to deduce patterns of gain or loss, it was necessary to have an independent population structure based on sequence diversity within core genes. This is an important conclusion because many laboratories are attempting to investigate bacterial population structure on the basis of microarray data on their own and have not realized that an independent population structure is necessary for such efforts.. The manuscript will be of great interest to the numerous scientists interested in infections caused by H. pylori as well as to scientists interested in microbial genomic structure and evolution. The following scientists, with whom I have had no contact regarding this manuscript are potentially suitable reviewers: 1. Michael McClelland, Sidney Kimmel Cancer Centre, San Diego, CAmmcclelland@skcc.org 2. Al Ivens, Pathogen microarrays, Sanger Center, Hinxten Hall, Cambridge, UK alicat@sanger.ac.uk 3. Antonello Covacci, IRIS, Chiron Vaccines, Siena, Italy antonello_covacci@chiron.com 4. Paul O’Toole, University of Cork, Ireland pwotoole@ucc.ie 5. Jörg Hacker, University of Würzburg, Germany joerg.hacker@mail.uni-wuerzburg.de I request that Doug Berg not be used as a reviewer due to potential conflict of interest. Sincerely, Mark Achtman, PhD","categories":[],"tags":[{"name":"template","slug":"template","permalink":"http://littlepig.cn/tags/template/"}]},{"title":"英文网站注册常用词汇","slug":"english-words-translation-for-registration-and-offer","date":"2009-03-07T13:36:24.000Z","updated":"2016-12-19T01:14:10.000Z","comments":true,"path":"posts/2009/03/07/english-words-translation-for-registration-and-offer/","link":"","permalink":"http://littlepig.cn/posts/2009/03/07/english-words-translation-for-registration-and-offer/","excerpt":"","text":"最近接触了几个英文网站注册的过程,一般性描述还是能够应付的,只不过一些附加信息的英文词汇就需要借助于词典或者搜索引擎了,今天正好在网上看到一篇文章,是总结的博客赚钱必备词汇,觉得比较实用,修改后转帖过来以作存档,闲时读读也还是有帮助的。 原文在:http://www.fossick.org/englishhelp.htm 1、常见中英文对照 翻译原则:中文的人名、地名都用汉语拼音;地址的排列顺序:先小后大。中国人喜欢先说大的后说小的,如区路号而外国人喜欢先说小的后说大的,如号路区,因此您在翻译时就应该先写小的后写大的。 例如:中国山东省青岛市四方区洛阳路34号3号楼4单元402户,您就要从房开始写起,Room 402, Unit 4, Building 3, No.34. Luoyang Road, Sifang District, Qingdao City, Shandong Prov, China (逗号后面有空格)。注意其中路名、公司名、村名等均不用翻译成同义的英文,只要照写拼音就行了。因为您的支票是中国的邮递员送过来,关键是要他们明白。技术大厦您写成Technology Building,他们可能更迷糊呢。 现在每个城市的中国邮政信件分拣中心都有专人负责将外国来信地址翻译成中文地址,并写在信封上交下面邮递员送过来. 重要: 你的邮政编码一定要写正确,因为外国信件中间的几道邮政环节都是靠邮政编码区域投递的。室/房 Room 村 Vallage 号 No.号宿舍 Dormitory 楼/层 /F 住宅区/小区 Residential Quater甲/乙/丙/丁 A/B/C/D 巷 / 弄 Lane 单元 Unit号楼 / 栋 Building 公司 Com./Crop/LTD.CO厂 Factory 酒楼/酒店 Hotel 路 Road花园 Garden 街 Street 信箱 Mailbox区 Districtq 县 County 镇 Town市 City 省 Prov. 院 Yard大学 College **表示序数词,比如1st、2nd、3rd、4th……如果不会,就用No.***代替,或者直接填数字吧! 另外有一些里之类难翻译的东西,就直接写拼音 Li。而东(南、西、北)路,直接用拼音也行,写 East(South、West、North)Road也行。还有,如果地方不够可以将7栋3012室写成: 7-3012。201室: Room 20112号: No.122单元: Unit 23号楼: Building No.3长安街: Chang An street南京路: Nanjing road长安公司: Chang An Company宝山区: BaoShan District赵家酒店: ZhaoJia hotel钱家花园: Qianjia garden孙家县: Sunjia county李家镇: Lijia town广州市: Guangzhou city广东省: Guangdong province中国: China实例:宝山区南京路12号3号楼201室Room 201,Building No.3,No.12,Nanjing Road,BaoShan District如果地方不够可以将3号楼201室缩写成:3-201宝山区示范新村37号403室Room 403,No.37,SiFan Residential Quarter,BaoShan District中华人民共和国民政部政策研究中心北京河沿大街147号No.147# HeiYian Street the policy center of civil administration department the People’Republic of China虹口区西康南路125弄34号201室Room 201,No.34,Lane 125,XiKang Road(South),HongKou District北京市崇文区天坛南里西区20楼3单元101Room 3-101 building No.20,TianTan-NanXiLi Residential ChongWen District BeiJing City江苏省扬州市宝应县泰山东村102栋204室Room 204 building No.102, East TaiShan Residential BaoYin County JiangSu Province473004河南省南阳市中州路42号 刘刚Liu Gang,Room 42,Zhongzhou Road,Nanyang City,Henan Prov.China 473004中国四川省江油市川西北矿区采气一队1 Team CaiQi ChuanXiBei Mining Area JiangYou City SiChuan Province China中国河北省邢台市群众艺术馆The Masses Art Centre XinTai City HeBei Prov.China江苏省吴江市平望镇联北村七组7 Group LiBei Village PingWang Town WeJiang City JiangSu Province434000湖北省荆州市红苑大酒店 刘刚Liu Gang,Hongyuan Hotel,Jingzhou city,Hubei Prov, China 434000473000河南南阳市八一路272号特钢公司 刘刚Liu Gang,Special Steel Corp,No.272,Bayi Road,Nanyang City,Henan Prov. China 473000528400广东中山市东区亨达花园7栋702 刘刚Liu GangRoom 702,7th Building,Hengda Garden,East District,Zhongshan,China 528400361012福建省厦门市莲花五村龙昌里34号601室 刘刚Liu Gang,Room 601, No.34 Long Chang Li,Xiamen, Fujian, China 361012361004厦门公交总公司承诺办 刘刚Mr. Liu Gang,Cheng Nuo Ban,Gong Jiao Zong Gong Si,Xiamen Fujian, China 361004 2、注册(包括注册offer)时常见英文术语 First name: 填上你的名Last name: 填上你的姓Login name/Username: 自己为自己起一个用户名填上。Password: 输入你想用的密码Confirm Password/verify password: 再输入一次密码 Referred by: 介绍人的用户名。E-mail(must be valid):填写上你的EMAIL地址(必须正确,否则将收不到确认信)address1: 填写你的市内地址(不用写你所在的城市名),用汉语拼音。(原则是邮递员看得懂就行)中文地址的翻译请看上面的介绍。address2:第二收款地址,可以不填city: 填写你所在城市名zip/postcode:填写你的邮政编码State/Province: 州/省份,如果这一栏是下拉菜单,里面没有中国的省份,那么就选择other(意思为另外的其他的) 如果紧接着的下一栏为other,那么就在其中用汉语拼音填上您的省份。Country: 填写国家名称,中国为China。Home phone number: 家庭电话。其中day 表示白天,night/evening表示晚上。Fax: 传真Social Security Number(SSN) or Tax ID Number(TAXID)(美国)社会保险号,付税ID号birth date/year of birth: 你的出生年月日,其中DD表示两位数的日期MM:表示两位数的月份(月份一栏有时候是一个下拉菜单,里面含有12个英文单词,分别表示1月-12月,您自己数吧)YY:表示年份gender: 性别 male表示男性,female表示女性。ethnicity: 人种,应填上Asianlanguage: 语言,填上ChineseAge: 年龄Family status:家庭状况Marital Status:婚姻状况 single-单身,married-以婚Religion :宗教信仰Job Category :工作类型Employment status: 雇佣状况Education :教育状况income: 收入状况 Annual Income-年收入sign up, sign in: 注册continue: 继续submit: 提交Login,LOG ON:登录register: 登记,注册membership: 成员Application Form: 申请表格How did you hear about us: 你是如何知道我们的rules: 规则Minimum payment to send: 支付时的最小数额Sponsor: 赞助商FAQ: 疑问解答user policy: 用户规则BANNER(广告横幅):一个表现商家广告内容的图片,放置在广告商的页面上,通常大小为46868,往往做成动画形式。LOGO(图标):通常用来宣传商家的商标或特定标志,通常大小为8133。CPM(COST PER THOUSAND,每千人次访问收费):按访问人次收费已经成为网络广告的惯例。目前国际上每个CPM收费从$20到$80不等。CLICKS(点击次数):每一次当访客通过点击这个横幅广告访问一次商家网页,称点击一次。点击次数可以客观准确地反映广告效果。CLICKS RATIO(点击率):是广告吸引力的一个标志。如果这个网页出现了一万次,而网页上的广告的点击次数为五百次,那么点击率即为5%。IMPRESSION(投放次数):网页被访问的次数。COUNTER(计数器)上的统计数字即该网页的IMPRESSION。PORTAL PAGE(点击广告后连到的页面):通常这个页面不是商家网站的首页,而是针对广告内容重新设计的页面。PAGEVIEWS(综合浏览量):网站各网页被浏览的总次数。一个访客有可能创造十几个甚至更多的PAGEVIEWS。UNIQUE HOST(独立访客):由于每个访客有可制造出多个PAGEVIEWS,而访客刷新网页也会使IMPRESSION数增加,所以PAGEVIEWS或IMPRESSION都不能精确表现网站的访问人数。通常情况下每个访客都会来自于不同的地址,称为来自不同的IP。独立访客即将来自同一IP的访客视为同一个人,从而获得更精确的访客人数。象网易中文排行榜提供的易数统计所提供的数字就是UNIQUE HOST。通常很多网站公布的访问量都是PAGEVIEWS或IMPRESSION,PAGEVIEWS往往是IMPRESSION的数倍,而IMPRESSION又会比UNIQUE HOST高出许多。 以下是注册时常要填写的内容或英文词语,以供参考:(按A—Z排序)Academic 学术研究Address1 填写你的收款地址,国家名用英语(China),其他可用汉语拼音。(原则是邮递员看的懂就行) 注意如果地址过长可能会导致数据库错误而不能注册成功,补救的方法是缩减地址的拼写。Address2 第二收款地址,如果address1填不下可填在address2上Administrative 行政管理Age 年龄Annual Income 年收入birth date/year of birth: 你的出生年月日,其中DD表示两位数的日期Billing Name 支票接收人Business Person 商人city 所在城市(拼音)Clerical 办事员College 大学Confirm Password/verify password 确认密码/验证密码Country 填写国家名称,中国为China。Credit cards 信用卡(号码)daily visitors 每日访问人数degree 学位diploma 毕业文凭Doctor 医生Education 教育状况Educator 教育家E-mail(must be valid) 填上你的Email地址(必须有效,否则将收不到确认信)Employment status 雇佣状况ethnicity 人种,应填上ASIANExecutive 执法者Family status 家庭状况Fax 传真First name、Forename 填上你的姓gender 性别:male表示男性,female表示女性Graduate School 大学毕业High School 高中Home phone number 家庭电话。其中day 表示白天,night/evening表示晚上。一般不用提供How did you hear about us 你是如何知道我们的income 收入状况(你应该选择高一点,尤其是读email赚钱)Investment 投资Investor 发明家Job Category 工作类型Laborer 劳动者language 语言:填上ChineseLast name、Surname 填上你的名Lawyer 律师Login,username,login name 填上自己的用户名Make Checks Payable To、Check Pay To 支票支付给谁Managerial 管理者Marital Status 婚姻状况:single-单身,married-以婚Military 军人Minimum payment to send 支付时的最小数额Password: 输入你的密码Payee on Check 支票收款人Professional 专业人员Programmer 程序设计人员Referred by: 里面填介绍人的用户名,如果没人介绍的话就不要填Religion 宗教信仰Retired 退休retype password 再输入一次密码Sales Person 销售商Sales/Marketing/Advertising 销售/市场/广告Site Description 网站说明Social Security Number(SSN) or Tax ID Number(TAXID) 社会保险号,付税ID号 (只适用于美国)State/Province 州/省份,如果这一栏是下拉菜单,里面没有中国的省份,那么就选择other,如果紧接着的下一栏为other,那么就在其中用汉语拼音填上您的省份。state/province (Residents) (居住的)州(美国)/省(中国)Student 学生submit 提交Technical 技术员Technical/Engineering 技术员/工程师Unemployed 失业webmaster 网管zip/postcode 你的邮政编码 下面是一些站点中常用的词语,以作参考: Login,LOG ON 登录membership 成员Application Form 申请表格Sign up,Signin,Join Now,Register now 注册,登记rules 规则Minimum payment to send 支付时的最小数额Sponsor 赞助商FAQ 疑问解答(经常问到的问题)user policy 用户规则Privacy Policy 保密规则Members Area 会员专区Terms & Conditions 条款和条件Account Information 帐号信息program 计划statistics 统计信息balance 结算associates 合作人, 同事(下线)CPM(Cost Per thousand impression ) 千印象费用,网上广告产生每1000个广告印象(显示)数的费用CPC(Cost Per thousand click ) 千点击费用,网上广告产生每1000个广告点击数的费用Click Throughs 点通次数,网上广告被用户打开、浏览的次数Click-through Rate 点通率,网上广告被点击的次数与被显示次数之比Organization 单位名称Sponsor 赞助商Contact Information 联系信息Keywords 关键词pay-per-click 每点击支付额Site Information 网站信息service 服务(内容)homepage district 网站类别","categories":[],"tags":[]},{"title":"CNNIC称谷歌高学历用户流失率远低于百度","slug":"google-vs-baidu","date":"2009-03-05T14:04:05.000Z","updated":"2016-10-17T09:05:02.000Z","comments":true,"path":"posts/2009/03/05/google-vs-baidu/","link":"","permalink":"http://littlepig.cn/posts/2009/03/05/google-vs-baidu/","excerpt":"","text":"先转帖一篇报道 `2009-03-05 14:53:14 来源: 网易科技报道 网易科技讯 3月5日消息,今日在CNNIC《2008中国搜索引擎用户行为研究报告》发布会上,该机构分析师向网易科技透露,从目前取得的数据来看,谷歌高学历用户的流失率低于百度 对方透露,从CNNIC掌握的数据分析,百度的流失用户主要转而选择谷歌,而谷歌的流失用户也大部分转而选择百度,但是从用户结构上来看,谷歌高学历用户的流失率要远低于百度。 尽管高学历用户中谷歌流失率较低,但从总量而言,百度的用户忠诚度仍然最高。CNNIC在报告中披露,用户对百度的首选忠诚度最高,达到96.0%;谷歌的首选忠诚度比例为82.7%。与2007年同期相比,除百度之外,其他搜索品牌的首选忠诚度都有所降低。搜索引擎用户的应用主要以休闲娱乐为主要目的,以休闲娱乐为目的的搜索中,音乐搜索的选择率最高,达32.6%;生活信息搜索主要以新闻信息的搜索为主;而在专业工具的搜索中,专业资料的需求最高,选择率达31.3%。(方堃) (本文来源:网易科技报道 )。` 我是最近从百度偏向谷歌的用户之一,当然,我不是一个绝对主义者,我会根据具体情况选择性的使用二者,只不过,我感觉到我最近使用百度的频率要比以前低很多,并且浏览器的默认引擎也偏向于设定为谷歌,总结了一下我的使用经历: 互联网搜索引擎在国内飞速发展之时,百度的中文搜索能力比谷歌要强很多,尤其是百度的分词能力,将水土不服的 Google 打压的一塌糊涂,其时正值雅虎没落之际,百度趁虚而入,趁势而上,获得了巨大成功,几乎一夜之间,雅虎消失了,Google 蜷缩在一个角落,而百度,几乎成了搜索引擎的代名词,占据了每一个浏览器的下拉地址列表,我也不例外,那个时候几乎所有的信息都是从百度获取的。 由于需要,我需要查阅一些英文资料,百度显示出了他的不足,而这正是 Google 的长处,能使用英文资料的大部分都是高学历用户,可以说,Google 在这上面先入为主,直到现在,百度在英文搜索上面照样没有市场,高学历用户几乎没有转向的选择性,自然也就谈不到流失了。 百度在图片搜索领域、尤其是 Mp3 搜索市场上的优势,在更大的范围内固定了用户群体,这点上,我也受益匪浅,我个人支持百度:歌曲的创作,并不是一个人或一个组织的个体行为,为什么要为了保护一个个体的利益而牺牲大多数人享受音乐的权利呢? 快照功能的使用使得百度用户的忠诚度得到了提升。由于众所周知的原因,Google 的快照过去一直不能使用,甚至连图片搜索功能也得到了限制,我不知道别人的如何,反正我从使用 Google 开始,图片的搜索就始终不能翻页过多,一般两三页之后就出错了。页面更新如此快速的互联网,快照的作用显而易见,这一巨大优势成为了百度在搜索引擎市场大战中的一大砝码。直到最近,Google 的快照才得以恢复,自然而然,百度高学历用户流失也就很正常了。 百度的页面更新速度远远低于 Google ,我最近做了这个站点,所以深有体会,2月份的站点,同时向各大引擎做了提交,百度竟然现在只有可怜的24个页面,而且还包括几年之前的信息,Google 现在有 96 个页面,每当新的日志出现之后,Google 几乎当天就可以搜索到信息。百度和 Google 的爬虫几乎每天都光顾,但工作效率却相差如此之大。 百度追求市场利益导致了很多人的反感,将商业用户放置在搜索结果的首页,浪费搜索用户时间的行为几乎是自杀式的发展模式,难到要走当初 263 的路子? Google 的中文搜索越做越好了,没有必要再因为这个原因在两个引擎之间换来换去,这也是我最近偏向 Google 的重要原因之一。 希望百度走好吧,毕竟,习惯是不容易改变的,可是,对于高学历用户,习惯并不是第一位的。","categories":[],"tags":[]},{"title":"在WP里使用被禁止的 Javascript,Iframe 等","slug":"use-javascript-iframe-etc-in-wordpress","date":"2009-03-01T07:21:22.000Z","updated":"2016-10-17T08:40:55.000Z","comments":true,"path":"posts/2009/03/01/use-javascript-iframe-etc-in-wordpress/","link":"","permalink":"http://littlepig.cn/posts/2009/03/01/use-javascript-iframe-etc-in-wordpress/","excerpt":"","text":"WordPress 里发表日志时默认禁止了一些标签的使用,比如 <Script>、<IFrame> 等,虽然有一定的好处,但缺点也是显而易见的,很多功能都得到了限制,虽然修改 WP 的内部代码可以解除限制,但并不是完美的办法,因为将来 WP 升级时,你仍然需要再行修改。如果你需要使用这些标签的页面比较单一,那么可以采用如下的方法进行。 我们知道,WordPress 的页面 (Page) 可以继承自某个模板,虽然文章的页面内容是被编辑器过滤的,但模板里的内容不会,既然这样,我们可以将 script ,iframe 等被禁止的标签及内容放置在模板,然后新建页面时继承自该模板即可。 下面以我的万年历作为例子,说明一下具体过程: 首先将你的 Page.php 复制一份,改名为 calendar.php ,然后在最上部加入如下内容 123<?php /* Template Name: Calendar */ ?> 接下来在你认为合适的位置放置好你的 javascript 或者 iframe 代码,建议放置在 <?php the_content() ?> 下面或者 <?php endwhile; endif; ?> 的下面。 万年历网上有很多代码,基本上都是由 JavaScript 组成,我简单的进行了修改,将初始化函数的调用由 Body 的 Onload 事件改为页面加载完毕后由 JavaScript 触发,从而可以使其在 WordPress 的模板中使用,代码如下 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289<script language=JScript><!--/*****************************************************************************个人偏好设定*****************************************************************************/var conWeekend = 3; // 周末颜色显示: 1=黑色, 2=绿色, 3=红色, 4=隔周休/*****************************************************************************日期资料*****************************************************************************/var lunarInfo=new Array(0x4bd8,0x4ae0,0xa570,0x54d5,0xd260,0xd950,0x5554,0x56af,0x9ad0,0x55d2,0x4ae0,0xa5b6,0xa4d0,0xd250,0xd295,0xb54f,0xd6a0,0xada2,0x95b0,0x4977,0x497f,0xa4b0,0xb4b5,0x6a50,0x6d40,0xab54,0x2b6f,0x9570,0x52f2,0x4970,0x6566,0xd4a0,0xea50,0x6a95,0x5adf,0x2b60,0x86e3,0x92ef,0xc8d7,0xc95f,0xd4a0,0xd8a6,0xb55f,0x56a0,0xa5b4,0x25df,0x92d0,0xd2b2,0xa950,0xb557,0x6ca0,0xb550,0x5355,0x4daf,0xa5b0,0x4573,0x52bf,0xa9a8,0xe950,0x6aa0,0xaea6,0xab50,0x4b60,0xaae4,0xa570,0x5260,0xf263,0xd950,0x5b57,0x56a0,0x96d0,0x4dd5,0x4ad0,0xa4d0,0xd4d4,0xd250,0xd558,0xb540,0xb6a0,0x95a6,0x95bf,0x49b0,0xa974,0xa4b0,0xb27a,0x6a50,0x6d40,0xaf46,0xab60,0x9570,0x4af5,0x4970,0x64b0,0x74a3,0xea50,0x6b58,0x5ac0,0xab60,0x96d5,0x92e0,0xc960,0xd954,0xd4a0,0xda50,0x7552,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5,0xa950,0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930,0x7954,0x6aa0,0xad50,0x5b52,0x4b60,0xa6e6,0xa4e0,0xd260,0xea65,0xd530,0x5aa0,0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45,0xb5a0,0x56d0,0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0,0x4b63,0x937f,0x49f8,0x4970,0x64b0,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef,0x92e0,0xd2e3,0xc960,0xd557,0xd4a0,0xda50,0x5d55,0x56a0,0xa6d0,0x55d4,0x52d0,0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0x52b0,0xb273,0x6930,0x7337,0x6aa0,0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260,0xe968,0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0,0xd150,0xf252,0xd520);var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");var Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");var solarTerm = new Array("*小寒*","大寒","*立春*","雨水","*惊蛰*","春分","*清明*","谷雨","*立夏*","小满","*芒种*","夏至","*小暑*","大暑","*立秋*","处暑","*白露*","秋分","*寒露*","霜降","*立冬*","小雪","*大雪*","冬至");var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');var nStr2 = new Array('初','十','廿','卅','□');var monthName = new Array("一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月");//公历节日 *表示放假日var sFtv = new Array("0101*新年元旦","0202 世界湿地日","0207 国际声援南非日","0210 国际气象节","0214 情人节","0301 国际海豹日","0303 全国爱耳日","0308 国际妇女节","0312 植树节 孙中山逝世纪念日","0314 国际警察日","0315 国际消费者权益日","0317 中国国医节 国际航海日","0321 世界森林日 消除种族歧视国际日","0321 世界儿歌日","0322 世界水日","0323 世界气象日","0324 世界防治结核病日","0325 全国中小学生安全教育日","0330 巴勒斯坦国土日","0401 愚人节 全国爱国卫生运动月(四月) 税收宣传月(四月)","0407 世界卫生日","0422 世界地球日","0423 世界图书和版权日","0424 亚非新闻工作者日","0501 国际劳动节","0504 中国五四青年节","0505 碘缺乏病防治日","0508 世界红十字日","0512 国际护士节","0515 国际家庭日","0517 世界电信日","0518 国际博物馆日","0520 全国学生营养日","0523 国际牛奶日","0531 世界无烟日","0601 国际儿童节","0605 世界环境日","0606 全国爱眼日","0617 防治荒漠化和干旱日","0623 国际奥林匹克日","0625 全国土地日","0626 国际反毒品日","0701 中国共产党建党日 世界建筑日","0702 国际体育记者日","0707 中国人民抗日战争纪念日","0711 世界人口日","0730 非洲妇女日","0801 中国建军节","0808 中国男子节(爸爸节)","0815 日本正式宣布无条件投降日","0908 国际扫盲日 国际新闻工作者日","0910 教师节","0914 世界清洁地球日","0916 国际臭氧层保护日","0918 九·一八事变纪念日","0920 国际爱牙日","0927 世界旅游日","1001*国庆节 世界音乐日 国际老人节","1001 国际音乐日","1002 国际和平与民主自由斗争日","1004 世界动物日","1008 全国高血压日","1008 世界视觉日","1009 世界邮政日 万国邮联日","1010 辛亥革命纪念日 世界精神卫生日","1013 世界保健日 国际教师节","1014 世界标准日","1015 国际盲人节(白手杖节)","1016 世界粮食日","1017 世界消除贫困日","1022 世界传统医药日","1024 联合国日 世界发展信息日","1031 世界勤俭日","1107 十月社会主义革命纪念日","1108 中国记者日","1109 全国消防安全宣传教育日","1110 世界青年节","1111 国际科学与和平周(本日所属的一周)","1112 孙中山诞辰纪念日","1114 世界糖尿病日","1117 国际大学生节 世界学生节","1121 世界问候日 世界电视日","1129 国际声援巴勒斯坦人民国际日","1201 世界艾滋病日","1203 世界残疾人日","1205 国际经济和社会发展志愿人员日","1208 国际儿童电视日","1209 世界足球日","1210 世界人权日","1212 西安事变纪念日","1213 南京大屠杀(1937年)纪念日!紧记血泪史!","1221 国际篮球日","1224 平安夜","1225 圣诞节","1229 国际生物多样性日");//某月的第几个星期几。 5,6,7,8 表示到数第 1,2,3,4 个星期几var wFtv = new Array("0110 黑人日","0150 世界麻风日", //一月的最后一个星期日(月倒数第一个星期日)"0520 国际母亲节","0530 全国助残日","0630 父亲节","0911 劳动节","0932 国际和平日","0940 国际聋人节 世界儿童日","0950 世界海事日","1011 国际住房日","1013 国际减轻自然灾害日(减灾日)","1144 感恩节");//农历节日var lFtv = new Array("0101*春节","0115 元宵节","0202 龙抬头节","0323 妈祖生辰 (天上圣母诞辰)","0505 端午节","0707 七七中国情人节","0815 中秋节","0909 重阳节","1006 斌生日","1208 腊八节","1223 腊八节","0100*除夕");//世界时间资料var timeData = {"Asia 亚洲": { //----------------------------------------------"Brunei 文莱 ":["+0800","","斯里巴加湾市"],"Burma 缅甸 ":["+0630","","仰光"],"Cambodia 柬埔寨 ":["+0700","","金边"],"China 中国 ":["+0800","","北京、重庆、上海、天津"],"China(HK,Macau) 中国 ":["+0800","","香港、澳门特区"],"China(TaiWan) 中国 ":["+0800","","台北、高雄"],"China(Urumchi) 中国 ":["+0700","","乌鲁木齐"],"Indonesia 印尼 ":["+0700","","雅加达"],"Japan 日本 ":["+0900","","东京、大阪、札幌"],"Korea 韩国 ":["+0900","","汉城"],"Laos 老挝 ":["+0700","","万象"],"Malaysia 马来西亚":["+0800","","吉隆坡"],"Mongolia 蒙古 ":["+0800","03L03|09L03","乌兰巴托、库伦"],"Philippines 菲律宾 ":["+0800","04F53|10F53","马尼拉"],"Russia(Anadyr) 俄罗斯 ":["+1300","03L03|10L03","阿纳德尔河"],"Russia(Kamchatka) 俄罗斯 ":["+1200","03L03|10L03","堪察加半岛"],"Russia(Magadan) 俄罗斯 ":["+1100","03L03|10L03","马加丹"],"Russia(Vladivostok)俄罗斯 ":["+1000","03L03|10L03","符拉迪沃斯托克(海参崴)"],"Russia(Yakutsk) 俄罗斯 ":["+0900","03L03|10L03","雅库茨克"],"Singapore 新加坡 ":["+0800","","新加坡"],"Thailand 泰国 ":["+0700","","曼谷"],"Vietnam 越南 ":["+0700","","河内"]},"ME, India pen. 中东、印度半岛": { //------------------------------------"Afghanistan 阿富汗 ":["+0430","","喀布尔"],"Arab Emirates 阿拉伯联合酋长国":["+0400","","阿布扎比"],"Bahrain 巴林 ":["+0300","","麦纳麦"],"Bangladesh 孟加拉 ":["+0600","","达卡"],"Bhutan 不丹 ":["+0600","","廷布"],"Cyprus 塞浦路斯":["+0200","","尼科西亚"],"Georgia 乔治亚 ":["+0500","","第比利斯"],"India 印度 ":["+0530","","新德里、孟买、加尔各答"],"Iran 伊朗 ":["+0330","04 13|10 13","德黑兰"],"Iraq 伊拉克 ":["+0300","04 13|10 13","巴格达"],"Israel 以色列·巴勒斯坦":["+0200","04F53|09F53","耶路撒冷"],"Jordan 约旦 ":["+0200","","安曼"],"Kuwait 科威特 ":["+0300","","科威特城"],"Lebanon 黎巴嫩 ":["+0200","03L03|10L03","贝鲁特"],"Maldives 马尔代夫":["+0500","","马累"],"Nepal 尼泊尔 ":["+0545","","加德满都"],"Oman 阿曼 ":["+0400","","马斯喀特"],"Pakistan 巴基斯坦":["+0500","","卡拉奇、伊斯兰堡"],"Qatar 卡塔尔 ":["+0300","","多哈"],"Saudi Arabia 沙特阿拉伯":["+0300","","利雅得"],"Sri Lanka 斯里兰卡":["+0600","","科伦坡"],"Syria 叙利亚 ":["+0200","04 13|10 13","大马士革"],"Tajikistan 塔吉克斯坦":["+0500","","杜尚别"],"Turkey 土耳其 ":["+0200","","伊斯坦堡"],"Turkmenistan 土库曼斯坦":["+0500","","阿什哈巴德"],"Uzbekistan 乌兹别克斯坦":["+0500","","塔什干"],"Yemen 也门 ":["+0300","","萨那"]},"North Europe 北欧": { //----------------------------------------------"Denmark 丹麦":["+0100","04F03|10L03","哥本哈根"],"Finland 芬兰":["+0200","03L01|10L01","赫尔辛基"],"Iceland 冰岛":["+0000","","雷克雅未克"],"Norwegian 挪威":["+0100","","奥斯陆"],"Sweden 瑞典":["+0100","03L01|10L01","斯德哥尔摩"]},"Eastern Europe 中欧、东欧": { //----------------------------------------"Armenia 亚美尼亚":["+0400","","埃里温"],"Austria 奥地利 ":["+0100","03L01|10L01","维也纳"],"Azerbaijan 阿塞拜疆":["+0400","","巴库"],"Czech 捷克 ":["+0100","","布拉格"],"Estonia 爱沙尼亚":["+0200","","塔林"],"Germany 德国 ":["+0100","03L01|10L01","柏林、波恩"],"Hungarian 匈牙利 ":["+0100","","布达佩斯"],"Kazakhstan(Astana) 哈萨克斯坦":["+0600","","阿斯塔纳、阿拉木图"],"Kazakhstan(Aqtobe) 哈萨克斯坦":["+0500","","阿克托别"],"Kazakhstan(Aqtau) 哈萨克斯坦":["+0400","","阿克图"],"Kirghizia 吉尔吉斯":["+0500","","比斯凯克"],"Latvia 拉脱维亚":["+0200","","里加"],"Lithuania 立陶宛 ":["+0200","","维尔纽斯"],"Moldova 摩尔多瓦":["+0200","","基希纳乌"],"Poland 波兰 ":["+0100","","华沙"],"Rumania 罗马尼亚":["+0200","","布加勒斯特"],"Russia(Moscow) 俄罗斯 ":["+0300","03L03|10L03","莫斯科"],"Russia(Volgograd) 俄罗斯 ":["+0300","03L03|10L03","伏尔加格勒"],"Slovakia 斯洛伐克":["+0100","","布拉迪斯拉发"],"Switzerland 瑞士 ":["+0100","","苏黎世"],"Ukraine 乌克兰 ":["+0200","","基辅"],"Ukraine(Simferopol)乌克兰 ":["+0300","","辛菲罗波尔"],"Belarus 白俄罗斯":["+0200","03L03|10L03","明斯克"]},"Western Europe 西欧": { //----------------------------------------------"Belgium 比利时 ":["+0100","03L01|10L01","布鲁塞尔"],"France 法国 ":["+0100","03L01|10L01","巴黎"],"Ireland 爱尔兰 ":["+0000","03L01|10L01","都柏林"],"Monaco 摩纳哥 ":["+0100","","摩纳哥市"],"Netherlands 荷兰 ":["+0100","03L01|10L01","阿姆斯特丹"],"Luxembourg 卢森堡 ":["+0100","03L01|10L01","卢森堡市"],"United Kingdom 英国 ":["+0000","03L01|10L01","伦敦、爱丁堡"]},"South Europe 南欧": { //------------------------------------------------"Albania 阿尔巴尼亚":["+0100","","地拉那"],"Bulgaria 保加利亚":["+0200","","索菲亚"],"Greece 希腊 ":["+0200","03L01|10L01","雅典"],"Holy See 罗马教廷":["+0100","","梵蒂冈"],"Italy 意大利 ":["+0100","03L01|10L01","罗马"],"Malta 马耳他 ":["+0100","","瓦莱塔"],"Portugal 葡萄牙 ":["+0000","03L01|10L01","里斯本"],"San Marino 圣马利诺":["+0100","","圣马利诺"],"Span 西班牙 ":["+0100","03L01|10L01","马德里"],"Slovenia 斯洛文尼亚":["+0100","","卢布尔雅那"],"Yugoslavia 南斯拉夫(塞尔维亚)":["+0100","","贝尔格莱德"]},"North America 北美洲": { //--------------------------------------------"Canada(NST) 加拿大":["-0330","04F02|10L02","纽芬兰、圣约翰、古斯湾"],"Canada(AST) 加拿大":["-0400","04F02|10L02","冰河湾、Pangnirtung"],"Canada(EST) 加拿大":["-0500","04F02|10L02","蒙特罗"],"Canada(CST) 加拿大":["-0600","04F02|10L02","雷迦納、雨河鎮、Swift Current"],"Canada(MST) 加拿大":["-0700","04F02|10L02","印奴维特港湾、埃德蒙顿、道森河"],"Canada(PST) 加拿大":["-0800","04F02|10L02","温哥华"],"US(Eastern) 美国(东岸)":["-0500","04F02|10L02","华盛顿、纽约"],"US(Indiana) 美国 ":["-0500","","印第安纳"],"US(Central) 美国(中部)":["-0600","04F02|10L02","芝加哥"],"US(Mountain) 美国(山区)":["-0700","04F02|10L02","丹佛"],"US(Arizona) 美国 ":["-0700","","亚历桑那"],"US(Pacific) 美国(西岸)":["-0800","04F02|10L02","旧金山、洛杉矶"],"US(Alaska) 美国 ":["-0900","","阿拉斯加、朱诺"]},"South America 中南美洲": { //------------------------------------------"Antigua & Barbuda 安提瓜岛及巴布达岛":["-0400","","圣约翰"],"Argentina 阿根廷 ":["-0300","","布宜诺斯艾利斯"],"Bahamas 巴哈马 ":["-0500","","拿骚"],"Barbados 巴巴多斯岛":["-0400","","布里奇顿(桥镇)"],"Belize 贝里斯 ":["-0600","","贝里斯"],"Bolivia 玻利维亚":["-0400","","拉巴斯"],"Brazil(AST) 巴西 ":["-0500","10F03|02L03","Porto Acre"],"Brazil(EST) 巴西 ":["-0300","10F03|02L03","巴西利亚、里约热内卢"],"Brazil(FST) 巴西 ":["-0200","10F03|02L03","诺罗纳"],"Brazil(WST) 巴西 ":["-0400","10F03|02L03","库亚巴"],"Chilean 智利 ":["-0500","10F03|03F03","Hanga Roa"],"Chilean 智利 ":["-0300","10F03|03F03","圣地亚哥"],"Colombia 哥伦比亚":["-0500","","波哥大"],"Costa Rica 哥斯达黎加":["-0600","","圣何塞"],"Cuba 古巴 ":["-0500","04 13|10L03","哈瓦那"],"Dominican 多米尼加":["-0400","","圣多明各、罗梭"],"Ecuador 厄瓜多尔":["-0500","","基多"],"El Salvador 萨尔瓦多":["-0600","","圣萨尔瓦多"],"Falklands 福克兰群岛":["-0300","09F03|04F03","史丹利"],"Guatemala 危地马拉":["-0600","","危地马拉城"],"Haiti 海地 ":["-0500","","太子港"],"Honduras 洪都拉斯":["-0600","","特古西加尔巴"],"Jamaica 牙买加 ":["-0500","","金斯敦"],"Mexico(Mazatlan) 墨西哥 ":["-0700","","马萨特兰"],"Mexico(首都) 墨西哥 ":["-0600","","墨西哥城"],"Mexico(蒂华纳) 墨西哥 ":["-0800","","蒂华纳"],"Nicaragua 尼加拉瓜":["-0500","","马那瓜"],"Panama 巴拿马 ":["-0500","","巴拿马市"],"Paraguay 巴拉圭 ":["-0400","10F03|02L03","亚松森"],"Peru 秘鲁 ":["-0500","","利马"],"Saint Kitts & Nevis 圣基茨和尼维斯":["-0400","","巴斯特尔(Basseterre)"],"St. Lucia 圣卢西亚":["-0400","","卡斯特里"],"St. Vincent & Grenadines 圣文森特和格林纳丁斯":["-0400","","金斯敦"],"Suriname 苏里南":["-0300","","帕拉马里博(Paramaribo)"],"Trinidad & Tobago 特立尼达和多巴哥":["-0400","","西班牙港"],"Uruguay 乌拉圭 ":["-0300","","蒙得维的亚"],"Venezuela 委内瑞拉":["-0400","","加拉加斯"]},"Africa 非洲": { //----------------------------------------------"Algeria 阿尔及利亚":["+0100","","阿尔及尔"],"Angola 安哥拉 ":["+0100","","罗安达"],"Benin 贝南 ":["+0100","","新港"],"Botswana 博茨瓦纳":["+0200","","哈博罗内"],"Burundi 布隆迪 ":["+0200","","布琼布拉"],"Cameroon 喀麦隆 ":["+0100","","雅温得"],"Cape Verde 佛德角 ":["-0100","","普拉亚"],"Central African 中非共和国":["+0100","","班吉"],"Chad 乍得 ":["+0100","","恩贾梅纳市"],"Congo 刚果(布)":["+0100","","布拉柴维尔"],"Djibouti 吉布提 ":["+0300","","吉布提"],"Egypt 埃及 ":["+0200","04L53|09L43","开罗"],"Equatorial Guinea 赤道几内亚":["+0100","","马博托"],"Ethiopia 埃塞俄比亚":["+0300","","亚的斯亚贝巴"],"Gabon 加蓬 ":["+0100","","利伯维尔"],"Gambia 冈比亚 ":["+0000","","班珠尔"],"Ghana 加纳 ":["+0000","","阿克拉"],"Guinea 几内亚 ":["+0000","","科纳克里"],"Ivory Coast 象牙海岸":["+0000","","阿比让、雅穆索戈"],"Kenya 肯尼亚 ":["+0300","","内罗毕"],"Lesotho 莱索托 ":["+0200","","马塞卢"],"Liberia 利比里亚":["+0000","","蒙罗维亚"],"Madagascar 马达加斯加":["+0300","","塔那那利佛"],"Malawi 马拉维 ":["+0200","","利隆圭"],"Mali 马里 ":["+0000","","巴马科"],"Mauritania 毛里塔尼亚":["+0000","","努瓦克肖特"],"Mauritius 毛里求斯":["+0400","","路易港"],"Morocco 摩洛哥 ":["+0000","","卡萨布兰卡"],"Mozambique 莫桑比克":["+0200","","马普托"],"Namibia 纳米比亚":["+0200","09F03|04F03","温得和克"],"Niger 尼日尔 ":["+0100","","尼亚美"],"Nigeria 尼日利亚":["+0100","","阿布贾"],"Rwanda 卢旺达 ":["+0200","","基加利"],"Sao Tome 圣多美 ":["+0000","","圣多美"],"Senegal 塞内加尔":["+0000","","达卡尔"],"Sierra Leone 狮子山国":["+0000","","自由城"],"Somalia 索马里 ":["+0300","","摩加迪沙"],"South Africa 南非 ":["+0200","","开普敦、普利托里亚"],"Sudan 苏丹 ":["+0200","","喀土穆"],"Tanzania 坦桑尼亚":["+0300","","达累斯萨拉姆"],"Togo 多哥 ":["+0000","","洛美隆"],"Tunisia 突尼斯 ":["+0100","","突尼斯市"],"Uganda 乌干达 ":["+0300","","坎帕拉"],"Zaire 扎伊尔(刚果金) ":["+0100","","金沙萨"],"Zambia 赞比亚 ":["+0200","","卢萨卡"],"Zimbabwe 津巴布韦":["+0200","","哈拉雷"]},"Oceania 大洋洲": { //----------------------------------------------"American Samoa(US) 美属萨摩亚(美)":["-1100","","帕果帕果港"],"Aus.(Adelaide) 澳大利亚 ":["+0930","10F03|03F03","阿得雷德"],"Aus.(Brisbane) 澳大利亚 ":["+1000","10F03|03F03","布里斯班"],"Aus.(Darwin) 澳大利亚 ":["+0930","10F03|03F03","达尔文"],"Aus.(Hobart) 澳大利亚 ":["+1000","10F03|03F03","荷伯特"],"Aus.(Perth) 澳大利亚 ":["+0800","10F03|03F03","佩思"],"Aus.(Sydney) 澳大利亚 ":["+1000","10F03|03F03","悉尼"],"Cook Islands(NZ) 库克群岛(新西兰) ":["-1000","","阿瓦鲁阿"],"Eniwetok 埃尼威托克岛":["-1200","","埃尼威托克岛"],"Fiji 斐济 ":["+1200","11F03|02L03","苏瓦"],"Guam 关岛 ":["+1000","","阿加尼亚"],"Hawaii(US) 夏威夷(美)":["-1000","","檀香山"],"Kiribati 基里巴斯 ":["+1100","","塔拉瓦"],//"Mariana Islands 塞班岛 ":["","","塞班岛"],"Marshall Is. 马绍尔群岛":["+1200","","马朱罗"],"Micronesia 密克罗尼西亚联邦":["+1000","","帕利基尔(Palikir)"],"Midway Is.(US) 中途岛(美)":["-1100","","中途岛"],"Nauru Rep. 瑙鲁共和国":["+1200","","亚伦"],"New Calednia(FR) 新克里多尼亚(法)":["+1100","","努美阿"],"New Zealand 新西兰 ":["+1200","10F03|04F63","奥克兰"],"New Zealand(CHADT) 新西兰 ":["+1245","10F03|04F63","惠灵顿"],"Niue(NZ) 纽埃(新) ":["-1100","","阿洛菲(Alofi)"],"Nor. Mariana Is. 北马里亚纳群岛(美)":["+1000","","塞班岛"],"Palau 帕劳群岛(帛琉群岛) ":["+0900","","科罗尔"],"Papua New Guinea 巴布亚新几内亚":["+1000","","莫尔斯比港"],"Pitcairn Is.(UK) 皮特克恩群岛(英)":["-0830","","亚当斯敦"],"Polynesia(FR) 玻利尼西亚(法)":["-1000","","巴比蒂、塔希提"],"Solomon Is. 所罗门群岛":["+1100","","霍尼亚拉"],"Tahiti 塔希提 ":["-1000","","帕佩特"],"Tokelau(NZ) 托克劳群岛(新)":["-1100","","努库诺努、法考福、阿塔富"],"Tonga 汤加 ":["+1300","10F63|04F63","努库阿洛法"],"Tuvalu 图瓦卢 ":["+1200","","富纳富提"],"Vanuatu 瓦努阿图(新赫布里底群岛)":["+1100","","维拉港"],"Western Samoa 西萨摩亚":["-1100","","阿皮亚"],"国际换日线 ":["-1200","","国际换日线"]}};/*****************************************************************************日期计算*****************************************************************************///====================================== 返回农历 y年的总天数function lYearDays(y) {var i, sum = 348;for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0;return(sum+leapDays(y));}//====================================== 返回农历 y年闰月的天数function leapDays(y) {if(leapMonth(y)) return( (lunarInfo[y-1899]&0xf)==0xf? 30: 29);else return(0);}//====================================== 返回农历 y年闰哪个月 1-12 , 没闰返回 0function leapMonth(y) {var lm = lunarInfo[y-1900] & 0xf;return(lm==0xf?0:lm);}//====================================== 返回农历 y年m月的总天数function monthDays(y,m) {return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 );}//====================================== 算出农历, 传入日期控件, 返回农历日期控件// 该控件属性有 .year .month .day .isLeapfunction Lunar(objDate) {var i, leap=0, temp=0;var offset = (Date.UTC(objDate.getFullYear(),objDate.getMonth(),objDate.getDate()) - Date.UTC(1900,0,31))/86400000;for(i=1900; i<2100 && offset>0; i++) { temp=lYearDays(i); offset-=temp; }if(offset<0) { offset+=temp; i--; }this.year = i;leap = leapMonth(i); //闰哪个月this.isLeap = false;for(i=1; i<13 && offset>0; i++) {//闰月if(leap>0 && i==(leap+1) && this.isLeap==false){ --i; this.isLeap = true; temp = leapDays(this.year); }else{ temp = monthDays(this.year, i); }//解除闰月if(this.isLeap==true && i==(leap+1)) this.isLeap = false;offset -= temp;}if(offset==0 && leap>0 && i==leap+1)if(this.isLeap){ this.isLeap = false; }else{ this.isLeap = true; --i; }if(offset<0){ offset += temp; --i; }this.month = i;this.day = offset + 1;}//==============================返回公历 y年某m+1月的天数function solarDays(y,m) {if(m==1)return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28);elsereturn(solarMonth[m]);}//============================== 传入 offset 返回干支, 0=甲子function cyclical(num) {return(Gan[num%10]+Zhi[num%12]);}//============================== 阴历属性function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {this.isToday = false;//瓣句this.sYear = sYear; //公元年4位数字this.sMonth = sMonth; //公元月数字this.sDay = sDay; //公元日数字this.week = week; //星期, 1个中文//农历this.lYear = lYear; //公元年4位数字this.lMonth = lMonth; //农历月数字this.lDay = lDay; //农历日数字this.isLeap = isLeap; //是否为农历闰月?//八字this.cYear = cYear; //年柱, 2个中文this.cMonth = cMonth; //月柱, 2个中文this.cDay = cDay; //日柱, 2个中文this.color = '';this.lunarFestival = ''; //农历节日this.solarFestival = ''; //公历节日this.solarTerms = ''; //节气}//===== 某年的第n个节气为几日(从0小寒起算)function sTerm(y,n) {var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) );return(offDate.getUTCDate());}//============================== 返回阴历控件 (y年,m+1月)/*功能说明: 返回整个月的日期资料控件使用方式: OBJ = new calendar(年,零起算月);OBJ.length 返回当月最大日OBJ.firstWeek 返回当月一日星期由 OBJ[日期].属性名称 即可取得各项值OBJ[日期].isToday 返回是否为今日 true 或 false其他 OBJ[日期] 属性参见 calElement() 中的注解*/function calendar(y,m) {var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2, tmp3;var cY, cM, cD; //年柱,月柱,日柱var lDPOS = new Array(3);var n = 0;var firstLM = 0;sDObj = new Date(y,m,1,0,0,0,0); //当月一日日期this.length = solarDays(y,m); //公历当月天数this.firstWeek = sDObj.getDay(); //公历当月1日星期几////////年柱 1900年立春后为庚子年(60进制36)if(m<2) cY=cyclical(y-1900+36-1);else cY=cyclical(y-1900+36);var term2=sTerm(y,2); //立春日期////////月柱 1900年1月小寒以前为 丙子月(60进制12)var firstNode = sTerm(y,m*2) //返回当月「节」为几日开始cM = cyclical((y-1900)*12+m+12);//当月一日与 1900/1/1 相差天数//1900/1/1与 1970/1/1 相差25567日, 1900/1/1 日柱为甲戌日(60进制10)var dayCyclical = Date.UTC(y,m,1,0,0,0,0)/86400000+25567+10;for(var i=0;i<this.length;i++) {if(lD>lX) {sDObj = new Date(y,m,i+1); //当月一日日期lDObj = new Lunar(sDObj); //农历lY = lDObj.year; //农历年lM = lDObj.month; //农历月lD = lDObj.day; //农历日lL = lDObj.isLeap; //农历是否闰月lX = lL? leapDays(lY): monthDays(lY,lM); //农历当月最后一天if(n==0) firstLM = lM;lDPOS[n++] = i-lD+1;}//依节气调整二月分的年柱, 以立春为界if(m==1 && (i+1)==term2) cY=cyclical(y-1900+36);//依节气月柱, 以「节」为界if((i+1)==firstNode) cM = cyclical((y-1900)*12+m+13);//日柱cD = cyclical(dayCyclical+i);//sYear,sMonth,sDay,week,//lYear,lMonth,lDay,isLeap,//cYear,cMonth,cDaythis[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7],lY, lM, lD++, lL,cY ,cM, cD );}//节气tmp1=sTerm(y,m*2 )-1;tmp2=sTerm(y,m*2+1)-1;this[tmp1].solarTerms = solarTerm[m*2];this[tmp2].solarTerms = solarTerm[m*2+1];if(m==3) this[tmp1].color = 'red'; //清明颜色//公历节日for(i in sFtv)if(sFtv[i].match(/^(\\d{2})(\\d{2})([\\s\\*])(.+)$/))if(Number(RegExp.$1)==(m+1)) {this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' ';if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'red';}//月周节日for(i in wFtv)if(wFtv[i].match(/^(\\d{2})(\\d)(\\d)([\\s\\*])(.+)$/))if(Number(RegExp.$1)==(m+1)) {tmp1=Number(RegExp.$2);tmp2=Number(RegExp.$3);if(tmp1<5)this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' ';else {tmp1 -= 5;tmp3 = (this.firstWeek+this.length-1)%7; //当月最后一天星期?this[this.length - tmp3 - 7*tmp1 + tmp2 - (tmp2>tmp3?7:0) - 1 ].solarFestival += RegExp.$5 + ' ';}}//农历节日for(i in lFtv)if(lFtv[i].match(/^(\\d{2})(.{2})([\\s\\*])(.+)$/)) {tmp1=Number(RegExp.$1)-firstLM;if(tmp1==-11) tmp1=1;if(tmp1 >=0 && tmp1<n) {tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1;if( tmp2 >= 0 && tmp2<this.length && this[tmp2].isLeap!=true) {this[tmp2].lunarFestival += RegExp.$4 + ' ';if(RegExp.$3=='*') this[tmp2].color = 'red';}}}//复活节只出现在3或4月if(m==2 || m==3) {var estDay = new easter(y);if(m == estDay.m)this[estDay.d-1].solarFestival = this[estDay.d-1].solarFestival+' 复活节 Easter Sunday';}if(m==2) this[20].solarFestival = this[20].solarFestival+unescape('%20%u6D35%u8CE2%u751F%u65E5');//黑色星期五if((this.firstWeek+12)%7==5)this[12].solarFestival += '黑色星期五';if(m==8) this[13].solarFestival = this[13].solarFestival+unescape('%u795D%u8D3A%u6885%u7AF9%u677E%u751F%u65E5%u5FEB%u4E50%u003A%u0029');//今日if(y==tY && m==tM) this[tD-1].isToday = true;}//======================================= 返回该年的复活节(春分后第一次满月周后的第一主日)function easter(y) {var term2=sTerm(y,5); //取得春分日期var dayTerm2 = new Date(Date.UTC(y,2,term2,0,0,0,0)); //取得春分的公历日期控件(春分一定出现在3月)var lDayTerm2 = new Lunar(dayTerm2); //取得取得春分农历if(lDayTerm2.day<15) //取得下个月圆的相差天数var lMlen= 15-lDayTerm2.day;elsevar lMlen= (lDayTerm2.isLeap? leapDays(y): monthDays(y,lDayTerm2.month)) - lDayTerm2.day + 15;//一天等于 1000*60*60*24 = 86400000 毫秒var l15 = new Date(dayTerm2.getTime() + 86400000*lMlen ); //求出第一次月圆为公历几日var dayEaster = new Date(l15.getTime() + 86400000*( 7-l15.getUTCDay() ) ); //求出下个周日this.m = dayEaster.getUTCMonth();this.d = dayEaster.getUTCDate();}//====================== 中文日期function cDay(d){var s;switch (d) {case 10:s = '初十'; break;case 20:s = '二十'; break;break;case 30:s = '三十'; break;break;default :s = nStr2[Math.floor(d/10)];s += nStr1[d%10];}return(s);}///////////////////////////////////////////////////////////////////////////////var cld;function drawCld(SY,SM) {var i,sD,s,size;cld = new calendar(SY,SM);if(SY>1874 && SY<1909) yDisplay = '光绪' + (((SY-1874)==1)?'元':SY-1874);if(SY>1908 && SY<1912) yDisplay = '宣统' + (((SY-1908)==1)?'元':SY-1908);if(SY>1911 && SY<1950) yDisplay = '民国' + (((SY-1911)==1)?'元':SY-1911);if(SY>1948) yDisplay = '建国' + (((SY-1949)==1)?'元':SY-1949);GZ.innerHTML = yDisplay +'年 农历 ' + cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'年】';YMBG.innerHTML = "&nbsp;" + SY + "&nbsp;" + monthName[SM];for(i=0;i<42;i++) {sObj=eval('SD'+ i);lObj=eval('LD'+ i);sObj.className = '';sD = i - cld.firstWeek;if(sD>-1 && sD<cld.length) { //日期内sObj.innerHTML = sD+1;if(cld[sD].isToday) sObj.className = 'todyaColor'; //今日颜色sObj.style.color = cld[sD].color; //法定假日颜色if(cld[sD].lDay==1) //显示农历月lObj.innerHTML = '**'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'**';else //显示农历日lObj.innerHTML = cDay(cld[sD].lDay);s=cld[sD].lunarFestival;if(s.length>0) { //农历节日if(s.length>6) s = s.substr(0, 4)+'...';s = s.fontcolor('red');}else { //二十四节气s=cld[sD].solarTerms;if(s.length>0) s = s.fontcolor('limegreen');else{//公历节日s=cld[sD].solarFestival;if(s.length>0) {size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?8:4;if(s.length>size+2) s = s.substr(0, size)+'...';s=(s=='黑色星期五')?s.fontcolor('black'):s.fontcolor('blue');}}}if(cld[sD].solarTerms=='清明') s = '清明节'.fontcolor('red');if(cld[sD].solarTerms=='芒种') s = '芒种'.fontcolor('red');if(cld[sD].solarTerms=='夏至') s = '夏至'.fontcolor('red');if(cld[sD].solarTerms=='冬至') s = '冬至'.fontcolor('red');if(s.length>0) lObj.innerHTML = s;}else { //非日期sObj.innerHTML = '';lObj.innerHTML = '';}}}function changeCld() {var y,m;y=CLD.SY.selectedIndex+1900;m=CLD.SM.selectedIndex;drawCld(y,m);}function pushBtm(K) {switch (K){case 'YU' :if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--;break;case 'YD' :if(CLD.SY.selectedIndex<200) CLD.SY.selectedIndex++;break;case 'MU' :if(CLD.SM.selectedIndex>0) {CLD.SM.selectedIndex--;}else {CLD.SM.selectedIndex=11;if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--;}break;case 'MD' :if(CLD.SM.selectedIndex<11) {CLD.SM.selectedIndex++;}else {CLD.SM.selectedIndex=0;if(CLD.SY.selectedIndex<200) CLD.SY.selectedIndex++;}break;default :CLD.SY.selectedIndex=tY-1900;CLD.SM.selectedIndex=tM;}changeCld();}var Today = new Date();var tY = Today.getFullYear();var tM = Today.getMonth();var tD = Today.getDate();//////////////////////////////////////////////////////////////////////////////var width = "130";var offsetx = 2;var offsety = 8;var x = 0;var y = 0;var snow = 0;var sw = 0;var cnt = 0;var dStyle;document.onmousemove = mEvn;//显示详细日期资料function mOvr(v) {var s,festival;var sObj=eval('SD'+ v);var d=sObj.innerHTML-1;//sYear,sMonth,sDay,week,//lYear,lMonth,lDay,isLeap,//cYear,cMonth,cDayif(sObj.innerHTML!='') {sObj.style.cursor = 's-resize';if(cld[d].solarTerms == '' && cld[d].solarFestival == '' && cld[d].lunarFestival == '')festival = '';elsefestival = '<table WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="#CCFFCC"><tr><td>'+'<font COLOR="#000000" STYLE="font-size:9pt;">'+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+'</font></td>'+'</tr></table>';s= '<table WIDTH="130" BORDER=0 CELLPADDING="2" CELLSPACING=0 BGCOLOR="#000066" style="filter:Alpha(opacity=80)"><tr><td>' +'<table WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><tr><td ALIGN="right"><font COLOR="#ffffff" STYLE="font-size:9pt;">'+cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日星期'+cld[d].week+''+'<font color="violet">农历'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日</font>'+'<font color="yellow">'+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日</font>'+'</font></td></tr></table>'+ festival +'</td></tr></table>';document.all["detail"].innerHTML = s;if (snow == 0) {dStyle.left = x+offsetx-(width/2);dStyle.top = y+offsety;dStyle.visibility = "visible";snow = 1;}}}//清除详细日期资料function mOut() {if ( cnt >= 1 ) { sw = 0; }if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";}else cnt++;}//取得位置function mEvn() {x=event.x;y=event.y;if (document.body.scrollLeft){x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;}if (snow){dStyle.left = x+offsetx-(width/2);dStyle.top = y+offsety;}}/*****************************************************************************世界时间计算*****************************************************************************/var OneHour = 60*60*1000;var OneDay = OneHour*24;var TimezoneOffset = Today.getTimezoneOffset()*60*1000;function showUTC(objD) {var dn,s;var hh = objD.getUTCHours();var mm = objD.getUTCMinutes();var ss = objD.getUTCSeconds();s = objD.getUTCFullYear() + "年" + (objD.getUTCMonth() + 1) + "月" + objD.getUTCDate() +"日 ("+ nStr1[objD.getUTCDay()] +")";if(hh>12) { hh = hh-12; dn = '下午'; }else dn = '上午';if(hh<10) hh = '0' + hh;if(mm<10) mm = '0' + mm;if(ss<10) ss = '0' + ss;s += " " + dn + ' ' + hh + ":" + mm + ":" + ss;return(s);}function showLocale(objD) {var dn,s;var hh = objD.getHours();var mm = objD.getMinutes();var ss = objD.getSeconds();s = objD.getFullYear() + "年" + (objD.getMonth() + 1) + "月" + objD.getDate() +"日 ("+ nStr1[objD.getDay()] +")";if(hh>12) { hh = hh-12; dn = '下午'; }else dn = '上午';if(hh<10) hh = '0' + hh;if(mm<10) mm = '0' + mm;if(ss<10) ss = '0' + ss;s += " " + dn + ' ' + hh + ":" + mm + ":" + ss;return(s);}//传入时差字串, 返回偏移之正负毫秒function parseOffset(s) {var sign,hh,mm,v;sign = s.substr(0,1)=='-'?-1:1;hh = Math.floor(s.substr(1,2));mm = Math.floor(s.substr(3,2));v = sign*(hh*60+mm)*60*1000;return(v);}//返回UTC日期控件 (年,月-1,第几个星期几,几点)function getWeekDay(y,m,nd,w,h){var d,d2,w1;if(nd>0){d = new Date(Date.UTC(y, m, 1));w1 = d.getUTCDay();d2 = new Date( d.getTime() + ((w<w1? w+7-w1 : w-w1 )+(nd-1)*7 )*OneDay + h*OneHour);}else {nd = Math.abs(nd);d = new Date( Date.UTC(y, m+1, 1) - OneDay );w1 = d.getUTCDay();d2 = new Date( d.getTime() + ( (w>w1? w-7-w1 : w-w1 )-(nd-1)*7 )*OneDay + h*OneHour);}return(d2);}//传入某时间值, 日光节约字串 返回 true 或 falsefunction isDaylightSaving(d,strDS) {if(strDS == '') return(false);var m1,n1,w1,t1;var m2,n2,w2,t2;with (Math){m1 = floor(strDS.substr(0,2))-1;w1 = floor(strDS.substr(3,1));t1 = floor(strDS.substr(4,1));m2 = floor(strDS.substr(6,2))-1;w2 = floor(strDS.substr(9,1));t2 = floor(strDS.substr(10,1));}switch(strDS.substr(2,1)){case 'F': n1=1; break;case 'L': n1=-1; break;default : n1=0; break;}switch(strDS.substr(8,1)){case 'F': n2=1; break;case 'L': n2=-1; break;default : n2=0; break;}var d1, d2, re;if(n1==0)d1 = new Date(Date.UTC(d.getUTCFullYear(), m1, Math.floor(strDS.substr(2,2)),t1));elsed1 = getWeekDay(d.getUTCFullYear(),m1,n1,w1,t1);if(n2==0)d2 = new Date(Date.UTC(d.getUTCFullYear(), m2, Math.floor(strDS.substr(8,2)),t2));elsed2 = getWeekDay(d.getUTCFullYear(),m2,n2,w2,t2);if(d2>d1)re = (d>d1 && d<d2)? true: false;elsere = (d>d1 || d<d2)? true: false;return(re);}var isDS = false;//计算全球时间function getGlobeTime() {var d,s;d = new Date();d.setTime(d.getTime()+parseOffset(objTimeZone[0]));isDS=isDaylightSaving(d,objTimeZone[1]);if(isDS) d.setTime(d.getTime()+OneHour);return(showUTC(d));}var objTimeZone;var objContinentMenu;var objCountryMenu;function tick() {var today;today = new Date();LocalTime.innerHTML = showLocale(today);GlobeTime.innerHTML = getGlobeTime();window.setTimeout("tick()", 1000);}//指定自定索引时区function setTZ(a,c){objContinentMenu.options[a].selected=true;chContinent();objCountryMenu.options[c].selected=true;chCountry();}//变更区域function chContinent() {var key,i;continent = objContinentMenu.options[objContinentMenu.selectedIndex].text;for (var i = objCountryMenu.options.length-1; i >= 0; i--)objCountryMenu[0]=null;for (key in timeData[continent])objCountryMenu.options[objCountryMenu.options.length]=new Option(key);objCountryMenu.options[0].selected=true;chCountry();}//变更国家function chCountry() {var txtContinent = objContinentMenu.options[objContinentMenu.selectedIndex].text;var txtCountry = objCountryMenu.options[objCountryMenu.selectedIndex].text;objTimeZone = timeData[txtContinent][txtCountry];getGlobeTime();//地图位移City.innerHTML = (isDS==true?"<span STYLE='font-size:12pt;font-family:Wingdings; color:Red;'>R</span> ":'') + objTimeZone[2]; //首都var pos = Math.floor(objTimeZone[0].substr(0,3));if(pos<0) pos+=24;pos*=-10;world.style.left = pos;}function setCookie(name,value) {var today = new Date();var expires = new Date();expires.setTime(today.getTime() + 1000*60*60*24*365);document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString();}function getCookie(Name) {var search = Name + "=";if(document.cookie.length > 0) {offset = document.cookie.indexOf(search);if(offset != -1) {offset += search.length;end = document.cookie.indexOf(";", offset);if(end == -1) end = document.cookie.length;return unescape(document.cookie.substring(offset, end));}else return('');}else return('');}///////////////////////////////////////////////////////////////////////////function initialize() {var key;//时间map.filters.Light.Clear();map.filters.Light.addAmbient(255,255,255,60);map.filters.Light.addCone(120, 60, 80, 120, 60, 255,255,255,120,60);objContinentMenu=document.WorldClock.continentMenu;objCountryMenu=document.WorldClock.countryMenu;for (key in timeData)objContinentMenu[objContinentMenu.length]=new Option(key);var TZ1 = getCookie('TZ1');var TZ2 = getCookie('TZ2');if(TZ1=='') {TZ1=0; TZ2=3;}setTZ(TZ1,TZ2);tick();//阴历dStyle = detail.style;CLD.SY.selectedIndex=tY-1900;CLD.SM.selectedIndex=tM;drawCld(tY,tM);}function terminate() {setCookie("TZ1",objContinentMenu.selectedIndex);setCookie("TZ2",objCountryMenu.selectedIndex);}//--></script><style>.todyaColor {BACKGROUND-COLOR: aqua}</style><script language=JavaScript><!--if(navigator.appName == "Netscape" || parseInt(navigator.appVersion) < 4)document.write("# 你的浏览器无法执行此程序。此程序需在 IE4 以后的版本才能执行!!")//--></script><div id=detailstyle="Z-INDEX: 3; FILTER: shadow(color=#333333,direction=135); WIDTH: 140px; POSITION: absolute; HEIGHT: 120px"></div><center><table border=0><tbody><tr><!------------------------------ 世界时间 -----------------------------------><form name=WorldClock><td vAlign=top align=middle width=240><font style="FONT-SIZE: 9pt"size=2>本地时间</font><span id=LocalTimestyle="FONT-SIZE: 11pt; COLOR: #000080; FONT-FAMILY: Arial">0000年0月0日( )午00:00:00</span><span id=Citystyle="FONT-SIZE: 9pt; WIDTH: 150px; FONT-FAMILY: '新宋体'">中国</span><span id=GlobeTimestyle="FONT-SIZE: 11pt; COLOR: #000080; FONT-FAMILY: Arial">0000年0月0日( )午00:00:00</span><table style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"><tbody><tr><td align=middle>&Uacute;<div id=mapstyle="FILTER: Light; OVERFLOW: hidden; WIDTH: 240px; HEIGHT: 120px; BACKGROUND-COLOR: mediumblue;"><fontid=worldstyle="FONT-SIZE: 185px; COLOR: green; FONT-FAMILY: Webdings; POSITION: relative; LEFT:0px;TOP: -26px; ">û</font></div>&Ugrave;</td></tr></tbody></table><selectstyle="FONT: 9pt '宋体'; WIDTH: 240px; BACKGROUND-COLOR: #e0e0ff"onchange=chContinent() name=continentMenu></select><selectstyle="FONT: 9pt '宋体'; WIDTH: 240px; BACKGROUND-COLOR: #e0e0ff"onchange=chCountry() name=countryMenu></select><p></td></form><!------------------------------ 万年历 -----------------------------------><form name=CLD><td align=middle><div style="Z-INDEX: -1; POSITION: absolute; TOP: 120px; width: 461px; height: 226px"><font id=YMBGstyle="FONT-SIZE: 80pt; COLOR: #f0f0f0; FONT-FAMILY: 'Arial Black'">&nbsp;0000&nbsp;JUN</font> </div><table border=0><tbody><tr><td bgColor=#000080 colSpan=7><font style="FONT-SIZE: 9pt"color=#ffffff size=2>公元<select style="FONT-SIZE: 9pt"onchange=changeCld() name=SY><script language=JavaScript><!--for(i=1900;i<2101;i++) document.write('<option>'+i)//--></script></select>年<select style="FONT-SIZE: 9pt" onchange=changeCld()name=SM><script language=JavaScript><!--for(i=1;i<13;i++) document.write('<option>'+i)//--></script></select>月</font> <font id=GZ face=标楷体 color=#ffffffsize=4>&nbsp;</font></td></tr><tr align=middle bgColor=#e0e0e0><td width=54>日</td><td width=54>一</td><td width=54>二</td><td width=50>三</td><td width=54>四</td><td width=54>五</td><td width=54>六</td></tr><script language=JavaScript><!--var gNum, color1, color2;// 星期六颜色switch (conWeekend) {case 1:color1 = 'black';color2 = color1;break;case 2:color1 = 'green';color2 = color1;break;case 3:color1 = 'red';color2 = color1;break;default :color1 = 'green';color2 = 'red';}for(i=0;i<6;i++) {document.write('<tr align=center>')for(j=0;j<7;j++) {gNum = i*7+jdocument.write('<td id="GD' + gNum +'" onMouseOver="mOvr(' + gNum +')" onMouseOut="mOut()"><font id="SD' + gNum +'" size=5 face="Arial Black"')if(j == 0) document.write(' color=red')if(j == 6) {if(i%2==1) document.write(' color='+color2)else document.write(' color='+color1)}document.write(' TITLE=""> </font><font id="LD' + gNum + '" size=2 style="font-size:9pt"> </font></td>')}document.write('</tr>')}//--></script></tbody></table></td><td vAlign=top align=middle width=40>年<buttonstyle="FONT-SIZE: 9pt"onclick="pushBtm('YD')">**↑**</button><buttonstyle="FONT-SIZE: 9pt" onclick="pushBtm('YU')">**↓**</button>月<button style="FONT-SIZE: 9pt"onclick="pushBtm('MD')">**↑**</button><buttonstyle="FONT-SIZE: 9pt" onclick="pushBtm('MU')">**↓**</button><p><button style="FONT-SIZE: 9pt" onclick="pushBtm('')">本月</button><p></td></form></tr></tbody></table></center><script language=JavaScript> initialize();</script> 保存并上传该模板文件。注意文件要保存成 UTF-8 格式,否则会出现乱码。 新建一个页面,模板选择下拉菜单里的 calendar 即可。","categories":[],"tags":[{"name":"javascript","slug":"javascript","permalink":"http://littlepig.cn/tags/javascript/"}]},{"title":"试用几款屏幕分割软件 - Split Screen","slug":"split-screen","date":"2009-02-27T13:14:26.000Z","updated":"2016-10-31T12:00:01.000Z","comments":true,"path":"posts/2009/02/27/split-screen/","link":"","permalink":"http://littlepig.cn/posts/2009/02/27/split-screen/","excerpt":"","text":"大屏幕的优势显而易见,尤其是编写程序的时候,看着满屏幕一览无余的代码,排列整齐的工具栏,畅快之情油然而生,心情好了,程序写起来自然也带劲,看电影的时候更是如此,当你发现你需要摆动脑袋才能够看满屏幕的时候,那感觉一定是身临其境! 其实,如果不是只作为电影观赏和代码编写,那么大屏幕也就没有什么值得期待的地方了,现金大部分的老式显示器还工作在 1024X768的模式下,笔记本也不过是 1280X800,大部分的网站网页还是固定在这两个分辨率上,即便再大的屏幕,两侧也是填充空白而已,电脑的另外一个工作领域字处理等也是如此,你一屏幕即便能显示 n 页,编辑的时候也只是操作其中一页,所以我觉得在选择显示器的问题上同样需要根据自己的实际应用来抉择。 如果你有了一个大屏幕,而又对网页两侧的空白感觉不爽,抑或你喜欢多任务处理,一边聊天一边工作还一边看片,并且极度反感将窗口切换来切换去,那么,你就需要一款像样的屏幕分割软件了,不过,我推荐的这几款,虽说各有长处,却也各有缺点。 1) MaxTo - http://maxto.net/ 这是我第一个接触的屏幕分割软件,就功能来说,简明扼要,实在是太适合我的需要了,它的配置界面可以让你随意分割屏幕区域,有点类似于 VC 里的SplitWnd ,你可以任意调整分区个数和大小,配置完毕之后,你只需要将窗口挪动到某个区域,点击最大化,即可将窗口最大化到该区域显示。如果你需要真实的全屏,那么只需要按住 Shift 再最大化即可。 MaxTo 的优势就在于它基本上不改变用户的操作方式,利用全局钩子接管了最大化操作,一切都很顺手,而且采用拖拽方式来改变区域大小也符合操作习惯。但是,我发现一个缺点就是它貌似和输入法冲突,无法在网页的 textfield 或者 textarea 里利用 Ctrl+Space 来切换输入法,这可是个要命的问题,要知道,Ctrl+Space 可是我们使用频率非常高的组合键,为什么说这个是貌似的 BUG 呢,因为我发现 TheWorld、Maxthon、IE7、搜狗输入法、QQ输入法、Ctrl+Space、Alt+Shift 这些进行不同组合的时候,都会出现各种可能,有的能用,有的不能,例如在 TheWold 里,QQ输入法就工作的很好,用 Ctrl+Space 可以切换,而搜狗就不行,IE7 里甚至连地址栏都无法输入中文,刚才还发现在 谷歌金山词霸里,无论哪个输入法都是无法切换,给作者发 Email 说明问题,作者也不明白到底问题出在哪里,而且他使用英文,也不好测试,他答应在下个版本里尝试解决。 MaxTo 还有区域切换、方案切换、高亮某个区域等功能,详细使用方式可参看其主页:htp://maxto.net 2)Acer GridVista 这是在搜索引擎里出现的比较多的一个软件名字,几乎占据了搜索结果的 90% ,也是比较早的一款屏幕分割软件,貌似现在也不更新了。他不提供任意分割功能,但提供了常用的几种布局方案,当然,这些方案足够使用了。该程序会在程序的标题栏上面添加几个按钮,用这些按钮的功能你可以将窗口送到指定的区域,而当你通过拖动标题栏移动窗口时,它会控制当前窗口所在区域高亮显示,放下窗口则该窗口自动填充该区域。应该说,这两种操作方式也都可以接受,虽然在标题栏上增加几个按钮比较别扭,但还不算太复杂。 我估计也正是由于 Acer GridVista 出现的较早,所以对于最近比较流行的无标题栏的窗口或者自定义标题栏的窗口,比如 TheWorld 的标题栏,Maxthon2的等都无法通过拖动来放置,这不得不说是个重大的遗憾,直接导致了我放弃该软件。 与 GridVista 类似操作方式的还有绿色软件 GirdMove ,详细资料可以参考 http://www.appinn.com/gridmove/ 3)WinSplit Revolution - http://winsplit-revolution.com/ WinSplit 比较有个性,它将屏幕均分为九格,通过快捷键或者它的设置对话框,用户可以将当前活动窗口放入某个指定的格子,当然,这些格子之间也可以组合,比较怪异的操作方式比较怪异的设计哈,正因为如此,所以我才放弃了它,因为它更让我感觉我为了某种功能又多增加了一个无谓的窗口或者软件而且把大部分时间都浪费在了它上面,这种软件应该就是默默工作于后台吃草挤奶无怨无悔但劳苦功高的角色。顺便提一下,它的简体中文翻译竟然是用的繁体,谁有时间给去简化一下吧,我不用,也没仔细研究功能,所以就不掺和了。 当然,还有很多种屏幕分割软件,笔者也没有去测试,因为我发现改用了 QQ 输入法后,在 TheWorld 里貌似 Ctrl+Space 可以用了,所以暂时就将就着用我喜欢的 MaxTo 吧。","categories":[],"tags":[{"name":"GirdVista","slug":"GirdVista","permalink":"http://littlepig.cn/tags/GirdVista/"},{"name":"GridMove","slug":"GridMove","permalink":"http://littlepig.cn/tags/GridMove/"},{"name":"MaxTo","slug":"MaxTo","permalink":"http://littlepig.cn/tags/MaxTo/"},{"name":"WinSplit","slug":"WinSplit","permalink":"http://littlepig.cn/tags/WinSplit/"}]},{"title":"SurpassHosting打摆子?还是出口抽风?","slug":"surpasshosting-err","date":"2009-02-27T08:59:23.000Z","updated":"2016-10-31T12:02:04.000Z","comments":true,"path":"posts/2009/02/27/surpasshosting-err/","link":"","permalink":"http://littlepig.cn/posts/2009/02/27/surpasshosting-err/","excerpt":"","text":"昨天晚上两点发现 LittlePig.CN Ftp上不去了,Http也慢的要死,由于前两天也发生过这样的事情,不过很快就恢复了,也就没有在意,太晚了,睡觉先。 今早上八点起床,顺便就再登录了一下,没想到仍然没有解决,心里就有点七上八下,从搜索引擎里也听说过 SurpassHosting 不稳定时快时慢的特性,不过貌似都是转来转去转的一个人的帖子,中文用户非常多,如果只有个别人发表看法,想必网络质量也没那么差,但这次真是遇到了,却也是郁闷的很。 现象类似于典型的间歇性抽风,快的时候简直就跟国内似的,页面刷的一下就出来,慢的时候,等吧,估计几分钟也够呛,不仅 Http 如此,Ftp 也是一样,典型的,SurpassHosting 的 HelpDesk 甚至也刷不出来,想发个ticket提示一下都不行,只有主页和 Server States 页面还算可以访问,如此分析,这不应该是我所属的服务器的问题,因为 Surpasshosting 还不至于把 HelpDesk 的服务也弄得这么糟糕,肯定是线路问题,只是不知道是国内出口搞得还是对方搞得而已。 整个现象持续到了中午,临近下午四点,貌似正常了,如果这种现象持续出现,那 SurpassHosting 的可选性可就大打折扣了,希望不会总是如此。","categories":[],"tags":[{"name":"SurpassHosting","slug":"SurpassHosting","permalink":"http://littlepig.cn/tags/SurpassHosting/"}]},{"title":"近期站点建设小记","slug":"site-construction-log","date":"2009-02-26T15:53:36.000Z","updated":"2016-10-31T11:59:10.000Z","comments":true,"path":"posts/2009/02/26/site-construction-log/","link":"","permalink":"http://littlepig.cn/posts/2009/02/26/site-construction-log/","excerpt":"利用几天的空余时间,总算把站点建设的算有点眉目了,今日得闲,记个流水账。","text":"利用几天的空余时间,总算把站点建设的算有点眉目了,今日得闲,记个流水账。 话说某日在水木闲逛,见有人在推荐网站空间,号称 1$ 500G,当时不以为然,因为自己既没有美元,更没有兴趣把钱投在这上面,建设网站只是个人兴趣而已,但要真成了一种消费,就目前我的思想水平,还真是不好接受,前年头脑一热跟风注册了俩域名,去年一年 65*2 的费用就有点感觉实在舍不得掏了,因为没啥见得到的收获,买烤红薯还能解解饿呢,这钱出去到底得到啥了呢?啥都没见到,实在不习惯,自然也就到不了想当然应该掏钱或者这钱花的值得的思想境界,其实,这和现金的许多非实物消费或者说叫服务类消费颇有相似,花钱买别人的劳动,买感觉,买舒坦,买面子…… 可惜,咱也是劳动人民,还习惯不了被服务,上个餐馆人家服务员不给餐具都想自己去拿的主儿,估计这辈子也不会去买别人的服务了…… 话又扯远了,回到正题,虽说没对那个1$的美元有啥感觉,可也当时闪过一些想法,1$,换算成人民币 8 块钱,8块钱能干啥呢?烟咱不抽,一包便宜的咋说也得5块,酒咱不喝,一听好啤貌似也差不多这个价,打个车?最低你得给人司机8块,买本书?你现在见过十几块的书么?貌似上回买菜没吃几顿也20来块呢…… 如此一算,1$ 即便扔给这空间商也没啥损失哈,不过太便宜了,是个骗局吧?估计是,拉倒吧,我不凑这个热闹! 看见没,这就是典型的萎缩性思想!想占便宜又怀疑,没闯劲,这么多年没长进,肯定就是这种思想给害的!蹲学校的,估计老多这思想了。 老同学 Robay 也有自己的部落格,不过貌似老长时间登录不上了,前些日子去看,发现他在做广告出租自己的空间,他买的独立IP的美国主机,号称可以避免被盾,空间大小可观,费用自然也不会少,我百度了一下,貌似便宜的也好几十个$ 呢,看来他也是觉得不合算才出租贴补费用,白白仍这几十个刀换自己的几篇“牢骚”在网上“显摆”一年,要是我肯定也不干,估计比他出租费用要贵不少。 看着看着我就想起了我的可怜的BLOG,风风雨雨好多年,现在也不知道仍哪里去了,赶紧翻手头自己能登录的机器,竟然在4台上面发现了从2004年至今的n个版本的BLOG,不仅鄙视自己的虎头蛇尾,这么多年了,每个BLOG坚持的时间从来不超过3月,中间还要休息上半年到一年,可见懒惰到何种程度。 买国内空间实在是不爽,1M1块,传个mp3都战战兢兢,在教育网自己的服务器上搞的话,网通电信访问起来又太慢,总不能还得跑到学校去上网吧,不现实,于是就在老同学服务器上开了个虚拟主机,这回空间大了,一口气传了近200M的Mp3,真是痛快,看着自己手头的 100 来 G 的音乐,要是都扔上去,一定爽歪歪…… 不过等看到了网站的服务条款,一下子被泼了冷水 - 严禁上传有版权的文章、歌曲、视频等 - 国内习惯了,MP3你爱在哪个站上仍都没事,国外可不一样,被封机率要大的多,连备份的机会都不一定有,要是真发生这事,可是极度的不爽,想到这里,我就想起了那个1$。 情人节到了,1$ 的广告在水木上又掀起了一个高潮,因为1$并不是什么时候都有的,只在情人节期间促销,过期就没办法注册了,忍不住诱惑,加上已经有人发帖反映还不错,于是就痒痒的注册了一个,没有$,只有¥,没Visa,没Paybal ,无法付款,在老同学的帮助下总算在情人节过之前占得了这个小便宜,登录一看,500G,不限带宽、10个虚拟主机,无限个email账号,足够自己用了。 装好 WordPress 之后,利用几天的空闲时间熟悉了一下配置,找了几个自己认为可以的模板,改来改去,最后保留了两个,这期间也对 WordPress 的结构有了个基本的了解,插件功能甚为强大,但同时也有缺点,比如插件的兼容性就是一个很多人都碰到的问题,用得了这个用不了那个,本博肯定要用 audio player 来播放mp3,但显示幻灯片效果的 content gallery 就会工作不正常,nextgen 貌似也受影响,总之是走了很多弯路,放弃了很多东西,必备的几个插件才算固定下来。 最为复杂的一项工作就是导入原来的数据,虽然并不是什么值得留恋的东西,不过写博客的一个重要目的就在于,你可以通过部落格的帖子看到自己走过的路,什么时间、什么时刻在关心什么,从这个意义上讲,即便一篇博客只写了 “今天忙的一团糟” 这几个字,也是有意义的。不过,从不同类型的部落格导入数据貌似不是一件轻松地事情,写程序导吧,自己又想重新规划一下,一篇一篇的来吧,比较浪费时间,考验耐心,不过,前几天还没有开学,也没有什么事情,于是说服自己挨个拷贝粘贴了一遍,幸亏帖子也不是很多,很多技术类转帖类的就直接扔掉了,与时俱进吧。 自己比较喜欢国乐,所以上传了很多乐曲,不过上传速度比较有限,再说处于一种担心之中,所以也慢慢降低了速度,一点一点来吧,如果第一年的服务比较好的话,第二年的50$我就考虑是不是真的就pay给他们一把,这样算下来,25$/年 也很合算,当然,前提是服务稳定,别封杀我,而且别被某墙挡住。 利用部落格赚钱来养站是目前很多买空间的人的做法,当然,实际能不能赚到咱也不清楚,其实很早就申请了Google Adsense,挂了一段时间发现只收入了 0.5 $ ,信心大受打击,于是就撤了,况且把自己的站点搞得乱七八糟看着跟杂货铺似的也实在不是我的乐趣所在,这次于是想好,先搞流量,搞点击率,搞那个叫做什么alex排名的,都搞上去再说广告和养站,谁让咱有这么个爱上网的爱好呢。说到这里,看帖子的各位烦请没事就给推广一下哈,我自己写得东西看不看的,我转的东西没事多点点,尤其是那些付费的。","categories":[],"tags":[]},{"title":"给 WordPress 添加固定链接","slug":"add-urlrewrite-for-wordpress","date":"2009-02-26T14:19:04.000Z","updated":"2021-02-19T04:44:58.123Z","comments":true,"path":"posts/2009/02/26/add-urlrewrite-for-wordpress/","link":"","permalink":"http://littlepig.cn/posts/2009/02/26/add-urlrewrite-for-wordpress/","excerpt":"","text":"这里我只能以我的认为来描述整个过程,虽然对这些名词也是略有听说、不知其味。 所谓的固定链接其实就是修改 WordPress 目录、页面或者帖子的超级链接也即 URL 的形式,这里的固定既可以理解为动词也可以理解为形容词,WP 默认的链接形势类似于动态语言所产生的那种链接形式,比如 http://littlepig.cn/?postid=5 ,对应的页面是id为5的页面,这种链接的缺点就是链接本身不带有任何信息,一眼看去根本就不知道里面内容是什么,据说搜索引擎也对这种链接爱理不理的,自然而然带来的浏览量、流量就少,所以我们得想点办法。 Apache 支持 URL Rewrite 功能, 就是将某种形式的链接转移到另外一个链接上,利用这个功能,我们可以将 Apache 接受到的 http://littlepig.cn/somecat/somepost.html 这种形式的链接转到 http://littlepig.cn/?postid=5 的页面上,只需要在站点的 .htaccess 里面添加规则即可,但是显然的,我们不可能为所有的页面都一一书写规则,因此我们可以使用泛匹配 (wide cast) 将某些固定形式的请求转移到一个单独的 php 页面上,由 php 的代码分析并确定链接该指向哪个真正的页面,然后再行加载。这个过程有点类似于域名的泛解析。很幸运的,WordPress 就完美的支持 URL Rewrite ,index.php 就可以看作是一个 URL 解析器。 有了上面的基础,实现链接的自定义就比较方便了 1、在后台的 设置 - 固定链接 选项里,你可以选择系统提供的几种固定样式的链接,但都不怎么人性化,当然我们也可以自己定义,自定义的字段(或者叫做标签)可以使用的有如下几种 1234567891011121314151617181920212223242526272829%year% 年,四位数,如:2004 %monthnum% 月,如: 05 %day% 日,如:28 %hour% 时,更精确的时间,如:15 %minute% 分,如:43 %second% 秒,如:33 %postname% 文章名,这是WordPress 固定链接比较常用的标签。如一篇文章的标题为“This Is A Great Post”,则使用这个标签的固定链接就是“this-is-a-great-post”。对于中文,WordPress 会进行编码而后输出编码结果。 %post_id% 文章的唯一标识,如:423 %category% 分类 %author% 文章作者名 在自定义固定链接的时候,域名是不用输入的,直接使用 /%category%/%postname%/ 这种形式即可,当然,你也可以在后边加上 .htm 或者 .html ,这样看起来更像是静态页面,但据说不加扩展名最后使用/结尾那种形式更受搜索引擎青睐,其中 %postnam% 有的帖子里叫做 日志缩略名 ,貌似在 WP 2.7 里已经取消了这个选项,我在新建日志的时候反正没有找到任何输入类似信息的地方,只是在快速编辑日志的时候会出现一个叫做别名的选项,应该就是所说的日志缩略名,帖子在正常修改的时候在标题的下面会显示有 修改固定链接 的选项。 WordPress 设置好了,接下来的工作就是配置 Apache 来实现 URL Rewrite ,据说大部分网络服务提供商都开启了 mod_rewrite ,站点管理员只需要在网站根目录的 .htaccess 文件里配置规则即可,显然,写规则也得懂得很多知识,我还是决定使用拿来主义,搜啊搜,找到了一段 1234567<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]</IfModule> 将上面代码放入你站点根目录的 .htaccess 里即可。 现在你的 WordPress 就应该可以工作了,但有些地方要注意,一是你需要修改你以前所有文章的 别名,尽量去掉中文,因为中文会编码成 %2d%e2 这种形式,显然,这样的链接没有任何意义,甚至还不如 /?id=5 那种呢,这个工作量比较大,而且,要求你还得懂点英文,咱总不能拿 look-what-look 这种链接来秀吧?固定链接这个操作最好在开博的时候就进行,以后省事多了;二是我发现 页面(page) 的标题如果有中文,不仅编码后的链接不美观,而且根本就不能访问,所以这些页面的 固定链接 是必须要改成英文的。 目前就发现这么多问题,我的貌似目前工作正常。","categories":[],"tags":[]},{"title":"心理 - 总是整夜整夜的做梦怎么办","slug":"dreamming-all-the-day","date":"2007-02-23T15:17:28.000Z","updated":"2016-10-31T11:31:44.000Z","comments":true,"path":"posts/2007/02/23/dreamming-all-the-day/","link":"","permalink":"http://littlepig.cn/posts/2007/02/23/dreamming-all-the-day/","excerpt":"很多人都有失眠的习惯 - 除了大脑迟钝的我无论什么情况下都倒头便睡 - ,并且即便睡着也认为经常做梦,但从心理较多来说,这些做梦的失眠人得到的因果关系往往是错误的。","text":"很多人都有失眠的习惯 - 除了大脑迟钝的我无论什么情况下都倒头便睡 - ,并且即便睡着也认为经常做梦,但从心理较多来说,这些做梦的失眠人得到的因果关系往往是错误的。 下面一篇实验文章说明了这一点。 作梦多发生在REM睡眠期间,正常睡眠者,只有在REM期醒来时才能记起所作的梦。在整个睡眠过程中,虽然几次REM期都在作梦,但醒来时记起的只是最后一次梦,如果醒来时是在NREM期,那么连最后一次梦也常忘掉。这就像我们乘坐特别列车,两个大站之间经过了许多小站,这些小站在头脑中的印象瞬间即逝,留不下什么痕迹。而失眠者,睡眠质量差,中间屡屡醒来,且醒来时多处于REM期——都在作梦,这些梦虽然记不完全,但早晨醒来的印象却是“整夜都在作梦”。这就像乘坐慢车旅行,给人的感觉是,没完没了的小站,似乎列车停站的时间多,行车的时间少。 经常听到有人说:“昨晚没休息好,做了一夜的梦”、“我晚晚梦多,简直没有睡着”。于是,白天工作学习精力不足。彷佛梦真的耽误了休息。有些医生也承认多梦是大脑不曾休息或休息不好的表现。其实这种看法是错误的。做梦并能回忆梦境并不是睡眠不深的标志,也不能说做了梦就夜间没有睡好。因为不管你有无梦的回忆和梦感,你每晚上都必定要做4~5回梦,说整夜做梦是夸张,说没有做梦也不现实,更谈不上梦多梦少。国内、外学者都对主诉失眠整夜做梦或梦多的慢性失眠患者,进行过生理实验,多道睡眠图记录证明“梦多”、“整夜做梦”的病人的睡眠周期和正常人没有什么差别,其伴有梦的快相睡眠所占的比例和实际时间也没有明显缩短或延长;心理测验发现,这类体验同性格有关。无论从睡眠普遍规律,还是实验观察的结果,都说明失眠与梦感无必然联系,因而多梦不是判断失眠和失眠程度的客观指针。 梦是快相睡眠期的必然生理现象,其表现形式有表象成份又带有感性性质的记忆活动和超常规的联想。而梦感则是醒后对梦中某些情节的回忆,或只留有曾做过梦的印象,却记不清楚梦的内容。主诉失眠伴多梦所说的梦实际是指梦感,与情绪因素和性格特点有关。 临床观察及实验结果都证明,长期失眠患者的主诉是不可靠的,有心理紊乱现象,往往对睡眠潜伏期估计过高,而对实际睡眠时间估计过低。专家们认为,失眠的体验与情绪、性格有关。 诉说“整夜做梦或梦多”的理由有如下五点: (一)睡眠知识及睡眠与梦感的关系所知甚少。许多人不了解睡眠的周期交替变化,不知道梦在睡眠中的地位,在生理上的作用,以及梦与梦感的区别,不知道梦与梦感没有副作用。许多人对梦有恐惧感,认为做梦影响了睡眠。 (二)与人的情绪状态有关。许多人对情绪障碍缺乏认识,不认为是病,过分注重情绪障碍伴发的失眠、多梦、疼痛等症状,不知道如何调节和改善自己的情绪,反而夸大了不太客观的体验。 (三)对自己的健康过分关心,过分关注梦感,导致梦感增强,又加重了对健康的担心,对失眠的恐惧,以致形成恶性循环。 (四)有些人再快相睡眠期醒来或紧接着快相睡眠期之后醒来,致使对梦境的回忆程度增高。 (五)个体功能状态差异。每个人对梦感不同,同一个人在不同的时期,功能状态有别,对梦感的程度也会不同。所以,有时感到梦多,有时感到梦少。失眠和梦感没有必然的联系。“整夜做梦”确实是自我感觉,绝不是有意的捏造。但感觉也可以出现错觉,因为不同的功能状态导致梦感不同,不能准确地反应客观事实。 顺便转一篇关于REM睡眠的 相关新闻/资料: 快相睡眠:又叫异相睡眠或快波睡眠,简写为REM。人们睡觉经过慢波睡眠时期以后,即转入到异相睡眠时相,这时从眼震颤图和脑电图上可以看出双眼球有每分钟50~60次的快速摆动,脑电波由慢波转为快波。这时人体的各种感觉功能比在正相睡眠时期更进一步减退,肌肉也更加松弛,肌腱反射亦随之消失,这些都说明睡眠程度更进一步变深。但是这个时期的血压却较慢波睡眠时期升高,呼吸也变得快一些而且不规则,体温和心率也较前阶段升高和加快。身体上有些部分的肌肉如面肌,口角肌及四肢的一些肌肉群可出现轻微的抽动,阴茎和阴蒂充血而可勃起。这种肌肉抽动的现象在婴儿更为明显,可以表现为吮吸、微笑、手足徐动或者短促发声等现象。科学家们还发现在这个时期,人的胃肠活动增加,大脑的血流量也明显增加,孕妇腹里的胎儿在这个时期胎动也明显增多。所以人们的一些疾病如胃溃疡穿孔、脑溢血、心肌梗塞和婴儿出生多在夜间,道理就在这里。因此这个时期的情况一方面是表示睡眠更深,肌肉更加松弛,而另一方面,一些内部现象却变得更加活跃。科学家们进一步还发现:这个阶段不仅是睡眠的重要阶段,而且对整个的生命都有特殊的意义,因为这个阶段,体内的各种代谢功能都明显增加以保证脑组织蛋白的合成和消耗物质的补充,使神经系统能正常发育,而且也为人们第二天的活动积蓄力量。科学家们也发现:人们睡觉进入到这个阶段,也正是人们作梦的时期。 快动眼睡眠是怎样发现的? 快动眼睡眠又叫快波睡眠、失同步睡眠或异相睡眠。根据睡眠过程中脑电波的变化和其它生理特点不同,可把睡眠分为两种不同的时相状态。快动眼睡眠就是睡眠过程中的一个时相。在这个时相中,脑电波呈现失同步快波的时相,故称快波睡眠或失同步睡眠。由于这个时相的生理特点与慢波睡眠时不同,往往被人叫做异相睡眠或快动眼睡眠(医学上缩写为REM)。快动眼睡眠是怎么发现的呢? 早在1939年,美国芝加哥大学生理教研室有位古莱托曼教授,一生致力于睡眠的研究,对人在睡眠时眼球的活动很感兴趣:“人在睡眠时眼球活动有什么规律呢?”他将此课题交给了手下一名研究生阿塞林斯基。阿塞林斯林思路极为活跃,他想:“与其仅仅观察眼球活动还不如顺便将脑电和肌电图也记录下来。” 世界上有些重大发现,其实有时是产生在无意之间。正是古莱托曼—阿塞林斯基的这次实验,竟对睡眠科学研究产生了极其重要的影响。实验结果发现,睡眠中眼球激烈活动(约每秒一次),这种活动每夜出现4~5次,平均每次持续20分钟左右,持续时间越到后来越长。每当眼球急速运动时,脑电波类似于睡眠第1阶段,即低幅快波。从肌电图上看到肌张力是整个睡眠期间最低的,几乎呈瘫软状态,但手指、脚趾却常出现不规律活动。 要想把受试者叫醒,其难易程度(唤醒阈)与睡眠第2阶段,即浅睡眠阶段相似。醒来后绝大多数人会说:“我正在作一个梦,梦见……”,然后绘声绘色地讲起来。 根据实验研究证明,快动眼睡眠和脑干内5-羟色胺、乙酰胆碱、去甲肾上腺素递质系统有关。快动眼睡眠的发现,给睡眠科学带来了一个大的飞跃,是睡眠科学研究中的一块极为重要的里程碑。 增加快波睡眠时间能延长寿命吗? 自本世纪70年代以来,日本山梨医科大学生理教研室的长崎明研究了睡眠与寿命的关系。 在长崎氏之前,已有人从山羊、绵羊的脑脊液和兔的脑中提取出促眠物质胞壁酰肽。也有人从兔的血液中提取出DSIP(诱发慢波睡眠肽)。长崎氏用电刺激小白鼠,使其在24小时内间断睡眠,从脑干中提取出一种叫“格里清”的激素样促眠物质。 从脑电图来看,睡眠周期中有慢波睡眠和快波睡眠两个阶段,两者交替出现。慢波睡眠阶段为浅睡和深睡期,快波睡眠阶段有做梦现象,长崎氏发现,注射格里清或胞壁酰肽的小鼠,其快波睡眠增加,而注射DSIP,则慢波睡眠增加。 长崎氏把3月龄C57BL/6纯系鼠60只等分为三组,在笼中饲养。甲组在当天20小时内每隔15秒钟遭受20伏交流电电击一次(午前和午后4~6点钟各休息两次),引起睡眠障碍。乙组为对照组,环境条件同甲组,但不给予电击。然后两组都放在相同的一般环境里饲养。另一组鼠在人工最佳环境(SPF环境)里饲养。结果表明,电击组的平均寿命为8个月,对照组为12个月,而SPF环境组的平均寿命为21个月,三组间平均寿命有显著差别。计算生后12个月时的存活率,电击组为25%,对照组为50%,SPF环境组为100%;生后24个月时的存活率,前两组为0(全部死光),而SPF环境组尚有35%的存活。 可见,在遗传因素相同的背景下,平均寿命因环境不同而相差颇大。这说明在影响平均寿命方面,环境因素要比遗传因素具有更大的优势。 在6月龄和12月龄时,对电击组、对照组和SPF环境组的睡眠时间进行了比较,发现电击组的慢波睡眠时间减少;快波睡眠时间,甲乙两组没有差别,但比SPF环境组减少了20%左右。 长崎氏指出,上述实验结果说明,寿命与快波睡眠有关,增加快波睡眠时间,可能延长寿命。但是把动物实验的结果外推及人类,仍要在人身上得到证实。C57BL/6系鼠是鼠中寿命较长的,其快波睡眠时间较长;而另一种Bu16/C系鼠的寿命短,其快波睡眠时间也短。快波睡眠时间的长短具有品系特异性。足见快波睡眠时间长短是由遗传决定的。快波睡眠时间长的品系和快波睡眠时间变短,提示有劣性遗传趋势。 长崎氏还发现,小鼠的快波睡眠时间在一定的时间内逐年增加。他认为,这是由于机体内有一个“求生战略”机理,以对抗衰老,于是快波睡眠时间延长了。因此,“增加快波睡眠就能抗衰延寿”的假说是能成立的,然而,人类固有的快波睡眠时间大体上是一定的,慢波睡眠在70岁时才开始减少。 看来,通过增加快波睡眠的时间达到抗衰延寿的目的,很有希望。","categories":[],"tags":[]},{"title":"大学教师的几种说法","slug":"the-translation-of-teacher-in-college","date":"2007-01-18T15:06:46.000Z","updated":"2016-10-31T07:23:14.000Z","comments":true,"path":"posts/2007/01/18/the-translation-of-teacher-in-college/","link":"","permalink":"http://littlepig.cn/posts/2007/01/18/the-translation-of-teacher-in-college/","excerpt":"发信人: joan0631 (12), 信区: EnglishWorld标 题: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Thu Jan 4 19:59:13 2007), 站内","text":"发信人: joan0631 (12), 信区: EnglishWorld标 题: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Thu Jan 4 19:59:13 2007), 站内 谢谢。※ 来源:·水木社区 [http://newsmth.net·[FROM](http://newsmth.net·[FROM): 166.111.121.*] [本篇全文] [本篇作者:Sanoka] [进入讨论区] [返回顶部]2发信人: Sanoka (候鸟), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 09:12:27 2007), 站内 lecturer会不会更偏指讲座教师? 我常用instructor或tutor. 【 在 joan0631 (12) 的大作中提到: 】谢谢。–爱,点到为止,即是最佳.※ 来源:·水木社区 newsmth.net·[FROM: 218.63.216.*][本篇全文] [本篇作者:Cyxoro] [进入讨论区] [返回顶部]3发信人: Cyxoro (楼上雅座|养伤ing), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 09:13:39 2007), 站内 lecturer在英国主要就是指讲师。【 在 Sanoka (候鸟) 的大作中提到: 】: 标 题: Re: 请教:大学教师是译成university lecturer吗?: 发信站: 水木社区 (Fri Jan 5 09:12:27 2007), 站内:: lecturer会不会更偏指讲座教师?:: 我常用instructor或tutor.:: 【 在 joan0631 (12) 的大作中提到: 】: : 谢谢。::: –: 爱,点到为止,即是最佳.::※ 来源:·水木社区 newsmth.net·[FROM: 218.63.216.]–Marlboro =Man Always Remember Love Because Of Romance Only.※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.][本篇全文] [本篇作者:TPCB] [进入讨论区] [返回顶部]4发信人: TPCB (各有前因莫羡人), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 09:40:00 2007), 站内 tutor倾向于指家庭教师这样私人授课的教师或者大学里对学生进行单独指导的教师 【 在 Sanoka (候鸟) 的大作中提到: 】: lecturer会不会更偏指讲座教师?我常用instructor或tutor.–人生到处知何似应似飞鸿踏雪泥泥上偶然留指爪鸿飞哪复计东西※ 来源:·水木社区 newsmth.net·[FROM: 140.251.13.*][本篇全文] [本篇作者:Sanoka] [进入讨论区] [返回顶部]5发信人: Sanoka (候鸟), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 09:43:09 2007), 站内 aha, it makes sense :) 【 在 TPCB (各有前因莫羡人) 的大作中提到: 】tutor倾向于指家庭教师这样私人授课的教师或者大学里对学生进行单独指导的教师–爱,点到为止,即是最佳.※ 修改:·Sanoka 于 Jan 5 09:49:18 修改本文·[FROM: 218.63.216.]※ 来源:·水木社区 newsmth.net·[FROM: 218.63.216.][本篇全文] [本篇作者:Baylor] [进入讨论区] [返回顶部]6发信人: Baylor (Triggerhappy), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 09:58:28 2007), 站内 应该是lecturer,只耍嘴皮子的哪种。instructor有时多指要给予instruction的那种,比如我做过滑冰的instructor。但是有的老师也喜欢称自己是instructor,背后的意思就在于不光是说,还给予指导。但一般都是把讲师称做lecturertutor一般是家庭教师,或是开小灶的辅导老师。 【 在 Sanoka (候鸟) 的大作中提到: 】: lecturer会不会更偏指讲座教师?我常用instructor或tutor.–※ 来源:·水木社区 newsmth.net·[FROM: 68.32.49.*] [本篇全文] [本篇作者:shanp] [进入讨论区] [返回顶部]7发信人: shanp (大脚), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 10:01:53 2007), 站内 其实统统可以叫college teacher 【 在 Baylor (Triggerhappy) 的大作中提到: 】: 应该是lecturer,只耍嘴皮子的哪种。: instructor有时多指要给予instruction的那种,比如我做过滑冰的: instructor。但是有的老师也喜欢称自己是instructor,背后的意思……………….–A man’s reach should exceed his grasp, or else what’s Heaven for? —Robert Browning ※ 来源:·水木社区 newsmth.net·[FROM: 210.82.33.*] [本篇全文] [本篇作者:azurite] [进入讨论区] [返回顶部]8发信人: azurite (蓝色构成), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 16:00:15 2007), 站内 搞得那么复杂teacher不就完事了 【 在 Sanoka (候鸟) 的大作中提到: 】: lecturer会不会更偏指讲座教师?我常用instructor或tutor.–如鸟斯革如翚斯飞※ 来源:·水木社区 [http://newsmth.net·[FROM](http://newsmth.net·[FROM): 71.198.171.*] [本篇全文] [本篇作者:parabola] [进入讨论区] [返回顶部]9发信人: parabola (抛物线), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 16:26:36 2007), 站内 不好,就是特acher 【 在 joan0631 (12) 的大作中提到: 】谢谢。–我们的任务是把人性中善良的部分用理论解释为邪恶把人性中邪恶的部分用理论解释为本能※ 来源:·水木社区 newsmth.net·[FROM: 202.118.20.*][本篇全文] [本篇作者:hophead] [进入讨论区] [返回顶部]10发信人: hophead (humulus lupulus - 啤酒花), 信区: EnglishWorld标 题: Re: 请教:大学教师是译成university lecturer吗?发信站: 水木社区 (Fri Jan 5 18:51:55 2007), 站内 college faculty, university faculty。应该是指群体 【 在 joan0631 (12) 的大作中提到: 】谢谢。–BBC stands for Boston Beer Company.Michael Jackson is a British beer writer. ※ 来源:·水木社区 [http://newsmth.net·[FROM](http://newsmth.net·[FROM): 219.238.114.*]","categories":[],"tags":[]},{"title":"教师为什么要写作","slug":"why-teacher-should-write","date":"2006-12-19T01:23:58.000Z","updated":"2016-10-17T08:17:03.000Z","comments":true,"path":"posts/2006/12/19/why-teacher-should-write/","link":"","permalink":"http://littlepig.cn/posts/2006/12/19/why-teacher-should-write/","excerpt":"","text":"造就教师的书卷气的有效途径,除了读书,大概就是写作了。写作是最能体现一个人的综合素质的。我一向认为,能够写好文章的人,也一定能上好课。因为一篇文章和一节课非常近似。文章无非是这样几个要素:第一是主题——你要表达什么,肯定什么,否定什么;歌颂什么,贬斥什么,这就是文章的主题。主题是一篇文章的灵魂,“文以载道”的那个“道”。任何一篇文章都不是无意义的语言的堆积,它是需要承载一定的思想与情怀的。第二是素材,为了表达一定的思想与情怀,总需要依托一定的材料——你的经历、你的观察,你的学识的积累和生活的积累。第三是写作的技巧。如何地剪材选材,如何地布局谋篇、起承转合,如何地铺垫、渲染,如何地蓄势,如何地细处摄神,如何地横云断岭、横桥锁溪等等。第四是语言。用什么样的语言风格来表达,怎样讲究点文趣,如何使语言具有质感和美感。 如果说主题(思想)是火种,那素材就是原料和燃料。火种从原料中提取,又通过燃料来使得星星之火而成为熊熊烈火,在暗夜里熠熠生辉。 而一节课也无非是学习的主题,学习的材料,教学的技艺和教学的语言。作为教师,你能否上好一节课,就取决于你是否能透彻地理解学习的主题,你是否会有丰富的、帮助学生理解学习主题所依托的材料,你如何规划教学进程、设计教学的活动,你的课堂语言是否凝练而又舒展、平实而又雅致。 具体地说,写作对于教师有以下几个方面的意义。 首先,能提升我们阅读的品质。如果你有写作的习惯,你就不会满足于泛泛浏览,对于一些作品你一定会研读,你会自觉地去揣摩人家是如何立意,如何布局谋篇,如何遣词造句的,你会努力从别人的佳作中去汲取营养。 第二,写作会使你更加用心地去品味生活,洞明世事,去捕捉工作中、生活中有意味的现象和信息,会自觉地去积累学识和生活。 第三,写作会帮助你梳理思绪,使你的头脑变得井井有条,使个体经验概念化。培根说:“写作使人精确”。写作是非常有效的认知加工的过程。 第四,写作会帮助你深化认识。如果你不就某个具体的问题写成文章,你的认识可能是一星半点或者是肤浅的,而写作会迫使你对问题作彻底的思考,从而深化和丰富认识。 第五,写作能使你提升口头语言表达的品质。口头语言由于可以借助手势、表情和交谈对象及时地反馈与沟通,不一定需要非常准确与完整,而书面语言,由于缺乏特定情境和及时反馈,就需要十分完整和精当。当你在写作中炼就了用完整和精当的语言来表达思想与感怀时,自然而然,口头语言的品质也就提高了。 第六,写作会提升你生活的品质,使你更具有成就感。杜甫有诗云:“文章千古事,得失寸心知”,贾岛的名句:“两句三年得,一吟双泪流”,这都说明写作是一件多么有生命意义的事情。每当看到自己的文章变成铅字,如果这篇的确是你付出了心血与真情的,那你一定会很有成就感,一定会有一种收获的快慰。作家埃·米·齐奥朗就曾深有感触地说:“假如没有写作本领,我不知道我会成为什么。写作便是释放自己的懊悔和积怨,倾听自己的秘密。作家是一个精神失常的生物,通过言语治疗自己。多亏了这些非本质性的疗法,有多少紊乱、多少残酷的进攻我没有被击败阿!”当写作将你拔出平时的麻木和迟钝状态,使你一下子感应到人生的繁复意味的时候,它也同时在悄悄地改变你和现实生活的联系。","categories":[],"tags":[]},{"title":"编码相关基础知识","slug":"encoding","date":"2006-12-05T07:23:01.000Z","updated":"2019-08-07T09:51:20.000Z","comments":true,"path":"posts/2006/12/05/encoding/","link":"","permalink":"http://littlepig.cn/posts/2006/12/05/encoding/","excerpt":"ANSI,AscII,GB2312,GBK,BIG5,GB18030,Unicode,UCS(就是unicode)Utf-8,utf-16,utf-32 …… 看看编码之多,真是够复杂,可这还仅仅是个开始,应用方面变化无穷,本文对这些基本的编码进行了详细的介绍。","text":"ANSI,AscII,GB2312,GBK,BIG5,GB18030,Unicode,UCS(就是unicode)Utf-8,utf-16,utf-32 …… 看看编码之多,真是够复杂,可这还仅仅是个开始,应用方面变化无穷,本文对这些基本的编码进行了详细的介绍。 从基础的开始最小的单元是位(bit),接着是字节(Byte),一个字节=8位,英语表示是1 byte=8 bits 。机器语言的单位Byte。接着是KB,1 KB=1024 Byte; 接着是MB,1 MB=1024 KB; 接着是GB,1 GB=1024 MB ;接着是TB, 1TB=1024 GB。接着是进制:二进制0和1,8进制0-7, 十进制不用说,16进制0-9后面是A,B,C,D,E,F 他们关系如下:Binary Octal Decimal Hex0 0 0 01 1 1 110 2 2 211 3 3 3100 4 4 4101 5 5 5110 6 6 6111 7 7 71000 10 8 81001 11 9 91010 12 10 A1011 13 11 B1100 14 12 C1101 15 13 D1110 16 14 E1111 17 15 F 上层建筑字符: 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB 18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。 ASCII 字符集 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于罗马字母表的一套电脑编码系统,它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646。 包含内容: 控制字符:回车键、退格、换行键等。 可显示字符:英文大小写字符、阿拉伯数字和西文符号 ASCII扩展字符集扩展表格符号、计算符号、希腊字母和特殊的拉丁符号。 第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等; 第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。 注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129DEC HEX CHAR CODE C 程序(转义) 0 00 NUL 1 01 SOH 2 02 STX 3 03 ETX 4 04 EOT 5 05 ENQ 6 06 ACK 7 07 BEL (’a’) 8 08 BS (’b’) 9 09 HT (’t’) 10 0A LF (’n’) 11 0B VT (’v’) 12 0C FF (’f’) 13 0D CR (’r’) 14 0E SO 15 0F SI 16 10 DLE 17 11 DC1 18 12 DC2 19 13 DC1 20 14 DC4 21 15 NAK 22 16 SYN 23 17 ETB 24 18 CAN 25 19 EM 26 1A SUB 27 1B ESC 28 1C FS 29 1D GS 30 1E RS 31 1F US 32 20 (space,空格) 33 21 ! 34 22 " 35 23 # 36 24 $ 37 25 % 38 26 & 39 27 ’ 40 28 ( 41 29 ) 42 2A * 43 2B + 44 2C , 45 2D - 46 2E . 47 2F / 48 30 0 49 31 1 50 32 2 51 33 3 52 34 4 53 35 5 54 36 6 55 37 7 56 38 8 57 39 9 58 3A : 59 3B ; 60 3C < 61 3D = 62 3E > 63 3F ? 64 40 @ 65 41 A 66 42 B 67 43 C 68 44 D 69 45 E 70 46 F 71 47 G 72 48 H 73 49 I 74 4A J 75 4B K 76 4C L 77 4D M 78 4E N 79 4F O 80 50 P 81 51 Q 82 52 R 83 53 S 84 54 T 85 55 U 86 56 V 87 57 W 88 58 X 89 59 Y 90 5A Z 91 5B [ 92 5C (’’) 93 5D ] 94 5E ^ 95 5F _ 96 60 ` 97 61 a 98 62 b 99 63 c 100 64 d 101 65 e 102 66 f 103 67 g 104 68 h 105 69 i 106 6A j 107 6B k 108 6C l 109 6D m 110 6E n 111 6F o 112 70 p 113 71 q 114 72 r 115 73 s 116 74 t 117 75 u 118 76 v 119 77 w 120 78 x 121 79 y 122 7A z 123 7B { 124 7C | 125 7D } 126 7E ~ 127 7F DEL GB2312 字符集 GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,1981年5月1日实施,是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。 GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。 GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。 它是用双字节表示的,两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节” ,而称第二字节为“低字节”。“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。 以GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。 GBK字符集 GBK字符集是GB2312的扩展(K),GBK1.0收录了21886个符号,它分为汉字区和图形符号区,汉字区包括21003个字符。GBK字符集主要扩展了繁体中文字的支持。 BIG5 字符集 BIG5又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码。Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。 Big5字符集共收录13,053个中文字,该字符集在中国台湾使用。耐人寻味的是该字符集重复地收录了两个相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0xDDFC)。 Big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”。高位字节的编码范围0xA1-0xF9,低位字节的编码范围0x40-0x7E及0xA1-0xFE。 尽管Big5码内包含一万多个字符,但是没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字,没有包含日文平假名及片假字母。 例如台湾视“着”为“著”的异体字,故没有收录“着”字。康熙字典中的一些部首用字(如“亠”、“疒”、“辵”、“癶”等)、常见的人名用字(如“堃”、“煊”、“栢”、“喆”等) 也没有收录到Big5之中。 GB18030 字符集GB18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软件必须符合本标准。GB 18030字符集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。 GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 3.0版本兼容,填补Unicode扩展字符字汇“统一汉字扩展A”的内容。并且与以前的国家字符编码标准(GB2312,GB13000.1)兼容。 编码方法:GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分使用0×00至0×7F码(对应于ASCII码的相应码)。双字节部分,首字节码从0×81至0×FE,尾字节码位分别是0×40至0×7E和0×80至0×FE。四字节部分采用GB/T 11383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130到0×FE39FE39。其中第一、三个字节编码码位均为0×81至0×FE,第二、四个字节编码码位均为0×30至0×39。 按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。 接着是国际通用的unicode字符集 Unicode字符集(简称为UCS)1.名称的由来 Unicode字符集编码是(Universal Multiple-Octet Coded Character Set) 通用多八位编码字符集的简称,支持世界上超过650种语言的国际字符集。Unicode允许在同一服务器上混合使用不同语言组的不同语言。它是由一个名为 Unicode 学术学会(Unicode Consortium)的机构制订的字符编码系统,支持现今世界各种不同语言的书面文本的交换、处理及显示。该编码于1990年开始研发,1994年正式公布,最新版本是2005年3月31日的Unicode 4.1.0。Unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 2.编码方法 Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,例如字母“A”的编码为 004116 。所以“A”的编码书写为“U+0041”。 3.UTF-8 编码UTF-8是Unicode的其中一个使用方式。 UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。 UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。 UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。 4.UTF-16 和 UTF-32 编码UTF-32、UTF-16 和 UTF-8 是 Unicode 标准的编码字符集的字符编码方案,UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码;UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数 通过一个问题了解unicode编码 问题:使用Windows记事本的“另存为”,可以在ANSI、GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows怎样识别编码方式的呢?我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢? 答案: ANSI字符集定义:ASCII字符集,以及由此派生并兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。 UNICODE 与 UTF8、UTF16 由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符 标准的 Unicode 称为UTF-16(UTF:UCS Transformation Format )。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。(Unicode字符集有多种编码形式)例如”连通”两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90 而其UTF-8编码为:E8 BF 9E E9 80 9A 当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码:检测文件头标识,提示用户选择,根据一定的规则猜测最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表:EF BB BF UTF-8FE FF UTF-16/UCS-2, little endianFF FE UTF-16/UCS-2, big endianFF FE 00 00 UTF-32/UCS-4, little endian.00 00 FE FF UTF-32/UCS-4, big-endian. 1、big endian和little endianbig endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。 2、字符编码、内码,顺带介绍汉字编码 字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是7294=6768。其中有5个空位是D7FA-D7FE。GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。这里还有一些细节:GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。在DBCS中,GB内码的存储格式始终是big endian,即高位在前。GB2312的两个字节的最高位都是1。但符合这个条件的码位只有128128=16384个。所以GBK和GB18030的低字节最高位都可能不是1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。 3、Unicode、UCS和UTF(UCS Transformation Format)前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。 UCS规定了怎么用多个字节表示各种文字。而怎样传输这些编码,是由UTF(UCS Transformation Format)规范规定的!常见的UTF规范包括UTF-8、UTF-7、UTF-16。 4、UTF的字节序和BOMUTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte order Mark。BOM是一个有点小聪明的想法:在UCS编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。Windows就是使用BOM来标记文本文件的编码方式的。 写到这里对编码有了大致的了解了,就可以理解网上一些文章的话了,比如有一篇很流行的文章《URL编码与SQL注射》里面有一段是这么说的: 其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“”,它的ascii码是92,92的十六进制是5c,所以“”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。呵呵,知道怎么转换的了吧。 这得从ASCII说起,扩展的ASCII字符集采用8bit255个字符显然不够用,于是各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312-80”(就是GB2312),它是和ASCII兼容的一种编码规范,其实就是用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII字符来表示。文中说的的中文ASCII码实际上就是简体中文的编码2312GB!它把ASCII又扩充了一个字节,由于高位的第一位是0,所以会出现负数的形式,url编码就是将汉字的这个GB2312编码转化成UTF-8的编码并且每8位即一个字节前面加上%符号表示。 那为何UTF-8是进行网络的规范传输编码呢? 在Unicode里,所有的字符被一视同仁。汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,注意,现在的汉字是“一个字符”了,于是,拆字、统计字数这些问题也就自然而然的解决了。但是,这个世界不是理想的,不可能在一夜之间所有的系统都使用Unicode来处理字符,所以Unicode在诞生之日,就必须考虑一个严峻的问题:和ASCII字符集之间的不兼容问题。 我们知道,ASCII字符是单个字节的,比如“A”的ASCII是65。而Unicode是双字节的,比如“A”的Unicode是0065,这就造成了一个非常大的问题:以前处理ASCII的那套机制不能被用来处理Unicode了 另一个更加严重的问题是,C语言使用NULL作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉 于是,比Unicode更伟大的东东诞生了,之所以说它更伟大是因为它让Unicode不再存在于纸上,而是真实的存在于我们大家的电脑中。那就是:UTF UTF= UCS Transformation Format UCS转换格式,它是将Unicode编码规则和计算机的实际编码对应起来的一个规则。现在流行的UTF有2种:UTF-8和UTF-16 其中UTF-16和上面提到的Unicode本身的编码规范是一致的,这里不多说了。而UTF-8不同,它定义了一种“区间规则”,这种规则可以和ASCII编码保持最大程度的兼容,这样做的好处是压缩了字符在西欧一些国家的内存消耗,减少了不必要的资源浪费,这在实际应用中是非常有必要的。 UTF-8有点类似于Haffman编码,它将Unicode编码为:00000000-0000007F的字符,用单个字节来表示; 00000080-000007FF的字符用两个字节表示 (中文的编码范围) 00000800-0000FFFF的字符用3字节表示 因为目前为止Unicode-16规范没有指定FFFF以上的字符,所以UTF-8最多是使用3个字节来表示一个字符。但理论上来说,UTF-8最多需要用6字节表示一个字符。 在UTF-8里,英文字符仍然跟ASCII编码一样,因此原先的函数库可以继续使用。而中文的编码范围是在0080-07FF之间,因此是2个字节表示(但这两个字节和GB编码的两个字节是不同的)。看看编码之多:ANSI,AscII,GB2312,GBK,BIG5,GB18030,Unicode,UCS(就是unicode)Utf-8,utf-16,utf-32 整整10种编码~,算是够复杂了可是这还仅仅是个开始,应用方面变化无穷,不过现在看到这些东西起码再不会头大了!呼呼~哦,漏了一个加密的base64编码。 什么是Base64?按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) 为什么要使用Base64? 在设计这个编码的时候,我想设计人员最主要考虑了3个问题:1.是否加密?2.加密算法复杂程度和效率3.如何处理传输? 加密是肯定的,但是加密的目的不是让用户发送非常安全的Email。这种加密方式主要就是“防君子不防小人”。即达到一眼望去完全看不出内容即可。基于这个目的加密算法的复杂程度和效率也就不能太大和太低。和上一个理由类似,MIME协议等用于发送Email的协议解决的是如何收发Email,而并不是如何安全的收发Email。因此算法的复杂程度要小,效率要高,否则因为发送Email而大量占用资源,路就有点走歪了。 但是,如果是基于以上两点,那么我们使用最简单的恺撒法即可,为什么Base64看起来要比恺撒法复杂呢?这是因为在Email的传送过程中,由于历史原因,Email只被允许传送ASCII字符,即一个8位字节的低7位。因此,如果您发送了一封带有非ASCII字符(即字节的最高位是1)的Email通过有“历史问题”的网关时就可能会出现问题。网关可能会把最高位置为0!很明显,问题就这样产生了!因此,为了能够正常的传送Email,这个问题就必须考虑!所以,单单靠改变字母的位置的恺撒之类的方案也就不行了。关于这一点可以参考RFC2046。基于以上的一些主要原因产生了Base64编码。 鉴于算法比较让人头大,想看的人自然会有看到的办法拉,俺是头大得很,就不放上来了。","categories":[],"tags":[]},{"title":"程序员的十种级别","slug":"class-about-coders","date":"2006-01-09T12:05:41.000Z","updated":"2016-11-05T01:31:03.000Z","comments":true,"path":"posts/2006/01/09/class-about-coders/","link":"","permalink":"http://littlepig.cn/posts/2006/01/09/class-about-coders/","excerpt":"出处: Java研究组织 作者: godyin","text":"出处: Java研究组织 作者: godyin 第一级:神人,天资过人而又是技术狂热者同时还拥有过人的商业头脑,高瞻远瞩,技术过人,大器也。如丁磊,求伯君。 第二级:高人,有天赋,技术过人但没有过人的商业头脑,通常此类人不是顶尖黑客就是技术总监之流。 第三级:牛人,技术精湛,熟悉行业知识,敢于创新,有自己的公司和软件产品。 第四级:工头,技术精湛,有领导团队的能力,此类人大公司项目经理居多。 第五级:技术工人,技术精湛,熟悉行业知识但领导能力欠加,此类人大多为系分人员或资深程序员,基本上桀骜不逊,自视清高,不愿于一般技术人员为伍,在论坛上基本以高手面目出现。 第六级:熟练工人,技术有广度无深度,喜欢钻研但浅尝辄止。此类人大多为老程序员,其中一部分喜欢利用工具去查找网上有漏洞的服务器,干点坏事以获取成绩感。如果心情好,在论坛上他们会回答菜鸟的大部分问题。此级别为软件业苦力的重要组成部分。 第七级:工人,某些技术较熟练但缺乏深度和广度,此类人大多为程序员级别,经常在论坛上提问偶尔也回答菜鸟的问题。为软件产业苦力的主要组成部分。 第八级:菜鸟,入门时间不长,在论坛上会反复提问很初级的问题,有一种唐僧的精神。虽然招人烦但基本很可爱。只要认真钻研,一两年后就能升级到上一层。 第九级:大忽悠,利用中国教育的弊病,顶着一顶高学历的帽子,在小公司里混个软件部经理,设计不行,代码不行,只会胡乱支配下属,拍领导马屁,在领导面前胡吹海侃,把自己打扮成技术高手的模样。把勾心斗角的办公室文化引入技术部门,实在龌龊! 第十级:驴或傻X,会写SELECT语句就说自己精通ORALCE,连寄存器有几种都不知道就说自己懂汇编,建议全部送到日本当IT产业工人,挣了日本人的钱还严重打击日本的软件业! 其中又以前两级和后两级最为难得,其余级别只要努力,皆有可能达到。","categories":[],"tags":[]},{"title":"汉语会否在故乡“沦陷”?","slug":"does-chinese-will-lost-in-its-homeplace","date":"2004-12-22T11:57:28.000Z","updated":"2016-10-31T08:50:26.000Z","comments":true,"path":"posts/2004/12/22/does-chinese-will-lost-in-its-homeplace/","link":"","permalink":"http://littlepig.cn/posts/2004/12/22/does-chinese-will-lost-in-its-homeplace/","excerpt":"","text":"当汉语高调向世界扩张的时候,这种古老而优雅的语言,是否会在她的故乡沦陷? 加拿大留学生詹姆斯感到很不理解:因为喜欢形式简洁意蕴深远的中文,他不远万里来到中国学习,可是当他想和中国同学谈谈古诗词的时候,却发现他们更感兴趣的是和他练练英语口语。 “我的中国同学讲话时经常夹杂着英文单词,有些成语他们不明白是什么意思,而且很多人的中国字写得不好看。”詹姆斯有点失望。 当汉语高调向世界扩张的时候,这种古老而优雅的语言,在自己的故乡却多少有些处境尴尬。 喜欢流行音乐的公司职员张乐明,对英文RAP特别着迷,“中文歌曲里加上一段英文RAP,即使听不清唱的是什么,感觉也很酷。” 在一所中学教语文的徐晓敏,陪孩子参加过一次“疯狂英语”的讲座。谈起数万人拥挤在体育馆,手舞足蹈地呐喊出英文单词的场面,她觉得兴奋又有些不可思议:大家怎么学起英语来都那么有激情?那种激情为什么有那么强的感染力?在我的课堂上要调动起学生的情绪怎么就那么难? 一位网友这样在留言板上大声疾呼:“全球化”的浪潮中,汉语已经黯然失色。 “我们的华语世界,已经到了濒临失落与拯救的边缘!”数月前在上海举行的一个论坛上,海峡两岸的多位著名作家——余光中、莫言、苏童、马原等都做出这样的表达。 余光中不无痛心地说:英文充其量是我们了解世界的一种工具而已,而汉语才是我们真正的根。“当你的女友改名为玛丽,你怎能送她一首《菩萨蛮》?” 汉语危机 初中生王凡很自然地把一堆网上聊天中的常用语移植到周记和作文中:“200”(公园)、“GG”(哥哥)、“GF”(女朋友)、“PMP”(拍马屁)、“酱紫”(这样子)、“偶(我)”、“KPM”(肯德基、披萨饼、麦当劳)……这些让家长和老师一头雾水的词汇,对于王凡和他的同学来说,却显得“活泼可爱,不死板”。 “汉语危机论”不仅仅来自“全民学英语”热潮的冲击,网络语言向现实生活的渗透,也被不少学界人士视为原因之一。 高级教师王辛铭说,有些同学在作文里会冷不丁地冒出个网络上的词语。一些年纪大的老师根本搞不清是什么意思。“对此若不加以引导,学生极有可能养成不规范使用语言文字的坏习惯。” 也有老师认为,学生面临考试、升学的压力,在这样的现实条件下,如果一味地使用网络语言只会给自己带来不安全。阅卷老师一般都不会买账,这样会直接影响他们的分数。 “网络语言”真的要“革”现代汉语的“命”吗? 对此,也有专家认为,语文教师看重的是语言的规范性,旨在保证语言的纯洁性,但这种规范性要有弹性,是动态的不应是僵死的规范。语言的发展与社会的发展是同步的,社会发展越快越迅猛,语言就会不断地被丰富被更新。对于出现的网络流行语言不能简单地判断对错,它进入人们的生活需要一个逐步被接受的过程,因此宽容比扼杀更重要。 “语文教育有问题” “中国语文教育有问题!”在两个月前举行的“中国语文教育高峰论坛”上,200多位语文教育专家、知名作家这样表示。 效率不高,学生学习兴趣与日俱减——承载着传统教化功能的语文教学,却被报以如此评价。 著名作家王蒙,面对小孙子的语文题“傻了眼”。这是道选择题,要求选出与“窗外有棵杨树”意思最接近的一句话,给出的三个选择是:一棵杨树长在窗外;窗外有一棵树,是杨树;从窗内看出去有棵杨树。“我觉得都差不多,确实不会做了。” 他说:“我对语文教育持批评态度,是我从自己后辈当中碰到了呆板的教育带来的问题。” 专家这样总结语文教学中的问题:“肢解”语文,考太多、太零碎的局部知识,过分强调标准答案,不重视综合性;语法教学让人厌倦,过于理性、专业,耗时多而收效小,有的学生还可能被败坏了学习语文的“胃口”;语文阅读脱离语言环境,对文章内容进行漫无目标的讨论,曲解文本内容,伤害了学生阅读的积极性。 复旦大学哲学系教授王德峰接受媒体采访时说,中小学语文教学应摆脱“工具化”倾向,把人文精神的培育作为根本使命,让学生对人生和世界形成一种审美关照,唤醒青少年的心灵,维护民族的语言,也守护我们的精神家园。 拆除信息世界藩篱 信息时代,网络的无国界传播让中文面临新的挑战:在电脑网络中,中文信息只占不到总量1%。有学者警告,中国在信息领域几乎丢掉了汉语的发言权,失去了汉语文化的空间。 研究者称,拥有成千上万个基本字符的汉字跟只有几十个按键的计算机键盘本质上是不相容的。从计算机技术上来说,中文的操作系统一般都以英文操作系统为基础而开发,或者干脆就是挂在英文的操作系统上,往往不够稳定,相互之间也不总是能够兼容。技术细节方面的问题给计算机网络上的中文传递带来不少麻烦。 一位学者曾经作过一项统计,在“社会·文化”(soc.culture.)网点下的120多个讨论本国文化的小组中,放弃本国文字而使用英文的国家中以中国为最大。一个以对外汉语教学及汉语研究为主要内容的联网讨论组,本来应该是使用汉语的好场所,然而多年来也一直是以英语为工作语言。就连中国人之间的网络通信,也为方便安全而使用英文。 这位学者质疑:如果为用计算机学英文,上了计算机就丢中文,那么以后计算机日益普及了,还要中文做什么呢? 事实上,中国自1970年代后期以来,已展开大规模中文信息处理研究与开发工作。从汉字属性研究到汉字输入技术、输出技术、汉字字型技术、中西文兼容技术以及汉字激光照排、汉字情报检索和汉字信息系统等,取得大量成果。目前从汉字特征的不同角度提出的键盘输入方案多达数百种,手写输入、语音输入也已实现,数以千万字计的大规模汉语语料库已经建立。中文信息处理系统的开发和生产,已成为中国计算机信息产业领先世界的重要部分。 改良汉字的呼声近年来日益强烈,有学者建议借鉴日本汉字与拼音文字双轨制的经验,创建第二套以表音为主、字母形式的语文,弥补汉字传输信息的不足;在书写方法上分词书写,方便检索。 一个世纪前中文的巨大变革如今屡被提及,当年教科书和报纸开始采用白话文写作,同时引进西式标点,这些中国语文进化史上翻天覆地的伟大事件,使中文有了今天的面貌。“为了汉语的推广,为了提升汉语的竞争力,今天的改革是顺应时代趋势的。”学者们说。","categories":[],"tags":[]}],"categories":[{"name":"系统","slug":"系统","permalink":"http://littlepig.cn/categories/%E7%B3%BB%E7%BB%9F/"},{"name":"软件","slug":"软件","permalink":"http://littlepig.cn/categories/%E8%BD%AF%E4%BB%B6/"},{"name":"服务","slug":"服务","permalink":"http://littlepig.cn/categories/%E6%9C%8D%E5%8A%A1/"},{"name":"编程","slug":"编程","permalink":"http://littlepig.cn/categories/%E7%BC%96%E7%A8%8B/"},{"name":"配置","slug":"配置","permalink":"http://littlepig.cn/categories/%E9%85%8D%E7%BD%AE/"},{"name":"工具","slug":"工具","permalink":"http://littlepig.cn/categories/%E5%B7%A5%E5%85%B7/"},{"name":"system","slug":"system","permalink":"http://littlepig.cn/categories/system/"},{"name":"website","slug":"website","permalink":"http://littlepig.cn/categories/website/"},{"name":"server","slug":"server","permalink":"http://littlepig.cn/categories/server/"},{"name":"software","slug":"software","permalink":"http://littlepig.cn/categories/software/"}],"tags":[{"name":"Linux Debian X230","slug":"Linux-Debian-X230","permalink":"http://littlepig.cn/tags/Linux-Debian-X230/"},{"name":"Linux Debian Postgresql","slug":"Linux-Debian-Postgresql","permalink":"http://littlepig.cn/tags/Linux-Debian-Postgresql/"},{"name":"git","slug":"git","permalink":"http://littlepig.cn/tags/git/"},{"name":"python,pylint","slug":"python-pylint","permalink":"http://littlepig.cn/tags/python-pylint/"},{"name":"DSM","slug":"DSM","permalink":"http://littlepig.cn/tags/DSM/"},{"name":"python jupyter","slug":"python-jupyter","permalink":"http://littlepig.cn/tags/python-jupyter/"},{"name":"python","slug":"python","permalink":"http://littlepig.cn/tags/python/"},{"name":"IPV6","slug":"IPV6","permalink":"http://littlepig.cn/tags/IPV6/"},{"name":"domain","slug":"domain","permalink":"http://littlepig.cn/tags/domain/"},{"name":"ifconfig","slug":"ifconfig","permalink":"http://littlepig.cn/tags/ifconfig/"},{"name":"vpn plugins","slug":"vpn-plugins","permalink":"http://littlepig.cn/tags/vpn-plugins/"},{"name":"claws","slug":"claws","permalink":"http://littlepig.cn/tags/claws/"},{"name":"vc6","slug":"vc6","permalink":"http://littlepig.cn/tags/vc6/"},{"name":"c++","slug":"c","permalink":"http://littlepig.cn/tags/c/"},{"name":"synology","slug":"synology","permalink":"http://littlepig.cn/tags/synology/"},{"name":"dsm","slug":"dsm","permalink":"http://littlepig.cn/tags/dsm/"},{"name":"resilio sync","slug":"resilio-sync","permalink":"http://littlepig.cn/tags/resilio-sync/"},{"name":"bt","slug":"bt","permalink":"http://littlepig.cn/tags/bt/"},{"name":"debian","slug":"debian","permalink":"http://littlepig.cn/tags/debian/"},{"name":"media","slug":"media","permalink":"http://littlepig.cn/tags/media/"},{"name":"nginx","slug":"nginx","permalink":"http://littlepig.cn/tags/nginx/"},{"name":"rtmp","slug":"rtmp","permalink":"http://littlepig.cn/tags/rtmp/"},{"name":"urp","slug":"urp","permalink":"http://littlepig.cn/tags/urp/"},{"name":"hack","slug":"hack","permalink":"http://littlepig.cn/tags/hack/"},{"name":"DTS","slug":"DTS","permalink":"http://littlepig.cn/tags/DTS/"},{"name":"macOS","slug":"macOS","permalink":"http://littlepig.cn/tags/macOS/"},{"name":"VPS","slug":"VPS","permalink":"http://littlepig.cn/tags/VPS/"},{"name":"sentris","slug":"sentris","permalink":"http://littlepig.cn/tags/sentris/"},{"name":"kcptun","slug":"kcptun","permalink":"http://littlepig.cn/tags/kcptun/"},{"name":"shadowsocks","slug":"shadowsocks","permalink":"http://littlepig.cn/tags/shadowsocks/"},{"name":"CHtmlView","slug":"CHtmlView","permalink":"http://littlepig.cn/tags/CHtmlView/"},{"name":"mysql","slug":"mysql","permalink":"http://littlepig.cn/tags/mysql/"},{"name":"server","slug":"server","permalink":"http://littlepig.cn/tags/server/"},{"name":"d400","slug":"d400","permalink":"http://littlepig.cn/tags/d400/"},{"name":"w130s","slug":"w130s","permalink":"http://littlepig.cn/tags/w130s/"},{"name":"NAS","slug":"NAS","permalink":"http://littlepig.cn/tags/NAS/"},{"name":"exim4","slug":"exim4","permalink":"http://littlepig.cn/tags/exim4/"},{"name":"mail","slug":"mail","permalink":"http://littlepig.cn/tags/mail/"},{"name":"sendmail","slug":"sendmail","permalink":"http://littlepig.cn/tags/sendmail/"},{"name":"timthumb","slug":"timthumb","permalink":"http://littlepig.cn/tags/timthumb/"},{"name":"IIS worpress upload","slug":"IIS-worpress-upload","permalink":"http://littlepig.cn/tags/IIS-worpress-upload/"},{"name":"cluster","slug":"cluster","permalink":"http://littlepig.cn/tags/cluster/"},{"name":"proxy","slug":"proxy","permalink":"http://littlepig.cn/tags/proxy/"},{"name":"upload","slug":"upload","permalink":"http://littlepig.cn/tags/upload/"},{"name":"mysql cluster","slug":"mysql-cluster","permalink":"http://littlepig.cn/tags/mysql-cluster/"},{"name":"D400","slug":"D400","permalink":"http://littlepig.cn/tags/D400/"},{"name":"W130S","slug":"W130S","permalink":"http://littlepig.cn/tags/W130S/"},{"name":"Synology","slug":"Synology","permalink":"http://littlepig.cn/tags/Synology/"},{"name":"Dell","slug":"Dell","permalink":"http://littlepig.cn/tags/Dell/"},{"name":"PowerEdge","slug":"PowerEdge","permalink":"http://littlepig.cn/tags/PowerEdge/"},{"name":"R720","slug":"R720","permalink":"http://littlepig.cn/tags/R720/"},{"name":"EXSI","slug":"EXSI","permalink":"http://littlepig.cn/tags/EXSI/"},{"name":"T400 SSD","slug":"T400-SSD","permalink":"http://littlepig.cn/tags/T400-SSD/"},{"name":"c++ 64","slug":"c-64","permalink":"http://littlepig.cn/tags/c-64/"},{"name":"6.0","slug":"6-0","permalink":"http://littlepig.cn/tags/6-0/"},{"name":"c#","slug":"c","permalink":"http://littlepig.cn/tags/c/"},{"name":"VC6","slug":"VC6","permalink":"http://littlepig.cn/tags/VC6/"},{"name":"Visual","slug":"Visual","permalink":"http://littlepig.cn/tags/Visual/"},{"name":"Win7","slug":"Win7","permalink":"http://littlepig.cn/tags/Win7/"},{"name":"Win8","slug":"Win8","permalink":"http://littlepig.cn/tags/Win8/"},{"name":"XP VIA OHCI IEEE 1394","slug":"XP-VIA-OHCI-IEEE-1394","permalink":"http://littlepig.cn/tags/XP-VIA-OHCI-IEEE-1394/"},{"name":"fdisk","slug":"fdisk","permalink":"http://littlepig.cn/tags/fdisk/"},{"name":"mount","slug":"mount","permalink":"http://littlepig.cn/tags/mount/"},{"name":"mongodb","slug":"mongodb","permalink":"http://littlepig.cn/tags/mongodb/"},{"name":"NoSQL","slug":"NoSQL","permalink":"http://littlepig.cn/tags/NoSQL/"},{"name":"gitstack","slug":"gitstack","permalink":"http://littlepig.cn/tags/gitstack/"},{"name":"svn","slug":"svn","permalink":"http://littlepig.cn/tags/svn/"},{"name":"tortoisegit","slug":"tortoisegit","permalink":"http://littlepig.cn/tags/tortoisegit/"},{"name":"visualsvn","slug":"visualsvn","permalink":"http://littlepig.cn/tags/visualsvn/"},{"name":"bootstrap","slug":"bootstrap","permalink":"http://littlepig.cn/tags/bootstrap/"},{"name":"ie6","slug":"ie6","permalink":"http://littlepig.cn/tags/ie6/"},{"name":"patch","slug":"patch","permalink":"http://littlepig.cn/tags/patch/"},{"name":"tengine","slug":"tengine","permalink":"http://littlepig.cn/tags/tengine/"},{"name":"blocked","slug":"blocked","permalink":"http://littlepig.cn/tags/blocked/"},{"name":"gateway","slug":"gateway","permalink":"http://littlepig.cn/tags/gateway/"},{"name":"ipmasquerade","slug":"ipmasquerade","permalink":"http://littlepig.cn/tags/ipmasquerade/"},{"name":"router","slug":"router","permalink":"http://littlepig.cn/tags/router/"},{"name":"dotdeb","slug":"dotdeb","permalink":"http://littlepig.cn/tags/dotdeb/"},{"name":"php-fpm","slug":"php-fpm","permalink":"http://littlepig.cn/tags/php-fpm/"},{"name":"bind9","slug":"bind9","permalink":"http://littlepig.cn/tags/bind9/"},{"name":"DNS","slug":"DNS","permalink":"http://littlepig.cn/tags/DNS/"},{"name":"htpasswd","slug":"htpasswd","permalink":"http://littlepig.cn/tags/htpasswd/"},{"name":"password","slug":"password","permalink":"http://littlepig.cn/tags/password/"},{"name":"vsftpd","slug":"vsftpd","permalink":"http://littlepig.cn/tags/vsftpd/"},{"name":"www","slug":"www","permalink":"http://littlepig.cn/tags/www/"},{"name":"driver","slug":"driver","permalink":"http://littlepig.cn/tags/driver/"},{"name":"hp","slug":"hp","permalink":"http://littlepig.cn/tags/hp/"},{"name":"printer","slug":"printer","permalink":"http://littlepig.cn/tags/printer/"},{"name":"3T","slug":"3T","permalink":"http://littlepig.cn/tags/3T/"},{"name":"2012","slug":"2012","permalink":"http://littlepig.cn/tags/2012/"},{"name":"vpn","slug":"vpn","permalink":"http://littlepig.cn/tags/vpn/"},{"name":"bug","slug":"bug","permalink":"http://littlepig.cn/tags/bug/"},{"name":"dreamstime","slug":"dreamstime","permalink":"http://littlepig.cn/tags/dreamstime/"},{"name":"sharedimages","slug":"sharedimages","permalink":"http://littlepig.cn/tags/sharedimages/"},{"name":"function","slug":"function","permalink":"http://littlepig.cn/tags/function/"},{"name":"wordpress","slug":"wordpress","permalink":"http://littlepig.cn/tags/wordpress/"},{"name":"template","slug":"template","permalink":"http://littlepig.cn/tags/template/"},{"name":"javascript","slug":"javascript","permalink":"http://littlepig.cn/tags/javascript/"},{"name":"GirdVista","slug":"GirdVista","permalink":"http://littlepig.cn/tags/GirdVista/"},{"name":"GridMove","slug":"GridMove","permalink":"http://littlepig.cn/tags/GridMove/"},{"name":"MaxTo","slug":"MaxTo","permalink":"http://littlepig.cn/tags/MaxTo/"},{"name":"WinSplit","slug":"WinSplit","permalink":"http://littlepig.cn/tags/WinSplit/"},{"name":"SurpassHosting","slug":"SurpassHosting","permalink":"http://littlepig.cn/tags/SurpassHosting/"}]}