BitonicSortが理解できない

いま、どうしてもUnityで近傍探索がしたくて、bitonicsortを導入しようとしています。

正直このコードを流用したら、はい終了〜なのですが、ある程度理解してみたい。

github.com

ということで、以下のqiitaを読んでいます。

qiita.com

しかし、どうしても、

if ((i & d) == 0 && (x[i] > x[i | d]) === up) {

ここの部分の意味がわからない。うーむ。

最近

全然必要ないのに、ヘビーな経験で見えてくるものがある。4月の頭に足首を脱臼骨折して6月頭に退院した。

「苦しい闘病生活にあっても何かを諦めず成し遂げた」とかいう物語。そういうのってありふれてチープだって思ってた。

でも、自分がその立場になったときに、その奇跡っぷりがわかった。辛いのを我慢するというタスクに大量のリソースが奪われる。他の事をするなんて無理。

僕は奇跡を起こせない凡人であったようで、痛みをやり過ごすために、思考レベルは落ちて、至極単純なコンテンツを大量消費するようになった。

たとえば、ニキビを潰す動画を数十時間みてた。おススメのニキビ動画を紹介できるレベル。気になる人には教えてあげます。

現在は、めでたく退院し、1ヶ月が経とうとしている。けど、まだ脳のモードがおかしい。時間濃度の低さはまだ改善していない。仕事のONOFFが緩いことも起因しているようにも感じる。

きょうひさびさに青空の下リラックスできた時間があった。そのときに「今は仕事や技能の劣化を恐れずにリラックスするのがかなり大事なフェーズなのかもしれない」と感じた。

現在沖縄の地で過ごしているが、やはり本拠地は福岡だという気持ちがある。その結果沖縄での生活に投資仕切れていなかったことを痛感した。その結果リラックスの設計がおろそかになっていた。こういうリラックスを設計できずに人から与えられるのを待っているのはよろしくない。

まずは、沖縄には移動手段が必要だ

 

 

 

ホログラムってなんだっけ、、、

ホログラムで3次元物体の学習っていう話を見かけた。

三次元物体認識のディープラーニングパラメータ量を約1/5に省規模化する手法DeepHoloを開発 | Pixie Dust Technologies, Inc.

ホログラムってなんだっけ???っておもって、調べてみると、腑に落ちる記事を探し出せない。過去に何度か調べてみてるのだけど、わからない。

久保田ホログラム工房 ホログラフィーの世界

ホログラフィ技術 [物理のかぎしっぽ]

ホログラムと3Dの簡単講座

と思ったらあれ?意外と理解できるかも。何度も読んだからかな。にしても、これは分かりやすい動画とかがあればいいのになぁって思う。

その探してる途中に、にレーザーについてとってもわかりやすい動画をみつけて感動したのでメモ。

体感型実験装置群「光」15/15 光の科学4 ⑫レーザー原理模型 - YouTube

sqlite開発物語というのが知見が多い記事だった

https://enterprisezine.jp/dbonline/detail/9928?p=1

非常に僕にとって知見の多い記事だったのでメモ程度にまとめてみる。

lsmという形式をしった

まずLSM形式ってramで変更ツリーをmergeするんだねぇ。ただこれだと、実際のIOが発生する前にsqliteがクラッシュしたらどうなるんだろう。そこまでシビアに考えなくていいのかな。

制約=select

次に言われればその通りなのだけど、制約ってselectなんだなぁ。ただこれは使わないとDB処理は早くなるけれど、結局ビジネスロジックで制約を表現しないといけないのだから、結局あまり変わらないのだろうとおもう。でも、個人的にはビジネスロジックで書くのがいいなと思う。

  • 好みの問題だけど、制約の処理はモデルのコードとかに書きたい。1か所で目に見えたい。
  • もしDBが分散化したときに、制約だと自インスタンスしか見れないんじゃないかな。あ、これは分からない。
osリード < sqlite

そして、sqliteでのファイルのリードがOSより早いwwww。ramだし、ブロック単位じゃないしって事みたい。

サーバサイドは分からないけど、クライアント内包のDBとしては本当に素敵だなって改めて思いました。  

VVVV素晴らしい。DMXでコントロールしてみた。

突然ですが、発信は大事。

今までぜーんぜんblog書いてませんでした。だって面倒だもん。fbでいいもん。とか思ってたのですが、やっぱり発信は大事。しかも、現在勤めているStartupCafe Kozaでは「個人が面白いと思うことを発信するのが大事」という非常にありがたいスタンス。ということで、今後はやってみたこととかをもっと発信するようにしようとおもいます。

ここは異常なんです。異常に機材が揃ってる。

StartupCafeKozaにはちょっとびっくりするくらい様々な機材がそろっています。最近はDMXがお話できる、LEDライトが来ました。 f:id:aifaruba:20171006005622j:plain

LEDライト

DMXというのは演出用の機器を制御するプロトコルで照明や水が出るやつや、ムービングライトの動作など様々なところに使われています。しかし専用のコネクターとケーブルが必要です。それを便利に使うために、通常のEathernetケーブルを利用できる、ArtNetという規格が出来ました。

そして、ArtNetへの変換機器もありました。これでPCから触れます。楽しそう!

f:id:aifaruba:20171006005909j:plain
ArtNet変換器

機器には固定のIPが振られています。ArtNetに接続するには192.168.1.x/255.0.0.0で接続しなければいけません。windowsの設定を192.168.1.10/255.0.0.0にしました。

そして、vvvvを起動。dmx vvvvで調べると、なんと標準装備との事!DMXのinputを見てみると、(512)となってます。たぶんチャンネル数の数だけspreadを渡せばよさそう。(18,19chも0.5になっちゃてる。でも使ってないchだったから問題ありません)

f:id:aifaruba:20171006010532j:plain
DMXにとりあえず18個の数値のspreadを渡す

動きました。1つ目に0.5データを渡したら赤が付きました。このライトはRGBWで1灯あたり4chですので、赤くなるのは正しい動きです。

f:id:aifaruba:20171006010545j:plain
動いた!

じゃあ、fft(4channel)で低音を渡そう。

f:id:aifaruba:20171006010555j:plain
DMXfft(4ch)bassを渡す

ビカビカしました!でーじ楽しい。vvvvは一見難しそうなことが、すんなりできてとっても楽しいですよー。

youtu.be

この記事はスタートアップカフェコザの中の人が書きました。興味がわいた方は、ぜひ遊びに来てくださいね。

リアルタイムチャット(LINEみたいなの)のサーバ側技術選定

今までnginxとphpでwebサイトをつくるお仕事してるのですが、
今回、リアルタイムなチャットをつくってっていわれました。

リアルタイムチャット(LINEみたいなの)をつくる上での技術選定をしてみたので、
ツッコミがあったら是非ぜひお願いします。
こんなの変だよ、
こっちはこれがいいよ、
ここ読んでみなよわかりやすいよ
などなどコメントもらえると嬉しいです

要件

  • 同時接続1kとか
  • 一般wifiからも接続可能

通信の候補

  • phpにpolling
  • 独自ソケット通信
  • websocket
  • http2/SPDY
  • long polling

pollingは論外としとく。
FWを通らないと嫌なので、独自ソケットはやめた。
http2/SPDYはよくわからないし、websocketでべつに良さそう。
httpでつないで、upgradeで結構生な通信をする仕組み。
軽いけど、接続断対策を考える必要はありそう。
今更long poringはいらない気がする。

websocketでのサーバ環境候補

nginx + phpはたぶんだめ。おそらく繋ぎっぱなし同時接続だから、
スレッドやプロセス依存はしんどい。イベントプール型の環境が必要。

nodeはべつにいい感じ。でもgolangでもいい感じ?
golangが書きやすいという意見が多いのでそっちで行ってみたい。
Earangは関数型言語だし、バイナリが基本で文字を扱うのが得意じゃないから今回は見送る。
複雑な接続プロセスとかがあるとEarangは生きてきそう。今回はそんななさそう

常時表示するアプリをAndroidで作った時にこまったこと

仕事で常時全面に表示するAndroidアプリをつくったときに、大変だったので、これは共有せねば!とおもいました。

0、まずはどうやって全面表示するんだっけ

この部分は結構サンプルが多いので、飛ばし気味で。
前面表示されるビューの作り方 | Android-Noteを参考にしました。

難しそうな常時全面表示の処理が意外とすんなりできて、楽しい。
しかし、凝ったことをしようとすると色々と問題が。

1、edittextをおしてもキーボードが反応しない、、

画面上にedittextを配置してタップすると、フォーカスは移るのですが、キーボードが出てきません。原因は参考にしたサイトのWindowManager.LayoutParamsにありました。

    WindowManager.LayoutParams params 
        = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            0, 80,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

6番目の設定項目のFLAGが、FLAG_NOT_FOCUSABLEだと、フォーカスを取得できないために、キーボードが表示できないようでした。

    WindowManager.LayoutParams params 
        = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            0, 80,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
            PixelFormat.TRANSLUCENT);

