タグ

ブックマーク / www.wantedly.com (10)

  • Ruby の型システムの現実的な運用を、先入観にとらわれずに考えてみた | Wantedly Engineer Blog

    こんにちは、Wantedly2023 年サマーインターンに参加した Ran350 です。今回のインターンでは 3 週間 DX (Developer Experience) squadに所属し、「Wantedly における Ruby コードベースへの型システムの導入」をテーマに取り組んでいました。記事では、その仮説検証の過程や調査記録を紹介します。 目次背景目的まとめ論点型システム導入による恩恵型システム導入による弊害型システム導入による恩恵-弊害を評価するために知りたいこと検討方針案【事前調査】過去の型起因のバグ【選択肢の整理と検証】型検査手法【選択肢の整理と検証】RBS 作成手法RBSの追加順序の検討【見積もり】RBS作成コスト【見積もり】型検査による恩恵型システム導入による恩恵-弊害が最適となる運用方針の提案まとめ感想注意議論はまだ検討段階です。Rubyの型システム導入という

    Ruby の型システムの現実的な運用を、先入観にとらわれずに考えてみた | Wantedly Engineer Blog
    xef
    xef 2023/11/14
  • 「YAMLの本来の使い方」を仕様から読み取ってみる | Wantedly Engineer Blog

    YAMLは「便利なJSON」として使われることが多い一方、その複雑性から落とし穴も多く、しばしば批判の対象になります。 なぜYAMLはそこまで複雑なのでしょうか? その背景のひとつは、来のYAMLがJSONとは大きく異なる目的意識で作られているからです。 稿ではYAML specに従う形でYAMLのコンセプトを解説することを目指します。残念ながら、ここに書かれているYAMLの思想は実際には実用されているとは言い難いですし、これらの背景を理解しても「YAMLは複雑だ」という事実がひっくり返ることはないでしょう。それでも、YAMLの複雑さの源泉を体系的に理解し、YAMLとほどほどの距離感で付き合う助けにはなるのではないかと思います。 この記事ではこういう話をしますYAMLはJSONとは独立に、異なる目的で生まれた野心的な仕様であるアンカーやタグなどの強力な構文は、これらの目的を満たすために

    「YAMLの本来の使い方」を仕様から読み取ってみる | Wantedly Engineer Blog
    xef
    xef 2023/09/15
  • JavaScript: 所望のイベントリスナの発火を妨げているイベントリスナを特定する | Wantedly Engineer Blog

    Webアプリケーションでは、DOMの要素にイベントリスナ(イベントハンドラ)を取り付けることで、ユーザーによる様々な操作 (クリックなど) に応じて処理を行うことができます。 しかし、イベントリスナを登録しても、他のイベントリスナとの干渉によって意図した通りに発火しないことがあります。ここではその調査方法を紹介します。 前提知識: イベントバブリングイベントについては筆者の過去記事でも解説しましたが、あらためてここでも説明します。イベントバブリングを理解することが、イベントデバッグの近道だからです。 DOMにおいて、要素はネストすることによって木構造を形成します。ある要素(ターゲット要素)がクリックされるなどしてイベントが発生したとき、イベントはその要素自体だけではなく、その祖先要素にも送られます。これをイベントバブリングといいます。 イベントバブリングは2つの段階に分けられます。 Cap

    JavaScript: 所望のイベントリスナの発火を妨げているイベントリスナを特定する | Wantedly Engineer Blog
  • 発表資料「日付時刻A to Z」を公開しました | Wantedly Engineer Blog

    日付や時刻データの扱いについてまとめたスライド「日付時刻A to Z」を作ったので公開します。 これは何?「日付と時刻」を正しく扱うために、日付/時刻にまつわる諸概念やありがちな間違いを紹介したスライドです。このスライドは大きく3つのパートに分かれています: 第1部「日付編」§1 天体の周期§2 暦§3 紀元と通日第2部「時刻編」§4 時間と分§5 秒§6 相対性理論第3部「コンピューティング編」§7 文字列表現§8 数値表現§9 時刻同期第1部と第2部では、「日付」や「時刻」の概念を定めるのに必要な知識を整理します。第3部ではその日付時刻をコンピューターで扱うときに特有の事情を補足しています。 このスライドが作られた経緯ウォンテッドリー社内では毎週1回お昼の時間に任意で集まって技術の話をする "Tech Lunch" というイベントがあります。テーマは自由で、社内でやったことの紹介やアナ

    発表資料「日付時刻A to Z」を公開しました | Wantedly Engineer Blog
    xef
    xef 2023/04/28
  • 令和最新版: PostgreSQLの安全なSET NOT NULL | Wantedly Engineer Blog

    データベースのスキーマを変更するときは、スキーマの変更作業によってテーブルが長期間ロックされてしまわないように注意が必要です。 2019年にリリースされたPostgreSQL 12.0以降では、NOT NULLを安全に追加するためによりよいベストプラクティスができています。まだ知らない人もいるかもしれないので、ここで紹介します。 何が問題なのか?次のようなDDLコマンドを考えます。 -- posts.moderatedをNULL禁止にする ALTER TABLE posts ALTER COLUMN moderated SET NOT NULL;これはテーブルをACCESS EXCLUSIVEでロックしたままフルテーブルスキャンを行います。その間は他のトランザクションはこのテーブルに関する処理を進行できません。 テーブルが小さければこれで特に問題ありません。しかし、postsがそれなりに大

    令和最新版: PostgreSQLの安全なSET NOT NULL | Wantedly Engineer Blog
  • 計算機に推論できる型、できない型 | Wantedly Engineer Blog

    記事は Wantedly 21新卒 Advent Calendar の17日目の記事です。記事では、いくつかの言語の型システムに実装されている様々な機能を紹介するとともに、それが型推論の実現性に与える影響について述べます。 最近静的型付き言語が盛り上がりを見せ、動的型付き言語の筆頭格だった Ruby もバージョン 3.0 で型解析ツールを導入するまでに至った一因には、きっと型推論の有用性が知られるようになったことが挙げられることでしょう。C言語で、関数ポインタを含んだ複雑なプロトタイプ宣言を書いている時ほどストレスを感じる時間はないし、かと言って Ruby on Rails で書かれたバックエンドを弄っている時に、型チェッカがあれば自明に発見できたであろうエラーでインシデントを起こすほど悲しいことはありません。プログラマが型を書かなくても静的な型チェックの恩恵を受けられる型推論の、何と

    計算機に推論できる型、できない型 | Wantedly Engineer Blog
  • 最小共通祖先を求めるアルゴリズムの形式検証 | Wantedly Engineer Blog

    競技プログラミングには概念を知っておかないと解きようがない、いわゆる覚えゲーのような問題が存在します。典型的な例が 10^9+7 といった素数で割った余りを求めろといったもので、普段業務で日常的に素数で割った余りを求めている人でもなければ、割り算がしたければフェルマーの小定理や拡張ユークリッドの互除法を使えば良いと直ぐには思い付けないのではないでしょうか。 最小共通祖先も覚えゲーで必要な概念の一種と言えます。これは読んで字のごとく、与えられた根付き木の下で2頂点に共通する祖先のうち、最も根から遠い頂点を指す概念で、例えば木の2頂点が与えられて、頂点間の経路について何かを求めろといった問題で威力を発揮することが多いです。これを用いて解ける例を挙げるとすると次の問題でしょうか。 https://atcoder.jp/contests/abc014/tasks/abc014_4 最小共通祖先を求

    最小共通祖先を求めるアルゴリズムの形式検証 | Wantedly Engineer Blog
    xef
    xef 2021/09/06
  • RustでProtocol BuffersからGraphQL BFFを自動生成してみた知見 | Wantedly Engineer Blog

    Wantedlyでインターンをしている遠藤です。インターンのタスクとして「RustでProtocol BuffersからGraphQL BFFを自動生成する」という技術検証を行ったので、その知見を共有したいと思います。 今回の技術検証で作成したツールのソースコードはここにあります: EXPERIMENTAL] Generate GraphQL schema and gateway from Proto definitions. Licensed under either of Apache License, Version 2.0 or MIT license at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in

    RustでProtocol BuffersからGraphQL BFFを自動生成してみた知見 | Wantedly Engineer Blog
    xef
    xef 2021/03/27
  • GoのスライスとRustのスライス | Wantedly Engineer Blog

    こんにちは、WantedlyDX Squadでエンジニアをしている原です。 (DXはDeveloper Experienceの略で、開発者が心地よくプロダクトを作れる環境を作ることを目標に頑張る部門です) 稿は、WANTEDLY TECH BOOK 9 から「GoのスライスとRustのスライス」という章を抜粋し加筆修正を加えたものです。ウォンテッドリーでは WANTEDLY TECH BOOK のうち最新版を除いた電子版を無料で配布しています。ぜひ読んでみてください。 過去の WANTEDLY TECH BOOK を入手する 以下、文です。 GoのスライスとRustのスライスは大枠では似ていますが、スライスの共有に関する振舞いが微妙に異なり、GoRustの設計の違いが垣間見られます。記事ではこの違いを説明します。 配列型とスライス型Go/Rustにおいて「配列」は固定長でスタッ

    GoのスライスとRustのスライス | Wantedly Engineer Blog
  • gRPC Internal - gRPC の設計と内部実装から見えてくる世界 | Wantedly Engineer Blog

    こんにちは、Wantedly の Infrastructure Team で Engineer をしている南(@south37)です。 今日は、WANTEDLY TECH BOOK 6 から「gRPC Internal」という章を抜粋して Blog にします。 「WANTEDLY TECH BOOK 1-7を一挙大公開」でも書いた通り、Wantedly では WANTEDLY TECH BOOK のうち最新版を除いた電子版を無料で配布する事にしました。Wantedly Engineer Blogでも過去記事の内容を順次公開予定であり、この Blog もその一環となっています。 Wantedly における Go 導入にまつわる技術背景 | Wantedly Engineer Blog (記事は Go Conference 2019 Autumn にて無料配布した冊子『WANTEDLY TE

    gRPC Internal - gRPC の設計と内部実装から見えてくる世界 | Wantedly Engineer Blog
    xef
    xef 2020/03/03
  • 1