清除chrome app 在os x 的launchpad

在自己的台式机上用chrome 创建了2个桌面快捷(实质是创建了chrome app),然后同步到我的Mac os 上来了 = =!
手动删除方式见下文。
cd ~/Applications/Chrome\ Apps.localized
$ rm -rf *.app

Share

Disable IPv6 on ssh client

问题起于我要经ssh 连git.dn42.us, 比较特别的是我的机器(vps)上启用了IPv6
OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016
debug1: Reading configuration data /home/seven/.ssh/config
debug1: /home/seven/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to git.dn42.us [2607:5300:60:3d95::1] port 22.
以上是ssh的输出。 可以看到是通过IPv6连接的,死活不通。
于是禁用IPv6
~/.ssh/config
Host *
    AddressFamily inet
It works fine.

Share
分类: 随笔 | 63 个字

开源软件许可协议 – GPL

GNU通用公共许可协议

(英语:GNU General Public License,简称 GNU GPL、GPL)是广泛使用的免费软件许可证,可以保证终端用户得自由运行,学习,共享和修改软件。许可证最初由GNU项目的自由软件基金会 (FSF)的理查德·斯托曼(Richard Matthew Stallman)撰写,并授予计算机程序的收件人自由软件定义的权利。 GPL是一个Copyleft许可证,这意味着派生作品只能以相同的许可条款分发。 这与许可免费软件许可证有所区别 ,其中BSD许可证和MIT许可证是广泛使用的示例。 GPL是第一个普遍使用的Copyleft许可证。
历史上,GPL许可证系列一直是免费和开源软件领域最受欢迎的软件许可之一。根据GPL许可的优异自由软件程序的例子有Linux内核和GNU编译器集合 (GCC)。 David A. Wheeler认为,GPL提供的Copyleft对于基于Linux的系统的成功至关重要,给予向内核贡献的程序员保证他们的工作将有益于整个世界并保持自由,而不至于被不提供回馈给社区的不肖软件公司所剥削。
2007年,发布了第三版许可证(GNU GPLv3),以解决在长期使用期间发现的第二版(GNU GPLv2)所发生的一些困扰。 为了使许可证保持最新状态,GPL许可证包含一个可选的“并延伸到未来版本”条款,允许用户在FSF更新的原始条款或新版本之间进行选择。 有些开发人员在软件授权使用时,选择省略它; 例如,Linux内核已经在GPLv2下获得许可,就不需包括“并延伸到未来版本”的声明。

GPL授予程序接受人以下权利,或称“自由”,或称“copyleft”:
* 以任何目的运行此程序的自由;
* 再复制的自由;
* 改进此程序,并公开发布改进的自由(前提是能得到源代码)。
相反地,随版权所有软件的最终用户许可证几乎从不授予用户任何权利(除了使用的权利),甚至可能限制一些法律允许的行为,比如逆向工程。
GPL与其他一些更“许可的”自由软件许可证(比如BSD许可证)相比,主要区别就在于GPL寻求确保上述自由能在复制软件及派生作品中得到保障。它通过一种由斯托曼发明的叫Copyleft的法律机制实现,即要求GPL程序的派生作品也要在GPL之下。相反,BSD式的许可证并不禁止演绎作品变成专有软件。
GPL是自由软件和开源软件的最流行许可证。到2004年4月,GPL已占Freshmeat上所列的自由软件的约75%,SourceForge的约68%。类似的,2001年一项关于Red Hat Linux 7.1的调查显示一般的代码都以GPL发布。著名的GPL自由软件包括EMACS,Linux核心(并非所有Linux发行版的核心都是开源的)和GCC。

Share

在Windows 环境中使用 Dig 工具

Dig 在Linux 里一般是在 bind-utils这个包里的。

作者Windows 环境用的模拟终端为 Babun https://github.com/babun/babun 是基于Cygwin的。可惜,没有提供dig的二进制包。可惜。

好,其实解决方法很简单,去网上直接下个dig.exe放到Windows path里就好了=)  

重点 ### 此方法适用于所有Windows 命令行

A)下载:

下载地址 [ftp://ftp.nominum.com/pub/isc/bind9/]

拉到最下面找最新版本的

下这个

A1) 准备:

解压后在目录里找到C++安装文件,双击安装

)

