0. 環境 [Mac] 10.11.6 [MySQL] 5.7.20 1. 問題 MacにMySQLをインストール後、接続しようとするとエラーが出ました。 $ brew install mysql $ mysql -uroot ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38) 2. 対策 ネットの情報をヒントに、エラーが出ているファイルの所有者を変えたら直りました。(ログインユーザー名は読み替えて下さい) $ ll /tmp/mysql.sock -rw-r--r-- 1 root wheel 0 11 19 23:46 /tmp/mysql.sock $ sudo chown [ログインユーザー名] /tmp/mysql.sock 念のためリスタート。 $ brew services restart mysql 接続できました。 $ mysql -uroot ...

Read more

0. 環境 [Windows] 7 [Java] 1.8 [Android] 5.1.1 [Android API] 26 1. 問題 build.gradleで下記の値を上げたところ、onPrepareActionModeが実行されなくなってました。 onPrepareActionModeは、ListViewのロングタップ時にアクションモードへ切り替えた後、アクションバー内のあるアイコンを隠す処理で使っていたので、困りました。 compileSdkVersion : 21 → 26 buildToolsVersion : 21.1.2 → 26.0.2 2. 対策 試しに下記 (A) にあった処理を (B) へ移してみたところ、思った通りの動きをしてくれました。 うーん、前はダメだったからonPrepareActionModeを使ったんだけどなあ。。 他にネットで情報を見つけられなかったので、一旦これにしておくか。 list1 = findViewById(R.id.listView1); list1.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { //(A) //MenuItem menuItem1 = menu.findItem(R.id.menu_item1); //menuItem1.setVisible(false); return false; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = getMenuInflater(); inflater. ...

Read more

0. 環境 [Windows] 7 [Java] 1.8 [Android] 5.1.1 [Android API] 21 1. エラー内容 commons-langを使いたくなったので下記のように追記してビルドしたら、エラーが発生しました。 (文中の【】は読み替えて下さい) (アプリルート)/mobile/build.gradle dependencies { compile '【他のライブラリ】' compile '【他のライブラリ】' compile '【他のライブラリ】' compile 'org.apache.commons:commons-lang3:3.4' } エラー Error:duplicate files during packaging of APK C:\【パス】\mobile-debug-unaligned.apk Path in archive: META-INF/LICENSE.txt Origin 1: C:\【パス】\commons-cli-1.2.jar Origin 2: C:\【パス】\commons-lang3-3.4.jar You can ignore those files in your build.gradle: android { packagingOptions { exclude 'META-INF/LICENSE.txt' } } Error:Execution failed for task ':mobile:packageDebug'. ...

Read more

0. 環境 [Android] 5.1.1 [Android API] 21 1. Preferenceで実装 Preferenceを使ってダイアログに「次回から表示しない」ボタンをつける方法をメモ。 ユーザーに1回だけ何かを伝えたい場合を想定しています。 (MainActivity.thisなど、適宜読み替えて下さい) 2. stethoでPreferenceを編集 開発中にPreferenceの値を変えたり、消したりしたくなると思いますが、そんな時はstethoが便利です。 stethoを起動し、[Local Storage]で該当のActivityを選択すると右側にPreferenceの値(上記コード17行目)が出ます。 右クリックで編集や削除が可能です。 stethoの設定方法は下記記事の「4. stetho 利用」を参照して下さい。 関連記事 AndroidのSQLite DBを参照 ...

Read more

0.環境 [Android] 5.1.1 [Android API] 21 1.準備 Androidアプリ開発で、SQLiteのライブラリを使う際にハマった点をメモ。 まずコンストラクターでDBを使う準備をします。 import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, "test.db", null, 1); //(A)既存のDBを消すには下記コードを使用。 //context.deleteDatabase("DB name is here."); } //以下省略 第2引数でDB名を指定するとDBファイルがAndroid端末に作成されます。 第4引数ではDBバージョンを指定し、DB定義を変える際はこれを1つ上げるようにします。 (バージョンを下げるとクラッシュするので注意) また、開発中にDBを作り直したい場合は、上記(A)で削除しましょう。 2.ハマりポイント - DDL記載箇所 このライブラリは主に使うメソッドが2つあり、DBのバージョンによって下記の通り実行タイミングが異なります。 DBファイルが未作成の場合 : onCreate DBファイルが既にある場合(DBバージョン1以上) : onUpgrade ミスりやすいのが、DBバージョン2以降は、onCreateとonUpgradeの両方にDDLを書く必要があるという点です。 下記のようにusersテーブルがDBバージョン2で追加されたとして、もし、onUpgradeだけに書いてしまうと、DBバージョン1のユーザーにとっては問題ないですが、初期インストールの場合はonCreateしか実行されないため、usersテーブルが作られないことになります。 なので、DBバージョン2以降に追加するDDLはprivateメソッドに書いて、上記の両メソッドから呼ぶようにしたらいいと思います。 @Override public void onCreate(SQLiteDatabase db) { db.beginTransaction(); try { //DBバージョン1でcitiesテーブル作成。 String ddlCities = "CREATE TABLE IF NOT EXISTS cities (" + "city_id INTEGER PRIMARY KEY AUTOINCREMENT" + ", city_name TEXT" + ");"; db. ...

