Snake's Home

snake


  • 首頁

  • 歸檔

  • 標籤
Snake's Home

python_multiple_threads

發表於 2016-03-21 | 分類於 python

前面写了个脚本,别人说,你怎么不用多线程啊。于是我就去学多线程。

目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用。
2.7版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了multithreading 模块。threading模块里面主要是对一些线程的操作对象化,创建Thread的class。一般来说,使用线程有两种模式:
A 创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;
B 继承Thread类,创建一个新的class,将要执行的代码 写到run函数里面。

参照:python多线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import threading,time
from time import sleep, ctime
def now() :
return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )

def test(nloop, nsec):
print 'start loop', nloop, 'at:', now()
sleep(nsec)
print 'loop', nloop, 'done at:', now()

def main():
print 'starting at:',now()
threadpool=[]

for i in xrange(10):
th = threading.Thread(target= test,args= (i,2))
threadpool.append(th)

for th in threadpool:
th.start()

for th in threadpool :
threading.Thread.join( th )

print 'all Done at:', now()

if __name__ == '__main__':
main()

第2种方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import threading ,time
from time import sleep, ctime
def now() :
return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )

class myThread (threading.Thread) :
"""docstring for myThread"""
def __init__(self, nloop, nsec) :
super(myThread, self).__init__()
self.nloop = nloop
self.nsec = nsec

def run(self):
print 'start loop', self.nloop, 'at:', ctime()
sleep(self.nsec)
print 'loop', self.nloop, 'done at:', ctime()
def main():
thpool=[]
print 'starting at:',now()

for i in xrange(10):
thpool.append(myThread(i,2))

for th in thpool:
th.start()

for th in thpool:
th.join()

print 'all Done at:', now()

if __name__ == '__main__':
main()

再实践实践。

Snake's Home

淘金岛

發表於 2016-03-13 | 分類於 生活

1. 在github 上淘宝

身边总有神奇的同事,总是能分享一些很赞的资源,不好意思问他从哪里知道的。
打算学习一门新技术,怎么最快找到优质的资源(工具,第三方库,插件,文章,视频等)?
今天我分享给大家一个使用 Github 找优质资源的技巧:
使用Github 的站内搜索,搜索:Awesome + 你的关键字

在 Github 上找「好东西」的方法

2. 资讯类

ADD Comments Cool
极思维 互联网开发大杂烩 3
伯乐在线 开发资讯大杂烩 4
开发者头条 有点干货 3
掘金 可以偶尔来 2
cocoachina 移动开发 4
objcn oc学习 2

3. 博客

ADD Comments Cool
廖雪峰 python,git,js不错 4
stormzhang 测试转开发的典范 4

4. git

ADD Comments Cool
git免费电子书 各类教程 4
happypeter ruby 4
代码家 android 3
gitbook 技术电子书 4

5. 教程

ADD Comments Cool
优才学院 有些视频教程 2
慕课网 免费视频教程 5
好知网 综合性网站 3
麦子学院 Android基础视频教程
麦子学院 ios基础视频教程
51CTO 开发视频教程 3
爱酷学习网 小型开发视频教程 3
swift课堂 swift入门 5

6. 工具

ADD Comments Cool
在线工具 比较全的在线工具 4

7. 源码

ADD Comments Cool
android开源项目 新手学android 4
懒人ios ios各种源代码 4
oschina IOS开发专区 3
23code 安卓经典源码 3
code4App ios源码 3
android精品 android精品源码 4

相关网站

网站 简介
tutsplus 不定时更新一些 iOS 教程
WWDC 苹果官方每年一度的 WWDC 视频, 可以了解历年有关 iOS 发布的内容
ASCIIwwdc WWDC 的文字版
Awesome Swift 该网站收集了很多关于 Swift 的学习资料, 新闻
Appcoda 经常发布一些 iOS 编程教程, 更新比较频繁, 想了解更多可以查看该网站的 About 界面
NSHipster NSHipster is a journal of the overlooked bits in Objective-C, Swift, and Cocoa. Updated weekly.
Think and Build Some tutorials about Core Graphic and Core Animation.
Tutorials 大把的 Objective-C, Swift, iOS 教程, 且全部免费, Raywenderlich 真是业界良心, 赞!

社区

