• 第欧根尼故事

    第欧根尼和亚历山大

    亚历山大托人传话给第欧根尼,想让他去马其顿接受召见。第欧根尼回信说:“若是马其顿国王有意与我结识,那就让他过来吧。因为我总觉得,马其顿到雅典的路程并不比雅典到马其顿的路程远。”

    一天,第欧根尼在晒太阳,亚历山大过来对他说:“我有可以为你效劳的吗?” 第欧根尼躺在酒桶里伸着懒腰说:“有,请不要挡住我的阳光。”

    亚历山大问第欧根尼:“你不怕我吗?” 第欧根尼反问道:“你是什么东西,好东西还是坏东西?” 亚历山大回答:“好东西。” 第欧根尼说:“又有谁会害怕好东西呢?”

    征服过那么多国家与民族的亚历山大,却无法征服第欧根尼,以至于他感叹:“我如果不是亚历山大,我愿意做第欧根尼。”

    第欧根尼和柏拉图

    第欧根尼到柏拉图家作客,踩着地毯说:“我踩在了柏拉图的虚荣心上。”

    有人指责第欧根尼乞讨的行为,他借用《奥德修》中的句子回答,柏拉图讨东西时“深深地埋下头,以致无人能够听见”。

    柏拉图把人定义为双足无毛动物,他就把一只鸡的羽毛拔光,拎到讲座上说:“这就是柏拉图所说的人。”

    Tags: 

  • MongoDB数据库操作

    MongoDB

    MongoDB 是最流行的 NoSQL 数据库, 也是几百种数据库中最流行使用的数据库,之一,O__O"… 虽然官网和其他处都说 MongoDB 是文档 (document) 数据库, 但 me 赶脚“对象数据库”的名字更合适。 JSON 最初只是 JavaScript 中表示对象的一种格式,比如 {"name": "ant", "age":20} ,后来就演变成了一种数据传输格式, 在 MongoDB 中其更是一种数据存储格式(大有取代 xml 的形势)。 官网关于 MongoDB 数据存储格式的说法是 BSON, 也就是 JSON 的一种二进制表示形式。

    关系型数据库是 database ==> table ==> row ,对应的 MongoDB 是 database ==> collection ==> document 。一个文档 document 就是一个对象, 包括多个 key-value 对, 而 value 不限于字符串 "hello" 、 数字 42 、日期 Date, 还可以是对象 {"first_name": "li", "seconde_name" : "zhang"}, 也可以是数组 ["cat", "dog"] 等。

    Tags: 

  • jQuery使用

    jQuery

    jQuery 的一个主要用途就是控制 DOM, 修改 CSS 。 基本使用方法是: $(".info").css("color", "red"); 前面是选择页面中的一些元素, 后面是调用方法, 修改 css 。jQuery 选择元素的方法和写 css 的时候是类似的, 比如 #anchor 控制的是锚点, .name 控制的类, p 控制的是标签。

    Tags: 

  • V8引擎

    Forums: 

    me 其实不大关心 V8 滴说, 只不过要写 NodeJS 相关的文档, 让 me 不得不去关注一下它, ╮(╯▽╰)╭

    Google Chrome 的特点是神马 ? 简单 、 大方、 优美、 时尚 ? 对最新的 Web 标准支持的好 ? 易于(插件)扩展 ? No ! 它的最大优点就是 —— 快 ! 要想在 Web 端渲染出绚丽的效果, 解析 JavaScript 修改 DOM 渲染 CSS 的操作就不能慢。 V8 正是其中优秀的代表。V8 是 Google Chrome 使用的 JavaScript 引擎, 使用 C++ 写成, 开源,特点就是快 ! 传说快到甚至可以和用 C、 C++ 写的二进制代码相媲美 (可能略有夸张,=_=)。

    V8 实现的是 ECMAScript (ECMA-262 第五版) ,也就是 JavaScript 语言核心 (core) 部分,而通常说的传统的 JavaScript 则还包括其操作 BOM 和 DOM 的 api 。

    V8 可以单独使用, 也可以嵌入到其他的 C++ 程序之中。

  • go语言的排序和搜索

    晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。

    补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了。 go 的排序思路和 c 和 c++ 有些差别。 c 默认是对数组进行排序, c++ 是对一个序列进行排序, go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。

    排序(接口)的三个要素:

    Tags: 

  • IPC-pipe管道通信

    Forums: 

    Linux 的 IPC (进程间通信)方法之一就是 pipe ,也就是管道通信。使用 bash 的人都熟悉管道的用法: $ ls | wc -w 。使用管道连接前后两个进程,前一个进程将结果“写”入管道,后一个进程从管道中“读”出数据。当然 me 们编写程序的时候默认都是从标准输入(fd = 0 或是 stdin) 中读入数据,写入标准输入 (fd = 1 或是 stdout) ,bash 会对标准输入和输出进行重定向,写入和读出均是对应的管道。

    这里说的是管道 pipe api , linux 程序接口,一种特殊的管道实现。使用 pipe 的只能是两个相关联的进程的,一般就是父子进程,它们共享打开的文件描述符 fd ,这样的话一个进程“写”,另外一个进程“读”。

    pipe(fds) 产生的管道是单向的, fds[0] 是“读”的一段, fds[1] 是“写”的一端。一般父子进程各控制一端, 将不使用的一端关闭掉。读的一端,如果没有数据,就会阻塞,直到写的一端传入数据;写的一端写完数据关闭管道,读的一端读完之后就会遇到 EOF 。

  • 可数集合与不可数集合

    Forums: 

    img: 

    集合,set,就是将一些确定的东西放在一起形成的 object,比如 {1 2 3 4 5}、{张三 李四 王五 赵六}。集合中的元素不区分顺序,相同的元素认为是同一个元素。对于 S 中的元素 a,me 们说 a ∈ S (a 属于 S),当然如果 a 不在 S 中,me 们就说 a ∉ S (a 不属于 S)。

    集合中元素的个数,有时候是有限 (finit) 的,有时候不是有限的,比如 {1 2 3 4 5} 这个集合有 5 个元素,{1 2 3 4 5 6 7 8 ..} 自然数集合就不是有限集合。集合的元素的个数,又叫基数;之所以用基数这个说法,是因为对于无限集合来说“个数”是一个太容易引起混淆的词。有限集合的基数即是通常说的个数了,都是自然数,而且它们还可以比较大小,反映集合中元素的多少。对于无限集合肿么比较元素多少呢?O__O"…

  • 猴子分桃

    猴子分桃的故事大体有两种描述:

    描述 1 :五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了个数相等的五堆,多出一只;于是,它吃掉了一个,拿走了一堆。第二只猴子起来一看,只有四堆桃,于是把四堆合在一起,分成相等的五堆,又多出一个;然后,它也吃掉了一个,拿走了一堆。剩下的三只猴子也都是这样分的。问:这堆桃至少有多少个?

    描述 2 :海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

    分析

    程序猿一般这样看问题:总之桃子数目是整数,me 就从 1 开始试,然后分给猴子们,如果可以按题目要求的分法(去掉 1 个然后平均分 5 份,剩下 4 份)分 5 个猴子不就可以了 ? 真是不动脑筋的思考方案呀,尼玛 ! 不过这的确是一种万能的解决方案,对于本题来说,程序也不会运行很久。

    现在从一个非程序猿的角度看问题。这里主要是要捕捉到它们的数量关系。

    Tags: 

  • UNIX介绍

    Forums: 

    UNIX 没有 Linux 名声响,至少对于 me 们这些年轻人来说;but UNIX 是 Linux 的祖宗。

    UNIX 最初是 Bell 实验室的 Ken Thompson 的 idea,后来由他和他的好盆友 Dennis Ritchie 共同用 c 语言进行了重写;Dennis Ritchi 是 c 语言的发明者。在此之前操作系统都是用汇编语言 (assembly) 写,Tompson 和 Ritchie 开创了用高级语言写操作系统的先河。从此 c 和 UNIX 一举成名。

    UNIX 最初由 bell 实验室的一些人开发,后来免费发放给高校一些教育机构,这极大促进了 UNIX 的发展。不过到了后来就形成了两大分支,Bell 实验室中的 System V Release 和加州大学贝克利分校的 BSD。不同的分支添加不同的特性,使得后来的 unix 版本众多,不兼容也成了一个大问题,虽然大体来说它们的体验差不多。

  • 进程间通信 IPC

    Forums: 

    进程间通信 (IPC, Inter-Process Communication),顾名思义,就是进程与进程之间通信的方法或是说机制。在操作系统中,进程,有时候又称是任务 (task) ,它们是一个一个相对独立运行的基本单位,也就是说进程 A 和进程 B 基本没有关系可言,就像一个 task 是计算素数,一个 task 是计算学生的成绩。然而有些进程之间又多多少少的有些可能的关系,比如一个计算素数的 task A ,另外一个输出整数的 task B ,me 们很可能期望 task B 输出 task A 的结果。

    因为 linux 是从 UNIX 发展而来的,所以 linux 上有多种 IPC 方法:

    • 双端管道
    • 命名管道
    • 消息队列
    • 信号量
    • 共享存储
    • 套接字 socket :这是后来网络上的计算机之间进行通信的标准方法;

Pages