楽天カードを電話で解約。5分ほどで即解約できました。

楽天カードの解約
楽天カードが自動的にリボ設定になっていたのにムカついたので解約しました。
確かに規約には書いてあるのでしょうけど、購入時に一括にしているのだから勝手にリボになっているなんて気づかないですよ。

楽天カードを解約する

電話で解約します。

TEL : 0570-66-6910

つながらない場合は、以下になります。

TEL : 092-474-6284

私ははじめ上の電話にかけたのですがつながらず、092 の方にかけたのですが、こちらはすぐつながりました(祝日の昼)。
ちなみに、092 は福岡です。

なお、はじめの自動案内でカード番号生年月日、オペレーターとの応対でカード有効期限が必要になるので、カードを手元に用意しておく必要があります。

解約自体はタイトルにもある限り、5分程度のオペレーターの質問に答えてすぐにできます。
特に引き止められることもないです。

ただし、解約すると即座にウェブからの手続き等ができなくなってしまいます。
もし、リボ払いになっていて、一括精算に変更しておかないと、カードを解約してもしばらく楽天に金利を払い続ける羽目になりますので注意しましょう。

自動でリボ払いの設定とか悪質すぎるので、そろそろ行政から注意されてほしいところです。


TypeScriptで文字列をbooleanにキャストする

TypeScript で文字列を boolean に変換する場合も、JavaScript と同じですね。
var b :string; 
b = "true"; 
if (!!b) 
{ 
 alert("文字列に変換しました。"); 
}

C#のショートサーキット評価でラムダ式の中のnullチェックを行う

nullチェック
C#6.0から導入されている null 条件演算子の新しい書き方が便利です。
null 許容型でデータを取ってくる場合などに、null 参照で落ちることを防ぐことができます。
// サンプルクラス
class Product 
{ 
 public decimal? Amount { get; set; } 
 public string Name { get; set; } 
 
} 
 
// どっかに記述
var products = new List(); 
products.Add(new Product() { Name = "ほげほげガム", Amount = 98, }); 
products.Add(new Product() { Name = "ほげほげガム・プレミアム", Amount = 298, }); 
products.Add(new Product() { Name = "ほげほげガム・サンプル", Amount = null, }); 
products.Add(null); 

// これだと null を参照して例外になる 
// var total = products.Sum(x => x.Amount); 
 
// total = 396 
var total = products.Sum(x => x?.Amount ?? 0); 

2回POSTされてしまう現象にハマる

2回POSTされてしまう
ASP.NET MVC で、ページ内に配置した Button タグに対してイベントハンドラでクリックイベントを付け、Action を呼び出すようにしていたのですが、Action が 2 回呼ばれる現象に悩まされた。

調べてみると、Button タグというのは type を指定しない場合は submit であるため、クリックイベントの後に submit イベントも走ってしまっていたようだ。

Button タグを汎用的に使用したい場合、 type=button とする。
もちろん単純に submit したい場合はそのままで良い。

SQL Serverで直前のuniqueidentifierを取得

SQL Serverで直前のuniqueidentifierを取得

SQLServer で、自動インクリメント設定をした uniqueidentifier に対して Insert を発行後、SELECT SCOPE_IDENTITY() を実行しても NULL が返ってきて ID が取得できませんね。

Returning ID of new row when ID is uniqueidentifier
http://stackoverflow.com/questions/32405923/returning-id-of-new-row-when-id-is-uniqueidentifier

以下のようにして、明示的に用意した値をセットする方法しかないようです。
DECLARE @newGuid TABLE(newValue UNIQUEIDENTIFIER); 
 
INSERT INTO hoge (hoge_name) 
OUTPUT inserted.hoge_id INTO  @newGuid(newValue ) 
values ('ほげ') 
 
SELECT @id = newValue FROM @newGuid

C#でGuidを比較する方法

C#でGuidを比較する
C# で GUID を扱う際、new Guid() でインスタンスを生成すると、空(ゼロのみで構成)の GUID になります。
これに対して、Guid.NewGuid() は新しい GUID を生成します。

以下のように比較できます。
var guid1 = new Guid(); 
if (guid1 == new Guid()) 
{ 
    guid1 = Guid.NewGuid(); 
} 
 
// 比較する際は、Guid.Empty でも良い。こちらのほうが見た目的にもわかりやすい。 
 
