元RX-7乗りの適当な日々 このページをアンテナに追加 RSSフィード Twitter

RX-7(FD3S)WRX STI関連のキーワードで検索されて来られた方へ。
右サイドのカテゴリ『』をクリックすると関連する項目だけが表示されます。
日々の写真は『Flickr』で公開しています。

2014/01/27

nscdが保持しているキャッシュをクリアする


hostsファイルの記載に誤りがあるまま、telnetコマンドを実行した。

で、誤りに気付き、hostsに記載のIPアドレスを修正し、telnetコマンドを再度実行したが、なぜか古い記載のアドレスに接続しにいく。

むむっ、と思って、straceしてチェックしたら、

connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = 0

↑の通り、nscdを見に行っておった。


# nscd -i hosts

ということで、↑のような感じで、nscdの持っているhostsのキャッシュを破棄して、無事期待通りの動作になった。

・・・たまに調べるから、ここに残しておく。

それでは! =͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́


追記

やっぱりそうだよなぁ。うーむ。

デーモンは( passwd データベースについては /etc/passwd、 hosts データベースについては /etc/hosts と /etc/resolv.conf というような)それぞれのデータベースのための設定ファイルを見張って、 これらが変更されるとキャッシュをフラッシュする。 しかし、これは( inotify(7) が利用可能で、glibc 2.9 以降が利用可能な場合を除いて) 短い遅延の後に起こり、またこの自動検出は非標準 NSS モジュールが /etc/nsswitch.conf で指定されている場合はその設定ファイルには対応しない。 この場合、データベースの設定ファイルを変更した後、 nscd のキャッシュを無効にするために以下のコマンドを実行する必要がある:

$ nscd -i <database>

2014/01/21

Linuxで使っているNICのドライバやバージョンを調べる方法いろいろ


稼働しているLinux OSで、ネットワークインターフェースにどのドライバ(のどのバージョン)が実際に適用されているのか、をどうやって調べたくなる時があります。

覚えている限りでその色々を書いてみる。ちなみに、以降の紹介例ではCentOS 6系で試してみました。

他にナイスなやり方とかご存知であれば、教えてください。


dmesg (or /var/log/boot.log)

dmesgのバッファ溢れが起こっていない前提で、dmesgからチェックする方法。

使っているインターフェース名でgrepる。

# dmesg | grep eth0
igb 0000:01:00.0: eth0: (PCIe:2.5Gb/s:Width x4) 00:26:xx:xx:xx:xx
igb 0000:01:00.0: eth0: PBA No: 313130-032
ADDRCONF(NETDEV_UP): eth0: link is not ready
igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
eth0: no IPv6 routers present

こんな感じで、eth0には"igb"ドライバがあたっていることがわかる。


modinfo (ロードされているドライバモジュールの詳細)

# modinfo igb
filename:       /lib/modules/2.6.32-220.17.2_dev.el6.x86_64/kernel/drivers/net/igb/igb.ko
version:        3.0.6-k
license:        GPL
description:    Intel(R) Gigabit Ethernet Network Driver
author:         Intel Corporation, <e1000-devel@lists.sourceforge.net>

・・・・・省略・・・・・

こんな感じでmodinfoコマンドでモジュール名を指定すれば、ズラズラと出てくる。

モジュールのパスとかバージョンとか。ものによっては読み込まれているオプションパラメータとか。


# modinfo -F version igb
3.0.6-k

バージョンだけ確認したい、とかだったら↑な感じでもOK。


ethtool

# ethtool -i eth0
driver: igb
version: 3.0.6-k
firmware-version: 2.1-5
bus-info: 0000:01:00.0

ethtoolコマンドの"-i"オプションで、そのインターフェースが実際にどのドライバのどのバージョンを読み込んでいるか確認できる。


lspci

・・・・・省略・・・・・

01:00.0 Ethernet controller [0200]: Intel Corporation 82575EB Gigabit Network Connection [8086:10a7] (rev 02)
        Subsystem: Fujitsu Technology Solutions Device [1734:1128]
        Kernel driver in use: igb
        Kernel modules: igb

・・・・・省略・・・・・

