Nest温控器保留历史数据

Filed in php心得, 服务器

Nestgraph是一个利用本地数据库来保留温度历史数据的开源代码。
本来的代码使用的是非官方的api, nest_api。通过修改,新的代码使用了官方的REST API。这样,只需要给nestgraph只读权限,而不需要在服务器端保存用户名和密码,增强了安全性。

使用官方的API,避免了原nest_api的诸多bug,可以将读取时间间隔缩短到1分钟。

详见https://github.com/lubao515/nestgraph

Parallels Desktop 10 无法支持 Ubuntu 15的解决办法

Filed in 服务器Tags: ,

Ubuntu 15.10 发布有很长时间了,但是不知道为什么Parallel Desktop依然没有对Parallel Desktop tool做针对性的修改。

直接打开安装包中的kmods/prl_mod.tar.gz,对其中的文件作一下的修改, 或者直接下载我修改工具即可(点击这里下载):

Read the rest of this entry »

php升级5.2.17 mysql升级5.5.37 后无法连接数据库原因

Filed in php心得, 服务器

mysql升级后默认sock为/tmp/mysqld.sock 但是配置文件中指定为/tmp/mysql.sock
php升级后默认也是 /tmp/mysqld.sock,由于这个原因,就找不到sock

解决方案一:修改php.ini 中
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

修改方案二:修改my.cnf的两处
socket  = /tmp/mysqld.sock

推荐算法电影排序的一点改进

Filed in php心得, 机器学习

之前在同一clustering下,推荐电影是按照imdb的评分来的,但是这有一个问题,就是有些电影,他的评分很高,但是评价的人很少,这样这种评分高的电影就没有任何意义(过度小众,或恶意刷分)

因此,借鉴了IMDB top250 的排序方法,引入true Bayesian estimate 来进行评价,即:

weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C

R = average for the movie (mean) = (Rating)
v = number of votes for the movie = (votes)
m = minimum votes required to be listed in the Top 250 (currently 25000)
C = the mean vote across the whole report (currently 7.0)

依照这样的算法,评价人数多且评分高的,加权平均后评分依然高,评价人数多且评分低的, 加权平均后评分依然低, 而评价人数少的,无论评分高低,都会趋近与平均值7.0,因为信息熵不足以估计他的实际得分,所以他的实际得分趋近与平均值的likelyhood最大。 评价人数越多,越趋近于他的实际平均评分。(estimator 更趋近于 parameter)

这样,在同一聚类下,真正评分(parameter)高的就会先推荐给用户。

经过以上改进,出现在我的推荐里的就都是我喜欢的电影了。

mysql奇葩的in语句

Filed in php心得, 服务器

如果in的key有索引,然后先select完了,将结果用key in (result1,result2, …)拼接就会走索引

可以如果直接 key in (select …)就不会走索引

奇葩吧,大家引以为戒,一定要用第一种方法,不然会卡到爆的

demo:

$sql = "select result from table1 where key='key1'";
$rows = $db->get_rows($sql);
$result = array();
foreach ($rows as $row)
{
$result[] = $row[0];
}
$result = implode(",", $result);
if ($torrentid)
{
$sql = "select * from table2 where result in($result) ";
}

走索引

select * from table2 where result in (select result from table1 where key='key1')

不走索引

理论上来说,两句话应该是完全一样的,但是因为mysql莫名其妙的优化方案,导致第二句居然不走索引……所以让php多处理几句话吧

mac下使用http代理连接ssh

Filed in 服务器

打开ssh config文件
vim ~/.ssh/config
假设你要访问的服务器域名是example.com,代理是proxy.com,端口是proxy_port
那么,在config中添加如下语句
Host example.com
ProxyCommand nc -X connect -x proxy.com:proxy_port %h %p

discuz的问题(一点提示)

Filed in discuz相关

在discuz7.2中有这么一项设定,自动把POST GET 和 COOKIE 转换成相对应的变量名,但是这样存在一个危险,如果在特定的情况下外部赋值的变量会覆盖内部赋值的变量,从而产生一些不必要的麻烦,因此discuz在2.5中取消了这一设置

关于discuz_tips在不使用漫游下的去除方法

Filed in discuz相关

本人是内网论坛,不用漫游,不用云平台,因为discuz_tips的存在,每次访问页面都会去链接cp.discuz.qq.com,异常的DT
按照大大在帖子里的回复,直接去掉该代码会无法收到各种更新提醒,好吧,貌似这个还挺有用的,那么怎么办呢?

