2017年12月11日月曜日

ASP.NET Web Forms に MVC を合成

本当に📝程度ですいません…

nuget の件

Install-Package jQuery
Install-Package Microsoft.AspNet.Mvc
Install-Package EntityFramework
Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Install-Package Microsoft.AspNet.Web.Optimization
Install-Package jQuery.Validation

Global.asax.cs の件

        protected void Application_Start(object sender, EventArgs e) {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

App_Start/BundleConfig.csの件

using System.Web;
using System.Web.Optimization;

namespace hdb {
    public class BundleConfig {
        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
        public static void RegisterBundles(BundleCollection bundles) {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.validate.min.js"));

            bundles.Add(new ScriptBundle("~/bundles/jquery-ui").Include(
                        "~/Scripts/jquery-ui.min.js"));

            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new StyleBundle("~/Content/css").Include(
                      "~/Content/site.css",
                      "~/Content/jquery-ui.min.css"));
        }
    }
}

App_Start/FilterConfig.cs の件

using System.Web;
using System.Web.Mvc;

namespace hdb {
    public class FilterConfig {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
            filters.Add(new HandleErrorAttribute());
        }
    }
}

App_Start/RouteConfig.cs の件


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace hdb {
    public class RouteConfig {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.IgnoreRoute(""); // Default.aspx を使いたい場合

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

        }
    }
}

Controllers/HomeController.cs 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace hdb.Controllers.Home
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }
    }
}

Views/Web.config

<?xml version="1.0"?>

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>

  <system.web>
    <compilation>
      <assemblies>
        <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>
  </system.web>
</configuration>

Views/_ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Views/Shared/_Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - My ASP.NET Application</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                @Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
            </div>
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                </ul>
            </div>
        </div>
    </div>

    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
        </footer>
    </div>

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

Views/Home/Index.cshtml

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>



2017年12月6日水曜日

mod_fcgid: can't apply process slot for

mod_fcgid エラー

[Wed Nov 15 10:52:54.770061 2017] [fcgid:warn] [pid 3784:tid 804] [client fe80::91cc:b8c9:52ed:2904:60525] mod_fcgid: can't apply process slot for C:/php7/php-cgi.exe, referer: http://...;

結論的には ThumbGen.exe (プログラム) が 0 バイトになっており、cmd.exe が実行終了しなかっ た、ことが原因でした。
プログラムの破壊はウィルス対策ソフトの不具合によるものか。
ThumbGen の再インストールで、対応。

ちなみに process slot は 1024 ございます。

/* Increase it if necessary */
#define FCGID_MAX_APPLICATION (1024)

/* FCGID_MAX_APPLICATION + 4 list headers */
#define FCGID_PROC_TABLE_SIZE (FCGID_MAX_APPLICATION+4)

2017年10月31日火曜日

MS-OXPROPS のプロパティ一覧を JSON 形式にしました


OXPROPS.json
https://drive.google.com/file/d/0Bygl-em20CSKVHlBWmtxVEdtbG8/view?usp=sharing

PidTagAttachLongFilename など JSON 形式で利用できるようにしました:

  "PidTagAttachLongFilename": {
    "Canonical name": "PidTagAttachLongFilename",
    "Description": "Contains the full filename and extension of the Attachment object.",
    "Property ID": "0x3707",
    "Data type": "PtypString, 0x001F",
    "Area": "Message Attachment Properties",
    "Defining reference": "[MS-OXCMSG] section 2.2.2.10",
    "Consuming references": "[MS-OXCICAL], [MS-OXOSMMS], [MS-OXRTFEX], [MS-OXCMAIL], [MSOXMSG], [MS-OXORMMS], [MS-OXOSMIME], [MS-OXODOC], [MS-OXOUM], [MS-OXTNEF]",
    "Alternate names": "PR_ATTACH_LONG_FILENAME, PR_ATTACH_LONG_FILENAME_A,"
  },

2017年10月18日水曜日

ASP.NET Web Forms に ASP.NET MVC を中途半端に合成したら、Web Forms の方でエラーが…

Event code: 3005 
Event message: ハンドルされていない例外が発生しました。 
Event time: 2017/10/18 10:54:35 
Event time (UTC): 2017/10/18 1:54:35 
Event ID: 8fd9c0557f114ba9a319136e4feed3dc 
Event sequence: 30 
Event occurrence: 3 
Event detail code: 0 
 
Application information: 
    Application domain: /LM/W3SVC/3/ROOT/toiawa-5-131527646223016368 
    Trust level: Full 
    Application Virtual Path: /toiawa 
    Application Path: C:\inetpub.543\wwwroot\toiawa\ 
    Machine name: DD7 
 
Process information: 
    Process ID: 10024 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\.NET v4.5 
 
Exception information: 
    Exception type: InvalidOperationException 
    Exception message: WebForms UnobtrusiveValidationMode には、'jquery' の ScriptResourceMapping が必要です。jquery (大文字と小文字が区別されます) という名前の ScriptResourceMapping を追加してください。
   場所 System.Web.UI.ClientScriptManager.EnsureJqueryRegistered()
   場所 System.Web.UI.WebControls.BaseValidator.RegisterUnobtrusiveScript()
   場所 System.Web.UI.WebControls.BaseValidator.OnPreRender(EventArgs e)
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

 
 
Request information: 
    Request URL: http://192.168.2.181:543/toiawa/Edit.aspx 
    Request path: /toiawa/Edit.aspx 
    User host address: 192.168.2.111 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: IIS APPPOOL\.NET v4.5 
 
Thread information: 
    Thread ID: 45 
    Thread account name: IIS APPPOOL\.NET v4.5 
    Is impersonating: False 
    Stack trace:    場所 System.Web.UI.ClientScriptManager.EnsureJqueryRegistered()
   場所 System.Web.UI.WebControls.BaseValidator.RegisterUnobtrusiveScript()
   場所 System.Web.UI.WebControls.BaseValidator.OnPreRender(EventArgs e)
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Control.PreRenderRecursiveInternal()
   場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
 
 
Custom event details: 


対策:

修正方法
https://www.ipentec.com/document/document.aspx?page=asp-net-error-required-jquery-script-resource-mapping

回避策
http://zero-config.com/dotnet/aspnet_0001.html

2017年10月4日水曜日

System.Drawing.Imaging.ImageCodecInfo のリスト

ImageCodecInfo.GetImageDecoders()

[
  {
    "Clsid": "557cf400-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cab-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in BMP Codec",
    "DllName": null,
    "FormatDescription": "BMP",
    "FilenameExtension": "*.BMP;*.DIB;*.RLE",
    "MimeType": "image/bmp",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "Qk0="
    ],
    "SignatureMasks": [
      "//8="
    ]
  },
  {
    "Clsid": "557cf401-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cae-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in JPEG Codec",
    "DllName": null,
    "FormatDescription": "JPEG",
    "FilenameExtension": "*.JPG;*.JPEG;*.JPE;*.JFIF",
    "MimeType": "image/jpeg",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "/9g="
    ],
    "SignatureMasks": [
      "//8="
    ]
  },
  {
    "Clsid": "557cf402-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cb0-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in GIF Codec",
    "DllName": null,
    "FormatDescription": "GIF",
    "FilenameExtension": "*.GIF",
    "MimeType": "image/gif",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "R0lGODlh",
      "R0lGODdh"
    ],
    "SignatureMasks": [
      "////////",
      "////////"
    ]
  },
  {
    "Clsid": "557cf403-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cac-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in EMF Codec",
    "DllName": null,
    "FormatDescription": "EMF",
    "FilenameExtension": "*.EMF",
    "MimeType": "image/x-emf",
    "Flags": 65542,
    "Version": 1,
    "SignaturePatterns": [
      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBFTUY="
    ],
    "SignatureMasks": [
      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8="
    ]
  },
  {
    "Clsid": "557cf404-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cad-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in WMF Codec",
    "DllName": null,
    "FormatDescription": "WMF",
    "FilenameExtension": "*.WMF",
    "MimeType": "image/x-wmf",
    "Flags": 65542,
    "Version": 1,
    "SignaturePatterns": [
      "183Gmg=="
    ],
    "SignatureMasks": [
      "/////w=="
    ]
  },
  {
    "Clsid": "557cf405-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cb1-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in TIFF Codec",
    "DllName": null,
    "FormatDescription": "TIFF",
    "FilenameExtension": "*.TIF;*.TIFF",
    "MimeType": "image/tiff",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "SUk=",
      "TU0="
    ],
    "SignatureMasks": [
      "//8=",
      "//8="
    ]
  },
  {
    "Clsid": "557cf406-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3caf-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in PNG Codec",
    "DllName": null,
    "FormatDescription": "PNG",
    "FilenameExtension": "*.PNG",
    "MimeType": "image/png",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "iVBORw0KGgo="
    ],
    "SignatureMasks": [
      "//////////8="
    ]
  },
  {
    "Clsid": "557cf407-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cb5-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in ICO Codec",
    "DllName": null,
    "FormatDescription": "ICO",
    "FilenameExtension": "*.ICO",
    "MimeType": "image/x-icon",
    "Flags": 65542,
    "Version": 1,
    "SignaturePatterns": [
      "AAABAA=="
    ],
    "SignatureMasks": [
      "/////w=="
    ]
  }
]

