X.d 笔记

小Web,大世界

0%

主要是发现现在各种技术社区、推广社区对SEO的讨论少了很多,所以以个人短浅的眼光去看看这些事情,笑看SEO何去何从。

SEO出山已近二十年。这边二十年里,搜索引擎是网民们的主要入口,由搜索引擎带动的一大片经济行为,现在看来又是什么样的情况呢?

记得本人上网开始上网是2000年,现在有时也会偶尔回味一下当时在网吧蹲电脑上的场景,感受着电脑的神奇,hao123是当时最好的朋友,虽然当时只是一个非常纯粹的网站导航,但就像一个窗户一样大开眼界,本人对第一批大站记忆也是非常深刻,虽然现在很多网站都关闭了,有时还会时不时输下域名进去看看开了没有,哎。。

毕业后,有一些同学进入了一些工司,职业为网络推广电子商务什么的,,当时也即其火热,也是现在一些网络营销的前身吧。

阅读全文 »

现在的工具越来越牛,很多工具在网页上就可以完成,而且功能不亚于桌面软件,甚至更好用,更何况云端工作,没有任何环境限制,只要浏览器就 OK 了,资料都存在云端到哪都可以随时看。

可惜的时,墙内有很多更好的软件不能用,比如说基于 Dropbox 或 Google 的很多都用不了。

工作处理

processon

神级,除了画各种UML图之外,还可以脑图、组网图等。缺点是一个账户使用的免费数量是9幅。

主要是页面又非常漂亮,秒杀目前所有客户端,画了图后还能导出。

当然,你可以去1块钱买50幅。方法是点击右下角的 Expand your storage space , 分别输入 50,1块钱,再支付就可以了,但这么好用的东西你忍心这么扣B吗。

doit.im

任务进度管理,这样的软件实在太多,本人还是觉得这个好用一点。

前端

jsfiddle

国外最流行的前端在线代码编辑工具,支持各种前端技术,众多前端框架CDN。

Runjs

国内开源中国出品的,甚至比jsfiddle更好用。关键是更快。

文档类

stackedit.io

Markdown编辑器实在太多,这个是本人认为比较好用的markdown在线编辑器。

另外还有一个马克飞象,页面比较漂亮,但好像要连接印象笔记或收费、操作性比较麻烦,有钱的可以试试。

readme.io

如果你要给一个产品写个说明书,那可以用这个试试。

gitbooks.io

或者是写书的话,这个比readme更合适

号外

eclipse che 快发布正式版了,有了这个,企业上发布WebIde不再是梦,基于che和插件可完全完成传统的编码到上线的流程,而且基于Docker的工作区概念又解决了目前很多发布性的问题。这个IMBA的工具会颠覆现在的编程习惯吗?只有拭目以待了。

平时用抓包工具比较多,很多时候使用 Fidder 做一些简单的抓包,当功能不够用时,就使用 WireShark 相对于 Fidder 来说,上手比较难一点,但功能强大很多。

WireShark 就基于网卡的,也就是说只要是经过该网卡的数据包都能抓到,而 Fidder 就是相当于在本地启动了一个 HTTP 中间代理,在请求发出和接收时,将内容抓下来。

开始

很简单,点击 options ,选中需要抓包的网卡后,点 start 则可启动抓包了。

如果支接点的话,会发现不停的有包啊,什么杂七杂八想要不想要的就像瀑布一想往下滚,所以,开始之前,通常要指定一个过滤器,填在Capture fiter for selected interfaces:里面,意思就是选择网卡的过滤器。

TIP1 : WireShark过滤器说明在 Help -> Manual pages -> WireShark Fiter
TIP2 : 网卡开始抓取前使用的过滤器和抓取后能使用的过滤器是不一样的,通常指定协议就可以过滤掉大部分不需要抓的包了。

阅读全文 »

ES6 都还没得及,现在一些 ES7 的新特性就出来了。得益于Node/Native这种玩意将 JavaScript 发扬光大,所以很多特性是并不是针对浏览器脚本设计的,很多针对 Server 端,或者本地应用。所以浏览器也不会支付所以有 ES6/ES7 的规范。

ES7特性预览

说下名字问题,ES6 规范已经在年中已经正式发布了,发布之后的名字前不是 ECMAScript 6,而是 ECMAScript 2015,本文的标题 ES7 目前的版本是 ECMAScript 2016,正式发布之后叫什么就不知道了,本人对名字什么的不纠结,怎么顺口就怎么叫。即使你叫它 ES6,ES7 也没什么错,它就是ECMAScript第6版,第7版。 主要是 ES6 在没正式发布之前叫ES6 叫习惯了。

废话就这么多,直接进入正题了。

乘方运算符

