ofRandom(min, max)はmaxを返すか問題

ofRandomっていつも最大値含むか忘れるんだよなー.
と思った事から始まったこの問題.

ぱっとソース眺めて

rand() / (RAND_MAX + 1.0f)


なるほど. そうかそうか, 含まないな.

と思ったのだけどなんか不安になって確認したら
RAND_MAX / (RAND_MAX + 1.0f) == 1.0f
がtrueだと?

ということで@torutoruと色々floatの表現とか調べたりしてて

float f = RAND_MAX + 1.0f, g = RAND_MAX;
if(f == g) printf("Fuck!!");

Fuck!!

oh…

ということで32bit floatだと精度落ちするんですね.
なんで static_cast<float>(RAND_MAX) じゃないのかが分からない.

と思ってたら,

@2bbb Visual StudioだとRAND_MAXが0x7fffなので環境依存バグっぽいです。 https://msdn.microsoft.com/ja-jp/library/2dfe3bzd.aspx …
解決むずかしいですね。変に結果をいじると確率変わっちゃいますし。

(http://twitter.com/novogrammer/status/588670294304296961)と.

これは環境依存バグだなーと.

ただ, 正解が分からない. ソースのコメントも minからmaxの範囲の, 的な曖昧なことしか書いてなくて, [min, max] なのか [min, max) なのかがはっきりしない.
のでVisual StudioとXcodeのどっちが狙った結果なのかも分からない.
[min, max] だったら static_cast<float>(RAND_MAX) とかにすれば良いし, [min, max) だったら (RAND_MAX + 1.0) とかにすれば取り敢えず大丈夫な気はする.

とかまあ色々考えてたんだけど,

for(int i = 0; i < RAND_MAX; i++) if(1.0f == i / (RAND_MAX + 1.0f)) c++;


63を返すし, まあ, 問題の領域は 63/2^31 で大体 0.0000029% の確率と.

そして, やりたいことは

ofColor c;
c.r = ofRandom(256);


的ながやりたいだけなので, どうせオーバーフロー起こして大体問題無いんですよねー. ってことに気付きました.まあ,

c.r = ofRandom(255.999f);


くらいにしとくのが妥当なのかなー.

ということで頑張ってissue立てました. 英語通じるかなー…

結論: 英語難しい.


追記:

https://github.com/openframeworks/openFrameworks/issues/3762#issuecomment-93818052

最新のレポジトリの`ofMath.h`には
A random number in the range [0, max) will be returned.
って書いてあることに気付きました. まさにその情報が欲しかったの…
ちゃんと見なきゃですね…

ただ, それでも

rand() / (RAND_MAX + 1.0f);


が環境によっては1.0fを取り得るということは変わらないので修正してPR投げようと思います.
全部同じコードが直書きで使われてるから ofRandomf() にinline付けてそこだけ1.0に修正して他を差し替えたいところ.

oFからiMessage

↓ まだ実際は試してないけど多分出来る.

tell application "Messages"
  launch
  send "Hogehoge" to buddy "電話番号" of service "E:iCloudアカウントのメールアドレス"
end tell


+
ofxAppleScript
=
oFからiMessage送れる.(ただ色々問題あり[†])
時と場合によっては監視に使えるかも.

参考:
http://takuya-1st.hatenablog.jp/entry/2014/12/03/231208
https://discussions.apple.com/message/19663325

† 色々問題ありというのはiMessageアプリが起動すること, プゥンって鳴ること, 通知とか切っとかないと(アカウント自分の使うと)右上に出たりする可能性があること.

****

試したら遅れたのでofxAppleScriptアップデートしました⭐︎☆⭐︎

山口旅行記: 僕の20代の本当の終焉

facebookで書いた奴まとめ

2015/01/12

やっぱもう一日くらい山口滞在して色々回ろうかな. なんか, やっぱ俺のルーツは福岡じゃなくて山口にある気がする. 勿論福岡にもあるんだけど, 今の俺があるのは山口のお陰なんだって気がするんだよね.
なんか, 12年前にYCAMを知った時の何かを, もっかい見れるんじゃないか, みたいな, 変なノスタルジイというか, センチメンタルというか, そんな物を感じるんだよね.
たまたま中村洋介と会ってダラダラ話しちゃったり, そういう時間をもう一日くらい探しても良いよね.

2015/01/13

今日は留年した時に転がり込んだバイト先の当時の店長と昼飯食って, 大学/大学院の頃の研究室の先生, お世話になった学科の先生とゆっくり話し込んだ. 先生のゼミに顔を出しなよって言われてちょっと顔を出したら急遽プレゼンをさせられるおまけ付き.
なんだか既に30歳になった僕の20代を終わらせる旅をしてる気もする.
なんだろう, うまく言葉で表せないけど, でも少しすっきりした.
明日, YCAMの伊藤さんときちんと話せたら僕はきっと30歳になれるような気がする.

2015/01/14

たくろーさんから「石井君, 子供いるんでしょ?」っていう謎の誤解を受けてたのが今日のハイライトになりそうです.

2015/01/24〜2015/01/26

山口から東京に「帰って来た」ときに感じる現実に引き戻された感と言ったら.
数年前まで山口がご飯食べて洗濯して寝るところで, 東京はお祭りの会場だったのに感覚はいつの間にか当たり前だけど真逆になってしまってて, 山口に行った時に感じる安心感と東京に帰ったときに感じる日常としての安心感は違う種類.

YCAMで出会う懐かしい人達から親戚のおばちゃんに「大きくなったねー」と言われるかの様に, 「石井君も偉くなってねぇ。まさか石井君が働くとは。」と. 実際学生だったから半分ニートみたいなもんでしたけども, 脱ニートに成功して5年くらい経ちます.
あの頃Arukで100円で買った10枚入り(後に100円で8枚入りにボリュームダウンした)のマジックフレークのピーナッツバター味で3日くらい生きてた僕も今は大人になって2日一回はコンビニ弁当なり牛丼なりを食べられる様に成長しました.

生きてたんだから当たり前なんだけど, YCAM周辺だけでも本当に多くの人にお世話になってたんだなーと. でも人間って残酷で色んな人にお世話になったのに会うまで思い出せない人も居たり.
でも, それは前回思った様々な場所に実際に行くことが切っ掛けで些細な出来事が大量に思い出されるのと一緒で, 会った瞬間に色んなことがフラッシュバックしたりして, 存在すら忘れててごめんなさいなんだけどまた会えて良かったっていう人達を沢山思い出すことが出来た.
多分またすぐ記憶から薄れていっちゃうんだけど.

僕が住んでた山口は相変わらず暗くて, やっぱり何も無い道でも躓きそうになるんだけど, 宇部空港からタクシーでYCAMまで行ってたときも相変わらず田舎だなー, 暗いなー, とか思ってたらいつの間にかデカいTSUTAYAとかTully’sとかがあって一瞬自分がどこを走ってるのか分からなくてパニックになってたらなんてことはない薄暗くてコーヒーが不味いジャズ喫茶ポルシェのちょっと手前で.

Frankに行くとき僕らの高級料理屋フラカッソがビッグボーイに変わってて基君に「僕が初めて来た時からここはずっとビッグボーイだった」と言われてここも少しずつ僕が知らない山口市になっていってるんだなって思ってFrank着いたら禁煙になってて初めて僕がライブをやったスペースは無くなって何か物を売ってて, でもお金が無いときにマッシーに連れてかれてFrankでご飯食べてお金払おうとしたら「石井君からお金なんかもらえんちゃ」とか言ってタダで飯食わせてくれたりしたノブさんは厨房に居て手を振っても一瞬気付いてもらえなかったけどやっぱり「大きくなったねー」みたいなことを言われながらちゃんとキャッシュオンでお金払いながらビール飲んだり.

で, ビール飲みながら伊藤さんと話してたら僕が当時YCAMで問題児扱いされるようになった事件の話をされて何かちょっと話が歪んで伝わってることに気付いて11年越しで訂正したりしたんだけど, やっぱりあのとき僕は間違ったことはしてないと思うし, 結果論だけどあのとき財団から説教されて問題児扱いされてサポートスタッフからハブられたから明日香さんに拾ってもらってラボに堂々と潜り込める権利を得たし, 何言ってるか分からない変なリッチーとも出会えたし, Refined Colorsのドキュメント撮影のお手伝いして大度さんと知り合ったし, 何もかも間違っちゃいないんだなって. 結果論だけど.

そんな最高の閉塞感漂うクソ田舎山口と最高の環境YCAMに僕が出来る恩返しは最高の閉塞感漂うクソ田舎山口に最高の環境YCAMっていう場所があったお陰で今の僕があるんだってことを偉そうに語れちゃったりする様に偉くなることかな?とか. 頑張ろ. 30歳になりました.

iPhoneのホーム画面構築

最近大きいiPhoneことiPhone Ventiに変えて気付いたんですけど, みんな漠然とよく使うアプリを左上に配置してませんか?
電話とかGmailは下のDockの上にあると思うんですけどTwitterとかFacebookとかカメラアプリとか.
でもね, 気付いたんですよ. これ, 右下によく使うアプリ置いた方が楽だって.
これマジささやかなライフハック. 一度お試しあれ.

ofxJpegGlitch解説

ofxJpegGlitch (http://github.com/2bbb/ofxJpegGlitch/) の解説記事です.

参考にしたのはこちらのサイト. http://www.setsuki.com/hsp/ext/jpg.htm
jpgのフォーマットの解説ですね.

取り敢えず, jpgのフォーマットをきちんと読みたい.

一番大外の構造としてはJFIFって構造があると. 0xFFD8ってバイト列で始まって0xFFD9ってバイト列で終わればよろしいと.
で, そういう0xFFXXという2バイトのデータをマーカーと呼ぶらしい, と.
マーカーをマジックナンバーで書くと混乱するので2バイト目を定数化しましょうってのが JpegConstant.h ですね.
ここのMarkerType ofxJpegGlitch::calcMarkerType(unsigned char *bytes, int cur) で unsigned charでマーカーの値書いてenumの名前返してるのも頭悪いなーとは思ってるのでそのうち何とかしたいですね.

で, 0xFFD8〜0xFFD9の間のデータはどういう構造してるかっていうと

マーカー: 2byte
データ長: 2byte
実データ部: データ長で表されたバイト数


っていうセグメントに分かれてる, と.

ということは大雑把なフローはここで決まって

bytestream *stream = /* jpgファイルストリーム */;
データ marker = /* 2バイト読み込み */;
if(marker != 0xFFD8) exit("これjpgちげーよバカ");
while(true) {
    データ marker = /* 2バイト読み込み */;
    MarkerType mt = getMarkerType(marker);
    if(mt == MT_UNKNOWN) exit("マーカーおかしいよ");

    if(mt == 0xFFD9) break; // 終了マーカー

    int32_t length = /* 2バイト読み込み */;
    データ data = /* lengthバイト読み込み */l
    switch(mt) {
        /* セグメントタイプによる諸々 */;
    }
}
/* ファイル書き込み */

ってことですね. あとはどこを壊せば美味しいか, どこを壊しちゃ駄目かを知れば宜しいと.

まあ, ヘッダーデータ壊すとあんまり良く無さそうですよね. 画像サイズとか壊すのも一興ではあるけど取り扱いめんどくさくなりますよね. メターデータ壊しても絵には影響しないし.
APPn系マーカーはAPP0のJFIFデータくらいしか読まなくても良さそうです.
APP0
ぶっちゃけAPP0も読まなくても良いくらいです. ここら変壊すと地雷臭もします. JFIF識別子壊しちゃいけませんし, サムネイルイメージとか今の僕らには関係ありません. 壊したければ壊してみれば良いですね. それは自由です.
APP1のEXIF改竄したら浮気した時に言い訳したりするのに使えるかも知れませんがそもそも浮気しちゃ駄目です.

で, 色々あるんですが取り敢えず飛ばしてSOSマーカー以降のデータ部分, こいつは幾ら壊しても結構ですがあんまり壊し過ぎるとグレーになって面白くないので節度を持って壊しましょう.

そうそう, 壊すって適当に言ってますが実際適当で良いです.
どんくらい適当かっていうと

data[cur] = rand() % 256; /* rand() & 0xFF って書くとオールドスクールっぽい*/;

くらい適当で良いです.
(ちゃんと壊したかったらもっとちゃんと符号化の方法まで調べてみるのも楽しいかと思います.)

で, だいぶ説明がめんどくさくなってるのですがここがある意味yoppa氏の入門記事: 画像をグリッ (54ページ目)との違いで, DQTとかDHTの部分. 量子化テーブル定義(Define Quantization Table segment)とハフマン符号テーブル定義セグメント(Define Huffman Table segmet)ですね.
こいつらがjpgフォーマットの肝なので心して壊してください.
説明はめんどくさいんで超完結に書きますが, DQTとかDHTのセグメント形式見て実データ部分(DQTだったら量子化因子QF00〜QF77くらい, DHTだったら各コード長のコード辺り)を丁寧にrand() % 256;で壊します.
そこらへんはofxJpegGlitchでsetDataGlitchness(0);してやってデータ部分を壊す可能性を0にしてsetQNGlitchnessとかsetDHTGlitchness辺りだけ変えてやってみると多分なかなか簡易グリッチではお目に掛かれないjpgグリッチが出るかと思います. (運が良いと簡易でも見れます)

あとは雰囲気で.

で, まとめとして, ofxJpegGlitchは単純に適当な位置をrand() % 256;するのとは違って, きちんとインテリ眼鏡な感じでフォーマットに従ってお上品かつ気品ある壊し方をすることによって壊したらjpg読み込めないぜって可能性を減らし(その可能性は0では無いです. この世は数学以外で絶対なんて言葉は存在しない.), コントロールパラメータを3つ(Data, QN, DHT)に増やしたことによって表現の幅を多少広げたことにある, と, いうことにしています. 知らんけど.

まあ, jpgグリッチなんて基本的にバカでも作れるんだけど地方底辺国立大学程度の学力で壊したらどうなるかっていうこと試した感じですね.

ソースコードはテンプレートゴリゴリboost黒魔術ゴリゴリの難しいC++ではなくて愚鈍な低レベルCなので頑張れば読めるはずなので上に書いてあることを踏まえてコードリーディングしてバグ見つけてPRしてくださいね.

以上.

iOS8でハマったこと.

以下の情報は物凄くちゃんと調べたわけでは無いのでご注意ください.
ちなみにXcodeはVersion 6.0.1 (6A317)での話. (後々古くなったときの為に追記)

Anti Taggingが動かない.

そんな一報から僕の平穏は終わった.
それは大変だ, でも俺のiPhone5sだと普通に動いてるし5cでも動いてるぞ?
まさか, あいつのせいか…

あいつというのは言うまでもない, iOS8へのアップデートである.
以前, 想ひ出ブレイカーがiOS7に上がった瞬間pngフォーマットで壊す事が出来なくなった辛い過去を持つ僕はすぐに気付いた.

しかし, 今僕の手元にはiOS8環境が無い. 持ってる端末をアップデートしてしまうとあと一年はiOS7対応もしなければならないので僕にiOS開発の仕事が来なくなって餓死してしまうからそれだけは避けなければならない…
more大きいiPhone, iPhone VentiことiPhone 6 Plusを9/12に発注したんだ, もうすぐ届くさ.
そう思って一週間, やっと届いた.

そろそろ物語調も疲れたので普通に.

まずやったことはAnti Taggingのjpgグリッチ→読み込み部分をUIImageJPEGRepresentation[UIImage imageWithData:]のlibjpegへの差し替え. 正確にはlibjpeg-turbo.
ここはすんなり行った.
imageWithData:で壊れたjpegデータを読み込むときに物凄く敷居が高くなってたのは回避.
しかし, 如何せん画像データがおかしい. 1pxが3byte or 4byteとか縦横のサイズ間違えたとかそんなん比較にならない程斜めってたりする. かと思えば意外と斜めってないこともある.
なんだこれ, と思ってCGImageRefをダンプするコードを書いてみた所

CGImageGetWidth:  648
CGImageGetHeight: 820
CGImageGetColorSpace:  (kCGColorSpaceDeviceRGB)
CGImageGetBitsPerPixel:     32
CGImageGetBitsPerComponent: 8
CGImageGetBytesPerRow:      3840
CGImageGetBitmapInfo: 0x00002006
  kCGBitmapAlphaInfoMask     = YES
  kCGBitmapFloatComponents   = NO
  kCGBitmapByteOrderMask     = 0x00002000
  kCGBitmapByteOrderDefault  = NO
  kCGBitmapByteOrder16Little = NO
  kCGBitmapByteOrder32Little = YES
  kCGBitmapByteOrder16Big    = NO
  kCGBitmapByteOrder32Big    = NO


みたいな. (上のデータは飽くまでも雰囲気)
注目すべきは CGImageGetWidth * CGImageGetBitsPerPixel / CGImageGetBitsPerComponent != CGImageGetBytesPerRow になってること.
顔の部分をクロップしてるんだけど, 横がおかしい.
何度かやってみてwidth, heightはちゃんと変わってるけどCGGetBytesPerRowが3840固定になってるっぽい.
クロップは CGImageCreateWithImageInRect でやってたんだけど, こいつが返すCGImageRefは与えたrectをメタ情報的に持って元のピクセルデータは元の画像のをそのまま参照してるんじゃないかと憶測. 縦に切り出すのはmemcpyでさくっといけるけどwidth側はheight分切り出してくっ付けてみたいな作業居るし大変だしね, うんうん. とか思いつつ, context作って素直に切り出し部分をきちんと生成するように変更.
具体的には

CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, rect);
UIImage *cropped = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);


