随笔 - 23  文章 - 1  评论 - 71 
  2009年6月28日

更多Android 学习 请加入 eoeAndroid 社区  http://www.eoeandroid.com/

当一个application 中有多个 Activity的时候,那么每个Activity之前的传值就是一个问题了。所以这里介绍一下相关的方法。

在Android平台传值,主要使用两种方法一个事 PendingIntent  另一个就是广播了

按照大类,我把相关的类进行了划分

1.实体类   Intent  、Context 、  BroadcastReceiver 
2.方法类   PendingIntent   Context.sendBroadcast

传递的方法 也就是方法类中的两种


A Intent 字面意思是意图,其实他的效果和字面意思差不多,高焕堂的很多书中都有详细的介绍。

    他就像一个快递员,而且是个无所不能的快递员,什么都能送,只要你能把信息加到他上面去

    详细的使用方法可以再SDK中找到,如果想要添加你想要的内容 可以用 Intent.set**系列方法。

B Context 这个翻译成环境更好一些

    顾名思义 他就是获取我们当前的环境状态, 比如说我想知道现在用户使用的什么语言,处于什么状态,航班、静音。用户有没有接打电话

    等等,就像我们获取系统时间一样。Context也我们设置了一个容器让我们来获取系统的状况。

    因为这个系统状况很重要,有的时候就是以系统状态为依据,所以Intent 好多方法都要加入这个 都需要 Intent.context

C   BroadcastReceiver  是专门用来接收广播的类

     所以他有一个OnReceive()的方法 而具体的接受 我在下面详述。




