分类目录归档:程序相关

C,Python,环境配置等

在nokia s60中使用python将收件箱中的内容导出保存为文本

在nokia s60中使用python将收件箱中的内容导出保存为文本

由于手机收到139邮箱的邮件信息比较多,想把它删除,但是又不能全选后全部删除
所以使用python写了一个简单的程序读取收件箱的内容,并将其存储到指定位置
并且根据联系人的手机号码分别创建文件

【程序说明】
此程序是根据s60提供的python API实现
其中用到了inbox和contacts

1、程序取收件箱的所有短信,
2、遍历,针对每条短信,
3、通过contacts对象取出联系人的电话,
4、将短信内容写入以联系人电话命名的txt文件中
5、删除短信

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
import inbox
from datetime import datetime
import time
import contacts
 
def get_mobile_number_by_name(db, name):
    found = db.find(name)
 
    #如果在联系人中可以找到,则返回号码,否则直接返回name
    mobile_number = found[0].find('mobile_number')[0].value if len(found)  > 0 else name
    return mobile_number
 
 
def write_mess(name, mess):
    filename = 'e:/data/inbox/' + name + '.txt'
    f = open(filename, 'a+')
    f.write(mess.encode('utf-8'))
    f.close()
 
inbox_obj = inbox.Inbox()
m = inbox_obj.sms_messages()
db = contacts.open()
 
k = 0
for i in m:
    k += 1
    name = inbox_obj.address(i)
    content = inbox_obj.content(i)
 
    #格式化时间
    format = '%Y-%m-%d %H:%M:%S'
    result = datetime.fromtimestamp(inbox_obj.time(i))
    ltime = result.strftime(format)
 
    #输出内容,调试用
    print name, content, ltime
    mobile_number = get_mobile_number_by_name(db, name)
 
    #对于
    if (mobile_number[0:6] != '106581'):
        write_mess(mobile_number, ltime + content + "\r\n")
 
    # 删除短信
    inbox_obj.delete(i)
 
    #一次执行10条,此处为测试用
    if k > 10:
        break

注意:此程序为个人所用,会删除收件箱内的所有短信,如果出现问题本人概不负责^_^!
此程序在nokia e63型号机器上测试通过,使用python1.9.7 for s60

EOF

MySQL执行过程

MySQL执行过程
在用户执行MySQL启动命令后,MySQL的初始化模块从配置文件中读取系统参数和命令行参数,并按照这些参数初始化整个系统,同时启动并初始化各存储引擎。
在系统初始化结束后,连接管理模块启动监听程序,准备接受客户端的请求。
当一个客户端通过网络连接到MySQL服务器时,连接管理模块会监听到这个请求,通过MySQL自己定义的协议,执行相关的底层任务后,连接管理模块将请求转发给线程管理;
线程管理会提供一个连接线程来处理这个连接,如果线程缓存(Thread Cache)中有空闲的连接线程,那么就会从线程缓存中直接取一个连接线程,否则新创建一个连接线程;

此时,连接线程会调用安全管理模块,进行授权检查,验证用户访问的合法性(用户是否有权访问数据库服务器,用户密码是否正确等)
然后,连接线程开始处理客户端请求所发送过来的命令(或者Query)
对于命令,不需要调用Parse就可以直接执行
对于Query,需要进行Query解析和转发模块的解析,在Query解析器进行分析,如果是一个SELECT类型的Query,则调用查询缓存(Query Cache),检查是否存在相同的查询语句,如果存在则直接将cache中的数据返回,如果不存在或者不是SELECT类型的Query,则将此Query返回解析器。在此时的解析器中,如果是SELECT类型,则它会将控制权交给查询优化器,如果是DML或DDL语句,则会交给表变更管理模块,如果是一些更新统计信息,检测,修复和整理类的Query,则会交给表变更管理模块
这些模块在收到Query解析与分发模块分发过来的请求后,首先会通过访问控制模块检查连接用户是否有访问目标表和目标字段的权限,如果有相关权限,就会调用表管理模块请求相应的表,并获取相应的锁。
在打开表后,根据表的相关meta信息,判断表的存储引擎类型和相关信息。
根据表的存储引擎类型,提交请求给存储引擎接口,调用对应的存储引擎实现模块进行处理。

