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 で、目当てのコントロールが取得できます。