设置:

app.use(express.methodOverride());
app.use(express.bodyParser({uploadDir: "public/images",keepExtensions: true}));

bodyParser设置项一定要紧跟在 methodOverride后面,同时 uploadDir参数的目录需要手动创建。

表单上传:

使用表单上传时,需要给 <Form> 添加参数 enctype="multipart/form-data"

FormData & jQuery.ajax:

使用 FormData 结合 jQuery.ajax 方式上传时

var formData = new FormData();
formdata.append('file', files);
var uploadURL = '/upload';
$.ajax({
 url: uploadURL,
 type: 'POST',
 contentType: false,
 processData: false,
 cache: false,
 data: formData,
 success: function (data) {
 console.log(data);
 }
});

contentType: false, processData: false 需要设置

利用Implicit Grant授权的模式,在授权认证之后直接从回调链接URL获取access_token,优点是方便,不需要后端,缺点是不能刷新access_token,每一个月需要重新授权一次。适合轻网页应用。

授权链接:

https://openapi.baidu.com/oauth/2.0/authorize?response_type=token?client_id=CLIENT_ID?redirect_uri=http%3A%2F%2REDIRECT.URI%?scope=basic+netdisk?display=popup

从回调地址获取access_token:

function getQueryStringRegExp(name) {
 var reg = new RegExp("(^|?|&)" + name + "=([^&]*)(s|&|$)", "i");
 if (reg.test(location.href)) return unescape(RegExp.$2.replace(/+/g, " "));
 return null;
}; //这个函数用以直接获取地址栏URL中的某个fragment

可以直接使用本页面作为回调页面。加一个授权验证即可。

var accessToken = getQueryStringRegExp('access_token'); // 获取access_token
if (accessToken != null) { // 如果access_token存在,就直接进行用户授权验证
  $.ajax({
    url: 'https://openapi.baidu.com/rest/2.0/passport/users/isAppUser?access_token=' + accessToken,
    dataType: 'jsonp'
  }).done(function(data) {
    var isAuth;
    if (data.result == 1) { // 授权验证的返回值中的result参数为'1'的话,就是已经授权了
      isAuth = '已授权';
      /* 获取授权用户基本信息 */
      $.ajax({
        url: 'https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser?access_token=' + accessToken,
        dataType: 'jsonp'
      }).done(function(data) {
        /*
        data.uid 用户数字id
        data.uname 用户名
        data.portrait 用户头像id
        头像的链接为:
        small image: http://tb.himg.baidu.com/sys/portraitn/item/{$portrait}
        large image: http://tb.himg.baidu.com/sys/portrait/item/{$portrait}
        */
      });
      /* 获取授权用户的个人云存储的基本信息 */
      $.ajax({
        url: 'https://pcs.baidu.com/rest/2.0/pcs/quota?method=info?access_token=' + accessToken,
        dataType: 'jsonp'
      }).done(function(data) {
        /*
        data.quota 是空间总量
        data.used 是已用容量
        */
      });
    } else {
      isAuth = '未授权'; // 未授权的result值为'0'
    }
  });
}

April Fools Day is coming. Prank your friends opening a never ending fake update screen on their computer. Sit back and watch their reaction.

牧场物语

非常喜欢的一款游戏,之前有一个99%汉化的版本,没想到又有汉化组完成了。

【下载地址】
http://pan.baidu.com/s/1hqp6cok
如有更新版本也是此地址,可以时常保持关注。
【献给2013,致敬2003】
矿石镇是我们许多人共同的回忆,
也是很多新牧友的入门作品。
在此感谢2003年CGP和模拟天下为
我们带了的矿石镇汉化作品,
而我们有爱小组在10年后用
自己的爱再次完善修复汉化
当年的这款经典之作,
希望在2013年尾声再一次带给大家快乐!
不多说了,去下载吧!
【汉化说明】
本次2013完美汉化版是在2003年
CGP和模拟天下共同制作的
牧场物语矿石镇汉化版的基础上,
修改原有的一些翻译问题,运行BUG,
并把没有翻译的部分进行补充翻译而成。
部分料理名、道具名、人名有变更(更为准确),
改善了一些名词前后称谓不一的情况。
注意:
由于重新整理了内部编码,
老汉化版的存档可以用在新汉化版中,
但是所有玩家自己取的名字都会变成其他字。
推荐开新档重新享受经营的乐趣!
【汉化参与成员】
技术:啪嗒啪嗒、Enler、雨婷
翻译:蜻蛉、小哀、Arky
校对润色:幻化作风
美术:酷酷的安仔
测试:兵兵、波标以及全体参与
汇报内测BUG的牧场物语吧的朋友们。
【特别鸣谢】
百度贴吧-牧场物语吧热心
参与汇报老汉化版中问题的朋友,
没有你们的大力支持就不会有今天的版本。