みたいなのを

UIGraphicsBeginImageContext(rect.size);
[image drawInRect:CGRectMake(-rect.origin.x, -rect.origin.y, image.size.width, image.size.height)];
UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();


みたいな感じに変更してみた.

うん. うまく行った. よしよし. 申請だ!
Xcode6での申請も色々はまりましたがprovとcertな問題だったので割愛. というかよく分かってないけど申請出来たから良いんだよ.

そして満足して海外で幾つか紹介されてるのニヤニヤしてたんだけど気付いてしまった.
想ひ出ブレイカーもjpg壊れねーじゃねーか.

悲しい. too 悲しい. I’m too 悲し過ぎる. それは too bad.
まあ, libjpeg-turboのビルドおじさんは済ませてるし, 想ひ出ブレイカーはクロップしねーし楽勝でしょう. ふふん. 秒殺だな.

等と思いつつ修正に入った所, ソースコードが古い. ARCじゃないし俺俺ライブラリも古いしiOS7のときにやったlibpngもarm64対応させてなかったぽいし酷い.
いや, 今は一刻を争ってるんだ, そこは目を瞑ろう. 取り敢えずlibjpegに差し替えよう.
うん. 動いた. ふー. 楽勝だったぜ. 申請するか.
その前にちゃんと一通り動作確認するかー.
およ?pngとtiffがおかしいぞ?斜めってるぞ?およ?

