2015年10月13日火曜日

Azure Tableへのアクセス時にエラー:基礎になる接続が閉じられました: 送信時に、予期しないエラーが発生しました。

順調に稼働していたMicrosoft Azureのテーブルストレージへのアクセスですが,ある日突然エラーが発生するようになりました。

”基礎になる接続が閉じられました: 送信時に、予期しないエラーが発生しました。”
いろいろ調べてみた結果,同じアプリケーションの別の機能のところでSSLによるPOSTを行う際,余計なコードを入れてしまっていたことが原因と分かりました。

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3

AzureがSSL3.0サポートをやめたんですね。しっかり警告が出されていました。結構前に作成したコードですが,わざわざSSL3.0を指定したために発生したエラーでした。
ちなみにこのコードが動く部分でも送信先のサーバーがSSLを更新した際に以下のエラーが発生するようになりましたが,コードを削除すると正しく動作するようになりました。

”要求は中止されました: SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした”
エラー発生部分ではテーブルストレージをまだ補助的なログ保存くらいにしか使っていなかったのでなんとかなっていましたが,やはりというか問題は自分のコードにありました。これでこれからも安心してAzureを使えます。

2015年6月27日土曜日

kintoneで半角英数文字検索が文字単位で検索可能になるらしい


cybozu.comの2015年7月アップデートではいろいろ変更があるようですが,個人的に嬉しい仕様変更がありました。

kintone 主要なアップデート(2015年7月)

今までkintoneアプリのデータを検索する際,英数字ではスペースで区切られた単語単位でしか検索できませんでしたが,今回のアップデートでは以下のように記載がありました。
半角英数文字を検索するときに、単語単位ではなく2文字単位で検索できるようになります。
ということは,シリアル番号とかコードみたいな単語とはいえない文字列も2文字以上合致すれば検索に引っかかるということでしょうか。実際に使ってみないとよく分かりませんが,そうであればとても助かります。よく見たら「9月頃」って書いてあるので,使えるのは少し先になるようですが楽しみにしたいと思います。


追記:残念ながら,いつ更新されるか分からないかんじになってしまっているようです。それはともかく,半角英数字関連の部分に取り消し線が入っているのが気になります。いや,時期が延びるだけですね,きっと。


2015年6月26日金曜日

Fitbit Charge HR アップデート 84でQuick Viewが使えるようになった

朝,Fitbitアプリを見ると,Fitbit Charge HRのアップデートができると表示されていました。さっそくアップデートしてみると,Quick Viewという機能が使えるようになっていました。

バージョンが84に

Quick Viewの項目が追加されています



これで腕時計を見る用にしてFitbitを傾けるとボタン操作をしなくても時計が表示されるようになりました。こういうのもファームウェアアップデートで実現できるんですね。あと,ボタンか2回のタップで画面を表示した後,1回のタップで画面を進めることができる機能が追加になっているようです。
詳しい情報は,こちらにいろいろ載っていました。


2015年5月21日木曜日

ActiveReports.NET9.0Jを使ってAzure Web AppsでPDFを生成する

Azure Webサイト(いまはWeb Appsでした)で運用しているASP.NET WebAPIでPDFを生成できるか試してみました。


コンポーネント: ActiveReports.NET 9.0J Professional (グレープシティ)
フレームワーク: .NET 4.5.1 ASP.NET MVC Web API 2
言語: VB.NET

9.0JではAzureに対応するとされていますが,"Microsoft Azure Virtual Machines"とあるので,Webサイトではどうかなと気になっていました。

まず,参照を追加します。すべてローカルにコピーするようにします。


"Reports"というフォルダーを作成して,その中にレポートファイルを作成します。テストなのでレポートはテキストラベルでも貼り付けて適当に作ります。ファイル名は以下のようにしました。

ページレポート: PageReport1.rdlx
セクションレポート: SectionReport1.vb


"Controllers"フォルダーの中に"ReportController.vb"を作成します。コードは以下のようなかんじです。


Imports System.Net
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Web.Http
Imports GrapeCity.ActiveReports
Imports GrapeCity.ActiveReports.Export.Pdf.Page


