Pages - Menu

2018-06-09

コマンドプロンプトでコマンドが実行できない

初心者向けコンテンツです。

「ネットで調べたら、コマンドプロンプト(cmd)でコマンドを入力するよう書いてあるけど、いざ叩いてみると以下のメッセージが出力されて、コマンドが実行できない。」

'[コマンド名]' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

コマンドラインの仕組み

Windowsに限った話ではないですが、ここではWindowsを前提として書きます。

コマンドプロンプトでコマンドを入力した場合、コンピュータは環境変数%PATH%に登録されているディレクトリを参照して、コマンド名に該当する実行ファイルがあるかどうかを確認します。このとき、拡張子は読み飛ばされます(a.exeであれば、aというコマンドで実行される)。

PATHの値を確認する方法はいくつかあります。

  • cmd上でpathと入力して実行
  • cmd上でecho %PATH%と入力して実行
  • 「システムのプロパティ」>「環境変数」を開き、PATHの値を確認

実行したいコマンドのパスがこの中に入っていないと、「コマンドが見つからない」という状態となり、前述のエラーメッセージが出力されます。
この状態を「パスが通っていない」といいます。

解決策1:パスを通す

「環境変数」を開き、PATHに必要なディレクトリ名を追加します。
セパレータはセミコロン(;)です。スペースは入れないようにしましょう(間違えてスペースを入れてコマンドが見つからないことがしばしばあります)。

解決策2:実行ファイルをフルパスで指定する

一時的にコマンドを実行したいだけであれば、コマンド名を実行ファイル名(フルパス)に置き換えれば実行できます。

2016-12-04

EFIでブートできるUSBディスクの作成

EFIでブートできるUSBディスクの作成方法。今回はXubuntu 16.10を使用。

EFIブート用のパーティションの作成

ファイルシステムはfat16または32。適当な位置にマウントしておく(ここでは/mnt/usbとする)。

grub起動ファイルの作成

sudo grub-install --target=x86_64-efi --efi-directory=/mnt/usb --bootloader-id="xubuntu" --recheck --removable /dev/sdXX

sdXXはインストールするメディアのデバイス名。

一応update-grubも行ったが、必要かどうかは不明。

2016-09-27

音楽再生とスリープタイマーの自動化

音楽プレーヤーの多くはスリープタイマー機能があり、中にはOSのスリープ・シャットダウンをできるものがあります。しかし、毎日寝る前に音楽を流しているとしたら、その都度スリープタイマーを設定するのは手間です。そこで、ワンクリックで設定できるバッチを作成してみました。

STEP1:プレイリストファイルの作成と拡張子の関連付け

使用している音楽プレーヤーで、再生したい音楽のプレイリストを作成します。

作成したプレイリストファイルに対して、右クリック -> 「プログラムから開く」 -> 「既定のプログラムの選択」で音楽プレーヤーを選択し、拡張子の関連付けを行います。

STEP2:PSToolsの準備

OSのシャットダウンであれば、標準のwindowsのコマンドで可能ですが、スリープを行うにはPSToolsが必要です。Windowsの公式からPSToolsをダウンロードし、任意のディレクトリに展開します。

STEP3:バッチファイルの作成

音楽ファイルの再生と、psshutdownのコマンドを実行するバッチファイルを作成します。ファイルパス、ファイル名は適宜変更してください。この例では10分(600秒)後のスリープを設定しています。

@echo off
cd "C:\playlist"
start test.playlist
cd "C:\PSTools"
psshutdown.exe -d -c -t 600
@pause

STEP4:シャットダウンキャンセル用のバッチファイル作成

シャットダウンをキャンセルするときのバッチファイルを作成します。

@echo off
cd "C:\PSTools"
psshutdown.exe -a
@pause

STEP5:ショートカット(管理者で実行)の作成

上記バッチファイルは管理者権限で実行しないと動作しません。常に管理者で実行するよう、ショートカットを作成します。

通常の手順でバッチファイルのショートカットを作成後、右クリック -> 「プロパティ」 -> 「ショートカット」タブ -> 「詳細設定」 -> 「管理者として実行」にチェック を設定します。

