Pixivでメアドが再利用可能か試してみた

現在登録しているメアドを別のPixiv idに紐づけできるか試してみました。

事の発端

もともとROM専するために別名義でPixivに登録していたのですが、 自分の作品もUPしたほうが紹介するときに便利かな、と思ったのでidを変えたくなりました。

ところが、Pixivではidの変更はできません。 仕方がないので新規登録です。

でも、どうせなら普段使っているメアドでログインできるようにしたい。 果たして一度ほかのアカウントと紐づけたことのあるメアドは再利用できるのか。

実際にやってみましょう。

やったこと

id: hoge mail: hoge@example.com で登録

id: hogeの登録メアドをhoge2@example.com に変更

id: fuga mail: hoge@example.com で登録

結果

fugaさんの登録に成功しました。やったね。

というわけで、メアドは再利用できました。

ISUCON6予選をwebサービス初心者が通過しました #isucon

ISUCON6の予選を通過しました。

私はwebサービス初心者だったのですが、初心者の視点から、チームで何を考え行ったかをメモしておきます。

ISUCONとは

いい感じスピードアップコンテスト。 webサービスが与えられるので頑張って高速化します。 詳しくは公式サイトを読んでください。

isucon.net

今回のお題は、はてなスターはてなキーワード的機能が付いたWikiサイト。

チーム

チームメイトのブログはこちら。

utgwkk.hateblo.jp

www.wass80.xyz

参加動機

本選参加者の名札がかっこよく、欲しかったので。

やったこと

  • プロファイル計測
  • nginxで静的ファイルをキャッシュ
  • SQLで呼び出すcolumnを必要最小限に
  • 不要なHTTP通信の除去
  • 正規表現による置換の回数を減らす
  • 正規表現に渡す引数を減らす

ソースコードはこちら。

github.com

結果

最終スコア: 19610

学生枠8位!

isucon.net

反省

  • slackで情報伝達したのはよかった
  • GitHubのプライベートリポジトリでソースを見られるようにしたのもよかった
    • commit方針は気が向いたときにスナップショットというゆるふわ運用だった
  • ホワイトボードやプロジェクタのある環境は便利
  • スキル向上、環境構築をして個々が同時並行で別の作業ができるようにしたい
  • キャッシュを使えるようにしたい
  • 便利スクリプトとか用意しておくとよさそう
  • その場で使い方を調べる事態が多発したので事前に練習しておきたい

感想

  • 前日までの練習はazureにvmを立てるくらいしかしていなかった。 でもやっておいてよかった。 ボタンを押してsshキーを登録するだけでデプロイできるのは面白かった。
  • 最初はよくわからなかったけれど ソースとチームメイトを眺めているうちに世界観が分かってきた。
  • 途中から競技プログラミングを解いている気持ちになった。
  • 0点だった間はつらい気持ちだったが、正の点数が取れると楽しくなってきた。
  • チームメイトの2人には感謝しかない。
  • 本選では正の点数をとれるように頑張りたい。
  • はてなキーワード aho corasick 検索
  • 松屋お持ち帰りはコスパがよい。

