by shigemk2

当面は技術的なことしか書かない

あなたにも作れるファイルシステム まとめ #fdev_shimane

fenrir.doorkeeper.jp

@okuyamaoo データベースをファイルシステムとして使うDbmFsの紹介 OSS活動は好き ウェブ共同開発部所属 Web計全般の開発運営

  • DbmFsってなに
  • 仕組みと構造
  • 機能

  • DbmFsってなに

DbmFsってなに

github.com

  • データを保存管理するのがデータベース
  • WinだとExplorer MacだとFinderみたいなのがファイルシステム
  • データベースのデータはファイルなので、ファイルシステムの一種ともいえる

  • ファイルシステムの構造

  • フォルダ(ディレクトリ)をつくる

  • テーブルをフォルダにマッピングする

  • テーブルはフォルダに似ており、関連するものを入れる

  • レコードは、ファイルに似ている

  • データをJSONに変換

  • データベースをファイルシステムとして使うシステム

  • データベースの構造とレコードをファイルシステムのファイルとフォルダにマッピングしている

仕組みと構造

  • JSONデータをいじったら、DBのデータも変わるようにしたい
  • Linux用のファイルシステム実装用のFuseを利用
  • (いろいろなファイルシステムがあるなかで)命令を投げてデータを受け取る
  • ファイルシステムを自前で組むときに、FUSEがないと難易度がかなり上がる

FUSE: Filesystem in Userspace

実装言語など

  • Java + Fuse Java binding(Fuse-J)
  • CentOS RedHatでテスト(FuseとJavaが問題ない奴)
  • MySQL 5.6 PostgreSQL 8.4
  • Apache License 2.0

機能 参照系

  • SQLを投げるかMySQL WorkBenchとかを使うとか
  • マウントしているサーバの中に入ってLinux系のコマンドを使えば、DBに接続しなくてもいいしツールも使わなくてもいい
  • ので、テキストエディタでデータを見ることができる

  • SQL文を実行したほうが効率がいいパターンも多い(100万レコードとか…)

機能 更新系

  • テキストエディタなどによるファイル更新
  • データの複製はdumpコマンドではなく、cpコマンドでいける!
  • ファイルペーストによるデータ複製
  • ファイルペーストによるテーブル複製
  • 別のDB間によるデータ移行もコマンドやD&Dで簡単に出来る

  • テーブル定義も移行可能

  • MySQL PostgreSQL間でのデータ移行も可能。

どのように使うか 開発作業時

  • データ確認を簡単に
  • DbmFsでマウントしたディレクトリをSambaで公開(誰でもテキストエディタで簡単にデータを確認できる)
  • viewdir
  • テスト等で一時的にデータを書き換えたいとき(再帰テストなど)
  • テスト時のデータを一時的に退避したり復元したりするのが楽

どのように使うか 運用時

  • 簡単な管理画面を簡略化(ちょっとした機能ですら作るのに工数とお金がかかる)

まとめ

  • DbmFSはSQLコマンドに明るくないひとでもデータを簡単に扱えるようにするやつ
  • 今後参照系も強化
  • WebAPIを作りたい
  • RDBMSだけではなくNoSQLも対応していきたい(ビッグデータへの対応など)

Swift × iPhone × Apple Watch で iBeacon を使う まとめ #fdev_shimane

Swift × iPhone × watchOS で iBeacon を使う

どういうことなの

  • Swift 説明不要のプログラミング言語
  • watchOS Apple Watchに搭載されているOS
  • iBeacon Appleが提供している近接検出技術
  • BLEを利用
  • CoreLocation.framefork

BLEとは

www.cypress.com

  • Bluetooth 4.0規格の一部
  • 超低電力

  • iBeaconとは、BLE技術を使った位置情報の技術

iBeaconでできること

  • 領域観測(Beaconが届く範囲を測定)
  • 距離観測(対象物が「遠い」か「近い」かを判定する UnknownからImmediteまでの4種類 具体的に何メートルかはわからん)

iBeaconでできないこと

  • Beaconの正確な距離
  • デバイスへデータを送信することはできない
  • Beaconの方向を検知する
  • あくまでも出来るのは電波を送信するだけ

なんで今さらBeacon?

導入事例がいくつかある

  • 店の近くを通ったらクーポン配信
  • 商品に近づいたら説明が届く
  • 出退勤管理

iseebi.hatenablog.com

iBeaconの識別

  • UUID(16Byte) 固定
  • Major(2Byte) ユーザ指定
  • Minor(2Byte) ユーザ指定

CoreLocationFrameWork

  • 位置情報関連をあつかうフレームワーク
  • CLLocationManager
  • CLBeaconRegion
  • CLBeacon

