サポート日記2」カテゴリーアーカイブ

4D v16.3 は、スリープさせるとフリーズ

MacBookPro 13″ space gray、OSはHigh Sierraで4D v16を使っているときの注意。

v15.xまたはv16.2までは、クライアント/サーバ環境で4D Serverに接続しているクライアントマシンをスリープさせると、クライアントの4Dの接続が切れる、という仕様がありました。これは以前からの仕様。

で、v16.3はクライアント/サーバ環境でもスタンドアロンの環境でも、マシンをスリープさせると、4Dがフリーズする。このフリーズが結構厄介で、ウチではMacBookProに外付けモニタを使っていて、2ヶ所を移動しながら仕事をしているため、頻繁にフリーズする。外付けモニタを使っているからマシンをずっと閉じてるからかも。

電車の中で仕事していると4Dを終了させる余裕がないときもある。

さらにこの場合、クライアントマシンの4Dを強制終了させても4D Serverの接続数は減らない。それで4D Serverも再起動が必要になる、というおまけつき。

MacBookPro1台でサーバとクライアントを実行していても起こる。

まだデータとかプログラムが失われるという被害は確認できていない。が、不便なことになった。ノートパソコンのフタを閉めるときは、4D v16.3を終了させることを忘れないこと。

ちなみに、接続はサーバは有線、クライアントのMacBookProは無線LANです。

Mac mini High Sierraで4D v15 Serverのスリープ対策

光回線にグローバル固定IPを割り当てて、ルータによってアクセス制御することにより実現するプライベートネットワーク上で、4D v15 Serverを運用しています。サーバマシンはMac mini、OSはHigh Sierraです。

遠隔地のサーバは動いているかどうか確認するにはMacではVNC(画面共有)を使って確認します。

スリープする

以前からmacOSはデフォルトで「スリープする」に設定されています。システム環境設定の省エネルギーでディスプレイをオフに「しない」、ディスプレイがオフのときにコンピュータを自動でスリープさせない、にしていました。

解決方法

これだけでは不足でした。次の二つやりました。

・スクリーンセーバをオフにする

・アカウントのログインオプションで、4Dをインストールした管理者で自動ログインする

これで毎朝、画面共有でログインして、サーバをおこす必要がなくなりました。

4D コマンドの定義に移動 オンラインヘルプ

4D コマンドの定義に移動 オンラインヘルプ

4Dのメソッドエディタには、オプションキーを押しながらマウスカーソルをコマンド名の上に置くと、コマンド名がリンク文字列のように変化して、クリックするとリファレンスマニュアルがブラウザで表示される、という機能がある。

最近、コマンドの定義に移動しない。定義が表示されるコマンドもあるけど、いつもv13のリファレンスマニュアルが表示される、なぜかなと。

コマンドの定義に移動する先は、4Dメニューの【環境設定】の「一般」の「Webサイト」という項目に記述されている。次のようになってた。

http://doc.4d.com/4dv13/help/command/ja/

v16の場合、正しくは次。

http://doc.4d.com/4dv16/help/command/ja/

http://doc.4d.com/4Dv16R5/4D/16-R5/General-Page.300-3509135.ja.html#102865

http://doc.4d.com/4Dv15/4D/15.4/Writing-a-method.300-3285560.ja.html

※ 注意 ※

コマンドを選択したり、キャレットをコマンド名のどこかにおいて右クリックしても同様の動きになる。この場合、コマンド名をすべて選択しているか、または何も選択していないでキャレットが挿入されているか、のどちらかでないとコマンドを正しく認識しない。中途半端にコマンドの一部の文字が選択されているとブラウザが表示されても、目的のコマンドのページに移動しないので注意。

※ 注意 ※

4D のマニュアルは毎週更新されているそうです。このブログの情報も最新ではないかもしれません。4Dドキュメントセンターで確認することをお勧めします。

Dezarie / Midnite

@ Santa Cruz

—–
バージン諸島のSt Croix出身、バンドは同じくバージン諸島出身のMidnite。ベースのRon BenjaminはRoots radicsのFlabba holtに影響を受けたとされている。ギターはBingy Bunnyというよりはchinaっぽくて、ドラムはサンタ+ホースマウス+カールトン・バレットのようで、もう採光です。

個人的にはこれが好き

