2016年12月27日火曜日

ASP.NET MVC キャッシュを無効にする

ASP.NET MVC キャッシュを無効にする
 
[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public ActionResult Index()
{
    return View();
}

2016年12月23日金曜日

ASP.NETでlog4netを使う

ASP.NETでlog4netを使う場合

nugetでlog4netをinstall

log4netの設定ファイルを作成

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <log4net>
    <!-- ログ出力先の定義 -->
    <appender name="DailyFileAppender" type="log4net.Appender.RollingFileAppender">

      <!-- ログ・ファイル名の先頭部分 -->
      <param name="File" value="c:\temp\EbiWebService" />

      <!-- ファイル名の日付部分 -->
      <param name="DatePattern" value='yyyyMMdd".log"' />

      <!-- ログファイルの切替 { サイズ: Size, 日付: Date } -->
      <param name="RollingStyle" value="Date" />

      <!-- 追加 -->
      <param name="AppendToFile" value="true" />

      <!-- ログ・ファイル名が固定ではないので“false”を指定 -->
      <param name="StaticLogFileName" value="false" />

      <!-- ログの書式 -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
    <root>
      <!-- ログのレベルを指定 -->
      <!-- すべてのログレベルを出力 -->
      <level value="ALL" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="DailyFileAppender" />
    </root>
  </log4net>
</configuration>


「グローバルアプリケーションクラス」を追加し、Application_Start で設定ファイルの位置を指定します。
void Application_Start(object sender, EventArgs e) 
{
 log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/App_Data/log4net.xml")));
}

後はPGに記述

using System;
using log4net;

public partial class _Default : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Fatal("log4netログ出力~Fatal");
        log.Error("log4netログ出力~Error");
        log.Warn("log4netログ出力~Warn");
        log.Info("log4netログ出力~Info");
        log.Debug("log4netログ出力~Degug");
    }
}

2016年12月20日火曜日

Xaqmarin.FormsでWCFを構築してテストすると、EndPointが見つからないとエラー出力で終了する。

現象
Xaqmarin.FormsでWCFを構築してテストすると、EndPointが見つからないとエラー出力で終了する。

理由
WCFサービスおよび、WPFなどの、通常の.NETプロジェクトは
App.config(アプリ設定ファイル)に、EndPointのurlが記述される。

しかし、Xamarin.Formsを使ったProjectは、App.configが無いので
プログラムソース内に、On Cordingをする。

※誰か、Android Projectで App.configが使える方法を教えてください。

経緯
WCF Projectの単体テストのUrlは当然LocalhostでテストOK

Android側でテストするとNG、 1日悩みました、Orz......

単体テストOKだから、AndroidのWCF Clientだも読めると簡単に思っていたら
エラー出力なんですから。

Android clientから見たら、Localhostって、Androidじゃないですか!
しっかりと、WCF Serviceが起動している、IP Addressを指定しないとNGになったのです。

XamarinのWCFを使ったサンプルには、そこまで書いていなくて

サンプルをBuildして実行しても、エラーは出ますよね、だって EndPointのUrlが
存在しないんだから。

記述方法

 AskServiceReference.EbiServiceClient client;

        public MenuViewModel(Page page) : base(page) {
            Title = "Aska";

            //WCF 開始
            var binding = new BasicHttpBinding() {
                Name = "basicHttpBinding",
                MaxReceivedMessageSize = 67108864,
            };

            var timeout = new TimeSpan(0, 1, 0);
            binding.SendTimeout = timeout;
            binding.OpenTimeout = timeout;
            binding.ReceiveTimeout = timeout;

            client = new AskServiceReference.AskServiceClient (
                binding,
                new EndpointAddress ("http://192.168.184.172/EbiWcf/EbiService.svc"));

            client.OpenCompleted += mDATE_OpenCompleted;
            client.GetDataCompleted += mDate_GetDataCompleted;

            client.OpenAsync();
        }
}

        private async void mDATE_OpenCompleted(object sender, AsyncCompletedEventArgs e) {
            client.GetDataAsync();
        }

        private async void mDate_GetDataCompleted(object sender,       AskServiceReference.GetDataCompletedEventArgs e) {

            foreach (var item in e.Result) {
                お知らせ1 = item.お知らせ1;
                お知らせ2 = item.お知らせ2;
            }
            client.CloseAsync();
        }

Android Clientだと、無条件に非同期になるようです。
Openしてから、GetDataを行いますが、これだと、画面表示に間に合わないので

Xamarin.FormsのWCFサンプリを参照することをお勧めします。
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/walkthrough_working_with_WCF/


2016年12月19日月曜日

Xamarin Forms でWCFサービスを参照するとコケる

現象
Xamarin Forms でWCFサービスを参照するとコケる。

原因
ASP.NET CoreをPCLで選択しているとNGっぽい。

Xamarin FormsのPCLから ASP.NET Core 1.0を除外して
サービス参照すると、正常に参照が可能になる。

2016年12月16日金曜日

C# ASP.NET Core用 アプリサーバ KestrelHttpServer

A web server for ASP.NET Core based on libuv. 

https://github.com/aspnet/KestrelHttpServer 

