技術メモ
Between humanity and computer
2016年2月3日水曜日
2016年2月1日月曜日
【作業メモ】2016.01.31
Herokuにsinatraで簡単なApiサーバーを作る。
/Gemfile
/config.rb
/app.rb
/settings/shuzo.json
この辺が参考:https://devcenter.heroku.com/articles/getting-started-with-ruby-o
/Gemfile
/Procfile
1 | web: bundle exec ruby app.rb -p $PORT |
1 | web: bundle exec rackup config.ru -p $PORT |
01 | require 'rubygems' |
02 | require 'sinatra' |
03 | require 'json' |
04 |
05 | get "/app" do |
06 | json_data = open( "settings/shuzo.json" ) do |io| |
07 | JSON.load(io) |
08 | end |
09 | json_data[ "items" ]. each do | item | |
10 | content_type :json |
11 | if params[ "id" ] == item[ "id" ] |
12 | body << item.to_json |
13 | end |
14 | end |
15 | body |
16 | end |
01 | { |
02 | "items" :[{ |
03 | "id" : "1" , |
04 | "name" : "Kuwako" , |
05 | "age" : "29" |
06 | },{ |
07 | "id" : "2" , |
08 | "name" : "Matsuoka" , |
09 | "age" : "48" |
10 | }] |
11 | } |
2015年11月6日金曜日
【OpenCV】ガンマとシグモイド
ディスプレイはRGBをそのまま表示できるわけではないらしい。とうわけで、表示する時にはディスプレイによって画像の補正がかけられているんだそうです。それがガンマ補正。詳しくはこちらがわかりやすかった。
画面にそのまま表示すると暗くなってしまうから、明るく補正をかけているんだけど、厄介なことにディスプレイやOSによってこのガンマの値が違うらしい。
このガンマ補正どこかで聞いたことあるなーって思ったら、photoshopの明るさ補正でも利用できるらしいとのこと(ここまでさっきのサイトでほぼ得た知識です。)
そういえばこれって、photohopのトーンカーブでいじった時の曲線と一緒なんですね。
で、結果が
だいたいこんな感じ、せっかくなのでトーンカーブをこんな感じにした時は、
シグモイド曲線と言って、コントラスト調整をかける時に利用する式を利用する。
で、結果が
だいたいこんな感じで、photoshopでかけていた曲線をOpenCVで実現できる、もとい数式で表現できるという感じですね。photoshopの方を若干似せたつもりだったけど、似ていないけど、雰囲気は伝わるとは思うのでご愛嬌。
参考
ガンマ補正
ゴリラになる知識 - コントラスト調整
OpenCVでガンマ補正
追記:
ソースはこちらに上げていきます
https://github.com/tsukajizo/study_computer_vision
画面にそのまま表示すると暗くなってしまうから、明るく補正をかけているんだけど、厄介なことにディスプレイやOSによってこのガンマの値が違うらしい。
このガンマ補正どこかで聞いたことあるなーって思ったら、photoshopの明るさ補正でも利用できるらしいとのこと(ここまでさっきのサイトでほぼ得た知識です。)
そういえばこれって、photohopのトーンカーブでいじった時の曲線と一緒なんですね。
1 | void cv_CreateGammaTable( double gamma, uchar *lut){ |
2 |
3 | //ガンマ補正テーブルの作成 |
4 | int i; |
5 | for (i = 0; i < 256; i++){ |
6 | lut[i] = ( int )( pow (( double )i / 255.0, 1.0 / gamma) * 255.0); |
7 | } |
8 | } |
で、結果が
だいたいこんな感じ、せっかくなのでトーンカーブをこんな感じにした時は、
シグモイド曲線と言って、コントラスト調整をかける時に利用する式を利用する。
1 | void cv_CreateSigmoidTable( double sigmoid, uchar *lut){ |
2 | //コントラスト調整用のテーブルの作成 |
3 | int i; |
4 | for (i = 0; i < 256; i++){ |
5 | lut[i] = 255.0 / (1+ exp (-sigmoid*(i-128)/255)); |
6 | } |
7 | } |
で、結果が
だいたいこんな感じで、photoshopでかけていた曲線をOpenCVで実現できる、もとい数式で表現できるという感じですね。photoshopの方を若干似せたつもりだったけど、似ていないけど、雰囲気は伝わるとは思うのでご愛嬌。
参考
ガンマ補正
ゴリラになる知識 - コントラスト調整
OpenCVでガンマ補正
追記:
ソースはこちらに上げていきます
https://github.com/tsukajizo/study_computer_vision
2015年5月1日金曜日
DroidKaigiへ参加した & ツールつくった話
少し時間があいてしまったけれど、先週の土曜日に、DroidKaigiへ参加してきました。
いつもは勉強会いって刺激ウケてもウケっぱなしなので、今回は何かつくろうって思って android-color-swatch-maker というのをつくりました。
一部難しくてついていけない所はあったけど、発表はどれも面白くてとても勉強になりました。
普段はあまり触れない難しい話も、日々感じてたりしているような話も、聴いただけで終ったらもったいないな、と感じる発表が多くてとてもよかったです。
もともとMaterial Design関連の話に興味があったこともあって、デザイナーの方の発表に関してピックアップしてメモしておこうと思います。
デザイナーは二人発表されていて、どちらの方もエンジニアへの歩み寄りが凄いなって思いました。
「デザイナーがXMLを書くことでできる改善しやすいアプリ開発」中の
どちらのデザイナーの方もレイアウトのXMLを書いたり、Materialデザインを読んだりと、デザイナーがエンジニアリングに積極的に関与していくことで、問題の解決を図っているという印象でした。
自分はプログラマーなので、どうやってエンジニアリングをして主体的にデザインに関与していくかという所が課題で、発表聴いて気持ちがさめないうちにとにかくなにかをやってみようと思いました。
エンジニアからデザイナーへの歩み寄りのアプローチとして、とりあえず思いつくのが、
Github - android-color-swatch-maker
特定のAndroidプロジェクトの中で設定されている色の情報を集めて、Illustrator、Photoshopで読み込んで利用することが出来るスウォッチライブラリ(Adobe Swatch Exchange )を作成することが出来るツールです。
実行
結果
android.ase (サンプル用swatchファイル)
DroidKaigiとてもいいベントでした、懇親会も含めて有意義な時間が過ごせました。発表者の皆様、スタッフの皆様お疲れさまです。ありがとうございました。
いつもは勉強会いって刺激ウケてもウケっぱなしなので、今回は何かつくろうって思って android-color-swatch-maker というのをつくりました。
DroidKaigiに参加した
今回の目当ては「デザイン関連の話」「ランタイムやメモリの話」でしたが、それ以外の話もとてもおもしろかったです。ただ、具体的な部分は一週間経つとうろ覚えですね。。。ブログはすぐ書くべし。とりあえず、聴いた発表はこちら。
- マッチョなActivityにさよなら(基調講演)
- アプリの企画、プロトタイプからリリースに至るまで
- 進化するART
- ARTのメモリ管理
- 使えるGradleプロジェクトの作り方
- デザイナーがXMLを書くことでできる改善しやすいアプリ開発
- JellyBeanとKitKatで実現するマテリアルデザイン
- Material Designを取り入れたデザインリニューアル
一部難しくてついていけない所はあったけど、発表はどれも面白くてとても勉強になりました。
普段はあまり触れない難しい話も、日々感じてたりしているような話も、聴いただけで終ったらもったいないな、と感じる発表が多くてとてもよかったです。
デザイナーとエンジニアの話
デザイナーは二人発表されていて、どちらの方もエンジニアへの歩み寄りが凄いなって思いました。
「デザイナーがXMLを書くことでできる改善しやすいアプリ開発」中の
指定したカンプと違う・・・というのが以前コーディングをしていた時や、Flashをつくっている時にもよく感じと似ていて、結構悩みどころだったりしたので印象に残りました。
実装してもらったら違和感があった・・・
ユーザー名長い人のこと考えてなかった・・・
画像あるときと無いときとあるんだった・・・
どちらのデザイナーの方もレイアウトのXMLを書いたり、Materialデザインを読んだりと、デザイナーがエンジニアリングに積極的に関与していくことで、問題の解決を図っているという印象でした。
自分はプログラマーなので、どうやってエンジニアリングをして主体的にデザインに関与していくかという所が課題で、発表聴いて気持ちがさめないうちにとにかくなにかをやってみようと思いました。
ツールをつくる
- デザインの調整しやすいシステムを作る
- デザインのフローをエンジニアリングでスムーズにする
- エンジニアとして共有できることを増やす
つくったもの
Github - android-color-swatch-maker
特定のAndroidプロジェクトの中で設定されている色の情報を集めて、Illustrator、Photoshopで読み込んで利用することが出来るスウォッチライブラリ(Adobe Swatch Exchange )を作成することが出来るツールです。
使い方
実行
1 | $ bundle install |
2 | $ ruby acsm.rb --path 'Users/**/HogeProject/app/src/main/res/' #プロジェクトのパス |
結果
android.ase (サンプル用swatchファイル)
今の所、下のようにリソースファイルに設定されている色の情報しか取得できないので、そのうちLayoutのソースからも集めてきたり、逆にaseファイルからXMLを書き出せるような感じで便利にできたらと思ってます。
1 | < resources > |
2 | < item name = "hoge" type = "color" >#FF33B5E5</ item > |
3 | </ resources > |
最後に
DroidKaigiとてもいいベントでした、懇親会も含めて有意義な時間が過ごせました。発表者の皆様、スタッフの皆様お疲れさまです。ありがとうございました。
Written with StackEdit.
Written With StackEdit
Written With StackEdit
This is test for publishing notes written by markdown. with StackEdit.
public void publish(String text){
mBlog.publish(text);
}
Written with StackEdit.
2014年2月13日木曜日
【SuperCollider】文法を学ぶ
さてさて、ちょっと音を出してみて「楽しい!」ってなっている訳だけど、ミュージシャンじゃないしいきなり音楽はつくれない、しかも正弦波しか今の所わからない。まぁ、これでもプログラマの端くれではあるので、この正弦波をならすプログラムをちょこっと改造しつつSuperColliderの文法について勉強してみることにした。
結論から火口。いや、書こう。
1 | { |
2 | var x = SinOsc.ar(1000,0.5); |
3 | var y = SinOsc.ar(800,0.3); |
4 | var z = SinOsc.ar(600,0.3); |
5 | Out.ar(0,Pan2.ar(x + y + z,0)) |
6 | }.play |
01 | { |
02 | var sineChord = { |
03 | arg col; |
04 | do (col,{arg i; |
05 | Out.ar(0,Pan2.ar(SinOsc.ar(i,0.5))) |
06 | } |
07 | ) |
08 | }; |
09 | sineChord.value([1000,800,600]).postln |
10 | }.play |
- Single inheritance object-oriented and functional language.と書いてある。オブジェクト指向と関数型言語ですよ。CかJavaScriptに似た文法をもったSmalltakもしくはRubyに似た言語だよって書いてある(っぽい。)
- Similar to Smalltalk or Ruby with syntax similar to C or Javascript
関数の書き方が
1 | var square = {arg x; x * x}; // ※1 |
2 | square.value(8).postln; // ※2 |
※1で関数を作成して、変数に代入。
※2で実行。
※1はJavaScriptっぽいし、上の例でdo(/*配列 */, /*関数*/)みたいなのはなんとなくrubyっぽい気がするぞ!
というわけで、上の二つは同じ音が出る訳ですが、普通のプログラミングとちょっと違うぞって言う面白さがある。音として出力されるのでたとえいくつかの音に分解して逐次実行しても最終的に出てくる音は現実空間で混じり合って同じになったりする。逆に逐次実行するということで時間的な意味合いも出てくる。
そういう意味でプログラミングの意味でも興味深いSuperColliderなのでした。
2014年2月10日月曜日
【Super Collider】ことはじめ
メディア芸術祭に行ってきて、なんか俺もやりたいというありがちで間の抜けた理由から、久々にSuperColliderを立ち上げてみた。
久々にといっても、以前インストールして一度しか使ったことがなく、音が出るというのとvirturalboxとロゴが似ている(docに並べている)位の知識しかない。
![]() |
使わないのに似ているというだけで並べられたアイコン |
で、ここら辺とかを見ながらいろいろとやってみる。
1 | { |
2 | var x = SinOsc.ar(1000,0.5); |
3 | var y = SinOsc.ar(800,0.3); |
4 | var z = SinOsc.ar(600,0.3); |
5 | Out.ar(0,x) + Out.ar(1,y) + Out.ar(0,Pan2.ar(z,0)) |
6 | }.play |
OscというのはOscillatorのことらしい。これは多分シンセサイザーとかやっている人には当然の知識なんだろうなーとか思う。
プログラミングの面白さもあるので、いろいろ想像するの楽しいなって思いながら、とりあえず今日はこの程度のしかやっていないのでもうすこし触ってみようかなとも思う。
登録:
投稿 (Atom)