head_hexagonはにらぼ☆てっくtale_hexagon
Category » Development

HoloLens RS4 Preview を試してみた

こんにちわ。koichiです。久々の投稿です。
今回は「HoloLens RS4 Preview」が公開されていたので触ってみました。 (さらに…)

Posted by koichi on 2018/03/29 under Development, HoloLens

クリエイティブコーディングとは

こんにちは、ハニカムラボのエンジニア 松田千紘です。 9月30日に自主的勉強会として「クリエイティブコーディングもくもく会」を開催いたします! そこで今回はクリエイティブコーディングについての記事を書きたいと思います。   クリエイティブコーディングとは? クリエイティブコーディングとは、アートやデザイン制作のためにプログラムを用いること、およびそのためにプログラミングを行うことを指します。 例えば、プログラムでグラフィックや映像、音楽、立体物を制作する活動は「クリエイティブコーディング」です。 使用されている言語や環境はProcessing、openFrameworks、vvvv、PureData、そしてUnityなど様々です。   クリエイティブコーディングの魅力 クリエイティブコーディングの魅力はいくつもありますが、その中でも特にアピールしたいのは以下の2点です。   繰り返しの作業を計算機におまかせできる 「同じ円を同じ大きさで何百、何千と描いてください」と言われても疲れてしまいますね。 しかし、計算機は繰り返しの作業が得意なので、そういった表現も簡単にできてしまいます。 グラフィック制作でいえば、以下のように再帰を表現に用いることで複雑な繰り返しも簡単に描くことができます。   偶然に美しいものと出会える 絵筆を持ちキャンバスに向き合っても、それは描き手の想像の枠の中の絵画しか生まれません。 しかし、クリエイティブコーディングでは乱数や複雑な数式を用いて、コーダーの思いもよらない作品を生み出すこともできます。 偶然の中から美しい作品を生成できた時の喜びはひとしおです! 下のグラフィックは、乱数によって様々な曲線を生成・着色したものです。 乱数がグラフィックの構成要素になっているため、描画するたび異なる作品となっています。       イベント告知 クリエイティブコーディングもくもく会で、クリエイティブコーディングにさらに親しんでみませんか? 初心者からプロの方まで大歓迎です。 私はProcessingでもくもくする予定です!よろしくお願いします。 クリエイティブコーディングもくもく会 01 : ATND  

Posted by MatsudaChihiro on 2017/09/26 under Development

ブログ画像

Androidでバーコードリーダーを実装する

こんにちは、nagashimaです。今回はAndroidのお話をします。 今作っているアプリにバーコードリーダーの機能を入れる必要がありライブラリを調べました。
やりたいことは次の3つ
・1次元/2次元バーコードが読める
・画面上のボタン操作でライトのON/OFFができる
・バーコードの読み込みは画面中央部の指定エリアのみ まず出てきたのがZXingです。zxing-android-embeddedという拡張ライブラリを使うことで簡単にバーコードを読むことができます。 build.gradleにcompile ‘com.journeyapps:zxing-android-embedded:3.4.0’を追加して IntentIntegrator integrator = new IntentIntegrator(this); integrator.initiateScan(); で呼び出すことでスキャン画面を呼び出すことができます。
バーコードの解析結果はonActivityResultで取得します。 protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (scanResult != null) { Log.d(TAG, scanResult.getContents()); } } IntentIntegratorに各種セッターがあるのでカメラの設定も簡単にできました。 ただ問題が…。ZXingの1次元バーコードの読み取りは方向固定なので、バーコードが縦になっていると読めないみたいです。 他のライブラリを探しているとGoogle Play serviceに含まれているという記事を見かけ調べてみました。
サンプルも公開されているので、これを見つつ実装。 build.gradleにcompile ‘com.google.android.gms:play-services-vision:10.2.0’を追加して BarcodeDetector barcodeDetector = new BarcodeDetector .Builder(this) .build(); barcodeDetector.setProcessor(new Detector.Processor() { @Override public void release() {

} @Override public void receiveDetections(Detector.Detections detections) { if (detections.getDetectedItems().size() != 0) { for(int i = 0; i< detections.getDetectedItems().size(); i++){ Barcode barcode = detections.getDetectedItems().valueAt(i); Log.d(TAG,barcode.displayValue); } } }
}); CameraSource cameraSource = new CameraSource .Builder(getApplicationContext(), barcodeDetector) .build(); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { cameraSource.start(surfaceView.getHolder()); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
} @Override public void surfaceDestroyed(SurfaceHolder holder) { cameraSource.stop(); cameraSource.release(); }
}); バーコードの解析結果を受け取る”BarcodeDetector”とカメラをラップした”CameraSource”を、SurfaceViewと紐付けるだけなのですが、CameraSourceが曲者でした。 AndroidでライトはCameraの機能の一部なので、Cameraの操作が必要なのですが、CameraSourceにはライトを操作するような関数が用意されてなく…。サンプルをよく調べるとCameraSourceを自前で持っていて、そこでライトのON/OFFの制御をしていたようです。なので同じように自前でCameraSourceを作りそこでライトを操作するようにしました。そのうちvisionのCameraSourceにもこのあたりが追加されるのでしょうかね?