α PendingIntent  这个方法就是直接传递 Intent 
    好传出了,怎么才能保证能接收到呢?因为Intent是一个很强大的快递员,他能记录货物需要达到的地点,所以PendingIntent 干吗,他相当于一个Intent的工作场所,他只负责吧Intent送出去
   而Intent 去那里,直接告诉 Intent就可以了
   通过下面这条语句就可以达到显影的效果  intent.setClass(Activity.this//指代Activity, Report.class//指代目标类);

   接收端怎么获取消息呢,这个也简单。因为Intent 已经按照他自己的地址来到了所处的地方,我们直接实例化就行了。
   当然这是在简单的情况下,就是说如果这个公司只有一个货物所以我们之需要一个快递员就可以,接收方目前只有这个货物需要接收,那快递员一到他接收方只要确认一下就知道他来干嘛了。

   但多数情况下,两家公司的业务非常繁忙,所以可能有多个快递员,多个货物,同一个部门可能有多个。那么怎么来做呢。就需要加限定规则
   (1)首先是 在Intent中加限定,可以设定一个 Permission String  就像暗号一样,如果暗号对了肯定错不了 (这个在广播方法中很重要) 
   (2)另一个就是在实例化的时候确定好实例的是那个一个 参数

    具体的请大家参看SDK

β 使用广播来进行数据传递
    如果直接使用PendingIntent 是有目的的传送, 那广播可真算是漫无目的的传送信息了

    其实Broadcast 中传递的内容也是Intent ,但可以传递的范围可是远的多。
    而且系统的很多其他程序也在发送广播,比如说手机的状态,还要说一下航班状态,如果出于航班状态,那么系统就会自动发送广播,而我们只要去接收就好,这样我们就能知道哦,系统现在时在广播状态。

      而在Widget 接受方法使用广播,一方面是因为AppWidget 本来就是继承BroadcastReciever 所以比较纯,不会出问题。另外,这个是我的个人判断,因为Widget还是和普通的app不同,我估计如果直接给 Widget传送 Intent 又会受到限制,就像 handler的一样,当然这是我的猜测,但是感觉还是用 广播靠谱

      广播的载体是Intent,但是他们的标号则是Action。系统内定了很多Action。

      当然我们也可以自己定义Intent 。 之需要 Intent("你自己定义的一个字符串")

      接收方麻烦一些 需要 注册
registerReceiver(intent, commandFilter); 
      第二个参数是Intent的过滤,而且不能为空。

      如果是自己定义的Action 那还需要

String action = intent.getAction();

if (action.equals("自定定义的Action")) { 相应的Intent的实例化 必须在这里进行
}


Σ Widget 使用 PendingIntent 是因为 没有其他的方法了。说实话 AppWidget 就给我们一个 可以使用RemoteViews 的方法,别的都不能用。所以就顺势写了一个SetPeningIntent 当然这个方法也有很多固定的用法 ,启动服务,启动活动 ,发送广播,基本上该有的他都有了 。



3.最后再来说一下 Action  其实一个字符串但是这个字符串 因为很长所以基本上很少有人和其明明重合
   他们就是来定义一些状态,还是航空状态,他的的Action就是 
ACTION_AIRPLANE_MODE_CHANGED

   具体的什么在Intent 搜索一下都能找到

  更多Android 学习  尽情加入 http://www.eoeandroid.com/

posted @ 2009-06-28 02:27 游利卡 阅读(633) | 评论 (1)编辑
  2009年6月16日
Widget到底是什么,其实现在都没有一个标准的翻译。有的翻译成小窗口有的翻译成插件。我个人还是感觉小窗口更加合适一点,但是听起来实在是别扭。

置于他的发展不说了,虽然东西简单,但是一个好的Widget却着实可以提高我们的工作效率,就像RSS,我们完全可以去浏览网页,但是RSS给了我们另一种选择。


1.好了下来说说Android的 Widget

     看过SDK 的人,估计都对Google设计的Widget感觉相当不爽,功能实在是太贫弱了,甚至连点击的监听事件都没有,传值只能用PendingIntent。
     位置还是固定的,不能改变,自带的一些特效更是少的可怜。

2.但是这次 通过eoe社区的地狱怒兽 翻译的那篇文章 

    给了我不少启发,但是后来发现还是不太正确


3.另外 我也顺便关注了一下Ophone的 Widget 
      估计也是被Google给气的,吧Android的Widget做的太差了。所以中国移动直接重新做了Widget,而且这个还可以使用Javascript!

      Javascript 没有听错,就是这个!如果Widget可以使用Javascript 那会有多少数不完的特效啊!

     好了关于Widget,eoeAndroid社区 的eoe特刊 第四期 有特别详细的介绍
  
     这里奉上地址,有喜欢的朋友可以去下载,那里还有我的东西哦!
http://www.eoeandroid.com/viewthread.php?tid=753&extra=page%3D1

posted @ 2009-06-16 01:30 游利卡 阅读(41) | 评论 (0)编辑
恩,怎么说呢,即想早点在博客上写点东西,但是有不敢写点东西。

5月份的《程序员》的系列文章,给了我不小的震撼。因为我没想到一切来的那么快,移动领域的发展已经达到了一定的水准,如果自己一年前就开始从事相关的工作,自己现在应该能收获很多东西。不过我还不算晚!
经历了上次惨痛的数据丢失后,重装了系统,在经过数个小时的系统优化以后,第二个工作就应该是装必备的Visual Studio了。
可是从 恢复到现在,安装光盘还挡在CD包里,倒是Eclipse每天都能运行起来。我彻底叛逃了,Android给我太多的诱惑了。

如果说我在.NET上还有什么,估计就剩下 闲暇无事的时候,看看《你必须知道的.NET》
想写东西,因为在Android收获了不少,又不敢写,因为毕竟自己是个地道的.NET程序员。


1.首先我得感谢.NET
     我必须得感谢.NET,作为我第二个启蒙语言(第一个是谭浩强的C)。 在.NET上的学习让我从一个什么都不会的菜鸟,稍微成长了许多。
     首先C#语言是我见过的,语法最易懂,最不容易出错的语言。
     ASP.NET也很轻松就能实现很多功能。虽然这不见得能让你了解其内部的机制,但是在.NET平台上的学习让我用最快的速度掌握了很多IT开发中的内容,特别是MSDN,特别是MSDN的广播,全部免费的视频资源,这些东西都极大地丰富了我的视野。
     设计模式,李建忠老是对底层关注,还有苏鹏、赵劼太多了。
     我不敢写,就是因为才半个月,我对Java 还有很多不太清楚的地方,这样做是不是很傻很天真呢!

     可是随着.NET的发展,让我渐渐感觉到了一些力不从心。.NET太注重商业化发展了,虽然了解了很多,但是我感觉我很难通过.NET平台掌握更加底层的东西,去灵活运用自己的一些想法。
     其次,随着MVC等工具的发布,.NET平台变得越来越大,也就是说,如果单枪匹马是不可能在.NET平台有所作为的。

     所以,可以想象将来的人生,就是去茫茫大海寻找工作。真的不喜欢这样。

2.Android平台给了我不小的希望
     第一次接触Android的时候,说实话自己真的只是抱着尝试的心态。
     后来,从学习Java语言的时候就发现,C#和Java真的是太像了,反过来看Java觉得简直就是亲兄弟一样,所以起初语法的学习对我来说几乎没什么障碍,很快就顺利迁移过去了。而Android平台的搭建也很方便。
     当然,并不是说Android是完美的,Android还有很多很多不足的地方,比如说它的SDK,甚至还有很多错误的地方。当然让年轻的Google 立马赶上有着悠久历史的MSDN也是不太现实的。
     另外,一个人就可以实现一些非常小的功能,做出一些小巧的Android的app,Android极大地满足了我的虚荣心,我不否认这点。

     不过最后留住我的确是另外一些,是社区! eoeAndroid社区  www.eoeandroid.com
     在CSDN看帖子的时候,发现了一个Android群,然后还是尝试的心态加入了。然后也通过社区糊里糊涂找到了eoeAndroid,这个社区还和年轻。但是却十分有活力。很快我就融入了这个群体,因为大家都是刚起步,Android也在发展。所以没有什么压力,也没有什么特别大的级差,当然也有菜鸟,也有老鸟,现在大家都非常融洽地在一起。

      而让我感觉特别兴奋地就是eoe特刊的制作了,每一两个星期,社区都会组织一词翻译活动,我们会把一些与这期主相关的内容翻译然后汇总。
      虽然现在才办了四期,我也只参与了一期,但是感觉相当棒。没有了流程的束缚,一切都得自己来,为了查资料,很多都必须读原版的资料。最后用自己的语言去写下经验,获得印象比以往都深。


3.当然我也不会放弃我的.NET平台的

      毕竟在.NET平台太呆了那么长时间,而且我相信你在带宽和手机终端都发达的一天,手机上的开发也会变得PC开发一样向 web转移,向云计算转移。
      自己的PC里还有很多资料,我也会利用我的其他时间来复习这些东西,C#4.0 的新特性, VS2010也会及时去关注。

      但是现在,我已经属于了Android了。

4.所以不管那么多了,既然选择了,就努力走下去!

  
posted @ 2009-06-16 01:18 游利卡 阅读(92) | 评论 (2)编辑
  2009年3月16日

    前两天的时候,就发现自己的风扇有点问题。又一次开机吱呀呀地响得厉害。

 

    已经伴随我一年多了,而且在我高强度的工作下,我觉得它是太累了,而且北方灰尘大。虽然我一直按时除尘,但还是免不了会出点问题。

 

    今天早上去西单附近一家三星的维修中心。结果把笔记本的发票带成了内存的发票。不过当时只是想做个清洗,又得100大洋了。没想到居然检测出来风扇的轴坏掉了。还好去检测了一次,不然等到问题严重的时候,可能就不是这个样子了。

    这个属于硬件的问题了,三星的硬件时保两年的。没打发票反而没什么问题了。

 

    不过他们那里没有现货来更换,只好等待苏州那边发个新的风扇!

    没了电脑,这生活可算是乱套了!

    因为我的什么东西都在里面,还有很多计划,和一些资料。Oh,No!

    也许唯一庆幸的就是,它离开我之前,让我把前几篇东西都弄完了。现在就希望三星的维修中心快点给我送回来了!

 

    就这几天不再,等到拿回来的时候,肯定要大忙一场了!

 

 

    顺便赞一下三星的克服。一直都很令我满意。三星的本本来品质就很好,故障率小,所以维修中心人也少,去的时候都很顺利。

    这两天,忍耐一下吧!

 

   

posted @ 2009-03-16 20:33 游利卡 阅读(142) | 评论 (5)编辑
  2009年3月14日
求职:.NET平台程序员

 

终于完成了那个改造的博文了。感觉一身轻松啦,整个寒假都没过好!

我也希望,那些文章能为我加分。顺便这里做一个小小的“简历”,多描述一下自己。特别希望得到更多实战的机会,跳出校园的温床,到职场中磨练自己。

 

我在北京

恩,写这个并不是觉得自己很了不起需要用人单位来找我。

如果我和大家一起去投简历,然后去等。那您的公司用简单的简历过滤直接就可以把我屏蔽掉。所以我就想出了这个馊主意,把自己的简历变得不是那么正规,反而通过一些其他方面来去给自己争取机会。下面的很多东西,都是没法写在正规简历中的。

至于和我联系,恩。在这公布自己的手机号码不是很安全。所以,如果您希望一个肯实干,又不想花大把的时间去筛选简历,那就找我试试吧,反正还在校,我的要求也不高。这样对两方面都有效率。

这就而对没有什么高傲的成分在里面,希望大家明见。

同时感谢Aaron Wu 先生的指点!

 

 

A.平台学习经历

 

08年年初开始学习.NET平台。对微软各种.NET平台的开发工具都有了解和使用。

C#语言和VS开发工具有很好的掌握。

同时熟悉,SQLServer数据库和MySQL数据库。

JavaScript正在恶补中(早些,把JavaScript当成了Java的延支语种,为保持平台统一性,耽搁了对JavaScript的学习)

WPFPowerShell也有一定的了解

 

重点研习了《C#高级编程》。

在博客园和CSDN的论坛混迹多时(在学习初期问了很多idiot的问题,现在反而潜水居多)

MSDN WebCast的关于ASP.NET的讲座看了很多。目前正在跟徐长龙老师的VS2008的教程,以及赵老师的MVC

Live 平台的课程理解最好(自认为)

 

B.实践经历

     

      首先是学习进程中的练习等等,学习道路中经历过的一些练习像水晶报表,等等我觉得都不用在这里提了!重点提一下两个

1.08年暑假,和一位四川的朋友,共同完成了一个票务网站的开发。此时对多层架构的开发有了非常多的了解,对一个网站的建设和软件公司的业务流程都学习了很多。我主要完成了大部分的文稿、还有数据访问层。

使用的技术是ASP.NET2.0 + SQL Server 2000。

其实这是一个失败的项目,因为我们的开发完全是作坊式的,而对方的需求也是很山寨的。所以如果程序化地说明很困难。不过正是因为失败让我有了比做好以后更多的经验。至于这次经历的很多东西,我还想抽点时间再进行总结。

不过我还是给自己留下了不少经验!认识到了交流的重要性,以及对计划的重新理解。而且,经历过暑假那次,我更加认识到,作为项目开一定需要一个正规的团队通力协作。作坊是行不通的。

 

2.09年年初,成功用最完美的方式将微软的Live ID API集成到了康盛创想的DiscuzNT论坛。此次改造,让自己对WebService、云计算平台开发、以及DiscuzNT优秀的架构都有很更加深的认识,对自己技术水平提高有了长足的帮助。

其实指的前面的系列博文了!一些总结前面都有写到,这里不再赘述了!

 

有位朋友说,程序员就和网友中的玩家一样。最重要的就是项目的积累(经验值),现在我的积累还是太少了,如果要承担任务更加艰巨的开发可能还不能驾轻就熟。但是无论,现在能否找到工作的机会,这样的学习永远会持续下去的。

 

 

C.其他技能水平

 

      1.英语六级今年惜败401分。个人认为英语还行。在做那个项目的时候,因为国内用Live ID API的人太少了,不得已和一个荷兰的MVP联系上了,和他的交流让我学了不少东西。

      2.本人的写作能力也很强,其实不想写出来的。因为我怕我到了公司以后,不让我写程序,把所有的文档都给我了。

 

 

D.自我评价

    我觉得太官腔的话不要放在这里了。关于我自己,我觉得独立能力很强,是我的优势。因为从开始接触计算机到现在,所有的东西都是我自己自学的,从小时候小霸王上的Basic,然后到谭浩强的《C语言程序设计》,然后到Live ID API。

    但,同时,我也特别渴望能够融入一个团队。其实上次把Live ID API是我刚开始想在我自己计划的一个网站中做的,结果没想到用了那么长时间。如果之前能有一个朋友能够和我在一起做这些,速度肯定会快很多。

    另外,在现在的大学校园里面。大家可能都知道的,一种很浮躁的风气,有的人只完成老师的任务,有的人成天游戏。我们宿舍就是这样的,真正静下心来学习的就我一个人,这里不是自夸。说我不受影响是不可能的,但是,每天晚上回到宿舍周围全是魔兽世界的画面,这让我非常渴望早一点摆脱这个环境。

 

    而且经过两次的锻炼,我觉得我完全可以胜任一个标准的.NET程序员的工作。人是发展的,我也相信不断进步的我一定能为您的公司带来更多的价值。

 

E.我的优势

 

    恩,首先是年轻吧!还要几个月才过20岁生日。虽然现在还在学校,不过做全职的工作对我来说根本没什么问题。

    另外,在学习的过程中,我也看了很多的文章,关于在工作中的、业界的。在真正开始程序员的学习之前,我对日本的游戏产业有非常深的了解,我在新浪的博客,有一半的点击率来自对电视游戏的文章。这也是我的优势,如果是游戏公司,我能非常好的融入进去。

    此外,我可能还有一些程序员不该有的过高的想象力。我愿意接受一些有挑战性的工作。

    在去年的SD大会上,还有幸和《走出软件作坊》还有《疯狂的程序员》的作者阿朱,还有绝影有幸见面。特别是阿朱先生,还跟他讨教了不少东西。跟前辈的交流中,更让我了解到,进入岗位时,最首要的就是要做好自己的本质工作。《致加西亚的信》一直作为我处理各种问题的参考。

    作为新人,对您我没有特别大的要求。就是一点,恩,payoff at time! 

 

F.最后

    可能您也许还希望得到我的联系方式,还有其他的信息。

    在公共场合,为了保护隐私。我希望您能给我发邮件,我会把我的联系电话和地址,发给您。如果您还需要我的其他的信息,在邮件中提到就可以了。

    关于我的教育背景,我也希望您不要过分关注。因为那些不会为我加分,反而可能会起到反作用。选择这个学校,就是因为他距离北京近,能让我接触最新的业界动态,能有更多的机会。

    当然,如果您执意希望了解,我也会在邮件中提供给您。

 

G.又及

    今年寒假的时候,我意外接到了一位姓于的小姐(是yu,但是不知道是那个yu)的电话。她问我是否愿意去他们公司实习。我当时答应了,但是回到学校之后有很多乱七八糟的事情,之前的博文还没有完成。

    2月23号星期一的时候,还接到一个电话好像是13****03143。当时在上课,所以就没说完。但是后来怎么打都打不同了。如果您是于小姐那个公司的人,抱歉了,如果您还需要我,也请您联系一下我!

 

 

    我的邮件地址:pcudb0189@sina.com

    如果您还想了解更多的我,也可以去我新浪的博客 http://blog.sina.com.cn/eeeeeeee

    我技术的文章都在博客园,以后关于业界的文章会逐步转移到CSDN

 

posted @ 2009-03-14 21:08 游利卡 阅读(204) | 评论 (8)编辑

@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及Discuz!NT的知识产权,遵守相关协议。

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

 

     这次改造中用到的Live ID 为  cainiao2010@hotmail.com   密码为 123456

     大家可以进去看看一看我已经申请好的Live ID API

     我这次也没有使用网上的空间,而是使用了花生壳的免费域名

     如果你想实验一下,那么可以 直接下载花生壳 花生壳的 用户名 xiaocainiao2010  密码 aaa123456 它回自己把你本地的网站与这个花生壳的免费域名做绑定。

    

     如果解决了上一篇我遗留的问题。我个人认为,这个完全可以拿来商用了,不过为了不惹上官司,大家还是慎用为妙。 这次改造让我了解了很多东西,这里我也总结一下。

 

    1.收获颇丰

 

这次的改造让我收获了很多东西。因为前期太投入了,所以在考场上败得一塌糊涂。但是我觉得这次的成长比以往都要快。

首先是Live ID ,云计算平台的东西,着实新鲜了一把。而且通过对他的访问,让我了解了更多WebService的内容,了解了他的运行机制。如果今后云计算平台的开发主流了,我也算是有经验了。

其次就是对DiscuzNT的学习了。

 

网上很多朋友对DiscuzNT颇有微词。但是我还是觉得他是跟成功的产品,特别是他的架构,可以兼顾速度、平衡还有丰富多彩的功能。我觉得这样就很了不起了。之前,学习的时候做的练习都太初步了。而通过DiscuzNT我有了更加具体的思考。我就在想,如果要我自己写个论坛,我该怎么写。DiscuzNT是给很好的教材。当然如果是我写,我一定会让他有更多.NET特色。

 

然后,就是对别人代码的改造。虽然我改的Discuz!NT是基本上没有问题的代码。但是他不符合你的需求,那么他其实就是有问题的,假设他就是bug,就是别人留下的bug,你要怎么来处理呢?而且这是问题,并不是赋值粘贴几行代码就可以了。

不然最后,还是报错了。

报错也不可怕,其实根据错误的行,然后找到根源,然后处理到错误就行了。这让我对以后的工作,产生了很多新的认识,原来,我应该这么做。

 

特别是在PageBase问题上。我原想的想法是直接修改父类。但是这样太天真了,别的子类怎么办呢?

原来看书时枯燥的知识,现在感觉都成了我的正面临的问题。晚上我翻回去去看《C#高级编程》发现原来生疏的东西是那么熟悉。

 

用最少的代码做最多的事情。我不敢保证,我的代码绝对有问题。可能在安全上,我还存在很多不足。

刚开始的时候,我多次想放弃使用DiscuzNT,他真的太复杂了。但就像刚才说到的一样,你认为的复杂其实是自己的不了解。如果静下心来认真阅读代码,就能发西安突破口。

之前,我想直接在数据库中添加Live ID字段,现在想象真的是太愚蠢了,我们不需要密码,那直接把user.id写进密码就行了吗!

这样省了不少事情。

 

 

2.我的敏捷开发

恩这个部分,来源于Info论坛提供的迷你书《硝烟中的Scrum和XP》,当时给我很大震撼,因为这和之强想象的那种流程式的开发完全不同。也让我有了很多新的认识。当然,就凭我现在的三脚猫的功夫,还远不足以胜任“敏捷”,但我还是要朝这个方向发展。所以,从自己专注的开发开始。

 

 

其实,我也没有特别去专注于敏捷这个概念的问题上。因为一开始,我只是在想,我要把Live ID 集成进来。然后该怎么办呢?网站好说,如果是个论坛呢,我要做的不仅集成,还有登陆,然后保持原来的功能。

然后就去找论坛。

找好了论坛了以后,从那里下手呢,如果你在Google“把Live ID 集成到论坛”能得到什么呢?

然后先找Live ID 的资料,然后找DiscuzNT的资料。

 

说实话,我一开始很迷茫。这该怎么做啊?但是我就在强制自己,每天都必须找点东西,发现问题,解决问题。

然后有一些成果后,再大体预测一下,安排我下来的步骤。我不可能一天完成所有的东西,然后就这样慢慢来,每天任务目标。

每天都在OneNote上写下我的一些想法和注意的地方,用Outlook来规划明天。

 

虽然最终的代码量很小,但是留下了很多其他的东西。

 

反过来看看,感觉自己的开发真的有点敏捷的味道。我也相信,如果将来我能加入到一个团队中去,这样的方法也会是非常有效的。

 

   3.我是菜鸟不丢人

 

其实我刚开始用的标题是,谁说菜鸟写不出好文,但还是觉得不要那么张狂的好。

不过,我就是个菜鸟,而且接触.NET一年多,能达到什么个水平呢。说实话,也许你有很好的编程语感,但是在IT业,真正的牛人都是靠不断的技术积累成长起来的。特别是看过绝影的《疯狂的程序员》之后,更是有这样的感觉。

作为菜鸟的我们很羡慕那些高手,总觉他们天生就是高手似的。对自己总是自卑。

有的时候,菜鸟们问问题 ,经常有得不到合适的解答的时候。以前在CSDN发帖,就是这样,其实如果简单回答一下就可以解决所有的问题。但是我得到的回复却不是这样的。暑假的时候,跟一个朋友学技术,碰到不懂的问题,我得到的最先就是,“你怎么这样写”。我就心里犯嘀咕了,难道你就没有不会的时候吗?很多菜鸟都怕了,这很影响自己的进步的。

 

    还有这次关于DiscuzNT安装的问题,我真的希望知道手动部署DiscuzNT应该怎么做,但愿有人告诉我了。

 

但是,既便如此我们小菜鸟们不应该自卑,因为这只是个阶段。就像我们现在的社会主义初级阶段一样,我们的经济是没有人家发达,但是我们需要这个过程。

只要我们肯努力,肯去钻研,那么我们就一定能找到问题的根源,只要你有这股劲。而且我相信,勤奋的菜鸟,终有一天会展翅高飞的。

 

 

中午的时候,收到了荷兰那位MVP的邮件,他首先congratulation了一下。关于Live ID 那个先登录后注册的问题,他也表述无奈。不过,令人兴奋的。Live ID API 马上就要放出一些新的功能了!

 It allows you to customize the colours, text and images

也就是说,在注册的时候,可以更多的从Live Server上获取信息了。看来第二期的开发马上就不远了。

 

 

昨天真的是挺急燥的,现在返回来看的确是挺囧的。所以我把所有的自荐贴的链接都换了种形式,这样大家看着也舒服点。

 同样,如果您需要人,并且看好我,请点这里

posted @ 2009-03-14 21:06 游利卡 阅读(270) | 评论 (10)编辑

@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及Discuz!NT的知识产权,遵守相关协议。

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

 

这一篇,我来具体说一下代码中的细节问题

 

1.如何从live Server上获取信息。

 

我以前对webService 也是不太了解,但是通过这个项目了解了其中的原理。假如说我们的网站的运作非常简单,用户访问我们的页面,然后我们的服务器给用户信息,那么这个过程就是简单的交互的。但是如果一张页面中所有的信息全部从这张页面的对等服务器获取,那么效率会非常地下。而且如果涉及到第三方的信息,也会很麻烦。

所以在用户获取了我们的页面后,如果这个页面有WebService的内容,后台就会自动去其他的服务器端获取信息,然后再传回到用户的页面中去。

            loginCookie = new HttpCookie(LoginCookie);
            WindowsLiveLogin.User user = wll.ProcessLogin(request.Form);
                if (user != null)
                {
                    loginCookie.Value = user.Token;
                    password = user.Id;

这里就是获得user.id的代码

在代码中,就是HttpContext HttpRequest HttpResponse。比如说我们获取那个Live Server给的user.id。那么在用户登陆以后,HttpRequest就会向Live Server要这个数据,对于这个改造,我选择了把东西存在Cookies中去(没办法,只能这么干)。

而对于用户联系人列表的访问也是一样的,如果前者只是传一个简单的值,后者我们则要获取一张大的xml列表。首先也是HttpRequest先得到用户的许可,然后在通过一个地址跑到Live Server那里。

“报告Live 大人,那个叫赖昌星的用户允许我获取他的联系人列表”

然后通过对数据的Xml化,然后我们就得到了这些信息,解析他们就成功了。

 

在我做的过程中,还碰到了很多的问题。比如说 远程服务器 错误 404 400

404 这个就是我们在获取用户的许可的时候除了问题。

 

大家可以看一下代码中的llid 多半是这个值出了问题。

 

400的问题则比较特殊了,下面我再介绍

 

2.为什么要将联系人的 webservice单独放在handler.aspx.cs

 

我们都知道了DiscuzNTaspx页面不是一般的aspx页面。而他的后台也同样不一般。大多数的aspx后台页面都直接继承System.web.UI,但是DiscuzNT则做了一个PageBase的类,来继承System.Web.UI,然后所有的页面都去集成PageBase

 

这样的好处显而易见。因为Discuz!NT有着吓人的各种参数,这样就可以让每个aspx后台文件少很多参数定义。但是他也做了很多的限制。

比如HttpContext,把访问联系人列表的部分放进register.aspx.cs这个里面,死活都不成功,总是显示远程服务器错误400。这个错误是指我们访问地址的错误,最后我实在没有办法了,只能判断是由于DiscuzNT特殊的极致导致了这个问题。

 

handler.aspx.cs只是个中转页面,所以我们不需要集成那么多的参数,那么直接让他继承System.web.UI(我觉得不用继承也没什么大问题)

 

然后放进去以后,没问题了。

 

在开发者页面中提供的代码使用了session,我个人也认为session更好一些,但是无论我怎么设置都DiscuzNT都会告诉我,配置节点错误!所以无奈,还是用了Cookies

 

 

3.为什么在注册前,需要先用Live ID 登陆呢!

 

这个不能怪我!这个完全就是Live ID API他们搞的,我也纳闷了。他们提供了两个接口,但是前者只提供user.id。后这只能访问联系人列表。那么我在注册的时候,两个都需要访问啊,为什么就不能让后者两者都获取呢!

连官方网站上的sample都是先登陆,然后再次访问联系人列表的。索性现在是beta版本,等待正式版的修正吧!

 

4.为什么要将liveid作为用户的密码存入数据库

 

我感觉上面两项 基本上都是对 DiscuzNT的抱怨了

 

其实一开始,我的打算是忽略password,然后在数据库中添加Live ID项目。因为按照当初的目标,就是对代码的更改到最小。以后,或许还可以做成两种身份制并存。但是后来发现,这样反而是种很笨的做法。

 

这样做得对数据库进行更改,然后数据访问层,然后就是实体集。而且重要的,DiscuzNTCookies,他们需要把Password写入到Cookies里面。我们当然也可以更改为将Live ID写入,但是这样不是更乱吗?

 

而且之前我错误地估计了Discuz!NT的密码限制了。因为Live Server给的user.id是个很长的字符串,我总怕写不进去。但是后来试了一下,居然可以。然后重新做了一遍。

发现把user.id写进password是件更加舒服的做法。

 

首先你根本不用修改数据库。

刚才看到了,对数据库的访问层也减少到了最少,实体集基本上不用修改。

唯一比较麻烦的,就是password在写入数据库之前是需要加密的。但是后来发现,也就是一行代码的事。

 

不过我也有担心。

 

5.我们要改掉扔掉IsPost()

观察Discuz!NT的源代码。我们可以发现,Discuz!NT做页面信息的Post的时候,并不是像我们那样,页面上写个控件,然后后台写个函数,而是直接用Html的Submit,然后IsPost就被启动了,至于信息有没有返回回来,是不是,则接下来再处理。

所以在修改Login.cs,和register.cs的时候都要把他们换掉。 

6.其他的注意事项

 

我的改造是代码量最小的了,同时他也还有很多的遗留问题。比如说,我们改造了密码项,

如果用户进入到了修改密码页面呢!如果我们在注册成功的邮件中不发送密码了也可以。但是这里还是比较麻烦,如果想要完善这个改造,还需要去掉所有有关密码的东西,包括“密码找回”等等,其实如果想完善改造,应该对整个User表做些修改。当然,这样带来的问题,就是一旦DiscuzNT升级了,你的改造就得重来。(所以康盛创想把我招了把,以后你们的Live ID 登陆版本,我负责了,哈哈)

 

 

在经过了很长时间的奋战,终于成功了

 

 

 

 

 

我的遗憾

 

当然,做完了这个改造还是有一些遗憾。

1.首先Live ID API的引入,就是让用户感受到没有用户名密码的限制。但是因为现在beta版的缘故,让注册变得有点怪异。有谁听过,先登陆再注册的,很怪异啊。

我就一直在琢磨着,去看windowsLivelogin.cs的源代码然后在使用访问联系人的API的时候,顺便把 user.id给敲下来。

   

2.在注册的时候,还是不能实现更多个性化的注册。比如说访问联系人列表,访问的很有限,如果能把用户更多的信息读取就更好了。我还想着,如果两个用户都是Live ID 的拥有者,他们有都在本站注册了,就直接让他们的好友关系也称为我们站点的好友关系,这样多好。不过实现起来肯定也有点麻烦。

或者是,在注册的时候,提供很多其他信息的填写,也不错。但是目前来说最好的,就是让用户在注册完了以后,自己去修改去。不过反过来想象,其实就是用鼠标点了几下,也算是蛮方便了。

 

3.外观

这里还是忍不住抱怨一下,因为Live ID 的登陆API,那个地址,如果你不用iframe,那么点击以后,就会在页面上显示sigin in /sign out。我就想了你就不能做成中文的了。

虽然现在英语在国内基本上快不成为问题了。但还是感觉不顺眼。

 

另外在DiscuzNT上想做一个好的外观,不是很方便。特别是像这样,对DiscuzNT做了换血的做法后。

我真的不太习惯在原先的aspx页面上写东西。

 

在改register页面的时候,1000多行,好多个if嵌套,让我改了好半天,才改好。

 

下一篇做一下总结

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

posted @ 2009-03-14 21:04 游利卡 阅读(452) | 评论 (0)编辑

@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及Discuz!NT的知识产权,遵守相关协议。

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢!

 

感谢团队允许把这篇也放到首页来:)

这一部分,我把我大部分的代码贴出来。

 

1.       对数据库、数据访问层、逻辑层的修改。

 

其实这部分算是简单的。不过刚开始,我选择有点错误。因为我的决定是拿掉password,让password失效,然后在再数据库中写入一个Liveid的列,用来将我们得到的user.id写进去。这里的liveid指的是并不是要把用户的 Live ID号写进去

Live Server 给出的变量名是user.id为了不和原来的项目发生冲突,在项目中,我都用小写的Liveid代替。

刚开始,我也想过将user.id写进password这一项,但是我怕这个字符串会太长,而且怕Discuz!NT会有一些其他的要求。不过就在快做完的时候,发现还是写进password最合适,而且长度刚好合适。

 

这样还可以节省很多代码的工作量,基本上数据库部分可以完全不变。

我在前几篇说过了,集成了Live ID API的网站识别用户的就是通过user.id来识别的,所以我们基本上只用在逻辑层和数据访问层中加上一个   ExistPassword 和  GetUserNameByPassword 就可以了。

 这里是要添加的代码

 

(1)Discuz.Forum  中的users.cs 中添加

 

       /// <summary>

        /// 用户的Live ID是否存在

        /// </summary>

        /// <param name="UserId"></param>

        /// <returns></returns>

        public static bool ExistPassword(string password)

        {

            return DatabaseProvider.GetInstance().ExistPassword(password);

        }

 

         /// <summary>

        /// 根据Password返回用户名

        /// </summary>

        /// <param name="password">Password</param>

        /// <returns></returns>

        public static string GetUserNameByPassword(string password)

        {

            IDataReader reader = DatabaseProvider.GetInstance().GetUserNameByPassword(password );

            string username = "";

            if (reader.Read())

            {

                username = reader[0].ToString();

            }

            reader.Close();

            return username; ;

        }

 Discuz.Data 中   IDataProvider.cs中添加

 

        /// <summary>

        /// 判断这里的“密码”是否存在

        /// </summary>

        /// <param name="password">密码</param>

        /// <returns></returns>

        bool ExistPassword(string password);

 

        /// <summary>

        /// 通过Password返回UserName

        /// </summary>

        /// <param name="password"></param>

        /// <returns></returns>

        IDataReader GetUserNameByPassword(string password);

       

        Discuz.Data.SqlServer 中 UserManage添加

 

        /// <summary>

        /// PassWord 返回UserName

        /// </summary>

        /// <param name="password">密码</param>

        /// <returns></returns>

        public IDataReader GetUserNameByPassword(string password)

        {

            DbParameter[] parms = {

                                        DbHelper.MakeInParam("@password", (DbType)SqlDbType.Char, 32, password)

                                  };

            return DbHelper.ExecuteReader(CommandType.Text, "SELECT TOP 1 [username] FROM [" + BaseConfigs.GetTablePrefix + "users] WHERE [" + BaseConfigs.GetTablePrefix + "users].[password]=@password", parms);

        }

 

 

        /// <summary>

        /// 判断用户的password是否已在本站注册

        /// </summary>

        /// <param name="password">密码</param>

        /// <returns></returns>

        public bool ExistPassword(string password)

        {

            DbParameter[] parms ={

                                        DbHelper.MakeInParam("@password", (DbType)SqlDbType.Char, 32, password)

                                 };

            return Convert.ToInt32(DbHelper.ExecuteScalar(CommandType.Text, string.Format("SELECT COUNT(1) FROM [{0}users] WHERE [password]=@password", BaseConfigs.GetTablePrefix), parms)) >= 1;

        }

 

2.       其次是外观

 

我们总不能让首页那个用户名和密码框就那么显眼的摆在用户面前吧!

其实外观的工作还算是简单了,让人讨厌的就是DiscuzNT的编码方式,如果是普通的aspx页面,效率会快很多的。

 

这里需要改变的其实就是三个页面,forumindex.aspx login.aspx register.aspx

 

Forumindex.aspx就是论坛的主页。这个工作量最少了。

 

Login.aspx 是登陆页面

Register.aspx 因为项目众多,改变最多。

 

所以我直接把这两个文件上传,大家下载下来自己看吧。

(更新下载地址为 Live 的 SkyDrive 下载)

     http://cid-5456d4b8f95608a9.skydrive.live.com/self.aspx/把Live%20ID%20嵌入%20Discuz!NT/intergrated.rar

 

3.       接下来我们来配置一下 Live ID API

 

其实这个是非常好申请的,建议大家去听听刘学老师的课程,那里有详细的介绍。

 

然后我们把其中主要的几项写进web.config中就可以了。

在<configuration>中 添加

   <appSettings>
  <add key="wll_appid" value="000000004C00D443"/>
  <add key="wll_secret" value="ideaidea0725ideaidea"/>
  <add key="wll_securityalgorithm" value="wsignin1.0"/>
    <add key="wll_policyurl" value="http://xiaocainiao2010.gicp.net/discuz/policy.html" />
 </appSettings>

(这个是我用来测试,大家随便用了,但是不要恶意篡改就行了,毕竟别人还想看看呢)

然后我们要新建一个 Discuz.Live 的类库,里面就一个项目,就是 WindowsLiveLogin.cs

如果你嫌麻烦,直接下载我做好的吧!

(更新下载地址为 Live 的 SkyDrive 下载)

http://cid-5456d4b8f95608a9.skydrive.live.com/self.aspx/把Live%20ID%20嵌入%20Discuz!NT/Discuz.Live.rar

     在Discuz.web中引入这个类库

4.       这里我们还是需要加入一个handler.aspx。我觉得这个文件就像是中转站以后,我们首先在申请Live ID API的时候填写的就是这个页面。在用户登陆完成之后,首先转向这里,这里通过一个简单的判断,来帮助用户导向需要的页面。注册好的去登陆页面,没有的拉到注册页面中去。

所以因此我们还需要在web/config目录下的 url.config文件做一下修改,因为在这里需要地址转换的。

   <rewrite name="handler"
     path="/handler-{0}-{1}.aspx"
     pattern = "/handler-(\d+)(-(\d+))?.aspx"
     page="/handler.aspx"
     querystring="forumid=$1^page=$3" />


 

Handler.aspx页面可以为空,后台文件,都在上面的那个inergrated下载中。 

至于里面的具体细节,我在下一篇中详述

5.       最后就是重量级的 login.aspx.cs register.aspx.cs

 

大家可以看到,我的首页只留一个一个登陆的链接,其实我希望后面所有的页面都这样做的。并不是我们只需要登陆就可以完成在站点的注册。相反我们还要二次访问用户的联系人列表。

而且在我的register.aspx.cs页面中,有一个判断的页面。这里其是因为,用户的user.id只能通过login的接口来获得。而当你访问地址本的时候没办法获得。

甚至我现在看到的很多示例代码都是这样写的,我相信还有别的方法的。但是在阅读完了WindowsLivelogin.cs这个原类库后,发现基本上只能这样。

 

这里是一个非常不完善的地方。我暂时这样做了

 

login页面中,我对用户的判断还是给予password,也就是user.id。虽然我们可以在注册完成之后,可以通过用户的联系人列表来得到用户的用户名,再通过用户名来判断。但是大家应该知道Live ID也是允许非微软邮箱注册,你能保证所有的用户名都不同吗?虽然在我实际中发现,其实没个用户名后面,都会加个简单的@**以区分,但是我还是用user.id来作为认证,毕竟这个是唯一的。

 

对于一些具体的细节,我在后面的文章中会详述的。

 

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

posted @ 2009-03-14 21:02 游利卡 阅读(847) | 评论 (0)编辑

@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及Discuz!NT的知识产权,遵守相关协议。

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

首先我在这里列出一些相关的参看资料,这也是我在改造的时候参考过的东西。

 

 

Live ID

 

Live ID 的开发者平台

http://dev.live.com/contacts/

Live ID MSDN

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

示例的下载

http://www.microsoft.com/downloads/details.aspx?FamilyId=A2466ABF-9629-42D8-B991-1D3FAF2FE872&displaylang=en

刘学老师的 Live ID API的讲座

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032384439&Culture=zh-CN

K_Reverter的Accout的项目

http://www.cnblogs.com/step1/archive/2009/01/11/1373865.html                                            

Live ID API的申请页面

 https://msm.live.com/app/default.aspx  (这个简洁一些)

http://go.microsoft.com/fwlink/?LinkID=130560

 

 

DiscuzNT

 

DNT的下载页面

http://www.comsenz.com/downloads/install

DNT官方论坛

http://nt.discuz.net/

DNT的资料页面

http://faq.comsenz.com/usersguide/nt

代震军老师的系列博文

 http://www.cnblogs.com/daizhj/category/116704.html

 

 

Live ID API

 

 

1.咱先说一下 Live ID API

 

Live ID API,其实在很早以前就有过类似的产品,但当时微软还对这项服务还收取费用,随着MSN越来越普及,还有hotmail邮件用户的增多,以及云计算平台概念的提出,微软在去年四月份公布了自己的Live 计划,而在今年,Live又被整合到了微软的Azure云计算平台中。

 

Live ID API给其他的网站提供了一套身份验证极致,以及微软的联系人列表的访问。

简单地说,Live ID API 就有两个接口,一个是身份验证的login,另外就是访问联系人列表的接口。当然,我很奇怪,都一年多了,还是beta版本,而且两个版本分得特别开。我在后面会详细提到。

 

通过login的借口,微软的Live Server会给我的站点一个user.id。这个并不是大家想当然的用户的Live ID号。这是个类似密码的东西,他不仅仅对每一个用户是唯一的。如果你申请了Live ID API,同一个用户在你的站点上留下的User.id,和在别的使用Live ID API的网站中留下的user.id都是不同的。

而他也是我们的站点需要保留的,通过它,我们就可以验证这个用户是否权限访问我们的网站了。

 

2.Live ID API的大致流程

大致的流程是这样的。

1.       用户来动我们的站点,然后通过我们站点提供的地址访问一个登陆页面。

2.       用户登陆了,Live Server给我们的网站一个 user.id

3.       我们看看,诶,这不是那个老张吗,常客常客,然后打开大门。

4.       Live Server把页面返回到我们的页面,然后我们的页面对用户开放了。就这么简单。

 

我感觉,Live ID更像是看家狗一样。

 

但是同样问题也就来了。因为login的接口告诉我们的只有这个user.id。其他的呢,sorry,这里你就需要用到联系人列表了。

不知道大家去没去过开心网。在开心网上,大家输入自己的MSN账号,然后开心网就能自动导入你所有的联系人列表。

可能这样的大网站和微软都有协议,所以我们只要输入就可以了。而对于小站点来说,当你需要访问用户的联系人列表时,就需要经过用户的同意,然后Live Server就会把联系人列表返回到这个网站上了。

 

同样,我们也可以通过这个功能来获取每一个用户的联系信息。

所以联系人列表的接口,就给我们提供了方便。

 

3.Live ID API的申请,还有一些主要参数的介绍

 

 

   Application Name 是你的应用的名称

   Return URL 返回的地址,就是在成功登陆,或者访问地址本后,要返回的页面 不过这个在后面的实际编码过程中,都可以修改

   Domain Name 这个你的应用的,域名域

   Secret Key 秘密字符串,也就相当于密码了

 

   不过使用这个API在实际操作中,并没有想象中的便利。在后面的文章我会提到的。

  有朋友说,这部分讲的很乱,我承认。身份验证应该是一个很重头的地方,对于一个网站来说。而这次要引入第三方的验证极致,当然会让人比较晕。我一开始也挺糊涂,不过建议大家最好去下两个Live ID API 的sample。代码都很简单,看一遍基本上就都懂了。

 

 

DiscuzNT

 

1.我眼中的Discuz!NT

我想这个应该不用提了吧!虽然大家了解的更多的是她的PHP版本。但是实际上.NET的版本也是非常优秀的(他们说的)。

这里,我想说一些对于这个改造的实现来说的一些重要的内容。

 

a.怎么说呢!我承认,DiscuzNT的架构设计非常优秀。但是有点固步自封了一些,而且为了实现自己的一些功能,而丧失和很多其他网站兼容的便利。首先就是数据库。如果一个网站要整合DiscuzNT的论坛,除非一开始就使用DiscuzNT的数据库,不然真的做起来着实需要花一些功夫。

 

b.其次他并没有用很多具有.NET平台特色的东西。比如MasterPage,对于类似我这样的菜鸟,这个东西在初学的是经常要用的。当然,还有很多其他的东西。

我建议大家打开DiscuzNT的源代码,然后打开一个aspx页面。如果以前没看过,你不蒙才怪呢!

 

我们都知道,.NET的原理是,首先通过.NET framework对我们的aspx页面解析,然后把他们编译成html页面发送到客户端上。而DiscuzNT的可好,直接做一个大的服务器控件,反而把所有的html的内容,嵌入到这个服务器控件中去。所以出来的效果一定可以完整保留html设计的东西。这对于很多使用html技术的站长来说是天大的好事。因为这样可以使用简单地使用HTML来编辑我们的页面。

可是我就是在是搞不懂了,老大,没看到这么多高校中都开了asp.net的课吗?有必要那么吝啬吗?如果用MasterPage对于.NET程序员来说,更容易编辑。(这当然纯属牢骚了,因为后面在改外观的时候费了好大的劲)

 

我总认为,DiscuzNT是披着一层.NET皮的PHP

 

c.再次是他的整个构架。

我并没有说DiscuzNT不好,我的牢骚更多的处于自己的.NET程序员身份。DiscuzNT为实现一些自己的功能,可谓是煞费苦心。但是也得说,整个架构非常紧凑,如果第一次感觉不理解,多看几遍,就会感觉好很多。

这里特别想说一下DiscuzNT的地址转换。其实博客园也用到了HttpModeul,这在我们一般的开发中并不常见到,刚一开始我很不习惯的。当然现在好了。

关于DiscuzNT的模板系统(就是aspx页面中的那些html)还有这个地址转换,都在代震军老师的博客中有介绍过。大家可以去那里详细学习。

 

可是这也太过于封闭了。比如我们要进行编辑,总会受到他的一些限制。我在这个过程中,体味颇深,好几次差点放弃了,不过最后还是找到了解决的方法。

 

d.DiscuzNT开源仍然是犹抱琵琶半遮面。

DiscuzNT开源。我不是很了解开源,但是感觉Discuz!NT的开源就是给你一个毛坯。就那个一个简单的例子,加入我们去下载到DiscuzNT的源码,然后你用VS打开,然后发布Disney.Web项目,你是不可能得到在网上发布的DiscuzNT产品的。

用户的朋友都知道DiscuzNT有一个非常傻瓜的安装系统。可是我至今都没搞明白这个安装系统到底是怎么完成的。

源码我也看了,对HttmModeul的开启,然后数据库的部署,然后写入管理员账户。

我还监听了整个网站根目录文件夹,然后我自己手动来做这些东西,还是不成功。

 

当然我也在DiscuzNT的官方论坛发了帖子,代老师、戏水老师也发了邮件。结果论坛的帖子石沉大海,代老师基本上没回应,戏水老师一句“你可以看源代码”就直接把我打发了。也不知道是真的不想告诉我,还是瞧不起我。

这里是在开玩笑的,戏水老师不要当真,等您闲了,那个问题得向您好好讨教讨教

不过菜鸟也有菜鸟的方法。首先我们可以用一个DiscuzNT产品进行安装。然后我们可以替换掉bin文件夹,这样就可以完成对源码的修改了。如果想改其他的,安装好了以后自己动手就行了,效果一样。

 

说了这么多Discuz!NT的坏话,戴老师,您别生气啊!

也许你会说,选别的不行啊!不行,就因为这个是Discuz!NT国内最优秀的开源论坛,这样做做出来才有意义,才有挑战,最后完成后,的征服感越强。 

 

 

好了下一篇来介绍整个系统的一些大致的代码

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

posted @ 2009-03-14 21:01 游利卡 阅读(561) | 评论 (1)编辑

@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及Discuz!NT的知识产权,遵守相关协议。

     第一篇就是这个了,不写了

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

 

1.有一天,我这么想

 

该怎么说康盛创想呢?首先对戴志康先生,自然是顶礼膜拜了。其次,也很感谢带来了论坛的普及,以及SNS网站的泛滥。其实不仅仅是康盛,技术越来越普及,服务器硬件的价格越来越便宜,让我们现在的网站越来越多了。但是大家的模式出奇地统一,来个地方就得注册,然后用户名、密码、密码提示问题、邮箱,乱七八糟的。特别是一些论坛,要下载什么东西,都需要回复,有的时候注册完了,还不让发帖。这让我恼火了很多次了。我就一直在想了,什么时候,可以不用记这么多乱糟糟的用户名密码该多好啊!

去年,微软的Live ID发布了。据说以前这个东西还是需要收费的,现在他开放了对所有程序员的接口,注册使用也都很简单。

还有,就是康盛创想的Discuz终于有!NT系列的.NET版本了,而且开源了。所以我就一直在琢磨了,如果能把Live ID嵌入 DiscuzNT那该多好。这样用非常低的成本,就能带来非常好的用户体验。

 

2.Live ID API 让梦想成真

 

Live IDMSN的用户,Discuz也是有很多.NET平台选择的。

经过努力的奋战,终于在昨天吧Live ID成功嵌入DiscuzNT。当然,目前的东西还不完美,但在这个改造过程中却让我受益良多。特别是DiscuzNT源码的分析,因为Live ID需要涉及到第三方的数据连接,这其实就是WebService的东西了。以前写东西,写好了后,在本机上调试就可以了。但是这次则很不同了。

虽然Live ID 和 Discuz!NT看起来名头很大,但是只要用心,我们小菜鸟都可以成功嵌入进去的。

在技术水平上我还狠贫弱,在整合的过程中,走了不少弯路。如果最后的改造即费时又费劲,肯定不划算。所以,我也给自己定了目标,就是尽可能少的修改DiscuzNT的源代码。虽然是用Live ID登陆,但是希望在登录完成之后,效果要达到和普通注册过一样。因为Live ID API还提供了访问联系人的接口,所以用户的 Live ID( 电子邮件账号) 作为用户的emial,然后用户名也可以从Live ID 开放的联系人列表中获得(这里可以获得Live ID主人的信息)。

理论上就达到理想的效果了。

如果做的好,也许还能使用Discuz!NT的更新补丁呢。这次真的收获颇丰,所以我也决定把做这个整合的经验写出来。

 

要做这个东西,首先我们要对Live ID,还有其运行原理有个了解。其次对于DiscuzNT也要知道很多,这样才能下手。

和很多多层架构的网站一样,其实DiscuzNT的身份验证系统也是很传统的,但是和其他网站比起来,DiscuzNT在验证极致上,做的更加优秀,也因此改造起来也有点困难。

 

 

3.大体思路

 

首先,按照DiscuzNT的身份验证系统做三层分析。

 

前台的获取用户输入的参数这一层

中间的逻辑层,一些参数判断

数据访问,和最后的数据库

 

如果要把Live ID嵌入进去,也就是要在这三层之中加入相应的内容。首先逻辑层要有对Live ID的判断, 数据库要有Live ID的列,最重要的也就是前段页面了,这里的部分最复杂,最让我头痛。

 

所以我也按照我的整个思路,分开写。

 

1.       第一篇,我对大体的思路做简单的介绍

2.       第二篇,对Live ID 还有 DiscuzNT一些相关的东西做一个详细的介绍

3.       第三篇,我将绝大部分代码,放出来

4.       第四篇,做一些细节上面的细说

5.       最后,给出我自己的总结

 

 

4.最后

                                      

    前面说过了,作为新手的我,在文字中,可能还有很多不正确的地方,也希望大家能够批评指正。

 

5.关于系列博文的法律声明

 

   系列博文使用了康生创想公司的Discuz!NT产品作为主要的演示对象,来介绍如何将微软公开的Live ID API集成到一个现有的传统论坛和网站中。

   博文中发布的所有的代码仅供学习交流,请勿做商用,其他使用也请慎用。康盛创想是一家知名的IT厂商,也请大家共同保护康生创想公司、Discuz!NT及其团队的知识产权!

   因为自行将本系列博文中提供的代码非法使用,并对康生创想公司造成经济损失的与本博客无关。

 

   (好官腔啊!虽然后面提到了商用的东西,但是还希望大家慎重啊!)

 

 

    了解一下 Live ID API 和 Discuz!NT ——把Live ID 嵌入 Discuz!NT(二)资料篇

自己动手、丰衣足食 ——把Live ID 嵌入 Discuz!NT(三)大体代码和思路

菜网恢恢疏而不漏——把Live ID 嵌入 Discuz!(四)细节探究

谁说菜鸟不行——把Live ID 嵌入 Discuz!NT(五)总结篇

如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢

posted @ 2009-03-14 21:00 游利卡 阅读(1433) | 评论 (14)编辑