2016年7月5日
このところandroidのスマホが調子悪い人いませんか?
私は先週くらいから急に調子が悪くなってしまい、なかなか改善策がみつからず、トホホな毎日でありました。

自分のスマホはかなり古いLG Optimus Chat L04-C(通称「おぷちゃ」)というやつです。調べてみたら発売日が2011年3月6日。地震の直前に発売されたんですね。思ってたより新しいかも。しかもこの躯体、ドコモから新品で買ったことは一度もありません。自分は基本的にデータ通信しか使わない(通話しない)ので、白ロムを買って、日本通信のデータ通信専用SIMをつっこんできました(最近になって通話SIMに替えましたが)。
で、出荷時のOSはAndroid 2.2なのですが、いまどき2.2で動作するアプリなんてほとんどないんじゃないかと思います。ということで、カスタムROMというやつでOSを上書いてAndroid 2.3を動かしています。2.3なら、だいたいのアプリが動いてくれるんですよ。もちろん、民間企業がつくってる特殊なアプリは特に4.0以上限定が多くて、泣かされますが(丸亀製麺アプリも動かない・・・「お使いの端末はこのバージョンに対応していません。」エラー・・・クーポン欲しいのにorz)。

で、先週からの不調。メールとかカレンダーとか同期してないはずのときにも、同期の矢印アイコンがステータスバーに出っ放し。しかもアプリがなぜか時々強制終了するし。でも最近新たにインストールしたアプリもないし、ストレージの容量も問題なさげ。しょうがないので、本体内のデータをワイプして、カスタムROMをインストールしなおし。いわゆる初期化ですね。まぁ、たまにメモリをクリーンにするのもよいことでしょう。
で、以前の状況を再度構築しようと思って、Google Play(旧マーケット)を動かして、諸基本アプリをダウンロードしようとしたら・・・「DF-DLA-15」なるエラーが出て一切ダウンロードできない!ネット上の情報では関連するアプリのキャッシュやデータを消去して再起動すればよいというので試してみるもやっぱし、ダメ。アカウントを替えればよいというので、本体を別アカウントと紐付けしてみたもののやはりダメ。
しゃぁないので、リセットからの初回起動時に新しくgoogleアカウントを作成してみたところ、やっとDF-DLA-15エラーが出なくなりました。これでplayからアプリをダウンロードできるようになったのですが、新しいアカウントだけでは、いま使っているgmailやカレンダーと同期できないので、従来のアカウントも追加。さて、これで一件落着のはずが・・・従来のアカウントとの同期が機能しない・・・なにやっても全然データが同期されない・・・。これじゃスマホ所持する意味ないっす。
ということで新しいアカウントで起動させることはギブアップ。play経由で再インストールできない・・・。でも、こういうときに助かるのが「予備機」の存在。あたしゃ、EF58-60&61のペアのように、予備機を持ってないとなんか不安なのです。ということで、予備機からapk extractorで諸アプリのapkファイルを抽出、本機にUSBケーブルでコピーしてインストールできました。ネットから野良apkをダウンロードしてもよいのでしょうが、やっぱ、怖いですわな。
さて、これで動き出すはずなのですが・・・なんかまた当初の問題現象が発生。同期アイコンが出っぱなしになってなんか重いんすけど・・・。
いろいろ原因を探ってみると、どうやら、「Play開発者サービス」なるファイルサイズ巨大のアプリが悪の根源ではないかと思われ。ほんとはイケナイことのようなんですが、エイヤーでこいつをアンインストールしてみました。で、数分後スマホを見てみると・・・またアプリのリスト欄に「Play開発者サービス」が復活してるwww。なにこれ?貞子?いや、どうやらgoogle playをインストールしていると自動的にこいつをダウンロードしてきてインストールしちゃうみたいなのです。しかもこれに依存しているアプリもいくつかあるみたいです。たとえば、スマホを紛失したときに強制的に動作停止させたり警報鳴らしたりする機能は、この開発者サービスに依存してるみたいですね。
さて困った・・・清水の舞台から飛び降りて高価なblackberryでも買うか・・・なんて逡巡しながら、何度も本体の初期化&無駄な試行錯誤を繰り返していたところ、気づいたらいつの間にか「Play開発者サービス」が復活せずに消えたままです。なんでだろう?と不思議に思っていたのですが、よく考えてみたら、アプリをすべてapkでインストールしたらplayを起動しなくていいんですね。で、playを起動してみると「Google Play利用規約」に同意してください、という小窓が出てくるのです。そう、この規約に同意さえしなければ、「Play開発者サービス」は勝手にインストールされないのです!ということで、play利用規約に同意していない状態を維持してさえいれば、「Play開発者サービス」の魔の手から逃れられるんですわ。

