2012年10月31日星期三

Windows Phone SDK 8.0安装步骤

Windows Phone SDK 8.0安装步骤

《全新的Windows Phone 8开发资源汇总》文章中提到了Windows Phone SDK 8.0的下载地址,同时也给出了安装的一些软硬件配置要求。

那么下载过ISO文件之后如何安装呢?

 

前期准备

1.“计算机”右键“属性”查看自己电脑安装的Windows 8系统的版本,以及电脑内存是不是4G或4G以上。

01

注:必须是Windows 8专业版以上的系统。

2.使用微软官方提供的Coreinfo v3.1工具进行检测。

具体步骤请参考微软官方给到的文档:System requirements for Windows Phone Emulator。

02

3.控制面板--〉程序和功能--〉启用和关闭Windows功能—〉将Hyper-V勾选上,点击确定。

03

前期的准备做好之后,我们就开始安装Windows Phone SDK 8.0吧!

 

安装步骤

1.打开wpsdkv80_enu1.iso文件。

0

2.找到WPexpress_full.exe文件,并打开进行运行。

1

3.安装文件启动画面。

2

4.选择安装路径,点击INSTALL。

3

5.开始安装了,耐心等待吧!

4

5

6.安装完成后,点击Restart Now,电脑进行重启。

6

PS:不知道什么原因,我安装的是英文版SDK,但是最后安装完成后提示的是中文!!!

另外如果我们电脑太老,可能安装SDK后,报出“CPU不支持虚拟化”的错误,此时虽然开发工具可以正常安装,但是无法使用Windows Phone 8模拟器进行调试程序了,只能用真机调试。

 

启用Visual Studio 2012

我们打开VS2012,找到Windows Phone,然后弹出我们熟悉的开发界面了哦。

7 

PS:发现8.0里面多了好多模版,这时我就会毫不犹豫的创建一个项目小试一下。

 

启动Windows Phone 8模拟器

选择一种分辨率的模拟器进行调试。

8

第一次启动模拟器的过程会比较慢,因为系统需要在Hyper-V中进行配置Windows Phone 8模拟器。

9

10

另外我们也可以打开Hyper-V管理器,进行查看。

11

12

我们会发现有我的电脑Hyper-V中已经创建了3个虚拟机,其中两个状态为关闭,一个为状态为正在运行。

这是什么原因呢?因为我们选择不同分辨率模拟器今天调试的时候,Hyper-V会创建不同分辨率的模拟器,并且创建成功后,该模拟器虚拟机一直存在Hyper-V中,我们可以在Hyper-V中进行启用或者删除等操作。

有一点好处:比如我们在720P的分辨率模拟器中进行了一些程序或系统的设置,那么当我们下次打开这个分辨率的模拟器的时候,原来部署的程序或系统设置还保存在该模拟器中。

PS:当我们加载模拟器的时候可以看一下电脑的磁盘占用率!接近100%,我的个亲娘,物理磁盘伤不起啊!因此考虑要不要加个固态硬盘。

13

最后来一张吊爆的图!超大号的Windows Phone 8。。。哈哈~

8.0




TAG:

flipsnap学习笔记

flipsnap学习笔记

    在很多手机应用中,大家都会见过这样一种效果:当手指横向滑动屏幕时,屏幕上的页面会向左或向右滑动。

    下面介绍一下当用HTML5+CSS3开发手机应用时解决这类效果的一款js插件:flipsnap。flipsnap.js的源码大家可以到flipsnap官网:http://pxgrid.github.com/js-flipsnap/下载。

    下面列出我写的小例子,大家一看应该就看明白了。

<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>水平切换 demo</title><meta name="Keywords" content=""><meta name="Description" content=""><style type="text/css">/*重置{*/body,div,span{ padding:0;margin:0;}/*}重置*/.all{width:602px;height:302px;margin:100px auto 0;border:2px red solid;overflow:hidden;}.inner{width:4816px;height:302px;}.inner>div{width:600px;height:300px;border:1px blue solid;float:left;font-size:80px;font-weight:bold;text-align:center;line-height:300px;}.pointer{width:256px;margin:20px auto;overflow:hidden;}.pointer>span{float:left;width:20px;height:20px;border-radius:50%; margin:0 5px;border:1px #000 solid;}.color{background:#ff0;}</style></head><body>    <div >        <div >            <div>1</div>            <div>2</div>            <div>3</div>            <div>4</div>            <div>5</div>            <div>6</div>            <div>7</div>            <div>8</div>        </div>    </div>    <div  id="pointer">        <span ></span>        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>        <span></span>    </div>    <div  >        <input type="button" value="go" />    </div>    <script src="jquery.js"></script>    <!-- 下面为了省事,例子4、6、7 使用了jquery-->    <script src="flipsnap.js"></script>    <script type="text/javascript">    /*1.简单水平拖动*/        Flipsnap('.inner');    //移动次数为子元素个数减一        /*2.设定每次移动的距离*/        //Flipsnap('.inner',{            //distance:602    //每次移动的距离,移动次数为子元素个数减一;注意:此处不能有分号,可以有逗号        //});        /*3.设定每次移动的距离,和,最多移动的次数*/        //Flipsnap('.inner',{            //distance:602,            //maxPoint:7        //最多移动的次数        //});    /*4.绑定事件*/        /*var $pointer=$('.pointer span');        var flipsnap=Flipsnap('.inner',{distance:602});        flipsnap.element.addEventListener('fsmoveend',function(){            $pointer.filter('.color').removeClass('color');            //filter 为jquery的筛选器,筛选出与指定表达式匹配的元素集合            $pointer.eq(flipsnap.currentPoint).addClass('color');        },false);*/    /*5.refresh 刷新*/        //var flipsnap=Flipsnap('.inner');            //flipsnap.refresh();        //刷新当前页面,当屏幕切换时,此代码就派上用场了    /*6.移动到指定位置,鼠标不可拖动 */        /*var flipsnap = Flipsnap('.inner', {            distance: 602,            disableTouch: true     //true 鼠标不可拖动;  false 鼠标可拖动        });        $('.go').click(function() {            //flipsnap.moveToPoint(3);    //移动到指定位置,第n+1个            flipsnap.toNext();    //移动到下一元素            //flipsnap.toPrev();    //移动到上一元素        });*/    /*7.next, prev*/        /*var flipsnap = Flipsnap('.inner', {            distance: 602,            disableTouch: true     //true 鼠标不可拖动;  false 鼠标可拖动        });        $('.go').click(function() {            flipsnap.toNext();    //移动到下一元素            //flipsnap.toPrev();    //移动到上一元素        });*/    </script></body></html>




TAG:

学会网络营销动态分析 适应利用新方式搞活营销

学会网络营销动态分析 适应利用新方式搞活营销

  所有的网络营销其实都是动态化的,比如我们最常见的QQ群营销与微博营销,这两种营销都是时刻在变化,QQ群营销中的人与营销主体在变化,微博营销中的人与营销方式在变化,而作为一名站长,学会理解网络营销的动态变化就显得非常重要了,下面简单的谈谈站长如何与动态网络营销有机结合。

  第一、了解每一种网络营销方式的利弊

  站长想要真正的将动态营销有机结合,那么第一件事就是了解这些网络营销的利弊,就拿微信营销来说,微信营销方式很简单,一般都是美女+签名或者美女+昵称,但是这种营销方式也有其弊端,距离太短,营销目标太少。而作为站长的你就必须要了解这种营销方式的利弊,如果你不清楚这一类的营销方式,那么或许你最终无法将营销运用得炉火纯青,其能够带来的实际效果就可想而知了。

  第二、尝试运用营销方式去拉客户

  有了营销方式之后,站长就要去拉客户,而刚开始的营销对站长来说是一件比较困难的事情,因此站长必须先尝试去利用营销方式去拉客户,通过拉客户的过程中就可以发现这一类营销方式适不适合你,现在很多站长都会运用到论坛营销,但是论坛营销的方式却很枯燥,枯燥的发帖+枯燥的回帖+版主的干扰,这对于部分站长来说是不可接受的,特别是对于版主的干扰来说,很多站长都觉得这就是一种阻碍,感觉不耐烦。如果你在运用营销方式中也遇到了这种情况,那么可以很直接的表面这类营销方式不适合你,你可以选择其他类型的营销方式。

  第三、站长可以随心所欲的改变营销策略

  很多营销方式并不是一触而就的,营销策略也并不是一层不变的,不同的时候站长要学会运用不同阶段网站发展的策略去适应营销策略,比如网站发展初期营销策略可能是仅仅为了流量而去运作,而在网站有了一定的流量之后,网站的营销策略可能就会转变为如何的留住客户,而在网站发展的高潮期,网站的营销策略可能就是要打出品牌,因此站长如何想要在网站的发展阶段中与营销进行真正的有机结合,那么还必须在网站的不同发展阶段去改变自己的营销策略,只有这样才能够让站长的思路更敏捷,更能够体会到营销的动态。

  第四、模仿其他站长的成熟营销模式

  模仿并没有错误,模仿其他站长的营销模式也是营销成功的重要战略,当你看到别人能够很好的利用微博营销赚钱,那么你可以去试一试,去观察分析他的营销手法,看他每天是如何做的,我想通过这种模仿即使你不能过立即盈利,也能够将一些基础的营销手法学习到,这样对于下一步与动态营销进行真正的结合也奠定了基础,对一名站长来说有百利无一害,模仿学习并没有错,错误的只是不要将模仿变为了抄袭。

  一名站长如何能够将最适合网站的营销方式进行动态结合,那么这个网站的发展至少要比同类的快上十倍,营销也是网站建设的一部分,如果网站没有良好的营销还谈何壮大发展,小米就是模仿苹果的饥饿营销才有了现在的传奇,那么我们的网站呢?其实也是如此,就是要将最适合的营销方法与站点进行有机的结合,这是一个网站成功的必经之路。本文来源于杭州seo http://www.snf8.com,第一次发表在admin5网站,转载请保留笔者的原创链接,真的写得非常不容易,谢谢了。



TAG:学会 网络 营销 动态分 适应 利用 方式搞 活营 网络 站长 网站 网站推广 赚钱

轻松学MVC4.03 删除用户功能

轻松学MVC4.03 删除用户功能

在上一篇中,我们创建了用户列表页面。 现在,我们将用户列表功能,加入到菜单中。打开 Views\Shared\_Layout.cshtml,找到菜单部分,加入用户列表菜单项:
mx371AB

保存后,右键点击项目文件,弹出菜单中选 “在浏览器中查看”:

mx39D6C

如果未登录点击Users, 会跳转到登录页面,这是因为在其Controller类AccountController中,加入了一个Attribute: [Authorize]

mx33CA7

打开上一篇中创建的Views\Account\Index.cshtml,  修改 Delete 链接,增加一个确认删除的提示框:
mx3B965

打开AccountController,增加一个删除的Action:

mx35A07

 

下面是UserProfile.Delete()的代码:
mx341A2

至此删除功能已完成。

本篇知识点:
1) 验证用户才能访问的页面,在Controller类或方法上加attribute:  [Authorize]

2 )  给HTML控件加属性时,如果需要传属性对象,一般用 new { @attrName=””}的形式。

3 ) 在Action中跳转到其它View,用 return View(“ViewName”,modelObject); 的形式。当然,关于跳转还有一些其它方式。

4)执行不返回结果集的SQL语句,用 context.Database.ExcuteSqlCommand()




TAG:

轻松学MVC4.04 扩展UserProfile

轻松学MVC4.04 扩展UserProfile

1、扩展字段。

现在,要给UserProfile表加两个非空字段:FirstName, LastName。 因为前面我们已经注册过用户,该表中已存在数据,要添加非空字段比较麻烦,我们可以删除掉现有用户,从头开始会更简单。通过前面加入的删除用户的功能将现有用户全部删除。

在VS的数据连接中,打开DefaultConnection的UserProfile表:
mx370B3

点击Update更新到数据库中。

图示是使用LocalDB时的界面,如果是使用自己的数据库,可以用自己的管理工具添加字段。

添加完字段后,给对应的UserProfile实体加上相应的属性:

mx3AC3D

 

2、改进Register方法。

首先给RegisterModel模型类加上一个属性和一个构造方法:
mx3A2AC

Register视图中加上相应字段:
mx37C48

打开AccountController类中的Register 的Post方法,可以看到注册用户的关键方法是WebSecurity.CreateUserAndAccount:
mx33FC4

因为我们在UserProfile表中添加了非空字段,所以该方法将不能正常工作。改造如下:

mx35519

 

现在注册功能又可用了。

这里对SimpleMembership的扩展做了介绍,而在WebSecurity类中,有大量的账户相关的方法,可以直接使用。比如修改密码等,其中也集成了OAuth的功能。有兴趣的读者可以根据自己的需要研究和使用。

本篇就到这里了。 下篇将简单介绍一下角色的使用。

 

 




TAG:

网赚路上避开常犯的四大错误思路

网赚路上避开常犯的四大错误思路

  自己加入到网赚大军的行列已经有两年时间了,相比职场生活,更多的自由,不管是时间还是事情,都是自己说了算。身边的朋友也大多是这样的状态。网赚其实是个很大的概念,有的人经营一个网站,通过广告费赚取收入;有的人开一个网店,卖产品;有的人开一个培训班,收学生。凡是网赚的,我看基本上逃不出这三类。但是,我认识的朋友,真正靠网赚挣大钱的屈指可数,大多数都是小打小闹、不成气候,补贴家用还可以。除了自身的技术能力之外,更多的是大家所谓的网赚,常常是人云亦云,对自己没有长期规划。靠运气做网赚,遇到大的波折(比如这次百度算法改变),就偃旗息鼓了。

  1、自我限制,不能全职网赚

  提起网赚 ,每个人都能信誓旦旦的说自己能付出多少多少。然而,真正面临全职选择的时候,就没有这般勇气了。这样的情况也容易理解,如果没有百分百的把握,如果失败就一着走错满盘皆输。很多朋友是怀着试探性的心理尝试网赚行业的,如果有潜力,再考虑全职进入。熟悉网络行业的都清楚,如果你不能全身心的投入,做网络,真的是做什么什么不行。回想起自己当初进入网赚行业,为了推广自己的服务,每天泡在猪八戒做任务,每天更新网站,做博客群,每天写原创软文,真的是孤注一掷,全力以赴。如果没有这点魄力,现在应该还在小网络公司打工。试想,如果当时没有辞去工作,一边要忙公司的事情,一边晚上回家要做网上的工作,每天疲于应对,怎么能有今天的成果。

  2、求安稳,涉水的项目潜力有限

  网赚项目有很多,有的项目稳定,靠的是力气,接一单是一单,例如当初我在猪八戒上给别人做网站美工;有点项目需要投资和精力,靠的是脑力,而且大部分项目没有精心布局都是以失败告终,成功的则一劳永逸。相比起来,大家更愿意赚点小钱,以前能在猪八戒上做个美工,收个百八块就很满足了,为别人加个博文链接几元钱,也是个生活补贴。这样的项目能长久吗?这样做下去,永远只是个生活补贴,不能作为事业。很多人不能把眼光放长远,对于网赚停留在原始的大众化项目上,更没有很好的思路,项目潜力和你的收入是成正比的。

  3、未完全测试好项目就盲目复制

  国人很喜欢复制,无论是人人网、美丽说还是团购网等等,都是从国外流传过来的。但是这些成功的网站背后,有比他们先做的,有比他们做的多的,有比他们有钱的,都失败了。唯一的原因,就是不能很好的本土化,没有做好项目的测试工作。不说大的,就拿淘宝客这个项目来说。许多站长原本做seo,了解淘宝客结合seo能赚钱后,就大批量建站,想法是好的,采用站群做长尾关键词。可惜,再还没有一个盈利站点的前提下,就盲目按照以往的seo方法操作,很长时间都不能盈利。这时候才发现,投入的金钱和时间都白费了。自己也有过这样的失败精力,回想起来,只要前期把重点精力放在项目的完善上,就不会出现精力过于分散,整个项目失败的惨况。

  4、网赚团队的建立,有用胜过合拍

  做网赚的,个人能力始终有限,团队操作是个趋势也是必然。我们经常看到论坛里出现工作室、团队、公司的字样,这是个好的开始。包括很多教网赚的培训团队,都是请出名的老师一起组建网赚培训班,强强联手。然而,观察下一些草根团队的组建,大部分都是身边的亲戚、朋友、发小、同学这样的裙带关系组建起来的。能聊得来,工作起来固然很合拍,可惜网赚是很现实的行业,能力不行,再合拍的团队也会淘汰。例如前段时间的土豆网与优酷网合并,就能看出网赚团队应该如何组建,土豆网何以与竞争对手合并,而不去收购小型视屏网,或者与非视频网合并。目的就是要强强联手,垄断整个网络视频行业。因此,我们的草根站长如果能看清楚这一点,势必能给你的事业带来希望,最简单的方法就是与你最强的竞争对手合作。

  今天分享的是自己关于网赚的经验,如果你在网赚路上可以避免这些错误,相信大家的网赚事业会更加明确。原文出自毕业论文www.594wm.com,转载请注明。



