指掌风云,秀玩美---Touch Diamond实拍王之畅游广州白云山(2)

by ξ箫音ξ 7/6/2008 3:33:00 PM

我们出行4人,在2008年7月5号 周六下午打的的士,大概30分钟到达广州白云山。 来到广州快2个星期才赶上

唯一一个好天气! 随身携带Touch Diamond智能PPC,不会遗憾留不住短暂的美丽时光!

一路登山,路边的南方植物生长茂盛,很有特色和美感。

竹子也非常挺拔和秀丽,充满了生气!

下图是我们登山的甬道:

登山半山顶,俯视广州城市,很壮观!远端还有索道的上下往返,人蛮多的。

半山腰不远处有“黄河石”景点,据说是来自黄河的源头!

山水哗哗的流淌,仿佛看到了黄河母亲河的奔腾不息的精神:

在山顶的照片,拍的有点暗,:-)

继续攀登,林间的小路风景还不错,实拍了一个^_^:

我与同事一行4人,辛苦的登山肚子都咕咕叫,山顶的东西真贵;要了几个菜画了110,拍黄瓜18块一盘,

猪脚又白又硬32....汗一个;谁叫我们饿的任由他们宰呢?

广州的最高峰摩天岭上传来隆隆的钟声,据说是传递平安和吉祥的声音,哥几个累的够呛不准备去了,继续下行。

林间的小溪、蜻蜓飞舞,抓拍一个^_^,蜻蜓翅膀紧缩,警惕性满高的。

天色渐暗,我们在下行的路上,山间的小溪汇聚了个小池塘,山水凉啊洗把脸,里面还有几条鱼:

路边的小花抓拍:

给我同事的抓拍,林我们中下山中,潺潺流下的山泉:

终于到山底了,在抓拍一个^_^,打车回家:)

Touch Diamond实拍旅游真是太不错了。

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

指掌风云,秀玩美---Touch Diamond实拍照片王(1)

by ξ箫音ξ 7/6/2008 2:54:00 PM

Touch Diamond是多普达即将上市的最新顶级产品,今天畅游广州白云山更显它的威力!

Touch Diamond配备有320万像素,自动对焦技术,着实让我秀了一把;因为轻薄的外形,

出差随身携带非常方便,名片实拍储存功能更为强悍,真不愧为多功能一体的掌上智能电脑。

工作交际拍名片,识别率高,拍名片直接可以识别后储存成联系人,非常方便。如下图:

我出差广州居住的小区挺有特色,与北京不同的是,小区楼宇中心居然建有游泳池;

一天工作劳累的人们可以在傍晚游泳,嬉戏;可能是四季如春的气候,产生的一大小区特色;

旁边竹林,环境优雅。

在工作闲暇之余,我们可以在竹林中用Touch Diamond的FM收音机的功能听听英语,听听单田芳评述......

倍感惬意。  Touch Diamond的FM功能,需要插多普达耳机,具有天线功能,清晰度和效果满不错的。

如下图:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

指掌风云,秀玩美---Touch Diamond 随身出行的好伴侣

by ξ箫音ξ 7/4/2008 2:13:00 PM

 2008年6月24号公司派到广州出差,经过黄河,用Touch Diamond 照相实拍,好像经过了长江,

不过是夜晚,没拍摄上;Touch Diamond采用的是320万像素,采用自动对焦技术,出行拍摄

普通相片效果不错。今晚准备游玩珠江夜景,^_^。

旅行中,玩游戏真不错;目前Mobile 6.1游戏软件众多,使得Touch Diamond功能更强更方便;

1、广州--路经黄河实拍。

2、广州老站

3、广州地铁

4、飞机游戏3D效果

5、象棋游戏(棋力满强的)

6、明星麻将学员;7、雷电。

下载地址:

Majong Academy.zip (173.15 kb)

雷电 for PPC.zip (3.09 mb)

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

指掌风云,秀玩美---Touch Diamond 学习英语的王者

by ξ箫音ξ 6/26/2008 11:23:00 AM

Touch Diamond智能手机是多普达至今为止顶级的产品,其轻薄和钻石般的墨色外形是有别与其他

智能手机,功能强大,非常适合随身学习英语的一款机型。

6月24日公司派去广州出差,乘坐一天一夜的火车(火车安全^_^),有Touch Diamond相伴没有感觉寂寞;

一路上用Touch Diamond玩游戏,打麻将、下象棋,学习英语....感觉很充实。

1、Touch Diamond系统自带有金山词霸 for Pocket PC v1.2 Build 20080508是目前最新版本;

金山词霸PPC版,功能很强即时查词,中英——英中互译非常方便;

2、Touch Diamond系统安装的另一款学习英文软件,个人感觉也非常不错:

Dr.eye Mobile 3.0 for PPC ,除了基本功能查词中英互译外,例句比词库丰富;

配有真人发声库(但是在微软Mobile 6.1系统中发声库没装上,可能我没太会用^_^);

下载地址:

PPC的下载地址为ftp://mpuser:MpUser@203.94.2.140/DreyeMobile.exe

(主程序)ftp://mpuser:MpUser@203.94.2.140/Dreye TrueVoice.CAB

(真人发音)ftp://mpuser:MpUser@203.94.2.140/DreyeTrueVoice60.exe

(真人发音) 译典通PPC在多普达俱乐部,华军网,斑马网均有下载销售。

PPC在比特网评测http://telecom.chinabyte.com/477/8136477.shtml,可参考。

3、用Touch Diamond随时随地学英语;结合UEI美联国际英语会达到不错的效果;

