2019年3月12日火曜日

DPI change test (MFC dialog base applicatoin)

These codes are the result of try and error.
It means not so good codes.
SaveAppLayout and UpdateLayoutForDPI function should not be callback function.

Add to OnInitdialog
// save current size
 SaveAppLayout(this->m_hWnd,(LPARAM)this);
 // Resize child windows
// ::EnumChildWindows(this->m_hWnd, SaveAppLayout, (LPARAM)this); // Not necessary



Add to Header

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();

 DECLARE_MESSAGE_MAP()
 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);

Add to Dlg.cpp

BOOL CALLBACK SaveAppLayout(HWND hWnd,LPARAM lParam)
{
 CDPIChangeTestDlg* pParent = (CDPIChangeTestDlg*)lParam;
 int iDpi = GetDpiForWindow(hWnd);

 // Get current size(at 96 DPI base)
 CRect rect;
 ::GetWindowRect(hWnd, &rect);
 pParent->mResMap[hWnd] = rect;

 // recalc size
 double rate = iDpi / 96;
 rect.left *= rate;
 rect.top *= rate;
 rect.right  *= rate;
 rect.bottom *= rate;

 // resize
 SetWindowPos(hWnd, hWnd, rect.left, rect.top, rect.Width(), rect.Height(), SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE);

 return TRUE;
}

BOOL CALLBACK UpdateLayoutForDpi(HWND hWnd, LPARAM lParam)
{
 CDPIChangeTestDlg* pParent = (CDPIChangeTestDlg*)lParam;

 try {
  int iDpi = GetDpiForWindow(hWnd);
  // calc current DPI and rate from 96 DPI
  double rate = iDpi / 96;
  CRect rect = pParent->mResMap[hWnd];

  int dpiScaledX = rect.left / rate;
  int dpiScaledY = rect.top / rate;
  int dpiScaledWidth = rect.Width() / rate;
  int dpiScaledHeight = rect.Height() / rate;

  // resize
  SetWindowPos(hWnd, hWnd, dpiScaledX, dpiScaledY, dpiScaledWidth, dpiScaledHeight, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE);
 }
 catch (...) {
  return FALSE;
 }
 return TRUE;
}

void CDPIChangeTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialogEx::OnSysCommand(nID, lParam);
 }
}

LRESULT CDPIChangeTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 
 switch (message) {
 case WM_DPICHANGED:
 {
  // Resize
  UpdateLayoutForDpi(this->m_hWnd, (LPARAM)this);
  // Resize Child Windows
//  ::EnumChildWindows(this->m_hWnd, UpdateLayoutForDpi, (LPARAM)this); // Not necessary
 }
 break;

 }
 return CDialogEx::WindowProc(message, wParam, lParam);
}


download all source here

2018年12月8日土曜日

filament case

I made filament case for 3D printer.
Parts bellow.
https://www.thingiverse.com/thing:569333
https://www.thingiverse.com/thing:1750875









2018年8月26日日曜日

C#+ NLua (Byte Array)

I wanted to use Byte Array between Lua Script and C#.
I read many site, but I couldn't get solution,
I visit NLua site today and it was description of using dotnet object from Lua Script.
So I finally get solution as following.

C# code.


_lua = new NLua.Lua();
_lua.LoadCLRPackage();
_lua.RegisterFunction("SendData", this, this.GetType().GetMethod("SendData"));


public void SendData(object dat)
{
    byte[] byteData = (byte[])data;
    // you can use ByteData from Lua Script
}
  

Lua Sctipt



import ('System')

    byteData = Byte[4]  -- create 4 length Byte Array
    byteData[0] = 0x00
    byteData[1] = 0x11
    byteData[2] = 0x22
    byteData[3] = 0x33
    SendData(byteData)  -- Call C# Function from Lua
  

2018年7月6日金曜日

VisualStudio2017

VisualStudio2017でMFCで組んでる人、
日本に居ないの?
ダイアログベースでプロジェクト作って、
ダイアログリソースをいじって、
普通にコンパイルするとLANGUAGE のとこにカンマが無いとエラーが出る。
見てみると、
LANGUAGE 17、1
のようになってる。
「、」のところを「,」に変えると普通にコンパイルできるのだが、
もう一度ダイアログのどこかのリソースをいじるとまた同じエラーが出る。
MSも把握していて治すと聞いていたのだが、
いつ治すの?

chinachu その後

RaspberryPiのCPU負荷はまだ余裕がある。
電波レベルも問題なし(フジテレビとかNHKとか)
しかし、録画すると録画済みリストに同じ名前が2つ並ぶ。
これ、フォーラムでも報告されていたのだけど、
問題が解決できていないらしい。
この状態になると、ファイルとしては一つなのだが、
ブロックノイズが混ざったファイルが出来ている。
今の所VLCで直してみたりしているけど、
修復しても結構長い時間ロスト状態で画面が固まるようなファイルが出来てしまう。
ブロックノイズの原因がチューナにある可能性も否定できない。
どのチューナで録画されたのかも分かるようにログを吐き出してもらえないもんだろうか

2018年5月24日木曜日

chinachu+RaspberryPi+PX-SU1D Ver2 x 2

