[转载]Doophp 用过的最快的php框架 | lamppr

mikel阅读(949)

[转载]Doophp 用过的最快的php框架 | lamppr.

前几天在Lamppr.com上看到Doophp的介绍,传说是速度最快的php框架,于是google了一把,看了一下很多评论,貌似不错,来到Doophp的官网,稍微看了一下就把Framework给下载下来了,但是不知什么原因,API的包下载下来解压缩有问题,也许是操作系统原因吧。不过不碍事,马上动手搭建起来。

先介绍一下文件夹结构,解压出来3个文件夹和4个TXT文件,TXT文件中我就看了INSTALL和CHANGELOG,看一下怎么安装,更改日志的话我 的目的主要是看看里面有那些内容,作者最近修改的BUG在哪些方面,这样有个粗略的印象。文件夹包括dooframework,这个是doo的框 架,demo是一些样例,app主要就是工作的目录。

app这个目录下是开发者真正比较关心的(虽然同样关心dooframework这个目录),里面有已经写好的index.php(应用程序的入口,负责 初始化配置,路由,数据库等),一个.htaccess文件(主要用来让url更好看,真正做到RESTful),global文件夹(静态文件,比如 css,js等),protected文件夹(php的工作目录,里面有控制器,模型,视图,插件,配置文件,缓存等目录),tools文件夹(这个文件 夹还是比较有用,开始用的时候可以使用他生成控制器,模型,路由等等,值得一提的是模型里面支持各种关系,比较好用)。

 

好了,这时就可以把app下的所有文件和dooframework搬到新建的虚拟主机下,开始doophp之旅了。

Open Source的好处就是代码开源,文档全,有做Demo,因此搭建起来毫不费力,改了一下config下的common.conf.php的一些配置,默认应用就跑起来了。

列一下需要注意的地方:    SITE_PATH 站点的文件路径,BASE_PATH 框架的文件路径,可以自定义错误页面,可以定memcache的服务器等。

当然还有数据库配置文件,路由文件,不过这些一开始都不需要配置。

稍微配置一下后,看到的页面是doo自带的页面,这个时候可以点击默认页提供的几个链接看看,有一个是可以到Tools目录下的,其中有工具还是很有用的,比如生成router,填写好地址,控制器和控制器方法,会直接出来一条路由语句,形如:

$route[‘*’][‘/home’] = array(’HomeController’, ‘index’);

非常方便,其实这个也可以到config目录下的routers.conf.php去查看,都有,作者的注释写的非常好,很清晰,一下就能明白怎么回事, 作为用户来说该怎么做,这点也反映到框架本身,比如我在使用视图的时候,不知道有没有语法支持循环,判断,外部include模板等功能,打开框架里面的 Dooview class一看,一目了然,各种支持情况都有写,而且还有示例,可见作者非常认真啊。实现的功能函数也很容易理解运作机制。粗看了一下,几个东西都已经能 够实现了,比如MVC,URI Router,Rest,ORM, Template等,而且上手很快,运行速度也很快。

讲一下几个核心的地方和我觉得需要改进的东西:

1 . MVC, 实现的还是很好的,三个部分都分开,依靠URI,调用相应的Controller,然后Controller里面Load需要的Template。

2. ORM, 这块我是觉得做的很不错的,是类似Hibernate的实现,不是Activerecord,怪不得官网上说它不是抄ROR的, :)

3. Template,有点像CI的,如果模板在不同文件夹中,不好操作,须改框架源码。

4. Tutorial做得不够完善,还是需要时间和人去做的,不过好在代码注释相当好,很容易理解。

5. 有迁移脚本,没有深究,表面上看应该还在持续改进中。

6. 社区一般,可能由于是中国人写的,所以中国社区比较活跃,其他的都一般。

7. 数据验证,分页控件,图片上传处理,日志这些都有,不过本人没有深入,就瞄了一眼源码。

由于没有深究,也没有更深入的理解,不过,本人还是觉得这个框架可以一试,基本的一些东西都已经有了,速度也很快,中小型站点应该没有问题。虽然本人不是 特别拥护php框架,甚至有时候是觉得php不应该有所谓的框架,但是在未来还是会一直关注Doophp,起码它在很大程度上增加了程序员的效率,节省很 多时间和精力。祝愿这个框架继续进步。

[转载]淘宝AppKey申请操作说明 - EasyShop - 博客园

mikel阅读(1044)

[转载]淘宝AppKey申请操作说明 – EasyShop – 博客园.

淘宝网店的商品数据,订单数据都提供了第3方数据接口,可通过AppKey访问。

以下图示申请淘宝AppKey的操作步骤,大概需要5分钟:

第1步:登录淘宝官方网站 http://open.taobao.com

第2步:在打开的页面中“创建应用”

第3步:填入应用名称,选择“淘宝商家”,录入验证码后提交。

如果提示“您不具有创建[淘宝商家]标签应用的身份”,请选择“淘拍档”后提交。

“淘拍档”的AppKey仅有初级权限,申请上线前还要申请“升级权限”。“淘宝商家”的AppKey具有最高权限,不必“升级权限”。

第4步: 把淘宝网店的网址填入”回调页面URL”后,“进入正式环境测试”。

第5步:立即申请上线,等待淘宝审核,估计1个工作日后审核通过。

如果是“淘拍档”应用请先“升级权限”到最高级权限。

