顯示具有 電腦 標籤的文章。 顯示所有文章
顯示具有 電腦 標籤的文章。 顯示所有文章

2008年1月2日 星期三

Pirates Of Silicon Valley 矽谷海盜


「Good artists copy. Great artists steal.」 - Picasso

昨天看了一部很老的片子叫做 Pirates Of Silicon Valley (矽谷海盜),台灣則是翻譯為微軟英雄
看了這部片,讓我突然想起以前看的Bill Gates以及最近的IWoz(Woznick為 Steve Jobs的合夥人),仿彿看到了近代電腦工業崛起的紀錄影集,當然有很多事件因為電影效果,所以有些出入以及渲染
不過MIT社會學院曾把這本書列為參考書籍
Moblie01也有相關的討論串
下面是kuso windows的flash
http://www.albinoblacksheep.com/flash/winrg
裡面有幾句我個人覺得很受用的話

1.成功讓人誤以為 他們所做的每個決定都是對的
這句Steve Jobs話除了道盡 IBM漸漸被Apple追趕上,也呼應了apple被MS超越
2."You know how you survive? You make people need you. You survive, because you make them need what you have, then they will have no where to go.
對照大家現在依賴MS的程度.....=_=|||
3. "Keep your family close, put your enemies closer.
Bill Gates用此心態對待他最大的敵人IBM因而逐步茁壯

2007年7月20日 星期五

Java JVM heap space 調整

轉載自http://javahowto.blogspot.com


Two JVM options are often used to tune JVM heap size: -Xmx for maximum heap size, and -Xms for initial heap size. Here are some common mistakes I have seen when using them:

  • Missing m, M, g or G at the end (they are case insensitive). For example,
    java -Xmx128 BigApp
    java.lang.OutOfMemoryError: Java heap space
    The correct command should be: java -Xmx128m BigApp. To be precise, -Xmx128 is a valid setting for very small apps, like HelloWorld. But in real life, I guess you really mean -Xmx128m

  • Extra space in JVM options, or incorrectly use =. For example,
    java -Xmx 128m BigApp
    Invalid maximum heap size: -Xmx
    Could not create the Java virtual machine.

    java -Xmx=512m HelloWorld
    Invalid maximum heap size: -Xmx=512m
    Could not create the Java virtual machine.
    The correct command should be java -Xmx128m BigApp, with no whitespace nor =. -X options are different than -Dkey=value system properties, where = is used.

  • Only setting -Xms JVM option and its value is greater than the default maximum heap size, which is 64m. The default minimum heap size seems to be 0. For example,
    java -Xms128m BigApp
    Error occurred during initialization of VM
    Incompatible initial and maximum heap sizes specified
    The correct command should be java -Xms128m -Xmx128m BigApp. It's a good idea to set the minimum and maximum heap size to the same value. In any case, don't let the minimum heap size exceed the maximum heap size.

  • Heap size is larger than your computer's physical memory. For example,
    java -Xmx2g BigApp
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Could not create the Java virtual machine.
    The fix is to make it lower than the physical memory: java -Xmx1g BigApp

  • Incorrectly use mb as the unit, where m or M should be used instead.
    java -Xms256mb -Xmx256mb BigApp
    Invalid initial heap size: -Xms256mb
    Could not create the Java virtual machine.
  • The heap size is larger than JVM thinks you would ever need. For example,
    java -Xmx256g BigApp
    Invalid maximum heap size: -Xmx256g
    The specified size exceeds the maximum representable size.
    Could not create the Java virtual machine.
    The fix is to lower it to a reasonable value: java -Xmx256m BigApp

  • The value is not expressed in whole number. For example,
    java -Xmx0.9g BigApp
    Invalid maximum heap size: -Xmx0.9g
    Could not create the Java virtual machine.
    The correct command should be java -Xmx928m BigApp
PS:

How to set java heap size in Tomcat?
Stop Tomcat server, set environment variable CATALINA_OPTS, and then restart Tomcat. Look at the file tomcat-install/bin/catalina.sh or catalina.bat for how this variable is used. For example,
set CATALINA_OPTS="-Xms512m -Xmx512m"  (Windows)
export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash)
setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh)
In catalina.bat or catallina.sh, you may have noticed CATALINA_OPTS, JAVA_OPTS, or both can be used to specify Tomcat JVM options. What is the difference between CATALINA_OPTS and JAVA_OPTS? The name CATALINA_OPTS is specific for Tomcat servlet container, whereas JAVA_OPTS may be used by other java applications (e.g., JBoss). Since environment variables are shared by all applications, we don't want Tomcat to inadvertently pick up the JVM options intended for other apps. I prefer to use CATALINA_OPTS.

