必威体育下载克里斯蒂安·海尔曼

您当前正在浏览必威体育下载克里斯蒂安·海尔曼五月的博客必威体育简介档案,2008。

5月存档二千零八

@YDN上的Media2008实时报告

星期五,5月30日,二千零八

今天是@media2008第一天的凌晨1点14分,我刚刚完成了关于综合业务数字网博客:

明天早上第二天见,我要去睡觉了。

在线和编程方式提供脚本配置

星期五,5月23日,二千零八

在编写代码时,我一直非常一致和急迫的一件事情是将所有应该定制成自己的配置对象的东西分开。

我最近写的一个普通脚本应该是这样的:

var模块= 功能{
  //配置,在这里换东西
  var配置= {CSS{{悬停“悬停”积极的“电流”杰森德“JS”
     }身份证{容器“主容器”
     } 
    }超时二千用户标识克里斯黑尔曼
  }//主代码开头
  功能初始化{}
  /…其他方法和其他代码…//使init成为公共方法
  返回 {初始化初始化}
}模块。初始化

好处应该很明显:

  • 实现者不需要搜索整个脚本来找到他们需要更改的内容。
  • “在这里改变你需要改变的东西”和“只有当你知道你在做什么的时候才接触到它”之间有着明显的分离——允许更多的开发人员使用你的代码。
  • 在与其他开发层重叠的单个位置显示实现者,例如,通过定义HTML使用的元素和CSS应用于生成的元素的类名。
  • 将所有字符串放在一个位置可以更容易地进行本地化,并加快脚本的速度(例如,IE6为每个字符串创建一个字符串对象,甚至在循环内的条件下也是如此!)

我对那件事很满意,直到佩里瓦尼安要求提供一个选项以编程方式覆盖配置文件,很像悠悠允许您处理雅虎UTI.CONFIG实用工具。他当然是对的,有时,您希望更改配置并重新启动脚本(当然,另一种方法是编写带有实例化的模块)。

最简单的方法是将配置对象公开:

var模块= 功能{
  //配置,在这里换东西
  var配置= {CSS{{悬停“悬停”积极的“电流”杰森德“JS”
     }身份证{容器“主容器”
     } 
    }超时二千用户标识克里斯黑尔曼
  }//主代码开头
  功能初始化{}
  /…其他方法和其他代码…//使init和config成为公共方法
  返回 {初始化初始化配置配置}
}

这样,您可以在调用init()之前重写所需的属性:

模块。配置.CSS.身份证.容器 = “页眉”模块。配置.用户标识 = “阿兰怀特”模块。初始化

然而,ara认为能够将对象作为覆盖某些属性的init()的参数提供更方便。你可以通过检查这个对象来做到这一点,循环其属性并递归地尝试查找和匹配配置对象的属性:

var模块= 功能{
  //配置,在这里换东西
  var配置= {CSS{{悬停“悬停”积极的“电流”杰森德“JS”
     }身份证{容器“主容器”
     } 
    }超时二千用户标识克里斯黑尔曼
  }//主代码开头
  功能初始化{
    //检查第一个参数是否为对象
    var=争论
    如果ISOBJ[  ]{
      varCFG=[  ]//循环参数并更改配置
      对于var在里面CFG{设置配置文件配置CFG[]
      }
    }
  }功能设置配置文件oV{
    //循环遍历对象的所有属性
    对于var在里面o{
      //当值为对象时,递归调用此函数
      如果ISOBJo[]{设置配置文件o[]V//否则,比较属性并相应地设置它们的值
      } 其他的 {
        如果= ={o[] =V}
      }
    }
  }//测试参数是否为对象(而不是数组)
  功能ISOBJo{
    返回 类型o= = “对象” & & 类型O剪接 != “函数”
  }
  /…其他方法和其他代码…
  //使init成为公共方法
  返回 {初始化初始化}
}模块。初始化{容器“页眉”
  “超时”一千
}

当所有的配置属性都是唯一的时,这可以很好地工作。但是,当嵌套对象中的属性与更高级别上的另一个属性同名时,它会失败。为了考虑到这一点,我们可以提供一个选项,以属性的路径作为属性名发送字符串。然后它变得混乱,因为我们需要eval()这个字符串,并确保以正确的格式返回值。总之,它看起来像这样:

var模块= 功能{
  //配置,在这里换东西
  var配置= {CSS{{悬停“悬停”积极的“电流”杰森德“JS”
     }身份证{容器“主容器”
     } 
    }超时二千用户标识克里斯黑尔曼
  }//主代码开头
  功能初始化{
    如果ISOBJ争论[  ]{
      varCFG=争论[  ]
      对于var在里面CFG{
        如果一。索引''!= -{
          varSTR= [’’ +一。代替//g“” + “”
          var瓦尔=获取值CFG[]埃瓦“配置” +STR+ “=” +瓦尔
        } 其他的 {设置配置文件配置CFG[]
        }
      }
    }
  }
  功能设置配置文件oV{
    对于var在里面o{
      如果ISOBJo[]{设置配置文件o[]V
      } 其他的 {
        如果= ={o[] =V}
      }
    }
  }
  功能ISOBJo{
    返回 类型o= = “对象” & & 类型O剪接 != “函数”
  }
  功能获取值V{
    转换类型V{
      案例 “弦”
        返回 “” +V+ “”
      打破
      案例 “数字”
        返回V
      打破
      案例 “对象”
        如果类型v.诉剪接 = = “函数”{
          返回  +V+ “”
        } 其他的 {
          返回 “{” +V+ “}
        }
      打破
      案例 
      打破
    }
  }/…其他方法和其他代码…
  //使init成为公共方法
  返回 {初始化初始化}
}模块。初始化{
  “容器”“页眉”
  'css.classes.active'“现在”
  “超时”一千
}

为了使其可读,让我们将所有配置更改代码封装到一个自己的模块中:

var模块= 功能{
  //配置,在这里换东西
  var配置= {CSS{{悬停“悬停”积极的“电流”杰森德“JS”
     }身份证{容器“主容器”
     } 
    }超时二千用户标识克里斯黑尔曼
  }//主代码开头
  功能初始化{慰问。日志配置
  }/…其他方法和其他代码…//配置更改
  var变换系数= 功能{
    功能 设置o{
      var规则= //g
      如果ISOBJo{
        对于var在里面o{
          如果一。索引''!= -{
            varSTR= [’’ +一。代替规则“” + “”
            var瓦尔=获取值o[]埃瓦“配置” +STR+ “=” +瓦尔
          } 其他的 {查找属性配置o[]
          }
        }
      }
    }
    功能查找属性oV{
      对于var在里面o{
        如果ISOBJo[]{查找属性o[]V
        } 其他的 {
          如果= ={o[] =V}
        }
      }
    }
    功能ISOBJo{
      返回 类型o= = “对象” & & 类型O剪接 != “函数”
    }
    功能获取值V{
      转换类型V{
        案例 “弦” 返回 “”+V+“” 打破
        案例 “数字” 返回V 打破
        案例 “对象”
          如果类型v.诉剪接 = = “函数”{
            返回 +V+“”
          } 其他的 {
            返回 “{”+V+“}
          }
        打破
        案例  打破
      }
    }
    返回{设置设置}
  }
  //使init成为公共方法
  返回 {初始化初始化}
}模块。初始化{
    “容器”“页眉”
    'css.classes.active'“现在”
    “超时”一千
}

这是一种提供配置对象的方法,可以在in it()方法中通过编程方式对其进行更改。你能想出更好的吗?

谷歌阅读器共享物品的低调徽章

星期三,5月21日,二千零八

我是谷歌阅读器的用户,可以通过RSS我订阅的源。我认为读这本书是安全的RSSTwitter已经取代了我大部分的网上冲浪。

像大多数大RSS读者,谷歌阅读器还可以让你和那些想在你的社交圈里的人分享你的伟大发现。你可以将这些发现作为订阅或者作为一个小徽章(在谷歌行话中称为剪辑)包含在你的博客或者其他网站中。

这个此徽章的开箱即用版本可以定制并生成两个javascript,其中包括编写徽章。

太好了,但是我不太关心那些没有javascript就可以提供功能的东西,但是不需要麻烦,这就是为什么我更仔细地检查了谷歌徽章的作用。

如果您查看生成的脚本includes,您将发现例如以下内容统一资源定位地址(添加了空格以避免破坏我的日志:)

http://www.google.com/reader/public/javascript/user/07479231772993841072/state/com.google/broadcast?n=5&callback=grc_%28%7bc%3a%22green%22%2ct%3a%22ch必威体育下载ristian%20heilmann%27s%20shared%20items%22%2cs%3a%22false%22%7d%29%3bnew%20grc

点击这个会给你一个杰森带有包装函数的对象(出于某种原因,还带有注释,说明这是一个javascript文件)。这意味着你可以把它用于你自己的目的。

你只需要你的用户名,你可以很容易地从谷歌阅读器提供的共享项目主页上找到这个。在我的情况下,这是http://www.google.com/reader/shared/07479231772993841072号.

其他有趣的参数JSONAPIn定义项目数量和回调参数定义围绕杰森数据。

将所有这些放在一起,很容易创建一个使用以下内容的徽章HTML在谷歌阅读器上展示我的共享项目。

      

没有javascript的访问者仍然可以点击我共享项目的页面。使用javascript的用户将获得最新的5个。

您可以在演示页面上看到徽章的实际使用情况并为自己下载(使用教程建造者):

探索者如何找到清洁工,更多数据丰富的Web

星期五,5月16日,二千零八

我通常不写我公司的产品,但我想尽快谈谈搜索猴,雅虎现在为开发者提供了一项新的服务。

昨天,我和几家杂志的记者一起解释了SearchMonkey的技术特点,随后,一位对该领域了解更多的同事介绍了SearchMonkey的业务和最终用户利益。这让我大开眼界,如果我们使用正确的方式,搜索猴子将有多大的影响。

什么是SearchMonkey,什么是业务或用户利益?

在表面上,搜索猴子意味着雅虎!打开他们的搜索结果页面为他们编写插件。您可以单独设置搜索结果的样式,并提供“更丰富的用户体验”。换句话说,你可以写“猴子”,让人们从雅虎提供的搜索结果中深入了解你的网站。

比如说你是Netflix或其他数字化视频光盘出租公司和你想让人们租电影。你可以通过imdb.com或其他电影评论网站来设计搜索结果的风格来展示数字化视频光盘,一个概要和一个到Netflix租赁电影的链接。

好处是最终用户不需要加载IMDB佩奇,如果她对概要中的信息感到满意,而你作为Netflix获得了很多你以前没有的流量。

壮观的,让最终用户和业务人员感到高兴,但它是如何导致一个更清洁的网络的呢?

你怎么能用这个让网络变得更干净?

好,这是一个向人们展示的强有力的商业案例。搜索结果页面很无聊,人们试图和他们玩游戏SEO多年来的技术(和可憎的东西)——人们喜欢被发现。雅虎!打开它们塞尔PS(搜索引擎结果页面)对世界意味着首先,如果你是一个开发者或小型机构,你可以提供一个猴子作为服务。

猴子是建立在有关文档的可用数据之上的。最基本的形式是雅虎在其索引标题中保存的信息,描述和其他元信息。您可以使用此信息添加更多HTML丝氨酸蛋白酶抑制剂展示它,但收成是有限的。

为了解决这个问题,SearchMonkey允许您提供“自定义数据服务”,以获取更多要显示的信息。这些服务可能是XSLT从文件中获取信息,安美国石油学会返回一个XML在特定的datarss格式中,或者——这里是它真正有趣的地方–RDF或文档中的微格式信息。

使用XSLT总是觉得我错了HTML结构受如此多的因素影响——另一个问题当然是它非常需要内存和计算。

提供自己的美国石油学会返回XML当然是提供数据的最佳方式,但你可能没有足够的资源或动力去做。

留下微格式和RDF.现在我们支持哈托姆,哈历克HCARD,回顾与展望XFN在微格式和嵌入式方面RDF这使得检索信息更加容易。

有一个利用数据网络SearchMonkey文档中详细解释这一点的部分(很抱歉,有人认为“利用”了好的语言)。

所以,总之,SearchMonkey不仅是为开发人员打开网络的一个巨大步骤(您可以在不付费的情况下设计搜索结果的样式——这在不久前会让市场营销人员抓获)。这也意味着我们最终有了一个通道来显示我们添加到微格式或RDF不是火狐扩展或专门搜索引擎的格式。通过页面中的信息,开发人员(内部或外部)可以一步创建定制的搜索结果,而无需依赖文档的结构,也无需同时设置Monkey应用程序和数据服务。

在反面,即使有人可以使用SearchMonkey通过您提供的数据(并链接回您)来增强搜索结果,如果很容易编写XSLT获取数据是一个强有力的论据,当你想促进清洁时,可以向人们展示HTML结构(否)我不会叫它波什,因为没有一件事是老生常谈的,语义的HTML-这不是常见的做法,可悲的是)

退房搜索猴子信息页开始或只是潜心培养你的第一只猴子–选择是无止境的。

赞扬错误

星期四,5月15日,二千零八

我一直在和一个许多为了让人们更好地一起工作,更快地完成工作,最近开发人员的数量增加了。有一件事让我着迷,那就是人们不去交流错误和问题的时间。

我们非常高兴庆祝成功,并指出我们所生产和所做工作的明显好处,但是有一种天生的倾向,不承认错误,也不欢迎别人告诉你什么是错的。

我听过一句话“一个好朋友告诉你他们喜欢你的衬衫,一个好朋友告诉你在约会前你鼻子上有污垢”(我想是在谢尔曼泻湖

错误是一件大事。他们受伤了,他们让我们思考,他们让我们生气,让我们学习。必威体育下载我们对它们做的一件错误的事情是,在大多数情况下,接受这些负面的肠道反应,并向错误的方向发泄。

这就是我们的连线方式,第一个在闪电风暴后发现燃烧的树枝的洞穴人会把手放进火里,很快发现这是一个坏计划。然后他很可能告诉其他人(他喜欢的人)不要这样做。他可能还考虑过用这把火来对付那些他不喜欢的人——可悲的是,这已经足够我们作为人类所擅长的了。

犯错误会让我们感到不充分和不安——我们作为进化之冠失败了,应该比这更好。它们也让我们感到保护——我们不想承认我们犯了错误,因为那样会让我们在别人眼中显得软弱或愚蠢。这本身就是一个错误,因为我们全部的容易犯错,做傻事总是.

举个例子:当我第一次分开的清单文章被贴出来了——多年来一直是该网站的粉丝。文章javascript图像替换引起了彼得·保罗·科赫的强烈反对,恰当地命名为什么?阿拉尔's'javascript image replacement'糟透了.

我崩溃了。PPK他是我所仰望的人,他的帖子指责我窃取了他的想法和代码(我们在邮件列表上解决了这个谜语,用时间戳证明了我确实没有做到),他的批评部分是正确的,但在其他部分则过于热情。

我受伤了,我很困惑,很生气。我并没有抱怨地打包或回击,而是查看了我的代码并解决了问题。PPK谈论。我也开始和他更紧密地沟通,这开始了很长一段时间,伟大的讨论和信息和联系人的分享。

我的错误让我成长了很多,之间没有什么不愉快的感觉PPK我——我将是他今年晚些时候组织的会议上的专家之一。

简而言之——犯错误,被调用并修复它使我成为一个更好的开发人员。这让我感到羞愧,也让我意识到与他人合作(即使只是为了快速检查一下自己的健康状况)比我自己更有效。

这可以应用于产品:而不是庆祝成功,我们应该庆祝已经引起我们注意的问题。bug是一个分析导致它修复的原因的机会。

这是真正的机会——我们必须学会不要做傻事。必威体育下载我们应该花些时间来了解错误的来源,而不是气喘吁吁,或者最坏的情况是采取“止损解决方案”或者“快速解决方案”。是什么导致的?它有什么影响,并记录修复它的方法。有数以百万计的“最佳实践”教程和示例,但没有多少“以下是我们如何修复导致这一和那一问题的讨厌的bug”文章。

原因是内疚和害怕显得软弱和容易出错。好,我个人认为,由于你确实犯了错误,实际上使你变得坚强。同样地,欣赏竞争对手的出色表现,比仅仅是胡扯自己的所作所为,表现得好像别人做不了什么,让你更可信,也是。

我很肯定,如果我们设法改变发展文化,把错误看作是积极的,我们将向前迈出一大步。一个指出明显缺陷的人不是告密者,也不是“不发信息”,而是一个你必须感谢的人,他提供了一个机会来真正改进我们的工作,并学会下次不要做错事情。必威体育下载

错误是好啊-它们确实发生了。