4ヶ月くらい起動していなかったVirtualBoxで久々に開発をしようと思ったらエラーが発生しました。 ネット上の情報はあまりなく、下記のいずれかでした。Bはいつの時点に戻すか分からなかったので、Aでやることにしました。 (A)VirtualBoxを再インストール。 (B)Windowsの復元機能を使って、Windowsアップデート前の状態にする。 0. 環境 [OS] Windows7 (32bit) [VirtualBox] 4.3.26 -> 5.2.32 [Vagrant] 1.7.2 -> 2.2.5 1. 問題 VagrantからVirtualBoxを起動する構成です。(詳細はこちら) いつものようにvagrant upやvagrant resumeでVirtualBoxを起動しようとしたところ、このエラーが出ました。 エラーメッセージ supHardenedWinVerifyProcess failed with VERR_ASN1_CURSOR_TAG_MISMATCH: (rc=-22838) 2. 対応 内部エラーで複雑そうなので、一度VirtualBoxをアンインストールし、新しいバージョンをインストールしました。 32bit OSに対応してて、新し目のバージョン5.2.32を選択しました。(5.2.32のWindows hostsをクリック) 64bit OSを使ってる方は、もっと新しいバージョンの方がいいと思います。 VirtualBoxを再インストール後、vagrant upを実行すると下記エラーメッセージが表示されました。 エラーメッセージ The provider 'virtualbox' that was requested to back the machine 'default' is reporting that it isn't usable on this system. ...

Read more

JavaScriptで半角・全角カナの相互変換を行う疑似クラスです。シンプルなロジックなのでカスタマイズも簡単にできます。 下記ブラウザで確認していますが、何かあればこちらから連絡いただけると嬉しいです。 0. 環境 [OS] Windows7 [Browser] Chrome, Firefox(69.0), IE11 1. サンプル 使い方は下記サンプル内の”Test”を見て下さい。記載した2つのメソッドに文字列を渡すだけです。 2. 参考にした記事 JavaScriptで正規表現(文字列置換え編) Objectのkeyとvalueを反転させる。もしくはJSでenum的なものを作る。 ...

Read more

CursorWindowAllocationException が発生した時の対処方法です。 0. 環境 [Windows] 7 [Java] 1.8 [Android] 5.1.1 [Android API] 26 1. 問題 開発中のAndroidアプリでSQLiteを使ってます。 サブクエリを使って、今までより抽出データが多くなるSQLを書いたところ、画面遷移中に頻繁にクラッシュするようになりました。 しかも、特定のテスト機(Galaxy S4(Android5.0.1))のみです。 (A)エラー内容 Fatal Exception: android.database.CursorWindowAllocationException Cursor window allocation of 2048 kb failed. # Open Cursors=700 (# cursors opened by this proc=700) (B)エラー箇所 前述のサブクエリを適用した箇所とは全く別の箇所が毎回落ちるポイントでした。(下記2行目) Cursor cursorCountUsers = db.rawQuery("SELECT COUNT(user_id) FROM users", null); cursorCountUsers.moveToFirst(); int countUserId = cursorCountUsers.getInt(0); return countUserId; 2. 対策 Slackoverflowで同じ問題を見つけました。 まず、毎回同じ箇所で落ちるので、上記(B)にcursorCountUsers.close();を入れたけど直りませんでした。 ...

Read more

Android7 で android.os.FileUriExposedException が発生した時の対処方法です。 (文中の【】は読み替えて下さい) 0. 環境 [Windows] 7 [Java] 1.8 [Android] 5.1.1 [Android API] 26 1. 問題 Androidアプリから一時ファイルを作成して、そのURIを外部のアプリに渡すという処理を実装してました。 (ファイルを作成して、Gmailに添付するなど) Android7からfile://による指定ができなくなったため、下記のエラーが発生します。 android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/【アプリのパッケージ名】/temporary/【一時ファイル名】 exposed beyond app through ClipData.Item.getUri() URIはFileProviderで作らないといけないそうです。 2. 対策 2-1. AndroidManifest.xml まず、AndroidManifest.xmlにFileProviderの定義を追加します。 android:resourceには、2-2で作成するファイル名を指定。 2-2. res/xml/provider_paths.xml 次に、res/xml/provider_paths.xml を作成します。 後述の2-3でfileの保存先を Environment.getExternalStorageDirectory() の直下にしたので、それを表すexternal-pathを指定します。 また、直下なのでpathはカレントディレクトリになります。 2-3. 該当処理を行っているActivity 最後に、URIの生成を下記(1)から(2)に変更しました。 3. 参考 FileProviderリファレンス ...

