03

git-shell报错
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

已经在/etc/passwd文件中将登陆用户的shell改为git-shell
git:x:502:502::/home/git:/usr/local/bin/git-shell

解决办法:
将目录~git/contrib/git-shell-commands拷贝到git用户下/home/git/
修改所有者chown -R git.git git-shell-commands
如果该目录下的help和list没有执行权,那么再给它加执行权
chmod +x /home/git/git-shell-commands/help
chmod +x /home/git/git-shell-commands/list

su git测试下,应该能看见
Run ‘help’ for help, or ‘exit’ to leave. Available commands:list
命令描述,摘自README
help: Prints out the names of available commands.
list: Displays any bare repository whose name ends with “.git” under user’s home directory.

Tags: ,

作者:Jock

14

原创内容转载请注明来源 http://www.hjide.com/article/479.htm

从网上找的源代码,发现有很多问题。

首先是每次查找都是通过RandomAccessFile的文件指针的移动来定位,修改为增加一个MappedByteBuffer的内存映射文件试图提高查找效率,

接着发现在多线程环境下会出现问题,发现用来记录指针的变量是类的成员对象,多线程不能共用一个实例,增加一个同步锁就有违修改的初衷。

于是经过大量修改后有了现在这个版本,源代码请移步https://github.com/jockhuang/iplocation 下载。

Tags: ,

作者:Jock

14

2个文件需要修改

第一个文件:/root/nginx-1.0.11/src/core/ngx_times.c

1、(计算字符串的长度?)

static u_char cached_http_log_time[NGX_TIME_SLOTS]
[sizeof("28/Sep/1970:12:00:00 +0600")];

修改为

static u_char cached_http_log_time[NGX_TIME_SLOTS]
[sizeof("1970-09-28 12:00:00")];

 

2、(计算字符串的长度?)

ngx_cached_http_log_time.len = sizeof(“28/Sep/1970:12:00:00 +0600“) – 1;

修改为

ngx_cached_http_log_time.len = sizeof(“1970-09-28 12:00:00“) – 1;

 

3、(关键的地方,修改格式)

p2 = &cached_http_log_time[slot][0];

