Browsed by
分类:周边技术

Linux下安装ShadowSocks

Linux下安装ShadowSocks

服务器环境:CentOS6.5 ,Python3.5,服务器pip可用。

1.安装和配置:

pip install shadowsocks

创建配置文件:

    vi /etc/shadowsocks.json
{
    "server":"0.0.0.0",
    "server_port":8989,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"yourpassword",
    "timeout":600,
    "method":"aes-256-cfb",
    "fast_open": false,
    "workers": 1
}

各字段的含义:

  • server:服务器 IP (IPv4/IPv6),注意这也将是服务端监听的 IP 地址
  • server_port:监听的服务器端口
  • local_address:本地监听的 IP 地址
  • local_port:本地端端口
  • password:用来加密的密码
  • timeout:超时时间(秒)
  • method:加密方法,可选择 “bf-cfb”, “aes-256-cfb”, “des-cfb”, “rc4”, 等等。默认是一种不安全的加密,推荐用 “aes-256-cfb”
  • works:works数量,默认为 1
  • fast_open:true 或 false。如果你的服务器 Linux 内核在3.7+,可以开启 fast_open 以降低延迟。开启方法:
echo 3 > /proc/sys/net/ipv4/tcp_fastopen

开启之后,将 fast_open 的配置设置为 true 即可。

 

2、 命令行参数(服务器端启动命令)

ssserver -c /etc/shadowsocks.json

如果想在后台一直运行Shadowsocks,启动命令如下:

nohup ssserver -c /etc/shadowsocks.json > /dev/null 2>&1 &

备注:关于nohup,是可以让程序在后台运行的命令。

同时可以用命令行参数覆盖 /etc/shadowsocks.json 里的设置:

sslocal -s 服务器地址 -p 服务器端口 -l 本地端端口 -k 密码 -m 加密方法

ssserver -p 服务器端口 -k 密码 -m 加密方法

备注:sslocal是客户端程序;ssserver是服务端程序。

 

5、 防火墙设置(如有)
编辑防火墙配置文件/etc/sysconfig/iptables,将服务器端口(server_port)放行。
新增一条防火墙规则:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8989 -j ACCEPT

如果找不到 文件/etc/sysconfig/iptables, 可以使用命令行:

iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 8989 -j ACCEPT

service iptables save

重启防火墙iptables:

service iptables restart

至此,服务器端的 Shadowsocks 安装和配置完毕。


等等…, 为什么能访问百度,访问不了facebook,啊? 服务器是国内的!!!吐血三升!

 

 

Git常用命令速查

Git常用命令速查

gitgit clone http://..git #复制远程库下来
git remote rm orgin #断开远程库

git init #初始化init
git remote add http://..git #添加远程库连接
git push -u origin master #推送到远程库,第一次加 -u
git pull #拉去远程库更新

ssh-keygen -t rsa -C "email@163.com" #生成ssh key

git log # 日志
git log --graph --pretty=oneline --abbrev-commit #日志,图形化,只显示一行, commit_id缩写
git status #当前状态

git add #添加到暂存去,空文件夹不行
git commit -m "message"

git reset --hard HEAD^ #回退到上个版本, --hard 是强制同步修改工作区的文件
git reflog #版本操作的编号
git reset --hard <comond_id> #版本回退后还能恢复

git reset HEAD <file> #从暂存区移除文件
git checkout -- <file> #撤销工作区文件的修改


git branch -b dev #新建并切换到dev分支
git branch dev #新建dev分支
git checkout dev #切换到dev分支

git branch -d dev 删除dev分支

git merge --no-ff -m "message" dev #合并分支dev到当前 带no-ff,删除分支后依然可以看到log历史记录


git stash #保存现场
git stash -u #强制保存现场,包括未add追踪的文件
git stash pop #恢复现场,并删除stash的记录
git stash list #查看stash


git tag v0.1 #创建标签,默认HEAD
git tag v0.2 354qwe4 #可指定commit_id来创建
git push origin v0.1 #推送标签到远程
git push origin --tag #推送所有未推送的标签到远程
git tag -d v0.1 #删除标签
git push origin :refs/tags/v0.1 #将删除的标签同步删除到远程


git config --global alias.st status #全局别名,git st = git status
#超强log,别名lg
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset
-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"



Mac 下使用tree命令

Mac 下使用tree命令

 

tree

在Mac上,使用tree命令生成目录树,查看文件目录,非常直观方便。

首先,用brew来安装tree。

brew install tree

安装过程如下:

[codesyntax lang=”php”]

==> Downloading https://homebrew.bintray.com/bottles/tree-1.7.0.el_capitan.bottle.1.tar.gz

######################################################################## 100.0%

==> Pouring tree-1.7.0.el_capitan.bottle.1.tar.gz

  /usr/local/Cellar/tree/1.7.0: 7 files, 113.1K

[/codesyntax]

安装完成后,使用tree命令查看下效果,-L 表示层级

tree -L 2

上面命令即显示当前目录2层的目录树。

效果如下:

tree2

 

还可以讲目录树保存一下。

tree -L 2 > README.md

 

QQ群加群助手web/iOS/Android/二维码

QQ群加群助手web/iOS/Android/二维码

官网地址:http://qun.qq.com/join.html

网页版:

<a target=”_blank” href=”http://shang.qq.com/wpa/qunwpa?idkey=【官网给的你的QQ群的Key】”><img border=”0″ src=”http://pub.idqqimg.com/wpa/images/group.png” alt=”Flash新手营内部学习” title=”Flash新手营内部学习”></a>

iOS:

– (BOOL)joinGroup:(NSString *)groupUin key:(NSString *)key{
NSString *urlStr = [NSString stringWithFormat:@”mqqapi://card/show_pslcard?src_type=internal&version=1&uin=%@&key=%@&card_type=group&source=external”, @”244675613″,@”【官网给的你的QQ群的Key】”];
NSURL *url = [NSURL URLWithString:urlStr];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
return YES;
}
else return NO;
}

 

Android:

/****************
*
* 发起添加群流程。群号:xxx key 为:【官网给的你的QQ群的Key】
* 调用 joinQQGroup(【官网给的你的QQ群的Key】) 即可发起手Q客户端申请加群
*
* @param key 由官网生成的key
* @return 返回true表示呼起手Q成功,返回fals表示呼起失败
******************/
public boolean joinQQGroup(String key) {
Intent intent = new Intent();
intent.setData(Uri.parse(“mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D” + key));
// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
startActivity(intent);
return true;
} catch (Exception e) {
// 未安装手Q或安装的版本不支持
return false;
}
}

 

 

不过Android版貌似有个坑爹的地方,跳转到加群页面后,如果用户进行了操作,返回只会返回到QQ主界面,无法返回到自己应用,关键是再点击自己的应用图标  依然打开的是QQ,必须杀掉自己的应用才可以,坑!

 

 

 

 

SVN版本库迁移(保存Log)

SVN版本库迁移(保存Log)

svn版本库完整迁移,保存完整信息:

关闭所有运行的进程,并确认没有程序在访问存储库(如 httpd、svnserve 或本地用户在直接访问)。
备份svn存储库
#压缩备份
svnadmin dump /home/workhome/svn/repository | gzip > ~/repository-backup.gz
#不压缩备份
svnadmin dump /home/workhome/svn/repository > ~/repository-backup.svn

恢复svn存储库
#建立新的svn存储库
svnadmin create /home/workhome/svn/newrepository
#确认成功与否
ls -l /home/workhome/svn/newrepository
#导入存储库数据
svnadmin load /home/workhome/svn/newrepository < ~/repository-backup.svn

 

 

Mac环境下svn的使用

Mac环境下svn的使用

在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还需做一下简单的配置。

我们首先来看下,如何在Mac环境下搭建svn服务器端环境。

创建代码仓库,用来存储客户端所上传的代码

我先在/User/apple目录下新建一个svn目录,以后可以在svn目录下创建多个仓库目录

打开终端,创建一个mycode仓库,输入指令:svnadmin create /Users/apple/svn/mycode

指令执行成功后,会发现硬盘上多了个/Users/apple/svn/mycode目录,目录结构如下:

 

配置svn的用户权限

主要是修改/svn/mycode/conf目录下的三个文件

1.打开svnserve.conf,将下列配置项前面的#和空格都去掉

  1. # anon-access = read
  2. # auth-access = write
  3. # password-db = passwd
  4. # authz-db = authz

anon-access = read代表匿名访问的时候是只读的,若改为anon-access = none代表禁止匿名访问,需要帐号密码才能访问

 

2.打开passwd,在[users]下面添加帐号和密码,比如:

  1. [users]
  2. mj = 123
  3. jj = 456

帐号是mj,密码是123

 

3.打开authz,配置用户组和权限

我们可以将在passwd里添加的用户分配到不同的用户组里,以后的话,就可以对不同用户组设置不同的权限,没有必要对每个用户进行单独设置权限。

在[groups]下面添加组名和用户名,多个用户之间用逗号(,)隔开

  1. [groups]
  2. topgroup=mj,jj

