OmniAICreator/Qiita-1.07M huggingface dataset:
Oracle ASM から Databaseファイル削除する

Database は削除したのに、ASM上にファイルが残っている
削除したい、そんなときのスクリプト



```
column a format a120
set linesize 120

select 'alter diskgroup ' || gname || ' drop file ''+' || gname || sys_connect_by_path(aname, '/') || ''';' a
 from ( select b.name gname, a.parent_index pindex, a.name aname,
 a.reference_index rindex , a.system_created, a.alias_directory
 from v$asm_alias a, v$asm_diskgroup b
 where a.group_number = b.group_number
 )
 where alias_directory = 'N'
 and system_created = 'Y'
 start with (mod(pindex, power(2, 24))) = 0
 and rindex in
 ( select a.reference_index
 from v$asm_alias a, v$asm_diskgroup b
 where a.group_number = b.group_number
 and (mod(a.parent_index, power(2, 24))) = 0
 and a.name = '&DATABASENAME'
 )
 connect by prior rindex = pindex;
```

実行すると プロンプトが あらわれるので データベース名を入力

```
Enter value for databasename: ORCL
old 15: and a.name = '&DATABASENAME'
new 15: and a.name = 'ORCL'
```

あとは ASMインスタンスで 出力された alter文を実行する

```
alter diskgroup DATA drop file '+DATA/ORCL/ARCHIVELOG/2016_01_08/thread_1_seq_81.272.707781651';
```
JAVA Servlet


▪️**URLパターン**
@WebServlet("/URLパターン")
URLパターンは「/」から始める。
※import javax.servlet.annotation.WebServletをインポートする必要がある。

サーブレットクラスはURLを設定しないとリクエストして実行することが出来ない。

▪️サーブレットクラスへのリンクをクリックする

```html
<a href="/アプリケーション名/URLパターン">リンク文字列</a>
```
webサイトパフォーマンス(フロントエンド)

# webサイトパフォーマンス(フロントエンド)
ハイパフォーマンスwebサイト(Oreilly)読後備忘録
ちょっと古いかもしれないけど、まとめ。

## HTTPリクエストを減らす。
画像, css, js
- ボタンやリンクなどの画像はできるだけcssやフォントで実装。
- css, jsはassetpipelineなどで連結させて出来る限り少ない回数呼び出す。

## キャッシュの利用
img, css, jsなどの静的ファイルはブラウザにキャッシュさせる。
Cache-Control : max-age=315360000
とか設定する。

## コンポーネントをgzipする。
コンポーネントを圧縮して送信することで通信時間をへらす。

リクエストヘッダ
Accept-Encoding: gzip
レスポンスヘッダ
Content-Encoding: gzip

を追記する。

## cssはheadに記載。
linkタグをhead内に記載。

## jsはbodyの最後に記載。
scriptタグをbodyの最後につける。

## css, jsは外部ファイルにする。
キャッシュできるように。

## jsをminifyする。
サイズをちっさく。

*****************
適宜追記。
ESP-WROOM-02で振動アクチュエータを二つ駆動してみました


