JavaのdrawStringを右寄せにする方法

java.awt.Graphics.drawStringを右寄せにする方法を日本語で紹介しているサイトがなかったので投稿します。 gはGraphics2DのインスタンスでrightPositionは文字列の右端の位置(x軸)を表しています。このテクニックのかなめはFontMetricsでこれを使用することで文字列の幅をピクセル数として取得することができます。 例1 String s = “Hello World”; int rightPosition=100;//文字列の右端の位置 Font font1 = new Font(“SansSerif”, Font.PLAIN, 12);//好きなフォントを使用します g.setFont(font1); FontMetrics fontMetrics = g.getFontMetrics(); g.drawString(s, rightPosition – fontMetrics.stringWidth(s), y); 例2(AttributedStringを使用した例) Font font1 = new Font(“SansSerif”, Font.PLAIN, 12);//好きなフォントを使用します String s = “Hello World”; int rightPosition=100;//文字列の右端の位置 g.setFont(font1);//好きなフォントを使用します FontMetrics fontMetrics = g.getFontMetrics(); AttributedString astring = new AttributedString(s); astring.addAttribute(TextAttribute.FONT, font1); g.drawString(astring.getIterator(), rightPosition – fontMetrics.stringWidth(astring), y);

【作ってみた】引き出しからできたカラフルな真空管アンプ

初の自作真空管アンプ 高校生のときに初めて作った真空管アンプの紹介です。真空管は手元にある安価なものを6個使用しました。右の増幅に3つ、左の増幅に3つとふりわけられていて、整流回路にはダイオードを利用することにしたため、真空管は使いませんでした。そのとき、高校生だったもので、予算も限られていて、ATX電源のコンデンサー(一応松下製)を再利用して電源回路に組み込みました。 前段の電圧増幅には電流対電圧比が低い12AX7を利用しています。出力管には12AU7の片方が一つの真空管になっている6C4を利用しました。普段は出力管には使われない真空管ですが、電流対電圧比が比較的高い方なのでいけるなと思いました。この出力段ではこの6C4を並列にして、出力電流を増やしているつもりなのですが、正直1個でも足ります。 カップリングコンデンサにはオイルコンデンサー、出力トランスには春日無線変圧器のKA-1220、電源回路にはその前に組み立てた真空管アンプキットからのものを使用しました。 あと、ケースにはかなり凝りました(お金はかけていませんが)。実はこのケース引き出しなんです。処分することになった引き出しをマスキングテープやスプレー缶などを利用して、自分の好きな色に装飾しました。   今後の課題 初めての真空管アンプだったもので動いただけでも満足したのですが、音はイマイチですね。最初はハムノイズが大きくて、それを軽減するために整流回路の電圧降下をより大きくして、より大きな値のコンデンサで整流するようにしました。これにより、A電源とB電源の電圧は少しだけ低くなりましたが、ノイズは減りました。しかし、ノイズの一番の原因はこれではなく、多分設計ミスですね。12AX7での増幅を2段使用していて、しかもその間には減衰回路やトーンコントロール回路もないため、ゲインが高すぎるのです。設計段階でゲインを計算しなかったため・・・こうなりました。しかし、当初からなんとなくそんなことが起こるだろうなーと思ってゲイン調整ノブをちゃんとつけておきました(これ本当)。これで一応は普通のアンプとして利用できるようになっています。 あと、ケースは少し小さすぎるかなーという思いもあります。特に電源回路が出力トランスの真下にあり、しかもケースが木でできているので、多少の電磁誘導は起きているはずですよねw。 今後も真空管アンプも作ってみたいと思いますが、制作には非常にお金がかかり、非常に時間がかかり、高電圧を扱うし、設計には頭を使うので、正直まだ、実際にやってみようという段階には来ていないです。ただ、次の真空管アンプにはどういう真空管を使うかは決まっています。それだけです。それでは。

サイトURLを変えたとき、古いURLへのリクエストを新URLにリダイレクトする方法

URLをリダイレクトする方法は様々ありますが、このサイトのURLを変えたときは「301リダイレクト」という方法を使いました。それを実現させるには.htaccessというファイルに以下のようなことを記述します。 RewriteEngine on RewriteCond %{HTTP_HOST} ^sonota.trance-cat.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.sonota.trance-cat.com [NC] RewriteRule ^(.*)$ http://sonota.trance-cat.com/$1 [L,R=301,NC] これが何をするかというと、sonota.trance-cat.comとwww.sonota.trance-cat.comへのアクセスをすべてsonota.trance-cat.comにリダイレクトさせます。それもsonota.trance-cat.com/column/というURLもsonota.trance-cat.com/column/にリダイレクトしてくれるので、URLだけを変えた場合はこれが非常に便利です。 ご自身で利用する場合はsonota.trance-cat.comとsonota.trance-cat.comの部分をご自身のURLに入れ替えるだけです。 なお、この301リダイレクトはサーバーにmod_Rewriteという機能が搭載されていないと動作しません。たいていの有料サーバーはmod_Rewriteという機能がついてくるはずなので、使えるはずです。

Twitter4Jライブラリでツイッターボット作成中

→→→ツイッターボット「TweetBot 1.0β」を公開しました←←←   現段階 現在、JavaでTwitter4Jライブラリを使用したツイッターボットを作成中です。Twitter4Jライブラリを使うことによって、Twitter APIを簡単にJavaから操作することが可能になります。タイマー部分の論理はプログラム言語が違いますが、PCアラームと似たような感じです。 現段階では ・自動ツイート(間隔指定、例:毎10±5分、24時間おきにとか) ・自動相互フォロー(間隔指定、例:毎10±5分、24時間おきにとか) ・トレンド表示 ・指定したWOEID(場所)のトレンド表示 ・自分のタイムライン表示 ができています。   簡単な仕組み ツイートは「時間指定」ではないので、パソコンをシャットダウンしても支障は出ません。ツイートは.txtファイルで一行につき1ツイート記入する感じで、改行は\nで表します。もちろん、テキスト上の「\n」(改行コード)はエスケープされていて実際の改行コードではないので、プログラム内ではストリング内の「\\n」を「\n」に置き換えています。(str = str.replace(“\\n”, “\n”);)。これのことなんですが、最初は.replaceではなく、.replaceAllで置き換えようとしていたんですが、何度試してもダメだったんで、.replaceで片づけることにしました。この単純なコードに40分くらいかかりました。orz。。。今年最大の打撃です。 で、その.txtファイルに記載されたツイートを読み取り、「ツイート」が成功した後はそのツイートは.txtファイルから削除されます。まだツイートされていないツイートはそのまんまなので、途中でプログラムを切っても支障は出ません。 基本的な「認証」、「ツイート」や「フォロー」などはライブラリでサポートされているのでさほど面倒ではありません。 実行は古き良きコマンドラインからです。Windowsのタスクスケジュラーでパソコンを起動すると同時にコマンドプロンプトでボットを起動するように設定しています。   WOEIDとは WOEIDとは(Where On Earth IDentifier)(主の翻訳:一体、地球上のどこにあるんだ!?の識別子)の略で識別子は32ビットの数字であらわされています。アメリカのYAHOOが管理しています。 御覧のように秩父市の浦山口駅にも番号が割り当てられています。どんな場所でも割り当てられるようになっていると言ったほうが正確でしょうか。 浦山口駅:28364577 ツイッターではトレンドを取得するときの「トレンドの場所」を指定するためにWOEIDを使用しています。もちろん、浦山口駅のトレンドは取得不能ですが、ある程度大きな町ですとトレンドが表示できるようになります。試しにTwitter4JライブラリのgetAvailableTrendsでトレンドが表示できる場所を全部表示してみました。 2015年8月18日の結果です(PDF) これを見ると、ツイッターをどれだけの人が使用しているかなんとなくわかりますね。川崎市、チェリャビンスク、クラクフ、 ハイデラバッドなどかなりピンポイントな場所でもトレンド表示できます。 驚いたのは香港とハンガリー(ブダペスト)が載ってないんですね。香港は中国当局が規制しているのでしょうが、ハンガリーは・・・国民が単に興味がないんですかね。   実験結果 2年間放置していたアカウントで使用したところ、知らない間にフォローが500くらい増えてました。頻繁にフォローバックしているとほかのボットに察知されるんでしょうかねw ボットとしてはまだまだ他のと比べると劣りますが、少しずつ機能面や性能面で上げていきたい気がします。

目指せ!「モバイル・フレンドリー」なサイト!

目指せ!「モバイル・フレンドリー」なサイト! 最近、グーグルのサイトランキングにサイトがどれだけ「モバイル・フレンドリー」であることかが判定基準に加わりました。私なりに言えば「モバイル・フレンドリー」なサイトとはスマホやタブレットで見やすいサイトのことです。サイトが「モバイル・フレンドリー」であるかないかを判定するのにグーグルデベロッパーでは「モバイル・フレンドリー・テスト」というツールが存在します。 「モバイル・フレンドリー・テスト」URL:https://www.google.com/webmasters/tools/mobile-friendly/ スマホ向けにサイトを改良した結果、このツールでソノタブログはモバイル・フレンドリーであると認定されました。 やったー どうやってモバイル・フレンドリーにしたか このサイトではメタタグのviewportや画面サイズによってCSSスタイルを振り分けるMedia Queriesを使うことでサイトを「モバイル・フレンドリー」にしました。 viewportはサイトのヘダーに  <meta name=”viewport” content=”width=device-width, initial-scale=0.6″> のようなコードを入れることで指定できます。 また、Media Queries はCSSファイルに @media only screen and ( max-width : 1419px ) { スクリーンが1419px以下のときに実行したい内容を記述。 } @media only screen and ( max-width : 1419px ) { スクリーンが1420px以下のときに実行したい内容を記述。 } のようなコードを記述することで実現できます。たとえば、このサイトの右サイドバーの場合、1419px以下は「右サイドバーを本文の横に表示するのではなく、下に表示させる」ことをしていて、逆に1420px以上の場合は「右サイドバーを普通に本文の横に表示せよ」という内容のコードになっています。 また、このサイトでは採用していませんですが、.htaccessファイルでスマホやタブレットからのアクセスをモバイル専用のサイトに誘導するという手段もあります。規模の大きいサイトではこれをしているところが多いように感じます。 サイトをお持ちの方は一度サイトの「モバイル・フレンドリー」さを意識してみてはいかがでしょうか。 それでは良いサイト作りを~

【駄作】ペルチェ素子を使った小型冷蔵庫

ええ、栄養ドリンクのケースを使っています。 学園祭に出そうと思った 高校に通っていた頃に作った小型冷蔵庫(駄作)です。もともとは学園祭の出し物として出す予定でしたが、駄作(後ほど説明)だったので結局出しませんでした。仕組みは極めて簡単で電気的部品はペルチェ素子とファンしか使っていないです(電源回路は別)。 ペルチェ素子の冷たい側を冷気に変えるための(ヒートシンク)及び放熱するためのヒートシンクは古いパソコンからとってきたものです。放熱する側のヒートシンクはファン付きで電圧に応じてファン速度が変わります。ペルチェ素子は12Vのものです。耐水と断熱のため、栄養ドリンクケースの中は100円ショップで買った保冷バッグを切ってはり付けています。 デザイン性無視です。 動作中、一応、中のヒートシンクは凍り付きます。 なぜ駄作か まず、中の飲み物があまり冷たくならないこと(致命的)。 2つ目、電気食いすぎ。 3つ目、熱気がすごい。 はい、冷蔵庫として機能していないので駄作なのです。でも、一応、内部のヒートシンクは結露が凍り付くほど冷たくなります。でも、空間にその冷気が伝わらないんです。断熱が不十分だったの原因でしょうか。 でも、使い物にならないわけではなりません。冬はちょっとした卓上ヒーターとして使えます(笑)。

