やったこと

webサービスを作るときに考えたことを垂れ流します

【mySQL+PHP】Google Mapの緯度・経度の情報がずれてしまった。

PHPmySQLの環境で「Google MAP」の位置情報を格納する処理を作っているんですが、DBに格納すると位置情報が微妙にズレてしまうんです・・。

何が悪いのかと原因を探ってみたら、どうもSQLのデータ型がよくなかったみたいです・・。

私は「latitude(緯度)」と「longitude(経度)」の情報をデフォルトのFloat型で格納していたんですが、これは正しくは「サイズ (10,6)」のFloat型で格納するのが、望ましいみたいです・・。

小数点の精度が足りなくて、値が丸められてしまっていたということなんですね・・。

Googleの公式ページを見てもたしかにそう書いてありますね・・。
https://developers.google.com/maps/documentation/javascript/mysql-to-maps?hl=ja

いかにもありがちな間違いですね、うっかり八兵衛でした・・。

AGデスクトップレコーダーが開始処理中となって動かない!

「AGデスクトップレコーダー」というデスクトップ画面をキャプチャできる便利なソフトがあります(このソフトです!)

AG-デスクトップレコーダー ダウンロードページ

このソフトはPCのキャプチャ動画をツイッターにアップロードするときにめちゃくちゃ役に立ちます。コーデック設定画面で「H.264/AAC」を選択すれば、難しいこと抜きで一発でツイッターにアップロード可能な動画がキャプチャできるからです。

しかしこのソフト、時々動作不良になって「録画する」ボタンを押しても「開始処理中」のまま固まって動かなくなってしまうことがあります・・。

この状態になるとなかなか復旧が困難なので、私はしょうがないのでソフトを一旦アンインストールして、もう一度インストールしなおすことにしています。

再インストールすると、再び正常にキャプチャを取ることが可能になります。

とても不便ですがしょうがないですね・・。一発でサクッとツイッターにキャプチャをアップできるソフトはなかなかありませんから・・。とても貴重な存在です・・。

PHPで全部nullで埋められたn個の配列を生成する!

PHPで全部nullで埋められた配列(n個)を生成する方法です。

「array_fill」という関数を使うと簡単にできます。

以下のコードでは「インデックス0」を先頭にして、10個分の配列を生成してくれます。中身は全部nullで埋められてます。

$test_array = array_fill(0, 10, null);

めっちゃ簡単なことですが、ちょっと調べてしまいました・・。

以上!

PHPで2chの書き込みIDのような文字列を生成するアルゴリズム!

PHP2chの書き込みID風のユニークな文字列を生成するアルゴリズムです。

以下のような感じのやつを出力します。

id:kh9D1A2c


コメント投稿者の「IPアドレス」と「書き込み時刻」を連結した文字列をsha1-hmacでハッシュ化します。
同じ日付で同じIPアドレスから書き込みをすると、同じIDが生成されるという訳です。

コードは以下の通り。

  //初期パラメータ
  $ip = "192.168.1.1";
  $timestamp = "2017-10-06";
  $secret = "hogegefugagapiyoyo"; 

  //sha1を使ってハッシュ化
  $id_hash = hash_hmac("sha1", $timestamp.$ip, $secret);

  //base64の形式に変換
  $id_base64 = base64_encode($id_hash);

  //先頭の8文字だけ抜き取る
  $id =  substr($id_base64, 0, 8);

天文学的な確率でIDが被る可能性があると思いますが、まあそれはヨシとします・・。
ハッシュのsecretが他人にバレてしまうとIPアドレスを推測されてしまいそうなので、これは絶対漏らさないようにしたいところです・・。

以上!

ツイッター広告で自分のツイートが表示されない!

先ほどツイッター広告の「ツイートのエンゲージメント」という機能を使って広告を打とうとしたのですが、困ったことが起きてしまいました…。

「クリエイティブを選択」の画面で自分のツイートを選択しようとしたのですけども、自分が先ほどつぶやいた一番最新のツイートだけが表示されないのです(更新ボタンを押してもダメでした…)

DBの登録が遅延してるのかな?と思って10分、20分と待ってみたのですが、なかなか自分のツイートが画面に表示されません。

業を煮やした私は、自分の一番最近のツイートを削除して、もう一度同じ内容をつぶやき直しました。

そうしたら、やっとこさ広告画面で自分のお目当てのツイートが選択できるようになりました。

ツイッター広告で自分のツイートが表示されないときは「もう一度つぶやき直す」

この方法がよさそうです…。

【CakePHP3】Shellでデータを追加しようとしたらエラー発生!

CakePHP3でシェルを叩いて実験用のレコードを追加しようとしたら、以下のようなエラーが発生しました。

$ ./cake DataAdd
Warning Error: /var/www/hogegege/tmp/cache/persistent/ is not writable in [/var/www/hogegege/vendor/cakephp/cakephp/src/Cache/Engine/FileEngine.php, line 429]


どうも「tmp/cache/persistent/」以下に書き込みができないと怒っているようです。

「persistent」のディレクトリの権限を見ると以下のように「755」になっていました。

$ ll
total 8
drwxr-xr-x 2 apache apache 4096 Apr 10 20:10 persistent

これは「apache」は読み書き実行なんでもできるけども、それ以外のユーザーは書き込みができないことを意味しています。

たしかにこれじゃ書き込めないですね・・。なのでroot権限でシェルを叩いちゃいました。

$sudo ./cake DataAdd


これで無事に実験データを挿入することができました。よかったよかった。

Twitter BootstrapのツールチップでAリンクを無効にする!

ツイッター・ブートストラップに「Tooltip」という機能があります。

これを使うと、例えば「ヘルプ」みたいな文章にマウスをフォーカスすると、フワっと覆いかぶさるように説明文が表示される、とってもかっこいい効果ができます。

使い方は以下のような感じです。

★HTML
<a href="#" class="setumei" data-toggle="tooltip" data-placement="bottom" data-original-title="説明文だよ!">ヘルプ</a>

★Javascript
$(function(){
  $('.setumei').tooltip();
});

※Bootstrap公式サイト

Javascript · Bootstrap

ここでちょっとやっかいなのが「a href="#"」の箇所です。こう書くと文章をクリックしたときに画面がトップに遷移してしまって、ちょっとうざいんですよね・・。
なので以下のようにして、クリックしたときに画面の移動を中止してしまいましょう。

★Javascript
$(function(){
  $('.setumei').tooltip();
  $('.setumei').click(function(){
        return false;
  });
});

これで画面が移動しなくなって、だいぶ使い勝手が良くなりました・・。