Tuesday, May 17, 2005

Oracle 9i iSQL*Plus DBA Access

默认情况下,9i中的iSQL*Plus DBA是无法登录的,可以使用如下方法创建一个Apache的授权用户:

%ORACLE_HOME%\Apache\Apache\bin>htpasswd %ORACLE_HOME%/sqlplus/admin/iplusdba.pw admin

“网络终断导致本地iman server停止”解决办法

目前很多自适应的网卡都会因网络线的断开而无法使用网络,甚至不能ping 自己,这程功能被称作“媒体探测”(Media Sense),如果正在使用本机上的IMAN,那就会使Orbixd服务中断

我们可以通过修改注册表来关闭网络适配器的媒体探测特性,具体方法如下:

在HKLM \System\CurrentControlSet\Services\Tcpip\Parameters下,有一个名为 DisableDHCPMediaSense,类型为DWORD的的键(如果没有就手动创建一个),当它值为1时,就关闭了媒体探测的特性,当值为0时就 是开启该功能。

修改后,当你拔下网线,系统虽然还是显示网线没有连接,但绑定在网卡上的IP仍然是有效.大家可以试试.

Saturday, May 14, 2005

如何实现网页自动跳转

使用如下网页作为目录首页可实现自动跳转功能,URL的值即为目标地址。

<html>
<head>
<p>Redirecting to a pretty site...</p>
<META HTTP-EQUIV="refresh" content="0;url=http://blog.hpgms.com">
</head>
</html>

If you want to wait few i.e. 3 seconds then just change "0" to "3".

正则表达式使用详解

作者:吕晓波

如果我们问那些UNIX系统的爱好者他们最喜欢什么,答案除了稳定的系统和可以远程启动之外,十有八九的人会提到正则表达式;如果我们再问他们最头痛的是 什么,可能除了复杂的进程控制和安装过程之外,还会是正则表达式。那么正则表达式到底是什么?如何才能真正的掌握正则表达式并正确的加以灵活运用?本文将 就此展开介绍,希望能够对那些渴望了解和掌握正则表达式的读者有所助益。

入门简介
  简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi 编辑器,Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的 局限,成为人们广为接受的概念和功能。
  正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
  举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户 所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正 则表达式在WEB应用的逻辑判断中具有举足轻重的作用。

基本语法
  在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。
  正则表达式的形式一般如下:
  /love/
  其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用 户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即 位于元字符前面的字符)在目标对象中的出现模式。
  较为常用的元字符包括: “+”, “*”,以及 “?”。其中,“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次,而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。
  下面,就让我们来看一下正则表达式元字符的具体应用。
  /fo+/
  因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
  /eg*/
  因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。
  /Wil?/
  因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。
  除了元字符之外,用户还可以精确指定模式在匹配对象中出现的频率。例如,
  /jim/
  上述正则表达式规定字符m可以在匹配对象中连续出现2-6次,因此,上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。
  在对如何使用正则表达式有了初步了解之后,我们来看一下其它几个重要的元字符的使用方式。
  \s:用于匹配单个空格符,包括tab键和换行符;
  \S:用于匹配除单个空格符之外的所有字符;
  \d:用于匹配从0到9的数字;
  \w:用于匹配字母,数字或下划线字符;
  \W:用于匹配所有与\w不匹配的字符;
  . :用于匹配除换行符之外的所有字符。
  (说明:我们可以把\s和\S以及\w和\W看作互为逆运算)
  下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。
  /\s+/
  上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。
  /\d000/
  如果我们手中有一份复杂的财务报表,那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。
  除了我们以上所介绍的元字符之外,正则表达式中还具有另外一种较为独特的专用字符,即定位符。定位符用于规定匹配模式在目标对象中的出现位置。
  较为常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。其中,“^”定位符规定匹配模式必须出现在目标字符串的开头,“$”定位符规定匹配模式必须出现在目标对象的结尾,\b定位符规定匹配模式必须 出现在目标字符串的开头或结尾的两个边界之一,而“\B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字 符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把“^”和“$”以及“\b”和“\B”看作是互为逆运算的两组定位符。举例来说:
  /^hell/
  因为上述正则表达式中包含“^”定位符,所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。
  /ar$/
  因为上述正则表达式中包含“$”定位符,所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。
  /\bbom/
  因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。
  /man\b/
  因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
  为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
  /[A-Z]/
  上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。
  /[a-z]/
  上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。
  /[0-9]/
  上述正则表达式将会与从0到9范围内任何一个数字相匹配。
  /([a-z][A-Z][0-9])+/
  上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc”等的字符串匹配,因为“abc”中的最后一个字符为字母而非数字。
  如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。例如:
  /to|too|2/
  上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。
  正则表达式中还有一个较为常用的运算符,即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如:
  /[^A-C]/
  上述字符串将会与目标对象中除A,B,和C之外的任何字符相匹配。一般来说,当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,则应当被视做定位符。
  最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符“\”。例如:
  /Th\*/
  上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。

使用实例

  在对正则表达式有了较为全面的了解之后,我们就来看一下如何在Perl,PHP,以及JavaScript中使用正则表达式。

  通常,Perl中正则表达式的使用格式如下:

  operator / regular-expression / string-to-replace / modifiers

  运算符一项可以是m或s,分别代表匹配运算和替换运算。

  其中,正则表达式一项是将要进行匹配或替换操作的模式,可以由任意字符,元字符,或定位符等组成。替换字符串一项是使用s运算符时,对查找到的模式匹配对象进行替换的字符串。最后的参数项用来控制不同的匹配或替换方式。例如:

  s/geed/good/

  将会在目标对象中查找第一个出现的geed字串,并将其替换为good。如果我们希望在目标对象的全局范围内执行多次查找—替换操作的话,可以使用参数 “g”,即s/love/lust/g。

  此外,如果我们不需要限制匹配的大小写形式的话,可以使用参数 “i ”。例如,

  m/JewEL/i

  上述正则表达式将会与目标对象中的jewel,Jewel,或JEWEL相匹配。

  在Perl中,使用专门的运算符“=~”指定正则表达式的匹配对象。例如:

  $flag =~ s/abc/ABC/

  上述正则表达式将会把变量$flag中的字串abc替换为ABC。

  下面,我们就在Perl程序中加入正则表达式,验证用户邮件地址格式的有效性。代码如下:

--------------------------------------------------------
  #!/usr/bin/perl
  # get input
  print “What's your email address?\n”;
  $email =
  chomp($email);
  # match and display result
  if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/)
  {
  print(“Your email address is correct!\n”);
  }
  else
   {
    print(“Please try again!\n”);
   }
--------------------------------------------------------

  如果用户更偏爱PHP的话,可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下:
   ereg(pattern, string)

  其中,pattern代表正则表达式的模式,而string则是执行查找替换操作的目标对象。同样是验证邮件地址,使用PHP编写的程序代码如下:

--------------------------------------------------------
  <?php
   if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email))
    { echo “Your email address is correct!”;}
   else
    { echo “Please try again!”;}
   ?>
--------------------------------------------------------

  最后,我们在来看一下JavaScript。JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。

  我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。

--------------------------------------------------------
  <html>
   <head>
    <script language="Javascript1.2">
     <!-- start hiding
     function verifyAddress(obj)
     {
      var email = obj.email.value;
      var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
      flag = pattern.test(email);
      if(flag)
      {
       alert(“Your email address is correct!”);
       return true;
      }
      else
       {
        alert(“Please try again!”);
        return false;
        }
      }
     // stop hiding -->
    </script>
   </head>
   <body>
   <form onsubmit="return verifyAddress(this);">
   <input name="email" type="text">
   <input type="submit">
   </form>
  </body>
 </html>
--------------------------------------------------------

青 春 - サミエル.ウルマン


青 春


原作 サミエル.ウルマン
邦訳 岡田 義夫