TAG:网赚 站长 网站 网站推广 赚钱

YUI 2 存在SWF漏洞,YUI 3 不受影响

YUI 2 存在SWF漏洞,YUI 3 不受影响

雅虎YUI开发团队在博客中称,已经确定在自托管YUI 2 SWF文件中存在一个安全漏洞。

以下版本不受该漏洞影响:

  • 通过http://yui.yahooapis.com或其他CDN获得YUI 2的用户不受影响
  • YUI 3用户不受影响

YUI SWF提供了一个在网页中嵌入Adobe Flash player的标准方法。

雅虎YUI开发团队建议,在服务器上托管YUI 2 SWF文件的用户,或者使用2.4.0到2.9.0之间版本的用户,应立即升级至不受影响的版本,或发邮件至security@yuilibrary.com以获得更多的支持。





TAG:

经验之谈:10月算法更新 外链如何做才具有效性

经验之谈:10月算法更新 外链如何做才具有效性

  百度10月23算法更新以后,再次影响到大部分站长网站的优化排名,很多站点被K被降权,笔者的一个站点也受到了牵连,对于此次更新,百度官方也有给出打击的目标,主要是针对一些低质量站点利用超链接获得好的排名的站点做出惩罚,由此可以看出百度对于外链作弊的惩罚是越来越重,同时也告诫广大站长要以内容为主,通过外链获得的排名是不长久的。

  对于超链接作弊的惩罚,主要是交易链接和低质量链接两大类,这两类链接会影响到百度搜索结果的质量从而伤害用户体验,同时也对于大多数辛苦正规优化的站长们极不公平。下面就具体的跟大家讲讲这两类链接对于优化的危害。

  一、交易性链接作弊

  交易链接是指买卖性链接,通常被称为明链、黑链,我们从链接目的出发,交易性链接的最终目的是为了获得大量的单向链接提高网站的权重以及关键词排名,这些链接对于用户来说一点帮助作用也没有,前面笔者也提到链接是为用户而存在的,显然交易链接不是的。其实交易链接的作用大不大呢,笔者觉得不是很大,因为通常出售链接的站点导出链接比较多,并不是只卖给你某一个人,对于一个权重有效的网站来说,导出过量的链接,那么链接所获得的权重投票值也会很低,同时也很容易被搜索引擎识别为链接工厂,给予降权处理,这次的算法更新百度没有姑息交易链接的网站,直接k掉首页拿掉排名,虽然很多站长都有所抱怨,但是笔者认为百度的做法很明智,算法更新以后,以出售链接的站点和通过购买链接获得排名的站点会受到影响,提高了用户的搜索质量,对于广大网民来说,确实是一件好事。

  二、低质量链接作弊

  低质量链接是指群发链接和非自然性垃圾链接,这些链接的出现并不能解决用户的某些需求,它的存在也是没有价值性的,因为低质量链接仅仅是为了网站排名而做的,网站一旦出现这些链接,将会受到搜索引擎的算法,所以各位站长一定要控制链接的质量,不要为了链接的数量而忽视质量,质量二字也是讲究先有质才有量的,站长们一定要切记。在今后的优化之路上,笔者深信搜索引擎还会加大对于链接作弊的惩罚,百度官方已经推出外链工具帮助站长有效的查询外链数据,同时笔者认为还有其它目的,就是监控网站外链的健康度,这样就更精准的对链接作弊的站点实施惩罚。

  三、算法更新之后外链该怎么做

  在此次算法更新中,自然性链接没有受到处罚,自然性链接都是高质量的链接,用于帮助解决用户需求的链接,有其存在的必要性,必要性是指有了它的存在可以帮助用户更好更完美的解决问题,这样的链接它具有价值性,不会被搜索引擎识别为作弊,比如:对用户有需求的推荐链接、问题答案补充链接等。

  如何对于博客外链来说,大部分优化人员的做法不外乎以下四点:

  1、在文章结尾加链接指向自己的站点

  2、复制别人的文章,去掉别人文章的链接插入自己站点的链接指向网站

  3、文章中或者是段落结尾处加上超链接指向网站

  4、回复评论中加入链接

  这上面的四种做法也同属于作弊链接,这样的链接跟群发链接性质一样,可以大量的进行发布,搜索引擎也能够辨别出这样的链接,如果站长们还在做这样的链接就赶快换个方式吧,这样的做法是非常危险的,很容易被搜索引擎识别,即便你在这样做而没有被搜索引擎降权或K站,那它也是一个极大的隐患,犹如毒瘤,不要之后因为链接被降权而后悔莫及。

  其实高质量的链接的做法并不是很难,当我们给出一个链接的时候,可以思考一些这些问题:这个链接对用户有帮助吗?做这个链接的作用在哪里?会不会产生点击?其实外链的作用,就是起到搜索引擎的投票作用,而用户的点击就是一个投票的方式,链接的点击越多,链接指向的网站获得搜索引擎的信任度越高,这样的链接越多,搜索引擎给予的用户搜索展现机会越大。那么怎么知道自己的链接是高质量的呢?一般高质量的链接具备:必要性、自然性、价值型、广泛性、相关性等,只要具备这些特性,这些链接就具备质量;除了这些特性外,链接所指向的页面内容一定是高质量的,能够达成共性让用户满意的内容,并促使用户产生共享(转载、收藏、分享给好友)行为。这样的链接虽然不是很好做,但是只要大家能够坚持的做下去,发现不足给予完美解决,那么这样的一个链接将会以一敌百,对于网站整体的排名以及流量的提升意义巨大。

  关于外链的做法,网上有很多相关的技术文章,大家在了解到外链的正确做法之后,还要在日常工作中不断的实践,来丰富自身经验提升优化技术。读完本文,若有不明之处或更好的方法技巧,都可以再下方留言或联系笔者。本文就为大家讲解到这里,期待下一篇跟大家一起分享学习。

  本文由九河网络(http://www.usa-idc.com)原创首发,转载请注明!谢谢!



TAG:10月算法、外链有效性 站长 网站 网站推广 赚钱

WinRT控件:图表、图示、地图和其他

WinRT控件:图表、图示、地图和其他

Syncfusion发布了Essential Studio for WinRT beta,为构建Windows Store应用程序提供企业级控件。它包含20个控件,其中包括可以读写Excel、Word和PDF文档的XlsIO、DocIO和PDF控件。

图表控 件包含超过20种图表类型,如折线图、面积图、条形图、气泡图、柱形图、K线图、盘高-盘低图、盘高-盘低-开盘-收盘图、极坐标图、饼图、雷达图、范围 面积图、范围柱状图、散点图、堆积柱状图、堆积条形图、堆积面积图、直方图、样条图和样条区域图。它还包含带有10个技术指标的特殊金融图表,用于显示金 融数据的趋势,并通过整合DirectX渲染获得最佳性能。

图示控件使你可以通过诸如选择、旋转、拖动、缩放和平移等触控笔势直接在WinRT设备上绘制UML图示和流程图。它还支持根据业务逻辑验证流程图。

地图控件使你可以把数据显示成带有热度和气泡的地图,并支持通过数据模板自定义标记的形状。控件渲染ESRI形状文件,这种文件格式用于存储地图数据。

除了上面提到的控件,这个套件还包含Gauge、Radial Menu、Cover Flow、Tab Control、Hub Tile、Date Picker、Time Picker、Rating、Tile View、Range Slider、Extended Text Box、Numeric Text Box、Domain Up-Down和Numeric Up-Down等控件,它们专为触控优化,支持诸如缩放、平移、选择、双击、旋转和调整大小等常见笔势。

Miguel Goncalves使用WinRT控件创建了一个应用,但是这个应用没有通过Windows应用程序认证包的测试。他在官方产品论坛上贴出详细的错误信息。

Syncfusion的Stephen Jebaraj在回复中提到:

我们已经留意到XlsIO和DocIO的问题了,会尽快修正的。

此外,Stephen还提供了一个临时解决方案,帮助Miguel的应用程序通过认证包的测试。

根据Syncfusion的副总裁Daniel Jebaraj的说法,Essential Studio for WinRT已经可以用来构建正式的应用程序了,产品会经常更新,整合来自社区的建议和错误修正。





TAG:

ASP.NET防伪令牌与JSON有效载荷

ASP.NET防伪令牌与JSON有效载荷

ASP.NET MVC中包含了AntiForgeryToken辅助方法,可以使用用户指定的令牌(token)来探测和阻断跨站请求伪造(CSRF)攻击。不过,在创建基本的Ajax请求或使用Knockout、Backbone这种包含JSON有效载荷(playload)的JavaScript框架时,需要对这种方法做一些修改。

AntiForgeryToken辅助方法与表单(Form)一起工作,后者以POST方式提交,包含一个用于存储令牌的隐藏字段。ValidateAntiForgeryToken只着眼于提交的表单值。要想让它能处理JSON请求,可以使用以下方法之一:

  • 对于简单的jQuery Ajax请求,可以为每个页面创建单独的表单,包含存储令牌的字段,并将其显式地用于POST请求。
  • Sergy Barskiy展示了如何创建自定义特性,以不同于解析普通有效载荷的方式来解析JSON有效载荷。
  • Justin Etheredge展示了如何使用自定义的辅助方法来添加元头(meta-head)标签和自定义特性。

以上所有解决方案都依赖于直接设置__RequestVerificationToken字段的值。该字段是MVC框架中的常量。





TAG:

挖掘网站关键词的五大终极方法介绍

挖掘网站关键词的五大终极方法介绍

  很多人把网站的关键词看成是做好网络营销的全部,因为只有当网站关键词排名上去了,才会有更多的人通过搜索引擎来到我们的网站,网站有流量了什么都好说,但是怎么样才能把网站关键词给做上去呢!要想把一个关键词做上首页是一个很漫长的过程,需要有很强的执行力,而且在网站上线之前给网站选择恰当的关键词也是很重要的!下面笔者就来分享几个给网站选择关键词的终极方法。

  1、看竞争对手选择的关键词以及排名情况

  分析同行业的竞争对手往往能够给网站选择关键词提供很大的帮助,因为是同行业,所以我们的业务范围都差不多,选择关键词也是差不多的,我们可以把同行业做的比较好一点的网站拿出来分析,看看他们是怎么选择关键词的,收集他们的关键词然后再通过关键词分析工具来淘汰一些不合适的词,最终把有用的给留下来,当然在选择这些词的时候也要看看竞争对手的排名如何,然后通过对竞争对手网站的综合实力分析,看看自己的网站排名能不能超越竞争对手,而且很大程度上也能够看出这些关键词的优化难易度。

  2、指数分析工具

  我们看一个关键词的竞争如何是否能够带来流量不单单是自己觉得可以就行的,往往要通过一些权威的数据分析而得出结论,在seo界,百度指数工具就给我们选择关键词提供了很好的参考,通过这个工具我们可以清楚的知道这个光关键词的指数如何,也就是每天有多少搜索量,有关这个词的百度收录如何,这样一来,这个词能否很快的做上去在站长心目中就一目了然了,当然,挖掘关键词的工具不只有百度指数一个,站长工具以及爱站网关键词指数分析也是你不错的选择。

  3、关键词要和网站内容相关性强

  做什么行业就选择什么样的关键词,这是大家通常的做法,在确定网站主题之后就要围绕着网站的主题来选择关键词,网站主题和关键词不能相差的太远,这样就违背了相关性的原则,用户通过你的关键词来到网站之后却发现网站内容不是他想要的,这样的网站对用户是没有任何帮助的,所以这样的网站是百度强力反对的,是百度打击的对象。

  4、选择难易度适中的词打头阵

  在新站上线时,我们最好的做法就是选择一些关键词优化难度适中的词来做,等把这些词做上去之后再来做一些指数高的词,有了之前的那些排名,网站也就有了一定的权重,这时候再去做那些指数高的词也就得心应手了,如果说站长们一上来就开始攻那些很难得排上去的词,对于一个一切都是零的新站来说是很艰巨的一个任务,很多站长都没能坚持下去。

  5、有效地利用用户的搜索习惯

  掌握了用户的搜索习惯之后,那么给网站选择关键词就变得简单了,对症下药,往往就能够获得很好的效果,但是想要掌握用户的搜索习惯是比较困难的,单单的靠自己的揣摩和推测是很难发现的,一般来说要经过大范围的调查,收集大多数人的意见。(原创文章,转载请注明转自:http://www.zxiala.net/news/html/517.html 侵权必究)


TAG:关键词 站长 网站 网站推广 赚钱

在Windows Phone和Silverlight 4中可以使用Async和Await特性了

在Windows Phone和Silverlight 4中可以使用Async和Await特性了

微软宣布为那些不基于.NET Framework 4.5的应用程序提供了async/await关键字的支持。Async Targeting Pack的一个升级版本现在为Silverlight 4和Windows Phone 7.5提供了异步的特性,也为支持可移植类库的任何平台提供了支持(在今年早些时候,已经可以支持Silverlight 5和.NET Framework 4.0了)。

微软也特别提到,Windows Phone的开发依然还不能在Visual Studio 2012中进行,不过针对Windows Phone 7.5的开发支持会作为即将到来的Windows Phone 8 SDK中的一部分来提供。Visual Studio Web Site项目不支持async/await,不过开发人员可以编译一些包含异步特性的类库,然后从Web项目中调用它们。

这一新功能需要Visual Studio 2012和NuGet包(Microsoft.Bcl.Async)。这是一个测试版本,BCL团队也为Async Targeting Pack提供了一个已知问题列表。

使用Visual Studio 2010的开发人员只有通过使用Visual Studio Async CTP来利用async/await特性。


TAG:

Metro风格的CSS框架 BootMetro

Metro风格的CSS框架 BootMetro

BootMetro 基于 Twitter Bootstrap 框架构建,用于创建 Windows 8 的 Metro 风格的网站,灵感来自于 Metro UI CSS 。在线演示:http://aozora.github.com/bootmetro/hub.html
TAG:

免费实用微软系统工具集推荐(转)

免费实用微软系统工具集推荐(转)

转http://bbs.ctocio.com.cn/home.php?mod=space&uid=373635&do=blog&id=627

Windows Sysinternals Suite 是一套由微软官方免费提供的系统工具集,其中内置有大量超实用的免费系统维护小软件,譬如 Desktops (虚拟桌面)、Process Explorer (进程浏览器)、Autoruns (系统启动项管理) 等等,每一款都是超经典超实用的好工具,绝对值得大家了解、收藏并使用。由于该工具集中内置的实用工具实在太多,下面笔者这是简单的罗列了一下该工具集内的每一个工具的基本情况,希望在大家选择使用时有所帮助!

  下面笔者将Windows Sysinternals Suite内的每个实用软件都整理出来,按照名称首字母排序依次对各个工具进行简单的介绍,因为每个软件几乎都可以长篇大论的介绍,由于时间关系笔者这里只做简介:

  AccessChk:显示指定的用户或用户组对文件、注册表项或Windows服务具有的访问权限。

  AccessEnum:这是一个简单但强大的工具,可以向您显示,谁可以用何种访问权限访问您系统中的目录、文件和注册表项。此工具可用于帮助查找权限漏洞。

  AdExplorer:高级的活动目录查看编辑工具,可帮助用户浏览AD数据库、自定义快速入口、查看对象属性、编辑权限、进行精确搜寻等操作,还可以保存AD数据库的快照并支持其离线浏览和比较。

  AdInsight: 一种 LDAP(轻型目录访问协议)实时监视工具,旨在对 Active Directory 客户端应用程序进行故障排除。

  AdRestore:恢复已删除的 Server 2003 Active Directory 对象。

  Autologon: 登录时跳过密码认证。

  Autoruns: 查看哪些程序被配置为在系统启动和您登录时自动启动。还能够完整列出应用程序可以配置自动启动设置的注册表和文件位置。

  BgInfo: 可配置的桌面背景自动生成程序,可以生成含有重要系统信息的桌面背景,其中包括 IP 地址, 计算机名, 网络适配器等信息。

  CacheSet:CacheSet 是一个允许您利用 NT 提供的功能来控制缓存管理器的工作集大小的程序。它与 NT 的所有版本都兼容。

  ClockRes:查看系统时钟的分辨率,亦即计时器最大分辨率。

  Contig:您是否希望迅速对您频繁使用的文件进行碎片整理?使用 Contig 优化单个的文件,或者创建连续的新文件。

  Coreinfo:一个新的命令行实用工具,可向您显示逻辑处理器与物理处理器之间的映射、NUMA 节点和它们所处的插槽,以及分配给每个逻辑处理器的缓存。

  Ctrl2cap:一个内核模式的驱动程序,可在键盘类驱动程序上演示键盘输入过滤,以便将Caps-Lock转变为控制键。在此级别过滤允许在NT刚好要“看到”键之前变换和隐藏键。Ctrl2cap还显示如何使用NtDisplayString()打印初始化蓝屏的消息。

  DebugView: Sysinternals 的另一个优先程序:此程序截取设备驱动程序对 DbgPrint 的调用和 Win32 程序生成的 OutputDebugString。它允许在不使用活动的调试器的情况下,在本地计算机上或通过 Internet 查看和记录调试会话输出。

  Desktops:该工具可以创建最多四个虚拟桌面,使用任务栏界面或热键预览每个桌面上的内容并在这些桌面之间轻松地进行切换。

  Disk2vhd:可简化从物理系统到虚拟机(p2v)的迁移。

  DiskExt: 显示卷分区与磁盘的映射关系。

  Diskmon: 捕获硬盘的所有活动,或以硬盘活动指示灯的形式出现在托盘中。

  DiskView:直观的显示磁盘空间使用情况及文件和文件夹的空间占用情况。

  EFSDump: 显示有关已加密文件的信息。

  Handle: 小巧的命令行工具,可以显示哪些文件被哪些进程打开,以及更多其他信息。

  Hex2dec: 将十六进制数字转换为十进制及反向转换。

  Junction: 创建 NTFS卷上的符号链接(类似Linux的符号链接,灵活运用的话相当实用)。

  LDMDump:转储逻辑磁盘管理器在磁盘上的数据库内容,其中说明了 Windows 2000 动态磁盘的分区情况。

  ListDLLs: 列出当前载入的所有 DLLs 及他们的位置和版本。2.0 版可以显示已载入模组的完整路径名。

  LiveKd: 在live(CD) 系统中使用 Microsoft 内核调试器或MS 内核调试工具Windbg 。

  LoadOrder: 查看设备加载到 WinNT/2K 系统中的顺序。

  LogonSessions: 列出系统中活动的登陆会话。

  MoveFile: 使用户可以安排在系统下一次重新启动时执行移动和删除命令。这对于清除顽固或使用中的恶意文件很有用。

  NTFSInfo: 可以查看有关NTFS卷的详细信息, 包括主文件表(MFT)的大小位置和MFT-zone,以及NTFS元数据文件的大小。

  PageDefrag:对您的分页文件和注册表配置单元进行碎片整理。

  PendMoves:枚举在系统下一次启动时所要执行的文件重命名和删除命令的列表。

  PipeList:显示系统上的命名管道,包括每个管道的最大实例数和活动实例数。

  portmon:通过高级监视工具监视串行端口和并行端口的活动。它能识别所有的标准串行和并行 IOCTL,甚至可以显示部分正在发送和接收的数据。3.x 版具有强大的新 UI 增强功能和高级筛选功能。

  ProcDump:这一新的命令行实用工具旨在捕获其他方式难以隔离和重现 CPU 峰值的进程转储。该工具还可用作用于创建进程转储的一般实用工具,并可以在进程具有挂起的窗口或未处理的异常时监视和生成进程转储。

  Procexp:找出进程打开了哪些文件、注册表项和其他对象以及已加载哪些 DLL 等信息。这个功能异常强大的实用工具甚至可以显示每个进程的所有者。

  ProcMon:实时监视文件系统、注册表、进程、线程和 DLL 活动。

  PsExec:在远程系统上执行进程。

  PsFile:用于帮助用户查看远程打开的文件。

  PsGetSid:显示计算机或用户的 SID。

  PsInfo:获取有关系统的信息。

  PsKill:终止本地或远程进程。

  PsList:显示有关进程和线程的信息。

  PsLoggedOn:显示登录到某个系统的用户。

  PsLogList:转储事件日志记录。

  PsPasswd:更改帐户密码。

  PsService:查看和控制服务。

  PsShutdown:关闭并重新启动(可选)计算机。

  PsSuspend:挂起和继续进程。

  RamMap:Windows7下的内存使用分析工具,可以显示出当前系统和进程内存状态和利用率。

  RegDelNull: 扫描并删除包含嵌入空字符的注册表项,标准注册表编辑工具不能删除这种注册表项。

  Regjump: 跳至 Regedit 中指定的注册表路径。

  RootkitRevealer: 扫描系统中基于RootKit的恶意程序。

  Sdelete:安全地覆盖敏感文件,并使用此符合 DoD 的安全删除程序清理先前删除文件所在的可用空间。

  ShareEnum:扫描网络中的文件共享并查看其安全设置,以便堵住安全漏洞。

  ShellRunas:通过方便的 shell 上下文菜单项,作为另一个用户启动程序。

  Sigcheck:转储文件版本信息并检查系统中的映像是否已进行数字签名。

  Streams:显示NTFS备用数据流

  Strings: 在二进制映像内搜索 ANSI / UNICODE 字串.

  Sync: 发送缓存中的数据至硬盘/移动磁盘。(释放磁盘写缓存)

  Tcpvcon:查看指定进程的网络连接(TCP/UDP)状态的命令行工具。

  TCPView:活动套接字命令行查看器。(可以方便查看什么软件占用了什么端口之类的)

  VMMap:是进程虚拟和物理内存分析实用工具。

  VolumeId: 设置FAT或NTFS驱动器的卷ID。

  Whois:用于帮助用户查看Internet地址的所有者。

  Winobj: 对象管理器命名空间的查看利器。

  ZoomIt:辅助演示工具支持屏幕上进行和画图。

  由于Sysinternals Suite的工具实在太多,笔者只是简要的罗列了一下该工具集内的每一个工具的基本情况,希望能够对大家有所帮助。有需要的朋友可以下载Sysinternals Suite来一次性获得所有的工具,也可以选择单独下载自己喜欢的工具,熟悉和掌握这些工具,将大幅提升您的电脑维护及应用技能,而且无需花一毛钱。


TAG:

Liferea 1.8.10 发布,Linux的RSS阅读

Liferea 1.8.10 发布,Linux的RSS阅读

Liferea 1.8.10 修复了搜索文件计数和重构的问题,修复了从 Google 阅读器上删除节点导致程序崩溃的问题,建议升级。

Liferea是一款采用GTK+开发的rss新闻聚合阅读器,使用简单,速度快捷。相比其它类似软件,它的依赖更少,功能更加丰富,是一款必不可少的rss阅读工具


TAG:

wp8 sdk 下载

wp8 sdk 下载

中文版
http://download.microsoft.com/download/F/5/6/F56AD199-EF12-43C7-8551-C095394D3B32/fulltril30/iso/wpsdkv80_chs1.iso

英文版
http://download.microsoft.com/download/9/3/8/938A5074-461F-4E3D-89F4-5CE2F42C1E36/fulltril30/iso/wpsdkv80_enu1.iso


TAG:

2012年10月30日星期二

MarsEdit Test

MarsEdit Test

弄了黑苹果系统,写博客成了个问题,windows下面的live writer用起来很爽,mac下面用什么写呢?找了一下,marsEdit似乎挺简单,图片能否上传还需要验证下。

可以上传,只是麻烦了些,需要将edit mode改成Rich Text(在Preferences下面),这样就可以粘贴剪贴板里面的图像了。

NewImage

另外,在粘贴的时候会出现让你上传还是发布,如果需要继续编辑,那么选择Upload now即可,


TAG:

关于百度推出外链查询工具的随想

关于百度推出外链查询工具的随想

  百度今天下午10.30日在站长工具中推出了外链查询工具。究竟意欲何为。

1

  不得不说6.28之后,无数的苦B站长们,对百度漫骂一片。百度终于Hold不住了。先后把站长工具添加了多个功能出来,包括我们看到的外链工具,关键词查询工具。上半年稳定的时候没有看到百度在这方面的努力。下半年算法升级之后,百度在搜索这块有了大的调整,却引起了众怒。有人是垃圾站被K,有的原创也被K,医疗行业被无情打击。草根站长漫骂之声,随处可见。Google在很早之前就推出了自身的外链查询工具,个人而言平时用得其实非常非常少。

2

  Bing在前几个月也推出了外链查询工具,能查询的链接非常少。百度推广外链工具。个人认为有以下几个作用:

  1、减弱站长们的吐槽。百度官方论坛,大量反对百度的呼声过高,许多原创网站也被K掉,许多垃圾网站排名反倒上升。

  前段时间的竞价点击事件,360搜索推出之后的站长热捧,都看出来,百度引起了太多站长的不满。

  2、完善百度自身的站长工具平台,和Google完善的站长工具平台相比,百度依然很弱,站长平台急需整合,一方面是为了可以和站长和网站用户有一定的交互。另一方面,估计也是360等外在压力下的反应。

  我们可以拿外链查询工具做些什么呢?个人感觉用处其实不大。

  1、能判断出有些网站的外链是否有效。比如有些签名链接,有些回复链接,依然可以看出来比较有效。

  2、能判断出你在某个平台是否发了大量的链接。平台广泛性非常重要。要是你往同一个平台发了上千的外链,后果不用说了。

  3、能查出链接对应的锚文本。这个比较强大。但是提取依然是非常麻烦的。可以看出长尾词和品牌关键词之间的大致推广力度是否足够。

  4、可以查出链接分配是否均衡。要是全部都指向首页或者少量页面,就应该反思一下,是否链接形式过于单一。长尾词的推广力度还需要增强。

  5、可以看出哪些平台收录比较快,效果比较好。不知道查询出来的外链排序形式,是否包含了平台的权重。如果有权重的因素在里面,我们可以优先发布外链结果里面,排序靠前的平台。

  缺点:

  1、在IE下面不能批量导出,需要一个个的导出成csv看数据,在Firefox下面是显示在界面上并可以下载,要分析数据,决对会让你疯掉。

  2、和Google相比,数据量非常少。具体的结果不好计算。或许是因为权重过低的,没有显示出来。

  3、不能查询其它网站的链接数据。如果有这个功能。感觉外链平台又会大量出现,旧平台将会变得更垃圾,所有对手和自身的外链平台都会呈现出来,还是不要有的好。

  如何有效利用:

  1、开发工具,批量从CSV中抽取数据,做为表格分析。

  2、抓包数据分析,数据来源于百度后台的Json反馈数据。可以开发工具批量取结果。

  成都SEO小五认为:百度外链的数据只有建议在分析的情况下,用处才更为强大。不合理的利用,依然是一个鸡肋。


TAG:百度推出外链查询工具 站长 网站 网站推广 赚钱

ios5中使用Reachability的问题

ios5中使用Reachability的问题

做ios网络开发的肯定会用到苹果的官方库Reachability。ios5发布了,将项目升级到ios5的过程发一个warning:

+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) hostAddress;

Declaration of 'struct sockaddr_in' will not be visible outside of this function

解决办法很简单,Reachability.h中最前面添加头文件:#import <netinet/in.h>


TAG:

window.open的页面如何刷新上层页面

window.open的页面如何刷新上层页面

this.ClientScript.RegisterStartupScript(this.GetType(), this.Title, "window.opener.location.reload();alert('销帐成功!');", true);

主要是这段js代码:window.opener.location.reload();

如果没特殊要求,可以考虑用div


TAG:

微软公布 Windows Phone 8 多项新特性

微软公布 Windows Phone 8 多项新特性


多款热门游戏登陆WP8


全新锁屏界面可浏览Facebook图集


数据压缩服务DATA SENSE


鲍尔默宣布WP8终端上市细则

10月30日消息,微软今日凌晨于美国旧金山公布Windows Phone 8诸多新特性,并宣布了诺基亚、HTC以及三星多款WP8终端美国上市日期及运营商定制方式。

应用突破12万:四个月增幅20%

微软Windows Phone项目负责人Joe Belfiore宣布,Windows Phone Store应用数量已突破12万。而在今年6月份,微软首次展示Windows Phone 8系统时,该数字为10万款。在短短四个月内,应用数量增长20%。

此前Windows Phone系统的最大诟病之一,便是缘于应用数量的匮乏,此次微软加大力度以试图改善该局面。但是目前在软件数量方面,仍旧无法与另外两大手机系统抗衡。 今年9月,苹果发布iPhone 5时,App Store应用数量便已拥有70万款,而Android目前也已经超过67.5万。

多款热门游戏登陆WP8

微软还宣布目前在其他平台上最热门的50款应用,已经有其中46款支持Windows Phone 8。其中包括切绳子、神庙逃亡、鳄鱼小顽皮爱洗澡、愤怒的小鸟星球大战等。而Pandora网络收音机也将于2013年早期登陆WP8,并可免费使用一年。

除了介绍即将引入的WP8应用外,微软还更新了包括Facebook、Twitter以及Skype三大社交类客户端。新版Facebook客户端除了可以连通Facebook日历事件,最大改变在于可以将照片放在锁屏界面。

WP8系统多项细节改进

WP8采用了全新锁屏界面,支持第三方应用接口,可以将Facebook等应用的状态通知或者照片直接显示在锁屏界面上。除此之外,还可以自定义锁屏界面,如添加锁屏文本信息等。

Kids Corner儿童锁功能,家长可以根据儿童需要,选择应用、游戏、音乐或者视频等,划分到一个特定的模式。如此儿童就只能看到家长允许他们看到的内容,以避免不良信息以及社交信息误发送窘态的出现。

Rooms房间功能,用户可根据自身情况将家人、朋友或者同事分组,有些类似Groupme。但是使用者可以在不同的社交圈内分享日历、笔记、照片等资源。最大的特点在于这项功能不仅限Windows Phone手机,好友可通过其他任何平台访问相关内容。

另一项着重介绍的功能名为Data Sense,该功能基于云操作,在手机装有相应客户端,可以将网络数据压缩到最小值。而在该应用瓷片上会显示消耗的数据流量,并提供上限预警。另外,该应 用可检测周围可用WiFi网络并自动连接。官方称,使用Data Sense后可节省约45%的流量。该功能将于将年秋季率先登陆Verzion,目前并没有提到是否会在其他运营商提供。

多款WP8终端年底上市:华为缺席

在史蒂夫-鲍尔默亲自介绍了诺基亚、HTC和三星的多款WP8终端后,他正式宣布三星ATIV Odyssey(ATIV S)将于12月正式上市,该机将由美国CDMA运营商Verizon独家定制。

而诺基亚中端机Lumia 810(Lumia 820定制版本)以及HTC 8X则由T-Mobile包办,两款新机11月14日上市。剩下的诺基亚Lumia 920、Lumia 820以及HTC 8X为AT&T定制,同为11月上市开卖。

作为WP8全球首发四大厂商之一的华为,今日并没有任何消息出现在此次发布会。此前华为终端董事长余承东曾在微博透露将缺席此次发布会,但是并没有阐明具体原因。


TAG:

浅谈社会化媒体营销目标

浅谈社会化媒体营销目标

  在开始社会化媒体营销活动之前,必须明确定义目标:弄清楚要实现什么。在国外,有一些社会化媒体营销活动的目的是将一些负面结果从搜索引擎的搜索结果页面中清除出去。在这种情况下,有两个不同目标,一是声誉管理,二是建立新的链接,这些链接可能会出现在搜索引擎搜索结果页面,从而增加对企业和品牌的相关的正面宣传内容。社会化媒体营销还有其他的目标设定,包括提高品牌知名度、增加流量、提高搜索引擎排名、提高产品或服务的销售等。正确设定目标,有助于最大程度地发挥社会化媒体带来的营销价值。

  一、提高品牌知名度

  社会化媒体营销可以对品牌知名度产生巨大影响,品牌在社会化媒体中的参与度与品牌知名度有着直接的关联。从新浪微博我们就可以知道,很多知名品牌的官方微博有着较多的粉丝,也就表明了这个品牌在社会化媒体圈子中有很高的参与度,而且多数社会化网络站点都支持这种参与,在多个社会化网络中参与更能够提供品牌的知名度,如很多企业,在新浪微博、腾讯微博、搜狐微博、人人网等站点均有建立相应的官方账号,提供与网友的互动交流。

  一般来讲,当人们考虑购买产品或服务时,在决定购买还是放弃之前会先到网上去搜索。通常,消费者不愿意马上相信公司做的营销宣传,而是愿意听其他人的建议和经历。他们更愿意听用户的意见,而不是那些明确代表公司的人所说的话。人们不太信任公司的宣传,但是让社会化媒体参与者的影响可能改变很多的想法,进而让更多用户信任企业的品牌,产生购买产品意愿,从而将为公司带来巨大的价值。

  二、提高产品或服务的销售

  社会化媒体策略(例如,用户对产品或服务的评论和相关视频介绍)可以提高产品或服务的销售。当人们想要购买某种产品时,他们喜欢在作决定之前,先到Internet上看一下其他人的评论。当然,毫无疑问,品牌知名度越高,吸引的客户就越多。同时,社会化媒体营销还有一个比较重要的作用就是倾听广大用户的心声,有针对性地采纳客户的产品使用心得和建议,通过不断改善产品和服务的缺陷,提升产品或服务的质量,从而提高产品或服务的销售量。

  三、声誉管理

  社会化媒体在很多方面有利于声誉管理。社会化媒体站点出现在搜索引擎上,而且这些网页可能具有很高的排名。同理,我们应该积极参与到社会化媒体中,以便提升公司和品牌的地位。为什么呢?因为社会化媒体站点在搜索引擎中具有一定的信任度(比如我们经常在搜索引擎中搜索某些人的姓名,像开心网、人人网这类站点的页面就有出现在比较靠前的搜索结果列表中),通过在这些站点创建公司的资料页面,可以使这些页面出现在搜索引擎上,从而降低负面结果的排名。此外,好的内容会有很多人链接,这也可以降低负面搜索结果的排名,使它们不易被看到。

  此外,提升搜素引擎排名只是一个方面。企业还可以利用声誉管理策略将负面影响转化为正面影响,从而避免公众曝光带来的灾难性后果。通过社会化媒体监控和对话跟踪,企业可以将过去的负面事件转化为公司和品牌的积极的成长经历。

  四、提高搜索引擎排名

  成功的社会化媒体营销活动可以产生成千上万的链接,因为访问者会将营销网页告诉他们的朋友、家庭或听众。实际上,社会化媒体营销可以作为一种建立链接的策略,它鼓励创造性,并且不需要网站管理员来链接内容。虽然我们不太清楚搜索引擎算法,但有一件事是肯定的:指向页面的链接越多,就越有可能提高搜索引擎排名。

  五、增加流量

  很多社会化媒体营销活动的主要目标之一就是增加流量。更多的流量意味着在网站上的排名更高,例如提高Alexa这样的主流网站中的排名。如果营销者和内容创建者的目标是利用他们的内容赚钱,那么更高的排名意味着将拥有更高的广告费用收入。与每月只有50个独立访问者的站点相比,每个月的独立浏览次数超过500万的站点可以理所当然地增加5000美元的广告收入。由于更多的流泪通常代表着更高的信任度,因此其他机会也会应运而生。更多的流量也可以帮助实现社会化媒体的其他目标,例如品牌知名度管理、声誉管理和提高搜索排名。

  本文由fredrick8 http://youyanji.5d6d.net/原创,A5首发转载请保留链接,谢谢!


TAG:浅谈 社会 化媒 体营 销目 开始 社会 化媒 体营 销活 站长 网站 网站推广 赚钱

表分区的阴暗面

表分区的阴暗面

    本篇文章是我在:http://www.simple-talk.com/sql/database-administration/partitioned-tables,-indexes-and-execution-plans-a-cautionary-tale/?utm_source=simpletalk&utm_medium=email-main&utm_content=partitionedtables-20121029&utm_campaign=SQL看到了,如我们所知,大家在介绍表分区的时候一直在歌颂其好处。但一句古谚语说的好,每个人都有其阴暗面,表分区也会在特定情况下反而降低其性能。

 

例子

    首先建立测试表,并在其上建立聚集索引:

CREATE TABLE dbo.Orders    (      Id INT NOT NULL ,      OrderDate DATETIME NOT NULL ,      DateModified DATETIME NOT NULL ,      Placeholder CHAR(500)        NOT NULL        CONSTRAINT Def_Data_Placeholder DEFAULT 'Placeholder',    );GOCREATE UNIQUE CLUSTERED INDEX IDX_Orders_IdON dbo.Orders(ID);GO 

    代码1,创建测试表

    然后插入测试数据:

   

WITH    N1 ( C )          AS ( SELECT   0               UNION ALL               SELECT   0             )-- 2 rows,       N2 ( C )          AS ( SELECT   0               FROM     N1 AS T1                        CROSS JOIN N1 AS T2             )-- 4 rows,       N3 ( C )          AS ( SELECT   0               FROM     N2 AS T1                        CROSS JOIN N2 AS T2             )-- 16 rows,       N4 ( C )          AS ( SELECT   0               FROM     N3 AS T1                        CROSS JOIN N3 AS T2             )-- 256 rows,       N5 ( C )          AS ( SELECT   0               FROM     N4 AS T1                        CROSS JOIN N4 AS T2             )-- 65,536 rows,       N6 ( C )          AS ( SELECT   0               FROM     N5 AS T1                        CROSS JOIN N2 AS T2                        CROSS JOIN N1 AS T3             )-- 524,288 rows,       IDs ( ID )          AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY ( SELECT NULL                                                     ) )               FROM     N6             )             SELECT * FROM IDs    INSERT  INTO dbo.Orders            ( ID ,              OrderDate ,              DateModified            )            SELECT  ID ,                    DATEADD(second, 35 * ID, @StartDate) ,                    CASE WHEN ID % 10 = 0                     THEN DATEADD(second,                                  24 * 60 * 60 * ( ID % 31 ) + 11200 + ID                                      % 59 + 35 * ID, @StartDate)                         ELSE DATEADD(second, 35 * ID, @StartDate)                    END            FROM    IDs;GO  


   代码2.插入测试数据

 

    插入测试数据的代码貌似复杂,其实只是通过递归CTE的办法生成自1开始的数字,然后为每一个行插入略微递增的日期。对于modifyDate列,每10个记录插入一个略微大的值。此时执行如下查询:

    3
    图1.没有分区的查询计划,看起来不错

 

    对应的,得到的统计信息:

(100 行受影响)
表 'Orders'。扫描计数 1,逻辑读取 310 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 执行时间:
   CPU 时间 = 15 毫秒,占用时间 = 756 毫秒。


 

    我们DROP掉上面的索引后,重新进行表分区,如代码3所示:

--drop索引DROP INDEX IDX_Orders_DateModified_Id ON dbo.Orders;DROP INDEX IDX_Orders_Id ON dbo.Orders;GO--分区函数CREATE PARTITION FUNCTION pfOrders(DATETIME)AS RANGE RIGHT FOR VALUES ('2012-02-01', '2012-03-01','2012-04-01','2012-05-01','2012-06-01','2012-07-01','2012-08-01');GO--分区方案CREATE PARTITION SCHEME psOrders AS PARTITION pfOrdersALL TO ([primary]);GO--再次创建聚集索引CREATE UNIQUE CLUSTERED INDEX IDX_Orders_OrderDate_IdON dbo.Orders(OrderDate,ID)ON psOrders(OrderDate);GO--再次创建非聚集索引CREATE UNIQUE INDEX IDX_Data_DateModified_Id_OrderDateON dbo.Orders(DateModified, ID, OrderDate)ON psOrders(OrderDate);GO 

    代码3.进行分区

 

    然后,我们通过代码2中的代码,再次插入测试数据。然后再次运行图1中所示查询,得到的结果如图2所示。

    4

  图2.对表分区后,性能直线下降

 

    由执行计划可以看出,查询完全忽视了非聚集索引的存在,进行了表扫描。因此产生了巨大的消耗。

    对应的统计信息,如下:

(100 行受影响)表'Worktable'。扫描计数0,逻辑读取0 次,物理读取0 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。表'Orders'。扫描计数2,逻辑读取10071 次,物理读取0 次,预读2 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。 SQL Server 执行时间:   CPU 时间= 219 毫秒,占用时间= 783 毫秒。

 

   不难看出,性能下降的十分明显。

 

    因此,不要在生产环境中数据量一大就想到表分区。在进行表分区之前,首先考虑一下对分区计划进行测试,否则在生产环境中出现上面的情况就悲剧了。


TAG:

选择WEB开发语言的重与轻

选择WEB开发语言的重与轻

在打算开发一个网站时,选择什么语言,是首先需要面对的问题。目前主流的WEB开发语言有ASP.NET、PHP、JSP; 作为MS上世纪老将ASP,就不再提及,如果是因为维护方面的原因而必须使用,可考虑升级到ASP.NET,而作为新开发一个语言,实在找不到理由再使用它了;

创业如何选择WEB开发语言

以下将对这三种语言做对比,以供权衡:

上手度

.NET: 5分

PHP:3分

JSP:1分

如果你是一个WEB方面的新手,这三门WEB语言的学习成本差别很大。ASP.net 作为微软的产品,继承了其一贯的特点,方便上手,易用;甚至你都不用编码,靠着鼠标拖拖拽拽,都能整一个网站出来(网上,就有这样的视频讲解。当然,这样出来的网站是没法应用到实际中的,且不说其代码复用率极其低下,拖拽出来的代码,灵活度太小,效率也低(eg:gridview中的分页实现载入数据是一次全部载入的))。同时,凭着其强大的开发工具visual studio系列,在程序出现bug时,能最大程度的提供问题说明,让开发者尽快定位到问题所在。JSP相比而言难度就大多了,光是配置一个开发环境就得耗费不少精力,JSP语言最为头疼的就是程序调试方面,当程序出现问题时,并不能得到友好的错误提示,调试BUG比较耗时。再就是JSP依托的JAVA过于庞大,着实是个无底洞,开始容易,越往后发现要学的越多,一般互联网公司,还真难以有几个能驾驭,再普及的;PHP学习算是基于.net和JSP之间,语法与C语言一脉相承,上手也算容易;

资源

.NET:4分

PHP:5分

JSP:2分

资源包括能获取到的学习资料、开放源码,以及各种插件和库。PHP在这方面遥遥领先,粗略看来,各种网站的知名开源产品,大都使用PHP实现,如博客wordpress、论坛discuz、Wiki知识库MediaWiki等;

相应的各种插件、库、开源代码的数量和质量更是其它语言无法相比。.NET资源也比较丰富,选用.NET幸福的是有MS这么一个强大后台做有力的技术支持,CSDN 的资料不但多,质量更是上乘;JSP由于其门槛高的缘故,致使在这方面的资料也比较少;

系统架构实施

.NET:3分

PHP:5分

JSP: 3分

.NET 部署环境是windows 03/08+MS SQL Server + IIS。都是微软的产品,优点就是部署容易,方便,兼容性好。最为头疼就是安全方面的问题,windows下总是得不停的打补丁,但还是时常遭受这样那样的攻击;再就是数据库方面,MS SQL 与Oracle在并发处理、效率上始终有个数据量级的差距,2008发布之后据说是好了些,但总是让人感觉不大放心;PHP就是LAMP架构,即 Linux+Apache+My Sql + PHP;Linux平台在我这几年的熟悉后,深刻体会到其就是为服务器而生,各种的工具让人爱不释手;My Sql作为开源产品,首先在软件费用上就公司能省下一大笔,其性能优秀,即使某日网站规模的扩大致使数据库出现瓶颈,也可组建一个数据库团队来研究改进。不过,在Oracle收购MySql之后,为其前景蒙上了一层阴影。有可能,在不久的将来,MySql的部分功能就会闭源。JSP的架构小则是 Linux+apache+tomcat+MySql ,大则Linux + Apache + Java (WebSphere) + Oracle,对于一般小型网站的部署,大都选用第一种;WebSphere过于庞大,一般部署都得独自占用一台服务器;Oracle是数据库中的王者,性能优异(国内银行证券的数据库应用,一般只有DB2和Oracle两种选择),但其价格不菲,非一般创业公司能够承担(按CPU收费,一般 25w/cpu/每年;次年会收取15%的维护费)需要提一下的是JSP系统架构部署有些难度,架构出现问题后,排错是个很痛苦的过程。

