万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

万年素人のjQueryへの挑戦 and so on

jQueryの使い方

クラス名の取り方

alert($('.class'));
alert($('#id'));

SQliteのテーブル構成確認

select * from sqlite_master where type='table' and name='テーブル名'; 

enchant.js

HTML5やJSでできる面白そうなゲームライブラリenchant.js。
参考URL

hamlRailsで使う

http://haml.ursm.jp/getting-started

jQueryで紙芝居な動き

Rails3上で動かそうと以下のサイトを参考にコード書いたが動かん!
cssも設定せんといけんからだ。
http://www.skuare.net/test/jzindexgal.html

あと、画象は上からではなく下から順に読み取ってるかも?

自分で最小構成を作った。
公式サイトからjQueryをダウンロードする。

jquery-1.6.1.min.js」恐らくこんな名前
「min」と「そうでない」の2種類あるみたいけど、jQueryを自分で修正しない限りminで大丈夫なはず。

・まずはHTMLファイルを準備 ※juery-1.6.1.min.jsは読み替える

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Demo for - 'Create a unique Gallery by using z-index and jQuery'</title>
    <link rel="stylesheet" type="text/css" media="screen" href="css/main.css" />
    <script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
    <script type="text/javascript" src="js/demo.js"></script>
  </head>
  <body>
    <!-- 実際のコード-->
    <div id="pictures">
      <img src="images/picture1.jpeg" alt="" />
      <img src="images/picture2.jpeg" alt="" />
      <img src="images/picture3.jpeg" alt="" />
      <img src="images/picture4.jpeg" alt="" />
      <img src="images/picture5.jpeg" alt="" />
    </div>
    <div class="grid_3 alpha" id="prev">
      <a href="#previous">&laquo; 前へ</a>
    </div>
    <div class="grid_3 omega" id="next">
      <a href="#next">次へ &raquo;</a>
    </div>
    <!-- 実際のコード-->

  </body>
</html>


・画象を用意する
→今回はこれらを用意しました。
 picture1.jpeg〜picture5.jpeg
※imagesフォルダに入れる

JavaScriptを用意
jsフォルダを作って、ダウンロードしたjQueryを放り込んで今回のdemo.jsを作りdemo.jsの中には以下を記載


$(document).ready(function() { //perform actions when DOM is ready
  var z = 0; //for setting the initial z-index's
  var inAnimation = false; //flag for testing if we are in a animation

  $('#pictures img').each(function() { //set the initial z-index's
    z++; //at the end we have the highest z-index value stored in the z variable
    $(this).css('z-index', z); //apply increased z-index to <img>
  });

  function swapFirstLast(isFirst) {
    if(inAnimation) return false; //if already swapping pictures just return
    else inAnimation = true; //set the flag that we process a image

    var processZindex, direction, newZindex, inDeCrease; //change for previous or next image

    if(isFirst) { processZindex = z; direction = '-'; newZindex = 1; inDeCrease = 1; } //set variables for "next" action
    else { processZindex = 1; direction = ''; newZindex = z; inDeCrease = -1; } //set variables for "previous" action

    $('#pictures img').each(function() { //process each image
      if($(this).css('z-index') == processZindex) { //if its the image we need to process
        $(this).animate({ 'top' : direction + $(this).height() + 'px' }, 'fast', function() { //animate the img above/under the gallery (assuming all pictures are equal height)
          $(this).css('z-index', newZindex) //set new z-index
            .animate({ 'top' : '0' }, 'fast', function() { //animate the image back to its original position
              inAnimation = false; //reset the flag
            });
        });
      } else { //not the image we need to process, only in/de-crease z-index
        $(this).animate({ 'top' : '0' }, 'fast', function() { //make sure to wait swapping the z-index when image is above/under the gallery
          $(this).css('z-index', parseInt($(this).css('z-index')) + inDeCrease); //in/de-crease the z-index by one
        });
      }
    });

    return false; //don't follow the clicked link
  }

  $('#next a').click(function() {
    return swapFirstLast(true); //swap first image to last position
  });

  $('#prev a').click(function() {
    return swapFirstLast(false); //swap last image to first position
  });
});

・さらにmain.csscssフォルダを作って入れる。
main.cssに以下を記載する

/* relevant for the tutorial - start */
#gallery { position: relative; }
  #pictures { position: relative; height: 408px; }
  #pictures img { position: absolute; top: 0; left: 0; }

  #prev, #next { margin-top: 30px; text-align: center; font-size: 2.0em; }
/* relevant for the tutorial - end */||<


<h3>BPStudy#45<h3/>

Wi-fi
飛んでいる無線から位置を判別

サーバー側にHotSpotのデータベース
必要に応じてダウンロード
・周辺のデータを取得するために、一度はデータ通信が必要
・iOS3.2から〜


GPS
iPadからGPSの精度が上がっている
他のセンサーと併用で精度が上がる