同意する、をうっかり押すと悲劇が・・・
ということで、いまのところ、リセット⇒apkでアプリインストール(でもplayはゼッタイ使わない)という段取りで、「Play開発者サービス」なしで運用できています。細かいことを言えば、プッシュ型の自動同期がうまく動作しないので、taskerで5分ごとに同期させてます。
開発者サービスが存在しないためにいくつか使えない機能があって、ちょっとだけ不便でもあるのですが、動作が不調をきたすよりはまだぜんぜんいいや、って納得できる程度の不便さです。
というか、デベロッパー側が勝手にアプリを本体に仕込むってなんか気持ち悪いですわな。まぁそのほうが「便利」になるのかもしんないですが。
2016年1月10日
ネット接続を遮断するソフトウェア、Freedomがアップグレードされたということで無料版をインストールしてみたものの、なんか使いづらそうなので、使うのやめました(有料版はよさげ)。で、もっと単純に、ネット接続を無効化するバッチファイルができないものか・・・と思ってつくってみました。ちなみにWindows 7です。
どうやら簡単で、
netsh interface set interface "ローカル エリア接続" disable
というコマンドラインをバッチファイルで叩けば無効化できるようです。なお、「ローカル エリア接続」の部分は、ご自身のPCの接続名(コンパネの「アダプターの設定の変更」で表示されるもの)と一致させる必要があります。
バッチファイルのつくりかたは・・・ここで説明することじゃないですね。わからない人はネットで検索してみてください(拡張子とかよくわからない人は、こういうカスタマイズは無難かもしれません)。
なお、管理者として実行しなければ動作しないので、batファイルを管理者として実行させる必要があります。
自分は、batファイルへのショートカットを作成し、ショートカットのプロパティの「詳細設定」ボタンから「管理者として実行」チェックボックスを選択することで、クリックするだけで管理者としてbatファイルを実行させるような仕掛けにしました。batファイルを直接ダブルクリックして自動的に管理者として実行させる方法もあるのかもしれませんが・・・よくわからんかったです。
上記で無効化スイッチができるわけですが、同様に
netsh interface set interface "ローカル エリア接続" enable
というbatファイル&ショートカットを作成すれば、有効化スイッチもつくれます。
とはいえ、これではネット接続が完全に遮断されてしまうわけですよね。生産性向上という目的のためには、ソーシャルメディアと暇つぶしサイトと電子メールだけを遮断してくれればよくて、論文データベースやクラウドストレージやwikipediaなどには接続できないと困るわけです。
じつはソーシャルメディアと暇つぶしサイトはAnti-Socialというソフトウェアで遮断できるので、ボクも普段は使っているのですが、これでは電子メールが遮断できないのですよ。とはいえ、上記のようにネット接続を完全に遮断しちゃうと、論文もストレージもアクセスできなくなるわけで・・・ちょうどいい無料ソフトがどこかにないかなぁ。
2015年12月9日
いやー、「学会タイマー」って、ほんと、大学教員にとって重要なツールですよね。
学会や研究会などで時間管理が重要なのは当然ですが、学生さんに研究調査を発表してもらうようなゼミ型の講義だと、各学生さんの発表時間を厳格に管理しないと不公平ですし、モタモタしていると時限の終了時刻を過ぎてしまいかねないわけです。昔は終了時刻を過ぎてもよかったのかもしれませんが、いまの忙しい学生さんたちは、次の時限の講義に出席しないといけないかもしれませんし、何はともあれ、よくないわけです。
長年、学会タイマーを活用してきたのですが、実は、某フリーソフトウェアの学会タイマーが、自分のノートPC上で大問題を起こして以来、安心して使えない日々が続いてきました。というのも、某国際学会で自分が司会だったとき、そのフリーウェアーの学会タイマーを使ったものの、どうやら誤作動を起こしてしまい、実際の残り時間よりも大幅に短い残り時間を表示していた(かなり早いペースで残り時間が減っていった)ため、本当はみんな20分くらい発表時間があったのに、10分強で発表を強制終了させてしまっていたという悲惨なことがあったのです。誤作動というよりは、そのフリーウェアーのバグのような気もしますが・・・無料ソフトなわけですから、文句を言うわけにもいきません。使った自分が悪いのです。
で、困っていたのですが、結局、自作することにしました。下にソースコードを貼っておきます。アイディアは以前から頭のなかにあったので、制作自体は40分ほどで終わりました。MS-ExcelのVBAを用いています。残り時間の表示はExcel上で行います。なお、windowsのみで動作します。Macユーザーのみなさんごめんなさい。最初のDeclareの部分を改造すれば動くと思います。また、いろいろ改造の余地がありますので、ご自由にお試しください。あと、マクロ/Subの呼び出しは、エクセルの「フォーム」で「ボタン」をつくって、クリックで呼び出せるようにしておくと便利ですよ(ここまで読んでいる人ならそんな説明いらないと思いますが・・・)。