Posted by nagashima on 2017/05/30 under Development

偏向シートによるカラーパターンの試作

Posted by nishikawa on 2017/05/29 under Development

ブログ画像

iOS10に対応した 番外編

こんにちは、nagashimaです。
swift2.3では問題ありませんでしたが、swift3ではデバイストークンの取得方法が変わり以前までの方法では取得できなくなりました。今回は次回以降やるであろうそちらをメモとして残します。 以前まではregisterForRemoteNotifications()を呼ぶとトークン取得成功時に func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData){} がコールバックされ、deviceToken.descriptionからデバイストークンを取得していたと思います。 swift3からはdeviceTokenの型がDataに変更され以下が呼ばれます。 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data){} Dataからトークンを取得するのに幾つか方法はあるみたいですが、 let token = deviceToken.map { String(format: "%.2hhx", $0) }.joined(); でDataからトークンを取得できます。

Posted by nagashima on 2017/01/22 under Development

ブログ画像

iOS10に対応した その2

こんにちは、nagashimaです。
今回はメインのpush周りの実装になります。 iOS9とiOS10でざっくりと以下の違いがあります。
・iOS9ではForeground時に通知が作られず、ローカル通知を作る必要があった
・iOS9ではリモートプッシュから開いた時はapplication(UIApplication, didReceiveRemoteNotification)がコールバックされる ・iOS10ではForeground時にも通知が作られ、ローカル通知を作る必要はない
・iOS10では通知から開いた時、アプリにコールバックされる関数が異なる iOS10からuserNotificationCenterが追加されそちらで受け取るとiOS9とうまく切り分けることができます。 AppDelegateにUNUserNotificationCenterDelegateを追加して
registerUserNotificationSettingsの代わりに次のコードを追加してデバイストークンを取得します。 UNUserNotificationCenter.currentNotificationCenter().delegate = self UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions( [UNAuthorizationOptions.Badge, UNAuthorizationOptions.Sound, UNAuthorizationOptions.Alert], completionHandler: { (granted, error) in if error != nil { return } //エラー時の処理 }) リモートプッシュが来た時はアプリがForeground時には func userNotificationCenter(center: UNUserNotificationCenter, willPresentNotification notification: UNNotification, withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void){} が呼ばれます。
notification.request.content.userInfoにuserinfoのデータが入っているので取得して操作することができます。 completionHandler([UNNotificationPresentationOptions.Alert, UNNotificationPresentationOptions.Sound]) を呼ぶとことで通知も作ってくれます。各自でローカル通知を作る必要がなくなりました! 通知から起動した時は func userNotificationCenter(center: UNUserNotificationCenter, didReceiveNotificationResponse response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void){} が呼ばれます。
response.notification.request.content.userInfoに同じくuserinfoのデータが入っているので画面遷移など好きなように操作できます。
処理が完了した時にはcompletionHandler()を呼ぶようにしましょう。

Posted by nagashima on 2017/01/21 under Development

iOS10に対応した その1

こんにちは、nagashimaです。主にネイティブアプリの開発をしています。 iOS10でプッシュ周りの挙動が変わりました。そのためXcode7で作っているアプリだとうまく動かないようになりました。今更ですが、iOS10対応としてXcodeとswiftのバージョンアップ時の対応を行ったのでその備忘録です。
今回はswift2.3に対応します。 その1はXcode8でビルドできる部分までを行います。 1.Podファイルの修正 ライブラリはpodを使っているので、まずはそちらを対応させます。 各ライブラリをswift2.3に対応したバージョンにします。バージョンは各ライブラリのリリースノートに書いていると思うのでそちらで確認します。
podファイルにライブラリがswift2.3であること明示する。 post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '2.3' end end end をpodfileに追加してpodのアップデートを行います。 2.コンバートする podの更新後以下の手順で対応させます。
1. Xcode8で開き、コンバートは後で行うので一旦laterを選択する。

2. Edit -> Convert -> To CurrentSwift Syntax…を選択する。
3. Convert toSwift 2.3を選択しコンバートする。
4. コンバート完了後、エラーが出てるけどとりあえず無視しつつ、
project -> Build Settings ->  Swift Compiler -Version -> Use Legacy Swift Language Versionを Yesにする。
5. ビルドする。
6. 残っているエラーを解消する(単純なエラーしかないはず) これでビルド・実行で無事起動できました。

Posted by nagashima on 2017/01/20 under Development

ブログ画像

Androidアプリの課金 レシート検証

こんにちは。
去年の成人式を思い出しました、kusanagiです! 最近はandroidの課金について書いているのですが、
サーバーでのレシート検証について調べたのでシェアしたいと思います。 http://qiita.com/yukatou/items/1809853f9af97288ac9a
(Qiita Androidのアイテム課金でレシート検証をサーバ側で行う) 必要なものは課金時のレシートと署名が正しいかチェックするための公開鍵です。
Google Play Developer Console > サービスとAPI から取得できます。
Qiitaのサイトのようにpem形式で保存しておきました。 レシートと署名ですが、
andoroidアプリでの課金時にすでに署名はbase64でエンコードされています。
サーバー側で合わせるためにレシートだけあえてアプリ側でbase64にエンコードしました。 順調に進むかと思いきや。。。
Qiitaサイトのやり方でつまづいてしまったところがひとつありました。 アプリ側であえてbase64エンコードしたレシートはサーバーでもデコードできたのですが、
元々base64にエンコードされている署名はデコードがうまくいかないようでした。
調べてみると,base64をサーバー側にpostで送信するときに + が ‘ ‘(半角スペース) に変わってしまうことと、
base64をエンコードするときは一行を64文字にしておく必要があるようです。 $post_signature = $_POST[‘siganture’]; (半角スペースを+に代えて)
$line_signature = str_replace(‘ ‘, ‘+’, $post_signature); (64文字で改行を入れてから)
$base64_signature = chunk_split($line_signature, 64, “\n”); (base64でエンコードです。)
$signature = base64_decode($base64_signature); 私はこれでいけました。

Posted by KusanagiTakaya on 2017/01/13 under Development

ブログ画像

Androidアプリの課金テストで危なかったこと

新入社員のkusanagiです。
去年はどんな一年だったでしょうか? 最近はandroidの課金についてのテスト中です。
課金のテストの方法について危ないところもあったのでシェアしたいと思います。 課金実装についてはこちら
https://developer.android.com/google/play/billing/billing_integrate.html?hl=ja (android developers)
http://web-terminal.blogspot.jp/2013/05/androidgoogleplay.html (古いですがわかりやすかったです) 本格的にアイテムを自分で指定してテストする場合はgoogle playのベータ版に登録しないとできませんが、
その前の動きをだけを確認する場合であれば ・android.test.purchased 正常に購入出来るテスト用プロダクトID
・android.test.canceled 購入のキャンセルをテストできるプロダクトID
・android.test.refunded 払い戻しが行われた時のレスポンスをテストできるプロダクトID
・android.test.item_unavailable 購入希望商品が存在しなかった時をシミュレートできるプロダクトID これらをプロダクトIDとしてテストできます。 続いてベータ版でのテストですが、
商品を登録した後でGoogle play Developer Consoleの 設定>アカウント詳細>テスト用のアクセス権のあるGmailアカウント にテストするアカウントを登録しておかないとベータ版だとしても課金する羽目になってしまいます。 課金のテストになっているかどうかの確認として課金時に
「これはテスト用の注文です。課金は発生しません。」
このような記述が出てきていれば大丈夫みたいです。 参考にしました。課金時のポイント!
http://qiita.com/intel_yu/items/0d3266d028c788f3ac2d まだ完成していないですが頑張ります。

Posted by KusanagiTakaya on 2017/01/12 under Development

新人kusanagiのslack bot

初めまして新入社員のkusanagiです。
自己紹介はスタッフ紹介欄をみてください!
年末に髪の毛を切りました。 最近、我が家の連絡手段をslackに切り替えました。
そこでslackのbotを趣味で作ってみたので流れを紹介したいと思います。
まず参照したサイトはこちら。
https://moneyforward.com/engineers_blog/2015/02/18/slack-timer/ (rubyで簡単に時報botが作れます) このサイトを見て作ってみました。
slack-apiのサイトからトークンを持ってくるだけであとはコピペで動作を確認しました!
rubyバージョンは2.3.1でした!
これで毎日slackのbotが励ましてくれます。 しかし、家族にうるさいと言われたのでもっと必要なbotに育てようと思いました。
とりあえず天気予報は必要かなと思い、livedoorの天気apiを使ってみました!
http://weather.livedoor.com/forecast/webservice/json/v1?city=400040
(このアドレスは福岡県・久留米の天気です) サイトには地点のコードがあるので自分の知りたい地点の番号をcity=400040
のように書けば情報が飛んできます。 我が家は毎日22時に翌日の天気予報を教えてくれます。
以外と好評ですが、
22時にパソコンがネット環境にないといけないみたいで
教えてくれるときと、教えてくれない時があります。 ↓こんな感じです!

Posted by KusanagiTakaya on 2017/01/11 under Development

next »