Author: admin

Oracle Jobs与Exp/Imp

最近因为一点儿小问题,用Exp/Imp做了一次数据恢复。恢复以后本来正常的snapshot刷新出了问题,job不工作了,本来一天要更新两次数据,现在数据停止更新了。 用system登录oracle,然后select * from dba_jobs;发现所有的jobs的LOG_USER和PRIV_USER变成了system用户,而SCHEMA_USER还是原来的用户,而且NEXT_DATE也变的面目全非。原来是Imp时jobs全部corrupt掉了。 出现这个情况的原因是Exp和Imp的时候都是使用的system用户,所以为带有jobs的用户做Exp/Imp时,一定要用这个用户自身来导入、导出。

延迟中断请求级(lazy IRQL)

因为访问可编程中断控制器(PIC)是相对较慢的操作,需要访问I/O总线来改变中断请求级(IRQL)的硬件抽象层(HAL),比如为了访问中断控制器(PIC)和32位高级配置电源接口(ACPI)系统,实现了一个性能优化 ,谓之延迟中断请求级(lazy IRQL),来尽量避免可编程中断控制器(PIC)访问。当中断请求级(IRQL)上升以后,硬件抽象层(HAL)在内部记录该中断请求级(IRQL)而不是来改变中断屏蔽(interrupt mask)。如果一个低优先级的中断随之而来,硬件抽象层(HAL)为前面的中断设置合适的中断屏蔽(interrupt mask),也就是实实在在的提升中断请求级(IRQL),从而延迟这个低优先级的中断直到中断请求级(IRQL)降低。这样以来,当中断请求级(IRQL)升高时如果没有低优先级的中断发生,硬件抽象层(HAL)并不真正的去修改可编程中断控制器(PIC)。

windows内核函数命名规则(system routine naming convention)

windows内核函数命名的一般格式为: <Prefix><Operation><Object> Prefix指示导出该例程的组件,Operation指出对对象或资源做什么样的动作,Object标示操作的对象或资源。比如ExAllocatePoolWithTag是一个执行体(Executive)例程,用来从分页池(paged pool)或非分页池(nonpaged pool)中分配内存。KeInitializeThread是一个分配并且设置内核线程对象(kernel thread object)的内核例程。

gitweb配置(configuration)

gitweb是git的web接口,使用单向的http协议来发布git repositories。 通过gitweb可以来浏览任意版本的目录树,查看文件的内容,查看分支的log或shortlog,检视commits,commit信息以及指定commit所做的改变。gitweb可以产生RSS或Atom格式的feeds。可以获取任意指定版本的文件,如果允许,也可以下载指定版本的快照(snapshot)。也可以通过作者、提交者或者包含的某些提交信息来搜索commits。 gitweb的配置比较简单。 Debian默认将gitweb脚本gitweb.cgi安装到/usr/lib/cgi-bin/目录,使用的配置文件为/etc/gitweb.conf。 我将gitweb作为一个单独的虚拟主机来配置,gitweb的主目录为/home/${username}/public_html/pcware.cn/git,此处的${username}指代所在主机上的用户名,gitweb的主目录可以依个人喜好设置。

基于KWinUI的换肤框架KSkinX的简单Demo

KWinUI虽然很简洁,但仍然可以做不少事情。曾经有段时间,基于KWinUI写了一个换肤框架叫做KSkinX,现在就放出KSkinX的一个简单Demo。因为KSkinX还比较粗糙,比如滚动条的换肤尚未实现、标题栏按钮的处理还有待改进、实现的窗口组件还太少等原因,所以暂时还不开放源代码。 下面是这个换肤Demo的snapshots: Demo程序从此下载。

Ubuntu 9.04下安装Firefox 3.5正式版(Release)

让我们翘首企盼的firefox 3.5正式版(Release)于6月30日正式推出,但是Ubuntu社区却迟迟没有更新,至今已经有半月,官方源仍然毫无动静,难道是因为bug太多,要等到firefox 3.5.1再进行更新?不得而知了。 看来暂时只有自己动手,丰衣足食了。对于firefox的安装我不推荐使用非官方源,而是从Mozilla下载更新,3.5与以前的版本并存,这样当Ubuntu官方源更新的时候,可以顺利的更新到最新的官方firefox版本。 firefox 3.5的安装比较简单,从mozilla下载回来的文件名字为firefox-3.5.tar.bz2,遵循FHS(Filesystem Hierarchy Standard)的指导意见,firefox最好安装到/opt目录下面,用下面的命令直接把bz2包解压到/opt目录下就可以了。 tar jxvf firefox-3.5.tar.bz2 -C /opt 这样就算安装完成了,命令行运行/opt/firefox/firefox或者建一个桌面快捷方式都可以,记得一定要运行/opt/firefox目录下的firefox,而不是firefox-bin或run-mozilla.sh。 这样两个版本的firefox使用同一套profile,可以和平共处,至于暂时不兼容的插件(Extensions)hack一下吧。

KWinUI Sample:圆形滑动条(round slider)

这是早先发表于cppblog.com的一篇文章,现在稍作整理,迁移到此处。原文在此。 此sample主要是展示一个圆形的滑动条(Slider)组件,可以做播放器的音量按钮等此类的东西,还算比较酷。使用到的KRoundSlider类已经包含在KWinUI源代码中。

KWinUI sample:工作线程(work thread)中的UI窗口

在一个多线程应用程序中,进程创建的第一个线程我们称之为主线程(main thread),而从主线程中通过系统调用派生的其他线程称之为工作线程(work thread)。虽然习惯上这么称呼,而在实际上这两种线程并没有本质的差别,他们的能力是完全一样的,唯一的区别就在于派生的先后顺序而已。

VirtualBox虚拟硬盘VDI扩展容量(resize/expand capacity)

虽然VirtualBox支持虚拟硬盘的动态扩展,也就是VDI文件的大小随着guest使用的容量而增大,但是动态扩展的上限就是你最初指定的虚拟硬盘的大小值。也许是因为心理的原因,这个值你指定的过小了,你使用了一段时间才会发现这个问题。我就是这样:(。但是很不幸,现在VirtualBox还没有提供改变虚拟硬盘大小上限的功能。其实安装guest时完全可以指定一个很大的值,毕竟它不会占用多余的硬盘空间,仅仅占用guest真正利用到的空间而已。但是问题已经出现了,重新来过显然太过麻烦了,办法还是有的。