ImageCodecInfo.GetImageEncoders()

[
  {
    "Clsid": "557cf400-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cab-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in BMP Codec",
    "DllName": null,
    "FormatDescription": "BMP",
    "FilenameExtension": "*.BMP;*.DIB;*.RLE",
    "MimeType": "image/bmp",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "Qk0="
    ],
    "SignatureMasks": [
      "//8="
    ]
  },
  {
    "Clsid": "557cf401-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cae-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in JPEG Codec",
    "DllName": null,
    "FormatDescription": "JPEG",
    "FilenameExtension": "*.JPG;*.JPEG;*.JPE;*.JFIF",
    "MimeType": "image/jpeg",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "/9g="
    ],
    "SignatureMasks": [
      "//8="
    ]
  },
  {
    "Clsid": "557cf402-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cb0-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in GIF Codec",
    "DllName": null,
    "FormatDescription": "GIF",
    "FilenameExtension": "*.GIF",
    "MimeType": "image/gif",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "R0lGODlh",
      "R0lGODdh"
    ],
    "SignatureMasks": [
      "////////",
      "////////"
    ]
  },
  {
    "Clsid": "557cf405-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3cb1-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in TIFF Codec",
    "DllName": null,
    "FormatDescription": "TIFF",
    "FilenameExtension": "*.TIF;*.TIFF",
    "MimeType": "image/tiff",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "SUk=",
      "TU0="
    ],
    "SignatureMasks": [
      "//8=",
      "//8="
    ]
  },
  {
    "Clsid": "557cf406-1a04-11d3-9a73-0000f81ef32e",
    "FormatID": "b96b3caf-0728-11d3-9d7b-0000f81ef32e",
    "CodecName": "Built-in PNG Codec",
    "DllName": null,
    "FormatDescription": "PNG",
    "FilenameExtension": "*.PNG",
    "MimeType": "image/png",
    "Flags": 65543,
    "Version": 1,
    "SignaturePatterns": [
      "iVBORw0KGgo="
    ],
    "SignatureMasks": [
      "//////////8="
    ]
  }
]

2017年9月19日火曜日

ODBC--範囲外のデータです

ODBC リンクテーブルの場合、

DoCmd.SetParameter "日付", CDbl(日付)
DoCmd.OpenQuery "クエリー"

でどうでしょう…

VB6 用、日付に関する便利関数



Public Function 先月初日() As Date
    Dim 先月 As Date
    Let 先月 = DateSerial(Year(Now), Month(Now), 1) - 1
    先月初日 = DateSerial(Year(先月), Month(先月), 1)
End Function

Public Function 先月末日() As Date
    Dim 初日 As Date
    先月末日 = DateSerial(Year(Now), Month(Now), 1) - 1
End Function

Public Function 今月初日() As Date
    今月初日 = DateSerial(Year(Now), Month(Now), 1)
End Function

Public Function 今月末日() As Date
    Dim 来月 As Date
    Let 来月 = DateSerial(Year(Now), Month(Now), 1) + 31
    今月末日 = DateSerial(Year(来月), Month(来月), 1) - 1
End Function

2017年8月20日日曜日

XSLT XPath + MS 仕様 リファレンス用


XPath 構文
  XPath 式のコンテキスト 演算子および特殊文字 コレクション フィルターおよびフィルター パターン 論理式、比較式、およびセット式 比較 セット操作 位置のパス XPath の例

