摘要: 公司最近正在对整个产品进行大规模的重构,把原先基于Web的产品线全部转向Android平台。随之而来的就是产品整体架构设计上的大讨论。作为其中一项最为旷日持久的争论的发起者,我觉得有必要把这个事件记下来。无论现在的思路或是观点是成熟的还是幼稚的。以后都可以引以为鉴。 先来描述一下我们要做什么。简单而言就是一个横跨各个内容源的书籍阅读平台。这个平台的目标不仅仅是方便用户在一个终端上,以一种统一的方...阅读全文
posted @ 2012-01-10 23:57 南柯之石 阅读(143) 评论(0) 编辑
摘要: 在产品的验收阶段,正式发布前一周,紧急动员全公司的人,对1万多本电子书进行人肉测试。我觉得这事儿真是有点儿意思。不知道各位怎么看?也许所有的公司或产品都有可能出现类似的状况,但是我想分析一下:为什么会出现这样的事件,有没有什么办法尽量避免出现类似的事情? 故事的背景是,公司新研发的电子书设备发布在即;同时,为了丰富在设备上可以阅读的书籍的来源,也在接入一些其它公司的内容,其格式为...阅读全文
posted @ 2011-12-22 23:30 南柯之石 阅读(109) 评论(0) 编辑
摘要: 使用到这东西完全是个巧合和无奈之举。不小心在数据库中插入了一些HttpUtility.UrlEncodeUnicode之后的数据。数据库里的一些字段成了%uxxxx%uxxxx这样的结构。 搜索了半天T-SQL UrlDecode的函数,发现都不支持上面这种Unicode的。自己对T-SQL又不熟悉,时间也很紧迫。 解铃还须系铃人,想到在T-SQL里调用HttpUtility.UrlDecod...阅读全文
posted @ 2011-12-20 19:15 南柯之石 阅读(40) 评论(0) 编辑
摘要: 看MSND好长CREATETABLEXMLTable(IDintprimarykey,Dataxml,)INSERTINTOXMLTable(ID,Data)Values(1,'<entity><id>1</id><name>name</name></entity>')SelectData.query('/entity/name/text()')FROMXMLTableWHEREData.value('(/entity/id)[1]','int')=1--Pe阅读全文
posted @ 2011-11-29 20:06 南柯之石 阅读(157) 评论(0) 编辑
摘要: 昨天试过Linux系统下的BufBomb练习,结果在最后时刻被Linux操作系统的ExecShield给做了。正是由于这ExecShield,在Linux平台上,传统的Buffer Overflow已经彻底失效了。 今天我们来试下Windows平台。昨天那篇日志是我练习时留下的笔记,所以比较乱,很多地方没有讲明白。这次是做完练习之后的整理,我会尽量把步骤介绍清楚。 首先,为了在Windows平...阅读全文
posted @ 2011-09-24 00:20 南柯之石 阅读(2670) 评论(34) 编辑
摘要: 《深入理解计算机系统》练习3.38,要求对提供的一个程序进行缓冲区溢出攻击。这里给出自己解题过程。这个程序在不做修改的情况下,在windows平台是无法编译的。所以以下练习基于Ubuntu 11.04 + GCC 4.5.2 要求是:让这个一直输出1的程序输出-559038737(deadbeef)。 目标就是要溢出getbuf这个函数,就把把getbuf这个函数内的执行权拿到,但在运行完我们指定的代码之后,我们还是要让这个函数返回到他本来就应该返回的地方的。查看test的汇编代码。 08048597 <test>: 8048597: 55 push %ebp 8048598: 8阅读全文
posted @ 2011-09-23 01:07 南柯之石 阅读(1500) 评论(4) 编辑
摘要: 刚才无聊,截了几个网络包,发现登录时没有把用户的密码加密的网点真是不少。不加密咋了?不加密的话,你的密码在发到网站的路上,就可能被别人看到啊。更悲剧的情况是所有网站基本用一个用户名、密码。下面是一部分明文传密码的网站:猫扑http://www.mop.com/天涯http://www.tianya.cn/人人网 http://www.renren.com/土豆网http://www.tudou.com/优酷网http://www.youku.com/豆丁网http://www.docin.com/赶集网http://www.ganji.com/58同城http://www.58.com/(登录阅读全文
posted @ 2011-08-22 01:21 南柯之石 阅读(359) 评论(3) 编辑
摘要: 下面表格中的操作的HTTP请求头中的HOST都必须是appwk.baidu.com。都是以POST的形式请求。POST的数据的格式都是: request={"Bdi_bear":"UMTS","BDUSS":""} 其中BDUSS是登录时服务器发回的Token。但多数操作并不要求登录,这个BDUSS可以为空。 操作 URL 注 返回数据 下载排行 http://wenku.n.shifen.com/?rt=dl&type=1&pn=0&rn=10 type=0: 特别推荐 type=1: 下阅读全文
posted @ 2011-06-11 13:12 南柯之石 阅读(173) 评论(0) 编辑
摘要: 文中所有比较都是区分大小写的。 在C++中: "a" < "A": True "aA" < "A": True "aA" < "AA": True "Aa" < "AA": True "ac" < "Ab": True 非常明显,在C++中,字符串比较遵循下面两条规则: 1. 小写<大写 2. 从前向后依次比较。这一条的一个推论就是:无视整体长度。 我个人觉得这非常合理,这也就是英语词典的排序方式。   但是我们看看在.NET中的结果。 String::Compare("a", "A"): –1 String::Compare("aA", "A"): 1      阅读全文
posted @ 2011-01-24 14:06 南柯之石 阅读(289) 评论(6) 编辑
摘要: 说白了就是在盛大的服务器上存放自己的临时文件的东西。(可用来共享文件或中转文件)目前正处于公测阶段,需要邀请码才能注册。(倒不是当小白给他们测试东西,主要这个时候一般都可以注册到自己喜欢的ID)手头上还有几个公测邀请码。有需要的朋友留个话。最好有邮箱,那个邀请要发到邮箱里。阅读全文
posted @ 2011-01-03 22:53 南柯之石 阅读(115) 评论(3) 编辑
摘要: 使用DataGrid控件显示数据是很简单的,只要把数据赋给ItemsSource属性就可以了,数据列都会自动地帮你生成出来。那么在整个过程中,哪个环节是最慢的呢?之所以要写这文章,就是因为最近发现DataGrid的列操作是最慢的。而且慢得不可理喻。比如在DataGrid中显示1万数据行简直就是小菜一碟。因为有RowVirtualization机制,只有显示出来的部分才会生成控件。DataGrid也...阅读全文
posted @ 2010-11-20 00:23 南柯之石 阅读(2036) 评论(24) 编辑
摘要: 这两天在试图解决DataGrid的一个性能问题的时候发现DataGridColumnCollection里有下面这样的一段代码。发上来跟大家一起鉴定一下有没有什么问题。 代码如下(426行): newDisplayIndex=CoerceDefaultDisplayIndex(column,columnIndex); //Insertingthecolumninthemapmeansthat...阅读全文
posted @ 2010-11-19 19:59 南柯之石 阅读(313) 评论(3) 编辑
摘要: I tried for a long time. Only questions about it could be found on the Internet, but no complete answer. I have to admit, this is the most painful part while developing an android application. While, ...阅读全文
posted @ 2010-09-12 21:56 南柯之石 阅读(297) 评论(0) 编辑
摘要: 首先,千万不要觉得Adorner离你很远,因为最简单的WPF界面也会用到Adorner。在WPF中,下面的几个很常见的功能,都是用Adorner实现的。 1. 光标(caret) 2. 焦点(focus) 3. 高亮(highlight) 4. 拖拽预览(drag and drop) 5. 拼写错误提示 6. 数据绑定中用来提示错误的Error Template 当然还有别的,用Reflecto...阅读全文
posted @ 2010-07-10 16:55 南柯之石 阅读(1662) 评论(0) 编辑
摘要: 本来就想要得到的东西自不必说,自然要努力争取。但是还有很多自己可以得到,但是可能并没有多大兴趣的东西,其实也应当努力争取。比如养老金、工龄、劳动资格证和职称。 是的,没有人指望着以后真的用养老金去养老,或者根本没有把这点福利放在眼里。你不要,人保部才高兴呢。如果你觉得福利本来就少,就更应该珍惜。如果仅仅“珍惜”这个词不足以感染你的话。请看下面的分析。 1. 请把眼光放得长...阅读全文
posted @ 2010-07-06 20:25 南柯之石 阅读(162) 评论(0) 编辑
摘要: WPF支持Alpha通道,还有什么必要指定色透明呢?如果是新写的系统,那没有必要。但是如果是老系统移植到WPF平台上,而之前的图片都是基于纯绿为透明色,而且又不想花时间改呢?最简单的方法就是在WPF这一层,处理指定色透明的问题。一个思路是用Converter,把图片中的指定颜色替换成透明色就可以了。但是如果图片比较大,或是比较多的时候,CPU的负担就会很重。所以这种像素级的事情应该交给GPU来做,...阅读全文
posted @ 2010-05-30 11:45 南柯之石 阅读(325) 评论(0) 编辑
摘要: 这里我们主要讨论这个焦点虚框的摆放位置。有人可能要说这个就用系统自定义的位置不是挺好的吗?而且改起来又麻烦。 没有错,系统默认位置很好很强大,但是如果在别的技术实现中就不一定了。比如让我又爱又恨的WPF。 我们看看非WPF的CheckBox的虚框在什么地方。 如果使用的Windows 7系统,请依下面的步骤开启Access Key的默认显示功能。这个功能的另一个效果就是点在Focusable...阅读全文
posted @ 2010-05-27 23:35 南柯之石 阅读(332) 评论(0) 编辑
摘要: 我们来看看Windows系统中的Aero风格的Tree是什么样子的。 上面这样都是系统中非WPF实现的Tree。多数Item都有MouseOver,Selected和Selected and Focused三种附加状态。我们再来看看WPF中的TreeView在默认情况的是什么样子的。相信大家一眼就可以看出来,这明明就是XP风格的嘛。和Aero风格的Tree差距实在是太大了。而且问题很严重。下面列...阅读全文
posted @ 2010-05-25 22:10 南柯之石 阅读(2677) 评论(7) 编辑
摘要: 在WPFBug清单12中我们介绍过一个与不同WPF版本上XAML解析相关的Bug。今天要介绍另一个.NET Framework 4对于XAML解析上的改进。我们知道Button属于ContentControl,ContentControl里的Content逻辑上可以是任何其它Control。所以我们可以把Button的Content设置为一个Image。这也是一个很常见的功能。代码如下所示:[代码...阅读全文
posted @ 2010-03-24 22:34 南柯之石 阅读(324) 评论(2) 编辑
摘要: 在上一篇Blog中指出了ListView在没有Items时,即使Header超出了控件范围,水平滚动条也不会出现的问题。由于篇幅和时间所限,没有给出解决方案。下面就介绍一种解决方案。具体问题请参考上篇文章,这里就不赘述了。解决这个问题分两个步骤:1. 把Header放到ScrollViewer中可以Scroll的部分里。2. 让Header在拖动垂直滚动条时不动。(难点,明明在ScrollView...阅读全文
posted @ 2010-03-19 13:33 南柯之石 阅读(1492) 评论(6) 编辑
摘要: 在VS自动生成的代码中。using语句是放在最上面的。但是无论从代码维护的角度还是从代码语义的角度,using都应该放在namespace的内部。从语义来说:using什么东西,只与代码内容有关,与namesapce的名称无关。如果把using 放在最上面,然后再写namespace。就相当于让namespace把一个语义上相关的整体割裂开了。从代码维护的角度:如果我们要Copy, Paste整个...阅读全文
posted @ 2010-03-18 13:25 南柯之石 阅读(227) 评论(0) 编辑
摘要: 今天工作的时候说起这个问题,我才发现的。不然我一直都没有注意这么细节的东西。首先,不要看别的地方,就看这个文章。眼睛不要转。否则很不小心就会看到答案的。问题:这个放大镜的把,是朝左下的,还是朝右下的。想好答案之后,看看IE(7 or later)或是Opera(10.5 or above)的右上角的搜索框。(别的浏览器大家可自行验证)看看Windows(Vista or later)的开始菜单和E...阅读全文
posted @ 2010-03-18 00:53 南柯之石 阅读(226) 评论(0) 编辑
摘要: 我们知道ListView在内容超出控件本身范围时,默认会把滚动条显示出来。这个内容,显然应该包括Head和Items两个部分。无论哪个部分超出了,都应该把水平滚动条显示出来。ListView的Bug就在于,当ListView中没有Item,且Headr的总长超过ListView本身时,水平滚动条没有出现。这个Bug很好重现。代码如下: <Grid x:Name="LayoutRoot">...阅读全文
posted @ 2010-03-17 18:22 南柯之石 阅读(1162) 评论(0) 编辑
摘要: 今天去了趟北京图书大厦。想去找找Inside SQL Server 2005 T-SQL Programming。这里的分类还是很好的,很快就确认了,没有我找的书。于是闲逛了起来,无意中,发现在一个分类与WPF毫无关系的地方,发现了几本WPF的书,左右再没有别的WPF书了。然后又转了一会,又发现在另一个与WPF毫无关系的地方,也有几本WPF的书。WPF书少得可怜,而且也是随意地分类放着。给人一种强...阅读全文
posted @ 2010-03-13 18:26 南柯之石 阅读(546) 评论(3) 编辑
摘要: 手里头有俩群,一直闲着没有啥用途。想试着建立一个交流学习WPF与用户体验、交互设计方面的小团体。平时可以交流下心得或是解答一些问题什么的。比博客要方便一些。群号是:2·5·1·6·0·5·0,欢迎有兴趣的朋友们加入。目前群尚处于起步阶段,还没有什么实质性的计划或是活动或是风格。也希望朋友们多提些建议。阅读全文
posted @ 2010-03-13 01:20 南柯之石 阅读(193) 评论(0) 编辑
摘要: 第一个问题,WPF最简单的常用控件是什么?(先声明Path不算控件)无论从控件的功能还是从控件的外观来看,最简单都是那个在菜单和Ribbon里很常见的分隔线。没错,它已经从WinForm里的一个字符串(-)进化成一个独立控件(Separator)了。Separator继承于Control,而且没有添加一个属性或事件。当仁不让地成为了WPF中最简单控件的首选。其全部Style代码如下所示: <...阅读全文
posted @ 2010-03-05 22:14 南柯之石 阅读(1698) 评论(38) 编辑
摘要: 如果要做下面这样的一个东西作为背景。你会如何做呢?图1. 目标背景效果方案一,用PS画出来。然后把这个PNG图片作为背景色。这个方案可以,但是如果想让这个线的颜色可配置呢?如何线的粗细不确定呢?无论哪个问题,用像素图的方式都不好解决。方案二,用WPF的矢量图绘制。这个方案可以比较容易地解决上面两个问题。但是无论我们用哪种方式,都不会把整个图的大小画出来。而是画是一个最小的图元,然后重复。标量图方案...阅读全文
posted @ 2010-03-03 23:38 南柯之石 阅读(1548) 评论(13) 编辑
摘要: 用Blend做Visual Design,常常会遇到不知道如何往ListView里放假数据的问题。这时提供一种方法。供大家参考。如果有更简单的方法,也希望大家不吝赐教。代码如下:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><Windowx...阅读全文
posted @ 2010-03-02 12:40 南柯之石 阅读(176) 评论(2) 编辑
摘要: 如何真懂的话。初中几何就够了。题目很简单。在不明显改变Geometry视觉效果的提前下,请简化下列代码。并简述简化后的代码与原代码有什么不同?<StreamGeometry x:Key="SomeTexture">M0,2 L1,2 1,3 0,3Z M1,1 L2,1 2,2 1,2 z M2,0 L3,0 3,1 2,1 Z M3,5 L4,5 4,6 3,6 Z M4,4 L5,...阅读全文
posted @ 2010-02-26 15:05 南柯之石 阅读(507) 评论(3) 编辑
摘要: 充分利用界面上的空间,是优秀软件界面布局设计的原则之一。如果布局上出现了大片的空白区域就会给人一种浪费和不谐调的感觉。如下图所示。 我们把ListBox的ItemsPanel设置为一个WrapPanel。让里面的Items可以自动折行。但是这样在ListBox的右侧,会出现一块空白区。很多情况下,我们对于Item的大小并不很在意,这时我们会更希望Item的宽度可以随着整体宽度自动地调节。产生如下...阅读全文
posted @ 2010-02-21 13:15 南柯之石 阅读(1633) 评论(12) 编辑