Chinachu + RaspberryPi で録画サーバをセッティングしたのだが、
当初よりもかなり動きが悪く、具体的に言うと、録画したものが壊れていたりサーバが死んだりしはじめた。
まだ全容はわからないけど、少しだけ理由が絞れてきた。
結果から話すと、チューナが怪しい。
このチューナ、かなり熱を持つのだ・・・熱暴走してるんじゃないだろうか

これまでの現象は以下5つ
1.使っていた当初はわりと調子が良かったのだが、だんだん録画にノイズが入るようになった。
2.アンテナの接続があまかったのを直したが、たまにノイズが入るのは変わらなかった。
3.録画が始まるようになってサーバが落ちるようになった。キャッシュを増やしたことで、サーバは落ちなくなったようだが、録画したファイルの品質がたまに悪くなっていたのは変わらず。
4.RaspberryPiの温度を測ってみたら85℃、これはCPUがクロック落とす温度なので、クーラーを付けた。それでも、録画が始まってしばらくすると落ちる。
5.録画できたファイルが2Gもあるのに、18秒程度しか再生できなくなった。しかも、録画済みファイルが2つ出来ていた。(この現象はchinachuサイトでも上がっていたが、バグなのかどうか不明として放置されている)

チューナは2つついている。
これらのことから、チューナの一つが壊れているのではないかと推測し、もう1つチューナを購入し、2つのチューナと付け替えながら録画してみて、怪しいチューナを特定した。
新しく買った方も壊れていた場合、チューナを1つだけにして運用し、取り替える事になったと思うが、幸運なことに新しく買ったチューナは動いてくれたようだ。
結果、現在は普通に録画出来るようになった。(録画4回テストして問題ない。)
ただし、以前のように運用中にチューナが壊れる可能性は高い・・・もう少しまともに動くものはないんだろうか・・・

2018年3月15日木曜日

AppleTVにAmazonPrimeVideoがインストール出来るようになってた

たまに検索してたんだけど、いつの間にかAppleTVに、AmazonPrimeVideoがインストール出来るようになっていた。
あちこち検索してみたら、2017年12月7日以降インストール出来るようになってたらしい。
ところで、AppleTVもTVのリモコンで操作できるんですね
AppleTVにはiPadProと同じCPUが入ってるらしく、AmazonFireStickより断然早い。
4k版のAppleTVにはiPhoneXと同じCPUが入っているらしい。

2018年3月7日水曜日

MSADO + Oracle 12r2

ありえない話なのだが、、、
Oracle12r2になってから、VBScriptで普通にSelect文を実行すると、
本来200件のレコード件数が300件になって返ってくる。
しかも最初の一度だけ、二度目からは正常な件数が得られる。
どうもしきい値が200件近辺らしく、
100件だったら100件のデータが得られるようだ。
しかし、1000件だったら1100件になって返ってくる。
信じられない・・・何してくれてんだOracle・・・
ちなみにADOは内部でOracleClientを使っているらしい。
つまり、ADOだけ入れても、OracleClientをインストールしないと、
Oracleには接続できないということだ。
(最初からインストールしてたんで、そういう環境で試したことはないけど)

追記
cursorLocatinを、adUseServerにするとだめで、
adUseClientにすると正常な件数返ってくる。
重ねて言うが、r1ならどちらも動く

RaspberryPiには3Aの電源が必要だ!

RaspberryPiにOSMCをインストールしてみた。
今現在、うちでは3台のRaspberryPiが稼働している。

  1. 会社のホームページ、メールサーバ、owncloud
  2. OSMC(今回インストール)
  3. Chinachu録画サーバ(ダブルチューナにしてる)

OSMCについては、どうも動きが良くないので、知り合いに聞いてみたところ、
電源ではないかと指摘を受けた。
確かにOSMCに使っていたのは、iPhoneのアダプタで、
録画サーバに使っていたのはIQOSのアダプターだ。
IQOSのアダプタは多少大きめだが、それでも2Aだった。
これはアンペア数が少ないのかもしれない。
アマゾンで早速3Aのアダプタを購入し、取り替えてみた所、
今までの不具合が嘘のように改善された。
具体的にどのような不具合があったかというと以下の通り

  1. OSMCのコンテンツ再生中に、突然再生が止まる現象
  2. FTPでOSMCにアップするとき転送速度が遅かった
  3. OSMCで動画再生中に先送り巻き戻しがとても遅かった
  4. OSMCからDLNAプレイヤーで再生しているときも先送り巻き戻しが遅い
  5. Chinachu録画サーバの再起動時にminidlnaが起動しなかった
上記5に関してはserviceの登録を何度かやり直したので、それで治ったのかもしれないが、1から4に関してはまったく無問題になった。
やはり、外付け2.5インチHDDを使うにはそれなりの電源が必要だったということだ。

2017年12月23日土曜日

冬コミ用の本を作った

冬コミ用に3Dプリンタの本を作った。

中身はこんな感じ、
今回は、
OpenSCAD、TinkerCAD、Blenderの解説をしたモデリング編


2017年12月5日火曜日

パリの灯

50時間かけて作ったパリの灯
家庭内の電灯を全部3Dプリンタでリニューアルするのは、
3Dプリンタの活用方法としてわりと意味があると思える。