管理维护

.NET:2分

PHP:5分

JSP: 4分

WEB 管理中,经常会通过远程来管理网站,远程管理的方便与否关键看命令行工具的支持力度及脚本环境的操作便捷性。.NET只能跑在Windows平台上,远程管理一般只能通过图形化界面远程鼠标操作,当网速比较慢的时候,管理员的心情无比复杂,远程操作基本上是在一幅幅图片上估计下一张图片中鼠标的移动位置;Windows平台的命令行环境非常差,IIS的命令行工具功能少,bat脚本也难学难用(虽然可以通过安装cygwin工具来模拟linux shell环境,但系统操作,系统资源监控方面还是无能为力); Linux下就幸福多了,远程基本上都是通过SSH连接,安全有保证,shell脚本消耗的网络带宽也只是图形化界面的百分之一,管理流畅,心情舒畅;各种程序消耗资源都可远程监控;Linux就是为服务器而生,此话毫不为过。PHP、JSP都可跨平台,一般其系统部署都是在Linux下,MySql数据库和apche服务器都可通过相应的命令行工具有效管理。JSP的应用服务器在这方面支持要少些;

跨平台

.NET:0 分

PHP:5分

JSP:5分

曾几何时,我对跨平台不屑一顾,想着好端端的一个应用,既然是定位在这个平台上开发的,干嘛要移植到其它平台上。如今,我是深有体会。手上一个项目,公司由于成本压力,需要将应用从 SUN Unix移植到Linux平台(Redhat)。我们的程序基本上不用改动,在Linux上编译就只多了几个警告,改改就可上线了;而另一个项目,我被深度套牢!我们使用的是Windows平台的ASP.NET,由于受到Windows的病毒泛滥加上WEB管理的麻烦,迫切希望能移植到Linux平台,但这基本上不可能实现。若真想将这应用移植,只有下狠心使用PHP等重写应用,换系统架构。PHP、JSP都可跨平台,不用多说。

当前主流应用的选择

PHP:当前WEB创业公司的语言选择主要集中在PHP。除了上述原因还有一个重要原因就是PHP开发程序员队伍的规模。

淘宝网(阿里巴巴): Linux操作系统 + Web 服务器: Apache +PHP

PHP的应用太多,这里不再列举;

ASP.NET:在创业公司中应用不多,知名互联网应用有限,目前比较知名的应用有:

博客园、CSDN、eBay、MySpace等;

JSP:JSP 实施比较庞大,用好的就得用到websphere或weblogic这样的大物件,种种原因使得JSP在互联网公司中应用并不多,除了阿里巴巴,没有几个公司能驾驭JAVA(JSP)。深入JAVA需要多年修炼,而成精之后,公司是否有足够的薪水来留住这么一群高手是个考验;

阿里巴巴:Linux+(JSP)

总结

如今流行的Ruby,也是创业公司的一个选择;python的优雅,也可考虑尝试(豆瓣使用的Python);但选择这些语言的一个风险是公司规模扩大后,是否能找到足够的人才得打个问号。总的来说,创业面临选择一门开发语言,PHP当是首选;如果不考虑Linux平台,铁定在Windows上运营,.NET也是一个不错的选择。JSP小公司勿近,危险,容易造成的资金套牢。

个人总结的点滴,园友们有不同见解可以互相讨论,别哄楼哦。


TAG:

深入ASP.NET MVC 之一:IIS到路由表

深入ASP.NET MVC 之一:IIS到路由表

关于IIS的介绍,可以参考Introduction to IIS Architecture 。IIS到托管代码的入口点是位于System.Web dll中

public sealed class ISAPIRuntime : MarshalByRefObject, IISAPIRuntime, IISAPIRuntime2, IRegisteredObject

的方法

    public int ProcessRequest(IntPtr ecb, int iWRType)        {            IntPtr intPtr = IntPtr.Zero;            if (iWRType == 2)            {                intPtr = ecb;                ecb = UnsafeNativeMethods.GetEcb(intPtr);            }            ISAPIWorkerRequest iSAPIWorkerRequest = null;            int result;            try            {                bool useOOP = iWRType == 1;                iSAPIWorkerRequest = ISAPIWorkerRequest.CreateWorkerRequest(ecb, useOOP);                iSAPIWorkerRequest.Initialize();                string appPathTranslated = iSAPIWorkerRequest.GetAppPathTranslated();                string appDomainAppPathInternal = HttpRuntime.AppDomainAppPathInternal;                if (appDomainAppPathInternal == null || StringUtil.EqualsIgnoreCase(appPathTranslated, appDomainAppPathInternal))                {                    HttpRuntime.ProcessRequestNoDemand(iSAPIWorkerRequest);                    result = 0;                }                else                {                         //……       
                }            }            catch (Exception ex)            {                      //……
            }            return result;        }

(注:IIS7的入口似乎是PipeLineRuntime.InitializeApplication(IntPtr appContext),过程有所不同,但是不影响后面的流程)其中ecb是一个指向httprequest的信息的指针,由IIS提供。CreateWorkerRequest根据ecb提供的信息,比如IIS的版本、模式等,创建一个ISAPIWorkerRequest对象,ISAPIWorkerReuqeuest是一个http请求的.NET封装。创建好WorkerRequest之后,调用HttpRuntime.ProcessRequestNoDemand(iSAPIWorkerRequest);开始执行请求,这个方法是会从httpRuntime对象中的一个队列中获取一个workerrequest进行处理,最终调用的是HttpRuntime类中的ProcessRequestInternal(代码有删节):

private void ProcessRequestInternal(HttpWorkerRequest wr)        {            Interlocked.Increment(ref this._activeRequestCount);            if (this._disposingHttpRuntime)                 wr.SendStatus(503, "Server Too Busy");            HttpContext httpContext;            try            {                httpContext = new HttpContext(wr, false);            }            catch            {                try                {                    wr.SendStatus(400, "Bad Request");                    //…….
                }                finally                {                    Interlocked.Decrement(ref this._activeRequestCount);                }            }            wr.SetEndOfSendNotification(this._asyncEndOfSendCallback, httpContext);            HostingEnvironment.IncrementBusyCount();            try            {                httpContext.Response.InitResponseWriter();                IHttpHandler applicationInstance = HttpApplicationFactory.GetApplicationInstance(httpContext);                if (applicationInstance == null)                {                    throw new HttpException(SR.GetString("Unable_create_app_object"));                }                if (applicationInstance is IHttpAsyncHandler)                {                    IHttpAsyncHandler httpAsyncHandler = (IHttpAsyncHandler)applicationInstance;                    httpContext.AsyncAppHandler = httpAsyncHandler;                    httpAsyncHandler.BeginProcessRequest(httpContext, this._handlerCompletionCallback, httpContext);                }                else                {                    applicationInstance.ProcessRequest(httpContext);                    this.FinishRequest(httpContext.WorkerRequest, httpContext, null);                }            }            catch (Exception e)            {                httpContext.Response.InitResponseWriter();                this.FinishRequest(wr, httpContext, e);            }        }

在这段代码中,HttpRuntime可以根据当前服务器的状况回送不同的Http状态码。如果一切正常,首先根据WorkerRequest创建了HttpContext,HttpApplication根据HttpContext创建了一个IHttpHandler对象,这是一个比较复杂的过程。先看代码:

        internal static IHttpHandler GetApplicationInstance(HttpContext context)        {            if (HttpApplicationFactory._customApplication != null)            {                return HttpApplicationFactory._customApplication;            }            if (context.Request.IsDebuggingRequest)            {                return new HttpDebugHandler();            }            HttpApplicationFactory._theApplicationFactory.EnsureInited();            HttpApplicationFactory._theApplicationFactory.EnsureAppStartCalled(context);            return HttpApplicationFactory._theApplicationFactory.GetNormalApplicationInstance(context);        }

customApplication应该是使用 ASP.NET State Service的时候的情况,DebugHandler应该是调试状态下的情况,不作深究,除此以外,一共有三大步骤,首先要确保调用且仅调用了一次 ApplicationFactory的Init方法,在这个方法中,主要完成了以下工作(代码有删节):

        private void Init()        {             this._appFilename = HttpApplicationFactory.GetApplicationFile();             this.CompileApplication();        }

其中GetApplicationFile为:

internal static string GetApplicationFile()        {            return Path.Combine(HttpRuntime.AppDomainAppPathInternal, "global.asax");        }

ASP.NET在这里关联上了global.asax .在CompileApplication方法中,除了回去编译ASP.NET项目中未编译的代码,还有两件重要的工作:

private void CompileApplication()        {            this._theApplicationType = BuildManager.GetGlobalAsaxType();            //Use BuilderManager to build code
            this.ReflectOnApplicationType();        }

首先是设置了theApplicationType,比如默认情况下,一个ASP.NET MVC的applicationType将是 MvcApplication,也就是global.asax中那个类。ReflectOnApplicationType 代码如下:

        private void ReflectOnApplicationType()        {            ArrayList arrayList = new ArrayList();            MethodInfo[] methods = this._theApplicationType.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);            MethodInfo[] array = methods;            for (int i = 0; i < array.Length; i++)            {                MethodInfo methodInfo = array[i];                if (this.ReflectOnMethodInfoIfItLooksLikeEventHandler(methodInfo))                {                    arrayList.Add(methodInfo);                }            }            Type baseType = this._theApplicationType.BaseType;            if (baseType != null && baseType != typeof(HttpApplication))            {                methods = baseType.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);                MethodInfo[] array2 = methods;                for (int j = 0; j < array2.Length; j++)                {                    MethodInfo methodInfo2 = array2[j];                    if (methodInfo2.IsPrivate && this.ReflectOnMethodInfoIfItLooksLikeEventHandler(methodInfo2))                    {                        arrayList.Add(methodInfo2);                    }                }            }            this._eventHandlerMethods = new MethodInfo[arrayList.Count];            for (int k = 0; k < this._eventHandlerMethods.Length; k++)            {                this._eventHandlerMethods[k] = (MethodInfo)arrayList[k];            }        }

简单来说,这个方法反射了global.asax中的那个类,并且将里面的类似于EventHandler的方法放到this._eventHandlerMethods中。

例如,ReflectOnMethodInfoIfItLooksLikeEventHandler中的代码片段:

if (StringUtil.EqualsIgnoreCase(name, "Application_OnStart") || StringUtil.EqualsIgnoreCase(name, "Application_Start"))            {                this._onStartMethod = m;                this._onStartParamCount = parameters.Length;            }

确保ApplicationFactory的Init被调用过之后,接下来,要保证Global.asax中的App_Start被调用。EnsureAppStartCalled 的核心代码就是调用了this._onStartMethod,这个方法在上面介绍Init方法中已经被初始化好。EnsureAppStartCalled做的事情虽然简单,但是其实现还是挺繁琐的,估计是为了线程安全性等考虑,不再分析其具体实现。最后,就是真正的获取一个ApplicationHandler的方法了:

        private HttpApplication GetNormalApplicationInstance(HttpContext context)        {            HttpApplication httpApplication = null;            lock (this._freeList)            {                if (this._numFreeAppInstances > 0)                {                    httpApplication = (HttpApplication)this._freeList.Pop();                    this._numFreeAppInstances--;                    if (this._numFreeAppInstances < this._minFreeAppInstances)                    {                        this._minFreeAppInstances = this._numFreeAppInstances;                    }                }            }            if (httpApplication == null)            {                httpApplication = (HttpApplication)HttpRuntime.CreateNonPublicInstance(this._theApplicationType);                using (new ApplicationImpersonationContext())                {                    httpApplication.InitInternal(context, this._state, this._eventHandlerMethods);                }            }            if (AppSettings.UseTaskFriendlySynchronizationContext)            {                httpApplication.ApplicationInstanceConsumersCounter = new CountdownTask(1);                httpApplication.ApplicationInstanceConsumersCounter.Task.ContinueWith(delegate(Task _, object o)                {                    HttpApplicationFactory.RecycleApplicationInstance((HttpApplication)o);                }, httpApplication, TaskContinuationOptions.ExecuteSynchronously);            }            return httpApplication;        }

可以看到,首先可用的HttpApplication都是缓存在一个List中的,如果没有可用的HttpApplication,则会根据theApplicationType来创建一个,核心方法是调用InitInternal方法,注意到最后一个参数是this._eventHandlerMethods,这就是global.asax中的各个EventHandler。InitInternal方法也是一个比较复杂的方法,里面对于IIS采用的是Integrated模式还是Classic模式进行分别的处理,主要完成的工作时HttpModule的初始化和处理请求过程中每个步骤触发事件处理程序的准备。先看Integrate模式下Module的初始化:

        private void InitIntegratedModules()        {            this._moduleCollection = this.BuildIntegratedModuleCollection(HttpApplication._moduleConfigInfo);            this.InitModulesCommon();        }

第一步是根据配置的Module名字实例化Module对象,第二步代码如下:

        private void InitModulesCommon()        {            int count = this._moduleCollection.Count;            for (int i = 0; i < count; i++)            {                this._currentModuleCollectionKey = this._moduleCollection.GetKey(i);                this._moduleCollection[i].Init(this);            }            this._currentModuleCollectionKey = null;            this.InitAppLevelCulture();        }
注意加粗的代码,它调用了IHttpModule的Init方法。这是ASP.NET挂载Module关键之处。接下来看
public class UrlRoutingModule : IHttpModule

这个类的Init实现。这个HttpModule是实现URL路由的关键。在.NET 4之前它是位于System.Web.Routing.dll之中的,.NET 4之后它已经被合并入System.Web.dll中了成为了Asp.NET不可分割的一部分。

        protected virtual void Init(HttpApplication application)        {            if (application.Context.Items[UrlRoutingModule._contextKey] != null)            {                return;            }            application.Context.Items[UrlRoutingModule._contextKey] = UrlRoutingModule._contextKey;            application.PostResolveRequestCache += new EventHandler(this.OnApplicationPostResolveRequestCache);        }

最核心的代码是最后一行,它注册了 PostResolveRequestCache事件的响应程序OnApplicationPostResolveRequestCache。 响应程序的核心代码如下:

public virtual void PostResolveRequestCache(HttpContextBase context)        {            RouteData routeData = this.RouteCollection.GetRouteData(context);            if (routeData == null)            {                return;            }            IRouteHandler routeHandler = routeData.RouteHandler;            if (routeHandler == null)            {                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, SR.GetString("UrlRoutingModule_NoRouteHandler"), new object[0]));            }            if (routeHandler is StopRoutingHandler)            {                return;            }            RequestContext requestContext = new RequestContext(context, routeData);            context.Request.RequestContext = requestContext;            IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);            if (httpHandler == null)            {                throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, SR.GetString("UrlRoutingModule_NoHttpHandler"), new object[]                {                    routeHandler.GetType()                }));            }            if (!(httpHandler is UrlAuthFailureHandler))            {                context.RemapHandler(httpHandler);                return;            }            if (FormsAuthenticationModule.FormsAuthRequired)            {                UrlAuthorizationModule.ReportUrlAuthorizationFailure(HttpContext.Current, this);                return;            }            throw new HttpException(401, SR.GetString("Assess_Denied_Description3"));        }

