2014年4月29日 星期二

SQL Server 驗證 方式設定

一般剛裝好的SQL Server是不能使用帳號密碼登入的

就算設定了使用者也是一樣

下面就來介紹一下除了設定使用者(security -> login)之外的其他設定

----

1. Server的驗證模式 調整成混合模式 (需要重啟Server)

http://technet.microsoft.com/zh-tw/library/ms143705(v=sql.90).aspx

2. SQL Server Configuration Manager的"網路組態"設定啟用TCP/IP,並且在裡面的IPALL設定Port為指定的port(default=1433)

(下面這個兩個設定都有啊,保哥果然厲害!!!)
http://blog.miniasp.com/post/2007/12/28/How-to-enable-SQL-Express-TCP-IP-connection.aspx




2014年3月7日 星期五

MySQL Create User

CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' with grant option

ps aux

指令介紹:

ps aux | grep 'httpd' | awk '{print $2}'


ps aux:看行程

grep:篩選

awk:格式化輸出


應用:
kill $(ps aux | grep 'httpd' | awk '{print $2}')

2014年2月19日 星期三

Tomcat中createNewFile發生錯誤

Tomcat中createNewFile發生錯誤

<Item>

寫檔案 createNewFile() 發生exception

發現是Tomcat安裝路徑含有空白

<Solve>

可以透過移動Tomcat安裝路徑來解決

但是 直接一點的解法 應該是需要控制tomcat 或是 java中resource的存取

在研究...

<Ref>

ref: http://www.coderanch.com/t/554674/java/java/Create-file-spaces-file-path

2013年12月25日 星期三

增加sudo權限給使用者

情境

指定帳號給他執行sudo的權限

需求

1. root帳號

2. visudo

步驟

1. 利用root登入 或是 其他有權限的使用者

2. 輸入 visudo,會自動開啟vi,在裡面找到 

        root    ALL=(ALL)    ALL

3. 在這個區塊輸入指定的username,並設定權限如下

        username    ALL=(ALL)    ALL

4. :wq! 存檔, 指定的user已經可以使用sudo囉!

2013年11月7日 星期四

Thread Test!!



import java.util.LinkedList;
import java.util.List;


public class Can {
public static int count = 0;
public LinkedList<String> can = new LinkedList<String>();

public Can(){
count++ ;
System.out.println(count);
}
public void addObj(String obj){
can.addLast(obj);
}
public void removeObj(){
can.removeLast();
}
@Override
public String toString() {
return can.toString();
}
}

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

class Person implements Runnable{
public String name;
public Can can;
public Person(Can can, String name){
this.can = can ;
this.name = name ;
}
public void action(){
int SIZE = 100;
if(can.can.size() == SIZE){
for(int i = 0 ; i < SIZE; i++){
can.removeObj();
System.out.println(name +" take");
}
}else{
for(int i = 0 ; i < SIZE; i++){
can.addObj(name);
System.out.println(name +" drop");
}
}
}
@Override
public void run() {

//
synchronized(this){ // 鎖在自己身上。沒用!!
synchronized(can){  // 鎖在同樣的instance上。work!!
action();
}
}
}
public class Main {
public static Can c = new Can();
public static Can getACan(){
return c;  // 模擬Container, singleton
// return new Can();// 模擬Container, non-singleton
}
public static void main(String[] args) {
Can can = getACan();
Thread p1Action = new Thread(new Person(getACan(), "A"));
p1Action.start();

Thread p2Action = new Thread(new Person(getACan(), "B"));
p2Action.start();
}

}

2013年10月27日 星期日

Log4j概念 與使用情境

那天在跟公司新人介紹log4j的時候

就突然想到其實這個設計很簡單啊 怎麼會一直都沒有被弄清楚?

所以 來吧!! 介紹一下!!

在log4j的官方文件上面有一段清楚地說明

http://logging.apache.org/log4j/1.2/manual.html

Log4j has three main components: loggersappenders and layouts. These three types of components work together to enable developers to log messages according to message type and level, and to control at runtime how these messages are formatted and where they are reported.
Logger用來記錄訊息,包含log等級與log類型

Appender用來控制訊息會被放到什麼地方

Layout用來控制訊息的格式



簡單的情境如下

我們設定一個appender與layout

指定log會被記錄到檔案中 (appender)

並且會使用 "yyyy/mm/dd hh:MM:ss [訊息等級] 訊息內容" 格式來記錄訊息

接著設定 logger

指定一個logger要log的等級是INFO以上

並且將logger與appender接上


之後在程式裡面就取得此logger,並且使用應該使用的log等級來記錄訊息

例如
logger.trace("測試測試");
logger.debug("變數A = " + A);
logger.error("db conn. setting error.");


因為設定已經將log的等級設定為INFO

所以依照 TRACE < DEBUG < INFO < WARN < ERROR < FATAL 的等級

之前的訊息只有 error的項目 會被記錄到最後產生出來的檔案中

2013年9月13日 星期五

Maven專案設定

通常我們在開發的時候,會把專案切成幾個部分

例如前端呈現與後台邏輯,各自也可以有自己架構

前端呈現或許可以是單純html+javascript library

也可以用類似ZK這樣比較大型的framework

這時候我們一樣可以使用Maven來幫助我們做管理


首先 建立一個主專案 裡面的pom.xml設定
<project>
.
.
.
   <packaging>pom</packaging>
.
.
.
   <modules>
      <module>webProject</module>
      <module>serviceProject</module>   </modules>
.
.
.
</project>

有看到module嗎?我們可以直接在主專案資料夾裡面建立其他的maven專案

這樣當我們編譯主專案的時候,就會跟著依照module的名稱,去編譯其他的module囉

2013年7月30日 星期二

Jasypt - BasicTextEncryptor

http://jasypt.org/api/jasypt/1.9.0/org/jasypt/util/text/BasicTextEncryptor.html

Sample:

import org.jasypt.util.text.BasicTextEncryptor;

public class EncryptTest {
    public static void main(String[] args) {
        BasicTextEncryptor bte = new BasicTextEncryptor();
        bte.setPassword("password");

        String text = "This is visible message!";
        String encrypt = bte.encrypt(text);
        System.out.println("invisible msg:"+encrypt);

        String rs = bte.decrypt(encrypt);
        System.out.println("Decode:" +rs);
    }

}

聽說寫網誌 還是要打一些字。

所以跟廢話注解一樣,這是在說明BasicTextEncryptor的用法。

(Y)

2013年6月28日 星期五

bootstrap compile

brew install nodejs
// 先有nodeJS才會有npm

npm install
// 到git下來的資料夾,裡面有個package.json設定有該裝的東西 npm可以安裝起來

make
// 先make安裝基本的library -> node_modules

make bootstrap
// 編譯,會輸出到bootstrap資料夾

--
npm 已經安裝了!!! (超怪...)

被安裝在 /usr/local/lib/node_modules/npm

導致不能安裝nodejs

homebrew指定的解安裝指令也不能用... 真的有點囧 (npm uninstall npm -g)

最後直接移除掉npm的資料夾

再安裝nodejs (成功)

--
路徑沒有被自動建立起來.... (囧)

brew link node (失敗)

brew link --overwrite node