カテゴリー「プログラミング」の投稿を表示中

WordPress投稿内の旧ドメインを新ドメインに変更する方法

phpMyAdminにおいてのテーブル(この場合、wp_posts)エクスポート画面 このサイトはかなり前に今のドメインに変更したのですが、まだ過去サイトのドメインがブログのところどころに使われていることに今日気が付きました・・・ 以前は旧ドメインへのアクセスは今のドメインに301リダイレクトするように設定していたのですが、知らない間に旧ドメインを削除してしまったため、旧ドメインを使った画像やリンクが正常に動作しなくなってしまいました。 そして、今日、ブログ内の旧ドメインをすべて新ドメインに置き換えたのですが、その方法を少しだけ紹介したいと思います。   WordPressの投稿データはすべてwp_postsテーブル内にあります。 <対処法> 一見面倒くさそうですよね・・・すべての投稿内のリンクをひとつひとつ変更するのは。 しかし、phpMyAdminにログインし、WordPressの投稿がすべて記載されているテーブル、「wp_posts」をSQLファイルとしてダウンロードし、SQL内の旧ドメインをお好みのテキストエディタで新ドメインに置換し、それをまたphpMyAdminでWordPressのフォルダにインポートすれば、すべておkです。 操作を行う前はWordPressのフォルダをphpMyAdminでバックアップしておくことをお勧めします。以下の操作で生じた損害の責任は負いかねます。 サイトがホストされているサーバーのphpMyAdminにログインする。 ドメインを変更したWordPressブログのフォルダ内のwp_postsテーブルをSQLファイルとしてダウンロードする。 テキストエディタでSQLファイルを開き、旧ドメインをすべて、新ドメインに置換する。文章内で同じドメインを使った覚えがあるのなら、一つ一つ確かめてから置換するのがいいかもしれません。 phpMyAdmin内で過去のwp-postsテーブルを削除する。 変更したSQLファイルをphpMyAdminでWordPressフォルダにインポートする。 これで完了です。phpMyAdminに慣れていれば、5分かからないと思います。 データベースを直接操作するのが不安な方は文字列置換プラグインを使ってもいいかと思います。基本的にやっていることはおなじですが・・・ それではあなたのサイト運営の幸運を祈ります。  

所有サイトを全部HTTPS化しようか

今日、所有する一つのサイトを試験的にHTTPS化した。なぜHTTPS化したか・・・それはあのグーグルがHTTPS化をランキングシグナルに使用するとすでに発表していたから。あと、次世代プロトコル、HTTP/2にはおそらくHTTPSが必要となるから。 オレオレ証明書以外ではさくらのラピッドSSLが一番安そう(1620円/年、投稿時)だったから、それを使うことにした。サイトはWordpressで運用していたため、ポスト内のhttp://www.ドメイン名.comの記述はすべて検索と置換の機能があるプラグインですべてhttps://www.ドメイン名.com置き換えた。もちろんデータベースはバックアップしてから変更した。 httpの方へのアクセスをhttpsにリダイレクトするには少々手間取ったが、以下のリンクで紹介される、.htaccessとwp-config.phpの編集でなんとかリダイレクトを成功させた。原因はどうやらさくらサーバーの方らしくて、リンク先の対処法もさくらのレンタルサーバーのみを対象としたものです。 さくらSNI 独自SSLでドメイン全体をHTTPS化する これで何とかサイトをhttpsにしたけれど、他のサイトもhttps化するべきか・・・ [VPS+レンタルサーバー+ドメイン料+SSL代]ですでにかなりとられている。これで他のドメインをHTTPS化するとなると・・・かなりかさむなぁ。サーバーをVPSのみにし、ドメイン統一も検討すべきか・・・

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);

サイト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ファイルでスマホやタブレットからのアクセスをモバイル専用のサイトに誘導するという手段もあります。規模の大きいサイトではこれをしているところが多いように感じます。 サイトをお持ちの方は一度サイトの「モバイル・フレンドリー」さを意識してみてはいかがでしょうか。 それでは良いサイト作りを~

robots.txtでルートディレクトリのクロールを無効にする