var guid1 = new Guid(); 
if (guid1 == Guid.Empty) 
{ 
 guid1 = Guid.NewGuid(); 
} 

TypeScriptのto have a typedefの修正方法

TypeScript の to have a typedef の修正方法
TypeScript で静的コード分析を行った際に大量に出がちな "to have a typedef" ですが、これは変数の宣言時に型を指定する必要があるという意味です。
var hoge = "ほげ"; 
alert(hoge); 
typedef expected variable-declaration: 'hoge' to have a typedef
// これなら警告が消えます。 型の定義をしなければいけないのです。
var hoge: string = "ほげ";

TypeScriptの型変換

TypeScriptの型を変換します
TypeScript で文字から数値、数値から文字へ変換する方法です。

// 数値へ変換する 
var hoge = +$("#Hogebox").text(); 
// 2 
alert(hoge++); 

// 文字列へ変換する 
// 21 
alert(hoge.toString() + 1);

「セルの書式が多すぎるため、書式を追加できません」の解決方法

Excelのメッセージ

Excel でコピー等を繰り返していたりすると、「セルの書式が多すぎるため、書式を追加できません」と表示されてそれ以上コピーできなくなることがあります。

https://support.microsoft.com/ja-jp/kb/213904
怪しい日本語ですが、MS のサポートですw

書式の上限は 64,000 のようですが、[スタイル] - [セルのスタイル] から削除するにしても手動では大変です。

Chromeで「お客様のアクションを完了できません。後でもう一度試してください」が出る

Amazon プライムミュージックのエラーダイアログ

数日前から、Google Chrome で Amazon の プライムミュージックを再生しようとすると、「お客様のアクションを完了できません。後でもう一度試してください」が出て再生できなくなりました。
再生できるようにするには、Flash に許可設定をする必要があるようです。

ViewNX-iからFlickrへアップロードする

ViewNX-i の Web サービス 設定画面

ViewNX-i の Web サービス連動があまりに貧弱すぎるので、Flickr と Capture NX2 への連携を設定してみました。

Picasaが終了したので別のソフトを探してみた

デスクトップ版 Google Picasa
デスクトップ版の Picasa も入手できなくなってしまいました。マシンを変更したので、代替ソフトを探す必要があったため、画像ビューワーを探してみました。写真家目線です。


ガントチャートのブラビオは退会もめんどくさそう…

無料で使えるガントチャート・ブラビオ
ちょっとガントチャートを使いたいと思ってフリーのサービスを探していたところ、ブラビオというサービスを試してみました。テレビの名前みたいなサービスです。

ちょっと使ったのですが、しょっぱなからこの画面が出て面食らいます。
現代的な UI ではないので、操作は「登録→画面移動→編集」といった古典的なフローが多く、直感的に使えません。

多機能すぎて「個人でちょっとスケジュールを管理したい」という使い方には全くマッチしませんでした。

個人的には Backlog の方が使い勝手が良いと思います。

退会しようとしたのですが、どうやら方法もめんどくさいそうですね…。

brabio(ブラビオ)退会方法

会社で使うならいいのではないかな、と思います。

Kindle Paperwhiteをノリだけで買ったけど私は満足です

キンドルを買いました

期間限定キャンペーンで Amazon Kindle Paperwhite が 1 万円くらいだったのでノリだけで購入しました。二週間ほど使ってみた感想です。

C#のOrderByでnullを後ろにもっていく

並び替えでnullを後ろに配置する

LINQ で OrderBy をする際に、対象に null が含まれていると、null が先頭になってしまいますね。

Kindle Unlimitedで購読している本をライブラリから削除する

Kindleライブラリで削除を実行
Kindle Unlimited で何も考えずに本を追加しまくっていると、あっという間にライブラリがゴチャゴチャしてきます。写真集やアレなジャンルの本を追加しまくっていると、なんだか見た目的にも目に毒になってきますしね。
実際の書籍でも、そういうのは本棚から隠したいところです。

で、もう読まなそうな本は削除したいと思うのですが、Amazon のヘルプにある Kindleライブラリから商品を削除する では削除できないみたいですね。

Windows10の日本語切替はWindowsキーとスペースが便利

Windows10の日本語を設定する
Windows 10 は色々と MS-IME が強制されるシーンが多いですが、Windows キー + スペース で日本語切り替えが瞬時にできるようになっています。

