2017/3/25
在 Postgresql 使用 uuid 的方法
markdown
(以下指令都是在 postgresql cli 輸入)
想要生成uuid的話,只要呼叫 uuid_generate_v4 就可以生成
```
select uuid_generate_v4()
```
正常情況下會看到
```
uuid_generate_v4
--------------------------------------
98a4f867-8dcd-4982-aa3a-14e1030bcd88
```
如果看到
```
ERROR: function uuid_generate_v4() does not exist
```
表示你的postgresql 沒有安裝 uuid-ossp 模組
安裝uuid-ossp模組的指令
```
CREATE EXTENSION "uuid-ossp";
```
移除uuid-ossp模組的指令
```
DROP EXTENSION "uuid-ossp";
```
查看目前安裝過的模組
```
select * from pg_extension;
```
查看可安裝的模組
```
select * from pg_available_extensions;
```
2017/3/23
建立一個line bot的所需知識
markdown
架構
* 程式語言:ruby
* web server framework:rails
* 資料庫:postgresql
* 協定:https post
* 資料傳輸格式:json
開發環境
* 硬體:macbook
* 軟體
* rvm
* rails
* bundle/gem
* sublime text
發布環境
* 硬體(heroku)
* 軟體
* git
* heroku cli
2017/3/21
rails db & postgresql cli 使用方法
markdown
# postgresql 相關指令
查看有哪些資料庫
```
\l
```
連線到資料庫
```
\c db_name
```
查看有哪些表格
```
\dt
```
查看有哪些欄位
```
\d+ table_name
```
查看執行過的資料庫遷移
```
select * from schema_migrations;
```
# rails db 相關指令
開啟含有 rails 環境的 irb
```
rails console
```
連線到資料庫
```
rails dbconsole
```
建立資料庫,如果資料庫已經存在則不做事
```
rails db:create
```
刪除資料庫
```
rails db:drop
```
根據 db/schema.rb 檔產生對應的資料表(此動作會將資料庫內的資料清空)
```
rails db:schema:load
```
根據資料庫狀態更新 db/schema.rb 檔 (但只要叫 db:migrate 就會自動執行這個了)
```
rails db:schema:dump
```
執行db/seeds.rb
```
rails db:seed
```
##快速功能
###setup
```
rails db:setup
```
等於以下指令
```
rails db:create
rails db:schema:load
rails db:seed
```
###reset
```
rails db:reset
```
等於以下指令
```
rails db:drop
rails db:setup
```
在這裡要注意的是setup跟reset指令不是重新執行migrate,所以如果你的schema檔是壞的,你下這兩個指令完還是壞的。
如果想要根據migration檔重新建立一個資料庫應該下的指令是
###migrate:reset
```
rails db:migrate:reset
```
等於以下指令
```
rails db:drop
rails db:create
rails db:migrate
```
這裡要注意的是, db:migrate:reset 指令並不會執行 db:seed
執行資料庫遷移,會把所有還沒執行過的都執行完,然後自動更新 db/schema.rb 檔
```
rails db:migrate
```
查看資料庫遷移結果
```
rails db:migrate:status
```
還原上一筆資料庫遷移
```
rails db:rollback
```
執行下一筆資料庫遷移
```
rails db:forward
```
##參考資料
[RailsGuide Migrations(資料庫遷移)](http://guides.ruby.tw/rails3/migrations.html)
# schema 相關 psql 指令
列出所有 schema
```
\dn
# List of schemas
# Name | Owner
#--------+----------
# public | postgres
# abc | etrex
# (2 rows)
```
顯示目前所在的 schema
```
SHOW search_path;
# search_path
#-----------------
# "$user", public
# (1 row)
```
切換 schema
```
SET search_path TO abc;
# SET
SET search_path TO 'abc';
# SET
```
字串要不要加引號都可以,當 search_path 的值不在 schema 的列表上時不會跳 error,可以想像成連接到一個空的 schema,而這樣並不代表新增了一個 schema。
在 select 的當下使用 schema
```
SELECT * FROM schema_name.table_name;
```
##參考資料
[https://stackoverflow.com/questions/34098326/how-to-select-a-schema-in-postgres-when-using-psql](https://stackoverflow.com/questions/34098326/how-to-select-a-schema-in-postgres-when-using-psql)
2017/3/20
人生技能配點建議
在玩線上遊戲的時候,職業選擇跟能力發展我們通常都會選擇其中一項特化。比方說玩RO、黑色沙漠,這類型的遊戲都會有配點系統,技能配點和屬性配點是非常重要的,因為點數有限,在配點時不會把點數分配在比較次要或者無關的能力上。
而在實際的生活上,我們把時間看成點數,對某個技能投入時間就像是在點技能。在現實生活中,很少有看到把時間全部投入在同一個技能上的人,而這種人也都強到爆炸。
根據線上遊戲的環境,遊戲平衡的設計不良,就會產生強勢職業跟弱勢職業,可能你玩到一半爬文才發現職業選錯,點數也配錯,選到一個弱勢職業還配點配超爛,完全無法打贏同等級的怪物,此時只能選擇創新角色重練了。
但如果你的人生走在錯誤的道路上,上了錯誤的大學、選錯系、找錯工作,那就不是創新角重練那麼容易。
其實現實世界並不像RO、黑色沙漠,也許現實世界更像FF5、魔力寶貝2。在這些遊戲裏有轉職系統,你一開始是無職業者,你需要做點事情達成轉職條件,甚至有些職業的轉職條件就是數個職業等級到達某個水準。
在李笑來的「七年就是一輩子」書中提到,他認為花2年就可以精熟一個職業,然後花5年利用這個職業去獲利、累積資源,接著就可以轉職學習新的強勢職業。
大多數的人在現實生活中,投在職業技能的時間都是少的,下班之後的時間都拿去點一些奇怪的東西,上班的8小時拿去混水摸魚當個冗員的事情也是常常發生,這樣的人被取代性高也是很合理的。按照李笑來的說法,大多數的人只要用心練個半年一年就可以達到一般水準,兩年就可以精熟。
最近在找工作的時候發現,若想在大公司得到較高的薪水,那麼最好你一輩子只點一個技能,點高點滿。而在小公司,因為資源有限,每個人需要懂的技能是廣的,也許你要身兼數職,所以技能廣度在小公司才有那麼點用處,在大公司則沒有。
很多人沒有考慮過自己的轉職路線。像我,在各種基礎職業轉來轉去,就很少花時間去點高階技能,結果就是得不到好薪水。
這樣算不算浪費技能點呢?
Jobs在「史丹佛大學畢業演說」曾提到過,你現在所點的技能,都會被用在未來的某一刻,而那會是現在的你無法想像的。
我覺得不一定是這樣,純粹是看你能不能有效整合、利用手頭上的資源,去打出一個漂亮的combo。
最近在玩遊戲王(Duel links),透過進行遊戲,你可以得到一些寶石,寶石可以拿去抽卡包,決定抽哪些卡包會直接影響你的牌庫強度。
我們可以把寶石看成時間,卡包看成技能,抽卡看成技能配點。這也是款資源分配遊戲。
只要去爬攻略就可以看到很多流派,像是利用卡牌的特性打出漂亮的combo獲勝。或者見招拆招的防禦型獲勝法。你手上的牌庫也許不完整,但你看了別人的combo
,就會知道自己應該要往哪個方向發展,該把石頭拿去抽哪個卡包。
攻略看久之後,也可以根據自己的牌庫,創造出一個最適合自己的流派,打的對面不要不要的。
結論:
需要瞭解世界上的強勢職業有哪些
轉職到另一個基礎職業是容易的
資源整合是困難的
創造出一個新職業去最大化利用目前的技能配點是最佳解
2017/3/16
Swift 使用 dictionary 取代 switch case 的方法
markdown
switch 寫法
```
var a = "a"
func funcA(){
print("A")
}
func funcB(){
print("B")
}
func funcC(){
print("C")
}
switch a {
case "a":
funcA()
case "b":
funcB()
case "C":
funcC()
default:
funcC()
}
```
改為使用 dictionary 的情況
```
var a = "a"
func funcA(){
print("A")
}
func funcB(){
print("B")
}
func funcC(){
print("C")
}
let dic = ["a":funcA,"b":funcB,"c":funcC,]
dic[a]?()
```
[關於dictionary 的中括號](https://developer.apple.com/reference/swift/dictionary/1540848-subscript)
2017/3/8
在 blogger 貼漂亮 code 的方法(使用 markdown 和 prettyprint)
使用套件
markdownprettyprint
安裝步驟
先到 blogger 版面配置,在最下方找到新增小工具然後選擇HTML/JavaScript
然後在內容填入以下程式碼
<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.6.4/showdown.min.js"></script>
<script>
var converter = new showdown.Converter();
var posts = document.querySelectorAll(".post-body,.snippet-item");
Array.prototype.forEach.call(posts, function(el, i){
if(el.innerHTML.indexOf("markdown") <= 1){
el.innerHTML = converter.makeHtml(el.innerHTML.replace("markdown",""));
}
});
var pres = document.querySelectorAll("pre");
Array.prototype.forEach.call(pres, function(el, i){
el.classList.add("prettyprint");
});
</script>
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script>
就完工了。
測試
接著發佈一篇使用markdown語法的新文章文章內容寫入如下圖:
結果看起來會是
補充
使用Tranquil Heart theme 的 code 寫法為:<script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.6.4/showdown.min.js"></script> <script> var converter = new showdown.Converter(); var posts = document.querySelectorAll(".post-body"); Array.prototype.forEach.call(posts, function(el, i){ if(el.innerHTML.indexOf("markdown") <= 1){ el.innerHTML = converter.makeHtml(el.innerHTML.replace("markdown","")); } }); var pres = document.querySelectorAll("pre"); Array.prototype.forEach.call(pres, function(el, i){ el.classList.add("prettyprint"); }); </script> <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script> <link rel="stylesheet" type="text/css" href="https://jmblog.github.io/color-themes-for-google-code-prettify/themes/tranquil-heart.min.css" />
可以成功,但一行程式碼太長時會破版,應該是這個theme的問題。
2017/3/2
ruby 全形轉半形(含英文數字符號)
markdown
寫法:
```
def to_half(str)
full = " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
half = " !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
str.tr(full, half)
end
```
測試:
```
puts to_half("!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~")
```
訂閱:
文章 (Atom)