XPath の例
  ./author author first. name /bookstore //author book[/bookstore/@specialty=@style] author/first-name bookstore//title bookstore/*/title bookstore//book/excerpt//emph .//title author/* book/*/last-name */* *[@specialty] @style price/@exchange price/@exchange/total book[@style] book/@style @* ./first-name first-name author[1] author[first-name][3] my:book my:* @my:*
  x/y[1] x/y[position() = 1] (x/y)[1] x[1]/y[2] book[last()] book/author[last()] (book/author)[last()] book[excerpt] book[excerpt]/title book[excerpt]/author[degree] book[author/degree] author[degree][award] author[degree and award] author[(degree or award) and publication] author[degree and not(publication)] author[not(degree or award) and publication] author[last-name = "Bob"] author[last-name[1] = "Bob"] author[last-name [position()=1]= "Bob"] degree[@from != "Harvard"] author[. = "Matthew Bob"] author[last-name = "Bob" and ../price > 50] book[position() <= 3] author[not(last-name = "Bob")] author[first-name = "Bob"] author[* = "Bob"] author[last-name = "Bob" and first-name = "Joe"] price[@intl = "Canada"] degree[position() < 3] p/text()[2] ancestor::book[1] ancestor::book[author][1] ancestor::author[parent::book][1]


  ancestor:: ancestor-or-self:: attribute:: child:: descendant:: descendant-or-self:: following:: following-sibling:: namespace:: parent:: preceding:: preceding-sibling:: self::

ノード型のテスト
  comment() node() processing-instruction() text()

文字列関数 (XPath)
  concat contains normalize-space starts-with String string-length substring substring-after substring-before translate

XML データ型リファレンス
  string boolean decimal float double duration dateTime time date gYearMonth gYear gMonthDay gDay gMonth hexBinary base64Binary anyURI QName NOTATION normalizedString token language IDREFS ENTITIES NMTOKEN NMTOKENS Name NCName ID IDREF ENTITY integer nonPositiveInteger negativeInteger long int short byte nonNegativeInteger unsignedLong unsignedInt unsignedShort unsignedByte positiveInteger

XsltArgumentList.AddExtensionObject
  .AddExtensionObject("urn:Link", link); xmlns:hxLink="urn:Link" exclude-result-prefixes="hxLink" <xsl:value-of select="concat(hxLink:LookupContentId(@NavigateUrl), '.html')"/>

<xsl:element> 要素
  xsl:apply-imports xsl:apply-templates xsl:call-template xsl:choose xsl:copy xsl:copy-of xsl:element xsl:fallback xsl:for-each xsl:if xsl:message xsl:number xsl:otherwise xsl:param xsl:template xsl:text xsl:value-of xsl:variable xsl:when xsl:with-param

Node-Set 関数
  count id last local-name name namespace-uri position

Microsoft XPath 拡張関数
  ms:type-is ms:type-local-name ([node-set]) ms:type-namespace-uri ([node-set]) ms:schema-info-available ms:string-compare ms:utc ms:namespace-uri ms:local-name ms:number ms:format-date ms:format-time

$ は変数


{} は属性値テンプレート



2017年6月30日金曜日

WinPE 起動用 ISO イメージ作成メモ

mkisofs ... mkisofs は cdrecord_fe_0902_all のものを使用

mkisofs -udf -o cd.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table cd

フォルダー構成

boot/
  bcd
  boot.sdi
  BootFix.bin
  bootsect.exe
  en-us
  etfsboot.com
  fonts
  grldr
  grub
  IMG
  ja-JP
  memdisk
  memtest.exe
  fonts/
    chs_boot.ttf
    cht_boot.ttf
    jpn_boot.ttf
    kor_boot.ttf
    wgl4_boot.ttf
  grub/
    grldr
    menu.lst
  ja-JP/
    bootmgr.exe.mui
    bootsect.exe.mui
isolinux/
  boot.cat 
  chain.c32
  isolinux.bin 
  isolinux.cfg
sources/
  2008R2.wim
BOOTMGR

isolinux.cfg

DEFAULT winpe

LABEL winpe
MENU LABEL ^WinPE BOOTMGR
COM32 chain.c32
APPEND fs ntldr=/BOOTMGR


2017年6月14日水曜日

Access レポート「指定した式には値がありません。」




---
実行時エラー '2427':

指定した式には値がありません。
---

