Recent in Recipes

如何在ubuntu安裝java與netbeans


   小弟很久沒有打文章了,話說最近需要再linux ubuntu上開發java程式,所以編譯器小弟選擇使用netbeans來開發,不過在正常情況下,linux預設的java是OpenJdk(有些連這個都沒有),跟一般的java(這裡稱之為oracle-java)是不一樣的,使用OpenJdk是不能使用一般的java api的,因此需要安裝oracle-java才能正常編譯java,其實安裝方法爬文應該有很多資料,為了方便就稍微整理一下(避免下次安裝忘記要重新爬哈哈哈哈!!),以下就開始介紹如何在linux ubuntu安裝oracle-java。
  首先說明安裝oracle-java有兩種方法,第一種為官網https://www.java.com/zh_TW/download/help/linux_install.xml提供的套件,下載套件並使用rpm安裝,官方網站已經有說明所以這裡節錄官網之教學:

如何下載並安裝 Linux 適用的 32 位元 Java?
1.移至 http://java.com 並按一下下載按鈕
2.有兩種類型的安裝套裝軟體。

  • Linux 平台適用的 Java

這會使用存檔二進位檔案 (.tar.gz) 安裝 Linux 適用的 32 位元 Java Runtime Environment (JRE),而且任何人 (不只限於 root 使用者) 都能在本身可以寫入的位置進行安裝。但是,只有 root 使用者可以將 Java 安裝至系統位置。

  • 以 RPM 為基礎之 Linux 平台適用的 Java

這會使用系統位置中的 RPM 二進位檔案 (.rpm),安裝以 RPM 為基礎之 Linux 平台 (例如 Red Hat 和 SuSE) 適用的 32 位元 Java Runtime Environment (JRE)。您必須以 root 身分執行此安裝。

請下載最符合您需要的套裝軟體。您可將檔案下載到系統的任何目錄中。

3.您必須先接受授權合約條款後,才能夠下載檔案。
4.下載並檢查下載檔案大小,確定您已下載完整、未損毀的套裝搭售。在下載檔案之前,請注意網站下載頁面上提供的該檔案位元組大小。一旦完成下載,請比較該檔案大小和下載的檔案大小,確定二者相等。


  • Linux 平台適用的 Java

變更至要在其中執行安裝的目錄。鍵入:
cd directory_path_name
例如,若要將軟體安裝到 /usr/java/ 目錄中,請鍵入:
cd /usr/java/

將 .tar.gz 存檔二進位檔案移至目前的目錄。
解壓縮 tarball 並安裝 Java
tar zxvf jre-8u73-linux-i586.tar.gz

Java 檔案會安裝到目前目錄中名為 jre1.8.0_73 的目錄內。
本範例中會安裝到 /usr/java/jre1.8.0_73 目錄。
如果要節省磁碟空間,請刪除 .tar.gz 檔案。

  • 以 RPM 為基礎之 Linux 平台適用的 Java

成為 root 的方法是執行 su 並輸入超級使用者密碼。
解除安裝較早安裝的 Java 套裝軟體。
rpm -e package_name
變更至要在其中執行安裝的目錄。鍵入:
cd directory_path_name
例如,若要將軟體安裝到 /usr/java/ 目錄中,請鍵入:
cd /usr/java

安裝套裝軟體。
rpm -ivh jre-8u73-linux-i586.rpm

若為升級套裝軟體:
rpm -Uvh jre-8u73-linux-i586.rpm

如果要節省磁碟空間,請刪除 .rpm 檔案。
結束 root shell。不必重新開機。
至此安裝完成。移至啟用與設定區域。

第二種是小弟覺得最簡單的方式,打開終端機並輸入以下指令:
1. sudo add-apt-repository ppa:webupd8team/java
2. sudo app-get update
//更新並載入套件
3. sudo apt-get install oracle-java8-installer
//使用apt-get安裝 Oracle JAVA  &&  JRE
當安裝完成後,可以在終端機下達java –version,即可看到相關資訊如下圖


Java –version資訊

  不過大家應該很好奇,這樣安裝java他的資料夾會在哪裡吧…!?
其實他的安裝路徑為\usr\lib\jvm\java-8-oracle如下圖紅色框號的地方所示


JDK資料夾安裝路徑

  不過有些Linux原本就有預設OpenJDK,倘若不小心的中獎或是不小心的安裝到,有兩種方式可以解決:
1. 移除OpenJDK,可以下指令:sudo apt-get autoremove [openjdk(根據系統版本下指令)]
2. 將JDK的權限順序調整一下即可
   這部分我嘗試了很久,最後找到https://dotblogs.com.tw/jhsiao/archive/2013/09/03/116186.aspx這篇文章,裡面有教如何條權限,這裡就帶著大家設定權限指令:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-oracle/bin/java 300
1. sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-8-oracle /bin/javac 300
2. sudo update-alternatives --config java
3. sudo update-alternatives --config javac

  到這裡,oracle-java的佈署就大功告成了,希望隊在linux上開發java的人有
所幫助。
   最後稍微介紹一下netbeans安裝,首先需要先去官網下載所需要的版本(建議下載EE的即可),這裡附上連結:https://netbeans.org/downloads/
   載下來後將下載的檔案放置你想安裝的位置,接下來開啟終端機至剛剛將檔案移動的地方,然後下達以下指令:
1. sudo chmod +x [檔案檔名]
2. sudo ./ [檔案檔名]
倘若看到以下畫面表示成功;終端機有安裝等訊息及netbeans安裝視窗


   差不多就完成了,那小弟解說到此,有任何問題歡迎來發問及討論!最後祝大家coding Java愉快 =D


如何使用bot framework來建造多平台的ChatBot

前幾天稍微打了一個關於.net部屬在AWS的文章其實是在研究是否AWS會
"無痛"支援Microsoft一些服務(我似乎聽到笑聲了)!別這樣!部屬網站或是架虛擬機器當然是可以的啦!但是要做一些會使用不同廠商的平台功能就有可能吃閉門羹,所以今天要大家分享以及當作學習的筆記囉!。
今天要分享的是使用Microsoft 提供的bot framework來建造多平台的ChatBot,Microsoft建置了bot framework提供使用者簡單製造自己的機器人,大家要先到他的官網: https://dev.botframework.com/
※先註冊Microsoft帳號喔!

其中可以看看他的documentation詳細說明了使用方法,如果要看寫得很好的網站我推薦http://aihelpwebsite.com/Blog/EntryId/6/Creating-a-Hello-World-Bot-Using-The-Microsoft-Bot-Framework
這網站寫得很清楚,可能比官網還清楚...噓!!!,那小弟就稍微介紹一下Bot Framework:
11
※Bot Framework圖
Bot Builder是說我們可以透過一些開發者元件與人家寫好的工具來撰寫你的機器人,可以使用C#、Node.js...等等來開發
Developer Portal這裡是說明撰寫好的機器人,透過他來跟使用者端做溝通,現在的Bot Framework:並不是所有平台都支援,而現在有哪些平台有支援呢?如下圖所示囉!
12

※Bot Framework所支援的平台
Bot Directory是指你有那些機器人並做管理。
簡單介紹完之後我們開始先準備工具吧!
首先我們要準備的工具有:
  1. Virtual Studio 2015(建議使用 不建議2013)因為小弟是2013所以有些問題
  2. 下載Bot Builder SDK 網址: https://github.com/Microsoft/BotBuilder
  3. 模擬器 網址: https://github.com/Microsoft/BotFramework-Emulator#download
  4. 準備一個Web server(不強制 如果只想在本機試試的話就不用了)

假設現在你的本機已經有了Virtual Studio,我們把下載下來的Bot Builder SDK解壓縮至%USERPROFILE%\Documents\Visual Studio 2015
(按照使用的版本)\Templates\ProjectTemplates\Visual C#

接下來打開你的Virtual Studio會發現你多了一個機器人開發選項如下圖所示
13
※機器人開發選項

建立完以後來檢視一下裡面有什麼東西吧!
其實裡面最重要的兩個檔案是MessagesController.cs Web.config如下兩張圖
14
Web.config
15
MessagesController.cs

  Web.config 是用來設定機器人使用的,MessagesController.cs是機器人程式端,也就是說你想要機器人說什麼做什麼事都是在這裡做的。

其實你什麼都不做這個程式就可以跑囉!(小弟有做一個小小的修改,activity.CreateReply(Hello!);)接著打開模擬器與執行專案,並在模擬器的網址列輸入http://localhost:3979/api/messages 然後就可以跟他說話囉!!如下圖所示:
16
因為小弟的Port3979所以就輸入3979!但是如果要上線的話,網址的協定要從http改成https!

接下來要說明如何部屬與設定你的專案為機器人所使用首先先建立一個機器人
進入
https://dev.botframework.com/之後點選Register a bot,然後進入頁面如下圖所示:
17
Name是機器人名稱,可以自己取名,但是Bot handle必須要記一下,設完他以後他是唯一值,接下來要創建Bot ID 與 password,如下圖:
18
點選create Microsoft app id and password,進來以後會出現以下頁面:
19
這裡要注意一下,密碼要記起來,因為他只出現這一次爾以,而且找不到喔! 好了以後按Finish按鈕如下所示:
20
好的!這裡初步的都設定好囉!
接下來回到主頁面看看
21
剛剛所設定的資訊,除了密碼以外都在上面了!
接下來就是部屬你的機器人專案囉!回到Web.config頁面如下:
22
我們把剛剛的資料都打上去:BotId 就是Bot handle,AppId跟AppPassword就是剛剛按鈕生成的資訊,隨後把資訊Key上。 在來就是要部屬發行了不過要有Microsoft Azure的帳號如果大家想試試的話可以申請一個試用版的(有一個月的6300額度)
我們在專案右方點右建按發行,如下圖所示:
23

