Visual Studioでコマンド プロンプトを表示させたままにする

コンソールアプリケーションを実行すると実行後すぐにコマンド プロンプトが閉じてしまう。

これでは出力された結果を見ることが出来ない

コマンド プロンプトを表示させたままにするにはこれまで、ブレークポイントを設置したりしていましたが、もっと効率の良い方法はないかとコンソール関係のヘルプを調べていましたが、それっぽい方法としては処理の終わりに『Console.ReadLine();』を記述すること。

例)

static void main (string[] args){
    Console.WriteLine("fuga");
    Console.ReadLine();
}

例えばバッチ処理なら『pause』と書けば止まってくれるのですが、それに等しいものは見つかりませんでした。

VB6の頃は何かキーを押すまでコマンド プロンプトが閉じないのが当たり前だったのでどうにも解決したく、さらに調べるともっと簡単な方法がありました。

[Ctrl] + [F5]キーを押下して実行するか、基本メニュー[デバッグ(D)] - [デバッグなしで開始]を選んで実行するだけで可能なことが分かりました。
これで何かキーを押すまでコマンド プロンプトが表示されたままになります。




コマンド プロンプトを表示させたままにする方法
  1. ブレークポイントを設置する
  2. Console.ReadLine();を記述する
  3. デバッグなしで開始する

Visual Studioで正規表現を使用してコードの文字列を検索する

Visual Studioの開発環境ではコード内の文字列を正規表現を使用して検索することが出来ます。

一般に知られている書き方と大きく異なるのは『\』の代わりに『:』を使用すること。

その他、Visual Studio固有の表現が多々ありますが実際に使うときにはヘルプを見ながら行えば問題ないでしょう。


例)

  • :Pi ... 最初の二重引用符を検索します。
  • :Zs ... 空白を検索します。
  • :Nd ... 0 ~ 9 などの 10 進数を検索します。全角も検索します。

正規表現を使用するには[検索と置換] ダイアログの[条件(E):]チェックボックスにチェックを入れると有効になるすぐ下のコンボボックスで[正規表現]を選択します。

検索テキスト右にある[▶]ボタンを押すとよく使われる構文が表示されます。


アウトライン機能によって折りたたまれたコードを検索するには[非表示のテキストを検索]にチェックを入れる。

シンボルの検索は[検索と置換] ダイアログの左上のドロップダウンリストから[シンボルの検索]を選択するか、[Alt] + [F12]キー押下により表示されるダイアログから行うことができます。

これらの検索機能に併せてブックマーク機能を利用すればコード内の移動がかなりスムーズになります。

参考)
VSのヘルプ:
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_vsnav/html/718a617d-0e05-47e1-a218-9746971527f4.htm

OperaでjQueryのslideToggleを使用するとスライドしないことがある

指定したタグ要素をスライド展開/格納させるjQueryのslideToggleですが、Operaでスライド動作が行われないことがありました。

該当の効果に対して適切な用語が思いつきませんでしたが、スライドアニメーション or スライドエフェクトと言った方が良いのでしょうか。


jQueryの動作としては開閉(スライド)処理終了後に該当要素のdisplay属性をnone/blockに設定し表示/非表示を切り替えているんですが、Operaの場合、スライド動作は起こらないが表示/非表示は行われるのでjQueryでheightが取得できていないと推測します。


Operaで確認したい方はこちら でランキングタイトル(メニューではない)の『▼』をクリックして見て下さい。

対処も出来ず只今放置中。

追加された要素にイベントを追加するタイミング - jQuery

jQueryでclickイベントを追加する場合、イベントを関連付ける要素のclassが『foo』とすると、以下のように記述します。

$(function(){
    $(".foo").click(function(){
        alert('Clicked!');
    });
});

しかし、Webページを表示後のイベントで追加した要素に対してはイベントが関連付けられません。
ですから上記の場合だとページが読み込まれたときに存在している要素にのみclickイベントが関連付けられるので、Webページを表示後に追加した要素のclassが『foo』だとしても、このままではclickイベントは起きません。

サンプルを作成しましたのでこちらで確認して見てください。

sample:jQuery - Test イベントを関連付ける



