自分用のメモ

ニュースを巡回して、気になるキーワードやわからない単語をメモ。

イマドキのIDE事情
http://journal.mycom.co.jp/column/ide/092/

さくらエディタよいすなー
「JGrepper」OfficeとPDFもGrepできるのはアツイ
WinSCPFTPがだめでSSHってどんなケースだろう
→なるほど、FTPは平文でやりとりするからだめなのか。SSL通信にしてたらSSHと一緒かな
 SSHもセキュリティの脆弱性があるとな。うーむ、こういうのよくわからん。

C#たんと学ぶ/わりと硬派なソフトウェア開発講座
http://codezine.jp/article/detail/5346

フレームワークをベースに学んでいくとな。
中身はほんとに硬派な模様。あとで読んでみよう
読んでみた。最終ページのC#たんの劣化が残念だ。。。
内容はまじめでした。WCF勉強しようかね

連載:C# 4入門
http://www.atmarkit.co.jp/fdotnet/csharp4/csharp4_04/csharp4_04_01.html

C#は3.0までだったからちょっと置いてけぼり喰ってる。
引数の省略できるようになったとな?VB.NETでも多用してるからうれしいなー
省略時のデフォルト値は呼び出し側に記録されるから、デフォルト値変更時は
呼び出し側も際コンパイルが必要とな。なるほど。
メモリの使用についての言及も勉強になった。微々たる差の気もするが、多用できないのね。

ASP.NET MVC 3のGo-Liveライセンス
http://www.infoq.com/jp/news/2010/10/MVC-3-Beta
“Razor”の紹介 − ASP.NET向け新ビュー・エンジン − @IT
http://www.atmarkit.co.jp/fdotnet/scottgublog/20100714razor/razor.html

Razor:ASP.NETのビューエンジンの1つ
  ほかには、SparkやNHamlなど。
  かなり使いやすそう見やすそう!!ほかのエンジンも含め勉強してみよう。
「Go Live」ライセンス
ベータ版の製品で開発したアプリケーションを、そのまま実際の本番環境で運用することを許可するライセンス。
ベータ版は実運用で使っちゃだめなんですね。ライセンス関係も疎いですな。。

元麻布春男の週刊PCホットライン】 次世代CPUが求めるアプリケーションの並列化
http://pc.watch.impress.co.jp/docs/column/hot/20101020_401151.html

Cilk
HPC

InfoQ: Microsoft .NETでの並列プログラミング
http://www.infoq.com/jp/news/2010/10/Parallel-Programming-.NET

メニーコアの時代、並列プログラミングの知識は持っておいたほうがいいかな
既存OOPとの統合アドバイスとかも書いてあるとな
デザインパターンって、勉強になるよね

InfoQ: Scalatra: Sinatraに似たScalaのウェブフレームワーク
http://www.infoq.com/jp/news/2010/10/scalatra

Scala
RubyフレームワークであるSinatra
ガチガチセッションステートは僕も敬遠したい。HTTPってシンプルなのにややこしくしてどうするよ。

キュー構造をJavaで実装してジェネリック型を理解する (1/3) - @IT
http://www.atmarkit.co.jp/fjava/rensai4/java5eclipse19/java5eclipse19_1.html

こういう修正のステップを踏む形式のレクチャって勉強になるよねー。

以上、自分用のメモ

StandardServer.await: create[8005]

Tomcatをインストール後、サービスを起動しても以下のエラーが出て起動できなかった。

致命的: StandardServer.await: create[8005]:
java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:365)
at java.net.ServerSocket.bind(ServerSocket.java:319)
at java.net.ServerSocket.(ServerSocket.java:185)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:373)
at org.apache.catalina.startup.Catalina.await(Catalina.java:662)
at org.apache.catalina.startup.Catalina.start(Catalina.java:614)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

このエラーは、すでにTomcatサービスが起動している場合に起こるそうだが、サービスをみても確実にTomcatは起動していない!
と思ったら、VMWare ServerがTomcatを使用していた。

VMWare Serverはもう使っていないので、VMWare Serverのサービスを停止したら起動した
サービス名:VMware Server Web Access

System.ArgumentException: 型 'System.Int32' のオブジェクトを型 'System.Decimal' に変換できません。

Reflectionを使って、Decimal型のフィールドにプリミティブな数字をセットできない?!

理由は、Decimalはプリミティブな型ではなく、中間コードでは擬似コードに変換されてるみたいです。

http://kekyo.net/kekyo/MoreDeepDotNET/Reflection/Reflection3.htm
↑参考になりました。ありがとうございます。

Decimal型にキャストしたらいけるのかな。。。

Visual Studio 2010 Express がダウンロードできない

Visual Studio 2010 Expressがリリースされましたね!

http://www.microsoft.com/japan/msdn/vstudio/express/

さっそくインストールしようとしましたが、
Webインストールのリンクをクリックしても、
http://search.microsoft.com/?mkt=en-US
に飛ばされてダウンロードができません。。。

