2021年5月1日土曜日

コードメトリックスを算出するツールのビルドではまった

 1時間30分くらいはまったのでメモ。

https://docs.microsoft.com/en-US/visualstudio/code-quality/how-to-generate-code-metrics-data?view=vs-2019

エラー内容:

 error MSB4236: 指定された SDK 'Microsoft.NET.Sdk' は見つかりませんでした。


Restore.cmdの代わりに:

dotnet restore Roslyn.sln


msbuild~の代わりに:

dotnet msbuild /m /v:m /p:Configuration=Release Metrics.csproj


を実行することで解決した。

PATHとかMSBuildSDKsPathを設定してもうまくいかんかった。設定しても、VS2019も入ってるからそっちのMSBuildとかが優先されちゃうんだろうな。

2020年7月11日土曜日

プログラミングを学ぶ前にすること

 仲間内で「最初に学ぶのに最適な言語は何だろう」という話になった。
 正直、最適解はなく、「自分がやりたいことが実装できる言語」がそれぞれにとっての最適となると思う。
 しかし、見つけたところでスムーズに学んでいけるかというと、誰しもがすいすい進んでいけるわけではなく個人差がある。そこで「プログラミングを学ぶ前に何を知るべきか」まとめてみたいと思う。

  1. 四則演算

    最悪、小学生くらいまでの数学で問題ない。
    2点間の距離を求めよとか連立方程式とかは専門的なことをするまでいらない。
    逆に言えば専門的なことをするならとても勉強が必要。

  2. アルファベット

    a~z、A~Zまでのアルファベットを覚える。
    すごく基本的なことだが、いまだにlとI、0とOを間違える人がいる。
    私もたまに間違える。

  3. 英語

    基本的にプログラムは英語で記述する。
    それが意味のある文字として理解しているか、していないかで、やはり覚えに差が生まれてくる。
    マニュアルは英語であることもある。

  4. 日本語

    プログラムしていく上で人に質問したり相談したりすることがあるが、うまく自分のやりたい事が伝えられるか、受け取れるか非常に重要に感じる。
    マニュアルは日本語だがたまに言い回しが独特だったり難解だったりする。

  5. まずやってみる

    プログラミングは絵画や陶芸と違って、作業を行う上で、設備費はかかるが原材料費はかからない。どんどん手を動かそう。

  6. 分からないことを自分で調べる癖をつける

    初心者向けの本でも8割方、下手したら9割9分わからないと思う。
    プログラミングはわからないまま進めると結構うまくいかない。
    今は幸いネットがあるので、わからない言葉が出たらググる。または人に聞こう。

  7. 小さい目標を作る

    自分の望む完成品を作るのはとても大変なことである。
    小さい目標を作った方がよりモチベーションが上がるし、細かく進みをチェックできる。

  8. 教師を付ける

    モノによっては間違えて覚えると大変なので教師をつけたほうがいい。
    この教師はリアルな人でもいいが、キレイなコードでもいい。

どんな言語を学ぶにしても、上記のことは必ず生きてくる。
 基本的に自分の前に来る新人はプログラミングの勉強はしてきているはずだが、わりと個人差が大きい感じなので、こういった基本から教えれるようになりたい。

2019年10月8日火曜日

Oculus Questを使って美少女になって自撮りするアプリ開発中



しばらくLTもやってないしOSCにも何も出展していないので、そろそろ自分でネタを作ることにした。
クライアント側はUnityで組んだけど、スクリーンショットを保存しても取り出すのが大変だし、
Googleフォトとかとの連携が大変そうなので、自前でHeroku上にAPIサーバーを立てて、
そこにアップロードすることにした。
セキュリティガバガバだからまだサイトのアドレスは載せれない。
Final IKとか使ったらもっと楽なんだろうなあ。
モデルはVRoidで作ったけどシェーダーとか見直す点はあるかも。

これからの課題は
・進行のリセット機能
・表情の変更
・サイトのセキュリティ
・VR空間のリッチな部屋にする
・誰が撮影しても似たような写真になる問題

ちなみに、もともと
「VR空間でしかできないことしたいな・・・そうだ!美少女にしかできないタピオカチャレンジをしよう」
という突然何かが降りてきて実装を開始したのだが、タピオカチャレンジについて
「胸の上にタピオカミルクティーを乗せて写真を撮る」
という情報しかなかったから、
すごい角度を付けて写真を撮ってると思ってた。自撮りへの情熱すごいな。
3Dモデルは無関係

実際はそんなことなかった。口でくわえるのもアリだった。
流石に「口でくわえる」はセンシングできないので、
タピオカミルクティーを口元に近づけた時点で、口とくっつくようにしてあります。


2019年1月30日水曜日

Unity 2018.3にアップグレードするとtextmeshproが見つかりませんでしたみたいなエラーがたくさん出てVisual Studioでビルドできない

アップグレードの影響か、プロジェクトフォルダ\Packages以下のスクリプトが消えていた。
プロジェクトフォルダ\Library\PackageCacheからコピーするとビルドが通った。
これが正しい方法なのかはわからん。

2017年3月12日日曜日

Wikipediaのダンプファイルをインポートする(挫折)

