<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>飴屋</title>
		<link>https://soft.candychip.net</link>
		<description>飴屋の活動をご紹介しています。</description>
		<language>ja</language>
		<copyright>Copyright 2026</copyright>
		<lastBuildDate>Fri, 09 Oct 2026 10:42:26 +0900</lastBuildDate>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<item>
			<title>Chromaphonic</title>
			<description><![CDATA[アプリ情報

:アプリ名|Chromaphonic
:公開場所|details?id=net.candychip.colorofsound

プライバシーポリシー

プライバシーポリシー

概要
日本語 ja

色で音を覚える、新感覚の音感トレーニング
「なぜこの音は青い気がするんだろう？」——絶対音感を持つ人の中には、音を聴くと色が見える人がいると言われています。Chromaphonicは、そんな音と色が結びつく感覚（共感覚）を、絶対音感がなくても後天的に鍛えられないか、というコンセプトから生まれたアプリです。

12音階を12色の色相環にそのまま対応させ、同じ音は常に同じ色で表示されます。「ドは赤、レは黄」というふうに音と色の結びつきを繰り返し体験することで、音を聴くだけで色を思い浮かべたり、逆に色から音名を当てられるようになることを目指します。

【自由演奏】
好きな鍵盤を自由に鳴らして、音と色の対応を体で覚えましょう。黒鍵なしの7音鍵盤から、全オクターブを鳴らせるUnlimitedモードまで4種類のキーボードを用意。

【自動再生】
画面いっぱいに音の色が広がり、少し遅れて音名が表示される、眺めるだけのトレーニングモード。メトロノームが拍を刻みながら、次々とランダムな音に切り替わります。

【クイズに挑戦】
「色当てクイズ」「音名当てクイズ」の2種類、3段階の難易度で実力を試せます。音名当てクイズは反応タイムを記録し、自己ベストのランキングで成長を実感できます。

【和音演奏（アプリ内課金で解放）】
メジャー・マイナー・ディミニッシュ・オーギュメント・ドミナント7th・メジャー7th・マイナー7thの7種類のコードに対応。和音の構成音の色を一列に並べて表示するので、「このコードの響きはこの色の組み合わせ」という感覚も養えます。自動再生・自由演奏・クイズすべてで利用可能。

基本プレイは無料（広告表示あり）
買い切り課金1回で広告オフ＋和音モードすべて解放（サブスクなし）
日本語・英語表示に対応

絶対音感がなくても、色を通して音楽をもっと身近に。今日から新しい耳を育ててみませんか？

English en

Learn music by color — a new way to train your ear
Some people with perfect pitch say they "see" color when they hear a note. Chromaphonic explores whether that pitch-color connection can be trained deliberately — even without perfect pitch.

The 12 chromatic notes map directly onto a 12-hue color wheel, so the same note always renders as the same color. By repeatedly experiencing "C is red, D is yellow-green," the goal is to build a real association between sound and color — eventually recalling a color just by hearing a note, or a note just by seeing its color.

FREE PLAY
Tap any key and explore freely. Choose from 4 keyboard modes, from a simple 7-note (no sharps) keyboard to an Unlimited mode spanning every octave.

AUTO PLAY
The screen fills with the color of the note being played, and the note name fades in a moment later — a hands-free way to just watch and listen. A soft metronome ticks the beat as it cycles through new notes.

QUIZ
Two quiz types — Color Quiz and Note Name Quiz — each with 3 difficulty levels. The Note Name Quiz also tracks your response time, with a personal-best ranking to watch your progress.

CHORDS (unlocked with a one-time purchase)
Play 7 chord types — Major, Minor, Diminished, Augmented, Dominant 7th, Major 7th, and Minor 7th. Each chord's notes are shown side by side in color, so you can start recognizing chords by their color combination, too. Available across Auto Play, Free Play, and the Quiz.

Free to play, with ads
One-time purchase removes ads and unlocks all chord modes (no subscription)
Available in English and Japanese

You don't need perfect pitch to bring music closer through color. Start training a new way of listening today.


更新履歴

1.1

We've adjusted the volume to match the pitch.

音高に合わせて音量を改善しました

1.0

First release

最初のリリースです]]></description>
			<link>https://soft.candychip.net/Chromaphonic</link>
			<guid>https://soft.candychip.net/Chromaphonic</guid>
			<pubDate>Fri, 09 Oct 2026 10:42:26 +0900</pubDate>
		</item>
		<item>
			<title>開発日記/2026年の日記</title>
			<description><![CDATA[2026/10/6

最近、企業がサイバー攻撃にあって、個人情報流出の報道が連続して湧いてきてますね。多分、露見してないだけで、暗数はもっと半端ないんでしょうけどね。中小企業はまぁ、セキュリティにかけるお金がなくて、手が回らないという事情はわかります。（そもそもコスパ的にターゲットになりにくくて問題になってないのかも？）ただ大企業・有名企業はもうちょっとお金をかけてもいいのかもしれません。個人情報は最近は漏洩しても「お詫び」で済ませる傾向があるので、大企業ほど経済合理性を追求して、そこに大金は使わないのかもしれません。

今のセキュリティ最前線は、攻撃も守護もAIを使ったものになってきていると思います。ボットが昔より賢い気がしますもんね。gitのリポジトリまで気を付ける時代ですもんね。私のプライベートな雑コミットは危ういかもしれません。

というわけで、AIにちょっと診てもらうことにしました。一応、ちゃんとセキュリティは意識してプログラムを書いていたつもりですが、小さいコンテンツでささっと書いたプログラムにXSSの穴がみつかったり、構造がバレない前提で書いていた部分が見つけられたりしちゃいました。「そんなことされるはずがない」が通用しない世の中なので、穴は事前にすべて埋めていくつもりでやった方がよさそうですね。

気を付けるべき具体例をここに書くこと自体が、うちのシステムの穴をさらすことになりかねないので、詳細は秘した方がいいのかな。


2026/10/1

とりあえず、まずはクレジットカードの利用明細をインポート形式データに変換してやよいの青色申告に食わせてみたところ、うまくいきました。利用明細には業務とは関係ない項目も混ざっているので、それを除去する工程さえ入れれば、あとは記帳内容のパターンも限られているし問題はないと思う。最初の一回はさすがに検算的にデータチェックを人力で行ったけど、これは任せても大丈夫なやつでした。

次にさっき銀行の通帳データをインポート形式データに変換したんですが、こっちもあっさりうまくいきました。売掛金もちゃんと記録されている！わ～、これもう人力では二度とやりたくないかも！

となると・・・次はレシートの山を何とかしてくれる仕組みを考えたいけど・・・カメラとOCRからだよなぁ・・・最近は取引内容をQRコード化してレシート印字してくれるレジもあるから、そこから攻めたらいいだろうか。それか現金取引を極力抑えるのがいいんだろうか。○○Pay系はどの程度、利用履歴を保持してくれるんだろう？証拠能力とかも今と昔じゃ違うんだろうか？ぶっちゃけ、スマホの中に「ポイント」を扱うアプリが大量にありすぎてお得に買い物するのが困難なので、国主導でなんとかしてほしい気持ちはあります。手に障害があると片手をスマホ操作に取られると、もう何にもできないんですよね。レジ袋にも入れてくれないからね、今は。苦労してると見かねて代わりにやってくれる店員さんもいるんだけど、本当に「あなたは神か」って思いながら、お礼を言っています。またそのお店に行く動機にもなるんだけど、もうその店員さんには会えないのはなんでなの？（脱線）

AIで納税は遠くない未来だとは思うんですが、抵抗勢力がいくつも思いつきますね。でも、個人事業主程度の帳簿作業なんて、かかった時間の割りに得るものも少なそうだし、パパッと勝手にやってくれるのがいいなぁ。仕入れがある業種とかはまた違うのかなぁ。

2026/9/27

個人事業主なので、会計処理で難しいことをやる必要はなく、やよいの青色申告（古いバージョンのもの買い切り版）に収支をポチポチつけています。往年の名プレーヤーである弥生さんの製品ですから、とりあえずなんでもできるんですが、その分、私には一生不要な機能もついていて、余計な項目に目を奪われちゃって作業効率に影響があるなって思ってました。会計ソフト自作も考えてみたんですが、AIに相談したら「やめとけ」と言われた（意訳）ので、やめておきました。まぁ、きっとよくわからない税制とかいろいろ絡んでいるんでしょうね。で、さっき入力作業を始めようと思って、ソフトを起ち上げてみたものの、あまり楽しい作業ではないのでウダウダしていたら、画面のメニューに「インポート」「エクスポート」っていう項目を見つけました。これはもしやデータを外部システムとやり取りできる仕組みでは！？

ということで、気になってちょっと調べてみました。どうも弥生インポート形式というテキストファイルの仕様が定められていて、「取引データ」と「期首残高データ」を表現できるそうです。「取引データ」なんて、ポチポチ面倒に思いながら入力していたあれですよね・・・自分用にカスタムされた入力システム作れちゃうじゃん！以下、弥生公式サイトより「取引データ」の仕様です。

|列|条件|項目名|桁数|型|備考|h
|1（A）|必須|識別フラグ|4|文字|次の中から設定する仕訳にあった適切な番号を半角数字で入力2000・・・1行の仕訳データ2110・・・複数行の仕訳データ　　1行目2100・・・複数行の仕訳データ　　間行2101・・・複数行の仕訳データ　　最終行取り込める仕訳の行数は20行まで|
|2（B）||伝票No|-|数字|取り込まない|
|3（C）||決算|-|文字|取り込まない|
|4（D）|必須|取引日付|10|日付|西暦または和暦日付に限る（例）2019年7月1日の場合、次のいずれかで入力「20190701」「2019/07/01」「2019/7/1」「R.01/07/01」「R.01/7/1」「R01/07/01」「R01/7/1」複数行の仕訳データの場合は1行目の［取引日付］で取り込まれます取り込める期間に制限ありインポートする際の制限事項|
|5（E）|必須|借方勘定科目|10|文字|10文字を超える部分は切り捨て、その他制限ありインポートする際の制限事項|
|6（F）||借方補助科目|15|文字|15文字を超える部分は切り捨て|
|7（G）||借方部門|-|文字|取り込まない|
|8（H）||借方税区分|-|文字|税区分や経理方式、請求書区分（インボイス用の項目）などを組み合わせた形式で記述記述形式は、 インポートデータの税区分 を参照してください＜税区分を指定できない勘定科目＞［流動資産］タブの「現金・預金」カテゴリの科目・［その他］タブの科目（「固定資産」を除く）・「売掛金」「買掛金」「未払金」「未収金」「クレジットカード」|
|9（I）|必須|借方金額|9|金額|税込金額を入力整数（9桁まで）、マイナス不可複数行の仕訳データで、借方勘定科目がない場合でも必須借方勘定科目がない場合は「0」を入力|
|10（J）||借方税金額|9|金額||
|11（K）|必須|貸方勘定科目|10|文字|10文字を超える部分は切り捨て、その他制限ありインポートする際の制限事項|
|12（L）||貸方補助科目|15|文字|15文字を超える部分は切り捨て|
|13（M）||貸方部門|-|文字|取り込まない|
|14（N）||貸方税区分|-|文字|税区分や経理方式、請求書区分（インボイス用の項目）などを組み合わせた形式で記述記述形式は、 インポートデータの税区分 を参照してください＜税区分を指定できない勘定科目＞・［流動資産］タブの「現金・預金」カテゴリの科目・［その他］タブの科目（「固定資産」を除く）・「売掛金」「買掛金」「未払金」「未収金」「クレジットカード」|
|15（O）|必須|貸方金額|9|金額|税込金額を入力整数（9桁まで）、マイナス不可複数行の仕訳データで、貸方勘定科目がない場合でも必須貸方勘定科目がない場合は「0」を入力|
|16（P）||貸方税金額|9|金額||
|17（Q）||摘要|30|文字|30文字を超える部分は切り捨て（半角全角問わず）|
|18（R）||番号|-|文字|取り込まない|
|19（S）||期日|-|日付|取り込まない|
|20（T）||タイプ|-|数字|取り込まない|
|21（U）||生成元|-|文字|取り込まない|
|22（V）||仕訳メモ|-|文字|取り込まない|
|23（W）||付箋1|1|数字|0（指定なし）～5以外の値の場合、取り込まない|
|24（X）||付箋2|-|数字|取り込まない|
|25（Y）||調整|-|文字|取り込まない|
|26（Z）||借方取引先名|15|文字|15文字を超える部分は切り捨て（半角全角問わず）|
|27（AA）||貸方取引先名|15|文字|15文字を超える部分は切り捨て（半角全角問わず）|

試しに、これまでのデータをエクスポートしてみると、カンマ区切り、改行文字はCRLF、文字列値・空値はカンマ区切りって感じで、補助科目なんかも辞書に登録されている名目をそのまま入力すればよさそうです。あと、Shift_JISですね。（間違えたらえらいことになりそう）あー、これは何か楽するためのシステムが組める予感！

追記

上に挙げたのはオンライン版の仕様だったみたいです。subcontents.html?page_id=18545&grade_id=Blueを別に発見しました。

26（Z）借方取引先名
27（AA）貸方取引先名

↑この項目が追加されてるのかな？

2026/7/22

Google Playから古いバージョンのAndroidがターゲットになってるよって通知がきました。8月中に直せとのこと。まぁ、ターゲットの数字を変えればいいだけでしょ、って思って素直にターゲットバージョンを37に上げたら、プログラムの一部機能が動かなくなりました！

CatLogを眺めながら、どうも通信でタイムアウトが起こりだしてるなと、問題に目星はつきましたが、原因がわかりません。ローカルネットワークへのアクセスが滞っているから、セキュリティ関連の何かかなと予想しつつ、Geminiさんと話し合ってみたらやはり、ターゲットのバージョンを上げたことで、''ローカルネットワークにあるデバイスへの通信がデフォルトで遮断される''ようになったと教わりました。SSDP通信はお目こぼしがあったみたいなんですが、TCP通信は厳格に運用されているようです。

新しい権限 ACCESS_LOCAL_NETWORK および NEARBY_WIFI_DEVICES を加えたら、許可取りダイアログを経て、ローカルサーバーへアクセスできるようになりました。

2026/7/2

もう長いことAIが開発に入ってきて、プログラミングに関するノウハウが増えにくくなってきています。AIへの指示の出し方やら、トークンの勘定の技術ばかりが研ぎ澄まされてきて、プログラマーぶってる自分がちょっと滑稽に思えてくるこの頃です。特にこの状況に否定的なわけではなく、まぁ、手が不自由なので、キーボードを叩く量が減るのはうれしいことです。それから、これまで手を出してこなかった分野のことも、やってくれるのが新鮮です。

人間がこれまでやってきたことは本当にうまくやってくれるので重宝してくれるのですが、あんまりやってこなかったことはそこまで万能じゃないなという印象もありまして、誰もやらなかったようなことへのチャレンジングは相変わらず自分主導で楽しくやっています。音とか3Dとかもっと身近に扱えるようになると思いますよ、これから。それから大量のデータを人間の言葉で指示して整理させられるのもいいですね。貯めるだけ貯めて未整理のまま死んじゃいそうなアレコレをちょっとずつ片付けてもらっています。やってることは生前遺品整理みたいなんですが、これをやっておくと次のアクションへの体が軽い！

Claude Fable 5が米政府に止められたときに、多くの人と同じように衝撃を受けて、「AIが使えなくなったら」っていう最悪の状況を想定して、対応手段を多くの人と同じようにローカルLLMに求めるのですが、あれは大手のAIにはどうしても規模では勝てないので、使われ方がまたちょっと変わってくるのかなって思いました。用途によっては全然使えますもんね。

でも、AIの達人になりたいわけでもなく、AIの知見もまた陳腐化が早そうで、どこかに書き残して構成に伝えたいことがあんまり思い浮かばないんですよね。何かまた新しい切り口が思いつくでしょうかね？


2026/3/14

長文を書いていて、途中でプログラムがハングアップする・・・最近あんまりなかったんですが、昨日久しぶりに発生しました。Windows端末でNAS関連のアクセスがうまくいかなくて、ファイラーとテキストエディタとビデオプレイヤーを巻き込んで反応しなくなっちゃいました。テキストエディタはTeraPadです。保存処理を試したんですが、半分くらい本文が保存された状態でtxtファイルが終わっていました。久しぶりの絶望感でした。

プログラムのGUIは完全に無反応で半分白っぽく描画されています。いつもなら諦めるのですが、今回ちょっとだけ抗ってみることにしました。タスクマネージャーを開いてプロセスが残っていることは確認できました。できそうなことは・・・''メモリダンプファイルの作成''くらいかな？TeraPad.DMPという200MBほどのファイルができました。試しにこれをTeraPad自身に開かせてみましたが、ファイルが大きすぎてダメでした。ノートパソコンの電池が尽きそうなのでこの日は諦めて寝ました。

翌日、デカいファイルを開けそうなエディタとして、VS Codeを試してみました。・・・開けたけど、200MBの制御文字だらけのバイナリの塊から何をどう探していいのかわかりません。ここは一旦AIさんに聞いてみましょう。

:長文書いてたTeraPadがハングアップして保存が中途半端になっちゃいまして、とりあえずメモリダンプだけとっておいたんですが、テキストは復旧できるでしょうか？|TeraPadがハングアップして保存が中途半端になってしまった場合、メモリダンプからテキストを復旧できる可能性はかなりあります。ただし、成功率は状況によって大きく変わります（70〜90%くらいの感覚で、多くの人は取れてますが、100%ではありません）。TeraPadは軽量エディタの中では比較的素直にメモリ上にテキストデータを保持していることが多く、Notepadより復旧しやすい部類に入ります。...

いけそうな感じの回答！とりあえず進められた順に試してみます。まず、stringsコマンドを試します。これはファイルから文字列だけ抜き出すコマンドだそうです。デフォルトでも入ってましたが、Sysinternals Strings（Microsoft公式ツール）を勧められました。こっちには64bit OS用にstrings64.exeが同梱されており、-uオプションでユニコード文字も対応できるとのこと・・・しかし、日本語は全然拾えませんでした。文章中の英数字は拾えたので、多分、データとしては残ってるんじゃないかと思います。

次にバイナリエディタHxDを試してみます。200MB中身を見たくはないので、先ほど見つけた英数字をヒントに検索してみます。ここで気が付いたのですが、英数字のお尻にヌル文字がついていました。これはUTF16-LE（リトルエンディアン）の特徴と一致する！ってAIさんが我がことのように喜んでました。とりあえず、この辺かとあたりを付けた場所を選択して「ファイル > 選択範囲を保存」でテキストファイルとして保存してみます。

さて、バイナリを含んだUTF16-LEテキストファイルを何で読もうかと思いましたが、VS CodeはUTF16-LEも扱ってくれました。これでうまくいきました！復旧された文章をTeraPadにペーストして一件落着です。（時間はかかってしまった）うまくいったので。今後はメモリダンプを念のため保存しておくことにしようと思います。

2026/2/21

先ほど新しいAndroidアプリ「カーリングゆるくない」の公開申請作業を行いました。冬季オリンピックがそろそろ閉会式となって、この寝不足生活にも終止符が打たれそうですが、ウィンタースポーツの中でカーリングが一番視聴時間が長い私です。ロコ・ソラーレ（チーム）がメダルを取って改めて注目が集まるカーリングですが、フォルティウスっていうロコ・ソラーレの天敵みたいなチームが今回のオリンピックに出場して、大方の予想ほどにはパフォーマンスが上がんなかったんですよね。で、素人なので自分ならあーする、こーするをいろいろ妄想してたわけですが、実際どうなのかちょっと検証アプリを作ってみたのでした。選手の目線でいざ投石しようとすると、ハウスまでなんと遠いこと・・・。みんなこんなこと平気でやってのけてるのかっていう気分と、トップレベルのチームの精度の出し方がさっぱりわからない気持ちで包まれました。

せっかくなので、公開してみますので、何か「そうじゃない」があれば教えてください。

2026/2/13

先日ついにjQueryのメジャーバージョンが''4''に上がりましたので、使用サイトでちょこちょこ交換作業を行っています。手厚かった後方互換性をいよいよ切って、モジュールとしてスリムに軽快になるくらいの印象でいたので、そんなに問題にならないだろうと思っていて、実際にそれほど問題が出なかったのですが、地味にカットされたdeprecatedメソッドを使っていたことがさっき判明しました。

jQuery.trim(string)

前後の空白文字をトリミングしてくれるメソッドですね。

今は''String.prototype.trim()''があるので、随分使った記憶はないのですが、太古のスクリプトの中に含まれていましたよ。

string.trim()

修正も大変ではなかったのですが、似たようなものあるかなと調べたけど、あんまりなさそうでした。（自分的には）jQuery.isArrayとか昔使ってたような気がしますが、探っても出てこなかったです。

ES Modules形式に対応したようなので、今度importしてみましょうかね。

2026/2/8

今日は衆議院の選挙の日ですが、あいにくの雪模様です。今回は注目度が高いのかわかりませんが、期日前投票に長蛇の列ができていたそうです。待たされるのと雪道を行くのとどっちがよかったかな？（午後に行く予定）冬季オリンピックも始まっていて、ジャンプ（ノーマルヒル）とスノーボード（ビッグエア）で早速メダルの色が三種類揃いました。これはしばらく生活時間帯が乱れちゃうな。

さて、今日はメーラーの話です。今どきはソフトウェアとしてPCに入れてない人も多いかもしれませんが、うちではメイン機にThunderbirdが入っていて、そいつを使っていたりします。スパムと広告とシステムからの定期動作通知がほとんどですが、お仕事のメールもいただくのです。ただ、長く使っている割に、あんまり操作方法を知らないなと思い、ちょっと調べたのでメモっておきます。今は3カラムで「メールフォルダペイン」「メール一覧＋メール詳細」「スケジュール＋TODOリスト」というレイアウトで使っているんですが、キーボードでフォルダと一覧を行き来してメールを選択したかったんですよね。何かフォーカスを二者で行き来するショートカットキーとかあるんだろうなと思ったら、ちょっと違ってました。

メール作成・送受信

新規メール作成：Ctrl + N（または Ctrl + Shift + M）
送信：Ctrl + Enter
下書き保存：Ctrl + S
受信トレイ更新（メール受信）：F5
印刷：Ctrl + P

返信・転送まわり

返信：Ctrl + R
全員に返信：Ctrl + Shift + R
転送：Ctrl + L

メール整理

削除：Delete
アーカイブ：A
既読／未読の切り替え：M
迷惑メールにする：J
タグ付け：1〜9（設定したタグに対応）
スター（重要）切り替え：S

検索・絞り込み

メッセージ検索（詳細検索）：Ctrl + Shift + F
クイックフィルターバー表示/非表示：Ctrl + Shift + K

メール一覧の移動

次のメッセージ：N
前のメッセージ：P
開く / 閉じる：Enter
スレッド展開/折りたたみ：*（テンキーじゃない方）

そのほか便利

アドレス帳：Ctrl + Shift + B
カレンダー：Ctrl + Shift + C
メッセージのソース表示：Ctrl + U

タグ付けは前からよく使ってましたね、そういえば。6番に「見積もり」と登録しておいてタグ付けして目立たせると、過去の見積もりを探すとき便利だなっていう利用方法です。
メッセージフィルタ窓をたまに開いて、広告メールをそれ用のフォルダに分類する操作をするのでショートカットキーがあるといいなって思ったんですが、それは用意されてないみたいです。「Alt」→「T（ツール）」→「F（メッセージフィルター）」でもいいけどさ。
私がやりたかったことはFキー、Bキーでメールの前後移動することでかなり満たされそうです。ペイン間のフォーカス移動も「F6」「Shift + F6（逆順）」でできるようです。

こんなに長く使うソフトなら、面倒くさがって調べずにいるより、知って楽できた方がよかったですね。今どきならThunderbirdがMCP的に動いてくれてLLMから叩けるようになっているとよさそうだけど、まだそれは自分で開発しなきゃならないみたいです。すぐ欲しいわけでもないから、なんか興が乗ったらやってみようかな。

]]></description>
			<link>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2026%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</link>
			<guid>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2026%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</guid>
			<pubDate>Tue, 06 Oct 2026 20:51:16 +0900</pubDate>
		</item>
		<item>
			<title>アラカルト</title>
			<description><![CDATA[アプリ情報

:アプリ名|アラカルト(A la carte)
:公開場所|details?id=net.candychip.alacarte

プライバシーポリシー

プライバシーポリシー

概要

事前に登録したメニューから、今日食べる食事を勧めるアプリです。


日本語

使い方
よく食べるメニューの名前をカードに書いておきます。
カードが並んだ中から食べたいものを選んでタップします。
実際に食べたことを記録しておくと、並び順に影響を与えます。

機能
カードを色分けしたり、食材タイプ（肉・魚・パン・麺など）のタグを付けたりできます。メニューの種類で分類したり、好きなメニューに好きな色をつけたり。フィルターボタンから色や食材タイプでワンタップ絞り込み表示もできます。
今、食べたくないメニューが並んでいたらスワイプして消せます。「今、食べたくない」も記録して並び順に反映されます。
1年前の今日、2年前の今日、1ヶ月前の今日、2ヶ月前の今日、1週間前の今日、2週間前の今日、昨日、一昨日に食べたメニューを振り返る思い出機能があります。
過去の食事記録の履歴が確認できます。食事記録には一言メモを残せます。
カードを長押しすると操作メニューが開き、「カードの編集」（色や食材タイプの変更、二度と表示させない設定）と「食べた記録を見る」を選べます。
「食べた記録を見る」では、そのメニューを食べた日時を新しい順に一覧表示。あわせて、どれくらいの頻度で食べているか、よく食べられている月はいつかを自動判定し、言葉で教えてくれます（記録が少なくて判定できないときは表示されません）。
1年前の今日食べたメニューを、毎日決まった時刻に通知でお知らせします（通知のオン/オフ・時刻は設定画面から変更可能）。


English

How to use
Write down the name of a menu you often eat on a card.
Select the one you want to eat from the lined-up cards and tap it.
Recording what you actually ate will affect the cards' order.

Functions
You can color-code cards and tag them with food types (meat, fish, bread, noodles, etc.). Classify by menu type, or just give your favorite menu your favorite color. The filter button lets you narrow the list down to a color or food type with a single tap.
Swipe away a menu card you don't want to eat right now. "I don't want to eat this now" is also recorded and reflected in the order.
A memory function lets you look back on what you ate one year ago, two years ago, one month ago, two months ago, one week ago, two weeks ago, yesterday, and the day before yesterday, all for today's date.
You can check the history of your past meal records, and leave a short note with each one.
Press and hold a card to open an action menu: "Edit Card" (change its color or food type tags, or hide it permanently) and "View Cooking History."
"View Cooking History" lists every time you've cooked that menu, newest first, and automatically tells you in words how often you cook it and which month(s) it tends to be cooked in most (this text is skipped if there isn't enough history yet to tell).
A daily notification reminds you what you cooked one year ago today (notification on/off and time can be changed in Settings).


更新履歴

1.9

Add a menu history screen

メニューの履歴画面を追加

1.8

Link to *Cooking Memory* from the notification about last year's menu
Notification feature bug fixes

1年前のメニューの通知から「メニューの思い出」にリンク
通知機能のバグ修正

1.7.1

Notification feature bug fixes
Target SDK change
Title bar background color change

通知機能のバグ修正
ターゲットSDK変更
タイトルバー背景色変更

1.7

UI refresh
Added feature to send scheduled notifications for meal menus from one year ago

UIの刷新
一年前の食事メニューを定時通知する機能を追加

1.6.3

Compatible with Android 15

Android 15への対応

1.6.2

Updated Privacy Policy link

プライバシーポリシーのリンク先更新

1.6

Compatible with Android 14

Android 14 に対応

1.5

New feature: Filter cards by swiping the Filtering button

新機能：絞り込み表示ボタンをスワイプして絞り込みできます

1.4

新機能：カードにバッジをつけられます
新機能：カードの色やバッジの種類で絞り込み表示ができます

1.3

メニューの思い出に「先月」「先々月」のメニューを追加

1.2

広告関連の修正

1.1

リリース！
]]></description>
			<link>https://soft.candychip.net/%E3%82%A2%E3%83%A9%E3%82%AB%E3%83%AB%E3%83%88</link>
			<guid>https://soft.candychip.net/%E3%82%A2%E3%83%A9%E3%82%AB%E3%83%AB%E3%83%88</guid>
			<pubDate>Wed, 23 Sep 2026 13:32:39 +0900</pubDate>
		</item>
		<item>
			<title>Chromaphonic/プライバシーポリシー</title>
			<description><![CDATA[対象アプリ名

Chromaphonic

提供元

飴屋

収集する個人情報

当該アプリの機能で直接収集する情報はありません。

ただし、アプリ内の広告表示にAdmobのサービスを利用し、アプリの配布にGoogle Playのサービスを利用しており、それぞれ必要な情報を提供しています。詳細は以下の「Googleのプライバシーポリシー」よりご確認ください。

参考：privacy

また、アプリ内購入（応用: Google Play Billing）を通じて決済情報を処理しており、決済情報自体は当方では保持していません。


個人情報の取り扱い

基本的にアプリを利用して直接個人情報を収集していませんが、サポート業務で連絡先の情報が収集されることも考えうるので、それらの副次的に収集された情報に関しては、以下のように対応します。

第三者には提供しません。
サポート以外には使いません。
収集された個人情報の削除の要請があった場合、必要がなければ消すようにします。

このポリシーに関して

将来的にポリシーに変更が生じる場合、このサイトでお知らせします。


（2026/9/17公開）
]]></description>
			<link>https://soft.candychip.net/Chromaphonic/%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC</link>
			<guid>https://soft.candychip.net/Chromaphonic/%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC</guid>
			<pubDate>Thr, 17 Sep 2026 03:14:34 +0900</pubDate>
		</item>
		<item>
			<title>飴屋</title>
			<description><![CDATA[このサイトについて

このサイトでは、「飴屋」の活動に関してご紹介しています。

飴屋は個人事業主として、千葉県浦安市で活動しています。

主な業務内容は、WEBサイトの制作、WEBシステムの制作、WEBコンテンツの制作、ソフトウェアの制作です。

ご関心のある方はお問い合わせフォームよりご一報ください。

tsubutanでもつぶやいています。

更新情報
Webコンポーネントについて記事を書き始めました。（2026/2/20）
Goについて記事を書き始めました。（2024/8/26）
WebGLについて記事を書き始めました。（2023/5/13）
Rustについて記事を書き始めました。（2022/9/20）
Kotlinについて記事を書き始めました。（2022/1/8）
WebAssemblyについて記事を書き始めました。（2020/12/20）
JavaScriptについて記事を書き始めました。（2020/11/11）
フロントエンドについて記事を書き始めました。（2020/4/13）
Gutenbergについて記事を書き始めました。（2019/4/13）
Vue.jsについて記事を書き始めました。（2018/10/22）

過去の更新情報

コンテンツ一覧


開発日記
お問い合わせ
Donation
プライバシーポリシー
リンク


公開中のAndroidのアプリ

乙女天秤
ニックネーム ミュージック
アラカルト
Scrap
PuzzleNote
MontageDraw
MinimalSooji
カーリングゆるくない
Chromaphonic


WordPressのプラグイン

Ameya Retouch


フロントエンド

Webコンポーネント
WebGL
WebAssembly
JavaScript
Vue.js
Gutenberg
Google Maps API


Androidアプリ

Kotlin


サーバーサイド

Go


その他制作

Leap Motionアプリ
facebookアプリ
WPF
mixiアプリ
OSVR
Flash3D
W-ZERO3 es
ソフトウェア制作




]]></description>
			<link>https://soft.candychip.net/%E9%A3%B4%E5%B1%8B</link>
			<guid>https://soft.candychip.net/%E9%A3%B4%E5%B1%8B</guid>
			<pubDate>Thr, 17 Sep 2026 03:05:24 +0900</pubDate>
		</item>
		<item>
			<title>ニックネーム ミュージック</title>
			<description><![CDATA[アプリ情報

:アプリ名|ニックネーム ミュージック(Nickname Music)
:公開場所|details?id=net.candychip.musicnicknaming

プライバシーポリシー

プライバシーポリシー

詳細

DLNAサーバー上の音楽ファイルにニックネームを付けて、その名前で呼ぶとChromeastで再生するアプリです。

使い方
お使いのLANからリストアップされた再生装置（Googlecast/Chromecast）を選択
お使いのLANからリストアップされた音楽ファイルサーバー（DLNA）を選択
音楽ファイルに呼び名をつける。
名前を呼べば再生開始！

更新履歴

1.25

Added the “Nickname List” screen
bug fix

「ニックネーム一覧」画面を追加
バグ修正

1.24

Support for calling nicknames from the “Shared” text

「共有」テキストからのニックネーム呼び出しに対応

1.23

Support for SDK 37

SDK 37への対応

1.22

Save main screen balloon logs and keep them displayed (up to 100 entries)
Re-execute actions by tapping balloon logs
Fixed source selection bug

メイン画面のバルーンログを保存し、継続表示（100件まで）
バルーンログのタッチで再操作
再生元選択バグを修正

1.21

UI refresh
Interactive display of system logs and microphone input logs

UIの刷新
システムログとマイク入力ログの対話形式表示化

1.20

UI Updated

UIの更新

1.19

Compatible with Android 15

Android 15への対応

1.18

Updated Privacy Policy link

プライバシーポリシーのリンク先更新

1.17

Compatible with Android 14

Android 14 に対応

1.16

New feature: Naming musics from free word music search

新機能：フリーワード楽曲検索からの命名

1.15

アイコン関連のバグフィックス

1.14

新機能：フォルダ内の音楽を「曲名」「アーティスト名」「アルバム名」で一括命名する機能追加
名前を付ける画面のレイアウトを変更
ソースコードの保守

1.13

アイコン画像の変更
Android 12に関する修正

1.12

ローカルサーバーへのhttp通信に関するバグを修正
音声入力に関するバグを修正

1.11

新機能：名前をつける曲目リストを音声で絞り込み
新機能：再生先を予め記憶させると自動的に選択
曲の再生リストの情報を一部キャッシュするように変更
]]></description>
			<link>https://soft.candychip.net/%E3%83%8B%E3%83%83%E3%82%AF%E3%83%8D%E3%83%BC%E3%83%A0+%E3%83%9F%E3%83%A5%E3%83%BC%E3%82%B8%E3%83%83%E3%82%AF</link>
			<guid>https://soft.candychip.net/%E3%83%8B%E3%83%83%E3%82%AF%E3%83%8D%E3%83%BC%E3%83%A0+%E3%83%9F%E3%83%A5%E3%83%BC%E3%82%B8%E3%83%83%E3%82%AF</guid>
			<pubDate>Fri, 11 Sep 2026 23:19:58 +0900</pubDate>
		</item>
		<item>
			<title>リンク</title>
			<description><![CDATA[関連サイト

自作サイトやお手伝いしたサイトをご紹介します。

:|多言語話者に憧れますが、全然しゃべれません。

:|演芸場で見る落語、楽しいです。興味を持って調べています。

:|いろんなカレーを発掘中です。

:|大相撲人気でチケットがとりにくいですが、双眼鏡を持って両国国技館に向かってます。

:|丸い生物に言葉を教えるとしゃべるようになるお遊びサイトです。

:|東日本大震災で大きな被害を受けた宮城県石巻市を単に復興するのではなく、被災以前よりも住みよい街を目指そうという活動を応援しています。WEB制作のお手伝いをしています。

:|理由あって今度ファイナルファンタジーに挑戦することになりそうなので、記録をつけることにしました。

:|お付き合いのあるWEB制作会社さんが、社会福祉に貢献しようと立ち上げたサイトです。私も制作のお手伝いをしました。

他にもたくさん作りましたが、実績がまとまってません・・・。


]]></description>
			<link>https://soft.candychip.net/%E3%83%AA%E3%83%B3%E3%82%AF</link>
			<guid>https://soft.candychip.net/%E3%83%AA%E3%83%B3%E3%82%AF</guid>
			<pubDate>Thr, 10 Sep 2026 21:26:12 +0900</pubDate>
		</item>
		<item>
			<title>乙女天秤</title>
			<description><![CDATA[アプリ情報

:アプリ名|乙女天秤(VirgoLibra)
:公開場所|details?id=net.candychip.virgolibra

プライバシーポリシー

プライバシーポリシー

詳細

体重や血圧を記録するアプリです。

更新履歴

3.04

Fixed duplicate step counts

歩数の重複計測を修正

3.03

Support for SDK 37

SDK 37への対応

3.02

Record weight and blood pressure together in Health Connect
Upscale shared decorative images

ヘルスコネクトに体重・血圧を合わせて記録
シェア装飾画像をアップスケール

3.01

Launcher problem solved

ランチャーの問題を解消

3.00
New design.
Information has been consolidated and displayed on the home screen.

デザインを一新しました。
ホーム画面に情報を集約して表示しました。

2.10

When data is absent from the listing screen, it is clearly indicated.

一覧表画面でデータが不在な時にそれを明示した

2.09

Trial feature: Added step counter
Ad delivery fixes

お試し機能：歩数カウンター追加
広告配信に関する修正

2.08

Compatible with Android 15

Android 15への対応

2.07

Updated Privacy Policy link

プライバシーポリシーのリンク先更新

2.06

Compatible with Android 14

Android 14 に対応

2.05

ツイート機能を共有機能へ変更
新機能：共有メッセージのテンプレートを更新可能に

2.04

累積的なバグの修正
最低血圧のグラフを表示]]></description>
			<link>https://soft.candychip.net/%E4%B9%99%E5%A5%B3%E5%A4%A9%E7%A7%A4</link>
			<guid>https://soft.candychip.net/%E4%B9%99%E5%A5%B3%E5%A4%A9%E7%A7%A4</guid>
			<pubDate>Thr, 30 Jul 2026 22:58:22 +0900</pubDate>
		</item>
		<item>
			<title>PP3トランスフォーマー</title>
			<description><![CDATA[はじめに
このソフトウェアを使用して、PostPet V3のペットデータの色やサイズを変更できます。

こんなことができます

ミニウサギをデカウサギに変更
ピンクのテディベアを土気色のテディベアに変更
ペットを豆粒サイズに変更。
ペットを二次元空間の住人に変更。

カンパ募集中
本ソフトウェアはカンパウェアとして公開しています。本ソフトウェアが気に入られた
方は、製作者への開発支援としてどうかよろしくお願いします。
詳しくはカンパウェアについてをご参照ください。

公開データ
ver.1.10
ダウンロード
現在、公開されていません。

改訂履歴
2006/12/16 ver.1.10 リリース
「設定ファイル書き込み」を繰り返すとdefault.pp3が壊れるバグを修正
前回の最終設定ファイルのパスを記憶するように変更
pp3transform.iniファイルの設定によって自動バックアップを可能に変更

ver.1.00
ダウンロード
現在、公開されていません。

改訂履歴
2006/12/03 ver.1.00 リリース


使い方
自動バックアップ機能
自動バックアップ機能を利用する場合は以下の手順で設定を変更してください。
PP3トランスフォーマーを一度起動してから終了すると、プログラムファイルの入ったフォルダに「pp3transform.ini」というファイルができます。
「pp3transform.ini」の中には「AUTOBACKUP」という項目があり、初期状態で「0」が設定されているのを確認します。
「0」を「1」に修正して、上書き保存します。

既知のバグ

自動バックアップ機能を使用した際にできるバックアップファイルの名称が「default.pp3」ではなく、「deafult.pp3」になってしまう。
バグにお気づきの方は掲示板にご一報いただけると助かります。


今後のバージョンアップ予定

今のところなし
]]></description>
			<link>https://soft.candychip.net/PP3%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%BC</link>
			<guid>https://soft.candychip.net/PP3%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B9%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%BC</guid>
			<pubDate>Thr, 02 Jul 2026 02:28:51 +0900</pubDate>
		</item>
		<item>
			<title>PP3アイテムビューワープラグイン：ワープイメージ差換機能</title>
			<description><![CDATA[操作
PP3アイテムビューワーを起動して、ワープアイテムデータが表示されている画面の上で右クリックしてください。コンテキストメニューに「ワープイメージの交換」と出るのでそれを選択すると、「名称等変更」「底面の交換」「環境色の交換」「側面1の交換」「側面2の交換」とサブメニューが表示されます。その中から行いたい処理を選択してください。

処理
名称等の変更
処理が開始されると、各項目を編集するダイアログが表示されます。
編集後、OKボタンを押すと変更が反映されます。
※IDを変更した場合は、ファイル名を手動で変更する必要があります。

画像の差換え
処理が開始されると、ファイル選択ダイアログが表示されます。JPEG画像を一枚指定するとワープアイテムデータに含まれる4枚の画像（底面、環境色、側面1、側面2）のうち指定のものと指定のJPEG画像を差し替えます。

差し替える画像は以下のサイズが標準のようです。
|底面 |縦512 x 横512|
|環境色|縦32 x 横32|
|側面1|縦256 x 横512|
|側面2|縦256 x 横512|

#img(http://hp.vector.co.jp/authors/VA040951/images/cwarp_sample.jpg,,clear)

試しに空模様な画像に差換えてみました。
画面はPostPet V3のものです。©Sony Communication Network Corporation

開発メモ
出現率・拾得率に「128」は不要

リリースノート
cwarp ver.1.05
ダウンロード
現在、公開されていません。

改訂履歴
2005/09/18 ver.1.05 リリース
PP3アイテムビューワーのバージョンアップ（ver.1.40）を受けた修正

cwarp ver.1.06
ダウンロード
現在、公開されていません。

改訂履歴
2005/10/09 ver.1.06 リリース
PP3アイテムビューワーのバージョンアップ（ver.1.50）を受けた修正

cwarp ver.1.10
PP3アイテムビューワー：ワープイメージ差替機能

ダウンロード
現在、公開されていません。

改訂履歴
2005/12/09 ver.1.10 リリース
ワープファイルの名称等、各種項目を編集できるように変更

おまけファイル
同梱のwhite_jp.p3wはこんなファイルも作れるよ、というサンプルです。
PostPet V3で実際にワープ先として機能することが確認できました。
]]></description>
			<link>https://soft.candychip.net/PP3%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%83%93%E3%83%A5%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%EF%BC%9A%E3%83%AF%E3%83%BC%E3%83%97%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E5%B7%AE%E6%8F%9B%E6%A9%9F%E8%83%BD</link>
			<guid>https://soft.candychip.net/PP3%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%83%93%E3%83%A5%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%EF%BC%9A%E3%83%AF%E3%83%BC%E3%83%97%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E5%B7%AE%E6%8F%9B%E6%A9%9F%E8%83%BD</guid>
			<pubDate>Fri, 19 Jun 2026 21:25:16 +0900</pubDate>
		</item>
		<item>
			<title>開発日記/2006年の日記</title>
			<description><![CDATA[2006/12/30
年末です。忙しいんだか忙しくないんだかよくわからない毎日が続きましたが、正月にはまったりしたいものです。

昨晩また一ついいネタを発見しましたので、多分PP3アイテムビューワーのプラグインに活かせると思います。数時間費やして勉強して、概要は掴めました。何の話かといいますと、家具に使用されているテクスチャに使用されている画像データの仕様に関するドキュメントを発見しまして、今までSusieプラグインを使って確認していたことが、自前のプログラムでもできるようになりそうだ、ということなんです。

最新のPP3アイテムビューワーでは、提供できずにいたテクスチャ表示プラグインもこれを機に焼きなおしてみたいと思います。で、余力があれば、テクスチャを入れ替えて変更できる機能もあったらいいなと思ってます。これは私の当初からやりたかったこととも合致しますので、動機面で今回の発見は何気に大きかったです。

例えば、お家の外装なんかはほとんどテクスチャで描いてあると思いますから、自由に家に落書きできると思うと楽しいですよね。（自分だけ？）

前に一度、テクスチャ張替え実験は行ったことがあったのですが、そのときは失敗し、原因も不明でした。今回の発見で、その失敗の理由も見えてきました。

一つ気になることがあるとすれば、テクスチャのアルファ値のことです。PostPetの描画エンジンが透明色をサポートしているのかわからないのですが、テクスチャデータ上では透明度を設定できるのです。もし、家の外装の透明度を100%に設定したら、外から家の中丸見えになるのかなぁ。なんて思ってますが、Windowsの標準画像データのBMPファイルは透明度のサポートはなかったと思うんですよね。テクスチャ変更機能を提供する際はBMPを使おうと思っていますが、テクスチャデータ自作したい人のニーズには「透明度の変更」も含まれているのでしょうか？

どっちにしろ、開発は来年以降の話です。
みなさま、よいお年を。

2006/12/11
PP3トランスフォーマーがなかなかVectorに登録されない。今年はVector絡みでちょっと嫌なこともあったので、Vector不信に陥りそうです。PP3アイテムリスターがPostPetのカテゴリーの人気順で上位に出してもらえるのはありがたいのですが、ソフトの簡単な説明文の部分が、全然関係ない別のソフトの表記と間違われているっぽいし。なんだかなぁ。

PP3アイテムリスターは長いことほったらかしているのですが、人気なら少し手を加えるべきなのでしょうか。多分、全面的に作り直すことになるので、あんまり気が進みません。

年末にきて、毎日がいっぱいいっぱいです。リフレッシュしたいなぁ。

PP3トランスフォーマーのようにdefault.pp3をいじって、何かできないか考えました。
ペットの性転換を行うソフト　→　×面白くない
ペットの種族を変えるソフト　→　×面白くない
ペットのおこづかいを増やすソフト　→　×それって問題なのだろうか？
ワープ地データを削除するソフト　→　△PP3アイテムビューワーと併用したらオリジナルワープ地作りやすいかも。

意外と面白いネタがなかったのでした。default.pp3よりもお友達帳データを解析した方が有意義かな。それかPostPetV3とメールサーバの通信をフックして、宝物を無意味に送信しまくるとか。（何か違う）

当初の目的であった、自作アクセサリを目指すべきなんだろうなぁ。まとまった時間がほしいなぁ。


2006/12/3
先日の日記に書いたペットの色やサイズを変更する件について、面白いのでアプリを作ってみることにしました。で、できました。とりあえず、いつものようにVectorに送って、登録されるまではこちら>PP3トランスフォーマーで先行公開です。

PP3トランスフォーマーという名称も、もうちょっとどうにかしたかったのですが、
思いつかず・・・。昔、トランスフォーマーっておもちゃ売ってましたっけ。
善悪のロボットが車や昆虫や恐竜に変形して戦うという男子の心を掴んで離さない
内容でした。何度かアニメ化されてますが、このトランスフォーマーとは
もちろん関係ありません。

一応、自分の環境では正常に動作したのですが、他の人の環境ではひょっとしたら、
データの構成が異なってて動かない可能性も0ではないです。未知のデータ領域も
まだ結構ありますし。とりあえず、イジる前には「default.pp3」ファイルを絶対
バックアップ取っておいてほしいです。

default.pp3の中には、装着プラグインのデータもあれば、メールアカウントの
設定データもあったり、ワープ地のデータまで保持されてたり、結構ごちゃごちゃ
してます。本当はWebサーバを使って編集できる仕組みにしようかと思ってましたが、
個人情報が含まれていたので見送りました。

せっかく作ったので、またいろいろいじって遊んでました。豆のようにミニウサギを
小さくしたら、リングピアスをひきずりながら移動してました。装備品のサイズは
ペットに合わせて変化しないみたいです。

一応、PP3トランスフォーマーはカンパウェアとして公開してますので、
お金持ちの人は寄付してくださると嬉しいです。

2006/11/28
またポスペの話。

自分はペットの色変えって興味がなくてやったことがなかったのですが、default.pp3ファイルの中身を解析していたら、その「ペットの色」に関係すると思われるデータを発見しました。とりあえず、試しに色を「白」に書き換えてみた結果・・・。

色変わりミニウサギ

おぉ、本当に白くなりましたね。こりゃびっくりです。いきなり白兎化して、うちの子もビックリでしょう。後で性別や名前やペットの種別も変えられそうだけど、あんまり実用性はないかな。

追記 18:00

巨大化ミニウサギ

さらに面白い数値発見しました。「ペットのサイズ」に関する数値みたいです。標準の二倍のサイズにしてみたら、お風呂からはみ出ることこの上なし。体が全然洗えてないよ。ついでにメモしておくと高さ、幅、奥行きの倍率を設定できますが、全部を0倍にすると描画時にエラーが出ます。一つを標準、残りを0倍にすると理論上「線」の状態なので、透明ペットが誕生しました。ちょっとだけ画面にちらつきはでましたが。さらに奥行きだけ0倍で、残りを標準にすると紙でできた絵のようなペットになりました。なんだか斬新です。でも、0倍にすると3D描画的に問題があるのか、システムが不安定になりますね。0.0000001倍ぐらいにしとけばいいのかな。

アプリ化したら面白いかも。

2006/11/27
一ヶ月に一度しか日記を更新しないのもよくないと思いつつ、サボってしまうこの日記。今日はPP3アイテムビューワーに関するメールをいただいたので、久しぶりに日記にポストペットの話を書いてみたいと思います。

今、現在の私の活動はPostPetを離れて、別のところに力が入ってます。を書いたり、某ゲームをハックしたり、Webページの解析をしたりといった感じです。W-ZERO3[es]を買ったので、それの使い勝手を向上させようとアプリを考えたりもしてますね。それといくらか関連してメールクライアントのThunderbirdにeml形式のデータを手軽にインポートする方法も考えてます。Google Desktopをいじるのはちょっと飽きてきたので、最近は何もしていません。

で、Postpetについて何もやっていないかというと、少しだけやってます。ユーザがもうあまりいないのか、私のソフトもほとんど需要が見込めない状況なのでいつか畳んでしまうつもりではいるのですが、Windows Vistaの新しいUIを使って、PostPetがV3の後継として新しいメールクライアントソフトを出してくるのではないか？という新たなドキドキも考えられます。（でないかな。）なので、プラグインデータや設定データの解析にかけた時間が、そのソフトで何とか回収できるかもなぁ、なんて思っているのです。

現状として解析しきれていないモデルデータのモーション関連部分のことや、できればテクスチャデータも時間があれば解析を続けてみたいと思っています。今のところモチベーション低いですけど。

その他に、最近「お友達帳」の中身が解析されてないなぁ、ということに気付いてお友達帳のフォーマットを調べたりしました。なんとなく読めそうなんですが、あと一歩およばず、お友達帳の前半半分ぐらいの解読ができたところで中断してしまいました。でも、このお友達帳のフォーマットがわかると、どうやら「default.pp3」の内容も同じ手順で解析できそうなんですよね。すなわち、ペットの色変えとか設定値変更が自由にできてしまうってことなんですね。

ここらでまた、がんばってみようか、どうしようか。悩みどころです。まぁ、あまりがんばれないかも。日記書いてたら少し気になってきましたね。


2006/10/8

久しぶりの日記になってしまいました。PostPet V3からメインのメールクライアントをThunderbirdに移すことになったので、その作業メモ。

Thunderbirdのメール保存形式はmbox形式とのこと。PostPet V3のそれは独自のファイル形式PML形式です。

Thunderbirdにメールのインポート機能はあるものの、当然のごとくPostPetはインポート元として想定されていませんでした。PMLファイル自体は特に複雑なファイルではないので、Thunderbird用にコンバータを作れなくもないかもしれませんが、より簡単な方法はおそらくOutlook Expressを媒介にする方法だと思われました。

そもそもPML形式とOutlookなどで使用されているEML形式はヘッダ以外に変わった点はなさそうなので、pmlファイルの拡張子を全て.emlに変更してOutlook Expressにドラッグアンドドロップでつっこんでみることに。

;
exit;

sub checkDir {
	my $d = shift;
	print $d."\n";
	opendir DIR,$d;
	my @dirs = readdir DIR;
	closedir DIR;

	foreach (@dirs) {
		if ($_ eq '.' || $_ eq '..') {next;}
		if (-d $d.'/'.$_) {;}
		if (m/\.toc$/) {unlink($d.'/'.$_);}
		if (m/^(.+)\.pml$/) {rename($d.'/'.$_,$d.'/'.$1.'.eml');}
	}
}

PostPet V3のmailboxフォルダのコピーを作って、コピーしたmailboxフォルダの中で上記のようなPerlスクリプトを走らせて.pmlを.emlに変換。その後、Outlook Expressを立ち上げて、仕分けフォルダにemlファイルをドラッグアンドドロップ。そして、次にThunderbirdを立ち上げて、「ツール」のインポート機能からOutlook Expressのメールをインポート。心配だった添付ファイルの移管も問題なく行われた模様。

しかし、仕分けフォルダが多いと作業が非常に煩雑でした。emlファイルをまとめてmbox形式にしてくれるソフトを探した方が早いかな。


PostPetはやっぱり送信メールの仕分けができないのが不満でした。せっかく面白いソフトなのにメーラ部分にはあまり力が入ってないのが残念ですね。

16:45 追記

上記の方法でインポートすると、PostPet V3より前のバージョンで管理されていたメールのヘッダ部分の日本語が文字化けすることを発見しました。今更気が付いたのですが、PostPet 2001とPostPet V3ではメールの保存形態が異なるんですね。V3にバージョンアップしたときにメールボックスも移管できたと思いましたが、ファイルの中身のコンバートまではやってくれてなかったんですね。結構いい加減だなぁ。
ちなみにOutlook Expressに一度移した段階では、文字化けは起こりませんでした。一日の長ってやつでしょうか。ヘッダをエンコードすればきっと直りますが、古いメールだし面倒なので放置することにしました。

PostPetからThunderbirdへのメールデータのコンバータを作ったら使う人いるかなぁ？

2006/7/24
今日ちょっとびっくりした発見。 

「3DCG制作」で検索したら、検索結果の 
「製作」とか「作成」とかの部分も太字になってた。 

「カード　経費」で検索したら、検索結果の 
「費用」の部分も太字になってた。 

関連単語まで検索対象にしてくれるのか！？ 

「簡単　会計」で検索したら、 
「かんたん」の部分も太字に！ 

よみがなもか！？ 

Google人口無脳の開発希望 

2006/6/15
これまで一枚の風景写真から簡単にワープ地用の画像を作成する
プログラムに取り組んでいたわけですが、データの仕様上の限界から、
完全にきれいなワープ地用画像を生成することはできないという
結論に達しました。実際に作ったプログラムを使うと以下のような
ことができます。



左の写真を読み込むと右のようなワープ地用の画像を
作ってくれるのでした。
ですが、自分的に落としどころとしてイマイチです。
脇と手前の辺りの表示がどうしても不自然になるのがいやな感じです。
これリリースしても使ってくれる人いなそー。

もしも、使ってみたいという方がいらっしゃれば、掲示板にご連絡いただければ、
ツールをアップロードしておきます。

ワープ地作成ツールについてはアプローチを変えて、
今後も取り組んでいきたいところですが、
また少し忙しくなりそうなので、なかなか時間とれないかもしれません。

2006/6/14
底面データのことであれこれ悩んでいたら、
ひょっとしたら・・・というアイディアが浮かびました。
底面は512x512ピクセルの画像を4枚敷き詰めたものなので、
1024x1024ピクセルの画像を入れたら1枚の絵を敷き詰めることが
できるんじゃなかろうか？

→実験結果　失敗。
512x512のときと同様の表示結果となった。
おそらく、テクスチャの貼り幅が指定されているので、
それにあわせて1024x1024の画像が縮小して貼られたのだと思われる。

そしたら、1024x512の画像ではどうだろうか。
縦横一方の貼り幅が指定されているだけなら、
うまいこと2枚の絵を敷き詰める結果が得られないだろうか？

→実験結果
#ref(http://hp.vector.co.jp/authors/VA040951/images/diary060614.jpg)

・・・画像の縦横比1:1じゃないと不正ってことで、デフォルトの地面が
出ちゃうのかな・・・。
これで底面データについては、当初の予定と大幅に違った形で作り直さなくては
ならないことが決定しました。ガーン。


2006/6/13
ワープ地画像を作成するプログラムが八割方できあがりました・・・
がここで底面のデータ生成に問題が。
ペットの居住する土地はシームレスな同一の底面データ4枚が並んで
構成されているようなので、一枚の写真からいい感じで底面データを
作成するのは困難かもしれません。

理想は正面データ、側面データともシームレスな見栄え
だったのですが、そこら辺は結局断念することになるかも。
くやしー。

2006/6/10
風邪でダウンしてました。こんなに高熱を出すのは久しぶりでした。
まだ治りかけですが、寝ているのにさすがに飽きました。

現在、PP3アイテムビューワーに関連して、写真からお手軽に
ワープ地の画像を生成するプログラムを制作中です。
実用レベルになるかはまだ未定ですが、前にディズニーシーのワープ地を
作成したときに、思いのほか時間がかかったので、これは万人向きではない
と思いました。使えるツールになってくれればいいと思っています。

2006/5/19
PP3アイテムビューワーのプラグインがバージョンアップしました。
edit.dllからダウンロードできます。
大きく追加された機能に家具アイテムの編集機能がありますので、
家具の名前を変えたり、属性値を変更したり、いろいろいじることが
できるようになった感じです。

製作中に前のバージョンにやっばいバグがあったことに気づいて
ヒヤヒヤしてます。

できたファイルをアップロードしようとしたら、
Vectorの提供するフリースペースがいっぱいでアップロードできないという
事態に陥りました。いやはや、作り出して結構長いですからねぇ。
過去のバージョン等をある程度削除させてもらいました。

今回はお部屋の最高評価を得たいという方のリクエストを受けての
更新です。アクセサリや遊具の方も順を追って変更できるように
したいと思います。

2006/5/16
PP3アイテムビューワーの新しいバージョンをリリースしました。
今回は新機能の追加ではなく、バグの修正です。
モデルデータの書き出しとプラグイン関連機能での不具合が解消されました。
この不具合もbccからVC++に乗り換えるときに起きたものでした。
マニピュレータの渡し方が悪かったようです。

bcc
ofstream fout(FileName);
fout << ios::showpoint;

VC++
ofstream fout(FileName);
fout.setf(ios::showpoint);
// fout.unsetf(ios::showpoint)

上のような感じでsetf(unsetf)を使うようにしたら直りました。
ios::showpointとios::fixedあたりの設定を直したのだったかな。
小数点以下第何位まで表示という設定は外してしまいました。

その修正を受けて元々cwarp.dllとして開発していたものを
edit.dllに改名して利用できるようにしました。
改名の理由はワープアイテム以外のデータも一つのプラグインファイルで
いじれるようにするためです。
今後の予定としてはedit.dllにimage.dllの機能をつけたり、
家具アイテムやアクセサリアイテムのデータを編集する機能を
つけたりすることです。

最近PostPet V3関連の話題でいい話を聞きませんが、
開発を続けることに疑問を抱きつつも、ゆっくりやっていこうと思います。

edit.dll

2006/5/5

PP3アイテムビューワーのver.1.62をやっとリリースしました。
結局、更新内容はバグフィックスとキーボードのショートカットつけただけでした。
これであとはプラグインの方に着手・・・できるかな。
作りかけのプラグインがありまして、前に公開していたcwarp.dllを
アクセサリや家具にも同様のアクションができるようにしたいと
思っています。お部屋の評価を上げたり、アクセサリを無制限に
つけられるようにしたり、できるようになるんじゃないかなぁ、と
思っています。

今日はこどもの日。GW真っ只中ですが、私は仕事中です。
貧乏人は辛いなぁ。

2006/4/30
GWはいかがお過ごしでしょうか。前の日記で書いた日本語のパス名のファイルが
ofstreamで開けない件について、調べたことをまとめておきます。
なんでもofstreamはVC++2005からファイル名を内部でワイド文字列に
変換するとかなんとかで、あまり正確に把握できていないのですが、
ロケールの設定をしてやることで問題を回避できるそうなんです。
多分、ユニバーサルな環境でPP3アイテムビューワーを動かす人は
そうはいないと思うので、以下のようなロケール設定で問題を回避しました。

setlocale(LC_ALL,"Japanese");

プログラムの頭で設定してます、私は。
この結果、アイテムイメージの保存とワープ先イメージの保存の機能が
日本語パスに対してもうまく機能するようになりました。
ここで、一旦リリースかな。
なんか簡単に付加できそうな機能があったら、くっつけたいけど。
せっかくダウンロードしなおしてもらうんだし・・・。

2006/4/28
エラーの調査中。書き忘れてましたが、アイテムイメージを書き出そうとしたり、
ワープイメージを書き出そうとしたりすると、正常に書き出されません。
ofstream周りがVS.NETから大きく変更されたようなのですが、
そのせいかもしれません。

ofstream fout(FileName,ios::in|ios::out|ios::binary);

こんな感じでファイルを開こうとしてますが、

fout.is_open()

↑をチェックすると、正常にファイルが開けていないんだそうな。
ちなみにbcc時代には何の問題もなかったのです。
コンパイラ乗り換えてコードはセキュアになったはずですが、
細かい点で新たにバグが生まれてしまいました。失敗、失敗。

イメージの書き出しをしたい場合は、申し訳ありませんが、ver.1.5xを
使ってください。
プラグインの方も同じ理由で開発停滞中です。重ね重ね申し訳ないです。

（追記）
とりあえず、一つ原因発見。ofstreamに渡すファイル名に
日本語が入っている場合、問題あり。

2006/4/26
プラグインを作成していたら、PP3アイテムビューワー本体の方に
バグを発見してしまった。これは直さないとなぁ。
でも、いくつか実験してみても直らない。
どうしよう。

ゴールデンウィーク返上でPCに向かって作業することになるのかな。
でも、PCに向かっててもわからないタイプのバグっぽいし、
本を読んで勉強しなくちゃかなぁ。
私のような独学プログラマは基礎がなってないのが、
たまに大きく響くときがあります。

原因を切り分けると「メモリ」関連か、「リンカ」関連のどっちかなはず。
どっちも臭い場合、どっちから攻めようか攻めあぐねてしまう。

「メモリ」だよね、やっぱり。（自問自答）

2006/4/20
プラグインの更新が滞ってまして申し訳ありません。
少しまた、忙しくしております。

全然関係ないのですが、最近candorcandiedcandyをはじめてみました。時代の波に少し遅れて乗ってます。ただ単に出品すれば売れるっていうわけでもなさそうで、不用品の処分にピッタリなんて宣伝文句は妥当でないかななんて思いました。中々、奥が深いものみたいです。興味のある方は上のリンクの方にアクセスしてみてください。変なものばかりかもしれませんが。

2006/4/16
先日、ユーザの方からプラグイン利用時のエラーメッセージの報告をいただきまして、
エラーの原因調査に大変役立ちました。（感謝です。）
調査を進めていてとりあえずわかったことは、bccで作ったDLLファイルと
vc++2005で作ったDLLファイルとではシンボル名が変化するってことでした。
前者はアンダースコア（_）が関数名の前につき、後者はついていないのですね。
シンボル名チェックとかしてなかったので気づかなかった。
で、その辺りを修正して、とりあえず作成した「backup.dll」を
使用すると今度は「Access violation writing location...」とかいう
エラーが出ました。アクセス違反かぁ。
sprintf_s関数で日付に応じたフォルダ名を生成しているところですね。
なんだろ。今日中にリリースできるかなぁ。

（追記）・・・と思ったら、一つ前の行でエラーが起こっていた模様。
現在時刻の取得の際にtm構造体のポインタを使っている箇所があるのですが、
localtimeをよりセキュアなlocaltime_sに書き換えた際に、ポインタに実体が
付かなくなったらしい。（警告が出ていたのに気づかなかった。）
これで今日中にリリースできるかな。

2006/4/13
PP3アイテムビューワーver.1.60の正式リリースを終えて、
ホッと一息。というのも束の間、ver.1.60用にプラグインを
コンパイルし直さなければなりません。
よりセキュアなコーディングにして安定性を高めようと思っているのですが、
backup.dllを作成したところで一つ問題が発覚。プラグインを読み込む側
（PP3アイテムビューワー）の方に読み込み時におかしな挙動をしている
部分を発見しました。

原因はWindows APIにあるようなのですが、意味不明なことこの上なしです。
FindFirstFileで取得したファイル名の頭に四バイトのヌル文字が入っているのでした。
それはすなわち空の文字列と同義なわけで、正常にプラグインの名前を認識
できなくなっています。

申し訳ないことですが、プラグインと一緒にver.1.61をリリースすることに
なりそうです。原因調査中。

2006/4/9
先日アップロードしたβバージョンに対して、ご報告いただきありがとうございました。
うちでは開発環境で動作検証もしているので、他の人とはエラーメッセージも
異なるものが表示されているみたいです。これをヒントにデバッグを進めていきたいと思います。

今日はとあるテーマパークで写真を撮ってきました。
これを加工して何か作ってみようと思ってます。
乞うご期待！

2006/4/7
PP3アイテムビューワーver.1.60のβバージョン>http://hp.vector.co.jp/authors/VA040951/soft/pp3viewer_160b.lzhをリリースしました。詳しいことは開発進捗に書きましたが、ちゃんと動くものではありませんので、あしからず。

Just In Timeデバッガに関連するメッセージが出るのですが、
あまりよく理解できていない領域なため、情報収集中です。


2006/4/5
サイトを移転しました。三月末にレンタルホストが数日間停止してしまい
将来的に少し心配になったのがきっかけでしたが、以前から自分のアイディアを
メモする場所があったらいいなとも思っていたので、いいきっかけに
なりました。

旧来のコンテンツをそのまま移動して、少し手直ししたのですが、
リンク切れ等お気づきの点がございましたら、掲示板にご報告ください。

2006/4/1
http://www.postpet.so-net.ne.jp/movie/

PostPet映画化おめでとうございます。
GiantPeachとモモをかけているようです。
毎年この日は楽しいですね。

2006/3/27
PP3Viewer本体のコンパイルが通る。VC上から呼び出すとちゃんと動いている。
でも、Releaseフォルダにできあがったモノを実行すると意味不明な
ダイアログボックスが出て落ちる（ことがある）。

エラートラップしようとしたら、pp3obj.dllのDebug版がビルドできない。
また、リンカの問題らしい。msvcprtd.lib関連の問題のようなのですが、
これをどう直せと・・・？LNK2001エラーが出る。シンボルが解決できないって。
Release版は問題なくリンクできているのになぁ。


2006/3/25
一ヶ月間、エラーと戦っていました。
メモついでに詳細を記載。

BCCのプロジェクトをVC++2005Expressに移行する作業において、
構成を変えず、ソースコードをそのままペースト
iostream関連のエラーが出たので、一つ一つ消す。
（iostream関連の仕様変更があったらしい。）
コンパイルを通るも、リンカエラーが頻出する。
（Additional Dependency（LIBファイル）の型が合わない！？）
zlibを再コンパイル。VC8のプロジェクトは「...\zlib123\contrib\vstudio\vc8」ここらへん。（ライブラリのファイル名は「zlibwapi.dll」に変更された。）
libjpegの再コンパイル。コンソールからvc用のmakefileを使用してコンパイル。
（libjpegのCのコードが混ざらないようにC++でラップして、外部ライブラリが出来上がる。）
（コンソールでVC++付属のバイナリを実行する前には、要「...\Microsoft Visual Studio 8\VC\bin\vcvars32.bat」）
いくつかリンカエラーが残り、ここで何週間もドツボにはまる。コードをいろいろいじっても意味はなかった。LIBファイルとINCLUDEファイルの検索先の設定に問題があった模様。検索順序をいろいろ変更していたら、いつしかリンカが通るようになった。
おかげでdumpbinのことに詳しくなる。リンカのオプション/verboseも初めて使用した。
ビルドは成功したがwarningがたくさん発生する。strcpy、strncpy、strcat、strtok、ltoaあたりの関数がセキュアじゃなかったらしい。とりあえず「_s」をつけてみる。
警告が消えて、バッチリ！

IDEのこと不勉強だったな、と実感しました。
上記がpp3obj.dllの話なので、本体とプラグインについても同様の作業が残っている予定です。でも、ゴールが見えてきた感じ。早くバージョンアップして、普通の生活に戻りたい。

2006/2/26
転居が済んで、少し落ち着いてきました。
まだダンボールが山積みです。とりあえず、パソコンのデータが
引越し中に破損してしまわなくてよかった。開発も徐々に再開
していきます。バグフィックスをお待たせしてたいへん申し訳ありません。

2006/2/17
今月の24日に転居が決まりました。転出届を出したり、NTTに電話したり、毎日
やることがいっぱいです。家の中はダンボールの山だし。

プログラムの修正にあまり時間がとれていません。
Visual Studioに開発環境を移行しようとしたら、libjpegのコンパイルがうまくいかなかったり、zlibの関数が呼び出せなかったりと問題が山積みになってしまいました。一つ一つクリアしているところなのですが、ゴールがみえない状況です。

最近、睡眠時間がとれず疲れているのかな。見通しが暗いなぁ。
はやく3月になって欲しい。

2006/2/5
バグ調査が遅々として進展しません。
プライベートでは転居計画が進んでおり、多忙を極めて精神が擦り減ってきているが気がします。

PostPet V3はメールクライアントとして、そんなに使いやすいわけではないと思いますが、これはもう改善される予定はないのかなぁ。だとしたらメールボックスだけ使いやすく改良できないかな、と夢を描いています。
しかし、時間的な余裕が・・・。

あぁ、お風呂に入りたい。

2006/1/21
バグ報告をいただいたので、原因箇所の検出中なのですが、
いくつか叩いても埃が出てこないので、少し困っています。
開発環境が貧弱なこともあって、デバッグが思うように進まない状況です。
このままでは埒があかないので、いっそ開発環境自体を移行してしまおうかと
検討しています。うまくいけば、コンパイラも新しくなるので
バグがとれる以上の効果があるかもしれません。

自分の作ったプログラムは子供のようにかわいいのですが、
段々経費がかさんでくることになりそうで、少し怖いなぁ。

追記：Visual StudioのExpress版が無償ダウンロードできるので、試用中。


2006/1/13
遅ればせながら、あけましておめでとうございます。
寒中お見舞い申し上げます。

プライベートがバタバタしていて開発に集中できない状況に陥ってしまいました。
2006年は早速波乱含みです。

3DCG関連のことを少しお勉強する必要があるので、
いろいろなサイトをまわっています。
3D関連ソフトもちゃんとしたものを一本欲しいのですが、
とてもお高いものなので、なかなか手が出せずにいます。
どうしたものか。

開発日記
]]></description>
			<link>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2006%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</link>
			<guid>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2006%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</guid>
			<pubDate>Fri, 12 Jun 2026 17:02:35 +0900</pubDate>
		</item>
		<item>
			<title>開発日記/2014年の日記</title>
			<description><![CDATA[2014/12/10

ちょっと前からGPGPUというものに興味を持って調べ物をしていたのですが、業務の一環として使えそうな場面があったので、NVIDIAのCUDAの開発環境を整えてみました。参考にした書籍には、環境の構築方法があれこれ書いてあったのですが、3年以上前の本だったので情報が古く、今はインストーラーでかなり手軽にインストールできるようになっていました。Windows環境ではC言語のコンパイラ（cl.exe）さえ持っていれば、あとは一式NVIDIAサイトからダウンロードできるみたいです。

いくらかGPUに計算をさせてみて感触が掴めたのですが、大量の計算をGPUで捌きやすい形でコーディングするという観念がまだうまくまとまっていません。やりたいことのルールはシンプルな二つの数式なんですが、数式の意味がわかっているだけでは、具体的な計算手順にまで落とし込めなくて、CUDAを触るより微分のおさらいをしている時間の方が長くなってしまっております。

2014/10/18

CSVファイルは時に扱うのに人を選ぶことがあるようで、Excelでテーブルデータを扱う場合は、Excel標準のデータ形式でファイルを保存して、それをWEBサイト上で読み込めるようにするのが望ましいとのお客さんのリクエストをいただきました。

かつての拡張子.xlsの形式ではその書式が有志によって解析されていたもののMicrosoftがOfficeシリーズをバージョンアップする度に書式のバージョンも更新され、正確な内容はベールに包まれていましたが、ドキュメントのオープン形式化が進む中でファイルの仕様が公開され、ついには標準化された.xlsx形式が発表されてもう7年以上経っているわけです。その後、ブラウザの進化とともにローカルファイルをWEBページ内で解析することもできるようになり、いつの間にかJavaScriptでExcelのファイルを読み込むこともできるようになっていたようです。

js-xlsxからApacheライセンスで公開されている「js-xlsx」というライブラリを使わせてもらうことにしました。xlsxファイルを読み込んで操作して保存することもできちゃうそうです。これを使ってCSV形式のテキストに整形することにしました。

XLSX.utils.sheet_to_csvというメソッドを使うとやりたいことが簡単に達成できてしまいました。しかし、日付のセルがどうも思っていた形式になりません。どうも米国英語形式のフォーマットになってしまっているようです。ソースコードを眺めてみると、

var table_fmt = {
	0:  'General',
	1:  '0',
	2:  '0.00',
	3:  '#,##0',
	4:  '#,##0.00',
	9:  '0%',
	10: '0.00%',
	11: '0.00E+00',
	12: '# ?/?',
	13: '# ??/??',
	14: 'm/d/yy',
	15: 'd-mmm-yy',
	16: 'd-mmm',
	17: 'mmm-yy',
	18: 'h:mm AM/PM',
	19: 'h:mm:ss AM/PM',
	20: 'h:mm',
	21: 'h:mm:ss',
	22: 'm/d/yy h:mm',
	37: '#,##0 ;(#,##0)',
	38: '#,##0 ;[Red](#,##0)',
	39: '#,##0.00;(#,##0.00)',
	40: '#,##0.00;[Red](#,##0.00)',
	45: 'mm:ss',
	46: '[h]:mm:ss',
	47: 'mmss.0',
	48: '##0.0E+0',
	49: '@',
	56: '"上午/下午 "hh"時"mm"分"ss"秒 "',
	65535: 'General'
};

こんな定義部分がありました。元々「ssf.js」という書式変換ライブラリだったのをそのまま流用しているように見受けられます。ちなみに自分が扱うデータは表中の14番「m/d/yy」を日本語版表記の「yyyy/m/d」に変更すれば意図するように変換されるようです。xlsxファイルを読み込む前にこの表の定義を変更してあげるか、変換時のオプションで定義を変更した表を渡してあげればよさそうなのですが、「ssf.js」だった部分が隠蔽されていて、外から影響を与えられるようにはみえなかったので、直接該当箇所のコードを書き換えることにしました。このライブラリが多言語対応するようになったらこの辺の書式の変更も簡単になるのかもしれません。


2014/8/27

PHPのバージョンアップによってもう一つサイト上の問題が発生していたことに気が付きましたInternal Server Errorを吐いて終了するページと正常に動作するページがあるので、原因を探ってみると、「ls2」というプラグインコマンドを使っているページにアクセスできなくなっているようでした。

どうもplugin/ls2.inc.phpファイル中で不適切な参照渡しをしようとしている箇所（69行目）があったようで、「&」を取り除いたら正常に動作するようになりました。

他にも問題がありそうだけど、チェックする時間がないので見つけ次第対処という消極的な方針になってしまいそう。

2014/7/12

仕事の都合でレンタルサーバーのPHPのバージョンを最近のものにアップデートしたときに、PukiWikiに問題が発生して500エラーが返ってくるようになっていたことに今日気づきました。一月以上このサイトが停止していたとは・・・。ちょっとプライベートでいろいろあってサイトのメンテナンスが不十分でした。

詳しい原因はPukiWikiのlib/func.phpで定義されている「hex2bin」関数が最新のPHPでは同名の組み込み関数が存在するので名前が衝突した結果、「この関数は上書きできません。」というエラーが発生していました。将来名前が衝突することを考えると関数の命名も気楽にできませんね。

lib/func.php
lib/auth.php

の中の関数が使われている部分と定義されている部分で、名前を別のものに変更することでこのエラーは収まりました。しかし、今度は日本語部分が表示されなくなるという別の問題が発生しました。こちらもPHPのバージョンアップによってhtmlspecialchars関数の挙動が変わったことが原因でした。標準の文字コードがutf-8になっているそうで、PukiWikiのEUC-JP版ではEUC-JPの日本語がうまく扱えていなかったようです。文字コードを「EUC-JP」と指定することで解決するとのことでしたが、後々のことを考えて、データをすべてutf-8に変換して、PukiWikiのutf-8版に入れ替えました。Pukiwikiのソースをいじっていたので換装はちょっと大変でした。

2014/1/13

久しぶりにやらかしてしまった反省メモ。

発端はTortoiseSVNのアイコンオーバーレイが表示されなくなったことでした。調べてみると、いくつか原因が考えられるらしく、まずアイコンの再設定を行ってみましたが変化なし。続いてWindowsのレジストリに登録できるアイコンオーバーレイの上限に達しているのかと思っていくつか不要なものを削除してみるもやはり変化なし。これはWindowsのアイコンキャッシュファイルが壊れたに違いないと思ってWindows8.1のアイコンキャッシュファイルを再作成する方法を検索して「リフレッシュ」という作業を行うといいよみたいな記事をみつけたので、何も考えずにWindowsのリフレッシュ操作を行ってしまいました。結果、Windowsがまっさらな状態になり、こちらは顔面が真っ蒼な状態になりました。昔と違ってWindowsは非常に安定して動作してくれていたため、OSの再インストールみたいな操作からは遠ざかっていて、最新のWindowsにOSを「リフレッシュ」する機能があったとは知りませんでした・・・。いろいろ面倒くさいことになりましたが、一日がかりでなんとかしました。（連休中の貴重な一日だったのに）

作業環境を復旧し、TortoiseSVNもインストールし直しましたが、しかし、肝心のアイコンオーバーレイは表示されないまま・・・そこで一つ気が付いたのですが、バージョン管理下にあるファイルを右クリックしてもTortoiseSVNのメニューが出てきません。これはもしや・・・。メニューの中に「SVN update working copy」の項目が発見され、この現象がTortoiseSVNのアップデートによってワーキングコピーの設定ファイルの形式が古かったことによって引き起こされていたことが判明しました。先ほどの項目をクリックして設定ファイルを更新したら無事にアイコンオーバーレイも復帰したのでした。いろいろと感覚が鈍っているなぁと思わされた年初の一コマでした。

2014/1/2
PukiWikiもさすがにスマホで読みやすいようにしないといけないなぁと思ったので、その作業メモ

/pukiwiki.ini.phpを編集する

$agentsにUserAgentのパターンを登録しておくと、UserAgent毎に設定を変更できるようなのでそれを利用することに。

// for smartphone
// Apple iPhone
array('pattern'=>'#iPhone#','profile'=>'smartphone'),
// Apple iPod touch
array('pattern'=>'#iPod#','profile'=>'smartphone'),
// Apple iPad
array('pattern'=>'#iPad#','profile'=>'smartphone'),
// 1.5+ Android
array('pattern'=>'#Android#','profile'=>'smartphone'),
// Pre 1.5 Android
array('pattern'=>'#dream#','profile'=>'smartphone'),
// 1.5+ Android
array('pattern'=>'#CUPCAKE#','profile'=>'smartphone'),

とりあえずどこかのUserAgentまとめサイトを参照して↑こんな設定を追加したけど、古いAndroidとかシェアがどの程度なのかわからないけど要らない気がしないでもない。WindowsPhoneとかについても考えた方がいいかもしれないし、Firefox OSとかいろいろ今後どうなるかわからないのでとりあえず追加する方法だけ覚えておこうと思いました。
patternにマッチするとprofileで指定した名前に設定ファイルが読み込まれるようです。

/smartphone.ini.phpを追加

/default.ini.phpをコピーしておけば間違いないだろうと思って、コピーした上で、スキンファイルを設定する箇所だけ修正しました。

define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'smartphone.skin.php');

/skin/smartphone.skin.phpを追加

このファイルがスマホ用のテンプレートになるので、スマホ向けに最適化します。
デフォルトのテンプレートとそれほど変わらない場合はレスポンシブなCSSで対応するのでもいいような気が今更してきた次第です。


2014/1/1
あけましておめでとうございます。
年明けには「今年の目標」を毎年考えて、興味のある分野の知識を増やそうとしていますが、去年の目標は仕事に忙殺されて消化不良に終わってしまいました。今年は「絵作り」をテーマに活動を進めていこうと思う次第です。なにか成果を出したいです。


開発日記
]]></description>
			<link>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2014%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</link>
			<guid>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2014%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</guid>
			<pubDate>Fri, 12 Jun 2026 16:57:57 +0900</pubDate>
		</item>
		<item>
			<title>Flash3D/正規リリース前に開発環境を揃えてみた</title>
			<description><![CDATA[開発環境を揃えて実験してみたい

これを書いている時点でFlash Player11のRC版が公開されたばかりで、Flashの3Dに関する新しい機能はまだ一般には広まっていません。しかし、RC版が出る以前よりインキュベータ版が二回リリースされているので既に興味のある方はたくさん開発作業を開始されているようです。私もちょっと仕事が落ち着いてきたので、RC版のFlash Player11をダウンロードしてみることにしました。

私はFlashDevelopでFlashの開発を行うことが多いのですが、FlashDevelopもバージョン4の準備が盛んに行われているようで、4.0.0 beta2というのがリリースされているようでした。3系とのプラグインの互換性がどうのこうの書いてありましたが、実害なさそうなので、新しい方をインストールしておきました。

FlashDevelop4からはFlexSDKを予め複数登録しておいて、プロジェクト毎に選択できるようになったのだそうです。というわけでAdobeサイトから最新のFlexSDKをもらってきたのですが、FlashDevelop4標準のSDKのバージョンが既に4.5.1だったので、それをそのまま使った開発もできそうです。

FlashPlayer11用のplayerglobal.swcは当然ながらまだ標準で入っていないので、こちらはベータ版のものをAdobeサイトからダウンロードして、FlexSDKの「frameworks/libs/player/11.0」につっこんでおきました。「11.0」というフォルダは元々なかったのでこのとき新設しました。

これで準備はできたかなと思って、先人が発表していたサンプルコードをビルドしてみることにしました。・・・しかしビルド結果は白かったり黒かったりで何も描画されません。右クリックするとムービーが読みこまれていないとかなんとかで何か問題があるようです。わからないなりにいろいろ調べて、以下のような処置を行いました。

flex-config.xml
FlexSDKのframeworksフォルダの中にflex-config.xmlというファイルがあります。ビルド時にこのファイルを参照しているようなので中身を覗くと16行目ぐらいに

<target-player>10.2.0</target-player>

という記述がみつかります。なるほど、ビルドされたものが古いFlashPlayer向けだったのでしょう。11.0.0にここは変更です。

Additional Compiler Option

FlashDevelopのプロジェクトのプロパティにCompiler Optionというタグがあります。ここにコンパイラに渡すオプションを追加できる欄があるので「-swf-version=13」というオプションを追加してやるとよいというのを複数サイトで発見しました。swfバージョンというのは多分SWFファイルの先頭の方についてるSWFの仕様のバージョンのことですね。FlashDevelop4ではFlashPlayer10.2向けにコンパイルをしているようでしたので、ここのバージョンが標準では「11」になっていたのでしょう。FP10.3がSWF12相当、FP11.0がSWF13相当ということのようですので、「13で頼む」という指示が必要でしたか。
なお、前述の「flex-config.xml」にも「<swf-version>11</swf-version>」という記述があったので、ここも何となく13にしておきました。

directモード

上の二つでどうやらビルド中のリンクがうまくいったようで、実行時の「stage3Dってなんだよ、おい！」っていうエラーメッセージが消えてくれたのですが、まだうまく表示されません。「さーせん、Content3Dが準備できません。」みたいなメッセージが代わりに現れるようになりました。

どうもstage3Dを使った3D表現はwmode="direct"でないとならないようで、実行して確認する場合はhtml上のコンテンツとして確認するのがよいらしいです。プロジェクトのプロパティから「Test Project」時には「Open document」して「bin/index.html」をブラウザで閲覧するようにしたら、サンプルのプロジェクトがちゃんと動く姿を確認できました。FlashDevelop4でNew Projectしたときのbin/index.htmlは最初からwmode="direct"と設定されているようですね。


せっかく作った時間がこうして環境設定の手違いで潰れて悲しかったのですが、FlashDevelopとか他のFlexSDKを使った製品のことが勉強になりました。


Date: 2011/9/13

FlashPlayer11とFlashDevelop4 RC版のリリース

2011年10月になってFlashPlayer11が正式に発表され、FlashDevelop4もRC版がリリースされたので開発環境も更新してみました。FlashDevelop4はクリーンインストールが必要とのことなので、前回導入したベータ版をアンインストールした上で、再度インストールしなおしました。

次にdownloads.htmlからデバッガ付きのFlashPlayer11プロジェクタと更新されたPlayerGlobalをダウンロードします。

ブラウザ上でFlashを再生するプラグインではなくて、単独で動作するやつはプロジェクタ（Projector）って呼ぶんですね。これを適当な場所（自分の環境ではC:\Program Files\FlashDevelop\Tools\flexsdk\runtimes\player\11.0にしました）に置いて、FlashDevelopの「Tools > Program Settings > FlashViewer > External Player Path」の項目に設置したプロジェクタを指定します。

PlayerGlobalは前回同様、FlexSDKの「frameworks/libs/player/11.0」にあらかじめ入っていたものを最新のものに置き換えました。

これでデバッグ作業もプロジェクタを使ってできるようになりました。

Date: 2011/10/9

Flash3D

]]></description>
			<link>https://soft.candychip.net/Flash3D/%E6%AD%A3%E8%A6%8F%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E5%89%8D%E3%81%AB%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%8F%83%E3%81%88%E3%81%A6%E3%81%BF%E3%81%9F</link>
			<guid>https://soft.candychip.net/Flash3D/%E6%AD%A3%E8%A6%8F%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E5%89%8D%E3%81%AB%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%8F%83%E3%81%88%E3%81%A6%E3%81%BF%E3%81%9F</guid>
			<pubDate>Fri, 12 Jun 2026 16:56:36 +0900</pubDate>
		</item>
		<item>
			<title>OSVR/日記002</title>
			<description><![CDATA[開封式、組み立て

OSVRが届いたのでさっそく開封しました。そして驚いたのは部品の点数でした。冷静に考えるとそんなわけないのですが、Googleのカードボードみたいなものが頭にあったので、もっと単純な仕組みなのかと思いこんでいたようです。

（想像）

ゴーグル >---(USB)---< PC


（現実）

ゴーグル >===(USB,HDMI,POWER)===< 中継機 >===(USB,HDMI)===<PC
　　　　　　　　　　　　　　　  　　　　　　|   |
　　　　　　　　　　　　　　　  　　POWER ---- CAMERA

ゴーグルに三軸加速度センサーでもついていて頭の動きをトラッキングするのかと思っていたのですが、このキットではトラッキング用のCAMERAを使っているみたいです。おかげでPCの周りが配線だらけです。この辺もハードウェアメーカーさんのがんばり次第で行く行く解決していくのかもしれませんが、今は配線をいかに家の猫から守るかを考えていこうと思います。

必要な環境構築

うちはWindows環境での構築なので、から必要なものをダウンロードしました。

:OSVR Runtime for Windows|OSVRの実行環境
:OSVR SDK for Windows|OSVRのソフトウェア開発環境
:OSVR HDK Windows Driver Pack|OSVRのハードのドライバ

これらのインストールが済むともろもろ必要なファイルは揃うようです。すでに何度もアップデートされているようなので、今後もファイルの更新は必要かもしれません。

インストールされた中で重要そうな要素を以下に並べてみました。

:OSVR-Core|OSVRの動作の基幹部分。OSVR Serverを含んでいて、VRを楽しむにはこれを起動しておく必要がある模様。OSVR Serverを立ち上げるとヘッドトラッキングカメラのランプが点灯し、頭の位置の追跡が開始されます。それとともに出力ウィンドウが現れ、OSVRの状態をテキストでおいかけることができそうです。
:Render Manager|OSVRのゴーグルの中にどのように出力するのかを設定する仕組みの模様。詳細は後程。
:OSVR Tracker Viewer|ヘッドトラッキングの様子を監視できるアプリケーションの模様

この時点でもうOSVRアプリは実行できるので、ちょっと試しにfeatured.htmlからデモをダウンロードして試してみましたが、ゴーグルの中にVRコンテンツを出力するのに手間取ったり、うまくできなかったりしました。どうもディスプレイの設定の調整が必要な様子です。その辺を次項に。

レンダリング

（この項を書き始めるまでに大分時間が空いてしまいました。HDK2も日本国内で購入できるようになり、OSVR公式サイトでも紹介されるソフトが増えました。ランタイムのインストールもパッケージ化されて、少し簡単になったようです。試しにインストールしてみたら32bit版のちょっと古いやつだったので、64bit版や最新版をインストールしたいときは、個別にダウンロードする必要がありそうです。パッケージにはControl Panel Interface(CPI)もくっついてきて、マウス操作で設定が変更できるようになりました。その後最新版のランタイムをインストールし直したらOSVR Centralという名前になってました。）

さて、実際にHMDゴーグルに絵を映す段になって知っておくべきことがありました。

:Directモード|画面の描画を直接ゴーグルに対して行うモード。
:Extendedモード|ゴーグルのディスプレイをサブモニターとしてOSに認識させて、拡張モニターの中に必要なウィンドウを描画させるモード。

ゴーグルの中に入っている液晶をOSがどう扱うかが選択モードによって異なるということのようです。OSVR SDKを使って開発されたソフトであればDirectModeを使った方が勝手がよさそうに思いました。Extendedモードだと拡張されたモニター扱いになって、ゴーグルをかけてみると左右の目に液晶が半分ずつ映し出されて目が痛くなりました。これは何か設定でどうにかなるのでしょうか？

それぞれのモードの使い方はOSVR Serverを起動するときに渡す設定ファイルに従うようです。OSVR CentralのようなコントロールパネルやコマンドツールからDirectモードのオン・オフの切り替えもできるようです。


公開されているソフトを試してみる

購入直後は公式サイトで紹介されていたちょっとホラーなサンプルやゲーム性のない景観を楽しむだけのサンプルなどをいじっていました。今はSteamのようなサイトでOSVR対応をうたうタイトルがチラホラ見つかるようです。Steamの規格SteamVRがOSVRと互換性があるとのことなので開発が容易なのかもしれませんが、実行環境を作るのにひと手間あったりして、あんまりうまく試せていません。

いくつかのソフトを触ってみて、また、他のVR環境の感想を探っているうちにVRに特有の事項というのがみえてきました。

プレイ時の姿勢

イスに座ってプレイする座位、立ってプレイする立位、ものによっては寝っ転がってプレイできるように作られているものもあるようです。OSVRがトラッキングしてくれるのはゴーグルの位置だけなのですぐに気を付ける必要はなさそうですが、HTC VIVEのルームスケールのように部屋の中を歩き回ることを前提としたコンテンツの場合、ユーザーの姿勢だけではなくユーザーの移動についても考慮する必要があります。

部屋の広さ

これもOSVRではただちには問題にならなそうですが、ゲームの操作方法に手足の動きを監視してそれに連動するような方法を用いる場合、実際の部屋の広さとゴーグルの中の広さとが同じでないため、手近な壁や家具に被害が出ることがあるようです。

解像度とFPS

ゴーグルの解像度はハードウェアに備わっているもの以上は出せないのでどうしようもないのですが、やはり解像度が高い方が没入感が高まるそうです。よくみるとゴーグルの中の液晶のドットの網目がみえますしね。OSVRはその点、ハードウェアが自分で付け替えられるのが素晴らしいですね。そのうち、HDK2のパーツを別途購入したいです。
ゴーグルの中の液晶が1秒間に何回映像を更新できるかというのも没入感を高めるのに重要だそうです。OSVRの液晶はHDK2で秒間90フレームだそうです。
絵のきれいさと更新回数はGPUの能力に依存しているので、ここにお金をかけるべきとのことでした。最近のGPU事情がわからないのですが、PSVRがヒットしてPC用のVRも一緒に売れるようになったら、GPUの性能がここからまたグングン上がっていきそうな気がします。買う前によく調べたいところです。


雑感

OSVRで既存の面白いものに触れるのはなかなか難しいので、とっとと自分で何かを作り始めるのがよさそうです。

日記一覧>OSVR


]]></description>
			<link>https://soft.candychip.net/OSVR/%E6%97%A5%E8%A8%98002</link>
			<guid>https://soft.candychip.net/OSVR/%E6%97%A5%E8%A8%98002</guid>
			<pubDate>Fri, 12 Jun 2026 16:55:36 +0900</pubDate>
		</item>
		<item>
			<title>開発日記/2011年の日記</title>
			<description><![CDATA[2011/11/7

FlashのStage3Dを使おうと思って悩んだメモ。

現象
いつの頃からかなんか思った位置にオブジェクトが配置されない

原因
Context3D.setProgramConstantsFromMatrixでシェーダーとは無関係なMatrix3Dを設定していた。AGALをいじってシェーダーに二つのMatrix3Dを使った座標変換をさせようとしてたけど、やっぱり辞めようってなって、二つ目のMatrix3Dを設定したまま放置されていたらなぜか影響が出てしまっていたらしい。

対策
余計なConstantsの設定を辞めた。

結果
元に戻った。Context3D.setTextureAtで使わないテクスチャを登録しといても怒られるかも。

2011/10/9

FlashDevelopのコード補完がきかないなーと悩んだのでメモ。

現象
自作クラスに関してコード補完がきかない
自作クラスに関してテキスト色が変わらない
クラスパスは通っている
コンパイルも通る

原因
ネットワーク越しのライブラリはひょっとしたらうまくFlashDevelopに認識されないかも

対策
必要なライブラリを含むネットワーク上のフォルダをネットワークドライブに割り当てた

結果
問題は解消されました。万歳

2011/7/20

東日本大震災を受けて、IT業界からも多くの人が支援に立ちあがりました。携帯電話がなかなかつながらない状況で、連絡網を着実に作り上げられていく工程はなかなかお見事でした。twitterやgoogleの特別サービスもかなり大きいインパクトがありました。

でも、なかなか一個人ができることは少ないなと思っていたところ、宮城県石巻市の復興プロジェクト「」の関係者の方からお声をかけていただき少し協力させていただくことになりました。

東日本大震災で大きな被害を受けた宮城県石巻市を単に復興するのではなく、被災以前よりも住みよい街を目指そうというというとても前向きなコンセプトのもと、広告代理店さんや都市再生に関連するヨーロッパの大学の学部と連携を取りながら、石巻市で様々な企画を運営しているようです。廃材を利用して家具を作ったり、フットサルの大会を開いたり、映画を上映したり・・・そのうち復興を行いながら、町の機能性を再検討するような段階もくることでしょうね。石巻市の住民の士気は相当高いようです！

石巻市に限らず、東北地方が再起するためのプロジェクトが多数立ちあがっているようです。日本の将来も捨てたものではなさそうです。



2011/5/13

久しぶりにAndroidアプリを作ろうとeclipseを立ち上げて、新しいプロジェクトをコンパイルしようとしたら、「Error generating final archive: Debug Certificate expired」なる表示が出てきました。このメッセージが古いプロジェクトをコンパイルしようとしても表示されるので、はてさて何の有効期限が切れたんだろうと思って調べたところ、「debug.keystore」というファイルの有効期限が切れているので一度削除すればよいとのことでした。

Windows環境では、「利用ユーザのフォルダ\.android\debug.keystore」が該当のファイルだそうで、削除して再度コンパイルすると再作成されるらしいので、メニューから「Project」→「Clean」を実行しました。

そしたら今度は「R cannot be resolved」というエラーが発生しました。どうもR.javaがクリアされた後に再作成できなくなっている模様。ということはリソースに問題があるのかな、とリソースファイルを開いてみるとグレーの画面に「eclipse is loading the sdk」という文字以外何も表示されません。

なるほど、最新のAndroid SDKをダウンロードしたけど、Eclipse側のプラグインが古いのかなと、プラグインの更新をかけたらビンゴでした。定期的にいじらないといろいろ一度に問題が発生して大変です。

2011/5/1

昨日のFlashとJavaScriptの連携の件が意外と根深かったのでもうちょっと考えてみることにしました。

Flash上でExternalInterfaceを介して、外側の仕組み（JavaScript）などに提供される関数をJavaScriptから呼び出すのが目的です。この関数へのアクセス方法がブラウザによって異なることから分岐処理が必要でした。

これまで以下のような感じでアクセスしていました。

:IE6-8|window['flash_no_id'].hogemethod
:FF3,Safari,Chrome|document['flash_no_id'].hogemethod

要するにIEだけ特別扱いすればいいようなので、「document.all」の真偽でアクセス方法を分岐していました。

ところがIE9では「document.all」が真（true）を返却してきたので、正しくないアクセス方法に分岐していることに気がつきました。そこで昨晩、小手先の対応を行ったら、他のブラウザで問題が発生したので、もうちょっと考えることにしました。

<object id="flash_no_id" name="flash_no_id"><embed name="flash_no_id" /></object>

こんな構造でembedタグにid属性は重複してつけないようにしていたため、Firefoxのバージョン4でも「document['flash_no_id']」にアクセスできなくなって困りました。結局、IEはjQueryの$.support.noCloneEventの真偽で判断して、FF4だけ別途分岐をさせるという格好悪いスクリプトができあがりです。タグの構造から書き変えないときれいコードにならなそうですが、embedタグがHTML5で正規に採用されそうですので、どうタグ付けするのが将来的によいのか判断できません。

もうFlashとか使わないでcanvasタグ使ってねっていう流れもありますが、Flashにしかできないことがいくつもあるのでなかなかそういうわけにもいきません。iPadにFlashPlayerが載ることはまだまだないのかなぁ。



2011/4/30

PukiWikiと他のシステムを連携させようと思い立ちました。そこでとりあえず、PukiWikiの記事タイトルの一覧を取得してみることにしました。PukiWiki内には記事タイトル抽出用の関数が lib/file.phpに用意されていました。

function get_existpages($dir = DATA_DIR, $ext = '.txt')
{
	$aryret = array();

	$pattern = '((?:[0-9A-F]{2})+)';
	if ($ext != '') $ext = preg_quote($ext, '/');
	$pattern = '/^' . $pattern . $ext . '$/';

	$dp = @opendir($dir) or
		die_message($dir . ' is not found or not readable.');
	$matches = array();
	while ($file = readdir($dp))
		if (preg_match($pattern, $file, $matches))
			$aryret[$file] = decode($matches[1]);
	closedir($dp);

	return $aryret;
}

なるほど記事保存用のディレクトリの中のファイル名をデコードするだけでよいのか。perlで書きなおすのも簡単そうです。


もうひとつ。

var player = document.all ? window["flash"] : document["flash"];
player.func();

JavaScriptからFlashの関数を呼び出すときにブラウザごとに処理を分岐させていた部分があったのですが、InternetExplorer 9ではdocument["flash"]の方に関数の定義があるようで、この分岐処理だと正しく関数が呼ばれませんでした。

var player = (document.all && window["flash"].func) ? window["flash"] : document["flash"];
player.func();

とりあえず、関数の登録有無もチェックするようにしてみましたが、もっとスマートにかける方法がありそうですね。


2011/3/22

お仕事でWPFを利用する機会があったのですが、しばらく利用していなかったためいろいろ忘れていて再勉強することになりました。そして改めてXAMLによる定義型の優位性や、データバインディングによる対話性の向上を認識しました。データバインディングは放っておいても勝手に値の同期がとれるものだと思い込んでいたのですが、コードでデータを更新したときはちゃんと通知してあげないといけないんですね。そのためのインターフェイスを初めて使いました。思い返せば、前に勉強した時はやりたいことを実現する方法しか勉強してませんでしたね。

WEB系の仕事が多いので、今後WPFに触れる機会がどのくらいあるのかわかりません。Silverlightのお仕事よりもFlashのお仕事の方が多いですね。確かWPFはブラウザ上での3Dのシェーディング目当てで勉強を始めたのですが、FlashもそろそろMolehillというプロジェクトの成果がお披露目されて、GPUを使った3D描画ができるようになりそうです。Silverlightの利点はそうなるとビデオのコピープロテクト技術あたりが差別化要因となるのでしょうか？なかなか策定されないHTML5の存在もあり、技術者の方もテクノロジーの選択に苦悩のときです。

今回の作業でXAMLの要素の名前に"Name"とつけたら

'***.MainWindow.Name' は継承されたメンバ 'System.Windows.FrameworkElement.Name' を非表示にします。非表示にする場合は、new キーワードを使用してください。

と変な警告が出て悩みました。XAMLの名前空間のこともちゃんと勉強しないと、適当な命名ができません。そういえば「x:」っていうプリフィックスのことも何か前と違うような気がしました。まぁ、古いことは忘れることにします。

C#もバージョンを重ねて、言語としての機能が充実してきているようですね。WindowsPhoneが流行ったら、コア部分以外の実装に使うことになるんでしょうか。

帳票関連の実装でDataGridがすごい役に立ったので助かりました。私の空白の期間に増えたコンポーネントらしいです。WPFの進化もおいかけていた方がよかったのかなぁ？

東北と関東を襲った大地震と津波、それに関連した一連の震災を受けて、生活が一変してしまった方もたくさんいらっしゃると思います。私や私の家族は無事でしたが、私の住む町の被害は小さくはありませんでした。計画停電でIT職としては業務に支障もでてきております。防ぐべくもない自然災害ですが、せめて事後のことだけでもしっかりやっていこうと思います。そんな中でtwitterの活躍や有志によるITを使った被災者支援など、新しい時代が感じられることがしばしばありました。日本の未来の姿はけっして暗くないと思います。



2011/2/28

jQueryで画像のスライダーを作っていたときのメモです。

要素がhideメソッドなどで隠されている時、positionメソッドで要素の座標を調べたら(0,0)が返ってきました。visibilityがhiddenになっているのと、displayがnoneになっているのでは意味が違うのでしょうねとは思いながらも、ちょっと不便です。とりあえず、hideメソッドで消す前に座標をjQuery.dataメソッドで保持しておくことにしました。

さらにdisplayがhiddenの画像のサイズがwidth:0xheight:0で返ってきたのでonloadイベントで画像を取得する際に困りました。showメソッドで表示した直後にloadイベントを再度呼び出してみましたがちょっとタイミングが遅くてフォローが大変でした。

2011/2/2

HTMLコーディング作業中、IMGタグのwidth、height属性をつけるのを簡便化するスクリプトを制作して使用していたのですが、PhotoshopをCS3からCS5にアップグレードしたあたりを境にうまく縦横サイズを取得できなくなってしまいました。確認するとGIFやPNGファイルは問題ないのですが、JPEGファイルのときだけうまくいかないようでした。他のプログラムがこれらのJPEGファイルを正しく扱っているところをみるとJPEGファイルが壊れているわけではないようです。

不便なので調査に乗り出したら、やはりスクリプト側の問題でした。JPEGファイルの中身は複数のセグメントに分かれていて、SOFというセグメントに画像の縦横サイズが書いてあるのですが、これまでずっと\xFFC0というSOFセグメントの目印（マーカー）を探していました。CS3の頃はこれで特に問題ありませんでしたが、どうもJPEGにはSOFセグメントの種類が16個あるのだそうです。それぞれのマーカには\xFFC0-\xFFCFが割り当てられているので、どれかを探してやるように修正を加えたところ、これまで通り縦横サイズが取得できるようになりました。

SOFセグメントが変更されたということは、圧縮方式とかが変わってるのでしょうか？詳しいことはわかりませんが、きっと何かこれまでよりきれいなJPEGになってるんじゃないかと推測されます。

2011/1/29

もうすぐ日付が変わって、サッカーアジアカップ決勝戦です。テレビをつけながら、mixiのイイネ！ボタンとfacebookのLikeボタンをくっつける作業をしていました。

Likeボタンをつけるにあたって一部のページがうまくLikeできなかったので以下にメモ。
GETメソッドでパラメータを付加するページでは先頭のパラメータ以降はクエリーがカットされる模様です。

http://example.com/wiki/?cmd=read&page=SamplePage

こんなPukiWikiのURLに「Like」をしようとしたら、お勧めのURLは、

http://example.com/wiki/?cmd=read

となるので、PukiWikiでは不正なWikiNameへのリンクのページとなってしまいました。
そういえば、Googleの検索ロボットにも同様のルールがあったように思います。

http://example.com/wiki/?SamplePage

PukiWikiの場合はこんな風にもURLを指定できるので問題ないですが、サイトによってはLikeできないページができてしまうのかもしれません。


2011/1/3

あけましておめでとうございます。
今年の目標をまだ決めかねていますが、「大量出力」というのが有力です。
質的な向上よりも「量」を上位に置いてみようかなという試みです。
Twitterなどはそのプラットフォームとして最適な気がします。ブログやSNS、このWikiなども適材適所で使ってみましょう。そしたら何か新しい形態がみえてくるかもしれませんね。

開発日記
]]></description>
			<link>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2011%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</link>
			<guid>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2011%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</guid>
			<pubDate>Fri, 12 Jun 2026 16:54:26 +0900</pubDate>
		</item>
		<item>
			<title>PostPet</title>
			<description><![CDATA[公式サイト
http://www.postpet.so-net.ne.jp/

概要
ペットがメールを運ぶ、というコンセプトで一世を風靡したソフト。

ピンクのクマ（テディベア）のモモは今や人気のキャラクターになりました。

私、飴屋はミニウサギばっかりです。

本サイトでは拙作PP3アイテムビューワーを紹介しております。PostPet V3のプラグインデータのビューワーです。
]]></description>
			<link>https://soft.candychip.net/PostPet</link>
			<guid>https://soft.candychip.net/PostPet</guid>
			<pubDate>Fri, 12 Jun 2026 16:53:42 +0900</pubDate>
		</item>
		<item>
			<title>開発進捗/PP3アイテムビューワーver.1.70の開発</title>
			<description><![CDATA[PP3アイテムビューワーver.1.70の開発
ステータス

3Dデータ形式の未確認部分を調査中

追加機能・修正点

PP3アイテムビューワーの3Dモデル読み込み機能を強化する。

現在、データ形式に不明な部分があるため、一部のモデルデータを正常に読み込むことができず、エラーが発生する。
不明なデータ部分には主にアニメーションデータが関係しているように思われる。
アニメーションの再現までは特に予定していないが、既存の機能と同様にモデルのX形式での出力までには対応したい。

余裕があれば3Dビューワーの開発までやりたい。が、今回のバージョンアップには含めないことにする。

作業工程・進捗
データの解析
解析処理の修正
出力処理の修正

テスト
遊具やペット自体のモデルデータの出力チェック
3Dモデルビューワーで表示を確認

リリース
リリース予定なし

開発進捗
]]></description>
			<link>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E9%80%B2%E6%8D%97/PP3%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%83%93%E3%83%A5%E3%83%BC%E3%83%AF%E3%83%BCver%2E1%2E70%E3%81%AE%E9%96%8B%E7%99%BA</link>
			<guid>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E9%80%B2%E6%8D%97/PP3%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%83%93%E3%83%A5%E3%83%BC%E3%83%AF%E3%83%BCver%2E1%2E70%E3%81%AE%E9%96%8B%E7%99%BA</guid>
			<pubDate>Fri, 12 Jun 2026 16:53:10 +0900</pubDate>
		</item>
		<item>
			<title>開発進捗/edit.dll ver.1.70の開発</title>
			<description><![CDATA[edit.dll ver.1.70の開発
ステータス

旧image.dllを移植中

追加機能・修正点

アクセサリ・家具・遊具のアイテムイメージを書き換え可能にする。
（元々image.dllで提供されていた機能）

アクセサリの名称等を変更する機能をつける

作業工程・進捗
image.dll部分の書き直し
データの解析
名称変更ダイアログの作成

テスト
書き換えチェック
PostPet V3での読み込みチェック

リリース
リリース中止

開発進捗
]]></description>
			<link>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E9%80%B2%E6%8D%97/edit%2Edll+ver%2E1%2E70%E3%81%AE%E9%96%8B%E7%99%BA</link>
			<guid>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E9%80%B2%E6%8D%97/edit%2Edll+ver%2E1%2E70%E3%81%AE%E9%96%8B%E7%99%BA</guid>
			<pubDate>Fri, 12 Jun 2026 16:52:56 +0900</pubDate>
		</item>
		<item>
			<title>facebookアプリ/日記1</title>
			<description><![CDATA[facebookアプリを作る動機

先日、お客さんのところでミーティングをしていたら、「mixiアプリ、facebookに移植しないの？」と聞かれたので、それもそうだなぁという感想を抱いたのが、今回の発端です。このお客さんはそういえばmixiアプリのことを教えてくれた人でもありました。mixiアプリのことを盛んに調べていた時期には、facebookのことや遅れてやってきたGREEやモバゲーのこともあわせて調べていたのですが、なかなかソーシャルアプリが趣味の領域から抜け出せず、ある程度のmixiアプリの開発が済むとそのまま忙殺されていました。

また一度はソーシャルアプリからの収益をあげることを検討した時期もありました。しかし、mixiアプリは個人開発者に多くの制限を課しているので、収益を上げる選択肢が少ないようにも感じました。漠然と法人化のメリットとデメリットに揺れたりもしていましたが、収益性の高いソーシャルアプリの運営には人手が必要になりそうなので、今の気楽な経営体制から一歩踏み出すことにも躊躇されます。このぬるま湯状態がユーザーの母数の異なるfacebook環境でも同様なのかどうかというのは少し興味があります。

なので当面の方針は、

とりあえず、あるものを楽に移植する
できるだけユーザの間口を広げる

ということでやっていこうと思います。

Date: 2011/5/26

Facebookページの登録

facebookにはFacebookページっていう仕組みがあるそうなので、とりあえず「飴屋」という屋号のFacebookページを作成してみました。mixiアプリではデベロッパー向けのコミュニティの作成ができて、そこでアプリの更新情報を発信してましたので、それと同じような使い方ができそうです。

149592268442714

装飾を施したり、コンテンツを充実させたり、人の目に触れるっていうことを意識しないといけませんが、現時点ではとりあえず登録だけ済ませた状態です。facebookをこれまでまともに使っていなかったので、友人ともつながりきれてないのですが、ページを作成した数秒後に友達が「いいね！」をつけてくれたのでビックリしました。

25人のファンを獲得するとURLの名前を変えられるとかなんとかだそうですので、いつか本腰を入れましょう。

Facebookページを作ったら、ページ右肩の「アカウント」欄から「ページ名でFacebookを利用」できるようになりました。登録者個人ではなく、Facebookページの管理人としてFacebook上で活動できるっていう意味だと解釈しました。

アプリのことを調べる

facebookアプリのことはよくわかっていませんので、参考資料の一つも欲しいところです。国内のサイトで日本語でアプリの作成手習いを記事にしているところがいくつかあるのでその辺をつまみ読みすれば何とかなりそうです。

http://developers.facebook.com/docs/guides/canvas/

公式な説明がfacebook上にもありますので、これもチラチラ眺めてみることにしました。Getting Startedあたりを意訳すると・・・

facebookアプリは、facebookサイト上に掲載されるWEBアプリです。PHP、Python、 Java、C#なんかのいくつかの言語を使ってアプリが作れます。
facebookサイト上のCanvasページに、アプリが実装されたURL（Canvas URL）をiframeを使って入れ込みます。
Canvasページはアプリごとに任意のURLが用意されます。
CanvasページとCanvas URLを設定するには、まずアプリの登録を行って、アプリに関する基本情報を入力する必要があります。それが終わったら、設定ページ「Facebook Integration」タブからCanvasページとCanvas URLを登録できます。

・・・とのことでした。画像をみるとCanvasの横幅は760pxと、mixiアプリを作った人には見覚えのある数値が示されています。mixiが確か、facebookアプリ開発者に配慮して、mixiアプリのCanvasの横幅を760pxに変更したんですよね。

アプリの登録

https://www.facebook.com/developers/createapp.php

ここでアプリを登録する旨、書いてあったのでリンクを踏んでみたら、「飴屋」っていうFacebookページ名ではなく、個人名じゃないと登録させない旨、警告をいただいたので、アカウントを変更して再度挑戦しました。アカウントの変更に面倒な手順が不要なのがフレンドリーで好感高いですね。

登録する情報はまず、「アプリの名称」と「利用規約に同意するか否か」でした。続いて、「セキュリティチェック」という名のキャプチャ入力を行いました。キャプチャの画像って機械的に読まれないようにテキストにいろいろ改変を行ってますが、CVの技術が上がってきてちょっとやそっとの改変では見破られてしまうようになってしましましたよね。そして、いまや人間にも読みにくい文字になってるなと思うこの頃です。

登録を済ませると確かに「アプリケーションID」と「Application Secret（秘密鍵？）」がもらえました。また、Canvasに関する情報や、アプリの基本情報を設定するフォームもありました。そしたら、次はアプリの中身の実装に入れそうです。

Date: 2011/6/5




日記一覧>facebookアプリ


]]></description>
			<link>https://soft.candychip.net/facebook%E3%82%A2%E3%83%97%E3%83%AA/%E6%97%A5%E8%A8%981</link>
			<guid>https://soft.candychip.net/facebook%E3%82%A2%E3%83%97%E3%83%AA/%E6%97%A5%E8%A8%981</guid>
			<pubDate>Fri, 12 Jun 2026 16:51:46 +0900</pubDate>
		</item>
		<item>
			<title>Ameya Retouch</title>
			<description><![CDATA[This plugin retouches the images you upload.



Description

Retouch function

Resize to frequently used size
Image rotation
Adjust contrast and brightness
Blur any part
Change color temperature
Paint over any area
Paste an image
Flip an image
Save as WebP

Installation

Admin Installer
1. Visit WordPress admin screen, click “Plugins” -> “Add New” menu.
2. Search for "ameya retouch" plugin from the list or search results.

OR...

2. Click "Upload Plugin" button, upload your zip file.
3. Click the "Install Now" button.
4. Activate the plugin.

Manual
1. Upload the Ameya Retouch folder to the plugins directory in your WordPress.
2. Activate the plugin.

Frequently Asked Questions

Why did you develop this plugin?

It was troublesome to launch Photoshop to make simple edits to the photos posted on the CMS.

Screenshots

Ameya Retouch Settings

Click "Media" -> "Retouch" menu. Design a retouch button from a "Retouch Settings" form.

Settings Screen(Ameya Retouch for WordPress)

Press the designed button to start retouching.

Canvas Screen(Ameya Retouch for WordPress)

When the screen turns gray, drop the image file to load it, adjust the size or brightness, and press the save button. When all work is completed, press the close button to finish.

Changelog

0.4 - 2026-03
New Features: Paint over any area
New Features: Paste an image
New Features: Flip an image
New Features: Save as WebP

0.3 - 2023-02
FIXED: escape echo'd variables and options
FIXED: use wp_enqueue commands
FIXED: file location notation

0.2 - 2023-02
FIXED: 'z-index' of retouch stage's background

0.1 - 2023-02
first work

Upgrade Notice

0.2
stage's background: 100 -> 99999 !important

0.1
Prepared the necessary functions and arranged the appearance of the plug-in.
]]></description>
			<link>https://soft.candychip.net/Ameya+Retouch</link>
			<guid>https://soft.candychip.net/Ameya+Retouch</guid>
			<pubDate>Sun, 29 Mar 2026 02:35:01 +0900</pubDate>
		</item>
		<item>
			<title>乙女天秤/プライバシーポリシー</title>
			<description><![CDATA[対象アプリ名

乙女天秤 (VirgoLibra)

提供元

飴屋

収集する個人情報

当該アプリの機能で直接収集する個人情報はありません。

ただし、アプリ内の広告表示にAdmobのサービスを利用し、アプリの配布にGoogle Playのサービスを利用しており、それぞれ必要な情報を提供しています。詳細は以下の「Googleのプライバシーポリシー」よりご確認ください。

参考：privacy

また、体重・血圧・運動量（歩数）をアプリで取り扱うために記録していますが、飴屋がそれらを収集することはありません。
体重・血圧のデータは、アプリを利用する端末や端末のバックアップデータに記録され、運動量（歩数）は他のアプリのデータを参照しています。

Health Connect（ヘルスコネクト）の利用について

当該アプリは、ユーザーが記録した体重・血圧データをGoogle Health Connectに保存・参照するために、Health Connect APIを使用しています。

アクセス・収集するデータ

体重（Body Weight）、体脂肪率
血圧（Blood Pressure）、心拍数

（これらはユーザーの許可を得た上で、アプリ内で読み書きします。飴屋がサーバー側でこれらのデータを収集・保管することはありません。）

使用目的

ユーザーがアプリ内でデータを記録・確認しやすくし、Google Health Connectや他の健康アプリとデータを同期・一元管理できるようにするため。

データの共有

第三者へ共有・提供することは一切ありません。

データの保持・削除について

データはユーザーの端末内およびGoogleアカウント内のHealth Connectに保存されます。
当アプリはデータを自動削除せず、ユーザーがHealth Connectアプリまたは端末設定から削除するまで保持されます。
サポート等で副次的に取得した情報（連絡先など）については、削除依頼があれば速やかに対応します。
GoogleのHealth Connectデータ保持ポリシーに準拠します（詳細はGoogleプライバシーポリシーをご覧ください）。

セキュリティ

データアクセスはユーザーの明示的な許可を得て行い、Googleの安全な仕組みを利用しています。

個人情報の取り扱い

基本的にアプリを利用して直接個人情報を収集していませんが、サポート業務で連絡先の情報が収集されることも考えうるので、それらの副次的に収集された情報に関しては、以下のように対応します。

第三者には提供しません。
サポート以外には使いません。
収集された個人情報の削除の要請があった場合、必要がなければ消すようにします。

このポリシーに関して

将来的にポリシーに変更が生じる場合、このサイトでお知らせします。



（2026/3/15 ヘルスコネクトに関して更新）
（2020/7/24 公開）]]></description>
			<link>https://soft.candychip.net/%E4%B9%99%E5%A5%B3%E5%A4%A9%E7%A7%A4/%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC</link>
			<guid>https://soft.candychip.net/%E4%B9%99%E5%A5%B3%E5%A4%A9%E7%A7%A4/%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC</guid>
			<pubDate>Sun, 15 Mar 2026 23:23:45 +0900</pubDate>
		</item>
		<item>
			<title>開発日記/2016年の日記</title>
			<description><![CDATA[2016/12/28

Wordpressで管理するサイトの制作をよくお引き受けするのですが、タイトルや本文以外にお客さんが独自に入力したい項目を更新画面に追加する際、よくカスタムフィールドテンプレートというプラグインを導入させてもらってもらす。数ある似たようなプラグインの中からこれを選択した理由は、ググるとよくみかける、という理由なのですが、たくさんの人に使われているだけあって、機能が充実しています。

ただ、ちょっとバグっぽい挙動が現在の最新バージョンに残っていて、お客さんから何とかならないかと相談されました。

相談1

フィールドセット（特定の入力欄のセット）をmultiple指定（セットの追加・削除ができるように）した際に、セットの中の複数行入力欄（textarea）にtinyMCE（リッチエディタな拡張）をつけると、フィールドセットを「追加」した際に追加されたtextareaのtinyMCEが操作を受け付けなくなる。

どうも調べた感じだと「追加」されるフィールドセットは一つ前のフィールドセットを複製し、入力値をリセットした上で下に追加されているっぽかったです。その複製の際にtinyMCE化されているtextareaがそのまま複製され、その上さらにtinyMCE化を重ねて行うおうとしているのが問題になっているようでした。

そこで「追加」の際にtinyMCE化を一度解除して、追加後に再度tinyMCE化を行うことでなんとなく誤魔化せるようになりました。具体的には「textarea_tmce_ids」というローカル変数にtextareaのidが集められているところで「tinyMCE.execCommand('mceRemoveEditor')」を呼び出すように変えたのと、「textarea_tmce_ids」で集めたidに対してtinyMCE化している箇所があるのでそれが終わった後に同様にそのidに対して「switchMode(id)」を呼び出してあげました。

相談2

tinyMCE化されたtextareaの内容を編集してから、別の入力欄でメディアピッカーを使って画像を選択すると先に編集したtextareaの編集内容がリセットされている

これはメディアピッカーで画像を選択した際の挙動が
選択した内容を入力欄（input[type~"hidden"]）に反映させる
カスタムフィールドテンプレートの入力欄の内容をサーバーに送って、更新する
更新された内容を読み込みなおして入力欄を更新する
という流れになっているのと関係がありそうでした。2番と3番の挙動はajax的にサーバーと通信をして行われるので、ページの遷移は伴いません。

ここでtinyMCEの挙動について説明をしておくと、textareaをtinyMCE化した場合、textareaは非表示となり、DOM的にtextareaの直前にリッチエディタが作成されます。リッチエディタ上で編集された情報は随時非表示のtextareaに反映されるというわけではなく、どうもフォームのsubmitをきっかけに自動的に内容が同期されるっぽいです。

メディアピッカーが画像を選択し終わったあとの処理はajax的に処理をされるので、カスタムフィールドテンプレートの入力欄の中でtinyMCE化されたtextareaだけは編集内容が同期される前の状態でサーバーに送信されてしまうというのが、問題の原因だったと思われます。

メディアピッカーで画像を選択した際に「cft_use_this」という関数が呼び出されるので、前述の2番の挙動の前に何かtextareaに編集内容を同期する方法がないかと考えていたのですが、時間がなかったので

win.jQuery("#cft textarea:hidden").each(function(){
	switchMode(win.jQuery(this).attr("id"));
	switchMode(win.jQuery(this).attr("id"));
});

↑こんな感じのコードを追加してお茶を濁しました。tinyMCE化を一度オフにしてからオンにしなおすと同期されるというのを利用しました。多分、もっといい方法があると思いますが、tinyMCEのAPIリファレンスを眺めていてもすぐに見つけることができなかったのでした。

早くプラグインの開発者の人が直してくれるといいなと思っています。
もしかしたらWordpress（の同梱tinyMCE）とカスタムフィールドテンプレートの相性が悪いだけなのかもしれません。そうだとしたら、導入タイミングがよくなかったという感じですね。

2016/9/12

WEBサイトを彩るパーツにSVGが使われることも増えてきた昨今に出くわした問題のメモです。とあるレスポンシブWEBデザインなページの内のとあるボタンをSVGにし、PCのブラウザでボタンをクリックできることを確認し、Android端末のブラウザ（Chrome）でも同様にボタンがクリックでき、問題なく動作することを確認し、続いてiOS端末のブラウザ（Safari）で同様の確認作業を行った際、ボタンをタップしても想定した動作が起こりませんでした。
タップ時にiOSでだけ何かしらのJavaScriptのバグが発生しているのかと思い、タップ時にalertを出すように処理を変更し、再度タップしてもうんともすんともいいませんでした。

どうやらiOSのSafariでは<svg>要素でonclickイベントが発火しないっぽいので、<a>要素ででも囲ってみようかと思いましたが、試しに

svg {cursor:pointer;}

↑このように<svg>要素に対して、マウスカーソルを指型にするCSSをあててみたところ、<svg>要素のボタンもonclickを発火するようになりました。「なんでだよ！？」と内心思いましたが、動いたのでとりあえずよしとしたのでした。


2016/8/22

不可解な現象が起こったとの連絡をお客さんからもらったので調査したときのお話です。いわゆるお問い合わせフォームを設置したら、お問い合わせ完了時の通知メールが二通届き、しかも片方は入力内容が空になっているとのことでした。

お客さん内製のPHPのフォームだったのですが、PHPの記述には問題がなく、サーバー側の問題かメールサーバーかスパムフィルターの問題を疑ったのですが、どうも関係なさそうでした。

悩んだ末、たどり着いた問題の原因は、完了ページに二度アクセスが飛んでいるということでした。

<link rel="shortcut icon" href="" />

お客さんがページのアイコンの設定を空にしていたのを発見しました。アイコン画像のファイルはユーザの操作とは関係なくブラウザが自動的に取得するようになっていることが多いと思います。その際href属性が空文字だと、リンクは現在表示中のURLに向かっていることになるので、完了画面を表示すると同時に自身へのアクセスがもう一度発生するということになります。その二度目のアクセスが入力内容が空っぽの不要なメールを生んでいたというのが原因でした。未検証ですが、Firefoxで起こるという情報がありました。

これが
<img src="" />

や
<script src="" />

では同じことが起こらないのは属性名の違いと関係するのでしょうかね。

2016/4/20

Windowsのアップデートに伴って再起動を促されたので、迷わず再起動したところPCが起動しなくなったので情報を集めながらなんとかしたときのメモ。逝ってしまったPCの中には一月くらい集中して作成していたプログラム等があり、バックアップが済んでいないファイルもいくつかあり、その中にはもう一度作り直すには相当根性が必要という状況でした。PC自体が復活するに越したことはないですが、そのファイルをサルベージするのを最優先事項と定めました。

対象はASUSのノートパソコン、OSはWindows 10、SSDのCドライブがあるだけで光学ドライブはなし。

PCは再起動すると、Windowsが自力で状態回復を始めようとしました。がどうしても途中で処理が止まって沈黙します。ソフトウェア的な問題だったらいいですが、ハードウェアが絡んでいそうな予感がします。再度再起動すると、PCはリカバリモードで立ち上がりました。いくつか選択肢が出ますが、とりあえずそのまま「続行（Windows 10を起動する）」を選択してみます。が、起動はやはり失敗に終わります。もう一度再起動するとまたWindowsが自力回復を始めますがストップし、次はリカバリモードで立ち上がります。今度は、メニューから「トラブルシューティング」を選びます。「PCのリフレッシュ」「PCを初期状態に戻す」「詳細オプション」というメニューが出てきますが、まだ初期状態に戻して大事なファイルを失うわけにはいかないのでリフレッシュを試みます。しかし、それも特に状況を変化させませんでした。

そして悪戦苦闘しているうちにとうとうPCはブルースクリーンを出してリカバリモードにすらならなくなりました。電源を切ってしばらく待ってから起動したらリカバリモードになることもありましたが、基本的に具合の悪そうな顔文字「:(」とエラーメッセージが表示されます。エラーメッセージは

page_fault_in_nonpage_area (ntfs.sys)

↑こんな感じでした。pageとついてるのでメモリ関連のエラーでしょうか。ntfsと書いてあるのでハードディスクかファイルシステムの問題でしょうか？とにかく原因がまだ特定できません。別のWindowsマシンで状態を回復させるディスクをUSBメモリに作ってみて、そこから起動を試みましたが、途中から同じエラーメッセージが出てだめでした。

いよいよできることが少なくなってきましたが、USBメモリを使って起動するというところから着想を得て、特に詳しくもないLINUXをUSBメモリから起動してみることにしました。確かそんなことができたと思って調べてみると、unetbootinというソフトが紹介されてました。詳しくは知りませんが、LINUXのOSイメージ（isoファイル）をブートしてくれるもののようです。デストリビューションをいろいろ選べるようで、Ubuntuとか使ってみるかと思ったのですが、いろいろやってうまくいかなかったので最終的にちょっとかじったCentOSにしました。デスクトップ版（GUI）とテキスト版（CUI）とがありましたが、無線LANでネットワークにつなぐのが楽だったのでGUI版を使いました。この時点でちゃんとわかっていなかったのですが、LiveCDとかいうものが使われているとかなんとかで、OSを再起動する度に設定が失われるので激しく戸惑いました。それからキーボードの配列が初期状態でUS配列だったのでこれにもいろいろ惑わされました。いろいろ設定をいじくり回してなかなか勉強になりましたが、目的になかなか届きません。

それでやっとSSDをマウントする段になって、ファイルシステムが原因でマウントできないとのメッセージが出ました。CentOSでは標準ではNTFSには対応していないとのことなので、ntfs-3gをインストールしました。このパッケージのあるリポジトリがまたCentOS6では標準的には読み込まれないとのことなので、その辺の設定も必要とのことでした。Microsoft育ちなので、デバイスの扱いやマウントするという文化に翻弄されながらSSDのデバイスとリンクするファイルを見つけてなんとかマウントできそうなところまできました。しかし、マウントを拒否されるのでした。やはりファイルシステムが一部壊れているのかはたまたブートに関する情報が邪魔しているのか、よくわかりませんが、「ntfsfix」というコマンドで解決できるかもしれないとのこと。これは「ntfsprogs」というパッケージにあるそうなのでインストールしてみます。そして実行前に注意する点があるそうで、対象ドライブのブート情報をぶっ壊す可能性があり、元のようには起動できなくなるかもしれないとのことでした。第一目的はファイルの救出ですから、それも止む無しと「ntfsfix」を実行します。破損したクラスタがどうのこうのという情報がズラーッと並んでいます・・・。

結果、対象のSSDに無事マウントでき、求めていたファイルも壊れずに残っていました。万歳！
さて次にこのファイルをどうやって拾い上げるかが問題になりました。なんかこのままCentOSのデスクトップに救い上げても、LiveCDのせいなのかなんなのか揮発してしまいそうで怖かったので、もっとちゃんとしたところに保存しておきたいなと思いました。そこでうちのルーターにつながっているNASが一番手っ取り早いのではないかと思い、マウントを試みます。うちのNASはLANDISKなのでSAMBAとCIFSを扱うモジュールをインストールするとマウントできるようになりました。

ファイルの復旧が完了し、一息ついたところで、このPCをよみがえらせることにも挑戦しようと思いました。とりあえずそのまま再起動してみると、SSDのブート情報は本当に吹っ飛んでいたのか、「ブートできないのでCtrl+Alt+Delで再起動しろ」的なメッセージが黒い画面に表示されました。現在、Windows10のインストールメディアをさっきのUSBメモリに作り、再インストールを試しているところですが、インストールが途中で止まるという状況です。5年近く前に買ったノートなので、開発機としては少し使いにくくなってきたところではありますが、いろいろ気に入っていたんですよね。どうしようか微妙に悩まれます。










2016/4/6

Wordpressで構築されたサイトをSSL化したときに起きたお話。WordpressのサイトURLをhttpsで始まるようにすれば大概のプラグインは問題なく変更後のURLが使われるようになりますが、投稿済みの記事の中で絶対URLでリンクが張られた画像などのパスは、そのままデータベース上に残るのでSearch-Regexのようなプラグインを使って置換してあげる必要があります。そして、テーマのファイル中の「http」を「https」に置換したら作業が完了・・・と思っていましたが、まだ一部にmixed content（混在コンテンツ）がみられるとのことでした。

原因はSimple Local Avatars プラグインで記事投稿者の画像を扱っていたのですが、そのパスにhttpが残っていたとのこと。Search-Regexでは検出されないようなので、以下のような簡単なコードで一括変換しました。

$users = get_users( array('orderby'=>ID,'order'=>ASC) );
foreach ($users as $user) {
	$av = get_user_meta( $user->ID, 'simple_local_avatar', true );
	$av = str_replace('http:','https:',$av);
	update_user_meta($user->ID, 'simple_local_avatar',$av);
	print_r($av);
}

とりあえずうまくいったようです。他にも応用できそうなのでメモ。

2016/3/1

Github上のお客さんのリポジトリにあるデータを使って、アレコレやろうというお仕事で、git cloneでつまづきました。

現象

Cloning into 'repo-name'...

↑cloneコマンドを叩くとこんな表示が出てから何も進展しない状態になりました。ローカルには「repo-name」フォルダができ、その直下には「.git」フォルダもでき、設定情報も記録されている模様。でも、なぜかファイルのクローニングが始まっている気配がありません。

原因

gitのことをインターネットで調べると、いつも「Windows環境」という条件がネックで調査が進まないのですが、それにしても情報が見つかりませんでした。なので、思いつく限りのことを試した結果、

git clone https://github.com/okyakusan_name/repo-name.git

↑このcloneコマンドでは情報が不十分だったようです。そもそも、お客さんの用意したリポジトリはプライベートリポジトリなのでアクセスが制限されているので、アクセス権限をもっているアカウントであることを伝える必要があったようです。公開鍵の登録作業やsshに関する設定はできていて、

ssh -T git@github.com

↑これが開通したので、それでアカウント認証に関する情報は揃っていたのだと勝手に思っていました。

とりあえずの解決策

git clone https://username:password@github.com/okyakusan_name/repo-name.git

↑このようにGithubのユーザ名とパスワードをくっつけたらcloneが無事完了しました。今回、cloneが停止したように見えたのは、多分裏で、usernameかpasswordの入力待ち状態が続いていただけだと思われます。

.git/config ファイルにユーザー名とパスワードごとURLが記録されているので、次にgitコマンドを入力する分には何も問題は起こりませんでした。ただ、URLに直接パスワードまで載っているのはよろしいはずがないので、多分 ~/.ssh/config ファイルあたりに何か記入しておけば最初のコマンドでも大丈夫だったのではないかと推測します。（未検証）Windowsユーザーは、~(home)ディレクトリになじみがないので、いろいろ過去にもつまづいたなぁ・・・。



2016/1/20

HTMLのコーディングのお仕事をしていると「古いIEへの対応」という呪縛のようなものがありましたが、今はそれも昔の話。随分と作業をしやすくなったものですが、また新たな悩みの種もあります。スマホのブラウザ各種、タブレットのブラウザ、Macのブラウザ、Mac上で動いているWindowsのブラウザ・・・この辺への対応を求められることが多くなってきています。スマホの特定機種のブラウザがメーカーによって独自の調整を経ている場合、HTMLのコーディングだけではどうにもならない差が生まれることもあり、まだまだ茨の道が敷かれているようです。

今回はiOSのSafariのhover擬似要素のお話です。hover擬似要素は元々、要素がマウスオーバーされたときの挙動を記述するためのものかと思いますが、マウスがないスマホやタブレット端末においてはその扱いに揺れがみられます。Androidのブラウザは指でタッチするのを開始されるとhover状態になるようです。iOSのSafariの場合、調べてみるとiOSのバージョンアップとともにその挙動は細かい変化を遂げてきたようです。現状で、一度タップするとhover状態になり、要素がリンクの場合、hover状態でもう一度タップするとリンクが発火するような挙動を示しています。

今回、お仕事でPCサイトを作成していて、途中からiPadでもみられたらうれしいというリクエストをいただいたのですが、とあるリンクがhover時に見た目がグニャリと変化し、リンク先に飛んだ後にブラウザの履歴を「戻る」がなされたときに、iPadだと戻った先のページのさっきタップしたリンクがグニャリと変化したままで気持ちが悪いとのご意見をいただきました。どうやら、「戻る」ってもhover状態はキープされ続けるようで、別の要素をhoverさせるまでそれは解除されないようです。

ググった結果、「擬似要素hoverを使うのは諦めろ（JavaScriptで同様に実装しろ）」という先人の知恵が散見されたのですが、がっつりPC向けに作りこまれたこのページの場合、擬似要素hoverを捨てるとその対応に工数がガッツリ持っていかれそうな塩梅でした。これはどうにか小手先で対処したいという欲求が高まります。

フォーカスを外す、他の要素のクリックイベントを発火する・・・などいくつか小手先の対処法を考えて試してみましたが、戻った先のリンク先はグニャリとしたままでした。他の要素がhover状態になるまで、頑なにhover状態を保ち続けるところから、内部的に「この要素は今hover状態」と要素毎に状態を管理するのではなく、window内の「今hover状態な要素」という情報が管理されていて、これを書き換えない限りずっとグニャリとしているのだろうなと予想はしましたが、書き換える有効な方法が思いつきませんでした。

最終的に今このグニャリとしている子は元に戻せないと判断し、一度DOM上からこの子を外して新しい子を同じ場所に配置することで戻ってもグニャッてない状態を作り出すことができました。

// jQueryを使用
// $('a:hover') <- hover状態にあるグニャリ要素
// その後ろに印代わりの要素を挿入しておきます

$('a:hover').after('<div id="tmpmarker" />');

// DocumentFragmentにグニャリ要素を移動させる

var tmp = $('<div />').append($('a:hover'));

// 印の要素の後ろにグニャリ要素を戻して、目印を消します

$('#tmpmarker').after(tmp.find('a')).remove();

これで要素はhover中と判断されなくなり、グニャッとしなくなりました。目的達成！この小手先技が不要になる未来を待っています。


開発日記
]]></description>
			<link>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2016%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</link>
			<guid>https://soft.candychip.net/%E9%96%8B%E7%99%BA%E6%97%A5%E8%A8%98/2016%E5%B9%B4%E3%81%AE%E6%97%A5%E8%A8%98</guid>
			<pubDate>Sun, 15 Mar 2026 20:45:39 +0900</pubDate>
		</item>
		<item>
			<title>お問い合わせ</title>
			<description><![CDATA[お仕事のご相談、サイトに関するご質問など、飴屋へのお問い合わせはこちらからどうぞ。

:件名|<input type="text" id="subj" value="" placeholder="例：お問い合わせ" size="40">
:お名前|<input type="text" id="name" value="" size="40" />
:連絡先メールアドレス|<input type="email" id="email" value="" size="40" placeholder="※入力を間違えるとこちらから返信できません。">
:本文|<span id="mes"></span>

<input type="submit" value="送信" id="sendbtn">

<script type="text/javascript" src="/js/contact.js"></script>]]></description>
			<link>https://soft.candychip.net/%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B</link>
			<guid>https://soft.candychip.net/%E3%81%8A%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B</guid>
			<pubDate>Sun, 15 Mar 2026 19:40:25 +0900</pubDate>
		</item>
		<item>
			<title>JavaScript</title>
			<description><![CDATA[HTML5が出てきてからくらいでしょうか。JavaScriptの機能がAPIと呼ばれてちゃんと整理されてきたのは。たくさんあるAPIをその都度調べて実装しているので、ここにメモを残してまとめておこうと思い立った次第です。//2020/11/11//


Canvas API
Webコンポーネント


]]></description>
			<link>https://soft.candychip.net/JavaScript</link>
			<guid>https://soft.candychip.net/JavaScript</guid>
			<pubDate>Sun, 15 Mar 2026 19:16:09 +0900</pubDate>
		</item>
		<item>
			<title>PuzzleNote</title>
			<description><![CDATA[アプリ情報

:アプリ名|PuzzleNote
:公開場所|details?id=net.candychip.puzzlenote

プライバシーポリシー

プライバシーポリシー

概要

作曲する必要があったので、自分風のエディタを考えてみました。


PuzzleNote ユーザーガイド

PuzzleNoteは、パズルのように音符を組み合わせて作曲できるAndroidアプリです。

基本的な使い方

アプリの起動

アプリを起動すると、メイン画面が表示されます。以下の4つのメニューから選択できます：

''テンポ設定'' - 曲のテンポ（速さ）と拍子を設定
''音量操作'' - 再生時の音量を調整
''譜面パーツ作成'' - 繰り返し使える譜面のパターンを作成
''譜面作成'' - パーツを組み合わせて曲を作成

作曲の流れ

''譜面パーツを作成'' - 音符のパターンを作る
''音高を割り当て'' - パーツに具体的な音程を設定
''パーツを配置'' - 作成したパーツを並べて曲にする
''保存'' - 作品に名前を付けて保存



譜面パーツの作成

譜面パーツは、繰り返し使える音符のリズムパターンです。

パーツの作り方

メイン画面で「譜面パーツ作成」をタップ
画面下部の音符ボタンから音符を選んでタップ


更新履歴

1.4

鍵盤入力画面の追加
画面の統廃合
譜面作成画面の強化
ピースの並び替え機能を追加
トラックの削除・名前変更

1.3

UI調整
音割れ防止に音量調整
英訳追加

1.2

MIDI音源を導入しました。
ドラムの設定画面を追加しました。

1.1

広告をつけました。

1.0

最初のリリースです]]></description>
			<link>https://soft.candychip.net/PuzzleNote</link>
			<guid>https://soft.candychip.net/PuzzleNote</guid>
			<pubDate>Thr, 12 Mar 2026 17:44:48 +0900</pubDate>
		</item>
		<item>
			<title>W-ZERO3メール/データ仕様/TREEフォルダ</title>
			<description><![CDATA[データ仕様より

TREEフォルダ解析

:Status.txt|フォルダの管理情報ファイル。（多分）「4桁の数字＋TABセパレータ＋数字」で構成される。
4桁の数字は次に新しく振り分けフォルダを作るときのフォルダのID番号と思われる。但し、振り分けフォルダのフォルダ名は2桁の数字なので100個振り分けフォルダを作った場合どうなるのかは不明。
もう片方の数字は現在のフォルダの数を表しているのだと思われる。
:XXフォルダ|XXには二桁の数字が入る。数字は「00」から順番につけられている。振り分け先フォルダ一つにつき一つフォルダが用意されている。このフォルダの中については以下に記述する。ちなみに「00」はシステムフォルダ、「01」は受信トレイ、「02」は送信トレイ、「03」は送信済みトレイ、「04」は下書きトレイをそれぞれ表している。初めて受信トレイに振り分けフォルダを作ると「05」が振られるはず。

XXフォルダ解析
:00.fdb|このファイルについては以下で詳しくとりあげる。
:00.fld|フォルダに含まれるサブフォルダの構成ファイル。一行につき一つのサブフォルダについての情報が記載されている。一行の構成は「4桁の数字＋TABセパレータ＋文字列」。
4桁の数字はフォルダのID番号。
文字列はフォルダの名称が記されている。
:00.msg|フォルダに含まれるメールの構成ファイル。一行につき一つのメールについての情報が記載されている。一行の構成は「4桁の16進数＋TABセパレータ＋1桁の数字A＋TABセパレータ＋1桁の数字B」。
4桁の16進数はメールのIDを示している。
1桁の数字Aは未読フラグだと思われる。未読なら1、既読なら0。
1桁の数字Bも何かのフラグっぽいが立っているデータがなかったので詳細は不明。
(追記：2006/8/29)メールのアイコンをタップするか、左ソフトキーを押下したら、「チェック」状態になった。複数のメールをチェックしておくと、一括して削除や状態変更、移動・・・その他ができるようだ。ということは数字Bはチェック状態のこと？と思ったが、チェック状態は一時的な設定項目なのでファイルとして記録されるわけはないのだった。他にないかなと探してみたら「保護」状態が思い当たった。保護状態とはメールを間違って消してしまうのを未然に防止するためのものだと思われるが、使ったことのない機能だ。チェック状態のように一時的な設定項目ではないはずなので、これしかない！と思ったのだが、残念なことに数字Bと「保護」状態は関係がないようで、保護状態にしてもフラグが立つことはなかった。何の項目なのだろうか？

00.fdb
振り分けフォルダに含まれるメールのヘッダ情報が格納されているバイナリファイル。
（以下、未稿）
]]></description>
			<link>https://soft.candychip.net/W%2DZERO3%E3%83%A1%E3%83%BC%E3%83%AB/%E3%83%87%E3%83%BC%E3%82%BF%E4%BB%95%E6%A7%98/TREE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80</link>
			<guid>https://soft.candychip.net/W%2DZERO3%E3%83%A1%E3%83%BC%E3%83%AB/%E3%83%87%E3%83%BC%E3%82%BF%E4%BB%95%E6%A7%98/TREE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80</guid>
			<pubDate>Thr, 05 Mar 2026 22:18:00 +0900</pubDate>
		</item>
		<item>
			<title>カーリングゆるくない</title>
			<description><![CDATA[アプリ情報

:アプリ名|カーリングゆるくない(Curling Easy?)
:公開場所|details?id=net.candychip.curling

プライバシーポリシー

プライバシーポリシー

概要
日本語 ja
テレビでカーリングを見ていると「なんとなくできる気がする」と思いませんか？でも実際のカーリングは、42メートルの氷上で20kgの石を投げ、ブラシで懸命に氷を磨き、石をミリ単位でコントロールする競技です。このアプリは、そのカーリングの感覚をスマホで体験できるシミュレーターです。

投球（デリバリー）
画面下部の石型ボタンを指でつかんで上にスワイプ。引っ張る速さで投球速度が決まり、左右にブレた分だけ石が回転します。回転方向によって石は緩やかにカーブ（カール）しながら進み、同じ力で投げても着地点が変わる。ゆっくりスワイプすれば重い投球、素早く引けば軽やかなドロー。その加減が難しくも面白い。

スイープ
投げた後は石の上空からの視点に切り替わります。石の進む軌道上を素早くこすると氷の摩擦が下がり、石が伸びる。こすらなければ自然に止まる。「もう少し奥まで届いてほしい」「曲がり過ぎそう」という瞬間に、指を走らせるかどうかの判断が求められます。

4つの視点

Throw：投球者の一人称視点。ブラシで示された目標に向かって投げる
Top：石を追いかける上面カメラ。スイープはここで行う
Skip：ハウス側から石が向かってくるのを見守る視点
House：ハウスを真上から俯瞰し、どの石が有効かを確認

物理シミュレーション
WCF（世界カーリング連盟）公式規格の寸法で作られたリンクで、石の質量・摩擦・カール・回転の減衰まで物理モデル化しています。投げ方や氷の状態によって毎回違う結果が生まれます。

English en

Watching curling on TV, it looks deceptively simple — just slide a stone down the ice. But in reality, you're launching a 20 kg granite stone down 42 meters of ice, frantically scrubbing with a broom, and trying to land within centimeters of your target. This app lets you experience that feeling on your smartphone.

Delivery (Throwing)
Grab the stone-shaped button at the bottom of the screen and swipe upward. How fast you drag determines the weight of your throw; how far left or right you drift adds rotation (curl). A slow drag gives a heavy, deep-running stone; a quick flick sends it flying. Getting the balance right is harder than it looks.

Sweeping
After releasing, the view shifts to a top-down perspective following the stone. Rub your finger quickly along its path to reduce friction and help it travel further. Leave it alone and it will curl and slow naturally. The question — "do I sweep or not?" — becomes surprisingly tense in the moment.

Four Camera Views

Throw: First-person delivery view. Aim at the brush held by your skip
Top: Overhead tracking camera. This is where you sweep
Skip: Watch the stone approach from the house end
House: Bird's-eye view of the house to see which stones are scoring

Physics Simulation
Built to WCF (World Curling Federation) official dimensions, the simulation models stone mass, ice friction, curl drift, and rotational decay. Every throw plays out differently depending on your delivery and how much you sweep.

更新履歴

1.1

Ads have been added
You can now move your gaze on the skip screen
Added a meter to gauge throwing power when throwing stones
Adjusted UI positions

広告がつきました
Skip画面で目線を動かせるようになりました
ストーンを投げるときの力の目安となるメーターをつけました
UIの位置を調整しました

1.0

First release

最初のリリースです]]></description>
			<link>https://soft.candychip.net/%E3%82%AB%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%86%E3%82%8B%E3%81%8F%E3%81%AA%E3%81%84</link>
			<guid>https://soft.candychip.net/%E3%82%AB%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%86%E3%82%8B%E3%81%8F%E3%81%AA%E3%81%84</guid>
			<pubDate>Thr, 26 Feb 2026 02:15:26 +0900</pubDate>
		</item>
		<item>
			<title>JavaScript/Webコンポーネント/ライフサイクルコールバック</title>
			<description><![CDATA[customElements.define('fan-menu', FanMenu);

前回、こんな感じで独自のタグとその実体となるクラスを結びつけました。この段階で独自のタグが''誕生''したわけです。誕生するものはいずれ死ぬのは、生物もプログラムも一緒です。ここで''ライフサイクル''って言葉がでてきます。Webコンポーネントの場合は、ライフサイクルの段階に応じて、そのクラスのメソッドが呼び出されるよってことでライフサイクルコールバックって呼ぶようです。JavaでAndroidアプリを作ってたときなんかは、ライフサイクルイベントって呼んでたかな。

とりあえず、さっきのタグ誕生のタイミングではconnectedCallbackメソッドが呼び出されるようです。main関数的な、initialize的な、OnCreate的な、とにかく物事の始点となりそうなメソッドです。カスタム要素の設定はできる限り、クラスのconstructorではなく、connectedCallbackメソッド内で行うことが推奨されてるようです。要素が文書に追加される度に呼び出されるせいですかね。インスタンスができるタイミングと、DOM（文書）の表舞台に立つタイミングは必ずしも一致しないせいでしょう。タグは二度生まれる。誕生と登場は違う。

この反対の操作の時に呼ばれるのがdisconnectedCallbackメソッドです。文書から削除される度に呼び出されるそうです。

connectedMoveCallbackメソッドが定義されていると、文書内で要素が移動するタイミングで呼ばれるそうです。定義されてない場合はdisconnectedCallback（退場）とconnectedCallback（登場）が順番に起こって、実質移動したことになるのかな。

同じ文書ではなく別の文書に移動するときは、adoptedCallbackが呼び出されます。まぁ、あんまり複数文書間をまたぐような作業はしないから、あんまり用がないかも。

attributeChangedCallbackは属性値（アトリビュート）が変更、追加、削除、置換されたときのコールバックです。これは使うことになりそう。

connectedCallback

では実際問題、constructorではなく、connectedCallbackに書くべきことってなんでしょう？

イベントリスナー登録

イベント関係は文書に登場中にリスナーを用意した方がいいみたいです。逆にdisconnectedCallbackでremoveEventListenerしないとメモリリークしやすくなるみたいです。

子要素への参照取得 (querySelector)

DOMが確実に存在しているタイミングに行う方が安全です。この辺はShadow DOMについて、もっと知る必要がありそう。

属性値に応じた初期化

constructor時点では属性がまだ反映されていない場合があるので、connectedCallbackで行うべきでしょう。

fetch / WebSocket / observable購読

不要な通信を避けるため、登場する段（要素が実際に表示されてから）になって初めてやればいいでしょう。

実践

それでは、constructorのDOMを書き換えてみましょう。


constructor() {
super();
this.attachShadow({ mode: 'open' })
.innerHTML = `
<button class="trigger" aria-label="メニュー">+</button>
<div class="items">
<a href="#" class="item">Home</a>
<a href="#" class="item">Favorite</a>
<a href="#" class="item">Settings</a>
<a href="#" class="item">Image</a>
<a href="#" class="item">Message</a>
</div>`;
}


buttonをトリガーにメニューの絵文字アイコンが登場するコンポーネントを作るので、buttonとメニューのリスト（items）をShadow DOMとやらにつけました。


connectedCallback() {
const root = this.shadowRoot;
this.trigger = root.querySelector('.trigger');
this.items = [...root.querySelectorAll('.item')];
this.addEventListener('pointerenter', openMenu);
this.addEventListener('pointerleave', closeMenu);
this.trigger.addEventListener('pointerdown', (e) => {
e.preventDefault();
openMenu();
});
}


connectedCallbackでは、DOMに乗ったトリガーボタンと5つのメニューアイテムへの参照を取得してみました。connectedCallbackなので、要素が登場する度にthis.triggerとthis.itemsの値は最新の状態に更新されます。
メニューを開いたり閉じたりする関数を、fan-menuタグのイベントリスナーに登録し、this.triggerも押されたら開く関数が作動するようになりました。（openMenu / closeMenu の詳細は割愛）

]]></description>
			<link>https://soft.candychip.net/JavaScript/Web%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF</link>
			<guid>https://soft.candychip.net/JavaScript/Web%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF</guid>
			<pubDate>Mon, 23 Feb 2026 17:37:05 +0900</pubDate>
		</item>
		<item>
			<title>JavaScript/Webコンポーネント/コンポーネント状態属性</title>
			<description><![CDATA[Webコンポーネントは内部に持つShadow DOMを外部のLight DOMと切り離して考えられるところがいいのですが、コンポーネントの内部状態を外から操作したいときももちろんあるわけです。同じカプセル化の考え方を持つクラス（class）化、オブジェクト指向なんかだったら、publicやpubみたいなキーワードをつけて、外からのアクセスを明示的に許可できますが、Webコンポーネントの場合、属性値（attibute）を使った操作ができそうです。


<fan-menu></fan-menu>
<fan-menu open></fan-menu>
<fan-menu disabled></fan-menu>
<fan-menu color="red"></fan-menu>


こんな感じでメニューが開いていることを示したり、非活性化状態だったり、赤い色をつけたり、Webコンポーネントを操作・変更できます。属性値なので''hasAttribute''、''removeAttribute''、''setAttribute''メソッドで外から操作できますし、Webコンポーネントと紐づいたClassに操作用のメソッドをつけておくこともできそうです。


toggle() {
if (this.hasAttribute('open')) {
this.removeAttribute('open');
} else {
this.setAttribute('open', '');
}
}


開閉トグルをつけるならこんな感じでしょうか。

observedAttributesとattributeChangedCallback

こういった属性値を使う場合、事前に宣言するようなメソッドをクラスに生やしておきます。


static get observedAttributes() {
return ['open', 'disabled', 'color'];
}


属性名を文字列の配列と返します。これをやっておくと、属性値に変化があった時にイベントのようにattributeChangedCallbackが呼び出されるようになります。


attributeChangedCallback(name, oldValue, newValue) {
console.log(`属性 ${name} が ${oldValue} → ${newValue} に変更された！`);
if (name === 'open') {
const isOpen = newValue !== null;
if (isOpen !== this._isOpen) {
this._isOpen = isOpen;
// ここでUI更新
}
}
}


属性が新しく追加されたときは、oldValue が null で、属性が削除されたときは、newValue が null になります。クラスの状態（内部の変数）をこれで更新し、UIへの影響も連動して行えるようになりました。

スタイルシート

もちろん、属性の変更に応じたCSS定義による変化も可能です。


:host .items {
display: none;
}
:host([open]) .items {
display: block;
}

]]></description>
			<link>https://soft.candychip.net/JavaScript/Web%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88/%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E7%8A%B6%E6%85%8B%E5%B1%9E%E6%80%A7</link>
			<guid>https://soft.candychip.net/JavaScript/Web%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88/%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E7%8A%B6%E6%85%8B%E5%B1%9E%E6%80%A7</guid>
			<pubDate>Mon, 23 Feb 2026 16:57:19 +0900</pubDate>
		</item>
		<item>
			<title>JavaScript/Webコンポーネント</title>
			<description><![CDATA[コンポーネントと聞いて何を思い浮かべるのかはその人の専門分野によって違うと思いますが、基本的に一つの基本がまとまった''部品''くらいの意味合いだと思います。私の場合、コンポーネントといえばWin32でフォームにペタペタ張り付けていく構成要素として初めて知った言葉でした。同じ機能は同じ部品として実装するのが正しい時代でした。メモリの豊かな現代とは正義も異なっていたのです。とはいえ、その根っこの思想は別に悪いものではなく、保守性や合理性からの要請で、使いまわせる部品が望まれることは多いはずです。Web製作においても当然それは当てはまるわけで、例えばReactなんかで多くの人はコンポーネント（部品）を作ってるんだろうと思います。（私は何というかJSXっていうファイルがあんまり好きになれなくて、率先してReactを選択しないんですが、人気過ぎてやらざるを得ないです。classNameって何だよってぼやきながら）それとは別に''Webコンポーネント''っていう技術がありまして、これだとフレームワーク非依存で部品としてカプセル化できたりします。2020年代になってようやくブラウザの足並みが揃ってきたそうで、使っていってよさそうな技術にみえます。

Webコンポーネント用のAPIがあるぞって話ではなく、主に3つの機能を併用して、部品化カプセル化を実現しているようです。

Custom Elements - 独自のHTMLタグ（例: <my-button>）を定義できる。
Shadow DOM - 素の内部構造を隠蔽し、スタイルをカプセル化する。
HTML Templates - 描画されるまで使われない再利用可能なコード片を作成する。

これができたらとてもHTMLがすっきりしそう！いろんなフレームワークがHTMLをどんどん汚くしていくのに、こいつは違うかも！？と思って調べ始めた記録です。 //2026/2/21//



最低限の構成
ライフサイクルコールバック
Shadow DOMのスタイル
コンポーネント状態属性


]]></description>
			<link>https://soft.candychip.net/JavaScript/Web%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88</link>
			<guid>https://soft.candychip.net/JavaScript/Web%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88</guid>
			<pubDate>Mon, 23 Feb 2026 16:19:14 +0900</pubDate>
		</item>
	</channel>
</rss>
