chmod -x chmod的N种解法

chmod -x chmod的N种解法

在SlidesShare.net上有这么一个幻灯片,其说了如下的一个面试题:

如果某天你的Unix/Linux系统上的chomd命令被某人去掉了x属性(执行属性),
那么,你如何恢复呢?

下面是一些答案:

1)重新安装。对于Debian的系统:

sudo apt-get install --reinstall coreutils

2)使用语言级的chmod

  • Perl:perl-e ‘chmod 0755, “/bin/chmod”‘
  • Python:python -c “import os;os.chmod(‘/bin/chmod’, 0755)”
  • Node.js:require(“fs”).chmodSync(“/bin/chmod”, 0755);
  • C程序:
#include <sys/types.h>
#include<sys/stat.h>
void main()
{
chmod("/bin/chmod", 0000755);
}

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 4.83 )
Loading...
Go语言的”Issue 9″ Closed!

Go语言的”Issue 9″ Closed!

还记得Google发布Go语言没几天就要 更名Issue 9 的那个事吗?那是2009年11月的事了,差不多一年了,今天Google的Go语言团队终于正式回复这个bug了。

Comment 1097 by project member rsc@golang.org, Today (11 hours ago)

The naming similarity is unfortunate. However, there are many computing
products and services named Go. In the 11 months since our release, there
has been minimal confusion of the two languages, so we are closing this
issue.

“名命类似是很不幸的。然而,那有很多的计算机产品和服务都叫Go。自从我们发布Go语言的这11个月里,这两个语言只有极少的混乱,所以,我们决定关闭这个问题。”

目前,该bug的状态为Unfortunate,这个状态很有创造性啊,在我的这么多年软件开发过程中,我还没有在任何的bug管理系统中见过这种状态,嗯,要不我也给我们公司的Defect Tracking System加上一个这种状态?

好烂啊有点差凑合看看还不错很精彩 (2 人打了分,平均分: 5.00 )
Loading...
主流文本编辑器学习曲线

主流文本编辑器学习曲线

下图是几个经典的文本编辑器的学习曲线,不排除其中有调侃和幽默的味道。

主流编辑器学习曲线图

注1Pico(PIne COmposer)是Unix操作系统中最常见的三种文字处理软件之一,具有文字编辑、搜索、拼写检查、文件浏览和段对齐功能,适合高效地编辑短小的文件。Pico是由华盛顿大学开发的免费软件,随着pine电子邮件处理软件发布。它是在Emacs的基础上以pine的邮件编辑为目标而开发的,所以其指令集是Emacs的子集,但是由于在界面上有提示快捷键,相对于vi和Emacs来说更加容易使用。由于Pico虽然是免费软件,但是它并不是开源软件,所以很多Linux版本并不包含Pico。这些版本通常提供一个界面类似的开源软件nano——Pico的克隆版。

注2:图中的纵横坐标没有标明。我所理解的是——X轴是熟练程度,Y轴是技能。于是对于notepad 来说,技能和熟练程度呈正比。对于VS来说,熟练程度越大,所需要技能先是越来越多,而随着熟练程度的增长,你需要的技能也越少。而对于VI来说,一开始就需要相当大的技能,但一旦掌握这些技能,则你将会越来越熟练。而对于emacs来说,技能和熟练程度是呈旋涡状。

好烂啊有点差凑合看看还不错很精彩 (16 人打了分,平均分: 4.63 )
Loading...
Javascript向量图Lib–Raphaël

Javascript向量图Lib–Raphaël

我们知道很多的Javascript的lib库了,比如:jQuery,YUI,Ext JS等等。今天看到一个很牛X的lib叫Raphaël [ˈrafēəl],这是一个很小的JavaScript library,可以让在你的Web上整一些向量图,并且可以完成一些动画和图形变化,很强大。

