NO.9 在raspberry开发板上部署机器学习环境(一)

最近随着各家巨头,如谷歌(google)和脸书(Facebook)相继公布自己的开源机器学习框架,并且都对树莓派开发板做了支持,分别发布了  TensorFlow ,caffe2 框架,我购置了 Raspberry 3代 B板 。和迷你键盘,16GB micro SD卡 HDMI线,如下图:

1下载树莓派系统

地址 https://www.raspberrypi.org/downloads/raspbian/ 点进去会有2个版本,推荐安装with pixel的完整版

2系统写入SD卡

3 将你下载的系统解压 启动win32DiskImager

4 将TF卡插入开发板,连接HDMI输出,如果你连接的是电脑PC的屏幕,你需要一个HDMI转VGA的接口

下图为系统运行完成后:

可以在图形界面里配置固定IP地址,也可以手动配置

直接在命令行中输入:

sudo nano /etc/network/interfaces

打开树莓派网络配置的文件

下图我用了两行分解了上面的命令效果一样的

cd /etc/network              ##跳转到network目录

sudo nano interfaces      ##提升权限使用nano编辑器打开interfaces

进入interfaces文件 ,我们可以看到默认配置为DHCP方式

我们将内容修改如下:

auto ethiface eth0 inet static 

address  192.168.1.100      ## 设定的静态IP地址

netmask 255.255.255.0    ## 网络掩码

gateway 10.52.91.1          ## 网关

使用快捷键Ctrl+X关闭,提示问是否保存,输入"Y"保存

在B板上带蓝牙和Wi-Fi模块,我们也可以直接配置成无线连接。

手机上也可以安装VNC view等软件,远程连接设备,树莓派上需要安装软件:

添加vnc server

sudo apt-get update

sudo apt-get install tightvncserver
安装完成后,运行

tightvncserver
这时会要求输入控制密码,选择性输入查看密码,查看密码只能用来查看桌面,而控制密码才能对桌面进行操作。

此后,在电脑上安装vnc软件,下载地址:http://www.tightvnc.com/

图为IPHONE 连接设备

 

至此一个简单的LINUX系统环境算是配置完成。后续的将研究一下框架的安装。

 

对深度学习(Deep Learning)的简单介绍

以下解释来自维基百科:

深度学习是机器学习拉出的分支,它试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

深度学习的用途实在太广泛,最为普通人所熟知的,就是以下和民生相关的应用:人脸识别,语音识别,图像搜索,在线翻译,等等。

目前流行的深度学习框架有TensorFlow(Google开源),MXNet(得到Amazon支持),Theano等,利用这些框架,我们只需要做比较少的工作,就能把深度学习能力带入我们自己的程序。

NO.7 任天堂WII游戏机光盘版到U盘版刷机DIY

记得一个月前,有一天,突然发现自己以前的旧游戏机基本上是闲置了几年,由于内容更新没有了,光盘也难以购买,周期长,自己也没有时间去玩,但是扔了也很可惜,于是就还是想自己要改造一下,由于游戏机比较古老,现在付费帮忙刷机的人也比较难找,再者是比较折腾,可能我更愿意自己来操作的缘故,于是有了这个刷机的教程。

DIY刷机目标:由光盘版本变成 光盘 + 移动硬盘 + U盘 都可以来玩任天堂的游戏,实现免费玩游戏

原料: WII旧的光盘游戏机  + 8 G的U盘 + SD卡大于2G  +电视(这就不说了)

软件:A:WII刷机包 下载地址http://download.csdn.net/download/qq_29170859/8823857

B :wii wbfs格式游戏包(网上可下载),

C :Wii硬盘格式化工具(WBFS Manager),

D:Wii硬盘格式化工具(WII BACKUP Manager)

具体刷机步骤:

1 把SD卡格式化NTFS格式,把刷机包A解压拷贝进去,注意按照根目录的结构放置

2 用C工具 在Windows电脑上格式化你的硬盘或者U盘,将其格式化为 WBFS格式的硬盘

3 用D工具把你下载的游戏,拷贝到你的硬盘里

4 到此准备工作结束,连接游戏机和电脑,U盘插入到靠最左边的USB口

5 开机运行Homebrew Channel,进入第二个按钮,运行,选择读取你的硬盘,就可以进入选择游戏界面了