対策例:
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    If CurrentRecord = 0 Then
        ' レコードなし
    Else
        ' レコードあり
        Debug.Print [ID]
    End If
End Sub


2017年5月26日金曜日

PowerEdge T130 で、Windows Server 2008 R2 セットアップのキーボード・マウスが操作できない!

簡単な解決方法(未確認)
  • BIOS に入ります。
  • System BIOS Settings → Integrated Devices → USB 3.0 Setting → Disabled

難しい解決方法
  • Windows インストールディスクの boot.wim に USB 3.0 ドライバーを注入します。
  • 更新した boot.wim を含む DVD を作成し、それを使ってインストールを実施します。


参考:
How to inject USB 3.0 drivers into Windows Server 2008 R2SP1 for use on Dell PowerEdge R230, R330, T130, T330 and T30
http://en.community.dell.com/techcenter/b/techcenter/archive/2016/05/15/how-to-inject-usb-3-0-drivers-into-windows-server-2008-r2sp1-for-use-on-dell-r230-r330-t130-t330

syslinux 6 で WinPE を起動したい

用意するファイル

VistaPE などで作成した boot.wim から、7-zip などを使ってこれらのファイルを取り出してください:

\BOOTMGR
\Boot\bcd
\Boot\boot.sdi
\Boot\en-us\*
\Boot\fonts\*
\Boot\ja-JP\*

cfg ファイルの書き方

LABEL -
MENU LABEL ^WinPE BOOTMGR
COM32 /boot/syslinux/chain.c32
APPEND fs ntldr=/BOOTMGR

bcdedit で \boot\bcd ファイルを修正

bcdedit は使う OS のバージョンには特に影響しないようです。




C:\A>bcdedit /store bcd /copy {default} /d "MyPE_x86"
エントリは {5841949e-415a-11e7-bff0-d43d7e05f256} に正常にコピーされました。

C:\A>bcdedit /store bcd /set {5841949e-415a-11e7-bff0-d43d7e05f256} device ramdisk=[boot]\sources\MyPE_x86.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
この操作を正しく終了しました。

C:\A>bcdedit /store bcd /set {5841949e-415a-11e7-bff0-d43d7e05f256} osdevice ramdisk=[boot]\sources\MyPE_x86.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
この操作を正しく終了しました。

C:\A>bcdedit /store bcd /displayorder {5841949e-415a-11e7-bff0-d43d7e05f256} /addlast
この操作を正しく終了しました。

C:\A>bcdedit /store bcd

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
description             Windows Boot Manager
locale                  ja-jp
inherit                 {globalsettings}
default                 {default}
displayorder            {default}
                        {5841949e-415a-11e7-bff0-d43d7e05f256}
toolsdisplayorder       {memdiag}
timeout                 30

Windows ブート ローダー
--------------------------------
identifier              {default}
device                  ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path                    \windows\system32\boot\winload.exe
description             Windows Setup
locale                  ja-jp
inherit                 {bootloadersettings}
osdevice                ramdisk=[boot]\sources\boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot              \windows
detecthal               Yes
winpe                   Yes
ems                     Yes

Windows ブート ローダー
--------------------------------
identifier              {5841949e-415a-11e7-bff0-d43d7e05f256}
device                  ramdisk=[boot]\sources\MyPE_x86.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path                    \windows\system32\boot\winload.exe
description             MyPE_x86
locale                  ja-jp
inherit                 {bootloadersettings}
osdevice                ramdisk=[boot]\sources\MyPE_x86.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot              \windows
detecthal               Yes
winpe                   Yes
ems                     Yes

C:\A>




2017年5月2日火曜日

palloc で access violation … Visual Studio 2005 で作った PostgreSQL 8.2 の C 関数にて

BUILDING_DLL を定義したらダメみたいです。

参考: Re: Access violation from palloc, Visual Studio 2005, C-language function

include/server/utils/palloc.h に定義があります。

/*
 * Type MemoryContextData is declared in nodes/memnodes.h. Most users
 * of memory allocation should just treat it as an abstract type, so we
 * do not provide the struct contents here.
 */
typedef struct MemoryContextData *MemoryContext;

/*
 * CurrentMemoryContext is the default allocation context for palloc().
 * We declare it here so that palloc() can be a macro. Avoid accessing it
 * directly!  Instead, use MemoryContextSwitchTo() to change the setting.
 */
