一笑聊斋——Linux版 歪酷博客
 
偶 最 喜 欢 的 词
  谁道闲情抛弃久
每到春来
惆怅还依旧
日日花前常病酒
不辞镜里朱颜瘦

河畔青芜堤上柳
为问新愁
何事年年有
独立小桥风满袖
平林新月人归后
网志文件夹
· 所有网志
· Linux 系统配置
· Linux 应用软件
· Bash Shell 编程
· GCC 开发
· Linux 内核驱动
· Game Design
· 笔记文摘书评
· 心得激情随感
· 未分类
快 速 入 口
· 一笑聊斋Win Native版[Old]
· VCKBASE 论坛
· LinuxSir 论坛
· 看雪学院论坛
· 绿盟安全论坛
· HB Hacker基地
· 罗云彬编程乐园
· Old Linux
· 我的管理快速入口
友 情 链 接
· Venture 's Blog
· 小力力力的Blog
· YangTze 's Blog
· 周星星的Blog
· 大浪淘沙的Blog
· CUICK 's Blog
· 阿荣的Blog
· VCAWP ‘s Blog
· nbxmedia 's Homepage
· eTony ‘s Blog
· jozu's Blog
最 新 的 评 论
搜 索
日 历
Linux Free Develop Mailing List
详 细 信 息
订阅 Mailing List
退订 Mailing List
与 我 联 系

订阅 RSS

0023596

歪酷博客

[B]书山无路劈荆棘,学海茫茫浮木舟!皇天厚赐我才庸,唯有搏命与天挣。不尽人世坎坷路,岂有繁华幸福驻?满怀壮志闯江湖,不立威名不归梓。 ——夜读自励 SmileOnce于2004年元月4日夜

追崇自由精神,弃Windows而转入Linux,正所谓:雄关漫道真如铁,而今迈步从头越! ——一笑写于2004年08月24日,聊表心志


文章版权归 乾坤一笑 所有,欢迎转载,转载请保证所引用文章的完整性并注明作者和出处。[/B]
乾坤一笑 @ 2004-10-22 16:39

// KillMe.cpp : haha, If you can kill me.......
//
// Coder Jozu

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <aclapi.h>

int main(int argc, char* argv[])
{
   HANDLE    hProcess;
   BOOL    bDone = FALSE;
   PACL    pACL;
   PSECURITY_DESCRIPTOR    psd = NULL;

   printf("My process id is 0x%X (%d). If you can kill me......\n", GetCurrentProcessId(), GetCurrentProcessId());
   printf("                                               Coder Jozu\n\n\n\n");
   __try
   {
       if(!DuplicateHandle(GetCurrentProcess(),
                           GetCurrentProcess(),
                           GetCurrentProcess(),
                           &hProcess,
                           PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | READ_CONTROL | WRITE_DAC,
                           FALSE,
                           0))
           __leave;
       
       if(ERROR_SUCCESS != GetSecurityInfo(hProcess,
                           SE_KERNEL_OBJECT,
                           DACL_SECURITY_INFORMATION,
                           NULL,
                           NULL,
                           &pACL,
                           NULL,
                           &psd))
           __leave;
       
       pACL->AceCount = 0;
       pACL->AclSize = sizeof(ACL);
       
       if(ERROR_SUCCESS != SetSecurityInfo(hProcess,
                           SE_KERNEL_OBJECT,
                           DACL_SECURITY_INFORMATION,
                           NULL,
                           NULL,
                           pACL,
                           NULL))
           __leave;
       
       LocalFree(psd);

       bDone = TRUE;
       
   }
   __finally
   {
       if(!bDone)
       {
           printf("Error occur, %X\n", GetLastError());
       }
   }

   printf("Try to kill me from task manager.....");
   getchar();

   return 0;
}

PS: jozu说,
ACL为NULL是全控制,ACL为empty是禁止访问  
不过发现一个进程的token如果有SeDebugPrivilege,这些限制全都没有用了,2ksp4版本以上,xp,2003在杀进程的时候,都把自己的debug权限打开,所以进程管理器能够杀死上面的那个版本


 
乾坤一笑 @ 2004-10-18 09:25

//
// wrote by **

#include <iostream>
using namespace std;

__declspec(naked) inline int __fastcall multiply10( int n )
{
   __asm {
       shl ecx, 1
       mov eax, ecx
       shl eax, 2
       add eax, ecx
       ret
   }
}

void main()
{
   int i = multiply10(-123);
   cout << i << endl;
}


 
乾坤一笑 @ 2004-09-19 10:11

我的源码如下:
[I]/* luoxuan.cpp
* author: smileonce
* my email: smileonce<at>126<dot>com
* date : 2004-9-19
*/[/COLOR][/I]
#include "stdafx.h"

#include <iostream>
[/COLOR]using namespace[/COLOR] std[B];[/COLOR][/B]

#define MAX 8
[/COLOR]typedef[/COLOR] char[/COLOR] BYTE[B];[/COLOR][/B]

void[/COLOR] clearMatrix[B]([/COLOR][/B]BYTE[B]*);[/COLOR][/B]
void[/COLOR] printMatrix[B]([/COLOR][/B]BYTE[B]*);[/COLOR][/B]
void[/COLOR] makeMatrix[B]([/COLOR][/B]BYTE[B]*,[/COLOR][/B] int[/COLOR][B]);[/COLOR][/B]


int[/COLOR] main[/COLOR][B]()
{[/COLOR][/B]
   BYTE a[MAX] = {0[/COLOR][B]};[/COLOR][/B]
   int[/COLOR] n[B] =[/COLOR][/B] 0[/COLOR][B];[/COLOR][/B]
   while[/COLOR][B]([/COLOR][/B] n[B] <[/COLOR][/B] 64[/COLOR][B] )
   {[/COLOR][/B]
       clearMatrix[B]([/COLOR][/B]a[B]);[/COLOR][/B]
       cout[B] <<[/COLOR][/B] "Input N: "[/COLOR][B];[/COLOR][/B]
       cin[B] >>[/COLOR][/B] n[B];[/COLOR][/B]
       makeMatrix[B]([/COLOR][/B]a[B],[/COLOR][/B] n[B]);[/COLOR][/B]
       printMatrix[B]([/COLOR][/B]a[B]);
   }[/COLOR][/B]
   return[/COLOR] 0[/COLOR][B];
}[/COLOR][/B]


void[/COLOR] makeMatrix[B]([/COLOR][/B]BYTE[B] *[/COLOR][/B] a[B],[/COLOR][/B] int[/COLOR] n[B])
{[/COLOR][/B]
   int[/COLOR] i[B],[/COLOR][/B] j[B],[/COLOR][/B] k[B];[/COLOR][/B]

   int[/COLOR] o_left[B],[/COLOR][/B] o_right[B],[/COLOR][/B] i_left[B],[/COLOR][/B] i_right[B];[/COLOR][/B][I] // find the area that we want filled.
                                         // o_ is for outside, i_ is for inside
                                         // _left is for leftside, _right is for rightside
[/COLOR][/I]    int[/COLOR] i_size[B];[/COLOR][/B][I]                           // the inside area size
[/COLOR][/I]
   for[/COLOR][B]([/COLOR][/B] i[B]=[/COLOR][/B]2[/COLOR][B];[/COLOR][/B] i[B]*[/COLOR][/B]i[B]<=[/COLOR][/B]n[B];[/COLOR][/B] i[B]+=[/COLOR][/B]2[/COLOR][B])
       ;[/COLOR][/B]
   i_size[B]  = ([/COLOR][/B]i[B]-[/COLOR][/B]2[/COLOR][B]) * ([/COLOR][/B]i[B]-[/COLOR][/B]2[/COLOR][B]);[/COLOR][/B][I]          // remember the size of inside square
[/COLOR][/I]
   i_left[B]  =[/COLOR][/B] MAX[B]/[/COLOR][/B]2[/COLOR][B] -[/COLOR][/B] i[B]/[/COLOR][/B]2[/COLOR][B] +[/COLOR][/B]1[/COLOR][B];[/COLOR][/B]
   i_right[B] =[/COLOR][/B] MAX[B] -[/COLOR][/B] i_left[B] -[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B]
   o_left[B]  =[/COLOR][/B] i_left[B] -[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B]
   o_right[B] =[/COLOR][/B] i_right[B] +[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B][I]

   //------ fill inside area of the matrix
   //-- set the mask
[/COLOR][/I]    for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]0[/COLOR][B],[/COLOR][/B] j[B]=[/COLOR][/B]0x01[/COLOR][B];[/COLOR][/B] i[B] <=[/COLOR][/B] i_left[B] -[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B] i[B]++,[/COLOR][/B] j[B] <<=[/COLOR][/B] 1[/COLOR][B])
       ;[/COLOR][/B]
   for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]0[/COLOR][B],[/COLOR][/B] k[B]=[/COLOR][/B]0[/COLOR][B];[/COLOR][/B] i[B]<[/COLOR][/B]i_right[B]-[/COLOR][/B]i_left[B]+[/COLOR][/B]1[/COLOR][B];[/COLOR][/B] i[B]++,[/COLOR][/B] j[B]<<=[/COLOR][/B]1[/COLOR][B] )[/COLOR][/B]
       k[B] +=[/COLOR][/B] j[B];[/COLOR][/B][I]
   //-- fill by using mask
[/COLOR][/I]    for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]i_left[B];[/COLOR][/B] i[B]<=[/COLOR][/B]i_right[B];[/COLOR][/B] i[B]++)
       *([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) = *([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) |[/COLOR][/B] k[B];[/COLOR][/B][I]

   //------ fill outside area of the matrix
[/COLOR][/I]    n[B] -=[/COLOR][/B] i_size[B] ;[/COLOR][/B][I]                                //this is the count of outside print steps
   //---- left
[/COLOR][/I]    for[/COLOR][B] ([/COLOR][/B]k[B]=[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_left[B],[/COLOR][/B] i[B]=[/COLOR][/B]i_right[B];[/COLOR][/B] n[B] >[/COLOR][/B]0[/COLOR][B] &&[/COLOR][/B] i[B]>[/COLOR][/B]o_left[B];[/COLOR][/B] i[B]--,[/COLOR][/B] n[B]--)
     *([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) |=[/COLOR][/B] k[B];[/COLOR][/B][I]
   //---- top    
[/COLOR][/I]    if[/COLOR][B] ([/COLOR][/B]n[B]==[/COLOR][/B]0[/COLOR][B])[/COLOR][/B] return[/COLOR][B];[/COLOR][/B]
   for[/COLOR][B] ([/COLOR][/B]j[B] =[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_left[B],[/COLOR][/B] i[B]=[/COLOR][/B]o_left[B],[/COLOR][/B] k[B]=[/COLOR][/B]0[/COLOR][B];[/COLOR][/B] n[B] >[/COLOR][/B]0[/COLOR][B] &&[/COLOR][/B] i[B]<[/COLOR][/B]o_right[B];[/COLOR][/B] i[B]++,[/COLOR][/B] j[B]<<=[/COLOR][/B]1[/COLOR][B],[/COLOR][/B] n[B]--)[/COLOR][/B]
       k[B]+=[/COLOR][/B]j[B];
   *([/COLOR][/B]a[B]+[/COLOR][/B]o_left[B]) |=[/COLOR][/B] k[B];[/COLOR][/B][I]
   //---- right        
[/COLOR][/I]    for[/COLOR][B] ([/COLOR][/B]k[B] =[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_right[B],[/COLOR][/B] i[B]=[/COLOR][/B]o_left[B];[/COLOR][/B] n[B] >[/COLOR][/B]0[/COLOR][B] &&[/COLOR][/B] i[B]<[/COLOR][/B]o_right[B];[/COLOR][/B] i[B]++,[/COLOR][/B] n[B]--)
       *([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) |=[/COLOR][/B] k[B];[/COLOR][/B][I]
   //---- bottom
[/COLOR][/I]    if[/COLOR][B] ([/COLOR][/B]n[B]==[/COLOR][/B]0[/COLOR][B])[/COLOR][/B] return[/COLOR][B];[/COLOR][/B]
   for[/COLOR][B] ([/COLOR][/B]j[B] =[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_right[B],[/COLOR][/B] i[B]=[/COLOR][/B]o_right[B],[/COLOR][/B] k[B]=[/COLOR][/B]0[/COLOR][B] ;[/COLOR][/B] n[B] >[/COLOR][/B]0[/COLOR][B] &&[/COLOR][/B] i[B]>[/COLOR][/B]o_left[B];[/COLOR][/B] i[B]--,[/COLOR][/B] j[B]>>=[/COLOR][/B]1[/COLOR][B],[/COLOR][/B] n[B]--)[/COLOR][/B]
       k[B]+=[/COLOR][/B]j[B];
   *([/COLOR][/B]a[B]+[/COLOR][/B]o_right[B]) |=[/COLOR][/B] k[B];

}[/COLOR][/B][I]


// print the matrix, for testing.
[/COLOR][/I]void[/COLOR] printMatrix[B]([/COLOR][/B]BYTE[B] *[/COLOR][/B]a[B])
{[/COLOR][/B]
   int[/COLOR] i[B],[/COLOR][/B] j[B],[/COLOR][/B] k[B];[/COLOR][/B]
   for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]0[/COLOR][B];[/COLOR][/B] i[B]<[/COLOR][/B]MAX[B];[/COLOR][/B] i[B]++)
   {[/COLOR][/B]
       for[/COLOR][B] ([/COLOR][/B]j[B]=[/COLOR][/B]0[/COLOR][B],[/COLOR][/B] k[B]=[/COLOR][/B] 0x01[/COLOR][B];[/COLOR][/B] j[B]<[/COLOR][/B]MAX[B];[/COLOR][/B] j[B]++,[/COLOR][/B] k[B]<<=[/COLOR][/B]1[/COLOR][B])[/COLOR][/B]
           if[/COLOR][B] ( *([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) &[/COLOR][/B] k[B] )[/COLOR][/B]
               cout[B] <<[/COLOR][/B] "1"[/COLOR][B] <<[/COLOR][/B] " "[/COLOR][B];[/COLOR][/B]
           else[/COLOR] cout[B] <<[/COLOR][/B] "0"[/COLOR][B] <<[/COLOR][/B] " "[/COLOR][B];[/COLOR][/B]
       cout[B] <<[/COLOR][/B] endl[B];
   }[/COLOR][/B]    
   cout[B] <<[/COLOR][/B] endl[B];
}[/COLOR][/B][I]


//initialize the matrix, make every bit is 0
[/COLOR][/I]void[/COLOR] clearMatrix[B]([/COLOR][/B]BYTE[B] *[/COLOR][/B]a[B])
{[/COLOR][/B]
   int[/COLOR] i[B];[/COLOR][/B]
   for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]0[/COLOR][B];[/COLOR][/B] i[B]<[/COLOR][/B]MAX[B];[/COLOR][/B] i[B]++)
       *([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) =[/COLOR][/B] 0x00[/COLOR][B];
}[/COLOR][/B]



 
乾坤一笑 @ 2004-09-19 10:05

题目:这是一道用于解决图形处理上的一个算法实例,要求占用最小的空间和最高的效率来实现。

假设有N×N的一个数字矩阵,矩阵中的每一个元素可能为0或者1。初始化状态下,整个矩阵都为0。现在要对矩阵中的N个元素赋值为1,这N个元素的选取方法如下:从矩阵最中间的4个元素组成的小正方形左上角的那个元素开始,依次顺时针旋转,所经元素均赋值为1,直到经过了N个元素为止。
一圈旋转完之后继续接着它旋转,具体示例如下:

Input N: 4
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0
0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Input N: 5
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0
0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Input N: 6
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0
0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

Input N: 7
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 1 1 0 0 0
0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0



点击这里查看我写的代码
    


 
乾坤一笑 @ 2004-09-03 11:47

切换模式如下:
:%!xxd


 
乾坤一笑 @ 2004-08-31 19:15

据我的不断测试,linux下比较好用,功能比较强的Mame模拟器当数Advance Mame

AdvaneceMame很容易安装配置,不再细表。这里要着重指出的几点就是:
1、roms路径的设置:
    roms的默认路径是/usr/share/advance/rom/,当然你也可以指定其他路径,通过修改advmame的配置文件~/.advance/advmame.rc,在里面的dir_rom这一行加上你的rom路径:
dir_rom /root/.advance/rom:/usr/share/advance/rom:/progbak/GAmE/mame/mame_roms
注意,多个路径用:隔开。

2、进入游戏后可以按p暂停/恢复游戏,然后案tab键对整个游戏环境(键盘布局、游戏分辨率、音频输出等)进行设置。

3、rom可以在ROM的传人网站下载。下载有个技巧,就是你现把所有mame游戏的抓图下载下来(大概90M左右),然后按图索骥来的比较快。

好啦,祝你找到自己喜欢的游戏,回忆自己美好的童年。


 
乾坤一笑 @ 2004-08-31 19:08

如果你是通过源码安装StarDict的语音模块(WyabdcRealPeopleTTS.tar.bz2)的,你会发现源码包中并未有安装脚本或者安装说明。在朋友释雪的帮忙下,我通过如下方法解决了这个问题:
1、把WyabdcRealPeopleTTS.tar.bz2解压缩到/usr/share下,下面是我的目录结构:
root@smileonce:~# ls /usr/share/WyabdcRealPeopleTTS/
README  b  d  f  h  j  l  n  p  r           s  u  w  y
a       c  e  g  i  k  m  o  q  readme.txt  t  v  x  z
root@smileonce:~#

2、在StarDict的设置中,把"首选项"->"浮动窗口"->"选项"->"弹出时朗读单词"打开。

如此一改,StarDict就可以正常发音了。


 
乾坤一笑 @ 2004-08-31 14:33

关键的问题是把man手册转换成txt输出,例如我想打印vsftpd的配置手册,我可以:

man vsftpd.conf | col -b > vsftpd_conf.txt

然后再打印vsftpd_conf.txt就行了。


 
乾坤一笑 @ 2004-08-29 11:48

星际译王(StarDict)的“启动时隐藏主窗口”功能可把我给整惨了。

原以为他有类似于Windows下金山词霸那样的功能,自动缩小到系统托盘里面。谁知道,没有!它一隐藏就呼唤不出来了:p (我用KDE的朋友告诉我他们能看到,但是gnome确实不行,或许这点作者没有考虑到也难说)

root@smileonce:~# ps -x
PID        TTY     STAT    TIME   COMMAND
......................
9399      ?         S         0:00   /usr/bin/galeon-bin
9437      pts/1   Ss       0:00   bash
9440      ?         T         0:00   /usr/bin/stardict
9465      ?         S         0:01   /usr/bin/skype

经过许久的寻觅,终于找到了它的配置文件,这才重新见到StarDict的主窗口,
解决方法如下:
root@smileonce:~# cat /root/.gconf/apps/stardict/preferences/main_window/%gconf.xml

<?xml version="1.0"?>
<gconf>
       <entry name="hide_on_startup" mtime="1093681720" type="bool" value="true">
       </entry>
        .......................

把 上面那行的value值改成false启动的时候就不会隐藏主窗口了。


不过,总体来说,星际译王是一款非常好的词典,比某些国产商业的词典还要好用,主要可定制强、能自己挂载字典。不是好东东,我也不能费这么大的劲,嘿嘿。


 
乾坤一笑 @ 2004-08-28 22:52

在网页中使用<bksound>标签可以播放midi,但是无法自由控制它的播放,用wma对象则比较方便。

下面是个例子,照抄即可。

 <object align=middle classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" class=OBJECT id=MediaPlayer width=135 height=135>
    <param name=ShowStatusBar value=0>
      <param name=Filename value="http://www.jazzsky.com/music/song/D/yumeji'stheme.wma">
       <embed type=application/x-oleobject codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" >
    </embed>
 </object>