【チャージャー3号制作記】携帯型充電器、遂に完成

シンプル・イズ・ベスト 完成 【チャージャ3号制作記】もついに「チャージャー3号」(携帯型充電器)の完成をもって終わりを迎えることとなりました。過去の記事をご覧になりたい方は以下のリンクをクリックを、 1回目:【チャージャー3号制作記】PCB基板を作成してみた 2回目:【チャージャー3号制作記】携帯型充電器、部品実装+通電 今回使った黒色のケースは秋葉原の千石電商で買ったタカチのものを使用しています。ポイントは簡単にカバーを開け閉めできることで、それによってリチウムイオン電池の交換も容易になります。正直、ボタンやLEDをケースに装着してもよかったんですが、とてもめんどくさそうだったのでやめましたw。穴は取り付け孔を除くと、内部電池を充電するための充電ポートと外部デバイス(スマホなど)を充電するための出力用のUSBを通すための穴しかあけていないです。ドリルの穴あけは極めて容易でした。 爆弾じゃないお! スマホ充電中  結論・感想 少々大きいですが、普通に使えます。多分飛行機とかには持ち込めないでしょうがw スマホ2台以上充電する場合は予備の18650リチウムイオン電池を持っていくといいかもしれません。

実録!秩父遠征

  旅だ 今回、その他部部員3名で行ったのは埼玉県秩父市の浦山の消滅・限界集落群です。もともとは浦山口駅集合でしたが、本数が少ないため、結果的に御花畑駅で合流することになりしました。目的地へ行くための降車駅の浦山口駅は西武秩父駅直結の御花畑駅から2駅です。 まず向かったのは、駅から徒歩で行ける距離にある、橋立鍾乳洞(はしだてしょうにゅうどう)です。入場料は200円とお手軽。洞内は涼しく、非常に狭い箇所がたくさんあり、前へ進むには注意が必要です。 朝食は洞窟近くのそば屋でとる予定でしたが、「準備中」とのことでしたので日陰でバス待ちを兼ねて少し休憩をとることにしました。 橋立鍾乳洞入り口 栗山集落 鍾乳洞を見たあとは1日3~4便程度しか来ない秩父市営浦山線バスで「栗山」停留所まで行きました。「栗山」には栗山という消滅集落があり、そこを目指して、人気のない道を上っていきました。しかし、途中で舗装された道にさよならをし、傾斜が45度くらいありそうな道なき道を上ることになりました。幸い、その先には廃墟があり、しかもあまり荒らされていない様子でした(舗装された道から少し離れているからでしょうか)。 壁に掛けられたカレンダーは1988年の3月のままで停止していて、居間には1980年代のものと思われるナショナルのPana Color TH18-C16ブラウン管テレビが・・・。ちゃぶ台の上にはいまだに茶器と急須がおかれていて、27年間も放置されていたとは思えない様子でした。 1軒目の次に行った廃墟には1977年の5・6月カレンダーが未だにぶら下がっていました。外から伺っただけですが、1軒目と比べると、かなり中は荒れていました。2軒目を見た後は、道に合流し、道の先にも集落があるかと思い、しばらく道を歩きましたが、集落や廃墟らしきものは見当たらず、引き返しました(後ほど調べたらその先に集落はなかったので引き返して正解でした)。引き返した後は再び廃墟に遭遇し、3軒目には秩父警察署の張り紙があり、空き家が放火、破壊行為や盗難などの犯罪の温床になっているとのことでした。 谷沿いの大きい道へ戻った後は、大神楽方面へと向かいました。   大神楽集落 大神楽停留所付近に山奥へと続く道があり、その先に大神楽集落があります。舗装された道沿いにあり、一軒に関しては管理が行き届いていて、人が住んでいてもおかしくない様子でした。   薬師堂 大神楽より先の武士平を目指している途中、面白そうな建物を発見。後で調べると、薬師堂という仏堂でした。   コンピュータ その他にもUV-EPROMや74型ロジックICがのっているおもしろそうな基板を発見しました。ICのタイムコードを見る限り、おそらく1982年製だと思われます。基板の真ん中にはシャープ版のZ80 CPU、「LH0080」が数個配置されていて、そのころのコンピュータだと思われます。色々調べた結果、1982年製のシャープのMZ-2000かX1だと思ったんですが、基板の色(写真では青であるのに対し緑)やケースの色、部品の配置の違いなどから違うと判明。分かる方がいましたらコメントください。   武士平集落 武士平集落には廃墟らしき建物が数件ありましたが、こちらもちゃんと管理がされている様子でした。また、人が住んでいそうな家もあり、あまり詮索しないことにしました。ちゃんとした道は武士平で終わり、この先のたわの尾根を越えるには山道を進まなくてはなりません。   たわの尾根 上り坂の山道を進んだ後、たわの尾根につきます。たわの尾根には小さい馬頭観音の石像があり、供え物がされています。ここで少し休憩するといいでしょう。たわの尾根から茶平集落方面に向かう道はほとんど下り坂で楽です。 途中、清流に差し掛かり、私(管理人)はそこの水を飲みました。とりあえず、腹は壊さなかったです(笑)。清流の水は透明で荒川の水源にもなっているような場所なのでたぶんきれいです。   茶平集落 下り坂の道を進む途中、山の川をかける橋を渡った後に道が3つに分岐します。茶平は細い上り坂の先にあります。坂の上には警ら箱があり、集落はさらに奥にあります。人は一人も住んでいないですが、水道?や蛇口は設置され、墓などは管理されているようでした。家は6軒くらいあり、そのうちの1軒は完全に崩壊していました。規模は大きいのですが、中が見える家を見るとかなり荒らされていることがわかります。中には家の中に入れないように玄関に板を張っている家もありました。 山から帰還した我々を迎えたのは1991年に完成した寄国土(ゆすくど)トンネル。トンネルのレリーフは「浦山の獅子舞」をモチーフにしたデザインだそうです。   寄国土トンネル 寄国土トンネル内部。すごい反響します。 帰り 帰りは寄国土トンネル付近のバス停から市営バスを乗車して、一人300円払って西武秩父駅の近くまでバスを乗ることにしました。 途中、運転手から興味深い話を聞きました。運転手によると、この付近の集落の多くはもともと炭焼きで生計を立てていた家庭が多かったといいます。冬は4時間くらいしか日が当たらず、この低温により、木は固く育ち、木炭に向くものになるのだという。しかし、灯油が普及し始めると、多くの人々は集落を離れ、このように集落は廃墟化したのだという。 西武秩父駅では土産を買い、そばを食べ、帰りました。ああ、文明素晴らしや。

