2014年12月31日水曜日

年末

今年もあと3時間で終わりです。

1日1記事のブログが何故か今年は 367 件ありました。
来年も技術的な内容で、身についた知識を毎日メモしていきたいと思います。
読みに来てくれたみなさんありがとうございます。

ざっと今年の記事タイトルを見なおして、
新しく身についた技術のうち大きめのものは以下の様な感じでしょうか。

  • PhoneGap でアプリ開発(広告・課金)
  • WordPress (カスタマイズ・移植手法)
  • OAuth
  • Google API (Feed, Chart)
  • メールサーバ周り
  • Chrome アプリ
特に PhoneGap と WordPress が大分触ったソフトです。

PhoneGap は課金や広告など細かくやるため、
結局 Android の Java, iOS の Objective-C も手探りで触っていた感じです。
急いで作るなら便利ですが、やっぱりネイティブ勉強したいなという印象。

WordPress は HTML の自動整形処理で結構悩んだのですが、
試行錯誤したおかげで大分いじれるようになりました。


来年は WordPress 含む Web 関連は引き続き触りつつ、
スマホの方にもうちょっと慣れていきたいなぁという感じです。

2014年12月30日火曜日

Angular JS: ゲーム風のチュートリアル

Chrome アプリでシングルページアプリを作る必要があり、
公式マニュアルで推奨されていた Angular JS を使おうと思った。

以前触った時よりにはなかったチュートリアルが追加されており、
これがすごくわかりやすい。

SHAPING UP WITH ANGULAR.JS
http://campus.codeschool.com/courses/shaping-up-with-angular-js/intro

動画を見る→コードを書く
を繰り返しながら進んでいくのだが、
課題をクリアするともらえるポイントを消費してヒントを得たりするなど、
ちょっとゲームっぽい感じで進めていくことができる。


どうやら code school という e-learning サイトの1コースっぽい。
多分ドットインストールに課題があるような感じだと思う。
https://www.codeschool.com

そのままウェブ上でコーディングして確認できるのがすごくいい。
そういえば Go 言語のチュートリアルもそのまま入力して実行できた。
https://tour.golang.org/welcome/1

2014年12月29日月曜日

Chrome アプリ:フレームなしウィンドウを作る

https://developer.chrome.com/apps/app_window#type-ContentBounds

ウィンドウを作成する際にフレームを付けるかどうかを指定できる。
デフォルトだとフレーム付きのウィンドウが作成される。

ウィンドウ作成時に frame: "none" を渡すとフレーム無しで作成できる。
chrome.app.window.create('test.html', {
    bounds: {
        width: 640,
        height: 480
    },
    frame: 'none'
});


2014年12月28日日曜日

Chrome アプリ:文字化けが発生する

Chrome アプリで HTML, CSS, JavaScript を使用するパッケージアプリの場合、
HTML 内で文字コードを指定しておかないと環境によっては文字化けが発生する模様。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        ......
    </body>
</html>


2014年12月27日土曜日

Evernote: デフォルトのノートブックを変更する

Mac の場合、メニューから Evernote > 環境設定 > 全般 > 「初期設定では新規ノートは以下のノートブックに保存されます」
で新規作成したノートのデフォルトのノートブックを指定できる。

例えば日記を毎日付ける場合などは、
日記ノートブックに設定しておくと便利。


2014年12月26日金曜日

Chrome アプリ:使用する API 、アクセスする外部リソースの宣言

Chrome アプリから外部サーバへアクセスしたり、
準備された API を使用する場合は必ずマニフェストファイル上で宣言しなければならない。

https://developer.chrome.com/apps/app_external

"permissions": [
    "...",
    "https://supersweetdomainbutnotcspfriendly.com/"
  ]

2014年12月25日木曜日

Chrome アプリ: データのセーブ・ロード

Chrome アプリは storage API を使ってデータの保存・取得ができる。

まず、manifest.json で storage API を使うことを宣言。
{
    "name": "my_app",
    ...
    "permissions": [
        "storage"
    ]
}

起動している Chrome だけに保存する場合(他の Chrome 上で復元しない場合)は、
storage.local.set() で保存、 storage.local.get() で取得。
// 保存
chrome.storage.local.set({'data_key': 'data_value'});

// 取得
var value = '';
chrome.storage.local.get('value', function(item) {
    value = item.value;
});


2014年12月24日水曜日

Chrome アプリ: ウィンドウを開く・閉じる

Chrome アプリでは Web ブラウザとは独立したウィンドウを開くことができる。
通常のアプリケーションと同様に個別のウィンドウを持つ。

chrome.app.window API を使用する。
https://developer.chrome.com/apps/app_window
// 作成
chrome.app.window.create('my_file.html', {
    bounds: {
        width: 640,
        height: 480
    }
});

// 開いているウィンドウを閉じる
chrome.app.window.current().close();

2014年12月23日火曜日

PHP: 簡単に使えるパスワードハッシュ化&認証処理

PHP 5.5 以降ではパスワードのハッシュ化及び、生パスワードとハッシュの比較が簡単に行える関数が準備されている。

ハッシュ作成:password_hash()
http://php.net/manual/ja/function.password-hash.php
$hash = password_hash('raw_password', PASSWORD_DEFAULT);

生パスワードとハッシュ化アルゴリズムを渡すとハッシュを生成してくれる。
ソルトは自動生成されハッシュ内に含まれるため、別途保存しておく必要はない。


生パスワードとハッシュの比較:password_verify()
http://php.net/manual/ja/function.password-verify.php
if(password_verify($raw_password, $hash)) {
    echo '認証成功';
} else {
    echo '認証失敗';
}

