カテゴリー : 2012年 3月

[MySQL] SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine

PHP(symfony1.4) + Apache2 + MySQL で動かしているWebサービスのデータ更新作業をしたら、下記のようなエラーが発生しました。

500 | Internal Server Error | Doctrine_Connection_Mysql_Exception
SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine

MySQL

続きを読む

[PostgreSQL] 他のPCから接続するための設定

PostgreSQL にて、他ホストから接続するための設定を調べたのでメモ。

postgresq.confファイルの修正

■ /usr/local/pgsql/data/postgresql.conf

#listen_addresses = 'localhost' # what IP interface(s) to listen on; 
                                # defaults to localhost, '*' = any

↓(変更)

listen_addresses = '*'

設定を変更後、PostgreSQLを再起動する。

/etc/rc.d/init.d/postgresql restart

接続できるクライアントを設定する

PostgreSQLの設定ファイルである pg_hba.conf にて、接続できるホストを制限しているので、これを変更します。

■ /usr/local/pgsql/data/pg_hba.conf

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust

■(例)全てのホストからの接続を許可する

全てのホストから、全てのデータベースへの接続を許可する場合、以下の記述を追加する。

host all all 0.0.0.0/0 trust

接続を制限する

pg_hba.confは1行で1レコードを構成しており、1行のフォーマットは以下のとおりである。

KIND DATABASE USER CIDR-ADDRESS METHOD

● KIND

「local」「host」「hostssl」「hostnossl」のいずれか。localはUNIXドメインソケット経由の接続、hostはTCP/IP経由の接続、hostsslはSSL経由の接続、hostnosslはSSLを使用しない接続を意味する。

● DATABASE
接続を許可したいデータベース名を指定。「all」とすると全てのデータベースを意味する。複数のデータベース名を指定したい場合は、カンマで区切る。

● USER
接続を許可するユーザ名を指定。「all」とすると全てのユーザを意味する。ユーザ名の前に「+」を付けるとグループ名を指定したことになる。複数のユーザ名を指定したい場合は、カンマで区切る。

● CIDR-ADDRESS
KINDがlocal以外のときに指定する。接続を許可するクライアントのIPアドレスやネットワークアドレスを指定する。

例1)192.168.0.11/32・・・192.168.0.11からの接続のみを許可する
例2)192.168.0.0/24・・・IPアドレスが192.168.0.xであるクライアントのみを許可する
例3)0.0.0.0/0・・・任意のIPアドレスのクライアントを許可する

● METHOD
ユーザの認証方式を指定する。代表的なものは以下のとおり。
trust・・・認証なし。無条件に接続を許可する。
reject・・・無条件に接続を拒否する。特定のホストやネットワークからの接続を拒否する際に使用。
md5・・・md5を利用したパスワード認証。パスワードを指定していないユーザは接続できない。
password・・・パスワード認証を行うが、BASIC認証のため、パスワードがそのままネットワークを流れてしまう。

・引用元:他ホストから接続するための設定 はてなブックマーク - 他ホストから接続するための設定

以上です。

【参考】

PostgreSQL8.3 クライアント認証 – 読書と技術となんか色々のログ – 楽天ブログ(Blog) はてなブックマーク - PostgreSQL8.3 クライアント認証 - 読書と技術となんか色々のログ - 楽天ブログ(Blog)

[Facebook] スマートフォン用アプリ開発をするときに参考になる記事まとめ

Facebookで、スマートフォン用アプリ開発をするときに参考になる記事をまとめてみました。

ザクッと Facebookアプリをモバイル対応させるための方法が書かれています。

Mobile – Facebook Developers はてなブックマーク - Mobile - Facebook Developers
 

Webアプリ

Facebook のスマートフォン用Webアプリ開発を始めるなら、「Mobile Web Tutorial」がおすすめです。

モバイルアプリが作れるようになるチュートリアルです。

Mobile Web Tutorial – Facebook Developers はてなブックマーク - Mobile Web Tutorial - Facebook Developers

・サンプルアプリ:Hackbook はてなブックマーク - Hackbook

・サンプルアプリのコード:mobile-web-hackbook at master from facebook/platform-samples – GitHub はてなブックマーク - mobile-web-hackbook at master from facebook/platform-samples - GitHub
 

