Bear Su's Blog

RubyConf Taiwan 2016 第二天

今年第一次參加 RubyConf Taiwan 2016

今天有記得要多做一些紀錄,但還是零零散散啊…

紀錄今天聽到的議程:

之後如有提供投影片再補充連結

[利用Ruby撰寫勒索軟體並探討如何安全的使用密碼系統](https://2016.rubyconf.tw/#Zong-Yu Wu)


這場說明勒索軟體如何加密電腦檔案

加密的演算法不建議 rc4, des

建議使用 AES CBC 模式或 RSA 長度大於 2048

在這場看到有趣的 gem:

RansomRB

務必看完說明並使用 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 測試編譯後的執行檔

資源:

mruby

mruby-cli

mrbgems

mruby-mtest

[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 !!!

這裡有一些資源提供參考:

Scripts To Rule Them All

Laptop - A script to set up an macOS laptop for web development.

Vagrant

在開發方面可以提供 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

列了一張等級表,每個等級標示需符合的能力與對應的薪水

員工每年應該至少升一級

還需要考慮員工所在地區的生活品質所需要的薪資

參考大麥克指數

在這場看到有趣的資源:

同樣生活品質所需的薪水換算

income_tax


如果覺得這篇文章對您有所幫助,歡迎贊助我一杯咖啡 ☕️

祝您有美好的一天 ❤️