諸行無常

IT色々お勉強中のブログ

Showing Recent Issues SWIFT_VERSION '3.0' is unsupported, supported versions are: 4.0, 4.2, 5.0.

Xcodeでビルドした時、表題のエラーで怒られる時

Showing Recent Issues
SWIFT_VERSION '3.0' is unsupported, supported versions are: 4.0, 4.2, 5.0.

書いている通り3.0はサポートしてないので変更

f:id:babababand:20191115163545p:plain PROJECT Combined Swift Language Version を変更してビルドしなおすと動く

swift Codableの使い方

swift Codableの使い方

  • こういうJSONがあった場合
import Foundation
let hoge = "{\"id\":1,\"family_id\":12345,\"user\":{\"id\":20,\"display_name\":\"hoge\",\"name\":\"hoge\",\"text\":\"自己紹介文\",\"mail_address\":\"user@hoge.jp\",\"auth\":\"member\",\"status\":0,\"created_at\":\"2019-01-09T16:42:43+09:00\",\"image\":{\"id\":1,\"url\":\"https://hoge.cloudfront.net/image/user_images/normal/fugaUTC.jpg\",\"url_thumbnail\":\"https://foo.cloudfront.net/image/user_images/normal/bar.jpg\"}},\"hogehoge\":{\"id\":20,\"display_name\":\"kudo\",\"name\":\"hoge\",\"text\":\"自己紹介文\",\"mail_address\":\"user@hoge.jp\",\"auth\":\"member\",\"status\":0,\"created_at\":\"2019-01-09T16:42:43+09:00\",\"image\":{\"id\":1,\"url\":\"https://hoge.cloudfront.net/image/user_images/normal/fugaUTC.jpg\",\"url_thumbnail\":\"https://foo.cloudfront.net/image/user_images/normal/bar.jpg\"}},\"status\":\"are\",\"description\":\"一部古い情報を修正しました\",\"updated_at\":\"2018-11-07T06:53:13Z\","}"

こういうCodableを定義します。

struct User: Codable {
    let id: Int
    let displayName: String
    let name: String
    let text: String
    let mailAddress: String
    let auth: String
    let status: Int
    let createdAt: Date
    let image: Image
}
struct Image: Codable {
    let id: Int
    let url: URL
    let urlThumbnail: URL
}

struct Kuso: Codable {
    let id: Int
    let familyId: Int
    let applicant: User
    let approver: User
    let status: String
    let description: String
    let updatedAt: Date
    let applicantNameAtApplied: String
    let approverNameAtApproved: String
}

snakecaseに返還させる方法

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

Date型を受け取る方法

decoder.dateDecodingStrategy = .iso8601

あとはデコード

let boke = try! decoder.decode(Kuso.self, from: hoge.data(using: .utf8)!)
print(boke)

Railsアプリの循環的複雑度を測定方法

Railsアプリの循環的複雑度を測定

そのまんま

Gemfile

gem 'metric_fu'

spec/spec_helper.rb

require 'factory_bot_rails'
if ENV['RUN_COVERAGE'] == 'true'
  require 'simplecov'
  require 'metric_fu/metrics/rcov/simplecov_formatter'
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
    SimpleCov::Formatter::HTMLFormatter,
    SimpleCov::Formatter::MetricFu
  ]
  SimpleCov.start 'rails' do
    add_filter '/spec/'
    add_filter '/config/'
    add_filter '/vendor/'
  end
end

metricsで測定したいものを入れる

MetricFu.configuration.configure_metrics.each do |metric|
  if [:saikuro, :stats, :rails_best_practices].include?(metric.name)
    metric.enabled = true
  else
    metric.enabled = false
  end
end

circle ciに入れるならこんな感じ

      - run:
          name: RSpec tests
          working_directory: ~/hoge
          command: |
            RUN_COVERAGE=true bundle exec rspec spec

````

以上で測定可能

Railsアプリの循環的複雑度を測定方法

Railsアプリの循環的複雑度を測定

そのまんま

Gemfile

gem 'metric_fu'

spec/spec_helper.rb

require 'factory_bot_rails'
if ENV['RUN_COVERAGE'] == 'true'
  require 'simplecov'
  require 'metric_fu/metrics/rcov/simplecov_formatter'
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
    SimpleCov::Formatter::HTMLFormatter,
    SimpleCov::Formatter::MetricFu
  ]
  SimpleCov.start 'rails' do
    add_filter '/spec/'
    add_filter '/config/'
    add_filter '/vendor/'
  end
end
````

## metricsで測定したいものを入れる

MetricFu.configuration.configure_metrics.each do |metric| if [:saikuro, :stats, :rails_best_practices].include?(metric.name) metric.enabled = true else metric.enabled = false end end

```` 以上で測定可能

Mac ファイルについた@消す方法

Mac ファイルコピーした際に@がついた際消す方法

こんな感じで@が付くので何がついてるか調べてみる

ls -l@ /usr/local/Cellar/unox/0.2.0_1/libexec/bin/hoge
-rwxr-xr-x@ 1 hoge.hoge  admin  10254 10 17 15:36 /usr/local/Cellar/unox/0.2.0_1/libexec/bin/hoge
    com.apple.lastuseddate#PS      16
    com.apple.metadata:kMDItemWhereFroms      129

こんな感じで消す

xattr -d com.apple.metadata:kMDItemWhereFroms /usr/local/Cellar/unox/0.2.0_1/libexec/bin/hoge

良かった、消えた

ls -l@ /usr/local/Cellar/unox/0.2.0_1/libexec/bin/hoge
-rwxr-xr-x  1 hoge.hoge  admin  10254 10 17 15:36 /usr/local/Cellar/unox/0.2.0_1/libexec/bin/hoge

Cache-Controlについて、設定方法

Cache-Controlについて、設定方法

キャッシュさせるかどうかの奴 ブラウザやキャッシュサーバに対して、キャッシュの動作や有効期限を指定するためのもの

  1. private privateなものなんでキャッシュしちゃダメよって奴

  2. no-cache オリジンサーバーの確認無しに勝手にキャッシュしてはいけない

  3. no-store リクエスト、レスポンスの一切を保存してはならない

  4. public キャッシュしてええよ

  5. max-age キャッシュの有効期限を設定する(秒数)

headerに設定する場合多分こんな感じで設定

<meta http-equiv="Cache-Control" content="no-store, max-age=0">
<meta http-equiv="Expires" content="0">

↑headerの設定は嘘だった。それだと効かない。railsとかだと下の感じで直接セット

response.headers['Cache-Control'] = 'no-store'

rails X-CSRF-TOKENからraw_token(毎回変わらないtoken)を取り出す方法

rails X-CSRF-TOKENからraw_token(毎回変わらないtoken)を取り出す方法

純粋に逆から実行していけば取れる

逆xorのメソッド作っておく

def xor_byte_strings(s1, s2) # :doc:
  s2_bytes = s2.bytes
  s1.each_byte.with_index { |c1, i| s2_bytes[i] ^= c1 }
  s2_bytes.pack("C*")
end

上から実行していく

# decodeする
masked_token=Base64.strict_decode64('対象 X-CSRF-TOKEN')
# one_time_pad取り出す
one_time_pad = masked_token[0...32]
# encrypted_csrf_token取り出す
encrypted_csrf_token = masked_token[32..-1]
# 逆xor実行
a=xor_byte_strings(one_time_pad, encrypted_csrf_token)
# base64でエンコードして見れるようにする
Base64.strict_encode64(a)

以上!