青春とは人生のある期間を言うのではなく、心の様相ようそうを言うのだ。
優れた創造力、逞しき意志、炎ゆる情熱、怯懦きょうだを却ける勇猛心、安易を振り
捨てる冒険心、こう言う様相を青春と言うのだ。
年を重ねただけで人は老いない。理想を失うときに初めて老いが来る。歳月は
皮膚のしわを増すが、情熱を失う時に精神はしぼむ。
苦悶や狐疑こぎや、不安、恐怖、失望、こう言うものこそ恰あたかも長年月の如く人を老い
させ、精気ある魂をも芥あくたに帰せしめてしまう。
年は七十であろうと十六であろうと、その胸中に抱き得るものは何か。
曰く、驚異への愛慕心、空にきらめく星辰、その輝きにも似たる事物や思想に対
する欽仰、事に処する剛毅な挑戦、小児の如く求めて止まぬ探求心、人生への
歓喜と興味。人は信念と共に若く 疑惑と共に老ゆる、
人は自信と共に若く 恐怖と共に老ゆる、
希望ある限り若く  失望と共に老い朽ちる。
大地より、神より、人より、美と喜悦、勇気と壮大、そして偉力の霊感を受ける限
り、人の若さは失われない。 これらの霊感が絶え、悲嘆の白雪が人の心の奥
までも蔽いつくし、皮肉の厚氷あつごおりがこれを堅くとざすに至れば、この時にこそ人は
全く老いて、神の憐れみを乞うる他はなくなる。

青 春 - 塞缪尔.厄尔曼

青 春

塞缪尔.厄尔曼

青春不是年华, 而是心境;
青春不是桃面, 丹唇, 柔膝,
而是深沉的 意志, 恢宏的想象, 炙热的恋情;
青春是 生命的涌泉在涌现.

青春气贯长江, 勇锐盖过怯弱, 进取压倒苟安.
如此锐气, 二十后生 而有之, 六旬男子则更多见.
年岁有加, 并非垂老, 理想丢弃, 方堕 暮年.

岁月悠悠, 衰微只及肌肤;
热忱抛却, 颓废必致灵魂.
忧烦, 惶恐, 丧失自信, 定使心灵纽曲, 意气如灰.
无论年盖花甲, 拟或二八佳龄,
心中皆有生命之欢乐, 奇迹之诱惑, 孩童般天真久盛不衰.

人人心中皆有一台天线,
只要你从天上人间接受 美好, 希望, 欢乐, 勇气和力量的信号,
你就青春永驻, 风华常存.

一旦天线降下, 锐气便被冰雪覆盖,
玩世不恭, 自暴自弃由然而生,
即使年方二十, 实已垂垂老矣;
然则只要树起天线, 捕捉乐观信号,
你就有望在八十高龄告别尘寰时仍觉年轻.

YOUTH - Samuel Ullman

Y o u t h

Samuel Ullman

Youth is not a time of life; it is a state of mind;
it is not a matter of rosy cheeks, red lips and supple knees;
it is a matter of the will, a quality of the imagination, a vigor of the emotions;
it is the freshness of the deep springs of life.

Youth means a temperamental predominance of courage over timidity of the appetite,
for adventure over the love of ease. This often exists in a man of sixty more than a boy of twenty.
Nobody grows old merely by a number of years.
We grow old by deserting our ideals.

Years may wrinkle the skin, but to give up enthusiasm wrinkles the soul.
Worry, fear, self-distrust bows the heart and turns the spirit back to dust.
Whether sixty or sixteen, there is in every human being's heart the lure of wonder,
the unfailing child-like appetite of what's next, and the joy of the game of living.

In the center of your heart and my heart there is a wireless station;
so long as it receives messages of beauty, hope, cheer,
courage and power from men and from the infinite, so long are you young.

When the aerials are down,
and your spirit is covered with snows of cynicism and the ice of pessimism,
then you are grown old, even at twenty ,
but as long as your aerials are up, to catch the waves of optimism,
there is hope you may die young at eighty.

UNIX/Linux Screenshots

Living happily with UNIX/Linux

在FreeBSD下安装的VMware 2000
在Debian Sarge下安装的VM2000中做有限元分析
在Debian Sarge中安装的VMware 2000
这张图让我想起买足彩的日子,中了4块钱一柱的三等奖
UNIX下的Windows终端连接工具 Rdesktop
Another screenshot
One More screenshot, BSD UNIX
在VMWARE里安装的SCO UNIX,显卡驱动不起来
在VMWARE里安装的Solaris, 看起来还不错~
在Vmware@debian里安装的oracle10g@Solaris10
另一张Debian + Solaris10@VMware5的screenshot

GIANT, My favorite

GIANT OCR3-BLACK
GIANT TCR3
GIANT TCR AERO3
GIANT TCR AERO1
GIANT TCR COMPOSITE TEAM
GIANT WAPR DJ
GIANT ATX 660
GIANT AtX 680
GIANT ATX 760
GIANT ATX 780
GIANT C.ROCK.1
GIANT C.ROCK
GIANT UCAN 1 ZO
GIANT UCAN 2 ZO (我的座骑)
GIANT UCAN 3 ZO
GIANT SPIDER
GIANT SPIDER SX
GIANT SPIDER LX
GIANT SPIDER EX
GIANT SPIDER DX

PizzaHut沙拉塔的堆叠方案分析

本文通过分析必胜客沙拉塔的堆叠问题,提出一种能够使堆叠的沙拉塔体积最大化的方案,即将胡萝卜条呈放射状铺在盘子的外缘,并探出接近一半的长度, 以此为底,再使用菠萝块摆在外围作为承重墙,中间摆放喜爱的内容,如此逐层提高,便可达到理想高度,从而得到理想体积。最后,本文给出了堆叠沙拉塔的图文 攻略。

1、问题提出

   必胜客(PizzaHut)内有28元的自助沙拉,方法是向一只空碗内放入喜爱的各色沙拉原料。据说,国外必胜客的自助沙拉吃完是可以续添的,可是国内 似乎无此规定。当然,追求尽可能多的码放是几乎每个消费者的目标。本文目的就是讨论如何才能达到这一目标,并给出一种合理可行的方法。

2、问题分析

  追求码放质量的极大化,属于极值问题。码放出来的沙拉塔形状近似是一个圆台体,在认为各材料密度近似的假设下,只需使圆台体的体积极大即可。

3、模型假设

3.1 忽略各种材料的密度差异;

  胡萝卜和黄桃不是一种东西,密度自然也不相同,但是为了便于分析,将其视为同密度物质;

3.2 忽略材料之间的缝隙;

  各种材料之间不可避免的会有很多空洞,虽然可以用葡萄干、玉米粒等小颗粒来填补,但是仍然会有不少空洞;这里将其忽略之;

3.3 认为沙拉塔的外形是圆台体;

  因为盘子内部——即盘子边缘所在平面到盘子底部这部分容积——无论何种码放方法,都是填满内容的,所以这部分体积对不同的方法贡献相同,故不予考虑;圆台体的形状,用通俗的话说,就是圆锥体平行于底面切去上方尖部后所剩形状。

3.4 认为萝卜条是横截面为正方形的立方柱;

  横截面为正方形的立方柱,举例来说,如0.5 cm ×0.5 cm ×10cm即是。

4、模型建立

  在上述假设成立的情况下,沙拉塔纵向截面图如图4-1所示。


图4-1 沙拉塔纵向截面

模型建立如下:

  在盘子(图 4-1中黑色部分)大小固定的情况下,使沙拉塔(图4-1中粉黄色部分)的体积V极大化。目标函数为:


5、模型计算


5.1 体积计算


  将尺寸标注于图 4-1之上,得到图 5-1。


图 5-1沙拉塔纵向截面尺寸标注图

  如图 5-1所示,R表示盘子外缘的半径,R1表示圆台体上底的半径,R2表示圆台体下底的半径,H表示圆台体的高,γ表示所示的夹角。

  根据圆台体积的计算公式,有:

  其中,表示圆台体上底面积,表示圆台体下底面积,且有S1、S2

  将(5-2)式代入(5-1)中,有

  这就是所求圆台的体积。从(5-3)式可以看出,当R1、R2、H任一值增大,都会使V增大。

  显然,当R1、R2固定时,H是一个线性因子,这和习惯相符,即码放得越高,体积越大。当H固定时,R1、R2共有三种关系:

  1)、如图 5-2 (a)所示:这种形状比较稳定,易于实现。
  2)、如图 5-2 (b)所示:这种形状还算稳定,是1)的一种极限情况。
  3)、如图 5-2 (c)所示:这种形状不稳定,难以实现。

