C++幼女先輩

プログラミング成分多め

光回線=人権 がまだ来ない

あらすじ

最初は荷物をおく倉庫として借りたセカンドハウス
シェアハウスに住んでいるので特に生活は必要なかった
電気ぐらいは必要ぐらいに思っていたけど
電気開通してるならマイニングしてやれ
マイニング程度ならポケットWifiでいいや
あれ?モニターが必要だ
あれ?ネットがあるってことはここで仕事できるよね?
シェアハウスだとゲームは出来るがVCしながらゲームは難しい
セカンドハウスなら自由にVCしながらゲーム出来るよね?
VRゲームもセカンドハウスでできるじゃん
VirtualYoutuberの基礎研究もここで出来るよね?
じゃあ事務所にしよう。経費で落とせるようになるし、エアコンもあるし
ダイエットと運動不足解消に スタンディングデスクにスピンバイク組み合わせたら、自転車こぎながら仕事ゲーム出来るじゃない?
あれ・・パソコン使ったら ポケットWifiのデータ量がたりない・・ VCつけてゲームしたら1日でアウトだ

そうだ、光回線に入ろう

ってことで、早速申し込んだ

申し込み

マンションのポストに入っていた代理店に電話かけた
本当はNURO光にしてPSVRを手に入れようと思ったんだけど
なんとなくマンションのことをよく知ってそうだったので
ところが結果的にこれが大失敗であった

開通 機材が届かない

後にプロバイダーから連絡が来た
うちはインターネット回線が入っているので工事不要&立会不要
18日に開通するのでその前に機材が届きますと
そしてその時に私は 開通場所ではなく住居の方に送るよう伝えた
契約書にも 送付先住所は住居の方になっていた
ところが18日になっても 荷物が届かないので もしやと思い開通場所に行くと
不在届けが入っていた・・・
配送先ちがうじゃない・・・
ってことで再配達を依頼するも 19,20日は予定があったので21日に
3日遅れで手に入れたが、光のコンセントが部屋にない!

ので、代理店と不動産に連絡するも つかまらず・・・

連絡

22日に連絡がとれるようになった

まずは不動産
光コンセントはない。前の入居者が出る時に撤去した
工事して線引かないと駄目
まっとうな回答だ

代理店
光コンセントは来てるはず、全部調べたか?たまに押入れとかにあったりもする
いや 大家さんが無いと言ってるし私も1日探してるから無いのは確実
それはうちの領域じゃない、不動産に引いてもらえ。うちは光コンセントがあることが前提
いや、チラシにもこのマンションは光回線は契約すれば工事なしで使えます書いてるし契約時そういったやん
それは、ふつう工事ってゆーたら マンションまでの工事の事でマンションから宅内までの工事は含まない
いや、ふつう工事ってゆうーたら 宅内まで含めてやろ・・・
いや、宅内に回線が入ってないからプロバイダからNTTに工事依頼するやろ?それがチラシの工事費2万4千円がキャンペーンで無料ってやつやろ?
いや、ソフトバンクだからNTTは関係ない。光コンセントは電気のコンセントとおなじで不動産の管理
とにかくうちは宅内配線までは出来ないしプロバイダも出来ない。宅内配線は不動産の管理だからそっちでやってくれ
とにかくこのおじさん 嘘ばっかり言うし、そこに対して突っ込んでも 適当にごまかすので
不動産の電話番号教えるから、光コンセントの配線を不動産に頼んでくれと言うと
うちは 契約で 不動産と直接会話することは禁じられているので出来ません
(そんなの あるわけないだろ・・・)
と 全て適当にごまかす
あんたじゃ話にならないから、上司かプロパー出せって言っても
今出先だとか、上司の連絡先今はわからないとか 逃げてくるので、電話を切り 不動産に連絡

不動産

