IDEAL.BIRD注册过商标注册国际分类吗?还有哪些分类可以注册?

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
【2017年整理】驰名商标录.10.8.doc 103页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
【2017年整理】驰名商标录.10.8
你可能关注的文档:
··········
··········
驰名商标名录
年认定(19件)
标 商品/服务 商
商品/服务
同仁堂 药品 蝴蝶 缝纫机
茅台 酒 凤凰 自行车
青岛 酒 海尔 电冰箱
中华 卷烟 北极星 钟表
永久 自行车 霞飞 化妆品
五粮液 酒 泸州 酒
大白兔 糖果 张裕 葡萄酒
玉立 吸排油烟机 双星 胶鞋
熊猫 收音机、电视 英雄 自来水笔
常柴 柴油机
1997年认定(23件)
灯塔 油漆 马利 美术颜料
美加净 化妆品 金驼 电解镍
张小泉 剪刀 康佳 电视机
长虹 电视机 小天鹅 洗衣机
冰山 制冷设备 美菱 电冰箱
澳柯玛 冰柜 东风 汽车
嘉陵 摩托车 红豆 服装
森达 皮鞋 雅戈尔 服装
红梅 味精 健力宝 饮料
椰风 饮料 燕京 啤酒
杏花村 酒 郎 酒
1999年认定(111件)
回力 鞋 三枪 内衣
恒源祥 毛线 中华 牙膏
白猫 洗衣粉 三环 锁
金猴 鞋 轻骑 摩托车
海信 电视机 古井贡 酒
荣事达 洗衣机 红星 宣纸
露露 饮料 乐凯 胶卷
华北 药品 维维 豆奶
春兰 空调 大宝 化妆品
全聚德 餐饮食品 北大方正 电子出版系统
长城 计算机 星 台球桌
长城 润滑油 联想 计算机
东方红 拖拉机 椰树 饮料
两面针 牙膏 古越龙山 黄酒
娃哈哈 纯净水 鄂尔多斯 服装
丽珠 药品 TCL 电视、电话
格力 空调 乐百氏 乳制品
容声 电冰箱 虎头 电池
999 药品 夏利 轿车
片仔癀 药品 富贵鸟 鞋
安尔乐 卫生巾 剑南春 酒
1汽 汽车 钻石 硬质合金
中信 金融服务 国旅 旅游服务
同仁 医疗服务 天坛 家具
狗不理 餐饮服务 光明 乳制品
红双喜 乒乓球拍 锦江 酒店管理
海螺 衬衫 长安 汽车
风帆 蓄电池 三鹿 乳制品
三利 毛线 华龙 方便面
奇强 洗衣粉 鹿王 羊绒制品
伊利 冷饮 仕奇 西服
盼盼 防撬门 彩练 塑料农用膜
敖东 药品 新开河 人参
完达山 乳制品 恒顺 酱醋
好孩子 童车 东风 拖拉机
波司登 羽绒服 金城 摩托车
新科 影碟机 虎豹 衬衫
杉杉 西装 正泰 低压电器
万事利 丝绸 星星 冷柜
雕 洗涤用品 德力西 低压电器
飞跃 缝纫机 康奈 皮鞋
凤形 耐磨材料
万利达 影碟机
金得利 首饰模具 福耀 玻璃
凤凰 照相机 鸭鸭 羽绒服
小鸭 洗衣机 得利斯 低温肉制品
龙丰 方便面 华光 陶瓷
新飞 电冰箱 双汇 肉制品
莲花 味精 白鸽 磨料磨具
健民 药品 美尔雅 西服
红桃K 生血剂 万家乐 燃气具
科龙 空调 飞亚达 钟表
格兰仕 微波炉 雅倩 化妆品
珠江 钢琴 三金 中成药
养生堂 药品 地奥 药品
天山 纺织品 长岭 电冰箱
2000年认定(43件)
全力 洗衣粉 传化 洗衣粉
黑妹 牙膏 海 润滑油
东北 药品 龙虎 人丹、清凉油
鲁抗 药品 青春宝 药品
正昌 饲料机械 东风 柴油机
厦华Xoceco 电视机 鸿雁 低压电器元件
南孚 电池 春花 吸尘器
长江 手扶拖拉机 昌河 客货两用车
新大洲 摩托车 三角 轮胎
福辉 珠宝首饰 老凤祥 珠宝首饰
天鹅 粘胶人造丝 阳光 呢绒
梦兰 床上用品 AB 内衣
步森 衬衫 兰雁 牛仔布、牛仔服
黎明 服装 耶莉娅 服装
东艺 皮鞋 冠生园 糖果、糕点、蜂制品、速冻食品
喜之郎 果冻 海天 酱油
珠江桥 酱油 菱花 味精
正虹 饲料 旭日升 茶饮料
酒鬼 白酒 全兴 白酒
王朝 葡萄酒 云烟 卷烟
蓝星 清洗建设物、锅炉服务 白天鹅 宾馆服务
海鸥 照相机
2002年认定(97件)
中化 进出口代理 中银 银行服务
用友 财务管理软件 东来顺 餐饮服务
汇源 果汁饮料 统一 润滑油
大桥 金属焊条 郁美净 儿童化妆品
驼鸟 墨水 蓝天 牙膏
神威 中成药 雪驰 羽绒服
惠达 卫生陶瓷制品 耀华 浮法玻璃
天脊 硝酸磷肥 水塔 醋
河套 面粉 草原兴发 肉制品
蒙牛 乳制品 七星 润滑油
创世 西服 白山 粘胶丝
东宝 中成药 红星
上工图形 工业缝纫机 开开 衬衫
六神 花露水 汇丽 建筑装饰涂料、强
化复合地板
老庙 珠宝首饰 培罗蒙 西服
双良 中央空调 电工 荧光灯
江山 农药 洋河 白酒
隆力奇 蛇粉 菊花 味精
常发 柴油机 雅鹿 休闲服
大红鹰 卷烟 吉尔达 皮鞋
庄吉 西服 苏泊尔 高压锅
报喜鸟 西服 罗蒙 西服
胡庆余堂 中药 咸亨 餐饮服务
钱江 摩托车 浪沙
正在加载中,请稍后...你们是如何防止恶意注册的?
22:28:47 +08:00 · 2965 次点击
现在遇到个情况
客户端是手机短信验证码注册的,但是有个鸟人,恶意批量注册账号,全是不同的手机号,设备号每次也不同,应该是破解了客户端,然后用注册机搞得,现在没有有效的拦截方式
图形验证码和语音验证码加不了
19 回复 &| &直到
21:40:30 +08:00
& & 23:07:58 +08:00 via iPhone
限制 ip ?
& & 23:42:44 +08:00 via iPhone
人家根本不是注册,是你的短信接口被用来做短信轰炸机了。不能修改的话无解,顶多根据号码和 IP 做调用频率限制。
& & 23:48:07 +08:00 via Android
好像都不用破解客户端,直接监听网络,构造请求就差不多可以了。
要不就考虑想腾讯某些服务那样,双向短信认证?
& & 23:52:40 +08:00
原来有朋友公司遇到过, 一次性被刷了 2000 多的短信费. 一样也是注册验证码, 不知道楼主所谓的图形验证码加不了是个什么意思
& & 23:58:18 +08:00
@ IP 也是变动的
& & 23:58:44 +08:00
@ IP 和号码根本没有规律
& & 23:59:42 +08:00
@ 就是在客户端加图片验证码,这个会复杂注册流程,流失正常用户
& & 00:00:39 +08:00
@ 蛋疼啊,用户向我们发短信肯定不行。
& & 00:01:35 +08:00 via Android
邮箱+ 手机 +验证码(语音或发送到邮箱)+ ip +邀请码???
& & 00:02:55 +08:00 via Android
对了 或者可以和微信或者 QQ 绑定
Cloudxns 就是通过关注官方公众接受验证码的
& & 00:03:24 +08:00 via Android
微信我就不信他有 n 个 ?
& & 00:18:55 +08:00 via iPhone
有一个专门帮别人验证手机号的,可以挡 90%的可疑手机号不过很贵,一年 10 万
& & 00:19:36 +08:00
@ 微信有 N 个的不在少数
& & 01:15:54 +08:00
专门做过类似的服务,不差钱的话,直接上腾讯云(
如果想不花钱通过技术手段限制的话,做好长期作战的准备。
伪造身份进行注册无非这几个方面:设备指纹、 IP 、手机号。
据我所知,手机号和 IP 都是有渠道大量供应的,你防不了。
唯一能用技术防范的就是设备指纹。就是通过设备的各种信息,加上服务端拿来的一个加密串,计算得到一个值,然后设置一个阀值,如果计算得到的值超过这个阀值,就显示验证码、邮箱验证、滑块验证等加大注册难度。低于阀值就正常注册,一个短信验证码解决注册。
最低限度的保护正常用户,防范恶意用户。这个设备指纹的计算方法和阀值是根据不同业务场景而变化的,除非本身就做过类似的服务,否则很难拿捏好尺度。
如果是 app 的话, ios 我不太熟,安卓可以在某个隐秘位置写一个看似无意义的文件或伪装成普通日志文件,然后把一些信息写进去。大多数安卓下伪造设备都是用 xposed ,如果不专门监听文件写入事件的话,破解者不会发现这个文件,修改设备信息或清空缓存都不会删除这个文件。他伪装新机去注册的时候, app 可以先检查这个文件是否存在,拿这个文件里的内容信息和库里进行比对做为参考。
多说一句,图形验证码因为云打码的出现基本已经没啥用了,语音验证码因为本身是机器合成的声音,吐字清晰,语速匀称,在安卓端可以拦截通话然后录音,然后扔语音识别拿到结果。最多就是加大难度,但无法根除。
其实楼上说用微信的是一个不错的切入点,可以在用户方便和安全上达到一个平衡。
因为微信本身就是恶意注册泛滥的地方,腾讯这块做的很完善了已经,这也是为什么我开头推荐腾讯云。
直接用微信登录,用户进来了,再建议他绑定手机号,是目前看起来最简便可行的方案了。恶意注册的人想要破坏,就先得有大量微信号,一个微信号的成本是一个手机号的 10 倍,甚至 20 倍。
希望能帮到你。
& & 09:30:20 +08:00 via iPhone
上验证码加 ip 限制则可大大限制。
& & 09:36:33 +08:00
@ 我没说通过 IP 限制有用,只是你不做,会被更加滥用。另外,如果你的平台账号价值可以吸引到人大量注册我觉得你应该先高兴才对(有什么奖励推广的情况下例外)。
防御手段不是没有,但是想达到“完全避免”成本就比较高了。所以防御的思路不是“完全避免”,而是提高攻击者的“成本”,只要收益小于成本,没人无聊到花时间来搞你的。
& & 10:10:23 +08:00
@ 好的,谢谢回复
& & 10:55:06 +08:00
@ 谢谢你的建议
& & 21:40:30 +08:00
极验证,妥妥的
& · & 2109 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 17ms · UTC 12:08 · PVG 20:08 · LAX 05:08 · JFK 08:08? Do have faith in what you're doing.&p&丧夫之后满面愁容的RIO&/p&&br&&p&喝酸奶不小心撒了一脸的初音实&/p&&br&&p&正看着黑板想教案的大桥未久&/p&&br&&p&看着学长不知道在想什么的琥珀歌&/p&&br&&p&在街边等好姐妹一起逛街的濑亚美莉&/p&&br&&p&喜欢装鬼吓人的麻仓优&/p&&br&&p&在早班巴士上困得不行的麻生希&/p&&br&&p&在医院刚刚值完夜班迎接晨曦的美雪ありす&/p&&br&&p&不小心说了别人坏话不让你去告状的乃々果花&/p&&br&&p&在楼梯上滑倒,怒视你坐视不管的みなみ菜々&/p&&br&&p&准备捡掉在地上的教案的秋吉雏&/p&&br&&p&穿着lolita服装等你回家的cosplay爱好者水菜丽&/p&&br&&p&准备给你看新买耳环的都市丽人水沢のの&/p&&br&&p&构思本季度营销计划的司美琴&/p&&br&&p&在试衣间捏自己肚子上赘肉的小川あさ美&/p&&br&&p&拿着词典准备讲月考题的英语老师樱井步&/p&&br&&p&家长给你请来的家庭教师有村千佳&/p&&br&&p&课本撒了一地让你跟她一起捡的雨宫琴音&/p&&br&&p&隔壁很和善的经常炖肉给你吃的泽村阿姨&/p&&br&&p&光跑到你家跟你妈推荐塑形内衣的小姨椎名由奈&/p&&br&&p&楼上住着的资深秘书篠田あゆみ &/p&&br&&p&被举报,图全删了。= =&/p&&p&这些女优都已经退役,而且目前也都没有什么复出的迹象。应该都已经用回了自己的本名,过着自己的生活。希望她们幸福啦,人生的下半场也要继续努力!&/p&&p&其实说是惋惜,也不尽然,有时候也挺期待她们就这么离开,去过新的人生。就像《心灵捕手》里面大本对马特达蒙说的一样:虽然现在一起鬼混,但是我真心希望有一天去找你,但是你就这么不打招呼的消失了。&/p&&p&当然了我的最爱现在才要说:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f012f8fb2ddcc5e84f6d5dad6c14d2ee_b.jpg& data-rawwidth=&462& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&462& data-original=&https://pic3.zhimg.com/50/v2-f012f8fb2ddcc5e84f6d5dad6c14d2ee_r.jpg&&&/figure&&p&好想你啊……&/p&
丧夫之后满面愁容的RIO 喝酸奶不小心撒了一脸的初音实 正看着黑板想教案的大桥未久 看着学长不知道在想什么的琥珀歌 在街边等好姐妹一起逛街的濑亚美莉 喜欢装鬼吓人的麻仓优 在早班巴士上困得不行的麻生希 在医院刚刚值完夜班迎接晨曦的美雪ありす 不小心…
&figure&&img src=&https://pic4.zhimg.com/v2-79d16b88c1866826cac7d295a88138d6_b.jpg& data-rawwidth=&1620& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1620& data-original=&https://pic4.zhimg.com/v2-79d16b88c1866826cac7d295a88138d6_r.jpg&&&/figure&&p&我是一个 95 后 homeschooler,上过两个星期的小学之后就离开学校,从此在家自学至今。如果你是网页设计师或者学习过 Web 前端开发,那你很有可能看过我的&a href=&http://link.zhihu.com/?target=http%3A//www.dandyweng.com/%3Ffrom%3Dzhzl& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&个人主页&/a&。&/p&&p&在这个信息大爆炸的时代,想在网上和好友分享点东西已经有了太多选择。各种社交网络看起来似乎完全不同,有着不同的功能特色、满足着不同的需求,但实际上它们都有着一个共同点。下图右侧是常见的几款社交类 App 的界面,左侧是我将它们抽象化之后的样子,不难发现&strong&其实它们本质上其实都是一样的&/strong&&strong&:&/strong&上面是你的头像和昵称,然后是文字内容,或许还会有张图片。&/p&&p&这些元素组合起来就是一条信息,把很多条这样的信息从上到下叠在一起就成为了我们熟悉的信息流。&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-829edbcf724_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic1.zhimg.com/v2-829edbcf724_r.jpg&&&/figure&&p&信息流几乎是所有社交类 UGC 产品的核心。近十年以来,互联网已经发生了翻天覆地的变化,信息流却没有过多少根本性的改变。这种信息流的优势在于可以让你在非常短的时间内快速浏览大量碎片化的信息,起初感觉挺爽的,但现在越来越多人逐渐意识到信息太过碎片化并不是什么好事。&/p&&p&至于碎片化究竟是好还是坏,我在这里就不作评判了,不过随着 Twitter* 和微博相继放开 140 字符的限制,相信答案还是显而易见的。限制放开之后,尴尬的情况就出现了:传统的信息流并不适应较长的内容。因为它是一维的,内容只能朝着一个方向扩展,所以内容太长就会打破整体的浏览节奏。&/p&&p&对于这个问题,通常的解决方法是在信息流里仅显示少量预览内容,点击之后才展开或跳转到新页面查看全文。当然还有更简单粗暴的解决方法:把文字都拼到长长的渣画质图片里发布,也就是我们熟悉的长微博。这些处理方法虽然能解决问题,却一点也不优雅。在我看来,要完美地解决这个问题,唯有完全彻底地重新设计一个信息流。而这,正是我在过去九个月时间里所做的。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-e52ee18bcd82f859767d_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic2.zhimg.com/v2-e52ee18bcd82f859767d_r.jpg&&&/figure&&p&我发现,信息流的长短是由两个维度决定的,分别是时间轴和内容轴。传统信息流将这两个维度压缩进一维的空间里,扩展能力自然会受到限制。&/p&&p&毕竟在传统信息流出现的时代,我们与用户界面交互时所用的主要设备还是鼠标,而具体到翻阅网页时,则是鼠标的滚轮——只能上下滚动。虽然在移动触屏设备成为主流的今天,这个问题早已不复存在,无论是上下滑动还是左右滑动都是习以为常的操作,但信息流的设计却依然继承着 PC 时代遗留下来的传统操作习惯,未能充分利用触摸屏幕的优势。&/p&&p&现在,是时候改变一下了。&/p&&p&我应用了一种全新的&strong&二维信息流&/strong&,它可以往水平和垂直两个维度扩展,横向是时间,纵向是内容。这种经过“升维”的设计完全突破了内容长度的限制。用户的发布内容显示在长度可变的卡片里,左右滑动浏览不同的卡片,上下滑动查看单张卡片的内容。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b466ca0e0f56f9779549_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic2.zhimg.com/v2-b466ca0e0f56f9779549_r.jpg&&&/figure&&p&既然有理论上可以承载无限长度内容的信息流,如何充分利用它?这就要说到我的第二大创新——模块化内容。也就是说,卡片里的&strong&所有内容都是由模块组成的&/strong&,每种模块都有特定的功能,比如想发一段文字,就用文字模块;要分享一组照片,则可以用图片模块。&/p&&p&我目前已经开发了文字、图片、语音和位置模块,还有更多模块正在设计和开发中,包括视频和涂鸦板等等。这些&strong&模块可以任意添加、排序及组合。&/strong&每个模块也有许多可自定义的细节,比如文字的字体、字号和对齐方式,或者图片的形状和排列方式等等;当你分享所在位置时,甚至连地图的缩放比例都可以调节。&/p&&p&不过,要是有些时候懒得调整那么多细节,只想简单快速地分享些东西呢?没问题。我开发了一个&strong&自动排版引擎&/strong&,它会分析每张卡片的内容与模块组合情况,动态计算与调整各个模块的样式、尺寸和间距等几十项参数。因此,无论你输入的是短短几个字,还是包含许多模块的复杂内容,都能自动为你生成一张好看的卡片。&/p&&p&智能的排版渲染配合高度个性化的模块化设计彻底摆脱了固定格式的束缚,让你充分发挥自己的想象力,分享不拘一格。&/p&&p&&strong&“变化”是这个 App 的核心,所以我给它起的名字就是:Vary。&/strong&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a5aef6fb0e_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic3.zhimg.com/v2-a5aef6fb0e_r.jpg&&&/figure&&p&Vary 是一个定位于在熟识好友间分享生活的社交网络,重点是私密和清净。在这里,没有网站链接,没有广告和软文,没有代购和营销,没有无谓的鸡汤,也没有繁重的人际关系。&strong&只是在喧闹纷乱的网络世界里,一个可以安安静静地与你在乎的、真正关心你的人分享和记录自己生活的地方。&/strong&&/p&&p&如今的互联网世界,已经有了太多助你结识陌生人的社交产品,但专为私密好友间交流的却寥寥可数。在我看来,这很大程度上是因为普遍观点认为这种产品难以大量聚拢用户和维持活跃度,若从商业角度出发,无论是大型互联网公司还是创业公司都不太会优先考虑这种产品。&/p&&p&然而 &strong&Vary 是我出于兴趣爱好而制作的个人作品&/strong&,商业利益并不是我的首要考虑,因此在这里你会看到许多与主流互联网产品“反其道而行”的设计:使用纯数字帐号体系,只有知道这个帐号的人才能向你发送好友请求,除此之外无法通过其他途径搜索到你;只有你同意与对方成为好友后,对方才能看到你发布的卡片;不会通过匹配手机或邮箱向你推荐那些你可能认识(但永远不想加为好友)的人;你发出的评论和点赞也只有接收者可见。&/p&&p&总而言之,一切尽在你的掌控之中。&br&&/p&&p&此外,在 Vary 上可添加的好友数量是有限的,这个上限数量会随着你的使用情况逐渐增加。如果你想让更多人看到你创作的卡片,可以用&strong&内置的分享功能&/strong&将卡片分享到微博、微信或者其他社交网络,也可以生成分享链接直接发送给别人。&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-6ed7282cfc86b746c925_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic2.zhimg.com/v2-6ed7282cfc86b746c925_r.jpg&&&/figure&&p&我是一个极简主义者,相信这点已在 Vary 的设计上体现得淋漓尽致。&/p&&p&通常简化设计的思维方式是做减法,即思考现有的东西里哪些是可以去除的;而我则喜欢从零开始做加法:彻底放下成见,从根本上思考每一个元素存在的必要性。这种思维方式在 Vary 的界面、交互和功能上都有所体现。&br&&/p&&p&比如注册帐号时,你需要填写的东西&strong&精简到了极致&/strong&:不需要任何个人信息,也不用验证激活,只要设置一个登录密码——没错,只填个密码就能完成注册并开始使用,比第三方帐号登录还方便。&br&&/p&&p&同时我也在不断研究如何通过技术手段来引导交互层面的创新,例如 Vary 的 iOS App 可以检测手指接触屏幕的面积,并以此来调整卡片的滚动速度:用指尖滑动时,一次只会滚动一张卡片;整个手指贴在屏幕上滑动时,则会根据你滑动速度的惯性来连续滚动多张卡片。&br&&/p&&p&界面设计方面,自然是我代表性的简约风格,并采用以高冷暗色系为主的纯黑白设计,除极少数 UI 元素外再无任何颜色,层次感由灰度、透明度与模糊效果来体现。&br&&/p&&p&我一向注重细节,&strong&Vary 的界面细节更是以艺术品的标准来要求的,&/strong&每一个图标、每一帧动画都由我亲手绘制并在程序中实现,处处细节都经过反复打磨,尽可能追求完美。若从理性的商业角度出发,这种程度的追求几乎是不可理喻的,因为它的投入产出比简直惨不忍睹,但我并不在乎。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e688bc34eda3b0d4c6e3650f_b.jpg& data-rawwidth=&1920& data-rawheight=&1280& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-e688bc34eda3b0d4c6e3650f_r.jpg&&&/figure&&p&看过我个人网站的朋友们应该都知道,设计和编程是我的两大爱好,我也一直在探索如何将它们更好地结合起来。&/p&&p&过去几年里,我每年都会彻底重新设计和开发一次我的个人主页(&a href=&http://link.zhihu.com/?target=http%3A//www.dandyweng.com/%3Ffrom%3Dzhzl& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&翁天信 · Dandy Weng&/a&),以展示我在过去的一年里所学会的新东西。然而 Vary 的开发,则是将过去这些经验全部整合在一起,再闭关修炼了一年多之后,才得以协调使用六种计算机语言和十余种开源框架来实现的。&/p&&p&经过一个多月的测试和细节打磨,目前 Vary 已经上架 App Store。初版仍有些不足之处,我会在后续版本中逐渐完善,希望大家多提些建议。&/p&&br&&p&最后,我开通了一个微信公众号,任何与 Vary 相关的事情都可以在这里和我交流,以及提交建议和 bug 反馈等等,有问必答。我也会将 Vary 的最新动态通过这个公众号推送给大家。总而言之,如果你对 Vary 感兴趣,就在微信搜索 VaryApp 关注一下吧。期待你的反馈。&/p&&p&&b&// 3 月 15 日更新:关于 Android 版本&/b&&/p&&p&Vary 目前只有 iOS 版本,正式上线后我会将重点转移到网页版的开发。Android 开发我还没学过,实话说以后恐怕也很难找出时间精力来学,所以这方面我希望能够与其他开发者合作。如果你是一个 Android(或 WP)平台开发者,认为自己有能力开发 Vary 的 Android/WP 版本,且愿意为 Vary 献出一分力的,可以私信跟我联系,我会支付一定报酬作为答谢。&/p&&p&P.S. 要是有 iOS 或 Web 前端的同学有兴趣参与 Vary 开发也可以跟我联系。&/p&&p&谢谢大家的支持!&/p&
我是一个 95 后 homeschooler,上过两个星期的小学之后就离开学校,从此在家自学至今。如果你是网页设计师或者学习过 Web 前端开发,那你很有可能看过我的。在这个信息大爆炸的时代,想在网上和好友分享点东西已经有了太多选择。各种社交网络看起来…
&p&谢邀。私人微信andylee2017,欢迎神交???&br&&/p&&p&大约两周半前,我英语学习的 homework 是听写《走遍美国》。我不是英专生,学了这么多年英语,第一次感觉自己有点英专生的气质。&/p&&h2&0 准备工作&/h2&&p&在正式开始本文的学习,我想简单阐述一个貌似大家都知道,但大家又容易忽略的思维。&/p&&p&即学习一门知识,必须&b&“书、课、笔记”&/b&三者结合。这个理念,最早来自我去年准备司法考试体会到文科类知识(尤其需要记忆,可大脑又是最不擅长记忆)学习,必须把这三者结合起来,才能克服记忆上的弱点(在本文中我只能做简单强调,不系统阐述,该核心思想,还涉及知识管理中保存、分享、应用和创新等话题)。&/p&&p&联系到本阶段听写联系,需要事先做好的准备工作是:&/p&&p&1、书,即纸质版中英文剧本。&/p&&p&2、课,即英文无字幕版美剧。&/p&&p&3、笔记,即自己对所学内容进行整理归纳,甚至扩展知识,推荐康纳尔笔记法。&/p&&p&经过这个阶段的学习,我对听写有了3个方面的收获,下面分别作介绍。&/p&&h2&1、听写基本步骤&/h2&&p&《走遍美国》分成两个部分,一部分是正课,共26课,每课分成3幕,还有一部分是focus in,相当于讲解,如果作为听写练习,直接看正课即可。听写是练习精听最好的方法,听写时步骤如下:&/p&&p&第一步:完整地听一遍所有内容,做大概了解,抓住一些核心词汇,为听写适当减轻难度。&/p&&p&第二步:以每个单句或意群为单位,听一句,暂停后写,继续听下一句,整个视频过一遍。此时,最好是认真端坐在电脑前,边看视频边听写。推荐一个软件Aboboo,这个软件的最大优势是对视频自动断句,相当于把任务量化和可视化。同时,如果有配套原文下载,可以自动校对听写内容。&/p&&p&第三步:听写完一遍后,对于没有听写下来的内容,重听第二遍进行补充。此时,不用直接过一遍,而是遇到没有听懂的句子后退这一句的开头重听。&/p&&p&第四步:如果一句话反复听五遍还是没有听出来,做好标记、放弃,继续往下听。&/p&&p&第五步:这一篇听完后,进行最最重要的校对工作。着重校对两个方面:&/p&&p&一是没有听出的意群:包括连读、弱读等,分析错误原因并做笔记;&/p&&p&二是没有听出来或听错的词句,在听写笔记下面集中记录。&/p&&p&关于听写的内容写在哪里?我个人建议用手写在笔记本上,这样可以达到手、眼、脑三者的紧密结合。当然,我也不反对用电脑打字,如果把听写下来的内容直接输入上文提到的Aboboo软件中,可以自动校对,省了校对的时间。这两种听写方式(手写和电脑输入)各有优劣,各人根据自身情况选择。&/p&&h2&2、听写方法升级版&/h2&&p&这部分内容是我结合自己的实际能力水平摸索出来,主要目的有三个:降低难度、节约时间、确保让自己每天坚持。该方法不一定适合所有人,请阅读后斟酌或在最下方评论区提出宝贵的改进意见。&/p&&p&从听写的角度看,像《走遍美国》这样的三幕剧别看每幕只有3-5分钟,但如果按照精听精练的标准来衡量还是挺难的。&/p&&p&我一般听一幕需要20分钟左右的时间,三幕就是1个小时。因为我听写在纸质的笔记本上(推荐用国誉B5活页本,每页对折成两列书写。纸好,写着舒服,活页也便于后期增加笔记,面对大量书写,再配上一支根号三的中性笔。相关用品我在 &a href=&//link.zhihu.com/?target=http%3A//www.jianshu.com/p/a890fef7b3cb& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&双11特辑:这6款学习神器买了不剁手&/a& 专门做过介绍)全文校对约40-50分钟,如果再对个别内容查找和学习,每天要有2-3小时才能完成当天的听写。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-4eb318ac38ecf066f1ed91_b.jpg& data-rawwidth=&1240& data-rawheight=&1240& class=&origin_image zh-lightbox-thumb& width=&1240& data-original=&https://pic2.zhimg.com/50/v2-4eb318ac38ecf066f1ed91_r.jpg&&&/figure&&p&相信很多人跟我一样早已不是学生,每天都有一堆事要面对,连续26天这么干难度是灰常大的。从克服拖延症的角度讲,我不希望出现“断档”。特别是英语学习,停1天就能停2天,停2天就能停1周,等停了好几天再恢复学习英语,好不容易积累起来的功力早已尽废,又得重头来。而有的人,干脆就“不来”了。&/p&&p&所以,在坚持了4、5天后,我发现不能按照上文的老听写方法来做,经过思考和摸索,我给自己制定了如下听写方法升级版:&/p&&p&首先,再次缩小任务。这里要用到Aboboo软件,每一幕通常在40-70句对话,我把听写从原来的一幕播放一遍缩小为每10句或20句算作一遍,相当于把一幕剧再次切割成了4-8个更小的听写单元,再重复上述第一步到第四步。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-eeec96d564aa943ecf92cfe_b.jpg& data-rawwidth=&959& data-rawheight=&679& class=&origin_image zh-lightbox-thumb& width=&959& data-original=&https://pic3.zhimg.com/50/v2-eeec96d564aa943ecf92cfe_r.jpg&&&/figure&&p&然后,听写断舍离。如果听力已达到一定水平,很多对话确定能听懂,或者是诸如well、hello、thank you、speaking of blablabla 等句型就不要浪费时间写了。把时间用在确实听不懂的地方,集中精力去听写。&/p&&p&最后,校对和做笔记。最后这一步就不详解,通过前两个步骤,听写任务难度降低,校对的工作量也随之减少,剩下的大部分时间用来对当日听写笔记做更系统的整理。&/p&&p&采用这种改进方法后,新的时间和任务分布是这样的:1、先10分钟回顾前一天的笔记;2、30分钟听写重点部分(对本已听懂的内容直接断舍离);3、对照打印好的中英文剧本,花30分钟,边校对边留心舍弃听写的对话是否有遗漏的内容;4、最后用1-1.5小时整理笔记。&/p&&p&采用此种方式,约2.5小时完成听写,但学习效果加倍。&/p&&h2&3、做好笔记是重点&/h2&&p&对二语习得研究有重要贡献的Van Patten提出了输入加工理论,即对有输入(input)就一定有习得(intake 大脑真正吸收)提出了质疑。&/p&&p&Van Patten 在 input 到 intake 之间增加了 processing(加工)的概念,即大脑需要对输入的语言材料进行一定程度加工从而达到被大脑吸收的程度。根据我自己学习经历的理解,这个processing 最好的方式就是做笔记。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-edfbe4ed553d_b.jpg& data-rawwidth=&1280& data-rawheight=&968& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic4.zhimg.com/50/v2-edfbe4ed553d_r.jpg&&&/figure&&p&我认为笔记要重点记录三项内容:1、生词;2、语法(含地道用法);3、英美文化。&/p&&p&做笔记需要注意的是:&/p&&p&第一,生词是重中之重。有人可能会疑问不应该是语法、地道用法和美国文化吗?但从我向一同学习英语的朋友访谈情况看,听写只是解决“听”的问题。&/p&&p&我相信大部分人在坚持每天都在鞭策自己“听”的情况下能够基本听懂常速语流。但是,你得注意到都听了什么?实际词汇量是很少的。&/p&&p&不信,你马上拿任一部美剧出来看,会发现然并卵。这是为什么?主要就是词汇量不够。&/p&&p&不用专门死记单词,把看中文书切换到英文原版书,把周边的朋友扩展到英美国家人士,通过各种渠道创造语言环境,慢慢积累词汇。这个过程会很漫长,请做好思想准备和必胜的信心。
&/p&&p&只要学习方向正确,剩下的就是坚持。用一句李笑来在《人人都能用英语》中的话说,就是“用进废退”!
&/p&&p&第二,学好地道用法和英美美文化。听写英语还有一个隐藏的“坑‘是——即使你听懂了每一个单词把它们都写下来了。但是,由于用法和文化差异,你并不懂这句话的实际意思。&/p&&p&我以前文截图的第19集第二幕为例。当Susan的妈妈和嫂子帮她整理婚纱时,说:“And now for something old, something new, something borrowed, and something blue.”&/p&&p&你肯定和我一样听懂了“现在,来点旧的、新的、借的、蓝色的”,毕竟单词太简单。但这句话究竟什么意思啊?经查询,我得到如下知识点。&/p&&blockquote&西方传统婚礼中,有新,有旧,有借,有蓝,是什么意思?
1、有旧指的是新娘可以穿或携带一件旧的东西,旧东西代表她继续与她的家人和她的旧生活的关系。
2、有新指的是新娘可以穿或携带穿新的东西,新东西代表新娘的新生活和婚姻的成功和希望。
3、有借指的是新娘应该有一个东西是从一个幸福的婚姻的朋友借来的,据说他们的幸福会惠及于新娘。
4、有蓝指的是新娘可以穿或携带一件蓝色的东西,这可以追溯到圣经时代,当时蓝色结婚礼服代表着纯洁、忠诚和爱情。随着时间的推移,这已经发生了变化,从穿着蓝色的衣服穿上一个蓝色的乐队的底部,新娘的婚纱。&/blockquote&&p&现在明白了吧。因此,除了必要的词汇量,地道用法和英美文化是提高英语听说能力的高阶知识。&/p&&p&有人可能会认为:我是中国人,需要懂那么多干嘛。在我看来,作为一个现代人,必要的社会文化知识,无论中外都是非常有必要的。人的能力和精力有限,要学会从别人身上汲取“养分”,而汲取方式就是人际交往。&/p&&p&元旦新年,我应邀去一位外国朋友家做客,当我看到他新添置的水阻划船机时,我马上跟他半开玩笑地说:“呀,你是准备竞选下届美国总统把特朗普‘干’掉吗?”话毕,朋友哈哈大笑(这句话的笑点来自美剧《纸牌屋》主人公Frank,他几乎每天都在自家地下室用水阻划船机锻炼身体)。这种玩笑方式,会让老外觉得你很懂他们的文化和生活,无形中增加关系的亲密程度。&/p&&p&因此,作为input 到 intake 之间的 processing,务必做好笔记以促进大脑吸收。&/p&&p&《走遍美国》是一部经典的美语学习素材,在做笔记的过程中我搜索到一本十多年前的配套电子书,里面涵盖了每一集的词汇、习语和文化背景,非常值得细读。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-61ea9c87f8da1fd306c503ca3b58d2be_b.jpg& data-rawwidth=&272& data-rawheight=&186& class=&content_image& width=&272&&&/figure&&p&《走遍美国》电子书百度云链接:&a href=&//link.zhihu.com/?target=http%3A//pan.baidu.com/s/1kVjZfnT& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pan.baidu.com/s/1kVjZfn&/span&&span class=&invisible&&T&/span&&span class=&ellipsis&&&/span&&/a& 密码:r8yu&/p&&h2&4 本阶段特别提示&/h2&&p&也许校对、整理笔记等工作用电脑更方便。但写到文末,我还是强烈建议&b&把你的手和笔用起来&/b&,尽量少用电脑做听写和笔记。
&/p&&p&为什么我一再强调这个观点?&/p&&p&如果是用电脑,你的学习过程主要是眼和电脑之间交互,手部虽然在打字,其实手功能运用有限,真正入脑的东西就更少。但如果是用纸和笔,你的学习反馈过程是眼、手(一笔一划写字)、电脑、人脑。&/p&&p&别小看增加手写的环节,旧观点认为:人类从动物中分离出来是人脑的发展。新观点发现:在深层次上,&b&人类的进化来自于手功能的进步。&/b&&/p&&p&关于这一观点,你可以&b&从小孩子的成长得到启示&/b&。人从母体中形成,就是一个快速进化的过程。婴儿出生后,随着年龄的增长,手部精细动作的培养是幼儿成长的关键。&/p&&p&&b&很多家长忽视了小孩子手部锻炼的重要性。&/b&生活上自己动手吃饭、穿衣,玩乐上橡皮泥、挖沙、剪纸、手工等都可以促进小朋友手的发育。这一发展的成果,幼儿园阶段不会有太大区别。但到了小学阶段,因为需要完成一定数量的手写作业,此时小朋友之间的差别才会显现出来。&/p&&p&手指(包括手腕)运用灵活的孩子,写作业就比较快,脑随手动,动脑筋也快,良性循环。否则,手功能发育不当,智力发展就会受到影响。&/p&&p&因此,在本文最后,特别提示:作为成年人的你,请将纸和笔用起来吧,现在继续“发育”还来得及。&/p&&p&&u&&b&更多精彩,欢迎关注公众号「李安迪」ID:andynlp 或扫描(长按)下方二维码关注,那边经常掉小礼物哦&/b&&/u&&/p&&br&&p&&a href=&//link.zhihu.com/?target=http%3A//weixin.qq.com/r/7Exrc63EGfBmrekQ9xn_& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&weixin.qq.com/r/7Exrc63&/span&&span class=&invisible&&EGfBmrekQ9xn_&/span&&span class=&ellipsis&&&/span&&/a& (二维码自动识别)&/p&
谢邀。私人微信andylee2017,欢迎神交??? 大约两周半前,我英语学习的 homework 是听写《走遍美国》。我不是英专生,学了这么多年英语,第一次感觉自己有点英专生的气质。0 准备工作在正式开始本文的学习,我想简单阐述一个貌似大家都知道,但大家…
黑命贵其实是白人统治阶级为了自己的利益弄出来的玩意,可能有些人比较纳闷,黑命贵不是极大损害了白人的利益吗?怎么还成了维护白人统治利益的产物?其实这才是说明西方人有多会指鹿为马颠倒黑白了,不仅把白人高层洗白得干干净净,还把全世界其他国家的二傻子哄住了,还真以为美国人善良得不行,而且看透的人还不敢说,你一说就成了歧视黑人。&br&&br&其实黑人真正的问题是啥?其实是受教育程度低,社会环境混乱,社会保障缺乏,如何保障黑人的权益?当然就是让每一个黑人小孩受到充足的教育,有完善的政府职能机关服务,有安定的社会环境,但是这些措施一是需要大量的钱,这笔巨资得有人掏腰包,更重要的是受到完善教育的黑人将会颠覆白人的统治地位,知识将不再由白人垄断,这才是最要命的问题,那么如何摆平黑人由于待遇不公导致的怨气?那就是盘剥底层白人的利益来安抚黑人啦,所以无论是黑命贵还是黑人社区的治安问题,黑人素质低下问题,大学招生优待黑人问题,这些问题都是由底层白人来买单,真正的高层白人一分钱也不用出,而且这种赤裸裸的推卸责任以及打压底层的做法有一个美丽的名字,叫做种族平等,甚至被盘剥的底层白人和底层黑人还为此叫好,一个觉得是赎罪,一个觉得黑人地位的进步,围观的其他国家屁民还留下感动的泪水:你看美国的种族多和谐,美国白人真是心地善良啊,天底下简直没有比这更搞笑的事情了。&br&&br&黑人真正的地位提升是自己抗争来的,用鲜血和生命换来的,而当黑人用暴力抗争取得公民资格后,却被掌握了知识的白人高层活活的玩死,被人卖了还数钱,高层白人依然用规则玩弄黑人,现在混入高层作为点缀的黑人不过也是黑皮白心罢了,真正能让高层白人恐惧的是黑人社区林立的大学,技校,以及他们培养出来的大量黑人有知识文化和野心的海量知识分子,但是现在呢,黑人社区啥逼样不用我说吧,有哪个黑皮白心的所谓黑人骄傲会在黑人社区?现在所谓的黑命贵不过是割底层白人的肉喂底层黑人罢了,最重要的是这是底层白人给高层白人付钱,而高层一个子都不用掏,只需要弄几个黑皮白心的极少数黑人精英当点缀来一起压榨底层黑人就行了,而且还能在全世界获得一个灯塔国的好名声。&br&&br&要记住,知识的垄断才是特权的根本,知识就是力量这句话不是白说的,屁民都掌握了文化就是特权阶级的末日,任何国家都是老百姓文化程度越低特权阶级越嚣张,因为你没有知识就只能被人当傻子玩,古代中国手无缚鸡之力的文官能把武将压制得死死的,皇帝都不得不讨好知识分子,甚至连有点野心的农民军领袖都得对他们客客气气的,就是因为他们垄断了知识,黑人到现在都不明白白人对他们真正的压迫不是什么警察开枪啦,什么哪个主持人又侮辱黑人啦,什么奥斯卡全是白人得奖啦,这些都是障眼法,都是特么屁都算不上的玩意,他们最需要的是高质量的基础教育,让每一个黑人至少读完高中的和白人一个水平的基础教育,这才是他们真正应该斗争的重点,而不是那些狗屁不沾边的玩意,那些东西有屁用,障眼法而已,他们在那些狗屁玩意的每一次胜利,都是高层白人故意把他们往沟里带的,让他们忽略真正能要白人的命,能彻底粉碎白人统治的武器。&br&&br&所以为什么美国种族平等变成了不敢谈黑人问题?高层白人故意造就的氛围罢了,你不谈黑人问题,才会把真正的问题掩盖起来,假如我在美国,我可能刚说第一句话就被打倒在地了:什么!你居然说黑人素质低!你这个种族歧视的人渣,于是还没谈到教育问题就已经被踏上一万只脚永世不得翻身了,所谓的融入主流社会的黑人,基本上都是什么艺人和体育明星,不过是权贵的玩物而已,压根就是白人统治秩序的附属物品,当然他们影响力巨大,可以用来麻痹那些底层黑人,一起做美国梦。像奥巴马这种,我一看他作为一黑人混血儿,压根不谈白人垄断知识这个核心问题,继续把同性恋黑命贵这个坑越挖越深,把黑人同胞往沟里带,我就知道这货压根就是黑皮白心,当然不是黑皮白心也压根做不成总统。
黑命贵其实是白人统治阶级为了自己的利益弄出来的玩意,可能有些人比较纳闷,黑命贵不是极大损害了白人的利益吗?怎么还成了维护白人统治利益的产物?其实这才是说明西方人有多会指鹿为马颠倒黑白了,不仅把白人高层洗白得干干净净,还把全世界其他国家的二…
&figure&&img src=&https://pic4.zhimg.com/v2-cc7b6ddad4d3717c6deac7f3dcbf587a_b.jpg& data-rawwidth=&1600& data-rawheight=&343& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic4.zhimg.com/v2-cc7b6ddad4d3717c6deac7f3dcbf587a_r.jpg&&&/figure&&p&Nginx基本配置备忘从属于笔者的&a href=&https://link.zhihu.com/?target=https%3A//github.com/wxyyxc1992/ServerSideApplication-Introduction-And-Practices& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&服务端应用程序入门与实践&/a&,更多知识体系参阅&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&2016:我的技术体系结构图:Web/ServerSideApplication/MachineLearning&/a&。&br&&/p&&h1&Nginx 配置&/h1&&p&在了解具体的Nginx配置项之前我们需要对于Nginx配置文件的构成有所概念,一般来说,Nginx配置文件会由如下几个部分构成:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 全局块
# events块
# http全局块
# 虚拟主机server块
# server全局块
# location块
location [PATTERN]
location [PATTERN]
# http全局块
&/code&&/pre&&/div&&p&在上述配置中我们可以看出,Nginx配置文件由以下几个部分构成:&/p&&ul&&li&&p&全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。&/p&&/li&&li&&p&events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。&/p&&/li&&li&&p&http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。&/p&&/li&&li&&p&server块:配置虚拟主机的相关参数,一个http中可以有多个server。&/p&&/li&&li&&p&location块:配置请求的路由,以及各种页面的处理情况。&/p&&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&########### 每个指令必须有分号结束。#################
#user administ
#配置用户或者组,默认为nobody nobody。
#worker_processes 2;
#允许生成的进程数,默认为1
#pid /nginx/pid/nginx.
#指定nginx进程运行文件存放地址
error_log log/error.
#制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
#设置网路连接序列化,防止惊群现象发生,默认为on
#设置一个进程是否同时接受多个网络连接,默认为off
#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections
#最大连接数,默认为512
#文件扩展名与文件类型映射表
default_type
application/octet- #默认文件类型,默认为text/plain
#access_ #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myF
#combined为日志格式的默认值
#允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k;
#每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65;
#连接超时时间,默认为75s,可以在http,server,location块。
# 定义常量
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333
error_page 404 https://www.baidu. #错误页
#定义某个负载均衡服务器
keepalive_requests 120; #单连接请求上限次数。
server_name
127.0.0.1;
#请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#index vv.
#设置默认页
proxy_pass
#请求转向mysvr 定义的服务器列表
deny 127.0.0.1;
allow 172.18.5.54; #允许的ip
&/code&&/pre&&/div&&h1&虚拟主机与静态站点&/h1&&blockquote&&ul&&li&&p&&a href=&https://link.zhihu.com/?target=https%3A//www.nginx.com/resources/admin-guide/serving-static-content/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SERVING STATIC CONTENT&/a&&/p&&/li&&/ul&&/blockquote&&p&本部分概述如何配置Nginx进行静态内容服务,Nginx的静态内容分发能力还是非常强大的。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&http {
server_name
www.domain1.
access_log
logs/domain1.access.
location / {
index index.
/var/www/domain1.com/
server_name
www.domain2.
access_log
logs/domain2.access.
location / {
index index.
/var/www/domain2.com/
&/code&&/pre&&/div&&h2&虚拟主机配置详解&/h2&&h3&主机与端口&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&listen 127.0.0.1:8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000;
# other params
listen 443 default_
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024
&/code&&/pre&&/div&&h3&服务域名&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 支持多域名配置
server_name www.barretlee.com barretlee.
# 支持泛域名解析
server_name *.barretlee.
# 支持对于域名的正则匹配
server_name ~^\.barret\.com$;
&/code&&/pre&&/div&&h3&URI匹配&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&location = / {
# 完全匹配
# 大小写敏感 ~
# 忽略大小写 ~*
location ^~ /images/ {
# 前半部分匹配 ^~
# 可以使用正则,如:
# location ~* \.(gif|jpg|png)$ { }
location / {
# 如果以上都未匹配,会进入这里
&/code&&/pre&&/div&&h2&文件路径配置&/h2&&h3&根目录&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&location / {
root /home/barret/test/;
&/code&&/pre&&/div&&h3&别名&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&location /blog {
alias /home/barret/www/blog/;
location ~ ^/blog/(\d+)/([\w-]+)$ {
# /blog//article-name
# -& /blog/-article-name.md
alias /home/barret/www/blog/$1-$2.
&/code&&/pre&&/div&&h3&首页&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&index /html/index.html /php/index.
&/code&&/pre&&/div&&h3&重定向页面&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&error_page
error_page
error_page
location / {
error_page
location @fallback {
# 将请求反向代理到上游服务器处理
proxy_pass http://localhost:9000;
&/code&&/pre&&/div&&h3&try_files&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&try_files $uri $uri.html $uri/index.html @
location @other {
# 尝试寻找匹配 uri 的文件,失败了就会转到上游处理
proxy_pass
http://localhost:9000;
location / {
# 尝试寻找匹配 uri 的文件,没找到直接返回 502
try_files $uri $uri.html =502;
&/code&&/pre&&/div&&h2&缓存配置&/h2&&blockquote&&ul&&li&&p&&a href=&https://link.zhihu.com/?target=https%3A//segmentfault.com/a/9795& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HTTP 缓存的四种风味与缓存策略&/a&&/p&&/li&&/ul&&/blockquote&&h3&Expire:过期时间&/h3&&p&在Nginx中可以配置缓存的过期时间:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span& location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Vary Accept-E
&/code&&/pre&&/div&&p&我们也可以添加更复杂的配置项:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&
location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|svg)$ {
expires 30d;
## No need to bleed constant updates. Send the all shebang in one
## fell swoop.
## Set the OS file cache.
open_file_cache max=3000 inactive=120s;
open_file_cache_valid 45s;
open_file_cache_min_uses 2;
open_file_cache_
&/code&&/pre&&/div&&h1&反向代理&/h1&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&events{
upstream ggzy {
server 127.0.0.1:1398 weight=3;
server 127.0.0.1:1399;
# 80端口配置,可配置多个Virtual Host
index index index.htm index.py index.
server_name app.truelore.
location / {
proxy_pass_header S
proxy_set_header Host $http_
proxy_set_header X-Real-IP $remote_
proxy_set_header X-Scheme $
proxy_pass http//
&/code&&/pre&&/div&&h2&NodeJS Application&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&const http = require('http');
http.createServer((req, res) =& {
res.end('hello world');
}).listen(9000);
&/code&&/pre&&/div&&p&任何请求过来都返回 hello world,简版的 Nginx 配置如下,&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&events {
# 这里可不写东西
listen 127.0.0.1:8888;
# 如果请求路径跟文件路径按照如下方式匹配找到了,直接返回
try_files $uri $uri/index.
location ~* ^/(js|css|image|font)/$ {
# 静态资源都在 static 文件夹下
root /home/barret/www/static/;
location /app {
# Node.js 在 9000 开了一个监听端口
proxy_pass http://127.0.0.1:9000;
# 上面处理出错或者未找到的,返回对应状态码文件
error_page
error_page
&/code&&/pre&&/div&&p&首先 try_files,尝试直接匹配文件;没找到就匹配静态资源;还没找到就交给 Node 处理;否则就返回 4xx/5xx 的状态码。&/p&&h2&Upstream Cache&/h2&&blockquote&&ul&&li&&p&&a href=&https://link.zhihu.com/?target=https%3A//www.nginx.com/blog/nginx-caching-guide/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A Guide to Caching with NGINX and NGINX Plus&/a&&/p&&/li&&/ul&&/blockquote&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&http {
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
location ~* ^.+\.(js|ico|gif|jpg|jpeg|png|html|htm)$ {
expires 7d;
proxy_pass http://img.example.
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1h;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
&/code&&/pre&&/div&&h1&HTTPS&/h1&&blockquote&&ul&&li&&p&&a href=&https://link.zhihu.com/?target=https%3A//segmentfault.com/a/5253& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HTTPS 理论详解与实践 &/a&&/p&&/li&&/ul&&/blockquote&&h2&Let's Encrypt 证书申请&/h2&&p&Let's Encrypt 为我们提供了非常方便的命令行工具&a href=&https://link.zhihu.com/?target=https%3A//certbot.eff.org/%23ubuntuxenial-nginx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&certbot&/a&,笔者是在Ubuntu 16.04的机器上进行配置,因此只要执行如下命令即可:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 安装letsencrypt命令行
$ sudo apt-get install letsencrypt
# 独立的为example.com与www.example.com申请证书
$ letsencrypt certonly --standalone -d example.com -d www.example.com
# 自动执行证书刷新操作
$ letsencrypt renew --dry-run --agree-tos
&/code&&/pre&&/div&&h2&基本HTTPS配置&/h2&&p&基本的HTTPS支持配置如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&server {
listen 192.168.1.11:443;
server_name
#为一个server{......}开启ssl支持
#指定PEM格式的证书文件
ssl_certificate
/etc/nginx/test.
#指定PEM格式的私钥文件
ssl_certificate_key
/etc/nginx/test.
&/code&&/pre&&/div&&p&在真实的生产环境中,我们的配置如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&server {
# 如果需要spdy也可以加上,lnmp1.2及其后版本都默认支持spdy,lnmp1.3 nginx 1.9.5以上版本默认支持http2
listen 443
# 这里是你的域名
server_name www.vpser.
index index.html index.htm index.php default.html default.htm default.
# 网站目录
root /home/wwwroot/www.vpser.
# 前面生成的证书,改一下里面的域名就行
ssl_certificate /etc/letsencrypt/live/www.vpser.net/fullchain.
# 前面生成的密钥,改一下里面的域名就行
ssl_certificate_key /etc/letsencrypt/live/www.vpser.net/privkey.
ssl_ciphers &EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5&;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_
ssl_session_cache shared:SSL:10m;
#这个是伪静态根据自己的需求改成其他或删除
include wordpress.
#error_page 404 /404.
location ~ [^/]\.php(/|$)
# comment try_files $uri =404; to enable pathinfo
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.
fastcgi_index index.
# lnmp 1.0及之前版本替换为include fcgi.
include fastcgi.
#include pathinfo.
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
expires 30d;
location ~ .*\.(js|css)?$
expires 12h;
&/code&&/pre&&/div&&h2&强制HTTP转到HTTPS&/h2&&h3&Nginx Rewrite&/h3&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&server {
192.168.1.111:80;
server_name test.
rewrite ^(.*)$
https://$host$1
&/code&&/pre&&/div&&h3&Nginx 497错误码&/h3&&p&利用error_page命令将497状态码的链接重定向到&a href=&https://link.zhihu.com/?target=https%3A//test.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&test.com&/span&&span class=&invisible&&&/span&&/a&这个域名上&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&server {
192.168.1.11:443;
192.168.1.11:80;
#用户习惯用http访问,加上80,后面通过497状态码让它自动跳到443端口
server_name
#为一个server{......}开启ssl支持
#指定PEM格式的证书文件
ssl_certificate
/etc/nginx/test.
#指定PEM格式的私钥文件
ssl_certificate_key
/etc/nginx/test.
#让http请求重定向到https请求
error_page 497
https://$host$uri?$
&/code&&/pre&&/div&&h3&Meta刷新,前端跳转&/h3&&p&在HTTP正常返回的页面中添加meta属性:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&html&
&meta http-equiv=&refresh& content=&0;url=https://test.com/&&
&/code&&/pre&&/div&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&server {
listen 192.168.1.11:80;
server_name test.
location / {
#index.html放在虚拟主机监听的根目录下
root /srv/www/http.test.com/;
#将404的页面重定向到https的首页
error_page
404 https://test.com/;
&/code&&/pre&&/div&&h2&反向HTTPS转发到内部HTTP&/h2&&br&&p&延伸阅读:&/p&&ul&&li&&a href=&https://zhuanlan.zhihu.com/wxyyxc1992& class=&internal&&知乎专栏:某熊的全栈之路&/a&&/li&&li&&a href=&https://zhuanlan.zhihu.com/c_& class=&internal&&知乎专栏:前端当自强&/a&&/li&&li&&a href=&https://zhuanlan.zhihu.com/lotuc& class=&internal&&lotuc的编程之路&/a&&/li&&li&&a href=&https://zhuanlan.zhihu.com/p/?refer=wxyyxc1992& class=&internal&&2016-我的技术之路:编程知识体系结构&/a&&/li&&li&&a href=&https://zhuanlan.zhihu.com/p/?refer=wxyyxc1992& class=&internal&&2016-我的前端之路:工具化与工程化&/a&&/li&&/ul&
Nginx基本配置备忘从属于笔者的,更多知识体系参阅。 Nginx 配置在了解具体的Nginx配置项之前我们需要对于Nginx配置文件的构成有所概念,一般来说,Nginx配置文…
&p&&b&哭过&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-bc1da5fa25a8dfb7bf9ff79eb4bf21c7_b.jpg& data-rawwidth=&1294& data-rawheight=&814& class=&origin_image zh-lightbox-thumb& width=&1294& data-original=&https://pic1.zhimg.com/50/v2-bc1da5fa25a8dfb7bf9ff79eb4bf21c7_r.jpg&&&/figure&&br&&p&&b&狠狠哭过&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-acbacacba1ca5e7d4e12c461_b.jpg& data-rawwidth=&940& data-rawheight=&788& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&https://pic2.zhimg.com/50/v2-acbacacba1ca5e7d4e12c461_r.jpg&&&/figure&&p&&b&哭晕过&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-e12fb28f484fae4ad6dd1_b.jpg& data-rawwidth=&2026& data-rawheight=&676& class=&origin_image zh-lightbox-thumb& width=&2026& data-original=&https://pic4.zhimg.com/50/v2-e12fb28f484fae4ad6dd1_r.jpg&&&/figure&&br&&blockquote&&b&现在每天起床想到敲键盘就兴奋。&/b&&/blockquote&
哭过 狠狠哭过哭晕过 现在每天起床想到敲键盘就兴奋。
上面的那些应该是真的。现在这个电影在各大视频网站搜狐、腾讯等均已消失,除了到小网站下载已经看不到了。以前有真实访谈视频,现在也看不到了。&br&
熔炉事件始末: &br&光州,距首尔四小时车程,当地私立听障学校,下属特殊学校、庇护工厂、社会设施院,是获政府补助又能向企业募款的社福法人单位。同时又是私立学校,受《私立学校法》和现行《社会福祉事业法》双重保护,经营自主,完全不受外界监督,已发展为家族式企业,高层皆为亲戚姻亲。 &br&&br&&br&  2005年6月 &br&  ======== &br&  该校教师全应燮被校方诬赖性侵学生,而向当地身心障碍家庭问题咨商议中心举报,第一次曝光听障学校的罪恶:从校长到老师10多人,从2000年开始对住宿的听障生施暴或性侵,受害学生年龄范围7——20岁 &br&&br&  性侵丑闻引起当地人权团体的愤怒,组成委员会为受害者发声,同时展开司法程序。 &br&&br&  经过调查,韩国国家人权委员会只举报6人,4人受到司法审判,其中校长、总务主任一审分别被判5年、10个月,2名性侵老师被判2年。然二审大逆转,校长、总务主任皆没有前科且与被害者家属达成协议(使用公款)而被判缓刑获释。 &br&&br&  人权团体在判后六年始终坚持抗争,然成效有限。&br&2008年 &br&  ====== &br&  女作家孔泳枝读到关于此事件的网络新闻,被“在法院下判决的那瞬间听障者哭了”所触动的孔泳枝,经过查阅方才得知事件真相,大为震惊。立刻前往光州,与受害学生相处数日,深入了解孩子受创心灵后,将该事件改变为小说,2008年底至2009年中连载于网络,点击率超过1600万人次。 &br&&br&&br&  2009年 &br&  ====== &br&  小说《熔炉》发行单行本,旋即大卖。同年,尚在服役中的男主角孔侑在部队读到这本书,深受震撼。 &br&&br&&br&  2010年8月 &br&  ======== &br&  孔侑退伍,向所属经济建议翻拍此片。 &br&&br&&br&  2011年年初左右 &br&  ============ &br&  《熔炉》开拍 &br&&br&&br&  2011年9月 &br&  ======== &br&  电影《熔炉》上映。 &br&  网络出现要求重启调查百万人签名活动。 &br&《熔炉》上映第六天 &br&  ================ &br&  光州警方组成专案小组重新侦办此案。 &br&  重启调查后发现,现行性侵害防治法刑责太轻,性侵身障者处七年以上有期徒刑;性侵幼童处十年以上有期徒刑,公诉期七年,两名性侵教师已过追诉期。 &br&&br&  网民要求提高性侵案量刑标准和废除追诉期。 &br&&br&  光州警方提出因强奸致伤,公诉期延长到十年。同时调查后14人涉嫌性侵,由于涉嫌性侵校长已过世,将有韩国政府负起连带责任,赔偿受害学生。 &br&&br&  向光州身心障碍家庭问题咨商议中心吐露受性侵的听障学生又当年的12名增加到30多名。 &br&&br&&br&  电影上映第37天 &br&  ============ &br&  韩国国会以207票通过,1票弃权通过压倒性通过“性侵害防止修正案”,又名“熔炉法”。要点:性侵女身障者、不满13岁幼童,最重可处无期徒刑;废除公诉期。加害者如任职于社会福利机构或特殊教育单位可加重处罚,新法于2012年7月实施。 &br&&br&  同时催生“熔炉防治法”——《社会福祉事业法》修正案,确保社福机构经营公开透明并纳入外部监督力量,目前尚在审理中。 &br&&br&  《熔炉》下档后一个月 &br&  ================= &br&  光州私立听障学校被取消社会福祉许可证,学校被关闭,由光州政府接管,缴回韩币57亿元法人财产,用于身障者福利基金,并成立国立特殊学校,预计2013年开学。&br&&br&
经过一路艰辛,《熔炉》最终成为一部改变一个国家的电影。&br&原贴载自百度贴吧:&a href=&//link.zhihu.com/?target=http%3A//r.m.baidu.com/08zzjv9& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&r.m.baidu.com/08zzjv9&/span&&span class=&invisible&&&/span&&/a&
上面的那些应该是真的。现在这个电影在各大视频网站搜狐、腾讯等均已消失,除了到小网站下载已经看不到了。以前有真实访谈视频,现在也看不到了。 熔炉事件始末: 光州,距首尔四小时车程,当地私立听障学校,下属特殊学校、庇护工厂、社会设施院,是获政府…
&p&extended base pointer,中文名是扩展基址指针寄存器&/p&&p&帧指针寄存器是一个抽象的概念,哪个寄存器被用来存帧指针,哪个寄存器就可以叫做帧指针寄存器。比如你用rbp来存帧指针的话,你也可以称rbp为帧指针寄存器。&/p&
extended base pointer,中文名是扩展基址指针寄存器帧指针寄存器是一个抽象的概念,哪个寄存器被用来存帧指针,哪个寄存器就可以叫做帧指针寄存器。比如你用rbp来存帧指针的话,你也可以称rbp为帧指针寄存器。
&figure&&img src=&https://pic3.zhimg.com/v2-e67a18164cca0e6afea38b58_b.jpg& data-rawwidth=&1200& data-rawheight=&794& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic3.zhimg.com/v2-e67a18164cca0e6afea38b58_r.jpg&&&/figure&好久好久没有写文章了呀,感觉再不写点啥的话这个专栏就要掉粉了=。=&br&&p&马上就要正式毕业了,毕业设计是做自适应流媒体相关的优化(说白了就是弄个算法更先进的、码率根据网速自适应的、基于现代浏览器的流式播放器),正好最近这块开始步入正轨了,就介绍一下现在浏览器已经普及的 MediaSource Extension,以及一些实践的细节吧。&/p&&h2&一、背景&/h2&&p&&a href=&https://link.zhihu.com/?target=https%3A//developer.mozilla.org/en-US/docs/Web/API/MediaSource& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Media Source Extensions&/a&(媒体源扩展)大大地扩展了浏览器的媒体播放功能,提供允许JavaScript 生成媒体流。这可以用于自适应流(adaptive streaming,也是我毕设的研究方向)及随时间变化的视频直播流(live streaming)等应用场景。&br&&/p&&p&在这之前,浏览器提供的媒体播放功能(音频、视频)都是相当简陋的,一个 video 或者 audio 标签再加上相对应的数据 url 就搞定了。&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&video&/span& &span class=&na&&src&/span&&span class=&o&&=&/span&&span class=&s&&&/xxxx.mp4&&/span&&span class=&p&&&&/&/span&&span class=&nt&&video&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&但这缺少了诸如视频分段加载、视频码率切换、部分加载等等现代播放器应该有的功能,所以绝大部分的浏览器视频播放器过去都是基于 Flash 开发的,这也是为什么直到现在2017年中旬,Flash 这个老古董依然在各大视频网站上活着的原因。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e68bf3b6a8bdbea1289d94_b.jpg& data-rawwidth=&1471& data-rawheight=&1014& class=&origin_image zh-lightbox-thumb& width=&1471& data-original=&https://pic3.zhimg.com/v2-e68bf3b6a8bdbea1289d94_r.jpg&&&/figure&&p&如果你是一位经常上 B 站的朋(shēn)友(shì),特别是用 mac 的,一定会注意到 B 站在去年就上线了 HTML5 的播放器,大大缓解了 mac 看 B 站时发热严重的问题。&/p&&p&用 HTML5 播放器替代 Flash,是现在的一大趋势,Flash 过去占据的版图正在逐渐被现代浏览器吞噬,身为前端工程师要做的,就是给 Flash 的坟墓上再加一铲子土吧……&/p&&figure&&img src=&https://pic3.zhimg.com/v2-61ba9c64d39cf334d1691e0_b.jpg& data-rawwidth=&550& data-rawheight=&366& class=&origin_image zh-lightbox-thumb& width=&550& data-original=&https://pic3.zhimg.com/v2-61ba9c64d39cf334d1691e0_r.jpg&&&/figure&&h2&二、MediaSource 的简单使用&/h2&&p&在浏览器里,首先我们要判断是否支持 MediaSource:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&supportMediaSource&/span& &span class=&o&&=&/span& &span class=&s1&&'MediaSource'&/span& &span class=&k&&in&/span& &span class=&nb&&window&/span&
&/code&&/pre&&/div&&p&然后就可以新建一个 MediaSource 对象,并且把 mediaSource 作为 objectURL 附加到 video 标签上上:&/p&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&mediaSource&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&MediaSource&/span&&span class=&p&&()&/span&
&span class=&kd&&var&/span& &span class=&nx&&video&/span& &span class=&o&&=&/span& &span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&querySelector&/span&&span class=&p&&(&/span&&span class=&s1&&'video'&/span&&span class=&p&&)&/span&
&span class=&nx&&video&/span&&span class=&p&&.&/span&&span class=&nx&&src&/span& &span class=&o&&=&/span& &span class=&nx&&URL&/span&&span class=&p&&.&/span&&span class=&nx&&createObjectURL&/span&&span class=&p&&(&/span&&span class=&nx&&mediaSource&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&接下来就可以监听 mediaSource 上的 sourceOpen 事件,并且设置一个回调:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&mediaSource&/span&&span class=&p&&.&/span&&span class=&nx&&addEventListener&/span&&span class=&p&&(&/span&&span class=&s1&&'sourceopen'&/span&&span class=&p&&,&/span& &span class=&nx&&sourceOpen&/span&&span class=&p&&);&/span&
&span class=&kd&&function&/span& &span class=&nx&&sourceOpen&/span& &span class=&p&&{&/span&
&span class=&c1&&// todo...&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&接下来会用到一个叫 &a href=&https://link.zhihu.com/?target=https%3A//developer.mozilla.org/en-US/docs/Web/API/SourceBuffer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SourceBuffer&/a& 的对象,这个对象提供了一系列接口,这里用到的是 appendBuffer 方法,可以动态地向 MediaSource 中添加视频/音频片段(对于一个 MediaSource,可以同时存在多个 SourceBuffer)&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&function&/span& &span class=&nx&&sourceOpen&/span& &span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&c1&&// 这个奇怪的字符串后面再解释&/span&
&span class=&kd&&var&/span& &span class=&nx&&mime&/span& &span class=&o&&=&/span& &span class=&s1&&'video/mp4; codecs=&avc1.42E01E, mp4a.40.2&'&/span&
&span class=&c1&&// 新建一个 sourceBuffer&/span&
&span class=&kd&&var&/span& &span class=&nx&&sourceBuffer&/span& &span class=&o&&=&/span& &span class=&nx&&mediaSource&/span&&span class=&p&&.&/span&&span class=&nx&&addSourceBuffer&/span&&span class=&p&&(&/span&&span class=&nx&&mime&/span&&span class=&p&&);&/span&
&span class=&c1&&// 加载一段 chunk,然后 append 到 sourceBuffer 中&/span&
&span class=&nx&&fetchBuffer&/span&&span class=&p&&(&/span&&span class=&s1&&'/xxxx.mp4'&/span&&span class=&p&&,&/span& &span class=&nx&&buffer&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&nx&&sourceBuffer&/span&&span class=&p&&.&/span&&span class=&nx&&appendBuffer&/span&&span class=&p&&(&/span&&span class=&nx&&buffer&/span&&span class=&p&&)&/span&
&span class=&p&&})&/span&
&span class=&p&&}&/span&
&span class=&c1&&// 以二进制格式请求某个url&/span&
&span class=&kd&&function&/span& &span class=&nx&&fetchBuffer&/span& &span class=&p&&(&/span&&span class=&nx&&url&/span&&span class=&p&&,&/span& &span class=&nx&&callback&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&kd&&var&/span& &span class=&nx&&xhr&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&nx&&XMLHttpRequest&/span&&span class=&p&&;&/span&
&span class=&nx&&xhr&/span&&span class=&p&&.&/span&&span class=&nx&&open&/span&&span class=&p&&(&/span&&span class=&s1&&'get'&/span&&span class=&p&&,&/span& &span class=&nx&&url&/span&&span class=&p&&);&/span&
&span class=&nx&&xhr&/span&&span class=&p&&.&/span&&span class=&nx&&responseType&/span& &span class=&o&&=&/span& &span class=&s1&&'arraybuffer'&/span&&span class=&p&&;&/span&
&span class=&nx&&xhr&/span&&span class=&p&&.&/span&&span class=&nx&&onload&/span& &span class=&o&&=&/span& &span class=&kd&&function&/span& &span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&nx&&callback&/span&&span class=&p&&(&/span&&span class=&nx&&xhr&/span&&span class=&p&&.&/span&&span class=&nx&&response&/span&&span class=&p&&);&/span&
&span class=&p&&};&/span&
&span class=&nx&&xhr&/span&&span class=&p&&.&/span&&span class=&nx&&send&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&上面这些代码基本上就是一个最简化的流程了,加载了一段视频 chunk,然后把它『喂』到播放器中。&/p&&p&可以参考:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//developer.mozilla.org/en-US/docs/Web/API/MediaSource& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MediaSource&/a&&br&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//msdn.microsoft.com/zh-cn/library/windows/apps/dn551368.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&构建简单的 MPEG-DASH 流媒体播放器&/a&&br&&/p&&br&&h2&二、实践中的一些坑&/h2&&b&1、mime 字符串&/b&&p&mime 字符串指的就是下面这个东西,会在新建 SourceBuffer 中使用到:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kd&&var&/span& &span class=&nx&&mime&/span& &span class=&o&&=&/span& &span class=&s1&&'video/mp4; codecs=&avc1.42E01E, mp4a.40.2&'&/span&
&span class=&kd&&var&/span& &span class=&nx&&sourceBuffer&/span& &span class=&o&&=&/span& &span class=&nx&&mediaSource&/span&&span class=&p&&.&/span&&span class=&nx&&addSourceBuffer&/span&&span class=&p&&(&/span&&span class=&nx&&mime&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&这个神奇的字符串是什么意思呢?&/p&&p&首先,前面的 &b&video/mp4&/b& 代表这是一段 mp4 格式封装的视频,同理也存在类似 &b&video/webm&/b&、&b&audio/mpeg&/b&、&b&audio/mp4&/b& 这样的 mime 格式。一般情况下,可以通过 &a href=&https://link.zhihu.com/?target=http%3A//www.w3school.com.cn/tags/av_met_canplaytype.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&canPlayType&/a& 这个方法来判断浏览器是否支持当前格式。&/p&&p&后面的这一段 &b&codecs=&....& &/b&比较特别,以逗号相隔,分为两段:&/p&&p&第一段,&b&'avc1.42E01E'&/b&,即它用于告诉浏览器关于视频编解码的一些重要信息,诸如编码方式、分辨率、帧率、码率以及对解码器解码能力的要求。&/p&&p&在这个例子中,&b&'avc1' &/b&代表视频采用 H.264 编码,随后是一个分隔点,之后是 3 个两位的十六进制的数,这 3 个十六进制数分别代表:&/p&&ol&&li&AVCProfileIndication(&b&42&/b&)&br&&/li&&li&profile_compability(&b&E0&/b&)&/li&&li&AVCLevelIndication(&b&1E&/b&)&/li&&/ol&&p&第一个用于标识 H.264 的 profile,后两个用于标识视频对于解码器的要求。&/p&&p&对于一个 mp4 视频,可以使用 &a href=&https://link.zhihu.com/?target=http%3A//code.google.com/p/mp4v2/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mp4file&/a& 这样的命令行工具:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&mp4file --dump xxx.mp4
&/code&&/pre&&/div&&p&找到 avcC Box 后,就可以看到这三个值:&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&mp4file --dump movie.mp4
type avcC (moov.trak.mdia.minf.stbl.stsd.avc1.avcC) // avc1
configurationVersion = 1 (0x01)
AVCProfileIndication = 66 (0x42)
profile_compatibility = 224 (0xe0)
AVCLevelIndication = 30 (0x1e)
&/code&&/pre&&/div&&p&有一处要注意,后面两个值(profile_compability、AVCLevelIndication)只是浏览器用于判断自身的解码能力能否满足需求,所以不需要和视频完全对应,更高也是可以的。&/p&&br&下面来看 &b&codecs&/b& 的第二段&b& 'mp4a.40.2'&/b&,这一段信息是关于音频部分的,代表视频的音频部分采用了 AAC LC 标准:&p&&b&'mp4a' &/b&代表此视频的音频部分采用 MPEG-4 压缩编码。&/p&&p&随后是一个分隔点,和一个十六进制数(&b&40&/b&),这是 ObjectTypeIndication,&b&40&/b& 对应的是 Audio ISO/IEC 14496-3 标准。(不同的值具有不同的含义,详细可以参考&a href=&https://link.zhihu.com/?target=http%3A//www.mp4ra.org/object.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方文档&/a&)&/p&&p&然后又是一个分隔点,和一个十进制数(&b&2&/b&),这是 MPEG-4 Audio Object Type,&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/MPEG-4_Part_3%23MPEG-4_Audio_Object_Types& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&维基百科&/a&中的解释是 &MPEG-4 AAC LC Audio Object Type is based on the MPEG-2 Part 7 Low Complexity profile (LC) combined with Perceptual Noise Substitution (PNS) (defined in MPEG-4 Part 3 Subpart 4)&,具体是什么意思就不翻译了,其实就是一种 H.264 视频中常用的音频编码规范。&/p&&p&这一整段 codecs 都有完善的官方文档,可以参考:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//tools.ietf.org/html/rfc6381& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The 'Codecs' and 'Profiles' Parameters for &Bucket& Media Types&/a&&br&&/p&&br&&p&&b&2、如何转码出符合标准的视频&/b&&/p&&p&目前有很多开源的视频处理工具,比如 &a href=&https://link.zhihu.com/?target=http%3A//ffmpeg.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FFMPEG&/a&、&a href=&https://link.zhihu.com/?target=https%3A//handbrake.fr/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HandBrake&/a&,我用的后者转码,前者切割。&/p&&p&转码其实很简单,HandBrake 打开后,加入想要处理的视频(mp4 格式),窗口下半部分 video 标签,H.264 Profile 选择 &Baseline&,level 选择 &3.0&;audio 标签,选择 Encoder 为 &AAC&。&/p&&p&然后就是把视频切割为比较小的 chunk,ffmpeg 就可以很方便地切割:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&ffmpeg -ss 00:00:00 -i source2.mp4 -c copy -t 00:00:05 xxxx.mp4
&/code&&/pre&&/div&&p&上面这段命令就切出了视频的第 0 秒到第 5 秒。&/p&&p&注意一个问题,ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。&/p&&br&&br&&p&&b&3、向 SourceBuffer 中添加多个 chunk&/b&&/p&&p&第一部分的范例中只是请求了一段 chunk 然后加入到播放器里,如果视频很长,存在多个chunk 的话,就需要不停地向 SourceBuffer 中加入新的 chunk。&/p&&p&这里就需要注意一个问题了,即 appendBuffer 是异步执行的,在完成前,不能 append 新的 chunk:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&sourceBuffer&/span&&span class=&p&&.&/span&&span class=&nx&&appendBuffer&/span&&span class=&p&&(&/span&&span class=&nx&&buffer1&/span&&span class=&p&&)&/span&
&span class=&nx&&sourceBuffer&/span&&span class=&p&&.&/span&&span class=&nx&&appendBuffer&/span&&span class=&p&&(&/span&&span class=&nx&&buffer2&/span&&span class=&p&&)&/span&
&span class=&c1&&// Uncaught DOMException: Failed to set the 'timestampOffset' property on 'SourceBuffer': This SourceBuffer is still processing an 'appendBuffer' or 'remove' operation.&/span&
&/code&&/pre&&/div&&p&而是应该监听 SourceBuffer 上的 updateend 事件,确定空闲后,再加入新的 chunk:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&sourceBuffer&/span&&span class=&p&&.&/span&&span class=&nx&&addEventListener&/span&&span class=&p&&(&/span&&span class=&s1&&'updateend'&/span&&span class=&p&&,&/span& &span class=&p&&()&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&c1&&// 这个时候才能加入新 chunk&/span&
&span class=&c1&&// 先设定新chunk加入的位置,比如第20秒处&/span&
&span class=&nx&&sourceBuffer&/span&&span class=&p&&.&/span&&span class=&nx&&timestampOffset&/span& &span class=&o&&=&/span& &span class=&mi&&20&/span&
&span class=&c1&&// 然后加入&/span&
&span class=&nx&&sourceBuffer&/span&&span class=&p&&.&/span&&span class=&nx&&append&/span&&span class=&p&&(&/span&&span class=&nx&&newBuffer&/span&&span class=&p&&)&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&p&&b&4、码率自适应算法&/b&&/p&&p&对于随时变化的网络情况,我们会根据情况加载不同码率的视频,这里就需要一些控制算法决定当前加载哪个码率的视频。&/p&&p&很容易就能想到一种简单的算法:&b&上一段 chunk 加载完后,计算出加载速度,从而决定下一个 chunk 的码率。&/b&&/p&&p&但这种朴素的算法有很严重的问题,即它假设网络是相当稳定的,我们可以根据当前的信息预测出未来的网速。但这已经被大量的统计数据证明是不现实的,换句话说,&b&我们没办法预测未来的网络环境。&/b&&/p&&p&所以学术界提出了一系列新的算法,比如最常见的 Buffer-Based 算法,即&b&根据当前缓冲区里视频的长度,决定下一个 chunk 的码率。&/b&如果有很长的缓冲,那么就加载高码率的视频。这在相当于一个积分控制器,把时刻变化的无

我要回帖

更多关于 商标注册分类表 的文章

 

随机推荐