libuvって、何だ?と調べたら

libuvは 非同期イベント駆動 のプログラミングスタイルを強制します。 libuvの中心的な機能はイベントループとI/Oと他の活動(activity)の通知をベースにしたコールバックを提供することです。libuvはタイマのようなユーティリティ、ノンブロッキングのネットワークのサポート、非同期のファイルシステムへのアクセス、子プロセス等を提供します。

しばやんさんが、.NET周りのアプリサーバについて記事をまとめてありました。
http://blog.shibayan.jp/entry/20141106/1415200465

2016年12月15日木曜日

MS-SQL identityの項目にInsertする方法

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

Xamarin FormのButton Textがすべて大文字になる。

Android LollipopでButtonのTextが大文字(textAllCaps)は、仕様です。

知らなかったよ~

Xamarinの場合、Style.xmlで新しいThemeを作って、ButtonのSetAllCapsをfalseにするのが
正解らしいです。

You could also just put this in your Android styles.xml:
<style name="MyTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
        <item name="android:textAppearanceButton">@style/MyTextAppearance.Material.Button</item>
</style>

<style name="MyTextAppearance.Material.Button" parent="@android:style/TextAppearance.Material.Button">
        <item name="textAllCaps">false</item>
        <item name="android:textAllCaps">false</item>
</style>

https://forums.xamarin.com/discussion/34817/button-on-android-all-caps

styles.xmlを変更したらOKでした。

2016年12月12日月曜日

MAGTIC XPA 3.1で作成したAndroidアプリ(.apk)がGoogle Developerにupload出来ない。

MAGIC XPA 3.1で作成したAndroid (.apk)が、 Google Developerにuploadしようとしたら
以下のエラーが表示された。

アップロード出来ませんでした。
この APKは、aaptでは解析できません。エラー出力
Failed to run aapt dump badging: ERROR getting 'name' attribute: attribute is not a string value

エラー内容は、文字列の値が悪いと言われるけど、エラーの場所って何処?

MAGIC のリッチビルダーで作成したのに、NGになるってどうして?

原因
C:\Program Files\Magicxpa\Studio 3.1\RIAModules\Android\Source\app\src\main
のフォルダにある、AndroidManifest.xmlに、@string/があるとNG

対応
C:\Program Files\Magicxpa\Studio 3.1\RIAModules\Android\Source\app\src\main
のフォルダにある、AndroidManifest.xmlの、@string/ をすべて
直接値を記述する。

res/values/strings.xmlを参照するのではなく、AndroidManifest.xmlに値を記述


android:label="@string/app_name"

android:label="hogehogeApp"

2016年12月8日木曜日

Xamarin.Froms用 XAMLデザイナー

2016年12月8日 現在 VisualStudio 2015で Xamarin.FormsのXAMLデザイナーは無いが
3rd partyに、XAMLデザイナーが有った。

http://gorillaplayer.com/

なかなか使い勝手が良い。
XAMLが使えるから、UIとBLの分離も楽になる。

早く、VisualStudioでも実装されて欲しい機能です。
MacOSのVisualStudioには、ブレピューが実装されているのにね。

2016年12月1日木曜日

ASP.NET MVCでBackspaceを無効

ASP.NET MVC5でBackspaceを無効にしたい。

$(document).keydown(function(e) {
 if (e.keyCode === 8) {
  var tag = e.target.nodeName.toLowerCase();
  var $target = $(e.target);
  if ((tag !== 'input' && tag !== 'textarea') || $target.attr('readonly') || $target.is(':disabled')) {
   return false;
  }
 }
 return true;
});
 
上記scriptをheadタグに埋め込む。
 

2016年11月22日火曜日

SIP Server

現在、SIP Serverの仕組みを勉強中

Skype、LinPhone, Zoiperなど、無料のSIP Serverって
調べるとかなりあることが解った。

Asteriskなども勉強中です。

facebookからの抜粋 幸福とは?

「そんなことは当たり前でしょう。
幸福とは、
①人に愛されること、②人にほめられること、③人の役に立つこと、④人に必要とされることです。
そのうちの②人にほめられること、③人の役に立つこと、そして④人に必要とされることは、施設では得られないでしょう。
この三つの幸福は、働くことによって得られるのです」
と教えてくれたそうです。
「その4つの幸せのなかの3つは、働くことを通じて実現できる幸せなんです。
だから、どんな障害者の方でも、働きたいという気持ちがあるんですよ。
施設のなかでのんびり楽しく、自宅でのんびり楽しく、テレビだけ見るのが幸せではないんです。
真の幸せは働くことなんです」
普通に働いてきた大山さんにとって、それは目からウロコが落ちるような考え方でした。
これは、働いている多くの人たちも忘れていることかもしれません。
それを障害者の方によって教えられたのです。
 
この言葉によって、大山さんは「人間にとって“生きる”とは、必要とされて働き、それによって自分で稼いで自立することなんだ」ということに気づいたそうです。
「それなら、そういう場を提供することこそ、会社にできることなのではないか。
企業の存在価値であり社会的使命なのではないか」
それをきっかけに、以来50年間、日本理化学工業は積極的に障害者を雇用し続けることになったのです。

