Jimmygao 发布的文章

下载源代码

现在都不用svn了,学学git吧

git clone git://source.ffmpeg.org/ffmpeg.git

configure

在执行./configure的时候,可能会提示没有安装yasm,那么执行”yum install -y yasm“即可。

yum install -y yasm
./configure

make

执行make,就是编译整个ffmpeg项目了,会生成一些二进制文件,例如:ffplay、ffserver、ffmpeg、ffprobe!

makeinstall

执行make install时候,会把编译生成的.a归档复制到/usr/local/lib下!

mysql默认是禁用多表删除语句的,之前的做法都是先把条件缓存,然后逐条执行

delete from a where a.xxx in (123123,123123);
delete from b where b.xxxx in (123123,123123);

如果写成下面这种绝对是错误的!

delete * from a,b where xxxx in  ...

今天突然发现原来mysql也是可以一条sql删除多表数据的,下面来分析一下 多表删除其实思路还是比较简单的,首先条件就是多个表(一般就两个表,织梦的文章信息存在3个表里,删除起来很麻烦)有关联 其次,删除条件一般都是由关联的这一行组成的,也可能不是,没有关系,我们先写一个试试:

DELETE p.*, pp.* 
FROM pw_threads p, pw_tmsgs pp 
WHERE p.tid = pp.tid 
AND p.tid in(SELECT tid FROM pw_threads WHERE postdate>UNIX_TIMESTAMP('2014-06-12 00:00:00') and fid=136)

逻辑都通着,但是会报错

You can't specify target table 'A' for update in FROM clause 原因是: In general, you cannot modify a table and select from the same table in a subquery.

所以你需要把子查询改为临时表中,所以最终的查询就是

DELETE p.*, pp.* 
FROM pw_threads p, pw_tmsgs pp 
WHERE p.tid = pp.tid 
AND p.tid in(SELECT tmp.tid FROM (SELECT * FROM pw_threads) as tmp WHERE tmp.postdate>UNIX_TIMESTAMP('2014-06-12 00:00:00') and tmp.fid=136)

##下载

项目地址: https://github.com/goagent/goagent

APP配置

到https://appengine.google.com/新建一个或多个app,注意记录下app的ID!

一个appid每天只有1G的流量

上传服务器端脚本

解压至某文件夹,此处假设为d:\app\goagent318\,然后进去server,运行uploader.bat批处理

按提示输入信息即可,可能会很慢。

多个appid请用’|’隔开,即回车键上面那个

貌似现在一个帐号能创建25个app,每天25G流量,够用了吧?

只要在服务器上部署成功,以后就不用管server文件夹了 :-D ,除非你又要添加新的app才会用到!

此步骤只是把goagent的服务器端部署到你的在线APP上,等待你去调用他,所以下一步就是配置本地的文件,以实现对接。

部署成功的标志是看到这里的https://appengine.google.com/应用都在running即可!

本地配置

难点在这一步,废话比较多,我就粘贴一下官网的教程吧

编辑local\proxy.ini,把其中appid = goagent中的goagent 改成你之前申请的应用的appid (用windows的记事本也可以) 如果要使用多个appid,appid之间用|隔开,如:appid1|appid2|appid3,每个appid必须确认上传成功才能使用 格式 如下:

[gae] 
appid = app-0|app-1|app-3|app-4

运行local下的goagent.exe,测试一下配置是否成功!推荐迅雷的代理测试

高级技巧

修改goagent端口

你可以修改端口以达到分流的作用,比如,使用默认8087端口上网用,再建一个使用8089端口的goagent,然后使用这个端口下载东西或者什么的,只要端口不冲突,你就可以建立多个代理,以达到分流的目的!

怎么修改呢?

先结束goagent进程,复制一份出来命名goagent318-d,原来的那个叫goagent318-w,d means download,w means web! 还是修改那个proxy.ini,找到[listen],应该在第一行,然后修改port = 8087为port = 8089,端口就改好了 讲appid按需分配给各个端口对应的程序,如我有十个app,给迅雷分5个,web分4个,再留一个备用!

在chrome中使用goagent

这个要用到SwitchySharp,怎么使用,自己百度吧!

goagent的GUI版本

这个挺不错的,方便小白使用,推荐下载绿色版!

围观地址:https://goagent.codeplex.com/

打造自己的网页代理

这个比较酷!不适用google,而是使用自己的网站做代理!只要你的主机在香港或者美国,就可以用PHP模拟成goagent的server端,然后就可以翻越GFW了

设置方法请参考

http://www.blogfeng.com/goagent-space-into-a-proxy-server-for-php.html

2015年1月12日更新:

  1. 更新项目地址
  2. fqrouter2已经停止更新
  3. 更好的翻墙方案 shadowsocks

欢迎吐槽!

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os,time,shutil
path = os.getcwd()
target_dir = []
cal = []
target_dir.append('/var/lib/mysql/log/')
target_dir.append('/newlogs/')
target_dir.append('/oldlogs/')
#初始化删除文件名
del_ext = ['frm','MYD','MYI']
#你要保留几天
days_before = 5
#初始化删除日期
for x in xrange(days_before+1,days_before+30):
	cal.append(time.strftime('%Y_%m_%d',time.localtime(time.time() - x*24*3600)))
