タグ

ブックマーク / zenn.dev/satoru_takeuchi (11)

  • syncコマンドのデータ同期タイミングとI/Oエラー検出

    syncコマンドはストレージデバイスへのI/Oをキャッシュしているページキャッシュとバッファキャッシュのデータをデバイスに同期(以下「同期」と記載)します。このコマンドについては「syncは同期処理を開始するだけで完了を待たずに終了する」「syncを3回実行すると同期が完了する」などという話が有名です。記事ではLinux環境においてsyncコマンドの終了時に同期がされるのかについて述べます。syncコマンドはGNU coreutilsが提供するものを対象とします。 記事ではsyncコマンドによる同期のタイミングに加えてもう一つ、同期処理の実行中にI/Oエラーが発生した場合に、エラーを検出できるのかについても述べます。 まとめ syncコマンド実行後に同期は完了している。ただし仕様上はそうなると保証されていない。 同期中のディスクI/Oエラーは-fオプションを付ければ検出できる。 調査環

    syncコマンドのデータ同期タイミングとI/Oエラー検出
  • プログラミング言語AWKのここがLOVE

    プログラミング言語AWKが好きなので、この言語のどこが好きかを語ります。主にAWKを知らない、知ってるけど使ったことが無いかた向けの記事ですが、使ったことがあるかたも「こういう思いで使ってる人がいるのか」と遠巻きに眺めてもらえればと考えます。また、後半で最近出たAWKの書籍についても紹介しているので、そちらも役立つかもしれません。 AWKとは AWKは1977年にAT&Tベル研究所で生まれたプログラミング言語です。AT&Tベル研究所といえばUNIXが生まれたところです。著者もUNIXに縁が深い、この世界のレジェンドばかりです。たとえばKernighan先生はプログラミング言語Cをはじめ、たくさんの書籍の著者として有名です。なんだか強そうな言語ではないかという気がしてきました。 AWKは汎用プログラミング言語ですが、「1行1レコードになっているテキストファイルを最小の手間で処理するワンライナ

    プログラミング言語AWKのここがLOVE
  • bashの機能いろいろ

    シェルスクリプトを書いていると「それはbash独自機能だから」「POSIXシェルには無い機能だから」と言われることがよくあります。だいたいは「それみんな使ってるのでPOSIXで標準化されてると思った」といったものなのですが、記事では便利なものから「え、それやるくらいならPythonでよくない?」まで、bashの機能を紹介しようと思います。 for文でC言語っぽくループを回す シェルスクリプトでfor文といえばfor i in $(seq 10)とかをよく使いますが、bashだと以下のように書けます。

    bashの機能いろいろ
  • オープンソースはオープンな開発を意味しない

    「あるソフトウェアがオープンソースである、OSSである」とみなせる条件は、そのソフトウェアがOpen Source Initiative(OSI)が定義するオープンソースなライセンスの下に頒布されていることです。それ以外の条件はありません。この「それ以外の条件はありません」のところが誤解されやすいので、どのように誤解されるのか、および、実際のところどうなのかということについて書きます。 OSSの代表格といえば、サーバ、スーパーコンピュータ、組み込み機器など様々な用途で世界中で使われているOSカーネルであるLinuxでしょう。Linuxには以下のような特徴があります。 a. オープンソースライセンスであるGPL v2の下に頒布されている b. 世界中の技術者たちが誰でもオープンに開発されていて、その開発過程もメーリングリストなどによってオープンになっている これは事実なのですが、aに加えてb

    オープンソースはオープンな開発を意味しない
  • Linuxのプロセスのコマンドライン引数についていろいろ

    2022/10/16 以下ご指摘をもとに内容を修正および追記 https://zenn.dev/link/comments/463223a4de9ec2 はじめに Linux上でコマンドを実行したときのコマンドライン引数についてつらつら書きたくなったので書きます。 プロセスのコマンドライン引数とは、たとえばfoo bar bazというコマンドを実行したら、通常はコマンドライン引数はfoo、bar、およびbazになります。直観的には引数は”bar”と"baz"だけのようにおもえるかもしれませんが、とにかくこういう定義です。 コマンドライン引数はプログラムの中からはCやC++ではmain関数のargv配列引数から参照できます。上述の例であればargv[0]には実行ファイル名が入ります。それ以降の"bar"はargv[1]に、"baz"はargv[2]に入っています。argvに相当する変数はシェ

    Linuxのプロセスのコマンドライン引数についていろいろ
  • 「バグを意図的にバグのまま残す」という選択肢がある

    はじめに gcc v12.1において、C++の正規表現ライブラリstd::regexに、正規表現のバリデーションを改善するパッチ(以下"改善パッチ"と表記)が取り込まれました。改善パッチによって、これまではバリデーションにひっかからなかった不正な正規表現文字列が"正しく"不正なものと認識されて例外が発生するようになりました。 これだけ聞けばいいことだけのように思えるかもしれませんが、実はそうでもなかったりします。経験豊富なかたであれば見た瞬間ゾッとしたかもしれません。記事では、この一見問題なさそうな改善パッチによって発生しうる問題、および、その具体的例について紹介するとともに、この手のパッチを当てるかどうかは難しい判断になるという知見を共有します。 結論 改善パッチによって発生する問題 発生条件 gcc v12.1以降、あるいは改善パッチをバックポートされた任意のバージョンを使ってC++

    「バグを意図的にバグのまま残す」という選択肢がある
  • オープンソースソフトウェアいろいろ

    オープンソースソフトウェア(以下OSS)にはいろんなものがあることについて書きます。さんざ語りつくされてきたことですけど、自分でもう一度整理したくなったので書きます。 オープンソースなソフトウェアとそうでないものの区別 オープンソースは「俺がオープンソースと言ったらオープンソース」とか「人によっていろいろな考え方があるよね」とかではなく、明確な定義があります。 以下Open Source Initiativeによる定義です。 八田さんによる邦訳。 これ以降は邦訳のほうを使って説明します。 OSSについてのよくある勘違いに「ソースが公開されていればOSSでしょ」というものがありますです。これはたとえば「3. 派生ソフトウェア」を見れば、違っていることがわかります。 ライセンスは、ソフトウェアの変更と派生ソフトウェアの作成、並びに派生ソフトウェアを元のソフトウェアと同じライセンスの下で頒布する

    オープンソースソフトウェアいろいろ
  • Kubernetesのつらいところ

    はじめに 記事はKubernetesの嬉しいところではなくてつらいところについて書きます。Kubernetesを少しは触ったことがあって基礎的な用語がわかるくらいの人であれば読めると思います。 Kubernetesのよく言われる売り文句は「Kubernetesを使うと自分でぽちぽちコマンドを叩かなくても、あるべき状態を宣言しておけば後はKubernetesが勝手にその状態になるように保ってくれるのですごく運用が楽」でしょう。これはその通りで自分もKubernetesのおかげで楽をしているなあと感じることがかなりあります。 しかし、何年も実際に使い込んできた経験からいうと、前述の売り文句には「大体の場合は」という但し書きが付きます。では「大体は」じゃないときにどうなるかというと、つらくなります。ここからはどんなときにどんなふうにつらいのかを簡単な例を使って説明します。 冗長度を自動回復して

    Kubernetesのつらいところ
  • プログラマに必要になっているプログラミング以外の技術の一例

    はじめに よくソフトウェア技術者にはプログラミング以外にもたくさんの技術が必要といわれます。では具体的に何が必要なのか…というと、実のところ個々人が置かれた状況によって全然異なるので何とも言えません。ただこれだけだと実務経験が無い人には全然ピンと来ないと思うので、現役職業プログラマである私が今の仕事で必要になっている能力について書きます。 私が現在なにを作っているか 私がやっていることはオンプレのインフラ基盤であるKubernetesクラスタの開発、およびその上で動くストレージ基盤であるRook/Cephクラスタの開発です。簡単に言ってしまえばこれらを作るのが現在所属しているプロジェクトのミッションです。 その中でもわたしのわかりやすい仕事はRookの開発です。上記インフラ基盤に必要な機能の開発、バグ修正が中心です。Rookはメンテナとして開発に参加しているので、それ以外にもコードレビュー

    プログラマに必要になっているプログラミング以外の技術の一例
  • ソフトウェア開発者人生に影響を与えてきた本

    はじめに なんとなく書きたくなったので書きます。詳しいレビューなどは書きません。書いても一言程度。実は昔似たようなエントリを書いたことがあるんですが、そちらは初心者+αくらいの人に勧めるについてのもので、こちらはあくまで私に刺さったです。 達人プログラマー ソフトウェア技術者としての考え方のいくつかはこのの影響によって身に着けました。この手のは抽象的でスカスカなことが多いのですが、このは著者の文書作成技術が高いこと、例が具体的なこともあって、ずいぶん納得できることが多かったです。わたしが読んだのは第一版ですが、あえて第二版へのリンクを張っています。 プログラミング作法 よいプログラムをどう組めばいいかということを学べました。いろいろな言語を題材にしていますが、どういうものを使っていても役に立つ実践的なことが書いています。 珠玉のプログラミング アルゴリズムについて、具体的にどう役

    ソフトウェア開発者人生に影響を与えてきた本
  • 自作OSとかLinuxカーネルについて役立ちそうな本

    はじめに なんらかの理由によってOSやOSカーネルに興味を持つ人は多々います。しかし、その次のステップとしてどんなを読めばいいんだろうと思っている人はこれまたいっぱいいます。そこで、長年Linuxカーネルにかかわってきた筆者がこれまでに読んでよかったと思うものについてここの列挙しました。紹介するのはだけであって、記事は省いています。 OSそのものに興味を持った人は、その後に興味の方向が次のような二つに分かれることが多いと筆者は考えています。 オレオレOSを作りたい 既存のOSを改造したい この仮説をもとに、それぞれについて筆者がかつて真面目に読んだの中から「自作OS」および「Linuxカーネル」というキーワードでよかったものを挙げておきます。Linux以外の既存OSについては語れるほどの知識はないので書いてません。 筆者について の良し悪しは人によってさまざまなので、筆者がどういう

    自作OSとかLinuxカーネルについて役立ちそうな本
  • 1