コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyでバージョン番号を比較するするときはGem::Versionでできる

いつもパッと出てこないので備忘録メモ

環境

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16]

やり方

old_version = "1.0.0"
new_version = "1.2.1"

Gem::Version.create(old_version) < Gem::Version.create(new_version)
# => true

ちなみにこんな書き方もOK

Gem::Version.create("1.0.0-dev1") < Gem::Version.create("1.0.0-dev2")
# => true
Gem::Version.create("1.0.0-dev5") < Gem::Version.create("1.0.0-dev2")
# => false

使える文字列かのチェックは .correct? を使う

Gem::Version.correct?("1.0.0.0")
# => true
Gem::Version.correct?("1.0.0-dev2")
# => true
Gem::Version.correct?("1.satou")
# => true
Gem::Version.correct?("satou.tarou")
# => false

参考リンク

『MedBeer -Rails開発での技術的負債との付き合い方-』に行ってきたよメモ

MedBeer -Rails開発での技術的負債との付き合い方-に行ってきたのでメモ

各発表の感想


Rails Good Parts, Bad Parts

感想

  • 技術負債を作らないためのアプローチの話
  • Railsのレールというふわっとした表現を「Railsの便利機能に乗っかる」と定義されてあるあるな言い回しがいい感じに言語化されたなという気持ちになる
  • 負債を作らないためにはやっぱり全体のレベルを上げるしかないんだなという実感

関連リンク


小さな成功体験を積み重ねてチームで負債に立ち向かう

感想

  • 太古の時代からRails情報を創出しているささたつさんによる負債を解消する面でのアプローチの話
  • モブプロをすることにより結構効果があった事例の紹介。
  • 全体レベルがこなれていない環境下においては威力を発揮しそうだなと言う気持ち

関連リンク


メドピアにおけるライブラリアップデート

speakerdeck.com

感想

  • 余裕がないと行われないgem&npmのアップデートをどう対処しているかの話
  • 自動的にPRが作成され、自動的に人員が選出され、次回があるのでやれという強制力があるという仕組み化された世界観の仕組み
  • やりたいー!とか思っても10人以上チームがいないと成せない業だな感があった。
  • npmも…という話だが、gem以上に複雑さはありそう

関連リンク


クックパッドの巨大 Rails アプリケーションの改善

感想

  • 毎度巨大なモノリシックアプリでおなじみだったクックパッドがどうやってサービスをばらして行ったかという知見の話
  • 涙ぐましい努力とRubyコミッタが2人いるというチート力が後押しとなりすごい進んでいるという印象
  • 取り組んできたことはすべてブログとして発信されているの強い…って思った。

関連リンク


全体を通しての感想

  • 「技術負債」というテーマで三者三様違う始点の話をしてて面白かった
  • 結構Railsのレールというものを具体的な言語化に迷ってたのでそれの定義事例を見れたことに学びがあった
  • モブプロも仕組み化も人が一定数いると回せるが、いないとなかなか取り組めないので、そこにおいての話があったりしてもいいのかなとか思いました。
  • 諸事情により懇親会参加できなかったのが痛恨の極み。こんなRails初心者でもわいわいお話できる場があれば行きたい…

Googleの広告系サービス名称と機能をざっくり理解する

Googleの広告系各種サービスって日に日に名前変わるなかで、DoubleClick系の名前が刷新されたので、2018年9月現在の話としてざっくりとまとめてみる

Google Ads(日本語名: Google広告)

もともとGoogle AdWordsと呼ばれていた、広告を出したい人向けのプラットフォーム。

表示したいものを決めて、使いたい額を決めて、それをよしなに配信してもらうというもの。

Google Marketing Platform(日本語名: Googleマーケティングプラットフォーム)

これが大きく変わった様子で、広告出稿側の支援ツールがすべて統合されたものになる。

DoubleClickSearchと呼ばれていた、検索結果に表示される広告の売買機能

従来アナリティクスの機能の範疇だった、タグマネージャーやオプティマイズ

また分析用途で使うデータスタジオやAnalytics360の機能に関しても内包されている

Google Ad Manager (日本語名: Googleアドマネージャ)

従来、DFP(Double click For Publisher) と呼ばれていたJavaScriptで広告表示用の枠を設定して、そこに対して広告を設定して配信する仕組みやDoubleClick Ad Exchangeと呼ばれる広告の売り主(出稿側)と買い主(表示する側)でお互い良い値段で売り買いができる売買の仕組みを統合したツール。

どちらかというと広告を表示する側のツールとなっており、表示回数の在庫を管理して売上を上げる用途として用いられる。

なお、JavaScriptスニペットタグが発行される仕組みのため、タグマネージャーと混同されることがあるが全くの別物。

Google Adsece

前述のAdExchange的な機能を持つGoogleの広告卸しサービス。Adsで出稿された広告を売り物として持つ。

AdExchangeは他社の広告が利用できたり、細かなハンドリングできるなどの違いはあるものの、カテゴリとしてはほぼ同じものになる。細かい違いは以下のページ参照のこと。

Google AdMob

アプリ向けの広告掲載をする機能。機能としてはAdsenseに近いものがあるが、こちらはネイティブアプリ向けのものでバナーや動画などを表示するSDKとセットで使う。

こちらはあくまでも掲載側の仕組みであり、出稿したい場合はGoogleAdsを使う。

関連リンク

RailsでUTF-8じゃない文字列が入ったハッシュをto_jsonしようとしてもできない

なんかRubyでない世界観で作られた日本語戻り値を受け取って加工してたら変なところでエラーになったのでメモ

環境

rails (5.2.0)

事象

以下のような test.txt を用意する

悪霊退散

これを意図的に Shift-JIS で読み込む

text = File.read("test.txt").force_encoding("SHIFT_JIS")
# => "\x{E682}\xAA\x{E99C}\x{8AE9}\x80\x80\x{E695}\xA3"

そしてこれをハッシュの値にして to_json しようとすると…

{result: text}.to_json
# Encoding::InvalidByteSequenceError: "\x80" on Shift_JIS
#

こんな感じでコケる。

ちなみに ascii-8bit もコケる

text = File.read("test.txt").force_encoding("ascii-8bit")
# => "\xE6\x82\xAA\xE9\x9C\x8A\xE9\x80\x80\xE6\x95\xA3"
{result: text}.to_json
# Encoding::UndefinedConversionError: "\xE6" from ASCII-8BIT to UTF-8
# 

対策

いわずもがな、ちゃんとUTF-8にしてあげる。

{result: text.force_encoding("UTF-8")}.to_json
=> "{\"result\":\"悪霊退散\"}"

関連リンク

『builderscon tokyo 2018』に行ってきたよメモ

builderscon tokyo 2018に行ってきたのでいつもの感じでメモです。

各発表の感想(Day1)


Envoy internals deep dive

www.youtube.com

上記ビデオの再演の様子

感想

  • マイクロサービスでは超ホットなenvoyの話。
  • Enovyが生まれた背景とどういう技術を使っているのかというトピックスでした
  • 結構突っ込んだ話だったので、割とミドルウェア知識薄い私としてはなんとなくでしか追えず…
  • ただEnvoyの思想はすごいなというのは感じ取れた。そして別のセッションでEnvoyがどういうものかは語られていたようなので以下の資料参照のこと

https://twitter.com/tsubasaxZZZ/status/1037967848168087552

関連リンク


Kubernetes で実現するインフラ自動構築パイプライン

感想

  • 理想状態への収束という定義がかなりわかりやすいし、それに対してプロビジョニングの仕組みを構築してるのがすごいと思った
  • このあたりは結構やりたくてもできないよなって感じなんだけどそこをやれるだけのチーム体制とパワーを咲くべきという意思決定があったのかなという思い
  • ステートフルなDBとかをどこまでリリース毎にリセットしているかは気になった

関連リンク


パスワードレスなユーザー認証時代を迎えるためにサービス開発者がしなければならないこと

感想

  • 最強の脳内メモリキーパスワードに対する展望
  • 一つはWebAuthnの仕様、もう一つはいま現在でどうやってやっていくべきかみたいな話
  • いまはパスワードという唯一無二の鍵をどこでも使い回す方式だったけどAuthenticatorの形式が増えると同じものにアクセスするのにも鍵の束ができる感じなので考え方が変わるなーという印象

関連リンク


知らなかった、時に困るWebサービスのセキュリティ対策

感想

  • 実際にあったインシデントからどういう取り組みをするべきみたいな事例を含めた紹介
  • 不正の発覚検知は玄人の経験値によるものだったけど、やっぱりそういう怪しさを検知する機構を予め入れておくということは大事だなと思った。

関連リンク


機械学習を用いず数学でゲーム内の需要予測をする

感想

  • 普通の企画職がやっているようなデータから仮設を立てる、というのを純粋数学的な視点でされたお話
  • 数学+行動経済学を嗜んだひとが事業予測やるとめちゃくちゃいろいろな手札を思いつけるから強い。
  • 発表の本筋からはそれるけど、ちゃんとレベルアップ必要数を式とかですらすら定義できていたのがさすがレベルデザイナーという感動を受けた

関連リンク


Webサービスの品質とは何か?アラート地獄と監視の失敗、サービスレベル目標設計から学んだ3つの答え

speakerdeck.com

感想

  • 歴史的経緯から割れ窓ってるアラートに対してどういう改善策を講じていったかの話
  • 適切なエラーを飛ばす、ちゃんと性能劣化を測るなどやるべきというトピックスに対して適切に観測方法を分けていたので見習いたいと思った。
  • サービスレベルをしかるべきレベルに持っていくことができるようにしておく、という文脈で垂直分割ができるようにしてあるっていうのにビビる。Railsアプリだとなかなかできない所業なのでなおさらのこと。
  • SREの文脈だとフロント部分は見ないのかなと思いながらそこら編聞きそびれてしまったのが残念。

関連リンク


ブロックチェーン(DApp)で作る世界を変える分散型ゲームの世界

speakerdeck.com

感想

  • ブロックチェーンとゲームの事例紹介
  • 海岸圏では結構いろいろなゲームが展開されつつあるんだなという気持ち
  • だいたい紹介されたのはイーサイリアムが使われているのが知らなかったので学びだった

関連リンク


各発表の感想(Day2)


全てのエンジニアに知ってもらいたいOSの中身について

感想

  • 最近コンテナ技術などの台頭で遠ざかってきてしまったOSに関しての話
  • OS、kernelの内容をブレイクダウンした結果、終始CPUの話になっていたが基本情報技術者試験ぶりの低レイヤーを見直すばで面白かった
  • 質疑応答のときにあったボツスライドが全然違うアプローチの説明ぽかったので読んでみたい感

関連リンク


高集積コンテナホスティングにおけるボトルネックとその解法

感想

  • 自作コンテナを題材にした、アプリケーションではないレイヤーのトラブルシュート集
  • 普段アプリのレベルでしかパフォーマンスの不備検知って見れていないので、今回紹介されたコマンドとかは普通の開発の現場でも全然使えるものだなという実感
  • なんか全然関係ない前のスライドと合わせて見るとシステムコールってなんじゃい!みたいのも知れるのでちょっと面白かった

関連リンク


ブログサービスのHTTPS化を支えたAWSで作るピタゴラスイッチ

感想

  • 大きい連鎖的に動作するバッチをHTTPSの証明書を題材にして説明
  • 配信部分は大きな物量をさばくためのノウハウが凝縮された感じ
  • StepFunctionなるものがあることを初めて知る、ただこれでワークフロー構築するのなかなかにハードそう

関連リンク


Using Chrome Developer Tools to hack your way into concerts

speakerdeck.com

感想

  • ChromeのDevToolでいろいろできるよをストーリーベースで紹介(実話)
  • JavaScript送信先や送信情報からハックをしていくというのを丁寧に解説されて、Chrome一個でここまでできるんだな…と思ったり。
  • 再送とかそういう機能があったことを知らなかったのでいかに普段使う道具への理解が少ないということを思い知らされた。

関連リンク


Extending Kubernetes with Custom Resources and Operator Frameworks

多分スライドは公開なさそう

感想

  • 表題通り、Kubernetesに関して機能を拡張するための仕組みの説明。
  • 拡張方法に関しての基本的な考え方から説明していって、最後はどんなツールを使うべきかでしめくくられたが、おすすめはKubebuilderとのこと
  • 翻訳セッションかつ普段やってないことだから理解が半分ぐらいだけど仕組みとかはへーという感じではあった

関連リンク


全体を通しての感想

  • 知らなかったことを知る、ということで全然知識のないゲストスピーカー、マイクロサービス、コンテナ技術、その他もろもろを主に見て回ってきました。まとめる上ではすごくアホっぽい感想になっちゃいましたが事実知らなかったことを知ることができたので良かったです。
  • はてなさんがいたからかなんなのかみんなMackerelつかってるんじゃないかと錯覚するレベルでMackerel利用事例が多かった
  • テーマチョイスもなかなかに他のカンファレンスで(いい意味で)雑多だったのが面白かったです。
  • Wifi完備はマジで人権が保たれる感じがあるので最高だと思いました。
  • 2Daysあるのをまとめるの結構体力いる…

勉強会のことをメモっていると実況Tweetができないジレンマ

雑記です(builderscon2018に参加してるのですが、参加したセッションのメモはまた明日まとめて)

自己でまた振り返ってみたいようにに見たスライドと一言感想はブログにしたためているんですが、いかんせんハッシュタグで実況してください!系と相性が悪い。

メモを取らないとあとで感想書くのも結構雑になっちゃうし、とはいえリアルタイムフィードバックもしたいとかとかになるわけです。

どかっとフィードバックという意味ではブログもその役割を果たせるのかなと思いながらも、リアタイで返すほうがスピーカーさんへの還元としてはいいのかなとかも思ったりします。

自分がもっと早くかければいいだけの話なので、両方できるようになりたいな、という願望雑記でした。

関連リンク