2008年11月20日

 ファイル共有サービスの、Windows Live FolderShareがサービスを終了し、12月からWindows Live Syncがリリースされると開発チームBlog で発表がありました。FolderShareユーザーにはメールも届いています。Blogによると(メールよりBlogの方が情報多い)、Live SyncはFolderShareと比べ

  • 20までのフォルダ、2万までのファイルの同期が可能
  • Live IDとの統合(FolderShareはLive IDではありませんでした)
  • ゴミ箱との統合(FolderShareはゴミ箱用フォルダがありました)
  • WindowsとMacクライアントの提供
  • Unicodeサポート(FolderShareは日本語が文字化けしていました)

とのこと。Live Syncリリース後にFolderShareは使用できなくなり、Live Syncへのアップグレードが通知されるとあります。アップグレードにより自動でLive Syncへ移行できるようですが、多くのフォルダを同期していた場合、自分で再構築する必要があるようです。

Windows Live Sync replacing FolderShare What you need to know

 2005年に買収して、Liveブランドとして今年3月にアップデートされましたが、そのままひっそりと? 終了という感じでしょうか。「The Windows Live Sync (formerly FolderShare) team」とあるので、開発チームは同じなのかな?

posted @ 23:50 | Feedback (92)

 JScript IntelliSense 用ファイルを作る の続き。これって.NETのコードからReflection使って作れそうですよね。

 こんなクラスがあったとして。

Public Class Sample
    Public Shared Function GetString(ByVal i As Integer) As String
    End Function
End Class

 

 ここでは、世の中はSharedなメソッドしかないとします。次のように、Publicな静的メソッドを取り出して、さらにその引数も取り出して、戻り値も取り出して……と、コードを生成します。オーバーロードは考えてません。

 

Dim sb = New System.Text.StringBuilder
Dim t = GetType(Sample)

' Static method
For Each i In t.GetMethods(BindingFlags.Static Or BindingFlags.Public)
    sb.Append(String.Format("{0}.{1} = function({2}) {{" & vbCrLf, _
                            t.Name, _
                            i.Name, _
                            String.Join(", ", (From p In i.GetParameters Select p.Name).ToArray)))
    sb.Append(String.Format("/// <summary></summary>" & vbCrLf))
    For Each p In i.GetParameters
        sb.Append(String.Format("/// <param name=""{0}"" type=""{1}""></param>" & vbCrLf, p.Name, p.ParameterType.JScriptName))
    Next
    If i.ReturnType IsNot GetType(System.Void) Then
        sb.Append(String.Format("/// <returns type=""{0}""></returns>" & vbCrLf, i.ReturnType.JScriptName))
    End If
    sb.Append("}" & vbCrLf & vbCrLf)
Next

Dim js = sb.ToString

 

 JScriptにはIntegerなどはないので、適当な型名変換のメソッドを作ってます。拡張メソッドを使ったりして。JScriptにはない型をparam type属性に書いても、IntelliSenseでその名前が表示されるだけなので必ず変換しないといけないというものではないです。

<Extension()> _
Public Function JScriptName(ByVal t As Type) As String
    Dim numbers As Type() = {GetType(Byte), GetType(Decimal), GetType(Double), GetType(Int32), GetType(Int64), GetType(SByte), GetType(Int16), GetType(Single), GetType(UInt32), GetType(UInt64), GetType(UInt16)}
    If numbers.Contains(t) Then
        Return "Number"
    ElseIf t Is GetType(String) Then
        Return "String"
    ElseIf t Is GetType(Boolean) Then
        Return "Boolean"
    ElseIf t Is GetType(DateTime) Then
        Return "Data"
    Else
        Return t.Name
    End If
End Function

 実行して得られる文字列は、こんな感じ。できました。

Sample.GetString = function(i) {
/// <summary></summary>
/// <param name="i" type="Number"></param>
/// <returns type="String"></returns>
}

 こういうふうにJScript IntelliSense用のコードを生成してくれるライブラリってないんですかね? 実用用途が乏しいからでしょうか。少しさがしてみたところ(いうほどさがしていないけど)、こちら。Silverlight 1.0 Javascript Intellisense は、もう古いけども Silverlight 1.0 向けのIntelliSenseファイル。これは、同じような考えで、DLLファイルからJScriptのコードを生成しているようです。生成されたコードを見てみると、nullや空のfunctionだけでなく、一部コードも生成していますね。IntelliSenseとして利用されるときのテクニックが何かあるのかな。

posted @ 0:17 | Feedback (4)