其实discuz自己之前的代码就给出了解决方案(可能是漫游的原因后来修改了)可以参看function/function_cloud.php

下面就是我的修改方案:
在api\manyou\Service\Discuz_tips.php中找到
public function show() {
global $_G;

在下面添加

//motified by lubao515
if ($_G['adminid'] != 1) {
return false;
}
//end motify

原理就是只有当管理员访问是,才生产discuz_tips代码,这样就能看见各种更新提示了(普通会员也不需要看更新提示吧?)
当然,这个是manyou的api,所以discuz添加修改了这段本来只向管理员推送信息的代码大概有他们自己的想法的。

所幸我不用manyou,也不用考虑这个问题。

本人水平有限,如有错误,请各位大大指正。

Centos下svn服务器搭建

Filed in 服务器Tags: , , ,

一直想搭建一个svn服务器,方便代码的管理和维护,可是一直没有去专门研究这个事情,主要是因为ihipop同学比较强大,给出了svn详细的配置方法,好处是它详细,坏处是太详细了,使我对svn有了一种莫名的敬畏感。

这几天研究了一下,发现其实没有那么难。

首先 安装svn

运行
yum -y install subversion

然后创建版本库

mkdir -p /data0/svndata
svnadmin create /data0/svndata/svnserver1

编辑配置文件conf/svnserve.conf

vim /data0/svndata/svnserver1/conf/svnserve.conf

分别将
anon-access
auth-access
password-db
authz-db
realm
前面的注释符号去掉

anon-access = none意思是没有权限的禁止访问
auth-access = read作者可写
password-db 指定用户名密码的文件,可指定,不用修改
authz-db 指定用户权限配置文件位置,不用修改
realm 域名称 用于显示在同步的时候 可以设置为自己代码服务的名称 比如realm = svnserver1

conf /Passwd文件是配置用户名和密码的,源文件里给出了demo,即

user1 = user1password
user2 = user2password
user3 = user3password
.
.
.

关于权限文件conf /authz 的设置 sxj52ll的博客上给出了这样的推荐设置方法
[groups] 设置组
admin = user1
[/] 根目录权限设置(就是“svndata”这个文件夹)
user1 = rw 用户1权限是:可读写
user2 = r 用户2权限是:可读,不可写
@admin = rw 设置组权限
[svndata:/svnserver1] 设置根目录下“svnserver1”文件夹的权限
user1 = rw
user2 = r
…以此类推

但是我认为,依照组的设置方法可能更方便,大家根据自己的需要自行设置

[groups]
admin = user1,user2
read = user3
[/] 根目录权限设置(就是“svndata”这个文件夹)
@admin = rw 设置admin组权限
@read = r 设置read组权限
[svndata:/svnserver1] 设置根目录下“svnserver1”文件夹的权限

@admin = rw 设置admin组权限
@read = r 设置read组权限
…以此类推

这样的好处是显而易见的,当有很多用户,和很多工程时,我就可以根据需要,将特定的用户,加入到特定的组里,而不用逐个目录设置用户的权限

配置完成!

启动SVN服务:
svnserve -d -r /data0/svndata/
-d表示后台运行
-r 指定根目录是 /data0/svndata/

停止SVN服务:
ps -aux |grep svn
kill -9 进程杀掉

在客户端配置好svn的路径 svn://ip地址或域名:3690/svnserver1即可

当然,知道,为了安全起见,svn服务器和网站的服务器通常不放在一起的,svn同步后确定没有问题了,才会向网站服务器同步
使用
svn update 网站路径
(当然首先要把代码commit当网站上,建立svn资料)

但是,我们的服务器通常ssh起来都比较麻烦,这个提供一个比较简单的办法

建立一个php脚本

\n";
$rows = array();
$arg_file = '/var/args';
$cmd ="/usr/bin/svn update 网站路径 --username=user3 --password=user3password 2>&1 <$arg_file"; exec($cmd, $rows); foreach ($rows as $row) { echo $row."
\n";
}
echo "done!";
?>

然后在/var/下建立一个用于隧道传参的文件args,内容

no

这样,只需要刷新这个脚本,就可以同步了,是不是很方便呢?

大家春节快乐哦~

最近评论
Click to view/hide
 
Click to view/hide
2017年十一月
« 8月    
 12345
6789101112
13141516171819
20212223242526
27282930  
站点功能
Click to view/hide