2016年11月17日木曜日

『COBARION』(コバリオン)

『COBARION』(コバリオン)は、東北大学金属材料研究所の千葉晶彦教授が開発し、株式会社エイワで製造され、(財)いわて産業振興センターが、「コバリオン」として、商標登録したものです。
このコバルトクロム合金が持つ、Niの含有量がほとんどないにもかかわらず高延性で高加工性、さらに高機械強度、高耐摩耗性、高耐食性を持ち合わせているという特性は、独自の結晶組織制御技術によってなされたものであり、まったく新しい特徴です。
本材は、真空溶解法により合金化され、様々な熱処理工程を経て丸棒材として市場に供給されます。
整形外科分野の人工関節(股関節、膝関節、肘関節 等)や歯科分野の歯科矯正用ワイヤーや義歯床などに適しています。

2016年11月10日木曜日

2016年10月28日金曜日

MS-SQL 漢字を含む文字列の分割

SQL-Serverが全角文字を最後の一文字で断ち割った時は、指定バイト数よりも1バイト欠損するという性質を利用して、判定に使います。 ALTER VIEW [dbo].[v最近商品一覧] (得意先CD, 出荷年月日, 出荷伝票番号, 行番号, 商品CD, 商品名, 商品名1, 商品名2, 補足, 数量, 単価, 金額 ) AS SELECT [得意先CD] ,[出荷年月日] ,[出荷伝票番号] ,[行番号] ,[商品CD] ,[商品名] ,SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),1,20) ,CASE WHEN DATALENGTH(SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),1,20)) < 20 THEN SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),20,21) ELSE SUBSTRING(CAST(RTRIM(LTRIM([商品名])) AS TEXT),21,20) END ,[補足] ,[数量] ,[単価] ,[金額] FROM dbo.e_KAKOSR_DAT AS D1

2016年10月21日金曜日

EntityFrameworkのkey設定

EntityFrameworkのkey設定 [key] [column(Order = 0)] public int id; [key] [column(Order = 1)] public int subid; 初期値でカラム1番目がプライマリーキーになるが 複数プライマリーキーになる場合は、上記のような設定が必要 設定しないと、データ取得時の値がおかしくなる。

2016年10月17日月曜日

iPhoneの青色

LightSwitchよ、さようなら!

LightSwitchよ、さようなら!

昨日、LightSwitchのblogから、メールが届いた。

The main points of the article are:

  • Visual Studio 2015 is the last release of Visual Studio that includes the LightSwitch tooling.
  • [we will] continue to support users with existing LightSwitch applications, including critical bug fixes and security issues as per the Microsoft Support Lifecycle [until 2020].
  • We no longer recommend LightSwitch for your new apps
悲しいかな、LightSwitchが搭載されのが、VisualStudio2015が最後
しかも、2020年までしか、サポートしない。

Mobile Appが出てきたから、実行OSは、マルチプラットフォーム
サーバーサイドは、クラウドサービス Azureで動作するので
Microsoftは、LightSwithを捨てたんだろう。

後任は、PowerAppsになるのかな?
業務アプリも、OSが Windowsだけですと、エンドユーザーに説明出来なくなってきた。
マルチプラットフォームは、聞こえはいいが、テストする側からすると、地獄
コストを考えると、実際は、不具合が出てから、現象再現後、修正するようになると思う。




Sharp.XmppのPcl版があった

Sharp.XmppのPcl版が欲しいと思っていたら、ありました。

Sharp.Xmpp.NetCore
DnDnsCore

自分のgithubに、importさせてもらいました。

2016年10月12日水曜日

JRuby 9.1.5 + Redmine 3.3.1 + MS-SQL

JRuby 9.1.5 + Redmine 3.3.1 + MS-SQL 2012 Express

上記の構成で構築出来た。

今まで、Migrateした時、infomation_schema.CONSTRAINT_TABLE_USAGEが見つからないと
エラー表示されていたが、よくよく考えたら
データベースの参照順位が、Japanese_90BIN2だったので
大文字小文字を判別して、参照出来なかった。

データベース参照順位を japanese_CI_ASにしたら
あっさりと、Migrate出来た。

2016年10月1日土曜日

Sharp.XmppのPcl版が欲しい

https://github.com/pgstath/Sharp.Xmpp

現在.NET では、3系統がある
1.いままでのWindowsのみ動作する .NET 4.6.1
2.Linux, Macでも動作する .NET Core 1.1
3.Windows10で動作する Universal Windows Platform (UWP)

ソースはC#」だけど、プロジェクト毎にライブラリが使えないって
ちょっと面倒臭くなってきた。


コードレビュー

お客さんにコードの変更点を教える必要があった。

いままでは、redmineの差分表示していたが、何故かVerison管理のコマンドが
上手く 叩けない。(JRubyで操作しているからかな?)

仕方ないので、コードレビューのWebサーバーを社内に構築

使ったのが、 http://codebrag.com/

codebragを使ってみた。

GITなどの管理サーバを立てる

GITなどのソースをVersion管理するサービスを立てる

https://www.scm-manager.org

java製 jettyだったかを使って動作している。