Read more

MonitでApacheとMySQLを復旧させる最低限の設定です。 (文中のドメイン名やメールアドレスは読み替えて下さい) 0. 環境 [CentOS] 6.4 (64bit版カーネル) [Monit] 5.25.1 [Apache] 2.2.15 [MySQL] 5.1.73 1. セットアップ インストール # yum install monit 自動起動を設定 # chkconfig monit on 2. 設定 2-1. Apacheの監視設定 httpd.conf を開いて、 # vim /etc/monit.d/httpd.conf 下記を記載。 check process httpd with pidfile /var/run/httpd/httpd.pid start program = "/etc/init.d/httpd start" stop program = "/etc/init.d/httpd stop" if 5 restarts within 5 cycles then timeout if failed host example. ...

Read more

0. 環境 [Windows] 7 [Java] 1.8 [Android] 5.1.1 [Android API] 26 1. 問題 Androidアプリの開発で、自前のAPIからデータを取得する処理を組んでいたところ、下記エラーが発生するようになりました。 java.net.SocketException: Socket is closed コードはこちら。 2. 対策 まずAPI側でApacheのログを確認したところ、ステータスコード200で問題なしでした。 127.0.0.1 - - [05/May/2018:22:55:02 +0900] "POST /api/test HTTP/1.0" 200 11130 正常終了するケースとの違いは、レスポンスのデータ量が多くなってることかな。(上記ログ右端) 次にAndroidアプリ側の処理があやしいと考えて、いろいろ試した結果、HttpsURLConnectionのクローズのタイミングが問題だと分かりました。 同オブジェクトを参照しているオブジェクトを全て使い終わってから、クローズする必要がありそうです。(上記(1)→(2)に移す) また、クローズ処理を消すだけでも冒頭のエラーは出なくなりましたが、なるべくオブジェクトは明示的に閉じた方が良いと思います。 なので、最終的にオブジェクトの作成順とは逆にクローズしていく処理を入れました。(下記(3)(4)) ...

Read more

 更新日:2018年05月01日 0. 環境 [CentOS] 6.4 (64bit版カーネル) [Apache] 2.2.15 1. 問題 あるドメインが不要になったのでDNSから削除しました。 Let’s Encryptで証明書を発行していたドメインだったので、証明書の更新時に下記エラーが出るようになりました。 (“example.net”は読み替えて下さい) それ以外のドメインについては成功メッセージが出ているにも関わらず、ブラウザで確認すると証明書が更新されず、困りました。 1 renew failure(s), 0 parse failure(s) IMPORTANT NOTES: - The following errors were reported by the server: Domain: example.net Type: None Detail: DNS problem: NXDOMAIN looking up A for example.net Automated renewal failed 2. 対策 下記を撤去することで、certbot-autoで証明書を更新する際にエラーは出なくなりました。 # mv /etc/letsencrypt/live/example.net/ /tmp/ # mv /etc/letsencrypt/renewal/example.net.conf /tmp/ さらにApache設定ファイルから、証明書などを指定した箇所を削除します。 この状態で起動するかチェックするため、Apacheを再起動しておきましょう。 <VirtualHost *:4430> ServerAdmin admin@example. ...

Read more

0. 環境 [OS] Windows 10 1. 問題 Windows UpdateしたらIE11でvbscriptが動かなくなりました。 おそらくバージョン1709から。 バージョンはWindows左下のボックスでwinverと入力すると表示されます。 前から予告されてたみたいですが、急に来た感が否めません。 僕みたいにレガシーシステムの保守をしてて困った人はいるのでは? 2. 対策 MicroSoft(以下MS)の下記ページに従ってグループポリシーの値を変えたら、vbscriptが有効になりました。 Internet Explorer のインターネット ゾーンおよび制限付きサイト ゾーン内の VBScript の実行を無効にするオプション もっと簡単な操作で変更したかったので、GUIではなく、同ページ内のレジストリファイルでのやり方を試しました。 ここでハマってしまい、いろいろ調べた結果、こちらのページのおかげで解決できました。 上記MSページのレジストリパスが違っていることが原因でした・・・ こちらのファイルをWindows上の適当な場所に置いてダブルクリックするとvbscriptが有効になります。 他にも調べたら、正しいレジストリパスを書いたページがありました。 うーん、MS本家が間違ってるってどういうことなんだろう? ...

Read more

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