ブックマーク / dsas.blog.klab.org (13)

  • 第一回 KLab Expert Camp「TCP/IPプロトコルスタック自作開発」を開催しました : DSAS開発者の部屋

    KLab Expert Camp というイベントを8/26~29の4日間で開催しました。 KLab Expert Camp とは KLab Expert Camp は、技術的に深いテーマに取り組んでいる学生の発掘・育成を目的とした KLab の新しい取り組みです。 記念すべき第1回のテーマは「TCP/IPプロトコルスタック自作開発」で、以下のような触れ込みで開催しました。 「OSを作ってみたい」「コンパイラを作ってみたい」と思う人が多いように「プロトコルスタックを作ってみたい」と思う人も多いのではないでしょうか。今回の KLab Expert Camp のテーマは、そんな皆さんにピッタリの「TCP/IPプロトコルスタック自作開発」です。担当講師が開発している教育用のプロトコルスタック(https://github.com/pandax381/microps)を教材に、Ethernetフレー

    第一回 KLab Expert Camp「TCP/IPプロトコルスタック自作開発」を開催しました : DSAS開発者の部屋
    s1061123
    s1061123 2019/09/04
  • Go のライトバリアに関するバグを修正した話 : DSAS開発者の部屋

    Goのランタイムのバグを踏んで解決しました。解決までの過程を記事にします。 同じようなランタイムのバグを踏んで、小さい再現コードを作れない場合の参考にしてください。 自分のプログラムを疑う あるSlackチャンネルで Go で書かれたサーバーのクラッシュが話題になっているのを見つけました。その時に共有してもらったトレースバックです。 runtime: pointer 0xc007b8af97 to unused region of span span.base()=0xc004000000 span.limit=0xc004002000 span.state=1 fatal error: found bad pointer in Go heap (incorrect use of unsafe or cgo?) runtime stack: runtime.throw(0xc046ca,

    Go のライトバリアに関するバグを修正した話 : DSAS開発者の部屋
    s1061123
    s1061123 2018/12/27
  • Serfの障害検知とメンバシップ管理について : DSAS開発者の部屋

    はじめに KLabさんの協力会社として一緒にお仕事をさせて頂いておりますクラスターコンピューティングと申します。今回Serfという面白そうなツールがあるので試してみました。 システムの高可用性化を目的にクラスタを構成することはよく行われていると思います。可用性を維持するために大切なことはクラスタに属するサーバの状態を常に把握しておくことです。そしてサーバの状態に変化が生じた場合ーたとえばサーバが不意に停止した場合ーそれに応じて適切な動作ができるようにする必要があります。システムのサービスはこの土台となるサーバ管理の仕組みの上に構築されます。 Serfはこのクラスタの土台となるサーバの管理の部分をサポートしてくれるツールです。Serfはゴシッププロトコルを利用したP2P型のクラスタを構成します。これによりシンプルな作りでかつ信頼性やスケーラビリティに優れ、そしてネットワーク的な効率も良い管理

    Serfの障害検知とメンバシップ管理について : DSAS開発者の部屋
    s1061123
    s1061123 2016/09/30
  • ラズパイで作るネットワークエミュレータ(後編) : DSAS開発者の部屋

    前編で紹介したネットワークエミュレータ「PackDrop」のプロトタイプですが、雑に作ったわりに評判が良く予想外に需要が出てきてしまったので、ちゃんと業務での利用に耐えられる「量産型」を製作しました。 前回の記事がややウケで気を良くしています。@pandax381です。 機能追加 プロトタイプを作成してから暫くのあいだ試験運用してみたのですが、実際に使った方々からいつくか要望を受けました。 パケットをバーストロスさせるためのスイッチが欲しい 一定時間、連続的にパケットが消失するバーストロスを再現するときに「パケロスのボリュームを100%まで回してまた戻す」という作業が面倒なので、専用のスイッチを設けて欲しい。 稼働状況がわかるようにLEDをつけて欲しい 試験用のパラメータを設定したまま元に戻すのを忘れてしまい「あれ、なんか今日ネット遅くね?」という事案が多発したので、遅延・パケロスが設定さ

    ラズパイで作るネットワークエミュレータ(後編) : DSAS開発者の部屋
    s1061123
    s1061123 2016/04/23
  • ラズパイで作るネットワークエミュレータ(前編) : DSAS開発者の部屋

    ネットワークが絡んだ通信プログラムを開発していると、テストのために遅延やパケロスを意図的に発生させたくなることがあります。いまどきは IDE にネットワークエミュレーション機能が組み込まれていたり、仮想環境で容易に再現できたりもしますが、箱物のネットワークエミュレータがあるとネットワークの構成を気にせずカンタンに設置できるのですごく便利だったりします。世の中にはそういった製品が沢山あるので安価なものを買ってもいいのですが、新たにラズパイが届いたばかりだったので、これを使って超小型のネットワークエミュレータを自作してみました。前編と後編の二回に分けて紹介します。 最近、社内で「ラズパイおじさん」と呼ばれるようになりました。@pandax381 です。 ラズパイ + Linux = ネットワークエミュレータ 「ネットワークエミュレータを自作」と言うとなんだか凄そうな感じがしますが、実はものすご

    ラズパイで作るネットワークエミュレータ(前編) : DSAS開発者の部屋
    s1061123
    s1061123 2016/04/06
  • 「入院者と外部とのコミュニケーション」への IoT の応用 : DSAS開発者の部屋

    フェイススケールのこと 先日身内が入院した折にこういう顔の絵の入ったクリアファイルを病棟で見かけました。 フェイススケール - ja.wikipedia.org フェイススケール(英: Face scale)とは、現在」の痛みを「にっこり笑った顔」から普通の顔、 そして「しかめっ面」そして「泣き顔」までの様々な段階の顔を用意して、神経痛などの痛みを 訴えている患者にどのぐらい痛むのかを示してもらうことで、その痛み度を客観的に知るために、 ペインクリニック・麻酔科などで用いられる用具・用紙のことである。 看護師さんがベッドに横になったままのご高齢者にこれを見せながら大きな明るい声で尋ねている様子が印象に残りました。たった一枚の印刷物ですが、自由に話したり体を動かしたりすることのむずかしい状態の入院者とのやりとりには特に有用なツールであることが想像されます。 入院者と外部とのコミュニケーション

    「入院者と外部とのコミュニケーション」への IoT の応用 : DSAS開発者の部屋
    s1061123
    s1061123 2016/03/11
  • VirtualBoxのファイルシステムを10倍速くする ~ find編 ~ : DSAS開発者の部屋

    もう、あって当たり前というところまで浸透してきた仮想環境、みなさまは何をお使いでしょうか? 私の周辺ではVirtualBoxがよく使われています。 典型的な使い方としては、 以下のような感じです。 ホストOSには、mac/windowsをつかう ゲストOSには、Linuxを使う 共有フォルダを使って、ホストとゲストでファイルを共有する その中でも地味に重要なのが共有フォルダ。 共有フォルダとは、ホストOSのファイルシステムをゲストOSからマウントするための、VirtualBoxが提供している仕組みです。 しかし便利な反面、ファイルアクセスが非常に遅いという声をよく聞きます。 findが終わらないとか、git statusが遅すぎるとか... この問題への対策を探してみると、下記のような物がみつかります。 vboxsfでなくNFSなど別のファイルシステムを使う VirtulaboxではなくV

    VirtualBoxのファイルシステムを10倍速くする ~ find編 ~ : DSAS開発者の部屋
    s1061123
    s1061123 2015/10/09
  • Goのdatabase/sql.Stmtのスケーラビリティを改善しました : DSAS開発者の部屋

    先日、 Goに初めて私のパッチが取り込まれ 、コントリビュータに仲間入りしました。 このパッチは、 database/sql.Stmt をヘビーに使った時に性能がだいたい16コア以上のコア数にスケールしないという問題を解決するものです。 こういった問題をどうやって調査するのかと、Goにパッチが取り込まれるまでの手順を紹介します。 背景 私は TechEmpower の FrameworkBenchmarks という、いろんな言語/フレームワークで同一のアプリを作ってベンチマークするというプロジェクトで、主にPython関連のメンテナをしています。 Goにも興味があるので、Ginというフレームワークを追加したりコードレビューに参加したりしています。 2014-05-01 に行われた前回のベンチマーク Round 9 では、 PEAK Hosting が実行環境に加わりました。この環境は、デュ

    Goのdatabase/sql.Stmtのスケーラビリティを改善しました : DSAS開発者の部屋
    s1061123
    s1061123 2015/01/27
  • Mac OSX で vmnet が BIOCSETIF できなくてハマった話し : DSAS開発者の部屋

    1年くらいブログ記事書くのをサボっていたので、ちょっとマニアックなネタを投下します。ISUCON3 は予選で敗退してしまった @pandax381 です。 vmnet が BIOCSETIF できない! Mac OSX(marvericks)で VMware Fusion 6 を使っているのですが、ホスト側の仮想インタフェース(vmnetX)のパケットがキャプチャできないという問題に遭遇しました。具体的には、パケットをキャプチャするためにBPFデバイスをオープンして、vmnetX を ioctl(BIOCSETIF) でアタッチするの処理で失敗してしまうのです。一見普通のEthernetデバイスに見えるのに、どうしてBPFでパケットをキャプチャできないのか調べてみました。 tcpdump で試してみる 僕の作っていたプログラムがイケてないのかもしれないので、まずは tcpdump を使って

    Mac OSX で vmnet が BIOCSETIF できなくてハマった話し : DSAS開発者の部屋
    s1061123
    s1061123 2013/12/04
  • AndroidからL2TP/IPsec CRT VPNに接続する : DSAS開発者の部屋

    Android端末には、標準でVPN接続機能が搭載されています。 その中でもL2TP/IPsec方式では、x509証明書による認証がサポートされていて、端末ごとに個別の証明書を発行するなどの方法でセキュリティの高いVPN接続を行うことができます。 KLabでは、社内用の認証局を運用していて、社員が自分のユーザ名の入ったクライアント証明書を持てるようになっています。 管理用サイトへのブラウザでのアクセスのほか、社内の無線アクセスポイントもWPA2 Enterprise EAP-TLS認証に対応させて、クライアント証明書による強力な認証を活用しています。 もちろん、万が一の秘密鍵流出の際には、認証局側でCRLにより証明書を失効させることができるよう整備しています。 記事では、クライアント証明書を使ったAndroid端末からのL2TP/IPsec VPN接続を試してみたいと思います。 Andr

    AndroidからL2TP/IPsec CRT VPNに接続する : DSAS開発者の部屋
    s1061123
    s1061123 2012/03/15
  • Android アプリ「AppNetBlocker」を公開しました : DSAS開発者の部屋

    (2015年5月追記) この記事に掲載の「AppNetBlocker」は Android 5.0 以降の環境では正しく動作しません。記録としてアプリ体へのリンクは当面残しますが、コメント欄に何度か記載の通りこのアプリケーションの開発はすでに終了しており、今後改訂を行う予定はありません。ご了承下さい。 以前から自分自身がほしいと思っていた Android アプリが形になったためマーケットで公開しました。 今回はそのアプリ、「AppNetBlocker」をご紹介します。 AppNetBlocker は、所定のアプリから「完全なインターネットアクセス」の許可を除去するツールです。実行に root 権限は必要ありません。Android 1.6 以上の環境で動作します。興味のある方はご利用下さい。もちろん無料です。 (2011/12/26 追記) アプリは、現時点では安全面において不安要素の少な

    Android アプリ「AppNetBlocker」を公開しました : DSAS開発者の部屋
    s1061123
    s1061123 2011/12/26
  • root 化ずみ端末に対応した Android アプリを書く方法 : DSAS開発者の部屋

    Android 端末を root 化するユーザが増えています。 一部の開発者向け製品以外では root 権限を取得するための公式の手段は提供されていないので、その方法を自分で探索するにせよ誰かが開拓した手順をトレースするにせよすべては自己責任であるわけですが、一方で root 権限を必要とするアプリはマーケットにもあれこれ出回っており、つまりはこの件に関する安全性と利便性のトレードオフに満足できない向きが世界中に大勢いるということでしょう。 その状況自体もいろいろ興味ぶかいのですが、ところで、その「root 権限を利用するアプリ」というものはどうやって書けばいいのでしょう?Google 公式の開発者向け資料は言うに及ばず、その他のリソースにも今のところほとんどこの話題に関する情報は見当たりません。そこで今回は、実際に手元のアプリを root 権限での実行に対応させる試みを通じて得た情報やノ

    root 化ずみ端末に対応した Android アプリを書く方法 : DSAS開発者の部屋
  • Windows仮想プリンタプログラムを作ってみる : DSAS開発者の部屋

    普段よく使っているソフトウェアであっても、どういうしくみで機能を実現しているのかよくわからないものが結構あります。 筆者は主に Windows 環境で作業をしていますが、PDF ファイルを作成するたびに目にする「仮想プリンタ」もそのひとつでした。 システムは物のプリンタだと信じているのに実はそれはソフトウェアへのインターフェイスにすぎず、印刷ジョブを渡したら最後、データは隅から隅までなめまわされ好きなように処理されてしまう。ということは、その気になればあんなことやこんなこともできてしまうはず・・・。 あらためて考えてみるとなかなか面白い話なので、仮想プリンタのしくみを調べて何かプログラムを書いてみたいと思いました。 手はじめに、定番の題材として所定のドキュメントを PDF や画像に変換しファイル出力する仮想プリンタを作ってみることにしました。 ひとつの仮想プリンタを自作のコードで構築し、

    s1061123
    s1061123 2010/05/25
    情報の少ないところを狙った良記事.
  • 1