社内で運用するにはお手軽だと思う。

2016年9月21日水曜日

Windows.UI.ViewManagement UWPで使う方法

Windows.UI.ViewManagementは、Windows8のwindows phoneで使用できますが
UWPで使う場合は

Microsoft Desktop Extension SDK for Universal
Microsoft Mobile Extension SDK for Universal
Microsoft Team Extension SDK for Universal

を追加すればOK

2016年9月9日金曜日

Magic RIAを英語OSで実行する際の言語設定

Magic RIAを英語OSで実行すると、Shift-JISの文字化けが発生した件
以下のURLの手順を行うことで解消できます。

step11

Welcom screen and new user accounts setings画面が表示されたら、2つのチェックボックスを有効にして「OK」をクリックします

がポイントになりますので、忘れずに作業するようにしてください。

英語OSの日本語化
http://www.dashinc.co.jp/archives/2247

2016年8月30日火曜日

2016年8月25日木曜日

MAGIC RIAの接続時間変更

magic.iniの
ContextInactivityTimeoutの値を変更する

MAGIC XPAのRIAでAndroidを動作させる時、IISのMINE(.APK)を登録する必要がある

現象
MAGIC XPAのRIAでAndroidを動作せる場合
IISのMINEに .APKが未登録だと動作しない。

Android: IIS で apk ファイルを配布する

IIS で .apk ファイルを配布する際の設定覚え書き

mime type を登録しないとダメでした。

.apk
application/vnd.android.package-archive

2016年8月24日水曜日

プロジェクトは起動する前に配置する必要があります

エラー
プロジェクトは起動する前に配置する必要があります

VIsualStudio2015の上部メニューの「ビルド」> 「構成マネージャー」から、「プロジェクト名.UWP」に対応する「ビルド」と「配置」のチェックボックスにチェックを付ける

2016年8月12日金曜日

EntityFrameWorkで1件 取得する方法

Singleを使ってデータにアクセスします.
context.Products.Single(x => x.name == "Test"); 
 

2016年8月9日火曜日

Telerik WPF Gridview control filter で全角、半角を区別したくない

Telerik WPF Gridview control filter で全角、半角を区別したくない。

英語圏では、アクセントの区別と同じようです。
MS-SQL Serverで、Database Optionを CI_AIに変更したのですが

Telerikのfilterで、CI_ASに変わっているようで、"あ", ”ア"が、同一にならない。

解決方法は、telerikのblogに載っていたんだけど、オイラの脳ミソでは、キャパ不足

誰か、代わりにサンプル ソースを書いて~

Intuos Creative Stylus 2 品切れ

Intuos Creative Stylus 2が品切れ

アメリカから取り寄せすると、送料+5000円は、きつい。
wacomのstore shpでも、品切れ~
iPad Airを購入しても、Penが購入出来ないので、ヤフオクへ
ヤフオクで10000円、これで、娘の絵が描ける。

iPad Air整備品

iPad Air整備品を24回払い、月々1700円で購入
24回払いで、金利ゼロはうれしい。

2016年8月5日金曜日

ASP.NET MVCでサーバサイドからJavaScipt(クライアントサイド)に値を渡す方法

ASP.NET MVCでサーバサイドからJavaScipt(クライアントサイド)に値を渡す方法

cshtmlのJavaScriptにSession変数経由で値を渡す


<script type="text/javascript">
<!--
function disp(){

    if (window.confirm('キャンセルしますか?')) {
        // 「キャンセル」時の処理終了
        var vUrl = '@Session["url"]';
        alert (vUrl);
        location.href = vUrl;
    }
}
// -->
</script>

渡す値が文字なら '@Session["url"]'  前後をシングルコーテーションでくくる

渡す値が数字なら、@Session["url"]でok

元ネタ
http://stackoverflow.com/questions/20972880/access-session-variables-in-javascript

2016年7月30日土曜日

iPad2で wacomの最新stylus penが使えない

iPad2で wacomの最新stylus penが使えない

最新のbluetoothに対応していないからの理由なんだけど

iPadの大きさって、イラスト書くのに、丁度いいです。

miniだと小さすぎるし、Pro の13インチだとノートパソコンの方が良くなる。

個人的には、iPadでマウスが使えれば、即代替PCになるんだけどなぁ~

ASP.NET MVCで使っている Entty frameworkで テーブル名を変更したい。

ASP.NET MVCで Entity frameworkを使っている。
通常だと、model classを記述すると、code firstの為、コードから
DBのテーブルが作成出来る。
初期値だと、class名 + "s" でテーブルが作成される。

例: class user {}  なら、テーブル名は、users となる。

TableAttribute

クラス名に System.ComponentModel.DataAnnotations.Schema.TableAttribute クラスをクラスに対して属性として利用すると、実テーブル名称の設定が可能になります。
ここで注意したいのは、名前空間が前出の KeyAttribute や
 RequiredAttribute と異なっているので、更に using 指定が必要になります。
(もちろんフルネームで指定しても構いませんが・・・)

