本博客运行于FreeBSD + nginx + PHP + MySQL环境之上。环境搭建方法点击进入
  目前为止,移植工作已经进行了大约6%,首页、注册、登录、帖子列表等已经可以正常显示了。数据库中已经创建了21个表和15个存储过程。当移植工作完成后,打算用改造好的论坛程序搭建一个以MONO为主题的论坛。

  不过,就目前运行的情况来看,Discuz!NT的执行速度与Discuz!(PHP)还是有比较大的差距的。我估计是因为两者程序编写的差异。Discuz!应用了很多的缓存技术,并且流行了这么多年,应该是相当完善的了。目前我这个完成度6%的东西,完全没有用到缓存技术(Discuz!NT本身是有缓存技术的)。

  Discuz!NT真正的性能,还是等到移植工作完成的时候,再来展现吧。

  注:本次移植环境是 Ubuntu Server 10.04.2 amd64(虚拟机) + mono 2.10.6 + Jexus 5.0.1

  计划移植完成90%以上,并且绝大部分主要功能可用后,搭建一个以MONO为主题的论坛。在讨论MONO的同时,继续完善Discuz!NT for MM(MONO+MySQL)。


  2012年2月20日:完成度约10%,注册、登录功能已经正常。正式将移植版本命名为 Discuz!NT_MM。

Tags: , , , ,

SqlServer到MySql的转换

[不指定 2012/02/15 01:26 | by 袁旭东 ]
  最近在做将Discuz!NT移植到mono+MySql环境,由于最新版本的Discuz!NT仅支持SqlServer,所以要移植首先是要增加Discuz.Data.MySql这个namespace,实现IDataProvider接口。所以,绝大部分工作就是SqlServer中函数和存储过程的移植。下面随着移植工作的进行,将要点做一些记录,备用。

  格式:SqlServer
     MySql


  1、DATEDIFF(n, [lastpost], GETDATE())
    TIMESTAMPDIFF(minute, `lastpost`, NOW())

  2、SELECT TOP 1 `{0}` FROM `{1}forumfields` WHERE `fid`={2}
    SELECT `{0}` FROM `{1}forumfields` WHERE `fid`={2} LIMIT 0,1

  3、SELECT ISNULL(MAX([tid]), 0) FROM [{0}]
    SELECT IFNULL(MAX(`tid`), 0) FROM `{0}`

  4、SELECT SCOPE_IDENTITY()
    SELECT LAST_INSERT_ID()

  5、SELECT CHARINDEX(',','aaa,bbb')
    SELECT LOCATE(',','aaa,bbb')

FreeBSD 9.0 Release版本放出了

[不指定 2012/01/06 19:33 | by 袁旭东 ]
  刚刚在FreeBSD.org上看到,FreeBSD 9.0 Release ISO文件已经可以下载了。不过,网站页面还是显示的RC3。

  AMD64下载地址CD:ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-amd64-disc1.iso
  AMD64下载地址DVD:ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-amd64-dvd1.iso

Tags: , ,
  最近几天,网上公布了PHP的Hash冲突漏洞,具体就是hash表碰撞漏洞,不仅仅是PHP,JAVA、Python等语言均受影响。PHP 5.3.9 RC4及以上版本不受影响,虽然还是RC版本,但是为了不受此漏洞影响,还是决定将PHP升级至5.3.9 RC4。

Tags: , ,

我的服务器终于支持.NET了

[不指定 2011/11/03 18:33 | by 袁旭东 ]
  很久以前就已经在开发服务器上安装成功了Mono,并搭建起了.NET服务器。但是,生产环境始终无法安装成功,因为生产服务器的FreeBSD版本比开发服务器版本低,当时认为是版本的原因造成的,经过了几次尝试后,始终没有成功,所以就放弃了。

  就在前几天,我为生产服务器更新补丁,顺便将ports树也一起更新了,我也就顺手看了一下ports中Mono的版本,Mono竟然是最新的2.10.6。我心想,这次我安装一下试试,看行不行。所以就尝试了一下。