当日の様子

  • azureにvmをデプロイ。sshkeyの準備に手間取る。 何故か私のアカウントからリソースグループが確認できないが、どうせsshするので気にしないことにした。

  • メンバーが慣れていることから言語はrubyを選択。とりあえず初期実装でベンチマークを走らせるもPASS 0点。 動いてはいるが GET / などがタイムアウトになり減点されまくっているようだ。 なんとなくperlで動かしてみたら3000点くらい取れていた。最悪これを提出しよう

  • rack-lineprof でプロファイルをとることにした。 クリティカルに重い箇所を改善しようというISUCONの基本を再確認した。

  • このあたりでなぜかベンチマークがFAILで落ちる現象が発生。 結構悩む。 どうやらプロファイルを取りながらベンチマークを走らせると処理が追い付かずに例外を吐くらしいことが分かった。 プロファイル取得のon/offを切り替えられるようにした。

  • htmlifyのkeywords周りが重そうということが分かった。 不要な情報まで読み込んでいたSQLを改良した。

    - keywords = db.xquery(%| select * from entry order by character_length(keyword) desc |)
    + keywords = db.xquery(%| select keyword from entry order by character_length(keyword) desc |)
    
  • GET / の代わりに POST /star でタイムアウトするようになったので重い箇所を探す。 keywordが存在するかチェックするところでHTTP通信をしているのを発見。 HTTP通信は重そうだったので直接SQLをチェックするクエリを投げるように変えた。 点数が正(1500位)になってチームの士気が上がりだす。

  • こんどはまた GET / がタイムアウトするようになった。 keywordの正規表現生成を each do の中で回していることが分かった。 htmlify関数の外に出し、1度だけ呼び出すようにした。 ここで3000点位。perl初期実装に追いついた。

  • このあたりで静的ファイルをnginxでキャッシュするように設定した。 スコアへの寄与はあまり実感できなかったが、おそらく効いていると信じる。

  • 点数は上がったものの、未だに GET / がタイムアウトする。 正規表現での置換が重い問題に全てのリソースを割くことにする。

  • keywordをひたすら|で並べる正規表現が重いということが分かっていたので、 keywordを1つずつ正規表現で置換するアルゴリズムを試した。 8000点を取るも、ベンチマークが「ページ hoge の中に fuga へのリンクがありません」みたいなメッセージを出す。 不幸な偶然だろうとベンチマークを取り直すも、点数は安定せずついにはFAILした。

  • アルゴリズムの再検討を始めた。 トライ木の実装や、rubyでの高速な文字列処理ライブラリ導入を試みるも失敗する。 キャッシュに乗せておくことも検討したが、不慣れなためredisの導入で手間取りそうだったので保留。

  • 初期実装をベースに考え直すことに。 オーダー単位での改善方法が思いつかなかったので、定数倍の改善を図る。 これまでの実験により、正規表現に渡すkeywordが多いと重くなることが分かっていたので、 全てのkeywordを正規表現に渡すのをやめ、 content内に出てくるkeywordのみを抽出して正規表現に渡すことにした。 12000点位になった。

  • この時点で残り1時間を切っていたため、これ以上のチューニングをやめて再起動チェックを行った。 プロファイル計測を止め、不要なサービスを落としたうえでベンチマークを走らせた。 19610点をマークし、予選通過に十分な点数と判断したため、下手にいじってミスしたくなかったので、作業を終えた。

  • あとは終了時間までひたすら祈っていた。

まとめ

ひたすら文字列処理とSQLをチューニング(という名前の観察)していました。

名札に入れるアイコンどうしようかな。

本選でお会いする皆様、どうぞよろしくお願いします。

.NETとC#競技プログラミング

いつもC#競技プログラミングをしているのですが、 .NETのバージョンを何にすればいいのかよく忘れるのでまとめます。

コンテストシステムで利用できるC#のバージョン

コンテストシステム 利用できるバージョン Visual Studioで指定すべきバージョン
AtCoder Mono 4.2.2.30 .NET 4.6
codeforces .NET 4.0.30319 .NET 4.0
codeforces Mono 3.12.1.0 .NET 4.5
AOJ Mono 2.10.8 .NET 4.0

C#のバージョン対応表

C# Ver .NET Ver Mono Ver
4.0 4 2.8.0
5.0 4.5 3.0.0
6.0 4.6 4.0.0

確認したコンテストページ

AtCoder Regular Contest 060

Codeforces Round #361 (Div. 2)

AOJ_tutorial.pdf

バージョン対応確認のため参考にしたサイト

Mono Releases | Mono

C#の言語バージョンと.NET Frameworkバージョン - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

.NET互換環境 - Build Insider

注意事項

過去あるいは将来のコンテストでは、利用できるバージョンが変更される可能性があります。 その都度確認しましょう。

C#競技プログラミング入門以前

本記事では、C#競技プログラミング初心者だったころの私が入門する前に悩んでいた情報をまとめておきます。 内容に関しては、最適解とは限らない点はご容赦ください(もっとよい方法があれば教えて下さい)。

はじめに

C#競技プログラミングする上で役に立つ情報は以下のページにまとまっています。 中級者以上の皆様はこちらへどうぞ。

emkcsharp.hatenablog.com

qiita.com

C#競技プログラミングを始めるべきか

強いこだわりがあれば止めませんが、C++にしたほうが無難。 標準ライブラリが貧弱(priority queue すらない)なうえ、ICPC等では使えません。