以上で設定完了です。バッチファイルを実行して、プレイリストの再生とスリープが実現できます。

ついでに、Bluetoothスピーカー等で、切断後一定時間で電源OFFができるものがあると便利です。

再帰的なcssの定義

ブログのcss設定を見直してみました。

要件は以下の通り。

  • コード記述の手間を減らしたい(=可能な限りclassは指定しなくて済むようにする)
  • 見出しごとにインデントを設定したい

今まではdiv毎にclassを指定していましたが、以下のように記述することで、再帰的にdivの設定ができました。

div.entry-content div{
    margin-left: 10px;
}
div.entry-content p{
    margin-left: 10px;
}

2016-09-24

String型splitの仕様

今日の開発で引っかかったのが、splitメソッド。
以下の例では、splitの結果である配列strsのlengthは2です。
String str ="ab@cd@ef";
String[] strs = str.split(str);
System.out.println(strs.length); // --> 2
このことから、split結果のlengthはいつでも「(文字列に含まれる区切り文字の数)+1」になると考えていました。
しかし、区切り文字が末尾に来るときは、区切り文字以降の空白文字はカウントされないようです。
以下の例では、strsのlengthは1になります。
String str ="ab@cdef@";
String[] strs = str.split(str);
System.out.println(strs.length); // --> 1
逆に先頭に区切り文字がある場合はカウントされます。
処理の仕組みとしては理解できるが、仕様としていまいち統一感がない気がしますね。

2016-09-10

C開発環境の構築:Eclipse CDT

Eclipse CDTを用いたC開発環境の構築手順。

必要なもの

統合開発環境としてEclipseが必要ですが、それ以外にコンパイラが必要です。 コンパイラは種々ありますが、今回はCygwinに同梱されているgccを使用します。

1.Eclipse CDTのインストール

Eclipse公式からEclipse C/C++ IDE for Neon等をダウンロード・インストールします。既にEclipseを持っている場合は、「ソフトウェアのインストール」からインストールできるようです。

2.Cygwinのインストール

Cygwinをインストールします。デフォルトでは、最小限のモジュールしかインストールされないことに注意。インストール時にパッケージを指定する画面がありますので、gcc、g++、makeのコマンドは選択しておきます。

パッケージの選択を間違えた場合は、再度インストーラを実行することでパッケージ選択ができます。

3.Ecpliseの設定

プロジェクトの設定をします。(追記予定)

トラブルシューティング

インクルードファイルのパス設定

標準ライブラリ(等)で警告が出ている場合の対処方法。

プロジェクトのプロパティを開き、「C/C++ general」>「Preprocessor Include Paths, Macros」>「Providers」タブ>「CDT GCC Built-in Compiler Settings [Shared]」にチェックを入れる。

参考文献

Goodbye World Eclipseでのインクルードファイルやライブラリファイルパスの設定方法

2016-08-27

[Android] ThreadとHandler

Android開発をしているうちにつまづくのはThreadとHandlerであろう。
基本とAndroidにおける扱いをまとめる。

Thread

基本的にコードに書いた一連の処理は、1つのThread内で一本の流れとして逐次的に処理される。並列的に処理をしたい場合や、時間の掛かる処理を行いたい場合などは別のThreadを立てて実行する。

Androidでは、ネットワークアクセス等、時間の掛かる処理はActivity等を実行しているUIThreadでは許可されていないことに注意する。

Threadは2通りの方法でつくることができる。

new Threadする

Thread thread = new Thread(new Runnable( /* ★ */ ){});

classをimplements Runnableする

class hoge implements Runnbale { /* ★ */}

いずれの場合も、上の★の中でrun()をOverrideして、実行する処理を記載する。
また、Threadを実行には、Threadのstart()メソッドを呼び出す。

Handler

HandlerはThread間の通信を可能にする。postメソッドを用いて、Handlerのインスタンスを作成したThreadに対してアクセスする。また、Handlerの引数にLooperを用いて、任意のスレッドにアクセスする使い方もできる。

Androidでは、UIThread以外からUI部品にアクセスすることができない。そこで、別ThreadからUIThreadに対してHandlerを用いてアクセスする。

