Valder Fields

就以我今天听了一天的歌为题目吧。

做了一整天的wp7应用,基本熟悉了MVVM模式。前几天搞了搞Android的开发,游戏神马的,Android确实不如xna好使。今儿搞wp7的时候更觉得Android应用开发也不如WP7。WP7的界面也更加漂亮,似乎WP7火起来只是时间问题。但是WP7的弱点也很明显,bug略多,API太少,连GDI+都不见了。我很奇怪为啥微软要放弃已经很成熟的.net compact framework而去用silverlight。如果Tango能增加一些API的话,我保证wp8可以火起来。

今天晚上要写作业了。下午看了那个被要求的视频,觉得可以写的东西还是挺多的。3000字应该可以编出来。ppt神马的嘛,回学校再说吧。

昨儿晚上正式决定不搞ACM了。或者说是被不搞了。董适说得对,现在的ACM就是应试,跟高考没什么两样。我这个从来就没怎么刷过题的孩子还是不适合这种机械的事情。北航的ACM尤其走刷题路线。没有人讲课,没有人讨论算法的正确性,没有人设计更好的算法,没有人去想某个算法真正该用在哪里。有的只是刷题的人,给题号的人,给源代码的人,出题的人。可能ACM就是这样吧,它不适合我。可能ACM可以给我一个奖项,可能ACM可以为我赢得声誉,但是它给不了我想要的能力。

我虽然很沮丧,但后来感觉到的就是豁然开朗了。少了一项负担,其他目标便明确起来了。比如说这个寒假,剩下的时间就基本用来做云浏览器了。这个东西确实是个体力活,我也不指望高英恺和肖文聪去做了,这种“低级”的事情还是得靠我自己。做不完的话,我就只好把上学期的java大作业当做冯如杯项目了。

一切才刚刚开始。

阅读更多

双向嵌套块状链表——一个很像B+树的东西

唉,还以为我发明了这个东西,没想到写出来才发现原来这个就是B+树的链表版。。

不过这东西还是很不错的,可以高效实现无序链表的插入、删除、获取操作。

SIZE值理论上为3时时间最短,不过最好还是10,以获得更好的空间效率。实际测了下,貌似在总数据规模在1000000时,SIZE=60最快,可以在1s内完成1000000个数的添加,比stl set还要快一倍左右。时间效率基本达到了lgn。

但是删除所花费的时间较长。一是因为free比new花费时间要长;二是因为CheckUnion写的有点臃肿。回来我改改,然后再写篇详细的介绍性文章吧。

阅读更多

visual studio vs gdb

开始编程以来已经快十年了,ide也用过了office 97里的vba(好吧这个应该不算ide..不过确实是我的启蒙语言。。),vb6,visual studio2003/2005/2008/2010,devcpp,codelite,codeblock,eclipse,aptana等等。我还没有能力像大牛一样使用vim+gdb调试cpp程序,但是使用vs也已经五六年了,我不明白为什么在windows下,还有许多人不用vs而用gcc+gdb去调试cpp程序。

尤其是这几天一直在ubuntu下编程,我越来越不明白,为什么gdb会如此受到某些大牛们的欢迎。除去了它的跨平台以外,我觉得visual studio内置的调试器绝对比gdb好用。

如果用命令行去调试,可能gdb会表现的比vs要优异。但既然可以随见即所得,为什么还要抱着老方法不放呢。

可能gdb在功能上和vs相差不大,只是调用它的软件对它支持不够好。这不能说是gdb的缺点,但可以说是linux的缺点。

从vs上就能看出MS的优势。虽然linux下的软件包们都可以随意组合,但它们的默契并没有想象中的那么好。而MS虽然自由度不大,但可以保持高度的整合性,使bug尽量少的出现。

它们可能各有千秋,但作为菜鸟的我,还是更喜欢visual studio.

很想做个程序

近期有在电脑上做过一些很繁琐的事情,比如说做纯体力的编程运动,修电脑啊装程序啊什么的,令我身心俱疲的。于是我就想,这些繁琐的机械性的计算机操作可不可以不人为进行。诚然,有很多记录键盘鼠标轨迹的软件可以替我们完成这些机械性的操作,但是这些程序至少需要我们在电脑上做一次操作。人多力量大,很多操作别人都已经做过了,我们为什么还要再做一遍呢?于是一个想法诞生了——云操作。

云操作就是把这些繁琐的操作保存在服务器端,我们需要进行一项操作时,就将这项操作的描述发送给服务器端,服务器返回一些相应的指令,客户端根据指令执行。描述可以是自然语言;指令可以是命令行、鼠标轨迹、键盘记录等。