Touch Diamond插入耳机,可以进入播放英语模式;我们搞IT的学习英语时间少,汗啊!

UEI英语介绍:这是一套非常独特的英语听说训练光盘,总共25张,由美国48位顶尖

语言专家开发,不需要看书、不需要背单词、背语法,只需要随意地跟着光盘听和说

就能在很短时间里拥有一口流利纯正的口语。您现在购买可免费获赠MP3格式的光盘,

方便您直接复制到MP3播放器上学习。

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

当选为2008微软金牌讲师决赛评委(聘书)

by ξ箫音ξ 6/22/2008 2:04:00 AM

很高兴的获得了“2008微软金牌讲师决赛评委证书”。

决赛是在微软三元桥汽车大厦18层举行,经过一个下午20位的选手激烈的比赛和

20轮评委细心的测评与讲师们努力的表演,终于2008微软金牌讲师评选活动顺利完成。

这次参赛选手演讲和技能水平较好,各个评委认真负责,让每个到赛场的人感到激动。

金牌讲师评选分管理组和开发组。



获得2008微软金牌讲师决赛证书

Currently rated 3.3 by 6 people

  • Currently 3.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

指掌风云,秀玩美---Touch Diamond 钻石中的王者

by ξ箫音ξ 6/20/2008 1:27:00 AM

  在基于Windows Mobile 6.1的多普达Touch Diamond智能手机发布之际,微软联合多普达公司举办的“指掌风云
,秀玩美——Windows Mobile 智能达人汇“活动,有幸成为其中之一的爱好者Windows Mobile发烧玩家;

     在Touch Diamond手机正式上市之前的一个月内,率先拿到并试用这款颇受业内和消费者(我也期待N久了...呜呜呜
...内心激动的噼里啪啦的,^_^)期待的Windows Mobile智能手机。
     
      外观上感觉做工华丽、精致、酷炫、设计人性化十足,联系人的头像定制,很酷的切换联系人的功能......

  

( 没有相机,D600照的图惨,汗啊...,借助Autumoon哥们的图炫一个;以后在放更多的原创应用截图^_^)

     第一感觉运行速度快,在启动程序的时候就很明显,即便是启动占用资源很大的“Dr.eye译典通”等软件几乎也就是1.2
秒钟左右就开启了。对比起来想起我的老爷车D600...呜呜呜...伤心啊...

Touch Diamond 智能是旗舰产品它是目前为止其顶级配置,一流工艺,个性化的配置,并且互为战略合作伙伴的多普达

与HTC共同表示:“这款划时代意义的杰作将为广大消费者带来最佳的时尚气息、人文体验以及科技魅力。”

      个人感受,Touch Diamond的设计确实堪称高端智能手机的重大飞跃。HTC首创的TouchFLO® 3D用户界面,以

最直观感性的方式诠释出人机间的互动体验,并搭载了最新的微软Windows Mobile 6.1 Professional操作系统,超强的

硬件配置让Touch Diamond被业内誉为“钻石王者”,可谓实至名归。

      现在我们来看看Touch Diamond的硬件配置,对于Touch Diamond的配置应该说是迄今为止多普达系列手机中最高

的了,就处理器方面采用了高通7206A 528MHz的处理器,光看处理器的主频就已经非常高了(在PPC中),此外,这颗处

理器还是ARM11构架的,我们早先接触的Intel PXA272或者是OMAP850之类的处理器都是ARM9构架的,ARM11和ARM

9的差别就相于奔腾2和奔腾1的差距一样。因此Touch Diamond的528比起老的采用Xscale机型来说运行的速度更快。当然

运行速度快和大内存也是密不可分的,Touch Diamond采用了192MB的程序运行内存,也是目前我们使用过的机型中运行内

存最大的机型了。528MHz CPU,内置4GB存储空间,320万像素自动对焦摄像头,GPS全球卫星定位导航模块,Touch

Diamond以令人目眩的顶级配置,彰显出王者风范。


      不仅如此,为了提升产品的用户体验,这次Touch Diamond还装载有HTC开发的新一代的Touch 3D触控界面,通过更

炫目的操作方式,让用户可轻松与联络人、信息、电子邮件、照片、音乐、气象等信息之间相互连结。此外,Touch Diamond

这次也加入了方向感应器,用户在通过HSDPA/HSUPA高速网络移动上网的时候,不仅可以通过新的操作界面单手缩放或平移

网页,只需将 手机向侧边翻转,就可以自动将网页显示模式进行转换。

      Diamond手感设计的非常好,机身纤薄轻便,但却拥有相当强悍的功能规格。装载有2.8英寸VGA(480×640像素)

分辨率的TFT液晶屏幕,并提供了当前 Windows Mobile 手机最高端的硬件规格。内置有与索尼爱立信XPERIA X1

相同的528 MHz 主频的Qualcomm MSM7201A处理器(汗一个),拥有256MB ROM和192MB的RAM 超高容量内存,并具

备海量的4GB储存空间(不过手机外部本身没留扩展卡插槽),不论是执行程序或是装载文件都更游刃有余。Touch Diamond

还是一款支持 WCDMA/HSPA 900/2100MHz双频的3G手机,支持HSPA的HTC Diamond可高达7.2Mbps的峰值下行速率。
 

 

                    (Touch Diamond内部自带的图片,很Cool吧,^_^)
 

     苹果的Phone预计在2008年(最快可能在第三个季度)发布3G版的IPhone,所以想购买一款集触摸屏、网页浏览、3G功

