马丁博客

创业是条艰苦的路!

首页: http://www.blags.org


由马丁博客撰写的日志

ubuntu 磁盘问号解决方法

文件从window上传到ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf8,windows默认都是GBK,对拷的文件转化后就会乱码。只好手动将ubuntu环境设置为GBK
1、首先设置
sudo gedit /var/lib/locales/supported.d/local
添加一行 zh_CN.GBK GBK
2、
sudo locale-gen
3、修改
/etc/environment
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games”
LANGUAGE=”zh_CN:zh:en_US:en”
GST_ID3_TAG_ENCODING=GBK
LANG=zh_CN.GBK
LC_CTYLE=zh_CN.GBK
CLASSPATH=”/usr/lib/jvm/java-1.5.0-sun/lib”
JAVA_HOME=”/usr/lib/jvm/java-1.5.0-sun”
LC_ALL=”zh_CN.GBK”
sudo reboot

然后重启X即可

ubuntu 常用快捷键

最近一直在用lamp开发linux用到了ubuntu9.10 下面是一些常用快捷键展示给大家希望有用

View Code SHELLCtrl+F 文件搜索
Ctrl+Alt+D 显示桌面
Alt+F2 打开终端
apt-get install 安装文件
apt-get remove 卸载
apt-get autoremove 卸载相关文件

给快捷方式添加图片

sudo gedit /usr/share/applications/Eclipse.desktop
在文本编辑器里复制粘贴下面内容
[Desktop Entry]
Name=Eclipse
Comment=Eclipse IDE
Exec=/home/shixinyu/JAVA/eclipse/eclipse
Icon=/home/shixinyu/JAVA/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=Application;Development

保存这个文件后,就会在“应用程序”下的“编程”中出现Eclipse的快捷方式。
还有一些忘记了以后补上。

jQuery 与 prototype 共存方法

方案一、

View Code JAVASCRIPTvar $j = jQuery.noConflict();
 
// Use jQuery via $j(…)
$j(document).ready(function(){
$j("div").hide();
});
 
// Use Prototype with $(…), etc.
$(’someid’).style.display = ‘none’;

方案二、

View Code JAVASCRIPT jQuery.noConflict();
 
// Use jQuery via jQuery(…)
jQuery(document).ready(function(){
jQuery("div").hide();
});
 
// Use Prototype with $(…), etc.
$(’someid’).style.display = ‘none’;

方案三、

View Code JAVASCRIPT jQuery.noConflict();
 
// Put all your code in your document ready More >

windows 下安装ubuntu 9.04 双系统 方法

Ubuntu 9.04已正式发布,考虑到目前使用WindowsXP + Ubuntu双系统的用户还是比较多的,特针对9.04特性整理出下文指导新手在WinXP环境下通过硬盘安装Ubuntu 9.04。
1.下载Grub4Dos(注意:如果你想尝试Ext4文件系统,一定要下载最新的支持Ext4文件系统Grub4Dos 0.4.4版本),解压至XP的C盘根下,修改menu.lst文件,在末尾添加如下内容:
(注意:其中粗体Ubuntu-9.04-desktop-i386.iso是desktop版本,如果你下载的不是desktop版,请将其替换成你下载的镜像的文件名,如果不成功可以尝试删除menu.lst再试试。)
title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/Ubuntu-9.04-desktop-i386.iso ro quiet
splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.gz
2.修改XP的boot.ini文件(该文件为系统文件,具有只读隐藏属性),在boot.ini末尾添加:
C:\grldr=”GRUB”
3.下载Ubuntu 9.04的desktopCD的镜像文件,下载地址参考Ubuntu 9.04官方衍生版本全集,然后将下载好的镜像文件直接放在C: ,将其中的.disk文件夹加压至C: , 将casper目录下的initrd.gz和vmlinuz这两个文件也解压至C:
4.重启计算机,选择Grub,进入Grub引导程序,选择最后一项(Install Ubuntu),稍等即可进入ubuntu的liveCD模式,此时打开一个终端,在里面输入:
sudo umount -l /iosdevice
回车,然后点击桌面上的安装图标即可完成安装过程。

JQuery获取和设置Select选项方法

JQuery获取和设置Select选项
获取Select :
获取select 选中的 text:
$(“#ddlRegType”).find(“option:selected”).text();
获取select选中的 value:
$(“#ddlRegType “).val();
获取select选中的索引:
$(“#ddlRegType “).get(0).selectedIndex;
设置select:
设置select 选中的索引:
$(“#ddlRegType “).get(0).selectedIndex=index;//index为索引值
设置select 选中的value:
$(“#ddlRegType “).attr(“value”,”Normal“);
$(“#ddlRegType “).val(“Normal”);
$(“#ddlRegType “).get(0).value = value;
设置select 选中的text:
var count=$(“#ddlRegType “).size();
for(var i=0;i<count;i++)
{           if($(“#ddlRegType “).get(0).options[i].text == text)
{
$(“#ddlRegType “).get(0).options[i].selected = true;
break;
}
}
清空 Select:
$(“#ddlRegType “).empty();

在Ubuntu9.04 下浏览CHM文件的几个方法

CHM>(Compiled Help Manual)是微软自有的说明文件格式,内部基于HTML驱动,常常被当作帮助文档来制作,比如微软的MSDN,也有不少小说、电子书是基于CHM制作(欲了解更多关于CHM请访问维基条目:CHM、HTML Help)。那么在Ubuntu下如何来浏览这种微软的文件格式呢,这里有4个方法:
1、Gnochm
GnoCHM是基于GNOME的CHM阅读器,有如下特性:
支持MS自有超链接
支持完整文本搜索
支持书签
支持配置HTTP超链接
与GNOME2紧密集成
支持多语言
支持同时打开多文件

安装GnoCHM:
$sudo apt-get install gnoCHM
或者在Ubuntu下的Firefox浏览器中单击按钮安装:apt://gnochm
2、kCHMviewer
如果你在Ubuntu下安装了KDE桌面环境,那么你应该用与KDE桌面更和谐的CHM阅读器,叫做kCHMviewer(下图是kCHMviewer运行在GNOME桌面环境的截图):

安装kCHMviewer:
$sudo apt-get install kCHMviewer
或者在Ubuntu下的Firefox浏览器中单击按钮安装:apt://kchmviewer
3、xCHM
GNOME和KDE都有最和谐的版本,这个x开头的应该很容易联想到xfce这个桌面环境,没错xCHM没有特别局限适合哪个桌面环境,但是最棒的是还兼容fvwm或xfce,对于那些轻量级桌面癖的人而言xCHM是最合适的。
安装xCHM:
$sudo apt-get install xCHM
或者在Ubuntu下的Firefox浏览器中单击按钮安装:apt://xchm
4、Mozilla Firefox扩展之CHM Reader
啥都不想安装?那就用Firefox的扩展来实现CHM阅读功能好了:
https://addons.mozilla.org/zh-CN/firefox/addon/3235

ubuntu 9 xampp开机启动方法

最近一直进行lamp开发有兴趣的朋友可以互相学习.
1.以root的身份登入
2. 在/etc/init.d 目錄下建立lampp.sh 文件
lampp.sh 內容如下:
#!/bin/sh #!/bin/sh
cd /opt/lampp
./lampp start
3.更改权限
chmod 755 lampp.sh
4.编辑/etc/init.d/rc.local在最后一行加上:
exec /etc/init.d/lampp.sh
重新开机就完成了。
注:这种方法就算开机后没有登入,XAMPP还是会启动。

ubuntu lampp 开启方法 lampp start

本来就是想把windows上的一些东西迁移到linux上,所以装完了系统就要装运行环境,首先就是lampp。
1、下载文件。由于直接连接的下速度太慢,所以我选择的是先在winxp下用迅雷下载,然后将下载到的文件放到ubuntu挂载的共享文件夹下,然后ubuntu再在共享下把文件取走。下载地址:http://sourceforge.net/project/showfiles.php?group_id=61776&package_id=60248
2、解压。切换到你的下载文件位置 以root身份 运行tar xvfz xampp-linux-1.7.1.tar.gz,解压出来之后再将文件夹切走,放到/opt/下。
3、运行。切换到/opt/lampp 运行 sudo ./lampp start即可。
注释:xampp官方网站上面第三步写的所 “切换到/opt/lampp 运行 lampp start” 这样的华ubuntu总所会报找不到指令的错误。
如有错误请在下方留言。本人将一一回答。

mysql的事务处理机制

由于项目设计里面,牵扯到了金钱的转移,于是就要用到MYSQL的事务处理,来保证一组处理结果的正确性
用了事务,就不可避免的要牺牲一部分速度,来保证数据的正确性。
只有InnoDB支持事务
事务 ACID Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性
一组事务,要么成功;要么撤回。
2、稳定性
有非法数据(外键约束之类),事务撤回。
3、隔离性
事务独立运行。
一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
事务的100%隔离,需要牺牲速度。
4、可靠性
软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
开启事务
START TRANSACTION 或 BEGIN
提交事务(关闭事务)
COMMIT
放弃事务(关闭事务)
ROLLBACK
折返点
SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1
发生在折返点 adqoo_1 之前的事务被提交,之后的被忽略
事务的终止
设置“自动提交”模式
SET AUTOCOMMIT = 0
每条SQL都是同一个事务的不同命令,之间由 COMMIT 或 ROLLBACK隔开
掉线后,没有 COMMIT 的事务都被放弃
事务锁定模式
系统默认: 不需要等待某事务结束,可直接查询到结果,但不能再进行修改、删除。
缺点:查询到的结果,可能是已经过期的。
优点:不需要等待某事务结束,可直接查询到结果。
需要用以下模式来设定锁定模式
1、SELECT …… LOCK IN SHARE MODE(共享锁)
查询到的数据,就是数据库在这一时刻的数据(其他已commit事务的结果,已经反应到这里了)
SELECT 必须等待,某个事务结束后才能执行
2、SELECT …… FOR UPDATE(排它锁)
例如 SELECT * FROM tablename WHERE id<200
那么id<200的数据,被查询到的数据,都将不能再进行修改、删除、SELECT …… LOCK IN SHARE MODE操作
一直到此事务结束
共享锁 和 排它锁 的区别:在于是否阻断其他客户发出的 SELECT …… LOCK IN SHARE MODE命令
3、INSERT / More >

mysql 简单索引

就象许多的PHP开发者一样,在刚开始建立动态网站的时候,我都是使用相对简单的数据结构。PHP在连接数据库方面的确实是十分方便(译者注:有些人认为 PHP在连接不同数据库时没有一个统一的接口,不太方便,其实这可以通过一些扩展库来做到这一点),你无需看大量的设计文档就可以建立和使用数据库,这也 是PHP获得成功的主要原因之一。
前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一 粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过一些开发,但却对如何为数据库建立适 当的索引所知较少,因此我起了写一篇相关文章的念头。
最普通的情况,是为出现在where子句的字段建一个索引。为方便讲述,我们先建立一个如下的表。
Code代码如下:CREATE TABLE mytable (
id serial primary key,
category_id int not null default 0,
user_id int not null default 0,
adddate int not null default 0
);
很简单吧,不过对于要说明这个问题,已经足够了。如果你在查询时常用类似以下的语句:
SELECT * FROM mytable WHERE category_id=1;
最直接的应对之道,是为category_id建立一个简单的索引:
CREATE INDEX mytable_categoryid
ON mytable (category_id);
OK,搞定?先别高兴,如果你有不止一个选择条件呢?例如:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
你的第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。你可以建立多重的索引。
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
注意到我在命名时的习惯了吗?我使用”表名_字段1名_字段2名”的方式。你很快就会知道我为什么这样做了。
现在你已经为适当的字段建立了索引,不过,还是有点不放心吧,你可能会问,数据库会真正用到这些索引吗?测试一下就OK,对于大多数的数据库来说,这是很容易的,只要使用EXPLAIN命令:
EXPLAIN
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2;
This is what Postgres 7.1 returns (exactly as I expected)
NOTICE: QUERY PLAN:
Index Scan using mytable_categoryid_userid on
mytable (cost=0.00..2.02 rows=1 width=16)
EXPLAIN
以上是postgres的数据,可以看到该数据库在查询的时候使用了一个索引(一个好开始),而且它使用的是我创建的第二个索引。看到我上面命名的好处了吧,你马上知道它使用适当的索引了。
接着,来个稍微复杂一点的,如果有个ORDER BY字句呢?不管你信不信,大多数的数据库在使用order by的时候,都将会从索引中受益。
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
有点迷惑了吧?很简单,就象为where字句中的字段建立一个索引一样,也为ORDER BY的字句中的字段建立一个索引:
CREATE INDEX mytable_categoryid_userid_adddate
ON mytable (category_id,user_id,adddate);
注意: ”mytable_categoryid_userid_adddate” 将会被截短为
“mytable_categoryid_userid_addda”
CREATE
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
NOTICE: QUERY PLAN:
Sort (cost=2.03..2.03 rows=1 width=16)
-> Index Scan using mytable_categoryid_userid_addda
on mytable (cost=0.00..2.02 rows=1 width=16)
EXPLAIN
看看EXPLAIN的输出,好象有点恐怖啊,数据库多做了一个我们没有要求的排序,这下知道性能如何受损了吧,看来我们对于数据库的自身运作是有点过于乐观了,那么,给数据库多一点提示吧。
为了跳过排序这一步,我们并不需要其它另外的索引,只要将查询语句稍微改一下。这里用的是postgres,我们将给该数据库一个额外的提示–在 ORDER BY语句中,加入where语句中的字段。这只是一个技术上的处理,并不是必须的,因为实际上在另外两个字段上,并不会有任何的排序操作,不 过如果加入,postgres将会知道哪些是它应该做的。
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY category_id DESC,user_id DESC,adddate DESC;
NOTICE: QUERY PLAN:
Index Scan Backward using
mytable_categoryid_userid_addda on mytable
(cost=0.00..2.02 rows=1 width=16)
EXPLAIN
现在使用我们料想的索引了,而且它还挺聪明,知道可以从索引后面开始读,从而避免了任何的排序。
以上说得细了一点,不过如果你的数据库非常巨大,并且每日的页面请求达上百万算,我想你会获益良多的。不过,如果你要做更为复杂的查询呢,例如将多张表结 合起来查询,特别是where限制字句中的字段是来自不止一个表格时,应该怎样处理呢?我通常都尽量避免这种做法,因为这样数据库要将各个表中的东西都结 合起来,然后再排除那些不合适的行,搞不好开销会很大。
如果不能避免,你应该查看每张要结合起来的表,并且使用以上的策略来建立索引,然后再用EXPLAIN命令验证一下是否使用了你料想中的索引。如果是的话,就OK。不是的话,你可能要建立临时的表来将他们结合在一起,并且使用适当的索引。
要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
以上介绍的只是一些十分基本的东西,其实里面的学问也不少,单凭EXPLAIN我们是不能判定该方法是否就是最优化的,每个数据库都有自己的一些优化器, 虽然可能还不太完善,但是它们都会在查询时对比过哪种方式较快,在某些情况下,建立索引的话也未必会快,例如索引放在一个不连续的存储空间时,这会增加读 磁盘的负担,因此,哪个是最优,应该通过实际的使用环境来检验。
在刚开始的时候,如果表不大,没有必要作索引,我的意见是在需要的时候才作索引,也可用一些命令来优化表,例如MySQL可用”OPTIMIZE TABLE”。
综上所述,在如何为数据库建立恰当的索引方面,你应该有一些基本的概念了。
来自 blogjava、