PCアラーム Ver1.2を公開しました

説明・使用方法:パソコン用の目覚まし時計です。Windows搭載パソコンで簡単に使用できます。 PCアラームの画面上の「フォームを隠す」をクリックすると、アプリケーションはいったんスクリーンから隠されます(終了しません)。もう一度、画面に表示させるにはタスクバー右側の「通知領域」というところにあるパソコンアラームのアイコンをダブルクリックします。 「フォームを隠す」ではなく、右上の罰点やファイル→終了をクリックするとアプリは終了し、アラーム(目覚まし)は作動しませんので、使うときは「フォームを隠す」かそのまま画面に表示させておいてください。また、パソコンが自動的にシャットダウンする場合やスリープする場合はアラームは発動しません。無事、アラームが発動すると、右下に通知されます。通知のエリアをクリックするとアラームは停止します。 音声ファイルはWindows Media Playerで再生できるものなら(多分)いけます。今のところ、(*.mp3; *.wav; *.wma; *.m4a; *.3gp; *.flac)が再生できることを確認しています。 Ver1.0とは違い、Ver1.2では曜日や時間、音声ファイルなどが「設定→詳細設定」で設定できるようになりました!これで、「平日の朝8時」や「水曜日の午後6時15分」などピンポイントでアラーム時間が指定できるようになりました。 いちいち起動するのが面倒くさければ、Windowsのタスク・スケジューラ(taskschd.msc)でパソコン起動時に自動的にPCアラームを起動するように設定できます。   動作環境:Windows Vista, 7, 8, 8.1, 10 Ver 1.0との違い:時間、曜日、音声ファイル、アラームメッセージなどの設定が保存できるようになりました。 今後:バグがあったら直します。 制作ソフト/言語:Microsoft Visual Studio 2013 Express for Desktop / C#   このソフトが起こしうるいかなる損害も責任を負いかねます。同意の上、ダウンロードしてください。 PCアラーム Ver1.2:ダウンロード

自作ヘッドホンアンプ

紹介 半年ほど前に作ったステレオ拡張回路付き、ヘッドホンアンプの紹介です。ここで紹介する「ステレオ拡張」とは難しそうですが、実際は非常に簡単で右の信号と左の信号の差を増幅するだけの話です。   「ステレオ拡張」の話 ステレオの音声の場合、音声信号は左と右にあわせて二つあります。通常、左の信号はLであらわされ、右の信号はRとしてあらわされます。しかし、少し角度を変えてみてみれば、LとRの信号の共通部分のCという信号も存在することがわかります。 ここでは左の信号のみに含まれる信号をL、右にのみ含まれる信号をRとします。 よって、右の信号は(L+C)としてあらわされ、右の信号は(R+C)としてあらわせます。曲によって違いますが、一般的にCには歌声(ボーカル)がのせられ、LやRには主にインストラメンタルがのせられます。 モノの音声の場合、LとRの信号の違いは存在せず、両方とも「C」です。しかし、ステレオからモノの音声を合成する場合、右と左、両方ともに、一般的に「0.5L+C+0.5R」の音声が送られます。 今回作ったステレオ拡張回路では前段の差動増幅回路で「(L+C)-(R+C)=L-R」と「(R+C)-(L+C)=R-L」の作動増幅を行い、いったん「C」の信号を排除します。次にこの信号をゲイン(A)が調整可能な反転増幅回路に送り、-A(L-R)と-A(R-L)の信号を出します。最後にこれらの信号をそれぞれ右の入力信号(R+C)と左入力信号(L+C)に加算し、出力波を合成します。 こうすると出力波はこのような式であらわされます。 片方:A(R-L)-L-C もう片方:A(L-R)-R-C 出力波の構成は中段の反転増幅のゲインが大きく関係していて、それによって、どれだけステレオを「拡張」したいかが調整できます。また、ゲインが0のときは終段の加算増幅回路は-(L+C)+0と-(R+C)+0の加算しかしないため、普通のヘッドホンアンプとして使用できます(信号は反転されますが、聞こえ方は変わらないです)。 Aを調整した場合の出力波は以下のようになります。  A= 出力波1 出力波2 A A(R-L)-L-C A(L-R)-R-C 0 -(L+C) -(R+C) 0.5 0.5R-1.5L-C 0.5L-1.5R-C 1 R-2L-C L-2R-C 2 2R-3L-C 2L-3R-C 5 5R-6L-C 5L-6R-C   仮想グラウンド オペアンプは大体、両電源で稼働するため、電池では「仮想グラウンド」を作る必要があります。今回、「仮想グラウンド」はカレントミラー回路というトランジスタで構成された回路で作りました。つかったトランジスタは日本で簡単に手に入る2SC1815とコンプリメンタリの2SA1015です。9V電池で稼働する場合、+電圧は+4.5V、-電圧は-4.5Vとなります。トランジスタの個体差により、グラウンド電圧が実際に「0V」にならない可能性がありますのであらかじめブレッドボードでテストしてから基盤に実装しました。また、入力につられて、グラウンド電圧が揺らぐことがありますが、個人的にはあまり差が感じられなかったので、ある程度の「揺らぎ」は許容しています。   使用するオペアンプ ICソケットを使用しているため、オペアンプは簡単に交換できるようになっています。最初は本当にオペアンプを変えただけで音が変わるか疑っていたんですけど、実際にオペアンプを変えて音の変化を感じられたので、色々試してみました。 どれか一つがいいというわけではなく、組み合わせが重要だと感じました。結局最後は初段(差動増幅)にOP275、中段(反転増幅)にOPA2134PAと終段(加算増幅)にNE5532の計3種を使うことにしました。 普通にヘッドホンアンプとして、一つのICオペアンプのみを通して聴く場合、OPA2134は湿っぽすぎて、OP275はシャリシャリしすぎている気がしました。なので、ニュートラルだと感じたNE5532を終段に使うことにしました。あくまでも個人的な意見なので、参考程度にしてください。   ケース ケースは近所の百円ショップで買いました。穴あけもさほど面倒ではなく、電池交換やオペアンプ交換の際、蓋が取り外せるのがいいですね。

