❗️你有0条未读消息

  算不上什么高大上的玩意儿,只是记录下最近研究的Chrome扩展开发技术。了解的很还不够,不过爱因斯坦说过:

“没有应用场景的学习都是扯淡!” (爱因斯坦:我™没说过。。)☜☜

背景

  了解灰度发布,A/B实验的同学应该都知道,很多时候在发布新版的时候都不是一蹴而就的,而是默认访问老版本,而将新版本向用户隐藏或是小流量放出,内部人员查看新版本时通常会有”命中参数”(即访问时传入相应的新版本参数可以强制命中新版)。
  然而,页面是有很多内部逻辑的,比如点击跳转之类,这种动作是不会自动将参数带上的,因此实际中面临的问题是经常需要来回复制黏贴参数,再考虑到初始访问的可能是静态页面(静态页面传递参数使用?param=value),跳转后可能是动态页面(动态页面传递参数使用&param=value)。这样来回复制黏贴起来就更加费事了。。
  在多次”惨遭蹂躏”后,开始琢磨是否可以有什么方式能够帮我完成判断页面是动态or静态然后自动添加参数的事情呢?

阅读全文 »

最近对html5萌生了兴趣,起初是因为在学习全栈时见识到了html5的强大威力。如下面这个例子:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<input type="date">
</body>
</html>

仅仅一个”date”类型的input框就解决了html插入日期控件的工作,而且造型还挺风骚。

阅读全文 »

背景

今天平台在向调用的平台发送回调请求的时候,发现有问题,排查了一会儿发现并不是所有的回调请求都会有问题。基本上纯字母或数字的回调都没有问题,而出问题的请求包含”&”,”-“等特殊字符,于是第一时间想到是不是解析特殊字符的问题。

于是跟接收方约定,我将请求encode后发送,接收方接收后decode后再解析。

TEST1

代码片段:

1
var resParams = {"name":encodeURI(out.name),"blockId":blockId,"total":1,"detail":encodeURI(reportPath)};

发布后,重新触发,查看日志:

1
..."detail":"http://(绿色围墙)/detail?id=1&suffix=1438601805325"...}

怎么貌似请求串没有改变?

第一反应,怀疑是不是编码没有成功,但我之前一直都是使用encodeURI编码,并不会别的什么方法,于是百度了下,发现还有个encodeURIComponent以及escape的区别方法。

TEST2

1
var resParams = {"name":encodeURIComponent(out.name),"blockId":blockId,"total":1,"detail":encodeURIComponent(reportPath)};

发布后,重新触发,查看日志:

1
..."detail":"http://(绿色围墙)/detail%3Fid%3D1%26suffix%3D1438601805325"...}

起效了~

总结

javascript中有三种编码的函数,分别是:escape(),encodeURI()以及encodeURIComponent()

  1. escape
    该方法不对ASCII字母和数字编码,也不会对ASCII标点符号编码,除此之外的所有字符均会被编码。
    基本上该方法已经被javascript标准所遗弃,从ECMAScript v3开始,标准就建议使用encodeURI和encodeURIComponent代替。

  2. encodeURI
    该方法不会对字母和数字编码,也不会对这些ASCII标点符号编码: -_.!~*’()
    该方法的目的是对URI进行完整的编码,对URI中具有特殊含义的标点符号不进行转义。
    因此正如我遇到的问题一样,如果URI中含有分隔符,则应当使用encodeURIComponent方法编码。

  3. encodeURIComponent
    该方法不会对字母和数字编码,也不会对这些ASCII标点符号编码: -_.!~*’()
    其他字符,如 ;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号,都会由十六进制转义替换。
    encodeURIComponent除了编码标准的URI之外,对于它的参数也都一并进行处理。

他们对应的解码函数分别是:
unescape(),decodeURI(),decodeURIComponent()

本篇对Git的学习做一个扫尾笔记,主要是标签、配置等一些杂项。
三篇下来,基本上对日常使用中常用到的方法和命令都基本掌握了,以后有需要再查漏补缺了。

4.标签

标签相当于给分支取了一个好记的别名,这在git里称为里程碑。比如我们的代码版本达到了发布版本,可以取个别名叫做v1.0等等。方便后续更容易访问,而不是查看git log找到对应的commitid。

标签即版本库快照。

阅读全文 »

背景

我有个网站部署在我linux服务器的自己账户下,我们都知道,如果要以1000以下的端口启动服务需要root权限。而我又没有root权限。
所以我的网站应用启动在8090端口上,然而访问的时候url带端口的方式看起来很山寨,很土贼,能不能不带端口访问到我的服务呢?

iptables端口转发

使用linux的iptables可以设置端口转发,于是百度查了下,可惜试了很多条都没有生效。于是将我尝试可用的做法记录已备忘。

阅读全文 »

#背景
在项目开发过程中,有一个需求是这样的:

平台接受用户输入的一串JSON字符,然后解析JSON串的key-value展示到平台上,并支持用户修改value值再更新。

效果图如下:

在调试过程中发现,一旦提交更新展示的字段顺序就跟前一次不一样,再提交一次更新貌似又能恢复,这是咋回事呢?

阅读全文 »

3.远程仓库

svn只在一个仓库里管理文件,而git是分布式版本控制系统,同一个git仓库可以分布到不同的机器上。
不同机器上的版本库其实都一样,没有主次之分。通常实际上,我们是有一台充当服务器的电脑,开源项目有很多的项目托管网站如github,gitcafe等,自己公司也会搭建自己的git服务器。我们每个人都从这个服务器上克隆一份仓库到自己本地上,再把自己的提交推送到服务器仓库里。
在向远程仓库提交修改之前,需要设置一下本地与远程服务器之间的信任关系,这也是svn与git的区别之一。svn通过账号即可,而git本地和远程仓库之间的传输是通过ssh加密的,需要设置一下key,本质上等价于两台服务器之间的信任关系建立。这里简单记录一下key生成的步骤。

阅读全文 »

没有系统的学习过git,工作过程中遇到一些使用git的问题,在网上搜寻经常被一些误人子弟的博主或者网站主们”伤害”,相信很多人也曾被网上转来转去未经验证的错误技术贴坑过。之前使用git也仅限于clone、commit、pull、push倒是没有遇到多少问题,在正式使用git来开发维护项目的时候就遇到很多问题了,尤其是在搞分支、主干,本地仓库、远程仓库的时候,那叫一个头晕。于是本着”工欲善其事必先利其器”的原则,跟随廖雪峰的git教程系统的学习了下git。本篇博文即是我的git学习笔记,廖雪峰的教程非常浅显易懂,适合入门,但对于有技术基础的同学来说,未免显得”聒噪”了些。闲言少叙~

阅读全文 »