読者です 読者をやめる 読者になる 読者になる

改行コードCRはなぜ(^M)で\rなのか

Windowsで作ったファイルをLinuxで開くとファイルの末尾とかに^Mがたくさんついて文字化けしちゃったーとかなりますよね。
^Mは改行コード(CR)で、上記状態は改行コードCRLFのファイルを改行コードLFで開いているから起こる事象です。

なおしたければvim

%s/^M//g

と打てばいい。(^Mを入力するには Ctrl+V として制御文字をうつモードに移行して Ctrl+M と打てばOK)

まあそんなことはいいとしてなぜ改行コードCRが^Mなのかを調べてみました。

改行コード

改行コードには2つあります。

通称 英語名 日本語名 アスキーコード 正規表現 表記
CR carriage return 復帰 0x0D \r ^M
LF line feed / newline / end-of-line / EOL 改行 0x0A \n ^K

この2つのコードの組み合わせのどれかで現在PCは動いています。

ASCII文字コードに基づくシステムでは、CR(復帰、0x0D)、LF(改行、0x0A)、またはCR+LFで表している。
LF: UNIXUnix系のシステム。LinuxAIXXenixmacOSBeOSAmigaRISC OSなど。
CR+LF: CP/M、MP/M、MS-DOSOS/2Microsoft Windows
CR: コモドールによるシステム、Apple IIファミリ、Mac OS(バージョン9まで)、OS-9

改行コード - Wikipedia


で、当初のなんでCRが^Mなのかといことですが、実は上記の表をみると答えが書いてあるのです。
CRはアスキーコードで「0x0D」つまり10進数だと13。つまり13番目の制御コードです。*1
で、13番目のアルファベットといえば?? 「M」ですよね
なので^MがCRを意味するのです。

正規表現が「\r」なのはcarriage returnからでしょう。
同じようにLFは11番目で^Kでnew lineから「\n」になっているようです。

たぶんこういうことだと思いますが違う説もあるよとか間違っているよとかあればコメントお願いします

小ネタ

全世界の99.999%以上の人が使うことない機能ですが、
エクセルのユーザー書式内では、「Ctrl+J」を打つことで書式内に改行を埋め込むことができます。
しかしユーザ書式の入力画面は1行しか表示できず改行してしまうと何を打っているのかわからなくなる諸刃の剣、素人にはオススメできない

以下ページの最後のネタで使っています。
garapon.hatenablog.com

*1:0x00もあるので正確には14番目

エクセルの大きな数字を億千万表示にして読みやすくする。

エクセルに大きな数字を表示すると直感的にわかりにくいです。
「1200000000」とかだと何かわからないし「1,200,000,000」となっていても
100万を超える数字だと「あれ、12億?それとも1200億?」とかカンマの数数えるのだけで疲れるから億千万で表示しましょう。

色々やりかたはあるのですが、表示形式のユーザー定義だけでやるのが汎用的でおすすめです。

書式で見やすくする

さて、どんな書式かというとこんなのです。

[>=100000000]#"億"####"万"0000;[>=10000]####"万"0000;####

百聞は一見にしかずでみてみると

f:id:GARAPON:20170511202717p:plain

こんなかんじでいい感じですね。

書式がなにをしているのかというと

もし [>=100000000]   の場合は
書式 #"億"####"万"0000 を適用
;
もし [>=10000]     の場合は
書式 ####"万"0000    を適用
;
それ以外は
書式 ####        を適用

という感じです。書式には条件分岐は3つまでしかかけないのでこんな感じにしています。
それ以上にわたって分岐したいのであれば条件付書式を使うとよいのですが、条件付書式だと設定がめんどくさかったりするので、セルの書式設定の表示形式のユーザー定義だけでやるのがお勧めです。

さらにがんばって後ろの0000を消してみる

さて、かっこよくなったのですが、1.2億のところとか「1億2000万」とかの表示にしたいというニーズもありますよね。後ろの0000とか消してしまいたい!といった。
本来なら関数とかで計算してやるのがいいのですが、とりあえずこれも書式設定だけでがんばってみましょう。

上記のユーザ定義を打ち込んだあとに、「"万"」の後ろで「Ctrl+J」と打ちます。
表示が1桁しかないので非常にわかりにくいのですが、イメージ的には以下のようになります。

