为了统计代码行数(lines of code, LoC),最简单的思路是用python读取每个所输入的代码文件的行数,然后加起来。 本实现分离了代码文件识别和统计,代码文件由用户给出。 1. 实现: Python实现,用enumerate函数统计可以防止内存占用过大的问题,我们要的只是一个计数,每行读完扔掉即可(pass)。代码如下: #!/usr/bin/env python import sys def file_len(fname): with open(fname) as f: for i, l in enumerate(f): pass return i + 1 file_n = len(sys.argv) – 1 print file_n, “files:” sum_line = 0 for i in range(file_n): this_line = file_len(sys.argv[i + 1]) sum_line += this_line print this_line, “\tLoC\t”, sys.argv[i […]

Bloom Filter 和 Cuckoo Filter有类似的用途,很多人将它们称为概率数据结构或者近似成员数据结构(approximate membership data structure)。最近看了一个Bloom Filter和一个Cuckoo Filter的比较好的实现,代码都是用C++实现,代码量也不大,读起来没有什么难度。 本文贴出来的是两个项目的大体构成,不涉及到空间、错误率等的理论分析,希望能给需要的新手一些帮助。 两个项目的网址如下: C++ Bloom filter library: https://code.google.com/p/bloom/ Cuckoo Filter: https://github.com/efficient/cuckoofilter 1. Bloom Filter (https://code.google.com/p/bloom/) 源码目录: $ tree . ├── Makefile ├── bloom_filter.hpp ├── bloom_filter_example01.cpp ├── bloom_filter_example02.cpp ├── bloom_filter_example03.cpp ├── random-list.txt ├── word-list-extra-large.txt ├── word-list-large.txt └── word-list.txt 文件包括三个用于测试example、三个用于测试insert的txt词典,bloom filter的实现在bloom_filter.hpp中。 bloom_filter.hpp中包括3个class:bloom_parameters、bloom_filter和compressible_bloom_filter。其中bloom_parameters是构建一个BF需要的参数,compressible_bloom_filter 类继承自bloom_filter类。 1.1 bloom_filter.hpp bloom_parameters 包含的成员: // […]

0. 环境 iOS 10 + MacOS 10.12 + Python 2.7 1. 思路 APP界面中弹出的题的位置和答案的位置都是固定的,因此我们可以将手机屏幕想办法投到电脑屏幕上,通过OCR识别指定区域,实时打开搜索引擎界面搜索问题,甚至匹配答案。 2. 关键步骤 2.1 投屏 我是iPhone 5s + Mac电脑,可以用Mac的Quicktime Player播放器的屏幕录制功能(安卓据说可以用ADB)。 具体的,打开Quicktime Player后,点击“文件–新建屏幕录制–(红色录制按钮旁的下拉菜单)选择从手机录制”,这时,手机屏幕就实时投到屏幕上了。 2.2 截屏和OCR 截屏 截屏要将你的手机投屏窗口固定在一个位置,找准屏幕上的左上角和右下角两个坐标,利用PIL中的ImageGrab进行抓屏,以截取题干为例,代码如下: from PIL import ImageGrab image = ImageGrab.grab((50, 170, 540, 330)) OCR 利用tesseract库和对应的pytesseract接口进行OCR,具体配置可以参考[1]。 import pytesseract ocr_str = pytesseract.image_to_string(image, lang=’chi_sim’) 2.3 搜索 分两种思路,我们可以直接打开一个浏览器页面用百度搜索,把答案筛选工作交给人: import webbrowser url = “http://www.baidu.com/s?rn=50&wd=” + […]