覚えておくと便利なショートカットキーですね。

Google Chrome 52 で MacType がまたおかしくなったので直した

Chrome 52 でフォントが汚くなった例

Google Chrome 52 から DirectWrite 無効ができなくなりました。これにより、MacType がまたおかしいです。

Chromeの新規タブをアプリ一覧ページに設定する方法

Google Chrome で、新しいタブを開いた時にアプリの一覧ページにするには、現在の仕様だと New Tab Redirect という拡張機能を使用しないとダメみたいですね。

Chromeの新規タブを好きなページに設定する

New Tab Redirect は、Google Chrome で新しいタブを開いた際のページを指定する拡張機能です。

New Tab Redirect の設定画面

アプリ一覧ページにする場合は、chrome://apps/ と設定します。
もちろん、それ以外にも好きなページを設定することが可能です。

日本語環境のVisual Studio 2015にKB3165756を当てると変だった問題が解決

KB3165756 の通知ウィンドウ

Visual Studio 2015 Update 3 の KB3165756 で、テストエクスプローラーが真っ白になる変な不具合がありましたが、直ったようです。

KB3165756 でテストエクスプローラーが変な問題

最新の KB3165756 はこちらにあります。通知ウィンドウにも出ますけどね。
https://msdn.microsoft.com/en-us/library/mt752379.aspx

自動テストしない人は気づかなかったですねw

エクセルで打ち消し線を一発で引くショートカットキー

打ち消し線
Excel で打ち消し線を引きたい場合は、以下のショートカットキーを使えば一発で引けます。

打ち消し線のショートカットキーは Ctrl + 5 です。


テンキーの 5 でダメな時は、普通にキーボード上の 5 で。すでに取り消し線があるセルでコマンドを使うと、取り消し線の取り消しができます。

VLCプレイヤーで日本語ファイル名を再生した際の文字化けを直す

VLCメディアプレイヤー

VLC メディアプレイヤーは、マルチプラットフォーム対応の高性能フリーソフトですが、インストール直後では、日本語ファイル名を再生する際に文字化けしますねw

ASP.NET MVCとWebFormは今後どちらがいいのか

ASP.NET MVC

ASP.NET MVC が 2009 年に登場してから、もうだいぶ経ちますが、従来まである ASP.NET Web Form(ウェブフォーム)は、.NET 系業務アプリ界隈では未だに新規開発案件も見かけるほど広く使われている印象です。
単に「MVC 知らないから Web Form で開発」という会社も多いかもしれませんけど、新規開発をするならよく検討したほうが良いことはたくさんあります。
個人的な意見です。

TortoiseSVNの更新をコマンドから実行する

TortoiseSVN

TortoiseSVN でファイル管理をしているなら、一発でファイルを最新にするバッチファイルを作っておくと便利です。

Evernoteが改悪?でもWeb版は対象外ですよ

Evernote

私は Evernote は 2011 年頃から使っています。その場でちょっとメモを残すのに便利なんですが、この Evernote。つい最近の規約改定で、無料ユーザーは 2 端末のみ同期可能。そして、有料プランは実質の値上げとなりました。

Evernote で検索すると、Evernote 改悪 とかサジェストが出る始末ですが、個人的には Web 版の方をよく使っているし、数行のメモを少し残す程度なので、完全に有料化しないかぎりは「改悪」だとは思わないんですけどねぇ。

単体テストの書き方と重要性

単体テストの書き方

ソフトウェア開発では、後工程で手戻りが発生するほど工数がかさみ、悲惨な結果を引き起こすことが「よく」あります(苦笑)。

「動作確認レベルでいい」
「結合でバグを出すから大丈夫」

そんなふうに、最小単位である単体テストを軽んじているプロジェクトは、その時点で死に向かって歩き出していると思います。

Windows7でGoogleドライブが起動しない

Google
Windows 用の Google ドライブをインストール後、起動しないことがあります。

C#で「列 ○○ はテーブル○○に属していません」をチェック

C#で「列 ○○ はテーブル○○に属していません」をチェックする方法
DataTable に存在しない列を参照しようとすると残念なエラーが出ます。
そもそもちゃんと構造を把握しろという話ですが、こんな方法で事前チェックを行うことはできます。