#初始化删除文件名,使用笛卡尔积!
fl = map('.'.join, [[x,y] for x in cal for y in del_ext])

#以日期命名的文件夹
cal = []
for x in xrange(days_before+1,days_before+30):
	cal.append(time.strftime('%Y-%m-%d',time.localtime(time.time() - x*24*3600)))
fl += cal
#获取文件扩展名
def get_ext(filename):
	return filename.split('.')[-1]



for dirs in target_dir:
	#files = [i for i in box_list if(get_ext(i) in del_ext)]  #按扩展名筛选文件
	#修改当前工作目录
	i = 0
	print 'opening -> ' + dirs
	#判断文件夹存在
	if os.path.exists(dirs):
		#切换目录
		os.chdir(dirs)
		for files in fl:
			#判断文件夹或文件
			if(os.path.isfile(str(files))):
				i += 1
				try:
					os.remove(files)
					print files + '  deleted'
				except:
					print 'error occurs while deleting file'
			elif(os.path.isdir(str(files))):
				i += 1
				try:
				#shutil.rmtree删除非空文件夹
					shutil.rmtree(files)
					print files + '  deleted'
				except:
					print 'error occurs while deleting file'
	else:
		print 'Error on opening ' + dirs
	if i:
		print str(i) + ' files deleted'
	else:
		print 'nothing to remove'
	print 'leaving -> ' + dirs
	print '\n'

工作需要必须使用mstsc(Microsoft terminal services client)连接生产服务器,之前因为不知什么原因,mstsc开始很卡,所以用了teamviewer一段时间,感觉还是不如mstsc稳定

但是win7的mstsc问题多多,一个一个说吧

总是新建进程

每次使用保存好的密码登陆后总是和上一次显示的桌面环境不一样,就好像注销了一样,每次都要在任务管理器里切换一回,很是麻烦,原因是mstsc新建了一个进程,导致了操作环境的初始化,按照老高的方法试试:

  1. 运行mstsc时在后面加上 /admin,原理是直接接管控制台

     mstsc /admin
    
  2. 在目标机器上设置一下 这是由于远程桌面允许一个用户可以有多个远程会话,如果不想有这个效果,可以在目标机器运行gpedit.msc,然后进入组策略-计算机设置-管理模板-终端服务,设置限制终端服务用户到一个远程会话为启用即可。

3.开始-管理工具-终端服务配制-设置

连接 - RDP-TCP - 网卡 - 2个链接 服务器设置 - 限制用户使用一个会话 开始---控制面板---授权---选择“每设备或每用户”---否---确定

连接后操作很卡

原因在于从vista开始,微软在TCP/IP协议栈里新加了一个叫做Window Auto-Tuning的功能。这个功能本身的目的是为了让操作系统根据网络的实时性能(比如响应时间)来动态调整网络上传输的数据窗口的大小,从而达到实时优化网络性能的目的。但是,在某种情况下,这个功能反而会使远程桌面的响应变的非常的慢。解决办法如下:

开始-运行-输入

netsh interface tcp set global autotuninglevel=disabled

端口修改

端口3389表示亚历山大!换一个自己喜欢的数字吧,嫌麻烦的TX可以直接百度 mstsc端口修改工具

  1. 打开“开始→运行”,输入"regedit",打开注册表,进入以下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp, 修改PortNamber值3389为3390。
  2. 打开[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro1Set\Control\Tenninal Server\WinStations\RDP\Tcp, 将PortNumber值3389为3390。
  3. 修改完毕,重启以下服务(控制面板中的服务中): Microsoft Remote Desktop Connection 和 Remote Desktop Services UserMode Port Redirector
  4. 登陆方式[IP:3390] 部分转自网络!

有一些是拷的,自己加了一点,大家凑活看吧

#-*- coding:utf-8 -*-

import time
import datetime

#in python is float while in php is int
currenttime = 1402244512.48
print time.time()
print time.ctime()
print time.ctime(currenttime)
print time.localtime()
print type(time.localtime())
print time.strftime('%Y-%m-%d',time.localtime(time.time()-3600*24))
print time.strftime('%Y-%m-%d %H:%I:%S',time.localtime(time.time()))
print time.strftime('%Y-%m-%d %H:%I:%S',time.gmtime(time.time()))

currentstr = '2013-08-21 17:05:01'
print time.strptime(currentstr,'%Y-%m-%d %H:%I:%S')

'''
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
'''

'''
python time,datetime,string转换
http://hi.baidu.com/_yuan0518/item/f5bb48c39fad35dcee183bbe
'''
#把datetime转成字符串  
def datetime_toString(dt):  
    return dt.strftime("%Y-%m-%d-%H")  

#把字符串转成datetime  
def string_toDatetime(string):  
    return datetime.strptime(string, "%Y-%m-%d-%H")  

#把字符串转成时间戳形式  
def string_toTimestamp(strTime):  
    return time.mktime(string_toDatetime(strTime).timetuple())  

#把时间戳转成字符串形式  
def timestamp_toString(stamp):  
    return time.strftime("%Y-%m-%d-%H", time.localtime(stamp))  

#把datetime类型转外时间戳形式  
def datetime_toTimestamp(dateTim):  
    return time.mktime(dateTim.timetuple())