第6步:应用成功创建后,可以在“应用列表”中打开该应用,看到AppKey,密码会自动发送到你的邮箱中。

第7步:查看Email,获得AppKey和密码,将AppKey和密码填入EasyShop的淘宝网店设置中,完成操作。

 

注意:

请保护 AppKey和密码 的安全,如果泄漏可在淘宝应用管理中”重置App Secret”(见第6步图示)。

上线审核通过后即可在EasyShop中检索网店订单和商品数据。

[转载]EasyUI之Form load函数IE8下设置Radio或Checkbox的BUG - 雪雁 - 博客园

mikel阅读(1513)

转载EasyUI之Form load函数IE8下设置Radio或Checkbox的BUG – 雪雁 – 博客园.

EasyUI的form的load函数很好用,表单赋值就靠它了,简单方便。我们可以指定url以Ajax加载,如:

 1: $('#ff').form('load', 'ajax/common')

JSON如下:

image

也可以指定json,比如:

$('form').form('load', {"初审申请日期":"2013-05-30","伦理委员会受理编号":"123234",

"是否否决过":"是","是否终止过":"是","主要研究者姓名":"37","主要研究者单位":"123"

,"主要研究者科室":"上海市XXXXXXXX医院","主要研究者联系电话":"123",

"主要研究者联系传真":"123","主要研究者联系Email":"123",

"主要研究者指定联系人姓名":"123","主要研究者指定联系人电话":"123",

"主要研究者指定联系人Email":"123","专业负责人":"34","研究方案名称":"123123123",

"研究方案编号":"123123123","申办者名称":"123123123","申办者地址":"123123123",

"申办者联系人":"123123123","申办者电话":"1231231231","临床监查员姓名":"1232312312"

,"临床监查员电话":"12312313","本中心招募受试者人数":"12313123","总人数":"123123123",

"预期试验期限开始":"2013-06-15","预期试验期限结束":"2013-06-25","试验用品":"药物",

"产品名称":"werqre","药物分类":"种类一","医疗器械分类":"种类一","试剂分类":"种类一",
"使用方式":"创伤性","多中心试验":"是","研究形式":"第一期","研究形式观察":"观察",

"研究对象":"正常人","年龄范围18-44":"18-44","儿童年龄小于1":"小于1","弱势群体孕妇胎儿":"孕妇胎儿","弱势群体文盲":"文盲","要求排除对象女性":"女性","要求排除对象其他补充":"","特殊条件隔离区":"隔离区","特殊条件管制药品":"管制药品","特殊条件器官移植备注":"","特殊条件其他备注":"","利益冲突声明":"123123"});

不过需要注意一点的是,其是根据控件的name属性来匹配的。

最近在使用EasyUI时,发现表单上如果使用radio时,在IE8会加载出错,错误如下:

“in”的操作数无效: 缺少 Object

对于这种问题,只能见招拆招了。首先分析JQuery.easyui.min.js,很快就可以发现,判断代码在这里:

 1: function _3fa(name,val){
 2: var rr=$(_3f7).find("input[name=\""+name+"\"][type=radio], input[name=\""+name+"\"][type=checkbox]");
 3: rr._propAttr("checked",false);
 4: rr.each(function(){
 5: var f=$(this);
 6: if(f.val()==String(val)||$.inArray(f.val(),val)>=0){
 7: f._propAttr("checked",true);
 8: }
 9: });
 10: return rr;
 11: };

因为是IE8有问题,那么可以在rr上设置一个断点,并且设置一个条件,比如:

image

这个条件值是radio的name。

跟踪下来就会发现,bug在这里:

 1: if(f.val()==String(val)||$.inArray(f.val(),val)>=0){
 2: f._propAttr("checked",true);
 3: }

在调试窗口输入就会发现:

image

看来这还是JQuery的bug,不过不能算bug吧,所谓拉屎不出不能怪坑太小,开发者不判断,不能怪别人,于是bug很好解决了:

 1: function _3fa(name,val){
 2: var rr=$(_3f7).find("input[name=\""+name+"\"][type=radio], input[name=\""+name+"\"][type=checkbox]");
 3: rr._propAttr("checked",false);
 4: rr.each(function(){
 5: var f=$(this);
 6: if(f.val()==String(val)|| ($.isArray(val) && $.inArray(f.val(),val)>=0)){
 7: f._propAttr("checked",true);
 8: }
 9: });
 10: return rr;
 11: };

所以有bug不要怕,只要有办法找到原因就好(开发人员工具一定要用好,但不要盲目下手)。希望EasyUI的下一个版本能够解决该问题。

[转载]Visual Studio 2013预览版开放下载!_IT新闻_博客园

mikel阅读(826)

[转载]Visual Studio 2013预览版开放下载!_IT新闻_博客园.

在今天的 BUILD 全球开发者大会上,微软发布了 Visual Studio 2013 和 Team Foundation Server 2013 的预览版

Visual Studio 2013 预览版包含以下版本:Ultimate 旗舰版、Premium 高级版、Professional 专业版、Test Professional 测试专业版、Express 版,包含简体中文等多种语言版本。

官方下载页面:http://www.microsoft.com/visualstudio/eng/2013-downloads

Visual Studio 2013 预览版开放下载!