ということで苦悶の時間.
現実逃避でlibpngとかもビルドし直したし俺俺ライブラリも差し替えたし, ARCにも対応させたし, でもやっぱりpngとtiffがおかしい.
それで動作が変わらない事は分かってたけども.

色々やった所, max1024に合わせるリサイズモードにしてると斜める. ふむ.

でも, まあ, 結局斜めってるんでしょ. はいはい, cgimageダンプすりゃ良いんでしょ, はいはい.
ダンプした所

CGImageGetWidth:  769
CGImageGetHeight: 1025
CGImageGetBitsPerPixel:     32
CGImageGetBitsPerComponent: 8
CGImageGetBytesPerRow:      3104

うん. なんと言う事でしょう. 突っ込みどころが二つ.
769×1025って何. あたしはmax1024でリサイズしてるのよ?ソースコード見てごらんなさいよ.

    if(withResize) {
        int max = fmaxf(size.width, size.height);
        float scale = 1024.0f / max;
        size.width *= scale;
        size.height *= scale;
    }


なのよ?あなたおかしくない?
そしてまたCGImageGetBytesPerRowがズレてらっしゃるわよ?もうやだやだ…

取り敢えずちゃんと見てみましょうよと size.width, size.height をプリンツ.

LogTrace(@"size: %f, %f", size.width, size.height);


