仮眠プログラマーのつぶやき

自分がプログラムやっていて、思いついたことをつぶやいていきます。 2025年からzennに移行

自作ゲームやツール、ソースなどを公開しております。
①ポンコツ自動車シュライシュラー
DOWNLOAD
②流体力学ソース付き
汚いほうDOWNLOAD
綺麗なほうDOWNLOAD
③ミニスタヲズ
DOWNLOAD
④地下鉄でGO
DOWNLOAD
⑤ババドン
DOWNLOAD
⑥圧縮拳(ツール)
DOWNLOAD
⑦複写拳
DOWNLOAD
⑧布シミュレーション
DOWNLOAD
⑨minecraft巨大電卓地形データ
DOWNLOAD
⑩フリュードランダー
デジゲー博頒布α版
DOWNLOAD
⑪パズドラルート解析GPGPU版
DOWNLOAD
⑫ゲーム「流体de月面着陸」
DOWNLOAD

技術話

BIOSでフリーズの原因がHDDのexfatフォーマット形式のせいだった

新規ハードディスク購入で深い沼にはまったので、記事にしてみようと思う。


今回8T HDDの値段がこなれて来たのでST8000DM004を中古(18000円前後)で購入した。
メインのwin10のPCにつないでデータバックアップ用として使用してみることとした。
書き込み読み込みも100MB/s超えており、最近のHDDはすごいなぁと思いつつ5TBくらいのデータ群を書き込んだ。特に異音もなく動いているし、割と最近のモデルなので中古だけどすぐには壊れないだろうとたかをくくっていた・・・

そしてある日、「なんだかパソコンが重いな」といって再起動をかけたところ

BIOS画面から動かない。

電源ボタンで強制終了してからまたつけてもBIOS設定画面すら開かない。ASUSのロゴがでてなにも受け付けない
まさかパソコン壊れた・・?
もう5年以上にもなるし常にBOINCやらマイニングやらで24時間フル稼働させていたからいつどこがどうなってもおかしくないと思っていた。
マザボはP9X79で、これにはcpuやメモリ、グラボに異常がある場合に知らせてくれるLEDランプがついている。今回はPCI Express x16スロットの横にあるBOOT DEVIDE LEDが点灯状態だった。

ははーんグラボだな、と思ってグラボを変えてみたけど変化なし。今度は電源を疑う。グラボに給電する電力が足りないのだろうと。外部電源を必要としないAMD HD7750にしてもやはり変わらず。
PCI Express x16の給電が足りないのだろうとやはりしつこく電源を疑う。ちなみに他の原因を考えたがそもそもOS画面に行く前なのでOSは関係なし。メモリの異常ならばマザボのDRAM_LEDが点灯しないのはおかしい。CPUの異常でも同じくCPU_LEDが点灯してないのはおかしい。
あとはマザボ自体の異常。電池切れとか。
いろいろ外しながらやっているうちに、OSの入ったSSD以外のドライブを外したところで起動した。そして原因特定。一番最近つけたST8000DM004だ。

それも再現率100%で、このHDDつけたときだけBIOSが起動しない。HDDのせいでBIOSすら起動しないことあるの?普通に考えたらHDDの故障・・
これは考えたくない・・大事なデータがいっぱいはいってるんだ(大事じゃないのも多いけど)

それでググってみるけどやっぱりHDDの故障が一番考えられそうだった。

ただちゃんと電源投入時にHDDも回っている音がするので完全に死んだわけではなさそう。
諦めきれずに数千円のSATA - USB3.0変換ケーブルを購入して、USB経由でデータ救出を試みた。結果はまさかの、BIOSでフリーズ。USB経由でもフリーズとか怖すぎる。しかも今度はHDD回ってる音しないし。

心折れかけたけど、別のPCに、USB経由でなくマザボからしっかり(?)つないでみたところ・・
OS起動!
しかも中のデータは全部完全に生きていた!!!!!

結局データは全部取り出せて、今でもこの8TBのHDDは問題なく稼働している。



