大杂烩, 硬盘安装Linux

http://antkillerfarm.github.io/

SQL与数据库

这几天看到了这篇文章:

http://www.cnbeta.com/articles/104987.htm

之前许多课本中的概念顿时浮现在眼前。曾几何时,SQL成了数据库的同义词,以至于离开SQL就没法操作数据库了。但其实SQL所代表的关系型数据库,只是数据库的一类而已。除此之外还有很多其他类型的数据库。

Oracle的广告词,给当时尚在学校的我产生了这样的错觉:“只有数据库,才是处理大量数据的最好方法。”直到后来随着自己技术的进步,才知道这样的想法是如何的荒谬。

一个身边的例子,有一次我们需要处理一批数据,在使用数据库的情况下,需要2天才能处理完,峰值时内存的占用接近4G。但这还不是最糟的,关键的问题是以后数据的规模会越来越大,一旦内存占用超过4G,旧的32位硬件软件就不够用了。(当时我们对硬件了解的不多,不知道Intel X86有PAE模式,以为4G就是32位PC的极限了,其实不然。)

于是,有位同事说,这批数据虽然量大,但规则并不复杂,干脆用最原始的写文件来做吧。结果2天的处理时间缩短为1天,内存占用减少为300M。其实这也没有什么神奇的,一般的关系型数据库通常由三部分组成:SQL解释器、事务引擎和存储查询引擎。如果能够根据具体情况,去掉前两部分,并对第三部分进行优化,完全可能比Oracle做的更好。毕竟在软件这个领域并不存在超现实的东西,Oracle再牛也是跑在相应的硬件、软件之上的,少不了要和CPU、内存、硬盘打交道。

结论:不要太过依赖数据库,有的时候没有数据库,更快,更简单。

Symbian开发

1)试着装好了Carbide c++以及S60 3rd SDK后,却发现不能在C盘以外的地方建工程(在默认的C:\Symbian\Carbide\workspace之外建工程是可以的),真没想到Nokia出的工具还有这样不友好的限制。

PS:它的说明说工程要和SDK放在同一个盘中,结果我把SDK装在E盘,结果还是在C盘建工程可以,在E盘建不行,而且多次安装之后,我的系统崩溃了,郁闷,这个系统用了2年,都没有重装…

2)Symbian S60 2nd 和 3rd 的区别

http://www.opda.com.cn/viewthread.php?tid=182217&page=1#pid3004888

3)Carbide c++的一个小BUG

如果在开始利用向导生成代码时,没有选择armv5或gcce,而只选择了模拟器的情况下,在代码生成之后,再添加armv5或gcce的话,是不能自动生成sis文件的,可以在Project->Properties->Carbide c++->Build Configurations->SIS Builder中添加。

Sqlite

《Inside Sqlite》是最好的参考书,目前已经有人把它翻译成中文,可以在CSDN上找到。

《SQLite Optimization FAQ》另一篇很好的文章。

http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html

关于编译和使用的问题,写的最好的是以下两篇:

http://www.99inf.net/SoftwareDev/VC/39396.htm

http://www.cnblogs.com/giszhang/archive/2008/10/09/1307509.html

WebKit

WebKit的代码可以从它的官网www.webkit.org下获得。

在以下网页可以获得webkit向各种GUI移植的相关信息。

http://trac.webkit.org/wiki

由于获得的代码比较新,所以在linux平台下常有一些组件由于过于古老而导致编译失败。所以需要使用yum或者apt-get之类的工具从网上更新相关的组件。这里不推荐使用RHEL或者CentOS之类的服务器版本,因为服务器版本为了追求稳定性,不但组件不是最新的,就连网上的组件源也不是最新的。

可以使用ubuntu 9.04桌面版,不过里面缺少很多开发用的组件,除了

http://trac.webkit.org/wiki/BuildingGtk

列出的之外,还有不少组件需要下载。主要有:

1)autoconf
2)libtool
3)gtk-doc-tools
4)libgail-dev

Apache与CGI

本来以为CGI编程会比较复杂,没想到从原理的角度,似乎比之前的JSP还要简单一些。这次主要是用C来编写CGI,使用的web服务器是Apache 2.0.55。网上看到了几篇同类的文章,但大多过于简略,有的甚至颇有错误,所以自己就重新写一篇吧。

1)配置httpd.conf

如果是默认安装的话,只要将

AddHandler cgi-script .cgi

改为

AddHandler cgi-script .cgi .exe

即可。其他的完全不用改,只要你将后面编好后的.exe放到默认的cgi-bin中就行了。如果你要将.exe放到其他路径下的话,ScriptAlias和Options ExecCGI会派上用场。(详细的用法,翻手册查吧!)别忘了修改了配置之后,要重启Apache。

2)最简单的例子

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
    char buf[256];
    char *req;
    printf("Content-type: text/html\n\n");
    printf("");
    printf("hello world!");
    strcpy(buf,"HTTP_ACCEPT");
    req = getenv(buf);
    printf("%s",req);
    strcpy(buf,"HTTP_REFERER");
    req = getenv(buf);
    printf("%s",req);
    strcpy(buf,"QUERY_STRING");
    req = getenv(buf);
    printf("%s",req);
    printf("");
    return 0;
}

网上的例子只有输出,没有输入,其实不算好例子。用VC之类的编译器编好后,放到cgi-bin中,在浏览器中输入以下地址http://localhost/cgi-bin/cgi.exe?abc就可以看到效果了。还有printf("Content-type: text/html\n\n");是一定要有的,没有的会报HTTP 500的错误,有的例子中说printf("\n");就行了,这是不对的,至少在默认配置下,这样做的结果是你可以下载该.exe,但不能把它当做CGI来执行。

从这个例子,以及Apache官方的例子(http://httpd.apache.org/docs/1.3/howto/cgi.html

#!/usr/bin/perl
print "Content-type: text/html\r\n\r\n";
print "Hello, World.";

中可以看出,Apache的作用其实是重定义了这些CGI程序的标准输入输出,以及设置了一些系统变量。这才是它支持多种编程语言编写的CGI的真正原因,试想还有哪种语言不支持标准输入输出呢?

可以在http://www.boutell.com/cgic/中获得CGIC的代码,这是一个C写的CGI开发库,本文的示例就是在这个库的代码的启示下写出来的。

3)Linux下的Apache目录结构

Windows下Apache的各个目录都放在一起,因此使用起来比较方便,而Linux下Apache的各个目录分散在各个地方不是太好找,特记录一下,以作备忘。

conf在/etc/apache2下,但是Linux下的httpd.conf实际上是个空文件,它的内容被分散到该目录下的其他文件中。

cgi-bin在/usr/lib/cgi-bin下。

bin下的文件在/usr/sbin下可以找到。

modules在/usr/lib/apache2下。

如何在bat文件中编写脚本,使得启动命令行之后,能在命令行下执行命令?

cmd /k dir

如上所示的命令,在启动命令行之后,会在命令行下执行dir命令。

Visio

如何保存成图片

1.选中打算保存的区域。

2.“文件”->“另存为”。

3.如果需要缩放的话,调整保存的大小即可。

内存数据库

如GemFire。

硬盘安装Linux

2013.9

最近重新开始研究Android和Linux,由于已经快2年没有弄过了。因此之前下载的linux发行版也不打算再继续用了,省得到了Android开发的时候还要更新一大堆的包。

看了一下Google官网上对于Android source的编译条件,再结合2年前编译Android 2.2(Froyo)的经验,在虚拟机上跑Linux的方案首先被排除。开玩笑,16G的RAM/SAWP的开销,哪是VM能搞得定的。就连Froyo在虚拟机上都编不过去,何况是4.3(Jelly Bean)了。

