美国当选总统办公室官方博客今天公布了候任总统奥巴马的官方肖像照片。该照片由Pete Souza拍摄,是美国总统官方肖像在拍摄中首次使用数码相机。Pete Souza是一位独立摄影师,也是美国俄亥俄大学的摄影学助理教授。他曾经为里根总统担任过白宫官方摄影师,也曾是国家地理杂志的独立摄影供稿人。在奥巴马当选后,他刚刚被选为最新一届的白宫官方摄影师。

[singlepic=18461]

[singlepic=18462]

说到首次使用数码相机,在小布什当选的2000年,数码相机还很难担当这样重要照片的拍摄工作。而到了现在,再不使用数码相机就显得有点说不过去了。根据该照片的EXIF信息显示,Pete Souza使用的是佳能最新的全画幅单反相机EOS 5D Mark II,后期处理则是在Mac版本PhotoShop CS3上完成的。

陈GX老师的经验再一次教育我们:器材不重要,关键是拍什么。

“/”应用程序中的服务器错误。
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保<machineKey>配置指定了相同的validationKey和验证算法。不能在群集中使用AutoGenerate。

概括地说,就是POST执行时引起的“验证视图状态MAC失败”错误。
原因很简单:当你想使用传统POST提交信息到另一个aspx页面时出现这个错误。如果提交的action是本页面则不会出错。
解决方案:也很简单,去掉form中的runat=”server”即可。

这几天有点小活,要求是ASP.NET的,虽然我不怎么看好ASP.NET,但是人家要求了我也就照做吧。
最复杂的部分是一个TreeView。出于兼容性和简单性考虑没有用ASP.NET的TreeView控件,而是参考一篇文章自行写了一个出来。

[singlepic=18460]

