なるべく心とPCのストレージに余裕のある友達にプレゼントしてあげてください。
初めに
今日はクリスマスです。
つまり、この記事を読んでいるということは、あなたはきっと非リアでしょう。
嘘です。ごめんなさい。(あー!!戻るボタンなんてクリックしないで)
今日はクリスマスです。
プレゼントを用意しなくてはいけません。
というわけで、Zip 爆弾をプレゼントしましょう。
POINT
以下の二つを心掛けましょう:
- エンジニアらしいプレゼント
- 爆発は芸術
内容
読まなくても...
+-今年もあとちょっと。お仕事お疲れ様です。
メリークリスマス🎅🎉
Zip 爆弾 というものをご存知でしょうか?
Zip 爆弾 とは...
小さなサイズの圧縮ファイルが展開されると膨大なサイズになる悪意のあるファイルです。
といったものです😊
ちなみに...
+-私はこんなふうにとらえています。
- 小さなサイズの圧縮ファイルが展開されると膨大なサイズになる悪意のあるファイルです。
+ 友達にプレゼントしたくなる小さいながらもとてもヤバい性能を発揮するステキなモノです。
コーディング
それではさっそく、プレゼントの作成に取り掛かりましょう。
今回は 十万回のループ処理 を行うため、処理速度が速いことで有名な C++ を使用してコーディングをさせていただきます。
非常に簡潔でありますが、以下は私が書かせていただいたコードです。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
// ファイルに記載する内容
string filecontent = "メリークリスマス!";
for (int c = 0; c < 666 * 4; c++) {
filecontent += "メリークリスマス!";
}
// 00000.txt ~ 99999.txt のファイルを作成する
for (int i = 0; i < 100000; i ++) {
// ファイルの名前を決める
string filename = to_string(i);
while (filename.length() < 5) {
filename = "0" + filename;
}
filename += ".txt";
// ファイルを作成する
ofstream MyFile(filename);
MyFile << filecontent;
MyFile.close();
// コンソールに状態を出力
cout << "Made " << filename << endl;
}
return 0;
}
並列処理の実装もしていませんし、性能の悪いコードですので、改善して使っていただけるとよいと思います。
実行して ...
処理に約15分かかりました。。。 プレゼントを作るための努力 と考えれば苦でもないですよ!
さて、作成されたテキストファイルの容量は...
6GB !
まぁ、なかなかいいのではないでしょうか?
それでは、それを圧縮して Zip ファイルにしますと?
44MB !
素晴らしい!
なんとも素晴らしい Zip ファイル爆弾 が完成しました😀
最後に
この記事を投稿したら、作成したプレゼントを友達に渡そうと思います。
喜んでくれるといいな。
最後まで読んでくれてありがとう!
そして、メリークリスマス🍗
追記(ファイルの圧縮について)
追記(これ)を追記した理由
+-この記事を投稿した後に読んだら、 エンジニアらしく とか書いてるくせに 技術記事の匂いゼロ だったので追記させていただきました。
今回は、テキストファイルが入ったフォルダーを zip ファイルに圧縮して爆弾を製造しましたが、どのようにしてコンパクトに圧縮されたのかという話です。
圧縮した zip ファイルは、 Explzh というソフトで、以下の写真のように詳細が確認できます。(このソフトは windows のみ対応です。)
読まなくていいセリフ
圧縮率 1% 未満って...理想の消費税といったところでしょうか😆[圧縮方法] に記載されている Deflate
については、以下の二つの Wikipedia の document を参照していただければ理解できると思います。ちなみに私はファイルの圧縮がどのように行われているのか具体的な手法を知らなかったのでいい勉強になりました。