標準エラー出力にprint

`perl`において表題の通り。ちょっとしたスクリプトを書いていて、どうやるんだったっけ?となったのでメモ。

■ 環境

  • Perl 5.22.1

■ print

単純に`print`すると標準出力になる。が、実際には下記を行っているのと同等である。

print STDOUT "test\n";

標準エラー出力には下記のようにする。

print STDERR "test\n";

以上。

%2520

表題の文字列について。

■ 環境

  • Mac OSX El Capitan

■ urldecode

下記のような文字列があった。

Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_11_6)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/63.0.3239.84%2520Safari/537.36

URLエンコードされているんだな、と思いデコードしてみる。

$ echo "Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_11_6)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/63.0.3239.84%2520Safari/537.36" | nkf -w --url-input
Mozilla/5.0%20(Macintosh;%20Intel%20Mac%20OS%20X%2010_11_6)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/63.0.3239.84%20Safari/537.36
$

実行してみたがまだエンコードされているようだ。さらにデコードしなければなさそうである。

echo "Mozilla/5.0%2520(Macintosh;%2520Intel%2520Mac%2520OS%2520X%252010_11_6)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/63.0.3239.84%2520Safari/537.36" | nkf -w --url-input | nkf -w --url-input
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36
$

これで目的の文字列が得られた。

単なる空白を2度URLエンコードしたことにより”%2520“という文字列が現れていたようである。

以上。

■ 関連

urldecode

Chromeのfaviconキャッシュを削除

Macにおいて表題の通り。

■ 環境

  • Google Chrome
  • Mac OSX El Capitan

■ favicon

古いfaviconがキャッシュされているようで新しいものが確認できない。どうやらMacでは下記にキャッシュファイルがあるようだ。

/Users/withsin/Library/Application Support/Google/Chrome/Default/Favicons

ちなみに”Favicons“はディレクトリではなくファイルである。確認してみると下記であった。

$ file Favicons
Favicons: SQLite 3.x database
$

ということは取得できるのかな?と思ってやってみる。

$ sqlite3 Favicons
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .tables
favicon_bitmaps  favicons         icon_mapping     meta
sqlite> 
sqlite> .schema favicons
CREATE TABLE favicons(id INTEGER PRIMARY KEY,url LONGVARCHAR NOT NULL,icon_type INTEGER DEFAULT 1);
CREATE INDEX favicons_url ON favicons(url);
sqlite> 
sqlite> .schema favicon_bitmaps
CREATE TABLE favicon_bitmaps(id INTEGER PRIMARY KEY,icon_id INTEGER NOT NULL,last_updated INTEGER DEFAULT 0,image_data BLOB,width INTEGER DEFAULT 0,height INTEGER DEFAULT 0,last_requested INTEGER DEFAULT 0);
CREATE INDEX favicon_bitmaps_icon_id ON favicon_bitmaps(icon_id);
sqlite> 
sqlite> .schema icon_mapping
CREATE TABLE icon_mapping(id INTEGER PRIMARY KEY,page_url LONGVARCHAR NOT NULL,icon_id INTEGER);
CREATE INDEX icon_mapping_page_url_idx ON icon_mapping(page_url);
CREATE INDEX icon_mapping_icon_id_idx ON icon_mapping(icon_id);
sqlite> 
sqlite> .schema meta
CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR);
sqlite> 

favicons“テーブルにURLが、”favicon_bitmaps“テーブルに実際のfaviconが、それらを紐付けるマッピングテーブルが”icon_mapping“テーブルっていったところだろうか。

とりあえずこのsqliteのDBファイルを丸っと削除すればfaviconのキャッシュは削除されるようだ。

$ rm Favicons

以上。

datetime型をunixtimeに変換

MySQLにおいて表題の通り。以前はunixtime(エポック秒)を人が理解しやすい表記に変換したが今回は逆である。

■ 環境

  • MySQL 5.6.35

■ unix_timestamp

datetime型のカラムが存在する。これをunixtimeで取得するには下記のように”unix_timestamp()“を使用すれば良い。

mysql> desc users;
+------------------------+--------------+------+-----+---------+----------------+
| Field                  | Type         | Null | Key | Default | Extra          |
+------------------------+--------------+------+-----+---------+----------------+
| id                     | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name                   | varchar(255) | YES  |     | NULL    |                |
  :
| created_at             | datetime     | NO   |     | NULL    |                |
| updated_at             | datetime     | NO   |     | NULL    |                |
  :

mysql>

ここから”created_at“をunixtimeで取得したい。

mysql> select id, name, unix_timestamp(created_at) from users;
+----+------------+------------+
| id | name       | created_at |
+----+------------+------------+
|  1 | test       | 1512623164 |
|  2 | test       | 1512975404 |
  :
mysql>

以上。

■ 関連

unixtimeをSQLで変換

ipcrm

先日のエントリの続きである。不要なセマフォが残ってしまっている件。

■ 環境

  • CentOS 6.9

■ ipcrm

セマフォの一覧は先日のエントリの通りに取得できた。視認性を良くする為に不要な情報は削除し、セマフォだけに絞ることにする。

$ sudo ipcs -s

------ セマフォ配列 --------
キー     semid      所有者  権限     nsems
0x00000000 0          root       600        1
0x00000000 65537      root       600        1
0x7a00ec33 98306      root       600        13
0x00000000 262147     nginx      600        1
0x00000000 294916     nginx      600        1
0x00000000 327685     nginx      600        1
0x00000000 360454     nginx      600        1

$

また、作成時間も一緒に表示することも可能なようだ。

$ sudo ipcs -st

------ セマフォ 命令/変更回数 --------
semid    所有者  最終操作               最終の変更
0        root        Fri Jan 12 11:52:19 2018   Fri Jan 12 11:52:18 2018
65537    root        Fri Jan 12 11:52:20 2018   Fri Jan 12 11:52:19 2018
98306    root        Mon Jan 15 15:29:10 2018   Mon Jan 15 10:54:47 2018
262147   nginx       セットされていま   Mon Jan 15 19:15:28 2018
294916   nginx       セットされていま   Mon Jan 15 19:15:28 2018
327685   nginx       セットされていま   Mon Jan 15 19:17:22 2018
360454   nginx       セットされていま   Mon Jan 15 19:17:22 2018

$

次に不要なセマフォの削除は下記のようにする。

$ sudo ipcrm -s [semid]

ただし、どのセマフォを削除して良いかの判断は別途必要である。

以上。

■ 関連

ipcs