lspciコマンドでも、どのバスにあるデバイスのコントローラがこのチップで、このkernel driver (module)が適用されているかどうかを確認できます。

こんな感じで結構たくさん情報が出てくるので、適当にgrep(ry


udevadm

# udevadm info --query=all --path=/sys/class/net/eth0
P: /devices/pci0000:00/0000:00:01.0/0000:01:00.0/net/eth0
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/net/eth0
E: INTERFACE=eth0
E: IFINDEX=2
E: SUBSYSTEM=net
E: INTERFACE_NAME=eth0
E: ID_VENDOR_FROM_DATABASE=Intel Corporation
E: ID_MODEL_FROM_DATABASE=82575EB Gigabit Network Connection
E: ID_BUS=pci
E: ID_VENDOR_ID=0x8086
E: ID_MODEL_ID=0x10a7
E: NET_MATCHID=0000:01:00.0
E: ASSIGNED_INTERFACE_NAME=eth0
E: MATCHADDR=00:26:xx:xx:xx:xx
E: MATCHIFTYPE=1
E: COMMENT=PCI device 0x8086:0x10a7 (igb)

udevadm infoでもigbとわかりますね。

もしくは、、、

# udevadm info -a --path=/sys/class/net/eth0

・・・・・省略・・・・・

  looking at device '/devices/pci0000:00/0000:00:01.0/0000:01:00.0/net/eth0':
    KERNEL=="eth0"
    SUBSYSTEM=="net"
    DRIVER==""
    ATTR{addr_assign_type}=="0"
    ATTR{addr_len}=="6"
    ATTR{dev_id}=="0x0"
    ATTR{ifalias}==""
    ATTR{iflink}=="2"
    ATTR{ifindex}=="2"
    ATTR{features}=="0x114bb3"
    ATTR{type}=="1"
    ATTR{link_mode}=="0"
    ATTR{address}=="00:26:xx:xx:xx:xx"
    ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
    ATTR{carrier}=="1"
    ATTR{speed}=="1000"
    ATTR{duplex}=="full"
    ATTR{dormant}=="0"
    ATTR{operstate}=="up"
    ATTR{mtu}=="1500"
    ATTR{flags}=="0x1003"
    ATTR{tx_queue_len}=="1000"

  looking at parent device '/devices/pci0000:00/0000:00:01.0/0000:01:00.0':
    KERNELS=="0000:01:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="igb"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x10a7"
    ATTRS{subsystem_vendor}=="0x1734"
    ATTRS{subsystem_device}=="0x1128"
    ATTRS{class}=="0x020000"
    ATTRS{irq}=="28"
    ATTRS{local_cpus}=="ffff"
    ATTRS{local_cpulist}=="0-15"
    ATTRS{modalias}=="pci:v00008086d000010A7sv00001734sd00001128bc02sc00i00"
    ATTRS{numa_node}=="-1"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

・・・・・省略・・・・・

これでも詳細に情報が取れます。あとは適当にgrep(ry


それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́

2014/01/20

UUIDをワンライナーで生成する


ちょっと調べたのでメモ。

UUID(Universally Unique IDentifier)の詳細については下記リンク先をご参照いただくとして、UUIDの生成については様々なプラットフォームでサポートされているのと、いくつかバージョンが存在します。


バージョン4(完全ランダム生成)を使う前提で、いくつかワンライナーで実行するやり方を残しておきます。


uuidgenコマンド(Linux)

$ uuidgen
f6574b6b-02f7-4255-865b-dda39dcd0979

オプションなしで実行すると、上記の通りデフォルトはバージョン4で返してくれます。

(UUIDの 00000000-0000-X000-0000-000000000000 のXの部分の数字がバージョンを示す)


オプション:
 -r, --random     generate random-based uuid
 -t, --time       generate time-based uuid

ヘルプを見る限り、他は"-t"をつけると、バージョン1でも返してくれるみたい。


Python

$ python -c 'import uuid;print uuid.uuid4()'
25ce40b4-aa93-4f7b-967e-694cf3000720

uuidモジュールでは、 uuid1(), uuid3(), uuid4(), uuid5() が提供されている。(バージョン1, 3, 4, 5)


参考

Ruby

$ ruby -e 'require "uuidtools";p UUIDTools::UUID.random_create.to_s'
"d14dc0cf-ada9-4045-a99b-31e57ef19937"

こちらは、 timestamp_create(), md5_create(), random_create(), sha1_create() が提供されている。(バージョン1, 3, 4, 5)


参考

Perl

$ perl -e 'use UUID::Tiny;print UUID_to_string(create_UUID(UUID_V4)), "\n";'
cc4bbae1-832a-42d1-a207-0d6619d481e8

こちらも、バージョン1, 3, 4, 5 がサポートされている。


use UUID::Tiny;

my $v1_mc_UUID         = create_UUID();
my $v3_md5_UUID        = create_UUID(UUID_V3, $str);
my $v3_md5_UUID        = create_UUID(UUID_V3, UUID_NS_DNS, 'caugustin.de');
my $v4_rand_UUID       = create_UUID(UUID_V4);
my $v5_sha1_UUID       = create_UUID(UUID_V5, $str);
my $v5_with_NS_UUID    = create_UUID(UUID_V5, UUID_NS_DNS, 'caugustin.de');

(尚、"UUID::Tiny"についてはCPANでインストールしました。)


調べていると、"Data::UUID"を使うパターンが多く紹介されていたのですが、バージョン4をサポートしていないっぽかったので、↑の"UUID::Tiny"を使ってみた。


参考

追記: cURLコマンドでサイトから

$ curl -s uuid.jp
43f8c8da-d375-486a-826e-2b5d6c87de8d

コメントで教えていただいたのですが、"uuid.jp"にアクセスするとバージョン4のUUIDを返してくれますねw


それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́

2014/01/08

Quaggaを使ってLinuxサーバで動的ルーティング


Quaggaは、UNIX/Linuxプラットフォームで動くルーティングソフトウェアです。

OSPF、BGP、RIP等のプロトコルが実装されていて、GNU Zebraから派生したソフトウェアだとか。


某所の環境が、ロードバランサを設置(というかLBに仮想IPアドレスを配布)すると上位のルーターにそのLBへのルートが必要となるネットワーク構成だったので、ソフトウェアベースのLinuxロードバランサに、こいつを入れて、OSPFで動的な経路広報(ダイナミックルーティング)ができるか検証してみました。


インストール

今回、OSはCentOS 6系で動かしてみました。

CentOS 6系で、Quaggaはyumリポジトリに入っていますので、

# yum -y install quagga

でインストールできると思います。

僕は、最新版で動作検証してみたかったので、公式のダウンロードサイトから最新版(現在は、0.99.22.4)のソースパッケージを取ってきて、RPMファイルを作ってインストールしてみました。(specファイルも同梱されています。)


設定

設定ファイルは、"/etc/quagga"ディレクトリ配下にあります。(各種サンプルのファイルがおいてある)

# ll /etc/quagga/
合計 44
-rw-r--r-- 1 root   root       655 12月  4 18:54 2013 babeld.conf.sample
-rw-r--r-- 1 root   root       566 12月  4 18:54 2013 bgpd.conf.sample
-rw-r--r-- 1 root   root      2801 12月  4 18:54 2013 bgpd.conf.sample2
-rw-r--r-- 1 root   root       789 12月  4 18:54 2013 isisd.conf.sample
-rw-r--r-- 1 root   root      1110 12月  4 18:54 2013 ospf6d.conf.sample
-rw-r--r-- 1 root   root       182 12月  4 18:54 2013 ospfd.conf.sample
-rw-r--r-- 1 root   root       406 12月  4 18:54 2013 ripd.conf.sample
-rw-r--r-- 1 root   root       390 12月  4 18:54 2013 ripngd.conf.sample
-rw-r----- 1 root   root         0 12月  5 10:43 2013 vtysh.conf
-rwxr-x--- 1 quagga quaggavty  128 12月  4 18:54 2013 vtysh.conf.sample
-rw-r----- 1 quagga quagga      24 12月  5 10:43 2013 zebra.conf
-rw-r--r-- 1 root   root       369 12月  4 18:54 2013 zebra.conf.sample

今回は、OSPFをしゃべらせたいので、/etc/quagga配下に"zebra.conf"と"ospfd.conf"を作成します。

とりあえず試しに、両ファイルとも以下の内容で作成します。

(とりあえず↓だけ書いておけばログインできるようになる。)

hostname test-router
password zebra
log stdout

で、次にzebraとospfdを起動させます。

# /etc/init.d/zebra start
# /etc/init.d/ospfd start

ログインしてOSPFの設定

localhost(zebraやospfdを稼動させたマシン)のLISTENしている各ポートへtelnetでアクセスします。

公式ドキュメントによると、以下記載の通り。

zebrasrv      2600/tcp		  # zebra service
zebra         2601/tcp		  # zebra vty
ripd          2602/tcp		  # RIPd vty
ripngd        2603/tcp		  # RIPngd vty
ospfd         2604/tcp		  # OSPFd vty
bgpd          2605/tcp		  # BGPd vty
ospf6d        2606/tcp		  # OSPF6d vty
ospfapi       2607/tcp		  # ospfapi
isisd         2608/tcp		  # ISISd vty

今回は、OSPFの設定がしたいので、2604ポートへアクセスします。

# telnet localhost 2604

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Hello, this is Quagga (version 0.99.22.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password:

test-router>

"ospfd.conf"で設定したパスワードを使ってログインできました。


test-router> en
test-router# sh run

Current configuration:
!
hostname test-router
password zebra
log stdout
!
!
!
interface bond0
!
interface bond0.88
!
interface em1
!
interface em2
!
interface lo
!
interface p2p1
!
interface p2p2
!
line vty
!
end
test-router#

enableして(必要に応じてenable passwordを設定してくだされ。)、"show running-config"とかで、現在の設定状況とかも確認できます。


さて、OSPFの設定をしてしまいましょう。以下のような感じでコマンドを打つだけです。

test-router> en
test-router# conf t
test-router(config)# router ospf
test-router(config-router)# redistribute connected
test-router(config-router)# network 10.255.255.24/29 area 0.0.0.0
test-router(config-router)# end
test-router# write memory
Configuration saved to /etc/quagga/ospfd.conf
test-router#

今回は自身が持っている仮想IPアドレス(VIP)を経路広報したいので、"redistribute connected"をつけて設定しています。

最後に、"write memory"しておけば、設定ファイルに保存されます。


こんな感じで、QuaggaはCISCOのiOSライクなコマンドラインになっているので、普段ネットワーク機器に慣れている方はとっつきやすいと思います。


動作確認

さて、それでは経路が広報されているか確認しましょう。

既にOSPFでしゃべっているルータがあれば、そこで確認すれば良いですし、もう1台サーバを用意して、そこで↑と同じような内容でソフトウェアルータを構築して、確認してもOKです。


Before
another-router> show ip ospf route
============ OSPF network routing table ============
N    10.255.255.24/29      [10] area: 0.0.0.0
                           directly attached to bond0.88
N    10.255.255.30/32      [20] area: 0.0.0.0
                           via 10.255.255.28, bond0.88

============ OSPF router routing table =============

============ OSPF external routing table ===========

After
another-router> show ip ospf route
============ OSPF network routing table ============
N    10.255.255.24/29      [10] area: 0.0.0.0
                           directly attached to bond0.88
N    10.255.255.30/32      [20] area: 0.0.0.0
                           via 10.255.255.28, bond0.88

============ OSPF router routing table =============
R    10.255.255.153        [10] area: 0.0.0.0, ASBR
                           via 10.255.255.28, bond0.88

============ OSPF external routing table ===========
N E2 10.48.0.0/19          [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.60/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.61/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.62/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.50.1.63/32         [10/20] tag: 0
                           via 10.255.255.28, bond0.88
N E2 10.255.255.152/30     [10/20] tag: 0
                           via 10.255.255.28, bond0.88

この通り、経路が広報されて、ルーティングテーブルに追加されていることが確認できます。


ちなみに

"write memory"して保存された設定ファイル(ospfd.conf)は以下の通りです。

!
! Zebra configuration saved from vty
!   2014/01/07 18:25:29
!
hostname test-router
password zebra
log stdout
!
!
!
interface bond0
!
interface bond0.88
!
interface em1
!
interface em2
!
interface lo
!
interface p2p1
!
interface p2p2
!
router ospf
 redistribute connected
 network 10.255.255.24/29 area 0.0.0.0
!
line vty
!

最初から、こんな感じで内容を記載しておけば、設定時にコマンドを打つ必要もないのですが。そこは好みで。

今日はこの辺まで。それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́


マスタリングTCP/IP ルーティング編

マスタリングTCP/IP ルーティング編

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

2014/01/01

by 3andoo

A Happy New Year 2014


新年あけましておめでとうございます。本年もよろしくお願い致します。

3年ぶりに関西の実家で年を越しました。特段変わったことはしていないのですが、昨年から積極的に孫の顔を見せるという不器用な親孝行を実践中です。

さて、例年通り、昨年の振り返りと今年の目標をエントリに書いておこうと思います。


仕事

春頃までは、これまで見てきたサービス内でサブシステムのサービスインに携わったり、バックエンドまわりの改善やパフォーマンスチューニングに務めたりとか色々やっていた気がします。RAIDコントローラとかSSDとかLinuxファイルシステム(主にxfs、時々ext4)まわりのパフォーマンスチューニング・最適化にちょっと詳しくなった気がします。

春〜夏にかけては、中途入社してからずっと見てきたメインサービスから少しずつ離れ、Chefを他各サービスで使えるように整備しなおして展開したりとか、こういう系の地味に各サービス共通で使われる基盤回りの改善をしたりとかしつつ、夏過ぎより、プライベートクラウドの機能開発や検証・基盤まわりの整備をする仕事をしてきました。主にLinux OS/LB/ネットワークまわり。よりテクノロジーへ振ってみた1年だったと思います。


やってきたことは上記のようなことですが、いくつか気づいたことを箇条書きにして残しておきます。

  • 各サービス共通で使えるようなバックエンドの基盤を作っていくことは、これまでの経験が十分に活かされている仕事ではあるが、なんだかんだ言って、サービスを直接見ていたときと比べて、直接的な売り上げ・お金のことから少し離れてしまうこともあって、アドレナリンを感じるシーンが減ってしまったり、役割分担で現場から離れることにより、その時々のニーズを直接捉えきることができなくなってしまうのではないかという不安もある。(ただし、必要以上にコストで優先度を付ける必要性が無いことは、良い面にはたらくこともある。)
  • 上記の話は、昔の会社でR&D(間接部門)にいた時の焦燥感と似ている。この感覚は5年半〜6年前に味わっている話で、その時は社内ベンチャーの立ち上げに参画したっけ。
  • インフラというかバックエンド系のエンジニアとしては、組織内で結構シニアよりの立ち位置になってきていると思う。経験にしても技術スキルにしても、今の組織だと、そう簡単にまわりに負けないくらいの自信は持っているつもり。もちろん知らないことはまだまだ一杯あるし、自分より出来る人なんてビックリするくらいたくさんいることはインターネットの世界を泳いでいればわかるわけで、そういう意味では優秀な人たちともっと仕事がしてみたいと思ったりもする。
  • 一方で、今までのように現場のスキルフルなテクノロジストとして生きていくことは少しずつお腹がふくれてきた気がしているのも事実で、テクノロジーをもっと事業に結び付け、どう価値を生み出すか適切にジャッジするところに責任を持って生きていきたい気持ちが再度湧いてきた。そういう意味では、より広い範囲の技術を(抽象的に)捉えて、各方面の技術者や技術自身と生きた会話ができる必要があると思っているので、そこの視点というか感覚を身に付けていきたい所存である。あれ、5年前もこんなこと言ってたっけ。
  • 組織も大きくなってくると、皆が納得できるビジョンの共有や、方向性・評価をしていくことが難しくなってきていると感じる。特に技術者の評価。(これ以上は書かない。ただのメモ。)
  • あと、今でもそれなりにやりたいようにやらせてもらっている事実はあるが、全体を捉えた上で未来像をやっていきたいこととして押し通すには、やっぱりそれなりのポジションが必要。(これも昔からわかっていた事ではあるが。)

こんな感じで少しずつ志向が変わってきていることを感じる1年であった。これが35歳定年説というやつなのかもしれない。

こんなことを書くと家庭や子供を持つとどうしても・・・みたいな話になって、自分では"たまたま"だと思っているけど、社会人になって10年経ち、7〜8年前の貪欲さとか吸収力と比べると落ちてきているとは思うが、別にやっていけないかもとはまだ全然感じない。ただ志向や方向性が変化してきた結果、表向きは"定年"のように見えてくるのかもしれないし、経験を積んだ結果、引き出しが増えて、判断もある程度合理性に基づいて正確に(と思いたい)できるようになった結果、老害と呼ばれるものに着々と近づいてきているのかも。

自分も含めて色々な人を見ていて最近思うことは、やはり今の自分に満足してしまうとそこで成長は止まってしまう。得意なことばかりをやっていても成長角度は上がらないし、徐々につまらなくなってくると思う。だからこそ、短期・長期目標であったり、ありたい姿を常に考えて、積極的に新しいことに挑戦していくべきなのだろうと思う。新しいことに取り組み、失敗や学びを謙虚に吸収し続けてこそ、成長していけると思うし、これが出来なくなっていく事こそが老害への道なのだろう。(老害キーワード2回目)


まぁ、長々と書いてしまったが、何が正解かはよくわからないけど、結局正解を決めるのは未来の自分自身なわけで、何もやらずに後悔することだけは避けたいので、己を信じて1つずつやりたいようにやるのと、未来の自分への投資となることを、今年も粛々とやっていくだけかなと思っています。やるやる詐欺にならないように頑張ります。

昨年はインプットが多かった気がしているので、今年はアウトプットを出して成果につなげたいところです。


私生活

子供が産まれて1年経ち、家族も含めて大きなアクシデントも無く、無事健康に過ごしてこれたことに感謝します。

すっかり子供中心の生活になっていて、色々大変ではありますが、子供のあの純粋に笑いかけてくれる笑顔に毎日妻と癒されながら生きております。子供も徐々に行動できるようになってきていると思うので、今年は色々と外に連れて行ってあげたいなとも思っています。


車の話。昨年は愛車であるRX-7を手放して、新しい車を買ったことも大きな出来事でした。

コンプリートカーを買ったので、あまり弄らず乗れるかなと思っていたのですが、やはり乗っているうちに気になる点がいくつか出てきてしまったので、ちょこちょこカスタマイズしてしまっています。昨年この辺は全然エントリに書けなかったので、今年のはやいうちに書いてしまおうと思っています。(宣言)

ひとつ言えることは、また車がジャジャ馬への道を少しずつ歩み始めているということでしょうか(汗

とりあえず乗りやすさだけは、大きく犠牲にすることなく楽しみたいと思っています。


あとは、業務じゃないので私生活に入れてみますが、執筆の話かな。久しぶりに共著ではありますが書籍の執筆をしています。

これが思うように筆が進まず、こういうものは自分の中での飽きが来る前にサクッと終わらせないとダメだということを痛感しました。まだ進行形なのでアレですが、関係者の方にはご迷惑をおかけしております。

あと、この執筆に引きずられる形で、他の執筆・登壇のお声がけを本当にたくさんお断りしてしまうことになり、せっかく頂いたチャンスを自ら捨ててしまったこと、そして頂いた期待に応えられなかったことを反省する結果となりました。本当に申し訳なかったです。

また1から出直すつもりで、今年は頑張っていきたいと思っていますので、本年もどうぞよろしくお願い致します。


おまけ

2011年に引き続き、今年も狙っていたのですが、新年1発目のTweetが「2014/01/01 00:00:00」(日本時間)となりました。何かいいことがあるといいなー♪


では、今年もいつもの感じで。それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́


オススメ (一部は、最近読んでいる本とも言う)
Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus) クラウド Amazon EC2/S3のすべて~実践者から学ぶ設計/構築/運用ノウハウ~ [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ) エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド [24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 Linux-DB システム構築/運用入門 (DB Magazine SELECTION) キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置 スケーラブルWebサイト 実践ハイパフォーマンスMySQL 第3版 ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE) SQLアンチパターン インターネットのカタチ―もろさが織り成す粘り強い世界― ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化 Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)