新しく追加された要素にイベントを関連付けるにはどうすれば良いか

『var elm = document.createElement("div");』

このように追加したい要素を生成したとします。
この『elm』に対してclickイベントを関連付けるコードをすぐ下に記述します。

例)
$(document.createElement("div"))
.bind("click",function(){
    alert('Clicked!');
})
.appendTo("#container");

すぐ下と言ってもjQueryの『append』などによる追加処理の前後どちらでも構いません。
要は要素が追加されるイベント内で行えば良いということになります。

理解できないmarginの表示

「これが仕様」とは理解し難いおかしなmarginの適用例を紹介します。
CSSに触れる機会のある方は知っておいた方が良いかと。これで飯食ってる人にとっては既知かも知れませんが。

htmlでは以下のように、要素(タグ)がネストしていることは珍しいことではないのですが、子要素に指定したmarginが親要素に適用されるのはどうにも理解出来ない。

<div id="Wrap1">
  <div id="Wrap2">
    <div id="Wrap3">
    </div>
  </div>
</div>

上記の構造の要素に対してスタイルを指定してみます。
右の例ではWebページの表示上では一番上となる要素であるWrap3のTopにmarginを10px指定した例です。

IEとその他のブラウザで表示に違いがあります。IEでは子要素に指定したmarginがその親要素のみ影響されますが、その他のブラウザでは子要素が属する親要素全てが影響されます。


Wrap3の親要素であるWrap2,その親要素であるWrap1にまでmarginが適用されています。もちろんWrap2,Wrap1にはmarginは指定していません。これだけでも理解できないのですが、更にWrap2にborderを指定するとWrap2とWrap1にmarginが適用されなくなるということです。

IEではmarginを指定してるWrap3までmarginが無効になっています。

IEでは例の如く、他のブラウザとは異なる表示をします。それを含めてこのborderを指定するとmarginが無効になることがあるということをどれだけ知られているのでしょうか。

Google Page Creatorのサイトマップを作成し、ウェブマスターツールに登録する

Google Page Creator(以下GPC)は自分でサイトマップを作らないとあまりクロールしてくれないようなので、手書きでサイトマップを書いてアップし、ウェブマスターツールの[サイトマップの追加]で登録してみました。

参考のためにサイトマップの書き方をここに記します。


サイトマップを作成するための Python スクリプト『Google サイトマップ生成ツール』というものもあるようですが、GPCではPythonは使用出来ないのでここでは関係ありません。

ルート ディレクトリに配置すること。GPCの場合、ルートディレクトリにしかup出来ないのでこれは問題ないでしょう。

サイトマップにはまず、先頭に以下の二行が必須です。

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">


<loc>に記述するURLは完全なURLを指定する必要があります。つまり『http』で始まる絶対位置を示すURLでなければならないということです。

例えば『/Sample.html』という書き方ではエラーとなります。

URLを相対位置でウェブマスターツールに登録した場合:


<lastmod>タグに記述する日付のフォーマットは
『W3C Datetime 形式 (YYYY-MM-DDThh:mm:ss+00:00)』です。
時刻の部分を省略して『2004-09-22』とすることも可能です。

<changefreq>タグに記述する内容の意味は該当ページの更新頻度の設定です。つまりはクロールされる頻度に影響するようです。

<priority>タグにはサイト内の他のURLと比較したこのURLの優先度を設定します。
これは必須項目ではありません。デフォルト値は0.5です。
多くのページの優先度を上げることは望ましくないようです。



サンプル:
<?xml version="1.0" encoding="utf-8"?>  
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">  
   <url>  
      <loc>http://humming.bird.2k8.googlepages.com/</loc>  
      <lastmod>2008-08-01</lastmod>  
      <changefreq>monthly</changefreq>  
      <priority>1</priority>  
   </url>  
   <url>  
      <loc>http://humming.bird.2k8.googlepages.com/if_gapi.html</loc>  
      <lastmod>2008-09-08T09:00:00+09:00</lastmod>  
      <changefreq>daily</changefreq>  
      <priority>0.8</priority>  
   </url>  
</urlset> 