このようにFLAGをFLAG_NOT_TOUCH_MODALに書き換えたところ、edittextにフォーカスが当たった瞬間キーボードが表示されました。

2、確認画面のOKが押せなくなった、、

上記対応で実装していると、今度は確認画面が押せなくなってしまいました。具体的には「アプリケーションの選択」ができなくなっていました。

ネットを検索していると
Androidの表示レイヤーと画面常駐型アプリの話
を発見。そうか、パラメータを動的に切り替えればいいのか。

ということで、edittextが活性になる瞬間でFLAG_NOT_TOUCH_MODALを、それ以外の場合ではFLAG_NOT_FOCUSABLEに切り替えるようにしました。

3、ListViewよお前もか、、

お次は、ListViewのonItemClickイベントが発生しない。

ネット上で解決方法を探しても、「カスタムビューの中にフォーカス可能なものを、フォーカス非活性にするといいよ」というものばかり。見つけた情報に従って、フォーカスを非活性にしても、なかなかonItemClickが発生しません。

これはもしかして、edittextと同じ、フロート画面側のフォーカスの問題ではないか?と思い、FLAG_NOT_TOUCH_MODALに変更してみると、、、動かない。

あ、そうだ、フォーカスを非活性にしたままだった。全部デフォルト状態にすると、、、、動いた!

最後に

プログラムというよりも、フラグとの戦いで疲れました。同じ状況の人の参考になれば嬉しいです。