■ モバイルブラウザでのテスト

・iOS:Safari Web Content Guide: Debugging はてなブックマーク - Safari Web Content Guide: Debugging

・Android:Debugging Web Apps | Android Developers はてなブックマーク - Debugging Web Apps | Android Developers
 

モバイルアプリで出来ることの一覧。

Mobile Distribution – Facebook Developers はてなブックマーク - Mobile Distribution - Facebook Developers

既にリリースされているモバイルアプリがまとめられているサイト。

Mobile Gallery – Facebook Developers はてなブックマーク - Mobile Gallery - Facebook Developers
 

iOS ネイティブアプリ【iPhone/iPad/iPod Touch】

iPhone/iPad などの iOS 向けネイティブアプリ開発用チュートリアルです。

iOS Tutorial – Facebook Developers はてなブックマーク - iOS Tutorial - Facebook Developers

iOS Screenshots – Facebook Developers はてなブックマーク - iOS Screenshots - Facebook Developers
 

Android ネイティブアプリ

Android Tutorial – Facebook Developers はてなブックマーク - Android Tutorial - Facebook Developers

以上です。

[PostgreSQL] NULL でない自身の最初の引数を返す COALESCE 関数が便利

PostgreSQL にて、値がNULLの場合は、代わりの値を返す COALESCE 関数という便利なものを教えてもらったのでメモ。

SUM 関数は、指定したカラム(ここでは money)の値が全て NULL の場合、NULLを返します。

返り値が NULL ではなく、0 にしたいので、最初は下記のように書いていました。

SELECT
	CASE WHEN SUM(money) IS NOT NULL THEN SUM(money) ELSE 0 END AS total_money
	FROM USER;

このような、SUM関数の結果がNULLの場合は、0 を返して欲しいという書き方は、CASE 文を使わなくても、COALESCE 関数を使えば実現できるみたいです。

6.12.2. COALESCE
COALESCE(value [, …])
COALESCE 関数は、NULL でない自身の最初の引数を返します。 データを表示の目的で取り出す際、NULL 値の代わりにデフォルト値を使う場合、時として便利なことがあります。 その例です。

SELECT COALESCE(description, short_description, ‘(none)’) …

・引用元:条件式 はてなブックマーク - 条件式

なので、COALESCE 関数を使って、下記のように書くことができます。

SELECT
	COALESCE(SUM(money), 0) AS total_money
	FROM USER;

以上です。

【参考】

PostgreSQL COALESCEでNULLを空白に変換 – 130単位 はてなブックマーク - PostgreSQL COALESCEでNULLを空白に変換 - 130単位

SQL の COALESCE はてなブックマーク - SQL の COALESCE

[Ruby] User Agent(ユーザーエージェント)を取得する方法

Ruby にて、User Agent(ユーザーエージェント)を取得する方法を調べたのでメモ。

User Agent自体は、リクエストパラメータの中に含まれています。

iPhone のユーザーエージェントの例

request.env["HTTP_USER_AGENT"]
#=> Mozilla/5.0 (iPod; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3

User Agent を調べることにより、例えば iPhone や Android などのスマートフォンからのアクセスを、スマフォ専用のページにリダイレクトすることができたりします。

スマフォ専用サイトに転送するフィルターのサンプル (Ruby on Rails)

before_filter :check_user_agent_for_mobile
 
def check_user_agent_for_mobile
  ua = request.env["HTTP_USER_AGENT"]
  if(ua.include?('Mobile') || ua.include?('Android'))
    redirect_to  :controller => "mobile", :action  => "index"
  end
end

iPhone/iPad/iPod Touch には全て ‘Mobile’ という文字列が、Android端末には ‘Android’ の文字列がユーザーエージェントに含まれているので、このように書いてみました。

User Agent については下記のサイトに詳しくまとめられています。

userAgent一覧/ユーザーエージェント一覧

以上です。


参考情報

Android携帯、タブレットをUser Agentで区別するRubyの正規表現|WEBデザイン Tips

[Facebook] Offline Access Permission(オフラインアクセスパーミッション)が2012年5月1日に完全廃止

Facebook API の仕様変更により、2012年5月1日に Offline Access Permission(オフラインアクセスパーミッション)が完全に廃止されるそうです。