Visual Studio 2013 预览版开放下载!

  Visual Studio 2013 的新功能很多,它提供了敏捷项目组合管理(Agile portfolio management),提高团队协作;整合微软 System Center IT 管理平台。

Visual Studio 2013 支持代码评论功能,它为开发人员打开了一扇窗,能让你对每个功能添加注释,补充上更多的内容,增加代码的透明度和可追溯性。

此外,Visual Studio 2013 新增了代码信息指示(Code information indicators)、团队工作室(Team Room)、身份识别、.NET 内存转储分析仪、Git 支持……

Visual Studio 2013 预览版开放下载!

[转载]20个优秀的前端框架-CSDN.NET

mikel阅读(1059)

[转载]20个优秀的前端框架-CSDN.NET.

摘要:前端开发并不难,但是要想做得优雅、健壮并不容易,使用一个好的前端框架能够帮你很多忙。本文列举了20个优秀的前端框架,供选择使用。

1. Twitter BootStrap (Apache v2.0;响应式)

时髦、直观并且强大的前端框架,让Web开发变得更加容易。

2. Foundation (MIT;响应式)

最先进的响应式前端框架。

3. 960gs(GPL&MIT;响应式)

960gs提供了一个简单的网格系统,适合快速开发。

4. Skeleton(MIT;响应式)

非常漂亮的Web模板,适合响应式、移动友好的开发。

5. 99lime HTML KickStart(Free)

适合网站快速开发的极简HTML构建模块。

6. Kube(Free;响应式)

面向专业人员的CSS框架。

7. Less Framework(MIT;响应式)

自适应的CSS网格系统。

8. Flameinwork(Free)

适合懒人开发者的前端微框架。

9. G5 Framework(Free)

(x)HTML5、CSS、PHP前端开发框架。

10. Easy Framework(Free)

Easy Framework是一个一体化前端解决方案,分structural、 presentational、interactive三层。

11. Blueprint(Free)

一个旨在减少开发时间的前端框架。

12. YAML(Creative Commons)

(x)HTML+CSS框架,适合开发现代化浮动布局。

13. BlueTrip(Free)

一个功能全面、并且美丽的CSS框架,适合于Blueprint搭配使用。

14. YUI3:Grids CSS(BSD)

YUI Grids CSS是最著名的CSS框架之一,是由Yahoo开发小组开发而成。 YUI Grids CSS为开发者提供了预先设置的四种不同页面宽度,六种不同的模板。

15. 52framework(Creative Commons)

对HTML5支持非常好,简单易用。


16. elastiCSS(MIT)

一个基于Web接口和印刷布局的简单CSS框架。


17. Emastic(Free)

一个与众不同的CSS框架。

18. Fluid 960 Gride System(GPL/MIT)

 

Fluid 960 Grid System的模版是根据Nathan Smith之前的作品而创建的。即960 Grid System:传承了MooTools和JQuery JavaScript libraries的效果。

19. xCSS(MIT)

一个面向对象的CSS框架,能让你的工作流更加简洁。xCSS基于CSS,可以在开发复杂样式时,提供面向对象的工作流。


20. EM CSS Framework(MIT/GPL)

EM CSS Framework提供了一个960px宽 + 12 列网格系统 + CSS的通用样式。

原文链接: usablica.github.com

[转载]那天有个小孩教我WCF[一][1/3] - AaronYang - 博客园

mikel阅读(879)

[转载]那天有个小孩教我WCF[一][1/3] – AaronYang – 博客园.

既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈

前言:

第一篇嘛,不细讲,步步教你创建一个简单SOA案例,对WCF有个基本的认识,我不会细讲概念

 

 

1.1 SOA简介

     SOA(Service-Oriented Architecture,面向服务架构),既是一种编程模式,也是软件开发的一种架构方法。

根 据这种架构方法,应用程序就会由“具有一定行为(服务)的功能”单元组成的。<如果你写过WebService,你就会更好理解了,如果你以前用三 层形式写,那么原来的数据访问层,你只能供你本程序中的程序调用,假如你用了这种架构,例如,根据一个ISBN查询到对应书的价格,本来是一个方法,如果 你用这个架构,这个方法(行为)就会变成一种服务,这个服务绑定到一个url地址上,然后你根据这个url加个特殊的参数(例如ISBN)就可以返回一个 json或者xml,然后你就可以调用了,那么例如你的andriod平板,ipad,只要可以通过url就可以获得你想要的数据,就可以达到跨平台的效 果,跟WebService很像,但是WCF完全不会是那么简单的>

 

 

1.2 基本开始

 

前言:

我们准备完成一个简单的新闻发布系统

内部编辑发布新闻有更多的功能,但是外部我只提供查看功能,添加自己的新的新闻,但是新闻类型是 好友提供

可能由于我们的新闻系统比较好,我们提供一些接口,让别人自己做自己的客户端,也能实现发布新闻,但是我们的源代码不可能给人家的,所以我们就可以 用WCF去做了,再比如,我们想做个iphone应用,别人下载我们的应用也可以查看我们发布的新闻,我们不可能在苹果手机上去访问数据库,我们通过服务 去更新数据,中间可以利用WCF实现跨平台,现在我们开始做吧

 

Contract是契约的意思,最常见的,务必背诵

1.打开Visual Studio 2010,新建一个空白的解决方案

image

命名NewsSystem,点击确定

然后右击解决方案,添加4个解决方案文件夹

