C++幼女先輩

プログラミング成分多め

時期MacOSから OpenGL、OpenGLES、OpenCLがdeprecatedに

3D業界激震
前からAppleOpenGLを捨ててMetalのみになるという噂があったけど
ついきにました

Macの説明としては、OpenGLよりも速度の早いMetalを使ってくれ
ってことだと思うけど
今までほとんどのOSで動く唯一の規格 OpenGLだったわけで
例えば教育機関ではOpenGLで授業していた所もおおく、色々と問題が出そう
授業用のPCにMacを導入した学校は 数年後にOpenGLが動かなくなる事を考えると頭が痛そう

OpenGLは、WindowsMacLinuxで動き、姉妹品のGLESはAndroidiOS。ブラウザではWebGL
クロスプラットフォーム頑張ってたし
高レイヤーの3DAPIなので、パフォーマンスは良くないけど、非常に簡単だった

ただ、個人的には 低レイヤーの高速APIが好きなので
いっそのこと
WindowsDirectXに戻り
AppleはMetal
AndroidLinuxはVulkan
と、より専門的な時代に戻ってくれても いいんだよね

もっぱら心配なのは、iPhone、ブラウザへの影響
今の所 iOSで GLESがDeprecatedになるという話や、SafariからWebGLが消えるという話は無いが
iOSはいずれ そうなりそうなので
UNITYやUnrealは対応出来るとして
cocos2d-xや 自作エンジンへの影響が心配

ますますゲームエンジンは汎用的な UNITYとUnreal独占時代になるのか・・・

しばらく 様子見です

プーケットタウン

旅をしながら仕事をする、トラベルワーカー
始まりは15年前の プーケット パトンビーチ1ヶ月
その後 10年前にプーケットタウンで1ヶ月と
私のトラベルワークに欠かせないのは プーケット

そんなプーケットタウン あまり写真取ってないんだけど、紹介

プーケットタイ王国最南端の島。タイ王国最大の大きさの島だけど、橋がかかり本土と陸続き
13年ぐらい前には日本から直行便あったんだけど、スマトラ地震の影響で、観光客が一気にいなくなり
今は バンコク等から乗り継ぎが必要
LCCだとエアアジアXが就航している。セールで買えばバンコクまで 往復2万2千ぐらい。 通常だと3万ちょっと
通常だと タイ航空等

主な産業は ビーチリゾート。今回はビーチにいってないので割愛

プーケットタウンは、旅行者は少ないが地元の人々が暮らすメインタウン
プーケットはマレーシアと隣接し、歴史上もマレーシアと何度も領土奪い合った影響で
マレー文化、マレー人、イスラム教徒が多い
また、中国の福建州の華僑も多く、道教なども見られるし、プーケットタウンには大きなチャイナタウンがある
タイの人はほぼ全員 仏教徒
過去に 錫貿易で栄えた関係で、オランダ文化も融合していて、意外にインターナショナルな雰囲気である

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQIIrrmYoiPA-MhwkSk-hyjqskRbhlop9e2uZRNZ8-HzRNGNDVQ

西洋と中国の文明が合体した建物も多い

数年前にお亡くなりになった プミポン国王を国民は非常に尊敬しており
国のいたるところに国王の肖像画がかざられている
某国のような強制的なものではなく、本当に国民に敬愛されていた 立派な国王様です

食べ物は基本的にはタイ料理だが、バンコクに比べると
唐辛子が強い(調整可能)、甘さや酸味は弱く優しい、 物価は圧倒的に安い、温度も高い、スコール激しい、ムスリム食多い、中華料理あるので辛いの苦手でも大丈夫
そして、とにかく、シーフードがうまい

食事はだいたい50-60バーツ(約200円)で一人分。100バーツ食べるとお腹が苦しいぐらい

ios開発にRustを使う 環境構築編

iOSでは、Objective-CC++も書ける)、Swift しか使えません
が、C++の 異言語間インタフェース FFIを使えば、Objectibe-CやSwiftから C++を通して Rustを実行出来ます
そのための環境構築

とりあえず xcodeでのビルドを行う

