ためすう

Mac のターミナルから Finder を開く

2018-05-21

目的

Mac のターミナルから、 Finder を開く方法を調べました。

方法

open コマンドを利用します。

下記例では、ホームディレクトリを Finder で開きます。

$ open ~

参考URL

Markdown の記法

2018-05-20

目的

マークダウンの記法を忘れてしまうことがあるので

よく使うものをまとめました。

マークダウンの記法

見出しについて

# 見出し1
## 見出し2
### 見出し3
#### 見出し4
##### 見出し5

見出し1

見出し2

見出し3

見出し4

見出し5

箇条書きについて

* 箇条書き1
* 箇条書き2
* 箇条書き3
  • 箇条書き1
  • 箇条書き2
  • 箇条書き3

番号リストについて

1. 番号1
2. 番号2
  1. 番号1
  2. 番号2

ハイパーリンクについて

[Google](https://www.google.co.jp/?gws_rd=ssl)

Google

コードについて

`echo $test`

echo $test

引用について

> 引用1
> 引用2

引用1 引用2

テーブルについて

| 見出し1 | 見出し2 | 見出し3 |
| ------- | :-----: | ------: |
| item1   | center  | right   |
| item2   | abc     | def     |
見出し1 見出し2 見出し3
item1 center right
item2 abc def

参考URL

Markdown記法 チートシート

MySQL のパスワードを忘れてしまった時にすること

2018-04-15

動作確認バージョン

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using  EditLine wrapper

目的

MySQL でパスワードを忘れてしまい、どうすることもできなくなったのでログインできるようにします。

手順

MySQL を停止する

$ sudo /etc/init.d/mysql stop
Shutting down MySQL.. SUCCESS!

セーフモードで起動

$ sudo mysqld_safe --skip-grant-tables &
[1] xxxxx

root ユーザーで MySQL に接続する

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.25 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root パスワードを設定する

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

-- root ユーザーに root というパスワードを設定します
mysql> update user set password=PASSWORD("root") where User='root';
mysql> flush privileges;

MySQL を起動する

$ sudo /etc/init.d/mysql stop
Shutting down MySQL..180227 03:29:21 mysqld_safe mysqld from pid file /var/lib/mysql/localhost.localdomain.pid ended
 SUCCESS!

[vagrant@localhost ~]$ sudo /etc/init.d/mysql start
Starting MySQL. SUCCESS!

参考URL

MySQL のカラム追加時に追加場所を指定する

2018-04-08

動作確認バージョン

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using  EditLine wrapper

目的

MySQL 5.6 のカラム追加時に追加場所を指定します

設定する

仮に下記のテーブルがあるとします。

CREATE TABLE `test_table` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `col1` varchar(50) DEFAULT NULL,
  `col3` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

カラム追加

mysql> ALTER TABLE test_table ADD col2 varchar(50) DEFAULT NULL AFTER col1;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

確認する

mysql> show create table test_table\G
*************************** 1. row ***************************
       Table: test_table
Create Table: CREATE TABLE `test_table` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `col1` varchar(50) DEFAULT NULL,
  `col2` varchar(50) DEFAULT NULL,
  `col3` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

意図したところにカラムが追加されました。

参考URL

MySQL でスロークエリの設定をする

2018-04-01

動作確認バージョン

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.25, for Linux (x86_64) using  EditLine wrapper

目的

MySQL 5.6 で スロークエリを設定します

設定する

mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.00 sec)

mysql> set global long_query_time=3;
Query OK, 0 rows affected (0.00 sec)

-- 設定が反映されたことを確認するため、1回終了します
mysql> exit
Bye

確認する

mysql> show variables like 'slow_query%';
+---------------------+-----------------------------------+
| Variable_name       | Value                             |
+---------------------+-----------------------------------+
| slow_query_log      | ON                                |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log |
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)

mysql> show variables like 'long_query%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

mysql> show variables like 'log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)

log のアウトプット先は、log_output で設定します

log ファイルにしたり、table に保存したりできます

参考URL

Python のバージョンが低いと Telnet で timeout が指定できない件

2018-03-25

目的

Python を触っていた時、Telnet の第3引数に値が入れるとエラーが発生しました。

その原因を調べてみました。

原因

tn = telnetlib.Telnet("www.example.com", port, timeout)

↓

tn = telnetlib.Telnet("www.example.com", port)

参考 URL のドキュメントを見ると分かるのですが、Python 2.5 では

第 3 引数 の timeout が対応していないことが原因でした。

参考URL

unix でログインしているマシンの情報を得る

2018-03-19

目的

複数台の Web サーバーから取得したログファイルを整理するためです。

オプションでいろいろ情報を見ることができます。 今回見たのは、 OS が何 bit か、サーバーの ip アドレスになります。

自分の Vagrant 環境で試しました。

コマンド

何 bit かを調べます

$ uname -p

出力

x86_64

hostname を調べます

$ uname -n

出力

localhost.localdomain

ファイル名にする

$ touch $(uname -n)-$(uname -p).log

localhost.localdomain-x86_64.log のファイルが作成されます。

オプションについて

-p, –processor print the processor type or “unknown”

-n, –nodename print the network node hostname

参考URL

Vagrant が起動しなくなった時にすること