Deprecation of Offline Access Permission – Facebook Developers はてなブックマーク - Deprecation of Offline Access Permission - Facebook Developers

May 1, 2012

1. Offline_accessパーミッションの廃止

offline_accessパーミッションを廃止にするための移行を開始しました。2012年5月1日にoffline_accessが完全に廃止されるまでは、この設定を自分で切り替えることができます。Deprecation of Offline Access(未訳)のドキュメントで詳細を確認してください。

・引用元:開発者ロードマップ(2012-03-06) : Facebook開発者向けドキュメントの日本語訳とTips はてなブックマーク - 開発者ロードマップ(2012-03-06) : Facebook開発者向けドキュメントの日本語訳とTips

この仕様変更により、Facebookアプリの利用者は自分の知らない間にフェイスブックの情報を操作されずにすみそうです。

また、Facebookアプリ開発者は、開発するアプリの幅が狭まりそうですね。

[Windows7] telnet コマンドを使うための設定方法

Windows7 で telnet コマンドを使うための設定方法を調べたのでメモ。

ここを参考にします。

Windows 7 で telnet コマンドを使う | へーいち の うぇぶろぐ はてなブックマーク - Windows 7 で telnet コマンドを使う | へーいち の うぇぶろぐ

以上です。

[PostgreSQL] ERROR: permission denied for ~ というエラーが出たらテーブル(table)の権限を確認する

PostgreSQL にて ERROR: permission denied for ~ というエラーが出たら、テーブル (table) の権限がないということなのでこれを確認します。

エラー内容

ERROR:  permission denied for table table_name

権限の確認コマンド

\z

テーブルへの権限付与のクエリ

GRANT SELECT, UPDATE, INSERT ON TABLE_NAME TO role_name;

以上、PostgreSQL の ERROR: permission denied for に負けいない、現場からお送りしました。

[jQuery] 時刻をカンタンに入力できるライブラリ「ClockPick」が便利!

時刻をカンタンに入力できる jQuery ライブラリ「ClockPick」が便利だったので、使い方をメモ。

jNathanson.com | the interwebs home of josh nathanson はてなブックマーク - jNathanson.com | the interwebs home of josh nathanson

■ js/css ファイルの設置

上記、サイトから「jquery.clockpick.1.2.9.min.js」と「clockpick.1.2.9.css」をダウンロードして、設置します。
 

■ CSS ファイルの書き換え

デフォルトだとフォントサイズが 9px と小さくて見にくいので、18pxに変更します。

.CP_hour と .CP_minute でフォントサイズを指定してる箇所をそれぞれ変更。
 

■ JavaScript

よく使う 24時間表記、5分刻みで選択できるような設定にしました。

<script type="text/javascript">
  $(function(){
    $("#start_time").clockpick({
      starthour: 0,
      endhour: 23,
      showminutes: true,
      minutedivisions: 12,
      military: true
    });
  });
</script>

 

■ HTMLソース

<input type="text" name="start_time" id="start_time" />

 

■ オプション

 ・starthour:開始時間(デフォ8)
 ・endhour:終了時間(デフォ18)
 ・showminutes:分の表示(デフォTrue、False)
 ・minutedivisions:分の刻み(デフォ4)
 ・military:AM/PMの表記(デフォFalse、True)
 ・event:時間の出し方(デフォClick、Mouseover)
 ・layout:時間の表示方法(デフォvertical、Horizontal)

以上です。

【参考】

時間の入力支援javascript「ClockPick」|skuare.net はてなブックマーク - 時間の入力支援javascript「ClockPick」|skuare.net

[Oracle] テーブル(table)定義を確認する DESCRIBE コマンド

Oracle DB にて、テーブル定義を表示するコマンドは DESCRIBE です。

DESCRIBE tablename

ちなみに、他のDBでテーブル定義を確認するにはそれぞれ以下のコマンドを実行します。

■ MySQL

desc tablename;

■ PostgreSQL

\d tablename

以上です。

【参考】

全ては時の中に… : 【Oracle】表定義をDESCRIBEコマンドで確認する はてなブックマーク - 全ては時の中に… : 【Oracle】表定義をDESCRIBEコマンドで確認する