例えば次のように指定した場合
[Table("テーブル名を変更")]
public class Prefecture {
 
元ネタ 
http://increment-i.hateblo.jp/entry/entityframework/tableattribute

2016年7月1日金曜日

NetTalk IISで稼働するXMPPサーバ

NetTalk IISで稼働するXMPPサーバ
元はアラビア文字みたいだ(MS-SQLのDatabaseの基本文字がアラビアだった)

2016年5月24日火曜日

sumatrapdfの用紙でB5が認識しない

sumatraPDFでB5用紙をコマンドライン印刷すると何故かA4用紙になる。

sumatrapdfのコマンドライン印刷でB5が認識しない


理由
用紙サイズにB5が設定されていない。

sumatraPDFからForkした、muPDFには、B5用紙が設定されていた。

Windowsプリンターの部数変更 コマンドラインから変更出来る用に

// SetPrinterCopy.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <wtypes.h>
#include <Windows.h>

int main(int argc, char *argv[])
{
 //printf("引数の総個数 = %d\n", argc);
 //for (i = 0; i < argc; i++) {
 // printf("%d番目の引数 = %s\n", i, argv[i]);
 //}

 if (argc == 1) {
  printf("プリンター名が未設定です。\n");
  return 0;
 }

 //プリンター名をLPWSTRへ変換
 char* wStrC = argv[1];
 //char* wStrC = "DocuCentre-IV C5575";
 WCHAR wStrW[100];

 size_t wLen = 0;
 errno_t err = 0;

 err = mbstowcs_s(&wLen, wStrW, 100, wStrC, _TRUNCATE);
 LPWSTR ptr = wStrW;

 //親ウインドウハンドル取得
 HWND hWnd = NULL;
 GetParent(hWnd);

 //
 HGLOBAL hGlobal = NULL;
 HGLOBAL hGlobal2 = NULL;
 HANDLE hPrinter = NULL;
 DWORD dwNeeded = 0;
 PRINTER_INFO_2 *pi2 = NULL;
 PRINTER_DEFAULTS pd;
 BOOL bFlag;
 LONG lFlag;

 /* プリンタのハンドルをオープン
 (Windows NT の場合、SetPrinter にはすべての権限 (ALL_ACCESS) が必要になります)
 */

 ZeroMemory(&pd, sizeof(pd));
 pd.DesiredAccess = PRINTER_ALL_ACCESS;
 bFlag = OpenPrinter(ptr, &hPrinter, &pd);
 if (!bFlag || (hPrinter == NULL))
  goto ABORT;

 /* 最初の GetPrinter() で、PRINTER_INFO_2 全体を格納するのに必要なバッファの
 サイズを取得します。この呼び出しでは、FALSE が返ることに注意してください。
 */

 GetPrinter(hPrinter, 2, 0, 0, &dwNeeded);
 if (dwNeeded == 0)
  goto ABORT;

 /* PRINTER_INFO_2 に十分なスペースの確保 */

 hGlobal = GlobalAlloc(GHND, dwNeeded);
 if (hGlobal == NULL)
  goto ABORT;
 pi2 = (PRINTER_INFO_2 *)GlobalLock(hGlobal);
 if (pi2 == NULL)
  goto ABORT;

 /* 2 回目の GetPrinter() の呼び出しで、現在の設定値を取得します。
 アプリケーションでは必要な個所のみ変更することになります。
 */

 bFlag = GetPrinter(hPrinter, 2, (LPBYTE)pi2, dwNeeded, &dwNeeded);
 if (!bFlag)
  goto ABORT;

 /* もし GetPrinter で、DEVMODE が取得できなかった場合、DocumentProperties で
 取得する
 */

 if (!pi2->pDevMode)
 {
  dwNeeded = DocumentProperties(hWnd, hPrinter,
   ptr,
   NULL, NULL, 0);
  if (dwNeeded <= 0)
   goto ABORT;

  hGlobal2 = GlobalAlloc(GHND, dwNeeded);
  if (!hGlobal2)
   goto ABORT;
  pi2->pDevMode = (DEVMODE *)GlobalLock(hGlobal2);
  if (!pi2->pDevMode)
   goto ABORT;

  lFlag = DocumentProperties(hWnd, hPrinter,
   ptr,
   pi2->pDevMode, NULL,
   DM_OUT_BUFFER);
  if (lFlag != IDOK)
   goto ABORT;
 }

 /* DEVMODE の変更 */
 //pi2->pDevMode->dmFields = DM_ORIENTATION;
 //pi2->pDevMode->dmOrientation = DMORIENT_LANDSCAPE;

 pi2->pDevMode->dmCopies = atoi(argv[2]);  //部数の設定

 /* DEVMODE のデバイス依存部分のアップデート */
 lFlag = DocumentProperties(hWnd, hPrinter,
  ptr,
  pi2->pDevMode, pi2->pDevMode,
  DM_IN_BUFFER | DM_OUT_BUFFER);
 if (lFlag != IDOK)
  goto ABORT;

 /* プリンタ情報のアップデート */
 bFlag = SetPrinter(hPrinter, 2, (LPBYTE)pi2, 0);
 if (!bFlag)
  /* ドライバがサポートしていないか、変更の失敗 */
  goto ABORT;

 /* 後処理 */
ABORT:
 if (hGlobal2 != NULL) {
  if (pi2->pDevMode)
   GlobalUnlock(hGlobal2);
  GlobalFree(hGlobal2);
 }
 if (pi2 != NULL)
  GlobalUnlock(hGlobal);
 if (hGlobal != NULL)
  GlobalFree(hGlobal);
 if (hPrinter != NULL)
  ClosePrinter(hPrinter);

    return 0;
}

2016年5月20日金曜日

VBScriptでデフォルトプリンターを変更

Option Explicit

Dim oWNetwork

Set oWNetwork = CreateObject("WScript.Network")
oWNetwork.SetDefaultPrinter "RICOH MP C2503 JPN"

Set oWNetwork = Nothing

VBScriptでリモートディスクトップ接続(RDP)

Option Explicit

Dim oWShell

Set oWShell=Wscript.CreateObject("Wscript.Shell")
oWShell.Run "MSTSC C:\RD_Connection.rdp", 3, False

Set oWShell = Nothing

2016年5月18日水曜日

Windows10で .NET Framework 3.5をofflineでinstallする方法

Windows10で .NET Framework 3.5をofflineでinstallする方法

元ネタ
http://winaero.com/blog/offline-install-of-net-framework-3-5-in-windows-10-using-dism/

windows10のCDをD ドライブにマウントしておく

cmd(管理者モード)で以下のコマンドを実行する

Dism /online /enable-feature /featurename:NetFX3 /All /Source:D:\sources\sxs /LimitAccess


2016年4月26日火曜日

「ハーバード大学の図書館の壁に 書かれている言葉」

「ハーバード大学の図書館の壁に書かれている言葉」

1. 今居眠りすれば、あなたは夢をみる。今学習すれば、あなたは夢が叶う。
2. あなたが無駄にした今日は、どれだけの人が願っても叶わなかった未来である。
3. 物事に取りかかるべき一番早い時は、あなたが「遅かった」と感じた瞬間である。
4. 今日やるほうが、明日やるよりも何倍も良い。
5. 勉強の苦しみは一瞬のものだが、勉強しなかった苦しみは一生続く。
6. 勉強するのに足りないのは時間ではない。努力だ。
7. 幸福には順位はないが、成功には順位がある。 
8. 学習は人生の全てではないが、人生の一部として続くものである。
9. 苦しみが避けられないのであれば、むしろそれを楽しめ。
10. 人より早く起き、人より努力して、初めて成功の味を真に噛みしめる事ができる。
11. 怠惰な人が成功する事は決してない、
真に成功を収める者は徹底した自己管理と忍耐力を備えた者である。
12. 時間は、一瞬で過ぎていく。
13. 今の涎は将来の涙となる。
14. 犬の様に学び、紳士の様に遊べ。 
15. 今日歩くのを止めれば、明日からは走るしかない。
16. 一番現実的な人は、自分の未来に投資する。
17. 教育の優劣が収入の優劣。
18. 過ぎ去った今日は二度と帰ってこない。
19. 今この瞬間も相手は読書をして力を身につけている。
20. 苦しんでこそはじめて進める。

2016年4月21日木曜日

XMPP C# Library Sharp.XMPP

XMPP C# Library で S22.XMPPを使用してたが
Sharp.XMPPが、S22.XMPPのFork版だった。

Sharp.XMPPがForkしたのは、S22.XMPPが更新されないからだそうな。
ライセンスは MIT

後、Clientに Chat(Windows Appに登録されている)

GitHubにソースが公開されていた。
ライセンスは MIT


2016年4月20日水曜日

c# OracleテーブルをCSVで出力

OracleテーブルをCSVで出力
C#で作成

using System;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Windows;
using System.IO;
using Oracle.DataAccess.Client;

namespace Ora2CSV
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow() {
            InitializeComponent();
        }