ひとつのwwwフォルダーにサブディレクトリ別に複数のドメインをホストしている場合、ルートディレクトリだけボットにクロールされないようにし、サブディレクトリのみをクロールさせたい場合が出てくるだろう。 そういう時は、ルートディレクトリのwwwに以下のような内容のrobots.txtを置けばいい。 robots.txtの記入例 「User-agent: * Disallow: / Allow: /directory1/ Allow: /directory2/」 この場合、ルートディレクトリのクロールは禁じているがサブディレクトリである「directory1」と「directory2」のクロールは許可している。 すべてのボットが認識する保証はないが、少なくともGoogleBotはこれでおkだそうだ。

NetBeansが使用するJavaバージョンを変えたいとき

NetBeansのインストール先のフォルダの/etcというサブディレクトリにnetbeans.confというファイルがあります。 netbeans.confの中にnetbeans_jdkhomeという項目があるはずなので、それを自分の使用したいJavaのバージョンのパスに変更します。 例:netbeans_jdkhome=”C:\Program Files\Java\jdk1.8.0_40″ ウィンドウズでは直接ファイルを上書きすることができないかもしれないので、一度元ファイルを移動か削除してから、変更後のファイルをコピー・移動したほうがいいかもしれません。 以上です。

PHPで全角&半角ストリングの文字数を取得する

PHPでは英文ストリングの文字数はstrlen関数で取得することが多いですが、これでは全角文字が「2文字」として認識されてしまいます。 例: echo strlen(“あいうえお”);//”10″が出力されます。 echo strlen(“abcde”);//”5″が出力されます。 これは半角文字は1バイト、全角文字は2バイトで表されるためです。 全角文字も半角文字も「1文字」として認識させるためにはmb_strlen関数を使います。 例: echo mb_strlen(“あいうえお”);//”5″が出力されます。 echo mb_strlen(“abcde”);//”5″が出力されます。 正しく動作しない場合 なお、動作させるサーバーのPHPの内部エンコーディングは”UTF-8″でないと正しく動作しない可能性があります。内部エンコーディングは.htaccessファイルやmb_internal_encoding関数で設定することが可能ですが、php.iniであらかじめ設定しておくと手っ取り早いです。 php.iniファイルにmbstring.internal_encodingが”EUC-JP”とかではなく、以下のように”UTF-8″として設定されていることをご確認ください。 mbstring.internal_encoding = UTF-8

管理人のサイト作成回想記

私、管理人が始めて本格的なサイトを作ったときは全てHTMLファイルで済ませていて、PHPやCMSなどは一切使用していませんでした。 しかし、サイドバー、メニューやヘッダーなどの共通箇所をいちいち変更するのが面倒くさくなり、あるとき、全ファイルをPHPに変更させ、サイドバー、メニューやヘッダーは全て<?php require_once(“header.php”);?>などで済ませるようにしました。また、.htmlでもアクセスできるように、.htaccessなども変更しました。 しかしそれでは肝心のファイル数は減らず、管理は相変わらず大変でした。そこで、サイトのmetadescriptionやmetakeywords、コンテンツなどのデータを抽出し、MYSQLデータベースに保存するスクリプトをPHPで書き、また、そこから自動的にページを生成するスクリプト(data.php)も書きました。このdata.phpに?action=exampleなどのクエリーを渡すと指定されたページをロードするようにしました。しかし、それでは長ったらしいurlになってしまうため、そこは.htaccessで何とか対応させました。 これで管理はずいぶんと楽になったわけですが、Wordpressのプラグインやユーザー管理などの機能に憧れ、ある日、サイトをWordpressに移行させることを決めました。 まずはWordpressテンプレートを一から作成することからはじめ、その後はデータの引越しをしました。簡単そうに聞こえますがこれには丸2日かかりました。メタデータなどのデータの引越しにはかなり悩まされましたが、SEOプラグインやMYSQLのSQL文エクスポート・インポート機能を使い、何とかやりのけました。 その過程でWordpressの良さや良くないところをしみじみと感じました。まずは投稿内でphpコードを使用できないのがかなり不満でした。投稿内で指定したphp変数でテンプレの一部を変更するようなことをやりたかったのですが、phpを埋め込めないんじゃと思い、ほかの方法を模索しました。 幸い、Wordpressにはカスタムフィールドという機能があり、投稿画面で変数を指定することは出来ました。この機能がなかったら本当にWordpressやめようかなと思ったんですが、救われましたね。 何せ、Wordpressには便利なプラグインがたくさんありますから。本当に使ってて便利です。