B) 安装DLL文件

把目录里lib*.dll拷贝到 C:\WINDOWS\System32\ 目录下

B1)安装dig.exe

把目录里的dig.exe 也拷贝到 C:\WINDOWS\System32\ 目录下

C)完成! 测试!

babun

powershell

Share

明·杨仪《明良记》

唐解元寅既废弃,诗云: ‘一失足成千古恨,再回头是百年人。’

比喻一旦犯下严重错误或堕落,就成为终身的憾事。

Share

非主流VPN方案

常见的VPN(OpenVPN、SSTP、IKEv2、CiscoIPsec、PPTP、GAE、L2TP)已经受到GFW干扰。

如果还要坚持用VPN的方式来翻墙,请使用以下VPN方案

Tinc VPN:http://www.tinc-vpn.org/

SigmaVPN:http://code.google.com/p/sigmavpn/

SSHVpn:http://sshvpn.sourceforge.net/

SocialVPN:http://code.google.com/p/socialvpn/

BadVpn:http://code.google.com/p/badvpn/

N2n:http://www.ntop.org/products/n2n/

Embedded VPN:http://embeddedvpn.com/

TeamViewer:http://www.teamviewer.com/zhcn/download/windows.aspx

cjdns:http://cjdns.info/

FairVPN:http://minerva.netgroup.uniroma2.it/fairvpn

GVPE:http://software.schmorp.de/pkg/gvpe.html

QuickTun:http://wiki.qontrol.nl/QuickTun

VTun:http://vtun.sourceforge.net/

sshuttle:https://github.com/apenwarr/sshuttle

LogMeIn Hamachi:https://secure.logmein.com/products/hamachi/

PacketiX VPN:http://igfw.net/archives/8315

udpip:http://igfw.net/archives/7756

Share

小谢同学写的linux 服务器调优脚本

modify_sysctl.py

# -*- coding: utf-8 -*-
'''
Created on 2015-1-21

@author: xie
'''
'''
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 30000
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 9000 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
'''
import re,commands
SYSCTL_CONFIG = '/etc/sysctl.conf'
class SetSysctl():
def __init__(self):
self._sysctls = []
self._sysctls.append('net.ipv4.tcp_rmem = 4096 87380 16777216')
self._sysctls.append('net.ipv4.tcp_wmem = 4096 65536 16777216')
self._sysctls.append('net.core.wmem_default = 8388608')
self._sysctls.append('net.core.rmem_default = 8388608')
self._sysctls.append('net.core.rmem_max = 16777216')
self._sysctls.append('net.core.wmem_max = 16777216')
self._sysctls.append('net.core.netdev_max_backlog = 30000')
self._sysctls.append('net.core.somaxconn = 65535')
self._sysctls.append('net.ipv4.tcp_max_syn_backlog = 262144')
self._sysctls.append('net.ipv4.tcp_max_tw_buckets = 6000')
self._sysctls.append('net.ipv4.tcp_tw_recycle = 1')
self._sysctls.append('net.ipv4.tcp_tw_reuse = 1')
self._sysctls.append('net.ipv4.tcp_fin_timeout = 30')
self._sysctls.append('net.ipv4.ip_local_port_range = 9000 65535')
self._sysctls.append('net.ipv4.tcp_syncookies = 1')
self._sysctls.append('net.ipv4.tcp_max_orphans = 262144')
self._sysctls.append('net.ipv4.tcp_synack_retries = 2')
self._sysctls.append('net.ipv4.tcp_syn_retries = 2')
self._sysctls.append('')
self._sysctls.append('kernel.core_pattern = /home/core/core.%p')
self._create_core()
self._read_sysctl()
self._write_sysctl()

def _read_sysctl(self):
network = open(SYSCTL_CONFIG, 'r')
self._lines = []
for line in network:
flag = False
for sysctl in self._sysctls:
regex_str = sysctl.split('=')[0]
ma = re.match(r'^'+regex_str+'.*?', line, re.IGNORECASE)
if ma:
flag = True
break;
if not flag:
self._lines.append(line)
network.close()

def _write_sysctl(self):
sysctls = open(SYSCTL_CONFIG, 'w')
self._lines.extend(self._sysctls)
sysctls.write('\n'.join(self._lines))
sysctls.close()
commands.getoutput('sysctl -p')