と.

768.000027, 1024.000036


やだ, これだから浮動小数点ってば…
でも普通切り捨てるじゃん. int width = size.width だったら切り捨てんじゃん!
とは言ってもどうやらUIGraphicsBeginImageContextWithOptionsで作ったcontextは切り上げられちゃう感じなのでもう良いよと

        size.width *= scale;
        size.height *= scale;
        size.width = (int)size.width;
        size.height = (int)size.height;


とだいぶやけっぱちなコードを書いて乙事主様の怒りを鎮めたのでした. めでたしめでたし.

と思ったけどやっぱり駄目. よく考えたら想ひ出ブレイカーさん, 任意の画像読み込むんだから縦長の画像で1024にフィットさせたら横幅が8の倍数じゃない感じの厭らしい子に当たったら同じ事起きるかもしれないじゃない!
それは美しくない!!きちんと礼儀正しくぶっ壊すのがアタシの使命なの!グリッチ風とかなんちゃってグリッチとかあたし認めないの!!世に蔓延るグリッチ風画像が作れるiOSアプリなんて糞食らえですのよ!!
ってことでlibpngとかに食わせるバッファーの読み込ませ方をCGImageGetBytesPerRowを意識したお行儀の良い感じのコードに変えて上のキャストしなくてもちゃんと動く様にもしました. 1025の画像とかマジファッキンだから上のキャストも最終的にやっぱり入れたけど.

