顯示具有 JAVA 標籤的文章。 顯示所有文章
顯示具有 JAVA 標籤的文章。 顯示所有文章

2014年1月1日 星期三

[Solr] 安裝Solr 4.6 in Debian

凌晨4:14
安裝Solr 4.6

前言:
距離上次寫的安裝設定很遙遠,而且那時候用的還是比較舊的版本,

就趁這次重新安裝的時候,順便寫一篇給自己以後來用 XD

安裝步驟:

這邊我是都把所有東西放到 /opt/ 底下,

依個人需求自行調整。

1. 下載 solr 4.6
cd /opt/

wget http://ftp.tc.edu.tw/pub/Apache/lucene/solr/4.6.0/solr-4.6.0.tgz
tar zxvf solr-4.6.0.tgz

2. 下載 java sdk (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
tar zxvf jdk-7u45-linux-i586.gz

3. 複製solr-4.6/example到/opt/solr/
cp -pr /opt/solr-4.6.0/example/ /opt/solr/

4. 啟動solr
方法1:
cd /opt/solr/
java -Dsolr.solr.home=multicore -jar start.jar

方法2:
wget https://gist.github.com/Polzme/7367523/raw/9ccf8b040b70eca214497dc6ee2b23e9abb0b8ef/solr -O /etc/init.d/solr
chmod +x /etc/init.d/solr
# 依個人需求,修改java的路徑
vim /etc/init.d/solr

#DAEMON=/usr/bin/java
DAEMON=/opt/jdk1.7.0_45/bin/java
service solr start

5. 檢查是否已經啟動?
http://localhost:8983/solr/

6. 設定開機的時候 啟動solr
update-rc.d solr defaults

7. 設定iptables

只允許localhost access 8983的port
iptables -A INPUT -p tcp -s localhost --dport 8983 -j ACCEPT
iptables -A INPUT -p tcp --dport 8983 -j DROP



參考資料(Refs):
1. http://apache.osuosl.org/lucene/solr/ref-guide/apache-solr-ref-guide-4.6.pdf
2. http://wiki.apache.org/solr/SolrTomcat
3. https://coderwall.com/p/0s3flw
4. https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+Tomcat
5. https://gist.github.com/Polzme/7367523/



2010年12月7日 星期二

Java 解析XML ( dom4j )

下午6:03
使用dom4j parsing xml
這裡是用dom4j去parse XML的資料...

首先可以先到http://www.dom4j.org/dom4j-1.6.1/ 或是 http://dom4j.sourceforge.net/dom4j-1.6.1/download.html

下載使用,目前應該是用1.6.1的版本


然後,還需要下面的jaxen
http://jaxen.codehaus.org/releases.html
目前應該是1.1.4版本


用Yahoo的RSS來實作範例
Dom4jTest.java
package fux.xml.dom4j;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class Dom4jTest {

    private static Element root;
    private static List<String> name = new ArrayList<String>();
    private static Document document;

    public static void main(String args[]){
        // 建立連線的物件
        URLConnectionUtil urlc = new URLConnectionUtil() ;
        // URL
        String urlStr = "http://hk.news.yahoo.com/rss/business/rss.xml";

        Map<String,Object> map = new HashMap<String,Object>(); 
        InputStream res = null ;

        try {
            // 連線取得資料
            res = URLConnectionUtil.doGet(urlStr, map);

            // 讀取XML檔案
            SAXReader reader = new SAXReader();
            document = reader.read(res);

            // 取得XML Root Node
            root = document.getRootElement();
            // Root Node NAME
            System.out.println( root.getName() );
            System.out.println(  );

            // 印出所有XML DATA
            printXMLTree();

            // print data => /rss/channel/item/title
            name = getAllDataByPath("/rss/channel/item/title");

        }catch (Exception e) {

        }   
    }



    /** print all xml data */
    public static void printXMLTree(){
        printElement(root, 0);
        return;
    }

    private static void printElement(Element element, int level){
        // 依照階層print
        for(int i = 0; i < level; i++){
            System.out.print("\t");
        }
        System.out.print( "<" + element.getQualifiedName() + ">" );
        // 取得該TAG的Attr
        List attributes = element.attributes();
        for(int i = 0; i < attributes.size(); i++){
            Attribute a = ((Attribute)attributes.get(i));
            System.out.print(" (Attr:\"" + a.getName() + "\"==" + a.getValue() + ")");
        }
        System.out.println( " "+element.getTextTrim());

        Iterator iter = element.elementIterator();
        while(iter.hasNext()){
            Element sub = (Element)iter.next();
            printElement(sub, level+1 );
        }
        return;
    }

    /** 從指定的檔案路徑 讀取XML檔案 */
    public static Document loadXMLFile(String filename) {
        Document document = null;
        try {
            SAXReader saxReader = new SAXReader();
            document = saxReader.read(new File(filename));
        }
        catch (Exception ex) {
            ex.printStackTrace();
        } 
        return document;
    }   

    /** 依照Path  印出所有data
    *  example: String path="/rss/channel/item/title"
    *  @param path
    */
    public static List<String> getAllDataByPath( String path ){
        List<String> data = new ArrayList<String>();
        Iterator it = document.selectNodes( path ).iterator();
        while(it.hasNext()) {  
            Element ele = (Element)it.next();
            System.out.println( path + " = "+ele.getStringValue());
            data.add(ele.getStringValue());
        }    
        return data;
    }   
}
範例程式裡面用到了...
URLConnectionUtil urlc = new URLConnectionUtil();
可以從 URLConnectionUtil.java 取得。


需要Include dom4j + jaxen 這兩個jar!


讀取XML檔案、指向XML的第一個Tag:
讀取XML檔案區要用到 org.dom4j.io.SAXReader 裡面的 read( InputStream is );

將檔案存到org.dom4j.Document document,

然後用 root = document.getRootElement(); 取得XML的第一個TAG,

可以把 root 相關的資訊print出來:
System.out.println( root.getName() );


印出XML所有的Tag、Attribute、Data:
這裡是用了下面這行來印出xml的所有資料:
printXMLTree();


其中要從 root 節點開始往下一個個跑,所以需要剛剛這行 root = document.getRootElement();

這是把該Tag裡面,所有的Attribute印出來:
List<String> data = new ArrayList<String>();
Iterator it = document.selectNodes( path ).iterator();
while(it.hasNext()) {  
    Element ele = (Element)it.next();
    System.out.println( path + " = "+ele.getStringValue());
    data.add(ele.getStringValue());
}



指定路徑,取得該TAG:
以下這行,表是用指定的路徑來指定該TAG:
name = getAllDataByPath("/rss/channel/item/title");



這個字串path是用到xpath,這就是jaxen裡的東西了,
List<string> data = new ArrayList<string>();
Iterator it = document.selectNodes( path ).iterator();
while(it.hasNext()) { 
    Element ele = (Element)it.next();
    System.out.println( path + " = "+ele.getStringValue());
    data.add(ele.getStringValue());
}




...


先寫到這裡,有其它的會再補上來!

2010年7月29日 星期四

ACM488

晚上11:10
import java.io.BufferedInputStream;
import java.io.IOException;
import java.util.Scanner;

class Main
{
public static void main(String args[]) throws IOException
{
Scanner cin = new Scanner(new BufferedInputStream(System.in));
int input,wave,times;

input = cin.nextInt();
while(input>0)
{
wave = cin.nextInt();
times = cin.nextInt();
while(times>0)
{
int a;
for(a=1;a<=wave;a++){
for(int b=1;b<=a;b++){
System.out.print(b);
}
System.out.println();
}
for(a=a-2;a>0;a--){
for(int b=a;b>0;b--){
System.out.print(b);
}
System.out.println();
}
times--;
if(times>0)
System.out.println();
}
input--;
if(input>0)
System.out.println();
}
}
}

2010年7月27日 星期二

ACM Q113 with Java

上午8:51
import java.io.BufferedInputStream;
import java.io.IOException;
import java.util.Scanner;

class Main
{
public static void main(String args[]) throws IOException
{
Scanner cin = new Scanner(new BufferedInputStream(System.in));
while (cin.hasNext())
{
double v = cin.nextDouble();
double t = cin.nextDouble();
double a = Math.pow(t,1/v);
System.out.printf("%.0f\n", a);
}
}
}

2008年4月27日 星期日

X.509 With JAVA SE 1.6 半成品版本(Ver0.1)

上午11:43

Java + X.509
用java寫的..分析X.509的檔案用(像是.cer .crt之類(應該))

import java.io.*;
import java.security.cert.*;

public class x509{
  public static void main(String[] args){
    try{
      InputStream inStream = new FileInputStream("124.cer");
      CertificateFactory cf = CertificateFactory.getInstance("X.509");
      X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
      System.out.println("Certificate:");
      System.out.println("    Data:");
      System.out.println("        Version: "+cert.getVersion());
      System.out.println("        Serial Number: "+cert.getSerialNumber());
      System.out.println("        Signature Algorithm: "+cert.getSigAlgName());
      System.out.println("        Issuer: "+cert.getIssuerDN());
      System.out.println("- - - - -");
      System.out.println("        Validity");
      System.out.println("            Not Before: "+cert.getNotBefore());
      System.out.println("            Not After : "+cert.getNotAfter());
      System.out.println("        Subject: "+cert.getSubjectDN());
      System.out.println("- - - - -");
      System.out.println("        Subject Public Key Info:");
      System.out.println("            ******* not finish *********");
      System.out.println("        X509v3 extensions:");
      System.out.println("            ******* not finish *********");
      System.out.println("    Signature Algorithm: "+cert.getSigAlgName());
      System.out.println("- - - - -");
      System.out.println(byteArrayToHexString(cert.getSignature()));
      System.out.println("- - - - -");
      inStream.close();
    }catch(IOException ioe){}
      catch(CertificateException ce){}
    }

    static String byteArrayToHexString(byte in[]) {
    byte ch = 0x00;
    int i = 0;

    if (in == null || in.length <= 0)
      return null;
    String pseudo[] = {"0", "1", "2","3", "4", "5", "6", "7", "8","9", "A", "B", "C", "D", "E","F"};
    StringBuffer out = new StringBuffer(in.length * 2);
    while (i < ch =" (byte)" ch =" (byte)">>> 4){
      ch = (byte) (ch & 0x0F);
      out.append(pseudo[ (int) ch]);
      ch = (byte) (in[i] & 0x0F);
      out.append(pseudo[ (int) ch]);
      i++;
      out.append(":");
    }
    String rslt = new String(out);
    return rslt;
  }
}


結論
以上...有部分沒做完

有需要請自行補完 就這樣(逃)