RubyConf Taiwan 2016 第二天
Table of Contents
今年第一次參加 RubyConf Taiwan 2016
今天有記得要多做一些紀錄,但還是零零散散啊…
紀錄今天聽到的議程:
- [利用Ruby撰寫勒索軟體並探討如何安全的使用密碼系統](https://2016.rubyconf.tw/#Zong-Yu Wu)
- [Ruby, facing the change of world-wide server-class microprocessors](https://2016.rubyconf.tw/#Luba Tang)
- [Building maintainable command-line tools with MRuby](https://2016.rubyconf.tw/#Eric Hodel)
- [Buidling HUGE web apps: Rails at 1,000,000 Lines of Code](https://2016.rubyconf.tw/#Brad Urani)
- [Solving your onboarding problems with Ruby](https://2016.rubyconf.tw/#Layne McNish)
- [利用 Sidekiq Enterprise 打造高效率與高可靠度的爬蟲系統 ](https://2016.rubyconf.tw/#Chien-Wei Chu)
- [What is the Rack Hijacking API](https://2016.rubyconf.tw/#Kiyoshi Nomo) | 簡報
- [Large scale Rails applications](https://2016.rubyconf.tw/#Florian Dutey)
- [How we replaced salary negotiations with a Sinatra app](https://2016.rubyconf.tw/#Konstantin Hasse) | 簡報
之後如有提供投影片再補充連結
[利用Ruby撰寫勒索軟體並探討如何安全的使用密碼系統](https://2016.rubyconf.tw/#Zong-Yu Wu) ¶
這場說明勒索軟體如何加密電腦檔案
加密的演算法不建議 rc4, des
建議使用 AES CBC 模式或 RSA 長度大於 2048
在這場看到有趣的 gem:
務必看完說明並使用 VM 或 docker 測試,不然檔案系統被加密就 GG 了
[Ruby, facing the change of world-wide server-class microprocessors](https://2016.rubyconf.tw/#Luba Tang) ¶
cloud server 市場 arm 有成長趨勢
Adapterive compiler = iterative compiler +workload
Skymizer 與女人迷合作,正在 AWS 上研究,預計未來會提供 benchmark for real-world workload
[Building maintainable command-line tools with MRuby](https://2016.rubyconf.tw/#Eric Hodel) ¶
可以透過 mruby-cli 跨平台編譯
mruby 很像 ruby,但並不是 ruby
可以透過一些方法,加速測試
mruby 提供 bintest
測試編譯後的執行檔
資源:
[Buidling HUGE web apps: Rails at 1,000,000 Lines of Code](https://2016.rubyconf.tw/#Brad Urani) ¶
跟自行創業不同,為企業建立網站系統,面對的挑戰是實現上千個功能,而不只是做好一件事
面對開發效率,以及客戶的需求變更,講者分享一些經驗:
Autonomy, trust.
Always start with the simplest code that works:
- Do not over-engineer
- Do not build things you do not need yet
Always start with the simplest process that works
- Simple tools
- Simple git
Code review
- Estimate style
- Meeting schedule
Encourage full stack developing.
Prioritize training
- Technical
- Business
Do not over-automate, wait until it becomes a problem.
Internal open source.
Architectural consistency
[Solving your onboarding problems with Ruby](https://2016.rubyconf.tw/#Layne McNish) ¶
如何讓團隊的新成員能夠儘早加入開發?
除了寫文件之外還有什麼能做的呢?
還記得剛上工時,第一件事就是要建立開發環境,這通常都要弄上一整天
Automate all the things
像是寫個 install.sh
或是 rake
!!!
這裡有一些資源提供參考:
Laptop - A script to set up an macOS laptop for web development.
在開發方面可以提供 git pre-push hooks,提醒新成員開發規範
給予新成員一些小且能快速取得成就感的任務,能使他更快融入團隊的開發環境
想想還有什麼能做的呢?
[利用 Sidekiq Enterprise 打造高效率與高可靠度的爬蟲系統 ¶
](https://2016.rubyconf.tw/#Chien-Wei Chu)
目前台灣上市股票有 2000 多家公司,每家都要提供 1000 多種數據給使用者
而且這 1000 多種數據的更新頻率不一樣
過去只依賴 cron
,效率不夠好,資源利用也有問題
後來選擇了用 sidekiq enterprice
sidekiq 有三種版本
建立一張資料表紀錄每個任務的下次開始執行的時間,再利用 cron
每天定時從表中取出需要開始執行的任務,放進 sidekiq 的 Queue 中
透過 enterprice 版本所提供的功能,可以解決像是每秒連線數上限的任務排程問題
透過 proxy server 變更來源ip 來突破目標網站的 ip 封鎖
[What is the Rack Hijacking API](https://2016.rubyconf.tw/#Kiyoshi Nomo) ¶
這場演講我跟不太上,就自行上網找資料了
程式碼:
# file: config.ru
# encoding: utf-8
require 'thread'
# Streams the response "Line 1" .. "Line 10", with
# 1 second sleep time between each line.
#
# Non-Phusion Passenger users may have to turn off their
# web servers' buffering options for streaming to work.
# Phusion Passenger 4 users don't have to do anything, it
# works out-of-the-box thanks to our real-time response
# buffering feature.
app = lambda do |env|
# Fully hijack the client socket.
env['rack.hijack'].call
io = env['rack.hijack_io']
begin
io.write("Status: 200\r\n")
io.write("Connection: close\r\n")
io.write("Content-Type: text/plain\r\n")
io.write("\r\n")
10.times do |i|
io.write("Line #{i + 1}!\n")
io.flush
sleep 1
end
ensure
io.close
end
end
run app
執行
$ rackup
Puma starting in single mode...
* Version 3.6.0 (ruby 2.2.5-p319), codename: Sleepy Sunday Serenity
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:9292
在另一個 terminal 測試
$ curl http://localhost:9292
Status: 200
Connection: close
Content-Type: text/plain
Line 1!
Line 2!
Line 3!
Line 4!
Line 5!
Line 6!
按 CTRL + c
跳出
[Large scale Rails applications](https://2016.rubyconf.tw/#Florian Dutey) ¶
看到了 Fat models 與 Skinny controllers
使用一些方式來重構:
- Single Responsibility Principle(SRP)
- Domain specific language
- Services
- Forms. like Model
- Policies
- Adapter model
[How we replaced salary negotiations with a Sinatra app](https://2016.rubyconf.tw/#Konstantin Hasse) ¶
談論薪資,為你的能力與貢獻給予酬勞
提到22k夢想高飛
開發了一個 sinatra salary framework
列了一張等級表,每個等級標示需符合的能力與對應的薪水
員工每年應該至少升一級
還需要考慮員工所在地區的生活品質所需要的薪資
參考大麥克指數
在這場看到有趣的資源: