读者来信
读者来信
Ruby 和多数据库表
这条消息是写给 LJ“At the Forge”专栏作家 Reuven Lerner 的:我读过 Ruby 入门书籍,也到处查阅资料,但一直没能找到任何能指导你从简单的单数据库表设置,过渡到更实际的东西——一个“设计良好”的数据库——这意味着很多表。我知道这有个正式名称,但我不记得了——基本上,任何地方都没有重复数据,你只有“指针”(ID)遍布各处。
我关心这个问题的原因是我正在尝试做这件事——这个应用程序是一个在线用户帮助系统(这甚至远不足以描述它)。简而言之,我有用户表、用户电子邮件表、其他类型的用户身份识别(可以是一个条目或更多)、用户感兴趣的事物列表(如爱好)、他们上次验证电子邮件地址的时间等等。但是,一旦我超过了单表,我就找不到任何地方的帮助。
请您给我推荐一本关于超越一两个表数据库,进入“真实世界”的书或其他资料。这是一个非营利性爱好的“业余时间”项目。我已经在这上面折腾了十年多了(我从 Perl 开始,但在完成了所有数据库条目并开始处理数据库搜索后,放弃了 Perl)。救命啊!
——
Rusty
Reuven M. Lerner 回复: 很不幸,你说对了。大多数教程(包括我自己的!)都只有一个表,或者最多两个,而且不会超出这个范围。写出易于理解且篇幅适中的文章已经够难的了。多个表需要更多的时间和空间,这会使事情变得更加复杂。
一个解决方案是从这些示例中稍微推断一下。两个表之间的关联与任意两个表之间的关联方式相同。实际上,关联只存在于两个表之间,所以你只需要在你拥有的任意数量的表之间重复关联即可。
但我相信,根据你在这里写的内容,你正在寻找更具体的东西——一些你可以真正深入研究以理解这些技术的东西。
我最喜欢的 Rails 书籍之一是 Dan Chak 撰写、O'Reilly 出版的 Enterprise Rails。他的例子可能在另一个方向上走得太远,使用了各种高级技术,对于你的简单应用程序,或者仅仅是为了了解多少表可以组合在一起来说,可能有点杀鸡用牛刀。但是,其中几个例子涉及以不同方式连接的多个表,以演示各种 Rails 技术。
但是,如果你真的想了解许多表如何组合在一起,请查看互联网上可用的基于 Rails 的开源应用程序之一。有许多社交网络平台(如 Insoshi 和 LovedByLess)、至少一个电子商务系统(Spree)和至少一个内容管理系统(Radiant)。你可以下载、探索并尝试理解代码。在你的特定情况下,这些应用程序最有趣的部分可能是模型以及它们之间的关联,但是 Rails 应用程序还有很多其他部分,查看这些开源应用程序可以帮助你更好地理解这些部分。我希望这对你有帮助!如果您有任何进一步的问题,请告诉我。
Xen 更正
我一直是 Linux Journal 的读者和订阅者多年了。几乎每个月我都能学到一些可以立即应用的新知识。在多年来优秀的 Linux Journal 文章的帮助下,我有机会安装数据库服务器、备份服务器、网络监控系统和 PBX 系统。
这个月,我尝试使用 Xen 服务器,打算安装 sogo。当我准备部署我的第一个 appliance 时,我按照 2010 年 1 月刊第 74 页 [Matthew Hoskins 的“使用 Linux 和 Xen 的简单虚拟 Appliance”] 上的命令操作,并迅速擦除了我之前的工作。tar 命令应该读作
tar -cvzf appliance-base.img.tar.gz ↪appliance-base.img appliance-base.cfg
而不是
tar -cvzf appliance-base.img appliance-base.cfg
请继续保持良好的工作。
——
Rob Underwood
Matthew Hoskins 回复: Rob,我真诚地道歉。我不知道那个错别字是怎么溜进去的。你是对的。感谢您的反馈。
Dave Taylor 的陷阱
作为马赛大学的 bash 老师,我喜欢阅读 Dave Taylor 的专栏。在 2010 年 2 月刊第 24 页,请看这行字:trap "..." 0 1 9 15。如果你尝试trap -l来获取 UNIX 信号列表,你会看到 0 不是信号(但对于 kill 有特殊含义kill -0 pid如果 pid 存在则成功,但不发送任何信号)。此外,9 代表 SIGKILL,这是“不可捕获”的。最后,一个合理的选择是1 2 3 15.
——
E. Thiel
Dave Taylor 回复: Sacré bleu! 你是对的,没有trap 0信号可以捕获,而且你不能捕获 SIGKILL。谢谢!
Always Innovating Touch Book
Daniel Bartholomew 在 2010 年 2 月刊中对 Always Innovating Touch Book 的评测中提到该软件不太好。我想知道是否有办法安装 Ubuntu 或 Windows XP 代替它?
——
jeff
Daniel Bartholomew 回复: Touch Book 是围绕德州仪器的 ARM Cortex-A8 CPU 构建的。因此,你的选择有限。例如,Windows 没有 ARM 兼容版本。不过,还是有一些选择的。Ubuntu 有一个 ARM 端口,Android 和 Chrome OS 都在 ARM 处理器上运行。此外,其他 Linux 发行版也在 ARM 处理器上运行,可能可以使其在 Touch Book 上运行。Touch Book Wiki 上有关于你可以在 Touch Book 上运行的各种发行版的最佳信息:www.alwaysinnovating.com/wiki。
Always Innovating 似乎也认识到其 Linux 操作系统不是最好的,因为最新版本的 Touch Book OS(在撰写本文时,是 2010-01.b 版本)已将 Ubuntu 和 Android 作为启动时选项包含在内,并承诺在未来的版本中提供 Chrome OS。
Ubuntu 启动选项会将你启动到原生的 Ubuntu Xfce 桌面环境。在我的有限测试中,它似乎运行良好,但我希望他们使用 Ubuntu Netbook Remix 或 MID 版本,因为你得到的东西没有针对触摸屏进行优化,而且似乎也没有屏幕键盘。Android 启动选项尚未完全正常工作。它可以启动,你也可以进入桌面,但你不能做太多其他事情。例如,两个硬件按钮没有映射到任何标准的 Android 硬件按钮(主页、菜单和返回),并且似乎没有任何设置来模拟它们,这使得 Android 目前无法使用。
默认的 Touch Book OS 在过去的几个月中有所改进,但它仍然存在太多问题,我无法推荐它,除非你喜欢近距离接触你的硬件和软件。
故障排除澄清
Kyle Rankin 通常在他的“Hack and /”专栏中一针见血,但他可能让读者对 CPU 负载以及w/uptime命令在 Linux 上的输出感到困惑 [2010 年 3 月刊,“Linux 故障排除,第一部分:高负载”]。与他所说的相反,w 并不能显示等待 CPU 变为可用的进程数量。
在 Linux 上,它包括那些准备好运行的和那些等待任何类型的 I/O 的进程。在文章的后面,他谈到了 CPU 和 I/O 绑定的负载情况,并且关于如何监控它们是正确的。这只是一个糟糕的总结,可能会让人们感到困惑。这就是为什么即使w报告负载为 40,你也可以拥有一个响应迅速的系统。
我过去管理 Sun OS/Solaris 服务器,在那些服务器上,w输出确实是准备好使用 CPU 的进程数量。当我开始使用 Linux 时,我自己也感到困惑——命令的语义不同了。
——
John
Kyle Rankin 回复: 感谢澄清!为了以一种简单的方式解释负载的概念,我绝对遗漏了更完整的定义。以下是来自 uptime 手册页的定义:“系统负载平均值是处于可运行或不可中断状态的进程的平均数量。处于可运行状态的进程要么正在使用 CPU,要么正在等待使用 CPU。处于不可中断状态的进程正在等待某些 I/O 访问,例如等待磁盘。”
Re: 安全提示
在 2010 年 3 月刊中,Paul 写了一封非常有趣的信,内容是关于用重要 DNS 名称的 IP 填充 /etc/hosts 文件,以避免可能在免费/公共 LAN 上使用的任何中间人欺骗或网络钓鱼攻击。我所有的计算机都使用 OpenDNS,主要是因为它们提供的服务比我的 ISP(在英国)更快,并且还运行反网络钓鱼数据库服务来保护家里的其他人。
我想知道,将计算机设置为使用 OpenDNS 而不是路由器/DHCP 服务器发布的默认(以及可能被破坏的)DNS 服务器,是否与将 IP 插入 hosts 文件一样安全?
是否有可能被入侵的 DNS 服务器(比如路由器内部的 DNS 服务器)拦截发往外部 IP 地址的 DNS 查询,并向原始节点返回虚假的地址数据?
——
Daniel Craigie
可悲的是,虽然被入侵的 DNS 服务器无法毒害你的 DNS 结果,但被入侵的路由器肯定可以。在这种情况下,无论我们谈论的是 DNS 还是仅仅是通用流量,都不重要——不受信任的网络是相当不可信任的!
举个例子,你假设的网络中的路由器可以简单地回复,假装是 OpenDNS 服务器。因为路由器路由流量,而且没有办法验证流量来自哪里,所以很容易欺骗。事实上,这就是为什么这么多在咖啡店的人立即启动 VPN 会话的原因,因为加密保证你连接到正确的端点。
所以最终,在不受信任的路由器后面保持安全的唯一方法是使用某种 VPN。希望这有帮助!—Ed.
H 音符?
关于 John Knight 在 2010 年 3 月刊的“新项目”专栏中对 wxGuitar 的描述:H 是德语中我们英语中称为 B 的音符名称。德语中的 B 指的是我们英语中的降 B。因此,wxGuitar 可能来自德国或其他具有德语音乐传统的国家。巴赫的 B 小调弥撒在德语中是 H 小调。
——
Charles McCarthy
合法使用 Linux?
我工作的公司非常重视许可证的法律合规性。这在使用免费 Linux 发行版时带来了困难,因为他们似乎做出的最明确的声明(如果你幸运的话)是发行版中软件的许可证是兼容的。由于发行版通常包含数千个软件包,每个软件包都有自己的许可证,因此公司要检查它是否可以遵守每个许可证的条款(一个简单的例子:没有软件包声明它不得用于商业目的)非常昂贵。这可能会占用法律部门数周的时间。
我不是律师,但即使是 Red Hat 的许可证看起来也有些棘手。他们说核心内容都是 GPL2,但他们也说许多内容包含许多组件,每个组件都有自己的许可证。我想 Red Hat 不发行 OOo(现在是 GPL3)。Red Hat 还有一套 16 个第三方许可证,其中一个(Monotype)说你只能为备份制作一个副本。所以,让我们希望没有人有多个 0 级系统备份!另一个(“Macromedia”又名 Adobe)许可证甚至更难遵守。如果你在两台服务器上安装 Adobe Reader(一台用于故障转移),你就违规了。
我只是以 Red Hat 为例,因为你可能会认为商业发行版会对用户的法律义务做出最明确的声明,但即使他们的许可证也需要一段时间才能正确检查。(我有没有提到“Macromedia”链接到另一组数十个可能相关的其他 Adobe 软件的许可证?)
这看起来像是一个疯狂的情况。当然,对于想要真诚地使用它的公司来说,明确阐述和总结每个发行版的法律立场是有意义的。相反,似乎每个用户都被期望重复检查典型的有问题的限制(例如不得用于商业用途或 NAP)的工作。
当然,同样的情况也适用于其他软件集合,比如出色的 Cygwin。我写信给你是为了引起社区的注意,并希望情况并非真的像看起来那样不可能。
——
luke
我完全理解你的意思,我们的社区(Linux 用户)也痛苦地知道许可,即使是开源许可,也可能如此有争议。GPL 本身,就像你提到的那样,有多个版本,令人困惑。我也不是律师,但我担心这种情况不会很快结束。当像 Adobe 这样的公司试图扩展他们的舒适程度并涉足开源时,他们会非常谨慎,以防止他们的知识产权被盗。坦率地说,我理解他们的担忧,并且我赞扬他们为开源做出任何努力。
也许在未来,许可会变得不那么复杂,因为时间证明开源是一个“安全”的工作环境,仍然可以赚钱。在那之前,至少可以说,这是一个复杂的烂摊子。—Ed.
本月照片
有照片想与 LJ 读者分享吗?请将您的投稿发送至 publisher@linuxjournal.com。如果我们在杂志上刊登您的照片,我们将免费赠送您一件 T 恤。