图 5-2 (a) R1 < R2

图 5-2 (b) R1 = R2

图 5-2 (c) R1 > R2

图 5-2 R1 和R2的三种关系下沙拉塔的纵向截面图

  从便于操作的角度讲,我们对情况(c)不予考虑。当然,(c)未必不可实现,只是由于可操作性太差。一旦坍塌,就糗大了!稳妥起见,这里选择情况(a)和情况(b)进行讨论,即R1 ≤ R2

5.2 R2极大化

  显然,关键在于如何使 R2 极大化。换句话说,在盘子的外缘半径R一定的情况下,如何搭建底层,使 R2 极大,是使沙拉塔体积极大的关键。

  根据实际情况,可选的“建筑材料”有:胡萝卜条、菠萝块、黄桃块、苹果块、黄瓜片、沙拉酱、玉米粒、青豆、青椒圈(有的店缺)等等…………

  我们采用具有最长长度的胡萝卜条作为底层的建材。根据假设,认为萝卜条是横截面为正方形的立方柱,如图 5-3 (a)所示。其横截面如图 5-3 (b)所示,是个正方形;纵截面如图 5-3 (c)所示,是个矩形。


图 5-3 胡萝卜条横截面和纵截面

  胡萝卜条如图 5-4 (a) 呈放射状摆放,根部相接,外部探出盘子外缘一截,尺寸标注如图。其中绿色部分放大如图 5-4 (b)所示。


图 5-4 胡萝卜条摆放图

  根据几何关系,有如下等式成立:

  当 θ →0时,有

  因为实际上的 θ 很小,可以近似认为 c 、d 、e 相等。则可摆放胡萝卜条的数量N为:

  下面寻求 r 的计算表达式。显然有:

  设 k 为探出系数,有:

  代入,得:

  于是,有:

  根据

  有

  式(5-15)就是 R2 的表达式。

  因为要使 R2 极 大化,而 R 和 L 是定值,故需要使 k 极大化。k 的取值范围在 0 ~ 1 之间,根据杠杆原理, k ≤ 0.5 可以使萝卜条稳定在盘内,如果 k > 0.5,萝卜条会掉出盘子。当然可以在 k > 0.5 的情况下,往萝卜条上压一些材料使其保持平衡,但是这种努力很容易失败,不符合我们期望找到一种简便稳妥方法的初衷,故不予考虑。

  在 k = 0.5 的情况下,可得到 R2 极值为:

  此时,萝卜条个数为


6、模型验证

  某日,和丹佛、Spring 一同去安贞华联的 PizzaHut 饕餮,要了一份自助沙拉。测量了一下各参数,数值如下:

  取k = 1/3,计算得到N = 37根,实际上也正好是37根,如图 6-1完全吻合!

  接着,按照前述方法,层层摆放,因为只有3人,不想浪费,所以只摆了6层的圆台体,便收工开吃了。最后3人吃到半S,沙拉堆到了嗓子眼儿,差点P掉……


图 6-1 胡萝卜条摆放图

7、图文攻略

摄影者: IT民工,丹佛
拍摄时间:Oct 30, 2004
拍摄地点:学院路百盛超市必胜客店
建筑工人:IT民工,丹佛,COZO,阿木

  不得不说两句啊,不知道必胜客其他店情况如何,这次去学院路百盛超市必胜客店,发现和上次安贞华联必胜客店相比,地基材料胡萝卜条和承重墙材料菠萝块明显减肥成功!严重BS一个!

  不管这许多,让我们开始吧!Are you ready?Here we go!

7.1 洗干净双手

  双手是最灵巧的,洗干净它们,准备开工吧!

7.2 要一个空盘作为建筑材料集中盘

  一定要向服务员要一个空盘子,用来临时盛放建筑材料。这样可以方便多人并行操作:一人挑选形状强度都合适的材料并放置在盘子内,另一人从盘子中抓取材料来堆放沙拉塔。

7.3 填满沙拉碗的底部凹坑

  最喜欢吃什么?我觉得黄桃不错,所以就放了好多黄桃块填满沙拉碗的底部凹坑,又放了一些玉米粒之类的小东西塞空隙,直到接近平面。

7.4 在沙拉碗边沿按照幅射状贴萝卜条做地基

  这 一点真的很重要,万丈高楼平地起,没有稳定的地基,沙拉塔垒起来也不踏实。分析了参考文献中的几种方法之后,决定还是采用萝卜条来打底最合适。一定要仔细 挑选健康茁壮矍铄挺拔大小相近的萝卜条!萝卜条探出的比率尽量接近0.5,这个探出系数经实践证明是比较可靠滴。萝卜条之间底部接触,顶部分散,呈辐射 状,如图 7-1。为了萝卜条能够贴得结实些,需要使用适量沙拉酱做胶水,自己掌握这个度吧。


图 7-1 萝卜条打地基

  比较一下图 6-1 和图 7-1 这两幅图吧,一个只需要37根就搞定,而这个竟然需要52根!萝卜条缩水缩的好厉害!而且,学院路百盛超市必胜客店二楼自助沙拉区竟然没有放萝卜条!再次BS一个~~~

7.5 使用菠萝块压住萝卜条地基的内圈

  如图 7-2,用菠萝块压住萝卜条地基的内圈,防止萝卜条掉出来。

   萝卜条打底之后,将菠萝块作为承重墙。因为它足够结实,又呈良好的立方体形状,和黄桃块相比,它的摩擦力足够,不像黄桃块那么滑溜。菠萝块的选取原则是 个头均匀,四四方方,硬一点。还有,因为泡得久了,所以它含的水分较大,在上面材料的重压之下,盘子边缘会渗水出来,小心不要滴到衣服上啦。

  在这里再次抗议一下商家不要把菠萝块切的太薄了,严重影响建筑工人的施工情绪!


图 7-2 内圈菠萝块压住萝卜条

7.6 使用菠萝块压住萝卜条地基的外圈

  如图 7-3,尽可能把这一圈扩大点,这就是沙拉塔圆柱体的底面了。


图 7-3 外圈菠萝块压住萝卜条

7.7 在菠萝圈围成的凹坑内填上喜爱的材料,然后用黄瓜片覆盖,制造完美平台

  如图 7-4,萝卜条打底,菠萝块承重,黄瓜片放在菠萝块上,将高低层次不齐的顶面抹平。通常1~2层黄瓜片就足够了。有了这么完美的平台,还有什么搞不定?


图 7-4 用黄瓜片搭建平台

7.8 平台外圈围上菠萝块做承重墙

  如图 7-5,作为承重墙的菠萝块一定要选择个头均匀,形状规整,强度较大的。


图 7-5 平台外圈围上菠萝块做承重墙

7.9 在承重墙内填上喜爱的材料

  如图 7-6,因为菠萝块不厚道,所以承重墙是双层菠萝块,垒放更需技巧,因为不小心就会滑塌。保险起见,建议向内收一些。之后,在墙内填入喜爱的材料。三个黄瓜片就算是三个代表吧:P


图 7-6 在承重墙内填上喜爱的材料

7.10 又一个完美平台


  图 7-7是完美平台的俯视图,图 7-8是完美平台的侧视图。在这么完美的平台上搭建沙拉塔,我想,只有天空才是它的极限。



图 7-7 又一个完美平台


图 7-8 完美平台的侧面

7.11 快要完工之前

  如图 7-9,在这么完美的平台上搭建沙拉塔是一件赏心乐事,可是我们只有4人。本着不浪费的原则,我们见好就收,只搭了这么高。


图 7-9 快要完工之前