注意する点はGPCにサイトマップをアップロードする際、
ファイル名を『sitemap.xml』としてはいけません
sitemap.xmlという名前のファイルはGPCが自動的に作成しているようで、もしこの名前でサイトマップファイルをアップロードしてもそちらを参照してしまうようです。

ではこのファイルを使用すれば良いのではないか?と思われるかもしれませんが、実際にその中身を見れば使えないことが理解できると思います。

参考:ウェブマスター ツール

Highslide JS用のタグの属性を自動で付加するJavascript

このブログでも使用している Highslide JS を使用する場合、画像のアンカーに加える必要のあるonclick属性。それをJavaScriptを使用してその手間を省く。

具体的には、Highslideを使用するには該当画像のアンカーに以下の二つの属性を追加する必要があります。

  1. class="highslide"
  2. onclick="return hs.expand(this)"
この 『class="highslide"』 を拾ってonclick属性『onclick="return hs.expand(this)"』を追加します。

今後は『class="highslide"』のみを書き加えるだけで済むようになります。

私自身が作ろうと思っていたのですが、既にMTユーザーの方がupしていたのでそれをBlogger用にちょっと書き替えただけです。

元ネタ参考:HighSlide JS の onclick 属性を JavaScript で登録する@小粋空間

編集後のサンプルコード:
function addhsAttr() {   
    var isIE = (document.documentElement.getAttribute('style') == document.documentElement.style);   
    var hsAncs = document.getElementById('Blog1').getElementsByTagName('a');   
    for (var i = 0, len = hsAncs.length; i < len; i++) {   
        if (hsAncs[i].className == 'highslide') {   
            if (!hsAncs[i].getAttribute('onclick')) {   
                isIE ? hsAncs[i].setAttribute('onclick', new Function('return hs.expand(this)')) :  
                         hsAncs[i].setAttribute('onclick','return hs.expand(this)');   
            }   
        }   
    }   
}

気になる以下の行
var isIE = (document.documentElement.getAttribute('style') == document.documentElement.style);

これはIEに対応したもので、実際に私自身も試しましたが、IEの場合だけ以下のように処理します。
hsAncs[i].setAttribute('onclick', new Function('return hs.expand(this)'))
このような形でなければonclick属性を追加出来ないようです。


参考元では
引用:onkeypress 属性を同時に設定することがアクセシビリティ上好ましいとされています。
と書かれていますが、サイトを閲覧していて、画像を見るために画像にフォーカスを移してからEnterKeyなりを押して画像を表示させるという行動が私には想像出来なかったため、不要と考えonkeypress属性の対応は削除しました。
必要と思われる場合は適宜追加して下さい。

ChromeがSafariと同じトコロ

Safari以外のユーザーにとってはちょっとだけ便利な機能がChromeでも実装されていたので報告。Chromeの中身のベースはSafariのそれと同じらしいので同様の機能があっても不思議ではない。
大したことではないが、以下の三つ。

textareaの大きさを自由に変えられる

textarea右下端の部分をドラッグすると大きさを変えられます。
Bloggerでテンプレートを直に編集するときにtextareaが小さいと感じていた人にとっては嬉しい仕様のはず。


HTMLの要素のtitle属性に\n(改行)を入れられる

これもSafariの仕様なのですが、Chromeでもtitle属性の文字列に\nを入れるとmouseover時に表示される文字列が改行されます。

jQueryでブラウザ判定するとSafariと認識する

これも結果としては「やはり」といった感じですが、当面はChrome特有の動作の違いが発見されない限り、Safari扱いで動作確認、ということになるでしょうか。

参考) Google Chrome - ウェブ開発者向けの情報
引用:
ウェブサイトが Safari 3.1 でテスト済みの場合、そのサイトは Google Chromeでも正しく動作します。

ちなみに取得できたVersionは
  • Chrome = 525.13
  • Safari3.1.2 = 525.19
Chromeの中身はちょっと古い?

ついでにちょっとしたバグ報告

Chromeで表示されるFormに配置された要素が正しく表示されないことがある。

Firefoxの場合



Chromeの場合


その他、ページ内の文字列を検索しても textarea 内に書かれた文字列は対象とされない。これもSafariと同じでちょっと、いやかなり不便です。

何とかして下さい。Googleさん!

Google Chrome - 感想レポート

Google Chromeについて今更速度テストなどするつもりはない。
私的感覚にヒットしたことを幾つか挙げます。

感覚として一番速い

  • 今更説明不要で速い。5種類のブラウザ(Firefox3, IE7, Opera9.52, Safari3.1.2, Chrome)で幾らか試したがやはり一番速かった。Chromeが速いことより、相対的にOperaが意外に速かったことに驚いた。
  • 私も含めて速いと感じるものが多数のようだが、一応反対の意見(結果)を挙げているものも紹介しておく。

参考: [WSJ] Google ChromeとIE 8はどう違うのか
引用:

わたしがテストしたところでは、Webページを開くという普通の作業で、FirefoxやSafariよりも目に見えて遅かった。…

シンプルなインターフェイス

  • これがChromeの個性とも言えるほどにシンプルなインターフェイス。一見初心者には不向き?とも思える程。基本メニューやツールバーが無いので最初は戸惑うかもしれないが右上にある二つのドロップダウンリスト[ページメニュー]、[Google Chromeの設定]と右クリックメニューから殆どの機能を使用することが出来るなど、機能までもシンプルに作られているので案外初心者向けではないだろうか。

気になった点

■Picasa ウェブ アルバムに対応していない
  • Googleの他サービスであるPicasa ウェブ アルバムに対応していないことがかなり不満です。具体的にはPicasa ウェブ アルバム対応していないブラウザだとアルバムをダウンロード出来ないのですが、Chromeではアルバムをダウンロードすることは出来ません。知る限りではPicasa ウェブ アルバムが対応いているブラウザはIEとFirefox2以下(Firefox3には対応していない)のみです。これって何かヘンですよね。つい最近リニューアルしてページデザインも一新したPicasa ウェブ アルバムですが、検索結果の表示バグや対応ブラウザの少なさなど、必要な修正は放置されたままで、「画像のダウンロードにもう1アクション必要とする仕様変更」、「アルバムを表示するとURLに不必要な『#』が末尾に入り、前のページに戻る場合、2アクション必要になる不具合」など、何とも頂けない。

■ちょっと変わった機能『シークレットウィンドウ』
  • [ページメニュー] - [シークレットウィンドウを開く]を選択すると以下のようなウィンドウが表示されます。読んで字の如く、履歴を残さないシークレットなブラウジングに使用するようです。
Preview:シークレット ウィンドウ
  • この表示された最初のページには強制的にブックマークツールバーが表示され、非表示にすることが出来ません。

■ダウンロードも含めた履歴やブックマークをサイドバーに表示出来れば尚良かった
  • 今現在、主に使用しているブラウザがFirefox3で、このような使い方をしているせいか、利便性から必要。そもそもサイドバーという概念がないChromeがマイノリティでは?

■Googleだからこそ出来る他のサービスとの連動や親和性などの利点が欲しかった
  • 例えば、FireFoxではアドオンの追加でGoogle ノートブックを1クリックでページ隙に表示させることが出来るが、Chrome(Googleが出したブラウザ)ならではのメリットは残念ながら見つけられなかった。
  • Google ToolbarもないおかげでGoogle Bookmarkを使用するにも不便を感じる。とりあえずの応急処置としてBookmarkletを作成し、一応ブックマーク出来るようにはしたが、FirefoxでgMarksを使用している私には不便でならない。

私は『window.open()』のカッコで囲んで新規タブで開くようにしました。


■Firebug的な機能…?
  • FirefoxのFirebugの機能[右クリックメニュー] - [要素を調査]に似た機能[右クリックメニュー] - [要素を検証]があるが、適用されているStyleやページの構造を見る程度なら使えるが、それ以上に求められると辛いか?
  • [ページメニュー] - [開発/管理] - [JavaScriptをデバッグ] or [JavaScriptコンソール]があるのでJavaScriptの開発には少々使えるかも、という印象。

Sony Style(ソニースタイル)
デル株式会社

Recent Posts