手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2024年11月的文章

使用GIT进行版本控制

关于版本控制

什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。在本书所展示的例子中,我们仅对保存着 软件源代码的文本文件作版本控制管理,而实际上,你可以对任何类型的文件进行版本控制。

如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本。采用版本控制系统(VCS)是个明智的选择。有了它你就可以 将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。你可以比较文件的变化细节,查出是谁最后修改了什么地方从而造成某些怪异问 题,又是谁在何时报告了某个功能缺陷,等等。使用版本控制系统通常还意味着,就算你胡来搞砸了整个项目,把文件改的改,删的删,你也可以轻松恢复到原先的 样子。而由此额外增加的工作量却微乎其微。

本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单,不过坏处却不少:有时候会混 淆所在的工作目录,弄错了文件丢了数据就没了后退的路。

。。。。。。更多看全文

» 阅读全文

Tags: git, svn, cvs

安装win7了

一大早到单位,终于摒不住。还是安装了win7,成了地板人物,家里的正版win7还是留给我的笔记本吧。

现在说说安装的感觉吧。

与以前的windows 2008比起来,外观很像。安装的过程也差不多。安装速度也挺快,基本上半小时就解决了。

安装完毕后,基本上所有的硬件都能认出来,Except显卡。然后装了一个“驱动人生”软件,基本上所有的驱动也认出来了。本来是装的“驱动精灵”,但是显卡还是认不出,所以才换成了“驱动人生”。

当然安装之前,我也做了很多工作,不然我也不敢安装系统。毕竟我原来的一些配置文件还是很重要的,在那么多重要的环节中,我保留了几样最重要的工具的配置信息:

  1. cuteftp的站点信息,filezilla的站点信息
  2. firefox的全配置 
  3. netbeans的配置

这几个是工作中必备的东西,FTP嘛,就不用说了,还有我自己的一些信息;firefox是我最常用的浏览器,也有一大堆的插件。如果每次都重装,很可能会有遗漏。所以找资料,做了一个profile启动的版本【当然,事先我还是用profile manager and synchronizer插件把profile信息备份了下来】;netbeans嘛就不用说了,这是开发工具,工作必备。

当然由于一些其他软件是可以装在D盘的,所以我就没有备份,如editplus之类的【可以设置信息留在安装目录里,当然还要留着keygen】。

总体来说,安装完后,基本上能够很快恢复正常工作。

不过,如果您要安装的话,建议还是先把网卡驱动备份一下,以防万一。【驱动精灵好象有一个版本是带了N多网卡驱动的】这样,即使没有驱动还能上网找,不然就全完了。。

 

Tags: win7, firefox, portable

轻轻松松统计代码行数

前段时间有人问,如何统计自己的项目一共写了多少行代码,当时我说的是,遍历目录,然后用files函数读取每个要统计的文件【根据后缀名过滤】,并去掉空行,最后就把数字累加起来就可以了。

后来,他是google到一个专门统计代码的程序后搞定了。

刚才,看到cnitblog,有人这样写道:

XML/HTML代码
  1. find . -name "*.代码文件后缀" | xargs wc -l  
当然,这是在linux下面。。如果有SVN,还需要加上:
XML/HTML代码
  1. $find . -name "*.代码文件后缀" | grep -v "./svn" | xargs wc -l  
一切都是这么的自然。。。

linux下面的方法来自:http://www.cnblogs.com/maczpc/archive/2010/01/28/1658371.html

不同浏览器对回车提交表单的处理办法

不知道你是否注意过,在firefox或者Chrome下面,即使没有定义input type=submit,只要点击任何一个button,都能触发form 的submit事件,这是为什么呢?
看看这篇文章吧,介绍的有点详细,把它留下来是因为我一向属于知其然不知其所以然,只知道问题所在,和如何解决,从来不深究它的内涵,这也是我为什么水平上不去的原因。。。所以,不要学我,还是看完这篇文章吧。。。虽然不一定详细,但毕竟知其一部分所以然了。

原文来自:不同浏 览器对回车提交表单的处理办法
内容如下:

  在浏览器中填写表单的时,可以直接在“文本框”中敲击“Enter”来提交表单,很是方便。条件是:

  • 在IE和Firefox下

1、<form>属性的“action”字段必填;

2、有一个type="submit"的“input”。

  • 在Chrome和Safari下 满足第一条即可。(注释1)

  所以,如果要控制提交行为的话(比如,提交前检查必填项是否已填),可以在type="submit"的“input”后添加 Javascript“onXXX(比如onClick)”事件。而如果需要用异步交互来检测相关字段,则无效了。因为return false是作为onreadystate=的子函数,并不能控制全局。这时就需要用到<form>的 “onsubmit”属性(注释2)。比如:

HTML

<form name="form1" id="form1" action="act.php" method="post" onsubmit="myfn();return false;">
  •  myfn()是自己定义的函数:无论通过什么办法 (比如敲击“enter”或点击type="submit"(而不是type="button")的“input”按钮)提交,都会触发这个这个函数。于 是,大可不必再在type="submit"的“input”后添加Javascript事件“onXXX”了。直接在“onsubmit”中控制,更直 观与统一,除非有意控制提交方式(是onClick还是什么)。
  • return false位于末尾,表示不提交本表单。提交表单的字句document.form1.submit()可以作为myfn()的一个选择条件的分支。

总结:

  这样,<form>有“action”和“onsubmit”属性,有type="submit"的“input”的提交按钮后, 就可以在任何浏览器下(不行吗?请给我反馈)实现使用“Enter”键和鼠标都可以对表单的相关字段进行异步(Ajax)和同步(单纯的 Javascript)检查并予以提交。

其他:

1、如果使用type="button"来异步检测相关字段呢?

  这样,这个“input”必须得有一个事件触发器。在IE和FF下,无法直接在文本框中按下“Enter”来提交表单。如果要的话,需要使用额 外的函数来监听用户按下了什么,给出一个怎样的反映(注释3)。更糟糕的是,在Ch和Sa下,会忽略是否有type="submit"按钮,而直接根据 “action”属性来提交表单,如此以来,便无法实现预期的检测,可能还有更麻烦的后果。

2、如果不写“action”属性,直接异步提交表单呢?

  这样,通过异步的方式提交表单,而不仅仅是检测,这个属性则没有必要。而且还是多余。假如这样能提供更好的用户体验,何乐而不为呢?呵呵。

【参考】

1 在IE8,FF,Ch中测试有效。Opera和Sa没有测试。参考了这篇文章(http://tieba.baidu.com/f?kz=669494938

2 这篇文章(http://blog.csdn.net/xiewhenwe/archive/2009/11/08/4785469.aspx) 给了我借鉴

3 参考我以前的文章(http://www.cnblogs.com/lamper/archive/2010/02/06/1665117.html

 

Tags: form, firefox, chrome, ie, submit

Linux 上的free命令详解

看到有介绍,当然要了解一下详细情况了。毕竟,我的htc g2当初就是靠这个玩意简单的来判断是沃达丰版还是HTC版的【即32A还是32B】。

解释一下Linux上free命令的输出。

  下面是free的运行结果,一共有4行。为了方便说明,我们加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:

  • FO[2][1] = 999212
  • FO[3][2] = 305404
1 2 3 4 5 6
1
total used free shared buffers cached
2 Mem: 999212 967476 31736 0 50668 223000
3  -/+ buffers/cache: 693808 305404
4 Swap: 2048276 154524 1893752    

  free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这 个比较清楚,不说太多。

  free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(free),第二列是使用量(free),第三 列是可用量(free)。第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:

  • 999212KB(缺省时free的单位为KB)物理内存,即FO[2][1];
  • 在这些物理内存中有967476KB(即FO[2][2])被使用了;
  • 还用31736KB(即FO[2][3])是可用的;

这里得到第一个等式:

  • FO[2][1] = FO[2][2] + FO[2][3]

FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令 是怎么实现的)。

FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:

  • A buffer is something that has yet to be "written" to disk.
  • A cache is something that has been "read" from the disk and stored for later use.

也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并 由OS管理。

Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么FO[2][6](cached memory)比较大,而FO[2][3]比较小的原因。我们可以做一个简单的测试:

  1. 释放掉被系统cache占用的数据;
    echo 3 >/proc/sys/vm/drop_caches

     

  2. 读一个大文件,并记录时间;
  3. 关闭该文件;
  4. 重读这个大文件,并记录时间;

第二次读应该比第一次快很多。原来我做过一个BerkeleyDB的读操作,大概要读5G的文件,几千万条记录。在我的环境上,第二次读比第一次大 概可以快9倍左右。

 

  free输出的第二行是从一个应用程序的角度看系统内存的使用情况。

  • 对于FO[3][2],即-buffers/cache, 表示一个应用程序认为系统被用掉多少内存;
  • 对于FO[3][3],即+buffers/cache, 表示一个应用程序认为系统还有多少内存;

 

因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。

这里还用两个等式:

  • FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
  • FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

这二者都不难理解。

  free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的所有输出值都是从/proc/meminfo中读 出的。

在系统上可能有meminfo(2)这个函数,它就是为了解析/proc/meminfo的。procps这个包自己实现了meminfo()这个 函数。可以下载一个procps的tar包看看具体实现,现在最新版式3.2.8。

--EOF--

原文来自:http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html,作者就是coldplayerest