わんくま同盟 Blog's

わんくま同盟

メニュー

わんくま同盟

  勉強会情報

  メンバリスト

掲示板

ブログ

リンク

統計

わんくま同盟メンバ

わんくま同盟わんくま同盟

わんくま同盟メンバの最新の記事

サンプルアプリをCodePlexに公開しました。

.NETラボの勉強会のセッションで使用したサンプルアプリを CodePlex に公開しました。

ひとまず VB 版を公開しました。

 

http://directoryvb.codeplex.com/

 

Get Domain/User/Group/Computer/OrganizationalUnit(OU)/Printer/Volume objects from Active Directory and display on windows/web forms.

 

 

Active Directory 関連 Blog

http://www.pbyk.com/blog/bloglist.html

posted @ 2014/12/19 23:51 by mitchin(mitchin@wankuma.com)

PowerShellにてタスクスケジューラーのタスク一覧を取得する

これは、PowerShell Advent Calendar 2014の12/19日の記事。

Windows Server 2008R2上のタスクスケジューラに登録しているタスクの結果をチェックして、異常があればメール送信するという依頼を受けた。

最初、タスクスケジューラのログを見れば結果が分かるだろうということで調べてみると、ログはイベントログに出力されることが分かったが、初期設定では履歴は無効になっており有効にしないとイベントログには出力されない。履歴表示を有効にするには右側パネルの「操作」欄から「すべてのタスク履歴を有効にする」をクリックして、「すべてのタスク履歴を無効にする」に変更します。

イベントログを取得するにはPowerShellを使うのがいいということで、PowerShellを勉強し始めた。
PowerShellを使おうとした時に、まず躓くエラー「スクリプトの実行がシステムで無効になっているため…」
http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner05.aspx
「確かに、これは少し厳しいと思われるかもしれません。何しろ、スクリプトを実行できないスクリプト環境なんて、あっても意味がありませんから。」ってこの記事に書いてあるけど、セキュリティー的に仕方ないのかも知れないけど厳しいよね。
でも、PSコマンドプロンプトより下記のコマンドを実行し、実行ポリシーを変更確認で[Y] はい(Y)を選択すれば、それ以降はPowerShellを存分に使える。※32bitと64bitとは別々なのでそれぞれに有効にする必要がある。
「Set-ExecutionPolicy RemoteSigned」


さて、タスクスケジューラのイベントログは「Microsoft-Windows-TaskScheduler/Operational」に登録される。Get-Eventlogコマンドでこのイベントログを取得しようとするも、存在しないとエラーになる。
調べるとGet-EventlogコマンドではなくGet-WinEventコマンドでないと取得出来ないのだった。
参照:[PowerShell]不定期イベントログを捕まえる!nmcapとPowerShellで必要なイベントログのみ取得する(2/2)

$IpAddress = "127.0.0.1"
$EventLogName = "Microsoft-Windows-TaskScheduler/Operational"
$StartDate = Get-Date
$EndDate = $StartDate - (New-TimeSpan -day 1)
$file = Split-Path $myInvocation.MyCommand.Path -Parent
$file = $file + "\tasklist.txt"

#イベントログ取得
function getEventLog ($IpAddress,$EventLogName,$StartDate,$EndDate,$file) {
    #イベントログ取得
    #201は操作が完了しました。
    $logArray = Get-WinEvent -Computername $IpAddress -logname $EventLogName | Select-Object * | 
            Where-Object {$_.TimeCreated -lt $StartDate -AND
                  $_.TimeCreated -gt $EndDate -AND
                  $_.UserId.Translate([System.Type]::GetType("System.Security.Principal.NTAccount")) -match "Administrator" -AND
                  $_.ID -eq 201 }


    #期間内のイベントログが無い場合は、ファイルにログ無しと書き込む
    if ($null -eq $logArray) {
        $message = "イベントログがありません。 期間:" + $startdate + " ~ " + $enddate
        $message | Out-File -Filepath $file
    }
    else {
        #ヘッダ情報をファイルに書き込む
        $line = "日時,イベントID,カテゴリ,ユーザー,タスク名,実行結果"
        $line | Out-File -Filepath $file
        #取得したイベントログをファイルに書き込む
        foreach ($row in $logArray) {
            #日付の書式を整形
            $workTimeCreated = [string]$row.TimeCreated.ToString("yyyy/MM/dd HH:mm:ss")

            #一行としてまとめる
            $line = $workTimeCreated + "," + [string]$row.ID + "," + [string]$row.TaskDisplayName + ","
            $line += [string]$row.UserId.Translate([System.Type]::GetType("System.Security.Principal.NTAccount")) + ","
            $line += [string]$row.Message.split("`"")[1].SubString(1) + ","     #タスク名
            $line += [string]$row.Message.SubString($row.Message.LastIndexOf(":")+2) #実行結果
            #ファイルに書き込む
            $line | Out-File -Filepath $file -Append -encoding Default
        }
    }
    #ファイルの存在チェックをして終了
    if (Test-Path $file) {
        #ログを出力
        Write-Host $file "を作成しました。"
    }
}

#実行
getEventLog $IpAddress $EventLogName $StartDate $EndDate $file

見よう見まねで作成してみて実行すると、数行のイベントログをCSV形式出力するだけなのに結果がでてくるのに1分以上もかかるのである。
きっと別のいい方法があるはずだと家に帰宅してから調べ直すと、「schtasks.exe /query /V /FO CSV」でタスク名と実行結果などがCSV形式出力することが分かった。

Function gettasks($Path)
{
  $OutPut = $Path + "\tasklist.txt"

  "実行時刻,タスク名,結果" | Out-File $output -encoding default

  $Tasks = schtasks.exe /query /V /FO CSV | ConvertFrom-Csv | Where { $_."ユーザーとして実行" -Like "*administrator" }
  ForEach ($Task in $Tasks) {
    If ($Task."実行するタスク" -match "TaskSchtCheck"){
    #自分のタスクは除く
    continue
   }
    $BeforeRunTime = $Task."前回の実行時刻"
    $TaskName = $Task."タスク名".SubString(1)
    $BeforeResult = $Task."前回の結果"
    "$BeforeRunTime,$TaskName,$BeforeResult" | Out-File $OutPut -append -encoding default
  }
}

Function Get-ScriptDirectory
{
    Split-Path $script:MyInvocation.MyCommand.Path
}

#実行
gettasks(Get-ScriptDirectory)
Out-File -encoding defaultとすることで文字コードがSJISのCSVが出力される。
VBSでCSVファイルを参照して、結果が2以上ならメール送信する仕組みとした。
VBSからPowerShellのスクリプトを実行するのは下記の通りです。
Set objShell = CreateObject("Wscript.shell")
objShell.run("powershell -file GetTaskList.ps1")
【追記】タスクスケジューラからVBSを呼ぶ場合、フルパス、PowerShellの画面非表示(0)、同期処理(True)にする
objShell.run "powershell -file """ & scriptRootPath & "GetTaskList.ps1""",0,True

posted @ 2014/12/19 3:19 by やじゅ

Visual Basic 2015以降の新機能 その4

これは、Visual Basic Advent Calendar 2014の12/18日の記事。

VB2015(VB14.0)の新機能として下記9項目を挙げたのですが、幾つかの機能については次のVB15.0以降になるようです。
やはり、この時点でVisual Studio 2015 Preview版に実装されていないのは持ち越しのようです。
.NET Compiler Platform ("Roslyn") のサイトにて「Added」の項目は追加されています。

 

【VB2015(VB14.0)の新機能】参照:VBの新しいステートメントUpcoming Features in Visual Basic
1.Select Caseステートメントの拡張 → 次バージョンにて実装予定
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル → 次バージョンにて実装予定
6.数値区切りリテラル → 次バージョンにて実装予定

7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
9.C#との相互運用でOverridesキーワードがある場合のOverloadsキーワードの省略を可能に


5.バイナリーリテラルについて説明します。
この機能はVisual Studio 2015 Preview版では確認できませんでした。

VBは10進、8進(&O)、16進(&H)はあるが2進(&B)は無い、F#やC++と同様に接頭頭&Bをサポートしたい
Dim x = &B11100101 

6.数値区切りリテラルについて説明します。
この機能はVisual Studio 2015 Preview版では確認できませんでした。
長いリテラルはある程度のグループ区切りにして視認性をよくしようという試みです。
例えば金額は3桁区切りとして、「1 000 000」とする。

区切りはISO規格のスペースとアンダーバーの両方をサポートする。
Enum E
    Car      = &B 00 01
    Bicycle  = &B 00 10
    Foot     = &B 00 11

    Fastest  = &B_01_00
    Shortest = &B_10_00
    Scenic   = &B_11_00
End Enum


7.複数行にまたがるステートメントに対するコメントについて説明します。
この機能はVisual Studio 2015 Preview版で確認できました。
これまで行継続の後にコメントを書き込むことはできなかったので、これは嬉しいです。
例えば配列/オブジェクト初期化子内またはLINQ式の個々の行などにコメントが書けるわけです。

Dim  invites = { "Jim" ,    ' got to invite him! 
                "Marcy" ,   ' Jim's wife 
                "Jones" } 

Dim  addrs =  From  i  In  invites   ' go through list 
             Let  addr = Lookup(i)   ' look it up 
             Select  i, addr
 

posted @ 2014/12/18 23:01 by やじゅ

[Azure]Microsoft Azure Mobile ServicesでFacebookに投稿する

Microsoft Azrue Mobile Servicesでは、Microsoftアカウント、Facebook、Google、Twitterなどを認証寄稿として利用できます。

Facebook認証を選択した場合、そこで取得したアクセストークンを使ってカスタムAPIからFacebookに自動投稿することができます。

AEDオープンデータプラットフォームにてbetaテスト中の更新機能もこの機能を使って位置情報を登録、更新したときにFacebookに自動投稿をして(あとは、SendGrid使ってメールも飛ばして)います。このように操作履歴をSNSに投稿することで、位置情報の収集に貢献している人の見える化、そして、いたずらの発見と戻しがスムーズに行えるように考慮されています。

つまり、Facebookの自動投稿をクライアント側ではなく、Mobile Services側に実装することで投稿を回避するような迂回ができなくなるわけです。

 

Facebookにアプリを登録

Facebookを認証機構として使う場合は次のようにします。

image

Facebookに開発者登録を行い、アプリ登録を行います。

Microsoft Azrue Mobile Services側でFacebook認証を行うのならば、ここでは「ウェブサイト」として登録してMobile Servicesに作成したサービスのURLを登録します。

FacebookアプリをMobile Servicesに登録

Facebookにアプリを登録するとアプリケーションIDとアプリのシークレットキーが生成されますので、これをMobile Servicesに登録します。

image

カスタムAPIにアクセス制限をかける

image

アクセス制限をかけたいカスタムAPIのメソッドに対して「認証されたユーザーのみ」を設定します。

 

この設定によりFacebook認証を行わずにGETしようとすると次のようなエラーが発生します。

image

 

認証を通してアクセス制限がかかったカスタムAPIメソッドを実行する

Windows Azrue Mobile Services側でFacebook認証を行うためには、Mobile Services SDKを使ってクライアント側で次のコードを実行します。

await mobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook);

 

このコードを実行すると自動的にFacebookのログイン画面がSDKにより表示されます。

image

 

FacebookのIDとパスワードを入れて[ログイン]をクリックして成功すれば、アクセス制限のかかったカスタムAPIにアクセスできます。

カスタムAPI

それでは最後にFacebookに投稿するためのカスタムAPIについてみていきましょう。