Gitでリモートにプッシュしてしまったコミットを戻す

Gitでリモートのコミットを戻す

「やっべ! さっきプッシュしたコミットにバグがあったわ。一行だけ直したいわ」という時に、プッシュしたコミットを「なかったこと」にしたい時がたまにありますよね。

パスワードを別送する意味はない

パスワードを別送する意味はない
仕事での「あるある」ですが、添付ファイルのパスワードを、「パスワードは別途お送りします」といって同じアドレスに送るケースはよく見かけます。

こんなことやってるのは日本だけなので、意味は無いです。
でも、「プライバシーマーク」や「ISMS」がある以上はやらなければならないという日本特有の悪しき風習のようですね。

パスワードの別送に意味はある? - ITpro Active

この記事は検証しているだけで、最後まで読んでも「結局、意味あるのかないのかどっち!?」という記事なのですが(もろもろの大人の事情、立場上断言できないのかもしれませんが)、結論から言うとやはり 意味は無い ように思います。

じゃあどうするのかというヒントはこちらにありました。

第28回 「続けてパスワード送付」欧米でまったく使われないワケ (1/2) - ITmedia

日本以外では、真の意味での「自己責任」の元において、それぞれの判断に委ねられているようです。

以下のような観点があるようですね。

  • 適切な権限を持った者のみ閲覧可能であること。
  • 万が一の場合でも、すぐに公開を停止できるような仕組みがあること。

意味がないと声高に叫んでも、日本では改善されることはないでしょうが、とりあえずパスワードをメールで送るというのは止めるべきですね。

副作用のある演算子 'PRINT' を関数内で使用するのは無効です。

副作用のある演算子 'PRINT' を関数内で使用するのは無効です。
SQL Server のスカラー値関数内では、PRINT を使って値の確認等をすることはできません。
副作用のある演算子 'PRINT' を関数内で使用するのは無効です。
というエラーメッセージを出しますが、もう少し想像力を働かせたメッセージにしてもらいたいところですねw これで理解できると思うのでしょうか。

セキュリティ的に可能であれば Visual Studio のデバッグ機能を利用して SQL Server の関数もデバッグできますが、値をその場で確認したいだけなら、単純に

SELECT @hoge

なんていう方法で出力させることはできます。

中小企業・組合のためのマイナンバー制度対応

中小企業向けマイナンバー制度対応の備忘録冊子が出てきたのでメモ書き。一部個人的なメモあり。

ASP.NETのHTTPハンドラが呼び出されない

ASP.NET の HTTP ハンドラを登録する際に、App_Code にあるクラスを参照する場合はパスの書き方を間違えるとハンドラーが呼び出されない場合があります。

<httpHandlers>
<add verb="GET,POST" path="*.hoge" type="HogeHandler, App_Code" />
</httpHandlers>

この例では、App_Code 以下にあるクラス HogeHandler に HTTP ハンドラーを登録しています。クラス名の後に , App_Code を追加しています。

jQueryで半角数字だけかチェックを行う

jQuery で半角数字のみの入力チェックを行う方法。
// ID が TextBox1 のチェックを行う。
if ($('#TextBox1').val().match(/[^0-9]+/)) {
 alert("半角数字で入力してください。");
 return false;
}

C#6.0の補完文字列機能で日付を年月日に変換する

C#で日付を年月日に変換
日付の文字列変換は業務アプリケーションの開発では常に付きまといます。C# 6.0 で追加された補完文字列機能は、今まで C# をやってきたベテランほど習得しておくべき書き方だと思います。

C#の正規表現でbrタグを削除する

正規表現を使ったReplace

C#の正規表現でbrタグを削除する
<br /> も <br> も置換します。

string s = "あいうえお<br />かきくけこ<br>";
Regex r = new Regex("<br.*?>");
// あいうえおかきくけこ
string output = r.Replace(s, "");


Hashtableで落ちる。項目は既に追加されています。辞書のキー 追加されるキー

例外
新規に使うことはないでしょうが、Hashtable は、既にあるキーを Add 使用とすると落ちます。

Hashtable ht = new Hashtable();
ht.Add("key", "hoge");
ht.Add("key", "hoge");

でも、書き方を変えると上書きします。
Hashtable ht = new Hashtable();
ht.Add("key", "hoge");
ht["key"] = "hoge2";