【追記】エクセルのファイルもダウンロードできるようにしました。こちらからどうぞ。ただし、VBA/マクロが起動するためにはセキュリティレベルを下げる必要があるかもしれません。また、もちろん自分はウイルスなんて仕込みませんが、マクロが起動できる環境にするということは若干の脆弱性を意味しますので、そこは自己責任でよろしくおねがいします。
Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
Declare Function GetAsyncKeyState Lib “User32.dll” (ByVal vKey As Long) As Long
Declare Function BeepAPI Lib “kernel32.dll” Alias “Beep” (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Sub updatetime()
‘–開始音–
Call BeepAPI(500, 400)
‘———————-
‘ Excel上では time という名前をつけたワークシートに残り時間の表示や設定値の入力を行います。
‘ (ワークシートの名前はなんでもかまいません)
‘ セルB2(Cells(2,2))に大きく残り時間を表示します
‘ 自分は400ptのArialが表示されるセルの幅・高さに設定していますが
‘ 利用するノートPCの画面解像度にあわせて適宜調整してください。
‘———————-
‘–表示色を黒色に戻す–
Cells(2, 2).Font.ColorIndex = 1
‘–念のためセルA10に開始時間を表示(代入)します
Sheets(“time”).Cells(10, 1) = Time()
‘–開始時間はStart_timeという変数に格納します
Start_time = Time()
‘———————-
‘ セルA7(Cells(7,1))に発表時間を分単位で記入しておきます
‘ セルA15(Cells(15,1))に、何分前に予鈴を鳴らすか記入しておきます
‘———————-
‘–終了時間はEnd_timeという変数に、DateAdd関数を用いて格納します
End_time = DateAdd(“n”, Sheets(“time”).Cells(7, 1), Start_time)
‘–予鈴を鳴らすタイミングの残り時間をBell1_timeという変数に格納します。
Bell1_time = Sheets(“time”).Cells(15, 1)
‘–念のためセルA12に終了時間を表示(代入)します
Sheets(“time”).Cells(12, 1) = End_time
‘–終了時間になるまでループを繰り返します
Do
‘–残り時間を秒数で計算して、分部分と秒部分に分離します
Remain_time = DateDiff(“s”, Time(), End_time)
Remain_min = Remain_time \ 60
Remain_sec = Remain_time Mod 60
‘–秒が1桁だと見栄えが悪いので1桁の場合は0を追記します
If Len(Remain_sec) = 1 Then Remain_sec = “0” & Remain_sec
‘–セルB2に残り時間を代入します
Sheets(“time”).Cells(2, 2) = Remain_min & “:” & Remain_sec
‘–予鈴を鳴らすタイミングの処理、音を鳴らし色を赤にします
If (Remain_min = Bell1_time) And (Remain_sec = “00”) Then
Call BeepAPI(500, 700)
Cells(2, 2).Font.ColorIndex = 3
End If
‘–無限ループするとCPUを消耗するので500ms待機させます(変更可)
Sleep 500
‘———————-
‘ Shiftキーが押されたらタイマーを止めます
‘ 発表が早く終わったときにはShiftを押しましょう
‘ 別のキーでもかまいませんので下の 16 を適切なASCIIコードに変更してください
‘———————-
If GetAsyncKeyState(16) <> 0 Then End
‘–現時点が終了時刻を越えるまでループします
Loop While End_time >= TimeValue(Time())
‘–終了の警告音を鳴らします
Call BeepAPI(350, 1200)
End Sub