生パスワードとハッシュを渡すだけで検証してくれる。
password_hash() で作られたハッシュにはアルゴリズムとソルトの情報が含まれるため、
別途ソルトやアルゴリズムの指定が不要。

2014年12月22日月曜日

WordPress: 既存サイトの WordPress 化で改行が入ってしまう

既存サイトのソースコードを WordPress のエディタの「テキスト」モードで貼り付けていけば大丈夫・・・と思いきや、改行や <p> タグ周りでうまく行きません。

WordPress では HTML の自動整形機能があり、
「テキスト」モードで改行があると <br> を挿入したり、
先頭のスペースを削除したり、<p> タグを付加したりします。
(ページ表示時にこれらの整形を行います)

自動整形を無効化することもできるのですが、
無効化すると、今度は「ビジュアルモード」でページを作成した時に、
意図的に入れた改行まで無視してしまい、これはこれでダメです。

数日悩み続けたのですが、以下のプラグインがベストでした。
自動整形を無効化できる上に、「ビジュアルモード」での意図的な改行は反映冴えてくれるという便利なプラグインです。

PS Disabled Auto Formatting
http://www.web-strategy.jp/wp_plugin/ps_disable_auto_formatting/#lang_jp

今後、既存サイトの WordPress 化を行う場合は外せないです。

2014年12月21日日曜日

Mac: wget コマンドを使う

MacPorts からインストールすると wget コマンドを mac で使用できるようになる。
$ sudo port install wget
...

$ wget http://example.com/target.html


2014年12月20日土曜日

WordPress: Custom Post Type Permalinks で 404 ページが表示される場合

カスタム投稿タイプの月別アーカイブを、
プラグイン Custom Post Type Permalinks で表示したところ、
クリック時に 404 ページが表示されてしまう問題が起きた。

functions.php 内の init アクションフックで、
flush_rewrite_rules() を記述したところ 404 ではなく、
カテゴリごとのアーカイブが表示されるようになった。

<?php

