読者です 読者をやめる 読者になる 読者になる

tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン開発を承ります。ご連絡はこちらのホームページからお願いいたします。

アプリ不要 iPhoneのSafariでテキストから書式情報を除去する方法

純粋なテキストデータだけが欲しい時ってないですか?

私は、Gmailでメールを作るときにリッチテキストにしたくない(書式情報を無しにしたい)ので、そういう時がままあります。SafariのテキストをGmailアプリのメール作成時にコピペすると、書式もコピーしてしまうんですよね。

iPhoneの「メモ」っていうアプリもありますが、これも書式が付いてくる。

Windowsとかならメモ帳立ち上げて一度コピペしなおせば書式情報が落ちるのになー・・・とか思いつつ、iPhoneでそれだけの為にアプリを入れるのもどうかなと。そもそもそんなに使わないし。

ということで、Safariを使う。

Webページで複数行テキストが入れられるアレを書式情報を落とすエディタ代わりに使います。

やり方は簡単で、ブックマークとして以下の文字列を登録し、そのブックマークにアクセスする。

data:text/html;base64,PGh0bWw+PGhlYWQ+PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCB1c2VyLXNjYWxhYmxlPW5vIj48L2hlYWQ+PGJvZHk+PHRleHRhcmVhIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDo5MCU7Zm9udC1zaXplOjEuMmVtIj48L3RleHRhcmVhPjwvYm9keT48L2h0bWw+

f:id:tohokuaiki:20160912163444p:plain

この文字列何?

これは、以下のPHPを実行したものです。

data:text/html;base64,<?php
echo base64_encode('<html><head><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"></head><body><textarea style="width:100%;height:90%;font-size:1.2em"></textarea></body></html>');

このブックマークにアクセスすることで、Base64でコードしてこのHTMLを吐き出すようになります。

font-size:1.2emは自分がそれくらいが良いかなと思ったから。

鳥越さんのハフィントンポストのインタビューで打線組んだ

1.(右) 僕はニコ生は基本的にメディアとして認めていない
2.(中) 俺は知らなかったの。ニコニコから話が来ていたなんて。
3.(遊) ネットにそんなに信頼を置いていない。しょせん裏社会だと思っている。
4.(一) ペンの力って今、ダメじゃん。全然ダメじゃん。力ないじゃん。
5.(二) それは知らない。僕は全くノータッチだから。なくなったの?知らない。見たこともないし。(自分のホームページについて)
6.(左) 池上さんの話って何?選対の部分でカットしているから、なぜか僕は全く知らない。
7.(三) 日本国民はいつ気が付くのか。気が付いていないんだよ、まだ。騙されているんだよ。
8.(捕) 今の国民ははっきり言うと、ボケてますよ。
9.(投) 彼ら(若者)は何もわかってない。わかっていればもう少し真剣になる。

中継ぎ:宇都宮さんは、最終的にはそれを、口実に使ったんですよ。
抑え:俺も色々やったけれど、(メディアが)昔のようには取りあげてくれない。
代打:それは僕ではなくて、選対の判断だから。
代走:「厚化粧」ってそんなネガティブな意味じゃないからね。「病み上がり」に比べたら。

控え:
夕方にはもう帰って飯食ってるってこともありましたからね。「これでいいのかな、選挙」って思ったこともありましたよ(笑)
...と思った有権者も、いたかもしれない。証拠はないです。
気が付いたときには残り10日くらいだった
日本でリベラルが勝っていますか。勝っていないでしょ。負けてるんですよ。現実に。
僕は一つの捨て身の駒になってもよかったんだなと
日本のリベラルは「塊はあるな」と。でも足りない。

引用元

前編 www.huffingtonpost.jp 後編 www.huffingtonpost.jp

PostgreSQLのセットアップでいつもハマル僕のための覚書

PostgreSQLには苦手意識を持っている。MySQLならこんな簡単なのに・・・・。と。 単に使う機会が少ないので覚えないだけだったりするのだけど。。。

Roleの作成

MySQLのユーザーに対応するのがPostgreSQLのRoleの概念。

とりあえず、postgresのスーパーユーザーでpsqlコマンドでログインした後には一般ユーザー的なそれを作っておく。

postgres=# CREATE ROLE foo WITH LOGIN PASSWORD 'foo_password'

pg_hba.conf をいじってログインできるようにする。

ホスト別のアクセスコントロール。ここで、peerとなっているとPostgresのロールとUnixログインのアカウントが結び付けられる。 つまり、先ほど作ったpostgresのロールfooでログインしたい場合、

psql -U foo -W

で求められるプロンプトに入力するのはた際に先ほどのfoo_passwordではなく、Unixログインアカウントfooのパスワードなのである。

ということで、pg_hba.confを下記のように変更。md5というのは、create roleで設定したパスワードにするということ。

local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

psql -Uでログインできない

MySQLmysqlコマンドのノリでログインしようとするとログインできない。

$ psql -U foo -W

とすると、パスワードがあっててもログイン後に即座に「foo」というデータベースにつなげようとするのでこのデータベースがありませんエラーでログアウトされてしまう。そこで、必ずあるデータベースであるpostgresに接続指定する。

$ psql -U foo -W -d postgres

で何とかログインする。

データベースを作るにはテンプレートが必要

create databaseしようとしたらエラーが出た。

No relations found.
postgres=# create database  "xxx_development" ENCODING = 'unicode'
postgres-# ;
ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
HINT:  Use the same encoding as in the template database, or use template0 as template.

...templateってなんだっけ・・・と思って調べる・・・

blog.netandfield.com

PostgreSQL の createdb は、実際には template1 という空の DB をコピーして新しい DB を作成する。
で、この template1 という DB には initdb した時に指定した文字コード情報が登録されているのだ。
だから、「UTF-8 の文字コードを使う DB をコピーして、EUC-JP の文字コードを使う DB は作れんでぇ」と怒られてる。

じゃあ、どうすればいいか?・・・だが、エラーメッセージに HINT として示されているように、template0 を使えば良いわけね。
template0 は、文字コードの情報を持っていない、本当にピュアな DB なので、他の文字コードの DB の元ネタになるってわけだね。

ということで、

postgres=# create database  "xxx_development" ENCODING = 'unicode' --template=template0

として作成完了。

template0がなんかLATIN1になってるからやっぱりUTF8で作れない

Ubuntu16のまんまその状態だとこうなってた。

postgres=# \l
                                      List of databases
            Name             |  Owner   | Encoding | Collate | Ctype |   Access privileges
-----------------------------+----------+----------+---------+-------+-----------------------
 enju_leaf_junoe_development | junoe    | UTF8     | C       | C     |
 enju_leaf_junoe_test        | junoe    | UTF8     | C       | C     |
 postgres                    | postgres | LATIN1   | en_US   | en_US |
 template0                   | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
                             |          |          |         |       | postgres=CTc/postgres
 template1                   | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
                             |          |          |         |       | postgres=CTc/postgres

template2をUTF8で作る。(これがベストなのかは知らない)

postgres@local:~$ createdb template2 --locale=C --encoding=UTF8 --template=template0

そのあと、このtemplate2を基にしてDBを作成する。

Railsのバージョンアップとgemのバージョンアップをする

UbuntuのOSアップデートに合わせてRailsもアップデート

1つ前のエントリでUbuntuをアップデートしたので

railをアップデートしたいのだけど、そのRubyのパッケージマネージャであるgemをアップデート

gemをアップデートするためには、rubygems-updateというgemをインストールして使用する。

root@localhost:~# gem install rubygems-update
Fetching: rubygems-update-2.6.6.gem (100%)
Successfully installed rubygems-update-2.6.6
Parsing documentation for rubygems-update-2.6.6
Installing ri documentation for rubygems-update-2.6.6
Done installing documentation for rubygems-update after 49 seconds
1 gem installed

インストールできたので、gem自体をアップデート

root@localhost:~# gem -v
2.5.1
root@localhost:~# update_rubygems
RubyGems 2.6.6 installed
Parsing documentation for rubygems-2.6.6
Installing ri documentation for rubygems-2.6.6

..........
このあたり長々とチェンジログやら表示
..........

root@localhost:~# gem -v
2.6.6

ということで、2.6.6になった。

railsのアップデート

root@localhost:~# gem update rails
Updating installed gems
Updating rails
.....(略


root@localhost:~# rails -v
Rails 5.0.0

Ubuntu server を14から16にアップグレードしてPostgresを9.5にする

Postgresqlの9.5を使いたくなったのだけど、Ubuntu14だと9.3なのでUbuntu16にアップデートしてPostgresを9.5にしようということに。

あ、UbuntuはもちろんUbuntuサーバーです。

とりあえず、Ubuntuのアップデート

死ぬほど簡単だった。

$ sudo do-release-upgrade -d

これだけ。色々とY/Nはあったけど。

Postgres9.5のインストールと起動

とりあえず、

$ sudo apt-get install postgresql-9.5
$ sudo apt-get install postgresql-client-9.5

ほんで、

$ sudo service postgresql stop
$ sudo service postgresql start

とすると、9.3と9.5が同時に立ち上がる。ポートが違う。

postgres@localhost:~$ psql -p 5432
psql (9.5.3, server 9.3.13)
Type "help" for help.

postgres=# select version();
                                                   version
--------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.3.13 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4, 64-bit
(1 row)

postgres=# \q
postgres@localhost:~$ psql -p 5433
psql (9.5.3)
Type "help" for help.

postgres=# select version();
                                                 version
----------------------------------------------------------------------------------------------------------
 PostgreSQL 9.5.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413, 64-bit
(1 row)

こんな感じ。

9.3は普通に使わないので

Ubuntuの機能として、Postgresのバージョン違いとかクラスタにして管理するとかがあるらしい。

lets.postgresql.jp

この同居機能もその1つなので、OFFにしてやる。

$ emacs /etc/postgresql/9.3/main/start.conf
manual

として、通常のinitでは起動しなくする。

disabledとすると通常のinitどころかUbuntuのPostgres制御コマンドのpg_ctlclusterでも使えない。ただし、pg_ctlclusterではなく通常のPostgresコマンドを使えば問題なく起動できる。*1

ついでにポートを通常値にしておく。

9.3が5432ポートを使ってたので、9.5がそれを使うようにする。 /etc/postgresql/9.5/main/postgresql.conf

port = 5432

/etc/postgresql/9.3/main/postgresql.conf

port = 5433

とする。

# /etc/init.d/postgresql restart
# su - postgres -c "psql"
psql (9.5.3)
Type "help" for help.

postgres=# select version();
                                                 version
----------------------------------------------------------------------------------------------------------
 PostgreSQL 9.5.3 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413, 64-bit
(1 row)

*1:通常のコマンドを使うというのはかなりのメンテナンスモードなので誤操作防止のための設定値。