乘方运算较简单。目前一些语言里面其实以经有了。代码一看就明白:

let squared = 2 ** 2; //  = 2 * 2 = 4
let cubed = 2 ** 3; // = 2 * 2 * 2 = 8

let x = 2;
x **= 3; // x = x**3 = x * x * x = 8;
阅读全文 »

从手机说起

由于智能手机横行!!!所以垃圾软件横行!!!

做垃圾软件呢,又和做网站有一点小小的区别,由于软件装在用户的手机上,而且还可以 后台运行 ,所以只要安装了软件,就经常有很多连服务器的小动作比如,消息推送、心跳维持、当然了,还有恶意获取用户信息上传,肉鸡操控等等。

之前做网站,普通的网站一般也不会考虑并发过大的问题,比如小米的抢购、12306抢票等头疼的问题一般的网站也不会太多考虑,大不了在集群上多扩几台么。

现在情况有变,如果你的手机应用有一定的用户量,那么平时的压力就和网站时代的高峰压力相当了。如果你还是用之前的 Web 服务器,比如 Apache、 Tomcat 之类的,很容易就会遇到阻塞。

资源利用率

比如现在广泛应用的 Tomcat,默认配置是 200connection,如果同时有 500 个用户访问,那么200个用户会 1秒 的时候收到请求的响应,(收到后200线程被释放,处理剩下的300个请求),然后,200的用户等了两秒钟后,收到了响应。假设我们设置的服务超时时间为2秒,那么剩下100个,就会出现错误,请求失败。在这两秒种的时间,服务器仅处理了400个请求,还有100个请求在等待2秒后还被拒绝服务(超时),虽然说用户感觉到很慢,但实际上计算机的计算能力运用了不到 1% ,多余的性能并没有发挥出来。

聪明的你,肯定会想到,那我把默认最大线程数配大点不就行了吗,当然是 OK 的,比如配置到 500,那么这 500 个请求就不需要等待就可以马上响应了,此时,1秒钟处理了500个请求,CPU利用率肯定高出了之前的。但实际上如此盲目的增加通常会出现问题。

阅读全文 »

Golang1.4就对Android开发做了些支持,1.5版本前几天好像发布了,特意看了整理下,1.5支持32位与64位的android与IOS应用开发了,当然还不是很好用,听说性能比Java做的程序超出很多,Native就不用说了,但也没有实践压测所也不敢确定,这里只整理下基本流程:

环境搭建

  1. 安装 golang 1.5, 设置 GOROOT,GOPATH 环境变量。

简单说明:Golang 1.5 提供了两个内核支持,darwin/arm 和 darwin/arm64.,Golang mobile并不是go1.5软件包里面的一部分,但是基于内核,必须安装Golang1.5以上。

  1. 安装gomobile
go get golang.org/x/mobile/cmd/gomobile
  1. 安装android(apk)编译工具,(如果仅开发IOS则可省略这一步,但要有XCode支持)
gomobile init
阅读全文 »

RestFul 也不是什么新鲜的玩意,近几年开放平台火爆后大家认识了它,昨天把一套接口拿给人看,就被鄙视了,说接口不符合 Restful 规范,郁闷万分,确实没有深入的去看 Restful 规范,还以为是 Http 返回 json 或 xml 就叫Restful了,于是小看下具体规范。

由于restful规范规则太多,懒得写,所以就分点场景随便举几个例子。

方法规范

对于方法来说,资源的对应的操作应该使用请求方法标识。比如规范的方法如

//获取用户信息
GET /user/username HTTP/1.1
Content-Type: application/json; charset=utf-8

//新增一个用户
PUT /user HTTP/1.1
username=uname&password=pwd

//删除一个用户
DELETE /user/username HTTP/1.1

//修改一个用户
POST /user/username  HTTP/1.1


<!-- more -->

URI /user/user/username 仅为资源的地址,很多平台的设计如下:应该是不符规范的

//新增一个用户1  不符合规范
GET /user/add?uname=uname&pwd=pwd HTTP/1.1

//新增一个用户2 不符合规范
POST /user HTTP/1.1
act=add&uname=uname&pwd=pwd

//删除一个用户 不符合规范
GET /user/delete?uname=uname HTTP/1.1

结论: 利用 GET/POST/PUT/DELETE 做为动作描述

  1. GET:获取资源,一般都有last-modify头
  2. POST:复合操作,有时可以替代PUT和DELETE,比如一个动作操作多个资源时可以使用。
  3. PUT:创建资源,且URI非常明确时使用PUT,比如 /user 使用put方法则表示创建用户
  4. DELETE:删除资源,和PUT类似,URI明确时使用,否则应该使用POST

另外还有OPTIONS,TRACE方法,一般用的不多,OPTIONS方法可以规范化,暂时不多说使用场景。

