2018年9月27日 星期四

測試

 public static void main(String args[]){

 }

2018年9月12日 星期三

[Oracle DB] PL/SQL

甲骨文資料庫特別有名的功能,在寫Procedure時經常會用到
不適用於Query出資料,若試圖使用SELECT列出資料就會出現錯誤,只能透過DBMS的方式在DBMS Log面板上印出 。另外,在truncate table相關指令時也會失效 。

1、基本架構:
DECLARE
  --變數宣告區域
BEGIN
  --SQL語句
END;

2、宣告變數的方式
格式:
  variable_name Type;
範例:
  qty NUMBER(5);
  flag BOOLEAN;

2-2、賦值
格式:
  variable_name := var;
範例:
  qty := 100;

3、DBMS
DBMS_OUTPUT.PUT_LINE('...........');

4、字串
必須使用單引號包住字串,使用雙引號會出錯

5、日期
to_date('1990/01/23', 'yyyy/mm/dd')

6、常用函數
(1). substr(字串, 位置, 個數);
  位置的索引值起始為1,例如apple則index=1的值為a。
  substr('apple',1,3); -- 傳回app

(2). in('a','b','c'....)
  符合in中的資料,傳回boolean型態

(3). decode()



2018年9月10日 星期一

[JS] github棄用jquery

https://githubengineering.com/removing-jquery-from-github-frontend/

原生JS逐漸取代了jquery所提供的功能,而老舊的IE無法使用這些新生的JS功能,已不堪使用,在這個時代逐漸被廢棄,根據github文章,紀錄一些JS新功能的筆記

(1) Dom操作
document.querySelectorAll()

(2) class操作
document.getElementById("xxx").classList.add("myclassname")
document.getElementById("xxx").classList.remove("myclassname")

(3) AJAX
fetch or XHR
比較舊的瀏覽器用XHR

* fetch
fetch('http://xxxx', {method:'get'}).then(function(resp){
  .....
  // resp.status
}).catch(function(err){
  .....
})

(5) Animation
使用CSS

(6) addEventListener()
https://developer.mozilla.org/zh-TW/docs/Web/API/EventTarget/addEventListener
el.addEventListener("click", function(){.....}, false);

[Kotlin] 筆記

其用法和java相似,一樣有package、import,比較特別的地方是宣告的方式與資料型態還有function定義模式改變。

定義變數需下關鍵字var,若一開始不賦值須加上特殊的關鍵字lateinit進行宣告,並且它是採用名字在前面,型態在後面的方式去定義變數。而function的部分關鍵字簡短為fun,回傳的型態放置於括號後方。在Android的應用上listener的宣告方式變得更簡短。


import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    lateinit var btn_1:Button
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val txt: TextView = findViewById(R.id.txt_1);
        txt.setText(fun1())
     
        btn_1 = findViewById(R.id.btn_1)
        btn_1.setOnClickListener{
            fun2()
        }
    }

    fun fun1():String{
        return "ya"
    }

    fun fun2(){
        btn_1.setText("click!!!!!!");
    }
}



1、宣告關鍵字
var 之後可以變動
val 初始化後只能讀取 (Val cannot be reassigned)

2、字串中取用變數
println("oooxxx${string}")

3、
val只有getter
var有getter 及 setter

getter與setter的改寫 : 使用關鍵字field
class Say{
  var msg:String = "hello"
    get() = field
    set(val){
      field = val
    }
}

Say say = new Say()
println(say.msg) // world
say.msg = "hi"
println(say.msg) // hi





2018年9月9日 星期日

[SQLite] 安裝&基本操作

輕型的sql database,很適合ror練習時使用

1、安裝
Mac
  下載snapshots,自行compile
  ./configure --prefix=/usr/local
  make
  make install

Windows
  下載 tools & dll 解壓縮後,將路徑加入環境變數path中

測試是否安裝成功
  cmd或terminal直接key上sqlite3



2、操作
(1) 建立database
在還沒進入sqlite前,在cmd中下指令:
sqlite3 test.db
代表創建test並且使用這個DB

(2) 離開sqlite命令列
.quit

(3) 導出完整的資料庫
.dump
sqlite3 test.db .dump > test.sql

[Android] Android Studio搬移SDK位置

Android sdk佔用了不少硬碟空間,實測在新安裝的Android Studio下只下載了5.0的sdk和模擬器的img,就耗用了9GB,在ssd硬碟空間不多的情況下若後續再安裝了其他sdk,空間爆掉機率極高

1、開啟Android Studio,若直接進入專案則Close Project

2、右下角點選Configure / Project Defaults / Project Structure

3、取得 SDK Location 的位置,將該資料夾搬移到其他位置後,再設定到新位置

[RoR] Model - Validation


Model是用於與DB進行資料交互的物件,為了維護資料的安全及完整,往往需要建立基本的資料驗證,而這樣的需求可以針對在models中的model檔案撰寫Validation,當model的資料進行更動時(例如save)會自動觸發

1、官方列出的trigger時機:
create
create!
save
save!
update
update_attributes
update_attributes!


2、跳過驗證
decrement!
decrement_counter
increment!
increment_counter
toggle!
update_all
update_attribute
update_counters
或者,當你在save時不希望驗證也可以傳送false值的方式讓它不要觸發save(false)

3、可使用的method

(1) valid?
觸發驗證,若沒有errors時會傳回true

(2) invalid?
與(1)相反

(3) new_record?
在丟入DB前,確認該資料是否已經存在,若已經存在會傳回false



4、驗證的方式
(1) 驗證必填 - validates_presence_of 
範例:username及password須為必填
    validates_presence_of :username, :password

(2) 驗證長度 - validates_length_of
範例:username必須大於8個字元
    validates_length_of :username, minimum=>8

(3) 自訂驗證:
validate :validation_name #表示採用這個自訂的function去驗證

private #將function設定在private下
def validation_name
  if age < 0 
    errors.add(:age, ".......")
  elsif age>999
    errors.add(:age, ".......")
end

(4) 其他


* 參考資料
https://guides.rubyonrails.org/v2.3/activerecord_validations_callbacks.html