7.12 封顶

  图 7-10是封顶之后沙拉塔的俯视图。好歹也是一个塔,所以加个尖尖应该没人有意见,对吧。


图 7-10 沙拉塔封顶

  图 7-11是侧视图。是的,它并不高,但是它的底面积足够大。它不高,仅仅是由于我们3人胃容积之和的限制,如果愿意,3倍当前的高度,完全没有问题。做为图文教程示范,关键步骤都已经交代清楚了,这就够了。


图 7-11 沙拉塔侧面图

7.13 按人头分食,开吃喽!

  问服务员要几个空盘子,小心的将沙拉塔分食,这就没什么可说的了。千万小心,如果把胜利果实弄倒而被痛扁,我就更没话说了。






如何隐藏Orbix Daemon窗口

当 我们启动IMAN的时候,一下子跳出来三个窗口,有人觉得不爽,而对于用户来讲有用的只有一个,那就 是portal图形窗口,除了用上面的方法隐藏portal.bat命令窗口之外,也可以将orbix daemon窗口藏起来,方 法就是将orbix daemon作为NT SERVICE,端口为1572(类似于THREE-TIERS PORTAL SERVER),方法如下:

1. 设置环境变量
set ORBIX_HOME="path to %IPR%\orbix"
set IT_CONFIG_PATH="path to %IPR%\orbix\config"

2. 添加服务
%IPR%\orbix\bin\orbixd.exe -j

3. 启动服务
c:\ net start "Orbix Daemon"

4. 隐藏orbix daemon窗口
在portal.bat 中将orbix命令行注释掉
rem @echo Launching the Orbix Daemon process...
rem start "Orbix Daemon" /MIN %ORBIX_HOME%\bin\orbixd

接下来试试吧

Thanks 文江同志 Sharing this solution to me ~~

如何隐藏portal.bat窗口

启动IMAN的时候,是通过执行portal.bat来执行%JAVA_COMMAND%命令,命令行如下:

%JAVA_COMMAND_LINE%=
# java command
"%JRE_HOME%\bin\java"
# VM Parameters
-Xbootclasspath:%X_BOOTCLASSPATH%
-Dorg.omg.CORBA.ORBClass
=IE.Iona.OrbixWeb.CORBA.ORB
-Dorg.omg.CORBA.ORBSingletonClass
=IE.Iona.OrbixWeb.CORBA.singletonORB
-DIMAN_PORTAL_ROOT=%IPR%
# Classpath
-classpath "%IPR%;%IDR%;%IDR%\orbix.jar;
%IDR%\icctstubs.jar;
%IDR%\portal_patch.jar;%IPR%\jgraph.jar;
%IDR%\portal.jar;%IDR%\xml4j.jar;
%IDR%\xerces.jar;%IDR%\xalan.jar;%IDR%\java2com.jar;
%IDR%\shdocvw-neva.jar;
%IDR%\..."
# Main class here
com.ugsolutions.aif.AIFPortal
# portal.bat parameters
%1 %2 %3 %4 %5 %6 %7 %8 %9
# Execute it
%JAVA_COMMAND_LINE%

在JAVA_COMMAND_LINE 中使用控制台java命令来启动含有main class的AIFPortal类来引导IMAN, 众所周知,除了控制台命令java之外,还有一个图形方式的javaw,因此我们可以将JAVA_COMMAND_LINE中 的java改成javaw,只这样还不够,这样做只隐藏了java的控制台输出信息,还需要用后台方式运行javaw 命令行,语法如下:

%JAVA_COMMAND_LINE%=
# java command
"%JRE_HOME%\bin\javaw"
# VM Parameters
-Xbootclasspath:%X_BOOTCLASSPATH%
-Dorg.omg.CORBA.ORBClass=IE.Iona.OrbixWeb.CORBA.ORB
-Dorg.omg.CORBA.ORBSingletonClass
=IE.Iona.OrbixWeb.CORBA.singletonORB
-DIMAN_PORTAL_ROOT=%IPR%
# Classpath
-classpath "%IPR%;%IDR%;%IDR%\orbix.jar;
%IDR%\icctstubs.jar; %IDR%\portal_patch.jar;%IPR%\jgraph.jar;
%IDR%\portal.jar;%IDR%\xml4j.jar;
%IDR%\xerces.jar;%IDR%\xalan.jar;%IDR%\java2com.jar;
%IDR%\shdocvw-neva.jar;
%IDR%\wordexcel-neva.jar;%IDR%\ssoapplib.jar;
%IDR%\ssocommon.jar;" ... ...
# Main class here
com.ugsolutions.aif.AIFPortal
# portal.bat parameters
%1 %2 %3 %4 %5 %6 %7 %8 %9
# Execute it
rem %JAVA_COMMAND_LINE%
start "Portal Daemon" /B %JAVA_COMMAND_LINE%

现在,Portal.bat的命令窗口就不会再出来了,在给客户使用的时候,可以这样做,当然,我们在测试 或者调试程序的时候,还是需要它的.

如何在IMAN中自动生成UG装配的DirectModel数据

通常我们在IMAN中查看装配体的JT数据是在PSE中,在PSE中,我们可以有选择地查看整个装配或者装配中的 某些零部件,如果想在navigator中查看装配的JT数据,不能简单地在ugmanager中生成,如果有需要,可以使用 如下方法:

1. 获得IMAN MENU SHELL
set IMAN_ROOT="path to iman_root"
set IMAN_DATA="path to iman_data"
set UGII_BASE_DIR="path to ug_root"
set Path=%UGII_BASE_DIR%\ugii;%IMAN_ROOT%\bin;%Path%
call %IMAN_DATA%\iman_profilevars

2. 生成可视化数据
%UGII_BASE_DIR%\pvtrans\ugtopv @DB/item_id/rev_id -pim=yes -generate_assy_jt

流程发起后,如何快速指定审批人员

这一招实际上是跟我们的客户学来的,大伙都觉得它很有意思,所以把它写到这里,同时,它也反映了客户的应用水平越来越高,应用过程中也发现了越来越多的小窍门。感谢IMAN的忠实用户(No.2 Ins.)。

通常我们在发起流程之后,要对流程中涉及到的人员逐一指定,一般有以下两种方法:

(1) 发起后,将对象发送到"作业流程查看器",然后老老实实的逐一指定;

(2) 发起后,在收件箱中以"流程视图"方式查看流程,然后从后向前逐一指定人员;

无论使用上面哪种方法,我们都有多次地点击鼠标,先逐个选定审批任务,再点击"执行"按钮进行指定,如果你不想点那么多下鼠标的话,那么下面的方法就对你有用了,具体操作如下:

流程发起后,在收件箱中以"流程视图"方式查看任务,用CTRL+MB1同时选中所有的审批任务,
然后点击工具条上的"执行"按钮,接下来,对话框就会一个接着一个地弹出来,开始选人吧~

这个方法在"作业流程查看器中"同样有效.

如何处理多数据库登录的选择问题

现在越来越多的用户已经不满足于单个数据库的情况了,除了正式数据库之外,可能还会有测试 用的,培训用的,等等,那么就涉及到用户在登录时要选择适当的数据库的问题,一不小心选错了数据库,就会有些麻烦了,那么,如何让用户在登录到IMAN 时,不必担心选错数据库呢?这里提供一个办法。

从IMAN7到IMAN9一路用过来的用户可能发现了,从IMAN8之后,在IMAN中加 入了 cookie技术,可以记忆用户上次登录的信息以及其它操作历史信息,这种技术是配合操作系统来实现的,即当用户退出应用程序之后,一些与用户相关的信息 自动记录到操作系统的某个位置,等到该用户再次进入时,可以首先加载这部分信息,然后将其自动填写到适当位置。

对cookie了解之后,可能很多朋友都会蒙生这样一个想法,试想,如果能让应用在启动时加载适当的cookie,是不是就解决问题了呢? 答曰:然!

下面介绍一下实现的过程:



假设:存在两个数据库实例,sid1, sid2, 数据库登录别名分别为SID1 Database与SID2 Database
(1) 首先,对于不同的数据库实例,创建独立的portal启动脚本文件(这种方法对每个实例使用独立的客户化包时犹为有效);
# 创建portal.bat的复本
copy portal.bat portal_sid1.bat
copy portal.bat portal_sid2.bat
# 修改两个文件中的classpath定义,添加开发部分的classpath及其它定制信息
# 亦可以在该文件中用ECHO语句显示一些辅助信息,如当前实例的信息等
(2) 其次,为每个实例创建独立的cookie文件;
# 首先根据默认的登录cookie文件创建两个实例所需的cookie文件
# 假设 set %IPR%=d:\LSE0912
# 首先在%IPR%下创建一个文件夹,用于存放Cookies
mkdir %IPR%\cookies
copy "%USERPROFILE%\.pcookie\%USERNAME%\portal.cookie" %IPR%\cookies\portal_sid1.cookie
copy "%USERPROFILE%\.pcookie\%USERNAME%\portal.cookie" %IPR%\cookies\portal_sid2.cookie
# 接下来修改两个Cookie文件(均为文本文件,可用写字板打开),可以按如下方法修改:
a. 将两个cookie文件中的"username"赋值为您常用的用户名,或赋值为"input your name";
b. 将portal_sid1.cookie中的"servername"赋值为"SID1 Database";
c. 将portal_sid2.cookie中的"servername"赋值为"SID2 Database";
d. 两个cookie文件中,"groupname"值可以为空,或赋值为您常用的组名;
(3) 然后,修改两个portal启动文件,使其在适当的位置加载cookie;
a. 对于portal_sid1.bat做如下修改, 其中红色部分为要添加的内容
set IPR=......
SET PVR=......
rem IDR is ......
set IDR=%IPR%
echo Loading SID1 Login Cookies ...
xcopy %IPR%\cookies\portal_sid1.cookie
"%USERPROFILE%\.pcookie\%USERNAME%\portal.cookie" /y > Nul 2>&1

......

b. 同样,对portal_sid2.bat做类似的修改, 其中红色部分为要添加的内容
set IPR=......
SET PVR=......
rem IDR is ......
set IDR=%IPR%
echo Loading SID2 Login Cookies ...
xcopy %IPR%\cookies\portal_sid2.cookie
"%USERPROFILE%\.pcookie\%USERNAME%\portal.cookie" /y > Nul 2>&1

......

最后,您还需要为两个portal启动脚本文件创建两个快捷方式,登录时,只要选择了正确的快捷方式,就不用担心选错数据库了
到此为止,对cookie的操作已经完成, 感兴趣的不妨试一试.

以 上方法是从操作系统的COOKIE的角度来解决问题,当然实现的方法还有很多,同样也可以编写多个client_specific_xxx.properties 来实现,为每个client_specific_xxx.properties提供合适的ServerName与ServerMarker, 然后在调用它的portal_xxx.bat将其xcopy /y 过去。

流程中如何处理复杂会签任务

在之前参与的项目中,用户对流程的需求往往会遇到如下情形:
(1) 流程中需要参与会签的角色有M个,M>=5;
(2) 流程中需要有N个会签任务,N>=3;
(3) M,N的值不是唯一确定的;
(4) 流程中涉及到的审批人员要自动添加到UG二维图纸上(或DOC,XLS,DWG等);

上面提到的情况在企业中经常能够遇到,如果每种情况都定义一个流程模板,那么用排列组合一算,大概需要定制Cnm...个流程模板,如果动不动就搞出百八十个流程模板出来,用户会发脾气滴

这 里有一个折衷的办法,就是在流程中只定义一个会签任务,使用adhoc-signoffs方式,在流程 发起之后,流程中所需要的会签角色人员由用户自行添加,当然,最重要的一环是要保证将会签中所涉及到的人员的名字都能自动填写到二维图纸上,那么这里就要 做一个约定,就是在会签任务中,不能出现相同的角色,因为ATTR_SYNC机制需要依靠任务名称与角色名称来区分人员,如果二都相同,就不能都取出来 了,因此只要保证角色不重复,就可以提取出来,而一般都不会在会签任务中出现同样角色,那么这种方法就能满足用户的需要了

如何在UGPART(或FORM表)中自动获取UG模型的重量值

在IMAN获取UG模型重量的值,传统的方法是通过属性映射来完成的,也可以通过少量的开发来实现自动取值,无论采用何种方法,不需要用户手动干预才是好方法,以下介绍几种方法:



需要用户干预的ATTR_SYNC:

# 在FORM表中事先定义重量属性,名为weight
{ Dataset Type = "UGMASTER"
# 首先将在UG中输入的重量值传递到IMAN属性表中
重量 : IRM.weight /master=cad
}
{ Dataset Type = "UGPART"
# 在将属性表中的重量值传递给UG二维图(明细栏)
重量 : IRM.weight /master=iman
}

显然,映射过程是自动完成的,用户可以接受,但需要在UG中手动赋值一次,用户往往不太满意

现在,通过简单的二次开发可以实现在FORM表中自动获取UG重量的值,方法如下:

# 假设在FORM中有重量属性,属性名为weight,类型float,
# 在FORM类型loadform()中添加如下代码:


private IMANProperty massproperty;
private double ugmaster_weight;
public double GetUGMasterWeight(AbstractIMANForm c)
throws IMANException
{
/* if this itemRevision has UGMASTER dataset
* and with UGPART-MASSPR NR attached,
* then "massvalue" will obtain the mass of UG file.
*/
ugmaster_weight = 0.0;
try
{
AIFComponentContext comp_ctx[] =c
.getFormComponent()
.whereReferenced();
IMANComponentItemRevision itemrev =
(IMANComponentItemRevision)comp_ctx[0]
.getComponent();
IMANComponentDataset dataset = null;
IMANComponentForm massform = null;
if(itemrev.getChildren("IMAN_specification")
.length > 0)
{
for(int k=0; k 0)
{
massform = (IMANComponentForm) dataset
.getNamedRefComponents("UGPART-MASSPR")[0];
massproperty = massform.getIMANProperty("mass");
ugmaster_weight = massproperty.getDoubleValue();
}
}
}
}
}
catch(IMANException imanexception)
{
throw imanexception;
}
return ugmaster_weight;
}





接下来,只需要一次属性映射,就可以将此属性值用于UGPART中了

{ Dataset Type = "UGPART"
重量 : IRM.weight /master=iman
# 如果不是ItemRevision Master,就用GRM
}

除 了使用上面的方法在IMAN方面解决这个问题之外,还可以试图从UG方面解决这个问题,试想,如果能够使用UG GRIP开发一个小函数,用于将重量值赋给某个属性,然后在save()方法中调用这个函数,那么当用户在UG中做保存操作时,自动完成赋值操作也是可行 的,当然我不会GRIP,谁会可以告诉我,我会把它加到这里,谢谢

当然,如果不用开发能够实现是最好的方法,因此还可以通过综合使用GRM与NR的ATTR_SYNC来直接实现,方法如下:

{ Dataset Type = "UGPART"
重量 : IRM.NR(UGPART-MASSPR.UGPartMassPropsForm).mass
/master=iman
}