它怎么工作呢?比如说一个很简单的事情,今天你的老总让你把几百个文件中的某几个字符替换成另外几个字符。这当然是你之前没做过的,但是有别人做过类似的啊,至少做过打开一个文件然后替换嘛,于是在服务器端保存了这么一条记录:“文件内容替换 aaa bbb ccc”表示将aaa文件中的bbb替换成ccc。现在你只需要向服务器发送一句话“把a0到an这n个文件中的asd替换成fgh”,服务器会分析它的语义,根据客户端操作系统和硬件情况转换成客户端指令“for(int i=0;i<=n;i++)filereplace("a"+i,"asd","fgh")”(无语法,就这么一写。。)传递回客户端,客户端把指令编译,然后按指令执行就可以了。这样,工作将会变得如此简单。

它有什么用呢?用处大大的啊!真正的人机交互有木有!可以与时俱进的人机交互!如果把它再加上语音识别的话,

鼠标、键盘全都out了!任何复杂的事情,只要有人做过,那就说出来!云来帮你实现!

没人做过也没关系,只要任何人做一遍,就会保存在服务器中。这样便可以实现与时俱进的云操作。

但是这个东西却很有难度。难点之一是权限的控制。如果一个人保存在服务器端一个恶意的操作,别人一不小心检索到了该操作,应该怎样避免危险的发生呢?

难点之二是语义的识别与储存。以及在电脑上的操作因软硬件的不同而不同,为了照顾不同的平台需要生成不同的命令。

但是,起码是一个好的想法。

北航srun3000 Android客户端

在北航沙河这边上网需要用srun3000客户端,可是只有Windows客户端能用,Linux等等其他客户端都不能用,就更不用说手机客户端了。。

好在有北京科技大学的牛人们做了开源的C#版的srun3000:http://code.google.com/p/srun3000/

我把C#翻译成了Java,做了个Android的客户端。经测试,可以在有沙河无线(wifi)的地方正常登录/上网/注销。

宿舍里有wifi信号的并且用android手机的孩子们,终于不用担心流量了。。

不知道其他学校是什么情况,也使用srun3000的学校应该也可以用。

apk文件:srun3000.apk

eclipse源代码:srun3000

Asp.net果然可以异步处理http请求

这是我的一大发现。。(虽然很有可能早就有别人发现了。。)

我这里的异步是指,客户端1某此请求服务器端数据,服务器端先进行数据的接收,直到某一条件(比如说有另外的客户端2访问、某事件的触发)时,继续进行客户端1的数据的发送。

这里以客户端2的访问为例。

在aspx网页中放上一个Button,代码如下:

C#语言:
namespace Test
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Application["thread"] != null)
            {
                System.Threading.Thread th=Application["thread"] as System.Threading.Thread;
                if ((th.ThreadState & System.Threading.ThreadState.Suspended) > 0)
                {
                    HttpContext hc = Application["context"] as HttpContext;
                    hc.Response.Write("hello world!");
                    th.Resume();
                   
                }
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Application["thread"] = System.Threading.Thread.CurrentThread;
            Application["context"] = HttpContext.Current;
            System.Threading.Thread.CurrentThread.Suspend();
            Response.End();
        }
       
    }
}

某个客户端1访问时,按下按钮,然后客户端1处于等待状态;

直到另外一个客户端2访问时,客户端1的服务器处理线程停止挂起状态,并且客户端1的输出交给了服务器处理客户端2时的线程。

这正是我想要的效果。Asp.net的Application真是强大啊。。

WM版计算器

在北航这个破地方能做出点东西来真不容易。。

Windows Mobile这个“老掉牙”的操作系统(其实我觉得WM还可以。。)上的计算器们都太蛋疼了,不是数字显示不了就是试用期已到。其实我的要求不高,能算出一般复杂的式子就可以了,也不需要太花哨的界面。于是我就用C#编了这个计算器。

阅读更多

PHP ToDo List更新

新加了以下功能:

  1. 密码功能(默认密码:password);
  2. 可以自定义标题;
  3. 可以将任务标记为“紧急”;
  4. 可以自定义状态;
  5. 可以在cookie中保存筛选的状态。

优化了以下功能:

  1. 状态的改变、排序的改变将在与服务器同步完成之后进行网页的更新;
  2. 加快表示状态的图片加载速度;
  3. 改变了排序的位置。

密码、自定义标题以及自定义状态的修改方法:

修改settings.php文件:

<?php
$PWD="password"; //引号中为密码
$TITLE=NULL; //NULL为默认标题“PHP ToDo List”, 把NULL改为其他文字以自定义标题,要用引号括起来

//下面是自定义状态,修改的话直接修改单引号中的文字即可,file指图片路径,text是状态描述;添加的话按照{file:'…',text:'…'}的格式添加即可
$FILTERS="{file:'pause.png',text:'未进行'},
{file:'working.png',text:'正在进行'},
{file:'tick.png',text:'已完成'},
{file:'stop.png',text:'已停止'}";
?>

地址:http://www.wanganran.com/todolist

源代码下载地址:http://www.wanganran.com/todolist/todolist.zip