AWSでIAMユーザーアカウントに権限をつける

IAMユーザーのアカウントをAdministrator権限にしても、AccountActibityのあたりは閲覧可能になりません。それを解決する方法。

  1. IAMを設定しているアカウント(IAMユーザーアカウントではない)で、アカウントの管理にアクセスする。
  2. "AWS ウェブサイトへの IAM ユーザーアクセス"のアカウントアクティビティページにチェックを入れる
  3. "Activate Now"を押下するとPOPUPがでて、hereが出るのでそこをクリックすると、IAM設定ページに飛ぶ
  4. (Userに付与する場合)ユーザーを選択して、下の方に出るUser個別設定のpermissionsを選ぶ
  5. Attach User Policyをクリックして、Manage User Permissions PopUPが出たら、Select Policy Templateを選んで、下の方にある(現時点だとしたから2番目)を選択して”Apply"を押して、とりあえずは何も変更せずに"Apply Policy"を押して閉じる
  6. User Policiesにこちらのようになっていれば設定完了

SeleniumIDE 使うまで

1. Javaをいれる(Ver.1.6以上)
java -version で入れたバージョンが出ればOK
パスを通すとかもろもろ分からない場合は、「java -version インストール」でぐぐれば大体OK

2. SeleniumServerのインストール
  公式サイトから、「selenium-server-standalone-*.jar」をダウンロードしてくる
  どこかにSeleniumフォルダ作って、jarをそのまま置いておく

3. Internet Exploer Diver Serverのインストール
  公式サイトから「The Internet Explorer Driver Server」をダウンロードして解凍した「IEDriverServer.exe」を2.と同じフォルダに置いておく

4. Selenium IDE2.0 をインストール
(1) FireFoxを起動して、公式サイトにアクセス
(2) Selenium IDEをクリックすると、アドインがインストールできる
(3) FireFoxを再起動したらインストール完了
(4) FireFox -> メニューバー -> ツール -> SeleniumIDE でIDEを起動
(5) IDE -> オプション -> 設定 -> WebDriver -> Enable WebDriver Playbackにチェック
  Browser choices のところで「chrome」を入力しておく

5. Selenium Sereverの起動
(1) コマンドプロンプトを立ち上げる
(2) 2.でjarファイルを置いたディレクトリに cd する
$ cd C:\work\Selenium
(3) java -jar selenium-server-standalone-2.32.0.jar -Dwebdriver.ie.driver=.\IEDriverServer.exe -Dwebdriver.chrome.driver=.\chromedriver.exe
※ 2.32.0のところはダウンロードしたバージョンにあわせる
(4) サービスがスタートしたらOK
Setting system property webdriver.ie.driver to .\IEDriverServer.exe
14:44:54.332 INFO - Java: Oracle Corporation 23.21-b01
14:44:54.332 INFO - OS: Windows XP 5.1 x86
14:44:54.332 INFO - v2.32.0, with Core v2.32.0. Built from revision 6c40c18
14:44:54.457 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
14:44:54.457 INFO - Version Jetty/5.1.x
14:44:54.473 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
14:44:54.473 INFO - Started HttpContext[/selenium-server,/selenium-server]
14:44:54.473 INFO - Started HttpContext[/,/]
14:44:54.567 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@11c9fcc
14:44:54.567 INFO - Started HttpContext[/wd,/wd]
14:44:54.567 INFO - Started SocketListener on 0.0.0.0:4444
14:44:54.582 INFO - Started org.openqa.jetty.jetty.Server@2f54

(5) 下記のようなエラーが出ていたら(すでに起動しています)一旦止める。
(1) ブラウザを起動
(2) http://localhost:4444/selenium-server/driver/?cmd=shutDownSeleniumServer
(3) 止まればOKOKとでる
WARN - Failed to start: SocketListener0@0.0.0.0:4444
Exception in thread "main" java.net.BindException: Selenium is already running on port 4444. Or some other service is.

初心者のためのVim講座

Vimを使ってみようと突然思い立ち、やってみることにしたけど、Windowsユーザーにはハードルが高いので記録を残すことにした。チートシートも頑張って作っていこう。頑張る価値はきっとあるはず。

1.ダウンロード
そもそもなんで使おうかと思ったかというとGiTを使う際にgnupack入れたら入っていたから。ということでとっても便利なgnupackから入ります。
gnupackは、アーカイブを展開するとcygwinemacsgvimmingwなどがさっくり使える環境を提供してくれるすぐれものです。インストール方法はこのページにある通りに行えばできちゃいます。

2.起動してみる

いろいろ書こうと思ったんだけど、@ITのこの記事が素晴らしいのでこちらにゆだねることにした。いまさら聞けないVim
基本、これを読めば大概の人はできちゃうと思う。ということでしばらく使ってみて、チートシートなどを充実させて、経過などを書いていこう(予定)

GridViewのItemTemplateの状態を知りたい

GridViewのItemTemplateのVisibleを動的にfalseにしようとした場合。
通常であれば、これだけでOK

TemplateField tm = gvSamples.Columns.OfType<TemplateField>()
               .Where(f => f.HeaderText == "カラム1")
               .FirstOrDefault();
               tm.Visible = false;

この後、このカラムには動的にJavascriptを生成するCustomTextがあったために
カラムの中のTextBoxもVisible=falseにしたくてはまった。
(1)DataBoundの中で、特定のControlをFindControlする箇所があったので、
そこで一緒にできるといいなーと思って下記に
(2)ControlのParentのVisibleを見ればよいと思ったら、DataControlFieldCellのVisibleではわからないことが判明
(3)違いはこんな感じとなりました。DataControlFieldとDataControlFieldCellを結ぶのはContainingFieldでした。
・isVisibleCell は Visibleがtrue
・isVisibleItemTemplateField はVisibleがちゃんとfalse

protected void gvSamples__DataBound(object sender, EventArgs e)
{
    foreach (GridViewRow gvr in ((CGridView)sender).Rows)
    {
        if (!DataControlRowType.DataRow.Equals(gvr.RowType)) return;
        TextBox txt = ((TextBox)gvr.FindControl("txtTest"));
        
        bool isVisibleItemTemplateField = ((DataControlFieldCell)txt.Parent).ContainingField.Visible;
        bool isVisibleCell = txt.Parent.Visible;
    }
}

jquery ui datepicker とUpdatePanel

datepickerを使うのに下記のように書いていたのですが、UpdatePanelが動くところで当然下記が呼ばれないので、1回でもUpdatePanelで更新が行われると、Calendarが出なくなる問題を解決

(前)

<script type="text/javascript">
    $(function () {
        if ($('.popupDatepicker').datepick)
            $('.popupDatepicker').datepick();
    });
</script>

(後)

<asp:ScriptManager ID="manager" runat="server" EnableScriptGlobalization="True" 
    onasyncpostbackerror="manager_AsyncPostBackError" EnablePartialRendering="true"></asp:ScriptManager>

<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(
    function (evt, args) {
        if ($('.popupDatepicker').datepick)
            $('.popupDatepicker').datepick();
    });
</script>

pageLoadedイベント
pageLoaded イベントは、ページが同期 (ページ全体) ポストバックまたは非同期ポストバックのどちらが実行された結果として更新された場合でも、ページ上のすべてのコンテンツが最新の情報に更新された後に発生します。 このイベントを使用すると、更新されたコンテンツにカスタム遷移効果を適用できます。

ということで、これでイベントが発生するのでばっちり。
結構時間くった。

UpdatePanelでのPostback時はwindow.onloadが走らない

ですが、javascript内のpageLoadという名前のfunctionは必ず動く。のでUpdatePanelでボタンを非表示にして、再度表示した時に、なんでMouseOverが利かなくなるんだろうという問題は下記で解決!

上に、mouseoverのためのScriptが書いてある
・・・・

if (window.addEventListener) {
    window.addEventListener("load", smartRollover, false);
}
else if (window.attachEvent) {
    window.attachEvent("onload", smartRollover);
}

function pageLoad() {
    smartRollover();
}

戻るボタン使った場合の不具合を回避したい

色々事情があり、戻るボタンを使って戻ってきた場合の挙動が完全には確保できないことが判明。
戻るボタンを使わなくても、基本的にはすべてAutoSaveかつ、画面内で行きたいところに行けるようにしているから、よしという判断になりました。で使った方法。

MasterPageのヘッダにこれを入れる。以上