Read more

0.環境 [Android] 5.1.1 文中、【】内は読み替えて下さい。 1.問題 Androidホーム画面の起動アイコンのタイトルをアプリ名にしたくて、下記(3)を追記したのですが変わりません・・・ AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="【パッケージ名】" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="(1) App Name" android:theme="@style/AppTheme" > <activity android:name=".MyActivity" android:label="(2) My Activity's Title" > <intent-filter android:label="(3) App Name"> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> ネットで調べたところ、Android 5.1.1 だと(3)が無視され、下図のように起動アイコンにも(2)が表示されてしまうようです。 2. 対策 まず”AndroidManifest.xml”では、Activityのlabelを下記(3)に変更することで、起動アイコンはアプリ名になります。(intent-filterのlabel指定はやめる) そのままだと、Activityのタイトルもアプリ名になってしまうため、起動時にタイトルを書き換えることにしました。(下記 “MyActivity.java” 参照) AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas. ...

Read more

 更新日:2017年05月16日 0.環境 PC側 [OS] Windows7 (32bit 版) [Android Studio] 1.5.1 スマホ側 [OS] Android 5.1.1 [SQLite] 3.8.6.1 1. 前提 まずSQLiteのデータをファイル形式で保存するよう設定します。 例として、SQLiteを操作するライブラリにSQLiteOpenHelperを使用した場合について記載します。 コンストラクタの第二引数でDBファイル名を指定します。 (未指定の場合、データはメモリにのみ保持されます) class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { //DBファイル名を指定。 super(context, "example.db", null, 1); } PCからAndroid端末にあるSQLiteのDBファイルを見る方法を調べました。 試行錯誤した内容を書いているため、結論だけ知りたい場合は、4まで読み飛ばして下さい。 2. ADB(Androidデバッグ用インターフェース) 利用 ネットを検索して結構あったのが、ADBを使ってSQLiteのDBファイルをAndroid端末からPCへコピーし、その後DBビューワーで参照するというものです。 PCでコマンドプロンプトから下記コマンドを実行すると、カレントディレクトリにtarget.db(任意)というファイルができます。 C:\Users\【ユーザー名】>adb -d shell "run-as 【アプリケーションID】 cat databases/【DBファイル名】">target.db 【】内は読み替えて下さい。 【アプリケーションID】: Android Studioの[File]-[Project Structure]-[Flavors]-[Application Id] ...

Read more

0. 前提 環境などの前提条件は前回の1から3と同じです。 今回は教科書の[1. Reduce number of HTTP requests]-[Use Browser Cache]をやってみました。 修正が少ない静的ファイルはブラウザキャッシュの期間を延ばし、2回目以降のアクセスはキャッシュから読み込むことで速度向上につなげます。 作業は下記の2点です。 (1) キャッシュ期間延長  Webサーバーの設定でjs、cssのブラウザ・キャッシュ期間を延ばします。 (2) ファイル名のユニーク化  上記1によって修正がすぐに反映されないという状況を避けるため、ファイル名に修正ごとのハッシュ値を付けてキャッシュが効かないようにします。(gulpの機能を利用) 1. キャッシュ期間延長 nginxの設定ファイルにjs、cssの設定とキャッシュ期間を追記しました。 記述が冗長なのは追って別の書き方を調べたいと思います。 server { listen 443 ssl; server_name [ドメイン名]; ssl_certificate [ファイルパス]; ssl_certificate_key [ファイルパス]; location / { proxy_pass http://[ホスト名]:[ポート番号]; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_set_header Host $host; } # --- css/jsの指定を追加。 --- location ~* .(css|js)$ { proxy_pass http://[ホスト名]:[ポート番号]; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_set_header Host $host; # キャッシュ期間を設定。 expires 365d; } # --- css/jsの指定を追加。 --- } ChromeのDeveloper Toolsで見て、Expiresヘッダーの追加とjs、cssがキャッシュから読み込まれていることを確認します。(下図オレンジの枠線) ...

Read more

0. 環境 [Mac] 10.11.6 [Hugo] 0.19 1.インストール ここ数年、ブログウェアはjekyllを使ってましたが、下記の点が不便だったので、評判の良いHugoを試してみました。まずはサンプルを動かすところまで。 初期構築やバージョンアップが大変だったので、他のPCに環境を作る気になれない。(今ならDockerという手もありますが…) 記事の生成に時間がかかるようになってきた。 記事の更新後、2~3回リロードしないとブラウザに反映されない。 インストール・マニュアルに従って進めました。 僕の場合、Homebrewは既に入っていたのでStep2からやりました。 $ brew update $ brew install hugo 「インストール後にバージョンを調べてね」と書いてあるので念のためチェックです。 $ ls -l $( which hugo ) lrwxr-xr-x 1 mx admin 28 3 19 03:08 /usr/local/bin/hugo -> ../Cellar/hugo/0.19/bin/hugo $ hugo version Hugo Static Site Generator v0.19 darwin/amd64 BuildDate: 2017-02-27T19:21:29+09:00 2行とも0.19なので問題なさそうです。 2.サンプル作成 こちらのページに沿ってサンプルを作成しました。 適当なディレクトリで下記を実行します。(僕の場合 /app/hugo-test/ なので読み替えて下さい) ...

Read more