デバイスごとの違い
iPhone


CoreLocationサービスの使い方
CoreLocationフレームワーク
CLLocataionManagerオブジェクト
Delegateパターンで通知

位置情報の区別はない
・使いこなす上で大事なポイント
APIは一つ、GPS

CLocationManagerの構成可能なプロパティ
・desiredAccuracy
 ・必要な制度はどれくらいか?
 ・この値によって使う方法が変わる

delegate側の処理

GLLocationManager
Your App Object
<CLLocation〜〜〜>

地図を更新したり〜〜

GLocationObject
緯度経度 GLCoodingnate2D
 ・軽度 latitude 軽度 longitude
・高さ
・横方向精度・縦方向精度
・スピード・進んでいる方向
、タイムスタンプ


サービスの種類
3つ
・標準位置情報サービス
・Significant Location Change
 だいぶ位置が変わったら知らせる
・Location Region Monitoring
 特定の位置に入ったら知らせる

ユーザーの承認
:プライバシー

位置情報を使うアプリケーションはユーザーの許可が必要。設定アプリで確認

これまでは、トライしてエラーをdelegateで


その他の注意点
エラーが起きた場合、しばらく
バッテリーを使いきってしまう
Mapkitは独自の〜〜


iPS 4の位置情報アプリ


バックグラウンドで動かす
サスペンド状態

Infaplstに1行追加するだけ
Requested〜〜〜

・NSTimerを動かさないのが困る
定期的な処理はできない
エラーができたら止める。10秒後に試す→来ないかもしれない

BGでの動作での注意
バッテリには昇進の注意を
可能ならSignificant Location Changeに切り替える
ディスクに保存しすぎない
→けどメモリも使いきらない
ローメモリ・ワーニングはこない

BGでの動作で注意することは?
バッテリには細心の注意を
可能ならSignificant Location Changeに切り替える。精度は下げる。

ユーザへの通知にはLocal Notification
アプリが殺されることに対処。
永続的な〜〜〜

BGでのでの動作で注意することは?
牧歌的な時代はおしまい
アプリ起動時に位置情報サービスを不通に起動しっぱなしは止める

サービスの動作を


位置情報アプリのライフサイクル
・BGにいるアプリは殺される
・殺されたアプリでも、一条号を取得すると復活させれる
・位置に変化がない限り復活しない
・アプリは自分で〜〜

位置情報アプリのライフサイクル
。復活するのは、Significant Location Change、およびRegion Management〜〜

位置情報アプリのライフサイクル
・継続的に〜〜

位置情報取得の用途
・Fetch Location 現在地取得
 今との地点にいるか。精度の問題。
Detect Area 現在地域取得
 MapViewで最初どこを表示するか
Track Location 現在地追跡
 過去からの軌跡も参考に

Fetch Location 現在地取得
・現在地を特定する
・ある程度の精度を要求される
・一瞬では絶対におわらない
・非同期処理になる
・精度が足りなくても特定できるあ場合がある

位置情報の注意

・得られた制度情報にいるわけではない
・精度を半径とした情報は

Detect Area
同期で取得がいい

Trac Location 現在地追跡

トラッキングの考え方
・矛盾しない限り精度を下げる必要はない
・速度から次にいきそうな場所を特定できる
・緯度経度の中にいるわけではない

仮想の場所を作って追跡する


■実例:駅ベルに見る位置情報の使い方
アプリ内で複数のCLLocationManagerは必要か?
・あまりよろしくない雰囲気
・ユーザーの承認もアプリ単位
・最初に使うLacMgrが変わるとpromptが変わるというのも変
・モデルがdelegateなのは使いづらい

アプリの中にはCLLocationManagerhaが一つだけなのが綺麗。

・PPGLocationService

を生成、管理、delegateを兼ねる。
複数のPPGLocationService

・PPGLocationClient
KVO版みたいな感じ

・Tracker
駅ベルのコア。PPGLocationClient
距離によって精度を段階的にアップ
 最初は数キロ、近くなったらbest
表示を担当するビューとは分離
 表示に必要な値をプロパティに
バージョン2で複数駅に対応

工夫&苦労
・地下鉄にはどうやっても弱い。
・理論上可能、実際には間に合わない。
・前の駅を完治したら鳴らすか?
・BGでタイマーが使えない

BGで出来ることは少ない
 音を鳴らしたければ事前に準備


KVOを使う
→サーバサイドで使っているとない
精度を細かく出来る
Notificationだと大雑把になりがち
明確なイベントはNotificationでOK
値の変更の監視はKVOで
 ChangeNotificationみたいなのは怪しい

KVOを使う
 1:Nの監視ができる 1:1はDelegateでいい
 関係を弱くするのに有効

位置情報のデバッグ
・PPGLocationServiceに実装
・8の字を描きながらウロウロするロジックを実装
・NSTimerよる議事実装なのでBGでは動作しないのがネック

DEBUG HACK
・BGに回るときにタスクを実行すれば10分間の猶予はもらえる

・PingPig
関心空間のiPhoneライブラリ

http://basuke.com
@basuke

簡単と思ったが開発すると難しい

中国は精度が違う
Wi-fiは多い 上海では使えない

10秒間に処理を返さないと殺される

・自己紹介

HNさぼてん
年齢0x1d
出身関西
所属:Java-ja、Wicker-ja
肩書き:Jenkinsコミッタ

■Jenkinsについて何か

・Jenkinsのクラスタリングのすすめ
CIとは
継続的インテグレーション(Continous Integration)の略
XOのベストプラクティスの一つ
システムのインテグレーション作業を開発の〜〜の

具体的には
チェックアウト→コンパイル→UnitTest→インスペクション→パッケージ→結合テスト→デプロイ→システムテスト→チェックアウト・・・・
繰り返していくのがCI

できるだけ頻繁に行う

CIを回したときにアラートを上げるのがフィードバックを返す

CIを使うメリット
成果物の品質の保証
 ビルドやテストが通らない、といった開発時の不具合が先送りになりにくくなり、早期発見しやすく成る


個人定期に考えるメリット
・関心ごとの分離
 一度に複数のことを対処することはよくない
 全ての予測するのは現実的ではない
 人間が行わなければならない仕事に注力できる

・テスト資産
 テストを書くようになる
 テスト戦略について考えるようになる
・リソースの有効活用
・複数の環境

何から始めればいいか?どうやるか?

Jenkinsとは
・OSSのCIツール
 メインの開発者は川口佳介さん


みんながテストをがしがし書いていく
ローカルでの実行でも時間がかかる場合は〜〜


スローテスト問題
・テスト実行に時間がかかりすぎる
 テスト実行数の増加によるところ
 非効率なテスト
 依存関係


解消方法
・テスト自体のパフォーマンスチューニング
 TODO定期なテストは捨てる
 DBなどはモック化
・jobのスケーリング
 早く終わる物、価値の高いものを優先
・Jobを細分化
 並列化を上げる
・スケールアップ
・スケールアウト(クラスタリング)

やっとクラスタリングに

・マスタ/スレーブ方式
 マスタは命令を出す
 スレーブを命令通りに仕事する
 マスタはスレーブの結果をすすめる。
・スレーブの設定はsshがお勧め
 →公開鍵の設定が VM上にしておけばいい
・スレーブにラベルを付けれる
 WindowsのみやLinuxのみ、実行環境のバージョンやDBごとなどをグループ化

・デモ
 Windows
 JNLP経由でスレーブ起動
 
コンソール出力
クラスタリング構成の有用性
・マシンは人間に比べて安い
 こき使いましょう
 使いこなすのもスキル
・Job単位で並列で実行可能

Jenkingは導入が簡単

・情報
・公式Wikiに日本語情報がありまs.
 クラスタリング

・Twitterでつぶやく
・ブログに〜〜

プラグイン


・自転車 de ダイエット
自転車のウェブサービス
Input
 炭水化物、タンパク質、脂肪、水分
Output
 燃焼

7,000 脂肪の重さ
7000kcal/kg

7000kcal燃焼させれば痩せられる

消費カロリー > 摂取カロリー

運動強度って?

強度が高い=キツイ運動
脂肪
 出力(わっと)
 心拍数

RPE
 主観的運動強度

NO SILVER BULLET

ダイエットの心構え
・計測は力なり
 食事、間食、飲料の摂取カロリー
 基礎代謝、運動量の把握


グリコーゲンと水がいる

1馬力 742ワット
競輪2500ワット
馬・・4馬力

データ解析ソフト
C++/Qt

・自転車通勤 #jite2

会社の役員が多い。

■akisutesama

In-App Purchase
In-App Building

Say "dodai.com"

・サーバーサイドでの保存
 レシートを保存 購入履歴
 認証デバイス
 ユーザーの管理

・レシート
 Base64のデータがユーザから来る
 Appleのサーバに投げてJSONが帰ってくる 

・重要(レシート)
original purchase date
transaction id アップルとの
product id アイテムをAppleに管理する必要がある 手作業で入れる 販売先や自分でも保存しないとダメ

purchase id

→足りないもの
誰が買ったか?
誰が入ったかが取れない

Androidもとれない
notification id  いらない
product id

・iPhone
AppleID →とれない
UDID デバイスのID →取れる マックアドレスもとれる


・Android
〜〜〜〜ANDROID_ID 信用できない 使えない

・Inplement ID/Password
・E-mail
・Key generation
・Receipt verification

・API Example


モデル

・User
-user_id
-devices

・Mobile Device
-platform
-udid

・IAPLog
-platform
-udid