カテゴリ: program

ところでRoughAnimatorってRaughAnimatorとよく間違えるよな。ファイルの拡張子も.raだし。
とりあえず目立つバグは取った(つもり)。後はドッグフーディングの時間だ。
http://nekora.main.jp/soft/ra2psds/
これはRoughAnimatorというiPadなどのグラフィックツールのデータを連番のPSDファイルに変換するツール。RoughAnimatorのレイヤ構造を保ったまま他のグラフィックツールで加工したい時に使う。
PSDとはAdobe Photoshopの画像ファイル形式。RGBなら今時の大概のツールで扱えるので、レイヤ構造を持った画像ファイルのデファクトスタンダード。厳密には色やレイヤーのブレンド処理が微妙に違ったりするけれど今回はRoughAnimatorなので問題にならないだろう。
GUIとCUIがある。
本当は正月休みに作る筈だったけれど、ImageMagickが案外PSDの対応が適当だったり私がボーダーブレイクにかまけていたのでこんな事に。


このエントリーをはてなブックマークに追加 mixiチェック

何か正月頃からダラダラ作ってたやつ。GWに終わらせようと思って取り組み、大体終わった。GUIも付けた。本当はImageMagickのガワをちょちょいと作るだけで済む筈だったのにやってみるとImageMagickって実はPSD対応が割と適当だったので画像処理自体も自分で作る事に。そこからか。そしてまさか作ってる最中にRaughAnimatorがVer.2.01になってデータ構造がガラッと変わるとはな。Ver.1のファイル名でフレームの位置と場所を表現する方が賢いと思うんだけど。
残った課題は、Ver2.01データを処理するとBGが常に無視される(いや私はRoughAnimatorのBGは使わないから別に直さなくても良いんだが…そういう訳にも行くまい…)、同一レイヤ構造のフレームが連続する際には一つにまとめる場合の連番ファイル名が、嘘とは言えないが最適ではない。
後者は実際使う時に結構不便なので是非直したいが何か面倒そう…割とアドホックな対応になりそう。
他にも実際使い始めるとフレーム数をちょこちょこ変えるタイプだとしくじるパターンがありそう。まぁその辺はドッグフーディングしながら直せばよかろう。というか私以外に需要はないだろう。
そもそもMoho pro 13.0があそこまでバギーでなければ私だって全部Mohoでやるつもりだったのに。


このエントリーをはてなブックマークに追加 mixiチェック

アフィサイト更新用マザーコンピューターのJavaを15→16に変えたら、マザーコンピュータが誤動作して更新されなくなってしまった。s
まぁテストしてすぐに15に戻したからいいけど。今月は忙しいから調べている閑が無いが、まぁ別に15のままでも困らないので問題無し。LTSの17が出たら本気出す。
Effective Java 第3版
柴田芳樹
丸善出版
2019-05-15

このエントリーをはてなブックマークに追加 mixiチェック

1.コンパイルエラーの出る個所と、実際しくじっている場所が割と近い。
VC++、しばしばcore.hとかでアサーションが山ほど出るが、勿論core.h自体が悪い訳ではない。どこでしくじったかは、推理と直感、そして怪しい行をコメントアウトでコンパイルして探るのだ。時間かかる。
JavaはEclipse様がご指摘して下さる個所かその直近の参照先が違っている事が多め。
2.落ちる個所と、実際しくじっている場所が割と近い。
VC++、しばしばa=b;のような何の変哲もない所で落ちるが、勿論その行は問題無い。実は遥か彼方で行った、全く別の処理のmemcpyがまずいのだ。
Javaは、9割方、Exception起こした行で何かやらかしている。
3.Exceptionの利用が徹底している。
VC++にもtry~catchはある。あるが…Exceptionを返してくれるのは一部の意識高い人々が後年作った関数位。結局自分で戻り値を判定することになり、自分で投げて例外処理をまとめる位しか使いどころが無く。Javaで言うとOptionalみたいな感じ。機能はあるんだけれど一部の意識高い人々以外は使わないので今一つ有効に機能せず。
4.ログファイルがあてになる。
VC++、落ちる時はいきなりプロセスがOSに抹殺されるのでログをディスクにflushする間が無い。こまめにflushするとflushだらけになるし。でもまぁ標準出力はそこそこあてになる。
Javaは落ちると言ってもJVMが文句を言っているだけの事が多いし、前述のExceptionが徹底しているからFlushするチャンスも多い。
5.文字列の扱いが簡単
VC++、char*とかwchar_t*とかTCHARとかLPTSTRとかLPCTSTRとかstd:stringとかCStringとか文字列モノが多い。しかもAPIの引数の都合により割と頻繁に変換せざるを得ない。超面倒。しかも文字列とワイド文字列とマルチバイト文字列が別々にあり、あまつさえ最後のは環境依存。
Javaは兎に角全部UTF-16でStringだ。気にするのはI/Oの時だけだ。

ちなみにVC++の美点
1.__asmからのMMXの特に飽和加算命令が便利で速い(SSE以降は全く知らない。今はAVXと言うらしい)…が既に完全に忘れているので今は使える気がしない。
2.VC++製のWin32 DLLを呼び出すノウハウが豊富。
3.#ifdefはやっぱあると便利だわ。

今回はWin32のDLLを使いたいので使ったが、10年前に自分が作ったプログラムの改造なのに苦戦。Javaのぬるま湯ですっかり鈍っていたわ。
そういえばC#というのが、Javaのパチモンみたいな文法のぬるま湯でしかもWin32のDLLも割と簡単に呼び出せると聞く。が、今更移行も面倒だし。

