2016年8月15日月曜日

docomo Xperia Z3 Compact のAndroid6.0.1で内部ストレージを増やす

先日(2016/8/9)に、Xperia Z3 Compact SO-02G のAndroid6.0.1アップデートが公開されました。

個人的に待ち望んでいたのが外部SDカードを内部ストレージの一部として利用できる点。
これにより、アプリをSDカードへ移せるようになります。

画面からポチポチ設定とできないという噂は知っていたのですが
実際も画面からは設定できませんでしたので、少し手間をかける必要がありました。

なお、実施にあたってはこちらのサイトを参考にさせて頂きました。
詳しい説明、ツール類の準備方法等詳しく説明されていますので
まずはこちらをご覧頂ければと思います。(シンさん勝手にリンクして恐縮です)

Android 6.0 MarshmallowでSDカードを内部ストレージとして使用する方法
http://xinroom.net/mobile/so-02g-mm-sd-card-internal-storage/

なお、本作業実施の際には、事前にSDカードのバックアップをお奨めします。



以下は実施してみて自分がはまったこと、気づいたことの備忘録です。
※私は64GB(Toshiba製)のmicroSDカードを利用しています。


外部SDの編集コマンドで例外エラーが発生した。

まず出だしからはまった感じです。手順通り進むことができませんでした。

実施したコマンド

sm partition disk:179,64 mixed 50
※179,64 の部分はお使いの機器により異なります。

発生したエラーの内容

java.lang.IllegalStateException: java.util.concurrent.TimeoutException

おそらく、パソコン側から送った命令に対し、Android側からの応答がなく、タイムアウトになったものと思われます。
このエラーが発生した後は再度手順をやり直してもうまくいきませんでした。
そのうえ、Windowsパソコンに挿すと、認識できないディスクとなってしまい、Androidに挿しなおしてもSDカードとして認識しませんでした。

対処

1) SDカードを完全にフォーマット

以下サイトよりツールをダウンロードし、起動、SDを指定してフォーマットすることによりSDカードそのものを初期化できました。
ツールの使い方等は「SDフォーマッター」などで検索し各自ご確認ください。

https://www.sdcard.org/jp/downloads/formatter_4/

2) 利用する領域を狭めてコマンド実施

sm partition disk:179,64 mixed 75
これにより、勝手に再起動してくれるようになりました。手順通りとなった感じです。
その後、しばらく待つと、Androidが無事起動し、内部ストレージの一部として認識されるようになりました。(画像参照)

※画像は、諸々いじった後のものなので領域の使用量などが変わっています。


ひとまず認識したので、当初目標はクリアといった感じです。

その他の注意点

自分なりに引っかかったところ、内部ストレージを拡張した後に気づいたところをメモしておきます。

mixedの指定をする際、その後の数字は外部SDの割合(%)を意味する

※外部SD扱いとは、今まで通りのSDとして使うという意味として使っています。
※外部SD扱いにしておくと、通常のパソコン等からも読み書きができます。
例1:50%を外部SD扱いとする場合
sm partition disk:179,64 mixed 50
例2:75%を外部SD扱いとする場合
sm partition disk:179,64 mixed 75
自分の場合はパソコンからもデータ書き込みをしたりするため、外部SDとしての領域は必要でした。そのため、内部ストレージ用16GB(25%)、外部SD用48GB(75%)として作成しています。

内部領域は増えても、移動できるアプリと移動できないアプリが存在する。

内部ストレージの拡張が完了すると、移動できるアプリの場合、画面に選択肢が出るようになります。
画像:「設定」→「ストレージ」→「アプリ」から対象のアプリを開いたもの


一方、移動できないアプリの場合、選択肢そのものが出てきません。


また、上記画像の選択肢のなかから「外部SD」を選択するとその時点でアプリをSDへ移動してくれるのですが、移動にあたってはいろいろと注意が必要です。
状況によっては再インストールが必要となる可能性もあるため、アカウント等は事前にバックアップを取っておいたほうが良いかと思います。

ケース1. 移動する選択肢が出てこないアプリ

・docomo標準アプリ
・google関連アプリ(map,chrome等)
その他諸々とありましたが、機器と密接にかかわっているのだろうと判断し諦めました。

ケース2. 移動はできるが、その後、起動しなくなるアプリ

・パズドラ →起動できなくなりました。
・モンスト →起動はできましたが、アカウントがリセットされてしまったため、本体に戻したところ復旧しました

ケース3. 移動、起動はできるが、その後動作がおかしくなるアプリ

・Evernote
 データベースが作成できないという例外エラーが出るようになり、アンインストール、再インストールをしても変わらずでした。
 その後、SDカードを外した状態でインストールすると正常に動作するようになりました。