今回のをまとめると
メイン機
マザボ:P9X79
CPU:core i7 3820
メモリ:PC3-12800(DDR-1600) 8GB*4 クアッドチャネル
グラボ:RX 480+HD 7970
OS:windows 10 pro 64bit
SATAデバイス:Crucial_CT525MX300SSD1(SSD OS用)、M4-CT128M4SSD2(SSD データ用)、ST4000DM004(HDD データ用)、ST8000DM004(HDD データ用)

で再現率100%でBIOS画面のフリーズ。ST8000DM004なしの構成だと問題なく起動。


サブ機
マザボ:ASROCK H270M-ITX/ac
CPU:core i7 7100T
メモリ:DDR4?? 8GB 1枚
グラボ:なし
OS:ubuntu 16.04 LTS

こちらにつないで救出できた。
どうも調べてみると3TBのHDDをexFATで初期化するとBIOS起動しないなどちらほら情報がでてくる。
https://likemid.wordpress.com/2014/03/24/exfat-over-2tb-hdd-bios-freeze/

上の記事を参考にすると「exfatで2TB以上のパーティションをフォーマットしたため、再起動時にBIOSがブート先を探しにいけなかった」という結論のようです。でもって多分だけど、マザーボードによっては問題なく起動できると。
あーHDDの故障じゃなくてよかった。

なお今回exfat形式でのフォーマットはWindows10で行っている。フォーマットしておいて再起動時にマザボが対応してませんとかなんて罠・・

これからはデータ用でもNTFSでフォーマットすることにした。

グラフを使った速度比較!パズドラルート解析GPGPUベンチマーク考察

速度比較といえばグラフである!!考察である!!!
※2019/12追記:ここでいうグラフはグラフ理論とは全く関係ありません。ごめんなさい。
今回のはかなり久しぶりに速度比較でグラフを使った記事となる!とても胸が高まる。
このためにGPGPU版を作ったようなものだからな。

比較する項目は以下のものだ



「ルート長と全経路総パターン等の関係」

「ルート長と計算時間の関係、違うデバイスでの計算速度の比較」

「ベンチマークモードと通常解析モードの速度比較」

「4色対応高速化機能付きと機能なしの速度比較」




一応解説しておくと
このソフトでは、全てのとりうるルートを全検索している。
「解析長」というのは、計算上ドロップを動かす距離で、ソフトで設定できる値は16までだ。これは最大16マス分移動する経路まで計算できるということだ。

1マス解析長が伸びれば単純計算で3倍の計算量になる。
この前の記事にも書いたとおり、移動方向は上下左右の4つのとりうる範囲があり、さっきと正反対の方向へは行けないからだ。
実際は、6×5マスの範囲外に行く例も除外するため3倍より若干低くなる。
では2.?何倍なのか。また計算時間も2.?倍ずつ増えているのか、などを比較してみようと思う。


次に4色対応高速化機能についてだ。これは土日ダンジョンのステージや、コンボを生む可能性のあるドロップ色が4種類以下であることがわかれば、解析前に自動でコンボ計算省略化機能が作動するというものだ。
4色対応高速化機能はα版のマイナーアップデート版から付いているため、どのくらい高速になったか比較してみようと思う。

そしてこのソフトの目玉、ベンチマーク機能について。
べ題

これはレジストリをいじって画面が落ちないように設定してから、全負荷をかけてルート解析をするというもの。
なかば強引な手法であるが、そうしないと、ディスプレイ出力をしているGPUでGPGPUをする時画面出力に回すタスクがなくなり、2秒以上の信号停止が続くとOSがドライバを強制再起動させてしまう。
それで画面落ちが発生し、計算途中のデータもパーになってしまう。

レジストリをいじればOSにドライバを再起動させない設定にできる。
詳しくは上の画像にもある通り本ソフトの「ヒント」ボタンで確認してほしい。

そしてそのモードが「ベンチマーク高速解析」モードだ。
通常解析と比べどのくらい早くなるか検証してみようと思う。





「ルート長と全経路総パターン等の関係」
・全経路総パターン
画像0

ルート解析長 総経路数
9 196779
10 480712
11 1174882
12 2871769
13 7018349
14 17151003
15 41913267
16 102427430

