什么是“对用户友好”

当我提到一个工具“对用户不友好”(user-unfriendly)的时候,我总是被人“鄙视”。难道这就叫“以其人之道还治其人之身”?想当年有人对我抱怨 Linux 或者 TeX 对用户不友好的时候,我貌似也差不多的态度吧。现在当我指出 TeX 的各种缺点,提出新的解决方案的时候,往往会有美国同学眼角一抬,说:“菜鸟们抱怨工具不好用,那是因为他们不会用。LaTeX 是‘所想即所得’,所以不像 Word 之类的上手。”

殊不知他面前这个“菜鸟”,其实早已把 TeX 的配置搞得滚瓜烂熟,把 TeXbook 翻来覆去看了两遍,”double bend” 的习题都全部完成,可以用 TeX 的语言来写宏包。而他被叫做“菜鸟”,这是一个非常有趣的问题。所以现在抛开个人感情不谈,我们来探讨一下这种“鄙视”现象产生的原因,以及什么叫做“对用户友好”。

查看

linux 配置smb文件共享

vi /etc/samba/smb.conf

[D]
path = /mnt/d
comment = Home Directories
browseable = yes
writable = yes
valid users = root
[E]
path = /mnt/e
comment = Home Directories
browseable = yes
writable = yes
valid users = root

[F]
path = /mnt/f
comment = Home Directories
browseable = yes
writable = yes
valid users = root

SQL,NoSQL 以及数据库的实质

在之前的一些博文里(比如这篇),我多次提到关系式数据库和 SQL 的缺陷。我觉得它们是制造了问题又自己来解决,而且没有解决好。现在有了点时间,我就把这里面的细节稍微说一下,希望有一定的启发作用。

描述性语言的局限性

当我指出 SQL 的问题时,总是避免不了有人反驳说:“SQL 是描述性的语言。你只告诉它 What,而不是告诉它 How。”我发现总是有人对一些我多年前就听腻了,看透了的“广告词”执迷不悟,而现在这同样的事又发生在 SQL 身上。他们没有发现,我不但能实现 SQL,而且已经实现过比 SQL 强大很多的语言(逻辑式语言),所以我其实早已看透了所有这些语言的实质,我知道那些广告词在很大程度上是误导。

现在我就来分析一下 SQL 与逻辑式语言之间的关系,并且找出这类“描述性语言”共同的弱点。

查看

mysql group_concat函数

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文档。
语法:

GROUP_CONCAT([DISTINCT] expr [,expr …] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name …]] [SEPARATOR str_val])
1.例如:

SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

+————+———+
| student_id | courses |
+————+———+
| 2 | 3,4,5 |
+————+———+
这 就不需要用php循环了

查看

PHP获取当前时间(年,月,日,小时,分,秒)

date
(PHP 3, PHP 4 )

date — 格式化一个本地时间/日期
说明
string date ( string format [, int timestamp])

返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。

注: 有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范围符合 32 位有符号整数的最小值和最大值)。在 Windows 系统中此范围限制为从 1970 年 1 月 1 日到 2038 年 1 月 19 日。

查看

MySQL 外键约束

当然你可以在逻辑中确保数据的关联性,但是要考虑并发、孤儿数据等等问题。现在数据库可以搞定这些,为何不试试呢。

注意:
1、必须使用InnoDB引擎;
2、外键必须建立索引(INDEX);
3、外键绑定关系这里使用了“ ON DELETE CASCADE”,意思是如果外键对应数据被删除,将关联数据完全删除,更多信息请参考MySQL手册中关于InnoDB的文档;
4、在引用表中,必须有一个索引,
外键列以同样的顺序被列在其中作为第一列。
这样一个索引如果不存在,它必须在引用表里被自动创建。
5、在引用表中,必须有一个索引,被引用的列以同样的顺序被列在其中作为第一列。
6、不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中,这是因为对这些列的索引必须总是包含一个前缀长度。
7、如果CONSTRAINT symbol被给出,它在数据库里必须是唯一的。如果它没有被给出,InnoDB自动创建这个名字。

查看

mysql 语句case when

表的创建

CREATE TABLE lee (
id int(10) NOT NULL AUTO_INCREMENT,
name char(20) DEFAULT NULL,
birthday datetime DEFAULT NULL,
PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8
数据插入:

insert into lee(name,birthday) values (‘sam’,’1990-01-01’);

insert into lee(name,birthday) values (‘lee’,’1980-01-01’);

insert into lee(name,birthday) values (‘john’,’1985-01-01’);
使用case when语句

查看

linux 挂载目录

从linux内核2.4.0以后mount支持mount –bind 一个目录到另外一个目录
可以用于ftp等服务的配置

比如:
[root@localhost wind]# mkdir test1 test2 dir3
mount –bind test1 test2

把test1挂载到test2,如果test2目录有内容将被遮住(dir2目录的内容一样存在。就好像窗帘把窗户遮住一样。窗户始终存在,只是被遮住而已,等umount了,原来dir2目录的内容就显示出来了)

查看

鄂ICP备14007840号-1