進入選後Microsoft Azure Web應用程式,接下來就是設定一些東西囉!如下圖:
24

設定完成後會載入帳號以及網域的資訊按下發行,如下圖
25
之後輸入網域後結果如下:
26

表示我們機器人專案已經部屬成功了!再來回到機器人管理頁面點開編輯,如下圖所示:
27
點擊後在下圖地方填上網域,以下圖範例:https://botkevintest01.azurewebsites.net/api/messages
28
與測試不一樣的點是http要改成https

最後到機器人頁面之後點擊Test後看到是Endpoint authorization succeeded,表示你的機器人可以測試了!如下圖
29
30
大致上差不多是這樣子,其實沒有想像中的複雜,接下來就可以玩玩看裡面的平台囉!

如何使用Vistual Studio上傳至AWS部屬

小弟最近想研究一些東西的緣故,先寫這篇當作前導文吧,雖然是小東西但是當個筆記用吧!
在這篇開始之前先貼上參考網站,謝謝這個網站!
這網站已經幫我解決大部分的問題了,雖然是外國網站但是有圖片交著做,所以蠻好懂的,那開始進入正題囉!
首先我們要先有以下幾個準備工作:
1.準備AWS(amazon web server)帳號
3.Vistual Studio(小弟是2013版)
 1
(AWS Toolkit)下載頁面圖

 下載完AWS Toolkit後執行安裝,位置可以自己決定,安裝完成後打開Vistual Studio會發現多了一些選項如下圖:17092861_1870096956609196_424950151_o
 表示安裝成功了!基本的前置作業完成了就開始打開Vistual Studio選取想要上傳的檔案,小弟就來這幾天做的範例來示範一下:
 17035966_1870101506608741_1144997101_o
打開以後先測試一下可不可以執行如下圖所示:
17035847_1870119949940230_1087128344_o

  這個表示本機端的網址,如果沒有顯示錯誤資訊可以顯示程式結果,表示程式的部分是沒問題的,檢查完之後就要上傳AWS囉!
 首先在專案上點右鍵,找到 Publish to AWS Elastic Benstalk...
17036530_1870103533275205_787940386_o

點擊後如下圖,按下框起來的按鈕:
17091321_1870114476607444_634470123_o
點擊後再紅色框號地方打DeploymentProf
17035847_1870114996607392_1233584617_o
下面就是要打AWS金鑰資訊,我們先暫停一下,回到AWS中有個IAM,點擊後到Users畫面接著點選Add user如下:
17036715_1753798761300819_83054215_o
進入新增的程序頁面後,輸入自訂的User name以及勾選第一個存去型態
17036726_1753799151300780_2139580131_o
下一頁有一個大圖示的選項Attach existing policies directly,這是要增加一些權限的地方,我們需要以下兩個權限
( AmazonEC2FullAccess 和AWSElasticBeanstalkFullAccess)如下圖:
17016631_1753802094633819_1847820155_o
17016298_1753820094632019_667805886_o選擇完連續下一步兩次到最後一個步驟如下:
17093228_1753803214633707_1474743236_o
會顯示與下載金鑰密碼(公開鑰與私密鑰),記得要載下來,之後回到Vistual studio
補上金鑰資訊後按確定後按確定,下一頁會顯示環境設定如下圖所示:
17036544_1870118366607055_1055416147_o
如果顯示綠色的表示設定成功了!如果不是可能需要回到AWS看看權限是否設定正確。

接下來就可以設定你的Server硬體需求,小弟選了一個小一點的如下圖:
17091302_1870118636607028_135198886_o


接下來可以持續下一步到最後一步
17015118_1870119019940323_1253747376_o
17093227_1870118993273659_1498247266_o
17091086_1870119116606980_1493600057_o
底下是勾選只要server停止後就會自動重建,因為網站的的服務不能中斷,所以當server有問題時自動重建。

最後按下部屬後顯示資訊如下圖:
17016185_1870119649940260_101407653_o
框起來的地方就是server提供的網址囉!這時候輸入網址看看:
17036976_1870121166606775_1564821793_o
我們之前測試的網站就上架囉!!

最後如果不想要繼續部屬要怎麼取消呢?
這裡要回到AWS到EC2選單,在左邊尋找Auto Scaling Group刪除剛建的群組即可(找時間最近的就是了)
17036591_1753836431297052_1715541809_o
好囉!筆記就到這邊結束囉!如果有不清楚的地方歡迎留言討論一下喔!!

簡介Java - ArrayList



