冬コミ用に3Dプリンタの本を作った。
中身はこんな感じ、
今回は、
OpenSCAD、TinkerCAD、Blenderの解説をしたモデリング編
2017年12月23日土曜日
2017年12月5日火曜日
2017年11月24日金曜日
2017年11月19日日曜日
2017年11月13日月曜日
2017年11月12日日曜日
2017年11月10日金曜日
2017年11月4日土曜日
2017年11月3日金曜日
Tevo Little Monsterが届いた
でかいものが刷りたい欲求が抑えられず。
Tevo Little Monsterを購入した。
だって、自分で部品集めて作るより良さそうなもんだもん!
それにしてもでけー4人掛けの丸テーブルからはみ出るサイズ
開けてみた。
でか!!
マヂ本当にでかい!
いや本当にでかい!
足つけた所
次は支柱を付けていく
キャリッジの組み立て、、、というか組みた立ってた!
支柱に通した所、調整済みのようだ。
自重で落ちない程度の噛合いになってる。
天板付けた所
モーターを付ける
ベルトテンショナー、というかベルトをひっかける下部の部品
プーリーにかけるだけの構造
キャリッジを下に降ろしてテンションかけながら左右のネジを締める
上部の赤外線センサー
エフェクターをつける
キャリッジにもロッドをつける
液晶を下げるフックを天板につける
天板上部のフィラメント用アームを付ける
フローティングエクストルーダをつける
フィラメントもセット完了
キャリブレーションをしてからファーストプリント
スムーザーもつける(後に8ダイオード版にアップグレードした)
ファーストプリント結果
おいおい、ファーストでこの出来かよすげーなおい!
Tevo Little Monsterを購入した。
だって、自分で部品集めて作るより良さそうなもんだもん!
それにしてもでけー4人掛けの丸テーブルからはみ出るサイズ
開けてみた。
でか!!
マヂ本当にでかい!
いや本当にでかい!
足つけた所
次は支柱を付けていく
キャリッジの組み立て、、、というか組みた立ってた!
支柱に通した所、調整済みのようだ。
自重で落ちない程度の噛合いになってる。
天板付けた所
モーターを付ける
ベルトテンショナー、というかベルトをひっかける下部の部品
プーリーにかけるだけの構造
キャリッジを下に降ろしてテンションかけながら左右のネジを締める
上部の赤外線センサー
エフェクターをつける
キャリッジにもロッドをつける
液晶を下げるフックを天板につける
天板上部のフィラメント用アームを付ける
フローティングエクストルーダをつける
フィラメントもセット完了
キャリブレーションをしてからファーストプリント
スムーザーもつける(後に8ダイオード版にアップグレードした)
ファーストプリント結果
おいおい、ファーストでこの出来かよすげーなおい!
2017年9月17日日曜日
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月29日土曜日
夏コミ用の本を作った
夏コミ用の本を作りました。
3Dプリンタ本です。
しかもデルタ型3Dプリンタにこだわった本で、
DLT-180を用いて、ハードの組み立て注意点、
Ramps基板の設定、Repetierの設定、スライサーの設定、
プリントの仕方などをまとめました。
3Dプリンタ本です。
しかもデルタ型3Dプリンタにこだわった本で、
DLT-180を用いて、ハードの組み立て注意点、
Ramps基板の設定、Repetierの設定、スライサーの設定、
プリントの仕方などをまとめました。
2017年7月11日火曜日
nutube
ぽっけさんのnutubeポタアンを作りました。
基板の一部が間違っていて、最初オレンジ色にフィラメントが光りまくっていたので、フィラメント回りを見直したらショートと誤配線を見つけて修正。
ぽっけさんにもお知らせしました。
とても素直に鳴るアンプです。
間違ってライン入力と直結したかと思うくらいです。
そこかしこにある真空管ポタアンは、オペアンプでお茶を濁してますが、このアンプは違います。
手巻きでトランス作って、70Vを作り出してます。
トランスを巻くのも楽しかったし、基板の間違いを探すのも楽しかったです。
部品点数も少なくなるように考えられていて、設計者の頭の柔らかさに驚きました。
回路はとてもシンプルなのですが、なんでこんなに素直に元気に鳴るんでしょうね?
かなり気に入りました。
2017年6月9日金曜日
ownCloudのマニュアルアップグレード
1ダウンロード
2.ラズパイにコピー
4.unzip
以下からダウンロード
scp owncloud-10.x.x.zip username@192.168.x.xxx:
最近はtar.bz2なので、
scp owncloud-10.x.x.tar.bz2 username@192.168.x.xxx:
scp owncloud-10.x.x.tar.bz2 username@192.168.x.xxx:
ここからはsuで作業
su
7.stop nginx
8.move owncloud
9.copy config from old
10.start nginx
11.Upgrade
12.Maintenance mode off
cd ~username
unzip owncloud-10.x.x.zip
最近はtar.bz2なので、
tar xf owncloud-10.x.x.tar.bz2
最近はtar.bz2なので、
tar xf owncloud-10.x.x.tar.bz2
5.Maintenance mode on
sudo -u www-data php occ maintenance:mode —on
6.rename
cd /var/www/owncloudのあるところ
sudo mv ownclouod owncloud_old
sudo /etc/init.d/nginx stop
sudo mv ~username/owncloud ./owncloud
sudo cp owncloud_old/config/config.php owncloud/config/config.php
sudo /etc/init.d/nginx start
sudo -u www-data php occ upgrade
12.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を一回りするタイミングでも問題が無い
【普通に思いつくコード】
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だ。
こいつ、レビューはいまいちなんだけど、
絵かきにとっては中々良い。
抑揚の付けられない万年筆よりは面白いし、
絵かきならこのペンは何の苦労もなく使えるだろう。
かなりおすすめである。
Gペンや丸ペンなど使いまくっていた。
最初は原稿用紙にポタリ落とすこともあったけど、
適切な量もわかって、ほぼミスも無くなった。
しかし、もっと細い線がもっと高速に描きたくなって、
ロットリングのラピッドグラフ、イソグラフと使ってきた。
A0の紙にイソグラフでカケアミなどの模様を一面描き込んで、
スクリーントーンと間違われたこともある。
ゲーム業界時代はイソグラフでメモを取っていた。
相当長い間使ったので、プラスチックの蓋が経年変化で変形し、
まさか壊れることはないと思っていたイソグラフ本体にヒビが入って壊れた。
プラスチックは経年変化するのだ。
んで、メモや絵を描く道具として万年筆に目を向けた。
筆圧が出るところもイソグラフより魅力的だ。
俺は、はっきり言って、
ペン先の描き味、インクの質、ペンの重心など、こだわりは半端ない。
普通にメモを取るだけでなく、きっちりしっかり画材としても見る。
画材になれないのだったらまったく評価出来ない。
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でデクリメントされる。
それだけにしか見えないんだけど、それやらないとデストラクタが動かない。
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のコードはバグが多いぞ
よく注意するべし!
クラスのメンバー変数のように_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のコードはバグが多いぞ
よく注意するべし!
2017年5月11日木曜日
letsencrypt
会社のサイトを作ったので、letsencryptで証明書を作ったのだが、
Androidで見れないと言われた。
調べてみたら、fullchainじゃないとダメらしい。
その他のデバイスでは不具合を聞かなかった。
面倒だなぁAndroid
Androidで見れないと言われた。
調べてみたら、fullchainじゃないとダメらしい。
その他のデバイスでは不具合を聞かなかった。
面倒だなぁAndroid
2017年5月7日日曜日
M4V on ownCloud 9.1.5
RaspberryPiにセットアップしたownCloudには少し問題があって、
M4Vが再生できなかったのだが、、、
ちょっと前にffmpegを入れても再生できなかったのだ。
んで、調べてみたら、作者同士が罵り合ってm4vが再生できなかったとかなんだとかいう記事を見つけて、そうなの?残念ねと思っていた。
ところが、こないだ9.1.5にバージョンアップしてから試しに再生してみたらきちんと再生できた。
iPhoneのSafariでも再生できたので、多分どの端末でもいけるだろう。
M4Vが再生できなかったのだが、、、
ちょっと前にffmpegを入れても再生できなかったのだ。
んで、調べてみたら、作者同士が罵り合ってm4vが再生できなかったとかなんだとかいう記事を見つけて、そうなの?残念ねと思っていた。
ところが、こないだ9.1.5にバージョンアップしてから試しに再生してみたらきちんと再生できた。
iPhoneのSafariでも再生できたので、多分どの端末でもいけるだろう。
M4VはApple独自の規格らしい。
しかし、過去の記事で書いた通り、mediaTombでは同じデコードで再生できたのだし、
中身ほぼ一緒と考える人がいるのも仕方ないのかもしれない。
なんにせよ、今はm4vもownCloudで再生できるようになったのでよかったよかった。
2017年4月25日火曜日
WPF Popupでお困りの皆様へ
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-binding-helpful-tip?forum=wpf
WPFでPopupは非常に扱いづらい。
Popup は StaysOpen=true にしておくとフォーム外をクリックしても閉じてくれないし、フォームをドラッグすると Popup だけ置いてけぼりになる。
あちこちのサイトを見ると、ToggleButton の IsChecked にバインドしろとか書いてあるけど、お前らそんなに Popup をトグルボタンでオープンしたいのか?
上記URLの解は非常にシンプルだ。
自分は TextBox の横に Popup を配置して、TextBoxのPreviewMouseLButtonClick で IsOpen=True にし、 LostFocus で IsOpen=Falseにする処理も追加した。
まぁ、騙されたと思ってやってみて欲しい。
TextBox をマウスでクリックすると Popup が開き、
フォーム上のどこかをクリックすると Popup は消える。
フォームをドラッグしようとしてもきちんと消えるし、
フォーム外のどこかをクリックしても消えてくれる。
WPFでPopupは非常に扱いづらい。
Popup は StaysOpen=true にしておくとフォーム外をクリックしても閉じてくれないし、フォームをドラッグすると Popup だけ置いてけぼりになる。
あちこちのサイトを見ると、ToggleButton の IsChecked にバインドしろとか書いてあるけど、お前らそんなに Popup をトグルボタンでオープンしたいのか?
上記URLの解は非常にシンプルだ。
自分は TextBox の横に Popup を配置して、TextBoxのPreviewMouseLButtonClick で IsOpen=True にし、 LostFocus で IsOpen=Falseにする処理も追加した。
まぁ、騙されたと思ってやってみて欲しい。
TextBox をマウスでクリックすると Popup が開き、
フォーム上のどこかをクリックすると Popup は消える。
フォームをドラッグしようとしてもきちんと消えるし、
フォーム外のどこかをクリックしても消えてくれる。
登録:
投稿 (Atom)
-
https://social.msdn.microsoft.com/Forums/vstudio/en-US/f0502813-9c4f-4b45-bab8-91f98971e407/popup-popupstaysopen-togglebutton-and-data-bindi...
-
どうも書かなくてはならないネタが出来てしまった。 マルチスレッドには欠かせないSleep(0)についてだ。 自分はSleep(0)を多用していた。 MSDNの記述 によると 「中断時間として 0ms を指定してこの関数を呼び出すと、現在のスレッドは自らに割り当てられている...