日志

EmberJS 路由跳转时触发的事件/如何在离开一个页面时进行操作

在公司上班的时候遇到一个问题,这个问题出现在由于公司需要将前后端分离。前端使用Ember.js,后端用的python的flask框架。

作为一个后端工程师第一次感受到了只有数据不写逻辑的屈辱(并没有

写完后端时就帮前端的同事打打杂,结果遇到一问题:

在一个页面使用setIntveral的方法不断刷新数据,但是结果当路由发生跳转时,这个方法依旧在运行,一直向后台运行,类似于内存泄漏。如何杀掉这个东西成为了一个头疼的问题(其实是那些同事偷懒不想看

今天比较闲,我打开了一本新书《How to Copy Code from StackOverflow》,在浏览了一个半天后,从IfLab的群里面得到灵感:既然ember做得像手机应用,当手机应用一个view消失时会出发viewWillDisappear事件,那么这个会不会有呢?

 

经过不懈努力找到了一个方法:willTransition

真佩服自己的机制(逃

可能的废站公告

因为DigitalOcean的一些原因,可能网站将在2016年6月停止在美国地区工作。

之后的可能要看情况,可能会在DO人工续费,也有可能转移到国内然后备案,也有可能过几个月重新上线,也有可能就此再见。

青山不改,绿水长流

日志

Ubuntu apt,wget 设置代理

在公司上班遇到了一个问题,就是公司的Ubuntu Server服务器需要设置代理才能访问外网。

以前代理设置都用图形界面,现在得想想办法了。

然后查了能多资料都不靠谱,所以这里整理了一个靠谱的资料(我用的是Ubuntu1404.4)

首先对于apt-*开头的命令,设置代理的方法是在/etc/apt/apt.conf文件中编辑(注意!安装好的可能没有这个文件,以管理员身份新建即可),添加如下的语句:

这里yourproxyaddress填代理的IP地址,proxyport是代理的端口

 

对于wget命令,在家目录下的.wgetrc(没有就新建)文件中添加:

保存后source一下就可以了,以后也不用重复设置。

 

 

日志

在VMware虚拟机上加挂硬盘

今天有个需求,需要在硬盘上有一个独立的卷标,需要是LVM的。

于是查找了资料:

首先挂在完后用lsblk命令看硬盘情况:

发现并没有出现,于是要sudo reboot重启一下,之后就有了:

 

这个时候sdb是没有初始化的,需要格式化才能使用,用

之后按n,用默认配置把所有空间都给一个卷,之后按t,会让你输入一个卷标值,输L回车有提示:

因此填入8e,再按w保存

之后用

可以看到情况,这样就完成了:

 

日志

Xshell无法连接Ubuntu的问题

每个人都会有那么一两下大脑短路的时候,我也不例外。

今天在尝试用Vsphere安装了两台Ubuntu1404LTS桌面版,安装完了就想像往常一样用本地的Xshell继续下一步来着,却发现始终报“Connection Failed”,网络都是畅通的,知道10秒钟后才反应过来,之前一种用的是Ubuntu Server版本的,在安装时可以选择安装openssh。

所以在虚拟机上安装ssh:

我也是醉了。

日志

【翻译】如何设置你的个人云VPN(使用PPTP协议)

原文名称:How To Setup Your Own VPN With PPTP

原文作者:Bulat Khamitov,原文地址:点击这里(可能需翻墙)

翻译:凡爷

(译者按:今天在开发过程中遇到一个问题,需要访问一台不在外网的服务器,然而用花生壳的方法需要配置那边的路由太麻烦,于是想到能不能用一台云服务器做一个VPN然后内网VPN和我的电脑同时登陆这个VPN进行沟通,于是在DO官方网站找到了一篇文章,其实是高铭同学给我的,然后照做了VPN服务器端的操作并且成功.于是打算翻译一下这个文章。另:我只挑重点翻译,其他的看心情)

步骤1:安装pptp

我们需要一台服务器用于各个用户的认证和处理各个IP沟通,这台服务器我们就称之为PPTP服务器。

在这台服务器上首先安装pptp:(OS:ubuntu,CentOS请参考原文)(*译注:以下命令都需要管理员权限)

之后编辑/etc/pptpd.conf文件,在最后加入以下几行:

localip是指这台服务器在VPN中的内网地址,remoteip是指登陆此VPN后分配给他们的内网IP地址。

下一步,我们应当在/etc/ppp/chap-secrets文件中设置VPN验证的账号密码:

效果图

其中,client是指用户名,server是VPN的类型这里用pptpd为例子,sercret是密码,后面的IP addresses是限制这个账号登陆的ip,如果没有特殊要求,用*号表示接受所有IP地址。

 

步骤2:向/etc/ppp/pptpd-options添加DNS服务器

在/etc/ppp/pptpd-options文件中找到类似的语句然后取消他们的注释,并修改为如下:

现在就可以重启pptp服务了:

如果不放心还可以验证以下pptp是否启动了:

效果图

 

步骤3:设置IP转发

设置IP转发是至关重要的一步,这样服务器就能够将公网IP和内网IP之间的数据包转换发送。编辑/etc/sysctl.conf ,如果文件中没有以下几句那么就添加以下句子(其实能找到该句,然后把它之前的注释“#”去掉):

然后启动该服务:

 

步骤4:设置NAT规则

如果你还想让各个登陆的客户机互相沟通,那么加入以下规则:

这样你的服务器也同时具备了一个路由器的功能。

(以下内容为如何设置Linux操作系统的客户机登陆这台服务器的方法了,这里就不翻译了,有兴趣可以参考原文。对于Windows、MacOS、以及大部分桌面版Linux,都可以通过系统自带的方式使用PPTP协议登陆,登陆的账号密码前文也给出了。)

日志

没事干就拆数组玩吧!

在开发PHP的时候遇到一个问题:

一个数组A,各元素(b1,b2,b3,…bn)是一个字典(b1{key1:”c1″,key2:”c2″,…keyn:”cn”}),现在需要根据每个元素的一个字段值不同将A拆分成若干个小数组Ax。(前提是这些元素已经按照这个键有序排列)

对于像我这样的脑残复健程序员,我查(百)阅(度)相关资料后发现很多所谓的技术博客说的都很模糊,甚至有错,所以只好自己做实验寻摸着搞,首先,我们知道PHP对于这个问题有两个拆分数组的方法需要用到:

这两个方法名称只有一字之差,很多技术博客显然没有区分,而他们俩的功能相差完全不一样。

array_slice是从数组array中的索引offset开始(如果offset为负值那么就从数组尾部倒着数),选取length个元素,如果没有length值那么一直按顺序选到数组的结束(length值也可以为负)。PHP5以后增加了preserve_keys的变量,如果这个变量是true,那么原来的键值也会保留(默认为True),False的话原来的键值会被抹掉成为0,1,2,…

必须注意的是!这个函数不具备截取的功能,即取出这些元素后原来的数组并没有发生改变。

因此要用到第二个方法:array_splice,及按照之前所说的索引方法将所圈出来的元素用另一个数组$replacement代替,当$replacement数组为空时,就是将数组所圈出来的元素删除。需要注意的是,这个方法不返回被删除的元素。

那么来做一个实验:

运行的结果是:

结果显而易见,之后着手解决问题,首先比较第一个元素中和下一个元素的那个key的值,直到找到不同为止,记录下位置,跳出循环之后用上面两个方法截取数组,之后不断重复直到原来的数组被截取到长度为0,完成。

代码如下:

虽然效率不高,但是最终也还算是完成了任务。

日志

phpMyAdmin:缺少 mcrypt 扩展。请检查 PHP 配置。

在实际配置过程中往往会遇到一些奇怪的问题,比如这个,貌似不会影响使用,很多人并不在意,但是看着总是很奇怪。

屏幕快照 2016-01-11 上午10.56.30

这个mcrypt扩展通过php官网手册查询告诉我们是php自带的加密模块,是一个扩展,能够用各种奇怪的算法进行加密解密,是php对于传输安全的一个考量。

因此有必要的话还是启用一下比较好,直接在bash中:

就可以启动该模块,然后我们来看看效果,这里有一段不知道从哪里来的测试代码(咦?):

结果如下:

这里说一下,百度中又很多说了可以下载mcrypt包自己编译什么的,据说也能解决,但是显然是不合理的。

日志

SSH攻击的一些问题

今天几个人玩起了互相加友链的逗比游戏,于是无意中在高铭同学的博客上看到他的最新文章《SSH攻击的检测与预防》,于是我也看了一眼这台老爷机,结果也吓了一跳:

首先,按照高铭同学的办法查找是不是有人在猜密码:

其中这是简单的文字匹配,所以把root换成其他的账户名称也是可以检查其他账户的,通过比较显然这是用机器扫描各个机子然后猜root密码(废话),加上DO服务器默认直接给root账户(也有的给ubuntu这样的默认账户)危险可能会变大。我的服务器很早就禁止root访问了,但是不妨碍别人来猜,所以试了试下面的:

结果很长,总而言之就是把上面统计的结果一条条拆出来看,并且告诉时间IP,然后发现到昨天为止(其实是由于美国时间也就是现在)每10分钟到半个小时就会有root的登陆尝试,这太恶心了。虽然很显然root已经不能登录了,这样也仍然感觉很恶心,所以决定也换一个端口号,然后查了查常用端口号地址,跳过0-1024这1025个端口,找一个没有用过的端口,通过

修改端口,这里面还有一些其他的设置,比如

等等,略复杂我也不是很明白,有空进一步研究。

修改完成之后重启ssh服务

重启之后当前的ssh会话仍然可用,但是等下一次登录时,必须要使用指定端口号的方式登陆:

否则就会遇到: