众筹的电动螺丝刀——wowstick A1

包装很好,算是对得起所谓的工具能当礼品。

随机除了电动螺丝刀之外,包括一个底座,10个螺丝刀头,一个磁力板。

打开第一层,很简洁

掀开之后,能看到螺丝刀本身和磁力板

类似说明草图

磁力板,挺方便的小配件,可以吸附螺丝,不用怕小螺丝会丢了

刀头也可以吸附

电动螺丝刀本身,三个按钮,正反转和照明开关

照明的亮度一般够用

再下一层,是USB充电线(Micro USB接头),底座,和底座盖

底座本身可以存放10个刀头,也是用来给螺丝刀充电

盖上盖子

全家福

刀头跟常见的多用螺丝刀的刀头通用。

暂不确定续航时间,感觉应该不会太费电。

简单试用了一下,最大的问题就是没有转速/扭力调节,现有的转速太低,感觉不会比手拧快多少,扭力似乎也不大,想用来钻孔什么的应该是不可能了。

感觉适合用来拆鼠标,手机,笔记本之类的东西,机房或者家居不适合使用。

众筹的价格两百多,感觉不太值得,如果能加强转速还有点意思。

又败家之罗技MX Master

易讯搞活动,649入手,今天刚收到
印象中应该是用过最贵的鼠标了,之前用过双飞燕、罗技、微软的鼠标
没到手之前,其实用的最多的是thinkpad上的小红点。小红点用习惯之后,轻度使用基本可以不太用鼠标了。不过时间长了以后,不知道是脏了还是别的问题,小红点用起来越来越费劲,时间长了手指头疼。
之前在用的鼠标还有罗技的M705和微软的Sculpt蓝牙鼠
舒适度上,感觉MX Master最好,M705次之,Sculpt最差。我的手应该在男人里算偏小的,也没感觉掌握不了。
虽然很多评测都在批评MX Master的手感,不过我觉得还好,也可能是因为没有用过上一代没有比较吧,只能跟手里的几个鼠标比。
重量上MX Master因为是用锂电,虽然体积大,但是比M705还略轻一点。续航要用几天才知道,不过要续航还是M705吧,两节5号电池用一年不成问题。
MX Master上的滚轮还有点意思,可以自动切换是分段式滚动还是自由滚动,当然也可以靠按键切换。
优联和蓝牙都试了一下,没有明显的延迟,蓝牙连接时暂时也没发现会像有些鼠标一样,一旦隔一会儿不用,再用就有个“唤醒”的卡顿。
滚轮作为中键按下去的时候反馈有点奇怪,感觉不是滚轮在反馈,而是整个鼠标在反馈,也就是感觉按键反馈的位置比较靠后,差不多是鼠标中心的位置。其他按键倒是没有这么特别。
最后是放毒时间:)

Step By Step使用Python分析AIX SNAP(5)——批量处理多个文件

之前我们使用Python抓取信息,都是处理一个SNAP文件,而实际情况中,我们手上经常有多个SNAP文件需要处理,比如巡检或者信息统计。而同时处理多个文件,才能更大的发挥Python的威力。

我们在上次example4的基础上,加入一个循环,读取当前目录下的所有SNAP文件。

为了方便使用和扩展,我们把example4中的功能,定义为一个名为readsnap的函数。

另外,输出的格式,由于是需要输出多个文件的信息,因此我们把格式改为Excel表格一行输出一个文件的信息,每行的第一格输出Node Name,第二格输出CPU,第三格输出内存。

示例程序如下:

#! /usr/bin/env python
#coding=utf-8

import tarfile
import xlwt

import os
import sys
import os.path
#导入以上模块用于获取当前路径及当前目录下的文件名

def readsnap(table,file,linenum):
snapfile = tarfile.open(file)
#打开snap.pax文件
lparinfo=snapfile.extractfile("./general/lparstat.out").readlines()
#读取snap.pax包中的/general/lparstat.out文件

for line in lparinfo:
#循环读取lparstat.out的内容,每个循环中的line表示一行
outputline=line.split(":")
#以":"为关键字去分隔line的内容

if line.find("Node Name")!=-1:
table.write(linenum,0,outputline[1].strip())
#将node name写入每行第一格
if line.find("Online Virtual CPUs")!=-1:
table.write(linenum,1,outputline[1].strip())
#将CPU数写入每行第二格
if line.find("Online Memory")!=-1:
table.write(linenum,2,outputline[1].strip())
#将memory数写入每行第二格

linenum=linenum+1
#行号加1
return linenum
#返回行号

#以上为定义函数readsnap()部分

excelfile = xlwt.Workbook()
table = excelfile.add_sheet(u"测试表")
#创建一个Excel表对象,并创建一个名为“测试表”的sheet

linenum=0
#定义表格行号从0开始

for dirpath, dirnames, filenames in os.walk('.'):
#循环读取当前路径文件名
for filename in filenames:
if os.path.splitext(filename)[1] == '.pax':
#如果文件扩展名为.pax
filepath = os.path.join(dirpath, filename)
print("file:" + filepath)
linenum=readsnap(table,filepath,linenum)
#调用readsnap函数

excelfile.save("test.xls")
#将内容保存在“test.xls"文件

输出结果类似如下:

 

SAS_C 5 47872 MB
ETLSER_B 3 16384 MB

 

