顯示具有 心得筆記 標籤的文章。 顯示所有文章
顯示具有 心得筆記 標籤的文章。 顯示所有文章

2018年8月30日

安裝Parity筆記

安裝rust

curl https://sh.rustup.rs -sSf | sh

安裝parity

  
git clone https://github.com/paritytech/parity-ethereum
cd parity-ethereum
git checkout stable //只安裝stable版本
cargo build --release --features final

或直接下載 binary :
https://github.com/paritytech/parity-ethereum/releases

缺少套件

  • libudev.h
yum install systemd-devel
  • cmake3:
下載cmak3 source (https://cmake.org/)
./bootstrap --prefix=/usr/local
make
make install

執行

./parity --jsonrpc-interface=w.x.y.z --jsonrpc-apis=eth,web3,personal,net,traces --jsonrpc-cors=all --chain=ropsten --jsonrpc-threads=1 --tracing=on
interface 表示要綁在哪一張網卡上

參數說明

  • --jsonrpc-interface 綁定rpc service的IP
  • --jsonrpc-apis 5 RPC支援的API
  • --jsonrpc-cors 允許CORS的網域
  • --chain 使用的ether網路名稱
  • --jsonrpc-threads RPC服務耗用CPU的資源
  • --tracing=on 開啟trace模式
  • --geth geth相容模式,讓RCP的指令可以跟geth相容一點點
  • --warp 使用snapshot方式同步最近的資料,之後有空的時候會慢慢同步前面的資料

config

  • parity也可以使用設定檔,設定檔位址在~/.local/share/io.parity.ethereum/config.toml
[parity]
mode = "active"
mode_timeout = 300
mode_alarm = 3600
auto_update = "critical"
release_track = "current"
public_node = false
no_download = false
no_consensus = false
no_persistent_txqueue = false

chain = "kovan"
base_path = "$HOME/.local/share/io.parity.ethereum"
db_path = "$HOME/.local/share/io.parity.ethereum/chains"
keys_path = "$HOME/.local/share/io.parity.ethereum/keys"
identity = ""
light = false

[rpc]
disable = false
port = 8545
interface = "w.x.y.z"
cors = ["all"]
apis = ["web3", "eth", "net", "personal", "traces"]
hosts = ["none"]
server_threads = 1

[websockets]
disable = true

[ipc]
disable = true

[footprint]
tracing = "on"

[misc]
logging = "own_tx=trace"
log_file = "/var/log/parity.log"
color = true

問題排除

  • 錯誤訊息 : TraceDB resync required
    修改~/.local/share/io.parity.ethereum/chains/test/user_defaults,把tracing改為true
  • 當啟動tracing模式的時候將無法使用warp sync

RPC 執行範例

  • Command
curl --data '{"method":"trace_filter","params":[{"fromBlock":"0x1","toBlock":"latest","fromAddress":["0x..............."]"]}],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST w.x.y.z:8545
curl -X POST --data '{"jsonrpc": "2.0", "id":"curltest", "method": "eth_getTransactionByHash", "params": ["0x..............."] }' -H 'content-type: application/json' http://w.x.y.z:8545
  • Result
{"jsonrpc":"2.0","result":[{....}],"id":1}

2018年6月13日

重設Mysql密碼(5.7 以上)

關閉mysql 服務:
sudo mysqld_safe --skip-grant-tables &
sudo /etc/init.d/mysqld stop
mysql -uroot 
登入後指令:
use mysql;          
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';
flush privileges;
quit;
重設密碼:
mysqladmin -u root password

2018年4月17日

乙太坊筆記 – 建立虛擬鏈

  • 初始化私有ETH網路,可以用puppeth指令產生創世區塊的json內容
geth --datadir “./privatechain” init custom_genesis.json
  • 建立兩個節點,這樣之後一個節點可以提供rpc服務,一個可以用來挖礦
  • 如果是要在同一台機器上建立不同的節點,所有的節點都必須在獨立的目錄底下運作

        {
          "config": {
            "chainId": 657,
            "homesteadBlock": 1,
            "eip150Block": 2,
            "eip150Hash": "0x000000000000000000000000000000000...",
            "eip155Block": 3,
            "eip158Block": 3,
            "byzantiumBlock": 4,
            "ethash": {}
          },
          "nonce": "0x0",
          "timestamp": "0x5ad4459f",
          "extraData": "0x000000000000000000000000000000000...",
          "gasLimit": "0x47b760",
          "difficulty": "0x80000",
          "mixHash": "0x000000000000000000000000000000000...",
          "coinbase": "0x000000000000000000000000000000000...",
          "alloc": {
            "xxxx": {
              "balance": "0x2000000000000000000000000000000000..."
            }
          },
          "number": "0x0",
          "gasUsed": "0x0",
          "parentHash": "0x000000000000000000000000000000000..."
        }
        
  • custom_genesis.json 裡面可以放一些錢給測試用的帳號:
    "alloc": {
               "0xxxxxx":
                   {"balance": "10000"}
            }
        
  • 在console啟動節點
    • 常用參數
      • --networkid 為啟動在哪個網路id,避免衝突
      • --datadir 為指定區塊鏈資料位置
      • --ipcdisable 不加這個參數的話在本地啟動多個服務會出現access deny(CentOS沒這個問題,windows才會)
      • --config 後面可以加上自定義的TOML檔案來設定參數
      • 在<datadir>/geth/底下的static-nodes.json可以定義要和這個node同步的peers
      • 指令後面加上 dumpconfig 可以把設定值匯出成toml檔案
    • node1(監聽2000 port) :
    geth --datadir ./privatechain --networkid 1510 
    --port 2000 --ipcdisable console
            
    • node2(監聽2001 port) :
    geth --datadir ./privatechain --networkid 1510 
    --port 2001 --ipcdisable console
            
  • 讓兩個節點可以互相溝通
    • 在node1執行 admin.nodeInfo
      在輸出的結果中找到enode 資訊,會有類似底下的格式 :
      enode://xxxxx@[::]:2000,把enode的xxxx抄下來
    • 回到node2,執行
      admin.addPeer("enode://xxxxx@127.0.0.1:2000")
      127.0.0.1:2000 是node1監聽的位置
      照相同的步驟在node1把node2的端點加進去
      執行 admin.peers 檢查一下是否兩個node都互相連結了
    • 每次重啟node都需要重新做一次,可以直接toml設定檔來寫入設定,避免每次都要重新加
  • 在console模式底下的指令:
    • 查看帳戶
      eth.accounts

    • 建立帳號,設定密碼 123456
      personal.newAccount("123456")

      產生的私鑰會放在keystore目錄裡面
    • 解鎖帳號,這樣就不需要輸入密鑰也能交易
      personal.unlockAccount('0xxxxxx','pass')

  • 啟動RPC服務
    geth --datadir ./privatechain --networkid 1510 --rpc

會開始監聽 8545 port



  • 挖礦
    geth --datadir ./privatechain --networkid 1510 
            --port 2001 --ipcdisable --mine --minerthreads=1 
    --etherbase=0xxxxx 

    • etherbase 用來指定挖礦的coin要歸戶給哪個帳戶
    • minerthreads 表示要用幾個thread來挖礦



  • 交易
    Ethereum EVM的單位是Wei
    1 Ether = 1,000,000,000,000,000,000 Wei
    交易費用 = 實際用到的Gas * Gas Price
    如果Gas Limit不夠,交易將會無法完成,但是手續費會被扣掉
    如果Gas足夠,剩下的Gas會釋出所以不會多收手續費
  • 注意事項
    • 不管是要在哪一個node對虛擬鏈下交易指令,都必須在那一台node上啟動挖礦,否則交易都會卡在pending裡面(有時候在各個node可以查到交易成功,但是用了第三方套件例如metamask則會無法顯示正確交易結果)
    • 有時候挖礦指令會當掉,必須先
      miner.stop()
      miner.start(1)
      重新開啟
  • 每個node最後執行的指令
    • node 1 :
      geth --datadir ./privatechain --networkid 1510 
              --port 2000 --config config.toml --rpc 
      --rpcaddr x.x.x.x --rpccorsdomain "*" console
    • node 2:
      geth --datadir ./privatechain --networkid 1510 
              --port 2001 --config config.toml --mine 
      --minerthreads=1 --etherbase=0xxxxx console
  • 2018年3月15日

    Let's encrypt 支援Wildcard SSL

    也許是太多奧客客訴了,現在acme.sh 指令後面要加上 --yes-I-know-dns-manual-mode-enough-go-ahead-please

    Let's encrypt已經在3/13號開始支援wildcard ssl了,不過Wildcard SSL只能用dns-01做驗證,並且必須使用ACME 2.0。以下就記錄一下設定過程:

    1.安裝acme.sh

    專案網址為 https://github.com/Neilpang/acme.sh,可以在linux主機上安裝支援Bash, dash和sh的shell script
    目前certbot還不支援wildcard ssl,所以先用這個吧
    
    curl https://get.acme.sh | sh
    
    
    等他跑完就完成了,他會安裝在/.acme.sh/ 目錄底下,並協助設定環境變數。
    重新登出後或使用source .bashrc 指令更新一下環境變數就可以直接使用了

    2.取得驗證用的dns紀錄和生成需求(以*.example.com為例):

    
    acme.sh  --issue -d *.example.com --dns  \
      --yes-I-know-dns-manual-mode-enough-go-ahead-please
    
    
    接下來let's encrypt會請你設定一個名為 _acme-challenge.example.com 的DNS TXT Record,確定設定好之後再執行下面的指令。
    PS. 記住要確定設定好了再做(先用nslookup或dig 好好確認一下),不然他會再生出一組新的需求,並重新產生一個新的TXT內容,然後你就要再設定一次DNS。 

    3.再來就是要產生cert和key了

    如果成功會告訴你他把key和cert都放在/root/.acme.sh/*.example.com 底下。
    
    acme.sh  --renew -d *.example.com \ 
     --yes-I-know-dns-manual-mode-enough-go-ahead-please
    
     

    4.重新把你需要的cert和key發布到其他目錄:

    其實要自己搬過去也是可以啦
    
    acme.sh  --installcert  -d  *.example.com   \
            --cert-file /etc/nginx/ssl/example.com.cert \
            --key-file   /etc/nginx/ssl/example.com.private.key
     

    5.設定nginx 來支援ssl:

        
    ssl_certificate /etc/nginx/ssl/example.com.cert;
    ssl_certificate_key /etc/nginx/ssl/example.com.private.key;
    
    

    6.重啟nginx:

        
    service nginx restart
    
    

    2017年12月14日

    利用docker-compose建立tomcat和apache整合的服務

    本文為記錄公司專案中整合 apache和tomcat在docker上執行的實例,Apache套件是另外安裝,tomcat則是拿搭配JRE 1.7的版本 

    Dockerfile - Apache
    FROM ubuntu
    ENV TZ=Asia/Taipei
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    RUN apt-get update && apt-get install -y --no-install-recommends apache2 libapache2-mod-jk
    RUN a2enmod proxy
    RUN a2enmod proxy_http
    RUN a2enmod proxy_balancer
    RUN a2enmod proxy_wstunnel
    
    ADD ./conf/apache2.conf /etc/apache2/apache2.conf
    ADD ./conf/000-default.conf /etc/apache2/sites-enabled/000-default.conf
    ADD ./conf/worker.properties /etc/libapache2-mod-jk/workers.properties
    ADD ./conf/jk.conf /etc/apache2/mods-available/jk.conf
    VOLUME ["/var/log/apache2"]
    EXPOSE 80 443
    
    CMD ["apachectl", "-k", "start", "-DFOREGROUND"]

    conf/jk.conf
    JKMount /htdocs/* web_1

    conf/apache2.conf
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile /etc/libapache2-mod-jk/workers.properties
    JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
    Dockerfile - Tomcat

    FROM tomcat:7-jre7
    ENV TZ=Asia/Taipei
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    #把編譯好的war檔包進去
    COPY ./webapps/wales-test.war /usr/local/tomcat/webapps/
    # 一些tomcat的context 設定 
    COPY ./wales-test.xml /usr/local/tomcat/conf/Catalina/localhost/ 
    COPY ./lib/mysql-connector-java-5.1.28-bin.jar /usr/local/tomcat/lib/ 
    COPY ./lib/proxool-0.9.1.jar /usr/local/tomcat/lib/ 
    COPY ./lib/proxool-cglib.jar /usr/local/tomcat/lib/ 
    COPY ./lib/commons-logging-1.2.jar /usr/local/tomcat/lib/ 
    EXPOSE 8009

    docker-compose.yml
    
    version: "2" 
      services:
        tomcat:
          volumes:
          - ./tomcat/logs:/usr/local/tomcat/logs 
          expose:
          - 8009
          Image: wales /tomcat
          container_name: "tomcat"
          build: ./tomcat
          environment:
          - JAVA_OPTS=-Djava.security.egd=file:/dev/./urandom
          networks:
            wales_net:
                ipv4_address: 192.168.1.2
    
        http:
          volumes:
          - ./httpd/logs:/var/log/apache2
          ports:
          - "80:80"
          - "443:443"
          image: wales/httpd
          container_name: "httpd"
          build: ./httpd
          networks:
            wales_net:
                ipv4_address: 192.168.1.3
      
      #另外指定docker要用的網路區段
      networks:
        wales_net:
            driver: bridge
            ipam:
                driver: default 
                config:
                    subnet: 192.168.1.0/24
        
    啟動服務

    docker build -t devmaster/httpd httpd/
    docker build -t devmaster/tomcat tomcat/
    docker-compose up -d

    2017年3月25日

    Virtualbox - Host Only Adapter問題解決方案

           自從使用Windows 10之後使用VirtualBox就一直遇到困難,由於我會在Virtual Box的guest裡面安裝Centos,再利用 host來存取guest的服務,所以我會設定兩張網卡:一張是NAT,另一張則是僅限主機,但是在改用Windows 10之後就一直踢到鐵板,甚至連vagrant 和docker toolbar也不能使用。



           本來還想說難道是我自己的問題?為什麼台灣沒有半個人遇到?現在想想應該是大部分的工程師為了要讓自己潮一點都改用mac了吧

           在國外一些論壇已經有很多人發現這個問題,大部分都是指向HostOnly Adapter裡面的VirtualBox NDIS6 Bridged Networking Driver這個服務,只要將他disable就可以,但是見鬼的是我根本沒有這個服務,倒是多了一個Kaspersky Anti-virus NDIS Filter,所以這個方法對我來說也沒用。

           最後找到有另外一個和我同病相憐的網友,則是提供了在安裝Virtual Box就要先根除NDIS6的方法,安裝Virtual Box的時候順便加上以下的指令:
    VirtualBox-5.1.18-114002-Win  -msiparams NETWORKTYPE=NDIS5
     然後他就 Works like a charm了~

    2016年11月26日

    不需要利用ntpdate就可以校時

           網路上看到有人的Server需透過proxy才能上網,但是ntpdate不支援proxy設定;竟然想到用wget連到google去取得http response heade來作時間同步,真是有夠神。
    http_proxy=http://youruser:yourpassword@proxyip:proxyport;export http_proxy
    date -s "$(wget --no-cache -S -O /dev/null google.com 2>&1 | sed -n -e '/ *Date: */ {' -e s///p -e q -e '}')"
           來源網址 :

    2016年2月26日

    覆寫jQuery UI Dialog plugin


           最近有一個需求是要自訂jQuery UI Dialog plugin的行為,像是增加新的option和額外處理dialog出現時的 UI配置。研究一下知道要用Jquery UI的Widget Factory,讓jQuery UI Dialog覆寫他自己的function。

    $.widget("ui.dialog", $.extend({}, $.ui.dialog.prototype, {}):
    再把要覆寫的function寫到最後的{}底下:
    $.widget("ui.dialog", $.extend({}, $.ui.dialog.prototype, {
    //覆寫open事件,先呼叫super再執行自訂的函式。把醜醜的jquery ui 叉叉圖案改成fontawesome
      open: function() {
        $.ui.dialog.prototype.open.apply(this, arguments);
        var titlBar = $(this.uiDialogTitlebar).find(".ui-dialog-titlebar-close");
        titlBar.empty().append("");
      },
      //覆寫建立title事件,改為自行定義的函式。增加title前的圖案
      _title: function(title) {
        if (!this.options.type || this.options.type == "info") {
          this.uiDialog.removeClass("error").addClass("info");
          if (!this.options.title) {
            title.html(" 提示");
          } else {
            title.html(" " + this.options.title);
          }
        } else {
          switch (this.options.type) { //可新增其他的類型
            case "error":
              this.uiDialog.removeClass("info").addClass("error");
              if (!this.options.title) {
                title.html(" 錯誤");
              } else {
                title.html(" " + this.options.title);
              }
              break;
          }
        }
      }
    }));
    其中在呼叫jQuery UI Dialog原來的父類別open函數撞牆了,按照網路上的討論是:
    $.ui.dialog.prototype.open.apply(this, arguments);
    但是這樣會進入一個無限的循環,然後就甚麼都動不了。必須在一開始先將這個父類別函數取出來,再進行呼叫 :
    var _dialogOpen = $.ui.dialog.prototype.open;
    $.widget("ui.dialog", $.extend({}, $.ui.dialog.prototype, {
      open: function() {
        _dialogOpen.apply(this, arguments);
        var titlBar = $(this.uiDialogTitlebar).find(".ui-dialog-titlebar-close");
        titlBar.empty().append("");
      }
    ========略========
    }
    fiddle完成範例:

    2015年4月23日

    好用,但是問題多多的Chart.js

    Chart.js是一個很好用的javascript畫圖表工具,但是他卻有一些奇怪的問題。這麼久了似乎也沒有被解掉。
    在這邊紀錄一下目前使用Chart.js遇到的問題:

    • 變換圖表資料導致錯亂
    當你有一個有使用ToolTip的圖表,而這個圖表的內容需要動態替換時這個問題就會產生,範例如下



    當切換圖表的時候,之前的第一個圖表會時不時的出現,擾亂使用者的思緒(只有當滑鼠在圖表上移動的時候會發生這個問題)
    解決問題的方式很簡單,我被這個問題困住好久啊! 解法為 -- 在更換新的資料前,要先執行destroy(),如果不這麼做的話,當使用者在圖表上下了click事件的時候,圖表上的值也會取不到,或是會取到最早那個圖表的資料。看來就是兩個圖表完全重疊在一起了,而且事件還共用。

    • 不要使用barValueSpacing
    這個問題只會發生在bar chart,因為只有bar chart有這個參數(喂~),加了這個參數之後在每個bar之間會出現一個間隙,但是這個東西會導致click也會完全出錯,到目前為止1.0.2還是沒有解決

    2014年8月4日

    利用Selenium IDE進行UI測試

    • 安裝與執行
      • Selenium IDE是Firefox的一個plugin,用來做UI的自動測試:下載網址為http://docs.seleniumhq.org/download/
      • 安裝後,點一下firefox 的工具 -> Selenium IDE ,就會出現底下畫面
    螢幕快照 2014-08-01 下午1.40.15.png
      • 建立test Case可以使用畫面右方的Screenshot at 8月 01 13-41-31.png來進行錄製,錄製完後的畫面如下所示:
    Screenshot at 8月 01 13-48-13.png
      • 錄製完後的case可以使用播放的按鈕Screenshot at 8月 01 13-49-49.png來執行。
      • Screenshot at 8月 04 16-37-34.png這個功能可以設定你要跑的test case是要快一點還是慢一點,通常慢一點比較好,跑太快常常會出問題。
      • 底下的Log視窗可以顯示目前執行發生了多少個問題或是正常完成。
      • 如果有設定WaitFor的Command的話,最長的等待時間是三十秒(預設,可以在option裡面設定)
    • 編寫測試語法
      • 除了自動錄製外,使用者也可以自行撰寫測試語法:點選右邊Table區塊的任一個工作項目後,視窗下方會出現Command、Target與Value三個欄位。
        • Command : 使用Seleium IDE提供的命令,有Click、Verify、Waitfor、Assert等數十種命令可以使用 http://docs.seleniumhq.org/docs/02_selenium_ide.jsp#script-syntax,官網的文件寫的很爛,可以參考http://software-testing-tutorials-automation.blogspot.in/search/label/selenium%20ide
        • Targert : 用來指定Command所要處理的目的,可以是CSS selector、Xpath、link、id或數值(例如pause這個command需要停留的毫秒數),點取target旁邊的Select可以在firefox的視窗裡面選擇你想要套用的元件,但是這個功能常常失效。
        • Value : 指定Command需要用到的數值,例如type時需要輸入什麼字串(pause的秒數需要設定在target)
      • 所有的測試語法都是html的table格式,每列共有三欄,分別是command,target與value。
      • 可以利用store這個Command將javascript運算結果儲存到selenium IDE裏面方便其他command叫用。
        • 例如底下的範例:
    commandstore
    targetjavascript{ var a = Math.random() * 5; Math.ceil(a+1);}
    value:j

    將會產生一個變數j,且其值為亂數取得2~6之間的整數,調用方式如下:

    command:click
    targetcss=#modifyLocalTree > ul.jqueryFileTree:nth-child(${j}) > li.directory.collapsed > a

    利用${}將變數括起來就可以直接使用。

      • 利用waitForxxx系列Command可以讓程式等待某個元件顯示或隱藏時再進行下一個動作,例如:
        • waitForElementNotPresent : 當DOM被移除時才會繼續進行下一步。
        • waitForElementPresent: 當DOM產生時才會繼續進行下一步。
        • waitForVisible : 只有當css的display屬性被設定可顯示時才會繼續進行。
        • waitFoNotrVisible : 只有當css的display屬性被設定none時才會繼續進行。
      • 利用type指令可以在指定的input裡面輸入自定的文字。
      • 利用click指令可以點選指定的DOM,同時也可以用來模擬點選radio或是checkbox,如果沒有指定radio的index,預設會點選第一個。

    後面等我繼續使用,有心得再來補好了

    2014年5月28日

    jQuery 1.9之後的attr

    今天在寫一個table中tr的click事件,本來想要在某一列上click之後就自動選取前方的checkbox;經過許久的測試後發現事情並不單純,利用以前舊有的attr方法來做竟然發生問題

    原來的版本

    在這個解法中是利用.attr('checked')來檢查目前checkbox的選取狀態,在第一次run的時候,功能完全正常;但是如果點了第二次他就失靈了,如果利用Chrome developer tool來查看元件,會發現checkbox的後面會忠實地加上checked="checked"這樣的屬性,妙的是checkbox的顯示完全是未選取狀態。

    查了jQuery的文件後發現,在jQuery 1.9之後要改用prop,雖然這個在1.6版就有了,但現在看來1.9不用這個會出大問題

    http://jquery.com/upgrade-guide/1.9/#attr-versus-prop-

    修改後的版本

    改用prop來檢測目前的checkbox狀態,並且用prop來變更checkbox狀態。這樣就可以正常呈現想要的功能,不過如果再用Chrome developer tool來看的話,會發現checkbox之後的checked ="checked"根本不會改變...
    這真是太詭異了

    2014年2月14日

    PL/SQL迴圈及暫存資料表

    莫名其妙被扯入Oracle EBS系統,被迫學習PL/SQL語法;
    以下為建立暫存資料表及利用迴圈取得相對應子項目資料再一起寫入暫存的筆記:

    //建立暫存資料表

    create GLOBAL TEMPORARY TABLE temp_wales (
      DESCRIPTION VARCHAR2(80 BYTE),
      ASSET_NUMBER VARCHAR2(15 BYTE),
      DATE_PLACED_IN_SERVICE DATE,
      LIFE_IN_MONTHS NUMBER(4,0)
    )
    ON COMMIT PRESERVE ROWS;

    //A取得ID後再去比對B資料表中的Parent_ID

    BEGIN

        FOR rec IN (SELECT ID,DESCRIPTION,ASSET_NUMBER,DATE_PLACED_IN_SERVICE,LIFE_IN_MONTHS FROM A )

    //開始迴圈
        LOOP

    //先寫入父資料的記錄到暫存裡

          INSERT INTO temp_wales( ASSET_NUMBER,DESCRIPTION,DATE_PLACED_IN_SERVICE, LIFE_IN_MONTHS) values( rec.ASSET_NUMBER,rec.DESCRIPTION,rec.DATE_PLACED_IN_SERVICE,rec.LIFE_IN_MONTHS);

    //再寫入子資料的記錄到暫存裡

          INSERT INTO temp_wales( ASSET_NUMBER,DESCRIPTION,DATE_PLACED_IN_SERVICE, LIFE_IN_MONTHS)  SELECT ASSET_NUMBER,'改良',rec.DATE_PLACED_IN_SERVICE,rec.LIFE_IN_MONTHS FROM B WHERE Parent_ID=   rec.ID;

    //結束迴圈

        END LOOP;

    END;

    //撈撈看是否有資料了

    select * from temp_wales;


    2012年7月26日

    jQuery的droppable問題

    最近在改同事寫的網頁,其中有個動態產生droppable div的功能,程式如下
    function createDiv(id){
        item =  '<div id="div_' + id + '">';
        $('#div_map').prepend( item).droppable({
            drop : function(event, ui) {
                    $("#div_' + id).hide(); 
                    do something ....
            }
        });
    }

    畫面上還有幾個其他的droppable div,見鬼的是明明動態產生的div是隱藏的,但是當我把dragable的物件拉過去時,他永遠都會觸發我動態新增的最後一個div事件;假如這個func我跑五次,他就會跑到div_5去;這實在是不合理,已經hidden的東西為什麼可以droppable?

    測試了好久,感覺應該是物件剛建立就被賦予這個事件出錯,於是改成:


    function createDiv(id){
       item =  '<div id="div_' + id + '">';
        $('# div_map ').prepend( item);
        $('#chat_' + id).droppable({
            drop : function(event, ui) {
            $("#div_' + id).hide(); 
                do something ....
            }
        });
    }

    問題解決!

    2012年7月16日

    Virtualbox - 變更VirtualBox硬碟大小

    當VirtualBox硬碟設定為固定大小時,之後如果發現硬碟太小;這時無法用網路上說的方式增加空間,這世界並沒有想像中美好。

    必須先將硬碟檔複製一份:

    VBoxManage clonehd old.vdi  new.vdi --variant Standard

    如果複製完出現uuid重複的話,再下:

    VBoxManage internalcommands sethduuid new.vdi
    來重新產生uuid

    最後再用:
    VBoxManage modifyhd new.vdi --resize 改變之後的大小(MB)

    ex: VBoxManage modifyhd new.vdi --resize 200000

    別再相信網路上抄來抄去的方法了....那真的不能用...

    2010年6月25日

    Facebook 加入粉絲按鈕

    Facebook以前的加入粉絲按鈕改成讚了,網路上google一下只會發現都是講這件事的文章,但是根本沒人告訴你如何在自己的頁面上產生這個功能,不然就是用Facebook social plugin中的Like Box或是Fan Box;又大又肥,如果我只想要一個讚的按鈕呢?
    請改用like button吧!

    iframe src="http://www.facebook.com/plugins/like.php?href=這邊 改成你的粉絲專頁的網址就好了&amp;layout=button_count&amp;show_faces=true& amp;width=200&amp;action=like&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:21px;" allowTransparency="true"

    讚跟加入粉絲現在是一模一樣的東西了,也難怪網路上一堆人要求粉絲頁的"讚"要改回"加入粉絲團"一直沒人理了,因為這樣做Facebook才省事啊!

    Facebook iframe 變更長寬

    Facebook的API正在新舊交替中,所以很多該死的功能都會相衝;為了在facebook的iframe模式中可以自訂iframe長寬,以前必須使用
    FB.CanvasClient.setCanvasHeight 
    可是他會和新版的Javascript SDK(connect-js)相衝 ,所以要改用
    FB.init({appId: 'app ID', status: true, cookie: true, xfbml: true});
        window.fbAsyncInit = function() {
            FB.Canvas.setSize({width:760,height: 1200 });
        }
    如果頁面中有使用動態產生資料而影響某個DIV的寬高的話,一定要先呼叫這個函數,再去呼叫你要變動DIV的script,不然天才的Internet Explorer會瘋掉! ----一個快被facebook搞死的人的衷心建議

    2008年5月5日

    Virtualbox - 利用Virtualbox提供對外網路服務

    最近要在一台PC上安裝一個Windows XPVM,並對外提供VNC的服務,而VirtualBox是一個免費的VM軟體,執行速度也不比VMWarer差;為了達到這個目的,找了網路上很多的文章都說要使用Windows XP的橋接器功能搭配VirtualHost Interface Networking,不知道是我資質愚鈍,這個方式很難成功,於是我又在以下的網址找到了其他的解決方案http: //www.tmes.mlc.edu.tw/wiki/index.php/VirtualBoxAndBirdge
    在這個解決方案的步驟如下:
    1. 確實關閉VirtualBox後,開啟命令提示字元並進入VirtualBox的目錄底下
    2. 輸入VBoxManage setextradata “WinXP” "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestvnc/Protocol" TCP
    3. 輸入VBoxManage setextradata “WinXP” "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestvnc/GuestPort" 5900
    4. 輸入VBoxManage setextradata “WinXP”"VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestvnc/HostPort" 5900
    WinXP就是VirtualBox製作出來的VM名稱,guesvnc是你要設定的規則名稱,這邊要設定為一樣的 要注意的是:
    WinXp前面要有””,且執行命令時VirtualBox一定要關閉。
    完成後打開VirtualBox就會問你是否要開啟WindowsXP的防火牆讓VirtualBox通過,選擇是之後就完成了。

    2007年10月8日

    安裝Tripwire確保系統安全

    前陣子有個朋友的機器被駭客入侵了,雖然資料都救回來了,但是系統裡到底有沒有殘留的木馬其實很難講,除了用chkrootkit掃掃看有沒有木馬之外, 幫系統做一個指紋系統應該會比掃描木馬的結果來的正確,因為木馬千奇百怪,掃描軟體是不是可以正確掃出來其實還滿難說的,而如果替系統建立一個指紋資料 庫,對重要的檔案產生指紋編碼,當哪天檔案被人竄改時,我們也可以在第一時間察覺,避免威脅擴散。而這篇記錄要說明的就是tripwire的設定方式。網路上有很多關於tripwire的安裝及設定方法,但很神奇的,他們講的都是舊版的,新版的已經不是這樣安裝了,所以僅利用此篇文章紀錄安裝方式,以免日後忘了又找不到相關說明。

    Tripwire是一個opensource的專案,不過也有商業版,目前就我所知只有商業版的支援windows系統,而open source的專案則僅適用於Unix-like系統,台灣目前沒有商業版的代理商。

    1. 先從http://sourceforge.net/projects/tripwire/下載最新版的tripwire,目前是2.4.1.2的版本,先下載source code版本,就是tripwire-src那個專案。
    2. 上傳到機器上之後,由於檔案是bz2壓縮的,所以請先用bunzip2解壓縮:
      bunzip2 tripwire-2.4.1.2-src.tar.bz2
    3. 再把tar檔案解開:
      tar xvf tripwire-2.4.1.2-src.tar
    4. 解開後進入tripwire安裝檔資料夾,使用configure設定要安裝的目的:
      ./configure --prefix=/usr/local/tripwire
       (讓它安裝在/usr/local底下)
    5. 跑完後系統會告訴你是不是缺少什麼東西,沒有的話就直接輸入:
      make clean; make
    6. make之後,需要稍微修改一下install.cfg,這個檔案就位於<<安裝檔資料夾>>\install底下,找到TWMAILPROGRAM,然後將它指到你的sendmail主程式的目錄,例如:
      if [ -z "$path_to_sendmail" ] ; then
      TWMAILPROGRAM="/usr/sbin/sendmail"
      else
      TWMAILPROGRAM="${path_to_sendmail} -oi -t"
      fi
    7. 完成後就可以開始make install了,系統會出現授權條款,看完之後要輸入accept才能繼續安裝。
    8. 接下來要設定幾個密碼
      Enter the site keyfile passphrase:
      Enter the local keyfile passphrase:

    9. 將資料庫初始化,執行以下指令對指紋資料庫進行第一次初始化
    10. /usr/local/tripwire/sbin/tripwire -m
    11. 檢查etc底下的twcfg.txt檔案,裡面包含了一些tripwire的設定
    12. 修改/usr/local/tripwire/etc底下的twpol.txt,這個檔案是tripwire附的設定範例檔,使用者可以針對需要檢測的資料夾進行設定,如果整各系統都要做指紋檔的話,將會花費很長的時間,我們可以針對較重要的資料夾進行控管。
    13. 修改完畢後存檔,利用以下的指令更新policy
      /usr/local/tripwire/sbin/tripwire -m p -Z low ../etc/twpol.txt
    14. 建立一個cron job,定期掃描系統,並將報告寄出
      #!/bin/sh
      /usr/local/tripwire/sbin/tripwire -m c -M <
      地址>>
    15. 然後就看報告了,資訊化的背後最後處理的還是人啊。

    2007年5月11日

    設定ssh自動登入

    一般ssh都必須要輸入密碼才可以登入遠端系統主機,如果因為某些理由不想輸入密碼的話,可以利用交換密鑰來達到認證的方式:
    假設現在有
    • 遠端伺服器Server A
    • 近端伺服器Server B
    使用者想從ServerB連線到ServerA伺服器而不使用密碼,則可以在ServerB執行以下指令:
    ssh-keygen -t rsa (指定產生的密鑰類型)
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/wales/.ssh/id_rsa): <<金鑰放置的地點>>
    Created directory '/home/wales/.ssh'.
    Enter passphrase (empty for no passphrase): <<輸入金鑰密碼,請留空白>>
    Enter same passphrase again: <<再輸入一次密碼>>
    Your identification has been saved in /home/wales/.ssh/id_rsa.
    Your public key has been saved in /home/wales/.ssh/id_rsa.pub.
    The key fingerprint is:xx:xx:xx:xx:xx:xx
    之後在/home/wales/.ssh/會產生兩個檔案id_rsaid_rsa.pub
    id_rsa.pub記載著公鑰的資訊,請將此公鑰發佈到ServerA,並儲存到/home/wales/.ssh/authorized_keys
    完成設定之後,回到ServerB並執行ssh wales@serverA
    The authenticity of host 'serverA' can't be established.
    RSA key fingerprint is :xx:xx:xx:xx:xx:xx
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'serverA' (RSA) to the list of known hosts.
    wales@serverA's password:
    輸入這次密碼後 下次就不會再詢問了。
    附註:在/etc/ssh/sshd_conf 底下的StrictModes要改為no,並重開sshd服務

    2005年8月8日

    好用的免費軟體

    微軟在上個月宣布沒有通過正版認證的人將不能在他們的網站上下載軟體,例如media player但是你真的需要又大又笨重的media player嗎?Adobe跟Macromedia合併了,將來的影像處理市場也會被壟斷,你要花大把的鈔票去買這些軟體嗎?以下介紹幾個好用的免費軟體,大都是open source的,免費又好用,在軟體後面會附上網址跟說明,方便查詢:

    • 軟體下載類:
    1. free download manager:如果用過getright和flashget的人一定會覺得她的廣告很煩吧,free download manager上面你看不到這些廣告,而且支援中文介面,軟體的面板也可以自行更換,且支援firefox的flasfgot套件----http://www.freedownloadmanager.org/
    2. filezilla:Cuteftp雖然好用,但他終究是要錢的,filezilla是一款完全免費的ftp軟體,支援中文介面、sftp及SCP加密傳輸,安全性比Cuteftp更好---http://filezilla.sourceforge.net/
    3. Winscp:一個支援sftp及SCP的陽春型加密ftp軟體,不是很好操作,但是加密傳輸的時候效能比filezilla好一點---http://winscp.net/eng/index.php
    • 影像處理類:
    1. Gimp:Gimp是一套媲美photoshop的軟體,以前只支援linux的版本,現在也可以在windows上面使用了!功能強大,各式各樣的濾鏡應有盡有,不想被photoshop綁住的人可以試試看喔---http://www.gimp.org/
    • 多媒體類:
    1. VLC Player:這是我後來發現比市面上的播放軟體還要厲害的媒體播放器了,使用者可以用這套軟體將網路視訊存到電腦裡,邊看邊存;還可以將視訊以不同的格式輸出,讓你的電腦變成一台影音廣播伺服器,支援市面上絕大多數的影音格式,但是介面看起來不是很漂亮就是 ---http://www.videolan.org/vlc/
    2. FreeRIP:幫你把CD轉成mp3的小軟體,速度還挺快的喔---http://www.mgshareware.com/frmmain.shtml
    3. Storm Codec(暴風影音):一個很強大的播放軟體,核心是media player 6.x系列的,在網路上也是開放原始碼的軟體,後來經過大陸一家公司包裝之後以新的名字釋出,這個軟體可以播放 mp3/avi/quicktime/realplayer/windows media player的檔案,而且看mpeg4的電影不用另外裝軟體可以以搭配字幕檔觀看影片喔---http://www.yesure.com/storm/
    • 網路工具
    1. SolarWinds Advanced Subnet Calculator:一個小巧的軟體,可以幫你算子網路遮罩的,連CIDR也 可以算出來喔,每個切割的子網路有幾個可用IP都可以算的出來,下載時請選最下面那個free download,因為其他的是要錢滴 ---http://www.solarwinds.net/Download-Tools.htm
    2. SolarWinds tftp server:免費的tftp軟體,用過cisco系列產品的人應該對這個很熟悉吧,用來上傳及下載cisco設定檔的好工具,tftp用的是UDP沒有錯誤檢查,但是負擔也比ftp來的小,適合小檔案傳輸---http://www.solarwinds.net/Download-Tools.htm
    3. Firefox:小巧的網頁瀏覽軟體,執行起來比IE快很多,又有多到數不清的擴充套件及面板可以使用,功能比IE真是強上太多了---http://moztw.org/
    4. Thuderbird:同樣是mozilla project開發的軟體,可以換掉妳的outlook express了,Thunderbird支援許多的擴充套件,還有垃圾郵件管理,滿不錯的喔---http://moztw.org/thunderbird/
    5. Ultra VNC:遠端桌面的軟體,雖然速度比不上Terminal Service但是支援點對點傳檔及web模式監控,重要的是VNC不論在windows及linux都可以使用,市面上的vnc軟體很多,推薦這款是因為功能比較多,適合我使用---http://ultravnc.sourceforge.net/
    6. Wireshark:封包擷取軟體---http://www.wireshark.org/
    7. SmartSniff:另一套封包擷取軟體,感覺功能比較少,但是使用起來還滿方便的,更重要的是她不需要安裝就可以使用---http://www.nirsoft.net/utils/smsniff.html
    • 系統工具類:
    1. bochs:一套open source的PC模擬器,雖然沒有像微軟的Virtual PC或Vmware的效能好,但是算是堪用的選擇,至少可以讓你省下九千多大洋喔,目前有linux及windows版本---http: //bochs.sourceforge.net
    2. QEMU:另一個PC模擬器,效能比bochs好,而且不用安裝就可以使用;但是她的映像檔產生工具好像有點問題,可以用bochs裡面的工具來做,這兩套基本上是相通的---http://www.h7.dion.ne.jp/~qemu-win/
    3. Spybot - Search & Destroy:用來掃瞄你的系統被裝了多少個垃圾及間諜軟體,支援線上更新,也有中文介面,不錯的選擇---http://www.spybot.info/en/index.html
    • 文書處理:
    1. CutePDF Writer:用來產生PDF檔的軟體,速度比一般的PDF產生軟體快上許多,而且沒有廣告;適合不想安裝Acrobat或是Open Office這種龐然巨物的人---http://www.cutepdf.com/

    精選文章

    利用Selenium IDE進行UI測試

    安裝與執行 Selenium IDE是Firefox的一個plugin,用來做UI的自動測試:下載網址為http://docs.seleniumhq.org/download/ 安裝後,點一下firefox 的工具 -> Selenium IDE ,就會...