Clients,Hosts,Services,Interfaces

image

image

 

 

2.右击Interfaces,添加2个类库

NewsInterface

NewsExternalInterface

image

添加WCF中最重要的两个程序集引用

imageimage

同样的操作对NewsExternalInterface类库也操作下

 

 

3. 删除默认添加的两个Class1.cs文件,分别对应向两个类库添加INewsInterface,INewsExternalInterface

image

 

 

4.向两个接口,都添加下面命名空间引用

using System.Runtime.Serialization;
using System.ServiceModel;

 

5.interface前面加上 public关键字

例如:

imageimage

 

 

6.实体类,我们就不分开写了,直接写在对应的接口里面吧,这里只是演示WCF的使用,数据库操作,直接使用linq to SQL了,企业里大部分用EF code first,关于这个以后有时间再讲。为了不与数据库的表明冲突,后面加一个Dto了

主要提前领略一下 操作契约,数据契约,枚举的使用

我们先操作NewsInterface类库

 

 

6.1新建一个枚举,NewsTypeEnum,演示枚举的基本写法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace NewsInterface
{
    [DataContract]
    public enum NewsTypeEnum
    {
        [EnumMember]
        Sports,
        [EnumMember]
        IT,
        [EnumMember]
        Country,
        [EnumMember]
        Funny
    }
}

NewsTypeEnum是一个公开的枚举类型,注意,enum前必须加上DataContract特性,枚举类型每个常量都必须使用EnumMember特性来表示

 

 

6.2 添加一个NewsDto实体类, 演示实体的基本写法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;

namespace NewsInterface
{
    [DataContract]
    public class NewsDto
    {
        /// <summary>
        /// 新闻标题
        /// </summary>
        [DataMember]
        public string NewsTitle { get; set; }

        /// <summary>
        /// 新闻内容
        /// </summary>
        [DataMember]
        public string Content { get; set; }

        /// <summary>
        /// 新闻类型,这里顺便演示下枚举
        /// </summary>
        [DataMember]
        public NewsTypeEnum NewsType { get; set; }

        /// <summary>
        /// 发布时间
        /// </summary>
        [DataMember]
        public DateTime publishTime { get; set; }

        /// <summary>
        /// 最后更新时间
        /// </summary>
        [DataMember]
        public DateTime LastUpdateTime { get; set; }

        /// <summary>
        /// 作者
        /// </summary>
        [DataMember]
        public string Author { get; set; }

        /// <summary>
        /// 最后修改作者
        /// </summary>
        [DataMember]
        public string LastAuthor { get; set; }

        /// <summary>
        /// 阅读量
        /// </summary>
        [DataMember]
        public int ReadCount { get; set; }
    }
}

 

 

 

6.3 打开INewsInterface,添加公开方法,演示 普通的接口,这里在WCF中专业名叫数据契约

我们只演示基本的简单的更删改查,还有个显示新闻关联图片5个方法,再次声明,我不讲新闻发布的新闻逻辑,这里只是演示WCF的用法

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;

namespace NewsInterface
{
    [ServiceContract]
    public interface INewsInterface
    {
        /// <summary>
        /// 添加一条新闻
        /// </summary>
        /// <param name="dto">新闻实体</param>
        /// <returns>添加成功后返回添加成功后的ID</returns>
        [OperationContract]
        int NewsAdd(NewsDto dto);

        /// <summary>
        /// 删除一条新闻
        /// </summary>
        /// <param name="dto">新闻实体</param>
        /// <returns>是否删除成功</returns>
        [OperationContract]
        bool NewsDelete(NewsDto dto);

        /// <summary>
        /// 更新一条新闻
        /// </summary>
        /// <param name="dto">新闻实体</param>
        /// <returns>是否更新成功</returns>
        [OperationContract]
        bool NewsUpdate(NewsDto dto);

        /// <summary>
        /// 获得所有新闻
        /// </summary>
        /// <returns>返回新闻列表</returns>
        [OperationContract]
        List<NewsDto> NewsList();

        /// <summary>
        /// 根据ID获得新闻的图片
        /// </summary>
        /// <param name="Id">新闻编号</param>
        /// <returns>新闻相关联的图片</returns>
        [OperationContract]
        byte[] GetNewsImage(string Id);

    }
}

 

 

7.创建服务

右击 Services解决方案文件夹,添加一个类库,名字叫NewsServices

将Class1.cs文件名改下

修改名字

 

 

7.1 先编译解决方案,然后 添加引用

imageimage

 

 

7.2 实现接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;
using NewsInterface;

namespace NewsServices
{
    public class NewsImpl:INewsInterface
    {

        public int NewsAdd(NewsDto dto)
        {
            throw new NotImplementedException();
        }

        public bool NewsDelete(NewsDto dto)
        {
            throw new NotImplementedException();
        }

        public bool NewsUpdate(NewsDto dto)
        {
            throw new NotImplementedException();
        }

        public List<NewsDto> NewsList()
        {
            throw new NotImplementedException();
        }

        public byte[] GetNewsImage(string Id)
        {
            throw new NotImplementedException();
        }
    }
}

 

 

8. 添加宿主Hosts文件夹下,我们以控制台演示,宿主可以是很多种形式的,具体以后讲

image

同时修改属性 用.NET Framework4

image

然后添加引用

imageimage