[>=100000000]#"億"####"万"
0000;[>=10000]####"万"
0000;####

f:id:GARAPON:20170511202735p:plain

これで見てみると、なんということでしょう

f:id:GARAPON:20170511202741p:plain

かわってますね。
まあなんてことはなくてセルの中で改行されていて以下のようになっているだけなのですが
ぱっと見はごまかすことができます。

f:id:GARAPON:20170511202747p:plain

普段使いしないほうがいいバットノウハウですね><

まとめ

やっぱりエクセルはいろんなことができて楽しい!!!

金融系APIの公開事例

オープンAPI盛んですね。
金融制度ワーキングがFintechと金融機関の発展のためには各金融機関にAPI公開するのだーというのを提示して「銀行法等の一部を改正する法律案」が審議されてそろそろ成立します。

さて、となるとどんなAPIが使えるようになるのかまず海外の事例を探してみると、API仕様をを公開している銀行は3つあります。

Fidor Bank (独)

2009年に設立されドイツでもっとも革新的な銀行といわれるFidor銀行。
支店を持たず、すべてのサービスを60秒以内で終えることを目指すとかいろいろ先進的で面白い銀行。
APIは同社のFidor OSといった概念の基礎を支えていて実用的なものが多い。
以下のリンクで公開されている。
Fidor API Reference

CitiBank (米)

おなじみCiti。こいつはまだサンドボックスという扱い。開発者登録をするとドキュメントが読める。
一通りのAPIが用意されている。
首页 | sandbox.developerhub.citi.com

BBVA (西)

スペインのBBVA。日本語で書くとビルバオ・ビスカヤ・アルヘンタリア銀行とかで覚えられない。
2010年ぐらいから先進技術へ先行して投資を始めていろんな会社を買収したりしている。
これも登録すればAPI仕様が見れる。
BBVA API Market

日本の事例

日本では、メガバンハッカソンのためにAPIを一時的に作成して限定公開していましたがサービスには至っておらず
APIを公開しているのはSBIと静岡銀行(ANSER)ぐらいでしょうか。しかし両者ともAPIは公開していますが、仕様については契約を締結した事業者のみに開示されており中身がどうなっているのかはわかりません。
API接続サービスの開始および株式会社マネーフォワードとの公式連携開始について|住信SBIネット銀行
Fintechと金融機関をつなぐAPI連携サービスを静岡銀行に提供開始 | NTTデータ

まとめ

とまあ後は各社の中身を読んでみればわかることなのですがまだ世界でも先進的な分野なのであまり統一感がありません。
まだ摸索中といった感じですね。今後日本ではどうなるのでしょうか。日本人は右にならえが大好きなのでこういったときは基本海外の事例がお手本にされるのですが、海外でもこれだーというお手本はありません。
仕様策定をがんばっている団体はいますが、BIANとかAPIPlayBookとかもまだ概念程度で詳細な検討は出来ておらずAPI仕様までは落ちてきていません。何で海外でもあまり進まないかって言う話はまた今度するとして、そんななかで日本ではほぼ義務となるオープンAPI。今後が楽しみですね。

ふるさと納税、家電全廃前に滑り込み

年始めかふるさと納税改善についていろいろと情報が出ていましたが、
ついに今日こんな記事が出ました。

www.sankei.com

治体が贈る返礼品の調達額は、寄付額の3割以下とする目安を初めて設定。商品券や家電は、転売対策の有無や地域への経済効果に関係なく全廃を求めた。

総務相のご意見なので法的な強制力はありませんが、実質強制みたいなものなので
週明けから随時消えていってGWぐらいには全部消えることが想定されます。
すでに私のお気に入りの一つである伊那市はすべての関連HPで申し込みが停止しています。

伊那市はダイソンやカメラからHDDと何でも扱う素晴らしいところだったので残念ですね。
対応もなかなかアグレッシブで去年ぐらいかの家電はよくないのではないかという勧告に対して
ふるさとちょいすが高額商品や家電の取り扱いをやめると、ふるなびに移転し、さらに独自サイトも立ち上げて各種家電を提供してくれていたので非常に残念です。

しかし、まだ申し込みを受け付けている自治体もあるので、申し込みするならこの土日に滑り込みするしかない!
みんながんばれー!

AzureSQLデータベースとSQLServer

