IT

phpのstr_replace文字化けについて

phpの関数「str_replace」
検索文字列に一致したすべての文字列を置換する関数です。

str_replaceマニュアル

スペースを置換しようと思ってstr_replaceを使って置換してたのですが、なんと文字化けするパターンがありました。
「ァ」などの全角小文字があると置換した際に文字化けしてしまいます。
原因と対処法をメモ。

原因

str_replaceはマルチバイト対応していない模様
「ァ」があるとコードにした際に、途中で違う文字と判定されるため

対処法

str_replaceではなく、mb_ereg_replaceを使用する
mb_ereg_replaceはマルチバイト対応関数

mb_ereg_replaceマニュアル

日本語が含まれる文字列を変換する際は、気をつけましょう!

CentOS7にPostgreSQL9.4のインストール

PostgreSQLをインストールしたので、そのインストール手順と初期設定を書いておきます!

PostgreSQLをダウンロード&インストール

1.PostgreSQLをダウンロード

[xxx@localhost ~]$ wget http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm

2. PostgreSQLをインストール

[xxx@localhost ~]$ sudo rpm -ivh pgdg-centos94-9.4-1.noarch.rpm
[xxx@localhost ~]$ sudo yum -y install postgresql94-server postgresql94-devel postgresql94-contrib

PostgreSQLの設定

3.データベースを初期化

[xxx@localhost ~]$ sudo /usr/pgsql-9.4/bin/postgresql94-setup initdb
Initializing database ... OK

4.データベースを起動

[xxx@localhost ~]$ sudo systemctl start postgresql-9.4

5.自動起動設定

システム起動時にPostgreSQLが自動で起動するようにします。

[xxx@localhost ~]$ sudo systemctl enable postgresql-9.4

6.postgresユーザのパスワード設定

PostgreSQLをインストールすると、自動でpostgresユーザが作成されます。
作成直後はパスワードが設定されていないため、設定します。

[xxx@localhost ~]$ sudo passwd postgres

7.環境変数設定

PostgreSQLのコマンドへのパスを設定します。

[xxx@localhost ~]$ sudo su
[root@localhost xxx] cd /var/lib/pgsql/
[root@localhost xxx] vi .bash_profile
※ファイルの末尾に追加※
export PATH=$PATH:/usr/pgsql-9.4/bin

以上です。

と言いたいところでしたが、

データベースのEncodingが「SQL_ASCII」になっていました。
Encodingを「UTF8」にしたいと思い、この後行った手順が下記となります。

8.データベースを初期化(データベースクラスタ作成)

[root@localhost xxx] systemctl stop postgresql-9.4
[root@localhost xxx] su - postgres
-bash-4.2$ cd /var/lib/pgsql/9.4
-bash-4.2$ rm -rf data
-bash-4.2$ initdb --encoding=UTF8 --no-locale --pgdata=/var/lib/pgsql/9.4/data --auth=ident

データベースを初期化し直しました。手順3で指定すれば多分うまくいったのかもしれません。
あとロケールは設定しませんでした。
PostgreSQLでロケールを選択した場合、検索性能に問題が出るらしく、 ロケールを選択しないことが推奨とされています。

9.データベース起動&自動起動設定

[root@localhost xxx] systemctl start postgresql-9.4
[root@localhost xxx] systemctl enable postgresql-9.4

10.確認

[root@localhost xxx] su - postgres
-bash-4.2$ psql -l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     |
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres

以上、参考にしていただけたらと思います!!

【ER Master】MySQLからインポート

