Dec 24, 2008

Ubuntu 软件备份与清理

备份快速设置已下载的部分软件包,以便重装系统再次使用,免去重新下载的时间
tar cizvf backup.tar.gz /var/cache/apt/archives --exclude=/var/cache/apt/archives/partial/* --exclude=/var/cache/apt/archives/lock  重装系统,设置好源列表后,导入已备份的软件包即可,操作方法:sudo apt-get update && sudo tar xzvf backup.tar.gz -C /  清理 sudo apt-get clean  rm -rf ~/.thumbnails/fail/gnome-thumbnail-factory/*   

Dec 15, 2008

django 生成 下载 csv 文件

django生成并下载 csv文件:

import csv

download(request, qstr):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment;filename=%s.csv' %qstr
    writer = csv.writer(response)
    csvtitle = [u'姓名'.encode('GBK'), u'手机号'.encode('GBK'), u'商品名称'.encode('GBK'), u'售出数量'.encode('GBK'), u'单价(RMB)'.encode('GBK'), u'日期'.encode('GBK')]
    writer.writerow(csvtitle)
    return response

pyExcelerator django 创建可供下载的 excel


pyExcelerator 创建excel的代码大概如下:

from pyExcelerator import *
wb = Workbook()
ws = w.add_sheet('Sheet1')
ws.set_show_headers = 0
header = ['姓名', '手机号码', '商品名称', '售出数量', '单价(RMB)', '日期']
header = [x.decode('utf8') for x in header]
for i in range(len(header)):
    ws.write(0, i, header[i])
wb.save()

在django中提供下载:
from pyExcelerator import *

xlsname = 'test.xls'
w = Workbook()
ws = w.add_sheet('Sheet1')
ws.set_show_headers = 0
header = ['姓名', '手机号码', '商品名称', '售出数量', '单价(RMB)', '日期']
header = [x.decode('utf8') for x in header]
for i in range(len(header)):
    ws.write(0, i, header[i])
w.save(xlsname)

response = HttpResponse(mimetype='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment;filename=%s' %xlsname
response.write(w.savestream())
return response

注意,Workbook类中是没有savestream方法的,参考http://blog.csdn.net/kernelspirit/archive/2008/10/26/3147888.aspx

修改pyExcelerator代码

Workbook的savestream方法:
def savestream(self):
    import CompoundDoc

    doc = CompoundDoc.XlsDoc()
    return doc.savestream(self.get_biff_data())

CompoundDoc.XlsDoc的savestream方法:
def savestream(self, stream):
    # 1. Align stream on 0x1000 boundary (and therefore on sector boundary)
    padding = '\x00' * (0x1000 - (len(stream) % 0x1000))
    self.book_stream_len = len(stream) + len(padding)

    self.__build_directory()
    self.__build_sat()
    self.__build_header()

    s = ""
    s = s + str(self.header)
    s = s + str(self.packed_MSAT_1st)
    s = s + str(stream)
    s = s + str(padding)
    s = s + str(self.packed_MSAT_2nd)
    s = s + str(self.packed_SAT)
    s = s + str(self.dir_stream)
    return s

Mysql 批量删除数据表

#!/usr/bin/env python
#coding: utf-8
import MySQLdb

def droptables(tablename):
    remainTable = []
    db = MySQLdb.connect(host = 'localhost',
                        user = 'test',
                        passwd = 'test',
                        db = 'test')
    cursor = db.cursor()
    while True:
        cursor.execute('show tables like "%s%%"' % tablename)
        tables = cursor.fetchall()
        if len(tables) == 0:
            break
        for x in tables:
            try:
                cursor.execute('drop table %s' %x)
                db.commit()
            except:
                #print x
                continue
    cursor.close()
    db.close()

if __name__ == '__main__':
    tablename = 'droptest_'
    droptables(tablename)

Dec 4, 2008

Windows下的Apache Php Mysql 环境搭建

使用软件:
Apache、Php、Mysql

配置:
1. Apache:
编辑httpd.conf
DocumentRoot "E:/Program Files/Apache Group/web"

# < 和 字母之间没有空格
< Directory "E:/Program Files/Apache Group/web" >

LoadModule php5_module "E:/Program Files/Apache Group/PHP/php5apache2.dll"

DirectoryIndex index.html index.html.var index.htm index.php

AddDefaultCharset GB2312

AddType application/x-httpd-php .php .phtml .php3 .php4


2. Php:
把Php目录下的 php.ini-dist 重命名为 php.ini,然后拷贝到 %systemRoot% 下
复制Php目录下的 php5ts.dll,libmysql.dll 到 %systemRoot%\system32下

extension_dir = "E:\Program Files\Apache Group\PHP\ext"

extension=php_dba.dll
extension=php_dbase.dll
extension=php_gd2.dll
extension=php_imap.dll
extension=php_mysql.dll
extension=php_mysqli.dll

C# 操作 Excel

// 连接字符串
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;";
strConn += "Extended Properties='Excel 8.0;HDR=No; IMEX=1;';";
strConn += "data source=" + xlsPath;

// 查询语句
string cmdText = "SELECT * FROM [Sheet1$]";

OleDbConnection connDB = new OleDbConnection(strConn);
OleDbCommand cmdDB = new OleDbCommand(cmdText, connDB);
OleDbDataReader drdr;

// 打开Excel表格
connDB.Open();

// 执行 sql语句
drdr = cmdDB.ExecuteReader();


if(drdr.Read())
{
..............

drdr.GetValue(i)

...............

}

把文本文件中的数据导入 MS SQL Server 2005

在查询分析器中执行下面的命令:
use NumberLocation;
BULK INSERT Fixed From 'E:\code\DB\fixedbook-sort.txt' With
(FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')

其中 use 是先进入 数据库 NumberLocation
*.txt 是要导入的文本文件
FIELDTERMINATOR 是字段分隔符
ROWTERMINATOR 行分隔符

MS SQL Server 函数及运算

1. 改变列标题
=, AS
SELECT 'database' = db_name();
SELECT id AS UserId FROM student;

2. 增加一列
SELECT au_fname, au_lname, 'Identification Number: ', au_id FROM
authors;

3. 算术运算 (+、-、*、/、%)
%只能用于 INT, SMALLINT, TINYINT
SELECT title, price, 'price -3' = price -3

4. 数学函数 (ABS, SIN, COS, TAN, PI(), RAND(), SIGN(), SQRT(), SQUARE(),
CEILING(38/3), EXP(2.0), LOG(10) ...)
SELECT LOG(10)
SELECT 69/8

5. 字符串函数
SELECT ascii('abc')
SELECT 'SQL' + 'Server' + '2005'
SELECT char(36)
SELECT charindex('Server', 'SQL Server 2005')
SELECT lower('ABC')
SELECT upper('cde')
SELECT replicate('MSSQL-', 10)
SELECT substring('1234567890', 5, 3)
SELECT len('hello world')
SELECT stuff('1234567890', 3, 2, '-abcdefghigk-')

6. 日期和时间函数 (GETDATE(), DATEADD())
SELECT GETDATE()

7. 系统函数 (DB_NAME(), USER_NAME(), SUSER_NAME(), ISNUMERIC(), ISDATE(), )
ISNUMERIC(title_id):如果是数字类型,返回1;如果是日期、字符串或者
其他数据类型,返回0

8. 数据类型强制转换
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'

C# 从Web网站下载文件

// 给出文件的url和文件下载后的文件绝对路径
// 从服务器下载文件
// 成功返回 true,否则返回false
// using System.Net;

private bool DownloadFile(string url, string strfile)
{
HttpWebRequest hwr = null;
Stream ns = null;

FileStream fs = new FileStream(strfile, FileMode.Create);
int nReadSize = 0;
byte[] abytes = new byte[1025];

try
{
hwr = (HttpWebRequest)WebRequest.Create(url);
ns = hwr.GetResponse().GetResponseStream();
nReadSize = ns.Read(abytes, 0, 1024);
while (nReadSize > 0)
{
fs.Write(abytes, 0, nReadSize);
nReadSize = ns.Read(abytes, 0, 1024);
}
fs.Close();
ns.Close();
}
catch (Exception eer)
{
MessageBox.Show(eer.Message);
fs.Close();
File.Delete(strfile);
return false;
}

return true;
}

Error: The INF file contains Unicode characters that could not be converted correctly to ANSI

用vs 2005 制作wince cab安装包时,vs 2005提示:
Error: The INF file contains Unicode characters that could not be
converted correctly to ANSI

解决方法:
1、在部署的安装包项目的属性中,一定要把"manufacturer"(制造商)项填写成
英文或数字,不能为中文。此时的"属性"不是选中项目后右键中的属性,而中选中
项目后,按F4键出现的发生窗口。
把其中的manufacturer项的值改为非中文。

2、因为制作的安装包程序有"快捷方式",所以在"文件系统"窗口中把"快捷方式"
的名称也要改为非中文。

3、注意将程序生成的EXE的文件名也要改成英文的

文件被数字签名策略拒绝(File was rejected by digital signature policy)

安装 Windows Mobile 6 Professional SDK Refresh.msi ,报错 "文件被数字签
名策略拒绝(File was rejected by digital signature policy) "

这个错误产生的原因据说是:"当运行安装程序时,Windows Installer 会验证程序
包的数字签名以确保程序包没有被篡改。这时整个程序包被加载到内存中,计算机
必须拥有程序包大小所需的足够连续内存。如果计算机没有足够的连续内存,则会
出现错误。由于出现错误,Windows Installer 将无法验证是否对该程序包正确地
进行了签名。"

解决:
修改
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers
注册表项下面的 PolicyScope 的注册表值,将值从0 改为 1

VS 2005 没有找到MFC80UD.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题

"Visual Studio 2005用向导生成的项目,在运行时可能会遇到找不到MFC80UD.dll
的问题。

解决方法:
通过修改项目属性->清单工具->输入输出,把"嵌入清单"选"否",.然后编译、链
接、运行即可

使用 Grub For Dos

以前大多用WinGrub 也用过两次Grub4dos

WinGrub容 易,有GUI自己设置一下就OK

Grub4dos其 实也很容易

  解压
  放系统盘
  把grldr拷贝到系统盘根目录
  修改boot.ini ,最后一行添加:
  C:\grldr="Grub4Dos"

Ubuntu 8.04 LAMP 搭建

软件安装:
sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server
libapache2-mod-auth-mysql libapache2-mod-auth-mysql

设置域名,编辑/etc/apache2/httpd.conf 添加
ServerName ox0spy.org

匹配ip地址的python正则表达式

pattern =
'^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$'

Python 文件操作

1. 常规操作 -file 类
常用于文件读写操作
常用方法: file, open, read, readline(), readlines(),write(),
writelines(), seek(), tell(),flush(), close()
属性:name, mode, isatty, closed

2. 获取文件信息:os, stat, time
os.stat()
os.lstat()

stat模块获取详细文件信息

fileStats = os.stat(filename)
fileInfo = {
'Size' : fileStats [ stat.ST_SIZE ],
'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ),
'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ),
'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ),
'Mode' : fileStats [ stat.ST_MODE ]
}

3. 通过os.path获取一些文件信息
文件是否存在、是否是一个目录、...
获取文件大小、创建、访问、修改时间

4. 目录操作
os.listdir(dir)
os.mkdir(dir)
os.rmdir(dir)
os.mkdirs(dirs) # mkdir -p
os.rmdirs(dirs) # rm -r

5. 对不同类型的文件进行操作:fnmatch
import os, fnmatch

for filename in os.listdir('.'):
if fnmatch.fnmatch(filename, '*.py'):
print open(filename).read()
elif fnmatch.fnmatch(filename, '*.sh'):
print filename
elif fnmatch.fnmatch(filename, '?.txt'):
print 'Text file :', filename

*代表匹配所有字符,?匹配一个任意字符

在"fnmatch"模块,我们可以创建正则表达式来应用,只要通过 "re" 模块:
import fnmatch
import os
import re
filePattern = fnmatch.translate ( '*.txt' )
for fileName in os.listdir ( '/' ):
if re.match ( filePattern, fileName ):
print 'Text file.'


如果想从一个目录下搜索一种类型的所有文件,使用glob:
glob(pathname)
Return a list of paths matching a pathname pattern.

#!/usr/bin/env python
import glob
for filename in glob.glob('[0-9].txt'):print filename


6. 序列化数据
pickle, cpickle

#!/usr/bin/env python
import pickle
fileHandle = open('pickleFile.txt', 'w')
thisList = ['This', 2, 'is', 1, 'a', 'test']
pickle.dump(thisList, fileHandle)
fileHandle.close()

解序列
#!/usr/bin/env python
import pickle
fileHandle = open('pickleFile.txt', 'r')
thisList = pickle.load(fileHandle)
fileHandle.close()

7. 内存文件:StringIO, cStringIO

a small tip : print >> f, a_string 等价于 f.write(a_string + '\n')

windows 命令行、批处理资源

http://www.ss64.com/nt/
http://www.sysinternals.com/
http://www.nirsoft.net/
http://www.diamondcs.com.au/

Django manage.py 能做什么

创建项目
django-admin startproject projectName

在创建的项目下有:__init__.py, manage.py, settings.py, urls.py

下面主要看看manage.py 的用途:
manage.py 提供一些简单的管理功能,有:
1) 创建应用
./manage.py startapp appName

2) 验证models.py 书写是否正确
./manage.py validate

3) 根据models.py打印用于创建表的sql 语句
./manage.py sqlall dbName

4) 根据models.py创建表
./manage.py syncdb

5) ./manage.py shell 类似于 执行 python

6) ./manager.py dbshell 类似于 mysql -u username -p (其中username 是
settings.py 中设置的)

python md5

import md5
hash = md5.new()
hash.update('test')
hash.hexdigest()

调用Django 日期控件

<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="/media/js/core.js"></script>
<script type="text/javascript" src="/media/js/calendar.js"></script>
<script type="text/javascript"
src="/media/js/admin/DateTimeShortcuts.js"></script>

<input name="date" value="{%now "Y-m-d"%}" class="vDateField" type="text"
id="query_date" size="10" />

Dec 3, 2008

校内网 相册 批量 下载

校内网 相册 批量下载

python 练手
环境ubuntu 8.04
windows 用户应该会产生乱码,可以自己在程序中几个关键位置加上
.decode('UTF-8').encode('GBK')

功能:
1. 下载校内指定用户的全部相册
2. 下载指定用户的某一个指定相册



============== 很傻,很天真的分割线 ================


代码:

http://ox0spy.googlepages.com/xiaonei.py

Dec 2, 2008

苏格拉底与失恋者的对话

失恋者:"我失恋了。"

苏格拉底:"哦,这很正常。如果失恋了没有悲伤,恋爱大概也就没有什么味道
了。可是,年轻人,我怎么发现你对失恋的投入甚至比你对恋爱的投入还要倾心呢?"

失恋者:"到手的葡萄给丢了,这份遗憾,这份失落,您非个中人,怎知其中的酸
楚啊。"

苏格拉底:"丢了就丢了,何不继续向前走去,鲜美的葡萄还有很多。"

失恋者:"我要等到海枯石烂,直到她回心转意向我走来。"

苏格拉底:"但这一天也许永远不会到来。"

失恋者:"那我就用自杀来表示我的诚心。"

苏格拉底:"如果这样,你不但失去了你的恋人,同时还失去了你自己,你会蒙受
双倍的损失。"

失恋者:"您说我该怎么办?我真的很爱她。"

苏格拉底:"真的很爱她?那你当然希望你所爱的人幸福?"

失恋者:"那是自然。"

苏格拉底:"如果她认为离开你是一种幸福呢?"

失恋者:"不会的!她曾经跟我说,只有跟我在一起的时候,她才感到幸福!"

苏格拉底:"那是曾经,是过去,可她现在并不这么认为。"

失恋者:"这就是说,她一直在骗我?"

苏格拉底:"不,她一直对你很忠诚的了。当她爱你的时候,她和你在一起,现在
她不爱你,她就离去了,世界上再也没有比这更大的忠诚。如果她不再爱你,却要
装着对你很有感情,甚至跟你结婚、生子,那才是真正的欺骗呢。"

失恋者:"可是,她现在不爱我了,我却还苦苦地爱着她,这是多么不公平啊!"

苏格拉底:"的确不公平,我是说你对所爱的那个人不公平。本来,爱她是你的权
利,但爱不爱你则是她的权利,而你想在自己行使权利的时候剥夺别人行使权利的
自由,这是何等的不公平!"

失恋者:"依您的说法,这一切倒成了我的错?"

苏格拉底:"是的,从一开始你就犯错。如果你能给她带来幸福,她是不会从你的
生活中离开的,要知道,没有人会逃避幸福。"

失恋者:"可她连机会都不给我,您说可恶不可恶?"

苏格拉底:"当然可恶。好在你现在已经摆脱了这个可恶的人,你应该感到高兴,
孩子。"

失恋者:"高兴?怎么可能呢,不过怎么说,我是被人给抛弃了。"

苏格拉底:"时间会抚平你心灵的创伤。"

失恋者:"但愿我也有这一天,可我第一步应该从哪里做起呢?"

苏格拉底:"去感谢那个抛弃你的人,为她祝福。"

失恋者:"为什么?"

苏格拉底:"因为她给了你忠诚,给了你寻找幸福的新的机会。"

说完,苏格拉走了。

----------
*祝你幸福*
----------

2008 11 29
给家里打个电话,我妈一接电话就说你是不是病了

然后和我妹聊了很久

2008 11 30

找了点做老师的感觉
(王亮, 温锴) 宁大 10:30

2008 12 1

勾起宋泽的伤心事,内疚啊,还好早上说不辞职了
给Yang打电话,好像手机没在身边

给水水打,他愣要我再给xx打个电话

贺伟也是,聊了n久,后来说俺一根经,后来和朋友继续喝酒
(王亮, 杜娜, 毛毛, 茄哥, 唐莉) 紫园 良田路 0:30