exports.post = function(request, response) {
    PostFacebook(request,'UPDATE',response);
};

function PostFacebook(request,mode,response,results)
{
    var user = request.user;
    var LocationName = request.body.LocationName;
    var FacilityPlace = request.body.FacilityPlace;
    var VenueId = request.body.VenueId
    user.getIdentities({
        success: function(identities) {
            if (identities.facebook) {
                var req = require('request').defaults({strictSSL: true});
                var fbAccessToken = identities.facebook.accessToken;
                var providerId = user.userId.substring(user.userId.indexOf(':') + 1);;
                var userName = "";
                var userLink = "";
                /* get user info */
                { 
                    var uri = 'https://graph.facebook.com/' + providerId + '?access_token=' + fbAccessToken;
                    req(uri, {json: true},function(err,resp,body) {
                        if (err) {
                            console.error('Error sending data to FB Graph API: ', err);
                            response.send(statusCodes.INTERNAL_SERVER_ERROR);
                        } else {
                            if (resp.statusCode !== 200)
                            {
                                console.error(JSON.stringify(body));
                                response.send(statusCodes.INTERNAL_SERVER_ERROR);
                            } else {
                                userName = body.name;
                                userLink = body.link;
                                /* post feed for Facebook page */
                                if (userName.length > 0)
                                {
                                    var message = "posted:" + userName + " " + userLink + "\n"; 
                                    message = message + mode + ":" + LocationName;
                                    if (FacilityPlace) {
                                        message = message + " " + FacilityPlace + "\n";
                                    }
                                    message = message + "\n";
                                    if (VenueId) {
                                        message = message + " https://ja.foursquare.com/v/" + VenueId;  
                                    }  
                                    var uri = 'https://graph.facebook.com/614536118659766/feed';
                                    req.post(uri, {
                                        form: {
                                            message: message,
                                            access_token: fbAccessToken
                                        },
                                        json: true
                                    }, function(err,resp,body) {
                                        if (err) {
                                            console.error('Error sending data to FB Graph API: ', err);
                                            response.send(statusCodes.INTERNAL_SERVER_ERROR);
                                        } else {
                                            /*if (resp.statusCode !== 200 && resp.statusCode !== 506)
                                            {
                                                if (mode == "INSERT")
                                                {
                                                    InsertData(request,response);    
                                                } else {
                                                    UpdateData(request,response);    
                                                }
                                                console.error(JSON.stringify(body));
                                                response.send(statusCodes.INTERNAL_SERVER_ERROR);
                                            } else {
                                            }
                                            */
                                            if (mode == "INSERT")
                                            {
                                                InsertData(request,response);    
                                            } else {
                                                UpdateData(request,response);    
                                            }
                                        }
                                    });
                                } else {
                                    response.send(statusCodes.BAD_REQUEST);
                                }
                            }
                        }
                    });
                }
            }
        },
        error : function()
        {
            response.send(statusCodes.INTERNAL_SERVER_ERROR);
        }
    });
}

 

このカスタムAPIを呼び出せば、更新時には次のような投稿が自動的にFacebookページに送られます。image

以上

posted @ 2014/12/17 0:59 by 初音 玲

2014年の活動ふりかえり

12月も半ばなので今年1年の振り返りをします。4月更新なので1月~12月が評価対象なのでわかりやすいですね。

今年も自分が好きな開発環境とプラットフォームで色々なところでお話させて頂いたり活動させて頂いたりしました。

色々な人と出会うのは本当に楽しいですね。それはきっと出会う人が真剣に技術に向き合ったり、向き合っている人をサポートしようとしている人たちだからですね。

そんな出会いがまた来年ありますように。

slideshare
  1. LEGO MINDSTORMS EV3 API
    http://www.slideshare.net/akirahatsune/lego-mindstorms-ev3-api
  2. MVP Community Camp 2014 - How to use enhanced features of Windows 8.1 Store Apps
    http://www.slideshare.net/akirahatsune/mvp-community-camp-2014-how-to-useenhanced-features-of-windows-81-store-apps
  3. Kinect for Windows v2 Developer Preview入門
    http://www.slideshare.net/akirahatsune/kinect-for-windows-v2developer-preview
  4. 初音玲の流儀 - なんでプログラミングしているの?
    http://www.slideshare.net/akirahatsune/msp-lt-hatsune
  5. TMCN tech-cafe Vol.01 Day3資料
    http://www.slideshare.net/akirahatsune/tmcn-techcafe-vol01-day3
  6. ストアアプリ →universal Windows Apps =WP8.1アプリ
    http://www.slideshare.net/akirahatsune/universal-windows-appswp81
  7. AEDオープンデータアプリ
    http://www.slideshare.net/akirahatsune/aed-36502419
  8. エフサミ2014 - Kinect2で未来をつかむ
    http://www.slideshare.net/akirahatsune/kinect2-36953401
  9. Microsoftテクノロジーが支えるAEDオープンデータプラットフォーム
    http://www.slideshare.net/akirahatsune/microsoftaed
  10. モバイルがモーションセンサーに 出会ったら
    http://www.slideshare.net/akirahatsune/ss-38750138
  11. KinebrickEV3におけるスタイリッシュモーションの取り組み
    http://www.slideshare.net/akirahatsune/20140924-ted-hatsune
  12. Xamarinでアプリを作ったときのエトセトラ
    http://www.slideshare.net/akirahatsune/20141018-hatsune
  13. MA10 Tokyo#2 AED検索
    http://www.slideshare.net/akirahatsune/ma10-tokyo2-aed
  14. MA10 Tokyo#2 東北さくらトリップ
    http://www.slideshare.net/akirahatsune/ma10-tokyo2
  15. Kinect v2 からUSBでつないだ機器をコントロールしてみよう Vol.1
    http://www.slideshare.net/akirahatsune/kinect-v2-usb-vol1
  16. Open Fab Night Sensor Special - Android編
    http://www.slideshare.net/akirahatsune/open-fab-night-sensor-special-android
アプリ(初版リリース)
  1. AEDオープンデータプラットフォーム(AEDオープンデータAPI)
    http://hatsunejournal.jp/w8/AEDOpendata/
  2. AED検索 for Windows 8
    http://apps.microsoft.com/windows/app/aed/80f3b639-4e00-4748-ba71-64afafb90a4a
  3. 東北さくらトリップ for Windows 8
    http://apps.microsoft.com/windows/app/e35a3203-6b5a-47fb-8ea7-765ccf4a5dc9
  4. AED検索 for Windows Phone 8
    http://www.windowsphone.com/s?appid=7784b242-cd45-4e73-88e2-86dd10c2e6d2
  5. KinebrickEV3
    http://apps.microsoft.com/windows/app/kinebrickev3/77770be7-3c73-4bab-ba90-c29a5344c06e
サンプルコード(初版リリース)
  1. 2014/01/11 https://code.msdn.microsoft.com/Kinect-for-Windows-v2-d1bb68ec
  2. 2014/01/14 https://code.msdn.microsoft.com/Kinect-for-Windows-v2-2b5842b9
  3. 2014/09/04 https://code.msdn.microsoft.com/AED-Opendata-Search-Sample-117dfafc
  4. 2014/11/16 https://code.msdn.microsoft.com/Kinect-v2-USB-step01-6691d144
登壇
  1. 2014/03/15 組み込みとNUI を1日たっぷり勉強する会(初心者、未経験者歓迎)
  2. 2014/03/18 MVP Community Camp 2014 オンライン登壇
  3. 2014/03/22 MVP Community Camp 2014 東京会場登壇
  4. 2014/03/30 MVP&MSP Dev Camp
  5. 2014/04/23 TMCN tech-cafe Vol.01
  6. 2014/05/10 Windows Phone ARch in Tokyo #03
  7. 2014/05/17 //publish/ハッカソン
  8. 2014/07/12 エフサミ2014
  9. 2014/08/08 NSStudy #3 Microsoftテクノロジーが支えるAEDオープンデータプラットフォーム
  10. 2014/09/05 Developer Sumit 2014 in Kansai - モバイルが モーションセンサーに 出会ったら
  11. 2014/09/24 東京エレクトロンデバイス株式会社主催 Kinect for Windows v2最新情報セミナー
  12. 2014/10/01 Tokyo MotionControl Network Vol.09 with Windows女子部
  13. 2014/10/18 わんくま東京勉強会#92
  14. 2014/11/14 みんなで作る!センサー&デバイス製作体験!?LEGO Mindstorm EV3ハンズオン vol.01
  15. 2014/11/26 みんなで作る!センサー&デバイス製作体験!?LEGO Mindstorm EV3ハンズオン vol.02
  16. 2014/12/05 Open Fab Night Sensor Special
  17. 2014/12/14 ハッカソンをハックする
Web記事
  1. 2014/01/24 新型Kinectの骨格データに関する新機能とは?
    http://www.buildinsider.net/small/kinect2dp/03
  2. 2014/03/28 世界最速・最新情報、March SDK Update(Kinect for Windows v2 Developer Preview)の内容に迫る!
    http://www.buildinsider.net/small/kinect2dp/04
  3. 2014/05/08 Windowsストアアプリ対応に、Unityサポートも ― 最新April SDK Update(Kinect for Windows v2 Developer Preview)の新機能
    http://www.buildinsider.net/small/kinect2dp/05
  4. 2014/07/10 Kinect.Xaml.ControlsでストアアプリからKinectを操作する
    http://www.buildinsider.net/small/kinect2dp/06
  5. 2014/07/10 日本最速レビュー。開発者目線で調査する「Kinect for Windows v2」パブリックプレビュー版
    http://www.buildinsider.net/small/kinect2dp/07
  6. 2014/01/09 「LEADTOOLS」を使ってKinectから取得した距離データを可視化しよう
    http://codezine.jp/article/detail/7573
  7. 2014/02/18 「LEADTOOLS」を使ってWindowsストアアプリに画像処理機能を実装しよう
    http://codezine.jp/article/detail/7610
  8. 2014/03/04 ComponentOne Studioで他のWindowsストアアプリと差別化しよう
    http://codezine.jp/article/detail/7660
  9. 2014/04/03 ComponentOne Studioのラジアルメニューを使いこなそう
    http://codezine.jp/article/detail/7715
  10. 2014/04/30 手の位置をチャートで可視化しよう
    http://codezine.jp/article/detail/7753
  11. 2014/05/30 噂のユニバーサルWindowsアプリにComponentOne Chartを使ってみよう
    http://codezine.jp/article/detail/7798
  12. 2014/07/10 Doc-To-Helpを活用した手を抜かないヘルプファイルの手抜き術
    http://codezine.jp/article/detail/7878
  13. 2014/08/11 軽量な表形式コンポーネントFlexGridでタッチ対応業務アプリを構築する
    http://codezine.jp/article/detail/7957
  14. 2014/09/25 ComponentOne Studioの地図コンポーネント+オープンデータでマッシュアップしよう
    http://codezine.jp/article/detail/8118
  15. 2014/10/20 Bing Mapsよりも使いやすい? ComponentOne Studioの地図コンポーネントでストアアプリを作ろう
    http://codezine.jp/article/detail/8188
  16. 2014/11/28 日本の帳票文化のWeb化に真正面から取り組んだらこうなった~Excel方眼紙イメージのWebアプリ作成ツール「Forguncy」
    http://codezine.jp/article/detail/8306

posted @ 2014/12/15 12:31 by 初音 玲

Visual Basic 2015以降の新機能 その3

これは、Visual Basic Advent Calendar 2014の12/15日の記事。

VB2015(VB14.0)の新機能として下記9項目を挙げたのですが、幾つかの機能については次のVB15.0以降になるようです。
やはり、この時点でVisual Studio 2015 Preview版に実装されていないのは持ち越しのようです。
.NET Compiler Platform ("Roslyn") のサイトにて「Added」の項目は追加されています。

 

【VB2015(VB14.0)の新機能】参照:VBの新しいステートメントUpcoming Features in Visual Basic
1.Select Caseステートメントの拡張 → 次バージョンにて実装予定
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル
6.数値区切りリテラル
7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
9.C#との相互運用でOverridesキーワードがある場合のOverloadsキーワードの省略を可能に


3.複数行にまたがった文字リテラルについて説明します。
この機能はVisual Studio 2015 Preview版を確認できました。
文字リテラルの”Hello(改行)World”を宣言する場合を例に挙げます。

現行のvbCrLfを使っての宣言方法(VB2010にて行継続文字「 _」は省略可能)
Dim x = "Hello" & vbCrLf & 
"World"
VB2008にて追加されたXMLリテラルによる宣言方法 Dim x = <xml><![CDATA[Hello World]]></xml>.Value

VB2015ではvbCrLfを使わなくても改行をそのまま宣言できるようになりました。
Dim
x = "Hello World"