def _create_core(self):
commands.getoutput('mkdir /home/core')
commands.getoutput('chown -R mc-ops:mc-ops /home/core')

if __name__ == '__main__':
SetSysctl()

modify_ulimit.py

<br /># -*- coding: utf-8 -*-
#!/usr/bin/env python2.7
'''
Created on 2013-5-6

@author: xie
'''
import commands, re,os

LIMIT_CONF = '/etc/security/limits.conf'
SOFT_NOFILE = '* soft nofile 1048576\n'
HAND_NOFILE = '* hard nofile 1048576\n'
SOFT_NPROC = '* soft nproc 1048576\n'
HAND_NPROC = '* hard nproc 1048576\n'
PROFILE_CONF = '/etc/profile'
ULIMIT_NOFILE = 'ulimit -HSn 1048576\n'

NPROC_LIMIT_CONF = '/etc/security/limits.d/90-nproc.conf'

def modify_ulimit():
lines = []
ulimit = open(LIMIT_CONF, 'r')
for line in ulimit:
ma = re.match(r'.*?soft *?', line, re.IGNORECASE)
mx = re.match(r'.*?hard *?', line, re.IGNORECASE)
if ma or mx:
continue
lines.append(line)
ulimit.close()

lines.append(SOFT_NOFILE)
lines.append(HAND_NOFILE)
lines.append(SOFT_NPROC)
lines.append(HAND_NPROC)

ulimit = open(LIMIT_CONF, 'w')
ulimit.write(''.join(lines))
ulimit.close()

commands.getoutput('ulimit -HSn 1048576')
if not isCentos7():
modify_nproc_ulimit()
writeProfile()

def modify_nproc_ulimit():
lines = []
if os.path.exists(NPROC_LIMIT_CONF):
ulimit = open(NPROC_LIMIT_CONF, 'r')
for line in ulimit:
ma = re.match(r'.*?soft *?', line, re.IGNORECASE)
if ma:
continue
lines.append(line)
ulimit.close()

lines.append('* soft nproc 1048576\n')
lines.append('root soft nproc unlimited\n')

ulimit = open(NPROC_LIMIT_CONF, 'w')
ulimit.write(''.join(lines))
ulimit.close()

def writeProfile():
lines = []
flag = False
profile = open(PROFILE_CONF, 'r')
for line in profile:
ma = re.match(r'.*?ulimit -HSn 1048576.*', line, re.IGNORECASE)
if ma is not None:
flag = True
lines.append(line)
profile.close()
if flag == False:
lines.append(ULIMIT_NOFILE)
profile = open(PROFILE_CONF, 'w')
profile.write(''.join(lines))
profile.close()

def isCentos7():
mage = commands.getoutput('cat /etc/redhat-release').split('\n')
#CentOS Linux release 7.1.1503 (Core)
#CentOS release 6.6 (Final)
cP = re.compile(r'.*\s+(?P\d+).*', re.IGNORECASE)
for mess in mage:
ma = cP.match(mess)
if ma is not None:
ip = ma.group('release')
if ip == '7':
return True
return False
pass

if __name__ == '__main__':
modify_ulimit()

Share

我们熟知的那些英文,你念对了么?[FW]

()标相应英文单词