至此你的游戏可以装到U盘里来运行了!虽然我现在基本不玩游戏!

NO.6 如何学习写作,我的一些心得(一)

一直以来,有记忆以来,我对自己的定位和认知都是我都不是一个擅长写文字的人,以前对文字也并没有什么特别的感觉,反而是对图画产生的兴趣大于文字,但是随着互联网的兴起,通过网络阅读和浏览信息成了开启自我学习另一扇世界的一座桥梁,可能是在网络阅读之前,缺乏对阅读的时间沉淀,和阅读兴趣的培养,也造成了自己的思维在数年以来并没有长足的进步。

培养兴趣,即使是和写作沾边的

最早对故事的兴趣是源于对动画和游戏的热情,起初我最早的兴趣点是电子游戏,不过在接触过动画制作后,我的注意力逐步转移到动画上,也是由于互联网,和个人电脑的普及,带来的一次思想革命。

无论从游戏还是动画中,无不包含了栩栩动人的故事,已经文字构建,可能是由于耳濡目染,无论工作学习,网络中获取大量的阅读信息,所以从阅读到开始尝试锻炼写一些简单的东西,虽然写的还不是很好,但是却有了记录的一些诉求,对一些好的故事设定,会产生一些兴趣。

大量阅读文章,积累素材

移动互联网时代,我身边有的朋友开始自己写作,业余是网络作家,如今已经发表几百万字的作品,这一点另我崇敬万分。朋友告诉我,如果要写好的东西,需要有大量的积累,需要从各个方面去充实自己的大脑里所构建的库,写作可能和政治,经济,历史,人文,科学都能挂的上钩,如果提起笔来,大脑空空如野,那么还谈和写作呢?

从简单的文字开始练习

于是我开始从碎片化阅读中,开始了一些短评论的书写,在微信时代,搜集或者查看一些感兴趣的推文,转发分享的同时,加入了自己的一些短评和观点,一开始从10字到20字,有时候到100-200字不等,随着几年的习惯培养,发现阅读量和分享的文字越来越多,从而锻炼了两种能力

A 从一段文字中,概括总结能力,从大量的样本数据里,提炼自己想要,或者感兴趣的东西

B 泛读与精读,快速阅读的能力,由于碎片化时间的不均衡,所以在阅读上也是有时间的分配过程,比如感兴趣的东西,或者自己认为写的好的收藏起来

C 以自我的视角来开始写的锻炼,在很长时间之前,我从来都不知道如何写一些文章,自动我上小学的时候就不擅长这些东西,觉得是一个非常让人烦恼的问题。我如今找到了一些可能的原因:因为写作是一种自我的表达,以前的写作是任务式的,并不是发自内心的诉求,所以在写东西上,过于教条,时间,地点,人物,事件等等,而现在却截然不同,我写短评,或者是博文,或者是简单的练习,都会从自我表达和我的哲学看法上统一这些元素,这样就让我的思考,和我的表达达到一致,可以很容易的写几千字的文字,而这些,我回过头来看,是归功于源于内心的自我表达,不教条,随心而写,所以看似简单了很多,这一点也是我值得庆幸的事情。我从来定位自己是比较内向的人,写作为我开启了一种新的表达,和看待世界的窗口。

情景式短篇练习

以前和朋友在交流和沟通过程中,我们会拟定一个场景,自己去随写点片段,我觉得非常有趣味,我的练习贴一段,好像是2013年的吧:

酒馆中 突然一黑脸和尚大叫到 “小二 拿二斤牛肉”!
众人诧异,纷纷用异样的眼光向这和尚看去,个子不高,可是非常敦实,并没有出家人的慈像,眼光中凝聚着一丝杀气,怒目狰狞,与出家人的善简直是大相径庭,穿一身灰色和尚服,手里还攥着个大佛珠,这时有个白面书生在旁边说,瞧这和尚竟然吃肉!他左边的一个高个书生说:“人家这可是酒肉穿肠过,佛祖心中留啊!”

贴一段朋友的练习:

那俊朗青年也不答话,手中长剑一抖,急向麻衣老者胸口刺去,那麻衣老者没料到这青年突然出手,连忙脚下一错,向右斜飞出去,但还是被这青年长剑刺伤了左臂。那老者怒哼一声,右手在空中一幌,已多了一把二尺来长的弯刀,幻出数道刀光,向那青年扑去。

霍君白不料变故突起,正欲拔剑相助那青年,忽觉白冰儿拉下自己衣襟,悄声说道:“别忙,他不是好人。”霍君白转头道:“你怎知道?”

白冰儿笑道:“他不是那老人对手,你看下去就知道了。”霍君白将信将疑,不由的点点头,不再多问。

只见那老者手中弯刀如影随形,披风有声,看那弯刀也不过两三斤重量,但在那老者手中使出却有如此威力,霍君白也不禁暗自佩服。白冰儿似乎看穿了霍君白的想法,笑道:“那轻月刀以灵兽骨所制,只有七两之重,那老人却能举轻若重,使出来如若千斤巨锤一般声势,这般功力,实属难能。”

那麻衣老者手中刀气浑厚,带起几人四周的空气急转,几人衣袂也被气浪激起飘飘,霍君白渐感劲风刮脸,呼吸也稍微有些不畅。那青年被老者这一番急攻,已失了先前的那股锐气,不由得连连后撤,剑法也自散乱起来。

其实整个交流过程中,从片段到人物描写的练习,让人的感觉就是你自己在创造空间,去摆放人物,其实非常有趣。

大家如果觉得这种方法还可以的话,也可以去试试!希望让你又找到新的一扇门!

 

NO.4 [移动开发]基于WEUI的短信验证码开发中需要注意的问题

短信验证码功能一般是我们经常在PC网站,移动网站遇到的一个功能,简单的说来是由我们的应用,在通过短信平台API返回结果到我们的应用,完成整个短信验证码获取的过程。

其实这个功能没有什么值得可以提的,但是有一点我们经常容易忽略的地方,我想提一下:

什么是短信验证码?

当我们填写手机号,获取验证码的一瞬间发生了什么过程?

1 我们用户的手机浏览器,或者PC浏览器访问到了应用的网页,或者WEBAPP的URL地址

2 服务端将基于html协议的二进制数据,通过运营商的移动网络,或者宽带 tcp/ip层传输,到用户的浏览器

3 用户浏览器根据标准的浏览器W3C标准进行解析和编译,它有一套自己的解释和编译规则

4经过浏览器解析,我们看到了页面,并输入手机号,点击获取验证码过程

5 点击按钮,程序自动链接第三方短信中心的程序API接口,将指令发送给第三方短信运营商,第三方运营商获取到需要接收的电话号码,和内容指令,然后将内容组合发送到需要接收的终端,同时返回状态给我们的应用

6 我们的应用服务器记录到状态,并将状态返回给用户,比如发送短信成功,或者失败等状态

7 用户输入获取的短信验证码,提交后台进行匹配;

至此一个简单的流程基本描述完成。

关于WEUI界面

先说下WEUI界面,WeUI 是由微信官方设计团队专为微信移动 Web 应用设计的 UI 库。

WeUI 是一套同微信原生视觉体验一致的基础样式库,为微信 Web 开发量身设计,可以令用户的使用感知更加统一。包含button、cell、dialog、toast、article、icon等各式元素

采用WEIUI开发的界面,基本满足了和微信一致的界面风格和特性,非常简洁和标准化,从用户体验度来说是非常友好的;这里我就不多介绍了,具体可以查看 http://weui.github.io/weui/ 

先看下界面效果:

  

在发送验证码的时候?我们需要注意的问题是什么呢?

手机发送验证码的时候,在前端是有JS限制,不能重复提交,但后台部分遗忘了对数据包重复提交的限制问题,这样会导致,如果有刷短信验证码的规则程序,同一台电脑,可以不断用新的手机号,获取验证码,导致短信充值很快消耗完;

如何解决?

a 短信程序需要记录用户第一次访问的时间,和IP地址,并设定我们的禁止刷新的时间间隔参数

b 在第二次访问的时候,算出两次访问应用的时间差

c 每一次访问的时候,计算我们的时间差 和 我们设置的时间间隔的关系,记录每次新访问的IP记录 ,同时做比对,有两种情况 1 如果我们的访问时间间隔,在限制的时间间隔之外,我们重置所有的参数,记录新的IP 和 新的访问时间段,2 如果在时间间隔内,我们判断用户的IP地址是否为同一个IP地址,如果相同,我们则结束程序,停止发送短信。做一个简单的判断,可以防范短信验证码受到的被刷现象;

部分PHP代码片段: