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

oracle收购sun

这段时间最大的新闻莫过于SUN被收购了,收购人不是IBM而是oracle
新闻那是铺天盖地呀,去CNBETA看看就知道了,但对于我来说,关心的只有几点:

1、MYSQL会怎么个走法?
2、以后java会怎么继续
3、服务器价格会下降吗?

更多新闻请google一下就知道了

Tags: mysql, oracle, sun, ibm

js控制网页播放器MEDIA PLAYER的相关知识

没想过要用这个东西,但群里有人问,这个地址也是群里的朋友贴出来的,仔细想想这个东西也有应用的场景,比如歌词的控制。能够得到播放时间,就能够控制歌词的显示了。估计那些用JS做的播放器大致都是这样的吧?猜测而已

内容如下:http://roln.cn/archives/80

<!–播放器 开始–>
 <object id=”Exobud” style=”width: 273px; height: 64px” type=”application/x-oleobject”
  classid=”CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6″>
  <param name=”URL” value=”"/>
  <param name=”rate” value=”1″/>
  <param name=”balance” value=”0″/>
  <param name=”currentPosition” value=”0″/>
  <param name=”defaultFrame” value=”"/>
  <param name=”playCount” value=”1″/>
  <param name=”autoStart” value=”-1″/>
  <param name=”currentMarker” value=”0″/>
  <param name=”invokeURLs” value=”-1″/>
  <param name=”baseURL” value=”"/>
  <param name=”volume” value=”80″/>
  <param name=”mute” value=”0″/>
  <param name=”uiMode” value=”full”/>
  <param name=”stretchToFit” value=”-1″/>
  <param name=”windowlessVideo” value=”0″/>
  <param name=”enabled” value=”-1″/>
  <param name=”enableContextMenu” value=”0″/>
  <param name=”fullScreen” value=”0″/>
  <param name=”SAMIStyle” value=”"/>
  <param name=”SAMILang” value=”"/>
  <param name=”SAMIFilename” value=”"/>
  <param name=”captioningID” value=”"/>
  <param name=”enableErrorDialogs” value=”0″/>
  <param name=”_cx” value=”7223″/>
  <param name=”_cy” value=”1693″/>
 </object> <!–播放器 结束–>
1 单项播放很简单,这里粗略的说一下
 通过网页传参在后台cs页面绑定一个变量
html
<param name=”URL” value=”<% = Url%>”/>
cs
public string Url;
Url = 从数据库中读取

2 让播放器播放多首歌曲并循环播放呢
思路就是建一个播放列表,然后通过js来控件.

第一种方法 (此方法最终行不通)
建立一个数组相当于播放列表alist(假设这是用户选择歌曲后的结果)

js
var num = 0
function Onload(){
var Exobud = document.getElementById(”Exobud”);
Exobud.URL = alist[num];
Exobud.controls.play();
num ++;
}
通过PlayStateChange监听播放状态 ,8表示播放结束
<script for=”Exobud” EVENT=”PlayStateChange(stats)”>
if(stats == 8 )
Exobud.URL = alist[num];
Exobud.controls.play();
//alert(Exobud.URL);
num ++
</script>
到此播放正常,当播放下一首歌的时候就定住了.非要手动去点播放.不知道是何原因?
在网上查,有一仁兄弟好像解决过这问题,说是放第二首歌的时候,仍然是在第一首歌的播放状态下,所以就一直是停的.
解决办法,就是每首歌只播放一次,但不知道改那里.播放器参数中每首歌是设的播放一次.
另一种办法就是加一个alert(Exobud.URL);这样就可以自动播放,但总弄个弹窗不好吧.
到现在还没弄明白是么回事.如有人知道请留言跟贴,帮我解决一哈.

第二种方法.现已解决.能正常使用. 思路就是用setTimeout()不停的循环,然后控件播放列表的索引得到值来改变URL

先建立一个播放列表
假设用户所选的歌曲参数已传过来
播放列表如下
<select name=”SongList” size=”5″ >
        OnDblClick=”player();”>
            <option value=”songs/001.mp3″>001</option>
            <option value=”songs/002.wma”>002</option>
            <option value=”songs/003.WMV”>003</option>
            <option value=”songs/004.mp3″>004</option>
            <option value=”songs/005.wma”>005</option>
 </select>
同时设置几个按钮
<a href=”#” onclick=”javascript:play();”>on</a>
<a href=”#” onclick=”javascript:Last_OneOK();”>last</a>
<a href=”#” onclick=”javascript:Next_OneOK();”>next</a>

js
<script language=”JavaScript”>
        //var server=’http://localhost/music/’;
        var SongList = document.getElementById(”SongList”);
        var Exobud = document.getElementById(”Exobud”);
        var TotalSongs = SongList.options.length;
        function play()
        {
        SongList.options[0].selected=true;
        player();
        }
        function player(){
      if(SongList.selectedIndex < 0) alert(’系统错误,请选择您要播放的曲目!’);
      else{
      var url;
      url = SongList.options[SongList.selectedIndex].value;
      Exobud.URL=url;
      //alert(TotalSongs);
      Exobud.controls.play();
      showTLab();
      return;
      }
        }
   
        function showTLab(){
      if(Exobud.playState == 1)
      Next_OneOK();
      setTimeout(”showTLab()”, 1000);
        }
   
        function Next_OneOK(){
      if(SongList.selectedIndex >= 0){
      if(SongList.selectedIndex < TotalSongs-1){
       SongList.options[SongList.selectedIndex + 1].selected = true;
        player();
      }else{
       SongList.options[0].selected = true;
        player();
      }
       }
         }
         function Last_OneOK(){
      if((SongList.selectedIndex > 0) && (SongList.selectedIndex < TotalSongs)){
      SongList.options[SongList.selectedIndex - 1].selected = true;
      player();
         }
         }
    </script>

这样问题就解决了.
注音乐文件都是我本地的

附上media player的一些控制方法

player.controls.play(); 播放
player.controls.stop(); 停止
player.controls.pause(); 暂停
player.controls.currentPosition 返回播放文件的当前时间位置(以秒为单位)
player.controls.currentPositionString 时间格式的字符串 “0:32″
player.currentMedia.duration 返回播放文件的总长度(以秒为单位)
player.currentMedia.durationString 时间格式的字符串 “4:34″
player.settings.volume 音量 (0-100)
player.settings.balance 声道,通过它应该可以进行立体声、左声道、右声道的控制。但对应的取值尚不清楚。
player.settings.mute = s 静音(s取值为true和false)
player.closedCaption.CaptioningID 网页中出现字幕的容器的ID
player.closedCaption.SAMIFileName 字幕文件地址
player.playState 返回播放器状态( 3:正在播放,2:暂停1:已停止)

Tags: 播放器

免费webService

这个东西,我实在不知道放在哪个分类了。。但因为我是用PHP进行开发的,因此我还是将它归为PHP分类

昨天在Yhustc的博客上看城管操作手册,结果顺便看到了这个免费的webservice列表

yhustc的博客功能越来越强大了,支持直接的ID的文章,现了也支持这种以英文名为路径的文章了,等再强一点,我也考虑换成yblog,哈哈,不过,要等他写转sablog的程序(实在是2.0到现在都没有出来,等的心急了)

对于sablog,我在另外的应用里,已经将它的模版机制全部转为discuz的,因为自己熟悉DZ的模版,改起来更快了。只是不知道何年才会派上用场。。。。

废话说了这么多,上重点的:

某网站支持

国内手机号码归属地查询WEB服务
2400多个城市5日天气预报 WEB服务
股票行情数据 WEB 服务(支持香港、深圳、上海基金、债券和股票;支持多股票同时查询)
中国电视节目预告(电视节目表)
火车时刻表 WEB 服务
IP地址来源搜索 WEB 服务
等等...

是什么网站呢?Look。。。

http://www.webxml.com.cn/zh_cn/web_services.aspx

其他两种我不懂,但wsdl我还是懂的。啥时候有空看看,oh yeah

Tags: webservice

重拾:自己动手做一个最小的Linux kernel

文章来自至顶网,两年前的内容,只是感觉好象不错,就复制了过来。
原文链接如下:
http://soft.zdnet.com.cn/software_zone/2007/1022/570485.shtml
http://soft.zdnet.com.cn/software_zone/2007/1020/568251.shtml

很难想象,2居然比1先出来。

Linux 能有多小呢 ? 每一个做 embedded 系统的人都把小看成第一要务,其实这是不对的。小当然不会比较坏,但不一定比较好。如果系统使用 4MB 和 5MB 没有价格或性能上的差别,那 4MB 和 5MB 是一样好的。

到底有多小

废话说了一堆,那到底 Linux 有多小呢? 好吧,各位这么有小牛顿的精神。我也只好想办法生一个答案出来了。

首先我必须声明,我的不一定最小。不要说我在欺骗世人,你的核心比我小。我无意比较,我的数据只是给大家一个参考而己。不过我欢迎大家提出自己的心得,告诉大家怎么样做出更小的核心。

我使用的是 Mandrake 内付的 2.2.15,我没有修改任何一行程序码,完全只靠修改组态档得到这些数据。

首先,使用 make xconfig 把所有可以拿掉的选项都拿得。

不要 floppy;

不要 SMP,MTRR;

不要 networking,SCSI;

把所有的 block device 移除,只留下 old IDE device;

把所有的 character device 移除;

把所有的 filesystem 移除,只留下 minix;

不要 sound 支援。

相信我,我己经把所有的选项都移除了。这样做之后,我得到了一个 188K 的核心。 还不够小吗? OK,再加上一招,请把下列二个档案中的 -O3,-O2 用 -Os 取代。

 

./Makefile 
./arch/i386/kernel/Makefile

这样一来,整个核心水小了 9K,成为 179K。不过这个核心恐怕很难发挥 Linux 的功能,因此我决定把网络加回去。把 General 中的 network support 加回去,重新编译,核心变成 189 K。10K 换个 TCP/IP stack,似乎是很上算的生意。不过有 stack 没有 driver 也是惘然,所以我把 embedded board 常用的 RTL8139 的 driver 加回去,195K。

如果你需要 DOS 档案系统,那大小成为 213K。如果 minix 用 ext2 换代,则大小成长至 222K。不过大家要注意,那里的大小指的是核心档的大小。那和所需要的随取记忆体是二回事。这个数字代表的意义是你需要多小的 ROM 来存放你的核心。

Linux 所需的记忆体大约在 600~800 K 之间。1MB 可能可以开机了,但可能不太有用。因为可能连载入 C 程序库都有困难。2MB 应该就可以做点事了,但可能要到 4MB 以上才可以执行一个比较完整的系统。

到底谁占了这些空间

看到这里,是不是觉得 Linux 真的有点大。好吧! 那我们就来看看谁占用了这些空间,下面这个列表是从 222K 这个核心做出来的。

 

# wc  
arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/fs.o
ipc/ipc.o
fs/filesystems.a
net/network.a
drivers/block/block.a
drivers/char/char.a
drivers/misc/misc.a
drivers/net/net.a drivers/pnp/pnp.a
/usr/src/smalllinux/arch/i386/lib/lib.a
/usr/src/smalllinux/lib/lib.a
/usr/src/smalllinux/arch/i386/lib/lib.a

结果如下 :

 

243 2250 81946 arch/i386/kernel/kernel.o 
42 316 10569 arch/i386/mm/mm.o
173 1541 74660 kernel/kernel.o
266 2307 68053 mm/mm.o
222 3139 123193 fs/fs.o
49 602 21600 ipc/ipc.o
263 2940 106504 fs/filesystems.a
137 1510 65512 net/network.a
92 719 39178 drivers/block/block.a
230 2308 87556 drivers/char/char.a
1 1 8 drivers/misc/misc.a
83 721 25680 drivers/net/net.a
1 1 8 drivers/pnp/pnp.a
20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a
23 150 7714 /usr/src/smalllinux/lib/lib.a
20 187 9526 /usr/src/smalllinux/arch/i386/lib/lib.a
1865 18879 731233 total

先说明一下,这里的大小和最终的大小有点差别,但大致还是可以做个参考。这边显示 730K 实际上大约在 600K 左右。

很显然的,filesystem 相当的大。大约在 230K 左右,占了 1/3 的体积。记忆体管理占了 80K,和核心其它部份的总合差不多。TCP/IP stack 占了 65K,驱动程序占了 120K。SysV IPC 占了 21K,必要的话可以拿掉,核心档应该可以再小个 10K 左右。

所以如果要减核心大小,应该动那里呢? 答案应该很明显,当然是档案系统。Linux 的 VFS 减化了档案系统的设计,buffer cache, directory cache 增加了系统的效率。但这些对整个系统都在 flash 上的 embedded 系统而言根本就用处不大。如果可以把它们对拿掉,核心可以马上缩小 20K 左右。如果跳过整个 VFS,直接将档案系统写成一个 driver 的型式,应该可以将 230K 缩减至 50K左右。整个核心缩到 100K 左右。