Raphaël使用的是  W3C 推荐的 SVG和VML 来创建图片。这意味着所创建的图形对象一样可以是一个DOM对象,可以被你的Javascript的事件来操作。Raphaël 支持所有的主流浏览器:Firefox 3.0+, Safari 3.0+, Chrome 5.0+, Opera 9.5+ d 和 Internet Explorer 6.0+,最强大的是,这个js文件被压缩后也就60K。

下面,让我们来看几个示例:

下面是一个图形变化的示例,点击两个图形间的箭头。

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (10 人打了分,平均分: 4.90 )
Loading...
编程语言进化

编程语言进化

以前本站发布过《编程语言时间地理图》、《计算机编程简史图》,下面是两张关于编程语言的进化图。

第一张是比较宏观的,来源在这里,虽然是去年的,但还是比较不错的,其把计算机编程语言分成了五个时代——

  • 语言诞生。1940年代。第一个语言应该是:Ada Lovelace,
  • 编译器时代。1950年代。这个时代的代表语言是:Fortran, LISP, 和 COBOL,编程语言开始引入编译器优化技术。
  • 模式时代。1960年代-1970年代。这个时代是编程语言最重大的变革。在这个时代,所有人都在思考如何让设计一个好的编程语言以让编程更简单。面向对象也因为Simula而出现,而Smalltalk成了第一个纯动态类型的语言,C/C++、Pascal和SQL也是这个时代出现的,而第一个功能性/函数式语言ML也是这个时代出现的。所以说,这个时代是一个百花齐放的时代。而1980年代并没有太多的创新的东西,而只是对70年代出现的那些语言优化和发展的时期,如:1979年发明的C++语言。
  • 生产力时代。1990年代以来主要是如何增进编程生产率的时代,这个时代出现了很多framework,代码库,以及快速开发的IDE,很多公司都在这个时期致力于这些增进生率的工作,如:delphi, power builder, MFC,boost等等。但最重要的还是因为引入了虚拟机——WORA(Write Once, Run Anywhere),JVM 是这方面的代表作。之后的.NET整出来的那些东西都是。今天的JPython, JRuby等都是为整合开发效率和维护效率。参看《基于JVM的语言正在开始流行
  • 后现代。未来的编程语言要走向何方,我不太清楚,不过,大家可以看看本站的这几篇文章:《五个编程语言设计的失误》、《C++和JAVA传统中积极的一面

下面是一张大图,让你看看整个编程语言的进代图。(点击看大图)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (6 人打了分,平均分: 4.83 )
Loading...
Google未公开API:转MAC地址为经纬度

Google未公开API:转MAC地址为经纬度