以上只是正常的流程,在此过程中还有处理失败的返回,验证失败的返回等等。如果MySQL打开了bin-log选项并且操作过程中数据发生的变化,那么相应的模块在处理的过程中会调用日志处理模块,将相应的变更语句以更新事件的形式记录到相关参数的二进制日志文件。

以上内容摘抄自《MySQL性能调优与架构设计》

三取方格数

【问题描述】
背景 Background
JerryZhou同学经常改编习题给自己做。

这天,他又改编了一题。。。。。

【描述 Description】
设有N*N的方格图,我们将其中的某些方格填入正整数,

而其他的方格中放入0。
某人从图得左上角出发,可以向下走,也可以向右走,直到到达右下角。
在走过的路上,他取走了方格中的数。(取走后方格中数字变为0)
此人从左上角到右下角共走3次,试找出3条路径,使得取得的数总和最大。

【输入格式 Input Format】

第一行:N (4<=N<=20) 接下来一个N*N的矩阵,矩阵中每个元素不超过80,不小于0 【输出格式 Output Format】 一行,表示最大的总和。 【样例输入 Sample Input】 4 1 2 3 4 2 1 3 4 1 2 3 4 1 3 2 4 样例输出 Sample Output 39 注释 Hint 多进程DP 算法分析 可以用网络流来做 由于没做二取方格数;我一开始用一般DP;DP一次则把走过的路删去;3次DP; 只对了一组;看了题解后知道了我的算法虽然保证了3次DP的最优;但并不代表全局最优;是有反例的...... 其实可以用压缩数组的方法..因为每一阶段都只与上一阶段有关..滚动滚动数组..循环利用..不断再生..节约环保..{好像扯远了...-_-#}..不过节约时间起见..其实不用滚动数组也可以以0ms过掉..   做这条题时很深刻地感受得到..这条题是斜着划分阶段的..太伟大了啦..而且由于每一阶段中..横坐标与纵坐标有一种莫名的内在关系..所以为数组节约了不少维..{不过就算不节约..N<=20..也应该不会超..}.. 用sum[k,x,y,z]表示当走到第K步时,且三人横坐标分别为X,Y,Z时..所取数的最大值..由于每一个人都可以由2个方向推来..所以一共有2^3=8种状态.. sum[k,x,y,x]=max(sum[k,x,y,z],sum[k-1,x+f[i,1],y+f[i,2],z+f[i,3]]) 且由于第K步只能到达横坐标<=min(k,n)的点..所以其实循环时可以节约节约.. 注意:每一格只能取一次..数组的大小.. 【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <string.h>
#define max(a,b) a>b?a:b
int min(int a, int b)
{
 
       if (a < b)
              return a;
       else
              return b;
 
}
 
int f[41][21][21][21], a[21][21];
 
int main()
{
 
       int n, i , j, k, x1, x2, x3, temp, s1, s2, s3;
       scanf("%d", &n);
 
       for (i = 1; i <= n; i++)
       {
              for (j = 1; j <= n; j++)
                     scanf("%d", &a[i][j]);
 
       }
 
       memset(f, 0, sizeof(f));
       f[1][1][1][1] = a[1][1];
 
       for (k = 2; k <= n + n -1; k++)
       {
              for (x1 = 1; x1 <= min(k, n); x1++)
              {
 
                     for (x2 = 1; x2 <= min(k, n); x2++)
                     {
                            for (x3 = 1; x3 <= min(k, n); x3++)
                            {
                                   temp = a[k - x1 + 1][x1] + a[k - x2 + 1][x2] + a[k - x3 + 1][x3];
 
                                   if (x1 == x2)
                                          temp -= a[k - x1 + 1][x1];
 
                                   if (x1 == x3)
                                          temp -= a[k - x1 + 1][x1];
 
                                   if (x2 == x3)
                                          temp -= a[k - x2 + 1][x2];
 
                                   if (x1 == x2 && x1 == x3)
                                          temp += a[k - x1 + 1][x1];
 
                                   for (s1 = -1; s1 <= 0; s1++)
                                   {
                                          for (s2 = -1; s2 <= 0; s2++)
                                          {
                                                 for (s3 = -1; s3 <= 0; s3++)
                                                 {
                                                        f[k][x1][x2][x3] = max(f[k][x1][x2][x3], f[k - 1][x1 + s1][x2 + s2][x3 + s3] + temp);
                                                 }
                                          }
                                   }
                            }
                     }
              }
       }
 
       printf("%d\n", f[n + n - 1][n][n][n]);
       return 0;
}