获取两位数的小时和分
let Hour:NSDate = NSDate()
let Min:NSDate = NSDate()
let dateForm=NSDateFormatter()
dateForm.dateFormat=”HH”
let getHour=dateForm.stringFromDate(Hour)
dateForm.dateFormat=”mm”
let getMin=dateForm.stringFromDate(Min)
Category Archives: 开发技术
raspberry pi 不黑屏 不进入省电模式
升级
apt-get install -y x11-xserver-utils
修改了两处配置,也不知道哪里生效了。反正不进省电模式了。
/etc/lightdm/lightdm.conf
在配置文件中添加
xserver-command=X -s 0 dpms
/etc/rc.local
在启动项中的修改
setterm -blank 0
python调用golang编译的动态链接库
当前任务:抓取页面,然后删除回车,tab和空格,然后打印出来。
最初是在raspberry上做的测试。使用新浪作为测试网站。
python部分文件名 gradAndDel.py
#!/bin/env python # -*- coding:utf-8 -*- # ------------------------------- # Date: 2016-01-21 # Author: simonzhang # Web: www.simonzhang.net # Email: simon-zzm@163.com # ------------------------------- import urllib url = "http://www.sina.com.cn/" data = rullib.urlopen(url).read() data = data.replace('\n', '') data = data.replace('\t', '') data = data.replace(' ', '') print data
使用时间如下
real 0m2.878s
user 0m1.910s
sys 0m0.240s
golang文件名gradAndDel.go
package main import ( "fmt" "io/ioutil" "net/http" "strings" ) func main() { resp, err := http.Get("http://www.sina.com.cn") if err != nil { fmt.Println("http get error.") } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("http read error") } src := string(body) src = strings.Replace(src, "\n","",-1) src = strings.Replace(src, "\t","",-1) src = strings.Replace(src, " ","",-1) fmt.Println(strings.TrimSpace(src)) }
使用时间如下:
real 0m0.718s
user 0m0.290s
sys 0m0.090s
使用golang比python快差不多4倍(使用requests模块抓取显示中文乱码,暂时没有找原因)。
golang1.5后可以将go语言编译为动态链接库。
这样使用python处理业务逻辑,然后调用golang的动态链接库加速执行速度。
但是在raspberry pi上调用的时候报段错误。没有细查,直接放到64位Linux服务器上测试。
要产生动态的链接库的golang代码gradAndDelso.go
/* # Date: 2016-01-21 # Author: simonzhang # Web: www.simonzhang.net # Email: simon-zzm@163.com */ package main import ("C" "fmt" "net/http" "io/ioutil" "strings" ) //export Deltr func Deltr(webdata *C.char) *C.char { var src string url := C.GoString(webdata) src = string(grad(url)) src = strings.Replace(src, "\n","",-1) src = strings.Replace(src, "\t","",-1) src = strings.Replace(src, " ","",-1) data := C.CString(src) return data } //export grad func grad(url string) string{ resp,err := http.Get(url) if err != nil { fmt.Println("http get error.") } defer resp.Body.Close() body,_ := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("http eee error.") } goback := string(body) return goback } func main() {}
编译命令
go build -buildmode=c-shared -o gradAndDelso.so gradAndDelso.go
编译完成会产生两个文件,一个so和一个h文件。
使用python调用golang动态链接库部分,代码文件userGoSo.py
#!/bin/env python # -*- coding:utf-8 -*- # ------------------------------- # Date: 2016-01-21 # Author: simonzhang # Web: www.simonzhang.net # Email: simon-zzm@163.com # ------------------------------- import ctypes lib = ctypes.CDLL("./gradAndDelso.so") url = "http://www.sina.com.cn" re = lib.Deltr re.argtypes = [ctypes.c_char_p] re.restype = ctypes.c_char_p print re(url)
使用时间
real 0m0.893s
user 0m0.068s
sys 0m0.024s
在64位的服务器上python、golang和python调用golang的动态链接库速度基本上一样没有区别。
如果是处理复杂的运算golang应该比python快很多,实际项目中可以试试。
golang开发的代码量比python还是大不少,编译后的文件有6M,动态链接库8M,个人感觉这部分太大了。
本文源码打包pythonUserGolangLib
raspberry pi 源码安装 golang1.5
从golang.org下载go1.4.3和go1.5.3。解压到/usr/local/目录中。go1.4.3目录为go1.4,go1.5.3目录为go1.5。
sudo su #到管理员权限
apt-get install -y mercurial bison gcc gccgo libc6-dev ed gawk make git #安装需要的库
以下为在管理员权限下,使用的命令记录。
export GOARM=5
export GOROOT=/usr/local/go1.4
export GOARCH=arm
export GOOS=linux
export PATH=$PATH:$GOROOT/bin/
cd /usr/local/go1.4/src/
time ./all.bash
mkdir -p /usr/local/go1.5/bin
cd /usr/local/
ln -s /usr/local/go1.4 /usr/local/go-bootstrap
export GOROOT_BOOTSTRAP=/usr/local/go-bootstrap
export GOROOT=/usr/local/go1.5
export PATH=$PATH:$GOROOT/bin/
cd /usr/local/go1.5/src
time ./all.bash
如果没有报错则编译完成。我的记录
go1.4.3编译时间为54分钟 go1.5编译时间160分钟
/etc/profile增加如下内容
export GOARM=5
export GOROOT=/usr/local/go1.5
export GOPATH=/usr/local/go1.5/pkg
export GOARCH=arm
export GOOS=linux
export PATH=$PATH:$GOROOT/bin/
配置生效
source /etc/profile
在系统中可以使用go version看看版本的正确性
iPhone 手机控制linux服务器程序源码
将远程连接SSH和数据库MySQL开放到外网很危险。
即使密码和KEY管理后都很安全了,但是还会有不少的扫描程序来扫描浪费资源。
但是我没有机器做跳板机或代理,也没有多余的IP和资源做VPN。
所以直接用防火墙把相应服务的端口对外网服务屏蔽,然后用个隐蔽的端口做中转。
中转服务需要就开放,不需要就关闭。这个服务当然也可以不用haproxy,直接关闭或打开防火墙。
也可以用这个服务管理其它的服务器上其它程序的启停。开始着手处理。
服务端为Linux服务器(centos7),python2.7+tornado开发。客户端用swift2开发跑在iphone6上。
haprox安装后,跳转主要配置部分。
frontend ssh
bind x.x.x.x:20000
default_backend nat_ssh
backend nat_ssh
mode tcp
option tcpka
balance roundrobin
option httpchk
server ssh 192.168.1.222:22
服务端代码需要注意的部分:
服务端存放在/program/www/mydoor下。
文件myDoorServer.py的类MyDoorHandler中使用os.popen调用系统命令,绝对路径需要确认。Listen端口自行修改。
如:
line = “cd /program/www/mydoor;/usr/bin/python mydoor.py %s %s &” % (_se, _au)
文件mydoor.py中的kk为验证使用,自行修改,但是需要与swift中的kk值对应。执行命令的绝对路径需要根据系统确认。
要管理服务的命令,修改后就可以管理不同的应用。
使用“python myDoorServer.py &”启动服务。
客户端比较简单,修改kk值后,直接编译到手机上。需要的第三方的库,Alamofire和Crypto。
启动程序,输入开放时间,点击“敲”。实验成功。