Visual StudioによるOBSのプラグイン開発手順

はじめに Visual StuioでOBSのプラグインを開発する準備について説明します。 詳細な手順がネットで見つからなかったので、独自に手順を検討しました。 デバッガで効率的にプラグインをデバッグできるようにします。 手順 OBS Studioをビルドする。(以下、ビ…

OBS Code Reading: ウインドウタイトルのバージョン情報の仕様

はじめに これは、OBSのウインドウのタイトルがどのように決められているのか突き止めるまでのメモです。 OBSのタイトル部分 今回使用したバージョンはこちらです。 https://github.com/obsproject/obs-studio/tree/e8dc70d0eef4503378d6ac300e680215eb5c937…

Visual Studio Community 2022でOBSをビルドする手順

はじめに これはVisual Studio Community 2022でOBSをビルドする手順の記録です。 64bitのWindows版のOBSをビルドします。 基本的にこの手順に従います。 Wiki - Build Instructions For Windows | OBS 必要なソフト Visual Studio Community 2022 Windows 1…

XcodeでOBSをビルドとデバッグするまで

はじめに 今回はXcodeでOBSをビルドし、デバッグできるようにするまでの手順を記録します。 色々うまくいかなかったですが、試行錯誤してデバッグできる状態まで持っていけました。 手順 基本的にここのマニュアルの通りでOK。 Build Instructions For Mac ·…

Blink: Shadow DOMのLayoutTestを実行する

はじめに BlinkでShadow DOMのLayoutTestを実行する手順のメモです。 仕様 今回は以下の仕様のLayoutTestをピンポイントで実行します。 http://www.w3.org/TR/shadow-dom/ Invoking the cloneNode() method on a ShadowRoot instance must always throw a DA…

Chromium Code Reading: Experimentalな機能の実装(WebPのAcceptヘッダ送出)

はじめに Google+を見ていたら、面白そうなポストがありました。 https://plus.google.com/100132233764003563318/posts/KRU6nxp7LXGCanaryビルドに新しいExperimentalな機能が追加されました。簡単に言うと、画像のリクエスト時にHTTPリクエストのAcceptヘ…

Chromeにはじめて取り込まれたパッチ

記念すべき第1号です。 https://chromium.googlesource.com/chromium/src/+/15fc083b4a23e23417a6bf71f38e2f7966908590単なるtypoの修正ですが、LGTM(Looks Good To Me)をもらった時は嬉しかったです。Botがビルドとテストを走らせる様子も体験してみると楽…

Visual StudioでChromeの動作を見る: Blinkの初期化処理やイベントリスナーのバックトレース取得

はじめに Visual Studio 2010 ExpressでChromeがビルドできるようになったので、次はデバッグを試してみました。今回は、こちらのドキュメントを参考にしました。 http://www.chromium.org/developers/how-tos/debugging 手順 1. chrome/chrome.slnを開きま…

chromeにパッチを投げてレビューを受けるまでのワークフロー

はじめに chromeのWebSocketのコードを読んでいたら、コメントにtypoを発見しました。 せっかくなので、パッチを作成してレビューを受けられる状態までもっていきました。一連のワークフローは手順の通りでできました。 http://www.chromium.org/developers/…

Visual Studio 2010 ExpressとninjaでChromiumをビルドする

はじめに Windows 7環境が汚れてきたので、Windows 7の再インストールのついでにChromiumをビルドできるようにしました。 環境 以下の環境でChromiumをビルドできるようにします。 Windows 7 Visual Studio 2010 Express Edition cygwin git ninja (ビルドシ…

WebKit: QtWebKitのビルドとはじめてのWebKit Hack

はじめに 今回は、Google ChromeやiPhoneのMobile Safariなどで採用されているレンダリングエンジンWebKitをより身近な存在に感じられるようにします。スタンダードなパソコンとLinuxやC/C++の知識が多少あれば、WebKitのHackの入り口まで一気に到達できます…

WebKit: fontショートハンドプロパティのパース

今回はショートハンドプロパティであるfontプロパティのパースについて見ていきます。 ここだけ読んでも、CSS2.1の仕様とWebKitの実装の対応関係がとれているのがなんとなく見えてきます。 15.8 Shorthand font property: the 'font' property'font' Value: …

WebKit: CSSプロパティと値の組(宣言)のパース

今回はCSSのプロパティと値の組(宣言)についてWebKitの実装を読んでみる。つまり、CSSの以下の仕様。 4.1.8 Declarations and propertiesA declaration is either empty or consists of a property name, followed by a colon (:), followed by a property v…

WebKit: コード探索

はじめに 久しぶりにブログを書いてみたくなりました。WebKitに興味が少し出てきているので、学んだことなどをメモとして書いていこうと思います。 コンパイル時assert コンパイル時assertの面白い例。コメントで型のサイズを肥大化させないこと、と書くより…

LinuxカーネルHack: はじめてメインラインにマージされたパッチ

この前投げたパッチがbtrfs-unstableに取り込まれて、ついにメインラインにマージされました。 2.6.39のmerge windowのタイミングで取り込まれました。http://www.kernel.org/pub/linux/kernel/v2.6/testing/ChangeLog-2.6.39-rc1 commit dac97e516c617f9c79…

LinuxカーネルHack: git commitからgit send-emailでGMailアカウントを用いたパッチ送信まで

はじめてBtrfsにパッチを投げてみました。修正は単純で、メモリー確保後のチェックをより厳密にしただけです。Btrfsの開発コミュニティはBUG_ON撲滅に向けて動いているのに、BUG_ONを増やしてしまいました。http://www.mail-archive.com/linux-btrfs@vger.ke…

LinuxカーネルHack: GDBとKVMによるカーネルデバッグ

これまでUML(User Mode Linux)でカーネルデバッグできる環境を使って、カーネルの解析等を行ってきた。UMLの環境は、VMWare Server上のUbuntu 8.0.4に構築していたが、最近、起動しなってしまった。これまでKVM(Kernel-based Virtual Machine)に興味があった…

LinuxカーネルHack: BtrfsのBUG_ONマクロ撲滅運動

以前のエントリーで、BtrfsにBUG_ONマクロが散見されることについて書いた。この件について、#btrfsのIRCチャネルでBUG_ONについて質問してみた。でも、IRCではほしい答えが得られなかったので、Btrfsの開発メーリングリストに質問を投げてみた。 On Removin…

LinuxカーネルHack: Btrfs開発最新動向(2010/10/31)

タイトルはちょっと大げさだけど、btrfs-unstableブランチとメインラインに動きがあったので、今回はその紹介。実は、Btrfsの開発ブランチである git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable は今年の7月中旬頃から全然更新されな…

LinuxカーネルHack: Btrfsのコードに散りばめられたBUG_ONマクロが示す兆候

BUG_ONマクロは、Linuxカーネルにおいて、引数に与えられた式を評価した結果が真となることが想定されない箇所(つまり、真ならバグ)で使われる。簡単に言うと、Cのassertのようなもの。ただし、assertよりもきつくて、BUG_ONの引数が真になると、カーネルパ…

LinuxカーネルHack: GMailで購読中のMLに投げられたパッチをLinuxカーネルに適用する方法

久しぶりに、Linuxカーネルのメインラインをgit pullして、UMLカーネルをビルドしようとしたら、ビルドに失敗してしまった。原因はビルドできない壊れたコードがメインラインに入ってしまったため。今回は、ビルドできるようになるまでにやったことから、手…

LinuxカーネルHack: ビルド時間の短縮を求めて(カーネルモジュール編)

以前、LinuxカーネルHack: ビルド時間の短縮を求めて でmakeの並列ビルドオプションを使ってビルドの高速化を試みた。今回は、カーネルモジュール開発でのビルド時間短縮を考える。今回紹介するテクニックは、デバイスドライバやファイルシステムなどのカー…

LinuxカーネルHack: LZOリアルタイムデータ圧縮ライブラリをカーネルモジュールから使う実験

前回、カーネルモジュールをUMLでいじれるようになったので、次は何をしようかと思って、今回はLZOで遊んでみることにした。最初は、zlibで遊ぼうかと思ったけれども、ちょっと違う方が面白そうだったので。それに、BtrfsのWikiの「Project ideas」(https://…

LinuxカーネルHack: UML上で動作するカーネルモジュールの作成

今回は、カーネルからexportされている様々な関数(機能)にアクセスして実験するための準備として、カーネルモジュールを作成する。UML上でカーネルモジュールのビルド、組み込み(insmod)、解放(rmmod)ができるようにする。以下の操作はすべてUML上にて行う。…

LinuxカーネルHack: UMLのブロック型デバイスドライバUBDで遊ぶ

今回は、Btrfsからちょっと脱線して、より深いところにある、UMLのブロック型デバイスドライバに寄り道してみることにした。 サマリー UMLではUBD(UML Block Deviceの略?)というブロック型デバイスドライバが仮想ドライブとしての役割を果たしている。 UBDで…

LinuxカーネルHack: Btrfsのmount時に起動されるカーネルスレッドの解析

前回、Btrfsのmount後に様々なカーネルスレッドが起動されることを発見した。今回はその続きで、これらのカーネルスレッドを掘り下げて見ていく。全体的な構造が見えてきたけど、それぞれのカーネルスレッドでの処理の理解までにはいたっていない。 サマリー…

LinuxカーネルHack: Btrfsにおけるmount周辺の解析

サマリー mountコマンドを実行すると、mount(2)が実行される。mount(2)があることをはじめて知った。http://linux-documentation.com/en/man/man2/mount.html Btrfsをmountできるようにするには予めカーネルに認識させる必要がある。init_btrfs_fsにてregist…

LinuxカーネルHack: GDBでBtrfsをデバッグする

はじめに 今回は、UML+GDBでBtrfsをデバッグできるようにしてみる。途中で失敗して多少遠回りになったけれども、デバッグはできるようになった。なお、Ubuntu 10.10でのUMLの開発環境がまだ整備できていないので、これまで使ってきたUbuntu 8.04のUMLの環境…

LinuxカーネルHack: Btrfsを試す

VirtualBoxにインストールしたUbuntu 10.10(ホスト名は適当にmonkeyにしてみた)でBtrfsを早速試してみる。ちなみに、現在利用中のVirtualBoxのバージョンは3.2.8 r64453。まずは、VirtualBoxで仮想ドライブを追加。 Oracle VM VirtualBox > [Ubuntu 10.10のV…

LinuxカーネルHack: 1ヶ月の活動の振り返りとこれからの展望

Linuxカーネルの探索をはじめて1ヶ月が経過したので、今回はその振り返り。こうやってまとめてみると、1ヶ月あれば結構いろいろできるなぁと思った。 やったこと ビルド UMLカーネル UML(User Mode Linux)を使うことで、GDBを使いながらカーネルを効率よく解…