(Thank for Dr. JT Wang's help)

IMAN与UG的属性映射

Teamcenter与UG/Manager属性映射是通过IMAN提供的工具 import_attr_mappings与export_attr_mappings来实现,先将IMAN中缺省的映射关系导出,然后对其修改,添加新 的映射关系,再import到IMAN中去。


一、Teamcenter Form表属性与UG/Manager属性的映射

例如:对UGMASTER数据集添加新属性cust_1,cust_2与cust_3,将其与所对应的IRM表中的user_data_1,user_data_2, user_data_3关联起来,修改映射文件的UGMASTER段如下:

{ Dataset type="UGMASTER"
# (hard-wired) DB_PART_NAME : "Part Name"
# (hard-wired) DB_PART_DESC : "Part Description"
cust_1 : IRM.user_data_1 /master=iman
cust_2 : IRM.user_data_2 /master=iman
cust_3 : IRM.user_data_3 /master=iman
}

其中,/master=iman的含义是只能在IMAN中修改此属性,在UG/Manager中是只读的。
还可以设置为/master=cad(在IMAN中只读,在UG/Manager中可以改), /master=both(在IMAN
与UG/Manager中均可更改)等。

二、Teancenter流程信息与UG/Manager属性之间的映射关系
将流程中的审批信息反馈到UG/Manager属性中去,然后,在UG的图纸明细表中调用此属性,就可以实现明细表审核、审批等信息的自动化。使用此映射方法,流程中审批者、审批时间等信息可以即时的添加到UG/Manager中去,方便UG图纸对其进行调用。

例如:将某流程的两个步骤的审批者、审批时间等信息添加到UG/Manager中去,可按如下方式修改属性映射文件中的UGMASTER段:

{ Dataset type="UGMASTER"
shenhe_person: ItemRevision.Job.SIGNOFF(技术部经理).owning_user /master=iman
shenhe_date : ItemRevision.Job.SIGNOFF(技术部经理).decision_date /master=iman
pizhun_person : ItemRevision.Job.SIGNOFF(总工程师).owning_user /master=iman
pizhun_date : ItemRevision.Job.SIGNOFF(总工程师).decision_date /master=iman
ReleaseStatus : ItemRevision.release_status_list.name /master=iman

# (hard-wired) DB_PART_NAME : "Part Name"
# (hard-wired) DB_PART_DESC : "Part Description"
}

其中,”技术部经理“与”总工程师“都是该流程中所使用的角色;另外,由于该信息只在
IMAN的流程中产生,因此这些属性在UG/Manager中应该是只读的,因此设为/master=iman。


备忘录:Teamcenter流程信息与UG/Manager属性映射测试步骤:

1.新建ITEM与UGMASTER数据集;(7月1日)
2.将ITEMREV发起到流程;
3.第一步技术部经理正常审批通过;(7月1日)
4.查看UG/Manager中的属性,结果只有第一步审核的审批者与审批时间;
5.将日期改为7月2日,第二步总工程师审批时,Demote回上一级;
6.查看UG/Manager中的属性值,发现第一步与第二步审批的信息都被清除了;
7.时间仍为7月2日,第一步重新提交审批;
8.查看UG/Manager属性,出现第一步审批信息;(7月2日)
9.第二步审批正常通过,对象Released。(7月2日)
x.在第一级审批时选择promote后,第二步正常审批,在UG/Manager属性中只存在第二步审批信息。

昨天考 White Belt

Friday, May 13, 2005, A black Friday!

Teamcenter Engineering White Belt Certification Exam

考场规则

(如有变化,另行通知)


一、考生必须按照考试规定时间,于考前十分钟进入考场,迟到十五分钟者不得入场,取消考试资格;笔试考试需在一个小时后方可交卷退场。考生在进入考场时,必须凭身份证入场。

二、考试时间暂定为2005513日,上午为9:30-11:30AM,考笔试;下午14:00-17:00PMHands-on考试。考生进入考场,必须带好必要的文具,如钢笔、圆珠笔等,考试中禁止互相借用文具。上午的考试为闭卷考试,书籍、笔记本、资料等一律放在前台,不得带入考场。下午Hands-on考试之前考生要自备笔记本电脑,并且在参加考试之前要安装好一个初始的Teamcenter Engineering 9.1.2系统,里面必须为空数据库。

三、考生进入考场,要关闭各种通讯工具(手机、BB机、PDA等),按指定座位(单人、单行、单桌)就坐。考试中间一律不得离开考场。考生应服从监考人员指挥,违者以违反考场规则论处。

四、考生遇到试题字迹模糊等问题可举手向监考教师询问,但不得询问或试探与解题内容有关的问题。

五、考生要自觉维护考场秩序,保持安静。考场内不准吸烟。交卷后应立即离开考场,并不得在考场附近逗留和议论。

六、考生应在规定时间内完成答卷。答完的试卷应将卷面朝下放置。考试终了考生应立即停笔交卷,连同草稿纸一起上交。不按时交卷者,监考教师有权不接受考卷。已经带出考场的试卷作废。

七、考生必须严格遵守考试纪律。考试中间不准交头接耳或偷看他人答卷。对协助他人作弊者,视共同作弊论。一旦发现作弊,以零分记,并严肃处理。

水木事件

About SMTH

2005年3月16日,水木清华BBS正式对清华校外关闭。这个突如其来的事件,让众多校外的水木用户不知如何自处,就像每天都要见面的朋友突然失踪一样。对于校内的用户来讲,通向外面世界的大门似乎轰然一声就此关闭。做为一个BBS,水木早已超越了一个校内学生的交流工具,信息新闻,学术文化,程序计算,外语留学,商务管理,股市理财,等等上百个版面,内容丰富,信息交换极其频繁。水木,已是一种信息时代先进文化的雏形。我相信只要是水木的注册用户,都能够体会到她的包容,她的便捷,她的强大。关闭水木,试问一下,谁可得益?在这里,我们建立这个网站,向社会各界征集签名,为水木还有其他高校BBS的重生而高呼!


公开信全文如下:
===============


致尊敬的胡锦涛学长,及国家教育部负责同志:

这是一封为水木清华电子公告系统 (smth.org,下面简称水木清华),也是为全国高校电子公告系统请愿的信。

水木清华是中国教育网,也可以说是全国互联网的一颗璀璨的明珠。在从1995年到2005年的十年间,从十余个版面,几百个用户发展到几百个大小版面,几十万个注册用户,其间不单单为清华的在校学生,也为校友,社会人士提供了一个学术文化交流,信息交换,查证咨询的虚拟社区和网络平台。水木清华不仅仅是一个便捷的网络工具,她已经演变成为连接国内外、校内外技术、人才的纽带,一种先进网络文化的代表。每天访问甚至已经成为一部分人的生活方式。每个水木清华的用户都会记得,2004奥运会期间,一万多人在线为运动员加油呐喊的壮观景象。水木清华代表的文化和生活方式,绝对不是颓废的,而是积极向上的。除去其文化因素,单单这十年间积累的科学技术文档,问题解析,实践总结,是一笔巨大的,无从估算的财富,这是无数水木清华校内外的用户本着公益精神用自己的时间和心血浇灌出来的。在这里,我们倍感语言的贫乏,以至于我们不能够将她所有的优点在短短的段落里面表达出来。同时我们也相信,其他高校是类似的情况。通过严格的管理和正确的引导,各个高校电子公告系统树立的是良好的形象,起到的是对整个国家社会正面的推动作用。

然而这一切,随着水木清华2005年3月16日的对外IP关闭都烟消云散!

所有的水木清华用户,包括清华的校友,都觉得震惊和无奈。我们都无法理解这个决定的合理性所在。学术的发展离不开同行的交流,没有学术交流就难有科技进步。水木清华上的许多技术交流,如果没有校外用户和校友的参加,无不变得大为逊色。对外关闭的结果,是让水木清华彻底失去了一个网络平台的生命力。就长远来讲,水木清华和各个高校电子公告系统作为网络交流通道的存在,容许了许多科学文化技术上的“火花”产生,对外关闭,伤害了我们整个国家民族思维最高端的发展活力。

海外留学生是水木清华众多用户群的一个,是最受打击和伤害的。在海外留学,水木清华的文化氛围还有生活气息,给了我们家的感觉。而我们也通过在国外学到的先进科技知识,来帮助国内的学弟学妹。对校外的关闭,严重伤害了海外学子对祖国母校的感情,甚至打击了一部分人对政府和党的领导的信心,这些都在很大程度上损害了政府在青年学子中的声誉和威信。

诚然,大学生需要正确的思想观人生观的引导。在这方面,水木清华是一个很好的宣传阵地。但是对年轻人的教育都应该是春风化雨式的,简单粗暴的方式只能适得其反。在信息高度发达的网络时代,我们需要灵活变化来适应这个趋势。通过严格的管理和适当的引导,网络虚拟社区的种种弊端是可以克服的。对外关闭,是分析处理问题简单化的表现,伤害了众多学子和用户,是让亲者痛,仇者快的决定,将会给我们国家的科技进步带来巨大的不利影响。

在这里,我们谨代表所有的水木清华还有各个高校电子公告系统的用户,向尊敬的学长,以及国家教育部的领导请求再次考虑这一决定。

此致

敬礼

2005年3月

Oracle Password Maintance

Oracle 数据库密码文件的使用和维护

概要: Oracle 关系数据库系统以其卓越的性能获得了广泛的应用,而保证数据库的安全性是数据库管理工作的重要内容。本文是笔者在总结 Oracle 数据库安全管理工作的基础上,对 Oracle 数据库系统密码文件的创建、使用和维护作了详细的介绍,供大家参考。

关键词: Oracle 数据库 密码文件



在 Oracle 数据库系统中,用户如果要以特权用户身份( INTERNAL / SYSDBA / SYSOPER )登录 Oracle 数据库可以有两种身份验证的方法:即使用与操作系统集成的身份验证或使用 Oracle 数据库的密码文件进行身份验证。因此,管理好密码文件,对于控制授权用户从远端或本机登录 Oracle 数据库系统,执行数据库管理工作,具有重要的意义。

Oracle 数据库的密码文件存放有超级用户 INTERNAL / SYS 的口令及其他特权用户的用户名/口令,它一般存放在 ORACLE_HOME \ DATABASE 目录下。

一、 密码文件的创建:

   在使用 Oracle Instance Manager 创建一数据库实例的时侯,在 ORACLE_HOME \ DATABASE 目录下还自动创建了一个与之对应的密码文件,文件名为 PWDSID.ORA ,其中 SID 代表相应的 Oracle 数据库系统标识符。此密码文件是进行初始数据库管理工作的基础。在此之后,管理员也可以根据需要,使用工具 ORAPWD.EXE 手工创建密码文件,命令格式如下: C: \ >ORAPWD FILE= < FILENAME >  PASSWORD

= < PASSWORD > ENTRIES=<>

  各命令参数的含义为:

FILENAME :密码文件名;

PASSWORD :设置 INTERNAL / SYS 帐号的口令;

MAX_USERS :密码文件中可以存放的最大用户数,对应于允许以 SYSDBA / SYSOPER 权限登录数据库的最大用户数。由于在以后的维护中,若用户数超出了此限制,则需要重建密码文件,所以此参数可以根据需要设置得大一些。

  有了密码文件之后,需要设置初始化参数 REMOTE_LOGIN_PASSWORDFILE 来控制密码文件的使用状态。

二、 设置初始化参数 REMOTE_LOGIN_PASSWORDFILE :

  在 Oracle 数据库实例的初始化参数文件中,此参数控制着密码文件的使用及其状态。它可以有以下几个选项:

NONE :指示 Oracle 系统不使用密码文件,特权用户的登录通过操作系统进行身份验证;

EXCLUSIVE :指示只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除 INTERNAL / SYS 以外的用户信息,即允许将系统权限 SYSOPER / SYSDBA 授予除 INTERNAL / SYS 以外的其他用户。

SHARED :指示可有多个数据库实例可以使用此密码文件。在此设置下只有 INTERNAL / SYS 帐号能被密码文件识别,即使文件中存有其他用户的信息,也不允许他们以 SYSOPER / SYSDBA 的权限登录。此设置为缺省值。

---- 在 REMOTE_LOGIN_PASSWORDFILE 参数设置为 EXCLUSIVE 、 SHARED 情况下, Oracle 系统搜索密码文件的次序为:在系统注册库中查找 ORA_SID_PWFILE 参数值(它为密码文件的全路径名);若未找到,则查找 ORA_PWFILE 参数值;若仍未找到,则使用缺省值 ORACLE_HOME \ DATABASE \ PWDSID.ORA ;其中的 SID 代表相应的 Oracle 数据库系统标识符。

三、 向密码文件中增加、删除用户:

  当初始化参数 REMOTE_LOGIN_PASSWORDFILE 设置为 EXCLUSIVE 时,系统允许除 INTERNAL / SYS 以外的其他用户以管理员身份从远端或本机登录到 Oracle 数据库系统,执行数据库管理工作;这些用户名必须存在于密码文件中,系统才能识别他们。由于不管是在创建数据库实例时自动创建的密码文件,还是使用工具 ORAPWD.EXE 手工创建的密码文件,都只包含 INTERNAL / SYS 用户的信息;为此,在实际操作中,可能需要向密码文件添加或删除其他用户帐号。

  由于仅被授予 SYSOPER / SYSDBA 系统权限的用户才存在于密码文件中,所以当向某一用户授予或收回 SYSOPER / SYSDBA 系统权限时,他们的帐号也将相应地被加入到密码文件或从密码文件中删除。由此,向密码文件中增加或删除某一用户,实际上也就是对某一用户授予或收回 SYSOPER / SYSDBA 系统权限。

  要进行此项授权操作,需使用 SYSDBA 权限(或 INTERNAL 帐号)连入数据库,且初始化参数 REMOTE_LOGIN_PASSWORDFILE 的设置必须为 EXCLUSIVE 。具体操作步骤如下:

  创建相应的密码文件;

  设置初始化参数 REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE ;

  使用 SYSDBA 权限登录:

CONNECT SYS / internal_user_passsword AS SYSDBA ;

  启动数据库实例并打开数据库;

  创建相应用户帐号,对其授权(包括 SYSOPER 和 SYSDBA ):

  授予权限: GRANT SYSDBA TO user_name ;

  收回权限: REVOKE SYSDBA FROM user_name ;
   现在这些用户可以以管理员身份登录数据库系统了。

四、 使用密码文件登录:

   有了密码文件后,用户就可以使用密码文件以 SYSOPER / SYSDBA 权限登录 Oracle 数据库实例了,注意初始化参数 REMOTE_LOGIN_PASSWORDFILE 应设置为 EXCLUSIVE 或 SHARED 。任何用户以 SYSOPER / SYSDBA 的权限登录后,将位于 SYS 用户的 Schema 之下,以下为两个登录的例子:

1. 以管理员身份登录:

  假设用户 scott 已被授予 SYSDBA 权限,则他可以使用以下命令登录:

CONNECT scott / tiger AS SYSDBA

2. 以 INTERNAL 身份登录:

CONNECT INTERNAL / INTERNAL_PASSWORD

五、密码文件的维护:

1. 查看密码文件中的成员:

   可以通过查询视图 V$PWFILE_USERS 来获取拥有 SYSOPER / SYSDBA 系统权限的用户的信息,表中 SYSOPER / SYSDBA 列的取值 TRUE / FALSE 表示此用户是否拥有相应的权限。这些用户也就是相应地存在于密码文件中的成员。

2. 扩展密码文件的用户数量:

  当向密码文件添加的帐号数目超过创建密码文件时所定的限制(即 ORAPWD.EXE 工具的 MAX_USERS 参数)时,为扩展密码文件的用户数限制,需重建密码文件,具体步骤如下:

a) 查询视图 V$PWFILE_USERS ,记录下拥有 SYSOPER / SYSDBA 系统权限的用户信息;

b) 关闭数据库;

c) 删除密码文件;

d) 用 ORAPWD.EXE 新建一密码文件;

e) 将步骤 a 中获取的用户添加到密码文件中。

3. 修改密码文件的状态:

   密码文件的状态信息存放于此文件中,当它被创建时,它的缺省状态为 SHARED 。可以通过改变初始化参数 REMOTE_LOGIN_PASSWORDFILE 的设置改变密码文件的状态。当启动数据库事例时, Oracle 系统从初始化参数文件中读取 REMOTE_LOGIN_PASSWORDFILE 参数的设置;当加载数据库时,系统将此参数与口令文件的状态进行比较,如果不同,则更新密码文件的状态。若计划允许从多台客户机上启动数据库实例,由于各 客户机上必须有初始化参数文件,所以应确保各客户机上的初始化参数文件的一致性,以避免意外地改变了密码文件的状态,造成数据库登陆的失败。

4. 修改密码文件的存储位置:

  密码文件的存放位置可以根据需要进行移动,但作此修改后,应相应修改系统注册库有关指向密码文件存放位置的参数或环境变量的设置。

5. 删除密码文件:

  在删除密码文件前 , 应确保当前运行的各数据库实例的初始化参数 REMOTE_LOGIN_PASSWORDFILE 皆设置为 NONE 。在删除密码文件后,若想要以管理员身份连入数据库的话,则必须使用操作系统验证的方法进行登录。

