2016年6月30日 星期四

Eclipse內創造註解和一般方法

在Eclipse內寫程式時,可以為自創的Function加上適當的註解,也可以自動產生一般方法而免去手動撰寫。

例如先創造一個Bean:






再用滑鼠右鍵選單選擇【Generate Element Commet】和【Generate Getters and Setters】,便會有相對應的結果出現:













在點擊【Generate Getters and Setters】後,會出現要針對哪些變數來自動產生方法:
























註解寫好後,以後只要將滑鼠移動到該程式碼上,便會出現一般我們所常看到的Tip了:

2016年6月29日 星期三

PostgreSQL的更改欄位類型方式

話說PostgreSQL的Console讓我覺得有一些地方不方便,創造欄位後便不可以介面式的移動位置、更改欄位類型等諸多限制,尤其是當我想要二次更改時,就只好刪除重建,但是這樣一來位置又會走掉,所以常常會為了更改一個欄位,就毀掉大半表格又重建(當然,實際上欄位位置不重要,一樣可以使用,但我就是希望看得舒服@@)。

所以搜尋和嘗試了一小段時間,找到了可以用SQL語法變更欄位類型的方式。

例如,在名為"test"的schema內,將一個名為"check_time"的欄位更改為"時間且不含時區"的格式:
ALTER TABLE msoc.test
ALTER COLUMN check_time TYPE timestamp without time zone
USING check_time::timestamp without time zone

例如,在名為"test"的schema內,將一個名為"id"的欄位更改為"字串"的格式:
ALTER TABLE msoc.test
ALTER COLUMN id TYPE varchar
USING id::varchar

主要是參考下列網址內的資訊:
https://www.postgresql.org/docs/9.1/static/sql-altertable.html

TYPE的部分,有時會和在介面內創造時的名稱不一樣,例如在介面內是"character varying",在SQL語法內是"varchar",所以要改變類別時,最好去上列網址內看看想要改變的類別在TYPE處該怎麼寫。

2016年6月27日 星期一

Java的現在時間取法,和延遲用法

首先是我需要使用Java來取得現在時間,Java裡和時間相關的Class有好幾個,看了看網上的資訊後我決定使用java.time來實作。
import java.time.*;

public class MainProcess{

    public static void main(String[] args)
    {
        LocalDateTime currentDateTime = LocalDateTime.now();

        System.out.println( currentDateTime );
    }
}

要注意的是,currentDateTime只是儲存了LocalDateTime.now()所取得的時間值,故一會兒後再使用currentDateTime的話,裡面的時間值可不會自動改變喔。每次要取得最新的"現在時間值"的話,就必須反覆使用LocalDateTime.now()。

LocalDateTime的結果並不包含時區,如果要直接取得時間 + 時區的結果,可以使用ZonedDateTime的Class。
import java.time.*;

public class MainProcess{

    public static void main(String[] args)
    {
        ZonedDateTime currentDateTime = currentZoneTime.now();

        System.out.println( currentZoneTime );
    }
}

如果是想要單純取得時區,可以使用ZonedDateTime下的一些方法,通常可以取得的結果有兩種:時區的區域名稱,和時區的時差數值。
import java.time.*;

public class MainProcess{

    public static void main(String[] args)
    {
        ZonedDateTime currentDateTime = currentZoneTime.now();

        System.out.println( currentZoneTime.getZone() );
        System.out.println( currentZoneTime.getOffset() );
    }
}

然後是如果執行程式時需要延遲一會兒,有Thread.sleep()和TimeUnit.sleep這兩個用法,這邊我選擇TimeUnit.sleep,因為有比較完整的用法,還可分為從TimeUnit.DAYS到TimeUnit.NANOSECONDS各種不同時間單位的使用方式,這邊使用TimeUnit.SECONDS來實作。
import java.time.*;
import java.util.*;
import java.util.concurrent.*;

public class MainProcess{

    public static void main(String[] args) throws InterruptedException
    {
        for( int i = 0; i < 10; i++ )
        {
            TimeUnit.SECONDS.sleep( 1 );

            System.out.println( LocalDateTime.now() );
        }
    }
}

2016年6月16日 星期四

在Eclipse內使用PostgreSQL資料庫

最近工作需要在Eclipse內和PostgreSQL資料庫相連,因此這邊記錄一下使用方式,免得自己以後要用時又得東找西找的。

首先將PostgreSQL的JAR檔匯入到Eclipse內:


接著在Eclipse內撰寫:
import java.sql.*;

public class MainProcess {

    public static void main(String[] args)
    {
        Connection tempConnection = null;
        Statement tempStatement = null;
        ResultSet tempResultSet = null;
        String tempAction = "";
        String tempSentence = "";

        switch( tempAction )
        {
            case "Select":
                tempSentence = "SELECT * FROM Schemas.Tables WHERE account = 'Kimdick' AND password = '123'";

                break;
            case "Insert":
                tempSentence = "INSERT INTO Schemas.Tables ( account, password ) VALUES ( 'Kimdick', '123' )";

                break;
            case "Update":
                tempSentence = "Update Schemas.Tables SET password = '123', email = 'Kimdick@mail' WHERE account = 'Kimdick'";

                break;
            case "Delete":
                tempSentence = "DELETE FROM Schemas.Tables WHERE account = 'Kimdick'";

                break;
        }

        try
        {
            Class.forName( "org.postgresql.Driver" );
            tempConnection = DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/datastream", "postgres", "1234" );
            tempStatement = tempConnection.createStatement();
            tempStatement.executeQuery( tempSentence );

            if( tempResultSet != null )
            {
                tempResultSet.close();
                tempResultSet = null;
            }

            if( tempStatement != null )
            {
                tempStatement.close();
                tempStatement = null;
            }

            if( tempConnection != null )
            {
                tempConnection.close();
                tempConnection = null;
            }
        }
        catch( Exception e )
        {
            e.printStackTrace();
        }
    }
}

DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/datastream", "postgres", "1234" );
這裡是DriverManager.getConnection( "jdbc:postgresql://資料庫IP:Port/Database", 帳號, 密碼 );

2016年6月14日 星期二

C#的拆解字串

在Unity內、使用C#時,有時會需要拆解字串和重組字串,字串的拆解通常都是訂定拆解字元來執行,但有時也會需要訂定拆解字串來執行。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MainProcess : MonoBehaviour {

    private string data = "ABCDEFGH";
    private string[] splitSeparators = new string[]{ "DEF" };

    void Start ()
    {
        Debug.Log( data.split( 'D' )[0] );
        Debug.Log( data.split( 'D' )[1] );

        Debug.Log( data.split( splitSeparators, System.StringSplitOptions.None )[0] );
        Debug.Log( data.split( splitSeparators, System.StringSplitOptions.None )[1] );
    }
}

2016年6月13日 星期一

C#的Dictionary之取得資料

Dictionary是類似Hashtable的架構,用Key和Value的方式來相對應。
而要來依序取得裡面的資料時,foreach裡引用的架構和一般有點不同,主要是keyValuePair。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MainProcess : MonoBehaviour {

    private Dictionary<int, string> tempDictionary = new Dictionary<int, string>();

    void Start ()
    {
        tempDictionary.Add( 1, "XXX" );
        tempDictionary.Add( 2, "YYY" );
        tempDictionary.Add( 3, "ZZZ" );

        foreach( KeyValuePair<int, string> x in tempDictionary )
        {
            Debug.Log( x.Key + " = " + x.Value );
        }
    }
}

Unity內轉換Direction和EulerAngles為Quaternion

一般在3D間內有三種可表現方向的方式:
Direction:向量方式,例如( 1, 0, 0 )表示面向正左方。
EulerAngles:尤拉角(由拉角、歐拉角)方式,例如( 0, 180, 0 )表示面向正後方。
Qaternion:四元數。