贴吧发布地址:http://tieba.baidu.com/p/2791340876

在写弹出菜单插件时,需要实现点击弹出菜单以外的区域时关闭菜单的功能。 发现了一种比较简单地实现这一事件的方法。

$(document).mouseup(function(e){
 var _con = $(' 目标区域 '); // 设置目标区域
 if(!_con.is(e.target) && _con.has(e.target).length === 0){ // Mark 1
 some code... // 功能代码
 }
});
/* Mark 1 的原理:
判断点击事件发生在区域外的条件是:
1. 点击事件的对象不是目标区域本身
2. 事件对象同时也不是目标区域的子元素
*/

因为自己要用,所以写了一个弹出菜单插件

jQueryPopMenu

simple responsive popup menu, it’s a jQuery plugin.

Demo

http://gucheen.github.io/jQueryPopMenu/

Link

https://github.com/gucheen/jQueryPopMenu

Intro

这是一个基于 jQuery 的弹出菜单插件。有基本的自适应特性。可以设置包括背景色、菜单按钮大小、圆角或者直角等。
:Demo页面中的所有icon都基于FontAwesome,并非必须。可以自行更改。

jQuery.popmenu-1

jQuery.popmenu-2

Info

Version 1.0
基于jQuery 2.0.3 构建。 Chrome, Safari, Firefox, Opera 可用。无IE支持。

Usage

使用 $(' #target ').popmenu(); 调用。 参数包括:

{
 'controller': true, //设定是否使用控制按钮,设置为false,菜单将一直显示
 'width': '300px', //菜单总宽度
 'background': '#34495e', //菜单背景色
 'focusColor': '#1abc9c', //菜单按钮hover时颜色
 'borderRadius': '10px', //边角弧度,设置为0,为直角
 'top': '50', //上移距离,向上移动多少就设置为多少
 'left': '0', //左移距离,设置同上
 'iconSize': '100px' //菜单按钮大小,目前是正方形设计(宽高相同)
}
//以上参数数值为默认值
//使用时无需受Demo影响,按钮可以是纯文字,内容排版自行安排设计。

注:控制按钮对应 .pop_ctrl,即名字为 pop_ctrl 的class,使用class是为了方便同时使用多个菜单,各菜单间无影响。

Ubuntu下,A卡的开源驱动有一些自带的电源管理功能,对于笔记本用户来说尤其重要,无论是风扇降噪,还是降温,都有不错的效果,下面是使用方法:


sudo -i
#进入root模式
echo dynpm > /sys/class/drm/card0/device/power_method
## 基于GPU负载的动态调整
echo profile > /sys/class/drm/card0/device/power_method
## 基于Profile(配置文件)的频率切换;这是默认的模式

如果你选择了Profile模式的话,可以有几个不同的配置文件进行切换


echo default > /sys/class/drm/card0/device/power_profile
# 默认的模式
echo low > /sys/class/drm/card0/device/power_profile
## 强制使用最低的可用频率;
## 在一些笔记本和显示设备上可能会有一定问题, 因为这是关闭dpms时使用的模式
echo mid > /sys/class/drm/card0/device/power_profile
## 强制GPU使用'mid'的电源状态;在常规情况下,要比'low'更安全
echo high > /sys/class/drm/card0/device/power_profile
## 强制使用最高可用频率
echo auto > /sys/class/drm/card-0/device/power_profile
## 在 'high'和'mid'之前切换,根据系统是否使用电池供电。

实际情况下,使用 dynpm 或者 profile 中的 mid 模式,都可以有效的降低风扇转速和显卡温度。

The free online CSS cleaner tool helps you to organize style files for websites.

使用tmux之后,原本的鼠标滚动查看历史记录就变成了切换历史命令,不是很习惯。可以通过以下方法修改回来。

~/ 下新建 .tmux.conf (如果没有的话),其中加入下面这句:

set-window-option -g mode-mouse on

然后使用这个conf: tmux source-file .tmux.conf

就可以继续使用滚轮查看历史记录啦