developer.apple.com

Swiftで実装してみる

  • 送信側 (Beacon)
  • 受信側 (iPhoneやApple Watch)
  • サーバ側

iBeaconアプリの仕組み

  • Beacon自体にデータを送信する仕組みはないので、送信するデバイス、受信するデバイス、データを管理するサーバ、の3つに別れる

注意点

  • 測定開始時にRegion内に居た場合はdidEnterRegionが呼ばれない didDetermineStateを使う
  • アプリがフォアグラウンド
  • 領域観測 距離観測
  • アプリがバックグラウンド
  • 領域観測のみ可能
  • 海外製のモジュールは技適が通っていない場合がある

まとめ

  • iBeaconアプリの開発は結構手軽
  • インフラ整備のほうが課題
  • WatchOS2で使い方が広がるかも

JavaScript の最新標準仕様はココがすごい まとめ #fdev_shimane

fenrir.doorkeeper.jp

そもそもECMAScript is 何

  • JSが準拠している標準仕様
  • ESと略される
  • ECMA Internationalが策定
  • 今使われているのはECMAの5
  • 2015/6にECMA6が策定

ES6での変更点

  • アロー関数 (https://googlechrome.github.io/samples/arrows-es6/index.html)
  • let(ブロックスコープの変数宣言)
  • const(定数宣言だが、オブジェクトの変更は可能)
  • class(class extendsが使えちゃう TypeScriptだとむりくりラムダを使っていたような)
  • import (Pythonのimportみたいな使い方)
  • テンプレートリテラル(バッククオートで変数展開が可能(シェル芸っぽい))
  • Promise(コールバックヘル対策として、newでプロミスを使う メソッドチェーンを使う)

ブラウザの対応状況は

ECMAScript 6 compatibility table

対応してるブラウザはそんなおおくない

  • トランスパイラ(対応したバージョンのESに変換する Babelなど)
  • ポリフィル(あたらしいブラウザ)

babeljs.io

まとめ

  • 変更点の多くはシンタックスシュガー(読み書きをしやすくするためのもの)
  • ブラウザが標準で対応
  • 一部のフレームワークやライブラリはすでに取り入れ始めている(Angular2.2とかBootstrapとか)
  • ES6が主流になる時代に備えてみたら

アプリデザインに役立つプロトタイピング まとめ #fdev_shimane

デザイナー。

  • アプリデザインに役立つプロトタイピング
  • プロトタイピングとは

フェンリル デザイン部

  • UIデザイナー

流れ

  1. プロトタイピングとは
  2. アプリ開発の問題点
  3. プロトタイピングの実施
  4. プロトタイプ作成例
  5. プロトタイピングツール比較

プロトタイピングとは

シュミレーションを目的とした試作品を用いたソフトウェア開発手法

低精度プロトタイピング

  • 動作モックレベル
  • 紙芝居

高精度プロトタイピング

  • 実際に機能する暫定システムレベルのプロトタイピング

→こんかいは低精度のほうについて取り上げる

アプリ開発の問題点

  • 受託開発がメイン
  • アプリ作って→作った→使いづらいよね…(☆1個のレビューなど)
  • 競合他社に負けられない 失敗できない 早くアプリを出したい
  • 品質 開発スピードも重視

アプリ開発フローの見直し

  • 企画→デザイン→実装→リリース(ウォーターフォール)
  • スケジュール組みやすい 予算が立てやすい
  • この開発フローではあまり品質よくなかったりする
  • 使い勝手が確認できない
  • 手戻りコストが大きい(巨大なサンクコストに対応できない)
  • フェーズがあとになればなるほど変更しづらくなる
  • その解決策としてのプロトタイピング
  • 手戻りの削減、実装前にわかりやすくする

プロトタイピングの内容

  • ペーパープロトタイピング
  • アプリ開発のときに紙にインターフェースを手書きする
  • ラフ図でもってだいたいどんなものを作るか
  • 紙で作るので切り離しや書き足し、修正も簡単
  • みんなで作ることができる
  • 紙芝居をしっかり作る
  • エンドユーザーのレビュー テスト
  • 迷うところなどを洗い出す
  • iPhoneアプリのナビゲーション考察

実例 カーシェアリングサービス

  • 急に車が必要になったユーザーが手元のスマートフォンで付近にあるすぐに使える自動車をすばやく使える
  • iPhoneアプリのナビゲーションタイプ

  • ユーティリティ型

  • 明快
  • あんまり機能を詰め込めない
  • ナビゲーション型
  • 構造化できる
  • 階層が深くなって複雑になりがち
  • タブ型(AppStore)
  • コンテンツを多く扱える
  • ナビゲーション型の内包
  • 拡張性が最大5つで少ない
  • 大型になりがち
  • ドロワー型(Gmail)
  • タブより多くの数のコンテンツを入れられる
  • 実装コストが高い
  • 階層が深くなりがち
  • 没入型
  • ユーザーを体験に没頭させられる
  • 工数予算がかかる
  • UIマナーから逸脱しやすいので使いづらくなりがち

ペーパープロトタイピングを複数案つくる

  • ユーティリティ型 1 (予約済みを最初に表示する)
  • ユーティリティ型 2
  • タブ型(短所とくにないか)
  • ドロワー型(拡張しやすい)

  • アプリのゴールは、付近にあるすぐに使える車を素早く見つけること

  • 重要視されるべきは車をすぐに見つけ、見逃さないこと
  • 思考のビジュアル化
  • より明確に比較検討することで目的に沿った最適なUIを導き出せる
  • エンジニアにも客にも納得できるものが作れる

プロトタイピングツール比較

  • 結構いろいろなプロトタイピングツールがある
  • POP(シンプル スマホのみで完結できる)
  • Prott(値段高い スケッチなどの機能が豊富 日本語サポート)
  • Pixate(ほぼ無料 トランジションが豊富 細かいアニメーションなどが作れる 端末上に保存してシェアできる)

  • どれが良いかは状況や目的による

  • シンプルにPOP
  • プレゼンしたいときはPixate

まとめ プロトタイピングとは

  • クライアントやユーザーとの意思疎通を行うためのもの
  • 高いレベルでの認識あわせや潜在的なニーズの洗い出し
  • クライアント ユーザー両方に満足してもらえるものを開発できる

Ruby Client Library For DynamoDB メモ #fdev_shimane

fenrir.doorkeeper.jp

  • Ruby x AWS
  • Gem? 絶賛開発中
  • DynamoDB
  • DynamoDBを手軽に扱いたかったのでActiveRecord風にしたお話
    • そんなGemはもうあるんでないのかい?
    • Dynamoid
    • AWS SDK for Ruby V1(V2以降に対応していない)
    • DynamoDB Localのみ

github.com

ので、作ってみる。

  • ActiveRecord風なメソッドチェーンを使えるようにしたい
  • クラスメソッドチェーン(ActiveRecord風)ってどんななの

  • DynamoDB

  • Method Chain
  • AWSのNoSQLデータベースサービス

手軽で高速なデータアクセスが実現できる

  • 完全マネージド型サービス
  • 自動レプリケート
  • 自動ストレージスケーリング

高速

  • レイテンシー平均値10ミリ秒未満
  • スループットの予約
  • ダウンタイムなしでスループットの変更

DynamoDB

  • テーブル
  • 項目
  • 属性
  • 普通のKVSとは違う

AWS SDK For Ruby

  • DynamoDBをRubyで取り扱うときはこれをつかうことが多いかもしれないけど。
  • 実装長い

→ActiveRecordぽくできたらいいのだが

  • まずは検索だけでもActiveRecordぽくできたらいいんだが。
  • クラスにクエリをストックする?
  • クラスが汚染されているのはバグの温床
  • エラー時にお掃除しないと期待動作しないこともある

  • ActiveRecordぽく Relationクラスのインスタンスにクエリを保持したい

  • ActiveRecordを参考に書いてみる

考えるところ

  • クラスが評価されたとき
  • クエリを組み立てるとき(メソッドが呼ばれたとき)
  • クエリを実行するとき

クラスが評価されたとき

  • AR風にBaseクラスを表示
  • Relationクラスを作成してBookにキャッシュ
  • Baseクラスを継承すると、Model固有のRelationクラスをキャッシュ

クエリを組み立てるとき(メソッドが呼ばれたとき)

  • scanメソッドを呼び出す
  • scanオペレーションのdelegate
  • Relationのインスタンスを取得
  • Relationのインスタンス生成メソッド呼び出し
  • ARの場合第2引数はArel::Tableのインスタンス
  • 接続設定は別途configから取得
  • Model固有のRelation
  • optsは検索条件
  • spawnはcloneしているだけ
def spawn
  clone
end
  • 検索条件は引き継いでほかはresetなど。

  • BookのscanメソッドのレシーバをBook::DynamoDB_Relationインスタンスに委譲して、インスタンス内に検索条件をストック

  • Book.scan
  • Arrayで使われるようなメソッド
  • loadメソッドを実行
  • クエリを実行していなければクエリを実行

  • ActiveRecord風なものが作れる

絶賛開発中

  • Migration
  • 更新系
  • スループットの自動更新

Apple Watch 新 OS "watchOS 2" の注目機能 メモ #fdev_shimane

fenrir.doorkeeper.jp

アジェンダ

  • watchOS2 新機能
  • WWDC 2015

watchOS2

  • ついにWatch本体で動作
  • いままでのwatchOS1 iPhone DeviceとWatch Device (コードはiPhone Deviceにあって、実際のWatch DeviceはUIのみの表示)
  • watchOS2 iPhone Device上にコードはなく、WatchDeviceにコードがうつる(UIは以前のままWatchDevice)

Watchで動作するメリット

  • ボタンなどのタップ処理の向上(レイテンシーの向上)
  • 各種センサー類が扱いやすくなる(WatchOS1だとセンサー類が使えない)
  • 母艦のiPhoneがなくても動作できるアプリが作れる(Watch上で動作される)

Watchで動作するデメリット

  • データ共有などiPhoneとの通信が多いアプリは恩恵が少ない(Watchのほうにコードがあるから)
  • iPhoneとの通信が複雑になる(今まではプロセス間通信のみで、動作も早かったが、BLEでの通信が主になるので、ちょっと複雑になる)

watchOS2 新機能

ClockKit

  • Watch Faceにアプリの情報を表示
  • Watch上の一等地が3rdPartyに解放
  • watchOS2のTime Travel(Watchの表示をしているときに回すと過去に戻せる 過去の天気予報がわかったりする)にも対応可能

WatchConnectivity

  • iPhone / Watch間の通信
  • 両デバイスがアクティブならリアルタイム
  • 片方がアクティブでなくても次回起動時に届く

センサー類

  • CoreMotion Framework(が、サードパーティでも開発できる)
    • 加速度センサー
    • ジャイロ
    • 歩数計
  • HealthKit Framework
    • 心拍数

Digital Crown

  • 竜頭の操作でUIを操作(今まではテーブルビューのみ)
  • Picker系のUIでコンテンツの選択可能
  • 絵文字選択のような画像の選択も可能

Taptic Engine

  • Watchを振動させる
  • 規定されているタイプを指定(自由自在には使えない)
  • インタラクションに沿ったフィードバックを返せる(腕につけていると振動がわかりやすいので、これを使っていろいろ開発できる)

音声と動画

  • 音声
    • 録音可
    • 再生可能
  • 動画
    • 動画再生可能
    • HTTP Live Streamingには未対応なのが残念

アニメーション 動画

  • アニメーションサポート(WatchOS2から対応)
    • alpha
    • サイズ
    • アラインメント
    • グループインセット
  • CoreGraphicでの動的画像作成

ネットワーク

  • Watch自身でサーバとの通信も可能
  • Watch側で先に取得したデータをiPhone側とシェアもできる

iOSのFrameworkがやってきた

  • それ以外にも
    • CoreData(DB)
    • EventKit(カレンダー)
    • PassKit(Passbook)
    • HomeKit(家電)
  • 機能制限があるものもあるが一通りある
  • WatchにはiPhone4くらいの処理能力がある

OS1とOS2の両対応は

  • 両対応は強制ではない
  • watchOS2用のターゲットを追加するだけ
  • APIなどの差異がなければOS1 OS2両方にそのまま再利用可能
  • 細かい差異がある場合は#if TARGET_OS_WATCHで分岐さす(true ならOS2に)

タスクコンプリーション

  • iOS4で導入された延命方法
  • 最大10分間バックグラウンドを延命させる(iOS8.2から使える)
  • NSProcessInfoの長い名前のメソッドでタスクコンプリーションが使える(performExpiringActivityWithReason:usingBlock)

機能豊富になったwatchOS2

使いこなせるかどうかはあなたのアイディア次第です

WWDC 2015

  • アップルが毎年開催している開発者向けイベント
  • 階乗はアメリカサンフランシスコのMoscone West
  • CEOによるキーノート
  • 社員による機能説明セッション
  • 社員に質問できるLab
  • 野外のビアバッシュ

  • Xamarin's WWDC 2015 Party

    • Xamarinが主催したパーティ
    • 特に何かあるというわけではない
    • 立食しながらいろいろなひととコミュニケーションが取れる
  • WWDC Swift Panel @ Realm

  • Realmがホストした地元Swiftコミュニティーのイベント

  • 界隈で有名な人がパネディス
  • Swift開発の主要メンバーChris Lattnerの話

海外のDevイベントは行くべき

  • よいところ

    • 刺激を受けられる
    • 著名な開発者と会話ができる
    • 自分を売り込むチャンス
  • よくないところ

    • おかねかかる
    • 上司を説得する→3人共経費で行ったよ
    • フェンリルでは今年は3人
  • 注意点

    • 積極的に行動(日本人特有のナーバスになりがち)
    • 英語が下手とか関係ない
    • しゃべりにいこう

petersteinberger.com

Chris Lattner's Homepage

ティム・クック - Wikipedia

一人でウェブサービスを開発してリリースする方法 メモ #fdev_shimane

fenrir.doorkeeper.jp

toreta.in

it芸人 - Google 検索

自分に対する縛り

  • 年1回英語で発表
  • 年1回アプリをリリースする

wri.pe

2013 ゴールデンウィークでやったこと

  • GWは旅費がだいたい高い

    • ので、自分で使えるものを作ろう
    • 自分が使うものを自分で作れるのがエンジニアの特権
    • 1周間を使って自分で使うプロダクトをつくる
    • 余暇の過ごし方 プロダクトを作る or 新しい技術を学習する
  • 煩雑なメモをどうにかしたい

  • チャットなどの未読の管理が大変

  • チャットを1周間で作るのは無理だし、手軽に機能追加できるOSSのチャットツールも良いものがない

  • Evernoteがあるけどプレインテキストでどうにかしたい
  • Stickaがあるけどクローズした

  • いつでもどこでも

  • 溜まったメモの整理
  • 書いたことを忘れる
  • もう読まないメモの処理
  • プログラマならMarkdown
  • 自分専用だけど公開前提で
  • リリースするなら英語では
  • ドメインもとろうず
  • 使ったことない技術を使おう

  • コードを書き始める

  • メモ帳自体はそんなに難しくない
  • 認証はGitHub or Facebook
  • テストも兼ねてRails 4.0RC Ruby 2.0
  • JSはBackbone.js HTML5のストレージ機能も

毎日自分で使うために

  • サーバの運用は自分でしない
  • バックアップも全自動(ちゃんと取っておきたい 今ならHerokuかな?)
  • 軽く動く(Evernoteは重いので、軽く動かしたい)

  • すぐに200人くらい登録があった(たぶんmasuidrive個人のネームバリュー的なのもあったと思う)

  • 個人サービスだから、といわれないものを作る
    • 英語とデザインをなんとかしたい
    • 英語はHectorさんにお願いしてみる
    • 時間がないのでデザインは自分でやってみる(メニューバー+メイン)
    • iOS/Android対応をメインに
    • Dribbble (デザイナーが自分のポートフォリオをアップする場所) を参考にして、よりリッチで印象に残るデザインを使う

Dribbble - Show and tell for designers

* 上のバーがBootstrapぽい
* 特徴色(水色)が弱い

wri.peのデザイン

  • なるべくシンプルに
  • わかりやすいUI

  • Flat Mail webapp

  • 遠くから見てもわかるデザイン
  • 自分の好み
  • レスポンシブに出来るように
  • FontAwesome

fortawesome.github.io

個人と法人の違い

  • 継続性(継続して運用するのは個人では困難)
  • ソースコードはRuby本体だと1200行くらいだが、テストはかなり真面目に書いている
  • spec_helperとかseleniumなどを使ってテストを完全自動化してる
  • サーバメンテナンスはHeroku NewRelicなどを使って、サーバの管理や死活監視はクラウド化。
  • 全部払うと月200ドルなのでポケットマネーやばい
  • 頑張って働くか…でも1年に1つMacBookPro買える…というのは考えるのをやめた
  • PR プレスをやってみたいが、これはもうプロのライターにお願いしてみるしかない。
    • CTOなので株主に怒られるのを避けるためにプレスリリースを打ってみたが、やっぱり無理だった
  • 海外向けにはHackerNewsを利用する(でもバズるためにはいいねを増やさないといけないから、VoteしてもらうためにRubyHirobaでHNに書き込みしてみる)
  • リリース後は7000ユーザーくらい

Hacker News

  • モノを作る癖をつけておかないといけない
  • なぜ作るのか
  • 誰のために作るのか(普段不満に思うことを考えてみる)
  • 何を作るのか
  • 最低限はどこなのか(時間配分を考える)
  • どう継続させるのか

  • プロトタイプを作って云々とかだと、1周間の5倍から10倍

  • 半日でプロトタイプを作れないと1周間では作れないと思う(個人の感想)

  • 仕事に役立つのか?

    • 簡単なフローを把握するうえで、個人でなにかアプリとかを作るのはすごい良いことだと思う
    • 時間配分がわかるようになる
    • 継続的に何か作る癖をつけることで、自分が本当に作りたいものが作れるようになる
      • まずは簡単なものでいい。