Rustのインストール

Rust自体は パッケージマネージャから出来るが、その場合だと Rustのバージョン管理などが不便なので
もしインストールしている場合は 一旦削除し、Rustupをインストールする

環境構築は下記参照
Building and Deploying a Rust library on iOS

書いてる通り実行すれば出来るけど一応簡単に

xcode build toolのインストール

xcode-select --install

にて、xcodeのインストール

rustupのインストール

curl https://sh.rustup.rs -sSf | sh

rustupをインストールする

iosiosシミュレータ用のToolChainのインストール

rustup target add aarch64-apple-ios armv7-apple-ios armv7s-apple-ios x86_64-apple-ios i386-apple-ios

iosだけでなく、iosシミュレータも入れておくと開発が楽

Cargoのインストール

cargo install cargo-lipo

パッケージマネージャ&ビルドツールのCargoは是非入れておくべきだ

環境変数

bash_profile 等に cargoのパスの設定が入るので、sourceして環境変数を読み込み直す

source ~/.bash_profile

サンプル

これまた、上記URLのとおりにすればよい

Rustファイル作成

lib.rs

use std::os::raw::{c_char};
use std::ffi::{CString, CStr};

#[no_mangle]
pub extern fn rust_greeting(to: *const c_char) -> *mut c_char {
    let c_str = unsafe { CStr::from_ptr(to) };
    let recipient = match c_str.to_str() {
        Err(_) => "there",
        Ok(string) => string,
    };

    CString::new("Hello ".to_owned() + recipient).unwrap().into_raw()
}

#[no_mangle]
pub extern fn rust_greeting_free(s: *mut c_char) {
    unsafe {
        if s.is_null() { return }
        CString::from_raw(s)
    };
}

Rustの文法は今回は省略
rust_greeting関数は 引数に文字列を受け取り "Hello " を頭につけて返す
rust_greeting_freeは 作成した文字列を開放する

FFI用ヘッダ

greetings.h

#include <stdint.h>

const char* rust_greeting(const char* to);
void rust_greeting_free(char *);

上記のRust関数を呼び出すためのヘッダである

toml

Rustのビルドのしかたを教えなければならない

Cargo.toml

[package]
name = "greetings"
version = "0.1.1"
authors = ["fluffyemily <fluffyemily@mozilla.com>"]
description = "Example static library project built for iOS"
publish = false

[lib]
name = "greetings"
crate-type = ["staticlib", "cdylib"]

今回は、ライブラリを作成するので、create-typeは スタティックライブラリとダイナミックライブラリを指定した

rustのビルド

cargo lipo --release

lipoを使うと便利である
今はToolChainに iOS関連をいれているので、それらがビルドされる
また、Universalライブラリという、全てのToolChainのライブラリがまとまったものが作成されるので
それを指定すれば、エミュレータでも実機でも、32bitでも64bitでも 設定変更不要で便利だ

xcodeでプロジェクト作成

とりあえずSinglePageプロジェクトを作成し
先程の作成した Universalライブラリと、libresolvをリンクする
また、リンクパスに Universalの場所を指定する

Swift Bridgeファイル

RustからC++へのブリッジは 上記 ライブラリ作成でC++とアクセス可能だ
Objective-CC++と互換性があり そのまま実行できる
SwiftとC++を相互呼び出しするために Bridgeを作る

#ifndef Greetings_Bridging_Header_h
#define Greetings_Bridging_Header_h

#import "greetings.h"

#endif

この、greetings.hは 先程作った Rust関数のC言語ヘッダである
importで怒られると思うが、ヘッダのSearchPathを追加すれば良い

Swiftコード作成

RustGreetings.swift

class RustGreetings {
    func sayHello(to: String) -> String {
        let result = rust_greeting(to)
        let swift_result = String(cString: result!)
        rust_greeting_free(UnsafeMutablePointer(mutating: result))
        return swift_result
    }
}

RustのBridgeをした関数 rust_greeting、rust_greeting_free を呼び出すWrapクラス
多少面倒だが、こうやって呼び出すことが出来る

これを実行するために ViewControllerの viewDidLoadedに 上記を呼び出すコードを書く

let rustGreetings = RustGreetings()
print("\(rustGreetings.sayHello(to: "world"))")

実行

実行すると Hello World とコンソールに出るはずだ

連絡は YukiMariaMiyatake@gmail.com

良い情報を発信していきたいので、寄付頂ければ幸いです

BTC 3ByW6y2P6FdM2ppzyV7RxSspRvDZ6toJmK ETH 0xf00bf0af1a7ade73ece45f06c946e2880406e1d0
MONA MBwkuhZV1c1LrXnD34DjU46bu4jMcuwMgp

作っているOSSメモ - C++幼女先輩

Github断捨離

GithubMicrosoftに買収されるというニュースがありましたね
個人的にはMicrosoftは嫌いじゃないし、ここ10年はOSSに非常に貢献していて良い会社なので期待してますが
やはり世の中では不安視する声もありますね
Microsoftでいえば、Skypeを買収したあと、アンチMSのせいなのかMSのせいなのか存在感が薄くなりました
他社だと Javaを買い取った後、サポート契約が必須になるとかならないとか・・Open性が低くなったような・・・

そんなタイムリーなのでGithub整理しました
まだ断捨離足りてないけど、いらないプロジェクト、Forkを減らしました

github.com

とりあえず、仕事用のPrivateは大量にあるし、使わないだろうForkも多いですが
Publicな個人プロジェクトは減らしました
(Teamはまた今度・・)

そんな 個人プロジェクト紹介(といってのコードかいてないけど)

AsyncBotCrawler

C++でHTTP、HTTPSをクロールするサンプル
知人に、C++じゃWebクロール難しいと言われたので作った
boost::asioつかっているので std::network に変更したいなー
ヘッダちゃんと入れてないので、そこも調整したい
まだサンプルすぎて 実用性あるものじゃないです

UnityLesson

会社のメンバーが、UNITYのシェーダーまわりがわからないというので、作った
シェーダーを歴史をさかのぼりつつ、ちゃんと教えようという教材
とりあえずはトゥーンレンダリングを目指す
完成すれば実用性あるとおもう

UnityRenderer

当時のUNITYのベータ版の新機能のテスト
RenderLoopを自分で作れるのだけど、そのあたりとか・・
今は安定したかな??

redispp

今はわからないが、Redisにおいて、非同期で動くライブラリが libevent系のC言語しかなく
boost::asioや std::network 向けのC++がなかったため、作ろうと思った
ただし その後のプロジェクトの方向性で不要になったため、現在なにもなし
作りたいなー

Puer

DirectX11のサンプル
OpenGLしか知らない人向けに
でも時代はDirectX12とかVulkanとか。。
知識はあるが 手が回らない辛い所

旅行しながら働く方法と実際

トラベルプログラマ

キャリアスター

実は最初からフリーランスであった
フリーランス仲間であつまり、共同で事務所を借りて
フリーランスの営業が仕事もってきて、チーム組んで開発していた

さかのぼる事15年前

もともとフリーランスではあったが、ネットワークの設計監理の仕事を請けた
当時東京に住んでいたが、長野県内のネットワークの設計監理のため
長野県に家を借りて出張していた
そこで、マニュアルを作り教育をし、運用は現地スタッフで出来るようにした後、わたしは設計とツール作成のみになった
東京に戻り、チャットで会話しつつ、設計を作り送るというリモートワークが可能になった
そこで思いたち、タイのプーケット パトンビーチに ノートPCとモデムを持って旅行にいった
15年前の当時は、タイをはじめ多くの後進国ではインターネットはなく電話回線で繋ぐ必要があった
今では後進国でもWifiがあるので問題ないが
国についたらまず 電話会社に加入して、宿で電話回線をひっぱってもらった
プーケットは日本と時差が2時間しかなく、昼間はとても暑いため
朝ごはん食べたら ホテル内に引きこもり仕事をし、夕飯を食べに出る
そんな毎日だった

最初は普通のホテルに2週間滞在した。知人紹介や長期で 1日5千円程度とお安くしてくれた
家事全般しなくていいし、物価は安いし、食べ物美味しい。仕事には何も困らない

その後、ビーチから離れ 市街地に近い安宿。1週間で3000円ぐらいの宿に2週間泊まったが
こちらも、直ぐ近くにメガマートがあり、快適に仕事ができた

再び常駐

ゲーム開発に戻り 常駐して開発をする

自社パッケージ

自社パッケージを作りたいというお客様より持ち帰れる仕事をもらう
最初は 再びプーケットで1ヶ月トラベルプログラマをし、実家に帰った

再び常駐

常駐で大手にはいって働き始めた
その時に 税金対策で今の会社をつくった
会社の経営が一時的に悪くなり SESから請負に変更し、なし崩し的にリモート開発が可能になった

なし崩し的リモートワーク

仕事も当時はスマートフォンが流行りはじめで、ノートPC1つで仕事が出来る時代であった
また、サーバも オンプレからクラウドに移行期で、サーバも持ち帰りしやすくなっていた

その後も、スマートフォンゲームの流行とともに、ずっとリモート開発が出来るようになり
実家、名古屋、山梨、セブ、台湾、インドネシアベトナム、マレーシア、香港、タイ・・・ と、ノートPC1つで仕事をする

会社を作ったこともあり、個人より大きな案件を持ち帰る事が可能になったのが 意外に大きかった
また、数名 フリーランスを内部に囲ったため、個人では出来ない再委任が、会社でうければ可能になり
旅行中に客先にいく仕事がある時は 彼らに頼むことが可能だったのも大きかった

再び常駐

大手案件でIPがからむため 持ち帰り不可能で緊急ではいった

現在

やはり プーケットで仕事をしている
2ヶ月に1回は海外にいき トラベルプログラムすることにしている

良かったこと

自分のペースで仕事ができ、私の場合はオフィスより効率がよい
仕事のストレスも、青い空をみれば消えてなくなる
食べ物美味しい、果物美味しい、日本の良さ再確認できる

特に経営をするうえで、海外情勢を知ることは重要だ
ベトナム人は真面目とか、海外では日本にないサービスがあったり、こんなサービスがあれば便利など
アイディアも出てくる

また、現在ベトナムの会社と仕事をしているが、日本のエンジニアも今後どんどん海外と取引をし、出張も増えるとおもうが
ベトナム出張に関して、一人で旅行するすべを身に着けているので、なにも躊躇なく仕事をうけて出張出来た

悪かったこと

わたしは とにかく英語。。コミュニケーション難しい 次は語学留学しようとおもう

ゲームがとにかく恋しくなる。任天堂Switchぐらいなら持ってこれるけどPS4は無理。毎日イベントの事が気になる

Googleアドセンスでアフィブログの検証

はじめに

ブロガーになって月数十万円アフィで売上あげる!
とかは考えてない
このブログは、人のコンプレックスを煽ってクリックさせたりはしない
あくまで、会社経営する私の日記+技術ブログ
みんなに役立つ情報のみをUPしたい

もちろん ノイズが多いのはすみません

経緯

みんなが必要とする技術情報や会社経営情報を発信したい
そのためにはアクセス数にもう少し敏感になりたい
独自ドメインも取得し、ちゃんと運用したい
はてなブログ独自ドメインを使うのに有料だ
じゃあ その有料ぶんをペイしたい
Googleアドセンスつけよう
Googleアドセンス独自ドメインしか受け付けてくれない
はてなブログではProにしなければならない

計算

Googleアドセンスは クリック率1% クリック単価30円が目安らしい
はてなブログProは月600円
ドメインや振込の手数料等はとりあえず除外し、上記だけで計算すると
月2000PV。Dailyで 67PV これが一つの損益分岐点であろう
想定としては、技術ブログゆえにコンバージョン悪いし、クリック報酬も低いので
実際にはこの3倍ぐらい、150PVぐらい必要なんだろうけどね

とりあえず上記の数値を満たせば、損益分岐として、Goかけようとおもう

実際の数値

だいたい平均で50ぐらい
ギリギリ損だが、上昇トレンドなので、頑張っていける