因為小弟某些原因開始研讀集合物件(Collection Framework),首先先介紹一下比較容易了解的ArrayList

首先根據  API 說明書中 https://docs.oracle.com/javase/7/docs/api/
ArrayList 是實作  List 這個介面,也可以在  List 介面中發現許多集合物件有實作此類別  EX: LinkedList Vector ...等等

其中實作List介面的集合物件有幾個特性:
1.存進去的資料可以重複
2.具有順序性

因為這篇針對  ArrayList 做解說, List 就稍微介紹到這,ArrayList 說明白的就是存放資料用,可能這邊會有人說:可以用陣列就好了啊為什麼還要  ArrayList !?
首先這裡帶著大家回憶一下陣列宣告時
陣列宣告的時候:
1.png
我們需要給他指定的型態、指定資料或資料大小,如果今天是資料庫的資料,多少筆我根本不可能一個一個數,這時候  ArrayList 可以改善這特性,因為  ArrayList 可以動態配置。

再來,因為陣列宣告比資料多,或是要再重新配置,會導致記憶體與效能的浪費,所以這裡簡單整理ArrayList優於陣列的 幾個要點:
1.可以動態配置空間
2.減少記憶體與效能的浪費

接下來談談ArrayList存入的型態,因為不需要指定資料型態,所以什麼資料都可以存入,所以  ArrayList 裡面的資料型態叫(Object)

當要處理資料時就要進行轉型

接下來就帶著大家實作  ArrayList:
1.png



這圖是APIArrayList的建構子使用方式,整理出一個表格給大家:

ArrayList 建構子
說明
ArrayList()
建立一個空的ArrayList
ArrayList(int capacity)
建立一個指定容量的ArrayList
ArrayList(Collection<? extends E> c)
使用實作的interface建立ArrayList

看完建構子我們列幾個常用的方法:
方法
說明
boolean add(E e)
照順序增加元素
boolean add(int index , E element)
指定索引值增加元素
void clear()
清空list所有元素
E get(int index)
取得索引值中的資料
E remove(int index)
移除指定索引值的資料
boolean remove(Object object)
移除相同內容的資料
Int size()
List中資料數量

我們實作一段程式如下:
 
public class Test01 { public static void main(String[] args) { ArrayList test = new ArrayList(); test.add("Hello"); test.add("Java"); test.add("Have"); test.add("Fun"); test.add("Java"); System.out.println(test.get(0)); for (int i = 0; i <test.size(); i++) { System.out.println("data:"+test.get(i)); } System.out.println("data size:"+test.size()); } }

其結果如下:
1.png

其型態乍看之下好像是字串對吧!?因為剛剛我們存進去是存字串,可是我們換一種寫法看看:

 
public class Test01 { public static void main(String[] args) { ArrayList test = new ArrayList(); test.add("Hello"); test.add("Java"); test.add("Have"); test.add("Fun"); test.add("Java"); System.out.println(test.get(0)); for (Object object : test) { System.out.println("data:"+object); } System.out.println("data size:"+test.size()); } }
我們把迴圈改成for-each看到承接的是Object
所以說他的型態是Object!!!
顯示結果如下:
1.png
其實是完全一樣的,可是往後存的是一個類別,必須要轉型,其實是非常麻煩的事情,這時候我們可以用"<>"(泛型)來指定存進去的型態是什麼型態,這時候把程式再改一下:

 
public class Test01 {
    public static void main(String[] args) {
        ArrayList<String> test = new ArrayList();
        
        test.add("Hello");
        test.add("Java");
        test.add("Have");
        test.add("Fun");
        test.add("Java");
        
        System.out.println(test.get(0));
        
        for (String object : test) {
            System.out.println("data:"+object);
        }
        
        System.out.println("data size:"+test.size());
          
    }
    
}

我們在建造物件時指定<String>型態,所以for-each改變承接型態為String,其顯示結果如下:
1.png
其實因為都是字串所以看起來都一樣!但型態已經改成String!!
再來是我們指定好ArrayList大小再搭配remove()做使用看看,其程式如下:

 

public class Test01 {
    public static void main(String[] args) {
        ArrayList<String> test = new ArrayList(10);
        
        test.add("Hello");
        test.add("Java");
        test.add("Have");
        test.add("Fun");
        test.add("Java");
        
        test.remove("Java");
        
        for (String object : test) {
            System.out.println("data:"+object);
        }
        
        System.out.println("data size:"+test.size());
        test.remove("Java");
          
    }
    
}

我們先指定好容量大小以及在增加完資料後移除"Java"資料,其顯示結果如下:
1.png
我們發現size是根據ArrayList的資料多寡來呈現數量,remove("Java")他是移除最先加入的那筆資料,請大家要記一下喔※如果要考OCP的這個很重要!!


以上就是ArrayList簡單的介紹,用一種簡單的例子來解說希望對大家有幫助XD