这里有一个POC(Proof of Concept)可以通过你Web浏览器后面的路由器XSS攻击得到一个准确的GPS坐标。注意:路由器和Web浏览器以及IP地址并不包含任和地理信息。其方法是使用了一个Google未公开的API。大约方法如下:

  1. 访问一个网页,这个网页隐藏了一个基于你WiFi路由器的XSS( 参见: XSS  Verizon FiOS router
  2. 通过这个XSS 可以获得路由器的MAC 地址。
  3. 然后通过 Google Location Services我们可以把这个MAC地址映射到GPS坐标。Googel的这个服务是基于HTTP的服务。这并不是一个Google正式发布的API,而是通过 Firefox’s Location-Aware Browsing 发现的。

演示地点在这里:http://samy.pl/mapxss/

我试了一下,无论无线和有线都可以准确定位我的位置。很强大,你也试试看。

好烂啊有点差凑合看看还不错很精彩 (4 人打了分,平均分: 5.00 )
Loading...
Kick Ass小游戏

Kick Ass小游戏

还记得以前那个在IE的已打开的网页上的网址里输入一段javascript的代码后,你会发现这个页面里所有的图片元素都动了起来:(只能在IE浏览器里,Chrome和Firefox无效)

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position=’absolute’; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval(‘A()’,5); void(0);

很类似一个叫Erik Rothoff Andersson的人又搞了Kick Ass的游戏,代码如下:(用了一个js文件,所以就显得没有那么复杂了,但只能在Chrome和Firefox下有用)

javascript:var s=document.createElement(‘script’); s.type=’text/javascript’;document.body.appendChild(s); s.src=’http://erkie.github.com/asteroids.min.js’;void(0);

在已打开的网页上输入这段代码,你会发现网页的左上角上出现了一个三角形,然后,你可以开始使用

  • “左右方向键控制方向”,
  • “上方向键控制前进”,
  • “空格射击”,
  • “B键查看有什么东西可以被射击”,
  • “Esc键退出”,

于是就出现好玩的东西了。

为了方便你试验,你可以点击上面的这个链接,

Kiss Ass

你可以把这个链接加入收藏夹,当你需要删除某些网页上的广告或是很让你不爽的东西时,打开这个网址,就可以开始了。

(全文完)

好烂啊有点差凑合看看还不错很精彩 (13 人打了分,平均分: 4.92 )
Loading...
面向对象是个骗局?!

面向对象是个骗局?!

今天在网上看到网页叫“Object Orientation Isa Hoax”——面向对象是一个骗局,标题很有煽动性(注:该网站上还有一个网页叫Object Orientation Is Dead),好吧,打开看看上面有些 什么,发现这个网页是在收集一些关于“面向对象的反动言论”,没想到的是,很多言论出自很多大师之口。比如:Alexander Stepanov和Bjarne Stroustrup。这些言论挺有意思的,所以,我摘两段在下面:

第一段是Alexander Stepanov的(不要告诉我你不知道这个人,STL之父,关于他的故事,可以到这里看看)。他N年前作过一段采访,原文在这里(我非常建议大家去读一下这篇采访,相当过瘾),译文在这里(不过有地方把原意都译反了,我重译了一下),其中有一个问答被上述的那个面向对象反动言论的网页收录了:

Alexander Stepanov

Question:
I think STL and Generic Programming mark a definite departure from the common C++ programming style, which I find is almost completely derived from SmallTalk. Do you agree?

提问
我认为STL和泛型编程标志着非同一般的C++编程风格,而一般C++风格几乎完全是从SmallTalk派生过来的。你同意吗?

Answer:
Yes. STL is not object oriented. I think that object orientedness is almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work: Bill Gosper’s Hakmem is one of the best things for a programmer to read. AI might not have had a serious foundation, but it produced Gosper and Stallman (Emacs), Moses (Macsyma) and Sussman (Scheme, together with Guy Steele). I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras – families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting – saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms – you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work.

回答:
是的。STL不是面向对象的。我认为面向对象和人工智能差不多,都是个骗局。我至今仍然没有从那些OO编程的人那里看到一丁点有意思的代码。从某种意义上来说,我这么说对人工智能(AI)并不公平:因为我听说过很多MIT(麻省理工大) AI实验室里一帮人搞出来的东西,而且他们的确直正干了一些基础性的工作:Bill Gosper的Hakmem是程序员最好的读物之一。AI或许没有一个实实在在的基础,但它造就了Gosper和Stallman(Emacs), Moses(Macsyma)和Sussman(Scheme, 和Guy Steele一起)。

  • 我发现OOP在技术上是荒谬的,它企图把事物按照不同单个类型的接口来解构,为了处理实际问题,你需要多种代数方法——横跨多种类型的接口族;
  • 我发现OOP在哲学上是荒谬的,它声称一切都是对象。即使这是真的也不是很有趣——因为说一切都是对象跟什么都没说一样;
  • 我发现OOP的方法论是错误的,它从类开始,就好像数学应该从从公理开始一样。其实你不会是从公理开始的,而是从证明开始。直到你找到了一大堆相关证据后你才能归纳出公理,然后以公理结束。在程序设计方面存在着同样的事实:你要从有趣的算法开始。只有很好地理解了算法,你才有可能提炼出接口以让其工作。

<———>

下面,我们再来看C++的发明者Bjarne Stroustrup,在1998年IEEE采访时的一段话(全篇见这里),下面是其中的几段话:(我的翻译如下)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (28 人打了分,平均分: 4.57 )
Loading...