打开Program.cs填入一下基本代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;
using NewsServices;

namespace NewsHosts
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("服务宿主正在打开...");
            try
            {
                //ToDo 等待开启服务代码

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.WriteLine("打开成功!");
            Console.ReadKey();
        }
    }
}

 

使用ServiceHost对象,添加Program类中

在try…catch代码块中添加如下代码:

image

 

添加宿主服务配置,我们利用WCF工具配置,也可以手动写

默认生成的App.config右击它,没有使用WCF工具配置,我们打开

vs2010菜单栏中的 WCF服务配置编辑器

image

使用之前,请确保你的解决方案重新生成了

image

下面我录个屏,讲一下配置

这里注意记住终结点这个地址,通过这个地址,我们的其他客户端,就可以获得我们想要的数据,我们可以直接把数据发在这个地址上,返回JSON或者 XML,或者是.NET对象,然后你继续处理,如果JSON或者XML,那么WEB就可以使用$.ajax等JQuery的方法获得数据了,用于显示在网 页上了

设置启动项,运行

设置主项目

 

 

先把服务能启动成功!

 

代码下载: 点我下载

 

 

明天2013年6月28日主要讲

9.创建数据库

10. 创建服务

11.客户端使用服务,实现更删改查,显示图片

 

[转载]Jquery 图片轮播实现原理总结 - 冲杀 - 博客园

mikel阅读(1307)

[转载]Jquery 图片轮播实现原理总结 – 冲杀 – 博客园.

以前要做图片轮播效果的时候,总是在网上找一段JQuery的复制粘贴进去,只索取不奉献,今个就把我对这个的实现原理讲解一下。

首先说下,我在网上找的例子全是用的UL 实现,其实大可不必,只要是能包含img标签的HTML标签都可以做轮播效果。利用JQuery的淡入淡出函数(fadeIn和fadeOut)。废话也不多说,边上代码边讲解。最后附上demo效果地址。

先HTML布局:

<!--整体容器-->
<div class="imgbox"><!--图片列表,除第一张显示外,其余隐藏-->
<ul>
	<li style="display: block;" title="清灵少女宛如梦境仙女"><a href="#">
<img src="http://p.dddddd.net/uploads/allimg/110927/11-11092G32227.jpg" alt="" /></a></li>
	<li title="美女海边性感透视装诱惑"><a href="#">
<img src="http://tu.dushiys.com/uploads/allimg/130621/1-130621145931-50.jpg" alt="" /></a></li>
	<li title="夏小薇:百变小魔女变身性感数码宝贝"><a href="#">
<img src="http://p.dddddd.net/uploads/allimg/130620/19-130620115013.jpg" alt="" /></a></li>
	<li title="夏小薇化身《杀破狼》粉色妖姬鲜嫩欲滴"><a href="#">
<img src="http://imgtu.5239.com/uploads/allimg/130315/5-130315135240.jpg" alt="" /></a></li>
</ul>
<div class="title_bg common"><!--图片标题背景--></div>
<!--图片显示标题-->
<div class="title common"></div>
<!--图片序号-->
<div class="pager common">
<ul>
	<li>4</li>
	<li>3</li>
	<li>2</li>
	<li style="background: #FF70Ad;">1</li>
</ul>
</div>
</div>

CSS部分:

img{border-style:none;}
.imgbox{width:530px;margin:100px;height:350px;}
.imgbox img{width:530px;height:350px;}
.imgbox ul{list-style-type:none;margin:0px;padding:0px;}
.imgbox ul li{display:none;}
.title_bg{z-index:1;background-color:#000;filter:alpha(opacity=30);-moz-opacity:0.3;opacity:0.3;}
.title{z-index:2;color:#FFF;text-indent:10px;font-size:14px;line-height:40px;}
.pager{z-index:3;}
.common{position:relative;height:40px;margin-top:-43px;}
.pager ul{margin-top:5px;}
.pager ul li{float:right;color:#FFF;font-size:15px;display:block;border:2px solid #e5eaff;width:25px;height:25px;margin-right:4px;margin-top:5px;text-align:center;line-height:25px;background-color:#6f4f67;cursor:pointer;}

脚本:

$(document).ready(function () {
(new CenterImgPlay()).Start();
});
function CenterImgPlay() {
this.list = $(".imgbox").children(":first").children();
this.indexs = [];
this.length = this.list.length;
//图片显示时间
this.timer = 3000;
this.showTitle = $(".title");

var index = 0, self = this, pre = 0, handid, isPlay = false, isPagerClick = false;

this.Start = function () {
this.Init();
//计时器,用于定时轮播图片
handid = setInterval(self.Play, this.timer);
};
//初始化
this.Init = function () {
var o = $(".pager ul li"), _i;

for (var i = o.length - 1, n = 0; i &gt;= 0; i--, n++) {
this.indexs[n] = o.eq(i).click(self.PagerClick);
}
};
this.Play = function () {
isPlay = true;
index++;
if (index == self.length) {
index = 0;
}
//先淡出,在回调函数中执行下一张淡入
self.list.eq(pre).fadeOut(300, "linear", function () {
var info = self.list.eq(index).fadeIn(500, "linear", function () {
isPlay = false;
if (isPagerClick) { handid = setInterval(self.Play, self.timer); isPagerClick = false; }
}).attr("title");
//显示标题
self.showTitle.text(info);
//图片序号背景更换
self.indexs[index].css("background-color", "#FF70Ad");
self.indexs[pre].css("background-color", "#6f4f67");

pre = index;
});
};
//图片序号点击
this.PagerClick = function () {
if (isPlay) { return; }
isPagerClick = true;

clearInterval(handid);

var oPager = $(this), i = parseInt(oPager.text()) - 1;

if (i != pre) {
index = i - 1;
self.Play();
}
};
};

轮播的脚本是个人的一点小习惯,一般不轻易向JQuery中写入扩展函数.诸位莫要在意。

通过以上的代码,实现轮播的核心主要是对jQuery的fadeIn和fadeOut函数的调用,另外考察的就是CSS布局的功力了。

在上面显示图片标题的地方不能用绝对定位,于是用的relative定位,这个地方是布局的核心部分,否则无法将标题和图片序号放在图片之上。

title_bg 这个类及对应的div主要是为了实现标题的背景色透明,因为直接在标题上设置背景色透明,会造成文字也是有透明度的。

附上demo地址:轮播演示原理demo

[转载]Asp.net中时间格式化的几种方法 - Rancho2013 - 博客园

mikel阅读(1018)

[转载]Asp.net中时间格式化的几种方法 – Rancho2013 – 博客园.

1. 数据控件绑定时格式化日期方法:
<asp:BoundColumn DataField=”AddTime” HeaderText=”添加时间” DataFormatString=”{0:yyyy-MM-dd HH:mm}></asp:BoundColumn>
<asp:BoundField DataField=”AddTime” HeaderText=”添加时间” DataFormatString=”{0:yyyy-MM-dd}” />

2. 用DataBinder.Eval进行数据绑定时:
DataBinder.Eval(Container.DataItem,”AddTime”,”{0:yyyy-MM-dd}”)

3. 直接用ToString方法转换日期显示格式:
DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”)

4. 用String类转换日期显示格式:
String.Format(“{0:yyyy-MM-dd}”, DateTime.Now)

5. 用DateTime.Parse方法转换日期显示格式
DateTime.Parse(“2012-2-22”).ToString(“yyyy-MM-dd”)

6. 用Convert.ToDateTime方法转换日期显示格式:
Convert.ToDateTime(“2012-12-21”).ToString(“yyyy-MM-dd”)

标准 DateTime 格式说明符
http://msdn.microsoft.com/zh-cn/library/az4se3k1(v=vs.80).aspx
自定义 DateTime 格式说明符
http://msdn.microsoft.com/zh-cn/library/8kb3ddd4(v=vs.80).aspx

[转载]大数据应用之双色球算奖平台总体设计数据规模估算篇 - 张子良 - 博客园

mikel阅读(829)

[转载]大数据应用之双色球算奖平台总体设计数据规模估算篇 – 张子良 – 博客园.

大数据应用之双色球算奖平台总体设计数据规模估算篇

作者:张子良

版权所有,转载请注明出处

引子:什么才算大数据?

自从写了上一篇《大数据应用之双色球算奖平台总体设计大纲篇一》,受到许多园友的关注和指导,在此表示感谢,尤其是园友个人知识管理给出的一个评论,让我深思,原文如下“双色球算奖这么简单的活,也称大数据。先生:不是数据多,叫大数据。双色球算奖,Oracle数据库的索引,1分钟内就算完。关键是人家不想这么快”。话不太好听,尤其是称我为先生那句,但却发人深思,是啊:到底什么是大数据呢?选择双色球算奖作为大数据应用的切入点是否合适呢?然后就是让我诧异的1分钟理论很是吓了我一跳的。

说一下自己的理解吧,大数据是指那些很大的数据集,大到传统的数据库软件工具已经无法采集、存储、管理和分析。大数据既有存储规模方面的考虑, 同时也涉及到分析计算规模的考虑。之所以选择双色球算奖平台作为大数据应用的案例,也正是考虑到这两个方面的问题。其一,历史投注明细信息的存储,如果采 用传统的关系型数据库,肯定是不合适,无论是分区还是分表,都无法解决根本问题。其二、当前投注规模的情况下,进行快速算奖,所要进行的计算规模肯定也不 是一个传统方式能轻易解决的问题。

当然关于具体多大规模的数据才算大数据,目前为止尚未有一个官方的界定阈值的存在,规定超过多少算大数据,低于多少不算大数据的说法。既然没有标准,也就无所谓是与不是,见仁见智,不一而足。

一、概述 业务规则

 双色球奖项设置和兑奖规则如下所示:

“双色球”彩票以投注者所选单注投注号码(复式投注按所覆盖的单注计)与当期开出中奖号码相符的球色和个数确定中奖等级:

一等奖:7个号码相符(6个红色球号码和1个蓝色球号码)(红色球号码顺序不限,下同)

二等奖:6个红色球号码相符;

三等奖:5个红色球号码和1个蓝色球号码相符;

四等奖:5个红色球号码或4个红色球号码和1个蓝色球号码相符;

五等奖:4个红色球号码或3个红色球号码和1个蓝色球号码相符;

六等奖:1个蓝色球号码相符(有无红色球号码相符均可)。

二、数据对象分析

既然是数据规模的评估,我们要解决的首先就是数据对象的确认。针对双色球算奖平台,我们需要关注那些数据对象呢?按照矛盾论的观点,事物的矛 盾分为主要矛盾和次要矛盾,其中主要矛盾起决定性作用。所以在这里我们只考虑双色球算奖平台涉及的最主要的数据对象,而不考虑其他细节问题。

数据对象主要包括以下几个方面:

(1)销量统计:包括全国、分省市、销售网点的销量汇总统计数据。

(2)中奖统计:包括全国、分省市、销售网点的各奖项的中奖注数汇总统计数据。

(3)开奖号码:包括每一期开奖号码信息。

(4)奖金信息:包括每一期次各奖项奖金多少的统计数据。

(5)选注明细:当前期次选注明细数据。

(6)选注历史明细:历史期次选注明细数据。

(7)中奖选注明细:当前期中奖选注明细数据。

(8)中奖选注历史明细:历史中奖选注明细数据。

如果从存储规模和计算规模两个维度分别考虑,针对销量统计、中奖统计和奖金信息,我们需要关注的是计算规模;针对选注明细、选注历史我们要关注的则是存储规模。

三、存储规模评估

3.1 数据结构

针对双色球算奖平台而言,所有需要存储的数据中,选注历史明细信息的存储是规模最大的,根据目前双色球每一期次的平均销量来看,需要存储的每一期次选注明 细信息约为2亿条记录。每一选注需要存储的信息包括:站号、操作员、流水号、销售期、有效期、销售时间、金额、投注明细(多条)、开奖时间和附加码。具体 如下图所示:

为简化我们的分析,我们将复式投注和胆拖投注明细拆分成单式投注进行存储,具体数据结构如下:

序号

字段名称

类型

长度

1

期次

Char

7(YYYYMMN)

2

站号

Char

8(全国唯一)

3

流水号

Char

6(右侧补零)

4

Red1

char

2(左侧补零)

5

Red2

Char

2(左侧补零)

6

Red3

Char

2(左侧补零)

7

Red4

Char

2(左侧补零)

8

Red5

Char

2(左侧补零)

9

Red6

Char

2(左侧补零)

10

Blue

char

2(左侧补零)

按照简化后的数据存储,单注明细需要的存储空间=35字节,每一期次需要存储的绝对数据规 模=200000000*35/1024/1024=6675.7M。如果单从这个角度来看,数据存储规模还真的不算大。但是考虑到RDMS表的存储和访 问,无论是采用分区,还是分表,能够实现的其实只是把数据塞进去,至于,读出来,如何读出来则将会是一个悲剧。不要告诉我用索引,用索引需要付出的代价是 什么,我想有更多的人比我清楚。

3.2 测试环境

备注

操作系统

Windows XP

数据库

Sybase15.7

CPU

T5550

双核1.83

内存

2G

硬盘

200G

3.3 测试结果无索引插入

轮次

插入记录数

耗时

第一轮

200w

15分03秒

第二轮

200w

18分05秒

第三轮

200w

19分04秒

四、计算规模评估

这部分设计到具体采用的算法,但是无论采用何种算法,2亿次规模的数据遍历是必须的,之前园友提到的方法其实很好,根据开奖号码,设计中奖选注 表,利用待兑奖数据进行组合ID比较,然后得出目标选注。然后进行奖项层次的细分,思路很好,可是有没有想到过2亿次乘以目标中奖选注表项个数的计算规模 有是多少次呢。如果采用SQL的方式,时间呢,又需要多少的时间?有数据有真相,正在跑相关的测试案例。至少目前看到的结果,很不理想。

正在跑测试数据,持续更新中,有图有真相,有数据才有说服力!敬请关注、支持!求推荐!

 

作者:张子良 QQ:1106110976 声明:版权所有,转载请注明出处 网址:http://www.cnblogs.com/hadoopdev/

[转载]详解Vs2008下打包安装程序的一些技巧(含win7下提权限、卸载以及安装时定向到网页) - royen - 博客园

mikel阅读(1063)

[转载]详解Vs2008下打包安装程序的一些技巧(含win7下提权限、卸载以及安装时定向到网页) – royen – 博客园.

笔者才疏学浅,文中叙述不当之处还望各位园友指出~

1、怎么使得程序窗口左上角和任务栏有图标,如下图所示:

         

其实这个问题不应该放到程序打包这部分讲,只不过对于一些初学者而言,在这提下也许会有很大的帮助(想到自己刚学.net那会了,呵呵)。方法之一的话就 是先添加一个图标文件到项目中,然后切换到每个界面设计器,右键窗体的属性,在属性窗口有个Icon选项,下面的也就不用多说了吧~

2、 先新建一个空的解决方法,File->New->Project->Other Project Types->Visual Studio Solution->Blank Solution,这儿取个名称SetupDemo:

如图:

3、在解决方案中添加个项目工程,右键上图中的解决方案,点击 Add->New Project,选中Windows Form Application模板,输入SetupForm,结果如下:

4、给项目添加些基本信息:

在上图中,右键SetupForm后单击Property或者直接双击上图中的Properties,会出现下图

左侧很多选项卡,所以可以更改的东西很多,大家可以视需要而定制,这没必要赘述。大家可以点击上图中的Assembly Information 按钮,添加项目出品公司信息,如下图所示:

5、本来这应该讲添加安装部署项目了,但是对于在Windows7上开发的朋友们,还需要加上额外的一部,那就是关于程序安装后的权限问题。大家知道, 从Vista开始Windows操作系统便加入了UAC机制,所以问题就出现了:如果我们制作的程序被安装到了系统盘了会怎样?有心的会发现,当程序进行 一些诸如IO操作的时候,这些都会被操作系统要求以管理员权限运行,否则所有的操作会被系统拒绝。

如果直接进入安装部署项目的操作的话,这样打包出来的安装包即便你以管理员权限运行安装了。但是,出现在桌面上的图标快捷键右键时候却没有“以管理员权限运行这一选项”,除非你直接切换到安装目录,右键exe文件以管理员权限启动~

解决方法是,右键SetupForm项目,添加一个应用程序描述文件,如下图:

直接点击添加即可,这时候打开文件会出现以下内容:

想必不用多说了吧,把 level=”asInvoker” 按调用者权限 改成 level=”requireAdministrator”管理员权限就OK啦。

建议将该文件拖入Properties目录下,如下所示:

 

6、添加安装部署项目,右键解决方案后Add->New Project->Other Project Types->Setup and Deployment,输入MySetup后确定,结果如下:

7、右键上图中的MySetup->View->File System,确定后如下图

解释下上图中几个文件夹的意义:

Application Folder——所有的项目的Release文件夹或Debug文件夹下的资源文件、可执行程序以及描述性文件等都需要放到这

User‘s Desktop——用户桌面,在这下添加快桌面捷键,安装完了会在用户桌面产生快捷键

User’s Programs Menu——用户开始菜单,也是添加快捷键的地方,不过是在用户开始菜单,多个项目打包在一块的话,最好在该文件夹下建个文件夹

好了,一步步来

1)Application Folder

先是右键Application Folder->Add ->Project output,出现以下的窗口:

由于只有一个项目,所以上面的下拉菜单中只有SetupForm一个选项,这儿我们选择Primary output,即可。

当然,如果项目中的文件种类比较多,你也可以右键Application Folder->Add->File,然后浏览到项目的目录,将项目的Release或Debug文件夹里面的东西一股脑儿的添加进来~

2)User’s Desktop