2018-03-17

目的

数年ぶりに Vagrant で環境を立ち上げようとしたら、エラーが発生するようになったので

起動できるようにします。

発生しているエラー

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'chef/centos-6.5' is up to date...
==> default: There was a problem while downloading the metadata for your box
==> default: to check for updates. This is not an error, since it is usually due
==> default: to temporary network problems. This is just a warning. The problem
==> default: encountered was:
==> default:
==> default: The requested URL returned error: 404 Not Found
==> default:
==> default: If you want to check for box updates, verify your network connection
==> default: is valid and try again.
==> default: Clearing any previously set network interfaces...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface
VBoxManage: error: Context: "int handleCreate(HandlerArg*, int, int*)" at line 66 of file VBoxManageHostonly.cpp

手順

Virtual Box を再インストール

こちらからダウンロードして、インストールし直します。

起動してみます。

$ vagrant up
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:

Vagrant has detected that you have a version of VirtualBox installed
that is not supported. Please install one of the supported versions
listed below to use Vagrant:

4.0, 4.1, 4.2, 4.3

Vagrant のバージョンが古いと言われました。

Vagrant のバージョンを確認します。

$ vagrant version
Installed Version: 1.7.2
Latest Version: 2.0.2

To upgrade to the latest version, visit the downloads page and
download and install the latest version of Vagrant from the URL
below:

  http://www.vagrantup.com/downloads.html

If you're curious what changed in the latest release, view the
CHANGELOG below:

  https://github.com/mitchellh/vagrant/blob/v2.0.2/CHANGELOG.md

Vagrant が古いみたいなので新しいバージョンを再インストールします。

Vagrant の再インストール

こちらから再インストールします。

また起動してみます。

$ vagrant up
Vagrant failed to initialize at a very early stage:

The plugins failed to initialize correctly. This may be due to manual
modifications made within the Vagrant home directory. Vagrant can
attempt to automatically correct this issue by running:

  vagrant plugin repair

If Vagrant was recently updated, this error may be due to incompatible
versions of dependencies. To fix this problem please remove and re-install
all plugins. Vagrant can attempt to do this automatically by running:

  vagrant plugin expunge --reinstall

Or you may want to try updating the installed plugins to their latest
versions:

  vagrant plugin update

Error message given during initialization: Unable to resolve dependency: user requested 'dotenv (> 0)'

またエラーが発生してしまいました。

vagrant plugin のバージョンがおかしいみたいなので、インストールし直します。

vagrant plugin をインストールし直す

$ vagrant plugin expunge --reinstall

起動してみます。

$ vagrant up

起動することができました。

参考URL

PHP でデザインパターン (シングルトン)

2018-03-11

Singleton の目的

  • 指定したクラスのインスタンスが絶対に1個しか存在しないことを保証したい
  • インスタンスが1個しか存在しないことをプログラム上で表現したい

また、

たとえば、システムの設定を表現するクラスや、システム全体で一度読み込んだデータをキャッシュしておくクラスで利用する。

Singleton の実装に関して

  • Singleton クラスのコンストラクタは private にする。

  • Singleton クラス外からコンストラクタを呼ぶことを防ぐため。

  • 下記の方法でインスタンス生成できないようにする

    • 自身を外部から new する
    • 外部から clone する
    • 派生クラスを new する(派生クラスを作ることができないようにする)

Singleton の実装例

<?php
// final で派生クラスを作ることができないようにする
final class Singleton
{
    private static $instance;
    private $id;

    private function __construct()
    {
        $this->id = time();
    }

    private function __clone()
    {
    }

    public static function getInstance()
    {
        if (is_null(self::$instance)) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    public function getId()
    {
        return $this->id;
    }
}

$ins1 = Singleton::getInstance();
sleep(3);
$ins2 = Singleton::getInstance();

print($ins1 === $ins2);
print "\n";
print($ins1->getId() === $ins1->getId());
print "\n";

出力結果

1
1

エラーパターンの確認

  • 自身を外部から new する
$ins0 = new Singleton();

// Fatal error: Call to private Singleton::__construct() が発生
  • 外部から clone する
$clone_class = clone $ins1;

// Fatal error: Call to private Singleton::__clone() が発生
  • 派生クラスを new する(派生クラスを作ることができないようにする)
class ChildSingleton extends Singleton
{
    public function __construct()
    {
    }
}
$ins3 = new ChildSingleton();

// Fatal error: Class ChildSingleton may not inherit from final class (Singleton) が発生

参考

gmailのメールアドレスをOutlook 2007で使う

2018-03-10

目的

html メールの作成をした時

動作確認で Outlook で受信メールを見ることができるようにすることです。

方法

Outlook の設定にて

受信メールサーバー、送信メールサーバーに gmail のメールサーバーの情報を入力します。

メールサーバーへのログオン情報には gmail のアカウント情報を入力します。

これで gmail のメールアドレスに来たメールを Outlook で見ることができるようになりました。

受信メールサーバーとは

  • 「POP」は「Post Office Protocol(ポスト・オフィス・プロトコル)」の略

送信メールサーバーとは

  • 「SMTP」とは「Simple Mail Transfer Protocol(シンプル・メール・トランスファー・プロトコル)」の略

参考URL