社区 简介
CocoaChina 全球最大苹果开发者中文社区
code4app 经常更新一些很不错的 iOS 代码片段和一些 iOS 资源
objc 定期发布一些有关 Objective-C 的高质量的文章
objc中国 喵神组织的对 objc.io 的翻译网站, 旨在推进国内技术圈整体水平, 翻译质量非常高
DevDiv 发布一些 iOS 的最新资讯及教程
Cocos2d-x Cocos2d-x 论坛
iPhone Dev SDK 国外较有名的 iOS 开发者论坛
Apple Developer Forums 苹果官方的开发者论坛
Swiftist Swift 中文社区
工具/插件 简介
CocoaPods 开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具, 本身是 Ruby 的一个 Gem, 极大的简化了 Objective-C 的开发流程
Alcatraz Alcatraz 是一款管理 Xcode 插件、模版以及颜色配置的工具
XcodeColors 使 Xcode 调试控制台色彩更丰富
xctool Facebook 开源的一个 iOS 编译和测试的工具
KSImageNamed-Xcode 自动补全图片命名的一款插件
VVDocumenter 一个自动生成代码注释的工具
ImageOptim 用于压缩图片一款工具
fastlane 开发流程工具,将开发过程流程化,极大提高开发效率
iOS 必备的 75 个工具 其中包含了非常多好用的工具, 涉及到设计, 分析, 部署等, 总结的十分详细, 有中文翻译
Snake's Home

python-paramiko

發表於 2016-03-12 | 分類於 python

之前为了操作远程服务器,想尽了办法,那时候在windows 机器上想装paramiko 模块,一直没有成功, 最近在Mac 上却尝试成功了。

1. 安装:

1
2
sudo pip install --upgrade pip
Sudo pip install paramiko

2. 执行远程命令

1
2
3
4
5
6
7
8
#!/usr/bin/python
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("某IP地址",22,"用户名", "口令")
stdin, stdout, stderr = ssh.exec_command("你的命令")
print stdout.readlines()
ssh.close()

3. 上传文件到远程

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python

import paramiko

