起因
昨天同事过来问我,git一般是如何提交代码的。我吧啦吧啦说了一堆,同事一句,好像和svn差不多呀。我瞬间失语,我说我感觉git比svn好,同事问我,哪里比svn好?我说不出来。同事说等我想出来再和他说好了,我说好的。
随即,我就谷歌「git vs svn」,看看网上别人如何说的。在stackoverfiow
上找到一个答案,说的很好,特来翻译给大家看看。
沧浪之水清兮,可以濯我衣;沧浪之水浊兮,可以濯我足。
昨天同事过来问我,git一般是如何提交代码的。我吧啦吧啦说了一堆,同事一句,好像和svn差不多呀。我瞬间失语,我说我感觉git比svn好,同事问我,哪里比svn好?我说不出来。同事说等我想出来再和他说好了,我说好的。
随即,我就谷歌「git vs svn」,看看网上别人如何说的。在stackoverfiow
上找到一个答案,说的很好,特来翻译给大家看看。
对Node.js v5说你好!我们确实在最近发布了Node.js v4.0.0,然而,这次新版本的发布并不意味着v4的远去。事实上,v4将会比v5存活更长时间。
根据我们最新的LTS(Long-term Support,长期维护版本)计划,Node.js v4 阿尔贡(Argon)将会持续支持30个月,在2018年5月停止维护。然而,此次发布的node.js版本,将仅仅只会支持8个月,与此同时,新的主版本v6,将会在2016年8月发布。Node.js v6将会像v4的时间轴一样,最终会进入新的LTS版本(长期支持版本)。这样一来,我们将会每隔6月有一个~稳定~版本,并且,第二个版本将会进入长期支持版本。如果你刚刚知道LTS,那么这里将会有关于LTS是如何工作的,以此来确保你可以对选择Node.js版本做出正确的决定。
对于选择Node.js版本的一般规则如下:
下面的发布说明是确保可以跳跃到v5版本的主要不兼容变化。请注意,因为此次Node.js新版本采用新版本的V8引擎,你所有的基于本地的插件都需要重新编译,不然你将会收到运行错误当你尝试去加载它们的时候。使用npm rebuild
,或者简单的删除node_modules
文件夹再重新获取。
###主要改动
oh_my_zsh
是一个非常好用和好看的命令行配置,它包含自动补全
、目录下git自动检查
、主题
、插件
等功能,给在命令行下工作的人提供了非常好的便利。
前阵子配置vagrant
虚拟机,为了打个环境给同事使用。考虑到有些命令需要在虚拟机里面完成,所以还是安装了一个oh_my_zsh
。
但是问题来了,在oh_my_zsh
的默认主题中,当进入一个是git
仓库的文件夹时,会自动读取.git
里面的内容,了解当前的仓库状态,比如当前分支。可是在虚拟机里读取文件的速度要慢一些,这就会导致每一条命令都会检查一下当前仓库状态的这个行为会使得命令行开始输入的状态变的很慢。
一开始我以为是插件
的原因,去掉git
插件,sourse ~/.zshrc
重载配置之后,还是如此,后来发现是主题
的缘故。
我通常是比较懒的,既然默认主题有这个问题,那就找一个别的主题好了。
可是在oh_my_zsh
的github
上的theme
列表中,每个主题都是含有这个功能的,所以只有自己修改主题了。
1 | // 进入用户主目录 |
打开默认主题文件会发现其实就几行,像下面这样1
2
3
4
5
6
7local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ %s)"
PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
ZSH_THEME_GIT_PROMPT_PREFIX="git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"
需要将其修改为1
2
3
4
5
6
7local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ %s)"
PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%} % %{$reset_color%}'
# ZSH_THEME_GIT_PROMPT_PREFIX="git:(%{$fg[red]%}"
# ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
# ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗%{$reset_color%}"
# ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"
也就是去掉git部分就好了,其他功能照常使用即可。
今天在做一个需求,一般从客户端里分享出来的内容到QQ或者微信之类的地方都是设置好分享的图片、标题和内容的。
但是如果用户再次分享的话,看到分享链接样子就不是一开始分享的样子了,手机QQ会自动从页面中读取内容,通常是第一个h*标签(h1~h5),加上第一个img
和p
标签。
那么如果希望用户看到的分享链接的样子和页面里面实际上的样子不太一样或者话语不同的话,那么通常就需要事先写好内容,或者服务器动态生成内容,然后将内容隐藏起来。
在实际操作中,我发现有几个点需要注意:
display:none
的方式,不论是行内、页面内、还是外部样式表,都不会被预先读取。font-size
设置为0
也是无效的。1 | .share { |
的方式,可以将文字推出页面,但是这样页面原本有文字的部分依然会存在占位,所以还需要加上1
2
3
4.share {
text-indent:-999px;
position:absolut;
}
让文字部分脱离文档流。
对于图片可以一开始就使用position:absolute
的方式,像这样:
1 | .share-img { |
对于分享链接的预读取是有缓存的,多久不清楚,所以调试的时候需要在链接后面加上?a=12312
随机的东西让其认为是不同的页面。
之前因为开发中需要在自己的函数中增加一个事件处理机制。可惜在浏览器环境下只能自定义,如果在nodejs
环境下可以继承自Event
对象。
那么如何自己做一个Event
类呢?
分析需求:
假设设计的api是这样的:1
2
3
4
5
6
7
8// 绑定事件
Event.on('some-event',handleFunc);
// 触发事件
Event.fire('some-event');
// 移除事件
Event.remove('some-event');
那么具体内部如何实现呢?
首先,我们需要一个东西保存这个事件名和事件名对应的函数。
1 | function Event(){ |
上面是绑定事件,其实按照思路写下来也是很简单的。下面是触发事件。
1 | Event.prototype.fire = function(eventName){ |
到此,触发也就写好了,注意,这里我都是使用了forEach方法,这个方法在IE8以下不支持,需要改成for in
方法。
其他的remove
或者once
等,也是在此基础上,比如remove
就是找到之后删掉对应的方法,once
是增加一个选项,在事件触发之后去掉该事件。
前几天因为需要在php5.4
、Mysql
环境中开发,所以准备搞一个虚拟机,跑一个vagrant
。
今天安装git
的时候,感慨Mac OS
下有homebrew
,随便一搜,发现linux
下确实也有brew
,一个homebrew
的分支linuxbrew
。
安装非常简单。
首先身平台自带的安装工具yum
或者apt-get
安装依赖。
1 | sudo apt-get install build-essential curl git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev |
1 | sudo yum groupinstall 'Development Tools' && sudo yum install curl git irb m4 ruby texinfo bzip2-devel curl-devel expat-devel ncurses-devel zlib-devel |
之后,运行安装脚本就好了。1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"
前阵子应公司这边需求,开发嵌入在webView
里面的页面,结果测试同学发现页面第一次载入的时候,是无法点击的,只有当页面滑动之后才可以点击。
通过查看Eclipse
里面的log
发现,在点击的时候,webView
报错,页面没有错误,页面的事件都没有触发。
通过在页面载入之后的一瞬间执行1
2document.body.scrollHeight = 1;
document.body.scrollHeight = 0;
就可以了。
小米部分机型存在即使这样做,也有部分点击会报错的问题。
最近搬家到了回龙观,告别了各种奇怪情况的铁通,选择了联通。
本来第一次去办联通宽带的时候,50M一年1798,100M一年1998,我一看那100M好了。办理的时候小姑娘提醒我100M只有70、80M,50M只有40M左右,好吧,忍了。。。
后来又说最多只能连接4台电脑,这我就有点不能忍了。我妈两台电脑,我两天电脑,我老爸两台电脑,我老婆一台电脑,这是要同时考验夫妻关系、父子/母子关系、婆媳关系么?于是我就走了。
后来,想了想,又问了一下,说是最多只能4台台式机,无线设备多少都无所谓,好吧,看了看旁边中国移动(铁通),还是选择了联通。
联通的师傅还挺好,上门来给安装,只是必须用联通提供的设备上网。设备还不错,有Moden拨号的功能,还自带路由、无线功能。装上之后,手机就可以上网了。
由于家里是小米路由器连接的,后来经常有电脑没法上网。
而且是有时可以上,有时不可以,有的可以上,有的不可以,状况很奇怪。
经过检查发现,所有不能上网的设备的IP地址都是小米路由器分配的,所有可以上网的设备IP都是联通设备分配的,如此说来应该关闭小米路由器的DHCP,让所有的IP都由联通设备分配就好了。
一关上,果然不再出现问题。
当时上网找了很久没法人给出答案,希望这篇文章可以给遇到同样问题的人一点帮助。
之前本来说好给一个创业的前辈做微信服务号的,为此特地去看了好几遍微信公众平台开发文档,寻找了好几个封装好的库(nodejs、PHP的都找了一遍)没想到后来跳票了。
但之前总结的东西不想废弃在那里,放出来希望对大家有帮助。
申请微信公众号需要5个步骤,分别为:
1. 填写基本信息
2. 邮箱激活
3. 选择类型
4. 信息登记
5. 公众号信息
下面,针对每个流程,给出说明、需要的材料以及注意事项。
这个地方只需要填写邮箱和密码。
* 注意:
邮箱作为登录账号,不可以使用注册过微信公众号的邮箱,即使是绑定在个人微信号上的邮箱也不行。
另外,最好使用国内的邮箱(QQ邮箱,你懂的)。虽然我用gmail注册,发送邮件也是很快的,不过国外的邮箱不稳定。
这一步没什么好说的,微信公众平台会向上一步填写的邮箱地址发送一封激活邮件,去邮箱里面激活即可。
在这一步,将会选择微信公众号的类型。
因为一个公众号只能选择一次,所以一定要慎重。
具体的信息看图上就好了。
因为一些特别原因,在公司开发时只能虚拟机只能使用Nat链接方式,如果使用桥接方式,不同ap无法访问到我电脑内的虚拟机。只能通过端口转发方式,让别人的电脑访问我虚拟机做测试。
可是每次启动电脑时,虚拟机内的ip地址都会变。VMware Fusion并没有界面化的设置,需要在命令行中进行设置。
1 | cd /Library/Preferences/VMware Fusion/vmnet8 sudo vim nat.conf |
找到1
[incomingtcp]
# Use these with care - anyone can enter into your VM through these...
# The format and example are as follows:
#<external port number> = <VM's IP address>:<VM's port number>
在下面添加一行1
// 9000是我本地转发的端口,假设本机IP地址:192.168.1.82,那么同事测试时访问192.168.1.82:9000即可访问到虚拟机
// 9000端口的请求,转发到虚拟机的80端口上
9000 = 172.16.59.131:80
到这一步虚拟机端口转发就做好了,Esc
+ZZ
或者Esc
+wq
保存并退出。