2009年5月14日星期四
google排名优化圣经 notes
下面是自己最喜欢的:
a:在你注册域名之前,你就应该记录下你的想法,应该准备足够100个网页的内容。请注意是至少。这100个网页应该是真正的内容,而不是链接页,关于我们页,联系我们或者版权声明等等杂七杂八的网页。
c:一个指标是文字内容的比重应该大于HTML格式的比重。整个网页应该规范化,应该在所有的浏览器上显示正常。比如使它符合HTML3.2标准。搜索引擎蜘蛛还并不太喜欢HTML4.0标准。
速度不是最重要的因素之一,而是唯一的重要因素。你的网页应该非常快速,如果你的网页会延时3,4秒钟,你就完蛋了。当然如果你的主机和访客在不同的国家, 3,4秒钟还有情可原,对当地的访客来说,3到4秒钟的下载时间已经是极限了。超过这个时间,每多一秒钟,你就会丧失10%的流量。而这10%的流量可能正是成功与失败的分野。
d:越小越好,最好保持在15K以下。越小越好,最好保持在12K以下。越小越好,你最好保持在10K以下。你明白了我的意思了吧。比5K大,小于10K,这是最好的。很难做到,但是却是最有效的。对搜索引擎也有效,对访客也有效。
e:每天建一页两百到五百字的网页。如果你不知道该写些什么的话,做点关键词调查,然后根据你所得到的热门关键词写文章。
f:简单老式的SEO,在这些地方用一次你的关键词:网页标题,说明标签,正文标题,网址URL,黑体,斜体,网页的最开始。关键词密度介于5%到20%之间 (也别太在意)。写出好的文章,并且检查错字。拼写检查(对中文来说,检查错字)正在变得越来越重要。因为搜索引擎已经开始运用自动纠错功能,所以已经没有可以写错别字的借口了。
h:你要的不是使其他网页黯然失色的一个全明星网页,你需要的是50个每天吸引一个访客的网页,而不是一个每天吸引50个访客的网页。如果你发现你的网站里面有一页,确实是吸引大部分流量的页,那么你就应该把这一页的PR值通过交叉链接,分散到其他网页上。这有一点像老话说的分享财富。
i:观察来自搜索引擎的蜘蛛们,确保蜘蛛在爬行你的整个网站。如果不是的话,你应该检查你的所有链接系统,确保蜘蛛能发现你整个的网站。如果搜索引擎需要两次才能检索完你的网站,你也不要害怕。对很多搜索引擎来说,可能需要六个月才能发现和爬行你的网站。
t:每天增加一个网页
回到关键词研究,找出好的点子,写新的网页
z:这一点已经重复好几次了,Google喜欢内容,大量的高质量的内容。以一系列关键词为基础的广泛的内容。在经过一年以后,你应该已经有了400页左右高质量的内容。这些内容应该使你的网站在很广泛的关键词里面得到好的排名。
2009年5月12日星期二
程序员简历的一些建议
简历A
1:3年以上的 ASP.Net application开发经验
2:熟悉ASP.Net web开发
3:熟悉 VB.Net和/或 C#
4:熟悉 Microsoft SQL Server
5:了解 web servers, application servers (Tomcat or WebLogic), SOAP, WebServices, 互联网安全, XML
6:有大型网络架构的设计和开发经验,使用有标准的技术如 XML, J2EE 和.NET
这篇文章认为这个不是个好主意,
他们看中什么样的简历呢
是这样的
简历B
1:熟悉web开发的流程
2:有微软.net平台的开发经验
3:精通关系数据库如SQL Server
4:有实现大型Internet架构的实现经验。
5:了解基于标准的网络技术如 XML, SOAP等等
为什么后者要好一些呢?
A中的1,2,3已经说明了你是用.net来做web开发的,所以改为B1就可以了
A3也说明你使用过很多.net上的开发语言,所以还不如不列出来,直接说B2就可以了,你一种语言都不提到,读到你的简历自然会认为你大概那些语言都会。
A5是不必要的,因为有web开发经验的自然会具备A5的条件。
A6中说得有点混乱.net和j2EE实际上是大公司的产品,确切的说不能算是标准,而且既然前面你提到熟悉.net领域,j2EE可以不用提了。
从一份简历大概也可以看出来应聘者头脑是否清晰,大致可以了解程序员的水准了。
2009年5月10日星期日
为什么不要免费提供服务
Jerry Kaplan:创业者犯的5个错误
1) 没有清晰的目标和使命
2) 试图证明他们是聪明的
3) 为钱创业
4) 雇佣他们喜欢的人而不是他们需要的人
5) 不知道什么情况下放弃
http://ecorner.stanford.edu/authorMaterialInfo.html?mid=364
2009年5月9日星期六
利用 a 标签的 DOM 属性解析 URL 字符串(javascript)
function parseURL(url) {
var a = document.createElement('a');
a.href = url;
return {
source: url,
protocol: a.protocol.replace(':',''),
host: a.hostname,
port: a.port,
query: a.search,
params: (function(){
var ret = {},
seg = a.search.replace(/^\?/,'').split('&'),
len = seg.length, i = 0, s;
for (;i<len;i++) {
if (!seg[i]) { continue; }
s = seg[i].split('=');
ret[s[0]] = s[1];
}
return ret;
})(),
file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
hash: a.hash.replace('#',''),
path: a.pathname.replace(/^([^\/])/,'/$1'),
relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
segments: a.pathname.replace(/^\//,'').split('/')
};
}
jQuery mp3 播放插件
- 在你的web页面播放控制mp3文件
- 用html+css就可以创建自己的mp3 播放器风格
- 在你的jquery项目中加入声音效果
$(document).ready(function(){$("#jquery_jplayer").jPlayer({ // 初始化ready: function () { // 载入后执行$("#jquery_jplayer").changeAndPlay('elvis.mp3'); // 自动播放mp3文件}});$("#jquery_jplayer").jPlayerId("play", "play_button"); // 设置播放按钮$("#jquery_jplayer").jPlayerId("pause", "pause_button"); //设置暂停按钮$("#jquery_jplayer").jPlayerId("stop", "stop_button"); //设置停止按钮$("#jquery_jplayer").onSoundComplete( function() { // 播放结束后执行代码$("#jquery_jplayer").play(); // 重新播放});});播放 暂停 停止
javascript的一些小技巧
var list = [1,2,3,4,5,6,7,8,9];
list = list.sort(function() Math.random() > 0.5 ? 1 : -1);
Print(list); //可以得到类似下面的结果: 4,3,1,2,9,5,6,7,8
2:从数组中移除一个对象
function RemoveArrayElement( array, element ) !!let (pos=array.lastIndexOf(element)) pos != -1 && array.splice(pos, 1);
3:把浮点数转换为数值
(123.345456).toFixed(); // is: 123
typeof (1.5).toFixed(); // is: string
4:返回一个对象属性的个数
({ foo:55, bar:99 }).__count__ // is: 2
5:检查一个对象是否为空
javascript 1.5下:
function isNotEmpty(obj) {
for ( var tmp in obj )
return true
}
javascript 1.8下:
function isNotEmpty(obj) obj.__count__;
6:单件模式
function MySingletonClass() {
if ( arguments.callee._singletonInstance )
return arguments.callee._singletonInstance;
arguments.callee._singletonInstance = this;
this.Foo = function() {
// ...
}
}
var a = new MySingletonClass()
var b = MySingletonClass()
Print( a === b ); // prints: true
2009年5月8日星期五
2009年5月7日星期四
创业前要弄清楚的十件事
2. Are you really an entrepreneur?
3. Does your venture involve something you understand really well?
4. Can your mother understand the value proposition?
5. Can you see the right wave?
6. What does your startup want to be when it grows up?
7. Starting a company is hard and uncertain.
8. Get a partner or fly solo?
9. Would you refuse a well-paying job to do this?
10. Can you raise appropriate financing?
社群的智慧,摸象记
不过,盲人摸象这个故事如果从另外一个角度的话,反而有大大的智慧在。
举一个简单的例子,如果你有一罐子硬币,找一百个人,让他们猜里面有多少个,他们中的人很大部分是答错的,但是把他们的结果汇总一下,找出最中间的数字,这个数字基本上和瓶子中的硬币数量是一致的。
这就是社群的智慧。google的搜索结果排名算法以及BT的下载原理都用到了社群的智慧,这些伟大的产品大大便利了我们的生活。
社群并不是总是能产生智慧的,乌合之众也大量存在。一篇文章谈到,要实现社群的智慧,有一些条件是必须的:
第一:你的问题要足够简单,不要让别人想很久。比如猜硬币的个数。
第二:结果可以汇总。
第三:参与者最好各式各样,这样保证他们的角度不会太相似。你也可以得到好的均衡结果。
第四:参与者是自私的,各自盘算。这一条估计是从古典经济学来的。
参考:The Wisdom of Community
《群众的智慧》
2009年5月4日星期一
Reddit的筛选排名算法
Reddit:
定义
t = (t1 - epoch)
两个时间 A 和 B,其中,t1 为某篇文章的具体发布时间,精确到秒;epoch 为一个固定的时间常量,2005-12-8 7:46:43。则可以计算得到 t1 和epoch 间隔的秒数t,
定义x为某文章得到支持票数减去得到的否定票数
然后定义y为,
- 1如果支持票数大于否定票数 ,
- -1 如果支持票数小于否定票数,
- 0两者的数目相等.
现在定义:
z = max({x,1})
然后我们就得到了排名
ranking = C log10(z) + yt1
这里C是一个常量 (C = 45000).
1)时间点 epoch,2005-12-8 7:46:43,是一个固定的值,猜测应该是 Reddit 的上线时间。t 反映了文章的新鲜程度。引入 epoch 是一个非常优雅的技巧,它使得新鲜度的度量可以独立于系统当前时间。
2)y 表示支持数和否定数之间的相对关系。被否定多的文章得负分,这是合乎常理的。
3)45000 代表的是一个 12.5 小时周期内的总秒数。它 与 yt 一起使用,随着时间的推移,新文章的得分会逐渐超越高投票数的老文章,从而实现自动更新的效果。
4)log10 的使用是另外一个技巧,它可以使得早期的投票获得更大的权重。比如,前 10 票获得的权重,与 11 到 101 票所获得的权重是一样的。
整个公式的效果可以简单解释为:在 00:00:00 发布的一个帖子 a,如果它想在 12.5 小时之后,能够取得与在 12:30:00 发布的帖子 b 同样的得分,则必须在 00:00:00 点到 12:30:00 这段时间内,把它的得票数扩大 10 倍。注:这个解释不精确,但容易理解一些,不然写着太绕。
不过,其中 45000 与 log10 的选择不是通用的,得根据自己网站实际的情况进行修正。这是一个 trial-and-error 的过程,也是作算法的人最头大的部分。
Hacker News的筛选算法
(p - 1) / (t + 2)^1.5
其中,
1)p 表示文章得到的投票数,之所以要使用 (p - 1),应该是想去掉文章提交者的那一票。
2)(t + 2)^1.5, 这个是时间因子。t 表示当前时间与文章提交时间间隔的小时数。
2009年5月2日星期六
用yql查出hacker news 最热门的新闻
select * from html where url="http://news.ycombinator.com/" and xpath='//tr/td/a[substring(@href,1,4)="http"][@href!="http://ycombinator.com"]' 你可以在这里测试一下(需要登录):2009年4月29日星期三
用jquery来避免写onclick方法
为了保持代码与html代码分离,保持HTML的干净,使用jquery可以轻松地绑定事件,甚至你可以不知道“事件”这个名词。
$(document).ready(
function(){
$("#mybtn").click(
function(){
alert("i am clicked!");
}
);
$("#myfrm").submit(myfunc);
}
);
jquery的机制 博客笔记
jquery有两个简单的流程
1)查找(创建)jQuery对象:$(”selector”);
2)调用jQuery对象的方法完成我们需要完成的工作:$(”selector”).doOurWork();
这两个步骤是jQuery的编码逻辑核心!
强悍的dom元素查找能力,以及随心所欲的方法扩展,这两点正是jQuery的核心所在!
1) 问:为什么$(selector)之后,返回的是jQuery对象?
答:从jQuery的源代码中,我们可以知道:var $ = jQuery.因此当我们$(selector)操作时,其实就是jQuery(selector),创建的是一个jQuery对象.当然正确的写法应该 是这样的:var jq = new $(selector);而jQuery使用了一个小技巧在外部避免了new,在jquery方法内部:if ( window == this ) return new jQuery(selector);
2) 问:为什么创建一个jQuery对象之后,我们可以这样写$(selector).each(function(index){…});进行遍历操作呢?
答:其实jQuery(selector)方法调用时,在jQuery(selector)方法内部,最后返回的是一个数组:return this.setArray(a);而each方法体内部是一个for循环,在循环体内是这样调用的:method.call(this[i],i).
3) 问:为什么jQuery能做到jQuery对象属性/方法/事件的插件式扩展?
答:如果您有一些javasciprt的面向对象方面的知识,就会知道,jQuery.prototype原型对象上的扩展属性/方法和事件,将会给 jQuery的对象\”扩展”.基于这一点,jQuery是这样写的:jQuery.fn = jQuery.prototype.
综上所述,jQuery给我们带来了一个简洁方便的编码模型
(1>创建jQuery对象;
2>直接使用jQuery对象的属性/方法/事件),一个强悍的dom元素查找器($),插件式编程接口(jQuery.fn),以及插件初始化的”配置”对象思想.
2009年4月26日星期日
写一个wordpress插件(1)
/*如果没有这些注释代码,wordpress不会理你的,
Plugin Name: Bot Counter
Plugin URI: http://ditio.net/bot-plugin
Description: Plugin is counting bots visits
Author: Greg
Version: 1.0
Author URI: http://ditio.net
*/
你的插件不会再后台的目录中出现,你也没有办法激活它。
我看了一下,wp是调用的wp-admin/includes/plugin.php中的get_plugin_data()
函数来将这些信息存储在一个数组里面的,
preg_match( '|Plugin Name:(.*)$|mi', $plugin_data, $name );然后在后台的插件查看页做一个列表出来。
preg_match( '|Plugin URI:(.*)$|mi', $plugin_data, $uri );
preg_match( '|Version:(.*)|i', $plugin_data, $version );
preg_match( '|Description:(.*)$|mi', $plugin_data, $description );
preg_match( '|Author:(.*)$|mi', $plugin_data, $author_name );
preg_match( '|Author URI:(.*)$|mi', $plugin_data, $author_uri );
preg_match( '|Text Domain:(.*)$|mi', $plugin_data, $text_domain );
preg_match( '|Domain Path:(.*)$|mi', $plugin_data, $domain_path );
2009年4月20日星期一
很帮的软件开发文章
Leon Bambrick,最愚蠢用户界面颁给:Windows 搜索界面:http://www.secretgee
Michael Bean,程序员外包的隐患:http://forio.com/res
Rory Blyth,把 Excel 当数据库用:http://www.neopoleon
Adam Bosworth,ICSOC04 讲座:http://www.adamboswo
Danah Boyd,自闭的社会软件:http://www.danah.org
Raymond Chen,为何不禁用依赖于未公开机制的应用程序:http://blogs.msdn.co
Kevin Cheng & Tom Chi,踢骆驼:http://www.ok-cancel
Cory Doctorow,从 WIPO 中拯救加拿大的 Internet:http://www.boingboin
ea_spouse,EA:关于员工的故事:http://www.livejourn
Bruce Eckel,强类型与强测试:http://www.mindview.
Paul Ford,Processing Processing:http://www.ftrain.co
Paul Graham,伟大的黑客:http://paulgraham.co
John Gruber,地址栏就是新的命令行:http://daringfirebal
Gregor Hohpe,星巴克不使用两阶段提交:http://www.eaipatter
Ron Jeffries,激情:http://www.xprogramm
Eric Johnson,C++——被遗忘的特洛伊木马:http://ejohnson.blog
Eric Lippert,更换一个灯泡需要多少名微软员工:http://blogs.msdn.co
Michael "Rands" Lopp,事情搞砸了怎么办:http://www.randsinre
Larry Osterman,Larry 的软件工程规则之二:用测试指标来衡量测试人员是行不通的:http://blogs.msdn.co
Rick Schaut,Mac Word 6.0:http://blogs.msdn.co
Clay Shirky,群是其自身最大的敌人:http://shirky.com/wr
Clay Shirky,群作为用户:社会软件的结构与设计:http://shirky.com/wr
Eric Sink,填补鸿沟:http://www.ericsink.
Eric Sink,雇佣的风险:http://www.ericsink.
Aaron Swartz,PowerPoint Remix:http://www.aaronsw.c
Why the lucky stiff,与卡通狐狸来趟快速(且希望无痛)的 Ruby 之旅:http://poignantguide
2009年4月14日星期二
2009年4月6日星期一
2009年4月5日星期日
2009年4月3日星期五
2009年3月30日星期一
小东西赚大钱!?
提供这样服务的网站有多少呢,多如牛毛。比如tinyurl,bit.ly,我也做了一个。
2009年3月17日星期二
web架构简史
google该提供一个一键安装到appengine的功能
2009年3月14日星期六
一些即将出版的appengine的书籍
- O'Reilly Programming Google App Engine by Dan Sanderson
- Apress Developing with Google App Engine by Eugene Ciurana
- Wrox Professional Google App Engine Programming by Dana Moore
- Manning Google App Engine in Action by Orr, Gift et al.
2009年3月13日星期五
2009年3月6日星期五
2009年3月5日星期四
[zz]all culture is hacker culture
all culture is hacker culture
On February 27th covering Creativity, Culture
At a tech-business event where I was talking with people about the dynamics of creative groups, a fellow offered that we are becoming a hacker culture, meaning that young people are prone to alter or repurpose software and devices to their liking, to evade DRM and copy protection and generally make things work the way they like.
He’s right– but this isn’t new at all. Sociologist Claude Levi-Strauss spoke about the concept of bricolage, which is usually translated as tinkering or using what’s available to create a new thing. Hacking, in other words. Levi-Strauss posed this as a basic process in the creation of culture.
I recently got to converse with Keith Shocklee and Hank Shocklee, the “Bomb Squad” producers of Public Enemy and so many others. Brilliant guys, generously open and very relaxed about all their accomplishments (and very tolerant about talking with someone who is not remotely cool enough to talk with them — me). Keith thinks that one force that created hip-hop was the removal of music programs from public schools — kids who were enthralled by music and wanted to make music didn’t know how to play instruments, so they invented new ways of doing it using tape decks and turntables. The hip-hop methods of production and orchestration involved repurposeing samples and bits of sound from elsewhere — and also repurposing tools to accomplish this. Hacking on two levels, in other words.
“Hacker” is just a new word for a person using basic form of creativity: sometimes devious or transgressive, it’s using an old thing in a new way, or finding a way around an obstacle. Sometimes a hack is destructive and inelegant, like using a violin as a hammer. Sometimes it’s ingenious and opens the door to a whole new thing.
原帖地址:http://workingthrough.com/blog/291-all-culture-is-hacker-culture
2009年2月27日星期五
2009年2月23日星期一
2009年2月18日星期三
钱是怎么花的?
Facebook ID
Zuckerberg 说:“你的Facebook ID将是你进入数码世界的通道,建立一个世界的平台,在这里你只需要敲出某人的名字,你就可以跟他交谈,创建这样的系统是有价值的”。








