OCNのIPoE(IPv4 over v6)の申し込みから開通まで

この記事はフレッツ光ネクストを対象としたものです。フレッツ光クロスには当てはまらないので注意してください。

ここ最近回線速度が異様に遅かったので早くなるかな?と思って申し込んでみました。結果としては早くなったと思います。

OCNはIPv6標準対応

OCNは以下のプランではIPoEによるIPv6接続に標準対応しているとしています。

  • OCN光
  • OCN forドコモ光
  • OCN光withフレッツ

但し契約時期による条件あり

但し標準提供されるのは以下の条件に限られており、それ以外のユーザーは何かしらの手続きが必要である可能性があります。

  • 2017年7月25日以降にOCN光をご利用開始したお客さま
  • 2017年9月1日以降にOCN forドコモ光をご利用開始したお客さま
  • 2018年6月15日以降にOCN光withフレッツをご利用開始したお客さま

条件外のユーザー(ドコモ光)はどうすれば?

2017/08/31以前にOCN for ドコモ光を利用開始したユーザーについて

OCN のお知らせ詳細なるページで「メールに記載のURLからフォームへアクセスしお手続きをお願いいたします。」と案内されていますが、2019/12/17現在このフォームは消滅しており利用することができません。

NTT西ユーザーなら自分でNTTに申し込めば行ける?

OCN のお知らせ詳細では以下のような案内があるためNTT のサイトから申し込んでみることにしました。申込みから一時間ほどで利用できるようになります。書いてある通り無料です。

しかしこれだけではv6通信はできませんでした。やはりOCN側が対応している必要があるようですね。

IPoE 提供には NTT 西日本のフレッツ・v6 オプション(無料)が必要となるため、お客さまに代わり OCN が NTT 西日本へ代行申込をいたします。
サポートにメールをすると今でも申し込み手続きが可能

上述の通り、申し込みフォームは既にありません。何故なくなったのかは知りませんがきっとなにか深い大人の事情でもあるのでしょう。

しかし私はなんとしてでも無料で煩雑な手続きもせず追加機材も用意せずIPv6を使いたかったのでOCNのQ&Aを読み漁り、それっぽいワードでググりまくり、OCNメールを開き「【重要】OCN IPv6インターネット接続機能(IPoE)」の提供について」というメールを何度も読み返し「本件に関するお問い合わせ先」なるリンクに気がついたので、その先にあったお問い合わせフォームからメールに記載のフォームが使えないがIPoEによるIPv6接続を利用できないか?と問い合わせをしてみました。

サポートに問い合わせした結果、24hほどで以下のようなメールが届いたので適当に埋めて返信

そしてIPv6開通!

上記メールに返信をしてから48hほどで以下のようなメールが来たのでルーターを再起動したところ無事IPv6に繋がりました。やったー!

WSR-1166DHP4で利用できた!

IPv6対応ルーターも増えてきて値段もだいぶお手頃になってきたので、本当に繋がるかどうかもよくわからないまま買ったルーターでしたが、無事繋がりました。

上述のメールの案内に書かれている通りルーターを再起動したところネットが不通になり、ルーターのコンパネにアクセスしてみると回線識別画面になっていました。

ぼちぼち安くてそこそこ小さいのでおすすめです。アンテナ生えてないからコンパクト。

バッファロー11ac対応866+300Mbps無線LANルータ(親機単体)(ブラック) WSR-1166DHP4-BK

OCNバーチャルコネクト!