About my HBM-30 Bluetooth Headset battery problem

HBM-30 Battery Mystery solved!!!
================================

Hi all,

I too bought this GIZMO and had the same battery problems.

E.g. you put in a perfectly good battery but when you turn it on, the HBM-30 "conks off" immediately.

E.g. you put in rechargeable AAA batteries but it does not work in the HBM-30 but you could have sworn that those were NEWLY recharged!

Solution:-



The problem is THE BATTERY CONTACTS ARE VERY SENSITIVE!!!

(Please read the above sentence again)

For the battery casing, leave it tilted slightly less than 45'. This is with reference to the 2 battery notches which are parallel to the memory card.
[Only those who own this device will understand what I mean]

In case you still don't understand what I am saying, here is the same explanation but phrased differently:-

When you install the battery, the degree of tilt for the (round) battery casing is VITAL.

DO NOT turn the casing all the way in, somehow the contacts are not very good and this explains why so many people have experienced battery problems.

You should install the casing such that it almost pops out by itself, but is still secure. [Try turning it by only 1mm!]

TIP: Turn it at various angles and try to find the "sweet spot" which is the most stable.

I marked it with a permanent marker (optional but works for me!)

Now my HBM-30 works with rechargeable batteries!!!

NOTES:-

1. I have noticed that the device takes up a lot of battery "JUICE" on startup. To prolong battery life, try not to turn on and off the device repeatedly. For maximum battery life, turn it on AND leave it on!

2. Yes. ATRAC3 recordings can and do last close to 10 hours as promised on a new AAA Energizer battery (non titanium). Please refer to the other FAQ written on this subject of ATRAC3 vs MP3.

3. So far, this is what I got:-
a.New AAA Energizer Battery (alkaline) - close to 8 hrs (spent listening to ATRAC3 and answering 1 phone call on Bluetooth (for about 30secs)
b.Sanyo 800mAh HR-4U AAA NiMH rechargeable battery - Close to 9 hrs (spent listening only to ATRAC3)

If this information worked for you as well, please POST some feedback, thank you!

Installing Oracle 10g on Solaris 10

1. Kernel Parameters
--------------------

vi /etc/system
set shmsys:shminfo_shmmax=4294967295 (给oracle最大内存设为2G)
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
set semsys:seminfo_semmni=110
set semsys:seminfo_semmns=310


2. user,group and ENVs
--------------------
# groupadd dba
# useradd –g dba –d /export/home/oracle -m oracle
# passwd oracle
# su – oracle
$ vi .profile

Add below:
ORACLE_BASE=/export/home/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.0
ORACLE_SID=tsunami
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
PATH=$ORACLE_HOME/bin:/bin:/sbin
:/usr/ccs/bin:/usr/local/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib
:$ORACLE_HOME/network/lib:/usr/local/lib:/usr/lib
DISPLAY=192.168.1.88:0.0
TMPDIR=/var/tmp
export ORALCE_BASE ORACLE_HOME
export ORACLE_SID NLS_LANG PATH
export LD_LIBRARY_PATH DISPLAY TMPDIR
umask 022
:wq

3. Installation Media
--------------------
$ cp -R 10g_db_i.gz /export/home/oracle
$ gunzip 10g_db_i.gz
$ cpio -ivmd < 10g_db_i
$ ./runInstaller -ignoreSysPrereqs
or
$ vi /export/home/oracle/db/Disk1/install/oraparam.ini

LURE_MESSAGE
Solaris=5.6,5.7,5.8,5.9,5.10
Linux=redhat-2.1AS
#HPUX=B.11.00
Decunix=V5.1A,V5.1
AIX=5.1.0.0
:wq

$ vi oraparam.var

LURE_MESSAGE
Solaris=5.8,5.9,5.10
Windows=4.0,5.0,5.1,5.2
Linux=redhat-2.1AS
HPUX=B.11.11
Decunix=V5.1A,V5.1
AIX=5.1.0.0
:wq

4. Begin to install
--------------------
$ ./runInstaller

Oracle 10g isqlplus DBA Access Howto

Oracle 10g: Enable isqlplus DBA Access


1. Change Directory to
$ORACLE_HOME/oc4j/j2ee/isqlplus/application-deployments/isqlplus

2. Start JAZN Shell
$JAVA_HOME/bin/java
-Djava.security.properties
=$ORACLE_HOME/sqlplus/admin/iplus/provider
-jar $ORACLE_HOME/oc4j/j2ee/home/jazn.jar
-user "iSQL*Plus DBA/admin"
-password admin_password -shell

the "admin_password" is set to "welcome" by default

3. To create a user from the command-line, enter:
$JAVA_HOME/bin/java -Djava.security.properties
=$ORACLE_HOME/sqlplus/admin/iplus/provider
-jar $ORACLE_HOME/oc4j/j2ee/home/jazn.jar
-user "iSQL*Plus DBA/admin"
-password admin_password
-adduser "iSQL*Plus DBA" username password

4. Grant access for iSQL*Plus DBA user
grantrole webDba "iSQL*Plus DBA" username


5. JAZN Shell sample commands:

JAZN:>listusers
JAZN:>adduser "iSQL*Plus DBA" username password
JAZN:>grantrole webDba "iSQL*Plus DBA" username
JAZN:>remuser "iSQL*Plus DBA" username
JAZN:>revokerole webDba "iSQL*Plus DBA" username
JAZN:>setpasswd "iSQL*Plus DBA" username old_pass new_pass

UGS Announces Linux Support Plans

UGS Announces Linux Support Plans for its Teamcenter and NX Solutions at PLM World
Responding to Growing Customer Demand, Executive Vice President of PLM Products, Chuck Grindstaff, Unveils UGS’ Product Plans for Linux on X64 Technology at The 2005 PLM World Conference


FOR RELEASE Monday, May 2, 2005

2005 PLM World Conference, DALLAS, Texas – UGS Corp., a leading global provider of product lifecycle management (PLM) software and services, today announced its plans to add the Linux open source operating system to the list of supported environments for Teamcenter? and NX? solutions, the company’s flagship digital product lifecycle and digital product development software portfolios respectively.

Chuck Grindstaff, UGS executive vice president of PLM Products made the announcement at the 2005 PLM World Conference in Dallas, Texas, during his keynote product strategy presentation. In response to growing customer demand, Teamcenter and NX are both being ported to the Linux environment on x64 technology, the 64-bit architecture supported by AMD and Intel. The PLM World Conference is the annual conference for users of UGS software, the world’s largest PLM user community.

“Linux on x64 is attractive for many of our customers,” said Grindstaff. “Linux offers an excellent migration path for our UNIX? customers looking to move to the price performance benefits and multiple offerings available in x64 based workstations. The x64 platform also permits 64-bit applications to address large amounts of memory facilitating the development of large, complex models. In addition, since the x64 is backward compatible with the x86 architecture, customers can run the latest 64-bit applications along with any existing 32-bit applications on the same machine.”

UGS is expected to begin shipping completed products starting in Q4 of 2005, with additional products following in 2006. Initial support will be for Novell’s SUSE? Linux Desktop and Enterprise Server 9.

“Having a mature and established platform is critical to enable UGS to develop, deliver and support our products with the quality our customers expect,” said Chris Brosz, vice president of Technical Operations, UGS. “Linux has evolved from a do-it-yourself project, to an integrated and supported operating environment with the necessary tools for development.”