サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
takerpg.hatenablog.jp
Swaggerとは Swaggerは言語に依存しないREST APIのインターフェース仕様とそのツール群を指す。 Swaggerの仕様に沿ってAPIを定義することで、人間が理解可能で、コンピューターにも解析可能なAPI仕様書となる。 http://swagger.io/getting-started/ Swaggerの提供するもの 項目 概要 Swagger Specification JSON or YAMLによるAPI記述フォーマット。バージョン、パラメータ、型、レスポンス、必須有無、対応メソッドなどの記述ルールが定義されている Swagger UI 記述したAPI仕様を読みやすいHTMLで確認 Swagger Editor ブラウザで利用可能な専用エディタでプレビューしながら編集 Swagger CodeGen APIを元にサーバー、クライアント双方のAPIアクセスコードを自動生成
課題 サイトをSSLに対応させた際、Amazonからの画像取得先がHTTPになっているのをSSL対応させたい。 対策 APIから返却されるecx.images-amazon.comドメインはSSLは非対応のようだ。なのでAmazon本体サイトのマイページで使用されている画像を調べると、images-na.ssl-images-amazon.comというドメインを使っていた。ということでIDはそのままにドメインのみ変更してみる。 http://ecx.images-amazon.com/images/I/61gSqezYgPL.jpg https://images-na.ssl-images-amazon.com/images/I/61gSqezYgPL.jpg 特に問題なく表示された。 参照ドメインの変更が許されるのかは確認できていないが、ひとまず対応が可能であることを確認。
課題 あるViewの下にViewPagerがある。ViewPager内のリストをスクロールした際に、その上のViewもスクロールさせたい。 対策 CoordinatorLayoutとAppBarLayoutと合わせて使う。 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- AppBarLayout --> <android.support.design.widget.A
課題 Androidの公式サイトを読んでいるとtestCompileとandroidTestCompileというのが2つ出てくるが、その違いは何か。どう使い分ければいいのか。 回答 src/test 以下に記述した内容はtestCompileに影響する。 src/androidTestに記述した内容はandroidTestCompileに影響する。 src配下に複数のビルドタイプに応じたディレクトリ(releaseやdebug)が配備できるが、テストについてもAndroidのUIを使ったテストを書くための(androidTest ディレクトリ)とDBやUtilクラス、API呼出用クラスなどAndroidに依存しないテストを書くための(testディレクトリ)を分けて記述するようになっている。 参考 http://stackoverflow.com/questions/29021331/con
解説 SwiftからObjective-Cのライブラリを利用するにはヘッダーファイルを1つ用意し、そこに利用したいライブラリをimportする。それだけでSwiftのコード側には一切import文を記述することなく利用できるようになる。 手順 フレームワークを追加 ヘッダーファイルを作成 Build Settingを編集 ヘッダーファイルを編集 注意ポイント 1. フレームワークを追加 省略 2. ヘッダーファイルを作成 File > New > File > (iOS or OS X) > Source > Header File. を選択 名前はBridging-Header.hなどとする。 3. Build Settingを編集 Defines Module Packaging > Defines Module > Yesに設定 Objective-C Bridging Header
Google Maps Android API v2でMapを表示させながら東京駅全体が見えた状態で 地図を傾けるとStackOverflowErrorが発生してアプリが終了してしまう。 10-25 18:17:12.235: E/AndroidRuntime(6720): java.lang.StackOverflowError 10-25 18:17:12.235: E/AndroidRuntime(6720): at maps.at.ba.b(Unknown Source) 10-25 18:17:12.235: E/AndroidRuntime(6720): at maps.at.ba.a(Unknown Source) 10-25 18:17:12.235: E/AndroidRuntime(6720): at maps.h.q.e(Unknown Source) 10-25 1
Docker Hubからイメージを探す 自分で作りたいところだが、時間の関係もあるのでdocker searchコマンドでイメージを探す。 $ docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relati... 590 [OK] tutum/mysql MySQL Server image - listens in port 3306.... 110 [OK] orchardup/mysql 37 [OK] centurylink/mysql Image containing mysql. Optimized to be li... 21 [OK] wnameless/mysql-phpmyadmin MySQL + phpMyAd
Product Advertising APIでSearchIndexとカテゴリのBrowseNodeを紐付けようとする際、公式サイトを参考にすることになるが、日本語ページはバージョンが古く、USページの表にあるJP�欄は実際に呼び出してみるとIDが無効であることがあった。 https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?BrowseNodeIDs.html http://docs.aws.amazon.com/AWSECommerceService/2013-08-01/DG/BrowseNodeIDs.html なのでとりあえず実際に呼び出してみたりしながら確認を取った。なお、対象バージョンは2013-08-01である。 SearchIndex ブラウズノード名 ブラウ
Androidの古いバージョンでは以下の現象が発生しうるのでメモ。 現象 あるアプリでAsyncTaskのコンストラクタ呼び出し時に以下のようなエラーが発生。 java.lang.ExceptionInInitializerError at sample.service.servicetest.SampleService$1.run(SampleService.java:72) at java.util.Timer$TimerImpl.run(Timer.java:289) Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:121) at
参考: http://www.atmarkit.co.jp/ait/articles/1402/27/news042_2.html 何カ所かつまづいたのでメモ。 homebrewのインストール RVMのインストール Rubyのインストール Rubyバージョンの確認 1. Homebrewのインストール http://brew.sh/index_ja.html 1-1. インストール $ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)" 1-2. 最新バージョンにする $ brew -v Homebrew 0.9.4 $ sudo brew update失敗するケース $ sudo brew update error: The following untracked working tree fil
API概要の一部を拙訳したものです。 http://developer.android.com/intl/ja/about/versions/android-4.4.html 重要な振る舞いの変更 外部ストレージ利用時 4.4から外部ストレージの共有ファイルを読むにはREAD_EXTERNAL_STRAGEが必要になります。getExternalStoragePublicDirectory()によって返されるファイルはもはやパーミッションなしにアクセスできません。 ただし、getExternalFilesDirによって供給されるアプリ固有のストレージだけへのアクセスであればREAD_EXTERNAL_STRAGEのパーミッションは不要です。 WebView利用時 Android4.4で実行している場合、特にtargetSdkVersionを"19" にした場合は動作が異なる可能性があります
画面録画 最大3分操作情報を録画できる。 adb shell screenrecord [options] <filename>”--help”オプションでヘルプ表示 $adb shell screenrecord --help sage: screenrecord [options] <filename> ecords the device's display to a .mp4 file. ptions: -size WIDTHxHEIGHT Set the video size, e.g. "1280x720". Default is the device's main display resolution (if supported), 1280x720 if not. For best results, use a size supported by the AVC encode
KitKatがリリースされたのに伴い最新のGoogle Play Servicesに変更して アプリをインストールしたところ、実行時に以下のようなエラーに遭遇した。 11-01 22:30:56.987: E/AndroidRuntime(29979): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value. Expected 4030500 but found 0. You must have the following declaration within the <application> element: <meta-data android:name="com.google.andro
タグ:Google Cloud Messaging、Cloud Connection Server GCMを勉強中か理解していて、CCSに対応する人向けのお話。 Webアプリ開発上がりのAndroidプログラマーにとってXMPP接続しろっていう要件はなかなかに大変。 XMPPって何ってところから始まるので。どうやら主にインスタントメッセンジャーなどで使われるプロトコルらしい。 サードパーティーアプリケーションサーバーってサーバーなのクライアントなのってところでまた混乱。 結論をいうとCCSサーバーがXMPPのサーバーとして振る舞うので、 端末だけでなくサードパーティーサーバー側もクライアントとして接続すれば良いようだ。 JavaでXMPPクライアントライブラリというとSmackが有名なようで、GoogleのGCMのドキュメントにも smackの例が出てくるくらいなので素直にそいつを使う。
参考 http://blog.livedoor.jp/dankogai/archives/51366575.html http://nabe.blog.abk.nu/0301 環境 OS Ubuntu 11.10 デスクトップ版 システムディスク /dev/sda データディスク /dev/sdb /dev/sdc /dev/sdd 今回はデータディスクのみをRAID5化。各ディスクは事前にGPartedを使用してフォーマット済み。 コマンド #構築 $sudo mdadm --create --verbose --assume-clean /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd #確認 $sudo mdadm --detail /dev/md0 #rootで作業 $sudo su #設定ファイルの作成
ListViewで一覧を表示していて、最後の行が表示された時点で自動的に追加の読み込み処理を実行したい場合、 setOnScrollListenerを使うと比較的簡単に実現できる。 public class SampleActivity extends Activity implements OnItemClickListener, OnScrollListener boolean mLoading; //読み込み中フラグ boolean mLoadComplete; //全件読み込み完了 int mTotalCount = 0; //取得済み件数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout
android-maven-pluginを使ってAndroid開発を行っている場合、リリースも当然mavenでやりたいところである。となるとproguardで難読化して、jarsignerで署名して、zipalignで最適化してという3つのステップを経てapkファイルを作成する必要がある。記事を書いてる時間が無いので参考になったというか、結局これが正解というのは下記のサイトの記事であった。ちなみにandroid-maven-pluginは3.3.0で確認ずみ。 http://www.simpligility.com/2010/07/sign-zipalign-and-to-market-to-market-with-maven/ ちょっとだけ補足するとpom.xmlにkeysoreのパスワードとかを書くのはよろしくないのでそこだけsettings.xmlを使う。 上記を踏まえた上で以下のp
UDID 携帯端末などに個別に割り当てられるID どのアプリケーションからUDIDを取得しても同じ値が得られる 異なるサービスを運営していても、同じUDIDが使われていれば同じユーザーによるものであることが推測できる 個人情報管理上問題がある。 UUID ランダムに割り当てられた値 全世界でIDが重複しない程度に桁数が大きい アプリケーション(サービス)ごとに都度発行する仕組み アプリケーション(アプリ内データ)を削除してから再取得すると異なる値が発行される。 各アプリケーション間で発行されるUUIDには関連がない 結論 アプリケーション開発者はユーザーごとに個別のIDを割り当てたい場合にはUDIDではなくUUIDを使うべし。 再取得時には値が変わるので変更に対応したシステム設計が必要。
※2013/12/25に加筆修正 Android APIを見ていると「--Callback」、「--Listener」、「--Observer」などの名前のInterfaceがある。 どれも似たような役割のインターフェースで結局のところ全部コールバックに属すると思うんだけど、どうにも違いが分かりにくいので整理。 海外のトピック「what is the difference between callbacks and listeners?」によると http://programmers.stackexchange.com/questions/84732/what-is-the-difference-between-callbacks-and-listeners Callbackは特定の処理が完了したらバケットのある関数を呼ぶのでその関数に接続する必要がある。 Listenerはある物事が発生
本記事はAndroidトレーニング http://developer.android.com/training/basics/activity-lifecycle/starting.html の直訳です。 Activityの開始 main()メソッドでアプリが始まる他のプログラミングパラダイムとは違い、Androidシステムはそのライフサイクルの特定の状況に対応する特定のコールバックメソッドを呼び出すことによってActivityインスタンス内のコードを開始する。 Activityを開始するコールバックメソッドの順序とActivityを終了するコールバックメソッドの順序がある。 ライフサイクルコールバックについて理解する。 Anctivityが生きている間、システムは階段状のピラミッドに似たライフサイクルメソッドのコアセットを呼び出す。システムが新しいActivityのインスタンスを生成する
自分のWebサイトからFacebookでログイン出来るようにしたい、サーバーからFacebookに対していろいろやりたい。そんな人の為に。 参考 https://developers.facebook.com/docs/authentication/server-side/ ステップ ユーザーをOAuthダイアログにリダイレクト ユーザーによるアプリケーション認証 ユーザーがリダイレクトによりアプリに戻ってくる コードからアクセストークンに変換 アクセストークンを使ってグラフAPIにリクエストを送信 0.アプリケーションの登録 自分のサイトのURLをFacebookに登録する。まずはここから。必須作業です。 1.ユーザーをOAuthダイアログにリダイレクト ログイン画面を作成し、そこから以下のURL、パラメータでアクセスさせる。またはいったん自身のサーブレットなどにリクエストを飛ばし、そこ
WebViewについてはPhoneGapで表示させつつ、画面上下にヘッダーなどを配置したい。 タブ表示ならTabActivityを使えばできるが、ActivityGroupにDecorViewでセットする方法だとPhoneGap部分が表示されない。 そこでDroidGapを継承したクラス自身をMainのActivityGroupとして利用する。 ちなみにFragmentは未調査。 import android.os.Bundle; import android.widget.TextView; import android.widget.Button; import com.phonegap.DroidGap; public class PhoneGapSampleActivity extends DroidGap { @Override public void onCreate(Bund
Handlebarsを理解するにあたり、最小構成サンプルによる始めの一歩。 Handlebarsとは HandlebarsはJavaScriptによるテンプレート変換エンジン。JavaでいうところのVelocityのようなもの。 AjaxでJSONオブジェクトを受け取ってHTMLタグを生成するときなどに使える。クライアントサイドにJSP置いてるイメージ。 参考サイト http://handlebarsjs.com/ http://jquery.com/ 用意するもの handlebars.js Handlebarsのコアモジュール。最新のものをダウンロードして使用 jqurery.js テンプレートテキストの取得および変換結果の表示で使用。オプション サンプルコード <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Ha
RSSリーダーや2chビューアーなどを開発している場合、ListViewを使って一覧のスクロールを実現するケースがあるかと思うが、何らかのアクションでリストの先頭や最後に移動させたい場合どのようにすればよいか。 そんなときはListViewのsetSelection(positon)メソッドを呼べばよい。 ListView view = (ListView) findViewById(R.id.sampleList); view.setSelection(0);//先頭に移動 int last = view.getCount() -1 ;//Listのアイテム数を取得 view.setSelection(last);//最後の行に移動
isEmptyとisBlankの違いは空白を考慮するかどうか System.out.println("isBlank(null):" + StringUtils.isBlank(null)); System.out.println("isBlank(\"\"):" + StringUtils.isBlank("")); System.out.println("isBlank(\" \"):" + StringUtils.isBlank(" ")); System.out.println("isBlank(\" \"):" + StringUtils.isBlank(" "));//全角文字の空白 System.out.println("isEmpty(null):" + StringUtils.isEmpty(null)); System.out.println("isEmpty(\"\"
このページを最初にブックマークしてみませんか?
『前人未踏の領域へ アプリ開発編』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く