理由は簡単でした。

ブラウザに言語が設定されていない場合、ダウンロードが始まらず
別のページに飛ばされるみたいですね

いやーはまった。

iBATISでNpgsql2.xを使う。

iBATISの設定方法は以下を参考にさせていただきました。
http://d.hatena.ne.jp/gsf_zero1/20070930/p1


まず、以下のDLLの参照追加*1

Npgsql.dll
Mono.Security.dll

SqlMap.configに設定を記述する。

<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig
  xmlns="http://ibatis.apache.org/dataMapper"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <!--DBのユーザ命などは、別ファイルから取得するように設定-->
  <!--SqlMap.config中の${〜〜〜}は、下記ファイルで記述した値に置換されます。-->
  <properties >
    <property resource="./setting/properties.config"/>
  </properties>

  <settings>
    <setting useStatementNamespaces="true"/>
    <setting cacheModelsEnabled="false"/>
    <setting useReflectionOptimizer="true"/>
    <setting validateSqlMap="true"/>
  </settings>

  <providers resource="${root}\setting\providers.config"/>

  <database>
    <provider name="${provider}"/>
    <dataSource
        name="${DatasourceName}"
        connectionString="Server=${server};Port=${port};Database=${Database};User Id=${UserId};Password=${Passwd}"/>
  </database>

  <sqlMaps>

    <!-- ログイン -->
    <sqlMap resource="${root}\SQL\login.xml" />

  </sqlMaps>

</sqlMapConfig>


なお、分散トランザクションを使う場合は、connectionStringに"Enlist=true"を記述。

        connectionString="Server=${server};Port=5432;Database=${Database};User Id=${UserId};Password=${Passwd};Enlist=true"/>


properties.configを書いておきます。
SqlMap.configの${〜〜〜}を置き換える値を定義しています。

<?xml version="1.0" encoding="utf-8" ?>
<settings>
  <!--共通項目-->
  <add key="provider"               value="PostgreSql2.0.2.0"/>
  <add key="root"                   value="C:\MyProject" />

  <add key="server"                 value="localhost"/>
  <add key="port"                   value="5432"/>

  <add key="Database"               value="test_db"/>
  <add key="DatasourceName"         value="test_db"/>
  <add key="UserId"                 value="test_user" />
  <add key="Passwd"                 value="12345"/>
</settings>


providers.configを、下記のようにする。
*2

<?xml version="1.0" encoding="utf-8"?>
<providers
xmlns="http://ibatis.apache.org/providers"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <clear/>
  <provider
    name="PostgreSql2.0.2.0"
    description="PostgreSql, Npgsql provider V2.0.2.0"
    enabled="true"
    assemblyName="Npgsql, Version=2.0.2.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
    connectionClass="Npgsql.NpgsqlConnection"
    commandClass="Npgsql.NpgsqlCommand"
    parameterClass="Npgsql.NpgsqlParameter"
    parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType"
    parameterDbTypeProperty="NpgsqlDbType"
    dataAdapterClass="Npgsql.NpgsqlDataAdapter"
    commandBuilderClass="Npgsql.NpgsqlCommandBuilder"
    usePositionalParameters="false"
    useParameterPrefixInSql="true"
    useParameterPrefixInParameter="true"
    parameterPrefix=":"
    allowMARS="true"
  />
</providers>

以上で完成です。

*1:ASP.NETの場合はBinフォルダに入れる

*2:元からあったnpgsql用の設定から、nameとassemblyNameのVersionとPublicKeyTokenを変更しています。

特定のディレクトリのアクセス権限をプログラムから調べる

フォーム認証とロールのアクセス制御を実装してみたが、
アクセス制御が設定されたページへのリンクなども、リンク先のディレクトリのアクセス制御によって、
表示/非表示を切り替えるようにしたい。

そのための、プログラムから現在のユーザがあるディレクトリへのアクセス権限があるかどうかを調べるコード。

    Public Function CheckRoleFromPathForUser(ByVal mapPath As String) As Boolean

        '指定したディレクトリのweb.configの設定を取得
        Dim configuration As System.Configuration.Configuration = _
            WebConfigurationManager.OpenWebConfiguration(mapPath)

        'アクセス権限のセクション取得
        Dim authorizationSection As AuthorizationSection = _
            CType(configuration.GetSection("system.web/authorization"), AuthorizationSection)

        'ロールのString配列取得
        For Each rule As AuthorizationRule In authorizationSection.Rules
            'ロールの許可アクションの場合
            If rule.Action = AuthorizationRuleAction.Allow And rule.Roles.Count <> 0 Then
                'ロールに所属するか否か
                For Each role As String In rule.Roles
                    If HttpContext.Current.User.IsInRole(role) Then
                        Return True
                    End If
                Next
            End If
        Next

        Return False

    End Function

使うときは下のように。

If Not CheckRoleFromPathForUser("~/MyPractice") Then
    HyperLink1.Visible = False
End If