上次维修小站给人修电脑,获得了一个SSD尸体。

于是尝试修一下,发现后面有塑料部分融化了,想到可能是附近的原件烧坏了。

IMG_0929

于是上网查SATA接口定义,并配合电路板画出了烧坏的原件附近的电路图,

IMG_0933

是一个稳压二极管,拿另一个二极管替换掉它。

IMG_0941

 

理论上这样做是可以的,但是更换元器件过后的SSD还是不识别,
于是想到SSD的MLC颗粒可以做成告诉U盘,于是将其拆解

IMG_0943

 

拆的时候要用很多焊锡把一边烫化,然后用小刀撬起一边,然后用同样的方法拆焊另一边

IMG_0946

 

最后得到8个4G的MLC芯片,和一块电路板

然后去X宝 http://item.taobao.com/item.htm?spm=a1z09.5.0.0.ulk05O&id=21749024747
买来4个主控板和外壳

IMG_6495 IMG_6496

 

把芯片脚上的焊锡用吸锡线去掉,在U盘主控板子上的焊盘上涂上锡。

IMG_6501

 

IMG_6500

接下来小心焊上芯片

IMG_0998IMG_0999

 

硬件做好后,要反复检查,插在电脑上之后,电脑会有设备识别,U盘上的指示灯闪动。

打开“银灿IS902E主控量产工具v2.07.01.04中文版”,U盘要插在USB2.0接口上。

U盘指示符应该是蓝色的,这样就可以设置量产选项,并成功量产。

Unnamed QQ Screenshot20131130214725

 

U盘可以自定义设备名称,拿自己名字命名。

容量8G 读速度 60M/s 写速度15M/s

遇到不少问题,焊接的时候要仔细,焊接失败的话再拆焊就容易拆掉焊盘。
量产的时候要用合适的系统,合适的兼容环境才能量产成功。

一直想做一个实时监控某一个变量的绘图软件,比如实时监控网站流量,然后绘图显示。后来找到了一个Cacti的开源软件,很适合做这个工作。
cacti的简介 http://www.oschina.net/p/cacti
cacti的安装 http://my.oschina.net/f91jty/blog/168386
cacti的模板 http://docs.cacti.net/templates
cacti的插件 http://docs.cacti.net/plugins
cacti博客推荐

http://blog.sina.com.cn/s/articlelist_1312968225_1_1.html

http://itthinker.vicp.net/?p=484

内置的模板比较有限,所以需要自定义模版,自定义模板的文章在网上也有不少,基本分以下几步:
1 写一个脚本,让脚本输出你需要监控的内容
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);
$sql = “SELECT count(1) FROM `rbac_user` “;
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
$out = ‘count:’.$row['count(1)'];
print $out;
如果只监视一个变量,那么程序需要输出有XX:123
如果同一个脚本可以输出多个变量的话,格式要满足 XX:123 YY:456 ZZ:789
测试一下这个脚本是否正常工作。
$ php haitou_company.php
count:240

2 建立Input Method
名字随便取
script/command
Input String: -q /scripts/haitou_company.php
然后新增一个outfield

3 建立一个DataTemplate
Data Input Method 选择之前新建好的那个
Data Source Type 根据实际来选择

4 建立一个Data Source
Data Template 选之前建立那个 然后点两下 Save

5 建立Graph Template
填写name title之后保存
然后再建立一个Graph Template Item
这里比较重要,不出图很可能是这里的原因。
Graph Item Type选AREA或LINEx
再建立一个GPRINT类型的注释

6 新建一张图
建立一张图,然后把它移动到合适的树下

不出图调试过程
1 php haitou_company.php 看有没有输出
若没有正常输出,请检查获取信息的代码
2 rrdtool lastupdate localhost_count_73.rrd 看有没有输出
若没有正常输出,请检查DataSource之前的步骤
3 是跟本没有图还是有图,但是图上没有数据
如果根本没有图,请检查GraphTemplate

很早之前就接触了user.js这个东西,它是允许用户自定义在特定网页上执行javascript的一个工具,在firefox上是greasemonkey,其他浏览器上也有不同的工具。

Firefox: GreasemonkeyScriptish
Safari: NinjaKit
Chrome: Tampermonkey

用户可以自定义脚本,那就可以做很多事情了。比如增加一个按钮,去掉一个广告等。

我使用过几个不错的用户脚本,一个是搜索引擎之间互相跳转的插件jump_around  https://userscripts.org/scripts/show/152399还有人人网改造器,用来去掉人人网的一下广告,优化显示 https://userscripts.org/scripts/show/45836