対数グラフにとってみた。
このグラフから分かることは、総経路数は解析長が1増えるごとに2.44倍ずつになるということだ。
ここで注意してほしいのは総経路数。これは仮に解析長が10なら、10までに計算してきた解析長9や8の経路も全部含まれているということだ。
解析長9から10の時点で新しく計算しなければいけない経路数は引き算で求めることができる。



ルート解析長 新しく発生したルート 新しいルートは何倍になっているか
10 283933 2.4448373384
11 694170 2.4444833398
12 1696887 2.4436394409
13 4146580 2.4436171496
14 10132654 2.4438083053
15 24762264 2.4438057441
16 60514163


ここから分かることは、欄外に出るルートを除外するだけで計算量が3倍ではなく2.444倍にすむ
ということだ。指数が3なのと2.444なのでは大いに違う。効率的な計算を行うには欄外にでるルートは除外すべきだろう。




・コンボ発生パターン

画像1



このグラフから分かることは、コンボ発生パターンのルート数は解析長が1増えるごとに2.50倍ずつになるということだ。
これもそこまでの解析長の総計なので↑と同じく引き算をする。


ルート解析長 新しく発生したコンボルート 新しいコンボ発生パターンルート数は何倍になっているか
10 126276 2.5592986791
11 323178 2.458988545
12 794691 2.5329417346
13 2012906 2.4481421388
14 4927880 2.5156474995
15 12396809 2.4428066932
16 30283008 0

ここからわかることは、全経路パターン中にあるコンボ発生パターンは、解析長を伸ばすほどその割合が高くなってくる。
最初のドロップ配列では1つもコンボが発生しない、という条件があるためある意味当然の結果かもしれない。
解析前の時点で確定コンボがあれば、高くなる割合は低くなるだろう。


・デバイス間データ転送量


画像2


ここから分かることは、デバイス間転送量は2.52倍ずつになるということだ。

正直、ここらへんは「全経路総パターン」と似たような値になるのは当たり前なのでこのくらいにしておく。



「解析長と計算時間の関係、違うデバイスでの計算速度の比較」

・GPU time
画像3

ノーパとデスクトップでの速度比と、解析長を伸ばすとGPUの計算時間が何倍になっていくかを表したグラフだ。
ここから分かることは、ノーパはデスクトップより計算が4倍遅い
また、intel HD Graphicsでは経路長が1伸びるごとに2.59倍nVidia Geforce GT520では経路長が1伸びるごとに2.40倍になっている。
どちらも、計算量にほぼリニアに比例しているのが分かる。

(ところでなんでcore i7 3820にGT520なんか積んでいるのかっていうツッコミどころはありますが、そのうちちゃんとハイエンドグラフィックボードを搭載してあげるつもりなので気にしないでください。)




・CPUtime


画像4

ここから分かることは、やっぱりノーパはデスクトップより計算が4倍遅い
また、intel HD Graphicsでは経路長が1伸びるごとに2.56倍、nVidia Geforce GT520では経路長が1伸びるごとに2.47倍になっている。
CPUに関してはcore i5 450m は2.4Ghz  、一方core i7 3820 は3.6Ghz なので単純計算では4倍の差が出るのはおかしいが、ここはキャッシュやメモリ転送能力などが関与しているものと思われる。

GPUとCPUの2つのタイムを比較したが、若干intel HD Graphicsだと、計算量の伸びに対する計算時間の伸びが大きい。これは計算が多くなるほど性能の悪いグラボだと余計時間がかかる
ということになりそうだ。

 
 
「ベンチマークモードと通常解析モードの速度比較」

画像5

intel HD Graphicsだとレジストリいじって高速解析してもほとんど速度は上がらないようだ。





画像6
Geforce GT 520では解析ルート長が大きければ、高速解析の意味がありそうだ。約1.32倍とかなり早くなっているのが分かる。



「4色対応高速化機能付きと機能なしの速度比較」

画像7




4色解析 6色解析
解析長16マス 50210.5 68762 1.3694745123
解析長14マス 5067.5 8504.5 1.6782437099

