2013年12月25日 星期三

Oracle user密碼過期解決方式

最近使用很久沒使用的Oracle DB發現出現密碼過期的提示訊息
解決方式如下:

首先使用有 DBA 擁限的使用者登入 通常會用 sys as sysdba 這邊我採用sqlplus連線
接著查詢一下user的status看一下是否真的過期了(Expired)
接著修改密碼使用期限後,再修改使用者輸入新的密碼,如圖


恭喜搞定!



2013年12月24日 星期二

修改Linux目錄顏色 從深藍變淺紫色

看Linux畫面時目錄顏色常常讓人看不清楚,因此這篇文章教學如何快速修改目錄顏色


之後離開termnial後 重新進入就會看到目錄變色嘍!



2013年12月17日 星期二

JQuery Validate Password Format

好久沒寫文章,事實上幾乎都把很多技術文章都轉成文件了,最近比較有空就寫個最近用到的東西,JQuery Plugin Validate

首先當然你可能必須要了解什麼是 JQuery,網路上的文章很多,這部分我就不贅述了!
而且我今天所要用的是在前端頁面就可以做一些判斷,例如必填欄位,至少需幾位字元等等

話不多說,Let do it !!!

首先至 JQuery官網 Download JQuery js,再到http://jqueryvalidation.org/ download JQuery validate js
如下 我寫了一個範例程式有2個欄位,請使用者輸入第一次與第二次密碼確認

<form method="GET" id="myform">
<table align="center" style="width:100%; height: 100px; text-align:center;" class="queryTable">
<tr>
<th align="center" colspan="3" class="detailTitle" >
個人更新密碼
</th>
</tr>
<tr>
<td class="queryHeader">更改密碼<span style="color:red;">*</span></td>
<td><input type="password" id="ps" size="30" name="ps"/></td>
</tr>
<tr>
<td class="queryHeader">確認密碼<span style="color:red;">*</span></td>
<td><input type="password" id="ps2" size="30" name="ps2"/></td>
</tr>
<tr>
<td colspan="2" align="right">
<input type=button value="更新" onClick="send()" class="radiusBtn"/>
</td>

</tr>
</table>
</form>

這邊我就不附上我的css class了,首先完成了你的 password form 後,接著記得 在你的jsp頁面上把剛才download的檔案(解壓縮在dist目錄)把js放入你的Web Project(Content)下的目錄
<script src="js/jquery-1.10.2.js" type="text/javascript"></script>
<script src="js/jquery.validate.js" type="text/javascript"></script>
<script src="js/additional-methods.js" type="text/javascript"></script>

開始主要驗證程式 如下
<script>
// just for the demos, avoids form submit
jQuery.validator.setDefaults({
  debug: true,
  success: "valid"
});
$( "#myform" ).validate({
  rules: {
    ps: {
      required: true,
      minlength:8
    },
    ps2: {
      equalTo: "#ps"
    }
  }
});
</script>



重點提示 ps,ps2 這邊是指的是name而不是id,所以沒設定name是不行的
基本上有許多規則可以設定使用可參考其它網址
http://www.coolsun.idv.tw/modules/xhnewbb/viewtopic.php?topic_id=1244
http://jqueryvalidation.org/equalTo-method/
http://iphp.wesped.es/wp/blog/2012/09/page/3/

如上面圖示你會發現我的訊息提示是中文的,基本上套件預設的是英文的
我使用的方式是建立一個message_cn.js 接著同樣在剛在import jquery的位置 import進來
<script src="js/messages_cn.js" type="text/javascript"></script>

其中js的內文就如下
jQuery.extend(jQuery.validator.messages, {
required: "必要欄位",
remote: "請修正該字段",
email: "請輸入正確格式的電子郵件",
url: "請輸入合法的網址",
date: "請輸入合法的日期",
dateISO: "請輸入合法的日期 (ISO).",
number: "請輸入合法的數字",
digits: "只能輸入整數",
creditcard: "請輸入合法的信用卡號",
equalTo: "請再次輸入相同的值",
accept: "請輸入有效的字符串",
maxlength: jQuery.validator.format("請輸入一個長度最多是 {0} 的字元"),
minlength: jQuery.validator.format("請輸入一個長度最少是 {0} 的字元"),
rangelength: jQuery.validator.format("請輸入一個長度介於 {0} 和 {1} 之間的字元"),
range: jQuery.validator.format("請輸入一個介於 {0} 和 {1} 之間的值"),
max: jQuery.validator.format("請輸入一個最大為 {0} 的值"),
min: jQuery.validator.format("請輸入一個最小為 {0} 的值")
});