从上面的数据来看,ucLinux 所减小的 mm 部份反到省的不多,主要是 mm 除了 virtual memory 之外,也要处理 memory allocation 的部份,这部份是省不得的。如果二者齐做,则 100K 以下的 Linux 核心不是不可能的事。

结语

如果有人有闲的话,不妨拿 2.0 或 1.0 的核心来试试。看能做出多小的核心。看完本文后,143K 的核心不再是技术上的挑战了,是吗? 也许明天就有人宣称做了 120K 的核心了。不过,所为何来,省那几十K。不如好好想想 compressed filesystem 等更有用的技术吧!

Tags: linux, kernel

MySQL-Proxy的安装配置

本来对于mysql proxy 0.70的release是仅仅当成一个新闻来报道的。结果,老王却写了一篇教你如何配置的文章,你说我是转好呢还是不转好呢?
上午我刚写,人家老王下午就来配置,你说我不转,对得起人家伐?
所以,我只好辛苦一点,,转载一下喽。。

感谢老王

原文:http://hi.baidu.com/thinkinginlamp/blog/item/f96559821fbda8aa0cf4d200.html

MySQL-Proxy二进制版本的安装相对简单,无需多言,下面介绍的是源代码安装:

安装pkg-config

tar zxvf pkg-config-0.23.tar.gz
cd pkg-config-0.23
./configure
make
make install

确保PKG_CONFIG_PATH环境变量包含了相关的pkg-config配置文件路径:

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

安装libevent

tar zxvf libevent-1.4.10-stable.tar.gz
cd libevent-1.4.10-stable
./configure
make
make install

安装glib

tar zxvf glib-2.20.0.tar.gz
cd glib-2.20.0
./configure
make
make install

安装lua

tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4

如果你的服务器是64位的,这时要调整一下Makefile:vi src/Makefile,在CFLAGS里加上-fPIC,否则会出错:

/usr/bin/ld: /usr/local/lib/liblua.a(lapi.o):
relocation R_X86_64_32 against `luaO_nilobject_' can not be used when making a shared object;
recompile with -fPIC
/usr/local/lib/liblua.a: could not read symbols: Bad value

接下来不用执行常见的configure,直接make:

make linux
make install

安装pkg-config配置文件,以便编译mysql-proxy时能找到lua:

cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc

如果没有执行此步骤的话,在后面编译安装mysql-proxy的时候,会得到类似下面的错误信息:

Package lua5.1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `lua5.1.pc'
to the PKG_CONFIG_PATH environment variable
No package 'lua5.1' found

安装mysql

这里介绍的是完整安装mysql,其实你只要安装mysql开发包即可。

tar zxvf mysql-5.1.33.tar.gz
cd tar zxvf mysql-5.1.33
./configure
make
make install
cp support-files/mysql.server /etc/init.d/mysql
chown +x /etc/init.d/mysql
cp support-files/my-[small|medium|large|huge|innodb-heavy-4G].cnf /etc/my.cnf

如果my.cnf里有skip-federated选项,就注释它,否则安装数据库的时候会出现类似下面的错误:
[ERROR] /usr/local/libexec/mysqld: unknown option '--skip-federated'

/usr/local/bin/mysql_install_db --user=mysql
/usr/local/bin/mysqld_safe --user=mysql &

保证系统能找到mysql_config,后面编译mysql-proxy会用到它:

export PATH=$PATH:/usr/local/bin

还要保证系统能找到mysql库文件:

vi /etc/ld.so.conf 加入/usr/local/lib目录

执行:/sbin/ldconfig /etc/ld.so.conf

安装mysql-proxy

tar zxvf mysql-proxy-0.7.0.tar.gz
cd mysql-proxy-0.7.0
./configure
make
make install

按照官方介绍做好启动脚本/etc/init.d/mysql-proxy和参数脚本/etc/sysconfig/mysql-proxy,并设置:

chmod +x /etc/init.d/mysql-proxy
chkconfig --add mysql-proxy

搞定了,测试一下:/usr/local/sbin/mysql-proxy -V。官方论坛里有很多讨论,可以参阅。

Tags: mysql proxy, 老王