[]标音标
=====公司/产品名=====
Youtube (You-tube [tju:b]) 念 优tiu啵 不念 优吐毙
Skype [ˈskaɪp] 念 死盖破 不念 死盖屁
Adobe [əˈdəʊbi] 念 阿兜笔 不念 阿斗伯
Chrome [krəʊm] 念 克肉姆
C# (C Sharp) 念 C煞破
GNU [(g)nuː] 念 哥怒
GUI [ˈɡui] 念 故意
JAVA [ˈdʒɑːvə] 念 扎蛙 不念 夹蛙
AJAX [ˈeɪdʒæks] 念 诶(ei)贾克斯 不念 阿贾克斯
Ubuntu [uˈbuntuː] 念 巫不恩兔 不念 友邦兔
Debian [ˈdɛbiən] 念 得(dei)变
Linux [ˈlɪnəks] [ˈlɪnʊks] 两种发音 丽娜克李扭克斯 都可以
LaTeX [ˈleɪtɛk] [ˈleɪtɛx] [ˈlɑːtɛx] [ˈlɑːtɛk] 雷泰克拉泰克 都可以 (根据Knuth的建议,雷泰克斯拉泰克斯不正确。而且LaTeX的重音是放在上。感谢@Rio讨论。另外感谢发音大牛@梁海刚刚指出, [ˈlɑːtɛx] 注音符号里的x发的不是克斯的音,而是接近“巴赫”的那个。)
GNOME [ɡˈnoʊm] [noʊm] 两种发音 格弄姆 弄姆 都可以
App [ˈæp] 念阿破(与爱破也比较像,参见音标),不能把三个字母拆开念成A P P。
=====一般英语=====
null [nʌl] 念
jpg [ˈdʒeɪpɛɡ] 念 zhei派个 不念 勾屁记
WiFi [ˈwaɪfaɪ] 念 歪fai
mobile [moˈbil] [ˈmoˌbil] [ˈməubail] 膜拜哦牟bou 都可以
integer [ˈɪntɪdʒə] 念 音剃摺儿 不念 阴太阁儿
cache [kæʃ] 念 喀什 不念 卡尺
@ 念 at
=====感谢@Lawrence Li同学的补遗=====
Tumblr (Tumbler) 念 贪不勒
nginx (Engine X)念 恩静 爱克斯(@Lawrence Li有不同意见)
Apache [əˈpætʃiː] 念 阿趴气
Lucene [ˈluːsin] 念 鲁信
MySQL [maɪ ˌɛskjuːˈɛl] [maɪ ˈsiːkwəl] 念 买S奎儿买吸扣 都可以
Exposé [ɛksˈpəʊzeɪ] 念 埃克斯剖Z (重音在Z上)
RFID 【本条争议颇大】:有人念af rid, ri fid,但是RFID官方念法依然是四个字母分开读R F I D
JSON (jason) 念 zhei森
Processing [ˈprəʊsesɪŋ] 重音在Pro上

avatar [ˌævə'tɑr] 念 艾瓦塌儿

作者:Filestorm
链接:https://www.zhihu.com/question/19739907/answer/12960562
来源:知乎

著作权归作者所有,转载请联系作者获得授权。

Share

Using ES6 with gulp — Mark Goodyear — Front-end developer and designer

Jun 24, 2015

With gulp 3.9, we are now able to use ES6 (or ES2015 as it’s now named) in our gulpfile—thanks to the awesome Babel transpiler.

Firstly make sure you have at least version 3.9 of both the CLI and local version of gulp. To check which version you have, open up terminal and type:

gulp -v

This should return:

CLI version 3.9.0
Local version 3.9.0

If you get any versions lower than 3.9, update gulp in your package.json file, and run the following to update both versions:

npm install gulp && npm install gulp -g

Creating an ES6 gulpfile

To leverage ES6 you will need to install Babel (make sure you have Babel 6) as a dependency to your project, along with the es2015 plugin preset:

npm install babel-core babel-preset-es2015 --save-dev

Once this has finished, we need to create a .babelrc config file to enable the es2015 preset:

touch .babelrc

And add the following to the file:

{
  "presets": ["es2015"]
}

We then need to instruct gulp to use Babel. To do this, we need to rename the gulpfile.js to gulpfile.babel.js:

mv "gulpfile.js" "gulpfile.babel.js"

We can now use ES6 via Babel! An example of a typical gulp task using new ES6 features:

'use strict';

import gulp from 'gulp';
import sass from 'gulp-sass';
import autoprefixer from 'gulp-autoprefixer';
import sourcemaps from 'gulp-sourcemaps';

const dirs = {
  src: 'src',
  dest: 'build'
};

const sassPaths = {
  src: `${dirs.src}/app.scss`,
  dest: `${dirs.dest}/styles/`
};

gulp.task('styles', () => {
  return gulp.src(paths.src)
    .pipe(sourcemaps.init())
    .pipe(sass.sync().on('error', plugins.sass.logError))
    .pipe(autoprefixer())
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest(paths.dest));
});

Here we have utilised ES6 import/modules, arrow functions, template strings and constants. If you’d like to check out more ES6 features, es6-features.org is a handy resource.

Share
分类: 未分类 | 308 个字 | 评论