タグ

ブックマーク / kumagi.hatenablog.com (9)

  • きれいなコードを書けという話について - Software Transactional Memo

    前回のブログから90日以上経ってしまったので広告が載ってしまったから短文でもアウトプットしておく。 プログラマとして仕事をしているとコードと向き合っている時間の9割以上は既存のコードを読んでいる、だから読みやすさは重要である、という言説は耳にタコができるほど誰もが言っている。 仕事で書かれるコードが誰のレビューも通ること無くマージされている現場は凄惨だが、自分より明らかに経験を積んだ人たちが何度もレビューを重ねたコードが読みやすいかというとそうとは限らない。良いコードが守るべきルールをすべて守っていても不可解なコードはあるし、どんなに読みやすいコードでも数千行の規模になってくるとやはり脳内からこぼれて一度に覚えておける範囲からはみ出る。 変数名や関数名をわかりやすくするとか不必要な技巧を凝らさないとかわかりやすい設計にするとか主観的な事を偉そうに語るは山ほどあり、それらのを崇める事は悪

    きれいなコードを書けという話について - Software Transactional Memo
    takashabe
    takashabe 2023/07/14
  • Value Objectについて整理しよう - Software Transactional Memo

    Value Objectとは何であるか? マーチン・ファウラーのPatterns of Enterprise Application Architecture(PofEAA)やエヴァンス・エリックのDomain Driven Design: Tackling Complexity in the Heart of Software(DDD)が原典であるが、PofEAAではこう切り出している。 When programming, I often find it's useful to represent things as a compound. プログラミング時は物をcompound(合成物)として表現すると便利なことがしばしばある。 例えば2次元空間上での座標のように複数のメンバ(属性)を持つ物は便利である、と。しかしそれらを比較する方法は一意ではない、そこで Objects that a

    Value Objectについて整理しよう - Software Transactional Memo
    takashabe
    takashabe 2022/05/15
  • Software Transactional Memo

    この記事は pyspa advent calendar 2023の11日目の記事です。 godboltをご存知だろうか。 godbolt.org ブラウザから誰でもアクセスできる無料サービスでコンパイラの挙動について学ぶ事ができる。 例えば簡単に「渡された数Nに対し1+2+....+Nを返す関数sum」を例にすると こんな感じにコンパイル結果のアセンブリを表示してくれる。 アセンブリはマウスカーソルを置くとそれが元のコードのどの場所に対応したものなのかを逐一ハイライト表示してくれる。この機能を実現するために必要な労力は並では無いと思うが詳細はわからない。アセンブリ側も複数色あるのは元のコードの1行が同じ背景色のブロックになった事を表している。 これがすごいのはコンパイラの選択肢の豊富さである。gccはもちろんのことclang, zig c++, msvc, nvc++(なにそれ?), el

    Software Transactional Memo
    takashabe
    takashabe 2021/08/06
  • ソフトウェアエンジニア、建売を買う - Software Transactional Memo

    買った戸建てに付けた表札、住所はぼかした プロローグ 新型コロナが世間を騒がせ始めて以来ずっと在宅勤務をしている。 転職に伴って会社近くに引っ越したので通勤のドアtoドアで30分台を叩き出していた好立地はその活躍の機会をすっかり失った一方で、妥協した40平米の部屋の狭さと1LDK+Sの間取りが巣ごもり子育て核家族を襲った。 外で遊び足りない娘は泣き、広がった活動範囲で家中の物を無秩序に引っ掻き回すので必然的に触られたくないものは高いところに置くことになり、立体的に活用される事になった1LDKの空間は生活の難度を高めジワジワと真綿で首を締めるような状況が続いた。 住んでいたマンションは駅に近いのは良いが作りは古く、冬には窓枠が結露しカビが発生する。窓から降りる冷気はそのまま壁や床にすら結露を起こし室内はカビに見舞われた。それとの因果関係は不明だが冬場の慢性的な体調不良が家庭内の治安を更に悪化

    ソフトウェアエンジニア、建売を買う - Software Transactional Memo
    takashabe
    takashabe 2021/08/06
  • こうしてGoogleに入社した(kumagi編) - Software Transactional Memo

    Googleオフィスの窓からの眺めをGoogle Photoが自動加工したもの TL;DR AtCoderやろうぜ Googleの(僕から見て)偉い人が立て続けにブログを書いており ctrl-x-s.blog hoge.blog ここ数件の僕のブログへの反響を読んでも「Googlerだから特別」みたいな意見が散見され、入社へのハードルが変に高く見られてしまっている気がするので、僕がGoogleに入社する準備として取り組んでいた事とそのレベルを紹介する。程度の低さに安心して欲しい。 英語 英語の論文は興味の赴くままに読んでいたため読むことに関してはあまり苦手意識は無いものの、絶対的な英語力に関して言うとTOEIC500点というスコアが端的に表している。これがどれぐらいかというと、得意分野から外れると長文を読む速度と精度がガタ落ちし、リスニングも結構な単語を聞き落とし、文脈からの推測と辛うじて

    こうしてGoogleに入社した(kumagi編) - Software Transactional Memo
    takashabe
    takashabe 2019/03/26
  • 分散キューという名の苦しみ - Software Transactional Memo

    TL;DR 分散システムにおいてキューを導入する場合、当にキューが必要なのか再考すべき。そこが地獄の入り口だから。 システムの抽象 コンピュータの世界は、来は0と1の信号の羅列が飛び交う無機質なものである。でも人類は信号だけですべてを語らず、様々な喩えを定義してきた。それはデスクトップ・ウィンドウ・マウスカーソルといったグラフィカルな表現に留まらず、パケットやカプセル化といった用語にロック・キュー・リスト・木などのアルゴリズムやデータ構造の世界にも自然に溶け込んでいる。これらはすべて人間の理解を助けるための喩え話に過ぎず、この喩えこそが人間のより直感的な理解をもたらす一方で、発想の制約を生み出してきた。 人間が大きなシステムを作るときも何らかの喩えを用いてシステム全体を整理する。アーキテクチャの「ポンチ絵」を描いて情報共有をするのは企業に勤めていれば経験した人も多いだろう。パワーポイン

    分散キューという名の苦しみ - Software Transactional Memo
  • NTTによるブロッキング論点の整理 - Software Transactional Memo

    NTTがブロッキングを発表してから様々な反響があったのでざっと眺めて反応を主観でカテゴライズしてみる。 TL;DR; NTTも政府もしっかりしろ。あと違法行為はやっぱりダメだ。 今回の措置に賛成だよ派 困ってる人がいるからしょうがないよ派 プロバイダ責任制限法を越えるから仕方ないよ派 やまもといちろうが気にわないよ派 他の国ではやってるよ派 反対派は漫画村ユーザだよ派 ブロッキングは合法だよ派(宛先は通信の秘密に当たらないよ派) 政府がそう言ったらしいよ派 緊急避難が適用されるから合法だよ派(児童ポルノと同じだよ派) なるべく速やかに立法すべきだよ派(結果整合派) 違法だからどうした派(アナーキー派) 今回の措置に反対だよ派 当に緊急回避が成り立つなら賛成だよ派(漫画村もうないじゃん派) 立法の後なら賛成だよ派 さっさと立法しろ派(法治重視派) 憲法21条も一緒に修正しろ派(整合性重視

    NTTによるブロッキング論点の整理 - Software Transactional Memo
  • 分散ロックという名の過ち - Software Transactional Memo

     TL;DR; 「分散ロック」が分散システムの設計図に登場した時 だいたいその設計は間違っていて当に必要なものはトランザクションだ 並行システムを実装する際にロックを用いるのはとても自然なことだ。 僕も普段はロックフリー系のアルゴリズムに詳しいと言われがちだが知識量でいったら実はロック系の方が多く蓄えているかも知れない。 分散システムは並行システムであることが多いので、その中にロックが登場するのはとても自然な発想である。 よく「分散」「並行」「並列」の言葉の定義がごっちゃになっているケースがあり、この記事の主題にしたいわけではないので深くは言及しないが、分散システムは環境などの要因で突如として参加者が音信不通になったり復活したりする点で並行システムと大きく異なる。 並行システムと同じノリで分散システムを設計しようとした際に陥る頻出の過ちが「分散ロック」である。そのアイデアはとても簡単で

    分散ロックという名の過ち - Software Transactional Memo
  • 『夢のデータベース?「Cloud Spanner」の実力は?』について - Software Transactional Memo

    こんな記事が目に入った。 www.itmedia.co.jp 大雑把に完全に間違ったことを言っているわけでもないが、読んでいくといろいろ鼻につくところがあり、どのあたりから間違っているのかと自分に問いただすのは現時点での自分の知識を棚卸しするためにも有用かも知れないと思ったので一言一句漏らさず思うところを書いていこうと思う。 中には枝葉末節な難癖もあるので全部を真に受けない感じで読んで欲しい。 Cloud Spannerの特徴は、これまでリレーショナルデータベースで不可能とされていた「トランザクション処理の大規模分散処理」を実現したところにあります。 単一のトランザクション処理を分散して実行しているかというと、Spannerはトランザクションごとに担当のトランザクションマネージャがそのトランザクション処理全体を取り仕切って行う仕組みになっている。なので「トランザクション処理の大規模分散処理

    『夢のデータベース?「Cloud Spanner」の実力は?』について - Software Transactional Memo
  • 1