2014ベースで似ているけど完全に同じではない。

  • サポートされない機能
    • SQLCLR
    • グローバル一時テーブル
    • Service Broker
    • 一部のシステムテーブルと動的管理ビュー
    • トレースフラグ
  • データベースの分離
    • データベースcontextをユーザデータベース間で切り替えできない
    • 分散クエリ使用不可
  • 運用タスク
    • データベース作成時:物理ストレージはすべて抽象化されストレージを個別指定などはできない。
    • セキュリティの構造:SQLServer認証とAD認証(2017/01より)のみWin認証は使えない
    • バックアップ:自動バックアップのみ。オンデマンドはできない。

Azureのストレージアカウントが見つからなくなったら。。。

Azureは絶賛進化中で全体のメニューも更新中です。
旧管理画面であるフルポータル(https://manage.windowsazure.com)から新ポータル(https://portal.azure.com)にどんどんと機能が移行していっておりほぼほぼ新ポータルで作業ができるようになっていますが、両者が混在しておりちょっとわかりにくい状態にあります。
VMも「Virtual Machines」と「仮想マシン(クラシック)」とわかれていたりしますが、一番混乱するのはストレージアカウントのところじゃないでしょうか。
このあたりはPowerShellのメソッドも変わっており、新ポータルで作られたストレージアカウントは旧PowerShellのコマンド「Get-AzureStorageAccoun」ではアクセスできません。1.7でついかされている「Get-AzureRMStorageAccount」をつかわないといけません。

1.4以前のAzurePowerShellを使っている場合は1.7以上に更新しましょう。
更新はWebPlatformInstallerでAzurePowerShellを追加するのが楽。

現在使っているAzurePowerShellのバージョンは「Get-Module」コマンドで確認できます。
ちなみにPowerShellのバージョンは「$PSVersionTable」コマンドで確認できます。

動かしてみるとこんな感じ

PS C:\Users\Administrator> Get-AzureStorageAccount | fl StorageAccountName
StorageAccountName : storagefromold

PS C:\Users\Administrator> Get-AzureRMStorageAccount | fl StorageAccountName
StorageAccountName : storagefromnew

どちらも対応したストレージアカウントしか拾えていませんね。これは嵌るポイントだなぁ。。。

ちなみにログインもコマンドが変わっています。

旧コマンド
 Add-AzureAccount
新コマンド
 Login-AzureRmAccount

いろんなメニューが新ポータルへ移行しており来年度中ぐらうにはフルポータルはすべて淘汰されるのかな、、
サービス変化の過渡期って感じですね。

Azureの負荷分散セットとAWSのELB

似たような機能でも思想が違うと色々違いが出るんだなと感じます。
何かを学ぶときにそれだけでを学ぶのではなく類似品をみることで特徴が掴めるのは何を学ぶにも大事ですね。

大きな考え方

AWSの考え方
ELBの下に仮想サーバを配置する。といったメニュー構成

₋Azureの考え方
仮想サーバに対して可用性セットを作って、さらにそのグループに負荷分散セットを作るといったメニューになっている。
可用性セットがあり、更新ドメイン、障害ドメイン、そして可用性セットがさらにそれを大きく包むという感じの構成になっているのだろう。
Bestプラクティスはあるけど好きに設定してくれというようなAWSの考えと、こうするべしというAzureの考えの差があるように感じる。

またTrafficManagerでリージョンマタギの負荷分散が可能。GCEにもあるけどこの機能は便利だなー。(TrafficManagerの実態がどこに存在するのかはわからなかった。)

ヘルスチェックURI

₋ELBの場合
ELBのヘルスチェックのコンフィギュレーションで「Ping Path」にヘルスチェックURIを設定

₋Azureの場合
画面からは設定も確認もできず、PowerShellで設定、確認する必要あり。

get-azurevm -ServiceName <リソースグループ名> -Name <VM名> | Get-AzureEndpoint 

と打って出てきた中の「ProbePath」がヘルスチェックURI。デフォルトは空白なのでおそらく「/」を見に来ている。

更新するときはSet-AzureEndpointコマンドで行う。以下Pageに詳細がある。
Add-AzureEndpoint
Windows Azure Virtual Machinesで、死活監視(ヘルスチェック)しながらロードバランシングする手順 - 蒼の王座