eclipseのプラグインER Master MySQLからインポートする手順

  1. ファイル > 新規 > プロジェクト > 一般プロジェクト > 次へ > プロジェクト名を入力 > 完了
  2. プロジェクトを右クリック > 新規 > その他 > ERMaster > 次へ > ファイル名を入力 > 次へ > MySQLを選択 > 完了
  3. 2で作成したファイル名を開く > 画面上で右クリック > インポート > データベースを選択
  4. データベースからインポートで下記を入力し、次へ
    データベース:MySQL
    サーバ名:127.0.0.1
    ポート番号:3306
    データベース名:hogehoge
    ユーザ名:root
    パスワード:password
    デフォルトのドライバを使用する:チェック
    JDBC URL:「jdbc:mysql://localhost:3306/hogehoge」
    JDBCドライバクラス名:com.mysql.jdbc.Driver

    ※MySQLのJDBCドライバのダウンロードはここから

  5. インポートするオブジェクトを選択し、OKをクリック

以上

【Atom】ファイル末尾に自動改行させない設定

Atomエディタを使用していて、デフォルト設定で気になる箇所がありました。
保存時、ファイルの末尾に自動で改行が追加されるのとファイル末尾に複数行の改行があったとしても自動改行の1行だけになってしまうことです。

新規作成時であればその設定でも問題ないのですが、改修作業だと改修箇所以外は余計な修正は入れたくないです。

調べたところ設定で変更できました。

1.Atom > Preferences > Packages > Installed Packagesにwhitespaceで検索

atom-whitespace.png

2.Core Packagesに表示されたwhitespaceのSettingsをクリック > Ensure Single Trailing Newline のチェックを外す

atom-whitespace-settings.png

以上

Oracleでランダムにデータを取得

Oracle(オラクル)でSQLを使用し、ランダムにデータを取得するには「dbms_random.random」を使用することで可能。
SQL文のorder by句に「dbms_random.random」を指定することで、取得データがランダムになります。

全件をランダムに取得

SELECT * FROM hogehoge ORDER BY dbms_random.random;

idが500以上のデータをidの昇順、同idの中でランダムに取得

SELECT * FROM hogehoge WHERE id >= 500 ORDER BY id, dbms_random.random;

ランダムに10件取得

SELECT * FROM (SELECT * FROM hogehoge ORDER BY dbms_random.random) WHERE ROWNUM <= 10;

プログラムでランダムにする必要がなくなり便利です。
全件取得しなくても、必要な件数だけデータをランダムに取得出来るので、パフォーマンス的にも良いです。

データをランダムに取得したいときは活用していきましょう!

macのCotEditorで複数行のインデント方法

macでCotEditorを使用していて、複数行のインデント方法がわからなかったのでメモ。