01 – love in your meditation – 00:00 02 – download de criminal – 04:43 03 – worthy was she – 07:31 04 – not who we are to be – 11:36 05 – african heart lionheart – 16:23 06 – return to sender – 21:23 07 – stronger – 24:32 08 – keep praising jah – 29:10 09 – how great thou art – 32:38 10 – constructing destruction – 37:13 11 – things wont be the same – 41:09 12 – living ones – 45:07
CDを買おうとしたら在庫切れ

他にこんなのもGood

1 Gone Down 00:00
2 Poverty 03:50
3 Not One Penny 07:07
4 Strengthen Your Mind 11:16
5 Law Fe De Outlaw 15:26
6 Justice 19:08
7 Gracious Mama Africa 22:36
8 Exhalt 26:47
9 Mother And Child 30:40
10 Travelers 34:21
11 Slew Dem An Done 38:30
12 Judgement Come 41:24

Recorded At – Afrikan Roots Lab
Engineered At – Afrikan Roots Lab
Produced At – Afrikan Roots Lab
Copyright (c) – Afrikan Roots Lab
Phonographic Copyright (p) – Afrikan Roots Lab

Artwork [Cover Art] – Adrienne Brown
Bass – Phillip Merchant
Design [Cover Design] – Shenneth Canegata
Drums – Dion Hopkins
Executive Producer – Ron Benjamin
Keyboards, Guitar, Percussion, Backing Vocals – Ron Benjamin
Lead Guitar – Abijah Hicks
Producer, Recorded By, Engineer – Midnite
Written-By, Performer – Dezarie

4Dの親コンポーネントのテーブルとフィールドをポインタで参照する

親コンポーネントのテーブルとフィールドをポインタで参照する

テーブルに値を保存するような処理をコンポーネント化する場合は、ホストデータベースのテーブルをコンポーネント側で参照するのにポインタを使います。自分のテーブルではないためテーブル名を記述することができないからです。4Dのデザインリファレンスに「ホストデータベースとコンポーネントはポインターを使用して通信を行うことができます。」とあります。

http://doc.4d.com/4Dv16/4D/16.3/Interaction-between-components-and-host-databases.300-3670869.ja.html

ここではホストデータベースのテーブルを「親のテーブル」と呼びます。親のテーブルはポインターで参照します。次のように記述します。これはHBデータベースのIDと名前を配列に取得する例です。まずポインタ変数をプロセス変数として宣言、テーブル名とフィールド名のポインタを取得します。

  //HB_DefInit
  //20171228 wat
  //テーブルとフィールドのポインタをプロセス変数に取得
  //本文 テーブル

  //テーブル
C_POINTER(vHBptr)
vHBptr:=JCL_tbl_GetPtr_byName ("HONBUN")

  //フィールド
C_POINTER(vHB_IDptr)
C_POINTER(vHB_NAMEptr)
vHB_IDptr:=JCL_tbl_GetFldPtr (vHBptr;"HB_ID")
vHB_NAMEptr:=JCL_tbl_GetFldPtr (vHBptr;"HB_NAME")

次にそれぞれのテーブルから値を取得、プロセス変数の配列に格納しておきます。

  //HB_cache_make
  //20171228 wat
  //本文 テーブルをキャシュ配列に取得

ARRAY LONGINT(vAryHB_ID;0)
ARRAY TEXT(vAryHB_NAME;0)

READ ONLY(vHBptr->)
ALL RECORDS(vHBptr->)
SELECTION TO ARRAY(vHB_IDptr->;varyHB_ID)
SELECTION TO ARRAY(vHB_NAMEptr->;vAryHB_NAME)

このようにして配列にキャッシュしておき、あとでHB_cache_findを使って参照します。

$hb_id:=HB_cache_find ($name)

HB_cache_findは次のように記述しておきます。

  //HB_cache_find
  //20171228 wat
  // hbのキャッシュからファイル名を探して、あればIDを返す。なければゼロ

C_TEXT($1;$filename)
$filename:=$1
C_LONGINT($0;$hb_id)
$hb_id:=0
C_LONGINT($index)

$index:=Find in array(vAryHB_NAME;$filename)
If ($index>0)
 $hb_id:=vAryHB_ID{$index}
End if 

$0:=$hb_id

このようにして親テーブルの値を参照します。保存するときも同じ要領でいけます。たとえば次のように記述します。

CREATE RECORD(vMDptr->)
vMD_NAMAEptr->:=""
vMD_IDptr->:=$md_id
SAVE RECORD(vMDptr->)

コンポーネントから親テーブルを参照する場合は、上記のような記述をしておけば内部テーブルと同様にデータを保存することができます。