2025年11月18日

AI(ドラ○もん)を求めるお客様、なぜかそれを否定しない営業

 ここのところ弊社営業が妙に営業活動を頑張ってくれている
新しく導入した営業支援のAIに言われたとおりにコピペ営業を上の指示で繰り返している様子

数年前から自治体向けの製品を始めた矢先に標準化の爆弾投下で案件吹っ飛び
RPAで繋いで孫請曾孫請案件のウェイトをどう減らすかで悩む中で次はAI

コンサルに言われて導入したAIを盲信する経営陣も経営陣だが
そのコピペ提案電話を受けてPoCをー検証をーという自治体職員の多いこと多いこと

議員とかに言われて渋々の実績作りなのか本気でやろうとしているのか
弊社製品、パブクラのパーツ組み合わせて作ってるだけだからちょっと考えれば同じようなの自前で作れると思うんですよね
それをわざわざ費用かけてPoCしてくれるところは大変ありがたいといえばありがたいお客様です、はい

ただ、どこも本番稼働に向けての見積もりだすと手を引くところまで同じ
まあ従量課金とか、ユーザーごとの契約を出して、保存するナレッジのベクトルDBやサーチエンジンの費用加えたら、結構なお値段になりますからね
大抵の自治体のデータって、構造化もされていないデータを学習させて云々の案件が多いので
そのへんに関する費用が跳ね上がるんですよね
※見積もり作るのはタダじゃないんですよ、裏でエンジニアが色々計算したりするんですよ

で、たまーにいるちゃんとAI勉強してわかってくれている担当がいると
クラウドPoCの後でオンプレと組み合わせたハイブリッドはできないかとか、業務上どのくらいのTok/secあればいいかとか、Sparkでローカル稼働できないかなーみたいな技術的な会話ができるのがせめてもの救いです
なんなんですかね、時折なんであんた自治体なんかにいるの?って人
是非弊社に!とは言えないですが、もっと稼げる仕事あるでしょと言いたくなる(というか雑談の合間に普通に言う)

まあ、自分も自治体で働きたいかというと安定性だけはいいなーと思うんですけど
いかんせん給与安すぎるんですよね、景気に左右されないんでボーナス当てにした買い物しやすいのは羨ましいけど
そろそろGTX1050Tiも卒業したいし、ツクモでG-GEARでも買おうかと思ってたら、Aimのスチールモデル全滅だし

なんとか年末はゲームをゆっくりできる時間取れるといいなぁ

2022年1月8日

長いドキュメントを目で追うのに疲れた

 プログラムを書く時間よりも、ドキュメントを読んでいる時間のほうが長くなっているのは精神衛生上好ましくないとはわかっているものの、読まなければ読まないで別の問題が出てしまう。

右目と左目を独立して動かして認識できたらなぁ~、と思うが、多分だめだ。おぼつかない脳みその処理総力を一瞬で超える自身がある汗

なので、目の代わりに最近は耳を使用してドキュメントの確認を試している。