在这里,代码根据RouteData获得RouteHandler,RouteHandler获得HttpHandler。这里的详情下文再分析,至此,一个HTTP请求将会通过IIS传递到路由模块了。下面再会这段代码何时会被触发。先回到InitInternal方法中第二项工作,也就是处理请求过程中每个步骤触发事件处理程序的准备。ASP.NET首先定义了一个枚举来表示处理一个request的处理周期

    public enum RequestNotification    {        BeginRequest = 1,        AuthenticateRequest = 2,        AuthorizeRequest = 4,        ResolveRequestCache = 8,        MapRequestHandler = 16,        AcquireRequestState = 32,        PreExecuteRequestHandler = 64,        ExecuteRequestHandler = 128,        ReleaseRequestState = 256,        UpdateRequestCache = 512,        LogRequest = 1024,        EndRequest = 2048,        SendResponse = 536870912    }

在InitInternal中,InitModule完成之后紧接着调用了

private void HookupEventHandlersForApplicationAndModules(MethodInfo[] handlers)     

这个方法的作用是将Global.asax中的方法(事件响应)加到合适的事件上,这里的事件可以是各个HttpModule的事件。实际上就是根据命名规则去找到相应的HttpModule的事件。这部分的实现也是很有技巧性,本文不多做分析,可以参考 http://aspnetresources.com/articles/event_handlers_in_global_asax 。 再接下来,InitInternal实例化了一个StepManager,同样有Integrate和Classic的两种,下面以Integrate的PipelStepManager为例,紧接着调用了StepManager的BuildStep方法:

            internal override void BuildSteps(WaitCallback stepCallback)            {                HttpApplication application = this._application;                HttpApplication.IExecutionStep step = new HttpApplication.MaterializeHandlerExecutionStep(application);                application.AddEventMapping("ManagedPipelineHandler", RequestNotification.MapRequestHandler, false, step);                application.AddEventMapping("ManagedPipelineHandler", RequestNotification.ExecuteRequestHandler, false, application.CreateImplicitAsyncPreloadExecutionStep());                HttpApplication.IExecutionStep step2 = new HttpApplication.CallHandlerExecutionStep(application);                application.AddEventMapping("ManagedPipelineHandler", RequestNotification.ExecuteRequestHandler, false, step2);                HttpApplication.IExecutionStep step3 = new HttpApplication.TransitionToWebSocketsExecutionStep(application);                application.AddEventMapping("ManagedPipelineHandler", RequestNotification.EndRequest, true, step3);                HttpApplication.IExecutionStep step4 = new HttpApplication.CallFilterExecutionStep(application);                application.AddEventMapping("AspNetFilterModule", RequestNotification.UpdateRequestCache, false, step4);                application.AddEventMapping("AspNetFilterModule", RequestNotification.LogRequest, false, step4);                this._resumeStepsWaitCallback = stepCallback;            }

 

这里面实例化了很多具体的IExecutionStep对象,并且和RequestNotification关联起来。这些step将是完成一个request的必要步骤。AddEventMapping的核心代码如下:

            PipelineModuleStepContainer moduleContainer = this.GetModuleContainer(moduleName);            if (moduleContainer != null)            {                moduleContainer.AddEvent(requestNotification, isPostNotification, step);            }

moduleContainer 中有一个IExecutionStep列表,里面的step是按照requestNotification的顺序排列的,这点非常重要。至此,InitInternal的工作基本完成了。HttpApplication的一个实例也已经初始化完毕,直接跳回至ProccessRequestInternal方法,接下来就是调用BeginProcessRequest开始真正的处理了。这个方法的核心是调用 StepManager的ResumeSteps方法。更具体的,对于使用Integrated模式的ASP.NET的项目来说,是调用了PipelineStepManager的ResumeSteps方法。这个方法也很复杂,但是核心的代码就是两行:

     HttpApplication.IExecutionStep nextEvent = this._application.CurrentModuleContainer.GetNextEvent(context.CurrentNotification, context.IsPostNotification, context.CurrentModuleEventIndex);     error = this._application.ExecuteStep(nextEvent, ref flag3);

也就是从PipelineModuleStepContainer中取出准备好的step逐个执行。本文不再分析每个step的具体内容,有了以上的准备,接下来看本文的主题,routing module是什么时候被执行的。 回到上面routing module的Init方法中注册事件的方法,其内部实现是:

        public event EventHandler PostResolveRequestCache        {            add            {                this.AddSyncEventHookup(HttpApplication.EventPostResolveRequestCache, value, RequestNotification.ResolveRequestCache, true);            }            remove            {                this.RemoveSyncEventHookup(HttpApplication.EventPostResolveRequestCache, value, RequestNotification.ResolveRequestCache, true);            }        }

AddSyncEventHookup的核心代码如下:

                PipelineModuleStepContainer moduleContainer = this.GetModuleContainer(this.CurrentModuleCollectionKey);                if (moduleContainer != null)                {                    HttpApplication.SyncEventExecutionStep step = new HttpApplication.SyncEventExecutionStep(this, (EventHandler)handler);                    moduleContainer.AddEvent(notification, isPostNotification, step);                }

在这里,他添加了一个SyncEventExecutionStep到moduleContainer中,因此,在执行到HttpApplication.EventPostResolveRequestCache的step的时候,SyncEventExecutionStep的Execute方法将被执行,这个方法的核心代码是:

this._handler(this._application, this._application.AppEvent);

 

这里的_handler,将会是new EventHandler(this.OnApplicationPostResolveRequestCache); _application是HttpApplication实例。

因此,routing module的代码就被执行了。

小结:本文大致分析了System.Web中的源代码,以asp.net中一个request的生命周期是如何的,介绍了routing module是怎样挂载到这个处理流程中的。Routing module只是一个普通的http module,其他的http module原理类似。下文将重点介绍routing module是如何工作的。


TAG:

2012年10月29日星期一

Response.ContentType 详细列表

Response.ContentType 详细列表

不同的ContentType 会影响客户端所看到的效果.默认的ContentType为 text/html 也就是网页格式.
代码如:

<% response.ContentType ="text/html" %>
<!--#i nclude virtual="/ContentType.html" -->

显示的为网页,而

<% response.ContentType ="text/plain" %>
<!--#i nclude virtual="/sscript/ContentType.html" -->

则会显示html原代码.

以下为一些常用的 ContentType
GIF images

<% response.ContentType ="image/gif" %>
<!--#i nclude virtual="/myimage.gif" -->

JPEG images

<% response.ContentType ="image/jpeg" %>
<!--#i nclude virtual="/myimage.jpeg" -->

TIFF images

<% response.ContentType ="image/tiff" %>
<!--#i nclude virtual="/myimage.tiff" -->

MICROSOFT WORD document

<% response.ContentType ="application/msword" %>
<!--#i nclude virtual="/myfile.doc" -->

RTF document

<% response.ContentType ="application/rtf" %>
<!--#i nclude virtual="/myfile.rtf" -->

MICROSOFT EXCEL document

<% response.ContentType ="application/x-excel" %>
<!--#i nclude virtual="/myfile.xls" -->

MICROSOFT POWERPOINT document

<% response.ContentType ="application/ms-powerpoint" %>
<!--#i nclude virtual="/myfile.pff" -->

PDF document

<% response.ContentType ="application/pdf" %>
<!--#i nclude virtual="/myfile.pdf" -->

ZIP document

<% response.ContentType ="application/zip" %>
<!--#i nclude virtual="/myfile.zip" -->


下面是更详细的ContentType
'ez' => 'application/andrew-inset',
'hqx' => 'application/mac-binhex40',
'cpt' => 'application/mac-compactpro',
'doc' => 'application/msword',
'bin' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'lha' => 'application/octet-stream',
'lzh' => 'application/octet-stream',
'exe' => 'application/octet-stream',
'class' => 'application/octet-stream',
'so' => 'application/octet-stream',
'dll' => 'application/octet-stream',
'oda' => 'application/oda',
'pdf' => 'application/pdf',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
'smi' => 'application/smil',
'smil' => 'application/smil',
'mif' => 'application/vnd.mif',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'wb'wmlc' => 'application/vnd.wap.wmlc',
'wmlsc' => 'application/vnd.wap.wmlscriptc',
'bcpio' => 'application/x-bcpio',
'vcd' => 'application/x-cdlink',
'pgn' => 'application/x-chess-pgn',
'cpio' => 'application/x-cpio',
'csh' => 'application/x-csh',
'dcr' => 'application/x-director',
'dir' => 'application/x-director',
'dxr' => 'application/x-director',
'dvi' => 'application/x-dvi',
'spl' => 'application/x-futuresplash',
'gtar' => 'application/x-gtar',
'hdf' => 'application/x-hdf',
'js' => 'application/x-javascript',
'skp' => 'application/x-koan',
'skd' => 'application/x-koan',
'skt' => 'application/x-koan',
'skm' => 'application/x-koan',
'latex' => 'application/x-latex',
'nc' => 'application/x-netcdf',
'cdf' => 'application/x-netcdf',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'swf' => 'application/x-shockwave-flash',
'sit' => 'application/x-stuffit',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'tar' => 'application/x-tar',
'tcl' => 'application/x-tcl',
'tex' => 'application/x-tex',
'texinfo' => 'application/x-texinfo',
'texi' => 'application/x-texinfo',
't' => 'application/x-troff',
'tr' => 'application/x-troff',
'roff' => 'application/x-troff',
'man' => 'application/x-troff-man',
'me' => 'application/x-troff-me',
'ms' => 'application/x-troff-ms',
'ustar' => 'application/x-ustar',
'src' => 'application/x-wais-source',
'xhtml' => 'application/xhtml+'xht' => 'application/xhtml+'zip' => 'application/zip',
'au' => 'audio/basic',
'snd' => 'audio/basic',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'kar' => 'audio/midi',
'mpga' => 'audio/mpeg',
'mp2' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'aif' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'm3u' => 'audio/x-mpegurl',
'ram' => 'audio/x-pn-realaudio',
'rm' => 'audio/x-pn-realaudio',
'rpm' => 'audio/x-pn-realaudio-plugin',
'ra' => 'audio/x-realaudio',
'wav' => 'audio/x-wav',
'pdb' => 'chemical/x-pdb',
'xyz' => 'chemical/x-xyz',
'bmp' => 'image/bmp',
'gif' => 'image/gif',
'ief' => 'image/ief',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'png' => 'image/png',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'djvu' => 'image/vnd.djvu',
'djv' => 'image/vnd.djvu',
'wbmp' => 'image/vnd.wap.wbmp',
'ras' => 'image/x-cmu-raster',
'pnm' => 'image/x-portable-anymap',
'pbm' => 'image/x-portable-bitmap',
'pgm' => 'image/x-portable-graymap',
'ppm' => 'image/x-portable-pixmap',
'rgb' => 'image/x-rgb',
'xbm' => 'image/x-xbitmap',
'xpm' => 'image/x-xpixmap',
'xwd' => 'image/x-xwindowdump',
'igs' => 'model/iges',
'iges' => 'model/iges',
'msh' => 'model/mesh',
'mesh' => 'model/mesh',
'silo' => 'model/mesh',
'wrl' => 'model/vrml',
'vrml' => 'model/vrml',
'css' => 'text/css',
'html' => 'text/html',
'htm' => 'text/html',
'asc' => 'text/plain',
'txt' => 'text/plain',
'rtx' => 'text/richtext',
'rtf' => 'text/rtf',
'sgml' => 'text/sgml',
'sgm' => 'text/sgml',
'tsv' => 'text/tab-separated-values',
'wml' => 'text/vnd.wap.wml',
'wmls' => 'text/vnd.wap.wmlscript',
'etx' => 'text/x-setext',
'xsl' => 'text/''mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpe' => 'video/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
'mxu' => 'video/vnd.mpegurl',
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference/x-cooltalk'


TAG:

浅谈如何养成平和淡定心态运营网站

浅谈如何养成平和淡定心态运营网站

  今天和大家谈一谈做站用心的这个问题,笔者先谈一谈自己亲身经历的事情。笔者在9月份上线了一个网站,这个网站上线之后每天准时更新原创,网站第三天被收录,然后又继续坚持更新原创内容,不过从一篇原创内容加到了两篇,网站第七天被K,直到现在任然坚持更新原创,网站还是处于被K的状态。而笔者同样在10月份上线了一个网站,使用的是同样的程序,除了服务器IP地址不一样之外,整个网站都是差不多类型的,网站上线的时候就去采集了十几篇文章,最后写了两篇原创的文章,网站第二天就被收录,被收录之后我也没有进行管理,只是想起了这个网站就去采集一些内容放到网站上,至今网站还好好的,且部分关键词已经有了首页排名,这让笔者寒心。

  笔者也是一个老实人,老老实实做站的人,但是两种做站的方式却换来了截然不同的结果,这让笔者感觉到做站不要太用心,平常化做站即可,为了测试这个想法,笔者在10月22日上线了一个论坛,论坛中的帖子全部是采集的,上线当天即被收录,当天流量达到100+,到今天这个论坛每天也是大量的采集+部分原创,流量还是100+,从中我们可以看出做站就是要平常化,那么一名站长如何平常化的去做网站呢?

  首先站长对建立网站要淡然,现在一部分站长或许有了强迫症,一想到自己要做网站就恨不得网站立即能够上线,然后被百度收录,然后盈利。其实做网站盈利是一个漫长的过程,要想自己的网站赚钱,那么首要条件就是要淡然,在选择域名、空间、程序的时候不要心急,先思考,多测试,做决定,这都是一个过程,如果你急忙忙的就将网站上线了,百度不收录你又急了,于是你大量的发布外链,这一个过程不仅仅是浪费时间,更多的是浪费你自己的精力。不管是做什么类型的网站,在这里笔者都建议你首先要树立起对网站淡然的心,也就是对建站要平常化。

  其次站长对网站的运营不要太担心,什么事情都有自己的规律,网站运营也是一样,或许您的网站今日什么错误都没有换,但是网站却被百度K了,这其实是很正常的情况,现在百度数据库经常出错,站长不要认为网站被K就什么都没有了,其实不是这样的,网站被K并不重要,重要的是我们不要急,很多站长看到网站被K后就立即去大量的原创内容,然后大量的发布外链,站长你想一下,如果你的网站真被百度K了,在做这些后续的事情还有用吗?

  最后站长对网站的排名不要太过于心急,网站排名是网站综合性能的展现,不是说什么样的网站都能够有良好的排名,作为一名站长不要对排名太过于纠结了,网站有好的排名固然是好事,但是网站没有排名并不能说是坏事,百度首页也就只能够列下10个网站,如果你想让自己的网站有良好的排名,那么就要学会等待,不要想到网站没有排名今天就去发1000个外链,这样对排名提升是毫无作用的。

  站长做站不要太过于用心了,能够做到哪个程度就去做,我们只能够尽力而不是用蛮力,那样对自己也是一种伤害,我相信只要坚持每天对网站进行更新,长期的维护网站,那么网站必然会有好的汇报,而并不是说靠蛮力你的网站就能够给你巨额的回报,那也是不现实的。本文来源于杭州seo http://www.snf8.com,转载请保留作者链接,写了这么多,望大家支持。