とはいえ、Visual Studio のサポートを受けながらのコーディングは快適だと思います。 C#競技プログラマで強い人としては、@chokudaiさんが有名です。 競技プログラミング関連の情報やユーザーは他言語に比べて少ないですが、頑張っていきましょう。

環境構築

Windowsの皆さんは、何も考えずにVisual Studioを入れましょう。 特にこだわりがなければ、最新のVisual Studio Community で大丈夫です。 途中でオプションでインストールするものを選択しますが、こちらはお好みで。 C#競技プログラミングにおいては、最低限の構成でも必要な機能はインストールされるはずです。

www.visualstudio.com

Mac/Linuxの皆さんは、Windowsを買って自分で頑張ってください。

プロジェクト作成

ここからは最近の私の流儀を紹介する形になります (現在進行形で悩んでいるところなので、ほかのC#使いの皆さんの流儀も知りたい)。

最近は、コンテストごとにソリューションを作成し、問題ごとにプロジェクトを作っています。

具体的な手順は以下。

ファイル>新規作成>プロジェクト f:id:yu3mars:20160902211339p:plain

テンプレート>Visual C#>Windows で「コンソール アプリケーション」を選択。 名前や場所、ソリューション名を適当に設定し、OKをクリック。 f:id:yu3mars:20160902211342p:plain

これでソリューションが作成され、その下にプロジェクトが作成されます。

あとはプログラムを書いていくだけです。 f:id:yu3mars:20160902211335p:plain

さらにプロジェクトを追加する場合は、 ファイル>追加>新しいプロジェクト f:id:yu3mars:20160902211926p:plain

テンプレート>Visual C#>Windows で「コンソール アプリケーション」を選択。 名前や場所を適当に設定し、OKをクリック。 f:id:yu3mars:20160902211355p:plain

これでプロジェクトを増やせます。どんどん問題を解いていきましょう。

コーディング

IntelliSense(Visual Studio の補完機能)をガンガン活用しながら書いていきましょう。

基礎の基礎は下のgistが参考になるかと。

gist.github.com

この記事で説明しなかったこと

まとめ

とりあえずやってみよう!と言いたいところですが、 なかなか一歩を踏み出せなかった過去の自分へのアドバイスでした。

これをきっかけに、新たなC#競技プログラマが出てきてくれれば嬉しいです。

プロの皆様からの有益情報も絶賛募集中です。

トラベラーズチェック換金調査(2016/09)

トラベラーズチェックの換金方法が厳しくなっていたので調べてみました。

トラベラーズチェックとは

かつて海外旅行の際使われていた小切手。TCやT/Cなどとも表記されます。 詳しくは トラベラーズチェック - Wikipedia を参照。

国内主要銀行等での取り扱い

2016年9月現在、 販売(現金→TC)は取扱を終了しています。 換金(TC→現金)には制限があります。

販売は2014年に終了、 換金は2015~2016年にかけて制限されたとのこと。

今後の流動性向上は望み薄なので、まだ持っている人は早めに換金したほうがよさそうです。

以下は各行の説明です。ブログ投稿時点ではリンクが生きていることを確認しています。

外貨両替-ゆうちょ銀行

トラベラーズチェック : 三井住友銀行

トラベラーズチェックに関わるお知らせ | 三菱東京UFJ銀行

トラベラーズチェックの購入・換金はできますか | みずほ銀行:FAQ(よくあるご質問)

トラベラーズチェックの両替はできますか?: FAQ(よくあるご質問) | SMBC信託銀行

トラベラーズチェックの買取について|世界の外貨両替 トラベレックス

まとめ

金融機関名 換金
ゆうちょ銀行 取扱なし
三井住友銀行 自行発行のみ
三菱東京UFJ銀行 自行発行/券面に自行名記載のみ
みずほ銀行 自行発行のみ
SMBC信託銀行 シティコープ、ビザ(InterpaymentおよびCiticorp発行のものに限る)、アメリカン・エキスプレス
トラベレックスジャパン トーマスクック、インターペイメント、バークレーズバンク、アメリカン・エキスプレス

ところで、バンクオブアメリカのTCってどこで換金すればよいのでしょうか…?

はてなブログはじめました

ブログはじめました宣言。

目的

  • 自己紹介の際の名刺代わりになるドキュメントを作る
  • 思考・行動のログを残す

目標

  • とりあえず適当にやってみる

ひとこと

  • そのうちにいろいろいじるかもしれない
  • 箇条書きは楽