Direction和EulerAngles都很好理解,而Qaternion即使我能理解它的原理,但還是不擅使用。
偏偏有不少關於方向的使用都得是Qaternion型式,所以轉換就很重要。

Direction轉換成Qaternion,可以使用Qaternion.LookRotation:
Qaternion LookRotation( Vector3 forward, Vector3 upwards = Vector3.up );
例如Qaternion rotation = Qaternion.LookRotation( new Vector3( 1, 0, 0 ), Vector3.up );

EulerAngles轉換成Qaternion,可以使用Qaternion.Euler:
Quaternion Euler( float x, float y, float z );
例如Quaternion rotation = Quaternion.Euler( 0, 30, 0 );

這樣當需要使用Quaternion時,我就可以用這些方式去轉換了。

2016年6月8日 星期三

Unity內偵測有否點擊到UGUI作出來的介面

Unity現在可使用方便的UGUI功能作介面,而當要操控2D介面或是作3D物件控制時,都是使用滑鼠左鍵;所以一般邏輯為當滑鼠初次點擊在2D介面上時,就不會啟動3D物件控制功能,因此需要偵測滑鼠是否點擊在任何UGUI作出來的2D介面上。

UGUI在創建時,會自動在【Hierarchy】下產生Canvas』和EventSystem』兩個物件,EventSystem』便是用來處理點擊等事件的存在,所以會使用它來得知是否有滑鼠點擊任何UGUI物件,並可取得所點擊的介面物件。


using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class MainProcess : MonoBehaviour {

    void Update ()
    {
        if( Input.GetMouseButtonDown( 0 ) )
        {
            if( EventSystem.current.IsPointerOverGameObject() )
            {
                Debug.Log( "有介面被點擊到!" );
                Debug.Log( EventSystem.current.currentSelectedGameObject );
            }
        }
    }
}

2016年6月7日 星期二

C#的尋找在List內之Structure資料

在Unity內、使用C#時,創造包含Structure的List,然後用條件尋找的方式。
先在List內找到符合條件的該筆資料Index,再用Index去調出要尋找的該筆資料其他部分:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MainProcess : MonoBehaviour {

    private List<tempStructure> tempStructureList = new List<tempStructure>();

    private struct tempStructure
    {
        public int tempNumber;
        public string tempName;
    }

    void Start ()
    {
        tempStructure xxx = new tempStructure();
        tempStructure yyy = new tempStructure();

        xxx.tempNumber = 1;
        xxx.tempName = "XXX";
        yyy.tempNumber = 2;
        yyy.tempName = "YYY";

        tempStructureList.Add( xxx );
        tempStructureList.Add( yyy );

        tempIndex = tempStructureList.FindIndex( z => z.tempName == "XXX" );

        Debug.log( tempStructureList[tempIndex].tempNumber );
    }
}

C#的Structure

在Unity內、使用C#時,創造並使用Structure的方式:
using UnityEngine;
using System.Collections;

public class MainProcess : MonoBehaviour {

    private struct tempStructure
    {
        public int tempIndex;
        public string tempName;
    }

    void Start ()
    {
        tempStructure xxx = new tempStructure();

        xxx.tempIndex = 1;
        xxx.tempName = "Name";

        Debug.log( xxx.tempIndex  );
        Debug.log( xxx.tempName );
    }
}

這就是Google的Blogger @@

在很久很久以前,有使用過Yahoo的部落格,玩了一下就沒繼續了。

過了很久,現在是個程式工程師的我,常常會在網路上尋找很多資訊。有自己會用到的資訊時,便會把網頁給整個儲存起來,可是東西一多了之後,往往會很不好找。

這時靈光一閃,有看過一些人會把自己使用到的資訊,記錄在網誌上,讓我萌起了這個也想做看看的念頭。

接下來,就看我有沒有恆心來玩囉......