vimで複数行のインデントを削除して1行にまとめる(改行を削除)

<ul>
  <li>
    ほげ
  </li>
  <li>
    ふが
  </li>
</ul>

これをほげの上下含めて3行を選択して、次のように1行にまとめたいわけです。

<ul>
  <li>ほげ</li>
  <li>
    ふが
  </li>
</ul>

この場合、

:vmap 0 <Up>:s/\n *//<CR>:noh<CR>

しておくと、3行を選択して、0を押すとインデントが削除されて、1行に収まります。 .vimrcに書いておくと便利だ。

今年を振り返る7大ニュース

目が悪くなった

私は目はパソコンをさんざん見てきた割にはずっと視力2.0できたのですが、ここ数年で一気に悪くなってしまいました。見えそうで見えない。そもそも疲れやすい目で、あーもう疲れたって感じで目を酷使できない感じだったのです。それで、疲れ目がもう全然取れない感覚で、目の焦点が合わない感じになってしまい、これはマジでおかしいと。

それで眼科に行きました。結果が、乱視。近視も遠視もなく、乱視のみ。小さい文字を見るのが辛いので、メガネをつけて仕事をすることにしました。読書力も完全に落ちてしまい、これでは自分の人生に大きなマイナスだと思います。年が開けたらレーシックしに品川近視クリニックに行こうと思います。

車を乗り換えた

f:id:xibbar:20150927112343j:plain

車を乗り換えました。もともと、ギャランのVR4を乗っていた頃はさんざんサーキットに行っていたのですが、ギャランを手放してからはそういうのはやめていました。ギャランはターボでかなりパワーをあげていました。乗り心地もちょっと足回りが硬かったので、家族カーとしては使えない車でした。

今回、春に一度MPVを買って、それが古い車だったので家族にはかなり不評でした。車検がもともと半年しかなかったので、もう一度、同じ車の新しい型に乗り換えることにして、10年乗るつもりで自分の好きなスペックを選びました。それが、MPVの23Tです。もう、久しぶりのターボで、パワーにも足回りのしっかりさにも大満足です。パワーいいね。どっかんなのでじゃじゃ馬感がありますが、私はやっぱり好きです。

ジムでレッスンを受けるようになった

もともと健康維持のためにセントラルウェルネスクラブの法人会員なのですが、レッスンは全然受けたことがありませんでした。 ちょっと前から自主筋トレをはじめていて、ちょっとずつ筋肉がついてきていたので、 3月から筋トレのレッスンを受けるようになりました。これが結構楽しくてはまっています。 レッスン名はシェイプパンプです。バーベル使って体を鍛えています。

痩せた

ラーメンを食い歩いているうちについに一瞬ではあるものの、6月に体重が100キロを超えてしまい、これはマジでやばいと思いました。

7月から低糖質ダイエットを開始しました。今は体重は91kgまで減りました。低糖質の食事のために、いろいろなメニューを発明した気がします。適当に写真は撮っているので、要望があれば晒します。

また、飲み会などでビフォーアフターの写真を人に見せてはライザップみたいだと言われています。こちらも要望があれば晒します。

じいちゃん亡くなった

口うるさいじいちゃんでしたが、1月に亡くなりました。

会社が再び大赤字に

ちょっと失注の大きい物を2つ重ねてしまい、またもや過去最大の赤字を出す予定です。 キャッシュ的にはまだ死なないのですが、スタッフと一丸となってなんとかします。

不動産の方はそれなりに安定

ラビックスとは別に経営している不動産賃貸業は順調に推移していて、今期はラビックスと売上が逆転です。

講評

相変わらず浮き沈みしながらやっているなぁ。来年はまたがんばります。

さくらのクラウドに立ち上げたサーバをスクリプトでDNSに登録する

少し前にさくらのクラウドDNSができました。 これは何がいいかというとAPIがあることです。 早速、さくらのクラウドからサーバとIPアドレスを引っ張ってきて、 クラウドDNSに登録するというスクリプトを組んでみました。

まず、準備

  • 設定からAPIキー行ってAPIキーを登録しておきます。
  • そのキーを環境変数TOKENとSECRETに登録しておきます。
  • クラウドサーバあるゾーンを環境変数ZONEに登録しておきます。(石狩1だとis1aです)
  • クラウドDNSにゾーンを登録し、リソースIDを環境変数DNSIDに登録してきます。
  • ネームサーバはゾーンを登録した時に決定されるので、 変更しておいてください。

前提

require 'saklient/cloud/api'
require 'pp'

TOKEN = ENV['TOKEN']
SECRET = ENV['SECRET']
ZONE = ENV['ZONE']
DNSID = ENV['DNSID']

URLBase = "example.com"
URLPrefixGlobal = ""
URLPrefixLocal  = "lan"

# クラウドDNSに別枠で追加しておきたいレコード
AdditionalRecordA = {
  "db.mn": "192.168.1.1",
  "db.ln": "10.0.0.1",
  "www": "192.168.1.2",
  "@": "192.168.1.3"
}

api = Saklient::Cloud::API.authorize(TOKEN, SECRET, ZONE)

dns = api.common_service_item.get_by_id(DNSID)

new_record = []

# クラウドに登録されているレコード一覧(使っていない)
cloud_record = dns.raw_settings[:DNS][:ResourceRecordSets]

# クラウドのサーバ一覧からレコードを取り出す
cloud_servers = api.server.find
cloud_servers.each do |server|
  name=server.name.sub(URLBase,'').sub(/\.$/,'')
  server.ifaces.each do |iface|
    if iface.ip_address
      new_record << {Name: "#{name}.#{URLPrefixGlobal}".gsub(/\.\./, '.').sub(/\.$/, ''), RData: iface.ip_address, Type: "A"}
    elsif iface.user_ip_address
      new_record << {Name: "#{name}.#{URLPrefixLocal}".gsub(/\.\./, '.').sub(/\.$/, ''), RData: iface.user_ip_address, Type: "A"}
    end
  end
end

AdditionalRecordA.each do |key, val|
  if key==:'@'
    new_record << {Name: key, RData: val, Type: "A"}
  else
    new_record << {Name: "#{key}", RData: val, Type: "A"}
  end
end

pp new_record

dns.raw_settings[:DNS][:ResourceRecordSets] = new_record

dns.save # これをやらないと保存されない

SaklientのドキュメントをDash形式に変換したものをgithubに置いておいた

github.com

さくらクラウドのドキュメントもサンプルも少ないので、 ソースコードを直接見ざるを得ないのですが、 いちいち見るのも面倒なので、Dashで見るべく 変換しました。せっかくなのでgithubにあげておきます。

f:id:xibbar:20151214162243p:plain

楽ちんです。

プロバイダが障害を起こしたのでRTX810でモバイル回線バックアップを作った

社内的はInterlinkでIP16で契約しているのですが、昼寝してたらつながらなくなってしまっていました。 調査したところ、福島県だけつながらないらしい。

f:id:xibbar:20151208141536p:plain

1時間ほど待ってつながらないので、仕方なくバックアップ回線を作ったのでした。 まず、NTTドコモのL-02Cが余っていたので、これに 普段出張で使っているOCNのSIMを入れ、RTX810に接続。 設定は以下のとおり

ip route default gateway pp 2
pp select 2
 pp bind usb1
 pp auth accept pap chap
 pp auth myname xxxxxxxx@one.ocn.ne.jp xxxxxxxx
 ppp lcp mru off 1792
 ppp lcp accm on
 ppp lcp pfc on
 ppp lcp acfc on
 ppp ipcp ipaddress on
 ppp ipcp msext on
 ppp ipv6cp use off
 ip pp nat descriptor 2000
 mobile auto connect on
 mobile disconnect time 60
 mobile access-point name lte-d.ocn.ne.jp cid=1
 mobile access limit length off
 mobile access limit time off
 pp enable 2
nat descriptor type 2000 masquerade
mobile use usb1 on
dns server pp 2

とりあえず繋げたかったので、こんな設定にしました。 自動で切り替わるとか入れてないです。

旅費comというサービスを作りました

f:id:xibbar:20151207125117j:plain

長い間自分のためだけのウェブアプリだったのですが、 社長仲間からチラホラ使いたいという声がでてきていましたので、 奮起して外部公開できるように作りなおしました。

http://ryohi.com/

このサービス何?

旅費精算書を簡単に印刷するためのサービスです。

www.youtube.com

旅費と交通費の登録をすると、綺麗に印刷されます。 交通費はテンプレート化できるので、いちいち調べ直す必要がありません。 日当と宿泊費を登録することができます。

なんで必要なの?

別にエクセルでやるからいいよって人には必要な気かもしれません。 私がエクセルで管理するのが嫌になったので作りました。

たったそれだけなの?

旅費精算書には秘密があって、絶大な節税効果があります。 そのための条件は、

  • 法人であること
  • オーナー社長であること

です。法人であることは絶対条件です。後者はやりやすさが影響します。

税法上問題ないの?

もちろんきちんとやらないと税務調査でクロ判定されますので、 きちんとやってください。節税のノウハウはここでは書けません。

いくらかかるの?

広告を貼る予定なので、無料です。5名という上限がありますので、 それ以上使いたい場合はご連絡ください。

広告を外せないの?

1アカウントに付き500円(税抜)/月で広告を外すことができます。

節税ノウハウ教えてくれないの?

面識のある人にしか教えません。知り合いになってください。

スマホで使える?

スマホで使えるようにレスポンシブなデザインになっています。 ブラウザをキュッと小さくすると確認できます。

あんた誰?

xibbarこと藤岡と言います。Ruby界隈と不動産賃貸業界隈に出没します。 就職もせずにRubyの会社を立ち上げて14年、不動産賃貸事業をはじめて8年ぐらいです。 このサービスはxibbarの個人プロジェクト扱いです。

欲しい機能があるんだけど

@xibbarまで連絡ください。検討します。

バグを見つけたんだけど

@xibbarまで連絡ください。なおします。

サーバはどこにあるの?

herokuを使っています。今は日本リージョンが正式版にないので、アメリカにあります。 そのため、反応が若干遅いです。

ぜひ、お使いいただき、感想をいただけると嬉しいです。

改行コード一括変換

Railsプロジェクトをポイっと渡されたら、CRLFだったので、一括変換するメモ。

find * -type f|egrep -v '(.gif|.jpg|.png|.db|.doc|.graffle|.mo)$'|xargs -n 10 nkf -Lu --overwrite

.graffleとか.moが入っているのはそういうプロジェクトだったもので。