結果訊息就會是中文的嘍!^^"
===============================================================
接著我想加入我密碼的規則,除了套件預設的規則外,我們還可以自訂規則
如下我的規則是必須符合至少8位至多10位,含!@#$%特殊字元與數字,及英文字母大小寫各1位
$.validator.addMethod("pwcheck", function(value) {
  return /^[A-Za-z0-9\d=!\-@._*]*$/.test(value) // consists of only these
      && /[a-z]/.test(value) // has a lowercase letter
      && /\d/.test(value); 
});

然後加上對於此規則的訊息提示使用原本的js變成
$( "#myform" ).validate({
  rules: {
    ps: {
      required: true,
      rangelength:[8,10],
      pwcheck: true
    },
    ps2: {
      equalTo: "#ps"
    }
  },
  messages: {
      ps: {
     required: "必填欄位",
     rangelength: jQuery.validator.format("請輸入長度介於 {0} 至 {1} 之間的字元"),
     pwcheck: "請輸入正確的密碼格式"
      }
  }
});
很神奇吧!,事實上訊息會優先讀取這邊的設定喔!




2012年7月25日 星期三

在xsd complexType 加入 simpleType 做條件限制

由於之前寫了一個WebService method 名為searchActiveDepts,我一開始預設是使用String[],由於 java已預設會將String的xsd(XML Schema) maxOccurs 設為 unbound,若企圖改寫xsd並加入simpleType的條件限制,以下為成功的範例碼。


<xs:complexType name="searchActiveDepts">
<xs:sequence>
<xs:element name="keywords" minOccurs="0" maxOccurs="3">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value="10"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
<xs:element name="account" type="tns:userAccount" minOccurs="0"/>
</xs:sequence>
</xs:complexType>


若直接用瀏覽器查看xsd,亦會看到如下

-<xs:complexType name="searchActiveDepts">
  -<xs:sequence>
    -<xs:element name="keywords" minOccurs="0" maxOccurs="3">
      -<xs:simpleType>
        -<xs:restriction base="xs:string">
          <xs:maxLength value="10"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:element name="account" type="tns:userAccount" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

關鍵在於在尚未加入simpleType時,本來是
<xs:element name="keywords" type="xs:string" minOccurs="0" maxOccurs="unbound">

而我為了加入simpleType必須將紅色的部分拿掉
且我的目的是 使用此element(keyword)最多只能一次使用3組,所以設定maxOccurs="3"

並且利用simpleType,將每組keyword的長度不可超出10 (ex:"123456",長度為6)


因此現在我的關鍵字查詢功能 可以設定成至多同時輸入 3組查詢,且每組不超過10的長度


另外 simpleType可以加入許多不同的條件限制,詳見
http://www.w3schools.com/schema/schema_facets.asp





2012年7月18日 星期三

分析空白字串及空字串及空白鍵好用的判別式 in java

某天為了撰寫可以判別空白字串" ",空字串"",null 發現了好東西,不用寫一堆||或&&,是由apache所提供的 import org.apache.commons.lang.StringUtils;
public static boolean isBlank(String str) Checks if a String is whitespace, empty ("") or null. ex1:StringUtils.isBlank(null) = true 
ex2:StringUtils.isBlank("") = true 
ex3:StringUtils.isBlank(" ") = true 
ex4:StringUtils.isBlank("test") = false
ex5:StringUtils.isBlank(" test ") = false //空白+文字+空白
ex6:StringUtils.isBlank(" test") = false  //空白+文字
ex7:StringUtils.isBlank("test ") = false  //文字+空白
所以我只要將程式事先import我要用的package即可使用StringUtils內的isBlank(or isNotBlank) 而我可以利用此方式先用isBlank判斷出前三種情況(ex1~3),而對於ex5~7的情況,先用isBlank判斷後, 再使用trim()方式將ex5~7的字串順利轉成ex4,得到一個不含空白字串或null或空字串的String

2012年5月8日 星期二

NetBeans download SVN Projects

想要在NetBeans download SVN上的project這裡提供兩個方法
第一個是在NetBeans IDE上面找到Team-->簽出(CheckOut)會請你先download subversion工具
網址是http://www.collab.net/downloads/subversion(需註冊)
我所安裝的是Subversion Edge 3.0 (Windows 64-bit) 安裝完畢後將檔案路徑指向你所download的路徑xxx/bin(取到bin的目錄)
之後關閉IDE,接著重新開啟IDE,再度從Team-->簽出 即可使用簽出的功能了
接著就可以將所要download的SVN路徑加入
如XXX(專案名稱)在SVN上的路徑為http://yourURL/svn/XXX正常來說會將檔案download至預設位置 /文件/NetBeansProjects/XXX
接著在IDE試著OpenProject 即便選到了我們剛load下來的所在位置 亦無法開啟
原因是 若在NetBeans要OpenProject需要加入名為nbproject的folder以及build.xml
故我隨意在NetBeans創造一個新的project(名為test),接著去此專案所在的目錄下將此2個檔案複製至XXX下
再次OpenProject會發現已可成功將XXX的檔案加入你新開啟的專案,但名稱為test(因為是複製它的xml)
重新命名專案名稱即可完成。
--------------------------------------------------------------------------------------------
另一種方式是download TortoiseSVN
網址為http://tortoisesvn.net/downloads.html(不需註冊)
安裝成功後,在桌面按右鍵 會出現 SVN CheckOut,一樣將SVN檔案所在位置輸入後
download檔案至桌面,之後重新開機後會發現剛才download的檔案目錄會出現一個綠色的勾勾,
之後以相同的方式在IDE中OpenProject,即可完成。