能于一体的手机,我们又多了一个选择,可以不用再等传闻中的3G版IPhone了,Touch Diamond满足了这种需求 --个人觉

得它吸取了IPhone等智能手机的很多优点,并且突出了很多人性化交互优点,感觉像是“模仿“了苹果^_^,并可提供快速3G

网络接入的突破性装备。

     在对第三方软件的开发支持上微软Windows Mobile 6.1 Professional前不久已经发布比较完备的6.1SDK,支持第三方

态度会更加明晰,并且走到了其他厂商的前面。

    更多的功能和应用我会继续向大家介绍……待续中……

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

基于微软Synchronization Services双向同步技术在企业项目中的架构应用研究

by ξ箫音ξ 6/17/2008 11:44:00 AM

 
项目应用场景:

     某客户是一个大型集团企业的信息部门,掌管着企业几百台服务器,并且以后会不断扩充;
   为了更好的维护信息办的服务器;信息部门需要开发一套维护系统,来记录各个服务器的相关状态信息

  (如,IP、所安装在服务器的应用系统和相关信息等),便于维护和查询;客户维护人员可以携带笔记本

   脱机即时编写维修服务器相关记录信息(增、删、查、改),客户端联网即可自动同步到服务器最新维护数据。
     客户要求实现服务器端和客户端双向同步的方式,客户端操作数据服务器端自动更新,反之操作服务器端,

    客户端自动更新。

早先的解决方案:

客户端和服务端都使用SQL2005数据库,并采用数据库订阅的方式进行数据同步。
此种设计缺点是:

      1、客户端必须安装SQL2005,造成操作客户端系统运行速度降低,占用客户端计算机系统资源大等问题。
      2、同步方式配置复杂。需要订阅方式发布服务器和订阅服务器互相注册,服务器端与客户端配置复杂。

最新的解决方案:

      1、客户端数据库采用微软Microsoft SQL Server Compact 3.5压缩数据库,实施技术Microsoft Synchronization Services v1.0。
      2、服务器端数据库采用微软Microsoft SQL Server 2005(2008)。
      3、开发工具是Microsoft Visual Studio 2008正式版。

      服务器端开发B/S维护系统;C/S端开发客户端Winform(WPF)应用程序;实现客户端winform系统业务操作会相应的同步到服务器中;

反之,服务器端的业务系统操作也会自动同步到下属不同的客户端Compact数据库中。

     架构设计:

     1、服务器端系统架构设计采用MVPC架构:Web Client Software Factory

     2、客户端业务系统架构设计也MVPC架构:Smart Client Software Factory

     优点:客户端模块代码很容易移植到服务器端asp.net开发的业务系统;解决客户端与服务器端应用模块重复,减少代码量;


如果采用Microsoft SQL Server Compact 3.5客户端数据库(Sdf扩展名的数据库文件),不必安装Microsoft SQL Server 2005数据库,客户只需要一个安装包,即可实现客户端的应用系统安装,更加方便灵活的用户体验。


 

 Sync Services for ADO.NET provider 技术应用场景

    * C\S结构的离线应用,在本地缓存中心数据库中的部分数据(极特别的情况下会缓存全部)。应用程序使用缓存的数据,并在特定的时间把一批更改上次到中心数据库。
    * 协作应用,应用程序只使用本地数据,并周期性的与其他参与者进行 Peer-to-Peer 的同步。

 
数据库双向同步:Feature实现客户端C/S系统数据库数据与服务器端B/S管理系统数据库数据进行数据双向同步;

Use case:用户在客户端针对本地数据库系统进行增加、删除、修改等操作,如果在线联网状态,数据自动同步到远程SQL Server数据库;

有管理权限用户,登录B/S系统进行增加、删除、修改等操作,SQL Server数据自动同步到客户端数据库。

功能实现Server与Client端进行数据操作(增加、删除),都能很好的进行数据双向同步;

Sync Demo源码程序截图如下:



Compact数据库同步技术功能

Microsoft SQL Server Compact 3.5 (以前称为 Microsoft SQL Server 2005 Mobile Edition)是一种压缩数据库,很适合嵌入到移动应用程序和桌面应用程序中。Microsoft SQL Server Compact 3.5 为开发本机和托管应用程序的开发人员提供了与其他 SQL Server 版本通用的编程模型。SQL Server Compact Edition 以很少的空间占用提供关系数据库功能:健壮数据存储、优化查询处理器以及可靠、可缩放的连接。 

Microsoft Synchronization Services for ADO.NET 是一组 DLL,提供了一个可组构的 API。根据应用程序的体系结构和要求,可以使用提供的所有或部分组件。Synchronization Services 实现了 SQL Server Compact 3.5 客户端数据库和服务器数据库或任何其他数据源(如以 XML 形式提供股票报价的服务)之间的同步。在同步两个数据库方面,Synchronization Services 支持使用为之提供了 ADO.NET 提供程序的任何服务器数据库的双层和 N 层体系结构。

在对客户端数据库和其他类型的数据源进行同步方面,Synchronization Services 支持基于服务的体系结构。与双层或 N 层体系结构相比,此体系结构需要编写更多的应用程序代码;但是,它不需要开发人员采取另一种不同的方式进行同步。