6色あるドロップ配列より、4色しかないほうが解析が約1.4~1.6倍早くなる事がわかる!

6色というのは当然回復ドロップも合わせたものだ。
解析が早くなるのは4色しかない方といっても、ドロップ数が2つまでならコンボを生まないので実際は6色でも計算が早くなる可能性はあるということだ。




つまり、レジストリいじって計算ドロップがほぼ4色だと、今までより2倍近く早く計算できることになる!
ということはスマホアプリのパズドラルート解析君の2000倍・・というアヌビスもびっくりな倍率で計算できるわけだ!


以上、パズドラルート解析GPGPU版の性能を徹底解析してみた!こんなグラフを書いてバカみたいに楽しんでいるのは俺だけだが、改めてGPGPUのちからは凄いと実感!
そして偶然必然かGPGPU用(?)ビデオカードのGeforce Titanの足音が近づいてきた・・倍精度1.3Tflopsらしい。化け物・・だが出荷数が10000未満という噂もある。余計に高くなりそうだ
どちらにしろ、今のGPUにはもっと働いてもらうことになりそうだ。

パズドラルート解析アプリの問題点と今後の抱負

PC用解析君はコチラ

新しいビットマップ イメージ




問題のアプリです
https://itunes.apple.com/jp/app/andrpzsolve/id580792881?l=ja&ls=1&mt=8
https://play.google.com/store/apps/details?id=net.onionsoft.hsptv.pdroute
アプリの名前柄、流行りに便乗して多くのユーザーにダウンロードしてもらったという形になったわけですが、
まぁ予想通りではあったが、計算速度があまりに遅すぎるというご指摘を多く頂きました。
その割にはちゃんと評価してくださっているユーザーもいて、親切だなとも思ったというのが感想です。

では早速、このアプリの問題点を全て挙げてみましょう
1、計算速度が遅すぎる
2、スクリーンショット取り込みができない
3、iphone、ipadだとメニュー画面に戻れない 
4、androidでは計算中に強制終了画面がでる 



1、計算速度が遅い
一番の原因は「全経路検索」をしているためです。
数学に「場合の数」という概念があります。
数学的に考えるなら、ドロップをあるルートで動かしたとき、一番コンボ数が多くなる経路を求めるには、すべての場合のルートを確認する必要があります。

ここでルートの最大距離を1マスとしたとき、全ての経路の場合の数は98通りとなります。
とりうる始点は30通り(横6マス×縦5マス)、そこからドロップ移動可能方向の上下左右4をかけ、30×4で120通りとなりますが、欄外にはみ出る経路の場合の数は考慮してはなりません。
例えば始点位置が一番左上の場合、そこから左、上へはもう移動できません。

同じように、ルートの最大距離が2マスとすれば、1マス移動の98通りのルートからさらに1マス上下左右へ移動可能なので4を掛けますが、先ほどと真逆の方向へは移動できません(戻る方向に行けばルート距離が1減るため)。さらに欄外へ行く経路を除外すれば236通りとなります。
以降ルートの場合の数は、 586通り、1452通り、3574通り、8764通り、21412通り、52220通り、127376通り、311224通り、760980通り・・と指数関数的に増えていくわけです。

ルート距離が12マスの場合、全ての経路のとりうる場合の数は1860172通りあります。
ハード的にはだいたいここらまでが限界です。
なぜならここらでスマホの使用メモリが200Mbを超えてしまうからです。
ルート1通りあたりに使うバイト数は、95byte。
内訳は、30個のドロップ(6種類)配列の格納で30byte。
同色ドロップが横2つ続いているときのみ0を表すいわゆる横差分値を格納する変数で30byte、同じく縦でも同じのを作り30byte。
これに加えルートの移動ログを格納する変数で4byte(1マス移動につき2bit)
さらに、ルートの先端部分つまり現在位置を格納する変数で1byte