TAG:浅谈 如何 养成 淡定 心态 运营 网站 今天 大家 一谈 站长 网站 网站推广 赚钱

使用PowerShell部署Windows store app时遇到0x80073CF9和使用VS部署时碰到0X80073D05的解决办法

使用PowerShell部署Windows store app时遇到0x80073CF9和使用VS部署时碰到0X80073D05的解决办法

最近公司开始开发Windows 8 app,由于是生手,碰到很多问题基本只能上网搜索,公司没人懂这个,因此花了不少时间在处理一些其实很简单的问题上,比如说今天碰到的这个问题,尝试使用power shell在本机部署程序碰到0x80073CF9错误,如下图所示:

使用VS内置的部署方式部署后碰到0X80073D05错误,如下图所示:

然后就上网找,找了一大圈,然后找到了微软的官方网站:

http://msdn.microsoft.com/en-us/library/hh973484.aspx

这里面找到了0X80073D05错误的解决办法

说是之前版本的文件没有删掉,于是找到C:\Users\UserName\AppData\Local\Packages 这个目录(具体路径自己替换一下,中文系统Users替换为"用户"),手动把我自己的程序文件夹删掉,结果无法完全删除,这奇怪了;

想来想去,我想不会是模拟器的问题吧,因为我一直开着模拟器,注销模拟器,然后居然就可以成功删除了,然后立即再次使用ps部署,OK了,使用VS内置的部署也可以了,看来就是这个模拟器的问题啊,一直占用一些文件导致部署时无法清除旧的数据文件所导致。


TAG:

Unsettings 0.0.8 发布,支持 Unity 6

Unsettings 0.0.8 发布,支持 Unity 6

Unsettings 0.0.8 支持 Ubuntu 12.10 的 Unity 6,修复一些 bug,增加了巴西葡萄牙语和斯洛伐克的语言支持。

Unsettling 是用于Unity桌面环境的一个图形配置程序,它可以让你改变一些Unity的设置。同样可以让你保存到一个文本文件,或者从文本文件加载(以json格式),因此你可以很容易的备份你的设置或者复制这些设置到不同的账户。


TAG:

ASP.NET 中使用WebServer进行调试时,自定义的Identity出现 SerializationException的解决方法

ASP.NET 中使用WebServer进行调试时,自定义的Identity出现 SerializationException的解决方法

今天遇到一个奇怪的问题,虽然已经解决了,但是原因仍然不是很清楚。

在新建的一个ASP.NET MVC中使用了自定义的Identity,在使用VS自带的WebServer调试时,发生了类似如下错误:

Type is not resolved for member'XAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.Exception Details: System.Runtime.Serialization.SerializationException: Type is not resolved for member 'XAssembly.MyIdentity,XAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.Source Error:An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.Stack Trace:[SerializationException: Type is not resolved for member 'XAssembly.MyIdentity,XAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.]   Microsoft.VisualStudio.WebHost.Connection.get_RemoteIP() +0   Microsoft.VisualStudio.WebHost.Request.GetRemoteAddress() +65   System.Web.HttpRequest.get_UserHostAddress() +18   System.Web.HttpRequest.get_IsLocal() +13   System.Web.Configuration.CustomErrorsSection.CustomErrorsEnabled(HttpRequest request) +86   System.Web.HttpContext.get_IsCustomErrorEnabled() +42   System.Web.Configuration.UrlAuthFailedErrorFormatter.GetErrorText(HttpContext context) +16   System.Web.Security.UrlAuthorizationModule.WriteErrorMessage(HttpContext context) +29   System.Web.Security.UrlAuthorizationModule.OnEnter(Object source, EventArgs eventArgs) +8777783   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

同样的代码,在使用IIS或IIS Express进行调试或运行时,就不会出错。

最初尝试根据提示添加Attribute [Serializable]但是错误依旧。

后来将原来Identity的定义由

public class MyIdentity : IIdentity{//...}

改为

public class MyIdentity : MarshalByRefObject ,IIdentity{//...}

即解决,但是最终发生原因还是没有探明,从异常上看来,似乎是WebServer内部的一个Bug。

References:

http://stackoverflow.com/questions/1277371/serializationexception-on-customidentity-when-user-is-denied-in-asp-net


TAG:

网站外链建设需要注意的两个宽度

网站外链建设需要注意的两个宽度

  外链宽度,即我们通常说的外链维度。 按照一般的SEOer的思维,发外链就是给网站首页做外链建设。而事实上,如果我们忽略掉网站的URL,那么首页、栏目页、内容页,这些页面也没什么不同,就只是一个页面而已。而当我们把大批量参差不齐的把过多的权重集中到了首页页面上,质量较差的外链往往只会起到两个作用:①引蜘蛛,②拖后腿。而事实上,把外链都集中在首页这是很危险的,人工优化的痕迹太明显了,这是百度所不能容忍的,而如果你的网站首页被K了,或者被降权了,由于你的网站的流量均来源于一个页面,因为你将损失掉了所有的流量。

  那么,什么样的外链结构才算是合理的呢?这里,聪少建议大家从两个宽度去建设,也许能带来更好的效果。

  ①站外链接的宽度。举个例子,比如 新浪、腾讯、网易、搜狐都可以发外链,那么,我们在新浪发四条外链与在这四个网站中每个网站各发一条外链,同样是我们的网站得到了四条外链,但是效果哪个好呢?答案不言而喻,而这两者之间的差异会随着你的外链数量技术的增大而增大。所以做外链如同上吊一样,切勿吊死在一颗树上,否则死后你会后悔当初应该多找几棵树试试。

  ②是受益链接的宽度。这里也举个例子,我的网站:http://www.***.com/,因为当时我比较傻,所以给www.***.com做了大量外链,但是http://www.***.com/wd/和http://www.***.com/qy/却没有外链,内容页就更不用说了。这是一个错误的外链策略,正确的外链策略应该是把质量最好的外链用在首页,其余的合理分配到栏目页,如果你精力足够,或者人手充足,你完全可以给每个内容页也做做外链。

  总结,做外链,两个宽度都需要注意。如果你手头没有很多的外链资源,那么你可以每天分析两个竞争对手的网站,如何分析?domain:域名,你就知道。一天分析两个,坚持一周,你就不会再迷惘外链上哪去做;坚持一个月,你会发现以你现在的精力已经不可能在搜集到的每个网站上去发外链了,你已经有了选择权;坚持一年,你简直就是个外链数据库。

  版权声明:本文为聪少(http://www.lishaocong.com/)原创,欢迎转载、伪原创和广泛传播,无须声明版权和文章作者等信息。

  相关文章阅读推荐

  A5软文外链发布:http://e.admin5.com/content.php?ID=63


TAG:网站外链建设 宽度 站长 网站 网站推广 赚钱

详述威客网站的发展窘境及前景

详述威客网站的发展窘境及前景

  如果我和大家提到威客网站,大家一定不会陌生,尤其是大学生朋友们肯定对这样一种网站形式尤为了解,作为一种任务型网站模式,在2011年的时候可以说红极一时,许多在校的大学生或是社会中有真才实学的人都在猪八戒等威客网站上大放异彩,有的甚至能自立品牌,类似于一格电,非生客设计策划等都是从威客网站中走出来的品牌,可是到了2012年,威客网站的注册人数虽然激增,但是真正能引起轰动的新生力量却凤毛麟角,威客模式也一度受到很多的质疑。星忆也是从威客网站中走出来的,可以说猪八戒是我涉足网赚的第一站,而后来离开猪八戒也是有诸多无奈因素。

  骗稿事件层出不穷,威客利益无法得到保障

  这算是我离开猪八戒的最主要任务,因为目前的威客模式还是雇主一个人说的算,即发布任务的人对所有的稿件有生杀大权,仅凭个人爱好选择心仪的稿件,有些不道德的任主甚至会作弊,利用马甲来套取自己的佣金,这样的情况屡见不鲜,虽然猪八戒等威客网站采取公示方法提高中标稿件的曝光率,但是稿件一旦加密,我们还是看不了它的庐山真面目,所以所谓的监管体系纯属扯淡。即使雇主不作弊,选取合适的稿件,那么其他没有中标的威客就白白浪费了时间,这对于威客的投稿积极性是一种严重的打击。

  任务赏金逐步降低,已不符合正常的参与底线

  没钱赚,我相信这是很多威客的心声,纵观现在的威客网站,已然成了低价促销基地,一个LOGO只给50元,一个800字的文章只给5元,像这样的任务比比皆是,而且有赏金继续下跌的迹象,造成这种现象的原因有两个,一是很多雇主在发布任务前并不清楚行情,二是即使雇主知道行业,也把威客网站看成了施舍地,以为给个百来块就能干成大事,威客网站的品牌效应、市场认知度和定价能力很有限,这也使得星忆等众多威客纷纷出淘。

  会员数量激增,威客水平明显下降

  就像星忆在前面说的一样,在2011年,威客网站可以说达到了一种全盛的境界,据猪八戒统计,一天之内其注册会员最高达到200万,这绝对是一个令人震惊的数字。而大量威客的注入,也使得威客整体的素质水平下降了不少,因为很多威客都是网赚爱好者,对于网赚仅仅有兴趣而没有实力,但对于一些赏金较高的任务也是绝不含糊,而这些雇主看多了这样的稿件,肯定会对威客网站的接稿水平产生怀疑,进而选择不再继续和威客合作,如此恶性循环下去,威客网站的任务来源会越发减少,直至难以维持下去。

  已有威客品牌成长,逐步抢夺市场份额

  其实星忆当初选择威客网站开始网赚生涯,有两方面的原因,一是这个地方是靠本事吃饭的,只有有点真才实学,甭管能力多大,都能赚到钱,二是星忆想在这里创建一个品牌,虽然第二个目标没有完成的出色,但是至少现在星忆有自己固定的客户资源,对于网站经营也极有帮助,在XX领域已经有了自己的认知度。鉴于威客网站百分之20的中介费,所以星忆直接从威客网站出淘,成立自己的网站和设计公司单独接任务,而像星忆这样的威客绝不在少数,一格电、星期天设计等都是鲜明代表,而这些品牌的成熟都在一定程度上抢夺了威客网站的生意。

  虽然威客网站目前仍处于高速发展的阶段,但是一些迹象已经表明威客网站要想长久经营下去,必然要对自身缺陷进行改革,否则将失去继续发展的潜力,对于星忆有一些自己的看法。

  A 加大任务的监管力度,比如公示稿件必须全部公平,并由威客点评,如果出现相似度达到百分之80以上的稿件则视为作弊,赏金由其他威客共享。

  B 加大威客注册门槛,让新手提前做些小任务,逐步熟悉整个网赚的操作流程,避免稿件投递的失误,同时也避免广告宣传的可能。

  C 威客网站制定行业最低任务赏金,保护行业行情和威客利益,同时完善投稿机制,让更多高质量的稿件呈现给雇主,留住市场份额。

  D 开发创新任务模式,例如速配、挑战等模式,提高威客完成稿件的时间以及质量。

  E 各大威客网站团结起来,制定统一威客行业的规则,逐步完善行业的悬赏模式,并且坚定的执行下去,维护好威客网站整体的品牌影响力,杜绝不劳而获事件的发生。

  不管怎样,在网赚越来越火的今天,威客网站模式仍然有自己的发展优势,简单、快捷、实在等优点都是新手乐意注册威客的主要原因,而解决好以上问题,星忆感觉威客网站的发展还是很有潜力的。文章链接http://www.ntbybj.com/鞋垫,转载请注明,谢谢。


TAG:详述 威客 网站 发展 窘境 前景 如果 大家 威客 网站 站长 网站 网站推广 赚钱

wp7之手机号码归属地查询

wp7之手机号码归属地查询

初学wp7开发,也在园子里看了好多大牛关于wp7的文章,让我受益匪浅.但是学习不能只靠阅读,重要的是自己动手.

个人觉得移动开发是个趋势,我们要把握住时机.(纯属个人观点,元芳,你怎么看?Flirt male)。

本人没有美术功底,界面肯定是丑了一点,希望大家不要嫌弃.如图:

未命名未命名1

功能主要包括:查询本地号码、查询输入的号码、拨打号码、保存号码。

一下是各个功能的代码实现:

1、选择本地号码查询

 

/// <summary>/// 选择本地号码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnChoose_Click(object sender, RoutedEventArgs e){    PhoneNumberChooserTask task = new PhoneNumberChooserTask();    task.Completed += (_s, _e) =>    {        if (_e.Error == null)            txtNumber.Text = _e.PhoneNumber;    };    task.Show();}

2、查询归属地

/// <summary>/// 查询归属地/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSearch_Click(object sender, RoutedEventArgs e){    if (!CheckNumber())    {        MessageBox.Show("您输入的号码有误.");        return;    }    ServiceNumber.MobileCodeWSSoapClient client =        new ServiceNumber.MobileCodeWSSoapClient();    client.getMobileCodeInfoAsync(txtNumber.Text.Trim(), "");    client.getMobileCodeInfoCompleted += (_s, _e) =>    {        try        {            if (_e.Error == null)                this.txtMsg.Text = _e.Result.ToString().Substring(12);        }        catch        {            MessageBox.Show("网络出现错误或系统出现异常!");        }    };}

3、拨打号码

/// <summary>/// 拨打电话/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnCall_Click(object sender, RoutedEventArgs e){    if (!CheckNumber())    {        MessageBox.Show("您输入的手机号码有误.");        return;    }    PhoneCallTask task = new PhoneCallTask()    {        PhoneNumber = this.txtNumber.Text    };    task.Show();}
4、保存号码
/// <summary>/// 号码保存/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSave_Click(object sender, RoutedEventArgs e){    if (!CheckNumber())    {        MessageBox.Show("您输入的手机号码有误.");        return;    }    SavePhoneNumberTask task = new SavePhoneNumberTask()    {        PhoneNumber = this.txtNumber.Text    };    task.Completed += (_s, _e) =>    {        if (_e.Error == null)            MessageBox.Show("保存成功!");        else            MessageBox.Show("保存失败!");    };    task.Show();}
功能很简单
参考博客:http://www.cnblogs.com/wildfeng/archive/2012/03/21/2409174.html
webservice地址:
源码下载:源码
界面有点丑,大家多多包涵!!Flirt male 

TAG:

Qore Oracle Module 2.2 发布

Qore Oracle Module 2.2 发布

Qore Oracle Module 2.2 发布,基于 Qore 0.8.6+ 构建,支持新的 DBI 选项 API,支持任意精度的数字类型,可设置服务器时区规则,修复了一些重要 bug。

Qore Oracle Module 是 Qore 脚本语言用来连接 Oracle 数据库的驱动程序。


TAG:

Qore PostgreSQL Module 2.0 发布

Qore PostgreSQL Module 2.0 发布

该版本改进内容跟 Qore MySQL Module 2.0 的一致,包括:基于 Qore 0.8.6+ 构建,支持 Prepared Statement API (SQLStatement) 和新的 DBI 选项 API,支持新的任意精度数字类型,可在客户端设置服务端时区规则等。

Qore PostgreSQL Module 是 Qore 编程语言用来连接 PostgreSQL 数据库的驱动。


TAG:

020模式

020模式

O2O营销模式:又称离线商务模式,是指线上营销线上购买带动线下经营和线下消费。O2O通过打折、提供信息、服务预订等方式,把线下商店的消息推送给互联网用户,从而将他们转换为自己的线下客户,这就特别适合必须到店消费的商品和服务,比如餐饮、健身、看电影和演出、美容美发等。

O2O营销模式的特点

O2O对用户而言:

  ① 获取更丰富、全面的商家及其服务的内容信息。

  ② 更加便捷的想商家在线咨询并进行预售。

  ③ 获得相比线下直接消费较为便宜的价格。

  O2O对商家而言:

  ① 能够获得更多的宣传、展示机会吸引更多新客户到店消费。

  ② 推广效果可查、每笔交易可跟踪。

  ③ 掌握用户数据,大大提升对老客户的维护与营销效果。

  ④ 通过用户的沟通、释疑更好了解用户心理。

  ⑤ 通过在线有效预订等方式、合理安排经营节约成本。

  ⑥ 对拉动新品、新店的消费更加快捷。

  ⑦ 降低线下实体对黄金地段旺铺的依赖,大大减少租金支出。

  Image:O2O营销模式1.jpg

  对O2O平台本身而言:

  ① 与用户日常生活息息相关,并能给用户带来便捷、优惠、消费保障等作用,能吸引大量高粘性用户。

  ② 对商家有强大的推广作用及其可衡量的推广效果,可吸引大量线下生活服务商家加入。

  ③ 数倍于C2C、B2C的现金流。

  ④ 巨大的广告收入空间及形成规模后更多的盈利模式。

  Image:O2O营销模式2.jpg

[编辑]

O2O营销模式的益处

  O2O模式的益处在于,订单在线上产生,每笔交易可追踪,展开推广效果透明度高。让消费者在线上选择心仪的服务再到线下享受服务。

[编辑]

O2O营销模式的核心

  O2O营销模式的核心是在线预付。

  数据显示,即使在电子商务最发达的美国,线下消费的比例依旧高达92%。 TrialPay创始人兼CEO Alex Rampell在描述庞大的线下消费规模时举例说,“普通的网络购物者每年花费约1000美元,假使普通美国人每年收入为4万美元,那么剩下的39000 美元到哪里了?答案是,大部分都在本地消费了,人们会把钱花在咖啡店、酒吧、健身房、餐厅、加油站、水电工、干洗店和发廊。”

  这不仅仅是因为线下的服务不能装箱运送,更重要的是快递本身无法传递社交体验所带来的快乐。但如果能通过O2O模式,将线下商品及服务进行展示,并提供在线支付“预约消费”,这对于消费者来说,不仅拓宽了选择的余地,还可以通过线上对比择选最令人期待的服务,以及依照消费者的区域性享受商家提供的更适合的服务。但如果没有线上展示,也许消费者会很难知晓商家信息,更不用提消费二字了。另外,目前正在运用O2O摸索前行的商家们,也常会使用比线下支付要更为优惠的手段吸引客户进行在线支付,这也为对消费者节约了不少的支出。

  对于本地商家而言,原本线上广告的成效可以直接被转换成实际的购买行为,由于每笔完成的订单在确认页面都有“追踪码”,商家在更为轻松的获知在线营销的投资回报率的同时,还能一并持续深入进行“客情维护”。其次,O2O是一个增量的市场,由于服务行业的企业数量庞大,而且地域性特别强,很难在互联网平台做广告,就如同百度上很少出现酒吧、KTV、餐馆的关键词,但O2O模式的出现,会让这些服务行业的商家们一跃线上展开推广。

  从表面上看,O2O的关键似乎是网络上的信息发布,因为只有互联网才能把商家信息传播得更快,更远,更广,可以瞬间聚集强大的消费能力。但实际上,O2O的核心在于在线支付,一旦没有在线支付功能,O2O中的online不过是替他人做嫁衣罢了。就拿团购而言,如果没有能力提供在线支付,仅凭网购后的自家统计结果去和商家要钱,结果双方无法就实际购买的人数达成精确的统一而陷入纠纷。

  在线支付不仅是支付本身的完成,是某次消费得以最终形成的唯一标志,更是消费数据唯一可靠的考核标准。尤其是对提供online服务的互联网专业公司而言,只有用户在线上完成支付,自身才可能从中获得效益,从而把准确的消费需求信息传递给offline的商业伙伴。无论B2C,还是C2C,均是在实现消费者能够在线支付后,才形成了完整的商业形态。而在以提供服务性消费为主,且不以广告收入为盈利模式的O2O中,在线支付更是举足轻重。

[编辑]

O2O模式的多元化

  创新工场CEO李开复在提及O2O模式时指出,“你如果不知道O2O至少知道团购,但团购只是冰山一角,只是第一步。” 眼下仍旧风靡的团购,便是让消费者在线支付购买线下的商品和服务,再到线下去享受服务。然而,团购其实只是O2O模式中的初级商业方法,二者区别在于,O2O是网上商城,而团购是低折扣的临时性促销,对于商家来说,团购这种营销方法没有可持续性,很难变成长期的经营方法。不过,也正是团购的如火如荼,方才拉开了O2O商业模式的序幕。

  据易观国际发布的数据显示,到2010四季度,中国网上零售市场销售规模达到1728亿元,但其占中国社会消费品零售总额的份额仅为4.5%。因此,实现线上虚拟经济与线下实体经济的融合,具有广阔的市场空间,与此同时,020模式的发展也正在逐步展现其多元化的一面来。

  广州有家名为摩卡巴卡的公司,通过自建网络展示平台,将家电与家居产品直接从生产厂家供给家庭,据CEO杨建斌介绍,作为国内首家F2F(Factory to Family)家电及家居品牌,降低了代理商和家电卖场等渠道费用的摩卡巴卡,能让消费者以平价购买到高档家电和家居产品。与其他家电家居卖家有所不同的是,消费者需要在官网上下单订购,而后享受到线下的上门定制服务,当然,消费者也可以先到设在天河的体验店,接受导购提供的“量身”建议与设计后,再行在线支付。成功的在线商店驱动了离线的商务,从某种程度而言,这对商家衡量产能降低库存亦有一定的帮助。

[编辑]

O2O与B2C、C2C的关系

  虽然O2O模式与B2C、C2C一样,均是在线支付,但不同的是,通过B2C、C2C购买的商品是被装箱快递至消费者手中,而O2O则是消费者在线上购买商品与服务后,需去线下享受服务。这是支付模式和为店主创造客流量的一种结合,对消费者来说,也是一种新的“发现”机制。


TAG:

Mobile Lua 6.5 发布,MoSync 的 Lua 移植版本

Mobile Lua 6.5 发布,MoSync 的 Lua 移植版本

MobileLua 是 MoSync 的 Lua 移植版本,MoSync 是移动设备上的跨平台开发系统。该项目的目的就是为了在大多数移动身边上运行 Lua 编写的程序。

Mobile Lua 6.5 的改进记录:

  • Processes can now have aliases (speaking names).
  • Processes can communicate with each other through an easy-to-use messaging system.
  • More parts of the standard Lua API are available in the sandbox (for example, math and pcall).
  • Processes can be marked temporary, allowing automatic cleanup.
  • XMPP resources are now supported (allowing multiple connections from the same user).

TAG:

三星智能手机份额达 31.3% 诺基亚跌出前五

三星智能手机份额达 31.3% 诺基亚跌出前五

三星智能手机市场份额达31.3% 诺基亚跌出前五

据市场研究公司IDC发布最新报告称,第三季度三星智能手机出货量估计达5600万部,同比翻番,达到苹果的两倍多,从而扩大了其在该市场的领先,而诺基亚则跌出了前五名。

IDC估计第三季度三星全球智能手机市场份额达31.3%,这是自2009年第四季度以来首次有公司份额超过31%。三星今天公布的财报显示,其第三季度净利润达59.7亿美元,再创纪录。

苹果今天公布的财报显示,其第三季度iPhone销量达2690万部。按此计算,IDC称,苹果该季度的智能手机市场份额为15%。

RIM排名第三,其智能手机出货量为770万部,中兴和HTC分别以750万部和730万部的出货量分列第四和第五位。HTC在最近一个季度实现营收24亿美元,尽管此前它下调过业绩预期,但该数字也仅仅超过市场预测。

诺基亚上周公布,在第三季度售出了290万部Lumia智能手机,智能手机总销量则为630万部。

由于第三季度已经结束,多家研究机构纷纷发布报告总结各家手机厂商的表现。ABI Research发布的数据与IDC相似,不过它估计三星智能手机的出货量较低,为5550万部,且将中兴列在第三位,华为和RIM分别位居第四和第五位。

另外,Strategy Analytics发布的平板电脑市场分析报告显示,苹果第三季度市场份额为56.7%,Android份额则为创纪录的41.3%。8月,IDC称,iOS和Android合占该市场85%的份额。

整个手机市场方面,IDC的数据显示,三星第三季度手机总出货量为1.054亿部,同比上涨21%,市场占有率达23.7%,高于去年同期的20.1%。该公司在今年第一季度成功超越占据市场头把交椅长达14年的诺基亚。

诺基亚该季度手机总销量为8290万部,同比下滑22.2%,市场占有率为18.7%,苹果和LG电子分别以6.1%和3.1%的份额排在第三和第四位。


TAG:

开博啦!第一篇先随便写写!

开博啦!第一篇先随便写写!

上星期突然看到了easyui.js 一个基于JQUERY的UI框架 今天就来研究一下.


TAG:

checkbox单选

checkbox单选

$(':checkbox[class=topcheckbox]').each(function () {            $(this).click(function () {                if ($(this).attr('checked')) {                    $(':checkbox[class=topcheckbox]').removeAttr('checked');                    $(this).attr('checked', 'checked');                }            });        });

TAG:

快速构建Windows 8风格应用23

快速构建Windows 8风格应用23

本篇博文主要介绍App Bar概述、App Bar命令组织步骤、App Bar最佳实践。

 

App Bar概述

Windows 8 Store应用中的App Bar(应用程序工具栏)起到的作用和Windows Phone中AppBar一样。我们可以向用户提供各种操作接口,实现导航或者触发命令等。

AppBar一般默认是隐藏的,也可以设置为始终可见。我们可以通过清扫屏幕上边缘或下边缘时显示AppBar,AppBar被点击之后或失去焦点后隐藏,当然我们也可以通过编程方式控制AppBar显示或隐藏。

Windows 8 Store应用中通常包含两种AppBar:

1)底部AppBar

底部AppBar通常用于触发命令,并且全局命令在右侧,上下文命令在左侧。当选中上下文命令的项目时,可以通过编程方式调用。如果有单个常用命令,可以将其放置在画布上。菜单弹出可以用于显示相关的命令组。

2)顶部AppBar

顶部AppBar用于沉浸式视图中的导航,例如:添加返回按钮或标题等,也可以用于在页面或视图间进行切换。

1

 

App Bar命令组织步骤

2

Step 1:组织命令

确定所有应用命令,然后按照方案或位置组织它们。

我们需要考虑的问题包括:

1)什么命令应该显示在整个应用中;

2)什么命令应该只显示在某些页面上;

