【スポンサーリンク】

Error: EACCES: permission deniedが出てelectronのインストールがコケた

sudo付けてんのにpermission deniedって…

…と思いつついろいろ調べてみると、どうやら--allow-rootオプションをつければよいことが分かった。

sudo npm install -g electron --unsafe-perm=true --allow-root

無事インストール完了。

MySQLのオプティマイザに裏切られた話

とあるアプリの検索機能がかなり重く、調べてみたらオプティマイザに裏切られていた(知識が未熟だった)ときの話。

検索の対象テーブルはA,B,C,Dとカラムがあり、A, Bに複合ユニークキー、B, C, Dに複合インデックスを設定していた。

そのアプリの検索機能では、「B, C, Dに条件指定→絞込み検索」といったよくある機能で、当然B, C, Dの複合インデックスが働くことを期待していた。

しかし、あるとき検索が想像よりも遅いと思ったため、おもむろにEXPLAINを実行すると、なぜかA, Bの複合ユニークキーが使われていた。

結局のところUSE INDEXを用いて無事高速に動作するようになったのだが、「B, C, DがWHEREにあるんだから素直にB, C, Dの複合インデックスを使ってくれよ」と思ったわけである。

【WordPress】https化で「保護された通信」にするための注意点

ある日、WordPressで作ったサイトにラビッドSSLで証明書を購入し、マニュアル(自分の場合さくらインターネットなのでさくらのマニュアル)に沿って設定したが、httpsでアクセスしても「保護された通信」にはなってくれなかった。

どうやらアップロードした画像なんかのsrcもhttps化しないといけないみたい。考えてみればそれもそうか。

幸いさくらには専用のプラグインがあったので、それを使って一括変換。無事「保護された通信」に・・・ならない。と、思ったが、タイトルロゴやスライドショーといったテーマオプションなどから設定する特定の画像URLは自分で変えないといけないっぽい。それらの設定をおこない無事httpsに移行完了。

【PageSpeed Insights】.htaccessを修正するだけで大幅にサイトの速度を向上【圧縮を有効にする+ブラウザのキャッシュを活用】

.htaccessに下記を足すとPageSpeed Insightsのスコアが20ほど増えた。
これに加えてPageSpeed Insightsに指摘された画像を適切なサイズに落とせば、ほぼ確実に緑スコアになるんじゃなかろうか。
(もちろん重たいJavascriptが動いてたり、サーバのスペックが足りてない場合などはダメだが…)

<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
ExpiresByType text/html "access plus 1 seconds"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType text/css "access plus 1 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType application/x-javascript "access plus 7 days"
</ifModule>

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE font/opentype font/ttf font/eot font/otf
</IfModule>

ちなみに、これらはPageSpeed Insightsの「圧縮を有効にする」と「ブラウザのキャッシュを活用」の対策になっている。

参考文献
http://www.hirok-k.com/blog/2606.html
http://ittoybox.com/archives/253

【Unity 3D】クリック(タップ)先のゲームオブジェクトおよび座標の取得

Physics.Raycastでクリック先のオブジェクトと交点座標を取得できる。引数に必要なRayオブジェクトはメインカメラ一つの場合、
Camera.main.ScreenPointToRay(Input.mousePosition)
で取得できる。

なお、Physics.Raycastの返り値はbool値となっており、肝心のクリック先オブジェクトは参照渡しした変数に返すため、コードの見やすさを考慮すると用途に応じてラップしたほうが良いと思われる。

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
	void Update() {
		if(Input.GetKeyDown(KeyCode.Mouse0)) {
			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
			Debug.Log(HitGameObject(ray) == null ? null : HitGameObject(ray).name);
			Debug.Log(HitPoint(ray));
		}
	}

	//クリック先のオブジェクトを取得する関数
	GameObject HitGameObject (Ray ray) {
		RaycastHit hit;
		return Physics.Raycast(ray, out hit) ? hit.transform.gameObject : null;
	}

	//クリック先とオブジェクトの交点座標を取得する関数
	Vector3? HitPoint (Ray ray) {
		RaycastHit hit;
		return Physics.Raycast(ray, out hit) ? hit.point : (Vector3?)null;
	}

}
【スポンサーリンク】