BatchRename Ver1.0を公開しました

指定した文字列を一斉にフォルダ内のファイル名から除去する名称変更ソフト – BatchRename Ver 1.0を公開しました。ファイル数1万でもサクッと読み込んじゃいます。   開発について 今回、一番頭を悩まされたのはGUIライブラリの「JavaFX」の「textarea」に文字列をバンバン短期間に足していくと、なぜかエラーが表示されるということでした。そもそもなぜ、短期間で大量に文字列を追加するとエラーになるのか未だにわからないのですが、とにかく、対策を考えるまではかなり時間を食わされました。 設定保存機能の追加はそれほど大変ではなく、XMLを処理するライブラリを足して、色々ファンクションを書いたりしたら普通にうまくいきました。 このソフトは初めて作ったGUIソフトだったんで、βバージョンでは後先考えず、GUIを描写するクラスと名称変更のロジックをすべて同じスレッドで処理してました。おかげさまで、βバージョンでは大量のファイルを読み込むときには画面がフリーズしちゃったんですw。そこを今回、ロジックを別スレッドに移すことでフリーズする問題を解消しました。所謂、「マルチスレッド」というやつじゃないですか。 あと、すごい単純な問題 なんですけど、JavaにはGUIを作成するためのライブラリが「Swing」、「awt」と「JavaFX8」などがあって、中にはお互い全く同じ名前のクラスがあったりするんです(たとえば「Font」)。でも、使い方が違ったりする場合もあるので、イチイチ目的のクラスを調べるのが大変なんです。たとえば、「Java Font」ってしらべても「awt」のほうがトップで表示され、「JavaFX」のドキュメンテーションが表示されないんです。だから、やり直して、「JavaFX font」って調べなおすんです。また、エラーが表示されて、原因が間違ったライブラリのimport文(「import javafx.scene.text.Font」じゃなく、「import java.awt.Font」)であったりすると少しうんざりしちゃいます。まあそれだけです。   説明 指定した文字列を一斉にフォルダ内のファイルから除去するソフトです。サブフォルダを含めるというオプションもあり、これらの選択値は「設定→デフォルト設定」から選択できます。設定はXMLファイルに保存されます。   動作環境 Windows(確認済み)、Linux(Ubuntuで確認済み)、Macintosh(未確認)。すんません、Java 8 以降をダウンロードしていないと動きません。Ubuntuだと sudo add-apt-repository ppa:webupd8team/java -y sudo apt-get update sudo apt-get install oracle-java8-installer を実行して、Java 8をダウンロードしてください。   こんなことができます 写真フォルダ内の写真のファイル名からすべて「DSC」や「PIC」を外す、一斉にファイル名からホワイトスペース「 」やアンダースコア「_」をなくす、などなど。   使用方法 まず、まとめて名称変更したいファイルが集まっているフォルダを選択します。次に、サブフォ ルダを含める場合はチェックボックスをチェックし、「該当ファイル表示」を押し、変更が適応されるファイルを表示します。最後に「実行」を押せば、名称変 更がファイルに適応されます。除去したい文字列はwordlist.ini内で改行して区切って記述してください。 wordlist.iniの記述例: #一番上の行はあけておいてください。除去したい文字列は以下に改行して区切って記述してください。 abc def この場合、”abc123.jpg”は”123.jpg”に、”definitionabcd.txt”は”initiond.txt”になります。   Beta版との違い ・高速化(ファイルの読み取りにはjava.nio.file.DirectoryStreamをつかっているため、速い。) ・デフォルトフォルダなどの設定が保存できる ・マルチスレッド化 ・Beta版では大量のファイルを読み込むときは読み込みが終わるまで画面がフリーズしたが、Ver1.0ではそうならない ・読み込み中、名称変更中はプログレスバー(ProgressBar)を表示 ・ファイルやフォルダにアクセス権限がないときはテキストエリアにそのことを示すエラーが表示される ・その他のエラーも表示するようになった   今後:なんかバグがあったら直そうと思います   後から発覚したバグ(次のバージョンで修正されます) ・「フォルダ選択」をクリックした後、結局選択せずに「該当ファイル表示」をクリックするとNullPointerExceptionエラーになる。   このソフトが起こしうるいかなる損害も責任を負いかねます。同意の上、ダウンロードしてください。 指定文字列除去ソフト(Ver 1.0):ダウンロード ↓BatchRename V3.0 を公開しました。↓ BatchRename V3.0  