・ジョルテ(カレンダーアプリ)
 「ウィジェット」が選択できなくなってしまう事象となりアンインストール、再インストールで現象が
 改善されました。


環境設定が完了したあとでも諸々とハードルは高そうですが、少なくとも、内部ストレージが数百MBを切ってしまって困っていた自分にとっては重要なアップデートになってくれたことは事実です。

公式な手順ではない以上、これからも諸々不具合等出るとは思いますが都度工夫こらしつつクリアしていければと思っています。
※最悪全再インストールでしょう。

2016年7月20日水曜日

Sakura VPS + CentOS 6.8でkernel panicになったので対処

普段から使っているSakura VPSの管理用サーバーに突然接続できなくなり、Webの管理メニューから強制再起動、その後の一部始終メモです。

結果としては、カーネル関連の再インストールをしただけで復旧することができました。
サーバー管理者ながら、Kernel回りには触れたことがなかったので、備忘録として残しておきます。

まず結果だけ

yum clean all
yum reinstall kernel
reboot
3つのkernel関連パッケージが再インストールされ、その後の再起動で問題なく起動したため終了です

発覚までの経緯

いつも使っているWebアプリにつながらない。
Web管理画面から管理コンソールを開き、起動ログを確認していたところ、謎のメッセージがでて処理が止まってしまっていることが発覚。
ログを読む限り、ハードディスクが見つからない。
ハードディスクの故障!?なんてことも疑いましたが、まずはブートローダー(GRUB)を開いてみることに。(ハード起動後F2で選択画面)

過去のKernelが選択できたので選ぶと無事起動。
どうやらハードディスクの問題ではなさそうです。
なお、ハードディスクを疑ったのは、並列で稼働しているSakura VPSが普通に起動していたため。

kernelが更新された?

yumの更新ログを確認
cat /var/log/yum.log

Jul 14 03:29:03 Updated: kernel-firmware-2.6.32-642.3.1.el6.noarch
Jul 14 03:29:12 Installed: kernel-2.6.32-642.3.1.el6.x86_64
Jul 14 03:29:14 Updated: kernel-headers-2.6.32-642.3.1.el6.x86_64
Jul 14 03:29:21 Installed: kernel-devel-2.6.32-642.3.1.el6.x86_64
いました。 これが原因である可能性が高いです。
原因となりうるケースをネットで検索していく中で、initrdが書かれないという事象があった事に遭遇。

grub.confの内容調査

cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/vda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/vda
default=0
timeout=5
#splashimage=(hd0,0)/grub/splash.xpm.gz
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
hiddenmenu
title CentOS (2.6.32-642.3.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.3.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
title CentOS (2.6.32-642.1.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.1.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.1.1.el6.x86_64.img
title CentOS (2.6.32-642.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.el6.x86_64.img
title CentOS (2.6.32-573.26.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.26.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-573.26.1.el6.x86_64.img
title CentOS (2.6.32-573.22.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.22.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-573.22.1.el6.x86_64.img


確かに、先頭の部分にinitrdの記載がありません。

修復を試みる

initrdを書けば直る可能性を意識しつつ、何かしらの不整合も疑うこととし、再インストールと判断。
yum自体の動作不良も疑うため、キャッシュはクリアしたのちに再インストール
yum clean all
yum reinstall kernel
/etc/grub.confの内容を確認 (抜粋)
terminal --timeout=10 serial console
hiddenmenu
title CentOS (2.6.32-642.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.el6.x86_64.img
title CentOS (2.6.32-642.3.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.3.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.3.1.el6.x86_64.img
すべての行にinitrdが書かれたので、復旧されたと判断、再起動

起動したので、終了となりました。

2016年7月6日水曜日

MySQLでコメントの文字コードを間違ってしまった場合の探し方

日々データベースを操作していると、ついうっかり、テーブル定義のDDLをShift-JISで作ってしまう場合があります。

そんなとき、すぐわかれば作り直しでよいのですが、気づかず運用してしまった場合に
MySQLのWarningsを確認することで対処する方法をメモします。

【要約】

・文字コード違いのデータが格納されている場合、MySQLのCUIで教えてくれる。

【カラムコメントの確認と直しかた】

 $] mysql -uroot ~ ログイン
> select column_comment from information_schema.columns where table_schema = database();
> show warnings;

 警告があると、教えてくれます。

変更方法(通常のALTER TABLE MODIDY です)
> ALTER TABLE TABLENAME MODIFY COLUMNNAME char(2) DEFAULT NULL COMMENT 'コメントを記載';

【テーブルコメントの確認と直しかた】


> select * from information_schema.tables where table_schema = database();
> show warnings;
> alter table TABLENAME COMMENT 'テーブル名';

2016年6月1日水曜日

MySQLにてtoo many connections のエラーが出たときの対処

稼働中アプリを動かしていたところ、システムエラーが発生しました。
エラーログを見てみると [ too many connections ] と。
MySQLのエラーということはわかったので、mysqlサーバーへコンソールログインして確認、処置を行います。

現在の接続状況を確認

> show processlist;
+------+-------+-----------------+-----------+---------+------+------+------+
| Id   | User  | Host            | db        | Command | Time | State| Info |
+------+-------+-----------------+-----------+---------+------+------+------+
| 1944 | user  | hostname : port | dbName    | Sleep   |    6 |      | NULL |
+------+-------+-----------------+-----------+---------+------+------+------|
140 rows in set (0.00 sec)

ここでいうところのrows が接続数

設定の確認

> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

現在は151

> show variables like "%wait_timeout%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+

8時間って・・・長いし。(デフォルトでした)

一時しのぎとしてオンラインで設定変更

> set global max_connections = 300;
からの確認

> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 300   |
+-----------------+-------+

変わりました。

永続設定

/etc/my.cnfへ記載します。
[mysqld]
wait_timeout=3600
max_connections=200

2016年5月26日木曜日

稼働中SVN環境にリポジトリを追加する

svnadmin create RepositoryName
chown apache RepositoryName

※apacheの部分は実環境のユーザーで。

Googleマップの「スター」についている名前の変更方法

Googleマップをよく活用しています。

手持ちのスマホがAndroidであることもその要因の一つですが、それ以外にも
・タイムラインが使える(勝手に情報収集しているということはさておき)
 https://www.google.com/maps/timeline
・ナビの予測時間が精度高い。
・マイマップで地点を登録/記憶できる(マイプレイス機能)

などなど、日々使っています。


そのうえで、「スター」の編集をしたいと思い調べていたところ、
「Googleブックマーク」からできることが分かったのでメモ。

https://www.google.co.jp/bookmarks/

サイト名を変更すると、「スター」の名前が変わります。

確認するときにはGoogle Mapにアクセスして、左上のメニューアイコンをクリック

「マイプレイス」⇒「保存済み」とたどります。

私の環境ではスマホは即反映されたのですが、パソコンでは変わるまで時間がかかりました。
(たぶんキャッシュの関係かと思いますが原因究明はしませんでした)


「スター」は、気軽に使える機能なので、こういった細かいことができるのはうれしい限りです。


いろいろ登録していくと個人情報のかたまりみたいになっていってしまうのは気がかりですが
そこは二段階認証などでクリアするとして、便利な機能はどんどん使っていこうと思います。


2016年5月2日月曜日

VisualStudioでLocalDBを使うときのメモ

照合順が異なることで日本語の文字化けが発生してしまったため作業手順をメモ

そもそも

ソリューションエクスプローラなどから追加できる「サービスベースのデータベース」は照合順序が「SQL_Latin1_General_CP1_CI_AS」となっている。
変更するにはALTER DATABASEにて行う。

実施するコマンド

ALTER DATABASE [データベースのフルパス] COLLATE Japanese_XJIS_100_CI_AI_WS

mdfの場合、物理パス名を指定する。
フルパスは以下のコマンドで取得可能

SELECT DB_NAME()

対応している照合順序を取得する方法

SELECT name, description FROM sys.fn_helpcollations()
WHERE name like '%JAP%';

エラー5072が発生したとき

発生したメッセージ

ALTER DATABASE が失敗しました。データベース 'DBNAME' の既定の
照合順序をJapanese_XJIS_100_CI_AI_WS に設定できません。

何かの接続があることが原因(のはず)

・プロセスを確認
select * from sys.sysprocesses

・KILLコマンドで該当の接続を切断(SPIDは上記SQLで取得可)
KILL [SPID]


SVN commitが失敗したうえにCleanupに失敗したときの対処

※WindowsPCで処理をしていた時の出来事です。

現象

SVN対象のフォルダに大きめのzipを作っているさなかにSVN COMMITをしてしまい、
SVN COMMIT対象としてzipの一時ファイルが認識されてしまいました。
COMMIT前にzipファイルへと置き換わってしまったため、
SVNとしては「COMMITしようとしたファイルがない」と怒ります。(当然です)

試したこと

クリーンアップをしろということで以下を試してもダメ。
・tortoirseSVNからクリーンアップ(当該フォルダ)
・tortoirseSVNからクリーンアップ(ルートのフォルダ)
・ルートフォルダをコマンドプロンプトで開き「svn cleanup」

ちなみに、コマンドプロンプトから実行したときの応答が以下
svn: E155009: Failed to run the WC DB work queue associated with 'D:\Project\dev', work item 76284 (file-commit trunk/sub1/sub2/sub3/zia09324) svn: E720002: Can't set file 'D:\Project\dev\trunk\sub1\sub2\sub3\zia09324' read-write: 指定されたファイルが見つかりません。
えぇ、zipに変わってしまいましたとも。すみません。

処置

多少無理やりかもしれませんが、上記の「見つからないファイル」⇒ここでいうところの「zia09324のファイル」を対象のフォルダに作成したうえで、ルートフォルダから svn cleanup を行うことで現象を解消することができました。
作成するファイルは何でも大丈夫です。(私はゼロバイトファイルを作りました)

追伸

原因究明のためにリポジトリブラウザから対象のフォルダがどうなっているかをのぞいてみたのですが、zip09324というファイルはありました。
作ったファイルを削除、コミットすることでリポジトリからも削除することができました。

まとめ

・コミットするときはファイル操作やめましょう。
・もし失敗したら、リポジトリ側とファイル構成を合わせてからクリーンアップしましょう。
・コマンドプロンプトからのSVN操作は細かいことも教えてくれるので役に立ちます。

2016年4月22日金曜日

利用者へのサポートについて(雑記・まとまっていません

IT業におけるサポート業務というのは環境状況において諸々あると思うのですが、
今までなんとなく対応していた業務クラウドソフトのサポート業務を
見直す機会が出てきたため、今現時点の発想をまとめておこうと思います。


注) まとめといいながら、今現時点ではまだまとまっていません。


以下、サポートの切り口です。

1) 電話

なんといっても対応が早い。日本語解釈の違いなどによる意思疎通ズレも少なくなります。
反面、時間をとられてしまうので使い方には要注意。
高度化するとCTIなどになると思いますが、現状そこまでは不要です。
やり取りした情報を、FAQとしてデータベース化するための仕組みも必要です。

2) メール

双方とも、時間を気にせず発信できるのがメリットです。
文章(データ)として残るので、あとあとのためにも役に立ちます。
CC等の活用により、関係者とも情報共有できるのも強みです。

3) 訪問

対応で言ったら一番早いですよね。問題は立地や移動時間やそこで発生する実費。
サービス対価を頂けるのであれば問題ない方法です。

4) 遠隔リモート

立地は関係なし。直接環境を見れるのでズレが少ない。
デメリットがあるとすれば、リモート環境構築までに少しだけ、手間が発生するということ。
この楽さに利用者が慣れてしまうと、いつでもどこでも聞いていて「リモートで見てほしい」となってしまう事でしょうか。
⇒メリットとするケースもあると思うのでケースバイケースです。

5) チャット・メッセージングツール

メールと、電話の中間でしょうか?
時間がとられつつ、データは残りつつ、問い合わせは解消できる。

6) 掲示板