2年前编译Froyo,用的是Wubi安装的Ubuntu 10.04。这次看了一下Jelly Bean的编译条件,100GB+的空间。忽然觉得做软件这么多年,还从来没有在PC上认认真真的安装个双系统用用,实在是职业生涯的一个污点。于是在下载了Ubuntu 12.04之后,老老实实的在网上搜索起如何硬盘安装的办法来。

之所以选择硬盘安装,其实实在是觉得刻张盘太麻烦了。如今就连卖本本的厂商都不提供Recovery CD,而改用Recovery分区来恢复系统。想来硬盘安装Ubuntu也早无技术难度可言了。

硬盘安装的步骤如下:

1)EasyBCD和ISO

2)

title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-11.10-i386.iso ro quiet splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.lz

3)

把准备好的iso用压缩软件或者虚拟光驱打开,找到casper文件夹,复制initrd.lz和vmlinuz到C盘,然后在把iso也拷贝到C盘。

4)

sudo umount -l /isodevice

5)

安装好之后,没有GRUB开机菜单的话:

sudo -i
mount /dev/sda7 /mnt
grub-install --root-directory=/mnt /dev/sda

下面针对最近几天的安装实践,做一个总结性的概括:

1)刚开始的时候,由于不熟悉Ubuntu 12.04的安装步骤,选择了错误的选项,发现之后中断系统安装。重启,结果不但Ubuntu没有安装好,就连Windows也进不去。这时由于之前没有刻录Live CD的原因,只好使用Recovery分区恢复Windows系统。

2)我的本本是ASUS的,在开机时候按住F9,即可启动一键恢复功能。由于这个功能也是第一次使用,因此当选择将Windows恢复到第一个分区,并在恢复过程中出错的时候,我选择了重启。然后选择将Windows恢复到一个硬盘。。。结果除了Recovery分区之外的所有分区都被删除了。保存在电脑中的数据也全部丢失。看来装系统始终是件危险的工作。安装之前一定要将重要数据备份到移动硬盘上。

3)ASUS的一键恢复功能,会重启机器若干次,且每次的画面高度雷同,因此很让人觉得是不是机器陷入了有问题的死循环之中。在反复折腾几次之后,我也泄了气,任由它先无限重启下去。后来大概是重启到第4次之后,我发现桌面的分辨率有改变,然后才意识到这些重启估计是正常现象,并不是死循环。

4)Ubuntu的虚拟内存使用的是交换分区的方式,而不是Windows的交换文件。因此要单独划一个分区用于虚拟内存的数据交换。

5)Win7的压缩卷功能对于系统分区不好使,由于有不可移动的数据存在,系统盘最小也要460G(硬盘总共1T),这实在是太大了。可以使用Acronis Disk Director Suite调整系统分区的大小。但是需要注意的是,Windows下的分区工具对分区数量的调整,会影响到GRUB的执行,需要通过grub shell的命令切换到Linux下,然后执行grub update,方可恢复正常。而Linux下的分区工具(如GParted)就没有这个问题。

6)GParted在调整分区大小,主要是分区首地址右移方面,执行效率非常慢。Acronis Disk Director Suite没试过,没准会好些。

7)分区的话题说完了,继续谈谈对Linux启动过程的心得。会提到一些名词,但是不会展开来说。首先是BIOS和UEFI。它们决定从哪个存储介质启动。

8)MBR的结构。MBR决定了一个介质最多只有3个主分区和1个扩展分区。一个扩展分区可包含若干个逻辑分区。

9)GRUB和LILO。

10)initrd和vmlinuz。initrd包括image-initrd和cpio-initrd。zImage和bzImage的区别和作用。

11)在逛Ubuntu软件中心的时候,发现了Batttle of Wesnoth这个开源的回合制战旗游戏。试着玩了一下,感觉蛮不错的。正好这个项目在Source Forge上使用Git管理源代码。考虑到Android Source也是用Git管理的,于是就用Git下载了Batttle of Wesnoth的source来熟悉一下Git的用法。

12)在linux下有个叫做gitk的Git GUI工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值