mysql utf8mb4与emoji表情

MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters这里看,基本就是0000~FFFF这一区。 从MYSQL5.5开始,可支持4个字节UTF编码utf8mb4,一个字符最多能有4字节,所以能支持更多的字符集。

utf8mb4 is a superset of utf8

utf8mb4兼容utf8,且比utf8能表示更多的字符。

至于什么时候用,看你的做什么项目了。。

在做移动应用时,会遇到ios用户会在文本的区域输入emoji表情,如果不做一定处理,就会导致插入数据库异常。

Emoji表情符号兼容方案

一 什么是Emoji

emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)
表情符号现已普遍应用于手机短信和网络聊天软件。 Continue reading

jQuery.extend和jQuery.fn.extend的区别-转

jQuery.extend和jQuery.fn.extend的区别,其实从这两个办法本身也就可以看出来。很多地方说的也不详细。这里详细说说之间的区别.

1. 我们先把jQuery看成了一个类,这样好理解一些。

jQuery.extend(),是扩展的jQuery这个类。

假设我们把jQuery这个类看成是人类,能吃饭能喝水能跑能跳,现在我们用jQuery.extend这个方法给这个类拓展一个能唱歌的技能。这样的话,不论是男人,女人,xx人.....等能继承这个技能(方法)了。

可以如下图这样写着:

jquery-1

Continue reading

Git-svn命令对比表,svn用户必看

提供给从svn转git的开发人员参考

Git与Subversion的命令对比表

操作 Git Subversion
复制数据仓库 git clone svn checkout
提交 git commit svn commit
查看提交的详细记录 git show svn cat
确认状态 git status svn status
确认差异 git diff svn diff
确认记录 git log svn log
添加 git add svn add
移动 git mv svn mv
删除 git rm svn rm
取消修改 git checkout / git reset svn revert (※1)
创建分支 git branch svn copy (※2)
切换分支 git checkout svn switch
合并 git merge svn merge
创建标签 git tag svn copy (※2)
从服务端更新本地 git pull / git fetch svn update
推送到远端 git push svn commit (※3)
忽略档案目录 .gitignore .svnignore

※1. SVN的revert是用来取消修改,但Git的revert是用来消除提交。所以即使是同样的命令,在SVN和Git里的含义是不同的。

※2. SVN的分支与标签在构造上是相同的,但在Git其构造明显是不一样的。

※3. SVN没有本地数据库/远程数据库的概念,所以提交会马上反映到远程里。但Git的本地数据库和远程数据库的反映方法是不一样的。

基于消息的分布式架构设计-转

背景:

随着社会的发展,经济的飞跃,传统的单系统模式(webApp+DB)已经很难满足业务场景的需要。企业系统开始不断演化成多个子系统并存协作的局面。大大降低了系统间的耦合性,更重要的便于子系统的扩展、升级、维护等。
谈到系统间的协作,目前常用两种方式:
1、基于Http协议
通过客户端发起的get、post请求,服务端接收request请求,处理请求,得到响应内容,通过网络传送到客户端,由浏览器解析出一个可视化的页面。
这种交互最大的优势是实时性,通过HTTP请求连接各个子系统,从而跨服务器来完成一个完整的业务流程。缺点协议请求头的信息较少,一般都是关键参数,完整数据由下一个子系统从数据库、文件系统来获取,从来保证前后的业务数据衔接。

Continue reading

深入解析php中的foreach问题

篇文章是对php中的foreach问题进行了详细的分析介绍,需要的朋友参考下
前言:
php4中引入了foreach结构,这是一种遍历数组的简单方式。相比传统的for循环,foreach能够更加便捷的获取键值对。在php5之前,foreach仅能用于数组;php5之后,利用foreach还能遍历对象(详见:遍历对象)。本文中仅讨论遍历数组的情况。foreach虽然简单,不过它可能会出现一些意外的行为,特别是代码涉及引用的情况下。
下面列举了几种case,有助于我们进一步认清foreach的本质。

Continue reading

JavaScript垃圾回收机制

一、垃圾回收的必要性

下面这段话引自《JavaScript权威指南(第四版)》

  由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。

这段话解释了为什么需要系统需要垃圾回收,JS不像C/C++,他有自己的一套垃圾回收机制(Garbage Collection)。JavaScript的解释器可以检测到何时程序不再使用一个对象了,当他确定了一个对象是无用的时候,他就知道不再需要这个对象,可以把它所占用的内存释放掉了。例如: Continue reading

利用 Dockerfile 来创建镜像

使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。

新建一个目录和一个 Dockerfile

$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile

Dockerfile 中每一条指令都创建镜像的一层,例如:

# This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra

Dockerfile 基本的语法是 Continue reading

docker安装入门篇

一、下载镜像 image

可以使用 docker pull 命令来从仓库获取所需要的镜像。

下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。

$ sudo docker pull ubuntu:12.04
Pulling repository ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

下载过程中,会输出获取镜像的每一层信息。

该命令实际上相当于

$ sudo docker pull registry.hub.docker.com/ubuntu:12.04

命令,即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。

有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。 从其它仓库下载时需要指定完整的仓库注册服务器地址。例如

$ sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
Pulling dl.dockerpool.com:5000/ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

二、利用镜像image 创建容器

完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行 bash 应用。

$ sudo docker run -t -i ubuntu:12.04 /bin/bash
root@fe7fc4bd8fc9:/#

其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

上面命令默认会生成一个随机的 CONTAINER-ID,我们可以使用docker attach  "容器ID|容器名" 命令来进行指定的容器。但由于容器ID和容器名为随机字母,不利于我们记忆 ,这里我们可以使用 --name 参数批量一个命名,这样我们直接使用 "docker attach 容器名" 就可以进入容器内(可通过 docker ps -a查看)

$sudo docker run -it --name server ubuntu /bin/bash

我们通过 ”docker ps -a" 可以看到容器的最后一列names的值为server,以后想进行这个容器直接使用命令 "docker attach server“ 即可,不用再去先查找容器ID,再输入容器ID,省事了很多。

有时候我们为了编码方面,一般是在宿主机器上进行开发,调试在容器里进行,这时候,我们只需要将一个本机目录挂载到容器里即可。

$sudo docker run -it -v /sites/www:/wwwroot/htodcs ubuntu /bin/bash

上面的/sites/www 为本机目录,/wwwroot/htdocs 为容器中挂载的目录,这点像vagrant。

docker常用命令见:http://blog.haohtml.com/archives/16555

docker常用命令

1. 查看docker信息(version、info)

# 查看docker版本
$docker version

# 显示docker系统的信息
$docker info

2. 对image的操作(search、pull、images、rmi、history)

# 检索image(sudo docker pull ubuntu:12.04,该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器 registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。)
$docker search image_name[:tag]

# 下载image
$docker pull image_name

# 列出镜像列表; -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
$docker images

# 删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents (注意这里是 rmi 命令,不是 rm)
$docker rmi image_name

# 显示一个镜像的历史; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
$docker history image_name

3. 启动容器(run)

docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。

Continue reading

docker与vm之间的最基本的区别

5分钟弄懂Docker!http://www.csdn.net/article/2014-07-02/2820497-what%27s-docker

Docker入门与实践:https://www.gitbook.com/book/yeasy/docker_practice

在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

Virtual Machines是由虚拟机管理程序来实现对虚拟机的管理,而docker是用docker Engine来实现对应用的管理。可以理解为一个套硬件的管理,一个是软件的管理。

virtualization

docker

 对比传统虚拟机总结

docker-vs-vm

基本概念

Docker 包括三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

理解了这三个概念,就理解了 Docker 的整个生命周期。 Continue reading