技术指标如下:

  • 实现:Div+CSS+JavaScript+ASP.NET(C#)
  • 功能:可以实现无限级的TreeNode
  • 标准:在IE 7和Firefox 3.1下显示效果相同,兼容XHTML 1.0 Strict最严格的网页标准

效果如左图所示。最后一个函数可能会因为超宽看不到全部,具体请参照文章附件中的源代码。
附件下载:http://download.nocoo.us/Download/Archive/TreeViewCode.rar

TreeNode.cs

[code=’c#’]
///

/// TreeView结点类
///

public class TreeNode
{
private string name;
private string href;
private List subNodes = new List();

///

/// 结点名
///

public string Name { get { return name; } }
///

/// 结点链接
///

public string Href { get { return href; } }
///

/// 下级结点个数
///

public int Count { get { return this.subNodes.Count; } }
///

/// 获取或者设置下级结点
///

/// 序号 /// 下级结点
public TreeNode this[int index]
{
get { return subNodes[index]; }
set { subNodes[index] = value; }
}

///

/// 构造函数
///

/// 结点名 public TreeNode(string name)
{
this.name = name;
this.href = null;
}

///

/// 构造函数
///

/// 结点名 /// /// 结点链接 public TreeNode(string name, string href)
{
this.name = name;
this.href = href;
}

///

/// 添加下级结点
///

/// 新结点 public void Add(TreeNode node)
{
subNodes.Add(node);
}
}
[/code]

TreeView.cs

[code=’c#’]
///

/// TreeView
///

public class TreeView
{
private List nodes = new List();

///

/// 填充测试用数据
///

public void FillTestData()
{
TreeNode node1 = new TreeNode(“中国”, “#”);
TreeNode node11 = new TreeNode(“华北地区”, “#”);
TreeNode node111 = new TreeNode(“河南省”, “#”);
TreeNode node112 = new TreeNode(“河北省”, “#”);
TreeNode node113 = new TreeNode(“山东省”, “#”);
TreeNode node1131 = new TreeNode(“青岛市”, “#”);
TreeNode node1132 = new TreeNode(“济南市”, “#”);
TreeNode node11321 = new TreeNode(“市中区”, “#”);
TreeNode node11322 = new TreeNode(“历下区”, “#”);
TreeNode node11323 = new TreeNode(“槐荫区”, “#”);
TreeNode node11324 = new TreeNode(“天桥区”, “#”);
TreeNode node11325 = new TreeNode(“长清区”, “#”);
TreeNode node1133 = new TreeNode(“菏泽市”, “#”);
TreeNode node1134 = new TreeNode(“济宁市”, “#”);
TreeNode node1135 = new TreeNode(“德州市”, “#”);
TreeNode node12 = new TreeNode(“东北地区”, “#”);
TreeNode node13 = new TreeNode(“西北地区”, “#”);
TreeNode node14 = new TreeNode(“华东地区”, “#”);
TreeNode node15 = new TreeNode(“西南地区”, “#”);
TreeNode node16 = new TreeNode(“华南地区”, “#”);
TreeNode node17 = new TreeNode(“华中地区”, “#”);
TreeNode node18 = new TreeNode(“港澳台地区”, “#”);

node1132.Add(node11321);
node1132.Add(node11322);
node1132.Add(node11323);
node1132.Add(node11324);
node1132.Add(node11325);

node113.Add(node1131);
node113.Add(node1132);
node113.Add(node1133);
node113.Add(node1134);
node113.Add(node1135);

node11.Add(node111);
node11.Add(node112);
node11.Add(node113);

node1.Add(node11);
node1.Add(node12);
node1.Add(node13);
node1.Add(node14);
node1.Add(node15);
node1.Add(node16);
node1.Add(node17);
node1.Add(node18);

nodes.Add(node1);
nodes.Add(new TreeNode(“俄罗斯”, “”));
nodes.Add(new TreeNode(“美国”));
nodes.Add(new TreeNode(“韩国”));
nodes.Add(new TreeNode(“澳大利亚”));
nodes.Add(new TreeNode(“印度”, “”));
nodes.Add(new TreeNode(“加拿大”, “”));
}

///

/// 获取TreeView的html代码
///

///
public string GetHtmlString()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(“

    “);
    for (int i = 0; i < nodes.Count; i++) { sb.AppendLine(GetNodeHtml(nodes[i], 1, (i + 1).ToString())); } sb.AppendLine("

“);
return sb.ToString();
}

private string GetNodeHtml(TreeNode thisNode, int depth, string id)
{
StringBuilder sb = new StringBuilder();
bool hasSub = (thisNode.Count > 0) ? true : false;
sb.AppendLine(string.Format(“

  • “, depth, id));
    sb.AppendLine(string.Format(

    {3}

    “,
    hasSub ? “closedir” : “nodir”,
    depth,
    id,
    (thisNode.Href == null || thisNode.Href.Equals(“”)) ? thisNode.Name : string.Format(“{1}“, thisNode.Href, thisNode.Name)
    ));
    if (hasSub)
    {
    sb.AppendLine(string.Format(“

    “, depth, id));
    sb.AppendLine(“

      “);
      for (int i = 0; i < thisNode.Count; i++) { sb.AppendLine(GetNodeHtml(thisNode[i], depth + 1, string.Format("{0}_{1}", id, i + 1))); } sb.AppendLine("

    “);
    sb.AppendLine(“

    “);
    }
    sb.AppendLine(“

  • “);
    return sb.ToString();
    }
    }
    [/code]

    ASP.NET页面调用:

    [code=’c#’]
    <% CMC.TreeView list = new CMC.TreeView(); list.FillTestData(); Response.Write(list.GetHtmlString()); %>
    [/code]

    ASP.NET页面JavaScript:

    [code=’js’]
    defaultNodeState();

    function defaultNodeState()
    {
    var nodeState = getCookie(“nodeState”);
    if(nodeState == null)
    {
    nodeState = “,|,|,”;
    setCookie(“nodeState”,nodeState);
    }
    var layer = nodeState.split(‘|’);
    for(var i=0;i

    火狐,你大概知道~
    英伟达呢?第一印象会是个沿海服装或者皮鞋厂吧…
    Anyway,英特尔之后大家都喜欢给自己起个中文名,尤其是在中国设立研发机构的公司都迫不及待地起个中文名以便与总部划清界限(没错,说的就是谷歌)。
    Firefox和Nvidia看起来好像是完全不相干的两个公司嘛。其实不然,总感觉这两个公司的产品现在越来越有着相似的一面。
    哗哗哗时间过去三五年当云计算成真,当我们的个人终端已经不需要所谓的主机而变成一个屏幕的时候,当网线和电线早就集成在一起,要上网只要插电源的时候,Google所谓网络操作系统(其实就是Google Chrome或者其他浏览器,比如Firefox)大行其道的时候,当我们的所有东西都运行在说不清楚在什么地方的服务器的时候,Firefox就取代了Nvidia,接下了为用户渲染呈现视觉效果的重任。
    我们还是看看现在的JavaScript已经强大到了什么地步吧!

    2D

    [singlepic=18425]

    JavaScript Super Mario Bros.
    没错,JavaScript版的马里奥兄弟。也许你还记得,天朝的JavaScript开发者早就推出了网页版仙剑。

    [singlepic=18427,600,425]

    JSLab Plot Tool
    JavaScript版Matlab。

    “3D”

    [singlepic=18424]

    http://processing.org/learning/3d/
    3D的JavaScript库

    [singlepic=18426]

    10款让你震撼的图片展示js代码
    Apple Cover Flow效果的JavaScript实现,这似乎已经不算是什么了。

    猜一下吧,以下的哪一个会成为几年之后的Nvidia?

    The following ones are the new generation JavaScript engines for web browsers, all implementing just-in-time compilation (JIT) or variations of that idea:

    是我理性过度还是什么的,非要给一种感觉去分类?
    当伤心成为习惯,甚至于没有它仿佛这一天就过得不完整似的。
    对于我来说,伤心主要有那么三种:
    第一种是因为想到将来自己就要一个人如何如何了,将来的家里会如何如何放置一些照片,好把她永远留在我的身边如何如何。这种伤心我觉得是自私的,还是少点比较好。我现在基本可以很快识别出这类伤心,然后很快地渡过去。
    第二类主要是思念。比如一个人去味千吃饭,服务员留在两人桌的另一边的一张餐巾纸,都会让我落寞不已。有时候会想起那些被我所珍重但是仍然过去的日子,真的很伤心。这类伤心,唉…
    第三类基本是悔恨,念及她的怨念及诘问,我真的无地自容,很伤心,却不能做任何事情去弥补,这类伤心,基本表现成一开始的愤怒,到对自己的折磨,最后没有办法,只好默默伤心,时间会比较长。