4.yyyy-MM-dd型の日付リテラルについて説明します。
この機能はVisual Studio 2015 Preview版を確認できました。
日付リテラル(シャープ記号(#)で文字列を囲む)の区切り文字はスラッシュ(/)、ハイフン(-)のどちらでも記述可能です。

現行ではMM/dd/yyyyとUS書式です。
Dim d = #15/12/2014#
VB2015ではyyyy/MM/ddとISO書式でも書けるようになりました。
Dim
d = #2014/12/15#

posted @ 2014/12/15 2:39 by やじゅ

Windowsのネットワーク上の共有ファイルでの右クリックが遅い

これは、1分で実現できる有用な技術 Advent Calendar 2014の14日目の記事。

会社では共同作業をする上でファイルサーバーにファイルを置いて共有しているのが一般的です。
この時に、ファイルサーバー上の共有ファイルに対して右クリックしようものなら、メニューが表示されるまで20秒~40秒かかる。
しかも、少し作業した後に再び共有ファイルを右クリックするとまた同じ状態となり、すごくイライラします。

この原因はWindowsのサービスにある「WebClient」が有効の場合、余計なアクセスが発生するためです。
WebClientサービスは、WebフォルダなどHTTPを使ったファイル共有機能であるWebDAVのクライアント機能を実現しているサービスです。
WebDAVはWWWでファイルの転送に使われるHTTPを拡張した機能です。
Windowsのファイル共有はSMBといってMicrosoft独自仕様ですが、WebDAVはインターネット標準仕様です。
WebClientサービスが有効だとファイルサーバー(Samba)へアクセスする前にWebDAV(tcp:80)での接続ができるか確認しているから遅いわけです。参照:Windows XPからファイルサーバへの接続が非常に遅い

WebDAVを全く使う予定がない場合は、クライアント側のWebClientサービスを停止してしまいましょう。
(ちなみに、Windows Server 2008からはWebClientサービスは最初から無効になっています)

下記の設定をすればいいので、1分で実現できます。
画像付きで見たい場合は「ネットワーク上の共有ファイル右クリック時に反応が遅い」を参照してください。
1.[スタート]から[管理ツール]→[サービス]を開く
2.[WebClient]をダブルクリックしプロパティを開く
3.[スタートアップの種類]を[手動]に変更し、[停止ボタン]でサービスを停止する。

posted @ 2014/12/14 11:52 by やじゅ

[Xamarin]Xamarin.AndroidにHVC-C SDKを移植

現在、オムロンさんのHVC-Cベータ版モニターに参加しています。
何かアプリをつくらないといけないのですが、それよりもVisual Studioでアプリを構築できるように集中しちゃった結果がこれです。
 
もちろん正統派なEclipse + ADTでJavaというのもやってはみたんですよ。
 
 
でもなんとなーくやってみたらbluetoothの検出とかXamarin.Androidでさくっとできてしまったので、これはSDKのXamarin用をつくらないといかないかなーと。
WP_20141213_001
 
で、SDK本体の方は素直に移植したんですが、MainActivity.java(つまりSDKを呼び出すサンプルアプリ側)が難しいwww
試行錯誤して色々調整して、async/awaitに少しSDKを書き直したら動き始めました。
 

 

一応は動きましたがSDKの内部構造をちゃんとasync/await使った非同期待ち合わせやTask使った非同期実行にすることで、受信データの待ち合わせループとか最小化してCPU使わないようにできそうなのでもう少しだけブラッシュアップしようかと思います。

でも時間が…

サンプルアプリの代わりのXamarin.Android版SDKを提出でもいいですか?wwww

posted @ 2014/12/14 11:38 by 初音 玲

[Xamarin]Xamarin.Androidで地図を使う

Google Maps Android API v2を利用できるようにする
Androidアプリ署名用キーストアからフィンガープリントを取得

コマンドプロンプトでkeytoolを起動しAndroidアプリ署名用キーストアからフィンガープリントを取得します。以下の説明では、デバッグ用のキーストアであるdebug.keystoreからフィンガープリントを取得する方法を説明しています。

アルファ版やベータ版を含めてストア登録して配布するためにはデバッグ用キーストアではなく、この時点で正式なAndroidアプリ署名用キーストアを指定します【作り方は次回)。

 

"C:\Program Files (x86)\Java\jdk1.6.0_39\bin\keytool.exe" ?list -v -keystore "C:\Users\hatsune\AppData\Local\Xamarin\Mono for Android\debug.keystore" -alias androiddebugkey -storepass android
-keypass android
別名: androiddebugkey
作成日: 2014/03/02
エントリタイプ: PrivateKeyEntry
証明連鎖の長さ: 1
証明書[1]:
所有者: CN=Android Debug, O=Android, C=US
発行者: CN=Android Debug, O=Android, C=US
シリアル番号: 5312ba0d
有効期間の開始日: Sun Mar 02 13:56:45 JST 2014 終了日: Fri May 29 13:56:45 JST 2
043
証明書のフィンガープリント:
         MD5:  A7:DC:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:01
         SHA1: 67:5A:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:■■:0F
         署名アルゴリズム名: SHA1withRSA
         バージョン: 3
Google Developers Centerに作成するアプリ用のProjectを作成

image

Google Developers Consoleにログインして、[Create Project]ボタンをクリックします。

 

image

Project名を指定します。Project IDは自動的に生成されます。

image

 

APIの有効化

プロジェクト名をクリックしてoverviewを表示します。

image

[Enable an API]ボタンをクリックしてAPIリストを表示します。

 

「Maps」で絞り込んで、「Google Maps Android API v2」の行を見つけたら[OFF]ボタンをクリックしてSTATUSを[ON]にします。これでGoogle Maps Android API v2が有効になりました。

image

 

APIキーを取得する

[APIs & auth]-[Credentials]メニューを選択し、[Publis API access]にある[Create new Key]ボタンをクリックします。

image

 

Create a new key画面で[Android key]ボタンをクリックしてAndroid Keyの作成を開始します。

image

 

「keytoolで作成したSHA1フィンガープリント」+「;」+「パッケージ名」を入力してから[Create]ボタンをクリックします。

image

APIキーが表示されるので、これをAndroidManifest.xmlに転記します。

AndroidManifest.xmlの設定

image

Required Permissionsで次のものを選択します。

  • ACCESS_COARSE_LOCATION (GPS非利用時は指定不要)
  • ACCESS_FINE_LOCATION(GPS非利用時は指定不要)
  • ACCESS_MOCK_LOCATION(GPS非利用時は指定不要)
  • ACCESS_NETWORK_STATE
  • ACCESS_WIFI_STATE
  • INTERNET
  • WRITE_EXTERNAL_STORAGE

この状態でAndroidManifest.xamlは次のような内容になっています。

<?xml version="1.0" encoding="utf-8"?>
<manifest package="jp.hatsunejournal.AEDSearch" xmlns:android="http://schemas.android.com/apk/res/android" android:installlocation="auto" android:versioncode="1" android:versionname="1.0.1">
  <uses-sdk android:targetsdkversion="19" />
  <application android:icon="@drawable/Icon" android:label="AED検索">
  </application>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

あとは直接ファイルを開いて変更します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="jp.hatsunejournal.AEDSearch" android:versionCode="1" android:versionName="1.0.1">
  <uses-sdk android:targetSdkVersion="19" />
  <application android:label="AED検索" android:icon="@drawable/Icon">
    <!-- APIキーの設定 -->
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCbwVTZ_mpWOVvnI3vke75QD9ZnheiMfCA" />
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
    <!-- -->
  </application>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  
  <!-- 権限の追加 -->
  <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
  
  <!-- OpenGL ESの設定-->
  <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
</manifest>

 

必要なAndroid SDKのインストール確認

今回はAndroid 4.2.2 (API17)をターゲットとしてアプリを作成します。4.2.2以外に、Google Play servicesなど必要なライブラリをAndroid SDK Mangerで導入しておきましょう。

image

Xamarin.Forms.Mapsコンポーネントの環境設定
Nugetでの導入

NugetでXamarin.Forms.Mapsを追加したら、必ず更新プログラムを確認して必要なライブラリを最新化します。

image

app.configの設定(2014年11月現在)

2014年11月現在の状況では、Xamarin.Forms.Maps導入後にapp.configにバージョン互換性の設定を行う必要があります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Primitives" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.28.0" newVersion="4.2.28.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
コンパイルエラーの解消

ドキュメントやネット上の情報ではここまでやれば環境整備が完了と思っていましたが、実際にビルドすると

Unzipping failed. Please download 
https://dl-ssl.google.com/android/repository/google_play_services_5089000_r19.zip
 and extract it to the 
C:\User\Project\dotNET2013\WinRT\AEDSearchXamarin\packages\Xamarin.GooglePlayServices.19.0.0.1\lib\MonoAndroid23\19\content
 directory.

というようにunzipできないというエラーが発生して、unzipできないためにzipファイルの中身が電解できずに「google-play-services_lib/libs/google-play-services.jar」がないというビルドエラーが発生してしまい、ビルドできません。

これはzipファイルには実際に必要なjarファイル以外にもjavaファイルなど必須ではないファイルも含まれているのですが、この必須ではないファイルのフォルダ構造が深いためにパス名が長くなってしまいunzipできないという状態になっています。

 

そこで、zipファイルを取得して、それを所定の位置「<プロジェクトルート>\packages\Xamarin.GooglePlayServices.19.0.0.1\lib\MonoAndroid23\19\content」フォルダにフォルダ構造を維持して手作業で展開します。このときも同様にエラーが発生しますが、jarファイルだけ展開できればいいので、不必要なファイルの展開エラーは無視します。

 

これで再度ビルドすれば無事ビルド完了となります。

エミュレーターでの地図表示

image

現在、Android SDK、Genymotion、Xamarin Android Playerなどのエミュレーターのそれぞれの最新版の中でGoogle Play Serviceまで導入できて地図も表示できるのはXamarin Android Playerのようです。このあたりは、エクセルソフトの田淵さんのblogに詳しく載っています。

AED検索 for Androidもちゃんと地図が表示できます。

image

image

 

こんな感じでXamarin Formsで地図表示となるととても大変で、まだ本家のXAMLと比べると足りない点も多いのですが、ベータやアルファの状態を見るとこれからもXamarin Formsは拡充が続くようですので、最新動向に今後も注目していきたいと思います。

posted @ 2014/12/13 23:10 by 初音 玲

[Xamarin]MVP Community Camp 2015東京会場

https://msevents.microsoft.com/cui/EventDetail.aspx?EventID=1032608669&culture=ja-JP

■日時:2015 年 1 月 31 日(土)13:00-17:50(受付開始:12:00)

■場所:日本マイクロソフト株式会社 セミナールーム

■スケジュール:
13:00 - 17:50 技術セッション(1 コマ / 50 分)
18:20 - 19:30 Happy Hour(懇親会)

 

実例枠の最初の時間枠で「使ってこそのテクノロジ。クロスプラットフォームAED 検索のキモ」ということで、Microsoft Azureを中核にして、universal Windows appsやXamarinなどを使ったクロスプラットフォーム開発の実例を紹介したいと思います。

試行錯誤の結果をご覧ください。

posted @ 2014/12/13 18:38 by 初音 玲

[AED]オープンデータの活用について

AEDオープンデータプラットフォームでは、各自治体が公開しているオープンデータやPDFファイルなどの情報を統一したフォーマットで一括格納し、REST/JSONにて統一的なアクセス方法にてデータ提供しています。

http://hatsunejournal.jp/w8/AEDOpendata/

 

各自治体のデータには様々な項目の違いがありますが、提供していただいたオープンデータは主に以下の手順によりチェックしながらデータ投入を行っています。

  1. 県、市町村区、それ以降に住所を分割する。
  2. 緯度経度がない場合は、住所から緯度経度を求める。
  3. 緯度経度変換が難しい時にはBing MapやGoogle Mapなので目視確認しポイントする。このとき設置施設が閉鎖されている事が判明することがある。
  4. 施設に複数のAEDがある場合は、AEDごとにデータを分けて設置場所にて識別できるようにする
  5. 大型施設(大学、スタジアム、公園など)の場合には、できるかぎり設置場所にあった緯度経度に調整する
  6. 施設内の設置場所が分からないときは、施設のWebサイトなどで確認する
  7. 上記で求めた緯度経度を含む情報をSQL文に変換して一括投入する
  8. 一括投入時にエラーがでたり、投入後に該当自治体の地図上にアプリで位置を表示し、あからさまにエリア外のものは詳細を確認する

このような形で頂いたデートチェックしながら投入しています。

なお、この過程で判明した不具合についてはデータ提供元にご連絡差し上げています。

現時点で、自治体網羅率25%、台数網羅率15%のですが、自治体でのオープンデータの流れが進めばより収集が加速されるものと考えます。

もちろん、Excelファイル持ち込みによるREST/JSON化などのご依頼も大歓迎ですので、ぜひ、ご活用ください。

posted @ 2014/12/12 1:36 by 初音 玲

Visual Basic 2015以降の新機能 その2

これは、Visual Basic Advent Calendar 2014の12/11日の記事。

VB2015(VB14.0)の新機能として下記9項目を挙げたのですが、幾つかの機能については次のVB15.0以降になるようです。
やはり、この時点でVisual Studio 2015 Preview版に実装されていないのは持ち越しのようです。
.NET Compiler Platform ("Roslyn") のサイトにて「Added」の項目は追加されています。

 

【VB2015(VB14.0)の新機能】参照:VBの新しいステートメントUpcoming Features in Visual Basic
1.Select Caseステートメントの拡張 → 次バージョンにて実装予定
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル
6.数値区切りリテラル
7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
9.C#との相互運用でOverridesキーワードがある場合のOverloadsキーワードの省略を可能に


2.読み取り専用の自動実装プロパティーについて説明します。
この機能はVisual Studio 2015 Preview版を確認できました。
もともとC#では実装されていた機能なのですが、VBには実装されていませんでした。
簡単にプロパティー実装の経緯から説明します。

VB2008までのプロパティ実装の例
Private _name As String Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property

VB2010の自動実装プロパティの例

Public Property Name As String

このようにVB2010では、Propertyキーワードによりシンプルに宣言出来るようになりました。

このときVBコンパイラは、「_Name」というアンダーバー+プロパティ名のPrivate変数に展開します。
このPrivate変数を「バッキングフィールド」と呼びます。
これまでも変数を宣言する際に、ReadOnlyキーワードをつけることによって読み取り専用変数を宣言することが出来たのですが、
プロパティにはついては、悲しいかなReadOnlyキーワードを付けるとコンパイルエラーになっておりました。
ちなみに、C#で読み取り専用プロパティは、public string Name {get; private set; } とします。
 

VB2015ではプロパティをReadOnlyキーワードをつけて読み取り専用にでき、またコンストラクタでその値をセットできるようになっています。
Class Sample
    ReadOnly Property p As Integer = 15
    ReadOnly Property q As Integer

    Sub New(q As Integer)
        _q = q
    End Sub
End Class

Sub Main()
    Dim hoge As New Sample(1)

    Debug.Print(hoge.p.ToString) ’15
    Debug.Print(hoge.q.ToString) ’1
End Sub

posted @ 2014/12/11 1:55 by やじゅ

Microsoft YouthSparkにはICTの理想の1つがある

マイクロソフトの世界的な取り組みの1つにMicrosoft YouthSparkがあります。

http://www.microsoft.com/ja-jp/citizenship/youthspark.aspx


これは、学生割引とか学生無料とかの単純な取り組みではありません。
先日発表された"Hour of Code”もその一環です。

http://blogs.technet.com/b/microsoft_japan_corporate_blog/archive/2014/12/10/hour-of-code.aspx

 

Microsoft YouthSparkにはその他にもいろいろな取組があり、その中でも私が注目したのが「発達障碍支援」です。

http://www.microsoft.com/ja-jp/enable/guides/learning.aspx

この分野、過去の私の発言を覚えている方もいるかもしれませんが同じようなことを考えていて、ICTやデバイスが寄り添うことで親御さんや何よりも子供本人にとってストレスを軽減できるような手助けができると想像しているのです。

 

posted @ 2014/12/10 14:09 by 初音 玲

[Haedware]IoT Kitが海を渡るそうです

マイクロソフト米国本社さんからのメールがやってきました。何事かと思ったら…

---------------------------------------

Congratulations Akira Hatsune!

We are pleased to share that your Windows Developer Program for IoT Kit has been shipped.  Here are the details:

Ship Via: Fedex

---------------------------------------


何事かと思っていたら「Windows Developer Program for IoT」のデバイスのようです。

なんというクリスマスプレゼント!早く届くといいな。

posted @ 2014/12/10 13:14 by 初音 玲

Visual Basic 2015以降の新機能 その1

これは、Visual Basic Advent Calendar 2014の12/8日の記事。

【VB2015(VB14.0)の新機能】参照:VBの新しいステートメントUpcoming Features in Visual Basic
1.Select Caseステートメントの拡張
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル
6.数値区切りリテラル
7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
9.C#との相互運用でOverridesキーワードがある場合のOverloadsキーワードの省略を可能に


1.Select Caseステートメントの拡張について説明します。
この機能を確認しようとVisual Studio 2015 Preview版をインストールしましたが、結果的にはまだ未実装でした。

Roslynのコードリポジトリ上も、masterブランチにはまだとりこまれていない機能なのか、pattern-matchingっていうブランチが
見られます。この機能が最終的に実装されるか分かりません。
こういう機能を追加したいと思っているのは確かなので、とりあえず説明していきます。

以前からVBやC#に関数型言語の特徴までを取り入れようとするのが見受けれられましたが、今回も同様です。
F#などの関数型言語には大体パターンマッチがあります。構文的にはSelect Case文に近いです。
数値や文字列だけであれば、今でもSelect Case文で問題ありません。しかし、型によるパターンマッチは今は出来ません。
下記はF#による型パターンマッチです。図形の形と長さを出力しています。
shapeの型で分岐し、更にwhenにてw=hが同じ値なら正方形、違うなら四角形としています。

type Shape =
    | Rectangle of width:int * height:int
    | Circle of radius:int

let shape = Rectangle(10,10)
match shape with
| Rectangle(w,h) when w=h -> printfn "Square %d" w
| Rectangle(w,h) -> printfn "Rectangle %d, %d" w h
| Circle(r) -> printfn "Circle %d" r

これと同じことをSelect Caseステートメントでも出来るよう拡張するのが、今回の目的です。
Public MustInherit Class Shape
End Class

Public Class Rectangle
    Inherits Shape
    Public Property Width As Integer
    Public Property Height As Integer
End Class

Public Class Circle
    Inherits Shape
    Public Property Radius As Integer
End Class

Sub Main()
    Dim shape As Shape = New Rectangle With {.Width = 10, .Height = 10}
    Select Case shape
        Case r As Rectangle When r.Width = r.Height
            Console.WriteLine("Square of {0}", r.Width)
        Case r As Rectangle
            Console.WriteLine("Rectangle of {0},{1}", r.Width, r.Height)
        Case c As Circle
            Console.WriteLine("Circle of {0}", c.Radius)
    End Select
End Sub
他にも下記のような使い方もできます。
Private Sub Button_Click(sender As Object, e As EventArgs) Handles OKButton.Click, CancelButton.Click

    Select Case sender
        Case Is OKButton
            DialogResult = DialogResult.OK
            Close()
        Case Is CancelButton
            DialogResult = DialogResult.Cancel
            Close()
        Case Is Nothing
            Throw New NullReferenceException("sender")
        Case Else
            Debug.Fail("Unknown sender.")
    End Select      
End Sub

以上です、便利そうなので実装されるといいのですが…。

【追記】 幾つかの機能については次のVB15.0以降になるようです。
やはり、この時点でVisual Studio 2015 Preview版に実装されていないのは持ち越しのようです。
.NET Compiler Platform ("Roslyn") のサイトにて「Added」の項目は実装されています。

posted @ 2014/12/08 1:42 by やじゅ

[VisualStudio]Visual Studio Community 2013の日本語紹介ページの記載が明快になっていました。

過去記事:

Visual Studio Community 2013の日本語紹介ページに重大な記述漏れ

過去記事:

Visual Studio Community 2013の日本語紹介ページにある合致するユーザの解釈について - はつねの日記

公開当時の原文と日本語訳の違いについて記述したエントリでしたが、現在は日本訳も追い付いていますし、図解やQAなどで実は原文よりも分かりやすいです。

この中で明確になって新たに分かったのが、

  • 保有PCが250台以下、または、年間収益が$1,000,000以下の企業でも、それ以上の規模の会社から何らかの報酬を伴う開発業務に使うときには、それ以上の規模の会社と同じ利用制限がかかります。

という点です。確かにそうですよね、無料にしたいから開発部門を小分けに分社化してとかしてもダメですよということですね。

改めて読み返してみると、たくさん心に響くことが書いてあって、マイクロソフトが変わろうという気持ちがとても伝わってきます。

マイクロソフトがVisual Studio Community 2013に込めた思いを考えると、1人でも多くの人がこれを機会にVisual Studioの世界を体験してくれると良いなぁと思います。

posted @ 2014/12/07 14:33 by 初音 玲

[Azure]英語が不得意でもWOVN.ioを使って、たった5クリックでサイトを英語化しよう

日本語サイトを英語化するのは、静的なサイトだとしても難しいものです。

今回、WOVN.ioというサービスを教えて頂いたので試してみたところ思った以上によかったので紹介します。

 

https://wovn.io/

image

 

どのような感じで翻訳されるかは、このページの右下にある[日本語]を[英語]にしてみましょう。

image

 

中国語も対応できているので、台湾の人たちに伝えたいときもいい感じです。

image

 

それでは、AEDオープンデータのページを英語化してみましょう。

 

Click 1:サインアップまたはログイン

まずは、WOVN.ioに会員登録します。この登録自体は無料です。

image

Click2:該当ページを追加する

登録またはログインするとダッシュボードが表示されるので[+New Page]をクリックします。

image

Click3:ページを登録する

「Add a New Page!」ダイアログが表示されたら、URL「http://hatsunejournal.jp/w8/AEDOpendata/」を入力します。

image

URLを入れるとページタイトルやLanguageは自動的にhtmlの内容から取得されます。このあたりはちゃんとHTML定義しているかによります。

なので、URLをいれたら[Begin!]をクリックするだけで済みます。

 

で、余りにもよくできているのでさっととおりすぎてしまいますが、「Target Language」のところがドロップダウンになっています。

image

無料版では「English」から選択肢は帰らえませんが他の言語も実装されています。

Click4:翻訳方法を選ぶ

URLで指定されたページからテキスト部分を抽出して一覧が作成されます。文章のセンテンス数が多いとこの一覧を作るのに多少時間が必要ですので、[Machine Translate]ボタンが有効になるまで待ちます。

image

[Pro Translate]は有償版の機能で人による翻訳になり、[Machine Translate]ボタンは、無償版でも使えるBing Translateを使った機械翻訳になります。

なお翻訳結果は、日本語の右側の欄に表示される翻訳後のテキストを編集できます。このあたりは、Visual StudioのAddInにある多言語アプリツールキットと同じような感覚です。

Click5:Publish & Save

image

最後は[Publish & Save]をクリックします。

これでheadセクションに書くスクリプトが表示されるので、それを該当ページの定義の中にコピー&ペーストすれば完成です。

感想

とても簡単に英語化できます。今回は、いわゆるランディングページに適用してみましたが、とても相性が良いと感じました。

もしかしたら話し言葉中心であったり、一般的なブログだと翻訳後の手助けが必要でしょう。

しかし、このプロダクトのすごいところは翻訳後のテキストを元のサイトに1行だけ定義を加えるだけで簡単に表示できることです。

imageimage

そして、見た目も変わらず(このあたりはHTMLの定義にもよりますが)という素晴らしいものです。

みなさんもぜひ利用してみてください。

posted @ 2014/12/06 16:18 by 初音 玲

[VisualBasic]Microsoft MVPの技術分野が変更になるそうです。

Microsoft MVP for Visual Basicというのが私のMVPの受賞名ですが、技術分野の区分けが変わって、 Microsoft MVP for .NET になるそうです(2015年1月1日から)。 Visual BasicとC#の両方をやっていたり、Xamarinやっていたりしているので、従来の「Visual Basic」に限定されてしまうとちょっと活動範囲としては狭く感じていたのでこの変更は大歓迎です。 言いやすいしw

posted @ 2014/12/05 15:34 by 初音 玲

Excelのミリ秒表示が後0埋めになるについて

これは、Excel Advent Calendar 2014の12/4日の記事。

お仕事にて、Windows Server 2008R2 + Oracle11g の環境にシステム移行をしたのですが、既存アプリケーションは32bitであるため、Oracle client 64bit版と32bit版を共存して使用しております。
ある既存アプリケーションは、遅くても2秒以内で処理を終わらせるようになっているのですが、2秒超えることが何度か発生するようになりました。しかも平均の処理速度が以前より少し遅くなっている。
原因を調べるために、急遽、計測用にログ出力を仕組みました。その際にミリ秒を後でExcelの書式で3桁0埋めすればいいかと安易に0埋めしないままにしました。

出力された計測用のログを調べていくと、Oracleのコネクション接続だけで2秒を超えていたのです。※古いアプリ故にコネクションプーリングは未使用なんです。
2014/12/04 8:45:36.541,Oracle Begin
2014/12/04 8:45:48.601,Oracle End

ちゃんと調査するためにExcelで計測用のログを取り込んで、コネクション接続の差分を取ろうとしたわけです。
Excelでミリ秒を3桁で表示するには、ユーザー書式にて「hh:mm:ss.000」とすればいい。差分は=Oracle End - Oracle Beginで計算させる。
これで全行計算させてみると、#####と表示されて計算出来ないところが出てきました。
何故?  その行の時刻を見てみるとOracle End より Oracle Begin の方が値が大きくなっておりました。
2014/12/04 8:50:01.890,Oracle Begin
2014/12/04 8:50:01.541,Oracle End
元データを見てみると、本来のOracle Beginの時刻は2014/12/04 8:50:01.89とミリ秒は2桁だったのです。
ユーザー書式にて「hh:mm:ss.000」とすると、ミリ秒は前0埋めではなく後0埋めなのです。それっておかしくないですか?
他にもミリ秒が1桁の場合は、4→400となってしまっているのです。

元データのミリ秒を前0埋めにする方法が直ぐに思いつかず、かといって手作業で修正するには時間がかかりすぎる。
その時は、同僚に頑張ってもらってLog Parser側で書式を修正する関数を作成してもらいました。

後日、自分の方でExcel上でもミリ秒を前0埋めするセル関数を作りました。
Excelで時間1:2:3.5を書式hh:mm:ss.000にて、01:02:03.005とするには
=TEXT(LEFT(A2,FIND(".",A1)-1),"hh:mm:ss")&"."&TEXT(MID(A1,FIND(".",A1)+1,3),"000")とする。

また、差分の平均を出そうとしても書式が時刻形式だと計算してくれません。
Excelでミリ秒の差分の合計や平均を出したい場合、ミリ秒のセル値に86400(24*60*60)を掛けた別セル(例 ”=C1*86400")を用意して、その列で計算させます。


ちなみにサクラエディタで正規表現を使ってミリ秒に前0を付ける方法
2014/12/04 8:45:36.541,
2014/12/04 8:45:44.89,

2014/12/04 8:45:36.541
2014/12/04 8:45:44.089,
とミリ秒が2桁のところのみ先頭に0を追加したい場合
検索 \.(\d)(\d),
置換 \.0$1$2,
検索で()を付けるとグループ化される。今回は2つグループ化した。
置換でグループ化された変数の$1と$2を使う。今回の場合、$1に8、$2に9が入る。
[サクラエディタ]正規表現で検索した結果の一部を置換する方法
http://oss-lab.net/?p=906


Oracleのコネクション接続だけで2秒を超えるのが何度か発生していた問題ですが、下記の質問内容にてOracle11g Client 32bit→Oracle10g Client 32bitにしたら速くなったとのことで、試すと本当に速くなりました(正常に戻ったが正解か)。一体なんなんでしょうかね。
oracle11g 11.2.0.3(64bit) +OracleClient 11.2.0.3(32bit)のDB接続が遅い

posted @ 2014/12/04 2:19 by やじゅ

Hey, Scripting Guy!でActive Directory Week!

みなさん、Scripting Guyはご存知ですよね?! ちゃんと日本語にも(たまに)訳されています。

何となく日本語がさびしい感じなのですが、英語版ではやってくれました。
なんと、「Active Directory Week!」

もう、うれしくてクリスマスまで寝られないこと請け合いです!!!

第一日目:Active Directory Week: Get Started with Active Directory PowerShell

いわゆる概要ですね^^

 

第二日目:
PowerTip: Find PowerShell Help Topics for Active Directory

ヘルプの取得方法です^^。困ったことに英語版のお話で、日本語環境だと動かない……
そんな時には牟田口センセのページのお世話になりましょう^^

PowerShell 3.0の日本語ヘルプがない問題に対する回避策

 

Active Directory Week: Explore Group Membership with PowerShell

グループの扱い方です。個人的にはGet?ADGroupMember GroupName ?Recursiveにイイネ100回くらい押したいです。

第三日目:
PowerTip: Use PowerShell to Find if User Is Nested Group Member

入れ子になったグループに対してあるユーザーが所属していて権限を与えるかどうかなんかのテストに?RecursiveMatchをつけましょう!って記事です^^

 

Active Directory Week: Stale Object Cleanup Guidance?Part 1

PowerShellでオブジェクトのお掃除をするときのお作法。
バーチャルアカデミーへのリンクもあります^^

 

第四日目:
PowerTip: Use PowerShell to Get Inactive Active Directory Accounts

Search-ADAccountでイロイロできることの紹介です^^

 

Active Directory Week: Stale Object Cleanup Guidance?Part 2

前回の続きでアカウントの状態を捜査するとき、各プロパティにどうやってアクセスするかの例です。
ユーザーの調査をするときに必要な情報が^^

 

第五日目:
PowerTip: Use PowerShell to Work with Active Directory Date Fields

意外に時刻をいじったりするのが面倒なんですよね。そういうときのTipsです。

 

Active Directory Week: Essential Steps for PowerShell when Upgrading

フォレストレベルやごみ箱とかオブジェクトを削除しないためのチェックとかがPowerShellからいじれます。
これ、スクリプトでできないと手順書作るの大変なんですよねぇ・・・

第六日目:
PowerTip: Use PowerShell to Get List of FSMO Role Holders

これこれ!!!。ntdsutil使わなくてもこれ一発でFSMOの情報パクれます!!!
ただ、ちょっと癖あり><

 

ということで、もうPowerShellはActive Directoryのためにあるといってもいいですよね^^/
ぜひ、さっくりと管理するために使ってやってください。

なんといってもユーザー管理や監査のエビデンス残すのに、PowerShellなくしては亡くなるしかありません><

Let’s enjoy Active Directory and PowerShell!

【ご参考:日本語版】

Hey, Scripting Guy! (初心者向け)
http://technet.microsoft.com/ja-jp/scriptcenter/ee817145.aspx

TechNet マガジン コラム : Hey, Scripting Guy! (上級者向け)
http://technet.microsoft.com/ja-jp/scriptcenter/dd727530.aspx

posted @ 2014/12/02 19:22 by ちゅき

Visual Basic 2015以降の新機能 概要

これは、Visual Basic Advent Calendar 2014の12/1日の記事。

正式には現時点で「Visual Basic 2015」となることが発表されてなく、内部バージョンのVB14.0となっているですが、現在「Visual Studio 2015 Preview」版がダウンロードされている状態であり、2015年に発売されることと推定されるため、あえてこのタイトルとしました。

 

新機能を紹介する前に、今までのVBの進化の歴史を整理してみます。

発売年 Visual Basic Visual Studio .NET Framework 変更点、備考
1998 6.0

歴代VBの名作、未だに使われる
2002 7.0 2002 1.0 初めての.NET
2003 7.1 2003 1.1 安定してきた.NET
2005 8.0 2005 2.0,(3.0) 2005の新機能 - MSDN
2007 9.0 2008 3.5,3.0,2.0 2008の新機能 - MSDN
2010 10.0 2010 4.0 2010の新機能 - MSDN
2012
11.0 2012,2013 4.5 2012の新機能 - MSDN

12.0

内部変更のみと思われる

13.0

内部変更のみと思われる
2015 14.0 2015 4.6 2015の新機能 - CodePlex

 

【VB2005(VB8.0)の新機能】参照:VS 2005で新しくなったVisual BasicとC#の新機能を総括

・部分クラス(パーシャル・クラス)
・ジェネリック
・プロパティの個別アクセシビリティ・レベル定義
・My機能
・Usingステートメント
・フォームの既定インスタンス
・Globalキーワード
・演算子のオーバーロード
・Continueステートメント
・XMLドキュメント・コメント

 

【VB2008(VB9.0)の新機能】参照:Visual Basic 言語の新機能VBの進化

・.NET Framework 2.0/3.0/3.5 に対応
・LINQ(統合言語クエリ)に対応
・Null 許容型に対応(「As Nullable(Of Integer)」を「As Integer?」と書ける)
・型推論(「Dim a = 10」と書くと「Dim a As Integr = 10」の意味になる)
・オブジェクト初期化子(Dim a As New Point() With {.X = 10, .Y = 20})
・匿名型(「Dim a = New With {.Name = "名無しのV", .Job = "社会人"}」)
・拡張メソッドに対応(ExtensionAttribute 属性)
・ラムダ式に対応(「Dim ave = Function(x As Integer, y As Integer) (x + y) / 2」)
・XML リテラル、XML 軸プロパティ(「Dim a = <abc>xyz</abc>」)
・If 演算子の追加(三項演算子)…If ステートメントとIIf関数を合わせたような物
・部分メソッド「Partial Private Sub」のサポート(VB2005 のPartial Classと併用する)

【VB2010(VB10.0)の新機能】参照:Visual Basic 2010の新機能VBの進化
・行継続文字「 _」を省略可能になった(分割位置によっては省略できない場合もある)
・コレクション初期化子に対応(「Dim a As New List(Of String)() From {"VB", "C#", "F#"}」)
・自動実装プロパティ(End Property無しの「Public Property Name As String」)
・複数行ラムダ式およびSub のラムダ式に対応
・並列処理の追加
 ・Parallel.Forメソッド、Parallel.ForEachメソッド
 ・Taskクラス
 ・Parallel LINQ (AsParallelメソッド)
・VBランタイムの無効化オプション(/vbruntime オプション)
・動的オブジェクトのサポート(System.Dynamic 名前空間)
・ジェネリックの共変性と反変性

【VB2012(VB11.0)の新機能】参照:C#/VB言語の新機能
・Async / Await キーワードによる非同期コードサポート
・Iterator/Yield キーワードによる反復子
・呼び出し階層
・メソッド情報
・Global Namespaceのサポート

VB2013は、新機能の追加は一切ありません。

【備考】
Visual Studio 2010以降からVisual Basic 6.0のアプリケーションをアップグレードする機能は組み込まれないようになりました。

VB6からVS2013にアップグレードする方法
手順は「VB6→VS2008→VS2013」となります。
VS2008 Expressは次のサイト等で入手できます。
NonSoft - Visual Studio 2008 Expressのダウンロードとインストール
Visual Basic 6.0 ユーザーのための Visual Basic .NET 移行ガイド
Microsoft.VisualBasic.Compatibility.VB6 名前空間 は、.NET Framework Version 4以降Obsoleteとされるクラスである。


■新機能の概要
Visual Studio 2015から、次世代コンパイラー「Roslyn」(ロズリン)が搭載されます。
Roslynは、Compiler as a Serviceと呼ばれていた言語機能の解析エンジンです。
Roslyn以前は、VBコンパイラーと統合開発環境のVisual Studio上のVBパーサーが一致するように2重のコストをかけて作成してました。2つの異なるコンパイラーを保守するのは容易ではありません。その上、言語も複数あるわけです。
プログラミング言語への新機能の追加には2重の労力がかかります。新機能の追加にも慎重にならざるを得ません。
Roslynによってコンパイラーを1つだけにできるのです。参照:C#たんっ! コンパイラーは2つある

また、これまでC#/Visual Basic間のソースコードを自動変換する場合は文字列置換方式で正常に動作しないこともあったのですが、RoslynによってC#をコンパイル後にVisual Basicに変換されるために、正確にしかも必ず動作するように変換されるわけです。
このように言語間による機能の差をほぼ無くすように努力しているため、今まで新機能でもIDEでもC#に何かと遅れをとってモチベーションが下がっていたVisual Basicユーザーも活気つくかもしれませんね。


【VB2015(VB14.0)の新機能】参照:VBの新しいステートメントUpcoming Features in Visual Basic
1.Select Caseステートメントの拡張
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル
6.数値区切りリテラル
7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
  1.XMLドキュメントコメントの修正
  2.TypeOfステートメントでIsNot演算子の利用
  3.パーシャルモジュールとパーシャルインターフェイスのサポート
  4.#Reagion ? #End Regionがメソッド内部で定義可能
  5.インターフェイスのReadOnly / WriteOnlyプロパティーを自動実装プロパティーで実装可能
9.C#との相互運用でOverridesキーワードがある場合のOverloadsキーワードの省略を可能に
  1.Boxing conversions in attribute arguments(???)
  2.C# Previewの変更で検討中の機能
  3.プライマリーコンストラクターによるインスタンスの初期化
  4.Dictonaryの初期化方法の追加(! operatorの追加)
  5.暗黙的に定義される参照引数(Output キーワードの追加)
  6.Catchブロック内でのAwaitキーワードのサポート

これから、少しずつ新機能について説明していきます。

posted @ 2014/12/01 0:13 by やじゅ

[Codezine]話題のForguncyについての記事を執筆しました。

http://codezine.jp/article/detail/8306

---引用開始

本には帳票文化という単なるレポート印字ではない、手書きでも印字でも通用するように縦横の罫線をきちっと定義した独特の文化があります。この帳票文化をWeb画面で再現するのはほぼ不可能と思われていました。今回紹介する「Forguncy(フォーガンシー)」は、Web画面定義をExcel方眼紙ライクの操作性で行えるようにし、さらに再現度高くWebアプリとして実行する仕組みを整えることで、この帳票文化のWeb化という難題に真正面から取り組んだ製品です。

---引用終了

ぜひ、ご一読ください。

posted @ 2014/11/29 21:42 by 初音 玲

並列(Parallel)と並行(Concurrent)

並列:Parallel。

並行:Concurrent あるいは Conccurency。 同時実行ともいわれる。同時並行と書かれている場合も多い。

 

現代的マルチスレッドプログラミングにおいて

並列(Parallel)とは「ある瞬間同時に処理されることを許容すること」

同時実行(Concurrency)とは「ある瞬間同時に処理し続けるために行うこと」

 

言葉があやふやになるのは、並列と並行が混同されて使われていることが多いということ。日本語の持つあいまいさと英語からの翻訳のむずかしさと、Parallelという言葉はSF世界の言葉としてずっと前から日本になじんでしまっていたことが複雑に絡み合って、難しくしてるんだと思います。

 

並行世界とパラレルワールドどちらも聞いたことがあるでしょ?w

posted @ 2014/11/26 15:56 by とっちゃん

[WiX]3.10 はじめました。

ネタ元:WiX v3.10 begins and is already mostly done

3.x を VS2015で使えるようにするために発足したようです。とりあえず、VS2015プレビュー対応版の 3.10.1124.0 がダウンロードできるからよろしくねーとのこと。

すでに予定作業は終わっていて、あとはVS2015のリリースを待つばかりだそうです。

あ、そうそう。必要があるならWindows10対応も行うそうです。

 

ちょっと気の早い感じもしますが、最近のラピッドリリースは速度が読めないから先手を打っていかないとこの手のツールはきついんだろうなぁ。。。

posted @ 2014/11/26 11:01 by とっちゃん

非同期処理なお話をちょびっとしてきました。

わんくまのメンバーでもある、小山さん(http://blogs.wankuma.com/mitchin/default.aspx)がスタッフとして、活躍してる .NETラボ の勉強会にお邪魔してしゃべってきました。

ということで、その時のセッション資料です。まぁあまり役に立つようなものじゃないですけどw

http://1drv.ms/1xPLbBF

posted @ 2014/11/25 11:51 by とっちゃん

[Kinect]愛和小学校の「i和design」に参加してきました。

WP_20141122_005

KinebrickEV3の最新バージョン(明日からストアでダウンロード可能になる予定です)をもって愛和小学校の「i和design」に参加してきました。

今回はSurface Pro 3をお借りして、Kinect fow Windows v2との間はUSB3.0接続、LEGO MINDSTORM EV3との間はWiFi接続という接続形態にしました。

https://drive.google.com/file/d/0ByMGrBrxpX_BQ0s2a2JUZm1wRlU/view

 

10時から設営を開始して、11時半に1年生と2年生がクラスごとにまとまって会場に到着。

自分の姿が映ってそこに情報が加味された映像がみられるというのは子供たちのハートをがっちりキャッチ。

 

他校の先生とお話しての気づきとして、KinebrickEV3のように自分の体の動きに同調してEV3が動くことで、子供たちは自分たちの体の動きを客観視できるのではないか、たとえば、KinebrickEV3は腕の前後位置をかなり厳密に取得しているので前進も後進もしないポイントがすごく狭いのですがその位置を体感することで自分がその位置をキープするときに筋肉の使い方を理解で、そうすると色々客観視ができるようになって上手く運動できるようになるという流れがつくれるかもというものがありました。

これは作った本人も気づかなかった新たな可能性かもしれませんね。

posted @ 2014/11/22 21:39 by 初音 玲

[VC++] VS2015 Preview のC++機能一覧

ネタ元:C++11/14/17 Features In VS 2015 Preview

C++11/14/17 のいろんな機能の対応表です。

それ以上でもそれ以下でもないw

posted @ 2014/11/19 11:02 by とっちゃん

[Azure]Mobile Serviceで自動的に列を追加させない設定

Microsoft Azure Mobile Servicesはコードファーストなのでデータ更新時にDB上にない列を指定すると自動的に列を追加してくれます。

これはこれで便利なのですが、コード側が間違えていて意図しない列が追加されてしまうという事も考えられるので、保存項目の変更がないときは自動的に列を追加しないように設定しておくのがよいでしょう。

 

設定は、Azureの管理ポータルに入って、設定したいMobile Serviceを選択してから構成メニューに移動すると「動的スキーマー」という項目があるので、これを「オフ」にすれば列が追加されません。

image

動的スキーマーのヒントにも「アプリケーションが稼働状態になったらオフにすることを検討してください。」とありますね。

 

これをオフにできることを知っているとインフラ屋さん的にもMobile Serviceを使う事にOKだしやすいですね。

posted @ 2014/11/17 3:33 by 初音 玲

[RealSense]Congratulations! You are a Phase 1 Finalist!

IntelR RealSense? App Challenge 2014に参加しているのですが、無事、アイデア予選であるPhase 1を通過しました。

今後の予定としては

Portal Opens for Demo Submissions December 5, 2014     12:00 a.m. GMT
Early Demo Submission Deadline December 17, 2014   11:59 p.m. GMT
Final Demo Submission Deadline February 13, 2015     11:59 p.m. GMT

という感じのようです。

複数のアイデアだしていたのでどれが通ったのかと思ったら、将来的にコンテスト用のUser Profileに反映されるという事なので現時点ではまだ分からないみたい(笑)。

 

来週にはIntel RealSenseのDevKitが送られてくるようです。楽しみですね。

posted @ 2014/11/16 7:19 by 初音 玲

恒例のTDD道場

今日は状態を持つクラスをTDDするには?

参考資料:Codezineのbiacさんの記事#10

posted @ 2014/11/15 13:32 by まーる

お昼はLT

今日はbiacさんのみ

そろそろ次回くらいやるかな。

posted @ 2014/11/15 13:07 by まーる

トップはbiacさん

写真は後で貼る予定。

今日はMVP受賞記念でものづくりの半世紀だそうです。

posted @ 2014/11/15 11:16 by まーる

またまた更新してなくてスンマソン。今日はわんくま名古屋N33

いつものごとく更新できてなくてすんまそん

昨日T420sのファン交換したとかそういうの写真とってUpすりゃいいんだよなぁ。とか思いながら・・・。
#いつもおもむろに作業始めるから記録とるのを忘れてしまうのよ!!

今日はわんくま名古屋N33!

浄心まで車で来てみた。

posted @ 2014/11/15 11:13 by まーる

[VisualStudio]Visual Studio Community 2013の日本語紹介ページにある合致するユーザの解釈について

 --(2014/12/09 0:31追記)--

公開当時の原文と日本語訳の違いについて記述したエントリでしたが、現在は日本/訳も追い付いていますし、図解やQAなどで実は原文よりも分かりやすいです。

マイクロソフトがVisual Studio Community 2013に込めた思いを考えると、1人でも多くの人がこれを機会にVisual Studioの世界を体験してくれると良いなぁと思います。

--

日本語:
http://www.microsoft.com/ja-jp/dev/products/community.aspx
英語:

http://www.visualstudio.com/products/visual-studio-community-vs

 

この日本語ページのVisual Studio Community製品比較で、Visual Studio Communityが合致するユーザとして以下の4つが挙げられています。

  • 大学関係者
  • 非営利団体従事者
  • オープン ソース開発者
  • 開発者 5 名以下の中小企業

英語の原文の方を見てみるとこの記述は「Q: How does Visual Studio Community 2013 compare to other Visual Studio editions?」の回答から持ってきているようです。

これだけみると開発者6名上の企業にはなんとメリットもないように思えます。

しかし「開発者5名以下の中小企業」というのは原文では「利用者が5名以下の企業」となっており厳密には中小企業という限定ではありません。

さらに、先ほどのQの直前にある次の文章については日本語訳ではとりあげらえていませんが、重大なことが記載されています。

---

Here’s how individual developers can use Visual Studio Community:

  • Any individual developer can use Visual Studio Community to create their own free or paid apps.

Here’s how Visual Studio Community can be used in organizations:

  • An unlimited number of users within an organization can use Visual Studio Community for the following scenarios: in a classroom learning environment, for academic research, or for contributing to open source projects.
  • For all other usage scenarios: In non-enterprise organizations, up to 5 users can use Visual Studio Community. In enterprise organizations (meaning those with >250 PCs or > $1MM in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above.

    ---

    たしかに1つ目はindividual developerつまり個人開発者などが無償アプリも有償アプリも作れるという内容ですが、2つ目は「An unlimited number of users within an organization 」となっており人数に関係なく次の用途では使用できるとあります。

    1. classroom learning environment
    2. for academic research
    3. or for contributing to open source projects

    つまり

    1. 企業内での教室を使った教育
    2. 学術研究
    3. OSS開発

    にはつかえるということです。

    3番目によればエンタープライズ企業(保有PCが250台より多い、または、年間収益が1MM(=$1,000,000)より多い)は上記3つに限定するとあります。これだけ読むと一見同じことをもう一度言っているようですが、「開発者5名以下の中小企業」という日本語訳が「利用者が5名以下の非エンタプライズ企業」と理解すると、ここでエンタープライズ企業とはの定義がかかれていることがわかります。

     

    このように日本語訳はマイクロソフト本社の思いを伝え損ねていますので、早急な改善が必要です。

    --(追記)--

    要約すると次の通り。

    • 企業以外の個人開発者であれば、用途を限らず(有償アプリも可)利用できます。
    • 保有PCが250台以下、または、年間収益が$1,000,000以下の企業であれば、用途を限らず5名まで利用できます。
    • それ以上の規模の企業においては、(使用人数が5名以下でも)教室での教育、学術研究、OSS開発の用途以外にはお使いいただけません。

    posted @ 2014/11/13 8:48 by 初音 玲

    [.NET].NETオープンソースプロジェクトが開始されました。(追記しました)

    .NET Opensource Project

    .NET Frameworkの次のコンポーネントについてgithubとCodePlexでソースコードが公開されました。

    .NET Core 5

    System.Collections.Immutable

    System.Numerics.Vectors

    System.Reflection.Metadata

    System.Xml.Common/System

    System.Xml.XDocument

    System.Xml.XPath.XDocument

    System.Xml.XPath.XmlDocument

    System.Xml.XPath

    System.Xml.XmlDocument

    その他の部分についても「More is coming soon. Stay tuned!」ということなので、まずは第一弾といったところですね。

    .NET Reference Source

    .NET Coreで公開されているところすくないなーと思っていたらそれ以外にも.NET Referemce Sourceとして公開されているライブラリがありました。.NET Core + .NET Frameworkがオープンソースになったと言われている足し算の後半部分ですね。

    System.Core

    System.Xml.Linq/System/Xml/Linq

    System.Xml

    System

    mscorlib

    この中でもmscorlibにはかなり色々なライブラリが含まれています。

    dirした結果を貼っておきますが、すごいですね。

    mscorlib\system\security\securitystate.cs
    mscorlib\system\security\securityzone.cs
    mscorlib\system\security\util
    mscorlib\system\security\verificationexception.cs
    mscorlib\system\security\xmlsyntaxexception.cs
    mscorlib\system\security\accesscontrol\ace.cs
    mscorlib\system\security\accesscontrol\acl.cs
    mscorlib\system\security\accesscontrol\commonobjectsecurity.cs
    mscorlib\system\security\accesscontrol\cryptokeysecurity.cs
    mscorlib\system\security\accesscontrol\directoryobjectsecurity.cs
    mscorlib\system\security\accesscontrol\enums.cs
    mscorlib\system\security\accesscontrol\eventwaithandlesecurity.cs
    mscorlib\system\security\accesscontrol\filesecurity.cs
    mscorlib\system\security\accesscontrol\mutexsecurity.cs
    mscorlib\system\security\accesscontrol\nativeobjectsecurity.cs
    mscorlib\system\security\accesscontrol\objectsecurity.cs
    mscorlib\system\security\accesscontrol\objectsecurityt.cs
    mscorlib\system\security\accesscontrol\privilege.cs
    mscorlib\system\security\accesscontrol\privilegenotheldexception.cs
    mscorlib\system\security\accesscontrol\registrysecurity.cs
    mscorlib\system\security\accesscontrol\rules.cs
    mscorlib\system\security\accesscontrol\securitydescriptor.cs
    mscorlib\system\security\accesscontrol\win32.cs
    mscorlib\system\security\claims\Claim.cs
    mscorlib\system\security\claims\ClaimsIdentity.cs
    mscorlib\system\security\claims\ClaimsPrincipal.cs
    mscorlib\system\security\claims\ClaimTypes.cs
    mscorlib\system\security\claims\ClaimValueTypes.cs
    mscorlib\system\security\claims\RoleClaimProvider.cs
    mscorlib\system\security\cryptography\aes.cs
    mscorlib\system\security\cryptography\asymmetricalgorithm.cs
    mscorlib\system\security\cryptography\asymmetrickeyexchangedeformatter.c
    s
    mscorlib\system\security\cryptography\asymmetrickeyexchangeformatter.cs
    mscorlib\system\security\cryptography\asymmetricsignaturedeformatter.cs
    mscorlib\system\security\cryptography\asymmetricsignatureformatter.cs
    mscorlib\system\security\cryptography\base64transforms.cs
    mscorlib\system\security\cryptography\crypto.cs
    mscorlib\system\security\cryptography\cryptoapitransform.cs
    mscorlib\system\security\cryptography\cryptoconfig.cs
    mscorlib\system\security\cryptography\cryptostream.cs
    mscorlib\system\security\cryptography\derivebytes.cs
    mscorlib\system\security\cryptography\des.cs
    mscorlib\system\security\cryptography\descryptoserviceprovider.cs
    mscorlib\system\security\cryptography\dsa.cs
    mscorlib\system\security\cryptography\dsacryptoserviceprovider.cs
    mscorlib\system\security\cryptography\dsasignaturedeformatter.cs
    mscorlib\system\security\cryptography\dsasignatureformatter.cs
    mscorlib\system\security\cryptography\hashalgorithm.cs
    mscorlib\system\security\cryptography\hmac.cs
    mscorlib\system\security\cryptography\hmacmd5.cs
    mscorlib\system\security\cryptography\hmacripemd160.cs
    mscorlib\system\security\cryptography\hmacsha1.cs
    mscorlib\system\security\cryptography\hmacsha256.cs
    mscorlib\system\security\cryptography\hmacsha384.cs
    mscorlib\system\security\cryptography\hmacsha512.cs
    mscorlib\system\security\cryptography\icryptotransform.cs
    mscorlib\system\security\cryptography\icspasymmetricalgorithm.cs
    mscorlib\system\security\cryptography\keyedhashalgorithm.cs
    mscorlib\system\security\cryptography\mactripledes.cs
    mscorlib\system\security\cryptography\maskgenerationmethod.cs
    mscorlib\system\security\cryptography\md5.cs
    mscorlib\system\security\cryptography\md5cryptoserviceprovider.cs
    mscorlib\system\security\cryptography\passwordderivebytes.cs
    mscorlib\system\security\cryptography\pkcs1maskgenerationmethod.cs
    mscorlib\system\security\cryptography\randomnumbergenerator.cs
    mscorlib\system\security\cryptography\rc2.cs
    mscorlib\system\security\cryptography\rc2cryptoserviceprovider.cs
    mscorlib\system\security\cryptography\rfc2898derivebytes.cs
    mscorlib\system\security\cryptography\rijndael.cs
    mscorlib\system\security\cryptography\rijndaelmanaged.cs
    mscorlib\system\security\cryptography\rijndaelmanagedtransform.cs
    mscorlib\system\security\cryptography\ripemd160.cs
    mscorlib\system\security\cryptography\ripemd160managed.cs
    mscorlib\system\security\cryptography\rngcryptoserviceprovider.cs
    mscorlib\system\security\cryptography\rsa.cs
    mscorlib\system\security\cryptography\rsacryptoserviceprovider.cs
    mscorlib\system\security\cryptography\rsaoaepkeyexchangedeformatter.cs
    mscorlib\system\security\cryptography\rsaoaepkeyexchangeformatter.cs
    mscorlib\system\security\cryptography\rsapkcs1keyexchangedeformatter.cs
    mscorlib\system\security\cryptography\rsapkcs1keyexchangeformatter.cs
    mscorlib\system\security\cryptography\rsapkcs1signaturedeformatter.cs
    mscorlib\system\security\cryptography\rsapkcs1signatureformatter.cs
    mscorlib\system\security\cryptography\safecryptohandles.cs
    mscorlib\system\security\cryptography\sha1.cs
    mscorlib\system\security\cryptography\sha1cryptoserviceprovider.cs
    mscorlib\system\security\cryptography\sha1managed.cs
    mscorlib\system\security\cryptography\sha256.cs
    mscorlib\system\security\cryptography\sha256managed.cs
    mscorlib\system\security\cryptography\sha384.cs
    mscorlib\system\security\cryptography\sha384managed.cs
    mscorlib\system\security\cryptography\sha512.cs
    mscorlib\system\security\cryptography\sha512managed.cs
    mscorlib\system\security\cryptography\signaturedescription.cs
    mscorlib\system\security\cryptography\symmetricalgorithm.cs
    mscorlib\system\security\cryptography\tripledes.cs
    mscorlib\system\security\cryptography\tripledescryptoserviceprovider.cs
    mscorlib\system\security\cryptography\utils.cs
    mscorlib\system\security\cryptography\x509certificates
    mscorlib\system\security\cryptography\x509certificates\safex509handles.c
    s
    mscorlib\system\security\cryptography\x509certificates\x509certificate.c
    s
    mscorlib\system\security\cryptography\x509certificates\x509utils.cs
    mscorlib\system\security\permissions\environmentpermission.cs
    mscorlib\system\security\permissions\filedialogpermission.cs
    mscorlib\system\security\permissions\fileiopermission.cs
    mscorlib\system\security\permissions\gacidentitypermission.cs
    mscorlib\system\security\permissions\hostprotectionpermission.cs
    mscorlib\system\security\permissions\ibuiltinpermission.cs
    mscorlib\system\security\permissions\isolatedstoragefilepermission.cs
    mscorlib\system\security\permissions\isolatedstoragepermission.cs
    mscorlib\system\security\permissions\iunrestrictedpermission.cs
    mscorlib\system\security\permissions\keycontainerpermission.cs
    mscorlib\system\security\permissions\permissionattributes.cs
    mscorlib\system\security\permissions\permissionstate.cs
    mscorlib\system\security\permissions\principalpermission.cs
    mscorlib\system\security\permissions\publisheridentitypermission.cs
    mscorlib\system\security\permissions\reflectionpermission.cs
    mscorlib\system\security\permissions\registrypermission.cs
    mscorlib\system\security\permissions\securitypermission.cs
    mscorlib\system\security\permissions\siteidentitypermission.cs
    mscorlib\system\security\permissions\strongnameidentitypermission.cs
    mscorlib\system\security\permissions\strongnamepublickeyblob.cs
    mscorlib\system\security\permissions\uipermission.cs
    mscorlib\system\security\permissions\urlidentitypermission.cs
    mscorlib\system\security\permissions\zoneidentitypermission.cs
    mscorlib\system\security\policy\allmembershipcondition.cs
    mscorlib\system\security\policy\appdomainevidencefactory.cs
    mscorlib\system\security\policy\applicationdirectory.cs
    mscorlib\system\security\policy\applicationdirectorymembershipcondition.
    cs
    mscorlib\system\security\policy\applicationsecurityinfo.cs
    mscorlib\system\security\policy\applicationsecuritymanager.cs
    mscorlib\system\security\policy\applicationtrust.cs
    mscorlib\system\security\policy\assemblyevidencefactory.cs
    mscorlib\system\security\policy\codegroup.cs
    mscorlib\system\security\policy\evidence.cs
    mscorlib\system\security\policy\evidencebase.cs
    mscorlib\system\security\policy\evidencetypedescriptor.cs
    mscorlib\system\security\policy\filecodegroup.cs
    mscorlib\system\security\policy\firstmatchcodegroup.cs
    mscorlib\system\security\policy\gac.cs
    mscorlib\system\security\policy\gacmembershipcondition.cs
    mscorlib\system\security\policy\hash.cs
    mscorlib\system\security\policy\hashmembershipcondition.cs
    mscorlib\system\security\policy\iapplicationtrustmanager.cs
    mscorlib\system\security\policy\iconstantmembershipcondition.cs
    mscorlib\system\security\policy\idelayevaluatedevidence.cs
    mscorlib\system\security\policy\iidentitypermissionfactory.cs
    mscorlib\system\security\policy\imembershipcondition.cs
    mscorlib\system\security\policy\iruntimeevidencefactory.cs
    mscorlib\system\security\policy\netcodegroup.cs
    mscorlib\system\security\policy\pefileevidencefactory.cs
    mscorlib\system\security\policy\permissionrequestevidence.cs
    mscorlib\system\security\policy\policyexception.cs
    mscorlib\system\security\policy\policylevel.cs
    mscorlib\system\security\policy\policystatement.cs
    mscorlib\system\security\policy\publisher.cs
    mscorlib\system\security\policy\publishermembershipcondition.cs
    mscorlib\system\security\policy\site.cs
    mscorlib\system\security\policy\sitemembershipcondition.cs
    mscorlib\system\security\policy\strongname.cs
    mscorlib\system\security\policy\strongnamemembershipcondition.cs
    mscorlib\system\security\policy\unioncodegroup.cs
    mscorlib\system\security\policy\url.cs
    mscorlib\system\security\policy\urlmembershipcondition.cs
    mscorlib\system\security\policy\zone.cs
    mscorlib\system\security\policy\zonemembershipcondition.cs
    mscorlib\system\security\principal\genericidentity.cs
    mscorlib\system\security\principal\genericprincipal.cs
    mscorlib\system\security\principal\identitynotmappedexception.cs
    mscorlib\system\security\principal\identityreference.cs
    mscorlib\system\security\principal\iidentity.cs
    mscorlib\system\security\principal\iprincipal.cs
    mscorlib\system\security\principal\ircollection.cs
    mscorlib\system\security\principal\ntaccount.cs
    mscorlib\system\security\principal\principalpolicy.cs
    mscorlib\system\security\principal\sid.cs
    mscorlib\system\security\principal\tokenaccesslevels.cs
    mscorlib\system\security\principal\tokenimpersonationlevel.cs
    mscorlib\system\security\principal\win32.cs
    mscorlib\system\security\principal\windowsidentity.cs
    mscorlib\system\security\principal\windowsimpersonationcontext.cs
    mscorlib\system\security\principal\windowsprincipal.cs
    mscorlib\system\security\util\config.cs
    mscorlib\system\security\util\hex.cs
    mscorlib\system\security\util\parser.cs
    mscorlib\system\security\util\sitestring.cs
    mscorlib\system\security\util\stringexpressionset.cs
    mscorlib\system\security\util\tokenbasedset.cs
    mscorlib\system\security\util\tokenbasedsetenumerator.cs
    mscorlib\system\security\util\tokenizer.cs
    mscorlib\system\security\util\urlstring.cs
    mscorlib\system\security\util\xmlutil.cs
    mscorlib\system\text\asciiencoding.cs
    mscorlib\system\text\basecodepageencoding.cs
    mscorlib\system\text\codepageencoding.cs
    mscorlib\system\text\dbcscodepageencoding.cs
    mscorlib\system\text\decoder.cs
    mscorlib\system\text\decoderbestfitfallback.cs
    mscorlib\system\text\decoderexceptionfallback.cs
    mscorlib\system\text\decoderfallback.cs
    mscorlib\system\text\decodernls.cs
    mscorlib\system\text\decoderreplacementfallback.cs
    mscorlib\system\text\encoder.cs
    mscorlib\system\text\encoderbestfitfallback.cs
    mscorlib\system\text\encoderexceptionfallback.cs
    mscorlib\system\text\encoderfallback.cs
    mscorlib\system\text\encodernls.cs
    mscorlib\system\text\encoderreplacementfallback.cs
    mscorlib\system\text\encoding.cs
    mscorlib\system\text\encodinginfo.cs
    mscorlib\system\text\encodingnls.cs
    mscorlib\system\text\eucjpencoding.cs
    mscorlib\system\text\gb18030encoding.cs
    mscorlib\system\text\isciiencoding.cs
    mscorlib\system\text\iso2022encoding.cs
    mscorlib\system\text\latin1encoding.cs
    mscorlib\system\text\mlangcodepageencoding.cs
    mscorlib\system\text\normalization.cs
    mscorlib\system\text\sbcscodepageencoding.cs
    mscorlib\system\text\stringbuilder.cs
    mscorlib\system\text\stringbuildercache.cs
    mscorlib\system\text\surrogateencoder.cs
    mscorlib\system\text\unicodeencoding.cs
    mscorlib\system\text\utf32encoding.cs
    mscorlib\system\text\utf7encoding.cs
    mscorlib\system\text\utf8encoding.cs
    mscorlib\system\threading\abandonedmutexexception.cs
    mscorlib\system\threading\apartmentstate.cs
    mscorlib\system\threading\autoresetevent.cs
    mscorlib\system\threading\CancellationToken.cs
    mscorlib\system\threading\CancellationTokenRegistration.cs
    mscorlib\system\threading\CancellationTokenSource.cs
    mscorlib\system\threading\CDSsyncETWBCLProvider.cs
    mscorlib\system\threading\compressedstack.cs
    mscorlib\system\threading\CountdownEvent.cs
    mscorlib\system\threading\eventresetmode.cs
    mscorlib\system\threading\eventwaithandle.cs
    mscorlib\system\threading\executioncontext.cs
    mscorlib\system\threading\hostexecutioncontextmanager.cs
    mscorlib\system\threading\interlocked.cs
    mscorlib\system\threading\iobjecthandle.cs
    mscorlib\system\threading\LazyInitializer.cs
    mscorlib\system\threading\lockcookie.cs
    mscorlib\system\threading\lockrecursionexception.cs
    mscorlib\system\threading\manualresetevent.cs
    mscorlib\system\threading\ManualResetEventSlim.cs
    mscorlib\system\threading\monitor.cs
    mscorlib\system\threading\mutex.cs
    mscorlib\system\threading\overlapped.cs
    mscorlib\system\threading\parameterizedthreadstart.cs
    mscorlib\system\threading\readerwriterlock.cs
    mscorlib\system\threading\semaphorefullexception.cs
    mscorlib\system\threading\SemaphoreSlim.cs
    mscorlib\system\threading\sendorpostcallback.cs
    mscorlib\system\threading\SpinLock.cs
    mscorlib\system\threading\SpinWait.cs
    mscorlib\system\threading\synchronizationcontext.cs
    mscorlib\system\threading\synchronizationlockexception.cs
    mscorlib\system\threading\Tasks
    mscorlib\system\threading\thread.cs
    mscorlib\system\threading\threadabortexception.cs
    mscorlib\system\threading\threadinterruptedexception.cs
    mscorlib\system\threading\ThreadLocal.cs
    mscorlib\system\threading\threadpool.cs
    mscorlib\system\threading\threadpriority.cs
    mscorlib\system\threading\threadstart.cs
    mscorlib\system\threading\threadstartexception.cs
    mscorlib\system\threading\threadstate.cs
    mscorlib\system\threading\threadstateexception.cs
    mscorlib\system\threading\timeout.cs
    mscorlib\system\threading\timer.cs
    mscorlib\system\threading\volatile.cs
    mscorlib\system\threading\waithandle.cs
    mscorlib\system\threading\waithandlecannotbeopenedexception.cs
    mscorlib\system\threading\Tasks\AsyncCausalityTracer.cs
    mscorlib\system\threading\Tasks\BeginEndAwaitableAdapter.cs
    mscorlib\system\threading\Tasks\ConcurrentExclusiveSchedulerPair.cs
    mscorlib\system\threading\Tasks\Future.cs
    mscorlib\system\threading\Tasks\FutureFactory.cs
    mscorlib\system\threading\Tasks\IAsyncCausalityTracerStatics.cs
    mscorlib\system\threading\Tasks\Parallel.cs
    mscorlib\system\threading\Tasks\ParallelLoopState.cs
    mscorlib\system\threading\Tasks\ParallelRangeManager.cs
    mscorlib\system\threading\Tasks\ProducerConsumerQueues.cs
    mscorlib\system\threading\Tasks\Task.cs
    mscorlib\system\threading\Tasks\TaskCanceledException.cs
    mscorlib\system\threading\Tasks\TaskCompletionSource.cs
    mscorlib\system\threading\Tasks\TaskContinuation.cs
    mscorlib\system\threading\Tasks\TaskExceptionHolder.cs
    mscorlib\system\threading\Tasks\TaskFactory.cs
    mscorlib\system\threading\Tasks\TaskScheduler.cs
    mscorlib\system\threading\Tasks\TaskSchedulerException.cs
    mscorlib\system\threading\Tasks\TaskToApm.cs
    mscorlib\system\threading\Tasks\ThreadPoolTaskScheduler.cs
    mscorlib\system\threading\Tasks\TPLETWProvider.cs

    posted @ 2014/11/13 2:52 by 初音 玲