extern DLLIMPORT MemoryContext CurrentMemoryContext;

/*
 * Fundamental memory-allocation operations (more are in utils/memutils.h)
 */
extern void *MemoryContextAlloc(MemoryContext context, Size size);
extern void *MemoryContextAllocZero(MemoryContext context, Size size);
extern void *MemoryContextAllocZeroAligned(MemoryContext context, Size size);

#define palloc(sz) MemoryContextAlloc(CurrentMemoryContext, (sz))

#define palloc0(sz) MemoryContextAllocZero(CurrentMemoryContext, (sz))

MemoryContextAlloc や CurrentMemoryContext は、インポートライブラリを利用して postgres.exe プロセスからインポートします。

---
結論から申しますと、つぎのようにあるべきが、

extern __declspec (dllimport) MemoryContext CurrentMemoryContext;

BUILDING_DLL を定義することで、つぎのように変化することが問題でした。

extern __declspec (dllexport) MemoryContext CurrentMemoryContext;

---
それでは納得できないこともあろうかと、アセンブラレベルで解析もしました。

palloc するだけの C 関数:
PG_FUNCTION_INFO_V1(ddtest);
Datum ddtest(PG_FUNCTION_ARGS) {
 palloc(0x123456);
 PG_RETURN_NULL();
}

まず、
extern __declspec (dllimport) MemoryContext CurrentMemoryContext; となる場合。


緑下線を引いた部分 100470F8 が CurrentMemoryContext の実体のアドレスです。そこに意味のあるコードはありませんが一応。88 87 04 00 の部分が MemoryContextSwitchTo を呼び出すことで、本来の値に書き換えられるわけです。


つぎに、
extern __declspec (dllexport) MemoryContext CurrentMemoryContext; となる場合。


緑下線を引いた部分が <CurrentMemoryContext> になっています。一見これが正解じゃないかと思いますが、参照先は jmp dword ptr [0x100470f8] の命令コードです。



0x70f825ff に 4 を足した 0x70f82603 にアクセスしようとして、access violation が発生することが冒頭のエラーにつながります。

『postgres.exe の 0x005fbb4a で初回の例外が発生しました: 0xC0000005: 場所 0x70f82603 を読み込み中にアクセス違反が発生しました。』

外部の exe/dll からインポートする変数は、__declspec (dllimport) を使いましょう。

2017年4月26日水曜日

Interoperability 相互運用性 を最大限にする! とは

どういうことでしょうか…?

つまり、再利用可能な要素を多分に含む、ということです!

HTML に対する XML と同じ考え方です。

つまり、画面表示の要素と、データを分離する、ということです。

そうするとデータの機械処理や流用が楽になります。

要検討事項:
  • 詳細なデータを確認したい場合。
  • 検証可能性を明らかしたい場合。

2017年4月3日月曜日

SQL Server Browser サービス グループが存在しません。…


現象:

Microsoft SQL Server 2014 セットアップ

SQL Server Browser サービス グループが存在しません。セットアップでエラーが発生していないか確認してください。

対策:

手順:
  • secpol.msc
  • [ユーザー権利の割り当て]→[サービスとしてログオン]
  • "NT SERVICE\MSSQL$MICROSOFT##WID" を追加
  • [OK]
  • [セキュリティの設定]右クリック→[再読み込み]

2017年2月3日金曜日

Redmine 3.2-stable on IIS 8.0 +Helicon Zoo


トラブルシューティングや Tips 集です

環境
  • Windows Server 2012 (6.2)
  • IIS 8.0
  • railsinstaller-3.2.1.exe
  • redmine 3.2-stable

参考資料:RedmineをWindowsにインストールする手順書作ったよ
http://shoutatani.hatenablog.com/entry/2015/09/21/121955

Ruby 2.2 にしたのは… Ruby 2.3 には PostgreSQL 用バイナリドライバーがないからでした。
[tid-3258816] cannot load such file -- 2.3/pg_ext (LoadError)

特定のタイミングで、Gemfile.lock を書き換えます。htmlentities 4.3.1 → 4.3.4
   htmlentities (4.3.4)

これは、warning: key "inodot" is duplicated and overwritten という件に対応するためです。
   rbpdf (1.19.0)
     htmlentities (= 4.3.4)
     rbpdf-font (~> 1.19.0)


