yunomuのブログ

趣味のこと

JPEGを読む(9) AC係数のデコード(DCT、量子化)

AC係数のデコード 8×8のDCT係数のうち先頭を除く63個をAC係数と呼ぶ。(3)で後回しにしたAC係数の部分を見る。 JPEGを読む(3) ハフマン符号の復号準備 - yunomuのブログ この中のDecode_ZZ(K)の部分はDCと同じで、RECEIVEしてEXTENDしている。DCと異なるのはD…

JPEGを読む(8) RECEIVEとEXTEND

ハフマン符号の復号はいいけど、その後のデータを読む部分を忘れていた。(3)のRECEIVEとEXTENDについて。 JPEGを読む(3) ハフマン符号の復号準備 - yunomuのブログ RECEIVE(SSSS) SSSSビットを読み取る処理。自明かと思ったけどちゃんと説明されていたので一…

JPEGを読む(7) コンポーネント、サンプリング係数、MCUなど

Annex Aの数学的定義を読んで実際のところ何をやっているのかを掴む。 コンポーネント(component) まずコンポーネントについて。コンポーネントは仕様のどこを読んでも「画像に含まれる2次元配列」という以上の情報が出てこない。 実のところJPEG規格は2次元…

JPEGを読む(6) フレームヘッダとスキャンヘッダ

Interpret frame header Figure E.7の"Interpret frame header"の部分Decoder#readFrameHeaderを作る。ビットフィールドの定義はTable B.2にあって、それぞれのフィールドの意味はこう。 Lf: フレームヘッダの長さ P: サンプル精度。フレーム内のコンポーネ…

JPEGを読む(5) JPEGファイル全体の構造を読めるようにする

一旦JPEGファイルの全体の構造に立ち戻る。構造のフローチャートはややこしいので一旦飛ばして。Annex E "Encoder and decoder control procedures"のE.2デコードの章を見ていく。 Decode image Decoder_setupと、SOF(start of frame)マーカーが出てくるまで…

JPEGを読む(4) ストリームを読む準備

本格的に復号していく前に、デコーダのインタフェースと補助関数を作る。既にちょっとコードに書いているけど。 外部インタフェース 外部インタフェースは一旦こういう感じで。出力はまだどういう形式にするか考えていないので一旦無し。 import ( "bufio" "…

JPEGを読む(3) ハフマン符号の復号準備

JPEGを読む(2) ハフマン表定義(DHT) - yunomuのブログ これのつづき 仕様書(PDF) https://www.w3.org/Graphics/JPEG/itu-t81.pdf ハフマン符号表があればscanのペイロードをデコードできる。復号手順はAnnex FのF.2に書いてある。 JPEGでは8×8のブロックごと…

JPEGを読む(2) ハフマン表定義(DHT)

JPEGを読む - yunomuのブログ これの続き。 JPEG仕様(PDF) https://www.w3.org/Graphics/JPEG/itu-t81.pdf Figure B.16, B17あたりにフィールドが並ぶ位置のルールが書いてあるけど、これは真面目にパーサーを書くとして。 まずはDHT(Define huffman table(s…

JPEGを読む

画像や動画のエンコード/デコードの理屈はわかるけど実際どうなっているかはよくわかってないのでとりあえずJPEGファイルの仕様を調べてみる。 資料 https://www.w3.org/Graphics/JPEG/itu-t81.pdf JISの日本語の資料もあったけど(JISX4301)、閲覧が面倒くさ…

スケジュール帳に何を書くか

大抵のものには日付や時刻のデータが付随しているので全部スケジュールとしてカレンダーに載せたくなる。けどスケジュール帳に載せづらいデータというものがたくさんある。 会議や飲み会の予定は明らかで、カレンダーのその日付に書き込んでもGoogleカレンダ…

Rust yew の function_component が動かない

yewで遊ぶぞーとなって一番手こずったところ。 yew 0.20.0ではyew::start_appが無くなっているので、yewの(古い)チュートリアルにあるコードはそもそも動かない。 かといってdocsにあるExampleもそのままでは動かない。具体的にはyew::Renderer:<App>::new().rend</app>…

MSYS2でRuby開発環境を作る

ウィルスバスターその他いろいろに阻まれてrubyinstaller+DevKit(MSYS2)のインストールに失敗したみなさん。いっそMSYS2そのものをインストールしてしまいましょう。64bitのWindowsの7以降を対象にしています。10ならだいたいOKだと思います。www.msys2.org …

CGIを書こう

タイトル「インターネットになろう」にしようと思ったけどやめた。 今回はちょっとWebをやってみます。「そろそろ何をやりたいか考えてみよう」と言いたいところですが、そんな簡単に見つかるなら幸せなことで、それはそれで良いのですが、普通はとりあえず…

2時間でわかる繰り返し

今回は繰り返しの話です。 繰り返しというのは要するに同じことや似たようなことを何回もやる、ということですが、そのやり方はたくさんあります。これはRubyだからということではなく、様々なプログラミング言語で様々な繰り返しの方法があります。その多数…

「20分ではじめるRuby」解説 4ページ目

前回: 「20分ではじめるRuby」解説 3ページ目 - yunomuのブログ最後です。 実行 まずは3ページ目に戻って、「ファイルに保存して実行」です。 このファイルを“ri20min.rb”という名前で保存して、“ruby ri20min.rb”と 実行しましょう。 メモ帳でもなんでもい…

「20分ではじめるRuby」解説 3ページ目

前回: 「20分ではじめるRuby」解説 2ページ目 - yunomuのブログ オブジェクトを作る それではgreeterオブジェクトを作り、使ってみましょう。 から始まります。最初から飛ばしていますね。 2ページ目の最後にclass Greeterを書きましたね。これがクラスだと…

「20分ではじめるRuby」解説 2ページ目

前回: 実際のところ20分ではじまるかもしれないけどよくわからないよねRuby - yunomuのブログつづき。「20分ではじめるRuby」の今回は2ページ目についてです。今回もマニュアルを見ながらいきましょう。docs.ruby-lang.org www.ruby-lang.org メソッド定義 …

実際のところ20分ではじまるかもしれないけどよくわからないよねRuby

まえがき プログラミングをはじめてみようと思ってとりあえず日本語の解説が多くて名前もいい感じだからRubyを選んでチュートリアルをひととおりやってみようと思って「20分ではじめるRuby」をひととおりやってみたみなさん。実際のところはインストールして…

研究室の思い出 印刷された大量のソースコード

2004年頃、大学4年で研究室に配属され、OSとネットワークの研究室でちょっと専門外の機械学習の研究をしていた。配属直後なので研究というより概念のお勉強から始まる。 その研究室では既に10年続くプロジェクトもあり、打ち合わせのために作られた大量の検…

Goでsubcommandsを使う

git や kubectl みたいなサブコマンドを実装したい時。 たぶん一番楽なのはsubcommandsライブラリを使う方法だと思います。 subcommands package · pkg.go.dev mainは後回しにして、subcommand側から。 Command 型を作って、subcommands.Command インタフェ…

glide getやglide upが動かない

glide getで新しいライブラリをインストールしようとするとこんなエラーが出た。 [ERROR] Error scanning github.com/golang/protobuf/ptypes/duration: open /Users/yunomu/.glide/cache/src/https-github.com-golang-protobuf-ptypes-duration: no such fi…

cabalでビルドをカスタマイズする

cabalファイルだけでは足りない事がある。どうしても単一のプログラムではできないこともあるし、TemplateHaskellでも生成できなくてやむなくソースコードを自動生成するスクリプトを書かざるを得ない事もあります。自動生成なんかやると何かに負けた気分に…

Javaの例外のスタックトレースを操作する(しない)

Javaで、例外を作成するメソッドを作りたくなることが数年に1回くらいある。で、大抵はそんなこと実はやらないほうがよくて、やらないんですけど、まあやることになったとします。やるなよ。 そんでこんなメソッドを作る。 private Exception makeException(…

ファイルとファイルディスクリプタとファイルのようなものたち

プログラムからファイルを読もうとしたらどうするか。 まずディスクを選んで、ディスクに書き込まれているファイルシステムを調べる。次にファイルシステムの管理情報に基づいて目的のファイルのデータブロックを探す。具体的にはファイルシステムの形式に従…

ディスク拡張したのにディスク容量が増えないんだけど(ファイルシステムの話)

例えばAmazon EC2のEBSのように、ディスクが仮想化されるようになり、そうするとディスクの容量を拡張するというよくわかんない事がお手軽にできるようになり、「ディスク容量増やしたんだけどOSから見ると増えてない。なんで」みたいな事が起こり、「ディス…

パッケージ管理システムのこと

自分で作ったプログラムを実行することは、ほとんどの場合で簡単にできます。だいたい動作確認しながら作るので当たり前です。 でも自分で作ったプログラムを人に渡して使ってもらおうとすると、これが結構面倒くさい。 ここでプログラムというのは、実行フ…

死んでもTwitterで遊ぼう

先生が「死ぬまでTwitterで遊ぼう」みたいな事を言ったら、学生に「いや別に死んでもTwitterできますよプログラマなんだから」みたいな事を言われた、という話を去年京都で飲んだ時に聞いた。 そういえば私は昔、人間を作りたくて色々勉強してた事を思い出し…

Android SDKのSQLiteDatabase#execSQLのbindArgsの型

AndroidSDKのSQLiteDatabase#execSQLのマニュアル [http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL(java.lang.String, java.lang.Object[])] よくあるsqlとbindArgs(Object配列)を渡す構造なんですが、このbi…

SSHがつながらない

前回と同じネットワーク構成で。 AからVPN経由でCへのSSH接続を試みる。 % ssh 192.168.2.11 ssh_exchange_identification: read: Connection reset by peerつながらない。Aからインターネット経由でC(eth0)へのSSH接続は普通にできる。 % ssh server_public…

ネットワークがつながらない

基本がわかっていないとなにもかもわからなくなる。 出来事 外で借りてるサーバ(C)を使ってこんな感じのネットワークを作った。 AはWindows 7 Aの隣に何台かノート(D)やら携帯(E)やらがある BはUT-VPNクライアントが動く程度のLinux(CentOS 5系だったと思う)…