最近买了新电脑,要装软件,经常去一些下载软件的网站去下载,结果被全屏的广告刷屏了,很是讨厌,于是就想到了小猴子这个工具了。
小猴子可以运行自定义的js,那么如果运行$(‘XXX’).remove(); 广告的框框就会被删除,运行$(‘XXX’).style.display=’none’; 广告的框框就隐藏了。
其实我上的网站比较有限,不过几十个,不同网站也有可能使用了同样的广告插件,比如百度推广,阿里推广,adsence等,那么去广告的js就更通用了。

于是尝试自己写一个user.js ,以新浪的博客为例子http://blog.sina.com.cn/s/blog_470ca93e0100dpgu.html,虽然原理很简单 ,但是还是弄了很久才勉强搞定。
其实只需要运行document.getElementById(‘searchToQing’).style.display=”none”;但是运行时机要掌握好,不能刚开始就加载,至少在onload以后。

最后想用settimeout延迟,但是不成功,原因是小猴子不是直接运行这些脚本的,而是封装成包,并且一旦运行就删除掉了,结果就是不能在调用了。引用 http://sebug.net/paper/books/greasemonkey/ 这里的说明,用window.setTimeout(function() {}) 调用。

最后还是有问题,那个广告有可能是后于用户脚本的,那就要延时一段时间再执行,但是延时多久合适呢?短了就不能去广告了,长又被我手动叉掉了。

最后选择轮询,一旦隐藏成功了,就停止轮询了。

window.fuckadhdl1 = setInterval(subfunct1,1000);

function subfunct1() {
	if(document.getElementById('searchToQing').style.display=="none"){
	   console.log("cleared");
	   clearInterval(window.fuckadhdl1);
	}
	else{
    	console.log("tring");
	    document.getElementById('searchToQing').style.display="none";
	}
}

最后运行,正式想要的结果。有时间再进行优化。

http://sebug.net/paper/books/greasemonkey/
仔细看了以上教程,写的很详细,以后写用户脚本就拿这个参考。最后发现这个文档是2005年出版的,顿时觉得我知道的太少了。

去年年末,接触过一阵子的Yii,现在重新拾起来,为了掌握另一种php开发框架。

yii的资料不是很多,大部分都是英文,给学习带来一定的困难,不过这也是一种挑战。

下载安装包,解压到本地,使用yiic命令行工具生成一个webapp的框架。

更改配置文件,换mysql做数据库,开启扩展gii。

建立相关数据库,数据库前缀在配置文件中设置:
‘db’=> array( ……, ‘tablePrefix’ => ‘cfi_’,);

gii的密码可以改为false来禁用密码。

建立数据库,要设置对字段是否允许“空”,否则Yii会检查,字段空就不通过检查。

首先通过gii的Model生成器生成一个Model,然后再使用Crud生成器生成Controller和各种View。一个MVC框架就生成了。

数据库连接查询在Model的Relation中设置,共有4种关系,HAS_ONE,HAS_MANY,BELONGS_TO,MANY_TO_MANY。

举个例子,一个用户可以有多个相册,一个相册只能有一个封面,一个相册可以有多个相片,每个相片有不同的标签。
对于相册来说,和封面是HAS_ONE的关系,和相片是HAS_MANY关系,和作者是BELONGS_TO关系,和标签是MANY_TO_MANY关系。

return array(
‘authora’=>array(self::BELONGS_TO, ‘User’, ‘author’),
作者数组
‘images’=>array(self::HAS_MANY, ‘Image’, ‘folder’),
‘perfaceimage’=>array(self::HAS_ONE, ‘Image’, array(‘id’ => ‘perface’)),
);
用来显示关系数据库使用$data->perfaceimage->title,在zii.widgets.CDetailView中使用perfaceimage.title。

除了关系数据库外,常用的有格式化HTML。
符号转实体的方法是 CHtml::encode()

生成a标签的方法是 CHtml::link(CHtml::encode($folder->name), array(‘folder/view’, ‘id’=>$folder->id), array(target=>’_blank’));第一个参数是显示名称,第二个是string或array类型的,表示URL,后面的是可选。

下一篇笔记讲生成表单。

使用openwrt内置的网络摄像头服务时,出现501: Not Implemented! no www-folder configured 错误。

在网上查到了一篇帖子

https://forum.openwrt.org/viewtopic.php?id=38239

其中有下面一段话:

The error about the missing webui is normal, those files are not included with the OpenWRT package.  To test if its working try the following URLs, changing routerip to what is relevant for your configuration.

Streaming (probably only works in Mozilla based browsers) http://routerip:8081/?action=stream
Snapshot image (should work in any browser) http://routerip:8081/?action=snapshot

If you want the webUI then you need to download a copy of mjpg_streamer and put the www files somewhere on your router storage.  Then edit /etc/init.d/mjpg-streamer adding the -w parameter pointing to the webUI files.

错误的原因是openwrt没有包含mjpg-streamer中的www部分,所以找不到文件,就出错了。

解决办法

1用火狐访问 http://routerip:8081/?action=snapshot
火狐自动识别为mjpg流

2下一份mjpg-streamer的源码,把www部分丢到路由器上,在mjpg-streamer的启动代码中的输出部分加上 -w 参数来指定www目录位置

http://sourceforge.net/projects/mjpg-streamer

亲测可用!

 

刚刚返校,还没去找老板,略有闲,想到以后物联网终端在宿舍试用,于是帮lsc配一个mentohust路由器。

起初用他的电脑,但是因为众多软件不全,无奈拿回来做。

用笔尖点reset键,再按下开机键,大约10秒钟,指示灯变红,此时配置本地IP为192.168.1.X,网关为192.168.1.1,用网线连接电脑和lan4。

用浏览器访问192.168.1.1,提示上传固件程序,等很长时间,红灯熄灭,设备自动重启。

网线从lan4拔下,接到lan3,输入192.168.1.1,到了LUCI配置界面,固件中如果没有mentohust还要重刷,找到内置mentohust的固件。

刷完固件,进去先把无线开关打开,并配置好SSID和密码。

到宿舍,使用putty连进路由器,执行mentohust命令,在系统提示下输入各种信息。

出了很多问题

1.找不到服务器

网卡选择错误,应该选择eth0,然后在开启网卡,ifconfig eth0 up

2.动态IP绑定错误

由于学校改成了动态IP,所以DHCP方式应该选择“二次认证”

3.未使用管理员指定的客户端

这个问题困扰已久,只能说问题到了一个阶段,有空继续研究。

 

五年之前,我申请了这个域名作为个人主页,那时候cn域名还接受个人备案。
三年之前,我在国外的免费主机上部署了一套wordpress,作为博客。
半年之前,这个免费的主机不正常工作了,导致博客宕机几个月。
昨天,我把博客系统移到了电信服务器上,这里应该是个比较稳定的位置了。

我又把wordpress更新到了当前最新版本3.6。
参考http://www.cnblogs.com/hhuai/archive/2011/02/12/1952647.html
配置
了vsftpd服务,然后就可以很方便的安装wordpress主题插件等。

在使用过程中我遇到了很对问题,一个典型的就是ftp的530错误,原因是配置文件出了问题,按教程修改就解决了问题。
另一个问题是Faild to connect to ftp server XXX :21, 原因在于wp所在文件夹没有www用户权限,chown即可。
参考http://wordpress.org/support/topic/failed-to-connect-to-ftp-server-localhost21-3

在使用awstats等pl语言程序时遇到了问题。

lnmpa是一体安装包,lnmp.org 可以下载,但是lnmp更新成lnmpa了以后apache可以执行php程序,但是不能执行cgi,pl等程序了。

原因是apache编译的时候没有选择启用mod_cgi.so模块。
在apache.sh文件中可以看到以下命令:
./configure –prefix=/usr/local/apache –enable-headers –enable-mime-magic –enable-proxy –enable-so –enable-rewrite –enable-ssl –enable-deflate –enable-suexec –disable-userdir –with-included-apr –with-mpm=prefork –with-ssl=/usr –disable-userdir –disable-cgid –disable-cgi

需要执行以下步骤
1.重新编译apache,使apache含有mod_cgi模块
运行
cd httpd-2.2.22/
./configure –prefix=/usr/local/apache –enable-headers –enable-mime-magic –enable-proxy –enable-so –enable-rewrite –enable-ssl –enable-deflate –enable-suexec –disable-userdir –with-included-apr –with-mpm=prefork –with-ssl=/usr –disable-userdir –enable-cgid –enable-cgi
make && make install
然后再重启httpd服务。
如果phpinfo()里面有mod_cgi这个模块,表明这一步成功了。

2.让nginx转发cgi请求给apache
修改 /usr/local/nginx/conf/nginx.conf以及想要支持的vhost配置文件
找到location ~ .*\.(php|php5)?$
改为location ~ .*\.(php|php5|cgi|pl)?$
然后重启nginx服务。

3.修改apache配置文件,使指定目录具有执行cgi的权限
找到/usr/local/apache/conf/httpd.conf或者要执行cgi的vhost文件添加以下命令
AddType text/plain .cgi .pl
<Directory /home/wwwroot/XXXXX>
Options +ExecCGI +Indexes
AllowOverride All
</Directory>
重启httpd服务。

然后lnmpa就可以执行cgi和pl等程序了。

如果网站不想让别人随意访问,可以设置网站的权限

在nginx的配置文件里添加:
auth_basic              “Admin Auth”;
auth_basic_user_file    /usr/local/nginx/conf/adminauth.conf;

apache自带了生成密码的程序,如果使用nginx,需要手动写一个生成密码的小程序。
用perl语言

#!/usr/bin/perl
use strict;
my $pw=$ARGV[0];
print crypt($pw,$pw).”\n”;

这样,访问网站的时候就需要密码了。