此時打開所建立的專案XXX會發現事實上並沒有將lib中的jar檔加入至你的專案中
以致於java會出現一堆錯誤,在XXX(專案名稱)按右鍵-->Properties
選擇程式庫,再右邊選擇加入JAR(看專案需求有可能為lib),再選擇你剛從SVN download下來的lib的檔案加入
回到專案java程式沒有出現錯誤時,才算正式完成。

2012年4月27日 星期五

在Web專案中加入自訂游標

想在自己建立的網站自訂游標,查了好久大部分網站提供的方式幾乎都為呼叫外部的URL來
載入所要使用的*.cur或*.ani檔,然後大多是對於自己部落格之類的教學。
而我試著將自己開發的專案加入自訂的游標,而非使用別人寫好的框架,當然不外乎一定要去修改css檔案,正常來說網路上大多提供了此兩個方式寫法舉例來說如下body{cursor:url(http://home.kimo.com.tw/seek2007tw/ani/12/055.ani)}
a:hover {cursor:url(http://home.kimo.com.tw/seek2007tw/ani/12/055.ani)}
http://home.kimo.com.tw/seek2007tw/ani/12事實上這一串是網路空間的url,用這種方式你還必須去申請一個網路空間或是自己花錢架Web Server,而我所在意的是由於我的開發環境並不能連結外部的URL,所以這方式對我而言是沒有用的,因為提供以下方式供大家參考。

首先開發一個Web Application會有WebContent的目錄,此時將你的*.ani或*.cur(游標檔案)放至
WebContent下,這個時候你就可以得到你所在的url,例如我的專案名稱為xxx而測試環境為127.0.0.1此時可以得到此URL為http://127.0.0.1/xxx/*.ani再將此URL放至你的CSS檔案中,如此一來你就可以得到專屬於你自己網路的游標圖示,而非呼叫外部的URL。

----------------------------------------------------------------------------------------------------------
延伸閱讀---由於先前測試時是使用IE6,IE8,IE9測試,利用上面方式已可正確執行,但這是利用直接修改CSS檔來定義自訂游標,由於我的專案擁有許多頁面,我只希望在部分頁面有這樣的效果,那麼只需在你的頁面原始碼<head></head>之間加入
body{
cursor:url("http://127.0.0.1/xxx/*.ani");
}
</style> 
那麼你的效果就可以只在那個網頁產生,而其實更進一步其實由於我們是開發自己的Web Application所以其實我們的URL可以指定絕對路徑,意思就是目錄,
ex:cursor:url('/web/resource/images/*.ani');(建議新增一個目錄,注意加入'')
由於我開發的專案需要滿足客戶的需求是支援 IE及Chrome瀏覽器,但結果我使用上列語法執行時在Chrome並不會顯示出我想的效果,首先我試著查找是否是語法API問題,根據http://www.quirksmode.org/css/cursor.html這裡說明了關於cursor的 API用法以及所支援瀏覽器的版本,其中Chrome是使用Safiri核心,我先前文章有提過,找到url這段,看起來是支援的,而看到許多網路上的建議是使用cursor:url("http://127.0.0.1/xxx/*.ani"),pointer;這樣的寫法(default,pointer,...)看你想將你的自訂游標取代什麼游標,而我使用上列語法後在IE仍為正常,而Chrome卻出現了pointer的預設圖案(跟hand一樣),我更加確定了Chrome確定有支援,但為何沒有跑出我的.ani檔呢!?沒錯,Chrome不支援使用*.ani檔案,但有支援.cur以及.png&.gif的檔案,所以首先你可以 download網路上有提供免費的.cur檔案,再將檔案放至於ani相同路徑的,但是.ani是一個動畫游標,如果我希望能在IE使用,可以使用下列語法

cursor: url('*.ani'), url('*.png'), default;

而事實上你還必須找到可將ani轉換成png的軟體,如此一來現在不管什麼瀏覽器都能使用了(除了Opera不支援url寫法)。

參考網站:
http://www.coursesweb.net/css/css-cursor-property-custom-cursors
http://www.w3schools.com/cssref/pr_class_cursor.asp