Effective Java 第3版
柴田芳樹
丸善出版
2019-05-15

このエントリーをはてなブックマークに追加 mixiチェック

アルファ福笑いもごらんのとおり
http://nekora.main.jp/tmp/out0227.psd

まぁ今回はRoughAnimatorのデータを処理するためのものだからレイヤ名をファイルのあるディレクトリ名にするとか、日本語対応テストとか、PNGのサイズが不ぞろいの時の処理とかまだ色々必要だけれど、とりあえず大筋はできた。
画素が32bitだと行末のパディングが無いからいいよね。
それにしてもC++には苦戦させられた。他人のならまだしも10年前とは言え自分が書いたプログラムの改造なのに。やはり文法は似ていてもJavaとは似て非なるものよ…。


このエントリーをはてなブックマークに追加 mixiチェック

あれ?たしか無料という話では…と思ったらMicrosoftその人がロック解除方法を書いてた。
https://visualstudio.microsoft.com/ja/vs/support/community-edition-expired-buy-license/

何かサインインというものが必要なようだ。そういえば私はまだMicrosoftのアカウント持ってないわ。よくWindows 10でMSアカウントに切り替えろ切り替えろ勧められてるけどシカトしてローカルアカウント最強伝説を貫いておる。
が、まぁこの際作るか…。

Visual Studioパーフェクトガイド
ナルボ
技術評論社
2019-06-21

このエントリーをはてなブックマークに追加 mixiチェック

頼りにしていたImageMagickがあてにならず、無駄に苦難を乗り越えVC++でPNGを重ねてPSDを吐く実装を着々と進めているが、 https://psd-tools.readthedocs.io/en/latest/ というPython向けのライブラリがあるそうな。ぐぬぬ。何か簡単そう…というか既にできているJava部分も、C++にまとめるのはまっぴら御免だがPythonにまとめるのは許容範囲だ。

使用例はこれか。
https://hawk-tech-blog.com/python-install-psd-tools/


このエントリーをはてなブックマークに追加 mixiチェック

マイクロソフト謹製のサンプルから抜粋・改造でできた。
https://docs.microsoft.com/ja-jp/cpp/text/how-to-convert-between-various-string-types?view=msvc-160

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

wstring  charTowstring(const char* orig)
{
    // 確保するワイド文字用バッファのサイズは、バイト数ではなく文字数を指定する。
    size_t newsize = strlen(orig) + 1;
    wchar_t* wc = new wchar_t[newsize];

    // 変換.
    size_t convertedChars = 0;
    mbstowcs_s(&convertedChars, wc, newsize, orig, _TRUNCATE);

    wstring ret(wc);
    return ret;
}

C++面倒…。というか上記のもretのスコープに自信なし。
wstring.valueOf(char[] data)とかあって然るべきではないかね。というか寧ろcharを引数に取るコンストラクタがあるべきでは。

[改訂第3版]C++ポケットリファレンス
湯朝 剛介
技術評論社
2018-02-15

このエントリーをはてなブックマークに追加 mixiチェック

PSDのフォーマットはhttps://www.adobe.com/devnet-apps/photoshop/fileformatashtml/
ImageMagickのタコ助の吐くPSDと違い、ちゃんとPaintGraphic2やMedibangPaintで読み込める由緒正しいPSDである(全データゼロの透明だけど)。

http://nekora.main.jp/tmp/out0223.psd

ちょっと本気をだしてコンビニまで行ってソースを印刷したら忽ち直ったが、やはりコードレビューは紙に限るな。見る前から印刷する動作だけで2,3思いついたりするし。

因みにその後char* から wstringへの変換に苦戦。先は割と長いかも。C++は何でこんなに文字の扱いが辛いのか。wstring.fromChar(char*)とかあってもよさそうやんけ。というかTCHARとかLPCTSTRとか_Tとか多過ぎて訳が分からんわ。

https://docs.microsoft.com/ja-jp/cpp/text/how-to-convert-between-various-string-types?view=msvc-160
というのを見つけた。あとで読む。



Paintgraphic 4 Pro(最新)|Win対応
ソースネクスト
2018-07-13


このエントリーをはてなブックマークに追加 mixiチェック

私はロジックを作る前にまず関数の最初と最後に「はじまた」とか「おわた」とか何とかログを出さないとやる気が出ないのでVC++用のlog4j的なものを探した。まぁ今時#ifdef DEBUG printf(..でもないだろう。
log4cppという実にそれっぽい名前のものがあるにはあったが使うには自分でコンパイルする必要がありコンパイル失敗。そういえばSourceForge時代のOSS民は何故かDLLであろうともビルド済みバイナリを置かない習慣だった。その点Javaの人はOSSと言いつつもjarはしっかりMavenとかに置く風習があって有難い。log4cppにはVC++5,6,7用のslnも付いているというのにそれでビルドできぬとは解せないがまぁここに時間をかけても仕方ないので諦める。昔のOSS民はMicrosoftを何となく敵視していたのでこういう所は不親切で、結構makeなりヘッダなりを自分で手を入れないと駄目な事がママある。
他を探すとspddoc https://github.com/gabime/spdlog というのがあった。githubだし比較的最近のだろう。こっちはzipを展開してできるincludeをプロジェクトのインクルードディレクトリに加えればOK。素晴らしい。
0212

あとは上記のページのサンプル通り。
サンプルが何も考えずともまず動くのは重要だ。コンパイルが通らないなど言語道断。

スラスラわかるC++ 第2版
矢沢 久雄
翔泳社
2018-07-17



このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