時期MacOSから OpenGL、OpenGLES、OpenCLがdeprecatedに
3D業界激震
前からAppleがOpenGLを捨ててMetalのみになるという噂があったけど
ついきにました
Macの説明としては、OpenGLよりも速度の早いMetalを使ってくれ
ってことだと思うけど
今までほとんどのOSで動く唯一の規格 OpenGLだったわけで
例えば教育機関ではOpenGLで授業していた所もおおく、色々と問題が出そう
授業用のPCにMacを導入した学校は 数年後にOpenGLが動かなくなる事を考えると頭が痛そう
OpenGLは、Windows、Mac、Linuxで動き、姉妹品のGLESはAndroid、iOS。ブラウザではWebGL
クロスプラットフォーム頑張ってたし
高レイヤーの3DAPIなので、パフォーマンスは良くないけど、非常に簡単だった
ただ、個人的には 低レイヤーの高速APIが好きなので
いっそのこと
WindowsはDirectXに戻り
AppleはMetal
Android、LinuxはVulkan
と、より専門的な時代に戻ってくれても いいんだよね
もっぱら心配なのは、iPhone、ブラウザへの影響
今の所 iOSで GLESがDeprecatedになるという話や、SafariからWebGLが消えるという話は無いが
iOSはいずれ そうなりそうなので
UNITYやUnrealは対応出来るとして
cocos2d-xや 自作エンジンへの影響が心配
ますますゲームエンジンは汎用的な UNITYとUnreal独占時代になるのか・・・
しばらく 様子見です
プーケットタウン
旅をしながら仕事をする、トラベルワーカー
始まりは15年前の プーケット パトンビーチ1ヶ月
その後 10年前にプーケットタウンで1ヶ月と
私のトラベルワークに欠かせないのは プーケット
そんなプーケットタウン あまり写真取ってないんだけど、紹介
プーケットはタイ王国最南端の島。タイ王国最大の大きさの島だけど、橋がかかり本土と陸続き
13年ぐらい前には日本から直行便あったんだけど、スマトラ地震の影響で、観光客が一気にいなくなり
今は バンコク等から乗り継ぎが必要
LCCだとエアアジアXが就航している。セールで買えばバンコクまで 往復2万2千ぐらい。 通常だと3万ちょっと
通常だと タイ航空等
主な産業は ビーチリゾート。今回はビーチにいってないので割愛
プーケットタウンは、旅行者は少ないが地元の人々が暮らすメインタウン
プーケットはマレーシアと隣接し、歴史上もマレーシアと何度も領土奪い合った影響で
マレー文化、マレー人、イスラム教徒が多い
また、中国の福建州の華僑も多く、道教なども見られるし、プーケットタウンには大きなチャイナタウンがある
タイの人はほぼ全員 仏教徒
過去に 錫貿易で栄えた関係で、オランダ文化も融合していて、意外にインターナショナルな雰囲気である
西洋と中国の文明が合体した建物も多い
数年前にお亡くなりになった プミポン国王を国民は非常に尊敬しており
国のいたるところに国王の肖像画がかざられている
某国のような強制的なものではなく、本当に国民に敬愛されていた 立派な国王様です
食べ物は基本的にはタイ料理だが、バンコクに比べると
唐辛子が強い(調整可能)、甘さや酸味は弱く優しい、 物価は圧倒的に安い、温度も高い、スコール激しい、ムスリム食多い、中華料理あるので辛いの苦手でも大丈夫
そして、とにかく、シーフードがうまい
食事はだいたい50-60バーツ(約200円)で一人分。100バーツ食べるとお腹が苦しいぐらい
ios開発にRustを使う 環境構築編
iOSでは、Objective-C(C++も書ける)、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をインストールする
ios、iosシミュレータ用のToolChainのインストール
rustup target add aarch64-apple-ios armv7-apple-ios armv7s-apple-ios x86_64-apple-ios i386-apple-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-CはC++と互換性があり そのまま実行できる
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 とコンソールに出るはずだ
Github断捨離
GithubがMicrosoftに買収されるというニュースがありましたね
個人的にはMicrosoftは嫌いじゃないし、ここ10年はOSSに非常に貢献していて良い会社なので期待してますが
やはり世の中では不安視する声もありますね
Microsoftでいえば、Skypeを買収したあと、アンチMSのせいなのかMSのせいなのか存在感が薄くなりました
他社だと Javaを買い取った後、サポート契約が必須になるとかならないとか・・Open性が低くなったような・・・
そんなタイムリーなのでGithub整理しました
まだ断捨離足りてないけど、いらないプロジェクト、Forkを減らしました
とりあえず、仕事用の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回は海外にいき トラベルプログラムすることにしている
良かったこと
自分のペースで仕事ができ、私の場合はオフィスより効率がよい
仕事のストレスも、青い空をみれば消えてなくなる
食べ物美味しい、果物美味しい、日本の良さ再確認できる
特に経営をするうえで、海外情勢を知ることは重要だ
ベトナム人は真面目とか、海外では日本にないサービスがあったり、こんなサービスがあれば便利など
アイディアも出てくる
また、現在ベトナムの会社と仕事をしているが、日本のエンジニアも今後どんどん海外と取引をし、出張も増えるとおもうが
ベトナム出張に関して、一人で旅行するすべを身に着けているので、なにも躊躇なく仕事をうけて出張出来た
悪かったこと
わたしは とにかく英語。。コミュニケーション難しい 次は語学留学しようとおもう
Googleアドセンスでアフィブログの検証
はじめに
ブロガーになって月数十万円アフィで売上あげる!
とかは考えてない
このブログは、人のコンプレックスを煽ってクリックさせたりはしない
あくまで、会社経営する私の日記+技術ブログ
みんなに役立つ情報のみをUPしたい
もちろん ノイズが多いのはすみません
経緯
みんなが必要とする技術情報や会社経営情報を発信したい
そのためにはアクセス数にもう少し敏感になりたい
独自ドメインも取得し、ちゃんと運用したい
はてなブログは独自ドメインを使うのに有料だ
じゃあ その有料ぶんをペイしたい
Googleアドセンスつけよう
Googleアドセンスは独自ドメインしか受け付けてくれない
はてなブログではProにしなければならない
計算
Googleアドセンスは クリック率1% クリック単価30円が目安らしい
はてなブログProは月600円
ドメインや振込の手数料等はとりあえず除外し、上記だけで計算すると
月2000PV。Dailyで 67PV これが一つの損益分岐点であろう
想定としては、技術ブログゆえにコンバージョン悪いし、クリック報酬も低いので
実際にはこの3倍ぐらい、150PVぐらい必要なんだろうけどね
とりあえず上記の数値を満たせば、損益分岐として、Goかけようとおもう
実際の数値
だいたい平均で50ぐらい
ギリギリ損だが、上昇トレンドなので、頑張っていける