実際の所, 上の問題はちゃんと追ってないから元々UIGraphicsBeginImageContextWithOptionsで作った画像はサイズ切り上げだったけど8byteパディングされてなかったのかもしれないんだけど. まあ解決したから良し.

とは言え, ちゃんと色んなサイズで試したわけじゃないので知らないけどね. まあ, そういう壊れ方も良いじゃん?って言い張れば良いしね. うん.

てことでCoreGraphics周り地味に変わってね?
ピクセルデータへのアクセスとかそんなたき火の周りで葉っぱ食ってラリってるシャーマンみたいなことやんなよボケってApple様に言われてる様な気もしますが, 僕はピクセルデータへのアクセスが大好きですし, GLSLとかいうよく分からん化け物を手懐けて

gl_FragColor  = f(texture2D(tex, pos))


とか書くよりも

for(int j = 0; j < height; j++) {
  for(int i = 0; i < width; i++) {
    for(unsigned char c = 0; c < bpp; c++) {
      buf[bpp * (i + j * width) + c] = f(pix[bpp * (i + j * width) + c]);
    }
  }
}


とか

memcpy(buf, pix, width * height * bpp);


みたいなレガシートロンみたいなソースコードを書き続けてたいんです. 死ぬまで.

Anti Taggingも想ひ出ブレイカーももう暫くでちゃんとアップデートされるはずなのでjpgグリッチフェティシズムな方々, もう少々お待ちください.

てことで, iOS8, 地味に変わってるっぽいので皆様ご注意を.

追記:
そういえばXcode6からiOSプロジェクトとか作ったときにprefix.pchが作られなくなりましたね. マジ不便.
イカれた解決策知ってる方はご一報ください.

Anti Tagging

海外でいくつか紹介して貰ったので紹介.

AntiTagging, because faces don’t exist for making book. [DocPop.org]

Anti Tagging, An App That Detects Faces in Photos and Glitches Them Out [Laughing Squid]

L’anti tagging app ! [Graphisme]

AntiTagging app stops Facebook from identifying your face [Mirror Online]

ありがとうございます!

AntiTagging DL数遷移

僕の賞味期限

徒然.

陳列される前から賞味期限のことを考えるなんてちゃんちゃらおかしいって話はあるけど, でもそれはそれとして陳列される前に賞味期限切れちゃうのだけは避けたい.

で, たまたま最近がーひーぱいせんとゆっくり話す機会があって, 色々話したんだけど.
僕らの人生なんて高々有限なのは分かりきってることで, その中で自分の賞味期限は基本的にそれより短い.
その中で出来る限り長い間, 自分が自分らしく, 自分が好きなことを出来るか, だとか, 自分が存在してる意味を噛み締められるか, だとか, そういうことを考えてたりして, その為に今何をしていなきゃいけないのか.