[(将来的に)Wifiで動くバイブを作りました - Eros DIY Blog](http://eros-maker.org/blog/2016/01/27/vibe/)と同一の内容です。Qiitaにふさわしくいかがわしい文言を削除しました。

500円〜1000円で入手でき、Wifiがアクセスでき、Arduinoのコードがほぼそのまま動くESP-WROOM-02に[振動アクチュエータ使ってみました - Eros DIY Blog](http://eros-maker.org/blog/2016/01/26/LD14-002/)で試した振動アクチュエータを二つつないでみました。

## 作成方法

![回路図](http://eros-maker.org/images/vibes.png)

### パーツ

* ブレッドボードもしくはユニバーサル基板
  - 試作は[ブレッドボード　ＥＩＣ－８０１: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gP-00315/)
  - 本制作は[片面ガラス・ユニバーサル基板（ブレッドボード配線パターンタイプ）: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gP-04303/)
  - 一般的には[片面ガラスコンポジット・ユニバーサル基板　Ｃタイプ　めっき仕上げ　（７２ｘ４７ｍｍ）　日本製: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gP-03229/)が使われます。
* ESP-WROOM-02
  - [Ｗｉ－Ｆｉモジュール　ＥＳＰ－ＷＲＯＯＭ－０２　ＤＩＰ化キット: 無線、高周波関連商品 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gK-09758/)
* [カーボン抵抗（炭素皮膜抵抗）　１／４Ｗ　１０ｋΩ　（１００本入）: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gR-25103/)
* [カーボン抵抗（炭素皮膜抵抗）　１／４Ｗ　２０ｋΩ　（１００本入）: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gR-03940/)
* [カーボン抵抗（炭素皮膜抵抗）　１／４Ｗ　１００ｋΩ　（１００本入）: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gR-25104/)
* [ＮｃｈパワーＭＯＳＦＥＴ　２ＳＫ４０１７（Ｑ）　（６０Ｖ５Ａ）: 半導体 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gI-07597/)
* [リニア振動アクチュエータ　ＬＤ１４－００２: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gP-06838/)
* 電源 (4.5Vないし6Vあたり)
  - [電池ボックス　単４×３本用（フタ付プラスチック・スイッチ付）: パーツ一般 秋月電子通商 電子部品 ネット通販](http://akizukidenshi.com/catalog/g/gP-03196/)

### Arduino ソース

```c
// Copyright 2016 Eros M@ker.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#define VIBES1_PIN 13
#define VIBES2_PIN 16
#define VIBE_WAIT 4166

void setup() {
  pinMode(VIBES1_PIN, OUTPUT);
  pinMode(VIBES2_PIN, OUTPUT);
}

void wait(long us) {
  int msec = us / 1000;
  int usec = us % 1000;
  if (msec > 0) {
    delay(msec);
  }
  if (usec > 0) {
    delayMicroseconds(usec);
  }
}

void loop() {
    long vibration_sec = random(1, 10);
    long cnt = vibration_sec * 1000 * 1000 / (VIBE_WAIT * 2);
    while (--cnt > 0) {
      digitalWrite(VIBES1_PIN, HIGH);
      digitalWrite(VIBES2_PIN, HIGH);
      wait(VIBE_WAIT);
      digitalWrite(VIBES1_PIN, LOW);
      digitalWrite(VIBES2_PIN, LOW);
      wait(VIBE_WAIT);
    }

    delay(random(5, 30) * 1000);
}
```

### 完成品

![外観写真](http://eros-maker.org/images/vibes2.jpg)

右に見える二つの振動アクチュエーターが、緩い振動を行います。

ケースの厚さをミスっていてケースに収まりきらない、固定用のスペーサーのネジ穴を開けるのミスったなど、経験値の低さが出ています。

振動アクチュエータに線だけつないだ状態だとあまり音がしていなかったのですが、線をつないでホットボンドで固定したら、何故か音が大きくなりました。

## 将来的には

二つの振動アクチュエータを左右別々にランダムに刺激を与えたり、1/fゆらぎとかやってみたいですね。

せっかくWifiの使えるマイコンなのでWifi経由で操作できるようにすれば色々と捗りそうです。
フィールド区切り文字の変換：可変個空白→カンマ

可変個の空白文字でフィールドを区切る形式のテキストデータを、カンマ区切り(CSV)データに変換する。

```bash
$ awk -v IFS=' ' -v OFS=',' '{$1=$1;print $0}' src.txt > dest.csv
```

awkコマンドの組み込み変数`IFS`(入力フィールド区切り文字)と`OFS`(出力フィールド区切り文字)を利用。一見すると無駄なフィールド自己代入(`$1=$1;`)により、レコード全体(`$0`)の再構築が行われるらしい。あふれだすバッドノウハウ感。

例）`vmstat`コマンドの出力など

```
$ cat src.txt
 2  0 216376 4947412      0 25388376    0    0     0     0    0    0  0  0 100  0  0
 0  0 216376 4954320      0 25388432    0    0     0     2  353  781  0  0 100  0  0
...
$ cat dest.csv
2,0,216376,4947412,0,25388376,0,0,0,0,0,0,0,0,100,0,0
0,0,216376,4954320,0,25388432,0,0,0,2,353,781,0,0,100,0,0
...
```
TabBarControllerで設定したタブに遷移する（XCode7.2 / Swift2.1.1）

StoryBoardでTabBarControllerを作成すると簡単にタブ移動はできるのですが、タブ以外をタップしたときにも遷移させるためのメモ。

```
tabBarController?.selectedViewController = (tabBarController?.childViewControllers[0])! as UIViewController
```
Let's Encrypt + Nginxでhttpsアクセスにする！

## 概要
[Let's Encrypt](https://letsencrypt.org/)を使って、[友人に作ってあげた塾のWebページ](https://www.adachi-clias.com/)をhttpからhttpsアクセスにした話。
このページはNginxを使っているので、そこをhttpsにする設定も記す。

## [Let's Encrypt](https://letsencrypt.org/)とは？
[Let's Encrypt](https://letsencrypt.org/)は、独自ドメインとWebサーバがあれば、誰でも簡単に Let's Encrypt の SSL/TLS 証明書を取得することができるオープンソースの取り組み。

SEO的にもhttpsの方が評価が高いらしいので、検索順位を上げたいなら導入する価値がある。（参考：[『HTTPSをSEOで優遇』 SSL化を推奨するアルゴリズム導入をGoogleが公式発表](http://www.seohacks.net/blog/algorithm/https_ssl_seo_donyu/)）

通常のSSL証明書を導入しようとしたらそこそこ高いので、そこまでセキュアじゃなくてもいいならばこれで充分かと。
もちろん、無料のものと有料のものには差があるので、そこを認識した上で使うこと。
参考：[無料SSL/TLS証明書ができないこと](https://jp.globalsign.com/blog/2016/freessltls_letsencrypt.html)

## とりあえず、証明書を発行する
[Let's Encrypt の使い方](https://letsencrypt.jp/usage/)に従い、進める。
基本的にはこの通り。
コマンドだけまとめておく。

443ポートの開放と80ポート使っていたらそのプロセスを止めることを忘れずに。

### letsencrypt導入

```bash:letsencrypt導入
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt/
$ ./letsencrypt-auto --help
$ netstat -na | grep ':80.*LISTEN' # 80ポートを使っているものがないかを探す
$ sudo service nginx stop # あれば止める
$ sudo emacs /etc/sysconfig/iptables #443ポートを開放しないといけないので
$ # /etc/sysconfig/iptablesに下記を追加
$ # -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
$ sudo /etc/init.d/iptables restart # iptableをリスタート
$ ./letsencrypt-auto certonly -a standalone -d 自分のドメイン
```

※pythonが古いと怒られるので、新しめのpythonを入れる
参考：[PyenvによるPython3.x環境構築(CentOS, Ubuntu)](http://qiita.com/akito1986/items/be5dcd1a502aaf22010b)


### nginxの設定

```bash:nginxの設定
$ sudo emacs /etc/nginx/conf.d/default.conf # nginxのconfをいじる
```

以下、nginx設定サンプル

```nginx:default.conf
upstream unicorn {
  server unix:/tmp/unicorn.sock;
}
# httpをhttpsへリダイレクト
server {
  listen 80;
  server_name www.example.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_name www.example.com;

  # www.example.comの部分は適宜、自分のドメインに置き換える
  ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
  # www.example.comの部分は適宜、自分のドメインに置き換える
  ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

  access_log /var/log/nginx/sample/sample_access.log;
  error_log /var/log/nginx/sample/sample_error.log;

  root /var/tmp/sample;

  location @unicorn {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
    proxy_redirect http:// https://;
  }
}

```

### nginxをrestartすれば完了！

```bash
$ sudo service nginx restart
```

<img width="302" alt="スクリーンショット 2016-01-27 16.21.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/69406/fbc4c510-e144-eed9-d312-1811e0ac5b9d.png">

Let's Encrypt!

### 自動更新の仕組みを入れる
[Why ninety-day lifetimes for certificates?](https://letsencrypt.org/2015/11/09/why-90-days.html)
曰く、90日で期限が切れるため、自動更新の仕組みを入れる。

cronでやることをまず思いつくが、おそらくサーバー1台ならば素直にそれでやればいい。
[証明書の自動更新設定](https://blog.apar.jp/linux/3619/#i-5)を参考に。
※port80を使うので、一瞬nginxを止める必要がある

```bash:毎月2日の午前4時に実行
00 04 02 * * root service nginx stop && /home/shengbo-xu/letsencrypt/letsencrypt-auto certonly -d www.adachi-clias.com --renew-by-default && service nginx start
```
WindowsのバイナリをMac OS X上のMXEでビルドする

Mac OS X (El Capitan) 上で Windowsのバイナリをビルドする案件のために、[MXE (M cross environment)](http://mxe.cc/) でクロスコンパイル環境を構築したので、メモしておく。

## 準備

homebrewはインストール済みとする。MXEに必要なパッケージをインストールする。

    brew install autoconf automake coreutils gdk-pixbuf gettext gnu-sed intltool libtool p7zip wget xz

keg-onlyのパッケージは手動で`brew link`する必要があるかもしれない。例えば、

    brew link gettext

## インストール

     git clone https://github.com/mxe/mxe.git

このままmakeするとすべてのパッケージをビルドしてしまう。もしWindows 64bit用のgccのみが必要ならば、mxe/settings.mkを以下のように設定する。
 
```settings.mk
MXE_TARGETS := x86_64-w64-mingw32.static
LOCAL_PKG_LIST := gcc
.DEFAULT local-pkg-list:
local-pkg-list: $(LOCAL_PKG_LIST)
```
Windows 32bitだったら、x86_64-w64-mingw32.staticの代わりにi686-w64-mingw32.staticとする。
そしてビルドする。

    cd mxe
    make 

その他に必要なパッケージがあれば、

    make boost

のような感じでビルドすることができる。

## クロスコンパイル

コンパイラのPATHを設定する。

    export PATH=/path/to/mxe/usr/bin:$PATH

configureを使ってビルドする場合には、

    ./configure --host=x86_64-w64-mingw32.static
    make

でビルドできる。

### よくあるエラー

他の環境だと起きないが、mingwだと起こるエラーがいくつかある。

    undefined reference to `rpl_malloc'

とか言われてしまう場合には、

```
export ac_cv_func_realloc_0_nonnull=yes
export ac_cv_func_malloc_0_nonnull=yes
```

として configure からやり直しすれば良い。

## テスト環境

出来上がったバイナリはwineで実行できる。homebrewなら

    brew install wine winetricks

で一発インストールが可能。ただし、Mac OS Xでは32bitのバイナリしか実行できない。
Perl正規表現にある$`$'をPHPでするには PREG_OFFSET_CAPTURE

HTML::Template風なのを作りたくてはまったこと。
HTMLを\<TMPL_HOGE keyname\>タグでちょん切りたいのにPerlの\$`\$'みたいな特殊変数がPHPにはない！？

```php:PHP
preg_match('/<(\/?TMPL_\w+)\s*(\w*)\s*>/s', $html, $m, PREG_OFFSET_CAPTURE);
list($all, $tagname, $key) = $m;
$text   = substr($html, 0, $all[1]);                # 一致より前 $`
$html   = substr($html, $all[1] + strlen($all[0])); # 一致より後 $'
```

PREG_OFFSET_CAPTUREを付けると$mが2次元配列になってこんな構造で来るので
substrで元の\$htmlを切り取って\$``\$'のかわりにした。

```php:PHP
$m = array(
    array(allval, allpos),
    array(tagval, tagpos),
    array(keyval, keypos)
);

$_tag  = substr($html, 0, allpos);               # TMPLタグより前 $`
$tag_  = substr($html, allpos + strlen(allval)); # TMPLタグより後 $'
```

perlだとこう。やっぱPerlて暗号みたい

```php:Perl
$html =~ m|<(/?TMPL_\w+)\s*(\w*)\s*>|s;
$_tag = $`; # TMPLタグより前 $`
$tag_ = $'; # TMPLタグより後 $'
```
CircleCIでrake db:structure:loadが遅い場合のでschema_migrationsをBULK INSERTした

`migration`ファイルの中に特殊な処理があるときなどは、`db/schema.rb`ではdbのテーブル構成を忠実に再現出来ないケースが有り、その場合は生のSQLを使う`db/structure.sql`をdumpする方法があります。

こんな感じで設定出来ます。

```config/application.rb
module YourApp
  class Application < Rails::Application
    config.active_record.schema_format = :sql
  end
end
```

このとき`rake db:schema:load`から`rake db:structure:load`に変えたところ、CircleCIにおいて、処理速度が遅くなってしまったので調べていたところ、
`bundle exec rake db:structure:dump`の最後の`schema_migrations`テーブルの中身を[dumpする処理](https://github.com/rails/rails/blob/v4.2.5/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb#L811-L817)が`BULK INSERT`ではなかったので、ちょろっと調整してみました。


```config/initializers/extensions/active_record.rb
module ActiveRecord
  module ConnectionAdapters
    module SchemaStatements
      # CircleCIでのINSERTがとにかく遅いのでBulk Insertでschema_migrationsを出力する
      def dump_schema_information
        sm_table = ActiveRecord::Migrator.schema_migrations_table_name

        sql = String.new
        sql << "INSERT INTO #{sm_table} (version) VALUES"
        sql << ActiveRecord::SchemaMigration.order('version').map { |sm|
          "('#{sm.version}')"
        }.join(",")
        sql << ";\n\n"
      end
    end
  end
end
```

テーブル数200強、migration数が600弱という環境で、ローカルのmacだと以下ぐらいの差です。

* MacBook Pro (Retina, 15-inch, Mid 2014)
* プロセッサ: 2.2 GHz Intel Core i7
* メモリ: 16 GB 1600 MHz DDR3

## before

```
time bundle exec rake db:structure:load  5.60s user 3.71s system 63% cpu 14.592 total
```

## After

```
time bundle exec rake db:structure:load  4.46s user 2.05s system 65% cpu 9.973 total
```

CircleCIだと1分近い差がでました。
postfixでメール送信先ドメインを制限する

テスト環境などで意図せずメール誤爆しないようにメール送信先ドメインを制限したいことがあります。

ぐぐったところ設定方法はいろいろあるようですが、rejectしちゃうとアプリケーション側にエラーが返ってしまって困るケースがあったので、受け付けて捨てる方法で設定します。

例として `@example.com` にはメールを許可するけど、その他のドメイン宛は捨てる設定は以下のとおりです。postfixは2.6系です。

`/etc/postfix/main.cf` に以下の設定を追加します。

```/etc/postfix/main.cf
transport_maps = hash:/etc/postfix/transport
```

`/etc/postfix/transport` に以下の設定を追加します。
ローカル配送も不要な場合はlocalの行もなくてよいかもです。

```/etc/postfix/transport
example.com               smtp:
localhost                 local:
localhost.localdomain     local:
*                         discard: "discard received email"
```

transportファイルをコンパイルします。

```bash
[root]$ postmap /etc/postfix/transport
[root]$ echo $?
0
```

postfixの設定をリロードします。

```bash
[root]$ /etc/init.d/postfix reload
postfix を再読み込み中:                                    [  OK  ]
```

設定は以上です。

試しにsendmailコマンドで疎通確認してみます。

```bash
[root]$ echo "mail test1" | sendmail -f no-reply@myhost.example.com -t hoge@example.com
[root]$ echo "mail test1" | sendmail -f no-reply@myhost.example.com -t hoge@gmail.com
```

`hoge@example.com` にメールが届いて、 `hoge@gmail.com` にメールが届かなければ成功。

ログで確認すると `/var/log/maillog` にこんな感じの出力が出てる。

```/var/log/maillog
Jan 27 14:47:13 myhost postfix/smtp[26538]: 9A42F42B1D: to=<hoge@example.com>, relay=smtp.example.com[XXX.XXX.XXX.XXX]:25, delay=1.1, delays=0.02/0/0.41/0.68, dsn=2.0.0, status=sent (250 2.0.0 OK 1453873633 lm9si7024058pab.142 - gsmtp)

Jan 27 14:47:29 myhost postfix/discard[26551]: 9D42342B1D: to=<hoge@gmail.com>, relay=none, delay=0.02, delays=0.01/0/0/0, dsn=2.0.0, status=sent ("discard received email")
```

これでメール誤爆しなくて安心してテストできますね。

参考
[postfixのsmtpd_recipient_restrictionsの宛先制限はsendmailコマンド使用時には有効にならない](http://hogem.hatenablog.com/entry/20110220/1298220311)
Ruby1.8xから2.2xに変えたら案の定動かないの巻き Windows7

#:ghost: Stringにto_aしたらダメ
```
ary = ""
#ary.to_a #ダメ
ary = ary.kind_of?(String) ? ary.split("\n") : ary
```

#:ghost: 文字コード関連で色々怒られる

ArgumentError: invalid byte sequence in Windows-31J

こんなエラーが各所で出る。
これはWinのせいか？EUCだったのをUTF-8にしちゃったからか？
UTF-8ですよーってRubyに教えてあげれば解決です

```
\#!/usr/bin/ruby
Encoding.default_external = "utf-8"

```

しかしこれだと1.8で動かなくなってしまう切り替えていくのだからいいといえばいいのだけど一応1.8でも動くようにしておいてあげようと下記の方法

```
\#!/usr/bin/ruby -Ku
#Encoding.default_external = "utf-8"
```
と-Kuを付けてUTF-8指定する

-Ks Sjis 
-Ke EUC
-Ku UTF-8

これくらいで今のとこ動いてます。
Rails | pry の入力履歴を半永久的に記憶させる ( pry が終了しても履歴を残す ) [Mac OS X]

# 解決

pry-rails と一緒に rb-readline を入れる。

```rb:Gemfile
gem 'pry-rails'
gem 'rb-readline'
```

`$ bundle install`

Rails のコンソールを起動する。

`$ bundle exec rails console`

これで解決だ！
キーボードの上下キーで、以前の入力履歴をたどることが出来る。

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/2445654d-e953-4f05-b6e0-14001963d2d3.png)

# 問題

pry がまったく入力履歴を記録してくれない。

正確に言うと、1セッションの間は記憶してくれるが。
`exit` すると、次回起動時には全て消えてしまう。

履歴の設定はすべてデフォルトが true だし。
`.pry_history` が存在することも確認した。

```rb
Pry.config.history.should_save # => true
Pry.config.history.should_load # => true
Pry.config.history.file # => "/Users/yinaura/.pry_history"
```

しかも .pry_history に**履歴が書き込まれる**のにもかかわらず。
**読み込みだけが出来ない**のである。

.pryrc にロードの処理を書いても無駄だった。

```rb:.pryrc
Pry.history.load
```

ただし。pry起動後に `Pry.history.load` を手動実行すると、履歴を読み込むことが出来る。
しかし毎回実行するのは面倒すぎる。

解決策は冒頭のとおり。

# 環境

- pry (0.10.3)
- pry-rails (0.3.4)
- rb-readline (0.5.3)
- Rails 4.0.0
- OSX Yosemit 10.10.4

# 参考

- [Managing History · pry/pry Wiki](https://github.com/pry/pry/wiki/History#History_file)
- [Problem loading history #1418](https://github.com/pry/pry/issues/1418)



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
オープンソースのデータ可視化ツールのre:dashでらくらく分析共有 その４ 〜 pivot table編

* [オープンソースのデータ可視化ツールのre:dashでらくらく分析共有 その１ 〜 インストール編](http://qiita.com/wapa5pow/items/9e3feb19c0e7c80476d0#_reference-a6d2407ea33d8742da0d)
* [オープンソースのデータ可視化ツールのre:dashでらくらく分析共有 その２ 〜 グラフ編](http://qiita.com/wapa5pow/items/1455222b519946dc16db)
* [オープンソースのデータ可視化ツールのre:dashでらくらく分析共有 その３ 〜 Google Spreadsheets編](http://qiita.com/wapa5pow/items/312686403700a8e454df)
* [オープンソースのデータ可視化ツールのre:dashでらくらく分析共有 その４ 〜 pivot table編](http://qiita.com/wapa5pow/items/0d7ab1735ba4137f141c)

今回はpivot tableについて扱います。pivot tableはExcelやGoogle Spreadsheetsでも扱えるので知っている人も多いと思います。
pivot tableを使ってクロス集計を行うことができます。クロス集計については[ここ](http://www.trim-site.co.jp/vocabulary/01/post_1.html)らへんを見てみてください。

その１で作ったCountryデータを使います。

![re_dash___Country_Analytics.png](https://qiita-image-store.s3.amazonaws.com/0/30079/358c3f83-15ba-2ec8-a407-8db2ac15fa84.png "re_dash___Country_Analytics.png")

と、ここまでやって思ったのですが、Excelのほうが早くて便利なので、Excel使ったほうがいいかもと思いました。
ただ、DownloadしてExcelで開かなくてもWeb上でできるので楽っちゃらくです。
SQLiteにpythonで数億行いれてみた


mongodbも限界がきた。


[Mongodb 最短入門(1)EC2にインストール&起動&いきなり数万件入れてみた](http://qiita.com/tottoko/items/db306eb668167937a1ac)
[Mongodb 最短入門(2)数万件いれて探してみた]
(http://qiita.com/tottoko/items/68e61daf6eafb03d4b4b)
[Mongodb 最短入門(3)数百万件でも速くしてみた]
(http://qiita.com/tottoko/items/b6c9430b1e0ab7cb409c)

数千万件のデータから厳しいmongoさん。
億の壁も見えてきたので、意外なところでSQLLiteの登場。

[衝撃 NoSQL KVS お手軽DB mongo redis sqlite ローカルで神速だったのは。。。]
(http://qiita.com/wan-liner/items/ee07442e5bd4afd5b1b5)

加工が必要ない場合は↑　こちらが最強でした。


シビアにいうと、ファイルはgzのままCSVリーダーにかましたほうがよいです。
通常のディスクからファイルを読みだすより、圧縮をメモリで展開するほうが物理的には速いからです。
もちろんメモリよりファイルをリードするのが速いケース(SSD?nvme?)は除いて。
それで、CSVにはわりとカラムがあるよって時にはプレースホルダを使いたいです。

SQLが見やすいように、:column_name1 ってカラム名でプレースホルダ使って、エスケープとか自動でサニタイズしてもらいたいです。

###CSVの行リストにカラム名をキーにして一発で辞書にする:
**data=dict(zip(keys,row))**

keys はカラム名のリスト　例:('id','title')
row はCSVの行を区切り文字でわけたリスト 例: 1111"\t"aaaa
これでdata は{ id:1111,title:aaaa} みたいな辞書になっている。魔法だ。

**cursor.execute('insert into table (:id,:title)',data)**

mysqlみたいにプレースホルダが使える。辞書でないときは?でもいい

**cursor.execute('insert into table (?,?)',row)**

あと、おまじない
**conn.text_factory = str**

というのを誰も教えてくれなかったので、怒られたではないですか!
`sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings`


```
# coding: utf-8
import sqlite3
import csv
import gzip

conn = sqlite3.connect("honyahonya.db")
conn.text_factory = str
csr = conn.cursor()

keys=(
'id',
'title',
'date',
'article'
)

with gzip.open("honyahonya.csv.gz", 'rU') as f:
    reader = csv.reader(f, delimiter="\t")
    for row in reader:
        #データに自信がある場合は、カラム数の確認なんて省略したほうが速い
        if len(row)==len(key):
            d=dict(zip(keys,row))
            csr.execute('insert into tracks (id,title,date,article) values(:id,:title,:date,:article)' , d)
            conn.commit()


```
R言語で素数判定


## 素数判定
いろいろな場所で素数判定をおこなうコードはあるんだろうけど、自分の学習用にR言語で作成したものを載せます。


```r:is.prime
is.prime <- function(num){
	# if num is integer
	if (num != as.integer(num)) return("Input is not integer!")
	# if num is less than 2
	if (num < 2){
	 return("Input is wrong!")
	} 
	# if num is 2 or 3
	else if (num == 2 || num == 3) {
		return(TRUE)
	} else {

		for (i in 2:ceiling(num/2)){

			if ((num %% i) == 0) {
		
				return(FALSE)
			
			}
	 
	 	}
	 
	 return(TRUE)
	}
}

```

この関数Primeは引数に２よりも大きい自然数をとります。

上記のis.prime関数を利用して、指定した範囲の素数をベクトルで戻す関数も作ってみました。

```r:getPrime

getPrime <- function(max, min = 2){
	if (max != as.integer(max) || max < 2) return("Maximum value is wrong!")
	
	else if (min != as.integer(min)|| min < 2) return("Minimum value is wrong!")
	else {
	res <- NULL
	for (i in min:max){
		if(is.prime(i) == TRUE) res <- append(res,i)
		
	}
	return(res)
	}
}

```
Swiftにはなぜprotectedがないの？

古い記事だけど見逃してたので軽くまとめ
https://developer.apple.com/swift/blog/?id=11

# protectedは実質的に何も保護していない
サブクラスは新しいpublicなproperty/methodを経由して、protectedなAPIを外部に公開できてしまう

# Appleフレームワークはどうなの
Appleフレームワークにもサブクラスから呼び出されることを期待しているAPIがあるが、
- サブクラス以外から呼んでも意味が無いAPI
- 継承されるが直接呼び出されることは想定していないデザインのAPI (drawRectはUIKit以外から呼ばれない)
というケースがほとんどで、その場合protectedがあると便利なことがあるか、というと特にない

# extensionとの兼ね合い
protectedを導入すると、
- クラスのextensionから、protectedなAPIは呼べるようにすべきか？
- サブクラスのextensionから、スーパークラスのprotectedなAPIは呼べるようにすべきか？
などの問題が発生し、複雑さが増してしまう。

# わかりやすさ重視
swiftのアクセスコントロールは、
- class外からのアクセス可能性
- framework外からのアクセス可能性
という軸のみでデザインされている。

ここに、さらに「継承関係」という新たな軸は追加したくない。ややこしくなるから。

swiftのアクセスコントロールは理解のしやすさを優先しており、
この設計がシンプルで実用上問題ないものと信じている
クエリーで文字列を数値や日付に変換する(#エラー対策)

#テーブルのフィールドは、すべてテキスト形式で作成する。
Accessを覚えなくても、データベースを作成できるようにAccessデータベースのテンプレートを作成しています。その時の注意点の備忘録です。

フィールドの属性を色々と設定したくないので、すべてのフィールドを［テキスト］でフィールド定義しています。そうすると項目名が自由に変更できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/93227/421dccd7-d1d2-694e-10c0-a19bd1063804.png)

##テキストを数値に変換する。
金額は、数値なので、テキストを数値に変換する必要があります。
金額は、数量 x 単価 として計算式で定義します。

テキストを数値に変換するには、Val関数を使います。
`Val([MEI004])`

しかし、未入力の場合は、エラーになりますので、IsNull関数で判定してください。
`IIf(IsNull([MEI004]),0,Val([MEI004]))`

![image](https://qiita-image-store.s3.amazonaws.com/0/93227/695ae321-5335-2827-61f5-298ab2197d68.png)

`Val([MEI004])*Val([MEI006])`

このように定義するとデータが未入力の時に#エラーになるので、下記のように定義するとよい。

▼金額項目のクエリー定義
`IIf(IsNull([MEI004]),0,Val([MEI004]))*IIf(IsNull([MEI006]),0,Val([MEI006]))`

##テキストを日付に変換する

CDate関数を使うとテキストを日付に変換できます。
`日付: CDate([FLD011])`

しかし、未入力の場合は、エラー表示してしまいます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/93227/73f11b73-8b2a-56a2-942e-c895a0a1ac68.png)

これを回避するには、IsDate関数で判定します。

`日付: IIf(IsDate([FLD011]),CDate([FLD011]),Null)`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/93227/73738383-b60f-1a6a-2126-89a1f177db85.png)


こうやって、すべてのフィールドを［テキスト］で作成したデータベースが、
[汎用データベース　カードボックスBARI（Excel連携）](http://access-cloud.hatenablog.com/entry/database)

自由に項目が変更できるようにしています。
![image](https://qiita-image-store.s3.amazonaws.com/0/93227/092bc881-603b-f7f1-df09-27718a423a19.png)

---
#AccessとExcelを連携してクラウドシステムを作成する
データベースをAzure SQL にセットして、AccessやExcelのプログラムから データベースを遠隔地間で共有するシステムを公開しています。

[<img src="https://qiita-image-store.s3.amazonaws.com/0/93227/1e640f8b-edfd-2b4e-aafe-ce96a835dd7b.png" width=70%>](http://access-cloud.hatenablog.com/entry/database)
http://access-cloud.hatenablog.com/entry/database

[![image.png](https://qiita-image-store.s3.amazonaws.com/0/93227/a0f2b31e-825b-3198-58dc-3552beaad50b.png)](https://qiita.com/muramoto_jp/items/8e68d0df0507825d214c)
UITextfieldとUIDatePickerを連携させる

こんな感じでUITextfieldを選択すると、UIDatePickerが立ち上がって
日付を入力させる方法についてのご紹介です。
コードで比較的ラクに実装できます。
![Screen Shot 2016-01-27 at 14.48.50.png](https://qiita-image-store.s3.amazonaws.com/0/72150/901a11e5-f221-fbea-d068-70637f7d0406.png)

#UITextfieldを準備
まずはUITextfieldをstoryboardのuivewcontroller上に配置。
Outletで接続しておきます。

#コード編集
```swift:code
class birthdayInputViewController: UIViewController {
    
    @IBOutlet weak var birthday: UITextField!
    var toolBar:UIToolbar!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //datepicker上のtoolbarのdoneボタン
        toolBar = UIToolbar()
        toolBar.sizeToFit()
        let toolBarBtn = UIBarButtonItem(title: "DONE", style: .Plain, target: self, action: "doneBtn")
        toolBar.items = [toolBarBtn]
        birthday.inputAccessoryView = toolBar
    }
    
    //テキストフィールドが選択されたらdatepickerを表示
    @IBAction func textFieldEditing(sender: UITextField) {
        let datePickerView:UIDatePicker = UIDatePicker()
        datePickerView.datePickerMode = UIDatePickerMode.Date
        sender.inputView = datePickerView
        datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
    }
    
    //datepickerが選択されたらtextfieldに表示
    func datePickerValueChanged(sender:UIDatePicker) {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat  = "yyyy/MM/dd";
        birthday.text = dateFormatter.stringFromDate(sender.date)
    }
    
    //toolbarのdoneボタン
    func doneBtn(){
        birthday.resignFirstResponder()
    }
}
```
これだけで実装完了です。
[Realm]ObjectMapperでList型にマッピングする

ObjectMapperのgithubの[issue](https://gist.github.com/Jerrot/fe233a94c5427a4ec29b)に書いてあるが、


```
class ArrayTransform<T:RealmSwift.Object where T:Mappable> : TransformType {
  typealias Object = List<T>
  typealias JSON = Array<AnyObject>
  
  func transformFromJSON(value: AnyObject?) -> List<T>? {
    let result = List<T>()
    if let tempArr = value as! Array<AnyObject>? {
      for entry in tempArr {
        let mapper = Mapper<T>()
        let model : T = mapper.map(entry)!
        result.append(model)
      }
    }
    return result
  }
  
  func transformToJSON(value: Object?) -> JSON? {
    let mapper = Mapper<T>()
    var results = [AnyObject]()
    if let value = value {
      for obj in value {
        let json = mapper.toJSON(obj)
        results.append(json)
      }
    }
    return results
  }
}
```

これでOK
PIC32 Starter KitでHello World

PIC32MX1/2/5 Starter Kitを使ってとりあえずLEDをチカチカさせます。
![PIC32MX125_SK pic updated.jpg](https://qiita-image-store.s3.amazonaws.com/0/64910/85b6022b-ad09-9fc7-1d67-1b40d9ef0fe0.jpeg)
http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=dm320100

【環境】
OS:Windows 7（64bit）
IDE:MPLAB X IDE v3.20
***

*レガシィなライブラリを使った実装*

```c
#include <plib.h>

const int LED1 = BIT_0;
int main() {
   int i;
   /* setup LED */
   mPORTDSetPinsDigitalOut(LED1);
   while(1) {
        mPORTDToggleBits(LED1);
        for (i = 0; i < 10000; i++);// wait
   }
   return 0;
}
```
このコードはJohn S. Loomisさんの[Light Switches (updated 2008)](http://www.johnloomis.org/microchip/pic32/pio/lights.c.html)に記載されているコード参考にしています。
もちろん動作するのですが、この環境(MPLAB X IDE v3.20)で使用しようとすると、plib.hを引っ張ってくる必要がありました。PIC32 Peripheral LibraryをキーワードにMicrochipからダウンロードします。
このライブラリはレガシィなものなので、ビルド実行時に結構な数のwarningを見ることになります。

*plib.hを使用しない実装*

```c
#include <p32xxxx.h>

int main() {
   int i;
   /* setup LED */
   TRISDbits.TRISD0 = 0x00;//※1
   while(1) {
       LATDbits.LATD0 ^= 0x01;
       for (i = 0; i < 10000; i++);
   }
   return 0;
}
```
(※1)でDポートの0ビットを出力に設定しています。Dポートの0ビットというのがLED1にあたります。このTRISx(TRISA, TRISB etc)はThe data direction registerといって、データの方向を決めるレジスタです。1でInput、0でOutputに設定できます。
(※2)ではラッチの設定を行っており、実行の度にHigh-lowが切り替わるのでLEDが点滅するという動作になります。
forループはwaitの役割をしています。pic32用にxc32というコンパイラを使用しているのですが、Microchipの[FAQ](http://www.microchip.co.jp/support/faq_com-ass.html)にも記載がある通り「Delay関数(マクロ)はありません」。遅延時間が必要な場合は「タイマを使います」ということなので、

*タイマを使用した実装*

```c
#include <p32xxxx.h>
#include <plib.h>

int main()
{
   TRISDbits.TRISD0 = 0x00; 
   // Timer Setup
   OpenTimer2(T2_ON | T2_SOURCE_INT | T2_PS_1_256, 100);
   ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_2);
   INTEnableSystemMultiVectoredInt();
   
   while(1) {
      //do nothing
   }
   return 0;
}

//Timer2 ISR
void __ISR(_TIMER_2_VECTOR, ipl2) handlesTimer2Ints(void) {
    mT2ClearIntFlag();
    LATDbits.LATD0 ^= 0x01;
}
```
PICの情報はたくさんあるのですが、自分の環境で動かそうとするとやはりデータシートをしっかりと読む必要があるということを痛感しました。
[M5](http://umassamherstm5.org/tech-tutorials/pic32-tutorials/ubw32-tutorials)←ここのtutorialで勉強しました。
SharePoint online > フォルダ単位でアップロードする

```txt:動作確認
Windows 8.1 pro (64bit)
```

Office365などを利用したSharePoint onlineのサイトのドキュメント以下にフォルダ単位でアップロードしたい。

- OneDrive for business : よくわからんバグでアップロードが途中で失敗
- IEへのフォルダドロップ : 「申し訳ございません。機能しませんでした。」エラー

以下の方法では成功した。

1. サイトのアップロードしたいフォルダへ移動
2. 「ライブラリ」タブクリック
3. 「接続とエクスポート」の項目のうちアイコンになっている「エクスプローラで開く」をクリック
4. 開いたエクスプローラにフォルダごとドロップ

エクスプローラで開くを実行して１回目はIEが固まった。2回目にエクスプローラが開いて、フォルダドロップして一応成功した。

これで我慢して使おう。

### 正式な手順

Windows 7 proでも動作確認した。その結果わかった「正式な手順」は以下

1. サイトのアップロードしたいフォルダへ移動
2. 「ライブラリ」タブクリック
3. 「接続とエクスポート」の項目のうちアイコンになっている「エクスプローラで開く」をクリック
4. IEが固まるので、IEを終了する
5. IEを再起動して、サイトのフォルダへ移動する
6. 「接続とエクスポート」の項目のうちアイコンになっている「エクスプローラで開く」をクリック
7. エクスプローラが開くので、そこにフォルダをコピーする

環境によってはIEが固まらずにエクスプローラが開くかもしれない。
BigQueryのUDFでRECORD型やREPEATEDを使う時のサンプル

BigQueryのUDFはマニュアルを読むとRECORD型やらREPEATEDな値を使えるように書かれていたのだが、微妙に不親切でどういう書き方をすればいいか最初悩んだので、サンプルをメモしておく。

## スキーマ

| name | type | mode|
| ---- | ---- | ---- |
| id | STRING | REQUIRED |
| record | RECORD | REPEATED |
| __record__.number | INTEGER | REQUIRED |

## UDF

```js
function doubleNumberExample(row, emit) {
  var data = row.record.map(function(r) {
    return {'double_number': r.number * 2};
  });
  emit({id: row.id, record: data});
}

bigquery.defineFunction(
  'doubleNumber',                           // Name of the function exported to SQL
  ['id', 'record.number'],                    // Names of input columns
  [{'name': 'id', 'type': 'string'},  // Output schema
   {'name': 'record', 'type': 'record', 'mode': 'repeated', 'fields': [{'name': 'double_number', 'type': 'integer'}]}],
  doubleNumberExample                       // Reference to JavaScript UDF
);
```

## クエリ

```sql
SELECT
  id,
  record.double_number
FROM (doubleNumber(
  SELECT id, record.number FROM [dataset_test.test_nested]
))
```

マニュアルにもある通り、UDFのinput columnsとして指定する場合は、末端の属性名を示す必要がある。
上の例で言うと`record.number`がそれにあたる。
クエリの実行時にも`record.number`として指定する。`record`という親の名前は使わない。
そうすると、UDF内で`row.record`を呼ぶと`[{number: 1}, {number: 2}]`といった形のデータにアクセスできる。
上記の例では`Array.prototype.map`を使って数値を二倍にしている。

アウトプットのスキーマにもRECORD型とREPEATED modeが利用できる。これはマニュアルにある通りに書けば良い。
RECORD型はJSのオブジェクトをemitにそのまま渡せば良く、REPEATED modeのスキーマを指定した時はemitには配列を渡すことになる。
上記の例のように両方を組み合わせた場合は、オブジェクトの配列を渡す。

クエリからはRECORD型を持つテーブルにアクセスする時と同じ様に`record.double_number`という形でアクセスする。
この時、テーブルに出力してflatten resultsオプションをfalseにしておけば、ちゃんとRECORD+REPEATEDな形で出力できる。
PostgreSQLを使用しowncloudを構築

いつものようにメモ、ansibleから書き起こしたので微妙に間違っている可能性有り。
大まかな流れはあっていると思う。

# 目的
AWS環境EC2でPostgreSQLを利用しownCloudを構築する
導入が目的なのでapacheやphpの設定は省いてます

# 使用した環境
CentOS7
- postgresql-9.2.14-1.el7_1.x86_64
- httpd-2.4.6-40.el7.centos.x86_64
- php-5.4.45-3.el7.remi.x86_64
- owncloud-8.1.5-12.1.noarch

# 導入
## pgsqlの導入

```
# yum install postgresql-server postgresql-contrib

# postgresql-setup initdb
```

## owncloud用のユーザ/DBを作成
USERNAME,USERPASS,DBNAME等は適宜置き換えで

```
# useradd USERNAME
# passwd USERNAME

ーーーー postgresユーザにて実行 ーーーー 

$ psql -c "CREATE USER USERNAME WITH PASSWORD 'USERPASS';"

$ psql -c "CREATE DATABASE DBNAME TEMPLATE template0 ENCODING 'UNICODE';"

$ psql -c "ALTER DATABASE DBNAME OWNER TO USERNAME;"

$ psql -c "GRANT ALL PRIVILEGES ON DATABASE DBNAME to USERNAME;"
```

## PostgreSQLの設定
DBへのパスワードログインを許可する

```
# vi /var/lib/pgsql/data/pg_hba.conf

# "local" is for Unix domain socket connections only
# local   all             all                                     peer
local   all             all                                     md5
# IPv4 local connections:
# host    all             all             127.0.0.1/32            ident
host    all             all             all                     password
```

## リポジトリを追加
必要なものはremi,city-fan,owncloud

- http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/epel-release-latest-7.noarch.rpm
- http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
- http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel7.noarch.rpm

```
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/isv:ownCloud:community/CentOS_CentOS-7/isv:ownCloud:community.repo
yum install owncloud
```

## libcurlを導入
CentOS7にデフォルトで入っているlibcurl(7.29.0)ではownCloud上でエラーメッセージが出力するため

```
# curl --version
curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.15.4 zlib/1.2.7 libidn/1.28 libssh2/1.4.3

# yum -y install libcurl

# curl --version
curl 7.46.0 (x86_64-redhat-linux-gnu) libcurl/7.46.0 NSS/3.19.1 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.6.0

```

## PHPの導入

```
# yum install php php-common php-pdo php-mbstring php-ldap php-xml php-gd php-process php-pgsql php-pecl-apcu --enablerepo=remi

# systemctl start httpd
```

## ownCloudの導入

```
# yum install owncloud
```

# 導入後の設定

## 管理アカウント・データベースの設定
ownCloudの管理者ユーザの作成を行う。
また設定時に使用するデータベースを設定する。
![ownCloud-config.png](https://qiita-image-store.s3.amazonaws.com/0/55705/60bca13f-c087-e0fa-3b2f-7b31c95bf96f.png)
※この画面は `/var/www/html/owncloud/config/config.php` を消すと再度実施できるはず...

## メモリキャッシュが設定されていません。 ~
管理画面にて下記のメッセージが出力するので設定を行う

![owncloud管理画面.png](https://qiita-image-store.s3.amazonaws.com/0/55705/4f4c2887-6efc-3df1-6d17-4f7b5bc45fe8.png)

```
# vi /var/www/html/owncloud/config/config.php

20行目付近installedの後に追記
  'installed' => true,
  'memcache.local' => '\OC\Memcache\APC',
);
```

設定後「メモリキャッシュが設定されていません〜」の表示が消えることを確認する

## その他
エラー出力時は `/var/www/html/owncloud/data/owncloud.log` を確認する
### 「PostgreSQL >= 9 がインストールされているかどうか確認してください。」 が出力した
PostgreSQLのログインに失敗している可能性があるのでPostgreSQL側の設定やselinux、iptables等の設定を確認する。
自分が引っかかった時はpg_hba.confの設定だった
Android 6.0でのBLE、Wi-Fiのスキャンは位置情報を有効にしないといけない


# 位置情報との絡み

Android 6.0からパーミッションの仕組みや必要性が変わり、Wi-FiとBLEのスキャンに位置情報のパーミッションが必要になったことは知ってる方多いと思います。
しかし、実はパーミッションだけではなく、端末の位置情報が有効にされていないとスキャン結果を受け取れないパターンがあり、対応が必要となりそうです。

# 現象と原因

[こちらの記事](http://qiita.com/hisanaka/items/518db08d4a700247ec69)で細かくかいてあります。こちらの記事ではBLEの話だけですが、Wi-Fiの場合はWifiManager#getScanResults()の戻り値が常に空のリストになってしまいます。

# targetSdkVersion

上記の記事にある通り、一見targetSdkVersionを23未満にしてしまえば動きそうな感じがしますが、手元で試した感じでは Android 6.0 ではtargetSdkVersionを下げても位置情報がオフの場合、スキャンが正常に動作しませんでした。
しかし、Android 6.0.1に更新したところ、targetSdkVersionが23未満なら、位置情報オフの状態でもスキャンを動かすことができました。

コードレベルでの確認は取れていませんが、どうやらtargetSdkVersionによって対応できるのは6.0.1でないとダメで、6.0では対処できなさそうです。

# 結論

Android 6.0に最適化する場合はどのみちユーザーに位置情報の有効化を促すしかなさそうです。
パーミッション周りの扱いも変わったので、アプリとしてはtargetSdkVersionを23に上げ、しっかり対応を入れていくのがいいのでしょうね。


# [追記] 
## 2016/01/27

コードを追ったところ、6.0ではtargetSdkVerionによる判定がないため動かないようです。
6.0.1からはリンク先の記事の通りです。

```java:GattService.java
/** Determines if the given scan client has the appropriate permissions to receive callbacks. */
    private boolean hasScanResultPermission(final ScanClient client) {
        final boolean requiresLocationEnabled =
                getResources().getBoolean(R.bool.strict_location_check);
        final boolean locationEnabled = Settings.Secure.getInt(getContentResolver(),
                Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF)
                != Settings.Secure.LOCATION_MODE_OFF;
        return (client.hasPeersMacAddressPermission ||
                (client.hasLocationPermission && (!requiresLocationEnabled || locationEnabled)));
    }
```

## 2019/09/04

メモ：Android10からはBluetoothやWi-Fiのスキャンに`ACCESS_FINE_LOCATION`パーミッションも付与しなければならなくなった。
Ubuntu14.04でapt-get updateできなかった時の対処法

## 環境
マシン：自宅サーバー
OS：UbuntuServer 14.04.3

##　エラー発生
とりあえず一通りの設定をして、「さて、`apt-get update`するか」と思ったら、まさかのエラー。

```
$ sudo apt-get update
エラー http://jp.archive.ubuntu.com trusty InRelease

エラー http://security.ubuntu.com trusty-security InRelease

エラー http://jp.archive.ubuntu.com trusty-updates InRelease

エラー http://jp.archive.ubuntu.com trusty-backports InRelease

エラー http://security.ubuntu.com trusty-security Release.gpg
  'security.ubuntu.com' が一時的に解決できません
エラー http://jp.archive.ubuntu.com trusty Release.gpg
  'jp.archive.ubuntu.com' が一時的に解決できません
エラー http://jp.archive.ubuntu.com trusty-updates Release.gpg
  'jp.archive.ubuntu.com' が一時的に解決できません
エラー http://jp.archive.ubuntu.com trusty-backports Release.gpg
  'jp.archive.ubuntu.com' が一時的に解決できません
パッケージリストを読み込んでいます... 完了
...
```

## 解決方法
どうやらDNSの設定が上手いこといってないらしい。
`/etc/resolvconf/resolv.conf.d/base`にDNSの設定を書き込んだらOK。

（ネット上には`/etc/resolv.conf `に書けみたいな情報が落ちていたりするが、古い情報なので惑わされないようにしたい）

```
$ sudo vi /etc/resolvconf/resolv.conf.d/base
nameserver 8.8.8.8
```

保存後
`$ sudo reboot`
して
`$ sudo apt-get update`
したら、無事に実行することができた。
サクラエディタで開くを右クリックに追加するコマンド

サクラエディタを新規インストール時に右クリックメニューに追加できるがうっかり設定漏れたとか、サクラエディタを自動インストールする時に一緒に設定しておきたい人向け（＝僕）。

## 設定

「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell」レジストリハイブに追加すればよいので、ここに reg.exe コマンドで突っ込むだけ。

### 64bit環境

<pre>
reg add HKLM\SOFTWARE\Classes\*\shell\sakuraeditor /d "SAKURAで開く(&E)"
reg add HKLM\SOFTWARE\Classes\*\shell\sakuraeditor\command /t REG_SZ /d "\"%ProgramFiles(x86)%\sakura\sakura.exe\" \"%1\""
</pre>

### 32bit環境

<pre>
reg add HKLM\SOFTWARE\Classes\*\shell\sakuraeditor /d "SAKURAで開く(&E)"
reg add HKLM\SOFTWARE\Classes\*\shell\sakuraeditor\command /t REG_SZ /d "\"%ProgramFiles%\sakura\sakura.exe\" \"%1\""
</pre>
datetime文字列からunixtimeへの変換 on hive


```
unix_timestamp(log_datetime, 'yyyyMMdd HHmmss.SSS')
```

millsecondが効かない？？？ -> 効かない。秒まで
自前でパースして＋しかない？

結果も秒で返す。millsecにするには、×１０００+パースしたmill secをたす？
バージョン、0.12くらい
tomcatのログはローテーションの設定をしよう

tomcatのログを放置していて、ディスクの容量が危なくなりかけるという、いまどき残念のことをしたので・・

# ローテーション

linux環境であればlogrotateにやらせることもできますし、tomcatのログをlog4jに差替えることもできます。
どちらかで、ログローテーションのひととおりのことができるでしょう。

## logrotate

これはやるときはSELinuxではまることもあるようです。

http://ameblo.jp/virtangelo/entry-12039066609.html

http://aegif-labo.blogspot.jp/2014/01/centos64catalinaoutlogrotate.html

また、javaプロセスがcatarina.outをつかんでいるので、copytruncateのオプションがみそです。

http://wiki.inamuu.com/index.php?tomcat%E3%81%AE%E3%83%AD%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%AD%E5%AE%9A

```
/opt/liferay/tomcat/logs/catalina.out {
 missingok
 copytruncate   <--ここ
 weekly
 rotate 52
 create 0644 root root
}
```

## log4j

jarの差替えがあってやや億劫ですが、log4j自体が便利なので、乗り越えると幸せになれそうです。

http://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j

http://www.deftrash.com/blog/archives/2008/06/tomcat6_log4j.html

古いSolrをつかっている場合にも同様ですね。

http://www.findwise.com/blog/using-log4j-tomcat-solr-how-make-customized-file-appender/

##　参考サイト

http://www.asahi-net.or.jp/~aa4t-nngk/logrotate.html

https://www.ricksoft.jp/qa/questions/3342835/catalina.out

http://qiita.com/setoazusa/items/7854e8cc6dc84d19995c

http://server-setting.info/centos/loglotation.html
パフォーマンス最大化するための、ポモドーロテクニック応用編を考えてみた


## はじめに
ポモドーロテクニックは25分間、1つのタスクに集中して取り組み、終わったら5分間は休憩するという方法です。

今まで上記の原則に忠実にトライしてみていましたが、
最近、自分には合わないなーと感じていました。

## 25分だと短すぎる
自分の一日の主な仕事はプログラミングです。
プログラミングはとても集中力が必要な仕事で、25分で終えられるタスクはほとんどありません。

今まではタスクを小切りにして、25分ずつトライしていたのですが、それだと毎回集中が切れてしまうのでイマイチだなーと感じていました。

## 2時間単位で時間を区切る
ポモドーロテクニックの本質は「時間を区切って、タスクに集中し生産性が落ちてきたら休みをとること」だと思っていて集中する時間も休む時間も自分に合った時間にすればいいと思いました。

そこで最近はじめたのが、2時間毎に時間を区切るという方法です。

2時間あれば、ある程度まとまった単位でプログラミング出来ます。その2時間で終えたいタスクを設定します。

## 1日を8時間にして2時間×3+1時間(思考)+1時間(割り込み)で区切る
2時間単位で区切った時間は作業時間にするとして以下のような一日の流れにしています。

午前 2時間×1 (作業)
午後 2時間×2 (作業)
午後 1時間(思考)
割り込み　1時間

割り込みは1時間あるとして、残り7時間を分割しています。

1時間(思考)は普段の作業で感じた改善点や未来に向けての攻めのタスクを考える時間にあてています。何やかんやで時間をとれなくても最低30分は確保するようにします。

手を動かすのも大事ですが、思考の時間を別で確保するのは現状を改善していく上でとても大切です。


## 特に集中力が必要なタスクは午前中に設定する
午前の2時間では、一番集中できる時間なので最も集中力が必要なタスクを設定します。まだ未設計のタスクの調査・設計や資料作成など

## 午後の4時間はなるべく手を動かす系をやる
午後の4時間(2時間×2)は午前中に設計したタスクの実装やプルリクエストを出したタスクのレビュー修正など、手を動かす系をやるようにします。会議なども集中力が落ちてくる午後に設定します。

## 休みの取り方
* 1時間単位を目安に集中力が切れてきたり、タスクが1つ一段落したら1-3分、少し休憩をとるようにします。5分だと時間は長すぎてだれてしまうのでそれくらいになりました。
* 飲み物を飲むのも、同様に集中力が切れてきたり、1時間単位に飲むようにしました。そちらの方が集中力が続けることが出来ました。

## 最後に
まだまだ改善途中なので、ご意見など絶賛募集中です(^o^)
よく使うawkコマンドまとめ

# これってなんぞ
僕は記憶力がよろしくないので、awkのコマンドをここにメモしていきます。

# 変数の取り扱い
\$0 = 行全体
\$1 = 1列目
という順に続く。

#抽出
## 列名だけ指定
`cat data.txt | awk '{print $1, $2, $4}' > hogehoge.txt`

##条件付き
### 第n列がm以上のときを抽出
n = 3, m = 10とする。 
`cat data.txt | awk '$3 > 10 {print}' > hogehoge.txt`

#最大値・最小値
第3列における例として。


- 最大値
`cat data.txt | awk '{if(m<$3) m=$3} END{print m}'`

- 最小値
`cat data.txt | awk 'BEGIN{m=100000}{if(m>$3) m=$3} END{print m}'`

# 重複
## 重複行を削除
`cat data.txt | awk 'before != $0 {print; before = $0}' > hogehoge.txt`
## 第n列と第m列で重複している行を削除
`cat data.txt| awk '$1!=$2{print}' > hogehoge.txt `

# UNIXtimeから日付へ変換
またしても第3列をいじる。
`cat data.txt | awk '{print $1, $2, strftime("%Y-%m-%d",$3)}' > hogehoge.txt`
ちなみに、今回は、日付に関して年月日にしたが、時間とかも書きたければ
`%Y-%m-%d %H:%M:%S`
とかにすればOK。
ReactiveX 導入 日本語訳 (意訳)

## 元サイト

* [ReactiveX](http://reactivex.io/intro.html)

## 概要(ReactiveXとは)

* 複数の通知を一連の流れとして扱うことができるようにした ```the observer pattern``` の拡張です。

## Itemへのアクセス

* 単体のItemに非同期でアクセスするためにFutureパターンを使用。
* 複数のItemに非同期でアクセスするためにObservableを使用。

||single items|multiple items|
|---|---|---|
|synchronous|T getData()|Iterable<T> getData()|
|asynchronous|Future<T> getData()|Observable<T> getData()|

## ReactiveX と functional reactive programming(FRP) は違うものです。

* ReactiveX ・・・ 継続的に出力される別々の値によって動作します。
* FRP ・・・ 継続的に変化する値によって動作します。

## Iterable と Observable

|イベント|Iterable (pull)|Observable (push)|
|---|---|---|
|データを取り出す|T next()|onNext(T)|
|エラー検知|throws Exception|onError(Exception)|
|完了|!hasNext()|onCompleted()|


```txt:Iterable
getDataFromLocalMemory()
  .skip(10)
  .take(5)
  .map({ s -> return s + " transformed" })
  .forEach({ println "next => " + it })
```

```txt:Observable
getDataFromNetwork()
  .skip(10)
  .take(5)
  .map({ s -> return s + " transformed" })
  .subscribe({ println "onNext => " + it })
```

## Observableとは、Observer patternを拡張したものです。
* Observableは、```the observer pattern```を ```Iterable type```に適合するように拡張したものです。
 * 拡張している点は2点です。

### 2点の拡張内容
1. イテレーションが終了したことを、使用側に通知する方法を用意しています。
 * 例えば、 ```onCompleted``` が該当します。
2. イテレーションが異常終了したことを、使用側に通知する方法を用意しています。
 * ```onError``` が該当します。

(通知する方法・・・signal)
(通知を受け取る/処理する使用者側・・・consumer)
(signalを生み出す、Producerとしての機能を持つ側・・・Observable)

ReactiveXは、この拡張により ```Iterable``` と ```Observable``` を均質化しているのです。
均質化により、両者の違いはデータの流れが違うのみとなっています。
これは、```Iterable```と```Observable```で同じ操作が使えるということであり、とても重要なことです。
GitHubとCircleCIを連携させる

# はじめに
CircleCIは継続的インテグレーション(Continuous Integration)を行うためのWebサービスです。
指定したGitHubリポジトリをウォッチし、更新があると自動でビルド〜デプロイを行える仕組みを作れます。
とりあえず今回は初めのGitHubとCircleCIを連携させるところを行います。

# 事前準備
・[GitHubアカウントの取得](http://qiita.com/kooohei/items/361da3c9dbb6e0c7946b)
CircleCIを利用するにはGitHubアカウントが必要となります。

# 連携設定
#### 1.ログイン
[Circleci](https://circleci.com/)へアクセスし「Sign in」をクリックします。
![20160125_circleci01.png](https://qiita-image-store.s3.amazonaws.com/0/82090/7dfec881-aa24-9e8c-05d0-1102f5e1fe38.png)

#### 2.GitHubログイン
ログイン画面が表示されるので事前に準備したGitHubアカウントへログインします。
![20160125_circleci02.png](https://qiita-image-store.s3.amazonaws.com/0/82090/f592d016-db70-bb23-13cd-ff4fa87dc3f7.png)

#### 3.認証
認証画面が表示されるため、「Authorize application」をクリックします。
![20160125_circleci03.png](https://qiita-image-store.s3.amazonaws.com/0/82090/e216dafa-2cdb-ed89-37c3-e959ce58a43e.png)

#### 4.アカウントの選択
CircleCIと連携するGitHubアカウントを指定します。
![20160125_circleci04.png](https://qiita-image-store.s3.amazonaws.com/0/82090/26c3a9d3-a7c8-8260-d2fe-407f3c8ef8ed.png)

#### 5.リポジトリの選択
アカウントを指定すると、リポジトリがリストされるので連携したいリポジトリの「Build project」をクリックします。
![20160125_circleci05.png](https://qiita-image-store.s3.amazonaws.com/0/82090/73519472-6b06-00d4-10f5-9154aa2a8836.png)

#### 6.プランの選択
利用するプランを指定します。
![20160125_circleci07.png](https://qiita-image-store.s3.amazonaws.com/0/82090/b7b01720-8410-392c-1a1c-5ccdd2f992af.png)

#### 7.完了
以上で連携が完了です。
![20160125_circleci08.png](https://qiita-image-store.s3.amazonaws.com/0/82090/bcd9bede-56ab-605d-7a93-8ba705802215.png)



# 最後に
以上、今回はGitHubとCircleCIを連携させる部分だけ行いました。
実際にデプロイまで行うには_circle.yml_というファイルを使って管理する必要があります。
そこについては、また時間があるときに書ければと思います。
xcodeproj gemでxcschemeを弄ってみる

xcodeの`Project -> Scheme -> Edit Scheme`
から編集する設定xcschemeの設定は、
 `proj-name.xcodeproject/xcuserdata/developer_name/` 以下に保存され、
各開発者固有に持つもので、当然git管理下にも置かないですが
不意に消してしまったときに手動でポチポチいじるのが非効率な気がしていました。

git管理下に置くだけならばshared schemeにすれば良さそうですが、
今回はスクリプトからいじる方法を調べてみました。


[xcodeproj](http://rubygems.org/gems/xcodeproj) を使えば、スクリプトから弄れそうなので、試しにxcschemeの言語設定(`Option -> Application Language`)をいじってみました。

```rb

#!/usr/bin/env ruby
require 'xcodeproj'

lang = ARGV[0]

if lang.nil?
  puts "no language is specified"
  exit 1
end

Dir.glob('**/*.xcodeproj').each do |path|
  proj_name   = File.basename(path, ".xcodeproj")
  me          = `whoami`.strip
  scheme_path = path + '/xcuserdata/' + me + '.xcuserdatad/xcschemes/' + proj_name + '.xcscheme'
  next if !File.exist? scheme_path
  scheme  = Xcodeproj::XCScheme.new(scheme_path)

  la =  scheme.launch_action

  if !la.nil?
    prev = la.xml_element.attribute("language") || "system"
    if lang == "system"
      la.xml_element.delete_attribute "language"
    else
      la.xml_element.add_attribute "language", lang
    end
    puts "change language from #{prev} to #{lang} of #{scheme_path}"
  end
  scheme.save!
end

```

最終的に`REXML::Element#add_attribute`を直接叩いていたり、
スクリプトからxcschemeを書き換えてもプロジェクトを開き直さないと反映されないなど、少し残念ですが、使い方によっては作業の効率化が図れそうです。
Swift - iOSでビデオカメラを使用時、端末の向きに対応

# iOSでのビデオカメラ操作

QRコードの読み取る処理の実装が必要になり
下記URLを参考に実装していましたが
http://www.appcoda.com/qr-code-reader-swift/

端末を横向きの状態で、ビデオカメラを使用すると
端末の動きにあったプレビューがされず・・・

ほぼ一日調査してしまったので、忘れないようメモメモ。

## 解決

```resolve.swift
//参考にしたURLを引用しますと、以下を変更することで解決しました。
videoPreviewLayer?.connection.videoOrientation
```

## 実装

```qr.swift
func appOrientation() -> UIInterfaceOrientation {
	return UIApplication.sharedApplication().statusBarOrientation
}

// UIInterfaceOrientation -> AVCaptureVideoOrientationにConvert
func convertUIOrientation2VideoOrientation(f: () -> UIInterfaceOrientation) -> AVCaptureVideoOrientation? {
	let v = f()
	switch v {
		case UIInterfaceOrientation.Unknown:
			return nil
		default:
			return ([
				UIInterfaceOrientation.Portrait: AVCaptureVideoOrientation.Portrait,
				UIInterfaceOrientation.PortraitUpsideDown: AVCaptureVideoOrientation.PortraitUpsideDown,
				UIInterfaceOrientation.LandscapeLeft: AVCaptureVideoOrientation.LandscapeLeft,
				UIInterfaceOrientation.LandscapeRight: AVCaptureVideoOrientation.LandscapeRight
			])[v]
	}
}

func initilize() {
	//カメラ周りの初期化など…

	//■■■向きを教える。
	if let orientation = self.convertUIOrientation2VideoOrientation({return self.appOrientation()}) {
		videoPreviewLayer?.connection.videoOrientation = orientation
	}

	view.layer.addSublayer(videoPreviewLayer)
}


//画面の回転にも対応したい時は viewWillTransitionToSize で同じく向きを教える。
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
	super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)

	coordinator.animateAlongsideTransition(
		nil,
		completion: {(UIViewControllerTransitionCoordinatorContext) in
			//画面の回転後に向きを教える。
			if let orientation = self.convertUIOrientation2VideoOrientation({return self.appOrientation()}) {
				videoPreviewLayer?.connection.videoOrientation = orientation
			}
		}
	)
}
```

iOS8以降で動作を確認しています。
iPadは縦固定で審査が出せないようなので、無事解決して良かった。。


# 変更履歴
2016/01/27:
　端末の画面回転時、カメラの向きを変えるタイミングを***traitCollectionDidChange***ではなく
　**viewWillTransitionToSize**に変更しました。
Chromeのアドレスバーから任意のサイトを検索する

Chromeのアドレスバーからコマンドラインのような操作で直接任意のサイトの検索を行うことが出来ます。

![chrome-qiita-search.gif](https://qiita-image-store.s3.amazonaws.com/0/10364/eb6ad806-41fc-f717-c805-e2c3a2c5e322.gif)


## つかえる条件
検索フォームに入れた文字列がURLに含まれてること

### 例
例えば Qiita の場合、 `search?q=ほげほげ` のようにURLに検索文字列が入っているのでつかえます。
<img width="695" alt="「ほげほげ」の検索結果_-_Qiita.png" src="https://qiita-image-store.s3.amazonaws.com/0/10364/1988ad2b-59ff-5b14-33d4-1ab4ea8f1f87.png">

## 設定してみる

1. 検索したいサイトで検索してみる
2. URLをメモっておく
  - Qiitaだったら `http://qiita.com/search?q=ほげほげ&sort=rel`
3. メモったURLの検索文字列の部分を `%s` に置き換えておく
  - 例だと `http://qiita.com/search?q=%s&sort=rel`
4. Chromeの `設定` → `検索` → `検索エンジンの管理…` → `その他の検索エンジン` までたどる
  - <img width="508" alt="スクリーンショット_2016-01-27_11_19_17.png" src="https://qiita-image-store.s3.amazonaws.com/0/10364/cf1c1843-5f8f-2760-3728-f294c4848b7e.png">
  - <img width="800" alt="スクリーンショット_2016-01-27_11_20_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/10364/4856a09e-8011-550d-5072-5ac155b62988.png">
5. `サイトの名前(任意)`、`キーワード(自分でうちやすいもの)`、`メモって%sに置き換えたURL`を入力する
  - 例は `Qiita`, `qi`, `http://qiita.com/search?q=%s&sort=rel`
  - <img width="801" alt="スクリーンショット_2016-01-27_11_21_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/10364/ff298d6f-5db3-d022-40ad-a7c57b748db7.png">


## 使ってみる

1. アドレスバーに キーワード + スペース (今回の例だと `"qi "` ) を入力する
2. 続けて検索文字列を入力してエンター
3. おわり

![chrome-qiita-search.gif](https://qiita-image-store.s3.amazonaws.com/0/10364/eb6ad806-41fc-f717-c805-e2c3a2c5e322.gif)

## おわり

よく検索するサイトがある人は、この設定をしておくとちょっと便利になると思います。個人的には、以下の設定をしていたりします。

- `GitHub`, `gh`, `https://github.com/search?utf8=%E2%9C%93&q=%s`
- `アルク`, `alc`, `http://eow.alc.co.jp/search?q=%s`
- `cookpad`, `ck`, `http://cookpad.com/search/%s`
sqlplusで文字化けがシステム環境変数で対応できない件

#はじめに
Windows Server 2012R2でsqlplusを起動すると、文字化けが発生した。
システム環境変数で「Japanese_japan.JA16SJISTILDE」を指定しても文字化けが発生し続けた。
他のHPで対応方法が多く書かれているが、なかなか対応できなかったので記載する。

#対応
どこかのHPでレジストリの中の説明があったが、NLS_LANGEの登録されている場所が違っていたので、HPに書かれている場所に追加することにより解決した。
文字化けしていた時のレジストリパス：「HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE」にNSL_LANGEがあり、システム環境変数を変更すると内容が変更されるがここでは一向に文字化けが対応できなかった。
HPに書かれたレジストリパス：「HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home」にNLS_LANGEを追加することにより、文字化けが解決した。

以前、フリー版のOralceをインストールしたのが原因かもしれない