(void) ngx_sprintf(p2, “%02d/%s/%d:%02d:%02d:%02d %c%02d%02d”,
tm.ngx_tm_mday, months[tm.ngx_tm_mon - 1],
tm.ngx_tm_year, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec,

修改为

p2 = &cached_http_log_time[slot][0];

(void) ngx_sprintf(p2, “%4d-%02d-%02d %02d:%02d:%02d”,
tm.ngx_tm_year, tm.ngx_tm_mon,
tm.ngx_tm_mday, tm.ngx_tm_hour,
tm.ngx_tm_min, tm.ngx_tm_sec,

 

第二个文件:/root/nginx-1.0.11/src/http/modules/ngx_http_log_module.c

{ ngx_string(“time_local”), sizeof(“28/Sep/1970:12:00:00 +0600“) – 1,
修改为
{ ngx_string(“time_local”), sizeof(“1970-09-28 12:00:00“) – 1,

Tags: , ,

作者:Jock

22

FusionCharts v3.1 的flash文件下载。完全支持导出为jpg,png,pdf功能。
下载

作者:Jock

19

1.JAVA基本数值型和String型数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    //插入记录
    String aKey = "myLong";
    DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));    
 
    // Now build the DatabaseEntry using a TupleBinding
    Long myLong = new Long(123456789l);
    DatabaseEntry theData = new DatabaseEntry();
    EntryBinding myBinding = TupleBinding.getPrimitiveBinding(Long.class);
    myBinding.objectToEntry(myLong, theData);
 
    // Now store it
    myDatabase.put(null, theKey, theData);
 
  
    //读出记录
    String aKey = "myLong";
    DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8"));
    
    // Need a DatabaseEntry to hold the associated data.
    DatabaseEntry theData = new DatabaseEntry();
 
    // Bindings need only be created once for a given scope
    EntryBinding myBinding = TupleBinding.getPrimitiveBinding(Long.class);
 
    // Get it
    OperationStatus retVal = myDatabase.get(null, theKey, theData,
                                            LockMode.DEFAULT);
    String retKey = null;
    if (retVal == OperationStatus.SUCCESS) {
        // Recreate the data.
        // Use the binding to convert the byte array contained in theData
        // to a Long type.
        Long theLong = (Long) myBinding.entryToObject(theData);
        retKey = new String(theKey.getData(), "UTF-8");
        System.out.println("For key: '" + retKey + "' found Long: '" +
                            theLong + "'.");
    } else {
        System.out.println("No record found for key '" + retKey + "'.");
    }

更多详细内容 »

作者:堕落天使

19

一、             简介
       Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。
l         能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。
l         多线程支持,JE使用超时的方式来处理线程间的死琐问题。
l         Database都采用简单的key/value对应的形式。
l         事务支持。
l         允许创建二级库。这样我们就可以方便的使用一级key,二级key来访问我们的数据。
l         支持RAM缓冲,这样就能减少频繁的IO操作。
l         支持日志。
l         数据备份和恢复。
l         游标支持。
二、             获取JE
JE下载地址:
http://www.oracle.com/technology/software/products/berkeley-db/je/index.html
解开包后 把JE_HOME/lib/je-.jar 中的jar文件添加到你的环境变量中就可以使用je了。
相关帮助文档可以参考 JE_HOME/docs/index.html
源代码见JE_HOME/src/*.*
三、             JE常见的异常
DatabaseNotFoundException 当没有找到指定的数据库的时候会返回这个异常
DeadlockException 线程间死锁异常
RunRecoveryException 回收异常,当发生此异常的时候,你必须得重新打开环境变量。
四、             关于日志文件必须了解的六项
JE的日志文件跟其他的数据库的日志文件不太一样,跟C版的DBD也是有区别的
l         JE的日志文件只能APPEND,第一个日志文件名是 00000000.jdb,当他增长到一定大小的时候(默认是10M),开始写第二个日志文件00000001.jdb,已此类推。
l         跟C版本有所不同,JE的数据日志和事务日志是放在一起的,而不是分开放的。
l         JE cleaner负责清扫没用到的磁盘空间,删除后,或者更新后新的记录会追加进来,而原有的记录空间就不在使用了,cleaner负责清理不用的空间。
l         清理并不是立即进行的,当你关闭你的数据库环境后,通过调用一个cleaner方法来清理。
l         清理也不是只动执行的,需要你自己手动调用cleaner 方法来定时清理的。
l         日志文件的删除仅发生在检查点之后。cleaner准备出哪些log 文件需要被删除,当检查点过后,删掉一些不在被使用的文件。每写20M的日志文件就执行一次检查点,默认下。
五、             创建数据库环境
JE要求在任何DATABASE操作前,要先打开数据库环境,就像我们要使用数据库的话必须得先建立连接一样。你可以通过数据库环境来创建和打开database,或者更改database名称和删除database.
可以通过Environments对象来打开环境,打开环境的时候设置的目录必须是已经存在的目录,否则会出错误。默认情况下,如果指定的database不存在则不会自动创建一个新的detabase,但可以通过设置setAllowCreate来改变这一情况。
更多详细内容 »

作者:堕落天使

19

package test;
import com.sleepycat.je.*;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
import com.sleepycat.bind.serial.SerialBinding;
import java.io.File;
public class test {
    public static void main(String[] args) {
    
    }
    
    /**
     * 打开和关闭环境,示例一
     *
     */
    public void eg1(){
        //—-打开环境,如果不存在,则创建一个————
        Environment myDbEnvironment=null;
        try {
            EnvironmentConfig envConfig = new EnvironmentConfig();
            envConfig.setAllowCreate(true); //true不存在就创建,false如果不存在则打开环境失败
            //envConfig.setReadOnly(true); //true 以只读方式打开,如果是多进程应用,每个进程都要设置为true
            //envConfig.setTransactional(true);//true支持事务,false不支持,默认false。可以更改配置文件来设置此参数。
            myDbEnvironment = new Environment(new File(“.//”), envConfig);//环境所在路径
            java.util.List myDbNames = myDbEnvironment.getDatabaseNames(); //得到所有的数据库的名字
            for(int i=0; i
                System.out.println(“Database Name: ” + (String)myDbNames.get(i));
            }
        } catch (DatabaseException dbe) { 更多详细内容 »

作者:堕落天使

14

//如果对该Field还设置了Field.Store为Field.Store.YES或Field.Store.COMPRESS,则可以检索
public static final Index NO = new Index(“NO”);

//对Field进行索引,同时还要对其进行分词(由Analyzer来管理如何分词)
public static final Index ANALYZED = new Index(“ANALYZED”);
//废弃的属性,使用ANALYZED 来替代
public static final Index TOKENIZED = ANALYZED;
//对Field进行索引,但是不对该Field使用分词
public static final Index NOT_ANALYZED = new Index(“NOT_ANALYZED”);
//废弃的属性,使用NOT_ANALYZED来替代
public static final Index UN_TOKENIZED = NOT_ANALYZED;
//即不对Field索引,也不对其使用Analyzer来分词
public static final Index NOT_ANALYZED_NO_NORMS = new Index(“NOT_ANALYZED_NO_NORMS”);
//废弃的属性,有NOT_ANALYZED_NO_NORMS来替代
public static final Index NO_NORMS = NOT_ANALYZED_NO_NORMS;
//对Field属性,使用分词,但是不是使用Analyzer来分词
public static final Index ANALYZED_NO_NORMS = new Index(“ANALYZED_NO_NORMS”);

作者:堕落天使

26

玩 Linux 最常見的方式就是切 Partition 做多重開機, 讓 GRUB 寫入 MBR 做開機選單. 但是若不小心把 Linux Partition 刪掉了, 或是哪天不想玩 Linux 了, 想恢復為 Windows 單一作業環境的時候, 就得把 Windows Pre-Boot 程式寫回 MBR 的前 446 Bytes 喔!

方法一:使用 DOS / Win9x / ME 開機片開機

開機後在 MS-DOS 模式下執行 fdisk /mbr
重新啟動電腦即可

方法二:使用 Windows 2000 / XP 光碟片開機 (過程中需要 Administrator 密碼)

在 Welcome to Setup (歡迎使用安裝程式) 畫面中按 R 或 F10 進入「Windows 修復主控台」

進入主控台後, 輸入 fixmbr
重新啟動電腦即可

詳細操作過程請參考微軟官方網頁 – Windows XP 修復主控台的說明 更多详细内容 »

作者:Jock

26

Apache中URL的Rewrite
现在讲究面向搜索引擎的开发。当我们使用jsp时,搜索引擎的收藏效果不是很好,所以我们可以转义这样的URL。比如:我们可以借助rewrite使用/blog/user/0.html来访问/blog/user/blog_show.jsp?userid=0使搜索引擎更容易搜集到我们的网站信息。具体配置很简单,介绍如下

首先:还是打开%Apache2%\conf文件夹,找到http.conf文件,搜索rewrite找到#LoadModule rewrite_module modules/mod_rewrite.so,将它前面的#去掉。
然后在你要使用的VirtualHost中加入

RewriteEngine   on
#打开rewrite引擎
RewriteLog       logs/rewrite.log
#rewrite日志,可选配置,建议使用
RewriteLogLevel 3
#rewrite日志等级,默认为0不记录,所以只要使用日志,就要配置,3就全记录了,可以更大但没有什么意义。
RewriteRule     /blog/user/(.+)\.html$ /blog/user/blog_show.jsp?userid=$1  [PT ]
#转义的规则,使用正则表达式(我也不熟,自己去研究吧),我上面的例子是将/blog/user/*.html的URL转义成/blog/user.blog_show.jsp?userid=*。
注意后面的 PT 这是保证你这样转义之后Apache能将它转给Tomcat否则Apache会自己处理这个链接,造成什么也得不到。
注意 PT ,[R]的区别,使用 PT 在客户地址栏的显示还是*.html,如果将 PT 换成[R]则地址栏也会显示成.jsp

Tags: ,

作者:Jock

Switch to our mobile site