もしや…!と思ったらキタコレ!(漣風に

しかしコケる

ファッ!?

まぁネットワークにエラーはつきもの、リトライです。

IPv6接続成功!

リトライしたらフツーに行けました。良かった。

ちゃんとIPv6で繋げてます。因みにv4でも繋がります。v4のIPを振っている自宅サーバーにもv4環境からアクセスできました。出てるのはこのブログのIPなので隠す意味は特にないのですが、一応…w

契約情報もちゃんと更新されてます。

速度の変化

直近の測定値を見ると大分早くなったような気がします。劇的に早いというわけではないと思いますが、実用上は必要十分だと思います。流石に光で100Mbps切ってるのは問題なので…。(ADSLかよ

仕事でよく使うExcel数式

いつも使う時に忘れるので自分用の備忘録がてら。組み合わせることでGrep結果の集計とか、ある程度パターン化されているエクセル設計書の集計とかに使える

こんな地獄のような数式使わないに越したことはないと思うんですが、世の中それで済んだらExcelなんて要らないんですよね!

パターンで文字切り出し

A2に<hoge>あいうえお</hoge>みたいな文字があるとして

D2に<hoge>, E2に</hoge>があるとする場合、B2辺りに以下の数式を入れると特定の文字列で囲まれた文字列を切り出せる

=MID(A2,FIND(D$2,A2)+LEN(D$2),(FIND(E$2,A2)-FIND(D$2,A2)-LEN(D$2)))

条件付き書式を複数列反映

D列の値を条件として同一行複数列に書式設定するものとする

条件式で$D1="HOGE"のように列名をロックした式を設定し、範囲をA:Gのようにすると、常にD列を参照した状態で範囲的に設定できる

最初に出現する行位置の特定

=MATCH("hoge",A:A,0)

ワイルドカード

アスタリスクを生やす

=MATCH("*hoge",A:A,0)

セクション行のグルーピング

Grepとかで抜き出した結果をエクセルに貼り付けてグルーピングする時に使えるやつ

これを

Title
C:\Hoge\Foo\Src\Hoge001.txt
100,1: aaaa
101,1: bbb
C:\Hoge\Foo\Src\Hoge002.txt
10,1: aaaa
11,1: bbb
18,8: cccc
...

こうしたい

Title Section
C:\Hoge\Foo\Src\Hoge001.txt Hoge001
100,1: aaaa Hoge001
101,1: bbb Hoge001
C:\Hoge\Foo\Src\Hoge002.txt Hoge002
10,1: aaaa Hoge002
11,1: bbb Hoge002
18,8: cccc Hoge002
... ...

手法

Sectionを抜く列を作る

B2だけは決め打ちで2を入れておき、B3以降に設定

=IF(ISERROR(FIND(E$2,A3)),B2,ROW())

Section名を抜く列を作る

C2以降に設定、タイトル行ならD2とE2の値を元にA列の内容を切り出し、タイトル行でなければB列の値を行番号とし、C列の行を当てに行くロジック

=IF(ISERROR(FIND(D$2,A2)),INDIRECT("C"&B2),MID(A2,FIND(D$2,A2)+LEN(D$2),(FIND(E$2,A2)-FIND(D$2,A2)-LEN(D$2))))

複数条件でのCOUNTIF

COUNTIF()で複数条件を実現するには文字列結合した列を作る事があると思いますが、COUNTIFS()ならその必要はない

=COUNTIFS(条件列1, 条件1, 条件列2, 条件2, ...)

便利関数メモ

よく使うやつ

  • IF(), AND(), OR(), NOT()
    • 条件分岐でよく使う
  • SUM()
    • 集計用。SUMIFS()はあんま使ったことない
  • COUNTIF(), COUNTIFS()
    • 条件付き集計
  • COUNT(), COUNTA(), COUNTBLANK()
    • 個数カウント
  • VLOOKUP(), MATCH()
    • 検索用
  • ADDRESS(), INDIRECT(), INDEX()
    • MATCH()結果からセルを当てる時に有用
    • INDIRECT()はシート名を書いておくとシート名の変更時に追従しやすい(その際シート名管理用のセルをどっかに作っておく)
  • FIND(), LEN(),MID()
    • 文字列切り出しの鉄板

まれに使うやつ

  • DATEDIF()

    • DATEの差分がINTで取れる便利な子

キャッシュカードを無くしたのでスマホで口座から出金してみた

台風で財布が虚空へ舞ってしまい、現金とキャッシュカードを失い駐輪場から自転車が出せなくなりかけた管理人です。そんな最中、今回はスマホで口座預金を引き出す方法を見つけたので簡単に紹介します。三井住友銀行の場合、キャッシュカードの停止手続きをしてても引き出せました。

どんなときに有用か?

何かしらの事情で財布がなくなったときに非常に使えると思います。スマホまでなくなっている場合は知りませんが...。

利用できる金融機関

2019/10/16現在、この方法を利用できる金融機関の一覧です。

手順

ドコモ口座を作る

ドコモ口座はセブンイレブンとスマホさえあればATMから現金を引き出せるサービスです。

ドコモ口座

銀行口座からドコモ口座へ入金する

次のリンクにある手順で銀行口座からドコモ口座へ入金できます。

銀行口座からチャージ

セブンイレブンで出金

出金時に出金手数料として税抜200円が口座から引かれるので、口座に2000円以上入れておかないと引き出せないと思います。

スマホを持ってATMを設置しているセブンイレブンへ行き、次のリンクにある手順で出金します。

銀行口座で払い出し

エレキギターを買ってみた。

今回はエレキギターを買ってみました。いきなり唐突だなぁという感じですが、私もそう思います。取り敢えず今回はお買い物レポートです。

購入動機

ここ最近一年弱ですがバンドリ関係をちょこちょこ漁っていて、なんとバンドリとESPがコラボしてギターを出しているという情報を目にして以来、気が気でないと言うか、その事ばかり考えていたら電柱に頭をぶつけたり、寝るに寝れなかったり、実生活に悪影響が出てきたので、天啓と思い買ってみた次第です。つまりよくわかりません。要するに管理人はアホなんですね。

因みにこれまでに楽器経験はなく、楽譜は読めないし、DTMもやったことないです。

購入モデル

ESPがリリースしているBanG Dream! M-II SAYOというモデルで、実売価格は税込60kほど。流石に楽器だけあり値が張りますが一応これでもコストダウンモデルで、劇中再現モデルであるESP M-II ROSELIA SAYOは税込520kほどと、桁が変わります。

劇中モデルの方は、実際のライブで使われている機材と同一品らしいので、高価なのも頷けます。

因みにポピパとRoseliaのギター、ベースはESPが全部出してます。ドラムセットやキーボードは多分ないと思われる。

参考写真

開封の儀で撮影したものですが、参考程度に。

同時に買ったもの

ギターだけ買えば使えるとは思ってなかったので、必要なものを幾らか買っています。

ピック

ギターを弾くためのアイテムですね。必須アイテムだと思うのですが、まだ届いてません。

ESPから出てる氷川紗夜のピックです。

【10 枚セット】ESP× バンドリ! BanG Dream! ガールズバンドパーティ! GBP Sayo 2 Roselia 氷川紗夜 ギター ピック

チューナ

音の高低をチューニングするのに使います。ギターは弾いたり動かしたりするとチューニングが狂うそうなので必要です。

NEUMAのNCT-20というクリップチューナーです。死ぬほど怪しいんですが多分使えると思います。音感がないので正直まだよくわからないですが、取り敢えず安いです。

スタンド

転倒や破損防止に必要です。床においてると踏むし、壁に立て掛けてるとネックが曲がるということなので。

キクタニのGS-101Bというのにしました。安くて省スペースなので、悪くなさそうです。

シールド

エレキギター単体では音が出ないので、アンプなどにつなぐために必要です。

Syncwireのシールドにしました。怪しさ満点ですが、取り敢えず仕事はしてくれています。シールドの素材は結構頑丈そうに見えます。

入門書

折角楽器を買ったのですから、演奏できるようにしたいですよね。

リットーミュージックからバンドリ! ではじめるエレキ・ギターです。アニメの一期を見たあとに読むと、かなり読みやすく捗ると思います。

元から持っていたもの

エレキギターを使うに当たり必要だけど、持っているため特に買わなかったものです。

オーディオインターフェース

アンプの代わりです。PCに音声入力したり出力するユニット。

Roland Rubix22。元々はサウンドカードの代わりに使っていたものを今回アンプの代用として使用。付属のDAWソフトを入れればギターの音が聴けます。

ヘッドホン

賃貸でスピーカーはちょっとないですからね…。

SONY MDR-CD900ST。遥か太古の昔、今は亡き友人に勧められてずっと使ってるやつです。今こそレコーディングするとき!

C#.NETのDataTableをLINQで操作する

なぜこんな実装が必要なのかさっぱり不明ですが、必要になって困ったのでメモ。

DataTableを内部結合したList<Dictionary>をLINQで作る

var loc = new DataTable();
var pep = new DataTable();
loc.Columns.Add("ID");
loc.Columns.Add("LOCATION");
loc.Columns.Add("DELETE_FLG");
loc.Rows.Add("100", "US", "0");
loc.Rows.Add("101", "AU", "1");
loc.Rows.Add("102", "JP", "1");
loc.Rows.Add("103", "CH", "1");
loc.Rows.Add("104", "UK", "1");
loc.Rows.Add("105", "RU", "1");

pep.Columns.Add("LOCATION_ID");
pep.Columns.Add("NAME");
pep.Columns.Add("DELETE_FLG");
pep.Rows.Add("100", "TAKANA", "0");
pep.Rows.Add("101", "YAKATA", "1");
pep.Rows.Add("100", "WADA", "1");
pep.Rows.Add("101", "SHINODA", "1");
pep.Rows.Add("100", "HARUKA", "1");
pep.Rows.Add("105", "SAIONJI", "0");


var result = (
    from l in loc.AsEnumerable()
    join p in pep.AsEnumerable()
    on new {
        a = l.Field<string>("ID"),
        b = l.Field<string>("DELETE_FLG")
    } equals new {
        a = p.Field<string>("LOCATION_ID"),
        b = p.Field<string>("DELETE_FLG")
    }
    select new Dictionary<string, string> {
        {
            "LOCATION_ID",
            l.Field<string>("ID")
        },
        {
            "NAME",
            p.Field<string>("NAME")
        }
    }
).ToList();

List<Dictionary>とDataTableを外部結合してList<Dictionary>を操作する

var location = new List<Dictionary<string, string>>();
var fruits = new DataTable();

location.Add(
    new Dictionary<string, string> {
        {
            "ID",
            "001"
        },
        {
            "NAME",
            "Hokkaido"
        }
    }
);
location.Add(
    new Dictionary<string, string> {
        {
            "ID",
            "002"
        },
        {
            "NAME",
            "Aomori"
        }
    }
);
location.Add(
    new Dictionary<string, string> {
        {
            "ID",
            "003"
        },
        {
            "NAME",
            "Iwate"
        }
    }
);

fruits.Columns.Add("LOCATION_ID");
fruits.Columns.Add("NAME");
fruits.Columns.Add("FRUITS_FLG");
fruits.Rows.Add("001", "ikura", "1");
fruits.Rows.Add("001", "uni", "1");
fruits.Rows.Add("002", "ringo", "0");

// dummyは処置待ち用のダミー。locationの操作が目的
var dummy = location
    .Join(
        fruits.AsEnumerable()
        , loc => loc["ID"]
        , fruit => fruit.Field<string>("LOCATION_ID")
        , (loc, fruit) => new { lo = loc, fru = fruit }
    )
    .Select(
        joined => {
            joined.lo["FRUITS_NAME"] = joined.fru.Field<string>("NAME");
            joined.lo["FRUITS_FLG"] = joined.fru.Field<string>("FRUITS_FLG");
            return new Dictionary<string, string>();
        }
    )
    .ToList();