メールとほぼ類似だとは思いますが、登録した情報が第三者にも見れるという点では、メリットはあると思います。

7) ホームページ等での周知・公開

ホームページに関わらず、最近ではTwitterやLINEなどでも情報発信が行われています。
先手を打って情報公開する事により、メリットは出てきそうです。

結局は?

まだ整理の途中(上記以外の手段もまだまだあるはずです)ですが、結局は、ニーズを把握して、リソースを適切に割り当てられる方法を採用する事になると思います。

業務クラウドソフトのサポートであり、料金もクラウドに即した体系となっているため訪問は見合いませんし、とはいえ、訪問による利用者の信頼度向上は間違いないので、一方的に切り捨てる判断も難しい。

まだまだ検討・整理段階ではありますが、アイデアを絞って利用者のためになるサポート体系を構築・運用する必要があると思いました。

2016年4月14日木曜日

ActiveReportsのベーシックな利用方法

たまに使うので、いつも忘れてしまいます。

備忘録として

グループヘッダにグループ毎の集計を出力する方法は?
https://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=27280

グループフッタで集計
SummaryFunc = Sum
SummaryGroup = グループヘッダ名
SummaryRunning = Group
SummaryType = SubTotal

グループヘッダで集計
SummaryFunc = Sum
SummaryGroup = グループヘッダ名
SummaryRunning = None
SummaryType = SubTotal

書式

OutputFormat

WrapModeとCanShrinkのプロパティは切る

グループごとにページ

SummaryFunc = Sum
SummaryGroup = グループヘッダ名
SummaryRunning = Group
SummaryType = SubTotal


罫線など


レポートを複数作って、overlayでいける