Handler guiThreadHandler = new Handler();
new Thread = new Thread( new Runnable(){
    guiThreadHandler.post(new Runnable(){
        @Override
        public void run(){
            //処理
        }
    }
 }).start(); 

参考

2016-08-16

実機で開発するAndroidアプリ

Android Studioを使用してAndroidアプリ開発環境を設定する。
なお、今回はHDD容量も少なく、RAMもあまり積んでいないモバイルPC向けに、実機を用いた最小限の構成を目指す。

設定概要

この設定では、実機にて実行/デバッグを行い、ファイスサイズが大きく、また実行に時間が掛かるAndroid VMは使用しない。

Android Studioのインストール

Android Studioのページから最新のインストーラをダウンロードしてインストール。
インストール時には「カスタム」を選択し、Android Virtual Deviceのチェックを外す。
JDKは最新のものをインストールして、JAVA_HOMEにインストールパスを設定しておくこと。

SDKの設定

Tools>Android>SDK Managerから「Launch Standalone SDK Manager」を開く。
以下をインストールする。

  • 実機と一致するAPIバージョンのSDK Platformを選択しインストールする。
    (Android 4.4であれば、「Android 4.4.2 (API19)」を選択)
  • Google USB Driver

実機の設定

設定>端末情報>ビルド番号 を連打して開発者向けオプションを表示する。
開発者向けオプションで「USBデバッグ」を有効にする。

実機での実行

実行/Runで「Connected Device」で実機を選択する。

トラブルシューティング

決まってこういうものは一発ではうまく行かないため、いろいろ試行錯誤したときのメモ。

Connected Deviceに端末が表示されない(端末が認識されない)

正しいドライバがインストールされていないことが問題。
User以下隠しフォルダのAppData\Local\Android\sdk\extras\google\usb_driverのandroid_winusb.infの中の[Google,NTx86]と[Google.NTamd64]の2箇所に追記。
追記内容は以下。
1行目にコメントアウト(;から開始)でデバイス名
2行目に%SingleAdbInterface% 実機のVIDとPIDを設定(デバイスマネージャで確認)
3行目に%CompositeAdbInterface% 実機のVIDとPIDを設定、末尾は他と同様(&MI_01等)
実機のドライバのインストール(更新)で、上記パスをドライバの場所に指定。

コンパイルは成功するが実行時にエラー

大抵の場合はコンパイルバージョン、ビルドツールバージョンの設定間違い。
プロジェクト右クリック>「Open Module Settings」から以下の項目を変更してみて、適切な設定を探す。
・Complie Sdk Version …最新のGoogle APIが良い?「Google APIs(API23)」を設定。
・Build Tools Version …バージョンによって挙動が異なる?23.0.3を設定。
・Min Sdk Version …任意に設定。

2016-07-31

スマホ選びのポイント

スマホ買い替えを検討したため、そのときに考えたポイントのまとめ。
他とは若干観点が異なると思われる。

まずは、現在のスマホの利用状況を考える。

利用状況
・主に利用するアプリはLINE、Gmail、RSSリーダー、Yahooニュース、将棋・麻雀などの対局アプリ。
・ソーシャルゲームはしない。
・PC接続用にテザリングを多用。
・ヘビーユーザーではないが、そこそこユーザー。
・今のスマホの使用期間は2年3ヵ月ほど。

上記踏まえ、買い替える際のポイントは以下かな、と思う。

予算

まず、予算は25,000~35,000円くらいが良い。

サイズは5インチ以下

5.5インチ以上はかなり大きい印象を受ける。
画面は見やすいかもしれないが、持ち運びに不便では困る。

そこそこのCPU性能

スペックを求められるゲームはしないため、そこまでCPU性能は重要ではないが、
それでもアプリを多く起動しているとき等に、動作がカクカクするのは嫌である。
そのため、スナドラ600以上くらいはほしい。

バッテリー交換の可否

スマホ本体自体は、画面を割ったりしない限り、スペック的には2年以上は軽く使える。
その際にネックになるのがバッテリーであり、バッテリー交換はできたほうが良い。
可能ならユーザーで電池交換できるもの。そうでない場合は、メーカーでの交換(修理依頼)の値段を確認。

起動等を設定できるユーティリティ

後から追加はできるかもしれないが、起動時のアプリを抑制できる等のユーティリティツールが揃っていれば便利。
見た感じではASUSが非常に優秀に見える。

カメラ性能

どうしてもほしいというほどではないが、あれば良い。

GPS精度

これも必須ではないが、ものにってよってはGPS精度がひどく低いらしい。
最低限の精度はほしいところ。

…とここまで書いて、これにマッチするものはなかなかない。
Zenfone2 lazerはかなりマッチしているように思うが、若干パワーに不安である。Zenfone3に期待したい。

2016-02-22

MVNO移行まとめ

※本記事の内容によって生じた如何なる損害・損失についても責任は負いません。
本記事を参考に作業を行う場合は自己責任でお願いします。

格安SIM業界もそろそろ落ち着いてきた感があったので、私もMVNOに移行してみました。
MVNO移行時に調べたことや注意点等のまとめ。

総括

総合的に、移行して良かったと思っています。
移行のモチベーションは、料金の節約、テザリングのための通信量制限の上限up、技術者としての単純な興味。
いずれについても満足しています。

メリット

MVNOのメリットはとにかく通信料が安いこと。
テザリングメインの筆者の環境では、制限通信量が7GB→10GBにできたのも大きいです。
また、余った通信量の持ち越しやシェア等、フレキシブルに使えるため、実際に使える通信量はプランよりも多め。 その他は、キャリアのアプリ等をアンインストール/無効にできる等。

デメリット

MVNOのデメリットとしてまず挙げられるのは、通信速度が(キャリアと比べて)遅いこと。
ただし、現状では、気持ち「遅いかな?」と思うことがたまにある程度で、ほとんど気になりません。
また、テザリング、GPS等で一部問題がでることがあります。
テザリングについては、adb等を使って修正は可能です。

意外と知らなかったこと

SVMOや機種にもよりますが、SIMフリースマホを購入せずとも、キャリアのスマホを使用可能であること。
大抵はSVMOのホームページで対応有無を確認できます。

MNPで転出する際には、移行前の契約者名義と、移行後の契約者名義が一致していないといけないこと。
もともと家族でキャリアに入っていた場合等は、MNP番号を発行する前に名義変更が必要になります。

注意点

キャリアのメール・電話帳はバックアップしておくこと。
名義変更した段階でデータが消えることもあります。

SIMフリースマホ

結局もとから使っていたスマホを継続利用しましたが、以下のスマホの購入を検討しました。

Liquid Z530

メーカー:Acer(台湾) 価格:¥22,097
かなりサクサク動作との評判。カメラ性能等は残念らしいですが、特に求めていないため問題なし。

Ascend Mate7 SIMフリー

メーカー:Huawei(中国) 価格:¥29,980
スペックが全体的に優秀。

SAMURAI MIYABI SIMフリー

メーカー:FREETEL(日本) 価格:¥18,300
価格安め、コスパ高。

参考

2014-02-09

[NetBeans] ライブラリとNoClassDefFoundError

他のプロジェクトをライブラリとして追加すると、java.lang.NoClassDefFoundErrorになってしまう。
ライブラリとなるプロジェクトを右クリック、「生成物を削除して構築」で読めるようになる可能性あり。

2013-12-29

Starting out Windows Powershell

Windows Powershell を始めるにあたってのメモ

ダウンロード

Win7以上の対応で最新版はPowershell4.0 (2013.12.29現在)。Windows Management Framework 4.0パッケージに含まれている。
Microsoft Download Center - Windows Management Framework 4.0
なお、Microsoft .NET Framework 4.5 が必要。
Microsoft Download Center - .NET Framework 4.5

とりあえずここまで。

2013-12-25

Win7の小ネタ

Windows7で地味に便利だと思う小ネタ。

エクスプローラー

  • Ctrl+フォルダをダブルクリック:新しいウィンドウで開く
  • Shift+右クリック:拡張メニューを表示(「パスとしてコピー」などが便利)

タスクバー

  • アイコンをShift+クリック:新しいインスタンスを開く
  • 起動してないアイテムのアイコンをShift+右クリック:通常のファイルに対するコンテキストメニューを表示
編集中...

PukiWiki Advance セットアッップのメモ

自前サーバでPukiWiki(Advance)をセットアップしたときのトラブルのメモ。

スペック
Windows7(x86), Apache2.4, PHP 5.4.23, PukiWiki Advance v1.0.3
(PHP5.5でPukiWikiAdv1.0.3を動かそうとするとwarning:preg_replaceがログされる。PHP5.4を推奨)

設定確認に関する基本的な事項

  • 必要なモジュールを公式ページでチェックし、正しくロードされているか確認する。
    モジュール設定後、正しくロードされている場合はphpinfo()でモジュール名がついたテーブルが表示される。
  • Apacheの/log/error.logを確認する。
  • pukiwiki/webroot/index.phpをエディタで開き、DebugModeを有効にする。
    index.phpを開いて、エラーがある場合は表示される。

index.php以外が表示されない

http://xxx/index.php は表示されるが、その他のページへのリンクでは、403やファイルの一覧が表示されてしまう。
次のようなパターンがある:

コマンドページが表示されない

たとえばログインページ(http://xxx/?cmd=login)に飛ぼうとして、403やDirectoryのファイル一覧が表示されてしまう場合は、はてなマーク以降のコマンド(cmd=login)がindex.phpに渡せていない。

解決法

URLを"http://xxx/index.php?cmd=login"に手動で変更すると正しく表示される場合は、DirectoryIndexの問題。
httpd.confまたは.htaccessでwebrootディレクトリのDirectoryIndexをindex.phpに変更する(以下参照)。

<IfModule dir_module>
      DirectoryIndex index.php
  </IfModule>

他ページが表示されない

例えばトップページのURLが"http://xxx/FrontPage"と表示される場合。

解決法

URLを"http://xxx/?FrontPage"(または"http://xxx/index.php?FrontPage)に手動で変更して正しく表示される場合は、wiki-data/pukiwiki.ini.phpファイルの設定が間違っている可能性がある。

  1. pukiwiki.ini.phpをエディタで開き、223行目あたりの$static_urlの値を0にする。
    これによって、/FrontPageが/?FrontPageのように出力されるようになる。
  2. Apacheのconf/httpd.confをエディタで開き、rewrite.moduleのロードをコメントアウトする。
    #LoadModule rewrite_module modules/mod_rewrite.so

その他

正しく表示されない場合、関係があるかもしれない設定項目。

rewriteモジュール

URLrewrite機能を利用しないならば(しないほうが無難だと思う)、rewriteモジュールはロードしないようにする(webroot/.htaccess内のIfModule rewrite.cで呼び出されるため)。

mbstringモジュール

php.iniを開き、module_mbstringのコメントアウトをはずす。さらに下のほうにある[mbstring]以降の設定項目を適宜コメントアウトを外して有効にする。

php.iniが反映されない

php.iniを編集しても、Apache上で反映されないことがある。
以下の項目をチェックする:
・httpd.confのPHPIniDirの参照先
・httpd.confのphp5apache2_4.dllモジュール(モジュールの設置場所は利用するphpのディレクトリ、たまにモジュールに問題があり接続できない?)

2013-12-16

SPARQL Queryについて:rdfs:label

リテラル値(rdfs:labelの値など)を含むクエリがうまくいかないことがある。
(OWL DL、Protege3.4.8)

たとえば次のようなリソースがあったとする。

<owl:Class rdf:about="http://test#component">
  >rdfs:label xml:lang="en"<component>/rdfs:label<
</owl:Class>
これに対して、次のクエリを投げてもヒットしない(ことがある)。
SELECT ?subject ?object
WHERE { ?subject rdfs:label 'component'@en }

確実なのはFILTERを使う方法で、これならばヒットする。

SELECT ?subject ?object
WHERE { 
?subject rdfs:label ?object. 
FILTER regex (str(?object), "component") 
}

2013-12-15

Dropboxを強制同期

インターネットに接続しても、Dropboxの同期に時間がかかることがある。
原因は不明だが、インターネットへの接続がDropbox同期のトリガーになっていないためであると考えられる。

解決策

Dropboxプロセスを再起動

Dropboxを一旦終了しふたたび起動することで、同期を促すことができる。
以下はDropboxプロセスを再起動するバッチファイル。

restartDropbox.bat
@echo off
Taskkill /IM Dropbox.exe /F
timeout /t 2
start "" "(Dropboxのインストールディレクトリ)\Dropbox.exe"
@pause

Dropboxにファイルを追加(未実装)

この記事を書いていて思いついたアイディア。筆者のメモ。
Dropbox同期フォルダ内のファイルの変更(追加)が、同期のトリガーとなりうる可能性が高い。
同期ファイルの書き換えをすることで同期を促すことができる(かもしれない)。
後日確認予定。

2013-12-10

ブラウザに渡したフラグメント識別子が無視される問題

一部の環境(OS・ブラウザ等による)で起こる問題で、フラグメント識別子を含むURIをブラウザに渡しても、#以降が無視されてしまうことがある。

WEBページへのショートカット、JavaでのDesktop.Browse()等でブラウザにURIを渡したときに起こる。
直接打ち込んだURL、WEBページからのリンクでは、問題なくフラグメント識別子を認識する。
Windows環境で多いようだ。

原因は不明だが、おそらくはウィンドウシステムの問題であり、解決は極めて困難だと思う。

代替案

一時的にダミーページを表示させ、フラグメント識別子を含む目的のURIへ自動転送する。

例:temp.html (目的のURL:http://nanaowls.blogspot.jp/test.html#aaa)

<HTML>
    <HEAD>
        <meta http-equiv="refresh" content="0;URL=http://nanaowls.blogspot.jp/test.html#aaa">
    </HEAD>
    <BODY></BODY>
</HTML>

参考

OTN Community Desktop.browse() won't show URI fragments on Windows

2013-11-19

Jena エラーメッセージ対処法

Apache Jenaのエラーメッセージの説明と対処法。

already closed

model操作時に現れるエラーメッセージ。
model.close() が実行されると、リソースが開放されてしまい、それ以降ではmodelを参照できない。
スレッドでclose()が呼び出されていないかどうか要チェック。
Exception in thread "main" com.hp.hpl.jena.shared.ClosedException: already closed

2013-10-30

JavaでSQLiteを使う

RDBM(Relational DataBase Management System)には、MySQLをはじめいくつかのソフトウェアがあるが、個人で開発を行うような小中規模なアプリケーションではSQLiteがオススメだ。

Javaからデータベースを操作するためには、それぞれのRDBM用のJDBC(Java DataBase Connectivity)というAPIを用いる。

SQLiteをコマンドラインで使う

SQLite公式DownloadPageから環境に合わせた"command-line shell"をダウンロードし、適当なディレクトリに解凍する。インストールは以上。

sqlite3.exeを実行し、コマンドを叩く。
コマンドについては参考URLを参照。

SQLiteをJavaから呼び出す

SQLite-JDBCのダウンロードページから最新バージョンの*.jarファイルをダウンロードする。適当なディレクトリに解凍する。
classファイル実行時のクラスパスにjarファイルを含める(IDEではプロジェクトのライブラリにjarファイルを追加する)。

SQLite-JDBCのサンプルプログラムがわかりやすい。


参考

SQLite公式
愚鈍人 JavaとSQLiteデータベース
DBOnline SQLite入門
sqlite-jdbc配布ページ

2013-10-23

Jarファイルのメインクラスを確認する

Jarファイルのメインクラスの確認の仕方

  1. 次のいずれかの方法でJarファイルを解凍する

    • 拡張子を.jarから.zipに変更して解凍
    • コマンドラインで以下のコマンドを実行
      >jar tvf JarTest.jar
  2. META=INF\MANIFEST.MF

    を開く

  3. Main-Class:
    以降に書かれているのがメインクラスである。
    メインクラスが指定されていない場合は、手動でメインクラスを記述することで、コマンドラインから実行できるJarファイルにすることができる。