・ここからダンプをダウンロード。
・ALZipだと大きいほうのファイルが解凍できなかった。7zipで解凍。
・解凍すると10GBのXMLファイルが!・・・
・なぜかサクラエディタでもバイナリエディタでも開けない・・・Baretailだと開けた。
・文字コードはUTF-8
・このページを参考にMediaWikiのインストールをする。
・だいたいあってるけどUbuntuの場合、以下を参考にいくつか追加インストール必要。
・あっというまに稼働するWikiができてびびる。
・importDump.phpを実行。めっちゃ時間かかってるみたいだけどこれ終わるのかよ
100 (3.47 pages/sec 3.47 revs/sec)
200 (3.92 pages/sec 3.92 revs/sec)
300 (3.26 pages/sec 3.26 revs/sec)
400 (3.57 pages/sec 3.57 revs/sec)
500 (3.89 pages/sec 3.89 revs/sec)
600 (3.95 pages/sec 3.95 revs/sec)
700 (4.14 pages/sec 4.14 revs/sec)
800 (4.06 pages/sec 4.06 revs/sec)
900 (4.06 pages/sec 4.06 revs/sec)
1000 (4.12 pages/sec 4.12 revs/sec)
・1051782(日本語版全記事数)÷4.12=255286秒=70時間(絶望)
・インポート中でもWiki内容は表示できる。
・CPUがボトルネックになっているっぽい。VMでやるべきではなかったか・・・
・誠に遺憾ながらだんだん遅くなっていく。
40700 (2.06 pages/sec 2.06 revs/sec)
40800 (2.06 pages/sec 2.06 revs/sec)
40900 (2.06 pages/sec 2.06 revs/sec)
41000 (2.06 pages/sec 2.06 revs/sec)
41100 (2.06 pages/sec 2.06 revs/sec)
41200 (2.06 pages/sec 2.06 revs/sec)
41300 (2.05 pages/sec 2.05 revs/sec)
41400 (2.06 pages/sec 2.06 revs/sec)
41500 (2.06 pages/sec 2.06 revs/sec)
41600 (2.06 pages/sec 2.06 revs/sec)
・50000件くらいであきらめた・・・でもランダム表示させるだけで楽しい

・何に使うかまだ考えてない

2016年8月21日日曜日

[Unity]AseetBundleで読み込んだ際に自作シェーダーが読み込まれない

いくつか他サイトでも紹介されてるけど、いきなり世界が紫色になってビビる。
開始後にシェーダーを再設定すればOK。AseetBundle使うとシェーダーの参照が壊れるとかなんとか。

        foreach (var uchar in UCharForReload)
        {
            Renderer[] mats = uchar.GetComponentsInChildren<Renderer>();
            foreach (var MaterialNow in mats)
            {
                foreach (var m in MaterialNow.materials)
                {
                    m.shader = Shader.Find(m.shader.name);
                }
            }
        }

で、これでOKかと思いきや、Android環境だとうまく動かんかった。
Always Include Shadersで設定すれば今くいくかも?また今度試してみよう
⇒設定したらOKでした

2016年7月31日日曜日

[Google VR][Unity]GazeInputModuleで注視しているボタンをクリックさせる

デフォルトだとタッチ操作が必要になる。環境によってはタッチ操作用の磁石がないので修正。
まずタイマー用の変数と、クリック動作させるかのパラメーターを追加。

    float clickTimer = 0f;
    float clickTimerMax = 1f;
    public float ClickTimer
    {
        get
        {
            return clickTimer;
        }

        set
        {
            clickTimer = value;
        }
    }
    public float ClickTimerMax
    {
        get
        {
            return clickTimerMax;
        }

        set
        {
            clickTimerMax = value;
        }
    }

    [SerializeField]
    bool GazeTimeClickMode;

あとはUpdateCurrentObjectを書き換えて、タイマーカウント終了時にExecuteEventsでクリックさせる。

    private void UpdateCurrentObject()
    {
        // Send enter events and update the highlight.
        var go = pointerData.pointerCurrentRaycast.gameObject;
        HandlePointerExitAndEnter(pointerData, go);
        // Update the current selection, or clear if it is no longer the current object.
        var selected = ExecuteEvents.GetEventHandler<ISelectHandler>(go);
        if (selected == eventSystem.currentSelectedGameObject)
        {
            ExecuteEvents.Execute(eventSystem.currentSelectedGameObject, GetBaseEventData(),
                                  ExecuteEvents.updateSelectedHandler);
            if (GazeTimeClickMode && selected != null)
            {
                ClickTimer = ClickTimer - Time.fixedDeltaTime;
                if (ClickTimer <= 0f)
                {
                    pointerData.pointerPress =
                        ExecuteEvents.ExecuteHierarchy(go, pointerData, ExecuteEvents.pointerDownHandler)
                        ?? ExecuteEvents.GetEventHandler<IPointerClickHandler>(go);
                    ExecuteEvents.Execute(pointerData.pointerPress
                        , pointerData, ExecuteEvents.pointerClickHandler);
                    ClickTimer = ClickTimerMax;
                }
            }
        }
        else
        {
            ClickTimer = ClickTimerMax;
            eventSystem.SetSelectedGameObject(selected, pointerData);
        }
    }

調べるのが大変だった・・・