Step By Step使用Python分析AIX SNAP(4)——获取需要的信息

上一节我们已经知道了如何利用Python打开SNAP文件,以及如何把信息写入到Excel文件中。

但是SNAP中的信息很多,很多时候我们只是需要其中的一些信息,而不是把整个文件的内容都输出出来。

比如,我只是想知道这个OS的主机名和CPU内存资源,或者机器的型号序列号。

比如

SNAP里面/general/lparstat.out文件,包含如下信息

Node Name                                  : Node1
Partition Name                             : Node1
Partition Number                           : 6
Type                                       : Dedicated-SMT
Mode                                       : Capped
Entitled Capacity                          : 5.00
Partition Group-ID                         : 32774
Shared Pool ID                             : -
Online Virtual CPUs                        : 5
Maximum Virtual CPUs                       : 10
Minimum Virtual CPUs                       : 1
Online Memory                              : 47872 MB
Maximum Memory                             : 73728 MB
Minimum Memory                             : 2048 MB
Variable Capacity Weight                   : -
Minimum Capacity                           : 1.00
Maximum Capacity                           : 10.00
Capacity Increment                         : 1.00
Maximum Physical CPUs in system            : 16
Active Physical CPUs in system             : 16
Active CPUs in Pool                        : -
Shared Physical CPUs in system             : 0
Maximum Capacity of Pool                   : 0
Entitled Capacity of Pool                  : 0
Unallocated Capacity                       : -
Physical CPU Percentage                    : 100.00%
Unallocated Weight                         : -
Memory Mode                                : Dedicated
Total I/O Memory Entitlement               : -
Variable Memory Capacity Weight            : -
Memory Pool ID                             : -
Physical Memory in the Pool                : -
Hypervisor Page Size                       : -
Unallocated Variable Memory Capacity Weight: -
Unallocated I/O Memory entitlement         : -
Memory Group ID of LPAR                    : -
Desired Virtual CPUs                       : 5
Desired Memory                             : 47872 MB
Desired Variable Capacity Weight           : -
Desired Capacity                           : 5.00
Target Memory Expansion Factor             : -
Target Memory Expansion Size               : -
Power Saving Mode                          : Disabled

假如我们只需要输出Node Name 、Online Virtual CPUs 、Online Memory这三项内容,那么可以使用如下Python程序,修改自exmaple1

#! /usr/bin/env python
#coding=utf-8

import tarfile
snapfile = tarfile.open("snap.pax")
#打开snap.pax文件

lparinfo=snapfile.extractfile("./general/lparstat.out").readlines()
#读取snap.pax包中的/general/lparstat.out文件
#注意使用的是readlines(),表示按行读取,读取的结果是数组,即lparinfo[0]是第一行,lparinfo[1]是第二行。。。

outputfile=open("lparinfo.txt",'w')
#将输出保存在lparinfo.txt文件

for line in lparinfo:
    if line.find("Node Name")!=-1 or line.find("Online Virtual CPUs")!=-1 or line.find("Online Memory")!=-1:
        outputfile.write(line)
#这里是一个循环,循环取数组lparinfo中的每一个值给变量line,即第一次循环line=lparinfo[0],第二次循环line=lparinfo[1]
#line.find()表示在变量line字符串内查找是否有对应的内容,比如line.find("Node Name")就是查找line内是否存在"Node Name"
#返回的值是查找内容在line内的位置号,找不到就返回-1,line.find("Node Name")!=-1即表示line中有"Node Name"
#当查找到"Node Name"、"Online Virtual CPUs"、"Online Memory"任意一个时,输出该行内容到outputfile

outputfile.close()

将以上内容保存为example3.py,同目录下有一个snap.pax的文件,双击运行example3.py,就会产生一个lparinfo.txt的文件

内容应该是

Node Name                                  : Node1
Online Virtual CPUs                        : 5
Online Memory                              : 47872 MB

下一步,我们结合起来,不再把内容输出到文本文件,而是输出到Excel文件

#! /usr/bin/env python
#coding=utf-8

import tarfile
import xlwt

excelfile = xlwt.Workbook()
table = excelfile.add_sheet(u"测试表")
#创建一个Excel表对象,并创建一个名为“测试表”的sheet

snapfile = tarfile.open("snap.pax")
#打开snap.pax文件

lparinfo=snapfile.extractfile("./general/lparstat.out").readlines()
#读取snap.pax包中的/general/lparstat.out文件

i=0
#利用变量i来作为输出表格的行数

for line in lparinfo:
if line.find("Node Name")!=-1 or line.find("Online Virtual CPUs")!=-1 or line.find("Online Memory")!=-1:
outputline=line.split(":")
#以":"为关键字去分隔line的内容,分隔后的内容为数组outputline,outputline[0]表示分隔的第一部分,以此类推
table.write(i,0,outputline[0].strip())
table.write(i,1,outputline[1].strip())
#将line内容的第一部分outputline[0]写入第i行的第0格,第二部分outputline[1]写入第1格,strip()用于去除多余空格
i=i+1
#行号加1

excelfile.save("test.xls")
#将内容保存在“test.xls"文件

输出的Excel文件test.xls,内容应该是

Node Name Node1
Online Virtual CPUs 5
Online Memory 47872 MB

下次我们研究一下更复杂的数据抓取