        private void button_Click(object sender, RoutedEventArgs e) {
            using(var conn = new OracleConnection(ConfigurationManager.ConnectionStrings["LogisConnStr"].ToString())) {

                conn.Open();

                //データ取得
                var cmd = new OracleCommand();
                cmd.Connection = conn;
                cmd.CommandText = "SELECT * FROM " + txtTable.Text;

                var dr = cmd.ExecuteReader();
                var Enc = Encoding.GetEncoding("Shift-JIS");
                var wr = new StreamWriter(@"c:\temp\" + txtTable.Text + ".csv", false, Enc);

                string strRec = "";

                for (int i = 0; i < dr.FieldCount - 1; i++) {
                    strRec = strRec + @"""" + dr.GetName(i).ToString() + @"""" + ",";
                }

                //行末の[,]を削除
                strRec = strRec.Remove(strRec.Length - 1, 1);

                //ヘッダ1行出力
                wr.WriteLine(strRec);

                //データ行
                while(dr.Read()) {
                    strRec = "";

                    for (int i = 0; i < dr.FieldCount - 1; i++) {

                        string vName = dr.GetName(i);
                        string vType = dr.GetProviderSpecificFieldType(i).ToString();

                        if (dr.GetProviderSpecificFieldType(i).ToString() == "Oracle.DataAccess.Types.OracleDecimal") {
                            strRec = strRec + dr[i].ToString() + ",";
                        }
                        else {
                            strRec = strRec + @"""" + dr[i].ToString() + @"""" + ",";
                        }
                    }

                    //行末の[,]を削除
                    strRec = strRec.Remove(strRec.Length - 1, 1);

                    //データ1行出力
                    wr.WriteLine(strRec);
                }

                wr.Close();
                conn.Close();

                MessageBox.Show("Complete!");
            }
        }
    }
}

