サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
atsukanrock.hatenablog.com
この記事は Sansan Advent Calendar 2017 の 25 日目、すなわち最終日の記事です *1。ネタもないので参加する気はなかったのですが、とある社内バー的なもので酔っ払っていたところ会社の新卒君である id:kanjirz50 が目を輝かせて「最終日を飾ってください!!」と言ってきたのであまりのピュアネスが眩しくて二つ返事で快諾してしまいました。というわけでネタに困っています。 なんでそんなにネタに困っているかというと、実はここ 2 年弱程、開発者ではなくて開発マネージャーをやっていた関係で、技術ネタがないのです。この 11 月から改めて開発者になったので、今はリハビリ中でして、技術ネタは徐々に溜まってくると思います。 Advent Calendar と言っても必ずしも技術ネタである必要はなくて、 Sansan Advent Calendar 2017 では 5 日目
最近になって初めて*1、本格的なWindowsフォームアプリケーションを開発した。その中でいくつかリソースリークしやすいポイントを見つけたので記録する。 書いてみるとかなりの分量になったので、分割することにした。本エントリはその第1回。 Windowsフォームアプリケーションとは いきなり「Windowsフォームアプリケーション」という言葉を使ったが、.NET FrameworkのSystem.Windows.Forms名前空間以下に含まれる型を使って作成するデスクトップアプリケーションという意味で使った。以降もこの意味で使う。 さて、ここからが主題。 Image.Disposeを忘れない Windowsフォームアプリケーションで画像を扱う場合、一般的にImageクラスを使う。このクラスはIDisposableインターフェイスを実装している。よってそのインスタンスを使い終わった時点で、Di
Visual Studio 2013 (VS) の "Performance and Diagnostics Hub" が超いいです。とうわけでこの記事は自分向けのリンク集です。 .NETアプリのメモリリーク調査には従来からWinDbgという方法がありましたが、WinDbgはとても手軽とは言えません。Performance and Diagnostics Hubなら、VSでデバッグ実行しながら好きな時にメモリ状態のスナップショットを取れます。スナップショットを取る前には好きな時にGCを実行できます。スナップショットには、メモリ使用量はもちろん、オブジェクト型毎のインスタンス数が記録されます。これらの値はスナップショット間での比較が可能なので、リークしている (≒インスタンス数が増え続ける) オブジェクトを特定できます。この記事の方がイメージが分かるスクリーンショットが多いですね。 なおVS
はじめに 本エントリから何回かに分けて、ASP.NETアプリケーションを作成する際に、忘れずにやっておくべき(だと私が考える)ことを挙げる*1。第1回は「ViewStateUserKeyを使う」だ。 目的 ViewStateUserKeyを使うことで、手軽にワンクリック攻撃対策をする。ワンクリック攻撃については、『ASP.NET の組み込み機能を活用し、Web 攻撃を回避する』の「ViewStateUserKey」に解説あり。このリンク先には、ViewStateUserKeyを含む、ASP.NETのセキュリティ関連の組み込み機能について、良質な説明がある。ぜひご一読を。 注意 このページによるとGUIDを使うのが良いとのことだが、本エントリでは、MSDNで推奨されている、セッションIDを設定する方法を示す。セッションハイジャック対策を別途行うことで、このリンク先で指摘されている脆弱性を減ら
はじめに ブラウザ上でのJavaScriptに、showModalDialogというメソッドがある。MDCのリファレンス(MDC)の説明*1を引用すると、 指定された HTML 文書を含む モーダルダイアログボックスを生成し、表示します。 という機能を持つメソッドだ。しかしながらこのメソッド、私が今回経験したが、問題山積だ。結論から言うと、使うべきでない。 本エントリでは、私が今回発見したshowModalDialogの問題点を列挙し、このメソッドが必要になりそうな場合の代替案を示す。 問題点1:ダイアログ側でwindow.openerがundefined 確認ブラウザ Win XP SP3上のIE 6:該当 Win XP SP3上のSafari 4.0.4:非該当(showModalDialogを呼び出したwindowオブジェクトを取得可能) 詳細 showModalDialogで開かれ
はじめに データセットデザイナは、Visual Studio(バージョンによらず)の目玉機能のひとつだろう。GUI操作によって、型付けされたデータセット(以降「型付データセット」と呼ぶ)のソースコードを自動生成することができる。本エントリでは、Visual Studio 2005でのデータセットデザイナの機能を紹介し、使用上の注意点を挙げる。 なお、本エントリで使用する用語は、「データセット デザイナ」に倣う。 【機能】SQLを基に、データ格納用クラス(DataTable)およびデータアクセス用クラス(TableAdapter)を生成 手順1 [TableAdapter 構成ウィザード]の表示 データセットデザイナ上で何も選択せず右クリック→[追加]→[TableAdapter]とすると、[TableAdapter 構成ウィザード]が表示される。 手順2 SQLの入力 [TableAdap
はじめに JavaScriptで、テキストボックスのonchangeイベントを信用してはならない。本エントリでは、今回私が経験した、期待とは異なる動作を紹介し、対処方法を提案する。 期待動作 これまでの開発経験から私が信じていた、テキストボックス*1のonchangeイベントの仕様は、次のとおり。 発生タイミング:フォーカスを失った時*2 発生条件:テキストボックスの値(valueプロパティ値)が、フォーカスされた時とフォーカスを失った時で異なる しかし今回、以降で挙げるような、期待とは異なる動作を経験した。 期待しない動作1:オートコンプリートでの入力時に発生しない 確認ブラウザ*3 Win XP SP3上のInternet Explorer 6 Win XP SP3上のFirefox 3.6.3 詳細 T/O。オートコンプリートでの入力時には、onchangeイベントが発生しない。 こ
はじめに 本エントリは『ASP.NETで忘れずにやっておくべきこと』シリーズの第2回。「セッションハイジャック対策」について記す。 目的 セッションハイジャック攻撃に対し、十分な防御力を持つASP.NET Webアプリケーションを作成する。 注意 「セッション」ハイジャックという名前からして、セッション状態*1に対する攻撃のみを指すように思える。これを狭義のセッションハイジャックとするなら、本エントリでは、広義のセッションハイジャックについて述べる。広義のセッションハイジャックとは、攻撃者がアプリケーションの正当なユーザーになりすますことを言うものとする。 セッションハイジャックとは? まず、セッションハイジャック攻撃について、その攻撃方法と一般的な対策法を学ぶ。 最適なテキストは情報処理推進機構:情報セキュリティ:脆弱性対策:安全なウェブサイトの作り方の『安全なウェブサイトの作り方』(P
はじめに IPAが、『安全なウェブサイトの作り方』という、Webサイトのセキュリティに関するガイドブックを出している。このPDFの21ページに、「ログイン成功後に、新しくセッションを開始するようにする」という対策がある。この解説の内容は納得できるものだ。しかし、ASP.NETで、うまくこれを実装する方法はあるのだろうか? 新しくセッションを開始するには? ASP.NETでセッションを新たに開始するようにするためには、HttpSessionState.Abandonメソッドを使うことになるはずだ。このメソッドによって、メソッドを呼び出した時点のセッションオブジェクトを破棄し、ASP.NETランタイムに、次の新しいセッションオブジェクトの生成を促す。 一般的なログインコード 上記PDFの指針に従うと、ログインが成功した際に新しいセッションを開始しなければならない。すると、一般的なログインコード
はじめに ADO.NETのOracle製接続プロバイダであるODP.NETには、バージョン問題が存在する。ここで言うバージョン問題とは、アプリケーションの開発者が意図しないバージョンのODP.NETが、アプリケーションの実行時に使用されてしまうことを指す。 本エントリでは、その問題の原因と解決策(案)を述べる。 なお、ODP.NETのバージョニング体系については、『Oracle Data Provider for .NET開発者ガイド』の該当ページ(リンクは11g)を参照されたい。 問題の原因 ODP.NETと同時にGACにインストールされる発行者ポリシー*1の仕様*2によって、バージョン問題が発生する。 .NETの基本的なバージョン管理 .NETでは、side-by-side実行と呼ばれるバージョン管理が基本である。この仕組みは、@ITの連載記事でわかりやすく解説されている。 簡単に言う
はじめに 企業向けシステムでは、ヘッダ固定テーブルの実装を要求されることがある。ヘッダ固定テーブルとは、 テーブル(<table>タグ)である テーブルの横に、テーブル部分のみのスクロールバーが表示される テーブル部分のみのスクロールバーでスクロールしても、テーブルのヘッダ行はスクロールしない といった特徴を持つもので、いわばExcelの[ウィンドウ枠の固定]機能のWebアプリ版だ。 CSSで実装するには Pushpin Headerと呼ばれるテクニックがある。positionプロパティを巧みに使った華麗なテクニックだ。ちなみに私は、このテクニックを初めて見たときは理解できなかった。positionプロパティについての正確な知識がないと、理解は難しい。 Pushpin Headerテクニックの問題点 上記リンク先のページをSafari*1で表示すると、ヘッダとボディの間にスペースが空いてし
はじめに CSSでブロック要素内のテキストの縦位置を中央揃えにするのは難しい。その理由は、「vertical-alignの使い方」によくまとまっている。簡単に言うと「vertical-alignプロパティがインライン要素とテーブルセルにしか適用できない」ためである。vertical-alignプロパティは、divなどのブロック要素には適用できない。 このため、私が現在開発中のシステムではtableを利用した。おそらくWeb標準に反すると思うが、Web標準に反しない形でこれを実現するのは不可能だと判断した。本エントリでは、なぜ不可能だと判断したのかを記述する。 よく紹介されている実現方法 外枠がdiv、テキストをpで囲むとして div { height: 5em; position: relative; width: 10em; } p { margin-top: -0.5em; posit
はじめに 本エントリではまず、ViewStateの基礎的な内容について説明する。さらに、ViewStateによるコントロールのプロパティ値復元の仕組みについても説明する。 ViewStateというと、「@IT:.NETエンタープライズWebアプリケーション開発技術大全 Webアプリケーションの状態管理」で紹介されているように、「Sessionオブジェクトと同じような、データの保存用オブジェクト」といったレベルの認識がされやすい。この認識は正しい。しかし十分ではない。ViewStateは、それがないとASP.NETはまともに動作しないというほど重要な、ASP.NETの基盤技術のひとつなのだ。 ViewStateの詳細は、「ASP.NET ビューステート」や「サーバー コントロールのカスタム状態管理」で述べられているので省略し、本ブログの他のエントリでの説明のために必要な内容だけを述べる。 V
はじめに 本エントリでは、.NET 2.0以降でリストのプロパティを公開する*1場合に使用する、以下のクラスについて述べる。 Collection<T> ReadOnlyCollection<T> Collection 変更可能なリストとして、よく知られているのはList<T>クラスだろう。なので、変更可能なリストのプロパティを公開したい場合、その型をListクラスとしたくなる。 しかし、これはデザイン面で非推奨とされており、その代わりにCollectionを使うよう推奨されている。その理由は、「Why does DoNotExposeGenericLists recommend that I expose Collection<T> instead of List<T>?」に詳しい。リンク先で述べられている理由は以下の2点である。 Listは速度と内部的な実装の詳細のために設計されている
はじめに JavaScriptのコメントからドキュメントを生成するツールには、以下のようなものがある。 名称 概要 記述言語 YUI Doc YAHOO! UI Libraryのドキュメント生成に使用 python JSDoc 元祖?javadocに類似したタグでコメント記述 perl JsDoc Toolkit JSDocの後継 java 本エントリでは、このうちJsDoc Toolkitの使用法を紹介する*1。より詳細な解説は、JsDoc Toolkit メモを参照されたい(リンク先ではJRE 5.0での実行方法を解説している)。 なお、JSDocのサイトを久しぶりに訪れて気付いたが、JSDocはJsDoc Toolkitを後継とし、開発をストップしたようだ(以下引用)。 NOTE: This project is no longer actively developed, as it
はじめに ASP.NETでは、Validatorと呼ばれる何種類かのコントロールを使って、 サーバサイド クライアントサイド の両方で妥当性検証(入力チェック)を行うのが一般的だ。本エントリでは、クライアントサイドでの妥当性検証を行うかどうかを、クライアントサイド(JavaScript)で(ポストバックせずに)切り替える方法を記述する。 方法 JavaScriptでValidatorEnable(val, enable)関数を呼び出す。関数の詳細は以下のとおり。 処理内容 指定されたValidatorの有効/無効を切り替える。 val ValidatorのHTML要素。Validatorが自動生成するJavaScriptコードにより、HTML要素のidと同名のグローバル変数が定義されている。document.getElementByIdしても良いが、そのグローバル変数を引き渡しても良い。
はじめに C#にはドキュメントコメントというコメント記述法があり、定められた形式でコメントを記述することにより、自動的にドキュメントを作成することができる。詳細については『XML ドキュメント コメント (C#)』および『ドキュメント コメント用の推奨タグ (C#)』を参照のこと。本エントリでは、ドキュメントコメントを記述する際の注意点を記述する。 特殊文字 ドキュメントコメントは、ビルドによってXMLファイル化されるので、以下の特殊文字がある。ドキュメントコメントで特殊文字を使用したい場合、「&」から始まる代替文字列で記述する。以下で、「‥」の左側が特殊文字、右側が代替文字列。 &‥& <‥< >‥> "‥" <summary>内で<para>を使用しない <summary>で、<para>を使って段落分けすると、VS2005でその内容がツールチップ表示され
はじめに SVNの標準的なディレクトリ構成の良さが、やっと理解できたのでメモしておく。 上記についての解説は、インターネット上にたくさんあるが、それでは私には良さが理解できなかった。だが、SVN自体のリポジトリ(SVNで管理されている)を見て、その良さを理解できた。『*The* Subversion Repository』を参照のこと。『README』を読むと、基本的なことがわかる。 ディレクトリ構成図 SVN自体のリポジトリの、ディレクトリ構成の一部を以下に抜粋する。末尾が「/」はディレクトリ、それ以外はファイルを表す。 / + README + branches/ | + 1.0.x/ | + 1.4.x/ | + 1.4.x-r24119,r24121/ | + 1.5.x-issue2489/ | + arterm-soc-work/ | + issue-2382/ + tags/
このページを最初にブックマークしてみませんか?
『atsukanrockのブログ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く