ゆっくりボイス的なものは流石に長文聞いているともやもやしてきてしまったので、
VOICEVOXを使用して読み上げを試してみた。
→英語をアルファベット読みしてお茶噴いた(´・ω・`)

しょうがないので「A.I.VOICE」っていうのでチェック。

A.I.VOICE 琴葉茜・葵

音声素材集 「exVOICE 琴葉 茜・葵」Vol.1
音声素材集 「exVOICE 琴葉 茜・葵」Vol.3

あー。いいわこれ。YouTubeとかでやたらと早口で喋ってたりするからどんなもんかと思ってたけど。スピード遅くすると聞き取りやすい。
むしろ上司の声聞くよりこっちの声聞いてたいw

で、買ったあとで他の声とも聴き比べたくなったので、

A.I.VOICE 結月ゆかり

結月ゆかり exVOICE vol.1~vol.3

も買ってしまったのは言うまでもない。ゆかりさんですよね、ドキュメントを優しく読んでくれるのは!

ただ、ずっと聞いてたら今度は耳悪くなりそうだな。。。
おいら、仕事終わって暇になってやる気が出てきたらゲーム実況するんだぁ(フラグ

2021年1月5日

AIという名前がついているが、中身はただの計算式じゃん!?

 仕事が変わって次はどんなプロジェクトが舞い込んでくるのかなー
と思っていたところ、AIで業務をお助けします!的な広告を営業が作っていた。

毎日自動でAIがこれまでの情報を分析して最適な~

ってやつでしたが、いつのまに弊社にAI技術者が来たのでしょうか・・・
自分の知らないところで誰かがAIを組み込んでくれたんだ!きっとそうだ!

でもなぜか、ソースコードは変わっていない。。。
他のモジュール連携があるようにも見えない・・・
外部連携ができるようなAPI設計ではそもそもない、、、

これまで通りただの加重平均で求めてるのをAIって宣伝しやがった(泣)

2015年9月12日

久々に自分用ツールを作ってみる

プログラマとしてのお仕事よりもExcelをいじるお仕事の方が増えてきたのは
人手不足と受注減少のせいだろうなぁと思う今日このごろ

HDDがヤバイです(唐突)
まあ、手当たり次第色んな物を録画したりダウンロードしてたりしたら
3TBとか積んでも直ぐに容量いっぱいになるのが高度情報化社会の常、、、

とくに昔のVHSをDVDデータに変換したものがテープ時代ほどではないですが
やっぱり場所をとることに気が付きました(データ的にも物理的にも)

なので、容量無制限のクラウドストレージに登録して、
保存してしまおうという魂胆です。


無制限クラウドとしてサービスを開始しているサービス
AmazonCloudDrive
MicrosoftOneDrive

こいつら検閲がとっても厳しいことで有名です。。。

改正された某法律も影響しているのかと思いましたが、
単純にアメリカの某ミレニアム法順守からかと。

で、いくら大手の2社とはいえ、
すべてのファイルを人間が逐一チェックしているとは到底思えないので、
おそらくファイル照合の技術でチェックしていると思うのですよ
(間違っていても責任は取る気ありません(^^)v)

多分画像については顔認識システムと、画像照合の複合処理で
よく問題となる年齢+画像内の特定色含有率とかで判定しているのかも・・・
(あくまで個人の推測です)

そして動画はブラックリストとのハッシュ照合ではないかと・・・
(だから、個人の推測ですってば)

もっとも、クラウドにそこまで危険なファイルを保存する気は全く無いですが、
個人のファイルを照合されるのはいささか気分の良いものではないので、
なにかいい手段はないかと考えてみた30秒。

「無圧縮で圧縮して、暗号化して、ファイル名変えて転送すれば十分でしょう」

で、出来上がったのは


こんな無駄ツール(≧∇≦)/作成時間1時間

ファイルをドラッグアンドドロップすると、ファイル名とかサイズを取得して、
サムネイル作ってファイル名秘匿と暗号化をする。と。

具体的には
FFMpegでサムネイルを取得して、ランダムで作ったシリアルキーをファイル名として
新しくRAR形式で無圧縮書庫にし、EDで暗号化をする
という流れをマウスポチポチでできるように。と。

あとはそのファイル名とかをExcelにリストとして出力して完了。
ネット上にジャケ写とかあればURL指定でダウンロードしてExcelとか
Googleのスプレッドシートとかに表示できるように。と。

もう完全に自分専用の自己満足ツール。。。
相変わらずデザインセンスの無さには自己嫌悪・・・

これならば、ファイル名での照合もすり抜け、ファイルハッシュも異なるし
わざわざ個人のファイルをコストかけて解読することもしないであろう、という
技術の無駄遣い

・・・別に検閲とかされてもいいのですが、ご検知でアカウントロックとかがマジ勘弁なので
転ばぬ先のひきこもり(転ばないように杖をついて歩くより、外に出ずに引きこもろうぜ!の意味)

なお、動画は好きな秒を指定してキャプチャできるようになっていたりする


京都府の国勢調査CM、今回もぶっ飛んでて素敵です。
(いなり、こんこん、恋いろは。2期やらないのかなぁ)


ソースコードも載せようかと思ったが、
久々なので投稿の仕方を思い出すため、またいずれ・・・(^_^)/~

2012年2月29日

フォルダのファイルを拡張子で絞込みメールに指定サイズで分割して添付して送るツール

本年度も残すところあとひと月余りとなりました今日この頃、
皆様いかがお過ごしでしょうか?

相変わらず年度末が近づくと受注金額に見合わない仕事がやってきます。
サードパーティーのライセンス金額分が予算に入っていない・・・(;-_-) =3
いやそりゃおかしいのでは?と思ったりもしますが、
上がOK出したなら上の人間に責任とって対応してほしいものです以下略




さて、随分と前に作成してデバッグを依頼したあと音沙汰のなかった上のツール
ソースが欲しいってんで差し上げたところ、
そいつの会社の社内システムツールとして
バッチ機能までつけてバリバリ使い始めてた(・・∂)

ツールの謝礼?もちろん貰いましたよ!みそらーめんチャーハンセット!
ファミレスで好きに頼んでいい権利とどちらにしようか迷ったんですが。うん。

。。。


まあ、それで仕事が便利になったっていうのであれば、エンジニア冥利につきるものです。


とりあえず致命的なバグはなさそうだし、そろそろ作者も忘れかけているので
忘れないように公開してしまおう。うん。

が、しかしながら、まだツールの紹介ページは出来上がっていないという。。。
いやはや、お恥ずかしい(〃∇〃) てれっ☆

いるかいないかわからないですが、
使ってみたいという物好きなチャレンジャーがいる可能性は0でないと信じているので
先にツール本体を公開シてしまいます。

こちらです

紹介ページは多分。週末には・・・作れる。。。といいな
それでは!また!

2012年1月15日

フォルダ内のファイルを指定の宛先に一定容量に自動で分割して送る

大切な写真データ、みなさんはどうやって保管されていますか?
パソコンの中で消えたら困るもののTOPに出るであろう画像ファイルたちです。

保存方法は色々ありますが、
CDやDVDだと経年劣化で突然見れなくなったりしますし、
オンラインの画像保管スペースは色々と敬遠する理由があったり・・・

非公開なのに中の人が画像をこっそりチェックしてて規約違反ですよってメールが来たサービスもあったなぁ
ログイン状態管理に脆弱性があって特定操作をするとパスワードなしでアルバム見れたサービスもあったなぁ
ダウンロードしたら画像のEXIF消えてたり勝手に縮小や圧縮されてたりしたサービスもあったなぁ

とまあ、年々増え行く画像ファイルを比較的安全に保管する方法がないかと
かれこれウン年前から考えて、メールでWEBメールに添付送信するのが消去法的に
一番信頼性が高いんではと・・・o( ̄ー ̄;)ゞ
Gmailは7GBあるしHotmailも容量無制限だし
(SkyDriveはロボットがこっそりチェックしている噂)
(メールデータなら通信の秘密とか電気通信事業法とかでチェック面倒くさそうだし※ウイルスチェック除く)

ということで、これまたウン年前から構想だけして
面倒くさくてプログラムを作っていなかったのですが(;´▽`A``

受験生がセンター試験で学校に引きこもってることだし、
貧乏プログラマも家に引きこもってちょっとやれるとこまでやろうじゃないかと。
(寒くて外に行きたくないだけだ)

で、あっさりと1日で出来上がってしまったので、構想ばかりしていた自分の過ぎ去りし日々は
一体何だったのかと、、、まさに案ずるより産むが易しですな(〃∇〃)

さて、てなわけで今回作ったツールはこんな仕様になっています。

○仕様書

・指定されたフォルダ内のファイルを決められた宛先に添付ファイルで送信する
・一通辺りの添付上限サイズは任意に決定できることとする
・フォルダ内のファイルで送信を行いたくないファイルの除外機能を持つ
・一度に送信されるファイルの総容量の制御を可能とする
・メールの送信間隔を任意に制御できるようにする
・件名/連番を任意で編集可能な仕組みを用意する
・本文に添付されるファイルの名称及びファイルサイズが記載できるようにする
・宛先やサーバ情報などはローカルに保存できるようにする
・SMTP認証やSSL通信に対応する
インストールを必要としない!
無料!

うん。こういうとってもシンプルな要点のみ書かれたモノの方がプログラムは作りやすい
足りない部分は自由に作っていいわけだし、( ̄▽ ̄)V

実際のところ、フォルダ内のメールを自動で送信するツールっていうのは。
はるか昔から色々出ているのですが、
無駄にグラフィカルだったり、容量で分割出来なかったり、Excelマクロだったり、
フォルダ内全部を一括で送ることしか出来なかったり、インストールが必要だったり
有料だったり・・・・

やはり、自分の欲しい機能を満たすものは自分で作るのが一番!
My Tool Made Myself
で、完成したプログラムの画面がこちら
「フォルダ内のファイルをメールに添付して送るツール。容量で分割もできるのだ」


ごちゃっとしているようですが、必要なものをコンパクトにまとめたらこうなりました。
無駄なグラフィックなどは一切排除!です

知恵袋などで「フォルダ内のファイルを自動で添付してメールで送れるソフトはないですか?」
とかの質問をたまに見るので、そういったことにも使えるのではなかろうかと。うん。

突貫工事的に作ったが故、エラーチェックがまだ甘いので一般公開はちょっと待ってください。
仲間内でコードレビューとバグチェック(人柱)してから公開しようかなと。

どうしてもすぐ欲しい!って人がいたら教えて下さい。α版で良ければ・・・

2012年1月5日

2012年も残り360日程度

新年でございます。
皆様いかがお過ごしでしょうか?

まあ、新年だからといって何かが突然変わるわけでないことは
学生時代からわかっていることですので、
社交辞令的な「今年は良い年にしたいですね」
「そーですね」いいともレベルのテンションで応答することもできます(^^)v

ですが、どうやら2012は何かが起こる年らしいので
いろいろと期待せずにはいられません

・世界各国で選挙があるとか→マニフェスト(意訳:通販の宣伝文句)
・ユーロがそろそろ本気でヤバいんじゃないかとか→ノンストップ円高
・日本はもともとヤバいんだったとか→税金上げる前に景気を上げてくれ
・B-CASカードが要らなくなるとか→結局使い辛いことには変わりない
・マヤの暦で世界が終わるとか→映画2012
・auの旧式携帯電話が使えなくなるとか→周波数再編
・ドラえもん誕生の-100周年とか→ドラえもん

そんな本年の目標は、とりあえず遊びのプログラムを1クール(3か月)に1本は作りたいなぁ
そのためには家に早く帰りたいなぁ
YouTubeを10分見るとブルーバックになるパソコン直したいなぁ

というところで
本年も「貧乏プログラマのサービス残業」を
よろしくお願いします
目指せ月1エントリ!ニッチな隙間で生きていきます。


メールを使ったゴニョゴニョなツールを現在のんびり作ってます、( ̄▽ ̄)V

2011年12月25日

Androidで動画ストリーミング@家庭内無線LAN

クリスマス、近所のスーパーで子供が今朝貰ったプレゼントについて話しているのを聞いた
「サンタさん来てね、○○(オモチャ名は忘れた)おいてくれたよ」
「ぼくも○○(やっぱり商品名はよく分からなかった)もらったよ」
・・・そうかー。今のオモチャの商品名は妙に長ったらしいんだなぁ~(え?そこ?)

頑張ってる子にはサンタさん来るんだねぇ、
毎日深夜まで残業してる独り身の人たちにサンタさん、
プレゼントは子供たちにあげればいいから労いの言葉だけでもください・・・ホント(ノ_・、)
最後に笑うのは辛くてもひたむきに毎日努力する人だと信じてます

・・・さて!今回は昨日ぼそっとつぶやいた年末年始に向けた
Androidでパソコン内の動画をストリーミング再生しちゃおう@無線LAN
を行なってみたいと思います。

以前のSugarSyncでのストリーミング
便利っちゃあ便利なんですが、auも300万パケットの規制が始まりましたし
動画の変換時間がうっとおしい!
って思われている方もいるような気がします。
(更に言ってしまえばIS01でSugarSyncアプリが動かなくなりましたΣ(゚д゚lll))

というわけで、
自宅内にいるのであればわざわざSugarSyncとかMicroSDHCカードとか使わず
宅内ネットワークを使用して無線LAN経由でパソコンの中の動画を再生しちゃえばいい
というわけです。

では、お料理開始です!

まずは以下の材料を用意します

1:パソコン
2:無線LAN
3:スマートフォン
4:PS3 Media Server
5:UPnPlay
6:見たい動画(今回は外部に公開しないのでどんなのでもOKъ( ゜ー^))

1と2と3については説明するまでも無いはずですが、
パソコンはデュアルコアCPU以上の性能があったほうがいいと思います。
Windows7が入ってるPCであれば、まあ、問題無いです。

無線LANはできるだけ電波状況が良くなるように設置場所を工夫してください、
YouTubeの動画がコマ落ちせずに無線LANで再生できるくらいは必要です

さて、それでは4のPS3 Media Serverについて説明します。

こちら、名前の通り本来はPS3でパソコン内の動画を再生できるようにする
DLNAサーバツールです。
他にもDLNAサーバ機能を持っているツールというのは沢山あるのですが
「日本語」で「無料」で「安定している」ということでこちらを選びました。
(英語もバッチリって方は色々探してみてください)

まずはこちらにアクセスしてください


すると画像のようなページが出ますので、
中央のWindowsロゴをクリック(MacやLinuxの方は両隣をどうぞ)

GoogleProjectのページが表示されますので

赤枠で囲った部分をクリックしてファイルをダウンロードします。

ダウンロードが終わったら、インストールの開始です


pms-setup-windows-(バージョン).exeをダブルクリックして起動します


「NEXT」で先に


インストール場所はデフォルトのままで問題ないはずなので
そのまま「NEXT」
(JAVAがインストールされていないとエラーになるかもしれないので、その時はインストールを)


するとインストールが始まります


インストールが終わったら「Finish」を!
デスクトップにショートカットが欲しい場合は、下のチェックボックスにチェックを

はい、あっさりとインストール完了です(^_^)v

それでは早速起動してみます


起動すると自動的にLAN内にあるDLNA機器をスキャンして表示してくれます
Android端末はドロイド君が表示されていればOKです
(テレビも出てますが、DLNAプレーヤー非対応機種なので使えなかったです(´・ω・`))

実際に動画を見る前に設定を行なっていきます


言語は「Japanese」にします。
自動的に起動する設定はお好みで選択して下さい。
毎日必ず動画を見るんだ!って方はつけておいてもいいかもしれないですが
貧PGは「見たいときに起動すればいい」ということでつけてません(どうでもいいすな)


次はどのフォルダにある動画たちを再生させるかの設定です。
画面一番下の部分がその設定項目になっていますので、
PC内の全てを対象としたい場合は全ドライブ
動画が一箇所に固まっているのであればそのフォルダを選択したりしてください


そして動画変換の基本設定
PS3でも再生してAndroidでも再生するっていう場合、どちらかに合わせることになるので
より再生頻度の多い方に合わせておけばいいかと(都度直せばいいという話でもある)

Androidのスピーカーの場合、音声は通常のステレオで充分ですし
ビデオの品質も無駄に高くするとスマートフォンのCPUが追いつきません
なので、使用している端末と環境に合わせた設定を試してみてください。


そしてもうひとつの設定項目で、ビデオファイルエンジンの設定というのがあります、
ここにある「ビデオと音声の同期」は忘れずにチェックしておきましょう!
長時間の動画で徐々に音声がずれていってしまう現象を軽減できます

さて、設定が終わったら「保存」をクリックして、「サーバーを再起動」します。
これで、PC側の設定はひとまず完了です!


お次はスマートフォン側のストリーミング再生準備となります。

ではこちらからAndroidアプリのUPnPlayをインストールしてください
(もしくはAndroidマーケットから「UPnPlay」を検索してインストール)


無線LANに接続され、パソコン上でPS3 Media Serverが起動していると
画面のように接続可能なサーバ一覧が表示されると思います。
※DIGAも表示されていますが、デジタル放送の再生に対応したツールが
  Androidに入っていないので再生はできないっす(;´▽`A``


ちゃんと接続が行えるとフォルダの一覧が表示されますので、
見たい動画のあるフォルダへ移動していきます
(ドライブ沢山あるけどボロHDDの寄せ集めなので、全部あわせても1TBないっす(T▽T))


お目当てのフォルダに到着したら、以下の分岐判定をすることになります

1:Androidでそのまま再生できるファイルの場合
2:そのままでは再生できないので自動変換をしてもらうファイルの場合

1の場合はそのまま再生できるので問題ないのですが
2の場合が問題です、そのまま再生を一度してみて、ダメであった場合は
「#--TRANSCODE--#」
というフォルダに移動してみてください。

フォルダ内の動画ファイルが再度フォルダの状態で表示されていると思います。


そして再度見たい動画のフォルダに移動したら、
末尾に「MEncoder」と付いたファイルがあると思いますので、
そのファイルを再生してみましょう!(末尾の文字は動画変換設定で設定したエンジン名です)


ファイルを長押しするとこんなような画面も出ますので、
スマートフォンで再生できる動画をUSBケーブル使わずに転送したい!
って場合はここで「Download」を選ぶと変換されたファイルがDL出来るはずです


あとは、パソコンの性能次第ですが、
少し遅れて動画の再生が始まるので、存分に楽しんでください、( ̄▽ ̄)V

以上!お料理完成です!

インターネット上から家庭内のDLNAサーバ動画再生は、
環境が作れないので貧PGは試せていないです。
VPNとかで繋げばできるような気もしますが、IS03のスペックじゃぁ、厳しいので・・・

今回紹介したのも多くの手段の中のほんの一例ですので、
きっともっといい設定方法とかが存在すると思います。
それを色々と探ってみるのも、楽しいAndroidライフの一部ではないでしょうかヾ(@~▽~@)ノ
(綺麗にまとめたつもり)

では!今回のお料理もこのあたりで!

※おやくそく※
ツールの使用方法はあくまでも貧PGが行った一例です、上手く動かなくても怒らないでください。
動画の再生はマナーを守って楽しく使用しましょう(*´∇`*)

2011年12月24日

クリスマス、その日は世界に笑顔があふれる・・・はずなんだが

クリスマスイブも仕事だぜ~、だから独り身でも寂しくないぜ~ъ( ゜ー^)
と言える思っていたらこういう時に限って休日出勤なしという
運命の歯車は歯がすり減った上に逆に回っているような気がする今日この頃

そうそう、年賀状を書かないといけないなーと
年とか月の感覚が年を重ねるにつれて希薄化しているような気もするのですが
まあ、特にすることも無いのでなんかデザインを考えてみましょう

メールの年賀状は相手によって適当に文面変えて送ればいいので
今回は紙の年賀状です。(σ・∀・)σ

では、作成時間30分!2012年の貧乏プログラマからの年賀状。デザインはこちら!

さて、年が明ける前から年賀状を公開したついでに
このAA風挨拶ロゴの詳細をご説明

知っている人にはすぐ分かることかもしれませんが、
この「謹賀新年」の部分はプログラムのコードになっています。
QuineでRubyのコードをまんま出力しております。
(C#でのやり方がよく分からなかったので今回はRubyです(;´▽`A``)

簡単にご説明すれば、自分自身と同じ文字列を出力する
効率主義が叫ばれる中ではなんの意味があるんだい?と言われるような
「プログラマにとってのただの遊びです」
(偉い人にはそれがわからんのですよ)

受け取った人が年賀状を見ながら同じコードを書き
それを実行すれば「謹賀新年」と表示されると。

では、この文字列を出力するソースコードを載せてみます
b="BAhsKwK6AQAA/v+Bf/wDAPwHwP//BwAAACAA0A84wA8/wP8FAEAAAAAAAgAFAACAEAAAUAAABAAAAOD/XwAAAAgBAAAFfEAAAACA////////8AAfUMAHBAAAAAgAoP///wcH/AEFAEAAAACAAAAKAABAGGABUAAABAAAAPj/vwAAAISB8f/9/38AAAAA/v8JPPBAEPz/////AQAAACAAkMADDwQTAAAAABAAAAAAAgAJAABA4AEAAAAAAQAAAOD/nwAAAAQW8P//DxAAAAAA/v/5P/B/AAH+//8AAQAAACAA0P8B/g8QAAAAABAAAAAAAgAFAACAAAH///8AAQAAAOD/XwAAAAgQ4P//DxAAAAAA/v/9P/D/AAH+//8AAQAAACAAkP8B/gcQ8P//DxAAAAAAAgAJAABAAAEAAAAAAQAAACB4kP8B/gcQAAAAABAAAAAAggf9P/D/AP8A/wP+AQAAACAAUAAAAAj/ADAwAP4BAAAAAgAFAACAYADAAwcACAAAACAAUAAAAAgM/wOA/8EAAAAA/v/9////gB8AAADwBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwHwAA/gcA/w8AAAAAAAAA/wH//B9AAAzAAAAAAAAAABAAAEgAAAxwAPz//38AAAAAAQCABACAgAEAAAAABAAAABAAAEgA8A8GAAAAAEAAAAAAD3zgBPwAGAAAAAAABAAAAIBABkJAAIAB/v8A/38AAAAADzzgBfj/MDAACBAAAAAAABAAAFAAAAgG//8A/j8AAAAAAQAABQCAwAcAAAAAAgAAABAAAFAAAAhYAAAAACAAAAAA/wH/BTzgAAQAAAAAAgAAAPAf8F9AAgJAgP8A/z8AAAAAAQAABSQgAAQICBAAAAAAABAAAFBAAgJ/gP8A//8AAAAAAQAAAyQgEAAAAAAACAAAAPADwD9AAgIBAAAAAIAAAAAADAA4AiYgEAAAAAAACAAAADAAACwgAgIBAAAAAIAAAAAAAQBAAyIg8P//D/D/DwAAACAccBQgAgIAAIAAAQAAAAAAZgE9ASIgAAAACBAAAAAAAMAREBMwAgIAAIAAAQAAAAAACP8B/yEgAAAA+B8AAAAAAAAAAAAQ/gMA"

n=Marshal.load(b.unpack("m")[0])

e="eval$s=%w"<<39<<($s*3)

o=""
j=-1
0.upto(54*132-1){|i|
  o<<((n[i]==1)?e[j+=1]:32)
  o<<((i%132==131)?10:"")
}

o[-77,6]=""<<39<<".join"
puts(o)

詳しい解説・・・
を書こうと思いましたが、これを必要としているような人が思いつかないので
省略。
興味のある方はhttp://code.google.com/codejam/japan/tshirt.html
などを調べてみてください。もっと綺麗な作り方が見つかると思います。

では、クリスマスはまだ終わっていないようなので
年末年始に布団の中からAndroidで動画鑑賞するための準備をしたいと思います。

では、また!
え?クリスマス当日?当然引きこもるよ!(^_^)v

2011年11月23日

そうだ、SkyDrive、やろう

ご無沙汰です。
最近HDDが高いっすなー、2~3倍近くまで跳ね上がってるものもあるようで
年末こそは新しいPC作ろうと思っていたのですが
HDDの値上り以前に年末の賞与もとい寸志
ほぼ0というレベルのため中止となりましたΣ(T□T)

さらに最近コードを書く仕事が入ってこないので、
非常にコーディング欲が湧いています。
何が悲しくて他社製品のER図とかDFD書かなきゃなんないんだよと(;-_-) =3 フゥ

で、いくつか作ってみたいツールのネタが出たので
欲求不満解消+HDD買えない憂さ晴らしに作ってみた。

その名も

SkyDriveのアカウントを管理して、ついでにワンクリックでログインしちゃうツール


えーっと、機能としてはこれらを満たすように作ったつもりです

1:SkyDriveのアカウントとパスワードを一覧で管理できる
2:ワンクリックでログイン処理が実行できる
3:ログインしたらざっと中の様子を見れる+ちょっとしたファイル操作ができる
4:最後にいつログインしたかが分かるようにする
5:無料

自動でログイン→自動ログアウト機能をつけるべきか迷ったのですが
そういった機能を自分は欲していないので今回はなしとしました<(_ _)>
まあ、あまり自動化しすぎるとSkyDrive側の仕様変更に対応できなくなるし

画面としてはこんな感じです。


SkyDriveは1アカウントで25GB使えるので、
1アカウント20GBの利用量でも5アカウントで100GBいく計算ですな
無限に作れるメールアカウント用意すれば理論上は無制限なファイルスペースが・・・
※あくまでも理論上です。SkyDriveは使用上の注意をよく読み、用法用量を守って正しくお使いください

で、ここから重要です。

どうもこのツール。起動時にインターネット通信を行うためか
ノートンのSONARにマルウェアとして誤検知されますΣ(゚д゚lll)

怪しい処理は何一つしていませんが?ノートン先生?
その証拠としてソースコードも公開しちゃいますよ?

namespace SkyDriveLoginAssistant
{
 public partial class Form1 : Form
 {
  public Form1()
  {
   InitializeComponent();
  }

  private void button1_Click(object sender, EventArgs e)
  {
   //とりあえずテーブルがちゃんと選択されているか確認
   int SelectRowNumber = 0;
   SelectRowNumber = dataGridView1.CurrentCell.RowIndex;
   if (SelectRowNumber < 0)
   {
    return;
   }
   //データを変数にfade-in
   string id = dataGridView1[1, SelectRowNumber].Value.ToString();
   string pass = dataGridView1[2, SelectRowNumber].Value.ToString();

   //入力ボックスにそれぞれ値をセット
   webBrowser1.Document.All.GetElementsByName("login")[0].Focus();
   webBrowser1.Document.All.GetElementsByName("login")[0].InnerText = id;
   webBrowser1.Document.All.GetElementsByName("passwd")[0].InnerText = pass;

   HtmlElementCollection all = webBrowser1.Document.All;
   HtmlElementCollection forms = all.GetElementsByName("SI");
   forms[0].InvokeMember("click");


   //ログインボタンをクリック!
   //webBrowser1.Document.Forms[0].InvokeMember("submit");





  }

  private void button2_Click(object sender, EventArgs e)
  {
   //リストを保存
   //本当はDataGridViewにDataSourceを設定してXML出力したほうが楽
   //でも、ファイルを直でメンテしたかったりするので、あえてCSVをループで出力させる

   string line = string.Empty;
   Encoding enc = Encoding.GetEncoding("Shift_JIS");
   System.IO.StreamWriter sr = new System.IO.StreamWriter(@"ACLIST.csv", false, enc);
   int colCount = dataGridView1.Columns.Count;
            int rowcount = 0;
   
   foreach (DataGridViewRow row in dataGridView1.Rows)
   {
                rowcount++;
                if (rowcount == dataGridView1.Rows.Count)
                {
                    break;
                }
    for (int i = 0; i < colCount; i++)
    {
     //フィールドの取得
     string field;
     if (row.Cells[i].Value == null)
     {
      field = string.Empty;
     }
     else
     {
      field = row.Cells[i].Value.ToString();
     }
     //"で囲む必要があるか調べる
     if (field.IndexOf('"') > -1)
     {
      //"を""とする
      field = field.Replace("\"", "\"\"");
     }
                    if (i == 0 && field == "0")
                    {
                        break;
                    }
     field = "\"" + field + "\"";
     //フィールドを書き込む
     sr.Write(field);
     //カンマを書き込む
     if (colCount-1 > i)
     {
      sr.Write(',');
     }
    }
    //改行する
    sr.Write("\r\n");
   }
   sr.Close();

  }

  private void Form1_Load(object sender, EventArgs e)
  {
   //CSVファイルからDataGridViewに値を格納
   //CSVからDataSourceに使えるテーブルにしたほうがいいかと思う
   //だが直接セットを貫いてみる。仕事で作るソフトじゃないし(*^-゜)vィェィ♪
   if (!System.IO.File.Exists("ACLIST.csv"))
   {
    //ないものはない
    return;
   }

   System.Collections.ArrayList csvRecords = new System.Collections.ArrayList();
   System.Collections.ArrayList csvFields = new System.Collections.ArrayList();
   Encoding enc = Encoding.GetEncoding("Shift_JIS");
            System.IO.StreamReader sr = new System.IO.StreamReader("ACLIST.csv", enc);


   string csvText = sr.ReadToEnd();
   sr.Close();
   sr.Dispose();

   //前後の改行を削除しておく
   csvText = csvText.Trim(new char[] { '\r', '\n' });

   int csvTextLength = csvText.Length;
   int startPos = 0, endPos = 0;
   string field = "";

   while (true)
   {
    //空白を飛ばす

    while (startPos < csvTextLength &&
      (csvText[startPos] == ' ' || csvText[startPos] == '\t'))
    {
     startPos++;
    }

    //データの最後の位置を取得

    if (startPos < csvTextLength && csvText[startPos] == '"')
    {
     //"で囲まれているとき

     //最後の"を探す

     endPos = startPos;
     while (true)
     {
      endPos = csvText.IndexOf('"', endPos + 1);
      if (endPos < 0)
      {
       throw new ApplicationException("\"が不正");
      }
      //"が2つ続かない時は終了

      if (endPos + 1 == csvTextLength || csvText[endPos + 1] != '"')
      {
       break;
      }
      //"が2つ続く
      endPos++;
     }

     //一つのフィールドを取り出す

     field = csvText.Substring(startPos, endPos - startPos + 1);
     //""を"にする
     field = field.Substring(1, field.Length - 2).Replace("\"\"", "\"");

     endPos++;
     //空白を飛ばす

     while (endPos < csvTextLength && csvText[endPos] != ',' && csvText[endPos] != '\n')
     {
      endPos++;
     }
    }
    else
    {
     //"で囲まれていない

     //カンマか改行の位置
     endPos = startPos;
     while (endPos < csvTextLength &&
       csvText[endPos] != ',' && csvText[endPos] != '\n')
     {
      endPos++;
     }

     //一つのフィールドを取り出す

     field = csvText.Substring(startPos, endPos - startPos);
     //後の空白を削除
     field = field.TrimEnd();
    }

    //フィールドの追加
    csvFields.Add(field.Replace("\"", "").TrimEnd(' '));

    //行の終了か調べる

    if (endPos >= csvTextLength || csvText[endPos] == '\n')
    {
     //行の終了

     //レコードの追加
     csvFields.TrimToSize();
     csvRecords.Add(csvFields);
     csvFields = new System.Collections.ArrayList(csvFields.Count);

     if (endPos >= csvTextLength)
     {
      //終了

      break;
     }
    }

    //次のデータの開始位置
    startPos = endPos + 1;
   }

   csvRecords.TrimToSize();

   for (int i = 0; i < csvRecords.Count; i++)
   {
    try
    {
     int Num = int.Parse(((System.Collections.ArrayList)csvRecords[i])[0].ToString());
     string id = ((System.Collections.ArrayList)csvRecords[i])[1].ToString();
     string pass = ((System.Collections.ArrayList)csvRecords[i])[2].ToString();
     string day = ((System.Collections.ArrayList)csvRecords[i])[3].ToString();

     dataGridView1.Rows.Add(new Object[] { Num, id, pass, day });
    }
    catch
    {
    }
   }

  }

  private void button3_Click(object sender, EventArgs e)
  {
   int SelectRowNumber = 0;
   SelectRowNumber = dataGridView1.CurrentCell.RowIndex;
   if (SelectRowNumber < 0)
   {
    return;
   }
   dataGridView1[3, SelectRowNumber].Value= DateTime.Now.ToString("yyyy/MM/dd");
  }

        private void button4_Click(object sender, EventArgs e)
        {
            webBrowser1.Navigate("https://skydrive.live.com/");
        }
 }
}


どうでしょうか?怪しい動きはありましたか?
デジタル署名すればSONARの誤検知を防げるという情報も見ましたが
「無料で公開するツールにそんなお金かけられるかっての!」
※デジタル署名に必要な証明書の入手には大抵お金がかかります

なので無料のVisualStudioで出来る範囲の対応しかできませんことをお詫びします<(_ _)>
もし誤検出されちゃったら復元してもらえるとありがたいです。
ついでにSymantecにクレームしてくれても構いません(;´▽`A``

正直まだまだバグが残っていますが、
必要最低限の機能は確保できているので
あとは運用でカバーしてください。
100点満点のプログラムはコストも時間も掛かり世界じゃ通用しません。
ま、動けばいいんです。バグったらその時直します。

ダウンロードはこちらからどうぞ!

いやー、意味もなく長い仕様書とか標準化とか画面定義書とかない
自由に作れるコーディングはやっぱり楽しいです。ものづくりバンザイ!ヽ(^◇^*)/

2011年9月29日

GoogleCodeJamに挑戦。挫折寸前


お昼休みに激安弁当つつきながらGoogleCodeJamの練習問題というのを解いてみました。

まあ、あれです。昼休みなのに客先サーバの動作が不安定っていう理由で座席に縛り付けられているのです(;-_-) =3
なので気分転換にやってみました。
とりあえずは「数珠繋ぎ」だけですが、
C#で解いたよっ♪
っていう記事が見当たらなかったのでC#で解いてみた結果を載せてみます。

ロジックとしては単純な処理しかしていません。
というか、複雑な処理を組む気はないっす(;´▽`A``

問題としては、

  • 1個以上の電気的スイッチが存在している
  • スイッチの終端には電球がセットされている
  • 終端以外のスイッチの出力には次のスイッチが接続されている
  • スイッチは指を鳴らすという動作によってON/OFFが切り替わる
  • 先頭のスイッチは電力を供給するプラグに接続されている
  • スイッチは電力が供給されている場合のみON/OFFを切り替え、電力が遮断されている場合には変化しない

さて、指をN回鳴らしたとき、K個連結されたスイッチの終端にある電球は光るでしょうか?

脳内で解読した限りこんな感じの要点ではないかと。
興味の出た人はCodeJamのページを読んでみてください。
(練習問題が消えてしまってたらごめんちゃい)

さて、どう解こうかな~、と紙にスイッチの動きを書き出してみたところ
「4個のスイッチ(A-B-C-D)がつながっている場合」
試行回数:スイッチの状態(0:OFF/1:ON)
0:0-0-0-0
1:0-0-0-1
2:0-0-1-0
3:0-0-1-1
4:0-1-0-0
5:0-1-0-1
中略
13:1-1-0-1
14:1-1-1-0@まだ電球は点かない
15:1-1-1-1@ここで電球点灯
16:0-0-0-0@また消える

・・・うん。2進数だ
2進数でスイッチの数の桁数下位ビットがすべて1の時に点灯するな、これ(^_^;)

てことは。
指を鳴らした数を2進数で変数にセット
その数にスイッチの数だけ下位ビットから1を並べた2進数を論理積する
論理積した結果がスイッチの数とイコールであれば電球は点く
ということではないかと。

紙にちょっと書き出して検算中・・・検算中・・・β(□-□ )
うん。たぶんおっけー

で、こんなソースになりましたとさ

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace GCM_A
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		string Fileadd = string.Empty;
		int counter = 0;
		int[] snapper;
		int[] finguer;
		bool[] light;

		private void button1_Click(object sender, EventArgs e)
		{
			//ファイルを開くボタンを用意して、ファイルを開くと同時に処理スタート

			OpenFileDialog ofd = new OpenFileDialog();

			if (ofd.ShowDialog() == DialogResult.OK)
			{
				Fileadd = ofd.FileName;
			}
			else
			{
				return;
			}

			//FileLoad
			//全データをStringの配列に突っ込む
			string[] lines = System.IO.File.ReadAllLines(Fileadd);

			//先頭に問題数が記載されているのでそれを取り出して各配列の初期値に使う
			counter = int.Parse(lines[0]);
			snapper = new int[counter];
			finguer = new int[counter];
			light = new bool[counter];

			for (int i = 1; i <= counter; i++)
			{
				//スイッチの数と指を鳴らす回数はブランクで繋がっているので数値に変換して取り出す
				snapper[i-1] = int.Parse(lines[i].Split(' ')[0]);
				finguer[i-1] = int.Parse(lines[i].Split(' ')[1]);

			}

			//電球点灯状態を一括チェック
			Calc();

			//結果を出力
			OUTPUT();

			//めでたしめでたし
		}

		private void Calc()
		{

			for (int j = 0; j < counter; j++)
			{
				//指を鳴らした数
				uint a = (uint)finguer[j], x;
				//スイッチの数から論理積に使用するビット列を作る。-1するのを忘れないように
				int n = (int)Math.Pow(2, (snapper[j]));
				uint b = (uint)n-1;
				//指を鳴らした数と1になっているべき値を論理積
				x = a & b;
				//電球が点灯しているかを判断
				if (x==b)
				{
					light[j] = true;
				}
				else
				{
					light[j] = false;
				}

			}

		}


		private void OUTPUT()
		{
			//ファイルに一気に出力する
			StreamWriter sw = new StreamWriter(@"z:\output.txt");
			for (int k = 0; k < counter; k++)
			{
				if (light[k])
				{
					sw.WriteLine("Case #" + (k + 1).ToString() + ": ON");
				}
				else
				{
					sw.WriteLine("Case #" + (k + 1).ToString() + ": OFF");
				}

			}
			sw.Close();
			sw.Dispose();
		}

	}
}


Largeの問題を1秒程度で解いてくれると思っています。
さらに速度を上げるのであれば、、、そうすなぁ~
スイッチの数であらわすことのできる2進数値よりも指を鳴らす回数のほうが小さいときは即座にOFFと判断できるんじゃないかと。

ここまで書いておいてなんですが、
きっと毎回参加される方々はもっと早くプログラム作って解けるんだろうなぁ~と。
C#でビット演算ってあまりやらないよなぁ~と。

こういうの好きな高校とかの先生は次回のテストで
+αのボーナス問題に穴埋めにしてこの問題使いそうだな
と思ったところでお開き。

土曜の予選に参加できるかどうかはサーバが安定するかにかかっている( ̄▽ ̄;)

2011年9月4日

Hello Android、一年近く前から使ってるけど

実際何もコード入力しなくても自動でHelloと言ってくれるAndroidですが、
ちゃんと自力でコードの編集をしてみようと思います。

今更感オーバーフローしてますが、
自分の備忘録的な内容だったりもするので温かい目で。。。
というかそもそも知ってる人はここ読まないですな、お詫びしておきます<(_ _)>

では、自分の作業メモ開始で


「ファイル」→「新規」→「プロジェクト」を選んでいきます。


今回作成するのはAndroidアプリですので、
Androidプロジェクトを選択。テストプロジェクトとの違いはいまいちよく理解してません(;´▽`A``


とりあえずプロジェクトの名前はHelloAndroidWorldとしました。
普通はHelloWorldなんですが、まあ、弄れもんですからъ( ゜ー^)

ビルドターゲットはIS03君に合わせて2.2を選択。
2.3とか3.2の機種欲しいなぁ。。。うん、貧PGには高値の花高嶺の花ですな(わざとです)

そしてパッケージ名ですが、ドメインとかを付けるのが通例みたいです、
もっとも誰かに公開する予定は今のところないので
「bin_pg.android.helloandroidworld」っていう名前にしましたけど

アクティビティーの作成にチェックを入れて、SDKのバージョンはデフォルトのままで行きます。
なぁ~に、上手く行かなかったらもういっかいやり直せばいいだけですから(⌒▽⌒)


はい、とりあえず準備完了です。

このままメニューバーの中にある「実行」(再生ボタンみたいなやつ)を押せば


何で実行するか聞いてくるので、Androidアプリケーションを選んでOK。
すると・・・


はい、無事動きましたヽ(^◇^*)/
何も入力してないけどアクティビティ名を勝手に出してくれたから
Helloって出てる~

で、満足感ちょっと出ていますが、
ちゃんと自力でコード直しましょう、うん。


Eclipseに戻って「src」の中にある、「.java」のソースファイルを開きます。

デフォルトだと画像のようになっていますが、
これの「setContentView(R.layout.main);」の部分が勝手にアクティビティ名を
出してくれているので、ここを修正してみます。

とりあえずテキストでHelloと言って欲しいので、

import android.widget.TextView;

っていうのを追加
(TextViewのロジック作ったあとで、Ctrl+Space押せば自動で作ってくれるけど)

あとは。


TextView _helloAndroidWord = new TextView(this);
_helloAndroidWord.setText("Hello, Android world");
setContentView(_helloAndroidWord);


TextViewのオブジェクトを新規で作成し、
その値はHello, Android worldと設定し、
表示するのは作成したオブジェクトであるとカタカタ入力。

オブジェクト指向言語触ったことある人ならば大体仕組みはわかるはずです。
というか、言語なんて、1ヶ月本気で取り組めば大抵ある程度のレベルまでは到達できるもんです
(なのに古い言語に拘るSIerとか上層部がいるから下請けや平社員は以下略)

package bin_pg.android.helloandroidworld;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroidWorldActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        TextView _helloAndroidWord = new TextView(this);
        _helloAndroidWord.setText("Hello, Android world");
        setContentView(_helloAndroidWord);
    }
}

全体のソースとしてはこんな感じになります。



あとはこれを実行すれば・・・
(再生マークみたいの押すか、Ctrl+F11で)


出来上がり♪
というわけでございます。

さて、GDD2011のAndroidの課題を解くとしましょうかъ( ゜ー^)
では、あとは各自、解散!

Androidアプリの開発環境をスローペースで整える(当然画像つき)+日本語化

なぜに今頃インストール環境を整えるのかといえば、
ようやく自分の開発時間が持てるようになったというか

簡単にいえばGDD2011のクイズにAndroidがあったから
なんですが、まあ、それもきっかけの一つとして
そろそろなんかくっだらね~!って言われるようなツールも作りたくなったと
そういう理由付けとしておいてください。

※GDD2011のクイズでAndroidを選ぼうって場合にチラッと見てもらえればいいですが
※ルールに従って、貧PGの回答は載せておりませんのであしからずご了承を<(_ _)>

さて、AndroidSDKのインストールについてでございますが、
当方のPC、既にインストールされていますので、インストール方法は以前投稿した
シャープ製Androidスマートフォンのスクリーンショット、今頃試す
をご参照願います。IS03ベースですが、他の機種でも大きな違いはありません。
(JAVAのバージョンが新しくなってるくらいでしょうか?)


それでは、開発環境であるEclipseのダウンロードとインストールを行いましょう

ダウンロード先はこちら


上記サイトにある、
Eclipse IDE for Java Developers
というのをダウンロードします。
Eclipse IDE for Java EE Developers
ってのもありますが、プラグインがいっぱいあるかどうかの違いですから、
とりあえずAndroidの開発がしたいだけならEEが付いてないバージョンでも問題ないです
あ、当然そっちを選んでも何ら実害はないので好きなようにしてください( ̄▽ ̄)

通常はその右側にある、Windows 32Bitを選択すればよいでしょう。
64Bit使っている人は64Bit版です。未だXPの貧PGは当然32Bitです(;-_-) =3


クリックすると上記のようなダウンロード先を選ぶ画面が表示されると思います。
赤枠で過去ってある部分がダウンロードするリンクです。
(負荷分散で自動でダウンロード先が変わりますが、中身は一緒ですから心配なさらず)



ダウンロードも終わりましたでしょうか?
懐かしのXP画面で恐縮ですが、こちらのファイルをまずは解凍します。

すると、「eclipse-java-indigo-win32」ってフォルダの下に
「eclipse」っていうフォルダが出来上がるはずですので、
こちらをc:\直下など、自分で管理しやすい場所に移動してあげてください。
日本語の入っていない場所を開発環境にするのはまあ、安全のためってことで、( ̄▽ ̄)V


準備ができたらeclipse.exeを起動しましょう


起動時に作業フォルダの場所を聞かれますので、
自分の管理しやすい場所を選択します(貧PGはc:\直下にeclipse-Workを作って設定しました)
日本語や半角スペースとかのない場所を用意していただくとEclipseが喜びますъ( ゜ー^)

毎回起動時に聞かれるので、特に問題がないようであれば
「Use this・・・」にチェックを付けてしまってもいいと思います


起動したら、Helpの中にある、「Install new Software」を選びます
あ、英語だ・・・って思って諦めてしまいそうですが、
ここでは画像つきで自分の覚書も兼ねて載せていますのでご安心を
ちゃんと最後には日本語化しますから、はい。


すると画面のような状態になると思うので、
Work withに「https://dl-ssl.google.com/android/eclipse/」を入力してエンター。


少し待つとAndroidの開発環境一覧が出ますので、
チェックを付けて「Next」へ進みます。
万一一覧がでない場合はhttpsとなっているところを、httpに変えると出るかもしれません。


一覧が表示されるので、そのまま「Next」で進みます


ライセンスに同意しますか?って聞かれます。
同意しないことには先に進めないので、ざっと目を通して
I accept~にチェックを付けて「Finish」です。


で、インストールが始まるのです。


何故か途中でSecurityWarningなんていう物々しいダイアログが出てきますが(自分だけかな?)
問題ないのでOKで突き進みます


インストールが終わると、Eclipseの再起動を求められますので、
Restart Nowでさっさと再起動します(PCが再起動するわけじゃないのでご安心ください)


再起動したら、Windowメニューにある「Performances」を開きます


AndroidSDKの存在する場所を選びます。
シャープ製Androidスマートフォンのスクリーンショット、今頃試す
でSDKを入れている場合、確かc:\androidの感じの位置にあるはずですので
そのへんは適切に調整をお願い申し上げる。


次はWindowメニュー内にある
「Android SDK and AVD Manager」というのをクリックします。
アイコンにドロイド君がちらっと覗いています。チラリズムです。


EclipseにインストールするSDK関連一覧が表示されますので、
必要なものにチェックを入れていきます。
まあ、全部チェックつけても何ら問題ないですが、
Android1.5のSDKとかもう使わないような気も・・・(1.6はIS01君のために必須ですよ!)

チェックできたらInstall Selectedでインストール開始です


インストールが始まる!と思いきや。
新規追加分のライセンス同意を求められます( ̄▽ ̄;)
面倒なのでAccept Allで全て承認してしまいましょう!


では、インストールできるまでしばしご歓談を。
ぶっちゃけ時間がかかるので、暇なようであればCMをどうぞ


さて、インストール終わりましたでしょうか?


完了のメッセージが出たらOKで閉じちゃいましょう


こいつもCloseで閉じてしまい、一旦Eclipseを再起動したら完了です。
やはり設定変更後の再起動は言われなくても基本です(^_^)v



いやー、随分見た目が変わりました。
お次はAndroidエミュレーターの設定をシておきましょう。
実機動作前にエミュレータで動作確認は基本ですから


再びWindowのなかのチラリズムドロイド君を選びます。


なぜかすでに2.2の仮想デバイスが出来上がっていましたが、
たぶんIS03の設定した際に出来たんじゃないかな?と思っとります。

空っぽであれば、Newを選んで新規に端末を作成します。
まずは自分の持っているAndroid端末に合わせたものを作るといいでしょう


IS03ユーザの貧PGは上の画像のような設定にしてみました。
画面サイズは別サイトの解像度一覧でも参照してください。
あとからいつでも変更できるので、そんなに難しく考える必要はないですが

そして、新規作成や設定確認が終わったら、
いっこ前の画像にある「Start」をクリックします


確認画面が出ますので、Launchをクリックして起動します。
瞬時に立ち上がるわけではないので、少々お待ち下さい。
Javaの起動にワンテンポ必要なものですから


こんな感じの画面が起動すれば仮想デバイスの設定は完了です。
お疲れ様でした。( ̄ー ̄)ノ▽”フリフリ


・・・あ、日本語化を忘れていました(;´▽`A``

日本語化にはまず、こちらにアクセス願います
MergeDocProject Pleiades


これを書いている時点での最新版は1.3.4ですが、
ここは安定板をインストールする方向で説明しておきます。

今更ぶっちゃけますが、上記サイトで配布しているAll in Oneパッケージの場合
既に日本語化されていたりなんかしちゃったり・・・
いや、まあ、うん。

さて、ダウンロードできましたでしょうか?


とりあえず解凍してみましょう


5つ、アイコンが並んでおります。
readmeは読んで字のごとく、説明書が入っていますので、
とりあえず目を通していただけるとありがたいですが、
殆どの人が読まないということはわかりきっていることなのでざっくり手順説明します。
(なお、貧PGは銀行や保険とかの規約もきっちり読んだりするお馬鹿です)

さて、出来上がったファイルを全て選択し、
c:\eclipseにコピーしてしまいます。(別の場所に作ったのならその場所に)

あ、必ずEclipseは終了しておいてください。
じゃないとぶっ壊れる可能性があります


コピーの際、上書きする?と聞かれるので、
問答無用で上書きしてしまいます。


コピーが終わりましたら、まずは「eclipse.ini」というファイルを開きます。
メモ帳とかで開いてもらえればOKです。


開きましたら、一番下の行に
-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
と入力して保存します。
日本語化のプラグインを使用するようにする設定値です


早速日本語で起動したいところですが、
ちょっと待ったそこのあなた!
必ず「eclipse.exe -clean.cmd」というファイルをダブルクリックして実行してください
こうしないと日本語化がうまくいきません


はい、見事日本語化が完了でございます。
次からは普通にeclipse.exeの方を実行してもらえれば無問題ですので。はい(^_^)v

では、今回はこの辺でお開きにいたしましょう。
一休みしたらHallo Android World!のアプリの作り方も
大量の画像セットでお届けしたいと思います。

では!