add_action('init', 'init_action');
function init_action() {

    // カスタム投稿タイプの追加など
    register_post_type( ...
    ...

    // リライトルールを更新すると月別アーカイブが表示されるようになる
    flush_rewrite_rules();
}

2014年12月19日金曜日

Google: 検索結果から自分のサイトを外してもらう

Google Web Master ツールで管理しているサイトであれば、
インデックスから削除してもらうことができる。

Google Web Master を開いて、
左側メニューから Google インデックス > URL の削除を選択。
しばらくするとインデックスから削除される。



意図せずインデックスされた場合などに使用可能。

2014年12月18日木曜日

Chrome アプリ: サンプルアプリの作り方

公式のサンプル作成方法
https://developer.chrome.com/apps/manifest

まず、Chrome アプリ用のフォルダを作成する。

フォルダの中にアプリの設定ファイル manifest.json を作成する。
{
  "name": "Hello World!",
  "description": "My first Chrome App.",
  "version": "0.1",
  "manifest_version": 2,
  "app": {
    "background": {
      "scripts": ["background.js"]
    }
  },
  "icons": { "16": "calculator-16.png", "128": "calculator-128.png" }
}

アプリの制御スクリプト background.js をフォルダ内に作成。
アプリ起動時にウィンドウを開くようにする。
chrome.app.runtime.onLaunched.addListener(function() {
  chrome.app.window.create('window.html', {
    'bounds': {
      'width': 400,
      'height': 500
    }
  });
});

開かれるウィンドウの HTML を window.html としてフォルダ内に作成。
<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div>Hello, world!</div>
  </body>
</html>


アイコン画像を以下からダウンロードしてフォルダ内に設置。

Chrome を起動して URL に chrome://flags を入力して Enter。
「試験運用版の拡張機能 API」を有効にして、Chrome を再起動。
これで開発中のアプリを Chrome 上で実行できるようになる。


Chrome 右上のメニューボタンから、
その他のツール > 拡張機能

デベロッパーモードにチェックを入れて、
「パッケージ化されていない拡張機能を読み込む...」ボタンを押して、
作成していたアプリフォルダを選択。



するとサンプルアプリ「Hello World!」がインストールされる。
そのまま起動すると Hello World! と表示されるウィンドウが出現する。
以上で、サンプルアプリの作成は完了。



ちなみに新しいタブを開いた画面で、
左上のアプリアイコンをクリックしてアプリ一覧を表示し、
その中から起動することも可能。


2014年12月17日水曜日

Mac: Retina ディスプレイで撮ったスクリーンショットが大きすぎる

普通の解像度の PC へ渡すときには大きすぎるので縮小したほうが良い。

スクリーンショット撮影後、
画像をプレビューで開く。

右上のツールボックスボタンをクリックして、
サイズ変更アイコンをクリック。



単位をパーセントにして、
60% くらいにすると丁度よい大きさになる。


2014年12月16日火曜日

Linux: 複数階層のディレクトリをまとめて作成

mkdir はデフォルトだと1階層ずつしかディレクトリを作れないが、
-p オプションを使用すると複数階層一気に作れる。

my_dir
└sub_dir
$ mkdir -p my_dir/sub_dir/

同じ階層に複数ディレクトリを作る場合は {} で囲むと展開される。

my_dir
├sub_dir1
├sub_dir2
└sub_dir3
$ mkdir -p my_dir/{sub_dir1,sub_dir2,sub_dir3}

2014年12月15日月曜日

WordPress: 最新記事の取得

サイドバーなどへ最新記事を出す時に便利。
$posts = get_recent_posts();
foreach($posts as $post) {
    echo '
<li><a href="https://www.blogger.com/'%20.%20get_permalink($post['ID'])%20.%20'">' . $post['post_title'] . '</a></l>
';
}

get_posts() だと WP_Post クラスが取れるけど、get_recent_posts() だと配列が取れる。

2014年12月14日日曜日

Mac メール:〜の識別情報を確認できません

サーバが第3者から発行された有効な証明書を使用していない場合に表示される。
例えば自己証明書を使用している場合など。

自前で準備したサーバであればそのままでも問題ないが、
他者のサーバの場合はなりすましの可能性あり。
相手がわからない場合は接続しないほうが良い。

2014年12月13日土曜日

info@ で始まるメールアドレスにメールが届かない

root にエイリアスが貼ってあり、 root に飛ばされている。
エイリアスを外すと info で受信できるようになる。
$ sudo vim /etc/aliases
info:        postmaster
↓
#info:        postmaster


2014年12月12日金曜日

Windows: Telnet コマンドを使えるようにする

Windows では telnet コマンドはデフォルトで使用できないが、
設定すると使用できるようになる。

Windows 8.1 の場合、
「Windows の機能の有効化または無効化」から、
「Telnet クライアント」にチェックを入れると、
コマンドプロンプトから telnet コマンドが使用できるようになる。



2014年12月11日木曜日

dovecot:Windows Live メールからログインできない

IMAP/POP サーバの dovecot で Windows Live Mail だけからログイン出来ない現象が発生した。

IMAP で STARTTLS を使用して認証データの暗号化をしていたのだが、
Live Mail からのみ弾かれてしまった。

disabled_plaintext_auth = no

一時的にプレーンテキストでの認証を許可することで通すことができた。
改めて Windows Live メール + 暗号化認証の動作確認が必要。

2014年12月10日水曜日

Cyberduck: ダブルクリックでエディタを開く

Cyberduck はデフォルトでダブルクリックしたファイルをダウンロードする。
設定すると代わりにエディタでファイルを開くことができる。

メニューから Cyberduck > 環境設定 > ブラウザ > ダブルクリックしたファイルを外部エディタで開く

こちらの方が Finder と同じ感じで操作しやすい。


2014年12月9日火曜日

WordPress: スラッグに数字がついてしまう

スラッグが他の投稿と被っていると番号が自動的に付けられる。

スラッグ-1
スラッグ-2
スラッグ-3
・・・

これはゴミ箱に入っている投稿も対象になる。
もし、同じスラッグが見当たらない時はゴミ箱の中の投稿とかぶっていないかチェックして、いらない投稿を削除すること。

2014年12月8日月曜日

Google スプレッドシートで使える関数

Google スプレッドシートの関数リスト
https://support.google.com/docs/table/25273?hl=ja

正規表現を使った置換や数学関数などいろいろ揃っています。
みんなで共有して作業するなら Excel より断然便利ですね。

2014年12月7日日曜日

WordPress: 条件に一致するすべての投稿を取り出す

get_posts() 関数のオプションに
nopaging = 1 を指定するとページ分けを無効化して全データを1度で取得できる。

$posts = get_posts(array(
    'post_type' => 'my_post_type',
    'nopaging' => 1
));

2014年12月6日土曜日

WordPress: 管理者メニューのアイコン

管理者メニューのアイコンは Dashicons が使われている。
https://developer.wordpress.org/resource/dashicons/#format-status

カスタム投稿タイプを定義する際にアイコンを指定すると、
メニュー項目のアイコンとして表示できる。

register_post_type('my_custom_posts', array(
 'description' => 'カスタム投稿',
 'public' => true,
 'menu_icon' => 'dashicons-format-aside',  // ここでアイコンを指定する 
));

2014年12月5日金曜日

さくらレンタルサーバ: PHP のバージョン変更

2014/12 月現在、さくらのレンタルサーバの PHP バージョンは 5.4 まで選択可能。

まずサーバのドメイン名とパスワードでコントロールパネルへログイン
https://secure.sakura.ad.jp/rscontrol/

左側のメニューから PHP のバージョン選択 → 新しいバージョン

2014年12月4日木曜日

WordPress: カスタム投稿タイプのカスタムタクソノミーを更新する

固定ページや投稿などデフォルト投稿タイプのタクソノミーの値を更新する場合は
wp_set_post_terms() を使用する。

この関数はユーザが定義したカスタム投稿タイプには使用できないので要注意。
(空の配列を戻り値として返して、処理は失敗する)

カスタム投稿タイプのタクソノミーを更新したい場合は、
wp_set_object_terms() を代わりに使うこと。

2014年12月3日水曜日

WordPress: 指定した投稿タイプの投稿一覧を取得

get_posts() で可能。
$posts = get_posts(array(
    'post_type' => 'my_post_type'
));


関数リファレンス
get_posts()
http://wpdocs.sourceforge.jp/テンプレートタグ/get_posts

2014年12月2日火曜日

Illustrator : 複数のレイヤーの表示/非表示を一括で切り替える

レイヤーパネルで目のアイコン部分を Shift を押しながらドラッグすると、
一気に表示・非表示の切り替えができる。


2014年12月1日月曜日

Chrome App: 開発ドキュメント

Chrome アプリや拡張機能を作成する際に参照するドキュメントはこちら
https://developer.chrome.com/home

Chrome アプリなら PLATFORM -> Apps
Chrome 拡張機能なら PLATFORMS -> Extensions

から開発方法が確認できる。

2014年11月30日日曜日

WordPress: 親を持たないタームだけを取り出す

階層構造を持つタクソノミーで親を持たないタームを取り出す方法。
トップレベルだけが取得できる。
$top_level_terms = get_terms('my_taxonomy', array(
    'parent' => 0
));

2014年11月29日土曜日

WordPress: エラー判定

WordPress の関数はエラー発生時に WP_Error クラスのデータを返す。
http://wpdocs.sourceforge.jp/クラスリファレンス/WP_Error

これは is_wp_error() 関数で判定できる。
http://wpdocs.sourceforge.jp/関数リファレンス/is_wp_error

2014年11月28日金曜日

WordPress: wp_editor() の高さ

wp_editor() の第3引数のオプションとして editor_height を指定すると、
WYSIWYG エディタの高さを調節できる。

wp_editor('', 'editor', array('editor_height'=>100));

wp_editor | WordPress Codex
http://codex.wordpress.org/Function_Reference/wp_editor

2014年11月27日木曜日

WordPress: 現在表示しているページのタクソノミーを取得

WordPress ループ内で wp_get_post_terms() で取得できる。
結果は配列で返される。
// カスタムタクソノミー 'taxonomy_type' にセットされた値(ターム)を取得
$term = wp_get_post_terms($post->ID, 'taxonomy_type')[0]->name;

2014年11月26日水曜日

JSON の文字列にシングルクォートが使えない

JavaScript のオブジェクトではシングルクォートでもよいが、
JSON ではダブルクォートのみ使用できる。
{
    "key1": "value1",  // これは OK
    'key2': 'value2'   // これは NG
}

2014年11月25日火曜日

PHP: short_open_tag と が衝突する場合

<?xml ~ ?> を echo すればよい。

echo '<?xml version="1.0" encoding="utf8"?>';

php.ini の設定を変える場合は short_open_tag を On にする。
ただし php.ini の設定を変える場合は他のスクリプトに影響が出る可能性があるので要注意。

2014年11月24日月曜日

WordPress: 特定の固定ページだけテンプレートを変える

固定ページのテンプレートは、通常 page.php (なければ index.php)が使われる。

特定の固定ページだけ専用のテンプレートを使う場合はスラッグを使うのが簡単。

まず、固定ページ作成画面の右上「表示オプション」から、
「スラッグ」にチェックを入れる。


最下部にスラッグ入力欄が表示されるので、
半角英数字でわかり易い名前を入力する。


テンプレートディレクトリに page-[スラッグ名].php を作成すると、
それを page.php の代わりに使用してくれる。

2014年11月23日日曜日

WordPress: パーマリンク設定で 404 エラーが出る場合

.htaccess が有効になっていない可能性が高い。
apache の設定ファイル(httpd.conf) で対象ディレクトリが

AllowOverride All

になっていることを確認する。

2014年11月22日土曜日

WordPress: 困ったら読むドキュメント

WordPress では Codex という、Wiki 形式のドキュメントが存在する。
http://codex.wordpress.org

ほとんどの言語は公式サイト内に設置されているが、
日本語版は別途こちらで作成されている。
http://wpdocs.sourceforge.jp

基礎的な内容からカバーされているので最初はこちらから読んでいくのが良い。

2014年11月21日金曜日

WordPress: style.css のコメント(ヘッダー)

テーマフォルダに入れる style.css の先頭にテーマの説明を書く。

Theme: テーマ名
Theme URI: テーマのURL
Description: テーマの説明
Author: 作者名
Version: テーマのバージョン
License: テーマのライセンス
License URI: ライセンス本文へのリンク
Tags: テーマ検索で参照されるタグ

テーマで使用できる項目は以下のとおり。
  • Author (テーマ)
  • Author URI (テーマ)
  • Description (テーマ)
  • Status (テーマ)
  • Tags (テーマ)
  • Template (テーマ)
  • Theme Name (テーマ)
  • Theme URI (テーマ)
  • Version (テーマ)

詳細はこちら
http://wpdocs.sourceforge.jp/File_Header

2014年11月20日木曜日

PHP: コロン( : )を使った制御文の書き方

PHP では if, while, for, foreach で {} の代わりに : を使った書き方がある。

http://php.net/manual/ja/control-structures.alternative-syntax.php

// if 文の書き方2通り
if(true) {
    echo 'yes';
}

if(true) :
    echo 'yes';
endif;

// while 文の書き方2通り
$i = 0;
while($i++ < 5) {
    echo $i;
}

$i = 0;
while($i++ < 5) :
    echo $i;
endwhile;


// for 文の書き方2通り
for($i = 0; $i < 5; $i++) {
    echo $i;
}

for($i = 0; $i < 5; $i++) :
    echo $i;
endfor;

// foreach 文の書き方2通り
$numbers = array(1, 2, 3, 4, 5);
foreach($numbers as $number) {
    echo $i;
}

$numbers = array(1, 2, 3, 4, 5);
foreach($numbers as $number) {
    echo $number;
}

// switch 文の書き方2通り
$i = 2;
switch($i) {
    case 1:
        echo '1';
        break;
    case 2:
        echo '2';
        break;
    case 3:
        echo '3';
        break;
}

$i = 2;
switch($i) :
    case 1:
        echo '1';
        break;
    case 2:
        echo '2';
        break;
    case 3:
        echo '3';
        break;
endswitch;
それぞれ { が : へ
} が endif; endwhile; などへ変わる。
動作は全く同じ。

2014年11月19日水曜日

Apple Watch 向けの開発キットが配布

https://developer.apple.com/watchkit/
Apple Watch 向けのアプリデザインガイドと、
開発キットが含まれた Xcode 6.2 のベータ版が配布開始。

ユーザインタフェースのガイドラインなども出ている。 https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/WatchHumanInterfaceGuidelines/index.html

2014年11月18日火曜日

PHP: crypt() で SHA-256 を使う

PHP でユーザのパスワードをハッシュ化して保存する場合は、
password_hash() が推奨されているが、
PHP 5.5 以上でなければ使用できない。

PHP 5.4 以下では crypt() を使用できる。
crypt() ではハッシュ関数として MD5 や SHA-256 などいくつか使用できる。
SHA-256 以上が現在推奨されているようなので、SHA-256 を使用する。

crypt() ではソルトの先頭のパターンによってハッシュ関数が決まる。
SHA-256 でソルトの先頭を "$5$" にすればよい。


2014年11月17日月曜日

PDO: 接続するDBの指定

PDO では DSN(Data Source Name) で接続先の DB を指定する。
http://php.net/manual/ja/pdo.construct.php

MySQL の場合の DSN は
mysql:ホスト名;ポート;DB名;文字コード

のようになる。
詳細はこちら
http://php.net/manual/ja/ref.pdo-mysql.connection.php


その他、対応しているDBはこちら
http://php.net/manual/ja/pdo.drivers.php

2014年11月16日日曜日

JavaScript: 小数点の計算の誤差対策

JavaScript では少数の計算時に丸め誤差が発生する。
例えば
var result = 4.225 * 100;
console.log(result); // 422.49999999999994

自動見積もりなど計算ツールを作成する際には注意が必要。
上記の場合は Number.toFixed() で一旦文字列に変更すると誤差を回避できる。
var result = (4.225 * 100).toFixed(1);
console.log(result); // 422.5

少数の計算箇所に toFixed() を挟むようにする。

2014年11月15日土曜日

PDO: テーブルから 1 つのカラムを配列で取得

fetchAll() に PDO::FETCH_COLUMN を渡すと、
1つのカラムを配列にして返してくれる。

function get_names() {
    $pdo = new PDO($dsn, $config['dbuser'], $config['dbpass']);
    $sth = $pdo->preapre('SELECT `name` FROM `my_table`');
    if(!$sth->execute()) {
        return false;
    }
    return $sth->fetchAll(PDO::FETCH_COLUMN);
}

get_names(); // ['tanaka', 'satou', 'suzuki', ...]

2014年11月14日金曜日

チャットワーク:不要なファイルの削除

チャットワークは無料会員の場合、デフォルトで 10 GB までファイルをアップロードできる。
アップロードしたファイルは、画面右上の「ファイル管理」ボタンで確認・削除可能。


2014年11月13日木曜日

MacPorts: php56 + apache2.2 で PHP が動作しない場合

まず php56 の他に、 php56-apache2handler が必要。
これを入れると apache2/modules に PHP のモジュールが作成される。
$ sudo port install php56-apache2handler

その後、インストールログにしたがって以下を実行する。
$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n php5 mod_php56.so

Apache を再起動して .php ファイルが動作するか確認。
$ sudo apachectl restart

これでも実行されない場合は、httpd.conf に以下を追加すれば動くはず。
AddType application/x-httpd-php .php

2014年11月12日水曜日

Bootstrap: 枠付のテーブル

通常のテーブル
<table class="table">
    <tr>
        <td>りんご</td>
        <td>¥100</td>
    </tr>
    <tr>
        <td>みかん</td>
        <td>¥200</td>
    </tr>
</table>


枠付のテーブル
<table class="table">
    <tr>
        <td>りんご</td>
        <td>¥100</td>
    </tr>
    <tr>
        <td>みかん</td>
        <td>¥200</td>
    </tr>
</table>

2014年11月11日火曜日

iPhone + Mac の Wifi デザリング

手持ちの iPhone を 4G 回線などに接続した状態で、
Mac の右上メニューの Wifi をクリック。
自分の iPhone が表示されるので、選択。

接続後、自動的にパスワードが設定されて通信できるようになる。


2014年11月10日月曜日

Mac: BNicoAlert にログイン出来ない場合

アプリケーションから「キーチェーンアクセス」を起動
ログイン、iCloud で nicovideo で検索すると secure.nicovideo.jp が引っかかる

ダブルクリックして、パスワードを表示をON。
ここへ古いパスワードが入力されいる場合はログイン出来ない。
新しいパスワードを入力して「変更内容を保存」をクリック。

すべての secure.nicovideo.jp のパスワードを変更するとログイン出来るようになる。

2014年11月9日日曜日

Blogger の jp ドメインが表示されなくなった

ここ2日間ほどこのブログが表示されていませんでした。
サーバの障害が発生していた模様です。


2014年11月8日土曜日

SQL: テーブル内の最初・最後の日付取得

レコード(行)内に日付が含まれるテーブルから、
最初の日付と最後の日付を取得するサンプル。

my_table の date_column が Date 型の場合

SELECT MIN(`date_column`) AS first_date MAX(`date_column`) AS last_date FROM `my_table`'

2014年11月7日金曜日

PHP: PDO ではカラム名に変数をバインドできない

PHP の PDO では bindParam() や bindValue() で、
SQL に安全に値を埋め込むことができる。

しかし ORDER BY や GROUP BY などで、
上記の関数のようにカラム名を変数で指定するための関数は準備されていない。

カラム名を変数からセットしたい場合は、
以下の様な感じで、許可するカラム名リストを作っておき、
その中のいずれかであれば直接埋め込むという形式がよさそう。
http://stackoverflow.com/questions/2542410/how-do-i-set-order-by-params-using-prepared-pdo-statement

値チェックせずに直接埋め込まないように注意。

2014年11月6日木曜日

MacPorts: PHP5.6 をデフォルトの PHP として使う

PHP5.6 をインストール
$ sudo port install php56

デフォルトのバージョンを 5.6 にする
$ sudo port select php php56

バージョンが変わったことを確認
$ php -v
PHP 5.6.2 (cli) (built: Nov  7 2014 02:29:59) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

2014年11月5日水曜日

Xcode: 余計なインデントがされる

メニュー > Preferences > Text Editing > Indentation タブ

で下の方にある Automatic indent for: のチェックをすべて外す
とりあえず余計なインデントはされなくなる。

その状態で必要なものだけチェックを入れればOK。


2014年11月4日火曜日

phpMyAdmin: #2002 MySQLサーバにログインできません

MacPorts でインストールした phpMyAdmin がタイトルのエラーを出力してログインできなかった。

原因は MySQL の skip-networking が ON になっていたこと。
$ sudo vim /opt/local/share/mysql56/support-files/macports/my.cnf

skip-networking の行を削除して MySQL を再起動するとログインできるようになった。

$ sudo /opt/local/share/mysql56/support-files/mysql.server restart

2014年11月3日月曜日

iPhone6: 2本目の指紋を登録

設定 → Touch ID とパスコード → 指紋を追加
で2本目以降の指紋も登録しておける。

両手の親指&人差し指を登録しておけば足りそう。

参考

2014年11月2日日曜日

Mac:デフォルトで入っている読み上げ音声

システム環境設定 → 音声入力と読み上げ → テキスト読み上げ → システムの声 → カスタマイズ




英語(アメリカ合衆国) ー その他
に登録されている声は面白いものが多い。



Good News  は選択した英語をリズムに合わせて読み上げる、
Bubbles は水の中でしゃべっているような声、
他にもいろいろ。

チェックを入れて OK ボタンを押すと、
システムの声で選択できるようになる。

「キーを押したときに選択しているテキストを読み上げる」にチェックを入れた状態で、
英文を選択後、 alt + Esc で読み上げてくれる。

2014年11月1日土曜日

Yosemite: Safari の辞書から Wikipedia を削除

Magic Trackpad を使っている場合は、
3本指タップで単語の意味を調べることができる。
(日本語、英語問わず)

デフォルトだと英単語を調べた時に、
英語版の Wikipedia の内容も表示される。



Wikipedia の方は使わないのでオフにしてみる。

アプリケーションから「辞書」を起動。


メニューから環境設定を開く。
Wikipedia のチェックを外すと、Wikiepdia が表示されなくなる。




2014年10月31日金曜日

さくらのレンタルサーバでプランを変更するには?

さくらのレンタルサーバにはプラン変更の機能がありません。
独自ドメインを使っている場合には、
既存サーバからドメインを削除、新サーバにドメインを追加という操作が必要になるため、
必ず一時的にドメインの利用を停止しなければなりません。

プラン変更するための手順は以下のようになります。

1.新規プランで新サーバを契約
2.旧サーバから新サーバへファイルやDBなどをコピー
3.旧サーバからドメインを削除
4.新サーバへドメインを追加

ドメインの削除・追加にはそれぞれ待機時間が必要です。
詳細はこちら。

プラン変更(移行)の手順
http://support.sakura.ad.jp/manual/rs/others/plan_change.html

2014年10月30日木曜日

Mac Ports で正規表現を使って検索する

以下のコマンドで正規表現が使えます。
$ port search --regex [正規表現]

Mac Ports でパッケージ名を検索すると余計なものが多くヒットします。
パッケージ名で始まるものを探せば本体が出てきやすいです。
例えば mysql を探す場合は、
$ port search --regex ^mysql

という感じになります。

2014年10月29日水曜日

Yosemite: メモが2つずつ表示される

Mavericks → Yosemite にアップグレードして、
iCloud の動機をしてから、メモに同じファイルが2個ずつ作成されるようになりました。

同じ iCloud アカウントが2つ存在している状態です。

1.
メモを終了した状態で、
システム環境設定 → iCloud でメモの同期を切る。

2.
メモを起動

3.
アカウント → iCloud を削除

4.
アカウントをもう1度追加

5.
メモを再起動

と操作したところ iCloud が1つだけになりました。
同期を再度やり直したりするとうまく解消できるようです。


2014年10月28日火曜日

Xcode 6 で行番号を表示

メニューの
Xcode → Preferences → Text Editing → Line numbers
にチェックを入れると行番号が表示されます。



Xcode 5 → 6 へアップデートした際に設定がリセットされて行番号が表示されなくなりました。

2014年10月27日月曜日

iMac Retina でスクリーンショットを共有するときの注意

iMac の Retina ディスプレイ版でスクリーンショットを取ると、
見た目のイメージ以上に解像度が高くなるため、
そのまま共有すると相手の画面で巨大な画像として表示される場合があります。
ある程度、縮小してから渡したほうが良さそうです。

2014年10月26日日曜日

iCloud で Safari のブックマークを共有する

Mac のシステム環境設定から
iCloud → Safari にチェックを入れるとブックマークを iCloud 経由で同期できる。
Mac の乗り換えやスマホ・タブレットの使用時には便利。


2014年10月25日土曜日

Yosemite: スリープ復帰時にパスワードを要求させない

システム環境設定 → セキュリティとプライバシー → 一般
 → スリープとスクリーンセーバの解除にパスワードを要求
を OFF にすれば OK。



Yosemite では指定された時間スリープしていると、
復帰時にパスワードを入力されることができ、
デフォルトで 5 分となっています。

2014年10月24日金曜日

MacPorts は Yosemite 対応済み

新しい iMac に乗り換えるため環境構築を進めています。
PHP や Apache などは MacPorts でインストールするのが早いです。

https://www.macports.org
正式に Yosemite 対応済みのようです。

2014年10月23日木曜日

Windows によって PC が保護されました

Windows 8.1 でソフトをインストールしようとしたところ、
以下のメッセージが表示された。


この場合は、画面左側の詳細をクリックして、表示後、
実行ボタンを押せばインストールできる。


2014年10月22日水曜日

W3C: リンク調査ツール

サイトのアドレスを入力すると、リンク切れしている URL が無いかチェックしてくれます。

無料で使用できて、再帰的にリンクを辿って検査することも可能です。
Perl があればチェックツールをダウンロードして、
ローカルでチェックツールを動作させることもできます。

2014年10月21日火曜日

Mac: Yosemite の Safari で URL を全て表示する

Yosemite でデフォルトの Safari 8.0 では、
これまで URL が表示されていた部分にホスト名だけしか表示されません。

これまで通り完全な URL を表示する場合は、
Safari → 環境設定 → 詳細 → Web サイトの完全なアドレスを表示
で表示可能です。


2014年10月20日月曜日

Mac: Skype の自動起動を切る

Skype の設定画面からは設定できず、Dock で設定する。
Dock の Skype を control + クリックで、
オプション→ログイン時に開く
をオフにすれば自動起動しなくなる。

2014年10月19日日曜日

Mac: ダークモード

Yosemite で Dock とツールバーを暗くするダークモードがあるらしい。
設定 → 一般 → メニューバーと Dock を暗くする


ただ、メニューバーを黒くすると、
黒いアイコンが見えなくなってしまいました。
Mac デフォルトのアイコンはモードによって白黒変わるので、
まだ対応されていないようです。




今のところはノーマルモードで使うのが良いかと思います。

2014年10月18日土曜日

Mac: Shades のアンインストール

Mac のディスプレイ輝度を最低まで下げても眩しいことがあり、
Shades を使って更に輝度を下げていました。

Yosemite にアップデートしたところ、
デフォルトの輝度が以前よりも低くなっていたため、
Shades なしでも問題なさそうです。

Shades をアンインストールする場合は、
環境設定パネルから Shades を control + クリックで、
"Shades"環境パネルを削除」を選択すればOKです。


2014年10月17日金曜日

Mac OS X Yosemite

Mac OS X Yosemite がリリースされたので更新してみました。
ドックのアイコンやフォントなどかなり見た目がフラットになってますね。

Mavericks にアップデートした時よりも、大分変わった印象です。
しばらく使用してみて、変わった操作方法など見つけたらまとめてみます。

iMac の Retina 化しましたね。
現在使っているのが 2011 の iMac なので乗り換えようと思います。

2014年10月16日木曜日

Apple 新商品発表会まで残り2時間

10/17(金) 02:00 から Apple の新製品発表会です。
iPad の新型は既に確定のようですが、個人的には iMac の Retina 対応が気になります。
タスクを片付けつつ視聴します。

2014年10月15日水曜日

jQuery.animate() で background-size が動かない

jQuery.animate() では background-size などに2つの数値を渡すう場合、アニメーションが動かないらしい。
仕方なく、jQuery での実装は諦めて CSS transition の scale で代用した。

css transition of background-size in IE 10 | stackoverflow
http://stackoverflow.com/questions/16892500/css-transition-of-background-size-in-ie-10

2014年10月14日火曜日

phpMyAdmin: データベースの複製を作成する

コピー元のデータベースの「操作」→ Copy database to: で、
コピー先のデータベース名を入力する。

データも一緒にコピーするかどうかを選択して、
「実行」を押すとデータベースが複製できる。


2014年10月13日月曜日

Windows 8.1: IP アドレス固定でインタフェースの切り替え

ポート開放のためなど IP アドレスを固定で使う場合に、
無線LANと有線LANのインタフェースに同じ固定 IP アドレスを割り振ろうとするとエラーが出ます。

片方のインタフェースを無効にするだけではなく、
プロパティの IPv4 のチェックボックスを無効にすると、
同じ IP を設定していてもエラーが出なくなります。


2014年10月12日日曜日

iOS アプリのレビュー先URL


itms-apps://itunes.apple.com/app/id******

「アプリのレビューはこちらから!」のリンクで使用する。
iTunes Store でアプリを登録するとIDが発行されるので、
URL の末尾に付けて使用。

2014年10月10日金曜日

Google Feed API で ameblo の最新記事を取得

Google Feed API で ameblo の最新記事を取得するサンプル。
jQuery も使用。
$(function() {
    var FEED_URL = 'http://rssblog.ameba.jp/my-blog/rss20.xml';
 
    var feed = new google.feeds.Feed(FEED_URL);
    feed.setNumEntries(30);
    feed.load(function(result) {
        if(!result.error) {
            result.feed.entries.forEach(function(entry) {
                if(!/^PR:/.test(entry.title)) {
                    console.log(entry);
                }
            });
        }
    });
});

2014年10月9日木曜日

Adobe CS から Creative Cloud への移行キャンペーン中

Adobe CS 3 以上の購入者向けのキャンペーンで、
Adove Creative Cloud コンプリートプランが月額 3,000 円で
1年間使用できるようです。
https://creative.adobe.com/ja/plans?store_code=jp

通常だと 5,000 円程度なので、
CS から乗り換える場合は今が良いかもしれません。

2014年10月8日水曜日

Android で Google アカウントにログイン出来ない場合



Android 端末から Google アカウントにログインする際に、
正しい ID / パスワードでも弾かれてしまう場合、
別のパスワードが設定されている可能性が高いです。

アプリパスワードでログイン | Google
https://support.google.com/accounts/answer/185833?topic=1056283&hl=ja

2段認証プロセスの機能で、
各アプリケーションごとに異なるログインパスワードを発行することができます。

古い Android スマートフォンだと、
こちらの機能で発行された専用のパスワードが登録されている可能性が高いです。

アプリケーション固有のパスワードを新しく発行して、
そのパスワードでログインすることで解決できます。


2014年10月7日火曜日

fancybox.js で $.browser エラー

fancybox を使用しているページで $.browser が使用できないエラーが出ていました。
jQuery のバージョンが 1.8 までしか対応していないことが原因のようでした。
jQuery 1.11 → 1.8 へ変更したところ解消出来ました。

参考
Fancybox doesn't work with jQuery v1.9.0 [ f.browser is undefined / Cannot read property 'msie' ] | stackoverflow
http://stackoverflow.com/questions/14344289/fancybox-doesnt-work-with-jquery-v1-9-0-f-browser-is-undefined-cannot-read

2014年10月6日月曜日

Android アプリ内課金の返金方法

アプリの販売者はユーザからのアプリ内課金を返金することができます。

まず販売者(管理者)のアカウントで Google Wallet Merchant Center へログイン。
https://wallet.google.com/merchant/

購入された課金一覧が表示されるので、右端の「表示」をクリック。

右上の「オーダーを払い戻す」をクリック。

払い戻す理由、購入者へのコメントを入力して「オーダーを払い戻す」をクリック。


デバッグ作業で誤って購入処理が動いてしまった場合や
購入キャンセルの依頼が来た場合などに使用できます。

2014年10月5日日曜日

さくらのクラウドの解約方法

詳細はこちらを参照してください。
サービスの解約|手続き|さくらインターネット公式サポートサイト
http://support.sakura.ad.jp/proc/cancel_service.html

丁度1年ほど前に、
とあるキャンペーンでさくらのクラウドのクーポン券をいただき、
それから現在まで無料でサーバを使用させて頂いておりました。

クーポンの残高が無くなったため、
クラウドは解約してさくらの VPS に移転する準備を進めております。

さくらのクラウドは、
さくらのレンタルサーバやVPSとアカウントが別に作成されるため
解約の手順が少し異なります。

まず、さくらのクラウドのコントロールパネルにログインして、
サーバやディスクなど全て削除します。

次に、ログアウトした状態で、
ログイン画面の右上にある「さくら会員としてログイン」をクリック。



さくらのアカウントを入力すると、
さくらのクラウドのアカウント一覧が出てくるので、
矢印ボタンをクリックしてから削除を選択します。





これで完全に解約できます。

2014年10月4日土曜日

SourceTree が壊れる

Mac OS X 10.9.5 で SourceTree 2.0.1 を使っているのですが、
稀にアプリケーションが破損して起動できなくなることがあります。

感覚的には再起動時に発生する印象です。
今のところ原因がわかっていないので、毎回再インストールしています。
ちょっと面倒です。


2014年10月3日金曜日

Eclipse で Android の Layout xml を追加する操作

環境: Mac OS X 10.9 + Eclipse IDE for Android Developers 23.0

プロジェクトを右クリックして、
New > Android XML File を選択すると、
res/ ディレクトリ内に xml ファイルが作成されます。

Project > Build All でビルドすると、
R.java にも自動的に参照が追加されてくれます。


2014年10月2日木曜日

<td> を丸ごと <a> でリンクにする

テーブルのセルを丸ごとリンクにする場合は少しコツが要ります。

そのまま囲むと動かない
<table style="width: 200px; height:200px;">
    <tr>
        <a href="http://yokano-jp.blogspot.jp/">
            <td>まるごとリンク</td>
        </a>
    </tr>
</table>

--
追記:2018/01/04
そもそも tr の下には、th または td しか置けないため、
上記のコードは HTML として誤りです。
参考:https://www.w3.org/TR/2017/REC-html52-20171214/tabular-data.html#the-tr-element
--

セル内を覆う <a> を <td> の直下に入れると動く
<table style="width: 200px; height:200px;">
    <tr>
        <td>
            <a style="width:100%; height:100%; display:block;" href="http://yokano-jp.blogspot.jp/">
                まるごとリンク
            </a>
        </td>
    </tr>
</table>

<a> に幅・高さを設定するため display:block; でブロック要素にしています。

ただし、セル内のコンテンツにリンクの色や下線が付くので、
text-decoration や color などで別途スタイルの修正が必要になります。


参考
テーブルのtd全体にリンクをかける | ホームページ作成の備忘録
http://ppaso.net/archives/430

2014年10月1日水曜日

Gmail で迷惑メールにならないようにする

Gmail で普通のメールが誤って迷惑メールに振り分けられている場合は、
対象のメールを右クリックして 「迷惑メールではない」を選択すると、
今後迷惑メールとしてご認識されなくなります。