
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 游利卡 阅读(574) 评论(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 游利卡 阅读(199) 评论(3)
编辑

2009年3月14日
求职:.NET
平台程序员
终于完成了那个改造的博文了。感觉一身轻松啦,整个寒假都没过好!
我也希望,那些文章能为我加分。顺便这里做一个小小的“简历”,多描述一下自己。特别希望得到更多实战的机会,跳出校园的温床,到职场中磨练自己。
我在北京
恩,写这个并不是觉得自己很了不起需要用人单位来找我。
如果我和大家一起去投简历,然后去等。那您的公司用简单的简历过滤直接就可以把我屏蔽掉。所以我就想出了这个馊主意,把自己的简历变得不是那么正规,反而通过一些其他方面来去给自己争取机会。下面的很多东西,都是没法写在正规简历中的。
至于和我联系,恩。在这公布自己的手机号码不是很安全。所以,如果您希望一个肯实干,又不想花大把的时间去筛选简历,那就找我试试吧,反正还在校,我的要求也不高。这样对两方面都有效率。
这就而对没有什么高傲的成分在里面,希望大家明见。
同时感谢Aaron Wu 先生的指点!
A.平台学习经历
从08年年初开始学习.NET平台。对微软各种.NET平台的开发工具都有了解和使用。
对C#语言和VS开发工具有很好的掌握。
同时熟悉,SQLServer数据库和MySQL数据库。
对JavaScript正在恶补中(早些,把JavaScript当成了Java的延支语种,为保持平台统一性,耽搁了对JavaScript的学习)
对WPF、PowerShell也有一定的了解
重点研习了《C#高级编程》。
在博客园和CSDN的论坛混迹多时(在学习初期问了很多idiot的问题,现在反而潜水居多)
MSDN WebCast的关于ASP.NET的讲座看了很多。目前正在跟徐长龙老师的VS2008的教程,以及赵老师的MVC。
对Live 平台的课程理解最好(自认为)
B.实践经历
首先是学习进程中的练习等等,学习道路中经历过的一些练习像水晶报表,等等我觉得都不用在这里提了!重点提一下两个
1.08年暑假,和一位四川的朋友,共同完成了一个票务网站的开发。此时对多层架构的开发有了非常多的了解,对一个网站的建设和软件公司的业务流程都学习了很多。我主要完成了大部分的文稿、还有数据访问层。
使用的技术是ASP.NET2.0 + SQL Server 2000。
其实这是一个失败的项目,因为我们的开发完全是作坊式的,而对方的需求也是很山寨的。所以如果程序化地说明很困难。不过正是因为失败让我有了比做好以后更多的经验。至于这次经历的很多东西,我还想抽点时间再进行总结。
不过我还是给自己留下了不少经验!认识到了交流的重要性,以及对计划的重新理解。而且,经历过暑假那次,我更加认识到,作为项目开一定需要一个正规的团队通力协作。作坊是行不通的。
2.09年年初,成功用最完美的方式将微软的Live ID API集成到了康盛创想的Discuz!NT论坛。此次改造,让自己对WebService、云计算平台开发、以及Discuz!NT优秀的架构都有很更加深的认识,对自己技术水平提高有了长足的帮助。
其实指的前面的系列博文了!一些总结前面都有写到,这里不再赘述了!
有位朋友说,程序员就和网友中的玩家一样。最重要的就是项目的积累(经验值),现在我的积累还是太少了,如果要承担任务更加艰巨的开发可能还不能驾轻就熟。但是无论,现在能否找到工作的机会,这样的学习永远会持续下去的。
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 游利卡 阅读(317) 评论(8)
编辑
@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及Discuz!NT的知识产权,遵守相关协议。
这次改造中用到的Live ID 为 cainiao2010@hotmail.com 密码为 123456
大家可以进去看看一看我已经申请好的Live ID API
我这次也没有使用网上的空间,而是使用了花生壳的免费域名
如果你想实验一下,那么可以 直接下载花生壳 花生壳的 用户名 xiaocainiao2010 密码 aaa123456 它回自己把你本地的网站与这个花生壳的免费域名做绑定。
如果解决了上一篇我遗留的问题。我个人认为,这个完全可以拿来商用了,不过为了不惹上官司,大家还是慎用为妙。 这次改造让我了解了很多东西,这里我也总结一下。
1.收获颇丰
这次的改造让我收获了很多东西。因为前期太投入了,所以在考场上败得一塌糊涂。但是我觉得这次的成长比以往都要快。
首先是Live ID ,云计算平台的东西,着实新鲜了一把。而且通过对他的访问,让我了解了更多WebService的内容,了解了他的运行机制。如果今后云计算平台的开发主流了,我也算是有经验了。
其次就是对Discuz!NT的学习了。
网上很多朋友对Discuz!NT颇有微词。但是我还是觉得他是跟成功的产品,特别是他的架构,可以兼顾速度、平衡还有丰富多彩的功能。我觉得这样就很了不起了。之前,学习的时候做的练习都太初步了。而通过Discuz!NT我有了更加具体的思考。我就在想,如果要我自己写个论坛,我该怎么写。Discuz!NT是给很好的教材。当然如果是我写,我一定会让他有更多.NET特色。
然后,就是对别人代码的改造。虽然我改的Discuz!NT是基本上没有问题的代码。但是他不符合你的需求,那么他其实就是有问题的,假设他就是bug,就是别人留下的bug,你要怎么来处理呢?而且这是问题,并不是赋值粘贴几行代码就可以了。
不然最后,还是报错了。
报错也不可怕,其实根据错误的行,然后找到根源,然后处理到错误就行了。这让我对以后的工作,产生了很多新的认识,原来,我应该这么做。
特别是在PageBase问题上。我原想的想法是直接修改父类。但是这样太天真了,别的子类怎么办呢?
原来看书时枯燥的知识,现在感觉都成了我的正面临的问题。晚上我翻回去去看《C#高级编程》发现原来生疏的东西是那么熟悉。
用最少的代码做最多的事情。我不敢保证,我的代码绝对有问题。可能在安全上,我还存在很多不足。
刚开始的时候,我多次想放弃使用Discuz!NT,他真的太复杂了。但就像刚才说到的一样,你认为的复杂其实是自己的不了解。如果静下心来认真阅读代码,就能发西安突破口。
之前,我想直接在数据库中添加Live ID字段,现在想象真的是太愚蠢了,我们不需要密码,那直接把user.id写进密码就行了吗!
这样省了不少事情。
2.我的敏捷开发
恩这个部分,来源于Info论坛提供的迷你书《硝烟中的Scrum和XP》,当时给我很大震撼,因为这和之强想象的那种流程式的开发完全不同。也让我有了很多新的认识。当然,就凭我现在的三脚猫的功夫,还远不足以胜任“敏捷”,但我还是要朝这个方向发展。所以,从自己专注的开发开始。
其实,我也没有特别去专注于敏捷这个概念的问题上。因为一开始,我只是在想,我要把Live ID 集成进来。然后该怎么办呢?网站好说,如果是个论坛呢,我要做的不仅集成,还有登陆,然后保持原来的功能。
然后就去找论坛。
找好了论坛了以后,从那里下手呢,如果你在Google“把Live ID 集成到论坛”能得到什么呢?
然后先找Live ID 的资料,然后找Discuz!NT的资料。
说实话,我一开始很迷茫。这该怎么做啊?但是我就在强制自己,每天都必须找点东西,发现问题,解决问题。
然后有一些成果后,再大体预测一下,安排我下来的步骤。我不可能一天完成所有的东西,然后就这样慢慢来,每天任务目标。
每天都在OneNote上写下我的一些想法和注意的地方,用Outlook来规划明天。
虽然最终的代码量很小,但是留下了很多其他的东西。
反过来看看,感觉自己的开发真的有点敏捷的味道。我也相信,如果将来我能加入到一个团队中去,这样的方法也会是非常有效的。
3.我是菜鸟不丢人
其实我刚开始用的标题是,谁说菜鸟写不出好文,但还是觉得不要那么张狂的好。
不过,我就是个菜鸟,而且接触.NET一年多,能达到什么个水平呢。说实话,也许你有很好的编程语感,但是在IT业,真正的牛人都是靠不断的技术积累成长起来的。特别是看过绝影的《疯狂的程序员》之后,更是有这样的感觉。
作为菜鸟的我们很羡慕那些高手,总觉他们天生就是高手似的。对自己总是自卑。
有的时候,菜鸟们问问题 ,经常有得不到合适的解答的时候。以前在CSDN发帖,就是这样,其实如果简单回答一下就可以解决所有的问题。但是我得到的回复却不是这样的。暑假的时候,跟一个朋友学技术,碰到不懂的问题,我得到的最先就是,“你怎么这样写”。我就心里犯嘀咕了,难道你就没有不会的时候吗?很多菜鸟都怕了,这很影响自己的进步的。
还有这次关于Discuz!NT安装的问题,我真的希望知道手动部署Discuz!NT应该怎么做,但愿有人告诉我了。
但是,既便如此我们小菜鸟们不应该自卑,因为这只是个阶段。就像我们现在的社会主义初级阶段一样,我们的经济是没有人家发达,但是我们需要这个过程。
只要我们肯努力,肯去钻研,那么我们就一定能找到问题的根源,只要你有这股劲。而且我相信,勤奋的菜鸟,终有一天会展翅高飞的。
中午的时候,收到了荷兰那位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 游利卡 阅读(358) 评论(10)
编辑
@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及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中
我们都知道了Discuz!NT的aspx页面不是一般的aspx页面。而他的后台也同样不一般。大多数的aspx后台页面都直接继承System.web.UI,但是Discuz!NT则做了一个PageBase的类,来继承System.Web.UI,然后所有的页面都去集成PageBase。
这样的好处显而易见。因为Discuz!NT有着吓人的各种参数,这样就可以让每个aspx后台文件少很多参数定义。但是他也做了很多的限制。
比如HttpContext,把访问联系人列表的部分放进register.aspx.cs这个里面,死活都不成功,总是显示远程服务器错误400。这个错误是指我们访问地址的错误,最后我实在没有办法了,只能判断是由于Discuz!NT特殊的极致导致了这个问题。
但handler.aspx.cs只是个中转页面,所以我们不需要集成那么多的参数,那么直接让他继承System.web.UI(我觉得不用继承也没什么大问题)
然后放进去以后,没问题了。
在开发者页面中提供的代码使用了session,我个人也认为session更好一些,但是无论我怎么设置都Discuz!NT都会告诉我,配置节点错误!所以无奈,还是用了Cookies
3.为什么在注册前,需要先用Live ID 登陆呢!
这个不能怪我!这个完全就是Live ID API他们搞的,我也纳闷了。他们提供了两个接口,但是前者只提供user.id。后这只能访问联系人列表。那么我在注册的时候,两个都需要访问啊,为什么就不能让后者两者都获取呢!
连官方网站上的sample都是先登陆,然后再次访问联系人列表的。索性现在是beta版本,等待正式版的修正吧!
4.为什么要将liveid作为用户的密码存入数据库
我感觉上面两项 基本上都是对 Discuz!NT的抱怨了
其实一开始,我的打算是忽略password,然后在数据库中添加Live ID项目。因为按照当初的目标,就是对代码的更改到最小。以后,或许还可以做成两种身份制并存。但是后来发现,这样反而是种很笨的做法。
这样做得对数据库进行更改,然后数据访问层,然后就是实体集。而且重要的,Discuz!NT的Cookies,他们需要把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表做些修改。当然,这样带来的问题,就是一旦Discuz!NT升级了,你的改造就得重来。(所以康盛创想把我招了把,以后你们的Live ID 登陆版本,我负责了,哈哈)
在经过了很长时间的奋战,终于成功了
我的遗憾
当然,做完了这个改造还是有一些遗憾。
1.首先Live ID API的引入,就是让用户感受到没有用户名密码的限制。但是因为现在beta版的缘故,让注册变得有点怪异。有谁听过,先登陆再注册的,很怪异啊。
我就一直在琢磨着,去看windowsLivelogin.cs的源代码然后在使用访问联系人的API的时候,顺便把 user.id给敲下来。
2.在注册的时候,还是不能实现更多个性化的注册。比如说访问联系人列表,访问的很有限,如果能把用户更多的信息读取就更好了。我还想着,如果两个用户都是Live ID 的拥有者,他们有都在本站注册了,就直接让他们的好友关系也称为我们站点的好友关系,这样多好。不过实现起来肯定也有点麻烦。
或者是,在注册的时候,提供很多其他信息的填写,也不错。但是目前来说最好的,就是让用户在注册完了以后,自己去修改去。不过反过来想象,其实就是用鼠标点了几下,也算是蛮方便了。
3.外观
这里还是忍不住抱怨一下,因为Live ID 的登陆API,那个地址,如果你不用iframe,那么点击以后,就会在页面上显示sigin in /sign out。我就想了你就不能做成中文的了。
虽然现在英语在国内基本上快不成为问题了。但还是感觉不顺眼。
另外在Discuz!NT上想做一个好的外观,不是很方便。特别是像这样,对Discuz!NT做了换血的做法后。
我真的不太习惯在原先的aspx页面上写东西。
在改register页面的时候,1000多行,好多个if嵌套,让我改了好半天,才改好。
posted @ 2009-03-14 21:04 游利卡 阅读(577) 评论(0)
编辑
@博文仅供学习研究,所提供的代码希望大家慎用。请大家保护康盛创想公司以及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. 其次是外观
我们总不能让首页那个用户名和密码框就那么显眼的摆在用户面前吧!
其实外观的工作还算是简单了,让人讨厌的就是Discuz!NT的编码方式,如果是普通的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来作为认证,毕竟这个是唯一的。
对于一些具体的细节,我在后面的文章中会详述的。
如果您的公司缺人,并对我感性兴趣,烦请您到第五篇文章的末尾,谢谢
posted @ 2009-03-14 21:02 游利卡 阅读(1093) 评论(0)
编辑