スマホのメモリ容量は機種によりけりだが、スワップが発生すると劇的に遅くなるのでこれ以上のメモリ使用は難と考えられます。
また計算時間も非常識なものとなります。
1860172通りのルート全てで、コンボが発生するか、発生する場合は何色のドロップが何個何連鎖コンボが発生するかを計算する必要があるので、2.4GhzのノートパソコンのCPUでも3分近くかかります。
スマホのCPUは約1Ghz前後であるしキャッシュもあるのか無いのかよくわからないので、最大12マスの設定で全経路検索をすれば10分近くかかることとなります。

まぁただでさえ非常識な時間なのでこれ以上は不可能でしょう。
全経路検索にしなければ計算時間は劇的に早くなるわけですが、それではコンボの精度が悪化してしまうという欠点があります。
それでも計算速度が早くなる利点は非常に大きいですが、それは以下に示す問題点により、あえて精度をとったという経緯がありました。


2、スクリーンショット取り込みができない
これは、ただただ私の技術不足のため、という一言につきます。

アプリを開発するにあたり、取る方法は2通りあります。
ひとつはHSPdishを使い開発すること、もうひとつはxcodeでobject c、eclipseでjavaを使い開発すること。
後者ではスクリーンショット読み込み機能が実装できます。
私にはHSPで作るしか能力がなく、残念ながらスクリーンショット読み込み機能が実装できませんでした。

また私の機種にはそもそもスクリーンショットを取る機能がなく、そのような機種でもルート解析ができるようにしたいという思いがあったのも事実ですが、やはりスクショ機能はあったに越したことはありません

つまり、ドロップ配列を手動で入力するしかなく、ここでユーザーに多くの労力を強いることが容易に想像できました。
時間と労力をかけて入力しても、計算が一瞬で終わってしまいその割にはたいしたコンボ精度が得られなければ、意味がありません。

時間と労力をかける価値がある状況というのは通常の状況ではあまりありえなく、詰みそうな場合やこの1ターンで戦局が大きく変わる場合など、ここ一番という場面に限られます。
そういうときは、一回だけすごい時間をかけても最大コンボルートを導き出せればいいのですから、計算時間より精度を優先したシステムの方を選択し、結局このような非常識な計算時間になりました。


3、iphone、ipadだとメニュー画面に戻れない
※最新情報で、「ホームボタン二度押し、下の段に出てくるアプリアイコンを消してあげると再度アプリ起動した時に解析できる」ようになっているそうです。

これは評価コメントを見てはじめて気がついたのですが、iphone、ipadの場合、ホームボタンを押したときの動作として、アプリが終了するのではなく、アプリが待機状態になるという性質を理解していないために生まれてしまった不具合でした。申し訳ありません


4、androidでは計算中に強制終了画面がでることがある
これは私が、計算プログラムにwaitを入れるのを忘れたため、タスクがビジー状態になっているためです。
なんという初歩的なミス・・
対策方法は、エラーメッセージが出たら「待機」ボタンを押して待つ、です。いつか結果画面が表示されるでしょう

毎年のHSPプログラムコンテストの作品でもそうですが、私はwaitを 入れるのを忘れる癖があるようです
いい加減直したほうがいいですね
申し訳ありません



なにはともあれ、リリースして3週間くらい経とうとしていますがとても多くのダウンロードと評価をありがとうございます。そして沢山の不具合に関しては、申し訳ございません。

HSPdish製のアプリということで、アプリランキングでそこそこいい所までいけたというのは、HSPの評価を上げるまぁまぁいい話題になるのかなと思う反面、計算が遅かったりと評判が悪いのを見ると逆にHSPの評価を下げてしまう結果になるのではと少し恐れてもいます・・・

まぁアプリの名前は少し誤りがありますからね
もっと誠実につけるとしたら「移動距離が12マス以内で、コンボ数がそれ以上多くなるようなルートがないことを証明するアプリ」とでもなるのでしょうか。そのルートには移動距離制限がつくため、人間がルートを考えた場合13マス以上でもありうるので、人間が考えたほうがコンボ数が多くなる可能性もあります。

だから役に立つ場面なんてのはほとんどないかもしれません。



