2017年8月17日木曜日

書き味向上ペーパーライク 保護フィルム iPad Pro 9.7インチ / iPad (第5世代) / iPad Air 2/iPad Air OverLay Paper OKIPADA/2

書き味向上ペーパーライク 保護フィルム iPad Pro 9.7インチ / iPad (第5世代) / iPad Air 2/iPad Air OverLay Paper OKIPADA/2


コレ貼り付けたらiPadProとApplePencilの描き味が良くなった。 リアル感増して、Procreateでお絵かきしてたら、消しゴムゴシゴシ、シャーペンでガスガスやるような感覚が味わえた。 他を使ったこと無いけど、かなりいいんじゃないだろうか

2017年7月11日火曜日

nutube


ぽっけさんのnutubeポタアンを作りました。
基板の一部が間違っていて、最初オレンジ色にフィラメントが光りまくっていたので、フィラメント回りを見直したらショートと誤配線を見つけて修正。
ぽっけさんにもお知らせしました。
とても素直に鳴るアンプです。
間違ってライン入力と直結したかと思うくらいです。
そこかしこにある真空管ポタアンは、オペアンプでお茶を濁してますが、このアンプは違います。
手巻きでトランス作って、70Vを作り出してます。
トランスを巻くのも楽しかったし、基板の間違いを探すのも楽しかったです。
部品点数も少なくなるように考えられていて、設計者の頭の柔らかさに驚きました。
回路はとてもシンプルなのですが、なんでこんなに素直に元気に鳴るんでしょうね?
かなり気に入りました。

2017年6月9日金曜日

ownCloudのマニュアルアップグレード

  1. ダウンロード
            以下からダウンロード

  1. ラズパイにコピー
        scp owncloud-10.0.2.zip username@192.168.1.xxx:
        ssh username@192.168.1.xxx

  1. unzip
        su
        cd ~takahiro
        unzip owncloud-10.0.2.zip

  1. rename
          cd /var/www/owncloud
          sudo mv ownclouod owncloud_old

  1. Maintenance mode on
           sudo -u www-data php occ maintenance:mode —on

  1. stop nginx
           sudo /etc/init.d/nginx stop

  1. copy owncloud
           sudo mv ~username/owncloud ./owncloud

  1. copy config
      sudo cp owncloud_old/config/config.php owncloud/config/config.php

  1. start nginx
      sudo /etc/init.d/nginx start

  1. Upgrade
            sudo -u www-data php occ upgrade

  1. Maintenance mode off
           sudo -u www-data php occ maintenance:mode —off


2017年6月1日木曜日

GetTickCountと49.7日問題にハマった

1秒ごとに実行させたいといった場合

【普通に思いつくコード】
DWORD tkNext = ::GetTickCount()+1000;    // 1秒後の時間を計算しておく

while (bRunning) {
::Sleep(1);    // Sleep(0)問題参照
if(::GetTickCount() <= tkNext){
continue;    // 1秒経って無ければcontinue
}
tkNext = ::GetTickCount()+1000;    // 1秒経ってるので、次の1秒を計算しておく
// なんらかの処理をする
}

これね、何の問題もなさそうに見えたんですわ・・・

しかし、下部のtkNext = ::GetTickCount()+1000のところで、
::GetTickCount()がDWORDの限界付近で、tkNextが0xffffffff付近になったとする
ループの頭に戻って、GetTickCountした時にDWORDを一周りして、ゼロ以上になっていたら、
(::Sleep(1)は10ミリ秒以上になるので)
::GetTickount() <= tkNextの所が、
if(10 <= 0xffffffff)になってしまう
すると、その後、ずっとcontinueしてしまうので、処理が行われなくなる。
49.7日後に再びGetTickCountがゼロになり、処理まで進まない。
(0xffffffff/1000/60/60/24 = 約49.7日)
このプログラムはおよそ49.7日で動かなくなる可能性があるのだ。

【修正版】
DWORD tkPrev = GetTickCount();   // 以前実行した時刻を保存しておく
while (bRunning) {
::Sleep(1);
if(::GetTickCount() - tkPrev < 1000){
continue;    // 前回実行時刻との差が1秒経って無ければcontinue
}
        tkPrev = ::GetTickCount();    // 1秒経ったので、現時刻を保存しとく
// なんらかの処理をする
}

こうやって、::GetTickCount() - tkPrev で判断すれば、DWORDを一回りするタイミングでも問題が無い
このコードは実はMSDNのGetTickCountでサンプルとして示されたコードとほぼ同一だ。
このコードの肝は符号拡張の部分なので、怪しいなと思ったらDWORD変数を作ってループさせるプログラムでも作って検証してみると良い。

2017年5月16日火曜日

タチカワ 新ペン先 スクールG

自分はプロではないけど漫画を描いていたこともあり、
Gペンや丸ペンなど使いまくっていた。
最初は原稿用紙にポタリ落とすこともあったけど、
適切な量もわかって、ほぼミスも無くなった。
しかし、もっと細い線がもっと高速に描きたくなって、
ロットリングのラピッドグラフ、イソグラフと使ってきた。
A0の紙にイソグラフでカケアミなどの模様を一面描き込んで、
スクリーントーンと間違われたこともある。

ゲーム業界時代はイソグラフでメモを取っていた。
相当長い間使ったので、プラスチックの蓋が経年変化で変形し、
まさか壊れることはないと思っていたイソグラフ本体にヒビが入って壊れた。
プラスチックは経年変化するのだ。

んで、メモや絵を描く道具として万年筆に目を向けた。
筆圧が出るところもイソグラフより魅力的だ。
俺は、はっきり言って、
ペン先の描き味、インクの質、ペンの重心など、こだわりは半端ない。
普通にメモを取るだけでなく、きっちりしっかり画材としても見る。
画材になれないのだったらまったく評価出来ない。

最近LAMYの万年筆を使っているのだけど、
EF(極細)なのに太すぎる!
AURORAのイプシロンよりは書きやすいが、
付属インクも水性とかありえんだろ!
上から色塗れねぇじゃねぇか、アホなのか?
水に浸かったらメモが全部読めなくなるぞ?
今はパイロットのインクに変えたので、
水に濡れてメモが読めなくなる恐れは無くなったが、
この万年筆作った連中は、メモという自分の記録が大事じゃないのか?
数年で色褪せるようなインク作るんじゃねぇよ

どこかにGペンの書き心地の万年筆は無いもんだろうか・・・
いつでも使えて、Gペンみたいに細字から太字まで書きまくれるようなら最高なんだけどなぁ

と思っていたら見つけた
タチカワ 新ペン先 スクールGだ。

こいつ、レビューはいまいちなんだけど、
絵かきにとっては中々良い。
抑揚の付けられない万年筆よりは面白いし、
絵かきならこのペンは何の苦労もなく使えるだろう。
かなりおすすめである。



2017年5月12日金曜日

COMのCreateInstanceとAddRefとRelease

COMではまず、クラスをCreateInstanceして、QueryInterfaceして、ほっとけば呼び出し側の参照が切れたときに消える。

CreateInstanceでは参照カウントm_dwRefはゼロのまま。
QueryInterfaceではm_dwRefがインクリメントされる。
呼び出し側が参照をやめれば、勝手にm_dwRefがデクリメントされ、
CreateInstanceで作ったクラスのデストラクタが呼ばれる。
ちなみにデクリメントしたい場合は、Releaseを呼ぶ。

QueryInterfaceせず、呼び出し側に参照をさせないのであれば、
CreateInstanceして、色々使って、最後に消す必要も無く勝手に消えるんだろうと思っていた。
だってm_dwRefはゼロのままだからね?

ところが、これだと消えてくれないのだ。
CreateInstance
AddRef
いらなくなったらRelease
これでCreateInstanceで作ったインスタンスのデストラクタが動く。

AddRefでm_dwRefがインクリメントされ、
Releaseでデクリメントされる。
それだけにしか見えないんだけど、それやらないとデストラクタが動かない。

_bstr_tでメモリ解放漏れ

ある日の俺は、ATL で COM作っていた。
クラスのメンバー変数のように_bstr_tを使っていたのだが、
クラスが消えるときに_bstr_tの内部の値が消えてくれなかった。

何でかというと_bstr_tはクラスであって、
オペレータのイコールをオーバーロードしてあって、
内部変数 Data_t に new して値をメモリに確保して入れてる。

それが、デストラクタで消えるかと思ったら、消してないんだよね・・・
なんでnewしてんだ・・・

COMで使う時は、ComBSTRのがいいのかもしんない。

ちなみに消すためには、
_bstr_tのAssign(NULL)を呼び出す。
そのまま放っておくとメモリー解放漏れになる。

誰だ_bstr_tが安全ぽいとか書いた奴!

あー、ここでも同じことで悩んでるやつ発見
http://stackoverflow.com/questions/13011179/bstr-t-memory-leak
日本では鵜呑みにする奴が多いが、MSのコードはバグが多いぞ
よく注意するべし!