古いコードを触る場合は、覚えておくといいかもしれませんね。

SQL Server の GETDATE() で日付のみ取り出す

DateTime型の変換
GETDATE関数で取得した日付には時刻も含まれます。検索条件に使う場合などは時刻が邪魔をする場合があるので、以下の方法で日付だけを取り出します。
-- SQL Server 2008 以降はこれでいけます。
SELECT CONVERT(date,GETDATE())

-- 古いバージョンだとやや長くなります。
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

c#のKeyValuePairでnullチェック

nullチェック
FirstOrDefault() で条件に合う値が取得できなかったことをチェックする場合、KeyValuePair では少し書き方を変える必要があります。== null と書きたくなりますが、default で規定値かどうかのチェックを行います。

C# の規定値(default)によるチェック

注意点としては、Equals は内部的に型変換をしてしまうため、default の型を合わせておかないと、思った通りの結果にならないことがあります。

var kvp = new List<KeyValuePair<int, string>>() { new KeyValuePair<int, string>(1, "hoge"), };
var result = kvp.FirstOrDefault(x => x.Value == "ほげ");
if (result.Equals(default(KeyValuePair<int, string>)))
{
 Console.WriteLine("null");
}
// この書き方だと、チェックをすり抜けてしまうので注意。
if (result.Equals(default(KeyValuePair<string, string>)))
{ 
 Console.WriteLine("null");
}

C#でKeyValuePairをDictionaryに変換する

KeyValuePairをDictionaryに
KeyValuePair を Dictionary(連想配列)に変換する最もシンプルな方法。

var dictionary = new Dictionary<int, string>();
var kvp = new List<KeyValuePair<int, string>>() { new KeyValuePair<int, string>(1, "hoge"), };
dictionary = kvp.ToDictionary(x => x.Key, x => x.Value);

型が合っていないとビルドエラーになります。

SQL Server で NULL と空文字を判定するシンプルな方法

SQL Server で、ある列が 空か NULL であるか判定するシンプルな方法です。

DATALENGTH の長さチェック

-- Hoge テーブルの Memo 列が 空か NULL であるデータを取得します。
SELECT * FROM Hoge WHERE DATALENGTH(Memo) > 0

-- これだと NULL のデータは引っ張ってきてしまいます。
SELECT * FROM Hoge WHERE Memo <> ''

-- これは NULL のデータを引っ張ります。
SELECT * FROM Hoge WHERE Memo IS NOT NULL

Chrome を Windows Server 2012 にインストール

Chrome on Windows Server 2012
Windows Server に Chrome をインストールする方法です。

Chrome のスタンドアローン版

Windows Server の IE からのウェブの閲覧やダウンロードは、セキュリティの都合上、正直めんどくさいです。
なので、Chrome をインストールしたい場合には、スタンドアローン版をダウンロードしてきて、それをコピーして実行するのが手っ取り早いです。

Google Chrome のスタンドアローン版

ChromeStandaloneSetup.exe という実行ファイルからだとすんなりインストールできますよ。

フォルダ内のファイル名一覧リストをテキスト出力

日時のバッチファイルなどで、フォルダ内のファイル一覧を出力したい場合は、こんなコマンドがあります。

フォルダ内にあるファイル名をテキストファイルとして出力

@echo off

set dt=%DATE:/=%
dir d:\hoge\*.txt /b /a-d > d:\logs\filelist_%dt%.txt
D ドライブの hoge フォルダにある .txt 拡張子のファイルリストを、d:\logs フォルダに出力しています。ファイル名に日付も付けてみました。

ファイルの差分なら WinMerge

WinMerge
意外と知られていないかもしれませんが、WinMerge はフォルダも指定できます。
ファイルリストの差分をチェックしてくれるのです。便利。

Undefined index 未定義の変数は参照できない

undefined index
Notice: Undefined variable: hoge
PHP のお話。これは未定義の hoge を参照しようとした、という意味です。

Undefined variable

定義されていない変数の参照は不可能です。参照しようとしたもの(変数=箱)がないよ、という意味です。null 参照とはまた違います。
Post や Get 時によく発生するようですね。

これはスクリプト言語特有の動きで、C# では基本的に未定義の変数の参照を使用とすると怒られるので(遅延バインディングなどはありますが)、概念としてそもそもあまりピンとこないかもしれません。