使用ipad kindle代替纸质书

一直以来习惯购买纸质版的书籍来看,特别是IT类的工具书,需要经常翻看,但是这类书通常厚达五六百页,虽然纸质书看起来比较舒服,但外出的时候想要带一两本在身边看基本上是不可能的事情,谁会整天背着一块大砖头在身上?

最近上了一下亚马逊kindle书店,发现里面的大部分电子书比纸质书便宜很多,毕竟电子书在生产成本上比纸质书低很多很多很多了嘛。但是电子书需要一个阅读器,你也可以在手机上看,但手机屏幕太小,非常不适合长时间阅读,有时候在手机上看网页稍微久一点眼睛都会很累,长久以此怕对眼睛影响很大,所以想要看电子书最好得有个大屏幕的阅读器,亚马逊出了一个kindle阅读器,6英寸,黑白屏,据说对眼睛很不错,而且续航时间很长,但只能用来看书,售价800多;另外一个是ipad,ipad mini 7.9英寸,续航时间不错,除了看书还可以做很多其他事情,看书的话可以装一个kindle软件,看起来跟kindle一样,国行售价3000左右。本来想买kindle,刚好最近苹果官网在做活动,堂妹在香港送了我一张礼品卡抵销800港币,剩下换成人民币一台ipad mini retina只需要1600左右,遂果断入手。

使用kindle软件,上亚马店书店试买了一套《明朝那些事儿》,七卷套纸质版售价RMB143,电子书售价RMB15,呵呵,相差巨大,不知阅读效果怎么样,下单买了一套,付款之后非常方便,自动帮我同步到ipad里面,稍等片刻同步完就能打开看了

IMG_0008

 

进入阅读,感觉在retina里面看起来效果很不错,字体渲染很漂亮,而且可以调节光度背景色等

IMG_0009

 

因为ipad的大小与书本差不多,又很轻巧,拿在手里非常舒服,外出在车上、地铁上随时拿出来放在手里看,一本书最多就几十M大小,一个平板够你放很多书了,现在开始,再也不用担心外出无聊,也不用再背着砖头出门了!

另外Ipad mini还给我了很多的方便,比如平时工作时会上网搜索资料,有时搜索到的资料觉得很有用,但又不可能在工作的时候看,现在我可以用有道云笔记的剪报功能,将有用的网页保存到我的有道云笔记里面,ipad里面装个有道客户端,会自动同步到ipad里面,这样晚上回来的时候我就可以拿起ipad马上可以看到我保存过的网页,非常适合睡觉前用,如果不是这样,可能保存过的网页我也不会再次去看,无形中增加了学习的时间 ,总而言之,有了ipad对我来说是非常有帮助的。

IMG_0027

 

IMG_0026

初用macbook感受

我需要一个完美的计算机

首先,它不能像windows那么难用,几个月就卡要到重装,界面要好看,方便操作,不会担心各种故障,当然,安装软件的时候也不用我去特别指定安装路径,macbook做到了

它的外形必须要轻巧好用,方便携带,当然了,电池续航也要够久,能够让我在任何地方使用上大半天,虽然我很少会这样做,但这样给了我很大的安全感,macbook做到了

它要能够安装一切常用的软件,不能像linux的发行版一样一大堆常用软件不兼容,macbook做到了

它能够不使用鼠标就能完成所有操作,这允许我在任何地方使用它,包括躺在床上,就像我现在躺在床上写这篇博客一样,macbook做到了

它能够完成我的所有工作,包括文档,代码开发等,操作方式上要跟类unix系统一样,这方便我配合我的服务器环境,macbook做到了

它要足够安全,不需要我安装所谓的杀毒软件就能够保证我的系统好用,macbook做到了

最后,它的逼格得够高,要高到能凸显出我满腹的屌丝才华,很明显,macbook做到了

屏幕快照 2014-08-06 上午12.46.52

如何在VPS上通过PPTP搭建VPN(继续更新中)

简介

搭建VPN的方式有很多种方式,最常用的两种是通过PPTP和OpenVpn.通过PPTP(全称:A Point-To-Point Tunneling Protocol),可以快速搭建自己的VPN.虽然PPTP相对于OpenVpn来讲,安全性比较低,但因为加密的算法没有OpenVpn这么复杂,所以比OpenVpn的传输速度更快,消耗CPU的资源比OpenVpn更加少.

什么时候用PPTP? 什么时候用OpenVpn?

如果你搭建VPN的主要目的是翻墙,建议用PPTP.但如果你搭建VPN的目的是来传输重要的数据,而这些数据的保密性要求很高,那建议用OpenVpn,因为OpenVpn的加密算法比PPTP复杂,所以安全性更加高.

用PPTP搭建VPN的步骤

步骤1 – 安装PPTP

如何你是用CentOS系统 ,敲以下命令 :

如何你是用Ubuntu系统 ,敲以下命令 :

步骤2 – 编辑pptpd.conf 文件,敲以下命令 : 

在pptpd.conf文件里面添加 :

上面的localip 是指你VPS服务器的IP地址,而remoteip是指你将要分配给用户的用来连接到你服务器VPN的IP.

步骤3 – 为你的VPN添加用户账号和用户密码,敲以下命令打开用户列表 : 

你将会看到类似以下的图片的界面:

 

 

vpn图片

 

client这一列是用户账号(图片里有box1,box2,box3三个用户账号)

server这一列是指service类型,这里我们用到的是pptpd

secret这一列是指用户密码

IP addresses这一列是指用到哪个IP来验证,通过设置” * “这个通配符, 将指明VPN将接受任何的IP验证到一个特定的用户名/密码 (如用户名为box1,密码为24oiun0124).

步骤4 – 添加DNS服务器地址到/etc/ppp/pptpd-options文件, 敲命令 : 

在/etc/ppp/pptpd-options文件里面添加 :

步骤5 – 开启PPTP的守护进程, 敲一下命令 : 

敲命令 :

如果显示如下图片的情况,则表名PPTP已经正常工作且等待用户的连接.

 

步骤6 – 设置IP地址转发 

启用 IP地址转发 功能是设置PPTP VPN中的重要一步.因为 IP地址转发 允许服务器将通过PPTP传输的 网络数据包 在公网IP和私网IP中切换,启用IP地址转发, 敲以下命令打开sysctl.conf文件 : 

在sysctl.conf文件里面添加 :

设置完后,敲以下命令启用IP地址转发功能 :

步骤7 – 为iptables设置NAT规则

到这里VPN的设置就完成了.

现在就可以用刚才设置的用户名和密码连接到已经设好的VPN上面了.以下是各个不同系统连接上VPN的步骤.

1. Mac OS连接到VPN :

依次打开System Preferences ->Network -> 点击左下角的+号 -> 在’interface’选项里面选择 ‘VPN’ ->  ’VPN Type’ 选项选择 ‘PPTP” -> Service Name’ 填写你的VPN名称(这个随便写什么都行). 如下图Mac OS

 

 

linux中常用命令记录

持续更新

快速清空文本文件内容

 使用scp进行远程文件复制

加上-r参数可以复制文件夹

python中动态调用对象

python是一门动态语言,这意味着你可以在程序运行时动态地改变代码本身,或者动态地导入函数等等,用过php的肯定知道php也支持这种特性,比如下面的php示例:

上面的代码中,先定义了一个函数fun1,接着定义一个字符串变量赋值为’fun’,接下来,什么?直接把字符串当做函数调用???are you kidding me??是的,这段代码确实可以运行,这也是php很牛逼的动态特性,弱数据类型。

python也支持这种方式,即可以在运行的时候再确定函数的对象的名称,需要用到一个内置的函数:getattr()

首先我们先建一个py文件modult.py,里面定义一个方法如下:

接着,我们再定义一个main.py,准备用来调用它,代码如下:

第1行是使用python的内置函数__import__,该函数允许你向它传递一个字符串告知它模块的名称,它将会自动导入该模块,返回的是该模块对象,这是第一个特性:动态导入模块

接下来第二行,使用的是getattr,这个函数可以查找并返回指定对象的属性,第一个参数向它传递module这个模块对象,第二个参数指定要查找的属性名称,使用字符串传递,成功将返回一个对象属性,什么是对象属性,比如一个类里面的成员方法,成员变量,或者如上述代码中,查找一个模块中的函数。返回的是一个对象的属性,这里我直接对它进行调用,就相当于调用了module.py里面的say函数,实现动态调用!运行效果如下:

QQ截图20140729205732

可以看到python对say方法进行了调用

这种方法有什么用?上面这个demo是最简单的运用,可能看不出什么效果,只知道使用了两个内置函数。

想象一下这样一个场景,一个用户向系统调用一个接口,接口的名称是不确定的,所以系统在收到该请求的时候必须要根据用户的请求来确定接口的名称,最笨的方法是使用if,elif这样的方法来判断接口的名称(死心吧,python甚至连switch都不知道,如果接口很多,你打算用一整篇来elif来做判断?),这时,动态调用就显出它的优势了,用户传过来的接口名称是一个字符串,你肯定已经想到,上面的代码做一些修改,把接口名称传给getattr,只需要几行代码功能就实现了!

用python就是爽

 

 

 

浅谈node.js & websocket

先说node.js,近年来炒得很热,最近项目需要,了解了一下。node.js是一个基于javascript语言的平台,本身并不是语言,底层运行google的v8 javascript引挚,令其执行效率很高,跟其他web开发语言最大的不同就是它的异步执行方式,用过javascript的都应该知道,在javascript代码里一眼望去全是异步回调,这种方式的好处在于使用非阻塞模式可以使javascript只使用一个线程来运行而不会阻碍浏览ui的运行,缺点是……异步看起来比较难理解,特别是回调一多的时候,看起来像在看天书,不过这只是习惯问题,相信深入学习之后会慢慢适应这种编程方式。

在服务器端异步执行其优势很明显,相比传统的cgi进程来说,node.js只运行着一个进程来响应所有请求,因为所有接口都做成异步方式,所以响应速度很快,避免了使用多线程或多进程时的任务切换带来的资源消耗,当然了,如果是做一些计算密集型的请求,如果请求一多,单进程也会显得不够用,不过现在已经有node.js下多进程的方案了,如果是做一些普通web业务,则单进程足够了。

举个例子,一个用户请求一个页面,node.js响应该请求,然后调用mysql读取数据,读的过程是异步的,向mysql发出请求后,node.js继续去做别的事情了,直到系统发出事件,node.js回调相应的事件处理代码,说不定在数据库处理的过程中,node.js已经接待了好多个请求了。

另外一个好处,跟php相比,php依赖于cgi环境运行,即必须有一个服务器环境,进行业务流程处理,处理完后php进程关闭,所以php无法做为常驻进程来做用,比如我的一些应用需要进程一直处于运行状态,php就很难办到了,而node.js可以,它本身就不需要http服务器,自带了http模块,这给我的需求带来了好处。

我的需求是快速地开发一个linux下的守护进程,监听udp端口,并且要能够进行二进制运行,node.js和python都符合这个要求,而且python下的demo也已经开发出来了,但这个进程还需要能够支持websocket协议,这点…node.js可以甩python几条街,因为node.js的异步机制最适合用来做这个协议,而且已经有了开源的方案可选。

接着说下websocket,开发web的都知道,浏览器只认识http协议,而http是无状态半双工协议,即http无法保持对话上下文,一但响应请求将会立即断开连接,服务器无法主动向客户端主动发送消息,这对于一些实时应用来说是个感伤,现在一般做法是做使用客户端定时轮询请求,或者保持长连接,在有消息的时候服务器端才返回响应然后关闭,第一种做法达不到实时性,第二种做法消耗资源,第三种是使用flash做成插件运行。直到websocket的出现,websocket是html5带来的新特性,个人觉得websocket是html5里面最大的亮点,websocket即是在web里面使用的tcp连接,可以让服务器与浏览器保持着一点全双工的连接,双方都可以随时向对方发消息,现在最新的浏览器都支持了这种特性。举个例子,当你在网上使用支付宝付款的时候,跳入支付宝页面的时候会显示一个二唯码,这时你可以打开手机支付宝软件扫一下这个二维码,手机扫描完毕之后浏览器会立即显示二维码已被扫描,当你在手机支付成功的时候,浏览器页面会立即显示你付款成功,这一动作是在极短时间内完成的,说明这个消息是服务器端主动向浏览器端推送的,这里面就使用了websocket协议,瞧,如果你使用传统的方式,能达到这种响应速度吗?

websocket可以做的事情很多,让web开发者们有了更大的想象空间,比如实时web聊天,实时网页游戏等等。

而node.js和websocket结合起来,可以完成服务器的更广领域的扩展,使得服务器可以很方便地开发除了http之外的其他很多协议的需求,当然,这些你都可以c++等语言来开发,但是,开发效率肯定没有天生支持异步的node.js来得快。

未完待续

 

python入门

python的入门很简单,装好合适的py环境之后,打开ide或者使用你自己喜欢的编辑器,创建一个文件,后缀保存为.py,写上一句:

print ‘hello world’
记住,不用;号,然后在命令行,或者在ide上按F5,它就开始运行了,控制台上输出一句“hello world”,就是这么简单
py跟其他语言(基本上跟所有语言对比),语法上最大的不同就是py需要使用缩进来区分语句块,比如下面是一个函数的定义:
def fun():
return 1
pass
在函数里面的执行体需要相对于函数名进行一个TAB缩进,初学起来很不习惯,用久了发现看起来挺好看的,当然了,你的一份文件在不同编辑器之间使用记得要把编辑器的缩进长度设统一,否则看起来很难看。
py的上手不算难,最经典的《python简明教程》就是最好的上手教程。
学了py能做什么?可以在pc上写一些脚本,在控制台里运行,代替人做一些简单的事情,我曾经在嵌入式开发过程中,使用py来自动生成一些代码,减少了我手动输入的劳动; 可以和QT一起配合,用来做PC界面开发;可以用来做WEB应用,这也是现在很热门的应用,因为py的开发效率确实很高(不是运行效率),基于django框架的web应用开发是一种享受!