引用
make install clean


  经过了漫长等待,并更新了几个库文件之后,Mono竟然安装成功了,我兴奋不已。做网站,与PHP相比,我还是感觉asp.net比较顺手,这下可解决了大问题了。

  现在已经在服务器上搭建起了我的一个网站,打算做一个网上的图片社,经营照片冲印、相册制作、台历制作等等业务。网站地址:



Tags: , ,

解决Android中文乱码的问题

[不指定 2011/09/30 08:48 | by 袁旭东 ]
  前几天解决了PHP与Android中DES加密一致性的问题,昨天遇到了访问Web中文乱码的问题。我在服务端编写了一个PHP程序,Android通过http访问。我的网站编码是UTF-8的,而由于Android的编码是iso-8859-1的,所以导致了中文乱码的问题。知道了原因,解决起来就简单了。在获取得到的返回结果后,对数据进行编码转换就可以了。代码如下:
引用
strResult = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");


  如果你的网站是GB2312或者GBK的,那么就把以上代码中红色的部分改成GBK就可以了,如:
引用
strResult = EntityUtils.toString(httpResponse.getEntity(), "GBK");


  其他编码依此类推。

Tags: , ,

FreeBSD 9.0 beta 3发布

[不指定 2011/09/28 17:42 | by 袁旭东 ]
  昨天,FreeBSD 9.0 beta3发布了,按照计划,这个版本应该是最后一下beta版了,接下来应该是RC1了。FreeBSD 9.0比计划的时间表延后了一个多月。大概估算,9.0正式版本应该会在今年的10月底左右发布。

  我的测试服务器会在最近一两天内更新至FreeBSD 9.0 beta3,之前的版本是FreeBSD 9.0 beta2。由于只在其上配置了nginx,所以除了安装以外,还无法去发现在其他使用方面与8.x的不同。

Tags:
  正在做一个Android手机的一个小应用,并且需要与网站有信息交互,网站使用PHP开发,所以需要一个Android与PHP互通的DES加密解密代码。

  Android代码如下
引用
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

import android.util.Base64;
  
public class DES2
{
    public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";

    /**
     * DES算法,加密
     *
     * @param data 待加密字符串
     * @param key  加密私钥,长度不能够小于8位
     * @return 加密后的字节数组,一般结合Base64编码使用
     * @throws CryptException 异常
     */
    public static String encode(String key, String data) throws Exception
    {
        return encode(key, data.getBytes());
    }
    
    
    /**
     * DES算法,加密
     *
     * @param data 待加密字符串
     * @param key  加密私钥,长度不能够小于8位
     * @return 加密后的字节数组,一般结合Base64编码使用
     * @throws CryptException 异常
     */
    public static String encode(String key, byte[] data) throws Exception
    {
        try
        {
            DESKeySpec dks = new DESKeySpec(key.getBytes());
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            //key的长度不能够小于8位字节
            Key secretKey = keyFactory.generateSecret(dks);
            Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
            IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());
            AlgorithmParameterSpec paramSpec = iv;
            cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec);

            byte[] bytes = cipher.doFinal(data);

            return Base64.encodeToString(bytes, 3);
        }
        catch (Exception e)
        {
            throw new Exception(e);
        }
    }

    /**
     * DES算法,解密
     *
     * @param data 待解密字符串
     * @param key  解密私钥,长度不能够小于8位
     * @return 解密后的字节数组
     * @throws Exception 异常
     */
    public static byte[] decode(String key, byte[] data) throws Exception
    {
        try
        {
            DESKeySpec dks = new DESKeySpec(key.getBytes());
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            //key的长度不能够小于8位字节
            Key secretKey = keyFactory.generateSecret(dks);
            Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
            IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());
            AlgorithmParameterSpec paramSpec = iv;
            cipher.init(Cipher.DECRYPT_MODE, secretKey,paramSpec);
            return cipher.doFinal(data);
        }
        catch (Exception e)
        {
            throw new Exception(e);
        }
    }

    /**
     * 获取编码后的值
     * @param key
     * @param data
     * @return
     * @throws Exception
     */
    public static String decodeValue(String key,String data)
    {
        byte[] datas;
        String value = null;
        try
        {
            datas = decode(key, Base64.decode(data, 3));
            value = new String(datas);
        }
        catch (Exception e)
        {
            value = "";
        }
        return value;
    }
}
Tags: , , , ,
  在开发Android程序时,很可能您想要您的用户群不止是简体中文用户,很可能还有英语用户或者繁体中文用户。这时候,我们就需要让Android程序支持多语言了,并且程序会根据系统的当前语言来自动转换程序的显示语言。

  下面我就以创建缺省语言为英语,另外支持简体中文的Android程序为例,说一下Android的多语言支持。

  首先,在res目录下建立values-zh-rCN目录,并新建一个名为strings.xml文件。此文件将存储简体中文字符串资源。

  然后,将res目录下的values目录下的string.xml中的内容复制出来,假定文件内容为:
引用
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Seller Assistant</string>
    <string name="exit_msg_title">Tips</string>
    <string name="msg_cancel">Cancel</string>
    <string name="msg_OK">OK</string>
    <string name="msg_exit_content">Do you want to quit Seller Assistant?</string>
</resources>


  复制后,将标签值翻译成简体中文,修改后内容如下:
引用
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">淘宝卖家助理</string>
    <string name="exit_msg_title">温馨提示</string>
    <string name="msg_cancel">取消</string>
    <string name="msg_OK">确定</string>
    <string name="msg_exit_content">您确认退出卖家助理吗?</string>
</resources>


  应该可以注意到,修改的只是红色的部分,标签的name不要修改。

  最后,您只要在您的Android程序中使用这些字符串资源id就可以了。例如程序中按返回按键时显示的确认退出对话框,代码如下:
引用
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
  if(keyCode == KeyEvent.KEYCODE_BACK)
  {
    // 退出时提示确认是否退出
    showExitMessage(R.string.msg_exit_content);
    return true;
  }
  return super.onKeyDown(keyCode, event);
}


/**
* 退出App时提示窗口
* @param msg 提示文字信息
*/
private void showExitMessage(int msg_id)
{
  new AlertDialog.Builder(this)
  .setTitle(R.string.exit_msg_title)
  .setMessage(msg_id)
  .setPositiveButton(R.string.msg_OK, new DialogInterface.OnClickListener()
  {
    public void onClick(DialogInterface dialoginterface, int i)
    {
      finish();
    }
  })
  .setNegativeButton(R.string.msg_cancel, new DialogInterface.OnClickListener()
  {
    public void onClick(DialogInterface dialoginterface, int i)
    {
      //
    }
  }).show();
}


  这样,您开发的Android程序就支持多语言了。

Tags: ,

FreeBSD 9.0 beta2发布了

[不指定 2011/09/09 22:05 | by 袁旭东 ]
  作为一名FreeBSD的忠实粉丝,自开始使用FreeBSD那一刻起,就始终专注着FreeBSD。我的所有服务器,包括开发服务器也都是安装着不同版本的FreeBSD,并且它们都稳定而高效地运行着。特别是生产服务器,已经稳定运行两年了,FreeBSD是一个非常值得信赖的服务器操作系统。

  随着FreeBSD 9.0 beta版本的发布,FreeBSD为我们带来了很多新的特性,我摘抄如下:
引用
将ZFS作为默认的文件系统;
SSD TRIM 支持;
802.11n 高流量支持;
更多的ATA/CAM 改进;
PCI热插拔支持;
S4休眠支持;
Xen dom0支持;
重新启动更快,等等


  自FreeBSD 9.0开始,FreeBSD开始使用了一种新的安装程序——BSDInstall,较之前的sysinstall有什么变化呢,趁放假期间,我下载下来FreeBSD 9.0 beta2安装体验一下。

  FreeBSD 9.0正式版或许会在今年10月份发布吧,我们还是耐心等待吧。到时候可以再安装一台FreeBSD 9.0的开发服务器了。

Tags:
分页: 1/27 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]