プログラマーとして生きて行く為には日々精進するしか無いと思ってるんだけど, それは多分, 何か辛いことがあって電源もWiFiも無い山に三年くらい籠って霞食って生きちゃう様なことが無い限りは多分大丈夫だと思ってて, まだ30手前だし, いや, もうすぐ30ってくらいだし, まだ今は.
でも大事な問題は今後きちんと自分の存在価値を作っていくことであって, 目立つ必要は無いけど世界に埋もれちゃいけないよねっていう.
もっと世界を狭めて後ろ向きなこと言ってしまうと, 僕が愛おしいと思う人たちに好かれながら僕が愛おしいと思う事をやっていければ良いんだけど, それはクローズド過ぎるし, 最終的に生産性が無くなる未来も見えるので, まだ今はもう少しオープンに生きていたい.

で, 何がどうなってこうなったか知らないけどクリエイティブとか言われる様な業界でなんだかんだで4年くらいは生きてきて, でもまだまだ全然で, 結局自分の力で何かやってるわけじゃなくて, 周りの環境に恵まれてるだけなんじゃないかって焦りが凄いんだよね.
周りに素敵な人たちが沢山いることは –それは運が良かっただけって話かもしれないけど– とても誇らしいことで, だけどそれに甘え過ぎてるんじゃないかって思ったりして.

今も十分楽しい. だけど, もっと楽しいこと, それは漠然としてて具体的には何も見えてないけれど, でももっと楽しいことをやりたいし, こんなに軽々しく言っちゃいけないのかもしれないけれど, 少しでも世界に引っ搔き傷を付けて死にたいって思うしね.
先輩達が切り開いた道に乗っかってるだけじゃ駄目なんだよね.

でも結局自信が無いんですよね, ずっと.
こんな僕でも下を見ればキリが無いし, そんな下を見てたって仕方ないし, 上を見て生きて行かないとより良い僕にはなれないって思って生きているつもりなんだけど, 結果的に僕は何においても1番になれないどころか100番にも1000番にもなれてない気しかしなくて.
僕が憧れてるのはカッコいいエンジニアであってこんな穀潰しみたいなエンジニアになりたいわけじゃないのに. このままじゃ居場所が無くなってしまうんじゃないかって不安が日に日に増して来てて.
今ここに居場所が無くなってもご飯食べては行けるだろうとも思うけどここに居場所がなくなってしまうくらいであればご飯食べる意味があるのかしらとかってね.

とりとめもなく何もまとまってないけどこれ以上何か書いても進まないので頑張りましょうってことで良いか.

兎に角, 陳列されたら賞味期限切れてますねってなるのは嫌だし, そもそも, ちゃんと陳列されたいですよね. って話でした.

youtube mosaic

下のリンクをブックマークに追加してyoutubeとかyoutube埋め込まれたりしてるページで.
youtube mosaic

同じ感じで画像も大体モザイクする感じの.
image mosaic

僕らの顔は本を作る為に存在してるわけじゃない

立て続けに宣伝で申し訳ないのですが, 約一年ぶりの想ひ出ブレイカーに続くiPhoneアプリ第二弾, Anti Taggingが公開されました.

デザインは若いのに(物理的にも)存在感が凄い長井創 a.k.a. ながそー.
イカした感じのデザインをやってくれました. ちなみにアイコン, スプラッシュの写真素材もながそー. 怖い.

アプリのベースは30分くらいで出来たんだけどUIの基本的な部分(今回はボタンを使わないで行ってみようとか)を考えるので一週間くらい, でアプリ名考えるのに一ヶ月くらい掛かってそれからながそーにデザインお願いして一週間くらいたまに顔合わせながらデザインを色々やってもらった感じでやっぱりアプリ名って凄く難しいなって思ったり.
その分個人的にはなかなか良い感じの落としどころに来たかなって満足してます. ながそーありがとー.

例によって無料ですし, 別にこのアプリ落としたからって僕の懐が潤うわけでも無いので嫌儲の人も是非!