紧接上篇文章(《Galileo开发板+微信公众平台实现简单的物联网家庭监控》( http://blog.jcix.top/2015-11-27/galileo_wechat/ ) ), 以下功能做了改进: * 实现了Galileo开发板上用USB摄像头+python版opencv监控并通过微信公众平台进行异常报警的功能。 * 通过connman实现了wifi网络的自动连接和随时修改功能。 * 通过post到服务器,实现了微信控制led灯亮、灭或者光控的功能。 视频监控功能的实现 (完整代码在github: https://github.com/zhangjaycee/galileo_pys/blob/master/cam_wechat.py ) 1.图像采集 galileo支持python的opencv库,这给简单的图像处理提供了极大的便利。 图像采集: cap = cv2.VideoCapture(0)#打开摄像头 cap.set(3,320) cap.set(4,240) while True: ret, frame = cap.read() 2.图像处理 我们要做键控,所以可以记录第一帧,然后通过帧间差别进行报警。 cap = cv2.VideoCapture(0) <!–more–> cap.set(3,320) cap.set(4,240) avg = None lastUploaded = datetime.datetime.now() motionCounter = 0 normal_count = 0 start_flag = 0 time.sleep(10) while True: […]

由于网上很多配置wifi的方式在我的伽利略开发板上都行不通,最后终于找到这个可以用的“冷门”办法: 系统配置 开发板: Intel Galileo gen2 无线网卡:PCI-e intel wifi link 5100 开发板系统: EGLIBC based Linux(download) 所用工具 硬件: usb无线网卡或者pci-e接口的无线网卡。 (注意如果你用的是和我一样的pci-e网卡,注意顺便买来天线接上,不然信号贼弱,这种网卡不接天线是不行的。) 软件: comman(开发板的完整版linux已经内置) 参考: 《connman百度百科》( http://baike.baidu.com/link?url=3C6RQqswxVvGMxNy7XA1-bWUBU6W0G7_Rvvsv2DRyv04nontgZ9oX7MRgeeNvMuRmjRMqf75_tqspSgjhb8Ysa )

上次写的博客,介绍了下刚拿到galileo开发板的时候如何进行折腾。 上次折腾完后,因为我发现galileo本身和一个装着linux的arduino/pc一样,那么用它来实现一些物联网应用会比较简单,又赶上本学期的工程设计课作业,所以初步实现了一个能用微信监测室内温度和拍摄室内照片的小型物联网系统。 参考: 《鼓捣Galileo开发板的一些吐槽》( http://blog.jcix.top/2015-11-04/introduce_galileo/ ) 记录下实现过程。由于本人表述能力较差,采用简述加大量外部连接的方式进行记录。 系统功能 用微信获取室内当前温度或者一张较为实时的照片。 通过亮度传感器自动自动控制LED的亮、灭。 基本结构 系统实现最初的想法,就是让微信公众平台和开发板通过互联网直接进行信息传递,但是因为微信公众平台对我们所搭建服务器采用get和post方法进行通信,所以在没有公网ip的校园网环境,一般只能租云服务器或者VPS进行中转。 这样,系统的基本结构就变成了: 开发板外围<–>Galileo开发板<–>云服务器<–>微信公众平台<–>手机微信<–>用户 可见整个通信链将用户和外围器件连接起来,实现了简单的物联网。

这几天折腾伽利略开发板,写下一些吐槽,以便以后再看到这篇博客,仍然能记起这些值得吐槽的地方。。。也希望看到这篇博客的人能够因此少些吐槽( ╯□╰ )。。网上其实是有不少资源的,但是相对其他更热门的板子,显然找资料并不是和喝白开水一样简单,由于我表达能力较差,所以准备采用简述+大量站外链接的形式,给出一个希望不会让人误入歧途的引导。。。 介绍 Intel Galileo(点击查看中文官网),是一个兼容Arduino的x86平台的开源硬件产品。个人感觉应当注意的是,特点就是兼容Arduino和x86,这样我们既能够利用丰富的Arduino软硬件及社区资源,又能够在上边运行linux甚至windows系统,做出更复杂的系统。 相关介绍: 《x86 版的 Arduino 来了,Intel Galileo 开发板的体验、分析和应用【超长文多图】》(http://www.ifanr.com/388835 ) 《系出名門:Intel Galileo的十大特性》(http://www.leiphone.com/news/201406/intel-galileo.html ) (更多请自行百度/google) “Arduino模式” 略(自行百度) Arduino? no,Linux! Galileo可以在SD卡中装入完整版Linux镜像,一旦在装有完整版Linux镜像的SD卡插入时启动,会进入所安装的完整版Linux系统,否则,则会进入烧写入flash的裁剪版微型Linux系统。而只有安装了完整版Linux,Galileo才不仅仅只是一个Arduino。下图为Galileo开机启动过程: 参考: 《x86 版的 Arduino 来了,Intel Galileo 开发板的体验、分析和应用【超长文多图】》(http://www.ifanr.com/388835 )

博客由来 今年暑假的时候就听说github上可以免费搭建静态博客。当时虽然看了看,但还是因为服务器、网页等知识欠缺太多,几次想动手都没有坚持下去。 最近看了看Nginx的有关知识,算是对http服务器的搭建有了个大概了解。后来看到了docker,就买了《第一本docker书》这本书看了看,发现上边有些例子写的挺不错,其中就有jekyll+Apache搭建静态博客的例子,照着做一遍后,我决定用Nginx作服务器,用docker做载体,用jekyll作为网站生成工具,将这个静态博客搭建在阿里云服务器上。 于是这个博客最终在10月18日时算是初步搭建成功了,现在写这篇总结应该是算有点晚,但是由于很多细节我还欠缺很多,而且搭建博客所涉及的方面太多,很多部分我只是照搬他人成果,所以关于一些细节问题以后还要深入学习,然后再总结出来,请大家和自己期待~ 资源和费用 服务器: 我用了最便宜的那种阿里云服务器,但是搭这个博客绰绰有余。 价格:学生优惠的9.9元/月。 域名: 在万网申请的域名(貌似和阿里云并在一起了,所以做域名映射非常友好简单) 价格:买了一年,5元/年(但是再续费就贵多了) 代码托管(不是必要的): 用于存我的博客目录,包括这个小的静态网页的所有的一切。 价格:免费(github student pack) ——如此看来,搭建个博客费用是很低的,一个月10块。 组成一 :jekyll jekyll是一个简单的免费的Blog生成工具,类似WordPress。但是和WordPress又有很大的不同,原因是jekyll只是一个生成静态网页的工具,不需要数据库支持。但是可以配合第三方服务,例如Disqus。最关键的是jekyll可以免费部署在Github上,而且可以绑定自己的域名。 ——百度百科 个人感觉,jekyll是一个像使用模板一样简单的工具,只要你按照他的文件夹结构,将对应的文件放到对应的位置,然后jekyll build一下,你的网站就生成好了!。。而且配置可以集中在一个_config.yml文件中,真的很方便,即使像我一样以前没有接触过,把别人写的博客目录拿过来,也可以仿照着改成自己想要的样子。 所以,我这个博客采用的就是@RainyAlley提供的模板(github页面)目录,然后做了一些自己的修改。 关于jekyll的介绍和文档和介绍,这个是官网的中文版: http://jekyll.bootcss.com/ 组成二 :nginx Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布78。 ——百度百科 nginx肯定比jekyll的知名度高很多,他就像apache是个服务器软件。nginx可以做网站服务器,反向代理(过几天我还要写个关于反向代理的总结,这里先占位。。过几天贴链接),邮件服务器…… 在搭建本博客中,nginx起的作用就是一个静态网站服务器,只要在相关的配置文件中写好网站的目录,写好对应的域名,就可以运行起来了~~ 组成三 :docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 […]