2016年4月18日月曜日

XMPP コンタクト一覧の取得

XMPP コンタクト一覧の取得

client.roster()


XMPP C# オープンソースライブラリが揃っている

XMPP
C# オープンソースライブラリが揃っている

nu-getで S22.XMPP ライセンスはMIT

気軽に社内IMが作成出来る

2016年4月14日木曜日

Telerik WPF RadGridViewのFilter DIstince の非表示

Telerik WPF RadGridViewのFilter DIstince の非表示

        private void GridView1_FilterOperatorsLoading(object sender, Telerik.Windows.Controls.GridView.FilterOperatorsLoadingEventArgs e) {

            //選択条件を削除
            e.AvailableOperators.Remove(Telerik.Windows.Data.FilterOperator.IsNull);
            e.AvailableOperators.Remove(Telerik.Windows.Data.FilterOperator.IsNotNull);

            e.AvailableOperators.Remove(Telerik.Windows.Data.FilterOperator.IsEmpty);
            e.AvailableOperators.Remove(Telerik.Windows.Data.FilterOperator.IsNotEmpty);

            //カラム内容の選択を非表示
            e.Column.ShowDistinctFilters = false;

        }

Telerik WPF RadGridView のFilterすべて初期化

Telerik WPF RadGridView のFilterすべて初期化

this.radGridView.FilterDescriptors.SuspendNotifications();
foreach (Telerik.Windows.Controls.GridViewColumn column in this.radGridView.Columns)
{
    column.ClearFilters();
}
this.radGridView.FilterDescriptors.ResumeNotifications();

2016年4月13日水曜日

社内用にメッセンジャーを構築

社内用にメッセンジャーを構築

今までは、社内用に、IP Messageを使用していた。

最近、ルーターをFortiGateの最新に変更したら、ルータのセキュリティーポリシーが
厳しくなって、ブロードキャストが無効になるそうな。

東京支店(同一サブネット内)は、再表示OKですが
各支店は別サブネットで構築しているので、IP Messangeの再表示されない状態になりました。

フリーでメッセンジャーってあるのかな~と調べたら
XMPPが有名ってことが判明、早速、構築してみました。

サーバは、openfire、クライアントはSparkで十分

javaで構築されているので、OS関係なし DBは、MySQLにすれば、無料で
メッセージシsテムが構築出来ました。

ソースおよびシステムを公開していることに感謝致します。


Pervasive(Btrieve) Error 46の対応

Pervasive(Btrieve) Error 46の対応

公式ページには
エラー 46    
 要求されたファイルへのアクセスは拒否されました。

ファイルをつかんでいるからが原因なら、Pervasiveサーバを再起動しましたが
サーバ再起動しても同じエラーが発生した。

Pervasiveのファイルバージョンが古いと発生するようです。
対象ファイルが Ver8、Pervasive Serverが v10でした。
対象ファイルを Ver 9.5にリビルドしたら、問題無し

これって、どこかにFAQを記述して欲しい

2016年3月23日水曜日

Citrixをインストール後 RemoteAppが起動しない

Citrixをインストール後 RemoteAppが起動しない

ReceiverでCitrixの公開アプリは起動するが
RDWebからのRemoteAppは起動しなくなった。

http://support.citrix.com/article/CTX124784

CTX124784

管理者以外のユーザーがXenApp 6.0でRDPおよびICA(直接)デスクトップ接続を行った場合起動に失敗する


だそうです。

ポリシーを変更することで、RemoteAppも起動するようになりました。

解決方法
以下の手順に従って、Delivery ServicesコンソールでICAのデフォルト[Unfiltered]ユーザーポリシー設定を変更します。
  1. [ポリシー]をクリックします。
  2. [ユーザー]タブをクリックします(デフォルトのUnfilteredポリシーを確認できます)。
  3. 画面下部で[設定]タブをクリックしてデフォルトのポリシー設定にアクセスします。
  4. [カテゴリ]ウィンドウで[ICA]をクリックします。
管理者以外のユーザーのサーバーデスクトップへの接続を許可する方法:
  1. [デスクトップの起動]の[追加]リンクをクリックします。
  2. [許可]を選択して[OK]をクリックします。
管理者以外のユーザーがクライアント接続中にすべてのアプリケーションを起動できるように許可する方法:
  1. [クライアント接続での非公開アプリケーションの起動]の[Add]リンクをクリックします。
  2. [有効]を選択して[OK]をクリックします。

2016年3月7日月曜日

特別な道具は必要なし! 自分でハーゲンダッツ並みのアイスクリームを作る方法