通过 Microsoft Visual Studio 2008 的Microsoft Synchronization Services for ADO.NET,可以通过双层、N 层和基于服务的体系结构同步来自不同来源的数据。Synchronization Services API 提供了一组用于在数据服务和本地存储区之间同步数据的组件,而不是仅仅用于复制数据库及其架构。应用程序正越来越多地用于移动客户端,如便携式计算机和设备。由于这些移动客户端与中央服务器没有连贯或可靠的网络连接,因此对于这些应用程序而言,能够在客户端上使用数据的一份本地副本十分重要。同等重要的一点是:在网络连接可用时,需要能够将数据的本地副本与中央服务器同步。Synchronization Services API 以 ADO.NET 数据访问 API 为蓝本,提供了一种直观的数据同步手段。Synchronization Services 对构建依靠连续网络连接的应用程序这一工作进行了合乎逻辑的扩展,使我们得以针对断续连接的网络环境开发应用程序。

相关代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServerCe;
using Microsoft.Synchronization.Data.Server;
using System.Data.SqlServerCe;


namespace SynchrnoizationDemo
{
    public partial class frmMain : Form
    {
        #region 定义常规数据区
        private const string strServerListTableName = "ServerList";
        private const string strUserListTableName = "UserList";

        private const string strCreationTrackingColumn = @"create_timestamp";
        private const string strUpdateTrackingColumn = @"update_timestamp";
        private const string strDeletionTrackingColumn = @"update_timestamp";
        private const string strUpdateOriginatorIdColumn = @"update_originator_id";

        private const string strNoClientDBWarnString = "客户端数据库不存在,请首先执行 双向同步 命令";
        #endregion

        #region 定义变量区
        private string strServerIP = @"(local)";
        private string strServerDataBaseName = "SyncDemo";
        private string strLoginUser = "sa";
        private string strLoginPassWord = "sa";
        private string strServerConnectString = "";

        private string strClientDataBasename = Application.StartupPath + @"\ClientDB.sdf";
        private string strClientConnectString = "";

        private bool blnOperationClient = true;
        private string strOperationTable = strServerListTableName;
        #endregion

        public frmMain()
        {
            InitializeComponent();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            //  初始化相关参数
            SetEnvironmentValue();
        }

        #region 通用方法
        /// <summary>
        /// 获取相关参数
        /// </summary>
        private void GetEnvironmentValue()
        {
            strServerIP = txtServerIP.Text.Trim();
            strServerDataBaseName = txtServerDataBaseName.Text.Trim();
            strLoginUser = txtLoginUser.Text.Trim();
            strLoginPassWord = txtLoginPassWord.Text.Trim();
            strServerConnectString = "Data Source="+strServerIP+";Initial Catalog="+strServerDataBaseName+";User ID="+strLoginUser+";Password="+strLoginPassWord+";";

            strClientDataBasename = txtClientDataBaseFileName.Text.Trim();
            strClientConnectString = "Data Source=" + strClientDataBasename;

            blnOperationClient = rbClient.Checked;
            strOperationTable = tabMain.SelectedIndex == 0 ? strServerListTableName : strUserListTableName;
        }
        /// <summary>
        /// 显示相关参数
        /// </summary>
        private void SetEnvironmentValue()
        {
            txtServerIP.Text = strServerIP;
            txtServerDataBaseName.Text = strServerDataBaseName;
            txtLoginUser.Text = strLoginUser;
            txtLoginPassWord.Text = strLoginPassWord;
            txtClientDataBaseFileName.Text = strClientDataBasename;
           
            if (blnOperationClient)
            {
                rbClient.Checked=true;
                rbServer.Checked=false;
            }
            else
            {
                rbServer.Checked=true;
                rbClient.Checked=false;
            }
        }
        /// <summary>
        /// 检查客户端数据库是否存在
        /// </summary>
        /// <returns></returns>
        private Boolean CheckClientDb()
        {
            //这里默认已经调用了GetEnvironmentValue函数
            return File.Exists(strClientDataBasename);
        }
        #endregion

        #region 刷新数据
        /// <summary>
        /// 刷新调用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btRefersh_Click(object sender, EventArgs e)
        {
            btRefersh.Enabled = false;
            //RefreshData(tabMain.SelectedTab.Text.Replace("表", ""));
            RefreshData(strServerListTableName);
            RefreshData(strUserListTableName);
            btRefersh.Enabled = true;
        }

        /// <summary>
        /// 数据刷新
        /// </summary>
        /// <param name="sTableName"></param>
        private void RefreshData(string sTableName)
        {
            GetEnvironmentValue();

            string sSql = "Select * from " + sTableName;
           
            DataTable dtQuery;

            try
            {
                #region 读取服务器端
                SqlDataAdapter serverLoadAdapter = new SqlDataAdapter(sSql, strServerConnectString);
                dtQuery = new DataTable();
                serverLoadAdapter.Fill(dtQuery);
                RemoveServerTrackingColumns(dtQuery);
                switch (sTableName)
                {
                    case strServerListTableName:
                        dgSLServer.DataSource = dtQuery;
                        break;
                    case strUserListTableName:
                        dgULServer.DataSource = dtQuery;
                        break;
                }
                #endregion

                #region 读取客户端
                if (CheckClientDb())
                {
                    SqlCeDataAdapter clientLoadAdapter = new SqlCeDataAdapter(sSql,strClientConnectString);
                    dtQuery = new DataTable();
                    clientLoadAdapter.Fill(dtQuery);
                    RemoveClientTrackingColumns(dtQuery);
                    switch (sTableName)
                    {
                        case strServerListTableName:
                            dgSLClient.DataSource = dtQuery;
                            break;
                        case strUserListTableName:
                            dgULClient.DataSource = dtQuery;
                            break;
                    }
                }
                else
                {
                    MessageBox.Show(strNoClientDBWarnString);
                }
                #endregion
            }
            catch (System.Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        /// <summary>
        /// 去除客户端表中不需要显示的列
        /// </summary>
        /// <param name="dataTable"></param>
        private static void RemoveClientTrackingColumns(DataTable dataTable)
        {
            if (dataTable.Columns.Contains("__sysInsertTxBsn"))
            {
                dataTable.Columns.Remove("__sysInsertTxBsn");
            }

            if (dataTable.Columns.Contains("__sysChangeTxBsn"))
            {
                dataTable.Columns.Remove("__sysChangeTxBsn");
            }
        }
        /// <summary>
        /// 去除服务器端表中不需要显示的列
        /// </summary>
        /// <param name="dataTable"></param>
        private static void RemoveServerTrackingColumns(DataTable dataTable)
        {
            if (dataTable.Columns.Contains("update_timestamp"))
            {
                dataTable.Columns.Remove("update_timestamp");
            }

            if (dataTable.Columns.Contains("create_timestamp"))
            {
                dataTable.Columns.Remove("create_timestamp");
            }

            if (dataTable.Columns.Contains("update_originator_id"))
            {
                dataTable.Columns.Remove("update_originator_id");
            }

        }
        #endregion

        #region 同步数据
        /// <summary>
        /// 同步数据调用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btSync_Click(object sender, EventArgs e)
        {
            btSync.Enabled = false;
            panOperation.Enabled = false;
            SynchronizeData();
            btRefersh_Click(null, null);
            panOperation.Enabled = true;
            btSync.Enabled = true;
        }
        /// <summary>
        /// 数据同步
        /// </summary>
        private void SynchronizeData()
        {
            #region 初始化
            GetEnvironmentValue();

            SyncAgent syncAgent = new SyncAgent();
            #endregion
            try
            {

                #region 服务器端准备
                DbServerSyncProvider serverSyncProvider = new DbServerSyncProvider();
                SqlConnection serverConnection = new SqlConnection(strServerConnectString);
                serverSyncProvider.Connection = serverConnection;
                syncAgent.RemoteProvider = serverSyncProvider;
                #endregion


                #region 客户端准备
                if (!CheckClientDb())
                {
                    SqlCeEngine clientEngine = new SqlCeEngine(strClientConnectString);
                    clientEngine.CreateDatabase();
                    clientEngine.Dispose();
                }
                SqlCeClientSyncProvider clientSyncProvider = new SqlCeClientSyncProvider(strClientConnectString);
                syncAgent.LocalProvider = clientSyncProvider;
                #endregion


                #region SyncTable和SyncGroup准备
                //  ServerList表
                SyncTable tableServerList = new SyncTable(strServerListTableName);
                tableServerList.CreationOption = TableCreationOption.DropExistingOrCreateNewTable;
                tableServerList.SyncDirection = SyncDirection.Bidirectional;

                //  UserList表
                SyncTable tableUserList = new SyncTable(strUserListTableName);
                tableUserList.CreationOption = TableCreationOption.DropExistingOrCreateNewTable;
                tableUserList.SyncDirection = SyncDirection.Bidirectional;

                //  SyncGroup
                SyncGroup syncGroup = new SyncGroup("SyncDemo");
                tableServerList.SyncGroup = syncGroup;
                tableUserList.SyncGroup = syncGroup;

                syncAgent.Configuration.SyncTables.Add(tableServerList);
                syncAgent.Configuration.SyncTables.Add(tableUserList);
                #endregion

                #region SyncAdapter准备

                #region ServerList准备
                SqlSyncAdapterBuilder ServerListBuilder = new SqlSyncAdapterBuilder();
                ServerListBuilder.Connection = serverConnection;
                ServerListBuilder.SyncDirection = SyncDirection.Bidirectional;

                // 主表及其相关列
                ServerListBuilder.TableName = strServerListTableName;
                ServerListBuilder.DataColumns.Add("ServerID");
                ServerListBuilder.DataColumns.Add("ServerIP");
                ServerListBuilder.DataColumns.Add("ServerBuyTime");

                // tombstone表及其相关列
                ServerListBuilder.TombstoneTableName = strServerListTableName + "_tombstone";
                ServerListBuilder.TombstoneDataColumns.Add("ServerID");
                ServerListBuilder.TombstoneDataColumns.Add("ServerIP");
                ServerListBuilder.TombstoneDataColumns.Add("ServerBuyTime");

                // 相关的跟踪列
                ServerListBuilder.CreationTrackingColumn = strCreationTrackingColumn;
                ServerListBuilder.UpdateTrackingColumn = strUpdateTrackingColumn;
                ServerListBuilder.DeletionTrackingColumn = strDeletionTrackingColumn;
                ServerListBuilder.UpdateOriginatorIdColumn = strUpdateOriginatorIdColumn;

                SyncAdapter ServerListSyncAdapter = ServerListBuilder.ToSyncAdapter();
                ((SqlParameter)ServerListSyncAdapter.SelectIncrementalInsertsCommand.Parameters["@sync_last_received_anchor"]).DbType = DbType.Binary;
                ((SqlParameter)ServerListSyncAdapter.SelectIncrementalInsertsCommand.Parameters["@sync_new_received_anchor"]).DbType = DbType.Binary;
                serverSyncProvider.SyncAdapters.Add(ServerListSyncAdapter);
                #endregion

                #region UserList准备
                SqlSyncAdapterBuilder UserListBuilder = new SqlSyncAdapterBuilder();
                UserListBuilder.SyncDirection = SyncDirection.Bidirectional;
                UserListBuilder.Connection = serverConnection;

                // 主表及其相关列
                UserListBuilder.TableName = strUserListTableName;
                UserListBuilder.DataColumns.Add("UserID");
                UserListBuilder.DataColumns.Add("UserName");
                UserListBuilder.DataColumns.Add("UserPW");
 
                // tombstone表及其相关列
                UserListBuilder.TombstoneTableName = strUserListTableName + "_tombstone";
                UserListBuilder.TombstoneDataColumns.Add("UserID");
                UserListBuilder.TombstoneDataColumns.Add("UserName");
                UserListBuilder.TombstoneDataColumns.Add("UserPW");
 
                // 相关的跟踪列
                UserListBuilder.CreationTrackingColumn = strCreationTrackingColumn;
                UserListBuilder.UpdateTrackingColumn = strUpdateTrackingColumn;
                UserListBuilder.DeletionTrackingColumn = strDeletionTrackingColumn;
                UserListBuilder.UpdateOriginatorIdColumn = strUpdateOriginatorIdColumn;


                SyncAdapter UserListSyncAdapter = UserListBuilder.ToSyncAdapter();
                ((SqlParameter)UserListSyncAdapter.SelectIncrementalInsertsCommand.Parameters["@sync_last_received_anchor"]).DbType = DbType.Binary;
                ((SqlParameter)UserListSyncAdapter.SelectIncrementalInsertsCommand.Parameters["@sync_new_received_anchor"]).DbType = DbType.Binary;
                serverSyncProvider.SyncAdapters.Add(UserListSyncAdapter);
                #endregion

                #endregion

                #region 数据同步
                SqlCommand anchorCmd = new SqlCommand();
                anchorCmd.CommandType = CommandType.Text;
                anchorCmd.CommandText = "Select @" + SyncSession.SyncNewReceivedAnchor + "= @@DBTS";// " = @@DBTS";
                anchorCmd.Parameters.Add("@" + SyncSession.SyncNewReceivedAnchor, SqlDbType.Timestamp).Direction = ParameterDirection.Output;
                serverSyncProvider.SelectNewAnchorCommand = anchorCmd;

                SqlCommand clientIdCmd = new SqlCommand();
                clientIdCmd.CommandType = CommandType.Text;
                clientIdCmd.CommandText = "SELECT @" + SyncSession.SyncOriginatorId + " = 1";
                clientIdCmd.Parameters.Add("@" + SyncSession.SyncOriginatorId, SqlDbType.Int).Direction = ParameterDirection.Output;

                serverSyncProvider.SelectClientIdCommand = clientIdCmd;

                syncAgent.Synchronize();
                #endregion  

            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        #endregion

        #region 增量操作
        #region 产生各种随机数据
        /// <summary>
        /// 产生随机IP
        /// </summary>
        /// <returns></returns>
        private string ReturnRandomIP(Random rand)
        {
            string sRe = "192.168." + rand.Next(0, 256).ToString() + "." + rand.Next(0, 256).ToString();
            return sRe;
        }
        /// <summary>
        /// 产生随机ID
        /// </summary>
        /// <param name="rand"></param>
        /// <returns></returns>
        private string ReturnRandomID(Random rand)
        {
            return rand.Next((int)(DateTime.Now.ToFileTime() % 10000)).ToString();
        }

        /// <summary>
        /// 产生随机字符
        /// </summary>
        /// <param name="rand"></param>
        /// <returns></returns>
        private char ReturnRandomChar(Random rand)
        {
            int ret = rand.Next(122);
            while (ret < 48 || (ret > 57 && ret < 65) || (ret > 90 && ret < 97))
            {
                ret = rand.Next(122);
            }
            return (char)ret;
        }
        /// <summary>
        /// 产生随机字符串
        /// </summary>
        /// <param name="rand"></param>
        /// <returns></returns>
        private string ReturnRandomString(Random rand)
        {
            int length = 10;
            StringBuilder sb = new StringBuilder(length);
            for (int i = 0; i < length; i++)
            {
                sb.Append(ReturnRandomChar(rand));
            }
            return sb.ToString();
        }
        #endregion

        /// <summary>
        /// 返回一个随机操作的ID
        /// </summary>
        private string ReturnRandomUpdateOrDeleteID(Random rand)
        {
            DataTable dtRef = new DataTable();
            if (strOperationTable == strServerListTableName)
            {
                if (blnOperationClient)
                {
                    dtRef = (DataTable)dgSLClient.DataSource;
                }
                else
                {
                    dtRef = (DataTable)dgSLServer.DataSource;
                }
            }
            else
            {
                if (blnOperationClient)
                {
                    dtRef = (DataTable)dgULClient.DataSource;
                }
                else
                {
                    dtRef = (DataTable)dgULServer.DataSource;
                }
            }
            int iTotalRows = dtRef.Rows.Count;
            return dtRef.Rows[rand.Next(0, iTotalRows)][0].ToString();
        }
        /// <summary>
        /// 具体执行增删改的操作
        /// </summary>
        /// <param name="CommandString"></param>
        private void ExecuteOperation(string CommandString)
        {
            if (blnOperationClient)
            {
                #region 客户端操作
                if (CheckClientDb())
                {
                    SqlCeConnection conn = new SqlCeConnection(strClientConnectString);
                    SqlCeCommand cmd = new SqlCeCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = CommandString.ToString();
                    try
                    {
                        conn.Open();
                        cmd.ExecuteNonQuery();
                    }
                    catch (System.Exception exp)
                    {
                        MessageBox.Show(exp.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
                else
                {
                    MessageBox.Show(strNoClientDBWarnString);
                }
                #endregion
            }
            else
            {
                #region 服务器端操作
                SqlConnection conn = new SqlConnection(strServerConnectString);
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = CommandString;
                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (System.Exception exp)
                {
                    MessageBox.Show(exp.Message);
                }
                finally
                {
                    conn.Close();
                }
                #endregion
            }

            RefreshData(strOperationTable);
        }

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btUpdate_Click(object sender, EventArgs e)
        {
            btUpdate.Enabled = false;

            #region 初始化
            GetEnvironmentValue();
            Random rand = new Random();
            StringBuilder sSql = new StringBuilder();
            if (strOperationTable == strServerListTableName)
            {
                //update ServerList set ServerIP='123.12',ServerBuyTime=GetDate() where ServerID=1
                sSql.Append(@" update ServerList ");
                sSql.Append(@" set ServerIP='"+ReturnRandomIP(rand)+"', ");       //ServerIP
                sSql.Append(@" ServerBuyTime=GetDate() ");      //ServerBuyTime
                sSql.Append(@" where ServerID="+ReturnRandomUpdateOrDeleteID(rand)+" ");    //UpdateID
            }
            else
            {
                sSql.Append(@" update UserList ");
                sSql.Append(@" set UserName = '"+ReturnRandomString(rand)+"', ");         //UserName
                sSql.Append(@" UserPW = '"+ReturnRandomString(rand)+"' ");                //UserPW
                sSql.Append(@" where UserID="+ReturnRandomUpdateOrDeleteID(rand)+" ");    //UpdateID
            }
            #endregion

            ExecuteOperation(sSql.ToString());

            btUpdate.Enabled = true;
        }

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btAdd_Click(object sender, EventArgs e)
        {
            btAdd.Enabled = false;

            #region 初始化
            GetEnvironmentValue();
            Random rand = new Random();
            StringBuilder sSql = new StringBuilder();
            if (strOperationTable == strServerListTableName)
            {
                sSql.Append(@" insert into ServerList (ServerID, ServerIP, ServerBuyTime) ");
                sSql.Append(@" values( ");
                sSql.Append(@" " + ReturnRandomID(rand) + ", ");   //ServerID
                sSql.Append(@" '" + ReturnRandomIP(rand) + "', "); //ServerIP
                sSql.Append(@" GetDate() ");    //ServerBuyTime
                sSql.Append(@" ) ");
            }
            else
            {
                sSql.Append(@" insert into UserList (UserID, UserName, UserPW) ");
                sSql.Append(@" values( ");
                sSql.Append(@" " + ReturnRandomID(rand) + ", ");       //UserID
                sSql.Append(@" '" + ReturnRandomString(rand) + "', ");    //UserName
                sSql.Append(@" '" + ReturnRandomString(rand) + "' ");     //UserPW
                sSql.Append(@" ) ");
            }
            #endregion

            ExecuteOperation(sSql.ToString());

            btAdd.Enabled = true;
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btDelete_Click(object sender, EventArgs e)
        {
            btDelete.Enabled = false;

            #region 初始化
            GetEnvironmentValue();
            Random rand = new Random();
            StringBuilder sSql = new StringBuilder();
            if (strOperationTable == strServerListTableName)
            {
                sSql.Append(@"delete from ServerList where ServerID="+ReturnRandomUpdateOrDeleteID(rand));
            }
            else
            {
                sSql.Append(@"delete from UserList where UserID="+ReturnRandomUpdateOrDeleteID(rand));
            }
            #endregion

            ExecuteOperation(sSql.ToString());

            btDelete.Enabled = true;
        }
        #endregion

    }
}
 


Demo与源码下载: 

code.zip (68.69 kb)

release.zip (12.88 kb)

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

发布最新C#3.5开发的ReSharper4.0 for VS2005/2008 注册机

by ξ箫音ξ 6/17/2008 6:51:00 AM
ReSharper是一款微软Microsoft Visual Studio 2005 和Microsoft Visual Studio .NET 2008和的插件,也是目前ReSharper4.0-VS2005和ReSharper4.0-VS2008编程插件中最强的插件之一,它提供了智能 C#辅助编码功能和实时错误显示功能,并支持重构。提供流行C#代码智能帮助,高亮度显示实时纠错以及重新参数化等功能。ReSharper为C#开发人 员提供许多能够有效提高生产力的功能,这些功能已被成千上万使用IntelliJ IDEA的Java程序员所采用。ReSharper为C#开发人员提供了许多强有力的特性,极大地提高了开发效率。

 
 
 
 
  使用说明:

   1、此注册机算是网络上最豪华的注册机,界面漂亮功能强大;有微型播放器功能,并支持mp3,wma等通用格式。
   2、程序启动后会自动播放“光”歌曲,并转到音乐库”界面,可以在“播放控制”选项采取相应操作。
   3、如使用ReSharper 4.0新版注册机,请切换到注册码按钮,输入你自己想要的名字,按生成按钮生成密匙。启动VS 2005/2008菜单,选择ReSharper菜单-License Information-Enter License,输入用户名和密匙Expiration Date:never 注册成功。
   4、切换到"音乐库"按钮标签,即可选择你要播放的歌曲。如需要添加歌曲,点击歌曲表,按右鼠标,菜单中选择你要播放的文件夹和音乐文件。
   5、有的ReSharper4.0-VS2008版本会没有注册选项,但是你注册过ReSharper4.0-VS2008版本后,2008版本即可解除限制。
  
程序特色如下:
1.语法错误高亮显示
2.搜索
3.代码助手
4.自动更正
5.活动模板
6.代码格式化
7.重构
8.代码生成
9.其它特征
10.代码导航
11.代码完成

   此次注册机是采用Microsoft Visual Studio 2008最新开发技术设计,所以需要安装最新的Microsoft .NET Framework v3.5 正式版和Windows Media Player9.0.

   ReSharper 4.0 for VS2005/2008注册机是目前位置针对ReSharper 4.0版本最好的注册机,能采用破解RSA技术,生成密匙能完全解除程序本身功能和时间的限制。

   此程序由我和程序员心疤用.net4.0编写完成。希望此次公布能够为广大.net编程爱好者更多的帮助。如遇到什么问题,请到箫心论坛http://it.crfly.com/发帖咨询。 

 ReSharper4.0

下载地址:http://download.jetbrains.com/resharper/ReSharperSetup.4.0.msi

注册机: 

crReSharper4.zip (3.67 mb)

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

关于asp.net中的缓存管理的分析

by ξ箫音ξ 6/16/2008 5:51:00 PM
导言
我比较喜欢使用的阶段性缓存管理(高速缓存)。但在概念上在这两者之间是没有分别的。现在让我们讨论不同方面的缓存管理(状态管理)在asp.net 。

虽然缓存管理问题不是一个在Windows的应用,它一直是一个挑战,在网络环境下。由于HTTP是一种协议和Web服务器识别用户之间不同的要求,它就成为非常重要的是,我们认识到一个特定的用户之间不同的要求,并存储数据,以便它能够重新使用之间的不同的要求。 asp.net提供了许多功能,存储数据,无论是在客户端(浏览器)和服务器( Web服务器),有时我们感到困惑什么时候该使用什么。在asp.net 里,我们碰到的这些功能,例如会话应用和高速缓存的对象,但最重要的是,我们要了解它们之间的差异,为了有效地使用他们在Web应用程序。

背景
在这篇文章中,我会解释,不同的缓存管理可供选择在asp.net的方案 。在Web应用程序,有时我们需要数据存储在服务器端,以避免付出高昂代价的数据检索操作,从数据存储和时间消费的数据格式的逻辑来提高应用程式效能,以及要求以后重新使用相同的数据。因此,要达到这个目标,我们需要存储(缓存)的数据在服务器端。

缓存可以帮助我们实现三个重要方面, QoS (服务质量) :

性能和缓存提高,使应用性能也随之提高,通过最小的数据检索和格式化操作。
可扩展性:由于缓存的最小的数据检索和格式化操作,减少了负荷对服务器的资源,从而增加了可扩展性的应用。
可用性:   由于应用程序使用的数据,从缓存申请有可能将产生的错误会在其他系统和数据库出现。
不同的选择
在Web应用程序,我们可以高速缓存数据,页面等无论是在服务器和客户端。让我们来看看在不同的可供选择的方案在asp.net为缓存的数据都在服务器和客户端。

服务器端的缓存管理
asp.net会话状态
asp.net会话状态是用来缓存数据每用户会话。这意味着,数据不能共享跨多个用户,数据使用量是有限的,以用户会话,这是创造asp.net会话的目的。

asp.net会话状态可以管理在三种不同的方法:

inproc :储存在Aspnet_wp.exe进程。会话资料时,遗失的过程中,或应用程序域是循环的。
stateserver :会话状态存储在一个单独的进程( a spnet_state.exe) ,它可以储存在一个不同的机器。因为它可以储存在不同的机器,此选项将工作在一个Web场的情况。
sqlserver :会话状态存储在一个SQL Server数据库。这个选项也将工作在一个Web场的情况。
无论是在stateserver和sqlserver选项,我们需要确保我们的对象缓存是串行数据仓库,是地地道道的过程系统。这两个方案的影响,该inproc的选择应用性能 作为数据检索和储存业务所采取更多的时候对比。因此,基于我们的应用要求,我们应该选择的选项,最适合我们的要求。

下面的示例显示如何Session对象可以用来在代码如下:

string empNum = Request.QueryString["empnum"];
if (empNum != null)
{
    string details = null;

    if (Session["EMP_DETAILS"] == null)
    {
        //Get Employee Details for employee number passed
        string details = GetEmployeeDetails(Convert.ToInt32(empNum));

        Session["EMP_DETAILS"] = details;
    }
    else
    {
        details = Session["EMP_DETAILS"];
    }

    //send it to the browser
    Response.Write(details);
}

asp.net应用程序对象
asp.net提供了一个对象所谓的应用对象来存储数据,是任何人都可以获得所有用户的请求。这个对象是联系在一起的应用,这是重新创建和启 动每一次的应用。不同的asp.net会话的对象,这个对象是方便所有用户的请求。由于这是仓库设立和维持在一个应用程序域空间,这不应被用于数据存储在Web场的情 况。这个选项是非常有用与数据存储一样,应用元数据( config文件的数据) ,当Application对象在应用程序启动起来时,可以用在应用而不需要重新装载它,并每一次为每个用户的请求。但如果是有规定的无效缓存的 数据,每当有任何改变到config文件,而应用程序正在运行,此选项不应当被用来作为它没有提供任何功能缓存数据。因此,在这种情况下其他选项一 样,asp.net Cache对象应使用,解释如下:

asp.net Cache对象
asp.net Cache对象是我最喜爱的缓存机制。这就是为什么我爱较多地了解它。asp.net提供了一个关键值配对的对象-Cache对象,其中,可在system.web.caching名字空间的范围。不同的asp.net Session对象,这个对象是方便所有用户的请求。

虽然两者的应用和高速缓存的物体看起来一样,