t = paramiko.Transport(("某IP地址",22))
t.connect(username = "用户名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.put(localpath,remotepath)
t.close()

4.从远程下载文件

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python

import paramiko

t = paramiko.Transport(("某IP地址",22))
t.connect(username = "用户名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.get(remotepath, localpath)
t.close()
Snake's Home

charts

發表於 2016-03-11

echarts

1
<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="height:400px"></div>
    <!-- ECharts单文件引入 -->
    <script src="http://echarts.baidu.com/build/dist/echarts.js"></script>
    <script type="text/javascript">
        // 路径配置
        require.config({
            paths: {
                echarts: 'http://echarts.baidu.com/build/dist'
            }
        });
        
        // 使用
        require(
            [
                'echarts',
                'echarts/chart/bar' // 使用柱状图就加载bar模块,按需加载
                 ],
            function (ec) {
                // 基于准备好的dom,初始化echarts图表
                var myChart = ec.init(document.getElementById('main')); 
                
                var option = {
                    tooltip: {
                        show: true
                    },
                    legend: {
                        data:['销量']
                    },
                    xAxis : [
                        {
                            type : 'category',
                            data : ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
                        }
                    ],
                    yAxis : [
                        {
                            type : 'value'
                        }
                    ],
                    series : [
                        {
                            "name":"销量",
                            "type":"bar",
                            "data":[5, 20, 40, 10, 10, 20]
                              }
                    ]
                };
        
                // 为echarts对象加载数据 
                myChart.setOption(option); 
            }
        );
    </script>
</body>
Snake's Home

badminton

發表於 2016-03-06 | 分類於 生活

好久没运动了。

虽然最近控制了饮食,体重下降了些,但是还是胖了。
打算运动减肥。

于是去了静安体育馆。我们公司有周二,周四的羽毛球包场。

可能是新来的,他们常来,打得也比较好,也有长期的球友。

还好Sean也经常来,不然我就是孤家寡人一个。

问题来了,跑不动。

看着球掉下,迈不开腿。

回去找了个视频看看,学习了基本步法。

第2次去的时候跟一个水平比较高的人打,结果被玩死了。

根本无法判断他的球的落点。视屏学的根本就没用上。

看来还是缺少锻炼。

“纸上得来终觉浅,绝知此事要躬行”

Snake's Home

30多岁转开发还来得及吗?

發表於 2016-03-04 | 分類於 生活

最近搞得心累,跟各个部门撕逼。测试是个弱势群体。脏活,累活都要干,干的最多,还拿得最少。

你要想保证质量,就得push别人干活,坑少埋点。

太极是中国人发明的,都会玩。

当然也会被管进度的人压得不行。

在他们看来,一个破功能,点点就可以了,还要那么多时间测试。

但是,很多时候是被block住的。

所以,测试成了整个流程线上最忙,最苦逼的人。

到处吃力不讨好,还处处得罪人。

很多时候好想安安静静地写写代码,像一个开发一样。没有那么多纷纷扰扰,各方面还不错。

有的时候想想,当时Android,IOS兴起的时候,我在做啥呢?怎么没自学,或者报个培训班啥的。可能是生活安逸,不想改变?或者没有技术敏感度,错过机会了。

老问题又来了:“30多岁转开发还来得及吗?” 中午吃饭的时候,跟几个开发讨论。

几个Android开发都是半道出家的,不是本专业。

有个家伙说,“来不及了,都这么大年纪了,拼不过小年轻。”

有个老道一点的说官话了,“干啥跟年龄无关,只要你想做。”

是啊,只要你想做,什么时候都不晚。

不能拿他当谋饭吃,就当一兴趣吧。

Snake's Home

calabash使用

發表於 2016-02-27

安装
gem sources -l
gem sources –remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l

gem install calabash-android

calabash-android version

mkdir calabash
cd calabash
calabash-android gen

.
└── features
├── my_first.feature
├── step_definitions
│ └── calabash_steps.rb
└── support
├── app_installation_hooks.rb
├── app_life_cycle_hooks.rb
├── env.rb
└── hooks.rb

calabash-android run /Users/anderson/autotest/android_engage_automation/features/engage-englishtown-uat-debug-1.0.0-201602270059.apk
calabash-android console /Users/anderson/autotest/android_engage_automation/features/engage-englishtown-uat-debug-1.0.0-201602270059.apk
no test server

签名的包
calabash-android resign /Users/anderson/autotest/android_engage_automation/features/engage-englishtown-uat-debug-1.0.0-201602270059.apk

出错:
Could not sign app

calabash-android setup
keystore

Syntax

gherkin

inroduction

api

steps

1、配置环境变量
配置环境变量最关键点
export ANDROID_HOME=/Users//adt-bundle-mac-x86_64-20140702/sdk
export PATH=$PATH:$ANDROID_HOME/tools
2、生成签名,并且知道自己签名的password和alias
生成签名可以使用一下Shell来生成。
keytool -genkey -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname “CN=Android Debug,O=Android,C=US”
生成之后签名的位置在
~/.android/debug.keystore
password是:
android
alias是:
androiddebugkey
以上这些关键元素在配置Calabash的时候都很重要。
3、配置Calabash
Calabash的配置一般情况加只需要配置签名相关信息就好。运行命令行:
calabash-android setup 520c4f587081a6b530a03c3e86c8bfc4.apk -v
然后按照提示分别输入,签名证书的位置,密码和alias。成功之后会看到这样一句提示:
Saved your settings to .calabash_settings. You can edit the settings manually or run this setup script again
当然,你也可以手动的配置文件完成设置。配置文件的地址为:
~/.calabash_settings
4、Calabash Console
Calabash Console对于会写代码的人来说,一种非常方便调试的工具。使用命令:
calabash-android console 520c4f587081a6b530a03c3e86c8bfc4.apk
当然有时就会报错。报错有两种,一种是需要按照本文之前的内容进行Calabash配置。还有一种情况是需要对被测试应用进行重新签名。重新签名的命令:
calabash-android resign 520c4f587081a6b530a03c3e86c8bfc4.apk -v
成功进入Calabash Console之后,还需要运行两个命令行,才能开始传统意义上的自动化测试的调试:
reinstall_apps
start_test_server_in_background
经过以上两条命令,被测试程序会启动,这是可以通过一些Calabash的命令进行自动化测试了。
当然,也会有一些异常情况,例如,如果拿了网易新闻的Android客户端做这个实验,就会发现不会成功。因为网易新闻做了签名验证,当程序的签名被替换掉以后,程序无法正常启动。

calabash-android run d:\calabash\Yiban_Circle0401sao.apk –tags @login –format html –out=report.html

Snake's Home

学车

發表於 2016-02-23 | 分類於 生活

终于通过了大路考。考试并没有平时训练时那么难。可能教练怕我们不过,可以磨练我们吧。

虽然所有考试都是一次性通过的。但是学车过程是很艰辛的。

下雨下雪都得去,每次被骂得狗血淋头。

记忆最深刻的是: 忘记了动作要领,被骂得不敢上车了。

后面自己慢慢总结了一下,在要领的地方特别注意了一下,后面就少犯错了。

感受最深的是: 不必过于谨慎,看好了,就放开手脚去做。
刚开始在大路上跑的时候,相当的谨慎,导致动作一直没做到位,或者时机不合适。
越是胆小慎微,患得患失,越被骂得惨。
后面索性豁出去了。就按照教练说的来,在保证安全的前提下,自由发挥,动作麻利,不脱泥带水。

果然长进多了,基本上不被骂了。

工作上也是,掌握到了要领,看清了方向,不必过于拘谨,放开手脚去做。
啥事都不可能十分完美。

不可能不犯错,只要不是大错,原则性的错误。 犯错是不可避免的。过度的谨慎,反而束缚了手脚。

Snake's Home

Docker manage STF on IOS

發表於 2016-02-14 | 分類於 Docker

之前看到过有人安装了STF, 但是他们的步骤太多,太复杂了。

我想能不能用dockfile来管理那些步骤,做成image.

这样就简单多了。

还好,在github上找到了dockerfile.

在Mac上使用Docker, 需要用boot2docker建立docker运行的虚拟机宿主环境。
安装boot2docker可以用brew安装。

1
brew install boot2docker

启动docker:

1
2
3
boot2docker init
boot2docker start
boot2docker shellinit

最后执行:

1
eval "$(boot2docker shellinit)"

到此为止,boot2docker已经运行,并且docker的客户端已经建立,要验证是否成功,可以运行。

1
boot2docker status

建立一个文件夹:

1
mkdir stf

然后创建: Dockerfile
将下面的贴上去。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
FROM openstf/base:v1.0.6

# Sneak the stf executable into $PATH.
ENV PATH /app/bin:$PATH

# Work in app dir by default.
WORKDIR /app

# Export default app port, not enough for all processes but it should do
# for now.
EXPOSE 3000

# Copy app source.
COPY . /tmp/build/

# Give permissions to our build user.
RUN mkdir -p /app && \
    chown -R stf-build:stf-build /tmp/build /app

# Switch over to the build user.
USER stf-build


# Run the build.
RUN set -x && \
    cd /tmp/build && \
    export PATH=$PWD/node_modules/.bin:$PATH && \
    npm install --loglevel http && \
    npm pack && \
    tar xzf stf-*.tgz --strip-components 1 -C /app && \
    bower cache clean && \
    npm prune --production && \
    mv node_modules /app && \
    npm cache clean && \
    rm -rf ~/.node-gyp && \
    cd /app && \
    rm -rf /tmp/*

# Switch to the app user.
USER stf

# Show help by default.
CMD stf --help

然后编译

1
docker build -t "stf/v1.0" .

然后查看镜像,新的镜像应该在里面了。

1
docker ps

就可以运行了:

1
docker run "stf/v1.0"

参考:
boot2docker

dockerfile|stf

taobao|stf

Snake's Home

糖果

發表於 2016-02-07 | 分類於 生活

这个春节,差不多啥事都没干,就是带娃。

不管是东奔西跑的走亲戚,还是去哪,娃不离手。

没有太多时间的陪伴,眼看着就长大了。

娃不在身边,感觉比在身边长得快很多。

看着就长牙了,开始要在地上跑了,要求你带他出去玩。。。

他们都还不会说话,每天嘴里咿咿呀呀的想表达。9个月的一天,那天在火车上, 糖糖喊了一声“爸爸”。

让我幸福了很久。

原来幸福就这么简单。

1…345…7
Snake

Snake

不要被困难击倒,除非你躺着睡大觉

69 文章
17 分類
57 標籤
© 2017 Snake
由 Hexo 強力驅動
主題 - NexT.Muse