TYPEMASTER Ver 1.0

タイピングゲーム速度測定ソフト 説明 自分のタイピング速度を測定できるソフト(ゲームじゃないです)です。当初はゲームっぽくする予定でしたが、なにか途中で飽きたのでw、この段階での公開となります。タイプする文章はtextlist.datというファイルに保存されていて、自由に編集することができ、デフォルトでは表示される順番は行によってシャッフルされますが、設定画面で無効にできます。現在、アルファベットの文章にしか対応していません。   制作環境 NetBeans(サイトURL:https://ja.netbeans.org/)という無料でオープンソースのIDEでJavaという言語で書きました。個人的にJavaは結構好きです。   動作環境 Windows(確認済み)、Linux(Ubuntuで確認済み)、Macintosh(未確認)。すんません、Java 8 以降をダウンロードしていないと動きません。Ubuntuだと sudo add-apt-repository ppa:webupd8team/java -y sudo apt-get update sudo apt-get install oracle-java8-installer を実行して、Java 8をダウンロードしてください。   Windows。Java 7 とかでも動いた記憶があるんですが、定かではありません。とりあえずJava 8 で作ったソフトなので、8があれば動くはずです。 Javaのダウンロードはこちらから。https://java.com/ja/download/   使用方法 表示される文言はtextlist.datに保存されていて、自由に編集できます。 編集する際の改行箇所は例文を参考にして作成してください。 デフォルトでtextlist.datから読み取った行はシャッフルされます。 無効にする場合はプレイする前に「設定」で無効にしてください。   今後 暇があれば、もっと作りこんで「ゲーム」っぽくしたいですね。気が向いたら日本語文章にも対応させたいと思います。気の向くままに気長に。   このソフトが起こしうるいかなる損害も責任を負いかねます。同意の上、ダウンロードしてください。 TYPEMASTER1.0 :ダウンロード ↓Version 2.0 を公開しました。↓ http://www.sonota.trance-cat.com/typemaster-ver-2-0/

自作PCの紹介

作ろう 半年くらい前の話ですが、4年間使い続けた前のデスクトップPC(i7-870、GT-320の市販のデスクトップPC)がずいぶん遅く、うるさく、電気もかなり食っていたので、長年の願望だった自作PCを作ろうと思いました。パーツの値段の下調べやケースの選定はアキバのツクモやソフマップで行い、発注はネットでしました(パーツを家まで運ぶのが嫌だったので)。   パーツの選定 最初はCore i7プロセッサーにしようと思ったんですが、値段とTDP(熱設計電力)の観点からi5-4590プロセッサーにしました。グラフィックも最新のものではなく、省エネで補助電源不要のGTX750Tiを搭載したものにしました。ATX電源に関しては最安は少し怪しい感じがしたので、一応名の知れている「玄人志向」の500Wのものにしました。前のパソコンは完全に起動するまで2分以上かかることがあったので少々お高めですが今回はブートドライブは磁気ドライブよりも速い128GBのSSDにすることにしました。さすがに自分のもっているデータがすべてSSDドライブに入るはずがなかったので、データ用のドライブとしてウェスタンデジタルのWD Greenの3TBドライブを買いました。また、前のデスクトップPCでつかっていた東芝のデータドライブ(2TB)もそのまま移し替えて、かなりの容量を確保できました。(計5TBくらい) マザーボードは一番無難なH97-PROにしました。 メモリに関しては16GBあってもいいかなと思ったんですけど、私の場合、全部使う機会が少ないと思い、8GBにしました。ディスクドライブはデータのバックアップとかにブルーレイを使うので、BDドライブにすることにしました。できるだけ値段を抑えたかったので前のPCに組み込んでいたパイオニアのBDR-209Mを新しいパソコンに植え替えました。 ケースは消音スポンジとかが入っているのが良かったんですけど、少々高かったので見た目が良くて安いAntec社のP70にしました。正直、候補が多かったので決めるのに迷いました。   組立 組立、OSのインストール、データの移し替えには丸一日かかりました。一番面倒だったのはヒートシンクの取り付けで、マザーボードの穴に取り付けるのにかなりてこずりました。 パーツの互換性とかでは問題がなかったので、思っていたより楽でしたね。   使用 半年くらい経ちましたが、マシン自体に問題はないように感じます。ただ、Windows 8.1のほうがフリーズすることが1,2回ありましたね。今日?、Microsoft社がWindows 10を解禁するらしいので、そちらのほうに期待します。個人的にはスタートメニューの復活を一番期待しています。 グラフィックカード(GF-GTX750Ti-LE2GHD)に関してですが、DVI+HDMI+D-SUBポート全部使用で一応トリプルスクリーンもおkです。DVIは一度HDMIに変換してからテレビにつなげているんですが、なんか縁部分がクロップされちゃいますね。でも、モニターにつなげると縁部分はちゃんと表示されるので、多分これはテレビ側の問題だと思います。対策としてはNvidia コントロールパネルの「デスクトップのサイズと位置の調整」で「デスクトップのサイズ変更を有効」にして、縁がクロップされない程度に画面サイズを調整します。これで、無事、縁がクロップされずにテレビでパソコン画面を表示できるようになりました。 【追記】また、Windows 10 がリリースされて、インストールしてからも特に問題はありません。   部品表 会社 商品名/説明 購入先 PCケース Antec P70 ツクモ マザーボード ASUS H97-PRO ツクモ プロセッサー Intel i5-4590 ソフマップ メモリ Team Teamデスクトップ用メモリ DDR3 1600Mhz PC3-12800 8GB アマゾン グラフィックカード 玄人志向 GF-GTX750Ti-LE2GHD ツクモ 電源 玄人志向 KRPW-L4-500W ツクモ 冷却ファン+ヒートシンク COOLER MASTER Hyper TX3 EVO ツクモ ハードドライブ Western Digital WD30EZRX-1TBP (WD Green 3TB) ソフマップ OS Microsoft Windows 8.1 DVD-ROM アマゾン SSDハードドライブ Transcend ts128gssd370 アマゾン BDドライブ Pioneer BDR-209M — モニター、キーボードやマウスは使いまわし。   値段 それなりに高かったですね。合計101783円しました。ふぅ~。初めての自作PCだったのでそれなりに長く使い続けたいと思います。    

【チャージャー3号制作記】携帯型充電器、部品実装+通電

税関であけられた~ 届いた! 待ちに待ったPCB基板が20日、中国から到着しました! 途中で「遅い!」というメールを送ったにもかかわらず、なんと、なんと、受注から約1カ月もかかりました。どうやら受注先も「problem」があったことは認めましたが、それでも、そこから数週間かかりました。まぁ、安いし、いいか。それに、税関であけられた痕跡もありましたし、工場から香港まで送るのに時間がかかったというのもあるかもしれません。 本題のPCBですが、個人的には出来がいいと思います。 肝心の基板です。右に縦に並んでいる黒い四角い物体は5Vレギュレーター(MINMAX M78AR05)でUSB端子に電気を送ります。USBポートは3つあるので同時に3つの機器を充電できます。 私の個人的なミスでマスキングし忘れた箇所が数か所ありましたが、致命的ではなかったのでおkです。前の記事でも記述したように、リレーのフットプリントの番号ふり間違えは少々厄介ですけど、リレーを基板上にのせなければ大丈夫です。 部品を実装し、試験的に通電してみると、予想通りにリチウムイオン電池が充電できました。基板上のLEDでは青が「充電中」、黄色が「充電完了」、緑は「5V電源来てます」を示しています。青いLEDの右にある小さくて黒いICがこの回路の心臓部、MCP73833(詳細は以下の「主な部品」)です。また、充電と放電(スマホ充電など)を切り替えるためにさらに右にあるリレーを使用しています。リレーはPCB上に実装できない設計をしてしまったので、ワイヤを通してリレーを浮かせてつなげています。   充電の様子。青色LEDが光っているので、リチウムイオン電池の充電中だということがわかります。使用しているリチウムイオン電池は18650型のものです。 過放電防止の作動電圧の問題 次にUSB端子を通して、スマホ充電を試みてみると、うん?過放電防止回路がリチウムイオン電池2個の直列電圧が8.5Vくらいで作動していることが判明。原因はP型MOSFETの電圧降下を考慮していてなかったことと、他の値のツェナーダイオードを使ったしまったこと。電圧降下と言っても0.1V位ですので、大半は後者が原因です。ツェナーダイオードは他になかったため、分圧抵抗器の値を変え、無事解決しました。スマホなどの外部デバイスを充電するときはプッシュボタンを押し、5Vレギュレータへの電源供給が開始します。このとき、”USB Active”のLEDが光り、ちゃんと電気がとどいていることを示してくれます。一度、設定した作動電圧以下にリチウムイオン電池の電圧が下がると、スマホ充電は止まります。作動電圧はリチウムイオン電池の終止電圧に基づいて決めました。   黄色LEDが光っているので、リチウムイオン電池の充電が終わったということがわかります。 終止電圧と私のスマホの話 なお、終止電圧は7V位(1セルあたり3.5V)に設定しています。普通に売られている製品(携帯電話とか)だと3V~3.5V位らしいんですが、CGR18650C電池の放電曲線を見ますと、3.5V以降は急激に電圧が低下することがわかり、3.5Vに設定しました。ちなみに私のスマホのLi-ion電池の終止電圧は3.6Vでした・・・。電池の減りが速いと思ったら、実際は放電を高い電圧で止めていたんですね。そのスマホのメーカーは内蔵された電池のメーカーと一緒なので、電池の寿命を最重視してこのような値に設定したのでしょうか。謎です。 補足ですが、このチャージャー3号(1号と2号も)この電池の減りの速いスマホを外出先でも充電できるようにと思いで作りました。   試験的使用 早速、スマホを充電してみると、無事100%まで充電できました(スマホの電源を切っている時の充電)。でも、リチウムイオン電池の容量(2150mAh)を考えると2台フル充電するのはきついですかね。しかし、大容量の電池を買えば簡単に容量アップできますし、充電された18650型のリチウムイオン電池をさらに2個持ち歩けば、さらにMP3プレーヤーやほかのデバイスも充電できることでしょう。   主な部品 リレー – “HSIN DA 941H-2C-5D” 秋月で売っていた安くて良いリレーです LED – “LENOO L053SBLD”(青色) 千石で売っていました。青色は小さい電流でも明るいですが、赤、黄色や緑は同じ明るさにするのにより電流が必要です。とりあえず同じ色同士の明るさにムラがないのでいいです。 “MCP73833” – マイクロチップ社が作るリチウムイオン充電ICです。RSコンポーネンツから買いました。 P型MOSFET “2SJ681” – 過放電を防ぐための「ダム」として出力回路に組み込んでいます。安いです。 コンパレータIC “LM339” – リチウムイオン電池の電圧が設定した終止電圧よりも下回ったことを察知するための過放電防止回路に組み込んでいるICです。内蔵されたコンパレータの4つのうち1つしか使っていないので他のコンパレータICでもよかったかもしれません。 5V定電圧レギュレータ “MINMAX M78AR05” – 高い変換効率(94~86%)を誇るレギュレータです。このことから、7805のように触れないほど熱くはなりません。電池駆動なんで、最低入力電圧が6.5Vというのもうれしいですね。少々高いのが欠点です。また、出力電流は500mAまでですけど、実際にそれ以上の電流を引くデバイスはそう多くないように感じます。   今後 今後はケースを作って楽に持ち歩ける、「携帯型」にしたいです。気が向いたら、作って投稿します。それではまた。

Arduino EPROM リーダー・ライターを作ってみた

M27C1001 UV-EPROM 図書館で借りてきた本にUV-EPROMに関する記述があり、興味を持ったのでEPROMリーダー・ライターをArduinoをベースで作ってみた。 UV-EPROMとは UV-EPROMとはUltra-Violet Erasable Programmable Read Only Memoryの略で「紫外線でのみデータを消去できるメモリ」と考えて良いかと思います。そのため、UV-EPROMには紫外線をIC内まで通すために天窓のようなものがついています。何もプログラムしていない状態のEPROMはデータがすべて「1」です。そこに「0」を書き込んでいく形でEPROMはプログラムされます。一定時間の間、UV-EPROMに特殊な紫外線(波長が短い紫外線)を当てると内容はすべて「1」にリセットされます。 今回、作ったEPROMライターは手元にあったEPROM、27C64、27C128、27C256、27C1001(27C010)を対象にしたリーダー・ライターです。27C512を入れなかったのは27C512だけVppがなく、単純に面倒くさそうだったからです。 ブレッドボードにおける試作機。パラレル通信の面倒くさい点はこのように配線が多いこと。 制作過程 これらのUV-EPROMは今、多く出回っているEEPROM(シリアルEEPROM)とは違い、パラレル通信でアドレスやデータのやり取りをします。このため、ピン数が多く、Arduino DuemilanoveなどでつかわれているATMEGA328などではピン数が足りません。そこで、シフトレジスターを使うことにしました。 シフトレジスタを使うことにより、あまりピンを使わないシリアル通信でシフトレジスタに命令を送り、UV-EPROMとやり取りさせるようにできます。シフトアウトレジスタの場合、図で簡単に示すとこんな感じです。 Arduino→(シリアル通信)→シフトアウトレジスタ→(パラレル通信)→EPROM しかし、これだけではEPROMからデータを読み取れないのでシフトインレジスタも使う必要があります。シフトインレジスタだとこんな感じです。 単純な回路なのに、配線は結構面倒。 EPROM→(パラレル通信)→シフトイントレジスタ→(シリアル通信)→Arduino これら2種類のICだけでリーダー・ライターができちゃいます。今回使ったICは74HC595シフトアウトレジスタと74HC597シフトインレジスタです。もちろん、同じような機能を持つICでも回路は簡単に作れると思いますが、NJU3711(8ビット、シリアル-パラレル変換IC)などのICの場合、出力をディセーブル(高インピーダンスに切り替える)する機能がないため、EPROMのデータピン(D0~D7)でつかう場合は74HC541などの出力ディセーブル機能のあるバスバッファを介さないとデータ読み取りの際に支障が出るかもしれません。これは上記したEPROM(27c~)の性質上で同じデータピンが入力と出力両方に使われるためが原因です。 M27C1001/010の場合、アドレスピンが17つもあるため、8-ビットのシフトレジスタ(74HC595)二つでは足りないという問題がありましたが、Arduino側で余っていたI/Oピンで対処しました。今回使うEPROMはすべてデータは8ビットで記録されているため、データ用のシフトインレジスタ(74HC597)とシフトアウトレジスタ(74HC595)はそれぞれ一つで済ませることができました。万が一、書き込み時にデータ用のシフトアウトレジスタの出力がディセーブルされた場合(この場合、データに00000000が書き込まれてしまう)に備えて、データピンはすべて+5Vにプルアップされています。   ブレッドボードで試作機を製作した後、TinyCadで回路図を作り、ユニバーサル基板で実際のリーダー・ライターの制作に取り掛かりました。PCBにしてもいいか迷いましたが、設計では4種のEPROMしか扱えないことやリーダーライターは一台で足りる(PCBを頼むと複数枚頼まないといけないところが多い)ということで断念しました。 Arduinoのシリアルコンソールのキャプチャ。ASCIIの0~31は□みたいな記号に置き換えています。 配線はかなり面倒でしたが、短期間で終えることができました。 しかし、本番はここからでArduino用のプログラムを作成しなくてはなりませんでした。最初に作ったプログラムはアドレスごとにデータをバイナリで読み取るもので、そこから、右の図のような16進数でアドレスとデータ16組をまとめて一行に表示し、一番右にASCIIキャラクタを出力するプログラムを作りました。この表示形式はEPROMリーダーでは一般的のようです。 ArduinoはEPROMからのデータを読み取った後に毎回パソコンへそのデータをUSBを介して送るため、ボーレートの値を上げることで読み取り速度および書き込み速度(Verifyモードを使うとき)が上がります。今回は250000ボーに設定しました。TeraTermなどのソフトを使えばそれ以上の値を設定可能ですが、Arduinoのクロック(16MHz)のせいか、250000以上の値ではうまくいきませんでした。 完成です。右奥に見えるのはArduino互換機。リード・ライトするEPROMの種類に応じてスイッチの設定を変えます。32ピンのZIFFソケットが売られていなかったので40ピンのものを使っています。  Vppの問題 Vppは20V代のものもあれば今回使ったEPROMのように12V位に設定されているものもあります。しかし、USBでは+5Vしか供給されないため、それをVpp電圧まで昇圧して使うか、ほかのところから電源を引っ張ってこなくてはなりません。今回は予算や手間も考慮して、私が持っていたATX電源の+12VをVppとして使いました。(使う前に必ずGND間に電圧差がないか確認してください) 最後に 簡単な自作CPUの制作を視野に入れているので今回このEPROMリーダーライターを作りました。今日のEEPROMやFlashメモリを見ると、UV-EPROMの時代からどれだけ技術が進歩したか実感できますね。