インデント
複数行を選択して Command + ]
インデントを戻す
複数行を選択して Command + [

AngularJSを使い始めて気づいた点

AngularJSを使い始めて、すぐさまつまずきました。。。
AngularJSのエラーが出て、全然実行できない。もう使うの止めようかな・・・絶対JQueryでガリガリ書いた方が早いし、楽!!と思い始めてますw

エラー内容わかりにくいし、独特のタグをHTMLに使用するからデザインとかと組み合わせると見にくくて、しかもSEO的に微妙みたいな話だし・・・

業務系とか管理側とかならいいのかも。SEOとか気にする表側にはたぶん向いてない。

一応、今回のエラー内容をメモ。まぁ、ちゃんとマニュアル読んで順番に手順踏んでれば大丈夫だったんですが・・・
こんな簡単なとこでつまずいているようじゃ、たぶん続かない・・・w

以下がエラーが出るソース。これを見て、すぐ原因がわかれば、AngularJS使っていけると思います。

{{ temp }}に’hogehoge’を表示するソース

<!DOCTYPE html>
<html ng-app>
  <head>
    <script src="js/angular.min.js"></script>
    <script>
    angular.module("app", [])
        .controller("sampleController", function($scope) {
            $scope.temp = 'hogehoge';
        });
    </script>
  </head>
  <body>
  <div ng-controller="sampleController">{{ temp }}</div>
  </body>
</html>
AngularJSのエラーメッセージ
Error: ng:areq
Bad Argument
Argument ‘sampleController’ is not a function, got undefined

回答

原因
module名の指定が足りない
対応
「<html ng-app>」 → 「<html ng-app=”app”>」に変更

2016/10/07 追記
AngularJS2系は、だいぶ変わっていて、使いやすくなっている模様!
AngularJSは、失敗作だったという話も・・・?

【簡単】AngularJS(jsフレームワーク)のダウンロード&動作確認

近年、javascriptの開発にフレームワークを使用する傾向にあるようです。
javascriptのフレームワークには、AngularJSやBackbone.js、Knockout.js、React.jsなどがあり、種類が増えてきています。

javascriptのフレームワークは、おおむね以下のような特徴があります。

  • MVC/MVVMモデル
  • HTML/JavaScriptの双方向バインディング
  • URLルーティング
  • HTMLテンプレート

今回は、数種類あるjavascriptのフレームワークの中の一つ「AngularJS」をピックアップし、ダウンロード・導入〜実際に動作させてみたいと思います。

AngularJSとは

AngularJSはGoogle製のJavaScriptフレームワークで、Googleとコミュニティで開発している非常に活発なオープンソース(MIT)です。

AngularJSはMVWフレームワークで

  • 双方向データバインディング
  • ルーティング
  • 独自タグ、属性
  • REST API呼び出し
  • DI

など機能が豊富なフルスタックフレームワークです。

AngularJSダウンロード

1.公式サイトにアクセス

以下リンクをクリックし、公式サイトを開きます。
公式サイト

2.Downloadボタンクリック

真ん中の青いDownloadボタンをクリックします。
スクリーンショット 2015-07-11 11.56.56.png

3.モーダルのDownloadボタンクリック

以下のようなモーダルが表示されます。
デフォルトの選択のままDownloadボタンをクリックします。
angular.min.jsのダウンロードが始まります。
スクリーンショット 2015-07-11 11.57.23.png

AngularJS導入&動作確認

1.ダウンロードしたjsファイルを任意の場所にアップロード

例)ルートディレクトリ以下の「js/common/angular.min.js」にアップロード

2.アップロードしたjsファイルを読み込む

headタグ内でscriptタグを使用して読み込む

<html>
<head>
<script src="js/common/angular.min.js"></script>
</head>
<body>
</body>
</html>

3.AngularJS動作確認

htmlタグに「ng-app」ディレクティブを追加し、body内に「{{ 5 + 1 }}」を記述

<html ng-app>
<head>
<script src="js/common/angular.min.js"></script>
</head>
<body>
5 + 1 = {{ 5 + 1 }}
</body>
</html>

以下のように「{{ 5 + 1 }}」の部分が「6」と表示されていればOKです。

スクリーンショット 2015-07-13 23.45.00.png

「{{ }}」は、エクスプレッション構文で、HTML内で動的な処理を行うために使用します。

以上でAngularJsのダウンロード〜動作確認は終了です。
導入までは簡単に行えたかと思います。

AngularJS公式APIリファレンス

【Atom】 半角スペース・タブ表示

Macで使用するエディタでAtomが使いやすかったので、半角スペース・タブ表示を備忘録として残しておく。

Atom > Preferences > Settings > Editor SettingsのShow Invisiblesにチェック

atom-space.png

以上

fancyboxのモーダルでiphoneでのスクロール対応

fancyboxを使用してモーダル表示している場合、iphoneのバージョンによってはモーダル内のスクロールができないことがある。
※2本指でスクロールすると、モーダル内がスクロールするiphoneのバージョンもある。そのバージョンも以下の対応で1本指でスクールすることが可能

対応するにはfancyboxのoptionでonCompleteを使用し、スクロールできるようにする。

以下、サンプルコード

// オプション
var option = {
    'width': 740,
    'height': '85%',
    'type' : 'iframe',
    // スクロールしてもmodalwindowを中心にするか
    // [true:中心にする、false:中心にしない]@default:false
    'centerOnScroll' : 'true',
    // モーダル表示完了時に行う処理
    'onComplete':function(){
        // iphoneでiframe内がスクロールできない対応
        $('#fancybox-content').css('-webkit-overflow-scrolling', 'touch');
        $('#fancybox-content').css('overflow', 'auto');
    }
};