Subversion を認識しない…? 赤印がつく。
  • svn コマンドを実行できるが落ちてしまう(%LOCALAPPDATA% が未定義のため)
    これは、IIS がユーザープロファイルをロードしないでワーカープロセスを実行するからです。
    対策:
    アプリケーションプール
    redmine
    詳細設定
    ユーザープロファイルの読み込み = True

Helicon Zoo に ruby.2.2.rack を追加したい:

IIS、Server ホーム、管理、構成エディター

セクション=system.webServer/heliconZooServer 


... ボタンより、engines の一覧に移ります。

このような内容で追加します:

 environmentVariables の中:

redmine3 の方の Helicon Zoo

rails.project の詳細。Inherited は ruby.2.2.rack から継承されているもので、変更していません。

WORKER_REQUEST_TIMEOUT は 86400 とか長いほうがいいかもしれません。起動が重いので。


2017年2月2日木曜日

Helicon Zoo - Application backend read Error

redmine の場合、log フォルダーを確認


RAILS_ENV を確認するべし。production なのか、development なのか。


2017年1月24日火曜日

TortoiseGit ssh パスワードの記録は可能?

sshaskpass.exe を(自作して)置き換えます。

現状のもの:

自作したもの: MyPasswordPrompt

[Proceed] を押すと、Console.Write します。
[Save and proeed] を押すと、Console.Write してから保存します。同じ質問を与えると、同じ答えを設定した状態で表示します。

大変残念ながら、TortoiseGitPlink.exe には使えない技法です。cygwin などの ssh.exe を指定してください。



sshaskpass.exe は通常つぎのように利用されています。
 
%SSH_ASKPASS%" display command line here: > password.txt

コマンドラインに "pass" が含まれていたら、入力文字列を *** で隠します。

2017年1月21日土曜日

Rx SubscribeOn と ObserveOn の使い分け

端的に述べますと、
SubscribeOn = ワーカースレッド
ObserveOn = UI スレッド

こちらのコード例が見事です。ご覧ください!
[Android] OkHTTP + Retrofit + RxAndroid で REST クライアントを実装する
http://dev.classmethod.jp/smartphone/android/okhttp-retrofit-rxandroid/

東京の天気を取得して、画面に表示するようです。
東京の天気を取得」がワーカースレッド。
画面に表示」を UI スレッドで実行するようになっています。


        // 非同期処理の実行
        adapter.create(WeatherApi.class).get("weather", "Tokyo,jp")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<WeatherEntity>() {
                    @Override
                    public void onCompleted() {
                        Log.d("MainActivity", "onCompleted()");
                    }
 
                    @Override
                    public void onError(Throwable e) {
                        Log.e("MainActivity", "Error : " + e.toString());
                    }
 
                    @Override
                    public void onNext(WeatherEntity weather) {
                        Log.d("MainActivity", "onNext()");
                        if (weather != null) {
                            ((TextView) findViewById(R.id.text)).setText(weather.weather.get(0).main);
                        }
                    }
                });


SubscribeOn は、最初の ObservableOn より前の処理に適用されます。
ObserveOn は、それより後の処理に適用されます。2 個目以降の ObserveOn も同様です。

図にするとこのようなイメージです:

 


2017年1月20日金曜日

他プロセスに対する GetFocus

他プロセスがフォーカスを持っている場合は、通常 GetFocus は NULL を返します。
RegisterHotKey の処理で GetFocus をしたい場面が出てくるとします。

#include <windows.h>
#include <stdio.h>

int main() {
 while (1) {
  HWND hwndForeground = GetForegroundWindow();
  DWORD procId = 0;
  DWORD threadId = GetWindowThreadProcessId(hwndForeground, &procId);
  AttachThreadInput(GetCurrentThreadId(), threadId, true);
  HWND hwndActive = GetActiveWindow();
  HWND hwndFocus = GetFocus();
  AttachThreadInput(GetCurrentThreadId(), threadId, false);
  printf("%p %p %p \n", hwndForeground, hwndActive, hwndFocus);
  Sleep(100);
 }
}


このようにしたらいけました。AttachThreadInput がキモですね…

GetActiveWindow == GetForegroundWindow になります。

GetFocus で、目当てのコントロールが取得できます。