说明mj和jj都是属于topgroup这个组的,接下来再进行权限配置。

使用[/]代表svn服务器中的所有资源库

  1. [/]
  2. @topgroup = rw

上面的配置说明topgroup这个组中的所有用户对所有资源库都有读写(rw)权限,组名前面要用@

如果是用户名,不用加@,比如mj这个用户有读写权限

  1. [/]
  2. mj = rw

至于其他精细的权限控制,可以参考authz文件中的其他内容

 

4.启动svn服务器

前面配置了这么多,最关键还是看能否正常启动服务器,若启动不来,前面做再多工作也是徒劳。

在终端输入下列指令:svnserve -d -r /Users/apple/svn

或者输入:svnserve -d -r /Users/apple/svn/mycode

没有任何提示就说明启动成功了

 

5.关闭svn服务器

如果你想要关闭svn服务器,最有效的办法是打开实用工具里面的“活动监视器”

综合上述,我们就可以轻松搭建svn服务器环境了

 

使用svn客户端功能

1.从本地导入代码到服务器(第一次初始化导入)

在终端中输入

svn import /Users/apple/Documents/eclipse_workspace/weibo svn://localhost/mycode/weibo –username=mj –password=123 -m “初始化导入”

我解释下指令的意思:将/Users/apple/Documents/eclipse_workspace/weibo中的所有内容,上传到服务器mycode仓库的weibo目录下,后面双引号中的”初始化导入”是注释

 

2.从服务器端下载代码到客户端本地

在终端中输入svn checkout svn://localhost/mycode –username=mj –password=123 /Users/apple/Documents/code

我解释下指令的意思:将服务器中mycode仓库的内容下载到/Users/apple/Documents/code目录中

 

3.提交更改过的代码到服务器

在步骤2中已经将服务器端的代码都下载到/Users/apple/Documents/code目录中,现在修改下里面的一些代码,然后提交这些修改到服务器

1> 打开终端,先定位到/Users/apple/Documents/code目录,输入:cd/Users/apple/Documents/code

2> 输入提交指令:svn commit -m “修改了main.m文件”

这个指令会将/Users/apple/Documents/code下的所有修改都同步到服务器端,假如这次我只修改了main.文件

可以看到终端的打印信息:

  1. Sending        weibo/weibo/main.m
  2. Transmitting file data .
  3. Committed revision 2.

 

4.更新服务器端的代码到客户端

这个应该是最简单的指令了,在终端中定位到客户端代码目录后,比如上面的/Users/apple/Documents/code目录,然后再输入指令:svn update

 

5.至于svn的其他用法,可以在终端输入:svn help

这里列出一大堆svn指令,后面括号中的内容的一般代表着指令的简称,比如我们可以用svn ci代替svn commit,用svn co代替svn checkout

原文链接:http://blog.csdn.net/q199109106q/article/details/8655204

 

后续追加:

Flash Builder4.7安装了svn1.8插件后,或提示 Subversion native library not available,修改FB设置的svn里svn借口
QQ20150323-1@2x

———-

添加svn服务开机启动

在etc/rc.local(要创建)文件里,加上svnserver -d -r user/apple/svn/rep(svn目录)

如果权限不足,需要 sudo ….

关于有限状态机(FSM)的思考

关于有限状态机(FSM)的思考

有限状态机(finite state machine)是一个数学概念,如果把它运用于程序中,可以发挥很大的作用。它是一种协议,用于有限数量的子程序(“状态”)的发展变化。每个子程序进行一些处理并选择下一种状态(通常取决于下一段输入)。有限状态机(FSM)可以用作程序的控制结构。FSM对于那些基于输入的在几个不同的可选动作中进行循环的程序尤其合适。

 

在游戏中涉及到状态状态切换的时候,可以尝试使用这种机制,如人物的动作,AI行为等等。有限状态机确保了每个状态在切换的时的安全性,在状态切换时可以进行一些其他的处理操作。

当然也有人认为有限状态机时代已经终结,如这篇文章:http://www.cppblog.com/woaidongmao/archive/2009/10/31/99892.aspx

 

使用ANT脚本导出发布版SWF(AIRSDK14)

使用ANT脚本导出发布版SWF(AIRSDK14)

使用ant脚本可以很方便的构建发布自己的项目,尤其是对于多语言多平台的版本,人工发布即费时,又容易漏掉东西,这些工作就交给脚本吧,机器就擅长干这个!