在右侧分割的窗口中右键->Create New Shortcut,在出现的窗口中双击Application Folder,选中刚刚添加那个Project Output文件即可。这时候安装到桌面时候快捷键图标还是默认图标,如果定制自己的图标的话,则需要在右键刚刚建立的快捷键,到属性窗口有个Icon属 性,单击浏览,如下所示:

        

单击Browse                                                                    Icon选择窗体

 

双击Application Folder,如果在第 1)步骤中你添加了Icon文件的话,可以看到这些图标并可以选择,没有的话那就回到步骤1)添加呗~

3)User’s Programs Menu

步骤同上,不过需要提醒的是多个项目打成一个安装包的时候,这下面最好先建个文件夹然后再添加那几个快捷键~

8、到这一步,便可以右键MySetup后Build下,然后找到MySetup目录下的Release或者Debug文件下,便会有安装包啦~

 

9、没完呢,要想添加个卸载程序怎么办呢?

方法:在7中的第1)步骤,给Application Folder还得添加个东西,右键Application Folder->Add->File,然后在你的系统盘下的Windows/System32目录下添加 msiexec.exe,该文件是什么想必不用多说了把~添加了后,关键是在开始菜单下添加个删除的快捷键~于是,在7中的第3)步骤中添加的文件夹下, 再创建一个快捷键,命名为Uninstall,如下:

右键Uninstall快捷键,打开其属性窗口,有个Arguments属性,如下所示:

输入 /x 安装包的Productcode,这个ProductCode怎么获得呢,方法是左键单击MySetup安装包项目,然后点击属性窗口,会在该窗口找到Product code 属性,将该code复制到/x 后面即可,下图:

这时候卸载功能已经添加进去了~

 

10、还没完呢,如果想要安装程序在安装时候或者卸载的时候打开浏览器定位到指定的网址怎么办?

这个问题本人只在XP系统下解决了,win7系统下貌似不起作用,囧~期待园友的解决方案

说说在XP下怎么解决的把:

大家右键部署项目MySetup->View->Custom Actions 选项,如下所示:

出现Custom Actions编辑界面:

以上是程序安装部署到卸载的四个阶段,每个阶段都可以添加执行exe、dll或者vbs类型的命令,由此看来至少可以有三种方法实现~下面我便用后两种分别完成这个功能~

1)VBS脚本

新建个脚本,内容如下:

Set openWeb=CreateObject(“Wscript.shell”)

openWeb.run(“www.cnblogs.com/royenhome”)

保存为Internet.vbs,然后将该脚本添加到Application Folder,在Custom Actions编辑界面的相应阶段将该脚本添加进去~添加方法,呵呵,不用多说了把~

2)dll方法

在解决方案下新建个类库项目,取名为OpenWebDll,如图:

删除class1.cs,然后给类库添加个Intaller类,如下所示:

该类继承了Installer类,我们打开添加的类文件,在文件中override相应的方法,如希望在卸载时候打开网址,如下所示:

Build下该类库,然后在MySetup的Application Folder文件夹下添加该项目的Project Output,然后切换到Custom Actions编辑界面的Uninstall添加该Output,同时确保Install下也添加该Output文件,否则安装会提示找不到 xxx.installstate文件~具体操作见下图:

       

Build下就OK了

11、至此,本文真的完了~