そういえばHSPdishが出た当初どこかで、その便利さを称えるコメントかなんかで、「これのお陰でしょうもないアプリがたくさん世に放たれるのか」といったのを見た記憶があるのですが、自分でまさにその通りにしてしまいました。



そして今後の抱負ですが・・
そろそろツールじゃなくてゲームを作りたいな・・

もちろんプラグイン開発も同時進行で
むしろプラグインを積極的に使ったゲームとか

裏機能というほどでもないが

なんか複写拳が好評でよかった・・・実は内心ハラハラしてた・・・使えるソフトって期待させておいてVICTORのソフトのほうが使えるじゃん、ってなりそ-とか考えていたけれど、心配しすぎたかな



今日は複写拳の裏機能の公開をします!

俺のブログを見ている人限定ってことになります・・・いやそんな大した機能でもないんだけどね・・



圧縮拳でもあったように「system.txt」の中身を変更すれば、表では決して使えないような裏機能が使えます!



まずアドバンスモードon/offのところの下の行の数字を1にすれば、次回起動時にアドバンスモードで起動されます!


すると下のようにモザイクがかけられるようになります!


仮眠プログラマーのつぶやき


やりかたは、モザイクって書かれたチェックボックスにチェックを入れ、左ドラッグでその範囲がモザイクで処理されます!



まぁアドバンスモードはそれ以外にもいろいろ細部に変更があったりします!



そもそもなんで裏機能っていうこんなややこしいことするのかというと、

まず企画、開発の段階で 「プログラマーはこうしたいけどプランナーはこうしたい」 っていう衝突が起きるんです・・・絶対

で、だいたいそういう時って、どっちも譲らない!

すると、どちらも満足するような条件を満たすには、 裏機能って言う都合のいい逃げ道的な機能を用意して、そこに 「プログラマーはプランナーに支配されずにすき放題やれて、プランナーは表の機能に自分の思い描いた企画を通せる」 って言うことで、裏機能が搭載されるワケデス



あ、でも裏機能は俺が自分のブログで言わなければ誰にも気づかれないわけで、俺のブログはあんまり見られることがない・・・つまり裏機能はほぼ自己満足で終わってしまっている・・・っていう悲しい現実に今気づきましたorz




やべ騙された!

