タグ

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

  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
    gfx
    gfx 2023/07/30
  • キャリアハックの奇行 - Software Transactional Memo

    エンジニアの奇行 嚢中の錐という言葉がある。有能な人物は自ずと傑出していくという意味だが、有能さとは例えば学歴の高さとは一致しない。 たとえMIT卒であろうとも大成するとは限らないし、ましてや入試の点数などで見れる人間の側面は限定的である。 企業などで採用する側からしてみたら当然ながら採用後の活躍を期待して雇用するのであり、入社をゴールとしてそれ以降働かなくなる人は望ましくないし、学歴や入試の点数によってそういう人かどうか判定する事はできない。 活躍という観点で言うと長いキャリアにおいてより重要となるのはキャリア開始時での能力の高さよりも、険しく長い道のりを自己メンテナンスしながら歩み続けられる根気の強さが重要とされている。その根気の源泉は執着だったり崇拝だったり妄信だったりトラウマだったり原体験だったり人によって様々だが、ここではひっくるめて「やる気」と簡略化して呼ぶことにする。 さて「

    キャリアハックの奇行 - Software Transactional Memo
    gfx
    gfx 2023/07/15
    "とにかく好きを貫いて非合理な行動を重ねまくった人に脚光が当たったりする、なんとも夢のある話ではないか"
  • きれいなコードを書けという話について - Software Transactional Memo

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

    きれいなコードを書けという話について - Software Transactional Memo
    gfx
    gfx 2023/07/14
  • 正しいクラウドはある意味で遅い - Software Transactional Memo

    TL;DR 正しく設計するとキャパシティは常にカツカツになる これはpyspaアドベントカレンダーの8日目の記事です。前日はShibukawaさんです。 世はクラウド時代、ソフトウェアはひとたび作られたら何億回実行されても摩耗するものではないので、どんな間抜けなロジックであろうと動く以上は別のどこかで瑕疵が出てくるまで使い倒されるのは日常茶飯事である。 サービスを負荷の前提の上に定義する クラウドより前の時代においてサービスを支えるマシンは「ロードアベレージが1.0を超えてなければとりあえずOK、超えたらマシンを増やして負荷を分散する」というノリのベストプラクティスがよく言われていたがそれはサーバ資源の確保にそれなりに時間がかかる時代の常識であって、クラウド時代でサーバは分単位で確保できるようになった。 クラウドの利点としてその即時的なスケーラビリティが常套句として使われて久しいが、これは

    正しいクラウドはある意味で遅い - Software Transactional Memo
    gfx
    gfx 2022/12/30
    "プロダクション環境のCPU使用率は常に100%であって、時々自分にも微かなCPU割当がスケジュールされているに過ぎないつもりで設計される必要がある"
  • 分散プログラミングモデルおよびデザインパターンの考察 その4 - Software Transactional Memo

    引き続き分散システムのデザインパターンの話をしていく。例によって適切な名前を見つけられなかった場合にはその場で適当に名づけているので、ここに書いてある名称が技術レベルでの正式名称だとは思わず、正式名称を見つけたらそっとコメント欄で教えてください。 Application Level Ack リクエストを受け取った際にAcknowledgment(Ack) を返却するのは重要であるというのは異論の余地はない。だが、どのレベルで返却すべきかというのはデザインスペースの一部である。 ご存知の通り、TCPはそもそもSYN → SYN-ACK →ACKの3方向ハンドシェイクを行い、それぞれの通信ペイロードにシーケンス番号を付けて送達を確認している。SO_LINGERを使えばclose時に未送信パケットが残っていればそれを送り終わるまでclose()をブロッキングする事もできる。TCPのトランスポート

    gfx
    gfx 2022/10/27
  • NFTとメタバースについて思うこと - Software Transactional Memo

    TL;DR NFT投機界隈のデタラメに気をつけましょう ブロックチェーンはデータに価値をもたらすのか もたらさない。 NFT界隈がよく言う「希少性」自体には何の価値もない、部屋の隅に落ちている埃だって厳密には世界に全く同じ物は存在しないしデジタルデータのように完璧かつ無制限に複製することもできない、それでも価値はない。 ブロックチェーンのwalletを作成したら既にそのwalletは自分の唯一無二な所有物となるが作成時点でwallet自体の価値は空である。希少や有限であること自体を根拠に出資を迫ってきたらそれは詐欺である。 希少or有限な物にお金を払うモチベーションがあるとするならばそれは実需を除くとそういう信仰があるからに他ならない。伏見稲荷大社に21万円払えば5号の鳥居が奉納できるがやってる事はそれと変わらない。伏見稲荷大社に置ける鳥居の数は当然有限だが、有限であることだけを理由に奉納

    NFTとメタバースについて思うこと - Software Transactional Memo
    gfx
    gfx 2022/02/12
  • 書評:並行プログラミング入門 - Software Transactional Memo

    TL;DR 並行処理を実装する人のこれからのスタンダードになる一冊。買い。 並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ 作者:高野 祐輝 オライリージャパン Amazon 買ったら思いの外早く届いたのでパラパラと読み始めたら一気に読み終えてしまった。 総評 敢えて雑な喩え方をするなら The Art of Multiprocessor Programming (通称TAoMP) の内容を薄めてRustやアセンブラや計算モデルを足したようなだった。 日語の書籍としてはかなり珍しくWait-Free, Lock-Free, Obstruction-Freeの違いなどを適切に論じており、TTAS Lock, MCS Lock, TL2といった日語では希少な情報が書かれているレアなである。これらに付いて論じている日語のは知る限り (TAoMPと昔僕

    書評:並行プログラミング入門 - Software Transactional Memo
    gfx
    gfx 2021/08/22
    "Wait-Free, Lock-Free, Obstruction-Freeの違いなどを適切に論じており、TTAS Lock, MCS Lock, TL2といった日本語では希少な情報が書かれているレアな本である"
  • ソフトウェアエンジニア、建売を買う - Software Transactional Memo

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

    ソフトウェアエンジニア、建売を買う - Software Transactional Memo
    gfx
    gfx 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
    gfx
    gfx 2019/03/26
  • Googleに転職していきなり3ヶ月の育休を貰った - Software Transactional Memo

    TL;DR アフィ記事です 転職してからすっかりSNSで音沙汰がなくなったなkumagiと一部の界隈で噂されているようですが、twitterやFacebookにはたまに書いていたように娘が産まれました。 Googleでは子供が生まれた時に育休を取ることができる。 単なる育児休業は育児・介護休業法に定められた労働者の権利であるけれど、Googleではそれに加えて3ヶ月間フルに給料が支払われる有給休暇が付与される*1。これに加えて雇用保険から給付金をもらう育休を取っても良いとされているが、ソフトウェアエンジニア的な意味で遅れを取り過ぎるのも憚られたのでまずは3ヶ月の有給休暇をありがたく頂戴することにした。 授乳について 3ヶ月までの赤ちゃんは昼夜問わず3時間おきに母乳やミルクを欲しがる。大抵の成人は3時間おきに母乳やミルクを与え続けると精神的にだいぶ参ってくるという知見が広く共有されていたので

    Googleに転職していきなり3ヶ月の育休を貰った - Software Transactional Memo
    gfx
    gfx 2019/02/21
    子育て組として参考になる。
  • 6年勤めたNTTを退職しました - Software Transactional Memo

    最終退社時の自分の机 2012年に修士卒からの新卒でNTT研究所に入り、6年間お世話になりました。 研究所では同期や先輩や後輩や上司に恵まれ、存分に書籍や論文を読んで勉強して力を蓄えたり、対外的な発表の場にも恵まれ外ではできないような体験をすることができました。 ありがとうございました。 入社当時に作られたtogetterを見返すと togetter.com togetter.com まるで昨日のように感じられる。 NTT社内で僕が何をやっていたかについては言える物は軒並みアウトプットされているのでわざわざここでは触れない。 NTT研究所について NTT研究所を客観的に見た時にどうかを書いていく とにかく人に恵まれている。採用の倍率が高いのもあって潤沢な学生エントリーからよりすぐりのエリートが謎の力でポテンシャルを見極められて採用されている。同期を見てひと目ですごい奴も居れば、一見してわか

    6年勤めたNTTを退職しました - Software Transactional Memo
    gfx
    gfx 2018/11/26
    6年もいたんですねー。お疲れ様でした。
  • 分散キューという名の苦しみ - Software Transactional Memo

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

    分散キューという名の苦しみ - Software Transactional Memo
    gfx
    gfx 2018/06/18
    "Exactly Onceな実行というのは何か特定のミドルウェアを使えば魔法のようにいつのまにか解決されるものではなく、アプリ層まで深く食い込んで設計されて初めてなし得る物である"
  • NTTによるブロッキングの何が許せないのか - Software Transactional Memo

    注意: この記事は私の所属する組織の意思も意見も絶対に断固として欠片すらも表明する事を意図して書いていません TL;DR;今回のサイトブロッキングは私見ではダメだと思ってるけど、国の言うロジックは一応わかるし勘違いベースで応援するのも叩くのも止めて欲しい 前提知識 まず大前提として、日には憲法というものがあり、その21条にはこのように明記されている。 憲法第二十一条 集会、結社及び言論、出版その他一切の表現の自由は、これを保障する。 検閲は、これをしてはならない。通信の秘密は、これを侵してはならない。 憲法に沿った国の運営をするためここから派生して制定されている法律のうち、今回の件に関係が深いのは電気通信事業法である。 電気通信事業法 (検閲の禁止)第三条電気通信事業者の取扱中に係る通信は、検閲してはならない。 (秘密の保護)第四条電気通信事業者の取扱中に係る通信の秘密は、侵してはならな

    gfx
    gfx 2018/04/24
  • 分散ロックという名の過ち - Software Transactional Memo

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

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

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

    『夢のデータベース?「Cloud Spanner」の実力は?』について - Software Transactional Memo
    gfx
    gfx 2017/07/02
  • 分散プログラミングモデルおよびデザインパターンの考察 その1 - Software Transactional Memo

    Yahoo技術者が書いたブログ techblog.yahoo.co.jp が悪い方向に期待を裏切ってくれたのに対し、 @kuenishi さんがまとまった文章 kuenishi.hatenadiary.jp を書いていたので、僕も2番煎じぐらいでまとまった文章を書く。 始めに断っておくと、分散システムというのはまだまだ事例を集めていくフェーズを抜けきっておらず、体系立った大統一理論的な分類法は確立していない。ここに書くのは、これまでの分散システム事例やこれからの分散システム事例を分類していく際にその性質をカテゴライズする一助となれば良いな、程度の文章なのであまり真に受けないで欲しい。 なぜYahooの記事が期待はずれなのか 人によって意見はあるとは思うが、個人的に感じたのは以下の3つ。 分散システムのデザインパターンと銘打っておきながら並列・並行システムの分野の話からクラウド環境へとこじ

    分散プログラミングモデルおよびデザインパターンの考察 その1 - Software Transactional Memo
    gfx
    gfx 2016/02/21
  • 1