How to set java heap size in JBoss?
Stop JBoss server, edit $JBOSS_HOME/bin/run.conf, and then restart JBoss server. You can change the line with JAVA_OPTS to something like:
JAVA_OPTS="-server -Xms128m -Xmx128m"
How to set java heap size in Eclipse?
You have 2 options:
1. Edit eclipse-home/eclipse.ini to be something like the following and restart Eclipse.
-vmargs
-Xms64m
-Xmx256m
2. Or, you can just run eclipse command with additional options at the very end. Anything after -vmargs will be treated as JVM options and passed directly to the JVM. JVM options specified in the command line this way will always override those in eclipse.ini. For example,
eclipse -vmargs -Xms64m -Xmx256m
How to set java heap size in NetBeans?
Exit NetBeans, edit the file netbeans-install/etc/netbeans.conf. For example,
netbeans_default_options="-J-Xms512m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=128m -J-Xverify:none
How to set java heap size in Apache Ant?
Set environment variable ANT_OPTS. Look at the file $ANT_HOME/bin/ant or %ANT_HOME%\bin\ant.bat, for how this variable is used by Ant runtime.
set ANT_OPTS="-Xms512m -Xmx512m"  (Windows)
export ANT_OPTS="-Xms512m -Xmx512m" (ksh/bash)
setenv ANT_OPTS "-Xms512m -Xmx512m" (tcsh/csh)
How to set java heap size in jEdit?
jEdit is a java application, and basically you need to set minimum/maximum heap size JVM options when you run java command. jEdit by default runs with a default maximum heap size 64m. When you work on large files, you are likely to get these errors:
java.lang.OutOfMemoryError: Java heap space
at java.lang.String.concat(String.java:2001)
at org.gjt.sp.jedit.buffer.UndoManager.contentInserted(UndoManager.java:160)
at org.gjt.sp.jedit.Buffer.insert(Buffer.java:1139)
at org.gjt.sp.jedit.textarea.JEditTextArea.setSelectedText(JEditTextArea.java:2052)
at org.gjt.sp.jedit.textarea.JEditTextArea.setSelectedText(JEditTextArea.java:2028)
at org.gjt.sp.jedit.Registers.paste(Registers.java:263)

How to fix it? If you click a desktop icon, or Start menu item to start jEdit: right-click the icon or menu item, view its property, and you can see its target is something like:
C:\jdk6\bin\javaw.exe -jar "C:\jedit\jedit.jar"
You can change that line to:
C:\jdk6\bin\javaw.exe -Xmx128m -Xms128m -jar "C:\jedit\jedit.jar"
If you run a script to start jEdit: just add these JVM options to the java line inside the script file:
java -Xmx128m -Xms128m -jar jedit.jar
If you start jEdit by running java command: just add these JVM options to your java command:
java -Xmx128m -Xms128m -jar jedit.jar
Note that when you run java with -jar option, anything after -jar jar-file will be treated as application arguments. So you should always put JVM options before -jar. Otherwise, you will get error:
C:\jedit>java -jar jedit.jar -Xmx128m
Unknown option: -Xmx128m
Usage: jedit [] []
How to set java heap size in JavaEE SDK/J2EE SDK/Glassfish/Sun Java System Application Server?
Stop the application server, edit
$GLASSFISH_HOME/domains/domain1/config/domain.xml, search for XML element name java-config and jvm-options. For example,

-Xmx512m
-XX:NewRatio=2
-XX:MaxPermSize=128m
...

You can also change these settings in the web-based admin console, typically at http://localhost:4848/, or https://localhost:4848/. Go to Application Server near the top of the left panel, and then on the right panel, click JVM Settings -> JVM Options, and you will see a list of existing JVM options. You can add new ones and modify existing ones there.

Yet another option is to use its Command Line Interface (CLI) tool command, such as:
./asadmin help create-jvm-options
./asadmin help delete-jvm-options
They may be a bit hard to use manually, but are well suited for automated scripts.

2007年6月23日 星期六

超強駭客