错误码

按照规范,响应的错误码也是HTTP返回状态码的,也就是 2XX,3XX,4XX,5XX等,客户端根据响应头里面的状态码去在客户端适配

对于 Http 状态码就不说了,比如404资源找不到,500:服务器内部错误,对于找不到的错误码,应该算00,比如555错误码没有适配,就解释为500.

URL设计规范

URI应该层级分明,意义清晰,最好不带.jsp,.htm等文件后缀,其实这点对于大部分接口设计上来说来是很遵守的,发竟看上去规划的不错。与第一点:方法相结合后 /user/add 这样的设计就应该改为 /user 方法使用PUT。

小结:看上去很美

另外还有比较多的细节就不说了,比如请求头和响应应的规范,争议不大,总体来说个人还是认可的,思路清晰。

但是还是感觉:看上去很美,如果真拿以上规范当事的话,那么国内目前还没有一家厂商把接口设计的符合规范的。当然这不是因为没有前例,Restful是早期的概念,在开放平台还没来得及火爆之前,WEBDAV,SVN 等系统还是遵循着规范的。

Restful 规范的最大好处就是清晰,设计一套规范化的接口可以让人一看上去就能大概能理解。目前开放平台设计的大概一般就是一个链接地址,不管是 POST 还是 GET 或其它,状态码嘛当然是在响应体里面的一个字段表示的。看多了之后也不觉得有问题,也是挺清晰的,相比标准的规范来说,适应性,容错性,扩展性更高。

当然也有编码方面的原因,如果已经搭建了一个应用,在应用的基础上设计一套开放平台,那么就得和现有应用兼容,现在有很多方面与开发习惯不一样,随便一说都会有很多:

  1. 比如服务器定义了默认404,500错误码的页面,那么就无法兼容,需要废了服务器配置自己做。
  2. 喜欢用ajax的也要多写些方法监听非200响应码,喜欢用Jquery或其它框架的朋友能否正常错误处理。(貌似jQuery的fail方法还不能拿出消息体)
  3. 如果服务器禁用了一些“不安全”的方法,比如PUT/DELETE等,那么规范也是徒劳。
  4. 感觉Java就是为了restful而生的,servlet上有各种doGet,doPost方法甚至专门针对请求头里面lastModify值的getLastModified方法都有,但是常规的编程人员肯定这样写了doGet(args){ this.doPost(arghs) },或者使用各种Web框架,就辜负设计者对restful的一片好意

当然,准备搭建一个专门放 Restful 服务的应用,完全符合 Restful 规范也完全没问题。我们做的是产品,只要用户方便(清晰,一看就明白,用户是否有必要接收你的规范?)我们方便(如果同时又有 Web 服务,或是已经使用了需要的 Web 架构,是否真的要不顾兼容硬套规范?),所以只能说,规范是看上去挺美,真正是的需要严格遵守规范,那就看实际情况了~。

Material Design 为一种设计UI的思路,由Google推出,看了之后觉得此UI用户体验不错,特自行总结一小下。

Materail基本原则

  1. Material Design 仅仅只是一个设计原则。只要按照设计原则的实现都可以称自己有Material思想在里面。
  2. 跨平台之间,跨不同的设备之间,可以统一设计标准。
  3. 以自然科学为设计思想,比如物理学,光学等等,接近人本身对事物的感知。
  4. 实现设计的思路主要是以颜色,大小,边缘,规模,空间关系等等,通过在视觉效果上的绝佳配合来指引用户,为用户提供前进路线。
  5. 设计时,应该有一些想象中的环境,做为你设计元素的容器其约束。一个运动只发生在一个对应的环境。
  6. UI设计上的运动需要保持连贯性
  7. 不为用户的输入类型评级:所有的输入是第一级别。包括、鼠标、触控、感应、声音等等任何输入。

当然目前Material设计思想并不是100%合理,目前的一些规范还在持续修改中。建议如果是设计UI的话,不要太死板100%去参照原则。想想之前的Metro,则出的时候也很炫,但最终普及的程序也不咋样。

上面说到设计理念上有一条是跨不同设备,个人认为只是设计理念上的跨设备,而不是实现上的跨设备,比如在一些规范方面也有定义一些间距大小,排列组合等,各种设计规范如Logo,图标的设计规范等都有。对于设计师来说并不是说出一个psd就可用在所有端,对于程序员来说也并不是说一套代码各端通用。但设计上的理念一致,可以减少很多不同之处的处理。

从目前来看,考虑到的设备有电脑、笔记本、手机、平板、手表、电视、车载。如果有其它的设备应该也可以适用。现在自家的应用应该就是Android5,Chrome OS,以及一些官方的手机APP。

阅读全文 »