大多数关于Emmet的文章和教程都是在说明它对HTML的处理能力,但是今天我们要来关注一下Emmet的CSS部分。准备好来增强你的CSS手写能力了吗?让我们开始吧!

:在你阅读下面的部分之前,建议你先对CSS有一定的了解。


Emmet是什么?

Emmet采用文本缩写的方法,集合了不同的缩写,并且扩展为对应的html/xml/css。访问 下载页面 ,并为你的编辑器安装Emmet。

在使用Emmet编写代码时,输入适当的缩写,然后按下Emmet的功能键。在Sublime Text中,是TAB键。你正在处理的文件的语法将决定使用哪些缩写。

为什么要使用Emmet?

Emmet使用符合常识的缩写来简化编写代码的过程。它可以起到多大的作用,取决于你投入了多少时间去学习它的来龙去脉。

Emmet(以前叫做Zen Coding )是一个面向Web开发者的工具,它可以大大加快你的HTML和CSS的工作流程。
它不仅可以节省你的时间,还可以使编写代码的过程更加轻松愉快。只要输入很少的字符,然后看着它们神奇地扩展为格式完美的代码!如果产生了一些错误,撤销按钮可以将扩展后的代码变回原本的缩写形式,这样你就可以再次编辑并且将它扩展。

我同时还发现Emmet让我更加轻松地记住了代码。缩写毫无疑问更加易于记忆。 text-transform:对应 “tt” 和 text-align:justify; 对应 “taj” 。可以看到这会有多大的帮助。你将开始学习新的CSS属性并且只需要记住它的缩写。你甚至不需要担心分号和空格,Emmet为你解决这些事情!


Emmet和CSS

让我们来看看Emmet的CSS缩写的基本构成,以及它如何加快工作流程。

属性(Properties)

CSS对属性赋予相应的值,如 font-size,margin,padding,等等。

css-best-property-value

取自学习CSS的最佳方法

Emmet对每个已知的CSS属性定义了一个缩写。因此, border-bottom 就是 bdb , border-top 就是 bdt 。下面这个例子是 font-size ,也就是 fz 。

键入缩写之后,按下功能键(我的配置,TAB)和Emmet会神奇地将缩写扩展为有效的CSS,并且将光标移动到你会需要继续输入的地方。

Properties

值(Values)

现在我们已经了解了属性,是时候添加一个值了。这是通过键入缩写与所需的值的组合来完成的。例如,fz18 将会输出 “font-size: 18px; 。你不需要输入”px”,因为Emmet会默认添加它。如果一个项目没有单位(如 font-weight ),Emmet也足够聪明地知道不要添加 px。

Values

单位(Units)

如果你并不都是使用像素怎么办?em , rem , % , ex ,和 px 这些单位都可以在Emmet中使用。每个单位也有一个缩写形式(虽然这看起来可能有点极端):

  • px → 默认
  • p → %
  • e → em
  • r → rem
  • x → ex
    要使用一个单位,只需值的末尾加上单位的缩写。下面的例子是用单位 em 定义一个字体大小

Units

多个单位(Multiple Units)

某些属性,比如 margin ,允许多个值。要用Emmet做到这一点,就用破折号(-)分隔每一个值。来看看下面这个例子,它给 body 定义 margin 的四个值。

Multiple Units

颜色(Colors)

Emmet要求你在前面加上# ,而不是将加到值的末尾。所以 # 紧跟在你的属性后面,在值的前面。不同的字符数输出不同的十六进制代码。来看一些例子:

  • #1 → #111111
  • #e0 → #e0e0e0
  • #fc0 → #ffcc00
    下面是定义 body 颜色的一个例子,使用 #111 ( c#1 ):

Colors

!important

尽管 !important 标签不应该经常使用,Emmet 还是提供了它,为防万一。添加一个感叹号 ! 到你的缩写,像这样:

!important

多个属性(Multiple Properties)

现在,我们对Emmet的CSS功能的有了一个基本的了解,是时候开始把它们结合起来。像类似类似处理HTML的方式,你可以给它们每一个都添加一个加号(+)。请记住,如果你遇到了问题,你可以随时撤销并修改字符串。

写出你的所需的每一个属性和值,用 + 分隔它们,然后按下功能键来查看结果。

下面是为 body 定义不同的 margin 和 padding 的一个例子。

Multiple Properties

例子

