2017年12月23日土曜日

冬コミ用の本を作った

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

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


2017年12月5日火曜日

パリの灯

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



2017年11月24日金曜日

ネジ止め剤

3Dプリンタは常時振動をしているため、どんなにネジを締めても緩んできてしまう。
そこで、こいつの出番だ。
あらゆるネジにこいつを適用した。
これでしばらくは安泰だと思われる。


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ダイオード版にアップグレードした)
 ファーストプリント結果
おいおい、ファーストでこの出来かよすげーなおい!

2017年9月17日日曜日

nutubeアンプバージョン2

ぽっけさんのnutubeアンプバージョン2を作った。
今回巻数が多かったけど、楽しんで作りました。
音も前のと比べて重厚感出たかも!

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の設定、スライサーの設定、
プリントの仕方などをまとめました。




2017年7月11日火曜日

nutube


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

2017年6月9日金曜日

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

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

    2.ラズパイにコピー
              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:

      3.ラズパイにSSHでログイン
              ssh username@192.168.x.xxx

      4.unzip
              ここからはsuで作業
              su
              cd ~username
              unzip owncloud-10.x.x.zip
              最近は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

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

      8.move owncloud
                   sudo mv ~username/owncloud ./owncloud

        9.copy config from old
                sudo cp owncloud_old/config/config.php owncloud/config/config.php

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

            11.Upgrade
                          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を一回りするタイミングでも問題が無い
                このコードは実は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のコードはバグが多いぞ
                よく注意するべし!

                2017年5月11日木曜日

                letsencrypt

                会社のサイトを作ったので、letsencryptで証明書を作ったのだが、
                Androidで見れないと言われた。
                調べてみたら、fullchainじゃないとダメらしい。
                その他のデバイスでは不具合を聞かなかった。
                面倒だなぁAndroid

                2017年5月7日日曜日

                M4V on ownCloud 9.1.5

                RaspberryPiにセットアップしたownCloudには少し問題があって、
                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 は消える。
                フォームをドラッグしようとしてもきちんと消えるし、
                フォーム外のどこかをクリックしても消えてくれる。

                2017年1月29日日曜日

                プログラマ不足

                最近、案件を送ってくれる会社と付き合いがありまして、
                そこでお話を伺った時に言われたのが、SEは70万、PGは60万ということでした。
                なぜSEのがPGより高いんですか?
                しかも送られてくる案件もただバックアップするだけの仕事の方が、
                iOS、Androidの開発よりも高かったりするんです。
                日本は狂ってるとしか思えません。
                ちなみにSEというのは和製英語です。

                自分はWEBでコーディングに関する検索をする時に、
                検索エンジンの言語設定を英語にしています。
                日本語のサイトが出てきたり、MSのサイトが出てくると、ろくな情報が無いからです。
                MSDNには誤訳があり、英語のサイトを見た方がわかりやすいです。
                つたない機械翻訳なら英語のサイトを最初から表示してほしいです。

                MSの掲示板ではMVPの方々が、
                プログラマになりたての新人と思しき人々の書き込みに対して、一生懸命返信しています。
                MSの社員はMVPになれないので、そういう活動をしているのは外部のボランティアです。
                ちゃんと解決していないにもかかわらず、
                しばらく反応がないと解決で閉じますと書き込まれ閉じられています。
                ボランティアの書き込みなので、内容は一切信用できません。
                活動自体に全く意味が見出せません。

                それはボランティアとも言えないのではないでしょうか?
                意味のない活動ではないですか?
                自分は日本のサイトを見なくなりました。

                今、日本では切実にプログラマが不足しています。
                大御所のサイトでもろくなコードがない。
                間違った情報が載っている。
                これでは新人はどこを見て勉強すればいいんでしょうか?
                本当に困ったもんです・・・
                こんな土壌でもまともに育つ人は育つわけですが、
                そういう人はなかなか見つけられません。