3)什么命令应该使用超级按钮或转至设置;

下面是我们浏览一个餐馆应用时可能用到的命令列表:

3

Step 2:创建命令集

我们需要将相似的命令分组到命令集。AppBar将命令集显示为一个单元,每个命令集之间有一个分隔符。

我们需要考虑的问题包括:

1)哪些命令在功能上相关;

2)哪些命令在功能上相关;

3)做出选择时应该显示哪些命令;

将上面的餐馆应用中命令分组到命令集:

4

Step 3:创建菜单

我们需要考虑命令集是否在一个命令菜单中更合适。

我们需要考虑的问题包括:

1)AppBar是否太拥挤或存在太多命令而无法适应

2)是否存在一个集可以从更长的标签或互动控件中获益

命令菜单给我们带来的好处是:允许使用更少的空间提供更多选项,并包含互动控件。

5

上图中“排序”菜单弹出一个简单列表,以方便选择选项,“筛选”菜单弹出一组控件,允许用户按照更复杂的条件筛选项目。

Step 4:将命令添加到AppBar

我们可以通过多种方式将命令放在AppBar中。但是需要尽可能遵守一些命令放置规则:

1)可预测性:尽可能在应用的所有视图上使用一致的互动和命令放置;

2)人体工程学:考虑具体命令的放置能如何改进操作命令的速度或提高易用性;

3)美学:限制命令的数量,避免AppBar看起来太复杂。选择易于理解或预测的图标。保持文本标签简短;

另外还有一个放置命令的常用技巧:

1)将永久性的命令放在右侧

首先将默认命令放在AppBar右侧。若只有少量命令,AppBar可能仅在右侧有命令。

2)使用边缘

如果有大量的命令,可以将不同的命令集分开在左侧或右侧,来平衡AppBar并让命令更容易访问。

3)显示/隐藏已禁用的命令

与某些环境不相关的命令应该隐藏。当它们显示时,不应该破环持久性命令的排序。

4)插入选择命令

用户执行选择后出现的命令会出现在最左侧,任何在此处的命令会向右侧滑动。

6

Step 5:为常用命令使用标准位置

一些命令是常用的,会在许多应用中出现,因此我们需要建立一致性。

我们在决定将常用命令放在AppBar的何处时应该遵循以下原则:

1)选择命令

和我们的选择相关的命令始终显示在最左侧,无论它们是在选择时显示的上下文命令还是会影响选择的命令。

7

2)新建命令

如果应用调用“新建”命令来创建(添加、创建、撰写)任何新类型的实体,将该命令放在AppBar的右边。这会为每个“新建”命令提供一致的位置(无论具体的应用或上下文是什么),并使用缩略图来方便访问。

8

3)删除命令

如果我们的应用将要管理的各个实体可能位于特定应用程序(比如邮件或相机应用)的外部,可以使用“删除/新建”。 “删除/新建”应该始终按此顺序显示。

9

4)移除命令

如果你的应用将管理某个列表,如代办事项列表、一个天气应用中的城市列表或一个添加到书签中的餐馆列表,可以使用“移除/添加”。“移除”应该始终显示在“添加”的左侧。

10

5)清除命令

如果你正在对所有可能的项执行破坏性操作,可以使用“清除”。使用命令标签明确表明命令的操作对象,如“清除选择”。

11

 

App Bar最佳实践

1)一定要以同样的方式放置命令并按命令集对它们进行组织;

2)一定要将上下文命令放在AppBar上,在不更改视图的情况下选择某个项目时, 以编程方式显示AppBar;

3)当命令太多时时,一定要使用菜单;

4)一定要考虑AppBar在贴靠视图和竖屏视图下的呈现;

5)一定将AppBar设计为水平滚动;

6)一定要使用命令、菜单和弹出窗口的默认样式;

7)不要将关键命令(用户完成任务必不可少的命令)放在AppBar上;

8)不要在AppBar中放置登录、注销或其他帐户管理命令;

9)不要将用于文本的剪贴板命令放在AppBar上;

 

关于App Bar更多详细信息可参考MSDN 中:添加应用栏。


TAG: