angularjs post 数据格式

没太理解为毛angularjs里post数据用的json格式。。。
网上也有修改方案:
修改原来的app.js 增加:

var [你的app名字]= angular.module('[你的app名字]=', ['ngRoute','[你的controller名字]='],function($httpProvider) {
// Use x-www-form-urlencoded Content-Type
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

/**
* The workhorse; converts an object to x-www-form-urlencoded serialization.
* @param {Object} obj
* @return {String}
*/
var param = function(obj) {
var query = '', name, value, fullSubName, subName, subValue, innerObj, i;

for(name in obj) {
value = obj[name];

if(value instanceof Array) {
for(i=0; i);

awk入门

参考文章
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
笔记:
1、$1 列号,可以选择输出哪列
#last -n 5 | awk ‘{print $1}’ //打印第一列
root
root
root
dmtsai
root

2、分隔符
cat /etc/passwd|awk -F ‘:’ ‘{print $1}’|awk -F ‘a’ ‘{print $1}’
默认空格分隔,没有的话可以-F设置别的分隔符

3、设置多列输出格式
last -n 5 | awk ‘{print $1″:”$2}’

4、在原来数据前增加内容,如标题
cat /etc/passwd |awk -F ‘:’ ‘BEGIN {print “name,shell”} {print $1″,”$7} END {print “blue,/bin/nosh”}’

name,shell
原来结果集...
blue,/bin/nosh

5、搜索
awk -F: ‘/root/’ /etc/passwd
其中两个”/”不能去掉,支持正则表达式

6、内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符

#awk -F ‘:’ ‘{print “filename:” FILENAME “,linenumber:” NR “,columns:” NF “,linecontent:”$0}’ /etc/passwd
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

能显示,结果是第几行,有多少列这种信息。

7、printf
awk -F ‘:’ ‘{printf(“filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n”,FILENAME,NR,NF,$0)}’ /etc/passwd
格式化字符串,c的风格

8、变量叠加
awk ‘{count++;print $0;} END{print “user count is “, count}’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
……
user count is 40

带初始化

awk ‘BEGIN {count=0;print “[start]user count is “, count} {count=count+1;print $0;} END{print “[end]user count is “, count}’ /etc/passwd
[start]user count is 0
root:x:0:0:root:/root:/bin/bash

[end]user count is 40

叠加某个字段
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “, size}’
[end]size is 8657198

变量运算
ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “, size/1024/1024,”M”}’
[end]size is 8.25889 M

8、if条件

ls -l |awk ‘BEGIN {size=0;print “[start]size is “, size} {if($5!=4096){size=size+$5;}} END{print “[end]size is “, size/1024/1024,”M”}’
[end]size is 8.22339 M

9、循环语句

awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。

10、数组
awk -F ‘:’ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd

crontab 定时运行

*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令


centos中分钟用 * 不使用 */1
“, “逗号分隔代表几或几
比如 1,2 * * * * 每小时 第一分钟第二分钟各执行一次
“-“减号代表几到几
比如 1-10 * * * * 每小时 第一分钟第十分钟每分钟执行一次
“/”间隔时间
比如1-10/2 * * * * 每小时 第一分钟第十分钟每2分钟执行一次

crontab最小执行单位是分钟

缓存设计笔记

http://robbinfan.com/blog/38/orm-cache-sumup
http://www.cnblogs.com/dotey/archive/2013/03/08/2949153.html

看了下这两篇介绍缓存设计的文章。
第一篇主要以ORM的角度说,表设计粒度尽量细致,然后通过主键缓存能让效率发挥的更好。
然后发现当初我们的误区是:
在Hibernate里发现人家缓存机制吧查询转成N+1个sql,然后被吓住了, 然后就开始研究怎么写hql了,以为能优化效率
。。。多愚蠢,这样就浪费缓存机制了,而且还连表了,开发时数据小没啥问题,数据多了就瞎了。

第二篇主要的意思是
把条件查询放一个索引表中,查询id,然后再通过id查询缓存中的单元内容。
其中把id列表也缓存起来,如[1,2,3,4,5…100]用于分页。这个如果更新频率高就不太合适了,或者查询条件复杂
我觉得查询复杂的话是不是还是搜索引擎比较合适,然后搜索引擎查出来的id再去索引查单元内容。

shpinx php client在thinkphp3.2.2中的使用

在无框架demo中测试过后放到thinkphp中
我的方法是,
1、api文件重新命名为
ShpinxClient.class.php
2、增加命名空间
namespace App\Comm (放到应用的Comm目录,App是应用名字)
3、api文件路径
App\Comm
4、Controller增加命名空间
use Home\Common\ShpinxClient
5、Controller调用
public function test(){
$s=new SphinxClient();
$s->SetServer(‘localhost’,9312);

$result = $s->Query(‘aa’,’*’);
$err = $s->GetLastError();
echo $err;

echo json_encode($result);
}

遇到很扯问题,一直返回false
然后发现是Thinkphp3.2.2运行时ShpinxClient构造函数没有执行,需要
再执行下如:
public function test(){
$s=new SphinxClient();
$s->SphinxClient();
$s->SetServer(‘localhost’,9312);

$result = $s->Query(‘aa’,’*’);
$err = $s->GetLastError();
echo $err;

echo json_encode($result);
}

Sphinx 入门

sphinx说是性能不错

高速索引
在现代CPU上可达10 MB/秒(英文),在启用了中文分词后,建立索引的速度可达300K/s;
高速搜索
在2-4 GB的文本建立的索引上搜索,平均0.1秒内获得结果;
可处理大数据量
在单一CPU上,实测最高可对100GB的文本建立索引,单一索引可包括100M文件
支持分布式搜索
支持主从式的分布式搜索,支持单一节点失效不影响整个搜索系统

而且支持php,java,python
就是本地需要启个服务,然后其他的程序通过连这个服务搜索。默认端口9312

首先本地windows环境测试,
直接下载官方最新版本sphinx2.2.6
http://sphinxsearch.com/downloads/release/
配置方式网上有很多,我试的是mysql索引
比如这篇:
http://www.cnblogs.com/ainiaa/archive/2010/12/21/1912459.html

1,建立索引
下载好目录中有个sphinx.conf.in
改名成sphinx.conf 去掉id,配置下里面的mysql参数
然后运行bin\indexer.exe 就可以了

2,启动服务
运行bin\searchd.exe [可以写个索引名]

3,搜索
网上有很多search 关键词 搜索的例子
这个版本已经没有这个exe了。
提供了一个php的api
官方两个例子比较复杂
找了个简单的例子:
SetServer(‘localhost’,9312);
$result = $s->Query(‘key’);
//var_dump($result);
echo json_encode($result);
?>

其中
Query ( $query, $index=”*”, $comment=”” )
支持3个参数,
$query=查询关键词
$index=索引名,有多个表都有索引的话可以通过这里过滤下
$comment=应该是要查询的字段

不过问题来了。。介个不支持中文
http://www.coreseek.cn
搜索中文分词出现了coreseek,一开始以为是个分词工具,
但其实是sphinx中文分词版,里面带完整的sphinx.而且呢,里面的例子更方便,直接带cmd测试工具。。
配置文件也全中文说明,太方便了。

就是版本老的可以,最后一次更新是2013-11-26 年,Sphinx 2.2.1-beta 与 2.1.3-release 发布。

接下来用这个版本测试了下中文分词搜索,好用了!给个好评。

基本命令:
http://blog.sina.com.cn/s/blog_705e4fdc0101ajog.html

6、创建更新所有索引
$sudo /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/dict/csft_mysql.conf –all –rotate
如果配置正确的话,现在辅助表sph_counter中已经添加了一条数据

7、更新增量索引
$sudo /usr/local/coreseek/bin/indexer delta -c /usr/local/coreseek/dict/csft_mysql.conf –rotate

8、合并增量索引到主索引
$sudo /usr/local/coreseek/bin/indexer –merge -c /usr/local/coreseek/dict/csft_mysql.conf –rotate

9、启动sphinx的守护进程searchd
$sudo /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/dict/csft_mysql.conf

centos 安装参考
http://www.cnblogs.com/huailian/archive/2013/06/26/2987231.html

安装mmseg的时候,./configure出现错误:config.status: error: cannot find input file: src/Makefile.in
网上的文章是:
aclocal
libtoolize –force (libtoolize –f)
automake –add-missing (automake –a)
autoconf
autoheader
make clean

括号中是我的版本有些属性差异
运行aclocal
warning: macro `AM_PROG_LIBTOOL’ not found in library centos
需要安装
yum install libtool

安装coreseek的时候报错:

checking for CFLAGS needed for pthreads... none
checking for LIBS needed for pthreads... -lpthread
checking for pthreads... found
checking for pthread_mutex_timedlock... yes
checking whether to compile with MySQL support... yes
checking for mysql_config... mysql_config
checking for mysql_real_connect... no
checking for mysql_real_connect... no
checking MySQL include files... configure: error: missing include files.

******************************************************************************
ERROR: cannot find MySQL include files.

Check that you do have MySQL include files installed.
The package name is typically ‘mysql-devel’.

If include files are installed on your system, but you are still getting
this message, you should do one of the following:

1) either specify includes location explicitly, using –with-mysql-includes;
2) or specify MySQL installation root location explicitly, using –with-mysql;
3) or make sure that the path to ‘mysql_config’ program is listed in
your PATH environment variable.

To disable MySQL support, use –without-mysql option.
******************************************************************************

然后尝试安装mysql-devel报错:

warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID 4520afa9: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY.art.txt

rpm -Uhv http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.4-1.el4.rf.i386.rpm
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-6

尼玛,疯了, 数据源问题,先不整这个了,去掉mysql支持安装下,最后终于装上了,但不支持mysql
换另一个服务器试下。。。
换了个服务器,安装成功。
查询乱码需要修改字符集
charset_type = utf-8

 

 

排序和分页:

java代码排序

public static void main(String[] args){
List l;
Object a;
SphinxClient clint=new SphinxClient();
try {
clint.SetSortMode(4, "id desc");
SphinxResult result= clint.Query("a");
System.out.println(result.matches);
for(int i=0;i<result.matches.length;i++){
SphinxMatch match= result.matches[i];
l=match.attrValues;
for(int j=0;j<l.size();j++){
a=l.get(j);
System.out.print(a+"|");

}
System.out.println("");
}
} catch (SphinxException e) {
e.printStackTrace();
}
}

 

php代码排序

require 'sphinxapi.php';
$s = new SphinxClient();
$s->SetServer('localhost',9312);
$s->SetSortMode( SPH_SORT_EXTENDED, "group_id DESC,@id DESC" );
$result = $s->Query('a');
echo json_encode($result);

java-ok php排序无效,为毛啊,api有问题么
换新api提示
searchd error: client version is higher than daemon version (client is v.1.30, daemon is v.1.23)
不匹配

卧槽,发现firefox json插件自动帮我排序,谢谢。我错怪api了。

然后测试下分页
$s->SetLimits(1,5,10000);
这样

基本使用上就没有啥问题了。

AngularJS 笔记

http://www.angularjs.cn/tag/AngularJS
看到了入门10,先记录下。。

十分强大,mvc齐全方面,做gurb的东西非常合适,
可以完全基于js的mvc开发网站,服务器端只需要开发json接口就可以了。
真的是太方便了。
问题是跟jquery用了同样的命名空间$, 虽然宣称两个方向不一样AngularJs很强大,但很多插件用不了了。。jquery的地位太重了。

看nio的感觉

看了这文:
http://blog.sina.com.cn/s/blog_81c2545a01011afh.html

感觉nio就是socket的优化升级版本,可以不阻塞。。大概是这意思。
总觉得跟jsm有点像,
但nio更属于socket那块的东西。
jms的apache mq直接处理的是消息,有点redis的意思

mysql存储引擎总结

主要就两个 myisam 和 innodb

myisam这里有详细的例子:
http://hfhwan.iteye.com/blog/375611
总结:
没有事物,表锁,读写互斥的锁,锁只能锁当前session,不影响其他用户,适合读多于写的数据。
存在一个系统变量 concurrent_insert 允许并发插入的设置

innodb的例子:
http://blog.chinaunix.net/uid-24111901-id-2627857.html
总结:
有事务,可以行锁,行锁前提是有索引否则又变成了表锁,而且锁上别的session就影响了。适合写入修改多的情况。
锁是对索引加的,两个查询相同索引的内容也会有影响。。。
涉及到钱的用这个

网站性能优化

总结下自己的简单看法。
最简单的方式,增加缓存,能让读取速度有明显的提升,程序改动也不大。

然后就是某些逻辑比较复杂的操作,就需要修改比较多的代码了。
用客户端的说法就是,主线程不能锁。
复杂的逻辑放队列中,用户不一定要立即出现结果,重要的是不阻塞。
数据库mysql读写分离。能提高性能。

有新的想法以后再补上。