网上的关于ant的资料更多是用flex的sdk,但是现在移动开发一般都是在FB4.7里用的airsdk,经博主尝试以后,基本做法是一样的,ant的安装就不赘述了,自行搜索即可。下面就贴出相关代码:

 

build.xml如下:

[codesyntax lang=”actionscript3″]

<?xml version="1.0" encoding="UTF-8"?>
<project name="My App Builder" basedir=".">

	<property name="FLEX_HOME" value="D:\Program Files (x86)\Adobe\Adobe Flash Builder 4.7\eclipse\plugins\com.adobe.flash.compiler_4.7.0.349722\AIRSDK" />
	<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
	<property name="ADT.JAR" value="${FLEX_HOME}/lib/adt.jar" />

	<property name="APP_ROOT" value="D:\jobWp47\testant" />
	<property name="APP_NAME" value="testant" />
	<property name="APP_MAIN_CLASS" value="testant.as" />
	<property name="APP_ROOT_FILE" value="${APP_NAME}.swf" />
	<property name="APP_OUTPUT_PATH" value="${APP_ROOT}/bin" />

	<target name="swf">
		<property name="release" value="true" />

		<mxmlc file="${APP_ROOT}/src/${APP_MAIN_CLASS}" output="${APP_OUTPUT_PATH}/${APP_ROOT_FILE}" actionscript-file-encoding="UTF-8" keep-generated-actionscript="true" show-unused-type-selector-warnings="false" static-link-runtime-shared-libraries="true" fork="true" warnings="false" incremental="true" maxmemory="512m">

			<!-- Get default compiler options. -->
			<load-config filename="${FLEX_HOME}/frameworks/airmobile-config.xml" />
			<!-- List of path elements that form the roots of ActionScript
            class hierarchies. -->
			<source-path path-element="${FLEX_HOME}/frameworks" />
			<source-path path-element="${APP_ROOT}/src" />

			<!-- List of SWC files or directories that contaian SWC files. -->
			<compiler.library-path dir="${FLEX_HOME}/frameworks" append="true">
                <include name="libs" />
                <include name="../bundles/{locale}" />
            </compiler.library-path>
			<swf-version>24</swf-version>
		</mxmlc>

        <delete dir="${APP_OUTPUT_PATH}/generated"/>
        <delete>
            <fileset dir="${APP_OUTPUT_PATH}" includes="${APP_NAME}.swf.cache"/>
        </delete>
	</target>
</project>

[/codesyntax]

建的测试项目是 testant,相关路径设定需要根据实际情况调整

调用ant脚本,使用FB继承的ant,也很方便,不过博主发现,在控制台打印信息时,中文会乱码,暂时还没有找到解决方法,另外一种就是通过bat批处理来直接调用。

bat脚本如下:

call ant -f build.xml swf

一行脚本即可搞定,build.xml 后跟的swf是xml文件里的target名,建议保存成bat文件,方便使用!

 

Read More Read More

网盘搭建svn心得

网盘搭建svn心得

使用SVN保存自己的项目代码,还是很方便的,可惜现在的svn空间要么收费,要么免费但项目开源!

最近看到一种用网盘搭建svn的方法,正好阿里云也到期了,不由动心一试!

具体方法:

1.SVN的客户端相信都有,现在需要安装SVN的服务器端,(推荐VisualSVN,小巧简单)

2.安装一个网盘客户端(360、百度、QQ微云等,什么网盘都可以),将VisualSVN的仓库目录设置为网盘的同步目录!

OK,搞定了 ,就这么简单!

原理:平时我们上传svn文件,只是通过网络上传到svn服务器,现在把本机作为一个svn的服务器,提交svn只是相当于把文件从一个目录复制到另一个目录,速度也快了很多;网盘的作用是把svn服务器的代码仓库上传到网盘服务器,这样即使在其他电脑上,只要把网盘里的文件同步下来,同样可以用svn,对于单个人来用,还是非常方便的!

Vbox扩容VDI硬盘大小

Vbox扩容VDI硬盘大小

vbox_logo2_gradient用vbox装的黑mac,当时动态分配的20G,现在不太够用了,扩容方法如下:

命令参考:VBoxmanage modifyhd name.vdi/vhd –-resize size

1.打开cmd,进入vbox安装目录如(D:\Program Files (x86)\vbox)

2.在cmd提示符下面输入VBoxmanage modifyhd E:\mac\mac.vdi –resize 40960

size是以M(兆)为单位的,我这里扩展为40G。执行完之后你会惊喜的发现,这个虚拟盘已经变大了。
注:在扩展容量之前,需要先把虚拟机关掉