Public Class ReportController
    Inherits ApiController

     
    Public Function GetPagePdfTest() As HttpResponseMessage

        Dim res As New HttpResponseMessage(HttpStatusCode.OK)
        Dim rptpath = System.Web.Hosting.HostingEnvironment.MapPath("~/Reports/PageReport1.rdlx")
        Dim rpt = New PageReport(New System.IO.FileInfo(rptpath))
        Dim doc As Document.PageDocument

        Try
            doc = New Document.PageDocument(rpt)
        Catch eRunReport As ReportException
            res.StatusCode = HttpStatusCode.InternalServerError
            Return res
        End Try

        Dim pdfRenderingExtension As New PdfRenderingExtension()
        Dim outputProvider As New Rendering.IO.MemoryStreamProvider()
        doc.Render(pdfRenderingExtension, outputProvider)

        res.Headers.Add("ContentType", "application/pdf")
        Dim ms As New System.IO.MemoryStream()
        CType(outputProvider.GetPrimaryStream().OpenStream(), System.IO.MemoryStream).WriteTo(ms)
        res.Content = New ByteArrayContent(ms.ToArray)
        res.Content.Headers.ContentDisposition = New ContentDispositionHeaderValue("attachment")
        res.Content.Headers.ContentDisposition.FileName = "pagereport.pdf"
        res.Content.Headers.ContentType = New MediaTypeHeaderValue("application/pdf")

        Return res

    End Function

     
    Public Function GetSectionPdfTest() As HttpResponseMessage

        Dim res As New HttpResponseMessage(HttpStatusCode.OK)
        Dim rpt As New SectionReport1

        Try
            rpt.Run()
        Catch ex As ReportException
            res.StatusCode = HttpStatusCode.InternalServerError
            Return res
        End Try

        Dim ms As New System.IO.MemoryStream()
        Dim export As New Export.Pdf.Section.PdfExport

        Try
            export.Export(rpt.Document, ms)
        Catch ex As ReportException
            res.StatusCode = HttpStatusCode.InternalServerError
            Return res
        End Try

        res.Headers.Add("ContentType", "application/pdf")
        res.Content = New ByteArrayContent(ms.ToArray)
        res.Content.Headers.ContentDisposition = New ContentDispositionHeaderValue("attachment")
        res.Content.Headers.ContentDisposition.FileName = "sectionreport.pdf"
        res.Content.Headers.ContentType = New MediaTypeHeaderValue("application/pdf")

        Return res

    End Function

End Class

Azure Webサイトに発行し,それぞれのレポートに対応するURLにアクセスするとPDFを取得できます。

ページレポート: https://hoge.azurewebsites.net/api/report/pagepdftest
セクションレポート: https://hoge.azurewebsites.net/api/report/sectionpdftest

ちなみに,ベーシックプラン以上だとうまくいきますが,共有プランではエラーが発生します。リモートデバッガーで簡単にエラーを調査できるので.NETを使うのであればAzure Webサイトはとても楽だと思いました。

あと,ActiveReportsをサーバーで運用するにはコア数に応じてコアサーバーライセンスが必要です。クラウドはコア数を簡単に変えられるので,ライセンスに注意ですね。

2015年2月22日日曜日

Outlook.comの代用として法人向けOffice365を検討する

思えばスマートフォンが出始めた頃からWindows Phoneが登場するのを待っていましたが,あまりに日本での発売が期待できないため(一部例外を除く)待ちきれずに他のスマートフォンに手を出してずいぶん経ちました。
docomoを使ってたので初めはAndroidでしたが,もっさりに耐えられずauがiPhoneを出したのをきっかけにiPhoneデビュー。そのうちiPad,Macbook AirとApple製品が増えてゆき,最近ではとうとう個人用のメインマシンをMacbook Proにしてしまいました。もちろん,仕事ではWindowsですし,Macでも仮想だなんだと結局Windowsを使うのですが,日常の個人的なことであればAppleで統一したほうが楽だと感じるようになりました。
ところが,MacってiCloud以外のサービスの扱いがいまいちだなあとも感じています。Googleとはそうでもないんですが,MSとはどうも相性が悪いような気がします。Googleリーダーの終了でGoogle依存をやめようと思ってOutlook.comに移行し,それなりに快適でしたが,MacでOutllook.comを使おうとするといろいろうまくいきません。問題は主に以下の2点です。iPhoneでは問題ないんですけどね。


  • 連絡先(アドレスブック)が連携しない
  • カレンダーが連携しない

Macのアカウント設定を見るとExchangeは使えるようです。ということはExchange Onlineを契約すれば手持ちのデバイスすべてでデータを同期できるのでしょうか。それならOffice365を契約すればExchange Onlineも含まれます。会社でも使っているOffice365ですが,そろそろ個人用のOffice365 Soloを契約しようかと考えていたところです。ただ,日本ではいまいち使えないSkypeの特典とOneDriveの容量アップだけでは今ひとつ面白味に欠けるような気がします。いっそ法人向けのプランを個人用に使ってみてはという気になりました。そこで,以下のプランを契約してみました。

Office365 Business Essentials

デスクトップ版のOfficeが付いていないプランになります。機能はいろいろありますが,今回はExchangeとSharepointがお目当てです。まずはお試しのつもりなので1ヶ月単位の月額650円のサブスクリプションを契約します。年単位だと月あたり540円です。Exchange Onlineが月額440円なので,100円追加で自分専用の各種機能が使えるのはお得な気もします。とはいえ,LyncやYammerは独りではちょっとさみしいので使うことはなさそうです。

今回の用途で法人向けOffice365を使うことには主に以下のメリットがあるのではないかと思います。


一方でデメリットと思える点もあります。

  • メールのエイリアスが使えない
  • ドメインがないとメールとしてはちょっと使いづらい
  • 継続的にコストがかかる(言うまでもないけれど)

いろいろと考えることはありますが,せっかく契約したのでまずは試してみようと思います。