コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2022年7月18日 >>> 2022年6月21日
link もっと後

2022年7月18日

GNU tarのアーカイブ圧縮方式の判定

GNU tarのxオプションは圧縮されたtarでも正しく展開してくれます。圧縮方法はgzip, bzip, xz, ... など複数存在しますが、どのように判定しているんでしょう?まさか拡張子でしょうか?

こういうときにOSSは便利です。ソースコードを見ればわかるはず。バージョンはどれでも仕組み自体は同じだと思いますが、とりあえず最新版リリースGNU tar 1.34にしました。gitリポジトリへのリンクも貼っておきます。

マジックヘッダの定義部分

// src/buffer.c

/* Compression detection */

enum compress_type {
  ct_none,             /* Unknown compression type */
  ct_tar,              /* Plain tar file */
  ct_compress,
  ct_gzip,
  ct_bzip2,
  ct_lzip,
  ct_lzma,
  ct_lzop,
  ct_xz,
  ct_zstd
};

static enum compress_type archive_compression_type = ct_none;

struct zip_magic
{
  enum compress_type type;
  size_t length;
  char const *magic;
};

struct zip_program
{
  enum compress_type type;
  char const *program;
  char const *option;
};

static struct zip_magic const magic[] = {
  { ct_none,     0, 0 },
  { ct_tar,      0, 0 },
  { ct_compress, 2, "\037\235" },
  { ct_gzip,     2, "\037\213" },
  { ct_bzip2,    3, "BZh" },
  { ct_lzip,     4, "LZIP" },
  { ct_lzma,     6, "\xFFLZMA" },
  { ct_lzop,     4, "\211LZO" },
  { ct_xz,       6, "\xFD" "7zXZ" },
  { ct_zstd,     4, "\x28\xB5\x2F\xFD" },
};

各圧縮方式に固有のマジックヘッダを定義している部分がありました。さすがに拡張子などという雑な判定ではなさそうです。そりゃそうか。

マジックヘッダを調べる関数

// src/buffer.c

/* Check if the file ARCHIVE is a compressed archive. */
static enum compress_type
check_compressed_archive (bool *pshort)
{
  struct zip_magic const *p;
  bool sfr;
  bool temp;

  if (!pshort)
    pshort = &temp;

  /* Prepare global data needed for find_next_block: */
  record_end = record_start; /* set up for 1st record = # 0 */
  sfr = read_full_records;
  read_full_records = true; /* Suppress fatal error on reading a partial
                               record */
  *pshort = find_next_block () == 0;

  /* Restore global values */
  read_full_records = sfr;

  if (record_start != record_end /* no files smaller than BLOCKSIZE */
      && (strcmp (record_start->header.magic, TMAGIC) == 0
          || strcmp (record_start->buffer + offsetof (struct posix_header,
                                                      magic),
                     OLDGNU_MAGIC) == 0)
      && tar_checksum (record_start, true) == HEADER_SUCCESS)
    /* Probably a valid header */
    return ct_tar;

  for (p = magic + 2; p < magic + NMAGIC; p++)    //★★magicはさきほど示したコードで定義していた配列★★
    if (memcmp (record_start->buffer, p->magic, p->length) == 0)    //★★ここで比較★★
      return p->type;

  return ct_none;
}

各圧縮方式に固有のバイナリ列が存在するか?をmemcmp() で見ています。結構シンプルな仕組みですね。

編集者:すずき(2022/08/21 03:05)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2022年7月13日

Might and Magic Book One TAS US版、更新

目次: Might and Magicファミコン版

Might and Magic Book One TAS US版をさらに6秒くらい短縮(7:32.39 → 7:25.80)しました(ニコニコ動画へのリンク)。

キーカードを後回し
ダスクの町でキーカードを作成する場合、ゴロスの目玉+キーカードの2つを作る必要があります。しかしゴロスの目玉は7回使用したら(アストラル世界、聖域に入る手前)要らないこと、キーカードはゴロスの目玉からバグ技1回で生成できることを考慮すれば、ダスクの町でゴロスの目玉だけを作って、要らなくなったタイミングでキーカードに変換する方が早いです。
メッセージを減らす
ゴロスの目玉+キーカードを作る際は、魔力のオイルを2つ使い切る(つまり2回USELESS! メッセージを見ることになる)必要がありました。が、今回のチャートですとゴロスの目玉だけ作れば良いので、メッセージ1回分を回避できます。

TASVideosに再投稿するなら何かもう1つくらいは改善してから送りたいですが、良いアイデアが思いつかないです……。

編集者:すずき(2023/08/20 03:30)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2022年7月8日

マンガ紹介 - まとめリンク

目次: マンガ紹介

一覧が欲しくなったので作りました。

5作品
  • 乙女ゲームの破滅フラグしかない悪役令嬢に転生してしまった…
  • 戦国小町苦労譚
  • 公爵令嬢の嗜み
  • はんどすたんど!
  • 球詠
1作品
  • ハコヅメ
10作品
  • うらみちお兄さん
  • 桐谷さん ちょっそれ食うんすか!?
  • じけんじゃけん
  • 天地創造デザイン部
  • ハクメイとミコチ
  • フラジャイル 病理医岸京一郎の所見
  • へんなものみっけ!
  • マージナルオペレーション
  • 魔法少女特殊戦あすか
  • 幼女戦記
2作品
  • こわもてかわもて
  • 我が驍勇(ぎょうゆう)にふるえよ天地
2作品
  • 赤髪の女商人
  • 死んだ息子の遺品に息子の嫁が入っていた話
編集者:すずき(2023/09/24 08:38)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2022年6月23日

ナノイー発生器故障

家でPanasonicのナノイー発生器F-GME03を使っています。しばらく快調に動作していましたが、最近は運転開始するとすぐに「強」のLEDが点滅して止まってしまいます。故障ですかねえ?

この製品はプラスのネジ回し1本で簡単に分解できるので、破壊しない程度に分解してみました。

外側のケースを外すとシロッコファンが見えます。ホコリだらけですが、折れたり固着している様子はありませんでした。電源基板は部品の焼損等はなさそうでした。回路がわからんので導通は見ていませんが、電源が壊れていたらそもそもファンすら回らないでしょう……。たぶん……。


シロッコファン(下)、ナノイー発生器(上の銀の部分)

一通り見た中で最も怪しいのはナノイー発生器です。


ナノイー発生器


ナノイー発生器(上部から見た様子)

電源らしきの端子や配線は綺麗で、部品の曲がりや折れもなさそうです。気になるのは中央の金属部分と放電用と思しき針が赤や黒の錆で覆われていることです。

錆はヤスリで削れば落ちますが、高電圧が掛かる部分ですし素人が適当に弄るのは怖いですね。復活は厳しそうだなあ。寿命と言って違和感ないくらいの期間は使えてたから良しとしましょうか。

編集者:すずき(2022/06/24 01:34)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2022年6月22日

車のバッテリーと無意味なドライブ

久しく車に乗っておらずそろそろバッテリーが上がりそうな予感がしたため、昼休みに無意味に車に乗って走ってきました。

充電を最優先するために、昼間に運転(ライトOFF)し、エアコンもOFFにして、車のバッテリーに優しい運転を心がけました。でも中にいる人間には優しくありません。まだ初夏とはいえ車内はクソ暑いので、車から降りたらシャツの色が変わるくらい汗だくでした……。

後付けモニタの電圧表示を見ると、充電中は14.4Vくらいで充電終了と思われる頃に12.2Vくらいに下がります。つまり充電に要した時間がなんとなくわかるのです。今回はどうも20分くらいで充電を諦めていたみたいでした。

夏は比較的バッテリーは上がりにくいとはいえ、20分で本当に充電されたのかなあ?不安ですね。

編集者:すずき(2022/06/24 00:54)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2022年6月21日

Might and Magic Book One TAS US版がTASVideosにAccept

目次: Might and Magicファミコン版

先月末〜今月頭くらいにMight and Magic Book One TAS US版のTASをTASVideosに投稿していました。今日見たらAcceptedを経てPublishedになっていました(YouTubeへのリンク)。良きかな良きかな。

これでJP版もUS版も記録を制覇したので、ある意味世界一ですわ〜。競っている人がほぼいない孤独な世界一ですけどね……。

以前のTASは2007年と相当昔に記録されたものでした。前と同じ調子でしたら15年は保つでしょう。もっと言えば2022年にMight and Magic Book Oneで遊ぶ人はほとんどいないと思いますから、20年くらいは記録をキープできるんじゃないですかね。はっはっは。

TASVideosに同じゲームで2つの記録を投稿できた理由

TASVideosの閲覧者は国籍関係なく基本的に英語で見るという前提なので、英語版のソフトが存在するなら英語版でTASを作ってくれ、と明確に書いてあります(MovieRules - TASVideos)。ローカライズ版(JP版など)のTASは特別な理由がない限り歓迎されません。

この原則に従うとMight and MagicのTASもUS版のみがAcceptされそうなものですよね。しかし今回はちょっと特殊というか、JP版は違う「枠」扱いでAcceptしてもらいました。

TASVideosでクリアまでの最速タイムを目指すStandardと呼ばれる部門では、バグを使わない記録(Baseline版と呼ばれるようです)と、バグを使った記録を分けて受け付けている場合が多いです。今回挑戦したMight and Magic Book Oneの場合、

  • Baseline: アイテム変化バグのないJP版が相当
  • item glitch: US版が相当

と理解してもらったので、両方の記録ともに受け付けてもらえた、という訳です。

編集者:すずき(2022/06/22 00:48)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2022年7月18日 >>> 2022年6月21日
link もっと後

管理用メニュー

link 記事を新規作成

<2022>
<<<07>>>
-----12
3456789
10111213141516
17181920212223
24252627282930
31------

最近のコメント5件

  • link 02年8月4日
    lxbfYeaaさん (07/12 10:11)
    「555」
  • link 24年6月17日
    すずきさん (06/23 00:12)
    「ありがとうございます。バルコニーではない...」
  • link 24年6月17日
    hdkさん (06/22 22:08)
    「GPSの最初の同期を取る時は見晴らしのい...」
  • link 24年5月16日
    すずきさん (05/21 11:41)
    「あー、確かにdpkg-reconfigu...」
  • link 24年5月16日
    hdkさん (05/21 08:55)
    「システム全体のlocale設定はDebi...」

最近の記事3件

  • link 24年8月10日
    すずき (08/12 16:23)
    「[Linuxを調べる - initrdとカーネル引数] 目次: Linux今どき(?)のinitrdとカーネル引数の渡し方を知...」
  • link 23年4月10日
    すずき (08/12 15:08)
    「[Linux - まとめリンク] 目次: Linuxカーネル、ドライバ関連。Linuxのstruct pageって何?Linu...」
  • link 24年8月5日
    すずき (08/11 23:27)
    「[debootstrapと他アーキテクチャバイナリとbinfmt_misc] 目次: Linux以前、Debianのrootf...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 08/12 16:23