この記事は2010年10月10日公開のものを再掲載しています。
アイスクリームって好きな人は多いけど、自分で作ってる人はあんまりいませんよね。でも、自宅にある道具だけでハーゲンダッツ並みのプレミアムアイスが作れたらいいと思いませんか?
ということで、SeriousEatsが何回も試作に試作を重ね、たどり着いた濃厚で美味しいアイスの作り方をご紹介したいと思います。
<材料>
卵の黄身(Lサイズ)         8個分
砂糖                  250g
バニラエッセンス           小さじ 2
コーシャーソルト(塩)        小さじ 1/4
エバミルク              340g
生クリーム(脂肪分高め48%ぐらい) 500cc
<作り方>
(1)大きなボールに黄身、砂糖、バニラエッセンス、塩を入れて約5分ほど泡立てます。白っぽくなり、泡だて気から生地を落とした時に線が残るようになったらOK。
(2)エバミルクを子鍋に入れ、混ぜながら沸騰させます。
(3)(1)の卵液に沸騰したエバミルクを少しづつ加えます(常に混ぜててください)。
(4)混ざったら子鍋に戻し、カスタードみたいにトロトロになるまで焦げないように弱火で加熱します。このとき火が強すぎたり、加熱しすぎると卵が固まり過ぎてスクランブルエッグみたいになってしまうので注意。
(5)冷まします。
(6)生クリームの半量(250cc)を2倍の量になるぐらい泡だてたら、(5)に生クリームを加え混ぜます。織り込むようにして混ぜるのがポイント。
(7)ダマが無くなったら、製氷皿に入れて約4時間冷凍します。
© ギズモード・ジャパン 提供
(8)凍ったアイスクリームと残りの生クリーム(250cc)をフードプロセッサーに入れ、滑らかになるまで(約30秒ほど)撹拌します。
© ギズモード・ジャパン 提供
(9)容器に移して、更に4時間凍らせれば出来上がりです。
Serious Eatsでは、この完ぺきなアイスクリームのレシピにたどりつくまで、何度も何度も試作したようです。一番最初は、卵の黄身とバニラエッセンス、お砂糖を混ぜたものを凍らせてみたものの、アイスキャンディーっぽすぎてボツ。その後、泡だて具合や冷却方法などを模索して、最終的にオバーランが24%のアイスを作ることに成功したんです。
オーバーランとは、アイスクリームに含まれる空気の含有率をさします。ハーゲンダッツは25%、もう少し安い一般的なアイスは94%程度(低い方が濃厚な味わいになる)。なので、オーバーラン24%のクリーミーで濃厚な高級アイス風アイス作りのポイントを発見し、成功した時は「ついに見つけた!」と感動したようですよ。
私たちは、肉や魚を凍らせる時、素材が急速に凍れば凍るほど、氷の結晶が形成される際に細胞のダメージも少ないことを知っていました。なので、アイスクリームが凍るスピードを速くすれば、結晶化を最小にとどめることができるんじゃないか?と思ったんです。そこで、「液体をより早く凍らせるようにデザインされたものがある」と模索して見つけたのが製氷皿でした。

2016年2月25日木曜日

XenApp 7.8

XenApp 7.8をインストールしてみた。
XenApp 7.6でインストール時に凄く苦労したんだけど
7.8では、あっさりとインストール出来た。

http://servername/Citrix/Store/PNAgent/config.xml


2016年2月23日火曜日

IP Messanger for C#

IP MessangerがC#で書かれていた。

http://www.codeproject.com/Articles/61517/WPF-Version-of-IPMessager

IP MessangerがC++で書かれているので、C#で焼き直す必要は感じないのだが
自分がC++を読めないので、C#で書かれていると、読みやすい。

文字コードに、Shift_Jisが無かったので追加したらPC一覧も正しく表示された。

2016年2月20日土曜日

Citrixの端末設定用urlは?

Citrixの端末設定用urlは?

http://[ Server-IP]/Citrix/PNAgent/config.xml


Citrix Receiver の接続をhttpにしたい

Citrix Receiver の接続をhttpにしたい

初期値では、httpsのセキュア接続しか有効にしていない。

以下のurlに説明がある
http://support.citrix.com/article/CTX134341

  1. Click Start and enter regedit


  2. For 64-bit Windows client machines, navigate to: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\
    For 32-bit Windows client machines, navigate to: HKEY_LOCAL_MACHINE\SOFTWARE \Citrix\

  3. In Dazzle, set AllowAddStore value to A to allow users to add non-secure stores.
    Or, set AllowSavePwd value to A to allow users to save their passwords for non-secure stores.

  4. To add a store that is configured in StoreFront with a TransportType of HTTP, add the following value in AuthManager:
    Name: ConnectionSecurityMode
    Value Type: REG_SZ
    Value: Any

 日本語解説
1.regeditを起動

2. OSによって、参照する場所が違う
     64bit : HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\
     32bit : HKEY_LOCAL_MACHINE\SOFTWARE \Citrix\

3.CItrix配下のDazzleフォルダ内に、AllowAddStoreのキーがある
  この値を A に更新する

4. 同じCItrix配下のDazzleフォルダ内に、今度は 文字列を追加する
  追加する文字列は以下の情報
  名前:ConnectionSecurityMode
  値 : Any

以下のようになればOK