此事件發生在德國一個名為 stopHipHop 的 IRC channel 上

地點:IRC-Channel #stopHipHop (譯者註: 依名稱來看,這個 IRC 交談室的設立人應該不太喜歡 HipHop 曲風)

角色介紹:

<Elch> : 推斷可能是 IRC 交談室 #stopHipHop 的設立者
<bitchchecker> : 號稱"厲害"的"駭客" (推測可能是個 HipHop 迷)
<Metanot> : 聊天插花者 #1
<HopperHunter|afk> : 聊天插花者 #2
<He> : 聊天插花者 #3

(以下為 #stopHipHop 的 log 紀錄檔)
--------------------------------------------------------

QUOTE
* bitchchecker (~java@euirc-a97f9137.dip.t-dialin.net) Quit (Ping timeout#) (Log 紀錄) (不明原因 time-out)
* bitchchecker (~java@euirc-61a2169c.dip.t-dialin.net) has joined #stopHipHop (Log 紀錄) (bitchchecker 登入 IRC)
<bitchchecker> 你為什麼踢掉我?
<bitchchecker> 可以解釋一下嗎?
<bitchchecker> 回答我呀!
<Elch> 我們沒踢掉你啊!
<Elch> 是你自己 ping timeout 的 (紀錄): * bitchchecker (~java@euirc-a97f9137.dip.t-dialin.net) Quit (Ping timeout#)
<bitchchecker> 什麼 ping 啊.. 老兄
<bitchchecker> 我電腦的時間是正確的...
<bitchchecker> 我還設定了日光節約時間耶!
<bitchchecker> 是你踢掉我的啦!
<bitchchecker> 承認吧!你這個王八蛋!
<HopperHunter|afk> lol 哇哈哈!
<HopperHunter|afk> 你這個呆瓜... 哈哈日光節約時間!....
<bitchchecker> 你給我閉嘴!!我有設定日光節約時間!!
<bitchchecker> 我已經用了兩"猩"期了! (註一)
<bitchchecker> 當電腦開機時,Windows 就有個訊息告訴你已設定了日光節約時間。
<Elch> 你真的是一個電腦專家啊!
<bitchchecker> 住嘴!否則我就要入侵你
<Elch> 好好好!不說就是... 希望你別展現你那優秀駭客的一面!
<bitchchecker> 你死定了!告訴我你的 IP 位址...
<Elch> 呃... 是 129.0.0.1...
<Elch> ... 或許是 127.0.0.1...
<Elch> 對!沒錯!是 127.0.0.1.. 我將等待你的完美攻擊...
<bitchchecker> 五分鐘之內,你的硬碟就會被我刪除了!
<Elch> 我開始害怕了...
<bitchchecker> 住嘴!你完蛋了啦你...
<bitchchecker> 我有一個程式,只要輸入你的 IP 你就死定了!
<bitchchecker> 說再見吧!
<Elch> 對誰說呀?
<bitchchecker> 對你啊!老兄...
<bitchchecker> "在"見 (註二)
<Elch> 像你這樣優秀的駭客,真是讓我想到就害怕得發抖...
* bitchchecker (~java@euirc-61a2169c.dip.t-dialin.net) Quit (Ping timeout#) (Log 紀錄) (不明原因 time-out 了)

(中場說明: 一)
很清楚發生了什麼事;這傢伙用了強大的駭客工具程式入侵了自己的 IP 並且把他自己的電腦搞當了...
結果,要入侵我電腦的行動失敗了。我開始覺得我是否根本不需要擔心...
但是... 一個了不起的駭客是不會輕易放棄的。兩分鐘之後,他又回來了...


QUOTE
* bitchchecker (~java@euirc-b5cd558e.dip.t-dialin.net) has joined #stopHipHop (Log 紀錄) (bitchchecker 再次登入 IRC)
<bitchchecker> 小子!我當機你很高興是吧?但是你的電腦馬上就要完蛋了!
<Metanot> lol 哇哈哈!
<Elch> Bitchchecker! 那麻煩你再次入侵我,我的位置還是一樣在 127.0.0.1
<bitchchecker> 你真是笨的可以了... 老兄
<bitchchecker> 再見吧!
<Metanot> 啊![髒話消音]吧!(註三)...
<bitchchecker> 再見了!Elch
* bitchchecker (~java@euirc-b5cd558e.dip.t-dialin.net) Quit (Ping timeout#) (Log 紀錄) (不明原因又再度 time-out 了)


(中場說明: 二)
IRC 交談室開始彌漫著緊張的氣氛了... 在那傢伙連續兩次的入侵失敗之後,他將會成功的搞掛我的電腦嗎?
我等待著... 但卻什麼事也沒發生... 我感覺比較輕鬆了些...
從他開始準備下一波攻擊行動到現在已經六分鐘了...
身為一個能夠輕易瓦解整個資料中心的駭客,
他應該已經知道問題是出在哪裡了...


QUOTE
* bitchchecker (~java@euirc-9ff3c180.dip.t-dialin.net) has joined #stopHipHop (Log 紀錄) (bitchchecker 又一次登入 IRC)
<bitchchecker> Elch!你這個王八蛋!
<Metanot> Bitchchecker... 你幾歲啊?
<Elch> 怎麼啦? Bitchchecker
<bitchchecker> 你有防火「強」
<bitchchecker> 防火「牆」
<Elch> 我不知道啊!也許吧...
<bitchchecker> 我 26 歲
<Metanot> 你像 26 歲嗎?
<Elch> 你是怎麼發現我有防火牆的?
<Metanot> 真是個不友善的"小妞"...
<bitchchecker> 因為你的爛防火牆把我傳送的"關機(shutdown)"指令又回傳給我
<bitchchecker> 像個男子漢好不好!把你那狗屎防火牆關掉!
<Elch> 哇呀... 我不知道怎麼關耶...
<bitchchecker> 然後我的病毒程式就可以摧毀你的電腦!
<Metanot> 你是在入侵你自己嗎?
<Elch> 喔!是的... Bitchchecker 正嘗試著要入侵我...
<Metanot> 嘿!Bitchchecker... 如果你真是一名駭客,你就應該可以避開防火牆,那個連我也做得到耶!
<bitchchecker> 是啊!老兄... 我是要入侵 Elch... 但是那渾蛋有架防火牆!
<Metanot> 你是用哪種防火牆啊?
<bitchchecker> 你跟娘們一樣沒膽啦!
<Metanot> 有防火牆是很正常的啊... 一般的駭客都要有辨法通過它才行... 我的小ㄚ頭!^^
<He> 自己去一邊打手槍涼快吧! (註四)
<bitchchecker> [髒話消音] 的關掉你的防火牆啦!我要送個病毒程式給你!
<Elch> 不...
<Metanot> 嘿!Bitchchecker... 為什麼他要關掉防火牆?有本事你自己關掉它啊!
<bitchchecker> 你是不是害怕了...
<bitchchecker> 如果他像娘們一樣沒種、躲在防火牆後面,那我就不想入侵他了...
<bitchchecker> Elch!關掉你的狗屁防火牆啦!!
<Metanot> 我想問你一些事情... 你知道"入侵"是什麼意思嗎?如果 Elch 把防火牆關掉,那就是門戶大開,根本就不需要用到什麼入侵技術了...
<bitchchecker> 你閉嘴啦!
<Metanot> lol 哇哈哈!
<bitchchecker> 像我阿嬤才用防火牆!
<bitchchecker> 可是你他媽的自以為很酷,但是卻沒膽不用防火牆上網!


(中場說明: 三)
Bitchchecker 說我像個女人,而且說只有他阿嬤才會用防火牆上網。
我知道年長的人總是比年輕人來得有智慧,但我不可以因此鬆懈下來...
來看看他是否是一位真正厲害的駭客,就讓它繼續發展下去吧。
另外,我根本沒有任何的防火牆,就只有一台 Router 而已。


QUOTE
<Elch> Bitchchecker!有個朋友教我如何關掉防火牆了!現在你可以再試著入侵看看...
<Metanot> Bitchchecker 沒辦法入侵的啦!
<Black<TdV>> 真是精彩的對話...
<bitchchecker> 不用你多嘴
<Elch> Bitchchecker! 我正等待著你再次入侵攻擊!
<Metanot> 還要多少個「再一次」啊?他根本不算是駭客!
<bitchchecker> 老兄!你想要來個病毒嗎?
<bitchchecker> 告訴我你的 IP 位置,我會用病毒刪除你的硬碟!
<Metanot> 呵呵!放棄吧!我是一個駭客,而且我知道一名真正的駭客會怎麼做... 我百分之百確定你根本就不是駭客!!
<Elch> 127.0.0.1
<Elch> 很容易吧!
<bitchchecker> 哇哈哈!!你這個笨蛋!你就快要完蛋了!
<bitchchecker> 第一批檔案已經開始刪除了...
<Elch> 媽呀!...
<Elch> 我得趕緊瞧瞧...


(中場說明: 四)
在驚慌之餘,我趕緊開啟了 Windows 檔案總管,我的心跳急遽加速... 我是否低估了他?...

QUOTE
<bitchchecker> 白痴!你不用搶救了啦!!
<Elch> 真是糟糕哇!
<bitchchecker> Elch!你這呆子!你的 G: 磁碟機已經完全沒了!!
<Elch> 是的... 已經沒得救了...
<bitchchecker> 還有,20 秒內... 你的 F: 磁碟機也會消失...


(中場說明: 五)
是的!這的確是真的... 我的 G: 及 F: 都"不見"了... 可是我的電腦真的有 G: 及 F: 磁碟機嗎?無所謂了... 我沒時間去細究,我好害怕呀!!
Bitchchecker 可能正跟著音樂欣喜若狂...


QUOTE
<bitchchecker> tupac rules (註五)
<bitchchecker> Elch!你這王八蛋的 F: 磁碟機已經完蛋了!! E: 磁碟機也是...


(中場說明: 六)
E: 磁碟機!?老天啊!!我所有的遊戲軟體及旅遊照片都在 E: 磁碟機中... 得趕緊檢查一下...
咦?所有的資料都在啊!可是... 那個"駭客"說已經都刪除啦!...

還是.. 這些事根本沒在我的電腦上發生?


QUOTE
<bitchchecker> 你的 D: 磁碟機也已經刪除了 45% 了... 哈哈哈!!呆瓜!
<He> 為什麼 Metanot 都沒說話了?
<Elch> 他現在八成笑倒在地板上打滾吧...
<Black<TdV>> ^^
<bitchchecker> 你的 D: 磁碟機也清空了!
<He> 繼續呀!笨蛋!


(中場說明: 七)
這傢伙真是不賴呀!他宣告我的 D: 唯讀光碟機(CD-ROM)已經被清空了!他把我那台古老的 CD-ROM 搖身一變成為一台可覆寫抹除的燒錄機了!但是... 他是如何辦到的?我一定要問問他...



QUOTE
<bitchchecker> Elch!你真笨吶!千萬不要在網路上公佈你的 IP 位置...
<bitchchecker> 你的 C: 磁碟機也已經刪除 30% 了...


(中場說明: 八)
我是否應該告訴他... 他現在攻擊的不是我的電腦?...


QUOTE
* bitchchecker (~java@euirc-9ff3c180.dip.t-dialin.net) Quit (Ping timeout#) (Log 紀錄) (又??...再度 time-out ??)


(尾聲)
太遲了... 晚上 10 點 22 分,也是我們最後一次看到暱稱為 "Bitchchecker" 這個人的時間...
自從這個最後的 "Ping timeout" 訊息之後,我們再也沒看過他了...
一定是因為日光節約時間的關係吧...

------------------------------------------------------------

譯者附註:

註一: 這位 bitchchecker 的德文程度似乎不是很好, 所以英文版譯者也在英文詞句中"故意"製造一些錯字... 所以我在翻譯成中文時,也比照原意"製作"一些錯字...
註二: 原文為 buy buy (應為 bye bye)
註三: 在某些交談室,有髒話管理控制,如果遇到髒話,程式會轉換髒話成 [Please control your cussing] (請控制你的粗魯言行)
註四: 譯者功力不足... 無法理解"jackson and chill" 為何意? 所以此句省略... 原文照登!
(原文照登(德文): Bitch gib dir lieber nen jackson und chill du laesst dich provozieren und lieferst den kleinen pupertierenden Maedchen immer wieder neuen stoff)
(原文照登(英文): biatch give yourself a jackson and chill you\'re letting them provoce you and give those little girls new material all the time)
註五: 2 PAC (tupac) 是嘻哈饒舌界的傳奇人物,1996 年遭黑幫槍殺,卒年 25 歲。由此推斷 bitchchecker 是個 HipHop 迷,而且還是個 2 Pac 的死忠擁護者。譯者對"嘻哈饒舌"曲風的知識非常貧乏^^||| 感謝網友 Cokeophilia 提供資訊。

原始紀錄出處(德文) 紀錄者 Elch: (StopHipHop.de)?
http://www.stophiphop.de/modules/news/article.php?storyid=184
英文譯本出處: (KatRiders.com)
http://www.katriders.com/forums/viewtopic.php?t=6353

Translated by Stranger2005
Last modified 04/30/2005 (2nd Edition)

(歡迎轉貼)

2007年5月31日 星期四

Google Street V.S MS surface之地球要被統治了

還記得之前看電影關鍵報告(Minority Report) 中Tom Cruise戴上手套後操作的虛擬觸控式螢幕嗎?
之前就在youtube看到有某lab已經實做出來該功能,沒想到現在萬惡的微軟推出了這項產品
http://www.microsoft.com/surface/
另外原作者Jeff Han的 demo也可以在這邊看到



---------------------我是分隔線--------------------------
一方面google 的google也有了新的發明 => Street view(Google街景)
不僅可以看到2.5D的地圖,更可以瀏覽街景,變成從街道上一般行人的角度所拍攝的360度的全景照片!
http://maps.google.com/help/maps/streetview/index.html

2007年5月23日 星期三

JavaScript 是爛東西??

轉載自http://www.hsdc.com.tw/modules/newbb/viewtopic.php?viewmode=flat&type=&topic_id=28&forum=2

下午在某家公司討論架構設計的顧問服務時,與該公司主管會後的閒聊,其中一個話題,就是聊到 JavaScript,我又不假思維的回答:JavaScript 是爛東西。

啊!我亂說話的毛病又犯了... :-/

前兩年,也是在某家軟體公司所承接上億元的案子上,當時我是某家顧問團隊的 Member
之一。在與該公司數十位軟體開發人員的顧問輔導會議上,我也是直接就講出這句話,當然,我會去說明認為爛東西的理由。不過會後,我們團隊其中一位
member 很不高興,認為我不應該如此的批判,還有一個重點,當時,他是負責教授學員們 JavaScript
設計的講師,他說了,如果我對未來會上課的學員直接批判 JavaScript,那他如何教課呢? 是滴~ 不過當年我
"年輕氣盛",就與他說了,那麼,我們課程互換,他來教授高階設計,我來教授 JavaScript,然後,也允許他直接批判
JavaScript。;)

這是之前的往事了... 想起來還是蠻有趣的一段話題。

對 JavaScript 印象不好的原因,源自於 ASP/JSP 網頁設計的時期,其實,我也很清楚,程式語言本身,那有什麼爛不爛的,會爛的原因是... 程式設計師把它變成爛東西了。 :>>


怎麼說呢? 我看到好幾位的程式設計師,因為非常不習慣於原來從傳統 Client/Server 的表單設計,因為潮流,公司需要把系統 Web
化,而往 Web 設計時,卻發現到,怎麼以往 Client/Server 的表單很好寫,為何轉到 Web
後,不僅開發工具的缺乏,以往很容易表達如 "Master/Detail",卻怎麼在 Web 上如此難寫?

舉一個最簡單的例子,Client/Server 的表單設計,當操作人員輸入客戶ID 時,按【TAB】鍵移到下一欄位時,就會自動顯示出客戶姓名。嘿,當時若用 ASP/JSP 來寫這樣的作法,並不是一件容易的事呢。


什麼? Web 的表單設計,是當操作者填完整個表單的資料後,才會按【Submit】送出至 Web Server
處理,處理後傳回結果,連線就中斷了。所以,Browser/Web Server 的溝通,是屬於 "Stateless(無狀態)"
的方式;相對於 Client/Server,因為表單一直是連線著資料庫,不管你有沒有在用,資料庫就是一直連線著,我把這稱之為
"佔著茅坑不拉屎"。:) 表單與資料庫的持續連線,稱之為 "Stateful",也正因如此,所以表單要資料處理時,隨時就可以至資料庫
"撈資料"。

"Stateless" 是為了節省系統資源,因為 Web Server 所服務的 Client
是至少以百計以上,不可能讓每個 Client 都一直連線著;"Stateful" 會浪費系統資源,但是可以盡善盡美地來服務 Client,在
MIS 內部,操作者規模在 100 人以內,系統的負荷是不會有問題的,當然就可以這樣作。

結果,許多程式設計師,搞不懂
"Stateless" 與 "Stateful" 的原理,不僅是新手而已,也有很多算是老手級的了,以上剛我所舉的例子,為了能達成輸入客戶 ID
後,就能馬上秀出客戶姓名,竟然就乾脆一次把位於資料庫的客戶資料全部傳到 Browser 內,然後,用 JavaScript 寫個 For-Loop 的迴圈啊,來找出對應 ID 的客戶姓名。


譜吧? 會犯這種低級錯誤的,還可真不少呢。 除了增加傳輸頻寬的負載外,根本就沒有基本安全性的防護,赤裸裸地將客戶資料全部儲存在 Browser
內。我在輔導 Web 化的專案時,絕對是嚴禁利用 JavaScript 作上述這種事情,甚至,也不容許企業邏輯寫在 JavaScript
內,例如,計算員工薪資,一定是在 Middleware 來負責處理的。

難道,JavaScript 真的是一無是處,是個爛東西? 不然啦~ 我會用 "爛東西" 來凸顯,其實是要提醒,程式設計師,可千萬不能濫用。我們要為 JavaScript 來正名,瞭解它真正的角色與責任。

我最激賞的網頁設計技術,就是微軟所提出的 ASP.NET。在其技術裡,總算找到了為 JavaScript 定位的最好名稱了,就是 "間諜(Spy)"

且聽我道來~


頁設計的技術,最大的挑戰,就是要能把 Stateless 的現實環境,"模擬" 成具 Stateful 的狀態。也就是說,Web
化的表單,即使還沒按下【Submit】之前,很有可能會根據某某欄位的資料,而即時送至 Web Server
處理,並傳回部分的結果,但請記得,因為表單還沒有完全送出,所以,表單的資料,是需要被保存其狀態的,ASP.NET,簡單的說,就是利用在 Web
Server 有個 "State Bag" 的機制來為 Client 儲存尚未【Submit】的表單資料。

那麼,是誰來負責傳送欄位的資料? 當然就是 JavaScript 囉~
UI
的設計,除了 Style 的美感之外,在技術面,最為重要的,就是 UI
元件的狀態與事件(Event)的處理了。仍然舉上述的例子,當輸入客戶ID
後,操作者可能按下【TAB】鍵或是以滑鼠點選移至下一個欄位,這兩種動作,都會觸發了事件,此時,JavaScript 當作 UI
的事件處理者(Event Handler),收到事件後,根據 UI 所設計條件邏輯,來決定是否後送至 Web Server
來處理,再把結果傳回,並秀出在 UI 上。整個後送的過程,操作者完全沒有感覺,可能就是畫面閃了一下,其實就是作一次 "Refresh"
的動作,JavaScript 已經偷偷地把資料後送至 Web Server 處理了。

Javascript 除了可以在 Browser 端,作一些動態的展示呈現效果外,在企業應用系統的 Web 化表單設計,就讓它回歸最單純的角色,UI 事件的處理者,簡單的說,就是 "間諜"。如此,就不會把 Web UI 的設計搞成複雜又糾纏不清,JavaScript 反而會變成 "好東西" 了。 ;)

Unicode 編碼

問:怎麼才能關掉一個用任務管理器關不了的進程?我前段時間發現我的機子裏多了一個進程,只要開機就在,我用任務管理器卻怎麼關也關不了。   

  答1:殺進程很容易,隨便找個工具都行。比如IceSword。關鍵是找到這個進程的啟動方式,不然下次重啟它又出來了。順便教大家一招狠的。其實用Windows自帶的工具就能殺大部分進程:   

 c:>ntsd -c q -p PID   

  只有System、SMSS.EXE和CSRSS.EXE不能殺。前兩個是純內核態的,最後那個是Win32子系統,ntsd本身需要它。ntsd從
2000開始就是系統自帶的用戶態調試工具。被調試器附著(attach)的進程會隨調試器一起退出,所以可以用來在命令行下終止進程。使用ntsd自動
就獲得了debug許可權,從而能殺掉大部分的進程。ntsd會新開一個調試窗口,本來在純命令行下無法控制,但如果只是簡單的命令,比如退出(q),用
-c參數從命令行傳遞就行了。Ntsd 按照慣例也向軟體開發人員提供。只有系統開發人員使用此命令。用法:開個cmd.exe窗口,輸入:   

  ntsd -c q -p PID   

  把最後那個PID,改成你要終止的process的ID。如果你不知道process的ID,工作管理員->process選項->查看->選擇列->勾上"PID(",然後就能看見了。
  
  答2:xp下還有兩個好東東tasklist和tskill。tasklist能列出所有的進程,和相應的資訊。tskill能查殺進程,語法很簡單:tskill 程式名!!

2007年4月30日 星期一

killing process

Windows啟動時通常會有一大堆程序自動啟動。不要以為管好了「開始→程序→啟動」菜單就萬事大吉,實際上,在Windows XP/2K中,讓Windows自動啟動程序的辦法很多,下文告訴你最重要的兩個文件夾和八個註冊鍵。

  一、當前用戶專有的啟動文件夾

  這是許多應用軟件自動啟動的常用位置,Windows自動啟動放入該文件夾的所有快捷方式。用戶啟動文件夾一般在:\\Documents and Settings\\&lt;用戶名字>\\「開始」菜單\\程序\\啟動,其中「&lt;用戶名字>」是當前登錄的用戶帳戶名稱。

  二、對所有用戶有效的啟動文件夾

  這是尋找自動啟動程序的第二個重要位置,不管用戶用什麼身份登錄系統,放入該文件夾的快捷方式總是自動啟動——這是它與用戶專有的啟動文件夾的區別所在。該文件夾一般在:\\Documents and Settings\\All Users\\「開始」菜單\\程序\\啟動。

  三、Load註冊鍵

  介紹該註冊鍵的資料不多,實際上它也能夠自動啟動程序。位置:HKEY_CURRENT_USER\\Software\\Microsoft\\WindowsNT\\CurrentVersion\\Windows\\load。

  四、Userinit註冊鍵

  位置:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\ Winlogon\\Userinit。這裡也能夠使系統啟動時自動初始化程序。通常該註冊鍵下面有一個userinit.exe,如圖一,但這個鍵允許指定用逗號分隔的多個程序,例如「userinit.exe,OSA.exe」(不含引號)。



圖一


  五、Explorer\\Run註冊鍵

  和load、Userinit不同,Explorer\\Run鍵在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具體位置是:HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ Policies\\Explorer\\Run,和HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\ CurrentVersion\\Policies\\Explorer\\Run。

  六、RunServicesOnce註冊鍵

  RunServicesOnce註冊鍵用來啟動服務程序,啟動時間在用戶登錄之前,而且先於其他通過註冊鍵啟動的程序。 RunServicesOnce註冊鍵的位置是:HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\ CurrentVersion\\RunServicesOnce,和HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\ Windows\\CurrentVersion\\RunServicesOnce。

  七、RunServices註冊鍵

  RunServices註冊鍵指定的程序緊接RunServicesOnce指定的程序之後運行,但兩者都在用戶登錄之前。RunServices的位置是:HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ RunServices,和HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\ CurrentVersion\\RunServices。

  八、RunOnce\\Setup註冊鍵

  RunOnce\\Setup指定了用戶登錄之後運行的程序,它的位置是:HKEY_CURRENT_USER\\Software\\Microsoft \\Windows\\CurrentVersion\\RunOnce\\Setup,和HKEY_LOCAL_MACHINE\\SOFTWARE\\ Microsoft\\Windows\\CurrentVersion\\RunOnce\\Setup。

  九、RunOnce註冊鍵

  安裝程序通常用RunOnce鍵自動運行程序,它的位置在HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\ Windows\\CurrentVersion\\RunOnce和HKEY_CURRENT_USER\\Software\\Microsoft\\ Windows\\CurrentVersion\\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce鍵會在用戶登錄之後立即運行程序,運行時機在其他Run鍵指定的程序之前。HKEY_CURRENT_USER下面的RunOnce鍵在操作系統處理其他Run鍵以及「啟動」文件夾的內容之後運行。如果是XP,你還需要檢查一下HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\ CurrentVersion\\RunOnceEx。

  十、Run註冊鍵

  Run是自動運行程序最常用的註冊鍵,位置在:HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\ CurrentVersion\\Run,和HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\ CurrentVersion\\Run。HKEY_CURRENT_USER下面的Run鍵緊接HKEY_LOCAL_MACHINE下面的Run鍵運行,但兩者都在處理「啟動」文件夾之前。