またあのプランナーにそそのかされた(怒


ああ忌々しい!


もうこうなったら次作るとしたら、裏機能を馬鹿みたいに高機能なものにして、俺のブログを見て裏機能に気づいた人に思い知らせてやる!!!!あまりの高機能さに、プランナーが企画した表機能が糞だと思えるほどに。よし、裏機能だけ有償ソフトなみのクォリティを目指すぞ!!表は巻きグソみたいな超ちょー低機能にしてやるぜwwククク

・・・・・・・いやゴメンなさい半分冗談です・・・・・・ちょっとプランナーにイチャモンつけすぎました・・



さぁ次回の拳シリーズは何をつくろうかな


なぜかツールを公開することに

先日、メカマスター氏から画像変換ツールの作成の依頼を受けた。



なんでも、ブログ書いてて画像を貼り付けるとき、ネットで拾ってきた画像をアメブロにUPするため何枚も適度な大きさに縮小するのが大変だということらしいのだ




ツールの出来がよかったのか気に入ってくれて、公開することになった!わーい

やっぱり自分のプログラムが人の役に立つというのはうれしいもんだなぁ(‐^▽^‐)!!





のだが、ツールを作るにあたり痛感したことがあった・・



それは・・

機能と努力(=プログラミングした時間)がまったく比例しないことだ!



簡単なツールだしプログラムは一瞬で終わるだろうと最初思っていた自分が今では情けない・・・

最初は、jpg→jpgでどんな画像でも横サイズを300ドットに統一する、ということで開発がスタートした。



まず画像のサイズ変換。

これはgzoomという命令を使えば一瞬で終わる。いわばスクリプトの芯となるところだ。

これはアンチエイリアシングも自動でかけてくれるのでとても助かる。

これだけなら何ら問題ではない。



むしろ依頼ではjpgで読み込みjpgで出力をしろと言っている。この部分だ!



実はHSP単体ではjpgで読み込むことはできても、jpgで出力することはできない!!

なんなんだろうかこの仕様・・

可能にするには新しい命令セットであるdllを導入しなければならない。




このためだけに外部ファイル「hspcv.dll」が必要になりソースのサイズが30行程度だったのが170行にまで増大した!

まぁその差の140行分はコピペだからぜんぜん大変じゃないんだけど、それでも画像保存命令はhspcvのを使わなきゃいかんし、途端にソースが複雑になった。



普通HSPの実行ファイルは120Kb前後なのだが、外部ファイル「hspcv.dll」=1.66Mbがついたことによりファイル全体が十数倍のサイズにまで膨れ上がった!

そう、bmp出力でなくjpg出力にするためだけにだ・・




しかしこれは序章に過ぎない!!

jpg読み込みをするとき「ドラッグ&ドロップ形式」で読み込んでほしいという依頼をすっかり見落としていたのだ!

私は単純に「ダイアログ形式」で画像を読み込むとプログラムがすごい簡単なのでそれでプログラムを組んでいた。ところが、読み直して気づいて事態が一変!


またもやHSPの壁。

ウィンドウにドラッグ&ドロップでもってきたファイルは、HSP標準命令では扱えない!

ドラッグ&ドロップで画像データを読み込むにはWin32 API関数を使わないといけない!

用はめんどくさいのだ!


具体的にどのくらい大変なことになるのか。

まずダイアログ形式で読み込むときは

dialog "",16

picload refstr

こんなんでいい

2行だ。ほかにバッファの確保、いろいろエラー防止の機能がつけられてもせいぜい15行くらいだろう。


しかしドラッグ&ドロップ形式で読み込むとなったときは、llmodだったかなぁ、2種類のモジュールをインクルードしないといけない。


HSPでドラッグ&ドロップが可能になるまでにソーススクリプトは800行も増えた・・。

この800行はコピペだ

が、そのあとの処理はプログラムする側にゆだねられているので

結局そこが大変なのである。


上のような2行の命令ではすまなくなる

ドラッグされるまで10行くらいあるルーチンをループし続け

ドラッグされ終わると文字型変数にそのファイルのディレクトリが保存、数値型変数にファイル数が出力される

そしたらループを抜け出し、まずファイルの数を確認し文字型変数からディレクトリを一つ一つ抽出しなければならない

いろんな命令でそれらをやりおえて、やっと、

picload 命令が使えるようになるのだ。



こうした見た目とは裏腹にプログラムの世界の大変さは地味なところにある。



普通に見ると多分、アンチエイリアシングとか、表示されている赤球の移動の計算が大変なのだろうと思うかもしれない。

が、私が一番大変だったのは画像を読み込むとき、読み込めるデータかそうでないかを識別することだった。

それは結局実装できなかった・・・ユーザーの皆さんごめんなさい


面白い話ではないが、こんな地味な・・・と思うようなところにいつもプログラマーは頭を悩ませているということを言いたかった。なんとも理不尽なことにw。

あー書きまくったらすっきりした!





ところで完成した「一定サイズ圧縮拳」には裏技機能がある!

まず1回起動すると「圧縮済み画像」というフォルダができるはずだ。

そこには圧縮画像と、システムデータが保存されてある。

システムデータは「sdata.txt」という名前で保存されていて、それは画像形式やサイズを保存している以外に「jpg品質」という数値も保存してある。

この「jpg品質」だけはツールのほうで指定できないのでこれを知ってる人しか変更できない。

なんでこんなややこしいことしたのかというと話は長くなるが、メカマスター氏と話して、シンプルいずベストってことになったからだ。

この品質は標準で95に設定されているが、txtで1~100に書き換えることでツールに反映される。


だからなんだwってことかもしれないけど遊び心でっでいうことで・・・




PS

あくまでvictorに転がってるようなしょうもないツールですが、メカマスター氏のブログを見てくださっている人にこのツールをご贔屓していただくと幸いです!

ダウンロードはコチラ です

プロフィール

toropippi

記事検索
アクセスカウンター

    QRコード
    QRコード
    • ライブドアブログ