VB/VBA/VBScript根据出生日期计算年龄函数ComputeAge

有时需要处理一些Excel,这些Excel规定的日期格式是类似2012.02.26这样的形式,当我用到VBA或者VBScript处理这些日期时就很难识别并转换类似的日期格式。一般做法都是通过Split按点对其进行拆分。如果要求计算精确到年的话还好办,直接拿今年的年去减出生年就可以了,比如出生日期是1976.01,那么直接用今年2012 - 1976就得出按年算的年龄,有时可能会要求苛刻一点,比如说要求精确到月,呵呵,再Split,再判断,颇显麻烦,今天终于静下心来搞个统一的函数ComputeAge来处理这些问题,当然要能够识别我目前遇到的形如1972.01、1972.01.02、1972.1.2、72.01、72.01.02、19720102、197201日期格式,计算年龄嘛,我就让这个函数支持精确到日吧(可能用不上)。

单单是计算年龄,可能还不能满足我的胃口,当要统计类似1986年前出生的人的时候,我还要将1986转换一次,感觉麻烦,于是给ComputeAge添加了个比较时间的功能,比较的结果按照标准的-1、0、1进行返回。

比较特别的是这个函数还有个附加的功能就是把形如1972.01、1972.01.02、1972.1.2、72.01、72.01.02、19720102、197201日期格式转换为标准的脚本内置日期变量Date,好啦,说了这么多,函数在这里,用法注释已经写得详细了:

Posted in:
  • VBScript/JavaScript/Python
  • 系统应用程序开发
Tagged
  • vba
  • vbscript
  • vb

更改Zend Studio/Eclipse的制表Tab缩进为4个空格缩进

今天重装了一下Zend Studio,在编码时发现回车缩进是tab制表符,颇为不爽,记得很久很久以前哥写代码是不缩进的,后来经老师提醒,改用tab缩进,一直这样编码了很长时间。后来看到一篇介绍代码格式的文章才知道各类文本编辑器对于tab制表符的长度规定不一样,这就导致同样缩进的代码在不同系统或者编辑器上缩进长短不一,影响代码风格的一致性。所以推荐用空格取代tab,一般取4个空格,这样代码就美观多了。

一般我都是将IDE或者其他代码编辑器的配置改成tab键按4个空格缩进。Zend Studio我搞个半天竟然没找到能够配置的地方,经过网上某童鞋提醒终于搞定这个问题,首先是Window - Preferences打开Preferences配置对话框:

Posted in:
  • 计算机应用及维护
  • Windows系统
Tagged
  • 主题与皮肤
  • Eclipse

解决WordPress中文附件attachment以及tag URL导致的404找不到页面问题

之前从Typecho转换到WordPress的,结果使用网上的转换程序勉强转换成功,没想到却带来了一堆后遗症,其中比较明显的就是中文url导致的404找不到页面的问题。

其实搜索“Wordpress 中文 tag 404”关键字词就可以找到大量关于这类问题以及解决方案的信息,这些解决方案无非是要求修改WordPress的wp-include/classes.php(3.1之前版本)或wp-include/class-wp.php(3.1+之后版本)的源代码,增加UTF-8与GBK的一个转换;或是修改rewrite.php改变重写规则。这些我没有去尝试,我感觉修改官方代码的做法不是很妥当的,即使修改了,以后升级什么的,原先修改的内容仍然会被替换,或者修改有可能会导致新的问题等等,所以我不建议修改官方源代码。

如果默认官方表前缀wp_的话,导致这个问题的中文tag在MySQL的位置为表wp_terms的列slug,中文附件attachment所在MySQL的位置为表wp_posts的列post_name。这次转换前我尝试着发布了一篇带有中文tag或者attachment中文名称的文章,并且访问这个tag或者附件正常,然后再查看MySQL数据库。发现其中attachment的post_name以及tag所在的slug均被改写成类似%E8%A7%A3%E6%9E%90这样的字符串,其实这类字符串是符合URL编码标准的,一般我们的输入的字符串在提交URL前均会被编码成形如这样的编码;再看看出问题的编码形式,直接是中文未经过任何编码,所以需要访问这类资源需要进行编码转换才能正常访问,否则就会出现404找不到页面的问题。

其实我们可以通过PHP内置的urlencode对attachment的post_name以及tag所在的slug进行一次编码然后再写入数据库,以避免出现这类问题,这里我对所有附件attachment的post_name进行了一次urlenocde编码,代码如下 (测试前请备份数据库)

Posted in:
  • 网络编程与数据库
  • Web开发及相关
Tagged
  • php
  • url解析
  • wordpress

判断浏览器客户端是否禁用JavaScript脚本

主流现代浏览器默认都不会禁用js脚本的,但是也有例外,除了用户主动禁用脚本外,还有就是维护模式下的安全浏览,这样会禁用页面上的js脚本。

禁用了脚本会发生什么?哦,JQuery无法使用?准确的说是所有和JavaScript有关的都无法使用。包括你上面曾经引以为豪的特效,比如AJAX、图像延时加载以及本地脚本存储等等。是不是感觉像是回到了原始社会,严重一点可能感觉像是过着盲人的生活,呵呵,不过有一点可以肯定的是未开启脚本的这部分用户少之又少,我们可以抛弃他们。你说什么?抛弃我们的客户?这怎么可以?别急,下面我要介绍的就是针对这部分用户的判断,以便于我们能够优雅的降级页面渲染来优化用户体验。

1. 使用noscript标签

这个标签貌似很久就有了,我记得第一次学习HTML的时候就已经在那儿了。不过那时很少用,见得最多的例子是用在统计代码上面,比如有下面的代码:

<script src="http://example.com/stat.js"></script>
<noscript>
  <img src="http://example.com/stat_pic.gif"
      border="0" height="0" width="0" />
</noscript>
Posted in:
  • 前端开发与用户体验
  • Web开发及相关
Tagged
  • 浏览器兼容
  • javascript
  • 用户体验
  • css
  • html5

Linux/VPS下定时通过电子邮件(Email)发送文件及MySQL数据库备份

最近Linux搞得比较多,之前有个精简版的VPS服务器,今天又拿过来测试,主要是定期为上面的网站做个备份,大概看了一下,需要备份的分别有两个地方:1. 网站的主目录;2. MySQL数据库。于是想搞个定时发送备份文件到指定邮箱的做法。Linux刚上手,也不是很熟练,参考了一些命令,以及前辈们的备份做法,硬着头皮写了Bash Shell脚本,初步测试下来基本满足了要求,在这里分享给大家参考,不过 建议大家使用前在实验环境下测试确保正常 ,如果因为潜在问题造成损失我可不负责哦:-)当然对于我这种新手而言,这样的脚本难免会有Bug,希望高手不吝指出:

#!/bin/bash

# Author: wangye
# For more information please visit:
# http://wangye.org/
# 请在使用本脚本前做好测试工作,脚本功能仅供参考,
# 对于可能的潜在问题造成损失,本人不承担责任。

MYSQL_USERNAME="mysql-username"
MYSQL_PASSWORD="mysql-password"

# 下面这行指示接收备份文件的电子邮件地址
BACKUP_RECEVIER="[email protected]"
BACKUP_FILENAME="/var/sample-site" # 需要备份的目录
BACKUP_DBNAME="sample" # 需要备份的数据库名称
BACKUP_PREFIX="backup_" # 备份文件的前缀

# 下面一些命令路径可以通过whereis获取
MYSQLDUMP_PATH="/usr/bin" # mysqldump 命令所在的路径
TARCOMPRESSOR_PATH="/bin" # tar 命令所在的路径
RM_PATH="/bin" # rm 命令所在的路径
MUTTMAIL_PATH="/usr/bin" # mutt 命令所在的路径
TEMP_PATH="/tmp" # 临时目录

# 产生临时名称形如 backup_20120221 名称
make_backup_name() {
    TEMPNAME=${BACKUP_PREFIX}$(date +"%Y%m%d")
}

# 产生临时备份目录
make_backup_dir() {
    make_backup_name
    TEMPDIR=${TEMP_PATH}/$?
    mkdir -m 777 -p $TEMPDIR
}

backup_files() {
    ${TARCOMPRESSOR_PATH}/tar -zcvf \
        ${TEMP_PATH}/${TEMPNAME}.tar.gz ${BACKUP_FILENAME}
}

backup_databases() {
    local EXPORTDIR=$1
    ${MYSQLDUMP_PATH}/mysqldump -u${MYSQL_USERNAME} \
      -p${MYSQL_PASSWORD} \
      ${BACKUP_DBNAME} >${EXPORTDIR}/${BACKUP_DBNAME}.sql

    ${TARCOMPRESSOR_PATH}/tar -zcvf \
      ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz ${EXPORTDIR}
}

send_byemail() {
    echo "**IMPORTANT BACKUP** Hi! :-)\n\n$(uname -a)"| \
        $MUTTMAIL_PATH/mutt -s "** System Backup$(date +%Y-%m-%d)" \
            -a ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz \
             ${TEMP_PATH}/${TEMPNAME}.tar.gz -- \
            ${BACKUP_RECEVIER}
}

# 清除产生的临时文件(使用了rm -rf怕怕中,不过目标路径正确就OK啦)
cleanup() {
    $RM_PATH/rm -rf $TEMPDIR
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}.tar.gz
}

main() {
   make_backup_dir
   backup_databases $TEMPDIR
   backup_files
   send_byemail
   cleanup
}

main

exit 0
Posted in:
  • 计算机应用及维护
  • VBScript/JavaScript/Python
  • Unix/Linux/BSD系统
  • 系统应用程序开发
Tagged
  • mysql
  • Linux
  • vps
  • Linux命令
  • 备份与恢复

解决打开Excel自动弹出Book1.xls的VNN.R9 XL4Test5宏脚本病毒

由于工作上要用到VBA宏,为了确保自己编写的未签名宏脚本能够顺利执行,于是将单位那台破机子的宏安全性设置为低(打开Excel直接执行宏脚本)。没想到今天在Excel上中招了。

打开别人传过来的Excel,接下来异常出现了,先是打开一个存在的Excel时会自动跳出一个新建的Book1.xls工作簿,并且打开的Excel状态始终停留在最后一张Sheet表上。如果这时再打开一份Excel,会提示Book1正处于锁定状态,“VNN.R9”正在编辑类似的消息,而且无论你是否改动表,关闭时都会提醒是否保存,选择后才正常关闭随后Book1.xls也自动关闭。 按照网上的办法尝试着清除下面路径目录下的文件:

Book1正处于锁定状态,“VNN.R9”正在编辑
C:\Program Files\Microsoft Office\OFFICE11\STARTUP
C:\Program Files\Microsoft Office\OFFICE11\XLSTART
C:\Documents and Settings\用户名\Application Data\Microsoft\Excel\XLSTART
Posted in:
  • 计算机应用及维护
  • Windows系统
Tagged
  • excel
  • 木马病毒

使用MySQL Workbench CE管理MySQL数据库

之前我写过一篇文章 《使用HeidiSQL管理MySQL数据库》 提及在Windows下可视化管理MySQL的解决方案之一HeidiSQL,确实是个非常不错的软件,可能有些童鞋比如像我仍然不习惯其强大而又复杂的操作界面,可能需要的是一款类似于SQL Server查询分析器或者SQL Server Management Studio这样的集成管理环境,不需要太过于复杂,大部分操作可以手动用SQL语句完成。今天介绍的MySQL Workbench CE就是这么一款软件,这款软件还是由MySQL官方出品的,所以还是非常值得信赖的。

这款软件的界面简单,类似于微软出品的数据库管理软件,不像HeidiSQL那样界面复杂。最值得一提的是其带有SQL语句输入,语法高亮以及语法自动侦错功能,这个对于我这样的新手输入SQL语句简直太方便啦。另外这款数据库管理器还支持开启多选项卡同时管理多个数据库实例,非常好用。

好啦,不多说了,具体还是大家下载下来亲自体验吧:-)

软件主页: http://mysql.com/products/workbench/
下载地址: http://www.mysql.com/downloads/workbench/

Posted in:
  • 软件推荐及相关资讯
Tagged
  • mysql
  • 数据库

解决Debian下sudo命令unable to initialize PAM问题

配置的Debian系统,先是用root账户 apt-get install sudo 安装sudo命令;然后通过useradd命令建立子账户;最后修改sudoers通过添加相应账户名来开放执行sudo的权限。

本以为做完一切万事大吉,可以切换到子账户痛快的用sudo了。其实不然,当我切换到刚才建立的子账户并执行sudo命令时出现了下面的错误提示:

$ sudo ls
sudo: unable to initialize PAM: No such file or directory

无法初始化PAM,什么是PAM?引用百度百科上的描述:

PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。

实际上这是通过配置模块实现认证的认证模式,PAM的配置文件均位于Debian下 /etc/pam.d 目录下,通过ls列出该目录当前文件,发现sudo果然在其中。使用cat /etc/pam.d/sudo出现以下信息:

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • Linux
  • debian

在CentOS 6上使用RPMforge安装源(软件仓库)

之前一直搞Debian系的服务器,今天正好要弄RedHat系的CentOS。系统刚装完,随手使用 yum install htop ,想把自己喜欢的htop进程管理器装上去,结果yum提示找不到htop,看来缺少软件源。

上网搜索了一下,发现了一个强大的东东,那就是RPMforge,它是Dag、Dries和其它软件包的组合。它们为 CentOS 提供了超过5000个软件包,包括wine、vlc、mplayer、xmms-mp3和其他流行媒体工具。

其实CentOS官方文档 《Installing RPMforge》 中也给出了这个软件的介绍以及安装过程等信息,大家可以参考一下,下面我简单介绍一下安装过程,算是做个备忘。

首先导入DAG GPG密钥:

rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

如果出现下面的错误信息则说明这个密钥已经导入了,所以接着下面步骤:

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • Linux

解决PHP编译cURL的reinstall the libcurl问题

今天正好要用到PHP的curl功能,发现服务器上的PHP并没有配置curl,进而 查询PHP官方文档 ,得知编译PHP时需要带上 --with-curl 参数,才能把curl模块编译进去。我现在PHP已经编译安装进服务器了,不想再重新编译了,于是参考下面有网友评论的办法,单独编译curl模块,然后 make install

首先需要下载官方的PHP源代码,然后定位到扩展目录下的curl,旧版本的PHP扩展目录可能是extensions,新版应该是ext。

cd /tmp
wget http://cn.php.net/get/php-5.3.10.tar.bz2/from/cn2.php.net/mirror
mv mirror php-5.3.10.tar.bz2
tar vxf php-5.3.10.tar.bz2
cd php-5.3.10/ext/curl
phpize
./configure
make install
Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • php配置
  • Linux

© Wang Ye / 王 晔. All rights reserved.