めちゃくちゃ基礎的な内容なのですが、備忘録を兼ねてメモしておく
DBまるごと
よくやるmysqldumpコマンド
1
|
|
テーブル単位
tオプションは、「テーブル作成情報(CREATE TABLE ステートメント)を書き込まない」という内容を指す
migrationなどで先にテーブルを作った場合とかに有効活用できる
1
|
|
上のコマンドのようにテーブル名は複数指定可能(my_table1, my_table2などが該当)
リストア
1
|
|
よくやるmysqldumpコマンド
1
|
|
tオプションは、「テーブル作成情報(CREATE TABLE ステートメント)を書き込まない」という内容を指す
migrationなどで先にテーブルを作った場合とかに有効活用できる
1
|
|
上のコマンドのようにテーブル名は複数指定可能(my_table1, my_table2などが該当)
1
|
|
WebAPIと連携するようなAndroidアプリを作っているのですが 開発と本番で接続先を切り替える必要が出てきました。
それのライトな対応方法をメモ
以下のような形で記載
1 2 3 4 5 6 7 8 |
|
以下のように特に気にせずBuildConfigを参照すればよい
1
|
|
ビルド環境に応じた値が取得できる
これぐらいなら、まぁbuild.gradleでいいやという気がするもののパラメータ増えたら収拾つかなくなる予感
真面目にやるならBuild Variantsを使うほうがよいかと思います
JavaでRestfulといえば、JAX-RSが有名ですね。
それを扱いやすくしたFrameworkといえば、Jerseyになります。
これをHerokuで動かすようにしてみます。
ついでにオワコン臭漂うmavenを辞めて、Gradleでビルドができるようにもしてみます
以下ができていること
まずはmaven ArchTypeから必要なファイルを準備
ここを参考にすると、ArchTypeは2種類あることが分かります。
今回はJettyで動かすので、サーブレットコンテナ用のものを使います
1
|
|
必要項目を聞かれますので、以下のような感じで入力していきます
1 2 3 4 |
|
成功すれば、以下の構成になります
1 2 3 4 5 6 7 8 9 10 11 |
|
普通に考えると、mavenを使わなければpom.xmlを残してもよいかと思います(自分も最初は思いました) Herokuではmavenがデフォルトで使われますので、削除してしまいます
1
|
|
どうやら、mavenとGradleの両方のビルドファイルが存在するとHerokuではmavenのものが最優先で使われるようです
以下の内容をbuild.gradle
に記載します
このファイルのミソはtask stage(dependsOn: ['clean', 'installApp'])
を記載していることです。
Herokuではこのタスクが必要なようです。
公式を参考にしました。
多分、必要無いと思いますが念のためgradlewも用意しました(自分は一応、これもファイルに追加しています)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
最低限度の内容でJettyサーバが動くようにします
mainメソッドにサーバの実装を記載します。
Gradleに記載したように、これがmainClassになります(mainClassNameを参照)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
以下の構成になるようにMainクラスを配置します
1 2 3 4 5 6 7 8 9 10 11 12 |
|
まずは、テストが動くかどうか確認
1 2 |
|
次にアプリをビルドし、サーバを起動
1 2 3 |
|
以下のコマンドでGot it!
が返却されるか確認
1
|
|
Herokuで動かすJavaのバージョンを指定するsystem.propertiesを作成
(以下のようにとりあえず確実に動作するバージョンを指定)
1
|
|
Procfileに記載するスクリプトファイルの確認
1
|
|
こういう形にビルド結果が出力されているので、アプリケーション起動スクリプトのファイルパスを確認する
1 2 3 4 5 6 7 8 9 10 11 12 |
|
生成したスクリプトファイルパスをProcfileに記載
1
|
|
不要ファイルを無視するように.gitignoreを作成
(Herokuへのデプロイはgitのため)
1 2 |
|
最終的に以下の構成になります
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
herokuへloginする
1 2 |
|
サーバへデプロイする
1 2 3 4 5 |
|
以下のコマンドでGot it!
が返却されるか動作確認
1
|
|
書くと簡単でしたが、実際にやってみると思った以上に嵌まりどころが多かった
特に以下が盛大な罠でした
heroku logs
を確認するとapp crash
と表示されて何がなんだかわからんかったことapp crash
起因ですがweb.xmlはいじらなくてもいいのか?なんて思ったこと一度環境さえ準備できれば開発に専念できるようになるので、非常に楽ですね
同僚とApacheとTomcatって何で連携させるんだっけ?
という話が出たので備忘録的に記載しておきます
ぶっちゃけ、今更感がすごい内容ですが・・・
ざっくり言うと、クライアントのブラウザからアクセスし、サービスを提供するためのWebサーバソフトウェア
こちらもざっくり言うと、以下のもの
開発、デバッグ用途としてWebサーバ機能があるので、問題はないのですが そもそもとして、ApacheなどのWebサーバの性能と同等に捌けるかは疑問があったりするところ
なので、以下の処理分担としたほうが効率よく捌けるため連携をさせることが多い
所謂、餅は餅屋ということですな
APIを作るときにどうするか?を開発チーム内で議論したので、備忘録的なメモ
発端となった会話は、こんな感じだったはず
「マイクロアーキテクチャなサービスを作ったときってAPIを作ると思うけど、ライフサイクルって考えてる?」
「APIを利用するフロントは更新できるけど、APIは依存されるものが多いから簡単には更新できないよね?」
「APIってモバイルアプリからも利用した場合、修正しづらくない?バージョン管理でもするの?」
以下の3つぐらいになりそう
APIのバージョン管理方式は以下のものが採用される傾向にある
世間的には、2のパターンが比較的多く採用される傾向
バージョニングは以下のセマンティックバージョニング方式を取ることが多い
後方互換が保てない場合のみ実施し、バージョンアップのルールを整理してから行う
# モバイル向けAPIの場合、ユーザー体験に直結するので仕様として予め考えておく(モバイル向けの場合、APIの停止はトレンドを見つつ行うこと) # アプリのアップデートを促すようにしておく(強制アップデートは好まれないが、使えなくなるよりも遥かにマシ)
毎度なんだっけ?ってなって思い出すのが面倒なので、備忘録的にログイン履歴確認方法を記録
以下のコマンドで確認できる
1
|
|
実行結果(上に行くほど最新)
1 2 3 |
|
もう少し細かく見る場合はログファイルを確認する
バイナリなので中を見たいときはwhoコマンドを使用する
1
|
|
実行結果(ログファイルなので、ファイル末尾が新しい)
1 2 3 |
|
普段利用していないアカウントでログインされていないか確認できる
以下のコマンドで確認できる
1
|
|
実行結果(各アカウントの最終ログインが表示)
1 2 3 4 5 6 7 8 |
|
常々、画像ファイルってどう表示するのだっけ?と思っていたのでやってみた感じ
octopress/source/images
ディレクトリに画像ファイルを格納する
themeで表示している画像が最初から格納されているので、ビビらず画像ファイルを格納すること
公式を参照すればできる模様
そのため前述の格納先を相対URLで指定すると、以下の形になる
1
|
|
こんな感じでやると画像を表示できる
TimeCapsuleのIPアドレスを固定にしたかったので、MACアドレスを調べる必要が出てきた
また同じことにならないようにメモしておく
下記の図のように、AirMacユーティリティを開き機器のタイトルを選択すると表示されます
ここの内容は完全に備忘録です。
何故かというと、自分がちょっと実現したい機能があったけどできるのだろうかと調べてみたメモだからです。
所謂、下向きに引っ張るとListViewが更新されるやつですね。
これはAPI Level19のSupport V4 Libraryにて機能提供されているので、簡単に実現できます。
(ちょっと癖はあるかもしれませんが・・・)
以下にデモとReferenceを記載
# デモを見ればわかりますが、扱うだけなら非常に楽に使えるような感じになっています(カスタムは面倒臭さそう)
# ぐぐれば、いっぱい記事は見つかるので詳細はそちらに譲ります
下から上にListViewを引っ張ると、ListViewが更新されること
俗に言う、bottomup to refreshってやつです
Android-PullToRefreshが、対応している 但し、作者がdeprecated宣言
少し試してみた感じだと、標準機能を駆使して実現(Classの継承など)は、まず無理かも
# そもそも、そんな感じで簡単にrefreshする機能を上下を入れ替え作られているような感じにはなってなかった
結論から言うと、onTouchEventでアニメーションの実施の有無など詳細な条件判定とかやっているので今のところ難しそう
# 追いかけた結果を書くのは割愛します
同じことを考える方はいらっしゃるようですね。
SwipeRefreshLayout - Pull From Bottom
ざっくり書くと、こんな感じ
# ソースコード見た感触とあまり変わらない(´・ω・`)
API叩いて直ぐ実現可能というわけではないようですね(´・ω・`)
Emacsのバージョンを最新にしたことで色々設定が楽に書けることがわかった
そのため、最新内容を反映させた
とはいえ、下位互換もある程度保ちたかった
(全部、追従すればいいのだがそうもいかない環境もあるので)
普通にバージョンを取得してみた
1 2 3 |
|
文字列のマッチング処理が多くなりそうで結構めんどくさい・・・
普通のmajor/minor バージョン判定を複合した条件判定するだけの関数を用意
24.3以下の判定
1
|
|