Windows版の4D Serverは,サービスとして登録することができます。
サービスのプロパティで,「ログイン」で管理者権限のあるアカウントを設定し,アプリケーションが自動的に起動するようにサービスを設定すれば,コンピューターにユーザーが誰もログインしていなくても,4D Serverが起動するようになります。
そのようなサーバーを自動アップデートを実行した場合,アップデートの入れ替えには成功しますが,以前のバージョンが~app~_old0001
のような名前の一時的なフォルダーにそのまま残された状態になります。これは仕様です。
自動アップデートの仕組みは,内部的に「ごみ箱に移動」コマンドを実行しています。アップデートを取り消したい場合,以前のバージョンにアプリケーションを戻すことができるようにするためです。この操作は,ログインユーザーのセッションが必要なハイレベルコマンドであるため,条件によっては失敗することがあります。「ごみ箱に移動」コマンドが完了できなかった場合,エラーコードの1018 (PW32)
および661 (xbox)
がアップデーターのログファイルに記録されます。
17r3の新しいビルド(232314)が1月18日にリリースされました。以前のビルド(231689)は取り下げられています。
新しいビルドは,17r2で追加された4D Write Proインタフェースウィジェットが内部的にコールしているコンポーネントメソッドWP_SwichToolbar
の名称がWP SwitchToolbar
に変更されています(ACI0099141)。標準オブジェクトライブラリから4D Write Proエリア(ツールバー付き)ウィジェットを17r2のフォームにコピーしたのであれば,オブジェクトメソッドに記述されているメソッド名を17r3で修正する必要があります。
以前のビルドは,コンポーネントメソッドのスペルミス(Swich: “t”が抜けている)が一方的に修正されていたため,4D Write Proエリア(ツールバー付き)ウィジェットを17r3でフォームにコピーした場合,シンタックスエラーになりました(17r2で作られたフォームはそのまま使用することができました)。
macOSは,ファイルやフォルダーのパスをPOSIX形式で管理しています。スラッシュ(/
)はフォルダー区切り記号として予約されているので,ファイルやフォルダーの名称に使用することはできません。ファイルやフォルダーのパスをHFS形式で管理するアプリケーション(Finder,32ビット版の4Dなど)は,スラッシュの使用が許されているような印象を与えますが,これはアプリケーションが自動的にスラッシュをコロン(:
)に変換し,HFSの区切り文字であるコロンをスラッシュに変換しているためです。
4Dの64ビット版は,Mac OSのレガシーなAPIではなく,macOSのPOSIX APIを全面的に使用しています。古いAPIの使用を中止し,標準的なAPIに移行したことは,アプリケーションを将来のOSアップデートに備えさせただけでなく,ファイルの読み書き速度と全体的なパフォーマンスの引き上げに役立ちました。一方,これまでのようにスラッシュ記号をファイルやフォルダーの名称に使用することはできません。
すでにスラッシュ(実体はコロン)が使用されているファイルやフォルダーのパスは,引き続き取得することができます。ただし,初期のリリースでは,下記のケースで問題があるかもしれません。
DOCUMENT LIST
およびSelect document
ファイル/フォルダー名の冒頭にあるスラッシュが省略されます(ACI0097745)
ファイル/フォルダー名の中間にあるスラッシュがコロンに変換され,区切り文字との見分けがつきません(ACI0098921)
Convert path POSIX to system
注記: Convert path POSIX to system
のドキュメントには,コマンドが絶対パスを受け入れると明記されており,相対パスを渡した場合の処理は定義されていません。振る舞いは仕様です。
4D Writeドキュメントには,フィールド・変数・メソッド・関数などのフォーミュラを挿入することができます。想定されているのは,カレントセレクションから差し込み文書を出力したり,日付や時刻などの文字列を動的に挿入することでしたが,文書にQUERY
を埋め込むことにより,ドキュメントの表示や印刷と同時にクエリが実行されるようにする,といった用途にも利用することができました。しかし,そのようなドキュメントを4D Write Proに変換した場合,フォーミュラが埋め込まれた箇所に「未定義」という文字列が表示されるかもしれません。
4D Write Proでは,セキュリティのルールが見直され,ドキュメントにコマンドを挿入できるコマンドや関数が限定されていますが,データベース設定で制限を解除すれば,これまでどおりQUERY
も挿入することができます。
参考:4D Write Pro ドキュメントに含める式の制限
QUERY
は値を返す関数ではなく,コマンドなので,実行後,ドキュメントには「未定義」という文字列が挿入されます。仕様どおりの動作ではありますが,4D Writeからのスムーズな移行をサポートするため,値を返さないフォーミュラは空の文字列として評価される,という仕様に改定されました。改定のビルド番号は,リリースノートで確認してください。
v16でリニューアルされた64ビット版のキャッシュマネージャーは,オペレーションシステムのメモリ管理を積極的に活用しています。オブジェクト型のローカル変数に収容されていたオブジェクトは,メソッドを終了し,その変数が破棄されるときに解放されます。オペレーションシステムのメモリマネージャーは,解放されたばかりメモリを別のオブジェクトに割り当てるためにしばらく保持することがあるので,ランタイムエクスプローラーに表示される使用中の物理メモリサイズがすぐには減らないとしても,必ずしもメモリーリークの証拠ではありません。
デスクトップ版のWindows 10には,電力を節約するための設定(電源とスリープの設定/追加の電源設定)が用意されており,デフォルトの電源プランは,「バランス」となっています。サーバー版のWindows 2008-2016もそうです。「バランス」電源プランが有効されている場合,4D Serverは最高でも30-50%ほどのパフォーマンスに抑えられます。5%程度まで低下することもあります。対照的に,プランを「高パフォーマンス」に設定すれば,CPUの能力を常に100%発揮することができ,バックアップに要する時間やシーケンシャルクエリの速度が明らかに向上します。
slow-performance-on-windows-server-when-using-the-balanced-power-plan
省電力設定が有効になると,CPUはクロック周波数が引き下げられ,ある程度の時間,ある程度のリクエストが続かない限り,ずっと低速モードで動作します。CPUだけでなく,USBポートやネットワークインタフェースも省エネルギーモードに切り替わったり,スリープ状態になることさえあるかもしれません。「バランス」のような省電力指向の電源プランでデータベースを運用することには,あまりメリットがないようです。
WP New
には,4D Write Proや4D Writeで作成した文書だけでなく,4Dのスタイル付きテキスト(4D HTMLソーステキスト)も渡すことができますが,HTML全般のインポートが保証されているわけではないことに留意する必要があります。コマンドがサポートしているのはXHTML,つまり,XMLに準拠したHTMLだけです。XMLのルールに沿っていないHTMLは,インポートできないかもしれません。
たとえば,HTMLでは,a
タグのsrc
属性に&
のような文字がそのまま記述されていることがあります。XMLのシンタックスによれば,属性値は&
のようにエスケープされているべきなので,そのようなHTMLはWP New
でインポートすることができません。これは,4D Write Pro(XHTML)の仕様です。
17r3(32および64ビット版)の4D ODBC DriverをWindows 7 SP1にインストールした後,データソース名を登録しようとすると,エラー126
が返されることがあります。これは,4D ODBC Driverが新しいWindows SDKでビルドされているためです。
Windows 7をアップデート(KB2999226
)することにより,問題を解消することができます。Windows 10,あるいは17r2以前のバージョンでは問題ありません。
近日中にリリース予定の17.1および17r3(Mac版)は,Xcode 10.1およびmacOS 10.14 SDKがコンパイルに使用されています。これにより,macOS Mojaveでウィンドウリサイズ時に発生する『ちらつき』現象が解消されています。
加えて,まもなくベータ版が公開される17r4では,主要なフォームオブジェクトが従来のHITheme
APIからNSCell
に変更され,システム標準のダークモードに対応しています。
システム標準のAPIで作り替えられたのは,リストボックス・階層ポップアップメニュー・ポップアップドロップダウンリストおよびコンボボックス(標準サイズを超えるものを除く)・ボタン・ラジオボタン・チェックボックス・タブコントロール・スプリッター・ルーラー・進捗インジケーター(非同期とプログレスバーを除く)ウィンドウ背景色・テキスト入力全般・四角形の各フォームオブジェクトです。グループボックスとスタティックテキストについては,現時点で対応してません。
フォントカラーは「自動」に設定されている場合にのみ,システムのテーマを継承します。なお,テスト目的のため,macOS Mojaveでは,caps lock
キーを有効にすることにより,新旧のAPIを切り替えることができるようになっています。
注記: 17r4をダークモードに対応させるためには,64ビット版アプリケーションパッケージ内のInfo.plist
ファイルでNSRequiresAquaSystemAppearance
キーをNO
に設定する必要があります。
Milliseconds の例題と説明文が改定されています。経過時間を計測したい場合,関数から返される値を比較するのではなく,差を計算するべきである点が強調されています。値は約24日毎に符号が反転するからです。
Milliseconds
は,マシン(アプリケーションではありません)が起動されてから経過された時間をミリ秒単位で返します。しばしば時間の計測に使用される関数ですが,符号付き32ビット整数(C_LONGINT
)が使用されているため,2147483647
ミリ秒,つまり約24.86
日毎に返される値の符号が反転することに留意しなければなりません。
経過時間(たとえばプロセスの停止時間)を計測するような場合,Milliseconds+$timeout
のような加算式でタイムアウト時間を計算するべきではありません。そうではなく,必ずMilliseconds
の差と閾値を比較するようにしてください。
たとえば,MAXLONG (2147483647)
に1
を加算すると,-2147483648
になります。比較演算で処理した場合,時間が過去に戻ったような扱いになり,(24日後まで)タイムアウト条件が満たされません。対照的に,値の差を計算すれば,つまり-2147483648-MAXLONG
を求めれば,(整数の符号がまた反転して)1
が返されます。
ドキュメントは17r3で改定されていますが,この情報は過去すべてのバージョンで有効です。
If(Locked([Table_1]))
$starttime:=Milliseconds
Repeat
DELAY PROCESS(Current process;15)
LOAD RECORD([Table_1])
$waittime:=Milliseconds-$starttime
Until(Not(Locked([Table_1]))|(Process aborted)|($waittime>5000)) //最大で5秒待つ
End if
Open window(100;100;300;200;0;"Chronometer")
$vhTimeStart:=Current time
$vlTicksStart:=Tickcount
$vrMillisecondsStart:=Milliseconds
Repeat
GOTO XY(2;1)
MESSAGE("時間...........:"+String(Current time-$vhTimeStart))
GOTO XY(2;3)
MESSAGE("Tick..........:"+String(Tickcount-$vlTicksStart))
GOTO XY(2;5)
MESSAGE("ミリ秒...:"+String(Milliseconds-$vrMillisecondsStart))
Until((Current time-$vhTimeStart)>=?00:01:00?)
CLOSE WINDOW