代理店の若造はいつも適当なことばかり言うなー
あいつら大抵、仕事もできないゴロツキが知識もなく電話して強引に営業するからなー
まったく昔の日本はこんな事はなかった、今の若いものは(ry
私も完全に不動産の主張が正しいことを伝えるが、代理店が適当なことを言って同しようもないことを伝えると
よし 俺が一発やってやるから 連絡先教えろ

代理店から連絡

不動産おじいさんが連絡してくれ、代理店から返事がきた
急におとなしくなり、さきほどはどうもすみませんでした えへえへえへ
不動産が回線工事をしてくれるようになりましたか? と意地悪に聞く
いえ、工事はNTTの仕事ですが、結論からいうと
プロバイダが確認を怠り、本当は工事必要だったのに工事連絡をしていなかったようです
(知ってたよ 最初にずっと指摘してたんだけどな・・)
悪いのはプロバイダですね

この人と話すと面倒なので適当に流す

プロバイダ

まず、機材を届ける住所が違ったこと、それにより3日の間ネットが使えなかったこと
事務所として使っているので損害が出ている事を伝え
宅内配線が来てないこと、工事が必要であったが確認を怠った事をあっさり認め
すんなりと 工事手続きにすすみ
明日の朝イチに工事してくれることになった

まとめ

まとめると、ミスをおかしたのは プロバイダで、工事必要なのに確認義務をおこたり工事不要にしたこと
機材の配達先を間違えたこと の2点

本来なら、宅内配線が来てない事をプロバイダに連絡すればすぐ工事手配がきたところ
知識が全くなく適当なことをいう 代理店のせいで話がややこしくなり 色々飛び火した

やはり プロバイダに直接依頼すればよかった

マイニングケフィア

以前、セカンドハウスにマイニングリグを組んだ話はしたかもしれないが
マイニングで問題になるのが排熱である
リグを組んでいれば 最近のGPUは排熱ちゃんとしているので、OCしなければ70度までなかなか上がらない
ただ、そこそこ温度は上がるので、その排熱を利用して何かできないかと思っている

もちろん、低温でもペルチェ素子で発電出来る可能性もあるが微々たるものなので行わない
直接熱を使う下記のアイディアを考えた

  • 熱帯魚の飼育
    熱帯魚の飼育には冬季は保温しなければならない
    夏は逆に風をあてて冷ますのだけど、排熱を使い冬季のヒーターを少なく出来る
    ビジネスとしては熱帯魚のブリーダーや、食用のエビや魚の養殖、孵化とか
    水冷等を使い直接水槽に熱を送ればベストだ
  • 爬虫類の育成
    上記と同じく、爬虫類の飼育にはヒーターが必要なので、マイニング熱を使う
    ビジネスにおいても爬虫類ブリーダー
  • 植物栽培
    ビニールハウスみたいなもの。排熱で栽培をする
    多肉とかサボテンとかもよさそうだし、南国フルーツ育たないかな・・
  • ホットヨガ ホットヨガの加熱に
  • ヨーグルト
    ヨーグルト等の菌は 少し暖かいのを好むものが多いので
    ヨーグルトやケフィア等を作るのに熱を利用する

ということで、マイニングリグの排熱をつかってケフィアを育てている
味は普通だ

時間使い方ルールと ネットワーク開通せず・・

最近、あまりうまく時間が使えてないので、色々と考えました

スケジュールを作る

実はわたしはスケジュールをつけず なんとなく生きてきました
そのスケジュールも Googleカレンダーで15分単位で細かく作る事にしました
睡眠時間と起床時間とか、生まれてこのかた守れた事ないので、守らないものを作るというのが嫌なので
自由に寝て起きてたけど 一新します
守らなくても毎日スケジュール立てる!

スケジュールをたてずに昼過ぎに起きると何も感じないが
スケジュールを前日たててそれを破ると、少しだけでも罪の意識が湧く
最初はそれでいいと思ってる
実際スケジュールたてはじめて 1週間の間、全くスケジュールを守れてない

で、今作ったルールは
夜の0時〜1時の間にお風呂入ったり 翌日のスケジュールをたてる
ちなみに今は 0:45分
そろそろ寝なければならないが、モンハンして2時頃寝ようと思ってる

早起き

どの成功した人の本を読んでも 成功した人は朝早い
わたしは技術者でずっと夜型人間だったので、全く理解できないし
実際に夜のこの時間が パフォーマンス上がっているが、一度試そうと思う
ただ、色々な理由で今は夜1時に寝て8時頃に起きるまでしか早くできない
昼寝いれて 2層睡眠を取り入れたいが、打ち合わせ等が入るため、2層睡眠は難しい

運動

これも成功しているCEOは朝ジムにいって体を動かす
体が健康であることは 命の全てなので頑張りたい

瞑想

これも成功している人は瞑想を朝するというので取り入れたい
また 私はダメ人間なので 朝9時前から株トレードしようと思う。これが朝のモチベーション

予定

定期的な予定は上記の通りだが、絶対動かせない予定、打ち合わせ等は赤色にする
意志の力で 絶対動かさないぞ!っての ジムとかは オレンジに その他 スケジュールを色で重要度表す
最終的には、すべてのスケジュールを守る必要がある
医者の予約と同じく、絶対守るようにしよう

ネットのこと

セカンドハウスというか個人事務所を作った
スタンディングデスクにスピンバイクを組み合わせ、自転車運動しながら仕事やゲームが出来るようにした ところが まだインターネットがきていないので、18日に工事がはいりつながるはずだったが
接続機材が 違うところに送られ結局21日に受け取った
21日 つまり本日接続しようとしたら、光コンセントがみつからず 接続できないという・・・
不動産も連絡とれず 引き続き頑張って連絡とって、はやくネットワークを確立させたい

ネットワークがそろったら、仕事しながら自転車こいだり、ゲームしたり、ゲーム実況したり

また、VRやVirtualYoutuberの開発も始めようとおもう
色々頑張るよ

フルスタックは辛いよ

フルスタックの定義がどこまでか不明ですが
あと フルスタックという言葉を嫌う人間も多いのを知ってあえて使います

フルスタックとは フルスタックだとあなたが感じれば、それがフルスタックであると

わたし

弱小の会社ではあるが、一応経営している
ただし 現在は従業員として正規は私だけであり
そこに数名、よく仕事を手伝ってくれている人員がいる
数ヶ月後に1名を正規雇用決めたけど現状は一人
そのすべてを現状ではこなしている

はやく xxとxx雇用したい

ここ1週間の仕事

フルスタックなので色々な仕事がある
まず、従業員1名が5末終了なので、その件でお客さんと打ち合わせをする
お客さんよりサーバ案件の話があるというので聞きに行く
VTuber、VR、その他案件の営業に行く
仮想通貨案件の営業に行く
お客さんがビジネスを作れないというので、ビジネス面の企画書をふわっと作る
見積もり2個
VR関連の実作業および技術的な提案
仮想通貨関連の実作業&指示出し
ゲーム開発への指示出し
Web案件のコンサル
ゲームサーバーのインフラ設計
ゲームサーバの設計
決算の準備
PL大雑把に計算して来季の予定
各種支払
事務所物件の検討
海外出張準備
越境EC準備
引っ越し荷物
ホームページ、名刺のデザイン、コンセプト

技術的なものだけ抜粋

まず レンダリングエンジンという最も低レイヤーなもの
そして サーバー設計、インフラ設計、API設計、DB設計 といった上流
企画や見積もりといった更に上流や チームビルディング
そして 実際のサーバ開発

ヤバイ 人を入れて分散したい

計画

本当は技術以外の人員をいれたい
なぜなら 私が苦手だから
経理、事務、営業 等を入れたい。が、非生産人員を入れるには生産人員が必要である
まずは技術者の雇用&外注を増やすこと
もちろん技術者や営業は他の会社と連携して うまく回せばいいので、非生産人員を入れてもなんとかなる

家で作業するのやめて、コワーキングいって人探そうかなー

GraphQL

はじめに断っておく
毎日違う事ばっかやってんじゃねーよ!!
なぜまとまって同じ仕事を進めないのか
昨日は AndroidNDKでOpenGLしたのに
今日はGraphQLである
主にサーバー向け

RESTの問題

APIというとRESTである
パスパラメータで指定して欲しい情報をJsonで受け取る
とりあえず REST API使っておけば文句は言われない
ただ、私はいろいろな理由から Rest is dead と思っていた

まず パスパラメータでは、パスの順番どうする? わかりにくいよね問題
例えば 17歳女性のユーザリストを取得する場合

http://localhost/api/v1/find_users/age/17/gender/1
http://localhost/api/v1/find_users/gender/1/age/17

どーっちだ
こういう場合はおそらく

http://localhost/api/v1/find_users?age=17&gender=1

と、クエリパラメータにして名前付きパラメータにすればよい
じゃあ 最初っから全部クエリにしたほうがよくね??

URLをコントローラーにするというアイディアは、MVCの切り分けとしてはわかりやすくとてもGoodなんだけど
そろそろ 弱点が見えてきたと思ってる

もちろん Get、Put、Post、Delete、Patch、Header・・・ のHTTP MethodとDBのCRUDが一致しないのも問題

仕様が増えるごとに パスが増える
APIバージョンがあがるとパスがまた増える・・

そこでGraphQL

まだ調査中だけど、GraphQLは クライアントから欲しいデータをリクエストする
クエリを投げるようなかたちになる
例えば ほんの少し欲しいデータや検索項目が違う場合 RESTだとそのぶんAPI増やす必要があるが
GraphQLでは、クライアント側のリクエストを変更するだけで、サーバは何も変わらない

とりあえず 手を動かすのが早い

GraphQLをNode.jsとexpressでためしてみる | Developers.IO

ClassMethodさん ナイス記事
ただ コードが少しTypoしているのが惜しい
でも そのTypoを自分で直せば理解できてるか確認できる

大雑把にまとめると、GraphQLで検索やUpdate、Insert命令をクライアントから指定できるので
APIの数が減る

まとめ

色々とメリットがありそうなのはわかったが、実際に使うとなると 色々と戸惑うので
まずはGithub等 GraphQLを使ったサービスのAPI事例を見て イメージつけていこうと思う

久々のAndroid開発(いきなりndkでOpenGL)序章

私には出来ませんって 断り続けたものの お客さんがかんたんに許してくれるわけでもなく
3回ほど断ったけど 結局 やってやんよ! というしか無かった Android開発
もちろん NDAの範囲で〜 の話だけど
具体的なことはかけないのだが NDKでAndroidの開発である

過去の栄光

こんなもの捨ててしまえばいいのだ
ただ、知識は捨てる必要はない。先人の7年前の私の話をしよう
7〜8年前に、わたしは某社の社長から特命を受けた
AndroidiOSに両対応したゲームエンジンを作れと
当時はAndroidは2.xで iPhone3 とかの時代だった
OpenGLESは1であったし、なんといっても私は AndroidiPhoneも持ってない
当然 スマホの開発はしたことないし、OpenGLも触ったことがなかった
そんな状況ではあるが、社長はR&Dとして期日も設けず、好きに開発してくれと
結局それから毎日 鬼のように働き3週間でプロトタイプを作成した
その時にとった戦略は、メインライブラリをC++で作り
AndroidにはJNIで、Objective-CにはそのままC++で 呼び出す事だった
最初に面倒なAndroid対応を行った
JNIも初めてで、意外とJavaとの呼び出しに罠が多く苦労した(String関連のメモリの所有者、GC、リフレクションなど)
OpenGLは初めてだけど すぐに理解できた
今の私だと、あの速度で理解出来たのか不明 いや、きっとやればできるはずだ・・
Objective-CC++がそのまま動くので何も問題なくおわった
開発中にGLES2.0が出たので、両対応したり
今考えても3週間で誰の助けもなくよく終わったと思う

その後、Javaの側をつくったり、GLES2.0のレジスタにおさまらないスキンメッシュをCPU計算して
SIMDNEONを使ったり
色んな部分をマルチスレッド化したり
Javaへ例外をやり取りしたり、RTTIに対応したり、本来非対応なものを、ライブラリ無理やり入れて動かした
また、NativeActivityが出たので対応したり

今回の話

あれから7、8年たち、色々と状況変わっているだろうが、結局いつもと同じく やるしかない
自由を手に入れるには 案件を片付けるしかない
まずは環境構築だ

環境

以前はWindowsで vs-androidを使った
これはVisualStudioにプラグインとしてのせて、VisualStudioにツールチェーンを構築してAPK作って転送する
とっても素晴らしいものであった
何が素晴らしいかって、clangでビルド出来て、C++11が使え(本来使えないが無理やり使えるようにツールチェーン作った)
Boostもちゃんと無理やり入れた
そして C++のビルドが早く、Javaを変更しなければそちらのビルドが走らず高速で実行できる
また、C++部分にブレークポイントうってデバッグもでき、控えめに言って最高であった

それに加え、コマンドラインでのビルド(リリース、自動ビルド用)と
EclipseでのNDKビルド環境を作った
Eclipseビルドは C++部分の自動ビルドが非常に遅く、バックグラウンドでCMakeでビルドするほうが早く
そのようなシステムを作ったが、vs-androidよりビルドは遅いし、そのごJavaコンパイルも入り
C++部分のデバッグもVisualStudio様に比べて弱く 非常に使いにくかった
もちろん Java部分の開発にはとてもパワフルだった

ので、C++部分の開発(全体の98%)は vs-androidにて
Java部分(2%)は Eclipseで開発
というスタイルであった

今回は、WindowsPCもMacPCも持っているものの、できればMacにすべて開発移したかったけど
vs-androidの便利さ考えると 悩むところ

ってことで、とりあえず AndroidStudioでのNDK開発を検証してみる

AndroidStudio、NDKなど環境を整え 新しいプロジェクトの作成

f:id:murasame-labo:20180516025235p:plain
すばらしい! 最初から C++14まで選べて、Exception、RTTIも標準でできる
これだけでテンションあがる

生成コード

まず、ビルドがGradleになっている。使ったことないけど 評判は良い
前つかってたときは Antで、Mavienがいいよって中国の技術者に教わって Maven対応したんだけど
とりあえずGradleの沼に入るのは今ではない

C++側のビルドはCMakeだ。何も文句ない

Java側のソース

package com.murasame_lab.cstudio1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
}

C++

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring

JNICALL
Java_com_murasame_1lab_cstudio1_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

最初らしく、C++コードから "Hello from C++" の文字を返し
それをJavaで画面に表示している
NewStringUTF() は、メモリJavaが破棄してくれるんだっけ?
そのあたりは 8年前に一通り調べたけど
正直記憶がない。3週間で一夜漬けしたので かんたんに思い出すことは難しいだろう
もう一度JNI周りは調べ直すしかない
記憶はないが 私にはコードという記録がある
いつか思い出すはずだ

ちなみに Static関数でライブラリのLoadをするのは、一つのお作法のようだ
8年前に色々な方法でベストを探したけど、最もかんたんにかけて問題がないのがこの方法であった

とりあえず小さなコードにおいては、AndroidStudioでブレークポイントもかかったし、高速にビルド出来た
そのため、今回はAndroidStudioでもいけるんじゃないかと 期待している

Macbook到着

やっとMacbookが届いた。っていうか予想より速い
北海道の配送センターからやってきたというのに、Primeで課金しているAmazonより速い
もう Amazonは本格的にダメかもわからんね・・・

久々のMacOS

macbook pro 13-inch 2017 Two Thunderbolt 3 ports
HighSierra 10.13.13
3年ぶりぐらいにMacbook手にした。2代目である
初代は 購入時のロジックボード不良という、生まれながらにして死ぬ難病をかかえて産まれてきたんだけど
この子は大丈夫だろうか??
って 購入前から、キーボードのパンタグラフがすぐ壊れる リコールしろ! 署名運動が行われてるんですが・・
大丈夫でしょうか?

嫌なところ

基本Macの嫌な所は他の機種でも同じだけど今回はあえての TouchBar無しモデルなので 少ないはず

まず、USB-Cが2系統あるが 一般的なUSB等がささらないので何も使えない。モニターもささらない
知ってたので最初から変換アダプタも買った

キーボードが嫌。評判以上に酷い。押した感覚がないし押しても反応してない事もあるしで慣れるまで死にそう

Ctrl+CやCtrlSなどのショートカットボタンが違う
以前のMacでもこれでいつも困っていた。もちろんソフトで場所交換できるが今回は使うか・・

ビデオカードが弱い。UNITYが重くて厳しい。想定内

Githubが非常に遅い。。理由不明。時々Google認証エラー出るし、最初エラー出まくって1時間ほどかかったし
なぜかネットも重い。。何か設定必要だろうか?

HDD少ない。256GBでProかよ・・・ って思う

漢字変換ボタンがない、DELキーがない・・・

辞書が酷い。Google変換にかえるか・・

ゲームが出来ない

いいところ

小さくて軽いので、ゲームをしない、ゲーム系の開発以外なら これ1個で旅できる

PC多すぎ問題

今PCが多すぎる・・

  • デスクトップPC1
    特に使っていない・・ ゲーム用に1080Ti 2枚積んだけど
    本格的なゲーム開発になれば実力を示すであろう

  • デスクトップPC2
    特に使ってない。。。 1080と1080Ti 構成。だってGPU安かったんだもん・・

  • Windwsノート RazerBlade
    メインPC。ゲームも出来るし開発もできるし ハイスペック

  • Macbook 新顔。iOS開発や、Golang開発、Rust開発等に
    DockerあればWindowsでもたいていの仕事できるけど、他の人にあわせてMacの方が楽な場合もある

  • Windowsノート
    ゲーミングPC。従業員用に必要になったら貸す

  • WindowsタッチパネルPC ジムで動画みる用。スペック低いので 使ってないが安いからいいか

  • Fujitsuノート 世代古いので重いけど、普通に使う分には十分
    全く起動してないからそろそろ捨ててもいいな