记住,你可以组合或者独立地使用所有这些缩写。这不是关于怎样一次就使用Emmet写出正确地代码,只是让你更容易编写你的CSS。为了总结这些很酷的GIF动画,这里有个一个例子,快速创建一个 class 为panel 的 div。

例子

结论

Emmet是一个强大的工具。被一些人称为“高速”的编码工具,它可以让你花更少的时间一遍又一遍地写同样的代码,而无需手动创建自己的代码段。Emmet的灵感来自于CSS选择器,并且可以在所有主流的编辑器中使用,以适应任何开发者的工作流程。

请记住,你添加到你的工作流的任何新工具都会有一个学习曲线,但不要花费比你需要弄清楚它是如何为你工作这个过程更多的时间。定期查看文档是一个很好的复习,同时Emmet提供了一个 cheat sheet ,囊括了所有可用的功能。这是为了帮助你少一些思索,同时写更多的代码而建的!

相关链接

Original Page : Turbo-Charge Your CSS With Emmet

首先搭建Shadowsocks,参见官方使用指南:

官方使用指南(英文) / 官方使用指南(中文)

这里选择了SS的python版本,事实上,cow本身提供了代理方案,但是Shadowsocks的操作空间更大。

官方指南使用 pip 安装SS环境,在一些没有安装pip的vps,需要先安装一下,ubuntu系的是

sudo apt-get install python-pip

接着就新建一个SS的配置文件 config.json 。可以新建一个 SS 目录,用来存放,方便寻找。

{
"server":"my_server_ip",
"server_port":8388,
"local_port":1080,
"password":"barfoo!",
"timeout":600,
"method":"table" //加密方案推荐 aes-256-cfb ,需安装 m2crypto
}

如果是单IP VPS,推荐使用 0.0.0.0 作为 server 的值。

加密方案使用 aes-256-cfb ,安装 m2crypto 。ubuntu 系

sudo apt-get install python-m2crypto

安装 gevent 可以提高 Shadowsocks 的性能:

sudo apt-get install python-gevent

SS 可以使用命令行参数覆盖默认配置,具体参见 命令行参数 。

:以上安装命令需要管理员权限。

接下来在配置文件(config.json) 文件所在目录使用

nohup ssserver > log &

这样可以在后台运行SS,断开SSH连接之后依旧可以使用SS,调试情况下,可以使用 ssserver 启动 SS,可以看到信息记录。

然后配置 cow 。官方文档: cow github

以 windows 版本为例 。下载:cow 。也可以从 go 源码编译。

windows 版本的 cow 配置文件为目录下 rc.txt 。实际情况下,我们需要的部分很少。

#开头的行是注释,会被忽略
# 本地 HTTP 代理地址
# 配置 HTTP 和 HTTPS 代理时请填入该地址
# 或者在自动代理配置中填入 http://127.0.0.1:7777/pac
listen = http://127.0.0.1:7777
# SOCKS5 二级代理
# proxy = socks5://127.0.0.1:1080
# HTTP 二级代理
# proxy = http://127.0.0.1:8080
# proxy = http://user:password@127.0.0.1:8080
# shadowsocks 二级代理
proxy = ss://aes-256-cfb:password@1.2.3.4:8388
# cow 二级代理
# proxy = cow://aes-128-cfb:password@1.2.3.4:8388

由于这里使用SS作为二级代理,因此将其他二级代理的配置都注释了,可以根据自己的情况自行配制。

需要修改的有两个地方,首先是 listen 的端口,选一个好记又不冲突的吧。

另外是配置 SS 的参数。在 shadowsocks 二级代理处。

此处我已经使用了 aes-256-cfb 作为样例,可以根据自己的情况修改。冒号后填入SS密码,[code]@[/code]后填入服务器完整地址。

运行 cow-taskbar.exe 或者 cow-hide.exe 启动 cow 。前者会自动缩小到系统托盘,后者则是完全后台。不需要再额外运行 SS 本地程序。

配合浏览器端的代理扩展。例如 Chrome 上的 Proxy SwitchySharp 。在 HTTP/HTTPS 中填入 listen 参数。或者直接使用 pac 。

接来下就可以开始体验了。实际使用下,cow 的作用非常明显,相当于一个实时更新的 list ,无需再担心切换问题。

SS 和 cow 的代码、原理、其他使用方式都可以参照它们的 github 主页。其中SS还提供了 nodejs 及源码 等其他服务器版本,以及多平台的本地版本,可以在不同情况下使用。

The online Rubik's Cube solver program will help you find the solution for your unsolved puzzle.